diff --git a/GQ_URP/GQ/Assets/ZLog/New Folder.meta b/GQ_URP/GQ/Assets/Adam/DataSheets.meta similarity index 77% rename from GQ_URP/GQ/Assets/ZLog/New Folder.meta rename to GQ_URP/GQ/Assets/Adam/DataSheets.meta index 7532e91f2..443c05dfa 100644 --- a/GQ_URP/GQ/Assets/ZLog/New Folder.meta +++ b/GQ_URP/GQ/Assets/Adam/DataSheets.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cadcc32d02c4ad64bac746b421b4bcdb +guid: 703b0f9330a621d4e90f92bdaac70f95 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/GQ_URP/GQ/Assets/Adam/DataSheets/整理机柜U位台账.xlsx b/GQ_URP/GQ/Assets/Adam/DataSheets/整理机柜U位台账.xlsx new file mode 100644 index 000000000..3c144d141 Binary files /dev/null and b/GQ_URP/GQ/Assets/Adam/DataSheets/整理机柜U位台账.xlsx differ diff --git a/GQ_URP/GQ/Assets/Adam/DataSheets/整理机柜U位台账.xlsx.meta b/GQ_URP/GQ/Assets/Adam/DataSheets/整理机柜U位台账.xlsx.meta new file mode 100644 index 000000000..8d936d443 --- /dev/null +++ b/GQ_URP/GQ/Assets/Adam/DataSheets/整理机柜U位台账.xlsx.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4f35fd7f0e1447449a493e7e1759e4f4 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Adam/Scripts/DeviceData.asset b/GQ_URP/GQ/Assets/Adam/Scripts/DeviceData.asset index 03979e0f9..24cdffe1e 100644 --- a/GQ_URP/GQ/Assets/Adam/Scripts/DeviceData.asset +++ b/GQ_URP/GQ/Assets/Adam/Scripts/DeviceData.asset @@ -583,5 +583,35 @@ MonoBehaviour: deviceNum: "72\u82AF" isInCabinet: uPos: + - ID: 94 + deviceType: + manufacturer: + deviceNum: + isInCabinet: + uPos: + - ID: 95 + deviceType: + manufacturer: + deviceNum: + isInCabinet: + uPos: + - ID: 96 + deviceType: + manufacturer: + deviceNum: + isInCabinet: + uPos: + - ID: 97 + deviceType: + manufacturer: + deviceNum: + isInCabinet: + uPos: + - ID: 98 + deviceType: + manufacturer: + deviceNum: + isInCabinet: + uPos: path: "Assets/Adam/DataSheets/\u6574\u7406\u673A\u67DCU\u4F4D\u53F0\u8D26.xlsx" sheetName: "\u6A21\u578B\u5E8F\u53F7" diff --git a/GQ_URP/GQ/Assets/Adam/Scripts/DragController.cs b/GQ_URP/GQ/Assets/Adam/Scripts/DragController.cs index 300b8a44b..17cc50d49 100644 --- a/GQ_URP/GQ/Assets/Adam/Scripts/DragController.cs +++ b/GQ_URP/GQ/Assets/Adam/Scripts/DragController.cs @@ -83,14 +83,15 @@ public class DragController : MonoBehaviour, IBeginDragHandler, IEndDragHandler, EndDragAction?.Invoke(targetObject); CountUPos(); //模型错误微调 - if (oriObjectPrefab.name == "1" || oriObjectPrefab.name == "14" || oriObjectPrefab.name == "15" || oriObjectPrefab.name == "83") - { - GameManager.Inst.MoveParentAndChildren(targetObject.transform, new Vector3(-0.25f, 0, 0)); - } - else if (oriObjectPrefab.name == "18") - { - GameManager.Inst.MoveParentAndChildren(targetObject.transform, new Vector3(0, 0f, -0.02f)); - } + GameManager.Inst.Model_error(oriObjectPrefab.name, targetObject.gameObject); + //if (oriObjectPrefab.name == "1" || oriObjectPrefab.name == "14" || oriObjectPrefab.name == "15" || oriObjectPrefab.name == "83") + //{ + // GameManager.Inst.MoveParentAndChildren(targetObject.transform, new Vector3(-0.25f, 0, 0)); + //} + //else if (oriObjectPrefab.name == "18") + //{ + // GameManager.Inst.MoveParentAndChildren(targetObject.transform, new Vector3(0, 0f, -0.02f)); + //} targetObject.GetComponent().F2(); currentUPosItem = null; targetObject = null; diff --git a/GQ_URP/GQ/Assets/Best HTTP.meta b/GQ_URP/GQ/Assets/Best HTTP.meta new file mode 100644 index 000000000..679eab5c4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 33b0e9b090de2a34faf28eae42076320 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/BestHTTP.asmdef b/GQ_URP/GQ/Assets/Best HTTP/BestHTTP.asmdef new file mode 100644 index 000000000..ee22308bd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/BestHTTP.asmdef @@ -0,0 +1,7 @@ +{ + "name": "BestHTTP", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": true +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/BestHTTP.asmdef.meta b/GQ_URP/GQ/Assets/Best HTTP/BestHTTP.asmdef.meta new file mode 100644 index 000000000..3e30a13c2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/BestHTTP.asmdef.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9069ac25d95ca17448a247f3bb1c769f +timeCreated: 1571210040 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Documentation.txt b/GQ_URP/GQ/Assets/Best HTTP/Documentation.txt new file mode 100644 index 000000000..d0ee1edd0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Documentation.txt @@ -0,0 +1 @@ +The latest documentation can be read online here: https://benedicht.github.io/BestHTTP-Documentation/ \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Documentation.txt.meta b/GQ_URP/GQ/Assets/Best HTTP/Documentation.txt.meta new file mode 100644 index 000000000..5129723e9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Documentation.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1e156a48f38d6f04f9c643063bcaf535 +timeCreated: 1571210052 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples.meta new file mode 100644 index 000000000..de54179f3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 79615ddf0d3b0fd4b9b5ebe8943947a9 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP.meta new file mode 100644 index 000000000..f01a2ffff --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 56badbd91a344cf49b819809ce60c94a +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/AssetBundle.prefab b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/AssetBundle.prefab new file mode 100644 index 000000000..3470c678f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/AssetBundle.prefab @@ -0,0 +1,593 @@ +%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: 1944314068052120} + m_IsPrefabParent: 1 +--- !u!1 &1251304880022356 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224766109861186050} + - component: {fileID: 222007061184830686} + - component: {fileID: 114332842110793280} + - component: {fileID: 114741082604224458} + - component: {fileID: 114821562994013518} + - component: {fileID: 114970735310707698} + - component: {fileID: 114169851664053792} + m_Layer: 5 + m_Name: Start Download Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1298646758441480 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224796360726838160} + - component: {fileID: 222450923967724424} + - component: {fileID: 114756570423530596} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1548055376625982 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224222599636736864} + - component: {fileID: 222263229427737546} + - component: {fileID: 114864362160119752} + - component: {fileID: 114863480533508966} + m_Layer: 5 + m_Name: RawImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1549333168510042 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224641546219099906} + - component: {fileID: 222240980090431082} + - component: {fileID: 114444815419025578} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1928372766581374 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224044084468067872} + - component: {fileID: 222379004667598028} + - component: {fileID: 114378960042926580} + m_Layer: 5 + m_Name: Status Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1944314068052120 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224637431015742208} + - component: {fileID: 114589682599655862} + - component: {fileID: 114248578834748736} + m_Layer: 5 + m_Name: AssetBundle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114169851664053792 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1251304880022356} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114248578834748736 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1944314068052120} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03eab9c6191c5cd4c9613084e817bd29, type: 3} + m_Name: + m_EditorClassIdentifier: + Category: HTTP + DisplayName: Asset Bundle + Description: 'A small example that shows a possible way to download an AssetBundle + and load a resource from it. + + + Features demoed in this example: + + -Using HTTPRequest without a callback + + -Using HTTPRequest in a Coroutine + + -Loading an AssetBundle from the downloaded bytes + + -Automatic Caching' + _path: /AssetBundles/WebGL/demobundle.assetbundle + _assetnameInBundle: 9443182_orig + _statusText: {fileID: 114378960042926580} + _rawImage: {fileID: 114864362160119752} + _downloadButton: {fileID: 114741082604224458} +--- !u!114 &114332842110793280 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1251304880022356} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114378960042926580 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1928372766581374} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Status +--- !u!114 &114444815419025578 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1549333168510042} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Asset Bundle Example +--- !u!114 &114589682599655862 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1944314068052120} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114741082604224458 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1251304880022356} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114332842110793280} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114248578834748736} + m_MethodName: OnStartDownloadButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114756570423530596 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1298646758441480} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Start Download +--- !u!114 &114821562994013518 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1251304880022356} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114863480533508966 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1548055376625982} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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!114 &114864362160119752 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1548055376625982} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!114 &114970735310707698 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1251304880022356} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!222 &222007061184830686 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1251304880022356} +--- !u!222 &222240980090431082 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1549333168510042} +--- !u!222 &222263229427737546 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1548055376625982} +--- !u!222 &222379004667598028 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1928372766581374} +--- !u!222 &222450923967724424 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1298646758441480} +--- !u!224 &224044084468067872 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1928372766581374} + 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: 224637431015742208} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224222599636736864 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1548055376625982} + 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: 224637431015742208} + 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.5, y: 0.5} +--- !u!224 &224637431015742208 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1944314068052120} + 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: 224641546219099906} + - {fileID: 224044084468067872} + - {fileID: 224222599636736864} + - {fileID: 224766109861186050} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224641546219099906 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1549333168510042} + 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: 224637431015742208} + 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.5, y: 0.5} +--- !u!224 &224766109861186050 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1251304880022356} + 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: 224796360726838160} + m_Father: {fileID: 224637431015742208} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 300, y: 0} + m_SizeDelta: {x: 590, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224796360726838160 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1298646758441480} + 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: 224766109861186050} + 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.5, y: 0.5} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/AssetBundle.prefab.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/AssetBundle.prefab.meta new file mode 100644 index 000000000..3a7ec35ad --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/AssetBundle.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0a56a1df7e0b38848bb9bf237a577478 +timeCreated: 1571226561 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/AssetBundleSample.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/AssetBundleSample.cs new file mode 100644 index 000000000..c9ac1bf9f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/AssetBundleSample.cs @@ -0,0 +1,210 @@ +using System; +using System.Collections; +using System.Collections.Generic; + +using UnityEngine; +using UnityEngine.UI; +using BestHTTP; + +namespace BestHTTP.Examples.HTTP +{ + public sealed class AssetBundleSample : BestHTTP.Examples.Helpers.SampleBase + { +#pragma warning disable 0649 + + [Tooltip("The url of the resource to download")] + [SerializeField] + private string _path = "/AssetBundles/WebGL/demobundle.assetbundle"; + + [SerializeField] + private string _assetnameInBundle = "9443182_orig"; + + [SerializeField] + private Text _statusText; + + [SerializeField] + private RawImage _rawImage; + + [SerializeField] + private Button _downloadButton; + +#pragma warning restore + + #region Private Fields + + /// + /// Reference to the request to be able to call Abort on it. + /// + HTTPRequest request; + + /// + /// The downloaded and cached AssetBundle + /// + AssetBundle cachedBundle; + + #endregion + + #region Unity Events + + protected override void Start() + { + base.Start(); + + this._statusText.text = "Waiting for user interaction"; + } + + void OnDestroy() + { + if (this.request != null) + this.request.Abort(); + this.request = null; + + UnloadBundle(); + } + + /// + /// GUI button callback + /// + public void OnStartDownloadButton() + { + this._downloadButton.enabled = false; + UnloadBundle(); + + StartCoroutine(DownloadAssetBundle()); + } + + #endregion + + #region Private Helper Functions + + IEnumerator DownloadAssetBundle() + { + // Create and send our request + request = new HTTPRequest(new Uri(this.sampleSelector.BaseURL + this._path)).Send(); + + this._statusText.text = "Download started"; + + // Wait while it's finishes and add some fancy dots to display something while the user waits for it. + // A simple "yield return StartCoroutine(request);" would do the job too. + while (request.State < HTTPRequestStates.Finished) + { + yield return new WaitForSeconds(0.1f); + + this._statusText.text += "."; + } + + // Check the outcome of our request. + switch (request.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + + if (request.Response.IsSuccess) + { +#if !BESTHTTP_DISABLE_CACHING + if (request.Response.IsFromCache) + this._statusText.text = "Loaded from local cache!"; + else + this._statusText.text = "Downloaded!"; +#else + this._statusText.text = "Downloaded!"; +#endif + + // Start creating the downloaded asset bundle + AssetBundleCreateRequest async = +#if UNITY_5_3_OR_NEWER + AssetBundle.LoadFromMemoryAsync(request.Response.Data); +#else + AssetBundle.CreateFromMemory(request.Response.Data); +#endif + + // wait for it + yield return async; + + BestHTTP.PlatformSupport.Memory.BufferPool.Release(request.Response.Data); + + // And process the bundle + yield return StartCoroutine(ProcessAssetBundle(async.assetBundle)); + } + else + { + this._statusText.text = string.Format("Request finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}", + request.Response.StatusCode, + request.Response.Message, + request.Response.DataAsText); + Debug.LogWarning(this._statusText.text); + } + + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + this._statusText.text = "Request Finished with Error! " + (request.Exception != null ? (request.Exception.Message + "\n" + request.Exception.StackTrace) : "No Exception"); + Debug.LogError(this._statusText.text); + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + this._statusText.text = "Request Aborted!"; + Debug.LogWarning(this._statusText.text); + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + this._statusText.text = "Connection Timed Out!"; + Debug.LogError(this._statusText.text); + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + this._statusText.text = "Processing the request Timed Out!"; + Debug.LogError(this._statusText.text); + break; + } + + this.request = null; + this._downloadButton.enabled = true; + } + + /// + /// In this function we can do whatever we want with the freshly downloaded bundle. + /// In this example we will cache it for later use, and we will load a texture from it. + /// + IEnumerator ProcessAssetBundle(AssetBundle bundle) + { + if (bundle == null) + yield break; + + // Save the bundle for future use + cachedBundle = bundle; + + // Start loading the asset from the bundle + var asyncAsset = +#if UNITY_5_1 || UNITY_5_2 || UNITY_5_3_OR_NEWER + cachedBundle.LoadAssetAsync(this._assetnameInBundle, typeof(Texture2D)); +#else + + cachedBundle.LoadAsync(this._assetnameInBundle, typeof(Texture2D)); +#endif + + // wait til load + yield return asyncAsset; + + // get the texture + this._rawImage.texture = asyncAsset.asset as Texture2D; + } + + void UnloadBundle() + { + this._rawImage.texture = null; + + if (cachedBundle != null) + { + cachedBundle.Unload(true); + cachedBundle = null; + } + } + + #endregion + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/AssetBundleSample.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/AssetBundleSample.cs.meta new file mode 100644 index 000000000..f0a2b7132 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/AssetBundleSample.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 03eab9c6191c5cd4c9613084e817bd29 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/MultipartFormDataStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/MultipartFormDataStream.cs new file mode 100644 index 000000000..28d909f8e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/MultipartFormDataStream.cs @@ -0,0 +1,197 @@ +using System; +using System.Collections.Generic; +using System.IO; +using BestHTTP.Extensions; +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP +{ + /// + /// Stream based implementation of the multipart/form-data Content-Type. Using this class reading a whole file into memory can be avoided. + /// This implementation expects that all streams has a final, accessible Length. + /// + public sealed class MultipartFormDataStream : System.IO.Stream + { + public override bool CanRead { get { return true; } } + + public override bool CanSeek { get { return false; } } + + public override bool CanWrite { get { return false; } } + + public override long Length + { + get + { + // multipart/form-data requires a leading boundary that we can add when all streams are added. + // This final preparation could be user initiated, but we can do it automatically too when the HTTPRequest + // first access the Length property. + if (!this.prepared) + { + this.prepared = true; + this.Prepare(); + } + + return this._length; + } + } + private long _length; + + public override long Position { get; set; } + /// + /// A random boundary generated in the constructor. + /// + private string boundary; + + private Queue fields = new Queue(1); + private StreamList currentField; + private bool prepared; + + public MultipartFormDataStream(HTTPRequest request) + { + this.boundary = "BestHTTP_MultipartFormDataStream_" + this.GetHashCode().ToString("X2"); + + request.SetHeader("Content-Type", "multipart/form-data; boundary=" + boundary); + request.UploadStream = this; + request.UseUploadStreamLength = true; + } + + public void AddField(string fieldName, string value) + { + AddField(fieldName, value, System.Text.Encoding.UTF8); + } + + public void AddField(string fieldName, string value, System.Text.Encoding encoding) + { + var enc = encoding ?? System.Text.Encoding.UTF8; + var byteCount = enc.GetByteCount(value); + var buffer = BufferPool.Get(byteCount, true); + var stream = new BufferPoolMemoryStream(); + + enc.GetBytes(value, 0, value.Length, buffer, 0); + + stream.Write(buffer, 0, byteCount); + + stream.Position = 0; + + string mime = encoding != null ? "text/plain; charset=" + encoding.WebName : null; + AddStreamField(stream, fieldName, null, mime); + } + + public void AddStreamField(System.IO.Stream stream, string fieldName) + { + AddStreamField(stream, fieldName, null, null); + } + + public void AddStreamField(System.IO.Stream stream, string fieldName, string fileName) + { + AddStreamField(stream, fieldName, fileName, null); + } + + public void AddStreamField(System.IO.Stream stream, string fieldName, string fileName, string mimeType) + { + var header = new BufferPoolMemoryStream(); + header.WriteLine("--" + this.boundary); + header.WriteLine("Content-Disposition: form-data; name=\"" + fieldName + "\"" + (!string.IsNullOrEmpty(fileName) ? "; filename=\"" + fileName + "\"" : string.Empty)); + // Set up Content-Type head for the form. + if (!string.IsNullOrEmpty(mimeType)) + header.WriteLine("Content-Type: " + mimeType); + //header.WriteLine("Content-Length: " + stream.Length.ToString()); + header.WriteLine(); + header.Position = 0; + + var footer = new BufferPoolMemoryStream(); + footer.Write(HTTPRequest.EOL, 0, HTTPRequest.EOL.Length); + footer.Position = 0; + + // all wrapped streams going to be disposed by the StreamList wrapper. + var wrapper = new StreamList(header, stream, footer); + + try + { + if (this._length >= 0) + this._length += wrapper.Length; + } + catch + { + this._length = -1; + } + + this.fields.Enqueue(wrapper); + } + + /// + /// Adds the final boundary. + /// + private void Prepare() + { + var boundaryStream = new BufferPoolMemoryStream(); + boundaryStream.WriteLine("--" + this.boundary + "--"); + boundaryStream.Position = 0; + + this.fields.Enqueue(new StreamList(boundaryStream)); + + if (this._length >= 0) + this._length += boundaryStream.Length; + } + + public override int Read(byte[] buffer, int offset, int length) + { + if (this.currentField == null && this.fields.Count == 0) + return -1; + + if (this.currentField == null && this.fields.Count > 0) + this.currentField = this.fields.Dequeue(); + + int readCount = 0; + + do + { + // read from the current stream + int count = this.currentField.Read(buffer, offset + readCount, length - readCount); + + if (count > 0) + readCount += count; + else + { + // if the current field's stream is empty, go for the next one. + + // dispose the current one first + try + { + this.currentField.Dispose(); + } + catch + { } + + // no more fields/streams? exit + if (this.fields.Count == 0) + break; + + // grab the next one + this.currentField = this.fields.Dequeue(); + } + + // exit when we reach the length goal, or there's no more streams to read from + } while (readCount < length && this.fields.Count > 0); + + return readCount; + } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotImplementedException(); + } + + public override void SetLength(long value) + { + throw new NotImplementedException(); + } + + public override void Write(byte[] buffer, int offset, int count) + { + throw new NotImplementedException(); + } + + public override void Flush() { } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/MultipartFormDataStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/MultipartFormDataStream.cs.meta new file mode 100644 index 000000000..8dc0860a4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/MultipartFormDataStream.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: d54866f088b8c154db3325a2771b58af +timeCreated: 1582886645 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/ResumableStreaming.prefab b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/ResumableStreaming.prefab new file mode 100644 index 000000000..e76c79e73 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/ResumableStreaming.prefab @@ -0,0 +1,3047 @@ +%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: 1304316495635536} + m_IsPrefabParent: 1 +--- !u!1 &1027582930970574 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224290766286267142} + - component: {fileID: 222211320422944464} + - component: {fileID: 114518879635225556} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1034896230491888 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224903912215274940} + - component: {fileID: 222245404979052256} + - component: {fileID: 114010311226501906} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1052656665346756 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224256456730596180} + - component: {fileID: 222058116002566886} + - component: {fileID: 114087309061841130} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1062597457790740 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224767244334258574} + - component: {fileID: 222949572663066404} + - component: {fileID: 114922161837500380} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1072794295408638 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224420917112437758} + - component: {fileID: 114654151894508420} + - component: {fileID: 114709170431156056} + m_Layer: 5 + m_Name: Download Progress + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1091774682803242 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224270458897687252} + - component: {fileID: 222434239943722286} + - component: {fileID: 114829331746482916} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1093927063352150 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224267907371927858} + - component: {fileID: 222352636541314724} + - component: {fileID: 114460294198050264} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1106604494344830 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224613778405046442} + - component: {fileID: 222165553103558324} + - component: {fileID: 114316703820090054} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1121450088643422 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224177763693501514} + - component: {fileID: 114875715148901716} + - component: {fileID: 114587833666100162} + m_Layer: 5 + m_Name: Data Processed + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1158273585503168 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224865801251451884} + - component: {fileID: 114504301280810834} + m_Layer: 5 + m_Name: Fragment Size + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1170992398550604 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224605571481858632} + - component: {fileID: 114288305174114306} + - component: {fileID: 114934128818388690} + m_Layer: 5 + m_Name: Fragment Size Slider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1179996969992636 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224010376099791110} + - component: {fileID: 222997019622510050} + - component: {fileID: 114772678131969678} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1198695843454234 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224210665446720780} + - component: {fileID: 222917676283032030} + - component: {fileID: 114405620627718834} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1204024560250088 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224763878698934806} + - component: {fileID: 114189232866573584} + - component: {fileID: 114566704807653620} + m_Layer: 5 + m_Name: Disable Cache Toggle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1252461630151516 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224636546347277954} + - component: {fileID: 222536760574561080} + - component: {fileID: 114746220404487708} + - component: {fileID: 114833831078743870} + - component: {fileID: 114911390243298192} + - component: {fileID: 114420289672781172} + m_Layer: 5 + m_Name: Start Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1304316495635536 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224686587773383612} + - component: {fileID: 114147370622450028} + - component: {fileID: 114222554107645048} + m_Layer: 5 + m_Name: ResumableStreaming + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1331154873939554 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224229972961212560} + - component: {fileID: 114589382828607268} + - component: {fileID: 114305919431031836} + - component: {fileID: 114623611253736414} + m_Layer: 5 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1337412123096378 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224901201924166018} + - component: {fileID: 222865039262472386} + - component: {fileID: 114169111876059576} + - component: {fileID: 114678369212347216} + m_Layer: 5 + m_Name: Status Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1516627318963816 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224125488599336218} + - component: {fileID: 222988932143603906} + - component: {fileID: 114228595629310950} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1524727757511002 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224861500112074504} + - component: {fileID: 222385640584554844} + - component: {fileID: 114248387882232776} + - component: {fileID: 114290160204623122} + m_Layer: 5 + m_Name: Fragment Size Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1535855295037426 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224627700375210058} + - component: {fileID: 222659986558257934} + - component: {fileID: 114084732163727694} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1544752465019160 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224878354971177776} + m_Layer: 5 + m_Name: Fill Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1568674868434322 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224029073201942620} + - component: {fileID: 222070861886133304} + - component: {fileID: 114541732834313826} + - component: {fileID: 114715774233200856} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1573136060183886 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224761651625275136} + - component: {fileID: 222987337434817440} + - component: {fileID: 114272721089725240} + - component: {fileID: 114821103829330768} + - component: {fileID: 114721746979683606} + - component: {fileID: 114044481495101344} + m_Layer: 5 + m_Name: Cancel Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1613265148054548 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224431493399861096} + - component: {fileID: 222102321448949904} + - component: {fileID: 114207009447101070} + - component: {fileID: 114255788590788178} + m_Layer: 5 + m_Name: Report + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1617100887757470 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224733575182827736} + - component: {fileID: 114992810960585906} + - component: {fileID: 114855651215086492} + m_Layer: 5 + m_Name: Progress Slider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1708424636800478 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224452288604335338} + m_Layer: 5 + m_Name: Handle Slide Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1737551763863844 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224723355708071722} + - component: {fileID: 222347764482927638} + - component: {fileID: 114751696173587988} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1757813727986790 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224188100958171166} + - component: {fileID: 222941211876013532} + - component: {fileID: 114532180830956614} + - component: {fileID: 114513745130084614} + m_Layer: 5 + m_Name: Progress Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1778027371698998 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224266117618985964} + m_Layer: 5 + m_Name: Fill Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1779731420410654 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224980349116779698} + - component: {fileID: 222597862117842704} + - component: {fileID: 114984687160439674} + - component: {fileID: 114035211485718284} + - component: {fileID: 114242840051242944} + - component: {fileID: 114356929836519716} + m_Layer: 5 + m_Name: Streaming Setup + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1834318825556270 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224938150821613824} + - component: {fileID: 222521762315522450} + - component: {fileID: 114209374130857974} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1932520903993496 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224415084649251234} + - component: {fileID: 222760401101137492} + - component: {fileID: 114050699338437368} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1938289024617832 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224325204397583732} + - component: {fileID: 222279757044378810} + - component: {fileID: 114876762914697274} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1963053294055804 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224657480889287614} + - component: {fileID: 114191536821275350} + - component: {fileID: 114453587522184990} + m_Layer: 5 + m_Name: Progress Slider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1964384252449330 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224004599275601464} + m_Layer: 5 + m_Name: Fill Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1966288087362162 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224538898440701134} + - component: {fileID: 222343092174026716} + - component: {fileID: 114336860693707634} + - component: {fileID: 114505412126623628} + m_Layer: 5 + m_Name: Progress Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114010311226501906 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1034896230491888} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Download Progress: ' +--- !u!114 &114035211485718284 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1779731420410654} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114044481495101344 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1573136060183886} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114050699338437368 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1932520903993496} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114084732163727694 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1535855295037426} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Cancel +--- !u!114 &114087309061841130 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1052656665346756} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114147370622450028 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1304316495635536} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114169111876059576 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1337412123096378} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!114 &114189232866573584 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1204024560250088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114405620627718834} + toggleTransition: 1 + graphic: {fileID: 114772678131969678} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_IsOn: 1 +--- !u!114 &114191536821275350 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1963053294055804} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -113659843, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 0 + m_TargetGraphic: {fileID: 0} + m_FillRect: {fileID: 224767244334258574} + m_HandleRect: {fileID: 0} + m_Direction: 0 + m_MinValue: 0 + m_MaxValue: 100 + m_WholeNumbers: 0 + m_Value: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Slider+SliderEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114207009447101070 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1613265148054548} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114209374130857974 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1834318825556270} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Start +--- !u!114 &114222554107645048 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1304316495635536} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 972fc2301f87c9e46bfb5523f2bc5090, type: 3} + m_Name: + m_EditorClassIdentifier: + Category: HTTP + DisplayName: Resumable Streaming + Description: 'Example to demonstrate resumable content streaming. + + + Features demoed in this example: + + -Streaming + + -Download progress + + -Range requests' + BannedPlatforms: 11000000 + _downloadPath: /test100mb.dat + _streamingSetupRoot: {fileID: 224980349116779698} + _fragmentSizeSlider: {fileID: 114288305174114306} + _fragmentSizeText: {fileID: 114248387882232776} + _disableCacheToggle: {fileID: 114189232866573584} + _reportingRoot: {fileID: 224431493399861096} + _downloadProgressSlider: {fileID: 114992810960585906} + _downloadProgressText: {fileID: 114532180830956614} + _processedDataSlider: {fileID: 114191536821275350} + _processedDataText: {fileID: 114336860693707634} + _statusText: {fileID: 114169111876059576} + _startDownload: {fileID: 114833831078743870} + _cancelDownload: {fileID: 114821103829330768} +--- !u!114 &114228595629310950 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1516627318963816} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114242840051242944 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1779731420410654} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114248387882232776 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1524727757511002} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 1024 +--- !u!114 &114255788590788178 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1613265148054548} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114272721089725240 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1573136060183886} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114288305174114306 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1170992398550604} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -113659843, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114050699338437368} + m_FillRect: {fileID: 224325204397583732} + m_HandleRect: {fileID: 224415084649251234} + m_Direction: 0 + m_MinValue: 0 + m_MaxValue: 10240 + m_WholeNumbers: 1 + m_Value: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114222554107645048} + m_MethodName: OnFragmentSizeSliderChanged + m_Mode: 0 + 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_TypeName: UnityEngine.UI.Slider+SliderEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114290160204623122 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1524727757511002} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: 0 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &114305919431031836 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1331154873939554} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114316703820090054 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1106604494344830} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Resumable Streaming +--- !u!114 &114336860693707634 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1966288087362162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 12 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!114 &114356929836519716 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1779731420410654} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114405620627718834 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1198695843454234} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114420289672781172 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1252461630151516} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114453587522184990 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1963053294055804} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: 25 + m_PreferredWidth: -1 + m_PreferredHeight: 25 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &114460294198050264 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1093927063352150} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Disable Cache +--- !u!114 &114504301280810834 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1158273585503168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114505412126623628 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1966288087362162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: 0 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &114513745130084614 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1757813727986790} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: 0 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &114518879635225556 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1027582930970574} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Fragment Size: ' +--- !u!114 &114532180830956614 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1757813727986790} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 12 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 1024 +--- !u!114 &114541732834313826 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1568674868434322} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Data Processed: ' +--- !u!114 &114566704807653620 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1204024560250088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 25 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 25 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &114587833666100162 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1121450088643422} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114589382828607268 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1331154873939554} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114623611253736414 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1331154873939554} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114654151894508420 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1072794295408638} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114678369212347216 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1337412123096378} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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!114 &114709170431156056 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1072794295408638} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114715774233200856 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1568674868434322} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: 0 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &114721746979683606 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1573136060183886} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114746220404487708 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1252461630151516} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114751696173587988 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1737551763863844} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114772678131969678 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1179996969992636} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114821103829330768 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1573136060183886} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114272721089725240} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114222554107645048} + m_MethodName: Cancel + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114829331746482916 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1091774682803242} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114833831078743870 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1252461630151516} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114746220404487708} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114222554107645048} + m_MethodName: StartStreaming + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114855651215086492 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1617100887757470} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: 25 + m_PreferredWidth: -1 + m_PreferredHeight: 25 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &114875715148901716 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1121450088643422} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114876762914697274 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1938289024617832} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114911390243298192 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1252461630151516} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114922161837500380 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1062597457790740} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114934128818388690 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1170992398550604} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: 25 + m_PreferredWidth: -1 + m_PreferredHeight: 25 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &114984687160439674 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1779731420410654} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114992810960585906 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1617100887757470} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -113659843, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 0 + m_TargetGraphic: {fileID: 0} + m_FillRect: {fileID: 224723355708071722} + m_HandleRect: {fileID: 0} + m_Direction: 0 + m_MinValue: 0 + m_MaxValue: 100 + m_WholeNumbers: 0 + m_Value: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Slider+SliderEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!222 &222058116002566886 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1052656665346756} +--- !u!222 &222070861886133304 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1568674868434322} +--- !u!222 &222102321448949904 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1613265148054548} +--- !u!222 &222165553103558324 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1106604494344830} +--- !u!222 &222211320422944464 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1027582930970574} +--- !u!222 &222245404979052256 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1034896230491888} +--- !u!222 &222279757044378810 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1938289024617832} +--- !u!222 &222343092174026716 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1966288087362162} +--- !u!222 &222347764482927638 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1737551763863844} +--- !u!222 &222352636541314724 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1093927063352150} +--- !u!222 &222385640584554844 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1524727757511002} +--- !u!222 &222434239943722286 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1091774682803242} +--- !u!222 &222521762315522450 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1834318825556270} +--- !u!222 &222536760574561080 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1252461630151516} +--- !u!222 &222597862117842704 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1779731420410654} +--- !u!222 &222659986558257934 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1535855295037426} +--- !u!222 &222760401101137492 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1932520903993496} +--- !u!222 &222865039262472386 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1337412123096378} +--- !u!222 &222917676283032030 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1198695843454234} +--- !u!222 &222941211876013532 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1757813727986790} +--- !u!222 &222949572663066404 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1062597457790740} +--- !u!222 &222987337434817440 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1573136060183886} +--- !u!222 &222988932143603906 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1516627318963816} +--- !u!222 &222997019622510050 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1179996969992636} +--- !u!224 &224004599275601464 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1964384252449330} + 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: 224723355708071722} + m_Father: {fileID: 224733575182827736} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 2.5, y: 0} + m_SizeDelta: {x: -5, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224010376099791110 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1179996969992636} + 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: 224210665446720780} + 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: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224029073201942620 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1568674868434322} + 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: 224177763693501514} + 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.5, y: 0.5} +--- !u!224 &224125488599336218 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1516627318963816} + 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: 224605571481858632} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224177763693501514 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1121450088643422} + 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: 224029073201942620} + - {fileID: 224657480889287614} + m_Father: {fileID: 224431493399861096} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224188100958171166 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1757813727986790} + 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: 224733575182827736} + m_RootOrder: 2 + 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!224 &224210665446720780 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1198695843454234} + 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: 224010376099791110} + m_Father: {fileID: 224763878698934806} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 10, y: -10} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224229972961212560 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1331154873939554} + 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: 224636546347277954} + - {fileID: 224761651625275136} + m_Father: {fileID: 224686587773383612} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 300, y: 0} + m_SizeDelta: {x: 590, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224256456730596180 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1052656665346756} + 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: 224657480889287614} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224266117618985964 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1778027371698998} + 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: 224325204397583732} + m_Father: {fileID: 224605571481858632} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: -5, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224267907371927858 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1093927063352150} + 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: 224763878698934806} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 9, y: -0.5} + m_SizeDelta: {x: -28, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224270458897687252 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1091774682803242} + 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: 224733575182827736} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224290766286267142 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1027582930970574} + 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: 224865801251451884} + 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.5, y: 0.5} +--- !u!224 &224325204397583732 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1938289024617832} + 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: 224266117618985964} + 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: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224415084649251234 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1932520903993496} + 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: 224452288604335338} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224420917112437758 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1072794295408638} + 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: 224903912215274940} + - {fileID: 224733575182827736} + m_Father: {fileID: 224431493399861096} + 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.5, y: 0.5} +--- !u!224 &224431493399861096 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1613265148054548} + 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: 224420917112437758} + - {fileID: 224177763693501514} + m_Father: {fileID: 224686587773383612} + 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.5, y: 0.5} +--- !u!224 &224452288604335338 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1708424636800478} + 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: 224415084649251234} + m_Father: {fileID: 224605571481858632} + m_RootOrder: 2 + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224538898440701134 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1966288087362162} + 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: 224657480889287614} + m_RootOrder: 2 + 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!224 &224605571481858632 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1170992398550604} + 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: 224125488599336218} + - {fileID: 224266117618985964} + - {fileID: 224452288604335338} + - {fileID: 224861500112074504} + m_Father: {fileID: 224865801251451884} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224613778405046442 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1106604494344830} + 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: 224686587773383612} + 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.5, y: 0.5} +--- !u!224 &224627700375210058 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1535855295037426} + 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: 224761651625275136} + 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.5, y: 0.5} +--- !u!224 &224636546347277954 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1252461630151516} + 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: 224938150821613824} + m_Father: {fileID: 224229972961212560} + 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: 145.25, y: 0} + m_SizeDelta: {x: 280.5, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224657480889287614 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1963053294055804} + 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: 224256456730596180} + - {fileID: 224878354971177776} + - {fileID: 224538898440701134} + m_Father: {fileID: 224177763693501514} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224686587773383612 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1304316495635536} + 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: 224613778405046442} + - {fileID: 224980349116779698} + - {fileID: 224431493399861096} + - {fileID: 224901201924166018} + - {fileID: 224229972961212560} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224723355708071722 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1737551763863844} + 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: 224004599275601464} + 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: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224733575182827736 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1617100887757470} + 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: 224270458897687252} + - {fileID: 224004599275601464} + - {fileID: 224188100958171166} + m_Father: {fileID: 224420917112437758} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224761651625275136 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1573136060183886} + 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: 224627700375210058} + m_Father: {fileID: 224229972961212560} + 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: 437.75, y: 0} + m_SizeDelta: {x: 294.5, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224763878698934806 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1204024560250088} + 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: 224210665446720780} + - {fileID: 224267907371927858} + m_Father: {fileID: 224980349116779698} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224767244334258574 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1062597457790740} + 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: 224878354971177776} + 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: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224861500112074504 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1524727757511002} + 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: 224605571481858632} + m_RootOrder: 3 + 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: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224865801251451884 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1158273585503168} + 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: 224290766286267142} + - {fileID: 224605571481858632} + m_Father: {fileID: 224980349116779698} + 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.5, y: 0.5} +--- !u!224 &224878354971177776 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1544752465019160} + 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: 224767244334258574} + m_Father: {fileID: 224657480889287614} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 2.5, y: 0} + m_SizeDelta: {x: -5, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224901201924166018 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1337412123096378} + 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: 224686587773383612} + m_RootOrder: 3 + 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!224 &224903912215274940 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1034896230491888} + 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: 224420917112437758} + 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.5, y: 0.5} +--- !u!224 &224938150821613824 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1834318825556270} + 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: 224636546347277954} + 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.5, y: 0.5} +--- !u!224 &224980349116779698 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1779731420410654} + 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: 224865801251451884} + - {fileID: 224763878698934806} + m_Father: {fileID: 224686587773383612} + 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: 300, y: 0} + m_SizeDelta: {x: 590, y: 0} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/ResumableStreaming.prefab.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/ResumableStreaming.prefab.meta new file mode 100644 index 000000000..1091db21a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/ResumableStreaming.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ceca5a2f4b7ce1e4fb307cc3d3e4624a +timeCreated: 1571229570 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/ResumableStreamingSample.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/ResumableStreamingSample.cs new file mode 100644 index 000000000..73488e86f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/ResumableStreamingSample.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections.Generic; + +using UnityEngine; +using UnityEngine.UI; +using BestHTTP; + +namespace BestHTTP.Examples.HTTP +{ + public sealed class ResumableStreamingSample : StreamingSample + { + const string ProcessedBytesKey = "ProcessedBytes"; + const string DownloadLengthKey = "DownloadLength"; + + /// + /// Expected content length + /// + protected override long DownloadLength { get { return PlayerPrefs.GetInt(this._downloadPath + DownloadLengthKey); } set { PlayerPrefs.SetInt(this._downloadPath + DownloadLengthKey, (int)value); } } + + /// + /// Total processed bytes + /// + protected override long ProcessedBytes { get { return PlayerPrefs.GetInt(this._downloadPath + ProcessedBytesKey, 0); } set { PlayerPrefs.SetInt(this._downloadPath + ProcessedBytesKey, (int)value); } } + + private long downloadStartedAt = 0; + + protected override void Start() + { + base.Start(); + + // If we have a non-finished download, set the progress to the value where we left it + float progress = GetSavedProgress(); + if (progress > 0.0f) + { + this._downloadProgressSlider.value = progress; + base._statusText.text = progress.ToString("F2"); + } + } + + protected override void SetupRequest() + { + base.SetupRequest(); + + // Are there any progress, that we can continue? + this.downloadStartedAt = this.ProcessedBytes; + + if (this.downloadStartedAt > 0) + { + // Set the range header + request.SetRangeHeader(this.downloadStartedAt); + } + else + // This is a new request + DeleteKeys(); + } + + protected override void OnRequestFinished(HTTPRequest req, HTTPResponse resp) + { + base.OnRequestFinished(req, resp); + + if (req.State == HTTPRequestStates.Finished && resp.IsSuccess) + DeleteKeys(); + } + + protected override void OnDownloadProgress(HTTPRequest originalRequest, long downloaded, long downloadLength) + { + double downloadPercent = ((this.downloadStartedAt + downloaded) / (double)this.DownloadLength) * 100; + + this._downloadProgressSlider.value = (float)downloadPercent; + this._downloadProgressText.text = string.Format("{0:F1}%", downloadPercent); + } + + protected override void ResetProcessedValues() + { + SetDataProcessedUI(this.ProcessedBytes, this.DownloadLength); + } + + private float GetSavedProgress() + { + long down = this.ProcessedBytes; + long length = this.DownloadLength; + + if (down > 0 && length > 0) + return (down / (float)length) * 100f; + + return -1; + } + + private void DeleteKeys() + { + PlayerPrefs.DeleteKey(this._downloadPath + ProcessedBytesKey); + PlayerPrefs.DeleteKey(this._downloadPath + DownloadLengthKey); + PlayerPrefs.Save(); + } + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/ResumableStreamingSample.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/ResumableStreamingSample.cs.meta new file mode 100644 index 000000000..414e79665 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/ResumableStreamingSample.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 972fc2301f87c9e46bfb5523f2bc5090 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/Streaming.prefab b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/Streaming.prefab new file mode 100644 index 000000000..3554607e6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/Streaming.prefab @@ -0,0 +1,3045 @@ +%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: 1553832846657556} + m_IsPrefabParent: 1 +--- !u!1 &1046826639584390 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224411528007126316} + - component: {fileID: 222256099486890808} + - component: {fileID: 114867248103291848} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1082586772370188 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224668834265908728} + - component: {fileID: 222878468755101314} + - component: {fileID: 114184831901154852} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1088780650537144 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224851686321465618} + - component: {fileID: 222493667851355608} + - component: {fileID: 114611327815399820} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1120604804827890 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224648924410367558} + - component: {fileID: 114244720930078126} + - component: {fileID: 114066209339274150} + m_Layer: 5 + m_Name: Progress Slider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1133637693093912 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224575654464379226} + - component: {fileID: 114386455352245440} + - component: {fileID: 114140825045043948} + m_Layer: 5 + m_Name: Progress Slider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1158306409157990 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224066479585827520} + - component: {fileID: 222847756710267128} + - component: {fileID: 114471511265034606} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1166162178773744 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224191516374637564} + - component: {fileID: 222603690511748232} + - component: {fileID: 114616565337573664} + - component: {fileID: 114564202170551670} + m_Layer: 5 + m_Name: Report + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1242762218685052 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224615616212921844} + - component: {fileID: 222081822630075996} + - component: {fileID: 114147067649811110} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1250313706858684 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224645903495844658} + - component: {fileID: 222691117995125870} + - component: {fileID: 114655657836869880} + - component: {fileID: 114775079892303968} + m_Layer: 5 + m_Name: Status Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1269995737848396 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224727815042121968} + m_Layer: 5 + m_Name: Fill Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1368722759466060 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224158916202676450} + - component: {fileID: 114502507997580916} + - component: {fileID: 114222358756633426} + m_Layer: 5 + m_Name: Fragment Size Slider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1377018332455366 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224104339657483378} + - component: {fileID: 222333100275360666} + - component: {fileID: 114530740815539002} + - component: {fileID: 114262290323424946} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1378783552807120 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224637568505574978} + - component: {fileID: 222483212505795864} + - component: {fileID: 114160474578529906} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1421995367221510 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224149661361846782} + - component: {fileID: 222845472852759718} + - component: {fileID: 114469072776119838} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1498111884555940 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224684168259916574} + - component: {fileID: 222324526524253776} + - component: {fileID: 114476127091683344} + - component: {fileID: 114546094786365612} + m_Layer: 5 + m_Name: Progress Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1533503607065902 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224863139894598096} + m_Layer: 5 + m_Name: Fill Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1553832846657556 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224351626477584668} + - component: {fileID: 114123983597048992} + - component: {fileID: 114112198445963528} + m_Layer: 5 + m_Name: Streaming + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1592254312100062 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224622302808660274} + - component: {fileID: 222827255012889898} + - component: {fileID: 114927167690322384} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1600138577311878 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224879196672571742} + m_Layer: 5 + m_Name: Handle Slide Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1602060103465890 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224518492011422256} + - component: {fileID: 222819684535524918} + - component: {fileID: 114106638380170334} + - component: {fileID: 114728721518414566} + - component: {fileID: 114335075380177154} + - component: {fileID: 114824588265354096} + m_Layer: 5 + m_Name: Start Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1649703547850748 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224942539576685536} + - component: {fileID: 222102019959241794} + - component: {fileID: 114856127561634516} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1660125531903792 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224124827262513574} + - component: {fileID: 222084199677898428} + - component: {fileID: 114512139863007608} + - component: {fileID: 114940009476539282} + - component: {fileID: 114106640089605958} + - component: {fileID: 114941951056928128} + m_Layer: 5 + m_Name: Streaming Setup + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1672435192752046 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224241413668393830} + - component: {fileID: 222087375188624440} + - component: {fileID: 114251149247971864} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1692515474603598 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224053974708281420} + - component: {fileID: 222225491063206800} + - component: {fileID: 114811336860441608} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1705371628314682 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224002432953993016} + - component: {fileID: 222013760738124250} + - component: {fileID: 114699716404378062} + - component: {fileID: 114096929272867168} + m_Layer: 5 + m_Name: Progress Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1725834767974758 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224863811848042012} + - component: {fileID: 222562740937029678} + - component: {fileID: 114906537350749056} + - component: {fileID: 114465367117361124} + - component: {fileID: 114702075450627814} + - component: {fileID: 114934736259204490} + m_Layer: 5 + m_Name: Cancel Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1785157063272698 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224953559199069542} + - component: {fileID: 222520460540549176} + - component: {fileID: 114604006433521856} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1821630853234850 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224368782775471880} + - component: {fileID: 114949373690188108} + - component: {fileID: 114502995077607992} + m_Layer: 5 + m_Name: Download Progress + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1845029106612852 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224737148314897476} + - component: {fileID: 222792585915778508} + - component: {fileID: 114933529106597000} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1861092347211044 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224724575864493194} + - component: {fileID: 222655468475281846} + - component: {fileID: 114212058528465420} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1875564364931124 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224011453618481088} + - component: {fileID: 114302924366560470} + m_Layer: 5 + m_Name: Fragment Size + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1882328600128888 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224909733550344982} + - component: {fileID: 114352321887085062} + - component: {fileID: 114842651924560572} + - component: {fileID: 114442786490323964} + m_Layer: 5 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1884667418934924 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224458054833512056} + - component: {fileID: 114797491026327416} + - component: {fileID: 114510125005062788} + m_Layer: 5 + m_Name: Data Processed + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1903858902673876 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224724961501089702} + - component: {fileID: 222732203163450056} + - component: {fileID: 114676832355221098} + - component: {fileID: 114689023480444506} + m_Layer: 5 + m_Name: Fragment Size Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1907421433813022 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224615609568791822} + m_Layer: 5 + m_Name: Fill Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1920111331964476 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224061011898658982} + - component: {fileID: 114460561574643006} + - component: {fileID: 114678865194979560} + m_Layer: 5 + m_Name: Disable Cache Toggle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1956832022701542 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224697826136675940} + - component: {fileID: 222001618164536240} + - component: {fileID: 114172276212521492} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114066209339274150 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1120604804827890} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: 25 + m_PreferredWidth: -1 + m_PreferredHeight: 25 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &114096929272867168 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1705371628314682} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: 0 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &114106638380170334 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1602060103465890} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114106640089605958 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1660125531903792} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114112198445963528 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1553832846657556} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7608ce95dba469c42b49baa85e3c300c, type: 3} + m_Name: + m_EditorClassIdentifier: + Category: HTTP + DisplayName: Simple Streaming + Description: 'Simple example to demonstrate content streaming. + + + Features demoed in this example: + + -Streaming + + -Download progress' + BannedPlatforms: 11000000 + _downloadPath: /test100mb.dat + _streamingSetupRoot: {fileID: 224124827262513574} + _fragmentSizeSlider: {fileID: 114502507997580916} + _fragmentSizeText: {fileID: 114676832355221098} + _disableCacheToggle: {fileID: 114460561574643006} + _reportingRoot: {fileID: 224191516374637564} + _downloadProgressSlider: {fileID: 114386455352245440} + _downloadProgressText: {fileID: 114476127091683344} + _processedDataSlider: {fileID: 114244720930078126} + _processedDataText: {fileID: 114699716404378062} + _statusText: {fileID: 114655657836869880} + _startDownload: {fileID: 114728721518414566} + _cancelDownload: {fileID: 114465367117361124} +--- !u!114 &114123983597048992 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1553832846657556} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114140825045043948 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1133637693093912} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: 25 + m_PreferredWidth: -1 + m_PreferredHeight: 25 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &114147067649811110 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1242762218685052} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114160474578529906 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1378783552807120} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114172276212521492 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1956832022701542} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114184831901154852 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1082586772370188} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Download Progress: ' +--- !u!114 &114212058528465420 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1861092347211044} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114222358756633426 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1368722759466060} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: 25 + m_PreferredWidth: -1 + m_PreferredHeight: 25 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &114244720930078126 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1120604804827890} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -113659843, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 0 + m_TargetGraphic: {fileID: 0} + m_FillRect: {fileID: 224149661361846782} + m_HandleRect: {fileID: 0} + m_Direction: 0 + m_MinValue: 0 + m_MaxValue: 100 + m_WholeNumbers: 0 + m_Value: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Slider+SliderEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114251149247971864 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1672435192752046} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Fragment Size: ' +--- !u!114 &114262290323424946 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1377018332455366} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: 0 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &114302924366560470 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1875564364931124} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114335075380177154 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1602060103465890} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114352321887085062 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1882328600128888} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114386455352245440 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1133637693093912} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -113659843, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 0 + m_TargetGraphic: {fileID: 0} + m_FillRect: {fileID: 224851686321465618} + m_HandleRect: {fileID: 0} + m_Direction: 0 + m_MinValue: 0 + m_MaxValue: 100 + m_WholeNumbers: 0 + m_Value: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Slider+SliderEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114442786490323964 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1882328600128888} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114460561574643006 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1920111331964476} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114147067649811110} + toggleTransition: 1 + graphic: {fileID: 114160474578529906} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_IsOn: 1 +--- !u!114 &114465367117361124 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1725834767974758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114906537350749056} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114112198445963528} + m_MethodName: Cancel + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114469072776119838 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1421995367221510} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114471511265034606 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1158306409157990} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114476127091683344 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1498111884555940} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 12 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 1024 +--- !u!114 &114502507997580916 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1368722759466060} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -113659843, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114172276212521492} + m_FillRect: {fileID: 224066479585827520} + m_HandleRect: {fileID: 224697826136675940} + m_Direction: 0 + m_MinValue: 0 + m_MaxValue: 10240 + m_WholeNumbers: 1 + m_Value: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114112198445963528} + m_MethodName: OnFragmentSizeSliderChanged + m_Mode: 0 + 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_TypeName: UnityEngine.UI.Slider+SliderEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114502995077607992 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1821630853234850} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114510125005062788 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1884667418934924} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114512139863007608 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1660125531903792} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114530740815539002 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1377018332455366} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Data Processed: ' +--- !u!114 &114546094786365612 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1498111884555940} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: 0 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &114564202170551670 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1166162178773744} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114604006433521856 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1785157063272698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Start +--- !u!114 &114611327815399820 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1088780650537144} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114616565337573664 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1166162178773744} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114655657836869880 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1250313706858684} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!114 &114676832355221098 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1903858902673876} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 1024 +--- !u!114 &114678865194979560 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1920111331964476} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 25 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 25 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &114689023480444506 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1903858902673876} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: 0 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &114699716404378062 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1705371628314682} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 12 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!114 &114702075450627814 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1725834767974758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114728721518414566 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1602060103465890} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114106638380170334} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114112198445963528} + m_MethodName: StartStreaming + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114775079892303968 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1250313706858684} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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!114 &114797491026327416 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1884667418934924} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114811336860441608 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1692515474603598} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Disable Cache +--- !u!114 &114824588265354096 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1602060103465890} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114842651924560572 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1882328600128888} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114856127561634516 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1649703547850748} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Resumable Streaming +--- !u!114 &114867248103291848 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1046826639584390} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114906537350749056 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1725834767974758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114927167690322384 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1592254312100062} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Cancel +--- !u!114 &114933529106597000 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1845029106612852} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114934736259204490 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1725834767974758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114940009476539282 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1660125531903792} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114941951056928128 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1660125531903792} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114949373690188108 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1821630853234850} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!222 &222001618164536240 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1956832022701542} +--- !u!222 &222013760738124250 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1705371628314682} +--- !u!222 &222081822630075996 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1242762218685052} +--- !u!222 &222084199677898428 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1660125531903792} +--- !u!222 &222087375188624440 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1672435192752046} +--- !u!222 &222102019959241794 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1649703547850748} +--- !u!222 &222225491063206800 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1692515474603598} +--- !u!222 &222256099486890808 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1046826639584390} +--- !u!222 &222324526524253776 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1498111884555940} +--- !u!222 &222333100275360666 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1377018332455366} +--- !u!222 &222483212505795864 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1378783552807120} +--- !u!222 &222493667851355608 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1088780650537144} +--- !u!222 &222520460540549176 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1785157063272698} +--- !u!222 &222562740937029678 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1725834767974758} +--- !u!222 &222603690511748232 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1166162178773744} +--- !u!222 &222655468475281846 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1861092347211044} +--- !u!222 &222691117995125870 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1250313706858684} +--- !u!222 &222732203163450056 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1903858902673876} +--- !u!222 &222792585915778508 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1845029106612852} +--- !u!222 &222819684535524918 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1602060103465890} +--- !u!222 &222827255012889898 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1592254312100062} +--- !u!222 &222845472852759718 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1421995367221510} +--- !u!222 &222847756710267128 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1158306409157990} +--- !u!222 &222878468755101314 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1082586772370188} +--- !u!224 &224002432953993016 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1705371628314682} + 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: 224648924410367558} + m_RootOrder: 2 + 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!224 &224011453618481088 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1875564364931124} + 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: 224241413668393830} + - {fileID: 224158916202676450} + m_Father: {fileID: 224124827262513574} + 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.5, y: 0.5} +--- !u!224 &224053974708281420 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1692515474603598} + 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: 224061011898658982} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 9, y: -0.5} + m_SizeDelta: {x: -28, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224061011898658982 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1920111331964476} + 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: 224615616212921844} + - {fileID: 224053974708281420} + m_Father: {fileID: 224124827262513574} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224066479585827520 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1158306409157990} + 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: 224615609568791822} + 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: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224104339657483378 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1377018332455366} + 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: 224458054833512056} + 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.5, y: 0.5} +--- !u!224 &224124827262513574 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1660125531903792} + 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: 224011453618481088} + - {fileID: 224061011898658982} + m_Father: {fileID: 224351626477584668} + 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: 300, y: 0} + m_SizeDelta: {x: 590, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224149661361846782 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1421995367221510} + 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: 224863139894598096} + 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: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224158916202676450 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1368722759466060} + 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: 224737148314897476} + - {fileID: 224615609568791822} + - {fileID: 224879196672571742} + - {fileID: 224724961501089702} + m_Father: {fileID: 224011453618481088} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224191516374637564 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1166162178773744} + 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: 224368782775471880} + - {fileID: 224458054833512056} + m_Father: {fileID: 224351626477584668} + 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.5, y: 0.5} +--- !u!224 &224241413668393830 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1672435192752046} + 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: 224011453618481088} + 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.5, y: 0.5} +--- !u!224 &224351626477584668 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1553832846657556} + 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: 224942539576685536} + - {fileID: 224124827262513574} + - {fileID: 224191516374637564} + - {fileID: 224645903495844658} + - {fileID: 224909733550344982} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224368782775471880 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1821630853234850} + 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: 224668834265908728} + - {fileID: 224575654464379226} + m_Father: {fileID: 224191516374637564} + 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.5, y: 0.5} +--- !u!224 &224411528007126316 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1046826639584390} + 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: 224648924410367558} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224458054833512056 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1884667418934924} + 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: 224104339657483378} + - {fileID: 224648924410367558} + m_Father: {fileID: 224191516374637564} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224518492011422256 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1602060103465890} + 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: 224953559199069542} + m_Father: {fileID: 224909733550344982} + 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: 145.25, y: 0} + m_SizeDelta: {x: 280.5, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224575654464379226 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1133637693093912} + 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: 224724575864493194} + - {fileID: 224727815042121968} + - {fileID: 224684168259916574} + m_Father: {fileID: 224368782775471880} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224615609568791822 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1907421433813022} + 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: 224066479585827520} + m_Father: {fileID: 224158916202676450} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: -5, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224615616212921844 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1242762218685052} + 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: 224637568505574978} + m_Father: {fileID: 224061011898658982} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 10, y: -10} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224622302808660274 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1592254312100062} + 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: 224863811848042012} + 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.5, y: 0.5} +--- !u!224 &224637568505574978 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1378783552807120} + 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: 224615616212921844} + 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: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224645903495844658 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1250313706858684} + 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: 224351626477584668} + m_RootOrder: 3 + 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!224 &224648924410367558 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1120604804827890} + 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: 224411528007126316} + - {fileID: 224863139894598096} + - {fileID: 224002432953993016} + m_Father: {fileID: 224458054833512056} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224668834265908728 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1082586772370188} + 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: 224368782775471880} + 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.5, y: 0.5} +--- !u!224 &224684168259916574 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1498111884555940} + 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: 224575654464379226} + m_RootOrder: 2 + 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!224 &224697826136675940 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1956832022701542} + 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: 224879196672571742} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224724575864493194 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1861092347211044} + 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: 224575654464379226} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224724961501089702 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1903858902673876} + 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: 224158916202676450} + m_RootOrder: 3 + 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: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224727815042121968 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1269995737848396} + 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: 224851686321465618} + m_Father: {fileID: 224575654464379226} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 2.5, y: 0} + m_SizeDelta: {x: -5, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224737148314897476 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1845029106612852} + 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: 224158916202676450} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224851686321465618 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1088780650537144} + 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: 224727815042121968} + 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: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224863139894598096 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1533503607065902} + 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: 224149661361846782} + m_Father: {fileID: 224648924410367558} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 2.5, y: 0} + m_SizeDelta: {x: -5, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224863811848042012 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1725834767974758} + 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: 224622302808660274} + m_Father: {fileID: 224909733550344982} + 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: 437.75, y: 0} + m_SizeDelta: {x: 294.5, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224879196672571742 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1600138577311878} + 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: 224697826136675940} + m_Father: {fileID: 224158916202676450} + m_RootOrder: 2 + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224909733550344982 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1882328600128888} + 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: 224518492011422256} + - {fileID: 224863811848042012} + m_Father: {fileID: 224351626477584668} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 300, y: 0} + m_SizeDelta: {x: 590, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224942539576685536 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1649703547850748} + 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: 224351626477584668} + 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.5, y: 0.5} +--- !u!224 &224953559199069542 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1785157063272698} + 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: 224518492011422256} + 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.5, y: 0.5} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/Streaming.prefab.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/Streaming.prefab.meta new file mode 100644 index 000000000..e61c31f59 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/Streaming.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: cab27f13c267f9e42ab47de965b407b9 +timeCreated: 1571294301 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/StreamingSample.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/StreamingSample.cs new file mode 100644 index 000000000..180eb9de8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/StreamingSample.cs @@ -0,0 +1,272 @@ +using System; +using System.Collections.Generic; + +using UnityEngine; +using UnityEngine.UI; +using BestHTTP; + +namespace BestHTTP.Examples.HTTP +{ + public class StreamingSample : BestHTTP.Examples.Helpers.SampleBase + { +#pragma warning disable 0649 + + [Tooltip("The url of the resource to download")] + [SerializeField] + protected string _downloadPath = "/test100mb.dat"; + + [Header("Streaming Setup")] + + [SerializeField] + protected RectTransform _streamingSetupRoot; + + [SerializeField] + protected Slider _fragmentSizeSlider; + + [SerializeField] + protected Text _fragmentSizeText; + + [SerializeField] + protected Toggle _disableCacheToggle; + + [Header("Reporting")] + + [SerializeField] + protected RectTransform _reportingRoot; + + [SerializeField] + protected Slider _downloadProgressSlider; + + [SerializeField] + protected Text _downloadProgressText; + + [SerializeField] + protected Slider _processedDataSlider; + + [SerializeField] + protected Text _processedDataText; + + [SerializeField] + protected Text _statusText; + + [SerializeField] + protected Button _startDownload; + + [SerializeField] + protected Button _cancelDownload; + +#pragma warning restore + + /// + /// Cached request to be able to abort it + /// + protected HTTPRequest request; + + /// + /// Download(processing) progress. Its range is between [0..1] + /// + protected float progress; + + /// + /// The fragment size that we will set to the request + /// + protected int fragmentSize = HTTPResponse.MinReadBufferSize; + + protected virtual long DownloadLength { get; set; } + + protected virtual long ProcessedBytes { get; set; } + + protected override void Start() + { + base.Start(); + + this._streamingSetupRoot.gameObject.SetActive(true); + this._reportingRoot.gameObject.SetActive(false); + + this._startDownload.interactable = true; + this._cancelDownload.interactable = false; + + this._fragmentSizeSlider.value = (1024 * 1024 - HTTPResponse.MinReadBufferSize) / 1024; + this._fragmentSizeText.text = GUIHelper.GetBytesStr(1024 * 1024, 1); + } + + protected void OnDestroy() + { + // Stop the download if we are leaving this example + if (request != null && request.State < HTTPRequestStates.Finished) + { + request.OnDownloadProgress = null; + request.Callback = null; + request.Abort(); + } + } + + public void OnFragmentSizeSliderChanged(float value) + { + this.fragmentSize = HTTPResponse.MinReadBufferSize + (int)value * 1024; + this._fragmentSizeText.text = GUIHelper.GetBytesStr(this.fragmentSize, 1); + } + + public void Cancel() + { + if (this.request != null) + this.request.Abort(); + } + + protected virtual void SetupRequest() + { + request = new HTTPRequest(new Uri(base.sampleSelector.BaseURL + this._downloadPath), OnRequestFinished); + +#if !BESTHTTP_DISABLE_CACHING + // If we are writing our own file set it to true(disable), so don't duplicate it on the file-system + request.DisableCache = this._disableCacheToggle.isOn; +#endif + + request.StreamFragmentSize = fragmentSize; + + request.Tag = DateTime.Now; + + request.OnHeadersReceived += OnHeadersReceived; + request.OnDownloadProgress += OnDownloadProgress; + request.OnStreamingData += OnDataDownloaded; + } + + public virtual void StartStreaming() + { + SetupRequest(); + + // Start Processing the request + request.Send(); + + this._statusText.text = "Download started!"; + + // UI + this._streamingSetupRoot.gameObject.SetActive(false); + this._reportingRoot.gameObject.SetActive(true); + + this._startDownload.interactable = false; + this._cancelDownload.interactable = true; + + ResetProcessedValues(); + } + + private void OnHeadersReceived(HTTPRequest req, HTTPResponse resp, Dictionary> newHeaders) + { + var range = resp.GetRange(); + if (range != null) + this.DownloadLength = range.ContentLength; + else + { + var contentLength = resp.GetFirstHeaderValue("content-length"); + if (contentLength != null) + { + long length = 0; + if (long.TryParse(contentLength, out length)) + this.DownloadLength = length; + } + } + } + + protected virtual void OnRequestFinished(HTTPRequest req, HTTPResponse resp) + { + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + if (resp.IsSuccess) + { + DateTime downloadStarted = (DateTime)req.Tag; + TimeSpan diff = DateTime.Now - downloadStarted; + + this._statusText.text = string.Format("Streaming finished in {0:N0}ms", diff.TotalMilliseconds); + } + else + { + this._statusText.text = string.Format("Request finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}", + resp.StatusCode, + resp.Message, + resp.DataAsText); + Debug.LogWarning(this._statusText.text); + + request = null; + } + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + this._statusText.text = "Request Finished with Error! " + (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception"); + Debug.LogError(this._statusText.text); + + request = null; + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + this._statusText.text = "Request Aborted!"; + Debug.LogWarning(this._statusText.text); + + request = null; + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + this._statusText.text = "Connection Timed Out!"; + Debug.LogError(this._statusText.text); + + request = null; + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + this._statusText.text = "Processing the request Timed Out!"; + Debug.LogError(this._statusText.text); + + request = null; + break; + } + + // UI + + this._streamingSetupRoot.gameObject.SetActive(true); + this._reportingRoot.gameObject.SetActive(false); + + this._startDownload.interactable = true; + this._cancelDownload.interactable = false; + request = null; + } + + protected virtual void OnDownloadProgress(HTTPRequest originalRequest, long downloaded, long downloadLength) + { + double downloadPercent = (downloaded / (double)downloadLength) * 100; + this._downloadProgressSlider.value = (float)downloadPercent; + this._downloadProgressText.text = string.Format("{0:F1}%", downloadPercent); + } + + protected virtual bool OnDataDownloaded(HTTPRequest request, HTTPResponse response, byte[] dataFragment, int dataFragmentLength) + { + this.ProcessedBytes += dataFragmentLength; + SetDataProcessedUI(this.ProcessedBytes, this.DownloadLength); + + // Use downloaded data + + // Return true if dataFrament is processed so the plugin can recycle the byte[] + return true; + } + + protected void SetDataProcessedUI(long processed, long length) + { + float processedPercent = (processed / (float)length) * 100f; + + this._processedDataSlider.value = processedPercent; + this._processedDataText.text = GUIHelper.GetBytesStr(processed, 0); + } + + protected virtual void ResetProcessedValues() + { + this.ProcessedBytes = 0; + this.DownloadLength = 0; + + SetDataProcessedUI(this.ProcessedBytes, this.DownloadLength); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/StreamingSample.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/StreamingSample.cs.meta new file mode 100644 index 000000000..9ec3c4e92 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/StreamingSample.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7608ce95dba469c42b49baa85e3c300c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/TextureDownload.prefab b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/TextureDownload.prefab new file mode 100644 index 000000000..af03c46a6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/TextureDownload.prefab @@ -0,0 +1,2536 @@ +%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: 1978900574620928} + m_IsPrefabParent: 1 +--- !u!1 &1010927261485092 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224457382062436312} + - component: {fileID: 222041094460879354} + - component: {fileID: 114970278579574282} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1021150378744032 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224339817364913434} + m_Layer: 5 + m_Name: Handle Slide Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1026717701908038 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224418266539025766} + - component: {fileID: 114160810197965874} + - component: {fileID: 222525999805264336} + - component: {fileID: 114368137917254332} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1037012947572208 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224900985945059288} + - component: {fileID: 222205343775504434} + - component: {fileID: 114212743285244314} + - component: {fileID: 114834198146988508} + - component: {fileID: 114818461323822292} + - component: {fileID: 114720620907020986} + m_Layer: 5 + m_Name: Download Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1061876591656278 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224577689633929924} + - component: {fileID: 222767359727747026} + - component: {fileID: 114552874213256236} + m_Layer: 5 + m_Name: RawImage (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1067261826867770 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224269142573845246} + - component: {fileID: 222133851097569660} + - component: {fileID: 114878629729281202} + m_Layer: 5 + m_Name: RawImage (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1109037975667494 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224869515126958314} + - component: {fileID: 114249373614391020} + - component: {fileID: 114758294453573676} + m_Layer: 5 + m_Name: Images + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1254973198563964 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224869162912111210} + - component: {fileID: 222278262865657478} + - component: {fileID: 114060503272645018} + - component: {fileID: 114326451894768710} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1314340702121628 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224124020987131846} + - component: {fileID: 222814854611707660} + - component: {fileID: 114855335073929518} + - component: {fileID: 114363138395578846} + m_Layer: 5 + m_Name: Scrollbar Horizontal + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1320376050270406 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224407027644231546} + m_Layer: 5 + m_Name: Fill Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1333608967482558 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224164527856654640} + - component: {fileID: 114287164767959414} + - component: {fileID: 114081302204159260} + - component: {fileID: 114458361644466036} + m_Layer: 5 + m_Name: Max Connection Per Server + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1336596783304400 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224926319679402570} + - component: {fileID: 222362351774643232} + - component: {fileID: 114356786319338738} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1341686739195060 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224918594089176160} + - component: {fileID: 222047722181509498} + - component: {fileID: 114886372798073044} + m_Layer: 5 + m_Name: RawImage (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1378424040084478 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224723585497061190} + - component: {fileID: 222497829356910168} + - component: {fileID: 114416208213354870} + m_Layer: 5 + m_Name: RawImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1400991774639556 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224491836137944248} + - component: {fileID: 222309956034938208} + - component: {fileID: 114273625171519354} + m_Layer: 5 + m_Name: RawImage (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1490535246555388 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224106813229995182} + - component: {fileID: 222423836674906452} + - component: {fileID: 114276745623413802} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1506786092033146 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224992106825060472} + - component: {fileID: 114779705391025308} + - component: {fileID: 114229820179739298} + m_Layer: 5 + m_Name: Slider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1521887575242018 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224284719073490300} + - component: {fileID: 222124009295759984} + - component: {fileID: 114130427650351370} + m_Layer: 5 + m_Name: RawImage (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1534518794593504 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224047626860293406} + - component: {fileID: 222087089091150678} + - component: {fileID: 114964475305828074} + m_Layer: 5 + m_Name: MaxConnectionPerServer Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1564011430684648 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224805934285623856} + - component: {fileID: 222746050990241848} + - component: {fileID: 114969056650316508} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1589133327609190 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224900459368822980} + - component: {fileID: 222400243749212918} + - component: {fileID: 114487090215212210} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1635711171522088 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224933849710104940} + - component: {fileID: 222823048720085380} + - component: {fileID: 114617147837668076} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1698460661266148 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224950582223891992} + - component: {fileID: 114881087671196004} + - component: {fileID: 222871296025589270} + - component: {fileID: 114345549887377354} + - component: {fileID: 114548945116587584} + m_Layer: 5 + m_Name: Scroll View + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1709510751810724 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224958642727885556} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1757364386527276 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224281060461458484} + - component: {fileID: 222877193212740870} + - component: {fileID: 114777495005550380} + m_Layer: 5 + m_Name: RawImage (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1779616178107894 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224956920095113946} + - component: {fileID: 114197555091664234} + - component: {fileID: 114232728210501084} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1831534978618996 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224341440081667806} + - component: {fileID: 222351178238865036} + - component: {fileID: 114477379718077880} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1832212144746152 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224111514362844854} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1837755881883036 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224941899750448064} + - component: {fileID: 222500835270927896} + - component: {fileID: 114507803637065420} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1915386662911446 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224343549296215254} + - component: {fileID: 222435673448150584} + - component: {fileID: 114688106445142322} + m_Layer: 5 + m_Name: Cache label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1945150095050930 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224423077626635666} + - component: {fileID: 222454850970059514} + - component: {fileID: 114628845033228934} + m_Layer: 5 + m_Name: RawImage (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1954148729229844 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224794737149481408} + - component: {fileID: 222747736765047762} + - component: {fileID: 114377020688910676} + m_Layer: 5 + m_Name: RawImage (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1978900574620928 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224549646341019980} + - component: {fileID: 114948679469337320} + - component: {fileID: 114718093385411448} + m_Layer: 5 + m_Name: TextureDownload + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114060503272645018 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1254973198563964} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114081302204159260 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1333608967482558} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114130427650351370 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1521887575242018} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!114 &114160810197965874 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1026717701908038} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &114197555091664234 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1779616178107894} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114212743285244314 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1037012947572208} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114229820179739298 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1506786092033146} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: 10 + m_PreferredWidth: -1 + m_PreferredHeight: 20 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &114232728210501084 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1779616178107894} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, 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: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114249373614391020 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1109037975667494} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2095666955, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_StartCorner: 0 + m_StartAxis: 0 + m_CellSize: {x: 100, y: 150} + m_Spacing: {x: 10, y: 15} + m_Constraint: 0 + m_ConstraintCount: 2 +--- !u!114 &114273625171519354 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1400991774639556} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!114 &114276745623413802 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1490535246555388} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114287164767959414 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1333608967482558} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, 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: 5 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 0 +--- !u!114 &114326451894768710 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1254973198563964} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114969056650316508} + m_HandleRect: {fileID: 224805934285623856} + m_Direction: 2 + m_Value: 1 + m_Size: 0.6980098 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114345549887377354 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1698460661266148} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114356786319338738 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1336596783304400} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Start Download +--- !u!114 &114363138395578846 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1314340702121628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114477379718077880} + m_HandleRect: {fileID: 224341440081667806} + m_Direction: 0 + m_Value: 1 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114368137917254332 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1026717701908038} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114377020688910676 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1954148729229844} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!114 &114416208213354870 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1378424040084478} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!114 &114458361644466036 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1333608967482558} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114477379718077880 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1831534978618996} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114487090215212210 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1589133327609190} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Texture Download Example +--- !u!114 &114507803637065420 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1837755881883036} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114548945116587584 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1698460661266148} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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!114 &114552874213256236 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1061876591656278} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!114 &114617147837668076 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1635711171522088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0 +--- !u!114 &114628845033228934 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1945150095050930} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!114 &114688106445142322 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1915386662911446} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!114 &114718093385411448 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1978900574620928} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: af6ffe2bbf96d2b49ba3ef0713511d45, type: 3} + m_Name: + m_EditorClassIdentifier: + Category: HTTP + DisplayName: Texture Download + Description: 'With HTTPManager.MaxConnectionPerServer you can control how many requests + can be processed per server parallel. + + + Features demoed in this example: + + -Parallel requests to the same server + + -Controlling the parallelization + + -Automatic Caching + + -Create a Texture2D from the downloaded data' + BannedPlatforms: + _path: /images/Demo/ + _imageNames: + - One.png + - Two.png + - Three.png + - Four.png + - Five.png + - Six.png + - Seven.png + - Eight.png + - Nine.png + _images: + - {fileID: 114416208213354870} + - {fileID: 114628845033228934} + - {fileID: 114552874213256236} + - {fileID: 114130427650351370} + - {fileID: 114273625171519354} + - {fileID: 114377020688910676} + - {fileID: 114777495005550380} + - {fileID: 114886372798073044} + - {fileID: 114878629729281202} + _maxConnectionPerServerLabel: {fileID: 114617147837668076} + _cacheLabel: {fileID: 114688106445142322} +--- !u!114 &114720620907020986 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1037012947572208} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114758294453573676 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1109037975667494} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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!114 &114777495005550380 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1757364386527276} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!114 &114779705391025308 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1506786092033146} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -113659843, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114970278579574282} + m_FillRect: {fileID: 224106813229995182} + m_HandleRect: {fileID: 224457382062436312} + m_Direction: 0 + m_MinValue: 1 + m_MaxValue: 9 + m_WholeNumbers: 1 + m_Value: 1 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114718093385411448} + m_MethodName: OnMaxConnectionPerServerChanged + m_Mode: 0 + 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_TypeName: UnityEngine.UI.Slider+SliderEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114818461323822292 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1037012947572208} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114834198146988508 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1037012947572208} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114212743285244314} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114718093385411448} + m_MethodName: DownloadImages + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114855335073929518 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1314340702121628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114878629729281202 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1067261826867770} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!114 &114881087671196004 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1698460661266148} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 224956920095113946} + m_Horizontal: 1 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 224418266539025766} + m_HorizontalScrollbar: {fileID: 114363138395578846} + m_VerticalScrollbar: {fileID: 114326451894768710} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114886372798073044 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1341686739195060} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!114 &114948679469337320 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1978900574620928} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114964475305828074 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1534518794593504} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Max Connection Per Server:' +--- !u!114 &114969056650316508 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1564011430684648} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114970278579574282 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1010927261485092} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &222041094460879354 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1010927261485092} +--- !u!222 &222047722181509498 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1341686739195060} +--- !u!222 &222087089091150678 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1534518794593504} +--- !u!222 &222124009295759984 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1521887575242018} +--- !u!222 &222133851097569660 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1067261826867770} +--- !u!222 &222205343775504434 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1037012947572208} +--- !u!222 &222278262865657478 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1254973198563964} +--- !u!222 &222309956034938208 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1400991774639556} +--- !u!222 &222351178238865036 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1831534978618996} +--- !u!222 &222362351774643232 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1336596783304400} +--- !u!222 &222400243749212918 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1589133327609190} +--- !u!222 &222423836674906452 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1490535246555388} +--- !u!222 &222435673448150584 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1915386662911446} +--- !u!222 &222454850970059514 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1945150095050930} +--- !u!222 &222497829356910168 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1378424040084478} +--- !u!222 &222500835270927896 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1837755881883036} +--- !u!222 &222525999805264336 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1026717701908038} +--- !u!222 &222746050990241848 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1564011430684648} +--- !u!222 &222747736765047762 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1954148729229844} +--- !u!222 &222767359727747026 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1061876591656278} +--- !u!222 &222814854611707660 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1314340702121628} +--- !u!222 &222823048720085380 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1635711171522088} +--- !u!222 &222871296025589270 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1698460661266148} +--- !u!222 &222877193212740870 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1757364386527276} +--- !u!224 &224047626860293406 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1534518794593504} + 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: 224164527856654640} + 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: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224106813229995182 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1490535246555388} + 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: 224407027644231546} + 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: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224111514362844854 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1832212144746152} + 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: 224341440081667806} + m_Father: {fileID: 224124020987131846} + 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!224 &224124020987131846 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1314340702121628} + 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: 224111514362844854} + m_Father: {fileID: 224950582223891992} + 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!224 &224164527856654640 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1333608967482558} + 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: 224047626860293406} + - {fileID: 224933849710104940} + m_Father: {fileID: 224549646341019980} + 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: 362.0606, y: 0} + m_SizeDelta: {x: 714.1212, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224269142573845246 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1067261826867770} + 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: 224869515126958314} + m_RootOrder: 8 + 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!224 &224281060461458484 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1757364386527276} + 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: 224869515126958314} + m_RootOrder: 6 + 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!224 &224284719073490300 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1521887575242018} + 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: 224869515126958314} + m_RootOrder: 3 + 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!224 &224339817364913434 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1021150378744032} + 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: 224457382062436312} + m_Father: {fileID: 224992106825060472} + m_RootOrder: 2 + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224341440081667806 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1831534978618996} + 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: 224111514362844854} + 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!224 &224343549296215254 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1915386662911446} + 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: 224549646341019980} + m_RootOrder: 4 + 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!224 &224407027644231546 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1320376050270406} + 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: 224106813229995182} + m_Father: {fileID: 224992106825060472} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: -5, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224418266539025766 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1026717701908038} + 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: 224956920095113946} + m_Father: {fileID: 224950582223891992} + 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!224 &224423077626635666 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1945150095050930} + 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: 224869515126958314} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224457382062436312 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1010927261485092} + 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: 224339817364913434} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224491836137944248 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1400991774639556} + 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: 224869515126958314} + m_RootOrder: 4 + 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!224 &224549646341019980 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1978900574620928} + 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: 224900459368822980} + - {fileID: 224164527856654640} + - {fileID: 224992106825060472} + - {fileID: 224950582223891992} + - {fileID: 224343549296215254} + - {fileID: 224900985945059288} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224577689633929924 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1061876591656278} + 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: 224869515126958314} + 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.5, y: 0.5} +--- !u!224 &224723585497061190 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1378424040084478} + 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: 224869515126958314} + 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.5, y: 0.5} +--- !u!224 &224794737149481408 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1954148729229844} + 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: 224869515126958314} + m_RootOrder: 5 + 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!224 &224805934285623856 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1564011430684648} + 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: 224958642727885556} + 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!224 &224869162912111210 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1254973198563964} + 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: 224958642727885556} + m_Father: {fileID: 224950582223891992} + 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: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!224 &224869515126958314 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1109037975667494} + 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: 224723585497061190} + - {fileID: 224423077626635666} + - {fileID: 224577689633929924} + - {fileID: 224284719073490300} + - {fileID: 224491836137944248} + - {fileID: 224794737149481408} + - {fileID: 224281060461458484} + - {fileID: 224918594089176160} + - {fileID: 224269142573845246} + m_Father: {fileID: 224956920095113946} + 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.5, y: 0.5} +--- !u!224 &224900459368822980 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1589133327609190} + 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: 224549646341019980} + 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.5, y: 0.5} +--- !u!224 &224900985945059288 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1037012947572208} + 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: 224926319679402570} + m_Father: {fileID: 224549646341019980} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 362.0606, y: 0} + m_SizeDelta: {x: 714.1212, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224918594089176160 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1341686739195060} + 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: 224869515126958314} + m_RootOrder: 7 + 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!224 &224926319679402570 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1336596783304400} + 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: 224900985945059288} + 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.5, y: 0.5} +--- !u!224 &224933849710104940 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1635711171522088} + 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: 224164527856654640} + 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: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224941899750448064 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1837755881883036} + 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: 224992106825060472} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224950582223891992 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1698460661266148} + 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: 224418266539025766} + - {fileID: 224124020987131846} + - {fileID: 224869162912111210} + m_Father: {fileID: 224549646341019980} + m_RootOrder: 3 + 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!224 &224956920095113946 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1779616178107894} + 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: 224869515126958314} + m_Father: {fileID: 224418266539025766} + 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.000012648524} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!224 &224958642727885556 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1709510751810724} + 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: 224805934285623856} + m_Father: {fileID: 224869162912111210} + 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!224 &224992106825060472 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1506786092033146} + 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: 224941899750448064} + - {fileID: 224407027644231546} + - {fileID: 224339817364913434} + m_Father: {fileID: 224549646341019980} + 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.5, y: 0.5} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/TextureDownload.prefab.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/TextureDownload.prefab.meta new file mode 100644 index 000000000..783fd9599 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/TextureDownload.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1b7ac2a0c58362148840c49056fa7bda +timeCreated: 1571294809 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/TextureDownloadSample.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/TextureDownloadSample.cs new file mode 100644 index 000000000..48b4386b2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/TextureDownloadSample.cs @@ -0,0 +1,159 @@ +using System; +using System.Collections.Generic; + +using UnityEngine; +using UnityEngine.UI; +using BestHTTP; + +namespace BestHTTP.Examples.HTTP +{ + public sealed class TextureDownloadSample : BestHTTP.Examples.Helpers.SampleBase + { +#pragma warning disable 0649 + [Header("Texture Download Example")] + + [Tooltip("The URL of the server that will serve the image resources")] + [SerializeField] + private string _path = "/images/Demo/"; + + [Tooltip("The downloadable images")] + [SerializeField] + private string[] _imageNames = new string[9] { "One.png", "Two.png", "Three.png", "Four.png", "Five.png", "Six.png", "Seven.png", "Eight.png", "Nine.png" }; + + [SerializeField] + private RawImage[] _images = new RawImage[0]; + + [SerializeField] + private Text _maxConnectionPerServerLabel; + + [SerializeField] + private Text _cacheLabel; + +#pragma warning restore + + private byte savedMaxConnectionPerServer; + + #if !BESTHTTP_DISABLE_CACHING + private bool allDownloadedFromLocalCache; + #endif + + private List activeRequests = new List(); + + protected override void Start() + { + base.Start(); + + this.savedMaxConnectionPerServer = HTTPManager.MaxConnectionPerServer; + + // Set a well observable value + // This is how many concurrent requests can be made to a server + HTTPManager.MaxConnectionPerServer = 1; + + this._maxConnectionPerServerLabel.text = HTTPManager.MaxConnectionPerServer.ToString(); + } + + void OnDestroy() + { + // Set back to its defualt value. + HTTPManager.MaxConnectionPerServer = this.savedMaxConnectionPerServer; + foreach (var request in this.activeRequests) + request.Abort(); + this.activeRequests.Clear(); + } + + public void OnMaxConnectionPerServerChanged(float value) + { + HTTPManager.MaxConnectionPerServer = (byte)Mathf.RoundToInt(value); + this._maxConnectionPerServerLabel.text = HTTPManager.MaxConnectionPerServer.ToString(); + } + + public void DownloadImages() + { + // Set these metadatas to its initial values +#if !BESTHTTP_DISABLE_CACHING + allDownloadedFromLocalCache = true; +#endif + + for (int i = 0; i < _imageNames.Length; ++i) + { + // Set a blank placeholder texture, overriding previously downloaded texture + this._images[i].texture = null; + + // Construct the request + var request = new HTTPRequest(new Uri(this.sampleSelector.BaseURL + this._path + this._imageNames[i]), ImageDownloaded); + + // Set the Tag property, we can use it as a general storage bound to the request + request.Tag = this._images[i]; + + // Send out the request + request.Send(); + + this.activeRequests.Add(request); + } + + this._cacheLabel.text = string.Empty; + } + + /// + /// Callback function of the image download http requests + /// + void ImageDownloaded(HTTPRequest req, HTTPResponse resp) + { + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + if (resp.IsSuccess) + { + // The target RawImage reference is stored in the Tag property + RawImage rawImage = req.Tag as RawImage; + rawImage.texture = resp.DataAsTexture2D; + +#if !BESTHTTP_DISABLE_CACHING + // Update the cache-info variable + allDownloadedFromLocalCache = allDownloadedFromLocalCache && resp.IsFromCache; +#endif + } + else + { + Debug.LogWarning(string.Format("Request finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}", + resp.StatusCode, + resp.Message, + resp.DataAsText)); + } + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + Debug.LogError("Request Finished with Error! " + (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception")); + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + Debug.LogWarning("Request Aborted!"); + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + Debug.LogError("Connection Timed Out!"); + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + Debug.LogError("Processing the request Timed Out!"); + break; + } + + this.activeRequests.Remove(req); + if (this.activeRequests.Count == 0) + { +#if !BESTHTTP_DISABLE_CACHING + if (this.allDownloadedFromLocalCache) + this._cacheLabel.text = "All images loaded from local cache!"; + else +#endif + this._cacheLabel.text = string.Empty; + } + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/TextureDownloadSample.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/TextureDownloadSample.cs.meta new file mode 100644 index 000000000..004ce335d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/TextureDownloadSample.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: af6ffe2bbf96d2b49ba3ef0713511d45 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/UploadStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/UploadStream.cs new file mode 100644 index 000000000..cdc42a919 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/UploadStream.cs @@ -0,0 +1,222 @@ +using BestHTTP; +using System; +using System.IO; +using System.Threading; + +namespace BestHTTP.Examples +{ + public sealed class UploadStream : Stream + { + #region Private Fields + + /// + /// Buffer for reads + /// + MemoryStream ReadBuffer = new MemoryStream(); + + /// + /// Buffer for writes + /// + MemoryStream WriteBuffer = new MemoryStream(); + + /// + /// Indicates that we will not write more data to this stream + /// + bool noMoreData; + + /// + /// For thread synchronization + /// + AutoResetEvent ARE = new AutoResetEvent(false); + + /// + /// For thread synchronization + /// + object locker = new object(); + + #endregion + + #region Properties + + /// + /// Name of this stream for easier debugging + /// + public string Name { get; private set; } + + /// + /// true if we are read all data from the read buffer + /// + private bool IsReadBufferEmpty { get { lock (locker) return ReadBuffer.Position == ReadBuffer.Length; } } + + #endregion + + #region Constructors + + public UploadStream(string name) + : this() + { + this.Name = name; + } + + public UploadStream() + { + this.ReadBuffer = new MemoryStream(); + this.WriteBuffer = new MemoryStream(); + this.Name = string.Empty; + } + + #endregion + + #region Stream Implementation + + public override int Read(byte[] buffer, int offset, int count) + { + // We will not push more data to the write buffer + if (noMoreData) + { + // No data left in the read buffer + if (ReadBuffer.Position == ReadBuffer.Length) + { + // Is there any data in the write buffer? If so, switch the buffers + if (WriteBuffer.Length > 0) + SwitchBuffers(); + else + { + HTTPManager.Logger.Information("UploadStream", string.Format("{0} - Read - End Of Stream", this.Name)); + return -1; + } + } + else + return ReadBuffer.Read(buffer, offset, count); + } + + // There are no more data in the read buffer? Wait for it. + if (IsReadBufferEmpty) + { + ARE.WaitOne(); + + lock (locker) + if (IsReadBufferEmpty && WriteBuffer.Length > 0) + SwitchBuffers(); + } + + int read = -1; + + lock (locker) + read = ReadBuffer.Read(buffer, offset, count); + + return read; + } + + public override void Write(byte[] buffer, int offset, int count) + { + if (noMoreData) + throw new System.ArgumentException("noMoreData already set!"); + + lock (locker) + { + WriteBuffer.Write(buffer, offset, count); + + SwitchBuffers(); + } + + ARE.Set(); + } + + public override void Flush() + { + Finish(); + } + + #endregion + + #region Dispose Implementation + + protected override void Dispose(bool disposing) + { + if (disposing) + { + HTTPManager.Logger.Information("UploadStream", string.Format("{0} - Dispose", this.Name)); + + ReadBuffer.Dispose(); + ReadBuffer = null; + + WriteBuffer.Dispose(); + WriteBuffer = null; + +#if NETFX_CORE + ARE.Dispose(); +#else + ARE.Close(); +#endif + ARE = null; + } + + base.Dispose(disposing); + } + + #endregion + + #region Helper Functions + + public void Finish() + { + if (noMoreData) + throw new System.ArgumentException("noMoreData already set!"); + + HTTPManager.Logger.Information("UploadStream", string.Format("{0} - Finish", this.Name)); + + noMoreData = true; + + ARE.Set(); + } + + private bool SwitchBuffers() + { + // Switch the buffers only when all data are consumed from our read buffer + lock (locker) + { + if (ReadBuffer.Position == ReadBuffer.Length) + { + // This buffer will be the read buffer, we need to seek back to the beginning + WriteBuffer.Seek(0, SeekOrigin.Begin); + + // This will be the write buffer, set the length to zero + ReadBuffer.SetLength(0); + + // switch the two buffers + MemoryStream tmp = WriteBuffer; + WriteBuffer = ReadBuffer; + ReadBuffer = tmp; + + return true; + } + } + + return false; + } + + #endregion + + #region Not Implemented Functions and Properties + + public override bool CanRead { get { throw new NotImplementedException(); } } + public override bool CanSeek { get { throw new NotImplementedException(); } } + public override bool CanWrite { get { throw new NotImplementedException(); } } + + public override long Length { get { throw new NotImplementedException(); } } + public override long Position { get { throw new NotImplementedException(); } set { throw new NotImplementedException(); } } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotImplementedException(); + } + + public override void SetLength(long value) + { + throw new NotImplementedException(); + } + + #endregion + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/UploadStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/UploadStream.cs.meta new file mode 100644 index 000000000..28ecb0583 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/HTTP/UploadStream.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a2ab021301a7baf45a80b5a46275a140 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers.meta new file mode 100644 index 000000000..458e48a79 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 61ccf02e2b33b974b9bc1bfd84f2610c +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Components.meta similarity index 77% rename from GQ_URP/GQ/Assets/prefab/老模型.meta rename to GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Components.meta index 7877bc86b..bd1b367da 100644 --- a/GQ_URP/GQ/Assets/prefab/老模型.meta +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Components.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a7dec33c4e232db47bf3d2fa8859e896 +guid: 0d4bfda5b11c65749922fce76d61bbe6 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Components/Cache.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Components/Cache.cs new file mode 100644 index 000000000..6baf580db --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Components/Cache.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using BestHTTP.Core; +using UnityEngine; +using UnityEngine.UI; + +namespace BestHTTP.Examples.Helpers.Components +{ + public class Cache : MonoBehaviour + { +#pragma warning disable 0649, 0169 + [SerializeField] + private Text _count; + + [SerializeField] + private Text _size; + + [SerializeField] + private Button _clear; +#pragma warning restore + + private void Start() + { + PluginEventHelper.OnEvent += OnPluginEvent; + UpdateLabels(); + } + + private void OnDestroy() + { + PluginEventHelper.OnEvent -= OnPluginEvent; + } + + private void OnPluginEvent(PluginEventInfo @event) + { + if (@event.Event == PluginEvents.SaveCacheLibrary) + UpdateLabels(); + } + + private void UpdateLabels() + { +#if !BESTHTTP_DISABLE_CACHING + this._count.text = BestHTTP.Caching.HTTPCacheService.GetCacheEntityCount().ToString("N0"); + this._size.text = BestHTTP.Caching.HTTPCacheService.GetCacheSize().ToString("N0"); +#else + this._count.text = "0"; + this._size.text = "0"; +#endif + } + + public void OnClearButtonClicked() + { +#if !BESTHTTP_DISABLE_CACHING + BestHTTP.Caching.HTTPCacheService.BeginClear(); +#endif + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Components/Cache.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Components/Cache.cs.meta new file mode 100644 index 000000000..64a6a4475 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Components/Cache.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b640e13d843caef4885814c6d13d8e3d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Components/Cookies.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Components/Cookies.cs new file mode 100644 index 000000000..5c67db724 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Components/Cookies.cs @@ -0,0 +1,63 @@ +using BestHTTP.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.UI; + +namespace BestHTTP.Examples.Helpers.Components +{ + public class Cookies : MonoBehaviour + { +#pragma warning disable 0649, 0169 + [SerializeField] + private Text _count; + + [SerializeField] + private Text _size; + + [SerializeField] + private Button _clear; +#pragma warning restore + + private void Start() + { + PluginEventHelper.OnEvent += OnPluginEvent; + UpdateLabels(); + } + + private void OnDestroy() + { + PluginEventHelper.OnEvent -= OnPluginEvent; + } + + private void OnPluginEvent(PluginEventInfo @event) + { +#if !BESTHTTP_DISABLE_COOKIES + if (@event.Event == PluginEvents.SaveCookieLibrary) + UpdateLabels(); +#endif + } + + private void UpdateLabels() + { +#if !BESTHTTP_DISABLE_COOKIES + var cookies = BestHTTP.Cookies.CookieJar.GetAll(); + var size = cookies.Sum(c => c.GuessSize()); + + this._count.text = cookies.Count.ToString("N0"); + this._size.text = size.ToString("N0"); +#else + this._count.text = "0"; + this._size.text = "0"; +#endif + } + + public void OnClearButtonClicked() + { +#if !BESTHTTP_DISABLE_COOKIES + BestHTTP.Cookies.CookieJar.Clear(); +#endif + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Components/Cookies.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Components/Cookies.cs.meta new file mode 100644 index 000000000..f5845b41f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Components/Cookies.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5b9db2d0fa31b054b835fb38d688f211 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/GUIHelper.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/GUIHelper.cs new file mode 100644 index 000000000..c3cfbeb71 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/GUIHelper.cs @@ -0,0 +1,60 @@ +using BestHTTP.Examples.Helpers; +using System; +using System.Collections; +using UnityEngine; +using UnityEngine.UI; + +namespace BestHTTP.Examples +{ + public static class GUIHelper + { + // https://en.wikipedia.org/wiki/Binary_prefix + private static string[] prefixes = new string[] { " B", " KiB", " MiB", " GiB", " TiB" }; + public static string GetBytesStr(double bytes, byte precision) + { + int prefixIdx = 0; + while (bytes >= 1024) + { + bytes = bytes / 1024; + prefixIdx++; + } + + return bytes.ToString("F" + precision) + prefixes[prefixIdx]; + } + + public static void RemoveChildren(RectTransform transform, int maxChildCount) + { + while (transform.childCount > maxChildCount) + { + var child = transform.GetChild(0); + child.SetParent(null); + + GameObject.Destroy(child.gameObject); + } + } + + public static TextListItem AddText(TextListItem prefab, RectTransform contentRoot, string text, int maxEntries, ScrollRect scrollRect) + { + if (contentRoot == null) + return null; + + var listItem = GameObject.Instantiate(prefab, contentRoot, false); + listItem.SetText(text); + + GUIHelper.RemoveChildren(contentRoot, maxEntries); + + if (scrollRect != null && scrollRect.isActiveAndEnabled) + scrollRect.StartCoroutine(ScrollToBottom(scrollRect)); + + return listItem; + } + + public static IEnumerator ScrollToBottom(ScrollRect scrollRect) + { + yield return null; + + if (scrollRect != null && scrollRect.isActiveAndEnabled) + scrollRect.normalizedPosition = new Vector2(0, 0); + } + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/GUIHelper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/GUIHelper.cs.meta new file mode 100644 index 000000000..e0eaec51b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/GUIHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fd560ff6f0fa60844a43a82db1ad03be +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Link.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Link.cs new file mode 100644 index 000000000..cd518051e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Link.cs @@ -0,0 +1,36 @@ +using System.Runtime.InteropServices; +using UnityEngine; +using UnityEngine.EventSystems; + +namespace BestHTTP.Examples +{ + public class Link : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerDownHandler + { + public string url; + public Texture2D linkSelectCursor; + + void IPointerDownHandler.OnPointerDown(PointerEventData eventData) + { +#if UNITY_WEBGL && !UNITY_EDITOR + openWindow(this.url); +#else + Application.OpenURL(this.url); +#endif + } + + void IPointerEnterHandler.OnPointerEnter(PointerEventData eventData) + { + Cursor.SetCursor(this.linkSelectCursor, Vector2.zero, CursorMode.Auto); + } + + void IPointerExitHandler.OnPointerExit(PointerEventData eventData) + { + Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto); + } + +#if UNITY_WEBGL && !UNITY_EDITOR + [DllImport("__Internal")] + private static extern void openWindow(string url); +#endif + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Link.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Link.cs.meta new file mode 100644 index 000000000..45989333d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Link.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 3ab0e37de384a5b4d8320cdd8644b44c +timeCreated: 1572211254 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/LinkSelect.png b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/LinkSelect.png new file mode 100644 index 000000000..5d6379e4e Binary files /dev/null and b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/LinkSelect.png differ diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/LinkSelect.png.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/LinkSelect.png.meta new file mode 100644 index 000000000..da527af20 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/LinkSelect.png.meta @@ -0,0 +1,107 @@ +fileFormatVersion: 2 +guid: bcfb03f220265ea4e9fd88ae5af90176 +timeCreated: 1572242320 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 1 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -1 + 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} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 7 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Plugins.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Plugins.meta new file mode 100644 index 000000000..8fe530982 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Plugins.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 115e9a87669ff8641b48c627cf3d14e2 +folderAsset: yes +timeCreated: 1572243579 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Plugins/WebGL.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Plugins/WebGL.meta new file mode 100644 index 000000000..da135df20 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Plugins/WebGL.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 33f2b105c6dd5f6418e70c8858a1387f +folderAsset: yes +timeCreated: 1572243588 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Plugins/WebGL/OpenWindow.jslib b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Plugins/WebGL/OpenWindow.jslib new file mode 100644 index 000000000..12fcf9e01 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Plugins/WebGL/OpenWindow.jslib @@ -0,0 +1,21 @@ +/* + * Based on: + * https://github.com/valyard/UnityWebGLOpenLink + */ + +var OpenWindowPlugin = { + openWindow: function(link) + { + var url = Pointer_stringify(link); + + var func = function() + { + window.open(url); + document.removeEventListener('mouseup', func); + } + + document.addEventListener('mouseup', func); + } +}; + +mergeInto(LibraryManager.library, OpenWindowPlugin); \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Plugins/WebGL/OpenWindow.jslib.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Plugins/WebGL/OpenWindow.jslib.meta new file mode 100644 index 000000000..5517b9323 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/Plugins/WebGL/OpenWindow.jslib.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: ba6012acd13dbb34390ea3e1de9e8a93 +timeCreated: 1572243826 +licenseType: Store +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/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SampleBase.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SampleBase.cs new file mode 100644 index 000000000..92ab11f00 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SampleBase.cs @@ -0,0 +1,23 @@ +using UnityEngine; + +namespace BestHTTP.Examples.Helpers +{ + public abstract class SampleBase : MonoBehaviour + { + [Header("Common Properties")] + public string Category; + public string DisplayName; + + [TextArea] + public string Description; + + public RuntimePlatform[] BannedPlatforms = new RuntimePlatform[0]; + + protected SampleRoot sampleSelector; + + protected virtual void Start() + { + this.sampleSelector = FindObjectOfType(); + } + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SampleBase.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SampleBase.cs.meta new file mode 100644 index 000000000..d69d49095 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SampleBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9f8792c52d9520447a1c9d7139925f57 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI.meta new file mode 100644 index 000000000..0bc4dd666 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 901494a9e35e283418e26dd2ae48f62c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/Category.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/Category.cs new file mode 100644 index 000000000..81dcf5fe8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/Category.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +namespace BestHTTP.Examples.Helpers.SelectorUI +{ + public sealed class Category : MonoBehaviour + { +#pragma warning disable 0649 + + [SerializeField] + private Text _text; + +#pragma warning restore + + public void SetLabel(string category) + { + this._text.text = category; + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/Category.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/Category.cs.meta new file mode 100644 index 000000000..0c868c8fa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/Category.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1101c9e1e1276414d8062a6a7ca4db45 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/Category.prefab b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/Category.prefab new file mode 100644 index 000000000..16e4d7d3a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/Category.prefab @@ -0,0 +1,171 @@ +%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: 1904131878966858} + m_IsPrefabParent: 1 +--- !u!1 &1904131878966858 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224461754452575090} + - component: {fileID: 114104161713339180} + - component: {fileID: 114607162270506794} + - component: {fileID: 114804161523563040} + m_Layer: 5 + m_Name: Category + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1966926200078894 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224471434808036404} + - component: {fileID: 222752501853716432} + - component: {fileID: 114045595599197664} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114045595599197664 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1966926200078894} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Sample Name +--- !u!114 &114104161713339180 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1904131878966858} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1101c9e1e1276414d8062a6a7ca4db45, type: 3} + m_Name: + m_EditorClassIdentifier: + _text: {fileID: 114045595599197664} +--- !u!114 &114607162270506794 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1904131878966858} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &114804161523563040 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1904131878966858} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!222 &222752501853716432 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1966926200078894} +--- !u!224 &224461754452575090 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1904131878966858} + 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: 224471434808036404} + 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: 400, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224471434808036404 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1966926200078894} + 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: 224461754452575090} + 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.5, y: 0.5} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/Category.prefab.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/Category.prefab.meta new file mode 100644 index 000000000..be4ffb57e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/Category.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fc69717198f6d93498890b7b67812172 +timeCreated: 1571212112 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleInfo.cs new file mode 100644 index 000000000..03450f692 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleInfo.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +namespace BestHTTP.Examples.Helpers.SelectorUI +{ + public sealed class ExampleInfo : MonoBehaviour + { +#pragma warning disable 0649 + [SerializeField] + private Text _header; + + [SerializeField] + private Text _description; + +#pragma warning restore + + private SampleSelectorUI _parentUI; + + private SampleBase _example; + + public void Setup(SampleSelectorUI parentUI, SampleBase example) + { + this._parentUI = parentUI; + this._example = example; + + this._header.text = this._example.name; + this._description.text = this._example.Description; + } + + public void OnExecuteExample() + { + this._parentUI.ExecuteExample(this._example); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleInfo.cs.meta new file mode 100644 index 000000000..733c2f34e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fd424cc4259865c4ba2fb4d9d68d0272 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleInfo.prefab b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleInfo.prefab new file mode 100644 index 000000000..575f68f0d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleInfo.prefab @@ -0,0 +1,507 @@ +%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: 1844362866936956} + m_IsPrefabParent: 1 +--- !u!1 &1164538047482000 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224919186422011706} + - component: {fileID: 222389287056714158} + - component: {fileID: 114764438814610556} + - component: {fileID: 114425745104630664} + - component: {fileID: 114698872193548206} + - component: {fileID: 114431572224555080} + m_Layer: 5 + m_Name: Execute Sample Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1248744110497022 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224829437101102402} + - component: {fileID: 222702223361243722} + - component: {fileID: 114859111753421280} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1397735183102074 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224216400874628136} + - component: {fileID: 222516365031537928} + - component: {fileID: 114059492809184142} + - component: {fileID: 114493726555860862} + m_Layer: 5 + m_Name: Description + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1531245648659982 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224368887501416132} + - component: {fileID: 222882642833739976} + - component: {fileID: 114666879149101946} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1844362866936956 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224811306304922960} + - component: {fileID: 114988937263723000} + - component: {fileID: 114645756897919032} + - component: {fileID: 114471653971156696} + m_Layer: 5 + m_Name: ExampleInfo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114059492809184142 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1397735183102074} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Description +--- !u!114 &114425745104630664 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1164538047482000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114764438814610556} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114471653971156696} + m_MethodName: OnExecuteExample + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114431572224555080 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1164538047482000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114471653971156696 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1844362866936956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fd424cc4259865c4ba2fb4d9d68d0272, type: 3} + m_Name: + m_EditorClassIdentifier: + _header: {fileID: 114666879149101946} + _description: {fileID: 114059492809184142} +--- !u!114 &114493726555860862 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1397735183102074} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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!114 &114645756897919032 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1844362866936956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: 3 + m_FlexibleHeight: 1 + m_LayoutPriority: 1 +--- !u!114 &114666879149101946 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1531245648659982} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Header +--- !u!114 &114698872193548206 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1164538047482000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114764438814610556 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1164538047482000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114859111753421280 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1248744110497022} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Execute +--- !u!114 &114988937263723000 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1844362866936956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!222 &222389287056714158 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1164538047482000} +--- !u!222 &222516365031537928 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1397735183102074} +--- !u!222 &222702223361243722 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1248744110497022} +--- !u!222 &222882642833739976 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1531245648659982} +--- !u!224 &224216400874628136 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1397735183102074} + 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: 224811306304922960} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224368887501416132 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1531245648659982} + 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: 224811306304922960} + 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.5, y: 0.5} +--- !u!224 &224811306304922960 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1844362866936956} + 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: 224368887501416132} + - {fileID: 224216400874628136} + - {fileID: 224919186422011706} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224829437101102402 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1248744110497022} + 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: 224919186422011706} + 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.5, y: 0.5} +--- !u!224 &224919186422011706 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1164538047482000} + 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: 224829437101102402} + m_Father: {fileID: 224811306304922960} + 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: 300, y: 0} + m_SizeDelta: {x: 590, y: 0} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleInfo.prefab.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleInfo.prefab.meta new file mode 100644 index 000000000..da43737ed --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleInfo.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d57a4ffd57493de4f9f41009f52c658e +timeCreated: 1571212676 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleListItem.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleListItem.cs new file mode 100644 index 000000000..7cf82a296 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleListItem.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +namespace BestHTTP.Examples.Helpers.SelectorUI +{ + public sealed class ExampleListItem : MonoBehaviour + { +#pragma warning disable 0649 + [SerializeField] + private Text _text; +#pragma warning restore + + public SampleSelectorUI ParentUI { get; private set; } + + public SampleBase ExamplePrefab { get; private set; } + + public void Setup(SampleSelectorUI parentUI, SampleBase prefab) + { + this.ParentUI = parentUI; + this.ExamplePrefab = prefab; + + this._text.text = prefab.DisplayName; + } + + public void OnButton() + { + this.ParentUI.SelectSample(this); + } + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleListItem.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleListItem.cs.meta new file mode 100644 index 000000000..e4a279c42 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleListItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 376fb4eb0776e41479fb60f520aaa1f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleListItem.prefab b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleListItem.prefab new file mode 100644 index 000000000..53317c3c1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleListItem.prefab @@ -0,0 +1,222 @@ +%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: 1972462828926934} + m_IsPrefabParent: 1 +--- !u!1 &1706707392201452 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224973040142512786} + - component: {fileID: 222441293650573372} + - component: {fileID: 114389340898110916} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1972462828926934 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224145737800144754} + - component: {fileID: 222972952305363732} + - component: {fileID: 114266276035656386} + - component: {fileID: 114629809360314506} + - component: {fileID: 114416681848148688} + m_Layer: 5 + m_Name: ExampleListItem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114266276035656386 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1972462828926934} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114389340898110916 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1706707392201452} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Button +--- !u!114 &114416681848148688 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1972462828926934} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 376fb4eb0776e41479fb60f520aaa1f3, type: 3} + m_Name: + m_EditorClassIdentifier: + _text: {fileID: 114389340898110916} +--- !u!114 &114629809360314506 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1972462828926934} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114266276035656386} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114416681848148688} + m_MethodName: OnButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!222 &222441293650573372 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1706707392201452} +--- !u!222 &222972952305363732 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1972462828926934} +--- !u!224 &224145737800144754 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1972462828926934} + 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: 224973040142512786} + 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: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224973040142512786 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1706707392201452} + 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: 224145737800144754} + 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} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleListItem.prefab.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleListItem.prefab.meta new file mode 100644 index 000000000..4882cde31 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/ExampleListItem.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 216b271b42611e447829c7e7de089ab4 +timeCreated: 1571212394 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/SampleSelectorUI.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/SampleSelectorUI.cs new file mode 100644 index 000000000..818391eca --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/SampleSelectorUI.cs @@ -0,0 +1,101 @@ +using System; +using System.Linq; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +namespace BestHTTP.Examples.Helpers.SelectorUI +{ + public class SampleSelectorUI : MonoBehaviour + { +#pragma warning disable 0649, 0169 + + [SerializeField] + private Category _categoryListItemPrefab; + + [SerializeField] + private ExampleListItem _exampleListItemPrefab; + + [SerializeField] + private ExampleInfo _exampleInfoPrefab; + + [SerializeField] + private RectTransform _listRoot; + + [SerializeField] + private RectTransform _dyncamicContentRoot; + + private SampleRoot sampleSelector; + private ExampleListItem selectedSample; + private GameObject dynamicContent; + +#pragma warning restore + + private void Start() + { + this.sampleSelector = FindObjectOfType(); + DisplayExamples(); + } + + private void DisplayExamples() + { + // Sort examples by category + this.sampleSelector.samples.Sort((a, b) => { + if (a == null || b == null) + return 0; + + int result = a.Category.CompareTo(b.Category); + if (result == 0) + result = a.DisplayName.CompareTo(b.DisplayName); + return result; + }); + + string currentCategory = null; + + for (int i = 0; i < this.sampleSelector.samples.Count; ++i) + { + var examplePrefab = this.sampleSelector.samples[i]; + + if (examplePrefab == null) + continue; + + if (examplePrefab.BannedPlatforms.Contains(UnityEngine.Application.platform)) + continue; + + if (currentCategory != examplePrefab.Category) + { + var category = Instantiate(this._categoryListItemPrefab, this._listRoot, false); + category.SetLabel(examplePrefab.Category); + + currentCategory = examplePrefab.Category; + } + + var listItem = Instantiate(this._exampleListItemPrefab, this._listRoot, false); + listItem.Setup(this, examplePrefab); + + if (this.sampleSelector.selectedExamplePrefab == null) + { + SelectSample(listItem); + } + } + } + + public void SelectSample(ExampleListItem item) + { + this.sampleSelector.selectedExamplePrefab = item.ExamplePrefab; + if (this.dynamicContent != null) + Destroy(this.dynamicContent); + + var example = Instantiate(this._exampleInfoPrefab, this._dyncamicContentRoot, false); + example.Setup(this, item.ExamplePrefab); + this.dynamicContent = example.gameObject; + } + + public void ExecuteExample(SampleBase example) + { + if (this.dynamicContent != null) + Destroy(this.dynamicContent); + this.dynamicContent = Instantiate(example, this._dyncamicContentRoot, false).gameObject; + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/SampleSelectorUI.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/SampleSelectorUI.cs.meta new file mode 100644 index 000000000..c1440025f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/SelectorUI/SampleSelectorUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bd639b2a784de314984c606b7e8329e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/TextListItem.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/TextListItem.cs new file mode 100644 index 000000000..72ae784c4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/TextListItem.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; + +using UnityEngine; +using UnityEngine.UI; + +namespace BestHTTP.Examples.Helpers +{ + public class TextListItem : MonoBehaviour + { +#pragma warning disable 0649 + [SerializeField] + private Text _text; +#pragma warning restore + + public void SetText(string text) + { + this._text.text = text; + } + + public void AddLeftPadding(int padding) + { + this.GetComponent().padding.left += padding; + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/TextListItem.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/TextListItem.cs.meta new file mode 100644 index 000000000..09314d949 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/TextListItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 05975660b0231b84f849693106b207d1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/TextListItem.prefab b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/TextListItem.prefab new file mode 100644 index 000000000..9bec234d0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/TextListItem.prefab @@ -0,0 +1,206 @@ +%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: 1727935926237334} + m_IsPrefabParent: 1 +--- !u!1 &1503879635514882 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224106021874867618} + - component: {fileID: 222738347872656220} + - component: {fileID: 114900463745114476} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1727935926237334 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224916463173798366} + - component: {fileID: 222969618919079142} + - component: {fileID: 114878452276715702} + - component: {fileID: 114769119028883068} + - component: {fileID: 114599056085522236} + - component: {fileID: 114144824129317776} + m_Layer: 5 + m_Name: TextListItem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114144824129317776 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1727935926237334} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 05975660b0231b84f849693106b207d1, type: 3} + m_Name: + m_EditorClassIdentifier: + _text: {fileID: 114900463745114476} +--- !u!114 &114599056085522236 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1727935926237334} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114769119028883068 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1727935926237334} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 2 + m_Top: 2 + m_Bottom: 2 + m_ChildAlignment: 0 + m_Spacing: 2 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114878452276715702 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1727935926237334} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.39215687} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114900463745114476 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1503879635514882} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 10 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: New Text +--- !u!222 &222738347872656220 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1503879635514882} +--- !u!222 &222969618919079142 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1727935926237334} +--- !u!224 &224106021874867618 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1503879635514882} + 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: 224916463173798366} + 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.5, y: 0.5} +--- !u!224 &224916463173798366 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1727935926237334} + 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: 224106021874867618} + 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: 400, y: 0} + m_SizeDelta: {x: 800, y: 0} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/TextListItem.prefab.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/TextListItem.prefab.meta new file mode 100644 index 000000000..9198c0d48 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Helpers/TextListItem.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 46bdaff7a8bf5d34da870d286f962c69 +timeCreated: 1571213203 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Plugin.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Plugin.meta new file mode 100644 index 000000000..d1822dbb1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Plugin.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e4b189b8db53fae40b63e2563cc658ba +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Plugin/AsyncExtensions.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/Plugin/AsyncExtensions.cs new file mode 100644 index 000000000..05f17a861 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Plugin/AsyncExtensions.cs @@ -0,0 +1,57 @@ +#if CSHARP_7_OR_LATER +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace BestHTTP +{ + public static class AsyncExtensions + { + public static Task GetFromJsonResultAsync(this HTTPRequest request, CancellationToken token = default) + { + return HTTPRequestAsyncExtensions.CreateTask(request, token, (req, resp, tcs) => + { + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + if (resp.IsSuccess) + tcs.TrySetResult(BestHTTP.JSON.LitJson.JsonMapper.ToObject(resp.DataAsText)); + else + tcs.TrySetException(HTTPRequestAsyncExtensions.CreateException("Request finished Successfully, but the server sent an error.", resp)); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + HTTPRequestAsyncExtensions.VerboseLogging(request, "Request Finished with Error! " + (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception")); + + tcs.TrySetException(HTTPRequestAsyncExtensions.CreateException("No Exception", null, req.Exception)); + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + HTTPRequestAsyncExtensions.VerboseLogging(request, "Request Aborted!"); + + tcs.TrySetCanceled(); + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + HTTPRequestAsyncExtensions.VerboseLogging(request, "Connection Timed Out!"); + + tcs.TrySetException(HTTPRequestAsyncExtensions.CreateException("Connection Timed Out!")); + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + HTTPRequestAsyncExtensions.VerboseLogging(request, "Processing the request Timed Out!"); + + tcs.TrySetException(HTTPRequestAsyncExtensions.CreateException("Processing the request Timed Out!")); + break; + } + }); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Plugin/AsyncExtensions.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Plugin/AsyncExtensions.cs.meta new file mode 100644 index 000000000..5f0f8315e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Plugin/AsyncExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f0aefe97b2a43844850d2d8b234e819 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SampleRoot.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SampleRoot.cs new file mode 100644 index 000000000..0b92c2bbb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SampleRoot.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections.Generic; + +using UnityEngine; +using UnityEngine.UI; + +using BestHTTP.Examples.Helpers; + +namespace BestHTTP.Examples +{ + public class SampleRoot : MonoBehaviour + { +#pragma warning disable 0649, 0169 + [Header("Common Properties")] + public string BaseURL = "https://besthttpwebgldemo.azurewebsites.net"; + + [Header("References")] + + [SerializeField] + private Text _pluginVersion; + + [SerializeField] + private Dropdown _logLevelDropdown; + + [SerializeField] + private Text _proxyLabel; + + [SerializeField] + private InputField _proxyInputField; + +#pragma warning restore + + [SerializeField] + public List samples = new List(); + + [HideInInspector] + public SampleBase selectedExamplePrefab; + + private void Start() + { + Application.runInBackground = true; + + this._pluginVersion.text = "Version: " + HTTPManager.UserAgent; + + int logLevel = PlayerPrefs.GetInt("BestHTTP.HTTPManager.Logger.Level", (int)HTTPManager.Logger.Level); + this._logLevelDropdown.value = logLevel; + HTTPManager.Logger.Level = (BestHTTP.Logger.Loglevels)logLevel; + +#if (UNITY_WEBGL && !UNITY_EDITOR) || BESTHTTP_DISABLE_PROXY + this._proxyLabel.gameObject.SetActive(false); + this._proxyInputField.gameObject.SetActive(false); +#else + string proxyURL = PlayerPrefs.GetString("BestHTTP.HTTPManager.Proxy", null); + if (!string.IsNullOrEmpty(proxyURL)) + { + try + { + HTTPManager.Proxy = new HTTPProxy(new Uri(proxyURL), null, true); +#if UNITY_2019_1_OR_NEWER + this._proxyInputField.SetTextWithoutNotify(proxyURL); +#else + this._proxyInputField.onEndEdit.RemoveAllListeners(); + this._proxyInputField.text = proxyURL; + this._proxyInputField.onEndEdit.AddListener(this.OnProxyEditEnd); +#endif + } + catch + { } + } + else + HTTPManager.Proxy = null; +#endif + +#if !BESTHTTP_DISABLE_CACHING + // Remove too old cache entries. + BestHTTP.Caching.HTTPCacheService.BeginMaintainence(new BestHTTP.Caching.HTTPCacheMaintananceParams(TimeSpan.FromDays(30), ulong.MaxValue)); +#endif + } + + public void OnLogLevelChanged(int idx) + { + HTTPManager.Logger.Level = (BestHTTP.Logger.Loglevels)idx; + PlayerPrefs.SetInt("BestHTTP.HTTPManager.Logger.Level", idx); + } + + public void OnProxyEditEnd(string proxyURL) + { +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_PROXY + try + { + if (string.IsNullOrEmpty(this._proxyInputField.text)) + HTTPManager.Proxy = null; + else + HTTPManager.Proxy = new HTTPProxy(new Uri(this._proxyInputField.text), null, true); + + PlayerPrefs.SetString("BestHTTP.HTTPManager.Proxy", this._proxyInputField.text); + } + catch + { } +#endif + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SampleRoot.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SampleRoot.cs.meta new file mode 100644 index 000000000..a2d8c284b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SampleRoot.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0eb115c0377f90041a9ecfde21658f92 +timeCreated: 1571213708 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SampleSelector.unity b/GQ_URP/GQ/Assets/Best HTTP/Examples/SampleSelector.unity new file mode 100644 index 000000000..0f16fa01b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SampleSelector.unity @@ -0,0 +1,6086 @@ +%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: 1 + 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: 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: 512 + 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: 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 &92191008 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 92191009} + - component: {fileID: 92191011} + - component: {fileID: 92191010} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &92191009 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 92191008} + 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: 1248407391} + 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.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &92191010 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 92191008} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Enter proxy address... +--- !u!222 &92191011 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 92191008} + m_CullTransparentMesh: 0 +--- !u!1 &99079544 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 99079545} + - component: {fileID: 99079547} + - component: {fileID: 99079546} + m_Layer: 5 + m_Name: Count + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &99079545 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99079544} + 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: 474993162} + - {fileID: 1517813667} + m_Father: {fileID: 1791343486} + 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: 209.875, y: 0} + m_SizeDelta: {x: 409.75, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &99079546 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99079544} + 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!114 &99079547 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99079544} + 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: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!1 &109104420 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 109104421} + - component: {fileID: 109104423} + - component: {fileID: 109104422} + m_Layer: 5 + m_Name: Size Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &109104421 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 109104420} + 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: 1476244622} + 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.5, y: 0.5} +--- !u!114 &109104422 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 109104420} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Size:' +--- !u!222 &109104423 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 109104420} + m_CullTransparentMesh: 0 +--- !u!1 &123556534 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 123556535} + - component: {fileID: 123556537} + - component: {fileID: 123556536} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &123556535 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 123556534} + 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: 1983980535} + 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!114 &123556536 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 123556534} + 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_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!222 &123556537 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 123556534} + m_CullTransparentMesh: 0 +--- !u!1 &180224809 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 180224810} + - component: {fileID: 180224812} + - component: {fileID: 180224811} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &180224810 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 180224809} + 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: 274715338} + 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.5, y: 0.5} +--- !u!114 &180224811 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 180224809} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Cookies +--- !u!222 &180224812 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 180224809} + m_CullTransparentMesh: 0 +--- !u!1 &268882189 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 268882190} + - component: {fileID: 268882194} + - component: {fileID: 268882193} + - component: {fileID: 268882192} + - component: {fileID: 268882191} + - component: {fileID: 268882195} + m_Layer: 5 + m_Name: Documentation + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &268882190 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 268882189} + 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: 1902271796} + m_Father: {fileID: 989819535} + 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: 62.75, y: 0} + m_SizeDelta: {x: 125.5, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &268882191 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 268882189} + 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: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!114 &268882192 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 268882189} + 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!114 &268882193 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 268882189} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 0} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!222 &268882194 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 268882189} + m_CullTransparentMesh: 0 +--- !u!114 &268882195 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 268882189} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3ab0e37de384a5b4d8320cdd8644b44c, type: 3} + m_Name: + m_EditorClassIdentifier: + url: https://benedicht.github.io/BestHTTP-Documentation/ + linkSelectCursor: {fileID: 2800000, guid: bcfb03f220265ea4e9fd88ae5af90176, type: 3} +--- !u!1 &274715337 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 274715338} + - component: {fileID: 274715343} + - component: {fileID: 274715342} + - component: {fileID: 274715341} + - component: {fileID: 274715340} + - component: {fileID: 274715339} + m_Layer: 5 + m_Name: Cookies + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &274715338 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274715337} + 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: 180224810} + - {fileID: 819822692} + - {fileID: 1476244622} + - {fileID: 893967395} + m_Father: {fileID: 673663373} + 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: 609.875, y: 0} + m_SizeDelta: {x: 380.25, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &274715339 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274715337} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5b9db2d0fa31b054b835fb38d688f211, type: 3} + m_Name: + m_EditorClassIdentifier: + _count: {fileID: 614976414} + _size: {fileID: 836020848} + _clear: {fileID: 893967398} +--- !u!114 &274715340 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274715337} + 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!114 &274715341 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274715337} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!114 &274715342 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274715337} + 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: 0.39215687} + m_RaycastTarget: 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!222 &274715343 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274715337} + m_CullTransparentMesh: 0 +--- !u!1 &281814071 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 281814072} + - component: {fileID: 281814074} + - component: {fileID: 281814073} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &281814072 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 281814071} + 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: 826516845} + 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!114 &281814073 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 281814071} + 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_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!222 &281814074 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 281814071} + m_CullTransparentMesh: 0 +--- !u!1 &286163886 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 286163887} + - component: {fileID: 286163889} + - component: {fileID: 286163888} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &286163887 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 286163886} + 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: 441052174} + 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.5, y: 0.5} +--- !u!114 &286163888 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 286163886} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.08965492, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 10 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 5 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Browse server source code +--- !u!222 &286163889 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 286163886} + m_CullTransparentMesh: 0 +--- !u!1 &361562339 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 361562340} + - component: {fileID: 361562342} + - component: {fileID: 361562341} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &361562340 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 361562339} + 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: 2060017215} + 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.5, y: 0.5} +--- !u!114 &361562341 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 361562339} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 9 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 43 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Clear +--- !u!222 &361562342 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 361562339} + m_CullTransparentMesh: 0 +--- !u!1 &394847335 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 394847336} + - component: {fileID: 394847338} + - component: {fileID: 394847337} + m_Layer: 5 + m_Name: Size Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &394847336 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 394847335} + 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: 1795126382} + 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.5, y: 0.5} +--- !u!114 &394847337 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 394847335} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Size:' +--- !u!222 &394847338 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 394847335} + m_CullTransparentMesh: 0 +--- !u!1 &441052173 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 441052174} + - component: {fileID: 441052178} + - component: {fileID: 441052177} + - component: {fileID: 441052176} + - component: {fileID: 441052175} + - component: {fileID: 441052179} + m_Layer: 5 + m_Name: Server repository + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &441052174 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 441052173} + 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: 286163887} + m_Father: {fileID: 989819535} + 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: 62.75, y: 0} + m_SizeDelta: {x: 125.5, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &441052175 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 441052173} + 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: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!114 &441052176 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 441052173} + 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!114 &441052177 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 441052173} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 0} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!222 &441052178 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 441052173} + m_CullTransparentMesh: 0 +--- !u!114 &441052179 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 441052173} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3ab0e37de384a5b4d8320cdd8644b44c, type: 3} + m_Name: + m_EditorClassIdentifier: + url: https://github.com/Benedicht/BestHTTP_DemoSite + linkSelectCursor: {fileID: 2800000, guid: bcfb03f220265ea4e9fd88ae5af90176, type: 3} +--- !u!1 &474993161 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 474993162} + - component: {fileID: 474993164} + - component: {fileID: 474993163} + m_Layer: 5 + m_Name: Entity Count Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &474993162 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 474993161} + 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: 99079545} + 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.5, y: 0.5} +--- !u!114 &474993163 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 474993161} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Entity Count:' +--- !u!222 &474993164 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 474993161} + m_CullTransparentMesh: 0 +--- !u!1 &518778556 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 518778557} + - component: {fileID: 518778559} + - component: {fileID: 518778558} + m_Layer: 5 + m_Name: Item Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &518778557 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 518778556} + 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: 1881588354} + 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 &518778558 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 518778556} + 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.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_RaycastTarget: 1 + 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!222 &518778559 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 518778556} + m_CullTransparentMesh: 0 +--- !u!1 &526013463 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 526013464} + - component: {fileID: 526013466} + - component: {fileID: 526013465} + - component: {fileID: 526013467} + m_Layer: 5 + m_Name: Version + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &526013464 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 526013463} + 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: 566278118} + m_RootOrder: 6 + 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: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &526013465 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 526013463} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 12 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Version:' +--- !u!222 &526013466 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 526013463} + m_CullTransparentMesh: 0 +--- !u!114 &526013467 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 526013463} + 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 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &566278117 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 566278118} + - component: {fileID: 566278123} + - component: {fileID: 566278122} + - component: {fileID: 566278121} + - component: {fileID: 566278120} + - component: {fileID: 566278119} + m_Layer: 5 + m_Name: Plugin Setting and info + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &566278118 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 566278117} + 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: 1246318030} + - {fileID: 1720255538} + - {fileID: 977577635} + - {fileID: 1248407391} + - {fileID: 2062856654} + - {fileID: 989819535} + - {fileID: 526013464} + m_Father: {fileID: 1125716479} + 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: 400, y: 0} + m_SizeDelta: {x: 800, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &566278119 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 566278117} + 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: 0.39215687} + m_RaycastTarget: 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!222 &566278120 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 566278117} + m_CullTransparentMesh: 0 +--- !u!114 &566278121 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 566278117} + 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: 15 + m_FlexibleWidth: -1 + m_FlexibleHeight: 0 + m_LayoutPriority: 1 +--- !u!114 &566278122 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 566278117} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!114 &566278123 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 566278117} + 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 &614976412 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 614976413} + - component: {fileID: 614976415} + - component: {fileID: 614976414} + m_Layer: 5 + m_Name: Count + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &614976413 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 614976412} + 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: 819822692} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &614976414 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 614976412} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0 +--- !u!222 &614976415 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 614976412} + m_CullTransparentMesh: 0 +--- !u!1 &619617589 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 619617592} + - component: {fileID: 619617591} + 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 &619617591 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 619617589} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.5943396, g: 0.4121917, b: 0.3448291, 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: 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 &619617592 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 619617589} + 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} +--- !u!1 &673663372 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 673663373} + - component: {fileID: 673663376} + - component: {fileID: 673663375} + - component: {fileID: 673663374} + m_Layer: 5 + m_Name: Info Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &673663373 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 673663372} + 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: 1791343486} + - {fileID: 274715338} + m_Father: {fileID: 1125716479} + 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: 400, y: 0} + m_SizeDelta: {x: 800, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &673663374 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 673663372} + 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: 0 + m_LayoutPriority: 1 +--- !u!114 &673663375 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 673663372} + 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!114 &673663376 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 673663372} + 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: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!1 &675661191 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 675661192} + - component: {fileID: 675661194} + - component: {fileID: 675661193} + m_Layer: 5 + m_Name: List Root + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &675661192 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 675661191} + 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: 1163983580} + 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.000003227029} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &675661193 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 675661191} + 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!114 &675661194 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 675661191} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!1 &681609604 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 681609605} + - component: {fileID: 681609608} + - component: {fileID: 681609607} + - component: {fileID: 681609606} + m_Layer: 5 + m_Name: Template + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &681609605 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 681609604} + 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: 1778320394} + - {fileID: 1237646589} + m_Father: {fileID: 1720255538} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 2} + m_SizeDelta: {x: 0, y: 150} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &681609606 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 681609604} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 1998443256} + 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: 1778320394} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 1237646590} + m_HorizontalScrollbarVisibility: 0 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: 0 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &681609607 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 681609604} + 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_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!222 &681609608 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 681609604} + m_CullTransparentMesh: 0 +--- !u!1 &786810448 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 786810449} + - component: {fileID: 786810451} + - component: {fileID: 786810450} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &786810449 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 786810448} + 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: 1248407391} + m_RootOrder: 1 + 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 &786810450 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 786810448} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &786810451 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 786810448} + m_CullTransparentMesh: 0 +--- !u!1 &817140412 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 817140413} + - component: {fileID: 817140415} + - component: {fileID: 817140414} + m_Layer: 5 + m_Name: Count Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &817140413 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817140412} + 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: 819822692} + 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.5, y: 0.5} +--- !u!114 &817140414 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817140412} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Count:' +--- !u!222 &817140415 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817140412} + m_CullTransparentMesh: 0 +--- !u!1 &819822691 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 819822692} + - component: {fileID: 819822694} + - component: {fileID: 819822693} + m_Layer: 5 + m_Name: Count + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &819822692 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819822691} + 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: 817140413} + - {fileID: 614976413} + m_Father: {fileID: 274715338} + 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: 190.125, y: 0} + m_SizeDelta: {x: 370.25, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &819822693 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819822691} + 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!114 &819822694 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819822691} + 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: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!1 &826516844 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 826516845} + 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 &826516845 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 826516844} + 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: 281814072} + m_Father: {fileID: 1792220205} + 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 &836020846 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 836020847} + - component: {fileID: 836020849} + - component: {fileID: 836020848} + m_Layer: 5 + m_Name: Size + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &836020847 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 836020846} + 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: 1476244622} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &836020848 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 836020846} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0 +--- !u!222 &836020849 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 836020846} + m_CullTransparentMesh: 0 +--- !u!1 &893967394 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 893967395} + - component: {fileID: 893967400} + - component: {fileID: 893967399} + - component: {fileID: 893967398} + - component: {fileID: 893967397} + - component: {fileID: 893967396} + - component: {fileID: 893967401} + m_Layer: 5 + m_Name: Clear + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &893967395 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 893967394} + 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: 2080744765} + m_Father: {fileID: 274715338} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 190.125, y: 0} + m_SizeDelta: {x: 370.25, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &893967396 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 893967394} + 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!114 &893967397 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 893967394} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!114 &893967398 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 893967394} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 893967399} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 274715339} + m_MethodName: OnClearButtonClicked + 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!114 &893967399 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 893967394} + 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_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!222 &893967400 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 893967394} + m_CullTransparentMesh: 0 +--- !u!114 &893967401 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 893967394} + 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: 21 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &974336252 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 974336253} + - component: {fileID: 974336255} + - component: {fileID: 974336254} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &974336253 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 974336252} + 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: 1255418152} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0.2} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &974336254 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 974336252} + 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_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!222 &974336255 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 974336252} + m_CullTransparentMesh: 0 +--- !u!1 &977577634 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 977577635} + - component: {fileID: 977577637} + - component: {fileID: 977577636} + m_Layer: 5 + m_Name: Proxy Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &977577635 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977577634} + 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: 566278118} + 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: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &977577636 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977577634} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Proxy:' +--- !u!222 &977577637 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977577634} + m_CullTransparentMesh: 0 +--- !u!1 &985743122 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 985743123} + - component: {fileID: 985743127} + - component: {fileID: 985743126} + - component: {fileID: 985743125} + - component: {fileID: 985743124} + m_Layer: 5 + m_Name: Samples Scroll View + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &985743123 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 985743122} + 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: 1163983580} + - {fileID: 1510314136} + - {fileID: 1792220205} + m_Father: {fileID: 1287029238} + 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.5, y: 0.5} +--- !u!114 &985743124 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 985743122} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 200 + m_MinHeight: -1 + m_PreferredWidth: 200 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: 1 + m_LayoutPriority: 1 +--- !u!114 &985743125 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 985743122} + 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: 0.392} + m_RaycastTarget: 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!222 &985743126 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 985743122} + m_CullTransparentMesh: 0 +--- !u!114 &985743127 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 985743122} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 675661192} + m_Horizontal: 1 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 10 + m_Viewport: {fileID: 1163983580} + m_HorizontalScrollbar: {fileID: 1510314137} + m_VerticalScrollbar: {fileID: 1792220206} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &989819534 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 989819535} + - component: {fileID: 989819537} + - component: {fileID: 989819536} + m_Layer: 5 + m_Name: Links + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &989819535 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 989819534} + 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: 1602849059} + - {fileID: 441052174} + - {fileID: 268882190} + m_Father: {fileID: 566278118} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 597.5, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &989819536 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 989819534} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &989819537 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 989819534} + 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: 10 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!1 &1065300029 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1065300030} + - component: {fileID: 1065300032} + - component: {fileID: 1065300031} + m_Layer: 5 + m_Name: Size + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1065300030 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1065300029} + 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: 1795126382} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1065300031 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1065300029} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0 +--- !u!222 &1065300032 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1065300029} + m_CullTransparentMesh: 0 +--- !u!1 &1125716475 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1125716479} + - component: {fileID: 1125716478} + - component: {fileID: 1125716481} + - component: {fileID: 1125716480} + - component: {fileID: 1125716477} + - component: {fileID: 1125716476} + m_Layer: 5 + m_Name: SampleRoot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1125716476 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1125716475} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0eb115c0377f90041a9ecfde21658f92, type: 3} + m_Name: + m_EditorClassIdentifier: + BaseURL: https://besthttpwebgldemo.azurewebsites.net + _pluginVersion: {fileID: 526013465} + _logLevelDropdown: {fileID: 1720255540} + _proxyLabel: {fileID: 977577636} + _proxyInputField: {fileID: 1248407392} + samples: + - {fileID: 114248578834748736, guid: 0a56a1df7e0b38848bb9bf237a577478, type: 3} + - {fileID: 114222554107645048, guid: ceca5a2f4b7ce1e4fb307cc3d3e4624a, type: 3} + - {fileID: 114112198445963528, guid: cab27f13c267f9e42ab47de965b407b9, type: 3} + - {fileID: 114718093385411448, guid: 1b7ac2a0c58362148840c49056fa7bda, type: 3} + - {fileID: 114522298807264508, guid: 623f70cc1d86e664ca6e0128d812b8fe, type: 3} + - {fileID: 114823703172059914, guid: 485378cd297e7db4bba72fd93ae1d80f, type: 3} + - {fileID: 114182893484780518, guid: 2f038398a262e8643a4a18b5c72825e7, type: 3} + - {fileID: 114051776568563590, guid: 0f38f20254b96204dadeea0ac9daaa4e, type: 3} + - {fileID: 114491302702075964, guid: 2154ba7d2b87066488d9fb08755ec5a9, type: 3} + - {fileID: 114114069069352014, guid: 6032521efbf4f0c42b28c89f5a9de5ed, type: 3} + - {fileID: 114813536588770448, guid: 539501429708f584e9aad4be18ea9e50, type: 3} + - {fileID: 114776046185962020, guid: 7dd2f86eb3e1a5f438f5b3ba39bd9e9b, type: 3} + - {fileID: 114972149884569526, guid: b1561e378e33bde4a9cfca1323516c79, type: 3} + - {fileID: 6125277028786073657, guid: 32c47f799d574ac40b44cc0c2f3d50e4, type: 3} + selectedExamplePrefab: {fileID: 0} +--- !u!114 &1125716477 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1125716475} + 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: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!223 &1125716478 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1125716475} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 1 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1125716479 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1125716475} + 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_Children: + - {fileID: 566278118} + - {fileID: 673663373} + - {fileID: 1287029238} + m_Father: {fileID: 0} + 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: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1125716480 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1125716475} + 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 &1125716481 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1125716475} + 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: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!1 &1163983579 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1163983580} + - component: {fileID: 1163983583} + - component: {fileID: 1163983582} + - component: {fileID: 1163983581} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1163983580 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1163983579} + 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: 675661192} + m_Father: {fileID: 985743123} + 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!114 &1163983581 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1163983579} + 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_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!222 &1163983582 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1163983579} + m_CullTransparentMesh: 0 +--- !u!114 &1163983583 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1163983579} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!1 &1222947056 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1222947057} + - component: {fileID: 1222947059} + - component: {fileID: 1222947058} + - component: {fileID: 1222947061} + - component: {fileID: 1222947060} + m_Layer: 5 + m_Name: Dynamic Content Root + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1222947057 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1222947056} + 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: 1287029238} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1222947058 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1222947056} + 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: 0.392} + m_RaycastTarget: 1 + 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!222 &1222947059 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1222947056} + m_CullTransparentMesh: 0 +--- !u!114 &1222947060 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1222947056} + 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: 3 + m_FlexibleHeight: 1 + m_LayoutPriority: 1 +--- !u!114 &1222947061 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1222947056} + 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: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!1 &1237646588 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1237646589} + - component: {fileID: 1237646592} + - component: {fileID: 1237646591} + - component: {fileID: 1237646590} + m_Layer: 5 + m_Name: Scrollbar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1237646589 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237646588} + 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: 1255418152} + m_Father: {fileID: 681609605} + m_RootOrder: 1 + 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: 0} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1237646590 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237646588} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 974336254} + m_HandleRect: {fileID: 974336253} + m_Direction: 2 + m_Value: 0 + m_Size: 0.2 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1237646591 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237646588} + 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_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!222 &1237646592 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237646588} + m_CullTransparentMesh: 0 +--- !u!1 &1246318029 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1246318030} + - component: {fileID: 1246318032} + - component: {fileID: 1246318031} + m_Layer: 5 + m_Name: Log level Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1246318030 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1246318029} + 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: 566278118} + 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: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1246318031 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1246318029} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Log Level:' +--- !u!222 &1246318032 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1246318029} + m_CullTransparentMesh: 0 +--- !u!1 &1248407390 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1248407391} + - component: {fileID: 1248407394} + - component: {fileID: 1248407393} + - component: {fileID: 1248407392} + - component: {fileID: 1248407395} + m_Layer: 5 + m_Name: Proxy Input Field + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1248407391 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1248407390} + 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: 92191009} + - {fileID: 786810449} + m_Father: {fileID: 566278118} + m_RootOrder: 3 + 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: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1248407392 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1248407390} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1248407393} + m_TextComponent: {fileID: 786810450} + m_Placeholder: {fileID: 92191010} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1125716476} + m_MethodName: OnProxyEditEnd + m_Mode: 0 + 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_OnValueChanged: + 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 +--- !u!114 &1248407393 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1248407390} + 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_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!222 &1248407394 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1248407390} + m_CullTransparentMesh: 0 +--- !u!114 &1248407395 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1248407390} + 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 &1255418151 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1255418152} + 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 &1255418152 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1255418151} + 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: 974336253} + m_Father: {fileID: 1237646589} + 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 &1287029237 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1287029238} + - component: {fileID: 1287029243} + - component: {fileID: 1287029242} + - component: {fileID: 1287029241} + - component: {fileID: 1287029240} + - component: {fileID: 1287029239} + m_Layer: 5 + m_Name: Sample Selector + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1287029238 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287029237} + 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: 985743123} + - {fileID: 1222947057} + m_Father: {fileID: 1125716479} + 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.5, y: 0.5} +--- !u!114 &1287029239 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287029237} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bd639b2a784de314984c606b7e8329e4, type: 3} + m_Name: + m_EditorClassIdentifier: + _categoryListItemPrefab: {fileID: 114104161713339180, guid: fc69717198f6d93498890b7b67812172, + type: 3} + _exampleListItemPrefab: {fileID: 114416681848148688, guid: 216b271b42611e447829c7e7de089ab4, + type: 3} + _exampleInfoPrefab: {fileID: 114471653971156696, guid: d57a4ffd57493de4f9f41009f52c658e, + type: 3} + _listRoot: {fileID: 675661192} + _dyncamicContentRoot: {fileID: 1222947057} +--- !u!114 &1287029240 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287029237} + 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!114 &1287029241 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287029237} + 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 +--- !u!114 &1287029242 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287029237} + 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: 0.392} + m_RaycastTarget: 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!222 &1287029243 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287029237} + m_CullTransparentMesh: 0 +--- !u!1 &1453990608 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1453990609} + - component: {fileID: 1453990611} + - component: {fileID: 1453990610} + m_Layer: 5 + m_Name: Item Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1453990609 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1453990608} + 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: 1881588354} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: -0.5} + m_SizeDelta: {x: -30, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1453990610 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1453990608} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 10 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Option A +--- !u!222 &1453990611 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1453990608} + m_CullTransparentMesh: 0 +--- !u!1 &1476244621 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1476244622} + - component: {fileID: 1476244624} + - component: {fileID: 1476244623} + m_Layer: 5 + m_Name: Size + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1476244622 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1476244621} + 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: 109104421} + - {fileID: 836020847} + m_Father: {fileID: 274715338} + 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: 190.125, y: 0} + m_SizeDelta: {x: 370.25, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1476244623 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1476244621} + 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!114 &1476244624 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1476244621} + 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: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!1 &1501798572 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1501798575} + - component: {fileID: 1501798574} + - component: {fileID: 1501798573} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1501798573 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1501798572} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1501798574 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1501798572} + 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: 5 +--- !u!4 &1501798575 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1501798572} + 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 &1510314135 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1510314136} + - component: {fileID: 1510314139} + - component: {fileID: 1510314138} + - component: {fileID: 1510314137} + 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 &1510314136 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510314135} + 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: 1983980535} + m_Father: {fileID: 985743123} + 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!114 &1510314137 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510314135} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 123556536} + m_HandleRect: {fileID: 123556535} + m_Direction: 0 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1510314138 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510314135} + 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_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!222 &1510314139 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510314135} + m_CullTransparentMesh: 0 +--- !u!1 &1517813666 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1517813667} + - component: {fileID: 1517813669} + - component: {fileID: 1517813668} + m_Layer: 5 + m_Name: Entity Count + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1517813667 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1517813666} + 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: 99079545} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1517813668 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1517813666} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0 +--- !u!222 &1517813669 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1517813666} + m_CullTransparentMesh: 0 +--- !u!1 &1602849058 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1602849059} + - component: {fileID: 1602849063} + - component: {fileID: 1602849062} + - component: {fileID: 1602849061} + - component: {fileID: 1602849060} + - component: {fileID: 1602849064} + m_Layer: 5 + m_Name: Samples repository + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1602849059 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1602849058} + 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: 2032247219} + m_Father: {fileID: 989819535} + 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: 62.75, y: 0} + m_SizeDelta: {x: 125.5, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1602849060 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1602849058} + 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: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!114 &1602849061 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1602849058} + 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!114 &1602849062 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1602849058} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 0} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!222 &1602849063 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1602849058} + m_CullTransparentMesh: 0 +--- !u!114 &1602849064 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1602849058} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3ab0e37de384a5b4d8320cdd8644b44c, type: 3} + m_Name: + m_EditorClassIdentifier: + url: https://github.com/Benedicht/BestHTTP_Examples + linkSelectCursor: {fileID: 2800000, guid: bcfb03f220265ea4e9fd88ae5af90176, type: 3} +--- !u!1 &1720255537 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1720255538} + - component: {fileID: 1720255542} + - component: {fileID: 1720255541} + - component: {fileID: 1720255540} + - component: {fileID: 1720255539} + m_Layer: 5 + m_Name: Log Level Dropdown + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1720255538 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1720255537} + 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: 2001181085} + - {fileID: 1859417308} + - {fileID: 681609605} + m_Father: {fileID: 566278118} + 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: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1720255539 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1720255537} + 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.5 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &1720255540 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1720255537} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0d0b652f32a2cc243917e4028fa0f046, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1720255541} + m_Template: {fileID: 681609605} + m_CaptionText: {fileID: 2001181086} + m_CaptionImage: {fileID: 0} + m_ItemText: {fileID: 1453990610} + m_ItemImage: {fileID: 0} + m_Value: 0 + m_Options: + m_Options: + - m_Text: All + m_Image: {fileID: 0} + - m_Text: Information + m_Image: {fileID: 0} + - m_Text: Warning + m_Image: {fileID: 0} + - m_Text: Error + m_Image: {fileID: 0} + - m_Text: Exception + m_Image: {fileID: 0} + - m_Text: None + m_Image: {fileID: 0} + m_OnValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1125716476} + m_MethodName: OnLogLevelChanged + m_Mode: 0 + 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_AlphaFadeSpeed: 0.15 +--- !u!114 &1720255541 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1720255537} + 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_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!222 &1720255542 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1720255537} + m_CullTransparentMesh: 0 +--- !u!1 &1778320393 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1778320394} + - component: {fileID: 1778320397} + - component: {fileID: 1778320396} + - component: {fileID: 1778320395} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1778320394 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1778320393} + 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: 1998443256} + m_Father: {fileID: 681609605} + 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: -18, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1778320395 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1778320393} + 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_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!222 &1778320396 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1778320393} + m_CullTransparentMesh: 0 +--- !u!114 &1778320397 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1778320393} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!1 &1791343485 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1791343486} + - component: {fileID: 1791343488} + - component: {fileID: 1791343491} + - component: {fileID: 1791343490} + - component: {fileID: 1791343489} + - component: {fileID: 1791343487} + m_Layer: 5 + m_Name: Cache + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1791343486 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1791343485} + 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: 2080431526} + - {fileID: 99079545} + - {fileID: 1795126382} + - {fileID: 2060017215} + m_Father: {fileID: 673663373} + 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: 209.875, y: 0} + m_SizeDelta: {x: 419.75, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1791343487 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1791343485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b640e13d843caef4885814c6d13d8e3d, type: 3} + m_Name: + m_EditorClassIdentifier: + _count: {fileID: 1517813668} + _size: {fileID: 1065300031} + _clear: {fileID: 2060017218} +--- !u!222 &1791343488 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1791343485} + m_CullTransparentMesh: 0 +--- !u!114 &1791343489 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1791343485} + 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!114 &1791343490 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1791343485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!114 &1791343491 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1791343485} + 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: 0.39215687} + m_RaycastTarget: 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!1 &1792220204 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1792220205} + - component: {fileID: 1792220208} + - component: {fileID: 1792220207} + - component: {fileID: 1792220206} + 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 &1792220205 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1792220204} + 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: 826516845} + m_Father: {fileID: 985743123} + 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: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1792220206 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1792220204} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 281814073} + m_HandleRect: {fileID: 281814072} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1792220207 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1792220204} + 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_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!222 &1792220208 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1792220204} + m_CullTransparentMesh: 0 +--- !u!1 &1795126381 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1795126382} + - component: {fileID: 1795126384} + - component: {fileID: 1795126383} + m_Layer: 5 + m_Name: Size + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1795126382 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1795126381} + 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: 394847336} + - {fileID: 1065300030} + m_Father: {fileID: 1791343486} + 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: 209.875, y: 0} + m_SizeDelta: {x: 409.75, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1795126383 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1795126381} + 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!114 &1795126384 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1795126381} + 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: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!1 &1859417307 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1859417308} + - component: {fileID: 1859417310} + - component: {fileID: 1859417309} + m_Layer: 5 + m_Name: Arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1859417308 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1859417307} + 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: 1720255538} + m_RootOrder: 1 + 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: -15, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1859417309 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1859417307} + 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_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10915, guid: 0000000000000000f000000000000000, type: 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!222 &1859417310 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1859417307} + m_CullTransparentMesh: 0 +--- !u!1 &1881588353 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1881588354} + - component: {fileID: 1881588355} + m_Layer: 5 + m_Name: Item + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1881588354 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1881588353} + 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: 518778557} + - {fileID: 1964866602} + - {fileID: 1453990609} + m_Father: {fileID: 1998443256} + 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: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1881588355 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1881588353} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 518778558} + toggleTransition: 1 + graphic: {fileID: 1964866603} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_IsOn: 1 +--- !u!1 &1902271795 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1902271796} + - component: {fileID: 1902271798} + - component: {fileID: 1902271797} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1902271796 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1902271795} + 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: 268882190} + 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.5, y: 0.5} +--- !u!114 &1902271797 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1902271795} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.08965492, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 10 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 5 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Read documentation +--- !u!222 &1902271798 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1902271795} + m_CullTransparentMesh: 0 +--- !u!1 &1964866601 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1964866602} + - component: {fileID: 1964866604} + - component: {fileID: 1964866603} + m_Layer: 5 + m_Name: Item Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1964866602 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1964866601} + 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: 1881588354} + 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: 10, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1964866603 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1964866601} + 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_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 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!222 &1964866604 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1964866601} + m_CullTransparentMesh: 0 +--- !u!1 &1983980534 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1983980535} + 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 &1983980535 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1983980534} + 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: 123556535} + m_Father: {fileID: 1510314136} + 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 &1998443255 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1998443256} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1998443256 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1998443255} + 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: 1881588354} + m_Father: {fileID: 1778320394} + 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: 28} + m_Pivot: {x: 0.5, y: 1} +--- !u!1 &2001181084 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2001181085} + - component: {fileID: 2001181087} + - component: {fileID: 2001181086} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2001181085 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2001181084} + 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: 1720255538} + 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: -7.5, y: -0.5} + m_SizeDelta: {x: -35, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2001181086 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2001181084} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 10 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: All +--- !u!222 &2001181087 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2001181084} + m_CullTransparentMesh: 0 +--- !u!1 &2032247218 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2032247219} + - component: {fileID: 2032247221} + - component: {fileID: 2032247220} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2032247219 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2032247218} + 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: 1602849059} + 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.5, y: 0.5} +--- !u!114 &2032247220 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2032247218} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.08965492, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 10 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 5 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Browse sample source code +--- !u!222 &2032247221 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2032247218} + m_CullTransparentMesh: 0 +--- !u!1 &2060017214 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2060017215} + - component: {fileID: 2060017220} + - component: {fileID: 2060017219} + - component: {fileID: 2060017218} + - component: {fileID: 2060017217} + - component: {fileID: 2060017216} + - component: {fileID: 2060017221} + m_Layer: 5 + m_Name: Clear + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2060017215 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060017214} + 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: 361562340} + m_Father: {fileID: 1791343486} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 209.875, y: 0} + m_SizeDelta: {x: 409.75, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2060017216 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060017214} + 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!114 &2060017217 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060017214} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!114 &2060017218 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060017214} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 2060017219} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1791343487} + m_MethodName: OnClearButtonClicked + 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!114 &2060017219 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060017214} + 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_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!222 &2060017220 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060017214} + m_CullTransparentMesh: 0 +--- !u!114 &2060017221 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060017214} + 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: 21 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &2062856653 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2062856654} + - component: {fileID: 2062856655} + m_Layer: 5 + m_Name: Space + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2062856654 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2062856653} + 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: 566278118} + m_RootOrder: 4 + 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: 15} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2062856655 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2062856653} + 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.5 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &2080431525 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2080431526} + - component: {fileID: 2080431528} + - component: {fileID: 2080431527} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2080431526 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2080431525} + 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: 1791343486} + 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.5, y: 0.5} +--- !u!114 &2080431527 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2080431525} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Cache +--- !u!222 &2080431528 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2080431525} + m_CullTransparentMesh: 0 +--- !u!1 &2080744764 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2080744765} + - component: {fileID: 2080744767} + - component: {fileID: 2080744766} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2080744765 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2080744764} + 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: 893967395} + 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.5, y: 0.5} +--- !u!114 &2080744766 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2080744764} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 9 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Clear +--- !u!222 &2080744767 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2080744764} + m_CullTransparentMesh: 0 diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SampleSelector.unity.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SampleSelector.unity.meta new file mode 100644 index 000000000..489c4296e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SampleSelector.unity.meta @@ -0,0 +1,6 @@ +fileFormatVersion: 2 +guid: 5ed13563a809f06489c3e97e4da02176 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Server-Sent Events.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Server-Sent Events.meta new file mode 100644 index 000000000..86c865100 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Server-Sent Events.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d95d33b7692aa2c4494946f8f92a989f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Server-Sent Events/Simple.prefab b/GQ_URP/GQ/Assets/Best HTTP/Examples/Server-Sent Events/Simple.prefab new file mode 100644 index 000000000..b3cce440b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Server-Sent Events/Simple.prefab @@ -0,0 +1,1408 @@ +%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: 1243956048030804} + m_IsPrefabParent: 1 +--- !u!1 &1020447114140272 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224421476559269790} + - component: {fileID: 114630187155712734} + - component: {fileID: 114019610215566344} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1050057237175532 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224782613382000412} + - component: {fileID: 114853966194269422} + - component: {fileID: 222381322068396388} + - component: {fileID: 114635615257901548} + - component: {fileID: 114875295817895758} + m_Layer: 5 + m_Name: Scroll View + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1097528538710206 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224939166173273604} + - component: {fileID: 222408060817768702} + - component: {fileID: 114258736388967414} + - component: {fileID: 114175573113563076} + m_Layer: 5 + m_Name: Close Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1104096959766600 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224110176939828628} + - component: {fileID: 222340506669410408} + - component: {fileID: 114536115626891982} + - component: {fileID: 114005672578086612} + m_Layer: 5 + m_Name: Scrollbar Horizontal + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1148900216651268 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224313283021063756} + - component: {fileID: 222820915413941444} + - component: {fileID: 114341247361987142} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1243956048030804 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224417471475147436} + - component: {fileID: 114535900129574384} + - component: {fileID: 114522298807264508} + m_Layer: 5 + m_Name: Simple + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1366109710533570 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224925725323816418} + - component: {fileID: 222034024129815224} + - component: {fileID: 114460447121033768} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1420788960842024 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224530010562116216} + - component: {fileID: 222809258057483456} + - component: {fileID: 114646123602735484} + - component: {fileID: 114383942700362072} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1476850989032286 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224498882020969344} + - component: {fileID: 222303217601090448} + - component: {fileID: 114127608366216440} + - component: {fileID: 114261100279207226} + - component: {fileID: 114746876248395212} + - component: {fileID: 114553463592104402} + m_Layer: 5 + m_Name: Connect Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1486056724218698 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224237122659052428} + - component: {fileID: 114362384048909218} + - component: {fileID: 114785957155727092} + - component: {fileID: 114027664567681972} + m_Layer: 5 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1552026685190692 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224667532716815384} + - component: {fileID: 222416648360631390} + - component: {fileID: 114984963645884090} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1619488050571074 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224363201073445822} + - component: {fileID: 222478363629003404} + - component: {fileID: 114643216846582118} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1651050587939542 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224998053050486782} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1652450664618402 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224571288497570916} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1659867263831132 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224769739550035868} + - component: {fileID: 222182426446589258} + - component: {fileID: 114623453528779352} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1753149418632902 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224158989495286294} + - component: {fileID: 114489943045458092} + - component: {fileID: 222325424951257406} + - component: {fileID: 114901286253561944} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114005672578086612 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1104096959766600} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114460447121033768} + m_HandleRect: {fileID: 224925725323816418} + m_Direction: 0 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114019610215566344 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1020447114140272} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114027664567681972 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1486056724218698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114127608366216440 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1476850989032286} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114175573113563076 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1097528538710206} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114258736388967414} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114522298807264508} + m_MethodName: OnCloseButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114258736388967414 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1097528538710206} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114261100279207226 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1476850989032286} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114127608366216440} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114522298807264508} + m_MethodName: OnStartButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114341247361987142 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1148900216651268} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114362384048909218 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1486056724218698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114383942700362072 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1420788960842024} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114341247361987142} + m_HandleRect: {fileID: 224313283021063756} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114460447121033768 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1366109710533570} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114489943045458092 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1753149418632902} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &114522298807264508 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1243956048030804} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 730e176dfa30cb24c93efcaabb4f8688, type: 3} + m_Name: + m_EditorClassIdentifier: + Category: Server-Sent Events + DisplayName: Simple Sample + Description: 'Simple Server-Sent Events example. + + + Features demoed in this example: + + -Setting up the EventSource object + + -Event handling' + _path: /sse + _scrollRect: {fileID: 114853966194269422} + _contentRoot: {fileID: 224421476559269790} + _listItemPrefab: {fileID: 114144824129317776, guid: 46bdaff7a8bf5d34da870d286f962c69, + type: 2} + _maxListItemEntries: 100 + _startButton: {fileID: 114261100279207226} + _closeButton: {fileID: 114175573113563076} +--- !u!114 &114535900129574384 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1243956048030804} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114536115626891982 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1104096959766600} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114553463592104402 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1476850989032286} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114623453528779352 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1659867263831132} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Close +--- !u!114 &114630187155712734 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1020447114140272} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, 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: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114635615257901548 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1050057237175532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114643216846582118 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1619488050571074} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Simple Server-Sent Events +--- !u!114 &114646123602735484 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1420788960842024} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114746876248395212 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1476850989032286} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114785957155727092 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1486056724218698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114853966194269422 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1050057237175532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 224421476559269790} + m_Horizontal: 1 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 0 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 10 + m_Viewport: {fileID: 224158989495286294} + m_HorizontalScrollbar: {fileID: 114005672578086612} + m_VerticalScrollbar: {fileID: 114383942700362072} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114875295817895758 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1050057237175532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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!114 &114901286253561944 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1753149418632902} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114984963645884090 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1552026685190692} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Connect +--- !u!222 &222034024129815224 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1366109710533570} +--- !u!222 &222182426446589258 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1659867263831132} +--- !u!222 &222303217601090448 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1476850989032286} +--- !u!222 &222325424951257406 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1753149418632902} +--- !u!222 &222340506669410408 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1104096959766600} +--- !u!222 &222381322068396388 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1050057237175532} +--- !u!222 &222408060817768702 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1097528538710206} +--- !u!222 &222416648360631390 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1552026685190692} +--- !u!222 &222478363629003404 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1619488050571074} +--- !u!222 &222809258057483456 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1420788960842024} +--- !u!222 &222820915413941444 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1148900216651268} +--- !u!224 &224110176939828628 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1104096959766600} + 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: 224571288497570916} + m_Father: {fileID: 224782613382000412} + 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!224 &224158989495286294 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1753149418632902} + 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: 224421476559269790} + m_Father: {fileID: 224782613382000412} + 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!224 &224237122659052428 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1486056724218698} + 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: 224498882020969344} + - {fileID: 224939166173273604} + m_Father: {fileID: 224417471475147436} + 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: 300, y: 0} + m_SizeDelta: {x: 590, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224313283021063756 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1148900216651268} + 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: 224998053050486782} + 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!224 &224363201073445822 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1619488050571074} + 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: 224417471475147436} + 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.5, y: 0.5} +--- !u!224 &224417471475147436 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1243956048030804} + 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: 224363201073445822} + - {fileID: 224782613382000412} + - {fileID: 224237122659052428} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224421476559269790 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1020447114140272} + 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: 224158989495286294} + 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.0000119093675} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!224 &224498882020969344 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1476850989032286} + 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: 224667532716815384} + m_Father: {fileID: 224237122659052428} + 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: 162, y: 0} + m_SizeDelta: {x: 314, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224530010562116216 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1420788960842024} + 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: 224998053050486782} + m_Father: {fileID: 224782613382000412} + 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: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!224 &224571288497570916 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1652450664618402} + 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: 224925725323816418} + m_Father: {fileID: 224110176939828628} + 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!224 &224667532716815384 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1552026685190692} + 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: 224498882020969344} + 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.5, y: 0.5} +--- !u!224 &224769739550035868 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1659867263831132} + 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: 224939166173273604} + 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!224 &224782613382000412 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1050057237175532} + 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: 224158989495286294} + - {fileID: 224110176939828628} + - {fileID: 224530010562116216} + m_Father: {fileID: 224417471475147436} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224925725323816418 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1366109710533570} + 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: 224571288497570916} + 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!224 &224939166173273604 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1097528538710206} + 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: 224769739550035868} + m_Father: {fileID: 224237122659052428} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224998053050486782 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1651050587939542} + 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: 224313283021063756} + m_Father: {fileID: 224530010562116216} + 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} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Server-Sent Events/Simple.prefab.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Server-Sent Events/Simple.prefab.meta new file mode 100644 index 000000000..56bfe4c20 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Server-Sent Events/Simple.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 623f70cc1d86e664ca6e0128d812b8fe +timeCreated: 1571295463 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Server-Sent Events/SimpleSample.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/Server-Sent Events/SimpleSample.cs new file mode 100644 index 000000000..0f4074ba1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Server-Sent Events/SimpleSample.cs @@ -0,0 +1,156 @@ +#if !BESTHTTP_DISABLE_SERVERSENT_EVENTS + +using System; +using BestHTTP.Examples.Helpers; +using BestHTTP.ServerSentEvents; +using UnityEngine; +using UnityEngine.UI; + +namespace BestHTTP.Examples.ServerSentEvents +{ + public class SimpleSample : BestHTTP.Examples.Helpers.SampleBase + { +#pragma warning disable 0649 + + [Tooltip("The url of the resource to use.")] + [SerializeField] + private string _path = "/sse"; + + [SerializeField] + private ScrollRect _scrollRect; + + [SerializeField] + private RectTransform _contentRoot; + + [SerializeField] + private TextListItem _listItemPrefab; + + [SerializeField] + private int _maxListItemEntries = 100; + + [SerializeField] + private Button _startButton; + + [SerializeField] + private Button _closeButton; + +#pragma warning restore + + private EventSource eventSource; + + protected override void Start() + { + base.Start(); + + SetButtons(true, false); + } + + void OnDestroy() + { + if (this.eventSource != null) + { + this.eventSource.Close(); + this.eventSource = null; + } + } + + public void OnStartButton() + { + GUIHelper.RemoveChildren(this._contentRoot, 0); + + // Create the EventSource instance + this.eventSource = new EventSource(new Uri(base.sampleSelector.BaseURL + this._path)); + + // Subscribe to generic events + this.eventSource.OnOpen += OnOpen; + this.eventSource.OnClosed += OnClosed; + this.eventSource.OnError += OnError; + this.eventSource.OnStateChanged += this.OnStateChanged; + this.eventSource.OnMessage += OnMessage; + + // Subscribe to an application specific event + this.eventSource.On("datetime", OnDateTime); + + // Start to connect to the server + this.eventSource.Open(); + + AddText("Opening Server-Sent Events..."); + + SetButtons(false, true); + } + + public void OnCloseButton() + { + SetButtons(false, false); + this.eventSource.Close(); + } + + private void OnOpen(EventSource eventSource) + { + AddText("Open"); + } + + private void OnClosed(EventSource eventSource) + { + AddText("Closed"); + + this.eventSource = null; + + SetButtons(true, false); + } + + private void OnError(EventSource eventSource, string error) + { + AddText(string.Format("Error: {0}", error)); + } + + private void OnStateChanged(EventSource eventSource, States oldState, States newState) + { + AddText(string.Format("State Changed {0} => {1}", oldState, newState)); + } + + private void OnMessage(EventSource eventSource, Message message) + { + AddText(string.Format("Message: {0}", message)); + } + + private void OnDateTime(EventSource eventSource, Message message) + { + DateTimeData dtData = BestHTTP.JSON.LitJson.JsonMapper.ToObject(message.Data); + + AddText(string.Format("OnDateTime: {0}", dtData.ToString())); + } + + private void SetButtons(bool start, bool close) + { + if (this._startButton != null) + this._startButton.interactable = start; + + if (this._closeButton != null) + this._closeButton.interactable = close; + } + + private void AddText(string text) + { + GUIHelper.AddText(this._listItemPrefab, this._contentRoot, text, this._maxListItemEntries, this._scrollRect); + } + } + + [PlatformSupport.IL2CPP.Preserve] + sealed class DateTimeData + { +#pragma warning disable 0649 + [PlatformSupport.IL2CPP.Preserve] + public int eventid; + + [PlatformSupport.IL2CPP.Preserve] + public string datetime; +#pragma warning restore + + public override string ToString() + { + return string.Format("[DateTimeData EventId: {0}, DateTime: {1}]", this.eventid, this.datetime); + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Server-Sent Events/SimpleSample.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Server-Sent Events/SimpleSample.cs.meta new file mode 100644 index 000000000..6cfbde235 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Server-Sent Events/SimpleSample.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 730e176dfa30cb24c93efcaabb4f8688 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR.meta new file mode 100644 index 000000000..a6a98c84d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d69707652d0d406448aedf33b807bf6d +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Authentication Providers.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Authentication Providers.meta new file mode 100644 index 000000000..cb6512fc9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Authentication Providers.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9286baa677f488b4bb493dd5436147c6 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Authentication Providers/SampleCookieAuthentication.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Authentication Providers/SampleCookieAuthentication.cs new file mode 100644 index 000000000..11b83e4a7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Authentication Providers/SampleCookieAuthentication.cs @@ -0,0 +1,135 @@ +#if !BESTHTTP_DISABLE_SIGNALR +#if !BESTHTTP_DISABLE_COOKIES && (!UNITY_WEBGL || UNITY_EDITOR) + +using System; + +using BestHTTP.Cookies; +using BestHTTP.SignalR.Transports; + +namespace BestHTTP.SignalR.Authentication +{ + public sealed class SampleCookieAuthentication : IAuthenticationProvider + { + #region Public Properties + + public Uri AuthUri { get; private set; } + public string UserName { get; private set; } + public string Password { get; private set; } + public string UserRoles { get; private set; } + + #endregion + + #region IAuthenticationProvider properties + + public bool IsPreAuthRequired { get; private set; } + + public event OnAuthenticationSuccededDelegate OnAuthenticationSucceded; + public event OnAuthenticationFailedDelegate OnAuthenticationFailed; + + #endregion + + #region Privates + + private HTTPRequest AuthRequest; + private Cookie Cookie; + + #endregion + + public SampleCookieAuthentication(Uri authUri, string user, string passwd, string roles) + { + this.AuthUri = authUri; + this.UserName = user; + this.Password = passwd; + this.UserRoles = roles; + this.IsPreAuthRequired = true; + } + + #region IAuthenticationProvider Implementation + + public void StartAuthentication() + { + AuthRequest = new HTTPRequest(AuthUri, HTTPMethods.Post, OnAuthRequestFinished); + + // Setup the form + AuthRequest.AddField("userName", UserName); + AuthRequest.AddField("Password", Password); // not used in the sample + AuthRequest.AddField("roles", UserRoles); + + AuthRequest.Send(); + } + + public void PrepareRequest(HTTPRequest request, RequestTypes type) + { + // Adding the cookie to the request is not required, as it's managed by the plugin automatically, + // but for now, we want to be really sure that it's added + request.Cookies.Add(Cookie); + } + + #endregion + + #region Request Handler + + void OnAuthRequestFinished(HTTPRequest req, HTTPResponse resp) + { + AuthRequest = null; + string failReason = string.Empty; + + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + if (resp.IsSuccess) + { + Cookie = resp.Cookies != null ? resp.Cookies.Find(c => c.Name.Equals(".ASPXAUTH")) : null; + + if (Cookie != null) + { + HTTPManager.Logger.Information("CookieAuthentication", "Auth. Cookie found!"); + + if (OnAuthenticationSucceded != null) + OnAuthenticationSucceded(this); + + // return now, all other paths are authentication failures + return; + } + else + HTTPManager.Logger.Warning("CookieAuthentication", failReason = "Auth. Cookie NOT found!"); + } + else + HTTPManager.Logger.Warning("CookieAuthentication", failReason = string.Format("Request Finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}", + resp.StatusCode, + resp.Message, + resp.DataAsText)); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + HTTPManager.Logger.Warning("CookieAuthentication", failReason = "Request Finished with Error! " + (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception")); + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + HTTPManager.Logger.Warning("CookieAuthentication", failReason = "Request Aborted!"); + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + HTTPManager.Logger.Error("CookieAuthentication", failReason = "Connection Timed Out!"); + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + HTTPManager.Logger.Error("CookieAuthentication", failReason = "Processing the request Timed Out!"); + break; + } + + if (OnAuthenticationFailed != null) + OnAuthenticationFailed(this, failReason); + } + + #endregion + } +} + +#endif +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Authentication Providers/SampleCookieAuthentication.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Authentication Providers/SampleCookieAuthentication.cs.meta new file mode 100644 index 000000000..e40c03b5f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Authentication Providers/SampleCookieAuthentication.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 48a74a50eeb07bb4ea649a902e9d487a +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Authentication Providers/SampleHeaderAuthentication.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Authentication Providers/SampleHeaderAuthentication.cs new file mode 100644 index 000000000..1ed0cfa31 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Authentication Providers/SampleHeaderAuthentication.cs @@ -0,0 +1,97 @@ +#if !BESTHTTP_DISABLE_SIGNALR + +namespace BestHTTP.SignalR.Authentication +{ + /// + /// Custom http-header based authenticator. + /// + /// + /// // Server side implementation of the Header-based authenticator + /// // Use it by adding the app.Use(typeof(HeaderBasedAuthenticationMiddleware)); line to the Startup class' Configuration function. + /// private class HeaderBasedAuthenticationMiddleware : OwinMiddleware + /// { + /// public HeaderBasedAuthenticationMiddleware(OwinMiddleware next) + /// : base(next) + /// { + /// } + /// + /// public override Task Invoke(IOwinContext context) + /// { + /// string username = context.Request.Headers.Get("username"); + /// string roles = context.Request.Headers.Get("roles"); + /// + /// if (!String.IsNullOrEmpty(username) && !String.IsNullOrEmpty(roles)) + /// { + /// var identity = new System.Security.Principal.GenericIdentity(username); + /// + /// var principal = new System.Security.Principal.GenericPrincipal(identity, SplitString(roles)); + /// + /// context.Request.User = principal; + /// } + /// + /// return Next.Invoke(context); + /// } + /// + /// private static string[] SplitString(string original) + /// { + /// if (String.IsNullOrEmpty(original)) + /// return new string[0]; + /// + /// var split = from piece in original.Split(',') let trimmed = piece.Trim() where !String.IsNullOrEmpty(trimmed) select trimmed; + /// + /// return split.ToArray(); + /// } + /// } + /// + /// + /// + class HeaderAuthenticator : IAuthenticationProvider + { + public string User { get; private set; } + public string Roles { get; private set; } + + /// + /// No pre-auth step required for this type of authentication + /// + public bool IsPreAuthRequired { get { return false; } } + +#pragma warning disable 0067 + /// + /// Not used event as IsPreAuthRequired is false + /// + public event OnAuthenticationSuccededDelegate OnAuthenticationSucceded; + + /// + /// Not used event as IsPreAuthRequired is false + /// + public event OnAuthenticationFailedDelegate OnAuthenticationFailed; + +#pragma warning restore 0067 + + /// + /// Constructor to initialise the authenticator with username and roles. + /// + public HeaderAuthenticator(string user, string roles) + { + this.User = user; + this.Roles = roles; + } + + /// + /// Not used as IsPreAuthRequired is false + /// + public void StartAuthentication() + { } + + /// + /// Prepares the request by adding two headers to it + /// + public void PrepareRequest(BestHTTP.HTTPRequest request, RequestTypes type) + { + request.SetHeader("username", this.User); + request.SetHeader("roles", this.Roles); + } + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Authentication Providers/SampleHeaderAuthentication.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Authentication Providers/SampleHeaderAuthentication.cs.meta new file mode 100644 index 000000000..4be0307e4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Authentication Providers/SampleHeaderAuthentication.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5ebd4ce02d369a6498f9be6bb7141ac3 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Json Encoders.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Json Encoders.meta new file mode 100644 index 000000000..9688ed6b6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Json Encoders.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1c996438e0be72649b8abf5fbdee3f41 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Json Encoders/JSonDotnetEncoder.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Json Encoders/JSonDotnetEncoder.cs new file mode 100644 index 000000000..27669dc9d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Json Encoders/JSonDotnetEncoder.cs @@ -0,0 +1,23 @@ +#if !BESTHTTP_DISABLE_SIGNALR && BESTHTTP_SIGNALR_WITH_JSONDOTNET + +using System.Collections.Generic; + +using Newtonsoft.Json; + +namespace BestHTTP.SignalR.JsonEncoders +{ + public sealed class JSonDotnetEncoder : IJsonEncoder + { + public string Encode(object obj) + { + return JsonConvert.SerializeObject(obj); + } + + public IDictionary DecodeMessage(string json) + { + return JsonConvert.DeserializeObject>(json); + } + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Json Encoders/JSonDotnetEncoder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Json Encoders/JSonDotnetEncoder.cs.meta new file mode 100644 index 000000000..e4a7f7d09 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Json Encoders/JSonDotnetEncoder.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 653a0f163689052438748b7beda14886 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Json Encoders/LitJsonEncoder.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Json Encoders/LitJsonEncoder.cs new file mode 100644 index 000000000..56491adcd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Json Encoders/LitJsonEncoder.cs @@ -0,0 +1,28 @@ +#if !BESTHTTP_DISABLE_SIGNALR + +using System.Collections.Generic; + +using BestHTTP.JSON.LitJson; + +namespace BestHTTP.SignalR.JsonEncoders +{ + public sealed class LitJsonEncoder : IJsonEncoder + { + public string Encode(object obj) + { + JsonWriter writer = new JsonWriter(); + JsonMapper.ToJson(obj, writer); + + return writer.ToString(); + } + + public IDictionary DecodeMessage(string json) + { + JsonReader reader = new JsonReader(json); + + return JsonMapper.ToObject>(reader); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Json Encoders/LitJsonEncoder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Json Encoders/LitJsonEncoder.cs.meta new file mode 100644 index 000000000..b143b7cf7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalR/Json Encoders/LitJsonEncoder.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2870a746a601b8b439c495ff39474385 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore.meta new file mode 100644 index 000000000..61166a652 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f7ff75ba203704d45bf1098536a2db5a +folderAsset: yes +timeCreated: 1515401610 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Async TestHub.prefab b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Async TestHub.prefab new file mode 100644 index 000000000..c366f253f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Async TestHub.prefab @@ -0,0 +1,1403 @@ +%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: 1638523814489510} + m_IsPrefabParent: 1 +--- !u!1 &1038591687917618 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224704218053827896} + - component: {fileID: 222420943052918922} + - component: {fileID: 114074303593469922} + - component: {fileID: 114151161198250362} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1124105774069684 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224467146834965472} + - component: {fileID: 114355870386585004} + - component: {fileID: 222470408282213616} + - component: {fileID: 114986567977301700} + - component: {fileID: 114186426956694556} + m_Layer: 5 + m_Name: Scroll View + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1204370757159730 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224180373888628254} + - component: {fileID: 222098563536574056} + - component: {fileID: 114956094281271480} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1207322547963618 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224146000816548192} + - component: {fileID: 222177808205883476} + - component: {fileID: 114506408585435346} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1276219903168366 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224423515151943592} + - component: {fileID: 114098721136836344} + - component: {fileID: 114468991126186942} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1318517605042108 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224420732470901652} + - component: {fileID: 114484089162834856} + - component: {fileID: 114334962446679920} + - component: {fileID: 114948849694705334} + m_Layer: 5 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1433467453266018 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224605607142989984} + - component: {fileID: 222893879445873518} + - component: {fileID: 114402223494446966} + - component: {fileID: 114706574573020758} + m_Layer: 5 + m_Name: Scrollbar Horizontal + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1552607393758952 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224607326854693534} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1585822631579854 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224781178089306710} + - component: {fileID: 222836652998952764} + - component: {fileID: 114531813178463268} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1604054296740222 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224984124764780486} + - component: {fileID: 222601760045801886} + - component: {fileID: 114393371695682318} + - component: {fileID: 114183583078306848} + m_Layer: 5 + m_Name: Close Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1638523814489510 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224229808225831666} + - component: {fileID: 114524161209067524} + - component: {fileID: 114972149884569526} + m_Layer: 5 + m_Name: Async TestHub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1658958313708458 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224805214121029348} + - component: {fileID: 222187423713600754} + - component: {fileID: 114041755994219322} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1711432179471938 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224498525384877774} + - component: {fileID: 222379790607741942} + - component: {fileID: 114625103025680996} + - component: {fileID: 114320013680820188} + - component: {fileID: 114029331487493084} + - component: {fileID: 114954403076395410} + m_Layer: 5 + m_Name: Connect Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1867791362833596 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224998767821500724} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1906484789603984 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224276963845286766} + - component: {fileID: 114825175876677118} + - component: {fileID: 222365384534345472} + - component: {fileID: 114877916617402376} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1928684845076054 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224186694450471020} + - component: {fileID: 222873375866903268} + - component: {fileID: 114018365654837366} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114018365654837366 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1928684845076054} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Close +--- !u!114 &114029331487493084 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1711432179471938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114041755994219322 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1658958313708458} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Test Hub +--- !u!114 &114074303593469922 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1038591687917618} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114098721136836344 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1276219903168366} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, 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: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114151161198250362 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1038591687917618} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114506408585435346} + m_HandleRect: {fileID: 224146000816548192} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114183583078306848 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1604054296740222} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114393371695682318} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114972149884569526} + m_MethodName: OnCloseButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114186426956694556 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1124105774069684} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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!114 &114320013680820188 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1711432179471938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114625103025680996} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114972149884569526} + m_MethodName: OnConnectButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114334962446679920 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1318517605042108} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114355870386585004 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1124105774069684} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 224423515151943592} + m_Horizontal: 1 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 0 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 10 + m_Viewport: {fileID: 224276963845286766} + m_HorizontalScrollbar: {fileID: 114706574573020758} + m_VerticalScrollbar: {fileID: 114151161198250362} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114393371695682318 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1604054296740222} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114402223494446966 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1433467453266018} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114468991126186942 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1276219903168366} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114484089162834856 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1318517605042108} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114506408585435346 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1207322547963618} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114524161209067524 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1638523814489510} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114531813178463268 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1585822631579854} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Connect +--- !u!114 &114625103025680996 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1711432179471938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114706574573020758 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1433467453266018} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114956094281271480} + m_HandleRect: {fileID: 224180373888628254} + m_Direction: 0 + m_Value: 0 + m_Size: 0.9999999 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114825175876677118 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1906484789603984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &114877916617402376 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1906484789603984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114948849694705334 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1318517605042108} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114954403076395410 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1711432179471938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114956094281271480 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1204370757159730} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114972149884569526 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1638523814489510} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e516808e7e284014c8b7afb3ff270943, type: 3} + m_Name: + m_EditorClassIdentifier: + Category: SignalR Core + DisplayName: Test Hub With Async-Await + Description: This sample demonstrates the use of async functions of the HubConnection + class. + BannedPlatforms: + _path: /TestHub + _scrollRect: {fileID: 114355870386585004} + _contentRoot: {fileID: 224423515151943592} + _listItemPrefab: {fileID: 114144824129317776, guid: 46bdaff7a8bf5d34da870d286f962c69, + type: 2} + _maxListItemEntries: 100 + _connectButton: {fileID: 114320013680820188} + _closeButton: {fileID: 114183583078306848} +--- !u!114 &114986567977301700 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1124105774069684} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!222 &222098563536574056 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1204370757159730} +--- !u!222 &222177808205883476 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1207322547963618} +--- !u!222 &222187423713600754 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1658958313708458} +--- !u!222 &222365384534345472 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1906484789603984} +--- !u!222 &222379790607741942 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1711432179471938} +--- !u!222 &222420943052918922 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1038591687917618} +--- !u!222 &222470408282213616 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1124105774069684} +--- !u!222 &222601760045801886 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1604054296740222} +--- !u!222 &222836652998952764 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1585822631579854} +--- !u!222 &222873375866903268 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1928684845076054} +--- !u!222 &222893879445873518 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1433467453266018} +--- !u!224 &224146000816548192 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1207322547963618} + 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: 224998767821500724} + 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!224 &224180373888628254 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1204370757159730} + 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: 224607326854693534} + 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!224 &224186694450471020 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1928684845076054} + 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: 224984124764780486} + 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!224 &224229808225831666 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1638523814489510} + 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: 224805214121029348} + - {fileID: 224467146834965472} + - {fileID: 224420732470901652} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224276963845286766 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1906484789603984} + 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: 224423515151943592} + m_Father: {fileID: 224467146834965472} + 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!224 &224420732470901652 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1318517605042108} + 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: 224498525384877774} + - {fileID: 224984124764780486} + m_Father: {fileID: 224229808225831666} + 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: 338.178, y: 0} + m_SizeDelta: {x: 666.356, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224423515151943592 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1276219903168366} + 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: 224276963845286766} + 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.0000119093675} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!224 &224467146834965472 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1124105774069684} + 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: 224276963845286766} + - {fileID: 224605607142989984} + - {fileID: 224704218053827896} + m_Father: {fileID: 224229808225831666} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224498525384877774 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1711432179471938} + 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: 224781178089306710} + m_Father: {fileID: 224420732470901652} + 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: 180.50508, y: 0} + m_SizeDelta: {x: 351.01016, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224605607142989984 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1433467453266018} + 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: 224607326854693534} + m_Father: {fileID: 224467146834965472} + 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!224 &224607326854693534 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1552607393758952} + 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: 224180373888628254} + m_Father: {fileID: 224605607142989984} + 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!224 &224704218053827896 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1038591687917618} + 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: 224998767821500724} + m_Father: {fileID: 224467146834965472} + 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: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!224 &224781178089306710 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1585822631579854} + 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: 224498525384877774} + 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.5, y: 0.5} +--- !u!224 &224805214121029348 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1658958313708458} + 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: 224229808225831666} + 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.5, y: 0.5} +--- !u!224 &224984124764780486 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1604054296740222} + 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: 224186694450471020} + m_Father: {fileID: 224420732470901652} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224998767821500724 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1867791362833596} + 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: 224146000816548192} + m_Father: {fileID: 224704218053827896} + 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} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Async TestHub.prefab.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Async TestHub.prefab.meta new file mode 100644 index 000000000..d359f0f3d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Async TestHub.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b1561e378e33bde4a9cfca1323516c79 +timeCreated: 1571296382 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/AsyncTestHubSample.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/AsyncTestHubSample.cs new file mode 100644 index 000000000..f5c4d8465 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/AsyncTestHubSample.cs @@ -0,0 +1,240 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE + +using System; +using UnityEngine; +using BestHTTP.SignalRCore; +using BestHTTP.SignalRCore.Encoders; +using UnityEngine.UI; +using BestHTTP.Examples.Helpers; +#if CSHARP_7_OR_LATER +using System.Threading.Tasks; +#endif + +namespace BestHTTP.Examples +{ + // Server side of this example can be found here: + // https://github.com/Benedicht/BestHTTP_DemoSite/blob/master/BestHTTP_DemoSite/Hubs/TestHub.cs + public class AsyncTestHubSample : BestHTTP.Examples.Helpers.SampleBase + { +#pragma warning disable 0649 +#pragma warning disable 0414 + [SerializeField] + private string _path = "/TestHub"; + + [SerializeField] + private ScrollRect _scrollRect; + + [SerializeField] + private RectTransform _contentRoot; + + [SerializeField] + private TextListItem _listItemPrefab; + + [SerializeField] + private int _maxListItemEntries = 100; + + [SerializeField] + private Button _connectButton; + + [SerializeField] + private Button _closeButton; + +#pragma warning restore + + // Instance of the HubConnection + HubConnection hub; + + protected override void Start() + { + base.Start(); + +#if !CSHARP_7_OR_LATER + AddText("This sample can work only when at least c# 7.3 is supported!"); + SetButtons(false, false); +#else + SetButtons(true, false); +#endif + } + +#if CSHARP_7_OR_LATER + async void OnDestroy() + { + await hub?.CloseAsync(); + } +#endif + + /// + /// GUI button callback + /// + public +#if CSHARP_7_OR_LATER + async +#endif + void OnConnectButton() + { +#if CSHARP_7_OR_LATER +#if BESTHTTP_SIGNALR_CORE_ENABLE_MESSAGEPACK_CSHARP + try + { + MessagePack.Resolvers.StaticCompositeResolver.Instance.Register( + MessagePack.Resolvers.DynamicEnumAsStringResolver.Instance, + MessagePack.Unity.UnityResolver.Instance, + //MessagePack.Unity.Extension.UnityBlitWithPrimitiveArrayResolver.Instance, + //MessagePack.Resolvers.StandardResolver.Instance, + MessagePack.Resolvers.ContractlessStandardResolver.Instance + ); + + var options = MessagePack.MessagePackSerializerOptions.Standard.WithResolver(MessagePack.Resolvers.StaticCompositeResolver.Instance); + MessagePack.MessagePackSerializer.DefaultOptions = options; + } + catch + { } +#endif + + IProtocol protocol = null; +#if BESTHTTP_SIGNALR_CORE_ENABLE_MESSAGEPACK_CSHARP + protocol = new MessagePackCSharpProtocol(); +#elif BESTHTTP_SIGNALR_CORE_ENABLE_GAMEDEVWARE_MESSAGEPACK + protocol = new MessagePackProtocol(); +#else + protocol = new JsonProtocol(new LitJsonEncoder()); +#endif + // Crete the HubConnection + hub = new HubConnection(new Uri(this.sampleSelector.BaseURL + this._path), protocol); + + // Subscribe to hub events + hub.OnError += Hub_OnError; + + hub.OnTransportEvent += (hub, transport, ev) => AddText(string.Format("Transport({0}) event: {1}", transport.TransportType, ev)); + + // Set up server callable functions + hub.On("Send", (string arg) => AddText(string.Format("On 'Send': '{0}'", arg)).AddLeftPadding(20)); + hub.On("Person", (person) => AddText(string.Format("On 'Person': '{0}'", person)).AddLeftPadding(20)); + hub.On("TwoPersons", (person1, person2) => AddText(string.Format("On 'TwoPersons': '{0}', '{1}'", person1, person2)).AddLeftPadding(20)); + + AddText("StartConnect called"); + + SetButtons(false, false); + + // And finally start to connect to the server + await hub.ConnectAsync(); + + SetButtons(false, true); + AddText(string.Format("Hub Connected with {0} transport using the {1} encoder.", hub.Transport.TransportType.ToString(), hub.Protocol.Name)); + + // Call a server function with a string param. We expect no return value. + await hub.SendAsync("Send", "my message"); + + // Call a parameterless function. We expect a string return value. + try + { + string result = await hub.InvokeAsync("NoParam"); + + AddText(string.Format("'NoParam' returned: '{0}'", result)) + .AddLeftPadding(20); + } + catch (Exception ex) + { + AddText(string.Format("'NoParam' error: '{0}'", ex.Message)).AddLeftPadding(20); + } + + // Call a function on the server to add two numbers. OnSuccess will be called with the result and OnError if there's an error. + var addResult = await hub.InvokeAsync("Add", 10, 20); + AddText(string.Format("'Add(10, 20)' returned: '{0}'", addResult)).AddLeftPadding(20); + + var nullabelTestResult = await hub.InvokeAsync("NullableTest", 10); + AddText(string.Format("'NullableTest(10)' returned: '{0}'", nullabelTestResult)).AddLeftPadding(20); + + // Call a function that will return a Person object constructed from the function's parameters. + var getPersonResult = await hub.InvokeAsync("GetPerson", "Mr. Smith", 26); + AddText(string.Format("'GetPerson(\"Mr. Smith\", 26)' returned: '{0}'", getPersonResult)).AddLeftPadding(20); + + // To test errors/exceptions this call always throws an exception on the server side resulting in an OnError call. + // OnError expected here! + + try + { + var singleResultFailureResult = await hub.InvokeAsync("SingleResultFailure", 10, 20); + AddText(string.Format("'SingleResultFailure(10, 20)' returned: '{0}'", singleResultFailureResult)).AddLeftPadding(20); + } + catch (Exception ex) + { + AddText(string.Format("'SingleResultFailure(10, 20)' error: '{0}'", ex.Message)).AddLeftPadding(20); + } + + // This call demonstrates IEnumerable<> functions, result will be the yielded numbers. + var batchedResult = await hub.InvokeAsync("Batched", 10); + AddText(string.Format("'Batched(10)' returned items: '{0}'", batchedResult.Length)).AddLeftPadding(20); + + // OnItem is called for a streaming request for every items returned by the server. OnSuccess will still be called with all the items. + hub.GetDownStreamController("ObservableCounter", 10, 1000) + .OnItem(result => AddText(string.Format("'ObservableCounter(10, 1000)' OnItem: '{0}'", result)).AddLeftPadding(20)) + .OnSuccess(result => AddText("'ObservableCounter(10, 1000)' OnSuccess.").AddLeftPadding(20)) + .OnError(error => AddText(string.Format("'ObservableCounter(10, 1000)' error: '{0}'", error)).AddLeftPadding(20)); + + // A stream request can be cancelled any time. + var controller = hub.GetDownStreamController("ChannelCounter", 10, 1000); + + controller.OnItem(result => AddText(string.Format("'ChannelCounter(10, 1000)' OnItem: '{0}'", result)).AddLeftPadding(20)) + .OnSuccess(result => AddText("'ChannelCounter(10, 1000)' OnSuccess.").AddLeftPadding(20)) + .OnError(error => AddText(string.Format("'ChannelCounter(10, 1000)' error: '{0}'", error)).AddLeftPadding(20)); + + // a stream can be cancelled by calling the controller's Cancel method + controller.Cancel(); + + // This call will stream strongly typed objects + hub.GetDownStreamController("GetRandomPersons", 20, 2000) + .OnItem(result => AddText(string.Format("'GetRandomPersons(20, 1000)' OnItem: '{0}'", result)).AddLeftPadding(20)) + .OnSuccess(result => AddText("'GetRandomPersons(20, 1000)' OnSuccess.").AddLeftPadding(20)); +#endif + } + + /// + /// GUI button callback + /// + public +#if CSHARP_7_OR_LATER + async +#endif + void OnCloseButton() + { +#if CSHARP_7_OR_LATER + if (this.hub != null) + { + AddText("Calling CloseAsync"); + SetButtons(false, false); + + await this.hub.CloseAsync(); + + SetButtons(true, false); + AddText("Hub Closed"); + } +#endif + } + + /// + /// Called when an unrecoverable error happen. After this event the hub will not send or receive any messages. + /// + private void Hub_OnError(HubConnection hub, string error) + { + SetButtons(true, false); + AddText(string.Format("Hub Error: {0}", error)); + } + + private void SetButtons(bool connect, bool close) + { + if (this._connectButton != null) + this._connectButton.interactable = connect; + + if (this._closeButton != null) + this._closeButton.interactable = close; + } + + private TextListItem AddText(string text) + { + return GUIHelper.AddText(this._listItemPrefab, this._contentRoot, text, this._maxListItemEntries, this._scrollRect); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/AsyncTestHubSample.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/AsyncTestHubSample.cs.meta new file mode 100644 index 000000000..5ee8d1d6c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/AsyncTestHubSample.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e516808e7e284014c8b7afb3ff270943 +timeCreated: 1577715218 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Authentication Providers.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Authentication Providers.meta new file mode 100644 index 000000000..14c0f171b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Authentication Providers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e87559ef678942428f064af598c1696 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Authentication Providers/HeaderAuthenticator.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Authentication Providers/HeaderAuthenticator.cs new file mode 100644 index 000000000..1720f00f4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Authentication Providers/HeaderAuthenticator.cs @@ -0,0 +1,68 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE + +using System; + +namespace BestHTTP.SignalRCore.Authentication +{ + public sealed class HeaderAuthenticator : IAuthenticationProvider + { + /// + /// No pre-auth step required for this type of authentication + /// + public bool IsPreAuthRequired { get { return false; } } + +#pragma warning disable 0067 + /// + /// Not used event as IsPreAuthRequired is false + /// + public event OnAuthenticationSuccededDelegate OnAuthenticationSucceded; + + /// + /// Not used event as IsPreAuthRequired is false + /// + public event OnAuthenticationFailedDelegate OnAuthenticationFailed; + +#pragma warning restore 0067 + + private string _credentials; + + public HeaderAuthenticator(string credentials) + { + this._credentials = credentials; + } + + /// + /// Not used as IsPreAuthRequired is false + /// + public void StartAuthentication() + { } + + /// + /// Prepares the request by adding two headers to it + /// + public void PrepareRequest(BestHTTP.HTTPRequest request) + { +#if !UNITY_WEBGL || UNITY_EDITOR + request.SetHeader("Authorization", "Bearer " + this._credentials); +#endif + } + + public Uri PrepareUri(Uri uri) + { +#if UNITY_WEBGL && !UNITY_EDITOR + string query = string.IsNullOrEmpty(uri.Query) ? "?" : uri.Query + "&"; + UriBuilder uriBuilder = new UriBuilder(uri.Scheme, uri.Host, uri.Port, uri.AbsolutePath, query + "access_token=" + this._credentials); + return uriBuilder.Uri; +#else + return uri; +#endif + } + + public void Cancel() + { + + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Authentication Providers/HeaderAuthenticator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Authentication Providers/HeaderAuthenticator.cs.meta new file mode 100644 index 000000000..adff00fa5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Authentication Providers/HeaderAuthenticator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 80b2246c164414c468eea4f0550eb9ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders.meta new file mode 100644 index 000000000..0e1e69442 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 35c592488a6dbbc4a96c1739cd74046c +folderAsset: yes +timeCreated: 1515401610 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/JsonDotNetEncoder.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/JsonDotNetEncoder.cs new file mode 100644 index 000000000..8a2408670 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/JsonDotNetEncoder.cs @@ -0,0 +1,47 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE && BESTHTTP_SIGNALR_CORE_ENABLE_NEWTONSOFT_JSON_DOTNET_ENCODER +using System; +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP.SignalRCore.Encoders +{ + public sealed class JsonDotNetEncoder : BestHTTP.SignalRCore.IEncoder + { + Newtonsoft.Json.JsonSerializerSettings _settings; + + public JsonDotNetEncoder() + { } + + public JsonDotNetEncoder(Newtonsoft.Json.JsonSerializerSettings settings) + { + this._settings = settings; + } + + public object ConvertTo(Type toType, object obj) + { + string json = Newtonsoft.Json.JsonConvert.SerializeObject(obj, this._settings); + + return Newtonsoft.Json.JsonConvert.DeserializeObject(json, toType, this._settings); + } + + public T DecodeAs(BufferSegment buffer) + { + using (var reader = new System.IO.StreamReader(new System.IO.MemoryStream(buffer.Data, buffer.Offset, buffer.Count))) + using (var jsonReader = new Newtonsoft.Json.JsonTextReader(reader)) + return Newtonsoft.Json.JsonSerializer.CreateDefault(this._settings).Deserialize(jsonReader); + } + + public BufferSegment Encode(T value) + { + var json = Newtonsoft.Json.JsonConvert.SerializeObject(value, this._settings); + + int len = System.Text.Encoding.UTF8.GetByteCount(json); + byte[] buffer = BufferPool.Get(len + 1, true); + System.Text.Encoding.UTF8.GetBytes(json, 0, json.Length, buffer, 0); + + buffer[len] = 0x1e; + + return new BufferSegment(buffer, 0, len + 1); + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/JsonDotNetEncoder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/JsonDotNetEncoder.cs.meta new file mode 100644 index 000000000..6b9ce5710 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/JsonDotNetEncoder.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5e565b09f1e97ee4c9d119735901397b +timeCreated: 1515401618 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/LitJsonEncoder.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/LitJsonEncoder.cs new file mode 100644 index 000000000..2920e1837 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/LitJsonEncoder.cs @@ -0,0 +1,47 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE +using System; +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.JSON.LitJson; + +namespace BestHTTP.SignalRCore.Encoders +{ + public sealed class LitJsonEncoder : BestHTTP.SignalRCore.IEncoder + { + public LitJsonEncoder() + { + BestHTTP.JSON.LitJson.JsonMapper.RegisterImporter((input) => input); + BestHTTP.JSON.LitJson.JsonMapper.RegisterImporter((input) => (int)input); + BestHTTP.JSON.LitJson.JsonMapper.RegisterImporter((input) => (int)(input + 0.5)); + BestHTTP.JSON.LitJson.JsonMapper.RegisterImporter((input) => Convert.ToDateTime((string)input).ToUniversalTime()); + BestHTTP.JSON.LitJson.JsonMapper.RegisterImporter((input) => (float)input); + BestHTTP.JSON.LitJson.JsonMapper.RegisterImporter((input) => Convert.FromBase64String(input)); + BestHTTP.JSON.LitJson.JsonMapper.RegisterExporter((f, writer) => writer.Write((double)f)); + } + + public T DecodeAs(BufferSegment buffer) + { + using (var reader = new System.IO.StreamReader(new System.IO.MemoryStream(buffer.Data, buffer.Offset, buffer.Count))) + { + return JsonMapper.ToObject(reader); + } + } + + public PlatformSupport.Memory.BufferSegment Encode(T value) + { + var json = JsonMapper.ToJson(value); + int len = System.Text.Encoding.UTF8.GetByteCount(json); + byte[] buffer = BufferPool.Get(len + 1, true); + System.Text.Encoding.UTF8.GetBytes(json, 0, json.Length, buffer, 0); + buffer[len] = (byte)JsonProtocol.Separator; + return new BufferSegment(buffer, 0, len + 1); + } + + public object ConvertTo(Type toType, object obj) + { + string json = BestHTTP.JSON.LitJson.JsonMapper.ToJson(obj); + return BestHTTP.JSON.LitJson.JsonMapper.ToObject(toType, json); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/LitJsonEncoder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/LitJsonEncoder.cs.meta new file mode 100644 index 000000000..2b1eb80f6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/LitJsonEncoder.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b5784b64da7c8ad47b441a9f2f27a33b +timeCreated: 1515401618 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/MessagePackCSharpProtocol.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/MessagePackCSharpProtocol.cs new file mode 100644 index 000000000..b7ed6afb6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/MessagePackCSharpProtocol.cs @@ -0,0 +1,567 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE && BESTHTTP_SIGNALR_CORE_ENABLE_MESSAGEPACK_CSHARP +using System; +using System.Buffers; +using System.Collections.Generic; + +using BestHTTP.Extensions; + +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.SignalRCore.Messages; + +using MessagePack; + +namespace BestHTTP.SignalRCore.Encoders +{ + class BufferPoolBufferWriter : IBufferWriter + { + private BufferPoolMemoryStream underlyingStream; + private BufferSegment last; + + public BufferPoolBufferWriter(BufferPoolMemoryStream stream) + { + this.underlyingStream = stream; + this.last = BufferSegment.Empty; + } + + public void Advance(int count) + { + this.underlyingStream.Write(this.last.Data, this.last.Offset, this.last.Count + count); + BufferPool.Release(this.last); + this.last = BufferSegment.Empty; + } + + public Memory GetMemory(int sizeHint = 0) + { + var buffer = BufferPool.Get(Math.Max(sizeHint, BufferPool.MinBufferSize), true); + //Array.Clear(buffer, 0, buffer.Length); + + this.last = new BufferSegment(buffer, 0, 0); + return new Memory(buffer, 0, buffer.Length); + } + + public Span GetSpan(int sizeHint = 0) + { + var buffer = BufferPool.Get(Math.Max(sizeHint, BufferPool.MinBufferSize), true); + //Array.Clear(buffer, 0, buffer.Length); + + this.last = new BufferSegment(buffer, 0, 0); + + return new Span(buffer, 0, buffer.Length); + } + } + + public sealed class MessagePackCSharpProtocol : BestHTTP.SignalRCore.IProtocol + { + public string Name { get { return "messagepack"; } } + public TransferModes Type { get { return TransferModes.Binary; } } + public IEncoder Encoder { get; private set; } + public HubConnection Connection { get; set; } + + public BufferSegment EncodeMessage(Message message) + { + var memBuffer = BufferPool.Get(256, true); + var stream = new BufferPoolMemoryStream(memBuffer, 0, memBuffer.Length, true, true, false, true); + + // Write 5 bytes for placeholder for length prefix + stream.WriteByte(0); + stream.WriteByte(0); + stream.WriteByte(0); + stream.WriteByte(0); + stream.WriteByte(0); + + var bufferWriter = new BufferPoolBufferWriter(stream); + var writer = new MessagePackWriter(bufferWriter); + + switch (message.type) + { + case MessageTypes.StreamItem: + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#streamitem-message-encoding-1 + // [2, Headers, InvocationId, Item] + + writer.WriteArrayHeader(4); + + writer.Write(2); + WriteHeaders(ref writer); + WriteString(ref writer, message.invocationId); + WriteValue(ref writer, bufferWriter, message.item); + + break; + + case MessageTypes.Completion: + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#completion-message-encoding-1 + // [3, Headers, InvocationId, ResultKind, Result?] + + byte resultKind = (byte)(!string.IsNullOrEmpty(message.error) ? /*error*/ 1 : message.result != null ? /*non-void*/ 3 : /*void*/ 2); + + writer.WriteArrayHeader(resultKind == 2 ? 4 : 5); + + writer.Write(3); + WriteHeaders(ref writer); + WriteString(ref writer, message.invocationId); + writer.Write(resultKind); + + if (resultKind == 1) // error + WriteString(ref writer, message.error); + else if (resultKind == 3) // non-void + WriteValue(ref writer, bufferWriter, message.result); + + break; + + case MessageTypes.Invocation: + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#invocation-message-encoding-1 + // [1, Headers, InvocationId, NonBlocking, Target, [Arguments], [StreamIds]] + + case MessageTypes.StreamInvocation: + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#streaminvocation-message-encoding-1 + // [4, Headers, InvocationId, Target, [Arguments], [StreamIds]] + + writer.WriteArrayHeader(message.streamIds != null ? 6 : 5); + + writer.Write((int)message.type); + WriteHeaders(ref writer); + WriteString(ref writer, message.invocationId); + WriteString(ref writer, message.target); + writer.WriteArrayHeader(message.arguments != null ? message.arguments.Length : 0); + if (message.arguments != null) + for (int i = 0; i < message.arguments.Length; ++i) + WriteValue(ref writer, bufferWriter, message.arguments[i]); + + if (message.streamIds != null) + { + writer.WriteArrayHeader(message.streamIds.Length); + + for (int i = 0; i < message.streamIds.Length; ++i) + WriteValue(ref writer, bufferWriter, message.streamIds[i]); + } + + break; + + case MessageTypes.CancelInvocation: + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#cancelinvocation-message-encoding-1 + // [5, Headers, InvocationId] + + writer.WriteArrayHeader(3); + + writer.Write(5); + WriteHeaders(ref writer); + WriteString(ref writer, message.invocationId); + + break; + + case MessageTypes.Ping: + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#ping-message-encoding-1 + // [6] + + writer.WriteArrayHeader(1); + writer.Write(6); + + break; + + case MessageTypes.Close: + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#close-message-encoding-1 + // [7, Error, AllowReconnect?] + + writer.WriteArrayHeader(string.IsNullOrEmpty(message.error) ? 1 : 2); + + writer.Write(7); + if (!string.IsNullOrEmpty(message.error)) + WriteString(ref writer, message.error); + + break; + } + + writer.Flush(); + + // get how much bytes got written to the buffer. This includes the 5 placeholder bytes too. + int length = (int)stream.Position; + + // this is the length without the 5 placeholder bytes + int contentLength = length - 5; + + // get the stream's internal buffer. We set the releaseBuffer flag to false, so we can use it safely. + var buffer = stream.GetBuffer(); + + // add varint length prefix + byte prefixBytes = GetRequiredBytesForLengthPrefix(contentLength); + WriteLengthAsVarInt(buffer, 5 - prefixBytes, contentLength); + + // return with the final segment + return new BufferSegment(buffer, 5 - prefixBytes, contentLength + prefixBytes); + } + + private void WriteValue(ref MessagePackWriter writer, BufferPoolBufferWriter bufferWriter, object item) + { + if (item == null) + writer.WriteNil(); + else + { + writer.Flush(); + MessagePackSerializer.Serialize(item.GetType(), bufferWriter, item); + } + } + + private void WriteString(ref MessagePackWriter writer, string str) + { + if (str == null) + writer.WriteNil(); + else + { + int count = System.Text.Encoding.UTF8.GetByteCount(str); + var buffer = BufferPool.Get(count, true); + System.Text.Encoding.UTF8.GetBytes(str, 0, str.Length, buffer, 0); + + writer.WriteString(new ReadOnlySpan(buffer, 0, count)); + + BufferPool.Release(buffer); + } + } + + private void WriteHeaders(ref MessagePackWriter writer) + { + writer.WriteMapHeader(0); + } + + public void ParseMessages(BufferSegment segment, ref List messages) + { + int offset = segment.Offset; + while (offset < segment.Count) + { + int length = (int)ReadVarInt(segment.Data, ref offset); + + var reader = new MessagePackReader(new ReadOnlyMemory(segment.Data, offset, length)); + + int arrayLength = reader.ReadArrayHeader(); + int messageType = reader.ReadByte(); + + switch ((MessageTypes)messageType) + { + case MessageTypes.Invocation: messages.Add(ReadInvocation(ref reader)); break; + case MessageTypes.StreamItem: messages.Add(ReadStreamItem(ref reader)); break; + case MessageTypes.Completion: messages.Add(ReadCompletion(ref reader)); break; + case MessageTypes.StreamInvocation: messages.Add(ReadStreamInvocation(ref reader)); break; + case MessageTypes.CancelInvocation: messages.Add(ReadCancelInvocation(ref reader)); break; + case MessageTypes.Ping: + + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#ping-message-encoding-1 + messages.Add(new Message { type = MessageTypes.Ping }); + break; + case MessageTypes.Close: messages.Add(ReadClose(ref reader)); break; + } + + offset += length; + } + } + + private Message ReadClose(ref MessagePackReader reader) + { + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#close-message-encoding-1 + + string error = reader.ReadString(); + bool allowReconnect = false; + try + { + allowReconnect = reader.ReadBoolean(); + } + catch { } + + return new Message + { + type = MessageTypes.Close, + error = error, + allowReconnect = allowReconnect + }; + } + + private Message ReadCancelInvocation(ref MessagePackReader reader) + { + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#cancelinvocation-message-encoding-1 + + ReadHeaders(ref reader); + string invocationId = reader.ReadString(); + + return new Message + { + type = MessageTypes.CancelInvocation, + invocationId = invocationId + }; + } + + private Message ReadStreamInvocation(ref MessagePackReader reader) + { + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#streaminvocation-message-encoding-1 + + ReadHeaders(ref reader); + string invocationId = reader.ReadString(); + string target = reader.ReadString(); + object[] arguments = ReadArguments(ref reader, target); + string[] streamIds = ReadStreamIds(ref reader); + + return new Message + { + type = MessageTypes.StreamInvocation, + invocationId = invocationId, + target = target, + arguments = arguments, + streamIds = streamIds + }; + } + + private Message ReadCompletion(ref MessagePackReader reader) + { + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#completion-message-encoding-1 + + ReadHeaders(ref reader); + string invocationId = reader.ReadString(); + byte resultKind = reader.ReadByte(); + + switch (resultKind) + { + // 1 - Error result - Result contains a String with the error message + case 1: + string error = reader.ReadString(); + return new Message + { + type = MessageTypes.Completion, + invocationId = invocationId, + error = error + }; + + // 2 - Void result - Result is absent + case 2: + return new Message + { + type = MessageTypes.Completion, + invocationId = invocationId + }; + + // 3 - Non-Void result - Result contains the value returned by the server + case 3: + object item = ReadItem(ref reader, invocationId); + return new Message + { + type = MessageTypes.Completion, + invocationId = invocationId, + item = item, + result = item + }; + + default: + throw new NotImplementedException("Unknown resultKind: " + resultKind); + } + } + + private Message ReadStreamItem(ref MessagePackReader reader) + { + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#streamitem-message-encoding-1 + + ReadHeaders(ref reader); + string invocationId = reader.ReadString(); + object item = ReadItem(ref reader, invocationId); + + return new Message + { + type = MessageTypes.StreamItem, + invocationId = invocationId, + item = item + }; + } + + private Message ReadInvocation(ref MessagePackReader reader) + { + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#invocation-message-encoding-1 + + ReadHeaders(ref reader); + string invocationId = reader.ReadString(); + string target = reader.ReadString(); + object[] arguments = ReadArguments(ref reader, target); + string[] streamIds = ReadStreamIds(ref reader); + + return new Message + { + type = MessageTypes.Invocation, + invocationId = invocationId, + target = target, + arguments = arguments, + streamIds = streamIds + }; + } + + private object ReadItem(ref MessagePackReader reader, string invocationId) + { + long longId = 0; + if (long.TryParse(invocationId, out longId)) + { + Type itemType = this.Connection.GetItemType(longId); + + return MessagePackSerializer.Deserialize(itemType, reader.ReadRaw()); + } + else + { + reader.Skip(); + return null; + } + } + + private string[] ReadStreamIds(ref MessagePackReader reader) + { + var count = reader.ReadArrayHeader(); + string[] result = null; + + if (count > 0) + { + result = new string[count]; + for (int i = 0; i < count; i++) + result[i] = reader.ReadString(); + } + + return result; + } + + private object[] ReadArguments(ref MessagePackReader reader, string target) + { + var subscription = this.Connection.GetSubscription(target); + + object[] args = null; + if (subscription == null || subscription.callbacks == null || subscription.callbacks.Count == 0) + { + reader.Skip(); + } + else + { + int count = reader.ReadArrayHeader(); + + if (subscription.callbacks[0].ParamTypes != null) + { + args = new object[subscription.callbacks[0].ParamTypes.Length]; + for (int i = 0; i < subscription.callbacks[0].ParamTypes.Length; ++i) + args[i] = MessagePackSerializer.Deserialize(subscription.callbacks[0].ParamTypes[i], reader.ReadRaw()); + } + else + args = null; + } + + return args; + } + + private Dictionary ReadHeaders(ref MessagePackReader reader) + { + int count = reader.ReadMapHeader(); + + Dictionary result = null; + if (count > 0) + { + result = new Dictionary(count); + + for (int i = 0; i < count; i++) + { + string key = reader.ReadString(); + string value = reader.ReadString(); + + result.Add(key, value); + } + } + + return result; + } + + public static byte GetRequiredBytesForLengthPrefix(int length) + { + byte bytes = 0; + do + { + length >>= 7; + bytes++; + } + while (length > 0); + + return bytes; + } + + public static int WriteLengthAsVarInt(byte[] data, int offset, int length) + { + do + { + var current = data[offset]; + current = (byte)(length & 0x7f); + length >>= 7; + if (length > 0) + { + current |= 0x80; + } + + data[offset++] = current; + } + while (length > 0); + + return offset; + } + + public static uint ReadVarInt(byte[] data, ref int offset) + { + var length = 0U; + var numBytes = 0; + + byte byteRead; + do + { + byteRead = data[offset + numBytes]; + length = length | (((uint)(byteRead & 0x7f)) << (numBytes * 7)); + numBytes++; + } + while (offset + numBytes < data.Length && ((byteRead & 0x80) != 0)); + + offset += numBytes; + + return length; + } + + public object ConvertTo(Type toType, object obj) + { + if (obj == null) + return null; + +#if NETFX_CORE + TypeInfo typeInfo = toType.GetTypeInfo(); +#endif + +#if NETFX_CORE + if (typeInfo.IsEnum) +#else + if (toType.IsEnum) +#endif + return Enum.Parse(toType, obj.ToString(), true); + +#if NETFX_CORE + if (typeInfo.IsPrimitive) +#else + if (toType.IsPrimitive) +#endif + return Convert.ChangeType(obj, toType); + + if (toType == typeof(string)) + return obj.ToString(); + +#if NETFX_CORE + if (typeInfo.IsGenericType && toType.Name == "Nullable`1") + return Convert.ChangeType(obj, toType.GenericTypeArguments[0]); +#else + if (toType.IsGenericType && toType.Name == "Nullable`1") + return Convert.ChangeType(obj, toType.GetGenericArguments()[0]); +#endif + + return obj; + } + + public object[] GetRealArguments(Type[] argTypes, object[] arguments) + { + if (arguments == null || arguments.Length == 0) + return null; + + if (argTypes.Length > arguments.Length) + throw new Exception(string.Format("argType.Length({0}) < arguments.length({1})", argTypes.Length, arguments.Length)); + + return arguments; + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/MessagePackCSharpProtocol.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/MessagePackCSharpProtocol.cs.meta new file mode 100644 index 000000000..bca0b2c9a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/MessagePackCSharpProtocol.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c4d3d400dd496d43a409e350143e85a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/MessagePackProtocol.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/MessagePackProtocol.cs new file mode 100644 index 000000000..3cead807f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/MessagePackProtocol.cs @@ -0,0 +1,868 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE && BESTHTTP_SIGNALR_CORE_ENABLE_GAMEDEVWARE_MESSAGEPACK + +using System; +using System.Collections.Generic; +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.SignalRCore.Messages; +using GameDevWare.Serialization; +using GameDevWare.Serialization.MessagePack; +using GameDevWare.Serialization.Serializers; + +using UnityEngine; + +namespace BestHTTP.SignalRCore.Encoders +{ + public sealed class MessagePackProtocolSerializationOptions + { + /// + /// A function that must return a TypeSerializer for the given Type. To serialize an enum it can return an EnumNumberSerializer (default) to serialize enums as numbers or EnumSerializer to serialize them as strings. + /// + public Func EnumSerializerFactory; + } + + /// + /// IPRotocol implementation using the "Json & MessagePack Serialization" asset store package (https://assetstore.unity.com/packages/tools/network/json-messagepack-serialization-59918). + /// + public sealed class MessagePackProtocol : BestHTTP.SignalRCore.IProtocol + { + public string Name { get { return "messagepack"; } } + + public TransferModes Type { get { return TransferModes.Binary; } } + + public IEncoder Encoder { get; private set; } + + public HubConnection Connection { get; set; } + + public MessagePackProtocolSerializationOptions Options { get; set; } + + public MessagePackProtocol() + : this(new MessagePackProtocolSerializationOptions { EnumSerializerFactory = (enumType) => new EnumNumberSerializer(enumType) }) + { + + } + + public MessagePackProtocol(MessagePackProtocolSerializationOptions options) + { + this.Options = options; + + GameDevWare.Serialization.Json.DefaultSerializers.Clear(); + GameDevWare.Serialization.Json.DefaultSerializers.AddRange(new TypeSerializer[] + { + new BinarySerializer(), + new DateTimeOffsetSerializer(), + new DateTimeSerializer(), + new GuidSerializer(), + new StreamSerializer(), + new UriSerializer(), + new VersionSerializer(), + new TimeSpanSerializer(), + new DictionaryEntrySerializer(), + + new BestHTTP.SignalRCore.Encoders.Vector2Serializer(), + new BestHTTP.SignalRCore.Encoders.Vector3Serializer(), + new BestHTTP.SignalRCore.Encoders.Vector4Serializer(), + + new PrimitiveSerializer(typeof (bool)), + new PrimitiveSerializer(typeof (byte)), + new PrimitiveSerializer(typeof (decimal)), + new PrimitiveSerializer(typeof (double)), + new PrimitiveSerializer(typeof (short)), + new PrimitiveSerializer(typeof (int)), + new PrimitiveSerializer(typeof (long)), + new PrimitiveSerializer(typeof (sbyte)), + new PrimitiveSerializer(typeof (float)), + new PrimitiveSerializer(typeof (ushort)), + new PrimitiveSerializer(typeof (uint)), + new PrimitiveSerializer(typeof (ulong)), + new PrimitiveSerializer(typeof (string)), + }); + } + + /// + /// This function must convert all element in the arguments array to the corresponding type from the argTypes array. + /// + public object[] GetRealArguments(Type[] argTypes, object[] arguments) + { + if (arguments == null || arguments.Length == 0) + return null; + + if (argTypes.Length > arguments.Length) + throw new Exception(string.Format("argType.Length({0}) < arguments.length({1})", argTypes.Length, arguments.Length)); + + return arguments; + } + + /// + /// Convert a value to the given type. + /// + public object ConvertTo(Type toType, object obj) + { + if (obj == null) + return null; + +#if NETFX_CORE + TypeInfo typeInfo = toType.GetTypeInfo(); +#endif + +#if NETFX_CORE + if (typeInfo.IsEnum) +#else + if (toType.IsEnum) +#endif + return Enum.Parse(toType, obj.ToString(), true); + +#if NETFX_CORE + if (typeInfo.IsPrimitive) +#else + if (toType.IsPrimitive) +#endif + return Convert.ChangeType(obj, toType); + + if (toType == typeof(string)) + return obj.ToString(); + +#if NETFX_CORE + if (typeInfo.IsGenericType && toType.Name == "Nullable`1") + return Convert.ChangeType(obj, toType.GenericTypeArguments[0]); +#else + if (toType.IsGenericType && toType.Name == "Nullable`1") + return Convert.ChangeType(obj, toType.GetGenericArguments()[0]); +#endif + + return obj; + } + + /// + /// This function must return the encoded representation of the given message. + /// + public BufferSegment EncodeMessage(Message message) + { + var memBuffer = BufferPool.Get(256, true); + var stream = new BestHTTP.Extensions.BufferPoolMemoryStream(memBuffer, 0, memBuffer.Length, true, true, false, true); + + // Write 5 bytes for placeholder for length prefix + stream.WriteByte(0); + stream.WriteByte(0); + stream.WriteByte(0); + stream.WriteByte(0); + stream.WriteByte(0); + + var buffer = BufferPool.Get(MsgPackWriter.DEFAULT_BUFFER_SIZE, true); + + var context = new SerializationContext { + Options = SerializationOptions.SuppressTypeInformation, + EnumSerializerFactory = this.Options.EnumSerializerFactory, + ExtensionTypeHandler = CustomMessagePackExtensionTypeHandler.Instance + }; + + var writer = new MsgPackWriter(stream, context, buffer); + + switch (message.type) + { + case MessageTypes.StreamItem: + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#streamitem-message-encoding-1 + // [2, Headers, InvocationId, Item] + + writer.WriteArrayBegin(4); + + writer.WriteNumber(2); + WriteHeaders(writer); + writer.WriteString(message.invocationId); + WriteValue(writer, message.item); + + writer.WriteArrayEnd(); + break; + + case MessageTypes.Completion: + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#completion-message-encoding-1 + // [3, Headers, InvocationId, ResultKind, Result?] + + byte resultKind = (byte)(!string.IsNullOrEmpty(message.error) ? /*error*/ 1 : message.result != null ? /*non-void*/ 3 : /*void*/ 2); + + writer.WriteArrayBegin(resultKind == 2 ? 4 : 5); + + writer.WriteNumber(3); + WriteHeaders(writer); + writer.WriteString(message.invocationId); + writer.WriteNumber(resultKind); + + if (resultKind == 1) // error + writer.WriteString(message.error); + else if (resultKind == 3) // non-void + WriteValue(writer, message.result); + + writer.WriteArrayEnd(); + break; + + case MessageTypes.Invocation: + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#invocation-message-encoding-1 + // [1, Headers, InvocationId, NonBlocking, Target, [Arguments], [StreamIds]] + + case MessageTypes.StreamInvocation: + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#streaminvocation-message-encoding-1 + // [4, Headers, InvocationId, Target, [Arguments], [StreamIds]] + + writer.WriteArrayBegin(message.streamIds != null ? 6 : 5); + + writer.WriteNumber((int)message.type); + WriteHeaders(writer); + writer.WriteString(message.invocationId); + writer.WriteString(message.target); + writer.WriteArrayBegin(message.arguments != null ? message.arguments.Length : 0); + if (message.arguments != null) + for (int i = 0; i < message.arguments.Length; ++i) + WriteValue(writer, message.arguments[i]); + writer.WriteArrayEnd(); + + if (message.streamIds != null) + { + writer.WriteArrayBegin(message.streamIds.Length); + + for (int i = 0; i < message.streamIds.Length; ++i) + WriteValue(writer, message.streamIds[i]); + + writer.WriteArrayEnd(); + } + + writer.WriteArrayEnd(); + break; + + case MessageTypes.CancelInvocation: + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#cancelinvocation-message-encoding-1 + // [5, Headers, InvocationId] + + writer.WriteArrayBegin(3); + + writer.WriteNumber(5); + WriteHeaders(writer); + writer.WriteString(message.invocationId); + + writer.WriteArrayEnd(); + break; + + case MessageTypes.Ping: + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#ping-message-encoding-1 + // [6] + + writer.WriteArrayBegin(1); + + writer.WriteNumber(6); + + writer.WriteArrayEnd(); + break; + + case MessageTypes.Close: + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#close-message-encoding-1 + // [7, Error, AllowReconnect?] + + writer.WriteArrayBegin(string.IsNullOrEmpty(message.error) ? 1 : 2); + + writer.WriteNumber(7); + if (!string.IsNullOrEmpty(message.error)) + writer.WriteString(message.error); + + writer.WriteArrayEnd(); + break; + } + + writer.Flush(); + + // release back the buffer we used for the MsgPackWriter + BufferPool.Release(buffer); + + // get how much bytes got written to the buffer. This includes the 5 placeholder bytes too. + int length = (int)stream.Position; + + // this is the length without the 5 placeholder bytes + int contentLength = length - 5; + + // get the stream's internal buffer. We set the releaseBuffer flag to false, so we can use it safely. + buffer = stream.GetBuffer(); + + // add varint length prefix + byte prefixBytes = GetRequiredBytesForLengthPrefix(contentLength); + WriteLengthAsVarInt(buffer, 5 - prefixBytes, contentLength); + + // return with the final segment + return new BufferSegment(buffer, 5 - prefixBytes, contentLength + prefixBytes); + } + + private void WriteValue(MsgPackWriter writer, object value) + { + if (value == null) + writer.WriteNull(); + else + writer.WriteValue(value, value.GetType()); + } + + private void WriteHeaders(MsgPackWriter writer) + { + writer.WriteObjectBegin(0); + writer.WriteObjectEnd(); + } + + /// + /// This function must parse binary representation of the messages into the list of Messages. + /// + public void ParseMessages(BufferSegment segment, ref List messages) + { + messages.Clear(); + + int offset = segment.Offset; + while (offset < segment.Count) + { + int length = (int)ReadVarInt(segment.Data, ref offset); + + using (var stream = new System.IO.MemoryStream(segment.Data, offset, length)) + { + var buff = BufferPool.Get(MsgPackReader.DEFAULT_BUFFER_SIZE, true); + try + { + var context = new SerializationContext { + Options = SerializationOptions.SuppressTypeInformation, + ExtensionTypeHandler = CustomMessagePackExtensionTypeHandler.Instance + }; + var reader = new MsgPackReader(stream, context, Endianness.BigEndian, buff); + + reader.NextToken(); + reader.NextToken(); + + int messageType = reader.ReadByte(); + switch ((MessageTypes)messageType) + { + case MessageTypes.Invocation: messages.Add(ReadInvocation(reader)); break; + case MessageTypes.StreamItem: messages.Add(ReadStreamItem(reader)); break; + case MessageTypes.Completion: messages.Add(ReadCompletion(reader)); break; + case MessageTypes.StreamInvocation: messages.Add(ReadStreamInvocation(reader)); break; + case MessageTypes.CancelInvocation: messages.Add(ReadCancelInvocation(reader)); break; + case MessageTypes.Ping: + + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#ping-message-encoding-1 + messages.Add(new Message { type = MessageTypes.Ping }); + break; + case MessageTypes.Close: messages.Add(ReadClose(reader)); break; + } + + reader.NextToken(); + } + finally + { + BufferPool.Release(buff); + } + } + + offset += length; + } + } + + private Message ReadClose(MsgPackReader reader) + { + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#close-message-encoding-1 + + string error = reader.ReadString(); + bool allowReconnect = false; + try + { + allowReconnect = reader.ReadBoolean(); + } + catch { } + + return new Message + { + type = MessageTypes.Close, + error = error, + allowReconnect = allowReconnect + }; + } + + private Message ReadCancelInvocation(MsgPackReader reader) + { + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#cancelinvocation-message-encoding-1 + + ReadHeaders(reader); + string invocationId = reader.ReadString(); + + return new Message + { + type = MessageTypes.CancelInvocation, + invocationId = invocationId + }; + } + + private Message ReadStreamInvocation(MsgPackReader reader) + { + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#streaminvocation-message-encoding-1 + + ReadHeaders(reader); + string invocationId = reader.ReadString(); + string target = reader.ReadString(); + object[] arguments = ReadArguments(reader, target); + string[] streamIds = ReadStreamIds(reader); + + return new Message + { + type = MessageTypes.StreamInvocation, + invocationId = invocationId, + target = target, + arguments = arguments, + streamIds = streamIds + }; + } + + private Message ReadCompletion(MsgPackReader reader) + { + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#completion-message-encoding-1 + + ReadHeaders(reader); + string invocationId = reader.ReadString(); + byte resultKind = reader.ReadByte(); + + switch(resultKind) + { + // 1 - Error result - Result contains a String with the error message + case 1: + string error = reader.ReadString(); + return new Message + { + type = MessageTypes.Completion, + invocationId = invocationId, + error = error + }; + + // 2 - Void result - Result is absent + case 2: + return new Message + { + type = MessageTypes.Completion, + invocationId = invocationId + }; + + // 3 - Non-Void result - Result contains the value returned by the server + case 3: + object item = ReadItem(reader, invocationId); + return new Message + { + type = MessageTypes.Completion, + invocationId = invocationId, + item = item, + result = item + }; + + default: + throw new NotImplementedException("Unknown resultKind: " + resultKind); + } + } + + private Message ReadStreamItem(MsgPackReader reader) + { + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#streamitem-message-encoding-1 + + ReadHeaders(reader); + string invocationId = reader.ReadString(); + object item = ReadItem(reader, invocationId); + + return new Message + { + type = MessageTypes.StreamItem, + invocationId = invocationId, + item = item + }; + } + + private Message ReadInvocation(MsgPackReader reader) + { + // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#invocation-message-encoding-1 + + ReadHeaders(reader); + string invocationId = reader.ReadString(); + string target = reader.ReadString(); + object[] arguments = ReadArguments(reader, target); + string[] streamIds = ReadStreamIds(reader); + + return new Message + { + type = MessageTypes.Invocation, + invocationId = invocationId, + target = target, + arguments = arguments, + streamIds = streamIds + }; + } + + private object ReadItem(MsgPackReader reader, string invocationId) + { + long longId = 0; + if (long.TryParse(invocationId, out longId)) + { + Type itemType = this.Connection.GetItemType(longId); + return reader.ReadValue(itemType); + } + else + return reader.ReadValue(typeof(object)); + } + + private string[] ReadStreamIds(MsgPackReader reader) + { + return reader.ReadValue(typeof(string[])) as string[]; + } + + private object[] ReadArguments(MsgPackReader reader, string target) + { + var subscription = this.Connection.GetSubscription(target); + + object[] args; + if (subscription == null || subscription.callbacks == null || subscription.callbacks.Count == 0) + { + args = reader.ReadValue(typeof(object[])) as object[]; + } + else + { + reader.NextToken(); + + if (subscription.callbacks[0].ParamTypes != null) + { + args = new object[subscription.callbacks[0].ParamTypes.Length]; + for (int i = 0; i < subscription.callbacks[0].ParamTypes.Length; ++i) + args[i] = reader.ReadValue(subscription.callbacks[0].ParamTypes[i]); + } + else + args = null; + + reader.NextToken(); + } + + return args; + } + + private Dictionary ReadHeaders(MsgPackReader reader) + { + return reader.ReadValue(typeof(Dictionary)) as Dictionary; + } + + public static byte GetRequiredBytesForLengthPrefix(int length) + { + byte bytes = 0; + do + { + length >>= 7; + bytes++; + } + while (length > 0); + + return bytes; + } + + public static int WriteLengthAsVarInt(byte[] data, int offset, int length) + { + do + { + var current = data[offset]; + current = (byte)(length & 0x7f); + length >>= 7; + if (length > 0) + { + current |= 0x80; + } + + data[offset++] = current; + } + while (length > 0); + + return offset; + } + + public static uint ReadVarInt(byte[] data, ref int offset) + { + var length = 0U; + var numBytes = 0; + + byte byteRead; + do + { + byteRead = data[offset + numBytes]; + length = length | (((uint)(byteRead & 0x7f)) << (numBytes * 7)); + numBytes++; + } + while (offset + numBytes < data.Length && ((byteRead & 0x80) != 0)); + + offset += numBytes; + + return length; + } + } + + public sealed class CustomMessagePackExtensionTypeHandler : MessagePackExtensionTypeHandler + { + public const int EXTENSION_TYPE_DATE_TIME = -1; + public const int DATE_TIME_SIZE = 8; + + public const long BclSecondsAtUnixEpoch = 62135596800; + public const int NanosecondsPerTick = 100; + public static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); + + private static readonly Type[] DefaultExtensionTypes = new[] { typeof(DateTime) }; + public static CustomMessagePackExtensionTypeHandler Instance = new CustomMessagePackExtensionTypeHandler(); + + public override IEnumerable ExtensionTypes + { + get { return DefaultExtensionTypes; } + } + + + public override bool TryRead(sbyte type, ArraySegment data, out object value) + { + if (data.Array == null) throw new ArgumentNullException("data"); + + value = default(object); + switch (type) + { + case EXTENSION_TYPE_DATE_TIME: + switch (data.Count) + { + case 4: + { + var intValue = unchecked((int)(FromBytes(data.Array, data.Offset, 4))); + value = CustomMessagePackExtensionTypeHandler.UnixEpoch.AddSeconds(unchecked((uint)intValue)); + return true; + } + case 8: + { + long longValue = FromBytes(data.Array, data.Offset, 8); + ulong ulongValue = unchecked((ulong)longValue); + long nanoseconds = (long)(ulongValue >> 34); + ulong seconds = ulongValue & 0x00000003ffffffffL; + value = CustomMessagePackExtensionTypeHandler.UnixEpoch.AddSeconds(seconds).AddTicks(nanoseconds / CustomMessagePackExtensionTypeHandler.NanosecondsPerTick); + return true; + } + case 12: + { + var intValue = unchecked((int)(FromBytes(data.Array, data.Offset, 4))); + long longValue = FromBytes(data.Array, data.Offset, 8); + + var nanoseconds = unchecked((uint)intValue); + value = CustomMessagePackExtensionTypeHandler.UnixEpoch.AddSeconds(longValue).AddTicks(nanoseconds / CustomMessagePackExtensionTypeHandler.NanosecondsPerTick); + return true; + } + default: + throw new Exception($"Length of extension was {data.Count}. Either 4, 8 or 12 were expected."); + } + default: + return false; + } + } + + public override bool TryWrite(object value, out sbyte type, ref ArraySegment data) + { + if (value == null) + { + type = 0; + return false; + } + else if (value is DateTime) + { + type = EXTENSION_TYPE_DATE_TIME; + + var dateTime = (DateTime)(object)value; + + // The spec requires UTC. Convert to UTC if we're sure the value was expressed as Local time. + // If it's Unspecified, we want to leave it alone since .NET will change the value when we convert + // and we simply don't know, so we should leave it as-is. + if (dateTime.Kind == DateTimeKind.Local) + { + dateTime = dateTime.ToUniversalTime(); + } + + var secondsSinceBclEpoch = dateTime.Ticks / TimeSpan.TicksPerSecond; + var seconds = secondsSinceBclEpoch - CustomMessagePackExtensionTypeHandler.BclSecondsAtUnixEpoch; + var nanoseconds = (dateTime.Ticks % TimeSpan.TicksPerSecond) * CustomMessagePackExtensionTypeHandler.NanosecondsPerTick; + + if ((seconds >> 34) == 0) + { + var data64 = unchecked((ulong)((nanoseconds << 34) | seconds)); + if ((data64 & 0xffffffff00000000L) == 0) + { + // timestamp 32(seconds in 32-bit unsigned int) + var data32 = (UInt32)data64; + + const int TIMESTAMP_SIZE = 4; + + if (data.Array == null || data.Count < TIMESTAMP_SIZE) + data = new ArraySegment(new byte[TIMESTAMP_SIZE]); + + CopyBytesImpl(data32, 4, data.Array, data.Offset); + + if (data.Count != DATE_TIME_SIZE) + data = new ArraySegment(data.Array, data.Offset, DATE_TIME_SIZE); + } + else + { + // timestamp 64(nanoseconds in 30-bit unsigned int | seconds in 34-bit unsigned int) + const int TIMESTAMP_SIZE = 8; + if (data.Array == null || data.Count < TIMESTAMP_SIZE) + data = new ArraySegment(new byte[TIMESTAMP_SIZE]); + + CopyBytesImpl(unchecked((long)data64), 8, data.Array, data.Offset); + + if (data.Count != DATE_TIME_SIZE) + data = new ArraySegment(data.Array, data.Offset, DATE_TIME_SIZE); + } + } + else + { + // timestamp 96( nanoseconds in 32-bit unsigned int | seconds in 64-bit signed int ) + + const int TIMESTAMP_SIZE = 12; + + if (data.Array == null || data.Count < TIMESTAMP_SIZE) + data = new ArraySegment(new byte[TIMESTAMP_SIZE]); + + CopyBytesImpl((uint)nanoseconds, 4, data.Array, data.Offset); + CopyBytesImpl(seconds, 8, data.Array, data.Offset + 4); + + if (data.Count != DATE_TIME_SIZE) + data = new ArraySegment(data.Array, data.Offset, DATE_TIME_SIZE); + } + + return true; + } + + type = default(sbyte); + return false; + } + + private void CopyBytesImpl(long value, int bytes, byte[] buffer, int index) + { + var endOffset = index + bytes - 1; + for (var i = 0; i < bytes; i++) + { + buffer[endOffset - i] = unchecked((byte)(value & 0xff)); + value = value >> 8; + } + } + + private long FromBytes(byte[] buffer, int startIndex, int bytesToConvert) + { + long ret = 0; + for (var i = 0; i < bytesToConvert; i++) + { + ret = unchecked((ret << 8) | buffer[startIndex + i]); + } + return ret; + } + } + + // https://github.com/neuecc/MessagePack-CSharp/blob/13c299a5172c60154bae53395612af194c02d286/src/MessagePack.UnityClient/Assets/Scripts/MessagePack/Unity/Formatters.cs#L15 + public sealed class Vector2Serializer : TypeSerializer + { + public override Type SerializedType { get { return typeof(Vector2); } } + + public override object Deserialize(IJsonReader reader) + { + if (reader == null) throw new ArgumentNullException("reader"); + + if (reader.Token == JsonToken.Null) + return null; + + var value = new Vector2(); + reader.ReadArrayBegin(); + + int idx = 0; + while (reader.Token != JsonToken.EndOfArray) + value[idx++] = reader.ReadSingle(); + + reader.ReadArrayEnd(nextToken: false); + + return value; + } + + public override void Serialize(IJsonWriter writer, object value) + { + if (writer == null) throw new ArgumentNullException("writer"); + if (value == null) throw new ArgumentNullException("value"); + + var vector2 = (Vector2)value; + writer.WriteArrayBegin(2); + writer.Write(vector2.x); + writer.Write(vector2.y); + writer.WriteArrayEnd(); + } + } + + // https://github.com/neuecc/MessagePack-CSharp/blob/13c299a5172c60154bae53395612af194c02d286/src/MessagePack.UnityClient/Assets/Scripts/MessagePack/Unity/Formatters.cs#L56 + public sealed class Vector3Serializer : TypeSerializer + { + public override Type SerializedType { get { return typeof(Vector3); } } + + public override object Deserialize(IJsonReader reader) + { + if (reader == null) throw new ArgumentNullException("reader"); + + if (reader.Token == JsonToken.Null) + return null; + + var value = new Vector3(); + reader.ReadArrayBegin(); + + int idx = 0; + while (reader.Token != JsonToken.EndOfArray) + value[idx++] = reader.ReadSingle(); + + reader.ReadArrayEnd(nextToken: false); + + return value; + } + + public override void Serialize(IJsonWriter writer, object value) + { + if (writer == null) throw new ArgumentNullException("writer"); + if (value == null) throw new ArgumentNullException("value"); + + var vector3 = (Vector3)value; + writer.WriteArrayBegin(3); + writer.Write(vector3.x); + writer.Write(vector3.y); + writer.Write(vector3.z); + writer.WriteArrayEnd(); + } + } + + // https://github.com/neuecc/MessagePack-CSharp/blob/13c299a5172c60154bae53395612af194c02d286/src/MessagePack.UnityClient/Assets/Scripts/MessagePack/Unity/Formatters.cs#L102 + public sealed class Vector4Serializer : TypeSerializer + { + public override Type SerializedType { get { return typeof(Vector4); } } + + public override object Deserialize(IJsonReader reader) + { + if (reader == null) throw new ArgumentNullException("reader"); + + if (reader.Token == JsonToken.Null) + return null; + + var value = new Vector4(); + reader.ReadArrayBegin(); + + int idx = 0; + while (reader.Token != JsonToken.EndOfArray) + value[idx++] = reader.ReadSingle(); + + reader.ReadArrayEnd(nextToken: false); + + return value; + } + public override void Serialize(IJsonWriter writer, object value) + { + if (writer == null) throw new ArgumentNullException("writer"); + if (value == null) throw new ArgumentNullException("value"); + + var vector4 = (Vector4)value; + writer.WriteArrayBegin(4); + writer.Write(vector4.x); + writer.Write(vector4.y); + writer.Write(vector4.z); + writer.Write(vector4.z); + writer.WriteArrayEnd(); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/MessagePackProtocol.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/MessagePackProtocol.cs.meta new file mode 100644 index 000000000..09c1627f9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Encoders/MessagePackProtocol.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1fe4434eade98e547aca1e026a4dbcc3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithAuthorization.prefab b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithAuthorization.prefab new file mode 100644 index 000000000..828878acd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithAuthorization.prefab @@ -0,0 +1,1403 @@ +%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: 1750652722565904} + m_IsPrefabParent: 1 +--- !u!1 &1016724093667628 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224581036194182374} + - component: {fileID: 222108002566178684} + - component: {fileID: 114303768897489022} + - component: {fileID: 114206874546966408} + m_Layer: 5 + m_Name: Close Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1046770102796574 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224840586711978724} + - component: {fileID: 114724675454898548} + - component: {fileID: 222356870583331390} + - component: {fileID: 114644821226273622} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1270759109990960 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224184551116025142} + - component: {fileID: 114636817490860118} + - component: {fileID: 222644582562298938} + - component: {fileID: 114494961924280794} + - component: {fileID: 114903490574348432} + m_Layer: 5 + m_Name: Scroll View + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1321510833914278 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224614715691577042} + - component: {fileID: 222026719524940984} + - component: {fileID: 114562560413354308} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1407896214261614 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224822161078369564} + - component: {fileID: 222248815895701934} + - component: {fileID: 114755687534130436} + - component: {fileID: 114877608329591332} + - component: {fileID: 114707766491591276} + - component: {fileID: 114046269553528576} + m_Layer: 5 + m_Name: Connect Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1542950556942880 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224139804662490500} + - component: {fileID: 222218281664957240} + - component: {fileID: 114738466878418998} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1635991245602300 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224467155715298160} + - component: {fileID: 222657212610695822} + - component: {fileID: 114032525434743584} + - component: {fileID: 114507104097793168} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1705257753213400 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224717448897311288} + - component: {fileID: 222718085878172716} + - component: {fileID: 114060514756665510} + - component: {fileID: 114538113700124094} + m_Layer: 5 + m_Name: Scrollbar Horizontal + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1741359587154248 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224205607494934314} + - component: {fileID: 222441267042187182} + - component: {fileID: 114326814496878672} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1750652722565904 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224618935161343142} + - component: {fileID: 114170281910164592} + - component: {fileID: 114823703172059914} + m_Layer: 5 + m_Name: HubWithAuthorization + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1752562184532384 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224698274624217052} + - component: {fileID: 222750967050896812} + - component: {fileID: 114165993390900382} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1831890333506718 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224552278946300880} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1914680544605756 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224204829058425404} + - component: {fileID: 222346784720125702} + - component: {fileID: 114487851823892324} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1960061985629106 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224455811293202480} + - component: {fileID: 114531513893768538} + - component: {fileID: 114410701497372256} + - component: {fileID: 114256946821884594} + m_Layer: 5 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1967445138965510 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224661845023637388} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1988328903166182 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224064226092994320} + - component: {fileID: 114689295915972546} + - component: {fileID: 114168353803296676} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114032525434743584 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1635991245602300} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114046269553528576 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1407896214261614} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114060514756665510 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1705257753213400} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114165993390900382 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1752562184532384} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Close +--- !u!114 &114168353803296676 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1988328903166182} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114170281910164592 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1750652722565904} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114206874546966408 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1016724093667628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114303768897489022} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114823703172059914} + m_MethodName: OnCloseButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114256946821884594 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1960061985629106} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114303768897489022 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1016724093667628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114326814496878672 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1741359587154248} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114410701497372256 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1960061985629106} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114487851823892324 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1914680544605756} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Connect +--- !u!114 &114494961924280794 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1270759109990960} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114507104097793168 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1635991245602300} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114562560413354308} + m_HandleRect: {fileID: 224614715691577042} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114531513893768538 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1960061985629106} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114538113700124094 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1705257753213400} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114326814496878672} + m_HandleRect: {fileID: 224205607494934314} + m_Direction: 0 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114562560413354308 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1321510833914278} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114636817490860118 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1270759109990960} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 224064226092994320} + m_Horizontal: 1 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 0 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 10 + m_Viewport: {fileID: 224840586711978724} + m_HorizontalScrollbar: {fileID: 114538113700124094} + m_VerticalScrollbar: {fileID: 114507104097793168} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114644821226273622 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1046770102796574} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114689295915972546 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1988328903166182} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, 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: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114707766491591276 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1407896214261614} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114724675454898548 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1046770102796574} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &114738466878418998 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1542950556942880} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Authorization +--- !u!114 &114755687534130436 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1407896214261614} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114823703172059914 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1750652722565904} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a0d6f71c9108b3b419ee412fa4ddd018, type: 3} + m_Name: + m_EditorClassIdentifier: + Category: SignalR Core + DisplayName: Authorization + Description: This sample demonstrates the default access token authentication. The + server sends a JWT token to the client with a new url. The client will connect + to that new url and sends the JWT token. + _path: /redirect + _scrollRect: {fileID: 114636817490860118} + _contentRoot: {fileID: 224064226092994320} + _listItemPrefab: {fileID: 114144824129317776, guid: 46bdaff7a8bf5d34da870d286f962c69, + type: 2} + _maxListItemEntries: 100 + _connectButton: {fileID: 114877608329591332} + _closeButton: {fileID: 114206874546966408} +--- !u!114 &114877608329591332 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1407896214261614} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114755687534130436} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114823703172059914} + m_MethodName: OnConnectButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114903490574348432 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1270759109990960} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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!222 &222026719524940984 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1321510833914278} +--- !u!222 &222108002566178684 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1016724093667628} +--- !u!222 &222218281664957240 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1542950556942880} +--- !u!222 &222248815895701934 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1407896214261614} +--- !u!222 &222346784720125702 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1914680544605756} +--- !u!222 &222356870583331390 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1046770102796574} +--- !u!222 &222441267042187182 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1741359587154248} +--- !u!222 &222644582562298938 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1270759109990960} +--- !u!222 &222657212610695822 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1635991245602300} +--- !u!222 &222718085878172716 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1705257753213400} +--- !u!222 &222750967050896812 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1752562184532384} +--- !u!224 &224064226092994320 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1988328903166182} + 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: 224840586711978724} + 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.0000119093675} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!224 &224139804662490500 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1542950556942880} + 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: 224618935161343142} + 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.5, y: 0.5} +--- !u!224 &224184551116025142 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1270759109990960} + 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: 224840586711978724} + - {fileID: 224717448897311288} + - {fileID: 224467155715298160} + m_Father: {fileID: 224618935161343142} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224204829058425404 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1914680544605756} + 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: 224822161078369564} + 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.5, y: 0.5} +--- !u!224 &224205607494934314 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1741359587154248} + 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: 224552278946300880} + 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!224 &224455811293202480 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1960061985629106} + 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: 224822161078369564} + - {fileID: 224581036194182374} + m_Father: {fileID: 224618935161343142} + 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: 300, y: 0} + m_SizeDelta: {x: 590, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224467155715298160 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1635991245602300} + 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: 224661845023637388} + m_Father: {fileID: 224184551116025142} + 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: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!224 &224552278946300880 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1831890333506718} + 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: 224205607494934314} + m_Father: {fileID: 224717448897311288} + 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!224 &224581036194182374 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1016724093667628} + 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: 224698274624217052} + m_Father: {fileID: 224455811293202480} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224614715691577042 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1321510833914278} + 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: 224661845023637388} + 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!224 &224618935161343142 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1750652722565904} + 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: 224139804662490500} + - {fileID: 224184551116025142} + - {fileID: 224455811293202480} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224661845023637388 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1967445138965510} + 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: 224614715691577042} + m_Father: {fileID: 224467155715298160} + 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!224 &224698274624217052 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1752562184532384} + 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: 224581036194182374} + 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!224 &224717448897311288 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1705257753213400} + 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: 224552278946300880} + m_Father: {fileID: 224184551116025142} + 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!224 &224822161078369564 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1407896214261614} + 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: 224204829058425404} + m_Father: {fileID: 224455811293202480} + 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: 162, y: 0} + m_SizeDelta: {x: 314, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224840586711978724 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1046770102796574} + 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: 224064226092994320} + m_Father: {fileID: 224184551116025142} + 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} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithAuthorization.prefab.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithAuthorization.prefab.meta new file mode 100644 index 000000000..828e22526 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithAuthorization.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 485378cd297e7db4bba72fd93ae1d80f +timeCreated: 1571296078 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithAuthorizationSample.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithAuthorizationSample.cs new file mode 100644 index 000000000..fb725ec3b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithAuthorizationSample.cs @@ -0,0 +1,178 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE + +using BestHTTP.Examples; +using BestHTTP.Examples.Helpers; +using BestHTTP.SignalRCore; +using BestHTTP.SignalRCore.Encoders; +using System; +using UnityEngine; +using UnityEngine.UI; + +namespace BestHTTP.Examples +{ + /// + /// A sample to demonstrate Bearer token authorization on the server. The client will connect to the /redirect route + /// where it will receive the token and will receive the new url (/HubWithAuthorization) to connect to. + /// HubWithAuthorization without the token would throw an error. + /// + public sealed class HubWithAuthorizationSample : BestHTTP.Examples.Helpers.SampleBase + { +#pragma warning disable 0649 + + [SerializeField] + private string _path = "/redirect"; + + [SerializeField] + private ScrollRect _scrollRect; + + [SerializeField] + private RectTransform _contentRoot; + + [SerializeField] + private TextListItem _listItemPrefab; + + [SerializeField] + private int _maxListItemEntries = 100; + + [SerializeField] + private Button _connectButton; + + [SerializeField] + private Button _closeButton; + +#pragma warning restore + + // Instance of the HubConnection + HubConnection hub; + + protected override void Start() + { + base.Start(); + + SetButtons(true, false); + } + + void OnDestroy() + { + if (hub != null) + hub.StartClose(); + } + + public void OnConnectButton() + { + // Server side of this example can be found here: + // https://github.com/Benedicht/BestHTTP_DemoSite/blob/master/BestHTTP_DemoSite/Hubs/ + +#if BESTHTTP_SIGNALR_CORE_ENABLE_MESSAGEPACK_CSHARP + try + { + MessagePack.Resolvers.StaticCompositeResolver.Instance.Register( + MessagePack.Resolvers.DynamicEnumAsStringResolver.Instance, + MessagePack.Unity.UnityResolver.Instance, + //MessagePack.Unity.Extension.UnityBlitWithPrimitiveArrayResolver.Instance, + //MessagePack.Resolvers.StandardResolver.Instance, + MessagePack.Resolvers.ContractlessStandardResolver.Instance + ); + + var options = MessagePack.MessagePackSerializerOptions.Standard.WithResolver(MessagePack.Resolvers.StaticCompositeResolver.Instance); + MessagePack.MessagePackSerializer.DefaultOptions = options; + } + catch + { } +#endif + + IProtocol protocol = null; +#if BESTHTTP_SIGNALR_CORE_ENABLE_MESSAGEPACK_CSHARP + protocol = new MessagePackCSharpProtocol(); +#elif BESTHTTP_SIGNALR_CORE_ENABLE_GAMEDEVWARE_MESSAGEPACK + protocol = new MessagePackProtocol(); +#else + protocol = new JsonProtocol(new LitJsonEncoder()); +#endif + + // Crete the HubConnection + hub = new HubConnection(new Uri(base.sampleSelector.BaseURL + this._path), protocol); + + // Subscribe to hub events + hub.OnConnected += Hub_OnConnected; + hub.OnError += Hub_OnError; + hub.OnClosed += Hub_OnClosed; + + hub.OnRedirected += Hub_Redirected; + + hub.OnTransportEvent += (hub, transport, ev) => AddText(string.Format("Transport({0}) event: {1}", transport.TransportType, ev)); + + // And finally start to connect to the server + hub.StartConnect(); + + AddText("StartConnect called"); + SetButtons(false, false); + } + + public void OnCloseButton() + { + if (hub != null) + { + hub.StartClose(); + + AddText("StartClose called"); + SetButtons(false, false); + } + } + + private void Hub_Redirected(HubConnection hub, Uri oldUri, Uri newUri) + { + AddText(string.Format("Hub connection redirected to '{0}' with Access Token: '{1}'", hub.Uri, hub.NegotiationResult.AccessToken)); + } + + /// + /// This callback is called when the plugin is connected to the server successfully. Messages can be sent to the server after this point. + /// + private void Hub_OnConnected(HubConnection hub) + { + AddText(string.Format("Hub Connected with {0} transport using the {1} encoder.", hub.Transport.TransportType.ToString(), hub.Protocol.Name)); + SetButtons(false, true); + + // Call a parameterless function. We expect a string return value. + hub.Invoke("Echo", "Message from the client") + .OnSuccess(ret => AddText(string.Format("'Echo' returned: '{0}'", ret)).AddLeftPadding(20)); + + AddText("'Message from the client' sent!") + .AddLeftPadding(20); + } + + /// + /// This is called when the hub is closed after a StartClose() call. + /// + private void Hub_OnClosed(HubConnection hub) + { + AddText("Hub Closed"); + SetButtons(true, false); + } + + /// + /// Called when an unrecoverable error happen. After this event the hub will not send or receive any messages. + /// + private void Hub_OnError(HubConnection hub, string error) + { + AddText(string.Format("Hub Error: {0}", error)); + SetButtons(true, false); + } + + private void SetButtons(bool connect, bool close) + { + if (this._connectButton != null) + this._connectButton.interactable = connect; + + if (this._closeButton != null) + this._closeButton.interactable = close; + } + + private TextListItem AddText(string text) + { + return GUIHelper.AddText(this._listItemPrefab, this._contentRoot, text, this._maxListItemEntries, this._scrollRect); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithAuthorizationSample.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithAuthorizationSample.cs.meta new file mode 100644 index 000000000..7b72a106c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithAuthorizationSample.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a0d6f71c9108b3b419ee412fa4ddd018 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithPreAuthorization.prefab b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithPreAuthorization.prefab new file mode 100644 index 000000000..ce8b7e76e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithPreAuthorization.prefab @@ -0,0 +1,1402 @@ +%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: 1707231453306658} + m_IsPrefabParent: 1 +--- !u!1 &1022126199312864 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224644733227959826} + - component: {fileID: 222305776029411648} + - component: {fileID: 114309105024225752} + - component: {fileID: 114723627303815406} + m_Layer: 5 + m_Name: Close Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1255595794347126 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224370442551148742} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1349044305343248 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224098483655608162} + - component: {fileID: 222823380227521290} + - component: {fileID: 114810513903339060} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1358469684433382 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224116286378119480} + - component: {fileID: 222352682146820332} + - component: {fileID: 114591176375156756} + - component: {fileID: 114279922738974080} + m_Layer: 5 + m_Name: Scrollbar Horizontal + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1410222319315230 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224193739331830044} + - component: {fileID: 114829425231454798} + - component: {fileID: 222400694356880176} + - component: {fileID: 114894619493847916} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1435631912746984 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224048813631425796} + - component: {fileID: 114252935911306892} + - component: {fileID: 114253522444540692} + - component: {fileID: 114074522343335506} + m_Layer: 5 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1554145047273424 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224483924259405824} + - component: {fileID: 222905142766508918} + - component: {fileID: 114633926650536858} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1582600635830866 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224516217391847326} + - component: {fileID: 222619450087542520} + - component: {fileID: 114950001764783936} + - component: {fileID: 114660620266882662} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1629098493033634 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224206757741471832} + - component: {fileID: 222107073310491144} + - component: {fileID: 114760967065179522} + - component: {fileID: 114272012214550776} + - component: {fileID: 114736712066909672} + - component: {fileID: 114423390182071032} + m_Layer: 5 + m_Name: Connect Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1647781675465554 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224736918946952002} + - component: {fileID: 222929233916999990} + - component: {fileID: 114455777362211258} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1660202179829074 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224925506421073358} + - component: {fileID: 222758346469468288} + - component: {fileID: 114665911731971080} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1663059828216246 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224589457465054092} + - component: {fileID: 114774165417568938} + - component: {fileID: 222118124520774512} + - component: {fileID: 114342339766979702} + - component: {fileID: 114147347832123772} + m_Layer: 5 + m_Name: Scroll View + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1671855467874550 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224646137622869964} + - component: {fileID: 114116724709886016} + - component: {fileID: 114708608520690484} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1707231453306658 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224873349300989028} + - component: {fileID: 114708310013048468} + - component: {fileID: 114182893484780518} + m_Layer: 5 + m_Name: HubWithPreAuthorization + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1811256428248578 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224786415407859138} + - component: {fileID: 222839383883671040} + - component: {fileID: 114031965555559754} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1936929635204880 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224240005516477084} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114031965555559754 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1811256428248578} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Pre-Authorization +--- !u!114 &114074522343335506 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1435631912746984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114116724709886016 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1671855467874550} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, 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: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114147347832123772 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1663059828216246} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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!114 &114182893484780518 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1707231453306658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bfb23ec912f317944b34485c85ab6b31, type: 3} + m_Name: + m_EditorClassIdentifier: + Category: SignalR Core + DisplayName: Pre-authorization + Description: This sample demonstrates manual authentication. + _hubPath: /HubWithAuthorization + _jwtTokenPath: /generateJwtToken + _scrollRect: {fileID: 114774165417568938} + _contentRoot: {fileID: 224646137622869964} + _listItemPrefab: {fileID: 114144824129317776, guid: 46bdaff7a8bf5d34da870d286f962c69, + type: 2} + _maxListItemEntries: 100 + _connectButton: {fileID: 114272012214550776} + _closeButton: {fileID: 114723627303815406} +--- !u!114 &114252935911306892 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1435631912746984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114253522444540692 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1435631912746984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114272012214550776 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1629098493033634} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114760967065179522} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114182893484780518} + m_MethodName: OnConnectButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114279922738974080 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1358469684433382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114665911731971080} + m_HandleRect: {fileID: 224925506421073358} + m_Direction: 0 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114309105024225752 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1022126199312864} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114342339766979702 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1663059828216246} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114423390182071032 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1629098493033634} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114455777362211258 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1647781675465554} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Connect +--- !u!114 &114591176375156756 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1358469684433382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114633926650536858 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1554145047273424} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Close +--- !u!114 &114660620266882662 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1582600635830866} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114810513903339060} + m_HandleRect: {fileID: 224098483655608162} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114665911731971080 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1660202179829074} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114708310013048468 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1707231453306658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114708608520690484 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1671855467874550} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114723627303815406 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1022126199312864} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114309105024225752} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114182893484780518} + m_MethodName: OnCloseButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114736712066909672 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1629098493033634} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114760967065179522 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1629098493033634} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114774165417568938 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1663059828216246} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 224646137622869964} + m_Horizontal: 1 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 0 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 10 + m_Viewport: {fileID: 224193739331830044} + m_HorizontalScrollbar: {fileID: 114279922738974080} + m_VerticalScrollbar: {fileID: 114660620266882662} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114810513903339060 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1349044305343248} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114829425231454798 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1410222319315230} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &114894619493847916 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1410222319315230} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114950001764783936 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1582600635830866} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!222 &222107073310491144 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1629098493033634} +--- !u!222 &222118124520774512 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1663059828216246} +--- !u!222 &222305776029411648 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1022126199312864} +--- !u!222 &222352682146820332 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1358469684433382} +--- !u!222 &222400694356880176 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1410222319315230} +--- !u!222 &222619450087542520 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1582600635830866} +--- !u!222 &222758346469468288 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1660202179829074} +--- !u!222 &222823380227521290 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1349044305343248} +--- !u!222 &222839383883671040 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1811256428248578} +--- !u!222 &222905142766508918 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1554145047273424} +--- !u!222 &222929233916999990 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1647781675465554} +--- !u!224 &224048813631425796 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1435631912746984} + 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: 224206757741471832} + - {fileID: 224644733227959826} + m_Father: {fileID: 224873349300989028} + 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: 300, y: 0} + m_SizeDelta: {x: 590, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224098483655608162 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1349044305343248} + 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: 224370442551148742} + 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!224 &224116286378119480 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1358469684433382} + 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: 224240005516477084} + m_Father: {fileID: 224589457465054092} + 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!224 &224193739331830044 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1410222319315230} + 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: 224646137622869964} + m_Father: {fileID: 224589457465054092} + 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!224 &224206757741471832 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1629098493033634} + 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: 224736918946952002} + m_Father: {fileID: 224048813631425796} + 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: 162, y: 0} + m_SizeDelta: {x: 314, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224240005516477084 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1936929635204880} + 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: 224925506421073358} + m_Father: {fileID: 224116286378119480} + 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!224 &224370442551148742 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1255595794347126} + 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: 224098483655608162} + m_Father: {fileID: 224516217391847326} + 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!224 &224483924259405824 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1554145047273424} + 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: 224644733227959826} + 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!224 &224516217391847326 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1582600635830866} + 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: 224370442551148742} + m_Father: {fileID: 224589457465054092} + 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: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!224 &224589457465054092 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1663059828216246} + 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: 224193739331830044} + - {fileID: 224116286378119480} + - {fileID: 224516217391847326} + m_Father: {fileID: 224873349300989028} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224644733227959826 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1022126199312864} + 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: 224483924259405824} + m_Father: {fileID: 224048813631425796} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224646137622869964 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1671855467874550} + 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: 224193739331830044} + 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.0000033494216} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!224 &224736918946952002 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1647781675465554} + 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: 224206757741471832} + 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.5, y: 0.5} +--- !u!224 &224786415407859138 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1811256428248578} + 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: 224873349300989028} + 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.5, y: 0.5} +--- !u!224 &224873349300989028 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1707231453306658} + 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: 224786415407859138} + - {fileID: 224589457465054092} + - {fileID: 224048813631425796} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224925506421073358 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1660202179829074} + 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: 224240005516477084} + 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} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithPreAuthorization.prefab.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithPreAuthorization.prefab.meta new file mode 100644 index 000000000..44d5fceee --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithPreAuthorization.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2f038398a262e8643a4a18b5c72825e7 +timeCreated: 1571296176 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithPreAuthorizationSample.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithPreAuthorizationSample.cs new file mode 100644 index 000000000..5684a1d04 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithPreAuthorizationSample.cs @@ -0,0 +1,307 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE + +using BestHTTP; +using BestHTTP.Connections; +using BestHTTP.Examples.Helpers; +using BestHTTP.SignalRCore; +using BestHTTP.SignalRCore.Encoders; +using System; +using UnityEngine; +using UnityEngine.UI; + +namespace BestHTTP.Examples +{ + public sealed class HubWithPreAuthorizationSample : BestHTTP.Examples.Helpers.SampleBase + { +#pragma warning disable 0649 + + [SerializeField] + private string _hubPath = "/HubWithAuthorization"; + + [SerializeField] + private string _jwtTokenPath = "/generateJwtToken"; + + [SerializeField] + private ScrollRect _scrollRect; + + [SerializeField] + private RectTransform _contentRoot; + + [SerializeField] + private TextListItem _listItemPrefab; + + [SerializeField] + private int _maxListItemEntries = 100; + + [SerializeField] + private Button _connectButton; + + [SerializeField] + private Button _closeButton; + +#pragma warning restore + + // Instance of the HubConnection + HubConnection hub; + + protected override void Start() + { + base.Start(); + + SetButtons(true, false); + } + + void OnDestroy() + { + if (hub != null) + hub.StartClose(); + } + + public void OnConnectButton() + { + // Server side of this example can be found here: + // https://github.com/Benedicht/BestHTTP_DemoSite/blob/master/BestHTTP_DemoSite/Hubs/ + +#if BESTHTTP_SIGNALR_CORE_ENABLE_MESSAGEPACK_CSHARP + try + { + MessagePack.Resolvers.StaticCompositeResolver.Instance.Register( + MessagePack.Resolvers.DynamicEnumAsStringResolver.Instance, + MessagePack.Unity.UnityResolver.Instance, + //MessagePack.Unity.Extension.UnityBlitWithPrimitiveArrayResolver.Instance, + //MessagePack.Resolvers.StandardResolver.Instance, + MessagePack.Resolvers.ContractlessStandardResolver.Instance + ); + + var options = MessagePack.MessagePackSerializerOptions.Standard.WithResolver(MessagePack.Resolvers.StaticCompositeResolver.Instance); + MessagePack.MessagePackSerializer.DefaultOptions = options; + } + catch + { } +#endif + + IProtocol protocol = null; +#if BESTHTTP_SIGNALR_CORE_ENABLE_MESSAGEPACK_CSHARP + protocol = new MessagePackCSharpProtocol(); +#elif BESTHTTP_SIGNALR_CORE_ENABLE_GAMEDEVWARE_MESSAGEPACK + protocol = new MessagePackProtocol(); +#else + protocol = new JsonProtocol(new LitJsonEncoder()); +#endif + + // Crete the HubConnection + hub = new HubConnection(new Uri(base.sampleSelector.BaseURL + this._hubPath), protocol); + + hub.AuthenticationProvider = new PreAuthAccessTokenAuthenticator(new Uri(base.sampleSelector.BaseURL + this._jwtTokenPath)); + + hub.AuthenticationProvider.OnAuthenticationSucceded += AuthenticationProvider_OnAuthenticationSucceded; + hub.AuthenticationProvider.OnAuthenticationFailed += AuthenticationProvider_OnAuthenticationFailed; + + // Subscribe to hub events + hub.OnConnected += Hub_OnConnected; + hub.OnError += Hub_OnError; + hub.OnClosed += Hub_OnClosed; + + hub.OnTransportEvent += (hub, transport, ev) => AddText(string.Format("Transport({0}) event: {1}", transport.TransportType, ev)); + + // And finally start to connect to the server + hub.StartConnect(); + + AddText("StartConnect called"); + SetButtons(false, false); + } + + public void OnCloseButton() + { + if (hub != null) + { + hub.StartClose(); + + AddText("StartClose called"); + SetButtons(false, false); + } + } + + private void AuthenticationProvider_OnAuthenticationSucceded(IAuthenticationProvider provider) + { + string str = string.Format("Pre-Authentication Succeded! Token: '{0}' ", (hub.AuthenticationProvider as PreAuthAccessTokenAuthenticator).Token); + + AddText(str); + } + + private void AuthenticationProvider_OnAuthenticationFailed(IAuthenticationProvider provider, string reason) + { + AddText(string.Format("Authentication Failed! Reason: '{0}'", reason)); + } + + /// + /// This callback is called when the plugin is connected to the server successfully. Messages can be sent to the server after this point. + /// + private void Hub_OnConnected(HubConnection hub) + { + AddText(string.Format("Hub Connected with {0} transport using the {1} encoder.", hub.Transport.TransportType.ToString(), hub.Protocol.Name)); + SetButtons(false, true); + + // Call a parameterless function. We expect a string return value. + hub.Invoke("Echo", "Message from the client") + .OnSuccess(ret => AddText(string.Format("'Echo' returned: '{0}'", ret)).AddLeftPadding(20)); + + AddText("'Message from the client' sent!") + .AddLeftPadding(20); + } + + /// + /// This is called when the hub is closed after a StartClose() call. + /// + private void Hub_OnClosed(HubConnection hub) + { + AddText("Hub Closed"); + SetButtons(true, false); + } + + /// + /// Called when an unrecoverable error happen. After this event the hub will not send or receive any messages. + /// + private void Hub_OnError(HubConnection hub, string error) + { + AddText(string.Format("Hub Error: {0}", error)); + SetButtons(true, false); + } + + private void SetButtons(bool connect, bool close) + { + if (this._connectButton != null) + this._connectButton.interactable = connect; + + if (this._closeButton != null) + this._closeButton.interactable = close; + } + + private TextListItem AddText(string text) + { + return GUIHelper.AddText(this._listItemPrefab, this._contentRoot, text, this._maxListItemEntries, this._scrollRect); + } + } + + public sealed class PreAuthAccessTokenAuthenticator : IAuthenticationProvider + { + /// + /// No pre-auth step required for this type of authentication + /// + public bool IsPreAuthRequired { get { return true; } } + +#pragma warning disable 0067 + /// + /// Not used event as IsPreAuthRequired is false + /// + public event OnAuthenticationSuccededDelegate OnAuthenticationSucceded; + + /// + /// Not used event as IsPreAuthRequired is false + /// + public event OnAuthenticationFailedDelegate OnAuthenticationFailed; + +#pragma warning restore 0067 + + public string Token { get; private set; } + + private Uri authenticationUri; + + private HTTPRequest authenticationRequest; + private bool isCancellationRequested; + + public PreAuthAccessTokenAuthenticator(Uri authUri) + { + this.authenticationUri = authUri; + } + + public void StartAuthentication() + { + this.authenticationRequest = new HTTPRequest(this.authenticationUri, OnAuthenticationRequestFinished); + this.authenticationRequest.Send(); + } + + private void OnAuthenticationRequestFinished(HTTPRequest req, HTTPResponse resp) + { + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + if (resp.IsSuccess) + { + this.authenticationRequest = null; + this.Token = resp.DataAsText; + if (this.OnAuthenticationSucceded != null) + this.OnAuthenticationSucceded(this); + } + else // Internal server error? + AuthenticationFailed(string.Format("Request Finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}", + resp.StatusCode, + resp.Message, + resp.DataAsText)); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + AuthenticationFailed("Request Finished with Error! " + (req.Exception != null ? (req.Exception.Message + "" + req.Exception.StackTrace) : "No Exception")); + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + AuthenticationFailed("Request Aborted!"); + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + AuthenticationFailed("Connection Timed Out!"); + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + AuthenticationFailed("Processing the request Timed Out!"); + break; + } + } + + private void AuthenticationFailed(string reason) + { + this.authenticationRequest = null; + + if (this.isCancellationRequested) + return; + + if (this.OnAuthenticationFailed != null) + this.OnAuthenticationFailed(this, reason); + } + + /// + /// Prepares the request by adding two headers to it + /// + public void PrepareRequest(BestHTTP.HTTPRequest request) + { + if (HTTPProtocolFactory.GetProtocolFromUri(request.CurrentUri) == SupportedProtocols.HTTP) + request.Uri = PrepareUri(request.Uri); + } + + public Uri PrepareUri(Uri uri) + { + if (!string.IsNullOrEmpty(this.Token)) + { + string query = string.IsNullOrEmpty(uri.Query) ? "?" : uri.Query + "&"; + UriBuilder uriBuilder = new UriBuilder(uri.Scheme, uri.Host, uri.Port, uri.AbsolutePath, query + "access_token=" + this.Token); + return uriBuilder.Uri; + } + else + return uri; + } + + public void Cancel() + { + this.isCancellationRequested = true; + if (this.authenticationRequest != null) + this.authenticationRequest.Abort(); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithPreAuthorizationSample.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithPreAuthorizationSample.cs.meta new file mode 100644 index 000000000..857e393f1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/HubWithPreAuthorizationSample.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bfb23ec912f317944b34485c85ab6b31 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Person.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Person.cs new file mode 100644 index 000000000..3f29d41c5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Person.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE + +using System; +using System.Collections.Generic; + +namespace BestHTTP.Examples +{ + public enum PersonStates + { + Unknown, + Joined + } + + /// + /// Helper class to demonstrate strongly typed callbacks + /// + internal sealed class Person + { + public UnityEngine.Vector3[] Positions { get; set; } + public string Name { get; set; } + public long Age { get; set; } + public DateTime Joined { get; set; } + public PersonStates State { get; set; } + public List Friends { get; set; } + + public override string ToString() + { + return string.Format("[Person Name: '{0}', Age: '{1}', Joined: {2}, State: {3}, Friends: {4}, Position: {5}]", + this.Name, this.Age, this.Joined, this.State, this.Friends != null ? this.Friends.Count : 0, this.Positions != null ? this.Positions.Length : 0); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Person.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Person.cs.meta new file mode 100644 index 000000000..8c9760975 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Person.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 2f03f1530cd505e4d9b16a6b4f2e89c3 +timeCreated: 1577715217 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Redirect.prefab b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Redirect.prefab new file mode 100644 index 000000000..9706a6c85 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Redirect.prefab @@ -0,0 +1,1402 @@ +%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: 1967976475892758} + m_IsPrefabParent: 1 +--- !u!1 &1062217546960874 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224078748174950022} + - component: {fileID: 222443488415242652} + - component: {fileID: 114611612376846846} + - component: {fileID: 114108388050918382} + m_Layer: 5 + m_Name: Scrollbar Horizontal + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1132728045593798 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224551154417694962} + - component: {fileID: 114623072442993678} + - component: {fileID: 114998125110498484} + - component: {fileID: 114380746622549018} + m_Layer: 5 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1160426328060442 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224636277271434436} + - component: {fileID: 222433551396306870} + - component: {fileID: 114174584220035480} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1164419917604302 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224624668724118902} + - component: {fileID: 222362633021393020} + - component: {fileID: 114359568537272232} + - component: {fileID: 114917573722355912} + - component: {fileID: 114745266850019998} + - component: {fileID: 114727678296258608} + m_Layer: 5 + m_Name: Connect Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1176695341385256 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224910816800417592} + - component: {fileID: 222069314916355498} + - component: {fileID: 114101341063414630} + - component: {fileID: 114029645988074050} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1185179921280872 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224457944870613454} + - component: {fileID: 222431656044351144} + - component: {fileID: 114829505955933318} + - component: {fileID: 114269028294856174} + m_Layer: 5 + m_Name: Close Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1367125677067232 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224455705097585810} + - component: {fileID: 222062580763779230} + - component: {fileID: 114131961384193948} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1369703946263196 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224568716152704348} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1461903523997986 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224723876378663370} + - component: {fileID: 114662027132870942} + - component: {fileID: 114376446087234068} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1489267867831638 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224013589985431458} + - component: {fileID: 222228765779570498} + - component: {fileID: 114617872204378146} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1513278043055668 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224338324498228094} + - component: {fileID: 222518690727241938} + - component: {fileID: 114725703848739704} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1610313314736488 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224578174174870892} + - component: {fileID: 114375589492071040} + - component: {fileID: 222777631875254528} + - component: {fileID: 114986235983069222} + - component: {fileID: 114823461681979144} + m_Layer: 5 + m_Name: Scroll View + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1786992496162530 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224735668700483714} + - component: {fileID: 114769068542041940} + - component: {fileID: 222955483477859106} + - component: {fileID: 114476401325950650} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1812791985607936 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224458942766099760} + - component: {fileID: 222554267777279078} + - component: {fileID: 114924151928395386} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1825228819411062 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224050813176295956} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1967976475892758 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224174493786837168} + - component: {fileID: 114078750689248784} + - component: {fileID: 114051776568563590} + m_Layer: 5 + m_Name: Redirect + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114029645988074050 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1176695341385256} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114617872204378146} + m_HandleRect: {fileID: 224013589985431458} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114051776568563590 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1967976475892758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: febf35a5598c76843a7573e8f650079e, type: 3} + m_Name: + m_EditorClassIdentifier: + Category: SignalR Core + DisplayName: Redirect + Description: This sample demonstrates how the plugin handles redirection through + the SignalR Core negotiation data. + _path: /redirect_sample + _scrollRect: {fileID: 114375589492071040} + _contentRoot: {fileID: 224723876378663370} + _listItemPrefab: {fileID: 114144824129317776, guid: 46bdaff7a8bf5d34da870d286f962c69, + type: 2} + _maxListItemEntries: 100 + _connectButton: {fileID: 114917573722355912} + _closeButton: {fileID: 114269028294856174} +--- !u!114 &114078750689248784 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1967976475892758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114101341063414630 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1176695341385256} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114108388050918382 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1062217546960874} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114131961384193948} + m_HandleRect: {fileID: 224455705097585810} + m_Direction: 0 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114131961384193948 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1367125677067232} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114174584220035480 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1160426328060442} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Connect +--- !u!114 &114269028294856174 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1185179921280872} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114829505955933318} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114051776568563590} + m_MethodName: OnCloseButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114359568537272232 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1164419917604302} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114375589492071040 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1610313314736488} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 224723876378663370} + m_Horizontal: 1 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 0 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 10 + m_Viewport: {fileID: 224735668700483714} + m_HorizontalScrollbar: {fileID: 114108388050918382} + m_VerticalScrollbar: {fileID: 114029645988074050} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114376446087234068 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1461903523997986} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114380746622549018 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1132728045593798} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114476401325950650 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1786992496162530} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114611612376846846 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1062217546960874} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114617872204378146 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1489267867831638} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114623072442993678 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1132728045593798} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114662027132870942 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1461903523997986} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, 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: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114725703848739704 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1513278043055668} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Close +--- !u!114 &114727678296258608 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1164419917604302} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114745266850019998 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1164419917604302} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114769068542041940 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1786992496162530} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &114823461681979144 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1610313314736488} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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!114 &114829505955933318 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1185179921280872} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114917573722355912 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1164419917604302} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114359568537272232} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114051776568563590} + m_MethodName: OnConnectButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114924151928395386 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1812791985607936} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Redirect Sample +--- !u!114 &114986235983069222 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1610313314736488} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114998125110498484 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1132728045593798} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!222 &222062580763779230 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1367125677067232} +--- !u!222 &222069314916355498 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1176695341385256} +--- !u!222 &222228765779570498 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1489267867831638} +--- !u!222 &222362633021393020 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1164419917604302} +--- !u!222 &222431656044351144 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1185179921280872} +--- !u!222 &222433551396306870 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1160426328060442} +--- !u!222 &222443488415242652 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1062217546960874} +--- !u!222 &222518690727241938 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1513278043055668} +--- !u!222 &222554267777279078 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1812791985607936} +--- !u!222 &222777631875254528 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1610313314736488} +--- !u!222 &222955483477859106 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1786992496162530} +--- !u!224 &224013589985431458 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1489267867831638} + 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: 224568716152704348} + 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!224 &224050813176295956 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1825228819411062} + 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: 224455705097585810} + m_Father: {fileID: 224078748174950022} + 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!224 &224078748174950022 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1062217546960874} + 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: 224050813176295956} + m_Father: {fileID: 224578174174870892} + 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!224 &224174493786837168 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1967976475892758} + 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: 224458942766099760} + - {fileID: 224578174174870892} + - {fileID: 224551154417694962} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224338324498228094 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1513278043055668} + 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: 224457944870613454} + 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!224 &224455705097585810 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1367125677067232} + 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: 224050813176295956} + 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!224 &224457944870613454 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1185179921280872} + 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: 224338324498228094} + m_Father: {fileID: 224551154417694962} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224458942766099760 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1812791985607936} + 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: 224174493786837168} + 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.5, y: 0.5} +--- !u!224 &224551154417694962 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1132728045593798} + 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: 224624668724118902} + - {fileID: 224457944870613454} + m_Father: {fileID: 224174493786837168} + 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: 300, y: 0} + m_SizeDelta: {x: 590, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224568716152704348 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1369703946263196} + 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: 224013589985431458} + m_Father: {fileID: 224910816800417592} + 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!224 &224578174174870892 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1610313314736488} + 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: 224735668700483714} + - {fileID: 224078748174950022} + - {fileID: 224910816800417592} + m_Father: {fileID: 224174493786837168} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224624668724118902 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1164419917604302} + 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: 224636277271434436} + m_Father: {fileID: 224551154417694962} + 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: 162, y: 0} + m_SizeDelta: {x: 314, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224636277271434436 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1160426328060442} + 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: 224624668724118902} + 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.5, y: 0.5} +--- !u!224 &224723876378663370 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1461903523997986} + 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: 224735668700483714} + 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.0000119093675} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!224 &224735668700483714 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1786992496162530} + 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: 224723876378663370} + m_Father: {fileID: 224578174174870892} + 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!224 &224910816800417592 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1176695341385256} + 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: 224568716152704348} + m_Father: {fileID: 224578174174870892} + 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: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Redirect.prefab.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Redirect.prefab.meta new file mode 100644 index 000000000..ff635b468 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/Redirect.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0f38f20254b96204dadeea0ac9daaa4e +timeCreated: 1571296257 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/RedirectSample.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/RedirectSample.cs new file mode 100644 index 000000000..f1fab3740 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/RedirectSample.cs @@ -0,0 +1,240 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE + +using BestHTTP; +using BestHTTP.Connections; +using BestHTTP.Examples.Helpers; +using BestHTTP.SignalRCore; +using BestHTTP.SignalRCore.Encoders; +using System; +using UnityEngine; +using UnityEngine.UI; + +namespace BestHTTP.Examples +{ + /// + /// This sample demonstrates redirection capabilities. The server will redirect a few times the client before + /// routing it to the final endpoint. + /// + public sealed class RedirectSample : BestHTTP.Examples.Helpers.SampleBase + { +#pragma warning disable 0649 + + [SerializeField] + private string _path = "/redirect_sample"; + + [SerializeField] + private ScrollRect _scrollRect; + + [SerializeField] + private RectTransform _contentRoot; + + [SerializeField] + private TextListItem _listItemPrefab; + + [SerializeField] + private int _maxListItemEntries = 100; + + [SerializeField] + private Button _connectButton; + + [SerializeField] + private Button _closeButton; + +#pragma warning restore + + // Instance of the HubConnection + public HubConnection hub; + + protected override void Start() + { + base.Start(); + + SetButtons(true, false); + } + + void OnDestroy() + { + if (hub != null) + { + hub.StartClose(); + } + } + + public void OnConnectButton() + { + // Server side of this example can be found here: + // https://github.com/Benedicht/BestHTTP_DemoSite/blob/master/BestHTTP_DemoSite/Hubs/ + +#if BESTHTTP_SIGNALR_CORE_ENABLE_MESSAGEPACK_CSHARP + try + { + MessagePack.Resolvers.StaticCompositeResolver.Instance.Register( + MessagePack.Resolvers.DynamicEnumAsStringResolver.Instance, + MessagePack.Unity.UnityResolver.Instance, + //MessagePack.Unity.Extension.UnityBlitWithPrimitiveArrayResolver.Instance, + //MessagePack.Resolvers.StandardResolver.Instance, + MessagePack.Resolvers.ContractlessStandardResolver.Instance + ); + + var options = MessagePack.MessagePackSerializerOptions.Standard.WithResolver(MessagePack.Resolvers.StaticCompositeResolver.Instance); + MessagePack.MessagePackSerializer.DefaultOptions = options; + } + catch + { } +#endif + + IProtocol protocol = null; +#if BESTHTTP_SIGNALR_CORE_ENABLE_MESSAGEPACK_CSHARP + protocol = new MessagePackCSharpProtocol(); +#elif BESTHTTP_SIGNALR_CORE_ENABLE_GAMEDEVWARE_MESSAGEPACK + protocol = new MessagePackProtocol(); +#else + protocol = new JsonProtocol(new LitJsonEncoder()); +#endif + + // Crete the HubConnection + hub = new HubConnection(new Uri(base.sampleSelector.BaseURL + this._path), protocol); + hub.AuthenticationProvider = new RedirectLoggerAccessTokenAuthenticator(hub); + + // Subscribe to hub events + hub.OnConnected += Hub_OnConnected; + hub.OnError += Hub_OnError; + hub.OnClosed += Hub_OnClosed; + + hub.OnRedirected += Hub_Redirected; + + hub.OnTransportEvent += (hub, transport, ev) => AddText(string.Format("Transport({0}) event: {1}", transport.TransportType, ev)); + + // And finally start to connect to the server + hub.StartConnect(); + + AddText("StartConnect called"); + SetButtons(false, false); + } + + public void OnCloseButton() + { + if (hub != null) + { + AddText("Calling StartClose"); + + hub.StartClose(); + + SetButtons(false, false); + } + } + + private void Hub_Redirected(HubConnection hub, Uri oldUri, Uri newUri) + { + AddText(string.Format("Hub connection redirected to '{0}'!", hub.Uri)); + } + + /// + /// This callback is called when the plugin is connected to the server successfully. Messages can be sent to the server after this point. + /// + private void Hub_OnConnected(HubConnection hub) + { + AddText(string.Format("Hub Connected with {0} transport using the {1} encoder.", hub.Transport.TransportType.ToString(), hub.Protocol.Name)); + + // Call a parameterless function. We expect a string return value. + hub.Invoke("Echo", "Message from the client") + .OnSuccess(ret => AddText(string.Format(" 'Echo' returned: '{0}'", ret))); + + SetButtons(false, true); + } + + /// + /// This is called when the hub is closed after a StartClose() call. + /// + private void Hub_OnClosed(HubConnection hub) + { + AddText("Hub Closed"); + SetButtons(true, false); + } + + /// + /// Called when an unrecoverable error happen. After this event the hub will not send or receive any messages. + /// + private void Hub_OnError(HubConnection hub, string error) + { + AddText(string.Format("Hub Error: {0}", error)); + SetButtons(true, false); + } + + private void SetButtons(bool connect, bool close) + { + if (this._connectButton != null) + this._connectButton.interactable = connect; + + if (this._closeButton != null) + this._closeButton.interactable = close; + } + + private void AddText(string text) + { + GUIHelper.AddText(this._listItemPrefab, this._contentRoot, text, this._maxListItemEntries, this._scrollRect); + } + } + + public sealed class RedirectLoggerAccessTokenAuthenticator : IAuthenticationProvider + { + /// + /// No pre-auth step required for this type of authentication + /// + public bool IsPreAuthRequired { get { return false; } } + +#pragma warning disable 0067 + /// + /// Not used event as IsPreAuthRequired is false + /// + public event OnAuthenticationSuccededDelegate OnAuthenticationSucceded; + + /// + /// Not used event as IsPreAuthRequired is false + /// + public event OnAuthenticationFailedDelegate OnAuthenticationFailed; + +#pragma warning restore 0067 + + private HubConnection _connection; + + public RedirectLoggerAccessTokenAuthenticator(HubConnection connection) + { + this._connection = connection; + } + + /// + /// Not used as IsPreAuthRequired is false + /// + public void StartAuthentication() + { } + + /// + /// Prepares the request by adding two headers to it + /// + public void PrepareRequest(BestHTTP.HTTPRequest request) + { + request.SetHeader("x-redirect-count", _connection.RedirectCount.ToString()); + + if (HTTPProtocolFactory.GetProtocolFromUri(request.CurrentUri) == SupportedProtocols.HTTP) + request.Uri = PrepareUri(request.Uri); + } + + public Uri PrepareUri(Uri uri) + { + if (this._connection.NegotiationResult != null && !string.IsNullOrEmpty(this._connection.NegotiationResult.AccessToken)) + { + string query = string.IsNullOrEmpty(uri.Query) ? "?" : uri.Query + "&"; + UriBuilder uriBuilder = new UriBuilder(uri.Scheme, uri.Host, uri.Port, uri.AbsolutePath, query + "access_token=" + this._connection.NegotiationResult.AccessToken); + return uriBuilder.Uri; + } + else + return uri; + } + + public void Cancel() + { } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/RedirectSample.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/RedirectSample.cs.meta new file mode 100644 index 000000000..87b70da62 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/RedirectSample.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: febf35a5598c76843a7573e8f650079e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/TestHub.prefab b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/TestHub.prefab new file mode 100644 index 000000000..aa4aabd4c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/TestHub.prefab @@ -0,0 +1,1410 @@ +%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: 1638523814489510} + m_IsPrefabParent: 1 +--- !u!1 &1038591687917618 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224704218053827896} + - component: {fileID: 222420943052918922} + - component: {fileID: 114074303593469922} + - component: {fileID: 114151161198250362} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1124105774069684 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224467146834965472} + - component: {fileID: 114355870386585004} + - component: {fileID: 222470408282213616} + - component: {fileID: 114986567977301700} + - component: {fileID: 114186426956694556} + m_Layer: 5 + m_Name: Scroll View + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1204370757159730 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224180373888628254} + - component: {fileID: 222098563536574056} + - component: {fileID: 114956094281271480} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1207322547963618 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224146000816548192} + - component: {fileID: 222177808205883476} + - component: {fileID: 114506408585435346} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1276219903168366 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224423515151943592} + - component: {fileID: 114098721136836344} + - component: {fileID: 114468991126186942} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1318517605042108 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224420732470901652} + - component: {fileID: 114484089162834856} + - component: {fileID: 114334962446679920} + - component: {fileID: 114948849694705334} + m_Layer: 5 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1433467453266018 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224605607142989984} + - component: {fileID: 222893879445873518} + - component: {fileID: 114402223494446966} + - component: {fileID: 114706574573020758} + m_Layer: 5 + m_Name: Scrollbar Horizontal + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1552607393758952 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224607326854693534} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1585822631579854 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224781178089306710} + - component: {fileID: 222836652998952764} + - component: {fileID: 114531813178463268} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1604054296740222 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224984124764780486} + - component: {fileID: 222601760045801886} + - component: {fileID: 114393371695682318} + - component: {fileID: 114183583078306848} + m_Layer: 5 + m_Name: Close Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1638523814489510 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224229808225831666} + - component: {fileID: 114524161209067524} + - component: {fileID: 114491302702075964} + m_Layer: 5 + m_Name: TestHub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1658958313708458 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224805214121029348} + - component: {fileID: 222187423713600754} + - component: {fileID: 114041755994219322} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1711432179471938 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224498525384877774} + - component: {fileID: 222379790607741942} + - component: {fileID: 114625103025680996} + - component: {fileID: 114320013680820188} + - component: {fileID: 114029331487493084} + - component: {fileID: 114954403076395410} + m_Layer: 5 + m_Name: Connect Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1867791362833596 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224998767821500724} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1906484789603984 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224276963845286766} + - component: {fileID: 114825175876677118} + - component: {fileID: 222365384534345472} + - component: {fileID: 114877916617402376} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1928684845076054 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224186694450471020} + - component: {fileID: 222873375866903268} + - component: {fileID: 114018365654837366} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114018365654837366 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1928684845076054} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Close +--- !u!114 &114029331487493084 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1711432179471938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114041755994219322 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1658958313708458} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Test Hub +--- !u!114 &114074303593469922 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1038591687917618} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114098721136836344 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1276219903168366} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, 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: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114151161198250362 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1038591687917618} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114506408585435346} + m_HandleRect: {fileID: 224146000816548192} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114183583078306848 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1604054296740222} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114393371695682318} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114491302702075964} + m_MethodName: OnCloseButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114186426956694556 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1124105774069684} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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!114 &114320013680820188 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1711432179471938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114625103025680996} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114491302702075964} + m_MethodName: OnConnectButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114334962446679920 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1318517605042108} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114355870386585004 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1124105774069684} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 224423515151943592} + m_Horizontal: 1 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 0 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 10 + m_Viewport: {fileID: 224276963845286766} + m_HorizontalScrollbar: {fileID: 114706574573020758} + m_VerticalScrollbar: {fileID: 114151161198250362} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114393371695682318 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1604054296740222} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114402223494446966 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1433467453266018} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114468991126186942 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1276219903168366} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114484089162834856 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1318517605042108} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114491302702075964 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1638523814489510} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bd28a72bf1727542937e09ab435abcc, type: 3} + m_Name: + m_EditorClassIdentifier: + Category: SignalR Core + DisplayName: Test Hub + Description: 'This sample demonstrates most of the functionalities of the SignalR + protocol: + + -How to set up HubConnection to connect to the server + + -Subscribing to server-callable function + + -Calling client-callable function on the server + + -Calling and handling streaming' + _path: /TestHub + _scrollRect: {fileID: 114355870386585004} + _contentRoot: {fileID: 224423515151943592} + _listItemPrefab: {fileID: 114144824129317776, guid: 46bdaff7a8bf5d34da870d286f962c69, + type: 2} + _maxListItemEntries: 100 + _connectButton: {fileID: 114320013680820188} + _closeButton: {fileID: 114183583078306848} +--- !u!114 &114506408585435346 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1207322547963618} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114524161209067524 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1638523814489510} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114531813178463268 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1585822631579854} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Connect +--- !u!114 &114625103025680996 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1711432179471938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114706574573020758 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1433467453266018} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114956094281271480} + m_HandleRect: {fileID: 224180373888628254} + m_Direction: 0 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114825175876677118 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1906484789603984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &114877916617402376 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1906484789603984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114948849694705334 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1318517605042108} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114954403076395410 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1711432179471938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114956094281271480 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1204370757159730} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114986567977301700 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1124105774069684} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!222 &222098563536574056 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1204370757159730} +--- !u!222 &222177808205883476 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1207322547963618} +--- !u!222 &222187423713600754 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1658958313708458} +--- !u!222 &222365384534345472 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1906484789603984} +--- !u!222 &222379790607741942 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1711432179471938} +--- !u!222 &222420943052918922 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1038591687917618} +--- !u!222 &222470408282213616 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1124105774069684} +--- !u!222 &222601760045801886 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1604054296740222} +--- !u!222 &222836652998952764 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1585822631579854} +--- !u!222 &222873375866903268 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1928684845076054} +--- !u!222 &222893879445873518 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1433467453266018} +--- !u!224 &224146000816548192 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1207322547963618} + 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: 224998767821500724} + 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!224 &224180373888628254 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1204370757159730} + 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: 224607326854693534} + 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!224 &224186694450471020 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1928684845076054} + 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: 224984124764780486} + 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!224 &224229808225831666 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1638523814489510} + 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: 224805214121029348} + - {fileID: 224467146834965472} + - {fileID: 224420732470901652} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224276963845286766 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1906484789603984} + 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: 224423515151943592} + m_Father: {fileID: 224467146834965472} + 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!224 &224420732470901652 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1318517605042108} + 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: 224498525384877774} + - {fileID: 224984124764780486} + m_Father: {fileID: 224229808225831666} + 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: 300, y: 0} + m_SizeDelta: {x: 590, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224423515151943592 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1276219903168366} + 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: 224276963845286766} + 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.0000119093675} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!224 &224467146834965472 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1124105774069684} + 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: 224276963845286766} + - {fileID: 224605607142989984} + - {fileID: 224704218053827896} + m_Father: {fileID: 224229808225831666} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224498525384877774 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1711432179471938} + 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: 224781178089306710} + m_Father: {fileID: 224420732470901652} + 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: 162, y: 0} + m_SizeDelta: {x: 314, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224605607142989984 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1433467453266018} + 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: 224607326854693534} + m_Father: {fileID: 224467146834965472} + 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!224 &224607326854693534 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1552607393758952} + 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: 224180373888628254} + m_Father: {fileID: 224605607142989984} + 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!224 &224704218053827896 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1038591687917618} + 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: 224998767821500724} + m_Father: {fileID: 224467146834965472} + 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: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!224 &224781178089306710 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1585822631579854} + 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: 224498525384877774} + 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.5, y: 0.5} +--- !u!224 &224805214121029348 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1658958313708458} + 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: 224229808225831666} + 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.5, y: 0.5} +--- !u!224 &224984124764780486 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1604054296740222} + 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: 224186694450471020} + m_Father: {fileID: 224420732470901652} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224998767821500724 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1867791362833596} + 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: 224146000816548192} + m_Father: {fileID: 224704218053827896} + 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} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/TestHub.prefab.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/TestHub.prefab.meta new file mode 100644 index 000000000..365829077 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/TestHub.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2154ba7d2b87066488d9fb08755ec5a9 +timeCreated: 1571296382 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/TestHubSample.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/TestHubSample.cs new file mode 100644 index 000000000..52daeb04f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/TestHubSample.cs @@ -0,0 +1,242 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE + +using System; +using UnityEngine; +using BestHTTP.SignalRCore; +using BestHTTP.SignalRCore.Encoders; +using UnityEngine.UI; +using BestHTTP.Examples.Helpers; + +namespace BestHTTP.Examples +{ + public enum MyEnum : int + { + None, + One, + Two + } + + public sealed class Metadata + { + public string strData; + public int intData; + public MyEnum myEnum; + } + + // Server side of this example can be found here: + // https://github.com/Benedicht/BestHTTP_DemoSite/blob/master/BestHTTP_DemoSite/Hubs/TestHub.cs + public class TestHubSample : BestHTTP.Examples.Helpers.SampleBase + { +#pragma warning disable 0649 + [SerializeField] + private string _path = "/TestHub"; + + [SerializeField] + private ScrollRect _scrollRect; + + [SerializeField] + private RectTransform _contentRoot; + + [SerializeField] + private TextListItem _listItemPrefab; + + [SerializeField] + private int _maxListItemEntries = 100; + + [SerializeField] + private Button _connectButton; + + [SerializeField] + private Button _closeButton; + +#pragma warning restore + + // Instance of the HubConnection + HubConnection hub; + + protected override void Start() + { + base.Start(); + + SetButtons(true, false); + } + + void OnDestroy() + { + if (hub != null) + hub.StartClose(); + } + + /// + /// GUI button callback + /// + public void OnConnectButton() + { +#if BESTHTTP_SIGNALR_CORE_ENABLE_MESSAGEPACK_CSHARP + try + { + MessagePack.Resolvers.StaticCompositeResolver.Instance.Register( + MessagePack.Resolvers.DynamicEnumAsStringResolver.Instance, + MessagePack.Unity.UnityResolver.Instance, + //MessagePack.Unity.Extension.UnityBlitWithPrimitiveArrayResolver.Instance, + //MessagePack.Resolvers.StandardResolver.Instance, + MessagePack.Resolvers.ContractlessStandardResolver.Instance + ); + + var options = MessagePack.MessagePackSerializerOptions.Standard.WithResolver(MessagePack.Resolvers.StaticCompositeResolver.Instance); + MessagePack.MessagePackSerializer.DefaultOptions = options; + } + catch + { } +#endif + + IProtocol protocol = null; +#if BESTHTTP_SIGNALR_CORE_ENABLE_MESSAGEPACK_CSHARP + protocol = new MessagePackCSharpProtocol(); +#elif BESTHTTP_SIGNALR_CORE_ENABLE_GAMEDEVWARE_MESSAGEPACK + protocol = new MessagePackProtocol(); +#else + protocol = new JsonProtocol(new LitJsonEncoder()); +#endif + + // Crete the HubConnection + hub = new HubConnection(new Uri(base.sampleSelector.BaseURL + this._path), protocol); + + // Optionally add an authenticator + //hub.AuthenticationProvider = new BestHTTP.SignalRCore.Authentication.HeaderAuthenticator(""); + + // Subscribe to hub events + hub.OnConnected += Hub_OnConnected; + hub.OnError += Hub_OnError; + hub.OnClosed += Hub_OnClosed; + + hub.OnTransportEvent += (hub, transport, ev) => AddText(string.Format("Transport({0}) event: {1}", transport.TransportType, ev)); + + // Set up server callable functions + hub.On("Send", (string arg) => AddText(string.Format("On 'Send': '{0}'", arg)).AddLeftPadding(20)); + hub.On("Person", (person) => AddText(string.Format("On 'Person': '{0}'", person)).AddLeftPadding(20)); + hub.On("TwoPersons", (person1, person2) => AddText(string.Format("On 'TwoPersons': '{0}', '{1}'", person1, person2)).AddLeftPadding(20)); + + // And finally start to connect to the server + hub.StartConnect(); + + AddText("StartConnect called"); + + SetButtons(false, false); + } + + /// + /// GUI button callback + /// + public void OnCloseButton() + { + if (this.hub != null) + { + this.hub.StartClose(); + + AddText("StartClose called"); + SetButtons(false, false); + } + } + + + /// + /// This callback is called when the plugin is connected to the server successfully. Messages can be sent to the server after this point. + /// + private void Hub_OnConnected(HubConnection hub) + { + SetButtons(false, true); + AddText(string.Format("Hub Connected with {0} transport using the {1} encoder.", hub.Transport.TransportType.ToString(), hub.Protocol.Name)); + + hub.Send("SendMetadata", new Metadata() { intData = 123, strData = "meta data", myEnum = MyEnum.One }); + + // Call a server function with a string param. We expect no return value. + hub.Send("Send", "my message"); + + // Call a parameterless function. We expect a string return value. + hub.Invoke("NoParam") + .OnSuccess(ret => AddText(string.Format("'NoParam' returned: '{0}'", ret)).AddLeftPadding(20)) + .OnError(error => AddText(string.Format("'NoParam' error: '{0}'", error)).AddLeftPadding(20)); + + // Call a function on the server to add two numbers. OnSuccess will be called with the result and OnError if there's an error. + hub.Invoke("Add", 10, 20) + .OnSuccess(result => AddText(string.Format("'Add(10, 20)' returned: '{0}'", result)).AddLeftPadding(20)) + .OnError(error => AddText(string.Format("'Add(10, 20)' error: '{0}'", error)).AddLeftPadding(20)); + + hub.Invoke("NullableTest", 10) + .OnSuccess(result => AddText(string.Format("'NullableTest(10)' returned: '{0}'", result)).AddLeftPadding(20)) + .OnError(error => AddText(string.Format("'NullableTest(10)' error: '{0}'", error)).AddLeftPadding(20)); + + // Call a function that will return a Person object constructed from the function's parameters. + hub.Invoke("GetPerson", "Mr. Smith", 26) + .OnSuccess(result => AddText(string.Format("'GetPerson(\"Mr. Smith\", 26)' returned: '{0}'", result)).AddLeftPadding(20)) + .OnError(error => AddText(string.Format("'GetPerson(\"Mr. Smith\", 26)' error: '{0}'", error)).AddLeftPadding(20)); + + // To test errors/exceptions this call always throws an exception on the server side resulting in an OnError call. + // OnError expected here! + hub.Invoke("SingleResultFailure", 10, 20) + .OnSuccess(result => AddText(string.Format("'SingleResultFailure(10, 20)' returned: '{0}'", result)).AddLeftPadding(20)) + .OnError(error => AddText(string.Format("'SingleResultFailure(10, 20)' error: '{0}'", error)).AddLeftPadding(20)); + + // This call demonstrates IEnumerable<> functions, result will be the yielded numbers. + hub.Invoke("Batched", 10) + .OnSuccess(result => AddText(string.Format("'Batched(10)' returned items: '{0}'", result.Length)).AddLeftPadding(20)) + .OnError(error => AddText(string.Format("'Batched(10)' error: '{0}'", error)).AddLeftPadding(20)); + + // OnItem is called for a streaming request for every items returned by the server. OnSuccess will still be called with all the items. + hub.GetDownStreamController("ObservableCounter", 10, 1000) + .OnItem(result => AddText(string.Format("'ObservableCounter(10, 1000)' OnItem: '{0}'", result)).AddLeftPadding(20)) + .OnSuccess(result => AddText("'ObservableCounter(10, 1000)' OnSuccess.").AddLeftPadding(20)) + .OnError(error => AddText(string.Format("'ObservableCounter(10, 1000)' error: '{0}'", error)).AddLeftPadding(20)); + + // A stream request can be cancelled any time. + var controller = hub.GetDownStreamController("ChannelCounter", 10, 1000); + + controller.OnItem(result => AddText(string.Format("'ChannelCounter(10, 1000)' OnItem: '{0}'", result)).AddLeftPadding(20)) + .OnSuccess(result => AddText("'ChannelCounter(10, 1000)' OnSuccess.").AddLeftPadding(20)) + .OnError(error => AddText(string.Format("'ChannelCounter(10, 1000)' error: '{0}'", error)).AddLeftPadding(20)); + + // a stream can be cancelled by calling the controller's Cancel method + controller.Cancel(); + + // This call will stream strongly typed objects + hub.GetDownStreamController("GetRandomPersons", 20, 2000) + .OnItem(result => AddText(string.Format("'GetRandomPersons(20, 1000)' OnItem: '{0}'", result)).AddLeftPadding(20)) + .OnSuccess(result => AddText("'GetRandomPersons(20, 1000)' OnSuccess.").AddLeftPadding(20)); + } + + /// + /// This is called when the hub is closed after a StartClose() call. + /// + private void Hub_OnClosed(HubConnection hub) + { + SetButtons(true, false); + AddText("Hub Closed"); + } + + /// + /// Called when an unrecoverable error happen. After this event the hub will not send or receive any messages. + /// + private void Hub_OnError(HubConnection hub, string error) + { + SetButtons(true, false); + AddText(string.Format("Hub Error: {0}", error)); + } + + private void SetButtons(bool connect, bool close) + { + if (this._connectButton != null) + this._connectButton.interactable = connect; + + if (this._closeButton != null) + this._closeButton.interactable = close; + } + + private TextListItem AddText(string text) + { + return GUIHelper.AddText(this._listItemPrefab, this._contentRoot, text, this._maxListItemEntries, this._scrollRect); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/TestHubSample.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/TestHubSample.cs.meta new file mode 100644 index 000000000..9294af23c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/TestHubSample.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6bd28a72bf1727542937e09ab435abcc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/UploadHub.prefab b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/UploadHub.prefab new file mode 100644 index 000000000..5d0f7621f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/UploadHub.prefab @@ -0,0 +1,1403 @@ +%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: 1012589405933502} + m_IsPrefabParent: 1 +--- !u!1 &1012589405933502 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224739682574354738} + - component: {fileID: 114177535858917610} + - component: {fileID: 114114069069352014} + m_Layer: 5 + m_Name: UploadHub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1029481322518128 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224107019381656496} + - component: {fileID: 114491805910644320} + - component: {fileID: 114150913102649220} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1260464518543696 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224965156149091532} + - component: {fileID: 222250684875116258} + - component: {fileID: 114450804666726356} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1264112311664550 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224310661174683242} + - component: {fileID: 114555912648358100} + - component: {fileID: 222144198051284496} + - component: {fileID: 114569854759175960} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1452882047488758 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224649537471901866} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1481237159677806 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224075993382887692} + - component: {fileID: 222389971349761024} + - component: {fileID: 114546508874625802} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1507455837837476 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224220857953745950} + - component: {fileID: 222569379215627262} + - component: {fileID: 114891724530867888} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1548490582827578 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224399180939295178} + - component: {fileID: 222105343338479472} + - component: {fileID: 114980696364417958} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1575419854521562 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224241472967518328} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1676388486754422 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224354947169822968} + - component: {fileID: 222581476354584718} + - component: {fileID: 114746753939013198} + - component: {fileID: 114456758249993144} + - component: {fileID: 114543997890592386} + - component: {fileID: 114147476434816728} + m_Layer: 5 + m_Name: Connect Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1802430317120118 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224744735087177256} + - component: {fileID: 222435880252247812} + - component: {fileID: 114174044859678992} + - component: {fileID: 114047900595340642} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1804605035049532 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224504750195978060} + - component: {fileID: 222193944637554542} + - component: {fileID: 114106286658789386} + - component: {fileID: 114574600643184498} + m_Layer: 5 + m_Name: Scrollbar Horizontal + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1836862433471532 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224289628255718770} + - component: {fileID: 114079576131259290} + - component: {fileID: 222405008314576190} + - component: {fileID: 114400702004048876} + - component: {fileID: 114519075202939918} + m_Layer: 5 + m_Name: Scroll View + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1838146512584848 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224580192783343396} + - component: {fileID: 222719253818170184} + - component: {fileID: 114774633683276242} + - component: {fileID: 114425184314771934} + m_Layer: 5 + m_Name: Close Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1849363364819022 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224766593985307040} + - component: {fileID: 222241081526670174} + - component: {fileID: 114059348323046684} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1912703151710560 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224702851315474208} + - component: {fileID: 114955227990898612} + - component: {fileID: 114762554793007942} + - component: {fileID: 114548318355024764} + m_Layer: 5 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114047900595340642 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1802430317120118} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114980696364417958} + m_HandleRect: {fileID: 224399180939295178} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114059348323046684 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1849363364819022} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114079576131259290 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1836862433471532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 224107019381656496} + m_Horizontal: 1 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 0 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 10 + m_Viewport: {fileID: 224310661174683242} + m_HorizontalScrollbar: {fileID: 114574600643184498} + m_VerticalScrollbar: {fileID: 114047900595340642} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114106286658789386 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1804605035049532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114114069069352014 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1012589405933502} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c462c96cbe15002418d1e7a4850a1bb1, type: 3} + m_Name: + m_EditorClassIdentifier: + Category: SignalR Core + DisplayName: Upload + Description: This sample demonstrates client -> server streaming capabilities introduced + in asp.net core 3. + _path: /uploading + _scrollRect: {fileID: 114079576131259290} + _contentRoot: {fileID: 224107019381656496} + _listItemPrefab: {fileID: 114144824129317776, guid: 46bdaff7a8bf5d34da870d286f962c69, + type: 2} + _maxListItemEntries: 100 + _connectButton: {fileID: 114456758249993144} + _closeButton: {fileID: 114425184314771934} + _yieldWaitTime: 1 +--- !u!114 &114147476434816728 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1676388486754422} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114150913102649220 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1029481322518128} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114174044859678992 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1802430317120118} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114177535858917610 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1012589405933502} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114400702004048876 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1836862433471532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114425184314771934 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1838146512584848} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114774633683276242} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114114069069352014} + m_MethodName: OnCloseButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114450804666726356 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1260464518543696} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Connect +--- !u!114 &114456758249993144 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1676388486754422} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114746753939013198} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114114069069352014} + m_MethodName: OnConnectButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114491805910644320 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1029481322518128} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, 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: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114519075202939918 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1836862433471532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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!114 &114543997890592386 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1676388486754422} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114546508874625802 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1481237159677806} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Close +--- !u!114 &114548318355024764 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1912703151710560} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114555912648358100 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1264112311664550} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &114569854759175960 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1264112311664550} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114574600643184498 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1804605035049532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114059348323046684} + m_HandleRect: {fileID: 224766593985307040} + m_Direction: 0 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114746753939013198 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1676388486754422} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114762554793007942 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1912703151710560} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114774633683276242 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1838146512584848} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114891724530867888 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1507455837837476} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Upload +--- !u!114 &114955227990898612 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1912703151710560} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114980696364417958 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1548490582827578} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!222 &222105343338479472 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1548490582827578} +--- !u!222 &222144198051284496 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1264112311664550} +--- !u!222 &222193944637554542 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1804605035049532} +--- !u!222 &222241081526670174 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1849363364819022} +--- !u!222 &222250684875116258 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1260464518543696} +--- !u!222 &222389971349761024 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1481237159677806} +--- !u!222 &222405008314576190 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1836862433471532} +--- !u!222 &222435880252247812 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1802430317120118} +--- !u!222 &222569379215627262 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1507455837837476} +--- !u!222 &222581476354584718 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1676388486754422} +--- !u!222 &222719253818170184 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1838146512584848} +--- !u!224 &224075993382887692 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1481237159677806} + 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: 224580192783343396} + 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!224 &224107019381656496 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1029481322518128} + 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: 224310661174683242} + 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.0000119093675} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!224 &224220857953745950 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1507455837837476} + 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: 224739682574354738} + 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.5, y: 0.5} +--- !u!224 &224241472967518328 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1575419854521562} + 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: 224399180939295178} + m_Father: {fileID: 224744735087177256} + 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!224 &224289628255718770 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1836862433471532} + 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: 224310661174683242} + - {fileID: 224504750195978060} + - {fileID: 224744735087177256} + m_Father: {fileID: 224739682574354738} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224310661174683242 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1264112311664550} + 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: 224107019381656496} + m_Father: {fileID: 224289628255718770} + 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!224 &224354947169822968 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1676388486754422} + 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: 224965156149091532} + m_Father: {fileID: 224702851315474208} + 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: 162, y: 0} + m_SizeDelta: {x: 314, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224399180939295178 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1548490582827578} + 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: 224241472967518328} + 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!224 &224504750195978060 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1804605035049532} + 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: 224649537471901866} + m_Father: {fileID: 224289628255718770} + 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!224 &224580192783343396 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1838146512584848} + 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: 224075993382887692} + m_Father: {fileID: 224702851315474208} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224649537471901866 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1452882047488758} + 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: 224766593985307040} + m_Father: {fileID: 224504750195978060} + 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!224 &224702851315474208 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1912703151710560} + 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: 224354947169822968} + - {fileID: 224580192783343396} + m_Father: {fileID: 224739682574354738} + 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: 300, y: 0} + m_SizeDelta: {x: 590, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224739682574354738 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1012589405933502} + 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: 224220857953745950} + - {fileID: 224289628255718770} + - {fileID: 224702851315474208} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224744735087177256 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1802430317120118} + 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: 224241472967518328} + m_Father: {fileID: 224289628255718770} + 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: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!224 &224766593985307040 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1849363364819022} + 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: 224649537471901866} + 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!224 &224965156149091532 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1260464518543696} + 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: 224354947169822968} + 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.5, y: 0.5} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/UploadHub.prefab.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/UploadHub.prefab.meta new file mode 100644 index 000000000..da544e316 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/UploadHub.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6032521efbf4f0c42b28c89f5a9de5ed +timeCreated: 1571296496 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/UploadHubSample.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/UploadHubSample.cs new file mode 100644 index 000000000..c81549cf7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/UploadHubSample.cs @@ -0,0 +1,404 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE + +using BestHTTP; +using BestHTTP.Examples.Helpers; +using BestHTTP.SignalRCore; +using BestHTTP.SignalRCore.Encoders; + +using System; +using System.Collections; + +using UnityEngine; +using UnityEngine.UI; + +namespace BestHTTP.Examples +{ + /// + /// This sample demonstrates redirection capabilities. The server will redirect a few times the client before + /// routing it to the final endpoint. + /// + public sealed class UploadHubSample : BestHTTP.Examples.Helpers.SampleBase + { +#pragma warning disable 0649 + + [SerializeField] + private string _path = "/uploading"; + + [SerializeField] + private ScrollRect _scrollRect; + + [SerializeField] + private RectTransform _contentRoot; + + [SerializeField] + private TextListItem _listItemPrefab; + + [SerializeField] + private int _maxListItemEntries = 100; + + [SerializeField] + private Button _connectButton; + + [SerializeField] + private Button _closeButton; + + [SerializeField] + private float _yieldWaitTime = 0.1f; + +#pragma warning restore + + // Instance of the HubConnection + private HubConnection hub; + + protected override void Start() + { + base.Start(); + + SetButtons(true, false); + } + + void OnDestroy() + { + if (hub != null) + { + hub.StartClose(); + } + } + + public void OnConnectButton() + { +#if BESTHTTP_SIGNALR_CORE_ENABLE_MESSAGEPACK_CSHARP + try + { + MessagePack.Resolvers.StaticCompositeResolver.Instance.Register( + MessagePack.Resolvers.DynamicEnumAsStringResolver.Instance, + MessagePack.Unity.UnityResolver.Instance, + //MessagePack.Unity.Extension.UnityBlitWithPrimitiveArrayResolver.Instance, + //MessagePack.Resolvers.StandardResolver.Instance, + MessagePack.Resolvers.ContractlessStandardResolver.Instance + ); + + var options = MessagePack.MessagePackSerializerOptions.Standard.WithResolver(MessagePack.Resolvers.StaticCompositeResolver.Instance); + MessagePack.MessagePackSerializer.DefaultOptions = options; + } + catch + { } +#endif + + IProtocol protocol = null; +#if BESTHTTP_SIGNALR_CORE_ENABLE_MESSAGEPACK_CSHARP + protocol = new MessagePackCSharpProtocol(); +#elif BESTHTTP_SIGNALR_CORE_ENABLE_GAMEDEVWARE_MESSAGEPACK + protocol = new MessagePackProtocol(); +#else + protocol = new JsonProtocol(new LitJsonEncoder()); +#endif + + // Crete the HubConnection + hub = new HubConnection(new Uri(this.sampleSelector.BaseURL + this._path), protocol); + + // Subscribe to hub events + hub.OnConnected += Hub_OnConnected; + hub.OnError += Hub_OnError; + hub.OnClosed += Hub_OnClosed; + + hub.OnRedirected += Hub_Redirected; + + hub.OnTransportEvent += (hub, transport, ev) => AddText(string.Format("Transport({0}) event: {1}", transport.TransportType, ev)); + + // And finally start to connect to the server + hub.StartConnect(); + + AddText("StartConnect called"); + + SetButtons(false, false); + } + + public void OnCloseButton() + { + if (this.hub != null) + { + this.hub.StartClose(); + + AddText("StartClose called"); + SetButtons(false, false); + } + } + + private void Hub_Redirected(HubConnection hub, Uri oldUri, Uri newUri) + { + AddText(string.Format("Hub connection redirected to '{0}'!", hub.Uri)); + } + + /// + /// This callback is called when the plugin is connected to the server successfully. Messages can be sent to the server after this point. + /// + private void Hub_OnConnected(HubConnection hub) + { + AddText(string.Format("Hub Connected with {0} transport using the {1} encoder.", hub.Transport.TransportType.ToString(), hub.Protocol.Name)); + + StartCoroutine(UploadWord()); + + SetButtons(false, true); + } + + private IEnumerator UploadWord() + { + AddText("UploadWord:"); + + var controller = hub.GetUpStreamController("UploadWord"); + controller.OnSuccess(result => + { + AddText(string.Format("UploadWord completed, result: '{0}'", result)) + .AddLeftPadding(20); + AddText(""); + + StartCoroutine(ScoreTracker()); + }); + + yield return new WaitForSeconds(_yieldWaitTime); + controller.UploadParam("Hello "); + + AddText("'Hello ' uploaded!") + .AddLeftPadding(20); + + yield return new WaitForSeconds(_yieldWaitTime); + controller.UploadParam("World"); + + AddText("'World' uploaded!") + .AddLeftPadding(20); + + yield return new WaitForSeconds(_yieldWaitTime); + controller.UploadParam("!!"); + + AddText("'!!' uploaded!") + .AddLeftPadding(20); + + yield return new WaitForSeconds(_yieldWaitTime); + + controller.Finish(); + + AddText("Sent upload finished message.") + .AddLeftPadding(20); + + yield return new WaitForSeconds(_yieldWaitTime); + } + + private IEnumerator ScoreTracker() + { + AddText("ScoreTracker:"); + var controller = hub.GetUpStreamController("ScoreTracker"); + + controller.OnSuccess(result => + { + AddText(string.Format("ScoreTracker completed, result: '{0}'", result)) + .AddLeftPadding(20); + AddText(""); + + StartCoroutine(ScoreTrackerWithParameterChannels()); + }); + + const int numScores = 5; + for (int i = 0; i < numScores; i++) + { + yield return new WaitForSeconds(_yieldWaitTime); + + int p1 = UnityEngine.Random.Range(0, 10); + int p2 = UnityEngine.Random.Range(0, 10); + controller.UploadParam(p1, p2); + + AddText(string.Format("Score({0}/{1}) uploaded! p1's score: {2} p2's score: {3}", i + 1, numScores, p1, p2)) + .AddLeftPadding(20); + } + + yield return new WaitForSeconds(_yieldWaitTime); + controller.Finish(); + + AddText("Sent upload finished message.") + .AddLeftPadding(20); + + yield return new WaitForSeconds(_yieldWaitTime); + } + + private IEnumerator ScoreTrackerWithParameterChannels() + { + AddText("ScoreTracker using upload channels:"); + + using (var controller = hub.GetUpStreamController("ScoreTracker")) + { + controller.OnSuccess(result => + { + AddText(string.Format("ScoreTracker completed, result: '{0}'", result)) + .AddLeftPadding(20); + AddText(""); + + StartCoroutine(StreamEcho()); + }); + + const int numScores = 5; + + // While the server's ScoreTracker has two parameters, we can upload those parameters separately + // So here we + + using (var player1param = controller.GetUploadChannel(0)) + { + for (int i = 0; i < numScores; i++) + { + yield return new WaitForSeconds(_yieldWaitTime); + + int score = UnityEngine.Random.Range(0, 10); + player1param.Upload(score); + + AddText(string.Format("Player 1's score({0}/{1}) uploaded! Score: {2}", i + 1, numScores, score)) + .AddLeftPadding(20); + } + } + + AddText(""); + + using (var player2param = controller.GetUploadChannel(1)) + { + for (int i = 0; i < numScores; i++) + { + yield return new WaitForSeconds(_yieldWaitTime); + + int score = UnityEngine.Random.Range(0, 10); + player2param.Upload(score); + + AddText(string.Format("Player 2's score({0}/{1}) uploaded! Score: {2}", i + 1, numScores, score)) + .AddLeftPadding(20); + } + } + + AddText("All scores uploaded!") + .AddLeftPadding(20); + } + yield return new WaitForSeconds(_yieldWaitTime); + } + + private IEnumerator StreamEcho() + { + AddText("StreamEcho:"); + using (var controller = hub.GetUpAndDownStreamController("StreamEcho")) + { + controller.OnSuccess(result => + { + AddText("StreamEcho completed!") + .AddLeftPadding(20); + AddText(""); + + StartCoroutine(PersonEcho()); + }); + + controller.OnItem(item => + { + AddText(string.Format("Received from server: '{0}'", item)) + .AddLeftPadding(20); + }); + + const int numMessages = 5; + for (int i = 0; i < numMessages; i++) + { + yield return new WaitForSeconds(_yieldWaitTime); + + string message = string.Format("Message from client {0}/{1}", i + 1, numMessages); + controller.UploadParam(message); + + AddText(string.Format("Sent message to the server: {0}", message)) + .AddLeftPadding(20); + } + + yield return new WaitForSeconds(_yieldWaitTime); + } + + AddText("Upload finished!") + .AddLeftPadding(20); + + yield return new WaitForSeconds(_yieldWaitTime); + } + + /// + /// This is basically the same as the previous StreamEcho, but it's streaming a complex object (Person + /// + private IEnumerator PersonEcho() + { + AddText("PersonEcho:"); + + using (var controller = hub.GetUpAndDownStreamController("PersonEcho")) + { + controller.OnSuccess(result => + { + AddText("PersonEcho completed!") + .AddLeftPadding(20); + AddText(""); + AddText("All Done!"); + }); + + controller.OnItem(item => + { + AddText(string.Format("Received from server: '{0}'", item)) + .AddLeftPadding(20); + }); + + const int numMessages = 5; + for (int i = 0; i < numMessages; i++) + { + yield return new WaitForSeconds(_yieldWaitTime); + + Person person = new Person() + { + Name = "Mr. Smith", + Age = 20 + i * 2 + }; + + controller.UploadParam(person); + + AddText(string.Format("Sent person to the server: {0}", person)) + .AddLeftPadding(20); + } + + yield return new WaitForSeconds(_yieldWaitTime); + } + AddText("Upload finished!") + .AddLeftPadding(20); + + yield return new WaitForSeconds(_yieldWaitTime); + } + + /// + /// This is called when the hub is closed after a StartClose() call. + /// + private void Hub_OnClosed(HubConnection hub) + { + AddText("Hub Closed"); + + SetButtons(true, false); + } + + /// + /// Called when an unrecoverable error happen. After this event the hub will not send or receive any messages. + /// + private void Hub_OnError(HubConnection hub, string error) + { + AddText(string.Format("Hub Error: {0}", error)); + + SetButtons(true, false); + } + + private void SetButtons(bool connect, bool close) + { + if (this._connectButton != null) + this._connectButton.interactable = connect; + + if (this._closeButton != null) + this._closeButton.interactable = close; + } + + private TextListItem AddText(string text) + { + return GUIHelper.AddText(this._listItemPrefab, this._contentRoot, text, this._maxListItemEntries, this._scrollRect); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/UploadHubSample.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/UploadHubSample.cs.meta new file mode 100644 index 000000000..b1f270bae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SignalRCore/UploadHubSample.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c462c96cbe15002418d1e7a4850a1bb1 +timeCreated: 1548919763 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO.meta new file mode 100644 index 000000000..b0126f65e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6d952d96253d7454992111c6a4116837 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIO Json Encoders.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIO Json Encoders.meta new file mode 100644 index 000000000..fee3b7a7e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIO Json Encoders.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 745fcd55afb34e4429897e798738aebd +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIO Json Encoders/JsonDotNetEncoder.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIO Json Encoders/JsonDotNetEncoder.cs new file mode 100644 index 000000000..ca7b45bcf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIO Json Encoders/JsonDotNetEncoder.cs @@ -0,0 +1,27 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System; +using System.Collections.Generic; + +namespace BestHTTP.SocketIO.JsonEncoders +{ + /*using Newtonsoft.Json; + + /// + /// This class uses Newtonsoft's Json encoder (JSON .NET For Unity - http://u3d.as/5q2). + /// + public sealed class JsonDotNetEncoder : IJsonEncoder + { + public List Decode(string json) + { + return JsonConvert.DeserializeObject>(json); + } + + public string Encode(List obj) + { + return JsonConvert.SerializeObject(obj); + } + }*/ +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIO Json Encoders/JsonDotNetEncoder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIO Json Encoders/JsonDotNetEncoder.cs.meta new file mode 100644 index 000000000..beac1f274 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIO Json Encoders/JsonDotNetEncoder.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c2d9c71662df0b641980b51cd68443fa +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIO Json Encoders/LitJsonEncoder.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIO Json Encoders/LitJsonEncoder.cs new file mode 100644 index 000000000..d0e09ab2a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIO Json Encoders/LitJsonEncoder.cs @@ -0,0 +1,30 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System.Collections.Generic; + +using BestHTTP.JSON.LitJson; + +namespace BestHTTP.SocketIO.JsonEncoders +{ + /// + /// This IJsonEncoder implementation uses the LitJson library located in the Examples\LitJson directory. + /// + public sealed class LitJsonEncoder : IJsonEncoder + { + public List Decode(string json) + { + JsonReader reader = new JsonReader(json); + return JsonMapper.ToObject>(reader); + } + + public string Encode(List obj) + { + JsonWriter writer = new JsonWriter(); + JsonMapper.ToJson(obj, writer); + + return writer.ToString(); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIO Json Encoders/LitJsonEncoder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIO Json Encoders/LitJsonEncoder.cs.meta new file mode 100644 index 000000000..b79cb9ca4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIO Json Encoders/LitJsonEncoder.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0329bd6a6be04394b9da7576fc41d1dc +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIOChat.prefab b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIOChat.prefab new file mode 100644 index 000000000..119ad2449 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIOChat.prefab @@ -0,0 +1,2559 @@ +%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: 1751351768554098} + m_IsPrefabParent: 1 +--- !u!1 &1000902892011214 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224790219579874880} + - component: {fileID: 222376261405891914} + - component: {fileID: 114581125236570918} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1035235965106544 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224741301118981304} + - component: {fileID: 222571976232846778} + - component: {fileID: 114964544781891738} + - component: {fileID: 114607270707498424} + m_Layer: 5 + m_Name: Close Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1114611047349812 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224841852409200590} + - component: {fileID: 222743774640263572} + - component: {fileID: 114397545370846732} + - component: {fileID: 114100637061327060} + - component: {fileID: 114870053156098536} + m_Layer: 5 + m_Name: Username InputField + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1157748782576716 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224892074867376450} + - component: {fileID: 222659040671696914} + - component: {fileID: 114267952409505424} + - component: {fileID: 114111407445804830} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1161084759723112 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224307212646100382} + - component: {fileID: 222598753319918020} + - component: {fileID: 114981881761864462} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1172011117352502 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224267982616945168} + - component: {fileID: 222763638610069260} + - component: {fileID: 114615676419907570} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1182148344898766 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224796334695528028} + - component: {fileID: 222089425631183492} + - component: {fileID: 114672880282121114} + - component: {fileID: 114174779575721134} + m_Layer: 5 + m_Name: Scrollbar Horizontal + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1221923060263986 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224488011675182660} + - component: {fileID: 222663195218377462} + - component: {fileID: 114840981145114082} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1237354529908580 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224288845495672020} + - component: {fileID: 222804800082420514} + - component: {fileID: 114780823094611374} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1237762928355744 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224658501671241870} + - component: {fileID: 222943619967414576} + - component: {fileID: 114431322624380924} + - component: {fileID: 114865027837554882} + m_Layer: 5 + m_Name: Participants Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1306119529939792 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224727861648864504} + - component: {fileID: 222490791128095210} + - component: {fileID: 114171063738740756} + - component: {fileID: 114022556067947914} + - component: {fileID: 114509238949135852} + m_Layer: 5 + m_Name: Chat Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1318886489036822 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224685396215346268} + - component: {fileID: 114958808642402278} + - component: {fileID: 222785629068236726} + - component: {fileID: 114609997163896008} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1343827852586498 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224014908287350418} + - component: {fileID: 114579978615778664} + - component: {fileID: 222066767226595232} + - component: {fileID: 114131109826509426} + - component: {fileID: 114490948678604928} + m_Layer: 5 + m_Name: Chatlog + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1353680517664104 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224637103119345230} + - component: {fileID: 222185737726031292} + - component: {fileID: 114335158939318066} + - component: {fileID: 114537212196359646} + - component: {fileID: 114008665970913834} + m_Layer: 5 + m_Name: Login Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1372134842297424 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224822543874155668} + - component: {fileID: 222857438848393300} + - component: {fileID: 114377319990730810} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1401391341103148 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224771728008742042} + - component: {fileID: 222056172104708438} + - component: {fileID: 114304131642843102} + m_Layer: 5 + m_Name: Panel Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1407111218320188 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224651566745406540} + - component: {fileID: 222771821937408054} + - component: {fileID: 114505225708959694} + - component: {fileID: 114289657439883708} + m_Layer: 5 + m_Name: Typing Users + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1437037241821198 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224189678256422720} + - component: {fileID: 222362166004426338} + - component: {fileID: 114760470429517008} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1530841689100396 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224797542323421204} + - component: {fileID: 222875866776365720} + - component: {fileID: 114391194379739302} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1577733906986086 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224416714184855066} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1601628890107290 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224927639337198130} + - component: {fileID: 114664065782226206} + - component: {fileID: 114685289859116568} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1629215432233352 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224066271721193456} + - component: {fileID: 222016605036489860} + - component: {fileID: 114504307456312666} + - component: {fileID: 114950932547626642} + - component: {fileID: 114088548275924710} + m_Layer: 5 + m_Name: InputField + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1694384428780698 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224939546364297946} + - component: {fileID: 222388115238317846} + - component: {fileID: 114302151222902426} + - component: {fileID: 114044782497920138} + - component: {fileID: 114728038557382156} + - component: {fileID: 114258833420816122} + m_Layer: 5 + m_Name: Connect Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1751351768554098 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224712458259988944} + - component: {fileID: 114077523688739936} + - component: {fileID: 114813536588770448} + m_Layer: 5 + m_Name: SocketIOChat + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1752022363910074 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224623456240133262} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1832031479555468 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224105625305098426} + - component: {fileID: 114857716633083218} + - component: {fileID: 114631676187194180} + - component: {fileID: 114586299388036644} + m_Layer: 5 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1978404362546798 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224790476831961686} + - component: {fileID: 222052866005703648} + - component: {fileID: 114752222364265030} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114008665970913834 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1353680517664104} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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!114 &114022556067947914 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1306119529939792} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114044782497920138 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1694384428780698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114302151222902426} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114813536588770448} + m_MethodName: OnConnectButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114077523688739936 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1751351768554098} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114088548275924710 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1629215432233352} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: 30 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: 0 + m_LayoutPriority: 1 +--- !u!114 &114100637061327060 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1114611047349812} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 575553740, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114397545370846732} + m_TextComponent: {fileID: 114752222364265030} + m_Placeholder: {fileID: 114391194379739302} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114813536588770448} + m_MethodName: OnUserNameInputSubmit + m_Mode: 0 + 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_TypeName: UnityEngine.UI.InputField+SubmitEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_OnValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114813536588770448} + m_MethodName: OnUserNameInputChanged + m_Mode: 0 + 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_TypeName: UnityEngine.UI.InputField+OnChangeEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114111407445804830 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1157748782576716} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114760470429517008} + m_HandleRect: {fileID: 224189678256422720} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114131109826509426 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1343827852586498} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114171063738740756 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1306119529939792} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114174779575721134 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1182148344898766} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114780823094611374} + m_HandleRect: {fileID: 224288845495672020} + m_Direction: 0 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114258833420816122 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1694384428780698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114267952409505424 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1157748782576716} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114289657439883708 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1407111218320188} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114302151222902426 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1694384428780698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114304131642843102 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1401391341103148} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Login details +--- !u!114 &114335158939318066 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1353680517664104} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114377319990730810 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1372134842297424} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Enter text... +--- !u!114 &114391194379739302 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1530841689100396} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Enter your username... +--- !u!114 &114397545370846732 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1114611047349812} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114431322624380924 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1237762928355744} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!114 &114490948678604928 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1343827852586498} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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!114 &114504307456312666 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1629215432233352} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114505225708959694 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1407111218320188} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!114 &114509238949135852 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1306119529939792} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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!114 &114537212196359646 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1353680517664104} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114579978615778664 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1343827852586498} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 224927639337198130} + m_Horizontal: 1 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 0 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 10 + m_Viewport: {fileID: 224685396215346268} + m_HorizontalScrollbar: {fileID: 114174779575721134} + m_VerticalScrollbar: {fileID: 114111407445804830} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114581125236570918 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000902892011214} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Connect +--- !u!114 &114586299388036644 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1832031479555468} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114607270707498424 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1035235965106544} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114964544781891738} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114813536588770448} + m_MethodName: OnCloseButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114609997163896008 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1318886489036822} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114615676419907570 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1172011117352502} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!114 &114631676187194180 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1832031479555468} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114664065782226206 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1601628890107290} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, 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: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114672880282121114 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1182148344898766} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114685289859116568 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1601628890107290} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114728038557382156 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1694384428780698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114752222364265030 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1978404362546798} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!114 &114760470429517008 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1437037241821198} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114780823094611374 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1237354529908580} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114813536588770448 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1751351768554098} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: feaffc82c9b6aa54ba0e8bf6572d279e, type: 3} + m_Name: + m_EditorClassIdentifier: + Category: Socket.IO + DisplayName: Chat + Description: 'This example uses the Socket.IO implementation to connect to the official + Chat demo server(http://chat.socket.io/). + + + Features demoed in this example: + + -Instantiating and setting up a SocketManager to connect to a Socket.IO server + + -Changing SocketOptions property + + -Subscribing to Socket.IO events + + -Sending custom events to the server' + BannedPlatforms: + address: https://socketio-chat-h9jt.herokuapp.com/socket.io/ + _loginRoot: {fileID: 224637103119345230} + _userNameInput: {fileID: 114100637061327060} + _chatRoot: {fileID: 224727861648864504} + _participantsText: {fileID: 114431322624380924} + _scrollRect: {fileID: 114579978615778664} + _contentRoot: {fileID: 224927639337198130} + _listItemPrefab: {fileID: 114144824129317776, guid: 46bdaff7a8bf5d34da870d286f962c69, + type: 2} + _maxListItemEntries: 100 + _typingUsersText: {fileID: 114505225708959694} + _input: {fileID: 114950932547626642} + _connectButton: {fileID: 114044782497920138} + _closeButton: {fileID: 114607270707498424} +--- !u!114 &114840981145114082 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1221923060263986} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Socket.IO Chat Example +--- !u!114 &114857716633083218 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1832031479555468} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114865027837554882 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1237762928355744} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!114 &114870053156098536 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1114611047349812} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: 30 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &114950932547626642 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1629215432233352} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 575553740, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 0 + m_TargetGraphic: {fileID: 114504307456312666} + m_TextComponent: {fileID: 114615676419907570} + m_Placeholder: {fileID: 114377319990730810} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114813536588770448} + m_MethodName: OnMessageInput + m_Mode: 0 + 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_TypeName: UnityEngine.UI.InputField+SubmitEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_OnValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114813536588770448} + m_MethodName: UpdateTyping + m_Mode: 0 + 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_TypeName: UnityEngine.UI.InputField+OnChangeEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114958808642402278 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1318886489036822} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &114964544781891738 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1035235965106544} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114981881761864462 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1161084759723112} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Close +--- !u!222 &222016605036489860 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1629215432233352} +--- !u!222 &222052866005703648 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1978404362546798} +--- !u!222 &222056172104708438 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1401391341103148} +--- !u!222 &222066767226595232 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1343827852586498} +--- !u!222 &222089425631183492 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1182148344898766} +--- !u!222 &222185737726031292 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1353680517664104} +--- !u!222 &222362166004426338 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1437037241821198} +--- !u!222 &222376261405891914 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000902892011214} +--- !u!222 &222388115238317846 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1694384428780698} +--- !u!222 &222490791128095210 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1306119529939792} +--- !u!222 &222571976232846778 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1035235965106544} +--- !u!222 &222598753319918020 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1161084759723112} +--- !u!222 &222659040671696914 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1157748782576716} +--- !u!222 &222663195218377462 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1221923060263986} +--- !u!222 &222743774640263572 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1114611047349812} +--- !u!222 &222763638610069260 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1172011117352502} +--- !u!222 &222771821937408054 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1407111218320188} +--- !u!222 &222785629068236726 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1318886489036822} +--- !u!222 &222804800082420514 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1237354529908580} +--- !u!222 &222857438848393300 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1372134842297424} +--- !u!222 &222875866776365720 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1530841689100396} +--- !u!222 &222943619967414576 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1237762928355744} +--- !u!224 &224014908287350418 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1343827852586498} + 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: 224685396215346268} + - {fileID: 224796334695528028} + - {fileID: 224892074867376450} + m_Father: {fileID: 224727861648864504} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224066271721193456 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1629215432233352} + 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: 224822543874155668} + - {fileID: 224267982616945168} + m_Father: {fileID: 224712458259988944} + m_RootOrder: 4 + 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!224 &224105625305098426 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1832031479555468} + 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: 224939546364297946} + - {fileID: 224741301118981304} + m_Father: {fileID: 224712458259988944} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 300, y: 0} + m_SizeDelta: {x: 590, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224189678256422720 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1437037241821198} + 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: 224416714184855066} + 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!224 &224267982616945168 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1172011117352502} + 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: 224066271721193456} + m_RootOrder: 1 + 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!224 &224288845495672020 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1237354529908580} + 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: 224623456240133262} + 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!224 &224307212646100382 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1161084759723112} + 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: 224741301118981304} + 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!224 &224416714184855066 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1577733906986086} + 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: 224189678256422720} + m_Father: {fileID: 224892074867376450} + 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!224 &224488011675182660 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1221923060263986} + 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: 224712458259988944} + 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.5, y: 0.5} +--- !u!224 &224623456240133262 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1752022363910074} + 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: 224288845495672020} + m_Father: {fileID: 224796334695528028} + 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!224 &224637103119345230 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1353680517664104} + 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: 224771728008742042} + - {fileID: 224841852409200590} + m_Father: {fileID: 224712458259988944} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 300, y: -119.75} + m_SizeDelta: {x: 590, y: 188.5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224651566745406540 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1407111218320188} + 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: 224712458259988944} + m_RootOrder: 3 + 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!224 &224658501671241870 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1237762928355744} + 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: 224727861648864504} + 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.5, y: 0.5} +--- !u!224 &224685396215346268 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1318886489036822} + 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: 224927639337198130} + m_Father: {fileID: 224014908287350418} + 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!224 &224712458259988944 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1751351768554098} + 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: 224488011675182660} + - {fileID: 224637103119345230} + - {fileID: 224727861648864504} + - {fileID: 224651566745406540} + - {fileID: 224066271721193456} + - {fileID: 224105625305098426} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224727861648864504 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1306119529939792} + 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: 224658501671241870} + - {fileID: 224014908287350418} + m_Father: {fileID: 224712458259988944} + 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.5, y: 0.5} +--- !u!224 &224741301118981304 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1035235965106544} + 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: 224307212646100382} + m_Father: {fileID: 224105625305098426} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224771728008742042 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1401391341103148} + 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: 224637103119345230} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 295, y: -12.75} + m_SizeDelta: {x: 580, y: 15.5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224790219579874880 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000902892011214} + 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: 224939546364297946} + 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.5, y: 0.5} +--- !u!224 &224790476831961686 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1978404362546798} + 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: 224841852409200590} + m_RootOrder: 1 + 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!224 &224796334695528028 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1182148344898766} + 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: 224623456240133262} + m_Father: {fileID: 224014908287350418} + 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!224 &224797542323421204 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1530841689100396} + 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: 224841852409200590} + 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.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224822543874155668 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1372134842297424} + 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: 224066271721193456} + 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.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224841852409200590 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1114611047349812} + 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: 224797542323421204} + - {fileID: 224790476831961686} + m_Father: {fileID: 224637103119345230} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 295, y: -40.5} + m_SizeDelta: {x: 580, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224892074867376450 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1157748782576716} + 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: 224416714184855066} + m_Father: {fileID: 224014908287350418} + 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: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!224 &224927639337198130 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1601628890107290} + 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: 224685396215346268} + 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!224 &224939546364297946 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1694384428780698} + 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: 224790219579874880} + m_Father: {fileID: 224105625305098426} + 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: 162, y: 0} + m_SizeDelta: {x: 314, y: 0} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIOChat.prefab.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIOChat.prefab.meta new file mode 100644 index 000000000..ad06bf5a3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIOChat.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 539501429708f584e9aad4be18ea9e50 +timeCreated: 1571299108 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIOChatSample.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIOChatSample.cs new file mode 100644 index 000000000..129f60b41 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIOChatSample.cs @@ -0,0 +1,348 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System; +using System.Collections.Generic; + +using UnityEngine; +using BestHTTP.SocketIO; +using UnityEngine.UI; +using BestHTTP.Examples.Helpers; + +namespace BestHTTP.Examples +{ + public sealed class SocketIOChatSample : BestHTTP.Examples.Helpers.SampleBase + { + private readonly TimeSpan TYPING_TIMER_LENGTH = TimeSpan.FromMilliseconds(700); + +#pragma warning disable 0649, 0414 + + [SerializeField] + [Tooltip("The WebSocket address to connect")] + private string address = "https://socketio-chat-h9jt.herokuapp.com/socket.io/"; + + [Header("Login Details")] + [SerializeField] + private RectTransform _loginRoot; + + [SerializeField] + private InputField _userNameInput; + + [Header("Chat Setup")] + + [SerializeField] + private RectTransform _chatRoot; + + [SerializeField] + private Text _participantsText; + + [SerializeField] + private ScrollRect _scrollRect; + + [SerializeField] + private RectTransform _contentRoot; + + [SerializeField] + private TextListItem _listItemPrefab; + + [SerializeField] + private int _maxListItemEntries = 100; + + [SerializeField] + private Text _typingUsersText; + + [SerializeField] + private InputField _input; + + [Header("Buttons")] + + [SerializeField] + private Button _connectButton; + + [SerializeField] + private Button _closeButton; + +#pragma warning restore + + /// + /// The Socket.IO manager instance. + /// + private SocketManager Manager; + + /// + /// True if the user is currently typing + /// + private bool typing; + + /// + /// When the message changed. + /// + private DateTime lastTypingTime = DateTime.MinValue; + + /// + /// Users that typing. + /// + private List typingUsers = new List(); + + #region Unity Events + + protected override void Start() + { + base.Start(); + + this._userNameInput.text = PlayerPrefs.GetString("SocketIOChatSample_UserName"); + SetButtons(!string.IsNullOrEmpty(this._userNameInput.text), false); + SetPanels(true); + } + + void OnDestroy() + { + if (this.Manager != null) + { + // Leaving this sample, close the socket + this.Manager.Close(); + this.Manager = null; + } + } + + public void OnUserNameInputChanged(string userName) + { + SetButtons(!string.IsNullOrEmpty(userName), false); + } + + public void OnUserNameInputSubmit(string userName) + { + if (Input.GetKeyDown(KeyCode.KeypadEnter) || Input.GetKeyDown(KeyCode.Return)) + OnConnectButton(); + } + + public void OnConnectButton() + { + SetPanels(false); + + PlayerPrefs.SetString("SocketIOChatSample_UserName", this._userNameInput.text); + + AddText("Connecting..."); + + // Create the Socket.IO manager + Manager = new SocketManager(new Uri(address)); + + Manager.Socket.On(SocketIOEventTypes.Connect, (s, p, a) => + { + AddText("Connected!"); + + Manager.Socket.Emit("add user", this._userNameInput.text); + this._input.interactable = true; + }); + + Manager.Socket.On(SocketIOEventTypes.Disconnect, (s, p, a) => + { + AddText("Disconnected!"); + + SetPanels(true); + SetButtons(true, false); + }); + + // Set up custom chat events + Manager.Socket.On("login", OnLogin); + Manager.Socket.On("new message", OnNewMessage); + Manager.Socket.On("user joined", OnUserJoined); + Manager.Socket.On("user left", OnUserLeft); + Manager.Socket.On("typing", OnTyping); + Manager.Socket.On("stop typing", OnStopTyping); + + // The argument will be an Error object. + Manager.Socket.On(SocketIOEventTypes.Error, (socket, packet, args) => { + Debug.LogError(string.Format("Error: {0}", args[0].ToString())); + }); + + SetButtons(false, true); + } + + public void OnCloseButton() + { + SetButtons(false, false); + this.Manager.Close(); + } + + void Update() + { + if (typing) + { + var typingTimer = DateTime.UtcNow; + var timeDiff = typingTimer - lastTypingTime; + if (timeDiff >= TYPING_TIMER_LENGTH) + { + Manager.Socket.Emit("stop typing"); + typing = false; + } + } + } + + #endregion + + #region Chat Logic + + public void OnMessageInput(string textToSend) + { + if ((!Input.GetKeyDown(KeyCode.KeypadEnter) && !Input.GetKeyDown(KeyCode.Return)) || string.IsNullOrEmpty(textToSend)) + return; + + Manager.Socket.Emit("new message", textToSend); + + AddText(string.Format("{0}: {1}", this._userNameInput.text, textToSend)); + } + + public void UpdateTyping(string textToSend) + { + if (!typing) + { + typing = true; + Manager.Socket.Emit("typing"); + } + + lastTypingTime = DateTime.UtcNow; + } + + void addParticipantsMessage(Dictionary data) + { + int numUsers = Convert.ToInt32(data["numUsers"]); + + if (numUsers == 1) + this._participantsText.text = "there's 1 participant"; + else + this._participantsText.text = "there are " + numUsers + " participants"; + } + + void addChatMessage(Dictionary data) + { + var username = data["username"] as string; + var msg = data["message"] as string; + + AddText(string.Format("{0}: {1}", username, msg)); + } + + void AddChatTyping(Dictionary data) + { + var username = data["username"] as string; + + int idx = typingUsers.FindIndex((name) => name.Equals(username)); + if (idx == -1) + typingUsers.Add(username); + + SetTypingUsers(); + } + + void RemoveChatTyping(Dictionary data) + { + var username = data["username"] as string; + + int idx = typingUsers.FindIndex((name) => name.Equals(username)); + if (idx != -1) + typingUsers.RemoveAt(idx); + + SetTypingUsers(); + } + + #endregion + + #region Custom SocketIO Events + + void OnLogin(Socket socket, Packet packet, params object[] args) + { + AddText("Welcome to Socket.IO Chat"); + + addParticipantsMessage(args[0] as Dictionary); + } + + void OnNewMessage(Socket socket, Packet packet, params object[] args) + { + addChatMessage(args[0] as Dictionary); + } + + void OnUserJoined(Socket socket, Packet packet, params object[] args) + { + var data = args[0] as Dictionary; + + var username = data["username"] as string; + + AddText(string.Format("{0} joined", username)); + + addParticipantsMessage(data); + } + + void OnUserLeft(Socket socket, Packet packet, params object[] args) + { + var data = args[0] as Dictionary; + + var username = data["username"] as string; + + AddText(string.Format("{0} left", username)); + + addParticipantsMessage(data); + } + + void OnTyping(Socket socket, Packet packet, params object[] args) + { + AddChatTyping(args[0] as Dictionary); + } + + void OnStopTyping(Socket socket, Packet packet, params object[] args) + { + RemoveChatTyping(args[0] as Dictionary); + } + + #endregion + + private void AddText(string text) + { + GUIHelper.AddText(this._listItemPrefab, this._contentRoot, text, this._maxListItemEntries, this._scrollRect); + } + + private void SetTypingUsers() + { + if (this.typingUsers.Count > 0) + { + System.Text.StringBuilder sb = new System.Text.StringBuilder(this.typingUsers[0], this.typingUsers.Count + 1); + + for (int i = 1; i < this.typingUsers.Count; ++i) + sb.AppendFormat(", {0}", this.typingUsers[i]); + + if (this.typingUsers.Count == 1) + sb.Append(" is typing!"); + else + sb.Append(" are typing!"); + + this._typingUsersText.text = sb.ToString(); + } + else + this._typingUsersText.text = string.Empty; + } + + private void SetPanels(bool login) + { + if (login) + { + this._loginRoot.gameObject.SetActive(true); + this._chatRoot.gameObject.SetActive(false); + this._input.interactable = false; + } + else + { + this._loginRoot.gameObject.SetActive(false); + this._chatRoot.gameObject.SetActive(true); + this._input.interactable = true; + } + } + + private void SetButtons(bool connect, bool close) + { + if (this._connectButton != null) + this._connectButton.interactable = connect; + + if (this._closeButton != null) + this._closeButton.interactable = close; + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIOChatSample.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIOChatSample.cs.meta new file mode 100644 index 000000000..c66b94345 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO/SocketIOChatSample.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: feaffc82c9b6aa54ba0e8bf6572d279e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3.meta new file mode 100644 index 000000000..9499337b4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fd283ed6c468fdd40a1bf0917fd8676f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/ChatSample.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/ChatSample.cs new file mode 100644 index 000000000..3ce5d1fc8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/ChatSample.cs @@ -0,0 +1,337 @@ +using System; +using System.Collections.Generic; + +using BestHTTP.Examples.Helpers; +using BestHTTP.SocketIO3; +using BestHTTP.SocketIO3.Events; + +using UnityEngine; +using UnityEngine.UI; + +namespace BestHTTP.Examples.SocketIO3 +{ +#pragma warning disable 0649 + [PlatformSupport.IL2CPP.Preserve] + class LoginData + { + [PlatformSupport.IL2CPP.Preserve] public int numUsers; + } + + [PlatformSupport.IL2CPP.Preserve] + sealed class NewMessageData + { + [PlatformSupport.IL2CPP.Preserve] public string username; + [PlatformSupport.IL2CPP.Preserve] public string message; + } + + [PlatformSupport.IL2CPP.Preserve] + sealed class UserJoinedData : LoginData + { + [PlatformSupport.IL2CPP.Preserve] public string username; + } + + [PlatformSupport.IL2CPP.Preserve] + sealed class TypingData + { + [PlatformSupport.IL2CPP.Preserve] public string username; + } + +#pragma warning restore + + public sealed class ChatSample : BestHTTP.Examples.Helpers.SampleBase + { + private readonly TimeSpan TYPING_TIMER_LENGTH = TimeSpan.FromMilliseconds(700); + +#pragma warning disable 0649, 0414 + + [SerializeField] + [Tooltip("The Socket.IO service address to connect to")] + private string address = "https://socket-io-3-chat-5ae3v.ondigitalocean.app"; + + [Header("Login Details")] + [SerializeField] + private RectTransform _loginRoot; + + [SerializeField] + private InputField _userNameInput; + + [Header("Chat Setup")] + + [SerializeField] + private RectTransform _chatRoot; + + [SerializeField] + private Text _participantsText; + + [SerializeField] + private ScrollRect _scrollRect; + + [SerializeField] + private RectTransform _contentRoot; + + [SerializeField] + private TextListItem _listItemPrefab; + + [SerializeField] + private int _maxListItemEntries = 100; + + [SerializeField] + private Text _typingUsersText; + + [SerializeField] + private InputField _input; + + [Header("Buttons")] + + [SerializeField] + private Button _connectButton; + + [SerializeField] + private Button _closeButton; + +#pragma warning restore + + /// + /// The Socket.IO manager instance. + /// + private SocketManager Manager; + + /// + /// True if the user is currently typing + /// + private bool typing; + + /// + /// When the message changed. + /// + private DateTime lastTypingTime = DateTime.MinValue; + + /// + /// Users that typing. + /// + private List typingUsers = new List(); + + + #region Unity Events + + protected override void Start() + { + base.Start(); + + this._userNameInput.text = PlayerPrefs.GetString("SocketIO3ChatSample_UserName"); + SetButtons(!string.IsNullOrEmpty(this._userNameInput.text), false); + SetPanels(true); + } + + void OnDestroy() + { + if (this.Manager != null) + { + // Leaving this sample, close the socket + this.Manager.Close(); + this.Manager = null; + } + } + + public void OnUserNameInputChanged(string userName) + { + SetButtons(!string.IsNullOrEmpty(userName), false); + } + + public void OnUserNameInputSubmit(string userName) + { + if (Input.GetKeyDown(KeyCode.KeypadEnter) || Input.GetKeyDown(KeyCode.Return)) + OnConnectButton(); + } + + public void UpdateTyping() + { + if (!typing) + { + typing = true; + Manager.Socket.Emit("typing"); + } + + lastTypingTime = DateTime.UtcNow; + } + + public void OnMessageInput(string textToSend) + { + if ((!Input.GetKeyDown(KeyCode.KeypadEnter) && !Input.GetKeyDown(KeyCode.Return)) || string.IsNullOrEmpty(textToSend)) + return; + + Manager.Socket.Emit("new message", textToSend); + + AddText(string.Format("{0}: {1}", this._userNameInput.text, textToSend)); + } + + public void OnConnectButton() + { + SetPanels(false); + + PlayerPrefs.SetString("SocketIO3ChatSample_UserName", this._userNameInput.text); + + AddText("Connecting..."); + + // Create the Socket.IO manager + Manager = new SocketManager(new Uri(this.address)); + + Manager.Socket.On(SocketIOEventTypes.Connect, OnConnected); + Manager.Socket.On(SocketIOEventTypes.Disconnect, OnDisconnected); + + Manager.Socket.On("login", OnLogin); + Manager.Socket.On("new message", OnNewMessage); + Manager.Socket.On("user joined", OnUserJoined); + Manager.Socket.On("user left", OnUserLeft); + Manager.Socket.On("typing", OnTyping); + Manager.Socket.On("stop typing", OnStopTyping); + + SetButtons(false, true); + } + + public void OnCloseButton() + { + SetButtons(false, false); + this.Manager.Close(); + } + + void Update() + { + if (typing) + { + var typingTimer = DateTime.UtcNow; + var timeDiff = typingTimer - lastTypingTime; + if (timeDiff >= TYPING_TIMER_LENGTH) + { + Manager.Socket.Emit("stop typing"); + typing = false; + } + } + } + + #endregion + + #region SocketIO Events + + private void OnConnected(ConnectResponse resp) + { + AddText("Connected! Socket.IO SID: " + resp.sid); + + Manager.Socket.Emit("add user", this._userNameInput.text); + this._input.interactable = true; + } + + private void OnDisconnected() + { + AddText("Disconnected!"); + + SetPanels(true); + SetButtons(true, false); + } + + private void OnLogin(LoginData data) + { + AddText("Welcome to Socket.IO Chat"); + + if (data.numUsers == 1) + this._participantsText.text = "there's 1 participant"; + else + this._participantsText.text = "there are " + data.numUsers + " participants"; + } + + private void OnNewMessage(NewMessageData data) + { + AddText(string.Format("{0}: {1}", data.username, data.message)); + } + + private void OnUserJoined(UserJoinedData data) + { + AddText(string.Format("{0} joined", data.username)); + + if (data.numUsers == 1) + this._participantsText.text = "there's 1 participant"; + else + this._participantsText.text = "there are " + data.numUsers + " participants"; + } + + private void OnUserLeft(UserJoinedData data) + { + AddText(string.Format("{0} left", data.username)); + + if (data.numUsers == 1) + this._participantsText.text = "there's 1 participant"; + else + this._participantsText.text = "there are " + data.numUsers + " participants"; + } + + private void OnTyping(TypingData data) + { + int idx = typingUsers.FindIndex((name) => name.Equals(data.username)); + if (idx == -1) + typingUsers.Add(data.username); + + SetTypingUsers(); + } + + private void OnStopTyping(TypingData data) + { + int idx = typingUsers.FindIndex((name) => name.Equals(data.username)); + if (idx != -1) + typingUsers.RemoveAt(idx); + + SetTypingUsers(); + } + + #endregion + + private void AddText(string text) + { + GUIHelper.AddText(this._listItemPrefab, this._contentRoot, text, this._maxListItemEntries, this._scrollRect); + } + + private void SetTypingUsers() + { + if (this.typingUsers.Count > 0) + { + System.Text.StringBuilder sb = new System.Text.StringBuilder(this.typingUsers[0], this.typingUsers.Count + 1); + + for (int i = 1; i < this.typingUsers.Count; ++i) + sb.AppendFormat(", {0}", this.typingUsers[i]); + + if (this.typingUsers.Count == 1) + sb.Append(" is typing!"); + else + sb.Append(" are typing!"); + + this._typingUsersText.text = sb.ToString(); + } + else + this._typingUsersText.text = string.Empty; + } + + private void SetPanels(bool login) + { + if (login) + { + this._loginRoot.gameObject.SetActive(true); + this._chatRoot.gameObject.SetActive(false); + this._input.interactable = false; + } + else + { + this._loginRoot.gameObject.SetActive(false); + this._chatRoot.gameObject.SetActive(true); + this._input.interactable = true; + } + } + + private void SetButtons(bool connect, bool close) + { + if (this._connectButton != null) + this._connectButton.interactable = connect; + + if (this._closeButton != null) + this._closeButton.interactable = close; + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/ChatSample.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/ChatSample.cs.meta new file mode 100644 index 000000000..e46426b55 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/ChatSample.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0787028fcb595bf43b8639c4ba5a8aea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/ChatSample.prefab b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/ChatSample.prefab new file mode 100644 index 000000000..cc98c8fb5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/ChatSample.prefab @@ -0,0 +1,2706 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1000902892011214 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224790219579874880} + - component: {fileID: 222376261405891914} + - component: {fileID: 114581125236570918} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224790219579874880 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1000902892011214} + 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: 224939546364297946} + 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.5, y: 0.5} +--- !u!222 &222376261405891914 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1000902892011214} + m_CullTransparentMesh: 0 +--- !u!114 &114581125236570918 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1000902892011214} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Connect +--- !u!1 &1035235965106544 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224741301118981304} + - component: {fileID: 222571976232846778} + - component: {fileID: 114964544781891738} + - component: {fileID: 114607270707498424} + 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 &224741301118981304 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1035235965106544} + 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: 224307212646100382} + m_Father: {fileID: 224105625305098426} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222571976232846778 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1035235965106544} + m_CullTransparentMesh: 0 +--- !u!114 &114964544781891738 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1035235965106544} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114607270707498424 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1035235965106544} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114964544781891738} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 6125277028786073657} + m_MethodName: OnCloseButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!1 &1114611047349812 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224841852409200590} + - component: {fileID: 222743774640263572} + - component: {fileID: 114397545370846732} + - component: {fileID: 114100637061327060} + - component: {fileID: 114870053156098536} + m_Layer: 5 + m_Name: Username InputField + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224841852409200590 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1114611047349812} + 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: 224797542323421204} + - {fileID: 224790476831961686} + m_Father: {fileID: 224637103119345230} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 295, y: -40.5} + m_SizeDelta: {x: 580, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222743774640263572 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1114611047349812} + m_CullTransparentMesh: 0 +--- !u!114 &114397545370846732 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1114611047349812} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114100637061327060 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1114611047349812} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 575553740, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114397545370846732} + m_TextComponent: {fileID: 114752222364265030} + m_Placeholder: {fileID: 114391194379739302} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 6125277028786073657} + m_MethodName: OnUserNameInputSubmit + m_Mode: 0 + 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_TypeName: UnityEngine.UI.InputField+SubmitEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_OnValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 6125277028786073657} + m_MethodName: OnUserNameInputChanged + m_Mode: 0 + 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_TypeName: UnityEngine.UI.InputField+OnChangeEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114870053156098536 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1114611047349812} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: 30 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &1157748782576716 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224892074867376450} + - component: {fileID: 222659040671696914} + - component: {fileID: 114267952409505424} + - component: {fileID: 114111407445804830} + 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 &224892074867376450 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1157748782576716} + 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: 224416714184855066} + m_Father: {fileID: 224014908287350418} + 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: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!222 &222659040671696914 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1157748782576716} + m_CullTransparentMesh: 0 +--- !u!114 &114267952409505424 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1157748782576716} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114111407445804830 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1157748782576716} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114760470429517008} + m_HandleRect: {fileID: 224189678256422720} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!1 &1161084759723112 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224307212646100382} + - component: {fileID: 222598753319918020} + - component: {fileID: 114981881761864462} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224307212646100382 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1161084759723112} + 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: 224741301118981304} + 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!222 &222598753319918020 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1161084759723112} + m_CullTransparentMesh: 0 +--- !u!114 &114981881761864462 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1161084759723112} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Close +--- !u!1 &1172011117352502 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224267982616945168} + - component: {fileID: 222763638610069260} + - component: {fileID: 114615676419907570} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224267982616945168 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1172011117352502} + 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: 224066271721193456} + m_RootOrder: 1 + 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!222 &222763638610069260 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1172011117352502} + m_CullTransparentMesh: 0 +--- !u!114 &114615676419907570 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1172011117352502} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!1 &1182148344898766 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224796334695528028} + - component: {fileID: 222089425631183492} + - component: {fileID: 114672880282121114} + - component: {fileID: 114174779575721134} + 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 &224796334695528028 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1182148344898766} + 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: 224623456240133262} + m_Father: {fileID: 224014908287350418} + 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 &222089425631183492 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1182148344898766} + m_CullTransparentMesh: 0 +--- !u!114 &114672880282121114 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1182148344898766} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114174779575721134 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1182148344898766} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114780823094611374} + m_HandleRect: {fileID: 224288845495672020} + m_Direction: 0 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!1 &1221923060263986 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224488011675182660} + - component: {fileID: 222663195218377462} + - component: {fileID: 114840981145114082} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224488011675182660 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1221923060263986} + 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: 224712458259988944} + 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.5, y: 0.5} +--- !u!222 &222663195218377462 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1221923060263986} + m_CullTransparentMesh: 0 +--- !u!114 &114840981145114082 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1221923060263986} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Socket.IO Chat Example +--- !u!1 &1237354529908580 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224288845495672020} + - component: {fileID: 222804800082420514} + - component: {fileID: 114780823094611374} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224288845495672020 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237354529908580} + 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: 224623456240133262} + 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 &222804800082420514 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237354529908580} + m_CullTransparentMesh: 0 +--- !u!114 &114780823094611374 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237354529908580} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!1 &1237762928355744 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224658501671241870} + - component: {fileID: 222943619967414576} + - component: {fileID: 114431322624380924} + - component: {fileID: 114865027837554882} + m_Layer: 5 + m_Name: Participants Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224658501671241870 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237762928355744} + 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: 224727861648864504} + 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.5, y: 0.5} +--- !u!222 &222943619967414576 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237762928355744} + m_CullTransparentMesh: 0 +--- !u!114 &114431322624380924 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237762928355744} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!114 &114865027837554882 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237762928355744} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!1 &1306119529939792 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224727861648864504} + - component: {fileID: 222490791128095210} + - component: {fileID: 114171063738740756} + - component: {fileID: 114022556067947914} + - component: {fileID: 114509238949135852} + m_Layer: 5 + m_Name: Chat Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224727861648864504 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1306119529939792} + 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: 224658501671241870} + - {fileID: 224014908287350418} + m_Father: {fileID: 224712458259988944} + 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.5, y: 0.5} +--- !u!222 &222490791128095210 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1306119529939792} + m_CullTransparentMesh: 0 +--- !u!114 &114171063738740756 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1306119529939792} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114022556067947914 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1306119529939792} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114509238949135852 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1306119529939792} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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 &1318886489036822 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224685396215346268} + - component: {fileID: 114958808642402278} + - component: {fileID: 222785629068236726} + - component: {fileID: 114609997163896008} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224685396215346268 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1318886489036822} + 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: 224927639337198130} + m_Father: {fileID: 224014908287350418} + 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!114 &114958808642402278 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1318886489036822} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!222 &222785629068236726 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1318886489036822} + m_CullTransparentMesh: 0 +--- !u!114 &114609997163896008 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1318886489036822} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!1 &1343827852586498 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224014908287350418} + - component: {fileID: 114579978615778664} + - component: {fileID: 222066767226595232} + - component: {fileID: 114131109826509426} + - component: {fileID: 114490948678604928} + m_Layer: 5 + m_Name: Chatlog + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224014908287350418 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1343827852586498} + 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: 224685396215346268} + - {fileID: 224796334695528028} + - {fileID: 224892074867376450} + m_Father: {fileID: 224727861648864504} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &114579978615778664 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1343827852586498} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 224927639337198130} + m_Horizontal: 1 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 0 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 10 + m_Viewport: {fileID: 224685396215346268} + m_HorizontalScrollbar: {fileID: 114174779575721134} + m_VerticalScrollbar: {fileID: 114111407445804830} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!222 &222066767226595232 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1343827852586498} + m_CullTransparentMesh: 0 +--- !u!114 &114131109826509426 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1343827852586498} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114490948678604928 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1343827852586498} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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 &1353680517664104 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224637103119345230} + - component: {fileID: 222185737726031292} + - component: {fileID: 114335158939318066} + - component: {fileID: 114537212196359646} + - component: {fileID: 114008665970913834} + m_Layer: 5 + m_Name: Login Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &224637103119345230 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1353680517664104} + 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: 224771728008742042} + - {fileID: 224841852409200590} + m_Father: {fileID: 224712458259988944} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 300, y: -119.75} + m_SizeDelta: {x: 590, y: 188.5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222185737726031292 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1353680517664104} + m_CullTransparentMesh: 0 +--- !u!114 &114335158939318066 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1353680517664104} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114537212196359646 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1353680517664104} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114008665970913834 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1353680517664104} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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 &1372134842297424 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224822543874155668} + - component: {fileID: 222857438848393300} + - component: {fileID: 114377319990730810} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224822543874155668 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1372134842297424} + 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: 224066271721193456} + 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.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222857438848393300 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1372134842297424} + m_CullTransparentMesh: 0 +--- !u!114 &114377319990730810 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1372134842297424} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Enter text... +--- !u!1 &1401391341103148 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224771728008742042} + - component: {fileID: 222056172104708438} + - component: {fileID: 114304131642843102} + m_Layer: 5 + m_Name: Panel Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224771728008742042 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1401391341103148} + 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: 224637103119345230} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 295, y: -12.75} + m_SizeDelta: {x: 580, y: 15.5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222056172104708438 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1401391341103148} + m_CullTransparentMesh: 0 +--- !u!114 &114304131642843102 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1401391341103148} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Login details +--- !u!1 &1407111218320188 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224651566745406540} + - component: {fileID: 222771821937408054} + - component: {fileID: 114505225708959694} + - component: {fileID: 114289657439883708} + m_Layer: 5 + m_Name: Typing Users + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224651566745406540 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1407111218320188} + 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: 224712458259988944} + m_RootOrder: 3 + 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 &222771821937408054 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1407111218320188} + m_CullTransparentMesh: 0 +--- !u!114 &114505225708959694 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1407111218320188} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!114 &114289657439883708 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1407111218320188} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!1 &1437037241821198 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224189678256422720} + - component: {fileID: 222362166004426338} + - component: {fileID: 114760470429517008} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224189678256422720 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1437037241821198} + 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: 224416714184855066} + 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 &222362166004426338 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1437037241821198} + m_CullTransparentMesh: 0 +--- !u!114 &114760470429517008 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1437037241821198} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!1 &1530841689100396 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224797542323421204} + - component: {fileID: 222875866776365720} + - component: {fileID: 114391194379739302} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224797542323421204 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1530841689100396} + 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: 224841852409200590} + 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.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222875866776365720 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1530841689100396} + m_CullTransparentMesh: 0 +--- !u!114 &114391194379739302 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1530841689100396} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Enter your username... +--- !u!1 &1577733906986086 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224416714184855066} + 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 &224416714184855066 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1577733906986086} + 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: 224189678256422720} + m_Father: {fileID: 224892074867376450} + 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 &1601628890107290 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224927639337198130} + - component: {fileID: 114664065782226206} + - component: {fileID: 114685289859116568} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224927639337198130 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1601628890107290} + 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: 224685396215346268} + 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 &114664065782226206 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1601628890107290} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, 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: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114685289859116568 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1601628890107290} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!1 &1629215432233352 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224066271721193456} + - component: {fileID: 222016605036489860} + - component: {fileID: 114504307456312666} + - component: {fileID: 114950932547626642} + - component: {fileID: 114088548275924710} + m_Layer: 5 + m_Name: InputField + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224066271721193456 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1629215432233352} + 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: 224822543874155668} + - {fileID: 224267982616945168} + m_Father: {fileID: 224712458259988944} + m_RootOrder: 4 + 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 &222016605036489860 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1629215432233352} + m_CullTransparentMesh: 0 +--- !u!114 &114504307456312666 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1629215432233352} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114950932547626642 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1629215432233352} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 575553740, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 0 + m_TargetGraphic: {fileID: 114504307456312666} + m_TextComponent: {fileID: 114615676419907570} + m_Placeholder: {fileID: 114377319990730810} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 6125277028786073657} + m_MethodName: OnMessageInput + m_Mode: 0 + 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_TypeName: UnityEngine.UI.InputField+SubmitEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_OnValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 6125277028786073657} + m_MethodName: UpdateTyping + 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_TypeName: UnityEngine.UI.InputField+OnChangeEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114088548275924710 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1629215432233352} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: 30 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: 0 + m_LayoutPriority: 1 +--- !u!1 &1694384428780698 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224939546364297946} + - component: {fileID: 222388115238317846} + - component: {fileID: 114302151222902426} + - component: {fileID: 114044782497920138} + - component: {fileID: 114728038557382156} + - component: {fileID: 114258833420816122} + m_Layer: 5 + m_Name: Connect Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224939546364297946 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694384428780698} + 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: 224790219579874880} + m_Father: {fileID: 224105625305098426} + 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: 10, y: 0} + m_SizeDelta: {x: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222388115238317846 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694384428780698} + m_CullTransparentMesh: 0 +--- !u!114 &114302151222902426 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694384428780698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114044782497920138 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694384428780698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114302151222902426} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 6125277028786073657} + m_MethodName: OnConnectButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114728038557382156 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694384428780698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114258833420816122 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694384428780698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!1 &1751351768554098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224712458259988944} + - component: {fileID: 114077523688739936} + - component: {fileID: 6125277028786073657} + m_Layer: 5 + m_Name: ChatSample + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224712458259988944 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1751351768554098} + 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: 224488011675182660} + - {fileID: 224637103119345230} + - {fileID: 224727861648864504} + - {fileID: 224651566745406540} + - {fileID: 224066271721193456} + - {fileID: 224105625305098426} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &114077523688739936 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1751351768554098} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &6125277028786073657 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1751351768554098} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0787028fcb595bf43b8639c4ba5a8aea, type: 3} + m_Name: + m_EditorClassIdentifier: + Category: Socket.IO 3 + DisplayName: Chat + Description: 'This example uses the Socket.IO 3 implementation to connect to the + official Chat demo server(https://github.com/Benedicht/socket.io3-chat). + + + Features demoed in this example: + + -Instantiating and setting up a SocketManager to connect to a Socket.IO server + + -Changing SocketOptions property + + -Subscribing to strongly typed events + + -Sending events to the server' + BannedPlatforms: + address: https://socket-io-3-chat-5ae3v.ondigitalocean.app + _loginRoot: {fileID: 224637103119345230} + _userNameInput: {fileID: 114100637061327060} + _chatRoot: {fileID: 224727861648864504} + _participantsText: {fileID: 114431322624380924} + _scrollRect: {fileID: 114579978615778664} + _contentRoot: {fileID: 224927639337198130} + _listItemPrefab: {fileID: 114144824129317776, guid: 46bdaff7a8bf5d34da870d286f962c69, + type: 3} + _maxListItemEntries: 100 + _typingUsersText: {fileID: 114505225708959694} + _input: {fileID: 114950932547626642} + _connectButton: {fileID: 114044782497920138} + _closeButton: {fileID: 114607270707498424} +--- !u!1 &1752022363910074 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224623456240133262} + 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 &224623456240133262 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1752022363910074} + 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: 224288845495672020} + m_Father: {fileID: 224796334695528028} + 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 &1832031479555468 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224105625305098426} + - component: {fileID: 114857716633083218} + - component: {fileID: 114631676187194180} + - component: {fileID: 114586299388036644} + m_Layer: 5 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224105625305098426 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1832031479555468} + 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: 224939546364297946} + - {fileID: 224741301118981304} + m_Father: {fileID: 224712458259988944} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 17.5, y: 0} + m_SizeDelta: {x: 25, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &114857716633083218 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1832031479555468} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114631676187194180 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1832031479555468} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114586299388036644 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1832031479555468} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!1 &1978404362546798 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224790476831961686} + - component: {fileID: 222052866005703648} + - component: {fileID: 114752222364265030} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224790476831961686 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1978404362546798} + 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: 224841852409200590} + m_RootOrder: 1 + 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!222 &222052866005703648 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1978404362546798} + m_CullTransparentMesh: 0 +--- !u!114 &114752222364265030 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1978404362546798} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/ChatSample.prefab.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/ChatSample.prefab.meta new file mode 100644 index 000000000..1f1bde7e5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/ChatSample.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 32c47f799d574ac40b44cc0c2f3d50e4 +timeCreated: 1571299108 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/Parsers.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/Parsers.meta new file mode 100644 index 000000000..4a26318fe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/Parsers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a7f5144e14f958b4f866da79ede3d6f9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/Parsers/JsonDotNetParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/Parsers/JsonDotNetParser.cs new file mode 100644 index 000000000..178499a88 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/Parsers/JsonDotNetParser.cs @@ -0,0 +1,562 @@ +#if !BESTHTTP_DISABLE_SOCKETIO && BESTHTTP_SOCKETIO_ENABLE_NEWTONSOFT_JSON_DOTNET_ENCODER + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.SocketIO3.Events; + +using Newtonsoft.Json; + +namespace BestHTTP.SocketIO3.Parsers +{ + public sealed class JsonDotNetParser : IParser + { + private IncomingPacket PacketWithAttachment = IncomingPacket.Empty; + private JsonSerializerSettings _settings; + + public JsonDotNetParser() + { } + + public JsonDotNetParser(JsonSerializerSettings settings) + { + this._settings = settings; + } + + private int ToInt(char ch) + { + int charValue = Convert.ToInt32(ch); + int num = charValue - '0'; + if (num < 0 || num > 9) + return -1; + + return num; + } + + public IncomingPacket Parse(SocketManager manager, string from) + { + int idx = 0; + var transportEvent = (TransportEventTypes)ToInt(from[idx++]); + var socketIOEvent = SocketIOEventTypes.Unknown; + var nsp = string.Empty; + var id = -1; + var payload = string.Empty; + int attachments = 0; + + if (from.Length > idx && ToInt(from[idx]) >= 0) + socketIOEvent = (SocketIOEventTypes)ToInt(from[idx++]); + else + socketIOEvent = SocketIOEventTypes.Unknown; + + // Parse Attachment + if (socketIOEvent == SocketIOEventTypes.BinaryEvent || socketIOEvent == SocketIOEventTypes.BinaryAck) + { + int endIdx = from.IndexOf('-', idx); + if (endIdx == -1) + endIdx = from.Length; + + int.TryParse(from.Substring(idx, endIdx - idx), out attachments); + + idx = endIdx + 1; + } + + // Parse Namespace + if (from.Length > idx && from[idx] == '/') + { + int endIdx = from.IndexOf(',', idx); + if (endIdx == -1) + endIdx = from.Length; + + nsp = from.Substring(idx, endIdx - idx); + idx = endIdx + 1; + } + else + nsp = "/"; + + // Parse Id + if (from.Length > idx && ToInt(from[idx]) >= 0) + { + int startIdx = idx++; + while (from.Length > idx && ToInt(from[idx]) >= 0) + idx++; + + int.TryParse(from.Substring(startIdx, idx - startIdx), out id); + } + + // What left is the payload data + if (from.Length > idx) + payload = from.Substring(idx); + else + payload = string.Empty; + + var packet = new IncomingPacket(transportEvent, socketIOEvent, nsp, id); + packet.AttachementCount = attachments; + + string eventName = packet.EventName; + object[] args = null; + + switch (socketIOEvent) + { + case SocketIOEventTypes.Unknown: + packet.DecodedArg = payload; + break; + + case SocketIOEventTypes.Connect: + // No Data | Object + if (!string.IsNullOrEmpty(payload)) + (eventName, args) = ReadData(manager, packet, payload); + break; + + case SocketIOEventTypes.Disconnect: + // No Data + break; + + case SocketIOEventTypes.Error: + // String | Object + (eventName, args) = ReadData(manager, packet, payload); + break; + + case SocketIOEventTypes.BinaryAck: + // Save payload until all attachments arrive + if (packet.AttachementCount > 0) + packet.DecodedArg = payload; + break; + + default: + // Array + (eventName, args) = ReadData(manager, packet, payload); + // Save payload until all attachments arrive + if (packet.AttachementCount > 0) + packet.DecodedArg = payload; + break; + } + + packet.EventName = eventName; + + if (args != null) + { + if (args.Length == 1) + packet.DecodedArg = args[0]; + else + packet.DecodedArgs = args; + } + + if (packet.AttachementCount > 0) + { + PacketWithAttachment = packet; + return IncomingPacket.Empty; + } + + return packet; + } + + public IncomingPacket MergeAttachements(SocketManager manager, IncomingPacket packet) + { + string payload = packet.DecodedArg as string; + packet.DecodedArg = null; + + string placeholderFormat = "{{\"_placeholder\":true,\"num\":{0}}}"; + + for (int i = 0; i < packet.Attachements.Count; ++i) + { + string placeholder = string.Format(placeholderFormat, i); + BufferSegment data = packet.Attachements[i]; + + payload = payload.Replace(placeholder, "\"" + Convert.ToBase64String(data.Data, data.Offset, data.Count) + "\""); + } + + (string eventName, object[] args) = ReadData(manager, packet, payload); + + packet.EventName = eventName; + + if (args != null) + { + if (args.Length == 1) + packet.DecodedArg = args[0]; + else + packet.DecodedArgs = args; + } + + return packet; + } + + private (string, object[]) ReadData(SocketManager manager, IncomingPacket packet, string payload) + { + Socket socket = manager.GetSocket(packet.Namespace); + + string eventName = packet.EventName; + Subscription subscription = socket.GetSubscription(eventName); + + object[] args = null; + + switch (packet.SocketIOEvent) + { + case SocketIOEventTypes.Unknown: + // TODO: Error? + break; + + case SocketIOEventTypes.Connect: + // No Data | Object + using (var strReader = new System.IO.StringReader(payload)) + using (var txtReader = new JsonTextReader(strReader)) + args = ReadParameters(socket, subscription, txtReader); + break; + + case SocketIOEventTypes.Disconnect: + // No Data + break; + + case SocketIOEventTypes.Error: + // String | Object + switch (payload[0]) + { + case '{': + using (var strReader = new System.IO.StringReader(payload)) + using (var txtReader = new JsonTextReader(strReader)) + args = ReadParameters(socket, subscription, txtReader); + break; + + default: + args = new object[] { new Error(payload) }; + break; + + } + break; + + case SocketIOEventTypes.Ack: + case SocketIOEventTypes.BinaryAck: + eventName = IncomingPacket.GenerateAcknowledgementNameFromId(packet.Id); + subscription = socket.GetSubscription(eventName); + + args = ReadParameters(socket, subscription, JsonConvert.DeserializeObject>(payload, this._settings), 0); + + break; + + default: + // Array + + List array = JsonConvert.DeserializeObject>(payload, this._settings); + + if (array.Count > 0) + { + eventName = array[0].ToString(); + subscription = socket.GetSubscription(eventName); + } + + if (packet.AttachementCount == 0 || packet.Attachements != null) + { + try + { + args = ReadParameters(socket, subscription, array, 1); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("DefaultJsonParser", string.Format("ReadParameters with eventName: {0}", eventName), ex); + } + } + + break; + } + + return (eventName, args); + } + + private object[] ReadParameters(Socket socket, Subscription subscription, List array, int startIdx) + { + object[] args = null; + + if (array.Count > startIdx) + { + var desc = subscription != null ? subscription.callbacks.FirstOrDefault() : default(CallbackDescriptor); + int paramCount = desc.ParamTypes != null ? desc.ParamTypes.Length : 0; + + int arrayIdx = startIdx; + if (paramCount > 0) + { + args = new object[paramCount]; + + for (int i = 0; i < desc.ParamTypes.Length; ++i) + { + Type type = desc.ParamTypes[i]; + + if (type == typeof(Socket)) + args[i] = socket; + else if (type == typeof(SocketManager)) + args[i] = socket.Manager; + else if (type == typeof(Placeholder)) + args[i] = new Placeholder(); + else + args[i] = ConvertTo(desc.ParamTypes[i], array[arrayIdx++]); + } + } + } + + return args; + } + + public object ConvertTo(Type toType, object obj) + { + if (obj == null) + return null; + +#if NETFX_CORE + TypeInfo objType = obj.GetType().GetTypeInfo(); +#else + Type objType = obj.GetType(); +#endif + +#if NETFX_CORE + TypeInfo typeInfo = toType.GetTypeInfo(); +#endif + +#if NETFX_CORE + if (typeInfo.IsEnum) +#else + if (toType.IsEnum) +#endif + return Enum.Parse(toType, obj.ToString(), true); + +#if NETFX_CORE + if (typeInfo.IsPrimitive) +#else + if (toType.IsPrimitive) +#endif + return Convert.ChangeType(obj, toType); + + if (toType == typeof(string)) + return obj.ToString(); + +#if NETFX_CORE + if (typeInfo.IsGenericType && toType.Name == "Nullable`1") + return Convert.ChangeType(obj, toType.GenericTypeArguments[0]); +#else + if (toType.IsGenericType && toType.Name == "Nullable`1") + return Convert.ChangeType(obj, toType.GetGenericArguments()[0]); +#endif + +#if NETFX_CORE + if (objType.Equals(typeInfo)) +#else + if (objType.Equals(toType)) +#endif + return obj; + + if (toType == typeof(byte[]) && objType == typeof(string)) + return Convert.FromBase64String(obj.ToString()); + + return JsonConvert.DeserializeObject(JsonConvert.SerializeObject(obj, this._settings), toType, this._settings); + } + + private object[] ReadParameters(Socket socket, Subscription subscription, JsonTextReader reader) + { + var desc = subscription != null ? subscription.callbacks.FirstOrDefault() : default(CallbackDescriptor); + int paramCount = desc.ParamTypes != null ? desc.ParamTypes.Length : 0; + object[] args = null; + + if (paramCount > 0) + { + args = new object[paramCount]; + + for (int i = 0; i < desc.ParamTypes.Length; ++i) + { + Type type = desc.ParamTypes[i]; + + if (type == typeof(Socket)) + args[i] = socket; + else if (type == typeof(SocketManager)) + args[i] = socket.Manager; + else + { + args[i] = JsonSerializer.CreateDefault(this._settings).Deserialize(reader, type); + } + } + } + + return args; + } + + public IncomingPacket Parse(SocketManager manager, BufferSegment data, TransportEventTypes transportEvent = TransportEventTypes.Unknown) + { + IncomingPacket packet = IncomingPacket.Empty; + + if (PacketWithAttachment.Attachements == null) + PacketWithAttachment.Attachements = new List(PacketWithAttachment.AttachementCount); + PacketWithAttachment.Attachements.Add(data); + + if (PacketWithAttachment.Attachements.Count == PacketWithAttachment.AttachementCount) + { + packet = manager.Parser.MergeAttachements(manager, PacketWithAttachment); + PacketWithAttachment = IncomingPacket.Empty; + } + + return packet; + } + + public OutgoingPacket CreateOutgoing(TransportEventTypes transportEvent, string payload) + { + return new OutgoingPacket { Payload = "" + (char)('0' + (byte)transportEvent) + payload }; + } + + private StringBuilder builder = new StringBuilder(); + public OutgoingPacket CreateOutgoing(Socket socket, SocketIOEventTypes socketIOEvent, int id, string name, object arg) + { + return CreateOutgoing(socket, socketIOEvent, id, name, arg != null ? new object[] { arg } : null); + } + + private int GetBinaryCount(object[] args) + { + if (args == null || args.Length == 0) + return 0; + + int count = 0; + for (int i = 0; i < args.Length; ++i) + if (args[i] is byte[]) + count++; + + return count; + } + public OutgoingPacket CreateOutgoing(Socket socket, SocketIOEventTypes socketIOEvent, int id, string name, object[] args) + { + builder.Length = 0; + List attachements = null; + + switch (socketIOEvent) + { + case SocketIOEventTypes.Ack: + if (GetBinaryCount(args) > 0) + { + attachements = CreatePlaceholders(args); + socketIOEvent = SocketIOEventTypes.BinaryAck; + } + break; + + case SocketIOEventTypes.Event: + if (GetBinaryCount(args) > 0) + { + attachements = CreatePlaceholders(args); + socketIOEvent = SocketIOEventTypes.BinaryEvent; + } + break; + } + + builder.Append(((int)TransportEventTypes.Message).ToString()); + builder.Append(((int)socketIOEvent).ToString()); + + if (socketIOEvent == SocketIOEventTypes.BinaryEvent || socketIOEvent == SocketIOEventTypes.BinaryAck) + { + builder.Append(attachements.Count.ToString()); + builder.Append('-'); + } + + // Add the namespace. If there is any other then the root nsp ("/") + // then we have to add a trailing "," if we have more data. + bool nspAdded = false; + if (socket.Namespace != "/") + { + builder.Append(socket.Namespace); + nspAdded = true; + } + + // ack id, if any + if (id >= 0) + { + if (nspAdded) + { + builder.Append(','); + nspAdded = false; + } + + builder.Append(id.ToString()); + } + + // payload + switch (socketIOEvent) + { + case SocketIOEventTypes.Connect: + // No Data | Object + if (args != null && args.Length > 0) + { + if (nspAdded) builder.Append(','); + + builder.Append(JsonConvert.SerializeObject(args[0], this._settings)); + } + break; + + case SocketIOEventTypes.Disconnect: + // No Data + break; + + case SocketIOEventTypes.Error: + // String | Object + if (args != null && args.Length > 0) + { + if (nspAdded) builder.Append(','); + + builder.Append(JsonConvert.SerializeObject(args[0], this._settings)); + } + break; + + case SocketIOEventTypes.Ack: + case SocketIOEventTypes.BinaryAck: + if (nspAdded) builder.Append(','); + + if (args != null && args.Length > 0) + { + builder.Append(JsonConvert.SerializeObject(args[0], this._settings)); + } + else + builder.Append("[]"); + break; + + default: + if (nspAdded) builder.Append(','); + + // Array + builder.Append('['); + if (!string.IsNullOrEmpty(name)) + { + builder.Append('\"'); + builder.Append(name); + builder.Append('\"'); + } + + if (args != null && args.Length > 0) + { + builder.Append(','); + + var argsJson = JsonConvert.SerializeObject(args, this._settings); + builder.Append(argsJson, 1, argsJson.Length - 2); + } + + builder.Append(']'); + break; + } + + return new OutgoingPacket { Payload = builder.ToString(), Attachements = attachements }; + } + + private List CreatePlaceholders(object[] args) + { + List attachements = null; + + for (int i = 0; i < args.Length; ++i) + { + var binary = args[i] as byte[]; + if (binary != null) + { + if (attachements == null) + attachements = new List(); + attachements.Add(binary); + + args[i] = new Placeholder { _placeholder = true, num = attachements.Count - 1 }; + } + } + + return attachements; + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/Parsers/JsonDotNetParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/Parsers/JsonDotNetParser.cs.meta new file mode 100644 index 000000000..9607310ef --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/Parsers/JsonDotNetParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c1b1e9a202e74ba4089e4aa518f64109 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/Parsers/MsgPackParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/Parsers/MsgPackParser.cs new file mode 100644 index 000000000..78b56de3b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/Parsers/MsgPackParser.cs @@ -0,0 +1,500 @@ +#if !BESTHTTP_DISABLE_SOCKETIO && BESTHTTP_SOCKETIO_ENABLE_GAMEDEVWARE_MESSAGEPACK + +using System; +using System.Linq; + +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.SocketIO3.Events; + +using GameDevWare.Serialization; +using GameDevWare.Serialization.MessagePack; +using GameDevWare.Serialization.Serializers; + +namespace BestHTTP.SocketIO3.Parsers +{ + public sealed class MsgPackParser : IParser + { + // Variables to calculate an average buffer size to start with in CreateOutgoing + ulong sumLength; + uint count; + + /// + /// Custom function instead of char.GetNumericValue, as it throws an error under WebGL using the new 4.x runtime. + /// It will return the value of the char if it's a numeric one, otherwise -1. + /// + private int ToInt(char ch) + { + int charValue = Convert.ToInt32(ch); + int num = charValue - '0'; + if (num < 0 || num > 9) + return -1; + + return num; + } + + public IncomingPacket MergeAttachements(SocketManager manager, IncomingPacket packet) { return packet; } + + public IncomingPacket Parse(SocketManager manager, string from) + { + int idx = 0; + var transportEvent = (TransportEventTypes)ToInt(from[idx++]); + var socketIOEvent = SocketIOEventTypes.Unknown; + var nsp = string.Empty; + var id = -1; + var payload = string.Empty; + int attachments = 0; + + if (from.Length > idx && ToInt(from[idx]) >= 0) + socketIOEvent = (SocketIOEventTypes)ToInt(from[idx++]); + else + socketIOEvent = SocketIOEventTypes.Unknown; + + // Parse Attachment + if (socketIOEvent == SocketIOEventTypes.BinaryEvent || socketIOEvent == SocketIOEventTypes.BinaryAck) + { + int endIdx = from.IndexOf('-', idx); + if (endIdx == -1) + endIdx = from.Length; + + int.TryParse(from.Substring(idx, endIdx - idx), out attachments); + idx = endIdx + 1; + } + + // Parse Namespace + if (from.Length > idx && from[idx] == '/') + { + int endIdx = from.IndexOf(',', idx); + if (endIdx == -1) + endIdx = from.Length; + + nsp = from.Substring(idx, endIdx - idx); + idx = endIdx + 1; + } + else + nsp = "/"; + + // Parse Id + if (from.Length > idx && ToInt(from[idx]) >= 0) + { + int startIdx = idx++; + while (from.Length > idx && ToInt(from[idx]) >= 0) + idx++; + + int.TryParse(from.Substring(startIdx, idx - startIdx), out id); + } + + // What left is the payload data + if (from.Length > idx) + payload = from.Substring(idx); + else + payload = string.Empty; + + return new IncomingPacket(transportEvent, socketIOEvent, nsp, id) { DecodedArg = payload, AttachementCount = attachments }; + } + + public IncomingPacket Parse(SocketManager manager, BufferSegment data, TransportEventTypes transportEvent = TransportEventTypes.Unknown) + { + using (var stream = new System.IO.MemoryStream(data.Data, data.Offset, data.Count)) + { + var buff = BufferPool.Get(MsgPackReader.DEFAULT_BUFFER_SIZE, true); + try + { + var context = new SerializationContext + { + Options = SerializationOptions.SuppressTypeInformation/*, + ExtensionTypeHandler = CustomMessagePackExtensionTypeHandler.Instance*/ + }; + IJsonReader reader = new MsgPackReader(stream, context, Endianness.BigEndian, buff); + + reader.ReadObjectBegin(); + + int type = -1, id = -1; + string nsp = null; + + bool hasData = false, readData = false; + + IncomingPacket packet = IncomingPacket.Empty; + + READ: + + while (reader.Token != JsonToken.EndOfObject) + { + string key = reader.ReadMember(); + + switch(key) + { + case "type": + type = reader.ReadByte(); + break; + + case "nsp": + nsp = reader.ReadString(); + break; + + case "id": + id = reader.ReadInt32(); + break; + + case "data": + if (!hasData) + { + hasData = true; + SkipData(reader, (SocketIOEventTypes)type); + } + else + { + readData = true; + + packet = new IncomingPacket(transportEvent != TransportEventTypes.Unknown ? transportEvent : TransportEventTypes.Message, (SocketIOEventTypes)type, nsp, id); + (string eventName, object[] args) = ReadData(manager, packet, reader); + + packet.EventName = eventName; + if (args != null) + { + if (args.Length == 1) + packet.DecodedArg = args[0]; + else + packet.DecodedArgs = args; + } + } + break; + } + } + + // type, nsp, id and data can come in any order. To read data strongly typed we need to know all the additional fields before processing the data field. + // In order to do it, when we first encounter the data field we skip it than we do a reset and an additional turn but reading the data too now. + if (hasData && !readData) + { + reader.Reset(); + stream.Position = 0; + reader.ReadObjectBegin(); + + goto READ; + } + + reader.ReadObjectEnd(); + + return packet.Equals(IncomingPacket.Empty) ? new IncomingPacket(transportEvent != TransportEventTypes.Unknown ? transportEvent : TransportEventTypes.Message, (SocketIOEventTypes)type, nsp, id) : packet; + } + finally + { + BufferPool.Release(buff); + } + } + } + + private void SkipData(IJsonReader reader, SocketIOEventTypes type) + { + switch (type) + { + case SocketIOEventTypes.Unknown: + // TODO: Error? + break; + + case SocketIOEventTypes.Connect: + // No Data | Object + SkipObject(reader); + break; + + case SocketIOEventTypes.Disconnect: + // No Data + break; + + case SocketIOEventTypes.Error: + // String | Object + switch(reader.Token) + { + case JsonToken.StringLiteral: + reader.ReadString(); + break; + + case JsonToken.BeginObject: + SkipObject(reader); + break; + } + break; + + default: + // Array + SkipArray(reader, false, true); + break; + } + } + + private object[] ReadParameters(Socket socket, Subscription subscription, IJsonReader reader, bool isInArray) + { + var desc = subscription != null ? subscription.callbacks.FirstOrDefault() : default(CallbackDescriptor); + int paramCount = desc.ParamTypes != null ? desc.ParamTypes.Length : 0; + object[] args = null; + + if (paramCount > 0) + { + args = new object[paramCount]; + + for (int i = 0; i < desc.ParamTypes.Length; ++i) + { + Type type = desc.ParamTypes[i]; + + if (type == typeof(Socket)) + args[i] = socket; + else if (type == typeof(SocketManager)) + args[i] = socket.Manager; + else + args[i] = reader.ReadValue(desc.ParamTypes[i]); + } + } + else + { + if (isInArray) + { + if (reader.Token != JsonToken.EndOfArray) + SkipArray(reader, true, false); + } + else + { + SkipObject(reader); + } + } + + return args; + } + + private (string, object[]) ReadData(SocketManager manager, IncomingPacket packet, IJsonReader reader) + { + Socket socket = manager.GetSocket(packet.Namespace); + + string eventName = packet.EventName; + Subscription subscription = socket.GetSubscription(eventName); + + object[] args = null; + + switch (packet.SocketIOEvent) + { + case SocketIOEventTypes.Unknown: + // TODO: Error? + break; + + case SocketIOEventTypes.Connect: + // No Data | Object + args = ReadParameters(socket, subscription, reader, false); + //SkipObject(reader); + break; + + case SocketIOEventTypes.Disconnect: + // No Data + break; + + case SocketIOEventTypes.Error: + // String | Object + switch(reader.Token) + { + case JsonToken.StringLiteral: + args = new object[] { new Error(reader.ReadString()) }; + break; + + case JsonToken.BeginObject: + args = ReadParameters(socket, subscription, reader, false); + //if (subscription == null && args == null) + // SkipObject(reader); + break; + } + break; + + case SocketIOEventTypes.Ack: + eventName = IncomingPacket.GenerateAcknowledgementNameFromId(packet.Id); + subscription = socket.GetSubscription(eventName); + + reader.ReadArrayBegin(); + + args = ReadParameters(socket, subscription, reader, true); + + reader.ReadArrayEnd(); + break; + + default: + // Array + reader.ReadArrayBegin(); + eventName = reader.ReadString(); + + subscription = socket.GetSubscription(eventName); + + args = ReadParameters(socket, subscription, reader, true); + + reader.ReadArrayEnd(); + break; + } + + return (eventName, args); + } + + private void SkipArray(IJsonReader reader, bool alreadyStarted, bool readFinalArrayToken) + { + if (!alreadyStarted) + reader.ReadArrayBegin(); + + int arrayBegins = 1; + + while (arrayBegins > 0) + { + switch (reader.Token) + { + case JsonToken.BeginArray: arrayBegins++; break; + case JsonToken.EndOfArray: arrayBegins--; break; + } + + if (readFinalArrayToken || arrayBegins >= 1) + reader.NextToken(); + } + } + + private void SkipObject(IJsonReader reader) + { + reader.ReadObjectBegin(); + int objectBegins = 1; + + while (objectBegins > 0) + { + switch (reader.Token) + { + case JsonToken.BeginObject: objectBegins++; break; + case JsonToken.EndOfObject: objectBegins--; break; + } + reader.NextToken(); + } + } + + public OutgoingPacket CreateOutgoing(TransportEventTypes transportEvent, string payload) + { + return new OutgoingPacket { Payload = "" + (char)('0' + (byte)transportEvent) + payload }; + } + + public OutgoingPacket CreateOutgoing(Socket socket, SocketIOEventTypes socketIOEvent, int id, string name, object arg) + { + return CreateOutgoing(socket, socketIOEvent, id, name, arg != null ? new object[] { arg } : null); + } + + public OutgoingPacket CreateOutgoing(Socket socket, SocketIOEventTypes socketIOEvent, int id, string name, object[] args) + { + var memBufferTargetLength = count == 0 ? 256 : Math.Max(256, (sumLength / count) / 2); + + var memBuffer = BufferPool.Get((long)memBufferTargetLength, true); + var stream = new BestHTTP.Extensions.BufferPoolMemoryStream(memBuffer, 0, memBuffer.Length, true, true, false, true); + + var buffer = BufferPool.Get(MsgPackWriter.DEFAULT_BUFFER_SIZE, true); + + var context = new SerializationContext + { + Options = SerializationOptions.SuppressTypeInformation, + EnumSerializerFactory = (enumType) => new EnumNumberSerializer(enumType)/*, + ExtensionTypeHandler = CustomMessagePackExtensionTypeHandler.Instance*/ + }; + + var writer = new MsgPackWriter(stream, context, buffer); + + switch (socketIOEvent) + { + case SocketIOEventTypes.Connect: + // No Data | Object + if (args != null && args.Length > 0 && args[0] != null) + writer.WriteObjectBegin(id >= 0 ? 4 : 3); + else + writer.WriteObjectBegin(id >= 0 ? 3 : 2); + break; + + case SocketIOEventTypes.Disconnect: writer.WriteObjectBegin(id > 0 ? 3 : 2); break; + case SocketIOEventTypes.Error: writer.WriteObjectBegin(id > 0 ? 4 : 3); break; + default: writer.WriteObjectBegin(id >= 0 ? 4 : 3); break; + } + + writer.WriteMember("type"); + writer.Write((int)socketIOEvent); + + writer.WriteMember("nsp"); + writer.Write(socket.Namespace); + + if (id >= 0) + { + writer.WriteMember("id"); + writer.Write(id); + } + + switch (socketIOEvent) + { + case SocketIOEventTypes.Connect: + // No Data | Object + if (args != null && args.Length > 0 && args[0] != null) + { + writer.WriteMember("data"); + writer.WriteValue(args[0], args[0].GetType()); + } + break; + + case SocketIOEventTypes.Disconnect: + // No Data + break; + + case SocketIOEventTypes.Error: + writer.WriteMember("data"); + + // String | Object + if (args != null && args.Length > 0) + writer.WriteValue(args[0], args[0].GetType()); + else + { + writer.WriteObjectBegin(0); + writer.WriteObjectEnd(); + } + break; + + default: + writer.WriteMember("data"); + + // Array + + int argCount = (args != null ? args.Length : 0); + writer.WriteArrayBegin(!string.IsNullOrEmpty(name) ? 1 + argCount : argCount); + + if (!string.IsNullOrEmpty(name)) + writer.Write(name); + + if (args != null && args.Length > 0) + { + foreach (var arg in args) + { + if (arg != null) + writer.WriteValue(arg, arg.GetType()); + else + writer.WriteNull(); + } + } + + writer.WriteArrayEnd(); + break; + } + + writer.WriteObjectEnd(); + + writer.Flush(); + + BufferPool.Release(buffer); + + // get how much bytes got written to the buffer + int length = (int)stream.Position; + + buffer = stream.GetBuffer(); + + sumLength += (ulong)length; + count++; + + if(sumLength >= int.MaxValue) + { + sumLength /= count; + count = 1; + } + + return new OutgoingPacket { PayloadData = new BufferSegment(buffer, 0, length) }; + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/Parsers/MsgPackParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/Parsers/MsgPackParser.cs.meta new file mode 100644 index 000000000..c174dc7f1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/SocketIO3/Parsers/MsgPackParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c140b7f57ea9266438bfa03cd086bacf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Websocket.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Websocket.meta new file mode 100644 index 000000000..40fe3839a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Websocket.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3f80c43b87778214daf5495f2854dfe0 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Websocket/WebSocket.prefab b/GQ_URP/GQ/Assets/Best HTTP/Examples/Websocket/WebSocket.prefab new file mode 100644 index 000000000..6e5961e0d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Websocket/WebSocket.prefab @@ -0,0 +1,1818 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1110530504326832 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224528384729442136} + - component: {fileID: 222175054881339580} + - component: {fileID: 114952154339389432} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224528384729442136 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1110530504326832} + 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: 224166366902610988} + 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!222 &222175054881339580 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1110530504326832} + m_CullTransparentMesh: 0 +--- !u!114 &114952154339389432 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1110530504326832} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Close +--- !u!1 &1200892417767108 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224514895778286330} + - component: {fileID: 222729657047926812} + - component: {fileID: 114613723479245604} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224514895778286330 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1200892417767108} + 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: 224209844998989242} + m_RootOrder: 1 + 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!222 &222729657047926812 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1200892417767108} + m_CullTransparentMesh: 0 +--- !u!114 &114613723479245604 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1200892417767108} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!1 &1204087030868698 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224018561659402752} + - component: {fileID: 114572603423109416} + - component: {fileID: 222174484571256226} + - component: {fileID: 114395751296128688} + - component: {fileID: 114748424944548512} + 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 &224018561659402752 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1204087030868698} + 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: 224979831441814964} + - {fileID: 224614312615368774} + - {fileID: 224861100675643332} + m_Father: {fileID: 224197337416791820} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &114572603423109416 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1204087030868698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 224971717570740228} + m_Horizontal: 1 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 0 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 10 + m_Viewport: {fileID: 224979831441814964} + m_HorizontalScrollbar: {fileID: 114711534033928680} + m_VerticalScrollbar: {fileID: 114420282304455724} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!222 &222174484571256226 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1204087030868698} + m_CullTransparentMesh: 0 +--- !u!114 &114395751296128688 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1204087030868698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114748424944548512 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1204087030868698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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 &1211712599302702 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224979831441814964} + - component: {fileID: 114038840641939166} + - component: {fileID: 222177298411673828} + - component: {fileID: 114501661686246452} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224979831441814964 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1211712599302702} + 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: 224971717570740228} + m_Father: {fileID: 224018561659402752} + 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!114 &114038840641939166 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1211712599302702} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!222 &222177298411673828 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1211712599302702} + m_CullTransparentMesh: 0 +--- !u!114 &114501661686246452 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1211712599302702} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!1 &1238976267102700 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224127538796793726} + - component: {fileID: 222054062096551898} + - component: {fileID: 114454635980931510} + - component: {fileID: 114690557412048502} + - component: {fileID: 114446411094691164} + - component: {fileID: 114876137950391020} + m_Layer: 5 + m_Name: Connect Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224127538796793726 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1238976267102700} + 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: 224505443776139298} + m_Father: {fileID: 224831155996418692} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 10, y: -73.5} + m_SizeDelta: {x: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222054062096551898 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1238976267102700} + m_CullTransparentMesh: 0 +--- !u!114 &114454635980931510 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1238976267102700} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114690557412048502 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1238976267102700} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114454635980931510} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114776046185962020} + m_MethodName: OnConnectButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114446411094691164 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1238976267102700} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114876137950391020 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1238976267102700} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!1 &1346495350553784 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224882038644901280} + 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 &224882038644901280 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1346495350553784} + 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: 224065177343518554} + m_Father: {fileID: 224861100675643332} + 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 &1357817669388376 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224065177343518554} + - component: {fileID: 222845610577825004} + - component: {fileID: 114577971283607734} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224065177343518554 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1357817669388376} + 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: 224882038644901280} + 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 &222845610577825004 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1357817669388376} + m_CullTransparentMesh: 0 +--- !u!114 &114577971283607734 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1357817669388376} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!1 &1524123969782332 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224209844998989242} + - component: {fileID: 222369149449669190} + - component: {fileID: 114898303863268162} + - component: {fileID: 114312113043576530} + - component: {fileID: 114572785191150112} + m_Layer: 5 + m_Name: InputField + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224209844998989242 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1524123969782332} + 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: 224196651058811708} + - {fileID: 224514895778286330} + m_Father: {fileID: 224197337416791820} + 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.5, y: 0.5} +--- !u!222 &222369149449669190 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1524123969782332} + m_CullTransparentMesh: 0 +--- !u!114 &114898303863268162 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1524123969782332} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114312113043576530 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1524123969782332} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 575553740, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114898303863268162} + m_TextComponent: {fileID: 114613723479245604} + m_Placeholder: {fileID: 114609246883145498} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114776046185962020} + m_MethodName: OnInputField + m_Mode: 0 + 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_TypeName: UnityEngine.UI.InputField+SubmitEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.InputField+OnChangeEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114572785191150112 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1524123969782332} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: 30 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: 0 + m_LayoutPriority: 1 +--- !u!1 &1529001294707920 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224831155996418692} + - component: {fileID: 114865458557620490} + - component: {fileID: 114229067753521796} + - component: {fileID: 114205603882052856} + m_Layer: 5 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224831155996418692 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1529001294707920} + 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: 224127538796793726} + - {fileID: 224166366902610988} + m_Father: {fileID: 224197337416791820} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 17.5, y: -60} + m_SizeDelta: {x: 25, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &114865458557620490 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1529001294707920} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114229067753521796 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1529001294707920} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114205603882052856 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1529001294707920} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, 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: 0 + m_LayoutPriority: 1 +--- !u!1 &1545549045625750 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224861100675643332} + - component: {fileID: 222624518764825506} + - component: {fileID: 114497172723985284} + - component: {fileID: 114420282304455724} + 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 &224861100675643332 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1545549045625750} + 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: 224882038644901280} + m_Father: {fileID: 224018561659402752} + 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: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!222 &222624518764825506 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1545549045625750} + m_CullTransparentMesh: 0 +--- !u!114 &114497172723985284 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1545549045625750} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114420282304455724 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1545549045625750} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114577971283607734} + m_HandleRect: {fileID: 224065177343518554} + m_Direction: 2 + m_Value: 1 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!1 &1549911186798296 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224614312615368774} + - component: {fileID: 222567989320186684} + - component: {fileID: 114129998699893402} + - component: {fileID: 114711534033928680} + 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 &224614312615368774 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1549911186798296} + 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: 224962430160998166} + m_Father: {fileID: 224018561659402752} + 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 &222567989320186684 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1549911186798296} + m_CullTransparentMesh: 0 +--- !u!114 &114129998699893402 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1549911186798296} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114711534033928680 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1549911186798296} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114612078822454128} + m_HandleRect: {fileID: 224185689905622140} + m_Direction: 0 + m_Value: 0.5 + m_Size: 0 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!1 &1577977229747156 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224166366902610988} + - component: {fileID: 222037982627162392} + - component: {fileID: 114392553743481050} + - component: {fileID: 114981635045382576} + 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 &224166366902610988 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1577977229747156} + 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: 224528384729442136} + m_Father: {fileID: 224831155996418692} + 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: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222037982627162392 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1577977229747156} + m_CullTransparentMesh: 0 +--- !u!114 &114392553743481050 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1577977229747156} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114981635045382576 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1577977229747156} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114392553743481050} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114776046185962020} + m_MethodName: OnCloseButton + 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_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!1 &1675279834991544 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224971717570740228} + - component: {fileID: 114520437924530944} + - component: {fileID: 114975435034382332} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224971717570740228 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1675279834991544} + 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: 224979831441814964} + 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.0000119093675} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &114520437924530944 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1675279834991544} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, 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: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114975435034382332 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1675279834991544} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!1 &1747017394763456 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224185689905622140} + - component: {fileID: 222627718692333280} + - component: {fileID: 114612078822454128} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224185689905622140 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1747017394763456} + 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: 224962430160998166} + 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 &222627718692333280 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1747017394763456} + m_CullTransparentMesh: 0 +--- !u!114 &114612078822454128 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1747017394763456} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!1 &1819719073121716 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224962430160998166} + 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 &224962430160998166 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1819719073121716} + 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: 224185689905622140} + m_Father: {fileID: 224614312615368774} + 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 &1938121344826166 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224197337416791820} + - component: {fileID: 114259775701814850} + - component: {fileID: 114776046185962020} + m_Layer: 5 + m_Name: WebSocket + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224197337416791820 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1938121344826166} + 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: 224561013132840682} + - {fileID: 224018561659402752} + - {fileID: 224209844998989242} + - {fileID: 224831155996418692} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &114259775701814850 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1938121344826166} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114776046185962020 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1938121344826166} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e62ab818fc89e124db079d6cc7323474, type: 3} + m_Name: + m_EditorClassIdentifier: + Category: Websocket + DisplayName: Echo + Description: 'A WebSocket demonstration that connects to a WebSocket echo service. + + + Features demoed in this example: + + -Basic usage of the WebSocket class' + BannedPlatforms: + address: wss://besthttpwebgldemo.azurewebsites.net/ws + _input: {fileID: 114312113043576530} + _scrollRect: {fileID: 114572603423109416} + _contentRoot: {fileID: 224971717570740228} + _listItemPrefab: {fileID: 114144824129317776, guid: 46bdaff7a8bf5d34da870d286f962c69, + type: 3} + _maxListItemEntries: 100 + _connectButton: {fileID: 114690557412048502} + _closeButton: {fileID: 114981635045382576} +--- !u!1 &1939147252227394 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224561013132840682} + - component: {fileID: 222906270828424176} + - component: {fileID: 114933040502706780} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224561013132840682 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1939147252227394} + 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: 224197337416791820} + 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.5, y: 0.5} +--- !u!222 &222906270828424176 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1939147252227394} + m_CullTransparentMesh: 0 +--- !u!114 &114933040502706780 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1939147252227394} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Websocket Echo +--- !u!1 &1940355581359008 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224196651058811708} + - component: {fileID: 222784382921133468} + - component: {fileID: 114609246883145498} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224196651058811708 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1940355581359008} + 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: 224209844998989242} + 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.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222784382921133468 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1940355581359008} + m_CullTransparentMesh: 0 +--- !u!114 &114609246883145498 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1940355581359008} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Enter text... +--- !u!1 &1945156743269236 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224505443776139298} + - component: {fileID: 222073378339884656} + - component: {fileID: 114356439005785014} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224505443776139298 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1945156743269236} + 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: 224127538796793726} + 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.5, y: 0.5} +--- !u!222 &222073378339884656 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1945156743269236} + m_CullTransparentMesh: 0 +--- !u!114 &114356439005785014 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1945156743269236} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Connect diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Websocket/WebSocket.prefab.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Websocket/WebSocket.prefab.meta new file mode 100644 index 000000000..6eebff3c7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Websocket/WebSocket.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7dd2f86eb3e1a5f438f5b3ba39bd9e9b +timeCreated: 1571299283 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Websocket/WebSocketSample.cs b/GQ_URP/GQ/Assets/Best HTTP/Examples/Websocket/WebSocketSample.cs new file mode 100644 index 000000000..92b36575c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Websocket/WebSocketSample.cs @@ -0,0 +1,179 @@ +#if !BESTHTTP_DISABLE_WEBSOCKET + +using System; + +using BestHTTP.Examples.Helpers; + +using UnityEngine; +using UnityEngine.UI; + +namespace BestHTTP.Examples.Websockets +{ + public class WebSocketSample : BestHTTP.Examples.Helpers.SampleBase + { +#pragma warning disable 0649 + + [SerializeField] + [Tooltip("The WebSocket address to connect")] + private string address = "wss://besthttpwebgldemo.azurewebsites.net/ws"; + + [SerializeField] + private InputField _input; + + [SerializeField] + private ScrollRect _scrollRect; + + [SerializeField] + private RectTransform _contentRoot; + + [SerializeField] + private TextListItem _listItemPrefab; + + [SerializeField] + private int _maxListItemEntries = 100; + + [SerializeField] + private Button _connectButton; + + [SerializeField] + private Button _closeButton; + +#pragma warning restore + + /// + /// Saved WebSocket instance + /// + WebSocket.WebSocket webSocket; + + protected override void Start() + { + base.Start(); + + SetButtons(true, false); + this._input.interactable = false; + } + + void OnDestroy() + { + if (this.webSocket != null) + { + this.webSocket.Close(); + this.webSocket = null; + } + } + + public void OnConnectButton() + { + // Create the WebSocket instance + this.webSocket = new WebSocket.WebSocket(new Uri(address)); + +#if !UNITY_WEBGL || UNITY_EDITOR + this.webSocket.StartPingThread = true; + +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + if (HTTPManager.Proxy != null) + this.webSocket.OnInternalRequestCreated = (ws, internalRequest) => internalRequest.Proxy = new HTTPProxy(HTTPManager.Proxy.Address, HTTPManager.Proxy.Credentials, false); +#endif +#endif + + // Subscribe to the WS events + this.webSocket.OnOpen += OnOpen; + this.webSocket.OnMessage += OnMessageReceived; + this.webSocket.OnClosed += OnClosed; + this.webSocket.OnError += OnError; + + // Start connecting to the server + this.webSocket.Open(); + + AddText("Connecting..."); + + SetButtons(false, true); + this._input.interactable = false; + } + + public void OnCloseButton() + { + AddText("Closing!"); + // Close the connection + this.webSocket.Close(1000, "Bye!"); + + SetButtons(false, false); + this._input.interactable = false; + } + + public void OnInputField(string textToSend) + { + if ((!Input.GetKeyDown(KeyCode.KeypadEnter) && !Input.GetKeyDown(KeyCode.Return)) || string.IsNullOrEmpty(textToSend)) + return; + + AddText(string.Format("Sending message: {0}", textToSend)) + .AddLeftPadding(20); + + // Send message to the server + this.webSocket.Send(textToSend); + } + + #region WebSocket Event Handlers + + /// + /// Called when the web socket is open, and we are ready to send and receive data + /// + void OnOpen(WebSocket.WebSocket ws) + { + AddText("WebSocket Open!"); + + this._input.interactable = true; + } + + /// + /// Called when we received a text message from the server + /// + void OnMessageReceived(WebSocket.WebSocket ws, string message) + { + AddText(string.Format("Message received: {0}", message)) + .AddLeftPadding(20); + } + + /// + /// Called when the web socket closed + /// + void OnClosed(WebSocket.WebSocket ws, UInt16 code, string message) + { + AddText(string.Format("WebSocket closed! Code: {0} Message: {1}", code, message)); + + webSocket = null; + + SetButtons(true, false); + } + + /// + /// Called when an error occured on client side + /// + void OnError(WebSocket.WebSocket ws, string error) + { + AddText(string.Format("An error occured: {0}", error)); + + webSocket = null; + + SetButtons(true, false); + } + + #endregion + + private void SetButtons(bool connect, bool close) + { + if (this._connectButton != null) + this._connectButton.interactable = connect; + + if (this._closeButton != null) + this._closeButton.interactable = close; + } + + private TextListItem AddText(string text) + { + return GUIHelper.AddText(this._listItemPrefab, this._contentRoot, text, this._maxListItemEntries, this._scrollRect); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Examples/Websocket/WebSocketSample.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Examples/Websocket/WebSocketSample.cs.meta new file mode 100644 index 000000000..33419f491 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Examples/Websocket/WebSocketSample.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e62ab818fc89e124db079d6cc7323474 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Plugins.meta b/GQ_URP/GQ/Assets/Best HTTP/Plugins.meta new file mode 100644 index 000000000..261cd799a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Plugins.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f2acd3f924ae69c44b7aadb54e686d44 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Plugins/Android.meta b/GQ_URP/GQ/Assets/Best HTTP/Plugins/Android.meta new file mode 100644 index 000000000..165c0005e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Plugins/Android.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 00074d6d9db5c82418d3de6cd69eb2a7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Plugins/Android/ProxyFinder.java b/GQ_URP/GQ/Assets/Best HTTP/Plugins/Android/ProxyFinder.java new file mode 100644 index 000000000..e87cd4206 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Plugins/Android/ProxyFinder.java @@ -0,0 +1,35 @@ +package com.besthttp.proxy; + +import java.net.InetSocketAddress; +import java.net.Proxy; +import java.net.ProxySelector; +import java.net.URI; +import java.util.Iterator; +import java.util.List; + +public class ProxyFinder { + + public static String FindFor(String uriStr) { + try { + System.setProperty("java.net.useSystemProxies","true"); + + List proxies = ProxySelector.getDefault().select(new URI(uriStr)); + + for (Iterator iter = proxies.iterator(); iter.hasNext(); ) { + Proxy proxy = iter.next(); + + InetSocketAddress addr = (InetSocketAddress)proxy.address(); + + if(addr == null) { + // no op + } else { + return String.format("%s://%s:%s", proxy.type(), addr.getHostName(), addr.getPort()); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Plugins/Android/ProxyFinder.java.meta b/GQ_URP/GQ/Assets/Best HTTP/Plugins/Android/ProxyFinder.java.meta new file mode 100644 index 000000000..2a9e90748 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Plugins/Android/ProxyFinder.java.meta @@ -0,0 +1,32 @@ +fileFormatVersion: 2 +guid: d58fbdd72f22ed9419414fb4e267c62b +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Plugins/WebGL.meta b/GQ_URP/GQ/Assets/Best HTTP/Plugins/WebGL.meta new file mode 100644 index 000000000..aebd4cd65 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Plugins/WebGL.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b48528ef6a3e52f4ba5e4335dff83841 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Plugins/WebGL/BestHTTP_EventSource.jslib b/GQ_URP/GQ/Assets/Best HTTP/Plugins/WebGL/BestHTTP_EventSource.jslib new file mode 100644 index 000000000..f3e91bd7a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Plugins/WebGL/BestHTTP_EventSource.jslib @@ -0,0 +1,155 @@ +var Lib_BEST_HTTP_WebGL_ES_Bridge = +{ + $es: { + eventSourceInstances: {}, + nextInstanceId : 1, + + Set : function(event) { + es.eventSourceInstances[es.nextInstanceId] = event; + return es.nextInstanceId++; + }, + + Get : function(id) { + return es.eventSourceInstances[id]; + }, + + Remove: function(id) { + delete es.eventSourceInstances[id]; + }, + + _callOnError: function(errCallback, id, reason) + { + if (reason) + { + var length = lengthBytesUTF8(reason) + 1; + var buffer = _malloc(length); + + stringToUTF8Array(reason, HEAPU8, buffer, length); + + Module['dynCall_vii'](errCallback, id, buffer); + + _free(buffer); + } + else + Module['dynCall_vii'](errCallback, [id, 0]); + }, + + _GenericEventHandler: function(id, eventName, e, onMessage) { + function AllocString(str) { + if (str != undefined) + { + var length = lengthBytesUTF8(str) + 1; + var buff = _malloc(length); + + stringToUTF8Array(str, HEAPU8, buff, length); + + return buff; + } + + return 0; + } + + var eventBuffer = AllocString(eventName); + var dataBuffer = AllocString(e.data); + var idBuffer = AllocString(e.id); + + Module['dynCall_viiiii'](onMessage, id, eventBuffer, dataBuffer, idBuffer, e.retry); + + if (eventBuffer != 0) + _free(eventBuffer); + + if (dataBuffer != 0) + _free(dataBuffer); + + if (idBuffer != 0) + _free(idBuffer); + } + }, + + ES_IsSupported: function() { + return typeof(EventSource) !== "undefined"; + }, + + ES_Create: function(urlPtr, withCredentials, onOpen, onMessage, onError) + { + var url = new URL(UTF8ToString(urlPtr)); ///*encodeURI*/(UTF8ToString(urlPtr)).replace(/\+/g, '%2B').replace(/%252[fF]/ig, '%2F'); + + var event = { + onError: onError + }; + + var id = es.nextInstanceId; + + console.log(id + ' ES_Create(' + url + ', ' + withCredentials + ')'); + + event.eventImpl = new EventSource(url, { withCredentials: withCredentials != 0 ? true : false } ); + event.onMessage = onMessage; + + event.eventImpl.onopen = function() { + console.log(id + ' ES_Create - onOpen'); + + Module['dynCall_vi'](onOpen, id); + }; + + event.eventImpl.onmessage = function(e) { + console.log(id + ' on Generic Message'); + es._GenericEventHandler(id, undefined, e, onMessage); + }; + + event.eventImpl.onerror = function(e) { + console.log(id + ' ES_Create - onError'); + + es._callOnError(onError, id, "Unknown Error!"); + + if (e.target.readyState === 0) + event.eventImpl.close(); + }; + + return es.Set(event); + }, + + ES_AddEventHandler: function(id, eventNamePtr) { + var eventName = UTF8ToString(eventNamePtr); + + console.log(id + ' ES_AddEventHandler(' + eventName + ')'); + + var event = es.Get(id); + + try + { + event.eventImpl.addEventListener(eventName, function(e) { + console.log(id + ' onEvent('+ eventName + ')'); + + es._GenericEventHandler(id, eventName, e, event.onMessage); + }); + } + catch(e) { + es._callOnError(event.eventImpl.onError, id, ' ' + e.name + ': ' + e.message); + } + }, + + ES_Close: function(id) + { + console.log(id + ' ES_Close'); + + var event = es.Get(id); + + try + { + event.eventImpl.close(); + } + catch(e) { + es._callOnError(event.eventImpl.onError, id, ' ' + e.name + ': ' + e.message); + } + }, + + ES_Release: function(id) + { + console.log(id + ' ES_Release'); + + es.Remove(id); + } +}; + +autoAddDeps(Lib_BEST_HTTP_WebGL_ES_Bridge, '$es'); +mergeInto(LibraryManager.library, Lib_BEST_HTTP_WebGL_ES_Bridge); diff --git a/GQ_URP/GQ/Assets/Best HTTP/Plugins/WebGL/BestHTTP_EventSource.jslib.meta b/GQ_URP/GQ/Assets/Best HTTP/Plugins/WebGL/BestHTTP_EventSource.jslib.meta new file mode 100644 index 000000000..8f5b99011 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Plugins/WebGL/BestHTTP_EventSource.jslib.meta @@ -0,0 +1,21 @@ +fileFormatVersion: 2 +guid: ac23b06f7735b8e478ce14b0d4ac2a68 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + WebGL: + enabled: 1 + settings: {} + data: + enabled: 0 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Plugins/WebGL/BestHTTP_WebRequest.jslib b/GQ_URP/GQ/Assets/Best HTTP/Plugins/WebGL/BestHTTP_WebRequest.jslib new file mode 100644 index 000000000..9f1dc8dbe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Plugins/WebGL/BestHTTP_WebRequest.jslib @@ -0,0 +1,269 @@ +var Lib_BEST_HTTP_WebGL_HTTP_Bridge = +{ + /*LogLevels: { + All: 0, + Information: 1, + Warning: 2, + Error: 3, + Exception: 4, + None: 5 + }*/ + + $_best_http_request_bridge_global: { + requestInstances: {}, + nextRequestId: 1, + loglevel: 2 + }, + + XHR_Create: function(method, url, user, passwd, withCredentials) + { + var _url = new URL(UTF8ToString(url)); ///*encodeURI*/(UTF8ToString(url)).replace(/\+/g, '%2B').replace(/%252[fF]/ig, '%2F'); + var _method = UTF8ToString(method); + + if (_best_http_request_bridge_global.loglevel <= 1) /*information*/ + console.log(_best_http_request_bridge_global.nextRequestId + ' XHR_Create - withCredentials: ' + withCredentials + ' method: ' + _method + ' url: ' + _url.toString()); + + var http = new XMLHttpRequest(); + + if (user && passwd) + { + var u = UTF8ToString(user); + var p = UTF8ToString(passwd); + + http.withCredentials = true; + http.open(_method, _url.toString(), /*async:*/ true , u, p); + } + else { + http.withCredentials = withCredentials; + http.open(_method, _url.toString(), /*async:*/ true); + } + + http.responseType = 'arraybuffer'; + + _best_http_request_bridge_global.requestInstances[_best_http_request_bridge_global.nextRequestId] = http; + return _best_http_request_bridge_global.nextRequestId++; + }, + + XHR_SetTimeout: function (request, timeout) + { + if (_best_http_request_bridge_global.loglevel <= 1) /*information*/ + console.log(request + ' XHR_SetTimeout ' + timeout); + + _best_http_request_bridge_global.requestInstances[request].timeout = timeout; + }, + + XHR_SetRequestHeader: function (request, header, value) + { + var _header = UTF8ToString(header); + var _value = UTF8ToString(value); + + if (_best_http_request_bridge_global.loglevel <= 1) /*information*/ + console.log(request + ' XHR_SetRequestHeader ' + _header + ' ' + _value); + + if (_header != 'Cookie') + _best_http_request_bridge_global.requestInstances[request].setRequestHeader(_header, _value); + else { + var cookies = _value.split(';'); + for (var i = 0; i < cookies.length; i++) { + document.cookie = cookies[i]; + } + } + }, + + XHR_CopyResponseTo: function (request, array, size) { + var http = _best_http_request_bridge_global.requestInstances[request]; + + var response = 0; + if (!!http.response) + response = http.response; + + var responseBytes = new Uint8Array(response); + var buffer = HEAPU8.subarray(array, array + size); + buffer.set(responseBytes) + }, + + XHR_SetResponseHandler: function (request, onresponse, onerror, ontimeout, onaborted) + { + if (_best_http_request_bridge_global.loglevel <= 1) /*information*/ + console.log(request + ' XHR_SetResponseHandler'); + + var http = _best_http_request_bridge_global.requestInstances[request]; + // LOAD + http.onload = function http_onload(e) { + if (_best_http_request_bridge_global.loglevel <= 1) /*information*/ + console.log(request + ' - onload ' + http.status + ' ' + http.statusText); + + if (onresponse) + { + var responseLength = 0; + if (!!http.response) + responseLength = http.response.byteLength; + + Module['dynCall_viiiii'](onresponse, request, http.status, 0, responseLength, 0); + } + }; + + if (onerror) + { + http.onerror = function http_onerror(e) { + function HandleError(err) + { + var length = lengthBytesUTF8(err) + 1; + var buffer = _malloc(length); + + stringToUTF8Array(err, HEAPU8, buffer, length); + + Module['dynCall_vii'](onerror, request, buffer); + + _free(buffer); + } + + if (e.error) + HandleError(e.error); + else + HandleError("Unknown Error! Maybe a CORS porblem?"); + }; + } + + if (ontimeout) + http.ontimeout = function http_onerror(e) { + Module['dynCall_vi'](ontimeout, request); + }; + + if (onaborted) + http.onabort = function http_onerror(e) { + Module['dynCall_vi'](onaborted, request); + }; + }, + + XHR_SetProgressHandler: function (request, onprogress, onuploadprogress) + { + if (_best_http_request_bridge_global.loglevel <= 1) /*information*/ + console.log(request + ' XHR_SetProgressHandler'); + + var http = _best_http_request_bridge_global.requestInstances[request]; + if (http) + { + if (onprogress) + http.onprogress = function http_onprogress(e) { + if (_best_http_request_bridge_global.loglevel <= 1) /*information*/ + console.log(request + ' XHR_SetProgressHandler - onProgress ' + e.loaded + ' ' + e.total); + + if (e.lengthComputable) + Module['dynCall_viii'](onprogress, request, e.loaded, e.total); + }; + + if (onuploadprogress) + http.upload.addEventListener("progress", function http_onprogress(e) { + if (_best_http_request_bridge_global.loglevel <= 1) /*information*/ + console.log(request + ' XHR_SetProgressHandler - onUploadProgress ' + e.loaded + ' ' + e.total); + + if (e.lengthComputable) + Module['dynCall_viii'](onuploadprogress, request, e.loaded, e.total); + }, true); + } + }, + + XHR_Send: function (request, ptr, length) + { + if (_best_http_request_bridge_global.loglevel <= 1) /*information*/ + console.log(request + ' XHR_Send ' + ptr + ' ' + length); + + var http = _best_http_request_bridge_global.requestInstances[request]; + + try { + if (length > 0) + http.send(HEAPU8.subarray(ptr, ptr+length)); + else + http.send(); + } + catch(e) { + if (_best_http_request_bridge_global.loglevel <= 4) /*exception*/ + console.error(request + ' ' + e.name + ": " + e.message); + } + }, + + XHR_GetResponseHeaders: function(request, callback) + { + if (_best_http_request_bridge_global.loglevel <= 1) /*information*/ + console.log(request + ' XHR_GetResponseHeaders'); + + var headers = '' + var cookies = document.cookie.split(';'); + for(var i = 0; i < cookies.length; ++i) { + const cookie = cookies[i].trim(); + + if (cookie.length > 0) + headers += "Set-Cookie:" + cookie + "\r\n"; + } + + var additionalHeaders = _best_http_request_bridge_global.requestInstances[request].getAllResponseHeaders().trim(); + if (additionalHeaders.length > 0) { + headers += additionalHeaders; + headers += "\r\n"; + } + + headers += "\r\n"; + + if (_best_http_request_bridge_global.loglevel <= 1) /*information*/ + console.log(' "' + headers + '"'); + + var byteArray = new Uint8Array(headers.length); + for(var i=0,j=headers.length;i 0) + // ws._callOnError(onError, id, e.reason); + // else + // { + // switch (e.code) + // { + // case 1001: ws._callOnError(onError, id, "Endpoint going away."); + // break; + // case 1002: ws._callOnError(onError, id, "Protocol error."); + // break; + // case 1003: ws._callOnError(onError, id, "Unsupported message."); + // break; + // case 1005: ws._callOnError(onError, id, "No status."); + // break; + // case 1006: ws._callOnError(onError, id, "Abnormal disconnection."); + // break; + // case 1009: ws._callOnError(onError, id, "Data frame too large."); + // break; + // default: ws._callOnError(onError, id, "Error " + e.code); + // } + // } + //} + //else + ws._callOnClose(onClose, id, e.code, e.reason); + }; + + return ws.Set(socket); + }, + + WS_GetState: function (id) + { + var socket = ws.Get(id); + + if (typeof socket === 'undefined' || + socket == null || + typeof socket.socketImpl === 'undefined' || + socket.socketImpl == null) + return 3; // closed + + return socket.socketImpl.readyState; + }, + + WS_GetBufferedAmount: function (id) + { + var socket = ws.Get(id); + return socket.socketImpl.bufferedAmount; + }, + + WS_Send_String: function (id, ptr, pos, length) + { + var socket = ws.Get(id); + + var startPtr = ptr + pos; + var endPtr = startPtr + length; + + var UTF8Decoder = new TextDecoder('utf8'); + var str = UTF8Decoder.decode(HEAPU8.subarray ? HEAPU8.subarray(startPtr, endPtr) : new Uint8Array(HEAPU8.slice(startPtr, endPtr))); + + try + { + socket.socketImpl.send(str); + } + catch(e) { + ws._callOnError(socket.onError, id, ' ' + e.name + ': ' + e.message); + } + + return socket.socketImpl.bufferedAmount; + }, + + WS_Send_Binary: function(id, ptr, pos, length) + { + var socket = ws.Get(id); + + try + { + var buff = HEAPU8.subarray(ptr + pos, ptr + pos + length); + socket.socketImpl.send(buff /*HEAPU8.buffer.slice(ptr + pos, ptr + pos + length)*/); + } + catch(e) { + ws._callOnError(socket.onError, id, ' ' + e.name + ': ' + e.message); + } + + return socket.socketImpl.bufferedAmount; + }, + + WS_Close: function (id, code, reason) + { + var socket = ws.Get(id); + var reasonStr = UTF8ToString(reason); + + console.log(id + ' WS_Close(' + code + ', ' + reasonStr + ')'); + + socket.socketImpl.close(/*ulong*/code, reasonStr); + }, + + WS_Release: function(id) + { + console.log(id + ' WS_Release'); + + ws.Remove(id); + } +}; + +autoAddDeps(Lib_BEST_HTTP_WebGL_WS_Bridge, '$ws'); +mergeInto(LibraryManager.library, Lib_BEST_HTTP_WebGL_WS_Bridge); diff --git a/GQ_URP/GQ/Assets/Best HTTP/Plugins/WebGL/BestHTTP_WebSocket.jslib.meta b/GQ_URP/GQ/Assets/Best HTTP/Plugins/WebGL/BestHTTP_WebSocket.jslib.meta new file mode 100644 index 000000000..3ddde4a3b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Plugins/WebGL/BestHTTP_WebSocket.jslib.meta @@ -0,0 +1,21 @@ +fileFormatVersion: 2 +guid: 8efe6cedf2832a647a33465b85e4f311 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + WebGL: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/ReleaseNotes.txt b/GQ_URP/GQ/Assets/Best HTTP/ReleaseNotes.txt new file mode 100644 index 000000000..1e03da6c8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/ReleaseNotes.txt @@ -0,0 +1 @@ +Release notes can be read online here: https://benedicht.github.io/BestHTTP-Documentation/#changelog/ \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/ReleaseNotes.txt.meta b/GQ_URP/GQ/Assets/Best HTTP/ReleaseNotes.txt.meta new file mode 100644 index 000000000..b364ce40a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/ReleaseNotes.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 378c871e816aa904cacfe5043f5354f4 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source.meta b/GQ_URP/GQ/Assets/Best HTTP/Source.meta new file mode 100644 index 000000000..958753b8d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dc57aabb2dd648642bdfb021906367b1 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication.meta new file mode 100644 index 000000000..37d02f005 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e9dc42aeefc20544bb572bce27e3b7b1 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication/Credentials.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication/Credentials.cs new file mode 100644 index 000000000..4d87cdee5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication/Credentials.cs @@ -0,0 +1,63 @@ +namespace BestHTTP.Authentication +{ + /// + /// Authentication types that supported by BestHTTP. + /// The authentication is defined by the server, so the Basic and Digest are not interchangeable. If you don't know what to use, the preferred way is to choose Unknow. + /// + public enum AuthenticationTypes + { + /// + /// If the authentication type is not known this will do a challenge turn to receive what methode should be choosen. + /// + Unknown, + + /// + /// The most basic authentication type. It's easy to do, and easy to crack. ;) + /// + Basic, + + /// + /// + /// + Digest + } + + /// + /// Hold all information that required to authenticate to a remote server. + /// + public sealed class Credentials + { + /// + /// The type of the Authentication. If you don't know what to use, the preferred way is to choose Unknow. + /// + public AuthenticationTypes Type { get; private set; } + + /// + /// The username to authenticate on the remote server. + /// + public string UserName { get; private set; } + + /// + /// The password to use in the authentication process. The password will be stored only in this class. + /// + public string Password { get; private set; } + + /// + /// Set up the authentication credentials with the username and password. The Type will be set to Unknown. + /// + public Credentials(string userName, string password) + :this(AuthenticationTypes.Unknown, userName, password) + { + } + + /// + /// Set up the authentication credentials with the given authentication type, username and password. + /// + public Credentials(AuthenticationTypes type, string userName, string password) + { + this.Type = type; + this.UserName = userName; + this.Password = password; + } + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication/Credentials.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication/Credentials.cs.meta new file mode 100644 index 000000000..06dea042b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication/Credentials.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a6a6217993b733a4e8555355d5d62776 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication/Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication/Digest.cs new file mode 100644 index 000000000..396acf252 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication/Digest.cs @@ -0,0 +1,281 @@ +using System; +using System.Collections.Generic; + +namespace BestHTTP.Authentication +{ + using BestHTTP.Extensions; + using BestHTTP.PlatformSupport.Memory; + using System.Text; + + /// + /// Internal class that stores all information that received from a server in a WWW-Authenticate and need to construct a valid Authorization header. Based on rfc 2617 (http://tools.ietf.org/html/rfc2617). + /// Used only internally by the plugin. + /// + public sealed class Digest + { + #region Public Properties + + /// + /// The Uri that this Digest is bound to. + /// + public Uri Uri { get; private set; } + + public AuthenticationTypes Type { get; private set; } + + /// + /// A string to be displayed to users so they know which username and password to use. + /// This string should contain at least the name of the host performing the authentication and might additionally indicate the collection of users who might have access. + /// + public string Realm { get; private set; } + + /// + /// A flag, indicating that the previous request from the client was rejected because the nonce value was stale. + /// If stale is TRUE (case-insensitive), the client may wish to simply retry the request with a new encrypted response, without the user for a new username and password. + /// The server should only set stale to TRUE if it receives a request for which the nonce is invalid but with a valid digest for that nonce + /// (indicating that the client knows the correct username/password). + /// If stale is FALSE, or anything other than TRUE, or the stale directive is not present, the username and/or password are invalid, and new values must be obtained. + /// + public bool Stale { get; private set; } + + #endregion + + #region Private Properties + + /// + /// A server-specified data string which should be uniquely generated each time a 401 response is made. + /// Specifically, since the string is passed in the header lines as a quoted string, the double-quote character is not allowed. + /// + private string Nonce { get; set; } + + /// + /// A string of data, specified by the server, which should be returned by the client unchanged in the Authorization header of subsequent requests with URIs in the same protection space. + /// It is recommended that this string be base64 or data. + /// + private string Opaque { get; set; } + + /// + /// A string indicating a pair of algorithms used to produce the digest and a checksum. If this is not present it is assumed to be "MD5". + /// If the algorithm is not understood, the challenge should be ignored (and a different one used, if there is more than one). + /// + private string Algorithm { get; set; } + + /// + /// List of URIs, as specified in RFC XURI, that define the protection space. + /// If a URI is an abs_path, it is relative to the canonical root URL (see section 1.2 above) of the server being accessed. + /// An absoluteURI in this list may refer to a different server than the one being accessed. + /// The client can use this list to determine the set of URIs for which the same authentication information may be sent: + /// any URI that has a URI in this list as a prefix (after both have been made absolute) may be assumed to be in the same protection space. + /// If this directive is omitted or its value is empty, the client should assume that the protection space consists of all URIs on the responding server. + /// + public List ProtectedUris { get; private set; } + + /// + /// If present, it is a quoted string of one or more tokens indicating the "quality of protection" values supported by the server. + /// The value "auth" indicates authentication. The value "auth-int" indicates authentication with integrity protection. + /// + private string QualityOfProtections { get; set; } + + /// + /// his MUST be specified if a qop directive is sent (see above), and MUST NOT be specified if the server did not send a qop directive in the WWW-Authenticate header field. + /// The nc-value is the hexadecimal count of the number of requests (including the current request) that the client has sent with the nonce value in this request. + /// + private int NonceCount { get; set; } + + /// + /// Used to store the last HA1 that can be used in the next header generation when Algorithm is set to "md5-sess". + /// + private string HA1Sess { get; set; } + + #endregion + + internal Digest(Uri uri) + { + this.Uri = uri; + this.Algorithm = "md5"; + } + + /// + /// Parses a WWW-Authenticate header's value to retrive all information. + /// + public void ParseChallange(string header) + { + // Reset some values to its defaults. + this.Type = AuthenticationTypes.Unknown; + this.Stale = false; + this.Opaque = null; + this.HA1Sess = null; + this.NonceCount = 0; + this.QualityOfProtections = null; + + if (this.ProtectedUris != null) + this.ProtectedUris.Clear(); + + // Parse the header + WWWAuthenticateHeaderParser qpl = new WWWAuthenticateHeaderParser(header); + + // Then process + foreach (var qp in qpl.Values) + switch (qp.Key) + { + case "basic": this.Type = AuthenticationTypes.Basic; break; + case "digest": this.Type = AuthenticationTypes.Digest; break; + case "realm": this.Realm = qp.Value; break; + case "domain": + { + if (string.IsNullOrEmpty(qp.Value) || qp.Value.Length == 0) + break; + + if (this.ProtectedUris == null) + this.ProtectedUris = new List(); + + int idx = 0; + string val = qp.Value.Read(ref idx, ' '); + do + { + this.ProtectedUris.Add(val); + val = qp.Value.Read(ref idx, ' '); + } while (idx < qp.Value.Length); + + break; + } + case "nonce": this.Nonce = qp.Value; break; + case "qop": this.QualityOfProtections = qp.Value; break; + case "stale": this.Stale = bool.Parse(qp.Value); break; + case "opaque": this.Opaque = qp.Value; break; + case "algorithm": this.Algorithm = qp.Value; break; + } + } + + /// + /// Generates a string that can be set to an Authorization header. + /// + public string GenerateResponseHeader(HTTPRequest request, Credentials credentials, bool isProxy = false) + { + try + { + switch (Type) + { + case AuthenticationTypes.Basic: + return string.Concat("Basic ", Convert.ToBase64String(Encoding.UTF8.GetBytes(string.Format("{0}:{1}", credentials.UserName, credentials.Password)))); + + case AuthenticationTypes.Digest: + { + NonceCount++; + + string HA1 = string.Empty; + + // The cnonce-value is an opaque quoted string value provided by the client and used by both client and server to avoid chosen plaintext attacks, to provide mutual + // authentication, and to provide some message integrity protection. + string cnonce = new System.Random(request.GetHashCode()).Next(int.MinValue, int.MaxValue).ToString("X8"); + + string ncvalue = NonceCount.ToString("X8"); + switch (Algorithm.TrimAndLower()) + { + case "md5": + HA1 = string.Format("{0}:{1}:{2}", credentials.UserName, Realm, credentials.Password).CalculateMD5Hash(); + break; + + case "md5-sess": + if (string.IsNullOrEmpty(this.HA1Sess)) + this.HA1Sess = string.Format("{0}:{1}:{2}:{3}:{4}", credentials.UserName, Realm, credentials.Password, Nonce, ncvalue).CalculateMD5Hash(); + HA1 = this.HA1Sess; + break; + + default: //throw new NotSupportedException("Not supported hash algorithm found in Web Authentication: " + Algorithm); + return string.Empty; + } + + // A string of 32 hex digits, which proves that the user knows a password. Set according to the qop value. + string response = string.Empty; + + // The server sent QoP-value can be a list of supported methodes(if sent at all - in this case it's null). + // The rfc is not specify that this is a space or comma separeted list. So it can be "auth, auth-int" or "auth auth-int". + // We will first check the longer value("auth-int") then the short one ("auth"). If one matches we will reset the qop to the exact value. + string qop = this.QualityOfProtections != null ? this.QualityOfProtections.TrimAndLower() : null; + + // When we authenticate with a proxy and we want to tunnel the request, we have to use the CONNECT method instead of the + // request's, as the proxy will not know about the request itself. + string method = isProxy ? "CONNECT" : request.MethodType.ToString().ToUpper(); + + // When we authenticate with a proxy and we want to tunnel the request, the uri must match what we are sending in the CONNECT request's + // Host header. + string uri = isProxy ? request.CurrentUri.Host + ":" + request.CurrentUri.Port : request.CurrentUri.GetRequestPathAndQueryURL(); + + if (qop == null) + { + string HA2 = string.Concat(request.MethodType.ToString().ToUpper(), ":", request.CurrentUri.GetRequestPathAndQueryURL()).CalculateMD5Hash(); + response = string.Format("{0}:{1}:{2}", HA1, Nonce, HA2).CalculateMD5Hash(); + } + else if (qop.Contains("auth-int")) + { + qop = "auth-int"; + + byte[] entityBody = request.GetEntityBody(); + + if (entityBody == null) + entityBody = BufferPool.NoData; //string.Empty.GetASCIIBytes(); + + string HA2 = string.Format("{0}:{1}:{2}", method, uri, new BufferSegment(entityBody, 0, entityBody.Length).CalculateMD5Hash()).CalculateMD5Hash(); + + response = string.Format("{0}:{1}:{2}:{3}:{4}:{5}", HA1, Nonce, ncvalue, cnonce, qop, HA2).CalculateMD5Hash(); + } + else if (qop.Contains("auth")) + { + qop = "auth"; + string HA2 = string.Concat(method, ":", uri).CalculateMD5Hash(); + + response = string.Format("{0}:{1}:{2}:{3}:{4}:{5}", HA1, Nonce, ncvalue, cnonce, qop, HA2).CalculateMD5Hash(); + } + else //throw new NotSupportedException("Unrecognized Quality of Protection value found: " + this.QualityOfProtections); + return string.Empty; + + string result = string.Format("Digest username=\"{0}\", realm=\"{1}\", nonce=\"{2}\", uri=\"{3}\", cnonce=\"{4}\", response=\"{5}\"", + credentials.UserName, Realm, Nonce, uri, cnonce, response); + + if (qop != null) + result += String.Concat(", qop=\"", qop, "\", nc=", ncvalue); + + if (!string.IsNullOrEmpty(Opaque)) + result = String.Concat(result, ", opaque=\"", Opaque, "\""); + + return result; + }// end of case "digest": + + default: + break; + } + } + catch + { + } + + return string.Empty; + } + + public bool IsUriProtected(Uri uri) + { + // http://tools.ietf.org/html/rfc2617#section-3.2.1 + // An absoluteURI in this list may refer to + // a different server than the one being accessed. The client can use + // this list to determine the set of URIs for which the same + // authentication information may be sent: any URI that has a URI in + // this list as a prefix (after both have been made absolute) may be + // assumed to be in the same protection space. If this directive is + // omitted or its value is empty, the client should assume that the + // protection space consists of all URIs on the responding server. + + if (string.CompareOrdinal(uri.Host, this.Uri.Host) != 0) + return false; + + string uriStr = uri.ToString(); + + if (ProtectedUris != null && ProtectedUris.Count > 0) + for (int i = 0; i < ProtectedUris.Count; ++i) + if (uriStr.Contains(ProtectedUris[i])) + return true; + + + return true; + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication/Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication/Digest.cs.meta new file mode 100644 index 000000000..869c59649 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication/Digest.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 424d976119ee3fc438fe98095013859f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication/DigestStore.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication/DigestStore.cs new file mode 100644 index 000000000..3bf83510d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication/DigestStore.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; + +using BestHTTP.PlatformSupport.Threading; + +namespace BestHTTP.Authentication +{ + /// + /// Stores and manages already received digest infos. + /// + public static class DigestStore + { + private static Dictionary Digests = new Dictionary(); + + private static System.Threading.ReaderWriterLockSlim rwLock = new System.Threading.ReaderWriterLockSlim(System.Threading.LockRecursionPolicy.NoRecursion); + + /// + /// Array of algorithms that the plugin supports. It's in the order of priority(first has the highest priority). + /// + private static string[] SupportedAlgorithms = new string[] { "digest", "basic" }; + + public static Digest Get(Uri uri) + { + using (new ReadLock(rwLock)) + { + Digest digest = null; + if (Digests.TryGetValue(uri.Host, out digest)) + if (!digest.IsUriProtected(uri)) + return null; + return digest; + } + } + + /// + /// It will retrieve or create a new Digest for the given Uri. + /// + /// + /// + public static Digest GetOrCreate(Uri uri) + { + using (new WriteLock(rwLock)) + { + Digest digest = null; + if (!Digests.TryGetValue(uri.Host, out digest)) + Digests.Add(uri.Host, digest = new Digest(uri)); + return digest; + } + } + + public static void Remove(Uri uri) + { + using (new WriteLock(rwLock)) + Digests.Remove(uri.Host); + } + + public static string FindBest(List authHeaders) + { + if (authHeaders == null || authHeaders.Count == 0) + return string.Empty; + + List headers = new List(authHeaders.Count); + for (int i = 0; i < authHeaders.Count; ++i) + headers.Add(authHeaders[i].ToLower()); + + for (int i = 0; i < SupportedAlgorithms.Length; ++i) + { + int idx = headers.FindIndex((header) => header.StartsWith(SupportedAlgorithms[i])); + if (idx != -1) + return authHeaders[idx]; + } + + return string.Empty; + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication/DigestStore.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication/DigestStore.cs.meta new file mode 100644 index 000000000..280472e7c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Authentication/DigestStore.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0f808b023553ee2419249f92eb8ac31f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Caching.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Caching.meta new file mode 100644 index 000000000..319ec4f6a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Caching.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 26e64cd0d1567634fb40b1386ba0c48d +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheFileInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheFileInfo.cs new file mode 100644 index 000000000..ef73c11a2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheFileInfo.cs @@ -0,0 +1,501 @@ +#if !BESTHTTP_DISABLE_CACHING + +using System; +using System.Collections.Generic; +using System.IO; + +namespace BestHTTP.Caching +{ + using BestHTTP.Extensions; + using BestHTTP.PlatformSupport.FileSystem; + + /// + /// Holds all metadata that need for efficient caching, so we don't need to touch the disk to load headers. + /// + public class HTTPCacheFileInfo : IComparable + { + #region Properties + + /// + /// The uri that this HTTPCacheFileInfo belongs to. + /// + public Uri Uri { get; private set; } + + /// + /// The last access time to this cache entity. The date is in UTC. + /// + public DateTime LastAccess { get; private set; } + + /// + /// The length of the cache entity's body. + /// + public int BodyLength { get; internal set; } + + /// + /// ETag of the entity. + /// + public string ETag { get; private set; } + + /// + /// LastModified date of the entity. + /// + public string LastModified { get; private set; } + + /// + /// When the cache will expire. + /// + public DateTime Expires { get; private set; } + + /// + /// The age that came with the response + /// + public long Age { get; private set; } + + /// + /// Maximum how long the entry should served from the cache without revalidation. + /// + public long MaxAge { get; private set; } + + /// + /// The Date that came with the response. + /// + public DateTime Date { get; private set; } + + /// + /// Indicates whether the entity must be revalidated with the server or can be serverd directly from the cache without touching the server when the content is considered stale. + /// + public bool MustRevalidate { get; private set; } + + /// + /// If it's true, the client always have to revalidate the cached content when it's stale. + /// + public bool NoCache { get; private set; } + + /// + /// It's a grace period to serve staled content without revalidation. + /// + public long StaleWhileRevalidate { get; private set; } + + /// + /// Allows the client to serve stale content if the server responds with an 5xx error. + /// + public long StaleIfError { get; private set; } + + /// + /// The date and time when the HTTPResponse received. + /// + public DateTime Received { get; private set; } + + /// + /// Cached path. + /// + public string ConstructedPath { get; private set; } + + /// + /// This is the index of the entity. Filenames are generated from this value. + /// + internal UInt64 MappedNameIDX { get; private set; } + + #endregion + + #region Constructors + + internal HTTPCacheFileInfo(Uri uri) + :this(uri, DateTime.UtcNow, -1) + { + } + + internal HTTPCacheFileInfo(Uri uri, DateTime lastAcces, int bodyLength) + { + this.Uri = uri; + this.LastAccess = lastAcces; + this.BodyLength = bodyLength; + this.MaxAge = -1; + + this.MappedNameIDX = HTTPCacheService.GetNameIdx(); + } + + internal HTTPCacheFileInfo(Uri uri, System.IO.BinaryReader reader, int version) + { + this.Uri = uri; + this.LastAccess = DateTime.FromBinary(reader.ReadInt64()); + this.BodyLength = reader.ReadInt32(); + + switch(version) + { + case 3: + this.NoCache = reader.ReadBoolean(); + this.StaleWhileRevalidate = reader.ReadInt64(); + this.StaleIfError = reader.ReadInt64(); + goto case 2; + + case 2: + this.MappedNameIDX = reader.ReadUInt64(); + goto case 1; + + case 1: + { + this.ETag = reader.ReadString(); + this.LastModified = reader.ReadString(); + this.Expires = DateTime.FromBinary(reader.ReadInt64()); + this.Age = reader.ReadInt64(); + this.MaxAge = reader.ReadInt64(); + this.Date = DateTime.FromBinary(reader.ReadInt64()); + this.MustRevalidate = reader.ReadBoolean(); + this.Received = DateTime.FromBinary(reader.ReadInt64()); + break; + } + } + } + + #endregion + + #region Helper Functions + + internal void SaveTo(System.IO.BinaryWriter writer) + { + // base + writer.Write(this.LastAccess.ToBinary()); + writer.Write(this.BodyLength); + + // version 3 + writer.Write(this.NoCache); + writer.Write(this.StaleWhileRevalidate); + writer.Write(this.StaleIfError); + + // version 2 + writer.Write(this.MappedNameIDX); + + // version 1 + writer.Write(this.ETag); + writer.Write(this.LastModified); + writer.Write(this.Expires.ToBinary()); + writer.Write(this.Age); + writer.Write(this.MaxAge); + writer.Write(this.Date.ToBinary()); + writer.Write(this.MustRevalidate); + writer.Write(this.Received.ToBinary()); + } + + public string GetPath() + { + if (ConstructedPath != null) + return ConstructedPath; + + return ConstructedPath = System.IO.Path.Combine(HTTPCacheService.CacheFolder, MappedNameIDX.ToString("X")); + } + + public bool IsExists() + { + if (!HTTPCacheService.IsSupported) + return false; + + return HTTPManager.IOService.FileExists(GetPath()); + } + + internal void Delete() + { + if (!HTTPCacheService.IsSupported) + return; + + string path = GetPath(); + try + { + HTTPManager.IOService.FileDelete(path); + } + catch + { } + finally + { + Reset(); + } + } + + private void Reset() + { + // MappedNameIDX will remain the same. When we re-save an entity, it will not reset the MappedNameIDX. + this.BodyLength = -1; + this.ETag = string.Empty; + this.Expires = DateTime.FromBinary(0); + this.LastModified = string.Empty; + this.Age = 0; + this.MaxAge = -1; + this.Date = DateTime.FromBinary(0); + this.MustRevalidate = false; + this.Received = DateTime.FromBinary(0); + this.NoCache = false; + this.StaleWhileRevalidate = 0; + this.StaleIfError = 0; + } + + #endregion + + #region Caching + + internal void SetUpCachingValues(HTTPResponse response) + { + response.CacheFileInfo = this; + + this.ETag = response.GetFirstHeaderValue("ETag").ToStr(this.ETag ?? string.Empty); + this.Expires = response.GetFirstHeaderValue("Expires").ToDateTime(this.Expires); + this.LastModified = response.GetFirstHeaderValue("Last-Modified").ToStr(this.LastModified ?? string.Empty); + + this.Age = response.GetFirstHeaderValue("Age").ToInt64(this.Age); + + this.Date = response.GetFirstHeaderValue("Date").ToDateTime(this.Date); + + List cacheControls = response.GetHeaderValues("cache-control"); + if (cacheControls != null && cacheControls.Count > 0) + { + // Merge all Cache-Control header values into one + string cacheControl = cacheControls[0]; + for (int i = 1; i < cacheControls.Count; ++i) + cacheControl += "," + cacheControls[i]; + + if (!string.IsNullOrEmpty(cacheControl)) + { + HeaderParser parser = new HeaderParser(cacheControl); + + if (parser.Values != null) + { + for (int i = 0; i < parser.Values.Count; ++i) + { + var kvp = parser.Values[i]; + + switch(kvp.Key.ToLowerInvariant()) + { + case "max-age": + if (kvp.HasValue) + { + // Some cache proxies will return float values + double maxAge; + if (double.TryParse(kvp.Value, out maxAge)) + this.MaxAge = (int)maxAge; + else + this.MaxAge = 0; + } + else + this.MaxAge = 0; + break; + + case "stale-while-revalidate": + this.StaleWhileRevalidate = kvp.HasValue ? kvp.Value.ToInt64(0) : 0; + break; + + case "stale-if-error": + this.StaleIfError = kvp.HasValue ? kvp.Value.ToInt64(0) : 0; + break; + + case "must-revalidate": + this.MustRevalidate = true; + break; + + case "no-cache": + this.NoCache = true; + break; + } + } + } + + //string[] options = cacheControl.ToLowerInvariant().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + // + //string[] kvp = options.FindOption("max-age"); + //if (kvp != null && kvp.Length > 1) + //{ + // // Some cache proxies will return float values + // double maxAge; + // if (double.TryParse(kvp[1], out maxAge)) + // this.MaxAge = (int)maxAge; + // else + // this.MaxAge = 0; + //} + //else + // this.MaxAge = 0; + // + //kvp = options.FindOption("stale-while-revalidate"); + //if (kvp != null && kvp.Length == 2 && !string.IsNullOrEmpty(kvp[1])) + // this.StaleWhileRevalidate = kvp[1].ToInt64(0); + // + //kvp = options.FindOption("stale-if-error"); + //if (kvp != null && kvp.Length == 2 && !string.IsNullOrEmpty(kvp[1])) + // this.StaleIfError = kvp[1].ToInt64(0); + // + //this.MustRevalidate = cacheControl.Contains("must-revalidate"); + //this.NoCache = cacheControl.Contains("no-cache"); + } + } + + this.Received = DateTime.UtcNow; + } + + /// + /// isInError should be true if downloading the content fails, and in that case, it might extend the content's freshness + /// + public bool WillExpireInTheFuture(bool isInError) + { + if (!IsExists()) + return false; + + // https://csswizardry.com/2019/03/cache-control-for-civilians/#no-cache + // no-cache will always hit the network as it has to revalidate with the server before it can release the browser’s cached copy (unless the server responds with a fresher response), + // but if the server responds favourably, the network transfer is only a file’s headers: the body can be grabbed from cache rather than redownloaded. + if (this.NoCache) + return false; + + // http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.2.4 : + // The max-age directive takes priority over Expires + if (MaxAge > 0) + { + // Age calculation: + // http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.2.3 + + long apparent_age = Math.Max(0, (long)(this.Received - this.Date).TotalSeconds); + long corrected_received_age = Math.Max(apparent_age, this.Age); + long resident_time = (long)(DateTime.UtcNow - this.Date).TotalSeconds; + long current_age = corrected_received_age + resident_time; + + long maxAge = this.MaxAge + (this.NoCache ? 0 : this.StaleWhileRevalidate) + (isInError ? this.StaleIfError : 0); + + return current_age < maxAge || this.Expires > DateTime.UtcNow; + } + + return this.Expires > DateTime.UtcNow; + } + + internal void SetUpRevalidationHeaders(HTTPRequest request) + { + if (!IsExists()) + return; + + // -If an entity tag has been provided by the origin server, MUST use that entity tag in any cache-conditional request (using If-Match or If-None-Match). + // -If only a Last-Modified value has been provided by the origin server, SHOULD use that value in non-subrange cache-conditional requests (using If-Modified-Since). + // -If both an entity tag and a Last-Modified value have been provided by the origin server, SHOULD use both validators in cache-conditional requests. This allows both HTTP/1.0 and HTTP/1.1 caches to respond appropriately. + + if (!string.IsNullOrEmpty(ETag)) + request.SetHeader("If-None-Match", ETag); + + if (!string.IsNullOrEmpty(LastModified)) + request.SetHeader("If-Modified-Since", LastModified); + } + + public System.IO.Stream GetBodyStream(out int length) + { + if (!IsExists()) + { + length = 0; + return null; + } + + length = BodyLength; + + LastAccess = DateTime.UtcNow; + + Stream stream = HTTPManager.IOService.CreateFileStream(GetPath(), FileStreamModes.OpenRead); + stream.Seek(-length, System.IO.SeekOrigin.End); + + return stream; + } + + internal void ReadResponseTo(HTTPRequest request) + { + if (!IsExists()) + return; + + LastAccess = DateTime.UtcNow; + + using (Stream stream = HTTPManager.IOService.CreateFileStream(GetPath(), FileStreamModes.OpenRead)) + { + request.Response = new HTTPResponse(request, stream, request.UseStreaming, true); + request.Response.CacheFileInfo = this; + request.Response.Receive(BodyLength); + } + } + + internal void Store(HTTPResponse response) + { + if (!HTTPCacheService.IsSupported) + return; + + string path = GetPath(); + + // Path name too long, we don't want to get exceptions + if (path.Length > HTTPManager.MaxPathLength) + return; + + if (HTTPManager.IOService.FileExists(path)) + Delete(); + + using (Stream writer = HTTPManager.IOService.CreateFileStream(GetPath(), FileStreamModes.Create)) + { + writer.WriteLine("HTTP/{0}.{1} {2} {3}", response.VersionMajor, response.VersionMinor, response.StatusCode, response.Message); + foreach (var kvp in response.Headers) + { + for (int i = 0; i < kvp.Value.Count; ++i) + writer.WriteLine("{0}: {1}", kvp.Key, kvp.Value[i]); + } + + writer.WriteLine(); + + writer.Write(response.Data, 0, response.Data.Length); + } + + BodyLength = response.Data.Length; + + LastAccess = DateTime.UtcNow; + + SetUpCachingValues(response); + } + + internal System.IO.Stream GetSaveStream(HTTPResponse response) + { + if (!HTTPCacheService.IsSupported) + return null; + + LastAccess = DateTime.UtcNow; + + string path = GetPath(); + + if (HTTPManager.IOService.FileExists(path)) + Delete(); + + // Path name too long, we don't want to get exceptions + if (path.Length > HTTPManager.MaxPathLength) + return null; + + // First write out the headers + using (Stream writer = HTTPManager.IOService.CreateFileStream(GetPath(), FileStreamModes.Create)) + { + writer.WriteLine("HTTP/1.1 {0} {1}", response.StatusCode, response.Message); + foreach (var kvp in response.Headers) + { + for (int i = 0; i < kvp.Value.Count; ++i) + writer.WriteLine("{0}: {1}", kvp.Key, kvp.Value[i]); + } + + writer.WriteLine(); + } + + // If caching is enabled and the response is from cache, and no content-length header set, then we set one to the response. + if (response.IsFromCache && !response.HasHeader("content-length")) + response.AddHeader("content-length", BodyLength.ToString()); + + SetUpCachingValues(response); + + // then create the stream with Append FileMode + return HTTPManager.IOService.CreateFileStream(GetPath(), FileStreamModes.Append); + } + + #endregion + + #region IComparable + + public int CompareTo(HTTPCacheFileInfo other) + { + return this.LastAccess.CompareTo(other.LastAccess); + } + + #endregion + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheFileInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheFileInfo.cs.meta new file mode 100644 index 000000000..7aa44aab9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheFileInfo.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1f50da5c22225384fbe271e0453fe545 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheFileLock.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheFileLock.cs new file mode 100644 index 000000000..21b0ed696 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheFileLock.cs @@ -0,0 +1,43 @@ +#if !BESTHTTP_DISABLE_CACHING + +using System; +using System.Collections.Generic; + +namespace BestHTTP.Caching +{ + //static class HTTPCacheFileLock + //{ + // private static Dictionary FileLocks = new Dictionary(); + // //private static object SyncRoot = new object(); + // private static System.Threading.ReaderWriterLockSlim rwLock = new System.Threading.ReaderWriterLockSlim(System.Threading.LockRecursionPolicy.NoRecursion); + // + // internal static object Acquire(Uri uri) + // { + // rwLock.EnterUpgradeableReadLock(); + // try + // { + // object fileLock; + // if (!FileLocks.TryGetValue(uri, out fileLock)) + // { + // rwLock.EnterWriteLock(); + // try + // { + // FileLocks.Add(uri, fileLock = new object()); + // } + // finally + // { + // rwLock.ExitWriteLock(); + // } + // } + // + // return fileLock; + // } + // finally + // { + // rwLock.ExitUpgradeableReadLock(); + // } + // } + //} +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheFileLock.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheFileLock.cs.meta new file mode 100644 index 000000000..5ee7d6ed7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheFileLock.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7b141dab023cd9d438e0585b93cf2826 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheMaintananceParams.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheMaintananceParams.cs new file mode 100644 index 000000000..ffffd96e1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheMaintananceParams.cs @@ -0,0 +1,27 @@ +#if !BESTHTTP_DISABLE_CACHING + +using System; + +namespace BestHTTP.Caching +{ + public sealed class HTTPCacheMaintananceParams + { + /// + /// Delete cache entries that accessed older then this value. If TimeSpan.FromSeconds(0) is used then all cache entries will be deleted. With TimeSpan.FromDays(2) entries that older then two days will be deleted. + /// + public TimeSpan DeleteOlder { get; private set; } + + /// + /// If the cache is larger then the MaxCacheSize after the first maintanance step, then the maintanance job will forcedelete cache entries starting with the oldest last accessed one. + /// + public ulong MaxCacheSize { get; private set; } + + public HTTPCacheMaintananceParams(TimeSpan deleteOlder, ulong maxCacheSize) + { + this.DeleteOlder = deleteOlder; + this.MaxCacheSize = maxCacheSize; + } + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheMaintananceParams.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheMaintananceParams.cs.meta new file mode 100644 index 000000000..0d3225b70 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheMaintananceParams.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3ce5552e539e38647a8f37ab36951bf7 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheService.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheService.cs new file mode 100644 index 000000000..5c79d3629 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheService.cs @@ -0,0 +1,838 @@ +#if !BESTHTTP_DISABLE_CACHING + +using System; +using System.Collections.Generic; +using System.Threading; + +// +// Version 1: Initial release +// Version 2: Filenames are generated from an index. +// + +namespace BestHTTP.Caching +{ + using BestHTTP.Core; + using BestHTTP.Extensions; + using BestHTTP.PlatformSupport.FileSystem; + using BestHTTP.PlatformSupport.Threading; + + public sealed class UriComparer : IEqualityComparer + { + public bool Equals(Uri x, Uri y) + { + return Uri.Compare(x, y, UriComponents.HttpRequestUrl, UriFormat.SafeUnescaped, StringComparison.Ordinal) == 0; + } + + public int GetHashCode(Uri uri) + { + return uri.ToString().GetHashCode(); + } + } + + + public static class HTTPCacheService + { + #region Properties & Fields + + /// + /// Library file-format versioning support + /// + private const int LibraryVersion = 3; + + public static bool IsSupported + { + get + { + if (IsSupportCheckDone) + return isSupported; + + try + { +#if UNITY_WEBGL && !UNITY_EDITOR + // Explicitly disable cahing under WebGL + isSupported = false; +#else + // If DirectoryExists throws an exception we will set IsSupprted to false + HTTPManager.IOService.DirectoryExists(HTTPManager.GetRootCacheFolder()); + isSupported = true; +#endif + } + catch + { + isSupported = false; + + HTTPManager.Logger.Warning("HTTPCacheService", "Cache Service Disabled!"); + } + finally + { + IsSupportCheckDone = true; + } + + return isSupported; + } + } + private static bool isSupported; + private static bool IsSupportCheckDone; + + private static Dictionary library; + + private static ReaderWriterLockSlim rwLock = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion); + + private static Dictionary UsedIndexes = new Dictionary(); + + internal static string CacheFolder { get; private set; } + private static string LibraryPath { get; set; } + + private volatile static bool InClearThread; + private volatile static bool InMaintainenceThread; + + /// + /// This property returns true while the service is in a Clear or Maintenance thread. + /// + public static bool IsDoingMaintainence { get { return InClearThread || InMaintainenceThread; } } + + /// + /// Stores the index of the next stored entity. The entity's file name is generated from this index. + /// + private static UInt64 NextNameIDX; + +#endregion + + static HTTPCacheService() + { + NextNameIDX = 0x0001; + } + +#region Common Functions + + internal static void CheckSetup() + { + if (!HTTPCacheService.IsSupported) + return; + + try + { + SetupCacheFolder(); + LoadLibrary(); + } + catch + { } + } + + internal static void SetupCacheFolder() + { + if (!HTTPCacheService.IsSupported) + return; + + try + { + if (string.IsNullOrEmpty(CacheFolder) || string.IsNullOrEmpty(LibraryPath)) + { + CacheFolder = System.IO.Path.Combine(HTTPManager.GetRootCacheFolder(), "HTTPCache"); + if (!HTTPManager.IOService.DirectoryExists(CacheFolder)) + HTTPManager.IOService.DirectoryCreate(CacheFolder); + + LibraryPath = System.IO.Path.Combine(HTTPManager.GetRootCacheFolder(), "Library"); + } + } + catch + { + isSupported = false; + + HTTPManager.Logger.Warning("HTTPCacheService", "Cache Service Disabled!"); + } + } + + internal static UInt64 GetNameIdx() + { + UInt64 result = NextNameIDX; + + do + { + NextNameIDX = ++NextNameIDX % UInt64.MaxValue; + } while (UsedIndexes.ContainsKey(NextNameIDX)); + + return result; + } + + public static bool HasEntity(Uri uri) + { + if (!IsSupported) + return false; + + CheckSetup(); + + using (new ReadLock(rwLock)) + return library.ContainsKey(uri); + } + + public static bool DeleteEntity(Uri uri, bool removeFromLibrary = true) + { + if (!IsSupported) + return false; + + // 2019.05.10: Removed all locking except the one on the library. + + CheckSetup(); + + using (new WriteLock(rwLock)) + { + DeleteEntityImpl(uri, removeFromLibrary, false); + + return true; + } + } + + private static void DeleteEntityImpl(Uri uri, bool removeFromLibrary = true, bool useLocking = false) + { + HTTPCacheFileInfo info; + bool inStats = library.TryGetValue(uri, out info); + if (inStats) + info.Delete(); + + if (inStats && removeFromLibrary) + { + if (useLocking) + rwLock.EnterWriteLock(); + try + { + library.Remove(uri); + UsedIndexes.Remove(info.MappedNameIDX); + } + finally + { + if (useLocking) + rwLock.ExitWriteLock(); + } + } + + PluginEventHelper.EnqueuePluginEvent(new PluginEventInfo(PluginEvents.SaveCacheLibrary)); + } + + internal static bool IsCachedEntityExpiresInTheFuture(HTTPRequest request) + { + if (!IsSupported || request.DisableCache) + return false; + + CheckSetup(); + + HTTPCacheFileInfo info = null; + + using (new ReadLock(rwLock)) + { + if (!library.TryGetValue(request.CurrentUri, out info)) + return false; + } + + return info.WillExpireInTheFuture(request.State == HTTPRequestStates.ConnectionTimedOut || + request.State == HTTPRequestStates.TimedOut || + request.State == HTTPRequestStates.Error || + (request.State == HTTPRequestStates.Finished && request.Response != null && request.Response.StatusCode >= 500)); + } + + /// + /// Utility function to set the cache control headers according to the spec.: http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.3.4 + /// + /// + internal static void SetHeaders(HTTPRequest request) + { + if (!IsSupported) + return; + + CheckSetup(); + + request.RemoveHeader("If-None-Match"); + request.RemoveHeader("If-Modified-Since"); + + HTTPCacheFileInfo info = null; + + using (new ReadLock(rwLock)) + { + if (!library.TryGetValue(request.CurrentUri, out info)) + return; + } + + info.SetUpRevalidationHeaders(request); + } + +#endregion + +#region Get Functions + + public static HTTPCacheFileInfo GetEntity(Uri uri) + { + if (!IsSupported) + return null; + + CheckSetup(); + + HTTPCacheFileInfo info = null; + + using (new ReadLock(rwLock)) + library.TryGetValue(uri, out info); + + return info; + } + + internal static void GetFullResponse(HTTPRequest request) + { + if (!IsSupported) + return; + + CheckSetup(); + + HTTPCacheFileInfo info = null; + + using (new ReadLock(rwLock)) + { + if (!library.TryGetValue(request.CurrentUri, out info)) + return; + + info.ReadResponseTo(request); + } + } + +#endregion + +#region Storing + + /// + /// Checks if the given response can be cached. http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.4 + /// + /// Returns true if cacheable, false otherwise. + internal static bool IsCacheble(Uri uri, HTTPMethods method, HTTPResponse response) + { + if (!IsSupported) + return false; + + if (method != HTTPMethods.Get) + return false; + + if (response == null) + return false; + + // https://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.12 - Cache Replacement + // It MAY insert it into cache storage and MAY, if it meets all other requirements, use it to respond to any future requests that would previously have caused the old response to be returned. + //if (response.StatusCode == 304) + // return false; + + // Partial response + if (response.StatusCode == 206) + return false; + + if (response.StatusCode < 200 || response.StatusCode >= 400) + return false; + + //http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.2 + bool hasValidMaxAge = false; + var cacheControls = response.GetHeaderValues("cache-control"); + if (cacheControls != null) + { + if (cacheControls.Exists(headerValue => + { + HeaderParser parser = new HeaderParser(headerValue); + if (parser.Values != null && parser.Values.Count > 0) { + for (int i = 0; i < parser.Values.Count; ++i) + { + var value = parser.Values[i]; + + // https://csswizardry.com/2019/03/cache-control-for-civilians/#no-store + if (value.Key == "no-store") + return true; + + if (value.Key == "max-age" && value.HasValue) + { + double maxAge; + if (double.TryParse(value.Value, out maxAge)) + { + // A negative max-age value is a no cache + if (maxAge <= 0) + return true; + hasValidMaxAge = true; + } + } + } + } + + return false; + })) + return false; + } + + var pragmas = response.GetHeaderValues("pragma"); + if (pragmas != null) + { + if (pragmas.Exists(headerValue => + { + string value = headerValue.ToLower(); + return value.Contains("no-store") || value.Contains("no-cache"); + })) + return false; + } + + // Responses with byte ranges not supported yet. + var byteRanges = response.GetHeaderValues("content-range"); + if (byteRanges != null) + return false; + + // Store only if at least one caching header with proper value present + + var etag = response.GetFirstHeaderValue("ETag"); + if (!string.IsNullOrEmpty(etag)) + return true; + + var expires = response.GetFirstHeaderValue("Expires").ToDateTime(DateTime.FromBinary(0)); + if (expires >= DateTime.UtcNow) + return true; + + if (response.GetFirstHeaderValue("Last-Modified") != null) + return true; + + return hasValidMaxAge; + } + + internal static HTTPCacheFileInfo Store(Uri uri, HTTPMethods method, HTTPResponse response) + { + if (response == null || response.Data == null || response.Data.Length == 0) + return null; + + if (!IsSupported) + return null; + + CheckSetup(); + + HTTPCacheFileInfo info = null; + + using (new WriteLock(rwLock)) + { + if (!library.TryGetValue(uri, out info)) + { + library.Add(uri, info = new HTTPCacheFileInfo(uri)); + UsedIndexes.Add(info.MappedNameIDX, info); + } + + try + { + info.Store(response); + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("HTTPCacheService", string.Format("{0} - Saved to cache", uri.ToString()), response.baseRequest.Context); + } + catch + { + // If something happens while we write out the response, than we will delete it because it might be in an invalid state. + DeleteEntityImpl(uri); + + throw; + } + } + + return info; + } + + internal static void SetUpCachingValues(Uri uri, HTTPResponse response) + { + if (!IsSupported) + return; + + CheckSetup(); + + using (new WriteLock(rwLock)) + { + HTTPCacheFileInfo info = null; + if (!library.TryGetValue(uri, out info)) + { + library.Add(uri, info = new HTTPCacheFileInfo(uri)); + UsedIndexes.Add(info.MappedNameIDX, info); + } + + try + { + info.SetUpCachingValues(response); + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("HTTPCacheService", string.Format("{0} - SetUpCachingValues done!", uri.ToString()), response.baseRequest.Context); + } + catch + { + // If something happens while we write out the response, than we will delete it because it might be in an invalid state. + DeleteEntityImpl(uri); + + throw; + } + } + } + + internal static System.IO.Stream PrepareStreamed(Uri uri, HTTPResponse response) + { + if (!IsSupported) + return null; + + CheckSetup(); + + HTTPCacheFileInfo info; + + using (new WriteLock(rwLock)) + { + if (!library.TryGetValue(uri, out info)) + { + library.Add(uri, info = new HTTPCacheFileInfo(uri)); + UsedIndexes.Add(info.MappedNameIDX, info); + } + } + + try + { + return info.GetSaveStream(response); + } + catch + { + // If something happens while we write out the response, than we will delete it because it might be in an invalid state. + DeleteEntityImpl(uri, true, true); + + throw; + } + } + +#endregion + +#region Public Maintenance Functions + + /// + /// Deletes all cache entity. Non blocking. + /// Call it only if there no requests currently processed, because cache entries can be deleted while a server sends back a 304 result, so there will be no data to read from the cache! + /// + public static void BeginClear() + { + if (!IsSupported) + return; + + if (InClearThread) + return; + InClearThread = true; + + SetupCacheFolder(); + + PlatformSupport.Threading.ThreadedRunner.RunShortLiving(ClearImpl); + } + + private static void ClearImpl() + { + if (!IsSupported) + return; + + CheckSetup(); + + using (new WriteLock(rwLock)) + { + try + { + // GetFiles will return a string array that contains the files in the folder with the full path + string[] cacheEntries = HTTPManager.IOService.GetFiles(CacheFolder); + + if (cacheEntries != null) + for (int i = 0; i < cacheEntries.Length; ++i) + { + // We need a try-catch block because between the Directory.GetFiles call and the File.Delete calls a maintenance job, or other file operations can delete any file from the cache folder. + // So while there might be some problem with any file, we don't want to abort the whole for loop + try + { + HTTPManager.IOService.FileDelete(cacheEntries[i]); + } + catch + { } + } + } + finally + { + UsedIndexes.Clear(); + library.Clear(); + NextNameIDX = 0x0001; + + InClearThread = false; + + PluginEventHelper.EnqueuePluginEvent(new PluginEventInfo(PluginEvents.SaveCacheLibrary)); + } + } + } + + /// + /// Deletes all expired cache entity. + /// Call it only if there no requests currently processed, because cache entries can be deleted while a server sends back a 304 result, so there will be no data to read from the cache! + /// + public static void BeginMaintainence(HTTPCacheMaintananceParams maintananceParam) + { + if (maintananceParam == null) + throw new ArgumentNullException("maintananceParams == null"); + + if (!HTTPCacheService.IsSupported) + return; + + if (InMaintainenceThread) + return; + + InMaintainenceThread = true; + + SetupCacheFolder(); + + PlatformSupport.Threading.ThreadedRunner.RunShortLiving(MaintananceImpl, maintananceParam); + } + + private static void MaintananceImpl(HTTPCacheMaintananceParams maintananceParam) + { + CheckSetup(); + + using (new WriteLock(rwLock)) + { + try + { + // Delete cache entries older than the given time. + DateTime deleteOlderAccessed = DateTime.UtcNow - maintananceParam.DeleteOlder; + List removedEntities = new List(); + foreach (var kvp in library) + if (kvp.Value.LastAccess < deleteOlderAccessed) + { + DeleteEntityImpl(kvp.Key, false, false); + removedEntities.Add(kvp.Value); + } + + for (int i = 0; i < removedEntities.Count; ++i) + { + library.Remove(removedEntities[i].Uri); + UsedIndexes.Remove(removedEntities[i].MappedNameIDX); + } + removedEntities.Clear(); + + ulong cacheSize = GetCacheSizeImpl(); + + // This step will delete all entries starting with the oldest LastAccess property while the cache size greater then the MaxCacheSize in the given param. + if (cacheSize > maintananceParam.MaxCacheSize) + { + List fileInfos = new List(library.Count); + + foreach (var kvp in library) + fileInfos.Add(kvp.Value); + + fileInfos.Sort(); + + int idx = 0; + while (cacheSize >= maintananceParam.MaxCacheSize && idx < fileInfos.Count) + { + try + { + var fi = fileInfos[idx]; + ulong length = (ulong)fi.BodyLength; + + DeleteEntityImpl(fi.Uri); + + cacheSize -= length; + } + catch + { } + finally + { + ++idx; + } + } + } + } + finally + { + InMaintainenceThread = false; + + PluginEventHelper.EnqueuePluginEvent(new PluginEventInfo(PluginEvents.SaveCacheLibrary)); + } + } + } + + public static int GetCacheEntityCount() + { + if (!HTTPCacheService.IsSupported) + return 0; + + CheckSetup(); + + using (new ReadLock(rwLock)) + { + return library.Count; + } + } + + public static ulong GetCacheSize() + { + if (!IsSupported) + return 0; + + CheckSetup(); + + using (new ReadLock (rwLock)) + { + return GetCacheSizeImpl(); + } + } + + private static ulong GetCacheSizeImpl() + { + ulong size = 0; + + foreach (var kvp in library) + if (kvp.Value.BodyLength > 0) + size += (ulong)kvp.Value.BodyLength; + + return size; + } + +#endregion + +#region Cache Library Management + + private static void LoadLibrary() + { + // Already loaded? + if (library != null) + return; + + if (!IsSupported) + return; + + int version = 1; + + using (new WriteLock(rwLock)) + { + library = new Dictionary(new UriComparer()); + try + { + using (var fs = HTTPManager.IOService.CreateFileStream(LibraryPath, FileStreamModes.OpenRead)) + using (var br = new System.IO.BinaryReader(fs)) + { + version = br.ReadInt32(); + + if (version > 1) + NextNameIDX = br.ReadUInt64(); + + int statCount = br.ReadInt32(); + + for (int i = 0; i < statCount; ++i) + { + Uri uri = new Uri(br.ReadString()); + + var entity = new HTTPCacheFileInfo(uri, br, version); + if (entity.IsExists()) + { + library.Add(uri, entity); + + if (version > 1) + UsedIndexes.Add(entity.MappedNameIDX, entity); + } + } + } + } + catch (Exception ex) + { + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Exception("HTTPCacheService", "LoadLibrary", ex); + } + } + + if (version == 1) + BeginClear(); + else + DeleteUnusedFiles(); + } + + internal static void SaveLibrary() + { + if (library == null) + return; + + if (!IsSupported) + return; + + using (new WriteLock(rwLock)) + { + try + { + using (var fs = HTTPManager.IOService.CreateFileStream(LibraryPath, FileStreamModes.Create)) + using (var bw = new System.IO.BinaryWriter(fs)) + { + bw.Write(LibraryVersion); + bw.Write(NextNameIDX); + + bw.Write(library.Count); + foreach (var kvp in library) + { + bw.Write(kvp.Key.ToString()); + + kvp.Value.SaveTo(bw); + } + } + } + catch (Exception ex) + { + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Exception("HTTPCacheService", "SaveLibrary", ex); + } + } + } + + internal static void SetBodyLength(Uri uri, int bodyLength) + { + if (!IsSupported) + return; + + CheckSetup(); + + using (new WriteLock(rwLock)) + { + HTTPCacheFileInfo fileInfo; + if (library.TryGetValue(uri, out fileInfo)) + fileInfo.BodyLength = bodyLength; + else + { + library.Add(uri, fileInfo = new HTTPCacheFileInfo(uri, DateTime.UtcNow, bodyLength)); + UsedIndexes.Add(fileInfo.MappedNameIDX, fileInfo); + } + } + } + + /// + /// Deletes all files from the cache folder that isn't in the Library. + /// + private static void DeleteUnusedFiles() + { + if (!IsSupported) + return; + + CheckSetup(); + + // GetFiles will return a string array that contains the files in the folder with the full path + string[] cacheEntries = HTTPManager.IOService.GetFiles(CacheFolder); + + for (int i = 0; i < cacheEntries.Length; ++i) + { + // We need a try-catch block because between the Directory.GetFiles call and the File.Delete calls a maintenance job, or other file operations can delete any file from the cache folder. + // So while there might be some problem with any file, we don't want to abort the whole for loop + try + { + string filename = System.IO.Path.GetFileName(cacheEntries[i]); + UInt64 idx = 0; + bool deleteFile = false; + if (UInt64.TryParse(filename, System.Globalization.NumberStyles.AllowHexSpecifier, null, out idx)) + { + using (new ReadLock(rwLock)) + deleteFile = !UsedIndexes.ContainsKey(idx); + } + else + deleteFile = true; + + if (deleteFile) + HTTPManager.IOService.FileDelete(cacheEntries[i]); + } + catch + { } + } + } + +#endregion + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheService.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheService.cs.meta new file mode 100644 index 000000000..fa7c39fc4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Caching/HTTPCacheService.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d29e8551599393f4193bc4daa6968607 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections.meta new file mode 100644 index 000000000..edb913f20 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 65fae491919869042be9bb2f969bf050 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/BufferedReadNetworkStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/BufferedReadNetworkStream.cs new file mode 100644 index 000000000..e6e06197d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/BufferedReadNetworkStream.cs @@ -0,0 +1,390 @@ +using System; +using System.IO; + +using BestHTTP.Extensions; + +namespace BestHTTP.Connections +{ + public sealed class BufferedReadNetworkStream : Stream + { + #region Network Stats + public static long TotalNetworkBytesReceived { get => _totalNetworkBytesReceived; } + private static long _totalNetworkBytesReceived; + internal static void IncrementTotalNetworkBytesReceived(int amount) => System.Threading.Interlocked.Add(ref _totalNetworkBytesReceived, amount); + + public static long TotalNetworkBytesSent { get => _totalNetworkBytesSent; } + private static long _totalNetworkBytesSent; + + internal static void IncrementTotalNetworkBytesSent(int amount) => System.Threading.Interlocked.Add(ref _totalNetworkBytesSent, amount); + + public static int TotalConnections { get => _totalConnections; } + private static int _totalConnections; + + public static int OpenConnections { get => _openConnections; } + private static int _openConnections; + + internal static void IncrementCurrentConnections() + { + System.Threading.Interlocked.Increment(ref _totalConnections); + System.Threading.Interlocked.Increment(ref _openConnections); + } + internal static void DecrementCurrentConnections() => System.Threading.Interlocked.Decrement(ref _openConnections); + + internal static void ResetNetworkStats() + { + System.Threading.Interlocked.Exchange(ref _totalNetworkBytesReceived, 0); + System.Threading.Interlocked.Exchange(ref _totalNetworkBytesSent, 0); + System.Threading.Interlocked.Exchange(ref _totalConnections, 0); + System.Threading.Interlocked.Exchange(ref _openConnections, 0); + } + + #endregion + + public override bool CanRead { get { throw new NotImplementedException(); } } + + public override bool CanSeek { get { throw new NotImplementedException(); } } + + public override bool CanWrite { get { throw new NotImplementedException(); } } + + public override long Length { get { throw new NotImplementedException(); } } + + public override long Position { get { throw new NotImplementedException(); } set { throw new NotImplementedException(); } } + + private ReadOnlyBufferedStream readStream; + private Stream innerStream; + + public BufferedReadNetworkStream(Stream stream, int bufferSize) + { + this.innerStream = stream; + this.readStream = new ReadOnlyBufferedStream(stream, bufferSize); + + IncrementCurrentConnections(); + } + + public override void Flush() + { + } + + public override int Read(byte[] buffer, int offset, int count) + { + int read = this.readStream.Read(buffer, offset, count); + IncrementTotalNetworkBytesReceived(read); + return read; + } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotImplementedException(); + } + + public override void SetLength(long value) + { + throw new NotImplementedException(); + } + + public override void Write(byte[] buffer, int offset, int count) + { + IncrementTotalNetworkBytesSent(count); + this.innerStream.Write(buffer, offset, count); + } + + public override void Close() + { + base.Close(); + + if (this.innerStream != null) + { + lock (this) + { + if (this.innerStream != null) + { + DecrementCurrentConnections(); + + var stream = this.innerStream; + this.innerStream = null; + + stream.Close(); + } + + if (this.readStream != null) + { + this.readStream.Close(); + this.readStream = null; + } + } + } + } + } + + // Non-used experimental stream. Reading from the inner stream is done parallel and Read is blocked if no data is buffered. + // Additionally BC reads 5 bytes for the TLS header, than the payload. Buffering data from the network could save at least one context switch per TLS message. + // In theory it, could help as reading from the network could be done parallel with TLS decryption. + // However, if decrypting data is done faster than data is coming on the network, waiting for data longer and letting SpinWait to go deep-sleep it's going to + // resume the thread milliseconds after new data is available. Those little afters are adding up and actually slowing down the download. + // Not using locking just calling TryDequeue until there's data would solve the slow-down, but with the price of using 100% CPU of a core. + // The whole struggle might worth it if Unity would implement SocketAsyncEventArgs properly. + //sealed class BufferedReadNetworkStream : Stream + //{ + // public override bool CanRead => throw new NotImplementedException(); + // + // public override bool CanSeek => throw new NotImplementedException(); + // + // public override bool CanWrite => throw new NotImplementedException(); + // + // public override long Length => throw new NotImplementedException(); + // + // public override long Position { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } + // + // byte[] buf; + // int available = 0; + // int pos = 0; + // + // private System.Net.Sockets.Socket client; + // int readBufferSize; + // int bufferSize; + // private System.Threading.SpinWait spinWait = new System.Threading.SpinWait(); + // + // System.Collections.Concurrent.ConcurrentQueue downloadedData = new System.Collections.Concurrent.ConcurrentQueue(); + // private int downloadedBytes; + // private System.Threading.SpinWait downWait = new System.Threading.SpinWait(); + // private int closed = 0; + // + // //System.Net.Sockets.SocketAsyncEventArgs socketAsyncEventArgs = new System.Net.Sockets.SocketAsyncEventArgs(); + // + // //DateTime started; + // + // public BufferedReadNetworkStream(System.Net.Sockets.Socket socket, int readBufferSize, int bufferSize) + // { + // this.client = socket; + // this.readBufferSize = readBufferSize; + // this.bufferSize = bufferSize; + // + // //this.socketAsyncEventArgs.AcceptSocket = this.client; + // // + // //var buffer = BufferPool.Get(this.readBufferSize, true); + // //this.socketAsyncEventArgs.SetBuffer(buffer, 0, buffer.Length); + // // + // ////var bufferList = new List>(); + // ////for (int i = 0; i < 1; i++) + // ////{ + // //// var buffer = BufferPool.Get(this.readBufferSize, true); + // //// bufferList.Add(new ArraySegment(buffer)); + // ////} + // ////this.socketAsyncEventArgs.BufferList = bufferList; + // // + // //this.socketAsyncEventArgs.Completed += SocketAsyncEventArgs_Completed; + // // + // //this.started = DateTime.Now; + // //if (!this.client.ReceiveAsync(this.socketAsyncEventArgs)) + // // SocketAsyncEventArgs_Completed(null, this.socketAsyncEventArgs); + // + // BestHTTP.PlatformSupport.Threading.ThreadedRunner.RunShortLiving(() => + // { + // DateTime started = DateTime.Now; + // try + // { + // while (closed == 0) + // { + // var buffer = BufferPool.Get(this.readBufferSize, true); + // + // int count = this.client.Receive(buffer, 0, buffer.Length, System.Net.Sockets.SocketFlags.None); + // //int count = 0; + // //unsafe { + // // fixed (byte* pBuffer = buffer) + // // { + // // int zero = 0; + // // count = recvfrom(this.client.Handle, pBuffer, buffer.Length, SocketFlags.None, null, ref zero); + // // } + // //} + // + // this.downloadedData.Enqueue(new BufferSegment(buffer, 0, count)); + // System.Threading.Interlocked.Add(ref downloadedBytes, count); + // + // if (HTTPManager.Logger.Level <= Logger.Loglevels.Warning) + // HTTPManager.Logger.Warning(nameof(BufferedReadNetworkStream), $"read count: {count:N0} downloadedBytes: {downloadedBytes:N0} / {this.bufferSize:N0}"); + // + // if (count <= 0) + // { + // System.Threading.Interlocked.Exchange(ref closed, 1); + // return; + // } + // + // while (downloadedBytes >= this.bufferSize) + // { + // downWait.SpinOnce(); + // } + // } + // } + // catch (Exception ex) + // { + // UnityEngine.Debug.LogException(ex); + // } + // finally + // { + // UnityEngine.Debug.Log($"Reading finished in {(DateTime.Now - started)}"); + // } + // }); + // } + // + // //private void SocketAsyncEventArgs_Completed(object sender, System.Net.Sockets.SocketAsyncEventArgs e) + // //{ + // // this.downloadedData.Enqueue(new BufferSegment(e.Buffer, 0, e.BytesTransferred)); + // // + // // if (e.BytesTransferred == 0) + // // { + // // UnityEngine.Debug.Log($"Reading finished in {(DateTime.Now - started)}"); + // // return; + // // } + // // + // // int down = System.Threading.Interlocked.Add(ref downloadedBytes, e.BytesTransferred); + // // + // // if (HTTPManager.Logger.Level <= Logger.Loglevels.Warning) + // // HTTPManager.Logger.Warning(nameof(BufferedReadNetworkStream), $"SocketAsyncEventArgs_Completed - read count: {e.BytesTransferred:N0} downloadedBytes: {down:N0} / {this.bufferSize:N0}"); + // // + // // var buffer = BufferPool.Get(this.readBufferSize, true); + // // this.socketAsyncEventArgs.SetBuffer(buffer, 0, buffer.Length); + // // + // // if (!this.client.ReceiveAsync(this.socketAsyncEventArgs)) + // // SocketAsyncEventArgs_Completed(null, this.socketAsyncEventArgs); + // //} + // + // private void SwitchBuffers(bool waitForData) + // { + // //HTTPManager.Logger.Error("Read", $"{this.downloadedData.Count}"); + // BufferSegment segment; + // while (!this.downloadedData.TryDequeue(out segment)) + // { + // if (waitForData && closed == 0) + // { + // if (HTTPManager.Logger.Level <= Logger.Loglevels.Error) + // HTTPManager.Logger.Error(nameof(BufferedReadNetworkStream), $"SpinOnce"); + // this.spinWait.SpinOnce(); + // } + // else + // return; + // } + // + // //if (segment.Count <= 0) + // // throw new Exception("Connection closed!"); + // + // if (buf != null) + // BufferPool.Release(buf); + // + // System.Threading.Interlocked.Add(ref downloadedBytes, -segment.Count); + // + // buf = segment.Data; + // available = segment.Count; + // pos = 0; + // } + // + // public override int Read(byte[] buffer, int offset, int size) + // { + // if (this.buf == null) + // { + // SwitchBuffers(true); + // } + // + // if (size <= available) + // { + // Array.Copy(buf, pos, buffer, offset, size); + // available -= size; + // pos += size; + // + // if (available == 0) + // { + // SwitchBuffers(false); + // } + // + // return size; + // } + // else + // { + // int readcount = 0; + // if (available > 0) + // { + // Array.Copy(buf, pos, buffer, offset, available); + // offset += available; + // readcount += available; + // available = 0; + // pos = 0; + // } + // + // while (true) + // { + // try + // { + // SwitchBuffers(true); + // } + // catch (Exception ex) + // { + // if (readcount > 0) + // { + // return readcount; + // } + // + // throw (ex); + // } + // + // if (available < 1) + // { + // if (readcount > 0) + // { + // return readcount; + // } + // + // return available; + // } + // else + // { + // int toread = size - readcount; + // if (toread <= available) + // { + // Array.Copy(buf, pos, buffer, offset, toread); + // available -= toread; + // pos += toread; + // readcount += toread; + // return readcount; + // } + // else + // { + // Array.Copy(buf, pos, buffer, offset, available); + // offset += available; + // readcount += available; + // pos = 0; + // available = 0; + // } + // } + // } + // } + // } + // + // public override long Seek(long offset, SeekOrigin origin) + // { + // throw new NotImplementedException(); + // } + // + // public override void SetLength(long value) + // { + // throw new NotImplementedException(); + // } + // + // public override void Write(byte[] buffer, int offset, int count) + // { + // this.client.Send(buffer, offset, count, System.Net.Sockets.SocketFlags.None); + // + // HTTPManager.Logger.Warning(nameof(BufferedReadNetworkStream), $"Wrote: {count}"); + // } + // + // public override void Close() + // { + // base.Close(); + // + // //socketAsyncEventArgs.Dispose(); + // //socketAsyncEventArgs = null; + // } + // + // public override void Flush() + // { + // } + //} +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/BufferedReadNetworkStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/BufferedReadNetworkStream.cs.meta new file mode 100644 index 000000000..938d4ca5c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/BufferedReadNetworkStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34333499dec9dc244bd60810830c75e1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/ConnectionBase.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/ConnectionBase.cs new file mode 100644 index 000000000..87ebb2560 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/ConnectionBase.cs @@ -0,0 +1,126 @@ +using System; +using BestHTTP.Logger; + +namespace BestHTTP.Connections +{ + public abstract class ConnectionBase : IDisposable + { + #region Public Properties + + /// + /// The address of the server that this connection is bound to. + /// + public string ServerAddress { get; protected set; } + + /// + /// The state of this connection. + /// + public HTTPConnectionStates State { get; internal set; } + + /// + /// If the State is HTTPConnectionStates.Processing, then it holds a HTTPRequest instance. Otherwise it's null. + /// + public HTTPRequest CurrentRequest { get; internal set; } + + /// + /// How much the connection kept alive after its last request processing. + /// + public virtual TimeSpan KeepAliveTime { get; protected set; } + + public virtual bool CanProcessMultiple { get { return false; } } + + /// + /// When we start to process the current request. It's set after the connection is established. + /// + public DateTime StartTime { get; protected set; } + + public Uri LastProcessedUri { get; protected set; } + + public DateTime LastProcessTime { get; protected set; } + + internal LoggingContext Context; + + #endregion + + #region Privates + + private bool IsThreaded; + + #endregion + + public ConnectionBase(string serverAddress) + :this(serverAddress, true) + {} + + public ConnectionBase(string serverAddress, bool threaded) + { + this.ServerAddress = serverAddress; + this.State = HTTPConnectionStates.Initial; + this.LastProcessTime = DateTime.Now; + this.KeepAliveTime = HTTPManager.MaxConnectionIdleTime; + this.IsThreaded = threaded; + + this.Context = new LoggingContext(this); + this.Context.Add("ServerAddress", serverAddress); + this.Context.Add("Threaded", threaded); + } + + internal virtual void Process(HTTPRequest request) + { + if (State == HTTPConnectionStates.Processing) + throw new Exception("Connection already processing a request! " + this.ToString()); + + StartTime = DateTime.MaxValue; + State = HTTPConnectionStates.Processing; + + CurrentRequest = request; + LastProcessedUri = CurrentRequest.CurrentUri; + + if (IsThreaded) + PlatformSupport.Threading.ThreadedRunner.RunLongLiving(ThreadFunc); + else + ThreadFunc(); + } + + protected virtual void ThreadFunc() + { + + } + + public ShutdownTypes ShutdownType { get; protected set; } + + /// + /// Called when the plugin shuts down immediately. + /// + public virtual void Shutdown(ShutdownTypes type) + { + this.ShutdownType = type; + } + + #region Dispose Pattern + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + } + + ~ConnectionBase() + { + Dispose(false); + } + + #endregion + + public override string ToString() + { + return string.Format("[{0}:{1}]", this.GetHashCode(), this.ServerAddress); + } + + public virtual bool TestConnection() => true; + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/ConnectionBase.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/ConnectionBase.cs.meta new file mode 100644 index 000000000..695ea4dc3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/ConnectionBase.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f59e4337e77f0be4d8f6649beaca8362 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/ConnectionHelper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/ConnectionHelper.cs new file mode 100644 index 000000000..1798c89ed --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/ConnectionHelper.cs @@ -0,0 +1,372 @@ +using System; +using System.Collections.Generic; +using BestHTTP.Authentication; +using BestHTTP.Core; +using BestHTTP.Extensions; + +#if !BESTHTTP_DISABLE_CACHING +using BestHTTP.Caching; +#endif +#if !BESTHTTP_DISABLE_COOKIES +using BestHTTP.Cookies; +#endif + +using BestHTTP.Logger; +using BestHTTP.Timings; + +namespace BestHTTP.Connections +{ + /// + /// https://tools.ietf.org/html/draft-thomson-hybi-http-timeout-03 + /// Test servers: http://tools.ietf.org/ http://nginx.org/ + /// + public sealed class KeepAliveHeader + { + /// + /// A host sets the value of the "timeout" parameter to the time that the host will allow an idle connection to remain open before it is closed. A connection is idle if no data is sent or received by a host. + /// + public TimeSpan TimeOut { get; private set; } + + /// + /// The "max" parameter has been used to indicate the maximum number of requests that would be made on the connection.This parameter is deprecated.Any limit on requests can be enforced by sending "Connection: close" and closing the connection. + /// + public int MaxRequests { get; private set; } + + public void Parse(List headerValues) + { + HeaderParser parser = new HeaderParser(headerValues[0]); + HeaderValue value; + if (parser.TryGet("timeout", out value) && value.HasValue) + { + int intValue = 0; + if (int.TryParse(value.Value, out intValue) && intValue > 1) + this.TimeOut = TimeSpan.FromSeconds(intValue - 1); + else + this.TimeOut = TimeSpan.MaxValue; + } + + if (parser.TryGet("max", out value) && value.HasValue) + { + int intValue = 0; + if (int.TryParse("max", out intValue)) + this.MaxRequests = intValue; + else + this.MaxRequests = int.MaxValue; + } + } + } + + public static class ConnectionHelper + { + public static void HandleResponse(string context, HTTPRequest request, out bool resendRequest, out HTTPConnectionStates proposedConnectionState, ref KeepAliveHeader keepAlive, LoggingContext loggingContext1 = null, LoggingContext loggingContext2 = null, LoggingContext loggingContext3 = null) + { + resendRequest = false; + proposedConnectionState = HTTPConnectionStates.Processing; + + if (request.Response != null) + { +#if !BESTHTTP_DISABLE_COOKIES + // Try to store cookies before we do anything else, as we may remove the response deleting the cookies as well. + if (request.IsCookiesEnabled) + CookieJar.Set(request.Response); +#endif + + switch (request.Response.StatusCode) + { + // Not authorized + // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2 + case 401: + { + string authHeader = DigestStore.FindBest(request.Response.GetHeaderValues("www-authenticate")); + if (!string.IsNullOrEmpty(authHeader)) + { + var digest = DigestStore.GetOrCreate(request.CurrentUri); + digest.ParseChallange(authHeader); + + if (request.Credentials != null && digest.IsUriProtected(request.CurrentUri) && (!request.HasHeader("Authorization") || digest.Stale)) + resendRequest = true; + } + + goto default; + } + +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + case 407: + { + if (request.Proxy == null) + goto default; + + resendRequest = request.Proxy.SetupRequest(request); + + goto default; + } +#endif + + // Redirected + case 301: // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.2 + case 302: // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.3 + case 303: // "See Other" + case 307: // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.8 + case 308: // http://tools.ietf.org/html/rfc7238 + { + if (request.RedirectCount >= request.MaxRedirects) + goto default; + request.RedirectCount++; + + string location = request.Response.GetFirstHeaderValue("location"); + if (!string.IsNullOrEmpty(location)) + { + Uri redirectUri = ConnectionHelper.GetRedirectUri(request, location); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("HTTPConnection", string.Format("[{0}] - Redirected to Location: '{1}' redirectUri: '{1}'", context, location, redirectUri), loggingContext1, loggingContext2, loggingContext3); + + if (redirectUri == request.CurrentUri) + { + HTTPManager.Logger.Information("HTTPConnection", string.Format("[{0}] - Redirected to the same location!", context), loggingContext1, loggingContext2, loggingContext3); + goto default; + } + + // Let the user to take some control over the redirection + if (!request.CallOnBeforeRedirection(redirectUri)) + { + HTTPManager.Logger.Information("HTTPConnection", string.Format("[{0}] OnBeforeRedirection returned False", context), loggingContext1, loggingContext2, loggingContext3); + goto default; + } + + // Remove the previously set Host header. + request.RemoveHeader("Host"); + + // Set the Referer header to the last Uri. + request.SetHeader("Referer", request.CurrentUri.ToString()); + + // Set the new Uri, the CurrentUri will return this while the IsRedirected property is true + request.RedirectUri = redirectUri; + + request.IsRedirected = true; + + resendRequest = true; + } + else + throw new Exception(string.Format("[{0}] Got redirect status({1}) without 'location' header!", context, request.Response.StatusCode.ToString())); + + goto default; + } + +#if !BESTHTTP_DISABLE_CACHING + case 304: + if (request.DisableCache) + break; + + if (ConnectionHelper.LoadFromCache(context, request, loggingContext1, loggingContext2, loggingContext3)) + { + request.Timing.Add(TimingEventNames.Loading_From_Cache); + HTTPManager.Logger.Verbose("HTTPConnection", string.Format("[{0}] - HandleResponse - Loaded from cache successfully!", context), loggingContext1, loggingContext2, loggingContext3); + + // Update any caching value + HTTPCacheService.SetUpCachingValues(request.CurrentUri, request.Response); + } + else + { + HTTPManager.Logger.Verbose("HTTPConnection", string.Format("[{0}] - HandleResponse - Loaded from cache failed!", context), loggingContext1, loggingContext2, loggingContext3); + resendRequest = true; + } + + break; +#endif + + default: +#if !BESTHTTP_DISABLE_CACHING + ConnectionHelper.TryStoreInCache(request); +#endif + break; + } + + // Closing the stream is done manually? + if (request.Response != null && !request.Response.IsClosedManually) + { + // If we have a response and the server telling us that it closed the connection after the message sent to us, then + // we will close the connection too. + bool closeByServer = request.Response.HasHeaderWithValue("connection", "close"); + bool closeByClient = !request.IsKeepAlive; + + if (closeByServer || closeByClient) + { + proposedConnectionState = HTTPConnectionStates.Closed; + } + else if (request.Response != null) + { + var keepAliveheaderValues = request.Response.GetHeaderValues("keep-alive"); + if (keepAliveheaderValues != null && keepAliveheaderValues.Count > 0) + { + if (keepAlive == null) + keepAlive = new KeepAliveHeader(); + keepAlive.Parse(keepAliveheaderValues); + } + } + } + + // Null out the response here instead of the redirected cases (301, 302, 307, 308) + // because response might have a Connection: Close header that we would miss to process. + // If Connection: Close is present, the server is closing the connection and we would + // reuse that closed connection. + if (resendRequest) + { + // Discard the redirect response, we don't need it any more + request.Response = null; + + if (proposedConnectionState == HTTPConnectionStates.Closed) + proposedConnectionState = HTTPConnectionStates.ClosedResendRequest; + } + } + } + +#if !BESTHTTP_DISABLE_CACHING + public static bool LoadFromCache(string context, HTTPRequest request, LoggingContext loggingContext1 = null, LoggingContext loggingContext2 = null, LoggingContext loggingContext3 = null) + { + if (request.IsRedirected) + { + if (LoadFromCache(context, request, request.RedirectUri, loggingContext1, loggingContext2, loggingContext3)) + return true; + else + { + Caching.HTTPCacheService.DeleteEntity(request.RedirectUri); + } + } + + bool loaded = LoadFromCache(context, request, request.Uri, loggingContext1, loggingContext2, loggingContext3); + if (!loaded) + Caching.HTTPCacheService.DeleteEntity(request.Uri); + + return loaded; + } + + private static bool LoadFromCache(string context, HTTPRequest request, Uri uri, LoggingContext loggingContext1 = null, LoggingContext loggingContext2 = null, LoggingContext loggingContext3 = null) + { + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("HTTPConnection", string.Format("[{0}] - LoadFromCache for Uri: {1}", context, uri.ToString()), loggingContext1, loggingContext2, loggingContext3); + + var cacheEntity = HTTPCacheService.GetEntity(uri); + if (cacheEntity == null) + { + HTTPManager.Logger.Warning("HTTPConnection", string.Format("[{0}] - LoadFromCache for Uri: {1} - Cached entity not found!", context, uri.ToString()), loggingContext1, loggingContext2, loggingContext3); + return false; + } + + request.Response.CacheFileInfo = cacheEntity; + + try + { + int bodyLength; + using (var cacheStream = cacheEntity.GetBodyStream(out bodyLength)) + { + if (cacheStream == null) + return false; + + if (!request.Response.HasHeader("content-length")) + request.Response.AddHeader("content-length", bodyLength.ToString()); + request.Response.IsFromCache = true; + + if (!request.CacheOnly) + request.Response.ReadRaw(cacheStream, bodyLength); + } + } + catch + { + return false; + } + + return true; + } + + public static bool TryLoadAllFromCache(string context, HTTPRequest request, LoggingContext loggingContext1 = null, LoggingContext loggingContext2 = null, LoggingContext loggingContext3 = null) + { + // We will try to read the response from the cache, but if something happens we will fallback to the normal way. + try + { + //Unless specifically constrained by a cache-control (section 14.9) directive, a caching system MAY always store a successful response (see section 13.8) as a cache entity, + // MAY return it without validation if it is fresh, and MAY return it after successful validation. + // MAY return it without validation if it is fresh! + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("ConnectionHelper", string.Format("[{0}] - TryLoadAllFromCache - whole response loading from cache", context), loggingContext1, loggingContext2, loggingContext3); + + HTTPCacheService.GetFullResponse(request); + + if (request.Response != null) + return true; + } + catch + { + request.Response = null; + HTTPManager.Logger.Verbose("ConnectionHelper", string.Format("[{0}] - TryLoadAllFromCache - failed to load content!", context), loggingContext1, loggingContext2, loggingContext3); + HTTPCacheService.DeleteEntity(request.CurrentUri); + } + + return false; + } + + public static void TryStoreInCache(HTTPRequest request) + { + // if UseStreaming && !DisableCache then we already wrote the response to the cache + if (!request.UseStreaming && + !request.DisableCache && + request.Response != null && + HTTPCacheService.IsSupported && + HTTPCacheService.IsCacheble(request.CurrentUri, request.MethodType, request.Response)) + { + if (request.IsRedirected) + HTTPCacheService.Store(request.Uri, request.MethodType, request.Response); + else + HTTPCacheService.Store(request.CurrentUri, request.MethodType, request.Response); + request.Timing.Add(TimingEventNames.Writing_To_Cache); + + PluginEventHelper.EnqueuePluginEvent(new PluginEventInfo(PluginEvents.SaveCacheLibrary)); + } + } +#endif + + public static Uri GetRedirectUri(HTTPRequest request, string location) + { + Uri result = null; + try + { + result = new Uri(location); + + if (result.IsFile || result.AbsolutePath == location) + result = null; + } + catch + { + // Sometimes the server sends back only the path and query component of the new uri + result = null; + } + + if (result == null) + { + var baseURL = request.CurrentUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped); + + if (!location.StartsWith("/")) + { + var segments = request.CurrentUri.Segments; + segments[segments.Length - 1] = location; + + location = String.Join(string.Empty, segments); + if (location.StartsWith("//")) + location = location.Substring(1); + } + + bool endsWithSlash = baseURL[baseURL.Length - 1] == '/'; + bool startsWithSlash = location[0] == '/'; + if (endsWithSlash && startsWithSlash) + result = new Uri(baseURL + location.Substring(1)); + else if (!endsWithSlash && !startsWithSlash) + result = new Uri(baseURL + '/' + location); + else + result = new Uri(baseURL + location); + } + + return result; + } + + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/ConnectionHelper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/ConnectionHelper.cs.meta new file mode 100644 index 000000000..8654040ed --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/ConnectionHelper.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 91126523a3b8dfe4cb0ca1f8cb75d0ae +timeCreated: 1571210041 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/FileConnection.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/FileConnection.cs new file mode 100644 index 000000000..9ab52c71b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/FileConnection.cs @@ -0,0 +1,71 @@ +#if !UNITY_WEBGL || UNITY_EDITOR + +using System; +using BestHTTP.Core; +using BestHTTP.Extensions; +using BestHTTP.PlatformSupport.FileSystem; + +namespace BestHTTP.Connections +{ + internal sealed class FileConnection : ConnectionBase + { + public FileConnection(string serverAddress) + :base(serverAddress) + { } + + protected override void ThreadFunc() + { + try + { + // Step 1 : create a stream with header information + // Step 2 : create a stream from the file + // Step 3 : create a StreamList + // Step 4 : create a HTTPResponse object + // Step 5 : call the Receive function of the response object + + using (System.IO.Stream fs = HTTPManager.IOService.CreateFileStream(this.CurrentRequest.CurrentUri.LocalPath, FileStreamModes.OpenRead)) + using (StreamList stream = new StreamList(new BufferPoolMemoryStream(), fs)) + { + // This will write to the MemoryStream + stream.Write("HTTP/1.1 200 Ok\r\n"); + stream.Write("Content-Type: application/octet-stream\r\n"); + stream.Write("Content-Length: " + fs.Length.ToString() + "\r\n"); + stream.Write("\r\n"); + + stream.Seek(0, System.IO.SeekOrigin.Begin); + + base.CurrentRequest.Response = new HTTPResponse(base.CurrentRequest, stream, base.CurrentRequest.UseStreaming, false); + + if (!CurrentRequest.Response.Receive()) + CurrentRequest.Response = null; + } + } + catch(Exception e) + { + CurrentRequest.Response = null; + + if (!CurrentRequest.IsCancellationRequested) + { + CurrentRequest.Exception = e; + CurrentRequest.State = HTTPRequestStates.Error; + } + } + finally + { + if (this.CurrentRequest.IsCancellationRequested) + { + this.CurrentRequest.Response = null; + this.CurrentRequest.State = this.CurrentRequest.IsTimedOut ? HTTPRequestStates.TimedOut : HTTPRequestStates.Aborted; + } + else if (this.CurrentRequest.Response == null) + this.CurrentRequest.State = HTTPRequestStates.Error; + else + this.CurrentRequest.State = HTTPRequestStates.Finished; + + ConnectionEventHelper.EnqueueConnectionEvent(new ConnectionEventInfo(this, HTTPConnectionStates.Closed)); + } + } + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/FileConnection.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/FileConnection.cs.meta new file mode 100644 index 000000000..8d899f8e1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/FileConnection.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 24106f78264881a419f83ef4b760ded7 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP1Handler.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP1Handler.cs new file mode 100644 index 000000000..0399cef47 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP1Handler.cs @@ -0,0 +1,268 @@ +#if !UNITY_WEBGL || UNITY_EDITOR +using System; +using BestHTTP.Core; +using BestHTTP.Logger; +using BestHTTP.PlatformSupport.Threading; + +#if !BESTHTTP_DISABLE_CACHING +using BestHTTP.Caching; +#endif + +using BestHTTP.Timings; + +namespace BestHTTP.Connections +{ + public sealed class HTTP1Handler : IHTTPRequestHandler + { + public bool HasCustomRequestProcessor { get { return false; } } + public KeepAliveHeader KeepAlive { get { return this._keepAlive; } } + private KeepAliveHeader _keepAlive; + + public bool CanProcessMultiple { get { return false; } } + + private readonly HTTPConnection conn; + + public LoggingContext Context { get; private set; } + + public HTTP1Handler(HTTPConnection conn) + { + this.Context = new LoggingContext(this); + this.conn = conn; + } + + public void Process(HTTPRequest request) + { + } + + public void RunHandler() + { + HTTPManager.Logger.Information("HTTP1Handler", string.Format("[{0}] started processing request '{1}'", this, this.conn.CurrentRequest.CurrentUri.ToString()), this.Context, this.conn.CurrentRequest.Context); + + ThreadedRunner.SetThreadName("BestHTTP.HTTP1 R&W"); + + HTTPConnectionStates proposedConnectionState = HTTPConnectionStates.Processing; + + bool resendRequest = false; + + try + { + if (this.conn.CurrentRequest.IsCancellationRequested) + return; + +#if !BESTHTTP_DISABLE_CACHING + // Setup cache control headers before we send out the request + if (!this.conn.CurrentRequest.DisableCache) + HTTPCacheService.SetHeaders(this.conn.CurrentRequest); +#endif + + // Write the request to the stream + this.conn.CurrentRequest.QueuedAt = DateTime.MinValue; + this.conn.CurrentRequest.ProcessingStarted = DateTime.UtcNow; + this.conn.CurrentRequest.SendOutTo(this.conn.connector.Stream); + this.conn.CurrentRequest.Timing.Add(TimingEventNames.Request_Sent); + + if (this.conn.CurrentRequest.IsCancellationRequested) + return; + + this.conn.CurrentRequest.OnCancellationRequested += OnCancellationRequested; + + // Receive response from the server + bool received = Receive(this.conn.CurrentRequest); + + this.conn.CurrentRequest.Timing.Add(TimingEventNames.Response_Received); + + if (this.conn.CurrentRequest.IsCancellationRequested) + return; + + if (!received && this.conn.CurrentRequest.Retries < this.conn.CurrentRequest.MaxRetries) + { + proposedConnectionState = HTTPConnectionStates.Closed; + this.conn.CurrentRequest.Retries++; + resendRequest = true; + return; + } + + ConnectionHelper.HandleResponse(this.conn.ToString(), this.conn.CurrentRequest, out resendRequest, out proposedConnectionState, ref this._keepAlive, this.conn.Context, this.conn.CurrentRequest.Context); + } + catch (TimeoutException e) + { + this.conn.CurrentRequest.Response = null; + + // Do nothing here if Abort() got called on the request, its State is already set. + if (!this.conn.CurrentRequest.IsTimedOut) + { + // We will try again only once + if (this.conn.CurrentRequest.Retries < this.conn.CurrentRequest.MaxRetries) + { + this.conn.CurrentRequest.Retries++; + resendRequest = true; + } + else + { + this.conn.CurrentRequest.Exception = e; + this.conn.CurrentRequest.State = HTTPRequestStates.ConnectionTimedOut; + } + } + + proposedConnectionState = HTTPConnectionStates.Closed; + } + catch (Exception e) + { + if (this.ShutdownType == ShutdownTypes.Immediate) + return; + + string exceptionMessage = string.Empty; + if (e == null) + exceptionMessage = "null"; + else + { + System.Text.StringBuilder sb = PlatformSupport.Text.StringBuilderPool.Get(1); + + Exception exception = e; + int counter = 1; + while (exception != null) + { + sb.AppendFormat("{0}: {1} {2}", counter++.ToString(), exception.Message, exception.StackTrace); + + exception = exception.InnerException; + + if (exception != null) + sb.AppendLine(); + } + + exceptionMessage = PlatformSupport.Text.StringBuilderPool.ReleaseAndGrab(sb); + } + HTTPManager.Logger.Verbose("HTTP1Handler", exceptionMessage, this.Context, this.conn.CurrentRequest.Context); + +#if !BESTHTTP_DISABLE_CACHING + if (this.conn.CurrentRequest.UseStreaming) + HTTPCacheService.DeleteEntity(this.conn.CurrentRequest.CurrentUri); +#endif + + // Something gone bad, Response must be null! + this.conn.CurrentRequest.Response = null; + + // Do nothing here if Abort() got called on the request, its State is already set. + if (!this.conn.CurrentRequest.IsCancellationRequested) + { + this.conn.CurrentRequest.Exception = e; + this.conn.CurrentRequest.State = HTTPRequestStates.Error; + } + + proposedConnectionState = HTTPConnectionStates.Closed; + } + finally + { + this.conn.CurrentRequest.OnCancellationRequested -= OnCancellationRequested; + + // Exit ASAP + if (this.ShutdownType != ShutdownTypes.Immediate) + { + if (this.conn.CurrentRequest.IsCancellationRequested) + { + // we don't know what stage the request is canceled, we can't safely reuse the tcp channel. + proposedConnectionState = HTTPConnectionStates.Closed; + + this.conn.CurrentRequest.Response = null; + + // The request's State already set, or going to be set soon in RequestEvents.cs. + //this.conn.CurrentRequest.State = this.conn.CurrentRequest.IsTimedOut ? HTTPRequestStates.TimedOut : HTTPRequestStates.Aborted; + } + else if (resendRequest) + { + // Here introducing a ClosedResendRequest connection state, where we have to process the connection's state change to Closed + // than we have to resend the request. + // If we would send the Resend request here, than a few lines below the Closed connection state change, + // request events are processed before connection events (just switching the EnqueueRequestEvent and EnqueueConnectionEvent wouldn't work + // see order of ProcessQueues in HTTPManager.OnUpdate!) and it would pick this very same closing/closed connection! + + if (proposedConnectionState == HTTPConnectionStates.Closed || proposedConnectionState == HTTPConnectionStates.ClosedResendRequest) + ConnectionEventHelper.EnqueueConnectionEvent(new ConnectionEventInfo(this.conn, this.conn.CurrentRequest)); + else + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this.conn.CurrentRequest, RequestEvents.Resend)); + } + else if (this.conn.CurrentRequest.Response != null && this.conn.CurrentRequest.Response.IsUpgraded) + { + proposedConnectionState = HTTPConnectionStates.WaitForProtocolShutdown; + } + else if (this.conn.CurrentRequest.State == HTTPRequestStates.Processing) + { + if (this.conn.CurrentRequest.Response != null) + this.conn.CurrentRequest.State = HTTPRequestStates.Finished; + else + { + this.conn.CurrentRequest.Exception = new Exception(string.Format("[{0}] Remote server closed the connection before sending response header! Previous request state: {1}. Connection state: {2}", + this.ToString(), + this.conn.CurrentRequest.State.ToString(), + this.conn.State.ToString())); + this.conn.CurrentRequest.State = HTTPRequestStates.Error; + + proposedConnectionState = HTTPConnectionStates.Closed; + } + } + + this.conn.CurrentRequest = null; + + if (proposedConnectionState == HTTPConnectionStates.Processing) + proposedConnectionState = HTTPConnectionStates.Recycle; + + if (proposedConnectionState != HTTPConnectionStates.ClosedResendRequest) + ConnectionEventHelper.EnqueueConnectionEvent(new ConnectionEventInfo(this.conn, proposedConnectionState)); + } + } + } + + private void OnCancellationRequested(HTTPRequest obj) + { + if (this.conn != null && this.conn.connector != null) + this.conn.connector.Dispose(); + } + + private bool Receive(HTTPRequest request) + { + SupportedProtocols protocol = HTTPProtocolFactory.GetProtocolFromUri(request.CurrentUri); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("HTTPConnection", string.Format("[{0}] - Receive - protocol: {1}", this.ToString(), protocol.ToString()), this.Context, request.Context); + + request.Response = HTTPProtocolFactory.Get(protocol, request, this.conn.connector.Stream, request.UseStreaming, false); + + if (!request.Response.Receive()) + { + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("HTTP1Handler", string.Format("[{0}] - Receive - Failed! Response will be null, returning with false.", this.ToString()), this.Context, request.Context); + request.Response = null; + return false; + } + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("HTTP1Handler", string.Format("[{0}] - Receive - Finished Successfully!", this.ToString()), this.Context, request.Context); + + return true; + } + + public ShutdownTypes ShutdownType { get; private set; } + + public void Shutdown(ShutdownTypes type) + { + this.ShutdownType = type; + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + private void Dispose(bool disposing) + { + } + + ~HTTP1Handler() + { + Dispose(false); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP1Handler.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP1Handler.cs.meta new file mode 100644 index 000000000..0c788e1c5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP1Handler.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 12ead80cbad179b49a5026a8b6c04348 +timeCreated: 1571210040 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2.meta new file mode 100644 index 000000000..3df638822 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2edfd4a45eb2f664da87da040d6fcb81 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/BufferHelper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/BufferHelper.cs new file mode 100644 index 000000000..f2a4bda00 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/BufferHelper.cs @@ -0,0 +1,140 @@ +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_ALTERNATE_SSL && !BESTHTTP_DISABLE_HTTP2 + +using System; + +namespace BestHTTP.Connections.HTTP2 +{ + public static class BufferHelper + { + public static void SetUInt16(byte[] buffer, int offset, UInt16 value) + { + buffer[offset + 1] = (byte)(value); + buffer[offset + 0] = (byte)(value >> 8); + } + + public static void SetUInt24(byte[] buffer, int offset, UInt32 value) + { + buffer[offset + 2] = (byte)(value); + buffer[offset + 1] = (byte)(value >> 8); + buffer[offset + 0] = (byte)(value >> 16); + } + + public static void SetUInt31(byte[] buffer, int offset, UInt32 value) + { + buffer[offset + 3] = (byte)(value); + buffer[offset + 2] = (byte)(value >> 8); + buffer[offset + 1] = (byte)(value >> 16); + buffer[offset + 0] = (byte)((value >> 24) & 0x7F); + } + + public static void SetUInt32(byte[] buffer, int offset, UInt32 value) + { + buffer[offset + 3] = (byte)(value); + buffer[offset + 2] = (byte)(value >> 8); + buffer[offset + 1] = (byte)(value >> 16); + buffer[offset + 0] = (byte)(value >> 24); + } + + public static void SetLong(byte[] buffer, int offset, long value) + { + buffer[offset + 7] = (byte)(value); + buffer[offset + 6] = (byte)(value >> 8); + buffer[offset + 5] = (byte)(value >> 16); + buffer[offset + 4] = (byte)(value >> 24); + buffer[offset + 3] = (byte)(value >> 32); + buffer[offset + 2] = (byte)(value >> 40); + buffer[offset + 1] = (byte)(value >> 48); + buffer[offset + 0] = (byte)(value >> 56); + } + + /// + /// bitIdx: 01234567 + /// + public static byte SetBit(byte value, byte bitIdx, bool bitValue) + { + return SetBit(value, bitIdx, Convert.ToByte(bitValue)); + } + + /// + /// bitIdx: 01234567 + /// + public static byte SetBit(byte value, byte bitIdx, byte bitValue) + { + //byte mask = (byte)(0x80 >> bitIdx); + + return (byte)((value ^ (value & (0x80 >> bitIdx))) | bitValue << (7 - bitIdx)); + } + + /// + /// bitIdx: 01234567 + /// + public static byte ReadBit(byte value, byte bitIdx) + { + byte mask = (byte)(0x80 >> bitIdx); + + return (byte)((value & mask) >> (7 - bitIdx)); + } + + /// + /// bitIdx: 01234567 + /// + public static byte ReadValue(byte value, byte fromBit, byte toBit) + { + byte result = 0; + short idx = toBit; + + while (idx >= fromBit) + { + result += (byte)(ReadBit(value, (byte)idx) << (toBit - idx)); + idx--; + } + + return result; + } + + public static UInt16 ReadUInt16(byte[] buffer, int offset) + { + return (UInt16)(buffer[offset + 1] | buffer[offset] << 8); + } + + public static UInt32 ReadUInt24(byte[] buffer, int offset) + { + return (UInt32)(buffer[offset + 2] | + buffer[offset + 1] << 8 | + buffer[offset + 0] << 16 + ); + } + + public static UInt32 ReadUInt31(byte[] buffer, int offset) + { + return (UInt32)(buffer[offset + 3] | + buffer[offset + 2] << 8 | + buffer[offset + 1] << 16 | + (buffer[offset] & 0x7F) << 24 + ); + } + + public static UInt32 ReadUInt32(byte[] buffer, int offset) + { + return (UInt32)(buffer[offset + 3] | + buffer[offset + 2] << 8 | + buffer[offset + 1] << 16 | + buffer[offset + 0] << 24 + ); + } + + public static long ReadLong(byte[] buffer, int offset) + { + return (long)buffer[offset + 7] | + (long)buffer[offset + 6] << 8 | + (long)buffer[offset + 5] << 16 | + (long)buffer[offset + 4] << 24 | + (long)buffer[offset + 3] << 32 | + (long)buffer[offset + 2] << 40 | + (long)buffer[offset + 1] << 48 | + (long)buffer[offset + 0] << 56; + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/BufferHelper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/BufferHelper.cs.meta new file mode 100644 index 000000000..8807b03eb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/BufferHelper.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 53d7db68937661d4eb9c0fe989b9f46c +timeCreated: 1571210041 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/FramesAsStreamView.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/FramesAsStreamView.cs new file mode 100644 index 000000000..d3c8b90f1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/FramesAsStreamView.cs @@ -0,0 +1,234 @@ +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_ALTERNATE_SSL && !BESTHTTP_DISABLE_HTTP2 + +using BestHTTP.PlatformSupport.Memory; +using System; +using System.Collections.Generic; +using System.IO; + +namespace BestHTTP.Connections.HTTP2 +{ + public interface IFrameDataView : IDisposable + { + long Length { get; } + long Position { get; } + + void AddFrame(HTTP2FrameHeaderAndPayload frame); + int ReadByte(); + int Read(byte[] buffer, int offset, int count); + } + + public abstract class CommonFrameView : IFrameDataView + { + public long Length { get; protected set; } + public long Position { get; protected set; } + + protected List frames = new List(); + protected int currentFrameIdx = -1; + protected byte[] data; + protected UInt32 dataOffset; + protected UInt32 maxOffset; + + public abstract void AddFrame(HTTP2FrameHeaderAndPayload frame); + protected abstract long CalculateDataLengthForFrame(HTTP2FrameHeaderAndPayload frame); + + public virtual int Read(byte[] buffer, int offset, int count) + { + if (this.dataOffset >= this.maxOffset && !AdvanceFrame()) + return -1; + + int readCount = 0; + + while (count > 0) + { + long copyCount = Math.Min(count, this.maxOffset - this.dataOffset); + + Array.Copy(this.data, this.dataOffset, buffer, offset + readCount, copyCount); + + count -= (int)copyCount; + readCount += (int)copyCount; + + this.dataOffset += (UInt32)copyCount; + this.Position += copyCount; + + if (this.dataOffset >= this.maxOffset && !AdvanceFrame()) + break; + } + + return readCount; + } + + public virtual int ReadByte() + { + if (this.dataOffset >= this.maxOffset && !AdvanceFrame()) + return -1; + + byte data = this.data[this.dataOffset]; + this.dataOffset++; + this.Position++; + + return data; + } + + protected abstract bool AdvanceFrame(); + + public virtual void Dispose() + { + for (int i = 0; i < this.frames.Count; ++i) + //if (this.frames[i].Payload != null && !this.frames[i].DontUseMemPool) + BufferPool.Release(this.frames[i].Payload); + this.frames.Clear(); + } + + public override string ToString() + { + var sb = PlatformSupport.Text.StringBuilderPool.Get(this.frames.Count + 2); + sb.Append("[CommonFrameView "); + + for (int i = 0; i < this.frames.Count; ++i) { + sb.AppendFormat("{0} Payload: {1}\n", this.frames[i], this.frames[i].PayloadAsHex()); + } + + sb.Append("]"); + + return PlatformSupport.Text.StringBuilderPool.ReleaseAndGrab(sb); + } + } + + public sealed class HeaderFrameView : CommonFrameView + { + public override void AddFrame(HTTP2FrameHeaderAndPayload frame) + { + if (frame.Type != HTTP2FrameTypes.HEADERS && frame.Type != HTTP2FrameTypes.CONTINUATION) + throw new ArgumentException("HeaderFrameView - Unexpected frame type: " + frame.Type); + + this.frames.Add(frame); + this.Length += CalculateDataLengthForFrame(frame); + + if (this.currentFrameIdx == -1) + AdvanceFrame(); + } + + protected override long CalculateDataLengthForFrame(HTTP2FrameHeaderAndPayload frame) + { + switch (frame.Type) + { + case HTTP2FrameTypes.HEADERS: + return HTTP2FrameHelper.ReadHeadersFrame(frame).HeaderBlockFragmentLength; + + case HTTP2FrameTypes.CONTINUATION: + return frame.PayloadLength; + } + + return 0; + } + + protected override bool AdvanceFrame() + { + if (this.currentFrameIdx >= this.frames.Count - 1) + return false; + + this.currentFrameIdx++; + HTTP2FrameHeaderAndPayload frame = this.frames[this.currentFrameIdx]; + + this.data = frame.Payload; + + switch (frame.Type) + { + case HTTP2FrameTypes.HEADERS: + var header = HTTP2FrameHelper.ReadHeadersFrame(frame); + this.dataOffset = header.HeaderBlockFragmentIdx; + this.maxOffset = this.dataOffset + header.HeaderBlockFragmentLength; + break; + + case HTTP2FrameTypes.CONTINUATION: + this.dataOffset = 0; + this.maxOffset = frame.PayloadLength; + break; + } + + return true; + } + } + + public sealed class DataFrameView : CommonFrameView + { + public override void AddFrame(HTTP2FrameHeaderAndPayload frame) + { + if (frame.Type != HTTP2FrameTypes.DATA) + throw new ArgumentException("HeaderFrameView - Unexpected frame type: " + frame.Type); + + this.frames.Add(frame); + this.Length += CalculateDataLengthForFrame(frame); + } + + protected override long CalculateDataLengthForFrame(HTTP2FrameHeaderAndPayload frame) + { + return HTTP2FrameHelper.ReadDataFrame(frame).DataLength; + } + + protected override bool AdvanceFrame() + { + if (this.currentFrameIdx >= this.frames.Count - 1) + return false; + + this.currentFrameIdx++; + HTTP2FrameHeaderAndPayload frame = this.frames[this.currentFrameIdx]; + HTTP2DataFrame dataFrame = HTTP2FrameHelper.ReadDataFrame(frame); + + this.data = frame.Payload; + this.dataOffset = dataFrame.DataIdx; + this.maxOffset = dataFrame.DataIdx + dataFrame.DataLength; + + return true; + } + } + + public sealed class FramesAsStreamView : Stream + { + public override bool CanRead { get { return true; } } + public override bool CanSeek { get { return false; } } + public override bool CanWrite { get { return false; } } + public override long Length { get { return this.view.Length; } } + public override long Position { get { return this.view.Position; } set { throw new NotSupportedException(); } } + + private IFrameDataView view; + + public FramesAsStreamView(IFrameDataView view) + { + this.view = view; + } + + public void AddFrame(HTTP2FrameHeaderAndPayload frame) + { + this.view.AddFrame(frame); + } + + public override int ReadByte() + { + return this.view.ReadByte(); + } + + public override int Read(byte[] buffer, int offset, int count) + { + return this.view.Read(buffer, offset, count); + } + + public override void Close() + { + base.Close(); + this.view.Dispose(); + } + + public override void Flush() {} + public override long Seek(long offset, SeekOrigin origin) { throw new NotImplementedException(); } + public override void SetLength(long value) { throw new NotImplementedException(); } + public override void Write(byte[] buffer, int offset, int count) { throw new NotImplementedException(); } + + public override string ToString() + { + return this.view.ToString(); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/FramesAsStreamView.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/FramesAsStreamView.cs.meta new file mode 100644 index 000000000..9d87c8e73 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/FramesAsStreamView.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 591ec412e5c6f2a42b591c9c02921d33 +timeCreated: 1571210041 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HPACKEncoder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HPACKEncoder.cs new file mode 100644 index 000000000..b91404abe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HPACKEncoder.cs @@ -0,0 +1,798 @@ +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_ALTERNATE_SSL && !BESTHTTP_DISABLE_HTTP2 + +using BestHTTP.Extensions; +using BestHTTP.PlatformSupport.Memory; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace BestHTTP.Connections.HTTP2 +{ + public sealed class HPACKEncoder + { + private HTTP2SettingsManager settingsRegistry; + + // https://http2.github.io/http2-spec/compression.html#encoding.context + // When used for bidirectional communication, such as in HTTP, the encoding and decoding dynamic tables + // maintained by an endpoint are completely independent, i.e., the request and response dynamic tables are separate. + private HeaderTable requestTable; + private HeaderTable responseTable; + + private HTTP2Handler parent; + + public HPACKEncoder(HTTP2Handler parentHandler, HTTP2SettingsManager registry) + { + this.parent = parentHandler; + this.settingsRegistry = registry; + + // I'm unsure what settings (local or remote) we should use for these two tables! + this.requestTable = new HeaderTable(this.settingsRegistry.MySettings); + this.responseTable = new HeaderTable(this.settingsRegistry.RemoteSettings); + } + + public void Encode(HTTP2Stream context, HTTPRequest request, Queue to, UInt32 streamId) + { + // Add usage of SETTINGS_MAX_HEADER_LIST_SIZE to be able to create a header and one or more continuation fragments + // (https://httpwg.org/specs/rfc7540.html#SettingValues) + + using (BufferPoolMemoryStream bufferStream = new BufferPoolMemoryStream(HTTPRequest.UploadChunkSize)) + { + WriteHeader(bufferStream, ":method", HTTPRequest.MethodNames[(int)request.MethodType]); + // add path + WriteHeader(bufferStream, ":path", request.CurrentUri.PathAndQuery); + // add authority + WriteHeader(bufferStream, ":authority", request.CurrentUri.Authority); + // add scheme + WriteHeader(bufferStream, ":scheme", "https"); + + //bool hasBody = false; + + // add other, regular headers + request.EnumerateHeaders((header, values) => + { + if (header.Equals("connection", StringComparison.OrdinalIgnoreCase) || + (header.Equals("te", StringComparison.OrdinalIgnoreCase) && !values.Contains("trailers") && values.Count <= 1) || + header.Equals("host", StringComparison.OrdinalIgnoreCase) || + header.Equals("keep-alive", StringComparison.OrdinalIgnoreCase) || + header.StartsWith("proxy-", StringComparison.OrdinalIgnoreCase)) + return; + + //if (!hasBody) + // hasBody = header.Equals("content-length", StringComparison.OrdinalIgnoreCase) && int.Parse(values[0]) > 0; + + // https://httpwg.org/specs/rfc7540.html#HttpSequence + // The chunked transfer encoding defined in Section 4.1 of [RFC7230] MUST NOT be used in HTTP/2. + if (header.Equals("Transfer-Encoding", StringComparison.OrdinalIgnoreCase)) + { + // error! + return; + } + + // https://httpwg.org/specs/rfc7540.html#HttpHeaders + // Just as in HTTP/1.x, header field names are strings of ASCII characters that are compared in a case-insensitive fashion. + // However, header field names MUST be converted to lowercase prior to their encoding in HTTP/2. + // A request or response containing uppercase header field names MUST be treated as malformed + if (header.Any(Char.IsUpper)) + header = header.ToLower(); + + for (int i = 0; i < values.Count; ++i) + { + WriteHeader(bufferStream, header, values[i]); + + if (HTTPManager.Logger.Level <= Logger.Loglevels.Information) + HTTPManager.Logger.Information("HPACKEncoder", string.Format("[{0}] - Encode - Header({1}/{2}): '{3}': '{4}'", context.Id, i + 1, values.Count, header, values[i]), this.parent.Context, context.Context, request.Context); + } + }, true); + + var upStreamInfo = request.GetUpStream(); + CreateHeaderFrames(to, + streamId, + bufferStream.ToArray(true), + (UInt32)bufferStream.Length, + upStreamInfo.Stream != null); + } + } + + public void Decode(HTTP2Stream context, Stream stream, List> to) + { + int headerType = stream.ReadByte(); + while (headerType != -1) + { + byte firstDataByte = (byte)headerType; + + // https://http2.github.io/http2-spec/compression.html#indexed.header.representation + if (BufferHelper.ReadBit(firstDataByte, 0) == 1) + { + var header = ReadIndexedHeader(firstDataByte, stream); + + if (HTTPManager.Logger.Level <= Logger.Loglevels.Information) + HTTPManager.Logger.Information("HPACKEncoder", string.Format("[{0}] Decode - IndexedHeader: {1}", context.Id, header.ToString()), this.parent.Context, context.Context, context.AssignedRequest.Context); + + to.Add(header); + } + else if (BufferHelper.ReadValue(firstDataByte, 0, 1) == 1) + { + // https://http2.github.io/http2-spec/compression.html#literal.header.with.incremental.indexing + + if (BufferHelper.ReadValue(firstDataByte, 2, 7) == 0) + { + // Literal Header Field with Incremental Indexing — New Name + var header = ReadLiteralHeaderFieldWithIncrementalIndexing_NewName(firstDataByte, stream); + + if (HTTPManager.Logger.Level <= Logger.Loglevels.Information) + HTTPManager.Logger.Information("HPACKEncoder", string.Format("[{0}] Decode - LiteralHeaderFieldWithIncrementalIndexing_NewName: {1}", context.Id, header.ToString()), this.parent.Context, context.Context, context.AssignedRequest.Context); + + this.responseTable.Add(header); + to.Add(header); + } + else + { + // Literal Header Field with Incremental Indexing — Indexed Name + var header = ReadLiteralHeaderFieldWithIncrementalIndexing_IndexedName(firstDataByte, stream); + + if (HTTPManager.Logger.Level <= Logger.Loglevels.Information) + HTTPManager.Logger.Information("HPACKEncoder", string.Format("[{0}] Decode - LiteralHeaderFieldWithIncrementalIndexing_IndexedName: {1}", context.Id, header.ToString()), this.parent.Context, context.Context, context.AssignedRequest.Context); + + this.responseTable.Add(header); + to.Add(header); + } + } else if (BufferHelper.ReadValue(firstDataByte, 0, 3) == 0) + { + // https://http2.github.io/http2-spec/compression.html#literal.header.without.indexing + + if (BufferHelper.ReadValue(firstDataByte, 4, 7) == 0) + { + // Literal Header Field without Indexing — New Name + var header = ReadLiteralHeaderFieldwithoutIndexing_NewName(firstDataByte, stream); + + if (HTTPManager.Logger.Level <= Logger.Loglevels.Information) + HTTPManager.Logger.Information("HPACKEncoder", string.Format("[{0}] Decode - LiteralHeaderFieldwithoutIndexing_NewName: {1}", context.Id, header.ToString()), this.parent.Context, context.Context, context.AssignedRequest.Context); + + to.Add(header); + } + else + { + // Literal Header Field without Indexing — Indexed Name + var header = ReadLiteralHeaderFieldwithoutIndexing_IndexedName(firstDataByte, stream); + + if (HTTPManager.Logger.Level <= Logger.Loglevels.Information) + HTTPManager.Logger.Information("HPACKEncoder", string.Format("[{0}] Decode - LiteralHeaderFieldwithoutIndexing_IndexedName: {1}", context.Id, header.ToString()), this.parent.Context, context.Context, context.AssignedRequest.Context); + + to.Add(header); + } + } + else if (BufferHelper.ReadValue(firstDataByte, 0, 3) == 1) + { + // https://http2.github.io/http2-spec/compression.html#literal.header.never.indexed + + if (BufferHelper.ReadValue(firstDataByte, 4, 7) == 0) + { + // Literal Header Field Never Indexed — New Name + var header = ReadLiteralHeaderFieldNeverIndexed_NewName(firstDataByte, stream); + + if (HTTPManager.Logger.Level <= Logger.Loglevels.Information) + HTTPManager.Logger.Information("HPACKEncoder", string.Format("[{0}] Decode - LiteralHeaderFieldNeverIndexed_NewName: {1}", context.Id, header.ToString()), this.parent.Context, context.Context, context.AssignedRequest.Context); + + to.Add(header); + } + else + { + // Literal Header Field Never Indexed — Indexed Name + var header = ReadLiteralHeaderFieldNeverIndexed_IndexedName(firstDataByte, stream); + + if (HTTPManager.Logger.Level <= Logger.Loglevels.Information) + HTTPManager.Logger.Information("HPACKEncoder", string.Format("[{0}] Decode - LiteralHeaderFieldNeverIndexed_IndexedName: {1}", context.Id, header.ToString()), this.parent.Context, context.Context, context.AssignedRequest.Context); + + to.Add(header); + } + } + else if (BufferHelper.ReadValue(firstDataByte, 0, 2) == 1) + { + // https://http2.github.io/http2-spec/compression.html#encoding.context.update + + UInt32 newMaxSize = DecodeInteger(5, firstDataByte, stream); + + if (HTTPManager.Logger.Level <= Logger.Loglevels.Information) + HTTPManager.Logger.Information("HPACKEncoder", string.Format("[{0}] Decode - Dynamic Table Size Update: {1}", context.Id, newMaxSize), this.parent.Context, context.Context, context.AssignedRequest.Context); + + //this.settingsRegistry[HTTP2Settings.HEADER_TABLE_SIZE] = (UInt16)newMaxSize; + this.responseTable.MaxDynamicTableSize = (UInt16)newMaxSize; + } + else + { + // ERROR + } + + headerType = stream.ReadByte(); + } + } + + private KeyValuePair ReadIndexedHeader(byte firstByte, Stream stream) + { + // https://http2.github.io/http2-spec/compression.html#indexed.header.representation + + UInt32 index = DecodeInteger(7, firstByte, stream); + return this.responseTable.GetHeader(index); + } + + private KeyValuePair ReadLiteralHeaderFieldWithIncrementalIndexing_IndexedName(byte firstByte, Stream stream) + { + // https://http2.github.io/http2-spec/compression.html#literal.header.with.incremental.indexing + + UInt32 keyIndex = DecodeInteger(6, firstByte, stream); + + string header = this.responseTable.GetKey(keyIndex); + string value = DecodeString(stream); + + return new KeyValuePair(header, value); + } + + private KeyValuePair ReadLiteralHeaderFieldWithIncrementalIndexing_NewName(byte firstByte, Stream stream) + { + // https://http2.github.io/http2-spec/compression.html#literal.header.with.incremental.indexing + + string header = DecodeString(stream); + string value = DecodeString(stream); + + return new KeyValuePair(header, value); + } + + private KeyValuePair ReadLiteralHeaderFieldwithoutIndexing_IndexedName(byte firstByte, Stream stream) + { + // https://http2.github.io/http2-spec/compression.html#literal.header.without.indexing + + UInt32 index = DecodeInteger(4, firstByte, stream); + string header = this.responseTable.GetKey(index); + string value = DecodeString(stream); + + return new KeyValuePair(header, value); + } + + private KeyValuePair ReadLiteralHeaderFieldwithoutIndexing_NewName(byte firstByte, Stream stream) + { + // https://http2.github.io/http2-spec/compression.html#literal.header.without.indexing + + string header = DecodeString(stream); + string value = DecodeString(stream); + + return new KeyValuePair(header, value); + } + + private KeyValuePair ReadLiteralHeaderFieldNeverIndexed_IndexedName(byte firstByte, Stream stream) + { + // https://http2.github.io/http2-spec/compression.html#literal.header.never.indexed + + UInt32 index = DecodeInteger(4, firstByte, stream); + string header = this.responseTable.GetKey(index); + string value = DecodeString(stream); + + return new KeyValuePair(header, value); + } + + private KeyValuePair ReadLiteralHeaderFieldNeverIndexed_NewName(byte firstByte, Stream stream) + { + // https://http2.github.io/http2-spec/compression.html#literal.header.never.indexed + + string header = DecodeString(stream); + string value = DecodeString(stream); + + return new KeyValuePair(header, value); + } + + private string DecodeString(Stream stream) + { + byte start = (byte)stream.ReadByte(); + bool rawString = BufferHelper.ReadBit(start, 0) == 0; + UInt32 stringLength = DecodeInteger(7, start, stream); + + if (stringLength == 0) + return string.Empty; + + if (rawString) + { + byte[] buffer = BufferPool.Get(stringLength, true); + + stream.Read(buffer, 0, (int)stringLength); + + var result = System.Text.Encoding.UTF8.GetString(buffer, 0, (int)stringLength); + + BufferPool.Release(buffer); + + return result; + } + else + { + var node = HuffmanEncoder.GetRoot(); + byte currentByte = (byte)stream.ReadByte(); + byte bitIdx = 0; // 0..7 + + using (BufferPoolMemoryStream bufferStream = new BufferPoolMemoryStream((int)(stringLength * 1.5f))) + { + do + { + byte bitValue = BufferHelper.ReadBit(currentByte, bitIdx); + + if (++bitIdx > 7) + { + stringLength--; + + if (stringLength > 0) + { + bitIdx = 0; + currentByte = (byte)stream.ReadByte(); + } + } + + node = HuffmanEncoder.GetNext(node, bitValue); + + if (node.Value != 0) + { + if (node.Value != HuffmanEncoder.EOS) + bufferStream.WriteByte((byte)node.Value); + + node = HuffmanEncoder.GetRoot(); + } + } while (stringLength > 0); + + byte[] buffer = bufferStream.GetBuffer(); + + string result = System.Text.Encoding.UTF8.GetString(buffer, 0, (int)bufferStream.Length); + + return result; + } + } + } + + private void CreateHeaderFrames(Queue to, UInt32 streamId, byte[] dataToSend, UInt32 payloadLength, bool hasBody) + { + UInt32 maxFrameSize = this.settingsRegistry.RemoteSettings[HTTP2Settings.MAX_FRAME_SIZE]; + + // Only one headers frame + if (payloadLength <= maxFrameSize) + { + HTTP2FrameHeaderAndPayload frameHeader = new HTTP2FrameHeaderAndPayload(); + frameHeader.Type = HTTP2FrameTypes.HEADERS; + frameHeader.StreamId = streamId; + frameHeader.Flags = (byte)(HTTP2HeadersFlags.END_HEADERS); + + if (!hasBody) + frameHeader.Flags |= (byte)(HTTP2HeadersFlags.END_STREAM); + + frameHeader.PayloadLength = payloadLength; + frameHeader.Payload = dataToSend; + + to.Enqueue(frameHeader); + } + else + { + HTTP2FrameHeaderAndPayload frameHeader = new HTTP2FrameHeaderAndPayload(); + frameHeader.Type = HTTP2FrameTypes.HEADERS; + frameHeader.StreamId = streamId; + frameHeader.PayloadLength = maxFrameSize; + frameHeader.Payload = dataToSend; + frameHeader.DontUseMemPool = true; + frameHeader.PayloadOffset = 0; + + if (!hasBody) + frameHeader.Flags = (byte)(HTTP2HeadersFlags.END_STREAM); + + to.Enqueue(frameHeader); + + UInt32 offset = maxFrameSize; + while (offset < payloadLength) + { + frameHeader = new HTTP2FrameHeaderAndPayload(); + frameHeader.Type = HTTP2FrameTypes.CONTINUATION; + frameHeader.StreamId = streamId; + frameHeader.PayloadLength = maxFrameSize; + frameHeader.Payload = dataToSend; + frameHeader.PayloadOffset = offset; + + offset += maxFrameSize; + + if (offset >= payloadLength) + { + frameHeader.Flags = (byte)(HTTP2ContinuationFlags.END_HEADERS); + // last sent continuation fragment will release back the payload buffer + frameHeader.DontUseMemPool = false; + } + else + frameHeader.DontUseMemPool = true; + + to.Enqueue(frameHeader); + } + } + } + + private void WriteHeader(Stream stream, string header, string value) + { + // https://http2.github.io/http2-spec/compression.html#header.representation + + KeyValuePair index = this.requestTable.GetIndex(header, value); + + if (index.Key == 0 && index.Value == 0) + { + WriteLiteralHeaderFieldWithIncrementalIndexing_NewName(stream, header, value); + this.requestTable.Add(new KeyValuePair(header, value)); + } + else if (index.Key != 0 && index.Value == 0) + { + WriteLiteralHeaderFieldWithIncrementalIndexing_IndexedName(stream, index.Key, value); + this.requestTable.Add(new KeyValuePair(header, value)); + } + else + { + WriteIndexedHeaderField(stream, index.Key); + } + } + + private static void WriteIndexedHeaderField(Stream stream, UInt32 index) + { + byte requiredBytes = RequiredBytesToEncodeInteger(index, 7); + byte[] buffer = BufferPool.Get(requiredBytes, true); + UInt32 offset = 0; + + buffer[0] = 0x80; + EncodeInteger(index, 7, buffer, ref offset); + + stream.Write(buffer, 0, (int)offset); + + BufferPool.Release(buffer); + } + + private static void WriteLiteralHeaderFieldWithIncrementalIndexing_IndexedName(Stream stream, UInt32 index, string value) + { + // https://http2.github.io/http2-spec/compression.html#literal.header.with.incremental.indexing + + UInt32 requiredBytes = RequiredBytesToEncodeInteger(index, 6) + + RequiredBytesToEncodeString(value); + + byte[] buffer = BufferPool.Get(requiredBytes, true); + UInt32 offset = 0; + + buffer[0] = 0x40; + EncodeInteger(index, 6, buffer, ref offset); + EncodeString(value, buffer, ref offset); + + stream.Write(buffer, 0, (int)offset); + + BufferPool.Release(buffer); + } + + private static void WriteLiteralHeaderFieldWithIncrementalIndexing_NewName(Stream stream, string header, string value) + { + // https://http2.github.io/http2-spec/compression.html#literal.header.with.incremental.indexing + + UInt32 requiredBytes = 1 + RequiredBytesToEncodeString(header) + RequiredBytesToEncodeString(value); + + byte[] buffer = BufferPool.Get(requiredBytes, true); + UInt32 offset = 0; + + buffer[offset++] = 0x40; + EncodeString(header, buffer, ref offset); + EncodeString(value, buffer, ref offset); + + stream.Write(buffer, 0, (int)offset); + + BufferPool.Release(buffer); + } + + private static void WriteLiteralHeaderFieldWithoutIndexing_IndexedName(Stream stream, UInt32 index, string value) + { + // https://http2.github.io/http2-spec/compression.html#literal.header.without.indexing + + UInt32 requiredBytes = RequiredBytesToEncodeInteger(index, 4) + RequiredBytesToEncodeString(value); + + byte[] buffer = BufferPool.Get(requiredBytes, true); + UInt32 offset = 0; + + buffer[0] = 0; + EncodeInteger(index, 4, buffer, ref offset); + EncodeString(value, buffer, ref offset); + + stream.Write(buffer, 0, (int)offset); + + BufferPool.Release(buffer); + } + + private static void WriteLiteralHeaderFieldWithoutIndexing_NewName(Stream stream, string header, string value) + { + // https://http2.github.io/http2-spec/compression.html#literal.header.without.indexing + + UInt32 requiredBytes = 1 + RequiredBytesToEncodeString(header) + RequiredBytesToEncodeString(value); + + byte[] buffer = BufferPool.Get(requiredBytes, true); + UInt32 offset = 0; + + buffer[offset++] = 0; + EncodeString(header, buffer, ref offset); + EncodeString(value, buffer, ref offset); + + stream.Write(buffer, 0, (int)offset); + + BufferPool.Release(buffer); + } + + private static void WriteLiteralHeaderFieldNeverIndexed_IndexedName(Stream stream, UInt32 index, string value) + { + // https://http2.github.io/http2-spec/compression.html#literal.header.never.indexed + + UInt32 requiredBytes = RequiredBytesToEncodeInteger(index, 4) + RequiredBytesToEncodeString(value); + + byte[] buffer = BufferPool.Get(requiredBytes, true); + UInt32 offset = 0; + + buffer[0] = 0x10; + EncodeInteger(index, 4, buffer, ref offset); + EncodeString(value, buffer, ref offset); + + stream.Write(buffer, 0, (int)offset); + + BufferPool.Release(buffer); + } + + private static void WriteLiteralHeaderFieldNeverIndexed_NewName(Stream stream, string header, string value) + { + // https://http2.github.io/http2-spec/compression.html#literal.header.never.indexed + + UInt32 requiredBytes = 1 + RequiredBytesToEncodeString(header) + RequiredBytesToEncodeString(value); + + byte[] buffer = BufferPool.Get(requiredBytes, true); + UInt32 offset = 0; + + buffer[offset++] = 0x10; + EncodeString(header, buffer, ref offset); + EncodeString(value, buffer, ref offset); + + stream.Write(buffer, 0, (int)offset); + + BufferPool.Release(buffer); + } + + private static void WriteDynamicTableSizeUpdate(Stream stream, UInt16 maxSize) + { + // https://http2.github.io/http2-spec/compression.html#encoding.context.update + + UInt32 requiredBytes = RequiredBytesToEncodeInteger(maxSize, 5); + + byte[] buffer = BufferPool.Get(requiredBytes, true); + UInt32 offset = 0; + + buffer[offset] = 0x20; + EncodeInteger(maxSize, 5, buffer, ref offset); + + stream.Write(buffer, 0, (int)offset); + + BufferPool.Release(buffer); + } + + private static UInt32 RequiredBytesToEncodeString(string str) + { + uint requiredBytesForRawStr = RequiredBytesToEncodeRawString(str); + uint requiredBytesForHuffman = RequiredBytesToEncodeStringWithHuffman(str); + requiredBytesForHuffman += RequiredBytesToEncodeInteger(requiredBytesForHuffman, 7); + + return Math.Min(requiredBytesForRawStr, requiredBytesForHuffman); + } + + private static void EncodeString(string str, byte[] buffer, ref UInt32 offset) + { + uint requiredBytesForRawStr = RequiredBytesToEncodeRawString(str); + uint requiredBytesForHuffman = RequiredBytesToEncodeStringWithHuffman(str); + + // if using huffman encoding would produce the same length, we choose raw encoding instead as it requires + // less CPU cicles + if (requiredBytesForRawStr <= requiredBytesForHuffman + RequiredBytesToEncodeInteger(requiredBytesForHuffman, 7)) + EncodeRawStringTo(str, buffer, ref offset); + else + EncodeStringWithHuffman(str, requiredBytesForHuffman, buffer, ref offset); + } + + // This calculates only the length of the compressed string, + // additional header length must be calculated using the value returned by this function + private static UInt32 RequiredBytesToEncodeStringWithHuffman(string str) + { + int requiredBytesForStr = System.Text.Encoding.UTF8.GetByteCount(str); + byte[] strBytes = BufferPool.Get(requiredBytesForStr, true); + + System.Text.Encoding.UTF8.GetBytes(str, 0, str.Length, strBytes, 0); + + UInt32 requiredBits = 0; + + for (int i = 0; i < requiredBytesForStr; ++i) + requiredBits += HuffmanEncoder.GetEntryForCodePoint(strBytes[i]).Bits; + + BufferPool.Release(strBytes); + + return (UInt32)((requiredBits / 8) + ((requiredBits % 8) == 0 ? 0 : 1)); + } + + private static void EncodeStringWithHuffman(string str, UInt32 encodedLength, byte[] buffer, ref UInt32 offset) + { + int requiredBytesForStr = System.Text.Encoding.UTF8.GetByteCount(str); + byte[] strBytes = BufferPool.Get(requiredBytesForStr, true); + + System.Text.Encoding.UTF8.GetBytes(str, 0, str.Length, strBytes, 0); + + // 0. bit: huffman flag + buffer[offset] = 0x80; + + // 1..7+ bit: length + EncodeInteger(encodedLength, 7, buffer, ref offset); + + byte bufferBitIdx = 0; + + for (int i = 0; i < requiredBytesForStr; ++i) + AddCodePointToBuffer(HuffmanEncoder.GetEntryForCodePoint(strBytes[i]), buffer, ref offset, ref bufferBitIdx); + + // https://http2.github.io/http2-spec/compression.html#string.literal.representation + // As the Huffman-encoded data doesn't always end at an octet boundary, some padding is inserted after it, + // up to the next octet boundary. To prevent this padding from being misinterpreted as part of the string literal, + // the most significant bits of the code corresponding to the EOS (end-of-string) symbol are used. + if (bufferBitIdx != 0) + AddCodePointToBuffer(HuffmanEncoder.GetEntryForCodePoint(256), buffer, ref offset, ref bufferBitIdx, true); + + BufferPool.Release(strBytes); + } + + private static void AddCodePointToBuffer(HuffmanEncoder.TableEntry code, byte[] buffer, ref UInt32 offset, ref byte bufferBitIdx, bool finishOnBoundary = false) + { + for (byte codeBitIdx = 1; codeBitIdx <= code.Bits; ++codeBitIdx) + { + byte bit = code.GetBitAtIdx(codeBitIdx); + buffer[offset] = BufferHelper.SetBit(buffer[offset], bufferBitIdx, bit); + + // octet boundary reached, proceed to the next octet + if (++bufferBitIdx == 8) + { + if (++offset < buffer.Length) + buffer[offset] = 0; + + if (finishOnBoundary) + return; + + bufferBitIdx = 0; + } + } + } + + private static UInt32 RequiredBytesToEncodeRawString(string str) + { + int requiredBytesForStr = System.Text.Encoding.UTF8.GetByteCount(str); + int requiredBytesForLengthPrefix = RequiredBytesToEncodeInteger((UInt32)requiredBytesForStr, 7); + + return (UInt32)(requiredBytesForStr + requiredBytesForLengthPrefix); + } + + // This method encodes a string without huffman encoding + private static void EncodeRawStringTo(string str, byte[] buffer, ref UInt32 offset) + { + uint requiredBytesForStr = (uint)System.Text.Encoding.UTF8.GetByteCount(str); + int requiredBytesForLengthPrefix = RequiredBytesToEncodeInteger((UInt32)requiredBytesForStr, 7); + + UInt32 originalOffset = offset; + buffer[offset] = 0; + EncodeInteger(requiredBytesForStr, 7, buffer, ref offset); + + // Zero out the huffman flag + buffer[originalOffset] = BufferHelper.SetBit(buffer[originalOffset], 0, false); + + if (offset != originalOffset + requiredBytesForLengthPrefix) + throw new Exception(string.Format("offset({0}) != originalOffset({1}) + requiredBytesForLengthPrefix({1})", offset, originalOffset, requiredBytesForLengthPrefix)); + + System.Text.Encoding.UTF8.GetBytes(str, 0, str.Length, buffer, (int)offset); + offset += requiredBytesForStr; + } + + private static byte RequiredBytesToEncodeInteger(UInt32 value, byte N) + { + UInt32 maxValue = (1u << N) - 1; + byte count = 0; + + // If the integer value is small enough, i.e., strictly less than 2^N-1, it is encoded within the N-bit prefix. + if (value < maxValue) + { + count++; + } + else + { + // Otherwise, all the bits of the prefix are set to 1, and the value, decreased by 2^N-1 + count++; + value -= maxValue; + + while (value >= 0x80) + { + // The most significant bit of each octet is used as a continuation flag: its value is set to 1 except for the last octet in the list. + count++; + value = value / 0x80; + } + + count++; + } + + return count; + } + + // https://http2.github.io/http2-spec/compression.html#integer.representation + private static void EncodeInteger(UInt32 value, byte N, byte[] buffer, ref UInt32 offset) + { + // 2^N - 1 + UInt32 maxValue = (1u << N) - 1; + + // If the integer value is small enough, i.e., strictly less than 2^N-1, it is encoded within the N-bit prefix. + if (value < maxValue) + { + buffer[offset++] |= (byte)value; + } + else + { + // Otherwise, all the bits of the prefix are set to 1, and the value, decreased by 2^N-1 + buffer[offset++] |= (byte)(0xFF >> (8 - N)); + value -= maxValue; + + while (value >= 0x80) + { + // The most significant bit of each octet is used as a continuation flag: its value is set to 1 except for the last octet in the list. + buffer[offset++] = (byte)(0x80 | (0x7F & value)); + value = value / 0x80; + } + + buffer[offset++] = (byte)value; + } + } + + // https://http2.github.io/http2-spec/compression.html#integer.representation + private static UInt32 DecodeInteger(byte N, byte[] buffer, ref UInt32 offset) + { + // The starting value is the value behind the mask of the N bits + UInt32 value = (UInt32)(buffer[offset++] & (byte)(0xFF >> (8 - N))); + + // All N bits are 1s ? If so, we have at least one another byte to decode + if (value == (1u << N) - 1) + { + byte shift = 0; + + do + { + // The most significant bit is a continuation flag, so we have to mask it out + value += (UInt32)((buffer[offset] & 0x7F) << shift); + shift += 7; + } while ((buffer[offset++] & 0x80) == 0x80); + } + + return value; + } + + // https://http2.github.io/http2-spec/compression.html#integer.representation + private static UInt32 DecodeInteger(byte N, byte data, Stream stream) + { + // The starting value is the value behind the mask of the N bits + UInt32 value = (UInt32)(data & (byte)(0xFF >> (8 - N))); + + // All N bits are 1s ? If so, we have at least one another byte to decode + if (value == (1u << N) - 1) + { + byte shift = 0; + + do + { + data = (byte)stream.ReadByte(); + + // The most significant bit is a continuation flag, so we have to mask it out + value += (UInt32)((data & 0x7F) << shift); + shift += 7; + } while ((data & 0x80) == 0x80); + } + + return value; + } + + public override string ToString() + { + return this.requestTable.ToString() + this.responseTable.ToString(); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HPACKEncoder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HPACKEncoder.cs.meta new file mode 100644 index 000000000..6f3591da0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HPACKEncoder.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6b9891b070f01ec458dd74bd4e91cf75 +timeCreated: 1571210041 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2FrameHelper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2FrameHelper.cs new file mode 100644 index 000000000..65dd9bd5b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2FrameHelper.cs @@ -0,0 +1,402 @@ +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_ALTERNATE_SSL && !BESTHTTP_DISABLE_HTTP2 + +using BestHTTP.Extensions; +using BestHTTP.PlatformSupport.Memory; +using System; +using System.Collections.Generic; +using System.IO; + +namespace BestHTTP.Connections.HTTP2 +{ + // https://httpwg.org/specs/rfc7540.html#ErrorCodes + public enum HTTP2ErrorCodes + { + NO_ERROR = 0x00, + PROTOCOL_ERROR = 0x01, + INTERNAL_ERROR = 0x02, + FLOW_CONTROL_ERROR = 0x03, + SETTINGS_TIMEOUT = 0x04, + STREAM_CLOSED = 0x05, + FRAME_SIZE_ERROR = 0x06, + REFUSED_STREAM = 0x07, + CANCEL = 0x08, + COMPRESSION_ERROR = 0x09, + CONNECT_ERROR = 0x0A, + ENHANCE_YOUR_CALM = 0x0B, + INADEQUATE_SECURITY = 0x0C, + HTTP_1_1_REQUIRED = 0x0D + } + + public static class HTTP2FrameHelper + { + public static HTTP2ContinuationFrame ReadContinuationFrame(HTTP2FrameHeaderAndPayload header) + { + // https://httpwg.org/specs/rfc7540.html#CONTINUATION + + HTTP2ContinuationFrame frame = new HTTP2ContinuationFrame(header); + + frame.HeaderBlockFragment = header.Payload; + header.Payload = null; + + return frame; + } + + public static HTTP2WindowUpdateFrame ReadWindowUpdateFrame(HTTP2FrameHeaderAndPayload header) + { + // https://httpwg.org/specs/rfc7540.html#WINDOW_UPDATE + + HTTP2WindowUpdateFrame frame = new HTTP2WindowUpdateFrame(header); + + frame.ReservedBit = BufferHelper.ReadBit(header.Payload[0], 0); + frame.WindowSizeIncrement = BufferHelper.ReadUInt31(header.Payload, 0); + + return frame; + } + + public static HTTP2GoAwayFrame ReadGoAwayFrame(HTTP2FrameHeaderAndPayload header) + { + // https://httpwg.org/specs/rfc7540.html#GOAWAY + // str id error + // | 0, 1, 2, 3 | 4, 5, 6, 7 | ... + + HTTP2GoAwayFrame frame = new HTTP2GoAwayFrame(header); + + frame.ReservedBit = BufferHelper.ReadBit(header.Payload[0], 0); + frame.LastStreamId = BufferHelper.ReadUInt31(header.Payload, 0); + frame.ErrorCode = BufferHelper.ReadUInt32(header.Payload, 4); + + frame.AdditionalDebugDataLength = header.PayloadLength - 8; + if (frame.AdditionalDebugDataLength > 0) + { + frame.AdditionalDebugData = BufferPool.Get(frame.AdditionalDebugDataLength, true); + Array.Copy(header.Payload, 8, frame.AdditionalDebugData, 0, frame.AdditionalDebugDataLength); + } + + return frame; + } + + public static HTTP2PingFrame ReadPingFrame(HTTP2FrameHeaderAndPayload header) + { + // https://httpwg.org/specs/rfc7540.html#PING + + HTTP2PingFrame frame = new HTTP2PingFrame(header); + + Array.Copy(header.Payload, 0, frame.OpaqueData, 0, frame.OpaqueDataLength); + + return frame; + } + + public static HTTP2PushPromiseFrame ReadPush_PromiseFrame(HTTP2FrameHeaderAndPayload header) + { + // https://httpwg.org/specs/rfc7540.html#PUSH_PROMISE + + HTTP2PushPromiseFrame frame = new HTTP2PushPromiseFrame(header); + frame.HeaderBlockFragmentLength = header.PayloadLength - 4; // PromisedStreamId + + bool isPadded = (frame.Flags & HTTP2PushPromiseFlags.PADDED) != 0; + if (isPadded) + { + frame.PadLength = header.Payload[0]; + frame.HeaderBlockFragmentLength -= (uint)(1 + (frame.PadLength ?? 0)); + } + + frame.ReservedBit = BufferHelper.ReadBit(header.Payload[1], 0); + frame.PromisedStreamId = BufferHelper.ReadUInt31(header.Payload, 1); + + frame.HeaderBlockFragmentIdx = (UInt32)(isPadded ? 5 : 4); + frame.HeaderBlockFragment = header.Payload; + header.Payload = null; + + return frame; + } + + public static HTTP2RSTStreamFrame ReadRST_StreamFrame(HTTP2FrameHeaderAndPayload header) + { + // https://httpwg.org/specs/rfc7540.html#RST_STREAM + + HTTP2RSTStreamFrame frame = new HTTP2RSTStreamFrame(header); + frame.ErrorCode = BufferHelper.ReadUInt32(header.Payload, 0); + + return frame; + } + + public static HTTP2PriorityFrame ReadPriorityFrame(HTTP2FrameHeaderAndPayload header) + { + // https://httpwg.org/specs/rfc7540.html#PRIORITY + + if (header.PayloadLength != 5) + { + //throw FRAME_SIZE_ERROR + } + + HTTP2PriorityFrame frame = new HTTP2PriorityFrame(header); + + frame.IsExclusive = BufferHelper.ReadBit(header.Payload[0], 0); + frame.StreamDependency = BufferHelper.ReadUInt31(header.Payload, 0); + frame.Weight = header.Payload[4]; + + return frame; + } + + public static HTTP2HeadersFrame ReadHeadersFrame(HTTP2FrameHeaderAndPayload header) + { + // https://httpwg.org/specs/rfc7540.html#HEADERS + + HTTP2HeadersFrame frame = new HTTP2HeadersFrame(header); + frame.HeaderBlockFragmentLength = header.PayloadLength; + + bool isPadded = (frame.Flags & HTTP2HeadersFlags.PADDED) != 0; + bool isPriority = (frame.Flags & HTTP2HeadersFlags.PRIORITY) != 0; + + int payloadIdx = 0; + + if (isPadded) + { + frame.PadLength = header.Payload[payloadIdx++]; + + uint subLength = (uint)(1 + (frame.PadLength ?? 0)); + if (subLength <= frame.HeaderBlockFragmentLength) + frame.HeaderBlockFragmentLength -= subLength; + //else + // throw PROTOCOL_ERROR; + } + + if (isPriority) + { + frame.IsExclusive = BufferHelper.ReadBit(header.Payload[payloadIdx], 0); + frame.StreamDependency = BufferHelper.ReadUInt31(header.Payload, payloadIdx); + payloadIdx += 4; + frame.Weight = header.Payload[payloadIdx++]; + + uint subLength = 5; + if (subLength <= frame.HeaderBlockFragmentLength) + frame.HeaderBlockFragmentLength -= subLength; + //else + // throw PROTOCOL_ERROR; + } + + frame.HeaderBlockFragmentIdx = (UInt32)payloadIdx; + frame.HeaderBlockFragment = header.Payload; + + return frame; + } + + public static HTTP2DataFrame ReadDataFrame(HTTP2FrameHeaderAndPayload header) + { + // https://httpwg.org/specs/rfc7540.html#DATA + + HTTP2DataFrame frame = new HTTP2DataFrame(header); + + frame.DataLength = header.PayloadLength; + + bool isPadded = (frame.Flags & HTTP2DataFlags.PADDED) != 0; + if (isPadded) + { + frame.PadLength = header.Payload[0]; + + uint subLength = (uint)(1 + (frame.PadLength ?? 0)); + if (subLength <= frame.DataLength) + frame.DataLength -= subLength; + //else + // throw PROTOCOL_ERROR; + } + + frame.DataIdx = (UInt32)(isPadded ? 1 : 0); + frame.Data = header.Payload; + header.Payload = null; + + return frame; + } + + public static HTTP2AltSVCFrame ReadAltSvcFrame(HTTP2FrameHeaderAndPayload header) + { + HTTP2AltSVCFrame frame = new HTTP2AltSVCFrame(header); + + // Implement + + return frame; + } + + public static void StreamRead(Stream stream, byte[] buffer, int offset, uint count) + { + if (count == 0) + return; + + uint sumRead = 0; + do + { + int readCount = (int)(count - sumRead); + int streamReadCount = stream.Read(buffer, (int)(offset + sumRead), readCount); + if (streamReadCount <= 0 && readCount > 0) + throw new Exception("TCP Stream closed!"); + sumRead += (uint)streamReadCount; + } while (sumRead < count); + } + + public static PooledBuffer HeaderAsBinary(HTTP2FrameHeaderAndPayload header) + { + // https://httpwg.org/specs/rfc7540.html#FrameHeader + + var buffer = BufferPool.Get(9, true); + + BufferHelper.SetUInt24(buffer, 0, header.PayloadLength); + buffer[3] = (byte)header.Type; + buffer[4] = header.Flags; + BufferHelper.SetUInt31(buffer, 5, header.StreamId); + + return new PooledBuffer { Data = buffer, Length = 9 }; + } + + public static HTTP2FrameHeaderAndPayload ReadHeader(Stream stream) + { + byte[] buffer = BufferPool.Get(9, true); + + try + { + StreamRead(stream, buffer, 0, 9); + } + catch + { + BufferPool.Release(buffer); + throw; + } + + HTTP2FrameHeaderAndPayload header = new HTTP2FrameHeaderAndPayload(); + + header.PayloadLength = BufferHelper.ReadUInt24(buffer, 0); + header.Type = (HTTP2FrameTypes)buffer[3]; + header.Flags = buffer[4]; + header.StreamId = BufferHelper.ReadUInt31(buffer, 5); + + BufferPool.Release(buffer); + + header.Payload = BufferPool.Get(header.PayloadLength, true); + + try + { + StreamRead(stream, header.Payload, 0, header.PayloadLength); + } + catch + { + BufferPool.Release(header.Payload); + throw; + } + + return header; + } + + public static HTTP2SettingsFrame ReadSettings(HTTP2FrameHeaderAndPayload header) + { + HTTP2SettingsFrame frame = new HTTP2SettingsFrame(header); + + if (header.PayloadLength > 0) + { + int kvpCount = (int)(header.PayloadLength / 6); + + frame.Settings = new List>(kvpCount); + for (int i = 0; i < kvpCount; ++i) + { + HTTP2Settings key = (HTTP2Settings)BufferHelper.ReadUInt16(header.Payload, i * 6); + UInt32 value = BufferHelper.ReadUInt32(header.Payload, (i * 6) + 2); + + frame.Settings.Add(new KeyValuePair(key, value)); + } + } + + return frame; + } + + public static HTTP2FrameHeaderAndPayload CreateACKSettingsFrame() + { + HTTP2FrameHeaderAndPayload frame = new HTTP2FrameHeaderAndPayload(); + frame.Type = HTTP2FrameTypes.SETTINGS; + frame.Flags = (byte)HTTP2SettingsFlags.ACK; + + return frame; + } + + public static HTTP2FrameHeaderAndPayload CreateSettingsFrame(List> settings) + { + HTTP2FrameHeaderAndPayload frame = new HTTP2FrameHeaderAndPayload(); + frame.Type = HTTP2FrameTypes.SETTINGS; + frame.Flags = 0; + frame.PayloadLength = (UInt32)settings.Count * 6; + + frame.Payload = BufferPool.Get(frame.PayloadLength, true); + + for (int i = 0; i < settings.Count; ++i) + { + BufferHelper.SetUInt16(frame.Payload, i * 6, (UInt16)settings[i].Key); + BufferHelper.SetUInt32(frame.Payload, (i * 6) + 2, settings[i].Value); + } + + return frame; + } + + public static HTTP2FrameHeaderAndPayload CreatePingFrame(HTTP2PingFlags flags = HTTP2PingFlags.None) + { + // https://httpwg.org/specs/rfc7540.html#PING + + HTTP2FrameHeaderAndPayload frame = new HTTP2FrameHeaderAndPayload(); + frame.Type = HTTP2FrameTypes.PING; + frame.Flags = (byte)flags; + frame.StreamId = 0; + frame.Payload = BufferPool.Get(8, true); + frame.PayloadLength = 8; + + return frame; + } + + public static HTTP2FrameHeaderAndPayload CreateWindowUpdateFrame(UInt32 streamId, UInt32 windowSizeIncrement) + { + // https://httpwg.org/specs/rfc7540.html#WINDOW_UPDATE + + HTTP2FrameHeaderAndPayload frame = new HTTP2FrameHeaderAndPayload(); + frame.Type = HTTP2FrameTypes.WINDOW_UPDATE; + frame.Flags = 0; + frame.StreamId = streamId; + frame.Payload = BufferPool.Get(4, true); + frame.PayloadLength = 4; + + BufferHelper.SetBit(0, 0, 0); + BufferHelper.SetUInt31(frame.Payload, 0, windowSizeIncrement); + + return frame; + } + + public static HTTP2FrameHeaderAndPayload CreateGoAwayFrame(UInt32 lastStreamId, HTTP2ErrorCodes error) + { + // https://httpwg.org/specs/rfc7540.html#GOAWAY + + HTTP2FrameHeaderAndPayload frame = new HTTP2FrameHeaderAndPayload(); + frame.Type = HTTP2FrameTypes.GOAWAY; + frame.Flags = 0; + frame.StreamId = 0; + frame.Payload = BufferPool.Get(8, true); + frame.PayloadLength = 8; + + BufferHelper.SetUInt31(frame.Payload, 0, lastStreamId); + BufferHelper.SetUInt31(frame.Payload, 4, (UInt32)error); + + return frame; + } + + public static HTTP2FrameHeaderAndPayload CreateRSTFrame(UInt32 streamId, HTTP2ErrorCodes errorCode) + { + // https://httpwg.org/specs/rfc7540.html#RST_STREAM + + HTTP2FrameHeaderAndPayload frame = new HTTP2FrameHeaderAndPayload(); + frame.Type = HTTP2FrameTypes.RST_STREAM; + frame.Flags = 0; + frame.StreamId = streamId; + frame.Payload = BufferPool.Get(4, true); + frame.PayloadLength = 4; + + BufferHelper.SetUInt32(frame.Payload, 0, (UInt32)errorCode); + + return frame; + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2FrameHelper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2FrameHelper.cs.meta new file mode 100644 index 000000000..82d113a58 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2FrameHelper.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8a3c905b246be424b8afe85c7e0a8526 +timeCreated: 1571210041 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Frames.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Frames.cs new file mode 100644 index 000000000..0d75ea717 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Frames.cs @@ -0,0 +1,406 @@ +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_ALTERNATE_SSL && !BESTHTTP_DISABLE_HTTP2 + +using BestHTTP.Extensions; +using BestHTTP.PlatformSupport.Memory; +using System; +using System.Collections.Generic; + +namespace BestHTTP.Connections.HTTP2 +{ + // https://httpwg.org/specs/rfc7540.html#iana-frames + public enum HTTP2FrameTypes : byte + { + DATA = 0x00, + HEADERS = 0x01, + PRIORITY = 0x02, + RST_STREAM = 0x03, + SETTINGS = 0x04, + PUSH_PROMISE = 0x05, + PING = 0x06, + GOAWAY = 0x07, + WINDOW_UPDATE = 0x08, + CONTINUATION = 0x09, + + // https://tools.ietf.org/html/rfc7838#section-4 + ALT_SVC = 0x0A + } + + [Flags] + public enum HTTP2DataFlags : byte + { + None = 0x00, + END_STREAM = 0x01, + PADDED = 0x08, + } + + [Flags] + public enum HTTP2HeadersFlags : byte + { + None = 0x00, + END_STREAM = 0x01, + END_HEADERS = 0x04, + PADDED = 0x08, + PRIORITY = 0x20, + } + + [Flags] + public enum HTTP2SettingsFlags : byte + { + None = 0x00, + ACK = 0x01, + } + + [Flags] + public enum HTTP2PushPromiseFlags : byte + { + None = 0x00, + END_HEADERS = 0x04, + PADDED = 0x08, + } + + [Flags] + public enum HTTP2PingFlags : byte + { + None = 0x00, + ACK = 0x01, + } + + [Flags] + public enum HTTP2ContinuationFlags : byte + { + None = 0x00, + END_HEADERS = 0x04, + } + + public struct HTTP2FrameHeaderAndPayload + { + public UInt32 PayloadLength; + public HTTP2FrameTypes Type; + public byte Flags; + public UInt32 StreamId; + public byte[] Payload; + + public UInt32 PayloadOffset; + public bool DontUseMemPool; + + public override string ToString() + { + return string.Format("[HTTP2FrameHeaderAndPayload Length: {0}, Type: {1}, Flags: {2}, StreamId: {3}, PayloadOffset: {4}, DontUseMemPool: {5}, Payload: {6}]", + this.PayloadLength, this.Type, this.Flags.ToBinaryStr(), this.StreamId, this.PayloadOffset, this.DontUseMemPool, + this.Payload == null ? BufferSegment.Empty : new BufferSegment(this.Payload, (int)this.PayloadOffset, (int)this.PayloadLength)); + } + + public string PayloadAsHex() + { + System.Text.StringBuilder sb = PlatformSupport.Text.StringBuilderPool.Get((int)this.PayloadLength + 2); + sb.Append("["); + if (this.Payload != null && this.PayloadLength > 0) + { + uint idx = this.PayloadOffset; + sb.Append(this.Payload[idx++]); + for (int i = 1; i < this.PayloadLength; i++) + sb.AppendFormat(", {0:X2}", this.Payload[idx++]); + } + sb.Append("]"); + + return PlatformSupport.Text.StringBuilderPool.ReleaseAndGrab(sb); + } + } + + public struct HTTP2SettingsFrame + { + public readonly HTTP2FrameHeaderAndPayload Header; + public HTTP2SettingsFlags Flags { get { return (HTTP2SettingsFlags)this.Header.Flags; } } + public List> Settings; + + public HTTP2SettingsFrame(HTTP2FrameHeaderAndPayload header) + { + this.Header = header; + this.Settings = null; + } + + public override string ToString() + { + string settings = null; + if (this.Settings != null) + { + System.Text.StringBuilder sb = PlatformSupport.Text.StringBuilderPool.Get(this.Settings.Count + 2); + + sb.Append("["); + foreach (var kvp in this.Settings) + sb.AppendFormat("[{0}: {1}]", kvp.Key, kvp.Value); + sb.Append("]"); + + settings = PlatformSupport.Text.StringBuilderPool.ReleaseAndGrab(sb); + } + + return string.Format("[HTTP2SettingsFrame Header: {0}, Flags: {1}, Settings: {2}]", this.Header.ToString(), this.Flags, settings ?? "Empty"); + } + } + + public struct HTTP2DataFrame + { + public readonly HTTP2FrameHeaderAndPayload Header; + public HTTP2DataFlags Flags { get { return (HTTP2DataFlags)this.Header.Flags; } } + + public byte? PadLength; + public UInt32 DataIdx; + public byte[] Data; + public uint DataLength; + + public HTTP2DataFrame(HTTP2FrameHeaderAndPayload header) + { + this.Header = header; + this.PadLength = null; + this.DataIdx = 0; + this.Data = null; + this.DataLength = 0; + } + + public override string ToString() + { + return string.Format("[HTTP2DataFrame Header: {0}, Flags: {1}, PadLength: {2}, DataLength: {3}]", + this.Header.ToString(), + this.Flags, + this.PadLength == null ? ":Empty" : this.PadLength.Value.ToString(), + this.DataLength); + } + } + + public struct HTTP2HeadersFrame + { + public readonly HTTP2FrameHeaderAndPayload Header; + public HTTP2HeadersFlags Flags { get { return (HTTP2HeadersFlags)this.Header.Flags; } } + + public byte? PadLength; + public byte? IsExclusive; + public UInt32? StreamDependency; + public byte? Weight; + public UInt32 HeaderBlockFragmentIdx; + public byte[] HeaderBlockFragment; + public UInt32 HeaderBlockFragmentLength; + + public HTTP2HeadersFrame(HTTP2FrameHeaderAndPayload header) + { + this.Header = header; + this.PadLength = null; + this.IsExclusive = null; + this.StreamDependency = null; + this.Weight = null; + this.HeaderBlockFragmentIdx = 0; + this.HeaderBlockFragment = null; + this.HeaderBlockFragmentLength = 0; + } + + public override string ToString() + { + return string.Format("[HTTP2HeadersFrame Header: {0}, Flags: {1}, PadLength: {2}, IsExclusive: {3}, StreamDependency: {4}, Weight: {5}, HeaderBlockFragmentLength: {6}]", + this.Header.ToString(), + this.Flags, + this.PadLength == null ? ":Empty" : this.PadLength.Value.ToString(), + this.IsExclusive == null ? "Empty" : this.IsExclusive.Value.ToString(), + this.StreamDependency == null ? "Empty" : this.StreamDependency.Value.ToString(), + this.Weight == null ? "Empty" : this.Weight.Value.ToString(), + this.HeaderBlockFragmentLength); + } + } + + public struct HTTP2PriorityFrame + { + public readonly HTTP2FrameHeaderAndPayload Header; + + public byte IsExclusive; + public UInt32 StreamDependency; + public byte Weight; + + public HTTP2PriorityFrame(HTTP2FrameHeaderAndPayload header) + { + this.Header = header; + this.IsExclusive = 0; + this.StreamDependency = 0; + this.Weight = 0; + } + + public override string ToString() + { + return string.Format("[HTTP2PriorityFrame Header: {0}, IsExclusive: {1}, StreamDependency: {2}, Weight: {3}]", + this.Header.ToString(), this.IsExclusive, this.StreamDependency, this.Weight); + } + } + + public struct HTTP2RSTStreamFrame + { + public readonly HTTP2FrameHeaderAndPayload Header; + + public UInt32 ErrorCode; + public HTTP2ErrorCodes Error { get { return (HTTP2ErrorCodes)this.ErrorCode; } } + + public HTTP2RSTStreamFrame(HTTP2FrameHeaderAndPayload header) + { + this.Header = header; + this.ErrorCode = 0; + } + + public override string ToString() + { + return string.Format("[HTTP2RST_StreamFrame Header: {0}, Error: {1}({2})]", this.Header.ToString(), this.Error, this.ErrorCode); + } + } + + public struct HTTP2PushPromiseFrame + { + public readonly HTTP2FrameHeaderAndPayload Header; + public HTTP2PushPromiseFlags Flags { get { return (HTTP2PushPromiseFlags)this.Header.Flags; } } + + public byte? PadLength; + public byte ReservedBit; + public UInt32 PromisedStreamId; + public UInt32 HeaderBlockFragmentIdx; + public byte[] HeaderBlockFragment; + public UInt32 HeaderBlockFragmentLength; + + public HTTP2PushPromiseFrame(HTTP2FrameHeaderAndPayload header) + { + this.Header = header; + this.PadLength = null; + this.ReservedBit = 0; + this.PromisedStreamId = 0; + this.HeaderBlockFragmentIdx = 0; + this.HeaderBlockFragment = null; + this.HeaderBlockFragmentLength = 0; + } + + public override string ToString() + { + return string.Format("[HTTP2Push_PromiseFrame Header: {0}, Flags: {1}, PadLength: {2}, ReservedBit: {3}, PromisedStreamId: {4}, HeaderBlockFragmentLength: {5}]", + this.Header.ToString(), + this.Flags, + this.PadLength == null ? "Empty" : this.PadLength.Value.ToString(), + this.ReservedBit, + this.PromisedStreamId, + this.HeaderBlockFragmentLength); + } + } + + public struct HTTP2PingFrame + { + public readonly HTTP2FrameHeaderAndPayload Header; + public HTTP2PingFlags Flags { get { return (HTTP2PingFlags)this.Header.Flags; } } + + public readonly byte[] OpaqueData; + public readonly byte OpaqueDataLength; + + public HTTP2PingFrame(HTTP2FrameHeaderAndPayload header) + { + this.Header = header; + this.OpaqueData = BufferPool.Get(8, true); + this.OpaqueDataLength = 8; + } + + public override string ToString() + { + return string.Format("[HTTP2PingFrame Header: {0}, Flags: {1}, OpaqueData: {2}]", + this.Header.ToString(), + this.Flags, + SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(this.OpaqueData, 0, this.OpaqueDataLength)); + } + } + + public struct HTTP2GoAwayFrame + { + public readonly HTTP2FrameHeaderAndPayload Header; + public HTTP2ErrorCodes Error { get { return (HTTP2ErrorCodes)this.ErrorCode; } } + + public byte ReservedBit; + public UInt32 LastStreamId; + public UInt32 ErrorCode; + public byte[] AdditionalDebugData; + public UInt32 AdditionalDebugDataLength; + + public HTTP2GoAwayFrame(HTTP2FrameHeaderAndPayload header) + { + this.Header = header; + this.ReservedBit = 0; + this.LastStreamId = 0; + this.ErrorCode = 0; + this.AdditionalDebugData = null; + this.AdditionalDebugDataLength = 0; + } + + public override string ToString() + { + return string.Format("[HTTP2GoAwayFrame Header: {0}, ReservedBit: {1}, LastStreamId: {2}, Error: {3}({4}), AdditionalDebugData({5}): {6}]", + this.Header.ToString(), + this.ReservedBit, + this.LastStreamId, + this.Error, + this.ErrorCode, + this.AdditionalDebugDataLength, + this.AdditionalDebugData == null ? "Empty" : SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(this.AdditionalDebugData, 0, (int)this.AdditionalDebugDataLength)); + } + } + + public struct HTTP2WindowUpdateFrame + { + public readonly HTTP2FrameHeaderAndPayload Header; + + public byte ReservedBit; + public UInt32 WindowSizeIncrement; + + public HTTP2WindowUpdateFrame(HTTP2FrameHeaderAndPayload header) + { + this.Header = header; + this.ReservedBit = 0; + this.WindowSizeIncrement = 0; + } + + public override string ToString() + { + return string.Format("[HTTP2WindowUpdateFrame Header: {0}, ReservedBit: {1}, WindowSizeIncrement: {2}]", + this.Header.ToString(), this.ReservedBit, this.WindowSizeIncrement); + } + } + + public struct HTTP2ContinuationFrame + { + public readonly HTTP2FrameHeaderAndPayload Header; + public HTTP2ContinuationFlags Flags { get { return (HTTP2ContinuationFlags)this.Header.Flags; } } + + public byte[] HeaderBlockFragment; + public UInt32 HeaderBlockFragmentLength { get { return this.Header.PayloadLength; } } + + public HTTP2ContinuationFrame(HTTP2FrameHeaderAndPayload header) + { + this.Header = header; + this.HeaderBlockFragment = null; + } + + public override string ToString() + { + return string.Format("[HTTP2ContinuationFrame Header: {0}, Flags: {1}, HeaderBlockFragmentLength: {2}]", + this.Header.ToString(), + this.Flags, + this.HeaderBlockFragmentLength); + } + } + + /// + /// https://tools.ietf.org/html/rfc7838#section-4 + /// + public struct HTTP2AltSVCFrame + { + public readonly HTTP2FrameHeaderAndPayload Header; + + public string Origin; + public string AltSvcFieldValue; + + public HTTP2AltSVCFrame(HTTP2FrameHeaderAndPayload header) + { + this.Header = header; + this.Origin = null; + this.AltSvcFieldValue = null; + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Frames.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Frames.cs.meta new file mode 100644 index 000000000..dca9372ca --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Frames.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 06f965acc306c134093ce2a816832155 +timeCreated: 1571210040 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Handler.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Handler.cs new file mode 100644 index 000000000..1dd714aad --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Handler.cs @@ -0,0 +1,671 @@ +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_ALTERNATE_SSL && !BESTHTTP_DISABLE_HTTP2 + +using System; +using System.Collections.Generic; +using System.Threading; + +using System.Collections.Concurrent; + +using BestHTTP.Extensions; +using BestHTTP.Core; +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.Logger; +using BestHTTP.PlatformSupport.Threading; + +namespace BestHTTP.Connections.HTTP2 +{ + public sealed class HTTP2Handler : IHTTPRequestHandler + { + public bool HasCustomRequestProcessor { get { return true; } } + + public KeepAliveHeader KeepAlive { get { return null; } } + + public bool CanProcessMultiple { get { return this.goAwaySentAt == DateTime.MaxValue && this.isRunning; } } + + // Connection preface starts with the string PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n). + private static readonly byte[] MAGIC = new byte[24] { 0x50, 0x52, 0x49, 0x20, 0x2a, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x32, 0x2e, 0x30, 0x0d, 0x0a, 0x0d, 0x0a, 0x53, 0x4d, 0x0d, 0x0a, 0x0d, 0x0a }; + public const UInt32 MaxValueFor31Bits = 0xFFFFFFFF >> 1; + + public double Latency { get; private set; } + + public HTTP2SettingsManager settings; + public HPACKEncoder HPACKEncoder; + + public LoggingContext Context { get; private set; } + + private DateTime lastPingSent = DateTime.MinValue; + private TimeSpan pingFrequency = TimeSpan.MaxValue; // going to be overridden in RunHandler + private int waitingForPingAck = 0; + + public static int RTTBufferCapacity = 5; + private CircularBuffer rtts = new CircularBuffer(RTTBufferCapacity); + + private volatile bool isRunning; + + private AutoResetEvent newFrameSignal = new AutoResetEvent(false); + + private ConcurrentQueue requestQueue = new ConcurrentQueue(); + + private List clientInitiatedStreams = new List(); + + private ConcurrentQueue newFrames = new ConcurrentQueue(); + + private List outgoingFrames = new List(); + + private UInt32 remoteWindow; + private DateTime lastInteraction; + private DateTime goAwaySentAt = DateTime.MaxValue; + + private HTTPConnection conn; + private int threadExitCount; + + private TimeSpan MaxGoAwayWaitTime { get { return this.goAwaySentAt == DateTime.MaxValue ? TimeSpan.MaxValue : TimeSpan.FromMilliseconds(Math.Max(this.Latency * 2.5, 1500)); } } + + // https://httpwg.org/specs/rfc7540.html#StreamIdentifiers + // Streams initiated by a client MUST use odd-numbered stream identifiers + // With an initial value of -1, the first client initiated stream's id going to be 1. + private long LastStreamId = -1; + + public HTTP2Handler(HTTPConnection conn) + { + this.Context = new LoggingContext(this); + + this.conn = conn; + this.isRunning = true; + + this.settings = new HTTP2SettingsManager(this); + + Process(this.conn.CurrentRequest); + } + + public void Process(HTTPRequest request) + { + HTTPManager.Logger.Information("HTTP2Handler", "Process request called", this.Context, request.Context); + + request.QueuedAt = DateTime.MinValue; + request.ProcessingStarted = this.lastInteraction = DateTime.UtcNow; + + this.requestQueue.Enqueue(request); + + // Wee might added the request to a dead queue, signaling would be pointless. + // When the ConnectionEventHelper processes the Close state-change event + // requests in the queue going to be resent. (We should avoid resending the request just right now, + // as it might still select this connection/handler resulting in a infinite loop.) + if (Volatile.Read(ref this.threadExitCount) == 0) + this.newFrameSignal.Set(); + } + + public void SignalRunnerThread() + { + this.newFrameSignal?.Set(); + } + + public void RunHandler() + { + HTTPManager.Logger.Information("HTTP2Handler", "Processing thread up and running!", this.Context); + + ThreadedRunner.SetThreadName("BestHTTP.HTTP2 Process"); + + PlatformSupport.Threading.ThreadedRunner.RunLongLiving(ReadThread); + + try + { + bool atLeastOneStreamHasAFrameToSend = true; + + this.HPACKEncoder = new HPACKEncoder(this, this.settings); + + // https://httpwg.org/specs/rfc7540.html#InitialWindowSize + // The connection flow-control window is also 65,535 octets. + this.remoteWindow = this.settings.RemoteSettings[HTTP2Settings.INITIAL_WINDOW_SIZE]; + + // we want to pack as many data as we can in one tcp segment, but setting the buffer's size too high + // we might keep data too long and send them in bursts instead of in a steady stream. + // Keeping it too low might result in a full tcp segment and one with very low payload + // Is it possible that one full tcp segment sized buffer would be the best, or multiple of it. + // It would keep the network busy without any fragments. The ethernet layer has a maximum of 1500 bytes, + // but there's two layers of 20 byte headers each, so as a theoretical maximum it's 1500-20-20 bytes. + // On the other hand, if the buffer is small (1-2), that means that for larger data, we have to do a lot + // of system calls, in that case a larger buffer might be better. Still, if we are not cpu bound, + // a well saturated network might serve us better. + using (WriteOnlyBufferedStream bufferedStream = new WriteOnlyBufferedStream(this.conn.connector.Stream, 1024 * 1024 /*1500 - 20 - 20*/)) + { + // The client connection preface starts with a sequence of 24 octets + bufferedStream.Write(MAGIC, 0, MAGIC.Length); + + // This sequence MUST be followed by a SETTINGS frame (Section 6.5), which MAY be empty. + // The client sends the client connection preface immediately upon receipt of a + // 101 (Switching Protocols) response (indicating a successful upgrade) + // or as the first application data octets of a TLS connection + + // Set streams' initial window size to its maximum. + this.settings.InitiatedMySettings[HTTP2Settings.INITIAL_WINDOW_SIZE] = HTTPManager.HTTP2Settings.InitialStreamWindowSize; + this.settings.InitiatedMySettings[HTTP2Settings.MAX_CONCURRENT_STREAMS] = HTTPManager.HTTP2Settings.MaxConcurrentStreams; + this.settings.InitiatedMySettings[HTTP2Settings.ENABLE_CONNECT_PROTOCOL] = (uint)(HTTPManager.HTTP2Settings.EnableConnectProtocol ? 1 : 0); + this.settings.InitiatedMySettings[HTTP2Settings.ENABLE_PUSH] = 0; + this.settings.SendChanges(this.outgoingFrames); + this.settings.RemoteSettings.OnSettingChangedEvent += OnRemoteSettingChanged; + + // The default window size for the whole connection is 65535 bytes, + // but we want to set it to the maximum possible value. + Int64 initialConnectionWindowSize = HTTPManager.HTTP2Settings.InitialConnectionWindowSize; + + // yandex.ru returns with an FLOW_CONTROL_ERROR (3) error when the plugin tries to set the connection window to 2^31 - 1 + // and works only with a maximum value of 2^31 - 10Mib (10 * 1024 * 1024). + if (initialConnectionWindowSize == HTTP2Handler.MaxValueFor31Bits) + initialConnectionWindowSize -= 10 * 1024 * 1024; + + Int64 diff = initialConnectionWindowSize - 65535; + if (diff > 0) + this.outgoingFrames.Add(HTTP2FrameHelper.CreateWindowUpdateFrame(0, (UInt32)diff)); + + this.pingFrequency = HTTPManager.HTTP2Settings.PingFrequency; + + while (this.isRunning) + { + DateTime now = DateTime.UtcNow; + + if (!atLeastOneStreamHasAFrameToSend) + { + // buffered stream will call flush automatically if its internal buffer is full. + // But we have to make it sure that we flush remaining data before we go to sleep. + bufferedStream.Flush(); + + // Wait until we have to send the next ping, OR a new frame is received on the read thread. + // lastPingSent Now lastPingSent+frequency lastPingSent+Ping timeout + //----|---------------------|---------------|----------------------|----------------------|------------| + // lastInteraction lastInteraction + MaxIdleTime + + var sendPingAt = this.lastPingSent + this.pingFrequency; + var timeoutAt = this.waitingForPingAck != 0 ? this.lastPingSent + HTTPManager.HTTP2Settings.Timeout : DateTime.MaxValue; + var nextPingInteraction = sendPingAt < timeoutAt ? sendPingAt : timeoutAt; + + var disconnectByIdleAt = this.lastInteraction + HTTPManager.HTTP2Settings.MaxIdleTime; + + var nextDueClientInteractionAt = nextPingInteraction < disconnectByIdleAt ? nextPingInteraction : disconnectByIdleAt; + int wait = (int)(nextDueClientInteractionAt - now).TotalMilliseconds; + + wait = (int)Math.Min(wait, this.MaxGoAwayWaitTime.TotalMilliseconds); + + TimeSpan nextStreamInteraction = TimeSpan.MaxValue; + for (int i = 0; i < this.clientInitiatedStreams.Count; i++) + { + var streamInteraction = this.clientInitiatedStreams[i].NextInteraction; + if (streamInteraction < nextStreamInteraction) + nextStreamInteraction = streamInteraction; + } + + wait = (int)Math.Min(wait, nextStreamInteraction.TotalMilliseconds); + + if (wait >= 1) + { + if (HTTPManager.Logger.Level <= Logger.Loglevels.All) + HTTPManager.Logger.Information("HTTP2Handler", string.Format("Sleeping for {0:N0}ms", wait), this.Context); + this.newFrameSignal.WaitOne(wait); + + now = DateTime.UtcNow; + } + } + + // Don't send a new ping until a pong isn't received for the last one + if (now - this.lastPingSent >= this.pingFrequency && Interlocked.CompareExchange(ref this.waitingForPingAck, 1, 0) == 0) + { + this.lastPingSent = now; + + var frame = HTTP2FrameHelper.CreatePingFrame(HTTP2PingFlags.None); + BufferHelper.SetLong(frame.Payload, 0, now.Ticks); + + this.outgoingFrames.Add(frame); + } + + // If no pong received in a (configurable) reasonable time, treat the connection broken + if (this.waitingForPingAck != 0 && now - this.lastPingSent >= HTTPManager.HTTP2Settings.Timeout) + throw new TimeoutException("Ping ACK isn't received in time!"); + + // Process received frames + HTTP2FrameHeaderAndPayload header; + while (this.newFrames.TryDequeue(out header)) + { + if (header.StreamId > 0) + { + HTTP2Stream http2Stream = FindStreamById(header.StreamId); + + // Add frame to the stream, so it can process it when its Process function is called + if (http2Stream != null) + { + http2Stream.AddFrame(header, this.outgoingFrames); + } + else + { + // Error? It's possible that we closed and removed the stream while the server was in the middle of sending frames + if (HTTPManager.Logger.Level == Loglevels.All) + HTTPManager.Logger.Warning("HTTP2Handler", string.Format("No stream found for id: {0}! Can't deliver frame: {1}", header.StreamId, header), this.Context, http2Stream.Context); + } + } + else + { + switch (header.Type) + { + case HTTP2FrameTypes.SETTINGS: + this.settings.Process(header, this.outgoingFrames); + + PluginEventHelper.EnqueuePluginEvent( + new PluginEventInfo(PluginEvents.HTTP2ConnectProtocol, + new HTTP2ConnectProtocolInfo(this.conn.LastProcessedUri.Host, + this.settings.MySettings[HTTP2Settings.ENABLE_CONNECT_PROTOCOL] == 1 && this.settings.RemoteSettings[HTTP2Settings.ENABLE_CONNECT_PROTOCOL] == 1))); + break; + + case HTTP2FrameTypes.PING: + var pingFrame = HTTP2FrameHelper.ReadPingFrame(header); + + // https://httpwg.org/specs/rfc7540.html#PING + // if it wasn't an ack for our ping, we have to send one + if ((pingFrame.Flags & HTTP2PingFlags.ACK) == 0) + { + var frame = HTTP2FrameHelper.CreatePingFrame(HTTP2PingFlags.ACK); + Array.Copy(pingFrame.OpaqueData, 0, frame.Payload, 0, pingFrame.OpaqueDataLength); + + this.outgoingFrames.Add(frame); + } + + BufferPool.Release(pingFrame.OpaqueData); + break; + + case HTTP2FrameTypes.WINDOW_UPDATE: + var windowUpdateFrame = HTTP2FrameHelper.ReadWindowUpdateFrame(header); + this.remoteWindow += windowUpdateFrame.WindowSizeIncrement; + break; + + case HTTP2FrameTypes.GOAWAY: + // parse the frame, so we can print out detailed information + HTTP2GoAwayFrame goAwayFrame = HTTP2FrameHelper.ReadGoAwayFrame(header); + + HTTPManager.Logger.Information("HTTP2Handler", "Received GOAWAY frame: " + goAwayFrame.ToString(), this.Context); + + string msg = string.Format("Server closing the connection! Error code: {0} ({1}) Additonal Debug Data: {2}", goAwayFrame.Error, goAwayFrame.ErrorCode, new BufferSegment(goAwayFrame.AdditionalDebugData, 0, (int)goAwayFrame.AdditionalDebugDataLength)); + for (int i = 0; i < this.clientInitiatedStreams.Count; ++i) + this.clientInitiatedStreams[i].Abort(msg); + this.clientInitiatedStreams.Clear(); + + // set the running flag to false, so the thread can exit + this.isRunning = false; + + BufferPool.Release(goAwayFrame.AdditionalDebugData); + + //this.conn.State = HTTPConnectionStates.Closed; + break; + + case HTTP2FrameTypes.ALT_SVC: + //HTTP2AltSVCFrame altSvcFrame = HTTP2FrameHelper.ReadAltSvcFrame(header); + + // Implement + //HTTPManager.EnqueuePluginEvent(new PluginEventInfo(PluginEvents.AltSvcHeader, new AltSvcEventInfo(altSvcFrame.Origin, )) + break; + } + + if (header.Payload != null) + BufferPool.Release(header.Payload); + } + } + + UInt32 maxConcurrentStreams = Math.Min(HTTPManager.HTTP2Settings.MaxConcurrentStreams, this.settings.RemoteSettings[HTTP2Settings.MAX_CONCURRENT_STREAMS]); + + // pre-test stream count to lock only when truly needed. + if (this.clientInitiatedStreams.Count < maxConcurrentStreams && this.isRunning) + { + // grab requests from queue + HTTPRequest request; + while (this.clientInitiatedStreams.Count < maxConcurrentStreams && this.requestQueue.TryDequeue(out request)) + { + HTTP2Stream newStream = null; +#if !BESTHTTP_DISABLE_WEBSOCKET + if (request.Tag is WebSocket.OverHTTP2) + { + newStream = new HTTP2WebSocketStream((UInt32)Interlocked.Add(ref LastStreamId, 2), this, this.settings, this.HPACKEncoder); + } + else +#endif + { + newStream = new HTTP2Stream((UInt32)Interlocked.Add(ref LastStreamId, 2), this, this.settings, this.HPACKEncoder); + } + + newStream.Assign(request); + this.clientInitiatedStreams.Add(newStream); + } + } + + // send any settings changes + this.settings.SendChanges(this.outgoingFrames); + + atLeastOneStreamHasAFrameToSend = false; + + // process other streams + // Room for improvement Streams should be processed by their priority! + for (int i = 0; i < this.clientInitiatedStreams.Count; ++i) + { + var stream = this.clientInitiatedStreams[i]; + stream.Process(this.outgoingFrames); + + // remove closed, empty streams (not enough to check the closed flag, a closed stream still can contain frames to send) + if (stream.State == HTTP2StreamStates.Closed && !stream.HasFrameToSend) + { + this.clientInitiatedStreams.RemoveAt(i--); + stream.Removed(); + } + + atLeastOneStreamHasAFrameToSend |= stream.HasFrameToSend; + + this.lastInteraction = DateTime.UtcNow; + } + + // If we encounter a data frame that too large for the current remote window, we have to stop + // sending all data frames as we could send smaller data frames before the large ones. + // Room for improvement: An improvement would be here to stop data frame sending per-stream. + bool haltDataSending = false; + + if (this.ShutdownType == ShutdownTypes.Running && now - this.lastInteraction >= HTTPManager.HTTP2Settings.MaxIdleTime) + { + this.lastInteraction = DateTime.UtcNow; + HTTPManager.Logger.Information("HTTP2Handler", "Reached idle time, sending GoAway frame!", this.Context); + this.outgoingFrames.Add(HTTP2FrameHelper.CreateGoAwayFrame(0, HTTP2ErrorCodes.NO_ERROR)); + this.goAwaySentAt = DateTime.UtcNow; + } + + // https://httpwg.org/specs/rfc7540.html#GOAWAY + // Endpoints SHOULD always send a GOAWAY frame before closing a connection so that the remote peer can know whether a stream has been partially processed or not. + if (this.ShutdownType == ShutdownTypes.Gentle) + { + HTTPManager.Logger.Information("HTTP2Handler", "Connection abort requested, sending GoAway frame!", this.Context); + + this.outgoingFrames.Clear(); + this.outgoingFrames.Add(HTTP2FrameHelper.CreateGoAwayFrame(0, HTTP2ErrorCodes.NO_ERROR)); + this.goAwaySentAt = DateTime.UtcNow; + } + + if (this.isRunning && now - goAwaySentAt >= this.MaxGoAwayWaitTime) + { + HTTPManager.Logger.Information("HTTP2Handler", "No GoAway frame received back. Really quitting now!", this.Context); + this.isRunning = false; + + //conn.State = HTTPConnectionStates.Closed; + } + + uint streamWindowUpdates = 0; + + // Go through all the collected frames and send them. + for (int i = 0; i < this.outgoingFrames.Count; ++i) + { + var frame = this.outgoingFrames[i]; + + if (HTTPManager.Logger.Level <= Logger.Loglevels.All && frame.Type != HTTP2FrameTypes.DATA /*&& frame.Type != HTTP2FrameTypes.PING*/) + HTTPManager.Logger.Information("HTTP2Handler", "Sending frame: " + frame.ToString(), this.Context); + + // post process frames + switch (frame.Type) + { + case HTTP2FrameTypes.DATA: + if (haltDataSending) + continue; + + // if the tracked remoteWindow is smaller than the frame's payload, we stop sending + // data frames until we receive window-update frames + if (frame.PayloadLength > this.remoteWindow) + { + haltDataSending = true; + HTTPManager.Logger.Warning("HTTP2Handler", string.Format("Data sending halted for this round. Remote Window: {0:N0}, frame: {1}", this.remoteWindow, frame.ToString()), this.Context); + continue; + } + + break; + + case HTTP2FrameTypes.WINDOW_UPDATE: + if (frame.StreamId > 0) + streamWindowUpdates += BufferHelper.ReadUInt31(frame.Payload, 0); + break; + } + + this.outgoingFrames.RemoveAt(i--); + + using (var buffer = HTTP2FrameHelper.HeaderAsBinary(frame)) + bufferedStream.Write(buffer.Data, 0, buffer.Length); + + if (frame.PayloadLength > 0) + { + bufferedStream.Write(frame.Payload, (int)frame.PayloadOffset, (int)frame.PayloadLength); + + if (!frame.DontUseMemPool) + BufferPool.Release(frame.Payload); + } + + if (frame.Type == HTTP2FrameTypes.DATA) + this.remoteWindow -= frame.PayloadLength; + } + + if (streamWindowUpdates > 0) + { + var frame = HTTP2FrameHelper.CreateWindowUpdateFrame(0, streamWindowUpdates); + + if (HTTPManager.Logger.Level <= Logger.Loglevels.All) + HTTPManager.Logger.Information("HTTP2Handler", "Sending frame: " + frame.ToString(), this.Context); + + using (var buffer = HTTP2FrameHelper.HeaderAsBinary(frame)) + bufferedStream.Write(buffer.Data, 0, buffer.Length); + + bufferedStream.Write(frame.Payload, (int)frame.PayloadOffset, (int)frame.PayloadLength); + + if (!frame.DontUseMemPool) + BufferPool.Release(frame.Payload); + } + + } // while (this.isRunning) + + bufferedStream.Flush(); + } + } + catch (Exception ex) + { + // Log out the exception if it's a non-expected one. + if (this.ShutdownType == ShutdownTypes.Running && this.goAwaySentAt == DateTime.MaxValue && !HTTPManager.IsQuitting) + HTTPManager.Logger.Exception("HTTP2Handler", "Sender thread", ex, this.Context); + } + finally + { + TryToCleanup(); + + HTTPManager.Logger.Information("HTTP2Handler", "Sender thread closing - cleaning up remaining request...", this.Context); + + for (int i = 0; i < this.clientInitiatedStreams.Count; ++i) + this.clientInitiatedStreams[i].Abort("Connection closed unexpectedly"); + this.clientInitiatedStreams.Clear(); + + HTTPManager.Logger.Information("HTTP2Handler", "Sender thread closing", this.Context); + } + + try + { + if (this.conn != null && this.conn.connector != null) + { + // Works in the new runtime + if (this.conn.connector.TopmostStream != null) + using (this.conn.connector.TopmostStream) { } + + // Works in the old runtime + if (this.conn.connector.Stream != null) + using (this.conn.connector.Stream) { } + } + } + catch + { } + } + + private void OnRemoteSettingChanged(HTTP2SettingsRegistry registry, HTTP2Settings setting, uint oldValue, uint newValue) + { + switch(setting) + { + case HTTP2Settings.INITIAL_WINDOW_SIZE: + this.remoteWindow = newValue - (oldValue - this.remoteWindow); + break; + } + } + + private void ReadThread() + { + try + { + ThreadedRunner.SetThreadName("BestHTTP.HTTP2 Read"); + HTTPManager.Logger.Information("HTTP2Handler", "Reader thread up and running!", this.Context); + + while (this.isRunning) + { + HTTP2FrameHeaderAndPayload header = HTTP2FrameHelper.ReadHeader(this.conn.connector.Stream); + + if (HTTPManager.Logger.Level <= Logger.Loglevels.Information && header.Type != HTTP2FrameTypes.DATA /*&& header.Type != HTTP2FrameTypes.PING*/) + HTTPManager.Logger.Information("HTTP2Handler", "New frame received: " + header.ToString(), this.Context); + + // Add the new frame to the queue. Processing it on the write thread gives us the advantage that + // we don't have to deal with too much locking. + this.newFrames.Enqueue(header); + + // ping write thread to process the new frame + this.newFrameSignal.Set(); + + switch (header.Type) + { + // Handle pongs on the read thread, so no additional latency is added to the rtt calculation. + case HTTP2FrameTypes.PING: + var pingFrame = HTTP2FrameHelper.ReadPingFrame(header); + + if ((pingFrame.Flags & HTTP2PingFlags.ACK) != 0) + { + if (Interlocked.CompareExchange(ref this.waitingForPingAck, 0, 1) == 0) + break; // waitingForPingAck was 0 == aren't expecting a ping ack! + + // it was an ack, payload must contain what we sent + + var ticks = BufferHelper.ReadLong(pingFrame.OpaqueData, 0); + + // the difference between the current time and the time when the ping message is sent + TimeSpan diff = TimeSpan.FromTicks(DateTime.UtcNow.Ticks - ticks); + + // add it to the buffer + this.rtts.Add(diff.TotalMilliseconds); + + // and calculate the new latency + this.Latency = CalculateLatency(); + + HTTPManager.Logger.Verbose("HTTP2Handler", string.Format("Latency: {0:F2}ms, RTT buffer: {1}", this.Latency, this.rtts.ToString()), this.Context); + } + + BufferPool.Release(pingFrame.OpaqueData); + break; + + case HTTP2FrameTypes.GOAWAY: + // Just exit from this thread. The processing thread will handle the frame too. + + // Risking a double release here if the processing thread also consumed the goaway frame + //if (Volatile.Read(ref this.threadExitCount) > 0) + // BufferPool.Release(header.Payload); + return; + } + } + } + catch //(Exception ex) + { + //HTTPManager.Logger.Exception("HTTP2Handler", "", ex, this.Context); + + //this.isRunning = false; + } + finally + { + TryToCleanup(); + HTTPManager.Logger.Information("HTTP2Handler", "Reader thread closing", this.Context); + } + } + + private void TryToCleanup() + { + this.isRunning = false; + + // First thread closing notifies the ConnectionEventHelper + int counter = Interlocked.Increment(ref this.threadExitCount); + switch(counter) + { + case 1: + ConnectionEventHelper.EnqueueConnectionEvent(new ConnectionEventInfo(this.conn, HTTPConnectionStates.Closed)); + break; + + // Last thread closes the AutoResetEvent + case 2: + if (this.newFrameSignal != null) + this.newFrameSignal.Close(); + this.newFrameSignal = null; + + while (this.newFrames.TryDequeue(out var frame)) + BufferPool.Release(frame.Payload); + break; + default: + HTTPManager.Logger.Warning("HTTP2Handler", String.Format("TryToCleanup - counter is {0}!", counter)); + break; + } + } + + private double CalculateLatency() + { + if (this.rtts.Count == 0) + return 0; + + double sumLatency = 0; + for (int i = 0; i < this.rtts.Count; ++i) + sumLatency += this.rtts[i]; + + return sumLatency / this.rtts.Count; + } + + HTTP2Stream FindStreamById(UInt32 streamId) + { + for (int i = 0; i < this.clientInitiatedStreams.Count; ++i) + { + var stream = this.clientInitiatedStreams[i]; + if (stream.Id == streamId) + return stream; + } + + return null; + } + + public ShutdownTypes ShutdownType { get; private set; } + + public void Shutdown(ShutdownTypes type) + { + this.ShutdownType = type; + + switch(this.ShutdownType) + { + case ShutdownTypes.Gentle: + this.newFrameSignal.Set(); + break; + + case ShutdownTypes.Immediate: + this.conn.connector.Stream.Dispose(); + break; + } + } + + public void Dispose() + { + HTTPRequest request = null; + while (this.requestQueue.TryDequeue(out request)) + { + HTTPManager.Logger.Information("HTTP2Handler", string.Format("Dispose - Request '{0}' IsCancellationRequested: {1}", request.CurrentUri.ToString(), request.IsCancellationRequested.ToString()), this.Context); + if (request.IsCancellationRequested) + { + request.Response = null; + request.State = HTTPRequestStates.Aborted; + } + else + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(request, RequestEvents.Resend)); + } + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Handler.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Handler.cs.meta new file mode 100644 index 000000000..dbd37f83d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Handler.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 21ffa29fa36f0aa48bcf898a72ab5ecf +timeCreated: 1571210040 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2PluginSettings.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2PluginSettings.cs new file mode 100644 index 000000000..ea8b1c0c3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2PluginSettings.cs @@ -0,0 +1,77 @@ +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_ALTERNATE_SSL && !BESTHTTP_DISABLE_HTTP2 +using System; + +namespace BestHTTP.Connections.HTTP2 +{ + public sealed class WebSocketOverHTTP2Settings + { + /// + /// Set it to false to disable Websocket Over HTTP/2 (RFC 8441). It's true by default. + /// + public bool EnableWebSocketOverHTTP2 { get; set; } = true; + + /// + /// Set it to disable fallback logic from the Websocket Over HTTP/2 implementation to the 'old' HTTP/1 implementation when it fails to connect. + /// + public bool EnableImplementationFallback { get; set; } = true; + } + + public sealed class HTTP2PluginSettings + { + /// + /// Maximum size of the HPACK header table. + /// + public UInt32 HeaderTableSize = 4096; // Spec default: 4096 + + /// + /// Maximum concurrent http2 stream on http2 connection will allow. Its default value is 128; + /// + public UInt32 MaxConcurrentStreams = 128; // Spec default: not defined + + /// + /// Initial window size of a http2 stream. Its default value is 10 Mb (10 * 1024 * 1024). + /// + public UInt32 InitialStreamWindowSize = 10 * 1024 * 1024; // Spec default: 65535 + + /// + /// Global window size of a http/2 connection. Its default value is the maximum possible value on 31 bits. + /// + public UInt32 InitialConnectionWindowSize = HTTP2Handler.MaxValueFor31Bits; // Spec default: 65535 + + /// + /// Maximum size of a http2 frame. + /// + public UInt32 MaxFrameSize = 16384; // 16384 spec def. + + /// + /// Not used. + /// + public UInt32 MaxHeaderListSize = UInt32.MaxValue; // Spec default: infinite + + /// + /// With HTTP/2 only one connection will be open so we can keep it open longer as we hope it will be reused more. + /// + public TimeSpan MaxIdleTime = TimeSpan.FromSeconds(120); + + /// + /// Time between two ping messages. + /// + public TimeSpan PingFrequency = TimeSpan.FromSeconds(30); + + /// + /// Timeout to receive a ping acknowledgement from the server. If no ack reveived in this time the connection will be treated as broken. + /// + public TimeSpan Timeout = TimeSpan.FromSeconds(10); + + /// + /// Set to true to enable RFC 8441 "Bootstrapping WebSockets with HTTP/2" (https://tools.ietf.org/html/rfc8441). + /// + public bool EnableConnectProtocol = false; + + /// + /// Settings for WebSockets over HTTP/2 (RFC 8441) + /// + public WebSocketOverHTTP2Settings WebSocketOverHTTP2Settings = new WebSocketOverHTTP2Settings(); + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2PluginSettings.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2PluginSettings.cs.meta new file mode 100644 index 000000000..b296e47bf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2PluginSettings.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 218daa3af21407f40ac4304f80a79b59 +timeCreated: 1571210040 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Response.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Response.cs new file mode 100644 index 000000000..f1b188514 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Response.cs @@ -0,0 +1,156 @@ +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_ALTERNATE_SSL && !BESTHTTP_DISABLE_HTTP2 + +using BestHTTP.Core; +using BestHTTP.Extensions; +using BestHTTP.PlatformSupport.Memory; +using System; +using System.Collections.Generic; +using System.IO; + +namespace BestHTTP.Connections.HTTP2 +{ + public sealed class HTTP2Response : HTTPResponse + { + // For progress report + public long ExpectedContentLength { get; private set; } + public bool HasContentEncoding { get => !string.IsNullOrEmpty(this.contentEncoding); } + + private string contentEncoding = null; + + bool isPrepared; + private Decompression.IDecompressor decompressor; + + public HTTP2Response(HTTPRequest request, bool isFromCache) + : base(request, isFromCache) + { + this.VersionMajor = 2; + this.VersionMinor = 0; + } + + internal void AddHeaders(List> headers) + { + this.ExpectedContentLength = -1; + Dictionary> newHeaders = this.baseRequest.OnHeadersReceived != null ? new Dictionary>() : null; + + for (int i = 0; i < headers.Count; ++i) + { + KeyValuePair header = headers[i]; + + if (header.Key.Equals(":status", StringComparison.Ordinal)) + { + base.StatusCode = int.Parse(header.Value); + base.Message = string.Empty; + } + else + { + if (!this.HasContentEncoding && header.Key.Equals("content-encoding", StringComparison.OrdinalIgnoreCase)) + { + this.contentEncoding = header.Value; + } + else if (base.baseRequest.OnDownloadProgress != null && header.Key.Equals("content-length", StringComparison.OrdinalIgnoreCase)) + { + long contentLength; + if (long.TryParse(header.Value, out contentLength)) + this.ExpectedContentLength = contentLength; + else + HTTPManager.Logger.Information("HTTP2Response", string.Format("AddHeaders - Can't parse Content-Length as an int: '{0}'", header.Value), this.baseRequest.Context, this.Context); + } + + base.AddHeader(header.Key, header.Value); + } + + if (newHeaders != null) + { + List values; + if (!newHeaders.TryGetValue(header.Key, out values)) + newHeaders.Add(header.Key, values = new List(1)); + + values.Add(header.Value); + } + } + + if (this.ExpectedContentLength == -1 && base.baseRequest.OnDownloadProgress != null) + HTTPManager.Logger.Information("HTTP2Response", "AddHeaders - No Content-Length header found!", this.baseRequest.Context, this.Context); + + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this.baseRequest, newHeaders)); + } + + internal void AddData(Stream stream) + { + if (this.HasContentEncoding) + { + Stream decoderStream = Decompression.DecompressorFactory.GetDecoderStream(stream, this.contentEncoding); + + if (decoderStream == null) + { + base.Data = new byte[stream.Length]; + stream.Read(base.Data, 0, (int)stream.Length); + } + else + { + using (var ms = new BufferPoolMemoryStream((int)stream.Length)) + { + var buf = BufferPool.Get(HTTPResponse.MinReadBufferSize, true); + int byteCount = 0; + + while ((byteCount = decoderStream.Read(buf, 0, buf.Length)) > 0) + ms.Write(buf, 0, byteCount); + + BufferPool.Release(buf); + + base.Data = ms.ToArray(); + } + + decoderStream.Dispose(); + } + } + else + { + base.Data = new byte[stream.Length]; + stream.Read(base.Data, 0, (int)stream.Length); + } + } + + + internal void ProcessData(byte[] payload, int payloadLength) + { + if (!this.isPrepared) + { + this.isPrepared = true; + base.BeginReceiveStreamFragments(); + } + + if (this.HasContentEncoding) + { + if (this.decompressor == null) + this.decompressor = Decompression.DecompressorFactory.GetDecompressor(this.contentEncoding, this.Context); + var result = this.decompressor.Decompress(payload, 0, payloadLength, true, true); + + base.FeedStreamFragment(result.Data, 0, result.Length); + } + else + base.FeedStreamFragment(payload, 0, payloadLength); + } + + internal void FinishProcessData() + { + base.FlushRemainingFragmentBuffer(); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (disposing) + { + if (this.decompressor != null) + { + this.decompressor.Dispose(); + this.decompressor = null; + } + } + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Response.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Response.cs.meta new file mode 100644 index 000000000..8c2a4bc09 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Response.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b8916e7811100a643b66249f17136fcc +timeCreated: 1571210041 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2SettingsRegistry.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2SettingsRegistry.cs new file mode 100644 index 000000000..c9cbdbc20 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2SettingsRegistry.cs @@ -0,0 +1,277 @@ +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_ALTERNATE_SSL && !BESTHTTP_DISABLE_HTTP2 + +using System; +using System.Collections.Generic; + +namespace BestHTTP.Connections.HTTP2 +{ + // https://httpwg.org/specs/rfc7540.html#iana-settings + public enum HTTP2Settings : ushort + { + /// + /// Allows the sender to inform the remote endpoint of the maximum size of the + /// header compression table used to decode header blocks, in octets. + /// The encoder can select any size equal to or less than this value + /// by using signaling specific to the header compression format inside a header block (see [COMPRESSION]). + /// The initial value is 4,096 octets. + /// + HEADER_TABLE_SIZE = 0x01, + + /// + /// This setting can be used to disable server push (Section 8.2). + /// An endpoint MUST NOT send a PUSH_PROMISE frame if it receives this parameter set to a value of 0. + /// An endpoint that has both set this parameter to 0 and had it acknowledged MUST treat the receipt of a + /// PUSH_PROMISE frame as a connection error (Section 5.4.1) of type PROTOCOL_ERROR. + /// + /// The initial value is 1, which indicates that server push is permitted. + /// Any value other than 0 or 1 MUST be treated as a connection error (Section 5.4.1) of type PROTOCOL_ERROR. + /// + ENABLE_PUSH = 0x02, + + /// + /// Indicates the maximum number of concurrent streams that the sender will allow. This limit is directional: + /// it applies to the number of streams that the sender permits the receiver to create. + /// Initially, there is no limit to this value. It is recommended that this value be no smaller than 100, + /// so as to not unnecessarily limit parallelism. + /// + /// A value of 0 for SETTINGS_MAX_CONCURRENT_STREAMS SHOULD NOT be treated as special by endpoints. + /// A zero value does prevent the creation of new streams; + /// however, this can also happen for any limit that is exhausted with active streams. + /// Servers SHOULD only set a zero value for short durations; if a server does not wish to accept requests, + /// closing the connection is more appropriate. + /// + MAX_CONCURRENT_STREAMS = 0x03, + + /// + /// Indicates the sender's initial window size (in octets) for stream-level flow control. + /// The initial value is 2^16-1 (65,535) octets. + /// + /// This setting affects the window size of all streams (see Section 6.9.2). + /// + /// Values above the maximum flow-control window size of 2^31-1 MUST be treated as a connection error + /// (Section 5.4.1) of type FLOW_CONTROL_ERROR. + /// + INITIAL_WINDOW_SIZE = 0x04, + + /// + /// Indicates the size of the largest frame payload that the sender is willing to receive, in octets. + /// + /// The initial value is 2^14 (16,384) octets. + /// The value advertised by an endpoint MUST be between this initial value and the maximum allowed frame size + /// (2^24-1 or 16,777,215 octets), inclusive. + /// Values outside this range MUST be treated as a connection error (Section 5.4.1) of type PROTOCOL_ERROR. + /// + MAX_FRAME_SIZE = 0x05, + + /// + /// This advisory setting informs a peer of the maximum size of header list that the sender is prepared to accept, in octets. + /// The value is based on the uncompressed size of header fields, + /// including the length of the name and value in octets plus an overhead of 32 octets for each header field. + /// + /// For any given request, a lower limit than what is advertised MAY be enforced. The initial value of this setting is unlimited. + /// + MAX_HEADER_LIST_SIZE = 0x06, + + RESERVED = 0x07, + + /// + /// https://tools.ietf.org/html/rfc8441 + /// Upon receipt of SETTINGS_ENABLE_CONNECT_PROTOCOL with a value of 1, a client MAY use the Extended CONNECT as defined in this document when creating new streams. + /// Receipt of this parameter by a server does not have any impact. + /// + /// A sender MUST NOT send a SETTINGS_ENABLE_CONNECT_PROTOCOL parameter with the value of 0 after previously sending a value of 1. + /// + ENABLE_CONNECT_PROTOCOL = 0x08 + } + + public sealed class HTTP2SettingsRegistry + { + public bool IsReadOnly { get; private set; } + public Action OnSettingChangedEvent; + + private UInt32[] values; + private bool[] changeFlags; + + public UInt32 this[HTTP2Settings setting] + { + get { return this.values[(ushort)setting]; } + + set + { + if (this.IsReadOnly) + throw new NotSupportedException("It's a read-only one!"); + + ushort idx = (ushort)setting; + + // https://httpwg.org/specs/rfc7540.html#SettingValues + // An endpoint that receives a SETTINGS frame with any unknown or unsupported identifier MUST ignore that setting. + if (idx == 0 || idx >= this.values.Length) + return; + + UInt32 oldValue = this.values[idx]; + if (oldValue != value) + { + this.values[idx] = value; + this.changeFlags[idx] = true; + IsChanged = true; + + if (this.OnSettingChangedEvent != null) + this.OnSettingChangedEvent(this, setting, oldValue, value); + } + } + } + + public bool IsChanged { get; private set; } + + private HTTP2SettingsManager _parent; + + public HTTP2SettingsRegistry(HTTP2SettingsManager parent, bool readOnly, bool treatItAsAlreadyChanged) + { + this._parent = parent; + + this.values = new UInt32[HTTP2SettingsManager.SettingsCount]; + + this.IsReadOnly = readOnly; + if (!this.IsReadOnly) + this.changeFlags = new bool[HTTP2SettingsManager.SettingsCount]; + + // Set default values (https://httpwg.org/specs/rfc7540.html#iana-settings) + this.values[(UInt16)HTTP2Settings.HEADER_TABLE_SIZE] = 4096; + this.values[(UInt16)HTTP2Settings.ENABLE_PUSH] = 1; + this.values[(UInt16)HTTP2Settings.MAX_CONCURRENT_STREAMS] = 128; + this.values[(UInt16)HTTP2Settings.INITIAL_WINDOW_SIZE] = 65535; + this.values[(UInt16)HTTP2Settings.MAX_FRAME_SIZE] = 16384; + this.values[(UInt16)HTTP2Settings.MAX_HEADER_LIST_SIZE] = UInt32.MaxValue; // infinite + + if (this.IsChanged = treatItAsAlreadyChanged) + { + this.changeFlags[(UInt16)HTTP2Settings.MAX_CONCURRENT_STREAMS] = true; + } + } + + public void Merge(List> settings) + { + if (settings == null) + return; + + for (int i = 0; i < settings.Count; ++i) + { + HTTP2Settings setting = settings[i].Key; + UInt16 key = (UInt16)setting; + UInt32 value = settings[i].Value; + + if (key > 0 && key <= HTTP2SettingsManager.SettingsCount) + { + UInt32 oldValue = this.values[key]; + this.values[key] = value; + + if (oldValue != value && this.OnSettingChangedEvent != null) + this.OnSettingChangedEvent(this, setting, oldValue, value); + + if (HTTPManager.Logger.Level <= Logger.Loglevels.All) + HTTPManager.Logger.Information("HTTP2SettingsRegistry", string.Format("Merge {0}({1}) = {2}", setting, key, value), this._parent.Parent.Context); + } + } + } + + public void Merge(HTTP2SettingsRegistry from) + { + if (this.values != null) + this.values = new uint[from.values.Length]; + + for (int i = 0; i < this.values.Length; ++i) + this.values[i] = from.values[i]; + } + + internal HTTP2FrameHeaderAndPayload CreateFrame() + { + List> keyValuePairs = new List>(HTTP2SettingsManager.SettingsCount); + + for (int i = 1; i < HTTP2SettingsManager.SettingsCount; ++i) + if (this.changeFlags[i]) + { + keyValuePairs.Add(new KeyValuePair((HTTP2Settings)i, this[(HTTP2Settings)i])); + this.changeFlags[i] = false; + } + + this.IsChanged = false; + + return HTTP2FrameHelper.CreateSettingsFrame(keyValuePairs); + } + } + + public sealed class HTTP2SettingsManager + { + public static readonly int SettingsCount = Enum.GetNames(typeof(HTTP2Settings)).Length + 1; + + /// + /// This is the ACKd or default settings that we sent to the server. + /// + public HTTP2SettingsRegistry MySettings { get; private set; } + + /// + /// This is the setting that can be changed. It will be sent to the server ASAP, and when ACKd, it will be copied + /// to MySettings. + /// + public HTTP2SettingsRegistry InitiatedMySettings { get; private set; } + + /// + /// Settings of the remote peer + /// + public HTTP2SettingsRegistry RemoteSettings { get; private set; } + + public DateTime SettingsChangesSentAt { get; private set; } + + public HTTP2Handler Parent { get; private set; } + + public HTTP2SettingsManager(HTTP2Handler parentHandler) + { + this.Parent = parentHandler; + + this.MySettings = new HTTP2SettingsRegistry(this, readOnly: true, treatItAsAlreadyChanged: false); + this.InitiatedMySettings = new HTTP2SettingsRegistry(this, readOnly: false, treatItAsAlreadyChanged: true); + this.RemoteSettings = new HTTP2SettingsRegistry(this, readOnly: true, treatItAsAlreadyChanged: false); + this.SettingsChangesSentAt = DateTime.MinValue; + } + + internal void Process(HTTP2FrameHeaderAndPayload frame, List outgoingFrames) + { + if (frame.Type != HTTP2FrameTypes.SETTINGS) + return; + + HTTP2SettingsFrame settingsFrame = HTTP2FrameHelper.ReadSettings(frame); + + if (HTTPManager.Logger.Level <= Logger.Loglevels.Information) + HTTPManager.Logger.Information("HTTP2SettingsManager", "Processing Settings frame: " + settingsFrame.ToString(), this.Parent.Context); + + if ((settingsFrame.Flags & HTTP2SettingsFlags.ACK) == HTTP2SettingsFlags.ACK) + { + this.MySettings.Merge(this.InitiatedMySettings); + this.SettingsChangesSentAt = DateTime.MinValue; + } + else + { + this.RemoteSettings.Merge(settingsFrame.Settings); + outgoingFrames.Add(HTTP2FrameHelper.CreateACKSettingsFrame()); + } + } + + internal void SendChanges(List outgoingFrames) + { + if (this.SettingsChangesSentAt != DateTime.MinValue && DateTime.UtcNow - this.SettingsChangesSentAt >= TimeSpan.FromSeconds(10)) + { + HTTPManager.Logger.Error("HTTP2SettingsManager", "No ACK received for settings frame!", this.Parent.Context); + this.SettingsChangesSentAt = DateTime.MinValue; + } + + // Upon receiving a SETTINGS frame with the ACK flag set, the sender of the altered parameters can rely on the setting having been applied. + if (!this.InitiatedMySettings.IsChanged) + return; + + outgoingFrames.Add(this.InitiatedMySettings.CreateFrame()); + this.SettingsChangesSentAt = DateTime.UtcNow; + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2SettingsRegistry.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2SettingsRegistry.cs.meta new file mode 100644 index 000000000..f47cbbf54 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2SettingsRegistry.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 38a4e3fed00ab4c4181c1a7ff3dcb858 +timeCreated: 1571210041 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Stream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Stream.cs new file mode 100644 index 000000000..01d0a66a6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Stream.cs @@ -0,0 +1,655 @@ +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_ALTERNATE_SSL && !BESTHTTP_DISABLE_HTTP2 + +using System; +using System.Collections.Generic; +using BestHTTP.Core; +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.Logger; + +#if !BESTHTTP_DISABLE_CACHING +using BestHTTP.Caching; +#endif + +using BestHTTP.Timings; + +namespace BestHTTP.Connections.HTTP2 +{ + // https://httpwg.org/specs/rfc7540.html#StreamStates + // + // Idle + // | + // V + // Open + // Receive END_STREAM / | \ Send END_STREAM + // v |R V + // Half Closed Remote |S Half Closed Locale + // \ |T / + // Send END_STREAM | RST_STREAM \ | / Receive END_STREAM | RST_STREAM + // Receive RST_STREAM \ | / Send RST_STREAM + // V + // Closed + // + // IDLE -> send headers -> OPEN -> send data -> HALF CLOSED - LOCAL -> receive headers -> receive Data -> CLOSED + // | ^ | ^ + // +-------------------------------------+ +-----------------------------+ + // END_STREAM flag present? END_STREAM flag present? + // + + public enum HTTP2StreamStates + { + Idle, + //ReservedLocale, + //ReservedRemote, + Open, + HalfClosedLocal, + HalfClosedRemote, + Closed + } + + public class HTTP2Stream + { + public UInt32 Id { get; private set; } + + public HTTP2StreamStates State { + get { return this._state; } + + protected set { + var oldState = this._state; + + this._state = value; + + if (oldState != this._state) + { + //this.lastStateChangedAt = DateTime.Now; + + HTTPManager.Logger.Information("HTTP2Stream", string.Format("[{0}] State changed from {1} to {2}", this.Id, oldState, this._state), this.Context, this.AssignedRequest.Context, this.parent.Context); + } + } + } + private HTTP2StreamStates _state; + + //protected DateTime lastStateChangedAt; + //protected TimeSpan TimeSpentInCurrentState { get { return DateTime.Now - this.lastStateChangedAt; } } + + /// + /// This flag is checked by the connection to decide whether to do a new processing-frame sending round before sleeping until new data arrives + /// + public virtual bool HasFrameToSend + { + get + { + // Don't let the connection sleep until + return this.outgoing.Count > 0 || // we already booked at least one frame in advance + (this.State == HTTP2StreamStates.Open && this.remoteWindow > 0 && this.lastReadCount > 0); // we are in the middle of sending request data + } + } + + /// + /// Next interaction scheduled by the stream relative to *now*. Its default is TimeSpan.MaxValue == no interaction. + /// + public virtual TimeSpan NextInteraction { get; } = TimeSpan.MaxValue; + + public HTTPRequest AssignedRequest { get; protected set; } + + public LoggingContext Context { get; protected set; } + + protected bool isStreamedDownload; + protected uint downloaded; + + protected HTTPRequest.UploadStreamInfo uploadStreamInfo; + + protected HTTP2SettingsManager settings; + protected HPACKEncoder encoder; + + // Outgoing frames. The stream will send one frame per Process call, but because one step might be able to + // generate more than one frames, we use a list. + protected Queue outgoing = new Queue(); + + protected Queue incomingFrames = new Queue(); + + protected FramesAsStreamView headerView; + protected FramesAsStreamView dataView; + + protected UInt32 localWindow; + protected Int64 remoteWindow; + + protected uint windowUpdateThreshold; + + protected UInt32 sentData; + + protected bool isRSTFrameSent; + protected bool isEndSTRReceived; + + protected HTTP2Response response; + + protected HTTP2Handler parent; + protected int lastReadCount; + + /// + /// Constructor to create a client stream. + /// + public HTTP2Stream(UInt32 id, HTTP2Handler parentHandler, HTTP2SettingsManager registry, HPACKEncoder hpackEncoder) + { + this.Id = id; + this.parent = parentHandler; + this.settings = registry; + this.encoder = hpackEncoder; + + this.remoteWindow = this.settings.RemoteSettings[HTTP2Settings.INITIAL_WINDOW_SIZE]; + this.settings.RemoteSettings.OnSettingChangedEvent += OnRemoteSettingChanged; + + // Room for improvement: If INITIAL_WINDOW_SIZE is small (what we can consider a 'small' value?), threshold must be higher + this.windowUpdateThreshold = (uint)(this.remoteWindow / 2); + + this.Context = new LoggingContext(this); + this.Context.Add("id", id); + } + + public virtual void Assign(HTTPRequest request) + { + if (request.IsRedirected) + request.Timing.Add(TimingEventNames.Queued_For_Redirection); + else + request.Timing.Add(TimingEventNames.Queued); + + HTTPManager.Logger.Information("HTTP2Stream", string.Format("[{0}] Request assigned to stream. Remote Window: {1:N0}. Uri: {2}", this.Id, this.remoteWindow, request.CurrentUri.ToString()), this.Context, request.Context, this.parent.Context); + this.AssignedRequest = request; + this.isStreamedDownload = request.UseStreaming && request.OnStreamingData != null; + this.downloaded = 0; + } + + public void Process(List outgoingFrames) + { + if (this.AssignedRequest.IsCancellationRequested && !this.isRSTFrameSent) + { + // These two are already set in HTTPRequest's Abort(). + //this.AssignedRequest.Response = null; + //this.AssignedRequest.State = this.AssignedRequest.IsTimedOut ? HTTPRequestStates.TimedOut : HTTPRequestStates.Aborted; + + this.outgoing.Clear(); + if (this.State != HTTP2StreamStates.Idle) + this.outgoing.Enqueue(HTTP2FrameHelper.CreateRSTFrame(this.Id, HTTP2ErrorCodes.CANCEL)); + + // We can close the stream if already received headers, or not even sent one + if (this.State == HTTP2StreamStates.HalfClosedRemote || this.State == HTTP2StreamStates.Idle) + this.State = HTTP2StreamStates.Closed; + + this.isRSTFrameSent = true; + } + + // 1.) Go through incoming frames + ProcessIncomingFrames(outgoingFrames); + + // 2.) Create outgoing frames based on the stream's state and the request processing state. + ProcessState(outgoingFrames); + + // 3.) Send one frame per Process call + if (this.outgoing.Count > 0) + { + HTTP2FrameHeaderAndPayload frame = this.outgoing.Dequeue(); + + outgoingFrames.Add(frame); + + // If END_Stream in header or data frame is present => half closed local + if ((frame.Type == HTTP2FrameTypes.HEADERS && (frame.Flags & (byte)HTTP2HeadersFlags.END_STREAM) != 0) || + (frame.Type == HTTP2FrameTypes.DATA && (frame.Flags & (byte)HTTP2DataFlags.END_STREAM) != 0)) + { + this.State = HTTP2StreamStates.HalfClosedLocal; + } + } + } + + public void AddFrame(HTTP2FrameHeaderAndPayload frame, List outgoingFrames) + { + // Room for improvement: error check for forbidden frames (like settings) and stream state + + this.incomingFrames.Enqueue(frame); + + ProcessIncomingFrames(outgoingFrames); + } + + public void Abort(string msg) + { + if (this.AssignedRequest.State != HTTPRequestStates.Processing) + { + // do nothing, its state is already set. + } + else if (this.AssignedRequest.IsCancellationRequested) + { + // These two are already set in HTTPRequest's Abort(). + //this.AssignedRequest.Response = null; + //this.AssignedRequest.State = this.AssignedRequest.IsTimedOut ? HTTPRequestStates.TimedOut : HTTPRequestStates.Aborted; + + this.State = HTTP2StreamStates.Closed; + } + else if (this.AssignedRequest.Retries >= this.AssignedRequest.MaxRetries) + { + this.AssignedRequest.Response = null; + this.AssignedRequest.Exception = new Exception(msg); + this.AssignedRequest.State = HTTPRequestStates.Error; + + this.State = HTTP2StreamStates.Closed; + } + else + { + this.AssignedRequest.Retries++; + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this.AssignedRequest, RequestEvents.Resend)); + } + + this.Removed(); + } + + protected void ProcessIncomingFrames(List outgoingFrames) + { + UInt32 windowUpdate = 0; + + while (this.incomingFrames.Count > 0) + { + HTTP2FrameHeaderAndPayload frame = this.incomingFrames.Dequeue(); + + if ((this.isRSTFrameSent || this.AssignedRequest.IsCancellationRequested) && frame.Type != HTTP2FrameTypes.HEADERS && frame.Type != HTTP2FrameTypes.CONTINUATION) + { + BufferPool.Release(frame.Payload); + continue; + } + + if (/*HTTPManager.Logger.Level == Logger.Loglevels.All && */frame.Type != HTTP2FrameTypes.DATA && frame.Type != HTTP2FrameTypes.WINDOW_UPDATE) + HTTPManager.Logger.Information("HTTP2Stream", string.Format("[{0}] Process - processing frame: {1}", this.Id, frame.ToString()), this.Context, this.AssignedRequest.Context, this.parent.Context); + + switch (frame.Type) + { + case HTTP2FrameTypes.HEADERS: + case HTTP2FrameTypes.CONTINUATION: + if (this.State != HTTP2StreamStates.HalfClosedLocal && this.State != HTTP2StreamStates.Open && this.State != HTTP2StreamStates.Idle) + { + // ERROR! + continue; + } + + // payload will be released by the view + frame.DontUseMemPool = true; + + if (this.headerView == null) + { + this.AssignedRequest.Timing.Add(TimingEventNames.Waiting_TTFB); + this.headerView = new FramesAsStreamView(new HeaderFrameView()); + } + + this.headerView.AddFrame(frame); + + // END_STREAM may arrive sooner than an END_HEADERS, so we have to store that we already received it + if ((frame.Flags & (byte)HTTP2HeadersFlags.END_STREAM) != 0) + this.isEndSTRReceived = true; + + if ((frame.Flags & (byte)HTTP2HeadersFlags.END_HEADERS) != 0) + { + List> headers = new List>(); + + try + { + this.encoder.Decode(this, this.headerView, headers); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("HTTP2Stream", string.Format("[{0}] ProcessIncomingFrames - Header Frames: {1}, Encoder: {2}", this.Id, this.headerView.ToString(), this.encoder.ToString()), ex, this.Context, this.AssignedRequest.Context, this.parent.Context); + } + + this.headerView.Close(); + this.headerView = null; + + this.AssignedRequest.Timing.Add(TimingEventNames.Headers); + + if (this.isRSTFrameSent) + { + this.State = HTTP2StreamStates.Closed; + break; + } + + if (this.response == null) + this.AssignedRequest.Response = this.response = new HTTP2Response(this.AssignedRequest, false); + + this.response.AddHeaders(headers); + + if (this.isEndSTRReceived) + { + // If there's any trailing header, no data frame has an END_STREAM flag + if (this.isStreamedDownload) + this.response.FinishProcessData(); + + PlatformSupport.Threading.ThreadedRunner.RunShortLiving(FinishRequest, this, this.dataView); + + this.dataView = null; + + if (this.State == HTTP2StreamStates.HalfClosedLocal) + this.State = HTTP2StreamStates.Closed; + else + this.State = HTTP2StreamStates.HalfClosedRemote; + } + } + break; + + case HTTP2FrameTypes.DATA: + ProcessIncomingDATAFrame(ref frame, ref windowUpdate); + break; + + case HTTP2FrameTypes.WINDOW_UPDATE: + HTTP2WindowUpdateFrame windowUpdateFrame = HTTP2FrameHelper.ReadWindowUpdateFrame(frame); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Information("HTTP2Stream", string.Format("[{0}] Received Window Update: {1:N0}, new remoteWindow: {2:N0}, initial remote window: {3:N0}, total data sent: {4:N0}", this.Id, windowUpdateFrame.WindowSizeIncrement, this.remoteWindow + windowUpdateFrame.WindowSizeIncrement, this.settings.RemoteSettings[HTTP2Settings.INITIAL_WINDOW_SIZE], this.sentData), this.Context, this.AssignedRequest.Context, this.parent.Context); + + this.remoteWindow += windowUpdateFrame.WindowSizeIncrement; + break; + + case HTTP2FrameTypes.RST_STREAM: + // https://httpwg.org/specs/rfc7540.html#RST_STREAM + + // It's possible to receive an RST_STREAM on a closed stream. In this case, we have to ignore it. + if (this.State == HTTP2StreamStates.Closed) + break; + + var rstStreamFrame = HTTP2FrameHelper.ReadRST_StreamFrame(frame); + + //HTTPManager.Logger.Error("HTTP2Stream", string.Format("[{0}] RST Stream frame ({1}) received in state {2}!", this.Id, rstStreamFrame, this.State), this.Context, this.AssignedRequest.Context, this.parent.Context); + + Abort(string.Format("RST_STREAM frame received! Error code: {0}({1})", rstStreamFrame.Error.ToString(), rstStreamFrame.ErrorCode)); + break; + + default: + HTTPManager.Logger.Warning("HTTP2Stream", string.Format("[{0}] Unexpected frame ({1}, Payload: {2}) in state {3}!", this.Id, frame, frame.PayloadAsHex(), this.State), this.Context, this.AssignedRequest.Context, this.parent.Context); + break; + } + + if (!frame.DontUseMemPool) + BufferPool.Release(frame.Payload); + } + + if (windowUpdate > 0 && this.State != HTTP2StreamStates.Closed) + { + if (HTTPManager.Logger.Level <= Logger.Loglevels.All) + HTTPManager.Logger.Information("HTTP2Stream", string.Format("[{0}] Sending window update: {1:N0}, current window: {2:N0}, initial window size: {3:N0}", this.Id, windowUpdate, this.localWindow, this.settings.MySettings[HTTP2Settings.INITIAL_WINDOW_SIZE]), this.Context, this.AssignedRequest.Context, this.parent.Context); + + this.localWindow += windowUpdate; + + outgoingFrames.Add(HTTP2FrameHelper.CreateWindowUpdateFrame(this.Id, windowUpdate)); + } + } + + protected virtual void ProcessIncomingDATAFrame(ref HTTP2FrameHeaderAndPayload frame, ref uint windowUpdate) + { + if (this.State != HTTP2StreamStates.HalfClosedLocal && this.State != HTTP2StreamStates.Open) + { + // ERROR! + return; + } + + this.downloaded += frame.PayloadLength; + + if (this.isStreamedDownload && frame.Payload != null && frame.PayloadLength > 0) + this.response.ProcessData(frame.Payload, (int)frame.PayloadLength); + + // frame's buffer will be released by the frames view + frame.DontUseMemPool = !this.isStreamedDownload; + + if (this.dataView == null && !this.isStreamedDownload) + this.dataView = new FramesAsStreamView(new DataFrameView()); + + if (!this.isStreamedDownload) + this.dataView.AddFrame(frame); + + // Track received data, and if necessary(local window getting too low), send a window update frame + if (this.localWindow < frame.PayloadLength) + { + HTTPManager.Logger.Error("HTTP2Stream", string.Format("[{0}] Frame's PayloadLength ({1:N0}) is larger then local window ({2:N0}). Frame: {3}", this.Id, frame.PayloadLength, this.localWindow, frame), this.Context, this.AssignedRequest.Context, this.parent.Context); + } + else + this.localWindow -= frame.PayloadLength; + + if ((frame.Flags & (byte)HTTP2DataFlags.END_STREAM) != 0) + this.isEndSTRReceived = true; + + // Window update logic. + // 1.) We could use a logic to only send window update(s) after a threshold is reached. + // When the initial window size is high enough to contain the whole or most of the result, + // sending back two window updates (connection and stream) after every data frame is pointless. + // 2.) On the other hand, window updates are cheap and works even when initial window size is low. + // ( + if (this.isEndSTRReceived || this.localWindow <= this.windowUpdateThreshold) + windowUpdate += this.settings.MySettings[HTTP2Settings.INITIAL_WINDOW_SIZE] - this.localWindow - windowUpdate; + + if (this.isEndSTRReceived) + { + if (this.isStreamedDownload) + this.response.FinishProcessData(); + + HTTPManager.Logger.Information("HTTP2Stream", string.Format("[{0}] All data arrived, data length: {1:N0}", this.Id, this.downloaded), this.Context, this.AssignedRequest.Context, this.parent.Context); + + // create a short living thread to process the downloaded data: + PlatformSupport.Threading.ThreadedRunner.RunShortLiving(FinishRequest, this, this.dataView); + + this.dataView = null; + + if (this.State == HTTP2StreamStates.HalfClosedLocal) + this.State = HTTP2StreamStates.Closed; + else + this.State = HTTP2StreamStates.HalfClosedRemote; + } + else if (this.AssignedRequest.OnDownloadProgress != null) + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this.AssignedRequest, + RequestEvents.DownloadProgress, + downloaded, + this.response.ExpectedContentLength)); + } + + protected void ProcessState(List outgoingFrames) + { + switch (this.State) + { + case HTTP2StreamStates.Idle: + + UInt32 initiatedInitialWindowSize = this.settings.InitiatedMySettings[HTTP2Settings.INITIAL_WINDOW_SIZE]; + this.localWindow = initiatedInitialWindowSize; + // window update with a zero increment would be an error (https://httpwg.org/specs/rfc7540.html#WINDOW_UPDATE) + //if (HTTP2Connection.MaxValueFor31Bits > initiatedInitialWindowSize) + // this.outgoing.Enqueue(HTTP2FrameHelper.CreateWindowUpdateFrame(this.Id, HTTP2Connection.MaxValueFor31Bits - initiatedInitialWindowSize)); + //this.localWindow = HTTP2Connection.MaxValueFor31Bits; + +#if !BESTHTTP_DISABLE_CACHING + // Setup cache control headers before we send out the request + if (!this.AssignedRequest.DisableCache) + HTTPCacheService.SetHeaders(this.AssignedRequest); +#endif + + // hpack encode the request's headers + this.encoder.Encode(this, this.AssignedRequest, this.outgoing, this.Id); + + // HTTP/2 uses DATA frames to carry message payloads. + // The chunked transfer encoding defined in Section 4.1 of [RFC7230] MUST NOT be used in HTTP/2. + this.uploadStreamInfo = this.AssignedRequest.GetUpStream(); + + //this.State = HTTP2StreamStates.Open; + + if (this.uploadStreamInfo.Stream == null) + { + this.State = HTTP2StreamStates.HalfClosedLocal; + this.AssignedRequest.Timing.Add(TimingEventNames.Request_Sent); + } + else + { + this.State = HTTP2StreamStates.Open; + this.lastReadCount = 1; + } + break; + + case HTTP2StreamStates.Open: + ProcessOpenState(outgoingFrames); + //HTTPManager.Logger.Information("HTTP2Stream", string.Format("[{0}] New DATA frame created! remoteWindow: {1:N0}", this.Id, this.remoteWindow), this.Context, this.AssignedRequest.Context, this.parent.Context); + break; + + case HTTP2StreamStates.HalfClosedLocal: + break; + + case HTTP2StreamStates.HalfClosedRemote: + break; + + case HTTP2StreamStates.Closed: + break; + } + } + + protected virtual void ProcessOpenState(List outgoingFrames) + { + // remote Window can be negative! See https://httpwg.org/specs/rfc7540.html#InitialWindowSize + if (this.remoteWindow <= 0) + { + HTTPManager.Logger.Information("HTTP2Stream", string.Format("[{0}] Skipping data sending as remote Window is {1}!", this.Id, this.remoteWindow), this.Context, this.AssignedRequest.Context, this.parent.Context); + return; + } + + // This step will send one frame per OpenState call. + + Int64 maxFrameSize = Math.Min(HTTPRequest.UploadChunkSize, Math.Min(this.remoteWindow, this.settings.RemoteSettings[HTTP2Settings.MAX_FRAME_SIZE])); + + HTTP2FrameHeaderAndPayload frame = new HTTP2FrameHeaderAndPayload(); + frame.Type = HTTP2FrameTypes.DATA; + frame.StreamId = this.Id; + + frame.Payload = BufferPool.Get(maxFrameSize, true); + + // Expect a readCount of zero if it's end of the stream. But, to enable non-blocking scenario to wait for data, going to treat a negative value as no data. + this.lastReadCount = this.uploadStreamInfo.Stream.Read(frame.Payload, 0, (int)Math.Min(maxFrameSize, int.MaxValue)); + if (this.lastReadCount <= 0) + { + BufferPool.Release(frame.Payload); + frame.Payload = null; + frame.PayloadLength = 0; + + if (this.lastReadCount < 0) + return; + } + else + frame.PayloadLength = (UInt32)this.lastReadCount; + + frame.PayloadOffset = 0; + frame.DontUseMemPool = false; + + if (this.lastReadCount <= 0) + { + this.uploadStreamInfo.Stream.Dispose(); + this.uploadStreamInfo = new HTTPRequest.UploadStreamInfo(); + + frame.Flags = (byte)(HTTP2DataFlags.END_STREAM); + + this.State = HTTP2StreamStates.HalfClosedLocal; + + this.AssignedRequest.Timing.Add(TimingEventNames.Request_Sent); + } + + this.outgoing.Enqueue(frame); + + this.remoteWindow -= frame.PayloadLength; + + this.sentData += frame.PayloadLength; + + if (this.AssignedRequest.OnUploadProgress != null) + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this.AssignedRequest, RequestEvents.UploadProgress, this.sentData, this.uploadStreamInfo.Length)); + } + + protected void OnRemoteSettingChanged(HTTP2SettingsRegistry registry, HTTP2Settings setting, uint oldValue, uint newValue) + { + switch (setting) + { + case HTTP2Settings.INITIAL_WINDOW_SIZE: + // https://httpwg.org/specs/rfc7540.html#InitialWindowSize + // "Prior to receiving a SETTINGS frame that sets a value for SETTINGS_INITIAL_WINDOW_SIZE, + // an endpoint can only use the default initial window size when sending flow-controlled frames." + // "In addition to changing the flow-control window for streams that are not yet active, + // a SETTINGS frame can alter the initial flow-control window size for streams with active flow-control windows + // (that is, streams in the "open" or "half-closed (remote)" state). When the value of SETTINGS_INITIAL_WINDOW_SIZE changes, + // a receiver MUST adjust the size of all stream flow-control windows that it maintains by the difference between the new value and the old value." + + // So, if we created a stream before the remote peer's initial settings frame is received, we + // will adjust the window size. For example: initial window size by default is 65535, if we later + // receive a change to 1048576 (1 MB) we will increase the current remoteWindow by (1 048 576 - 65 535 =) 983 041 + + // But because initial window size in a setting frame can be smaller then the default 65535 bytes, + // the difference can be negative: + // "A change to SETTINGS_INITIAL_WINDOW_SIZE can cause the available space in a flow-control window to become negative. + // A sender MUST track the negative flow-control window and MUST NOT send new flow-controlled frames + // until it receives WINDOW_UPDATE frames that cause the flow-control window to become positive. + + // For example, if the client sends 60 KB immediately on connection establishment + // and the server sets the initial window size to be 16 KB, the client will recalculate + // the available flow - control window to be - 44 KB on receipt of the SETTINGS frame. + // The client retains a negative flow-control window until WINDOW_UPDATE frames restore the + // window to being positive, after which the client can resume sending." + + this.remoteWindow += newValue - oldValue; + + HTTPManager.Logger.Information("HTTP2Stream", string.Format("[{0}] Remote Setting's Initial Window Updated from {1:N0} to {2:N0}, diff: {3:N0}, new remoteWindow: {4:N0}, total data sent: {5:N0}", this.Id, oldValue, newValue, newValue - oldValue, this.remoteWindow, this.sentData), this.Context, this.AssignedRequest.Context, this.parent.Context); + break; + } + } + + protected static void FinishRequest(HTTP2Stream stream, FramesAsStreamView dataStream) + { + try + { + if (dataStream != null) + { + try + { + stream.response.AddData(dataStream); + } + finally + { + dataStream.Close(); + } + } + + stream.AssignedRequest.Timing.Add(TimingEventNames.Response_Received); + + bool resendRequest; + HTTPConnectionStates proposedConnectionStates; // ignored + KeepAliveHeader keepAliveHeader = null; // ignored + + ConnectionHelper.HandleResponse("HTTP2Stream", stream.AssignedRequest, out resendRequest, out proposedConnectionStates, ref keepAliveHeader, stream.Context, stream.AssignedRequest.Context); + + if (resendRequest && !stream.AssignedRequest.IsCancellationRequested) + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(stream.AssignedRequest, RequestEvents.Resend)); + else if (stream.AssignedRequest.State == HTTPRequestStates.Processing && !stream.AssignedRequest.IsCancellationRequested) + stream.AssignedRequest.State = HTTPRequestStates.Finished; + else + { + // Already set in HTTPRequest's Abort(). + //if (stream.AssignedRequest.State == HTTPRequestStates.Processing && stream.AssignedRequest.IsCancellationRequested) + // stream.AssignedRequest.State = stream.AssignedRequest.IsTimedOut ? HTTPRequestStates.TimedOut : HTTPRequestStates.Aborted; + } + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("HTTP2Stream", "FinishRequest", ex, stream.AssignedRequest.Context); + } + } + + public void Removed() + { + if (this.uploadStreamInfo.Stream != null) + { + this.uploadStreamInfo.Stream.Dispose(); + this.uploadStreamInfo = new HTTPRequest.UploadStreamInfo(); + } + + // After receiving a RST_STREAM on a stream, the receiver MUST NOT send additional frames for that stream, with the exception of PRIORITY. + this.outgoing.Clear(); + + // https://github.com/Benedicht/BestHTTP-Issues/issues/77 + // Unsubscribe from OnSettingChangedEvent to remove reference to this instance. + this.settings.RemoteSettings.OnSettingChangedEvent -= OnRemoteSettingChanged; + + HTTPManager.Logger.Information("HTTP2Stream", "Stream removed: " + this.Id.ToString(), this.Context, this.AssignedRequest.Context, this.parent.Context); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Stream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Stream.cs.meta new file mode 100644 index 000000000..d0ac46228 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2Stream.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cc308fd8e0bd56844b6a3511b489602c +timeCreated: 1571210042 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2WebSocketStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2WebSocketStream.cs new file mode 100644 index 000000000..440b92364 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2WebSocketStream.cs @@ -0,0 +1,185 @@ +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_ALTERNATE_SSL && !BESTHTTP_DISABLE_HTTP2 && !BESTHTTP_DISABLE_WEBSOCKET +using System; +using System.Collections.Generic; + +using BestHTTP.Extensions; +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.WebSocket; + +namespace BestHTTP.Connections.HTTP2 +{ + public sealed class HTTP2WebSocketStream : HTTP2Stream + { + public override bool HasFrameToSend + { + get + { + // Don't let the connection sleep until + return this.outgoing.Count > 0 || // we already booked at least one frame in advance + (this.State == HTTP2StreamStates.Open && + this.remoteWindow > 0 && + this.lastReadCount > 0 && + (this.overHTTP2.frames.Count > 0 || this.chunkQueue.Count > 0)); // we are in the middle of sending request data + } + } + + public override TimeSpan NextInteraction => this.overHTTP2.GetNextInteraction(); + + private OverHTTP2 overHTTP2; + + // local list of websocket header-data pairs + private List> chunkQueue = new List>(); + + public HTTP2WebSocketStream(uint id, HTTP2Handler parentHandler, HTTP2SettingsManager registry, HPACKEncoder hpackEncoder) : base(id, parentHandler, registry, hpackEncoder) + { + } + + public override void Assign(HTTPRequest request) + { + base.Assign(request); + + this.overHTTP2 = request.Tag as OverHTTP2; + this.overHTTP2.SetHTTP2Handler(this.parent); + } + + protected override void ProcessIncomingDATAFrame(ref HTTP2FrameHeaderAndPayload frame, ref uint windowUpdate) + { + try + { + if (this.State != HTTP2StreamStates.HalfClosedLocal && this.State != HTTP2StreamStates.Open) + { + // ERROR! + return; + } + + this.downloaded += frame.PayloadLength; + + this.overHTTP2.OnReadThread(frame.Payload.AsBuffer((int)frame.PayloadOffset, (int)frame.PayloadLength)); + + // frame's buffer will be released later + frame.DontUseMemPool = true; + + // Track received data, and if necessary(local window getting too low), send a window update frame + if (this.localWindow < frame.PayloadLength) + { + HTTPManager.Logger.Error(nameof(HTTP2WebSocketStream), string.Format("[{0}] Frame's PayloadLength ({1:N0}) is larger then local window ({2:N0}). Frame: {3}", this.Id, frame.PayloadLength, this.localWindow, frame), this.Context, this.AssignedRequest.Context, this.parent.Context); + } + else + this.localWindow -= frame.PayloadLength; + + if ((frame.Flags & (byte)HTTP2DataFlags.END_STREAM) != 0) + this.isEndSTRReceived = true; + + if (this.isEndSTRReceived) + { + HTTPManager.Logger.Information(nameof(HTTP2WebSocketStream), string.Format("[{0}] All data arrived, data length: {1:N0}", this.Id, this.downloaded), this.Context, this.AssignedRequest.Context, this.parent.Context); + + // create a short living thread to process the downloaded data: + PlatformSupport.Threading.ThreadedRunner.RunShortLiving(FinishRequest, this, this.dataView); + + this.dataView = null; + + if (this.State == HTTP2StreamStates.HalfClosedLocal) + this.State = HTTP2StreamStates.Closed; + else + this.State = HTTP2StreamStates.HalfClosedRemote; + } + + if (this.isEndSTRReceived || this.localWindow <= this.windowUpdateThreshold) + windowUpdate += this.settings.MySettings[HTTP2Settings.INITIAL_WINDOW_SIZE] - this.localWindow - windowUpdate; + } + catch (Exception ex) + { + HTTPManager.Logger.Exception(nameof(HTTP2WebSocketStream), nameof(ProcessIncomingDATAFrame), ex, this.parent.Context); + } + } + + protected override void ProcessOpenState(List outgoingFrames) + { + try + { + // remote Window can be negative! See https://httpwg.org/specs/rfc7540.html#InitialWindowSize + if (this.remoteWindow <= 0) + { + HTTPManager.Logger.Information(nameof(HTTP2WebSocketStream), string.Format("[{0}] Skipping data sending as remote Window is {1}!", this.Id, this.remoteWindow), this.Context, this.AssignedRequest.Context, this.parent.Context); + return; + } + + this.overHTTP2.PreReadCallback(); + + Int64 maxFragmentSize = Math.Min(BestHTTP.WebSocket.WebSocket.MaxFragmentSize, this.settings.RemoteSettings[HTTP2Settings.MAX_FRAME_SIZE]); + Int64 maxFrameSize = Math.Min(maxFragmentSize, this.remoteWindow); + + if (chunkQueue.Count == 0) + { + if (this.overHTTP2.frames.TryDequeue(out var frame)) + { + this.overHTTP2._bufferedAmount -= (int)frame.Data.Count; + + frame.WriteTo((header, data) => chunkQueue.Add(new KeyValuePair(header, data)), (uint)maxFragmentSize, false, this.Context); + } + } + + while (this.remoteWindow >= 6 && chunkQueue.Count > 0) + { + var kvp = chunkQueue[0]; + + BufferSegment header = kvp.Key; + BufferSegment data = kvp.Value; + + int minBytes = header.Count; + int maxBytes = minBytes + data.Count; + + // remote window is less than the minimum we have to send, or + // the frame has data but we have space only to send the websocket header + if (this.remoteWindow < minBytes || (maxBytes > minBytes && this.remoteWindow == minBytes)) + return; + + HTTP2FrameHeaderAndPayload headerFrame = new HTTP2FrameHeaderAndPayload(); + headerFrame.Type = HTTP2FrameTypes.DATA; + headerFrame.StreamId = this.Id; + headerFrame.PayloadOffset = (uint)header.Offset; + headerFrame.PayloadLength = (uint)header.Count; + headerFrame.Payload = header.Data; + headerFrame.DontUseMemPool = false; + + if (data.Count > 0) + { + HTTP2FrameHeaderAndPayload dataFrame = new HTTP2FrameHeaderAndPayload(); + dataFrame.Type = HTTP2FrameTypes.DATA; + dataFrame.StreamId = this.Id; + + var buff = data.Slice(data.Offset, (int)Math.Min(data.Count, maxFrameSize)); + dataFrame.PayloadOffset = (uint)buff.Offset; + dataFrame.PayloadLength = (uint)buff.Count; + dataFrame.Payload = buff.Data; + + data = data.Slice(buff.Offset + buff.Count); + if (data.Count == 0) + chunkQueue.RemoveAt(0); + else + chunkQueue[0] = new KeyValuePair(header, data); + + // release the buffer only with the final frame and with the final frame's last data chunk + bool isLast = (header.Data[header.Offset] & 0x7F) != 0 && chunkQueue.Count == 0; + headerFrame.DontUseMemPool = dataFrame.DontUseMemPool = !isLast; + + this.outgoing.Enqueue(headerFrame); + this.outgoing.Enqueue(dataFrame); + } + else + { + this.outgoing.Enqueue(headerFrame); + chunkQueue.RemoveAt(0); + } + } + } + catch (Exception ex) + { + HTTPManager.Logger.Exception(nameof(HTTP2WebSocketStream), nameof(ProcessOpenState), ex, this.parent.Context); + } + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2WebSocketStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2WebSocketStream.cs.meta new file mode 100644 index 000000000..a7181e48d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HTTP2WebSocketStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 70dfdb0b300f8494cbfe6474037178d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HeaderTable.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HeaderTable.cs new file mode 100644 index 000000000..a5e6909e5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HeaderTable.cs @@ -0,0 +1,199 @@ +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_ALTERNATE_SSL && !BESTHTTP_DISABLE_HTTP2 + +using System; +using System.Collections.Generic; + +namespace BestHTTP.Connections.HTTP2 +{ + sealed class HeaderTable + { + // https://http2.github.io/http2-spec/compression.html#static.table.definition + // Valid indexes starts with 1, so there's an empty entry. + static string[] StaticTableValues = new string[] { string.Empty, string.Empty, "GET", "POST", "/", "/index.html", "http", "https", "200", "204", "206", "304", "400", "404", "500", string.Empty, "gzip, deflate" }; + + // https://http2.github.io/http2-spec/compression.html#static.table.definition + // Valid indexes starts with 1, so there's an empty entry. + static string[] StaticTable = new string[62] + { + string.Empty, + ":authority", + ":method", // GET + ":method", // POST + ":path", // / + ":path", // index.html + ":scheme", // http + ":scheme", // https + ":status", // 200 + ":status", // 204 + ":status", // 206 + ":status", // 304 + ":status", // 400 + ":status", // 404 + ":status", // 500 + "accept-charset", + "accept-encoding", // gzip, deflate + "accept-language", + "accept-ranges", + "accept", + "access-control-allow-origin", + "age", + "allow", + "authorization", + "cache-control", + "content-disposition", + "content-encoding", + "content-language", + "content-length", + "content-location", + "content-range", + "content-type", + "cookie", + "date", + "etag", + "expect", + "expires", + "from", + "host", + "if-match", + "if-modified-since", + "if-none-match", + "if-range", + "if-unmodified-since", + "last-modified", + "link", + "location", + "max-forwards", + "proxy-authenticate", + "proxy-authorization", + "range", + "referer", + "refresh", + "retry-after", + "server", + "set-cookie", + "strict-transport-security", + "transfer-encoding", + "user-agent", + "vary", + "via", + "www-authenticate", + }; + + public UInt32 DynamicTableSize { get; private set; } + public UInt32 MaxDynamicTableSize { + get { return this._maxDynamicTableSize; } + set + { + this._maxDynamicTableSize = value; + EvictEntries(0); + } + } + private UInt32 _maxDynamicTableSize; + + private List> DynamicTable = new List>(); + private HTTP2SettingsRegistry settingsRegistry; + + public HeaderTable(HTTP2SettingsRegistry registry) + { + this.settingsRegistry = registry; + this.MaxDynamicTableSize = this.settingsRegistry[HTTP2Settings.HEADER_TABLE_SIZE]; + } + + public KeyValuePair GetIndex(string key, string value) + { + for (int i = 0; i < DynamicTable.Count; ++i) + { + var kvp = DynamicTable[i]; + + // Exact match for both key and value + if (kvp.Key.Equals(key, StringComparison.OrdinalIgnoreCase) && kvp.Value.Equals(value, StringComparison.OrdinalIgnoreCase)) + return new KeyValuePair((UInt32)(StaticTable.Length + i), (UInt32)(StaticTable.Length + i)); + } + + KeyValuePair bestMatch = new KeyValuePair(0, 0); + for (int i = 0; i < StaticTable.Length; ++i) + { + if (StaticTable[i].Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if (i < StaticTableValues.Length && !string.IsNullOrEmpty(StaticTableValues[i]) && StaticTableValues[i].Equals(value, StringComparison.OrdinalIgnoreCase)) + return new KeyValuePair((UInt32)i, (UInt32)i); + else + bestMatch = new KeyValuePair((UInt32)i, 0); + } + } + + return bestMatch; + } + + public string GetKey(UInt32 index) + { + if (index < StaticTable.Length) + return StaticTable[index]; + + return this.DynamicTable[(int)(index - StaticTable.Length)].Key; + } + + public KeyValuePair GetHeader(UInt32 index) + { + if (index < StaticTable.Length) + return new KeyValuePair(StaticTable[index], + index < StaticTableValues.Length ? StaticTableValues[index] : null); + + return this.DynamicTable[(int)(index - StaticTable.Length)]; + } + + public void Add(KeyValuePair header) + { + // https://http2.github.io/http2-spec/compression.html#calculating.table.size + // The size of an entry is the sum of its name's length in octets (as defined in Section 5.2), + // its value's length in octets, and 32. + UInt32 newHeaderSize = CalculateEntrySize(header); + + EvictEntries(newHeaderSize); + + // If the size of the new entry is less than or equal to the maximum size, that entry is added to the table. + // It is not an error to attempt to add an entry that is larger than the maximum size; + // an attempt to add an entry larger than the maximum size causes the table to be + // emptied of all existing entries and results in an empty table. + if (this.DynamicTableSize + newHeaderSize <= this.MaxDynamicTableSize) + { + this.DynamicTable.Insert(0, header); + this.DynamicTableSize += (UInt32)newHeaderSize; + } + } + + private UInt32 CalculateEntrySize(KeyValuePair entry) + { + return 32 + (UInt32)System.Text.Encoding.UTF8.GetByteCount(entry.Key) + + (UInt32)System.Text.Encoding.UTF8.GetByteCount(entry.Value); + } + + private void EvictEntries(uint newHeaderSize) + { + // https://http2.github.io/http2-spec/compression.html#entry.addition + // Before a new entry is added to the dynamic table, entries are evicted from the end of the dynamic + // table until the size of the dynamic table is less than or equal to (maximum size - new entry size) or until the table is empty. + while (this.DynamicTableSize + newHeaderSize > this.MaxDynamicTableSize && this.DynamicTable.Count > 0) + { + KeyValuePair entry = this.DynamicTable[this.DynamicTable.Count - 1]; + this.DynamicTable.RemoveAt(this.DynamicTable.Count - 1); + this.DynamicTableSize -= CalculateEntrySize(entry); + } + } + + public override string ToString() + { + System.Text.StringBuilder sb = PlatformSupport.Text.StringBuilderPool.Get(this.DynamicTable.Count + 3); + sb.Append("[HeaderTable "); + sb.AppendFormat("DynamicTable count: {0}, DynamicTableSize: {1}, MaxDynamicTableSize: {2}, ", this.DynamicTable.Count, this.DynamicTableSize, this.MaxDynamicTableSize); + + foreach(var kvp in this.DynamicTable) + sb.AppendFormat("\"{0}\": \"{1}\", ", kvp.Key, kvp.Value); + + sb.Append("]"); + return PlatformSupport.Text.StringBuilderPool.ReleaseAndGrab(sb); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HeaderTable.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HeaderTable.cs.meta new file mode 100644 index 000000000..eda16dedd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HeaderTable.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5b73749356303be43b6d9debd22d7937 +timeCreated: 1571210041 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HuffmanEncoder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HuffmanEncoder.cs new file mode 100644 index 000000000..e4f08d114 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HuffmanEncoder.cs @@ -0,0 +1,917 @@ +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_ALTERNATE_SSL && !BESTHTTP_DISABLE_HTTP2 + +using System; + +namespace BestHTTP.Connections.HTTP2 +{ + [BestHTTP.PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstruction] + static class HuffmanEncoder + { + public const UInt16 EOS = 256; + + public struct TableEntry + { + public UInt32 Code; + public byte Bits; + + /// + /// It must return 0 or 1 at bit index. Indexing will be relative to the Bits representing the current code. Idx grows from left to right. Idx must be between [1..Bits]. + /// + public byte GetBitAtIdx(byte idx) + { + return (byte)((this.Code >> (this.Bits - idx)) & 1); + } + + public override string ToString() + { + return string.Format("[TableEntry Code: 0x{0:X}, Bits: {1}]", this.Code, this.Bits); + } + } + + public struct TreeNode + { + public UInt16 NextZeroIdx; + public UInt16 NextOneIdx; + + public UInt16 Value; + + public override string ToString() + { + return string.Format("[TreeNode Value: {0}, NextZeroIdx: {1}, NextOneIdx: {2}]", + this.Value, this.NextZeroIdx, this.NextOneIdx); + } + } + + static TableEntry[] StaticTable = new TableEntry[257] + { + new TableEntry{ Code = 0x1ff8 , Bits = 13 }, + new TableEntry{ Code = 0x7fffd8 , Bits = 23 }, + new TableEntry{ Code = 0xfffffe2, Bits = 28 }, + new TableEntry{ Code = 0xfffffe3, Bits = 28 }, + new TableEntry{ Code = 0xfffffe4, Bits = 28 }, + new TableEntry{ Code = 0xfffffe5, Bits = 28 }, + new TableEntry{ Code = 0xfffffe6, Bits = 28 }, + new TableEntry{ Code = 0xfffffe7, Bits = 28 }, + new TableEntry{ Code = 0xfffffe8, Bits = 28 }, + new TableEntry{ Code = 0xffffea, Bits = 24 }, + new TableEntry{ Code = 0x3ffffffc , Bits = 30 }, + new TableEntry{ Code = 0xfffffe9 , Bits = 28 }, + new TableEntry{ Code = 0xfffffea , Bits = 28 }, + new TableEntry{ Code = 0x3ffffffd , Bits = 30 }, + new TableEntry{ Code = 0xfffffeb , Bits = 28 }, + new TableEntry{ Code = 0xfffffec , Bits = 28 }, + new TableEntry{ Code = 0xfffffed , Bits = 28 }, + new TableEntry{ Code = 0xfffffee , Bits = 28 }, + new TableEntry{ Code = 0xfffffef , Bits = 28 }, + new TableEntry{ Code = 0xffffff0 , Bits = 28 }, + new TableEntry{ Code = 0xffffff1 , Bits = 28 }, + new TableEntry{ Code = 0xffffff2 , Bits = 28 }, + new TableEntry{ Code = 0x3ffffffe, Bits = 30 }, + new TableEntry{ Code = 0xffffff3 , Bits = 28 }, + new TableEntry{ Code = 0xffffff4 , Bits = 28 }, + new TableEntry{ Code = 0xffffff5 , Bits = 28 }, + new TableEntry{ Code = 0xffffff6 , Bits = 28 }, + new TableEntry{ Code = 0xffffff7 , Bits = 28 }, + new TableEntry{ Code = 0xffffff8 , Bits = 28 }, + new TableEntry{ Code = 0xffffff9 , Bits = 28 }, + new TableEntry{ Code = 0xffffffa , Bits = 28 }, + new TableEntry{ Code = 0xffffffb , Bits = 28 }, + new TableEntry{ Code = 0x14 , Bits = 6 }, + new TableEntry{ Code = 0x3f8, Bits = 10 }, + new TableEntry{ Code = 0x3f9, Bits = 10 }, + new TableEntry{ Code = 0xffa, Bits = 12 }, + new TableEntry{ Code = 0x1ff9 , Bits = 13 }, + new TableEntry{ Code = 0x15 , Bits = 6 }, + new TableEntry{ Code = 0xf8 , Bits = 8 }, + new TableEntry{ Code = 0x7fa, Bits = 11 }, + new TableEntry{ Code = 0x3fa, Bits = 10 }, + new TableEntry{ Code = 0x3fb, Bits = 10 }, + new TableEntry{ Code = 0xf9 , Bits = 8 }, + new TableEntry{ Code = 0x7fb, Bits = 11 }, + new TableEntry{ Code = 0xfa , Bits = 8 }, + new TableEntry{ Code = 0x16 , Bits = 6 }, + new TableEntry{ Code = 0x17 , Bits = 6 }, + new TableEntry{ Code = 0x18 , Bits = 6 }, + new TableEntry{ Code = 0x0 , Bits = 5 }, + new TableEntry{ Code = 0x1 , Bits = 5 }, + new TableEntry{ Code = 0x2 , Bits = 5 }, + new TableEntry{ Code = 0x19 , Bits = 6 }, + new TableEntry{ Code = 0x1a , Bits = 6 }, + new TableEntry{ Code = 0x1b , Bits = 6 }, + new TableEntry{ Code = 0x1c , Bits = 6 }, + new TableEntry{ Code = 0x1d , Bits = 6 }, + new TableEntry{ Code = 0x1e , Bits = 6 }, + new TableEntry{ Code = 0x1f , Bits = 6 }, + new TableEntry{ Code = 0x5c , Bits = 7 }, + new TableEntry{ Code = 0xfb , Bits = 8 }, + new TableEntry{ Code = 0x7ffc , Bits = 15 }, + new TableEntry{ Code = 0x20 , Bits = 6 }, + new TableEntry{ Code = 0xffb, Bits = 12 }, + new TableEntry{ Code = 0x3fc, Bits = 10 }, + new TableEntry{ Code = 0x1ffa , Bits = 13 }, + new TableEntry{ Code = 0x21, Bits = 6 }, + new TableEntry{ Code = 0x5d, Bits = 7 }, + new TableEntry{ Code = 0x5e, Bits = 7 }, + new TableEntry{ Code = 0x5f, Bits = 7 }, + new TableEntry{ Code = 0x60, Bits = 7 }, + new TableEntry{ Code = 0x61, Bits = 7 }, + new TableEntry{ Code = 0x62, Bits = 7 }, + new TableEntry{ Code = 0x63, Bits = 7 }, + new TableEntry{ Code = 0x64, Bits = 7 }, + new TableEntry{ Code = 0x65, Bits = 7 }, + new TableEntry{ Code = 0x66, Bits = 7 }, + new TableEntry{ Code = 0x67, Bits = 7 }, + new TableEntry{ Code = 0x68, Bits = 7 }, + new TableEntry{ Code = 0x69, Bits = 7 }, + new TableEntry{ Code = 0x6a, Bits = 7 }, + new TableEntry{ Code = 0x6b, Bits = 7 }, + new TableEntry{ Code = 0x6c, Bits = 7 }, + new TableEntry{ Code = 0x6d, Bits = 7 }, + new TableEntry{ Code = 0x6e, Bits = 7 }, + new TableEntry{ Code = 0x6f, Bits = 7 }, + new TableEntry{ Code = 0x70, Bits = 7 }, + new TableEntry{ Code = 0x71, Bits = 7 }, + new TableEntry{ Code = 0x72, Bits = 7 }, + new TableEntry{ Code = 0xfc, Bits = 8 }, + new TableEntry{ Code = 0x73, Bits = 7 }, + new TableEntry{ Code = 0xfd, Bits = 8 }, + new TableEntry{ Code = 0x1ffb, Bits = 13 }, + new TableEntry{ Code = 0x7fff0, Bits = 19 }, + new TableEntry{ Code = 0x1ffc, Bits = 13 }, + new TableEntry{ Code = 0x3ffc, Bits = 14 }, + new TableEntry{ Code = 0x22, Bits = 6 }, + new TableEntry{ Code = 0x7ffd, Bits = 15 }, + new TableEntry{ Code = 0x3, Bits = 5 }, + new TableEntry{ Code = 0x23, Bits = 6 }, + new TableEntry{ Code = 0x4, Bits = 5 }, + new TableEntry{ Code = 0x24, Bits = 6 }, + new TableEntry{ Code = 0x5, Bits = 5 }, + new TableEntry{ Code = 0x25, Bits = 6 }, + new TableEntry{ Code = 0x26, Bits = 6 }, + new TableEntry{ Code = 0x27, Bits = 6 }, + new TableEntry{ Code = 0x6 , Bits = 5 }, + new TableEntry{ Code = 0x74, Bits = 7 }, + new TableEntry{ Code = 0x75, Bits = 7 }, + new TableEntry{ Code = 0x28, Bits = 6 }, + new TableEntry{ Code = 0x29, Bits = 6 }, + new TableEntry{ Code = 0x2a, Bits = 6 }, + new TableEntry{ Code = 0x7 , Bits = 5 }, + new TableEntry{ Code = 0x2b, Bits = 6 }, + new TableEntry{ Code = 0x76, Bits = 7 }, + new TableEntry{ Code = 0x2c, Bits = 6 }, + new TableEntry{ Code = 0x8 , Bits = 5 }, + new TableEntry{ Code = 0x9 , Bits = 5 }, + new TableEntry{ Code = 0x2d, Bits = 6 }, + new TableEntry{ Code = 0x77, Bits = 7 }, + new TableEntry{ Code = 0x78, Bits = 7 }, + new TableEntry{ Code = 0x79, Bits = 7 }, + new TableEntry{ Code = 0x7a, Bits = 7 }, + new TableEntry{ Code = 0x7b, Bits = 7 }, + new TableEntry{ Code = 0x7ffe, Bits = 15 }, + new TableEntry{ Code = 0x7fc, Bits = 11 }, + new TableEntry{ Code = 0x3ffd, Bits = 14 }, + new TableEntry{ Code = 0x1ffd, Bits = 13 }, + new TableEntry{ Code = 0xffffffc, Bits = 28 }, + new TableEntry{ Code = 0xfffe6 , Bits = 20 }, + new TableEntry{ Code = 0x3fffd2, Bits = 22 }, + new TableEntry{ Code = 0xfffe7 , Bits = 20 }, + new TableEntry{ Code = 0xfffe8 , Bits = 20 }, + new TableEntry{ Code = 0x3fffd3, Bits = 22 }, + new TableEntry{ Code = 0x3fffd4, Bits = 22 }, + new TableEntry{ Code = 0x3fffd5, Bits = 22 }, + new TableEntry{ Code = 0x7fffd9, Bits = 23 }, + new TableEntry{ Code = 0x3fffd6, Bits = 22 }, + new TableEntry{ Code = 0x7fffda, Bits = 23 }, + new TableEntry{ Code = 0x7fffdb, Bits = 23 }, + new TableEntry{ Code = 0x7fffdc, Bits = 23 }, + new TableEntry{ Code = 0x7fffdd, Bits = 23 }, + new TableEntry{ Code = 0x7fffde, Bits = 23 }, + new TableEntry{ Code = 0xffffeb, Bits = 24 }, + new TableEntry{ Code = 0x7fffdf, Bits = 23 }, + new TableEntry{ Code = 0xffffec, Bits = 24 }, + new TableEntry{ Code = 0xffffed, Bits = 24 }, + new TableEntry{ Code = 0x3fffd7, Bits = 22 }, + new TableEntry{ Code = 0x7fffe0, Bits = 23 }, + new TableEntry{ Code = 0xffffee, Bits = 24 }, + new TableEntry{ Code = 0x7fffe1, Bits = 23 }, + new TableEntry{ Code = 0x7fffe2, Bits = 23 }, + new TableEntry{ Code = 0x7fffe3, Bits = 23 }, + new TableEntry{ Code = 0x7fffe4, Bits = 23 }, + new TableEntry{ Code = 0x1fffdc, Bits = 21 }, + new TableEntry{ Code = 0x3fffd8, Bits = 22 }, + new TableEntry{ Code = 0x7fffe5, Bits = 23 }, + new TableEntry{ Code = 0x3fffd9, Bits = 22 }, + new TableEntry{ Code = 0x7fffe6, Bits = 23 }, + new TableEntry{ Code = 0x7fffe7, Bits = 23 }, + new TableEntry{ Code = 0xffffef, Bits = 24 }, + new TableEntry{ Code = 0x3fffda, Bits = 22 }, + new TableEntry{ Code = 0x1fffdd, Bits = 21 }, + new TableEntry{ Code = 0xfffe9 , Bits = 20 }, + new TableEntry{ Code = 0x3fffdb, Bits = 22 }, + new TableEntry{ Code = 0x3fffdc, Bits = 22 }, + new TableEntry{ Code = 0x7fffe8, Bits = 23 }, + new TableEntry{ Code = 0x7fffe9, Bits = 23 }, + new TableEntry{ Code = 0x1fffde, Bits = 21 }, + new TableEntry{ Code = 0x7fffea, Bits = 23 }, + new TableEntry{ Code = 0x3fffdd, Bits = 22 }, + new TableEntry{ Code = 0x3fffde, Bits = 22 }, + new TableEntry{ Code = 0xfffff0, Bits = 24 }, + new TableEntry{ Code = 0x1fffdf, Bits = 21 }, + new TableEntry{ Code = 0x3fffdf, Bits = 22 }, + new TableEntry{ Code = 0x7fffeb, Bits = 23 }, + new TableEntry{ Code = 0x7fffec, Bits = 23 }, + new TableEntry{ Code = 0x1fffe0, Bits = 21 }, + new TableEntry{ Code = 0x1fffe1, Bits = 21 }, + new TableEntry{ Code = 0x3fffe0, Bits = 22 }, + new TableEntry{ Code = 0x1fffe2, Bits = 21 }, + new TableEntry{ Code = 0x7fffed, Bits = 23 }, + new TableEntry{ Code = 0x3fffe1, Bits = 22 }, + new TableEntry{ Code = 0x7fffee, Bits = 23 }, + new TableEntry{ Code = 0x7fffef, Bits = 23 }, + new TableEntry{ Code = 0xfffea , Bits = 20 }, + new TableEntry{ Code = 0x3fffe2, Bits = 22 }, + new TableEntry{ Code = 0x3fffe3, Bits = 22 }, + new TableEntry{ Code = 0x3fffe4, Bits = 22 }, + new TableEntry{ Code = 0x7ffff0, Bits = 23 }, + new TableEntry{ Code = 0x3fffe5, Bits = 22 }, + new TableEntry{ Code = 0x3fffe6, Bits = 22 }, + new TableEntry{ Code = 0x7ffff1, Bits = 23 }, + new TableEntry{ Code = 0x3ffffe0, Bits = 26 }, + new TableEntry{ Code = 0x3ffffe1, Bits = 26 }, + new TableEntry{ Code = 0xfffeb , Bits = 20 }, + new TableEntry{ Code = 0x7fff1 , Bits = 19 }, + new TableEntry{ Code = 0x3fffe7, Bits = 22 }, + new TableEntry{ Code = 0x7ffff2, Bits = 23 }, + new TableEntry{ Code = 0x3fffe8, Bits = 22 }, + new TableEntry{ Code = 0x1ffffec, Bits = 25 }, + new TableEntry{ Code = 0x3ffffe2, Bits = 26 }, + new TableEntry{ Code = 0x3ffffe3, Bits = 26 }, + new TableEntry{ Code = 0x3ffffe4, Bits = 26 }, + new TableEntry{ Code = 0x7ffffde, Bits = 27 }, + new TableEntry{ Code = 0x7ffffdf, Bits = 27 }, + new TableEntry{ Code = 0x3ffffe5, Bits = 26 }, + new TableEntry{ Code = 0xfffff1 , Bits = 24 }, + new TableEntry{ Code = 0x1ffffed, Bits = 25 }, + new TableEntry{ Code = 0x7fff2 , Bits = 19 }, + new TableEntry{ Code = 0x1fffe3 , Bits = 21 }, + new TableEntry{ Code = 0x3ffffe6, Bits = 26 }, + new TableEntry{ Code = 0x7ffffe0, Bits = 27 }, + new TableEntry{ Code = 0x7ffffe1, Bits = 27 }, + new TableEntry{ Code = 0x3ffffe7, Bits = 26 }, + new TableEntry{ Code = 0x7ffffe2, Bits = 27 }, + new TableEntry{ Code = 0xfffff2 , Bits = 24 }, + new TableEntry{ Code = 0x1fffe4 , Bits = 21 }, + new TableEntry{ Code = 0x1fffe5 , Bits = 21 }, + new TableEntry{ Code = 0x3ffffe8, Bits = 26 }, + new TableEntry{ Code = 0x3ffffe9, Bits = 26 }, + new TableEntry{ Code = 0xffffffd, Bits = 28 }, + new TableEntry{ Code = 0x7ffffe3, Bits = 27 }, + new TableEntry{ Code = 0x7ffffe4, Bits = 27 }, + new TableEntry{ Code = 0x7ffffe5, Bits = 27 }, + new TableEntry{ Code = 0xfffec , Bits = 20 }, + new TableEntry{ Code = 0xfffff3, Bits = 24 }, + new TableEntry{ Code = 0xfffed , Bits = 20 }, + new TableEntry{ Code = 0x1fffe6, Bits = 21 }, + new TableEntry{ Code = 0x3fffe9, Bits = 22 }, + new TableEntry{ Code = 0x1fffe7, Bits = 21 }, + new TableEntry{ Code = 0x1fffe8, Bits = 21 }, + new TableEntry{ Code = 0x7ffff3, Bits = 23 }, + new TableEntry{ Code = 0x3fffea, Bits = 22 }, + new TableEntry{ Code = 0x3fffeb, Bits = 22 }, + new TableEntry{ Code = 0x1ffffee, Bits = 25 }, + new TableEntry{ Code = 0x1ffffef, Bits = 25 }, + new TableEntry{ Code = 0xfffff4 , Bits = 24 }, + new TableEntry{ Code = 0xfffff5 , Bits = 24 }, + new TableEntry{ Code = 0x3ffffea, Bits = 26 }, + new TableEntry{ Code = 0x7ffff4 , Bits = 23 }, + new TableEntry{ Code = 0x3ffffeb, Bits = 26 }, + new TableEntry{ Code = 0x7ffffe6, Bits = 27 }, + new TableEntry{ Code = 0x3ffffec, Bits = 26 }, + new TableEntry{ Code = 0x3ffffed, Bits = 26 }, + new TableEntry{ Code = 0x7ffffe7, Bits = 27 }, + new TableEntry{ Code = 0x7ffffe8, Bits = 27 }, + new TableEntry{ Code = 0x7ffffe9, Bits = 27 }, + new TableEntry{ Code = 0x7ffffea, Bits = 27 }, + new TableEntry{ Code = 0x7ffffeb, Bits = 27 }, + new TableEntry{ Code = 0xffffffe, Bits = 28 }, + new TableEntry{ Code = 0x7ffffec, Bits = 27 }, + new TableEntry{ Code = 0x7ffffed, Bits = 27 }, + new TableEntry{ Code = 0x7ffffee, Bits = 27 }, + new TableEntry{ Code = 0x7ffffef, Bits = 27 }, + new TableEntry{ Code = 0x7fffff0, Bits = 27 }, + new TableEntry{ Code = 0x3ffffee, Bits = 26 }, + new TableEntry{ Code = 0x3fffffff, Bits = 30 } + }; + //static List entries = new List(); + + static TreeNode[] HuffmanTree = new TreeNode[] + { + new TreeNode { Value = 0, NextZeroIdx = 98, NextOneIdx = 1 }, + new TreeNode { Value = 0, NextZeroIdx = 151, NextOneIdx = 2 }, + new TreeNode { Value = 0, NextZeroIdx = 173, NextOneIdx = 3 }, + new TreeNode { Value = 0, NextZeroIdx = 204, NextOneIdx = 4 }, + new TreeNode { Value = 0, NextZeroIdx = 263, NextOneIdx = 5 }, + new TreeNode { Value = 0, NextZeroIdx = 113, NextOneIdx = 6 }, + new TreeNode { Value = 0, NextZeroIdx = 211, NextOneIdx = 7 }, + new TreeNode { Value = 0, NextZeroIdx = 104, NextOneIdx = 8 }, + new TreeNode { Value = 0, NextZeroIdx = 116, NextOneIdx = 9 }, + new TreeNode { Value = 0, NextZeroIdx = 108, NextOneIdx = 10 }, + new TreeNode { Value = 0, NextZeroIdx = 11, NextOneIdx = 14 }, + new TreeNode { Value = 0, NextZeroIdx = 12, NextOneIdx = 166 }, + new TreeNode { Value = 0, NextZeroIdx = 13, NextOneIdx = 111 }, + new TreeNode { Value = 0, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 220, NextOneIdx = 15 }, + new TreeNode { Value = 0, NextZeroIdx = 222, NextOneIdx = 16 }, + new TreeNode { Value = 0, NextZeroIdx = 158, NextOneIdx = 17 }, + new TreeNode { Value = 0, NextZeroIdx = 270, NextOneIdx = 18 }, + new TreeNode { Value = 0, NextZeroIdx = 216, NextOneIdx = 19 }, + new TreeNode { Value = 0, NextZeroIdx = 279, NextOneIdx = 20 }, + new TreeNode { Value = 0, NextZeroIdx = 21, NextOneIdx = 27 }, + new TreeNode { Value = 0, NextZeroIdx = 377, NextOneIdx = 22 }, + new TreeNode { Value = 0, NextZeroIdx = 414, NextOneIdx = 23 }, + new TreeNode { Value = 0, NextZeroIdx = 24, NextOneIdx = 301 }, + new TreeNode { Value = 0, NextZeroIdx = 25, NextOneIdx = 298 }, + new TreeNode { Value = 0, NextZeroIdx = 26, NextOneIdx = 295 }, + new TreeNode { Value = 1, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 314, NextOneIdx = 28 }, + new TreeNode { Value = 0, NextZeroIdx = 50, NextOneIdx = 29 }, + new TreeNode { Value = 0, NextZeroIdx = 362, NextOneIdx = 30 }, + new TreeNode { Value = 0, NextZeroIdx = 403, NextOneIdx = 31 }, + new TreeNode { Value = 0, NextZeroIdx = 440, NextOneIdx = 32 }, + new TreeNode { Value = 0, NextZeroIdx = 33, NextOneIdx = 55 }, + new TreeNode { Value = 0, NextZeroIdx = 34, NextOneIdx = 46 }, + new TreeNode { Value = 0, NextZeroIdx = 35, NextOneIdx = 39 }, + new TreeNode { Value = 0, NextZeroIdx = 510, NextOneIdx = 36 }, + new TreeNode { Value = 0, NextZeroIdx = 37, NextOneIdx = 38 }, + new TreeNode { Value = 2, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 3, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 40, NextOneIdx = 43 }, + new TreeNode { Value = 0, NextZeroIdx = 41, NextOneIdx = 42 }, + new TreeNode { Value = 4, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 5, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 44, NextOneIdx = 45 }, + new TreeNode { Value = 6, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 7, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 47, NextOneIdx = 67 }, + new TreeNode { Value = 0, NextZeroIdx = 48, NextOneIdx = 63 }, + new TreeNode { Value = 0, NextZeroIdx = 49, NextOneIdx = 62 }, + new TreeNode { Value = 8, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 396, NextOneIdx = 51 }, + new TreeNode { Value = 0, NextZeroIdx = 52, NextOneIdx = 309 }, + new TreeNode { Value = 0, NextZeroIdx = 486, NextOneIdx = 53 }, + new TreeNode { Value = 0, NextZeroIdx = 54, NextOneIdx = 307 }, + new TreeNode { Value = 9, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 74, NextOneIdx = 56 }, + new TreeNode { Value = 0, NextZeroIdx = 91, NextOneIdx = 57 }, + new TreeNode { Value = 0, NextZeroIdx = 274, NextOneIdx = 58 }, + new TreeNode { Value = 0, NextZeroIdx = 502, NextOneIdx = 59 }, + new TreeNode { Value = 0, NextZeroIdx = 60, NextOneIdx = 81 }, + new TreeNode { Value = 0, NextZeroIdx = 61, NextOneIdx = 65 }, + new TreeNode { Value = 10, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 11, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 64, NextOneIdx = 66 }, + new TreeNode { Value = 12, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 13, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 14, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 68, NextOneIdx = 71 }, + new TreeNode { Value = 0, NextZeroIdx = 69, NextOneIdx = 70 }, + new TreeNode { Value = 15, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 16, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 72, NextOneIdx = 73 }, + new TreeNode { Value = 17, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 18, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 75, NextOneIdx = 84 }, + new TreeNode { Value = 0, NextZeroIdx = 76, NextOneIdx = 79 }, + new TreeNode { Value = 0, NextZeroIdx = 77, NextOneIdx = 78 }, + new TreeNode { Value = 19, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 20, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 80, NextOneIdx = 83 }, + new TreeNode { Value = 21, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 82, NextOneIdx = 512 }, + new TreeNode { Value = 22, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 23, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 85, NextOneIdx = 88 }, + new TreeNode { Value = 0, NextZeroIdx = 86, NextOneIdx = 87 }, + new TreeNode { Value = 24, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 25, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 89, NextOneIdx = 90 }, + new TreeNode { Value = 26, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 27, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 92, NextOneIdx = 95 }, + new TreeNode { Value = 0, NextZeroIdx = 93, NextOneIdx = 94 }, + new TreeNode { Value = 28, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 29, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 96, NextOneIdx = 97 }, + new TreeNode { Value = 30, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 31, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 133, NextOneIdx = 99 }, + new TreeNode { Value = 0, NextZeroIdx = 100, NextOneIdx = 129 }, + new TreeNode { Value = 0, NextZeroIdx = 258, NextOneIdx = 101 }, + new TreeNode { Value = 0, NextZeroIdx = 102, NextOneIdx = 126 }, + new TreeNode { Value = 0, NextZeroIdx = 103, NextOneIdx = 112 }, + new TreeNode { Value = 32, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 105, NextOneIdx = 119 }, + new TreeNode { Value = 0, NextZeroIdx = 106, NextOneIdx = 107 }, + new TreeNode { Value = 33, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 34, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 271, NextOneIdx = 109 }, + new TreeNode { Value = 0, NextZeroIdx = 110, NextOneIdx = 164 }, + new TreeNode { Value = 35, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 36, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 37, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 114, NextOneIdx = 124 }, + new TreeNode { Value = 0, NextZeroIdx = 115, NextOneIdx = 122 }, + new TreeNode { Value = 38, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 165, NextOneIdx = 117 }, + new TreeNode { Value = 0, NextZeroIdx = 118, NextOneIdx = 123 }, + new TreeNode { Value = 39, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 120, NextOneIdx = 121 }, + new TreeNode { Value = 40, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 41, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 42, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 43, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 125, NextOneIdx = 157 }, + new TreeNode { Value = 44, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 127, NextOneIdx = 128 }, + new TreeNode { Value = 45, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 46, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 130, NextOneIdx = 144 }, + new TreeNode { Value = 0, NextZeroIdx = 131, NextOneIdx = 141 }, + new TreeNode { Value = 0, NextZeroIdx = 132, NextOneIdx = 140 }, + new TreeNode { Value = 47, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 134, NextOneIdx = 229 }, + new TreeNode { Value = 0, NextZeroIdx = 135, NextOneIdx = 138 }, + new TreeNode { Value = 0, NextZeroIdx = 136, NextOneIdx = 137 }, + new TreeNode { Value = 48, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 49, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 139, NextOneIdx = 227 }, + new TreeNode { Value = 50, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 51, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 142, NextOneIdx = 143 }, + new TreeNode { Value = 52, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 53, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 145, NextOneIdx = 148 }, + new TreeNode { Value = 0, NextZeroIdx = 146, NextOneIdx = 147 }, + new TreeNode { Value = 54, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 55, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 149, NextOneIdx = 150 }, + new TreeNode { Value = 56, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 57, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 160, NextOneIdx = 152 }, + new TreeNode { Value = 0, NextZeroIdx = 246, NextOneIdx = 153 }, + new TreeNode { Value = 0, NextZeroIdx = 256, NextOneIdx = 154 }, + new TreeNode { Value = 0, NextZeroIdx = 155, NextOneIdx = 170 }, + new TreeNode { Value = 0, NextZeroIdx = 156, NextOneIdx = 169 }, + new TreeNode { Value = 58, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 59, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 159, NextOneIdx = 226 }, + new TreeNode { Value = 60, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 161, NextOneIdx = 232 }, + new TreeNode { Value = 0, NextZeroIdx = 162, NextOneIdx = 224 }, + new TreeNode { Value = 0, NextZeroIdx = 163, NextOneIdx = 168 }, + new TreeNode { Value = 61, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 62, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 63, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 167, NextOneIdx = 215 }, + new TreeNode { Value = 64, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 65, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 66, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 171, NextOneIdx = 172 }, + new TreeNode { Value = 67, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 68, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 174, NextOneIdx = 189 }, + new TreeNode { Value = 0, NextZeroIdx = 175, NextOneIdx = 182 }, + new TreeNode { Value = 0, NextZeroIdx = 176, NextOneIdx = 179 }, + new TreeNode { Value = 0, NextZeroIdx = 177, NextOneIdx = 178 }, + new TreeNode { Value = 69, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 70, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 180, NextOneIdx = 181 }, + new TreeNode { Value = 71, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 72, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 183, NextOneIdx = 186 }, + new TreeNode { Value = 0, NextZeroIdx = 184, NextOneIdx = 185 }, + new TreeNode { Value = 73, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 74, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 187, NextOneIdx = 188 }, + new TreeNode { Value = 75, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 76, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 190, NextOneIdx = 197 }, + new TreeNode { Value = 0, NextZeroIdx = 191, NextOneIdx = 194 }, + new TreeNode { Value = 0, NextZeroIdx = 192, NextOneIdx = 193 }, + new TreeNode { Value = 77, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 78, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 195, NextOneIdx = 196 }, + new TreeNode { Value = 79, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 80, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 198, NextOneIdx = 201 }, + new TreeNode { Value = 0, NextZeroIdx = 199, NextOneIdx = 200 }, + new TreeNode { Value = 81, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 82, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 202, NextOneIdx = 203 }, + new TreeNode { Value = 83, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 84, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 205, NextOneIdx = 242 }, + new TreeNode { Value = 0, NextZeroIdx = 206, NextOneIdx = 209 }, + new TreeNode { Value = 0, NextZeroIdx = 207, NextOneIdx = 208 }, + new TreeNode { Value = 85, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 86, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 210, NextOneIdx = 213 }, + new TreeNode { Value = 87, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 212, NextOneIdx = 214 }, + new TreeNode { Value = 88, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 89, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 90, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 91, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 217, NextOneIdx = 286 }, + new TreeNode { Value = 0, NextZeroIdx = 218, NextOneIdx = 276 }, + new TreeNode { Value = 0, NextZeroIdx = 219, NextOneIdx = 410 }, + new TreeNode { Value = 92, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 221, NextOneIdx = 273 }, + new TreeNode { Value = 93, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 223, NextOneIdx = 272 }, + new TreeNode { Value = 94, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 225, NextOneIdx = 228 }, + new TreeNode { Value = 95, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 96, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 97, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 98, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 230, NextOneIdx = 240 }, + new TreeNode { Value = 0, NextZeroIdx = 231, NextOneIdx = 235 }, + new TreeNode { Value = 99, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 233, NextOneIdx = 237 }, + new TreeNode { Value = 0, NextZeroIdx = 234, NextOneIdx = 236 }, + new TreeNode { Value = 100, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 101, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 102, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 238, NextOneIdx = 239 }, + new TreeNode { Value = 103, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 104, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 241, NextOneIdx = 252 }, + new TreeNode { Value = 105, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 243, NextOneIdx = 254 }, + new TreeNode { Value = 0, NextZeroIdx = 244, NextOneIdx = 245 }, + new TreeNode { Value = 106, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 107, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 247, NextOneIdx = 250 }, + new TreeNode { Value = 0, NextZeroIdx = 248, NextOneIdx = 249 }, + new TreeNode { Value = 108, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 109, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 251, NextOneIdx = 253 }, + new TreeNode { Value = 110, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 111, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 112, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 255, NextOneIdx = 262 }, + new TreeNode { Value = 113, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 257, NextOneIdx = 261 }, + new TreeNode { Value = 114, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 259, NextOneIdx = 260 }, + new TreeNode { Value = 115, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 116, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 117, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 118, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 264, NextOneIdx = 267 }, + new TreeNode { Value = 0, NextZeroIdx = 265, NextOneIdx = 266 }, + new TreeNode { Value = 119, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 120, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 268, NextOneIdx = 269 }, + new TreeNode { Value = 121, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 122, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 123, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 124, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 125, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 126, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 275, NextOneIdx = 459 }, + new TreeNode { Value = 127, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 436, NextOneIdx = 277 }, + new TreeNode { Value = 0, NextZeroIdx = 278, NextOneIdx = 285 }, + new TreeNode { Value = 128, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 372, NextOneIdx = 280 }, + new TreeNode { Value = 0, NextZeroIdx = 281, NextOneIdx = 332 }, + new TreeNode { Value = 0, NextZeroIdx = 282, NextOneIdx = 291 }, + new TreeNode { Value = 0, NextZeroIdx = 473, NextOneIdx = 283 }, + new TreeNode { Value = 0, NextZeroIdx = 284, NextOneIdx = 290 }, + new TreeNode { Value = 129, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 130, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 287, NextOneIdx = 328 }, + new TreeNode { Value = 0, NextZeroIdx = 288, NextOneIdx = 388 }, + new TreeNode { Value = 0, NextZeroIdx = 289, NextOneIdx = 345 }, + new TreeNode { Value = 131, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 132, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 292, NextOneIdx = 296 }, + new TreeNode { Value = 0, NextZeroIdx = 293, NextOneIdx = 294 }, + new TreeNode { Value = 133, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 134, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 135, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 297, NextOneIdx = 313 }, + new TreeNode { Value = 136, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 299, NextOneIdx = 300 }, + new TreeNode { Value = 137, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 138, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 302, NextOneIdx = 305 }, + new TreeNode { Value = 0, NextZeroIdx = 303, NextOneIdx = 304 }, + new TreeNode { Value = 139, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 140, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 306, NextOneIdx = 308 }, + new TreeNode { Value = 141, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 142, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 143, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 310, NextOneIdx = 319 }, + new TreeNode { Value = 0, NextZeroIdx = 311, NextOneIdx = 312 }, + new TreeNode { Value = 144, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 145, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 146, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 315, NextOneIdx = 350 }, + new TreeNode { Value = 0, NextZeroIdx = 316, NextOneIdx = 325 }, + new TreeNode { Value = 0, NextZeroIdx = 317, NextOneIdx = 322 }, + new TreeNode { Value = 0, NextZeroIdx = 318, NextOneIdx = 321 }, + new TreeNode { Value = 147, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 320, NextOneIdx = 341 }, + new TreeNode { Value = 148, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 149, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 323, NextOneIdx = 324 }, + new TreeNode { Value = 150, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 151, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 326, NextOneIdx = 338 }, + new TreeNode { Value = 0, NextZeroIdx = 327, NextOneIdx = 336 }, + new TreeNode { Value = 152, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 465, NextOneIdx = 329 }, + new TreeNode { Value = 0, NextZeroIdx = 330, NextOneIdx = 355 }, + new TreeNode { Value = 0, NextZeroIdx = 331, NextOneIdx = 344 }, + new TreeNode { Value = 153, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 333, NextOneIdx = 347 }, + new TreeNode { Value = 0, NextZeroIdx = 334, NextOneIdx = 342 }, + new TreeNode { Value = 0, NextZeroIdx = 335, NextOneIdx = 337 }, + new TreeNode { Value = 154, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 155, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 156, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 339, NextOneIdx = 340 }, + new TreeNode { Value = 157, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 158, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 159, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 343, NextOneIdx = 346 }, + new TreeNode { Value = 160, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 161, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 162, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 163, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 348, NextOneIdx = 360 }, + new TreeNode { Value = 0, NextZeroIdx = 349, NextOneIdx = 359 }, + new TreeNode { Value = 164, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 351, NextOneIdx = 369 }, + new TreeNode { Value = 0, NextZeroIdx = 352, NextOneIdx = 357 }, + new TreeNode { Value = 0, NextZeroIdx = 353, NextOneIdx = 354 }, + new TreeNode { Value = 165, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 166, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 356, NextOneIdx = 366 }, + new TreeNode { Value = 167, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 358, NextOneIdx = 368 }, + new TreeNode { Value = 168, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 169, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 361, NextOneIdx = 367 }, + new TreeNode { Value = 170, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 363, NextOneIdx = 417 }, + new TreeNode { Value = 0, NextZeroIdx = 364, NextOneIdx = 449 }, + new TreeNode { Value = 0, NextZeroIdx = 365, NextOneIdx = 434 }, + new TreeNode { Value = 171, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 172, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 173, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 174, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 370, NextOneIdx = 385 }, + new TreeNode { Value = 0, NextZeroIdx = 371, NextOneIdx = 383 }, + new TreeNode { Value = 175, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 373, NextOneIdx = 451 }, + new TreeNode { Value = 0, NextZeroIdx = 374, NextOneIdx = 381 }, + new TreeNode { Value = 0, NextZeroIdx = 375, NextOneIdx = 376 }, + new TreeNode { Value = 176, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 177, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 378, NextOneIdx = 393 }, + new TreeNode { Value = 0, NextZeroIdx = 379, NextOneIdx = 390 }, + new TreeNode { Value = 0, NextZeroIdx = 380, NextOneIdx = 384 }, + new TreeNode { Value = 178, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 382, NextOneIdx = 437 }, + new TreeNode { Value = 179, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 180, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 181, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 386, NextOneIdx = 387 }, + new TreeNode { Value = 182, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 183, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 389, NextOneIdx = 409 }, + new TreeNode { Value = 184, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 391, NextOneIdx = 392 }, + new TreeNode { Value = 185, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 186, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 394, NextOneIdx = 400 }, + new TreeNode { Value = 0, NextZeroIdx = 395, NextOneIdx = 399 }, + new TreeNode { Value = 187, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 397, NextOneIdx = 412 }, + new TreeNode { Value = 0, NextZeroIdx = 398, NextOneIdx = 402 }, + new TreeNode { Value = 188, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 189, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 401, NextOneIdx = 411 }, + new TreeNode { Value = 190, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 191, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 404, NextOneIdx = 427 }, + new TreeNode { Value = 0, NextZeroIdx = 405, NextOneIdx = 424 }, + new TreeNode { Value = 0, NextZeroIdx = 406, NextOneIdx = 421 }, + new TreeNode { Value = 0, NextZeroIdx = 407, NextOneIdx = 408 }, + new TreeNode { Value = 192, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 193, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 194, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 195, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 196, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 413, NextOneIdx = 474 }, + new TreeNode { Value = 197, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 415, NextOneIdx = 475 }, + new TreeNode { Value = 0, NextZeroIdx = 416, NextOneIdx = 471 }, + new TreeNode { Value = 198, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 481, NextOneIdx = 418 }, + new TreeNode { Value = 0, NextZeroIdx = 419, NextOneIdx = 478 }, + new TreeNode { Value = 0, NextZeroIdx = 420, NextOneIdx = 435 }, + new TreeNode { Value = 199, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 422, NextOneIdx = 423 }, + new TreeNode { Value = 200, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 201, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 425, NextOneIdx = 438 }, + new TreeNode { Value = 0, NextZeroIdx = 426, NextOneIdx = 433 }, + new TreeNode { Value = 202, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 455, NextOneIdx = 428 }, + new TreeNode { Value = 0, NextZeroIdx = 490, NextOneIdx = 429 }, + new TreeNode { Value = 0, NextZeroIdx = 511, NextOneIdx = 430 }, + new TreeNode { Value = 0, NextZeroIdx = 431, NextOneIdx = 432 }, + new TreeNode { Value = 203, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 204, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 205, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 206, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 207, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 208, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 209, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 439, NextOneIdx = 446 }, + new TreeNode { Value = 210, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 441, NextOneIdx = 494 }, + new TreeNode { Value = 0, NextZeroIdx = 442, NextOneIdx = 461 }, + new TreeNode { Value = 0, NextZeroIdx = 443, NextOneIdx = 447 }, + new TreeNode { Value = 0, NextZeroIdx = 444, NextOneIdx = 445 }, + new TreeNode { Value = 211, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 212, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 213, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 448, NextOneIdx = 460 }, + new TreeNode { Value = 214, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 450, NextOneIdx = 467 }, + new TreeNode { Value = 215, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 452, NextOneIdx = 469 }, + new TreeNode { Value = 0, NextZeroIdx = 453, NextOneIdx = 454 }, + new TreeNode { Value = 216, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 217, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 456, NextOneIdx = 484 }, + new TreeNode { Value = 0, NextZeroIdx = 457, NextOneIdx = 458 }, + new TreeNode { Value = 218, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 219, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 220, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 221, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 462, NextOneIdx = 488 }, + new TreeNode { Value = 0, NextZeroIdx = 463, NextOneIdx = 464 }, + new TreeNode { Value = 222, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 223, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 466, NextOneIdx = 468 }, + new TreeNode { Value = 224, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 225, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 226, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 470, NextOneIdx = 472 }, + new TreeNode { Value = 227, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 228, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 229, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 230, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 231, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 476, NextOneIdx = 477 }, + new TreeNode { Value = 232, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 233, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 479, NextOneIdx = 480 }, + new TreeNode { Value = 234, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 235, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 482, NextOneIdx = 483 }, + new TreeNode { Value = 236, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 237, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 485, NextOneIdx = 487 }, + new TreeNode { Value = 238, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 239, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 240, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 489, NextOneIdx = 493 }, + new TreeNode { Value = 241, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 491, NextOneIdx = 492 }, + new TreeNode { Value = 242, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 243, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 244, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 495, NextOneIdx = 503 }, + new TreeNode { Value = 0, NextZeroIdx = 496, NextOneIdx = 499 }, + new TreeNode { Value = 0, NextZeroIdx = 497, NextOneIdx = 498 }, + new TreeNode { Value = 245, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 246, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 500, NextOneIdx = 501 }, + new TreeNode { Value = 247, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 248, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 249, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 504, NextOneIdx = 507 }, + new TreeNode { Value = 0, NextZeroIdx = 505, NextOneIdx = 506 }, + new TreeNode { Value = 250, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 251, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 0, NextZeroIdx = 508, NextOneIdx = 509 }, + new TreeNode { Value = 252, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 253, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 254, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 255, NextZeroIdx = 0, NextOneIdx = 0 }, + new TreeNode { Value = 256, NextZeroIdx = 0, NextOneIdx = 0 } + }; + + //static HuffmanEncoder() + //{ + // BuildTree(); + //} + // + //private static void BuildTree() + //{ + // // Add root + // entries.Add(new TreeNode()); + // + // for (int i = 0; i < StaticTable.Length; ++i) + // { + // var tableEntry = StaticTable[i]; + // var currentNode = entries[0]; + // int currentNodeIdx = 0; + // + // for (byte bitIdx = 1; bitIdx <= tableEntry.Bits; bitIdx++) + // { + // byte bit = tableEntry.GetBitAtIdx(bitIdx); + // + // switch(bit) + // { + // case 0: + // if (currentNode.NextZeroIdx == 0) + // { + // currentNode.NextZeroIdx = (UInt16)entries.Count; + // entries[currentNodeIdx] = currentNode; + // entries.Add(new TreeNode()); + // } + // + // currentNodeIdx = currentNode.NextZeroIdx; + // currentNode = entries[currentNodeIdx]; + // break; + // + // case 1: + // if (currentNode.NextOneIdx == 0) + // { + // currentNode.NextOneIdx = (UInt16)entries.Count; + // entries[currentNodeIdx] = currentNode; + // entries.Add(new TreeNode()); + // } + // + // currentNodeIdx = currentNode.NextOneIdx; + // currentNode = entries[currentNodeIdx]; + // break; + // + // default: + // HTTPManager.Logger.Information("HuffmanEncoder", "BuildTree - GetBitAtIdx returned with an unsupported value: " + bit); + // break; + // } + // } + // + // entries[currentNodeIdx] = new TreeNode { Value = (UInt16)i }; + // + // //HTTPManager.Logger.Information("HuffmanEncoder", string.Format("BuildTree - {0} - Entry({1}) added to idx: {2}", i, entries[currentNodeIdx], currentNodeIdx)); + // } + // + // //HTTPManager.Logger.Information("HuffmanEncoder", "BuildTree - entries: " + entries.Count); + // //for (int i = 0; i < entries.Count; ++i) + // // HTTPManager.Logger.Information("HuffmanEncoder", string.Format("{0} - Entry : {1}", i, entries[i])); + // System.Text.StringBuilder sb = new System.Text.StringBuilder(); + // for (int i = 0; i < entries.Count; ++i) + // { + // sb.AppendFormat("new TreeNode {{ Value = {0}, NextZeroIdx = {1}, NextOneIdx = {2} }},\n", entries[i].Value, entries[i].NextZeroIdx, entries[i].NextOneIdx); + // } + // UnityEngine.Debug.Log(sb.ToString()); + //} + + public static TreeNode GetRoot() + { + return HuffmanTree[0]; + } + + public static TreeNode GetNext(TreeNode current, byte bit) + { + switch(bit) + { + case 0: + return HuffmanTree[current.NextZeroIdx]; + case 1: + return HuffmanTree[current.NextOneIdx]; + } + + throw new Exception("HuffmanEncoder - GetNext - unsupported bit: " + bit); + } + + public static TableEntry GetEntryForCodePoint(UInt16 codePoint) + { + return StaticTable[codePoint]; + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HuffmanEncoder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HuffmanEncoder.cs.meta new file mode 100644 index 000000000..3eed4fbf8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTP2/HuffmanEncoder.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2b07c0aa55ea00940b8c8bae8d5d9c34 +timeCreated: 1571210040 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTPConnection.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTPConnection.cs new file mode 100644 index 000000000..52535b07f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTPConnection.cs @@ -0,0 +1,261 @@ +#if !UNITY_WEBGL || UNITY_EDITOR + +using System; + +#if !BESTHTTP_DISABLE_ALTERNATE_SSL +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls; +#endif + +using BestHTTP.Core; +using BestHTTP.Timings; + +namespace BestHTTP.Connections +{ + /// + /// Represents and manages a connection to a server. + /// + public sealed class HTTPConnection : ConnectionBase + { + public TCPConnector connector; + public IHTTPRequestHandler requestHandler; + + public override TimeSpan KeepAliveTime { + get { + if (this.requestHandler != null && this.requestHandler.KeepAlive != null) + { + if (this.requestHandler.KeepAlive.MaxRequests > 0) + { + if (base.KeepAliveTime < this.requestHandler.KeepAlive.TimeOut) + return base.KeepAliveTime; + else + return this.requestHandler.KeepAlive.TimeOut; + } + else + return TimeSpan.Zero; + } + + return base.KeepAliveTime; + } + + protected set + { + base.KeepAliveTime = value; + } + } + + public override bool CanProcessMultiple + { + get + { + if (this.requestHandler != null) + return this.requestHandler.CanProcessMultiple; + return base.CanProcessMultiple; + } + } + + internal HTTPConnection(string serverAddress) + :base(serverAddress) + {} + + public override bool TestConnection() + { +#if !NETFX_CORE + try + { +#if !BESTHTTP_DISABLE_ALTERNATE_SSL + TlsStream stream = (this.connector?.Stream as TlsStream); + if (stream != null && stream.Protocol != null) + { + bool locked = stream.Protocol.TryEnterApplicationDataLock(0); + try + { + if (locked && this.connector.Client.Available > 0) + { + try + { + var available = stream.Protocol.TestApplicationData(); + return !stream.Protocol.IsClosed; + } + catch + { + return false; + } + } + } + finally + { + if (locked) + stream.Protocol.ExitApplicationDataLock(); + } + } +#endif + + bool connected = this.connector.Client.Connected; + + return connected; + } + catch + { + return false; + } +#else + return base.TestConnection(); +#endif + } + + internal override void Process(HTTPRequest request) + { + this.LastProcessedUri = request.CurrentUri; + + if (this.requestHandler == null || !this.requestHandler.HasCustomRequestProcessor) + base.Process(request); + else + { + this.requestHandler.Process(request); + LastProcessTime = DateTime.Now; + } + } + + protected override void ThreadFunc() + { + if (this.CurrentRequest.IsRedirected) + this.CurrentRequest.Timing.Add(TimingEventNames.Queued_For_Redirection); + else + this.CurrentRequest.Timing.Add(TimingEventNames.Queued); + + if (this.connector != null && !this.connector.IsConnected) + { + // this will send the request back to the queue + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(CurrentRequest, RequestEvents.Resend)); + ConnectionEventHelper.EnqueueConnectionEvent(new ConnectionEventInfo(this, HTTPConnectionStates.Closed)); + return; + } + + if (this.connector == null) + { + this.connector = new Connections.TCPConnector(); + + try + { + this.connector.Connect(this.CurrentRequest); + } + catch(Exception ex) + { + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Exception("HTTPConnection", "Connector.Connect", ex, this.Context, this.CurrentRequest.Context); + + + if (ex is TimeoutException) + this.CurrentRequest.State = HTTPRequestStates.ConnectionTimedOut; + else if (!this.CurrentRequest.IsTimedOut) // Do nothing here if Abort() got called on the request, its State is already set. + { + this.CurrentRequest.Exception = ex; + this.CurrentRequest.State = HTTPRequestStates.Error; + } + + ConnectionEventHelper.EnqueueConnectionEvent(new ConnectionEventInfo(this, HTTPConnectionStates.Closed)); + + return; + } + +#if !NETFX_CORE + // data sending is buffered for all protocols, so when we put data into the socket we want to send them asap + this.connector.Client.NoDelay = true; +#endif + StartTime = DateTime.UtcNow; + + HTTPManager.Logger.Information("HTTPConnection", "Negotiated protocol through ALPN: '" + this.connector.NegotiatedProtocol + "'", this.Context, this.CurrentRequest.Context); + + switch (this.connector.NegotiatedProtocol) + { + case HTTPProtocolFactory.W3C_HTTP1: + this.requestHandler = new Connections.HTTP1Handler(this); + ConnectionEventHelper.EnqueueConnectionEvent(new ConnectionEventInfo(this, HostProtocolSupport.HTTP1)); + break; + +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_ALTERNATE_SSL && !BESTHTTP_DISABLE_HTTP2 + case HTTPProtocolFactory.W3C_HTTP2: + this.requestHandler = new Connections.HTTP2.HTTP2Handler(this); + this.CurrentRequest = null; + ConnectionEventHelper.EnqueueConnectionEvent(new ConnectionEventInfo(this, HostProtocolSupport.HTTP2)); + break; +#endif + + default: + HTTPManager.Logger.Error("HTTPConnection", "Unknown negotiated protocol: " + this.connector.NegotiatedProtocol, this.Context, this.CurrentRequest.Context); + + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(CurrentRequest, RequestEvents.Resend)); + ConnectionEventHelper.EnqueueConnectionEvent(new ConnectionEventInfo(this, HTTPConnectionStates.Closed)); + return; + } + } + + this.requestHandler.Context.Add("Connection", this.GetHashCode()); + this.Context.Add("RequestHandler", this.requestHandler.GetHashCode()); + + this.requestHandler.RunHandler(); + LastProcessTime = DateTime.Now; + } + + public override void Shutdown(ShutdownTypes type) + { + base.Shutdown(type); + + if (this.requestHandler != null) + this.requestHandler.Shutdown(type); + + switch(this.ShutdownType) + { + case ShutdownTypes.Immediate: + this.connector.Dispose(); + break; + } + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + LastProcessedUri = null; + if (this.State != HTTPConnectionStates.WaitForProtocolShutdown) + { + if (this.connector != null) + { + try + { + this.connector.Close(); + } + catch + { } + this.connector = null; + } + + if (this.requestHandler != null) + { + try + { + this.requestHandler.Dispose(); + } + catch + { } + this.requestHandler = null; + } + } + else + { + // We have to connector to do not close its stream at any cost while disposing. + // All references to this connection will be removed, so this and the connector may be finalized after some time. + // But, finalizing (and disposing) the connector while the protocol is still active would be fatal, + // so we have to make sure that it will not happen. This also means that the protocol has the responsibility (as always had) + // to close the stream and TCP connection properly. + if (this.connector != null) + this.connector.LeaveOpen = true; + } + } + + base.Dispose(disposing); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTPConnection.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTPConnection.cs.meta new file mode 100644 index 000000000..997691daa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTPConnection.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c6e10f65ea45b8e4682ebe6a0c885e06 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTPConnectionStates.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTPConnectionStates.cs new file mode 100644 index 000000000..1e9fb36fb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTPConnectionStates.cs @@ -0,0 +1,44 @@ +namespace BestHTTP.Connections +{ + /// + /// Possible states of a Http Connection. + /// The ideal lifecycle of a connection that has KeepAlive is the following: Initial => [Processing => WaitForRecycle => Free] => Closed. + /// + public enum HTTPConnectionStates + { + /// + /// This Connection instance is just created. + /// + Initial, + + /// + /// This Connection is processing a request + /// + Processing, + + /// + /// Wait for the upgraded protocol to shut down. + /// + WaitForProtocolShutdown, + + /// + /// The Connection is finished processing the request, it's waiting now to deliver it's result. + /// + Recycle, + + /// + /// The request result's delivered, it's now up to processing again. + /// + Free, + + /// + /// If it's not a KeepAlive connection, or something happened, then we close this connection and remove from the pool. + /// + Closed, + + /// + /// Same as the Closed state, but processing this request requires resending the last processed request too. + /// + ClosedResendRequest + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTPConnectionStates.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTPConnectionStates.cs.meta new file mode 100644 index 000000000..3ead1f3b1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTPConnectionStates.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ae2c4bf49da6b1b4097d46250f2ff3bf +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTPProtocolFactory.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTPProtocolFactory.cs new file mode 100644 index 000000000..b244a5dc4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTPProtocolFactory.cs @@ -0,0 +1,78 @@ +using System; +using System.IO; + +namespace BestHTTP.Connections +{ + public enum SupportedProtocols + { + Unknown, + HTTP, + +#if !BESTHTTP_DISABLE_WEBSOCKET + WebSocket, +#endif + +#if !BESTHTTP_DISABLE_SERVERSENT_EVENTS + ServerSentEvents +#endif + } + + public static class HTTPProtocolFactory + { + public const string W3C_HTTP1 = "http/1.1"; +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_ALTERNATE_SSL && !BESTHTTP_DISABLE_HTTP2 + public const string W3C_HTTP2 = "h2"; +#endif + + public static HTTPResponse Get(SupportedProtocols protocol, HTTPRequest request, Stream stream, bool isStreamed, bool isFromCache) + { + switch (protocol) + { +#if !BESTHTTP_DISABLE_WEBSOCKET && (!UNITY_WEBGL || UNITY_EDITOR) + case SupportedProtocols.WebSocket: return new WebSocket.WebSocketResponse(request, stream, isStreamed, isFromCache); +#endif + default: return new HTTPResponse(request, stream, isStreamed, isFromCache); + } + } + + public static SupportedProtocols GetProtocolFromUri(Uri uri) + { + if (uri == null || uri.Scheme == null) + throw new Exception("Malformed URI in GetProtocolFromUri"); + + string scheme = uri.Scheme.ToLowerInvariant(); + switch (scheme) + { +#if !BESTHTTP_DISABLE_WEBSOCKET + case "ws": + case "wss": + return SupportedProtocols.WebSocket; +#endif + + default: + return SupportedProtocols.HTTP; + } + } + + public static bool IsSecureProtocol(Uri uri) + { + if (uri == null || uri.Scheme == null) + throw new Exception("Malformed URI in IsSecureProtocol"); + + string scheme = uri.Scheme.ToLowerInvariant(); + switch (scheme) + { + // http + case "https": + +#if !BESTHTTP_DISABLE_WEBSOCKET + // WebSocket + case "wss": +#endif + return true; + } + + return false; + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTPProtocolFactory.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTPProtocolFactory.cs.meta new file mode 100644 index 000000000..96dfe0b35 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/HTTPProtocolFactory.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 42fc2aaed5d783a48b2d61c1d7db8f23 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TCPConnector.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TCPConnector.cs new file mode 100644 index 000000000..0718a4b13 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TCPConnector.cs @@ -0,0 +1,376 @@ +#if !UNITY_WEBGL || UNITY_EDITOR +using System; +using System.Collections.Generic; +using System.IO; + +#if !NETFX_CORE || UNITY_EDITOR +using System.Net.Security; +#endif + +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls; +using BestHTTP.Connections.TLS; +using System.Threading; +#endif + +#if NETFX_CORE + using System.Threading.Tasks; + using Windows.Networking.Sockets; + + using TcpClient = BestHTTP.PlatformSupport.TcpClient.WinRT.TcpClient; + + //Disable CD4014: Because this call is not awaited, execution of the current method continues before the call is completed. Consider applying the 'await' operator to the result of the call. + #pragma warning disable 4014 +#else + using TcpClient = BestHTTP.PlatformSupport.TcpClient.General.TcpClient; + using System.Security.Cryptography.X509Certificates; +#endif + +using BestHTTP.Timings; + +namespace BestHTTP.Connections +{ + public sealed class TCPConnector : IDisposable + { + public bool IsConnected { get { return this.Client != null && this.Client.Connected; } } + + public string NegotiatedProtocol { get; private set; } + + public TcpClient Client { get; private set; } + + public Stream TopmostStream { get; private set; } + + public Stream Stream { get; private set; } + + public bool LeaveOpen { get; set; } + + public void Connect(HTTPRequest request) + { + string negotiatedProtocol = HTTPProtocolFactory.W3C_HTTP1; + + Uri uri = +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + request.HasProxy ? request.Proxy.Address : +#endif + request.CurrentUri; + + #region TCP Connection + + if (Client == null) + Client = new TcpClient(); + + if (!Client.Connected) + { + Client.ConnectTimeout = request.ConnectTimeout; + +#if NETFX_CORE + Client.UseHTTPSProtocol = +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + !Request.UseAlternateSSL && +#endif + HTTPProtocolFactory.IsSecureProtocol(uri); +#endif + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("TCPConnector", string.Format("'{0}' - Connecting to {1}:{2}", request.CurrentUri.ToString(), uri.Host, uri.Port.ToString()), request.Context); + +#if !NETFX_CORE && (!UNITY_WEBGL || UNITY_EDITOR) + bool changed = false; + int? sendBufferSize = null, receiveBufferSize = null; + + if (HTTPManager.SendBufferSize.HasValue) + { + sendBufferSize = Client.SendBufferSize; + Client.SendBufferSize = HTTPManager.SendBufferSize.Value; + changed = true; + } + + if (HTTPManager.ReceiveBufferSize.HasValue) + { + receiveBufferSize = Client.ReceiveBufferSize; + Client.ReceiveBufferSize = HTTPManager.ReceiveBufferSize.Value; + changed = true; + } + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + { + if (changed) + HTTPManager.Logger.Verbose("TCPConnector", string.Format("'{0}' - Buffer sizes changed - Send from: {1} to: {2}, Receive from: {3} to: {4}, Blocking: {5}", + request.CurrentUri.ToString(), + sendBufferSize, + Client.SendBufferSize, + receiveBufferSize, + Client.ReceiveBufferSize, + Client.Client.Blocking), + request.Context); + else + HTTPManager.Logger.Verbose("TCPConnector", string.Format("'{0}' - Buffer sizes - Send: {1} Receive: {2} Blocking: {3}", request.CurrentUri.ToString(), Client.SendBufferSize, Client.ReceiveBufferSize, Client.Client.Blocking), request.Context); + } +#endif + +#if NETFX_CORE && !UNITY_EDITOR && !ENABLE_IL2CPP + try + { + Client.Connect(uri.Host, uri.Port); + } + finally + { + request.Timing.Add(TimingEventNames.TCP_Connection); + } +#else + System.Net.IPAddress[] addresses = null; + try + { + if (Client.ConnectTimeout > TimeSpan.Zero) + { + // https://forum.unity3d.com/threads/best-http-released.200006/page-37#post-3150972 + using (System.Threading.ManualResetEvent mre = new System.Threading.ManualResetEvent(false)) + { + IAsyncResult result = System.Net.Dns.BeginGetHostAddresses(uri.Host, (res) => { try { mre.Set(); } catch { } }, null); + bool success = mre.WaitOne(Client.ConnectTimeout); + if (success) + { + addresses = System.Net.Dns.EndGetHostAddresses(result); + } + else + { + throw new TimeoutException("DNS resolve timed out!"); + } + } + } + else + { + addresses = System.Net.Dns.GetHostAddresses(uri.Host); + } + } + finally + { + request.Timing.Add(TimingEventNames.DNS_Lookup); + } + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("TCPConnector", string.Format("'{0}' - DNS Query returned with addresses: {1}", request.CurrentUri.ToString(), addresses != null ? addresses.Length : -1), request.Context); + + if (request.IsCancellationRequested) + throw new Exception("IsCancellationRequested"); + + try + { + Client.Connect(addresses, uri.Port, request); + } + finally + { + request.Timing.Add(TimingEventNames.TCP_Connection); + } + + if (request.IsCancellationRequested) + throw new Exception("IsCancellationRequested"); +#endif + + if (HTTPManager.Logger.Level <= Logger.Loglevels.Information) + HTTPManager.Logger.Information("TCPConnector", "Connected to " + uri.Host + ":" + uri.Port.ToString(), request.Context); + } + else if (HTTPManager.Logger.Level <= Logger.Loglevels.Information) + HTTPManager.Logger.Information("TCPConnector", "Already connected to " + uri.Host + ":" + uri.Port.ToString(), request.Context); + +#endregion + + if (Stream == null) + { + bool isSecure = HTTPProtocolFactory.IsSecureProtocol(request.CurrentUri); + + // set the stream to Client.GetStream() so the proxy, if there's any can use it directly. + this.Stream = this.TopmostStream = Client.GetStream(); + + /*if (Stream.CanTimeout) + Stream.ReadTimeout = Stream.WriteTimeout = (int)Request.Timeout.TotalMilliseconds;*/ + +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + if (request.HasProxy) + { + try + { + request.Proxy.Connect(this.Stream, request); + } + finally + { + request.Timing.Add(TimingEventNames.Proxy_Negotiation); + } + } + + if (request.IsCancellationRequested) + throw new Exception("IsCancellationRequested"); +#endif + + // proxy connect is done, we can set the stream to a buffered one. HTTPProxy requires the raw NetworkStream for HTTPResponse's ReadUnknownSize! + this.Stream = this.TopmostStream = new BufferedReadNetworkStream(Client.GetStream(), Math.Max(8 * 1024, HTTPManager.ReceiveBufferSize ?? Client.ReceiveBufferSize)); + + // We have to use Request.CurrentUri here, because uri can be a proxy uri with a different protocol + if (isSecure) + { + DateTime tlsNegotiationStartedAt = DateTime.Now; +#region SSL Upgrade + +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + if (HTTPManager.UseAlternateSSLDefaultValue) + { + var handler = new TlsClientProtocol(this.Stream); + + List protocols = new List(); +#if !BESTHTTP_DISABLE_HTTP2 + SupportedProtocols protocol = HTTPProtocolFactory.GetProtocolFromUri(request.CurrentUri); + if (protocol == SupportedProtocols.HTTP && request.IsKeepAlive) + { + // http/2 over tls (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids) + protocols.Add(ProtocolName.AsUtf8Encoding(HTTPProtocolFactory.W3C_HTTP2)); + } +#endif + + protocols.Add(ProtocolName.AsUtf8Encoding(HTTPProtocolFactory.W3C_HTTP1)); + + AbstractTls13Client tlsClient = null; + if (HTTPManager.TlsClientFactory == null) + { + tlsClient = HTTPManager.DefaultTlsClientFactory(request, protocols); + } + else + { + try + { + tlsClient = HTTPManager.TlsClientFactory(request, protocols); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception(nameof(TCPConnector), nameof(HTTPManager.TlsClientFactory), ex, request.Context); + } + + if (tlsClient == null) + tlsClient = HTTPManager.DefaultTlsClientFactory(request, protocols); + } + + //tlsClient.LoggingContext = request.Context; + handler.Connect(tlsClient); + + var applicationProtocol = tlsClient.GetNegotiatedApplicationProtocol(); + if (!string.IsNullOrEmpty(applicationProtocol)) + negotiatedProtocol = applicationProtocol; + + Stream = handler.Stream; + } + else +#endif + { +#if !NETFX_CORE + SslStream sslStream = null; + + if (HTTPManager.ClientCertificationProvider == null) + sslStream = new SslStream(Client.GetStream(), false, (sender, cert, chain, errors) => + { + if (HTTPManager.DefaultCertificationValidator != null) + return HTTPManager.DefaultCertificationValidator(request, cert, chain, errors); + else + return true; + }); + else + sslStream = new SslStream(Client.GetStream(), false, (sender, cert, chain, errors) => + { + if (HTTPManager.DefaultCertificationValidator != null) + return HTTPManager.DefaultCertificationValidator(request, cert, chain, errors); + else + return true; + }, + (object sender, string targetHost, X509CertificateCollection localCertificates, X509Certificate remoteCertificate, string[] acceptableIssuers) => + { + return HTTPManager.ClientCertificationProvider(request, targetHost, localCertificates, remoteCertificate, acceptableIssuers); + }); + + if (!sslStream.IsAuthenticated) + { +#if !BESTHTTP_DISABLE_HTTP2 && !BESTHTTP_DISABLE_ALTERNATE_SSL && false + List protocols = new List(); + SupportedProtocols protocol = HTTPProtocolFactory.GetProtocolFromUri(request.CurrentUri); + if (protocol == SupportedProtocols.HTTP && request.IsKeepAlive) + { + // http/2 over tls (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids) + protocols.Add(new SslApplicationProtocol(HTTPProtocolFactory.W3C_HTTP2)); + } + protocols.Add(new SslApplicationProtocol(HTTPProtocolFactory.W3C_HTTP1)); + + SslClientAuthenticationOptions options = new SslClientAuthenticationOptions(); + options.ApplicationProtocols = protocols; + options.TargetHost = request.CurrentUri.Host; + var task = sslStream.AuthenticateAsClientAsync(options, default(System.Threading.CancellationToken)); + task.Wait(); + + try + { + negotiatedProtocol = System.Text.Encoding.UTF8.GetString(sslStream.NegotiatedApplicationProtocol.Protocol.Span); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception(nameof(TCPConnector), "Accessing SslStream's NegotiatedApplicationProtocol throwed an exception, falling back using HTTP/1.1", ex, request.Context); + negotiatedProtocol = HTTPProtocolFactory.W3C_HTTP1; + } +#else + sslStream.AuthenticateAsClient(request.CurrentUri.Host); +#endif + } + Stream = sslStream; +#else + Stream = Client.GetStream(); +#endif + } +#endregion + + request.Timing.Add(TimingEventNames.TLS_Negotiation, DateTime.Now - tlsNegotiationStartedAt); + } + } + + this.NegotiatedProtocol = negotiatedProtocol; + } + + public void Close() + { + if (Client != null && !this.LeaveOpen) + { + try + { + if (Stream != null) + Stream.Close(); + } + catch { } + finally + { + Stream = null; + } + + try + { + if (TopmostStream != null) + TopmostStream.Close(); + } + catch { } + finally + { + TopmostStream = null; + } + + try + { + Client.Close(); + } + catch { } + finally + { + Client = null; + } + } + } + + public void Dispose() + { + Close(); + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TCPConnector.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TCPConnector.cs.meta new file mode 100644 index 000000000..bdd37077b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TCPConnector.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d12096d6e11917c408186442aade2b09 +timeCreated: 1571210042 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS.meta new file mode 100644 index 000000000..05246329c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f9268b9adca26474ba1809bd1cb5a97b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/AbstractTls13Client.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/AbstractTls13Client.cs new file mode 100644 index 000000000..637bbfcce --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/AbstractTls13Client.cs @@ -0,0 +1,176 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +using System; +using System.Collections; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls; +using BestHTTP.Logger; + +namespace BestHTTP.Connections.TLS +{ + public abstract class AbstractTls13Client : AbstractTlsClient, TlsAuthentication + { + protected static readonly int[] DefaultCipherSuites = new int[] { + /* + * TLS 1.3 + */ + CipherSuite.TLS_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_AES_256_GCM_SHA384, + CipherSuite.TLS_AES_128_GCM_SHA256, + + /* + * pre-TLS 1.3 + */ + CipherSuite.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_RSA_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA, + }; + + protected HTTPRequest _request; + protected List _sniServerNames; + protected List _protocols; + + protected LoggingContext Context { get; private set; } + + protected AbstractTls13Client(HTTPRequest request, List sniServerNames, List protocols, TlsCrypto crypto) + : base(crypto) + { + this._request = request; + + // get the request's logging context. The context has no reference to the request, so it won't keep it in memory. + this.Context = this._request.Context; + + this._sniServerNames = sniServerNames; + this._protocols = protocols; + } + + /// + /// TCPConnector has to know what protocol got negotiated + /// + public string GetNegotiatedApplicationProtocol() => base.m_context.SecurityParameters.ApplicationProtocol?.GetUtf8Decoding(); + + // (Abstract)TLSClient facing functions + + protected override ProtocolVersion[] GetSupportedVersions() => ProtocolVersion.TLSv13.DownTo(ProtocolVersion.TLSv12); + protected override IList GetProtocolNames() => this._protocols; + protected override IList GetSniServerNames() => this._sniServerNames; + protected override int[] GetSupportedCipherSuites() + { + HTTPManager.Logger.Information(nameof(AbstractTls13Client), $"{nameof(GetSupportedCipherSuites)}", this.Context); + return TlsUtilities.GetSupportedCipherSuites(Crypto, DefaultCipherSuites); + } + + // TlsAuthentication implementation + public override TlsAuthentication GetAuthentication() + { + HTTPManager.Logger.Information(nameof(AbstractTls13Client), $"{nameof(GetAuthentication)}", this.Context); + return this; + } + + public virtual TlsCredentials GetClientCredentials(CertificateRequest certificateRequest) + { + HTTPManager.Logger.Information(nameof(AbstractTls13Client), $"{nameof(GetClientCredentials)}", this.Context); + return null; + } + + public virtual void NotifyServerCertificate(TlsServerCertificate serverCertificate) + { + HTTPManager.Logger.Information(nameof(AbstractTls13Client), $"{nameof(NotifyServerCertificate)}", this.Context); + } + + public override void NotifyAlertReceived(short alertLevel, short alertDescription) + { + base.NotifyAlertReceived(alertLevel, alertDescription); + + HTTPManager.Logger.Information(nameof(AbstractTls13Client), $"{nameof(NotifyAlertReceived)}({alertLevel}, {alertDescription})", this.Context); + } + + public override void NotifyAlertRaised(short alertLevel, short alertDescription, string message, Exception cause) + { + base.NotifyAlertRaised(alertLevel, alertDescription, message, cause); + + HTTPManager.Logger.Information(nameof(AbstractTls13Client), $"{nameof(NotifyAlertRaised)}({alertLevel}, {alertDescription}, {message}, {cause?.StackTrace})", this.Context); + } + + public override void NotifyHandshakeBeginning() + { + HTTPManager.Logger.Information(nameof(AbstractTls13Client), $"{nameof(NotifyHandshakeBeginning)}", this.Context); + } + + public override void NotifyHandshakeComplete() + { + HTTPManager.Logger.Information(nameof(AbstractTls13Client), $"{nameof(NotifyHandshakeComplete)}", this.Context); + this._request = null; + } + + public override void NotifyNewSessionTicket(NewSessionTicket newSessionTicket) + { + HTTPManager.Logger.Information(nameof(AbstractTls13Client), $"{nameof(NotifyNewSessionTicket)}", this.Context); + + base.NotifyNewSessionTicket(newSessionTicket); + } + + public override void NotifySecureRenegotiation(bool secureRenegotiation) + { + HTTPManager.Logger.Information(nameof(AbstractTls13Client), $"{nameof(NotifySecureRenegotiation)}", this.Context); + + base.NotifySecureRenegotiation(secureRenegotiation); + } + + public override void NotifySelectedCipherSuite(int selectedCipherSuite) + { + HTTPManager.Logger.Information(nameof(AbstractTls13Client), $"{nameof(NotifySelectedCipherSuite)}({selectedCipherSuite})", this.Context); + + base.NotifySelectedCipherSuite(selectedCipherSuite); + } + + public override void NotifySelectedPsk(TlsPsk selectedPsk) + { + HTTPManager.Logger.Information(nameof(AbstractTls13Client), $"{nameof(NotifySelectedPsk)}({selectedPsk?.PrfAlgorithm})", this.Context); + + base.NotifySelectedPsk(selectedPsk); + } + + public override void NotifyServerVersion(ProtocolVersion serverVersion) + { + HTTPManager.Logger.Information(nameof(AbstractTls13Client), $"{nameof(NotifyServerVersion)}({serverVersion})", this.Context); + + base.NotifyServerVersion(serverVersion); + } + + public override void NotifySessionID(byte[] sessionID) + { + HTTPManager.Logger.Information(nameof(AbstractTls13Client), $"{nameof(NotifySessionID)}", this.Context); + + base.NotifySessionID(sessionID); + } + + public override void NotifySessionToResume(TlsSession session) + { + HTTPManager.Logger.Information(nameof(AbstractTls13Client), $"{nameof(NotifySessionToResume)}", this.Context); + + base.NotifySessionToResume(session); + } + + public override void ProcessServerExtensions(IDictionary serverExtensions) + { + HTTPManager.Logger.Information(nameof(AbstractTls13Client), $"{nameof(ProcessServerExtensions)}", this.Context); + + base.ProcessServerExtensions(serverExtensions); + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/AbstractTls13Client.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/AbstractTls13Client.cs.meta new file mode 100644 index 000000000..6e35464fc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/AbstractTls13Client.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a656ab93e95c3174cb0afd2f26ef7da1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto.meta new file mode 100644 index 000000000..f0468fe2d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 129f7b1f27cbedb43b7948eaf7a4d423 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/FastTlsCrypto.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/FastTlsCrypto.cs new file mode 100644 index 000000000..182b773c0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/FastTlsCrypto.cs @@ -0,0 +1,156 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +using System; + +using BestHTTP.Connections.TLS.Crypto.Impl; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; + +namespace BestHTTP.Connections.TLS.Crypto +{ + public sealed class FastTlsCrypto : BcTlsCrypto + { + public FastTlsCrypto(SecureRandom entropySource) + : base(entropySource) + { + } + + public override TlsCipher CreateCipher(TlsCryptoParameters cryptoParams, int encryptionAlgorithm, int macAlgorithm) + { + HTTPManager.Logger.Verbose(nameof(FastTlsCrypto), $"CreateCipher({encryptionAlgorithm}, {macAlgorithm})"); + + switch (encryptionAlgorithm) + { + case EncryptionAlgorithm.CHACHA20_POLY1305: + { + // NOTE: Ignores macAlgorithm + //return CreateChaCha20Poly1305(cryptoParams); + FastBcChaCha20Poly1305 encrypt = new FastBcChaCha20Poly1305(true); + FastBcChaCha20Poly1305 decrypt = new FastBcChaCha20Poly1305(false); + + return new FastTlsAeadCipher(cryptoParams, encrypt, decrypt, 32, 16, TlsAeadCipher.AEAD_CHACHA20_POLY1305); + } + + case EncryptionAlgorithm.AES_128_CBC: + case EncryptionAlgorithm.ARIA_128_CBC: + case EncryptionAlgorithm.CAMELLIA_128_CBC: + case EncryptionAlgorithm.SEED_CBC: + case EncryptionAlgorithm.SM4_CBC: + { + //return CreateCipher_Cbc(cryptoParams, encryptionAlgorithm, 16, macAlgorithm); + FastTlsBlockCipherImpl encrypt = new FastTlsBlockCipherImpl(CreateCbcBlockCipher(encryptionAlgorithm), true); + FastTlsBlockCipherImpl decrypt = new FastTlsBlockCipherImpl(CreateCbcBlockCipher(encryptionAlgorithm), false); + + TlsHmac clientMac = CreateMac(cryptoParams, macAlgorithm); + TlsHmac serverMac = CreateMac(cryptoParams, macAlgorithm); + + return new FastTlsBlockCipher(cryptoParams, encrypt, decrypt, clientMac, serverMac, 16); + } + + case EncryptionAlgorithm.AES_256_CBC: + case EncryptionAlgorithm.ARIA_256_CBC: + case EncryptionAlgorithm.CAMELLIA_256_CBC: + { + //return CreateCipher_Cbc(cryptoParams, encryptionAlgorithm, 32, macAlgorithm); + FastTlsBlockCipherImpl encrypt = new FastTlsBlockCipherImpl(CreateCbcBlockCipher(encryptionAlgorithm), true); + FastTlsBlockCipherImpl decrypt = new FastTlsBlockCipherImpl(CreateCbcBlockCipher(encryptionAlgorithm), false); + + TlsHmac clientMac = CreateMac(cryptoParams, macAlgorithm); + TlsHmac serverMac = CreateMac(cryptoParams, macAlgorithm); + + return new FastTlsBlockCipher(cryptoParams, encrypt, decrypt, clientMac, serverMac, 32); + } + + case EncryptionAlgorithm.AES_128_CCM: + { + // NOTE: Ignores macAlgorithm + //return CreateCipher_Aes_Ccm(cryptoParams, 16, 16); + FastTlsAeadCipherImpl encrypt = new FastTlsAeadCipherImpl(CreateAeadCipher_Aes_Ccm(), true); + FastTlsAeadCipherImpl decrypt = new FastTlsAeadCipherImpl(CreateAeadCipher_Aes_Ccm(), false); + + return new FastTlsAeadCipher(cryptoParams, encrypt, decrypt, 16, 16, TlsAeadCipher.AEAD_CCM); + + } + case EncryptionAlgorithm.AES_128_CCM_8: + { + // NOTE: Ignores macAlgorithm + //return CreateCipher_Aes_Ccm(cryptoParams, 16, 8); + FastTlsAeadCipherImpl encrypt = new FastTlsAeadCipherImpl(CreateAeadCipher_Aes_Ccm(), true); + FastTlsAeadCipherImpl decrypt = new FastTlsAeadCipherImpl(CreateAeadCipher_Aes_Ccm(), false); + + return new FastTlsAeadCipher(cryptoParams, encrypt, decrypt, 16, 8, TlsAeadCipher.AEAD_CCM); + } + case EncryptionAlgorithm.AES_256_CCM: + { + // NOTE: Ignores macAlgorithm + //return CreateCipher_Aes_Ccm(cryptoParams, 32, 16); + FastTlsAeadCipherImpl encrypt = new FastTlsAeadCipherImpl(CreateAeadCipher_Aes_Ccm(), true); + FastTlsAeadCipherImpl decrypt = new FastTlsAeadCipherImpl(CreateAeadCipher_Aes_Ccm(), false); + + return new FastTlsAeadCipher(cryptoParams, encrypt, decrypt, 32, 16, TlsAeadCipher.AEAD_CCM); + } + case EncryptionAlgorithm.AES_256_CCM_8: + { + // NOTE: Ignores macAlgorithm + //return CreateCipher_Aes_Ccm(cryptoParams, 32, 8); + FastTlsAeadCipherImpl encrypt = new FastTlsAeadCipherImpl(CreateAeadCipher_Aes_Ccm(), true); + FastTlsAeadCipherImpl decrypt = new FastTlsAeadCipherImpl(CreateAeadCipher_Aes_Ccm(), false); + + return new FastTlsAeadCipher(cryptoParams, encrypt, decrypt, 32, 8, TlsAeadCipher.AEAD_CCM); + } + + case EncryptionAlgorithm.AES_128_GCM: + { + // NOTE: Ignores macAlgorithm + //return CreateCipher_Aes_Gcm(cryptoParams, 16, 16); + FastTlsAeadCipherImpl encrypt = new FastTlsAeadCipherImpl(CreateAeadCipher_Aes_Gcm(), true); + FastTlsAeadCipherImpl decrypt = new FastTlsAeadCipherImpl(CreateAeadCipher_Aes_Gcm(), false); + + return new FastTlsAeadCipher(cryptoParams, encrypt, decrypt, 16, 16, TlsAeadCipher.AEAD_GCM); + } + + case EncryptionAlgorithm.AES_256_GCM: + { + // NOTE: Ignores macAlgorithm + //return CreateCipher_Aes_Gcm(cryptoParams, 32, 16); + FastTlsAeadCipherImpl encrypt = new FastTlsAeadCipherImpl(CreateAeadCipher_Aes_Gcm(), true); + FastTlsAeadCipherImpl decrypt = new FastTlsAeadCipherImpl(CreateAeadCipher_Aes_Gcm(), false); + + return new FastTlsAeadCipher(cryptoParams, encrypt, decrypt, 32, 16, TlsAeadCipher.AEAD_GCM); + } + + default: + return base.CreateCipher(cryptoParams, encryptionAlgorithm, macAlgorithm); + } + } + + protected override IBlockCipher CreateAesEngine() + { + //return new AesEngine(); + return new FastAesEngine(); + } + + protected override IAeadCipher CreateCcmMode(IBlockCipher engine) + { + return new FastCcmBlockCipher(engine); + } + + protected override IAeadCipher CreateGcmMode(IBlockCipher engine) + { + // TODO Consider allowing custom configuration of multiplier + return new FastGcmBlockCipher(engine); + } + + protected override IBlockCipher CreateCbcBlockCipher(IBlockCipher blockCipher) + { + return new FastCbcBlockCipher(blockCipher); + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/FastTlsCrypto.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/FastTlsCrypto.cs.meta new file mode 100644 index 000000000..96476fb2d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/FastTlsCrypto.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a2a6059d661c094db479c8d4e9ea6ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl.meta new file mode 100644 index 000000000..a66ecb26b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8a8a4ac374e70b84b87d66c99e9dcc90 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/BurstTables8kGcmMultiplier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/BurstTables8kGcmMultiplier.cs new file mode 100644 index 000000000..ef20e5c00 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/BurstTables8kGcmMultiplier.cs @@ -0,0 +1,150 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.CompilerServices; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes.Gcm; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +#if BESTHTTP_WITH_BURST +using Unity.Burst; +using Unity.Collections.LowLevel.Unsafe; +#endif + +namespace BestHTTP.Connections.TLS.Crypto.Impl +{ + [BestHTTP.PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstructionAttribute] +#if BESTHTTP_WITH_BURST + [BurstCompile] +#endif + public sealed class BurstTables8kGcmMultiplier //: IGcmMultiplier + { + private byte[] H; + private GcmUtilities.FieldElement[][] T; + + public void Init(byte[] H) + { + if (T == null) + { + T = new GcmUtilities.FieldElement[2][]; + } + else if (Arrays.AreEqual(this.H, H)) + { + return; + } + + if (this.H == null) + this.H = Arrays.Clone(H); + else + { + if (this.H.Length != H.Length) + Array.Resize(ref this.H, H.Length); + + Array.Copy(H, this.H, H.Length); + } + + for (int i = 0; i < 2; ++i) + { + if (T[i] == null) + T[i] = new GcmUtilities.FieldElement[256]; + + GcmUtilities.FieldElement[] t = T[i]; + + // t[0] = 0 + + if (i == 0) + { + // t[1] = H.p^7 + GcmUtilities.AsFieldElement(this.H, out t[1]); + GcmUtilities.MultiplyP7(ref t[1]); + } + else + { + // t[1] = T[i-1][1].p^8 + GcmUtilities.MultiplyP8(ref T[i - 1][1], out t[1]); + } + + for (int n = 1; n < 128; ++n) + { + // t[2.n] = t[n].p^-1 + GcmUtilities.DivideP(ref t[n], out t[n << 1]); + + // t[2.n + 1] = t[2.n] + t[1] + GcmUtilities.Xor(ref t[n << 1], ref t[1], out t[(n << 1) + 1]); + } + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void MultiplyH(byte[] x) + { + fixed (byte* px = x) + fixed (GcmUtilities.FieldElement* pT0 = this.T[0]) + fixed (GcmUtilities.FieldElement* pT1 = this.T[1]) + MultiplyHImpl(px, pT0, pT1); + } + +#if BESTHTTP_WITH_BURST + [BurstCompile] +#endif + private static unsafe void MultiplyHImpl( +#if BESTHTTP_WITH_BURST + [NoAlias] +#endif + byte* px, +#if BESTHTTP_WITH_BURST + [NoAlias] +#endif + GcmUtilities.FieldElement* pT0, +#if BESTHTTP_WITH_BURST + [NoAlias] +#endif + GcmUtilities.FieldElement* pT1) + { + int vPos = px[15]; + int uPos = px[14]; + ulong z1 = pT0[uPos].n1 ^ pT1[vPos].n1; + ulong z0 = pT0[uPos].n0 ^ pT1[vPos].n0; + + for (int i = 12; i >= 0; i -= 2) + { + vPos = px[i + 1]; + uPos = px[i]; + + ulong c = z1 << 48; + z1 = pT0[uPos].n1 ^ pT1[vPos].n1 ^ ((z1 >> 16) | (z0 << 48)); + z0 = pT0[uPos].n0 ^ pT1[vPos].n0 ^ (z0 >> 16) ^ c ^ (c >> 1) ^ (c >> 2) ^ (c >> 7); + } + + //GcmUtilities.AsBytes(z0, z1, x); + + //UInt32_To_BE((uint)(n >> 32), bs, off); + uint n = (uint)(z0 >> 32); + px[0] = (byte)(n >> 24); + px[1] = (byte)(n >> 16); + px[2] = (byte)(n >> 8); + px[3] = (byte)(n); + //UInt32_To_BE((uint)(n), bs, off + 4); + n = (uint)(z0); + px[4] = (byte)(n >> 24); + px[5] = (byte)(n >> 16); + px[6] = (byte)(n >> 8); + px[7] = (byte)(n); + + n = (uint)(z1 >> 32); + px[8] = (byte)(n >> 24); + px[9] = (byte)(n >> 16); + px[10] = (byte)(n >> 8); + px[11] = (byte)(n); + //UInt32_To_BE((uint)(n), bs, off + 4); + n = (uint)(z1); + px[12] = (byte)(n >> 24); + px[13] = (byte)(n >> 16); + px[14] = (byte)(n >> 8); + px[15] = (byte)(n); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/BurstTables8kGcmMultiplier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/BurstTables8kGcmMultiplier.cs.meta new file mode 100644 index 000000000..2f778c613 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/BurstTables8kGcmMultiplier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5e88c42789588844893c08f62978218b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastAesEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastAesEngine.cs new file mode 100644 index 000000000..3f4174adc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastAesEngine.cs @@ -0,0 +1,938 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.Connections.TLS.Crypto.Impl +{ + /** + * an implementation of the AES (Rijndael), from FIPS-197. + *

+ * For further details see: http://csrc.nist.gov/encryption/aes/. + * + * This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + * http://fp.gladman.plus.com/cryptography_technology/rijndael/ + * + * There are three levels of tradeoff of speed vs memory + * Because java has no preprocessor, they are written as three separate classes from which to choose + * + * The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + * and 4 for decryption. + * + * The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + * adding 12 rotate operations per round to compute the values contained in the other tables from + * the contents of the first. + * + * The slowest version uses no static tables at all and computes the values in each round. + *

+ *

+ * This file contains the middle performance version with 2Kbytes of static tables for round precomputation. + *

+ */ + + [BestHTTP.PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstructionAttribute] + public sealed class FastAesEngine + : IBlockCipher + { + // The S box + private static readonly byte[] S = + { + 99, 124, 119, 123, 242, 107, 111, 197, + 48, 1, 103, 43, 254, 215, 171, 118, + 202, 130, 201, 125, 250, 89, 71, 240, + 173, 212, 162, 175, 156, 164, 114, 192, + 183, 253, 147, 38, 54, 63, 247, 204, + 52, 165, 229, 241, 113, 216, 49, 21, + 4, 199, 35, 195, 24, 150, 5, 154, + 7, 18, 128, 226, 235, 39, 178, 117, + 9, 131, 44, 26, 27, 110, 90, 160, + 82, 59, 214, 179, 41, 227, 47, 132, + 83, 209, 0, 237, 32, 252, 177, 91, + 106, 203, 190, 57, 74, 76, 88, 207, + 208, 239, 170, 251, 67, 77, 51, 133, + 69, 249, 2, 127, 80, 60, 159, 168, + 81, 163, 64, 143, 146, 157, 56, 245, + 188, 182, 218, 33, 16, 255, 243, 210, + 205, 12, 19, 236, 95, 151, 68, 23, + 196, 167, 126, 61, 100, 93, 25, 115, + 96, 129, 79, 220, 34, 42, 144, 136, + 70, 238, 184, 20, 222, 94, 11, 219, + 224, 50, 58, 10, 73, 6, 36, 92, + 194, 211, 172, 98, 145, 149, 228, 121, + 231, 200, 55, 109, 141, 213, 78, 169, + 108, 86, 244, 234, 101, 122, 174, 8, + 186, 120, 37, 46, 28, 166, 180, 198, + 232, 221, 116, 31, 75, 189, 139, 138, + 112, 62, 181, 102, 72, 3, 246, 14, + 97, 53, 87, 185, 134, 193, 29, 158, + 225, 248, 152, 17, 105, 217, 142, 148, + 155, 30, 135, 233, 206, 85, 40, 223, + 140, 161, 137, 13, 191, 230, 66, 104, + 65, 153, 45, 15, 176, 84, 187, 22, + }; + + // The inverse S-box + private static readonly byte[] Si = + { + 82, 9, 106, 213, 48, 54, 165, 56, + 191, 64, 163, 158, 129, 243, 215, 251, + 124, 227, 57, 130, 155, 47, 255, 135, + 52, 142, 67, 68, 196, 222, 233, 203, + 84, 123, 148, 50, 166, 194, 35, 61, + 238, 76, 149, 11, 66, 250, 195, 78, + 8, 46, 161, 102, 40, 217, 36, 178, + 118, 91, 162, 73, 109, 139, 209, 37, + 114, 248, 246, 100, 134, 104, 152, 22, + 212, 164, 92, 204, 93, 101, 182, 146, + 108, 112, 72, 80, 253, 237, 185, 218, + 94, 21, 70, 87, 167, 141, 157, 132, + 144, 216, 171, 0, 140, 188, 211, 10, + 247, 228, 88, 5, 184, 179, 69, 6, + 208, 44, 30, 143, 202, 63, 15, 2, + 193, 175, 189, 3, 1, 19, 138, 107, + 58, 145, 17, 65, 79, 103, 220, 234, + 151, 242, 207, 206, 240, 180, 230, 115, + 150, 172, 116, 34, 231, 173, 53, 133, + 226, 249, 55, 232, 28, 117, 223, 110, + 71, 241, 26, 113, 29, 41, 197, 137, + 111, 183, 98, 14, 170, 24, 190, 27, + 252, 86, 62, 75, 198, 210, 121, 32, + 154, 219, 192, 254, 120, 205, 90, 244, + 31, 221, 168, 51, 136, 7, 199, 49, + 177, 18, 16, 89, 39, 128, 236, 95, + 96, 81, 127, 169, 25, 181, 74, 13, + 45, 229, 122, 159, 147, 201, 156, 239, + 160, 224, 59, 77, 174, 42, 245, 176, + 200, 235, 187, 60, 131, 83, 153, 97, + 23, 43, 4, 126, 186, 119, 214, 38, + 225, 105, 20, 99, 85, 33, 12, 125, + }; + + // vector used in calculating key schedule (powers of x in GF(256)) + private static readonly byte[] rcon = + { + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, + 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 + }; + + // precomputation tables of calculations for rounds + private static readonly uint[] T0 = + { + 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, 0x0df2f2ff, + 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591, 0x50303060, 0x03010102, + 0xa96767ce, 0x7d2b2b56, 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, + 0x9a7676ec, 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa, + 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb, 0xecadad41, + 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45, 0xbf9c9c23, 0xf7a4a453, + 0x967272e4, 0x5bc0c09b, 0xc2b7b775, 0x1cfdfde1, 0xae93933d, + 0x6a26264c, 0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83, + 0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9, 0x937171e2, + 0x73d8d8ab, 0x53313162, 0x3f15152a, 0x0c040408, 0x52c7c795, + 0x65232346, 0x5ec3c39d, 0x28181830, 0xa1969637, 0x0f05050a, + 0xb59a9a2f, 0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df, + 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea, 0x1b090912, + 0x9e83831d, 0x742c2c58, 0x2e1a1a34, 0x2d1b1b36, 0xb26e6edc, + 0xee5a5ab4, 0xfba0a05b, 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, + 0xceb3b37d, 0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413, + 0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1, 0x60202040, + 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6, 0xbe6a6ad4, 0x46cbcb8d, + 0xd9bebe67, 0x4b393972, 0xde4a4a94, 0xd44c4c98, 0xe85858b0, + 0x4acfcf85, 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed, + 0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511, 0xcf45458a, + 0x10f9f9e9, 0x06020204, 0x817f7ffe, 0xf05050a0, 0x443c3c78, + 0xba9f9f25, 0xe3a8a84b, 0xf35151a2, 0xfea3a35d, 0xc0404080, + 0x8a8f8f05, 0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1, + 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142, 0x30101020, + 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf, 0x4ccdcd81, 0x140c0c18, + 0x35131326, 0x2fececc3, 0xe15f5fbe, 0xa2979735, 0xcc444488, + 0x3917172e, 0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a, + 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6, 0xa06060c0, + 0x98818119, 0xd14f4f9e, 0x7fdcdca3, 0x66222244, 0x7e2a2a54, + 0xab90903b, 0x8388880b, 0xca46468c, 0x29eeeec7, 0xd3b8b86b, + 0x3c141428, 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad, + 0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14, 0xdb494992, + 0x0a06060c, 0x6c242448, 0xe45c5cb8, 0x5dc2c29f, 0x6ed3d3bd, + 0xefacac43, 0xa66262c4, 0xa8919139, 0xa4959531, 0x37e4e4d3, + 0x8b7979f2, 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda, + 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949, 0xb46c6cd8, + 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf, 0xaf6565ca, 0x8e7a7af4, + 0xe9aeae47, 0x18080810, 0xd5baba6f, 0x887878f0, 0x6f25254a, + 0x722e2e5c, 0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697, + 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e, 0xdd4b4b96, + 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f, 0x907070e0, 0x423e3e7c, + 0xc4b5b571, 0xaa6666cc, 0xd8484890, 0x05030306, 0x01f6f6f7, + 0x120e0e1c, 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969, + 0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27, 0x38e1e1d9, + 0x13f8f8eb, 0xb398982b, 0x33111122, 0xbb6969d2, 0x70d9d9a9, + 0x898e8e07, 0xa7949433, 0xb69b9b2d, 0x221e1e3c, 0x92878715, + 0x20e9e9c9, 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5, + 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a, 0xdabfbf65, + 0x31e6e6d7, 0xc6424284, 0xb86868d0, 0xc3414182, 0xb0999929, + 0x772d2d5a, 0x110f0f1e, 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, + 0x3a16162c + }; + + private static readonly uint[] Tinv0 = + { + 0x50a7f451, 0x5365417e, 0xc3a4171a, 0x965e273a, 0xcb6bab3b, + 0xf1459d1f, 0xab58faac, 0x9303e34b, 0x55fa3020, 0xf66d76ad, + 0x9176cc88, 0x254c02f5, 0xfcd7e54f, 0xd7cb2ac5, 0x80443526, + 0x8fa362b5, 0x495ab1de, 0x671bba25, 0x980eea45, 0xe1c0fe5d, + 0x02752fc3, 0x12f04c81, 0xa397468d, 0xc6f9d36b, 0xe75f8f03, + 0x959c9215, 0xeb7a6dbf, 0xda595295, 0x2d83bed4, 0xd3217458, + 0x2969e049, 0x44c8c98e, 0x6a89c275, 0x78798ef4, 0x6b3e5899, + 0xdd71b927, 0xb64fe1be, 0x17ad88f0, 0x66ac20c9, 0xb43ace7d, + 0x184adf63, 0x82311ae5, 0x60335197, 0x457f5362, 0xe07764b1, + 0x84ae6bbb, 0x1ca081fe, 0x942b08f9, 0x58684870, 0x19fd458f, + 0x876cde94, 0xb7f87b52, 0x23d373ab, 0xe2024b72, 0x578f1fe3, + 0x2aab5566, 0x0728ebb2, 0x03c2b52f, 0x9a7bc586, 0xa50837d3, + 0xf2872830, 0xb2a5bf23, 0xba6a0302, 0x5c8216ed, 0x2b1ccf8a, + 0x92b479a7, 0xf0f207f3, 0xa1e2694e, 0xcdf4da65, 0xd5be0506, + 0x1f6234d1, 0x8afea6c4, 0x9d532e34, 0xa055f3a2, 0x32e18a05, + 0x75ebf6a4, 0x39ec830b, 0xaaef6040, 0x069f715e, 0x51106ebd, + 0xf98a213e, 0x3d06dd96, 0xae053edd, 0x46bde64d, 0xb58d5491, + 0x055dc471, 0x6fd40604, 0xff155060, 0x24fb9819, 0x97e9bdd6, + 0xcc434089, 0x779ed967, 0xbd42e8b0, 0x888b8907, 0x385b19e7, + 0xdbeec879, 0x470a7ca1, 0xe90f427c, 0xc91e84f8, 0x00000000, + 0x83868009, 0x48ed2b32, 0xac70111e, 0x4e725a6c, 0xfbff0efd, + 0x5638850f, 0x1ed5ae3d, 0x27392d36, 0x64d90f0a, 0x21a65c68, + 0xd1545b9b, 0x3a2e3624, 0xb1670a0c, 0x0fe75793, 0xd296eeb4, + 0x9e919b1b, 0x4fc5c080, 0xa220dc61, 0x694b775a, 0x161a121c, + 0x0aba93e2, 0xe52aa0c0, 0x43e0223c, 0x1d171b12, 0x0b0d090e, + 0xadc78bf2, 0xb9a8b62d, 0xc8a91e14, 0x8519f157, 0x4c0775af, + 0xbbdd99ee, 0xfd607fa3, 0x9f2601f7, 0xbcf5725c, 0xc53b6644, + 0x347efb5b, 0x7629438b, 0xdcc623cb, 0x68fcedb6, 0x63f1e4b8, + 0xcadc31d7, 0x10856342, 0x40229713, 0x2011c684, 0x7d244a85, + 0xf83dbbd2, 0x1132f9ae, 0x6da129c7, 0x4b2f9e1d, 0xf330b2dc, + 0xec52860d, 0xd0e3c177, 0x6c16b32b, 0x99b970a9, 0xfa489411, + 0x2264e947, 0xc48cfca8, 0x1a3ff0a0, 0xd82c7d56, 0xef903322, + 0xc74e4987, 0xc1d138d9, 0xfea2ca8c, 0x360bd498, 0xcf81f5a6, + 0x28de7aa5, 0x268eb7da, 0xa4bfad3f, 0xe49d3a2c, 0x0d927850, + 0x9bcc5f6a, 0x62467e54, 0xc2138df6, 0xe8b8d890, 0x5ef7392e, + 0xf5afc382, 0xbe805d9f, 0x7c93d069, 0xa92dd56f, 0xb31225cf, + 0x3b99acc8, 0xa77d1810, 0x6e639ce8, 0x7bbb3bdb, 0x097826cd, + 0xf418596e, 0x01b79aec, 0xa89a4f83, 0x656e95e6, 0x7ee6ffaa, + 0x08cfbc21, 0xe6e815ef, 0xd99be7ba, 0xce366f4a, 0xd4099fea, + 0xd67cb029, 0xafb2a431, 0x31233f2a, 0x3094a5c6, 0xc066a235, + 0x37bc4e74, 0xa6ca82fc, 0xb0d090e0, 0x15d8a733, 0x4a9804f1, + 0xf7daec41, 0x0e50cd7f, 0x2ff69117, 0x8dd64d76, 0x4db0ef43, + 0x544daacc, 0xdf0496e4, 0xe3b5d19e, 0x1b886a4c, 0xb81f2cc1, + 0x7f516546, 0x04ea5e9d, 0x5d358c01, 0x737487fa, 0x2e410bfb, + 0x5a1d67b3, 0x52d2db92, 0x335610e9, 0x1347d66d, 0x8c61d79a, + 0x7a0ca137, 0x8e14f859, 0x893c13eb, 0xee27a9ce, 0x35c961b7, + 0xede51ce1, 0x3cb1477a, 0x59dfd29c, 0x3f73f255, 0x79ce1418, + 0xbf37c773, 0xeacdf753, 0x5baafd5f, 0x146f3ddf, 0x86db4478, + 0x81f3afca, 0x3ec468b9, 0x2c342438, 0x5f40a3c2, 0x72c31d16, + 0x0c25e2bc, 0x8b493c28, 0x41950dff, 0x7101a839, 0xdeb30c08, + 0x9ce4b4d8, 0x90c15664, 0x6184cb7b, 0x70b632d5, 0x745c6c48, + 0x4257b8d0 + }; + + private static uint Shift(uint r, int shift) + { + return (r >> shift) | (r << (32 - shift)); + } + + /* multiply four bytes in GF(2^8) by 'x' {02} in parallel */ + + private const uint m1 = 0x80808080; + private const uint m2 = 0x7f7f7f7f; + private const uint m3 = 0x0000001b; + private const uint m4 = 0xC0C0C0C0; + private const uint m5 = 0x3f3f3f3f; + + private static uint FFmulX(uint x) + { + return ((x & m2) << 1) ^ (((x & m1) >> 7) * m3); + } + + private static uint FFmulX2(uint x) + { + uint t0 = (x & m5) << 2; + uint t1 = (x & m4); + t1 ^= (t1 >> 1); + return t0 ^ (t1 >> 2) ^ (t1 >> 5); + } + + /* + The following defines provide alternative definitions of FFmulX that might + give improved performance if a fast 32-bit multiply is not available. + + private int FFmulX(int x) { int u = x & m1; u |= (u >> 1); return ((x & m2) << 1) ^ ((u >>> 3) | (u >>> 6)); } + private static final int m4 = 0x1b1b1b1b; + private int FFmulX(int x) { int u = x & m1; return ((x & m2) << 1) ^ ((u - (u >>> 7)) & m4); } + + */ + + private static uint Inv_Mcol(uint x) + { + uint t0, t1; + t0 = x; + t1 = t0 ^ Shift(t0, 8); + t0 ^= FFmulX(t1); + t1 ^= FFmulX2(t0); + t0 ^= t1 ^ Shift(t1, 16); + return t0; + } + + private static uint SubWord(uint x) + { + return (uint)S[x & 255] + | (((uint)S[(x >> 8) & 255]) << 8) + | (((uint)S[(x >> 16) & 255]) << 16) + | (((uint)S[(x >> 24) & 255]) << 24); + } + + uint[][] W = null; + + /** + * Calculate the necessary round keys + * The number of calculations depends on key size and block size + * AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + * This code is written assuming those are the only possible values + */ + private uint[][] GenerateWorkingKey(byte[] key, bool forEncryption) + { + int keyLen = key.Length; + if (keyLen < 16 || keyLen > 32 || (keyLen & 7) != 0) + throw new ArgumentException("Key length not 128/192/256 bits."); + + int KC = keyLen >> 2; + this.ROUNDS = KC + 6; // This is not always true for the generalized Rijndael that allows larger block sizes + + if (W == null || W.Length < ROUNDS + 1) + { + W = new uint[ROUNDS + 1][]; // 4 words in a block + for (int i = 0; i <= ROUNDS; ++i) + { + W[i] = new uint[4]; + } + } + else + { + for (int i = 0; i < W.Length; ++i) + Array.Clear(W[i], 0, W[i].Length); + } + + switch (KC) + { + case 4: + { + uint t0 = Pack.LE_To_UInt32(key, 0); W[0][0] = t0; + uint t1 = Pack.LE_To_UInt32(key, 4); W[0][1] = t1; + uint t2 = Pack.LE_To_UInt32(key, 8); W[0][2] = t2; + uint t3 = Pack.LE_To_UInt32(key, 12); W[0][3] = t3; + + for (int i = 1; i <= 10; ++i) + { + uint u = SubWord(Shift(t3, 8)) ^ rcon[i - 1]; + t0 ^= u; W[i][0] = t0; + t1 ^= t0; W[i][1] = t1; + t2 ^= t1; W[i][2] = t2; + t3 ^= t2; W[i][3] = t3; + } + + break; + } + case 6: + { + uint t0 = Pack.LE_To_UInt32(key, 0); W[0][0] = t0; + uint t1 = Pack.LE_To_UInt32(key, 4); W[0][1] = t1; + uint t2 = Pack.LE_To_UInt32(key, 8); W[0][2] = t2; + uint t3 = Pack.LE_To_UInt32(key, 12); W[0][3] = t3; + uint t4 = Pack.LE_To_UInt32(key, 16); W[1][0] = t4; + uint t5 = Pack.LE_To_UInt32(key, 20); W[1][1] = t5; + + uint rcon = 1; + uint u = SubWord(Shift(t5, 8)) ^ rcon; rcon <<= 1; + t0 ^= u; W[1][2] = t0; + t1 ^= t0; W[1][3] = t1; + t2 ^= t1; W[2][0] = t2; + t3 ^= t2; W[2][1] = t3; + t4 ^= t3; W[2][2] = t4; + t5 ^= t4; W[2][3] = t5; + + for (int i = 3; i < 12; i += 3) + { + u = SubWord(Shift(t5, 8)) ^ rcon; rcon <<= 1; + t0 ^= u; W[i][0] = t0; + t1 ^= t0; W[i][1] = t1; + t2 ^= t1; W[i][2] = t2; + t3 ^= t2; W[i][3] = t3; + t4 ^= t3; W[i + 1][0] = t4; + t5 ^= t4; W[i + 1][1] = t5; + u = SubWord(Shift(t5, 8)) ^ rcon; rcon <<= 1; + t0 ^= u; W[i + 1][2] = t0; + t1 ^= t0; W[i + 1][3] = t1; + t2 ^= t1; W[i + 2][0] = t2; + t3 ^= t2; W[i + 2][1] = t3; + t4 ^= t3; W[i + 2][2] = t4; + t5 ^= t4; W[i + 2][3] = t5; + } + + u = SubWord(Shift(t5, 8)) ^ rcon; + t0 ^= u; W[12][0] = t0; + t1 ^= t0; W[12][1] = t1; + t2 ^= t1; W[12][2] = t2; + t3 ^= t2; W[12][3] = t3; + + break; + } + case 8: + { + uint t0 = Pack.LE_To_UInt32(key, 0); W[0][0] = t0; + uint t1 = Pack.LE_To_UInt32(key, 4); W[0][1] = t1; + uint t2 = Pack.LE_To_UInt32(key, 8); W[0][2] = t2; + uint t3 = Pack.LE_To_UInt32(key, 12); W[0][3] = t3; + uint t4 = Pack.LE_To_UInt32(key, 16); W[1][0] = t4; + uint t5 = Pack.LE_To_UInt32(key, 20); W[1][1] = t5; + uint t6 = Pack.LE_To_UInt32(key, 24); W[1][2] = t6; + uint t7 = Pack.LE_To_UInt32(key, 28); W[1][3] = t7; + + uint u, rcon = 1; + + for (int i = 2; i < 14; i += 2) + { + u = SubWord(Shift(t7, 8)) ^ rcon; rcon <<= 1; + t0 ^= u; W[i][0] = t0; + t1 ^= t0; W[i][1] = t1; + t2 ^= t1; W[i][2] = t2; + t3 ^= t2; W[i][3] = t3; + u = SubWord(t3); + t4 ^= u; W[i + 1][0] = t4; + t5 ^= t4; W[i + 1][1] = t5; + t6 ^= t5; W[i + 1][2] = t6; + t7 ^= t6; W[i + 1][3] = t7; + } + + u = SubWord(Shift(t7, 8)) ^ rcon; + t0 ^= u; W[14][0] = t0; + t1 ^= t0; W[14][1] = t1; + t2 ^= t1; W[14][2] = t2; + t3 ^= t2; W[14][3] = t3; + + break; + } + default: + { + throw new InvalidOperationException("Should never get here"); + } + } + + if (!forEncryption) + { + for (int j = 1; j < ROUNDS; j++) + { + uint[] w = W[j]; + for (int i = 0; i < 4; i++) + { + w[i] = Inv_Mcol(w[i]); + } + } + } + + return W; + } + + private int ROUNDS; + private uint[][] WorkingKey; + private bool forEncryption; + + private byte[] s; + + private const int BLOCK_SIZE = 16; + + /** + * default constructor - 128 bit block size. + */ + public FastAesEngine() + { + } + + /** + * initialise an AES cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param parameters the parameters required to set up the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public void Init(bool forEncryption, ICipherParameters parameters) + { + if (!(parameters is KeyParameter keyParameter)) + throw new ArgumentException("invalid parameter passed to AES init - " + + BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + + WorkingKey = GenerateWorkingKey(keyParameter.GetKey(), forEncryption); + + this.forEncryption = forEncryption; + this.s = /*Arrays.Clone*/(forEncryption ? S : Si); + } + + public string AlgorithmName + { + get { return "AES"; } + } + + public int GetBlockSize() + { + return BLOCK_SIZE; + } + + public int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (WorkingKey == null) + throw new InvalidOperationException("AES engine not initialised"); + + Check.DataLength(input, inOff, 16, "input buffer too short"); + Check.OutputLength(output, outOff, 16, "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + if (forEncryption) + { + EncryptBlock(input.AsSpan(inOff), output.AsSpan(outOff), WorkingKey); + } + else + { + DecryptBlock(input.AsSpan(inOff), output.AsSpan(outOff), WorkingKey); + } +#else + if (forEncryption) + { + EncryptBlock(input, inOff, output, outOff, WorkingKey); + } + else + { + DecryptBlock(input, inOff, output, outOff, WorkingKey); + } +#endif + + return BLOCK_SIZE; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public unsafe int ProcessBlock(ReadOnlySpan input, Span output) + { + if (WorkingKey == null) + throw new InvalidOperationException("AES engine not initialised"); + + Check.DataLength(input, 16, "input buffer too short"); + Check.OutputLength(output, 16, "output buffer too short"); + + if (forEncryption) + { + //EncryptBlock(input, output, WorkingKey); + + uint C0 = System.Buffers.Binary.BinaryPrimitives.ReadUInt32LittleEndian(input); + uint C1 = System.Buffers.Binary.BinaryPrimitives.ReadUInt32LittleEndian(input[4..]); + uint C2 = System.Buffers.Binary.BinaryPrimitives.ReadUInt32LittleEndian(input[8..]); + uint C3 = System.Buffers.Binary.BinaryPrimitives.ReadUInt32LittleEndian(input[12..]); + + uint[] kw = WorkingKey[0]; + uint t0 = C0 ^ kw[0]; + uint t1 = C1 ^ kw[1]; + uint t2 = C2 ^ kw[2]; + + uint r0, r1, r2, r3 = C3 ^ kw[3]; + int r = 1; + uint tmp1, tmp2, tmp3; + uint shift1, shift2, shift3; + + fixed (uint* pT0 = T0) + { + while (r < ROUNDS - 1) + { + kw = WorkingKey[r++]; + fixed (uint* pkw = kw) + { + tmp1 = pT0[(t1 >> 8) & 255]; tmp2 = pT0[(t2 >> 16) & 255]; tmp3 = pT0[(r3 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + r0 = pT0[t0 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[0]; + + tmp1 = pT0[(t2 >> 8) & 255]; tmp2 = pT0[(r3 >> 16) & 255]; tmp3 = pT0[(t0 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + r1 = pT0[t1 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[1]; + + tmp1 = pT0[(r3 >> 8) & 255]; tmp2 = pT0[(t0 >> 16) & 255]; tmp3 = pT0[(t1 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + r2 = pT0[t2 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[2]; + + tmp1 = pT0[(t0 >> 8) & 255]; tmp2 = pT0[(t1 >> 16) & 255]; tmp3 = pT0[(t2 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + r3 = pT0[r3 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[3]; + } + + kw = WorkingKey[r++]; + + fixed (uint* pkw = kw) + { + tmp1 = pT0[(r1 >> 8) & 255]; tmp2 = pT0[(r2 >> 16) & 255]; tmp3 = pT0[(r3 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + t0 = pT0[r0 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[0]; + + tmp1 = pT0[(r2 >> 8) & 255]; tmp2 = pT0[(r3 >> 16) & 255]; tmp3 = pT0[(r0 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + t1 = pT0[r1 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[1]; + + tmp1 = pT0[(r3 >> 8) & 255]; tmp2 = pT0[(r0 >> 16) & 255]; tmp3 = pT0[(r1 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + t2 = pT0[r2 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[2]; + + tmp1 = pT0[(r0 >> 8) & 255]; tmp2 = pT0[(r1 >> 16) & 255]; tmp3 = pT0[(r2 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + r3 = pT0[r3 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[3]; + } + } + + kw = WorkingKey[r++]; + fixed (uint* pkw = kw) + { + tmp1 = pT0[(t1 >> 8) & 255]; tmp2 = pT0[(t2 >> 16) & 255]; tmp3 = pT0[(r3 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + r0 = pT0[t0 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[0]; + + tmp1 = pT0[(t2 >> 8) & 255]; tmp2 = pT0[(r3 >> 16) & 255]; tmp3 = pT0[(t0 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + r1 = pT0[t1 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[1]; + + tmp1 = pT0[(r3 >> 8) & 255]; tmp2 = pT0[(t0 >> 16) & 255]; tmp3 = pT0[(t1 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + r2 = pT0[t2 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[2]; + + tmp1 = pT0[(t0 >> 8) & 255]; tmp2 = pT0[(t1 >> 16) & 255]; tmp3 = pT0[(t2 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + r3 = pT0[r3 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[3]; + } + } + + // the final round's table is a simple function of S so we don't use a whole other four tables for it + + kw = WorkingKey[r]; + fixed (uint* pkw = kw) + fixed (byte* pS = S) + fixed (byte* ps = s) + { + C0 = (uint)pS[r0 & 255] ^ (((uint)pS[(r1 >> 8) & 255]) << 8) ^ (((uint)ps[(r2 >> 16) & 255]) << 16) ^ (((uint)ps[(r3 >> 24) & 255]) << 24) ^ pkw[0]; + C1 = (uint)ps[r1 & 255] ^ (((uint)pS[(r2 >> 8) & 255]) << 8) ^ (((uint)pS[(r3 >> 16) & 255]) << 16) ^ (((uint)ps[(r0 >> 24) & 255]) << 24) ^ pkw[1]; + C2 = (uint)ps[r2 & 255] ^ (((uint)pS[(r3 >> 8) & 255]) << 8) ^ (((uint)pS[(r0 >> 16) & 255]) << 16) ^ (((uint)pS[(r1 >> 24) & 255]) << 24) ^ pkw[2]; + C3 = (uint)ps[r3 & 255] ^ (((uint)ps[(r0 >> 8) & 255]) << 8) ^ (((uint)ps[(r1 >> 16) & 255]) << 16) ^ (((uint)pS[(r2 >> 24) & 255]) << 24) ^ pkw[3]; + } + + System.Buffers.Binary.BinaryPrimitives.WriteUInt32LittleEndian(output, C0); + System.Buffers.Binary.BinaryPrimitives.WriteUInt32LittleEndian(output[4..], C1); + System.Buffers.Binary.BinaryPrimitives.WriteUInt32LittleEndian(output[8..], C2); + System.Buffers.Binary.BinaryPrimitives.WriteUInt32LittleEndian(output[12..], C3); + } + else + { + //DecryptBlock(input, output, WorkingKey); + + uint C0 = System.Buffers.Binary.BinaryPrimitives.ReadUInt32LittleEndian(input); + uint C1 = System.Buffers.Binary.BinaryPrimitives.ReadUInt32LittleEndian(input[4..]); + uint C2 = System.Buffers.Binary.BinaryPrimitives.ReadUInt32LittleEndian(input[8..]); + uint C3 = System.Buffers.Binary.BinaryPrimitives.ReadUInt32LittleEndian(input[12..]); + + uint[] kw = WorkingKey[ROUNDS]; + uint t0 = C0 ^ kw[0]; + uint t1 = C1 ^ kw[1]; + uint t2 = C2 ^ kw[2]; + + uint r0, r1, r2, r3 = C3 ^ kw[3]; + int r = ROUNDS - 1; + + uint tmp1, tmp2, tmp3; + uint shift1, shift2, shift3; + + fixed (uint* pTinv0 = Tinv0) + { + while (r > 1) + { + kw = WorkingKey[r--]; + fixed (uint* pkw = kw) + { + tmp1 = pTinv0[(r3 >> 8) & 255]; tmp2 = pTinv0[(t2 >> 16) & 255]; tmp3 = pTinv0[(t1 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + r0 = pTinv0[t0 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[0]; + + tmp1 = pTinv0[(t0 >> 8) & 255]; tmp2 = pTinv0[(r3 >> 16) & 255]; tmp3 = pTinv0[(t2 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + r1 = pTinv0[t1 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[1]; + + tmp1 = pTinv0[(t1 >> 8) & 255]; tmp2 = pTinv0[(t0 >> 16) & 255]; tmp3 = pTinv0[(r3 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + r2 = pTinv0[t2 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[2]; + + tmp1 = pTinv0[(t2 >> 8) & 255]; tmp2 = pTinv0[(t1 >> 16) & 255]; tmp3 = pTinv0[(t0 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + r3 = pTinv0[r3 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[3]; + } + + kw = WorkingKey[r--]; + + fixed (uint* pkw = kw) + { + tmp1 = pTinv0[(r3 >> 8) & 255]; tmp2 = pTinv0[(r2 >> 16) & 255]; tmp3 = pTinv0[(r1 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + t0 = pTinv0[r0 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[0]; + + tmp1 = pTinv0[(r0 >> 8) & 255]; tmp2 = pTinv0[(r3 >> 16) & 255]; tmp3 = pTinv0[(r2 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + t1 = pTinv0[r1 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[1]; + + tmp1 = pTinv0[(r1 >> 8) & 255]; tmp2 = pTinv0[(r0 >> 16) & 255]; tmp3 = pTinv0[(r3 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + t2 = pTinv0[r2 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[2]; + + tmp1 = pTinv0[(r2 >> 8) & 255]; tmp2 = pTinv0[(r1 >> 16) & 255]; tmp3 = pTinv0[(r0 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + r3 = pTinv0[r3 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[3]; + } + } + + kw = WorkingKey[1]; + + fixed (uint* pkw = kw) + { + tmp1 = pTinv0[(r3 >> 8) & 255]; tmp2 = pTinv0[(t2 >> 16) & 255]; tmp3 = pTinv0[(t1 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + r0 = pTinv0[t0 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[0]; + + tmp1 = pTinv0[(t0 >> 8) & 255]; tmp2 = pTinv0[(r3 >> 16) & 255]; tmp3 = pTinv0[(t2 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + r1 = pTinv0[t1 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[1]; + + tmp1 = pTinv0[(t1 >> 8) & 255]; tmp2 = pTinv0[(t0 >> 16) & 255]; tmp3 = pTinv0[(r3 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + r2 = pTinv0[t2 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[2]; + + tmp1 = pTinv0[(t2 >> 8) & 255]; tmp2 = pTinv0[(t1 >> 16) & 255]; tmp3 = pTinv0[(t0 >> 24) & 255]; + shift1 = (tmp1 >> 24) | (tmp1 << 8); shift2 = (tmp2 >> 16) | (tmp2 << 16); shift3 = (tmp3 >> 8) | (tmp3 << 24); + r3 = pTinv0[r3 & 255] ^ shift1 ^ shift2 ^ shift3 ^ pkw[3]; + } + } + // the final round's table is a simple function of Si so we don't use a whole other four tables for it + + kw = WorkingKey[0]; + fixed (uint* pkw = kw) + fixed(byte* pSi = Si) + fixed (byte* ps = s) + { + C0 = (uint)pSi[r0 & 255] ^ (((uint)ps[(r3 >> 8) & 255]) << 8) ^ (((uint)ps[(r2 >> 16) & 255]) << 16) ^ (((uint)pSi[(r1 >> 24) & 255]) << 24) ^ pkw[0]; + C1 = (uint)ps[r1 & 255] ^ (((uint)ps[(r0 >> 8) & 255]) << 8) ^ (((uint)pSi[(r3 >> 16) & 255]) << 16) ^ (((uint)ps[(r2 >> 24) & 255]) << 24) ^ pkw[1]; + C2 = (uint)ps[r2 & 255] ^ (((uint)pSi[(r1 >> 8) & 255]) << 8) ^ (((uint)pSi[(r0 >> 16) & 255]) << 16) ^ (((uint)ps[(r3 >> 24) & 255]) << 24) ^ pkw[2]; + C3 = (uint)pSi[r3 & 255] ^ (((uint)ps[(r2 >> 8) & 255]) << 8) ^ (((uint)ps[(r1 >> 16) & 255]) << 16) ^ (((uint)ps[(r0 >> 24) & 255]) << 24) ^ pkw[3]; + } + + System.Buffers.Binary.BinaryPrimitives.WriteUInt32LittleEndian(output, C0); + System.Buffers.Binary.BinaryPrimitives.WriteUInt32LittleEndian(output[4..], C1); + System.Buffers.Binary.BinaryPrimitives.WriteUInt32LittleEndian(output[8..], C2); + System.Buffers.Binary.BinaryPrimitives.WriteUInt32LittleEndian(output[12..], C3); + } + + return BLOCK_SIZE; + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void EncryptBlock(ReadOnlySpan input, Span output, uint[][] KW) + { + uint C0 = Pack.LE_To_UInt32(input); + uint C1 = Pack.LE_To_UInt32(input[4..]); + uint C2 = Pack.LE_To_UInt32(input[8..]); + uint C3 = Pack.LE_To_UInt32(input[12..]); + + uint[] kw = KW[0]; + uint t0 = C0 ^ kw[0]; + uint t1 = C1 ^ kw[1]; + uint t2 = C2 ^ kw[2]; + + uint r0, r1, r2, r3 = C3 ^ kw[3]; + int r = 1; + while (r < ROUNDS - 1) + { + kw = KW[r++]; + r0 = T0[t0 & 255] ^ Shift(T0[(t1 >> 8) & 255], 24) ^ Shift(T0[(t2 >> 16) & 255], 16) ^ Shift(T0[(r3 >> 24) & 255], 8) ^ kw[0]; + r1 = T0[t1 & 255] ^ Shift(T0[(t2 >> 8) & 255], 24) ^ Shift(T0[(r3 >> 16) & 255], 16) ^ Shift(T0[(t0 >> 24) & 255], 8) ^ kw[1]; + r2 = T0[t2 & 255] ^ Shift(T0[(r3 >> 8) & 255], 24) ^ Shift(T0[(t0 >> 16) & 255], 16) ^ Shift(T0[(t1 >> 24) & 255], 8) ^ kw[2]; + r3 = T0[r3 & 255] ^ Shift(T0[(t0 >> 8) & 255], 24) ^ Shift(T0[(t1 >> 16) & 255], 16) ^ Shift(T0[(t2 >> 24) & 255], 8) ^ kw[3]; + kw = KW[r++]; + t0 = T0[r0 & 255] ^ Shift(T0[(r1 >> 8) & 255], 24) ^ Shift(T0[(r2 >> 16) & 255], 16) ^ Shift(T0[(r3 >> 24) & 255], 8) ^ kw[0]; + t1 = T0[r1 & 255] ^ Shift(T0[(r2 >> 8) & 255], 24) ^ Shift(T0[(r3 >> 16) & 255], 16) ^ Shift(T0[(r0 >> 24) & 255], 8) ^ kw[1]; + t2 = T0[r2 & 255] ^ Shift(T0[(r3 >> 8) & 255], 24) ^ Shift(T0[(r0 >> 16) & 255], 16) ^ Shift(T0[(r1 >> 24) & 255], 8) ^ kw[2]; + r3 = T0[r3 & 255] ^ Shift(T0[(r0 >> 8) & 255], 24) ^ Shift(T0[(r1 >> 16) & 255], 16) ^ Shift(T0[(r2 >> 24) & 255], 8) ^ kw[3]; + } + + kw = KW[r++]; + r0 = T0[t0 & 255] ^ Shift(T0[(t1 >> 8) & 255], 24) ^ Shift(T0[(t2 >> 16) & 255], 16) ^ Shift(T0[(r3 >> 24) & 255], 8) ^ kw[0]; + r1 = T0[t1 & 255] ^ Shift(T0[(t2 >> 8) & 255], 24) ^ Shift(T0[(r3 >> 16) & 255], 16) ^ Shift(T0[(t0 >> 24) & 255], 8) ^ kw[1]; + r2 = T0[t2 & 255] ^ Shift(T0[(r3 >> 8) & 255], 24) ^ Shift(T0[(t0 >> 16) & 255], 16) ^ Shift(T0[(t1 >> 24) & 255], 8) ^ kw[2]; + r3 = T0[r3 & 255] ^ Shift(T0[(t0 >> 8) & 255], 24) ^ Shift(T0[(t1 >> 16) & 255], 16) ^ Shift(T0[(t2 >> 24) & 255], 8) ^ kw[3]; + + // the final round's table is a simple function of S so we don't use a whole other four tables for it + + kw = KW[r]; + C0 = (uint)S[r0 & 255] ^ (((uint)S[(r1 >> 8) & 255]) << 8) ^ (((uint)s[(r2 >> 16) & 255]) << 16) ^ (((uint)s[(r3 >> 24) & 255]) << 24) ^ kw[0]; + C1 = (uint)s[r1 & 255] ^ (((uint)S[(r2 >> 8) & 255]) << 8) ^ (((uint)S[(r3 >> 16) & 255]) << 16) ^ (((uint)s[(r0 >> 24) & 255]) << 24) ^ kw[1]; + C2 = (uint)s[r2 & 255] ^ (((uint)S[(r3 >> 8) & 255]) << 8) ^ (((uint)S[(r0 >> 16) & 255]) << 16) ^ (((uint)S[(r1 >> 24) & 255]) << 24) ^ kw[2]; + C3 = (uint)s[r3 & 255] ^ (((uint)s[(r0 >> 8) & 255]) << 8) ^ (((uint)s[(r1 >> 16) & 255]) << 16) ^ (((uint)S[(r2 >> 24) & 255]) << 24) ^ kw[3]; + + Pack.UInt32_To_LE(C0, output); + Pack.UInt32_To_LE(C1, output[4..]); + Pack.UInt32_To_LE(C2, output[8..]); + Pack.UInt32_To_LE(C3, output[12..]); + } + + private void DecryptBlock(ReadOnlySpan input, Span output, uint[][] KW) + { + uint C0 = Pack.LE_To_UInt32(input); + uint C1 = Pack.LE_To_UInt32(input[4..]); + uint C2 = Pack.LE_To_UInt32(input[8..]); + uint C3 = Pack.LE_To_UInt32(input[12..]); + + uint[] kw = KW[ROUNDS]; + uint t0 = C0 ^ kw[0]; + uint t1 = C1 ^ kw[1]; + uint t2 = C2 ^ kw[2]; + + uint r0, r1, r2, r3 = C3 ^ kw[3]; + int r = ROUNDS - 1; + while (r > 1) + { + kw = KW[r--]; + r0 = Tinv0[t0 & 255] ^ Shift(Tinv0[(r3 >> 8) & 255], 24) ^ Shift(Tinv0[(t2 >> 16) & 255], 16) ^ Shift(Tinv0[(t1 >> 24) & 255], 8) ^ kw[0]; + r1 = Tinv0[t1 & 255] ^ Shift(Tinv0[(t0 >> 8) & 255], 24) ^ Shift(Tinv0[(r3 >> 16) & 255], 16) ^ Shift(Tinv0[(t2 >> 24) & 255], 8) ^ kw[1]; + r2 = Tinv0[t2 & 255] ^ Shift(Tinv0[(t1 >> 8) & 255], 24) ^ Shift(Tinv0[(t0 >> 16) & 255], 16) ^ Shift(Tinv0[(r3 >> 24) & 255], 8) ^ kw[2]; + r3 = Tinv0[r3 & 255] ^ Shift(Tinv0[(t2 >> 8) & 255], 24) ^ Shift(Tinv0[(t1 >> 16) & 255], 16) ^ Shift(Tinv0[(t0 >> 24) & 255], 8) ^ kw[3]; + kw = KW[r--]; + t0 = Tinv0[r0 & 255] ^ Shift(Tinv0[(r3 >> 8) & 255], 24) ^ Shift(Tinv0[(r2 >> 16) & 255], 16) ^ Shift(Tinv0[(r1 >> 24) & 255], 8) ^ kw[0]; + t1 = Tinv0[r1 & 255] ^ Shift(Tinv0[(r0 >> 8) & 255], 24) ^ Shift(Tinv0[(r3 >> 16) & 255], 16) ^ Shift(Tinv0[(r2 >> 24) & 255], 8) ^ kw[1]; + t2 = Tinv0[r2 & 255] ^ Shift(Tinv0[(r1 >> 8) & 255], 24) ^ Shift(Tinv0[(r0 >> 16) & 255], 16) ^ Shift(Tinv0[(r3 >> 24) & 255], 8) ^ kw[2]; + r3 = Tinv0[r3 & 255] ^ Shift(Tinv0[(r2 >> 8) & 255], 24) ^ Shift(Tinv0[(r1 >> 16) & 255], 16) ^ Shift(Tinv0[(r0 >> 24) & 255], 8) ^ kw[3]; + } + + kw = KW[1]; + r0 = Tinv0[t0 & 255] ^ Shift(Tinv0[(r3 >> 8) & 255], 24) ^ Shift(Tinv0[(t2 >> 16) & 255], 16) ^ Shift(Tinv0[(t1 >> 24) & 255], 8) ^ kw[0]; + r1 = Tinv0[t1 & 255] ^ Shift(Tinv0[(t0 >> 8) & 255], 24) ^ Shift(Tinv0[(r3 >> 16) & 255], 16) ^ Shift(Tinv0[(t2 >> 24) & 255], 8) ^ kw[1]; + r2 = Tinv0[t2 & 255] ^ Shift(Tinv0[(t1 >> 8) & 255], 24) ^ Shift(Tinv0[(t0 >> 16) & 255], 16) ^ Shift(Tinv0[(r3 >> 24) & 255], 8) ^ kw[2]; + r3 = Tinv0[r3 & 255] ^ Shift(Tinv0[(t2 >> 8) & 255], 24) ^ Shift(Tinv0[(t1 >> 16) & 255], 16) ^ Shift(Tinv0[(t0 >> 24) & 255], 8) ^ kw[3]; + + // the final round's table is a simple function of Si so we don't use a whole other four tables for it + + kw = KW[0]; + C0 = (uint)Si[r0 & 255] ^ (((uint)s[(r3 >> 8) & 255]) << 8) ^ (((uint)s[(r2 >> 16) & 255]) << 16) ^ (((uint)Si[(r1 >> 24) & 255]) << 24) ^ kw[0]; + C1 = (uint)s[r1 & 255] ^ (((uint)s[(r0 >> 8) & 255]) << 8) ^ (((uint)Si[(r3 >> 16) & 255]) << 16) ^ (((uint)s[(r2 >> 24) & 255]) << 24) ^ kw[1]; + C2 = (uint)s[r2 & 255] ^ (((uint)Si[(r1 >> 8) & 255]) << 8) ^ (((uint)Si[(r0 >> 16) & 255]) << 16) ^ (((uint)s[(r3 >> 24) & 255]) << 24) ^ kw[2]; + C3 = (uint)Si[r3 & 255] ^ (((uint)s[(r2 >> 8) & 255]) << 8) ^ (((uint)s[(r1 >> 16) & 255]) << 16) ^ (((uint)s[(r0 >> 24) & 255]) << 24) ^ kw[3]; + + Pack.UInt32_To_LE(C0, output); + Pack.UInt32_To_LE(C1, output[4..]); + Pack.UInt32_To_LE(C2, output[8..]); + Pack.UInt32_To_LE(C3, output[12..]); + } +#else + private void EncryptBlock(byte[] input, int inOff, byte[] output, int outOff, uint[][] KW) + { + FastAesEngineHelper.EncryptBlock(input, inOff, output, outOff, KW, ROUNDS, T0, S, s); + //uint C0 = Pack.LE_To_UInt32(input, inOff + 0); + //uint C1 = Pack.LE_To_UInt32(input, inOff + 4); + //uint C2 = Pack.LE_To_UInt32(input, inOff + 8); + //uint C3 = Pack.LE_To_UInt32(input, inOff + 12); + // + //uint[] kw = KW[0]; + //uint t0 = C0 ^ kw[0]; + //uint t1 = C1 ^ kw[1]; + //uint t2 = C2 ^ kw[2]; + // + //uint r0, r1, r2, r3 = C3 ^ kw[3]; + //int r = 1; + //while (r < ROUNDS - 1) + //{ + // kw = KW[r++]; + // r0 = T0[t0 & 255] ^ Shift(T0[(t1 >> 8) & 255], 24) ^ Shift(T0[(t2 >> 16) & 255], 16) ^ Shift(T0[(r3 >> 24) & 255], 8) ^ kw[0]; + // r1 = T0[t1 & 255] ^ Shift(T0[(t2 >> 8) & 255], 24) ^ Shift(T0[(r3 >> 16) & 255], 16) ^ Shift(T0[(t0 >> 24) & 255], 8) ^ kw[1]; + // r2 = T0[t2 & 255] ^ Shift(T0[(r3 >> 8) & 255], 24) ^ Shift(T0[(t0 >> 16) & 255], 16) ^ Shift(T0[(t1 >> 24) & 255], 8) ^ kw[2]; + // r3 = T0[r3 & 255] ^ Shift(T0[(t0 >> 8) & 255], 24) ^ Shift(T0[(t1 >> 16) & 255], 16) ^ Shift(T0[(t2 >> 24) & 255], 8) ^ kw[3]; + // kw = KW[r++]; + // t0 = T0[r0 & 255] ^ Shift(T0[(r1 >> 8) & 255], 24) ^ Shift(T0[(r2 >> 16) & 255], 16) ^ Shift(T0[(r3 >> 24) & 255], 8) ^ kw[0]; + // t1 = T0[r1 & 255] ^ Shift(T0[(r2 >> 8) & 255], 24) ^ Shift(T0[(r3 >> 16) & 255], 16) ^ Shift(T0[(r0 >> 24) & 255], 8) ^ kw[1]; + // t2 = T0[r2 & 255] ^ Shift(T0[(r3 >> 8) & 255], 24) ^ Shift(T0[(r0 >> 16) & 255], 16) ^ Shift(T0[(r1 >> 24) & 255], 8) ^ kw[2]; + // r3 = T0[r3 & 255] ^ Shift(T0[(r0 >> 8) & 255], 24) ^ Shift(T0[(r1 >> 16) & 255], 16) ^ Shift(T0[(r2 >> 24) & 255], 8) ^ kw[3]; + //} + // + //kw = KW[r++]; + //r0 = T0[t0 & 255] ^ Shift(T0[(t1 >> 8) & 255], 24) ^ Shift(T0[(t2 >> 16) & 255], 16) ^ Shift(T0[(r3 >> 24) & 255], 8) ^ kw[0]; + //r1 = T0[t1 & 255] ^ Shift(T0[(t2 >> 8) & 255], 24) ^ Shift(T0[(r3 >> 16) & 255], 16) ^ Shift(T0[(t0 >> 24) & 255], 8) ^ kw[1]; + //r2 = T0[t2 & 255] ^ Shift(T0[(r3 >> 8) & 255], 24) ^ Shift(T0[(t0 >> 16) & 255], 16) ^ Shift(T0[(t1 >> 24) & 255], 8) ^ kw[2]; + //r3 = T0[r3 & 255] ^ Shift(T0[(t0 >> 8) & 255], 24) ^ Shift(T0[(t1 >> 16) & 255], 16) ^ Shift(T0[(t2 >> 24) & 255], 8) ^ kw[3]; + // + //// the final round's table is a simple function of S so we don't use a whole other four tables for it + // + //kw = KW[r]; + //C0 = (uint)S[r0 & 255] ^ (((uint)S[(r1 >> 8) & 255]) << 8) ^ (((uint)s[(r2 >> 16) & 255]) << 16) ^ (((uint)s[(r3 >> 24) & 255]) << 24) ^ kw[0]; + //C1 = (uint)s[r1 & 255] ^ (((uint)S[(r2 >> 8) & 255]) << 8) ^ (((uint)S[(r3 >> 16) & 255]) << 16) ^ (((uint)s[(r0 >> 24) & 255]) << 24) ^ kw[1]; + //C2 = (uint)s[r2 & 255] ^ (((uint)S[(r3 >> 8) & 255]) << 8) ^ (((uint)S[(r0 >> 16) & 255]) << 16) ^ (((uint)S[(r1 >> 24) & 255]) << 24) ^ kw[2]; + //C3 = (uint)s[r3 & 255] ^ (((uint)s[(r0 >> 8) & 255]) << 8) ^ (((uint)s[(r1 >> 16) & 255]) << 16) ^ (((uint)S[(r2 >> 24) & 255]) << 24) ^ kw[3]; + // + //Pack.UInt32_To_LE(C0, output, outOff + 0); + //Pack.UInt32_To_LE(C1, output, outOff + 4); + //Pack.UInt32_To_LE(C2, output, outOff + 8); + //Pack.UInt32_To_LE(C3, output, outOff + 12); + } + + private void DecryptBlock(byte[] input, int inOff, byte[] output, int outOff, uint[][] KW) + { + uint C0 = Pack.LE_To_UInt32(input, inOff + 0); + uint C1 = Pack.LE_To_UInt32(input, inOff + 4); + uint C2 = Pack.LE_To_UInt32(input, inOff + 8); + uint C3 = Pack.LE_To_UInt32(input, inOff + 12); + + uint[] kw = KW[ROUNDS]; + uint t0 = C0 ^ kw[0]; + uint t1 = C1 ^ kw[1]; + uint t2 = C2 ^ kw[2]; + + uint r0, r1, r2, r3 = C3 ^ kw[3]; + int r = ROUNDS - 1; + while (r > 1) + { + kw = KW[r--]; + r0 = Tinv0[t0 & 255] ^ Shift(Tinv0[(r3 >> 8) & 255], 24) ^ Shift(Tinv0[(t2 >> 16) & 255], 16) ^ Shift(Tinv0[(t1 >> 24) & 255], 8) ^ kw[0]; + r1 = Tinv0[t1 & 255] ^ Shift(Tinv0[(t0 >> 8) & 255], 24) ^ Shift(Tinv0[(r3 >> 16) & 255], 16) ^ Shift(Tinv0[(t2 >> 24) & 255], 8) ^ kw[1]; + r2 = Tinv0[t2 & 255] ^ Shift(Tinv0[(t1 >> 8) & 255], 24) ^ Shift(Tinv0[(t0 >> 16) & 255], 16) ^ Shift(Tinv0[(r3 >> 24) & 255], 8) ^ kw[2]; + r3 = Tinv0[r3 & 255] ^ Shift(Tinv0[(t2 >> 8) & 255], 24) ^ Shift(Tinv0[(t1 >> 16) & 255], 16) ^ Shift(Tinv0[(t0 >> 24) & 255], 8) ^ kw[3]; + kw = KW[r--]; + t0 = Tinv0[r0 & 255] ^ Shift(Tinv0[(r3 >> 8) & 255], 24) ^ Shift(Tinv0[(r2 >> 16) & 255], 16) ^ Shift(Tinv0[(r1 >> 24) & 255], 8) ^ kw[0]; + t1 = Tinv0[r1 & 255] ^ Shift(Tinv0[(r0 >> 8) & 255], 24) ^ Shift(Tinv0[(r3 >> 16) & 255], 16) ^ Shift(Tinv0[(r2 >> 24) & 255], 8) ^ kw[1]; + t2 = Tinv0[r2 & 255] ^ Shift(Tinv0[(r1 >> 8) & 255], 24) ^ Shift(Tinv0[(r0 >> 16) & 255], 16) ^ Shift(Tinv0[(r3 >> 24) & 255], 8) ^ kw[2]; + r3 = Tinv0[r3 & 255] ^ Shift(Tinv0[(r2 >> 8) & 255], 24) ^ Shift(Tinv0[(r1 >> 16) & 255], 16) ^ Shift(Tinv0[(r0 >> 24) & 255], 8) ^ kw[3]; + } + + kw = KW[1]; + r0 = Tinv0[t0 & 255] ^ Shift(Tinv0[(r3 >> 8) & 255], 24) ^ Shift(Tinv0[(t2 >> 16) & 255], 16) ^ Shift(Tinv0[(t1 >> 24) & 255], 8) ^ kw[0]; + r1 = Tinv0[t1 & 255] ^ Shift(Tinv0[(t0 >> 8) & 255], 24) ^ Shift(Tinv0[(r3 >> 16) & 255], 16) ^ Shift(Tinv0[(t2 >> 24) & 255], 8) ^ kw[1]; + r2 = Tinv0[t2 & 255] ^ Shift(Tinv0[(t1 >> 8) & 255], 24) ^ Shift(Tinv0[(t0 >> 16) & 255], 16) ^ Shift(Tinv0[(r3 >> 24) & 255], 8) ^ kw[2]; + r3 = Tinv0[r3 & 255] ^ Shift(Tinv0[(t2 >> 8) & 255], 24) ^ Shift(Tinv0[(t1 >> 16) & 255], 16) ^ Shift(Tinv0[(t0 >> 24) & 255], 8) ^ kw[3]; + + // the final round's table is a simple function of Si so we don't use a whole other four tables for it + + kw = KW[0]; + C0 = (uint)Si[r0 & 255] ^ (((uint)s[(r3 >> 8) & 255]) << 8) ^ (((uint)s[(r2 >> 16) & 255]) << 16) ^ (((uint)Si[(r1 >> 24) & 255]) << 24) ^ kw[0]; + C1 = (uint)s[r1 & 255] ^ (((uint)s[(r0 >> 8) & 255]) << 8) ^ (((uint)Si[(r3 >> 16) & 255]) << 16) ^ (((uint)s[(r2 >> 24) & 255]) << 24) ^ kw[1]; + C2 = (uint)s[r2 & 255] ^ (((uint)Si[(r1 >> 8) & 255]) << 8) ^ (((uint)Si[(r0 >> 16) & 255]) << 16) ^ (((uint)s[(r3 >> 24) & 255]) << 24) ^ kw[2]; + C3 = (uint)Si[r3 & 255] ^ (((uint)s[(r2 >> 8) & 255]) << 8) ^ (((uint)s[(r1 >> 16) & 255]) << 16) ^ (((uint)s[(r0 >> 24) & 255]) << 24) ^ kw[3]; + + Pack.UInt32_To_LE(C0, output, outOff + 0); + Pack.UInt32_To_LE(C1, output, outOff + 4); + Pack.UInt32_To_LE(C2, output, outOff + 8); + Pack.UInt32_To_LE(C3, output, outOff + 12); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastAesEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastAesEngine.cs.meta new file mode 100644 index 000000000..646141d3a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastAesEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04025dfce7b22d142b61813959b98226 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastAesEngineHelper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastAesEngineHelper.cs new file mode 100644 index 000000000..76f14cc2d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastAesEngineHelper.cs @@ -0,0 +1,195 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.Connections.TLS.Crypto.Impl +{ + internal static class FastAesEngineHelper + { + public unsafe static void EncryptBlock(byte[] input, int inOff, byte[] output, int outOff, uint[][] KW, int ROUNDS, uint[] T0, byte[] S, byte[] s) + { + uint C0 = Pack.LE_To_UInt32(input, inOff + 0); + uint C1 = Pack.LE_To_UInt32(input, inOff + 4); + uint C2 = Pack.LE_To_UInt32(input, inOff + 8); + uint C3 = Pack.LE_To_UInt32(input, inOff + 12); + + uint[] kw = KW[0]; + uint t0 = C0 ^ kw[0]; + uint t1 = C1 ^ kw[1]; + uint t2 = C2 ^ kw[2]; + + uint r0, r1, r2, r3 = C3 ^ kw[3]; + int r = 1; + + byte idx; + uint tmp1, tmp2, tmp3; + + fixed (uint* pT0 = T0) + { + while (r < ROUNDS - 1) + { + kw = KW[r++]; + + fixed (uint* pkw = kw) + { + idx = (byte)(t1 >> 8); + tmp1 = (pT0[idx] >> 24) | (pT0[idx] << 8); + + idx = (byte)(t2 >> 16); + tmp2 = (pT0[idx] >> 16) | (pT0[idx] << 16); + + idx = (byte)(r3 >> 24); + tmp3 = (pT0[idx] >> 8) | (pT0[idx] << 24); + r0 = pT0[t0 & 255] ^ tmp1 ^ tmp2 ^ tmp3 ^ pkw[0]; + + idx = (byte)(t2 >> 8); + tmp1 = (pT0[idx] >> 24) | (pT0[idx] << 8); + + idx = (byte)(r3 >> 16); + tmp2 = (pT0[idx] >> 16) | (pT0[idx] << 16); + + idx = (byte)(t0 >> 24); + tmp3 = (pT0[idx] >> 8) | (pT0[idx] << 24); + r1 = pT0[t1 & 255] ^ tmp1 ^ tmp2 ^ tmp3 ^ pkw[1]; + + idx = (byte)(r3 >> 8); + tmp1 = (pT0[idx] >> 24) | (pT0[idx] << 8); + + idx = (byte)(t0 >> 16); + tmp2 = (pT0[idx] >> 16) | (pT0[idx] << 16); + + idx = (byte)(t1 >> 24); + tmp3 = (pT0[idx] >> 8) | (pT0[idx] << 24); + + r2 = pT0[t2 & 255] ^ tmp1 ^ tmp2 ^ tmp3 ^ pkw[2]; + + idx = (byte)(t0 >> 8); + tmp1 = (pT0[idx] >> 24) | (pT0[idx] << 8); + + idx = (byte)(t1 >> 16); + tmp2 = (pT0[idx] >> 16) | (pT0[idx] << 16); + + idx = (byte)(t2 >> 24); + tmp3 = (pT0[idx] >> 8) | (pT0[idx] << 24); + + r3 = pT0[r3 & 255] ^ tmp1 ^ tmp2 ^ tmp3 ^ pkw[3]; + } + + kw = KW[r++]; + + fixed (uint* pkw = kw) + { + idx = (byte)(r1 >> 8); + tmp1 = (pT0[idx] >> 24) | (pT0[idx] << 8); + + idx = (byte)(r2 >> 16); + tmp2 = (pT0[idx] >> 16) | (pT0[idx] << 16); + + idx = (byte)(r3 >> 24); + tmp3 = (pT0[idx] >> 8) | (pT0[idx] << 24); + t0 = pT0[r0 & 255] ^ tmp1 ^ tmp2 ^ tmp3 ^ pkw[0]; + + idx = (byte)(r2 >> 8); + tmp1 = (pT0[idx] >> 24) | (pT0[idx] << 8); + + idx = (byte)(r3 >> 16); + tmp2 = (pT0[idx] >> 16) | (pT0[idx] << 16); + + idx = (byte)(r0 >> 24); + tmp3 = (pT0[idx] >> 8) | (pT0[idx] << 24); + t1 = pT0[r1 & 255] ^ tmp1 ^ tmp2 ^ tmp3 ^ pkw[1]; + + idx = (byte)(r3 >> 8); + tmp1 = (pT0[idx] >> 24) | (pT0[idx] << 8); + + idx = (byte)(r0 >> 16); + tmp2 = (pT0[idx] >> 16) | (pT0[idx] << 16); + + idx = (byte)(r1 >> 24); + tmp3 = (pT0[idx] >> 8) | (pT0[idx] << 24); + + t2 = pT0[r2 & 255] ^ tmp1 ^ tmp2 ^ tmp3 ^ pkw[2]; + + idx = (byte)(r0 >> 8); + tmp1 = (pT0[idx] >> 24) | (pT0[idx] << 8); + + idx = (byte)(r1 >> 16); + tmp2 = (pT0[idx] >> 16) | (pT0[idx] << 16); + + idx = (byte)(r2 >> 24); + tmp3 = (pT0[idx] >> 8) | (pT0[idx] << 24); + r3 = pT0[r3 & 255] ^ tmp1 ^ tmp2 ^ tmp3 ^ pkw[3]; + } + } + + kw = KW[r++]; + + fixed (uint* pkw = kw) + { + idx = (byte)(t1 >> 8); + tmp1 = (pT0[idx] >> 24) | (pT0[idx] << 8); + + idx = (byte)(t2 >> 16); + tmp2 = (pT0[idx] >> 16) | (pT0[idx] << 16); + + idx = (byte)(r3 >> 24); + tmp3 = (pT0[idx] >> 8) | (pT0[idx] << 24); + r0 = pT0[t0 & 255] ^ tmp1 ^ tmp2 ^ tmp3 ^ pkw[0]; + + idx = (byte)(t2 >> 8); + tmp1 = (pT0[idx] >> 24) | (pT0[idx] << 8); + + idx = (byte)(r3 >> 16); + tmp2 = (pT0[idx] >> 16) | (pT0[idx] << 16); + + idx = (byte)(t0 >> 24); + tmp3 = (pT0[idx] >> 8) | (pT0[idx] << 24); + + r1 = pT0[t1 & 255] ^ tmp1 ^ tmp2 ^ tmp3 ^ pkw[1]; + + idx = (byte)(r3 >> 8); + tmp1 = (pT0[idx] >> 24) | (pT0[idx] << 8); + + idx = (byte)(t0 >> 16); + tmp2 = (pT0[idx] >> 16) | (pT0[idx] << 16); + + idx = (byte)(t1 >> 24); + tmp3 = (pT0[idx] >> 8) | (pT0[idx] << 24); + + r2 = pT0[t2 & 255] ^ tmp1 ^ tmp2 ^ tmp3 ^ pkw[2]; + + idx = (byte)(t0 >> 8); + tmp1 = (pT0[idx] >> 24) | (pT0[idx] << 8); + + idx = (byte)(t1 >> 16); + tmp2 = (pT0[idx] >> 16) | (pT0[idx] << 16); + + idx = (byte)(t2 >> 24); + tmp3 = (pT0[idx] >> 8) | (pT0[idx] << 24); + + r3 = pT0[r3 & 255] ^ tmp1 ^ tmp2 ^ tmp3 ^ pkw[3]; + } + + // the final round's table is a simple function of S so we don't use a whole other four tables for it + + kw = KW[r]; + + fixed (byte* pS = S, ps = s) + fixed (uint* pkw = kw) + { + C0 = (uint)pS[(byte)r0] ^ (((uint)pS[(byte)(r1 >> 8)]) << 8) ^ (((uint)ps[(byte)(r2 >> 16)]) << 16) ^ (((uint)ps[(byte)(r3 >> 24)]) << 24) ^ pkw[0]; + C1 = (uint)ps[(byte)r1] ^ (((uint)pS[(byte)(r2 >> 8)]) << 8) ^ (((uint)pS[(byte)(r3 >> 16)]) << 16) ^ (((uint)ps[(byte)(r0 >> 24)]) << 24) ^ pkw[1]; + C2 = (uint)ps[(byte)r2] ^ (((uint)pS[(byte)(r3 >> 8)]) << 8) ^ (((uint)pS[(byte)(r0 >> 16)]) << 16) ^ (((uint)pS[(byte)(r1 >> 24)]) << 24) ^ pkw[2]; + C3 = (uint)ps[(byte)r3] ^ (((uint)ps[(byte)(r0 >> 8)]) << 8) ^ (((uint)ps[(byte)(r1 >> 16)]) << 16) ^ (((uint)pS[(byte)(r2 >> 24)]) << 24) ^ pkw[3]; + } + } + + Pack.UInt32_To_LE(C0, output, outOff + 0); + Pack.UInt32_To_LE(C1, output, outOff + 4); + Pack.UInt32_To_LE(C2, output, outOff + 8); + Pack.UInt32_To_LE(C3, output, outOff + 12); + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastAesEngineHelper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastAesEngineHelper.cs.meta new file mode 100644 index 000000000..b86d5022a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastAesEngineHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f41ac81f5b4391419ba276b4bb78044 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastBcChaCha20Poly1305.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastBcChaCha20Poly1305.cs new file mode 100644 index 000000000..e49e61c0a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastBcChaCha20Poly1305.cs @@ -0,0 +1,189 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls; +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP.Connections.TLS.Crypto.Impl +{ + public sealed class FastBcChaCha20Poly1305 + : TlsAeadCipherImpl + { + private static readonly byte[] Zeroes = new byte[15]; + + private readonly FastChaCha7539Engine m_cipher = new FastChaCha7539Engine(); + private readonly FastPoly1305 m_mac = new FastPoly1305(); + + private readonly bool m_isEncrypting; + + private int m_additionalDataLength; + + public FastBcChaCha20Poly1305(bool isEncrypting) + { + this.m_isEncrypting = isEncrypting; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + unsafe +#endif + public int DoFinal(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset) + { + if (m_isEncrypting) + { + int ciphertextLength = inputLength; + + m_cipher.DoFinal(input, inputOffset, inputLength, output, outputOffset); + int outputLength = inputLength; + + if (ciphertextLength != outputLength) + throw new InvalidOperationException(); + + UpdateMac(output, outputOffset, ciphertextLength); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span lengths = stackalloc byte[16]; + + Pack.UInt64_To_LE((ulong)m_additionalDataLength, lengths); + Pack.UInt64_To_LE((ulong)ciphertextLength, lengths[8..]); + + m_mac.BlockUpdate(lengths); + m_mac.DoFinal(output.AsSpan(outputOffset + ciphertextLength)); +#else + byte[] lengths = BufferPool.Get(16, true); + using (var _ = new PooledBuffer(lengths)) + { + Pack.UInt64_To_LE((ulong)m_additionalDataLength, lengths, 0); + Pack.UInt64_To_LE((ulong)ciphertextLength, lengths, 8); + + m_mac.BlockUpdate(lengths, 0, 16); + m_mac.DoFinal(output, outputOffset + ciphertextLength); + } +#endif + + return ciphertextLength + 16; + } + else + { + int ciphertextLength = inputLength - 16; + + UpdateMac(input, inputOffset, ciphertextLength); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span expectedMac = stackalloc byte[16]; + + Pack.UInt64_To_LE((ulong)m_additionalDataLength, expectedMac); + Pack.UInt64_To_LE((ulong)ciphertextLength, expectedMac[8..]); + + m_mac.BlockUpdate(expectedMac); + m_mac.DoFinal(expectedMac); + + bool badMac = !TlsUtilities.ConstantTimeAreEqual(16, expectedMac, 0, input, inputOffset + ciphertextLength); + + if (badMac) + throw new TlsFatalAlert(AlertDescription.bad_record_mac); +#else + byte[] expectedMac = BufferPool.Get(16, true); + using (var _ = new PooledBuffer(expectedMac)) + { + Pack.UInt64_To_LE((ulong)m_additionalDataLength, expectedMac, 0); + Pack.UInt64_To_LE((ulong)ciphertextLength, expectedMac, 8); + + m_mac.BlockUpdate(expectedMac, 0, 16); + m_mac.DoFinal(expectedMac, 0); + + bool badMac = !TlsUtilities.ConstantTimeAreEqual(16, expectedMac, 0, input, inputOffset + ciphertextLength); + + if (badMac) + throw new TlsFatalAlert(AlertDescription.bad_record_mac); + } +#endif + + m_cipher.DoFinal(input, inputOffset, ciphertextLength, output, outputOffset); + int outputLength = ciphertextLength; + + if (ciphertextLength != outputLength) + throw new InvalidOperationException(); + + return ciphertextLength; + } + } + + public int GetOutputSize(int inputLength) + { + return m_isEncrypting ? inputLength + 16 : inputLength - 16; + } + + public void Init(byte[] nonce, int macSize, byte[] additionalData) + { + if (nonce == null || nonce.Length != 12 || macSize != 16) + throw new TlsFatalAlert(AlertDescription.internal_error); + + m_cipher.Init(m_isEncrypting, new ParametersWithIV(null, nonce)); + InitMac(); + if (additionalData == null) + { + this.m_additionalDataLength = 0; + } + else + { + this.m_additionalDataLength = additionalData.Length; + UpdateMac(additionalData, 0, additionalData.Length); + } + } + + public void Reset() + { + m_cipher.Reset(); + m_mac.Reset(); + } + + public void SetKey(byte[] key, int keyOff, int keyLen) + { + KeyParameter cipherKey = new KeyParameter(key, keyOff, keyLen); + m_cipher.Init(m_isEncrypting, new ParametersWithIV(cipherKey, Zeroes, 0, 12)); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void SetKey(ReadOnlySpan key) + { + KeyParameter cipherKey = new KeyParameter(key); + m_cipher.Init(m_isEncrypting, new ParametersWithIV(cipherKey, Zeroes[..12])); + } +#endif + + byte[] firstBlock = new byte[64]; + private void InitMac() + { + m_cipher.ProcessBytes(firstBlock, 0, 64, firstBlock, 0); + m_mac.Init(new KeyParameter(firstBlock, 0, 32)); + Array.Clear(firstBlock, 0, firstBlock.Length); + } + + private void UpdateMac(byte[] buf, int off, int len) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + m_mac.BlockUpdate(buf.AsSpan(off, len)); +#else + m_mac.BlockUpdate(buf, off, len); +#endif + + int partial = len % 16; + if (partial != 0) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + m_mac.BlockUpdate(Zeroes.AsSpan(0, 16 - partial)); +#else + m_mac.BlockUpdate(Zeroes, 0, 16 - partial); +#endif + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastBcChaCha20Poly1305.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastBcChaCha20Poly1305.cs.meta new file mode 100644 index 000000000..f103ecc43 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastBcChaCha20Poly1305.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8147dce9f66d3aa42acf242bd200aa46 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastCbcBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastCbcBlockCipher.cs new file mode 100644 index 000000000..2a2919542 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastCbcBlockCipher.cs @@ -0,0 +1,229 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.Connections.TLS.Crypto.Impl; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.Connections.TLS.Crypto +{ + /** + * implements Cipher-Block-Chaining (CBC) mode on top of a simple cipher. + */ + + + + [BestHTTP.PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstructionAttribute] + public sealed class FastCbcBlockCipher + : IBlockCipherMode + { + private byte[] IV, cbcV, cbcNextV; + private int blockSize; + private IBlockCipher cipher; + private bool encrypting; + + /** + * Basic constructor. + * + * @param cipher the block cipher to be used as the basis of chaining. + */ + public FastCbcBlockCipher( + IBlockCipher cipher) + { + this.cipher = cipher; + this.blockSize = cipher.GetBlockSize(); + + this.IV = new byte[blockSize]; + this.cbcV = new byte[blockSize]; + this.cbcNextV = new byte[blockSize]; + } + + /** + * return the underlying block cipher that we are wrapping. + * + * @return the underlying block cipher that we are wrapping. + */ + public IBlockCipher UnderlyingCipher => cipher; + + /** + * Initialise the cipher and, possibly, the initialisation vector (IV). + * If an IV isn't passed as part of the parameter, the IV will be all zeros. + * + * @param forEncryption if true the cipher is initialised for + * encryption, if false for decryption. + * @param param the key and other data required by the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public void Init(bool forEncryption, ICipherParameters parameters) + { + bool oldEncrypting = this.encrypting; + + this.encrypting = forEncryption; + + if (parameters is ParametersWithIV ivParam) + { + byte[] iv = ivParam.GetIV(); + + if (iv.Length != blockSize) + throw new ArgumentException("initialisation vector must be the same length as block size"); + + Array.Copy(iv, 0, IV, 0, iv.Length); + + parameters = ivParam.Parameters; + } + + Reset(); + + // if null it's an IV changed only. + if (parameters != null) + { + cipher.Init(encrypting, parameters); + } + else if (oldEncrypting != encrypting) + { + throw new ArgumentException("cannot change encrypting state without providing key."); + } + } + + /** + * return the algorithm name and mode. + * + * @return the name of the underlying algorithm followed by "/CBC". + */ + public string AlgorithmName + { + get { return cipher.AlgorithmName + "/CBC"; } + } + + public bool IsPartialBlockOkay + { + get { return false; } + } + + /** + * return the block size of the underlying cipher. + * + * @return the block size of the underlying cipher. + */ + public int GetBlockSize() + { + return cipher.GetBlockSize(); + } + + public int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return encrypting + ? EncryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)) + : DecryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); +#else + return encrypting + ? EncryptBlock(input, inOff, output, outOff) + : DecryptBlock(input, inOff, output, outOff); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessBlock(ReadOnlySpan input, Span output) + { + return encrypting + ? EncryptBlock(input, output) + : DecryptBlock(input, output); + } +#endif + + /** + * reset the chaining vector back to the IV and reset the underlying + * cipher. + */ + public void Reset() + { + Array.Copy(IV, 0, cbcV, 0, IV.Length); + Array.Clear(cbcNextV, 0, cbcNextV.Length); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int EncryptBlock(ReadOnlySpan input, Span output) + { + Check.DataLength(input, blockSize, "input buffer too short"); + Check.OutputLength(output, blockSize, "output buffer too short"); + + for (int i = 0; i < blockSize; i++) + { + cbcV[i] ^= input[i]; + } + + int length = cipher.ProcessBlock(cbcV, output); + + output[..blockSize].CopyTo(cbcV); + + return length; + } + + private int DecryptBlock(ReadOnlySpan input, Span output) + { + Check.DataLength(input, blockSize, "input buffer too short"); + Check.OutputLength(output, blockSize, "output buffer too short"); + + input[..blockSize].CopyTo(cbcNextV); + + int length = cipher.ProcessBlock(input, output); + + for (int i = 0; i < blockSize; i++) + { + output[i] ^= cbcV[i]; + } + + byte[] tmp = cbcV; + cbcV = cbcNextV; + cbcNextV = tmp; + + return length; + } +#else + private int EncryptBlock(byte[] input, int inOff, byte[] outBytes, int outOff) + { + Check.DataLength(input, inOff, blockSize, "input buffer too short"); + Check.OutputLength(outBytes, outOff, blockSize, "output buffer too short"); + + for (int i = 0; i < blockSize; i++) + { + cbcV[i] ^= input[inOff + i]; + } + + int length = cipher.ProcessBlock(cbcV, 0, outBytes, outOff); + + Array.Copy(outBytes, outOff, cbcV, 0, cbcV.Length); + + return length; + } + + private int DecryptBlock(byte[] input, int inOff, byte[] outBytes, int outOff) + { + Check.DataLength(input, inOff, blockSize, "input buffer too short"); + Check.OutputLength(outBytes, outOff, blockSize, "output buffer too short"); + + Array.Copy(input, inOff, cbcNextV, 0, blockSize); + + int length = cipher.ProcessBlock(input, inOff, outBytes, outOff); + + for (int i = 0; i < blockSize; i++) + { + outBytes[outOff + i] ^= cbcV[i]; + } + + byte[] tmp = cbcV; + cbcV = cbcNextV; + cbcNextV = tmp; + + return length; + } +#endif + } + +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastCbcBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastCbcBlockCipher.cs.meta new file mode 100644 index 000000000..52e4dcb17 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastCbcBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 885849ed4738c9c4197fbee14f00dd5e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastCcmBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastCcmBlockCipher.cs new file mode 100644 index 000000000..3d6483821 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastCcmBlockCipher.cs @@ -0,0 +1,661 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.Connections.TLS.Crypto.Impl +{ + /** + * Implements the Counter with Cipher Block Chaining mode (CCM) detailed in + * NIST Special Publication 800-38C. + *

+ * Note: this mode is a packet mode - it needs all the data up front. + *

+ */ + public class FastCcmBlockCipher + : IAeadBlockCipher + { + private static readonly int BlockSize = 16; + + private readonly IBlockCipher cipher; + private readonly byte[] macBlock; + private bool forEncryption; + private byte[] nonce; + private byte[] initialAssociatedText; + private int macSize; + private ICipherParameters keyParam; + private readonly MemoryStream associatedText = new MemoryStream(); + private readonly MemoryStream data = new MemoryStream(); + + /** + * Basic constructor. + * + * @param cipher the block cipher to be used. + */ + public FastCcmBlockCipher( + IBlockCipher cipher) + { + this.cipher = cipher; + this.macBlock = new byte[BlockSize]; + + if (cipher.GetBlockSize() != BlockSize) + throw new ArgumentException("cipher required with a block size of " + BlockSize + "."); + } + + /** + * return the underlying block cipher that we are wrapping. + * + * @return the underlying block cipher that we are wrapping. + */ + public virtual IBlockCipher UnderlyingCipher => cipher; + + public virtual void Init(bool forEncryption, ICipherParameters parameters) + { + this.forEncryption = forEncryption; + + ICipherParameters cipherParameters; + if (parameters is AeadParameters aeadParameters) + { + nonce = aeadParameters.GetNonce(); + initialAssociatedText = aeadParameters.GetAssociatedText(); + macSize = GetMacSize(forEncryption, aeadParameters.MacSize); + cipherParameters = aeadParameters.Key; + } + else if (parameters is ParametersWithIV parametersWithIV) + { + nonce = parametersWithIV.GetIV(); + initialAssociatedText = null; + macSize = GetMacSize(forEncryption, 64); + cipherParameters = parametersWithIV.Parameters; + } + else + { + throw new ArgumentException("invalid parameters passed to CCM"); + } + + // NOTE: Very basic support for key re-use, but no performance gain from it + if (cipherParameters != null) + { + keyParam = cipherParameters; + } + + if (nonce == null || nonce.Length < 7 || nonce.Length > 13) + throw new ArgumentException("nonce must have length from 7 to 13 octets"); + + Reset(); + } + + public virtual string AlgorithmName => cipher.AlgorithmName + "/CCM"; + + public virtual int GetBlockSize() + { + return cipher.GetBlockSize(); + } + + public virtual void ProcessAadByte(byte input) + { + associatedText.WriteByte(input); + } + + public virtual void ProcessAadBytes(byte[] inBytes, int inOff, int len) + { + // TODO: Process AAD online + associatedText.Write(inBytes, inOff, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void ProcessAadBytes(ReadOnlySpan input) + { + // TODO: Process AAD online + associatedText.Write(input); + } +#endif + + public virtual int ProcessByte(byte input, byte[] outBytes, int outOff) + { + data.WriteByte(input); + + return 0; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessByte(byte input, Span output) + { + data.WriteByte(input); + + return 0; + } +#endif + + public virtual int ProcessBytes(byte[] inBytes, int inOff, int inLen, byte[] outBytes, int outOff) + { + Check.DataLength(inBytes, inOff, inLen, "input buffer too short"); + + data.Write(inBytes, inOff, inLen); + + return 0; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBytes(ReadOnlySpan input, Span output) + { + data.Write(input); + + return 0; + } +#endif + + public virtual int DoFinal(byte[] outBytes, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(outBytes.AsSpan(outOff)); +#else + byte[] input = data.GetBuffer(); + int inLen = Convert.ToInt32(data.Length); + + int len = ProcessPacket(input, 0, inLen, outBytes, outOff); + + Reset(); + + return len; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int DoFinal(Span output) + { + byte[] input = data.GetBuffer(); + int inLen = Convert.ToInt32(data.Length); + + int len = ProcessPacket(input.AsSpan(0, inLen), output); + + Reset(); + + return len; + } +#endif + + public virtual void Reset() + { + associatedText.SetLength(0); + data.SetLength(0); + } + + /** + * Returns a byte array containing the mac calculated as part of the + * last encrypt or decrypt operation. + * + * @return the last mac calculated. + */ + public virtual byte[] GetMac() + { + return Arrays.CopyOfRange(macBlock, 0, macSize); + } + + public virtual int GetUpdateOutputSize(int len) + { + return 0; + } + + public virtual int GetOutputSize(int len) + { + int totalData = Convert.ToInt32(data.Length) + len; + + if (forEncryption) + { + return totalData + macSize; + } + + return totalData < macSize ? 0 : totalData - macSize; + } + + /** + * Process a packet of data for either CCM decryption or encryption. + * + * @param in data for processing. + * @param inOff offset at which data starts in the input array. + * @param inLen length of the data in the input array. + * @return a byte array containing the processed input.. + * @throws IllegalStateException if the cipher is not appropriately set up. + * @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + */ + public virtual byte[] ProcessPacket(byte[] input, int inOff, int inLen) + { + byte[] output; + + if (forEncryption) + { + output = new byte[inLen + macSize]; + } + else + { + if (inLen < macSize) + throw new InvalidCipherTextException("data too short"); + + output = new byte[inLen - macSize]; + } + + ProcessPacket(input, inOff, inLen, output, 0); + + return output; + } + + /** + * Process a packet of data for either CCM decryption or encryption. + * + * @param in data for processing. + * @param inOff offset at which data starts in the input array. + * @param inLen length of the data in the input array. + * @param output output array. + * @param outOff offset into output array to start putting processed bytes. + * @return the number of bytes added to output. + * @throws IllegalStateException if the cipher is not appropriately set up. + * @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + * @throws DataLengthException if output buffer too short. + */ + public virtual int ProcessPacket(byte[] input, int inOff, int inLen, byte[] output, int outOff) + { + // TODO: handle null keyParam (e.g. via RepeatedKeySpec) + // Need to keep the CTR and CBC Mac parts around and reset + if (keyParam == null) + throw new InvalidOperationException("CCM cipher unitialized."); + + int n = nonce.Length; + int q = 15 - n; + if (q < 4) + { + int limitLen = 1 << (8 * q); + if (inLen >= limitLen) + throw new InvalidOperationException("CCM packet too large for choice of q."); + } + + byte[] iv = new byte[BlockSize]; + iv[0] = (byte)((q - 1) & 0x7); + nonce.CopyTo(iv, 1); + + IBlockCipher ctrCipher = new FastSicBlockCipher(cipher); + ctrCipher.Init(forEncryption, new ParametersWithIV(keyParam, iv)); + + int outputLen; + int inIndex = inOff; + int outIndex = outOff; + + if (forEncryption) + { + outputLen = inLen + macSize; + Check.OutputLength(output, outOff, outputLen, "Output buffer too short."); + + CalculateMac(input, inOff, inLen, macBlock); + + byte[] encMac = new byte[BlockSize]; + ctrCipher.ProcessBlock(macBlock, 0, encMac, 0); // S0 + + while (inIndex < (inOff + inLen - BlockSize)) // S1... + { + ctrCipher.ProcessBlock(input, inIndex, output, outIndex); + outIndex += BlockSize; + inIndex += BlockSize; + } + + byte[] block = new byte[BlockSize]; + + Array.Copy(input, inIndex, block, 0, inLen + inOff - inIndex); + + ctrCipher.ProcessBlock(block, 0, block, 0); + + Array.Copy(block, 0, output, outIndex, inLen + inOff - inIndex); + + Array.Copy(encMac, 0, output, outOff + inLen, macSize); + } + else + { + if (inLen < macSize) + throw new InvalidCipherTextException("data too short"); + + outputLen = inLen - macSize; + Check.OutputLength(output, outOff, outputLen, "Output buffer too short."); + + Array.Copy(input, inOff + outputLen, macBlock, 0, macSize); + + ctrCipher.ProcessBlock(macBlock, 0, macBlock, 0); + + for (int i = macSize; i != macBlock.Length; i++) + { + macBlock[i] = 0; + } + + while (inIndex < (inOff + outputLen - BlockSize)) + { + ctrCipher.ProcessBlock(input, inIndex, output, outIndex); + outIndex += BlockSize; + inIndex += BlockSize; + } + + byte[] block = new byte[BlockSize]; + + Array.Copy(input, inIndex, block, 0, outputLen - (inIndex - inOff)); + + ctrCipher.ProcessBlock(block, 0, block, 0); + + Array.Copy(block, 0, output, outIndex, outputLen - (inIndex - inOff)); + + byte[] calculatedMacBlock = new byte[BlockSize]; + + CalculateMac(output, outOff, outputLen, calculatedMacBlock); + + if (!Arrays.ConstantTimeAreEqual(macBlock, calculatedMacBlock)) + throw new InvalidCipherTextException("mac check in CCM failed"); + } + + return outputLen; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessPacket(ReadOnlySpan input, Span output) + { + int inLen = input.Length; + + // TODO: handle null keyParam (e.g. via RepeatedKeySpec) + // Need to keep the CTR and CBC Mac parts around and reset + if (keyParam == null) + throw new InvalidOperationException("CCM cipher unitialized."); + + int n = nonce.Length; + int q = 15 - n; + if (q < 4) + { + int limitLen = 1 << (8 * q); + if (inLen >= limitLen) + throw new InvalidOperationException("CCM packet too large for choice of q."); + } + + byte[] iv = new byte[BlockSize]; + iv[0] = (byte)((q - 1) & 0x7); + nonce.CopyTo(iv, 1); + + IBlockCipher ctrCipher = new SicBlockCipher(cipher); + ctrCipher.Init(forEncryption, new ParametersWithIV(keyParam, iv)); + + int outputLen; + int index = 0; + Span block = stackalloc byte[BlockSize]; + + if (forEncryption) + { + outputLen = inLen + macSize; + Check.OutputLength(output, outputLen, "output buffer too short"); + + CalculateMac(input, macBlock); + + byte[] encMac = new byte[BlockSize]; + ctrCipher.ProcessBlock(macBlock, encMac); // S0 + + while (index < (inLen - BlockSize)) // S1... + { + ctrCipher.ProcessBlock(input[index..], output[index..]); + index += BlockSize; + } + + input[index..].CopyTo(block); + + ctrCipher.ProcessBlock(block, block); + + block[..(inLen - index)].CopyTo(output[index..]); + + encMac.AsSpan(0, macSize).CopyTo(output[inLen..]); + } + else + { + if (inLen < macSize) + throw new InvalidCipherTextException("data too short"); + + outputLen = inLen - macSize; + Check.OutputLength(output, outputLen, "output buffer too short"); + + input[outputLen..].CopyTo(macBlock); + + ctrCipher.ProcessBlock(macBlock, macBlock); + + for (int i = macSize; i != macBlock.Length; i++) + { + macBlock[i] = 0; + } + + while (index < (outputLen - BlockSize)) + { + ctrCipher.ProcessBlock(input[index..], output[index..]); + index += BlockSize; + } + + input[index..outputLen].CopyTo(block); + + ctrCipher.ProcessBlock(block, block); + + block[..(outputLen - index)].CopyTo(output[index..]); + + Span calculatedMacBlock = stackalloc byte[BlockSize]; + + CalculateMac(output[..outputLen], calculatedMacBlock); + + if (!Arrays.ConstantTimeAreEqual(macBlock, calculatedMacBlock)) + throw new InvalidCipherTextException("mac check in CCM failed"); + } + + return outputLen; + } +#endif + + private int CalculateMac(byte[] data, int dataOff, int dataLen, byte[] macBlock) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return CalculateMac(data.AsSpan(dataOff, dataLen), macBlock); +#else + IMac cMac = new CbcBlockCipherMac(cipher, macSize * 8); + + cMac.Init(keyParam); + + // + // build b0 + // + byte[] b0 = new byte[16]; + + if (HasAssociatedText()) + { + b0[0] |= 0x40; + } + + b0[0] |= (byte)((((cMac.GetMacSize() - 2) / 2) & 0x7) << 3); + + b0[0] |= (byte)(((15 - nonce.Length) - 1) & 0x7); + + Array.Copy(nonce, 0, b0, 1, nonce.Length); + + int q = dataLen; + int count = 1; + while (q > 0) + { + b0[b0.Length - count] = (byte)(q & 0xff); + q >>= 8; + count++; + } + + cMac.BlockUpdate(b0, 0, b0.Length); + + // + // process associated text + // + if (HasAssociatedText()) + { + int extra; + + int textLength = GetAssociatedTextLength(); + if (textLength < ((1 << 16) - (1 << 8))) + { + cMac.Update((byte)(textLength >> 8)); + cMac.Update((byte)textLength); + + extra = 2; + } + else // can't go any higher than 2^32 + { + cMac.Update((byte)0xff); + cMac.Update((byte)0xfe); + cMac.Update((byte)(textLength >> 24)); + cMac.Update((byte)(textLength >> 16)); + cMac.Update((byte)(textLength >> 8)); + cMac.Update((byte)textLength); + + extra = 6; + } + + if (initialAssociatedText != null) + { + cMac.BlockUpdate(initialAssociatedText, 0, initialAssociatedText.Length); + } + if (associatedText.Length > 0) + { + byte[] input = associatedText.GetBuffer(); + int len = Convert.ToInt32(associatedText.Length); + + cMac.BlockUpdate(input, 0, len); + } + + extra = (extra + textLength) % 16; + if (extra != 0) + { + for (int i = extra; i < 16; ++i) + { + cMac.Update((byte)0x00); + } + } + } + + // + // add the text + // + cMac.BlockUpdate(data, dataOff, dataLen); + + return cMac.DoFinal(macBlock, 0); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int CalculateMac(ReadOnlySpan data, Span macBlock) + { + IMac cMac = new CbcBlockCipherMac(cipher, macSize * 8); + + cMac.Init(keyParam); + + // + // build b0 + // + byte[] b0 = new byte[16]; + + if (HasAssociatedText()) + { + b0[0] |= 0x40; + } + + b0[0] |= (byte)((((cMac.GetMacSize() - 2) / 2) & 0x7) << 3); + + b0[0] |= (byte)(((15 - nonce.Length) - 1) & 0x7); + + Array.Copy(nonce, 0, b0, 1, nonce.Length); + + int q = data.Length; + int count = 1; + while (q > 0) + { + b0[b0.Length - count] = (byte)(q & 0xff); + q >>= 8; + count++; + } + + cMac.BlockUpdate(b0, 0, b0.Length); + + // + // process associated text + // + if (HasAssociatedText()) + { + int extra; + + int textLength = GetAssociatedTextLength(); + if (textLength < ((1 << 16) - (1 << 8))) + { + cMac.Update((byte)(textLength >> 8)); + cMac.Update((byte)textLength); + + extra = 2; + } + else // can't go any higher than 2^32 + { + cMac.Update((byte)0xff); + cMac.Update((byte)0xfe); + cMac.Update((byte)(textLength >> 24)); + cMac.Update((byte)(textLength >> 16)); + cMac.Update((byte)(textLength >> 8)); + cMac.Update((byte)textLength); + + extra = 6; + } + + if (initialAssociatedText != null) + { + cMac.BlockUpdate(initialAssociatedText, 0, initialAssociatedText.Length); + } + if (associatedText.Length > 0) + { + byte[] input = associatedText.GetBuffer(); + int len = Convert.ToInt32(associatedText.Length); + + cMac.BlockUpdate(input, 0, len); + } + + extra = (extra + textLength) % 16; + if (extra != 0) + { + for (int i = extra; i < 16; ++i) + { + cMac.Update((byte)0x00); + } + } + } + + // + // add the text + // + cMac.BlockUpdate(data); + + return cMac.DoFinal(macBlock); + } +#endif + + private int GetMacSize(bool forEncryption, int requestedMacBits) + { + if (forEncryption && (requestedMacBits < 32 || requestedMacBits > 128 || 0 != (requestedMacBits & 15))) + throw new ArgumentException("tag length in octets must be one of {4,6,8,10,12,14,16}"); + + return requestedMacBits >> 3; + } + + private int GetAssociatedTextLength() + { + return Convert.ToInt32(associatedText.Length) + + (initialAssociatedText == null ? 0 : initialAssociatedText.Length); + } + + private bool HasAssociatedText() + { + return GetAssociatedTextLength() > 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastCcmBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastCcmBlockCipher.cs.meta new file mode 100644 index 000000000..72bd44e9d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastCcmBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 017b9fa6887917045ac682f80707a9ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaCha7539Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaCha7539Engine.cs new file mode 100644 index 000000000..c3db600a5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaCha7539Engine.cs @@ -0,0 +1,531 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.CompilerServices; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.Connections.TLS.Crypto.Impl +{ + /// + /// Implementation of Daniel J. Bernstein's ChaCha stream cipher. + /// + + + + [BestHTTP.PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstructionAttribute] + public sealed class FastChaCha7539Engine + : FastSalsa20Engine + { + /// + /// Creates a 20 rounds ChaCha engine. + /// + public FastChaCha7539Engine() + : base() + { + } + + public override string AlgorithmName + { + get { return "ChaCha7539"; } + } + + protected override int NonceSize + { + get { return 12; } + } + + protected override void AdvanceCounter() + { + if (++engineState[12] == 0) + throw new InvalidOperationException("attempt to increase counter past 2^32."); + } + + protected override void ResetCounter() + { + engineState[12] = 0; + } + + protected override void SetKey(byte[] keyBytes, byte[] ivBytes) + { + if (keyBytes != null) + { + if (keyBytes.Length != 32) + throw new ArgumentException(AlgorithmName + " requires 256 bit key"); + + PackTauOrSigma(keyBytes.Length, engineState, 0); + + // Key + Pack.LE_To_UInt32(keyBytes, 0, engineState, 4, 8); + } + + // IV + Pack.LE_To_UInt32(ivBytes, 0, engineState, 13, 3); + } + + protected override void GenerateKeyStream(byte[] output) + { + FastChaChaEngineHelper.ChachaCore(rounds, engineState, output); + } + + internal void DoFinal(byte[] inBuf, int inOff, int inLen, byte[] outBuf, int outOff) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + if (index != 0) + throw new InvalidOperationException(AlgorithmName + " not in block-aligned state"); + + Check.DataLength(inBuf, inOff, inLen, "input buffer too short"); + Check.OutputLength(outBuf, outOff, inLen, "output buffer too short"); + + while (inLen >= 128) + { +#if BESTHTTP_WITH_BURST + FastChaCha7539EngineHelper.ProcessBlocks2(inBuf.AsSpan(inOff), outBuf.AsSpan(outOff), engineState, rounds, keyStream); +#elif NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + //ProcessBlocks2(inBuf.AsSpan(inOff), outBuf.AsSpan(outOff)); + + var input = inBuf.AsSpan(inOff); + var output = outBuf.AsSpan(outOff); + ImplProcessBlock(inBuf.AsSpan(inOff), outBuf.AsSpan(outOff)); + ImplProcessBlock(input[64..], output[64..]); +#else + ProcessBlocks2(inBuf, inOff, outBuf, outOff); +#endif + inOff += 128; + inLen -= 128; + outOff += 128; + } + + if (inLen >= 64) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ImplProcessBlock(inBuf.AsSpan(inOff), outBuf.AsSpan(outOff)); +#else + ImplProcessBlock(inBuf, inOff, outBuf, outOff); +#endif + inOff += 64; + inLen -= 64; + outOff += 64; + } + + if (inLen > 0) + { + GenerateKeyStream(keyStream); + //AdvanceCounter(); + if (++engineState[12] == 0) + throw new InvalidOperationException("attempt to increase counter past 2^32."); + + for (int i = 0; i < inLen; ++i) + { + outBuf[outOff + i] = (byte)(inBuf[i + inOff] ^ keyStream[i]); + } + } + + engineState[12] = 0; + + // TODO Prevent re-use if encrypting + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal void ProcessBlock(ReadOnlySpan input, Span output) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + if (LimitExceeded(64U)) + throw new MaxBytesExceededException("2^38 byte limit per IV would be exceeded; Change IV"); + + UnityEngine.Debug.Assert(index == 0); + + ImplProcessBlock(input, output); + } + + internal void ProcessBlocks2(ReadOnlySpan input, Span output) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + if (LimitExceeded(128U)) + throw new MaxBytesExceededException("2^38 byte limit per IV would be exceeded; Change IV"); + + UnityEngine.Debug.Assert(index == 0); + +#if NETCOREAPP3_0_OR_GREATER + if (Avx2.IsSupported) + { + ImplProcessBlocks2_X86_Avx2(rounds, engineState, input, output); + return; + } + + if (Sse2.IsSupported) + { + ImplProcessBlocks2_X86_Sse2(rounds, engineState, input, output); + return; + } +#endif + + { + ImplProcessBlock(input, output); + ImplProcessBlock(input[64..], output[64..]); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal void ImplProcessBlock(ReadOnlySpan input, Span output) + { + FastChaChaEngineHelper.ChachaCore(rounds, engineState, keyStream); + + //AdvanceCounter(); + if (++engineState[12] == 0) + throw new InvalidOperationException("attempt to increase counter past 2^32."); + + FastChaChaEngineHelper.ImplProcessBlock(input, output, keyStream); + } +#else + internal void ProcessBlock(byte[] inBytes, int inOff, byte[] outBytes, int outOff) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + if (LimitExceeded(64U)) + throw new MaxBytesExceededException("2^38 byte limit per IV would be exceeded; Change IV"); + + UnityEngine.Debug.Assert(index == 0); + + ImplProcessBlock(inBytes, inOff, outBytes, outOff); + } + + internal void ProcessBlocks2(byte[] inBytes, int inOff, byte[] outBytes, int outOff) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + if (LimitExceeded(128U)) + throw new MaxBytesExceededException("2^38 byte limit per IV would be exceeded; Change IV"); + + UnityEngine.Debug.Assert(index == 0); + + { + ImplProcessBlock(inBytes, inOff, outBytes, outOff); + ImplProcessBlock(inBytes, inOff + 64, outBytes, outOff + 64); + } + } + +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + internal void ImplProcessBlock(byte[] inBuf, int inOff, byte[] outBuf, int outOff) + { + ChaChaEngine.ChachaCore(rounds, engineState, keyStream); + AdvanceCounter(); + + for (int i = 0; i < 64; ++i) + { + outBuf[outOff + i] = (byte)(keyStream[i] ^ inBuf[inOff + i]); + } + } +#endif + +#if NETCOREAPP3_0_OR_GREATER + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void ImplProcessBlocks2_X86_Avx2(int rounds, uint[] state, ReadOnlySpan input, + Span output) + { + if (!Avx2.IsSupported) + throw new PlatformNotSupportedException(); + + Debug.Assert(rounds % 2 == 0); + Debug.Assert(state.Length >= 16); + Debug.Assert(input.Length >= 128); + Debug.Assert(output.Length >= 128); + + var t0 = Load128_UInt32(state.AsSpan()); + var t1 = Load128_UInt32(state.AsSpan(4)); + var t2 = Load128_UInt32(state.AsSpan(8)); + var t3 = Load128_UInt32(state.AsSpan(12)); + ++state[12]; + var t4 = Load128_UInt32(state.AsSpan(12)); + ++state[12]; + + var x0 = Vector256.Create(t0, t0); + var x1 = Vector256.Create(t1, t1); + var x2 = Vector256.Create(t2, t2); + var x3 = Vector256.Create(t3, t4); + + var v0 = x0; + var v1 = x1; + var v2 = x2; + var v3 = x3; + + for (int i = rounds; i > 0; i -= 2) + { + v0 = Avx2.Add(v0, v1); + v3 = Avx2.Xor(v3, v0); + v3 = Avx2.Xor(Avx2.ShiftLeftLogical(v3, 16), Avx2.ShiftRightLogical(v3, 16)); + v2 = Avx2.Add(v2, v3); + v1 = Avx2.Xor(v1, v2); + v1 = Avx2.Xor(Avx2.ShiftLeftLogical(v1, 12), Avx2.ShiftRightLogical(v1, 20)); + v0 = Avx2.Add(v0, v1); + v3 = Avx2.Xor(v3, v0); + v3 = Avx2.Xor(Avx2.ShiftLeftLogical(v3, 8), Avx2.ShiftRightLogical(v3, 24)); + v2 = Avx2.Add(v2, v3); + v1 = Avx2.Xor(v1, v2); + v1 = Avx2.Xor(Avx2.ShiftLeftLogical(v1, 7), Avx2.ShiftRightLogical(v1, 25)); + + v1 = Avx2.Shuffle(v1, 0x39); + v2 = Avx2.Shuffle(v2, 0x4E); + v3 = Avx2.Shuffle(v3, 0x93); + + v0 = Avx2.Add(v0, v1); + v3 = Avx2.Xor(v3, v0); + v3 = Avx2.Xor(Avx2.ShiftLeftLogical(v3, 16), Avx2.ShiftRightLogical(v3, 16)); + v2 = Avx2.Add(v2, v3); + v1 = Avx2.Xor(v1, v2); + v1 = Avx2.Xor(Avx2.ShiftLeftLogical(v1, 12), Avx2.ShiftRightLogical(v1, 20)); + v0 = Avx2.Add(v0, v1); + v3 = Avx2.Xor(v3, v0); + v3 = Avx2.Xor(Avx2.ShiftLeftLogical(v3, 8), Avx2.ShiftRightLogical(v3, 24)); + v2 = Avx2.Add(v2, v3); + v1 = Avx2.Xor(v1, v2); + v1 = Avx2.Xor(Avx2.ShiftLeftLogical(v1, 7), Avx2.ShiftRightLogical(v1, 25)); + + v1 = Avx2.Shuffle(v1, 0x93); + v2 = Avx2.Shuffle(v2, 0x4E); + v3 = Avx2.Shuffle(v3, 0x39); + } + + v0 = Avx2.Add(v0, x0); + v1 = Avx2.Add(v1, x1); + v2 = Avx2.Add(v2, x2); + v3 = Avx2.Add(v3, x3); + + var n0 = Avx2.Permute2x128(v0, v1, 0x20).AsByte(); + var n1 = Avx2.Permute2x128(v2, v3, 0x20).AsByte(); + var n2 = Avx2.Permute2x128(v0, v1, 0x31).AsByte(); + var n3 = Avx2.Permute2x128(v2, v3, 0x31).AsByte(); + + n0 = Avx2.Xor(n0, Load256_Byte(input)); + n1 = Avx2.Xor(n1, Load256_Byte(input[0x20..])); + n2 = Avx2.Xor(n2, Load256_Byte(input[0x40..])); + n3 = Avx2.Xor(n3, Load256_Byte(input[0x60..])); + + Store256_Byte(n0, output); + Store256_Byte(n1, output[0x20..]); + Store256_Byte(n2, output[0x40..]); + Store256_Byte(n3, output[0x60..]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void ImplProcessBlocks2_X86_Sse2(int rounds, uint[] state, ReadOnlySpan input, + Span output) + { + if (!Sse2.IsSupported) + throw new PlatformNotSupportedException(); + + Debug.Assert(rounds % 2 == 0); + Debug.Assert(state.Length >= 16); + Debug.Assert(input.Length >= 128); + Debug.Assert(output.Length >= 128); + + var x0 = Load128_UInt32(state.AsSpan()); + var x1 = Load128_UInt32(state.AsSpan(4)); + var x2 = Load128_UInt32(state.AsSpan(8)); + var x3 = Load128_UInt32(state.AsSpan(12)); + ++state[12]; + + var v0 = x0; + var v1 = x1; + var v2 = x2; + var v3 = x3; + + for (int i = rounds; i > 0; i -= 2) + { + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 16), Sse2.ShiftRightLogical(v3, 16)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 12), Sse2.ShiftRightLogical(v1, 20)); + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 8), Sse2.ShiftRightLogical(v3, 24)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 7), Sse2.ShiftRightLogical(v1, 25)); + + v1 = Sse2.Shuffle(v1, 0x39); + v2 = Sse2.Shuffle(v2, 0x4E); + v3 = Sse2.Shuffle(v3, 0x93); + + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 16), Sse2.ShiftRightLogical(v3, 16)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 12), Sse2.ShiftRightLogical(v1, 20)); + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 8), Sse2.ShiftRightLogical(v3, 24)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 7), Sse2.ShiftRightLogical(v1, 25)); + + v1 = Sse2.Shuffle(v1, 0x93); + v2 = Sse2.Shuffle(v2, 0x4E); + v3 = Sse2.Shuffle(v3, 0x39); + } + + v0 = Sse2.Add(v0, x0); + v1 = Sse2.Add(v1, x1); + v2 = Sse2.Add(v2, x2); + v3 = Sse2.Add(v3, x3); + + var n0 = Load128_Byte(input); + var n1 = Load128_Byte(input[0x10..]); + var n2 = Load128_Byte(input[0x20..]); + var n3 = Load128_Byte(input[0x30..]); + + n0 = Sse2.Xor(n0, v0.AsByte()); + n1 = Sse2.Xor(n1, v1.AsByte()); + n2 = Sse2.Xor(n2, v2.AsByte()); + n3 = Sse2.Xor(n3, v3.AsByte()); + + Store128_Byte(n0, output); + Store128_Byte(n1, output[0x10..]); + Store128_Byte(n2, output[0x20..]); + Store128_Byte(n3, output[0x30..]); + + x3 = Load128_UInt32(state.AsSpan(12)); + ++state[12]; + + v0 = x0; + v1 = x1; + v2 = x2; + v3 = x3; + + for (int i = rounds; i > 0; i -= 2) + { + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 16), Sse2.ShiftRightLogical(v3, 16)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 12), Sse2.ShiftRightLogical(v1, 20)); + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 8), Sse2.ShiftRightLogical(v3, 24)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 7), Sse2.ShiftRightLogical(v1, 25)); + + v1 = Sse2.Shuffle(v1, 0x39); + v2 = Sse2.Shuffle(v2, 0x4E); + v3 = Sse2.Shuffle(v3, 0x93); + + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 16), Sse2.ShiftRightLogical(v3, 16)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 12), Sse2.ShiftRightLogical(v1, 20)); + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 8), Sse2.ShiftRightLogical(v3, 24)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 7), Sse2.ShiftRightLogical(v1, 25)); + + v1 = Sse2.Shuffle(v1, 0x93); + v2 = Sse2.Shuffle(v2, 0x4E); + v3 = Sse2.Shuffle(v3, 0x39); + } + + v0 = Sse2.Add(v0, x0); + v1 = Sse2.Add(v1, x1); + v2 = Sse2.Add(v2, x2); + v3 = Sse2.Add(v3, x3); + + n0 = Load128_Byte(input[0x40..]); + n1 = Load128_Byte(input[0x50..]); + n2 = Load128_Byte(input[0x60..]); + n3 = Load128_Byte(input[0x70..]); + + n0 = Sse2.Xor(n0, v0.AsByte()); + n1 = Sse2.Xor(n1, v1.AsByte()); + n2 = Sse2.Xor(n2, v2.AsByte()); + n3 = Sse2.Xor(n3, v3.AsByte()); + + Store128_Byte(n0, output[0x40..]); + Store128_Byte(n1, output[0x50..]); + Store128_Byte(n2, output[0x60..]); + Store128_Byte(n3, output[0x70..]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static Vector128 Load128_Byte(ReadOnlySpan t) + { + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 16) + return MemoryMarshal.Read>(t); + + return Vector128.Create( + BinaryPrimitives.ReadUInt64LittleEndian(t[..8]), + BinaryPrimitives.ReadUInt64LittleEndian(t[8..]) + ).AsByte(); +} + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static Vector128 Load128_UInt32(ReadOnlySpan t) + { + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 16) + return MemoryMarshal.Read>(MemoryMarshal.AsBytes(t)); + + return Vector128.Create(t[0], t[1], t[2], t[3]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static Vector256 Load256_Byte(ReadOnlySpan t) + { + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 32) + return MemoryMarshal.Read>(t); + + return Vector256.Create( + BinaryPrimitives.ReadUInt64LittleEndian(t[ 0.. 8]), + BinaryPrimitives.ReadUInt64LittleEndian(t[ 8..16]), + BinaryPrimitives.ReadUInt64LittleEndian(t[16..24]), + BinaryPrimitives.ReadUInt64LittleEndian(t[24..32]) + ).AsByte(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void Store128_Byte(Vector128 s, Span t) + { + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 16) + { + MemoryMarshal.Write(t, ref s); + return; + } + + var u = s.AsUInt64(); + BinaryPrimitives.WriteUInt64LittleEndian(t[..8], u.GetElement(0)); + BinaryPrimitives.WriteUInt64LittleEndian(t[8..], u.GetElement(1)); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void Store256_Byte(Vector256 s, Span t) + { + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 32) + { + MemoryMarshal.Write(t, ref s); + return; + } + + var u = s.AsUInt64(); + BinaryPrimitives.WriteUInt64LittleEndian(t[ 0.. 8], u.GetElement(0)); + BinaryPrimitives.WriteUInt64LittleEndian(t[ 8..16], u.GetElement(1)); + BinaryPrimitives.WriteUInt64LittleEndian(t[16..24], u.GetElement(2)); + BinaryPrimitives.WriteUInt64LittleEndian(t[24..32], u.GetElement(3)); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaCha7539Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaCha7539Engine.cs.meta new file mode 100644 index 000000000..3c38771de --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaCha7539Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 265fa53fa94a97e4fb0c6ab738d53f4b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaCha7539EngineHelper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaCha7539EngineHelper.cs new file mode 100644 index 000000000..db7dccdf9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaCha7539EngineHelper.cs @@ -0,0 +1,484 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) && BESTHTTP_WITH_BURST +using System; +using System.Runtime.CompilerServices; + +using Unity.Burst; + +using Unity.Burst.Intrinsics; + +using static Unity.Burst.Intrinsics.X86; +using static Unity.Burst.Intrinsics.Arm; + +// https://github.com/sschoener/burst-simd-exercises/blob/main/Assets/Examples/2-sum-small-numbers-sse3/SumSmallNumbers_SSE3.cs +// https://github.com/jratcliff63367/sse2neon/blob/master/SSE2NEON.h#L789 + +namespace BestHTTP.Connections.TLS.Crypto.Impl +{ + [BurstCompile] + public unsafe static class FastChaCha7539EngineHelper + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void ProcessBlocks2(ReadOnlySpan input, Span output, uint[] state, int rounds, byte[] keyStream) + { + fixed (byte* pinput = input) + fixed (byte* poutput = output) + fixed (uint* pstate = state) + fixed(byte* pkeyStream = keyStream) + ProcessBlocks2Impl(pinput, input.Length, poutput, output.Length, pstate, state.Length, rounds, pkeyStream); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + [BurstCompile(CompileSynchronously = true)] + private static void ProcessBlocks2Impl([NoAlias] byte* input, int inputLen, [NoAlias] byte* output, int outLen, [NoAlias] uint* state, int stateLen, int rounds, [NoAlias] byte* keyStream) + { + if (Avx2.IsAvx2Supported) + { + var t0 = new v128(state[0], state[1], state[2], state[3]); //Load128_UInt32(state.AsSpan()); + var t1 = new v128(state[4], state[5], state[6], state[7]); //Load128_UInt32(state.AsSpan(4)); + var t2 = new v128(state[8], state[9], state[10], state[11]); //Load128_UInt32(state.AsSpan(8)); + var t3 = new v128(state[12], state[13], state[14], state[15]); //Load128_UInt32(state.AsSpan(12)); + ++state[12]; + var t4 = new v128(state[12], state[13], state[14], state[15]); //Load128_UInt32(state.AsSpan(12)); + ++state[12]; + + var x0 = new v256(t0, t0); //Vector256.Create(t0, t0); + var x1 = new v256(t1, t1); //Vector256.Create(t1, t1); + var x2 = new v256(t2, t2); //Vector256.Create(t2, t2); + var x3 = new v256(t3, t4); //Vector256.Create(t3, t4); + + var v0 = x0; + var v1 = x1; + var v2 = x2; + var v3 = x3; + + for (int i = rounds; i > 0; i -= 2) + { + v0 = Avx2.mm256_add_epi32(v0, v1); + v3 = Avx2.mm256_xor_si256(v3, v0); + v3 = Avx2.mm256_xor_si256(Avx2.mm256_slli_epi32(v3, 16), Avx2.mm256_srli_epi32(v3, 16)); + v2 = Avx2.mm256_add_epi32(v2, v3); + v1 = Avx2.mm256_xor_si256(v1, v2); + v1 = Avx2.mm256_xor_si256(Avx2.mm256_slli_epi32(v1, 12), Avx2.mm256_srli_epi32(v1, 20)); + v0 = Avx2.mm256_add_epi32(v0, v1); + v3 = Avx2.mm256_xor_si256(v3, v0); + v3 = Avx2.mm256_xor_si256(Avx2.mm256_slli_epi32(v3, 8), Avx2.mm256_srli_epi32(v3, 24)); + v2 = Avx2.mm256_add_epi32(v2, v3); + v1 = Avx2.mm256_xor_si256(v1, v2); + v1 = Avx2.mm256_xor_si256(Avx2.mm256_slli_epi32(v1, 7), Avx2.mm256_srli_epi32(v1, 25)); + + v1 = Avx2.mm256_shuffle_epi32(v1, 0x39); + v2 = Avx2.mm256_shuffle_epi32(v2, 0x4E); + v3 = Avx2.mm256_shuffle_epi32(v3, 0x93); + + v0 = Avx2.mm256_add_epi32(v0, v1); + v3 = Avx2.mm256_xor_si256(v3, v0); + v3 = Avx2.mm256_xor_si256(Avx2.mm256_slli_epi32(v3, 16), Avx2.mm256_srli_epi32(v3, 16)); + v2 = Avx2.mm256_add_epi32(v2, v3); + v1 = Avx2.mm256_xor_si256(v1, v2); + v1 = Avx2.mm256_xor_si256(Avx2.mm256_slli_epi32(v1, 12), Avx2.mm256_srli_epi32(v1, 20)); + v0 = Avx2.mm256_add_epi32(v0, v1); + v3 = Avx2.mm256_xor_si256(v3, v0); + v3 = Avx2.mm256_xor_si256(Avx2.mm256_slli_epi32(v3, 8), Avx2.mm256_srli_epi32(v3, 24)); + v2 = Avx2.mm256_add_epi32(v2, v3); + v1 = Avx2.mm256_xor_si256(v1, v2); + v1 = Avx2.mm256_xor_si256(Avx2.mm256_slli_epi32(v1, 7), Avx2.mm256_srli_epi32(v1, 25)); + + v1 = Avx2.mm256_shuffle_epi32(v1, 0x93); + v2 = Avx2.mm256_shuffle_epi32(v2, 0x4E); + v3 = Avx2.mm256_shuffle_epi32(v3, 0x39); + } + + v0 = Avx2.mm256_add_epi32(v0, x0); + v1 = Avx2.mm256_add_epi32(v1, x1); + v2 = Avx2.mm256_add_epi32(v2, x2); + v3 = Avx2.mm256_add_epi32(v3, x3); + + var n0 = Avx2.mm256_permute2x128_si256(v0, v1, 0x20); + var n1 = Avx2.mm256_permute2x128_si256(v2, v3, 0x20); + var n2 = Avx2.mm256_permute2x128_si256(v0, v1, 0x31); + var n3 = Avx2.mm256_permute2x128_si256(v2, v3, 0x31); + + ulong* uInput = (ulong*)input; + n0 = Avx2.mm256_xor_si256(n0, new v256(uInput[0], uInput[1], uInput[2], uInput[3])); // Load256_Byte(input) + n1 = Avx2.mm256_xor_si256(n1, new v256(uInput[4], uInput[5], uInput[6], uInput[7])); // Load256_Byte(input[0x20..]) + n2 = Avx2.mm256_xor_si256(n2, new v256(uInput[8], uInput[9], uInput[10], uInput[11])); // Load256_Byte(input[0x40..]) + n3 = Avx2.mm256_xor_si256(n3, new v256(uInput[12], uInput[13], uInput[14], uInput[15])); // Load256_Byte(input[0x60..]) + + ulong* uOutput = (ulong*)output; + uOutput[0] = n0.ULong0; uOutput[1] = n0.ULong1; uOutput[2] = n0.ULong2; uOutput[3] = n0.ULong3; //Store256_Byte(n0, output); + uOutput[4] = n1.ULong0; uOutput[5] = n1.ULong1; uOutput[6] = n1.ULong2; uOutput[7] = n1.ULong3; //Store256_Byte(n1, output[0x20..]); + uOutput[8] = n2.ULong0; uOutput[9] = n2.ULong1; uOutput[10] = n2.ULong2; uOutput[11] = n2.ULong3; //Store256_Byte(n2, output[0x40..]); + uOutput[12] = n3.ULong0; uOutput[13] = n3.ULong1; uOutput[14] = n3.ULong2; uOutput[15] = n3.ULong3; //Store256_Byte(n3, output[0x60..]); + } + else if (Sse2.IsSse2Supported) + { + var x0 = Sse2.loadu_si128(state); //new v128(state[0], state[1], state[2], state[3]); //Load128_UInt32(state.AsSpan()); + var x1 = Sse2.loadu_si128(state + 4); //new v128(state[4], state[5], state[6], state[7]); //Load128_UInt32(state.AsSpan(4)); + var x2 = Sse2.loadu_si128(state + 8); //new v128(state[8], state[9], state[10], state[11]); //Load128_UInt32(state.AsSpan(8)); + var x3 = Sse2.loadu_si128(state + 12); //new v128(state[12], state[13], state[14], state[15]); //Load128_UInt32(state.AsSpan(12)); + ++state[12]; + + var v0 = x0; + var v1 = x1; + var v2 = x2; + var v3 = x3; + + for (int i = rounds; i > 0; i -= 2) + { + v0 = Sse2.add_epi32(v0, v1); + v3 = Sse2.xor_si128(v3, v0); + v3 = Sse2.xor_si128(Sse2.slli_epi32(v3, 16), Sse2.srli_epi32(v3, 16)); + v2 = Sse2.add_epi32(v2, v3); + v1 = Sse2.xor_si128(v1, v2); + v1 = Sse2.xor_si128(Sse2.slli_epi32(v1, 12), Sse2.srli_epi32(v1, 20)); + v0 = Sse2.add_epi32(v0, v1); + v3 = Sse2.xor_si128(v3, v0); + v3 = Sse2.xor_si128(Sse2.slli_epi32(v3, 8), Sse2.srli_epi32(v3, 24)); + v2 = Sse2.add_epi32(v2, v3); + v1 = Sse2.xor_si128(v1, v2); + v1 = Sse2.xor_si128(Sse2.slli_epi32(v1, 7), Sse2.srli_epi32(v1, 25)); + + v1 = Sse2.shuffle_epi32(v1, 0x39); + v2 = Sse2.shuffle_epi32(v2, 0x4E); + v3 = Sse2.shuffle_epi32(v3, 0x93); + + v0 = Sse2.add_epi32(v0, v1); + v3 = Sse2.xor_si128(v3, v0); + v3 = Sse2.xor_si128(Sse2.slli_epi32(v3, 16), Sse2.srli_epi32(v3, 16)); + v2 = Sse2.add_epi32(v2, v3); + v1 = Sse2.xor_si128(v1, v2); + v1 = Sse2.xor_si128(Sse2.slli_epi32(v1, 12), Sse2.srli_epi32(v1, 20)); + v0 = Sse2.add_epi32(v0, v1); + v3 = Sse2.xor_si128(v3, v0); + v3 = Sse2.xor_si128(Sse2.slli_epi32(v3, 8), Sse2.srli_epi32(v3, 24)); + v2 = Sse2.add_epi32(v2, v3); + v1 = Sse2.xor_si128(v1, v2); + v1 = Sse2.xor_si128(Sse2.slli_epi32(v1, 7), Sse2.srli_epi32(v1, 25)); + + v1 = Sse2.shuffle_epi32(v1, 0x93); + v2 = Sse2.shuffle_epi32(v2, 0x4E); + v3 = Sse2.shuffle_epi32(v3, 0x39); + } + + v0 = Sse2.add_epi32(v0, x0); + v1 = Sse2.add_epi32(v1, x1); + v2 = Sse2.add_epi32(v2, x2); + v3 = Sse2.add_epi32(v3, x3); + + var n0 = Sse2.loadu_si128(input + 0x00); //Load128_Byte(input); + var n1 = Sse2.loadu_si128(input + 0x10); //Load128_Byte(input[0x10..]); + var n2 = Sse2.loadu_si128(input + 0x20); //Load128_Byte(input[0x20..]); + var n3 = Sse2.loadu_si128(input + 0x30); //Load128_Byte(input[0x30..]); + + n0 = Sse2.xor_si128(n0, v0); + n1 = Sse2.xor_si128(n1, v1); + n2 = Sse2.xor_si128(n2, v2); + n3 = Sse2.xor_si128(n3, v3); + + Sse2.storeu_si128(output + 0x00, n0); //Store128_Byte(n0, output); + Sse2.storeu_si128(output + 0x10, n1); //Store128_Byte(n1, output[0x10..]); + Sse2.storeu_si128(output + 0x20, n2); //Store128_Byte(n2, output[0x20..]); + Sse2.storeu_si128(output + 0x30, n3); //Store128_Byte(n3, output[0x30..]); + + + x3 = Sse2.loadu_si128(state + 12); // Load128_UInt32(state.AsSpan(12)); + ++state[12]; + + v0 = x0; + v1 = x1; + v2 = x2; + v3 = x3; + + for (int i = rounds; i > 0; i -= 2) + { + v0 = Sse2.add_epi32(v0, v1); + v3 = Sse2.xor_si128(v3, v0); + v3 = Sse2.xor_si128(Sse2.slli_epi32(v3, 16), Sse2.srli_epi32(v3, 16)); + v2 = Sse2.add_epi32(v2, v3); + v1 = Sse2.xor_si128(v1, v2); + v1 = Sse2.xor_si128(Sse2.slli_epi32(v1, 12), Sse2.srli_epi32(v1, 20)); + v0 = Sse2.add_epi32(v0, v1); + v3 = Sse2.xor_si128(v3, v0); + v3 = Sse2.xor_si128(Sse2.slli_epi32(v3, 8), Sse2.srli_epi32(v3, 24)); + v2 = Sse2.add_epi32(v2, v3); + v1 = Sse2.xor_si128(v1, v2); + v1 = Sse2.xor_si128(Sse2.slli_epi32(v1, 7), Sse2.srli_epi32(v1, 25)); + + v1 = Sse2.shuffle_epi32(v1, 0x39); + v2 = Sse2.shuffle_epi32(v2, 0x4E); + v3 = Sse2.shuffle_epi32(v3, 0x93); + + v0 = Sse2.add_epi32(v0, v1); + v3 = Sse2.xor_si128(v3, v0); + v3 = Sse2.xor_si128(Sse2.slli_epi32(v3, 16), Sse2.srli_epi32(v3, 16)); + v2 = Sse2.add_epi32(v2, v3); + v1 = Sse2.xor_si128(v1, v2); + v1 = Sse2.xor_si128(Sse2.slli_epi32(v1, 12), Sse2.srli_epi32(v1, 20)); + v0 = Sse2.add_epi32(v0, v1); + v3 = Sse2.xor_si128(v3, v0); + v3 = Sse2.xor_si128(Sse2.slli_epi32(v3, 8), Sse2.srli_epi32(v3, 24)); + v2 = Sse2.add_epi32(v2, v3); + v1 = Sse2.xor_si128(v1, v2); + v1 = Sse2.xor_si128(Sse2.slli_epi32(v1, 7), Sse2.srli_epi32(v1, 25)); + + v1 = Sse2.shuffle_epi32(v1, 0x93); + v2 = Sse2.shuffle_epi32(v2, 0x4E); + v3 = Sse2.shuffle_epi32(v3, 0x39); + } + + v0 = Sse2.add_epi32(v0, x0); + v1 = Sse2.add_epi32(v1, x1); + v2 = Sse2.add_epi32(v2, x2); + v3 = Sse2.add_epi32(v3, x3); + + n0 = Sse2.loadu_si128(input + 0x40); //Load128_Byte(input[0x40..]); + n1 = Sse2.loadu_si128(input + 0x50); //Load128_Byte(input[0x50..]); + n2 = Sse2.loadu_si128(input + 0x60); //Load128_Byte(input[0x60..]); + n3 = Sse2.loadu_si128(input + 0x70); //Load128_Byte(input[0x70..]); + + n0 = Sse2.xor_si128(n0, v0); + n1 = Sse2.xor_si128(n1, v1); + n2 = Sse2.xor_si128(n2, v2); + n3 = Sse2.xor_si128(n3, v3); + + Sse2.storeu_si128(output + 0x40, n0); //Store128_Byte(n0, output[0x40..]); + Sse2.storeu_si128(output + 0x50, n1); //Store128_Byte(n1, output[0x50..]); + Sse2.storeu_si128(output + 0x60, n2); //Store128_Byte(n2, output[0x60..]); + Sse2.storeu_si128(output + 0x70, n3); //Store128_Byte(n3, output[0x70..]); + } + else if (Neon.IsNeonSupported) + { + var x0 = Neon.vld1q_u32(state); //new v128(state[0], state[1], state[2], state[3]); //Load128_UInt32(state.AsSpan()); + var x1 = Neon.vld1q_u32(state + 4); //new v128(state[4], state[5], state[6], state[7]); //Load128_UInt32(state.AsSpan(4)); + var x2 = Neon.vld1q_u32(state + 8); //new v128(state[8], state[9], state[10], state[11]); //Load128_UInt32(state.AsSpan(8)); + var x3 = Neon.vld1q_u32(state + 12); + ++state[12]; + + var v0 = x0; + var v1 = x1; + var v2 = x2; + var v3 = x3; + + for (int i = rounds; i > 0; i -= 2) + { + v0 = Neon.vaddq_u32(v0, v1); + v3 = Neon.veorq_u32(v3, v0); + v3 = Neon.veorq_u32(Neon.vshlq_n_u32(v3, 16), Neon.vshrq_n_u32(v3, 16)); + v2 = Neon.vaddq_u32(v2, v3); + v1 = Neon.veorq_u32(v1, v2); + v1 = Neon.veorq_u32(Neon.vshlq_n_u32(v1, 12), Neon.vshrq_n_u32(v1, 20)); + v0 = Neon.vaddq_u32(v0, v1); + v3 = Neon.veorq_u32(v3, v0); + v3 = Neon.veorq_u32(Neon.vshlq_n_u32(v3, 8), Neon.vshrq_n_u32(v3, 24)); + v2 = Neon.vaddq_u32(v2, v3); + v1 = Neon.veorq_u32(v1, v2); + v1 = Neon.veorq_u32(Neon.vshlq_n_u32(v1, 7), Neon.vshrq_n_u32(v1, 25)); + + ///*v1 = */Neon_shuffle_epi32(v1, 0x39, out v1); + v128 ret; + ret = Neon.vmovq_n_u32(Neon.vgetq_lane_u32(v1, (0x39) & 0x3)); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v1, ((0x39) >> 2) & 0x3), ret, 1); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v1, ((0x39) >> 4) & 0x3), ret, 2); + v1 = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v1, ((0x39) >> 6) & 0x3), ret, 3); + + ///*v2 = */Neon_shuffle_epi32(v2, 0x4E, out v2); + ret = Neon.vmovq_n_u32(Neon.vgetq_lane_u32(v2, (0x4E) & 0x3)); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v2, ((0x4E) >> 2) & 0x3), ret, 1); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v2, ((0x4E) >> 4) & 0x3), ret, 2); + v2 = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v2, ((0x4E) >> 6) & 0x3), ret, 3); + + ///*v3 = */Neon_shuffle_epi32(v3, 0x93, out v3); + ret = Neon.vmovq_n_u32(Neon.vgetq_lane_u32(v3, (0x93) & 0x3)); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v3, ((0x93) >> 2) & 0x3), ret, 1); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v3, ((0x93) >> 4) & 0x3), ret, 2); + v3 = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v3, ((0x93) >> 6) & 0x3), ret, 3); + + v0 = Neon.vaddq_u32(v0, v1); + v3 = Neon.veorq_u32(v3, v0); + v3 = Neon.veorq_u32(Neon.vshlq_n_u32(v3, 16), Neon.vshrq_n_u32(v3, 16)); + v2 = Neon.vaddq_u32(v2, v3); + v1 = Neon.veorq_u32(v1, v2); + v1 = Neon.veorq_u32(Neon.vshlq_n_u32(v1, 12), Neon.vshrq_n_u32(v1, 20)); + v0 = Neon.vaddq_u32(v0, v1); + v3 = Neon.veorq_u32(v3, v0); + v3 = Neon.veorq_u32(Neon.vshlq_n_u32(v3, 8), Neon.vshrq_n_u32(v3, 24)); + v2 = Neon.vaddq_u32(v2, v3); + v1 = Neon.veorq_u32(v1, v2); + v1 = Neon.veorq_u32(Neon.vshlq_n_u32(v1, 7), Neon.vshrq_n_u32(v1, 25)); + + ///*v1 = */Neon_shuffle_epi32(v1, 0x93, out v1); + ret = Neon.vmovq_n_u32(Neon.vgetq_lane_u32(v1, (0x93) & 0x3)); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v1, ((0x93) >> 2) & 0x3), ret, 1); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v1, ((0x93) >> 4) & 0x3), ret, 2); + v1 = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v1, ((0x93) >> 6) & 0x3), ret, 3); + + ///*v2 = */Neon_shuffle_epi32(v2, 0x4E, out v2); + ret = Neon.vmovq_n_u32(Neon.vgetq_lane_u32(v2, (0x4E) & 0x3)); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v2, ((0x4E) >> 2) & 0x3), ret, 1); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v2, ((0x4E) >> 4) & 0x3), ret, 2); + v2 = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v2, ((0x4E) >> 6) & 0x3), ret, 3); + + ///*v3 = */Neon_shuffle_epi32(v3, 0x39, out v3); + ret = Neon.vmovq_n_u32(Neon.vgetq_lane_u32(v3, (0x39) & 0x3)); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v3, ((0x39) >> 2) & 0x3), ret, 1); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v3, ((0x39) >> 4) & 0x3), ret, 2); + v3 = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v3, ((0x39) >> 6) & 0x3), ret, 3); + } + + v0 = Neon.vaddq_u32(v0, x0); + v1 = Neon.vaddq_u32(v1, x1); + v2 = Neon.vaddq_u32(v2, x2); + v3 = Neon.vaddq_u32(v3, x3); + + var n0 = Neon.vld1q_u32((uint*)(input + 0x00)); //Load128_Byte(input); + var n1 = Neon.vld1q_u32((uint*)(input + 0x10)); //Load128_Byte(input[0x10..]); + var n2 = Neon.vld1q_u32((uint*)(input + 0x20)); //Load128_Byte(input[0x20..]); + var n3 = Neon.vld1q_u32((uint*)(input + 0x30)); //Load128_Byte(input[0x30..]); + + n0 = Neon.veorq_u32(n0, v0); + n1 = Neon.veorq_u32(n1, v1); + n2 = Neon.veorq_u32(n2, v2); + n3 = Neon.veorq_u32(n3, v3); + + Neon.vst1q_u32((uint*)(output + 0x00), n0); //Store128_Byte(n0, output); + Neon.vst1q_u32((uint*)(output + 0x10), n1); //Store128_Byte(n1, output[0x10..]); + Neon.vst1q_u32((uint*)(output + 0x20), n2); //Store128_Byte(n2, output[0x20..]); + Neon.vst1q_u32((uint*)(output + 0x30), n3); //Store128_Byte(n3, output[0x30..]); + + + x3 = Neon.vld1q_u32(state + 12); // Load128_UInt32(state.AsSpan(12)); + ++state[12]; + + v0 = x0; + v1 = x1; + v2 = x2; + v3 = x3; + + for (int i = rounds; i > 0; i -= 2) + { + v0 = Neon.vaddq_u32(v0, v1); + v3 = Neon.veorq_u32(v3, v0); + v3 = Neon.veorq_u32(Neon.vshlq_n_u32(v3, 16), Neon.vshrq_n_u32(v3, 16)); + v2 = Neon.vaddq_u32(v2, v3); + v1 = Neon.veorq_u32(v1, v2); + v1 = Neon.veorq_u32(Neon.vshlq_n_u32(v1, 12), Neon.vshrq_n_u32(v1, 20)); + v0 = Neon.vaddq_u32(v0, v1); + v3 = Neon.veorq_u32(v3, v0); + v3 = Neon.veorq_u32(Neon.vshlq_n_u32(v3, 8), Neon.vshrq_n_u32(v3, 24)); + v2 = Neon.vaddq_u32(v2, v3); + v1 = Neon.veorq_u32(v1, v2); + v1 = Neon.veorq_u32(Neon.vshlq_n_u32(v1, 7), Neon.vshrq_n_u32(v1, 25)); + + ///*v1 = */Neon_shuffle_epi32(v1, 0x39, out v1); + v128 ret; + ret = Neon.vmovq_n_u32(Neon.vgetq_lane_u32(v1, (0x39) & 0x3)); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v1, ((0x39) >> 2) & 0x3), ret, 1); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v1, ((0x39) >> 4) & 0x3), ret, 2); + v1 = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v1, ((0x39) >> 6) & 0x3), ret, 3); + + ///*v2 = */Neon_shuffle_epi32(v2, 0x4E, out v2); + ret = Neon.vmovq_n_u32(Neon.vgetq_lane_u32(v2, (0x4E) & 0x3)); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v2, ((0x4E) >> 2) & 0x3), ret, 1); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v2, ((0x4E) >> 4) & 0x3), ret, 2); + v2 = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v2, ((0x4E) >> 6) & 0x3), ret, 3); + + ///*v3 = */Neon_shuffle_epi32(v3, 0x93, out v3); + ret = Neon.vmovq_n_u32(Neon.vgetq_lane_u32(v3, (0x93) & 0x3)); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v3, ((0x93) >> 2) & 0x3), ret, 1); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v3, ((0x93) >> 4) & 0x3), ret, 2); + v3 = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v3, ((0x93) >> 6) & 0x3), ret, 3); + + v0 = Neon.vaddq_u32(v0, v1); + v3 = Neon.veorq_u32(v3, v0); + v3 = Neon.veorq_u32(Neon.vshlq_n_u32(v3, 16), Neon.vshrq_n_u32(v3, 16)); + v2 = Neon.vaddq_u32(v2, v3); + v1 = Neon.veorq_u32(v1, v2); + v1 = Neon.veorq_u32(Neon.vshlq_n_u32(v1, 12), Neon.vshrq_n_u32(v1, 20)); + v0 = Neon.vaddq_u32(v0, v1); + v3 = Neon.veorq_u32(v3, v0); + v3 = Neon.veorq_u32(Neon.vshlq_n_u32(v3, 8), Neon.vshrq_n_u32(v3, 24)); + v2 = Neon.vaddq_u32(v2, v3); + v1 = Neon.veorq_u32(v1, v2); + v1 = Neon.veorq_u32(Neon.vshlq_n_u32(v1, 7), Neon.vshrq_n_u32(v1, 25)); + + ///*v1 = */Neon_shuffle_epi32(v1, 0x93, out v1); + ret = Neon.vmovq_n_u32(Neon.vgetq_lane_u32(v1, (0x93) & 0x3)); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v1, ((0x93) >> 2) & 0x3), ret, 1); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v1, ((0x93) >> 4) & 0x3), ret, 2); + v1 = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v1, ((0x93) >> 6) & 0x3), ret, 3); + + ///*v2 = */Neon_shuffle_epi32(v2, 0x4E, out v2); + ret = Neon.vmovq_n_u32(Neon.vgetq_lane_u32(v2, (0x4E) & 0x3)); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v2, ((0x4E) >> 2) & 0x3), ret, 1); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v2, ((0x4E) >> 4) & 0x3), ret, 2); + v2 = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v2, ((0x4E) >> 6) & 0x3), ret, 3); + + ///*v3 = */Neon_shuffle_epi32(v3, 0x39, out v3); + ret = Neon.vmovq_n_u32(Neon.vgetq_lane_u32(v3, (0x39) & 0x3)); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v3, ((0x39) >> 2) & 0x3), ret, 1); + ret = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v3, ((0x39) >> 4) & 0x3), ret, 2); + v3 = Neon.vsetq_lane_u32(Neon.vgetq_lane_u32(v3, ((0x39) >> 6) & 0x3), ret, 3); + } + + v0 = Neon.vaddq_u32(v0, x0); + v1 = Neon.vaddq_u32(v1, x1); + v2 = Neon.vaddq_u32(v2, x2); + v3 = Neon.vaddq_u32(v3, x3); + + n0 = Neon.vld1q_u32((uint*)(input + 0x40)); //Load128_Byte(input[0x40..]); + n1 = Neon.vld1q_u32((uint*)(input + 0x50)); //Load128_Byte(input[0x50..]); + n2 = Neon.vld1q_u32((uint*)(input + 0x60)); //Load128_Byte(input[0x60..]); + n3 = Neon.vld1q_u32((uint*)(input + 0x70)); //Load128_Byte(input[0x70..]); + + n0 = Neon.veorq_u32(n0, v0); + n1 = Neon.veorq_u32(n1, v1); + n2 = Neon.veorq_u32(n2, v2); + n3 = Neon.veorq_u32(n3, v3); + + Neon.vst1q_u32((uint*)(output + 0x40), n0); //Store128_Byte(n0, output[0x40..]); + Neon.vst1q_u32((uint*)(output + 0x50), n1); //Store128_Byte(n1, output[0x50..]); + Neon.vst1q_u32((uint*)(output + 0x60), n2); //Store128_Byte(n2, output[0x60..]); + Neon.vst1q_u32((uint*)(output + 0x70), n3); //Store128_Byte(n3, output[0x70..]); + } + else + { + // Inlined to two ImplProcessBlock calls: + //ImplProcessBlock(input, output); + //ImplProcessBlock(input[64..], output[64..]); + + FastChaChaEngineHelper.ChachaCoreImpl(rounds, state, keyStream); + ++state[12]; + ulong* pulinput = (ulong*)input; + ulong* puloutput = (ulong*)output; + ulong* pulkeyStream = (ulong*)keyStream; + + puloutput[0] = pulkeyStream[0] ^ pulinput[0]; + puloutput[1] = pulkeyStream[1] ^ pulinput[1]; + puloutput[2] = pulkeyStream[2] ^ pulinput[2]; + puloutput[3] = pulkeyStream[3] ^ pulinput[3]; + + puloutput[4] = pulkeyStream[4] ^ pulinput[4]; + puloutput[5] = pulkeyStream[5] ^ pulinput[5]; + puloutput[6] = pulkeyStream[6] ^ pulinput[6]; + puloutput[7] = pulkeyStream[7] ^ pulinput[7]; + + FastChaChaEngineHelper.ChachaCoreImpl(rounds, state, keyStream); + ++state[12]; + + pulinput = (ulong*)&input[64]; + puloutput = (ulong*)&output[64]; + + puloutput[0] = pulkeyStream[0] ^ pulinput[0]; + puloutput[1] = pulkeyStream[1] ^ pulinput[1]; + puloutput[2] = pulkeyStream[2] ^ pulinput[2]; + puloutput[3] = pulkeyStream[3] ^ pulinput[3]; + + puloutput[4] = pulkeyStream[4] ^ pulinput[4]; + puloutput[5] = pulkeyStream[5] ^ pulinput[5]; + puloutput[6] = pulkeyStream[6] ^ pulinput[6]; + puloutput[7] = pulkeyStream[7] ^ pulinput[7]; + } + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaCha7539EngineHelper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaCha7539EngineHelper.cs.meta new file mode 100644 index 000000000..1446ced13 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaCha7539EngineHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f659fd4b1e907e64c82229d4a0b83341 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaChaEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaChaEngine.cs new file mode 100644 index 000000000..be575d58c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaChaEngine.cs @@ -0,0 +1,249 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +#if NETCOREAPP3_0_OR_GREATER +using System.Buffers.Binary; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.Connections.TLS.Crypto.Impl +{ + /// + /// Implementation of Daniel J. Bernstein's ChaCha stream cipher. + /// + + + + [BestHTTP.PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstructionAttribute] + public sealed class FastChaChaEngine + : FastSalsa20Engine + { + /// + /// Creates a 20 rounds ChaCha engine. + /// + public FastChaChaEngine() + { + } + + /// + /// Creates a ChaCha engine with a specific number of rounds. + /// + /// the number of rounds (must be an even number). + public FastChaChaEngine(int rounds) + : base(rounds) + { + } + + public override string AlgorithmName + { + get { return "ChaCha" + rounds; } + } + + protected override void AdvanceCounter() + { + if (++engineState[12] == 0) + { + ++engineState[13]; + } + } + + protected override void ResetCounter() + { + engineState[12] = engineState[13] = 0; + } + + protected override void SetKey(byte[] keyBytes, byte[] ivBytes) + { + if (keyBytes != null) + { + if ((keyBytes.Length != 16) && (keyBytes.Length != 32)) + throw new ArgumentException(AlgorithmName + " requires 128 bit or 256 bit key"); + + PackTauOrSigma(keyBytes.Length, engineState, 0); + + // Key + Pack.LE_To_UInt32(keyBytes, 0, engineState, 4, 4); + Pack.LE_To_UInt32(keyBytes, keyBytes.Length - 16, engineState, 8, 4); + } + + // IV + Pack.LE_To_UInt32(ivBytes, 0, engineState, 14, 2); + } + + protected override void GenerateKeyStream(byte[] output) + { + //ChachaCore(rounds, engineState, output); + FastChaChaEngineHelper.ChachaCore(rounds, engineState, output); + } + + internal static void ChachaCore(int rounds, uint[] input, byte[] output) + { + Debug.Assert(rounds % 2 == 0); + Debug.Assert(input.Length >= 16); + Debug.Assert(output.Length >= 64); + +#if NETCOREAPP3_0_OR_GREATER + if (Sse2.IsSupported) + { + var x0 = Load128_UInt32(input.AsSpan()); + var x1 = Load128_UInt32(input.AsSpan(4)); + var x2 = Load128_UInt32(input.AsSpan(8)); + var x3 = Load128_UInt32(input.AsSpan(12)); + + var v0 = x0; + var v1 = x1; + var v2 = x2; + var v3 = x3; + + for (int i = rounds; i > 0; i -= 2) + { + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 16), Sse2.ShiftRightLogical(v3, 16)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 12), Sse2.ShiftRightLogical(v1, 20)); + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 8), Sse2.ShiftRightLogical(v3, 24)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 7), Sse2.ShiftRightLogical(v1, 25)); + + v1 = Sse2.Shuffle(v1, 0x39); + v2 = Sse2.Shuffle(v2, 0x4E); + v3 = Sse2.Shuffle(v3, 0x93); + + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 16), Sse2.ShiftRightLogical(v3, 16)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 12), Sse2.ShiftRightLogical(v1, 20)); + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 8), Sse2.ShiftRightLogical(v3, 24)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 7), Sse2.ShiftRightLogical(v1, 25)); + + v1 = Sse2.Shuffle(v1, 0x93); + v2 = Sse2.Shuffle(v2, 0x4E); + v3 = Sse2.Shuffle(v3, 0x39); + } + + v0 = Sse2.Add(v0, x0); + v1 = Sse2.Add(v1, x1); + v2 = Sse2.Add(v2, x2); + v3 = Sse2.Add(v3, x3); + + Store128_UInt32(v0, output.AsSpan()); + Store128_UInt32(v1, output.AsSpan(0x10)); + Store128_UInt32(v2, output.AsSpan(0x20)); + Store128_UInt32(v3, output.AsSpan(0x30)); + return; + } +#endif + + { + uint x00 = input[0], x01 = input[1], x02 = input[2], x03 = input[3]; + uint x04 = input[4], x05 = input[5], x06 = input[6], x07 = input[7]; + uint x08 = input[8], x09 = input[9], x10 = input[10], x11 = input[11]; + uint x12 = input[12], x13 = input[13], x14 = input[14], x15 = input[15]; + + for (int i = rounds; i > 0; i -= 2) + { + x00 += x04; x12 = Integers.RotateLeft(x12 ^ x00, 16); + x01 += x05; x13 = Integers.RotateLeft(x13 ^ x01, 16); + x02 += x06; x14 = Integers.RotateLeft(x14 ^ x02, 16); + x03 += x07; x15 = Integers.RotateLeft(x15 ^ x03, 16); + + x08 += x12; x04 = Integers.RotateLeft(x04 ^ x08, 12); + x09 += x13; x05 = Integers.RotateLeft(x05 ^ x09, 12); + x10 += x14; x06 = Integers.RotateLeft(x06 ^ x10, 12); + x11 += x15; x07 = Integers.RotateLeft(x07 ^ x11, 12); + + x00 += x04; x12 = Integers.RotateLeft(x12 ^ x00, 8); + x01 += x05; x13 = Integers.RotateLeft(x13 ^ x01, 8); + x02 += x06; x14 = Integers.RotateLeft(x14 ^ x02, 8); + x03 += x07; x15 = Integers.RotateLeft(x15 ^ x03, 8); + + x08 += x12; x04 = Integers.RotateLeft(x04 ^ x08, 7); + x09 += x13; x05 = Integers.RotateLeft(x05 ^ x09, 7); + x10 += x14; x06 = Integers.RotateLeft(x06 ^ x10, 7); + x11 += x15; x07 = Integers.RotateLeft(x07 ^ x11, 7); + x00 += x05; x15 = Integers.RotateLeft(x15 ^ x00, 16); + x01 += x06; x12 = Integers.RotateLeft(x12 ^ x01, 16); + x02 += x07; x13 = Integers.RotateLeft(x13 ^ x02, 16); + x03 += x04; x14 = Integers.RotateLeft(x14 ^ x03, 16); + + x10 += x15; x05 = Integers.RotateLeft(x05 ^ x10, 12); + x11 += x12; x06 = Integers.RotateLeft(x06 ^ x11, 12); + x08 += x13; x07 = Integers.RotateLeft(x07 ^ x08, 12); + x09 += x14; x04 = Integers.RotateLeft(x04 ^ x09, 12); + + x00 += x05; x15 = Integers.RotateLeft(x15 ^ x00, 8); + x01 += x06; x12 = Integers.RotateLeft(x12 ^ x01, 8); + x02 += x07; x13 = Integers.RotateLeft(x13 ^ x02, 8); + x03 += x04; x14 = Integers.RotateLeft(x14 ^ x03, 8); + + x10 += x15; x05 = Integers.RotateLeft(x05 ^ x10, 7); + x11 += x12; x06 = Integers.RotateLeft(x06 ^ x11, 7); + x08 += x13; x07 = Integers.RotateLeft(x07 ^ x08, 7); + x09 += x14; x04 = Integers.RotateLeft(x04 ^ x09, 7); + } + + Pack.UInt32_To_LE(x00 + input[0], output, 0); + Pack.UInt32_To_LE(x01 + input[1], output, 4); + Pack.UInt32_To_LE(x02 + input[2], output, 8); + Pack.UInt32_To_LE(x03 + input[3], output, 12); + Pack.UInt32_To_LE(x04 + input[4], output, 16); + Pack.UInt32_To_LE(x05 + input[5], output, 20); + Pack.UInt32_To_LE(x06 + input[6], output, 24); + Pack.UInt32_To_LE(x07 + input[7], output, 28); + Pack.UInt32_To_LE(x08 + input[8], output, 32); + Pack.UInt32_To_LE(x09 + input[9], output, 36); + Pack.UInt32_To_LE(x10 + input[10], output, 40); + Pack.UInt32_To_LE(x11 + input[11], output, 44); + Pack.UInt32_To_LE(x12 + input[12], output, 48); + Pack.UInt32_To_LE(x13 + input[13], output, 52); + Pack.UInt32_To_LE(x14 + input[14], output, 56); + Pack.UInt32_To_LE(x15 + input[15], output, 60); + } + } + +#if NETCOREAPP3_0_OR_GREATER + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static Vector128 Load128_UInt32(ReadOnlySpan t) + { + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 16) + return MemoryMarshal.Read>(MemoryMarshal.AsBytes(t)); + + return Vector128.Create(t[0], t[1], t[2], t[3]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void Store128_UInt32(Vector128 s, Span t) + { + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 16) + { + MemoryMarshal.Write(t, ref s); + return; + } + + var u = s.AsUInt64(); + BinaryPrimitives.WriteUInt64LittleEndian(t[..8], u.GetElement(0)); + BinaryPrimitives.WriteUInt64LittleEndian(t[8..], u.GetElement(1)); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaChaEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaChaEngine.cs.meta new file mode 100644 index 000000000..f36fd378a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaChaEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: da7d76cfa0d2599459593226dc3959aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaChaEngineHelper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaChaEngineHelper.cs new file mode 100644 index 000000000..4f17ff108 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaChaEngineHelper.cs @@ -0,0 +1,124 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +using System; +using System.Runtime.CompilerServices; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +#if BESTHTTP_WITH_BURST +using Unity.Burst; +#endif + +namespace BestHTTP.Connections.TLS.Crypto.Impl +{ +#if BESTHTTP_WITH_BURST + [Unity.Burst.BurstCompile] +#endif + internal static class FastChaChaEngineHelper + { + internal unsafe static void ChachaCore(int rounds, uint[] input, byte[] output) + { + fixed (uint* pinput = input) + fixed (byte* poutput = output) + ChachaCoreImpl(rounds, pinput, poutput); + } + +#if BESTHTTP_WITH_BURST + [Unity.Burst.BurstCompile] + [Unity.Burst.CompilerServices.SkipLocalsInit] +#endif + internal unsafe static void ChachaCoreImpl(int rounds, +#if BESTHTTP_WITH_BURST + [NoAlias] +#endif + uint* input, +#if BESTHTTP_WITH_BURST + [NoAlias] +#endif + byte* output) + { + uint* x = stackalloc uint[16]; + + for (int i = 0; i < 16; i++) + x[i] = input[i]; + + uint tmp = 0; + for (int i = rounds; i > 0; i -= 2) + { + x[00] += x[04]; tmp = x[12] ^ x[00]; x[12] = (tmp << 16) | (tmp >> -16); // Integers.RotateLeft(x[12] ^ x[00], 16); + x[01] += x[05]; tmp = x[13] ^ x[01]; x[13] = (tmp << 16) | (tmp >> -16); // Integers.RotateLeft(x[13] ^ x[01], 16); + x[02] += x[06]; tmp = x[14] ^ x[02]; x[14] = (tmp << 16) | (tmp >> -16); // Integers.RotateLeft(x[14] ^ x[02], 16); + x[03] += x[07]; tmp = x[15] ^ x[03]; x[15] = (tmp << 16) | (tmp >> -16); // Integers.RotateLeft(x[15] ^ x[03], 16); + + x[08] += x[12]; tmp = x[04] ^ x[08]; x[04] = (tmp << 12) | (tmp >> -12); // Integers.RotateLeft(x[04] ^ x[08], 12); + x[09] += x[13]; tmp = x[05] ^ x[09]; x[05] = (tmp << 12) | (tmp >> -12); // Integers.RotateLeft(x[05] ^ x[09], 12); + x[10] += x[14]; tmp = x[06] ^ x[10]; x[06] = (tmp << 12) | (tmp >> -12); // Integers.RotateLeft(x[06] ^ x[10], 12); + x[11] += x[15]; tmp = x[07] ^ x[11]; x[07] = (tmp << 12) | (tmp >> -12); // Integers.RotateLeft(x[07] ^ x[11], 12); + + x[00] += x[04]; tmp = x[12] ^ x[00]; x[12] = (tmp << 8) | (tmp >> -8); // Integers.RotateLeft(x[12] ^ x[00], 8); + x[01] += x[05]; tmp = x[13] ^ x[01]; x[13] = (tmp << 8) | (tmp >> -8); // Integers.RotateLeft(x[13] ^ x[01], 8); + x[02] += x[06]; tmp = x[14] ^ x[02]; x[14] = (tmp << 8) | (tmp >> -8); // Integers.RotateLeft(x[14] ^ x[02], 8); + x[03] += x[07]; tmp = x[15] ^ x[03]; x[15] = (tmp << 8) | (tmp >> -8); // Integers.RotateLeft(x[15] ^ x[03], 8); + + x[08] += x[12]; tmp = x[04] ^ x[08]; x[04] = (tmp << 7) | (tmp >> -7); // Integers.RotateLeft(x[04] ^ x[08], 7); + x[09] += x[13]; tmp = x[05] ^ x[09]; x[05] = (tmp << 7) | (tmp >> -7); // Integers.RotateLeft(x[05] ^ x[09], 7); + x[10] += x[14]; tmp = x[06] ^ x[10]; x[06] = (tmp << 7) | (tmp >> -7); // Integers.RotateLeft(x[06] ^ x[10], 7); + x[11] += x[15]; tmp = x[07] ^ x[11]; x[07] = (tmp << 7) | (tmp >> -7); // Integers.RotateLeft(x[07] ^ x[11], 7); + x[00] += x[05]; tmp = x[15] ^ x[00]; x[15] = (tmp << 16) | (tmp >> -16); // Integers.RotateLeft(x[15] ^ x[00], 16); + x[01] += x[06]; tmp = x[12] ^ x[01]; x[12] = (tmp << 16) | (tmp >> -16); // Integers.RotateLeft(x[12] ^ x[01], 16); + x[02] += x[07]; tmp = x[13] ^ x[02]; x[13] = (tmp << 16) | (tmp >> -16); // Integers.RotateLeft(x[13] ^ x[02], 16); + x[03] += x[04]; tmp = x[14] ^ x[03]; x[14] = (tmp << 16) | (tmp >> -16); // Integers.RotateLeft(x[14] ^ x[03], 16); + + x[10] += x[15]; tmp = x[05] ^ x[10]; x[05] = (tmp << 12) | (tmp >> -12); // Integers.RotateLeft(x[05] ^ x[10], 12); + x[11] += x[12]; tmp = x[06] ^ x[11]; x[06] = (tmp << 12) | (tmp >> -12); // Integers.RotateLeft(x[06] ^ x[11], 12); + x[08] += x[13]; tmp = x[07] ^ x[08]; x[07] = (tmp << 12) | (tmp >> -12); // Integers.RotateLeft(x[07] ^ x[08], 12); + x[09] += x[14]; tmp = x[04] ^ x[09]; x[04] = (tmp << 12) | (tmp >> -12); // Integers.RotateLeft(x[04] ^ x[09], 12); + + x[00] += x[05]; tmp = x[15] ^ x[00]; x[15] = (tmp << 8) | (tmp >> -8); // Integers.RotateLeft(x[15] ^ x[00], 8); + x[01] += x[06]; tmp = x[12] ^ x[01]; x[12] = (tmp << 8) | (tmp >> -8); // Integers.RotateLeft(x[12] ^ x[01], 8); + x[02] += x[07]; tmp = x[13] ^ x[02]; x[13] = (tmp << 8) | (tmp >> -8); // Integers.RotateLeft(x[13] ^ x[02], 8); + x[03] += x[04]; tmp = x[14] ^ x[03]; x[14] = (tmp << 8) | (tmp >> -8); // Integers.RotateLeft(x[14] ^ x[03], 8); + + x[10] += x[15]; tmp = x[05] ^ x[10]; x[05] = (tmp << 7) | (tmp >> -7); // Integers.RotateLeft(x[05] ^ x[10], 7); + x[11] += x[12]; tmp = x[06] ^ x[11]; x[06] = (tmp << 7) | (tmp >> -7); // Integers.RotateLeft(x[06] ^ x[11], 7); + x[08] += x[13]; tmp = x[07] ^ x[08]; x[07] = (tmp << 7) | (tmp >> -7); // Integers.RotateLeft(x[07] ^ x[08], 7); + x[09] += x[14]; tmp = x[04] ^ x[09]; x[04] = (tmp << 7) | (tmp >> -7); // Integers.RotateLeft(x[04] ^ x[09], 7); + } + + for (int i = 0; i < 16; i++) + { + uint n = x[i] + input[i]; + + output[(i * 4)] = (byte)n; + output[(i * 4) + 1] = (byte)(n >> 8); + output[(i * 4) + 2] = (byte)(n >> 16); + output[(i * 4) + 3] = (byte)(n >> 24); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static unsafe void ImplProcessBlock(ReadOnlySpan input, Span output, byte[] keyStream) + { + fixed (byte* pinput = input) + fixed (byte* poutput = output) + fixed (byte* pkeyStream = keyStream) + { + ulong* pulinput = (ulong*)pinput; + ulong* puloutput = (ulong*)poutput; + ulong* pulkeyStream = (ulong*)pkeyStream; + + puloutput[0] = pulkeyStream[0] ^ pulinput[0]; + puloutput[1] = pulkeyStream[1] ^ pulinput[1]; + puloutput[2] = pulkeyStream[2] ^ pulinput[2]; + puloutput[3] = pulkeyStream[3] ^ pulinput[3]; + + puloutput[4] = pulkeyStream[4] ^ pulinput[4]; + puloutput[5] = pulkeyStream[5] ^ pulinput[5]; + puloutput[6] = pulkeyStream[6] ^ pulinput[6]; + puloutput[7] = pulkeyStream[7] ^ pulinput[7]; + } + } +#endif + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaChaEngineHelper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaChaEngineHelper.cs.meta new file mode 100644 index 000000000..5c99dccbf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastChaChaEngineHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be2ccde693e75344ca2f2e8f707edec4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastGcmBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastGcmBlockCipher.cs new file mode 100644 index 000000000..19af25ce2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastGcmBlockCipher.cs @@ -0,0 +1,1577 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.CompilerServices; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ +using System.Buffers.Binary; +using System.Runtime.InteropServices; +#endif +#if NETCOREAPP3_0_OR_GREATER +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes.Gcm; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.Connections.TLS.Crypto.Impl +{ + /// + /// Implements the Galois/Counter mode (GCM) detailed in NIST Special Publication 800-38D. + /// + + + + [BestHTTP.PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstructionAttribute] +#if BESTHTTP_WITH_BURST + [Unity.Burst.BurstCompile] +#endif + public sealed class FastGcmBlockCipher + : IAeadBlockCipher + { + private static IGcmMultiplier CreateGcmMultiplier() + { +#if NETCOREAPP3_0_OR_GREATER + // TODO Prefer more tightly coupled test + if (Pclmulqdq.IsSupported) + { + return new BasicGcmMultiplier(); + } +#endif + + return new Tables8kGcmMultiplier(); + } + + public const int BlockSize = 16; + byte[] ctrBlock = new byte[BlockSize]; + + private readonly IBlockCipher cipher; + private readonly BurstTables8kGcmMultiplier multiplier; + private IGcmExponentiator exp; + + // These fields are set by Init and not modified by processing + private bool forEncryption; + private bool initialised; + private int macSize; + private byte[] lastKey; + private byte[] nonce; + private byte[] initialAssociatedText; + private byte[] H; + private byte[] J0; + + // These fields are modified during processing + private byte[] bufBlock; + private byte[] macBlock; + private byte[] S, S_at, S_atPre; + private byte[] counter; + private uint counter32; + private uint blocksRemaining; + private int bufOff; + private ulong totalLength; + private byte[] atBlock; + private int atBlockPos; + private ulong atLength; + private ulong atLengthPre; + + public FastGcmBlockCipher( + IBlockCipher c) + : this(c, null) + { + } + + public FastGcmBlockCipher( + IBlockCipher c, + IGcmMultiplier m) + { + if (c.GetBlockSize() != BlockSize) + throw new ArgumentException("cipher required with a block size of " + BlockSize + "."); + + //if (m == null) + //{ + // m = CreateGcmMultiplier(); + //} + + this.cipher = c; + this.multiplier = new BurstTables8kGcmMultiplier(); + } + + public string AlgorithmName => cipher.AlgorithmName + "/GCM"; + + public IBlockCipher UnderlyingCipher => cipher; + + public int GetBlockSize() + { + return BlockSize; + } + + /// + /// MAC sizes from 32 bits to 128 bits (must be a multiple of 8) are supported. The default is 128 bits. + /// Sizes less than 96 are not recommended, but are supported for specialized applications. + /// + public void Init(bool forEncryption, ICipherParameters parameters) + { + this.forEncryption = forEncryption; + //this.macBlock = null; + if (this.macBlock != null) + Array.Clear(this.macBlock, 0, this.macBlock.Length); + this.initialised = true; + + KeyParameter keyParam; + byte[] newNonce = null; + + if (parameters is AeadParameters) + { + AeadParameters param = (AeadParameters)parameters; + + newNonce = param.GetNonce(); + initialAssociatedText = param.GetAssociatedText(); + + int macSizeBits = param.MacSize; + if (macSizeBits < 32 || macSizeBits > 128 || macSizeBits % 8 != 0) + { + throw new ArgumentException("Invalid value for MAC size: " + macSizeBits); + } + + macSize = macSizeBits / 8; + keyParam = param.Key; + } + else if (parameters is ParametersWithIV) + { + ParametersWithIV param = (ParametersWithIV)parameters; + + newNonce = param.GetIV(); + initialAssociatedText = null; + macSize = 16; + keyParam = (KeyParameter)param.Parameters; + } + else + { + throw new ArgumentException("invalid parameters passed to GCM"); + } + + int bufLength = forEncryption ? BlockSize : (BlockSize + macSize); + this.bufBlock = new byte[bufLength]; + + if (newNonce == null || newNonce.Length < 1) + { + throw new ArgumentException("IV must be at least 1 byte"); + } + + if (forEncryption) + { + if (nonce != null && Arrays.AreEqual(nonce, newNonce)) + { + if (keyParam == null) + { + throw new ArgumentException("cannot reuse nonce for GCM encryption"); + } + if (lastKey != null && Arrays.AreEqual(lastKey, keyParam.GetKey())) + { + throw new ArgumentException("cannot reuse nonce for GCM encryption"); + } + } + } + + nonce = newNonce; + if (keyParam != null) + { + lastKey = keyParam.GetKey(); + } + + // TODO Restrict macSize to 16 if nonce length not 12? + + // Cipher always used in forward mode + // if keyParam is null we're reusing the last key. + if (keyParam != null) + { + cipher.Init(true, keyParam); + + this.H = new byte[BlockSize]; + cipher.ProcessBlock(H, 0, H, 0); + + // if keyParam is null we're reusing the last key and the multiplier doesn't need re-init + multiplier.Init(H); + exp = null; + } + else if (this.H == null) + { + throw new ArgumentException("Key must be specified in initial init"); + } + + this.J0 = new byte[BlockSize]; + + if (nonce.Length == 12) + { + Array.Copy(nonce, 0, J0, 0, nonce.Length); + this.J0[BlockSize - 1] = 0x01; + } + else + { + gHASH(J0, nonce, nonce.Length); + byte[] X = new byte[BlockSize]; + Pack.UInt64_To_BE((ulong)nonce.Length * 8UL, X, 8); + gHASHBlock(J0, X); + } + + this.S = new byte[BlockSize]; + this.S_at = new byte[BlockSize]; + this.S_atPre = new byte[BlockSize]; + this.atBlock = new byte[BlockSize]; + this.atBlockPos = 0; + this.atLength = 0; + this.atLengthPre = 0; + this.counter = Arrays.Clone(J0); + this.counter32 = Pack.BE_To_UInt32(counter, 12); + this.blocksRemaining = uint.MaxValue - 1; // page 8, len(P) <= 2^39 - 256, 1 block used by tag + this.bufOff = 0; + this.totalLength = 0; + + if (initialAssociatedText != null) + { + ProcessAadBytes(initialAssociatedText, 0, initialAssociatedText.Length); + } + } + + public byte[] GetMac() + { + return macBlock == null + ? new byte[macSize] + : Arrays.Clone(macBlock); + } + + public int GetOutputSize(int len) + { + int totalData = len + bufOff; + + if (forEncryption) + { + return totalData + macSize; + } + + return totalData < macSize ? 0 : totalData - macSize; + } + + public int GetUpdateOutputSize(int len) + { + int totalData = len + bufOff; + if (!forEncryption) + { + if (totalData < macSize) + { + return 0; + } + totalData -= macSize; + } + return totalData - totalData % BlockSize; + } + + public void ProcessAadByte(byte input) + { + CheckStatus(); + + atBlock[atBlockPos] = input; + if (++atBlockPos == BlockSize) + { + // Hash each block as it fills + gHASHBlock(S_at, atBlock); + atBlockPos = 0; + atLength += BlockSize; + } + } + + public void ProcessAadBytes(byte[] inBytes, int inOff, int len) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ProcessAadBytes(inBytes.AsSpan(inOff, len)); +#else + CheckStatus(); + + if (atBlockPos > 0) + { + int available = BlockSize - atBlockPos; + if (len < available) + { + Array.Copy(inBytes, inOff, atBlock, atBlockPos, len); + atBlockPos += len; + return; + } + + Array.Copy(inBytes, inOff, atBlock, atBlockPos, available); + gHASHBlock(S_at, atBlock); + atLength += BlockSize; + inOff += available; + len -= available; + //atBlockPos = 0; + } + + int inLimit = inOff + len - BlockSize; + + while (inOff <= inLimit) + { + gHASHBlock(S_at, inBytes, inOff); + atLength += BlockSize; + inOff += BlockSize; + } + + atBlockPos = BlockSize + inLimit - inOff; + Array.Copy(inBytes, inOff, atBlock, 0, atBlockPos); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void ProcessAadBytes(ReadOnlySpan input) + { + CheckStatus(); + + if (atBlockPos > 0) + { + int available = BlockSize - atBlockPos; + if (input.Length < available) + { + input.CopyTo(atBlock.AsSpan(atBlockPos)); + atBlockPos += input.Length; + return; + } + + input[..available].CopyTo(atBlock.AsSpan(atBlockPos)); + gHASHBlock(S_at, atBlock); + atLength += BlockSize; + input = input[available..]; + //atBlockPos = 0; + } + + while (input.Length >= BlockSize) + { + gHASHBlock(S_at, input); + atLength += BlockSize; + input = input[BlockSize..]; + } + + input.CopyTo(atBlock); + atBlockPos = input.Length; + } +#endif + + private void InitCipher() + { + if (atLength > 0) + { + Array.Copy(S_at, 0, S_atPre, 0, BlockSize); + atLengthPre = atLength; + } + + // Finish hash for partial AAD block + if (atBlockPos > 0) + { + gHASHPartial(S_atPre, atBlock, 0, atBlockPos); + atLengthPre += (uint)atBlockPos; + } + + if (atLengthPre > 0) + { + Array.Copy(S_atPre, 0, S, 0, BlockSize); + } + } + + public int ProcessByte(byte input, byte[] output, int outOff) + { + CheckStatus(); + + bufBlock[bufOff] = input; + if (++bufOff == bufBlock.Length) + { + if (forEncryption) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + EncryptBlock(bufBlock, output.AsSpan(outOff)); +#else + EncryptBlock(bufBlock, 0, output, outOff); +#endif + bufOff = 0; + } + else + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + DecryptBlock(bufBlock, output.AsSpan(outOff)); +#else + DecryptBlock(bufBlock, 0, output, outOff); +#endif + Array.Copy(bufBlock, BlockSize, bufBlock, 0, macSize); + bufOff = macSize; + } + return BlockSize; + } + return 0; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessByte(byte input, Span output) + { + CheckStatus(); + + bufBlock[bufOff] = input; + if (++bufOff == bufBlock.Length) + { + if (forEncryption) + { + EncryptBlock(bufBlock, output); + bufOff = 0; + } + else + { + DecryptBlock(bufBlock, output); + Array.Copy(bufBlock, BlockSize, bufBlock, 0, macSize); + bufOff = macSize; + } + return BlockSize; + } + return 0; + } +#endif + + public int ProcessBytes(byte[] input, int inOff, int len, byte[] output, int outOff) + { + CheckStatus(); + + Check.DataLength(input, inOff, len, "input buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ProcessBytes(input.AsSpan(inOff, len), Spans.FromNullable(output, outOff)); +#else + int resultLen = 0; + + if (forEncryption) + { + if (bufOff > 0) + { + int available = BlockSize - bufOff; + if (len < available) + { + Array.Copy(input, inOff, bufBlock, bufOff, len); + bufOff += len; + return 0; + } + + Array.Copy(input, inOff, bufBlock, bufOff, available); + EncryptBlock(bufBlock, 0, output, outOff); + inOff += available; + len -= available; + resultLen = BlockSize; + //bufOff = 0; + } + + int inLimit1 = inOff + len - BlockSize; + int inLimit2 = inLimit1 - BlockSize; + + while (inOff <= inLimit2) + { + EncryptBlocks2(input, inOff, output, outOff + resultLen); + inOff += BlockSize * 2; + resultLen += BlockSize * 2; + } + + if (inOff <= inLimit1) + { + EncryptBlock(input, inOff, output, outOff + resultLen); + inOff += BlockSize; + resultLen += BlockSize; + } + + bufOff = BlockSize + inLimit1 - inOff; + Array.Copy(input, inOff, bufBlock, 0, bufOff); + } + else + { + int available = bufBlock.Length - bufOff; + if (len < available) + { + Array.Copy(input, inOff, bufBlock, bufOff, len); + bufOff += len; + return 0; + } + + if (bufOff >= BlockSize) + { + DecryptBlock(bufBlock, 0, output, outOff); + Array.Copy(bufBlock, BlockSize, bufBlock, 0, bufOff -= BlockSize); + resultLen = BlockSize; + + available += BlockSize; + if (len < available) + { + Array.Copy(input, inOff, bufBlock, bufOff, len); + bufOff += len; + return resultLen; + } + } + + int inLimit1 = inOff + len - bufBlock.Length; + int inLimit2 = inLimit1 - BlockSize; + + available = BlockSize - bufOff; + Array.Copy(input, inOff, bufBlock, bufOff, available); + DecryptBlock(bufBlock, 0, output, outOff + resultLen); + inOff += available; + resultLen += BlockSize; + //bufOff = 0; + + while (inOff <= inLimit2) + { + DecryptBlocks2(input, inOff, output, outOff + resultLen); + inOff += BlockSize * 2; + resultLen += BlockSize * 2; + } + + if (inOff <= inLimit1) + { + DecryptBlock(input, inOff, output, outOff + resultLen); + inOff += BlockSize; + resultLen += BlockSize; + } + + bufOff = bufBlock.Length + inLimit1 - inOff; + Array.Copy(input, inOff, bufBlock, 0, bufOff); + } + + return resultLen; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public unsafe int ProcessBytes(ReadOnlySpan input, Span output) + { + CheckStatus(); + + int resultLen = 0; + + if (forEncryption) + { + if (bufOff > 0) + { + int available = BlockSize - bufOff; + if (input.Length < available) + { + input.CopyTo(bufBlock.AsSpan(bufOff)); + bufOff += input.Length; + return 0; + } + + input[..available].CopyTo(bufBlock.AsSpan(bufOff)); + EncryptBlock(bufBlock, output); + input = input[available..]; + resultLen = BlockSize; + //bufOff = 0; + } + + while (input.Length >= BlockSize * 2) + { + EncryptBlocks2(input, output[resultLen..]); + input = input[(BlockSize * 2)..]; + resultLen += BlockSize * 2; + } + + if (input.Length >= BlockSize) + { + EncryptBlock(input, output[resultLen..]); + input = input[BlockSize..]; + resultLen += BlockSize; + } + + bufOff = input.Length; + input.CopyTo(bufBlock); + } + else + { + int available = bufBlock.Length - bufOff; + if (input.Length < available) + { + input.CopyTo(bufBlock.AsSpan(bufOff)); + bufOff += input.Length; + return 0; + } + + if (bufOff >= BlockSize) + { + DecryptBlock(bufBlock, output); + Array.Copy(bufBlock, BlockSize, bufBlock, 0, bufOff -= BlockSize); + resultLen = BlockSize; + + available += BlockSize; + if (input.Length < available) + { + input.CopyTo(bufBlock.AsSpan(bufOff)); + bufOff += input.Length; + return resultLen; + } + } + + int inLimit1 = bufBlock.Length; + int inLimit2 = inLimit1 + BlockSize; + + available = BlockSize - bufOff; + input[..available].CopyTo(bufBlock.AsSpan(bufOff)); + DecryptBlock(bufBlock, output[resultLen..]); + input = input[available..]; + resultLen += BlockSize; + //bufOff = 0; + + while (input.Length >= inLimit2) + { + //DecryptBlocks2(input, output[resultLen..]); + + var outputSample = output[resultLen..]; + + if (totalLength == 0) + { + InitCipher(); + } + + Span ctrBlock = stackalloc byte[BlockSize]; + + //GetNextCtrBlock(ctrBlock); + if (blocksRemaining == 0) + throw new InvalidOperationException("Attempt to process too many blocks"); + + blocksRemaining--; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BinaryPrimitives.WriteUInt32BigEndian(counter.AsSpan(12), ++counter32); +#else + Pack.UInt32_To_BE(++counter32, counter, 12); +#endif + + cipher.ProcessBlock(counter, ctrBlock); + + ReadOnlySpan uInput = MemoryMarshal.Cast(input); + Span uS = MemoryMarshal.Cast(S); + ReadOnlySpan uCtrBlock = MemoryMarshal.Cast(ctrBlock); + Span uOutput = MemoryMarshal.Cast(outputSample); + + uS[0] ^= uInput[0]; + uOutput[0] = uInput[0] ^ uCtrBlock[0]; + + uS[1] ^= uInput[1]; + uOutput[1] = uInput[1] ^ uCtrBlock[1]; + + uS[2] ^= uInput[2]; + uOutput[2] = uInput[2] ^ uCtrBlock[2]; + + uS[3] ^= uInput[3]; + uOutput[3] = uInput[3] ^ uCtrBlock[3]; + + multiplier.MultiplyH(S); + + input = input[BlockSize..]; + outputSample = outputSample[BlockSize..]; + + //GetNextCtrBlock(ctrBlock); + if (blocksRemaining == 0) + throw new InvalidOperationException("Attempt to process too many blocks"); + + blocksRemaining--; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BinaryPrimitives.WriteUInt32BigEndian(counter.AsSpan(12), ++counter32); +#else + Pack.UInt32_To_BE(++counter32, counter, 12); +#endif + + cipher.ProcessBlock(counter, ctrBlock); + + uInput = MemoryMarshal.Cast(input); + uS = MemoryMarshal.Cast(S); + uCtrBlock = MemoryMarshal.Cast(ctrBlock); + uOutput = MemoryMarshal.Cast(outputSample); + + uS[0] ^= uInput[0]; + uOutput[0] = uInput[0] ^ uCtrBlock[0]; + + uS[1] ^= uInput[1]; + uOutput[1] = uInput[1] ^ uCtrBlock[1]; + + uS[2] ^= uInput[2]; + uOutput[2] = uInput[2] ^ uCtrBlock[2]; + + uS[3] ^= uInput[3]; + uOutput[3] = uInput[3] ^ uCtrBlock[3]; + + multiplier.MultiplyH(S); + + totalLength += BlockSize * 2; + + //input = input[(BlockSize * 2)..]; + input = input[BlockSize..]; + resultLen += BlockSize * 2; + } + + if (input.Length >= inLimit1) + { + DecryptBlock(input, output[resultLen..]); + input = input[BlockSize..]; + resultLen += BlockSize; + } + + bufOff = input.Length; + input.CopyTo(bufBlock); + } + + return resultLen; + } +#endif + + public int DoFinal(byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(output.AsSpan(outOff)); +#else + CheckStatus(); + + if (totalLength == 0) + { + InitCipher(); + } + + int extra = bufOff; + + if (forEncryption) + { + Check.OutputLength(output, outOff, extra + macSize, "output buffer too short"); + } + else + { + if (extra < macSize) + throw new InvalidCipherTextException("data too short"); + + extra -= macSize; + + Check.OutputLength(output, outOff, extra, "output buffer too short"); + } + + if (extra > 0) + { + ProcessPartial(bufBlock, 0, extra, output, outOff); + } + + atLength += (uint)atBlockPos; + + if (atLength > atLengthPre) + { + /* + * Some AAD was sent after the cipher started. We determine the difference b/w the hash value + * we actually used when the cipher started (S_atPre) and the final hash value calculated (S_at). + * Then we carry this difference forward by multiplying by H^c, where c is the number of (full or + * partial) cipher-text blocks produced, and adjust the current hash. + */ + + // Finish hash for partial AAD block + if (atBlockPos > 0) + { + gHASHPartial(S_at, atBlock, 0, atBlockPos); + } + + // Find the difference between the AAD hashes + if (atLengthPre > 0) + { + GcmUtilities.Xor(S_at, S_atPre); + } + + // Number of cipher-text blocks produced + long c = (long)(((totalLength * 8) + 127) >> 7); + + // Calculate the adjustment factor + byte[] H_c = new byte[16]; + if (exp == null) + { + exp = new BasicGcmExponentiator(); + exp.Init(H); + } + exp.ExponentiateX(c, H_c); + + // Carry the difference forward + GcmUtilities.Multiply(S_at, H_c); + + // Adjust the current hash + GcmUtilities.Xor(S, S_at); + } + + // Final gHASH + byte[] X = new byte[BlockSize]; + Pack.UInt64_To_BE(atLength * 8UL, X, 0); + Pack.UInt64_To_BE(totalLength * 8UL, X, 8); + + gHASHBlock(S, X); + + // T = MSBt(GCTRk(J0,S)) + byte[] tag = new byte[BlockSize]; + cipher.ProcessBlock(J0, 0, tag, 0); + GcmUtilities.Xor(tag, S); + + int resultLen = extra; + + // We place into macBlock our calculated value for T + this.macBlock = new byte[macSize]; + Array.Copy(tag, 0, macBlock, 0, macSize); + + if (forEncryption) + { + // Append T to the message + Array.Copy(macBlock, 0, output, outOff + bufOff, macSize); + resultLen += macSize; + } + else + { + // Retrieve the T value from the message and compare to calculated one + byte[] msgMac = new byte[macSize]; + Array.Copy(bufBlock, extra, msgMac, 0, macSize); + if (!Arrays.ConstantTimeAreEqual(this.macBlock, msgMac)) + throw new InvalidCipherTextException("mac check in GCM failed"); + } + + Reset(false); + + return resultLen; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + CheckStatus(); + + if (totalLength == 0) + { + InitCipher(); + } + + int extra = bufOff; + + if (forEncryption) + { + Check.OutputLength(output, extra + macSize, "output buffer too short"); + } + else + { + if (extra < macSize) + throw new InvalidCipherTextException("data too short"); + + extra -= macSize; + + Check.OutputLength(output, extra, "output buffer too short"); + } + + if (extra > 0) + { + ProcessPartial(bufBlock.AsSpan(0, extra), output); + } + + atLength += (uint)atBlockPos; + + if (atLength > atLengthPre) + { + /* + * Some AAD was sent after the cipher started. We determine the difference b/w the hash value + * we actually used when the cipher started (S_atPre) and the final hash value calculated (S_at). + * Then we carry this difference forward by multiplying by H^c, where c is the number of (full or + * partial) cipher-text blocks produced, and adjust the current hash. + */ + + // Finish hash for partial AAD block + if (atBlockPos > 0) + { + gHASHPartial(S_at, atBlock, 0, atBlockPos); + } + + // Find the difference between the AAD hashes + if (atLengthPre > 0) + { + GcmUtilities.Xor(S_at, S_atPre); + } + + // Number of cipher-text blocks produced + long c = (long)(((totalLength * 8) + 127) >> 7); + + // Calculate the adjustment factor + byte[] H_c = new byte[16]; + if (exp == null) + { + exp = new BasicGcmExponentiator(); + exp.Init(H); + } + exp.ExponentiateX(c, H_c); + + // Carry the difference forward + GcmUtilities.Multiply(S_at, H_c); + + // Adjust the current hash + GcmUtilities.Xor(S, S_at); + } + + // Final gHASH + Span X = stackalloc byte[BlockSize]; + Pack.UInt64_To_BE(atLength * 8UL, X); + Pack.UInt64_To_BE(totalLength * 8UL, X[8..]); + + gHASHBlock(S, X); + + // T = MSBt(GCTRk(J0,S)) + Span tag = stackalloc byte[BlockSize]; + cipher.ProcessBlock(J0, tag); + GcmUtilities.Xor(tag, S); + + int resultLen = extra; + + // We place into macBlock our calculated value for T + this.macBlock = new byte[macSize]; + tag[..macSize].CopyTo(macBlock); + + if (forEncryption) + { + // Append T to the message + macBlock.CopyTo(output[bufOff..]); + resultLen += macSize; + } + else + { + // Retrieve the T value from the message and compare to calculated one + Span msgMac = stackalloc byte[macSize]; + bufBlock.AsSpan(extra, macSize).CopyTo(msgMac); + if (!Arrays.ConstantTimeAreEqual(this.macBlock, msgMac)) + throw new InvalidCipherTextException("mac check in GCM failed"); + } + + Reset(false); + + return resultLen; + } +#endif + + public void Reset() + { + Reset(true); + } + + private void Reset(bool clearMac) + { + // note: we do not reset the nonce. + + S = new byte[BlockSize]; + S_at = new byte[BlockSize]; + S_atPre = new byte[BlockSize]; + atBlock = new byte[BlockSize]; + atBlockPos = 0; + atLength = 0; + atLengthPre = 0; + counter = Arrays.Clone(J0); + counter32 = Pack.BE_To_UInt32(counter, 12); + blocksRemaining = uint.MaxValue - 1; + bufOff = 0; + totalLength = 0; + + if (bufBlock != null) + { + Arrays.Fill(bufBlock, 0); + } + + if (clearMac) + { + macBlock = null; + } + + if (forEncryption) + { + initialised = false; + } + else + { + if (initialAssociatedText != null) + { + ProcessAadBytes(initialAssociatedText, 0, initialAssociatedText.Length); + } + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void DecryptBlock(ReadOnlySpan input, Span output) + { + Check.OutputLength(output, BlockSize, "output buffer too short"); + + if (totalLength == 0) + { + InitCipher(); + } + + Span ctrBlock = stackalloc byte[BlockSize]; + + GetNextCtrBlock(ctrBlock); +#if BESTHTTP_WITH_BURST + FastGcmBlockCipherHelper.DecryptBlock(input, output, ctrBlock, S.AsSpan(), BlockSize); +#elif NETCOREAPP3_0_OR_GREATER + if (Sse2.IsSupported && Unsafe.SizeOf>() == BlockSize) + { + var t0 = MemoryMarshal.Read>(input); + var t1 = MemoryMarshal.Read>(ctrBlock); + var t2 = MemoryMarshal.Read>(S.AsSpan()); + + t1 = Sse2.Xor(t1, t0); + t2 = Sse2.Xor(t2, t0); + + MemoryMarshal.Write(output, ref t1); + MemoryMarshal.Write(S.AsSpan(), ref t2); + } + else +#else + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = input[i + 0]; + byte c1 = input[i + 1]; + byte c2 = input[i + 2]; + byte c3 = input[i + 3]; + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + output[i + 0] = (byte)(c0 ^ ctrBlock[i + 0]); + output[i + 1] = (byte)(c1 ^ ctrBlock[i + 1]); + output[i + 2] = (byte)(c2 ^ ctrBlock[i + 2]); + output[i + 3] = (byte)(c3 ^ ctrBlock[i + 3]); + } + } +#endif + multiplier.MultiplyH(S); + + totalLength += BlockSize; + } + + private void DecryptBlocks2(ReadOnlySpan input, Span outputSample) + { + Check.OutputLength(outputSample, BlockSize * 2, "output buffer too short"); + + if (totalLength == 0) + { + InitCipher(); + } + + Span ctrBlock = stackalloc byte[BlockSize]; + + GetNextCtrBlock(ctrBlock); + + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = input[i + 0]; + byte c1 = input[i + 1]; + byte c2 = input[i + 2]; + byte c3 = input[i + 3]; + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + outputSample[i + 0] = (byte)(c0 ^ ctrBlock[i + 0]); + outputSample[i + 1] = (byte)(c1 ^ ctrBlock[i + 1]); + outputSample[i + 2] = (byte)(c2 ^ ctrBlock[i + 2]); + outputSample[i + 3] = (byte)(c3 ^ ctrBlock[i + 3]); + } + + multiplier.MultiplyH(S); + + input = input[BlockSize..]; + outputSample = outputSample[BlockSize..]; + + GetNextCtrBlock(ctrBlock); + + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = input[i + 0]; + byte c1 = input[i + 1]; + byte c2 = input[i + 2]; + byte c3 = input[i + 3]; + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + outputSample[i + 0] = (byte)(c0 ^ ctrBlock[i + 0]); + outputSample[i + 1] = (byte)(c1 ^ ctrBlock[i + 1]); + outputSample[i + 2] = (byte)(c2 ^ ctrBlock[i + 2]); + outputSample[i + 3] = (byte)(c3 ^ ctrBlock[i + 3]); + } + + multiplier.MultiplyH(S); + + totalLength += BlockSize * 2; + } + + private void EncryptBlock(ReadOnlySpan input, Span output) + { + Check.OutputLength(output, BlockSize, "output buffer too short"); + + if (totalLength == 0) + { + InitCipher(); + } + + Span ctrBlock = stackalloc byte[BlockSize]; + + GetNextCtrBlock(ctrBlock); +#if NETCOREAPP3_0_OR_GREATER + if (Sse2.IsSupported && Unsafe.SizeOf>() == BlockSize) + { + var t0 = MemoryMarshal.Read>(input); + var t1 = MemoryMarshal.Read>(ctrBlock); + var t2 = MemoryMarshal.Read>(S.AsSpan()); + + t1 = Sse2.Xor(t1, t0); + t2 = Sse2.Xor(t2, t1); + + MemoryMarshal.Write(output, ref t1); + MemoryMarshal.Write(S.AsSpan(), ref t2); + } + else +#endif + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = (byte)(ctrBlock[i + 0] ^ input[i + 0]); + byte c1 = (byte)(ctrBlock[i + 1] ^ input[i + 1]); + byte c2 = (byte)(ctrBlock[i + 2] ^ input[i + 2]); + byte c3 = (byte)(ctrBlock[i + 3] ^ input[i + 3]); + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + output[i + 0] = c0; + output[i + 1] = c1; + output[i + 2] = c2; + output[i + 3] = c3; + } + } + multiplier.MultiplyH(S); + + totalLength += BlockSize; + } + + private void EncryptBlocks2(ReadOnlySpan input, Span output) + { + Check.OutputLength(output, BlockSize * 2, "Output buffer too short"); + + if (totalLength == 0) + { + InitCipher(); + } + + Span ctrBlock = stackalloc byte[BlockSize]; + + GetNextCtrBlock(ctrBlock); +#if NETCOREAPP3_0_OR_GREATER + if (Sse2.IsSupported && Unsafe.SizeOf>() == BlockSize) + { + var t0 = MemoryMarshal.Read>(input); + var t1 = MemoryMarshal.Read>(ctrBlock); + var t2 = MemoryMarshal.Read>(S.AsSpan()); + + t1 = Sse2.Xor(t1, t0); + t2 = Sse2.Xor(t2, t1); + + MemoryMarshal.Write(output, ref t1); + MemoryMarshal.Write(S.AsSpan(), ref t2); + } + else +#endif + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = (byte)(ctrBlock[i + 0] ^ input[i + 0]); + byte c1 = (byte)(ctrBlock[i + 1] ^ input[i + 1]); + byte c2 = (byte)(ctrBlock[i + 2] ^ input[i + 2]); + byte c3 = (byte)(ctrBlock[i + 3] ^ input[i + 3]); + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + output[i + 0] = c0; + output[i + 1] = c1; + output[i + 2] = c2; + output[i + 3] = c3; + } + } + multiplier.MultiplyH(S); + + input = input[BlockSize..]; + output = output[BlockSize..]; + + GetNextCtrBlock(ctrBlock); +#if NETCOREAPP3_0_OR_GREATER + if (Sse2.IsSupported && Unsafe.SizeOf>() == BlockSize) + { + var t0 = MemoryMarshal.Read>(input); + var t1 = MemoryMarshal.Read>(ctrBlock); + var t2 = MemoryMarshal.Read>(S.AsSpan()); + + t1 = Sse2.Xor(t1, t0); + t2 = Sse2.Xor(t2, t1); + + MemoryMarshal.Write(output, ref t1); + MemoryMarshal.Write(S.AsSpan(), ref t2); + } + else +#endif + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = (byte)(ctrBlock[i + 0] ^ input[i + 0]); + byte c1 = (byte)(ctrBlock[i + 1] ^ input[i + 1]); + byte c2 = (byte)(ctrBlock[i + 2] ^ input[i + 2]); + byte c3 = (byte)(ctrBlock[i + 3] ^ input[i + 3]); + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + output[i + 0] = c0; + output[i + 1] = c1; + output[i + 2] = c2; + output[i + 3] = c3; + } + } + multiplier.MultiplyH(S); + + totalLength += BlockSize * 2; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void GetNextCtrBlock(Span block) + { + if (blocksRemaining == 0) + throw new InvalidOperationException("Attempt to process too many blocks"); + + blocksRemaining--; + + Pack.UInt32_To_BE(++counter32, counter, 12); + + cipher.ProcessBlock(counter, block); + } + + private void ProcessPartial(Span partialBlock, Span output) + { + Span ctrBlock = stackalloc byte[BlockSize]; + GetNextCtrBlock(ctrBlock); + + if (forEncryption) + { + GcmUtilities.Xor(partialBlock, ctrBlock, partialBlock.Length); + gHASHPartial(S, partialBlock); + } + else + { + gHASHPartial(S, partialBlock); + GcmUtilities.Xor(partialBlock, ctrBlock, partialBlock.Length); + } + + partialBlock.CopyTo(output); + totalLength += (uint)partialBlock.Length; + } +#else + private void DecryptBlock(byte[] inBuf, int inOff, byte[] outBuf, int outOff) + { + Check.OutputLength(outBuf, outOff, BlockSize, "Output buffer too short"); + + if (totalLength == 0) + { + InitCipher(); + } + + //byte[] ctrBlock = new byte[BlockSize]; + + GetNextCtrBlock(ctrBlock); + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = inBuf[inOff + i + 0]; + byte c1 = inBuf[inOff + i + 1]; + byte c2 = inBuf[inOff + i + 2]; + byte c3 = inBuf[inOff + i + 3]; + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + outBuf[outOff + i + 0] = (byte)(c0 ^ ctrBlock[i + 0]); + outBuf[outOff + i + 1] = (byte)(c1 ^ ctrBlock[i + 1]); + outBuf[outOff + i + 2] = (byte)(c2 ^ ctrBlock[i + 2]); + outBuf[outOff + i + 3] = (byte)(c3 ^ ctrBlock[i + 3]); + } + } + multiplier.MultiplyH(S); + + totalLength += BlockSize; + } + + private void DecryptBlocks2(byte[] inBuf, int inOff, byte[] outBuf, int outOff) + { + Check.OutputLength(outBuf, outOff, BlockSize * 2, "Output buffer too short"); + + if (totalLength == 0) + { + InitCipher(); + } + + //byte[] ctrBlock = new byte[BlockSize]; + + GetNextCtrBlock(ctrBlock); + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = inBuf[inOff + i + 0]; + byte c1 = inBuf[inOff + i + 1]; + byte c2 = inBuf[inOff + i + 2]; + byte c3 = inBuf[inOff + i + 3]; + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + outBuf[outOff + i + 0] = (byte)(c0 ^ ctrBlock[i + 0]); + outBuf[outOff + i + 1] = (byte)(c1 ^ ctrBlock[i + 1]); + outBuf[outOff + i + 2] = (byte)(c2 ^ ctrBlock[i + 2]); + outBuf[outOff + i + 3] = (byte)(c3 ^ ctrBlock[i + 3]); + } + } + multiplier.MultiplyH(S); + + inOff += BlockSize; + outOff += BlockSize; + + GetNextCtrBlock(ctrBlock); + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = inBuf[inOff + i + 0]; + byte c1 = inBuf[inOff + i + 1]; + byte c2 = inBuf[inOff + i + 2]; + byte c3 = inBuf[inOff + i + 3]; + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + outBuf[outOff + i + 0] = (byte)(c0 ^ ctrBlock[i + 0]); + outBuf[outOff + i + 1] = (byte)(c1 ^ ctrBlock[i + 1]); + outBuf[outOff + i + 2] = (byte)(c2 ^ ctrBlock[i + 2]); + outBuf[outOff + i + 3] = (byte)(c3 ^ ctrBlock[i + 3]); + } + } + multiplier.MultiplyH(S); + + totalLength += BlockSize * 2; + } + + private void EncryptBlock(byte[] inBuf, int inOff, byte[] outBuf, int outOff) + { + Check.OutputLength(outBuf, outOff, BlockSize, "Output buffer too short"); + + if (totalLength == 0) + { + InitCipher(); + } + + //byte[] ctrBlock = new byte[BlockSize]; + + GetNextCtrBlock(ctrBlock); + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = (byte)(ctrBlock[i + 0] ^ inBuf[inOff + i + 0]); + byte c1 = (byte)(ctrBlock[i + 1] ^ inBuf[inOff + i + 1]); + byte c2 = (byte)(ctrBlock[i + 2] ^ inBuf[inOff + i + 2]); + byte c3 = (byte)(ctrBlock[i + 3] ^ inBuf[inOff + i + 3]); + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + outBuf[outOff + i + 0] = c0; + outBuf[outOff + i + 1] = c1; + outBuf[outOff + i + 2] = c2; + outBuf[outOff + i + 3] = c3; + } + } + multiplier.MultiplyH(S); + + totalLength += BlockSize; + } + + private void EncryptBlocks2(byte[] inBuf, int inOff, byte[] outBuf, int outOff) + { + Check.OutputLength(outBuf, outOff, BlockSize * 2, "Output buffer too short"); + + if (totalLength == 0) + { + InitCipher(); + } + + //byte[] ctrBlock = new byte[BlockSize]; + + GetNextCtrBlock(ctrBlock); + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = (byte)(ctrBlock[i + 0] ^ inBuf[inOff + i + 0]); + byte c1 = (byte)(ctrBlock[i + 1] ^ inBuf[inOff + i + 1]); + byte c2 = (byte)(ctrBlock[i + 2] ^ inBuf[inOff + i + 2]); + byte c3 = (byte)(ctrBlock[i + 3] ^ inBuf[inOff + i + 3]); + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + outBuf[outOff + i + 0] = c0; + outBuf[outOff + i + 1] = c1; + outBuf[outOff + i + 2] = c2; + outBuf[outOff + i + 3] = c3; + } + } + multiplier.MultiplyH(S); + + inOff += BlockSize; + outOff += BlockSize; + + GetNextCtrBlock(ctrBlock); + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = (byte)(ctrBlock[i + 0] ^ inBuf[inOff + i + 0]); + byte c1 = (byte)(ctrBlock[i + 1] ^ inBuf[inOff + i + 1]); + byte c2 = (byte)(ctrBlock[i + 2] ^ inBuf[inOff + i + 2]); + byte c3 = (byte)(ctrBlock[i + 3] ^ inBuf[inOff + i + 3]); + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + outBuf[outOff + i + 0] = c0; + outBuf[outOff + i + 1] = c1; + outBuf[outOff + i + 2] = c2; + outBuf[outOff + i + 3] = c3; + } + } + multiplier.MultiplyH(S); + + totalLength += BlockSize * 2; + } + + private void GetNextCtrBlock(byte[] block) + { + if (blocksRemaining == 0) + throw new InvalidOperationException("Attempt to process too many blocks"); + + blocksRemaining--; + + Pack.UInt32_To_BE(++counter32, counter, 12); + + cipher.ProcessBlock(counter, 0, block, 0); + } + + private void ProcessPartial(byte[] buf, int off, int len, byte[] output, int outOff) + { + //byte[] ctrBlock = new byte[BlockSize]; + GetNextCtrBlock(ctrBlock); + + if (forEncryption) + { + GcmUtilities.Xor(buf, off, ctrBlock, 0, len); + gHASHPartial(S, buf, off, len); + } + else + { + gHASHPartial(S, buf, off, len); + GcmUtilities.Xor(buf, off, ctrBlock, 0, len); + } + + Array.Copy(buf, off, output, outOff, len); + totalLength += (uint)len; + } +#endif + + private void gHASH(byte[] Y, byte[] b, int len) + { + for (int pos = 0; pos < len; pos += BlockSize) + { + int num = System.Math.Min(len - pos, BlockSize); + gHASHPartial(Y, b, pos, num); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void gHASHBlock(byte[] Y, ReadOnlySpan b) + { + GcmUtilities.Xor(Y, b); + multiplier.MultiplyH(Y); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void gHASHPartial(byte[] Y, ReadOnlySpan b) + { + GcmUtilities.Xor(Y, b, b.Length); + multiplier.MultiplyH(Y); + } +#else + private void gHASHBlock(byte[] Y, byte[] b) + { + GcmUtilities.Xor(Y, b); + multiplier.MultiplyH(Y); + } + + private void gHASHBlock(byte[] Y, byte[] b, int off) + { + GcmUtilities.Xor(Y, b, off); + multiplier.MultiplyH(Y); + } +#endif + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void gHASHPartial(byte[] Y, byte[] b, int off, int len) + { + GcmUtilities.Xor(Y, b, off, len); + multiplier.MultiplyH(Y); + } + + private void CheckStatus() + { + if (!initialised) + { + if (forEncryption) + { + throw new InvalidOperationException("GCM cipher cannot be reused for encryption"); + } + throw new InvalidOperationException("GCM cipher needs to be initialised"); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastGcmBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastGcmBlockCipher.cs.meta new file mode 100644 index 000000000..d8dd9840d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastGcmBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aee2eea618479f042ac5f8d3339f3005 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastGcmBlockCipherHelper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastGcmBlockCipherHelper.cs new file mode 100644 index 000000000..38894146f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastGcmBlockCipherHelper.cs @@ -0,0 +1,78 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) && BESTHTTP_WITH_BURST +using System; +using static Unity.Burst.Intrinsics.X86.Sse2; +using static Unity.Burst.Intrinsics.Arm.Neon; +using System.Runtime.CompilerServices; +using Unity.Burst; + +// https://github.com/sschoener/burst-simd-exercises/blob/main/Assets/Examples/2-sum-small-numbers-sse3/SumSmallNumbers_SSE3.cs + +namespace BestHTTP.Connections.TLS.Crypto.Impl +{ + [BurstCompile] + internal sealed unsafe class FastGcmBlockCipherHelper + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe void DecryptBlock(ReadOnlySpan input, Span output, Span ctrBlock, Span S, int BlockSize) + { + fixed (byte* pInput = input) + fixed (byte* pOutput = output) + fixed (byte* pctrBlock = ctrBlock) + fixed (byte* pS = S) { + DecryptBlock_Impl(pInput, input.Length, pOutput, output.Length, pctrBlock, pS, BlockSize); + } + } + + [BurstCompile(CompileSynchronously = true)] + private unsafe static void DecryptBlock_Impl([NoAlias] byte* pinput, int inLen, [NoAlias] byte* poutput, int outLen, [NoAlias] byte* pctrBlock, [NoAlias] byte* pS, int BlockSize) + { + if (IsSse2Supported) + { + var vInput = loadu_si128(pinput); + var vCtrBlock = loadu_si128(pctrBlock); + var vS = loadu_si128(pS); + + vS = xor_si128(vS, vInput); + vCtrBlock = xor_si128(vInput, vCtrBlock); + + storeu_si128(pS, vS); + storeu_si128(poutput, vCtrBlock); + } + else if (IsNeonSupported) + { + var vInput = vld1q_u8(pinput); + var vCtrBlock = vld1q_u8(pctrBlock); + var vS = vld1q_u8(pS); + + vS = veorq_u8(vS, vInput); + vCtrBlock = veorq_u8(vInput, vCtrBlock); + + vst1q_u8(pS, vS); + vst1q_u8(poutput, vCtrBlock); + } + else + { + Unity.Burst.CompilerServices.Hint.Assume(BlockSize == 16); + + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = pinput[i + 0]; + byte c1 = pinput[i + 1]; + byte c2 = pinput[i + 2]; + byte c3 = pinput[i + 3]; + + pS[i + 0] ^= c0; + pS[i + 1] ^= c1; + pS[i + 2] ^= c2; + pS[i + 3] ^= c3; + + poutput[i + 0] = (byte)(c0 ^ pctrBlock[i + 0]); + poutput[i + 1] = (byte)(c1 ^ pctrBlock[i + 1]); + poutput[i + 2] = (byte)(c2 ^ pctrBlock[i + 2]); + poutput[i + 3] = (byte)(c3 ^ pctrBlock[i + 3]); + } + } + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastGcmBlockCipherHelper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastGcmBlockCipherHelper.cs.meta new file mode 100644 index 000000000..750193485 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastGcmBlockCipherHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0bc09b804bfd7824c90f995674bdad11 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastPoly1305.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastPoly1305.cs new file mode 100644 index 000000000..334d998ca --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastPoly1305.cs @@ -0,0 +1,438 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.CompilerServices; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.Connections.TLS.Crypto.Impl +{ + + /// + /// Poly1305 message authentication code, designed by D. J. Bernstein. + /// + /// + /// Poly1305 computes a 128-bit (16 bytes) authenticator, using a 128 bit nonce and a 256 bit key + /// consisting of a 128 bit key applied to an underlying cipher, and a 128 bit key (with 106 + /// effective key bits) used in the authenticator. + /// + /// The polynomial calculation in this implementation is adapted from the public domain poly1305-donna-unrolled C implementation + /// by Andrew M (@floodyberry). + /// + /// + + + + [BestHTTP.PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstructionAttribute] + public sealed class FastPoly1305 : IMac + { + private const int BlockSize = 16; + + private readonly IBlockCipher cipher; + + // Initialised state + + /** Polynomial key */ + private uint r0, r1, r2, r3, r4; + + /** Precomputed 5 * r[1..4] */ + private uint s1, s2, s3, s4; + + /** Encrypted nonce */ + private uint k0, k1, k2, k3; + + // Accumulating state + + /** Current block of buffered input */ + private byte[] currentBlock = new byte[BlockSize]; + + /** Current offset in input buffer */ + private int currentBlockOffset = 0; + + /** Polynomial accumulator */ + private uint h0, h1, h2, h3, h4; + + /** + * Constructs a Poly1305 MAC, where the key passed to init() will be used directly. + */ + public FastPoly1305() + { + this.cipher = null; + } + + /** + * Constructs a Poly1305 MAC, using a 128 bit block cipher. + */ + public FastPoly1305(IBlockCipher cipher) + { + if (cipher.GetBlockSize() != BlockSize) + { + throw new ArgumentException("Poly1305 requires a 128 bit block cipher."); + } + this.cipher = cipher; + } + + /// + /// Initialises the Poly1305 MAC. + /// + /// a {@link ParametersWithIV} containing a 128 bit nonce and a {@link KeyParameter} with + /// a 256 bit key complying to the {@link Poly1305KeyGenerator Poly1305 key format}. + public void Init(ICipherParameters parameters) + { + byte[] nonce = null; + + if (cipher != null) + { + if (!(parameters is ParametersWithIV)) + throw new ArgumentException("Poly1305 requires an IV when used with a block cipher.", "parameters"); + + ParametersWithIV ivParams = (ParametersWithIV)parameters; + nonce = ivParams.GetIV(); + parameters = ivParams.Parameters; + } + + if (!(parameters is KeyParameter)) + throw new ArgumentException("Poly1305 requires a key."); + + KeyParameter keyParams = (KeyParameter)parameters; + + SetKey(keyParams.GetKey(), nonce); + + Reset(); + } + + private void SetKey(byte[] key, byte[] nonce) + { + if (key.Length != 32) + throw new ArgumentException("Poly1305 key must be 256 bits."); + + if (cipher != null && (nonce == null || nonce.Length != BlockSize)) + throw new ArgumentException("Poly1305 requires a 128 bit IV."); + + // Extract r portion of key (and "clamp" the values) + uint t0 = Pack.LE_To_UInt32(key, 0); + uint t1 = Pack.LE_To_UInt32(key, 4); + uint t2 = Pack.LE_To_UInt32(key, 8); + uint t3 = Pack.LE_To_UInt32(key, 12); + + // NOTE: The masks perform the key "clamping" implicitly + r0 = t0 & 0x03FFFFFFU; + r1 = ((t0 >> 26) | (t1 << 6)) & 0x03FFFF03U; + r2 = ((t1 >> 20) | (t2 << 12)) & 0x03FFC0FFU; + r3 = ((t2 >> 14) | (t3 << 18)) & 0x03F03FFFU; + r4 = (t3 >> 8) & 0x000FFFFFU; + + // Precompute multipliers + s1 = r1 * 5; + s2 = r2 * 5; + s3 = r3 * 5; + s4 = r4 * 5; + + byte[] kBytes; + int kOff; + + if (cipher == null) + { + kBytes = key; + kOff = BlockSize; + } + else + { + // Compute encrypted nonce + kBytes = new byte[BlockSize]; + kOff = 0; + + cipher.Init(true, new KeyParameter(key, BlockSize, BlockSize)); + cipher.ProcessBlock(nonce, 0, kBytes, 0); + } + + k0 = Pack.LE_To_UInt32(kBytes, kOff + 0); + k1 = Pack.LE_To_UInt32(kBytes, kOff + 4); + k2 = Pack.LE_To_UInt32(kBytes, kOff + 8); + k3 = Pack.LE_To_UInt32(kBytes, kOff + 12); + } + + public string AlgorithmName + { + get { return cipher == null ? "Poly1305" : "Poly1305-" + cipher.AlgorithmName; } + } + + public int GetMacSize() + { + return BlockSize; + } + + public void Update(byte input) + { + currentBlock[currentBlockOffset++] = input; + if (currentBlockOffset == BlockSize) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ProcessBlock(currentBlock); +#else + ProcessBlock(currentBlock, 0); +#endif + currentBlockOffset = 0; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void BlockUpdate(byte[] input, int inOff, int len) + { + Check.DataLength(input, inOff, len, "input buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BlockUpdate(input.AsSpan(inOff, len)); +#else + int available = BlockSize - currentBlockOffset; + if (len < available) + { + Array.Copy(input, inOff, currentBlock, currentBlockOffset, len); + currentBlockOffset += len; + return; + } + + int pos = 0; + if (currentBlockOffset > 0) + { + Array.Copy(input, inOff, currentBlock, currentBlockOffset, available); + pos = available; + ProcessBlock(currentBlock, 0); + } + + int remaining; + while ((remaining = len - pos) >= BlockSize) + { + ProcessBlock(input, inOff + pos); + pos += BlockSize; + } + + Array.Copy(input, inOff + pos, currentBlock, 0, remaining); + currentBlockOffset = remaining; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#if !UNITY_ANDROID || UNITY_EDITOR + unsafe +#endif + public void BlockUpdate(ReadOnlySpan input) + { + int available = BlockSize - currentBlockOffset; + if (input.Length < available) + { + input.CopyTo(currentBlock.AsSpan(currentBlockOffset)); + currentBlockOffset += input.Length; + return; + } + + int pos = 0; + if (currentBlockOffset > 0) + { + input[..available].CopyTo(currentBlock.AsSpan(currentBlockOffset)); + pos = available; + ProcessBlock(currentBlock); + } + + int remaining; + while ((remaining = input.Length - pos) >= BlockSize) + { +#if UNITY_ANDROID && !UNITY_EDITOR + uint t0 = System.Buffers.Binary.BinaryPrimitives.ReadUInt32LittleEndian(input[pos..]); + uint t1 = System.Buffers.Binary.BinaryPrimitives.ReadUInt32LittleEndian(input[(pos + 4)..]); + uint t2 = System.Buffers.Binary.BinaryPrimitives.ReadUInt32LittleEndian(input[(pos + 8)..]); + uint t3 = System.Buffers.Binary.BinaryPrimitives.ReadUInt32LittleEndian(input[(pos + 12)..]); +#else + uint t0 = 0; + uint t1 = 0; + uint t2 = 0; + uint t3 = 0; + + fixed (byte* pblock = &input[pos]) + { + uint* publock = (uint*)pblock; + t0 = publock[0]; + t1 = publock[1]; + t2 = publock[2]; + t3 = publock[3]; + } +#endif + + h0 += t0 & 0x3ffffffU; + h1 += ((t1 << 6) | (t0 >> 26)) & 0x3ffffffU; + h2 += ((t2 << 12) | (t1 >> 20)) & 0x3ffffffU; + h3 += ((t3 << 18) | (t2 >> 14)) & 0x3ffffffU; + h4 += (1 << 24) | (t3 >> 8); + + ulong tp0 = (ulong)h0 * r0 + (ulong)h1 * s4 + (ulong)h2 * s3 + (ulong)h3 * s2 + (ulong)h4 * s1; + ulong tp1 = (ulong)h0 * r1 + (ulong)h1 * r0 + (ulong)h2 * s4 + (ulong)h3 * s3 + (ulong)h4 * s2; + ulong tp2 = (ulong)h0 * r2 + (ulong)h1 * r1 + (ulong)h2 * r0 + (ulong)h3 * s4 + (ulong)h4 * s3; + ulong tp3 = (ulong)h0 * r3 + (ulong)h1 * r2 + (ulong)h2 * r1 + (ulong)h3 * r0 + (ulong)h4 * s4; + ulong tp4 = (ulong)h0 * r4 + (ulong)h1 * r3 + (ulong)h2 * r2 + (ulong)h3 * r1 + (ulong)h4 * r0; + + h0 = (uint)tp0 & 0x3ffffff; tp1 += (tp0 >> 26); + h1 = (uint)tp1 & 0x3ffffff; tp2 += (tp1 >> 26); + h2 = (uint)tp2 & 0x3ffffff; tp3 += (tp2 >> 26); + h3 = (uint)tp3 & 0x3ffffff; tp4 += (tp3 >> 26); + h4 = (uint)tp4 & 0x3ffffff; + h0 += (uint)(tp4 >> 26) * 5; + h1 += h0 >> 26; h0 &= 0x3ffffff; + + pos += BlockSize; + } + + input[pos..].CopyTo(currentBlock); + currentBlockOffset = remaining; + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void ProcessBlock(ReadOnlySpan block) + { + uint t0 = System.Buffers.Binary.BinaryPrimitives.ReadUInt32LittleEndian(block); + uint t1 = System.Buffers.Binary.BinaryPrimitives.ReadUInt32LittleEndian(block[4..]); + uint t2 = System.Buffers.Binary.BinaryPrimitives.ReadUInt32LittleEndian(block[8..]); + uint t3 = System.Buffers.Binary.BinaryPrimitives.ReadUInt32LittleEndian(block[12..]); +#else + private void ProcessBlock(byte[] buf, int off) + { + uint t0 = Pack.LE_To_UInt32(buf, off + 0); + uint t1 = Pack.LE_To_UInt32(buf, off + 4); + uint t2 = Pack.LE_To_UInt32(buf, off + 8); + uint t3 = Pack.LE_To_UInt32(buf, off + 12); +#endif + + h0 += t0 & 0x3ffffffU; + h1 += ((t1 << 6) | (t0 >> 26)) & 0x3ffffffU; + h2 += ((t2 << 12) | (t1 >> 20)) & 0x3ffffffU; + h3 += ((t3 << 18) | (t2 >> 14)) & 0x3ffffffU; + h4 += (1 << 24) | (t3 >> 8); + + ulong tp0 = (ulong)h0 * r0 + (ulong)h1 * s4 + (ulong)h2 * s3 + (ulong)h3 * s2 + (ulong)h4 * s1; + ulong tp1 = (ulong)h0 * r1 + (ulong)h1 * r0 + (ulong)h2 * s4 + (ulong)h3 * s3 + (ulong)h4 * s2; + ulong tp2 = (ulong)h0 * r2 + (ulong)h1 * r1 + (ulong)h2 * r0 + (ulong)h3 * s4 + (ulong)h4 * s3; + ulong tp3 = (ulong)h0 * r3 + (ulong)h1 * r2 + (ulong)h2 * r1 + (ulong)h3 * r0 + (ulong)h4 * s4; + ulong tp4 = (ulong)h0 * r4 + (ulong)h1 * r3 + (ulong)h2 * r2 + (ulong)h3 * r1 + (ulong)h4 * r0; + + h0 = (uint)tp0 & 0x3ffffff; tp1 += (tp0 >> 26); + h1 = (uint)tp1 & 0x3ffffff; tp2 += (tp1 >> 26); + h2 = (uint)tp2 & 0x3ffffff; tp3 += (tp2 >> 26); + h3 = (uint)tp3 & 0x3ffffff; tp4 += (tp3 >> 26); + h4 = (uint)tp4 & 0x3ffffff; + h0 += (uint)(tp4 >> 26) * 5; + h1 += h0 >> 26; h0 &= 0x3ffffff; + } + + public int DoFinal(byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(output.AsSpan(outOff)); +#else + Check.OutputLength(output, outOff, BlockSize, "output buffer is too short."); + + if (currentBlockOffset > 0) + { + // Process padded block + if (currentBlockOffset < BlockSize) + { + currentBlock[currentBlockOffset++] = 1; + while (currentBlockOffset < BlockSize) + { + currentBlock[currentBlockOffset++] = 0; + } + + h4 -= (1 << 24); + } + + ProcessBlock(currentBlock, 0); + } + + UnityEngine.Debug.Assert(h4 >> 26 == 0); + + //h0 += (h4 >> 26) * 5U + 5U; h4 &= 0x3ffffff; + h0 += 5U; + h1 += h0 >> 26; h0 &= 0x3ffffff; + h2 += h1 >> 26; h1 &= 0x3ffffff; + h3 += h2 >> 26; h2 &= 0x3ffffff; + h4 += h3 >> 26; h3 &= 0x3ffffff; + + long c = ((int)(h4 >> 26) - 1) * 5; + c += (long)k0 + ((h0) | (h1 << 26)); + Pack.UInt32_To_LE((uint)c, output, outOff); c >>= 32; + c += (long)k1 + ((h1 >> 6) | (h2 << 20)); + Pack.UInt32_To_LE((uint)c, output, outOff + 4); c >>= 32; + c += (long)k2 + ((h2 >> 12) | (h3 << 14)); + Pack.UInt32_To_LE((uint)c, output, outOff + 8); c >>= 32; + c += (long)k3 + ((h3 >> 18) | (h4 << 8)); + Pack.UInt32_To_LE((uint)c, output, outOff + 12); + + Reset(); + return BlockSize; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + Check.OutputLength(output, BlockSize, "output buffer is too short."); + + if (currentBlockOffset > 0) + { + // Process padded block + if (currentBlockOffset < BlockSize) + { + currentBlock[currentBlockOffset++] = 1; + while (currentBlockOffset < BlockSize) + { + currentBlock[currentBlockOffset++] = 0; + } + + h4 -= (1 << 24); + } + + ProcessBlock(currentBlock); + } + + UnityEngine.Debug.Assert(h4 >> 26 == 0); + + //h0 += (h4 >> 26) * 5U + 5U; h4 &= 0x3ffffff; + h0 += 5U; + h1 += h0 >> 26; h0 &= 0x3ffffff; + h2 += h1 >> 26; h1 &= 0x3ffffff; + h3 += h2 >> 26; h2 &= 0x3ffffff; + h4 += h3 >> 26; h3 &= 0x3ffffff; + + long c = ((int)(h4 >> 26) - 1) * 5; + c += (long)k0 + ((h0) | (h1 << 26)); + Pack.UInt32_To_LE((uint)c, output); c >>= 32; + c += (long)k1 + ((h1 >> 6) | (h2 << 20)); + Pack.UInt32_To_LE((uint)c, output[4..]); c >>= 32; + c += (long)k2 + ((h2 >> 12) | (h3 << 14)); + Pack.UInt32_To_LE((uint)c, output[8..]); c >>= 32; + c += (long)k3 + ((h3 >> 18) | (h4 << 8)); + Pack.UInt32_To_LE((uint)c, output[12..]); + + Reset(); + return BlockSize; + } +#endif + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Reset() + { + currentBlockOffset = 0; + + h0 = h1 = h2 = h3 = h4 = 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastPoly1305.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastPoly1305.cs.meta new file mode 100644 index 000000000..064a60aa9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastPoly1305.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 37a51744d555ed842b5a324a257460ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastSalsa20Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastSalsa20Engine.cs new file mode 100644 index 000000000..09f1c5252 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastSalsa20Engine.cs @@ -0,0 +1,560 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +#endif +#if NETCOREAPP3_0_OR_GREATER +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.Connections.TLS.Crypto.Impl +{ + /// + /// Implementation of Daniel J. Bernstein's Salsa20 stream cipher, Snuffle 2005 + /// + + + + [BestHTTP.PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstructionAttribute] + public class FastSalsa20Engine + : IStreamCipher + { + public static readonly int DEFAULT_ROUNDS = 20; + + /** Constants */ + private const int StateSize = 16; // 16, 32 bit ints = 64 bytes + + private readonly static uint[] TAU_SIGMA = Pack.LE_To_UInt32(Strings.ToAsciiByteArray("expand 16-byte k" + "expand 32-byte k"), 0, 8); + + internal void PackTauOrSigma(int keyLength, uint[] state, int stateOffset) + { + int tsOff = (keyLength - 16) / 4; + state[stateOffset] = TAU_SIGMA[tsOff]; + state[stateOffset + 1] = TAU_SIGMA[tsOff + 1]; + state[stateOffset + 2] = TAU_SIGMA[tsOff + 2]; + state[stateOffset + 3] = TAU_SIGMA[tsOff + 3]; + } + + protected int rounds; + + /* + * variables to hold the state of the engine + * during encryption and decryption + */ + internal int index = 0; + internal uint[] engineState = new uint[StateSize]; // state + internal uint[] x = new uint[StateSize]; // internal buffer + internal byte[] keyStream = new byte[StateSize * 4]; // expanded state, 64 bytes + internal bool initialised = false; + + /* + * internal counter + */ + private uint cW0, cW1, cW2; + + /// + /// Creates a 20 round Salsa20 engine. + /// + public FastSalsa20Engine() + : this(DEFAULT_ROUNDS) + { + } + + /// + /// Creates a Salsa20 engine with a specific number of rounds. + /// + /// the number of rounds (must be an even number). + public FastSalsa20Engine(int rounds) + { + if (rounds <= 0 || (rounds & 1) != 0) + { + throw new ArgumentException("'rounds' must be a positive, even number"); + } + + this.rounds = rounds; + } + + public virtual void Init( + bool forEncryption, + ICipherParameters parameters) + { + /* + * Salsa20 encryption and decryption is completely + * symmetrical, so the 'forEncryption' is + * irrelevant. (Like 90% of stream ciphers) + */ + + ParametersWithIV ivParams = parameters as ParametersWithIV; + if (ivParams == null) + throw new ArgumentException(AlgorithmName + " Init requires an IV", "parameters"); + + byte[] iv = ivParams.GetIV(); + if (iv == null || iv.Length != NonceSize) + throw new ArgumentException(AlgorithmName + " requires exactly " + NonceSize + " bytes of IV"); + + ICipherParameters keyParam = ivParams.Parameters; + if (keyParam == null) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " KeyParameter can not be null for first initialisation"); + + SetKey(null, iv); + } + else if (keyParam is KeyParameter) + { + SetKey(((KeyParameter)keyParam).GetKey(), iv); + } + else + { + throw new ArgumentException(AlgorithmName + " Init parameters must contain a KeyParameter (or null for re-init)"); + } + + Reset(); + initialised = true; + } + + protected virtual int NonceSize + { + get { return 8; } + } + + public virtual string AlgorithmName + { + get + { + string name = "Salsa20"; + if (rounds != DEFAULT_ROUNDS) + { + name += "/" + rounds; + } + return name; + } + } + + public virtual byte ReturnByte( + byte input) + { + if (LimitExceeded()) + { + throw new MaxBytesExceededException("2^70 byte limit per IV; Change IV"); + } + + if (index == 0) + { + GenerateKeyStream(keyStream); + AdvanceCounter(); + } + + byte output = (byte)(keyStream[index] ^ input); + index = (index + 1) & 63; + + return output; + } + + protected virtual void AdvanceCounter() + { + if (++engineState[8] == 0) + { + ++engineState[9]; + } + } + + public unsafe virtual void ProcessBytes( + byte[] inBytes, + int inOff, + int len, + byte[] outBytes, + int outOff) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.DataLength(inBytes, inOff, len, "input buffer too short"); + Check.OutputLength(outBytes, outOff, len, "output buffer too short"); + + if (LimitExceeded((uint)len)) + throw new MaxBytesExceededException("2^70 byte limit per IV would be exceeded; Change IV"); + + for (int i = 0; i < len; i++) + { + if (index == 0) + { + GenerateKeyStream(keyStream); + AdvanceCounter(); + + if (len - i >= 64) + { + fixed (byte* pbout = outBytes) + fixed (byte* pbin = inBytes) + fixed (byte* pbkey = keyStream) + { +#if BESTHTTP_WITH_BURST + FastSalsa20EngineHelper.ProcessBytes(pbout, outOff, pbin, inOff, pbkey); +#else + ulong* pulOut = (ulong*)&pbout[outOff]; + ulong* pulIn = (ulong*)&pbin[inOff]; + ulong* pulKeyStream = (ulong*)pbkey; + + pulOut[0] = pulKeyStream[0] ^ pulIn[0]; + pulOut[1] = pulKeyStream[1] ^ pulIn[1]; + pulOut[2] = pulKeyStream[2] ^ pulIn[2]; + pulOut[3] = pulKeyStream[3] ^ pulIn[3]; +#endif + } + + i += 63; + index = 0; + continue; + } + } + outBytes[i + outOff] = (byte)(keyStream[index] ^ inBytes[i + inOff]); + index = (index + 1) & 63; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void ProcessBytes(ReadOnlySpan input, Span output) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.OutputLength(output, input.Length, "output buffer too short"); + + if (LimitExceeded((uint)input.Length)) + throw new MaxBytesExceededException("2^70 byte limit per IV would be exceeded; Change IV"); + + for (int i = 0; i < input.Length; i++) + { + if (index == 0) + { + GenerateKeyStream(keyStream); + AdvanceCounter(); + + if (input.Length - i >= 64) + { + Span lOutput = MemoryMarshal.Cast(output.Slice(i)); + ReadOnlySpan lKeyStream = MemoryMarshal.Cast(keyStream); + ReadOnlySpan lInput = MemoryMarshal.Cast(input.Slice(i)); + + lOutput[0] = lKeyStream[0] ^ lInput[0]; + lOutput[1] = lKeyStream[1] ^ lInput[1]; + lOutput[2] = lKeyStream[2] ^ lInput[2]; + lOutput[3] = lKeyStream[3] ^ lInput[3]; + + i += 63; + index = 0; + continue; + } + } + + output[i] = (byte)(keyStream[index++] ^ input[i]); + index &= 63; + } + } +#endif + + public virtual void Reset() + { + index = 0; + ResetLimitCounter(); + ResetCounter(); + } + + protected virtual void ResetCounter() + { + engineState[8] = engineState[9] = 0; + } + + protected virtual void SetKey(byte[] keyBytes, byte[] ivBytes) + { + if (keyBytes != null) + { + if ((keyBytes.Length != 16) && (keyBytes.Length != 32)) + throw new ArgumentException(AlgorithmName + " requires 128 bit or 256 bit key"); + + int tsOff = (keyBytes.Length - 16) / 4; + engineState[0] = TAU_SIGMA[tsOff]; + engineState[5] = TAU_SIGMA[tsOff + 1]; + engineState[10] = TAU_SIGMA[tsOff + 2]; + engineState[15] = TAU_SIGMA[tsOff + 3]; + + // Key + Pack.LE_To_UInt32(keyBytes, 0, engineState, 1, 4); + Pack.LE_To_UInt32(keyBytes, keyBytes.Length - 16, engineState, 11, 4); + } + + // IV + Pack.LE_To_UInt32(ivBytes, 0, engineState, 6, 2); + } + + protected virtual void GenerateKeyStream(byte[] output) + { + SalsaCore(rounds, engineState, x); + Pack.UInt32_To_LE(x, output, 0); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal static void SalsaCore(int rounds, ReadOnlySpan input, Span output) + { + if (input.Length < 16) + throw new ArgumentException(); + if (output.Length < 16) + throw new ArgumentException(); + if (rounds % 2 != 0) + throw new ArgumentException("Number of rounds must be even"); + +#if NETCOREAPP3_0_OR_GREATER + if (Sse41.IsSupported && BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 16) + { + Vector128 b0, b1, b2, b3; + { + var I = MemoryMarshal.AsBytes(input[..16]); + var t0 = MemoryMarshal.Read>(I[0x00..0x10]); + var t1 = MemoryMarshal.Read>(I[0x10..0x20]); + var t2 = MemoryMarshal.Read>(I[0x20..0x30]); + var t3 = MemoryMarshal.Read>(I[0x30..0x40]); + + var u0 = Sse41.Blend(t0, t2, 0xF0); + var u1 = Sse41.Blend(t1, t3, 0xC3); + var u2 = Sse41.Blend(t0, t2, 0x0F); + var u3 = Sse41.Blend(t1, t3, 0x3C); + + b0 = Sse41.Blend(u0, u1, 0xCC).AsUInt32(); + b1 = Sse41.Blend(u0, u1, 0x33).AsUInt32(); + b2 = Sse41.Blend(u2, u3, 0xCC).AsUInt32(); + b3 = Sse41.Blend(u2, u3, 0x33).AsUInt32(); + } + + var c0 = b0; + var c1 = b1; + var c2 = b2; + var c3 = b3; + + for (int i = rounds; i > 0; i -= 2) + { + QuarterRound_Sse2(ref c0, ref c3, ref c2, ref c1); + QuarterRound_Sse2(ref c0, ref c1, ref c2, ref c3); + } + + b0 = Sse2.Add(b0, c0); + b1 = Sse2.Add(b1, c1); + b2 = Sse2.Add(b2, c2); + b3 = Sse2.Add(b3, c3); + + { + var t0 = b0.AsUInt16(); + var t1 = b1.AsUInt16(); + var t2 = b2.AsUInt16(); + var t3 = b3.AsUInt16(); + + var u0 = Sse41.Blend(t0, t1, 0xCC); + var u1 = Sse41.Blend(t0, t1, 0x33); + var u2 = Sse41.Blend(t2, t3, 0xCC); + var u3 = Sse41.Blend(t2, t3, 0x33); + + var v0 = Sse41.Blend(u0, u2, 0xF0); + var v1 = Sse41.Blend(u1, u3, 0xC3); + var v2 = Sse41.Blend(u0, u2, 0x0F); + var v3 = Sse41.Blend(u1, u3, 0x3C); + + var X = MemoryMarshal.AsBytes(output[..16]); + MemoryMarshal.Write(X[0x00..0x10], ref v0); + MemoryMarshal.Write(X[0x10..0x20], ref v1); + MemoryMarshal.Write(X[0x20..0x30], ref v2); + MemoryMarshal.Write(X[0x30..0x40], ref v3); + } + return; + } +#endif + + uint x00 = input[ 0]; + uint x01 = input[ 1]; + uint x02 = input[ 2]; + uint x03 = input[ 3]; + uint x04 = input[ 4]; + uint x05 = input[ 5]; + uint x06 = input[ 6]; + uint x07 = input[ 7]; + uint x08 = input[ 8]; + uint x09 = input[ 9]; + uint x10 = input[10]; + uint x11 = input[11]; + uint x12 = input[12]; + uint x13 = input[13]; + uint x14 = input[14]; + uint x15 = input[15]; + + for (int i = rounds; i > 0; i -= 2) + { + QuarterRound(ref x00, ref x04, ref x08, ref x12); + QuarterRound(ref x05, ref x09, ref x13, ref x01); + QuarterRound(ref x10, ref x14, ref x02, ref x06); + QuarterRound(ref x15, ref x03, ref x07, ref x11); + + QuarterRound(ref x00, ref x01, ref x02, ref x03); + QuarterRound(ref x05, ref x06, ref x07, ref x04); + QuarterRound(ref x10, ref x11, ref x08, ref x09); + QuarterRound(ref x15, ref x12, ref x13, ref x14); + } + + output[ 0] = x00 + input[ 0]; + output[ 1] = x01 + input[ 1]; + output[ 2] = x02 + input[ 2]; + output[ 3] = x03 + input[ 3]; + output[ 4] = x04 + input[ 4]; + output[ 5] = x05 + input[ 5]; + output[ 6] = x06 + input[ 6]; + output[ 7] = x07 + input[ 7]; + output[ 8] = x08 + input[ 8]; + output[ 9] = x09 + input[ 9]; + output[10] = x10 + input[10]; + output[11] = x11 + input[11]; + output[12] = x12 + input[12]; + output[13] = x13 + input[13]; + output[14] = x14 + input[14]; + output[15] = x15 + input[15]; + } +#else + internal static void SalsaCore(int rounds, uint[] input, uint[] output) + { + if (input.Length < 16) + throw new ArgumentException(); + if (output.Length < 16) + throw new ArgumentException(); + if (rounds % 2 != 0) + throw new ArgumentException("Number of rounds must be even"); + + uint x00 = input[0]; + uint x01 = input[1]; + uint x02 = input[2]; + uint x03 = input[3]; + uint x04 = input[4]; + uint x05 = input[5]; + uint x06 = input[6]; + uint x07 = input[7]; + uint x08 = input[8]; + uint x09 = input[9]; + uint x10 = input[10]; + uint x11 = input[11]; + uint x12 = input[12]; + uint x13 = input[13]; + uint x14 = input[14]; + uint x15 = input[15]; + + for (int i = rounds; i > 0; i -= 2) + { + QuarterRound(ref x00, ref x04, ref x08, ref x12); + QuarterRound(ref x05, ref x09, ref x13, ref x01); + QuarterRound(ref x10, ref x14, ref x02, ref x06); + QuarterRound(ref x15, ref x03, ref x07, ref x11); + + QuarterRound(ref x00, ref x01, ref x02, ref x03); + QuarterRound(ref x05, ref x06, ref x07, ref x04); + QuarterRound(ref x10, ref x11, ref x08, ref x09); + QuarterRound(ref x15, ref x12, ref x13, ref x14); + } + + output[ 0] = x00 + input[ 0]; + output[ 1] = x01 + input[ 1]; + output[ 2] = x02 + input[ 2]; + output[ 3] = x03 + input[ 3]; + output[ 4] = x04 + input[ 4]; + output[ 5] = x05 + input[ 5]; + output[ 6] = x06 + input[ 6]; + output[ 7] = x07 + input[ 7]; + output[ 8] = x08 + input[ 8]; + output[ 9] = x09 + input[ 9]; + output[10] = x10 + input[10]; + output[11] = x11 + input[11]; + output[12] = x12 + input[12]; + output[13] = x13 + input[13]; + output[14] = x14 + input[14]; + output[15] = x15 + input[15]; + } +#endif + + internal void ResetLimitCounter() + { + cW0 = 0; + cW1 = 0; + cW2 = 0; + } + + internal bool LimitExceeded() + { + if (++cW0 == 0) + { + if (++cW1 == 0) + { + return (++cW2 & 0x20) != 0; // 2^(32 + 32 + 6) + } + } + + return false; + } + + /* + * this relies on the fact len will always be positive. + */ + internal bool LimitExceeded( + uint len) + { + uint old = cW0; + cW0 += len; + if (cW0 < old) + { + if (++cW1 == 0) + { + return (++cW2 & 0x20) != 0; // 2^(32 + 32 + 6) + } + } + + return false; + } + +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static void QuarterRound(ref uint a, ref uint b, ref uint c, ref uint d) + { + b ^= Integers.RotateLeft(a + d, 7); + c ^= Integers.RotateLeft(b + a, 9); + d ^= Integers.RotateLeft(c + b, 13); + a ^= Integers.RotateLeft(d + c, 18); + } + +#if NETCOREAPP3_0_OR_GREATER + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void QuarterRound_Sse2(ref Vector128 a, ref Vector128 b, ref Vector128 c, + ref Vector128 d) + { + b = Sse2.Xor(b, Rotate_Sse2(Sse2.Add(a, d), 7)); + c = Sse2.Xor(c, Rotate_Sse2(Sse2.Add(b, a), 9)); + d = Sse2.Xor(d, Rotate_Sse2(Sse2.Add(c, b), 13)); + a = Sse2.Xor(a, Rotate_Sse2(Sse2.Add(d, c), 18)); + + b = Sse2.Shuffle(b, 0x93); + c = Sse2.Shuffle(c, 0x4E); + d = Sse2.Shuffle(d, 0x39); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static Vector128 Rotate_Sse2(Vector128 x, byte sl) + { + byte sr = (byte)(32 - sl); + return Sse2.Xor(Sse2.ShiftLeftLogical(x, sl), Sse2.ShiftRightLogical(x, sr)); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastSalsa20Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastSalsa20Engine.cs.meta new file mode 100644 index 000000000..b22c3850f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastSalsa20Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d00c50c4ba4b7eb469b4940b7174779c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastSalsa20EngineHelper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastSalsa20EngineHelper.cs new file mode 100644 index 000000000..8747efeaf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastSalsa20EngineHelper.cs @@ -0,0 +1,31 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +using System; + +namespace BestHTTP.Connections.TLS.Crypto.Impl +{ +#if BESTHTTP_WITH_BURST + [Unity.Burst.BurstCompile] +#endif + internal static class FastSalsa20EngineHelper + { +#if BESTHTTP_WITH_BURST + [Unity.Burst.BurstCompile] + public unsafe static void ProcessBytes([Unity.Burst.NoAlias] byte* outBytes, int outOff, [Unity.Burst.NoAlias] byte* inBytes, int inOff, [Unity.Burst.NoAlias] byte* keyStream) + { + //for (int i = 0; i < 64; ++i) + // outBytes[idx + i + outOff] = (byte)(keyStream[i] ^ inBytes[idx + i + inOff]); + + ulong* pulOut = (ulong*)&outBytes[outOff]; + ulong* pulIn = (ulong*)&inBytes[inOff]; + ulong* pulKeyStream = (ulong*)keyStream; + + pulOut[0] = pulKeyStream[0] ^ pulIn[0]; + pulOut[1] = pulKeyStream[1] ^ pulIn[1]; + pulOut[2] = pulKeyStream[2] ^ pulIn[2]; + pulOut[3] = pulKeyStream[3] ^ pulIn[3]; + } +#endif + + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastSalsa20EngineHelper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastSalsa20EngineHelper.cs.meta new file mode 100644 index 000000000..48a158682 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastSalsa20EngineHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 07c49c8cf55d75e4fa1d12af126757d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastSicBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastSicBlockCipher.cs new file mode 100644 index 000000000..93926932a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastSicBlockCipher.cs @@ -0,0 +1,141 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.Connections.TLS.Crypto.Impl +{ + /** + * Implements the Segmented Integer Counter (SIC) mode on top of a simple + * block cipher. + */ + public class FastSicBlockCipher + : IBlockCipherMode + { + private readonly IBlockCipher cipher; + private readonly int blockSize; + private readonly byte[] counter; + private readonly byte[] counterOut; + private byte[] IV; + + /** + * Basic constructor. + * + * @param c the block cipher to be used. + */ + public FastSicBlockCipher(IBlockCipher cipher) + { + this.cipher = cipher; + this.blockSize = cipher.GetBlockSize(); + this.counter = new byte[blockSize]; + this.counterOut = new byte[blockSize]; + this.IV = new byte[blockSize]; + } + + /** + * return the underlying block cipher that we are wrapping. + * + * @return the underlying block cipher that we are wrapping. + */ + public IBlockCipher UnderlyingCipher => cipher; + + public virtual void Init( + bool forEncryption, //ignored by this CTR mode + ICipherParameters parameters) + { + ParametersWithIV ivParam = parameters as ParametersWithIV; + if (ivParam == null) + throw new ArgumentException("CTR/SIC mode requires ParametersWithIV", "parameters"); + + this.IV = Arrays.Clone(ivParam.GetIV()); + + if (blockSize < IV.Length) + throw new ArgumentException("CTR/SIC mode requires IV no greater than: " + blockSize + " bytes."); + + int maxCounterSize = System.Math.Min(8, blockSize / 2); + if (blockSize - IV.Length > maxCounterSize) + throw new ArgumentException("CTR/SIC mode requires IV of at least: " + (blockSize - maxCounterSize) + " bytes."); + + // if null it's an IV changed only. + if (ivParam.Parameters != null) + { + cipher.Init(true, ivParam.Parameters); + } + + Reset(); + } + + public virtual string AlgorithmName + { + get { return cipher.AlgorithmName + "/SIC"; } + } + + public virtual bool IsPartialBlockOkay + { + get { return true; } + } + + public virtual int GetBlockSize() + { + return cipher.GetBlockSize(); + } + + public virtual int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + cipher.ProcessBlock(counter, 0, counterOut, 0); + + // + // XOR the counterOut with the plaintext producing the cipher text + // + for (int i = 0; i < counterOut.Length; i++) + { + output[outOff + i] = (byte)(counterOut[i] ^ input[inOff + i]); + } + + // Increment the counter + int j = counter.Length; + while (--j >= 0 && ++counter[j] == 0) + { + } + + return counter.Length; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + cipher.ProcessBlock(counter, 0, counterOut, 0); + + // + // XOR the counterOut with the plaintext producing the cipher text + // + for (int i = 0; i < counterOut.Length; i++) + { + output[i] = (byte)(counterOut[i] ^ input[i]); + } + + // Increment the counter + int j = counter.Length; + while (--j >= 0 && ++counter[j] == 0) + { + } + + return counter.Length; + } +#endif + + public virtual void Reset() + { + Arrays.Fill(counter, (byte)0); + Array.Copy(IV, 0, counter, 0, IV.Length); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastSicBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastSicBlockCipher.cs.meta new file mode 100644 index 000000000..938eb60e4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastSicBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f774e66db9dd3d54ba629d80531016f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsAeadCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsAeadCipher.cs new file mode 100644 index 000000000..bef2c3a3f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsAeadCipher.cs @@ -0,0 +1,499 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls; +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP.Connections.TLS.Crypto.Impl +{ + /// A generic TLS 1.2 AEAD cipher. + + + + [BestHTTP.PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstructionAttribute] + public sealed class FastTlsAeadCipher + : TlsCipher + { + public const int AEAD_CCM = 1; + public const int AEAD_CHACHA20_POLY1305 = 2; + public const int AEAD_GCM = 3; + + private const int NONCE_RFC5288 = 1; + private const int NONCE_RFC7905 = 2; + + private readonly TlsCryptoParameters m_cryptoParams; + private readonly int m_keySize; + private readonly int m_macSize; + private readonly int m_fixed_iv_length; + private readonly int m_record_iv_length; + + private readonly TlsAeadCipherImpl m_decryptCipher, m_encryptCipher; + private readonly byte[] m_decryptNonce, m_encryptNonce; + + private readonly bool m_isTlsV13; + private readonly int m_nonceMode; + + /// + public FastTlsAeadCipher(TlsCryptoParameters cryptoParams, TlsAeadCipherImpl encryptCipher, + TlsAeadCipherImpl decryptCipher, int keySize, int macSize, int aeadType) + { + SecurityParameters securityParameters = cryptoParams.SecurityParameters; + ProtocolVersion negotiatedVersion = securityParameters.NegotiatedVersion; + + if (!TlsImplUtilities.IsTlsV12(negotiatedVersion)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + this.m_isTlsV13 = TlsImplUtilities.IsTlsV13(negotiatedVersion); + this.m_nonceMode = GetNonceMode(m_isTlsV13, aeadType); + + switch (m_nonceMode) + { + case NONCE_RFC5288: + this.m_fixed_iv_length = 4; + this.m_record_iv_length = 8; + break; + case NONCE_RFC7905: + this.m_fixed_iv_length = 12; + this.m_record_iv_length = 0; + break; + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + this.m_cryptoParams = cryptoParams; + this.m_keySize = keySize; + this.m_macSize = macSize; + + this.m_decryptCipher = decryptCipher; + this.m_encryptCipher = encryptCipher; + + this.m_decryptNonce = new byte[m_fixed_iv_length]; + this.m_encryptNonce = new byte[m_fixed_iv_length]; + + bool isServer = cryptoParams.IsServer; + if (m_isTlsV13) + { + RekeyCipher(securityParameters, decryptCipher, m_decryptNonce, !isServer); + RekeyCipher(securityParameters, encryptCipher, m_encryptNonce, isServer); + return; + } + + int keyBlockSize = (2 * keySize) + (2 * m_fixed_iv_length); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span keyBlock = keyBlockSize <= 512 + ? stackalloc byte[keyBlockSize] + : new byte[keyBlockSize]; + TlsImplUtilities.CalculateKeyBlock(cryptoParams, keyBlock); + + if (isServer) + { + decryptCipher.SetKey(keyBlock[..keySize]); keyBlock = keyBlock[keySize..]; + encryptCipher.SetKey(keyBlock[..keySize]); keyBlock = keyBlock[keySize..]; + + keyBlock[..m_fixed_iv_length].CopyTo(m_decryptNonce); keyBlock = keyBlock[m_fixed_iv_length..]; + keyBlock[..m_fixed_iv_length].CopyTo(m_encryptNonce); keyBlock = keyBlock[m_fixed_iv_length..]; + } + else + { + encryptCipher.SetKey(keyBlock[..keySize]); keyBlock = keyBlock[keySize..]; + decryptCipher.SetKey(keyBlock[..keySize]); keyBlock = keyBlock[keySize..]; + + keyBlock[..m_fixed_iv_length].CopyTo(m_encryptNonce); keyBlock = keyBlock[m_fixed_iv_length..]; + keyBlock[..m_fixed_iv_length].CopyTo(m_decryptNonce); keyBlock = keyBlock[m_fixed_iv_length..]; + } + + if (!keyBlock.IsEmpty) + throw new TlsFatalAlert(AlertDescription.internal_error); +#else + byte[] keyBlock = TlsImplUtilities.CalculateKeyBlock(cryptoParams, keyBlockSize); + int pos = 0; + + if (isServer) + { + decryptCipher.SetKey(keyBlock, pos, keySize); pos += keySize; + encryptCipher.SetKey(keyBlock, pos, keySize); pos += keySize; + + Array.Copy(keyBlock, pos, m_decryptNonce, 0, m_fixed_iv_length); pos += m_fixed_iv_length; + Array.Copy(keyBlock, pos, m_encryptNonce, 0, m_fixed_iv_length); pos += m_fixed_iv_length; + } + else + { + encryptCipher.SetKey(keyBlock, pos, keySize); pos += keySize; + decryptCipher.SetKey(keyBlock, pos, keySize); pos += keySize; + + Array.Copy(keyBlock, pos, m_encryptNonce, 0, m_fixed_iv_length); pos += m_fixed_iv_length; + Array.Copy(keyBlock, pos, m_decryptNonce, 0, m_fixed_iv_length); pos += m_fixed_iv_length; + } + + if (pos != keyBlockSize) + throw new TlsFatalAlert(AlertDescription.internal_error); +#endif + + int nonceLength = m_fixed_iv_length + m_record_iv_length; + + // NOTE: Ensure dummy nonce is not part of the generated sequence(s) + byte[] dummyNonce = new byte[nonceLength]; + dummyNonce[0] = (byte)~m_encryptNonce[0]; + dummyNonce[1] = (byte)~m_decryptNonce[1]; + + encryptCipher.Init(dummyNonce, macSize, null); + decryptCipher.Init(dummyNonce, macSize, null); + } + + public int GetCiphertextDecodeLimit(int plaintextLimit) + { + return plaintextLimit + m_macSize + m_record_iv_length + (m_isTlsV13 ? 1 : 0); + } + + public int GetCiphertextEncodeLimit(int plaintextLength, int plaintextLimit) + { + int innerPlaintextLimit = plaintextLength; + if (m_isTlsV13) + { + // TODO[tls13] Add support for padding + int maxPadding = 0; + + innerPlaintextLimit = 1 + System.Math.Min(plaintextLimit, plaintextLength + maxPadding); + } + + return innerPlaintextLimit + m_macSize + m_record_iv_length; + } + + public int GetPlaintextLimit(int ciphertextLimit) + { + return ciphertextLimit - m_macSize - m_record_iv_length - (m_isTlsV13 ? 1 : 0); + } + + public TlsEncodeResult EncodePlaintext(long seqNo, short contentType, ProtocolVersion recordVersion, + int headerAllocation, byte[] plaintext, int plaintextOffset, int plaintextLength) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return EncodePlaintext(seqNo, contentType, recordVersion, headerAllocation, + plaintext.AsSpan(plaintextOffset, plaintextLength)); +#else + byte[] nonce = new byte[m_encryptNonce.Length + m_record_iv_length]; + + switch (m_nonceMode) + { + case NONCE_RFC5288: + Array.Copy(m_encryptNonce, 0, nonce, 0, m_encryptNonce.Length); + // RFC 5288/6655: The nonce_explicit MAY be the 64-bit sequence number. + TlsUtilities.WriteUint64(seqNo, nonce, m_encryptNonce.Length); + break; + case NONCE_RFC7905: + TlsUtilities.WriteUint64(seqNo, nonce, nonce.Length - 8); + for (int i = 0; i < m_encryptNonce.Length; ++i) + { + nonce[i] ^= m_encryptNonce[i]; + } + break; + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + int extraLength = m_isTlsV13 ? 1 : 0; + + // TODO[tls13] If we support adding padding to TLSInnerPlaintext, this will need review + int encryptionLength = m_encryptCipher.GetOutputSize(plaintextLength + extraLength); + int ciphertextLength = m_record_iv_length + encryptionLength; + + byte[] output = BufferPool.Get(headerAllocation + ciphertextLength, true); //new byte[headerAllocation + ciphertextLength]; + int outputPos = headerAllocation; + + if (m_record_iv_length != 0) + { + Array.Copy(nonce, nonce.Length - m_record_iv_length, output, outputPos, m_record_iv_length); + outputPos += m_record_iv_length; + } + + short recordType = m_isTlsV13 ? ContentType.application_data : contentType; + + byte[] additionalData = GetAdditionalData(seqNo, recordType, recordVersion, ciphertextLength, + plaintextLength); + + try + { + Array.Copy(plaintext, plaintextOffset, output, outputPos, plaintextLength); + if (m_isTlsV13) + { + output[outputPos + plaintextLength] = (byte)contentType; + } + + m_encryptCipher.Init(nonce, m_macSize, additionalData); + outputPos += m_encryptCipher.DoFinal(output, outputPos, plaintextLength + extraLength, output, + outputPos); + } + catch (IOException e) + { + throw e; + } + catch (Exception e) + { + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + + if (outputPos != headerAllocation + ciphertextLength) + { + // NOTE: The additional data mechanism for AEAD ciphers requires exact output size prediction. + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + return new TlsEncodeResult(output, 0, outputPos, recordType, true); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public TlsEncodeResult EncodePlaintext(long seqNo, short contentType, ProtocolVersion recordVersion, + int headerAllocation, ReadOnlySpan plaintext) + { + byte[] nonce = new byte[m_encryptNonce.Length + m_record_iv_length]; + + switch (m_nonceMode) + { + case NONCE_RFC5288: + Array.Copy(m_encryptNonce, 0, nonce, 0, m_encryptNonce.Length); + // RFC 5288/6655: The nonce_explicit MAY be the 64-bit sequence number. + TlsUtilities.WriteUint64(seqNo, nonce, m_encryptNonce.Length); + break; + case NONCE_RFC7905: + TlsUtilities.WriteUint64(seqNo, nonce, nonce.Length - 8); + for (int i = 0; i < m_encryptNonce.Length; ++i) + { + nonce[i] ^= m_encryptNonce[i]; + } + break; + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + int extraLength = m_isTlsV13 ? 1 : 0; + + // TODO[tls13] If we support adding padding to TLSInnerPlaintext, this will need review + int encryptionLength = m_encryptCipher.GetOutputSize(plaintext.Length + extraLength); + int ciphertextLength = m_record_iv_length + encryptionLength; + + byte[] output = new byte[headerAllocation + ciphertextLength]; + int outputPos = headerAllocation; + + if (m_record_iv_length != 0) + { + Array.Copy(nonce, nonce.Length - m_record_iv_length, output, outputPos, m_record_iv_length); + outputPos += m_record_iv_length; + } + + short recordType = m_isTlsV13 ? ContentType.application_data : contentType; + + byte[] additionalData = GetAdditionalData(seqNo, recordType, recordVersion, ciphertextLength, + plaintext.Length); + + try + { + plaintext.CopyTo(output.AsSpan(outputPos)); + if (m_isTlsV13) + { + output[outputPos + plaintext.Length] = (byte)contentType; + } + + m_encryptCipher.Init(nonce, m_macSize, additionalData); + outputPos += m_encryptCipher.DoFinal(output, outputPos, plaintext.Length + extraLength, output, + outputPos); + } + catch (IOException e) + { + throw e; + } + catch (Exception e) + { + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + + if (outputPos != output.Length) + { + // NOTE: The additional data mechanism for AEAD ciphers requires exact output size prediction. + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + return new TlsEncodeResult(output, 0, output.Length, recordType); + } +#endif + + public TlsDecodeResult DecodeCiphertext(long seqNo, short recordType, ProtocolVersion recordVersion, + byte[] ciphertext, int ciphertextOffset, int ciphertextLength) + { + if (GetPlaintextLimit(ciphertextLength) < 0) + throw new TlsFatalAlert(AlertDescription.decode_error); + + byte[] nonce = new byte[m_decryptNonce.Length + m_record_iv_length]; + + switch (m_nonceMode) + { + case NONCE_RFC5288: + Array.Copy(m_decryptNonce, 0, nonce, 0, m_decryptNonce.Length); + Array.Copy(ciphertext, ciphertextOffset, nonce, nonce.Length - m_record_iv_length, + m_record_iv_length); + break; + case NONCE_RFC7905: + TlsUtilities.WriteUint64(seqNo, nonce, nonce.Length - 8); + for (int i = 0; i < m_decryptNonce.Length; ++i) + { + nonce[i] ^= m_decryptNonce[i]; + } + break; + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + int encryptionOffset = ciphertextOffset + m_record_iv_length; + int encryptionLength = ciphertextLength - m_record_iv_length; + int plaintextLength = m_decryptCipher.GetOutputSize(encryptionLength); + + byte[] additionalData = GetAdditionalData(seqNo, recordType, recordVersion, ciphertextLength, + plaintextLength); + + int outputPos; + try + { + m_decryptCipher.Init(nonce, m_macSize, additionalData); + outputPos = m_decryptCipher.DoFinal(ciphertext, encryptionOffset, encryptionLength, ciphertext, + encryptionOffset); + } + catch (IOException e) + { + throw e; + } + catch (Exception e) + { + throw new TlsFatalAlert(AlertDescription.bad_record_mac, e); + } + + if (outputPos != plaintextLength) + { + // NOTE: The additional data mechanism for AEAD ciphers requires exact output size prediction. + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + short contentType = recordType; + if (m_isTlsV13) + { + // Strip padding and read true content type from TLSInnerPlaintext + int pos = plaintextLength; + for (; ; ) + { + if (--pos < 0) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + byte octet = ciphertext[encryptionOffset + pos]; + if (0 != octet) + { + contentType = (short)(octet & 0xFF); + plaintextLength = pos; + break; + } + } + } + + return new TlsDecodeResult(ciphertext, encryptionOffset, plaintextLength, contentType); + } + + public void RekeyDecoder() + { + RekeyCipher(m_cryptoParams.SecurityParameters, m_decryptCipher, m_decryptNonce, !m_cryptoParams.IsServer); + } + + public void RekeyEncoder() + { + RekeyCipher(m_cryptoParams.SecurityParameters, m_encryptCipher, m_encryptNonce, m_cryptoParams.IsServer); + } + + public bool UsesOpaqueRecordType + { + get { return m_isTlsV13; } + } + + private byte[] GetAdditionalData(long seqNo, short recordType, ProtocolVersion recordVersion, + int ciphertextLength, int plaintextLength) + { + if (m_isTlsV13) + { + /* + * TLSCiphertext.opaque_type || TLSCiphertext.legacy_record_version || TLSCiphertext.length + */ + byte[] additional_data = new byte[5]; + + TlsUtilities.WriteUint8(recordType, additional_data, 0); + TlsUtilities.WriteVersion(recordVersion, additional_data, 1); + TlsUtilities.WriteUint16(ciphertextLength, additional_data, 3); + return additional_data; + } + else + { + /* + * seq_num + TLSCompressed.type + TLSCompressed.version + TLSCompressed.length + */ + byte[] additional_data = new byte[13]; + + TlsUtilities.WriteUint64(seqNo, additional_data, 0); + TlsUtilities.WriteUint8(recordType, additional_data, 8); + TlsUtilities.WriteVersion(recordVersion, additional_data, 9); + TlsUtilities.WriteUint16(plaintextLength, additional_data, 11); + return additional_data; + } + } + + private void RekeyCipher(SecurityParameters securityParameters, TlsAeadCipherImpl cipher, + byte[] nonce, bool serverSecret) + { + if (!m_isTlsV13) + throw new TlsFatalAlert(AlertDescription.internal_error); + + TlsSecret secret = serverSecret + ? securityParameters.TrafficSecretServer + : securityParameters.TrafficSecretClient; + + // TODO[tls13] For early data, have to disable server->client + if (null == secret) + throw new TlsFatalAlert(AlertDescription.internal_error); + + Setup13Cipher(cipher, nonce, secret, securityParameters.PrfCryptoHashAlgorithm); + } + + private void Setup13Cipher(TlsAeadCipherImpl cipher, byte[] nonce, TlsSecret secret, + int cryptoHashAlgorithm) + { + byte[] key = TlsCryptoUtilities.HkdfExpandLabel(secret, cryptoHashAlgorithm, "key", + TlsUtilities.EmptyBytes, m_keySize).Extract(); + byte[] iv = TlsCryptoUtilities.HkdfExpandLabel(secret, cryptoHashAlgorithm, "iv", TlsUtilities.EmptyBytes, + m_fixed_iv_length).Extract(); + + cipher.SetKey(key, 0, m_keySize); + Array.Copy(iv, 0, nonce, 0, m_fixed_iv_length); + + // NOTE: Ensure dummy nonce is not part of the generated sequence(s) + iv[0] ^= 0x80; + cipher.Init(iv, m_macSize, null); + } + + private static int GetNonceMode(bool isTLSv13, int aeadType) + { + switch (aeadType) + { + case AEAD_CCM: + case AEAD_GCM: + return isTLSv13 ? NONCE_RFC7905 : NONCE_RFC5288; + + case AEAD_CHACHA20_POLY1305: + return NONCE_RFC7905; + + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsAeadCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsAeadCipher.cs.meta new file mode 100644 index 000000000..a77664a05 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsAeadCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a70fdf89e60be4541bbe5027ef19b3c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsAeadCipherImpl.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsAeadCipherImpl.cs new file mode 100644 index 000000000..54c965f2a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsAeadCipherImpl.cs @@ -0,0 +1,205 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.Connections.TLS.Crypto.Impl +{ + //public sealed class NoCopyKeyParameter + // : ICipherParameters + //{ + // private readonly byte[] key; + // + // public NoCopyKeyParameter(byte[] key) + // :this(key, 0, key.Length) + // { + // } + // + // public NoCopyKeyParameter( + // byte[] key, + // int keyOff, + // int keyLen) + // { + // if (key == null) + // throw new ArgumentNullException("key"); + // if (keyOff < 0 || keyOff > key.Length) + // throw new ArgumentOutOfRangeException("keyOff"); + // if (keyLen < 0 || keyLen > (key.Length - keyOff)) + // throw new ArgumentOutOfRangeException("keyLen"); + // + // this.key = new byte[keyLen]; + // Array.Copy(key, keyOff, this.key, 0, keyLen); + // } + // + // public byte[] GetKey() + // { + // return key;// (byte[])key.Clone(); + // } + //} + // + //public sealed class FastAeadParameters + // : ICipherParameters + //{ + // private readonly byte[] associatedText; + // private readonly byte[] nonce; + // private readonly NoCopyKeyParameter key; + // private readonly int macSize; + // + // /** + // * Base constructor. + // * + // * @param key key to be used by underlying cipher + // * @param macSize macSize in bits + // * @param nonce nonce to be used + // */ + // public FastAeadParameters(NoCopyKeyParameter key, int macSize, byte[] nonce) + // : this(key, macSize, nonce, null) + // { + // } + // + // /** + // * Base constructor. + // * + // * @param key key to be used by underlying cipher + // * @param macSize macSize in bits + // * @param nonce nonce to be used + // * @param associatedText associated text, if any + // */ + // public FastAeadParameters( + // NoCopyKeyParameter key, + // int macSize, + // byte[] nonce, + // byte[] associatedText) + // { + // this.key = key; + // this.nonce = nonce; + // this.macSize = macSize; + // this.associatedText = associatedText; + // } + // + // public NoCopyKeyParameter Key + // { + // get { return key; } + // } + // + // public int MacSize + // { + // get { return macSize; } + // } + // + // public byte[] GetAssociatedText() + // { + // return associatedText; + // } + // + // public byte[] GetNonce() + // { + // return nonce; + // } + //} + // + //public sealed class FastParametersWithIV + // : ICipherParameters + //{ + // private readonly ICipherParameters parameters; + // private readonly byte[] iv; + // + // public FastParametersWithIV(ICipherParameters parameters, + // byte[] iv) + // : this(parameters, iv, 0, iv.Length) + // { + // } + // + // public FastParametersWithIV(ICipherParameters parameters, + // byte[] iv, int ivOff, int ivLen) + // { + // // NOTE: 'parameters' may be null to imply key re-use + // if (iv == null) + // throw new ArgumentNullException("iv"); + // + // this.parameters = parameters; + // this.iv = Arrays.CopyOfRange(iv, ivOff, ivOff + ivLen); + // } + // + // public byte[] GetIV() + // { + // return iv; // (byte[])iv.Clone(); + // } + // + // public ICipherParameters Parameters + // { + // get { return parameters; } + // } + //} + + internal sealed class FastTlsAeadCipherImpl + : TlsAeadCipherImpl + { + private readonly bool m_isEncrypting; + private readonly IAeadCipher m_cipher; + + private KeyParameter key; + + internal FastTlsAeadCipherImpl(IAeadCipher cipher, bool isEncrypting) + { + this.m_cipher = cipher; + this.m_isEncrypting = isEncrypting; + } + + public void SetKey(byte[] key, int keyOff, int keyLen) + { + this.key = new KeyParameter(key, keyOff, keyLen); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void SetKey(ReadOnlySpan key) + { + this.key = new KeyParameter(key); + } +#endif + + public void Init(byte[] nonce, int macSize, byte[] additionalData) + { + m_cipher.Init(m_isEncrypting, new AeadParameters(key, macSize * 8, nonce, additionalData)); + } + + public int GetOutputSize(int inputLength) + { + return m_cipher.GetOutputSize(inputLength); + } + + public int DoFinal(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int len = m_cipher.ProcessBytes(input.AsSpan(inputOffset, inputLength), Spans.FromNullable(output, outputOffset)); +#else + int len = m_cipher.ProcessBytes(input, inputOffset, inputLength, output, outputOffset); +#endif + + try + { + len += m_cipher.DoFinal(output, outputOffset + len); + } + catch (InvalidCipherTextException e) + { + throw new TlsFatalAlert(AlertDescription.bad_record_mac, e); + } + + return len; + } + + public void Reset() + { + m_cipher.Reset(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsAeadCipherImpl.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsAeadCipherImpl.cs.meta new file mode 100644 index 000000000..405e4d448 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsAeadCipherImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6918471f7390c92418f038c9d91d42fd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsBlockCipher.cs new file mode 100644 index 000000000..f86c281d0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsBlockCipher.cs @@ -0,0 +1,535 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.Connections.TLS.Crypto.Impl +{ + /// A generic TLS 1.0-1.2 block cipher. This can be used for AES or 3DES for example. + public class FastTlsBlockCipher + : TlsCipher + { + protected readonly TlsCryptoParameters m_cryptoParams; + protected readonly byte[] m_randomData; + protected readonly bool m_encryptThenMac; + protected readonly bool m_useExplicitIV; + protected readonly bool m_acceptExtraPadding; + protected readonly bool m_useExtraPadding; + + protected readonly TlsBlockCipherImpl m_decryptCipher, m_encryptCipher; + protected readonly TlsSuiteMac m_readMac, m_writeMac; + + /// + public FastTlsBlockCipher(TlsCryptoParameters cryptoParams, TlsBlockCipherImpl encryptCipher, + TlsBlockCipherImpl decryptCipher, TlsHmac clientMac, TlsHmac serverMac, int cipherKeySize) + { + SecurityParameters securityParameters = cryptoParams.SecurityParameters; + ProtocolVersion negotiatedVersion = securityParameters.NegotiatedVersion; + + if (TlsImplUtilities.IsTlsV13(negotiatedVersion)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + this.m_cryptoParams = cryptoParams; + this.m_randomData = cryptoParams.NonceGenerator.GenerateNonce(256); + + this.m_encryptThenMac = securityParameters.IsEncryptThenMac; + this.m_useExplicitIV = TlsImplUtilities.IsTlsV11(negotiatedVersion); + + this.m_acceptExtraPadding = !negotiatedVersion.IsSsl; + + /* + * Don't use variable-length padding with truncated MACs. + * + * See "Tag Size Does Matter: Attacks and Proofs for the TLS Record Protocol", Paterson, + * Ristenpart, Shrimpton. + * + * TODO[DTLS] Consider supporting in DTLS (without exceeding send limit though) + */ + this.m_useExtraPadding = securityParameters.IsExtendedPadding + && ProtocolVersion.TLSv10.IsEqualOrEarlierVersionOf(negotiatedVersion) + && (m_encryptThenMac || !securityParameters.IsTruncatedHmac); + + this.m_encryptCipher = encryptCipher; + this.m_decryptCipher = decryptCipher; + + TlsBlockCipherImpl clientCipher, serverCipher; + if (cryptoParams.IsServer) + { + clientCipher = decryptCipher; + serverCipher = encryptCipher; + } + else + { + clientCipher = encryptCipher; + serverCipher = decryptCipher; + } + + int keyBlockSize = (2 * cipherKeySize) + clientMac.MacLength + serverMac.MacLength; + + // From TLS 1.1 onwards, block ciphers don't need IVs from the key_block + if (!m_useExplicitIV) + { + keyBlockSize += clientCipher.GetBlockSize() + serverCipher.GetBlockSize(); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span keyBlock = keyBlockSize <= 512 + ? stackalloc byte[keyBlockSize] + : new byte[keyBlockSize]; + TlsImplUtilities.CalculateKeyBlock(cryptoParams, keyBlock); + + clientMac.SetKey(keyBlock[..clientMac.MacLength]); keyBlock = keyBlock[clientMac.MacLength..]; + serverMac.SetKey(keyBlock[..serverMac.MacLength]); keyBlock = keyBlock[serverMac.MacLength..]; + + clientCipher.SetKey(keyBlock[..cipherKeySize]); keyBlock = keyBlock[cipherKeySize..]; + serverCipher.SetKey(keyBlock[..cipherKeySize]); keyBlock = keyBlock[cipherKeySize..]; + + int clientIVLength = clientCipher.GetBlockSize(); + int serverIVLength = serverCipher.GetBlockSize(); + + if (m_useExplicitIV) + { + clientCipher.Init(clientIVLength <= 64 ? stackalloc byte[clientIVLength] : new byte[clientIVLength]); + serverCipher.Init(serverIVLength <= 64 ? stackalloc byte[serverIVLength] : new byte[serverIVLength]); + } + else + { + clientCipher.Init(keyBlock[..clientIVLength]); keyBlock = keyBlock[clientIVLength..]; + serverCipher.Init(keyBlock[..serverIVLength]); keyBlock = keyBlock[serverIVLength..]; + } + + if (!keyBlock.IsEmpty) + throw new TlsFatalAlert(AlertDescription.internal_error); +#else + byte[] keyBlock = TlsImplUtilities.CalculateKeyBlock(cryptoParams, keyBlockSize); + int pos = 0; + + clientMac.SetKey(keyBlock, pos, clientMac.MacLength); + pos += clientMac.MacLength; + serverMac.SetKey(keyBlock, pos, serverMac.MacLength); + pos += serverMac.MacLength; + + clientCipher.SetKey(keyBlock, pos, cipherKeySize); + pos += cipherKeySize; + serverCipher.SetKey(keyBlock, pos, cipherKeySize); + pos += cipherKeySize; + + int clientIVLength = clientCipher.GetBlockSize(); + int serverIVLength = serverCipher.GetBlockSize(); + + if (m_useExplicitIV) + { + clientCipher.Init(new byte[clientIVLength], 0, clientIVLength); + serverCipher.Init(new byte[serverIVLength], 0, serverIVLength); + } + else + { + clientCipher.Init(keyBlock, pos, clientIVLength); + pos += clientIVLength; + serverCipher.Init(keyBlock, pos, serverIVLength); + pos += serverIVLength; + } + + if (pos != keyBlockSize) + throw new TlsFatalAlert(AlertDescription.internal_error); +#endif + + if (cryptoParams.IsServer) + { + this.m_writeMac = new TlsSuiteHmac(cryptoParams, serverMac); + this.m_readMac = new TlsSuiteHmac(cryptoParams, clientMac); + } + else + { + this.m_writeMac = new TlsSuiteHmac(cryptoParams, clientMac); + this.m_readMac = new TlsSuiteHmac(cryptoParams, serverMac); + } + } + + public virtual int GetCiphertextDecodeLimit(int plaintextLimit) + { + int blockSize = m_decryptCipher.GetBlockSize(); + int macSize = m_readMac.Size; + int maxPadding = 256; + + return GetCiphertextLength(blockSize, macSize, maxPadding, plaintextLimit); + } + + public virtual int GetCiphertextEncodeLimit(int plaintextLength, int plaintextLimit) + { + int blockSize = m_encryptCipher.GetBlockSize(); + int macSize = m_writeMac.Size; + int maxPadding = m_useExtraPadding ? 256 : blockSize; + + return GetCiphertextLength(blockSize, macSize, maxPadding, plaintextLength); + } + + public virtual int GetPlaintextLimit(int ciphertextLimit) + { + int blockSize = m_encryptCipher.GetBlockSize(); + int macSize = m_writeMac.Size; + + int plaintextLimit = ciphertextLimit; + + // Leave room for the MAC, and require block-alignment + if (m_encryptThenMac) + { + plaintextLimit -= macSize; + plaintextLimit -= plaintextLimit % blockSize; + } + else + { + plaintextLimit -= plaintextLimit % blockSize; + plaintextLimit -= macSize; + } + + // Minimum 1 byte of padding + --plaintextLimit; + + // An explicit IV consumes 1 block + if (m_useExplicitIV) + { + plaintextLimit -= blockSize; + } + + return plaintextLimit; + } + + public virtual TlsEncodeResult EncodePlaintext(long seqNo, short contentType, ProtocolVersion recordVersion, + int headerAllocation, byte[] plaintext, int offset, int len) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return EncodePlaintext(seqNo, contentType, recordVersion, headerAllocation, plaintext.AsSpan(offset, len)); +#else + int blockSize = m_encryptCipher.GetBlockSize(); + int macSize = m_writeMac.Size; + + int enc_input_length = len; + if (!m_encryptThenMac) + { + enc_input_length += macSize; + } + + int padding_length = blockSize - (enc_input_length % blockSize); + if (m_useExtraPadding) + { + // Add a random number of extra blocks worth of padding + int maxExtraPadBlocks = (256 - padding_length) / blockSize; + int actualExtraPadBlocks = ChooseExtraPadBlocks(maxExtraPadBlocks); + padding_length += actualExtraPadBlocks * blockSize; + } + + int totalSize = len + macSize + padding_length; + if (m_useExplicitIV) + { + totalSize += blockSize; + } + + byte[] outBuf = new byte[headerAllocation + totalSize]; + int outOff = headerAllocation; + + if (m_useExplicitIV) + { + // Technically the explicit IV will be the encryption of this nonce + byte[] explicitIV = m_cryptoParams.NonceGenerator.GenerateNonce(blockSize); + Array.Copy(explicitIV, 0, outBuf, outOff, blockSize); + outOff += blockSize; + } + + Array.Copy(plaintext, offset, outBuf, outOff, len); + outOff += len; + + if (!m_encryptThenMac) + { + byte[] mac = m_writeMac.CalculateMac(seqNo, contentType, plaintext, offset, len); + Array.Copy(mac, 0, outBuf, outOff, mac.Length); + outOff += mac.Length; + } + + byte padByte = (byte)(padding_length - 1); + for (int i = 0; i < padding_length; ++i) + { + outBuf[outOff++] = padByte; + } + + m_encryptCipher.DoFinal(outBuf, headerAllocation, outOff - headerAllocation, outBuf, headerAllocation); + + if (m_encryptThenMac) + { + byte[] mac = m_writeMac.CalculateMac(seqNo, contentType, outBuf, headerAllocation, + outOff - headerAllocation); + Array.Copy(mac, 0, outBuf, outOff, mac.Length); + outOff += mac.Length; + } + + if (outOff != outBuf.Length) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return new TlsEncodeResult(outBuf, 0, outBuf.Length, contentType); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual TlsEncodeResult EncodePlaintext(long seqNo, short contentType, ProtocolVersion recordVersion, + int headerAllocation, ReadOnlySpan plaintext) + { + int blockSize = m_encryptCipher.GetBlockSize(); + int macSize = m_writeMac.Size; + + int enc_input_length = plaintext.Length; + if (!m_encryptThenMac) + { + enc_input_length += macSize; + } + + int padding_length = blockSize - (enc_input_length % blockSize); + if (m_useExtraPadding) + { + // Add a random number of extra blocks worth of padding + int maxExtraPadBlocks = (256 - padding_length) / blockSize; + int actualExtraPadBlocks = ChooseExtraPadBlocks(maxExtraPadBlocks); + padding_length += actualExtraPadBlocks * blockSize; + } + + int totalSize = plaintext.Length + macSize + padding_length; + if (m_useExplicitIV) + { + totalSize += blockSize; + } + + byte[] outBuf = new byte[headerAllocation + totalSize]; + int outOff = headerAllocation; + + if (m_useExplicitIV) + { + // Technically the explicit IV will be the encryption of this nonce + byte[] explicitIV = m_cryptoParams.NonceGenerator.GenerateNonce(blockSize); + Array.Copy(explicitIV, 0, outBuf, outOff, blockSize); + outOff += blockSize; + } + + plaintext.CopyTo(outBuf.AsSpan(outOff)); + outOff += plaintext.Length; + + if (!m_encryptThenMac) + { + byte[] mac = m_writeMac.CalculateMac(seqNo, contentType, plaintext); + mac.CopyTo(outBuf.AsSpan(outOff)); + outOff += mac.Length; + } + + byte padByte = (byte)(padding_length - 1); + for (int i = 0; i < padding_length; ++i) + { + outBuf[outOff++] = padByte; + } + + m_encryptCipher.DoFinal(outBuf, headerAllocation, outOff - headerAllocation, outBuf, headerAllocation); + + if (m_encryptThenMac) + { + byte[] mac = m_writeMac.CalculateMac(seqNo, contentType, outBuf, headerAllocation, + outOff - headerAllocation); + Array.Copy(mac, 0, outBuf, outOff, mac.Length); + outOff += mac.Length; + } + + if (outOff != outBuf.Length) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return new TlsEncodeResult(outBuf, 0, outBuf.Length, contentType); + } +#endif + + public virtual TlsDecodeResult DecodeCiphertext(long seqNo, short recordType, ProtocolVersion recordVersion, + byte[] ciphertext, int offset, int len) + { + int blockSize = m_decryptCipher.GetBlockSize(); + int macSize = m_readMac.Size; + + int minLen = blockSize; + if (m_encryptThenMac) + { + minLen += macSize; + } + else + { + minLen = System.Math.Max(minLen, macSize + 1); + } + + if (m_useExplicitIV) + { + minLen += blockSize; + } + + if (len < minLen) + throw new TlsFatalAlert(AlertDescription.decode_error); + + int blocks_length = len; + if (m_encryptThenMac) + { + blocks_length -= macSize; + } + + if (blocks_length % blockSize != 0) + throw new TlsFatalAlert(AlertDescription.decryption_failed); + + if (m_encryptThenMac) + { + byte[] expectedMac = m_readMac.CalculateMac(seqNo, recordType, ciphertext, offset, len - macSize); + + bool checkMac = TlsUtilities.ConstantTimeAreEqual(macSize, expectedMac, 0, ciphertext, + offset + len - macSize); + if (!checkMac) + { + /* + * RFC 7366 3. The MAC SHALL be evaluated before any further processing such as + * decryption is performed, and if the MAC verification fails, then processing SHALL + * terminate immediately. For TLS, a fatal bad_record_mac MUST be generated [2]. For + * DTLS, the record MUST be discarded, and a fatal bad_record_mac MAY be generated + * [4]. This immediate response to a bad MAC eliminates any timing channels that may + * be available through the use of manipulated packet data. + */ + throw new TlsFatalAlert(AlertDescription.bad_record_mac); + } + } + + m_decryptCipher.DoFinal(ciphertext, offset, blocks_length, ciphertext, offset); + + if (m_useExplicitIV) + { + offset += blockSize; + blocks_length -= blockSize; + } + + // If there's anything wrong with the padding, this will return zero + int totalPad = CheckPaddingConstantTime(ciphertext, offset, blocks_length, blockSize, + m_encryptThenMac ? 0 : macSize); + bool badMac = (totalPad == 0); + + int dec_output_length = blocks_length - totalPad; + + if (!m_encryptThenMac) + { + dec_output_length -= macSize; + + byte[] expectedMac = m_readMac.CalculateMacConstantTime(seqNo, recordType, ciphertext, offset, + dec_output_length, blocks_length - macSize, m_randomData); + + badMac |= !TlsUtilities.ConstantTimeAreEqual(macSize, expectedMac, 0, ciphertext, + offset + dec_output_length); + } + + if (badMac) + throw new TlsFatalAlert(AlertDescription.bad_record_mac); + + return new TlsDecodeResult(ciphertext, offset, dec_output_length, recordType); + } + + public virtual void RekeyDecoder() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual void RekeyEncoder() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual bool UsesOpaqueRecordType + { + get { return false; } + } + + protected virtual int CheckPaddingConstantTime(byte[] buf, int off, int len, int blockSize, int macSize) + { + int end = off + len; + byte lastByte = buf[end - 1]; + int padlen = lastByte & 0xff; + int totalPad = padlen + 1; + + int dummyIndex = 0; + byte padDiff = 0; + + int totalPadLimit = System.Math.Min(m_acceptExtraPadding ? 256 : blockSize, len - macSize); + + if (totalPad > totalPadLimit) + { + totalPad = 0; + } + else + { + int padPos = end - totalPad; + do + { + padDiff |= (byte)(buf[padPos++] ^ lastByte); + } + while (padPos < end); + + dummyIndex = totalPad; + + if (padDiff != 0) + { + totalPad = 0; + } + } + + // Run some extra dummy checks so the number of checks is always constant + { + byte[] dummyPad = m_randomData; + while (dummyIndex < 256) + { + padDiff |= (byte)(dummyPad[dummyIndex++] ^ lastByte); + } + // Ensure the above loop is not eliminated + dummyPad[0] ^= padDiff; + } + + return totalPad; + } + + protected virtual int ChooseExtraPadBlocks(int max) + { + byte[] random = m_cryptoParams.NonceGenerator.GenerateNonce(4); + int x = (int)Pack.LE_To_UInt32(random, 0); + int n = Integers.NumberOfTrailingZeros(x); + return System.Math.Min(n, max); + } + + protected virtual int GetCiphertextLength(int blockSize, int macSize, int maxPadding, int plaintextLength) + { + int ciphertextLength = plaintextLength; + + // An explicit IV consumes 1 block + if (m_useExplicitIV) + { + ciphertextLength += blockSize; + } + + // Leave room for the MAC and (block-aligning) padding + + ciphertextLength += maxPadding; + + if (m_encryptThenMac) + { + ciphertextLength -= (ciphertextLength % blockSize); + ciphertextLength += macSize; + } + else + { + ciphertextLength += macSize; + ciphertextLength -= (ciphertextLength % blockSize); + } + + return ciphertextLength; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsBlockCipher.cs.meta new file mode 100644 index 000000000..55e9af344 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 20ab76109ec6a50438d1f788603eeb49 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsBlockCipherImpl.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsBlockCipherImpl.cs new file mode 100644 index 000000000..baef3637a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsBlockCipherImpl.cs @@ -0,0 +1,68 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl; + +namespace BestHTTP.Connections.TLS.Crypto.Impl +{ + internal sealed class FastTlsBlockCipherImpl + : TlsBlockCipherImpl + { + private readonly bool m_isEncrypting; + private readonly IBlockCipher m_cipher; + + private KeyParameter key; + + internal FastTlsBlockCipherImpl(IBlockCipher cipher, bool isEncrypting) + { + this.m_cipher = cipher; + this.m_isEncrypting = isEncrypting; + } + + public void SetKey(byte[] key, int keyOff, int keyLen) + { + this.key = new KeyParameter(key, keyOff, keyLen); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void SetKey(ReadOnlySpan key) + { + this.key = new KeyParameter(key); + } +#endif + + public void Init(byte[] iv, int ivOff, int ivLen) + { + m_cipher.Init(m_isEncrypting, new ParametersWithIV(key, iv, ivOff, ivLen)); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Init(ReadOnlySpan iv) + { + m_cipher.Init(m_isEncrypting, new ParametersWithIV(key, iv)); + } +#endif + + public int DoFinal(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset) + { + int blockSize = m_cipher.GetBlockSize(); + + for (int i = 0; i < inputLength; i += blockSize) + { + m_cipher.ProcessBlock(input, inputOffset + i, output, outputOffset + i); + } + + return inputLength; + } + + public int GetBlockSize() + { + return m_cipher.GetBlockSize(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsBlockCipherImpl.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsBlockCipherImpl.cs.meta new file mode 100644 index 000000000..58410a3cb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/Crypto/Impl/FastTlsBlockCipherImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 942c0f75d0ed2dc4297fa1c7114d7f16 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/DefaultTls13Client.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/DefaultTls13Client.cs new file mode 100644 index 000000000..7ee6814e2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/DefaultTls13Client.cs @@ -0,0 +1,19 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +using System; +using System.Collections.Generic; + +using BestHTTP.Connections.TLS.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls; + +namespace BestHTTP.Connections.TLS +{ + public class DefaultTls13Client : AbstractTls13Client + { + public DefaultTls13Client(HTTPRequest request, List sniServerNames, List protocols) + : base(request, sniServerNames, protocols, new FastTlsCrypto(new SecureRandom())) + { + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/DefaultTls13Client.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/DefaultTls13Client.cs.meta new file mode 100644 index 000000000..05a33bed4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/DefaultTls13Client.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c429a6a1f0a28754fb08d39cb6314c09 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/KeyLogFileWriter.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/KeyLogFileWriter.cs new file mode 100644 index 000000000..514d26101 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/KeyLogFileWriter.cs @@ -0,0 +1,75 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +using System; +using System.Diagnostics; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +// https://www.m00nie.com/2015/05/decrypt-https-ssltls-with-wireshark/ +// https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format +// https://github.com/bcgit/bc-csharp/issues/343 + +namespace BestHTTP.Connections.TLS +{ + /// + /// https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format + /// + internal enum Labels + { + CLIENT_RANDOM, + CLIENT_EARLY_TRAFFIC_SECRET, + CLIENT_HANDSHAKE_TRAFFIC_SECRET, + SERVER_HANDSHAKE_TRAFFIC_SECRET, + CLIENT_TRAFFIC_SECRET_0, + SERVER_TRAFFIC_SECRET_0, + EARLY_EXPORTER_SECRET, + EXPORTER_SECRET + } + + internal static class KeyLogFileWriter + { + private static string GetKeylogFileName() => Environment.GetEnvironmentVariable("SSLKEYLOGFILE", EnvironmentVariableTarget.User); + + [Conditional("UNITY_EDITOR")] + public static void WriteLabel(Labels label, byte[] clientRandom, TlsSecret secret) + { + if (clientRandom != null && secret != null) + { + string SSLKEYLOGFILE = GetKeylogFileName(); + if (!string.IsNullOrEmpty(SSLKEYLOGFILE)) + using (var writer = new StreamWriter(System.IO.File.Open(SSLKEYLOGFILE, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))) + writer.WriteLine($"{label} {Hex.ToHexString(clientRandom)} {Hex.ToHexString((secret as AbstractTlsSecret).CopyData())}"); + } + } + + [Conditional("UNITY_EDITOR")] + public static void WriteLabel(Labels label, SecurityParameters securityParameters) + { + try + { + TlsSecret secret = null; + switch (label) + { + case Labels.CLIENT_RANDOM: secret = securityParameters.MasterSecret; break; + case Labels.CLIENT_HANDSHAKE_TRAFFIC_SECRET: secret = securityParameters.TrafficSecretClient; break; + case Labels.SERVER_HANDSHAKE_TRAFFIC_SECRET: secret = securityParameters.TrafficSecretServer; break; + case Labels.CLIENT_TRAFFIC_SECRET_0: secret = securityParameters.TrafficSecretClient; break; + case Labels.SERVER_TRAFFIC_SECRET_0: secret = securityParameters.TrafficSecretServer; break; + case Labels.EXPORTER_SECRET: secret = securityParameters.ExporterMasterSecret; break; + + case Labels.CLIENT_EARLY_TRAFFIC_SECRET: break; + case Labels.EARLY_EXPORTER_SECRET: break; + } + + if (secret != null) + WriteLabel(label, securityParameters.ClientRandom, secret); + } + catch + { } + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/KeyLogFileWriter.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/KeyLogFileWriter.cs.meta new file mode 100644 index 000000000..0f0152aa1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/TLS/KeyLogFileWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a73956af7ab6d8b46bdc431620279764 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/WebGLConnection.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/WebGLConnection.cs new file mode 100644 index 000000000..b5f190f34 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/WebGLConnection.cs @@ -0,0 +1,434 @@ +#if UNITY_WEBGL && !UNITY_EDITOR + +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.InteropServices; +#if !BESTHTTP_DISABLE_CACHING +using BestHTTP.Caching; +#endif +using BestHTTP.Core; +using BestHTTP.Extensions; +using BestHTTP.Connections; +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP.Connections +{ + delegate void OnWebGLRequestHandlerDelegate(int nativeId, int httpStatus, IntPtr pBuffer, int length, int zero); + delegate void OnWebGLBufferDelegate(int nativeId, IntPtr pBuffer, int length); + delegate void OnWebGLProgressDelegate(int nativeId, int downloaded, int total); + delegate void OnWebGLErrorDelegate(int nativeId, string error); + delegate void OnWebGLTimeoutDelegate(int nativeId); + delegate void OnWebGLAbortedDelegate(int nativeId); + + internal sealed class WebGLConnection : ConnectionBase + { + static Dictionary Connections = new Dictionary(4); + + int NativeId; + BufferSegmentStream Stream; + + public WebGLConnection(string serverAddress) + : base(serverAddress, false) + { + XHR_SetLoglevel((byte)HTTPManager.Logger.Level); + } + + public override void Shutdown(ShutdownTypes type) + { + base.Shutdown(type); + + XHR_Abort(this.NativeId); + } + + protected override void ThreadFunc() + { + // XmlHttpRequest setup + + this.NativeId = XHR_Create(HTTPRequest.MethodNames[(byte)CurrentRequest.MethodType], + CurrentRequest.CurrentUri.OriginalString, + CurrentRequest.Credentials != null ? CurrentRequest.Credentials.UserName : null, + CurrentRequest.Credentials != null ? CurrentRequest.Credentials.Password : null, + CurrentRequest.WithCredentials ? 1 : 0); + Connections.Add(NativeId, this); + + CurrentRequest.EnumerateHeaders((header, values) => + { + if (!header.Equals("Content-Length")) + for (int i = 0; i < values.Count; ++i) + XHR_SetRequestHeader(NativeId, header, values[i]); + }, /*callBeforeSendCallback:*/ true); + + XHR_SetResponseHandler(NativeId, WebGLConnection.OnResponse, WebGLConnection.OnError, WebGLConnection.OnTimeout, WebGLConnection.OnAborted); + // Setting OnUploadProgress result in an addEventListener("progress", ...) call making the request non-simple. + // https://forum.unity.com/threads/best-http-released.200006/page-49#post-3696220 + XHR_SetProgressHandler(NativeId, + CurrentRequest.OnDownloadProgress == null ? (OnWebGLProgressDelegate)null : WebGLConnection.OnDownloadProgress, + CurrentRequest.OnUploadProgress == null ? (OnWebGLProgressDelegate)null : WebGLConnection.OnUploadProgress); + + XHR_SetTimeout(NativeId, (uint)(CurrentRequest.ConnectTimeout.TotalMilliseconds + CurrentRequest.Timeout.TotalMilliseconds)); + + byte[] body = CurrentRequest.GetEntityBody(); + int length = 0; + bool releaseBodyBuffer = false; + + if (body == null) + { + var upStreamInfo = CurrentRequest.GetUpStream(); + if (upStreamInfo.Stream != null) + { + var internalBuffer = BufferPool.Get(upStreamInfo.Length > 0 ? upStreamInfo.Length : HTTPRequest.UploadChunkSize, true); + using (BufferPoolMemoryStream ms = new BufferPoolMemoryStream(internalBuffer, 0, internalBuffer.Length, true, true, false, true)) + { + var buffer = BufferPool.Get(HTTPRequest.UploadChunkSize, true); + int readCount = -1; + while ((readCount = upStreamInfo.Stream.Read(buffer, 0, buffer.Length)) > 0) + ms.Write(buffer, 0, readCount); + + BufferPool.Release(buffer); + + length = (int)ms.Position; + body = ms.GetBuffer(); + + releaseBodyBuffer = true; + } + } + } + else + { + length = body.Length; + } + + XHR_Send(NativeId, body, length); + + if (releaseBodyBuffer) + BufferPool.Release(body); + } + +#region Callback Implementations + + void OnResponse(int httpStatus, BufferSegment payload) + { + HTTPConnectionStates proposedConnectionState = HTTPConnectionStates.Processing; + bool resendRequest = false; + + try + { + if (this.CurrentRequest.IsCancellationRequested) + return; + + using (var ms = new BufferSegmentStream()) + { + Stream = ms; + + XHR_GetStatusLine(NativeId, OnBufferCallback); + XHR_GetResponseHeaders(NativeId, OnBufferCallback); + + if (payload != BufferSegment.Empty) + ms.Write(payload); + + SupportedProtocols protocol = HTTPProtocolFactory.GetProtocolFromUri(CurrentRequest.CurrentUri); + CurrentRequest.Response = HTTPProtocolFactory.Get(protocol, CurrentRequest, ms, CurrentRequest.UseStreaming, false); + + CurrentRequest.Response.Receive(payload != BufferSegment.Empty && payload.Count > 0 ? (int)payload.Count : -1, true); + + KeepAliveHeader keepAlive = null; + ConnectionHelper.HandleResponse(this.ToString(), this.CurrentRequest, out resendRequest, out proposedConnectionState, ref keepAlive); + } + } + catch (Exception e) + { + HTTPManager.Logger.Exception(this.NativeId + " WebGLConnection", "OnResponse", e, this.Context); + + if (this.ShutdownType == ShutdownTypes.Immediate) + return; + +#if !BESTHTTP_DISABLE_CACHING + if (this.CurrentRequest.UseStreaming) + HTTPCacheService.DeleteEntity(this.CurrentRequest.CurrentUri); +#endif + + // Something gone bad, Response must be null! + this.CurrentRequest.Response = null; + + if (!this.CurrentRequest.IsCancellationRequested) + { + this.CurrentRequest.Exception = e; + this.CurrentRequest.State = HTTPRequestStates.Error; + } + + proposedConnectionState = HTTPConnectionStates.Closed; + } + finally + { + // Exit ASAP + if (this.ShutdownType != ShutdownTypes.Immediate) + { + if (this.CurrentRequest.IsCancellationRequested) + { + // we don't know what stage the request is cancelled, we can't safely reuse the tcp channel. + proposedConnectionState = HTTPConnectionStates.Closed; + + this.CurrentRequest.Response = null; + + this.CurrentRequest.State = this.CurrentRequest.IsTimedOut ? HTTPRequestStates.TimedOut : HTTPRequestStates.Aborted; + } + else if (resendRequest) + { + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this.CurrentRequest, RequestEvents.Resend)); + } + else if (this.CurrentRequest.Response != null && this.CurrentRequest.Response.IsUpgraded) + { + proposedConnectionState = HTTPConnectionStates.WaitForProtocolShutdown; + } + else if (this.CurrentRequest.State == HTTPRequestStates.Processing) + { + if (this.CurrentRequest.Response != null) + this.CurrentRequest.State = HTTPRequestStates.Finished; + else + { + this.CurrentRequest.Exception = new Exception(string.Format("[{0}] Remote server closed the connection before sending response header! Previous request state: {1}. Connection state: {2}", + this.ToString(), + this.CurrentRequest.State.ToString(), + this.State.ToString())); + this.CurrentRequest.State = HTTPRequestStates.Error; + + proposedConnectionState = HTTPConnectionStates.Closed; + } + } + + this.CurrentRequest = null; + + if (proposedConnectionState == HTTPConnectionStates.Processing) + proposedConnectionState = HTTPConnectionStates.Closed; + + ConnectionEventHelper.EnqueueConnectionEvent(new ConnectionEventInfo(this, proposedConnectionState)); + } + } + } + + void OnBuffer(BufferSegment buffer) + { + if (Stream != null) + { + Stream.Write(buffer); + //Stream.Write(HTTPRequest.EOL, 0, HTTPRequest.EOL.Length); + } + } + + void OnDownloadProgress(int down, int total) + { + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this.CurrentRequest, RequestEvents.DownloadProgress, down, total)); + } + + void OnUploadProgress(int up, int total) + { + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this.CurrentRequest, RequestEvents.UploadProgress, up, total)); + } + + void OnError(string error) + { + HTTPManager.Logger.Information(this.NativeId + " WebGLConnection - OnError", error, this.Context); + + LastProcessTime = DateTime.UtcNow; + + CurrentRequest.Response = null; + CurrentRequest.Exception = new Exception(error); + CurrentRequest.State = HTTPRequestStates.Error; + ConnectionEventHelper.EnqueueConnectionEvent(new ConnectionEventInfo(this, HTTPConnectionStates.Closed)); + } + + void OnTimeout() + { + HTTPManager.Logger.Information(this.NativeId + " WebGLConnection - OnResponse", string.Empty, this.Context); + + CurrentRequest.Response = null; + CurrentRequest.State = HTTPRequestStates.TimedOut; + ConnectionEventHelper.EnqueueConnectionEvent(new ConnectionEventInfo(this, HTTPConnectionStates.Closed)); + } + + void OnAborted() + { + HTTPManager.Logger.Information(this.NativeId + " WebGLConnection - OnAborted", string.Empty, this.Context); + + CurrentRequest.Response = null; + CurrentRequest.State = HTTPRequestStates.Aborted; + ConnectionEventHelper.EnqueueConnectionEvent(new ConnectionEventInfo(this, HTTPConnectionStates.Closed)); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (disposing) + { + Connections.Remove(NativeId); + XHR_Release(NativeId); + + Stream = null; + } + } +#endregion + +#region WebGL Static Callbacks + + [AOT.MonoPInvokeCallback(typeof(OnWebGLRequestHandlerDelegate))] + static void OnResponse(int nativeId, int httpStatus, IntPtr pBuffer, int length, int err) + { + WebGLConnection conn = null; + if (!Connections.TryGetValue(nativeId, out conn)) + { + HTTPManager.Logger.Error("WebGLConnection - OnResponse", "No WebGL connection found for nativeId: " + nativeId.ToString()); + return; + } + + HTTPManager.Logger.Information("WebGLConnection - OnResponse", string.Format("{0} {1} {2} {3}", nativeId, httpStatus, length, err), conn.Context); + + BufferSegment payload = BufferSegment.Empty; + if (length > 0) + { + var buffer = BufferPool.Get(length, true); + + XHR_CopyResponseTo(nativeId, buffer, length); + + payload = new BufferSegment(buffer, 0, length); + } + + conn.OnResponse(httpStatus, payload); + } + + [AOT.MonoPInvokeCallback(typeof(OnWebGLBufferDelegate))] + static void OnBufferCallback(int nativeId, IntPtr pBuffer, int length) + { + WebGLConnection conn = null; + if (!Connections.TryGetValue(nativeId, out conn)) + { + HTTPManager.Logger.Error("WebGLConnection - OnBufferCallback", "No WebGL connection found for nativeId: " + nativeId.ToString()); + return; + } + + byte[] buffer = BufferPool.Get(length, true); + + // Copy data from the 'unmanaged' memory to managed memory. Buffer will be reclaimed by the GC. + Marshal.Copy(pBuffer, buffer, 0, length); + + conn.OnBuffer(new BufferSegment(buffer, 0, length)); + } + + [AOT.MonoPInvokeCallback(typeof(OnWebGLProgressDelegate))] + static void OnDownloadProgress(int nativeId, int downloaded, int total) + { + WebGLConnection conn = null; + if (!Connections.TryGetValue(nativeId, out conn)) + { + HTTPManager.Logger.Error("WebGLConnection - OnDownloadProgress", "No WebGL connection found for nativeId: " + nativeId.ToString()); + return; + } + + HTTPManager.Logger.Information(nativeId + " OnDownloadProgress", downloaded.ToString() + " / " + total.ToString(), conn.Context); + + conn.OnDownloadProgress(downloaded, total); + } + + [AOT.MonoPInvokeCallback(typeof(OnWebGLProgressDelegate))] + static void OnUploadProgress(int nativeId, int uploaded, int total) + { + WebGLConnection conn = null; + if (!Connections.TryGetValue(nativeId, out conn)) + { + HTTPManager.Logger.Error("WebGLConnection - OnUploadProgress", "No WebGL connection found for nativeId: " + nativeId.ToString()); + return; + } + + HTTPManager.Logger.Information(nativeId + " OnUploadProgress", uploaded.ToString() + " / " + total.ToString(), conn.Context); + + conn.OnUploadProgress(uploaded, total); + } + + [AOT.MonoPInvokeCallback(typeof(OnWebGLErrorDelegate))] + static void OnError(int nativeId, string error) + { + WebGLConnection conn = null; + if (!Connections.TryGetValue(nativeId, out conn)) + { + HTTPManager.Logger.Error("WebGLConnection - OnError", "No WebGL connection found for nativeId: " + nativeId.ToString() + " Error: " + error); + return; + } + + conn.OnError(error); + } + + [AOT.MonoPInvokeCallback(typeof(OnWebGLTimeoutDelegate))] + static void OnTimeout(int nativeId) + { + WebGLConnection conn = null; + if (!Connections.TryGetValue(nativeId, out conn)) + { + HTTPManager.Logger.Error("WebGLConnection - OnTimeout", "No WebGL connection found for nativeId: " + nativeId.ToString()); + return; + } + + conn.OnTimeout(); + } + + [AOT.MonoPInvokeCallback(typeof(OnWebGLAbortedDelegate))] + static void OnAborted(int nativeId) + { + WebGLConnection conn = null; + if (!Connections.TryGetValue(nativeId, out conn)) + { + HTTPManager.Logger.Error("WebGLConnection - OnAborted", "No WebGL connection found for nativeId: " + nativeId.ToString()); + return; + } + + conn.OnAborted(); + } + +#endregion + +#region WebGL Interface + + [DllImport("__Internal")] + private static extern int XHR_Create(string method, string url, string userName, string passwd, int withCredentials); + + /// + /// Is an unsigned long representing the number of milliseconds a request can take before automatically being terminated. A value of 0 (which is the default) means there is no timeout. + /// + [DllImport("__Internal")] + private static extern void XHR_SetTimeout(int nativeId, uint timeout); + + [DllImport("__Internal")] + private static extern void XHR_SetRequestHeader(int nativeId, string header, string value); + + [DllImport("__Internal")] + private static extern void XHR_SetResponseHandler(int nativeId, OnWebGLRequestHandlerDelegate onresponse, OnWebGLErrorDelegate onerror, OnWebGLTimeoutDelegate ontimeout, OnWebGLAbortedDelegate onabort); + + [DllImport("__Internal")] + private static extern void XHR_SetProgressHandler(int nativeId, OnWebGLProgressDelegate onDownloadProgress, OnWebGLProgressDelegate onUploadProgress); + + [DllImport("__Internal")] + private static extern void XHR_CopyResponseTo(int nativeId, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U1, SizeParamIndex = 2)] byte[] response, int length); + + [DllImport("__Internal")] + private static extern void XHR_Send(int nativeId, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U1, SizeParamIndex = 2)] byte[] body, int length); + + [DllImport("__Internal")] + private static extern void XHR_GetResponseHeaders(int nativeId, OnWebGLBufferDelegate callback); + + [DllImport("__Internal")] + private static extern void XHR_GetStatusLine(int nativeId, OnWebGLBufferDelegate callback); + + [DllImport("__Internal")] + private static extern void XHR_Abort(int nativeId); + + [DllImport("__Internal")] + private static extern void XHR_Release(int nativeId); + + [DllImport("__Internal")] + private static extern void XHR_SetLoglevel(int logLevel); + +#endregion + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/WebGLConnection.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/WebGLConnection.cs.meta new file mode 100644 index 000000000..a8744f426 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Connections/WebGLConnection.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: cca5a5d266418134dbb9c0b87c68e62a +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Cookies.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Cookies.meta new file mode 100644 index 000000000..3767b0fb7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Cookies.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e138652289c643d4ca6bff547a5bd4f0 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Cookies/Cookie.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Cookies/Cookie.cs new file mode 100644 index 000000000..bdf425dfb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Cookies/Cookie.cs @@ -0,0 +1,377 @@ +#if !BESTHTTP_DISABLE_COOKIES + +using System; +using System.Collections.Generic; +using BestHTTP.Extensions; +using System.IO; + +namespace BestHTTP.Cookies +{ + /// + /// The Cookie implementation based on RFC 6265(http://tools.ietf.org/html/rfc6265). + /// + public sealed class Cookie : IComparable, IEquatable + { + private const int Version = 1; + + #region Public Properties + + /// + /// The name of the cookie. + /// + public string Name { get; private set; } + + /// + /// The value of the cookie. + /// + public string Value { get; private set; } + + /// + /// The Date when the Cookie is registered. + /// + public DateTime Date { get; internal set; } + + /// + /// When this Cookie last used in a request. + /// + public DateTime LastAccess { get; set; } + + /// + /// The Expires attribute indicates the maximum lifetime of the cookie, represented as the date and time at which the cookie expires. + /// The user agent is not required to retain the cookie until the specified date has passed. + /// In fact, user agents often evict cookies due to memory pressure or privacy concerns. + /// + public DateTime Expires { get; private set; } + + /// + /// The Max-Age attribute indicates the maximum lifetime of the cookie, represented as the number of seconds until the cookie expires. + /// The user agent is not required to retain the cookie for the specified duration. + /// In fact, user agents often evict cookies due to memory pressure or privacy concerns. + /// + public long MaxAge { get; private set; } + + /// + /// If a cookie has neither the Max-Age nor the Expires attribute, the user agent will retain the cookie until "the current session is over". + /// + public bool IsSession { get; private set; } + + /// + /// The Domain attribute specifies those hosts to which the cookie will be sent. + /// For example, if the value of the Domain attribute is "example.com", the user agent will include the cookie + /// in the Cookie header when making HTTP requests to example.com, www.example.com, and www.corp.example.com. + /// If the server omits the Domain attribute, the user agent will return the cookie only to the origin server. + /// + public string Domain { get; private set; } + + /// + /// The scope of each cookie is limited to a set of paths, controlled by the Path attribute. + /// If the server omits the Path attribute, the user agent will use the "directory" of the request-uri's path component as the default value. + /// + public string Path { get; private set; } + + /// + /// The Secure attribute limits the scope of the cookie to "secure" channels (where "secure" is defined by the user agent). + /// When a cookie has the Secure attribute, the user agent will include the cookie in an HTTP request only if the request is + /// transmitted over a secure channel (typically HTTP over Transport Layer Security (TLS)). + /// + public bool IsSecure { get; private set; } + + /// + /// The HttpOnly attribute limits the scope of the cookie to HTTP requests. + /// In particular, the attribute instructs the user agent to omit the cookie when providing access to + /// cookies via "non-HTTP" APIs (such as a web browser API that exposes cookies to scripts). + /// + public bool IsHttpOnly { get; private set; } + + /// + /// SameSite prevents the browser from sending this cookie along with cross-site requests. + /// The main goal is mitigate the risk of cross-origin information leakage. + /// It also provides some protection against cross-site request forgery attacks. Possible values for the flag are lax or strict. + /// + /// + public string SameSite { get; private set; } + + #endregion + + #region Public Constructors + + public Cookie(string name, string value) + :this(name, value, "/", string.Empty) + {} + + public Cookie(string name, string value, string path) + : this(name, value, path, string.Empty) + {} + + public Cookie(string name, string value, string path, string domain) + :this() // call the parameter-less constructor to set default values + { + this.Name = name; + this.Value = value; + this.Path = path; + this.Domain = domain; + } + + public Cookie(Uri uri, string name, string value, DateTime expires, bool isSession = true) + :this(name, value, uri.AbsolutePath, uri.Host) + { + this.Expires = expires; + this.IsSession = isSession; + this.Date = DateTime.UtcNow; + } + + public Cookie(Uri uri, string name, string value, long maxAge = -1, bool isSession = true) + :this(name, value, uri.AbsolutePath, uri.Host) + { + this.MaxAge = maxAge; + this.IsSession = isSession; + this.Date = DateTime.UtcNow; + this.SameSite = "none"; + } + + #endregion + + internal Cookie() + { + // If a cookie has neither the Max-Age nor the Expires attribute, the user agent will retain the cookie + // until "the current session is over" (as defined by the user agent). + IsSession = true; + MaxAge = -1; + LastAccess = DateTime.UtcNow; + } + + public bool WillExpireInTheFuture() + { + // No Expires or Max-Age value sent from the server, we will fake the return value so we will not delete the newly came Cookie + if (IsSession) + return true; + + // If a cookie has both the Max-Age and the Expires attribute, the Max-Age attribute has precedence and controls the expiration date of the cookie. + return MaxAge != -1 ? + Math.Max(0, (long)(DateTime.UtcNow - Date).TotalSeconds) < MaxAge : + Expires > DateTime.UtcNow; + } + + /// + /// Guess the storage size of the cookie. + /// + /// + public uint GuessSize() + { + return (uint)((this.Name != null ? this.Name.Length * sizeof(char) : 0) + + (this.Value != null ? this.Value.Length * sizeof(char) : 0) + + (this.Domain != null ? this.Domain.Length * sizeof(char) : 0) + + (this.Path != null ? this.Path.Length * sizeof(char) : 0) + + (this.SameSite != null ? this.SameSite.Length * sizeof(char) : 0) + + (sizeof(long) * 4) + + (sizeof(bool) * 3)); + } + + public static Cookie Parse(string header, Uri defaultDomain, Logger.LoggingContext context) + { + Cookie cookie = new Cookie(); + try + { + var kvps = ParseCookieHeader(header); + + foreach (var kvp in kvps) + { + switch (kvp.Key.ToLowerInvariant()) + { + case "path": + // If the attribute-value is empty or if the first character of the attribute-value is not %x2F ("/"): + // Let cookie-path be the default-path. + cookie.Path = string.IsNullOrEmpty(kvp.Value) || !kvp.Value.StartsWith("/") ? "/" : cookie.Path = kvp.Value; + break; + + case "domain": + // If the attribute-value is empty, the behavior is undefined. However, the user agent SHOULD ignore the cookie-av entirely. + if (string.IsNullOrEmpty(kvp.Value)) + return null; + + // If the first character of the attribute-value string is %x2E ("."): + // Let cookie-domain be the attribute-value without the leading %x2E (".") character. + cookie.Domain = kvp.Value.StartsWith(".") ? kvp.Value.Substring(1) : kvp.Value; + break; + + case "expires": + cookie.Expires = kvp.Value.ToDateTime(DateTime.FromBinary(0)); + cookie.IsSession = false; + break; + + case "max-age": + cookie.MaxAge = kvp.Value.ToInt64(-1); + cookie.IsSession = false; + break; + + case "secure": + cookie.IsSecure = true; + break; + + case "httponly": + cookie.IsHttpOnly = true; + break; + + case "samesite": + cookie.SameSite = kvp.Value; + break; + + default: + // check whether name is already set to avoid overwriting it with a non-listed setting + if (string.IsNullOrEmpty(cookie.Name)) + { + cookie.Name = kvp.Key; + cookie.Value = kvp.Value; + } + break; + } + } + + // Some user agents provide users the option of preventing persistent storage of cookies across sessions. + // When configured thusly, user agents MUST treat all received cookies as if the persistent-flag were set to false. + if (HTTPManager.EnablePrivateBrowsing) + cookie.IsSession = true; + + // http://tools.ietf.org/html/rfc6265#section-4.1.2.3 + // WARNING: Some existing user agents treat an absent Domain attribute as if the Domain attribute were present and contained the current host name. + // For example, if example.com returns a Set-Cookie header without a Domain attribute, these user agents will erroneously send the cookie to www.example.com as well. + if (string.IsNullOrEmpty(cookie.Domain)) + cookie.Domain = defaultDomain.Host; + + // http://tools.ietf.org/html/rfc6265#section-5.3 section 7: + // If the cookie-attribute-list contains an attribute with an attribute-name of "Path", + // set the cookie's path to attribute-value of the last attribute in the cookie-attribute-list with an attribute-name of "Path". + // __Otherwise, set the cookie's path to the default-path of the request-uri.__ + if (string.IsNullOrEmpty(cookie.Path)) + cookie.Path = defaultDomain.AbsolutePath; + + cookie.Date = cookie.LastAccess = DateTime.UtcNow; + } + catch (Exception ex) + { + HTTPManager.Logger.Warning("Cookie", "Parse - Couldn't parse header: " + header + " exception: " + ex.ToString() + " " + ex.StackTrace, context); + } + return cookie; + } + + #region Save & Load + + internal void SaveTo(BinaryWriter stream) + { + stream.Write(Version); + stream.Write(Name ?? string.Empty); + stream.Write(Value ?? string.Empty); + stream.Write(Date.ToBinary()); + stream.Write(LastAccess.ToBinary()); + stream.Write(Expires.ToBinary()); + stream.Write(MaxAge); + stream.Write(IsSession); + stream.Write(Domain ?? string.Empty); + stream.Write(Path ?? string.Empty); + stream.Write(IsSecure); + stream.Write(IsHttpOnly); + } + + internal void LoadFrom(BinaryReader stream) + { + /*int version = */stream.ReadInt32(); + this.Name = stream.ReadString(); + this.Value = stream.ReadString(); + this.Date = DateTime.FromBinary(stream.ReadInt64()); + this.LastAccess = DateTime.FromBinary(stream.ReadInt64()); + this.Expires = DateTime.FromBinary(stream.ReadInt64()); + this.MaxAge = stream.ReadInt64(); + this.IsSession = stream.ReadBoolean(); + this.Domain = stream.ReadString(); + this.Path = stream.ReadString(); + this.IsSecure = stream.ReadBoolean(); + this.IsHttpOnly = stream.ReadBoolean(); + } + + #endregion + + #region Overrides and new Equals function + + public override string ToString() + { + return string.Concat(this.Name, "=", this.Value); + } + + public override bool Equals(object obj) + { + if (obj == null) + return false; + + return this.Equals(obj as Cookie); + } + + public bool Equals(Cookie cookie) + { + if (cookie == null) + return false; + + if (Object.ReferenceEquals(this, cookie)) + return true; + + return this.Name.Equals(cookie.Name, StringComparison.Ordinal) && + ((this.Domain == null && cookie.Domain == null) || this.Domain.Equals(cookie.Domain, StringComparison.Ordinal)) && + ((this.Path == null && cookie.Path == null) || this.Path.Equals(cookie.Path, StringComparison.Ordinal)); + } + + public override int GetHashCode() + { + return this.ToString().GetHashCode(); + } + + #endregion + + #region Private Helper Functions + + private static string ReadValue(string str, ref int pos) + { + string result = string.Empty; + if (str == null) + return result; + + return str.Read(ref pos, ';'); + } + + private static List ParseCookieHeader(string str) + { + List result = new List(); + + if (str == null) + return result; + + int idx = 0; + + // process the rest of the text + while (idx < str.Length) + { + // Read key + string key = str.Read(ref idx, (ch) => ch != '=' && ch != ';').Trim(); + HeaderValue qp = new HeaderValue(key); + + if (idx < str.Length && str[idx - 1] == '=') + qp.Value = ReadValue(str, ref idx); + + result.Add(qp); + } + + return result; + } + + #endregion + + #region IComparable implementation + + public int CompareTo(Cookie other) + { + return this.LastAccess.CompareTo(other.LastAccess); + } + + #endregion + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Cookies/Cookie.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Cookies/Cookie.cs.meta new file mode 100644 index 000000000..cee7bf166 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Cookies/Cookie.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3c89f8c2ca77c56448d03216927e0546 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Cookies/CookieJar.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Cookies/CookieJar.cs new file mode 100644 index 000000000..3e651b82c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Cookies/CookieJar.cs @@ -0,0 +1,538 @@ +#if !BESTHTTP_DISABLE_COOKIES + +using BestHTTP.Core; +using BestHTTP.PlatformSupport.FileSystem; +using System; +using System.Collections.Generic; +using System.Threading; + +namespace BestHTTP.Cookies +{ + /// + /// The Cookie Jar implementation based on RFC 6265(http://tools.ietf.org/html/rfc6265). + /// + public static class CookieJar + { + // Version of the cookie store. It may be used in a future version for maintaining compatibility. + private const int Version = 1; + + /// + /// Returns true if File apis are supported. + /// + public static bool IsSavingSupported + { + get + { +#if !BESTHTTP_DISABLE_COOKIE_SAVE + if (IsSupportCheckDone) + return _isSavingSupported; + + try + { +#if UNITY_WEBGL && !UNITY_EDITOR + _isSavingSupported = false; +#else + HTTPManager.IOService.DirectoryExists(HTTPManager.GetRootCacheFolder()); + _isSavingSupported = true; +#endif + } + catch + { + _isSavingSupported = false; + + HTTPManager.Logger.Warning("CookieJar", "Cookie saving and loading disabled!"); + } + finally + { + IsSupportCheckDone = true; + } + + return _isSavingSupported; +#else + return false; +#endif + } + } + + /// + /// The plugin will delete cookies that are accessed this threshold ago. Its default value is 7 days. + /// + public static TimeSpan AccessThreshold = TimeSpan.FromDays(7); + +#region Privates + + /// + /// List of the Cookies + /// + private static List Cookies = new List(); + private static string CookieFolder { get; set; } + private static string LibraryPath { get; set; } + + /// + /// Synchronization object for thread safety. + /// + private static ReaderWriterLockSlim rwLock = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion); + +#if !BESTHTTP_DISABLE_COOKIE_SAVE + private static bool _isSavingSupported; + private static bool IsSupportCheckDone; +#endif + + private static bool Loaded; +#endregion + +#region Internal Functions + + internal static void SetupFolder() + { +#if !BESTHTTP_DISABLE_COOKIE_SAVE + if (!CookieJar.IsSavingSupported) + return; + + try + { + if (string.IsNullOrEmpty(CookieFolder) || string.IsNullOrEmpty(LibraryPath)) + { + CookieFolder = System.IO.Path.Combine(HTTPManager.GetRootCacheFolder(), "Cookies"); + LibraryPath = System.IO.Path.Combine(CookieFolder, "Library"); + } + } + catch + { } +#endif + } + + /// + /// Will set or update all cookies from the response object. + /// + internal static bool Set(HTTPResponse response) + { + if (response == null) + return false; + + List newCookies = new List(); + var setCookieHeaders = response.GetHeaderValues("set-cookie"); + + // No cookies. :'( + if (setCookieHeaders == null) + return false; + + foreach (var cookieHeader in setCookieHeaders) + { + Cookie cookie = Cookie.Parse(cookieHeader, response.baseRequest.CurrentUri, response.baseRequest.Context); + if (cookie != null) + { + rwLock.EnterWriteLock(); + try + { + int idx; + var old = Find(cookie, out idx); + + // if no value for the cookie or already expired then the server asked us to delete the cookie + bool expired = string.IsNullOrEmpty(cookie.Value) || !cookie.WillExpireInTheFuture(); + + if (!expired) + { + // no old cookie, add it straight to the list + if (old == null) + { + Cookies.Add(cookie); + + newCookies.Add(cookie); + } + else + { + // Update the creation-time of the newly created cookie to match the creation-time of the old-cookie. + cookie.Date = old.Date; + Cookies[idx] = cookie; + + newCookies.Add(cookie); + } + } + else if (idx != -1) // delete the cookie + Cookies.RemoveAt(idx); + } + catch + { + // Ignore cookie on error + } + finally + { + rwLock.ExitWriteLock(); + } + } + } + + response.Cookies = newCookies; + + PluginEventHelper.EnqueuePluginEvent(new PluginEventInfo(PluginEvents.SaveCookieLibrary)); + + return true; + } + + /// + /// Deletes all expired or 'old' cookies, and will keep the sum size of cookies under the given size. + /// + internal static void Maintain(bool sendEvent) + { + // It's not the same as in the rfc: + // http://tools.ietf.org/html/rfc6265#section-5.3 + + rwLock.EnterWriteLock(); + try + { + uint size = 0; + + for (int i = 0; i < Cookies.Count; ) + { + var cookie = Cookies[i]; + + // Remove expired or not used cookies + if (!cookie.WillExpireInTheFuture() || (cookie.LastAccess + AccessThreshold) < DateTime.UtcNow) + { + Cookies.RemoveAt(i); + } + else + { + if (!cookie.IsSession) + size += cookie.GuessSize(); + i++; + } + } + + if (size > HTTPManager.CookieJarSize) + { + Cookies.Sort(); + + while (size > HTTPManager.CookieJarSize && Cookies.Count > 0) + { + var cookie = Cookies[0]; + Cookies.RemoveAt(0); + + size -= cookie.GuessSize(); + } + } + } + catch + { } + finally + { + rwLock.ExitWriteLock(); + } + + if (sendEvent) + PluginEventHelper.EnqueuePluginEvent(new PluginEventInfo(PluginEvents.SaveCookieLibrary)); + } + + /// + /// Saves the Cookie Jar to a file. + /// + /// Not implemented under Unity WebPlayer + internal static void Persist() + { +#if !BESTHTTP_DISABLE_COOKIE_SAVE + if (!IsSavingSupported) + return; + + if (!Loaded) + return; + + // Delete any expired cookie + Maintain(false); + + rwLock.EnterWriteLock(); + try + { + if (!HTTPManager.IOService.DirectoryExists(CookieFolder)) + HTTPManager.IOService.DirectoryCreate(CookieFolder); + + using (var fs = HTTPManager.IOService.CreateFileStream(LibraryPath, FileStreamModes.Create)) + using (var bw = new System.IO.BinaryWriter(fs)) + { + bw.Write(Version); + + // Count how many non-session cookies we have + int count = 0; + foreach (var cookie in Cookies) + if (!cookie.IsSession) + count++; + + bw.Write(count); + + // Save only the persistable cookies + foreach (var cookie in Cookies) + if (!cookie.IsSession) + cookie.SaveTo(bw); + } + } + catch + { } + finally + { + rwLock.ExitWriteLock(); + } +#endif + } + + /// + /// Load previously persisted cookie library from the file. + /// + internal static void Load() + { +#if !BESTHTTP_DISABLE_COOKIE_SAVE + if (!IsSavingSupported) + return; + + if (Loaded) + return; + + SetupFolder(); + + rwLock.EnterWriteLock(); + try + { + Cookies.Clear(); + + if (!HTTPManager.IOService.DirectoryExists(CookieFolder)) + HTTPManager.IOService.DirectoryCreate(CookieFolder); + + if (!HTTPManager.IOService.FileExists(LibraryPath)) + return; + + using (var fs = HTTPManager.IOService.CreateFileStream(LibraryPath, FileStreamModes.OpenRead)) + using (var br = new System.IO.BinaryReader(fs)) + { + /*int version = */br.ReadInt32(); + int cookieCount = br.ReadInt32(); + + for (int i = 0; i < cookieCount; ++i) + { + Cookie cookie = new Cookie(); + cookie.LoadFrom(br); + + if (cookie.WillExpireInTheFuture()) + Cookies.Add(cookie); + } + } + } + catch + { + Cookies.Clear(); + } + finally + { + Loaded = true; + rwLock.ExitWriteLock(); + } +#endif + } + +#endregion + +#region Public Functions + + /// + /// Returns all Cookies that corresponds to the given Uri. + /// + public static List Get(Uri uri) + { + Load(); + + rwLock.EnterReadLock(); + try + { + List result = null; + + for (int i = 0; i < Cookies.Count; ++i) + { + Cookie cookie = Cookies[i]; + if (cookie.WillExpireInTheFuture() && (uri.Host.IndexOf(cookie.Domain) != -1 || string.Format("{0}:{1}", uri.Host, uri.Port).IndexOf(cookie.Domain) != -1) && uri.AbsolutePath.StartsWith(cookie.Path)) + { + if (result == null) + result = new List(); + + result.Add(cookie); + } + } + + return result; + } + finally + { + rwLock.ExitReadLock(); + } + } + + /// + /// Will add a new, or overwrite an old cookie if already exists. + /// + public static void Set(Uri uri, Cookie cookie) + { + Set(cookie); + } + + /// + /// Will add a new, or overwrite an old cookie if already exists. + /// + public static void Set(Cookie cookie) + { + Load(); + + rwLock.EnterWriteLock(); + try + { + int idx; + Find(cookie, out idx); + + if (idx >= 0) + Cookies[idx] = cookie; + else + Cookies.Add(cookie); + } + finally + { + rwLock.ExitWriteLock(); + } + + PluginEventHelper.EnqueuePluginEvent(new PluginEventInfo(PluginEvents.SaveCookieLibrary)); + } + + public static List GetAll() + { + Load(); + + return Cookies; + } + + /// + /// Deletes all cookies from the Jar. + /// + public static void Clear() + { + Load(); + + rwLock.EnterWriteLock(); + try + { + Cookies.Clear(); + } + finally + { + rwLock.ExitWriteLock(); + } + + Persist(); + } + + /// + /// Removes cookies that older than the given parameter. + /// + public static void Clear(TimeSpan olderThan) + { + Load(); + + rwLock.EnterWriteLock(); + try + { + for (int i = 0; i < Cookies.Count; ) + { + var cookie = Cookies[i]; + + // Remove expired or not used cookies + if (!cookie.WillExpireInTheFuture() || (cookie.Date + olderThan) < DateTime.UtcNow) + Cookies.RemoveAt(i); + else + i++; + } + } + finally + { + rwLock.ExitWriteLock(); + } + + Persist(); + } + + /// + /// Removes cookies that matches to the given domain. + /// + public static void Clear(string domain) + { + Load(); + + rwLock.EnterWriteLock(); + try + { + for (int i = 0; i < Cookies.Count; ) + { + var cookie = Cookies[i]; + + // Remove expired or not used cookies + if (!cookie.WillExpireInTheFuture() || cookie.Domain.IndexOf(domain) != -1) + Cookies.RemoveAt(i); + else + i++; + } + } + finally + { + rwLock.ExitWriteLock(); + } + + Persist(); + } + + public static void Remove(Uri uri, string name) + { + Load(); + + rwLock.EnterWriteLock(); + try + { + for (int i = 0; i < Cookies.Count; ) + { + var cookie = Cookies[i]; + + if (cookie.Name.Equals(name, StringComparison.OrdinalIgnoreCase) && uri.Host.IndexOf(cookie.Domain) != -1) + Cookies.RemoveAt(i); + else + i++; + } + } + finally + { + rwLock.ExitWriteLock(); + } + + PluginEventHelper.EnqueuePluginEvent(new PluginEventInfo(PluginEvents.SaveCookieLibrary)); + } + +#endregion + +#region Private Helper Functions + + /// + /// Find and return a Cookie and his index in the list. + /// + private static Cookie Find(Cookie cookie, out int idx) + { + for (int i = 0; i < Cookies.Count; ++i) + { + Cookie c = Cookies[i]; + + if (c.Equals(cookie)) + { + idx = i; + return c; + } + } + + idx = -1; + return null; + } + +#endregion + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Cookies/CookieJar.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Cookies/CookieJar.cs.meta new file mode 100644 index 000000000..83631dca9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Cookies/CookieJar.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b6b22cd983735ee46908eac3f37eb798 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Core.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Core.meta new file mode 100644 index 000000000..46d59a57a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1df2191ed468b024296665b1ad27ca11 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Core/ConnectionEvents.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/ConnectionEvents.cs new file mode 100644 index 000000000..01da92c2b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/ConnectionEvents.cs @@ -0,0 +1,195 @@ +using System; +using System.Collections.Concurrent; + +using BestHTTP.Connections; +using BestHTTP.Logger; + +// Required for ConcurrentQueue.Clear extension. +using BestHTTP.Extensions; + +namespace BestHTTP.Core +{ + public enum ConnectionEvents + { + StateChange, + ProtocolSupport + } + + public +#if CSHARP_7_OR_LATER + readonly +#endif + struct ConnectionEventInfo + { + public readonly ConnectionBase Source; + + public readonly ConnectionEvents Event; + + public readonly HTTPConnectionStates State; + + public readonly HostProtocolSupport ProtocolSupport; + + public readonly HTTPRequest Request; + + public ConnectionEventInfo(ConnectionBase sourceConn, ConnectionEvents @event) + { + this.Source = sourceConn; + this.Event = @event; + + this.State = HTTPConnectionStates.Initial; + + this.ProtocolSupport = HostProtocolSupport.Unknown; + + this.Request = null; + } + + public ConnectionEventInfo(ConnectionBase sourceConn, HTTPConnectionStates newState) + { + this.Source = sourceConn; + + this.Event = ConnectionEvents.StateChange; + + this.State = newState; + + this.ProtocolSupport = HostProtocolSupport.Unknown; + + this.Request = null; + } + + public ConnectionEventInfo(ConnectionBase sourceConn, HostProtocolSupport protocolSupport) + { + this.Source = sourceConn; + this.Event = ConnectionEvents.ProtocolSupport; + + this.State = HTTPConnectionStates.Initial; + + this.ProtocolSupport = protocolSupport; + + this.Request = null; + } + + public ConnectionEventInfo(ConnectionBase sourceConn, HTTPRequest request) + { + this.Source = sourceConn; + + this.Event = ConnectionEvents.StateChange; + + this.State = HTTPConnectionStates.ClosedResendRequest; + + this.ProtocolSupport = HostProtocolSupport.Unknown; + + this.Request = request; + } + + public override string ToString() + { + return string.Format("[ConnectionEventInfo SourceConnection: {0}, Event: {1}, State: {2}, ProtocolSupport: {3}]", + this.Source.ToString(), this.Event, this.State, this.ProtocolSupport); + } + } + + public static class ConnectionEventHelper + { + private static ConcurrentQueue connectionEventQueue = new ConcurrentQueue(); + +#pragma warning disable 0649 + public static Action OnEvent; +#pragma warning restore + + public static void EnqueueConnectionEvent(ConnectionEventInfo @event) + { + if (HTTPManager.Logger.Level == Loglevels.All) + HTTPManager.Logger.Information("ConnectionEventHelper", "Enqueue connection event: " + @event.ToString(), @event.Source.Context); + + connectionEventQueue.Enqueue(@event); + } + + internal static void Clear() + { + connectionEventQueue.Clear(); + } + + internal static void ProcessQueue() + { + ConnectionEventInfo connectionEvent; + while (connectionEventQueue.TryDequeue(out connectionEvent)) + { + if (HTTPManager.Logger.Level == Loglevels.All) + HTTPManager.Logger.Information("ConnectionEventHelper", "Processing connection event: " + connectionEvent.ToString(), connectionEvent.Source.Context); + + if (OnEvent != null) + { + try + { + OnEvent(connectionEvent); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("ConnectionEventHelper", "ProcessQueue", ex, connectionEvent.Source.Context); + } + } + + if (connectionEvent.Source.LastProcessedUri == null) + { + HTTPManager.Logger.Information("ConnectionEventHelper", String.Format("Ignoring ConnectionEventInfo({0}) because its LastProcessedUri is null!", connectionEvent.ToString()), connectionEvent.Source.Context); + return; + } + + switch (connectionEvent.Event) + { + case ConnectionEvents.StateChange: + HandleConnectionStateChange(connectionEvent); + break; + + case ConnectionEvents.ProtocolSupport: + HostManager.GetHost(connectionEvent.Source.LastProcessedUri.Host) + .GetHostDefinition(connectionEvent.Source.ServerAddress) + .AddProtocol(connectionEvent.ProtocolSupport); + break; + } + } + } + + private static void HandleConnectionStateChange(ConnectionEventInfo @event) + { + try + { + var connection = @event.Source; + + switch (@event.State) + { + case HTTPConnectionStates.Recycle: + HostManager.GetHost(connection.LastProcessedUri.Host) + .GetHostDefinition(connection.ServerAddress) + .RecycleConnection(connection) + .TryToSendQueuedRequests(); + + break; + + case HTTPConnectionStates.WaitForProtocolShutdown: + HostManager.GetHost(connection.LastProcessedUri.Host) + .GetHostDefinition(connection.ServerAddress) + .RemoveConnection(connection, @event.State); + break; + + case HTTPConnectionStates.Closed: + case HTTPConnectionStates.ClosedResendRequest: + // in case of ClosedResendRequest + if (@event.Request != null) + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(@event.Request, RequestEvents.Resend)); + + HostManager.GetHost(connection.LastProcessedUri.Host) + .GetHostDefinition(connection.ServerAddress) + .RemoveConnection(connection, @event.State) + .TryToSendQueuedRequests(); + break; + } + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("ConnectionEvents", $"HandleConnectionStateChange ({@event.State})", ex, @event.Source.Context); + UnityEngine.Debug.LogException(ex); + } + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Core/ConnectionEvents.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/ConnectionEvents.cs.meta new file mode 100644 index 000000000..5c8cd9eec --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/ConnectionEvents.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4c8c0b8f6a117514f8c6dfcc26c949e0 +timeCreated: 1571210041 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Core/HostConnection.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/HostConnection.cs new file mode 100644 index 000000000..31ca08109 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/HostConnection.cs @@ -0,0 +1,264 @@ +using System; +using System.Collections.Generic; + +using BestHTTP.Connections; +using BestHTTP.Extensions; +using BestHTTP.Logger; + +namespace BestHTTP.Core +{ + public enum HostProtocolSupport : byte + { + Unknown = 0x00, + HTTP1 = 0x01, + HTTP2 = 0x02 + } + + /// + /// A HostConnection object manages the connections to a host and the request queue. + /// + public sealed class HostConnection + { + public HostDefinition Host { get; private set; } + + public string VariantId { get; private set; } + + public HostProtocolSupport ProtocolSupport { get; private set; } + public DateTime LastProtocolSupportUpdate { get; private set; } + + public int QueuedRequests { get { return this.Queue.Count; } } + + public LoggingContext Context { get; private set; } + + private List Connections = new List(); + private List Queue = new List(); + + public HostConnection(HostDefinition host, string variantId) + { + this.Host = host; + this.VariantId = variantId; + + this.Context = new LoggingContext(this); + this.Context.Add("Host", this.Host.Host); + this.Context.Add("VariantId", this.VariantId); + } + + internal void AddProtocol(HostProtocolSupport protocolSupport) + { + this.LastProtocolSupportUpdate = DateTime.UtcNow; + + var oldProtocol = this.ProtocolSupport; + + if (oldProtocol != protocolSupport) + { + this.ProtocolSupport = protocolSupport; + + HTTPManager.Logger.Information(typeof(HostConnection).Name, string.Format("AddProtocol({0}) - changing from {1} to {2}", this.VariantId, oldProtocol, protocolSupport), this.Context); + + HostManager.Save(); + } + + if (protocolSupport == HostProtocolSupport.HTTP2) + TryToSendQueuedRequests(); + } + + internal HostConnection Send(HTTPRequest request) + { + var conn = GetNextAvailable(request); + + if (conn != null) + { + request.State = HTTPRequestStates.Processing; + + request.Prepare(); + + // then start process the request + conn.Process(request); + } + else + { + // If no free connection found and creation prohibited, we will put back to the queue + this.Queue.Add(request); + } + + return this; + } + + internal ConnectionBase GetNextAvailable(HTTPRequest request) + { + int activeConnections = 0; + ConnectionBase conn = null; + // Check the last created connection first. This way, if a higher level protocol is present that can handle more requests (== HTTP/2) that protocol will be chosen + // and others will be closed when their inactivity time is reached. + for (int i = Connections.Count - 1; i >= 0; --i) + { + conn = Connections[i]; + + if (conn.State == HTTPConnectionStates.Initial || conn.State == HTTPConnectionStates.Free || conn.CanProcessMultiple) + { + if (!conn.TestConnection()) + { + HTTPManager.Logger.Verbose("HostConnection", "GetNextAvailable - TestConnection returned false!", this.Context, request.Context, conn.Context); + + RemoveConnectionImpl(conn, HTTPConnectionStates.Closed); + continue; + } + + HTTPManager.Logger.Verbose("HostConnection", string.Format("GetNextAvailable - returning with connection. state: {0}, CanProcessMultiple: {1}", conn.State, conn.CanProcessMultiple), this.Context, request.Context, conn.Context); + return conn; + } + + activeConnections++; + } + + if (activeConnections >= HTTPManager.MaxConnectionPerServer) + { + HTTPManager.Logger.Verbose("HostConnection", string.Format("GetNextAvailable - activeConnections({0}) >= HTTPManager.MaxConnectionPerServer({1})", activeConnections, HTTPManager.MaxConnectionPerServer), this.Context, request.Context); + return null; + } + + string key = HostDefinition.GetKeyForRequest(request); + + conn = null; + +#if UNITY_WEBGL && !UNITY_EDITOR + conn = new WebGLConnection(key); +#else + if (request.CurrentUri.IsFile) + conn = new FileConnection(key); + else + { +#if !BESTHTTP_DISABLE_ALTERNATE_SSL + // Hold back the creation of a new connection until we know more about the remote host's features. + // If we send out multiple requests at once it will execute the first and delay the others. + // While it will decrease performance initially, it will prevent the creation of TCP connections + // that will be unused after their first request processing if the server supports HTTP/2. + if (activeConnections >= 1 && (this.ProtocolSupport == HostProtocolSupport.Unknown || this.ProtocolSupport == HostProtocolSupport.HTTP2)) + { + HTTPManager.Logger.Verbose("HostConnection", string.Format("GetNextAvailable - waiting for protocol support message. activeConnections: {0}, ProtocolSupport: {1} ", activeConnections, this.ProtocolSupport), this.Context, request.Context); + return null; + } +#endif + + conn = new HTTPConnection(key); + HTTPManager.Logger.Verbose("HostConnection", string.Format("GetNextAvailable - creating new connection, key: {0} ", key), this.Context, request.Context, conn.Context); + } +#endif + Connections.Add(conn); + + return conn; + } + + internal HostConnection RecycleConnection(ConnectionBase conn) + { + conn.State = HTTPConnectionStates.Free; + + BestHTTP.Extensions.Timer.Add(new TimerData(TimeSpan.FromSeconds(1), conn, CloseConnectionAfterInactivity)); + + return this; + } + + private bool RemoveConnectionImpl(ConnectionBase conn, HTTPConnectionStates setState) + { + conn.State = setState; + conn.Dispose(); + + bool found = this.Connections.Remove(conn); + + if (!found) + HTTPManager.Logger.Information(typeof(HostConnection).Name, string.Format("RemoveConnection - Couldn't find connection! key: {0}", conn.ServerAddress), this.Context, conn.Context); + + return found; + } + + internal HostConnection RemoveConnection(ConnectionBase conn, HTTPConnectionStates setState) + { + RemoveConnectionImpl(conn, setState); + + return this; + } + + internal HostConnection TryToSendQueuedRequests() + { + while (this.Queue.Count > 0 && GetNextAvailable(this.Queue[0]) != null) + { + Send(this.Queue[0]); + this.Queue.RemoveAt(0); + } + + return this; + } + + public ConnectionBase Find(Predicate match) + { + return this.Connections.Find(match); + } + + private bool CloseConnectionAfterInactivity(DateTime now, object context) + { + var conn = context as ConnectionBase; + + bool closeConnection = conn.State == HTTPConnectionStates.Free && now - conn.LastProcessTime >= conn.KeepAliveTime; + if (closeConnection) + { + HTTPManager.Logger.Information(typeof(HostConnection).Name, string.Format("CloseConnectionAfterInactivity - [{0}] Closing! State: {1}, Now: {2}, LastProcessTime: {3}, KeepAliveTime: {4}", + conn.ToString(), conn.State, now.ToString(System.Globalization.CultureInfo.InvariantCulture), conn.LastProcessTime.ToString(System.Globalization.CultureInfo.InvariantCulture), conn.KeepAliveTime), this.Context, conn.Context); + + RemoveConnection(conn, HTTPConnectionStates.Closed); + return false; + } + + // repeat until the connection's state is free + return conn.State == HTTPConnectionStates.Free; + } + + public void RemoveAllIdleConnections() + { + for (int i = 0; i < this.Connections.Count; i++) + if (this.Connections[i].State == HTTPConnectionStates.Free) + { + int countBefore = this.Connections.Count; + RemoveConnection(this.Connections[i], HTTPConnectionStates.Closed); + + if (countBefore != this.Connections.Count) + i--; + } + } + + internal void Shutdown() + { + this.Queue.Clear(); + + foreach (var conn in this.Connections) + { + // Swallow any exceptions, we are quitting anyway. + try + { + conn.Shutdown(ShutdownTypes.Immediate); + } + catch { } + } + //this.Connections.Clear(); + } + + internal void SaveTo(System.IO.BinaryWriter bw) + { + bw.Write(this.LastProtocolSupportUpdate.ToBinary()); + bw.Write((byte)this.ProtocolSupport); + } + + internal void LoadFrom(int version, System.IO.BinaryReader br) + { + this.LastProtocolSupportUpdate = DateTime.FromBinary(br.ReadInt64()); + this.ProtocolSupport = (HostProtocolSupport)br.ReadByte(); + + if (DateTime.UtcNow - this.LastProtocolSupportUpdate >= TimeSpan.FromDays(1)) + { + HTTPManager.Logger.Verbose("HostConnection", string.Format("LoadFrom - Too Old! LastProtocolSupportUpdate: {0}, ProtocolSupport: {1}", this.LastProtocolSupportUpdate.ToString(System.Globalization.CultureInfo.InvariantCulture), this.ProtocolSupport), this.Context); + this.ProtocolSupport = HostProtocolSupport.Unknown; + } + else + HTTPManager.Logger.Verbose("HostConnection", string.Format("LoadFrom - LastProtocolSupportUpdate: {0}, ProtocolSupport: {1}", this.LastProtocolSupportUpdate.ToString(System.Globalization.CultureInfo.InvariantCulture), this.ProtocolSupport), this.Context); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Core/HostConnection.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/HostConnection.cs.meta new file mode 100644 index 000000000..459cd0699 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/HostConnection.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c4731d9a6e853854d845586222af3c67 +timeCreated: 1571210042 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Core/HostDefinition.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/HostDefinition.cs new file mode 100644 index 000000000..835f49fe9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/HostDefinition.cs @@ -0,0 +1,147 @@ +using System; +using System.Collections.Generic; + +using BestHTTP.Connections; +using BestHTTP.PlatformSupport.Text; + +namespace BestHTTP.Core +{ + public sealed class HostDefinition + { + public string Host { get; private set; } + + // alt-svc support: + // 1. When a request receives an alt-svc header send a plugin msg to the manager with all the details to route to the proper hostDefinition. + // 2. HostDefinition parses the header value + // 3. If there's at least one supported protocol found, start open a connection to that said alternate + // 4. If the new connection is open, route new requests to that connection + public List Alternates; + + /// + /// Requests to the same host can require different connections: http, https, http + proxy, https + proxy, http2, http2 + proxy + /// + public Dictionary hostConnectionVariant = new Dictionary(); + + public HostDefinition(string host) + { + this.Host = host; + } + + public HostConnection HasBetterAlternate(HTTPRequest request) + { + return null; + } + + public HostConnection GetHostDefinition(HTTPRequest request) + { + string key = GetKeyForRequest(request); + + return GetHostDefinition(key); + } + + public HostConnection GetHostDefinition(string key) + { + HostConnection host = null; + + if (!this.hostConnectionVariant.TryGetValue(key, out host)) + this.hostConnectionVariant.Add(key, host = new HostConnection(this, key)); + + return host; + } + + public void Send(HTTPRequest request) + { + GetHostDefinition(request) + .Send(request); + } + + public void TryToSendQueuedRequests() + { + foreach (var kvp in hostConnectionVariant) + kvp.Value.TryToSendQueuedRequests(); + } + + public void HandleAltSvcHeader(HTTPResponse response) + { + var headerValues = response.GetHeaderValues("alt-svc"); + if (headerValues == null) + HTTPManager.Logger.Warning(typeof(HostDefinition).Name, "Received HandleAltSvcHeader message, but no Alt-Svc header found!", response.Context); + } + + public void HandleConnectProtocol(HTTP2ConnectProtocolInfo info) + { + HTTPManager.Logger.Information(typeof(HostDefinition).Name, string.Format("Received HandleConnectProtocol message. Connect protocol for host {0}. Enabled: {1}", info.Host, info.Enabled)); + } + + internal void Shutdown() + { + foreach (var kvp in this.hostConnectionVariant) + { + kvp.Value.Shutdown(); + } + } + + internal void SaveTo(System.IO.BinaryWriter bw) + { + bw.Write(this.hostConnectionVariant.Count); + + foreach (var kvp in this.hostConnectionVariant) + { + bw.Write(kvp.Key.ToString()); + + kvp.Value.SaveTo(bw); + } + } + + internal void LoadFrom(int version, System.IO.BinaryReader br) + { + int count = br.ReadInt32(); + for (int i = 0; i < count; ++i) + { + GetHostDefinition(br.ReadString()) + .LoadFrom(version, br); + } + } + + public static string GetKeyForRequest(HTTPRequest request) + { + return GetKeyFor(request.CurrentUri +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + , request.Proxy +#endif + ); + } + + public static string GetKeyFor(Uri uri +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + , Proxy proxy +#endif + ) + { + if (uri.IsFile) + return uri.ToString(); + + var keyBuilder = StringBuilderPool.Get(11); + +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + if (proxy != null && proxy.UseProxyForAddress(uri)) + { + keyBuilder.Append(proxy.Address.Scheme); + keyBuilder.Append("://"); + keyBuilder.Append(proxy.Address.Host); + keyBuilder.Append(":"); + keyBuilder.Append(proxy.Address.Port); + keyBuilder.Append(" @ "); + } +#endif + + keyBuilder.Append(uri.Scheme); + keyBuilder.Append("://"); + keyBuilder.Append(uri.Host); + keyBuilder.Append(":"); + keyBuilder.Append(uri.Port); + + return StringBuilderPool.ReleaseAndGrab(keyBuilder); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Core/HostDefinition.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/HostDefinition.cs.meta new file mode 100644 index 000000000..fa642b6de --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/HostDefinition.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bea9e2ccce9dba14194244739c9a37ac +timeCreated: 1571210042 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Core/HostManager.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/HostManager.cs new file mode 100644 index 000000000..2eb7eabdb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/HostManager.cs @@ -0,0 +1,136 @@ +using BestHTTP.PlatformSupport.FileSystem; +using System; +using System.Collections.Generic; + +namespace BestHTTP.Core +{ + public static class HostManager + { + private const int Version = 1; + private static string LibraryPath = string.Empty; + private static bool IsSaveAndLoadSupported = false; + private static bool IsLoaded = false; + + private static Dictionary hosts = new Dictionary(); + + public static HostDefinition GetHost(string hostStr) + { + HostDefinition host; + if (!hosts.TryGetValue(hostStr, out host)) + hosts.Add(hostStr, host = new HostDefinition(hostStr)); + + return host; + } + + public static void RemoveAllIdleConnections() + { + HTTPManager.Logger.Information("HostManager", "RemoveAllIdleConnections"); + foreach (var host_kvp in hosts) + foreach (var variant_kvp in host_kvp.Value.hostConnectionVariant) + variant_kvp.Value.RemoveAllIdleConnections(); + } + + public static void TryToSendQueuedRequests() + { + foreach (var kvp in hosts) + kvp.Value.TryToSendQueuedRequests(); + } + + public static void Shutdown() + { + HTTPManager.Logger.Information("HostManager", "Shutdown initiated!"); + foreach (var kvp in hosts) + kvp.Value.Shutdown(); + } + + public static void Clear() + { + HTTPManager.Logger.Information("HostManager", "Clearing hosts!"); + hosts.Clear(); + } + + private static void SetupFolder() + { + if (string.IsNullOrEmpty(LibraryPath)) + { + try + { + LibraryPath = System.IO.Path.Combine(HTTPManager.GetRootCacheFolder(), "Hosts"); + HTTPManager.IOService.FileExists(LibraryPath); + IsSaveAndLoadSupported = true; + } + catch + { + IsSaveAndLoadSupported = false; + HTTPManager.Logger.Warning("HostManager", "Save and load Disabled!"); + } + } + } + + public static void Save() + { + if (!IsSaveAndLoadSupported || string.IsNullOrEmpty(LibraryPath)) + return; + + try + { + using (var fs = HTTPManager.IOService.CreateFileStream(LibraryPath, FileStreamModes.Create)) + using (var bw = new System.IO.BinaryWriter(fs)) + { + bw.Write(Version); + + bw.Write(hosts.Count); + foreach (var kvp in hosts) + { + bw.Write(kvp.Key.ToString()); + + kvp.Value.SaveTo(bw); + } + } + HTTPManager.Logger.Information("HostManager", hosts.Count + " hosts saved!"); + } + catch + { } + } + + public static void Load() + { + if (IsLoaded) + return; + IsLoaded = true; + + SetupFolder(); + + if (!IsSaveAndLoadSupported || string.IsNullOrEmpty(LibraryPath) || !HTTPManager.IOService.FileExists(LibraryPath)) + return; + + try + { + using (var fs = HTTPManager.IOService.CreateFileStream(LibraryPath, FileStreamModes.OpenRead)) + using (var br = new System.IO.BinaryReader(fs)) + { + int version = br.ReadInt32(); + + int hostCount = br.ReadInt32(); + + for (int i = 0; i < hostCount; ++i) + { + GetHost(br.ReadString()) + .LoadFrom(version, br); + } + + HTTPManager.Logger.Information("HostManager", hostCount.ToString() + " HostDefinitions loaded!"); + } + } + catch + { + try + { + HTTPManager.IOService.FileDelete(LibraryPath); + } + catch + { } + } + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Core/HostManager.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/HostManager.cs.meta new file mode 100644 index 000000000..72a7a9420 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/HostManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 954a40ed8659ae247a8d51be385cd86c +timeCreated: 1571210041 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Core/IHTTPRequestHandler.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/IHTTPRequestHandler.cs new file mode 100644 index 000000000..c0a00ed9e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/IHTTPRequestHandler.cs @@ -0,0 +1,31 @@ +#if !UNITY_WEBGL || UNITY_EDITOR +using System; +using BestHTTP.Connections; +using BestHTTP.Logger; + +namespace BestHTTP.Core +{ + public interface IHTTPRequestHandler : IDisposable + { + bool HasCustomRequestProcessor { get; } + + KeepAliveHeader KeepAlive { get; } + + bool CanProcessMultiple { get; } + + ShutdownTypes ShutdownType { get; } + + LoggingContext Context { get; } + + void Process(HTTPRequest request); + + void RunHandler(); + + /// + /// An immediate shutdown request that called only on application closure. + /// + void Shutdown(ShutdownTypes type); + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Core/IHTTPRequestHandler.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/IHTTPRequestHandler.cs.meta new file mode 100644 index 000000000..283c118f1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/IHTTPRequestHandler.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2c82a52761c9d93439428e52e18e53d5 +timeCreated: 1571210040 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Core/IProtocol.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/IProtocol.cs new file mode 100644 index 000000000..5b34a7ed3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/IProtocol.cs @@ -0,0 +1,35 @@ +using System; + +using BestHTTP.Logger; + +namespace BestHTTP.Core +{ + public struct HostConnectionKey + { + public readonly string Host; + public readonly string Connection; + + public HostConnectionKey(string host, string connection) + { + this.Host = host; + this.Connection = connection; + } + + public override string ToString() + { + return string.Format("[HostConnectionKey Host: '{0}', Connection: '{1}']", this.Host, this.Connection); + } + } + + public interface IProtocol : IDisposable + { + HostConnectionKey ConnectionKey { get; } + + bool IsClosed { get; } + LoggingContext LoggingContext { get; } + + void HandleEvents(); + + void CancellationRequested(); + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Core/IProtocol.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/IProtocol.cs.meta new file mode 100644 index 000000000..d05f98a05 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/IProtocol.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 990ae7e763c243241babd6da91b2bb40 +timeCreated: 1571210041 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Core/PluginEvents.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/PluginEvents.cs new file mode 100644 index 000000000..f996e144b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/PluginEvents.cs @@ -0,0 +1,163 @@ +using System; +using System.Collections.Concurrent; + +using BestHTTP.Logger; + +// Required for ConcurrentQueue.Clear extension. +using BestHTTP.Extensions; + +namespace BestHTTP.Core +{ + public enum PluginEvents + { +#if !BESTHTTP_DISABLE_COOKIES + SaveCookieLibrary, +#endif + + SaveCacheLibrary, + + AltSvcHeader, + + HTTP2ConnectProtocol + } + + public +#if CSHARP_7_OR_LATER + readonly +#endif + struct PluginEventInfo + { + public readonly PluginEvents Event; + public readonly object Payload; + + public PluginEventInfo(PluginEvents @event) + { + this.Event = @event; + this.Payload = null; + } + + public PluginEventInfo(PluginEvents @event, object payload) + { + this.Event = @event; + this.Payload = payload; + } + + public override string ToString() + { + return string.Format("[PluginEventInfo Event: {0}]", this.Event); + } + } + + public static class PluginEventHelper + { + private static ConcurrentQueue pluginEvents = new ConcurrentQueue(); + +#pragma warning disable 0649 + public static Action OnEvent; +#pragma warning restore + + public static void EnqueuePluginEvent(PluginEventInfo @event) + { + if (HTTPManager.Logger.Level == Loglevels.All) + HTTPManager.Logger.Information("PluginEventHelper", "Enqueue plugin event: " + @event.ToString()); + + pluginEvents.Enqueue(@event); + } + + internal static void Clear() + { + pluginEvents.Clear(); + } + + internal static void ProcessQueue() + { +#if !BESTHTTP_DISABLE_COOKIES + bool saveCookieLibrary = false; +#endif + +#if !BESTHTTP_DISABLE_CACHING + bool saveCacheLibrary = false; +#endif + + PluginEventInfo pluginEvent; + while (pluginEvents.TryDequeue(out pluginEvent)) + { + if (HTTPManager.Logger.Level == Loglevels.All) + HTTPManager.Logger.Information("PluginEventHelper", "Processing plugin event: " + pluginEvent.ToString()); + + if (OnEvent != null) + { + try + { + OnEvent(pluginEvent); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("PluginEventHelper", "ProcessQueue", ex); + } + } + + switch (pluginEvent.Event) + { +#if !BESTHTTP_DISABLE_COOKIES + case PluginEvents.SaveCookieLibrary: + saveCookieLibrary = true; + break; +#endif + +#if !BESTHTTP_DISABLE_CACHING + case PluginEvents.SaveCacheLibrary: + saveCacheLibrary = true; + break; +#endif + + case PluginEvents.AltSvcHeader: + AltSvcEventInfo altSvcEventInfo = pluginEvent.Payload as AltSvcEventInfo; + HostManager.GetHost(altSvcEventInfo.Host) + .HandleAltSvcHeader(altSvcEventInfo.Response); + break; + + case PluginEvents.HTTP2ConnectProtocol: + HTTP2ConnectProtocolInfo info = pluginEvent.Payload as HTTP2ConnectProtocolInfo; + HostManager.GetHost(info.Host) + .HandleConnectProtocol(info); + break; + } + } + +#if !BESTHTTP_DISABLE_COOKIES + if (saveCookieLibrary) + PlatformSupport.Threading.ThreadedRunner.RunShortLiving(Cookies.CookieJar.Persist); +#endif + +#if !BESTHTTP_DISABLE_CACHING + if (saveCacheLibrary) + PlatformSupport.Threading.ThreadedRunner.RunShortLiving(Caching.HTTPCacheService.SaveLibrary); +#endif + } + } + + public sealed class AltSvcEventInfo + { + public readonly string Host; + public readonly HTTPResponse Response; + + public AltSvcEventInfo(string host, HTTPResponse resp) + { + this.Host = host; + this.Response = resp; + } + } + + public sealed class HTTP2ConnectProtocolInfo + { + public readonly string Host; + public readonly bool Enabled; + + public HTTP2ConnectProtocolInfo(string host, bool enabled) + { + this.Host = host; + this.Enabled = enabled; + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Core/PluginEvents.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/PluginEvents.cs.meta new file mode 100644 index 000000000..25696e3d1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/PluginEvents.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0f4588a7329bbf94da4c4413524a6543 +timeCreated: 1571210040 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Core/ProtocolEvents.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/ProtocolEvents.cs new file mode 100644 index 000000000..7c2aac912 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/ProtocolEvents.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; + +using BestHTTP.Logger; + +// Required for ConcurrentQueue.Clear extension. +using BestHTTP.Extensions; + +namespace BestHTTP.Core +{ + public +#if CSHARP_7_OR_LATER + readonly +#endif + struct ProtocolEventInfo + { + public readonly IProtocol Source; + + public ProtocolEventInfo(IProtocol source) + { + this.Source = source; + } + + public override string ToString() + { + return string.Format("[ProtocolEventInfo Source: {0}]", Source); + } + } + + public static class ProtocolEventHelper + { + private static ConcurrentQueue protocolEvents = new ConcurrentQueue(); + private static List ActiveProtocols = new List(2); + +#pragma warning disable 0649 + public static Action OnEvent; +#pragma warning restore + + public static void EnqueueProtocolEvent(ProtocolEventInfo @event) + { + if (HTTPManager.Logger.Level == Loglevels.All) + HTTPManager.Logger.Information("ProtocolEventHelper", "Enqueue protocol event: " + @event.ToString(), @event.Source.LoggingContext); + + protocolEvents.Enqueue(@event); + } + + internal static void Clear() + { + protocolEvents.Clear(); + } + + internal static void ProcessQueue() + { + ProtocolEventInfo protocolEvent; + while (protocolEvents.TryDequeue(out protocolEvent)) + { + if (HTTPManager.Logger.Level == Loglevels.All) + HTTPManager.Logger.Information("ProtocolEventHelper", "Processing protocol event: " + protocolEvent.ToString(), protocolEvent.Source.LoggingContext); + + if (OnEvent != null) + { + try + { + OnEvent(protocolEvent); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("ProtocolEventHelper", "ProcessQueue", ex, protocolEvent.Source.LoggingContext); + } + } + + IProtocol protocol = protocolEvent.Source; + + protocol.HandleEvents(); + + if (protocol.IsClosed) + { + ActiveProtocols.Remove(protocol); + + HostManager.GetHost(protocol.ConnectionKey.Host) + .GetHostDefinition(protocol.ConnectionKey.Connection) + .TryToSendQueuedRequests(); + + protocol.Dispose(); + } + } + } + + internal static void AddProtocol(IProtocol protocol) + { + ActiveProtocols.Add(protocol); + } + + internal static void CancelActiveProtocols() + { + for (int i = 0; i < ActiveProtocols.Count; ++i) + { + var protocol = ActiveProtocols[i]; + + protocol.CancellationRequested(); + } + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Core/ProtocolEvents.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/ProtocolEvents.cs.meta new file mode 100644 index 000000000..7de219516 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/ProtocolEvents.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6f79c9054305c3942b7948fe994769bb +timeCreated: 1571210041 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Core/RequestEvents.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/RequestEvents.cs new file mode 100644 index 000000000..e10319f8f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/RequestEvents.cs @@ -0,0 +1,592 @@ +using BestHTTP.Extensions; +using BestHTTP.Logger; +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.Timings; + +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; + +namespace BestHTTP.Core +{ + public enum RequestEvents + { + Upgraded, + DownloadProgress, + UploadProgress, + StreamingData, + StateChange, + Resend, + Headers, + TimingData + } + + public +#if CSHARP_7_OR_LATER + readonly +#endif + struct RequestEventInfo + { + public readonly HTTPRequest SourceRequest; + public readonly RequestEvents Event; + + public readonly HTTPRequestStates State; + + public readonly long Progress; + public readonly long ProgressLength; + + public readonly byte[] Data; + public readonly int DataLength; + + // Timing Data + public readonly string Name; + public readonly DateTime Time; + public readonly TimeSpan Duration; + + // Headers + public readonly Dictionary> Headers; + + public RequestEventInfo(HTTPRequest request, RequestEvents @event) + { + this.SourceRequest = request; + this.Event = @event; + + this.State = HTTPRequestStates.Initial; + + this.Progress = this.ProgressLength = 0; + + this.Data = null; + this.DataLength = 0; + + // TimingData + this.Name = null; + this.Time = DateTime.MinValue; + this.Duration = TimeSpan.Zero; + + // Headers + this.Headers = null; + } + + public RequestEventInfo(HTTPRequest request, HTTPRequestStates newState) + { + this.SourceRequest = request; + this.Event = RequestEvents.StateChange; + this.State = newState; + + this.Progress = this.ProgressLength = 0; + this.Data = null; + this.DataLength = 0; + + // TimingData + this.Name = null; + this.Time = DateTime.MinValue; + this.Duration = TimeSpan.Zero; + + // Headers + this.Headers = null; + } + + public RequestEventInfo(HTTPRequest request, RequestEvents @event, long progress, long progressLength) + { + this.SourceRequest = request; + this.Event = @event; + this.State = HTTPRequestStates.Initial; + + this.Progress = progress; + this.ProgressLength = progressLength; + this.Data = null; + this.DataLength = 0; + + // TimingData + this.Name = null; + this.Time = DateTime.MinValue; + this.Duration = TimeSpan.Zero; + + // Headers + this.Headers = null; + } + + public RequestEventInfo(HTTPRequest request, byte[] data, int dataLength) + { + this.SourceRequest = request; + this.Event = RequestEvents.StreamingData; + this.State = HTTPRequestStates.Initial; + + this.Progress = this.ProgressLength = 0; + this.Data = data; + this.DataLength = dataLength; + + // TimingData + this.Name = null; + this.Time = DateTime.MinValue; + this.Duration = TimeSpan.Zero; + + // Headers + this.Headers = null; + } + + public RequestEventInfo(HTTPRequest request, string name, DateTime time) + { + this.SourceRequest = request; + this.Event = RequestEvents.TimingData; + this.State = HTTPRequestStates.Initial; + + this.Progress = this.ProgressLength = 0; + this.Data = null; + this.DataLength = 0; + + // TimingData + this.Name = name; + this.Time = time; + this.Duration = TimeSpan.Zero; + + // Headers + this.Headers = null; + } + + public RequestEventInfo(HTTPRequest request, string name, TimeSpan duration) + { + this.SourceRequest = request; + this.Event = RequestEvents.TimingData; + this.State = HTTPRequestStates.Initial; + + this.Progress = this.ProgressLength = 0; + this.Data = null; + this.DataLength = 0; + + // TimingData + this.Name = name; + this.Time = DateTime.Now; + this.Duration = duration; + + // Headers + this.Headers = null; + } + + public RequestEventInfo(HTTPRequest request, Dictionary> headers) + { + this.SourceRequest = request; + this.Event = RequestEvents.Headers; + this.State = HTTPRequestStates.Initial; + + this.Progress = this.ProgressLength = 0; + this.Data = null; + this.DataLength = 0; + + // TimingData + this.Name = null; + this.Time = DateTime.MinValue; + this.Duration = TimeSpan.Zero; + + // Headers + this.Headers = headers; + } + + public override string ToString() + { + switch (this.Event) + { + case RequestEvents.Upgraded: + return string.Format("[RequestEventInfo SourceRequest: {0}, Event: Upgraded]", this.SourceRequest.CurrentUri); + case RequestEvents.DownloadProgress: + return string.Format("[RequestEventInfo SourceRequest: {0}, Event: DownloadProgress, Progress: {1}, ProgressLength: {2}]", this.SourceRequest.CurrentUri, this.Progress, this.ProgressLength); + case RequestEvents.UploadProgress: + return string.Format("[RequestEventInfo SourceRequest: {0}, Event: UploadProgress, Progress: {1}, ProgressLength: {2}]", this.SourceRequest.CurrentUri, this.Progress, this.ProgressLength); + case RequestEvents.StreamingData: + return string.Format("[RequestEventInfo SourceRequest: {0}, Event: StreamingData, DataLength: {1}]", this.SourceRequest.CurrentUri, this.DataLength); + case RequestEvents.StateChange: + return string.Format("[RequestEventInfo SourceRequest: {0}, Event: StateChange, State: {1}]", this.SourceRequest.CurrentUri, this.State); + case RequestEvents.Resend: + return string.Format("[RequestEventInfo SourceRequest: {0}, Event: Resend]", this.SourceRequest.CurrentUri); + case RequestEvents.Headers: + return string.Format("[RequestEventInfo SourceRequest: {0}, Event: Headers]", this.SourceRequest.CurrentUri); + case RequestEvents.TimingData: + if (this.Duration == TimeSpan.Zero) + return string.Format("[RequestEventInfo SourceRequest: {0}, Event: TimingData, Name: {1}, Time: {2}]", this.SourceRequest.CurrentUri, this.Name, this.Time); + else + return string.Format("[RequestEventInfo SourceRequest: {0}, Event: TimingData, Name: {1}, Time: {2}, Duration: {3}]", this.SourceRequest.CurrentUri, this.Name, this.Time, this.Duration); + default: + throw new NotImplementedException(this.Event.ToString()); + } + } + } + + class ProgressFlattener + { + struct FlattenedProgress + { + public HTTPRequest request; + public OnProgressDelegate onProgress; + public long progress; + public long length; + } + + private FlattenedProgress[] progresses; + private bool hasProgress; + + public void InsertOrUpdate(RequestEventInfo info, OnProgressDelegate onProgress) + { + if (progresses == null) + progresses = new FlattenedProgress[1]; + + hasProgress = true; + + var newProgresss = new FlattenedProgress { request = info.SourceRequest, progress = info.Progress, length = info.ProgressLength, onProgress = onProgress }; + + int firstEmptyIdx = -1; + for (int i = 0; i < progresses.Length; i++) + { + var progress = progresses[i]; + if (object.ReferenceEquals(progress.request, info.SourceRequest)) + { + progresses[i] = newProgresss; + return; + } + + if (firstEmptyIdx == -1 && progress.request == null) + firstEmptyIdx = i; + } + + if (firstEmptyIdx == -1) + { + Array.Resize(ref progresses, progresses.Length + 1); + progresses[progresses.Length - 1] = newProgresss; + } + else + progresses[firstEmptyIdx] = newProgresss; + } + + public void DispatchProgressCallbacks() + { + if (progresses == null || !hasProgress) + return; + + for (int i = 0; i < progresses.Length; ++i) + { + var @event = progresses[i]; + var source = @event.request; + if (source != null && @event.onProgress != null) + { + try + { + @event.onProgress(source, @event.progress, @event.length); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("ProgressFlattener", "DispatchProgressCallbacks", ex, source.Context); + } + } + } + + Array.Clear(progresses, 0, progresses.Length); + hasProgress = false; + } + } + + public static class RequestEventHelper + { + private static ConcurrentQueue requestEventQueue = new ConcurrentQueue(); + +#pragma warning disable 0649 + public static Action OnEvent; +#pragma warning restore + + // Low frame rate and hight download/upload speed can add more download/upload progress events to dispatch in one frame. + // This can add higher CPU usage as it might cause updating the UI/do other things unnecessary in the same frame. + // To avoid this, instead of calling the events directly, we store the last event's data and call download/upload callbacks only once per frame. + + private static ProgressFlattener downloadProgress; + private static ProgressFlattener uploadProgress; + + public static void EnqueueRequestEvent(RequestEventInfo @event) + { + if (HTTPManager.Logger.Level == Loglevels.All) + HTTPManager.Logger.Information("RequestEventHelper", "Enqueue request event: " + @event.ToString(), @event.SourceRequest.Context); + + requestEventQueue.Enqueue(@event); + } + + internal static void Clear() + { + requestEventQueue.Clear(); + } + + internal static void ProcessQueue() + { + RequestEventInfo requestEvent; + while (requestEventQueue.TryDequeue(out requestEvent)) + { + HTTPRequest source = requestEvent.SourceRequest; + + if (HTTPManager.Logger.Level == Loglevels.All) + HTTPManager.Logger.Information("RequestEventHelper", "Processing request event: " + requestEvent.ToString(), source.Context); + + if (OnEvent != null) + { + try + { + OnEvent(requestEvent); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("RequestEventHelper", "ProcessQueue", ex, source.Context); + } + } + + switch (requestEvent.Event) + { + case RequestEvents.StreamingData: + { + var response = source.Response; + if (response != null) + System.Threading.Interlocked.Decrement(ref response.UnprocessedFragments); + + bool reuseBuffer = true; + try + { + if (source.UseStreaming) + reuseBuffer = source.OnStreamingData(source, response, requestEvent.Data, requestEvent.DataLength); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("RequestEventHelper", "Process RequestEventQueue - RequestEvents.StreamingData", ex, source.Context); + } + + if (reuseBuffer) + BufferPool.Release(requestEvent.Data); + break; + } + + case RequestEvents.DownloadProgress: + try + { + if (source.OnDownloadProgress != null) + { + if (downloadProgress == null) + downloadProgress = new ProgressFlattener(); + downloadProgress.InsertOrUpdate(requestEvent, source.OnDownloadProgress); + } + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("RequestEventHelper", "Process RequestEventQueue - RequestEvents.DownloadProgress", ex, source.Context); + } + break; + + case RequestEvents.UploadProgress: + try + { + if (source.OnUploadProgress != null) + { + if (uploadProgress == null) + uploadProgress = new ProgressFlattener(); + uploadProgress.InsertOrUpdate(requestEvent, source.OnUploadProgress); + } + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("RequestEventHelper", "Process RequestEventQueue - RequestEvents.UploadProgress", ex, source.Context); + } + break; + +#if !UNITY_WEBGL || UNITY_EDITOR + case RequestEvents.Upgraded: + try + { + if (source.OnUpgraded != null) + source.OnUpgraded(source, source.Response); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("RequestEventHelper", "Process RequestEventQueue - RequestEvents.Upgraded", ex, source.Context); + } + + IProtocol protocol = source.Response as IProtocol; + if (protocol != null) + ProtocolEventHelper.AddProtocol(protocol); + break; +#endif + + case RequestEvents.Resend: + source.State = HTTPRequestStates.Initial; + + var host = HostManager.GetHost(source.CurrentUri.Host); + + host.Send(source); + + break; + + case RequestEvents.Headers: + { + try + { + var response = source.Response; + if (source.OnHeadersReceived != null && response != null) + source.OnHeadersReceived(source, response, requestEvent.Headers); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("RequestEventHelper", "Process RequestEventQueue - RequestEvents.Headers", ex, source.Context); + } + break; + } + + case RequestEvents.StateChange: + try + { + RequestEventHelper.HandleRequestStateChange(requestEvent); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("RequestEventHelper", "HandleRequestStateChange", ex, source.Context); + } + break; + + case RequestEvents.TimingData: + source.Timing.AddEvent(requestEvent.Name, requestEvent.Time, requestEvent.Duration); + break; + } + } + + uploadProgress?.DispatchProgressCallbacks(); + downloadProgress?.DispatchProgressCallbacks(); + } + + private static bool AbortRequestWhenTimedOut(DateTime now, object context) + { + HTTPRequest request = context as HTTPRequest; + + if (request.State >= HTTPRequestStates.Finished) + return false; // don't repeat + + // Protocols will shut down themselves + if (request.Response is IProtocol) + return false; + + if (request.IsTimedOut) + { + HTTPManager.Logger.Information("RequestEventHelper", "AbortRequestWhenTimedOut - Request timed out. CurrentUri: " + request.CurrentUri.ToString(), request.Context); + request.Abort(); + + return false; // don't repeat + } + + return true; // repeat + } + + internal static void HandleRequestStateChange(RequestEventInfo @event) + { + HTTPRequest source = @event.SourceRequest; + + // Because there's a race condition between setting the request's State in its Abort() function running on Unity's main thread + // and the HTTP1/HTTP2 handlers running on an another one. + // Because of these race conditions cases violating expectations can be: + // 1.) State is finished but the response null + // 2.) State is (Connection)TimedOut and the response non-null + // We have to make sure that no callbacks are called twice and in the request must be in a consistent state! + + // State | Request + // --------- +--------- + // 1 Null + // Finished | Skip + // Timeout/Abort | Deliver + // + // 2 Non-Null + // Finished | Deliver + // Timeout/Abort | Skip + + switch (@event.State) + { + case HTTPRequestStates.Queued: + source.QueuedAt = DateTime.UtcNow; + if ((!source.UseStreaming && source.UploadStream == null) || source.EnableTimoutForStreaming) + BestHTTP.Extensions.Timer.Add(new TimerData(TimeSpan.FromSeconds(1), @event.SourceRequest, AbortRequestWhenTimedOut)); + break; + + case HTTPRequestStates.ConnectionTimedOut: + case HTTPRequestStates.TimedOut: + case HTTPRequestStates.Error: + case HTTPRequestStates.Aborted: + source.Response = null; + goto case HTTPRequestStates.Finished; + + case HTTPRequestStates.Finished: + +#if !BESTHTTP_DISABLE_CACHING + // Here we will try to load content for a failed load. Failed load is a request with ConnectionTimedOut, TimedOut or Error state. + // A request with Finished state but response with status code >= 500 also something that we will try to load from the cache. + // We have to set what we going to try to load here too (other place is inside IsCachedEntityExpiresInTheFuture) as we don't want to load a cached content for + // a request that just finished without any problem! + + try + { + bool tryLoad = !source.DisableCache && source.State != HTTPRequestStates.Aborted && (source.State != HTTPRequestStates.Finished || source.Response == null || source.Response.StatusCode >= 500); + if (tryLoad && Caching.HTTPCacheService.IsCachedEntityExpiresInTheFuture(source)) + { + HTTPManager.Logger.Information("RequestEventHelper", "IsCachedEntityExpiresInTheFuture check returned true! CurrentUri: " + source.CurrentUri.ToString(), source.Context); + + PlatformSupport.Threading.ThreadedRunner.RunShortLiving((req) => + { + // Disable any other cache activity. + req.DisableCache = true; + + var originalState = req.State; + if (Connections.ConnectionHelper.TryLoadAllFromCache("RequestEventHelper", req, req.Context)) + { + if (req.State != HTTPRequestStates.Finished) + req.State = HTTPRequestStates.Finished; + else + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(req, HTTPRequestStates.Finished)); + } + else + { + HTTPManager.Logger.Information("RequestEventHelper", "TryLoadAllFromCache failed to load! CurrentUri: " + req.CurrentUri.ToString(), source.Context); + + // If for some reason it couldn't load we place back the request to the queue. + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(req, originalState)); + } + }, source); + break; + } + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("RequestEventHelper", string.Format("HandleRequestStateChange - Cache probe - CurrentUri: \"{0}\" State: {1} StatusCode: {2}", source.CurrentUri, source.State, source.Response != null ? source.Response.StatusCode : 0), ex, source.Context); + } +#endif + + // Dispatch any collected download/upload progress, otherwise they would _after_ the callback! + uploadProgress?.DispatchProgressCallbacks(); + downloadProgress?.DispatchProgressCallbacks(); + + source.Timing.AddEvent(TimingEventNames.Queued_For_Disptach, DateTime.Now, TimeSpan.Zero); + source.Timing.AddEvent(TimingEventNames.Finished, DateTime.Now, DateTime.Now - source.Timing.Start); + + if (source.Callback != null) + { + try + { + source.Callback(source, source.Response); + + source.Timing.AddEvent(TimingEventNames.Callback, DateTime.Now, TimeSpan.Zero); + + if (HTTPManager.Logger.Level <= Loglevels.Information) + HTTPManager.Logger.Information("RequestEventHelper", "Finishing request. Timings: " + source.Timing.ToString(), source.Context); + + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("RequestEventHelper", "HandleRequestStateChange " + @event.State, ex, source.Context); + } + } + + source.Dispose(); + + HostManager.GetHost(source.CurrentUri.Host) + .GetHostDefinition(HostDefinition.GetKeyForRequest(source)) + .TryToSendQueuedRequests(); + break; + } + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Core/RequestEvents.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/RequestEvents.cs.meta new file mode 100644 index 000000000..3879a7408 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Core/RequestEvents.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 69a63e18840e18947be1b714e8abb476 +timeCreated: 1571210041 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression.meta new file mode 100644 index 000000000..14dbc3bf5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4d4075eb3d5bdee4c9f373d710808d60 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/BrotliDecompressor.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/BrotliDecompressor.cs new file mode 100644 index 000000000..c33954688 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/BrotliDecompressor.cs @@ -0,0 +1,90 @@ +using System; + +using BestHTTP.Extensions; +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP.Decompression +{ + public sealed class BrotliDecompressor : IDecompressor + { +#if (NET_STANDARD_2_1 || UNITY_2021_2_OR_NEWER) && (!(ENABLE_MONO && UNITY_ANDROID) || (!UNITY_WEBGL || UNITY_EDITOR)) + private BufferPoolMemoryStream decompressorInputStream; + private BufferPoolMemoryStream decompressorOutputStream; + private System.IO.Compression.BrotliStream decompressorStream; +#endif + + private int MinLengthToDecompress = 256; + + public static bool IsSupported() + { + // Not enabled under android with the mono runtime +#if (NET_STANDARD_2_1 || UNITY_2021_2_OR_NEWER) && (!(ENABLE_MONO && UNITY_ANDROID) || (!UNITY_WEBGL || UNITY_EDITOR)) + return true; +#else + return false; +#endif + } + + public BrotliDecompressor(int minLengthToDecompress) + { + this.MinLengthToDecompress = minLengthToDecompress; + } + + public DecompressedData Decompress(byte[] data, int offset, int count, bool forceDecompress = false, bool dataCanBeLarger = false) + { +#if (NET_STANDARD_2_1 || UNITY_2021_2_OR_NEWER) && (!(ENABLE_MONO && UNITY_ANDROID) || (!UNITY_WEBGL || UNITY_EDITOR)) + if (decompressorInputStream == null) + decompressorInputStream = new BufferPoolMemoryStream(count); + + if (data != null) + decompressorInputStream.Write(data, offset, count); + + if (!forceDecompress && decompressorInputStream.Length < MinLengthToDecompress) + return new DecompressedData(null, 0); + + decompressorInputStream.Position = 0; + + if (decompressorStream == null) + { + decompressorStream = new System.IO.Compression.BrotliStream(decompressorInputStream, + System.IO.Compression.CompressionMode.Decompress, + true); + } + + if (decompressorOutputStream == null) + decompressorOutputStream = new BufferPoolMemoryStream(); + decompressorOutputStream.SetLength(0); + + byte[] copyBuffer = BufferPool.Get(1024, true); + + int readCount; + int sumReadCount = 0; + while ((readCount = decompressorStream.Read(copyBuffer, 0, copyBuffer.Length)) != 0) + { + decompressorOutputStream.Write(copyBuffer, 0, readCount); + sumReadCount += readCount; + } + + BufferPool.Release(copyBuffer); + + // If no read is done (returned with any data) don't zero out the input stream, as it would delete any not yet used data. + if (sumReadCount > 0) + decompressorStream.SetLength(0); + + byte[] result = decompressorOutputStream.ToArray(dataCanBeLarger); + + return new DecompressedData(result, dataCanBeLarger ? (int)decompressorOutputStream.Length : result.Length); +#else + return default(DecompressedData); +#endif + } + + public void Dispose() + { +#if (NET_STANDARD_2_1 || UNITY_2021_2_OR_NEWER) && (!(ENABLE_MONO && UNITY_ANDROID) || (!UNITY_WEBGL || UNITY_EDITOR)) + this.decompressorStream?.Dispose(); + this.decompressorStream = null; +#endif + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/BrotliDecompressor.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/BrotliDecompressor.cs.meta new file mode 100644 index 000000000..73cb5c48c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/BrotliDecompressor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 55a5678ddf697524c8b337e0d3b5cc02 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/CRC32.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/CRC32.cs new file mode 100644 index 000000000..a7065d7e7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/CRC32.cs @@ -0,0 +1,473 @@ +// CRC32.cs +// ------------------------------------------------------------------ +// +// Copyright (c) 2011 Dino Chiesa. +// All rights reserved. +// +// This code module is part of DotNetZip, a zipfile class library. +// +// ------------------------------------------------------------------ +// +// This code is licensed under the Microsoft Public License. +// See the file License.txt for the license details. +// More info on: http://dotnetzip.codeplex.com +// +// ------------------------------------------------------------------ +// +// Last Saved: <2011-August-02 18:25:54> +// +// ------------------------------------------------------------------ +// +// This module defines the CRC32 class, which can do the CRC32 algorithm, using +// arbitrary starting polynomials, and bit reversal. The bit reversal is what +// distinguishes this CRC-32 used in BZip2 from the CRC-32 that is used in PKZIP +// files, or GZIP files. This class does both. +// +// ------------------------------------------------------------------ + + +using System; +using Interop = System.Runtime.InteropServices; + +namespace BestHTTP.Decompression.Crc +{ + /// + /// Computes a CRC-32. The CRC-32 algorithm is parameterized - you + /// can set the polynomial and enable or disable bit + /// reversal. This can be used for GZIP, BZip2, or ZIP. + /// + /// + /// This type is used internally by DotNetZip; it is generally not used + /// directly by applications wishing to create, read, or manipulate zip + /// archive files. + /// + + internal class CRC32 + { + /// + /// Indicates the total number of bytes applied to the CRC. + /// + public Int64 TotalBytesRead + { + get + { + return _TotalBytesRead; + } + } + + /// + /// Indicates the current CRC for all blocks slurped in. + /// + public Int32 Crc32Result + { + get + { + return unchecked((Int32)(~_register)); + } + } + + /// + /// Returns the CRC32 for the specified stream. + /// + /// The stream over which to calculate the CRC32 + /// the CRC32 calculation + public Int32 GetCrc32(System.IO.Stream input) + { + return GetCrc32AndCopy(input, null); + } + + /// + /// Returns the CRC32 for the specified stream, and writes the input into the + /// output stream. + /// + /// The stream over which to calculate the CRC32 + /// The stream into which to deflate the input + /// the CRC32 calculation + public Int32 GetCrc32AndCopy(System.IO.Stream input, System.IO.Stream output) + { + if (input == null) + throw new Exception("The input stream must not be null."); + + unchecked + { + byte[] buffer = new byte[BUFFER_SIZE]; + int readSize = BUFFER_SIZE; + + _TotalBytesRead = 0; + int count = input.Read(buffer, 0, readSize); + if (output != null) output.Write(buffer, 0, count); + _TotalBytesRead += count; + while (count > 0) + { + SlurpBlock(buffer, 0, count); + count = input.Read(buffer, 0, readSize); + if (output != null) output.Write(buffer, 0, count); + _TotalBytesRead += count; + } + + return (Int32)(~_register); + } + } + + + /// + /// Get the CRC32 for the given (word,byte) combo. This is a + /// computation defined by PKzip for PKZIP 2.0 (weak) encryption. + /// + /// The word to start with. + /// The byte to combine it with. + /// The CRC-ized result. + public Int32 ComputeCrc32(Int32 W, byte B) + { + return _InternalComputeCrc32((UInt32)W, B); + } + + internal Int32 _InternalComputeCrc32(UInt32 W, byte B) + { + return (Int32)(crc32Table[(W ^ B) & 0xFF] ^ (W >> 8)); + } + + + /// + /// Update the value for the running CRC32 using the given block of bytes. + /// This is useful when using the CRC32() class in a Stream. + /// + /// block of bytes to slurp + /// starting point in the block + /// how many bytes within the block to slurp + public void SlurpBlock(byte[] block, int offset, int count) + { + if (block == null) + throw new Exception("The data buffer must not be null."); + + // bzip algorithm + for (int i = 0; i < count; i++) + { + int x = offset + i; + byte b = block[x]; + if (this.reverseBits) + { + UInt32 temp = (_register >> 24) ^ b; + _register = (_register << 8) ^ crc32Table[temp]; + } + else + { + UInt32 temp = (_register & 0x000000FF) ^ b; + _register = (_register >> 8) ^ crc32Table[temp]; + } + } + _TotalBytesRead += count; + } + + + /// + /// Process one byte in the CRC. + /// + /// the byte to include into the CRC . + public void UpdateCRC(byte b) + { + if (this.reverseBits) + { + UInt32 temp = (_register >> 24) ^ b; + _register = (_register << 8) ^ crc32Table[temp]; + } + else + { + UInt32 temp = (_register & 0x000000FF) ^ b; + _register = (_register >> 8) ^ crc32Table[temp]; + } + } + + /// + /// Process a run of N identical bytes into the CRC. + /// + /// + /// + /// This method serves as an optimization for updating the CRC when a + /// run of identical bytes is found. Rather than passing in a buffer of + /// length n, containing all identical bytes b, this method accepts the + /// byte value and the length of the (virtual) buffer - the length of + /// the run. + /// + /// + /// the byte to include into the CRC. + /// the number of times that byte should be repeated. + public void UpdateCRC(byte b, int n) + { + while (n-- > 0) + { + if (this.reverseBits) + { + uint temp = (_register >> 24) ^ b; + _register = (_register << 8) ^ crc32Table[(temp >= 0) + ? temp + : (temp + 256)]; + } + else + { + UInt32 temp = (_register & 0x000000FF) ^ b; + _register = (_register >> 8) ^ crc32Table[(temp >= 0) + ? temp + : (temp + 256)]; + + } + } + } + + + + private static uint ReverseBits(uint data) + { + unchecked + { + uint ret = data; + ret = (ret & 0x55555555) << 1 | (ret >> 1) & 0x55555555; + ret = (ret & 0x33333333) << 2 | (ret >> 2) & 0x33333333; + ret = (ret & 0x0F0F0F0F) << 4 | (ret >> 4) & 0x0F0F0F0F; + ret = (ret << 24) | ((ret & 0xFF00) << 8) | ((ret >> 8) & 0xFF00) | (ret >> 24); + return ret; + } + } + + private static byte ReverseBits(byte data) + { + unchecked + { + uint u = (uint)data * 0x00020202; + uint m = 0x01044010; + uint s = u & m; + uint t = (u << 2) & (m << 1); + return (byte)((0x01001001 * (s + t)) >> 24); + } + } + + + + private void GenerateLookupTable() + { + crc32Table = new UInt32[256]; + unchecked + { + UInt32 dwCrc; + byte i = 0; + do + { + dwCrc = i; + for (byte j = 8; j > 0; j--) + { + if ((dwCrc & 1) == 1) + { + dwCrc = (dwCrc >> 1) ^ dwPolynomial; + } + else + { + dwCrc >>= 1; + } + } + if (reverseBits) + { + crc32Table[ReverseBits(i)] = ReverseBits(dwCrc); + } + else + { + crc32Table[i] = dwCrc; + } + i++; + } while (i!=0); + } + +#if VERBOSE + Console.WriteLine(); + Console.WriteLine("private static readonly UInt32[] crc32Table = {"); + for (int i = 0; i < crc32Table.Length; i+=4) + { + Console.Write(" "); + for (int j=0; j < 4; j++) + { + Console.Write(" 0x{0:X8}U,", crc32Table[i+j]); + } + Console.WriteLine(); + } + Console.WriteLine("};"); + Console.WriteLine(); +#endif + } + + + private uint gf2_matrix_times(uint[] matrix, uint vec) + { + uint sum = 0; + int i=0; + while (vec != 0) + { + if ((vec & 0x01)== 0x01) + sum ^= matrix[i]; + vec >>= 1; + i++; + } + return sum; + } + + private void gf2_matrix_square(uint[] square, uint[] mat) + { + for (int i = 0; i < 32; i++) + square[i] = gf2_matrix_times(mat, mat[i]); + } + + + + /// + /// Combines the given CRC32 value with the current running total. + /// + /// + /// This is useful when using a divide-and-conquer approach to + /// calculating a CRC. Multiple threads can each calculate a + /// CRC32 on a segment of the data, and then combine the + /// individual CRC32 values at the end. + /// + /// the crc value to be combined with this one + /// the length of data the CRC value was calculated on + public void Combine(int crc, int length) + { + uint[] even = new uint[32]; // even-power-of-two zeros operator + uint[] odd = new uint[32]; // odd-power-of-two zeros operator + + if (length == 0) + return; + + uint crc1= ~_register; + uint crc2= (uint) crc; + + // put operator for one zero bit in odd + odd[0] = this.dwPolynomial; // the CRC-32 polynomial + uint row = 1; + for (int i = 1; i < 32; i++) + { + odd[i] = row; + row <<= 1; + } + + // put operator for two zero bits in even + gf2_matrix_square(even, odd); + + // put operator for four zero bits in odd + gf2_matrix_square(odd, even); + + uint len2 = (uint) length; + + // apply len2 zeros to crc1 (first square will put the operator for one + // zero byte, eight zero bits, in even) + do { + // apply zeros operator for this bit of len2 + gf2_matrix_square(even, odd); + + if ((len2 & 1)== 1) + crc1 = gf2_matrix_times(even, crc1); + len2 >>= 1; + + if (len2 == 0) + break; + + // another iteration of the loop with odd and even swapped + gf2_matrix_square(odd, even); + if ((len2 & 1)==1) + crc1 = gf2_matrix_times(odd, crc1); + len2 >>= 1; + + + } while (len2 != 0); + + crc1 ^= crc2; + + _register= ~crc1; + + //return (int) crc1; + return; + } + + + /// + /// Create an instance of the CRC32 class using the default settings: no + /// bit reversal, and a polynomial of 0xEDB88320. + /// + public CRC32() : this(false) + { + } + + /// + /// Create an instance of the CRC32 class, specifying whether to reverse + /// data bits or not. + /// + /// + /// specify true if the instance should reverse data bits. + /// + /// + /// + /// In the CRC-32 used by BZip2, the bits are reversed. Therefore if you + /// want a CRC32 with compatibility with BZip2, you should pass true + /// here. In the CRC-32 used by GZIP and PKZIP, the bits are not + /// reversed; Therefore if you want a CRC32 with compatibility with + /// those, you should pass false. + /// + /// + public CRC32(bool reverseBits) : + this( unchecked((int)0xEDB88320), reverseBits) + { + } + + + /// + /// Create an instance of the CRC32 class, specifying the polynomial and + /// whether to reverse data bits or not. + /// + /// + /// The polynomial to use for the CRC, expressed in the reversed (LSB) + /// format: the highest ordered bit in the polynomial value is the + /// coefficient of the 0th power; the second-highest order bit is the + /// coefficient of the 1 power, and so on. Expressed this way, the + /// polynomial for the CRC-32C used in IEEE 802.3, is 0xEDB88320. + /// + /// + /// specify true if the instance should reverse data bits. + /// + /// + /// + /// + /// In the CRC-32 used by BZip2, the bits are reversed. Therefore if you + /// want a CRC32 with compatibility with BZip2, you should pass true + /// here for the reverseBits parameter. In the CRC-32 used by + /// GZIP and PKZIP, the bits are not reversed; Therefore if you want a + /// CRC32 with compatibility with those, you should pass false for the + /// reverseBits parameter. + /// + /// + public CRC32(int polynomial, bool reverseBits) + { + this.reverseBits = reverseBits; + this.dwPolynomial = (uint) polynomial; + this.GenerateLookupTable(); + } + + /// + /// Reset the CRC-32 class - clear the CRC "remainder register." + /// + /// + /// + /// Use this when employing a single instance of this class to compute + /// multiple, distinct CRCs on multiple, distinct data blocks. + /// + /// + public void Reset() + { + _register = 0xFFFFFFFFU; + } + + // private member vars + private UInt32 dwPolynomial; + private Int64 _TotalBytesRead; + private bool reverseBits; + private UInt32[] crc32Table; + private const int BUFFER_SIZE = 8192; + private UInt32 _register = 0xFFFFFFFFU; + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/CRC32.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/CRC32.cs.meta new file mode 100644 index 000000000..312842086 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/CRC32.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 16fc99dd9503b7046bed4bfdbbfec3c0 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/Deflate.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/Deflate.cs new file mode 100644 index 000000000..6260b2e04 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/Deflate.cs @@ -0,0 +1,1884 @@ +// Deflate.cs +// ------------------------------------------------------------------ +// +// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation. +// All rights reserved. +// +// This code module is part of DotNetZip, a zipfile class library. +// +// ------------------------------------------------------------------ +// +// This code is licensed under the Microsoft Public License. +// See the file License.txt for the license details. +// More info on: http://dotnetzip.codeplex.com +// +// ------------------------------------------------------------------ +// +// last saved (in emacs): +// Time-stamp: <2011-August-03 19:52:15> +// +// ------------------------------------------------------------------ +// +// This module defines logic for handling the Deflate or compression. +// +// This code is based on multiple sources: +// - the original zlib v1.2.3 source, which is Copyright (C) 1995-2005 Jean-loup Gailly. +// - the original jzlib, which is Copyright (c) 2000-2003 ymnk, JCraft,Inc. +// +// However, this code is significantly different from both. +// The object model is not the same, and many of the behaviors are different. +// +// In keeping with the license for these other works, the copyrights for +// jzlib and zlib are here. +// +// ----------------------------------------------------------------------- +// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. 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. +// +// 3. The names of the authors may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT, +// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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. +// +// ----------------------------------------------------------------------- +// +// This program is based on zlib-1.1.3; credit to authors +// Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) +// and contributors of zlib. +// +// ----------------------------------------------------------------------- + + +using BestHTTP.PlatformSupport.Memory; +using System; + +#pragma warning disable 0675 + +namespace BestHTTP.Decompression.Zlib +{ + + internal enum BlockState + { + NeedMore = 0, // block not completed, need more input or more output + BlockDone, // block flush performed + FinishStarted, // finish started, need only more output at next deflate + FinishDone // finish done, accept no more input or output + } + + internal enum DeflateFlavor + { + Store, + Fast, + Slow + } + + internal sealed class DeflateManager + { + private static readonly int MEM_LEVEL_MAX = 9; + private static readonly int MEM_LEVEL_DEFAULT = 8; + + internal delegate BlockState CompressFunc(FlushType flush); + + internal class Config + { + // Use a faster search when the previous match is longer than this + internal int GoodLength; // reduce lazy search above this match length + + // Attempt to find a better match only when the current match is + // strictly smaller than this value. This mechanism is used only for + // compression levels >= 4. For levels 1,2,3: MaxLazy is actually + // MaxInsertLength. (See DeflateFast) + + internal int MaxLazy; // do not perform lazy search above this match length + + internal int NiceLength; // quit search above this match length + + // To speed up deflation, hash chains are never searched beyond this + // length. A higher limit improves compression ratio but degrades the speed. + + internal int MaxChainLength; + + internal DeflateFlavor Flavor; + + private Config(int goodLength, int maxLazy, int niceLength, int maxChainLength, DeflateFlavor flavor) + { + this.GoodLength = goodLength; + this.MaxLazy = maxLazy; + this.NiceLength = niceLength; + this.MaxChainLength = maxChainLength; + this.Flavor = flavor; + } + + public static Config Lookup(CompressionLevel level) + { + return Table[(int)level]; + } + + + static Config() + { + Table = new Config[] { + new Config(0, 0, 0, 0, DeflateFlavor.Store), + new Config(4, 4, 8, 4, DeflateFlavor.Fast), + new Config(4, 5, 16, 8, DeflateFlavor.Fast), + new Config(4, 6, 32, 32, DeflateFlavor.Fast), + + new Config(4, 4, 16, 16, DeflateFlavor.Slow), + new Config(8, 16, 32, 32, DeflateFlavor.Slow), + new Config(8, 16, 128, 128, DeflateFlavor.Slow), + new Config(8, 32, 128, 256, DeflateFlavor.Slow), + new Config(32, 128, 258, 1024, DeflateFlavor.Slow), + new Config(32, 258, 258, 4096, DeflateFlavor.Slow), + }; + } + + private static readonly Config[] Table; + } + + + private CompressFunc DeflateFunction; + + private static readonly System.String[] _ErrorMessage = new System.String[] + { + "need dictionary", + "stream end", + "", + "file error", + "stream error", + "data error", + "insufficient memory", + "buffer error", + "incompatible version", + "" + }; + + // preset dictionary flag in zlib header + private static readonly int PRESET_DICT = 0x20; + + private static readonly int INIT_STATE = 42; + private static readonly int BUSY_STATE = 113; + private static readonly int FINISH_STATE = 666; + + // The deflate compression method + private static readonly int Z_DEFLATED = 8; + + private static readonly int STORED_BLOCK = 0; + private static readonly int STATIC_TREES = 1; + private static readonly int DYN_TREES = 2; + + // The three kinds of block type + private static readonly int Z_BINARY = 0; + private static readonly int Z_ASCII = 1; + private static readonly int Z_UNKNOWN = 2; + + private static readonly int Buf_size = 8 * 2; + + private static readonly int MIN_MATCH = 3; + private static readonly int MAX_MATCH = 258; + + private static readonly int MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1); + + private static readonly int HEAP_SIZE = (2 * InternalConstants.L_CODES + 1); + + private static readonly int END_BLOCK = 256; + + internal ZlibCodec _codec; // the zlib encoder/decoder + internal int status; // as the name implies + internal byte[] pending; // output still pending - waiting to be compressed + internal int nextPending; // index of next pending byte to output to the stream + internal int pendingCount; // number of bytes in the pending buffer + + internal sbyte data_type; // UNKNOWN, BINARY or ASCII + internal int last_flush; // value of flush param for previous deflate call + + internal int w_size; // LZ77 window size (32K by default) + internal int w_bits; // log2(w_size) (8..16) + internal int w_mask; // w_size - 1 + + //internal byte[] dictionary; + internal byte[] window; + + // Sliding window. Input bytes are read into the second half of the window, + // and move to the first half later to keep a dictionary of at least wSize + // bytes. With this organization, matches are limited to a distance of + // wSize-MAX_MATCH bytes, but this ensures that IO is always + // performed with a length multiple of the block size. + // + // To do: use the user input buffer as sliding window. + + internal int window_size; + // Actual size of window: 2*wSize, except when the user input buffer + // is directly used as sliding window. + + internal short[] prev; + // Link to older string with same hash index. To limit the size of this + // array to 64K, this link is maintained only for the last 32K strings. + // An index in this array is thus a window index modulo 32K. + + internal short[] head; // Heads of the hash chains or NIL. + + internal int ins_h; // hash index of string to be inserted + internal int hash_size; // number of elements in hash table + internal int hash_bits; // log2(hash_size) + internal int hash_mask; // hash_size-1 + + // Number of bits by which ins_h must be shifted at each input + // step. It must be such that after MIN_MATCH steps, the oldest + // byte no longer takes part in the hash key, that is: + // hash_shift * MIN_MATCH >= hash_bits + internal int hash_shift; + + // Window position at the beginning of the current output block. Gets + // negative when the window is moved backwards. + + internal int block_start; + + Config config; + internal int match_length; // length of best match + internal int prev_match; // previous match + internal int match_available; // set if previous match exists + internal int strstart; // start of string to insert into.....???? + internal int match_start; // start of matching string + internal int lookahead; // number of valid bytes ahead in window + + // Length of the best match at previous step. Matches not greater than this + // are discarded. This is used in the lazy match evaluation. + internal int prev_length; + + // Insert new strings in the hash table only if the match length is not + // greater than this length. This saves time but degrades compression. + // max_insert_length is used only for compression levels <= 3. + + internal CompressionLevel compressionLevel; // compression level (1..9) + internal CompressionStrategy compressionStrategy; // favor or force Huffman coding + + + internal short[] dyn_ltree; // literal and length tree + internal short[] dyn_dtree; // distance tree + internal short[] bl_tree; // Huffman tree for bit lengths + + internal ZTree treeLiterals = new ZTree(); // desc for literal tree + internal ZTree treeDistances = new ZTree(); // desc for distance tree + internal ZTree treeBitLengths = new ZTree(); // desc for bit length tree + + // number of codes at each bit length for an optimal tree + internal short[] bl_count = new short[InternalConstants.MAX_BITS + 1]; + + // heap used to build the Huffman trees + internal int[] heap = new int[2 * InternalConstants.L_CODES + 1]; + + internal int heap_len; // number of elements in the heap + internal int heap_max; // element of largest frequency + + // The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + // The same heap array is used to build all trees. + + // Depth of each subtree used as tie breaker for trees of equal frequency + internal sbyte[] depth = new sbyte[2 * InternalConstants.L_CODES + 1]; + + internal int _lengthOffset; // index for literals or lengths + + + // Size of match buffer for literals/lengths. There are 4 reasons for + // limiting lit_bufsize to 64K: + // - frequencies can be kept in 16 bit counters + // - if compression is not successful for the first block, all input + // data is still in the window so we can still emit a stored block even + // when input comes from standard input. (This can also be done for + // all blocks if lit_bufsize is not greater than 32K.) + // - if compression is not successful for a file smaller than 64K, we can + // even emit a stored file instead of a stored block (saving 5 bytes). + // This is applicable only for zip (not gzip or zlib). + // - creating new Huffman trees less frequently may not provide fast + // adaptation to changes in the input data statistics. (Take for + // example a binary file with poorly compressible code followed by + // a highly compressible string table.) Smaller buffer sizes give + // fast adaptation but have of course the overhead of transmitting + // trees more frequently. + + internal int lit_bufsize; + + internal int last_lit; // running index in l_buf + + // Buffer for distances. To simplify the code, d_buf and l_buf have + // the same number of elements. To use different lengths, an extra flag + // array would be necessary. + + internal int _distanceOffset; // index into pending; points to distance data?? + + internal int opt_len; // bit length of current block with optimal trees + internal int static_len; // bit length of current block with static trees + internal int matches; // number of string matches in current block + internal int last_eob_len; // bit length of EOB code for last block + + // Output buffer. bits are inserted starting at the bottom (least + // significant bits). + internal short bi_buf; + + // Number of valid bits in bi_buf. All bits above the last valid bit + // are always zero. + internal int bi_valid; + + + internal DeflateManager() + { + dyn_ltree = new short[HEAP_SIZE * 2]; + dyn_dtree = new short[(2 * InternalConstants.D_CODES + 1) * 2]; // distance tree + bl_tree = new short[(2 * InternalConstants.BL_CODES + 1) * 2]; // Huffman tree for bit lengths + } + + + // lm_init + private void _InitializeLazyMatch() + { + window_size = 2 * w_size; + + // clear the hash - workitem 9063 + Array.Clear(head, 0, hash_size); + //for (int i = 0; i < hash_size; i++) head[i] = 0; + + config = Config.Lookup(compressionLevel); + SetDeflater(); + + strstart = 0; + block_start = 0; + lookahead = 0; + match_length = prev_length = MIN_MATCH - 1; + match_available = 0; + ins_h = 0; + } + + // Initialize the tree data structures for a new zlib stream. + private void _InitializeTreeData() + { + treeLiterals.dyn_tree = dyn_ltree; + treeLiterals.staticTree = StaticTree.Literals; + + treeDistances.dyn_tree = dyn_dtree; + treeDistances.staticTree = StaticTree.Distances; + + treeBitLengths.dyn_tree = bl_tree; + treeBitLengths.staticTree = StaticTree.BitLengths; + + bi_buf = 0; + bi_valid = 0; + last_eob_len = 8; // enough lookahead for inflate + + // Initialize the first block of the first file: + _InitializeBlocks(); + } + + internal void _InitializeBlocks() + { + // Initialize the trees. + for (int i = 0; i < InternalConstants.L_CODES; i++) + dyn_ltree[i * 2] = 0; + for (int i = 0; i < InternalConstants.D_CODES; i++) + dyn_dtree[i * 2] = 0; + for (int i = 0; i < InternalConstants.BL_CODES; i++) + bl_tree[i * 2] = 0; + + dyn_ltree[END_BLOCK * 2] = 1; + opt_len = static_len = 0; + last_lit = matches = 0; + } + + // Restore the heap property by moving down the tree starting at node k, + // exchanging a node with the smallest of its two sons if necessary, stopping + // when the heap property is re-established (each father smaller than its + // two sons). + internal void pqdownheap(short[] tree, int k) + { + int v = heap[k]; + int j = k << 1; // left son of k + while (j <= heap_len) + { + // Set j to the smallest of the two sons: + if (j < heap_len && _IsSmaller(tree, heap[j + 1], heap[j], depth)) + { + j++; + } + // Exit if v is smaller than both sons + if (_IsSmaller(tree, v, heap[j], depth)) + break; + + // Exchange v with the smallest son + heap[k] = heap[j]; k = j; + // And continue down the tree, setting j to the left son of k + j <<= 1; + } + heap[k] = v; + } + + internal static bool _IsSmaller(short[] tree, int n, int m, sbyte[] depth) + { + short tn2 = tree[n * 2]; + short tm2 = tree[m * 2]; + return (tn2 < tm2 || (tn2 == tm2 && depth[n] <= depth[m])); + } + + + // Scan a literal or distance tree to determine the frequencies of the codes + // in the bit length tree. + internal void scan_tree(short[] tree, int max_code) + { + int n; // iterates over all tree elements + int prevlen = -1; // last emitted length + int curlen; // length of current code + int nextlen = (int)tree[0 * 2 + 1]; // length of next code + int count = 0; // repeat count of the current code + int max_count = 7; // max repeat count + int min_count = 4; // min repeat count + + if (nextlen == 0) + { + max_count = 138; min_count = 3; + } + tree[(max_code + 1) * 2 + 1] = (short)0x7fff; // guard //?? + + for (n = 0; n <= max_code; n++) + { + curlen = nextlen; nextlen = (int)tree[(n + 1) * 2 + 1]; + if (++count < max_count && curlen == nextlen) + { + continue; + } + else if (count < min_count) + { + bl_tree[curlen * 2] = (short)(bl_tree[curlen * 2] + count); + } + else if (curlen != 0) + { + if (curlen != prevlen) + bl_tree[curlen * 2]++; + bl_tree[InternalConstants.REP_3_6 * 2]++; + } + else if (count <= 10) + { + bl_tree[InternalConstants.REPZ_3_10 * 2]++; + } + else + { + bl_tree[InternalConstants.REPZ_11_138 * 2]++; + } + count = 0; prevlen = curlen; + if (nextlen == 0) + { + max_count = 138; min_count = 3; + } + else if (curlen == nextlen) + { + max_count = 6; min_count = 3; + } + else + { + max_count = 7; min_count = 4; + } + } + } + + // Construct the Huffman tree for the bit lengths and return the index in + // bl_order of the last bit length code to send. + internal int build_bl_tree() + { + int max_blindex; // index of last bit length code of non zero freq + + // Determine the bit length frequencies for literal and distance trees + scan_tree(dyn_ltree, treeLiterals.max_code); + scan_tree(dyn_dtree, treeDistances.max_code); + + // Build the bit length tree: + treeBitLengths.build_tree(this); + // opt_len now includes the length of the tree representations, except + // the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + + // Determine the number of bit length codes to send. The pkzip format + // requires that at least 4 bit length codes be sent. (appnote.txt says + // 3 but the actual value used is 4.) + for (max_blindex = InternalConstants.BL_CODES - 1; max_blindex >= 3; max_blindex--) + { + if (bl_tree[ZTree.bl_order[max_blindex] * 2 + 1] != 0) + break; + } + // Update opt_len to include the bit length tree and counts + opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; + + return max_blindex; + } + + + // Send the header for a block using dynamic Huffman trees: the counts, the + // lengths of the bit length codes, the literal tree and the distance tree. + // IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + internal void send_all_trees(int lcodes, int dcodes, int blcodes) + { + int rank; // index in bl_order + + send_bits(lcodes - 257, 5); // not +255 as stated in appnote.txt + send_bits(dcodes - 1, 5); + send_bits(blcodes - 4, 4); // not -3 as stated in appnote.txt + for (rank = 0; rank < blcodes; rank++) + { + send_bits(bl_tree[ZTree.bl_order[rank] * 2 + 1], 3); + } + send_tree(dyn_ltree, lcodes - 1); // literal tree + send_tree(dyn_dtree, dcodes - 1); // distance tree + } + + // Send a literal or distance tree in compressed form, using the codes in + // bl_tree. + internal void send_tree(short[] tree, int max_code) + { + int n; // iterates over all tree elements + int prevlen = -1; // last emitted length + int curlen; // length of current code + int nextlen = tree[0 * 2 + 1]; // length of next code + int count = 0; // repeat count of the current code + int max_count = 7; // max repeat count + int min_count = 4; // min repeat count + + if (nextlen == 0) + { + max_count = 138; min_count = 3; + } + + for (n = 0; n <= max_code; n++) + { + curlen = nextlen; nextlen = tree[(n + 1) * 2 + 1]; + if (++count < max_count && curlen == nextlen) + { + continue; + } + else if (count < min_count) + { + do + { + send_code(curlen, bl_tree); + } + while (--count != 0); + } + else if (curlen != 0) + { + if (curlen != prevlen) + { + send_code(curlen, bl_tree); count--; + } + send_code(InternalConstants.REP_3_6, bl_tree); + send_bits(count - 3, 2); + } + else if (count <= 10) + { + send_code(InternalConstants.REPZ_3_10, bl_tree); + send_bits(count - 3, 3); + } + else + { + send_code(InternalConstants.REPZ_11_138, bl_tree); + send_bits(count - 11, 7); + } + count = 0; prevlen = curlen; + if (nextlen == 0) + { + max_count = 138; min_count = 3; + } + else if (curlen == nextlen) + { + max_count = 6; min_count = 3; + } + else + { + max_count = 7; min_count = 4; + } + } + } + + // Output a block of bytes on the stream. + // IN assertion: there is enough room in pending_buf. + private void put_bytes(byte[] p, int start, int len) + { + Array.Copy(p, start, pending, pendingCount, len); + pendingCount += len; + } + +#if NOTNEEDED + private void put_byte(byte c) + { + pending[pendingCount++] = c; + } + internal void put_short(int b) + { + unchecked + { + pending[pendingCount++] = (byte)b; + pending[pendingCount++] = (byte)(b >> 8); + } + } + internal void putShortMSB(int b) + { + unchecked + { + pending[pendingCount++] = (byte)(b >> 8); + pending[pendingCount++] = (byte)b; + } + } +#endif + + internal void send_code(int c, short[] tree) + { + int c2 = c * 2; + send_bits((tree[c2] & 0xffff), (tree[c2 + 1] & 0xffff)); + } + + internal void send_bits(int value, int length) + { + int len = length; + unchecked + { + if (bi_valid > (int)Buf_size - len) + { + //int val = value; + // bi_buf |= (val << bi_valid); + + bi_buf |= (short)((value << bi_valid) & 0xffff); + //put_short(bi_buf); + pending[pendingCount++] = (byte)bi_buf; + pending[pendingCount++] = (byte)(bi_buf >> 8); + + + bi_buf = (short)((uint)value >> (Buf_size - bi_valid)); + bi_valid += len - Buf_size; + } + else + { + // bi_buf |= (value) << bi_valid; + bi_buf |= (short)((value << bi_valid) & 0xffff); + bi_valid += len; + } + } + } + + // Send one empty static block to give enough lookahead for inflate. + // This takes 10 bits, of which 7 may remain in the bit buffer. + // The current inflate code requires 9 bits of lookahead. If the + // last two codes for the previous block (real code plus EOB) were coded + // on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode + // the last real code. In this case we send two empty static blocks instead + // of one. (There are no problems if the previous block is stored or fixed.) + // To simplify the code, we assume the worst case of last real code encoded + // on one bit only. + internal void _tr_align() + { + send_bits(STATIC_TREES << 1, 3); + send_code(END_BLOCK, StaticTree.lengthAndLiteralsTreeCodes); + + bi_flush(); + + // Of the 10 bits for the empty block, we have already sent + // (10 - bi_valid) bits. The lookahead for the last real code (before + // the EOB of the previous block) was thus at least one plus the length + // of the EOB plus what we have just sent of the empty static block. + if (1 + last_eob_len + 10 - bi_valid < 9) + { + send_bits(STATIC_TREES << 1, 3); + send_code(END_BLOCK, StaticTree.lengthAndLiteralsTreeCodes); + bi_flush(); + } + last_eob_len = 7; + } + + + // Save the match info and tally the frequency counts. Return true if + // the current block must be flushed. + internal bool _tr_tally(int dist, int lc) + { + pending[_distanceOffset + last_lit * 2] = unchecked((byte) ( (uint)dist >> 8 ) ); + pending[_distanceOffset + last_lit * 2 + 1] = unchecked((byte)dist); + pending[_lengthOffset + last_lit] = unchecked((byte)lc); + last_lit++; + + if (dist == 0) + { + // lc is the unmatched char + dyn_ltree[lc * 2]++; + } + else + { + matches++; + // Here, lc is the match length - MIN_MATCH + dist--; // dist = match distance - 1 + dyn_ltree[(ZTree.LengthCode[lc] + InternalConstants.LITERALS + 1) * 2]++; + dyn_dtree[ZTree.DistanceCode(dist) * 2]++; + } + + if ((last_lit & 0x1fff) == 0 && (int)compressionLevel > 2) + { + // Compute an upper bound for the compressed length + int out_length = last_lit << 3; + int in_length = strstart - block_start; + int dcode; + for (dcode = 0; dcode < InternalConstants.D_CODES; dcode++) + { + out_length = (int)(out_length + (int)dyn_dtree[dcode * 2] * (5L + ZTree.ExtraDistanceBits[dcode])); + } + out_length >>= 3; + if ((matches < (last_lit / 2)) && out_length < in_length / 2) + return true; + } + + return (last_lit == lit_bufsize - 1) || (last_lit == lit_bufsize); + // dinoch - wraparound? + // We avoid equality with lit_bufsize because of wraparound at 64K + // on 16 bit machines and because stored blocks are restricted to + // 64K-1 bytes. + } + + + + // Send the block data compressed using the given Huffman trees + internal void send_compressed_block(short[] ltree, short[] dtree) + { + int distance; // distance of matched string + int lc; // match length or unmatched char (if dist == 0) + int lx = 0; // running index in l_buf + int code; // the code to send + int extra; // number of extra bits to send + + if (last_lit != 0) + { + do + { + int ix = _distanceOffset + lx * 2; + distance = ((pending[ix] << 8) & 0xff00) | + (pending[ix + 1] & 0xff); + lc = (pending[_lengthOffset + lx]) & 0xff; + lx++; + + if (distance == 0) + { + send_code(lc, ltree); // send a literal byte + } + else + { + // literal or match pair + // Here, lc is the match length - MIN_MATCH + code = ZTree.LengthCode[lc]; + + // send the length code + send_code(code + InternalConstants.LITERALS + 1, ltree); + extra = ZTree.ExtraLengthBits[code]; + if (extra != 0) + { + // send the extra length bits + lc -= ZTree.LengthBase[code]; + send_bits(lc, extra); + } + distance--; // dist is now the match distance - 1 + code = ZTree.DistanceCode(distance); + + // send the distance code + send_code(code, dtree); + + extra = ZTree.ExtraDistanceBits[code]; + if (extra != 0) + { + // send the extra distance bits + distance -= ZTree.DistanceBase[code]; + send_bits(distance, extra); + } + } + + // Check that the overlay between pending and d_buf+l_buf is ok: + } + while (lx < last_lit); + } + + send_code(END_BLOCK, ltree); + last_eob_len = ltree[END_BLOCK * 2 + 1]; + } + + + + // Set the data type to ASCII or BINARY, using a crude approximation: + // binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise. + // IN assertion: the fields freq of dyn_ltree are set and the total of all + // frequencies does not exceed 64K (to fit in an int on 16 bit machines). + internal void set_data_type() + { + int n = 0; + int ascii_freq = 0; + int bin_freq = 0; + while (n < 7) + { + bin_freq += dyn_ltree[n * 2]; n++; + } + while (n < 128) + { + ascii_freq += dyn_ltree[n * 2]; n++; + } + while (n < InternalConstants.LITERALS) + { + bin_freq += dyn_ltree[n * 2]; n++; + } + data_type = (sbyte)(bin_freq > (ascii_freq >> 2) ? Z_BINARY : Z_ASCII); + } + + + + // Flush the bit buffer, keeping at most 7 bits in it. + internal void bi_flush() + { + if (bi_valid == 16) + { + pending[pendingCount++] = (byte)bi_buf; + pending[pendingCount++] = (byte)(bi_buf >> 8); + bi_buf = 0; + bi_valid = 0; + } + else if (bi_valid >= 8) + { + //put_byte((byte)bi_buf); + pending[pendingCount++] = (byte)bi_buf; + bi_buf >>= 8; + bi_valid -= 8; + } + } + + // Flush the bit buffer and align the output on a byte boundary + internal void bi_windup() + { + if (bi_valid > 8) + { + pending[pendingCount++] = (byte)bi_buf; + pending[pendingCount++] = (byte)(bi_buf >> 8); + } + else if (bi_valid > 0) + { + //put_byte((byte)bi_buf); + pending[pendingCount++] = (byte)bi_buf; + } + bi_buf = 0; + bi_valid = 0; + } + + // Copy a stored block, storing first the length and its + // one's complement if requested. + internal void copy_block(int buf, int len, bool header) + { + bi_windup(); // align on byte boundary + last_eob_len = 8; // enough lookahead for inflate + + if (header) + unchecked + { + //put_short((short)len); + pending[pendingCount++] = (byte)len; + pending[pendingCount++] = (byte)(len >> 8); + //put_short((short)~len); + pending[pendingCount++] = (byte)~len; + pending[pendingCount++] = (byte)(~len >> 8); + } + + put_bytes(window, buf, len); + } + + internal void flush_block_only(bool eof) + { + _tr_flush_block(block_start >= 0 ? block_start : -1, strstart - block_start, eof); + block_start = strstart; + _codec.flush_pending(); + } + + // Copy without compression as much as possible from the input stream, return + // the current block state. + // This function does not insert new strings in the dictionary since + // uncompressible data is probably not useful. This function is used + // only for the level=0 compression option. + // NOTE: this function should be optimized to avoid extra copying from + // window to pending_buf. + internal BlockState DeflateNone(FlushType flush) + { + // Stored blocks are limited to 0xffff bytes, pending is limited + // to pending_buf_size, and each stored block has a 5 byte header: + + int max_block_size = 0xffff; + int max_start; + + if (max_block_size > pending.Length - 5) + { + max_block_size = pending.Length - 5; + } + + // Copy as much as possible from input to output: + while (true) + { + // Fill the window as much as possible: + if (lookahead <= 1) + { + _fillWindow(); + if (lookahead == 0 && flush == FlushType.None) + return BlockState.NeedMore; + if (lookahead == 0) + break; // flush the current block + } + + strstart += lookahead; + lookahead = 0; + + // Emit a stored block if pending will be full: + max_start = block_start + max_block_size; + if (strstart == 0 || strstart >= max_start) + { + // strstart == 0 is possible when wraparound on 16-bit machine + lookahead = (int)(strstart - max_start); + strstart = (int)max_start; + + flush_block_only(false); + if (_codec.AvailableBytesOut == 0) + return BlockState.NeedMore; + } + + // Flush if we may have to slide, otherwise block_start may become + // negative and the data will be gone: + if (strstart - block_start >= w_size - MIN_LOOKAHEAD) + { + flush_block_only(false); + if (_codec.AvailableBytesOut == 0) + return BlockState.NeedMore; + } + } + + flush_block_only(flush == FlushType.Finish); + if (_codec.AvailableBytesOut == 0) + return (flush == FlushType.Finish) ? BlockState.FinishStarted : BlockState.NeedMore; + + return flush == FlushType.Finish ? BlockState.FinishDone : BlockState.BlockDone; + } + + + // Send a stored block + internal void _tr_stored_block(int buf, int stored_len, bool eof) + { + send_bits((STORED_BLOCK << 1) + (eof ? 1 : 0), 3); // send block type + copy_block(buf, stored_len, true); // with header + } + + // Determine the best encoding for the current block: dynamic trees, static + // trees or store, and output the encoded block to the zip file. + internal void _tr_flush_block(int buf, int stored_len, bool eof) + { + int opt_lenb, static_lenb; // opt_len and static_len in bytes + int max_blindex = 0; // index of last bit length code of non zero freq + + // Build the Huffman trees unless a stored block is forced + if (compressionLevel > 0) + { + // Check if the file is ascii or binary + if (data_type == Z_UNKNOWN) + set_data_type(); + + // Construct the literal and distance trees + treeLiterals.build_tree(this); + + treeDistances.build_tree(this); + + // At this point, opt_len and static_len are the total bit lengths of + // the compressed block data, excluding the tree representations. + + // Build the bit length tree for the above two trees, and get the index + // in bl_order of the last bit length code to send. + max_blindex = build_bl_tree(); + + // Determine the best encoding. Compute first the block length in bytes + opt_lenb = (opt_len + 3 + 7) >> 3; + static_lenb = (static_len + 3 + 7) >> 3; + + if (static_lenb <= opt_lenb) + opt_lenb = static_lenb; + } + else + { + opt_lenb = static_lenb = stored_len + 5; // force a stored block + } + + if (stored_len + 4 <= opt_lenb && buf != -1) + { + // 4: two words for the lengths + // The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + // Otherwise we can't have processed more than WSIZE input bytes since + // the last block flush, because compression would have been + // successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + // transform a block into a stored block. + _tr_stored_block(buf, stored_len, eof); + } + else if (static_lenb == opt_lenb) + { + send_bits((STATIC_TREES << 1) + (eof ? 1 : 0), 3); + send_compressed_block(StaticTree.lengthAndLiteralsTreeCodes, StaticTree.distTreeCodes); + } + else + { + send_bits((DYN_TREES << 1) + (eof ? 1 : 0), 3); + send_all_trees(treeLiterals.max_code + 1, treeDistances.max_code + 1, max_blindex + 1); + send_compressed_block(dyn_ltree, dyn_dtree); + } + + // The above check is made mod 2^32, for files larger than 512 MB + // and uLong implemented on 32 bits. + + _InitializeBlocks(); + + if (eof) + { + bi_windup(); + } + } + + // Fill the window when the lookahead becomes insufficient. + // Updates strstart and lookahead. + // + // IN assertion: lookahead < MIN_LOOKAHEAD + // OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + // At least one byte has been read, or avail_in == 0; reads are + // performed for at least two bytes (required for the zip translate_eol + // option -- not supported here). + private void _fillWindow() + { + int n, m; + int p; + int more; // Amount of free space at the end of the window. + + do + { + more = (window_size - lookahead - strstart); + + // Deal with !@#$% 64K limit: + if (more == 0 && strstart == 0 && lookahead == 0) + { + more = w_size; + } + else if (more == -1) + { + // Very unlikely, but possible on 16 bit machine if strstart == 0 + // and lookahead == 1 (input done one byte at time) + more--; + + // If the window is almost full and there is insufficient lookahead, + // move the upper half to the lower one to make room in the upper half. + } + else if (strstart >= w_size + w_size - MIN_LOOKAHEAD) + { + Array.Copy(window, w_size, window, 0, w_size); + match_start -= w_size; + strstart -= w_size; // we now have strstart >= MAX_DIST + block_start -= w_size; + + // Slide the hash table (could be avoided with 32 bit values + // at the expense of memory usage). We slide even when level == 0 + // to keep the hash table consistent if we switch back to level > 0 + // later. (Using level 0 permanently is not an optimal usage of + // zlib, so we don't care about this pathological case.) + + n = hash_size; + p = n; + do + { + m = (head[--p] & 0xffff); + head[p] = (short)((m >= w_size) ? (m - w_size) : 0); + } + while (--n != 0); + + n = w_size; + p = n; + do + { + m = (prev[--p] & 0xffff); + prev[p] = (short)((m >= w_size) ? (m - w_size) : 0); + // If n is not on any hash chain, prev[n] is garbage but + // its value will never be used. + } + while (--n != 0); + more += w_size; + } + + if (_codec.AvailableBytesIn == 0) + return; + + // If there was no sliding: + // strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + // more == window_size - lookahead - strstart + // => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + // => more >= window_size - 2*WSIZE + 2 + // In the BIG_MEM or MMAP case (not yet supported), + // window_size == input_size + MIN_LOOKAHEAD && + // strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + // Otherwise, window_size == 2*WSIZE so more >= 2. + // If there was sliding, more >= WSIZE. So in all cases, more >= 2. + + n = _codec.read_buf(window, strstart + lookahead, more); + lookahead += n; + + // Initialize the hash value now that we have some input: + if (lookahead >= MIN_MATCH) + { + ins_h = window[strstart] & 0xff; + ins_h = (((ins_h) << hash_shift) ^ (window[strstart + 1] & 0xff)) & hash_mask; + } + // If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + // but this is not important since only literal bytes will be emitted. + } + while (lookahead < MIN_LOOKAHEAD && _codec.AvailableBytesIn != 0); + } + + // Compress as much as possible from the input stream, return the current + // block state. + // This function does not perform lazy evaluation of matches and inserts + // new strings in the dictionary only for unmatched strings or for short + // matches. It is used only for the fast compression options. + internal BlockState DeflateFast(FlushType flush) + { + // short hash_head = 0; // head of the hash chain + int hash_head = 0; // head of the hash chain + bool bflush; // set if current block must be flushed + + while (true) + { + // Make sure that we always have enough lookahead, except + // at the end of the input file. We need MAX_MATCH bytes + // for the next match, plus MIN_MATCH bytes to insert the + // string following the next match. + if (lookahead < MIN_LOOKAHEAD) + { + _fillWindow(); + if (lookahead < MIN_LOOKAHEAD && flush == FlushType.None) + { + return BlockState.NeedMore; + } + if (lookahead == 0) + break; // flush the current block + } + + // Insert the string window[strstart .. strstart+2] in the + // dictionary, and set hash_head to the head of the hash chain: + if (lookahead >= MIN_MATCH) + { + ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; + + // prev[strstart&w_mask]=hash_head=head[ins_h]; + hash_head = (head[ins_h] & 0xffff); + prev[strstart & w_mask] = head[ins_h]; + head[ins_h] = unchecked((short)strstart); + } + + // Find the longest match, discarding those <= prev_length. + // At this point we have always match_length < MIN_MATCH + + if (hash_head != 0L && ((strstart - hash_head) & 0xffff) <= w_size - MIN_LOOKAHEAD) + { + // To simplify the code, we prevent matches with the string + // of window index 0 (in particular we have to avoid a match + // of the string with itself at the start of the input file). + if (compressionStrategy != CompressionStrategy.HuffmanOnly) + { + match_length = longest_match(hash_head); + } + // longest_match() sets match_start + } + if (match_length >= MIN_MATCH) + { + // check_match(strstart, match_start, match_length); + + bflush = _tr_tally(strstart - match_start, match_length - MIN_MATCH); + + lookahead -= match_length; + + // Insert new strings in the hash table only if the match length + // is not too large. This saves time but degrades compression. + if (match_length <= config.MaxLazy && lookahead >= MIN_MATCH) + { + match_length--; // string at strstart already in hash table + do + { + strstart++; + + ins_h = ((ins_h << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; + // prev[strstart&w_mask]=hash_head=head[ins_h]; + hash_head = (head[ins_h] & 0xffff); + prev[strstart & w_mask] = head[ins_h]; + head[ins_h] = unchecked((short)strstart); + + // strstart never exceeds WSIZE-MAX_MATCH, so there are + // always MIN_MATCH bytes ahead. + } + while (--match_length != 0); + strstart++; + } + else + { + strstart += match_length; + match_length = 0; + ins_h = window[strstart] & 0xff; + + ins_h = (((ins_h) << hash_shift) ^ (window[strstart + 1] & 0xff)) & hash_mask; + // If lookahead < MIN_MATCH, ins_h is garbage, but it does not + // matter since it will be recomputed at next deflate call. + } + } + else + { + // No match, output a literal byte + + bflush = _tr_tally(0, window[strstart] & 0xff); + lookahead--; + strstart++; + } + if (bflush) + { + flush_block_only(false); + if (_codec.AvailableBytesOut == 0) + return BlockState.NeedMore; + } + } + + flush_block_only(flush == FlushType.Finish); + if (_codec.AvailableBytesOut == 0) + { + if (flush == FlushType.Finish) + return BlockState.FinishStarted; + else + return BlockState.NeedMore; + } + return flush == FlushType.Finish ? BlockState.FinishDone : BlockState.BlockDone; + } + + // Same as above, but achieves better compression. We use a lazy + // evaluation for matches: a match is finally adopted only if there is + // no better match at the next window position. + internal BlockState DeflateSlow(FlushType flush) + { + // short hash_head = 0; // head of hash chain + int hash_head = 0; // head of hash chain + bool bflush; // set if current block must be flushed + + // Process the input block. + while (true) + { + // Make sure that we always have enough lookahead, except + // at the end of the input file. We need MAX_MATCH bytes + // for the next match, plus MIN_MATCH bytes to insert the + // string following the next match. + + if (lookahead < MIN_LOOKAHEAD) + { + _fillWindow(); + if (lookahead < MIN_LOOKAHEAD && flush == FlushType.None) + return BlockState.NeedMore; + + if (lookahead == 0) + break; // flush the current block + } + + // Insert the string window[strstart .. strstart+2] in the + // dictionary, and set hash_head to the head of the hash chain: + + if (lookahead >= MIN_MATCH) + { + ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; + // prev[strstart&w_mask]=hash_head=head[ins_h]; + hash_head = (head[ins_h] & 0xffff); + prev[strstart & w_mask] = head[ins_h]; + head[ins_h] = unchecked((short)strstart); + } + + // Find the longest match, discarding those <= prev_length. + prev_length = match_length; + prev_match = match_start; + match_length = MIN_MATCH - 1; + + if (hash_head != 0 && prev_length < config.MaxLazy && + ((strstart - hash_head) & 0xffff) <= w_size - MIN_LOOKAHEAD) + { + // To simplify the code, we prevent matches with the string + // of window index 0 (in particular we have to avoid a match + // of the string with itself at the start of the input file). + + if (compressionStrategy != CompressionStrategy.HuffmanOnly) + { + match_length = longest_match(hash_head); + } + // longest_match() sets match_start + + if (match_length <= 5 && (compressionStrategy == CompressionStrategy.Filtered || + (match_length == MIN_MATCH && strstart - match_start > 4096))) + { + + // If prev_match is also MIN_MATCH, match_start is garbage + // but we will ignore the current match anyway. + match_length = MIN_MATCH - 1; + } + } + + // If there was a match at the previous step and the current + // match is not better, output the previous match: + if (prev_length >= MIN_MATCH && match_length <= prev_length) + { + int max_insert = strstart + lookahead - MIN_MATCH; + // Do not insert strings in hash table beyond this. + + // check_match(strstart-1, prev_match, prev_length); + + bflush = _tr_tally(strstart - 1 - prev_match, prev_length - MIN_MATCH); + + // Insert in hash table all strings up to the end of the match. + // strstart-1 and strstart are already inserted. If there is not + // enough lookahead, the last two strings are not inserted in + // the hash table. + lookahead -= (prev_length - 1); + prev_length -= 2; + do + { + if (++strstart <= max_insert) + { + ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; + //prev[strstart&w_mask]=hash_head=head[ins_h]; + hash_head = (head[ins_h] & 0xffff); + prev[strstart & w_mask] = head[ins_h]; + head[ins_h] = unchecked((short)strstart); + } + } + while (--prev_length != 0); + match_available = 0; + match_length = MIN_MATCH - 1; + strstart++; + + if (bflush) + { + flush_block_only(false); + if (_codec.AvailableBytesOut == 0) + return BlockState.NeedMore; + } + } + else if (match_available != 0) + { + + // If there was no match at the previous position, output a + // single literal. If there was a match but the current match + // is longer, truncate the previous match to a single literal. + + bflush = _tr_tally(0, window[strstart - 1] & 0xff); + + if (bflush) + { + flush_block_only(false); + } + strstart++; + lookahead--; + if (_codec.AvailableBytesOut == 0) + return BlockState.NeedMore; + } + else + { + // There is no previous match to compare with, wait for + // the next step to decide. + + match_available = 1; + strstart++; + lookahead--; + } + } + + if (match_available != 0) + { + bflush = _tr_tally(0, window[strstart - 1] & 0xff); + match_available = 0; + } + flush_block_only(flush == FlushType.Finish); + + if (_codec.AvailableBytesOut == 0) + { + if (flush == FlushType.Finish) + return BlockState.FinishStarted; + else + return BlockState.NeedMore; + } + + return flush == FlushType.Finish ? BlockState.FinishDone : BlockState.BlockDone; + } + + + internal int longest_match(int cur_match) + { + int chain_length = config.MaxChainLength; // max hash chain length + int scan = strstart; // current string + int match; // matched string + int len; // length of current match + int best_len = prev_length; // best match length so far + int limit = strstart > (w_size - MIN_LOOKAHEAD) ? strstart - (w_size - MIN_LOOKAHEAD) : 0; + + int niceLength = config.NiceLength; + + // Stop when cur_match becomes <= limit. To simplify the code, + // we prevent matches with the string of window index 0. + + int wmask = w_mask; + + int strend = strstart + MAX_MATCH; + byte scan_end1 = window[scan + best_len - 1]; + byte scan_end = window[scan + best_len]; + + // The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + // It is easy to get rid of this optimization if necessary. + + // Do not waste too much time if we already have a good match: + if (prev_length >= config.GoodLength) + { + chain_length >>= 2; + } + + // Do not look for matches beyond the end of the input. This is necessary + // to make deflate deterministic. + if (niceLength > lookahead) + niceLength = lookahead; + + do + { + match = cur_match; + + // Skip to next match if the match length cannot increase + // or if the match length is less than 2: + if (window[match + best_len] != scan_end || + window[match + best_len - 1] != scan_end1 || + window[match] != window[scan] || + window[++match] != window[scan + 1]) + continue; + + // The check at best_len-1 can be removed because it will be made + // again later. (This heuristic is not always a win.) + // It is not necessary to compare scan[2] and match[2] since they + // are always equal when the other bytes match, given that + // the hash keys are equal and that HASH_BITS >= 8. + scan += 2; match++; + + // We check for insufficient lookahead only every 8th comparison; + // the 256th check will be made at strstart+258. + do + { + } + while (window[++scan] == window[++match] && + window[++scan] == window[++match] && + window[++scan] == window[++match] && + window[++scan] == window[++match] && + window[++scan] == window[++match] && + window[++scan] == window[++match] && + window[++scan] == window[++match] && + window[++scan] == window[++match] && scan < strend); + + len = MAX_MATCH - (int)(strend - scan); + scan = strend - MAX_MATCH; + + if (len > best_len) + { + match_start = cur_match; + best_len = len; + if (len >= niceLength) + break; + scan_end1 = window[scan + best_len - 1]; + scan_end = window[scan + best_len]; + } + } + while ((cur_match = (prev[cur_match & wmask] & 0xffff)) > limit && --chain_length != 0); + + if (best_len <= lookahead) + return best_len; + return lookahead; + } + + + private bool Rfc1950BytesEmitted = false; + private bool _WantRfc1950HeaderBytes = true; + internal bool WantRfc1950HeaderBytes + { + get { return _WantRfc1950HeaderBytes; } + set { _WantRfc1950HeaderBytes = value; } + } + + + internal int Initialize(ZlibCodec codec, CompressionLevel level) + { + return Initialize(codec, level, ZlibConstants.WindowBitsMax); + } + + internal int Initialize(ZlibCodec codec, CompressionLevel level, int bits) + { + return Initialize(codec, level, bits, MEM_LEVEL_DEFAULT, CompressionStrategy.Default); + } + + internal int Initialize(ZlibCodec codec, CompressionLevel level, int bits, CompressionStrategy compressionStrategy) + { + return Initialize(codec, level, bits, MEM_LEVEL_DEFAULT, compressionStrategy); + } + + internal int Initialize(ZlibCodec codec, CompressionLevel level, int windowBits, int memLevel, CompressionStrategy strategy) + { + _codec = codec; + _codec.Message = null; + + // validation + if (windowBits < 9 || windowBits > 15) + throw new ZlibException("windowBits must be in the range 9..15."); + + if (memLevel < 1 || memLevel > MEM_LEVEL_MAX) + throw new ZlibException(String.Format("memLevel must be in the range 1.. {0}", MEM_LEVEL_MAX)); + + _codec.dstate = this; + + w_bits = windowBits; + w_size = 1 << w_bits; + w_mask = w_size - 1; + + hash_bits = memLevel + 7; + hash_size = 1 << hash_bits; + hash_mask = hash_size - 1; + hash_shift = ((hash_bits + MIN_MATCH - 1) / MIN_MATCH); + + window = new byte[w_size * 2];// BufferPool.Get(w_size * 2, false); + prev = new short[w_size]; + head = new short[hash_size]; + + // for memLevel==8, this will be 16384, 16k + lit_bufsize = 1 << (memLevel + 6); + + // Use a single array as the buffer for data pending compression, + // the output distance codes, and the output length codes (aka tree). + // orig comment: This works just fine since the average + // output size for (length,distance) codes is <= 24 bits. + pending = new byte[lit_bufsize * 4];// BufferPool.Get(lit_bufsize * 4, false); + _distanceOffset = lit_bufsize; + _lengthOffset = (1 + 2) * lit_bufsize; + + // So, for memLevel 8, the length of the pending buffer is 65536. 64k. + // The first 16k are pending bytes. + // The middle slice, of 32k, is used for distance codes. + // The final 16k are length codes. + + this.compressionLevel = level; + this.compressionStrategy = strategy; + + Reset(); + return ZlibConstants.Z_OK; + } + + + internal void Reset() + { + _codec.TotalBytesIn = _codec.TotalBytesOut = 0; + _codec.Message = null; + //strm.data_type = Z_UNKNOWN; + + pendingCount = 0; + nextPending = 0; + + Rfc1950BytesEmitted = false; + + status = (WantRfc1950HeaderBytes) ? INIT_STATE : BUSY_STATE; + _codec._Adler32 = Adler.Adler32(0, null, 0, 0); + + last_flush = (int)FlushType.None; + + _InitializeTreeData(); + _InitializeLazyMatch(); + } + + + internal int End() + { + if (status != INIT_STATE && status != BUSY_STATE && status != FINISH_STATE) + { + return ZlibConstants.Z_STREAM_ERROR; + } + // Deallocate in reverse order of allocations: + //BufferPool.Release(pending); + pending = null; + head = null; + prev = null; + //BufferPool.Release(window); + window = null; + // free + // dstate=null; + return status == BUSY_STATE ? ZlibConstants.Z_DATA_ERROR : ZlibConstants.Z_OK; + } + + + private void SetDeflater() + { + switch (config.Flavor) + { + case DeflateFlavor.Store: + DeflateFunction = DeflateNone; + break; + case DeflateFlavor.Fast: + DeflateFunction = DeflateFast; + break; + case DeflateFlavor.Slow: + DeflateFunction = DeflateSlow; + break; + } + } + + + internal int SetParams(CompressionLevel level, CompressionStrategy strategy) + { + int result = ZlibConstants.Z_OK; + + if (compressionLevel != level) + { + Config newConfig = Config.Lookup(level); + + // change in the deflate flavor (Fast vs slow vs none)? + if (newConfig.Flavor != config.Flavor && _codec.TotalBytesIn != 0) + { + // Flush the last buffer: + result = _codec.Deflate(FlushType.Partial); + } + + compressionLevel = level; + config = newConfig; + SetDeflater(); + } + + // no need to flush with change in strategy? Really? + compressionStrategy = strategy; + + return result; + } + + + internal int SetDictionary(byte[] dictionary) + { + int length = dictionary.Length; + int index = 0; + + if (dictionary == null || status != INIT_STATE) + throw new ZlibException("Stream error."); + + _codec._Adler32 = Adler.Adler32(_codec._Adler32, dictionary, 0, dictionary.Length); + + if (length < MIN_MATCH) + return ZlibConstants.Z_OK; + if (length > w_size - MIN_LOOKAHEAD) + { + length = w_size - MIN_LOOKAHEAD; + index = dictionary.Length - length; // use the tail of the dictionary + } + Array.Copy(dictionary, index, window, 0, length); + strstart = length; + block_start = length; + + // Insert all strings in the hash table (except for the last two bytes). + // s->lookahead stays null, so s->ins_h will be recomputed at the next + // call of fill_window. + + ins_h = window[0] & 0xff; + ins_h = (((ins_h) << hash_shift) ^ (window[1] & 0xff)) & hash_mask; + + for (int n = 0; n <= length - MIN_MATCH; n++) + { + ins_h = (((ins_h) << hash_shift) ^ (window[(n) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; + prev[n & w_mask] = head[ins_h]; + head[ins_h] = (short)n; + } + return ZlibConstants.Z_OK; + } + + + + internal int Deflate(FlushType flush) + { + int old_flush; + + if (_codec.OutputBuffer == null || + (_codec.InputBuffer == null && _codec.AvailableBytesIn != 0) || + (status == FINISH_STATE && flush != FlushType.Finish)) + { + _codec.Message = _ErrorMessage[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_STREAM_ERROR)]; + throw new ZlibException(String.Format("Something is fishy. [{0}]", _codec.Message)); + } + if (_codec.AvailableBytesOut == 0) + { + _codec.Message = _ErrorMessage[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_BUF_ERROR)]; + throw new ZlibException("OutputBuffer is full (AvailableBytesOut == 0)"); + } + + old_flush = last_flush; + last_flush = (int)flush; + + // Write the zlib (rfc1950) header bytes + if (status == INIT_STATE) + { + int header = (Z_DEFLATED + ((w_bits - 8) << 4)) << 8; + int level_flags = (((int)compressionLevel - 1) & 0xff) >> 1; + + if (level_flags > 3) + level_flags = 3; + header |= (level_flags << 6); + if (strstart != 0) + header |= PRESET_DICT; + header += 31 - (header % 31); + + status = BUSY_STATE; + //putShortMSB(header); + unchecked + { + pending[pendingCount++] = (byte)(header >> 8); + pending[pendingCount++] = (byte)header; + } + // Save the adler32 of the preset dictionary: + if (strstart != 0) + { + pending[pendingCount++] = (byte)((_codec._Adler32 & 0xFF000000) >> 24); + pending[pendingCount++] = (byte)((_codec._Adler32 & 0x00FF0000) >> 16); + pending[pendingCount++] = (byte)((_codec._Adler32 & 0x0000FF00) >> 8); + pending[pendingCount++] = (byte)(_codec._Adler32 & 0x000000FF); + } + _codec._Adler32 = Adler.Adler32(0, null, 0, 0); + } + + // Flush as much pending output as possible + if (pendingCount != 0) + { + _codec.flush_pending(); + if (_codec.AvailableBytesOut == 0) + { + //System.out.println(" avail_out==0"); + // Since avail_out is 0, deflate will be called again with + // more output space, but possibly with both pending and + // avail_in equal to zero. There won't be anything to do, + // but this is not an error situation so make sure we + // return OK instead of BUF_ERROR at next call of deflate: + last_flush = -1; + return ZlibConstants.Z_OK; + } + + // Make sure there is something to do and avoid duplicate consecutive + // flushes. For repeated and useless calls with Z_FINISH, we keep + // returning Z_STREAM_END instead of Z_BUFF_ERROR. + } + else if (_codec.AvailableBytesIn == 0 && + (int)flush <= old_flush && + flush != FlushType.Finish) + { + // workitem 8557 + // + // Not sure why this needs to be an error. pendingCount == 0, which + // means there's nothing to deflate. And the caller has not asked + // for a FlushType.Finish, but... that seems very non-fatal. We + // can just say "OK" and do nothing. + + // _codec.Message = z_errmsg[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_BUF_ERROR)]; + // throw new ZlibException("AvailableBytesIn == 0 && flush<=old_flush && flush != FlushType.Finish"); + + return ZlibConstants.Z_OK; + } + + // User must not provide more input after the first FINISH: + if (status == FINISH_STATE && _codec.AvailableBytesIn != 0) + { + _codec.Message = _ErrorMessage[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_BUF_ERROR)]; + throw new ZlibException("status == FINISH_STATE && _codec.AvailableBytesIn != 0"); + } + + // Start a new block or continue the current one. + if (_codec.AvailableBytesIn != 0 || lookahead != 0 || (flush != FlushType.None && status != FINISH_STATE)) + { + BlockState bstate = DeflateFunction(flush); + + if (bstate == BlockState.FinishStarted || bstate == BlockState.FinishDone) + { + status = FINISH_STATE; + } + if (bstate == BlockState.NeedMore || bstate == BlockState.FinishStarted) + { + if (_codec.AvailableBytesOut == 0) + { + last_flush = -1; // avoid BUF_ERROR next call, see above + } + return ZlibConstants.Z_OK; + // If flush != Z_NO_FLUSH && avail_out == 0, the next call + // of deflate should use the same flush parameter to make sure + // that the flush is complete. So we don't have to output an + // empty block here, this will be done at next call. This also + // ensures that for a very small output buffer, we emit at most + // one empty block. + } + + if (bstate == BlockState.BlockDone) + { + if (flush == FlushType.Partial) + { + _tr_align(); + } + else + { + // FlushType.Full or FlushType.Sync + _tr_stored_block(0, 0, false); + // For a full flush, this empty block will be recognized + // as a special marker by inflate_sync(). + if (flush == FlushType.Full) + { + // clear hash (forget the history) + for (int i = 0; i < hash_size; i++) + head[i] = 0; + } + } + _codec.flush_pending(); + if (_codec.AvailableBytesOut == 0) + { + last_flush = -1; // avoid BUF_ERROR at next call, see above + return ZlibConstants.Z_OK; + } + } + } + + if (flush != FlushType.Finish) + return ZlibConstants.Z_OK; + + if (!WantRfc1950HeaderBytes || Rfc1950BytesEmitted) + return ZlibConstants.Z_STREAM_END; + + // Write the zlib trailer (adler32) + pending[pendingCount++] = (byte)((_codec._Adler32 & 0xFF000000) >> 24); + pending[pendingCount++] = (byte)((_codec._Adler32 & 0x00FF0000) >> 16); + pending[pendingCount++] = (byte)((_codec._Adler32 & 0x0000FF00) >> 8); + pending[pendingCount++] = (byte)(_codec._Adler32 & 0x000000FF); + //putShortMSB((int)(SharedUtils.URShift(_codec._Adler32, 16))); + //putShortMSB((int)(_codec._Adler32 & 0xffff)); + + _codec.flush_pending(); + + // If avail_out is zero, the application will call deflate again + // to flush the rest. + + Rfc1950BytesEmitted = true; // write the trailer only once! + + return pendingCount != 0 ? ZlibConstants.Z_OK : ZlibConstants.Z_STREAM_END; + } + + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/Deflate.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/Deflate.cs.meta new file mode 100644 index 000000000..dc3401957 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/Deflate.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ad45ad0b3a07a2f4181d9f4243b82395 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/DeflateStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/DeflateStream.cs new file mode 100644 index 000000000..9aaa9c2fa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/DeflateStream.cs @@ -0,0 +1,692 @@ +// DeflateStream.cs +// ------------------------------------------------------------------ +// +// Copyright (c) 2009-2010 Dino Chiesa. +// All rights reserved. +// +// This code module is part of DotNetZip, a zipfile class library. +// +// ------------------------------------------------------------------ +// +// This code is licensed under the Microsoft Public License. +// See the file License.txt for the license details. +// More info on: http://dotnetzip.codeplex.com +// +// ------------------------------------------------------------------ +// +// last saved (in emacs): +// Time-stamp: <2011-July-31 14:48:11> +// +// ------------------------------------------------------------------ +// +// This module defines the DeflateStream class, which can be used as a replacement for +// the System.IO.Compression.DeflateStream class in the .NET BCL. +// +// ------------------------------------------------------------------ + + +using System; + +namespace BestHTTP.Decompression.Zlib +{ + /// + /// A class for compressing and decompressing streams using the Deflate algorithm. + /// + /// + /// + /// + /// + /// The DeflateStream is a Decorator on a . It adds DEFLATE compression or decompression to any + /// stream. + /// + /// + /// + /// Using this stream, applications can compress or decompress data via stream + /// Read and Write operations. Either compresssion or decompression + /// can occur through either reading or writing. The compression format used is + /// DEFLATE, which is documented in IETF RFC 1951, "DEFLATE + /// Compressed Data Format Specification version 1.3.". + /// + /// + /// + /// + /// + public class DeflateStream : System.IO.Stream + { + internal ZlibBaseStream _baseStream; + internal System.IO.Stream _innerStream; + bool _disposed; + + /// + /// Create a DeflateStream using the specified CompressionMode. + /// + /// + /// + /// When mode is CompressionMode.Compress, the DeflateStream will use + /// the default compression level. The "captive" stream will be closed when + /// the DeflateStream is closed. + /// + /// + /// + /// This example uses a DeflateStream to compress data from a file, and writes + /// the compressed data to another file. + /// + /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + /// { + /// using (var raw = System.IO.File.Create(fileToCompress + ".deflated")) + /// { + /// using (Stream compressor = new DeflateStream(raw, CompressionMode.Compress)) + /// { + /// byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + /// int n; + /// while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + /// { + /// compressor.Write(buffer, 0, n); + /// } + /// } + /// } + /// } + /// + /// + /// + /// Using input As Stream = File.OpenRead(fileToCompress) + /// Using raw As FileStream = File.Create(fileToCompress & ".deflated") + /// Using compressor As Stream = New DeflateStream(raw, CompressionMode.Compress) + /// Dim buffer As Byte() = New Byte(4096) {} + /// Dim n As Integer = -1 + /// Do While (n <> 0) + /// If (n > 0) Then + /// compressor.Write(buffer, 0, n) + /// End If + /// n = input.Read(buffer, 0, buffer.Length) + /// Loop + /// End Using + /// End Using + /// End Using + /// + /// + /// The stream which will be read or written. + /// Indicates whether the DeflateStream will compress or decompress. + public DeflateStream(System.IO.Stream stream, CompressionMode mode) + : this(stream, mode, CompressionLevel.Default, false) + { + } + + /// + /// Create a DeflateStream using the specified CompressionMode and the specified CompressionLevel. + /// + /// + /// + /// + /// + /// When mode is CompressionMode.Decompress, the level parameter is + /// ignored. The "captive" stream will be closed when the DeflateStream is + /// closed. + /// + /// + /// + /// + /// + /// + /// This example uses a DeflateStream to compress data from a file, and writes + /// the compressed data to another file. + /// + /// + /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + /// { + /// using (var raw = System.IO.File.Create(fileToCompress + ".deflated")) + /// { + /// using (Stream compressor = new DeflateStream(raw, + /// CompressionMode.Compress, + /// CompressionLevel.BestCompression)) + /// { + /// byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + /// int n= -1; + /// while (n != 0) + /// { + /// if (n > 0) + /// compressor.Write(buffer, 0, n); + /// n= input.Read(buffer, 0, buffer.Length); + /// } + /// } + /// } + /// } + /// + /// + /// + /// Using input As Stream = File.OpenRead(fileToCompress) + /// Using raw As FileStream = File.Create(fileToCompress & ".deflated") + /// Using compressor As Stream = New DeflateStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) + /// Dim buffer As Byte() = New Byte(4096) {} + /// Dim n As Integer = -1 + /// Do While (n <> 0) + /// If (n > 0) Then + /// compressor.Write(buffer, 0, n) + /// End If + /// n = input.Read(buffer, 0, buffer.Length) + /// Loop + /// End Using + /// End Using + /// End Using + /// + /// + /// The stream to be read or written while deflating or inflating. + /// Indicates whether the DeflateStream will compress or decompress. + /// A tuning knob to trade speed for effectiveness. + public DeflateStream(System.IO.Stream stream, CompressionMode mode, CompressionLevel level) + : this(stream, mode, level, false) + { + } + + /// + /// Create a DeflateStream using the specified + /// CompressionMode, and explicitly specify whether the + /// stream should be left open after Deflation or Inflation. + /// + /// + /// + /// + /// + /// This constructor allows the application to request that the captive stream + /// remain open after the deflation or inflation occurs. By default, after + /// Close() is called on the stream, the captive stream is also + /// closed. In some cases this is not desired, for example if the stream is a + /// memory stream that will be re-read after compression. Specify true for + /// the parameter to leave the stream open. + /// + /// + /// + /// The DeflateStream will use the default compression level. + /// + /// + /// + /// See the other overloads of this constructor for example code. + /// + /// + /// + /// + /// The stream which will be read or written. This is called the + /// "captive" stream in other places in this documentation. + /// + /// + /// + /// Indicates whether the DeflateStream will compress or decompress. + /// + /// + /// true if the application would like the stream to + /// remain open after inflation/deflation. + public DeflateStream(System.IO.Stream stream, CompressionMode mode, bool leaveOpen) + : this(stream, mode, CompressionLevel.Default, leaveOpen) + { + } + + /// + /// Create a DeflateStream using the specified CompressionMode + /// and the specified CompressionLevel, and explicitly specify whether + /// the stream should be left open after Deflation or Inflation. + /// + /// + /// + /// + /// + /// When mode is CompressionMode.Decompress, the level parameter is ignored. + /// + /// + /// + /// This constructor allows the application to request that the captive stream + /// remain open after the deflation or inflation occurs. By default, after + /// Close() is called on the stream, the captive stream is also + /// closed. In some cases this is not desired, for example if the stream is a + /// that will be re-read after + /// compression. Specify true for the parameter + /// to leave the stream open. + /// + /// + /// + /// + /// + /// + /// This example shows how to use a DeflateStream to compress data from + /// a file, and store the compressed data into another file. + /// + /// + /// using (var output = System.IO.File.Create(fileToCompress + ".deflated")) + /// { + /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + /// { + /// using (Stream compressor = new DeflateStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, true)) + /// { + /// byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + /// int n= -1; + /// while (n != 0) + /// { + /// if (n > 0) + /// compressor.Write(buffer, 0, n); + /// n= input.Read(buffer, 0, buffer.Length); + /// } + /// } + /// } + /// // can write additional data to the output stream here + /// } + /// + /// + /// + /// Using output As FileStream = File.Create(fileToCompress & ".deflated") + /// Using input As Stream = File.OpenRead(fileToCompress) + /// Using compressor As Stream = New DeflateStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, True) + /// Dim buffer As Byte() = New Byte(4096) {} + /// Dim n As Integer = -1 + /// Do While (n <> 0) + /// If (n > 0) Then + /// compressor.Write(buffer, 0, n) + /// End If + /// n = input.Read(buffer, 0, buffer.Length) + /// Loop + /// End Using + /// End Using + /// ' can write additional data to the output stream here. + /// End Using + /// + /// + /// The stream which will be read or written. + /// Indicates whether the DeflateStream will compress or decompress. + /// true if the application would like the stream to remain open after inflation/deflation. + /// A tuning knob to trade speed for effectiveness. + public DeflateStream(System.IO.Stream stream, CompressionMode mode, CompressionLevel level, bool leaveOpen) + { + _innerStream = stream; + _baseStream = new ZlibBaseStream(stream, mode, level, ZlibStreamFlavor.DEFLATE, leaveOpen); + } + + /// + /// Create a DeflateStream using the specified CompressionMode + /// and the specified CompressionLevel, and explicitly specify whether + /// the stream should be left open after Deflation or Inflation. + /// + /// + /// + /// + /// + /// When mode is CompressionMode.Decompress, the level parameter is ignored. + /// + /// + /// + /// This constructor allows the application to request that the captive stream + /// remain open after the deflation or inflation occurs. By default, after + /// Close() is called on the stream, the captive stream is also + /// closed. In some cases this is not desired, for example if the stream is a + /// that will be re-read after + /// compression. Specify true for the parameter + /// to leave the stream open. + /// + /// + /// + /// + /// + /// + /// This example shows how to use a DeflateStream to compress data from + /// a file, and store the compressed data into another file. + /// + /// + /// using (var output = System.IO.File.Create(fileToCompress + ".deflated")) + /// { + /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + /// { + /// using (Stream compressor = new DeflateStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, true)) + /// { + /// byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + /// int n= -1; + /// while (n != 0) + /// { + /// if (n > 0) + /// compressor.Write(buffer, 0, n); + /// n= input.Read(buffer, 0, buffer.Length); + /// } + /// } + /// } + /// // can write additional data to the output stream here + /// } + /// + /// + /// + /// Using output As FileStream = File.Create(fileToCompress & ".deflated") + /// Using input As Stream = File.OpenRead(fileToCompress) + /// Using compressor As Stream = New DeflateStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, True) + /// Dim buffer As Byte() = New Byte(4096) {} + /// Dim n As Integer = -1 + /// Do While (n <> 0) + /// If (n > 0) Then + /// compressor.Write(buffer, 0, n) + /// End If + /// n = input.Read(buffer, 0, buffer.Length) + /// Loop + /// End Using + /// End Using + /// ' can write additional data to the output stream here. + /// End Using + /// + /// + /// The stream which will be read or written. + /// Indicates whether the DeflateStream will compress or decompress. + /// true if the application would like the stream to remain open after inflation/deflation. + /// A tuning knob to trade speed for effectiveness. + /// Desired window bits. + public DeflateStream(System.IO.Stream stream, CompressionMode mode, CompressionLevel level, bool leaveOpen, int windowBits) + { + _innerStream = stream; + _baseStream = new ZlibBaseStream(stream, mode, level, ZlibStreamFlavor.DEFLATE, leaveOpen, windowBits); + } + + #region Zlib properties + + /// + /// This property sets the flush behavior on the stream. + /// + /// See the ZLIB documentation for the meaning of the flush behavior. + /// + virtual public FlushType FlushMode + { + get { return (this._baseStream._flushMode); } + set + { + if (_disposed) throw new ObjectDisposedException("DeflateStream"); + this._baseStream._flushMode = value; + } + } + + /// + /// The size of the working buffer for the compression codec. + /// + /// + /// + /// + /// The working buffer is used for all stream operations. The default size is + /// 1024 bytes. The minimum size is 128 bytes. You may get better performance + /// with a larger buffer. Then again, you might not. You would have to test + /// it. + /// + /// + /// + /// Set this before the first call to Read() or Write() on the + /// stream. If you try to set it afterwards, it will throw. + /// + /// + public int BufferSize + { + get + { + return this._baseStream._bufferSize; + } + set + { + if (_disposed) throw new ObjectDisposedException("DeflateStream"); + if (this._baseStream._workingBuffer != null) + throw new ZlibException("The working buffer is already set."); + if (value < ZlibConstants.WorkingBufferSizeMin) + throw new ZlibException(String.Format("Don't be silly. {0} bytes?? Use a bigger buffer, at least {1}.", value, ZlibConstants.WorkingBufferSizeMin)); + this._baseStream._bufferSize = value; + } + } + + /// + /// The ZLIB strategy to be used during compression. + /// + /// + /// + /// By tweaking this parameter, you may be able to optimize the compression for + /// data with particular characteristics. + /// + public CompressionStrategy Strategy + { + get + { + return this._baseStream.Strategy; + } + set + { + if (_disposed) throw new ObjectDisposedException("DeflateStream"); + this._baseStream.Strategy = value; + } + } + + /// Returns the total number of bytes input so far. + virtual public long TotalIn + { + get + { + return this._baseStream._z.TotalBytesIn; + } + } + + /// Returns the total number of bytes output so far. + virtual public long TotalOut + { + get + { + return this._baseStream._z.TotalBytesOut; + } + } + + #endregion + + #region System.IO.Stream methods + /// + /// Dispose the stream. + /// + /// + /// + /// This may or may not result in a Close() call on the captive + /// stream. See the constructors that have a leaveOpen parameter + /// for more information. + /// + /// + /// Application code won't call this code directly. This method may be + /// invoked in two distinct scenarios. If disposing == true, the method + /// has been called directly or indirectly by a user's code, for example + /// via the public Dispose() method. In this case, both managed and + /// unmanaged resources can be referenced and disposed. If disposing == + /// false, the method has been called by the runtime from inside the + /// object finalizer and this method should not reference other objects; + /// in that case only unmanaged resources must be referenced or + /// disposed. + /// + /// + /// + /// true if the Dispose method was invoked by user code. + /// + protected override void Dispose(bool disposing) + { + try + { + if (!_disposed) + { + if (disposing && (this._baseStream != null)) + this._baseStream.Close(); + _disposed = true; + } + } + finally + { + base.Dispose(disposing); + } + } + + + + /// + /// Indicates whether the stream can be read. + /// + /// + /// The return value depends on whether the captive stream supports reading. + /// + public override bool CanRead + { + get + { + if (_disposed) throw new ObjectDisposedException("DeflateStream"); + return _baseStream._stream.CanRead; + } + } + + /// + /// Indicates whether the stream supports Seek operations. + /// + /// + /// Always returns false. + /// + public override bool CanSeek + { + get { return false; } + } + + + /// + /// Indicates whether the stream can be written. + /// + /// + /// The return value depends on whether the captive stream supports writing. + /// + public override bool CanWrite + { + get + { + if (_disposed) throw new ObjectDisposedException("DeflateStream"); + return _baseStream._stream.CanWrite; + } + } + + /// + /// Flush the stream. + /// + public override void Flush() + { + if (_disposed) throw new ObjectDisposedException("DeflateStream"); + _baseStream.Flush(); + } + + /// + /// Reading this property always throws a . + /// + public override long Length + { + get { throw new NotImplementedException(); } + } + + /// + /// The position of the stream pointer. + /// + /// + /// + /// Setting this property always throws a . Reading will return the total bytes + /// written out, if used in writing, or the total bytes read in, if used in + /// reading. The count may refer to compressed bytes or uncompressed bytes, + /// depending on how you've used the stream. + /// + public override long Position + { + get + { + if (this._baseStream._streamMode == BestHTTP.Decompression.Zlib.ZlibBaseStream.StreamMode.Writer) + return this._baseStream._z.TotalBytesOut; + if (this._baseStream._streamMode == BestHTTP.Decompression.Zlib.ZlibBaseStream.StreamMode.Reader) + return this._baseStream._z.TotalBytesIn; + return 0; + } + set { throw new NotImplementedException(); } + } + + /// + /// Read data from the stream. + /// + /// + /// + /// + /// If you wish to use the DeflateStream to compress data while + /// reading, you can create a DeflateStream with + /// CompressionMode.Compress, providing an uncompressed data stream. + /// Then call Read() on that DeflateStream, and the data read will be + /// compressed as you read. If you wish to use the DeflateStream to + /// decompress data while reading, you can create a DeflateStream with + /// CompressionMode.Decompress, providing a readable compressed data + /// stream. Then call Read() on that DeflateStream, and the data read + /// will be decompressed as you read. + /// + /// + /// + /// A DeflateStream can be used for Read() or Write(), but not both. + /// + /// + /// + /// The buffer into which the read data should be placed. + /// the offset within that data array to put the first byte read. + /// the number of bytes to read. + /// the number of bytes actually read + public override int Read(byte[] buffer, int offset, int count) + { + if (_disposed) throw new ObjectDisposedException("DeflateStream"); + return _baseStream.Read(buffer, offset, count); + } + + + /// + /// Calling this method always throws a . + /// + /// this is irrelevant, since it will always throw! + /// this is irrelevant, since it will always throw! + /// irrelevant! + public override long Seek(long offset, System.IO.SeekOrigin origin) + { + throw new NotImplementedException(); + } + + /// + /// Will call the base stream's SetLength method. + /// + public override void SetLength(long value) + { + _baseStream.SetLength(value); + } + + /// + /// Write data to the stream. + /// + /// + /// + /// + /// If you wish to use the DeflateStream to compress data while + /// writing, you can create a DeflateStream with + /// CompressionMode.Compress, and a writable output stream. Then call + /// Write() on that DeflateStream, providing uncompressed data + /// as input. The data sent to the output stream will be the compressed form + /// of the data written. If you wish to use the DeflateStream to + /// decompress data while writing, you can create a DeflateStream with + /// CompressionMode.Decompress, and a writable output stream. Then + /// call Write() on that stream, providing previously compressed + /// data. The data sent to the output stream will be the decompressed form of + /// the data written. + /// + /// + /// + /// A DeflateStream can be used for Read() or Write(), + /// but not both. + /// + /// + /// + /// + /// The buffer holding data to write to the stream. + /// the offset within that data array to find the first byte to write. + /// the number of bytes to write. + public override void Write(byte[] buffer, int offset, int count) + { + if (_disposed) throw new ObjectDisposedException("DeflateStream"); + _baseStream.Write(buffer, offset, count); + } + #endregion + } + +} + diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/DeflateStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/DeflateStream.cs.meta new file mode 100644 index 000000000..e4d5ac675 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/DeflateStream.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 8b7a3b80f9aa82941a62c619c263ff5e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/GZipDecompressor.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/GZipDecompressor.cs new file mode 100644 index 000000000..f931882a3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/GZipDecompressor.cs @@ -0,0 +1,94 @@ +using System; + +using BestHTTP.Extensions; +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP.Decompression +{ + public sealed class GZipDecompressor : IDecompressor + { + private BufferPoolMemoryStream decompressorInputStream; + private BufferPoolMemoryStream decompressorOutputStream; + private Zlib.GZipStream decompressorStream; + + private int MinLengthToDecompress = 256; + + public GZipDecompressor(int minLengthToDecompress) + { + this.MinLengthToDecompress = minLengthToDecompress; + } + + private void CloseDecompressors() + { + if (decompressorStream != null) + decompressorStream.Dispose(); + decompressorStream = null; + + if (decompressorInputStream != null) + decompressorInputStream.Dispose(); + decompressorInputStream = null; + + if (decompressorOutputStream != null) + decompressorOutputStream.Dispose(); + decompressorOutputStream = null; + } + + public DecompressedData Decompress(byte[] data, int offset, int count, bool forceDecompress = false, bool dataCanBeLarger = false) + { + if (decompressorInputStream == null) + decompressorInputStream = new BufferPoolMemoryStream(count); + + if (data != null) + decompressorInputStream.Write(data, offset, count); + + if (!forceDecompress && decompressorInputStream.Length < MinLengthToDecompress) + return new DecompressedData(null, 0); + + decompressorInputStream.Position = 0; + + if (decompressorStream == null) + { + decompressorStream = new Zlib.GZipStream(decompressorInputStream, + Zlib.CompressionMode.Decompress, + Zlib.CompressionLevel.Default, + true); + decompressorStream.FlushMode = Zlib.FlushType.Sync; + } + + if (decompressorOutputStream == null) + decompressorOutputStream = new BufferPoolMemoryStream(); + decompressorOutputStream.SetLength(0); + + byte[] copyBuffer = BufferPool.Get(1024, true); + + int readCount; + int sumReadCount = 0; + while ((readCount = decompressorStream.Read(copyBuffer, 0, copyBuffer.Length)) != 0) + { + decompressorOutputStream.Write(copyBuffer, 0, readCount); + sumReadCount += readCount; + } + + BufferPool.Release(copyBuffer); + + // If no read is done (returned with any data) don't zero out the input stream, as it would delete any not yet used data. + if (sumReadCount > 0) + decompressorStream.SetLength(0); + + byte[] result = decompressorOutputStream.ToArray(dataCanBeLarger); + + return new DecompressedData(result, dataCanBeLarger ? (int)decompressorOutputStream.Length : result.Length); + } + + ~GZipDecompressor() + { + Dispose(); + } + + public void Dispose() + { + CloseDecompressors(); + GC.SuppressFinalize(this); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/GZipDecompressor.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/GZipDecompressor.cs.meta new file mode 100644 index 000000000..32c157545 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/GZipDecompressor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1472669cee77e2d4294077c4c1ac3663 +timeCreated: 1571210040 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/GZipStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/GZipStream.cs new file mode 100644 index 000000000..1d7982383 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/GZipStream.cs @@ -0,0 +1,920 @@ +// GZipStream.cs +// ------------------------------------------------------------------ +// +// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation. +// All rights reserved. +// +// This code module is part of DotNetZip, a zipfile class library. +// +// ------------------------------------------------------------------ +// +// This code is licensed under the Microsoft Public License. +// See the file License.txt for the license details. +// More info on: http://dotnetzip.codeplex.com +// +// ------------------------------------------------------------------ +// +// last saved (in emacs): +// Time-stamp: <2011-July-11 21:42:34> +// +// ------------------------------------------------------------------ +// +// This module defines the GZipStream class, which can be used as a replacement for +// the System.IO.Compression.GZipStream class in the .NET BCL. NB: The design is not +// completely OO clean: there is some intelligence in the ZlibBaseStream that reads the +// GZip header. +// +// ------------------------------------------------------------------ + + +using BestHTTP.PlatformSupport.Memory; +using System; +using System.IO; + +namespace BestHTTP.Decompression.Zlib +{ + /// + /// A class for compressing and decompressing GZIP streams. + /// + /// + /// + /// + /// The GZipStream is a Decorator on a + /// . It adds GZIP compression or decompression to any + /// stream. + /// + /// + /// + /// Like the System.IO.Compression.GZipStream in the .NET Base Class Library, the + /// Ionic.Zlib.GZipStream can compress while writing, or decompress while + /// reading, but not vice versa. The compression method used is GZIP, which is + /// documented in IETF RFC + /// 1952, "GZIP file format specification version 4.3". + /// + /// + /// A GZipStream can be used to decompress data (through Read()) or + /// to compress data (through Write()), but not both. + /// + /// + /// + /// If you wish to use the GZipStream to compress data, you must wrap it + /// around a write-able stream. As you call Write() on the GZipStream, the + /// data will be compressed into the GZIP format. If you want to decompress data, + /// you must wrap the GZipStream around a readable stream that contains an + /// IETF RFC 1952-compliant stream. The data will be decompressed as you call + /// Read() on the GZipStream. + /// + /// + /// + /// Though the GZIP format allows data from multiple files to be concatenated + /// together, this stream handles only a single segment of GZIP format, typically + /// representing a single file. + /// + /// + /// + /// + /// + public class GZipStream : System.IO.Stream + { + // GZip format + // source: http://tools.ietf.org/html/rfc1952 + // + // header id: 2 bytes 1F 8B + // compress method 1 byte 8= DEFLATE (none other supported) + // flag 1 byte bitfield (See below) + // mtime 4 bytes time_t (seconds since jan 1, 1970 UTC of the file. + // xflg 1 byte 2 = max compress used , 4 = max speed (can be ignored) + // OS 1 byte OS for originating archive. set to 0xFF in compression. + // extra field length 2 bytes optional - only if FEXTRA is set. + // extra field varies + // filename varies optional - if FNAME is set. zero terminated. ISO-8859-1. + // file comment varies optional - if FCOMMENT is set. zero terminated. ISO-8859-1. + // crc16 1 byte optional - present only if FHCRC bit is set + // compressed data varies + // CRC32 4 bytes + // isize 4 bytes data size modulo 2^32 + // + // FLG (FLaGs) + // bit 0 FTEXT - indicates file is ASCII text (can be safely ignored) + // bit 1 FHCRC - there is a CRC16 for the header immediately following the header + // bit 2 FEXTRA - extra fields are present + // bit 3 FNAME - the zero-terminated filename is present. encoding; ISO-8859-1. + // bit 4 FCOMMENT - a zero-terminated file comment is present. encoding: ISO-8859-1 + // bit 5 reserved + // bit 6 reserved + // bit 7 reserved + // + // On consumption: + // Extra field is a bunch of nonsense and can be safely ignored. + // Header CRC and OS, likewise. + // + // on generation: + // all optional fields get 0, except for the OS, which gets 255. + // + + + + /// + /// The comment on the GZIP stream. + /// + /// + /// + /// + /// The GZIP format allows for each file to optionally have an associated + /// comment stored with the file. The comment is encoded with the ISO-8859-1 + /// code page. To include a comment in a GZIP stream you create, set this + /// property before calling Write() for the first time on the + /// GZipStream. + /// + /// + /// + /// When using GZipStream to decompress, you can retrieve this property + /// after the first call to Read(). If no comment has been set in the + /// GZIP bytestream, the Comment property will return null + /// (Nothing in VB). + /// + /// + public String Comment + { + get + { + return _Comment; + } + set + { + if (_disposed) throw new ObjectDisposedException("GZipStream"); + _Comment = value; + } + } + + /// + /// The FileName for the GZIP stream. + /// + /// + /// + /// + /// + /// The GZIP format optionally allows each file to have an associated + /// filename. When compressing data (through Write()), set this + /// FileName before calling Write() the first time on the GZipStream. + /// The actual filename is encoded into the GZIP bytestream with the + /// ISO-8859-1 code page, according to RFC 1952. It is the application's + /// responsibility to insure that the FileName can be encoded and decoded + /// correctly with this code page. + /// + /// + /// + /// When decompressing (through Read()), you can retrieve this value + /// any time after the first Read(). In the case where there was no filename + /// encoded into the GZIP bytestream, the property will return null (Nothing + /// in VB). + /// + /// + public String FileName + { + get { return _FileName; } + set + { + if (_disposed) throw new ObjectDisposedException("GZipStream"); + _FileName = value; + if (_FileName == null) return; + if (_FileName.IndexOf("/") != -1) + { + _FileName = _FileName.Replace("/", "\\"); + } + if (_FileName.EndsWith("\\")) + throw new Exception("Illegal filename"); + if (_FileName.IndexOf("\\") != -1) + { + // trim any leading path + _FileName = Path.GetFileName(_FileName); + } + } + } + + /// + /// The last modified time for the GZIP stream. + /// + /// + /// + /// GZIP allows the storage of a last modified time with each GZIP entity. + /// When compressing data, you can set this before the first call to + /// Write(). When decompressing, you can retrieve this value any time + /// after the first call to Read(). + /// + public DateTime? LastModified; + + /// + /// The CRC on the GZIP stream. + /// + /// + /// This is used for internal error checking. You probably don't need to look at this property. + /// + public int Crc32 { get { return _Crc32; } } + + private int _headerByteCount; + internal ZlibBaseStream _baseStream; + bool _disposed; + bool _firstReadDone; + string _FileName; + string _Comment; + int _Crc32; + + + /// + /// Create a GZipStream using the specified CompressionMode. + /// + /// + /// + /// + /// When mode is CompressionMode.Compress, the GZipStream will use the + /// default compression level. + /// + /// + /// + /// As noted in the class documentation, the CompressionMode (Compress + /// or Decompress) also establishes the "direction" of the stream. A + /// GZipStream with CompressionMode.Compress works only through + /// Write(). A GZipStream with + /// CompressionMode.Decompress works only through Read(). + /// + /// + /// + /// + /// + /// This example shows how to use a GZipStream to compress data. + /// + /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + /// { + /// using (var raw = System.IO.File.Create(outputFile)) + /// { + /// using (Stream compressor = new GZipStream(raw, CompressionMode.Compress)) + /// { + /// byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + /// int n; + /// while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + /// { + /// compressor.Write(buffer, 0, n); + /// } + /// } + /// } + /// } + /// + /// + /// Dim outputFile As String = (fileToCompress & ".compressed") + /// Using input As Stream = File.OpenRead(fileToCompress) + /// Using raw As FileStream = File.Create(outputFile) + /// Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress) + /// Dim buffer As Byte() = New Byte(4096) {} + /// Dim n As Integer = -1 + /// Do While (n <> 0) + /// If (n > 0) Then + /// compressor.Write(buffer, 0, n) + /// End If + /// n = input.Read(buffer, 0, buffer.Length) + /// Loop + /// End Using + /// End Using + /// End Using + /// + /// + /// + /// + /// This example shows how to use a GZipStream to uncompress a file. + /// + /// private void GunZipFile(string filename) + /// { + /// if (!filename.EndsWith(".gz)) + /// throw new ArgumentException("filename"); + /// var DecompressedFile = filename.Substring(0,filename.Length-3); + /// byte[] working = new byte[WORKING_BUFFER_SIZE]; + /// int n= 1; + /// using (System.IO.Stream input = System.IO.File.OpenRead(filename)) + /// { + /// using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) + /// { + /// using (var output = System.IO.File.Create(DecompressedFile)) + /// { + /// while (n !=0) + /// { + /// n= decompressor.Read(working, 0, working.Length); + /// if (n > 0) + /// { + /// output.Write(working, 0, n); + /// } + /// } + /// } + /// } + /// } + /// } + /// + /// + /// + /// Private Sub GunZipFile(ByVal filename as String) + /// If Not (filename.EndsWith(".gz)) Then + /// Throw New ArgumentException("filename") + /// End If + /// Dim DecompressedFile as String = filename.Substring(0,filename.Length-3) + /// Dim working(WORKING_BUFFER_SIZE) as Byte + /// Dim n As Integer = 1 + /// Using input As Stream = File.OpenRead(filename) + /// Using decompressor As Stream = new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, True) + /// Using output As Stream = File.Create(UncompressedFile) + /// Do + /// n= decompressor.Read(working, 0, working.Length) + /// If n > 0 Then + /// output.Write(working, 0, n) + /// End IF + /// Loop While (n > 0) + /// End Using + /// End Using + /// End Using + /// End Sub + /// + /// + /// + /// The stream which will be read or written. + /// Indicates whether the GZipStream will compress or decompress. + public GZipStream(Stream stream, CompressionMode mode) + : this(stream, mode, CompressionLevel.Default, false) + { + } + + /// + /// Create a GZipStream using the specified CompressionMode and + /// the specified CompressionLevel. + /// + /// + /// + /// + /// The CompressionMode (Compress or Decompress) also establishes the + /// "direction" of the stream. A GZipStream with + /// CompressionMode.Compress works only through Write(). A + /// GZipStream with CompressionMode.Decompress works only + /// through Read(). + /// + /// + /// + /// + /// + /// + /// This example shows how to use a GZipStream to compress a file into a .gz file. + /// + /// + /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + /// { + /// using (var raw = System.IO.File.Create(fileToCompress + ".gz")) + /// { + /// using (Stream compressor = new GZipStream(raw, + /// CompressionMode.Compress, + /// CompressionLevel.BestCompression)) + /// { + /// byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + /// int n; + /// while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + /// { + /// compressor.Write(buffer, 0, n); + /// } + /// } + /// } + /// } + /// + /// + /// + /// Using input As Stream = File.OpenRead(fileToCompress) + /// Using raw As FileStream = File.Create(fileToCompress & ".gz") + /// Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) + /// Dim buffer As Byte() = New Byte(4096) {} + /// Dim n As Integer = -1 + /// Do While (n <> 0) + /// If (n > 0) Then + /// compressor.Write(buffer, 0, n) + /// End If + /// n = input.Read(buffer, 0, buffer.Length) + /// Loop + /// End Using + /// End Using + /// End Using + /// + /// + /// The stream to be read or written while deflating or inflating. + /// Indicates whether the GZipStream will compress or decompress. + /// A tuning knob to trade speed for effectiveness. + public GZipStream(Stream stream, CompressionMode mode, CompressionLevel level) + : this(stream, mode, level, false) + { + } + + /// + /// Create a GZipStream using the specified CompressionMode, and + /// explicitly specify whether the stream should be left open after Deflation + /// or Inflation. + /// + /// + /// + /// + /// This constructor allows the application to request that the captive stream + /// remain open after the deflation or inflation occurs. By default, after + /// Close() is called on the stream, the captive stream is also + /// closed. In some cases this is not desired, for example if the stream is a + /// memory stream that will be re-read after compressed data has been written + /// to it. Specify true for the parameter to leave + /// the stream open. + /// + /// + /// + /// The (Compress or Decompress) also + /// establishes the "direction" of the stream. A GZipStream with + /// CompressionMode.Compress works only through Write(). A GZipStream + /// with CompressionMode.Decompress works only through Read(). + /// + /// + /// + /// The GZipStream will use the default compression level. If you want + /// to specify the compression level, see . + /// + /// + /// + /// See the other overloads of this constructor for example code. + /// + /// + /// + /// + /// + /// The stream which will be read or written. This is called the "captive" + /// stream in other places in this documentation. + /// + /// + /// Indicates whether the GZipStream will compress or decompress. + /// + /// + /// + /// true if the application would like the base stream to remain open after + /// inflation/deflation. + /// + public GZipStream(Stream stream, CompressionMode mode, bool leaveOpen) + : this(stream, mode, CompressionLevel.Default, leaveOpen) + { + } + + /// + /// Create a GZipStream using the specified CompressionMode and the + /// specified CompressionLevel, and explicitly specify whether the + /// stream should be left open after Deflation or Inflation. + /// + /// + /// + /// + /// + /// This constructor allows the application to request that the captive stream + /// remain open after the deflation or inflation occurs. By default, after + /// Close() is called on the stream, the captive stream is also + /// closed. In some cases this is not desired, for example if the stream is a + /// memory stream that will be re-read after compressed data has been written + /// to it. Specify true for the parameter to + /// leave the stream open. + /// + /// + /// + /// As noted in the class documentation, the CompressionMode (Compress + /// or Decompress) also establishes the "direction" of the stream. A + /// GZipStream with CompressionMode.Compress works only through + /// Write(). A GZipStream with CompressionMode.Decompress works only + /// through Read(). + /// + /// + /// + /// + /// + /// This example shows how to use a GZipStream to compress data. + /// + /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + /// { + /// using (var raw = System.IO.File.Create(outputFile)) + /// { + /// using (Stream compressor = new GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, true)) + /// { + /// byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + /// int n; + /// while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + /// { + /// compressor.Write(buffer, 0, n); + /// } + /// } + /// } + /// } + /// + /// + /// Dim outputFile As String = (fileToCompress & ".compressed") + /// Using input As Stream = File.OpenRead(fileToCompress) + /// Using raw As FileStream = File.Create(outputFile) + /// Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, True) + /// Dim buffer As Byte() = New Byte(4096) {} + /// Dim n As Integer = -1 + /// Do While (n <> 0) + /// If (n > 0) Then + /// compressor.Write(buffer, 0, n) + /// End If + /// n = input.Read(buffer, 0, buffer.Length) + /// Loop + /// End Using + /// End Using + /// End Using + /// + /// + /// The stream which will be read or written. + /// Indicates whether the GZipStream will compress or decompress. + /// true if the application would like the stream to remain open after inflation/deflation. + /// A tuning knob to trade speed for effectiveness. + public GZipStream(Stream stream, CompressionMode mode, CompressionLevel level, bool leaveOpen) + { + _baseStream = new ZlibBaseStream(stream, mode, level, ZlibStreamFlavor.GZIP, leaveOpen); + } + + #region Zlib properties + + /// + /// This property sets the flush behavior on the stream. + /// + virtual public FlushType FlushMode + { + get { return (this._baseStream._flushMode); } + set { + if (_disposed) throw new ObjectDisposedException("GZipStream"); + this._baseStream._flushMode = value; + } + } + + /// + /// The size of the working buffer for the compression codec. + /// + /// + /// + /// + /// The working buffer is used for all stream operations. The default size is + /// 1024 bytes. The minimum size is 128 bytes. You may get better performance + /// with a larger buffer. Then again, you might not. You would have to test + /// it. + /// + /// + /// + /// Set this before the first call to Read() or Write() on the + /// stream. If you try to set it afterwards, it will throw. + /// + /// + public int BufferSize + { + get + { + return this._baseStream._bufferSize; + } + set + { + if (_disposed) throw new ObjectDisposedException("GZipStream"); + if (this._baseStream._workingBuffer != null) + throw new ZlibException("The working buffer is already set."); + if (value < ZlibConstants.WorkingBufferSizeMin) + throw new ZlibException(String.Format("Don't be silly. {0} bytes?? Use a bigger buffer, at least {1}.", value, ZlibConstants.WorkingBufferSizeMin)); + this._baseStream._bufferSize = value; + } + } + + + /// Returns the total number of bytes input so far. + virtual public long TotalIn + { + get + { + return this._baseStream._z.TotalBytesIn; + } + } + + /// Returns the total number of bytes output so far. + virtual public long TotalOut + { + get + { + return this._baseStream._z.TotalBytesOut; + } + } + + #endregion + + #region Stream methods + + /// + /// Dispose the stream. + /// + /// + /// + /// This may or may not result in a Close() call on the captive + /// stream. See the constructors that have a leaveOpen parameter + /// for more information. + /// + /// + /// This method may be invoked in two distinct scenarios. If disposing + /// == true, the method has been called directly or indirectly by a + /// user's code, for example via the public Dispose() method. In this + /// case, both managed and unmanaged resources can be referenced and + /// disposed. If disposing == false, the method has been called by the + /// runtime from inside the object finalizer and this method should not + /// reference other objects; in that case only unmanaged resources must + /// be referenced or disposed. + /// + /// + /// + /// indicates whether the Dispose method was invoked by user code. + /// + protected override void Dispose(bool disposing) + { + try + { + if (!_disposed) + { + if (disposing && (this._baseStream != null)) + { + this._baseStream.Close(); + this._Crc32 = _baseStream.Crc32; + } + _disposed = true; + } + } + finally + { + base.Dispose(disposing); + } + } + + + /// + /// Indicates whether the stream can be read. + /// + /// + /// The return value depends on whether the captive stream supports reading. + /// + public override bool CanRead + { + get + { + if (_disposed) throw new ObjectDisposedException("GZipStream"); + return _baseStream._stream.CanRead; + } + } + + /// + /// Indicates whether the stream supports Seek operations. + /// + /// + /// Always returns false. + /// + public override bool CanSeek + { + get { return false; } + } + + + /// + /// Indicates whether the stream can be written. + /// + /// + /// The return value depends on whether the captive stream supports writing. + /// + public override bool CanWrite + { + get + { + if (_disposed) throw new ObjectDisposedException("GZipStream"); + return _baseStream._stream.CanWrite; + } + } + + /// + /// Flush the stream. + /// + public override void Flush() + { + if (_disposed) throw new ObjectDisposedException("GZipStream"); + _baseStream.Flush(); + } + + /// + /// Reading this property always throws a . + /// + public override long Length + { + get { throw new NotImplementedException(); } + } + + /// + /// The position of the stream pointer. + /// + /// + /// + /// Setting this property always throws a . Reading will return the total bytes + /// written out, if used in writing, or the total bytes read in, if used in + /// reading. The count may refer to compressed bytes or uncompressed bytes, + /// depending on how you've used the stream. + /// + public override long Position + { + get + { + if (this._baseStream._streamMode == BestHTTP.Decompression.Zlib.ZlibBaseStream.StreamMode.Writer) + return this._baseStream._z.TotalBytesOut + _headerByteCount; + if (this._baseStream._streamMode == BestHTTP.Decompression.Zlib.ZlibBaseStream.StreamMode.Reader) + return this._baseStream._z.TotalBytesIn + this._baseStream._gzipHeaderByteCount; + return 0; + } + + set { throw new NotImplementedException(); } + } + + /// + /// Read and decompress data from the source stream. + /// + /// + /// + /// With a GZipStream, decompression is done through reading. + /// + /// + /// + /// + /// byte[] working = new byte[WORKING_BUFFER_SIZE]; + /// using (System.IO.Stream input = System.IO.File.OpenRead(_CompressedFile)) + /// { + /// using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) + /// { + /// using (var output = System.IO.File.Create(_DecompressedFile)) + /// { + /// int n; + /// while ((n= decompressor.Read(working, 0, working.Length)) !=0) + /// { + /// output.Write(working, 0, n); + /// } + /// } + /// } + /// } + /// + /// + /// The buffer into which the decompressed data should be placed. + /// the offset within that data array to put the first byte read. + /// the number of bytes to read. + /// the number of bytes actually read + public override int Read(byte[] buffer, int offset, int count) + { + if (_disposed) throw new ObjectDisposedException("GZipStream"); + int n = _baseStream.Read(buffer, offset, count); + + // Console.WriteLine("GZipStream::Read(buffer, off({0}), c({1}) = {2}", offset, count, n); + // Console.WriteLine( Util.FormatByteArray(buffer, offset, n) ); + + if (!_firstReadDone) + { + _firstReadDone = true; + FileName = _baseStream._GzipFileName; + Comment = _baseStream._GzipComment; + } + return n; + } + + + + /// + /// Calling this method always throws a . + /// + /// irrelevant; it will always throw! + /// irrelevant; it will always throw! + /// irrelevant! + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotImplementedException(); + } + + /// + /// Calling this method always throws a . + /// + /// irrelevant; this method will always throw! + public override void SetLength(long value) + { + //throw new NotImplementedException(); + _baseStream.SetLength(value); + } + + /// + /// Write data to the stream. + /// + /// + /// + /// + /// If you wish to use the GZipStream to compress data while writing, + /// you can create a GZipStream with CompressionMode.Compress, and a + /// writable output stream. Then call Write() on that GZipStream, + /// providing uncompressed data as input. The data sent to the output stream + /// will be the compressed form of the data written. + /// + /// + /// + /// A GZipStream can be used for Read() or Write(), but not + /// both. Writing implies compression. Reading implies decompression. + /// + /// + /// + /// The buffer holding data to write to the stream. + /// the offset within that data array to find the first byte to write. + /// the number of bytes to write. + public override void Write(byte[] buffer, int offset, int count) + { + if (_disposed) throw new ObjectDisposedException("GZipStream"); + if (_baseStream._streamMode == BestHTTP.Decompression.Zlib.ZlibBaseStream.StreamMode.Undefined) + { + //Console.WriteLine("GZipStream: First write"); + if (_baseStream._wantCompress) + { + // first write in compression, therefore, emit the GZIP header + _headerByteCount = EmitHeader(); + } + else + { + throw new InvalidOperationException(); + } + } + + _baseStream.Write(buffer, offset, count); + } + #endregion + + + internal static readonly System.DateTime _unixEpoch = new System.DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); + internal static readonly System.Text.Encoding iso8859dash1 = System.Text.Encoding.GetEncoding("iso-8859-1"); + + + private int EmitHeader() + { + byte[] commentBytes = (Comment == null) ? null : iso8859dash1.GetBytes(Comment); + byte[] filenameBytes = (FileName == null) ? null : iso8859dash1.GetBytes(FileName); + + int cbLength = (Comment == null) ? 0 : commentBytes.Length + 1; + int fnLength = (FileName == null) ? 0 : filenameBytes.Length + 1; + + int bufferLength = 10 + cbLength + fnLength; + byte[] header = BufferPool.Get(bufferLength, true); + int i = 0; + // ID + header[i++] = 0x1F; + header[i++] = 0x8B; + + // compression method + header[i++] = 8; + byte flag = 0; + if (Comment != null) + flag ^= 0x10; + if (FileName != null) + flag ^= 0x8; + + // flag + header[i++] = flag; + + // mtime + if (!LastModified.HasValue) LastModified = DateTime.Now; + System.TimeSpan delta = LastModified.Value - _unixEpoch; + Int32 timet = (Int32)delta.TotalSeconds; + Array.Copy(BitConverter.GetBytes(timet), 0, header, i, 4); + i += 4; + + // xflg + header[i++] = 0; // this field is totally useless + // OS + header[i++] = 0xFF; // 0xFF == unspecified + + // extra field length - only if FEXTRA is set, which it is not. + //header[i++]= 0; + //header[i++]= 0; + + // filename + if (fnLength != 0) + { + Array.Copy(filenameBytes, 0, header, i, fnLength - 1); + i += fnLength - 1; + header[i++] = 0; // terminate + } + + // comment + if (cbLength != 0) + { + Array.Copy(commentBytes, 0, header, i, cbLength - 1); + i += cbLength - 1; + header[i++] = 0; // terminate + } + + _baseStream._stream.Write(header, 0, i); + int headerLength = header.Length; + + BufferPool.Release(header); + + return headerLength; // bytes written + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/GZipStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/GZipStream.cs.meta new file mode 100644 index 000000000..7d859b36a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/GZipStream.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: be79ee53ca164d04cbbb654f7de657f5 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/IDecompressor.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/IDecompressor.cs new file mode 100644 index 000000000..d81ea55c1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/IDecompressor.cs @@ -0,0 +1,102 @@ +using System; +using System.IO; + +using BestHTTP.Logger; + +namespace BestHTTP.Decompression +{ + public struct DecompressedData + { + public readonly byte[] Data; + public readonly int Length; + + internal DecompressedData(byte[] data, int length) + { + this.Data = data; + this.Length = length; + } + } + + public interface IDecompressor : IDisposable + { + DecompressedData Decompress(byte[] data, int offset, int count, bool forceDecompress = false, bool dataCanBeLarger = false); + } + + public static class DecompressorFactory + { + public const int MinLengthToDecompress = 256; + + public static void SetupHeaders(HTTPRequest request) + { + if (!request.HasHeader("Accept-Encoding")) + { +#if BESTHTTP_DISABLE_GZIP + request.AddHeader("Accept-Encoding", "identity"); +#elif NET_STANDARD_2_1 || UNITY_2021_2_OR_NEWER + if (BrotliDecompressor.IsSupported()) + request.AddHeader("Accept-Encoding", "br, gzip, identity"); + else + request.AddHeader("Accept-Encoding", "gzip, identity"); +#else + request.AddHeader("Accept-Encoding", "gzip, identity"); +#endif + } + } + + public static IDecompressor GetDecompressor(string encoding, LoggingContext context) + { + if (encoding == null) + return null; + + switch (encoding.ToLowerInvariant()) + { + case "identity": + case "utf-8": + break; + + case "gzip": return new Decompression.GZipDecompressor(MinLengthToDecompress); + +#if NET_STANDARD_2_1 || UNITY_2021_2_OR_NEWER + case "br": + if (Decompression.BrotliDecompressor.IsSupported()) + return new Decompression.BrotliDecompressor(MinLengthToDecompress); + else + goto default; +#endif + default: + HTTPManager.Logger.Warning("DecompressorFactory", "GetDecompressor - unsupported encoding: " + encoding, context); + break; + } + + return null; + } + + /// + /// Returns with a properly set up GZip/Deflate/Brotli stream, or null if the encoding is null or compiled for WebGl. + /// + public static Stream GetDecoderStream(Stream streamToDecode, string encoding) + { + if (streamToDecode == null) + throw new ArgumentNullException(nameof(streamToDecode)); + + if (string.IsNullOrEmpty(encoding)) + return null; + + switch (encoding) + { +#if !UNITY_WEBGL || UNITY_EDITOR + case "gzip": return new Decompression.Zlib.GZipStream(streamToDecode, Decompression.Zlib.CompressionMode.Decompress); + case "deflate": return new Decompression.Zlib.DeflateStream(streamToDecode, Decompression.Zlib.CompressionMode.Decompress); +#if NET_STANDARD_2_1 || UNITY_2021_2_OR_NEWER + case "br": return new System.IO.Compression.BrotliStream(streamToDecode, System.IO.Compression.CompressionMode.Decompress, true); +#endif +#endif + //identity, utf-8, etc. Or compiled for WebGl. + default: + // Do not copy from one stream to an other, just return with the raw bytes + return null; + } + } + } + +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/IDecompressor.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/IDecompressor.cs.meta new file mode 100644 index 000000000..920090d36 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/IDecompressor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2551f53f7db6a5a4994fea7e611323d1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/InfTree.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/InfTree.cs new file mode 100644 index 000000000..3fdb42530 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/InfTree.cs @@ -0,0 +1,436 @@ +// Inftree.cs +// ------------------------------------------------------------------ +// +// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation. +// All rights reserved. +// +// This code module is part of DotNetZip, a zipfile class library. +// +// ------------------------------------------------------------------ +// +// This code is licensed under the Microsoft Public License. +// See the file License.txt for the license details. +// More info on: http://dotnetzip.codeplex.com +// +// ------------------------------------------------------------------ +// +// last saved (in emacs): +// Time-stamp: <2009-October-28 12:43:54> +// +// ------------------------------------------------------------------ +// +// This module defines classes used in decompression. This code is derived +// from the jzlib implementation of zlib. In keeping with the license for jzlib, +// the copyright to that code is below. +// +// ------------------------------------------------------------------ +// +// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. 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. +// +// 3. The names of the authors may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT, +// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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. +// +// ----------------------------------------------------------------------- +// +// This program is based on zlib-1.1.3; credit to authors +// Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) +// and contributors of zlib. +// +// ----------------------------------------------------------------------- + + + +using System; +namespace BestHTTP.Decompression.Zlib +{ + + sealed class InfTree + { + + private const int MANY = 1440; + + private const int Z_OK = 0; + private const int Z_STREAM_END = 1; + private const int Z_NEED_DICT = 2; + private const int Z_ERRNO = - 1; + private const int Z_STREAM_ERROR = - 2; + private const int Z_DATA_ERROR = - 3; + private const int Z_MEM_ERROR = - 4; + private const int Z_BUF_ERROR = - 5; + private const int Z_VERSION_ERROR = - 6; + + internal const int fixed_bl = 9; + internal const int fixed_bd = 5; + + //UPGRADE_NOTE: Final was removed from the declaration of 'fixed_tl'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'" + internal static readonly int[] fixed_tl = new int[]{96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, 192, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 160, 0, 8, 0, 0, 8, 128, 0, 8, 64, 0, 9, 224, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 144, 83, 7, 59, 0, 8, 120, 0, 8, 56, 0, 9, 208, 81, 7, 17, 0, 8, 104, 0, 8, 40, 0, 9, 176, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 240, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 200, 81, 7, 13, 0, 8, 100, 0, 8, 36, 0, 9, 168, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 232, 80, 7, 8, 0, 8, 92, 0, 8, 28, 0, 9, 152, 84, 7, 83, 0, 8, 124, 0, 8, 60, 0, 9, 216, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 184, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, 248, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, 35, 0, 8, 114, 0, 8, 50, 0, 9, 196, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 164, 0, 8, 2, 0, 8, 130, 0, 8, 66, 0, 9, 228, 80, 7, 7, 0, 8, 90, 0, 8, 26, 0, 9, 148, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 212, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, 180, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 244, 80, 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 204, 81, 7, 15, 0, 8, 102, 0, 8, 38, 0, 9, 172, 0, 8, 6, 0, 8, 134, 0, 8, 70, 0, 9, 236, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 156, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, 220, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 188, 0, 8, 14, 0, 8, 142, 0, 8, 78, 0, 9, 252, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, 8, 113, 0, 8, 49, 0, 9, 194, 80, 7, 10, 0, 8, 97, 0, 8, 33, 0, 9, 162, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 226, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, 146, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 210, 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 178, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 242, 80, 7, 4, 0, 8, 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, 0, 8, 53, 0, 9, 202, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 170, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, 234, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 154, 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 218, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 186, + 0, 8, 13, 0, 8, 141, 0, 8, 77, 0, 9, 250, 80, 7, 3, 0, 8, 83, 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 198, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, 166, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 230, 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 150, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 214, 82, 7, 19, 0, 8, 107, 0, 8, 43, 0, 9, 182, 0, 8, 11, 0, 8, 139, 0, 8, 75, 0, 9, 246, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, 206, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 174, 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 238, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 158, 84, 7, 99, 0, 8, 127, 0, 8, 63, 0, 9, 222, 82, 7, 27, 0, 8, 111, 0, 8, 47, 0, 9, 190, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 254, 96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, 193, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 161, 0, 8, 0, 0, 8, 128, 0, 8, 64, 0, 9, 225, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 145, 83, 7, 59, 0, 8, 120, 0, 8, 56, 0, 9, 209, 81, 7, 17, 0, 8, 104, 0, 8, 40, 0, 9, 177, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 241, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 201, 81, 7, 13, 0, 8, 100, 0, 8, 36, 0, 9, 169, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 233, 80, 7, 8, 0, 8, 92, 0, 8, 28, 0, 9, 153, 84, 7, 83, 0, 8, 124, 0, 8, 60, 0, 9, 217, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 185, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, 249, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, 35, 0, 8, 114, 0, 8, 50, 0, 9, 197, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 165, 0, 8, 2, 0, 8, 130, 0, 8, 66, 0, 9, 229, 80, 7, 7, 0, 8, 90, 0, 8, 26, 0, 9, 149, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 213, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, 181, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 245, 80, 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 205, 81, 7, 15, 0, 8, 102, 0, 8, 38, 0, 9, 173, 0, 8, 6, 0, 8, 134, 0, 8, 70, 0, 9, 237, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 157, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, 221, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 189, 0, 8, + 14, 0, 8, 142, 0, 8, 78, 0, 9, 253, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, 8, 113, 0, 8, 49, 0, 9, 195, 80, 7, 10, 0, 8, 97, 0, 8, 33, 0, 9, 163, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 227, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, 147, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 211, 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 179, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 243, 80, 7, 4, 0, 8, 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, 0, 8, 53, 0, 9, 203, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 171, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, 235, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 155, 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 219, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 187, 0, 8, 13, 0, 8, 141, 0, 8, 77, 0, 9, 251, 80, 7, 3, 0, 8, 83, 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 199, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, 167, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 231, 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 151, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 215, 82, 7, 19, 0, 8, 107, 0, 8, 43, 0, 9, 183, 0, 8, 11, 0, 8, 139, 0, 8, 75, 0, 9, 247, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, 207, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 175, 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 239, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 159, 84, 7, 99, 0, 8, 127, 0, 8, 63, 0, 9, 223, 82, 7, 27, 0, 8, 111, 0, 8, 47, 0, 9, 191, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 255}; + //UPGRADE_NOTE: Final was removed from the declaration of 'fixed_td'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'" + internal static readonly int[] fixed_td = new int[]{80, 5, 1, 87, 5, 257, 83, 5, 17, 91, 5, 4097, 81, 5, 5, 89, 5, 1025, 85, 5, 65, 93, 5, 16385, 80, 5, 3, 88, 5, 513, 84, 5, 33, 92, 5, 8193, 82, 5, 9, 90, 5, 2049, 86, 5, 129, 192, 5, 24577, 80, 5, 2, 87, 5, 385, 83, 5, 25, 91, 5, 6145, 81, 5, 7, 89, 5, 1537, 85, 5, 97, 93, 5, 24577, 80, 5, 4, 88, 5, 769, 84, 5, 49, 92, 5, 12289, 82, 5, 13, 90, 5, 3073, 86, 5, 193, 192, 5, 24577}; + + // Tables for deflate from PKZIP's appnote.txt. + //UPGRADE_NOTE: Final was removed from the declaration of 'cplens'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'" + internal static readonly int[] cplens = new int[]{3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; + + // see note #13 above about 258 + //UPGRADE_NOTE: Final was removed from the declaration of 'cplext'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'" + internal static readonly int[] cplext = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112}; + + //UPGRADE_NOTE: Final was removed from the declaration of 'cpdist'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'" + internal static readonly int[] cpdist = new int[]{1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577}; + + //UPGRADE_NOTE: Final was removed from the declaration of 'cpdext'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'" + internal static readonly int[] cpdext = new int[]{0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13}; + + // If BMAX needs to be larger than 16, then h and x[] should be uLong. + internal const int BMAX = 15; // maximum bit length of any code + + internal int[] hn = null; // hufts used in space + internal int[] v = null; // work area for huft_build + internal int[] c = null; // bit length count table + internal int[] r = null; // table entity for structure assignment + internal int[] u = null; // table stack + internal int[] x = null; // bit offsets, then code stack + + private int huft_build(int[] b, int bindex, int n, int s, int[] d, int[] e, int[] t, int[] m, int[] hp, int[] hn, int[] v) + { + // Given a list of code lengths and a maximum table size, make a set of + // tables to decode that set of codes. Return Z_OK on success, Z_BUF_ERROR + // if the given code set is incomplete (the tables are still built in this + // case), Z_DATA_ERROR if the input is invalid (an over-subscribed set of + // lengths), or Z_MEM_ERROR if not enough memory. + + int a; // counter for codes of length k + int f; // i repeats in table every f entries + int g; // maximum code length + int h; // table level + int i; // counter, current code + int j; // counter + int k; // number of bits in current code + int l; // bits per table (returned in m) + int mask; // (1 << w) - 1, to avoid cc -O bug on HP + int p; // pointer into c[], b[], or v[] + int q; // points to current table + int w; // bits before this table == (l * h) + int xp; // pointer into x + int y; // number of dummy codes added + int z; // number of entries in current table + + // Generate counts for each bit length + + p = 0; i = n; + do + { + c[b[bindex + p]]++; p++; i--; // assume all entries <= BMAX + } + while (i != 0); + + if (c[0] == n) + { + // null input--all zero length codes + t[0] = - 1; + m[0] = 0; + return Z_OK; + } + + // Find minimum and maximum length, bound *m by those + l = m[0]; + for (j = 1; j <= BMAX; j++) + if (c[j] != 0) + break; + k = j; // minimum code length + if (l < j) + { + l = j; + } + for (i = BMAX; i != 0; i--) + { + if (c[i] != 0) + break; + } + g = i; // maximum code length + if (l > i) + { + l = i; + } + m[0] = l; + + // Adjust last length count to fill out codes, if needed + for (y = 1 << j; j < i; j++, y <<= 1) + { + if ((y -= c[j]) < 0) + { + return Z_DATA_ERROR; + } + } + if ((y -= c[i]) < 0) + { + return Z_DATA_ERROR; + } + c[i] += y; + + // Generate starting offsets into the value table for each length + x[1] = j = 0; + p = 1; xp = 2; + while (--i != 0) + { + // note that i == g from above + x[xp] = (j += c[p]); + xp++; + p++; + } + + // Make a table of values in order of bit lengths + i = 0; p = 0; + do + { + if ((j = b[bindex + p]) != 0) + { + v[x[j]++] = i; + } + p++; + } + while (++i < n); + n = x[g]; // set n to length of v + + // Generate the Huffman codes and for each, make the table entries + x[0] = i = 0; // first Huffman code is zero + p = 0; // grab values in bit order + h = - 1; // no tables yet--level -1 + w = - l; // bits decoded == (l * h) + u[0] = 0; // just to keep compilers happy + q = 0; // ditto + z = 0; // ditto + + // go through the bit lengths (k already is bits in shortest code) + for (; k <= g; k++) + { + a = c[k]; + while (a-- != 0) + { + // here i is the Huffman code of length k bits for value *p + // make tables up to required level + while (k > w + l) + { + h++; + w += l; // previous table always l bits + // compute minimum size table less than or equal to l bits + z = g - w; + z = (z > l)?l:z; // table size upper limit + if ((f = 1 << (j = k - w)) > a + 1) + { + // try a k-w bit table + // too few codes for k-w bit table + f -= (a + 1); // deduct codes from patterns left + xp = k; + if (j < z) + { + while (++j < z) + { + // try smaller tables up to z bits + if ((f <<= 1) <= c[++xp]) + break; // enough codes to use up j bits + f -= c[xp]; // else deduct codes from patterns + } + } + } + z = 1 << j; // table entries for j-bit table + + // allocate new table + if (hn[0] + z > MANY) + { + // (note: doesn't matter for fixed) + return Z_DATA_ERROR; // overflow of MANY + } + u[h] = q = hn[0]; // DEBUG + hn[0] += z; + + // connect to last table, if there is one + if (h != 0) + { + x[h] = i; // save pattern for backing up + r[0] = (sbyte) j; // bits in this table + r[1] = (sbyte) l; // bits to dump before this table + j = SharedUtils.URShift(i, (w - l)); + r[2] = (int) (q - u[h - 1] - j); // offset to this table + Array.Copy(r, 0, hp, (u[h - 1] + j) * 3, 3); // connect to last table + } + else + { + t[0] = q; // first table is returned result + } + } + + // set up table entity in r + r[1] = (sbyte) (k - w); + if (p >= n) + { + r[0] = 128 + 64; // out of values--invalid code + } + else if (v[p] < s) + { + r[0] = (sbyte) (v[p] < 256?0:32 + 64); // 256 is end-of-block + r[2] = v[p++]; // simple code is just the value + } + else + { + r[0] = (sbyte) (e[v[p] - s] + 16 + 64); // non-simple--look up in lists + r[2] = d[v[p++] - s]; + } + + // fill code-like entries with r + f = 1 << (k - w); + for (j = SharedUtils.URShift(i, w); j < z; j += f) + { + Array.Copy(r, 0, hp, (q + j) * 3, 3); + } + + // backwards increment the k-bit code i + for (j = 1 << (k - 1); (i & j) != 0; j = SharedUtils.URShift(j, 1)) + { + i ^= j; + } + i ^= j; + + // backup over finished tables + mask = (1 << w) - 1; // needed on HP, cc -O bug + while ((i & mask) != x[h]) + { + h--; // don't need to update q + w -= l; + mask = (1 << w) - 1; + } + } + } + // Return Z_BUF_ERROR if we were given an incomplete table + return y != 0 && g != 1?Z_BUF_ERROR:Z_OK; + } + + internal int inflate_trees_bits(int[] c, int[] bb, int[] tb, int[] hp, ZlibCodec z) + { + int result; + initWorkArea(19); + hn[0] = 0; + result = huft_build(c, 0, 19, 19, null, null, tb, bb, hp, hn, v); + + if (result == Z_DATA_ERROR) + { + z.Message = "oversubscribed dynamic bit lengths tree"; + } + else if (result == Z_BUF_ERROR || bb[0] == 0) + { + z.Message = "incomplete dynamic bit lengths tree"; + result = Z_DATA_ERROR; + } + return result; + } + + internal int inflate_trees_dynamic(int nl, int nd, int[] c, int[] bl, int[] bd, int[] tl, int[] td, int[] hp, ZlibCodec z) + { + int result; + + // build literal/length tree + initWorkArea(288); + hn[0] = 0; + result = huft_build(c, 0, nl, 257, cplens, cplext, tl, bl, hp, hn, v); + if (result != Z_OK || bl[0] == 0) + { + if (result == Z_DATA_ERROR) + { + z.Message = "oversubscribed literal/length tree"; + } + else if (result != Z_MEM_ERROR) + { + z.Message = "incomplete literal/length tree"; + result = Z_DATA_ERROR; + } + return result; + } + + // build distance tree + initWorkArea(288); + result = huft_build(c, nl, nd, 0, cpdist, cpdext, td, bd, hp, hn, v); + + if (result != Z_OK || (bd[0] == 0 && nl > 257)) + { + if (result == Z_DATA_ERROR) + { + z.Message = "oversubscribed distance tree"; + } + else if (result == Z_BUF_ERROR) + { + z.Message = "incomplete distance tree"; + result = Z_DATA_ERROR; + } + else if (result != Z_MEM_ERROR) + { + z.Message = "empty distance tree with lengths"; + result = Z_DATA_ERROR; + } + return result; + } + + return Z_OK; + } + + internal static int inflate_trees_fixed(int[] bl, int[] bd, int[][] tl, int[][] td, ZlibCodec z) + { + bl[0] = fixed_bl; + bd[0] = fixed_bd; + tl[0] = fixed_tl; + td[0] = fixed_td; + return Z_OK; + } + + private void initWorkArea(int vsize) + { + if (hn == null) + { + hn = new int[1]; + v = new int[vsize]; + c = new int[BMAX + 1]; + r = new int[3]; + u = new int[BMAX]; + x = new int[BMAX + 1]; + } + else + { + if (v.Length < vsize) + { + v = new int[vsize]; + } + Array.Clear(v,0,vsize); + Array.Clear(c,0,BMAX+1); + r[0]=0; r[1]=0; r[2]=0; + // for(int i=0; i +// +// ------------------------------------------------------------------ +// +// This module defines classes for decompression. This code is derived +// from the jzlib implementation of zlib, but significantly modified. +// The object model is not the same, and many of the behaviors are +// different. Nonetheless, in keeping with the license for jzlib, I am +// reproducing the copyright to that code here. +// +// ------------------------------------------------------------------ +// +// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. 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. +// +// 3. The names of the authors may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT, +// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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. +// +// ----------------------------------------------------------------------- +// +// This program is based on zlib-1.1.3; credit to authors +// Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) +// and contributors of zlib. +// +// ----------------------------------------------------------------------- + + +using BestHTTP.PlatformSupport.Memory; +using System; +namespace BestHTTP.Decompression.Zlib +{ + sealed class InflateBlocks + { + private const int MANY = 1440; + + // Table for deflate from PKZIP's appnote.txt. + internal static readonly int[] border = new int[] + { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; + + private enum InflateBlockMode + { + TYPE = 0, // get type bits (3, including end bit) + LENS = 1, // get lengths for stored + STORED = 2, // processing stored block + TABLE = 3, // get table lengths + BTREE = 4, // get bit lengths tree for a dynamic block + DTREE = 5, // get length, distance trees for a dynamic block + CODES = 6, // processing fixed or dynamic block + DRY = 7, // output remaining window bytes + DONE = 8, // finished last block, done + BAD = 9, // ot a data error--stuck here + } + + private InflateBlockMode mode; // current inflate_block mode + + internal int left; // if STORED, bytes left to copy + + internal int table; // table lengths (14 bits) + internal int index; // index into blens (or border) + internal int[] blens; // bit lengths of codes + internal int[] bb = new int[1]; // bit length tree depth + internal int[] tb = new int[1]; // bit length decoding tree + + internal InflateCodes codes = new InflateCodes(); // if CODES, current state + + internal int last; // true if this block is the last block + + internal ZlibCodec _codec; // pointer back to this zlib stream + + // mode independent information + internal int bitk; // bits in bit buffer + internal int bitb; // bit buffer + internal int[] hufts; // single malloc for tree space + internal byte[] window; // sliding window + internal int end; // one byte after sliding window + internal int readAt; // window read pointer + internal int writeAt; // window write pointer + internal System.Object checkfn; // check function + internal uint check; // check on output + + internal InfTree inftree = new InfTree(); + + internal InflateBlocks(ZlibCodec codec, System.Object checkfn, int w) + { + _codec = codec; + hufts = new int[MANY * 3]; + window = BufferPool.Get(w, true); + end = w; + this.checkfn = checkfn; + mode = InflateBlockMode.TYPE; + Reset(); + } + + internal uint Reset() + { + uint oldCheck = check; + mode = InflateBlockMode.TYPE; + bitk = 0; + bitb = 0; + readAt = writeAt = 0; + + if (checkfn != null) + _codec._Adler32 = check = Adler.Adler32(0, null, 0, 0); + return oldCheck; + } + + + internal int Process(int r) + { + int t; // temporary storage + int b; // bit buffer + int k; // bits in bit buffer + int p; // input data pointer + int n; // bytes available there + int q; // output window write pointer + int m; // bytes to end of window or read pointer + + // copy input/output information to locals (UPDATE macro restores) + + p = _codec.NextIn; + n = _codec.AvailableBytesIn; + b = bitb; + k = bitk; + + q = writeAt; + m = (int)(q < readAt ? readAt - q - 1 : end - q); + + + // process input based on current state + while (true) + { + switch (mode) + { + case InflateBlockMode.TYPE: + + while (k < (3)) + { + if (n != 0) + { + r = ZlibConstants.Z_OK; + } + else + { + bitb = b; bitk = k; + _codec.AvailableBytesIn = n; + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + writeAt = q; + return Flush(r); + } + + n--; + b |= (_codec.InputBuffer[p++] & 0xff) << k; + k += 8; + } + t = (int)(b & 7); + last = t & 1; + + switch ((uint)t >> 1) + { + case 0: // stored + b >>= 3; k -= (3); + t = k & 7; // go to byte boundary + b >>= t; k -= t; + mode = InflateBlockMode.LENS; // get length of stored block + break; + + case 1: // fixed + int[] bl = new int[1]; + int[] bd = new int[1]; + int[][] tl = new int[1][]; + int[][] td = new int[1][]; + InfTree.inflate_trees_fixed(bl, bd, tl, td, _codec); + codes.Init(bl[0], bd[0], tl[0], 0, td[0], 0); + b >>= 3; k -= 3; + mode = InflateBlockMode.CODES; + break; + + case 2: // dynamic + b >>= 3; k -= 3; + mode = InflateBlockMode.TABLE; + break; + + case 3: // illegal + b >>= 3; k -= 3; + mode = InflateBlockMode.BAD; + _codec.Message = "invalid block type"; + r = ZlibConstants.Z_DATA_ERROR; + bitb = b; bitk = k; + _codec.AvailableBytesIn = n; + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + writeAt = q; + return Flush(r); + } + break; + + case InflateBlockMode.LENS: + + while (k < (32)) + { + if (n != 0) + { + r = ZlibConstants.Z_OK; + } + else + { + bitb = b; bitk = k; + _codec.AvailableBytesIn = n; + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + writeAt = q; + return Flush(r); + } + ; + n--; + b |= (_codec.InputBuffer[p++] & 0xff) << k; + k += 8; + } + + if ( ( ((~b)>>16) & 0xffff) != (b & 0xffff)) + { + mode = InflateBlockMode.BAD; + _codec.Message = "invalid stored block lengths"; + r = ZlibConstants.Z_DATA_ERROR; + + bitb = b; bitk = k; + _codec.AvailableBytesIn = n; + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + writeAt = q; + return Flush(r); + } + left = (b & 0xffff); + b = k = 0; // dump bits + mode = left != 0 ? InflateBlockMode.STORED : (last != 0 ? InflateBlockMode.DRY : InflateBlockMode.TYPE); + break; + + case InflateBlockMode.STORED: + if (n == 0) + { + bitb = b; bitk = k; + _codec.AvailableBytesIn = n; + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + writeAt = q; + return Flush(r); + } + + if (m == 0) + { + if (q == end && readAt != 0) + { + q = 0; m = (int)(q < readAt ? readAt - q - 1 : end - q); + } + if (m == 0) + { + writeAt = q; + r = Flush(r); + q = writeAt; m = (int)(q < readAt ? readAt - q - 1 : end - q); + if (q == end && readAt != 0) + { + q = 0; m = (int)(q < readAt ? readAt - q - 1 : end - q); + } + if (m == 0) + { + bitb = b; bitk = k; + _codec.AvailableBytesIn = n; + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + writeAt = q; + return Flush(r); + } + } + } + r = ZlibConstants.Z_OK; + + t = left; + if (t > n) + t = n; + if (t > m) + t = m; + Array.Copy(_codec.InputBuffer, p, window, q, t); + p += t; n -= t; + q += t; m -= t; + if ((left -= t) != 0) + break; + mode = last != 0 ? InflateBlockMode.DRY : InflateBlockMode.TYPE; + break; + + case InflateBlockMode.TABLE: + + while (k < (14)) + { + if (n != 0) + { + r = ZlibConstants.Z_OK; + } + else + { + bitb = b; bitk = k; + _codec.AvailableBytesIn = n; + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + writeAt = q; + return Flush(r); + } + + n--; + b |= (_codec.InputBuffer[p++] & 0xff) << k; + k += 8; + } + + table = t = (b & 0x3fff); + if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29) + { + mode = InflateBlockMode.BAD; + _codec.Message = "too many length or distance symbols"; + r = ZlibConstants.Z_DATA_ERROR; + + bitb = b; bitk = k; + _codec.AvailableBytesIn = n; + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + writeAt = q; + return Flush(r); + } + t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f); + if (blens == null || blens.Length < t) + { + blens = new int[t]; + } + else + { + Array.Clear(blens, 0, t); + // for (int i = 0; i < t; i++) + // { + // blens[i] = 0; + // } + } + + b >>= 14; + k -= 14; + + + index = 0; + mode = InflateBlockMode.BTREE; + goto case InflateBlockMode.BTREE; + + case InflateBlockMode.BTREE: + while (index < 4 + (table >> 10)) + { + while (k < (3)) + { + if (n != 0) + { + r = ZlibConstants.Z_OK; + } + else + { + bitb = b; bitk = k; + _codec.AvailableBytesIn = n; + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + writeAt = q; + return Flush(r); + } + + n--; + b |= (_codec.InputBuffer[p++] & 0xff) << k; + k += 8; + } + + blens[border[index++]] = b & 7; + + b >>= 3; k -= 3; + } + + while (index < 19) + { + blens[border[index++]] = 0; + } + + bb[0] = 7; + t = inftree.inflate_trees_bits(blens, bb, tb, hufts, _codec); + if (t != ZlibConstants.Z_OK) + { + r = t; + if (r == ZlibConstants.Z_DATA_ERROR) + { + blens = null; + mode = InflateBlockMode.BAD; + } + + bitb = b; bitk = k; + _codec.AvailableBytesIn = n; + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + writeAt = q; + return Flush(r); + } + + index = 0; + mode = InflateBlockMode.DTREE; + goto case InflateBlockMode.DTREE; + + case InflateBlockMode.DTREE: + while (true) + { + t = table; + if (!(index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))) + { + break; + } + + int i, j, c; + + t = bb[0]; + + while (k < t) + { + if (n != 0) + { + r = ZlibConstants.Z_OK; + } + else + { + bitb = b; bitk = k; + _codec.AvailableBytesIn = n; + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + writeAt = q; + return Flush(r); + } + + n--; + b |= (_codec.InputBuffer[p++] & 0xff) << k; + k += 8; + } + + t = hufts[(tb[0] + (b & InternalInflateConstants.InflateMask[t])) * 3 + 1]; + c = hufts[(tb[0] + (b & InternalInflateConstants.InflateMask[t])) * 3 + 2]; + + if (c < 16) + { + b >>= t; k -= t; + blens[index++] = c; + } + else + { + // c == 16..18 + i = c == 18 ? 7 : c - 14; + j = c == 18 ? 11 : 3; + + while (k < (t + i)) + { + if (n != 0) + { + r = ZlibConstants.Z_OK; + } + else + { + bitb = b; bitk = k; + _codec.AvailableBytesIn = n; + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + writeAt = q; + return Flush(r); + } + + n--; + b |= (_codec.InputBuffer[p++] & 0xff) << k; + k += 8; + } + + b >>= t; k -= t; + + j += (b & InternalInflateConstants.InflateMask[i]); + + b >>= i; k -= i; + + i = index; + t = table; + if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) || (c == 16 && i < 1)) + { + blens = null; + mode = InflateBlockMode.BAD; + _codec.Message = "invalid bit length repeat"; + r = ZlibConstants.Z_DATA_ERROR; + + bitb = b; bitk = k; + _codec.AvailableBytesIn = n; + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + writeAt = q; + return Flush(r); + } + + c = (c == 16) ? blens[i-1] : 0; + do + { + blens[i++] = c; + } + while (--j != 0); + index = i; + } + } + + tb[0] = -1; + { + int[] bl = new int[] { 9 }; // must be <= 9 for lookahead assumptions + int[] bd = new int[] { 6 }; // must be <= 9 for lookahead assumptions + int[] tl = new int[1]; + int[] td = new int[1]; + + t = table; + t = inftree.inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f), blens, bl, bd, tl, td, hufts, _codec); + + if (t != ZlibConstants.Z_OK) + { + if (t == ZlibConstants.Z_DATA_ERROR) + { + blens = null; + mode = InflateBlockMode.BAD; + } + r = t; + + bitb = b; bitk = k; + _codec.AvailableBytesIn = n; + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + writeAt = q; + return Flush(r); + } + codes.Init(bl[0], bd[0], hufts, tl[0], hufts, td[0]); + } + mode = InflateBlockMode.CODES; + goto case InflateBlockMode.CODES; + + case InflateBlockMode.CODES: + bitb = b; bitk = k; + _codec.AvailableBytesIn = n; + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + writeAt = q; + + r = codes.Process(this, r); + if (r != ZlibConstants.Z_STREAM_END) + { + return Flush(r); + } + + r = ZlibConstants.Z_OK; + p = _codec.NextIn; + n = _codec.AvailableBytesIn; + b = bitb; + k = bitk; + q = writeAt; + m = (int)(q < readAt ? readAt - q - 1 : end - q); + + if (last == 0) + { + mode = InflateBlockMode.TYPE; + break; + } + mode = InflateBlockMode.DRY; + goto case InflateBlockMode.DRY; + + case InflateBlockMode.DRY: + writeAt = q; + r = Flush(r); + q = writeAt; m = (int)(q < readAt ? readAt - q - 1 : end - q); + if (readAt != writeAt) + { + bitb = b; bitk = k; + _codec.AvailableBytesIn = n; + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + writeAt = q; + return Flush(r); + } + mode = InflateBlockMode.DONE; + goto case InflateBlockMode.DONE; + + case InflateBlockMode.DONE: + r = ZlibConstants.Z_STREAM_END; + bitb = b; + bitk = k; + _codec.AvailableBytesIn = n; + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + writeAt = q; + return Flush(r); + + case InflateBlockMode.BAD: + r = ZlibConstants.Z_DATA_ERROR; + + bitb = b; bitk = k; + _codec.AvailableBytesIn = n; + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + writeAt = q; + return Flush(r); + + + default: + r = ZlibConstants.Z_STREAM_ERROR; + + bitb = b; bitk = k; + _codec.AvailableBytesIn = n; + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + writeAt = q; + return Flush(r); + } + } + } + + + internal void Free() + { + Reset(); + BufferPool.Release(window); + window = null; + hufts = null; + } + + internal void SetDictionary(byte[] d, int start, int n) + { + Array.Copy(d, start, window, 0, n); + readAt = writeAt = n; + } + + // Returns true if inflate is currently at the end of a block generated + // by Z_SYNC_FLUSH or Z_FULL_FLUSH. + internal int SyncPoint() + { + return mode == InflateBlockMode.LENS ? 1 : 0; + } + + // copy as much as possible from the sliding window to the output area + internal int Flush(int r) + { + int nBytes; + + for (int pass=0; pass < 2; pass++) + { + if (pass==0) + { + // compute number of bytes to copy as far as end of window + nBytes = (int)((readAt <= writeAt ? writeAt : end) - readAt); + } + else + { + // compute bytes to copy + nBytes = writeAt - readAt; + } + + // workitem 8870 + if (nBytes == 0) + { + if (r == ZlibConstants.Z_BUF_ERROR) + r = ZlibConstants.Z_OK; + return r; + } + + if (nBytes > _codec.AvailableBytesOut) + nBytes = _codec.AvailableBytesOut; + + if (nBytes != 0 && r == ZlibConstants.Z_BUF_ERROR) + r = ZlibConstants.Z_OK; + + // update counters + _codec.AvailableBytesOut -= nBytes; + _codec.TotalBytesOut += nBytes; + + // update check information + if (checkfn != null) + _codec._Adler32 = check = Adler.Adler32(check, window, readAt, nBytes); + + // copy as far as end of window + Array.Copy(window, readAt, _codec.OutputBuffer, _codec.NextOut, nBytes); + _codec.NextOut += nBytes; + readAt += nBytes; + + // see if more to copy at beginning of window + if (readAt == end && pass == 0) + { + // wrap pointers + readAt = 0; + if (writeAt == end) + writeAt = 0; + } + else pass++; + } + + // done + return r; + } + } + + + internal static class InternalInflateConstants + { + // And'ing with mask[n] masks the lower n bits + internal static readonly int[] InflateMask = new int[] { + 0x00000000, 0x00000001, 0x00000003, 0x00000007, + 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, + 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, + 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff }; + } + + + sealed class InflateCodes + { + // waiting for "i:"=input, + // "o:"=output, + // "x:"=nothing + private const int START = 0; // x: set up for LEN + private const int LEN = 1; // i: get length/literal/eob next + private const int LENEXT = 2; // i: getting length extra (have base) + private const int DIST = 3; // i: get distance next + private const int DISTEXT = 4; // i: getting distance extra + private const int COPY = 5; // o: copying bytes in window, waiting for space + private const int LIT = 6; // o: got literal, waiting for output space + private const int WASH = 7; // o: got eob, possibly still output waiting + private const int END = 8; // x: got eob and all data flushed + private const int BADCODE = 9; // x: got error + + internal int mode; // current inflate_codes mode + + // mode dependent information + internal int len; + + internal int[] tree; // pointer into tree + internal int tree_index = 0; + internal int need; // bits needed + + internal int lit; + + // if EXT or COPY, where and how much + internal int bitsToGet; // bits to get for extra + internal int dist; // distance back to copy from + + internal byte lbits; // ltree bits decoded per branch + internal byte dbits; // dtree bits decoder per branch + internal int[] ltree; // literal/length/eob tree + internal int ltree_index; // literal/length/eob tree + internal int[] dtree; // distance tree + internal int dtree_index; // distance tree + + internal InflateCodes() + { + } + + internal void Init(int bl, int bd, int[] tl, int tl_index, int[] td, int td_index) + { + mode = START; + lbits = (byte)bl; + dbits = (byte)bd; + ltree = tl; + ltree_index = tl_index; + dtree = td; + dtree_index = td_index; + tree = null; + } + + internal int Process(InflateBlocks blocks, int r) + { + int j; // temporary storage + int tindex; // temporary pointer + int e; // extra bits or operation + int b = 0; // bit buffer + int k = 0; // bits in bit buffer + int p = 0; // input data pointer + int n; // bytes available there + int q; // output window write pointer + int m; // bytes to end of window or read pointer + int f; // pointer to copy strings from + + ZlibCodec z = blocks._codec; + + // copy input/output information to locals (UPDATE macro restores) + p = z.NextIn; + n = z.AvailableBytesIn; + b = blocks.bitb; + k = blocks.bitk; + q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; + + // process input and output based on current state + while (true) + { + switch (mode) + { + // waiting for "i:"=input, "o:"=output, "x:"=nothing + case START: // x: set up for LEN + if (m >= 258 && n >= 10) + { + blocks.bitb = b; blocks.bitk = k; + z.AvailableBytesIn = n; + z.TotalBytesIn += p - z.NextIn; + z.NextIn = p; + blocks.writeAt = q; + r = InflateFast(lbits, dbits, ltree, ltree_index, dtree, dtree_index, blocks, z); + + p = z.NextIn; + n = z.AvailableBytesIn; + b = blocks.bitb; + k = blocks.bitk; + q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; + + if (r != ZlibConstants.Z_OK) + { + mode = (r == ZlibConstants.Z_STREAM_END) ? WASH : BADCODE; + break; + } + } + need = lbits; + tree = ltree; + tree_index = ltree_index; + + mode = LEN; + goto case LEN; + + case LEN: // i: get length/literal/eob next + j = need; + + while (k < j) + { + if (n != 0) + r = ZlibConstants.Z_OK; + else + { + blocks.bitb = b; blocks.bitk = k; + z.AvailableBytesIn = n; + z.TotalBytesIn += p - z.NextIn; + z.NextIn = p; + blocks.writeAt = q; + return blocks.Flush(r); + } + n--; + b |= (z.InputBuffer[p++] & 0xff) << k; + k += 8; + } + + tindex = (tree_index + (b & InternalInflateConstants.InflateMask[j])) * 3; + + b >>= (tree[tindex + 1]); + k -= (tree[tindex + 1]); + + e = tree[tindex]; + + if (e == 0) + { + // literal + lit = tree[tindex + 2]; + mode = LIT; + break; + } + if ((e & 16) != 0) + { + // length + bitsToGet = e & 15; + len = tree[tindex + 2]; + mode = LENEXT; + break; + } + if ((e & 64) == 0) + { + // next table + need = e; + tree_index = tindex / 3 + tree[tindex + 2]; + break; + } + if ((e & 32) != 0) + { + // end of block + mode = WASH; + break; + } + mode = BADCODE; // invalid code + z.Message = "invalid literal/length code"; + r = ZlibConstants.Z_DATA_ERROR; + + blocks.bitb = b; blocks.bitk = k; + z.AvailableBytesIn = n; + z.TotalBytesIn += p - z.NextIn; + z.NextIn = p; + blocks.writeAt = q; + return blocks.Flush(r); + + + case LENEXT: // i: getting length extra (have base) + j = bitsToGet; + + while (k < j) + { + if (n != 0) + r = ZlibConstants.Z_OK; + else + { + blocks.bitb = b; blocks.bitk = k; + z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; + blocks.writeAt = q; + return blocks.Flush(r); + } + n--; b |= (z.InputBuffer[p++] & 0xff) << k; + k += 8; + } + + len += (b & InternalInflateConstants.InflateMask[j]); + + b >>= j; + k -= j; + + need = dbits; + tree = dtree; + tree_index = dtree_index; + mode = DIST; + goto case DIST; + + case DIST: // i: get distance next + j = need; + + while (k < j) + { + if (n != 0) + r = ZlibConstants.Z_OK; + else + { + blocks.bitb = b; blocks.bitk = k; + z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; + blocks.writeAt = q; + return blocks.Flush(r); + } + n--; b |= (z.InputBuffer[p++] & 0xff) << k; + k += 8; + } + + tindex = (tree_index + (b & InternalInflateConstants.InflateMask[j])) * 3; + + b >>= tree[tindex + 1]; + k -= tree[tindex + 1]; + + e = (tree[tindex]); + if ((e & 0x10) != 0) + { + // distance + bitsToGet = e & 15; + dist = tree[tindex + 2]; + mode = DISTEXT; + break; + } + if ((e & 64) == 0) + { + // next table + need = e; + tree_index = tindex / 3 + tree[tindex + 2]; + break; + } + mode = BADCODE; // invalid code + z.Message = "invalid distance code"; + r = ZlibConstants.Z_DATA_ERROR; + + blocks.bitb = b; blocks.bitk = k; + z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; + blocks.writeAt = q; + return blocks.Flush(r); + + + case DISTEXT: // i: getting distance extra + j = bitsToGet; + + while (k < j) + { + if (n != 0) + r = ZlibConstants.Z_OK; + else + { + blocks.bitb = b; blocks.bitk = k; + z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; + blocks.writeAt = q; + return blocks.Flush(r); + } + n--; b |= (z.InputBuffer[p++] & 0xff) << k; + k += 8; + } + + dist += (b & InternalInflateConstants.InflateMask[j]); + + b >>= j; + k -= j; + + mode = COPY; + goto case COPY; + + case COPY: // o: copying bytes in window, waiting for space + f = q - dist; + while (f < 0) + { + // modulo window size-"while" instead + f += blocks.end; // of "if" handles invalid distances + } + while (len != 0) + { + if (m == 0) + { + if (q == blocks.end && blocks.readAt != 0) + { + q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; + } + if (m == 0) + { + blocks.writeAt = q; r = blocks.Flush(r); + q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; + + if (q == blocks.end && blocks.readAt != 0) + { + q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; + } + + if (m == 0) + { + blocks.bitb = b; blocks.bitk = k; + z.AvailableBytesIn = n; + z.TotalBytesIn += p - z.NextIn; + z.NextIn = p; + blocks.writeAt = q; + return blocks.Flush(r); + } + } + } + + blocks.window[q++] = blocks.window[f++]; m--; + + if (f == blocks.end) + f = 0; + len--; + } + mode = START; + break; + + case LIT: // o: got literal, waiting for output space + if (m == 0) + { + if (q == blocks.end && blocks.readAt != 0) + { + q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; + } + if (m == 0) + { + blocks.writeAt = q; r = blocks.Flush(r); + q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; + + if (q == blocks.end && blocks.readAt != 0) + { + q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; + } + if (m == 0) + { + blocks.bitb = b; blocks.bitk = k; + z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; + blocks.writeAt = q; + return blocks.Flush(r); + } + } + } + r = ZlibConstants.Z_OK; + + blocks.window[q++] = (byte)lit; m--; + + mode = START; + break; + + case WASH: // o: got eob, possibly more output + if (k > 7) + { + // return unused byte, if any + k -= 8; + n++; + p--; // can always return one + } + + blocks.writeAt = q; r = blocks.Flush(r); + q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; + + if (blocks.readAt != blocks.writeAt) + { + blocks.bitb = b; blocks.bitk = k; + z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; + blocks.writeAt = q; + return blocks.Flush(r); + } + mode = END; + goto case END; + + case END: + r = ZlibConstants.Z_STREAM_END; + blocks.bitb = b; blocks.bitk = k; + z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; + blocks.writeAt = q; + return blocks.Flush(r); + + case BADCODE: // x: got error + + r = ZlibConstants.Z_DATA_ERROR; + + blocks.bitb = b; blocks.bitk = k; + z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; + blocks.writeAt = q; + return blocks.Flush(r); + + default: + r = ZlibConstants.Z_STREAM_ERROR; + + blocks.bitb = b; blocks.bitk = k; + z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; + blocks.writeAt = q; + return blocks.Flush(r); + } + } + } + + + // Called with number of bytes left to write in window at least 258 + // (the maximum string length) and number of input bytes available + // at least ten. The ten bytes are six bytes for the longest length/ + // distance pair plus four bytes for overloading the bit buffer. + + internal int InflateFast(int bl, int bd, int[] tl, int tl_index, int[] td, int td_index, InflateBlocks s, ZlibCodec z) + { + int t; // temporary pointer + int[] tp; // temporary pointer + int tp_index; // temporary pointer + int e; // extra bits or operation + int b; // bit buffer + int k; // bits in bit buffer + int p; // input data pointer + int n; // bytes available there + int q; // output window write pointer + int m; // bytes to end of window or read pointer + int ml; // mask for literal/length tree + int md; // mask for distance tree + int c; // bytes to copy + int d; // distance back to copy from + int r; // copy source pointer + + int tp_index_t_3; // (tp_index+t)*3 + + // load input, output, bit values + p = z.NextIn; n = z.AvailableBytesIn; b = s.bitb; k = s.bitk; + q = s.writeAt; m = q < s.readAt ? s.readAt - q - 1 : s.end - q; + + // initialize masks + ml = InternalInflateConstants.InflateMask[bl]; + md = InternalInflateConstants.InflateMask[bd]; + + // do until not enough input or output space for fast loop + do + { + // assume called with m >= 258 && n >= 10 + // get literal/length code + while (k < (20)) + { + // max bits for literal/length code + n--; + b |= (z.InputBuffer[p++] & 0xff) << k; k += 8; + } + + t = b & ml; + tp = tl; + tp_index = tl_index; + tp_index_t_3 = (tp_index + t) * 3; + if ((e = tp[tp_index_t_3]) == 0) + { + b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]); + + s.window[q++] = (byte)tp[tp_index_t_3 + 2]; + m--; + continue; + } + do + { + + b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]); + + if ((e & 16) != 0) + { + e &= 15; + c = tp[tp_index_t_3 + 2] + ((int)b & InternalInflateConstants.InflateMask[e]); + + b >>= e; k -= e; + + // decode distance base of block to copy + while (k < 15) + { + // max bits for distance code + n--; + b |= (z.InputBuffer[p++] & 0xff) << k; k += 8; + } + + t = b & md; + tp = td; + tp_index = td_index; + tp_index_t_3 = (tp_index + t) * 3; + e = tp[tp_index_t_3]; + + do + { + + b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]); + + if ((e & 16) != 0) + { + // get extra bits to add to distance base + e &= 15; + while (k < e) + { + // get extra bits (up to 13) + n--; + b |= (z.InputBuffer[p++] & 0xff) << k; k += 8; + } + + d = tp[tp_index_t_3 + 2] + (b & InternalInflateConstants.InflateMask[e]); + + b >>= e; k -= e; + + // do the copy + m -= c; + if (q >= d) + { + // offset before dest + // just copy + r = q - d; + if (q - r > 0 && 2 > (q - r)) + { + s.window[q++] = s.window[r++]; // minimum count is three, + s.window[q++] = s.window[r++]; // so unroll loop a little + c -= 2; + } + else + { + Array.Copy(s.window, r, s.window, q, 2); + q += 2; r += 2; c -= 2; + } + } + else + { + // else offset after destination + r = q - d; + do + { + r += s.end; // force pointer in window + } + while (r < 0); // covers invalid distances + e = s.end - r; + if (c > e) + { + // if source crosses, + c -= e; // wrapped copy + if (q - r > 0 && e > (q - r)) + { + do + { + s.window[q++] = s.window[r++]; + } + while (--e != 0); + } + else + { + Array.Copy(s.window, r, s.window, q, e); + q += e; r += e; e = 0; + } + r = 0; // copy rest from start of window + } + } + + // copy all or what's left + if (q - r > 0 && c > (q - r)) + { + do + { + s.window[q++] = s.window[r++]; + } + while (--c != 0); + } + else + { + Array.Copy(s.window, r, s.window, q, c); + q += c; r += c; c = 0; + } + break; + } + else if ((e & 64) == 0) + { + t += tp[tp_index_t_3 + 2]; + t += (b & InternalInflateConstants.InflateMask[e]); + tp_index_t_3 = (tp_index + t) * 3; + e = tp[tp_index_t_3]; + } + else + { + z.Message = "invalid distance code"; + + c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3); + + s.bitb = b; s.bitk = k; + z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; + s.writeAt = q; + + return ZlibConstants.Z_DATA_ERROR; + } + } + while (true); + break; + } + + if ((e & 64) == 0) + { + t += tp[tp_index_t_3 + 2]; + t += (b & InternalInflateConstants.InflateMask[e]); + tp_index_t_3 = (tp_index + t) * 3; + if ((e = tp[tp_index_t_3]) == 0) + { + b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]); + s.window[q++] = (byte)tp[tp_index_t_3 + 2]; + m--; + break; + } + } + else if ((e & 32) != 0) + { + c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3); + + s.bitb = b; s.bitk = k; + z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; + s.writeAt = q; + + return ZlibConstants.Z_STREAM_END; + } + else + { + z.Message = "invalid literal/length code"; + + c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3); + + s.bitb = b; s.bitk = k; + z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; + s.writeAt = q; + + return ZlibConstants.Z_DATA_ERROR; + } + } + while (true); + } + while (m >= 258 && n >= 10); + + // not enough input or output--restore pointers and return + c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3); + + s.bitb = b; s.bitk = k; + z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; + s.writeAt = q; + + return ZlibConstants.Z_OK; + } + } + + + internal sealed class InflateManager + { + // preset dictionary flag in zlib header + private const int PRESET_DICT = 0x20; + + private const int Z_DEFLATED = 8; + + private enum InflateManagerMode + { + METHOD = 0, // waiting for method byte + FLAG = 1, // waiting for flag byte + DICT4 = 2, // four dictionary check bytes to go + DICT3 = 3, // three dictionary check bytes to go + DICT2 = 4, // two dictionary check bytes to go + DICT1 = 5, // one dictionary check byte to go + DICT0 = 6, // waiting for inflateSetDictionary + BLOCKS = 7, // decompressing blocks + CHECK4 = 8, // four check bytes to go + CHECK3 = 9, // three check bytes to go + CHECK2 = 10, // two check bytes to go + CHECK1 = 11, // one check byte to go + DONE = 12, // finished check, done + BAD = 13, // got an error--stay here + } + + private InflateManagerMode mode; // current inflate mode + internal ZlibCodec _codec; // pointer back to this zlib stream + + // mode dependent information + internal int method; // if FLAGS, method byte + + // if CHECK, check values to compare + internal uint computedCheck; // computed check value + internal uint expectedCheck; // stream check value + + // if BAD, inflateSync's marker bytes count + internal int marker; + + // mode independent information + //internal int nowrap; // flag for no wrapper + private bool _handleRfc1950HeaderBytes = true; + internal bool HandleRfc1950HeaderBytes + { + get { return _handleRfc1950HeaderBytes; } + set { _handleRfc1950HeaderBytes = value; } + } + internal int wbits; // log2(window size) (8..15, defaults to 15) + + internal InflateBlocks blocks; // current inflate_blocks state + + public InflateManager() { } + + public InflateManager(bool expectRfc1950HeaderBytes) + { + _handleRfc1950HeaderBytes = expectRfc1950HeaderBytes; + } + + internal int Reset() + { + _codec.TotalBytesIn = _codec.TotalBytesOut = 0; + _codec.Message = null; + mode = HandleRfc1950HeaderBytes ? InflateManagerMode.METHOD : InflateManagerMode.BLOCKS; + blocks.Reset(); + return ZlibConstants.Z_OK; + } + + internal int End() + { + if (blocks != null) + blocks.Free(); + blocks = null; + return ZlibConstants.Z_OK; + } + + internal int Initialize(ZlibCodec codec, int w) + { + _codec = codec; + _codec.Message = null; + blocks = null; + + // handle undocumented nowrap option (no zlib header or check) + //nowrap = 0; + //if (w < 0) + //{ + // w = - w; + // nowrap = 1; + //} + + // set window size + if (w < 8 || w > 15) + { + End(); + throw new ZlibException("Bad window size."); + + //return ZlibConstants.Z_STREAM_ERROR; + } + wbits = w; + + blocks = new InflateBlocks(codec, + HandleRfc1950HeaderBytes ? this : null, + 1 << w); + + // reset state + Reset(); + return ZlibConstants.Z_OK; + } + + + internal int Inflate(FlushType flush) + { + int b; + + if (_codec.InputBuffer == null) + throw new ZlibException("InputBuffer is null. "); + +// int f = (flush == FlushType.Finish) +// ? ZlibConstants.Z_BUF_ERROR +// : ZlibConstants.Z_OK; + + // workitem 8870 + int f = ZlibConstants.Z_OK; + int r = ZlibConstants.Z_BUF_ERROR; + + while (true) + { + switch (mode) + { + case InflateManagerMode.METHOD: + if (_codec.AvailableBytesIn == 0) return r; + r = f; + _codec.AvailableBytesIn--; + _codec.TotalBytesIn++; + if (((method = _codec.InputBuffer[_codec.NextIn++]) & 0xf) != Z_DEFLATED) + { + mode = InflateManagerMode.BAD; + _codec.Message = String.Format("unknown compression method (0x{0:X2})", method); + marker = 5; // can't try inflateSync + break; + } + if ((method >> 4) + 8 > wbits) + { + mode = InflateManagerMode.BAD; + _codec.Message = String.Format("invalid window size ({0})", (method >> 4) + 8); + marker = 5; // can't try inflateSync + break; + } + mode = InflateManagerMode.FLAG; + break; + + + case InflateManagerMode.FLAG: + if (_codec.AvailableBytesIn == 0) return r; + r = f; + _codec.AvailableBytesIn--; + _codec.TotalBytesIn++; + b = (_codec.InputBuffer[_codec.NextIn++]) & 0xff; + + if ((((method << 8) + b) % 31) != 0) + { + mode = InflateManagerMode.BAD; + _codec.Message = "incorrect header check"; + marker = 5; // can't try inflateSync + break; + } + + mode = ((b & PRESET_DICT) == 0) + ? InflateManagerMode.BLOCKS + : InflateManagerMode.DICT4; + break; + + case InflateManagerMode.DICT4: + if (_codec.AvailableBytesIn == 0) return r; + r = f; + _codec.AvailableBytesIn--; + _codec.TotalBytesIn++; + expectedCheck = (uint)((_codec.InputBuffer[_codec.NextIn++] << 24) & 0xff000000); + mode = InflateManagerMode.DICT3; + break; + + case InflateManagerMode.DICT3: + if (_codec.AvailableBytesIn == 0) return r; + r = f; + _codec.AvailableBytesIn--; + _codec.TotalBytesIn++; + expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 16) & 0x00ff0000); + mode = InflateManagerMode.DICT2; + break; + + case InflateManagerMode.DICT2: + + if (_codec.AvailableBytesIn == 0) return r; + r = f; + _codec.AvailableBytesIn--; + _codec.TotalBytesIn++; + expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 8) & 0x0000ff00); + mode = InflateManagerMode.DICT1; + break; + + + case InflateManagerMode.DICT1: + if (_codec.AvailableBytesIn == 0) return r; + r = f; + _codec.AvailableBytesIn--; _codec.TotalBytesIn++; + expectedCheck += (uint)(_codec.InputBuffer[_codec.NextIn++] & 0x000000ff); + _codec._Adler32 = expectedCheck; + mode = InflateManagerMode.DICT0; + return ZlibConstants.Z_NEED_DICT; + + + case InflateManagerMode.DICT0: + mode = InflateManagerMode.BAD; + _codec.Message = "need dictionary"; + marker = 0; // can try inflateSync + return ZlibConstants.Z_STREAM_ERROR; + + + case InflateManagerMode.BLOCKS: + r = blocks.Process(r); + if (r == ZlibConstants.Z_DATA_ERROR) + { + mode = InflateManagerMode.BAD; + marker = 0; // can try inflateSync + break; + } + + if (r == ZlibConstants.Z_OK) r = f; + + if (r != ZlibConstants.Z_STREAM_END) + return r; + + r = f; + computedCheck = blocks.Reset(); + if (!HandleRfc1950HeaderBytes) + { + mode = InflateManagerMode.DONE; + return ZlibConstants.Z_STREAM_END; + } + mode = InflateManagerMode.CHECK4; + break; + + case InflateManagerMode.CHECK4: + if (_codec.AvailableBytesIn == 0) return r; + r = f; + _codec.AvailableBytesIn--; + _codec.TotalBytesIn++; + expectedCheck = (uint)((_codec.InputBuffer[_codec.NextIn++] << 24) & 0xff000000); + mode = InflateManagerMode.CHECK3; + break; + + case InflateManagerMode.CHECK3: + if (_codec.AvailableBytesIn == 0) return r; + r = f; + _codec.AvailableBytesIn--; _codec.TotalBytesIn++; + expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 16) & 0x00ff0000); + mode = InflateManagerMode.CHECK2; + break; + + case InflateManagerMode.CHECK2: + if (_codec.AvailableBytesIn == 0) return r; + r = f; + _codec.AvailableBytesIn--; + _codec.TotalBytesIn++; + expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 8) & 0x0000ff00); + mode = InflateManagerMode.CHECK1; + break; + + case InflateManagerMode.CHECK1: + if (_codec.AvailableBytesIn == 0) return r; + r = f; + _codec.AvailableBytesIn--; _codec.TotalBytesIn++; + expectedCheck += (uint)(_codec.InputBuffer[_codec.NextIn++] & 0x000000ff); + if (computedCheck != expectedCheck) + { + mode = InflateManagerMode.BAD; + _codec.Message = "incorrect data check"; + marker = 5; // can't try inflateSync + break; + } + mode = InflateManagerMode.DONE; + return ZlibConstants.Z_STREAM_END; + + case InflateManagerMode.DONE: + return ZlibConstants.Z_STREAM_END; + + case InflateManagerMode.BAD: + throw new ZlibException(String.Format("Bad state ({0})", _codec.Message)); + + default: + throw new ZlibException("Stream error."); + + } + } + } + + + + internal int SetDictionary(byte[] dictionary) + { + int index = 0; + int length = dictionary.Length; + if (mode != InflateManagerMode.DICT0) + throw new ZlibException("Stream error."); + + if (Adler.Adler32(1, dictionary, 0, dictionary.Length) != _codec._Adler32) + { + return ZlibConstants.Z_DATA_ERROR; + } + + _codec._Adler32 = Adler.Adler32(0, null, 0, 0); + + if (length >= (1 << wbits)) + { + length = (1 << wbits) - 1; + index = dictionary.Length - length; + } + blocks.SetDictionary(dictionary, index, length); + mode = InflateManagerMode.BLOCKS; + return ZlibConstants.Z_OK; + } + + + private static readonly byte[] mark = new byte[] { 0, 0, 0xff, 0xff }; + + internal int Sync() + { + int n; // number of bytes to look at + int p; // pointer to bytes + int m; // number of marker bytes found in a row + long r, w; // temporaries to save total_in and total_out + + // set up + if (mode != InflateManagerMode.BAD) + { + mode = InflateManagerMode.BAD; + marker = 0; + } + if ((n = _codec.AvailableBytesIn) == 0) + return ZlibConstants.Z_BUF_ERROR; + p = _codec.NextIn; + m = marker; + + // search + while (n != 0 && m < 4) + { + if (_codec.InputBuffer[p] == mark[m]) + { + m++; + } + else if (_codec.InputBuffer[p] != 0) + { + m = 0; + } + else + { + m = 4 - m; + } + p++; n--; + } + + // restore + _codec.TotalBytesIn += p - _codec.NextIn; + _codec.NextIn = p; + _codec.AvailableBytesIn = n; + marker = m; + + // return no joy or set up to restart on a new block + if (m != 4) + { + return ZlibConstants.Z_DATA_ERROR; + } + r = _codec.TotalBytesIn; + w = _codec.TotalBytesOut; + Reset(); + _codec.TotalBytesIn = r; + _codec.TotalBytesOut = w; + mode = InflateManagerMode.BLOCKS; + return ZlibConstants.Z_OK; + } + + + // Returns true if inflate is currently at the end of a block generated + // by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP + // implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH + // but removes the length bytes of the resulting empty stored block. When + // decompressing, PPP checks that at the end of input packet, inflate is + // waiting for these length bytes. + internal int SyncPoint(ZlibCodec z) + { + return blocks.SyncPoint(); + } + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/Inflate.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/Inflate.cs.meta new file mode 100644 index 000000000..7eb68f070 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/Inflate.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 01ece23e3663e424ba8672d6d3d50f19 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZTree.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZTree.cs new file mode 100644 index 000000000..04437d50e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZTree.cs @@ -0,0 +1,423 @@ +// Tree.cs +// ------------------------------------------------------------------ +// +// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation. +// All rights reserved. +// +// This code module is part of DotNetZip, a zipfile class library. +// +// ------------------------------------------------------------------ +// +// This code is licensed under the Microsoft Public License. +// See the file License.txt for the license details. +// More info on: http://dotnetzip.codeplex.com +// +// ------------------------------------------------------------------ +// +// last saved (in emacs): +// Time-stamp: <2009-October-28 13:29:50> +// +// ------------------------------------------------------------------ +// +// This module defines classes for zlib compression and +// decompression. This code is derived from the jzlib implementation of +// zlib. In keeping with the license for jzlib, the copyright to that +// code is below. +// +// ------------------------------------------------------------------ +// +// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. 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. +// +// 3. The names of the authors may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT, +// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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. +// +// ----------------------------------------------------------------------- +// +// This program is based on zlib-1.1.3; credit to authors +// Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) +// and contributors of zlib. +// +// ----------------------------------------------------------------------- + + +using System; + +namespace BestHTTP.Decompression.Zlib +{ + sealed class ZTree + { + private static readonly int HEAP_SIZE = (2 * InternalConstants.L_CODES + 1); + + // extra bits for each length code + internal static readonly int[] ExtraLengthBits = new int[] + { + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, + 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 + }; + + // extra bits for each distance code + internal static readonly int[] ExtraDistanceBits = new int[] + { + 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, + 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 + }; + + // extra bits for each bit length code + internal static readonly int[] extra_blbits = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7}; + + internal static readonly sbyte[] bl_order = new sbyte[]{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + + + // The lengths of the bit length codes are sent in order of decreasing + // probability, to avoid transmitting the lengths for unused bit + // length codes. + + internal const int Buf_size = 8 * 2; + + // see definition of array dist_code below + //internal const int DIST_CODE_LEN = 512; + + private static readonly sbyte[] _dist_code = new sbyte[] + { + 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, + 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 0, 0, 16, 17, 18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, + 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 + }; + + internal static readonly sbyte[] LengthCode = new sbyte[] + { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, + 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, + 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, + 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 + }; + + + internal static readonly int[] LengthBase = new int[] + { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, + 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 0 + }; + + + internal static readonly int[] DistanceBase = new int[] + { + 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, + 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 + }; + + + /// + /// Map from a distance to a distance code. + /// + /// + /// No side effects. _dist_code[256] and _dist_code[257] are never used. + /// + internal static int DistanceCode(int dist) + { + return (dist < 256) + ? _dist_code[dist] + : _dist_code[256 + SharedUtils.URShift(dist, 7)]; + } + + internal short[] dyn_tree; // the dynamic tree + internal int max_code; // largest code with non zero frequency + internal StaticTree staticTree; // the corresponding static tree + + // Compute the optimal bit lengths for a tree and update the total bit length + // for the current block. + // IN assertion: the fields freq and dad are set, heap[heap_max] and + // above are the tree nodes sorted by increasing frequency. + // OUT assertions: the field len is set to the optimal bit length, the + // array bl_count contains the frequencies for each bit length. + // The length opt_len is updated; static_len is also updated if stree is + // not null. + internal void gen_bitlen(DeflateManager s) + { + short[] tree = dyn_tree; + short[] stree = staticTree.treeCodes; + int[] extra = staticTree.extraBits; + int base_Renamed = staticTree.extraBase; + int max_length = staticTree.maxLength; + int h; // heap index + int n, m; // iterate over the tree elements + int bits; // bit length + int xbits; // extra bits + short f; // frequency + int overflow = 0; // number of elements with bit length too large + + for (bits = 0; bits <= InternalConstants.MAX_BITS; bits++) + s.bl_count[bits] = 0; + + // In a first pass, compute the optimal bit lengths (which may + // overflow in the case of the bit length tree). + tree[s.heap[s.heap_max] * 2 + 1] = 0; // root of the heap + + for (h = s.heap_max + 1; h < HEAP_SIZE; h++) + { + n = s.heap[h]; + bits = tree[tree[n * 2 + 1] * 2 + 1] + 1; + if (bits > max_length) + { + bits = max_length; overflow++; + } + tree[n * 2 + 1] = (short) bits; + // We overwrite tree[n*2+1] which is no longer needed + + if (n > max_code) + continue; // not a leaf node + + s.bl_count[bits]++; + xbits = 0; + if (n >= base_Renamed) + xbits = extra[n - base_Renamed]; + f = tree[n * 2]; + s.opt_len += f * (bits + xbits); + if (stree != null) + s.static_len += f * (stree[n * 2 + 1] + xbits); + } + if (overflow == 0) + return ; + + // This happens for example on obj2 and pic of the Calgary corpus + // Find the first bit length which could increase: + do + { + bits = max_length - 1; + while (s.bl_count[bits] == 0) + bits--; + s.bl_count[bits]--; // move one leaf down the tree + s.bl_count[bits + 1] = (short) (s.bl_count[bits + 1] + 2); // move one overflow item as its brother + s.bl_count[max_length]--; + // The brother of the overflow item also moves one step up, + // but this does not affect bl_count[max_length] + overflow -= 2; + } + while (overflow > 0); + + for (bits = max_length; bits != 0; bits--) + { + n = s.bl_count[bits]; + while (n != 0) + { + m = s.heap[--h]; + if (m > max_code) + continue; + if (tree[m * 2 + 1] != bits) + { + s.opt_len = (int) (s.opt_len + ((long) bits - (long) tree[m * 2 + 1]) * (long) tree[m * 2]); + tree[m * 2 + 1] = (short) bits; + } + n--; + } + } + } + + // Construct one Huffman tree and assigns the code bit strings and lengths. + // Update the total bit length for the current block. + // IN assertion: the field freq is set for all tree elements. + // OUT assertions: the fields len and code are set to the optimal bit length + // and corresponding code. The length opt_len is updated; static_len is + // also updated if stree is not null. The field max_code is set. + internal void build_tree(DeflateManager s) + { + short[] tree = dyn_tree; + short[] stree = staticTree.treeCodes; + int elems = staticTree.elems; + int n, m; // iterate over heap elements + int max_code = -1; // largest code with non zero frequency + int node; // new node being created + + // Construct the initial heap, with least frequent element in + // heap[1]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + // heap[0] is not used. + s.heap_len = 0; + s.heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) + { + if (tree[n * 2] != 0) + { + s.heap[++s.heap_len] = max_code = n; + s.depth[n] = 0; + } + else + { + tree[n * 2 + 1] = 0; + } + } + + // The pkzip format requires that at least one distance code exists, + // and that at least one bit should be sent even if there is only one + // possible code. So to avoid special checks later on we force at least + // two codes of non zero frequency. + while (s.heap_len < 2) + { + node = s.heap[++s.heap_len] = (max_code < 2?++max_code:0); + tree[node * 2] = 1; + s.depth[node] = 0; + s.opt_len--; + if (stree != null) + s.static_len -= stree[node * 2 + 1]; + // node is 0 or 1 so it does not have extra bits + } + this.max_code = max_code; + + // The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + // establish sub-heaps of increasing lengths: + + for (n = s.heap_len / 2; n >= 1; n--) + s.pqdownheap(tree, n); + + // Construct the Huffman tree by repeatedly combining the least two + // frequent nodes. + + node = elems; // next internal node of the tree + do + { + // n = node of least frequency + n = s.heap[1]; + s.heap[1] = s.heap[s.heap_len--]; + s.pqdownheap(tree, 1); + m = s.heap[1]; // m = node of next least frequency + + s.heap[--s.heap_max] = n; // keep the nodes sorted by frequency + s.heap[--s.heap_max] = m; + + // Create a new node father of n and m + tree[node * 2] = unchecked((short) (tree[n * 2] + tree[m * 2])); + s.depth[node] = (sbyte) (System.Math.Max((byte) s.depth[n], (byte) s.depth[m]) + 1); + tree[n * 2 + 1] = tree[m * 2 + 1] = (short) node; + + // and insert the new node in the heap + s.heap[1] = node++; + s.pqdownheap(tree, 1); + } + while (s.heap_len >= 2); + + s.heap[--s.heap_max] = s.heap[1]; + + // At this point, the fields freq and dad are set. We can now + // generate the bit lengths. + + gen_bitlen(s); + + // The field len is now set, we can generate the bit codes + gen_codes(tree, max_code, s.bl_count); + } + + // Generate the codes for a given tree and bit counts (which need not be + // optimal). + // IN assertion: the array bl_count contains the bit length statistics for + // the given tree and the field len is set for all tree elements. + // OUT assertion: the field code is set for all tree elements of non + // zero code length. + internal static void gen_codes(short[] tree, int max_code, short[] bl_count) + { + short[] next_code = new short[InternalConstants.MAX_BITS + 1]; // next code value for each bit length + short code = 0; // running code value + int bits; // bit index + int n; // code index + + // The distribution counts are first used to generate the code values + // without bit reversal. + for (bits = 1; bits <= InternalConstants.MAX_BITS; bits++) + unchecked { + next_code[bits] = code = (short) ((code + bl_count[bits - 1]) << 1); + } + + // Check that the bit counts in bl_count are consistent. The last code + // must be all ones. + //Assert (code + bl_count[MAX_BITS]-1 == (1<>= 1; //SharedUtils.URShift(code, 1); + res <<= 1; + } + while (--len > 0); + return res >> 1; + } + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZTree.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZTree.cs.meta new file mode 100644 index 000000000..47691c86c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZTree.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 567080ac494bf3b47acca3e05bf46e84 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/Zlib.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/Zlib.cs new file mode 100644 index 000000000..082232d73 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/Zlib.cs @@ -0,0 +1,546 @@ +// Zlib.cs +// ------------------------------------------------------------------ +// +// Copyright (c) 2009-2011 Dino Chiesa and Microsoft Corporation. +// All rights reserved. +// +// This code module is part of DotNetZip, a zipfile class library. +// +// ------------------------------------------------------------------ +// +// This code is licensed under the Microsoft Public License. +// See the file License.txt for the license details. +// More info on: http://dotnetzip.codeplex.com +// +// ------------------------------------------------------------------ +// +// Last Saved: <2011-August-03 19:52:28> +// +// ------------------------------------------------------------------ +// +// This module defines classes for ZLIB compression and +// decompression. This code is derived from the jzlib implementation of +// zlib, but significantly modified. The object model is not the same, +// and many of the behaviors are new or different. Nonetheless, in +// keeping with the license for jzlib, the copyright to that code is +// included below. +// +// ------------------------------------------------------------------ +// +// The following notice applies to jzlib: +// +// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. 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. +// +// 3. The names of the authors may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT, +// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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. +// +// ----------------------------------------------------------------------- +// +// jzlib is based on zlib-1.1.3. +// +// The following notice applies to zlib: +// +// ----------------------------------------------------------------------- +// +// Copyright (C) 1995-2004 Jean-loup Gailly and Mark Adler +// +// The ZLIB software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// +// Jean-loup Gailly jloup@gzip.org +// Mark Adler madler@alumni.caltech.edu +// +// ----------------------------------------------------------------------- + + + +using System; +using Interop=System.Runtime.InteropServices; + +namespace BestHTTP.Decompression.Zlib +{ + + /// + /// Describes how to flush the current deflate operation. + /// + /// + /// The different FlushType values are useful when using a Deflate in a streaming application. + /// + public enum FlushType + { + /// No flush at all. + None = 0, + + /// Closes the current block, but doesn't flush it to + /// the output. Used internally only in hypothetical + /// scenarios. This was supposed to be removed by Zlib, but it is + /// still in use in some edge cases. + /// + Partial, + + /// + /// Use this during compression to specify that all pending output should be + /// flushed to the output buffer and the output should be aligned on a byte + /// boundary. You might use this in a streaming communication scenario, so that + /// the decompressor can get all input data available so far. When using this + /// with a ZlibCodec, AvailableBytesIn will be zero after the call if + /// enough output space has been provided before the call. Flushing will + /// degrade compression and so it should be used only when necessary. + /// + Sync, + + /// + /// Use this during compression to specify that all output should be flushed, as + /// with FlushType.Sync, but also, the compression state should be reset + /// so that decompression can restart from this point if previous compressed + /// data has been damaged or if random access is desired. Using + /// FlushType.Full too often can significantly degrade the compression. + /// + Full, + + /// Signals the end of the compression/decompression stream. + Finish, + } + + + /// + /// The compression level to be used when using a DeflateStream or ZlibStream with CompressionMode.Compress. + /// + public enum CompressionLevel + { + /// + /// None means that the data will be simply stored, with no change at all. + /// If you are producing ZIPs for use on Mac OSX, be aware that archives produced with CompressionLevel.None + /// cannot be opened with the default zip reader. Use a different CompressionLevel. + /// + None= 0, + /// + /// Same as None. + /// + Level0 = 0, + + /// + /// The fastest but least effective compression. + /// + BestSpeed = 1, + + /// + /// A synonym for BestSpeed. + /// + Level1 = 1, + + /// + /// A little slower, but better, than level 1. + /// + Level2 = 2, + + /// + /// A little slower, but better, than level 2. + /// + Level3 = 3, + + /// + /// A little slower, but better, than level 3. + /// + Level4 = 4, + + /// + /// A little slower than level 4, but with better compression. + /// + Level5 = 5, + + /// + /// The default compression level, with a good balance of speed and compression efficiency. + /// + Default = 6, + /// + /// A synonym for Default. + /// + Level6 = 6, + + /// + /// Pretty good compression! + /// + Level7 = 7, + + /// + /// Better compression than Level7! + /// + Level8 = 8, + + /// + /// The "best" compression, where best means greatest reduction in size of the input data stream. + /// This is also the slowest compression. + /// + BestCompression = 9, + + /// + /// A synonym for BestCompression. + /// + Level9 = 9, + } + + /// + /// Describes options for how the compression algorithm is executed. Different strategies + /// work better on different sorts of data. The strategy parameter can affect the compression + /// ratio and the speed of compression but not the correctness of the compresssion. + /// + public enum CompressionStrategy + { + /// + /// The default strategy is probably the best for normal data. + /// + Default = 0, + + /// + /// The Filtered strategy is intended to be used most effectively with data produced by a + /// filter or predictor. By this definition, filtered data consists mostly of small + /// values with a somewhat random distribution. In this case, the compression algorithm + /// is tuned to compress them better. The effect of Filtered is to force more Huffman + /// coding and less string matching; it is a half-step between Default and HuffmanOnly. + /// + Filtered = 1, + + /// + /// Using HuffmanOnly will force the compressor to do Huffman encoding only, with no + /// string matching. + /// + HuffmanOnly = 2, + } + + + /// + /// An enum to specify the direction of transcoding - whether to compress or decompress. + /// + public enum CompressionMode + { + /// + /// Used to specify that the stream should compress the data. + /// + Compress= 0, + /// + /// Used to specify that the stream should decompress the data. + /// + Decompress = 1, + } + + + /// + /// A general purpose exception class for exceptions in the Zlib library. + /// + [Interop.GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000E")] + internal class ZlibException : System.Exception + { + /// + /// The ZlibException class captures exception information generated + /// by the Zlib library. + /// + public ZlibException() + : base() + { + } + + /// + /// This ctor collects a message attached to the exception. + /// + /// the message for the exception. + public ZlibException(System.String s) + : base(s) + { + } + } + + + internal class SharedUtils + { + /// + /// Performs an unsigned bitwise right shift with the specified number + /// + /// Number to operate on + /// Ammount of bits to shift + /// The resulting number from the shift operation + public static int URShift(int number, int bits) + { + return (int)((uint)number >> bits); + } + +#if NOT + /// + /// Performs an unsigned bitwise right shift with the specified number + /// + /// Number to operate on + /// Ammount of bits to shift + /// The resulting number from the shift operation + public static long URShift(long number, int bits) + { + return (long) ((UInt64)number >> bits); + } +#endif + + /// + /// Reads a number of characters from the current source TextReader and writes + /// the data to the target array at the specified index. + /// + /// + /// The source TextReader to read from + /// Contains the array of characteres read from the source TextReader. + /// The starting index of the target array. + /// The maximum number of characters to read from the source TextReader. + /// + /// + /// The number of characters read. The number will be less than or equal to + /// count depending on the data available in the source TextReader. Returns -1 + /// if the end of the stream is reached. + /// + public static System.Int32 ReadInput(System.IO.TextReader sourceTextReader, byte[] target, int start, int count) + { + // Returns 0 bytes if not enough space in target + if (target.Length == 0) return 0; + + char[] charArray = new char[target.Length]; + int bytesRead = sourceTextReader.Read(charArray, start, count); + + // Returns -1 if EOF + if (bytesRead == 0) return -1; + + for (int index = start; index < start + bytesRead; index++) + target[index] = (byte)charArray[index]; + + return bytesRead; + } + + + internal static byte[] ToByteArray(System.String sourceString) + { + return System.Text.UTF8Encoding.UTF8.GetBytes(sourceString); + } + + + internal static char[] ToCharArray(byte[] byteArray) + { + return System.Text.UTF8Encoding.UTF8.GetChars(byteArray); + } + } + + internal static class InternalConstants + { + internal static readonly int MAX_BITS = 15; + internal static readonly int BL_CODES = 19; + internal static readonly int D_CODES = 30; + internal static readonly int LITERALS = 256; + internal static readonly int LENGTH_CODES = 29; + internal static readonly int L_CODES = (LITERALS + 1 + LENGTH_CODES); + + // Bit length codes must not exceed MAX_BL_BITS bits + internal static readonly int MAX_BL_BITS = 7; + + // repeat previous bit length 3-6 times (2 bits of repeat count) + internal static readonly int REP_3_6 = 16; + + // repeat a zero length 3-10 times (3 bits of repeat count) + internal static readonly int REPZ_3_10 = 17; + + // repeat a zero length 11-138 times (7 bits of repeat count) + internal static readonly int REPZ_11_138 = 18; + + } + + internal sealed class StaticTree + { + internal static readonly short[] lengthAndLiteralsTreeCodes = new short[] { + 12, 8, 140, 8, 76, 8, 204, 8, 44, 8, 172, 8, 108, 8, 236, 8, + 28, 8, 156, 8, 92, 8, 220, 8, 60, 8, 188, 8, 124, 8, 252, 8, + 2, 8, 130, 8, 66, 8, 194, 8, 34, 8, 162, 8, 98, 8, 226, 8, + 18, 8, 146, 8, 82, 8, 210, 8, 50, 8, 178, 8, 114, 8, 242, 8, + 10, 8, 138, 8, 74, 8, 202, 8, 42, 8, 170, 8, 106, 8, 234, 8, + 26, 8, 154, 8, 90, 8, 218, 8, 58, 8, 186, 8, 122, 8, 250, 8, + 6, 8, 134, 8, 70, 8, 198, 8, 38, 8, 166, 8, 102, 8, 230, 8, + 22, 8, 150, 8, 86, 8, 214, 8, 54, 8, 182, 8, 118, 8, 246, 8, + 14, 8, 142, 8, 78, 8, 206, 8, 46, 8, 174, 8, 110, 8, 238, 8, + 30, 8, 158, 8, 94, 8, 222, 8, 62, 8, 190, 8, 126, 8, 254, 8, + 1, 8, 129, 8, 65, 8, 193, 8, 33, 8, 161, 8, 97, 8, 225, 8, + 17, 8, 145, 8, 81, 8, 209, 8, 49, 8, 177, 8, 113, 8, 241, 8, + 9, 8, 137, 8, 73, 8, 201, 8, 41, 8, 169, 8, 105, 8, 233, 8, + 25, 8, 153, 8, 89, 8, 217, 8, 57, 8, 185, 8, 121, 8, 249, 8, + 5, 8, 133, 8, 69, 8, 197, 8, 37, 8, 165, 8, 101, 8, 229, 8, + 21, 8, 149, 8, 85, 8, 213, 8, 53, 8, 181, 8, 117, 8, 245, 8, + 13, 8, 141, 8, 77, 8, 205, 8, 45, 8, 173, 8, 109, 8, 237, 8, + 29, 8, 157, 8, 93, 8, 221, 8, 61, 8, 189, 8, 125, 8, 253, 8, + 19, 9, 275, 9, 147, 9, 403, 9, 83, 9, 339, 9, 211, 9, 467, 9, + 51, 9, 307, 9, 179, 9, 435, 9, 115, 9, 371, 9, 243, 9, 499, 9, + 11, 9, 267, 9, 139, 9, 395, 9, 75, 9, 331, 9, 203, 9, 459, 9, + 43, 9, 299, 9, 171, 9, 427, 9, 107, 9, 363, 9, 235, 9, 491, 9, + 27, 9, 283, 9, 155, 9, 411, 9, 91, 9, 347, 9, 219, 9, 475, 9, + 59, 9, 315, 9, 187, 9, 443, 9, 123, 9, 379, 9, 251, 9, 507, 9, + 7, 9, 263, 9, 135, 9, 391, 9, 71, 9, 327, 9, 199, 9, 455, 9, + 39, 9, 295, 9, 167, 9, 423, 9, 103, 9, 359, 9, 231, 9, 487, 9, + 23, 9, 279, 9, 151, 9, 407, 9, 87, 9, 343, 9, 215, 9, 471, 9, + 55, 9, 311, 9, 183, 9, 439, 9, 119, 9, 375, 9, 247, 9, 503, 9, + 15, 9, 271, 9, 143, 9, 399, 9, 79, 9, 335, 9, 207, 9, 463, 9, + 47, 9, 303, 9, 175, 9, 431, 9, 111, 9, 367, 9, 239, 9, 495, 9, + 31, 9, 287, 9, 159, 9, 415, 9, 95, 9, 351, 9, 223, 9, 479, 9, + 63, 9, 319, 9, 191, 9, 447, 9, 127, 9, 383, 9, 255, 9, 511, 9, + 0, 7, 64, 7, 32, 7, 96, 7, 16, 7, 80, 7, 48, 7, 112, 7, + 8, 7, 72, 7, 40, 7, 104, 7, 24, 7, 88, 7, 56, 7, 120, 7, + 4, 7, 68, 7, 36, 7, 100, 7, 20, 7, 84, 7, 52, 7, 116, 7, + 3, 8, 131, 8, 67, 8, 195, 8, 35, 8, 163, 8, 99, 8, 227, 8 + }; + + internal static readonly short[] distTreeCodes = new short[] { + 0, 5, 16, 5, 8, 5, 24, 5, 4, 5, 20, 5, 12, 5, 28, 5, + 2, 5, 18, 5, 10, 5, 26, 5, 6, 5, 22, 5, 14, 5, 30, 5, + 1, 5, 17, 5, 9, 5, 25, 5, 5, 5, 21, 5, 13, 5, 29, 5, + 3, 5, 19, 5, 11, 5, 27, 5, 7, 5, 23, 5 }; + + internal static readonly StaticTree Literals; + internal static readonly StaticTree Distances; + internal static readonly StaticTree BitLengths; + + internal short[] treeCodes; // static tree or null + internal int[] extraBits; // extra bits for each code or null + internal int extraBase; // base index for extra_bits + internal int elems; // max number of elements in the tree + internal int maxLength; // max bit length for the codes + + private StaticTree(short[] treeCodes, int[] extraBits, int extraBase, int elems, int maxLength) + { + this.treeCodes = treeCodes; + this.extraBits = extraBits; + this.extraBase = extraBase; + this.elems = elems; + this.maxLength = maxLength; + } + static StaticTree() + { + Literals = new StaticTree(lengthAndLiteralsTreeCodes, ZTree.ExtraLengthBits, InternalConstants.LITERALS + 1, InternalConstants.L_CODES, InternalConstants.MAX_BITS); + Distances = new StaticTree(distTreeCodes, ZTree.ExtraDistanceBits, 0, InternalConstants.D_CODES, InternalConstants.MAX_BITS); + BitLengths = new StaticTree(null, ZTree.extra_blbits, 0, InternalConstants.BL_CODES, InternalConstants.MAX_BL_BITS); + } + } + + + + /// + /// Computes an Adler-32 checksum. + /// + /// + /// The Adler checksum is similar to a CRC checksum, but faster to compute, though less + /// reliable. It is used in producing RFC1950 compressed streams. The Adler checksum + /// is a required part of the "ZLIB" standard. Applications will almost never need to + /// use this class directly. + /// + /// + /// + public sealed class Adler + { + // largest prime smaller than 65536 + private static readonly uint BASE = 65521; + // NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 + private static readonly int NMAX = 5552; + + +#pragma warning disable 3001 +#pragma warning disable 3002 + + /// + /// Calculates the Adler32 checksum. + /// + /// + /// + /// This is used within ZLIB. You probably don't need to use this directly. + /// + /// + /// + /// To compute an Adler32 checksum on a byte array: + /// + /// var adler = Adler.Adler32(0, null, 0, 0); + /// adler = Adler.Adler32(adler, buffer, index, length); + /// + /// + public static uint Adler32(uint adler, byte[] buf, int index, int len) + { + if (buf == null) + return 1; + + uint s1 = (uint) (adler & 0xffff); + uint s2 = (uint) ((adler >> 16) & 0xffff); + + while (len > 0) + { + int k = len < NMAX ? len : NMAX; + len -= k; + while (k >= 16) + { + //s1 += (buf[index++] & 0xff); s2 += s1; + s1 += buf[index++]; s2 += s1; + s1 += buf[index++]; s2 += s1; + s1 += buf[index++]; s2 += s1; + s1 += buf[index++]; s2 += s1; + s1 += buf[index++]; s2 += s1; + s1 += buf[index++]; s2 += s1; + s1 += buf[index++]; s2 += s1; + s1 += buf[index++]; s2 += s1; + s1 += buf[index++]; s2 += s1; + s1 += buf[index++]; s2 += s1; + s1 += buf[index++]; s2 += s1; + s1 += buf[index++]; s2 += s1; + s1 += buf[index++]; s2 += s1; + s1 += buf[index++]; s2 += s1; + s1 += buf[index++]; s2 += s1; + s1 += buf[index++]; s2 += s1; + k -= 16; + } + if (k != 0) + { + do + { + s1 += buf[index++]; + s2 += s1; + } + while (--k != 0); + } + s1 %= BASE; + s2 %= BASE; + } + return (uint)((s2 << 16) | s1); + } +#pragma warning restore 3001 +#pragma warning restore 3002 + + } + +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/Zlib.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/Zlib.cs.meta new file mode 100644 index 000000000..a81b918da --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/Zlib.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7d946fbf5f38d4049a7b50fe52bd8b0e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZlibBaseStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZlibBaseStream.cs new file mode 100644 index 000000000..a6c5f9884 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZlibBaseStream.cs @@ -0,0 +1,607 @@ +// ZlibBaseStream.cs +// ------------------------------------------------------------------ +// +// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation. +// All rights reserved. +// +// This code module is part of DotNetZip, a zipfile class library. +// +// ------------------------------------------------------------------ +// +// This code is licensed under the Microsoft Public License. +// See the file License.txt for the license details. +// More info on: http://dotnetzip.codeplex.com +// +// ------------------------------------------------------------------ +// +// last saved (in emacs): +// Time-stamp: <2011-August-06 21:22:38> +// +// ------------------------------------------------------------------ +// +// This module defines the ZlibBaseStream class, which is an intnernal +// base class for DeflateStream, ZlibStream and GZipStream. +// +// ------------------------------------------------------------------ + +using BestHTTP.PlatformSupport.Memory; +using System; +using System.IO; + +namespace BestHTTP.Decompression.Zlib +{ + + internal enum ZlibStreamFlavor { ZLIB = 1950, DEFLATE = 1951, GZIP = 1952 } + + internal class ZlibBaseStream : System.IO.Stream + { + protected internal ZlibCodec _z = null; // deferred init... new ZlibCodec(); + + protected internal StreamMode _streamMode = StreamMode.Undefined; + protected internal FlushType _flushMode; + protected internal ZlibStreamFlavor _flavor; + protected internal CompressionMode _compressionMode; + protected internal CompressionLevel _level; + protected internal bool _leaveOpen; + protected internal byte[] _workingBuffer; + protected internal int _bufferSize = ZlibConstants.WorkingBufferSizeDefault; + protected internal int windowBitsMax; + protected internal byte[] _buf1 = new byte[1]; + + protected internal System.IO.Stream _stream; + protected internal CompressionStrategy Strategy = CompressionStrategy.Default; + + // workitem 7159 + BestHTTP.Decompression.Crc.CRC32 crc; + protected internal string _GzipFileName; + protected internal string _GzipComment; + protected internal DateTime _GzipMtime; + protected internal int _gzipHeaderByteCount; + + internal int Crc32 { get { if (crc == null) return 0; return crc.Crc32Result; } } + + public ZlibBaseStream(System.IO.Stream stream, + CompressionMode compressionMode, + CompressionLevel level, + ZlibStreamFlavor flavor, + bool leaveOpen) + :this(stream, compressionMode, level, flavor,leaveOpen, ZlibConstants.WindowBitsDefault) + { } + + public ZlibBaseStream(System.IO.Stream stream, + CompressionMode compressionMode, + CompressionLevel level, + ZlibStreamFlavor flavor, + bool leaveOpen, + int windowBits) + : base() + { + this._flushMode = FlushType.None; + //this._workingBuffer = new byte[WORKING_BUFFER_SIZE_DEFAULT]; + this._stream = stream; + this._leaveOpen = leaveOpen; + this._compressionMode = compressionMode; + this._flavor = flavor; + this._level = level; + this.windowBitsMax = windowBits; + // workitem 7159 + if (flavor == ZlibStreamFlavor.GZIP) + { + this.crc = new BestHTTP.Decompression.Crc.CRC32(); + } + } + + + protected internal bool _wantCompress + { + get + { + return (this._compressionMode == CompressionMode.Compress); + } + } + + private ZlibCodec z + { + get + { + if (_z == null) + { + bool wantRfc1950Header = (this._flavor == ZlibStreamFlavor.ZLIB); + _z = new ZlibCodec(); + if (this._compressionMode == CompressionMode.Decompress) + { + _z.InitializeInflate(this.windowBitsMax, wantRfc1950Header); + } + else + { + _z.Strategy = Strategy; + _z.InitializeDeflate(this._level, this.windowBitsMax, wantRfc1950Header); + } + } + return _z; + } + } + + + + private byte[] workingBuffer + { + get + { + if (_workingBuffer == null) + _workingBuffer = BufferPool.Get(_bufferSize, true); + return _workingBuffer; + } + } + + + + public override void Write(System.Byte[] buffer, int offset, int count) + { + // workitem 7159 + // calculate the CRC on the unccompressed data (before writing) + if (crc != null) + crc.SlurpBlock(buffer, offset, count); + + if (_streamMode == StreamMode.Undefined) + _streamMode = StreamMode.Writer; + else if (_streamMode != StreamMode.Writer) + throw new ZlibException("Cannot Write after Reading."); + + if (count == 0) + return; + + // first reference of z property will initialize the private var _z + z.InputBuffer = buffer; + _z.NextIn = offset; + _z.AvailableBytesIn = count; + bool done = false; + do + { + _z.OutputBuffer = workingBuffer; + _z.NextOut = 0; + _z.AvailableBytesOut = _workingBuffer.Length; + int rc = (_wantCompress) + ? _z.Deflate(_flushMode) + : _z.Inflate(_flushMode); + if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) + throw new ZlibException((_wantCompress ? "de" : "in") + "flating: " + _z.Message); + + //if (_workingBuffer.Length - _z.AvailableBytesOut > 0) + _stream.Write(_workingBuffer, 0, _workingBuffer.Length - _z.AvailableBytesOut); + + done = _z.AvailableBytesIn == 0 && _z.AvailableBytesOut != 0; + + // If GZIP and de-compress, we're done when 8 bytes remain. + if (_flavor == ZlibStreamFlavor.GZIP && !_wantCompress) + done = (_z.AvailableBytesIn == 8 && _z.AvailableBytesOut != 0); + + } + while (!done); + } + + + + private void finish() + { + if (_z == null) return; + + if (_streamMode == StreamMode.Writer) + { + bool done = false; + do + { + _z.OutputBuffer = workingBuffer; + _z.NextOut = 0; + _z.AvailableBytesOut = _workingBuffer.Length; + int rc = (_wantCompress) + ? _z.Deflate(FlushType.Finish) + : _z.Inflate(FlushType.Finish); + + if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) + { + string verb = (_wantCompress ? "de" : "in") + "flating"; + if (_z.Message == null) + throw new ZlibException(String.Format("{0}: (rc = {1})", verb, rc)); + else + throw new ZlibException(verb + ": " + _z.Message); + } + + if (_workingBuffer.Length - _z.AvailableBytesOut > 0) + { + _stream.Write(_workingBuffer, 0, _workingBuffer.Length - _z.AvailableBytesOut); + } + + done = _z.AvailableBytesIn == 0 && _z.AvailableBytesOut != 0; + // If GZIP and de-compress, we're done when 8 bytes remain. + if (_flavor == ZlibStreamFlavor.GZIP && !_wantCompress) + done = (_z.AvailableBytesIn == 8 && _z.AvailableBytesOut != 0); + + } + while (!done); + + Flush(); + + // workitem 7159 + if (_flavor == ZlibStreamFlavor.GZIP) + { + if (_wantCompress) + { + // Emit the GZIP trailer: CRC32 and size mod 2^32 + int c1 = crc.Crc32Result; + _stream.Write(BitConverter.GetBytes(c1), 0, 4); + int c2 = (Int32)(crc.TotalBytesRead & 0x00000000FFFFFFFF); + _stream.Write(BitConverter.GetBytes(c2), 0, 4); + } + else + { + throw new ZlibException("Writing with decompression is not supported."); + } + } + } + // workitem 7159 + else if (_streamMode == StreamMode.Reader) + { + if (_flavor == ZlibStreamFlavor.GZIP) + { + if (!_wantCompress) + { + // workitem 8501: handle edge case (decompress empty stream) + if (_z.TotalBytesOut == 0L) + return; + + // Read and potentially verify the GZIP trailer: + // CRC32 and size mod 2^32 + byte[] trailer = BufferPool.Get(8, true); + + // workitems 8679 & 12554 + if (_z.AvailableBytesIn < 8) + { + // Make sure we have read to the end of the stream + Array.Copy(_z.InputBuffer, _z.NextIn, trailer, 0, _z.AvailableBytesIn); + int bytesNeeded = 8 - _z.AvailableBytesIn; + int bytesRead = _stream.Read(trailer, + _z.AvailableBytesIn, + bytesNeeded); + if (bytesNeeded != bytesRead) + { + BufferPool.Release(trailer); + throw new ZlibException(String.Format("Missing or incomplete GZIP trailer. Expected 8 bytes, got {0}.", + _z.AvailableBytesIn + bytesRead)); + } + } + else + { + Array.Copy(_z.InputBuffer, _z.NextIn, trailer, 0, 8); + } + + Int32 crc32_expected = BitConverter.ToInt32(trailer, 0); + Int32 crc32_actual = crc.Crc32Result; + Int32 isize_expected = BitConverter.ToInt32(trailer, 4); + Int32 isize_actual = (Int32)(_z.TotalBytesOut & 0x00000000FFFFFFFF); + + if (crc32_actual != crc32_expected) + { + BufferPool.Release(trailer); + throw new ZlibException(String.Format("Bad CRC32 in GZIP trailer. (actual({0:X8})!=expected({1:X8}))", crc32_actual, crc32_expected)); + } + + if (isize_actual != isize_expected) + { + BufferPool.Release(trailer); + throw new ZlibException(String.Format("Bad size in GZIP trailer. (actual({0})!=expected({1}))", isize_actual, isize_expected)); + } + BufferPool.Release(trailer); + } + else + { + throw new ZlibException("Reading with compression is not supported."); + } + } + } + } + + + private void end() + { + if (z == null) + return; + if (_wantCompress) + { + _z.EndDeflate(); + } + else + { + _z.EndInflate(); + } + _z = null; + BufferPool.Release(_workingBuffer); + _workingBuffer = null; + } + + + public +#if !NETFX_CORE + override +#endif + void Close() + { + if (_stream == null) return; + try + { + finish(); + } + finally + { + end(); + if (!_leaveOpen) _stream.Dispose(); + _stream = null; + } + } + + public override void Flush() + { + _stream.Flush(); + } + + public override System.Int64 Seek(System.Int64 offset, System.IO.SeekOrigin origin) + { + throw new NotImplementedException(); + //_outStream.Seek(offset, origin); + } + public override void SetLength(System.Int64 value) + { + _stream.SetLength(value); + nomoreinput = false; + } + + +#if NOT + public int Read() + { + if (Read(_buf1, 0, 1) == 0) + return 0; + // calculate CRC after reading + if (crc!=null) + crc.SlurpBlock(_buf1,0,1); + return (_buf1[0] & 0xFF); + } +#endif + + private bool nomoreinput = false; + + + + private string ReadZeroTerminatedString() + { + var list = new System.Collections.Generic.List(); + bool done = false; + do + { + // workitem 7740 + int n = _stream.Read(_buf1, 0, 1); + if (n != 1) + throw new ZlibException("Unexpected EOF reading GZIP header."); + else + { + if (_buf1[0] == 0) + done = true; + else + list.Add(_buf1[0]); + } + } while (!done); + byte[] a = list.ToArray(); + return GZipStream.iso8859dash1.GetString(a, 0, a.Length); + } + + + private int _ReadAndValidateGzipHeader() + { + int totalBytesRead = 0; + // read the header on the first read + byte[] header = BufferPool.Get(10, true); + int n = _stream.Read(header, 0, 10); + + // workitem 8501: handle edge case (decompress empty stream) + if (n == 0) + { + BufferPool.Release(header); + return 0; + } + + if (n != 10) + { + BufferPool.Release(header); + throw new ZlibException("Not a valid GZIP stream."); + } + + if (header[0] != 0x1F || header[1] != 0x8B || header[2] != 8) + { + BufferPool.Release(header); + throw new ZlibException("Bad GZIP header."); + } + + Int32 timet = BitConverter.ToInt32(header, 4); + _GzipMtime = GZipStream._unixEpoch.AddSeconds(timet); + totalBytesRead += n; + if ((header[3] & 0x04) == 0x04) + { + // read and discard extra field + n = _stream.Read(header, 0, 2); // 2-byte length field + totalBytesRead += n; + + Int16 extraLength = (Int16)(header[0] + header[1] * 256); + byte[] extra = BufferPool.Get(extraLength, true); + n = _stream.Read(extra, 0, extraLength); + if (n != extraLength) + { + BufferPool.Release(extra); + BufferPool.Release(header); + throw new ZlibException("Unexpected end-of-file reading GZIP header."); + } + totalBytesRead += n; + } + if ((header[3] & 0x08) == 0x08) + _GzipFileName = ReadZeroTerminatedString(); + if ((header[3] & 0x10) == 0x010) + _GzipComment = ReadZeroTerminatedString(); + if ((header[3] & 0x02) == 0x02) + Read(_buf1, 0, 1); // CRC16, ignore + + BufferPool.Release(header); + return totalBytesRead; + } + + + + public override System.Int32 Read(System.Byte[] buffer, System.Int32 offset, System.Int32 count) + { + // According to MS documentation, any implementation of the IO.Stream.Read function must: + // (a) throw an exception if offset & count reference an invalid part of the buffer, + // or if count < 0, or if buffer is null + // (b) return 0 only upon EOF, or if count = 0 + // (c) if not EOF, then return at least 1 byte, up to bytes + + if (_streamMode == StreamMode.Undefined) + { + if (!this._stream.CanRead) throw new ZlibException("The stream is not readable."); + // for the first read, set up some controls. + _streamMode = StreamMode.Reader; + // (The first reference to _z goes through the private accessor which + // may initialize it.) + z.AvailableBytesIn = 0; + if (_flavor == ZlibStreamFlavor.GZIP) + { + _gzipHeaderByteCount = _ReadAndValidateGzipHeader(); + // workitem 8501: handle edge case (decompress empty stream) + if (_gzipHeaderByteCount == 0) + return 0; + } + } + + if (_streamMode != StreamMode.Reader) + throw new ZlibException("Cannot Read after Writing."); + + if (count == 0) return 0; + if (nomoreinput && _wantCompress) return 0; // workitem 8557 + if (buffer == null) throw new ArgumentNullException("buffer"); + if (count < 0) throw new ArgumentOutOfRangeException("count"); + if (offset < buffer.GetLowerBound(0)) throw new ArgumentOutOfRangeException("offset"); + if ((offset + count) > buffer.GetLength(0)) throw new ArgumentOutOfRangeException("count"); + + int rc = 0; + + // set up the output of the deflate/inflate codec: + _z.OutputBuffer = buffer; + _z.NextOut = offset; + _z.AvailableBytesOut = count; + + // This is necessary in case _workingBuffer has been resized. (new byte[]) + // (The first reference to _workingBuffer goes through the private accessor which + // may initialize it.) + _z.InputBuffer = workingBuffer; + + do + { + // need data in _workingBuffer in order to deflate/inflate. Here, we check if we have any. + if ((_z.AvailableBytesIn == 0) && (!nomoreinput)) + { + // No data available, so try to Read data from the captive stream. + _z.NextIn = 0; + _z.AvailableBytesIn = _stream.Read(_workingBuffer, 0, _workingBuffer.Length); + if (_z.AvailableBytesIn == 0) + nomoreinput = true; + + } + // we have data in InputBuffer; now compress or decompress as appropriate + rc = (_wantCompress) + ? _z.Deflate(_flushMode) + : _z.Inflate(_flushMode); + + if (nomoreinput && (rc == ZlibConstants.Z_BUF_ERROR)) + return 0; + + if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) + throw new ZlibException(String.Format("{0}flating: rc={1} msg={2}", (_wantCompress ? "de" : "in"), rc, _z.Message)); + + if ((nomoreinput || rc == ZlibConstants.Z_STREAM_END) && (_z.AvailableBytesOut == count)) + break; // nothing more to read + } + //while (_z.AvailableBytesOut == count && rc == ZlibConstants.Z_OK); + while (_z.AvailableBytesOut > 0 && !nomoreinput && rc == ZlibConstants.Z_OK); + + + // workitem 8557 + // is there more room in output? + if (_z.AvailableBytesOut > 0) + { + if (rc == ZlibConstants.Z_OK && _z.AvailableBytesIn == 0) + { + // deferred + } + + // are we completely done reading? + if (nomoreinput) + { + // and in compression? + if (_wantCompress) + { + // no more input data available; therefore we flush to + // try to complete the read + rc = _z.Deflate(FlushType.Finish); + + if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) + throw new ZlibException(String.Format("Deflating: rc={0} msg={1}", rc, _z.Message)); + } + } + } + + + rc = (count - _z.AvailableBytesOut); + + // calculate CRC after reading + if (crc != null) + crc.SlurpBlock(buffer, offset, rc); + + return rc; + } + + + + public override System.Boolean CanRead + { + get { return this._stream.CanRead; } + } + + public override System.Boolean CanSeek + { + get { return this._stream.CanSeek; } + } + + public override System.Boolean CanWrite + { + get { return this._stream.CanWrite; } + } + + public override System.Int64 Length + { + get { return _stream.Length; } + } + + public override long Position + { + get { throw new NotImplementedException(); } + set { throw new NotImplementedException(); } + } + + internal enum StreamMode + { + Writer, + Reader, + Undefined, + } + + } + + +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZlibBaseStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZlibBaseStream.cs.meta new file mode 100644 index 000000000..7824525c6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZlibBaseStream.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b34dd239e486b474aad68fb4080797c8 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZlibCodec.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZlibCodec.cs new file mode 100644 index 000000000..b1545440d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZlibCodec.cs @@ -0,0 +1,712 @@ +// ZlibCodec.cs +// ------------------------------------------------------------------ +// +// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation. +// All rights reserved. +// +// This code module is part of DotNetZip, a zipfile class library. +// +// ------------------------------------------------------------------ +// +// This code is licensed under the Microsoft Public License. +// See the file License.txt for the license details. +// More info on: http://dotnetzip.codeplex.com +// +// ------------------------------------------------------------------ +// +// last saved (in emacs): +// Time-stamp: <2009-November-03 15:40:51> +// +// ------------------------------------------------------------------ +// +// This module defines a Codec for ZLIB compression and +// decompression. This code extends code that was based the jzlib +// implementation of zlib, but this code is completely novel. The codec +// class is new, and encapsulates some behaviors that are new, and some +// that were present in other classes in the jzlib code base. In +// keeping with the license for jzlib, the copyright to the jzlib code +// is included below. +// +// ------------------------------------------------------------------ +// +// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. 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. +// +// 3. The names of the authors may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT, +// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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. +// +// ----------------------------------------------------------------------- +// +// This program is based on zlib-1.1.3; credit to authors +// Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) +// and contributors of zlib. +// +// ----------------------------------------------------------------------- + + +using System; +using Interop=System.Runtime.InteropServices; + +namespace BestHTTP.Decompression.Zlib +{ + /// + /// Encoder and Decoder for ZLIB and DEFLATE (IETF RFC1950 and RFC1951). + /// + /// + /// + /// This class compresses and decompresses data according to the Deflate algorithm + /// and optionally, the ZLIB format, as documented in RFC 1950 - ZLIB and RFC 1951 - DEFLATE. + /// + sealed internal class ZlibCodec + { + /// + /// The buffer from which data is taken. + /// + public byte[] InputBuffer; + + /// + /// An index into the InputBuffer array, indicating where to start reading. + /// + public int NextIn; + + /// + /// The number of bytes available in the InputBuffer, starting at NextIn. + /// + /// + /// Generally you should set this to InputBuffer.Length before the first Inflate() or Deflate() call. + /// The class will update this number as calls to Inflate/Deflate are made. + /// + public int AvailableBytesIn; + + /// + /// Total number of bytes read so far, through all calls to Inflate()/Deflate(). + /// + public long TotalBytesIn; + + /// + /// Buffer to store output data. + /// + public byte[] OutputBuffer; + + /// + /// An index into the OutputBuffer array, indicating where to start writing. + /// + public int NextOut; + + /// + /// The number of bytes available in the OutputBuffer, starting at NextOut. + /// + /// + /// Generally you should set this to OutputBuffer.Length before the first Inflate() or Deflate() call. + /// The class will update this number as calls to Inflate/Deflate are made. + /// + public int AvailableBytesOut; + + /// + /// Total number of bytes written to the output so far, through all calls to Inflate()/Deflate(). + /// + public long TotalBytesOut; + + /// + /// used for diagnostics, when something goes wrong! + /// + public System.String Message; + + internal DeflateManager dstate; + internal InflateManager istate; + + internal uint _Adler32; + + /// + /// The compression level to use in this codec. Useful only in compression mode. + /// + public CompressionLevel CompressLevel = CompressionLevel.Default; + + /// + /// The number of Window Bits to use. + /// + /// + /// This gauges the size of the sliding window, and hence the + /// compression effectiveness as well as memory consumption. It's best to just leave this + /// setting alone if you don't know what it is. The maximum value is 15 bits, which implies + /// a 32k window. + /// + public int WindowBits = ZlibConstants.WindowBitsDefault; + + /// + /// The compression strategy to use. + /// + /// + /// This is only effective in compression. The theory offered by ZLIB is that different + /// strategies could potentially produce significant differences in compression behavior + /// for different data sets. Unfortunately I don't have any good recommendations for how + /// to set it differently. When I tested changing the strategy I got minimally different + /// compression performance. It's best to leave this property alone if you don't have a + /// good feel for it. Or, you may want to produce a test harness that runs through the + /// different strategy options and evaluates them on different file types. If you do that, + /// let me know your results. + /// + public CompressionStrategy Strategy = CompressionStrategy.Default; + + + /// + /// The Adler32 checksum on the data transferred through the codec so far. You probably don't need to look at this. + /// + public int Adler32 { get { return (int)_Adler32; } } + + + /// + /// Create a ZlibCodec. + /// + /// + /// If you use this default constructor, you will later have to explicitly call + /// InitializeInflate() or InitializeDeflate() before using the ZlibCodec to compress + /// or decompress. + /// + public ZlibCodec() { } + + /// + /// Create a ZlibCodec that either compresses or decompresses. + /// + /// + /// Indicates whether the codec should compress (deflate) or decompress (inflate). + /// + public ZlibCodec(CompressionMode mode) + { + if (mode == CompressionMode.Compress) + { + int rc = InitializeDeflate(); + if (rc != ZlibConstants.Z_OK) throw new ZlibException("Cannot initialize for deflate."); + } + else if (mode == CompressionMode.Decompress) + { + int rc = InitializeInflate(); + if (rc != ZlibConstants.Z_OK) throw new ZlibException("Cannot initialize for inflate."); + } + else throw new ZlibException("Invalid ZlibStreamFlavor."); + } + + /// + /// Initialize the inflation state. + /// + /// + /// It is not necessary to call this before using the ZlibCodec to inflate data; + /// It is implicitly called when you call the constructor. + /// + /// Z_OK if everything goes well. + public int InitializeInflate() + { + return InitializeInflate(this.WindowBits); + } + + /// + /// Initialize the inflation state with an explicit flag to + /// govern the handling of RFC1950 header bytes. + /// + /// + /// + /// By default, the ZLIB header defined in RFC 1950 is expected. If + /// you want to read a zlib stream you should specify true for + /// expectRfc1950Header. If you have a deflate stream, you will want to specify + /// false. It is only necessary to invoke this initializer explicitly if you + /// want to specify false. + /// + /// + /// whether to expect an RFC1950 header byte + /// pair when reading the stream of data to be inflated. + /// + /// Z_OK if everything goes well. + public int InitializeInflate(bool expectRfc1950Header) + { + return InitializeInflate(this.WindowBits, expectRfc1950Header); + } + + /// + /// Initialize the ZlibCodec for inflation, with the specified number of window bits. + /// + /// The number of window bits to use. If you need to ask what that is, + /// then you shouldn't be calling this initializer. + /// Z_OK if all goes well. + public int InitializeInflate(int windowBits) + { + this.WindowBits = windowBits; + return InitializeInflate(windowBits, true); + } + + /// + /// Initialize the inflation state with an explicit flag to govern the handling of + /// RFC1950 header bytes. + /// + /// + /// + /// If you want to read a zlib stream you should specify true for + /// expectRfc1950Header. In this case, the library will expect to find a ZLIB + /// header, as defined in RFC + /// 1950, in the compressed stream. If you will be reading a DEFLATE or + /// GZIP stream, which does not have such a header, you will want to specify + /// false. + /// + /// + /// whether to expect an RFC1950 header byte pair when reading + /// the stream of data to be inflated. + /// The number of window bits to use. If you need to ask what that is, + /// then you shouldn't be calling this initializer. + /// Z_OK if everything goes well. + public int InitializeInflate(int windowBits, bool expectRfc1950Header) + { + this.WindowBits = windowBits; + if (dstate != null) throw new ZlibException("You may not call InitializeInflate() after calling InitializeDeflate()."); + istate = new InflateManager(expectRfc1950Header); + return istate.Initialize(this, windowBits); + } + + /// + /// Inflate the data in the InputBuffer, placing the result in the OutputBuffer. + /// + /// + /// You must have set InputBuffer and OutputBuffer, NextIn and NextOut, and AvailableBytesIn and + /// AvailableBytesOut before calling this method. + /// + /// + /// + /// private void InflateBuffer() + /// { + /// int bufferSize = 1024; + /// byte[] buffer = new byte[bufferSize]; + /// ZlibCodec decompressor = new ZlibCodec(); + /// + /// Console.WriteLine("\n============================================"); + /// Console.WriteLine("Size of Buffer to Inflate: {0} bytes.", CompressedBytes.Length); + /// MemoryStream ms = new MemoryStream(DecompressedBytes); + /// + /// int rc = decompressor.InitializeInflate(); + /// + /// decompressor.InputBuffer = CompressedBytes; + /// decompressor.NextIn = 0; + /// decompressor.AvailableBytesIn = CompressedBytes.Length; + /// + /// decompressor.OutputBuffer = buffer; + /// + /// // pass 1: inflate + /// do + /// { + /// decompressor.NextOut = 0; + /// decompressor.AvailableBytesOut = buffer.Length; + /// rc = decompressor.Inflate(FlushType.None); + /// + /// if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) + /// throw new Exception("inflating: " + decompressor.Message); + /// + /// ms.Write(decompressor.OutputBuffer, 0, buffer.Length - decompressor.AvailableBytesOut); + /// } + /// while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); + /// + /// // pass 2: finish and flush + /// do + /// { + /// decompressor.NextOut = 0; + /// decompressor.AvailableBytesOut = buffer.Length; + /// rc = decompressor.Inflate(FlushType.Finish); + /// + /// if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) + /// throw new Exception("inflating: " + decompressor.Message); + /// + /// if (buffer.Length - decompressor.AvailableBytesOut > 0) + /// ms.Write(buffer, 0, buffer.Length - decompressor.AvailableBytesOut); + /// } + /// while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); + /// + /// decompressor.EndInflate(); + /// } + /// + /// + /// + /// The flush to use when inflating. + /// Z_OK if everything goes well. + public int Inflate(FlushType flush) + { + if (istate == null) + throw new ZlibException("No Inflate State!"); + return istate.Inflate(flush); + } + + + /// + /// Ends an inflation session. + /// + /// + /// Call this after successively calling Inflate(). This will cause all buffers to be flushed. + /// After calling this you cannot call Inflate() without a intervening call to one of the + /// InitializeInflate() overloads. + /// + /// Z_OK if everything goes well. + public int EndInflate() + { + if (istate == null) + throw new ZlibException("No Inflate State!"); + int ret = istate.End(); + istate = null; + return ret; + } + + /// + /// I don't know what this does! + /// + /// Z_OK if everything goes well. + public int SyncInflate() + { + if (istate == null) + throw new ZlibException("No Inflate State!"); + return istate.Sync(); + } + + /// + /// Initialize the ZlibCodec for deflation operation. + /// + /// + /// The codec will use the MAX window bits and the default level of compression. + /// + /// + /// + /// int bufferSize = 40000; + /// byte[] CompressedBytes = new byte[bufferSize]; + /// byte[] DecompressedBytes = new byte[bufferSize]; + /// + /// ZlibCodec compressor = new ZlibCodec(); + /// + /// compressor.InitializeDeflate(CompressionLevel.Default); + /// + /// compressor.InputBuffer = System.Text.ASCIIEncoding.ASCII.GetBytes(TextToCompress); + /// compressor.NextIn = 0; + /// compressor.AvailableBytesIn = compressor.InputBuffer.Length; + /// + /// compressor.OutputBuffer = CompressedBytes; + /// compressor.NextOut = 0; + /// compressor.AvailableBytesOut = CompressedBytes.Length; + /// + /// while (compressor.TotalBytesIn != TextToCompress.Length && compressor.TotalBytesOut < bufferSize) + /// { + /// compressor.Deflate(FlushType.None); + /// } + /// + /// while (true) + /// { + /// int rc= compressor.Deflate(FlushType.Finish); + /// if (rc == ZlibConstants.Z_STREAM_END) break; + /// } + /// + /// compressor.EndDeflate(); + /// + /// + /// + /// Z_OK if all goes well. You generally don't need to check the return code. + public int InitializeDeflate() + { + return _InternalInitializeDeflate(true); + } + + /// + /// Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel. + /// + /// + /// The codec will use the maximum window bits (15) and the specified + /// CompressionLevel. It will emit a ZLIB stream as it compresses. + /// + /// The compression level for the codec. + /// Z_OK if all goes well. + public int InitializeDeflate(CompressionLevel level) + { + this.CompressLevel = level; + return _InternalInitializeDeflate(true); + } + + + /// + /// Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, + /// and the explicit flag governing whether to emit an RFC1950 header byte pair. + /// + /// + /// The codec will use the maximum window bits (15) and the specified CompressionLevel. + /// If you want to generate a zlib stream, you should specify true for + /// wantRfc1950Header. In this case, the library will emit a ZLIB + /// header, as defined in RFC + /// 1950, in the compressed stream. + /// + /// The compression level for the codec. + /// whether to emit an initial RFC1950 byte pair in the compressed stream. + /// Z_OK if all goes well. + public int InitializeDeflate(CompressionLevel level, bool wantRfc1950Header) + { + this.CompressLevel = level; + return _InternalInitializeDeflate(wantRfc1950Header); + } + + + /// + /// Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, + /// and the specified number of window bits. + /// + /// + /// The codec will use the specified number of window bits and the specified CompressionLevel. + /// + /// The compression level for the codec. + /// the number of window bits to use. If you don't know what this means, don't use this method. + /// Z_OK if all goes well. + public int InitializeDeflate(CompressionLevel level, int bits) + { + this.CompressLevel = level; + this.WindowBits = bits; + return _InternalInitializeDeflate(true); + } + + /// + /// Initialize the ZlibCodec for deflation operation, using the specified + /// CompressionLevel, the specified number of window bits, and the explicit flag + /// governing whether to emit an RFC1950 header byte pair. + /// + /// + /// The compression level for the codec. + /// whether to emit an initial RFC1950 byte pair in the compressed stream. + /// the number of window bits to use. If you don't know what this means, don't use this method. + /// Z_OK if all goes well. + public int InitializeDeflate(CompressionLevel level, int bits, bool wantRfc1950Header) + { + this.CompressLevel = level; + this.WindowBits = bits; + return _InternalInitializeDeflate(wantRfc1950Header); + } + + private int _InternalInitializeDeflate(bool wantRfc1950Header) + { + if (istate != null) throw new ZlibException("You may not call InitializeDeflate() after calling InitializeInflate()."); + dstate = new DeflateManager(); + dstate.WantRfc1950HeaderBytes = wantRfc1950Header; + + return dstate.Initialize(this, this.CompressLevel, this.WindowBits, this.Strategy); + } + + /// + /// Deflate one batch of data. + /// + /// + /// You must have set InputBuffer and OutputBuffer before calling this method. + /// + /// + /// + /// private void DeflateBuffer(CompressionLevel level) + /// { + /// int bufferSize = 1024; + /// byte[] buffer = new byte[bufferSize]; + /// ZlibCodec compressor = new ZlibCodec(); + /// + /// Console.WriteLine("\n============================================"); + /// Console.WriteLine("Size of Buffer to Deflate: {0} bytes.", UncompressedBytes.Length); + /// MemoryStream ms = new MemoryStream(); + /// + /// int rc = compressor.InitializeDeflate(level); + /// + /// compressor.InputBuffer = UncompressedBytes; + /// compressor.NextIn = 0; + /// compressor.AvailableBytesIn = UncompressedBytes.Length; + /// + /// compressor.OutputBuffer = buffer; + /// + /// // pass 1: deflate + /// do + /// { + /// compressor.NextOut = 0; + /// compressor.AvailableBytesOut = buffer.Length; + /// rc = compressor.Deflate(FlushType.None); + /// + /// if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) + /// throw new Exception("deflating: " + compressor.Message); + /// + /// ms.Write(compressor.OutputBuffer, 0, buffer.Length - compressor.AvailableBytesOut); + /// } + /// while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); + /// + /// // pass 2: finish and flush + /// do + /// { + /// compressor.NextOut = 0; + /// compressor.AvailableBytesOut = buffer.Length; + /// rc = compressor.Deflate(FlushType.Finish); + /// + /// if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) + /// throw new Exception("deflating: " + compressor.Message); + /// + /// if (buffer.Length - compressor.AvailableBytesOut > 0) + /// ms.Write(buffer, 0, buffer.Length - compressor.AvailableBytesOut); + /// } + /// while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); + /// + /// compressor.EndDeflate(); + /// + /// ms.Seek(0, SeekOrigin.Begin); + /// CompressedBytes = new byte[compressor.TotalBytesOut]; + /// ms.Read(CompressedBytes, 0, CompressedBytes.Length); + /// } + /// + /// + /// whether to flush all data as you deflate. Generally you will want to + /// use Z_NO_FLUSH here, in a series of calls to Deflate(), and then call EndDeflate() to + /// flush everything. + /// + /// Z_OK if all goes well. + public int Deflate(FlushType flush) + { + if (dstate == null) + throw new ZlibException("No Deflate State!"); + return dstate.Deflate(flush); + } + + /// + /// End a deflation session. + /// + /// + /// Call this after making a series of one or more calls to Deflate(). All buffers are flushed. + /// + /// Z_OK if all goes well. + public int EndDeflate() + { + if (dstate == null) + throw new ZlibException("No Deflate State!"); + // Room for improvement: dinoch Tue, 03 Nov 2009 15:39 (test this) + //int ret = dstate.End(); + dstate = null; + return ZlibConstants.Z_OK; //ret; + } + + /// + /// Reset a codec for another deflation session. + /// + /// + /// Call this to reset the deflation state. For example if a thread is deflating + /// non-consecutive blocks, you can call Reset() after the Deflate(Sync) of the first + /// block and before the next Deflate(None) of the second block. + /// + /// Z_OK if all goes well. + public void ResetDeflate() + { + if (dstate == null) + throw new ZlibException("No Deflate State!"); + dstate.Reset(); + } + + + /// + /// Set the CompressionStrategy and CompressionLevel for a deflation session. + /// + /// the level of compression to use. + /// the strategy to use for compression. + /// Z_OK if all goes well. + public int SetDeflateParams(CompressionLevel level, CompressionStrategy strategy) + { + if (dstate == null) + throw new ZlibException("No Deflate State!"); + return dstate.SetParams(level, strategy); + } + + + /// + /// Set the dictionary to be used for either Inflation or Deflation. + /// + /// The dictionary bytes to use. + /// Z_OK if all goes well. + public int SetDictionary(byte[] dictionary) + { + if (istate != null) + return istate.SetDictionary(dictionary); + + if (dstate != null) + return dstate.SetDictionary(dictionary); + + throw new ZlibException("No Inflate or Deflate state!"); + } + + // Flush as much pending output as possible. All deflate() output goes + // through this function so some applications may wish to modify it + // to avoid allocating a large strm->next_out buffer and copying into it. + // (See also read_buf()). + internal void flush_pending() + { + int len = dstate.pendingCount; + + if (len > AvailableBytesOut) + len = AvailableBytesOut; + if (len == 0) + return; + + if (dstate.pending.Length <= dstate.nextPending || + OutputBuffer.Length <= NextOut || + dstate.pending.Length < (dstate.nextPending + len) || + OutputBuffer.Length < (NextOut + len)) + { + throw new ZlibException(String.Format("Invalid State. (pending.Length={0}, pendingCount={1})", + dstate.pending.Length, dstate.pendingCount)); + } + + Array.Copy(dstate.pending, dstate.nextPending, OutputBuffer, NextOut, len); + + NextOut += len; + dstate.nextPending += len; + TotalBytesOut += len; + AvailableBytesOut -= len; + dstate.pendingCount -= len; + if (dstate.pendingCount == 0) + { + dstate.nextPending = 0; + } + } + + // Read a new buffer from the current input stream, update the adler32 + // and total number of bytes read. All deflate() input goes through + // this function so some applications may wish to modify it to avoid + // allocating a large strm->next_in buffer and copying from it. + // (See also flush_pending()). + internal int read_buf(byte[] buf, int start, int size) + { + int len = AvailableBytesIn; + + if (len > size) + len = size; + if (len == 0) + return 0; + + AvailableBytesIn -= len; + + if (dstate.WantRfc1950HeaderBytes) + { + _Adler32 = Adler.Adler32(_Adler32, InputBuffer, NextIn, len); + } + Array.Copy(InputBuffer, NextIn, buf, start, len); + NextIn += len; + TotalBytesIn += len; + return len; + } + + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZlibCodec.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZlibCodec.cs.meta new file mode 100644 index 000000000..a017f14f5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZlibCodec.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bc104cfa5b2ba31408766b86b9977226 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZlibConstants.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZlibConstants.cs new file mode 100644 index 000000000..b530c39b1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZlibConstants.cs @@ -0,0 +1,128 @@ +// ZlibConstants.cs +// ------------------------------------------------------------------ +// +// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation. +// All rights reserved. +// +// This code module is part of DotNetZip, a zipfile class library. +// +// ------------------------------------------------------------------ +// +// This code is licensed under the Microsoft Public License. +// See the file License.txt for the license details. +// More info on: http://dotnetzip.codeplex.com +// +// ------------------------------------------------------------------ +// +// last saved (in emacs): +// Time-stamp: <2009-November-03 18:50:19> +// +// ------------------------------------------------------------------ +// +// This module defines constants used by the zlib class library. This +// code is derived from the jzlib implementation of zlib, but +// significantly modified. In keeping with the license for jzlib, the +// copyright to that code is included here. +// +// ------------------------------------------------------------------ +// +// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. 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. +// +// 3. The names of the authors may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT, +// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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. +// +// ----------------------------------------------------------------------- +// +// This program is based on zlib-1.1.3; credit to authors +// Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) +// and contributors of zlib. +// +// ----------------------------------------------------------------------- + + +using System; + +namespace BestHTTP.Decompression.Zlib +{ + /// + /// A bunch of constants used in the Zlib interface. + /// + public static class ZlibConstants + { + /// + /// The maximum number of window bits for the Deflate algorithm. + /// + public const int WindowBitsMax = 15; // 32K LZ77 window + + /// + /// The default number of window bits for the Deflate algorithm. + /// + public const int WindowBitsDefault = WindowBitsMax; + + /// + /// indicates everything is A-OK + /// + public const int Z_OK = 0; + + /// + /// Indicates that the last operation reached the end of the stream. + /// + public const int Z_STREAM_END = 1; + + /// + /// The operation ended in need of a dictionary. + /// + public const int Z_NEED_DICT = 2; + + /// + /// There was an error with the stream - not enough data, not open and readable, etc. + /// + public const int Z_STREAM_ERROR = -2; + + /// + /// There was an error with the data - not enough data, bad data, etc. + /// + public const int Z_DATA_ERROR = -3; + + /// + /// There was an error with the working buffer. + /// + public const int Z_BUF_ERROR = -5; + + /// + /// The size of the working buffer used in the ZlibCodec class. Defaults to 8192 bytes. + /// +#if NETCF + public const int WorkingBufferSizeDefault = 8192; +#else + public const int WorkingBufferSizeDefault = 16384; +#endif + /// + /// The minimum size of the working buffer used in the ZlibCodec class. Currently it is 128 bytes. + /// + public const int WorkingBufferSizeMin = 1024; + } + +} + diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZlibConstants.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZlibConstants.cs.meta new file mode 100644 index 000000000..a1659c4da --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Decompression/ZlibConstants.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4cd9445fbeecd0642955b4ea35e211c8 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions.meta new file mode 100644 index 000000000..ee824e777 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e3ba637693c35a745aeb4052cfb287cb +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/BufferPoolMemoryStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/BufferPoolMemoryStream.cs new file mode 100644 index 000000000..cbf5023fb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/BufferPoolMemoryStream.cs @@ -0,0 +1,487 @@ +// +// System.IO.MemoryStream.cs +// +// Authors: Marcin Szczepanski (marcins@zipworld.com.au) +// Patrik Torstensson +// Gonzalo Paniagua Javier (gonzalo@ximian.com) +// +// (c) 2001,2002 Marcin Szczepanski, Patrik Torstensson +// (c) 2003 Ximian, Inc. (http://www.ximian.com) +// Copyright (C) 2004 Novell (http://www.novell.com) +// + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.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. +// + +using System; +using System.IO; + +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP.Extensions +{ + /// + /// This is a modified MemoryStream class to use VariableSizedBufferPool + /// + public sealed class BufferPoolMemoryStream : System.IO.Stream + { + bool canWrite; + bool allowGetBuffer; + int capacity; + int length; + byte[] internalBuffer; + int initialIndex; + bool expandable; + bool streamClosed; + int position; + int dirty_bytes; + bool releaseInternalBuffer; + + public BufferPoolMemoryStream() : this(0) + { + } + + public BufferPoolMemoryStream(int capacity) + { + if (capacity < 0) + throw new ArgumentOutOfRangeException("capacity"); + + canWrite = true; + + //internalBuffer = capacity > 0 ? BufferPool.Get(capacity, true) : BufferPool.NoData; + //this.capacity = internalBuffer.Length; + // + //expandable = true; + //allowGetBuffer = true; + var buffer = capacity > 0 ? BufferPool.Get(capacity, true) : BufferPool.NoData; + InternalConstructor(buffer, 0, buffer.Length, true, true, true, true); + } + + public BufferPoolMemoryStream(byte[] buffer) + { + if (buffer == null) + throw new ArgumentNullException("buffer"); + + InternalConstructor(buffer, 0, buffer.Length, true, false, true, false); + } + + public BufferPoolMemoryStream(byte[] buffer, bool writable) + { + if (buffer == null) + throw new ArgumentNullException("buffer"); + + InternalConstructor(buffer, 0, buffer.Length, writable, false, true, false); + } + + public BufferPoolMemoryStream(byte[] buffer, int index, int count) + { + InternalConstructor(buffer, index, count, true, false, true, false); + } + + public BufferPoolMemoryStream(byte[] buffer, int index, int count, bool writable) + { + InternalConstructor(buffer, index, count, writable, false, true, false); + } + + public BufferPoolMemoryStream(byte[] buffer, int index, int count, bool writable, bool publiclyVisible) + { + InternalConstructor(buffer, index, count, writable, publiclyVisible, true, false); + } + + public BufferPoolMemoryStream(byte[] buffer, int index, int count, bool writable, bool publiclyVisible, bool releaseBuffer) + { + InternalConstructor(buffer, index, count, writable, publiclyVisible, releaseBuffer, false); + } + + public BufferPoolMemoryStream(byte[] buffer, int index, int count, bool writable, bool publiclyVisible, bool releaseBuffer, bool canExpand) + { + InternalConstructor(buffer, index, count, writable, publiclyVisible, releaseBuffer, canExpand); + } + + void InternalConstructor(byte[] buffer, int index, int count, bool writable, bool publicallyVisible, bool releaseBuffer, bool canExpand) + { + if (buffer == null) + throw new ArgumentNullException("buffer"); + + if (index < 0 || count < 0) + throw new ArgumentOutOfRangeException("index or count is less than 0."); + + if (buffer.Length - index < count) + throw new ArgumentException("index+count", + "The size of the buffer is less than index + count."); + + canWrite = writable; + + internalBuffer = buffer; + capacity = count + index; + //length = capacity; + length = 0; + position = index; + initialIndex = index; + + allowGetBuffer = publicallyVisible; + releaseInternalBuffer = releaseBuffer; + expandable = canExpand; + } + + void CheckIfClosedThrowDisposed() + { + if (streamClosed) + throw new ObjectDisposedException("MemoryStream"); + } + + public override bool CanRead + { + get { return !streamClosed; } + } + + public override bool CanSeek + { + get { return !streamClosed; } + } + + public override bool CanWrite + { + get { return (!streamClosed && canWrite); } + } + + public int Capacity + { + get + { + CheckIfClosedThrowDisposed(); + return capacity - initialIndex; + } + + set + { + CheckIfClosedThrowDisposed(); + if (value == capacity) + return; // LAMENESS: see MemoryStreamTest.ConstructorFive + + if (!expandable) + throw new NotSupportedException("Cannot expand this MemoryStream"); + + if (value < 0 || value < length) + throw new ArgumentOutOfRangeException("value", + "New capacity cannot be negative or less than the current capacity " + value + " " + capacity); + + byte[] newBuffer = null; + if (value != 0) + { + newBuffer = BufferPool.Get(value, true); + Buffer.BlockCopy(internalBuffer, 0, newBuffer, 0, length); + } + + dirty_bytes = 0; // discard any dirty area beyond previous length + BufferPool.Release(internalBuffer); + internalBuffer = newBuffer; // It's null when capacity is set to 0 + capacity = internalBuffer != null ? internalBuffer.Length : 0; + } + } + + public override long Length + { + get + { + // LAMESPEC: The spec says to throw an IOException if the + // stream is closed and an ObjectDisposedException if + // "methods were called after the stream was closed". What + // is the difference? + + CheckIfClosedThrowDisposed(); + + // This is ok for MemoryStreamTest.ConstructorFive + return length - initialIndex; + } + } + + public override long Position + { + get + { + CheckIfClosedThrowDisposed(); + return position - initialIndex; + } + + set + { + CheckIfClosedThrowDisposed(); + if (value < 0) + throw new ArgumentOutOfRangeException("value", + "Position cannot be negative"); + + if (value > Int32.MaxValue) + throw new ArgumentOutOfRangeException("value", + "Position must be non-negative and less than 2^31 - 1 - origin"); + + position = initialIndex + (int)value; + } + } + + protected override void Dispose (bool disposing) + { + streamClosed = true; + expandable = false; + if (disposing && internalBuffer != null && this.releaseInternalBuffer) + BufferPool.Release(internalBuffer); + internalBuffer = null; + } + + public override void Flush() + { + // Do nothing + } + + public byte[] GetBuffer() + { + if (!allowGetBuffer) + throw new UnauthorizedAccessException(); + + return internalBuffer; + } + + public override int Read(byte[] buffer, int offset, int count) + { + CheckIfClosedThrowDisposed(); + + if (buffer == null) + throw new ArgumentNullException("buffer"); + + if (offset < 0 || count < 0) + throw new ArgumentOutOfRangeException("offset or count less than zero."); + + if (buffer.Length - offset < count) + throw new ArgumentException("offset+count", + "The size of the buffer is less than offset + count."); + + if (position >= length || count == 0) + return 0; + + if (position > length - count) + count = length - position; + + Buffer.BlockCopy(internalBuffer, position, buffer, offset, count); + position += count; + return count; + } + + public override int ReadByte() + { + CheckIfClosedThrowDisposed(); + if (position >= length) + return -1; + + return internalBuffer[position++]; + } + + public override long Seek(long offset, SeekOrigin loc) + { + CheckIfClosedThrowDisposed(); + + // It's funny that they don't throw this exception for < Int32.MinValue + if (offset > (long)Int32.MaxValue) + throw new ArgumentOutOfRangeException("Offset out of range. " + offset); + + int refPoint; + switch (loc) + { + case SeekOrigin.Begin: + if (offset < 0) + throw new IOException("Attempted to seek before start of MemoryStream."); + refPoint = initialIndex; + break; + case SeekOrigin.Current: + refPoint = position; + break; + case SeekOrigin.End: + refPoint = length; + break; + default: + throw new ArgumentException("loc", "Invalid SeekOrigin"); + } + + // LAMESPEC: My goodness, how may LAMESPECs are there in this + // class! :) In the spec for the Position property it's stated + // "The position must not be more than one byte beyond the end of the stream." + // In the spec for seek it says "Seeking to any location beyond the length of the + // stream is supported." That's a contradiction i'd say. + // I guess seek can go anywhere but if you use position it may get moved back. + + refPoint += (int)offset; + if (refPoint < initialIndex) + throw new IOException("Attempted to seek before start of MemoryStream."); + + position = refPoint; + return position; + } + + int CalculateNewCapacity(int minimum) + { + if (minimum < 256) + minimum = 256; // See GetBufferTwo test + + if (minimum < capacity * 2) + minimum = capacity * 2; + + if (!UnityEngine.Mathf.IsPowerOfTwo(minimum)) + minimum = UnityEngine.Mathf.NextPowerOfTwo(minimum); + + return minimum; + } + + void Expand(int newSize) + { + // We don't need to take into account the dirty bytes when incrementing the + // Capacity, as changing it will only preserve the valid clear region. + if (newSize > capacity) + Capacity = CalculateNewCapacity(newSize); + else if (dirty_bytes > 0) + { + Array.Clear(internalBuffer, length, dirty_bytes); + dirty_bytes = 0; + } + } + + public override void SetLength(long value) + { + if (!expandable && value > capacity) + throw new NotSupportedException("Expanding this MemoryStream is not supported"); + + CheckIfClosedThrowDisposed(); + + if (!canWrite) + { + throw new NotSupportedException("Cannot write to this MemoryStream"); + } + + // LAMESPEC: AGAIN! It says to throw this exception if value is + // greater than "the maximum length of the MemoryStream". I haven't + // seen anywhere mention what the maximum length of a MemoryStream is and + // since we're this far this memory stream is expandable. + if (value < 0 || (value + initialIndex) > (long)Int32.MaxValue) + throw new ArgumentOutOfRangeException(); + + int newSize = (int)value + initialIndex; + + if (newSize > length) + Expand(newSize); + else if (newSize < length) // Postpone the call to Array.Clear till expand time + dirty_bytes += length - newSize; + + length = newSize; + if (position > length) + position = length; + } + + public byte[] ToArray() + { + return ToArray(false); + } + + public byte[] ToArray(bool canBeLarger) + { + int l = length - initialIndex; + byte[] outBuffer = null; + + if (l > 0) + { + if (canBeLarger) + outBuffer = BufferPool.Get(l, true); + else + outBuffer = new byte[l]; + } + else + { + outBuffer = BufferPool.NoData; + } + + if (internalBuffer != null) + Buffer.BlockCopy(internalBuffer, initialIndex, outBuffer, 0, l); + return outBuffer; + } + + public BufferSegment ToBufferSegment() + { + int l = length - initialIndex; + byte[] outBuffer = l > 0 ? BufferPool.Get(l, true) : BufferPool.NoData; + + if (internalBuffer != null) + Buffer.BlockCopy(internalBuffer, initialIndex, outBuffer, 0, l); + + return new BufferSegment(outBuffer, 0, l); + } + + public override void Write(byte[] buffer, int offset, int count) + { + CheckIfClosedThrowDisposed(); + + if (!canWrite) + throw new NotSupportedException("Cannot write to this stream."); + + if (buffer == null) + throw new ArgumentNullException("buffer"); + + if (offset < 0 || count < 0) + throw new ArgumentOutOfRangeException(); + + if (buffer.Length - offset < count) + throw new ArgumentException("offset+count", + "The size of the buffer is less than offset + count."); + + // reordered to avoid possible integer overflow + if (position > length - count) + Expand(position + count); + + Buffer.BlockCopy(buffer, offset, internalBuffer, position, count); + position += count; + if (position >= length) + length = position; + } + + public override void WriteByte(byte value) + { + CheckIfClosedThrowDisposed(); + if (!canWrite) + throw new NotSupportedException("Cannot write to this stream."); + + if (position >= length) + { + Expand(position + 1); + length = position + 1; + } + + internalBuffer[position++] = value; + } + + public void WriteTo(Stream stream) + { + CheckIfClosedThrowDisposed(); + + if (stream == null) + throw new ArgumentNullException("stream"); + + stream.Write(internalBuffer, initialIndex, length - initialIndex); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/BufferPoolMemoryStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/BufferPoolMemoryStream.cs.meta new file mode 100644 index 000000000..1cc7e2f61 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/BufferPoolMemoryStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce34f1f3b5c30794b9e26c0922185261 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/BufferSegmentStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/BufferSegmentStream.cs new file mode 100644 index 000000000..e72648874 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/BufferSegmentStream.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP.Extensions +{ + public class BufferSegmentStream : Stream + { + public override bool CanRead { get { return false; } } + + public override bool CanSeek { get { return false; } } + + public override bool CanWrite { get { return false; } } + + public override long Length { get { return this._length; } } + protected long _length; + + public override long Position { get { return 0; } set { } } + + protected List bufferList = new List(); + + private byte[] _tempByteArray = new byte[1]; + + public override int ReadByte() + { + if (Read(this._tempByteArray, 0, 1) == 0) + return -1; + + return this._tempByteArray[0]; + } + + public override int Read(byte[] buffer, int offset, int count) + { + int sumReadCount = 0; + + while (count > 0 && bufferList.Count > 0) + { + BufferSegment buff = this.bufferList[0]; + + int readCount = Math.Min(count, buff.Count); + + Array.Copy(buff.Data, buff.Offset, buffer, offset, readCount); + + sumReadCount += readCount; + offset += readCount; + count -= readCount; + + this.bufferList[0] = buff = buff.Slice(buff.Offset + readCount); + + if (buff.Count == 0) + { + this.bufferList.RemoveAt(0); + BufferPool.Release(buff.Data); + } + } + + this._length -= sumReadCount; + + return sumReadCount; + } + + public override void Write(byte[] buffer, int offset, int count) + { + Write(new BufferSegment(buffer, offset, count)); + } + + public virtual void Write(BufferSegment bufferSegment) + { + this.bufferList.Add(bufferSegment); + this._length += bufferSegment.Count; + } + + public virtual void Reset() + { + for (int i = 0; i < this.bufferList.Count; ++i) + BufferPool.Release(this.bufferList[i]); + this.bufferList.Clear(); + this._length = 0; + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + Reset(); + } + + public override void Flush() { } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotImplementedException(); + } + + public override void SetLength(long value) + { + throw new NotImplementedException(); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/BufferSegmentStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/BufferSegmentStream.cs.meta new file mode 100644 index 000000000..ea22a2181 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/BufferSegmentStream.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 163c4b09e7c509c4aaffd21e9961824c +timeCreated: 1574255448 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/CircularBuffer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/CircularBuffer.cs new file mode 100644 index 000000000..1b2912503 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/CircularBuffer.cs @@ -0,0 +1,76 @@ +using System; + +namespace BestHTTP.Extensions +{ + public sealed class CircularBuffer + { + public int Capacity { get; private set; } + public int Count { get; private set; } + public int StartIdx { get { return this.startIdx; } } + public int EndIdx { get { return this.endIdx; } } + + public T this[int idx] + { + get + { + int realIdx = (this.startIdx + idx) % this.Capacity; + + return this.buffer[realIdx]; + } + + set + { + int realIdx = (this.startIdx + idx) % this.Capacity; + + this.buffer[realIdx] = value; + } + } + + private T[] buffer; + private int startIdx; + private int endIdx; + + public CircularBuffer(int capacity) + { + this.Capacity = capacity; + } + + public void Add(T element) + { + if (this.buffer == null) + this.buffer = new T[this.Capacity]; + + this.buffer[this.endIdx] = element; + + this.endIdx = (this.endIdx + 1) % this.Capacity; + if (this.endIdx == this.startIdx) + this.startIdx = (this.startIdx + 1) % this.Capacity; + + this.Count = Math.Min(this.Count + 1, this.Capacity); + } + + public void Clear() + { + this.Count = this.startIdx = this.endIdx = 0; + } + + public override string ToString() + { + var sb = PlatformSupport.Text.StringBuilderPool.Get(2); + sb.Append("["); + + int idx = this.startIdx; + while (idx != this.endIdx) + { + sb.Append(this.buffer[idx].ToString()); + + idx = (idx + 1) % this.Capacity; + if (idx != this.endIdx) + sb.Append("; "); + } + sb.Append("]"); + + return sb.ToString(); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/CircularBuffer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/CircularBuffer.cs.meta new file mode 100644 index 000000000..78d460ce4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/CircularBuffer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: d3e42ed97af74b54fba27235416b1191 +timeCreated: 1508423928 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/Extensions.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/Extensions.cs new file mode 100644 index 000000000..1d2d68b17 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/Extensions.cs @@ -0,0 +1,519 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using BestHTTP.PlatformSupport.Text; + +#if NETFX_CORE + using Windows.Security.Cryptography; + using Windows.Security.Cryptography.Core; + using Windows.Storage.Streams; +#else + using Cryptography = System.Security.Cryptography; + using FileStream = System.IO.FileStream; +#endif + +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP.Extensions +{ + public static class Extensions + { + #region ASCII Encoding (These are required because Windows Phone doesn't supports the Encoding.ASCII class.) + + /// + /// On WP8 platform there are no ASCII encoding. + /// + public static string AsciiToString(this byte[] bytes) + { + StringBuilder sb = StringBuilderPool.Get(bytes.Length); //new StringBuilder(bytes.Length); + foreach (byte b in bytes) + sb.Append(b <= 0x7f ? (char)b : '?'); + return StringBuilderPool.ReleaseAndGrab(sb); + } + + /// + /// On WP8 platform there are no ASCII encoding. + /// + public static BufferSegment GetASCIIBytes(this string str) + { + byte[] result = BufferPool.Get(str.Length, true); + for (int i = 0; i < str.Length; ++i) + { + char ch = str[i]; + result[i] = (byte)((ch < (char)0x80) ? ch : '?'); + } + + return new BufferSegment(result, 0, str.Length); + } + + public static void SendAsASCII(this BinaryWriter stream, string str) + { + for (int i = 0; i < str.Length; ++i) + { + char ch = str[i]; + + stream.Write((byte)((ch < (char)0x80) ? ch : '?')); + } + } + + #endregion + + #region FileSystem WriteLine function support + + public static void WriteLine(this Stream fs) + { + fs.Write(HTTPRequest.EOL, 0, 2); + } + + public static void WriteLine(this Stream fs, string line) + { + var buff = line.GetASCIIBytes(); + fs.Write(buff.Data, buff.Offset, buff.Count); + fs.WriteLine(); + BufferPool.Release(buff); + } + + public static void WriteLine(this Stream fs, string format, params object[] values) + { + var buff = string.Format(format, values).GetASCIIBytes(); + fs.Write(buff.Data, buff.Offset, buff.Count); + fs.WriteLine(); + BufferPool.Release(buff); + } + + #endregion + + #region Other Extensions + + public static BufferSegment AsBuffer(this byte[] bytes) + { + return new BufferSegment(bytes, 0, bytes.Length); + } + + public static BufferSegment AsBuffer(this byte[] bytes, int length) + { + return new BufferSegment(bytes, 0, length); + } + + public static BufferSegment AsBuffer(this byte[] bytes, int offset, int length) + { + return new BufferSegment(bytes, offset, length); + } + + public static string GetRequestPathAndQueryURL(this Uri uri) + { + string requestPathAndQuery = uri.GetComponents(UriComponents.PathAndQuery, UriFormat.UriEscaped); + + // http://forum.unity3d.com/threads/best-http-released.200006/page-26#post-2723250 + if (string.IsNullOrEmpty(requestPathAndQuery)) + requestPathAndQuery = "/"; + + return requestPathAndQuery; + } + + public static string[] FindOption(this string str, string option) + { + //s-maxage=2678400, must-revalidate, max-age=0 + string[] options = str.ToLower().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + option = option.ToLower(); + + for (int i = 0; i < options.Length; ++i) + if (options[i].Contains(option)) + return options[i].Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries); + + return null; + } + + public static string[] FindOption(this string[] options, string option) + { + for (int i = 0; i < options.Length; ++i) + if (options[i].Contains(option)) + return options[i].Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries); + + return null; + } + + public static void WriteArray(this Stream stream, byte[] array) + { + stream.Write(array, 0, array.Length); + } + + public static void WriteBufferSegment(this Stream stream, BufferSegment buffer) + { + stream.Write(buffer.Data, buffer.Offset, buffer.Count); + } + + /// + /// Returns true if the Uri's host is a valid IPv4 or IPv6 address. + /// + public static bool IsHostIsAnIPAddress(this Uri uri) + { + if (uri == null) + return false; + + return IsIpV4AddressValid(uri.Host) || IsIpV6AddressValid(uri.Host); + } + + // Original idea from: https://www.code4copy.com/csharp/c-validate-ip-address-string/ + // Working regex: https://www.regular-expressions.info/ip.html + private static readonly System.Text.RegularExpressions.Regex validIpV4AddressRegex = new System.Text.RegularExpressions.Regex("\\b(?:\\d{1,3}\\.){3}\\d{1,3}\\b", System.Text.RegularExpressions.RegexOptions.IgnoreCase); + + /// + /// Validates an IPv4 address. + /// + public static bool IsIpV4AddressValid(string address) + { + if (!string.IsNullOrEmpty(address)) + return validIpV4AddressRegex.IsMatch(address.Trim()); + + return false; + } + + /// + /// Validates an IPv6 address. + /// + public static bool IsIpV6AddressValid(string address) + { +#if !NETFX_CORE + if (!string.IsNullOrEmpty(address)) + { + System.Net.IPAddress ip; + if (System.Net.IPAddress.TryParse(address, out ip)) + return ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6; + } +#endif + return false; + } + + #endregion + + #region String Conversions + + public static int ToInt32(this string str, int defaultValue = default(int)) + { + if (str == null) + return defaultValue; + + try + { + return int.Parse(str); + } + catch + { + return defaultValue; + } + } + + public static long ToInt64(this string str, long defaultValue = default(long)) + { + if (str == null) + return defaultValue; + + try + { + return long.Parse(str); + } + catch + { + return defaultValue; + } + } + + public static DateTime ToDateTime(this string str, DateTime defaultValue = default(DateTime)) + { + if (str == null) + return defaultValue; + + try + { + DateTime.TryParse(str, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out defaultValue); + return defaultValue.ToUniversalTime(); + } + catch + { + return defaultValue; + } + } + + public static string ToStrOrEmpty(this string str) + { + if (str == null) + return String.Empty; + + return str; + } + + public static string ToStr(this string str, string defaultVale) + { + if (str == null) + return defaultVale; + + return str; + } + + public static string ToBinaryStr(this byte value) + { + return Convert.ToString(value, 2).PadLeft(8, '0'); + } + + #endregion + + #region MD5 Hashing + + public static string CalculateMD5Hash(this string input) + { + var asciiBuff = input.GetASCIIBytes(); + var hash = asciiBuff.CalculateMD5Hash(); + BufferPool.Release(asciiBuff); + return hash; + } + + public static string CalculateMD5Hash(this BufferSegment input) + { +#if NETFX_CORE + var alg = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Md5); + //IBuffer buff = CryptographicBuffer.CreateFromByteArray(input); + IBuffer buff = System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions.AsBuffer(input.Data, input.Offset, input.Count); + var hashed = alg.HashData(buff); + var res = CryptographicBuffer.EncodeToHexString(hashed); + return res; +#else + using (var md5 = Cryptography.MD5.Create()) { + var hash = md5.ComputeHash(input.Data, input.Offset, input.Count); + var sb = StringBuilderPool.Get(hash.Length); //new StringBuilder(hash.Length); + for (int i = 0; i < hash.Length; ++i) + sb.Append(hash[i].ToString("x2")); + BufferPool.Release(hash); + return StringBuilderPool.ReleaseAndGrab(sb); + } +#endif + } + + #endregion + + #region Efficient String Parsing Helpers + + internal static string Read(this string str, ref int pos, char block, bool needResult = true) + { + return str.Read(ref pos, (ch) => ch != block, needResult); + } + + internal static string Read(this string str, ref int pos, Func block, bool needResult = true) + { + if (pos >= str.Length) + return string.Empty; + + str.SkipWhiteSpace(ref pos); + + int startPos = pos; + + while (pos < str.Length && block(str[pos])) + pos++; + + string result = needResult ? str.Substring(startPos, pos - startPos) : null; + + // set position to the next char + pos++; + + return result; + } + + internal static string ReadPossibleQuotedText(this string str, ref int pos) + { + string result = string.Empty; + if (str == null) + return result; + + // It's a quoted text? + if (str[pos] == '\"') + { + // Skip the starting quote + str.Read(ref pos, '\"', false); + + // Read the text until the ending quote + result = str.Read(ref pos, '\"'); + + // Next option + str.Read(ref pos, (ch) => ch != ',' && ch != ';', false); + } + else + // It's not a quoted text, so we will read until the next option + result = str.Read(ref pos, (ch) => ch != ',' && ch != ';'); + + return result; + } + + internal static void SkipWhiteSpace(this string str, ref int pos) + { + if (pos >= str.Length) + return; + + while (pos < str.Length && char.IsWhiteSpace(str[pos])) + pos++; + } + + internal static string TrimAndLower(this string str) + { + if (str == null) + return null; + + char[] buffer = new char[str.Length]; + int length = 0; + + for (int i = 0; i < str.Length; ++i) + { + char ch = str[i]; + if (!char.IsWhiteSpace(ch) && !char.IsControl(ch)) + buffer[length++] = char.ToLowerInvariant(ch); + } + + return new string(buffer, 0, length); + } + + internal static char? Peek(this string str, int pos) + { + if (pos < 0 || pos >= str.Length) + return null; + + return str[pos]; + } + + #endregion + + #region Specialized String Parsers + + //public, max-age=2592000 + internal static List ParseOptionalHeader(this string str) + { + List result = new List(); + + if (str == null) + return result; + + int idx = 0; + + // process the rest of the text + while (idx < str.Length) + { + // Read key + string key = str.Read(ref idx, (ch) => ch != '=' && ch != ',').TrimAndLower(); + HeaderValue qp = new HeaderValue(key); + + if (str[idx - 1] == '=') + qp.Value = str.ReadPossibleQuotedText(ref idx); + + result.Add(qp); + } + + return result; + } + + //deflate, gzip, x-gzip, identity, *;q=0 + internal static List ParseQualityParams(this string str) + { + List result = new List(); + + if (str == null) + return result; + + int idx = 0; + while (idx < str.Length) + { + string key = str.Read(ref idx, (ch) => ch != ',' && ch != ';').TrimAndLower(); + + HeaderValue qp = new HeaderValue(key); + + if (str[idx - 1] == ';') + { + str.Read(ref idx, '=', false); + qp.Value = str.Read(ref idx, ','); + } + + result.Add(qp); + } + + return result; + } + + #endregion + + #region Buffer Filling + + /// + /// Will fill the entire buffer from the stream. Will throw an exception when the underlying stream is closed. + /// + public static void ReadBuffer(this Stream stream, byte[] buffer) + { + int count = 0; + + do + { + int read = stream.Read(buffer, count, buffer.Length - count); + + if (read <= 0) + throw ExceptionHelper.ServerClosedTCPStream(); + + count += read; + } while (count < buffer.Length); + } + + public static void ReadBuffer(this Stream stream, byte[] buffer, int length) + { + int count = 0; + + do + { + int read = stream.Read(buffer, count, length - count); + + if (read <= 0) + throw ExceptionHelper.ServerClosedTCPStream(); + + count += read; + } while (count < length); + } + + #endregion + + #region BufferPoolMemoryStream + + public static void WriteString(this BufferPoolMemoryStream ms, string str) + { + var byteCount = Encoding.UTF8.GetByteCount(str); + byte[] buffer = BufferPool.Get(byteCount, true); + Encoding.UTF8.GetBytes(str, 0, str.Length, buffer, 0); + ms.Write(buffer, 0, byteCount); + BufferPool.Release(buffer); + } + + public static void WriteLine(this BufferPoolMemoryStream ms) + { + ms.Write(HTTPRequest.EOL, 0, HTTPRequest.EOL.Length); + } + + public static void WriteLine(this BufferPoolMemoryStream ms, string str) + { + ms.WriteString(str); + ms.Write(HTTPRequest.EOL, 0, HTTPRequest.EOL.Length); + } + + #endregion + +#if NET_STANDARD_2_0 || NETFX_CORE || NET_4_6 + public static void Clear(this System.Collections.Concurrent.ConcurrentQueue queue) + { + T result; + while (queue.TryDequeue(out result)) + ; + } +#endif + } + + public static class ExceptionHelper + { + public static Exception ServerClosedTCPStream() + { + return new Exception("TCP Stream closed unexpectedly by the remote server"); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/Extensions.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/Extensions.cs.meta new file mode 100644 index 000000000..d37e2a4c0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/Extensions.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3ed17defed57cb64697daf74b5bb5873 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/Future.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/Future.cs new file mode 100644 index 000000000..7b7209f21 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/Future.cs @@ -0,0 +1,409 @@ +// Based on https://github.com/nickgravelyn/UnityToolbag/blob/master/Future/Future.cs +/* + * The MIT License (MIT) + +Copyright (c) 2017, Nick Gravelyn + +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. + * */ + +using System; +using System.Collections.Generic; + +namespace BestHTTP.Futures +{ + /// + /// Describes the state of a future. + /// + public enum FutureState + { + /// + /// The future hasn't begun to resolve a value. + /// + Pending, + + /// + /// The future is working on resolving a value. + /// + Processing, + + /// + /// The future has a value ready. + /// + Success, + + /// + /// The future failed to resolve a value. + /// + Error + } + + /// + /// Defines the interface of an object that can be used to track a future value. + /// + /// The type of object being retrieved. + public interface IFuture + { + /// + /// Gets the state of the future. + /// + FutureState state { get; } + + /// + /// Gets the value if the State is Success. + /// + T value { get; } + + /// + /// Gets the failure exception if the State is Error. + /// + Exception error { get; } + + /// + /// Adds a new callback to invoke when an intermediate result is known. + /// + /// The callback to invoke. + /// The future so additional calls can be chained together. + IFuture OnItem(FutureValueCallback callback); + + /// + /// Adds a new callback to invoke if the future value is retrieved successfully. + /// + /// The callback to invoke. + /// The future so additional calls can be chained together. + IFuture OnSuccess(FutureValueCallback callback); + + /// + /// Adds a new callback to invoke if the future has an error. + /// + /// The callback to invoke. + /// The future so additional calls can be chained together. + IFuture OnError(FutureErrorCallback callback); + + /// + /// Adds a new callback to invoke if the future value is retrieved successfully or has an error. + /// + /// The callback to invoke. + /// The future so additional calls can be chained together. + IFuture OnComplete(FutureCallback callback); + } + + /// + /// Defines the signature for callbacks used by the future. + /// + /// The future. + public delegate void FutureCallback(IFuture future); + + public delegate void FutureValueCallback(T value); + public delegate void FutureErrorCallback(Exception error); + + /// + /// An implementation of that can be used internally by methods that return futures. + /// + /// + /// Methods should always return the interface when calling code requests a future. + /// This class is intended to be constructed internally in the method to provide a simple implementation of + /// the interface. By returning the interface instead of the class it ensures the implementation can change + /// later on if requirements change, without affecting the calling code. + /// + /// The type of object being retrieved. + public class Future : IFuture + { + private volatile FutureState _state; + private T _value; + private Exception _error; + private Func _processFunc; + + private readonly List> _itemCallbacks = new List>(); + private readonly List> _successCallbacks = new List>(); + private readonly List _errorCallbacks = new List(); + private readonly List> _complationCallbacks = new List>(); + + /// + /// Gets the state of the future. + /// + public FutureState state { get { return _state; } } + + /// + /// Gets the value if the State is Success. + /// + public T value + { + get + { + if (_state != FutureState.Success && _state != FutureState.Processing) + { + throw new InvalidOperationException("value is not available unless state is Success or Processing."); + } + + return _value; + } + } + + /// + /// Gets the failure exception if the State is Error. + /// + public Exception error + { + get + { + if (_state != FutureState.Error) + { + throw new InvalidOperationException("error is not available unless state is Error."); + } + + return _error; + } + } + + /// + /// Initializes a new instance of the class. + /// + public Future() + { + _state = FutureState.Pending; + } + + public IFuture OnItem(FutureValueCallback callback) + { + if (_state < FutureState.Success && !_itemCallbacks.Contains(callback)) + _itemCallbacks.Add(callback); + + return this; + } + + /// + /// Adds a new callback to invoke if the future value is retrieved successfully. + /// + /// The callback to invoke. + /// The future so additional calls can be chained together. + public IFuture OnSuccess(FutureValueCallback callback) + { + if (_state == FutureState.Success) + { + callback(this.value); + } + else if (_state != FutureState.Error && !_successCallbacks.Contains(callback)) + { + _successCallbacks.Add(callback); + } + + return this; + } + + /// + /// Adds a new callback to invoke if the future has an error. + /// + /// The callback to invoke. + /// The future so additional calls can be chained together. + public IFuture OnError(FutureErrorCallback callback) + { + if (_state == FutureState.Error) + { + callback(this.error); + } + else if (_state != FutureState.Success && !_errorCallbacks.Contains(callback)) + { + _errorCallbacks.Add(callback); + } + + return this; + } + + /// + /// Adds a new callback to invoke if the future value is retrieved successfully or has an error. + /// + /// The callback to invoke. + /// The future so additional calls can be chained together. + public IFuture OnComplete(FutureCallback callback) + { + if (_state == FutureState.Success || _state == FutureState.Error) + { + callback(this); + } + else + { + if (!_complationCallbacks.Contains(callback)) + _complationCallbacks.Add(callback); + } + + return this; + } + +#pragma warning disable 1998 + + /// + /// Begins running a given function on a background thread to resolve the future's value, as long + /// as it is still in the Pending state. + /// + /// The function that will retrieve the desired value. + public IFuture Process(Func func) + { + if (_state != FutureState.Pending) + { + throw new InvalidOperationException("Cannot process a future that isn't in the Pending state."); + } + + BeginProcess(); + _processFunc = func; + +#if NETFX_CORE +#pragma warning disable 4014 + Windows.System.Threading.ThreadPool.RunAsync(ThreadFunc); +#pragma warning restore 4014 +#else + System.Threading.ThreadPool.QueueUserWorkItem(ThreadFunc); +#endif + + return this; + } + + private +#if NETFX_CORE + async +#endif + void ThreadFunc(object param) + { + try + { + // Directly call the Impl version to avoid the state validation of the public method + AssignImpl(_processFunc()); + } + catch (Exception e) + { + // Directly call the Impl version to avoid the state validation of the public method + FailImpl(e); + } + finally + { + _processFunc = null; + } + } + +#pragma warning restore 1998 + + /// + /// Allows manually assigning a value to a future, as long as it is still in the pending state. + /// + /// + /// There are times where you may not need to do background processing for a value. For example, + /// you may have a cache of values and can just hand one out. In those cases you still want to + /// return a future for the method signature, but can just call this method to fill in the future. + /// + /// The value to assign the future. + public void Assign(T value) + { + if (_state != FutureState.Pending && _state != FutureState.Processing) + { + throw new InvalidOperationException("Cannot assign a value to a future that isn't in the Pending or Processing state."); + } + + AssignImpl(value); + } + + public void BeginProcess(T initialItem = default(T)) + { + _state = FutureState.Processing; + _value = initialItem; + } + + public void AssignItem(T value) + { + _value = value; + _error = null; + + foreach (var callback in _itemCallbacks) + callback(this.value); + } + + public void Finish() + { + _state = FutureState.Success; + + FlushSuccessCallbacks(); + } + + /// + /// Allows manually failing a future, as long as it is still in the pending state. + /// + /// + /// As with the Assign method, there are times where you may know a future value is a failure without + /// doing any background work. In those cases you can simply fail the future manually and return it. + /// + /// The exception to use to fail the future. + public void Fail(Exception error) + { + if (_state != FutureState.Pending && _state != FutureState.Processing) + { + throw new InvalidOperationException("Cannot fail future that isn't in the Pending or Processing state."); + } + + FailImpl(error); + } + + private void AssignImpl(T value) + { + _value = value; + _error = null; + _state = FutureState.Success; + + FlushSuccessCallbacks(); + } + + private void FailImpl(Exception error) + { + _value = default(T); + _error = error; + _state = FutureState.Error; + + FlushErrorCallbacks(); + } + + private void FlushSuccessCallbacks() + { + foreach (var callback in _successCallbacks) + callback(this.value); + + FlushComplationCallbacks(); + } + + private void FlushErrorCallbacks() + { + foreach (var callback in _errorCallbacks) + callback(this.error); + + FlushComplationCallbacks(); + } + + private void FlushComplationCallbacks() + { + foreach (var callback in _complationCallbacks) + callback(this); + ClearCallbacks(); + } + + private void ClearCallbacks() + { + _itemCallbacks.Clear(); + _successCallbacks.Clear(); + _errorCallbacks.Clear(); + _complationCallbacks.Clear(); + } + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/Future.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/Future.cs.meta new file mode 100644 index 000000000..d9ecc4634 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/Future.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a9009e6f5e86bd5459d443846e42be9e +timeCreated: 1515175777 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HTTPRequestAsyncExtensions.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HTTPRequestAsyncExtensions.cs new file mode 100644 index 000000000..1b0dd3849 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HTTPRequestAsyncExtensions.cs @@ -0,0 +1,267 @@ +#if CSHARP_7_OR_LATER +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using BestHTTP.Logger; +using UnityEngine; + +namespace BestHTTP +{ + public sealed class AsyncHTTPException : Exception + { + /// + /// Status code of the server's response. + /// + public int StatusCode; + + /// + /// Content sent by the server. + /// + public string Content; + + public AsyncHTTPException(string message) + : base(message) + { + } + + public AsyncHTTPException(string message, Exception innerException) + : base(message, innerException) + { + } + + public AsyncHTTPException(int statusCode, string message, string content) + :base(message) + { + this.StatusCode = statusCode; + this.Content = content; + } + + public override string ToString() + { + return string.Format("StatusCode: {0}, Message: {1}, Content: {2}, StackTrace: {3}", this.StatusCode, this.Message, this.Content, this.StackTrace); + } + } + + public static class HTTPRequestAsyncExtensions + { + public static Task GetHTTPResponseAsync(this HTTPRequest request, CancellationToken token = default) + { + return CreateTask(request, token, (req, resp, tcs) => + { + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + tcs.TrySetResult(resp); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + VerboseLogging(request, "Request Finished with Error! " + (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception")); + + tcs.TrySetException(CreateException("No Exception", null, req.Exception)); + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + VerboseLogging(request, "Request Aborted!"); + + tcs.TrySetCanceled(); + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + VerboseLogging(request, "Connection Timed Out!"); + + tcs.TrySetException(CreateException("Connection Timed Out!")); + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + VerboseLogging(request, "Processing the request Timed Out!"); + + tcs.TrySetException(CreateException("Processing the request Timed Out!")); + break; + } + }); + } + + public static Task GetAsStringAsync(this HTTPRequest request, CancellationToken token = default) + { + return CreateTask(request, token, (req, resp, tcs) => + { + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + if (resp.IsSuccess) + tcs.TrySetResult(resp.DataAsText); + else + tcs.TrySetException(CreateException("Request finished Successfully, but the server sent an error.", resp)); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + VerboseLogging(request, "Request Finished with Error! " + (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception")); + + tcs.TrySetException(CreateException("No Exception", null, req.Exception)); + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + VerboseLogging(request, "Request Aborted!"); + + tcs.TrySetCanceled(); + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + VerboseLogging(request, "Connection Timed Out!"); + + tcs.TrySetException(CreateException("Connection Timed Out!")); + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + VerboseLogging(request, "Processing the request Timed Out!"); + + tcs.TrySetException(CreateException("Processing the request Timed Out!")); + break; + } + }); + } + + public static Task GetAsTexture2DAsync(this HTTPRequest request, CancellationToken token = default) + { + return CreateTask(request, token, (req, resp, tcs) => + { + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + if (resp.IsSuccess) + tcs.TrySetResult(resp.DataAsTexture2D); + else + tcs.TrySetException(CreateException("Request finished Successfully, but the server sent an error.", resp)); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + VerboseLogging(request, "Request Finished with Error! " + (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception")); + + tcs.TrySetException(CreateException("No Exception", null, req.Exception)); + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + VerboseLogging(request, "Request Aborted!"); + + tcs.TrySetCanceled(); + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + VerboseLogging(request, "Connection Timed Out!"); + + tcs.TrySetException(CreateException("Connection Timed Out!")); + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + VerboseLogging(request, "Processing the request Timed Out!"); + + tcs.TrySetException(CreateException("Processing the request Timed Out!")); + break; + } + }); + } + + public static Task GetRawDataAsync(this HTTPRequest request, CancellationToken token = default) + { + return CreateTask(request, token, (req, resp, tcs) => + { + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + if (resp.IsSuccess) + tcs.TrySetResult(resp.Data); + else + tcs.TrySetException(CreateException("Request finished Successfully, but the server sent an error.", resp)); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + VerboseLogging(request, "Request Finished with Error! " + (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception")); + + tcs.TrySetException(CreateException("No Exception", null, req.Exception)); + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + VerboseLogging(request, "Request Aborted!"); + + tcs.TrySetCanceled(); + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + VerboseLogging(request, "Connection Timed Out!"); + + tcs.TrySetException(CreateException("Connection Timed Out!")); + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + VerboseLogging(request, "Processing the request Timed Out!"); + + tcs.TrySetException(CreateException("Processing the request Timed Out!")); + break; + } + }); + } + + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public static Task CreateTask(HTTPRequest request, CancellationToken token, Action> callback) + { + HTTPManager.Setup(); + + var tcs = new TaskCompletionSource(); + + request.Callback = (req, resp) => + { + if (token.IsCancellationRequested) + tcs.SetCanceled(); + else + callback(req, resp, tcs); + }; + + if (token.CanBeCanceled) + token.Register((state) => (state as HTTPRequest)?.Abort(), request); + + if (request.State == HTTPRequestStates.Initial) + request.Send(); + + return tcs.Task; + } + + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public static void VerboseLogging(HTTPRequest request, string str) + { + HTTPManager.Logger.Verbose("HTTPRequestAsyncExtensions", str, request.Context); + } + + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public static Exception CreateException(string errorMessage, HTTPResponse resp = null, Exception ex = null) + { + if (resp != null) + return new AsyncHTTPException(resp.StatusCode, resp.Message, resp.DataAsText); + else if (ex != null) + return new AsyncHTTPException(ex.Message, ex); + else + return new AsyncHTTPException(errorMessage); + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HTTPRequestAsyncExtensions.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HTTPRequestAsyncExtensions.cs.meta new file mode 100644 index 000000000..2f02d6ba5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HTTPRequestAsyncExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 875eda53b9b14784484c59463d205081 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HeaderParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HeaderParser.cs new file mode 100644 index 000000000..a2a63ad9a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HeaderParser.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; + +namespace BestHTTP.Extensions +{ + /// + /// Will parse a comma-separeted header value + /// + public sealed class HeaderParser : KeyValuePairList + { + public HeaderParser(string headerStr) + { + base.Values = Parse(headerStr); + } + + private List Parse(string headerStr) + { + List result = new List(); + + int pos = 0; + + try + { + while (pos < headerStr.Length) + { + HeaderValue current = new HeaderValue(); + + current.Parse(headerStr, ref pos); + + result.Add(current); + } + } + catch(System.Exception ex) + { + HTTPManager.Logger.Exception("HeaderParser - Parse", headerStr, ex); + } + + return result; + } + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HeaderParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HeaderParser.cs.meta new file mode 100644 index 000000000..3fffbecad --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HeaderParser.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 40ea771765c2ae549abc4c264e500b76 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HeaderValue.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HeaderValue.cs new file mode 100644 index 000000000..51ff90b86 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HeaderValue.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using BestHTTP.PlatformSupport.Text; + +namespace BestHTTP.Extensions +{ + /// + /// Used in string parsers. Its Value is optional. + /// + public sealed class HeaderValue + { + #region Public Properties + + public string Key { get; set; } + public string Value { get; set; } + public List Options { get; set; } + + public bool HasValue { get { return !string.IsNullOrEmpty(this.Value); } } + + #endregion + + #region Constructors + + public HeaderValue() + { } + + public HeaderValue(string key) + { + this.Key = key; + } + + #endregion + + #region Public Helper Functions + + public void Parse(string headerStr, ref int pos) + { + ParseImplementation(headerStr, ref pos, true); + } + + public bool TryGetOption(string key, out HeaderValue option) + { + option = null; + + if (Options == null || Options.Count == 0) + return false; + + for (int i = 0; i < Options.Count; ++i) + if (String.Equals(Options[i].Key, key, StringComparison.OrdinalIgnoreCase)) + { + option = Options[i]; + return true; + } + + return false; + } + + #endregion + + #region Private Helper Functions + + private void ParseImplementation(string headerStr, ref int pos, bool isOptionIsAnOption) + { + // According to https://tools.ietf.org/html/rfc7234#section-5.2.1.1 + // Max-Age has a form "max-age=5", but some (imgur.com specifically) sends it as "max-age:5" + string key = headerStr.Read(ref pos, (ch) => ch != ';' && ch != '=' && ch != ':' && ch != ',', true); + this.Key = key; + + char? skippedChar = headerStr.Peek(pos - 1); + bool isValue = skippedChar == '=' || skippedChar == ':'; + bool isOption = isOptionIsAnOption && skippedChar == ';'; + + while ((skippedChar != null && isValue || isOption) && pos < headerStr.Length) + { + + if (isValue) + { + string value = headerStr.ReadPossibleQuotedText(ref pos); + this.Value = value; + } + else if (isOption) + { + HeaderValue option = new HeaderValue(); + option.ParseImplementation(headerStr, ref pos, false); + + if (this.Options == null) + this.Options = new List(); + + this.Options.Add(option); + } + + if (!isOptionIsAnOption) + return; + + skippedChar = headerStr.Peek(pos - 1); + isValue = skippedChar == '='; + isOption = isOptionIsAnOption && skippedChar == ';'; + } + } + + #endregion + + #region Overrides + + public override string ToString() + { + if (this.Options != null && this.Options.Count > 0) + { + StringBuilder sb = StringBuilderPool.Get(4); //new StringBuilder(4); + sb.Append(Key); + sb.Append("="); + sb.Append(Value); + + foreach(var option in Options) + { + sb.Append(";"); + sb.Append(option.ToString()); + } + + return StringBuilderPool.ReleaseAndGrab(sb); + } + else if (!string.IsNullOrEmpty(Value)) + return Key + '=' + Value; + else + return Key; + } + + #endregion + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HeaderValue.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HeaderValue.cs.meta new file mode 100644 index 000000000..b2c250c0a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HeaderValue.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1465d4183951bf64dad0047b7c6e7243 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HeartbeatManager.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HeartbeatManager.cs new file mode 100644 index 000000000..3446d1b6e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HeartbeatManager.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; + +namespace BestHTTP.Extensions +{ + public interface IHeartbeat + { + void OnHeartbeatUpdate(TimeSpan dif); + } + + /// + /// A manager class that can handle subscribing and unsubscribeing in the same update. + /// + public sealed class HeartbeatManager + { + private ReaderWriterLockSlim rwLock = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion); + + private List Heartbeats = new List(); + private IHeartbeat[] UpdateArray; + private DateTime LastUpdate = DateTime.MinValue; + + public void Subscribe(IHeartbeat heartbeat) + { + rwLock.EnterWriteLock(); + try + { + if (!Heartbeats.Contains(heartbeat)) + Heartbeats.Add(heartbeat); + } + finally + { + rwLock.ExitWriteLock(); + } + } + + public void Unsubscribe(IHeartbeat heartbeat) + { + rwLock.EnterWriteLock(); + try + { + Heartbeats.Remove(heartbeat); + } + finally + { + rwLock.ExitWriteLock(); + } + } + + public void Update() + { + if (LastUpdate == DateTime.MinValue) + LastUpdate = DateTime.UtcNow; + else + { + TimeSpan dif = DateTime.UtcNow - LastUpdate; + LastUpdate = DateTime.UtcNow; + + int count = 0; + + rwLock.EnterReadLock(); + try + { + if (UpdateArray == null || UpdateArray.Length < Heartbeats.Count) + Array.Resize(ref UpdateArray, Heartbeats.Count); + + Heartbeats.CopyTo(0, UpdateArray, 0, Heartbeats.Count); + + count = Heartbeats.Count; + } + finally + { + rwLock.ExitReadLock(); + } + + for (int i = 0; i < count; ++i) + { + try + { + UpdateArray[i].OnHeartbeatUpdate(dif); + } + catch + { } + } + } + } + + public void Clear() + { + rwLock.EnterWriteLock(); + try + { + Heartbeats.Clear(); + } + finally + { + rwLock.ExitWriteLock(); + } + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HeartbeatManager.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HeartbeatManager.cs.meta new file mode 100644 index 000000000..c9d056e73 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/HeartbeatManager.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6c610eeb580ec8e4c90789edb631cc76 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/KeyValuePairList.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/KeyValuePairList.cs new file mode 100644 index 000000000..c18c18b0d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/KeyValuePairList.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BestHTTP.Extensions +{ + /// + /// Base class for specialized parsers + /// + public class KeyValuePairList + { + public List Values { get; protected set; } + + public bool TryGet(string valueKeyName, out HeaderValue @param) + { + @param = null; + for (int i = 0; i < Values.Count; ++i) + if (string.CompareOrdinal(Values[i].Key, valueKeyName) == 0) + { + @param = Values[i]; + return true; + } + return false; + } + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/KeyValuePairList.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/KeyValuePairList.cs.meta new file mode 100644 index 000000000..5c6d9fc3f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/KeyValuePairList.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 834cc34ef3418894589ef2e8389ff8c0 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/PeekableIncomingSegmentStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/PeekableIncomingSegmentStream.cs new file mode 100644 index 000000000..d9576c3c9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/PeekableIncomingSegmentStream.cs @@ -0,0 +1,32 @@ +namespace BestHTTP.Extensions +{ + public sealed class PeekableIncomingSegmentStream : BufferSegmentStream + { + private int peek_listIdx; + private int peek_pos; + + public void BeginPeek() + { + peek_listIdx = 0; + peek_pos = base.bufferList.Count > 0 ? base.bufferList[0].Offset : 0; + } + + public int PeekByte() + { + if (base.bufferList.Count == 0) + return -1; + + var segment = base.bufferList[this.peek_listIdx]; + if (peek_pos >= segment.Offset + segment.Count) + { + if (base.bufferList.Count <= this.peek_listIdx + 1) + return -1; + + segment = base.bufferList[++this.peek_listIdx]; + this.peek_pos = segment.Offset; + } + + return segment.Data[this.peek_pos++]; + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/PeekableIncomingSegmentStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/PeekableIncomingSegmentStream.cs.meta new file mode 100644 index 000000000..828d1fbdd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/PeekableIncomingSegmentStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e917d28b8c5afd64fa0373d88a939bfe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/ReadOnlyBufferedStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/ReadOnlyBufferedStream.cs new file mode 100644 index 000000000..c6e83d2c1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/ReadOnlyBufferedStream.cs @@ -0,0 +1,144 @@ +using BestHTTP.PlatformSupport.Memory; +using System; +using System.IO; + +namespace BestHTTP.Extensions +{ + public sealed class ReadOnlyBufferedStream : Stream + { + Stream stream; + public const int READBUFFER = 8192; + byte[] buf; + int available = 0; + int pos = 0; + + public ReadOnlyBufferedStream(Stream nstream) + :this(nstream, READBUFFER) + { + } + + public ReadOnlyBufferedStream(Stream nstream, int bufferSize) + { + stream = nstream; + buf = BufferPool.Get(bufferSize, true); + } + + public override int Read(byte[] buffer, int offset, int size) + { + if (available > 0) + { + // copy & return + int copyCount = Math.Min(available, size); + Array.Copy(buf, pos, buffer, offset, copyCount); + pos += copyCount; + available -= copyCount; + return copyCount; + } + else + { + if (size >= buf.Length) + { + // read directly to buffer + return stream.Read(buffer, offset, size); + } + else + { + // read to buf and copy + pos = 0; + available = stream.Read(buf, 0, buf.Length); + + if (available > 0) + return Read(buffer, offset, size); + else + return 0; + } + } + } + + public override int ReadByte() + { + if (available > 0) + { + available -= 1; + pos += 1; + return buf[pos - 1]; + } + else + { + try + { + available = stream.Read(buf, 0, buf.Length); + pos = 0; + } + catch + { + return -1; + } + if (available < 1) + { + return -1; + } + else + { + available -= 1; + pos += 1; + return buf[pos - 1]; + } + } + } + + protected override void Dispose(bool disposing) + { + if (disposing && buf != null) + BufferPool.Release(buf); + + buf = null; + } + + public override bool CanRead + { + get { return true; } + } + + public override bool CanSeek + { + get { throw new NotImplementedException(); } + } + + public override bool CanWrite + { + get { throw new NotImplementedException(); } + } + + public override long Length + { + get { throw new NotImplementedException(); } + } + + public override long Position + { + get { throw new NotImplementedException(); } + set { throw new NotImplementedException(); } + } + + public override void Flush() + { + throw new NotImplementedException(); + } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotImplementedException(); + } + + public override void SetLength(long value) + { + throw new NotImplementedException(); + } + + public override void Write(byte[] buffer, int offset, int count) + { + throw new NotImplementedException(); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/ReadOnlyBufferedStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/ReadOnlyBufferedStream.cs.meta new file mode 100644 index 000000000..1749a3f6e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/ReadOnlyBufferedStream.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e6b9a4ff6813b4f4b9f2ffa453c3fccc +timeCreated: 1543513046 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/StreamList.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/StreamList.cs new file mode 100644 index 000000000..8d027daed --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/StreamList.cs @@ -0,0 +1,152 @@ +using BestHTTP.PlatformSupport.Memory; +using System; + +namespace BestHTTP.Extensions +{ + /// + /// Wrapper of multiple streams. Writes and reads are both supported. Read goes trough all the streams. + /// + public sealed class StreamList : System.IO.Stream + { + private System.IO.Stream[] Streams; + private int CurrentIdx; + + public StreamList(params System.IO.Stream[] streams) + { + this.Streams = streams; + this.CurrentIdx = 0; + } + + public override bool CanRead + { + get + { + if (CurrentIdx >= Streams.Length) + return false; + return Streams[CurrentIdx].CanRead; + } + } + + public override bool CanSeek { get { return false; } } + + public override bool CanWrite + { + get + { + if (CurrentIdx >= Streams.Length) + return false; + return Streams[CurrentIdx].CanWrite; + } + } + + public override void Flush() + { + if (CurrentIdx >= Streams.Length) + return; + + // We have to call the flush to all previous streams, as we may advanced the CurrentIdx + for (int i = 0; i <= CurrentIdx; ++i) + Streams[i].Flush(); + } + + public override long Length + { + get + { + if (CurrentIdx >= Streams.Length) + return 0; + + long length = 0; + for (int i = 0; i < Streams.Length; ++i) + length += Streams[i].Length; + + return length; + } + } + + public override int Read(byte[] buffer, int offset, int count) + { + if (CurrentIdx >= Streams.Length) + return -1; + + int readCount = Streams[CurrentIdx].Read(buffer, offset, count); + + while (readCount < count && ++CurrentIdx < Streams.Length) + { + // Dispose previous stream + try + { + Streams[CurrentIdx - 1].Dispose(); + Streams[CurrentIdx - 1] = null; + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("StreamList", "Dispose", ex); + } + + readCount += Streams[CurrentIdx].Read(buffer, offset + readCount, count - readCount); + } + + return readCount; + } + + public override void Write(byte[] buffer, int offset, int count) + { + if (CurrentIdx >= Streams.Length) + return; + + Streams[CurrentIdx].Write(buffer, offset, count); + } + + public void Write(string str) + { + var buffer = str.GetASCIIBytes(); + this.Write(buffer.Data, buffer.Offset, buffer.Count); + BufferPool.Release(buffer); + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + for (int i = 0; i < Streams.Length; ++i) + if (Streams[i] != null) + { + try + { + Streams[i].Dispose(); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("StreamList", "Dispose", ex); + } + } + } + } + + public override long Position + { + get + { + throw new NotImplementedException("Position get"); + } + set + { + throw new NotImplementedException("Position set"); + } + } + + public override long Seek(long offset, System.IO.SeekOrigin origin) + { + if (CurrentIdx >= Streams.Length) + return 0; + + return Streams[CurrentIdx].Seek(offset, origin); + } + + public override void SetLength(long value) + { + throw new NotImplementedException("SetLength"); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/StreamList.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/StreamList.cs.meta new file mode 100644 index 000000000..fb371b7de --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/StreamList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d9a35feccd354604bb0037b7e66a3e22 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/Timer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/Timer.cs new file mode 100644 index 000000000..f625c163f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/Timer.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; + +namespace BestHTTP.Extensions +{ + public +#if CSHARP_7_OR_LATER + readonly +#endif + struct TimerData + { + public readonly DateTime Created; + public readonly TimeSpan Interval; + public readonly object Context; + + public readonly Func OnTimer; + + public bool IsOnTime(DateTime now) + { + return now >= this.Created + this.Interval; + } + + public TimerData(TimeSpan interval, object context, Func onTimer) + { + this.Created = DateTime.Now; + this.Interval = interval; + this.Context = context; + this.OnTimer = onTimer; + } + + /// + /// Create a new TimerData but the Created field will be set to the current time. + /// + public TimerData CreateNew() + { + return new TimerData(this.Interval, this.Context, this.OnTimer); + } + + public override string ToString() + { + return string.Format("[TimerData Created: {0}, Interval: {1}, IsOnTime: {2}]", this.Created.ToString(System.Globalization.CultureInfo.InvariantCulture), this.Interval, this.IsOnTime(DateTime.Now)); + } + } + + public static class Timer + { + private static List Timers = new List(); + + public static void Add(TimerData timer) + { + Timers.Add(timer); + } + + internal static void Process() + { + if (Timers.Count == 0) + return; + + DateTime now = DateTime.Now; + + for (int i = 0; i < Timers.Count; ++i) + { + TimerData timer = Timers[i]; + + if (timer.IsOnTime(now)) + { + bool repeat = timer.OnTimer(now, timer.Context); + + if (repeat) + Timers[i] = timer.CreateNew(); + else + Timers.RemoveAt(i--); + } + } + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/Timer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/Timer.cs.meta new file mode 100644 index 000000000..7534a5f59 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/Timer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6b79070540cbf6f42b89c74c2fb978f5 +timeCreated: 1571210041 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/WWWAuthenticateHeaderParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/WWWAuthenticateHeaderParser.cs new file mode 100644 index 000000000..3af73ee79 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/WWWAuthenticateHeaderParser.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BestHTTP.Extensions +{ + /// + /// Used for parsing WWW-Authenticate headers: + /// Digest realm="my realm", nonce="4664b327a2963503ba58bbe13ad672c0", qop=auth, opaque="f7e38bdc1c66fce214f9019ffe43117c" + /// + public sealed class WWWAuthenticateHeaderParser : KeyValuePairList + { + public WWWAuthenticateHeaderParser(string headerValue) + { + Values = ParseQuotedHeader(headerValue); + } + + private List ParseQuotedHeader(string str) + { + List result = new List(); + + if (str != null) + { + + int idx = 0; + + // Read Type (Basic|Digest) + string type = str.Read(ref idx, (ch) => !char.IsWhiteSpace(ch) && !char.IsControl(ch)).TrimAndLower(); + result.Add(new HeaderValue(type)); + + // process the rest of the text + while (idx < str.Length) + { + // Read key + string key = str.Read(ref idx, '=').TrimAndLower(); + HeaderValue qp = new HeaderValue(key); + + // Skip any white space + str.SkipWhiteSpace(ref idx); + + qp.Value = str.ReadPossibleQuotedText(ref idx); + + result.Add(qp); + } + } + return result; + } + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/WWWAuthenticateHeaderParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/WWWAuthenticateHeaderParser.cs.meta new file mode 100644 index 000000000..d26dda632 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/WWWAuthenticateHeaderParser.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4cba91161fe643c419eedafefdf1f959 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/WriteOnlyBufferedStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/WriteOnlyBufferedStream.cs new file mode 100644 index 000000000..a6db7a229 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/WriteOnlyBufferedStream.cs @@ -0,0 +1,82 @@ +using BestHTTP.PlatformSupport.Memory; +using System; +using System.IO; + +namespace BestHTTP.Extensions +{ + /// + /// A custom buffer stream implementation that will not close the underlying stream. + /// + public sealed class WriteOnlyBufferedStream : Stream + { + public override bool CanRead { get { return false; } } + public override bool CanSeek { get { return false; } } + public override bool CanWrite { get { return true; } } + public override long Length { get { return this.buffer.Length; } } + + public override long Position { get { return this._position; } set { throw new NotImplementedException("Position set"); } } + private int _position; + + private byte[] buffer; + private Stream stream; + + public WriteOnlyBufferedStream(Stream stream, int bufferSize) + { + this.stream = stream; + + this.buffer = BufferPool.Get(bufferSize, true); + this._position = 0; + } + + public override void Flush() + { + if (this._position > 0) + { + this.stream.Write(this.buffer, 0, this._position); + this.stream.Flush(); + + //if (HTTPManager.Logger.Level == Logger.Loglevels.All) + // HTTPManager.Logger.Information("WriteOnlyBufferedStream", string.Format("Flushed {0:N0} bytes", this._position)); + + this._position = 0; + } + } + + public override void Write(byte[] bufferFrom, int offset, int count) + { + while (count > 0) + { + int writeCount = Math.Min(count, this.buffer.Length - this._position); + Array.Copy(bufferFrom, offset, this.buffer, this._position, writeCount); + + this._position += writeCount; + offset += writeCount; + count -= writeCount; + + if (this._position == this.buffer.Length) + this.Flush(); + } + } + + public override int Read(byte[] buffer, int offset, int count) + { + return 0; + } + + public override long Seek(long offset, SeekOrigin origin) + { + return 0; + } + + public override void SetLength(long value) { } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (disposing && this.buffer != null) + BufferPool.Release(this.buffer); + this.buffer = null; + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/WriteOnlyBufferedStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/WriteOnlyBufferedStream.cs.meta new file mode 100644 index 000000000..1c4cc6ea8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Extensions/WriteOnlyBufferedStream.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2df120a767773ee478acf872b86ae326 +timeCreated: 1530027551 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Forms.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms.meta new file mode 100644 index 000000000..dbba7c22d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 867abf3a1ab01c84681b6c85becf6b6d +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/HTTPFieldData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/HTTPFieldData.cs new file mode 100644 index 000000000..5ff5e7959 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/HTTPFieldData.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BestHTTP.Forms +{ + /// + /// This class represents a HTTP Form's field. + /// + public class HTTPFieldData + { + /// + /// The form's field. + /// + public string Name { get; set; } + + /// + /// Filename of the field. Optional. + /// + public string FileName { get; set; } + + /// + /// Mime-type of the field. Optional + /// + public string MimeType { get; set; } + + /// + /// Encoding of the data. Optional + /// + public Encoding Encoding { get; set; } + + /// + /// The field's textual data. + /// + public string Text { get; set; } + + /// + /// The field's binary data. + /// + public byte[] Binary { get; set; } + + /// + /// Will return with the binary data, or if it's not present the textual data will be decoded to binary. + /// + public byte[] Payload + { + get + { + if (Binary != null) + return Binary; + + if (Encoding == null) + Encoding = Encoding.UTF8; + + return Binary = Encoding.GetBytes(Text); + } + } + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/HTTPFieldData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/HTTPFieldData.cs.meta new file mode 100644 index 000000000..27f683ca8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/HTTPFieldData.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bdf9d0d59653fa8418a86f22360ff91e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/HTTPFormBase.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/HTTPFormBase.cs new file mode 100644 index 000000000..949dfd744 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/HTTPFormBase.cs @@ -0,0 +1,141 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BestHTTP.Forms +{ + /// + /// Base class of a concrete implementation. Don't use it to create a form, use instead one of the already wrote implementation(HTTPMultiPartForm, HTTPUrlEncodedForm), or create a new one by inheriting from this base class. + /// + public class HTTPFormBase + { + const int LongLength = 256; + + #region Properties + + /// + /// A list that holds the form's fields. + /// + public List Fields { get; set; } + + /// + /// Returns true if the Fields has no element. + /// + public bool IsEmpty { get { return Fields == null || Fields.Count == 0; } } + + /// + /// True if new fields has been added to our list. + /// + public bool IsChanged { get; protected set; } + + /// + /// True if there are at least one form-field with binary data. + /// + public bool HasBinary { get; protected set; } + + /// + /// True if there are at least one form-field with a long textual data. + /// + public bool HasLongValue { get; protected set; } + + #endregion + + #region Field Management + + public void AddBinaryData(string fieldName, byte[] content) + { + AddBinaryData(fieldName, content, null, null); + } + + public void AddBinaryData(string fieldName, byte[] content, string fileName) + { + AddBinaryData(fieldName, content, fileName, null); + } + + public void AddBinaryData(string fieldName, byte[] content, string fileName, string mimeType) + { + if (Fields == null) + Fields = new List(); + + HTTPFieldData field = new HTTPFieldData(); + field.Name = fieldName; + + if (fileName == null) + field.FileName = fieldName + ".dat"; + else + field.FileName = fileName; + + if (mimeType == null) + field.MimeType = "application/octet-stream"; + else + field.MimeType = mimeType; + + field.Binary = content; + + Fields.Add(field); + + HasBinary = IsChanged = true; + } + + public void AddField(string fieldName, string value) + { + AddField(fieldName, value, System.Text.Encoding.UTF8); + } + + public void AddField(string fieldName, string value, System.Text.Encoding e) + { + if (Fields == null) + Fields = new List(); + + HTTPFieldData field = new HTTPFieldData(); + field.Name = fieldName; + field.FileName = null; + if (e != null) + field.MimeType = "text/plain; charset=" + e.WebName; + field.Text = value; + field.Encoding = e; + + Fields.Add(field); + + IsChanged = true; + + HasLongValue |= value.Length > LongLength; + } + + #endregion + + #region Virtual Functions + + /// + /// It should 'clone' all the data from the given HTTPFormBase object. + /// Called after the form-implementation created. + /// + public virtual void CopyFrom(HTTPFormBase fields) + { + this.Fields = new List(fields.Fields); + this.IsChanged = true; + + this.HasBinary = fields.HasBinary; + this.HasLongValue = fields.HasLongValue; + } + + /// + /// Prepares the request to sending a form. It should set only the headers. + /// + public virtual void PrepareRequest(HTTPRequest request) + { + throw new NotImplementedException(); + } + + /// + /// Prepares and returns with the form's raw data. + /// + public virtual byte[] GetData() + { + throw new NotImplementedException(); + } + + #endregion + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/HTTPFormBase.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/HTTPFormBase.cs.meta new file mode 100644 index 000000000..88b2c9a40 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/HTTPFormBase.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7d275ec92441f18449bffc98e08d44e8 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/HTTPFormUsage.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/HTTPFormUsage.cs new file mode 100644 index 000000000..f4f65f698 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/HTTPFormUsage.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BestHTTP.Forms +{ + public enum HTTPFormUsage + { + /// + /// The plugin will try to choose the best form sending method. + /// + Automatic, + + /// + /// The plugin will use the Url-Encoded form sending. + /// + UrlEncoded, + + /// + /// The plugin will use the Multipart form sending. + /// + Multipart + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/HTTPFormUsage.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/HTTPFormUsage.cs.meta new file mode 100644 index 000000000..f23208ab5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/HTTPFormUsage.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fc8643409dcf53d4db0bf0f654ad8500 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/Implementations.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/Implementations.meta new file mode 100644 index 000000000..f74232590 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/Implementations.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: acc326f47252d77498d6489dce7ff997 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/Implementations/HTTPMultiPartForm.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/Implementations/HTTPMultiPartForm.cs new file mode 100644 index 000000000..bc8071c5f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/Implementations/HTTPMultiPartForm.cs @@ -0,0 +1,78 @@ +using BestHTTP.Extensions; + +namespace BestHTTP.Forms +{ + /// + /// A HTTP Form implementation to send textual and binary values. + /// + public sealed class HTTPMultiPartForm : HTTPFormBase + { + #region Private Fields + + /// + /// A random boundary generated in the constructor. + /// + private string Boundary; + + /// + /// + /// + private byte[] CachedData; + + #endregion + + public HTTPMultiPartForm() + { + this.Boundary = "BestHTTP_HTTPMultiPartForm_" + this.GetHashCode().ToString("X"); + } + + #region IHTTPForm Implementation + + public override void PrepareRequest(HTTPRequest request) + { + // Set up Content-Type header for the request + request.SetHeader("Content-Type", "multipart/form-data; boundary=" + Boundary); + } + + public override byte[] GetData() + { + if (CachedData != null) + return CachedData; + + using (var ms = new BufferPoolMemoryStream()) + { + for (int i = 0; i < Fields.Count; ++i) + { + HTTPFieldData field = Fields[i]; + + // Set the boundary + ms.WriteLine("--" + Boundary); + + // Set up Content-Disposition header to our form with the name + ms.WriteLine("Content-Disposition: form-data; name=\"" + field.Name + "\"" + (!string.IsNullOrEmpty(field.FileName) ? "; filename=\"" + field.FileName + "\"" : string.Empty)); + + // Set up Content-Type head for the form. + if (!string.IsNullOrEmpty(field.MimeType)) + ms.WriteLine("Content-Type: " + field.MimeType); + + ms.WriteLine(); + + // Write the actual data to the MemoryStream + ms.Write(field.Payload, 0, field.Payload.Length); + + ms.Write(HTTPRequest.EOL, 0, HTTPRequest.EOL.Length); + } + + // Write out the trailing boundary + ms.WriteLine("--" + Boundary + "--"); + + IsChanged = false; + + // Set the RawData of our request + return CachedData = ms.ToArray(); + } + } + + #endregion + }; +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/Implementations/HTTPMultiPartForm.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/Implementations/HTTPMultiPartForm.cs.meta new file mode 100644 index 000000000..d223b1ffc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/Implementations/HTTPMultiPartForm.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5f9390c7b6f72b845805363b01dfbba9 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/Implementations/HTTPUrlEncodedForm.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/Implementations/HTTPUrlEncodedForm.cs new file mode 100644 index 000000000..123ef3aea --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/Implementations/HTTPUrlEncodedForm.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using BestHTTP.PlatformSupport.Text; + +namespace BestHTTP.Forms +{ + /// + /// A HTTP Form implementation to send textual values. + /// + public sealed class HTTPUrlEncodedForm : HTTPFormBase + { + private const int EscapeTreshold = 256; + + private byte[] CachedData; + + public override void PrepareRequest(HTTPRequest request) + { + request.SetHeader("Content-Type", "application/x-www-form-urlencoded"); + } + + public override byte[] GetData() + { + if (CachedData != null && !IsChanged) + return CachedData; + + StringBuilder sb = PlatformSupport.Text.StringBuilderPool.Get(Fields.Count * 4); + + // Create a "field1=value1&field2=value2" formatted string + for (int i = 0; i < Fields.Count; ++i) + { + var field = Fields[i]; + + if (i > 0) + sb.Append("&"); + + sb.Append(EscapeString(field.Name)); + sb.Append("="); + + if (!string.IsNullOrEmpty(field.Text) || field.Binary == null) + sb.Append(EscapeString(field.Text)); + else + // If forced to this form type with binary data, we will create a base64 encoded string from it. + sb.Append(Convert.ToBase64String(field.Binary, 0, field.Binary.Length)); + } + + IsChanged = false; + return CachedData = Encoding.UTF8.GetBytes(PlatformSupport.Text.StringBuilderPool.ReleaseAndGrab(sb)); + } + + public static string EscapeString(string originalString) + { + if (originalString.Length < EscapeTreshold) + return Uri.EscapeDataString(originalString); + else + { + int loops = originalString.Length / EscapeTreshold; + StringBuilder sb = StringBuilderPool.Get(loops); //new StringBuilder(loops); + + for (int i = 0; i <= loops; i++) + sb.Append(i < loops ? + Uri.EscapeDataString(originalString.Substring(EscapeTreshold * i, EscapeTreshold)) : + Uri.EscapeDataString(originalString.Substring(EscapeTreshold * i))); + return StringBuilderPool.ReleaseAndGrab(sb); + } + } + + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/Implementations/HTTPUrlEncodedForm.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/Implementations/HTTPUrlEncodedForm.cs.meta new file mode 100644 index 000000000..74123e87e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Forms/Implementations/HTTPUrlEncodedForm.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 023a00e6d3a980b4babe8c70a7d00088 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPManager.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPManager.cs new file mode 100644 index 000000000..0f2b79800 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPManager.cs @@ -0,0 +1,490 @@ +using System; +using System.Collections.Generic; + +#if !BESTHTTP_DISABLE_CACHING +using BestHTTP.Caching; +#endif + +using BestHTTP.Core; +using BestHTTP.Extensions; +using BestHTTP.Logger; +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.PlatformSupport.Text; +using Unity.Profiling; + +#if !BESTHTTP_DISABLE_COOKIES +using BestHTTP.Cookies; +#endif + +using BestHTTP.Connections; + +namespace BestHTTP +{ + public enum ShutdownTypes + { + Running, + Gentle, + Immediate + } + +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + public delegate Connections.TLS.AbstractTls13Client TlsClientFactoryDelegate(HTTPRequest request, List protocols); +#endif + + public delegate System.Security.Cryptography.X509Certificates.X509Certificate ClientCertificateSelector(HTTPRequest request, string targetHost, System.Security.Cryptography.X509Certificates.X509CertificateCollection localCertificates, System.Security.Cryptography.X509Certificates.X509Certificate remoteCertificate, string[] acceptableIssuers); + + /// + /// + /// + [BestHTTP.PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstructionAttribute] + public static partial class HTTPManager + { + // Static constructor. Setup default values + static HTTPManager() + { + MaxConnectionPerServer = 6; + KeepAliveDefaultValue = true; + MaxPathLength = 255; + MaxConnectionIdleTime = TimeSpan.FromSeconds(20); + +#if !BESTHTTP_DISABLE_COOKIES +#if UNITY_WEBGL && !UNITY_EDITOR + // Under webgl when IsCookiesEnabled is true, it will set the withCredentials flag for the XmlHTTPRequest + // and that's different from the default behavior. + // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials + IsCookiesEnabled = false; +#else + IsCookiesEnabled = true; +#endif +#endif + + CookieJarSize = 10 * 1024 * 1024; + EnablePrivateBrowsing = false; + ConnectTimeout = TimeSpan.FromSeconds(20); + RequestTimeout = TimeSpan.FromSeconds(60); + + // Set the default logger mechanism + logger = new BestHTTP.Logger.ThreadedLogger(); + +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + UseAlternateSSLDefaultValue = true; +#endif + +#if NETFX_CORE + IOService = new PlatformSupport.FileSystem.NETFXCOREIOService(); +#else + IOService = new PlatformSupport.FileSystem.DefaultIOService(); +#endif + +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + ProxyDetector = new Proxies.Autodetect.ProxyDetector(); +#endif + } + +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_ALTERNATE_SSL && !BESTHTTP_DISABLE_HTTP2 + /// + /// HTTP/2 settings + /// + public static Connections.HTTP2.HTTP2PluginSettings HTTP2Settings = new Connections.HTTP2.HTTP2PluginSettings(); +#endif + +#region Global Options + + /// + /// The maximum active TCP connections that the client will maintain to a server. Default value is 6. Minimum value is 1. + /// + public static byte MaxConnectionPerServer + { + get{ return maxConnectionPerServer; } + set + { + if (value <= 0) + throw new ArgumentOutOfRangeException("MaxConnectionPerServer must be greater than 0!"); + + bool isGrowing = value > maxConnectionPerServer; + maxConnectionPerServer = value; + + // If the allowed connections per server is growing, go through all hosts and try to send out queueud requests. + if (isGrowing) + HostManager.TryToSendQueuedRequests(); + } + } + private static byte maxConnectionPerServer; + + /// + /// Default value of a HTTP request's IsKeepAlive value. Default value is true. If you make rare request to the server it should be changed to false. + /// + public static bool KeepAliveDefaultValue { get; set; } + +#if !BESTHTTP_DISABLE_CACHING + /// + /// Set to true, if caching is prohibited. + /// + public static bool IsCachingDisabled { get; set; } +#endif + + /// + /// How many time must be passed to destroy that connection after a connection finished its last request. Its default value is 20 seconds. + /// + public static TimeSpan MaxConnectionIdleTime { get; set; } + +#if !BESTHTTP_DISABLE_COOKIES + /// + /// Set to false to disable all Cookie. It's default value is true. + /// + public static bool IsCookiesEnabled { get; set; } +#endif + + /// + /// Size of the Cookie Jar in bytes. It's default value is 10485760 (10 MB). + /// + public static uint CookieJarSize { get; set; } + + /// + /// If this property is set to true, then new cookies treated as session cookies and these cookies are not saved to disk. Its default value is false; + /// + public static bool EnablePrivateBrowsing { get; set; } + + /// + /// Global, default value of the HTTPRequest's ConnectTimeout property. If set to TimeSpan.Zero or lower, no connect timeout logic is executed. Default value is 20 seconds. + /// + public static TimeSpan ConnectTimeout { get; set; } + + /// + /// Global, default value of the HTTPRequest's Timeout property. Default value is 60 seconds. + /// + public static TimeSpan RequestTimeout { get; set; } + + /// + /// By default the plugin will save all cache and cookie data under the path returned by Application.persistentDataPath. + /// You can assign a function to this delegate to return a custom root path to define a new path. + /// This delegate will be called on a non Unity thread! + /// + public static System.Func RootCacheFolderProvider { get; set; } + +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + + public static Proxies.Autodetect.ProxyDetector ProxyDetector { + get => _proxyDetector; + set { + _proxyDetector?.Detach(); + _proxyDetector = value; + } + } + private static Proxies.Autodetect.ProxyDetector _proxyDetector; + + /// + /// The global, default proxy for all HTTPRequests. The HTTPRequest's Proxy still can be changed per-request. Default value is null. + /// + public static Proxy Proxy { get; set; } +#endif + + /// + /// Heartbeat manager to use less threads in the plugin. The heartbeat updates are called from the OnUpdate function. + /// + public static HeartbeatManager Heartbeats + { + get + { + if (heartbeats == null) + heartbeats = new HeartbeatManager(); + return heartbeats; + } + } + private static HeartbeatManager heartbeats; + + /// + /// A basic BestHTTP.Logger.ILogger implementation to be able to log intelligently additional informations about the plugin's internal mechanism. + /// + public static BestHTTP.Logger.ILogger Logger + { + get + { + // Make sure that it has a valid logger instance. + if (logger == null) + { + logger = new ThreadedLogger(); + logger.Level = Loglevels.None; + } + + return logger; + } + + set { logger = value; } + } + private static BestHTTP.Logger.ILogger logger; + +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + + public static TlsClientFactoryDelegate TlsClientFactory; + + public static Connections.TLS.AbstractTls13Client DefaultTlsClientFactory(HTTPRequest request, List protocols) + { + // http://tools.ietf.org/html/rfc3546#section-3.1 + // -It is RECOMMENDED that clients include an extension of type "server_name" in the client hello whenever they locate a server by a supported name type. + // -Literal IPv4 and IPv6 addresses are not permitted in "HostName". + + // User-defined list has a higher priority + List hostNames = null; + + // If there's no user defined one and the host isn't an IP address, add the default one + if (!request.CurrentUri.IsHostIsAnIPAddress()) + { + hostNames = new List(1); + hostNames.Add(new SecureProtocol.Org.BouncyCastle.Tls.ServerName(0, System.Text.Encoding.UTF8.GetBytes(request.CurrentUri.Host))); + } + + return new Connections.TLS.DefaultTls13Client(request, hostNames, protocols); + } + + /// + /// The default value for the HTTPRequest's UseAlternateSSL property. + /// + public static bool UseAlternateSSLDefaultValue { get; set; } +#endif + +#if !NETFX_CORE + public static Func DefaultCertificationValidator; + public static ClientCertificateSelector ClientCertificationProvider; +#endif + + /// + /// TCP Client's send buffer size. + /// + public static int? SendBufferSize; + + /// + /// TCP Client's receive buffer size. + /// + public static int? ReceiveBufferSize; + + /// + /// An IIOService implementation to handle filesystem operations. + /// + public static PlatformSupport.FileSystem.IIOService IOService; + + /// + /// On most systems the maximum length of a path is around 255 character. If a cache entity's path is longer than this value it doesn't get cached. There no platform independent API to query the exact value on the current system, but it's + /// exposed here and can be overridden. It's default value is 255. + /// + internal static int MaxPathLength { get; set; } + + /// + /// User-agent string that will be sent with each requests. + /// + public static string UserAgent = "BestHTTP/2 v2.8.3"; + + /// + /// It's true if the application is quitting and the plugin is shutting down itself. + /// + public static bool IsQuitting { get { return _isQuitting; } private set { _isQuitting = value; } } + private static volatile bool _isQuitting; +#endregion + +#region Manager variables + + private static bool IsSetupCalled; + +#endregion + +#region Public Interface + + public static void Setup() + { + if (IsSetupCalled) + return; + IsSetupCalled = true; + IsQuitting = false; + + HTTPManager.Logger.Information("HTTPManager", "Setup called! UserAgent: " + UserAgent); + + HTTPUpdateDelegator.CheckInstance(); + +#if !BESTHTTP_DISABLE_CACHING + HTTPCacheService.CheckSetup(); +#endif + +#if !BESTHTTP_DISABLE_COOKIES + Cookies.CookieJar.SetupFolder(); + Cookies.CookieJar.Load(); +#endif + + HostManager.Load(); + } + + public static HTTPRequest SendRequest(string url, OnRequestFinishedDelegate callback) + { + return SendRequest(new HTTPRequest(new Uri(url), HTTPMethods.Get, callback)); + } + + public static HTTPRequest SendRequest(string url, HTTPMethods methodType, OnRequestFinishedDelegate callback) + { + return SendRequest(new HTTPRequest(new Uri(url), methodType, callback)); + } + + public static HTTPRequest SendRequest(string url, HTTPMethods methodType, bool isKeepAlive, OnRequestFinishedDelegate callback) + { + return SendRequest(new HTTPRequest(new Uri(url), methodType, isKeepAlive, callback)); + } + + public static HTTPRequest SendRequest(string url, HTTPMethods methodType, bool isKeepAlive, bool disableCache, OnRequestFinishedDelegate callback) + { + return SendRequest(new HTTPRequest(new Uri(url), methodType, isKeepAlive, disableCache, callback)); + } + + public static HTTPRequest SendRequest(HTTPRequest request) + { + if (!IsSetupCalled) + Setup(); + + if (request.IsCancellationRequested || IsQuitting) + return request; + +#if !BESTHTTP_DISABLE_CACHING + // If possible load the full response from cache. + if (Caching.HTTPCacheService.IsCachedEntityExpiresInTheFuture(request)) + { + DateTime started = DateTime.Now; + PlatformSupport.Threading.ThreadedRunner.RunShortLiving((req) => + { + if (Connections.ConnectionHelper.TryLoadAllFromCache("HTTPManager", req, req.Context)) + { + req.Timing.Add("Full Cache Load", DateTime.Now - started); + req.State = HTTPRequestStates.Finished; + } + else + { + // If for some reason it couldn't load we place back the request to the queue. + + request.State = HTTPRequestStates.Queued; + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(request, RequestEvents.Resend)); + } + }, request); + } + else +#endif + { + request.State = HTTPRequestStates.Queued; + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(request, RequestEvents.Resend)); + } + + return request; + } + +#endregion + +#region Internal Helper Functions + + /// + /// Will return where the various caches should be saved. + /// + public static string GetRootCacheFolder() + { + try + { + if (RootCacheFolderProvider != null) + return RootCacheFolderProvider(); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("HTTPManager", "GetRootCacheFolder", ex); + } + +#if NETFX_CORE + return Windows.Storage.ApplicationData.Current.LocalFolder.Path; +#else + return UnityEngine.Application.persistentDataPath; +#endif + } + +#if UNITY_EDITOR +#if UNITY_2019_3_OR_NEWER + [UnityEngine.RuntimeInitializeOnLoadMethod(UnityEngine.RuntimeInitializeLoadType.SubsystemRegistration)] +#endif + public static void ResetSetup() + { + IsSetupCalled = false; + BufferedReadNetworkStream.ResetNetworkStats(); + HTTPManager.Logger.Information("HTTPManager", "Reset called!"); + } +#endif + +#endregion + +#region MonoBehaviour Events (Called from HTTPUpdateDelegator) + + /// + /// Update function that should be called regularly from a Unity event(Update, LateUpdate). Callbacks are dispatched from this function. + /// + public static void OnUpdate() + { + using (var _ = new ProfilerMarker(nameof(RequestEventHelper)).Auto()) + RequestEventHelper.ProcessQueue(); + + using (var _ = new ProfilerMarker(nameof(ConnectionEventHelper)).Auto()) + ConnectionEventHelper.ProcessQueue(); + + using (var _ = new ProfilerMarker(nameof(ProtocolEventHelper)).Auto()) + ProtocolEventHelper.ProcessQueue(); + + using (var _ = new ProfilerMarker(nameof(PluginEventHelper)).Auto()) + PluginEventHelper.ProcessQueue(); + + using (var _ = new ProfilerMarker(nameof(Timer)).Auto()) + BestHTTP.Extensions.Timer.Process(); + + if (heartbeats != null) + { + using (var _ = new ProfilerMarker(nameof(HeartbeatManager)).Auto()) + heartbeats.Update(); + } + + using (var _ = new ProfilerMarker(nameof(BufferPool)).Auto()) + BufferPool.Maintain(); + + using (var _ = new ProfilerMarker(nameof(StringBuilderPool)).Auto()) + StringBuilderPool.Maintain(); + } + + public static void OnQuit() + { + HTTPManager.Logger.Information("HTTPManager", "OnQuit called!"); + + IsQuitting = true; + + AbortAll(); + +#if !BESTHTTP_DISABLE_CACHING + HTTPCacheService.SaveLibrary(); +#endif + +#if !BESTHTTP_DISABLE_COOKIES + CookieJar.Persist(); +#endif + + OnUpdate(); + + HostManager.Clear(); + + Heartbeats.Clear(); + } + + public static void AbortAll() + { + HTTPManager.Logger.Information("HTTPManager", "AbortAll called!"); + + // This is an immediate shutdown request! + + RequestEventHelper.Clear(); + ConnectionEventHelper.Clear(); + PluginEventHelper.Clear(); + ProtocolEventHelper.Clear(); + + HostManager.Shutdown(); + + ProtocolEventHelper.CancelActiveProtocols(); + } + +#endregion + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPManager.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPManager.cs.meta new file mode 100644 index 000000000..22e9749d2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPManager.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 8598bf6546f50e64197d043a215a5897 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPMethods.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPMethods.cs new file mode 100644 index 000000000..11f80e37e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPMethods.cs @@ -0,0 +1,87 @@ +namespace BestHTTP +{ + /// + /// Some supported methods described in the rfc: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9 + /// + public enum HTTPMethods : byte + { + /// + /// The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI. + /// If the Request-URI refers to a data-producing process, it is the produced data which shall be returned as the + /// entity in the response and not the source text of the process, unless that text happens to be the output of the process. + /// + Get, + + /// + /// The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. + /// The metainformation contained in the HTTP headers in response to a HEAD request SHOULD be identical to the information sent in response to a GET request. + /// This method can be used for obtaining metainformation about the entity implied by the request without transferring the entity-body itself. + /// This method is often used for testing hypertext links for validity, accessibility, and recent modification. + /// + Head, + + /// + /// The POST method is used to request that the origin server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line. + /// POST is designed to allow a uniform method to cover the following functions: + /// + /// Annotation of existing resources; + /// Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles; + /// Providing a block of data, such as the result of submitting a form, to a data-handling process; + /// Extending a database through an append operation. + /// + /// The actual function performed by the POST method is determined by the server and is usually dependent on the Request-URI. + /// The posted entity is subordinate to that URI in the same way that a file is subordinate to a directory containing it, + /// a news article is subordinate to a newsgroup to which it is posted, or a record is subordinate to a database. + /// The action performed by the POST method might not result in a resource that can be identified by a URI. In this case, + /// either 200 (OK) or 204 (No Content) is the appropriate response status, depending on whether or not the response includes an entity that describes the result. + /// + Post, + + /// + /// The PUT method requests that the enclosed entity be stored under the supplied Request-URI. + /// If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a modified version of the one residing on the origin server. + /// If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new resource by the requesting user agent, + /// the origin server can create the resource with that URI. If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response. + /// If an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to indicate successful completion of the request. + /// If the resource could not be created or modified with the Request-URI, an appropriate error response SHOULD be given that reflects the nature of the problem. + /// The recipient of the entity MUST NOT ignore any Content-* (e.g. Content-Range) headers that it does not understand or implement and MUST return a 501 (Not Implemented) response in such cases. + /// + Put, + + /// + /// The DELETE method requests that the origin server delete the resource identified by the Request-URI. This method MAY be overridden by human intervention (or other means) on the origin server. + /// The client cannot be guaranteed that the operation has been carried out, even if the status code returned from the origin server indicates that the action has been completed successfully. + /// However, the server SHOULD NOT indicate success unless, at the time the response is given, it intends to delete the resource or move it to an inaccessible location. + /// A successful response SHOULD be 200 (OK) if the response includes an entity describing the status, 202 (Accepted) if the action has not yet been enacted, or 204 (No Content) + /// if the action has been enacted but the response does not include an entity. + /// + Delete, + + /// + /// http://tools.ietf.org/html/rfc5789 + /// The PATCH method requests that a set of changes described in the request entity be applied to the resource identified by the Request-URI. + /// The set of changes is represented in a format called a "patchdocument" identified by a media type. If the Request-URI does not point to an existing resource, + /// the server MAY create a new resource, depending on the patch document type (whether it can logically modify a null resource) and permissions, etc. + /// + Patch, + + /// + /// The HTTP methods PATCH can be used to update partial resources. For instance, when you only need to update one field of the resource, PUTting a complete resource representation might be cumbersome and utilizes more bandwidth. + /// + /// + Merge, + + Options, + + /// + /// https://tools.ietf.org/html/rfc8441 + /// + Connect, + + /// + /// https://horovits.medium.com/http-s-new-method-for-data-apis-http-query-1ff71e6f73f3 + /// https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/ + /// + Query + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPMethods.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPMethods.cs.meta new file mode 100644 index 000000000..d60a3c2ad --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPMethods.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: faf468f5056a1614da3acf7f571cc6bb +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPRange.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPRange.cs new file mode 100644 index 000000000..4be4ba86b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPRange.cs @@ -0,0 +1,57 @@ +using System; + +namespace BestHTTP +{ + /// + /// + /// + public sealed class HTTPRange + { + /// + /// The first byte's position that the server sent. + /// + public long FirstBytePos { get; private set; } + + /// + /// The last byte's position that the server sent. + /// + public long LastBytePos { get; private set; } + + /// + /// Indicates the total length of the full entity-body on the server, -1 if this length is unknown or difficult to determine. + /// + public long ContentLength { get; private set; } + + /// + /// + /// + public bool IsValid { get; private set; } + + internal HTTPRange() + { + this.ContentLength = -1; + this.IsValid = false; + } + + internal HTTPRange(int contentLength) + { + this.ContentLength = contentLength; + this.IsValid = false; + } + + internal HTTPRange(long firstBytePosition, long lastBytePosition, long contentLength) + { + this.FirstBytePos = firstBytePosition; + this.LastBytePos = lastBytePosition; + this.ContentLength = contentLength; + + // A byte-content-range-spec with a byte-range-resp-spec whose last-byte-pos value is less than its first-byte-pos value, or whose instance-length value is less than or equal to its last-byte-pos value, is invalid. + this.IsValid = this.FirstBytePos <= this.LastBytePos && this.ContentLength > this.LastBytePos; + } + + public override string ToString() + { + return string.Format("{0}-{1}/{2} (valid: {3})", FirstBytePos, LastBytePos, ContentLength, IsValid); + } + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPRange.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPRange.cs.meta new file mode 100644 index 000000000..b9bf1e948 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPRange.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 874904f9618b97045b510c161f498030 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPRequest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPRequest.cs new file mode 100644 index 000000000..6892104ab --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPRequest.cs @@ -0,0 +1,1494 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace BestHTTP +{ + using BestHTTP.Authentication; + using BestHTTP.Extensions; + using BestHTTP.Forms; + +#if !BESTHTTP_DISABLE_COOKIES + using BestHTTP.Cookies; +#endif + + using BestHTTP.Core; + using BestHTTP.PlatformSupport.Memory; + using BestHTTP.Connections; + using BestHTTP.Logger; + using BestHTTP.Timings; + + /// + /// Possible logical states of a HTTTPRequest object. + /// + public enum HTTPRequestStates + { + /// + /// Initial status of a request. No callback will be called with this status. + /// + Initial, + + /// + /// The request queued for processing. + /// + Queued, + + /// + /// Processing of the request started. In this state the client will send the request, and parse the response. No callback will be called with this status. + /// + Processing, + + /// + /// The request finished without problem. Parsing the response done, the result can be used. The user defined callback will be called with a valid response object. The request’s Exception property will be null. + /// + Finished, + + /// + /// The request finished with an unexpected error. The user defined callback will be called with a null response object. The request's Exception property may contain more info about the error, but it can be null. + /// + Error, + + /// + /// The request aborted by the client(HTTPRequest’s Abort() function). The user defined callback will be called with a null response. The request’s Exception property will be null. + /// + Aborted, + + /// + /// Connecting to the server timed out. The user defined callback will be called with a null response. The request’s Exception property will be null. + /// + ConnectionTimedOut, + + /// + /// The request didn't finished in the given time. The user defined callback will be called with a null response. The request’s Exception property will be null. + /// + TimedOut + } + + public delegate void OnRequestFinishedDelegate(HTTPRequest originalRequest, HTTPResponse response); + public delegate void OnProgressDelegate(HTTPRequest originalRequest, long progress, long length); + public delegate bool OnBeforeRedirectionDelegate(HTTPRequest originalRequest, HTTPResponse response, Uri redirectUri); + public delegate void OnHeaderEnumerationDelegate(string header, List values); + public delegate void OnBeforeHeaderSendDelegate(HTTPRequest req); + public delegate void OnHeadersReceivedDelegate(HTTPRequest originalRequest, HTTPResponse response, Dictionary> headers); + + /// + /// Called for every fragment of data downloaded from the server. Its return value indicates whether the plugin free to reuse the dataFragment array. + /// + /// The parent HTTPRequest object + /// The HTTPResponse object. + /// The downloaded data. The byte[] can be larger than the actual payload! Its valid length that can be used is in the dataFragmentLength param. + /// Length of the downloaded data. + public delegate bool OnStreamingDataDelegate(HTTPRequest request, HTTPResponse response, byte[] dataFragment, int dataFragmentLength); + + public sealed class HTTPRequest : IEnumerator, IEnumerator + { + #region Statics + + public static readonly byte[] EOL = { HTTPResponse.CR, HTTPResponse.LF }; + + /// + /// Cached uppercase values to save some cpu cycles and GC alloc per request. + /// + public static readonly string[] MethodNames = { + HTTPMethods.Get.ToString().ToUpper(), + HTTPMethods.Head.ToString().ToUpper(), + HTTPMethods.Post.ToString().ToUpper(), + HTTPMethods.Put.ToString().ToUpper(), + HTTPMethods.Delete.ToString().ToUpper(), + HTTPMethods.Patch.ToString().ToUpper(), + HTTPMethods.Merge.ToString().ToUpper(), + HTTPMethods.Options.ToString().ToUpper(), + HTTPMethods.Connect.ToString().ToUpper(), + HTTPMethods.Query.ToString().ToUpper() + }; + + /// + /// Size of the internal buffer, and upload progress will be fired when this size of data sent to the wire. Its default value is 4 KiB. + /// + public static int UploadChunkSize = 4 * 1024; + + #endregion + + #region Properties + + /// + /// The original request's Uri. + /// + public Uri Uri { get; set; } + + /// + /// The method that how we want to process our request the server. + /// + public HTTPMethods MethodType { get; set; } + + /// + /// The raw data to send in a POST request. If it set all other fields that added to this request will be ignored. + /// + public byte[] RawData { get; set; } + + /// + /// The stream that the plugin will use to get the data to send out the server. When this property is set, no forms or the RawData property will be used + /// + public Stream UploadStream { get; set; } + + /// + /// When set to true(its default value) the plugin will call the UploadStream's Dispose() function when finished uploading the data from it. Default value is true. + /// + public bool DisposeUploadStream { get; set; } + + /// + /// If it's true, the plugin will use the Stream's Length property. Otherwise the plugin will send the data chunked. Default value is true. + /// + public bool UseUploadStreamLength { get; set; } + + /// + /// Called after data sent out to the wire. + /// + public OnProgressDelegate OnUploadProgress; + + /// + /// Indicates that the connection should be open after the response received. If its true, then the internal TCP connections will be reused if it's possible. Default value is true. + /// The default value can be changed in the HTTPManager class. If you make rare request to the server it's should be changed to false. + /// + public bool IsKeepAlive + { + get { return isKeepAlive; } + set + { + if (State == HTTPRequestStates.Processing) + throw new NotSupportedException("Changing the IsKeepAlive property while processing the request is not supported."); + isKeepAlive = value; + } + } + +#if !BESTHTTP_DISABLE_CACHING + /// + /// With this property caching can be enabled/disabled on a per-request basis. + /// + public bool DisableCache + { + get { return disableCache; } + set + { + if (State == HTTPRequestStates.Processing) + throw new NotSupportedException("Changing the DisableCache property while processing the request is not supported."); + disableCache = value; + } + } + + /// + /// It can be used with streaming. When set to true, no OnStreamingData event is called, the streamed content will be saved straight to the cache if all requirements are met(caching is enabled and there's a caching headers). + /// + public bool CacheOnly + { + get { return cacheOnly; } + set + { + if (State == HTTPRequestStates.Processing) + throw new NotSupportedException("Changing the CacheOnly property while processing the request is not supported."); + cacheOnly = value; + } + } +#endif + + /// + /// Maximum size of a data chunk that we want to receive when streaming is set. Its default value is 1 MB. + /// + public int StreamFragmentSize + { + get{ return streamFragmentSize; } + set + { + if (State == HTTPRequestStates.Processing) + throw new NotSupportedException("Changing the StreamFragmentSize property while processing the request is not supported."); + + if (value < 1) + throw new System.ArgumentException("StreamFragmentSize must be at least 1."); + + streamFragmentSize = value; + } + } + + /// + /// When set to true, StreamFragmentSize will be ignored and downloaded chunks will be sent immediately. + /// + public bool StreamChunksImmediately { get; set; } + + /// + /// This property can be used to force the HTTPRequest to use an exact sized read buffer. + /// + public int ReadBufferSizeOverride { get; set; } + + /// + /// Maximum unprocessed fragments allowed to queue up. + /// + public int MaxFragmentQueueLength { get; set; } + + /// + /// The callback function that will be called when a request is fully processed or when any downloaded fragment is available if UseStreaming is true. Can be null for fire-and-forget requests. + /// + public OnRequestFinishedDelegate Callback { get; set; } + + /// + /// When the request is queued for processing. + /// + public DateTime QueuedAt { get; internal set; } + + public bool IsConnectTimedOut { get { return this.QueuedAt != DateTime.MinValue && DateTime.UtcNow - this.QueuedAt > this.ConnectTimeout; } } + + /// + /// When the processing of the request started + /// + public DateTime ProcessingStarted { get; internal set; } + + /// + /// Returns true if the time passed the Timeout setting since processing started. + /// + public bool IsTimedOut + { + get + { + DateTime now = DateTime.UtcNow; + + return (!this.UseStreaming || (this.UseStreaming && this.EnableTimoutForStreaming)) && + ((this.ProcessingStarted != DateTime.MinValue && now - this.ProcessingStarted > this.Timeout) || + this.IsConnectTimedOut); + } + } + + /// + /// Called for every fragment of data downloaded from the server. Return true if dataFrament is processed and the plugin can recycle the byte[]. + /// + public OnStreamingDataDelegate OnStreamingData; + + /// + /// This event is called when the plugin received and parsed all headers. + /// + public OnHeadersReceivedDelegate OnHeadersReceived; + + /// + /// Number of times that the plugin retried the request. + /// + public int Retries { get; internal set; } + + /// + /// Maximum number of tries allowed. To disable it set to 0. Its default value is 1 for GET requests, otherwise 0. + /// + public int MaxRetries { get; set; } + + /// + /// True if Abort() is called on this request. + /// + public bool IsCancellationRequested { get; internal set; } + + /// + /// Called when new data downloaded from the server. + /// The first parameter is the original HTTTPRequest object itself, the second parameter is the downloaded bytes while the third parameter is the content length. + /// There are download modes where we can't figure out the exact length of the final content. In these cases we just guarantee that the third parameter will be at least the size of the second one. + /// + public OnProgressDelegate OnDownloadProgress; + + /// + /// Indicates that the request is redirected. If a request is redirected, the connection that served it will be closed regardless of the value of IsKeepAlive. + /// + public bool IsRedirected { get; internal set; } + + /// + /// The Uri that the request redirected to. + /// + public Uri RedirectUri { get; internal set; } + + /// + /// If redirected it contains the RedirectUri. + /// + public Uri CurrentUri { get { return IsRedirected ? RedirectUri : Uri; } } + + /// + /// The response to the query. + /// If an exception occurred during reading of the response stream or can't connect to the server, this will be null! + /// + public HTTPResponse Response { get; internal set; } + +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + /// + /// Response from the Proxy server. It's null with transparent proxies. + /// + public HTTPResponse ProxyResponse { get; internal set; } +#endif + + /// + /// It there is an exception while processing the request or response the Response property will be null, and the Exception will be stored in this property. + /// + public Exception Exception { get; internal set; } + + /// + /// Any object can be passed with the request with this property. (eq. it can be identified, etc.) + /// + public object Tag { get; set; } + + /// + /// The UserName, Password pair that the plugin will use to authenticate to the remote server. + /// + public Credentials Credentials { get; set; } + +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + /// + /// True, if there is a Proxy object. + /// + public bool HasProxy { get { return Proxy != null && Proxy.UseProxyForAddress(this.CurrentUri); } } + + /// + /// A web proxy's properties where the request must pass through. + /// + public Proxy Proxy { get; set; } +#endif + + /// + /// How many redirection supported for this request. The default is 10. 0 or a negative value means no redirection supported. + /// + public int MaxRedirects { get; set; } + +#if !BESTHTTP_DISABLE_COOKIES + + /// + /// If true cookies will be added to the headers (if any), and parsed from the response. If false, all cookie operations will be ignored. It's default value is HTTPManager's IsCookiesEnabled. + /// + public bool IsCookiesEnabled { get; set; } + + /// + /// Cookies that are added to this list will be sent to the server alongside withe the server sent ones. If cookies are disabled only these cookies will be sent. + /// + public List Cookies + { + get + { + if (customCookies == null) + customCookies = new List(); + return customCookies; + } + set { customCookies = value; } + } + + private List customCookies; +#endif + + /// + /// What form should used. Its default value is Automatic. + /// + public HTTPFormUsage FormUsage { get; set; } + + /// + /// Current state of this request. + /// + public HTTPRequestStates State { + get { return this._state; } + internal set { + lock (this) + { + if (this._state != value) + { + //if (this._state >= HTTPRequestStates.Finished && value >= HTTPRequestStates.Finished) + // return; + + this._state = value; + + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this, this._state)); + } + } + } + } + private volatile HTTPRequestStates _state; + + /// + /// How many times redirected. + /// + public int RedirectCount { get; internal set; } + + /// + /// Maximum time we wait to establish the connection to the target server. If set to TimeSpan.Zero or lower, no connect timeout logic is executed. Default value is 20 seconds. + /// + public TimeSpan ConnectTimeout { get; set; } + + /// + /// Maximum time we want to wait to the request to finish after the connection is established. Default value is 60 seconds. + /// It's disabled for streaming requests! See . + /// + public TimeSpan Timeout { get; set; } + + /// + /// Set to true to enable Timeouts on streaming request. Default value is false. + /// + public bool EnableTimoutForStreaming { get; set; } + + /// + /// Enables safe read method when the response's length of the content is unknown. Its default value is enabled (true). + /// + public bool EnableSafeReadOnUnknownContentLength { get; set; } + + /// + /// It's called before the plugin will do a new request to the new uri. The return value of this function will control the redirection: if it's false the redirection is aborted. + /// This function is called on a thread other than the main Unity thread! + /// + public event OnBeforeRedirectionDelegate OnBeforeRedirection + { + add { onBeforeRedirection += value; } + remove { onBeforeRedirection -= value; } + } + private OnBeforeRedirectionDelegate onBeforeRedirection; + + /// + /// This event will be fired before the plugin will write headers to the wire. New headers can be added in this callback. This event is called on a non-Unity thread! + /// + public event OnBeforeHeaderSendDelegate OnBeforeHeaderSend + { + add { _onBeforeHeaderSend += value; } + remove { _onBeforeHeaderSend -= value; } + } + private OnBeforeHeaderSendDelegate _onBeforeHeaderSend; + + /// + /// Logging context of the request. + /// + public LoggingContext Context { get; private set; } + + /// + /// Timing information. + /// + public TimingCollector Timing { get; private set; } + +#if UNITY_WEBGL + /// + /// Its value will be set to the XmlHTTPRequest's withCredentials field. Its default value is HTTPManager.IsCookiesEnabled's value. + /// + public bool WithCredentials { get; set; } +#endif + +#if !UNITY_WEBGL || UNITY_EDITOR + /// + /// Called when the current protocol is upgraded to an other. (HTTP => WebSocket for example) + /// + internal OnRequestFinishedDelegate OnUpgraded; +#endif + + #region Internal Properties For Progress Report Support + + /// + /// If it's true, the Callback will be called every time if we can send out at least one fragment. + /// + internal bool UseStreaming { get { return this.OnStreamingData != null; } } + + /// + /// Will return the length of the UploadStream, or -1 if it's not supported. + /// + internal long UploadStreamLength + { + get + { + if (UploadStream == null || !UseUploadStreamLength) + return -1; + + try + { + // This may will throw a NotSupportedException + return UploadStream.Length; + } + catch + { + // We will fall back to chunked + return -1; + } + } + } + +#if !UNITY_WEBGL || UNITY_EDITOR + /// + /// This action is called when a user calls the Abort function. Do not use it outside of the plugin! + /// + internal Action OnCancellationRequested; +#endif + + #endregion + + #endregion + + #region Privates + + private bool isKeepAlive; +#if !BESTHTTP_DISABLE_CACHING + private bool disableCache; + private bool cacheOnly; +#endif + private int streamFragmentSize; + + private Dictionary> Headers { get; set; } + + /// + /// We will collect the fields and values to the FieldCollector through the AddField and AddBinaryData functions. + /// + private HTTPFormBase FieldCollector; + + /// + /// When the request about to send the request we will create a specialized form implementation(url-encoded, multipart, or the legacy WWWForm based). + /// And we will use this instance to create the data that we will send to the server. + /// + private HTTPFormBase FormImpl; + + #endregion + + #region Constructors + + #region Default Get Constructors + + public HTTPRequest(Uri uri) + : this(uri, HTTPMethods.Get, HTTPManager.KeepAliveDefaultValue, +#if !BESTHTTP_DISABLE_CACHING + HTTPManager.IsCachingDisabled +#else + true +#endif + , null) + { + } + + public HTTPRequest(Uri uri, OnRequestFinishedDelegate callback) + : this(uri, HTTPMethods.Get, HTTPManager.KeepAliveDefaultValue, +#if !BESTHTTP_DISABLE_CACHING + HTTPManager.IsCachingDisabled +#else + true +#endif + , callback) + { + } + + public HTTPRequest(Uri uri, bool isKeepAlive, OnRequestFinishedDelegate callback) + : this(uri, HTTPMethods.Get, isKeepAlive, +#if !BESTHTTP_DISABLE_CACHING + HTTPManager.IsCachingDisabled +#else + true +#endif + + , callback) + { + } + public HTTPRequest(Uri uri, bool isKeepAlive, bool disableCache, OnRequestFinishedDelegate callback) + : this(uri, HTTPMethods.Get, isKeepAlive, disableCache, callback) + { + } + + #endregion + + public HTTPRequest(Uri uri, HTTPMethods methodType) + : this(uri, methodType, HTTPManager.KeepAliveDefaultValue, +#if !BESTHTTP_DISABLE_CACHING + HTTPManager.IsCachingDisabled || methodType != HTTPMethods.Get +#else + true +#endif + , null) + { + } + + public HTTPRequest(Uri uri, HTTPMethods methodType, OnRequestFinishedDelegate callback) + : this(uri, methodType, HTTPManager.KeepAliveDefaultValue, +#if !BESTHTTP_DISABLE_CACHING + HTTPManager.IsCachingDisabled || methodType != HTTPMethods.Get +#else + true +#endif + , callback) + { + } + + public HTTPRequest(Uri uri, HTTPMethods methodType, bool isKeepAlive, OnRequestFinishedDelegate callback) + : this(uri, methodType, isKeepAlive, +#if !BESTHTTP_DISABLE_CACHING + HTTPManager.IsCachingDisabled || methodType != HTTPMethods.Get +#else + true +#endif + , callback) + { + } + + public HTTPRequest(Uri uri, HTTPMethods methodType, bool isKeepAlive, bool disableCache, OnRequestFinishedDelegate callback) + { + this.Uri = uri; + this.MethodType = methodType; + this.IsKeepAlive = isKeepAlive; +#if !BESTHTTP_DISABLE_CACHING + this.DisableCache = disableCache; +#endif + this.Callback = callback; + this.StreamFragmentSize = 1024 * 1024; + this.MaxFragmentQueueLength = 10; + + this.MaxRetries = methodType == HTTPMethods.Get ? 1 : 0; + this.MaxRedirects = 10; + this.RedirectCount = 0; +#if !BESTHTTP_DISABLE_COOKIES + this.IsCookiesEnabled = HTTPManager.IsCookiesEnabled; +#endif + + this.State = HTTPRequestStates.Initial; + + this.ConnectTimeout = HTTPManager.ConnectTimeout; + this.Timeout = HTTPManager.RequestTimeout; + this.EnableTimoutForStreaming = false; + + this.EnableSafeReadOnUnknownContentLength = true; + +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + this.Proxy = HTTPManager.Proxy; +#endif + + this.UseUploadStreamLength = true; + this.DisposeUploadStream = true; + +#if UNITY_WEBGL && !BESTHTTP_DISABLE_COOKIES + this.WithCredentials = this.IsCookiesEnabled; +#endif + + this.Context = new LoggingContext(this); + this.Timing = new TimingCollector(this); + } + + #endregion + + #region Public Field Functions + + /// + /// Add a field with a given string value. + /// + public void AddField(string fieldName, string value) + { + AddField(fieldName, value, System.Text.Encoding.UTF8); + } + + /// + /// Add a field with a given string value. + /// + public void AddField(string fieldName, string value, System.Text.Encoding e) + { + if (FieldCollector == null) + FieldCollector = new HTTPFormBase(); + + FieldCollector.AddField(fieldName, value, e); + } + + /// + /// Add a field with binary content to the form. + /// + public void AddBinaryData(string fieldName, byte[] content) + { + AddBinaryData(fieldName, content, null, null); + } + + /// + /// Add a field with binary content to the form. + /// + public void AddBinaryData(string fieldName, byte[] content, string fileName) + { + AddBinaryData(fieldName, content, fileName, null); + } + + /// + /// Add a field with binary content to the form. + /// + public void AddBinaryData(string fieldName, byte[] content, string fileName, string mimeType) + { + if (FieldCollector == null) + FieldCollector = new HTTPFormBase(); + + FieldCollector.AddBinaryData(fieldName, content, fileName, mimeType); + } + + /// + /// Manually set a HTTP Form. + /// + public void SetForm(HTTPFormBase form) + { + FormImpl = form; + } + + /// + /// Returns with the added form-fields or null if no one added. + /// + public List GetFormFields() + { + if (this.FieldCollector == null || this.FieldCollector.IsEmpty) + return null; + + return new List(this.FieldCollector.Fields); + } + + /// + /// Clears all data from the form. + /// + public void ClearForm() + { + FormImpl = null; + FieldCollector = null; + } + + /// + /// Will create the form implementation based on the value of the FormUsage property. + /// + private HTTPFormBase SelectFormImplementation() + { + // Our form already created with a previous + if (FormImpl != null) + return FormImpl; + + // No field added to this request yet + if (FieldCollector == null) + return null; + + switch (FormUsage) + { + case HTTPFormUsage.Automatic: + // A really simple decision making: if there are at least one field with binary data, or a 'long' string value then we will choose a Multipart form. + // Otherwise Url Encoded form will be used. + if (FieldCollector.HasBinary || FieldCollector.HasLongValue) + goto case HTTPFormUsage.Multipart; + else + goto case HTTPFormUsage.UrlEncoded; + + case HTTPFormUsage.UrlEncoded: FormImpl = new HTTPUrlEncodedForm(); break; + case HTTPFormUsage.Multipart: FormImpl = new HTTPMultiPartForm(); break; + } + + // Copy the fields, and other properties to the new implementation + FormImpl.CopyFrom(FieldCollector); + + return FormImpl; + } + + #endregion + + #region Header Management + + #region General Management + + /// + /// Adds a header and value pair to the Headers. Use it to add custom headers to the request. + /// + /// AddHeader("User-Agent', "FooBar 1.0") + public void AddHeader(string name, string value) + { + if (Headers == null) + Headers = new Dictionary>(); + + List values; + if (!Headers.TryGetValue(name, out values)) + Headers.Add(name, values = new List(1)); + + values.Add(value); + } + + /// + /// Removes any previously added values, and sets the given one. + /// + public void SetHeader(string name, string value) + { + if (Headers == null) + Headers = new Dictionary>(); + + List values; + if (!Headers.TryGetValue(name, out values)) + Headers.Add(name, values = new List(1)); + + values.Clear(); + values.Add(value); + } + + /// + /// Removes the specified header. Returns true, if the header found and succesfully removed. + /// + /// + /// + public bool RemoveHeader(string name) + { + if (Headers == null) + return false; + + return Headers.Remove(name); + } + + /// + /// Returns true if the given head name is already in the Headers. + /// + public bool HasHeader(string name) + { + return Headers != null && Headers.ContainsKey(name); + } + + /// + /// Returns the first header or null for the given header name. + /// + public string GetFirstHeaderValue(string name) + { + if (Headers == null) + return null; + + List headers = null; + if (Headers.TryGetValue(name, out headers) && headers.Count > 0) + return headers[0]; + + return null; + } + + /// + /// Returns all header values for the given header or null. + /// + public List GetHeaderValues(string name) + { + if (Headers == null) + return null; + + List headers = null; + if (Headers.TryGetValue(name, out headers) && headers.Count > 0) + return headers; + + return null; + } + + /// + /// Removes all headers. + /// + public void RemoveHeaders() + { + if (Headers == null) + return; + + Headers.Clear(); + } + + #endregion + + #region Range Headers + + /// + /// Sets the Range header to download the content from the given byte position. See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35 + /// + /// Start position of the download. + public void SetRangeHeader(long firstBytePos) + { + SetHeader("Range", string.Format("bytes={0}-", firstBytePos)); + } + + /// + /// Sets the Range header to download the content from the given byte position to the given last position. See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35 + /// + /// Start position of the download. + /// The end position of the download. + public void SetRangeHeader(long firstBytePos, long lastBytePos) + { + SetHeader("Range", string.Format("bytes={0}-{1}", firstBytePos, lastBytePos)); + } + + #endregion + + public void EnumerateHeaders(OnHeaderEnumerationDelegate callback) + { + EnumerateHeaders(callback, false); + } + + public void EnumerateHeaders(OnHeaderEnumerationDelegate callback, bool callBeforeSendCallback) + { +#if !UNITY_WEBGL || UNITY_EDITOR + if (!HasHeader("Host")) + { + if (CurrentUri.Port == 80 || CurrentUri.Port == 443) + SetHeader("Host", CurrentUri.Host); + else + SetHeader("Host", CurrentUri.Authority); + } + + if (IsRedirected && !HasHeader("Referer")) + AddHeader("Referer", Uri.ToString()); + + Decompression.DecompressorFactory.SetupHeaders(this); + +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + if (!HTTPProtocolFactory.IsSecureProtocol(this.CurrentUri) && HasProxy && !HasHeader("Proxy-Connection")) + AddHeader("Proxy-Connection", IsKeepAlive ? "Keep-Alive" : "Close"); + #endif + + if (!HasHeader("Connection")) + AddHeader("Connection", IsKeepAlive ? "Keep-Alive, TE" : "Close, TE"); + + if (IsKeepAlive && !HasHeader("Keep-Alive")) + { + // Send the server a slightly larger value to make sure it's not going to close sooner than the client + int seconds = (int)Math.Ceiling(HTTPManager.MaxConnectionIdleTime.TotalSeconds + 1); + + AddHeader("Keep-Alive", "timeout=" + seconds); + } + + if (!HasHeader("TE")) + AddHeader("TE", "identity"); + + if (!string.IsNullOrEmpty(HTTPManager.UserAgent) && !HasHeader("User-Agent")) + AddHeader("User-Agent", HTTPManager.UserAgent); +#endif + long contentLength = -1; + + if (UploadStream == null) + { + byte[] entityBody = GetEntityBody(); + contentLength = entityBody != null ? entityBody.Length : 0; + + if (RawData == null && (FormImpl != null || (FieldCollector != null && !FieldCollector.IsEmpty))) + { + SelectFormImplementation(); + if (FormImpl != null) + FormImpl.PrepareRequest(this); + } + } + else + { + contentLength = UploadStreamLength; + + if (contentLength == -1) + SetHeader("Transfer-Encoding", "Chunked"); + + if (!HasHeader("Content-Type")) + SetHeader("Content-Type", "application/octet-stream"); + } + + // Always set the Content-Length header if possible + // http://tools.ietf.org/html/rfc2616#section-4.4 : For compatibility with HTTP/1.0 applications, HTTP/1.1 requests containing a message-body MUST include a valid Content-Length header field unless the server is known to be HTTP/1.1 compliant. + // 2018.06.03: Changed the condition so that content-length header will be included for zero length too. + // 2022.05.25: Don't send a Content-Length (: 0) header if there's an Upgrade header. Upgrade is set for websocket, and it might be not true that the client doesn't send any bytes. + if ( +#if !UNITY_WEBGL || UNITY_EDITOR + contentLength >= 0 +#else + contentLength != -1 +#endif + && !HasHeader("Content-Length") + && !HasHeader("Upgrade")) + SetHeader("Content-Length", contentLength.ToString()); + +#if !UNITY_WEBGL || UNITY_EDITOR + #if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + // Proxy Authentication + if (!HTTPProtocolFactory.IsSecureProtocol(this.CurrentUri) && HasProxy && Proxy.Credentials != null) + { + switch (Proxy.Credentials.Type) + { + case AuthenticationTypes.Basic: + // With Basic authentication we don't want to wait for a challenge, we will send the hash with the first request + SetHeader("Proxy-Authorization", string.Concat("Basic ", Convert.ToBase64String(Encoding.UTF8.GetBytes(Proxy.Credentials.UserName + ":" + Proxy.Credentials.Password)))); + break; + + case AuthenticationTypes.Unknown: + case AuthenticationTypes.Digest: + var digest = DigestStore.Get(Proxy.Address); + if (digest != null) + { + string authentication = digest.GenerateResponseHeader(this, Proxy.Credentials); + if (!string.IsNullOrEmpty(authentication)) + SetHeader("Proxy-Authorization", authentication); + } + + break; + } + } + #endif + +#endif + + // Server authentication + if (Credentials != null) + { + switch (Credentials.Type) + { + case AuthenticationTypes.Basic: + // With Basic authentication we don't want to wait for a challenge, we will send the hash with the first request + SetHeader("Authorization", string.Concat("Basic ", Convert.ToBase64String(Encoding.UTF8.GetBytes(Credentials.UserName + ":" + Credentials.Password)))); + break; + + case AuthenticationTypes.Unknown: + case AuthenticationTypes.Digest: + var digest = DigestStore.Get(this.CurrentUri); + if (digest != null) + { + string authentication = digest.GenerateResponseHeader(this, Credentials); + if (!string.IsNullOrEmpty(authentication)) + SetHeader("Authorization", authentication); + } + + break; + } + } + + // Cookies. +#if !BESTHTTP_DISABLE_COOKIES + // User added cookies are sent even when IsCookiesEnabled is set to false + List cookies = IsCookiesEnabled ? CookieJar.Get(CurrentUri) : null; + + // Merge server sent cookies with user-set cookies + if (cookies == null || cookies.Count == 0) + cookies = this.customCookies; + else if (this.customCookies != null) + { + // Merge + int idx = 0; + while (idx < this.customCookies.Count) + { + Cookie customCookie = customCookies[idx]; + + int foundIdx = cookies.FindIndex(c => c.Name.Equals(customCookie.Name)); + if (foundIdx >= 0) + cookies[foundIdx] = customCookie; + else + cookies.Add(customCookie); + + idx++; + } + } + + // http://tools.ietf.org/html/rfc6265#section-5.4 + // -When the user agent generates an HTTP request, the user agent MUST NOT attach more than one Cookie header field. + if (cookies != null && cookies.Count > 0) + { + // Room for improvement: + // 2. The user agent SHOULD sort the cookie-list in the following order: + // * Cookies with longer paths are listed before cookies with shorter paths. + // * Among cookies that have equal-length path fields, cookies with earlier creation-times are listed before cookies with later creation-times. + + bool first = true; + string cookieStr = string.Empty; + + bool isSecureProtocolInUse = HTTPProtocolFactory.IsSecureProtocol(CurrentUri); + + foreach (var cookie in cookies) + if (!cookie.IsSecure || (cookie.IsSecure && isSecureProtocolInUse)) + { + if (!first) + cookieStr += "; "; + else + first = false; + + cookieStr += cookie.ToString(); + + // 3. Update the last-access-time of each cookie in the cookie-list to the current date and time. + cookie.LastAccess = DateTime.UtcNow; + } + + if (!string.IsNullOrEmpty(cookieStr)) + SetHeader("Cookie", cookieStr); + } +#endif + + if (callBeforeSendCallback && _onBeforeHeaderSend != null) + { + try + { + _onBeforeHeaderSend(this); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("HTTPRequest", "OnBeforeHeaderSend", ex, this.Context); + } + } + + // Write out the headers to the stream + if (callback != null && Headers != null) + foreach (var kvp in Headers) + callback(kvp.Key, kvp.Value); + } + + /// + /// Writes out the Headers to the stream. + /// + private void SendHeaders(Stream stream) + { + EnumerateHeaders((header, values) => + { + if (string.IsNullOrEmpty(header) || values == null) + return; + + var headerName = string.Concat(header, ": ").GetASCIIBytes(); + + for (int i = 0; i < values.Count; ++i) + { + if (string.IsNullOrEmpty(values[i])) + { + HTTPManager.Logger.Warning("HTTPRequest", string.Format("Null/empty value for header: {0}", header), this.Context); + continue; + } + + if (HTTPManager.Logger.Level <= Logger.Loglevels.Information) + VerboseLogging("Header - '" + header + "': '" + values[i] + "'"); + + var valueBytes = values[i].GetASCIIBytes(); + + stream.WriteBufferSegment(headerName); + stream.WriteBufferSegment(valueBytes); + stream.WriteArray(EOL); + + BufferPool.Release(valueBytes); + } + + BufferPool.Release(headerName); + }, /*callBeforeSendCallback:*/ true); + } + + /// + /// Returns a string representation of the headers. + /// + public string DumpHeaders() + { + using (var ms = new BufferPoolMemoryStream(5 * 1024)) + { + SendHeaders(ms); + return ms.ToArray().AsciiToString(); + } + } + + /// + /// Returns with the bytes that will be sent to the server as the request's payload. + /// + /// Call this only after all form-fields are added! + public byte[] GetEntityBody() + { + if (RawData != null) + return RawData; + + if (FormImpl != null || (FieldCollector != null && !FieldCollector.IsEmpty)) + { + SelectFormImplementation(); + if (FormImpl != null) + return FormImpl.GetData(); + } + + return null; + } + + public struct UploadStreamInfo + { + public readonly Stream Stream; + public readonly long Length; + + public UploadStreamInfo(Stream stream, long length) + { + this.Stream = stream; + this.Length = length; + } + } + + internal UploadStreamInfo GetUpStream() + { + byte[] data = RawData; + + // We are sending forms? Then convert the form to a byte array + if (data == null && FormImpl != null) + data = FormImpl.GetData(); + + if (data != null || UploadStream != null) + { + // Make a new reference, as we will check the UploadStream property in the HTTPManager + Stream uploadStream = UploadStream; + + long UploadLength = 0; + + if (uploadStream == null) + { + // Make stream from the data. A BufferPoolMemoryStream could be used here, + // but because data comes from outside, we don't have control on its lifetime + // and might be gets reused without our knowledge. + uploadStream = new MemoryStream(data, 0, data.Length); + + // Initialize progress report variable + UploadLength = data.Length; + } + else + UploadLength = UseUploadStreamLength ? UploadStreamLength : -1; + + return new UploadStreamInfo(uploadStream, UploadLength); + } + + return new UploadStreamInfo(null, 0); + } + + #endregion + + #region Internal Helper Functions + + internal void SendOutTo(Stream stream) + { + // Under WEBGL EnumerateHeaders and GetEntityBody are used instead of this function. +#if !UNITY_WEBGL || UNITY_EDITOR + string requestPathAndQuery = +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + HasProxy ? this.Proxy.GetRequestPath(CurrentUri) : +#endif + CurrentUri.GetRequestPathAndQueryURL(); + + string requestLine = string.Format("{0} {1} HTTP/1.1", MethodNames[(byte)MethodType], requestPathAndQuery); + + if (HTTPManager.Logger.Level <= Logger.Loglevels.Information) + HTTPManager.Logger.Information("HTTPRequest", string.Format("Sending request: '{0}'", requestLine), this.Context); + + // Create a buffer stream that will not close 'stream' when disposed or closed. + // buffersize should be larger than UploadChunkSize as it might be used for uploading user data and + // it should have enough room for UploadChunkSize data and additional chunk information. + using (WriteOnlyBufferedStream bufferStream = new WriteOnlyBufferedStream(stream, (int)(UploadChunkSize * 1.5f))) + { + var requestLineBytes = requestLine.GetASCIIBytes(); + bufferStream.WriteBufferSegment(requestLineBytes); + bufferStream.WriteArray(EOL); + + BufferPool.Release(requestLineBytes); + + // Write headers to the buffer + SendHeaders(bufferStream); + bufferStream.WriteArray(EOL); + + // Send remaining data to the wire + bufferStream.Flush(); + + byte[] data = RawData; + + // We are sending forms? Then convert the form to a byte array + if (data == null && FormImpl != null) + data = FormImpl.GetData(); + + if (data != null || UploadStream != null) + { + // Make a new reference, as we will check the UploadStream property in the HTTPManager + Stream uploadStream = UploadStream; + + long UploadLength = 0; + + if (uploadStream == null) + { + // Make stream from the data. A BufferPoolMemoryStream could be used here, + // but because data comes from outside, we don't have control on it's lifetime + // and might be gets reused without our knowledge. + uploadStream = new MemoryStream(data, 0, data.Length); + + // Initialize progress report variable + UploadLength = data.Length; + } + else + UploadLength = UseUploadStreamLength ? UploadStreamLength : -1; + + // Initialize the progress report variables + long Uploaded = 0; + + // Upload buffer. First we will read the data into this buffer from the UploadStream, then write this buffer to our outStream + byte[] buffer = BufferPool.Get(UploadChunkSize, true); + + // How many bytes was read from the UploadStream + int count = 0; + while ((count = uploadStream.Read(buffer, 0, buffer.Length)) > 0) + { + // If we don't know the size, send as chunked + if (!UseUploadStreamLength) + { + var countBytes = count.ToString("X").GetASCIIBytes(); + bufferStream.WriteBufferSegment(countBytes); + bufferStream.WriteArray(EOL); + + BufferPool.Release(countBytes); + } + + // write out the buffer to the wire + bufferStream.Write(buffer, 0, count); + + // chunk trailing EOL + if (!UseUploadStreamLength) + bufferStream.WriteArray(EOL); + + // update how many bytes are uploaded + Uploaded += count; + + // Write to the wire + bufferStream.Flush(); + + if (this.OnUploadProgress != null) + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this, RequestEvents.UploadProgress, Uploaded, UploadLength)); + + if (this.IsCancellationRequested) + return; + } + + BufferPool.Release(buffer); + + // All data from the stream are sent, write the 'end' chunk if necessary + if (!UseUploadStreamLength) + { + byte[] noMoreChunkBytes = BufferPool.Get(1, true); + noMoreChunkBytes[0] = (byte)'0'; + bufferStream.Write(noMoreChunkBytes, 0, 1); + bufferStream.WriteArray(EOL); + bufferStream.WriteArray(EOL); + + BufferPool.Release(noMoreChunkBytes); + } + + // Make sure all remaining data will be on the wire + bufferStream.Flush(); + + // Dispose the MemoryStream + if (UploadStream == null && uploadStream != null) + uploadStream.Dispose(); + } + else + bufferStream.Flush(); + } // bufferStream.Dispose + + HTTPManager.Logger.Information("HTTPRequest", "'" + requestLine + "' sent out", this.Context); +#endif + } + +#if !UNITY_WEBGL || UNITY_EDITOR + internal void UpgradeCallback() + { + if (Response == null || !Response.IsUpgraded) + return; + + try + { + if (OnUpgraded != null) + OnUpgraded(this, Response); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("HTTPRequest", "UpgradeCallback", ex, this.Context); + } + } +#endif + + internal bool CallOnBeforeRedirection(Uri redirectUri) + { + if (onBeforeRedirection != null) + return onBeforeRedirection(this, this.Response, redirectUri); + + return true; + } + + /// + /// Called on Unity's main thread just before processing it. + /// + internal void Prepare() + { + + } + +#endregion + + /// + /// Starts processing the request. + /// + public HTTPRequest Send() + { + this.IsCancellationRequested = false; + this.Exception = null; + + return HTTPManager.SendRequest(this); + } + + /// + /// Aborts an already established connection, so no further download or upload are done. + /// + public void Abort() + { + VerboseLogging("Abort request!"); + + lock (this) + { + if (this.State >= HTTPRequestStates.Finished) + return; + + this.IsCancellationRequested = true; + + // If the response is an IProtocol implementation, call the protocol's cancellation. + IProtocol protocol = this.Response as IProtocol; + if (protocol != null) + protocol.CancellationRequested(); + + // There's a race-condition here, another thread might set it too. + this.Response = null; + + // There's a race-condition here too, another thread might set it too. + // In this case, both state going to be queued up that we have to handle in RequestEvents.cs. + if (this.IsTimedOut) + { + this.State = this.IsConnectTimedOut ? HTTPRequestStates.ConnectionTimedOut : HTTPRequestStates.TimedOut; + } + else + this.State = HTTPRequestStates.Aborted; + +#if !UNITY_WEBGL || UNITY_EDITOR + if (this.OnCancellationRequested != null) + { + try + { + this.OnCancellationRequested(this); + } + catch { } + } +#endif + } + } + + /// + /// Resets the request for a state where switching MethodType is possible. + /// + public void Clear() + { + ClearForm(); + RemoveHeaders(); + + this.IsRedirected = false; + this.RedirectCount = 0; + this.Exception = null; + } + + private void VerboseLogging(string str) + { + HTTPManager.Logger.Verbose("HTTPRequest", str, this.Context); + } + + #region System.Collections.IEnumerator implementation + + public object Current { get { return null; } } + + public bool MoveNext() + { + return this.State < HTTPRequestStates.Finished; + } + + public void Reset() + { + throw new NotImplementedException(); + } + +#endregion + + HTTPRequest IEnumerator.Current + { + get { return this; } + } + + public void Dispose() + { + if (UploadStream != null && DisposeUploadStream) + { + UploadStream.Dispose(); + UploadStream = null; + } + + if (Response != null) + Response.Dispose(); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPRequest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPRequest.cs.meta new file mode 100644 index 000000000..5ad5cae2f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPRequest.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bb4a0cfc508761746bb8e11d32d4c8e0 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPResponse.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPResponse.cs new file mode 100644 index 000000000..3d37b2737 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPResponse.cs @@ -0,0 +1,1236 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +#if !NETFX_CORE || UNITY_EDITOR + using System.Net.Sockets; +#endif + +using UnityEngine; + +namespace BestHTTP +{ + #if !BESTHTTP_DISABLE_CACHING + using BestHTTP.Caching; + #endif + + using BestHTTP.Extensions; + + #if !BESTHTTP_DISABLE_COOKIES + using BestHTTP.Cookies; + #endif + + using System.Threading; + using BestHTTP.Core; + using BestHTTP.PlatformSupport.Memory; + using BestHTTP.Logger; + using BestHTTP.Timings; + + public class HTTPResponse : IDisposable + { + internal const byte CR = 13; + internal const byte LF = 10; + + /// + /// Minimum size of the read buffer. + /// + public static int MinReadBufferSize = 16 * 1024; + + #region Public Properties + + public int VersionMajor { get; protected set; } + + public int VersionMinor { get; protected set; } + + /// + /// The status code that sent from the server. + /// + public int StatusCode { get; protected set; } + + /// + /// Returns true if the status code is in the range of [200..300[ or 304 (Not Modified) + /// + public bool IsSuccess { get { return (this.StatusCode >= 200 && this.StatusCode < 300) || this.StatusCode == 304; } } + + /// + /// The message that sent along with the StatusCode from the server. You can check it for errors from the server. + /// + public string Message { get; protected set; } + + /// + /// True if it's a streamed response. + /// + public bool IsStreamed { get; protected set; } + +#if !BESTHTTP_DISABLE_CACHING + /// + /// Indicates that the response body is read from the cache. + /// + public bool IsFromCache { get; internal set; } + + /// + /// Provides information about the file used for caching the request. + /// + public HTTPCacheFileInfo CacheFileInfo { get; internal set; } + + /// + /// Determines if this response is only stored to cache. + /// If both IsCacheOnly and IsStreamed are true, OnStreamingData isn't called. + /// + public bool IsCacheOnly { get; private set; } +#endif + + /// + /// True, if this is a response for a HTTPProxy request. + /// + public bool IsProxyResponse { get; private set; } + + /// + /// The headers that sent from the server. + /// + public Dictionary> Headers { get; protected set; } + + /// + /// The data that downloaded from the server. All Transfer and Content encodings decoded if any(eg. chunked, gzip, deflate). + /// + public byte[] Data { get; internal set; } + + /// + /// The normal HTTP protocol is upgraded to an other. + /// + public bool IsUpgraded { get; protected set; } + +#if !BESTHTTP_DISABLE_COOKIES + /// + /// The cookies that the server sent to the client. + /// + public List Cookies { get; internal set; } +#endif + + /// + /// Cached, converted data. + /// + protected string dataAsText; + + /// + /// The data converted to an UTF8 string. + /// + public string DataAsText + { + get + { + if (Data == null) + return string.Empty; + + if (!string.IsNullOrEmpty(dataAsText)) + return dataAsText; + + return dataAsText = Encoding.UTF8.GetString(Data, 0, Data.Length); + } + } + + /// + /// Cached converted data. + /// + protected Texture2D texture; + + /// + /// The data loaded to a Texture2D. + /// + public Texture2D DataAsTexture2D + { + get + { + if (Data == null) + return null; + + if (texture != null) + return texture; + + texture = new Texture2D(0, 0, TextureFormat.RGBA32, false); + texture.LoadImage(Data, true); + + return texture; + } + } + + /// + /// True if the connection's stream will be closed manually. Used in custom protocols (WebSocket, EventSource). + /// + public bool IsClosedManually { get; protected set; } + + /// + /// IProtocol.LoggingContext implementation. + /// + public LoggingContext Context { get; private set; } + + /// + /// Count of streaming data fragments sitting in the HTTPManager's request event queue. + /// +#if UNITY_EDITOR + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] +#endif + internal long UnprocessedFragments; + + #endregion + + #region Internal Fields + + internal HTTPRequest baseRequest; + + #endregion + + #region Protected Properties And Fields + + protected Stream Stream; + + protected byte[] fragmentBuffer; + protected int fragmentBufferDataLength; +#if !BESTHTTP_DISABLE_CACHING + protected Stream cacheStream; +#endif + protected int allFragmentSize; + + #endregion + + protected HTTPResponse(HTTPRequest request, bool isFromCache) + { + this.baseRequest = request; +#if !BESTHTTP_DISABLE_CACHING + this.IsFromCache = isFromCache; +#endif + this.Context = new LoggingContext(this); + this.Context.Add("BaseRequest", request.Context); + this.Context.Add("IsFromCache", isFromCache); + } + + public HTTPResponse(HTTPRequest request, Stream stream, bool isStreamed, bool isFromCache, bool isProxyResponse = false) + { + this.baseRequest = request; + this.Stream = stream; + this.IsStreamed = isStreamed; + +#if !BESTHTTP_DISABLE_CACHING + this.IsFromCache = isFromCache; + this.IsCacheOnly = request.CacheOnly; +#endif + + this.IsProxyResponse = isProxyResponse; + + this.IsClosedManually = false; + + this.Context = new LoggingContext(this); + this.Context.Add("BaseRequest", request.GetHashCode()); + this.Context.Add("IsStreamed", isStreamed); + this.Context.Add("IsFromCache", isFromCache); + } + + public bool Receive(long forceReadRawContentLength = -1, bool readPayloadData = true, bool sendUpgradedEvent = true) + { + if (this.baseRequest.IsCancellationRequested) + return false; + + string statusLine = string.Empty; + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + VerboseLogging(string.Format("Receive. forceReadRawContentLength: '{0:N0}', readPayloadData: '{1:N0}'", forceReadRawContentLength, readPayloadData)); + + // On WP platform we aren't able to determined sure enough whether the tcp connection is closed or not. + // So if we get an exception here, we need to recreate the connection. + try + { + // Read out 'HTTP/1.1' from the "HTTP/1.1 {StatusCode} {Message}" + statusLine = ReadTo(Stream, (byte)' '); + } + catch + { + if (baseRequest.IsCancellationRequested) + return false; + + if (baseRequest.Retries >= baseRequest.MaxRetries) + { + HTTPManager.Logger.Warning("HTTPResponse", "Failed to read Status Line! Retry is enabled, returning with false.", this.Context, this.baseRequest.Context); + return false; + } + + HTTPManager.Logger.Warning("HTTPResponse", "Failed to read Status Line! Retry is disabled, re-throwing exception.", this.Context, this.baseRequest.Context); + throw; + } + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + VerboseLogging(string.Format("Status Line: '{0}'", statusLine)); + + if (string.IsNullOrEmpty(statusLine)) + { + if (baseRequest.Retries >= baseRequest.MaxRetries) + return false; + + throw new Exception("Network error! TCP Connection got closed before receiving any data!"); + } + + if (!this.IsProxyResponse) + baseRequest.Timing.Add(TimingEventNames.Waiting_TTFB); + + string[] versions = statusLine.Split(new char[] { '/', '.' }); + this.VersionMajor = int.Parse(versions[1]); + this.VersionMinor = int.Parse(versions[2]); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + VerboseLogging(string.Format("HTTP Version: '{0}.{1}'", this.VersionMajor.ToString(), this.VersionMinor.ToString())); + + int statusCode; + string statusCodeStr = NoTrimReadTo(Stream, (byte)' ', LF); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + VerboseLogging(string.Format("Status Code: '{0}'", statusCodeStr)); + + if (baseRequest.Retries >= baseRequest.MaxRetries) + statusCode = int.Parse(statusCodeStr); + else if (!int.TryParse(statusCodeStr, out statusCode)) + return false; + + this.StatusCode = statusCode; + + if (statusCodeStr.Length > 0 && (byte)statusCodeStr[statusCodeStr.Length - 1] != LF && (byte)statusCodeStr[statusCodeStr.Length - 1] != CR) + { + this.Message = ReadTo(Stream, LF); + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + VerboseLogging(string.Format("Status Message: '{0}'", this.Message)); + } + else + { + HTTPManager.Logger.Warning("HTTPResponse", "Skipping Status Message reading!", this.Context, this.baseRequest.Context); + + this.Message = string.Empty; + } + + //Read Headers + ReadHeaders(Stream); + + if (!this.IsProxyResponse) + baseRequest.Timing.Add(TimingEventNames.Headers); + + IsUpgraded = StatusCode == 101 && (HasHeaderWithValue("connection", "upgrade") || HasHeader("upgrade")); + + if (IsUpgraded) + { + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + VerboseLogging("Request Upgraded!"); + + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this.baseRequest, RequestEvents.Upgraded)); + } + + if (!readPayloadData) + return true; + + if (this.StatusCode == 200 && this.IsProxyResponse) + return true; + + return ReadPayload(forceReadRawContentLength); + } + + protected bool ReadPayload(long forceReadRawContentLength) + { + // Reading from an already unpacked stream (eq. From a file cache or all responses under webgl) + if (forceReadRawContentLength != -1) + { + ReadRaw(Stream, forceReadRawContentLength); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + VerboseLogging("ReadPayload Finished!"); + return true; + } + + // http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.4 + // 1.Any response message which "MUST NOT" include a message-body (such as the 1xx, 204, and 304 responses and any response to a HEAD request) + // is always terminated by the first empty line after the header fields, regardless of the entity-header fields present in the message. + if ((StatusCode >= 100 && StatusCode < 200) || StatusCode == 204 || StatusCode == 304 || baseRequest.MethodType == HTTPMethods.Head) + return true; + +#if (!UNITY_WEBGL || UNITY_EDITOR) + if (HasHeaderWithValue("transfer-encoding", "chunked")) + ReadChunked(Stream); + else +#endif + { + // http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.4 + // Case 3 in the above link. + List contentLengthHeaders = GetHeaderValues("content-length"); + var contentRangeHeaders = GetHeaderValues("content-range"); + if (contentLengthHeaders != null && contentRangeHeaders == null) + ReadRaw(Stream, long.Parse(contentLengthHeaders[0])); + else if (contentRangeHeaders != null) + { + if (contentLengthHeaders != null) + ReadRaw(Stream, long.Parse(contentLengthHeaders[0])); + else + { + HTTPRange range = GetRange(); + ReadRaw(Stream, (range.LastBytePos - range.FirstBytePos) + 1); + } + } + else + ReadUnknownSize(Stream); + } + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + VerboseLogging("ReadPayload Finished!"); + + return true; + } + + #region Header Management + + protected void ReadHeaders(Stream stream) + { + var newHeaders = this.baseRequest.OnHeadersReceived != null ? new Dictionary>(StringComparer.OrdinalIgnoreCase) : null; + + string headerName = ReadTo(stream, (byte)':', LF)/*.Trim()*/; + while (headerName != string.Empty) + { + string value = ReadTo(stream, LF); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + VerboseLogging(string.Format("Header - '{0}': '{1}'", headerName, value)); + + AddHeader(headerName, value); + + if (newHeaders != null) + { + List values; + if (!newHeaders.TryGetValue(headerName, out values)) + newHeaders.Add(headerName, values = new List(1)); + + values.Add(value); + } + + headerName = ReadTo(stream, (byte)':', LF); + } + + if (this.baseRequest.OnHeadersReceived != null) + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this.baseRequest, newHeaders)); + } + + public void AddHeader(string name, string value) + { + if (Headers == null) + Headers = new Dictionary>(StringComparer.OrdinalIgnoreCase); + + List values; + if (!Headers.TryGetValue(name, out values)) + Headers.Add(name, values = new List(1)); + + values.Add(value); + + bool isFromCache = false; +#if !BESTHTTP_DISABLE_CACHING + isFromCache = this.IsFromCache; +#endif + if (!isFromCache && name.Equals("alt-svc", StringComparison.Ordinal)) + PluginEventHelper.EnqueuePluginEvent(new PluginEventInfo(PluginEvents.AltSvcHeader, new AltSvcEventInfo(this.baseRequest.CurrentUri.Host, this))); + } + + /// + /// Returns the list of values that received from the server for the given header name. + /// + /// Name of the header + /// If no header found with the given name or there are no values in the list (eg. Count == 0) returns null. + public List GetHeaderValues(string name) + { + if (Headers == null) + return null; + + List values; + if (!Headers.TryGetValue(name, out values) || values.Count == 0) + return null; + + return values; + } + + /// + /// Returns the first value in the header list or null if there are no header or value. + /// + /// Name of the header + /// If no header found with the given name or there are no values in the list (eg. Count == 0) returns null. + public string GetFirstHeaderValue(string name) + { + if (Headers == null) + return null; + + List values; + if (!Headers.TryGetValue(name, out values) || values.Count == 0) + return null; + + return values[0]; + } + + /// + /// Checks if there is a header with the given name and value. + /// + /// Name of the header. + /// + /// Returns true if there is a header with the given name and value. + public bool HasHeaderWithValue(string headerName, string value) + { + var values = GetHeaderValues(headerName); + if (values == null) + return false; + + for (int i = 0; i < values.Count; ++i) + if (string.Compare(values[i], value, StringComparison.OrdinalIgnoreCase) == 0) + return true; + + return false; + } + + /// + /// Checks if there is a header with the given name. + /// + /// Name of the header. + /// Returns true if there is a header with the given name. + public bool HasHeader(string headerName) + { + var values = GetHeaderValues(headerName); + if (values == null) + return false; + + return true; + } + + /// + /// Parses the 'Content-Range' header's value and returns a HTTPRange object. + /// + /// If the server ignores a byte-range-spec because it is syntactically invalid, the server SHOULD treat the request as if the invalid Range header field did not exist. + /// (Normally, this means return a 200 response containing the full entity). In this case because of there are no 'Content-Range' header, this function will return null! + /// Returns null if no 'Content-Range' header found. + public HTTPRange GetRange() + { + var rangeHeaders = GetHeaderValues("content-range"); + if (rangeHeaders == null) + return null; + + // A byte-content-range-spec with a byte-range-resp-spec whose last- byte-pos value is less than its first-byte-pos value, + // or whose instance-length value is less than or equal to its last-byte-pos value, is invalid. + // The recipient of an invalid byte-content-range- spec MUST ignore it and any content transferred along with it. + + // A valid content-range sample: "bytes 500-1233/1234" + var ranges = rangeHeaders[0].Split(new char[] { ' ', '-', '/' }, StringSplitOptions.RemoveEmptyEntries); + + // A server sending a response with status code 416 (Requested range not satisfiable) SHOULD include a Content-Range field with a byte-range-resp-spec of "*". + // The instance-length specifies the current length of the selected resource. + // "bytes */1234" + if (ranges[1] == "*") + return new HTTPRange(int.Parse(ranges[2])); + + return new HTTPRange(int.Parse(ranges[1]), int.Parse(ranges[2]), ranges[3] != "*" ? int.Parse(ranges[3]) : -1); + } + +#endregion + +#region Static Stream Management Helper Functions + + internal static string ReadTo(Stream stream, byte blocker) + { + byte[] readBuf = BufferPool.Get(1024, true); + try + { + int bufpos = 0; + + int ch = stream.ReadByte(); + while (ch != blocker && ch != -1) + { + if (ch > 0x7f) //replaces asciitostring + ch = '?'; + + //make buffer larger if too short + if (readBuf.Length <= bufpos) + BufferPool.Resize(ref readBuf, readBuf.Length * 2, true, false); + + if (bufpos > 0 || !char.IsWhiteSpace((char)ch)) //trimstart + readBuf[bufpos++] = (byte)ch; + ch = stream.ReadByte(); + } + + while (bufpos > 0 && char.IsWhiteSpace((char)readBuf[bufpos - 1])) + bufpos--; + + return System.Text.Encoding.UTF8.GetString(readBuf, 0, bufpos); + } + finally + { + BufferPool.Release(readBuf); + } + } + + internal static string ReadTo(Stream stream, byte blocker1, byte blocker2) + { + byte[] readBuf = BufferPool.Get(1024, true); + try + { + int bufpos = 0; + + int ch = stream.ReadByte(); + while (ch != blocker1 && ch != blocker2 && ch != -1) + { + if (ch > 0x7f) //replaces asciitostring + ch = '?'; + + //make buffer larger if too short + if (readBuf.Length <= bufpos) + BufferPool.Resize(ref readBuf, readBuf.Length * 2, true, true); + + if (bufpos > 0 || !char.IsWhiteSpace((char)ch)) //trimstart + readBuf[bufpos++] = (byte)ch; + ch = stream.ReadByte(); + } + + while (bufpos > 0 && char.IsWhiteSpace((char)readBuf[bufpos - 1])) + bufpos--; + + return System.Text.Encoding.UTF8.GetString(readBuf, 0, bufpos); + } + finally + { + BufferPool.Release(readBuf); + } + } + + internal static string NoTrimReadTo(Stream stream, byte blocker1, byte blocker2) + { + byte[] readBuf = BufferPool.Get(1024, true); + try + { + int bufpos = 0; + + int ch = stream.ReadByte(); + while (ch != blocker1 && ch != blocker2 && ch != -1) + { + if (ch > 0x7f) //replaces asciitostring + ch = '?'; + + //make buffer larger if too short + if (readBuf.Length <= bufpos) + BufferPool.Resize(ref readBuf, readBuf.Length * 2, true, true); + + if (bufpos > 0 || !char.IsWhiteSpace((char)ch)) //trimstart + readBuf[bufpos++] = (byte)ch; + ch = stream.ReadByte(); + } + + return System.Text.Encoding.UTF8.GetString(readBuf, 0, bufpos); + } + finally + { + BufferPool.Release(readBuf); + } + } + +#endregion + +#region Read Chunked Body + + protected int ReadChunkLength(Stream stream) + { + // Read until the end of line, then split the string so we will discard any optional chunk extensions + string line = ReadTo(stream, LF); + string[] splits = line.Split(';'); + string num = splits[0]; + + int result; + if (int.TryParse(num, System.Globalization.NumberStyles.AllowHexSpecifier, null, out result)) + return result; + + throw new Exception(string.Format("Can't parse '{0}' as a hex number!", num)); + } + + // http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.6.1 + protected void ReadChunked(Stream stream) + { + BeginReceiveStreamFragments(); + + string contentLengthHeader = GetFirstHeaderValue("Content-Length"); + bool hasContentLengthHeader = !string.IsNullOrEmpty(contentLengthHeader); + int realLength = 0; + if (hasContentLengthHeader) + hasContentLengthHeader = int.TryParse(contentLengthHeader, out realLength); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + VerboseLogging(string.Format("ReadChunked - hasContentLengthHeader: {0}, contentLengthHeader: {1} realLength: {2:N0}", hasContentLengthHeader.ToString(), contentLengthHeader, realLength)); + + using (var output = new BufferPoolMemoryStream()) + { + int chunkLength = ReadChunkLength(stream); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + VerboseLogging(string.Format("chunkLength: {0:N0}", chunkLength)); + + byte[] buffer = baseRequest.ReadBufferSizeOverride > 0 ? BufferPool.Get(baseRequest.ReadBufferSizeOverride, false) : BufferPool.Get(MinReadBufferSize, true); + + // wrap buffer in a PooledBuffer to release it back to the pool when leaving the current block. + using (var _ = new PooledBuffer(buffer)) + { + // Progress report: + long Downloaded = 0; + long DownloadLength = hasContentLengthHeader ? realLength : chunkLength; + bool sendProgressChanged = this.baseRequest.OnDownloadProgress != null && (this.IsSuccess +#if !BESTHTTP_DISABLE_CACHING + || this.IsFromCache +#endif + ); + + if (sendProgressChanged) + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this.baseRequest, RequestEvents.DownloadProgress, Downloaded, DownloadLength)); + + string encoding = +#if !BESTHTTP_DISABLE_CACHING + IsFromCache ? null : +#endif + GetFirstHeaderValue("content-encoding"); + bool compressed = !string.IsNullOrEmpty(encoding); + Decompression.IDecompressor decompressor = baseRequest.UseStreaming ? Decompression.DecompressorFactory.GetDecompressor(encoding, this.Context) : null; + + while (chunkLength != 0) + { + if (this.baseRequest.IsCancellationRequested) + return; + + int totalBytes = 0; + // Fill up the buffer + do + { + int tryToReadCount = (int)Math.Min(chunkLength - totalBytes, buffer.Length); + + int bytes = stream.Read(buffer, 0, tryToReadCount); + if (bytes <= 0) + throw ExceptionHelper.ServerClosedTCPStream(); + + // Progress report: + // Placing reporting inside this cycle will report progress much more frequent + Downloaded += bytes; + + if (sendProgressChanged) + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this.baseRequest, RequestEvents.DownloadProgress, Downloaded, DownloadLength)); + + if (baseRequest.UseStreaming) + { + if (compressed) + { + var decompressed = decompressor.Decompress(buffer, 0, bytes, false, true); + if (decompressed.Data != null) + FeedStreamFragment(decompressed.Data, 0, decompressed.Length); + } + else + FeedStreamFragment(buffer, 0, bytes); + } + else + output.Write(buffer, 0, bytes); + + totalBytes += bytes; + } while (totalBytes < chunkLength); + + // Every chunk data has a trailing CRLF + ReadTo(stream, LF); + + // read the next chunk's length + chunkLength = ReadChunkLength(stream); + + if (!hasContentLengthHeader) + DownloadLength += chunkLength; + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + VerboseLogging(string.Format("chunkLength: {0:N0}", chunkLength)); + } + + //BufferPool.Release(buffer); + + if (baseRequest.UseStreaming) + { + if (compressed) + { + var decompressed = decompressor.Decompress(null, 0, 0, true, true); + if (decompressed.Data != null) + FeedStreamFragment(decompressed.Data, 0, decompressed.Length); + } + + FlushRemainingFragmentBuffer(); + } + + // Read the trailing headers or the CRLF + ReadHeaders(stream); + + // HTTP servers sometimes use compression (gzip) or deflate methods to optimize transmission. + // How both chunked and gzip encoding interact is dictated by the two-staged encoding of HTTP: + // first the content stream is encoded as (Content-Encoding: gzip), after which the resulting byte stream is encoded for transfer using another encoder (Transfer-Encoding: chunked). + // This means that in case both compression and chunked encoding are enabled, the chunk encoding itself is not compressed, and the data in each chunk should not be compressed individually. + // The remote endpoint can decode the incoming stream by first decoding it with the Transfer-Encoding, followed by the specified Content-Encoding. + // It would be a better implementation when the chunk would be decododed on-the-fly. Becouse now the whole stream must be downloaded, and then decoded. It needs more memory. + if (!baseRequest.UseStreaming) + this.Data = DecodeStream(output); + + if (decompressor != null) + decompressor.Dispose(); + } + } + } + +#endregion + +#region Read Raw Body + + // No transfer-encoding just raw bytes. + internal void ReadRaw(Stream stream, long contentLength) + { + BeginReceiveStreamFragments(); + + // Progress report: + long downloaded = 0; + long downloadLength = contentLength; + bool sendProgressChanged = this.baseRequest.OnDownloadProgress != null && (this.IsSuccess +#if !BESTHTTP_DISABLE_CACHING + || this.IsFromCache +#endif + ); + + if (sendProgressChanged) + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this.baseRequest, RequestEvents.DownloadProgress, downloaded, downloadLength)); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + VerboseLogging(string.Format("ReadRaw - contentLength: {0:N0}", contentLength)); + + string encoding = +#if !BESTHTTP_DISABLE_CACHING + IsFromCache ? null : +#endif + GetFirstHeaderValue("content-encoding"); + bool compressed = !string.IsNullOrEmpty(encoding); + Decompression.IDecompressor decompressor = baseRequest.UseStreaming ? Decompression.DecompressorFactory.GetDecompressor(encoding, this.Context) : null; + + if (!baseRequest.UseStreaming && contentLength > 2147483646) + { + throw new OverflowException("You have to use STREAMING to download files bigger than 2GB!"); + } + + using (var output = new BufferPoolMemoryStream(baseRequest.UseStreaming ? 0 : (int)contentLength)) + { + // Because of the last parameter, buffer's size can be larger than the requested but there's no reason to use + // an exact sized one if there's an larger one available in the pool. Later we will use the whole buffer. + byte[] buffer = baseRequest.ReadBufferSizeOverride > 0 ? BufferPool.Get(baseRequest.ReadBufferSizeOverride, false) : BufferPool.Get(MinReadBufferSize, true); + + // wrap buffer in a PooledBuffer to release it back to the pool when leaving the current block. + using (var _ = new PooledBuffer(buffer)) + { + int readBytes = 0; + + while (contentLength > 0) + { + if (this.baseRequest.IsCancellationRequested) + return; + + readBytes = 0; + + do + { + // tryToReadCount contain how much bytes we want to read in once. We try to read the buffer fully in once, + // but with a limit of the remaining contentLength. + int tryToReadCount = (int)Math.Min(Math.Min(int.MaxValue, contentLength), buffer.Length - readBytes); + + int bytes = stream.Read(buffer, readBytes, tryToReadCount); + + if (bytes <= 0) + throw ExceptionHelper.ServerClosedTCPStream(); + + readBytes += bytes; + contentLength -= bytes; + + // Progress report: + if (sendProgressChanged) + { + downloaded += bytes; + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this.baseRequest, RequestEvents.DownloadProgress, downloaded, downloadLength)); + } + + } while (readBytes < buffer.Length && contentLength > 0); + + if (baseRequest.UseStreaming) + { + if (compressed) + { + var decompressed = decompressor.Decompress(buffer, 0, readBytes, false, true); + if (decompressed.Data != null) + FeedStreamFragment(decompressed.Data, 0, decompressed.Length); + } + else + FeedStreamFragment(buffer, 0, readBytes); + } + else + output.Write(buffer, 0, readBytes); + }; + + //BufferPool.Release(buffer); + + if (baseRequest.UseStreaming) + { + if (compressed) + { + var decompressed = decompressor.Decompress(null, 0, 0, true, true); + if (decompressed.Data != null) + FeedStreamFragment(decompressed.Data, 0, decompressed.Length); + } + + FlushRemainingFragmentBuffer(); + } + + if (!baseRequest.UseStreaming) + this.Data = DecodeStream(output); + } + } + + if (decompressor != null) + decompressor.Dispose(); + } + +#endregion + +#region Read Unknown Size + + protected void ReadUnknownSize(Stream stream) + { + // Progress report: + long Downloaded = 0; + long DownloadLength = 0; + bool sendProgressChanged = this.baseRequest.OnDownloadProgress != null && (this.IsSuccess +#if !BESTHTTP_DISABLE_CACHING + || this.IsFromCache +#endif + ); + + if (sendProgressChanged) + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this.baseRequest, RequestEvents.DownloadProgress, Downloaded, DownloadLength)); + + string encoding = +#if !BESTHTTP_DISABLE_CACHING + IsFromCache ? null : +#endif + GetFirstHeaderValue("content-encoding"); + bool compressed = !string.IsNullOrEmpty(encoding); + Decompression.IDecompressor decompressor = baseRequest.UseStreaming ? Decompression.DecompressorFactory.GetDecompressor(encoding, this.Context) : null; + + using (var output = new BufferPoolMemoryStream()) + { + byte[] buffer = baseRequest.ReadBufferSizeOverride > 0 ? BufferPool.Get(baseRequest.ReadBufferSizeOverride, false) : BufferPool.Get(MinReadBufferSize, true); + + // wrap buffer in a PooledBuffer to release it back to the pool when leaving the current block. + using (var _ = new PooledBuffer(buffer)) + { + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + VerboseLogging(string.Format("ReadUnknownSize - buffer size: {0:N0}", buffer.Length)); + + int readBytes = 0; + int bytes = 0; + do + { + readBytes = 0; + + do + { + if (this.baseRequest.IsCancellationRequested) + return; + + bytes = 0; + +#if !NETFX_CORE || UNITY_EDITOR + NetworkStream networkStream = stream as NetworkStream; + // If we have the good-old NetworkStream, than we can use the DataAvailable property. On WP8 platforms, these are omitted... :/ + if (networkStream != null && baseRequest.EnableSafeReadOnUnknownContentLength) + { + for (int i = readBytes; i < buffer.Length && networkStream.DataAvailable; ++i) + { + int read = stream.ReadByte(); + if (read >= 0) + { + buffer[i] = (byte)read; + bytes++; + } + else + break; + } + } + else // This will be good anyway, but a little slower. +#endif + { + bytes = stream.Read(buffer, readBytes, buffer.Length - readBytes); + } + + readBytes += bytes; + + // Progress report: + Downloaded += bytes; + DownloadLength = Downloaded; + + if (sendProgressChanged) + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this.baseRequest, RequestEvents.DownloadProgress, Downloaded, DownloadLength)); + + } while (readBytes < buffer.Length && bytes > 0); + + if (baseRequest.UseStreaming) + { + if (compressed) + { + var decompressed = decompressor.Decompress(buffer, 0, readBytes, false, true); + if (decompressed.Data != null) + FeedStreamFragment(decompressed.Data, 0, decompressed.Length); + } + else + FeedStreamFragment(buffer, 0, readBytes); + } + else if (readBytes > 0) + output.Write(buffer, 0, readBytes); + + } while (bytes > 0); + + //BufferPool.Release(buffer); + + if (baseRequest.UseStreaming) + { + if (compressed) + { + var decompressed = decompressor.Decompress(null, 0, 0, true, true); + if (decompressed.Data != null) + FeedStreamFragment(decompressed.Data, 0, decompressed.Length); + } + + FlushRemainingFragmentBuffer(); + } + + if (!baseRequest.UseStreaming) + this.Data = DecodeStream(output); + } + } + + if (decompressor != null) + decompressor.Dispose(); + } + +#endregion + +#region Stream Decoding + + protected byte[] DecodeStream(BufferPoolMemoryStream streamToDecode) + { + streamToDecode.Seek(0, SeekOrigin.Begin); + + // The cache stores the decoded data + var encoding = +#if !BESTHTTP_DISABLE_CACHING + IsFromCache ? null : +#endif + GetHeaderValues("content-encoding"); + + Stream decoderStream = Decompression.DecompressorFactory.GetDecoderStream(streamToDecode, encoding?[0]); + + // Under WebGL decoderStream is always null. + if (decoderStream == null) + return streamToDecode.ToArray(canBeLarger: false); + +#if !UNITY_WEBGL || UNITY_EDITOR + using (var ms = new BufferPoolMemoryStream((int)streamToDecode.Length)) + { + var buf = BufferPool.Get(HTTPResponse.MinReadBufferSize, true); + int byteCount = 0; + + while ((byteCount = decoderStream.Read(buf, 0, buf.Length)) > 0) + ms.Write(buf, 0, byteCount); + + BufferPool.Release(buf); + + decoderStream.Dispose(); + return ms.ToArray(); + } +#else + return streamToDecode.ToArray(canBeLarger: false); +#endif + } + +#endregion + +#region Streaming Fragments Support + + protected void BeginReceiveStreamFragments() + { +#if !BESTHTTP_DISABLE_CACHING + if (!baseRequest.DisableCache && baseRequest.UseStreaming) + { + // If caching is enabled and the response not from cache and it's cacheble we will cache the downloaded data. + if (!IsFromCache && HTTPCacheService.IsCacheble(baseRequest.CurrentUri, baseRequest.MethodType, this)) + cacheStream = HTTPCacheService.PrepareStreamed(baseRequest.CurrentUri, this); + } +#endif + allFragmentSize = 0; + } + + /// + /// Add data to the fragments list. + /// + /// The buffer to be added. + /// The position where we start copy the data. + /// How many data we want to copy. + protected void FeedStreamFragment(byte[] buffer, int pos, int length) + { + if (buffer == null || length == 0) + return; + + // If reading from cache, we don't want to read too much data to memory. So we will wait until the loaded fragment processed. +#if !UNITY_WEBGL || UNITY_EDITOR +#if CSHARP_7_3_OR_NEWER + SpinWait spinWait = new SpinWait(); +#endif + + while (!this.baseRequest.IsCancellationRequested && + this.baseRequest.State == HTTPRequestStates.Processing && + baseRequest.UseStreaming && + FragmentQueueIsFull()) + { + VerboseLogging("WaitWhileFragmentQueueIsFull"); + +#if CSHARP_7_3_OR_NEWER + spinWait.SpinOnce(); +#elif !NETFX_CORE + System.Threading.Thread.Sleep(1); +#endif + } +#endif + + if (fragmentBuffer == null) + { + fragmentBuffer = BufferPool.Get(baseRequest.StreamFragmentSize, true); + fragmentBufferDataLength = 0; + } + + if (fragmentBufferDataLength + length <= fragmentBuffer.Length) + { + Array.Copy(buffer, pos, fragmentBuffer, fragmentBufferDataLength, length); + fragmentBufferDataLength += length; + + if (fragmentBufferDataLength == fragmentBuffer.Length || baseRequest.StreamChunksImmediately) + { + AddStreamedFragment(fragmentBuffer, fragmentBufferDataLength); + fragmentBuffer = null; + fragmentBufferDataLength = 0; + } + } + else + { + int remaining = fragmentBuffer.Length - fragmentBufferDataLength; + + FeedStreamFragment(buffer, pos, remaining); + FeedStreamFragment(buffer, pos + remaining, length - remaining); + } + } + + protected void FlushRemainingFragmentBuffer() + { + if (fragmentBuffer != null) + { + AddStreamedFragment(fragmentBuffer, fragmentBufferDataLength); + fragmentBuffer = null; + fragmentBufferDataLength = 0; + } + +#if !BESTHTTP_DISABLE_CACHING + if (cacheStream != null) + { + cacheStream.Dispose(); + cacheStream = null; + + HTTPCacheService.SetBodyLength(baseRequest.CurrentUri, allFragmentSize); + } +#endif + } + +#if NET_STANDARD_2_0 || NETFX_CORE + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + protected void AddStreamedFragment(byte[] buffer, int bufferLength) + { +#if !BESTHTTP_DISABLE_CACHING + if (!IsCacheOnly) +#endif + { + if (this.baseRequest.UseStreaming && buffer != null && bufferLength > 0) + { + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this.baseRequest, buffer, bufferLength)); + Interlocked.Increment(ref this.UnprocessedFragments); + } + } + + if (HTTPManager.Logger.Level == Logger.Loglevels.All && buffer != null) + VerboseLogging(string.Format("AddStreamedFragment buffer length: {0:N0} UnprocessedFragments: {1:N0}", bufferLength, Interlocked.Read(ref this.UnprocessedFragments))); + +#if !BESTHTTP_DISABLE_CACHING + if (cacheStream != null) + { + cacheStream.Write(buffer, 0, bufferLength); + allFragmentSize += bufferLength; + } +#endif + } + +#if NET_STANDARD_2_0 || NETFX_CORE + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + private bool FragmentQueueIsFull() + { +#if !UNITY_WEBGL || UNITY_EDITOR + long unprocessedFragments = Interlocked.Read(ref UnprocessedFragments); + + bool result = unprocessedFragments >= baseRequest.MaxFragmentQueueLength; + + if (result && HTTPManager.Logger.Level == Logger.Loglevels.All) + VerboseLogging(string.Format("FragmentQueueIsFull - {0} / {1}", unprocessedFragments, baseRequest.MaxFragmentQueueLength)); + + return result; +#else + return false; +#endif + } + +#endregion + + void VerboseLogging(string str) + { + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("HTTPResponse", str, this.Context, this.baseRequest.Context); + } + + /// + /// IDisposable implementation. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + // Release resources in case we are using ReadOnlyBufferedStream, it will not close its inner stream. + // Otherwise, closing the (inner) Stream is the connection's responsibility + if (Stream != null && Stream is ReadOnlyBufferedStream) + (Stream as IDisposable).Dispose(); + Stream = null; + +#if !BESTHTTP_DISABLE_CACHING + if (cacheStream != null) + { + cacheStream.Dispose(); + cacheStream = null; + } +#endif + } + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPResponse.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPResponse.cs.meta new file mode 100644 index 000000000..7792ad90e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPResponse.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 555ceb051cbef0648b81ad42a853d672 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPUpdateDelegator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPUpdateDelegator.cs new file mode 100644 index 000000000..8285fc328 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPUpdateDelegator.cs @@ -0,0 +1,367 @@ +using System; +using System.Threading; + +using BestHTTP.PlatformSupport.Threading; + +using UnityEngine; + +#if NETFX_CORE + using System.Threading.Tasks; +#endif + +namespace BestHTTP +{ + /// + /// Threading mode the plugin will use to call HTTPManager.OnUpdate(). + /// + public enum ThreadingMode : int + { + /// + /// HTTPManager.OnUpdate() is called from the HTTPUpdateDelegator's Update functions (Unity's main thread). + /// + UnityUpdate, + + /// + /// The plugin starts a dedicated thread to call HTTPManager.OnUpdate() periodically. + /// + Threaded, + + /// + /// HTTPManager.OnUpdate() will not be called automatically. + /// + None + } + + /// + /// Will route some U3D calls to the HTTPManager. + /// + [ExecuteInEditMode] + [BestHTTP.PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstructionAttribute] + public sealed class HTTPUpdateDelegator : MonoBehaviour + { + #region Public Properties + + /// + /// The singleton instance of the HTTPUpdateDelegator + /// + public static HTTPUpdateDelegator Instance { get { return CheckInstance(); } } + private volatile static HTTPUpdateDelegator instance; + + /// + /// True, if the Instance property should hold a valid value. + /// + public static bool IsCreated { get; private set; } + + /// + /// It's true if the dispatch thread running. + /// + public static bool IsThreadRunning { get; private set; } + + /// + /// The current threading mode the plugin is in. + /// + public ThreadingMode CurrentThreadingMode { get { return _currentThreadingMode; } set { SetThreadingMode(value); } } + private ThreadingMode _currentThreadingMode = ThreadingMode.UnityUpdate; + + /// + /// How much time the plugin should wait between two update call. Its default value 100 ms. + /// + public static int ThreadFrequencyInMS { get; set; } + + /// + /// Called in the OnApplicationQuit function. If this function returns False, the plugin will not start to + /// shut down itself. + /// + public static System.Func OnBeforeApplicationQuit; + + /// + /// Called when the Unity application's foreground state changed. + /// + public static System.Action OnApplicationForegroundStateChanged; + + #endregion + + private static bool isSetupCalled; + private int isHTTPManagerOnUpdateRunning; + private AutoResetEvent pingEvent = new AutoResetEvent(false); + private int updateThreadCount = 0; + +#if UNITY_EDITOR + /// + /// Called after scene loaded to support Configurable Enter Play Mode (https://docs.unity3d.com/2019.3/Documentation/Manual/ConfigurableEnterPlayMode.html) + /// +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] +#endif + static void ResetSetup() + { + isSetupCalled = false; + instance?.SetThreadingMode(ThreadingMode.UnityUpdate); + + HTTPManager.Logger.Information("HTTPUpdateDelegator", "Reset called!"); + } +#endif + + static HTTPUpdateDelegator() + { + ThreadFrequencyInMS = 100; + } + + /// + /// Will create the HTTPUpdateDelegator instance and set it up. + /// + public static HTTPUpdateDelegator CheckInstance() + { + try + { + if (!IsCreated) + { + GameObject go = GameObject.Find("HTTP Update Delegator"); + + if (go != null) + instance = go.GetComponent(); + + if (instance == null) + { + go = new GameObject("HTTP Update Delegator"); + go.hideFlags = HideFlags.HideAndDontSave; + + instance = go.AddComponent(); + } + IsCreated = true; + +#if UNITY_EDITOR + if (!UnityEditor.EditorApplication.isPlaying) + { + UnityEditor.EditorApplication.update -= instance.Update; + UnityEditor.EditorApplication.update += instance.Update; + } + +#if UNITY_2017_2_OR_NEWER + UnityEditor.EditorApplication.playModeStateChanged -= instance.OnPlayModeStateChanged; + UnityEditor.EditorApplication.playModeStateChanged += instance.OnPlayModeStateChanged; +#else + UnityEditor.EditorApplication.playmodeStateChanged -= instance.OnPlayModeStateChanged; + UnityEditor.EditorApplication.playmodeStateChanged += instance.OnPlayModeStateChanged; +#endif +#endif + + // https://docs.unity3d.com/ScriptReference/Application-wantsToQuit.html + Application.wantsToQuit -= UnityApplication_WantsToQuit; + Application.wantsToQuit += UnityApplication_WantsToQuit; + + HTTPManager.Logger.Information("HTTPUpdateDelegator", "Instance Created!"); + } + } + catch + { + HTTPManager.Logger.Error("HTTPUpdateDelegator", "Please call the BestHTTP.HTTPManager.Setup() from one of Unity's event(eg. awake, start) before you send any request!"); + } + + return instance; + } + + private void Setup() + { + if (isSetupCalled) + return; + + using (var _ = new Unity.Profiling.ProfilerMarker(nameof(HTTPUpdateDelegator.Setup)).Auto()) + { + isSetupCalled = true; + + HTTPManager.Logger.Information("HTTPUpdateDelegator", $"Setup called Threading Mode: {this._currentThreadingMode}"); + + HTTPManager.Setup(); + + SetThreadingMode(this._currentThreadingMode); + + // Unity doesn't tolerate well if the DontDestroyOnLoad called when purely in editor mode. So, we will set the flag + // only when we are playing, or not in the editor. + if (!Application.isEditor || Application.isPlaying) + GameObject.DontDestroyOnLoad(this.gameObject); + + HTTPManager.Logger.Information("HTTPUpdateDelegator", "Setup done!"); + } + } + + /// + /// Set directly the threading mode to use. + /// + public void SetThreadingMode(ThreadingMode mode) + { + if (_currentThreadingMode == mode) + return; + + HTTPManager.Logger.Information("HTTPUpdateDelegator", $"SetThreadingMode({mode}, {isSetupCalled})"); + + _currentThreadingMode = mode; + + if (!isSetupCalled) + Setup(); + + switch (_currentThreadingMode) + { + case ThreadingMode.UnityUpdate: + case ThreadingMode.None: + IsThreadRunning = false; + PingUpdateThread(); + break; + + case ThreadingMode.Threaded: +#if !UNITY_WEBGL || UNITY_EDITOR + ThreadedRunner.RunLongLiving(ThreadFunc); +#else + HTTPManager.Logger.Warning(nameof(HTTPUpdateDelegator), "Threading mode set to ThreadingMode.Threaded, but threads aren't supported under WebGL!"); +#endif + break; + } + } + + /// + /// Swaps threading mode between Unity's Update function or a distinct thread. + /// + public void SwapThreadingMode() => SetThreadingMode(_currentThreadingMode == ThreadingMode.Threaded ? ThreadingMode.UnityUpdate : ThreadingMode.Threaded); + + /// + /// Pings the update thread to call HTTPManager.OnUpdate immediately. + /// + /// Works only when the current threading mode is Threaded! + public void PingUpdateThread() => pingEvent.Set(); + + void ThreadFunc() + { + HTTPManager.Logger.Information("HTTPUpdateDelegator", "Update Thread Started"); + + ThreadedRunner.SetThreadName("BestHTTP.Update Thread"); + + try + { + if (Interlocked.Increment(ref updateThreadCount) > 1) + { + HTTPManager.Logger.Information("HTTPUpdateDelegator", "An update thread already started."); + return; + } + + // Threading mode might be already changed, so set IsThreadRunning to IsThreaded's value. + IsThreadRunning = CurrentThreadingMode == ThreadingMode.Threaded; + while (IsThreadRunning) + { + CallOnUpdate(); + + pingEvent.WaitOne(ThreadFrequencyInMS); + } + } + finally + { + Interlocked.Decrement(ref updateThreadCount); + HTTPManager.Logger.Information("HTTPUpdateDelegator", "Update Thread Ended"); + } + } + + void Update() + { + if (!isSetupCalled) + Setup(); + + if (CurrentThreadingMode == ThreadingMode.UnityUpdate) + CallOnUpdate(); + } + + private void CallOnUpdate() + { + // Prevent overlapping call of OnUpdate from unity's main thread and a separate thread + if (Interlocked.CompareExchange(ref isHTTPManagerOnUpdateRunning, 1, 0) == 0) + { + try + { + HTTPManager.OnUpdate(); + } + finally + { + Interlocked.Exchange(ref isHTTPManagerOnUpdateRunning, 0); + } + } + } + +#if UNITY_EDITOR +#if UNITY_2017_2_OR_NEWER + void OnPlayModeStateChanged(UnityEditor.PlayModeStateChange playMode) + { + if (playMode == UnityEditor.PlayModeStateChange.EnteredPlayMode) + { + UnityEditor.EditorApplication.update -= Update; + } + else if (playMode == UnityEditor.PlayModeStateChange.EnteredEditMode) + { + UnityEditor.EditorApplication.update -= Update; + UnityEditor.EditorApplication.update += Update; + + HTTPUpdateDelegator.ResetSetup(); + HTTPManager.ResetSetup(); + } + } +#else + void OnPlayModeStateChanged() + { + if (UnityEditor.EditorApplication.isPlaying) + UnityEditor.EditorApplication.update -= Update; + else if (!UnityEditor.EditorApplication.isPlaying) + UnityEditor.EditorApplication.update += Update; + } + +#endif +#endif + + void OnDisable() + { + HTTPManager.Logger.Information("HTTPUpdateDelegator", "OnDisable Called!"); + +#if UNITY_EDITOR + if (UnityEditor.EditorApplication.isPlaying) +#endif + UnityApplication_WantsToQuit(); + } + + void OnApplicationPause(bool isPaused) + { + HTTPManager.Logger.Information("HTTPUpdateDelegator", "OnApplicationPause isPaused: " + isPaused); + + if (HTTPUpdateDelegator.OnApplicationForegroundStateChanged != null) + HTTPUpdateDelegator.OnApplicationForegroundStateChanged(isPaused); + } + + private static bool UnityApplication_WantsToQuit() + { + HTTPManager.Logger.Information("HTTPUpdateDelegator", "UnityApplication_WantsToQuit Called!"); + + if (OnBeforeApplicationQuit != null) + { + try + { + if (!OnBeforeApplicationQuit()) + { + HTTPManager.Logger.Information("HTTPUpdateDelegator", "OnBeforeApplicationQuit call returned false, postponing plugin and application shutdown."); + return false; + } + } + catch (System.Exception ex) + { + HTTPManager.Logger.Exception("HTTPUpdateDelegator", string.Empty, ex); + } + } + + IsThreadRunning = false; + Instance.PingUpdateThread(); + + if (!IsCreated) + return true; + + IsCreated = false; + + HTTPManager.OnQuit(); + + return true; + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPUpdateDelegator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPUpdateDelegator.cs.meta new file mode 100644 index 000000000..0ea19214c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/HTTPUpdateDelegator.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 232e901bb55e034408a6e54c43880ed6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON.meta new file mode 100644 index 000000000..e2b1bb5d5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e64190d0765d2dc4597de64694e99b53 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/JSON.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/JSON.cs new file mode 100644 index 000000000..e0898cba3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/JSON.cs @@ -0,0 +1,492 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Text; + +using BestHTTP.PlatformSupport.Text; + +namespace BestHTTP.JSON +{ + /// + /// Based on the download from http://techblog.procurios.nl/k/news/view/14605/14863/how-do-i-write-my-own-parser-%28for-json%29.html + /// This class encodes and decodes JSON strings. + /// Spec. details, see http://www.json.org/ + /// + /// JSON uses Arrays and Objects. These correspond here to the datatypes List and Dictionary. + /// All numbers are parsed to doubles. + /// + public class Json + { + private const int TOKEN_NONE = 0; + private const int TOKEN_CURLY_OPEN = 1; + private const int TOKEN_CURLY_CLOSE = 2; + private const int TOKEN_SQUARED_OPEN = 3; + private const int TOKEN_SQUARED_CLOSE = 4; + private const int TOKEN_COLON = 5; + private const int TOKEN_COMMA = 6; + private const int TOKEN_STRING = 7; + private const int TOKEN_NUMBER = 8; + private const int TOKEN_TRUE = 9; + private const int TOKEN_FALSE = 10; + private const int TOKEN_NULL = 11; + + private const int BUILDER_CAPACITY = 2000; + + /// + /// Parses the string json into a value + /// + /// A JSON string. + /// A List, a Dictionary, a double, a string, null, true, or false + public static object Decode(string json) + { + bool success = true; + + return Decode(json, ref success); + } + + /// + /// Parses the string json into a value; and fills 'success' with the successfullness of the parse. + /// + /// A JSON string. + /// Successful parse? + /// A List, a Dictionary, a double, a string, null, true, or false + public static object Decode(string json, ref bool success) + { + success = true; + if (json != null) { + char[] charArray = json.ToCharArray(); + int index = 0; + object value = ParseValue(charArray, ref index, ref success); + return value; + } else { + return null; + } + } + + /// + /// Converts a Dictionary / List object into a JSON string + /// + /// A Dictionary / List + /// A JSON encoded string, or null if object 'json' is not serializable + public static string Encode(object json) + { + StringBuilder builder = StringBuilderPool.Get(BUILDER_CAPACITY); //new StringBuilder(BUILDER_CAPACITY); + + bool success = SerializeValue(json, builder); + + return (success ? StringBuilderPool.ReleaseAndGrab(builder) : null); + } + + protected static Dictionary ParseObject(char[] json, ref int index, ref bool success) + { + Dictionary table = new Dictionary(); + int token; + + // { + NextToken(json, ref index); + + bool done = false; + while (!done) { + token = LookAhead(json, index); + if (token == Json.TOKEN_NONE) { + success = false; + return null; + } else if (token == Json.TOKEN_COMMA) { + NextToken(json, ref index); + } else if (token == Json.TOKEN_CURLY_CLOSE) { + NextToken(json, ref index); + return table; + } else { + + // name + string name = ParseString(json, ref index, ref success); + if (!success) { + success = false; + return null; + } + + // : + token = NextToken(json, ref index); + if (token != Json.TOKEN_COLON) { + success = false; + return null; + } + + // value + object value = ParseValue(json, ref index, ref success); + if (!success) { + success = false; + return null; + } + + table[name] = value; + } + } + + return table; + } + + protected static List ParseArray(char[] json, ref int index, ref bool success) + { + List array = new List(); + + // [ + NextToken(json, ref index); + + bool done = false; + while (!done) { + int token = LookAhead(json, index); + if (token == Json.TOKEN_NONE) { + success = false; + return null; + } else if (token == Json.TOKEN_COMMA) { + NextToken(json, ref index); + } else if (token == Json.TOKEN_SQUARED_CLOSE) { + NextToken(json, ref index); + break; + } else { + object value = ParseValue(json, ref index, ref success); + if (!success) { + return null; + } + + array.Add(value); + } + } + + return array; + } + + protected static object ParseValue(char[] json, ref int index, ref bool success) + { + switch (LookAhead(json, index)) { + case Json.TOKEN_STRING: + return ParseString(json, ref index, ref success); + case Json.TOKEN_NUMBER: + return ParseNumber(json, ref index, ref success); + case Json.TOKEN_CURLY_OPEN: + return ParseObject(json, ref index, ref success); + case Json.TOKEN_SQUARED_OPEN: + return ParseArray(json, ref index, ref success); + case Json.TOKEN_TRUE: + NextToken(json, ref index); + return true; + case Json.TOKEN_FALSE: + NextToken(json, ref index); + return false; + case Json.TOKEN_NULL: + NextToken(json, ref index); + return null; + case Json.TOKEN_NONE: + break; + } + + success = false; + return null; + } + + protected static string ParseString(char[] json, ref int index, ref bool success) + { + StringBuilder s = StringBuilderPool.Get(BUILDER_CAPACITY); //new StringBuilder(BUILDER_CAPACITY); + + char c; + + EatWhitespace(json, ref index); + + // " + c = json[index++]; + + bool complete = false; + while (!complete) { + + if (index == json.Length) { + break; + } + + c = json[index++]; + if (c == '"') { + complete = true; + break; + } else if (c == '\\') { + + if (index == json.Length) { + break; + } + c = json[index++]; + if (c == '"') { + s.Append('"'); + } else if (c == '\\') { + s.Append('\\'); + } else if (c == '/') { + s.Append('/'); + } else if (c == 'b') { + s.Append('\b'); + } else if (c == 'f') { + s.Append('\f'); + } else if (c == 'n') { + s.Append('\n'); + } else if (c == 'r') { + s.Append('\r'); + } else if (c == 't') { + s.Append('\t'); + } else if (c == 'u') { + int remainingLength = json.Length - index; + if (remainingLength >= 4) { + // parse the 32 bit hex into an integer codepoint + uint codePoint; + if (!(success = UInt32.TryParse(new string(json, index, 4), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out codePoint))) { + return ""; + } + // convert the integer codepoint to a unicode char and add to string + s.Append(Char.ConvertFromUtf32((int)codePoint)); + // skip 4 chars + index += 4; + } else { + break; + } + } + + } else { + s.Append(c); + } + + } + + if (!complete) { + success = false; + return null; + } + + return StringBuilderPool.ReleaseAndGrab(s); + } + + protected static double ParseNumber(char[] json, ref int index, ref bool success) + { + EatWhitespace(json, ref index); + + int lastIndex = GetLastIndexOfNumber(json, index); + int charLength = (lastIndex - index) + 1; + + double number; + success = Double.TryParse(new string(json, index, charLength), NumberStyles.Any, CultureInfo.InvariantCulture, out number); + + index = lastIndex + 1; + return number; + } + + protected static int GetLastIndexOfNumber(char[] json, int index) + { + int lastIndex; + + for (lastIndex = index; lastIndex < json.Length; lastIndex++) { + if ("0123456789+-.eE".IndexOf(json[lastIndex]) == -1) { + break; + } + } + return lastIndex - 1; + } + + protected static void EatWhitespace(char[] json, ref int index) + { + for (; index < json.Length; index++) { + if (" \t\n\r".IndexOf(json[index]) == -1) { + break; + } + } + } + + protected static int LookAhead(char[] json, int index) + { + int saveIndex = index; + return NextToken(json, ref saveIndex); + } + + protected static int NextToken(char[] json, ref int index) + { + EatWhitespace(json, ref index); + + if (index == json.Length) { + return Json.TOKEN_NONE; + } + + char c = json[index]; + index++; + switch (c) { + case '{': + return Json.TOKEN_CURLY_OPEN; + case '}': + return Json.TOKEN_CURLY_CLOSE; + case '[': + return Json.TOKEN_SQUARED_OPEN; + case ']': + return Json.TOKEN_SQUARED_CLOSE; + case ',': + return Json.TOKEN_COMMA; + case '"': + return Json.TOKEN_STRING; + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case '-': + return Json.TOKEN_NUMBER; + case ':': + return Json.TOKEN_COLON; + } + index--; + + int remainingLength = json.Length - index; + + // false + if (remainingLength >= 5) { + if (json[index] == 'f' && + json[index + 1] == 'a' && + json[index + 2] == 'l' && + json[index + 3] == 's' && + json[index + 4] == 'e') { + index += 5; + return Json.TOKEN_FALSE; + } + } + + // true + if (remainingLength >= 4) { + if (json[index] == 't' && + json[index + 1] == 'r' && + json[index + 2] == 'u' && + json[index + 3] == 'e') { + index += 4; + return Json.TOKEN_TRUE; + } + } + + // null + if (remainingLength >= 4) { + if (json[index] == 'n' && + json[index + 1] == 'u' && + json[index + 2] == 'l' && + json[index + 3] == 'l') { + index += 4; + return Json.TOKEN_NULL; + } + } + + return Json.TOKEN_NONE; + } + + protected static bool SerializeValue(object value, StringBuilder builder) + { + bool success = true; + + if (value is string) { + success = SerializeString((string)value, builder); + } else if (value is IDictionary) { + success = SerializeObject((IDictionary)value, builder); + } else if (value is IList) { + success = SerializeArray(value as IList, builder); + } else if ((value is Boolean) && ((Boolean)value == true)) { + builder.Append("true"); + } else if ((value is Boolean) && ((Boolean)value == false)) { + builder.Append("false"); + } else if (value is ValueType) { + // thanks to ritchie for pointing out ValueType to me + success = SerializeNumber(Convert.ToDouble(value), builder); + } else if (value == null) { + builder.Append("null"); + } else { + success = false; + } + return success; + } + + protected static bool SerializeObject(IDictionary anObject, StringBuilder builder) + { + builder.Append("{"); + + IDictionaryEnumerator e = anObject.GetEnumerator(); + bool first = true; + while (e.MoveNext()) { + string key = e.Key.ToString(); + object value = e.Value; + + if (!first) { + builder.Append(", "); + } + + SerializeString(key, builder); + builder.Append(":"); + if (!SerializeValue(value, builder)) { + return false; + } + + first = false; + } + + builder.Append("}"); + return true; + } + + protected static bool SerializeArray(IList anArray, StringBuilder builder) + { + builder.Append("["); + + bool first = true; + for (int i = 0; i < anArray.Count; i++) { + object value = anArray[i]; + + if (!first) { + builder.Append(", "); + } + + if (!SerializeValue(value, builder)) { + return false; + } + + first = false; + } + + builder.Append("]"); + return true; + } + + protected static bool SerializeString(string aString, StringBuilder builder) + { + builder.Append("\""); + + char[] charArray = aString.ToCharArray(); + for (int i = 0; i < charArray.Length; i++) { + char c = charArray[i]; + if (c == '"') { + builder.Append("\\\""); + } else if (c == '\\') { + builder.Append("\\\\"); + } else if (c == '\b') { + builder.Append("\\b"); + } else if (c == '\f') { + builder.Append("\\f"); + } else if (c == '\n') { + builder.Append("\\n"); + } else if (c == '\r') { + builder.Append("\\r"); + } else if (c == '\t') { + builder.Append("\\t"); + } else { + int codepoint = Convert.ToInt32(c); + if ((codepoint >= 32) && (codepoint <= 126)) { + builder.Append(c); + } else { + builder.Append("\\u" + Convert.ToString(codepoint, 16).PadLeft(4, '0')); + } + } + } + + builder.Append("\""); + return true; + } + + protected static bool SerializeNumber(double number, StringBuilder builder) + { + builder.Append(Convert.ToString(number, CultureInfo.InvariantCulture)); + return true; + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/JSON.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/JSON.cs.meta new file mode 100644 index 000000000..ae5517896 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/JSON.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 60c48240ba404f04db57f061215d0f36 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson.meta new file mode 100644 index 000000000..d58caae4d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 43eb996e23211aa40b1400341038fd7c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/IJsonWrapper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/IJsonWrapper.cs new file mode 100644 index 000000000..103f3c06c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/IJsonWrapper.cs @@ -0,0 +1,73 @@ +#region Header +/** + * IJsonWrapper.cs + * Interface that represents a type capable of handling all kinds of JSON + * data. This is mainly used when mapping objects through JsonMapper, and + * it's implemented by JsonData. + * + * The authors disclaim copyright to this source code. For more details, see + * the COPYING file included with this distribution. + **/ +#endregion + + +using System.Collections; +using System.Collections.Specialized; + + +namespace BestHTTP.JSON.LitJson +{ + public enum JsonType + { + None, + + Object, + Array, + String, + Int, + Long, + Double, + Boolean + } + + public interface IOrderedDictionary : IDictionary + { + new IDictionaryEnumerator GetEnumerator(); + void Insert(int index, object key, object value); + void RemoveAt(int index); + + object this[int index] + { + get; + set; + } + } + + public interface IJsonWrapper : IList, IOrderedDictionary + { + bool IsArray { get; } + bool IsBoolean { get; } + bool IsDouble { get; } + bool IsInt { get; } + bool IsLong { get; } + bool IsObject { get; } + bool IsString { get; } + + bool GetBoolean (); + double GetDouble (); + int GetInt (); + JsonType GetJsonType (); + long GetLong (); + string GetString (); + + void SetBoolean (bool val); + void SetDouble (double val); + void SetInt (int val); + void SetJsonType (JsonType type); + void SetLong (long val); + void SetString (string val); + + string ToJson (); + void ToJson (JsonWriter writer); + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/IJsonWrapper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/IJsonWrapper.cs.meta new file mode 100644 index 000000000..9825acfb3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/IJsonWrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e3ba1bc2256c0f14f85c78b1b3cf1b84 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonData.cs new file mode 100644 index 000000000..40a0d37d1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonData.cs @@ -0,0 +1,1059 @@ +#region Header +/** + * JsonData.cs + * Generic type to hold JSON data (objects, arrays, and so on). This is + * the default type returned by JsonMapper.ToObject(). + * + * The authors disclaim copyright to this source code. For more details, see + * the COPYING file included with this distribution. + **/ +#endregion + + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.IO; + + +namespace BestHTTP.JSON.LitJson +{ + public sealed class JsonData : IJsonWrapper, IEquatable + { + #region Fields + private IList inst_array; + private bool inst_boolean; + private double inst_double; + private int inst_int; + private long inst_long; + private IDictionary inst_object; + private string inst_string; + private string json; + private JsonType type; + + // Used to implement the IOrderedDictionary interface + private IList> object_list; + #endregion + + + #region Properties + public int Count { + get { return EnsureCollection ().Count; } + } + + public bool IsArray { + get { return type == JsonType.Array; } + } + + public bool IsBoolean { + get { return type == JsonType.Boolean; } + } + + public bool IsDouble { + get { return type == JsonType.Double; } + } + + public bool IsInt { + get { return type == JsonType.Int; } + } + + public bool IsLong { + get { return type == JsonType.Long; } + } + + public bool IsObject { + get { return type == JsonType.Object; } + } + + public bool IsString { + get { return type == JsonType.String; } + } + + public ICollection Keys { + get { EnsureDictionary (); return inst_object.Keys; } + } + + /// + /// Determines whether the json contains an element that has the specified key. + /// + /// The key to locate in the json. + /// true if the json contains an element that has the specified key; otherwise, false. + public Boolean ContainsKey(String key) { + EnsureDictionary(); + return this.inst_object.Keys.Contains(key); + } + #endregion + + + #region ICollection Properties + int ICollection.Count { + get { + return Count; + } + } + + bool ICollection.IsSynchronized { + get { + return EnsureCollection ().IsSynchronized; + } + } + + object ICollection.SyncRoot { + get { + return EnsureCollection ().SyncRoot; + } + } + #endregion + + + #region IDictionary Properties + bool IDictionary.IsFixedSize { + get { + return EnsureDictionary ().IsFixedSize; + } + } + + bool IDictionary.IsReadOnly { + get { + return EnsureDictionary ().IsReadOnly; + } + } + + ICollection IDictionary.Keys { + get { + EnsureDictionary (); + IList keys = new List (); + + foreach (KeyValuePair entry in + object_list) { + keys.Add (entry.Key); + } + + return (ICollection) keys; + } + } + + ICollection IDictionary.Values { + get { + EnsureDictionary (); + IList values = new List (); + + foreach (KeyValuePair entry in + object_list) { + values.Add (entry.Value); + } + + return (ICollection) values; + } + } + #endregion + + + + #region IJsonWrapper Properties + bool IJsonWrapper.IsArray { + get { return IsArray; } + } + + bool IJsonWrapper.IsBoolean { + get { return IsBoolean; } + } + + bool IJsonWrapper.IsDouble { + get { return IsDouble; } + } + + bool IJsonWrapper.IsInt { + get { return IsInt; } + } + + bool IJsonWrapper.IsLong { + get { return IsLong; } + } + + bool IJsonWrapper.IsObject { + get { return IsObject; } + } + + bool IJsonWrapper.IsString { + get { return IsString; } + } + #endregion + + + #region IList Properties + bool IList.IsFixedSize { + get { + return EnsureList ().IsFixedSize; + } + } + + bool IList.IsReadOnly { + get { + return EnsureList ().IsReadOnly; + } + } + #endregion + + + #region IDictionary Indexer + object IDictionary.this[object key] { + get { + return EnsureDictionary ()[key]; + } + + set { + if (! (key is String)) + throw new ArgumentException ( + "The key has to be a string"); + + JsonData data = ToJsonData (value); + + this[(string) key] = data; + } + } + #endregion + + + #region IOrderedDictionary Indexer + object IOrderedDictionary.this[int idx] { + get { + EnsureDictionary (); + return object_list[idx].Value; + } + + set { + EnsureDictionary (); + JsonData data = ToJsonData (value); + + KeyValuePair old_entry = object_list[idx]; + + inst_object[old_entry.Key] = data; + + KeyValuePair entry = + new KeyValuePair (old_entry.Key, data); + + object_list[idx] = entry; + } + } + #endregion + + + #region IList Indexer + object IList.this[int index] { + get { + return EnsureList ()[index]; + } + + set { + EnsureList (); + JsonData data = ToJsonData (value); + + this[index] = data; + } + } + #endregion + + + #region Public Indexers + public JsonData this[string prop_name] { + get { + EnsureDictionary (); + return inst_object[prop_name]; + } + + set { + EnsureDictionary (); + + KeyValuePair entry = + new KeyValuePair (prop_name, value); + + if (inst_object.ContainsKey (prop_name)) { + for (int i = 0; i < object_list.Count; i++) { + if (object_list[i].Key == prop_name) { + object_list[i] = entry; + break; + } + } + } else + object_list.Add (entry); + + inst_object[prop_name] = value; + + json = null; + } + } + + public JsonData this[int index] { + get { + EnsureCollection (); + + if (type == JsonType.Array) + return inst_array[index]; + + return object_list[index].Value; + } + + set { + EnsureCollection (); + + if (type == JsonType.Array) + inst_array[index] = value; + else { + KeyValuePair entry = object_list[index]; + KeyValuePair new_entry = + new KeyValuePair (entry.Key, value); + + object_list[index] = new_entry; + inst_object[entry.Key] = value; + } + + json = null; + } + } + #endregion + + + #region Constructors + public JsonData () + { + } + + public JsonData (bool boolean) + { + type = JsonType.Boolean; + inst_boolean = boolean; + } + + public JsonData (double number) + { + type = JsonType.Double; + inst_double = number; + } + + public JsonData (int number) + { + type = JsonType.Int; + inst_int = number; + } + + public JsonData (long number) + { + type = JsonType.Long; + inst_long = number; + } + + public JsonData (object obj) + { + if (obj is Boolean) { + type = JsonType.Boolean; + inst_boolean = (bool) obj; + return; + } + + if (obj is Double) { + type = JsonType.Double; + inst_double = (double) obj; + return; + } + + if (obj is Int32) { + type = JsonType.Int; + inst_int = (int) obj; + return; + } + + if (obj is Int64) { + type = JsonType.Long; + inst_long = (long) obj; + return; + } + + if (obj is String) { + type = JsonType.String; + inst_string = (string) obj; + return; + } + + throw new ArgumentException ( + "Unable to wrap the given object with JsonData"); + } + + public JsonData (string str) + { + type = JsonType.String; + inst_string = str; + } + #endregion + + + #region Implicit Conversions + public static implicit operator JsonData (Boolean data) + { + return new JsonData (data); + } + + public static implicit operator JsonData (Double data) + { + return new JsonData (data); + } + + public static implicit operator JsonData (Int32 data) + { + return new JsonData (data); + } + + public static implicit operator JsonData (Int64 data) + { + return new JsonData (data); + } + + public static implicit operator JsonData (String data) + { + return new JsonData (data); + } + #endregion + + + #region Explicit Conversions + public static explicit operator Boolean (JsonData data) + { + if (data.type != JsonType.Boolean) + throw new InvalidCastException ( + "Instance of JsonData doesn't hold a double"); + + return data.inst_boolean; + } + + public static explicit operator Double (JsonData data) + { + if (data.type != JsonType.Double) + throw new InvalidCastException ( + "Instance of JsonData doesn't hold a double"); + + return data.inst_double; + } + + public static explicit operator Int32 (JsonData data) + { + if (data.type != JsonType.Int && data.type != JsonType.Long) + { + throw new InvalidCastException ( + "Instance of JsonData doesn't hold an int"); + } + + // cast may truncate data... but that's up to the user to consider + return data.type == JsonType.Int ? data.inst_int : (int)data.inst_long; + } + + public static explicit operator Int64 (JsonData data) + { + if (data.type != JsonType.Long && data.type != JsonType.Int) + { + throw new InvalidCastException ( + "Instance of JsonData doesn't hold a long"); + } + + return data.type == JsonType.Long ? data.inst_long : data.inst_int; + } + + public static explicit operator String (JsonData data) + { + if (data.type != JsonType.String) + throw new InvalidCastException ( + "Instance of JsonData doesn't hold a string"); + + return data.inst_string; + } + #endregion + + + #region ICollection Methods + void ICollection.CopyTo (Array array, int index) + { + EnsureCollection ().CopyTo (array, index); + } + #endregion + + + #region IDictionary Methods + void IDictionary.Add (object key, object value) + { + JsonData data = ToJsonData (value); + + EnsureDictionary ().Add (key, data); + + KeyValuePair entry = + new KeyValuePair ((string) key, data); + object_list.Add (entry); + + json = null; + } + + void IDictionary.Clear () + { + EnsureDictionary ().Clear (); + object_list.Clear (); + json = null; + } + + bool IDictionary.Contains (object key) + { + return EnsureDictionary ().Contains (key); + } + + IDictionaryEnumerator IDictionary.GetEnumerator () + { + return ((IOrderedDictionary) this).GetEnumerator (); + } + + void IDictionary.Remove (object key) + { + EnsureDictionary ().Remove (key); + + for (int i = 0; i < object_list.Count; i++) { + if (object_list[i].Key == (string) key) { + object_list.RemoveAt (i); + break; + } + } + + json = null; + } + #endregion + + + #region IEnumerable Methods + IEnumerator IEnumerable.GetEnumerator () + { + return EnsureCollection ().GetEnumerator (); + } + #endregion + + + #region IJsonWrapper Methods + bool IJsonWrapper.GetBoolean () + { + if (type != JsonType.Boolean) + throw new InvalidOperationException ( + "JsonData instance doesn't hold a boolean"); + + return inst_boolean; + } + + double IJsonWrapper.GetDouble () + { + if (type != JsonType.Double) + throw new InvalidOperationException ( + "JsonData instance doesn't hold a double"); + + return inst_double; + } + + int IJsonWrapper.GetInt () + { + if (type != JsonType.Int) + throw new InvalidOperationException ( + "JsonData instance doesn't hold an int"); + + return inst_int; + } + + long IJsonWrapper.GetLong () + { + if (type != JsonType.Long) + throw new InvalidOperationException ( + "JsonData instance doesn't hold a long"); + + return inst_long; + } + + string IJsonWrapper.GetString () + { + if (type != JsonType.String) + throw new InvalidOperationException ( + "JsonData instance doesn't hold a string"); + + return inst_string; + } + + void IJsonWrapper.SetBoolean (bool val) + { + type = JsonType.Boolean; + inst_boolean = val; + json = null; + } + + void IJsonWrapper.SetDouble (double val) + { + type = JsonType.Double; + inst_double = val; + json = null; + } + + void IJsonWrapper.SetInt (int val) + { + type = JsonType.Int; + inst_int = val; + json = null; + } + + void IJsonWrapper.SetLong (long val) + { + type = JsonType.Long; + inst_long = val; + json = null; + } + + void IJsonWrapper.SetString (string val) + { + type = JsonType.String; + inst_string = val; + json = null; + } + + string IJsonWrapper.ToJson () + { + return ToJson (); + } + + void IJsonWrapper.ToJson (JsonWriter writer) + { + ToJson (writer); + } + #endregion + + + #region IList Methods + int IList.Add (object value) + { + return Add (value); + } + + void IList.Clear () + { + EnsureList ().Clear (); + json = null; + } + + bool IList.Contains (object value) + { + return EnsureList ().Contains (value); + } + + int IList.IndexOf (object value) + { + return EnsureList ().IndexOf (value); + } + + void IList.Insert (int index, object value) + { + EnsureList ().Insert (index, value); + json = null; + } + + void IList.Remove (object value) + { + EnsureList ().Remove (value); + json = null; + } + + void IList.RemoveAt (int index) + { + EnsureList ().RemoveAt (index); + json = null; + } + #endregion + + + #region IOrderedDictionary Methods + IDictionaryEnumerator IOrderedDictionary.GetEnumerator () + { + EnsureDictionary (); + + return new OrderedDictionaryEnumerator ( + object_list.GetEnumerator ()); + } + + void IOrderedDictionary.Insert (int idx, object key, object value) + { + string property = (string) key; + JsonData data = ToJsonData (value); + + this[property] = data; + + KeyValuePair entry = + new KeyValuePair (property, data); + + object_list.Insert (idx, entry); + } + + void IOrderedDictionary.RemoveAt (int idx) + { + EnsureDictionary (); + + inst_object.Remove (object_list[idx].Key); + object_list.RemoveAt (idx); + } + #endregion + + + #region Private Methods + private ICollection EnsureCollection () + { + if (type == JsonType.Array) + return (ICollection) inst_array; + + if (type == JsonType.Object) + return (ICollection) inst_object; + + throw new InvalidOperationException ( + "The JsonData instance has to be initialized first"); + } + + private IDictionary EnsureDictionary () + { + if (type == JsonType.Object) + return (IDictionary) inst_object; + + if (type != JsonType.None) + throw new InvalidOperationException ( + "Instance of JsonData is not a dictionary"); + + type = JsonType.Object; + inst_object = new Dictionary (); + object_list = new List> (); + + return (IDictionary) inst_object; + } + + private IList EnsureList () + { + if (type == JsonType.Array) + return (IList) inst_array; + + if (type != JsonType.None) + throw new InvalidOperationException ( + "Instance of JsonData is not a list"); + + type = JsonType.Array; + inst_array = new List (); + + return (IList) inst_array; + } + + private JsonData ToJsonData (object obj) + { + if (obj == null) + return null; + + if (obj is JsonData) + return (JsonData) obj; + + return new JsonData (obj); + } + + private static void WriteJson (IJsonWrapper obj, JsonWriter writer) + { + if (obj == null) { + writer.Write (null); + return; + } + + if (obj.IsString) { + writer.Write (obj.GetString ()); + return; + } + + if (obj.IsBoolean) { + writer.Write (obj.GetBoolean ()); + return; + } + + if (obj.IsDouble) { + writer.Write (obj.GetDouble ()); + return; + } + + if (obj.IsInt) { + writer.Write (obj.GetInt ()); + return; + } + + if (obj.IsLong) { + writer.Write (obj.GetLong ()); + return; + } + + if (obj.IsArray) { + writer.WriteArrayStart (); + foreach (object elem in (IList) obj) + WriteJson ((JsonData) elem, writer); + writer.WriteArrayEnd (); + + return; + } + + if (obj.IsObject) { + writer.WriteObjectStart (); + + foreach (DictionaryEntry entry in ((IDictionary) obj)) { + writer.WritePropertyName ((string) entry.Key); + WriteJson ((JsonData) entry.Value, writer); + } + writer.WriteObjectEnd (); + + return; + } + } + #endregion + + + public int Add (object value) + { + JsonData data = ToJsonData (value); + + json = null; + + return EnsureList ().Add (data); + } + + public bool Remove(object obj) + { + json = null; + if(IsObject) + { + JsonData value = null; + if (inst_object.TryGetValue((string)obj, out value)) + return inst_object.Remove((string)obj) && object_list.Remove(new KeyValuePair((string)obj, value)); + else + throw new KeyNotFoundException("The specified key was not found in the JsonData object."); + } + if(IsArray) + { + return inst_array.Remove(ToJsonData(obj)); + } + throw new InvalidOperationException ( + "Instance of JsonData is not an object or a list."); + } + + public void Clear () + { + if (IsObject) { + ((IDictionary) this).Clear (); + return; + } + + if (IsArray) { + ((IList) this).Clear (); + return; + } + } + + public bool Equals (JsonData x) + { + if (x == null) + return false; + + if (x.type != this.type) + { + // further check to see if this is a long to int comparison + if ((x.type != JsonType.Int && x.type != JsonType.Long) + || (this.type != JsonType.Int && this.type != JsonType.Long)) + { + return false; + } + } + + switch (this.type) { + case JsonType.None: + return true; + + case JsonType.Object: + return this.inst_object.Equals (x.inst_object); + + case JsonType.Array: + return this.inst_array.Equals (x.inst_array); + + case JsonType.String: + return this.inst_string.Equals (x.inst_string); + + case JsonType.Int: + { + if (x.IsLong) + { + if (x.inst_long < Int32.MinValue || x.inst_long > Int32.MaxValue) + return false; + return this.inst_int.Equals((int)x.inst_long); + } + return this.inst_int.Equals (x.inst_int); + } + + case JsonType.Long: + { + if (x.IsInt) + { + if (this.inst_long < Int32.MinValue || this.inst_long > Int32.MaxValue) + return false; + return x.inst_int.Equals((int)this.inst_long); + } + return this.inst_long.Equals (x.inst_long); + } + + case JsonType.Double: + return this.inst_double.Equals (x.inst_double); + + case JsonType.Boolean: + return this.inst_boolean.Equals (x.inst_boolean); + } + + return false; + } + + public JsonType GetJsonType () + { + return type; + } + + public void SetJsonType (JsonType type) + { + if (this.type == type) + return; + + switch (type) { + case JsonType.None: + break; + + case JsonType.Object: + inst_object = new Dictionary (); + object_list = new List> (); + break; + + case JsonType.Array: + inst_array = new List (); + break; + + case JsonType.String: + inst_string = default (String); + break; + + case JsonType.Int: + inst_int = default (Int32); + break; + + case JsonType.Long: + inst_long = default (Int64); + break; + + case JsonType.Double: + inst_double = default (Double); + break; + + case JsonType.Boolean: + inst_boolean = default (Boolean); + break; + } + + this.type = type; + } + + public string ToJson () + { + if (json != null) + return json; + + StringWriter sw = new StringWriter (); + JsonWriter writer = new JsonWriter (sw); + writer.Validate = false; + + WriteJson (this, writer); + json = sw.ToString (); + + return json; + } + + public void ToJson (JsonWriter writer) + { + bool old_validate = writer.Validate; + + writer.Validate = false; + + WriteJson (this, writer); + + writer.Validate = old_validate; + } + + public override string ToString () + { + switch (type) { + case JsonType.Array: + return "JsonData array"; + + case JsonType.Boolean: + return inst_boolean.ToString (); + + case JsonType.Double: + return inst_double.ToString (); + + case JsonType.Int: + return inst_int.ToString (); + + case JsonType.Long: + return inst_long.ToString (); + + case JsonType.Object: + return "JsonData object"; + + case JsonType.String: + return inst_string; + } + + return "Uninitialized JsonData"; + } + } + + + internal class OrderedDictionaryEnumerator : IDictionaryEnumerator + { + IEnumerator> list_enumerator; + + + public object Current { + get { return Entry; } + } + + public DictionaryEntry Entry { + get { + KeyValuePair curr = list_enumerator.Current; + return new DictionaryEntry(curr.Key, curr.Value); + } + } + + public object Key { + get { return list_enumerator.Current.Key; } + } + + public object Value { + get { return list_enumerator.Current.Value; } + } + + + public OrderedDictionaryEnumerator ( + IEnumerator> enumerator) + { + list_enumerator = enumerator; + } + + + public bool MoveNext () + { + return list_enumerator.MoveNext (); + } + + public void Reset () + { + list_enumerator.Reset (); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonData.cs.meta new file mode 100644 index 000000000..f408101ec --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9a81c0d15bace8947a1dd71fb670599b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonException.cs new file mode 100644 index 000000000..761e49074 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonException.cs @@ -0,0 +1,60 @@ +#region Header +/** + * JsonException.cs + * Base class throwed by LitJSON when a parsing error occurs. + * + * The authors disclaim copyright to this source code. For more details, see + * the COPYING file included with this distribution. + **/ +#endregion + + +using System; + + +namespace BestHTTP.JSON.LitJson +{ + public class JsonException : Exception + { + public JsonException () : base () + { + } + + internal JsonException (ParserToken token) : + base (String.Format ( + "Invalid token '{0}' in input string", token)) + { + } + + internal JsonException (ParserToken token, + Exception inner_exception) : + base (String.Format ( + "Invalid token '{0}' in input string", token), + inner_exception) + { + } + + internal JsonException (int c) : + base (String.Format ( + "Invalid character '{0}' in input string", (char) c)) + { + } + + internal JsonException (int c, Exception inner_exception) : + base (String.Format ( + "Invalid character '{0}' in input string", (char) c), + inner_exception) + { + } + + + public JsonException (string message) : base (message) + { + } + + public JsonException (string message, Exception inner_exception) : + base (message, inner_exception) + { + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonException.cs.meta new file mode 100644 index 000000000..3b5f27f70 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c0e428729a79a54f895108529593aae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonMapper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonMapper.cs new file mode 100644 index 000000000..b1d364ee4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonMapper.cs @@ -0,0 +1,1051 @@ +#region Header +/** + * JsonMapper.cs + * JSON to .Net object and object to JSON conversions. + * + * The authors disclaim copyright to this source code. For more details, see + * the COPYING file included with this distribution. + **/ +#endregion + + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Reflection; + + +namespace BestHTTP.JSON.LitJson +{ + internal struct PropertyMetadata + { + public MemberInfo Info; + public bool IsField; + public Type Type; + } + + + internal struct ArrayMetadata + { + private Type element_type; + private bool is_array; + private bool is_list; + + + public Type ElementType { + get { + if (element_type == null) + return typeof (JsonData); + + return element_type; + } + + set { element_type = value; } + } + + public bool IsArray { + get { return is_array; } + set { is_array = value; } + } + + public bool IsList { + get { return is_list; } + set { is_list = value; } + } + } + + + internal struct ObjectMetadata + { + private Type element_type; + private bool is_dictionary; + + private IDictionary properties; + + + public Type ElementType { + get { + if (element_type == null) + return typeof (JsonData); + + return element_type; + } + + set { element_type = value; } + } + + public bool IsDictionary { + get { return is_dictionary; } + set { is_dictionary = value; } + } + + public IDictionary Properties { + get { return properties; } + set { properties = value; } + } + } + + + internal delegate void ExporterFunc (object obj, JsonWriter writer); + public delegate void ExporterFunc (T obj, JsonWriter writer); + + internal delegate object ImporterFunc (object input); + public delegate TValue ImporterFunc (TJson input); + + public delegate IJsonWrapper WrapperFactory (); + + + public sealed class JsonMapper + { + #region Fields + private static readonly int max_nesting_depth; + + private static readonly IFormatProvider datetime_format; + + private static readonly IDictionary base_exporters_table; + private static readonly IDictionary custom_exporters_table; + + private static readonly IDictionary> base_importers_table; + private static readonly IDictionary> custom_importers_table; + + private static readonly IDictionary array_metadata; + private static readonly object array_metadata_lock = new Object (); + + private static readonly IDictionary> conv_ops; + private static readonly object conv_ops_lock = new Object (); + + private static readonly IDictionary object_metadata; + private static readonly object object_metadata_lock = new Object (); + + private static readonly IDictionary> type_properties; + private static readonly object type_properties_lock = new Object (); + + private static readonly JsonWriter static_writer; + private static readonly object static_writer_lock = new Object (); + #endregion + + + #region Constructors + static JsonMapper () + { + max_nesting_depth = 100; + + array_metadata = new Dictionary (); + conv_ops = new Dictionary> (); + object_metadata = new Dictionary (); + type_properties = new Dictionary> (); + + static_writer = new JsonWriter (); + + datetime_format = DateTimeFormatInfo.InvariantInfo; + + base_exporters_table = new Dictionary (); + custom_exporters_table = new Dictionary (); + + base_importers_table = new Dictionary> (); + custom_importers_table = new Dictionary> (); + + RegisterBaseExporters (); + RegisterBaseImporters (); + } + #endregion + + #region Private Helper Mehtods + + private static bool HasInterface(Type type, string name) + { +#if NETFX_CORE + foreach (Type type1 in IntrospectionExtensions.GetTypeInfo(type).ImplementedInterfaces) + if (type1.FullName == name) + return true; + return false; +#elif NET_4_6 + Type[] interfaces = type.GetInterfaces(); + foreach (var iface in interfaces) + { + if (iface.FullName.Equals(name, StringComparison.OrdinalIgnoreCase)) + return true; + } + + return false; +#else + return type.GetInterface(name, true) != null; +#endif + } + + public static PropertyInfo[] GetPublicInstanceProperties(Type type) + { +#if NETFX_CORE + List list = new List(); + foreach (PropertyInfo propertyInfo in RuntimeReflectionExtensions.GetRuntimeProperties(type)) + { + if (propertyInfo.GetMethod.IsPublic && !propertyInfo.GetMethod.IsStatic) + list.Add(propertyInfo); + } + return list.ToArray(); +#else + return type.GetProperties(); +#endif + } + + #endregion + + #region Private Methods + private static void AddArrayMetadata (Type type) + { + if (array_metadata.ContainsKey (type)) + return; + + ArrayMetadata data = new ArrayMetadata (); + + data.IsArray = type.IsArray; + + if (HasInterface(type, "System.Collections.IList")) + data.IsList = true; + + foreach (PropertyInfo p_info in GetPublicInstanceProperties(type)) + { + if (p_info.Name != "Item") + continue; + + ParameterInfo[] parameters = p_info.GetIndexParameters (); + + if (parameters.Length != 1) + continue; + + if (parameters[0].ParameterType == typeof (int)) + data.ElementType = p_info.PropertyType; + } + + lock (array_metadata_lock) { + try { + array_metadata.Add (type, data); + } catch (ArgumentException) { + return; + } + } + } + + private static void AddObjectMetadata (Type type) + { + if (object_metadata.ContainsKey (type)) + return; + + ObjectMetadata data = new ObjectMetadata (); + + if (HasInterface(type, "System.Collections.IDictionary")) + data.IsDictionary = true; + + data.Properties = new Dictionary (StringComparer.OrdinalIgnoreCase); + + foreach (PropertyInfo p_info in GetPublicInstanceProperties(type)) + { + if (p_info.Name == "Item") { + ParameterInfo[] parameters = p_info.GetIndexParameters (); + + if (parameters.Length != 1) + continue; + + if (parameters[0].ParameterType == typeof (string)) + data.ElementType = p_info.PropertyType; + + continue; + } + + PropertyMetadata p_data = new PropertyMetadata (); + p_data.Info = p_info; + p_data.Type = p_info.PropertyType; + + data.Properties.Add (p_info.Name, p_data); + } + + foreach (FieldInfo f_info in +#if NETFX_CORE + type.GetRuntimeFields() +#else + type.GetFields() +#endif + ) + { + PropertyMetadata p_data = new PropertyMetadata (); + p_data.Info = f_info; + p_data.IsField = true; + p_data.Type = f_info.FieldType; + + if (!data.Properties.ContainsKey(f_info.Name)) + data.Properties.Add (f_info.Name, p_data); + } + + lock (object_metadata_lock) { + try { + object_metadata.Add (type, data); + } catch (ArgumentException) { + return; + } + } + } + + private static void AddTypeProperties (Type type) + { + if (type_properties.ContainsKey (type)) + return; + + IList props = new List (); + + foreach (PropertyInfo p_info in GetPublicInstanceProperties(type)) { + if (p_info.Name == "Item") + continue; + + PropertyMetadata p_data = new PropertyMetadata (); + p_data.Info = p_info; + p_data.IsField = false; + props.Add (p_data); + } + + foreach (FieldInfo f_info in +#if NETFX_CORE + type.GetRuntimeFields() +#else + type.GetFields() +#endif + ) + { + PropertyMetadata p_data = new PropertyMetadata (); + p_data.Info = f_info; + p_data.IsField = true; + + props.Add (p_data); + } + + lock (type_properties_lock) { + try { + type_properties.Add (type, props); + } catch (ArgumentException) { + return; + } + } + } + + private static MethodInfo GetConvOp (Type t1, Type t2) + { + lock (conv_ops_lock) { + if (! conv_ops.ContainsKey (t1)) + conv_ops.Add (t1, new Dictionary ()); + } + + if (conv_ops[t1].ContainsKey (t2)) + return conv_ops[t1][t2]; + + MethodInfo op = +#if NETFX_CORE + t1.GetRuntimeMethod ("op_Implicit", new Type[] { t2 }); +#else + t1.GetMethod("op_Implicit", new Type[] { t2 }); +#endif + + lock (conv_ops_lock) { + try { + conv_ops[t1].Add (t2, op); + } catch (ArgumentException) { + return conv_ops[t1][t2]; + } + } + + return op; + } + + private static object ReadValue (Type inst_type, JsonReader reader) + { + reader.Read (); + + if (reader.Token == JsonToken.ArrayEnd) + return null; + + Type underlying_type = Nullable.GetUnderlyingType(inst_type); + Type value_type = underlying_type ?? inst_type; + + if (reader.Token == JsonToken.Null) { + +#if NETFX_CORE + if (inst_type.GetTypeInfo().IsClass || underlying_type != null) +#else + if (inst_type.IsClass || underlying_type != null) +#endif + return null; + + throw new JsonException(String.Format( + "Can't assign null to an instance of type {0}", + inst_type)); + } + + if (reader.Token == JsonToken.Double || + reader.Token == JsonToken.Int || + reader.Token == JsonToken.Long || + reader.Token == JsonToken.String || + reader.Token == JsonToken.Boolean) { + + Type json_type = reader.Value.GetType (); + +#if NETFX_CORE + if (value_type.GetTypeInfo().IsAssignableFrom (json_type.GetTypeInfo())) +#else + if (value_type.IsAssignableFrom(json_type)) +#endif + return reader.Value; + + // If there's a custom importer that fits, use it + if (custom_importers_table.ContainsKey (json_type) && + custom_importers_table[json_type].ContainsKey ( + value_type)) { + + ImporterFunc importer = + custom_importers_table[json_type][value_type]; + + return importer (reader.Value); + } + + // Maybe there's a base importer that works + if (base_importers_table.ContainsKey (json_type) && + base_importers_table[json_type].ContainsKey ( + value_type)) { + + ImporterFunc importer = + base_importers_table[json_type][value_type]; + + return importer (reader.Value); + } + + // Maybe it's an enum +#if NETFX_CORE + if (value_type.GetTypeInfo().IsEnum) +#else + if (value_type.IsEnum) +#endif + return Enum.ToObject (value_type, reader.Value); + + // Try using an implicit conversion operator + MethodInfo conv_op = GetConvOp (value_type, json_type); + + if (conv_op != null) + return conv_op.Invoke (null, + new object[] { reader.Value }); + + // No luck + throw new JsonException (String.Format ( + "Can't assign value '{0}' (type {1}) to type {2}", + reader.Value, json_type, inst_type)); + } + + object instance = null; + + if (reader.Token == JsonToken.ArrayStart) { + + if (inst_type.FullName == "System.Object") + inst_type = typeof(object[]); + + AddArrayMetadata (inst_type); + ArrayMetadata t_data = array_metadata[inst_type]; + + if (! t_data.IsArray && ! t_data.IsList) + throw new JsonException (String.Format ( + "Type {0} can't act as an array", + inst_type)); + + IList list; + Type elem_type; + + if (! t_data.IsArray) { + list = (IList) Activator.CreateInstance (inst_type); + elem_type = t_data.ElementType; + } else { + list = new System.Collections.Generic.List(); + elem_type = inst_type.GetElementType (); + } + + list.Clear(); + + while (true) { + object item = ReadValue (elem_type, reader); + if (item == null && reader.Token == JsonToken.ArrayEnd) + break; + + list.Add (item); + } + + if (t_data.IsArray) { + int n = list.Count; + instance = Array.CreateInstance (elem_type, n); + + for (int i = 0; i < n; i++) + ((Array) instance).SetValue (list[i], i); + } else + instance = list; + + } else if (reader.Token == JsonToken.ObjectStart) { + + if (inst_type == typeof(System.Object)) + value_type = inst_type = typeof(Dictionary); + + AddObjectMetadata (value_type); + ObjectMetadata t_data = object_metadata[value_type]; + + instance = Activator.CreateInstance (value_type); + + while (true) { + reader.Read (); + + if (reader.Token == JsonToken.ObjectEnd) + break; + + string property = (string) reader.Value; + + if (t_data.Properties.ContainsKey (property) && !t_data.IsDictionary) { + PropertyMetadata prop_data = + t_data.Properties[property]; + + if (prop_data.IsField) { + ((FieldInfo) prop_data.Info).SetValue ( + instance, ReadValue (prop_data.Type, reader)); + } else { + PropertyInfo p_info = + (PropertyInfo) prop_data.Info; + + if (p_info.CanWrite) + p_info.SetValue ( + instance, + ReadValue (prop_data.Type, reader), + null); + else + ReadValue (prop_data.Type, reader); + } + + } else { + if (! t_data.IsDictionary) { + + if (! reader.SkipNonMembers) { + throw new JsonException (String.Format ( + "The type {0} doesn't have the " + + "property '{1}'", + inst_type, property)); + } else { + ReadSkip (reader); + continue; + } + } + + ((IDictionary) instance).Add ( + property, ReadValue ( + t_data.ElementType, reader)); + } + + } + + } + + return instance; + } + + private static IJsonWrapper ReadValue (WrapperFactory factory, + JsonReader reader) + { + reader.Read (); + + if (reader.Token == JsonToken.ArrayEnd || + reader.Token == JsonToken.Null) + return null; + + IJsonWrapper instance = factory (); + + if (reader.Token == JsonToken.String) { + instance.SetString ((string) reader.Value); + return instance; + } + + if (reader.Token == JsonToken.Double) { + instance.SetDouble ((double) reader.Value); + return instance; + } + + if (reader.Token == JsonToken.Int) { + instance.SetInt ((int) reader.Value); + return instance; + } + + if (reader.Token == JsonToken.Long) { + instance.SetLong ((long) reader.Value); + return instance; + } + + if (reader.Token == JsonToken.Boolean) { + instance.SetBoolean ((bool) reader.Value); + return instance; + } + + if (reader.Token == JsonToken.ArrayStart) { + instance.SetJsonType (JsonType.Array); + + while (true) { + IJsonWrapper item = ReadValue (factory, reader); + if (item == null && reader.Token == JsonToken.ArrayEnd) + break; + + ((IList) instance).Add (item); + } + } + else if (reader.Token == JsonToken.ObjectStart) { + instance.SetJsonType (JsonType.Object); + + while (true) { + reader.Read (); + + if (reader.Token == JsonToken.ObjectEnd) + break; + + string property = (string) reader.Value; + + ((IDictionary) instance)[property] = ReadValue ( + factory, reader); + } + + } + + return instance; + } + + private static void ReadSkip (JsonReader reader) + { + ToWrapper ( + delegate { return new JsonMockWrapper (); }, reader); + } + + private static void RegisterBaseExporters () + { + base_exporters_table[typeof (byte)] = + delegate (object obj, JsonWriter writer) { + writer.Write (Convert.ToInt32 ((byte) obj)); + }; + + base_exporters_table[typeof (char)] = + delegate (object obj, JsonWriter writer) { + writer.Write (Convert.ToString ((char) obj)); + }; + + base_exporters_table[typeof (DateTime)] = + delegate (object obj, JsonWriter writer) { + writer.Write (Convert.ToString ((DateTime) obj, + datetime_format)); + }; + + base_exporters_table[typeof (decimal)] = + delegate (object obj, JsonWriter writer) { + writer.Write ((decimal) obj); + }; + + base_exporters_table[typeof (sbyte)] = + delegate (object obj, JsonWriter writer) { + writer.Write (Convert.ToInt32 ((sbyte) obj)); + }; + + base_exporters_table[typeof (short)] = + delegate (object obj, JsonWriter writer) { + writer.Write (Convert.ToInt32 ((short) obj)); + }; + + base_exporters_table[typeof (ushort)] = + delegate (object obj, JsonWriter writer) { + writer.Write (Convert.ToInt32 ((ushort) obj)); + }; + + base_exporters_table[typeof (uint)] = + delegate (object obj, JsonWriter writer) { + writer.Write (Convert.ToUInt64 ((uint) obj)); + }; + + base_exporters_table[typeof (ulong)] = + delegate (object obj, JsonWriter writer) { + writer.Write ((ulong) obj); + }; + + base_exporters_table[typeof(DateTimeOffset)] = + delegate (object obj, JsonWriter writer) { + writer.Write(((DateTimeOffset)obj).ToString("yyyy-MM-ddTHH:mm:ss.fffffffzzz", datetime_format)); + }; + } + + private static void RegisterBaseImporters () + { + ImporterFunc importer; + + importer = delegate (object input) { + return Convert.ToByte ((int) input); + }; + RegisterImporter (base_importers_table, typeof (int), + typeof (byte), importer); + + importer = delegate (object input) { + return Convert.ToUInt64 ((int) input); + }; + RegisterImporter (base_importers_table, typeof (int), + typeof (ulong), importer); + + importer = delegate (object input) { + return Convert.ToInt64((int)input); + }; + RegisterImporter(base_importers_table, typeof(int), + typeof(long), importer); + + importer = delegate (object input) { + return Convert.ToSByte ((int) input); + }; + RegisterImporter (base_importers_table, typeof (int), + typeof (sbyte), importer); + + importer = delegate (object input) { + return Convert.ToInt16 ((int) input); + }; + RegisterImporter (base_importers_table, typeof (int), + typeof (short), importer); + + importer = delegate (object input) { + return Convert.ToUInt16 ((int) input); + }; + RegisterImporter (base_importers_table, typeof (int), + typeof (ushort), importer); + + importer = delegate (object input) { + return Convert.ToUInt32 ((int) input); + }; + RegisterImporter (base_importers_table, typeof (int), + typeof (uint), importer); + + importer = delegate (object input) { + return Convert.ToSingle ((int) input); + }; + RegisterImporter (base_importers_table, typeof (int), + typeof (float), importer); + + importer = delegate (object input) { + return Convert.ToDouble ((int) input); + }; + RegisterImporter (base_importers_table, typeof (int), + typeof (double), importer); + + importer = delegate (object input) { + return Convert.ToDecimal ((double) input); + }; + RegisterImporter (base_importers_table, typeof (double), + typeof (decimal), importer); + + importer = delegate (object input) { + return Convert.ToSingle((double)input); + }; + RegisterImporter(base_importers_table, typeof(double), + typeof(float), importer); + + importer = delegate (object input) { + return Convert.ToUInt32 ((long) input); + }; + RegisterImporter (base_importers_table, typeof (long), + typeof (uint), importer); + + importer = delegate (object input) { + return Convert.ToChar ((string) input); + }; + RegisterImporter (base_importers_table, typeof (string), + typeof (char), importer); + + importer = delegate (object input) { + return Convert.ToDateTime ((string) input, datetime_format); + }; + RegisterImporter (base_importers_table, typeof (string), + typeof (DateTime), importer); + + importer = delegate (object input) { + return DateTimeOffset.Parse((string)input, datetime_format); + }; + RegisterImporter(base_importers_table, typeof(string), + typeof(DateTimeOffset), importer); + } + + private static void RegisterImporter ( + IDictionary> table, + Type json_type, Type value_type, ImporterFunc importer) + { + if (! table.ContainsKey (json_type)) + table.Add (json_type, new Dictionary ()); + + table[json_type][value_type] = importer; + } + + private static void WriteValue (object obj, JsonWriter writer, + bool writer_is_private, + int depth) + { + if (depth > max_nesting_depth) + throw new JsonException ( + String.Format ("Max allowed object depth reached while " + + "trying to export from type {0}", + obj.GetType ())); + + if (obj == null) { + writer.Write (null); + return; + } + + if (obj is IJsonWrapper) { + if (writer_is_private) + writer.TextWriter.Write (((IJsonWrapper) obj).ToJson ()); + else + ((IJsonWrapper) obj).ToJson (writer); + + return; + } + + if (obj is String) { + writer.Write ((string) obj); + return; + } + + if (obj is Double) { + writer.Write ((double) obj); + return; + } + + if (obj is Single) + { + writer.Write((float)obj); + return; + } + + if (obj is Int32) { + writer.Write ((int) obj); + return; + } + + if (obj is Boolean) { + writer.Write ((bool) obj); + return; + } + + if (obj is Int64) { + writer.Write ((long) obj); + return; + } + + if (obj is Array) { + writer.WriteArrayStart (); + + foreach (object elem in (Array) obj) + WriteValue (elem, writer, writer_is_private, depth + 1); + + writer.WriteArrayEnd (); + + return; + } + + if (obj is IList) { + writer.WriteArrayStart (); + foreach (object elem in (IList) obj) + WriteValue (elem, writer, writer_is_private, depth + 1); + writer.WriteArrayEnd (); + + return; + } + + var iDictionary = obj as IDictionary; + if (iDictionary != null) { + writer.WriteObjectStart (); + foreach (DictionaryEntry entity in iDictionary) + { + var propertyName = entity.Key as string ?? Convert.ToString(entity.Key, CultureInfo.InvariantCulture); + writer.WritePropertyName (propertyName); + WriteValue (entity.Value, writer, writer_is_private, + depth + 1); + } + writer.WriteObjectEnd (); + + return; + } + + Type obj_type = obj.GetType (); + + // See if there's a custom exporter for the object + if (custom_exporters_table.ContainsKey (obj_type)) { + ExporterFunc exporter = custom_exporters_table[obj_type]; + exporter (obj, writer); + + return; + } + + // If not, maybe there's a base exporter + if (base_exporters_table.ContainsKey (obj_type)) { + ExporterFunc exporter = base_exporters_table[obj_type]; + exporter (obj, writer); + + return; + } + + // Last option, let's see if it's an enum + if (obj is Enum) { + Type e_type = Enum.GetUnderlyingType (obj_type); + + if (e_type == typeof (long) + || e_type == typeof (uint) + || e_type == typeof (ulong)) + writer.Write ((ulong) obj); + else + writer.Write ((int) obj); + + return; + } + + // Okay, so it looks like the input should be exported as an + // object + AddTypeProperties (obj_type); + IList props = type_properties[obj_type]; + + writer.WriteObjectStart (); + foreach (PropertyMetadata p_data in props) { + if (p_data.IsField) { + writer.WritePropertyName (p_data.Info.Name); + WriteValue (((FieldInfo) p_data.Info).GetValue (obj), + writer, writer_is_private, depth + 1); + } + else { + PropertyInfo p_info = (PropertyInfo) p_data.Info; + + if (p_info.CanRead) { + writer.WritePropertyName (p_data.Info.Name); + WriteValue (p_info.GetValue (obj, null), + writer, writer_is_private, depth + 1); + } + } + } + writer.WriteObjectEnd (); + } + #endregion + + + public static string ToJson (object obj) + { + lock (static_writer_lock) { + static_writer.Reset (); + + WriteValue (obj, static_writer, true, 0); + + return static_writer.ToString (); + } + } + + public static void ToJson (object obj, JsonWriter writer) + { + WriteValue (obj, writer, false, 0); + } + + public static JsonData ToObject (JsonReader reader) + { + return (JsonData) ToWrapper ( + delegate { return new JsonData (); }, reader); + } + + public static object ToObject(Type toType, JsonReader reader) + { + return ReadValue(toType, reader); + } + + public static JsonData ToObject (TextReader reader) + { + JsonReader json_reader = new JsonReader (reader); + + return (JsonData) ToWrapper ( + delegate { return new JsonData (); }, json_reader); + } + + public static JsonData ToObject (string json) + { + return (JsonData) ToWrapper ( + delegate { return new JsonData (); }, json); + } + + public static T ToObject (JsonReader reader) + { + return (T) ReadValue (typeof (T), reader); + } + + public static T ToObject (TextReader reader) + { + JsonReader json_reader = new JsonReader (reader); + + return (T) ReadValue (typeof (T), json_reader); + } + + public static T ToObject (string json) + { + JsonReader reader = new JsonReader (json); + + return (T) ReadValue (typeof (T), reader); + } + + public static object ToObject(Type toType, string json) + { + JsonReader reader = new JsonReader(json); + + return ReadValue(toType, reader); + } + + public static IJsonWrapper ToWrapper (WrapperFactory factory, + JsonReader reader) + { + return ReadValue (factory, reader); + } + + public static IJsonWrapper ToWrapper (WrapperFactory factory, + string json) + { + JsonReader reader = new JsonReader (json); + + return ReadValue (factory, reader); + } + + public static void RegisterExporter (ExporterFunc exporter) + { + ExporterFunc exporter_wrapper = + delegate (object obj, JsonWriter writer) { + exporter ((T) obj, writer); + }; + + custom_exporters_table[typeof (T)] = exporter_wrapper; + } + + public static void RegisterImporter ( + ImporterFunc importer) + { + ImporterFunc importer_wrapper = + delegate (object input) { + return importer ((TJson) input); + }; + + RegisterImporter (custom_importers_table, typeof (TJson), + typeof (TValue), importer_wrapper); + } + + public static void UnregisterExporters () + { + custom_exporters_table.Clear (); + } + + public static void UnregisterImporters () + { + custom_importers_table.Clear (); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonMapper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonMapper.cs.meta new file mode 100644 index 000000000..3ad23e389 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonMapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 92c8869b88ccc05498dc6c383503732a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonMockWrapper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonMockWrapper.cs new file mode 100644 index 000000000..aab8c3f78 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonMockWrapper.cs @@ -0,0 +1,105 @@ +#region Header +/** + * JsonMockWrapper.cs + * Mock object implementing IJsonWrapper, to facilitate actions like + * skipping data more efficiently. + * + * The authors disclaim copyright to this source code. For more details, see + * the COPYING file included with this distribution. + **/ +#endregion + + +using System; +using System.Collections; +using System.Collections.Specialized; + + +namespace BestHTTP.JSON.LitJson +{ + public sealed class JsonMockWrapper : IJsonWrapper + { + public bool IsArray { get { return false; } } + public bool IsBoolean { get { return false; } } + public bool IsDouble { get { return false; } } + public bool IsInt { get { return false; } } + public bool IsLong { get { return false; } } + public bool IsObject { get { return false; } } + public bool IsString { get { return false; } } + + public bool GetBoolean () { return false; } + public double GetDouble () { return 0.0; } + public int GetInt () { return 0; } + public JsonType GetJsonType () { return JsonType.None; } + public long GetLong () { return 0L; } + public string GetString () { return ""; } + + public void SetBoolean (bool val) {} + public void SetDouble (double val) {} + public void SetInt (int val) {} + public void SetJsonType (JsonType type) {} + public void SetLong (long val) {} + public void SetString (string val) {} + + public string ToJson () { return ""; } + public void ToJson (JsonWriter writer) {} + + + bool IList.IsFixedSize { get { return true; } } + bool IList.IsReadOnly { get { return true; } } + + object IList.this[int index] { + get { return null; } + set {} + } + + int IList.Add (object value) { return 0; } + void IList.Clear () {} + bool IList.Contains (object value) { return false; } + int IList.IndexOf (object value) { return -1; } + void IList.Insert (int i, object v) {} + void IList.Remove (object value) {} + void IList.RemoveAt (int index) {} + + + int ICollection.Count { get { return 0; } } + bool ICollection.IsSynchronized { get { return false; } } + object ICollection.SyncRoot { get { return null; } } + + void ICollection.CopyTo (Array array, int index) {} + + + IEnumerator IEnumerable.GetEnumerator () { return null; } + + + bool IDictionary.IsFixedSize { get { return true; } } + bool IDictionary.IsReadOnly { get { return true; } } + + ICollection IDictionary.Keys { get { return null; } } + ICollection IDictionary.Values { get { return null; } } + + object IDictionary.this[object key] { + get { return null; } + set {} + } + + void IDictionary.Add (object k, object v) {} + void IDictionary.Clear () {} + bool IDictionary.Contains (object key) { return false; } + void IDictionary.Remove (object key) {} + + IDictionaryEnumerator IDictionary.GetEnumerator () { return null; } + + + object IOrderedDictionary.this[int idx] { + get { return null; } + set {} + } + + IDictionaryEnumerator IOrderedDictionary.GetEnumerator () { + return null; + } + void IOrderedDictionary.Insert (int i, object k, object v) {} + void IOrderedDictionary.RemoveAt (int i) {} + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonMockWrapper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonMockWrapper.cs.meta new file mode 100644 index 000000000..5344e3d55 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonMockWrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 95df9d460d5d5b84083ce9ece77f9562 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonReader.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonReader.cs new file mode 100644 index 000000000..60cb905f8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonReader.cs @@ -0,0 +1,479 @@ +#region Header +/** + * JsonReader.cs + * Stream-like access to JSON text. + * + * The authors disclaim copyright to this source code. For more details, see + * the COPYING file included with this distribution. + **/ +#endregion + + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Text; + + +namespace BestHTTP.JSON.LitJson +{ + public enum JsonToken + { + None, + + ObjectStart, + PropertyName, + ObjectEnd, + + ArrayStart, + ArrayEnd, + + Int, + Long, + Double, + + String, + + Boolean, + Null + } + + + public sealed class JsonReader + { + #region Fields + private static readonly IDictionary> parse_table; + + private Stack automaton_stack; + private int current_input; + private int current_symbol; + private bool end_of_json; + private bool end_of_input; + private Lexer lexer; + private bool parser_in_string; + private bool parser_return; + private bool read_started; + private TextReader reader; + private bool reader_is_owned; + private bool skip_non_members; + private object token_value; + private JsonToken token; + #endregion + + + #region Public Properties + public bool AllowComments { + get { return lexer.AllowComments; } + set { lexer.AllowComments = value; } + } + + public bool AllowSingleQuotedStrings { + get { return lexer.AllowSingleQuotedStrings; } + set { lexer.AllowSingleQuotedStrings = value; } + } + + public bool SkipNonMembers { + get { return skip_non_members; } + set { skip_non_members = value; } + } + + public bool EndOfInput { + get { return end_of_input; } + } + + public bool EndOfJson { + get { return end_of_json; } + } + + public JsonToken Token { + get { return token; } + } + + public object Value { + get { return token_value; } + } + #endregion + + + #region Constructors + static JsonReader () + { + parse_table = PopulateParseTable (); + } + + public JsonReader (string json_text) : + this (new StringReader (json_text), true) + { + } + + public JsonReader (TextReader reader) : + this (reader, false) + { + } + + private JsonReader (TextReader reader, bool owned) + { + if (reader == null) + throw new ArgumentNullException ("reader"); + + parser_in_string = false; + parser_return = false; + + read_started = false; + automaton_stack = new Stack (); + automaton_stack.Push ((int) ParserToken.End); + automaton_stack.Push ((int) ParserToken.Text); + + lexer = new Lexer (reader); + + end_of_input = false; + end_of_json = false; + + skip_non_members = true; + + this.reader = reader; + reader_is_owned = owned; + } + #endregion + + + #region Static Methods + private static IDictionary> PopulateParseTable () + { + // See section A.2. of the manual for details + IDictionary> parse_table = new Dictionary> (); + + TableAddRow (parse_table, ParserToken.Array); + TableAddCol (parse_table, ParserToken.Array, '[', + '[', + (int) ParserToken.ArrayPrime); + + TableAddRow (parse_table, ParserToken.ArrayPrime); + TableAddCol (parse_table, ParserToken.ArrayPrime, '"', + (int) ParserToken.Value, + + (int) ParserToken.ValueRest, + ']'); + TableAddCol (parse_table, ParserToken.ArrayPrime, '[', + (int) ParserToken.Value, + (int) ParserToken.ValueRest, + ']'); + TableAddCol (parse_table, ParserToken.ArrayPrime, ']', + ']'); + TableAddCol (parse_table, ParserToken.ArrayPrime, '{', + (int) ParserToken.Value, + (int) ParserToken.ValueRest, + ']'); + TableAddCol (parse_table, ParserToken.ArrayPrime, (int) ParserToken.Number, + (int) ParserToken.Value, + (int) ParserToken.ValueRest, + ']'); + TableAddCol (parse_table, ParserToken.ArrayPrime, (int) ParserToken.True, + (int) ParserToken.Value, + (int) ParserToken.ValueRest, + ']'); + TableAddCol (parse_table, ParserToken.ArrayPrime, (int) ParserToken.False, + (int) ParserToken.Value, + (int) ParserToken.ValueRest, + ']'); + TableAddCol (parse_table, ParserToken.ArrayPrime, (int) ParserToken.Null, + (int) ParserToken.Value, + (int) ParserToken.ValueRest, + ']'); + + TableAddRow (parse_table, ParserToken.Object); + TableAddCol (parse_table, ParserToken.Object, '{', + '{', + (int) ParserToken.ObjectPrime); + + TableAddRow (parse_table, ParserToken.ObjectPrime); + TableAddCol (parse_table, ParserToken.ObjectPrime, '"', + (int) ParserToken.Pair, + (int) ParserToken.PairRest, + '}'); + TableAddCol (parse_table, ParserToken.ObjectPrime, '}', + '}'); + + TableAddRow (parse_table, ParserToken.Pair); + TableAddCol (parse_table, ParserToken.Pair, '"', + (int) ParserToken.String, + ':', + (int) ParserToken.Value); + + TableAddRow (parse_table, ParserToken.PairRest); + TableAddCol (parse_table, ParserToken.PairRest, ',', + ',', + (int) ParserToken.Pair, + (int) ParserToken.PairRest); + TableAddCol (parse_table, ParserToken.PairRest, '}', + (int) ParserToken.Epsilon); + + TableAddRow (parse_table, ParserToken.String); + TableAddCol (parse_table, ParserToken.String, '"', + '"', + (int) ParserToken.CharSeq, + '"'); + + TableAddRow (parse_table, ParserToken.Text); + TableAddCol (parse_table, ParserToken.Text, '[', + (int) ParserToken.Array); + TableAddCol (parse_table, ParserToken.Text, '{', + (int) ParserToken.Object); + + TableAddRow (parse_table, ParserToken.Value); + TableAddCol (parse_table, ParserToken.Value, '"', + (int) ParserToken.String); + TableAddCol (parse_table, ParserToken.Value, '[', + (int) ParserToken.Array); + TableAddCol (parse_table, ParserToken.Value, '{', + (int) ParserToken.Object); + TableAddCol (parse_table, ParserToken.Value, (int) ParserToken.Number, + (int) ParserToken.Number); + TableAddCol (parse_table, ParserToken.Value, (int) ParserToken.True, + (int) ParserToken.True); + TableAddCol (parse_table, ParserToken.Value, (int) ParserToken.False, + (int) ParserToken.False); + TableAddCol (parse_table, ParserToken.Value, (int) ParserToken.Null, + (int) ParserToken.Null); + + TableAddRow (parse_table, ParserToken.ValueRest); + TableAddCol (parse_table, ParserToken.ValueRest, ',', + ',', + (int) ParserToken.Value, + (int) ParserToken.ValueRest); + TableAddCol (parse_table, ParserToken.ValueRest, ']', + (int) ParserToken.Epsilon); + + return parse_table; + } + + private static void TableAddCol (IDictionary> parse_table, ParserToken row, int col, + params int[] symbols) + { + parse_table[(int) row].Add (col, symbols); + } + + private static void TableAddRow (IDictionary> parse_table, ParserToken rule) + { + parse_table.Add ((int) rule, new Dictionary ()); + } + #endregion + + + #region Private Methods + private void ProcessNumber (string number) + { + if (number.IndexOf ('.') != -1 || + number.IndexOf ('e') != -1 || + number.IndexOf ('E') != -1) { + + double n_double; + if (double.TryParse (number, NumberStyles.Any, CultureInfo.InvariantCulture, out n_double)) { + token = JsonToken.Double; + token_value = n_double; + + return; + } + } + + int n_int32; + if (int.TryParse (number, NumberStyles.Integer, CultureInfo.InvariantCulture, out n_int32)) { + token = JsonToken.Int; + token_value = n_int32; + + return; + } + + long n_int64; + if (long.TryParse (number, NumberStyles.Integer, CultureInfo.InvariantCulture, out n_int64)) { + token = JsonToken.Long; + token_value = n_int64; + + return; + } + + ulong n_uint64; + if (ulong.TryParse(number, NumberStyles.Integer, CultureInfo.InvariantCulture, out n_uint64)) + { + token = JsonToken.Long; + token_value = n_uint64; + + return; + } + + // Shouldn't happen, but just in case, return something + token = JsonToken.Int; + token_value = 0; + } + + private void ProcessSymbol () + { + if (current_symbol == '[') { + token = JsonToken.ArrayStart; + parser_return = true; + + } else if (current_symbol == ']') { + token = JsonToken.ArrayEnd; + parser_return = true; + + } else if (current_symbol == '{') { + token = JsonToken.ObjectStart; + parser_return = true; + + } else if (current_symbol == '}') { + token = JsonToken.ObjectEnd; + parser_return = true; + + } else if (current_symbol == '"') { + if (parser_in_string) { + parser_in_string = false; + + parser_return = true; + + } else { + if (token == JsonToken.None) + token = JsonToken.String; + + parser_in_string = true; + } + + } else if (current_symbol == (int) ParserToken.CharSeq) { + token_value = lexer.StringValue; + + } else if (current_symbol == (int) ParserToken.False) { + token = JsonToken.Boolean; + token_value = false; + parser_return = true; + + } else if (current_symbol == (int) ParserToken.Null) { + token = JsonToken.Null; + parser_return = true; + + } else if (current_symbol == (int) ParserToken.Number) { + ProcessNumber (lexer.StringValue); + + parser_return = true; + + } else if (current_symbol == (int) ParserToken.Pair) { + token = JsonToken.PropertyName; + + } else if (current_symbol == (int) ParserToken.True) { + token = JsonToken.Boolean; + token_value = true; + parser_return = true; + + } + } + + private bool ReadToken () + { + if (end_of_input) + return false; + + lexer.NextToken (); + + if (lexer.EndOfInput) { + Close (); + + return false; + } + + current_input = lexer.Token; + + return true; + } + #endregion + + + public void Close () + { + if (end_of_input) + return; + + end_of_input = true; + end_of_json = true; + + if (reader_is_owned) + { + using(reader){} + } + lexer.Clear(); + + reader = null; + } + + public bool Read () + { + if (end_of_input) + return false; + + if (end_of_json) { + end_of_json = false; + automaton_stack.Clear (); + automaton_stack.Push ((int) ParserToken.End); + automaton_stack.Push ((int) ParserToken.Text); + } + + parser_in_string = false; + parser_return = false; + + token = JsonToken.None; + token_value = null; + + if (! read_started) { + read_started = true; + + if (! ReadToken ()) + return false; + } + + + int[] entry_symbols; + + while (true) { + if (parser_return) { + if (automaton_stack.Peek () == (int) ParserToken.End) + end_of_json = true; + + return true; + } + + current_symbol = automaton_stack.Pop (); + + ProcessSymbol (); + + if (current_symbol == current_input) { + if (! ReadToken ()) { + if (automaton_stack.Peek () != (int) ParserToken.End) + throw new JsonException ( + "Input doesn't evaluate to proper JSON text"); + + if (parser_return) + return true; + + return false; + } + + continue; + } + + try { + + entry_symbols = + parse_table[current_symbol][current_input]; + + } catch (KeyNotFoundException e) { + throw new JsonException ((ParserToken) current_input, e); + } + + if (entry_symbols[0] == (int) ParserToken.Epsilon) + continue; + + for (int i = entry_symbols.Length - 1; i >= 0; i--) + automaton_stack.Push (entry_symbols[i]); + } + } + + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonReader.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonReader.cs.meta new file mode 100644 index 000000000..1fcc49372 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonReader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d4dd4c70741aa7748a38d9064df0d3f5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonWriter.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonWriter.cs new file mode 100644 index 000000000..f02e8d4fa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonWriter.cs @@ -0,0 +1,484 @@ +#region Header +/** + * JsonWriter.cs + * Stream-like facility to output JSON text. + * + * The authors disclaim copyright to this source code. For more details, see + * the COPYING file included with this distribution. + **/ +#endregion + + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Text; + + +namespace BestHTTP.JSON.LitJson +{ + internal enum Condition + { + InArray, + InObject, + NotAProperty, + Property, + Value + } + + internal class WriterContext + { + public int Count; + public bool InArray; + public bool InObject; + public bool ExpectingValue; + public int Padding; + } + + public sealed class JsonWriter + { + #region Fields + private static readonly NumberFormatInfo number_format; + + private WriterContext context; + private Stack ctx_stack; + private bool has_reached_end; + private char[] hex_seq; + private int indentation; + private int indent_value; + private StringBuilder inst_string_builder; + private bool pretty_print; + private bool validate; + private bool lower_case_properties; + private TextWriter writer; + #endregion + + + #region Properties + public int IndentValue { + get { return indent_value; } + set { + indentation = (indentation / indent_value) * value; + indent_value = value; + } + } + + public bool PrettyPrint { + get { return pretty_print; } + set { pretty_print = value; } + } + + public TextWriter TextWriter { + get { return writer; } + } + + public bool Validate { + get { return validate; } + set { validate = value; } + } + + public bool LowerCaseProperties { + get { return lower_case_properties; } + set { lower_case_properties = value; } + } + #endregion + + + #region Constructors + static JsonWriter () + { + number_format = NumberFormatInfo.InvariantInfo; + } + + public JsonWriter () + { + inst_string_builder = new StringBuilder (); + writer = new StringWriter (inst_string_builder); + + Init (); + } + + public JsonWriter (StringBuilder sb) : + this (new StringWriter (sb)) + { + } + + public JsonWriter (TextWriter writer) + { + if (writer == null) + throw new ArgumentNullException ("writer"); + + this.writer = writer; + + Init (); + } + #endregion + + + #region Private Methods + private void DoValidation (Condition cond) + { + if (! context.ExpectingValue) + context.Count++; + + if (! validate) + return; + + if (has_reached_end) + throw new JsonException ( + "A complete JSON symbol has already been written"); + + switch (cond) { + case Condition.InArray: + if (! context.InArray) + throw new JsonException ( + "Can't close an array here"); + break; + + case Condition.InObject: + if (! context.InObject || context.ExpectingValue) + throw new JsonException ( + "Can't close an object here"); + break; + + case Condition.NotAProperty: + if (context.InObject && ! context.ExpectingValue) + throw new JsonException ( + "Expected a property"); + break; + + case Condition.Property: + if (! context.InObject || context.ExpectingValue) + throw new JsonException ( + "Can't add a property here"); + break; + + case Condition.Value: + if (! context.InArray && + (! context.InObject || ! context.ExpectingValue)) + throw new JsonException ( + "Can't add a value here"); + + break; + } + } + + private void Init () + { + has_reached_end = false; + hex_seq = new char[4]; + indentation = 0; + indent_value = 4; + pretty_print = false; + validate = true; + lower_case_properties = false; + + ctx_stack = new Stack (); + context = new WriterContext (); + ctx_stack.Push (context); + } + + private static void IntToHex (int n, char[] hex) + { + int num; + + for (int i = 0; i < 4; i++) { + num = n % 16; + + if (num < 10) + hex[3 - i] = (char) ('0' + num); + else + hex[3 - i] = (char) ('A' + (num - 10)); + + n >>= 4; + } + } + + private void Indent () + { + if (pretty_print) + indentation += indent_value; + } + + + private void Put (string str) + { + if (pretty_print && ! context.ExpectingValue) + for (int i = 0; i < indentation; i++) + writer.Write (' '); + + writer.Write (str); + } + + private void PutNewline () + { + PutNewline (true); + } + + private void PutNewline (bool add_comma) + { + if (add_comma && ! context.ExpectingValue && + context.Count > 1) + writer.Write (','); + + if (pretty_print && ! context.ExpectingValue) + writer.Write (Environment.NewLine); + } + + private void PutString (string str) + { + Put (String.Empty); + + writer.Write ('"'); + + int n = str.Length; + for (int i = 0; i < n; i++) { + switch (str[i]) { + case '\n': + writer.Write ("\\n"); + continue; + + case '\r': + writer.Write ("\\r"); + continue; + + case '\t': + writer.Write ("\\t"); + continue; + + case '"': + case '\\': + writer.Write ('\\'); + writer.Write (str[i]); + continue; + + case '\f': + writer.Write ("\\f"); + continue; + + case '\b': + writer.Write ("\\b"); + continue; + } + + if ((int) str[i] >= 32 && (int) str[i] <= 126) { + writer.Write (str[i]); + continue; + } + + // Default, turn into a \uXXXX sequence + IntToHex ((int) str[i], hex_seq); + writer.Write ("\\u"); + writer.Write (hex_seq); + } + + writer.Write ('"'); + } + + private void Unindent () + { + if (pretty_print) + indentation -= indent_value; + } + #endregion + + + public override string ToString () + { + if (inst_string_builder == null) + return String.Empty; + + return inst_string_builder.ToString (); + } + + public void Reset () + { + has_reached_end = false; + + ctx_stack.Clear (); + context = new WriterContext (); + ctx_stack.Push (context); + + if (inst_string_builder != null) + inst_string_builder.Remove (0, inst_string_builder.Length); + } + + public void Write (bool boolean) + { + DoValidation (Condition.Value); + PutNewline (); + + Put (boolean ? "true" : "false"); + + context.ExpectingValue = false; + } + + public void Write (decimal number) + { + DoValidation (Condition.Value); + PutNewline (); + + Put (Convert.ToString (number, number_format)); + + context.ExpectingValue = false; + } + + public void Write (double number) + { + DoValidation (Condition.Value); + PutNewline (); + + string str = Convert.ToString (number, number_format); + Put (str); + + if (str.IndexOf ('.') == -1 && + str.IndexOf ('E') == -1) + writer.Write (".0"); + + context.ExpectingValue = false; + } + + public void Write(float number) + { + DoValidation(Condition.Value); + PutNewline(); + + string str = Convert.ToString(number, number_format); + Put(str); + + context.ExpectingValue = false; + } + + public void Write (int number) + { + DoValidation (Condition.Value); + PutNewline (); + + Put (Convert.ToString (number, number_format)); + + context.ExpectingValue = false; + } + + public void Write (long number) + { + DoValidation (Condition.Value); + PutNewline (); + + Put (Convert.ToString (number, number_format)); + + context.ExpectingValue = false; + } + + public void Write (string str) + { + DoValidation (Condition.Value); + PutNewline (); + + if (str == null) + Put ("null"); + else + PutString (str); + + context.ExpectingValue = false; + } + + //[CLSCompliant(false)] + public void Write (ulong number) + { + DoValidation (Condition.Value); + PutNewline (); + + Put (Convert.ToString (number, number_format)); + + context.ExpectingValue = false; + } + + public void WriteArrayEnd () + { + DoValidation (Condition.InArray); + PutNewline (false); + + ctx_stack.Pop (); + if (ctx_stack.Count == 1) + has_reached_end = true; + else { + context = ctx_stack.Peek (); + context.ExpectingValue = false; + } + + Unindent (); + Put ("]"); + } + + public void WriteArrayStart () + { + DoValidation (Condition.NotAProperty); + PutNewline (); + + Put ("["); + + context = new WriterContext (); + context.InArray = true; + ctx_stack.Push (context); + + Indent (); + } + + public void WriteObjectEnd () + { + DoValidation (Condition.InObject); + PutNewline (false); + + ctx_stack.Pop (); + if (ctx_stack.Count == 1) + has_reached_end = true; + else { + context = ctx_stack.Peek (); + context.ExpectingValue = false; + } + + Unindent (); + Put ("}"); + } + + public void WriteObjectStart () + { + DoValidation (Condition.NotAProperty); + PutNewline (); + + Put ("{"); + + context = new WriterContext (); + context.InObject = true; + ctx_stack.Push (context); + + Indent (); + } + + public void WritePropertyName (string property_name) + { + DoValidation (Condition.Property); + PutNewline (); + string propertyName = (property_name == null || !lower_case_properties) + ? property_name + : property_name.ToLowerInvariant(); + + PutString (propertyName); + + if (pretty_print) { + if (propertyName.Length > context.Padding) + context.Padding = propertyName.Length; + + for (int i = context.Padding - propertyName.Length; + i >= 0; i--) + writer.Write (' '); + + writer.Write (": "); + } else + writer.Write (':'); + + context.ExpectingValue = true; + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonWriter.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonWriter.cs.meta new file mode 100644 index 000000000..ffe1c7bb3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/JsonWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ee934aed3813be64e91aa4b46aa1e62c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/Lexer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/Lexer.cs new file mode 100644 index 000000000..39f27366a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/Lexer.cs @@ -0,0 +1,918 @@ +#region Header +/** + * Lexer.cs + * JSON lexer implementation based on a finite state machine. + * + * The authors disclaim copyright to this source code. For more details, see + * the COPYING file included with this distribution. + **/ +#endregion + + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +using BestHTTP.PlatformSupport.Text; + +namespace BestHTTP.JSON.LitJson +{ + internal sealed class FsmContext + { + public bool Return; + public int NextState; + public Lexer L; + public int StateStack; + } + + + internal sealed class Lexer + { + #region Fields + private delegate bool StateHandler (FsmContext ctx); + + private static readonly int[] fsm_return_table; + private static readonly StateHandler[] fsm_handler_table; + + private bool allow_comments; + private bool allow_single_quoted_strings; + private bool end_of_input; + private FsmContext fsm_context; + private int input_buffer; + private int input_char; + private TextReader reader; + private int state; + private StringBuilder string_buffer; + private string string_value; + private int token; + private int unichar; + #endregion + + + #region Properties + public bool AllowComments { + get { return allow_comments; } + set { allow_comments = value; } + } + + public bool AllowSingleQuotedStrings { + get { return allow_single_quoted_strings; } + set { allow_single_quoted_strings = value; } + } + + public bool EndOfInput { + get { return end_of_input; } + } + + public int Token { + get { return token; } + } + + public string StringValue { + get { return string_value; } + } + #endregion + + + #region Constructors + static Lexer () + { + PopulateFsmTables (out fsm_handler_table, out fsm_return_table); + } + + public Lexer (TextReader reader) + { + allow_comments = true; + allow_single_quoted_strings = true; + + input_buffer = 0; + string_buffer = StringBuilderPool.Get(128); // new StringBuilder (128); + state = 1; + end_of_input = false; + this.reader = reader; + + fsm_context = new FsmContext (); + fsm_context.L = this; + } + #endregion + + + #region Static Methods + private static int HexValue (int digit) + { + switch (digit) { + case 'a': + case 'A': + return 10; + + case 'b': + case 'B': + return 11; + + case 'c': + case 'C': + return 12; + + case 'd': + case 'D': + return 13; + + case 'e': + case 'E': + return 14; + + case 'f': + case 'F': + return 15; + + default: + return digit - '0'; + } + } + + private static void PopulateFsmTables (out StateHandler[] fsm_handler_table, out int[] fsm_return_table) + { + // See section A.1. of the manual for details of the finite + // state machine. + fsm_handler_table = new StateHandler[28] { + State1, + State2, + State3, + State4, + State5, + State6, + State7, + State8, + State9, + State10, + State11, + State12, + State13, + State14, + State15, + State16, + State17, + State18, + State19, + State20, + State21, + State22, + State23, + State24, + State25, + State26, + State27, + State28 + }; + + fsm_return_table = new int[28] { + (int) ParserToken.Char, + 0, + (int) ParserToken.Number, + (int) ParserToken.Number, + 0, + (int) ParserToken.Number, + 0, + (int) ParserToken.Number, + 0, + 0, + (int) ParserToken.True, + 0, + 0, + 0, + (int) ParserToken.False, + 0, + 0, + (int) ParserToken.Null, + (int) ParserToken.CharSeq, + (int) ParserToken.Char, + 0, + 0, + (int) ParserToken.CharSeq, + (int) ParserToken.Char, + 0, + 0, + 0, + 0 + }; + } + + private static char ProcessEscChar (int esc_char) + { + switch (esc_char) { + case '"': + case '\'': + case '\\': + case '/': + return Convert.ToChar (esc_char); + + case 'n': + return '\n'; + + case 't': + return '\t'; + + case 'r': + return '\r'; + + case 'b': + return '\b'; + + case 'f': + return '\f'; + + default: + // Unreachable + return '?'; + } + } + + private static bool State1 (FsmContext ctx) + { + while (ctx.L.GetChar ()) { + if (ctx.L.input_char == ' ' || + ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r') + continue; + + if (ctx.L.input_char >= '1' && ctx.L.input_char <= '9') { + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 3; + return true; + } + + switch (ctx.L.input_char) { + case '"': + ctx.NextState = 19; + ctx.Return = true; + return true; + + case ',': + case ':': + case '[': + case ']': + case '{': + case '}': + ctx.NextState = 1; + ctx.Return = true; + return true; + + case '-': + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 2; + return true; + + case '0': + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 4; + return true; + + case 'f': + ctx.NextState = 12; + return true; + + case 'n': + ctx.NextState = 16; + return true; + + case 't': + ctx.NextState = 9; + return true; + + case '\'': + if (! ctx.L.allow_single_quoted_strings) + return false; + + ctx.L.input_char = '"'; + ctx.NextState = 23; + ctx.Return = true; + return true; + + case '/': + if (! ctx.L.allow_comments) + return false; + + ctx.NextState = 25; + return true; + + default: + return false; + } + } + + return true; + } + + private static bool State2 (FsmContext ctx) + { + ctx.L.GetChar (); + + if (ctx.L.input_char >= '1' && ctx.L.input_char<= '9') { + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 3; + return true; + } + + switch (ctx.L.input_char) { + case '0': + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 4; + return true; + + default: + return false; + } + } + + private static bool State3 (FsmContext ctx) + { + while (ctx.L.GetChar ()) { + if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9') { + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + continue; + } + + if (ctx.L.input_char == ' ' || + ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r') { + ctx.Return = true; + ctx.NextState = 1; + return true; + } + + switch (ctx.L.input_char) { + case ',': + case ']': + case '}': + ctx.L.UngetChar (); + ctx.Return = true; + ctx.NextState = 1; + return true; + + case '.': + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 5; + return true; + + case 'e': + case 'E': + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 7; + return true; + + default: + return false; + } + } + return true; + } + + private static bool State4 (FsmContext ctx) + { + ctx.L.GetChar (); + + if (ctx.L.input_char == ' ' || + ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r') { + ctx.Return = true; + ctx.NextState = 1; + return true; + } + + switch (ctx.L.input_char) { + case ',': + case ']': + case '}': + ctx.L.UngetChar (); + ctx.Return = true; + ctx.NextState = 1; + return true; + + case '.': + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 5; + return true; + + case 'e': + case 'E': + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 7; + return true; + + default: + return false; + } + } + + private static bool State5 (FsmContext ctx) + { + ctx.L.GetChar (); + + if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9') { + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 6; + return true; + } + + return false; + } + + private static bool State6 (FsmContext ctx) + { + while (ctx.L.GetChar ()) { + if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9') { + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + continue; + } + + if (ctx.L.input_char == ' ' || + ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r') { + ctx.Return = true; + ctx.NextState = 1; + return true; + } + + switch (ctx.L.input_char) { + case ',': + case ']': + case '}': + ctx.L.UngetChar (); + ctx.Return = true; + ctx.NextState = 1; + return true; + + case 'e': + case 'E': + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 7; + return true; + + default: + return false; + } + } + + return true; + } + + private static bool State7 (FsmContext ctx) + { + ctx.L.GetChar (); + + if (ctx.L.input_char >= '0' && ctx.L.input_char<= '9') { + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 8; + return true; + } + + switch (ctx.L.input_char) { + case '+': + case '-': + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 8; + return true; + + default: + return false; + } + } + + private static bool State8 (FsmContext ctx) + { + while (ctx.L.GetChar ()) { + if (ctx.L.input_char >= '0' && ctx.L.input_char<= '9') { + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + continue; + } + + if (ctx.L.input_char == ' ' || + ctx.L.input_char >= '\t' && ctx.L.input_char<= '\r') { + ctx.Return = true; + ctx.NextState = 1; + return true; + } + + switch (ctx.L.input_char) { + case ',': + case ']': + case '}': + ctx.L.UngetChar (); + ctx.Return = true; + ctx.NextState = 1; + return true; + + default: + return false; + } + } + + return true; + } + + private static bool State9 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'r': + ctx.NextState = 10; + return true; + + default: + return false; + } + } + + private static bool State10 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'u': + ctx.NextState = 11; + return true; + + default: + return false; + } + } + + private static bool State11 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'e': + ctx.Return = true; + ctx.NextState = 1; + return true; + + default: + return false; + } + } + + private static bool State12 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'a': + ctx.NextState = 13; + return true; + + default: + return false; + } + } + + private static bool State13 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'l': + ctx.NextState = 14; + return true; + + default: + return false; + } + } + + private static bool State14 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 's': + ctx.NextState = 15; + return true; + + default: + return false; + } + } + + private static bool State15 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'e': + ctx.Return = true; + ctx.NextState = 1; + return true; + + default: + return false; + } + } + + private static bool State16 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'u': + ctx.NextState = 17; + return true; + + default: + return false; + } + } + + private static bool State17 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'l': + ctx.NextState = 18; + return true; + + default: + return false; + } + } + + private static bool State18 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'l': + ctx.Return = true; + ctx.NextState = 1; + return true; + + default: + return false; + } + } + + private static bool State19 (FsmContext ctx) + { + while (ctx.L.GetChar ()) { + switch (ctx.L.input_char) { + case '"': + ctx.L.UngetChar (); + ctx.Return = true; + ctx.NextState = 20; + return true; + + case '\\': + ctx.StateStack = 19; + ctx.NextState = 21; + return true; + + default: + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + continue; + } + } + + return true; + } + + private static bool State20 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case '"': + ctx.Return = true; + ctx.NextState = 1; + return true; + + default: + return false; + } + } + + private static bool State21 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'u': + ctx.NextState = 22; + return true; + + case '"': + case '\'': + case '/': + case '\\': + case 'b': + case 'f': + case 'n': + case 'r': + case 't': + ctx.L.string_buffer.Append ( + ProcessEscChar (ctx.L.input_char)); + ctx.NextState = ctx.StateStack; + return true; + + default: + return false; + } + } + + private static bool State22 (FsmContext ctx) + { + int counter = 0; + int mult = 4096; + + ctx.L.unichar = 0; + + while (ctx.L.GetChar ()) { + + if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9' || + ctx.L.input_char >= 'A' && ctx.L.input_char <= 'F' || + ctx.L.input_char >= 'a' && ctx.L.input_char <= 'f') { + + ctx.L.unichar += HexValue (ctx.L.input_char) * mult; + + counter++; + mult /= 16; + + if (counter == 4) { + ctx.L.string_buffer.Append ( + Convert.ToChar (ctx.L.unichar)); + ctx.NextState = ctx.StateStack; + return true; + } + + continue; + } + + return false; + } + + return true; + } + + private static bool State23 (FsmContext ctx) + { + while (ctx.L.GetChar ()) { + switch (ctx.L.input_char) { + case '\'': + ctx.L.UngetChar (); + ctx.Return = true; + ctx.NextState = 24; + return true; + + case '\\': + ctx.StateStack = 23; + ctx.NextState = 21; + return true; + + default: + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + continue; + } + } + + return true; + } + + private static bool State24 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case '\'': + ctx.L.input_char = '"'; + ctx.Return = true; + ctx.NextState = 1; + return true; + + default: + return false; + } + } + + private static bool State25 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case '*': + ctx.NextState = 27; + return true; + + case '/': + ctx.NextState = 26; + return true; + + default: + return false; + } + } + + private static bool State26 (FsmContext ctx) + { + while (ctx.L.GetChar ()) { + if (ctx.L.input_char == '\n') { + ctx.NextState = 1; + return true; + } + } + + return true; + } + + private static bool State27 (FsmContext ctx) + { + while (ctx.L.GetChar ()) { + if (ctx.L.input_char == '*') { + ctx.NextState = 28; + return true; + } + } + + return true; + } + + private static bool State28 (FsmContext ctx) + { + while (ctx.L.GetChar ()) { + if (ctx.L.input_char == '*') + continue; + + if (ctx.L.input_char == '/') { + ctx.NextState = 1; + return true; + } + + ctx.NextState = 27; + return true; + } + + return true; + } + #endregion + + + private bool GetChar () + { + if ((input_char = NextChar ()) != -1) + return true; + + end_of_input = true; + return false; + } + + private int NextChar () + { + if (input_buffer != 0) { + int tmp = input_buffer; + input_buffer = 0; + + return tmp; + } + + return reader.Read (); + } + + public bool NextToken () + { + StateHandler handler; + fsm_context.Return = false; + + while (true) { + handler = fsm_handler_table[state - 1]; + + if (! handler (fsm_context)) + throw new JsonException (input_char); + + if (end_of_input) + return false; + + if (fsm_context.Return) { + string_value = string_buffer.ToString (); + string_buffer.Remove (0, string_buffer.Length); + token = fsm_return_table[state - 1]; + + if (token == (int) ParserToken.Char) + token = input_char; + + state = fsm_context.NextState; + + return true; + } + + state = fsm_context.NextState; + } + } + + private void UngetChar () + { + input_buffer = input_char; + } + + public void Clear() + { + StringBuilderPool.Release(this.string_buffer); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/Lexer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/Lexer.cs.meta new file mode 100644 index 000000000..b482fb84f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/Lexer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 51c5e30f2d59d084cb728fdb67d86bef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/ParserToken.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/ParserToken.cs new file mode 100644 index 000000000..18af99e79 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/ParserToken.cs @@ -0,0 +1,44 @@ +#region Header +/** + * ParserToken.cs + * Internal representation of the tokens used by the lexer and the parser. + * + * The authors disclaim copyright to this source code. For more details, see + * the COPYING file included with this distribution. + **/ +#endregion + + +namespace BestHTTP.JSON.LitJson +{ + internal enum ParserToken + { + // Lexer tokens (see section A.1.1. of the manual) + None = System.Char.MaxValue + 1, + Number, + True, + False, + Null, + CharSeq, + // Single char + Char, + + // Parser Rules (see section A.2.1 of the manual) + Text, + Object, + ObjectPrime, + Pair, + PairRest, + Array, + ArrayPrime, + Value, + ValueRest, + String, + + // End of input + End, + + // The empty rule + Epsilon + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/ParserToken.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/ParserToken.cs.meta new file mode 100644 index 000000000..3516822b1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/JSON/LitJson/ParserToken.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ea575ac239c098048bee0d437ce05871 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Logger.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger.meta new file mode 100644 index 000000000..812d0971f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 603b8a5653cd7d84ab97cc7367e95682 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/DefaultLogger.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/DefaultLogger.cs new file mode 100644 index 000000000..09dab3be5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/DefaultLogger.cs @@ -0,0 +1,143 @@ +using System; +using System.Text; + +namespace BestHTTP.Logger +{ + /// + /// A basic logger implementation to be able to log intelligently additional informations about the plugin's internal mechanism. + /// + public class DefaultLogger : BestHTTP.Logger.ILogger + { + public Loglevels Level { get; set; } + + public ILogOutput Output + { + get { return this._output; } + set + { + if (this._output != value) + { + if (this._output != null) + this._output.Dispose(); + this._output = value; + } + } + } + private ILogOutput _output; + + public string FormatVerbose { get; set; } + public string FormatInfo { get; set; } + public string FormatWarn { get; set; } + public string FormatErr { get; set; } + public string FormatEx { get; set; } + + public DefaultLogger() + { + FormatVerbose = "[{0}] D [{1}]: {2}"; + FormatInfo = "[{0}] I [{1}]: {2}"; + FormatWarn = "[{0}] W [{1}]: {2}"; + FormatErr = "[{0}] Err [{1}]: {2}"; + FormatEx = "[{0}] Ex [{1}]: {2} - Message: {3} StackTrace: {4}"; + + Level = UnityEngine.Debug.isDebugBuild ? Loglevels.Warning : Loglevels.Error; + this.Output = new UnityOutput(); + } + + public void Verbose(string division, string msg, LoggingContext context1 = null, LoggingContext context2 = null, LoggingContext context3 = null) + { + if (Level <= Loglevels.All) + { + try + { + this.Output.Write(Loglevels.All, string.Format(FormatVerbose, GetFormattedTime(), division, msg)); + } + catch + { } + } + } + + public void Information(string division, string msg, LoggingContext context1 = null, LoggingContext context2 = null, LoggingContext context3 = null) + { + if (Level <= Loglevels.Information) + { + try + { + this.Output.Write(Loglevels.Information, string.Format(FormatInfo, GetFormattedTime(), division, msg)); + } + catch + { } + } + } + + public void Warning(string division, string msg, LoggingContext context1 = null, LoggingContext context2 = null, LoggingContext context3 = null) + { + if (Level <= Loglevels.Warning) + { + try + { + this.Output.Write(Loglevels.Warning, string.Format(FormatWarn, GetFormattedTime(), division, msg)); + } + catch + { } + } + } + + public void Error(string division, string msg, LoggingContext context1 = null, LoggingContext context2 = null, LoggingContext context3 = null) + { + if (Level <= Loglevels.Error) + { + try + { + this.Output.Write(Loglevels.Error, string.Format(FormatErr, GetFormattedTime(), division, msg)); + } + catch + { } + } + } + + public void Exception(string division, string msg, Exception ex, LoggingContext context1 = null, LoggingContext context2 = null, LoggingContext context3 = null) + { + if (Level <= Loglevels.Exception) + { + try + { + string exceptionMessage = string.Empty; + if (ex == null) + exceptionMessage = "null"; + else + { + StringBuilder sb = new StringBuilder(); + + Exception exception = ex; + int counter = 1; + while (exception != null) + { + sb.AppendFormat("{0}: {1} {2}", counter++.ToString(), exception.Message, exception.StackTrace); + + exception = exception.InnerException; + + if (exception != null) + sb.AppendLine(); + } + + exceptionMessage = sb.ToString(); + } + + this.Output.Write(Loglevels.Exception, string.Format(FormatEx, + GetFormattedTime(), + division, + msg, + exceptionMessage, + ex != null ? ex.StackTrace : "null")); + } + catch + { } + } + } + + private string GetFormattedTime() + { + return DateTime.Now.Ticks.ToString(); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/DefaultLogger.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/DefaultLogger.cs.meta new file mode 100644 index 000000000..6138af61c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/DefaultLogger.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f0c6097670314f141ad42c8060f64ecb +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/FileOutput.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/FileOutput.cs new file mode 100644 index 000000000..5f8bf348b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/FileOutput.cs @@ -0,0 +1,51 @@ +using System; + +using BestHTTP.Extensions; +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP.Logger +{ + public sealed class FileOutput : ILogOutput + { + private System.IO.Stream fileStream; + + public FileOutput(string fileName) + { + this.fileStream = HTTPManager.IOService.CreateFileStream(fileName, PlatformSupport.FileSystem.FileStreamModes.Create); + } + + public void Write(Loglevels level, string logEntry) + { + if (this.fileStream != null && !string.IsNullOrEmpty(logEntry)) + { + int count = System.Text.Encoding.UTF8.GetByteCount(logEntry); + var buffer = BufferPool.Get(count, true); + + try + { + System.Text.Encoding.UTF8.GetBytes(logEntry, 0, logEntry.Length, buffer, 0); + + this.fileStream.Write(buffer, 0, count); + this.fileStream.WriteLine(); + } + finally + { + BufferPool.Release(buffer); + } + + this.fileStream.Flush(); + } + } + + public void Dispose() + { + if (this.fileStream != null) + { + this.fileStream.Close(); + this.fileStream = null; + } + + GC.SuppressFinalize(this); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/FileOutput.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/FileOutput.cs.meta new file mode 100644 index 000000000..d9689257c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/FileOutput.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: f7d6b077b7753e44e943b5f433b3158d +timeCreated: 1591097750 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/ILogger.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/ILogger.cs new file mode 100644 index 000000000..5e85aa8a4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/ILogger.cs @@ -0,0 +1,65 @@ +using System; + +namespace BestHTTP.Logger +{ + /// + /// Available logging levels. + /// + public enum Loglevels : int + { + /// + /// All message will be logged. + /// + All, + + /// + /// Only Informations and above will be logged. + /// + Information, + + /// + /// Only Warnings and above will be logged. + /// + Warning, + + /// + /// Only Errors and above will be logged. + /// + Error, + + /// + /// Only Exceptions will be logged. + /// + Exception, + + /// + /// No logging will occur. + /// + None + } + + public interface ILogOutput : IDisposable + { + void Write(Loglevels level, string logEntry); + } + + public interface ILogger + { + /// + /// The minimum severity to log + /// + Loglevels Level { get; set; } + + ILogOutput Output { get; set; } + + void Verbose(string division, string msg, LoggingContext context1 = null, LoggingContext context2 = null, LoggingContext context3 = null); + + void Information(string division, string msg, LoggingContext context1 = null, LoggingContext context2 = null, LoggingContext context3 = null); + + void Warning(string division, string msg, LoggingContext context1 = null, LoggingContext context2 = null, LoggingContext context3 = null); + + void Error(string division, string msg, LoggingContext context1 = null, LoggingContext context2 = null, LoggingContext context3 = null); + + void Exception(string division, string msg, Exception ex, LoggingContext context1 = null, LoggingContext context2 = null, LoggingContext context3 = null); + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/ILogger.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/ILogger.cs.meta new file mode 100644 index 000000000..b09339407 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/ILogger.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 41bbbfdb18d1d6f479d52229e8e4e827 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/LoggingContext.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/LoggingContext.cs new file mode 100644 index 000000000..87d99b712 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/LoggingContext.cs @@ -0,0 +1,173 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace BestHTTP.Logger +{ + public sealed class LoggingContext + { + private enum LoggingContextFieldType + { + Long, + Bool, + String, + AnotherContext + } + + private struct LoggingContextField + { + public string key; + public long longValue; + public bool boolValue; + public string stringValue; + public LoggingContext loggingContextValue; + public LoggingContextFieldType fieldType; + } + + private List fields = null; + private static System.Random random = new System.Random(); + + private LoggingContext() { } + + public LoggingContext(object boundto) + { + var name = boundto.GetType().Name; + Add("TypeName", name); + + long hash = 0; + lock (random) + hash = ((long)boundto.GetHashCode() << 32 | (long)name.GetHashCode()) ^ ((long)this.GetHashCode() << 16) | (long)(random.Next(int.MaxValue) << 32) | (long)random.Next(int.MaxValue); + Add("Hash", hash); + } + + public void Add(string key, long value) + { + Add(new LoggingContextField { fieldType = LoggingContextFieldType.Long, key = key, longValue = value }); + } + + public void Add(string key, bool value) + { + Add(new LoggingContextField { fieldType = LoggingContextFieldType.Bool, key = key, boolValue = value }); + } + + public void Add(string key, string value) + { + Add(new LoggingContextField { fieldType = LoggingContextFieldType.String, key = key, stringValue = value }); + } + + public void Add(string key, LoggingContext value) + { + + Add(new LoggingContextField { fieldType = LoggingContextFieldType.AnotherContext, key = key, loggingContextValue = value }); + } + + private void Add(LoggingContextField field) + { + if (this.fields == null) + this.fields = new List(); + + Remove(field.key); + this.fields.Add(field); + } + + public void Remove(string key) + { + this.fields.RemoveAll(field => field.key == key); + } + + public LoggingContext Clone() + { + LoggingContext newContext = new LoggingContext(); + + if (this.fields != null && this.fields.Count > 0) + { + newContext.fields = new List(this.fields.Count); + for (int i = 0; i < this.fields.Count; ++i) + { + var field = this.fields[i]; + + switch (field.fieldType) + { + case LoggingContextFieldType.Long: + case LoggingContextFieldType.Bool: + case LoggingContextFieldType.String: + newContext.fields.Add(field); + break; + + case LoggingContextFieldType.AnotherContext: + newContext.Add(field.key, field.loggingContextValue.Clone()); + break; + } + } + } + + return newContext; + } + + public void ToJson(System.Text.StringBuilder sb) + { + if (this.fields == null || this.fields.Count == 0) + { + sb.Append("null"); + return; + } + + sb.Append("{"); + for (int i = 0; i < this.fields.Count; ++i) + { + var field = this.fields[i]; + + if (field.fieldType != LoggingContextFieldType.AnotherContext) + { + if (i > 0) + sb.Append(", "); + + sb.AppendFormat("\"{0}\": ", field.key); + } + + switch (field.fieldType) + { + case LoggingContextFieldType.Long: + sb.Append(field.longValue); + break; + case LoggingContextFieldType.Bool: + sb.Append(field.boolValue ? "true" : "false"); + break; + case LoggingContextFieldType.String: + sb.AppendFormat("\"{0}\"", Escape(field.stringValue)); + break; + } + } + + sb.Append("}"); + + for (int i = 0; i < this.fields.Count; ++i) + { + var field = this.fields[i]; + + switch (field.fieldType) + { + case LoggingContextFieldType.AnotherContext: + sb.Append(", "); + field.loggingContextValue.ToJson(sb); + break; + } + } + + } + + public static string Escape(string original) + { + return PlatformSupport.Text.StringBuilderPool.ReleaseAndGrab(PlatformSupport.Text.StringBuilderPool.Get(1) + .Append(original) + .Replace("\\", "\\\\") + .Replace("\"", "\\\"") + .Replace("/", "\\/") + .Replace("\b", "\\b") + .Replace("\f", "\\f") + .Replace("\n", "\\n") + .Replace("\r", "\\r") + .Replace("\t", "\\t")); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/LoggingContext.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/LoggingContext.cs.meta new file mode 100644 index 000000000..b04e599a5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/LoggingContext.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b2c848a07a285a7428a454b190e7c3a6 +timeCreated: 1591097750 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/ThreadedLogger.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/ThreadedLogger.cs new file mode 100644 index 000000000..b42eed05d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/ThreadedLogger.cs @@ -0,0 +1,318 @@ +using System; +using System.Collections.Concurrent; +using System.Text; + +using BestHTTP.PlatformSupport.Threading; + +namespace BestHTTP.Logger +{ + + + + public sealed class ThreadedLogger : BestHTTP.Logger.ILogger, IDisposable + { + public Loglevels Level { get; set; } + public ILogOutput Output { get { return this._output; } + set + { + if (this._output != value) + { + if (this._output != null) + this._output.Dispose(); + this._output = value; + } + } + } + private ILogOutput _output; + + public int InitialStringBufferCapacity = 256; + +#if !UNITY_WEBGL || UNITY_EDITOR + public TimeSpan ExitThreadAfterInactivity = TimeSpan.FromMinutes(1); + + private ConcurrentQueue jobs = new ConcurrentQueue(); + private System.Threading.AutoResetEvent newJobEvent = new System.Threading.AutoResetEvent(false); + + private volatile int threadCreated; + + private volatile bool isDisposed; +#endif + + private StringBuilder sb = new StringBuilder(0); + + public ThreadedLogger() + { + this.Level = UnityEngine.Debug.isDebugBuild ? Loglevels.Warning : Loglevels.Error; + this.Output = new UnityOutput(); + } + + public void Verbose(string division, string msg, LoggingContext context1 = null, LoggingContext context2 = null, LoggingContext context3 = null) { + AddJob(Loglevels.All, division, msg, null, context1, context2, context3); + } + + public void Information(string division, string msg, LoggingContext context1 = null, LoggingContext context2 = null, LoggingContext context3 = null) { + AddJob(Loglevels.Information, division, msg, null, context1, context2, context3); + } + + public void Warning(string division, string msg, LoggingContext context1 = null, LoggingContext context2 = null, LoggingContext context3 = null) { + AddJob(Loglevels.Warning, division, msg, null, context1, context2, context3); + } + + public void Error(string division, string msg, LoggingContext context1 = null, LoggingContext context2 = null, LoggingContext context3 = null) { + AddJob(Loglevels.Error, division, msg, null, context1, context2, context3); + } + + public void Exception(string division, string msg, Exception ex, LoggingContext context1 = null, LoggingContext context2 = null, LoggingContext context3 = null) { + AddJob(Loglevels.Exception, division, msg, ex, context1, context2, context3); + } + + private void AddJob(Loglevels level, string div, string msg, Exception ex, LoggingContext context1, LoggingContext context2, LoggingContext context3) + { + if (this.Level > level) + return; + + sb.EnsureCapacity(InitialStringBufferCapacity); + +#if !UNITY_WEBGL || UNITY_EDITOR + if (this.isDisposed) + return; +#endif + + var job = new LogJob + { + level = level, + division = div, + msg = msg, + ex = ex, + time = DateTime.Now, + threadId = System.Threading.Thread.CurrentThread.ManagedThreadId, + stackTrace = System.Environment.StackTrace, + context1 = context1 != null ? context1.Clone() : null, + context2 = context2 != null ? context2.Clone() : null, + context3 = context3 != null ? context3.Clone() : null + }; + +#if !UNITY_WEBGL || UNITY_EDITOR + // Start the consumer thread before enqueuing to get up and running sooner + if (System.Threading.Interlocked.CompareExchange(ref this.threadCreated, 1, 0) == 0) + BestHTTP.PlatformSupport.Threading.ThreadedRunner.RunLongLiving(ThreadFunc); + + this.jobs.Enqueue(job); + try + { + this.newJobEvent.Set(); + } + catch + { + try + { + this.Output.Write(job.level, job.ToJson(sb)); + } + catch + { } + return; + } + + // newJobEvent might timed out between the previous threadCreated check and newJobEvent.Set() calls closing the thread. + // So, here we check threadCreated again and create a new thread if needed. + if (System.Threading.Interlocked.CompareExchange(ref this.threadCreated, 1, 0) == 0) + BestHTTP.PlatformSupport.Threading.ThreadedRunner.RunLongLiving(ThreadFunc); +#else + this.Output.Write(job.level, job.ToJson(sb)); +#endif + } + +#if !UNITY_WEBGL || UNITY_EDITOR + private void ThreadFunc() + { + ThreadedRunner.SetThreadName("BestHTTP.Logger"); + try + { + do + { + // Waiting for a new log-job timed out + if (!this.newJobEvent.WaitOne(this.ExitThreadAfterInactivity)) + { + // clear StringBuilder's inner cache and exit the thread + sb.Length = 0; + sb.Capacity = 0; + System.Threading.Interlocked.Exchange(ref this.threadCreated, 0); + return; + } + + LogJob job; + while (this.jobs.TryDequeue(out job)) + { + try + { + this.Output.Write(job.level, job.ToJson(sb)); + } + catch + { } + } + + } while (!HTTPManager.IsQuitting); + System.Threading.Interlocked.Exchange(ref this.threadCreated, 0); + + // When HTTPManager.IsQuitting is true, there is still logging that will create a new thread after the last one quit + // and always writing a new entry about the exiting thread would be too much overhead. + // It would also hard to know what's the last log entry because some are generated on another thread non-deterministically. + + //var lastLog = new LogJob + //{ + // level = Loglevels.All, + // division = "ThreadedLogger", + // msg = "Log Processing Thread Quitting!", + // time = DateTime.Now, + // threadId = System.Threading.Thread.CurrentThread.ManagedThreadId, + //}; + // + //this.Output.WriteVerbose(lastLog.ToJson(sb)); + } + catch + { + System.Threading.Interlocked.Exchange(ref this.threadCreated, 0); + } + } + +#endif + + public void Dispose() + { +#if !UNITY_WEBGL || UNITY_EDITOR + this.isDisposed = true; + + if (this.newJobEvent != null) + { + this.newJobEvent.Close(); + this.newJobEvent = null; + } +#endif + + if (this.Output != null) + { + this.Output.Dispose(); + this.Output = new UnityOutput(); + } + + GC.SuppressFinalize(this); + } + } + + [BestHTTP.PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstructionAttribute] + struct LogJob + { + private static string[] LevelStrings = new string[] { "Verbose", "Information", "Warning", "Error", "Exception" }; + public Loglevels level; + public string division; + public string msg; + public Exception ex; + + public DateTime time; + public int threadId; + public string stackTrace; + + public LoggingContext context1; + public LoggingContext context2; + public LoggingContext context3; + + private static string WrapInColor(string str, string color) + { +#if UNITY_EDITOR + return string.Format("{0}", str, color); +#else + return str; +#endif + } + + public string ToJson(StringBuilder sb) + { + sb.Length = 0; + + sb.AppendFormat("{{\"tid\":{0},\"div\":\"{1}\",\"msg\":\"{2}\"", + WrapInColor(this.threadId.ToString(), "yellow"), + WrapInColor(this.division, "yellow"), + WrapInColor(LoggingContext.Escape(this.msg), "yellow")); + + if (ex != null) + { + sb.Append(",\"ex\": ["); + + Exception exception = this.ex; + + while (exception != null) + { + sb.Append("{\"msg\": \""); + sb.Append(LoggingContext.Escape(exception.Message)); + sb.Append("\", \"stack\": \""); + sb.Append(LoggingContext.Escape(exception.StackTrace)); + sb.Append("\"}"); + + exception = exception.InnerException; + + if (exception != null) + sb.Append(","); + } + + sb.Append("]"); + } + + if (this.stackTrace != null) + { + sb.Append(",\"stack\":\""); + ProcessStackTrace(sb); + sb.Append("\""); + } + else + sb.Append(",\"stack\":\"\""); + + if (this.context1 != null || this.context2 != null || this.context3 != null) + { + sb.Append(",\"ctxs\":["); + + if (this.context1 != null) + this.context1.ToJson(sb); + + if (this.context2 != null) + { + if (this.context1 != null) + sb.Append(","); + + this.context2.ToJson(sb); + } + + if (this.context3 != null) + { + if (this.context1 != null || this.context2 != null) + sb.Append(","); + + this.context3.ToJson(sb); + } + + sb.Append("]"); + } + else + sb.Append(",\"ctxs\":[]"); + + sb.AppendFormat(",\"t\":{0},\"ll\":\"{1}\",", + this.time.Ticks.ToString(), + LevelStrings[(int)this.level]); + + sb.Append("\"bh\":1}"); + + return sb.ToString(); + } + + private void ProcessStackTrace(StringBuilder sb) + { + if (string.IsNullOrEmpty(this.stackTrace)) + return; + + var lines = this.stackTrace.Split('\n'); + + // skip top 4 lines that would show the logger. + for (int i = 3; i < lines.Length; ++i) + sb.Append(LoggingContext.Escape(lines[i].Replace("BestHTTP.", ""))); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/ThreadedLogger.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/ThreadedLogger.cs.meta new file mode 100644 index 000000000..5c514928e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/ThreadedLogger.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 4209c767f5d900e4e87b9ae93cacad35 +timeCreated: 1588765781 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/UnityOutput.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/UnityOutput.cs new file mode 100644 index 000000000..ae187b408 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/UnityOutput.cs @@ -0,0 +1,32 @@ +using System; + +namespace BestHTTP.Logger +{ + public sealed class UnityOutput : ILogOutput + { + public void Write(Loglevels level, string logEntry) + { + switch (level) + { + case Loglevels.All: + case Loglevels.Information: + UnityEngine.Debug.Log(logEntry); + break; + + case Loglevels.Warning: + UnityEngine.Debug.LogWarning(logEntry); + break; + + case Loglevels.Error: + case Loglevels.Exception: + UnityEngine.Debug.LogError(logEntry); + break; + } + } + + public void Dispose() + { + GC.SuppressFinalize(this); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/UnityOutput.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/UnityOutput.cs.meta new file mode 100644 index 000000000..56e8eaefa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Logger/UnityOutput.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: cc3465944e901424f8b8b181e5c95e30 +timeCreated: 1591097750 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport.meta new file mode 100644 index 000000000..49315e33e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 164dda27bfff2e7449444d94e5c7de32 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections.meta new file mode 100644 index 000000000..672d0460b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f8b56237e32291c40859f2f1660759d9 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/Concurrent.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/Concurrent.meta new file mode 100644 index 000000000..0a856c6ff --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/Concurrent.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c5f7ba92cb5a67c45ae181fd85a63e58 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/Concurrent/ConcurrentQueue.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/Concurrent/ConcurrentQueue.cs new file mode 100644 index 000000000..6dbc895fb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/Concurrent/ConcurrentQueue.cs @@ -0,0 +1,283 @@ +// .NET 4.x eq, .NET 4.x => Disable +//PLATFORM_IMPLEMENTS_ATTACH_DIALOG;ENABLE_MONO;NET_4_6;ENABLE_PROFILER;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_VSTU; +//CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER + +// .NET 4.x eq, .NET Standard => Disable + +// .NET 3.5 eq, .NET 4.x => Enable +//PLATFORM_IMPLEMENTS_ATTACH_DIALOG;ENABLE_MONO;NET_4_6;ENABLE_PROFILER;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_VSTU + +// .NET 3.5 eq, .NET 2.0 => Enable +//PLATFORM_IMPLEMENTS_ATTACH_DIALOG;ENABLE_MONO;NET_2_0;NET_LEGACY;ENABLE_PROFILER;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_VSTU + +#if !NET_STANDARD_2_0 && !NETFX_CORE && ((NET_4_6 && !CSHARP_7_OR_LATER && UNITY_2018_3_OR_NEWER) || !NET_4_6) + +// ConcurrentQueue.cs +// +// Copyright (c) 2008 Jérémie "Garuma" Laval +// +// 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. +// +// + +using System.Collections.Generic; +using System.Runtime.Serialization; +using System.Threading; + +namespace System.Collections.Concurrent +{ + public class ConcurrentQueue : /*IProducerConsumerCollection,*/ IEnumerable, ICollection, + IEnumerable, ISerializable, IDeserializationCallback + { + class Node + { + public T Value; + public Node Next; + } + + Node head = new Node(); + Node tail; + int count; + + public ConcurrentQueue() + { + tail = head; + } + + public ConcurrentQueue(IEnumerable enumerable) : this() + { + foreach (T item in enumerable) + { + Enqueue(item); + } + } + + protected ConcurrentQueue(SerializationInfo info, StreamingContext context) + { + throw new NotImplementedException(); + } + + public void Enqueue(T item) + { + Interlocked.Increment(ref count); + + Node node = new Node(); + node.Value = item; + + Node oldTail = null; + Node oldNext = null; + + bool update = false; + while (!update) + { + oldTail = tail; + oldNext = oldTail.Next; + + // Did tail was already updated ? + if (tail == oldTail) + { + if (oldNext == null) + { + // The place is for us + update = Interlocked.CompareExchange(ref tail.Next, node, null) == null; + } + else + { + // another Thread already used the place so give him a hand by putting tail where it should be + Interlocked.CompareExchange(ref tail, oldNext, oldTail); + } + } + } + // At this point we added correctly our node, now we have to update tail. If it fails then it will be done by another thread + Interlocked.CompareExchange(ref tail, node, oldTail); + } + + //bool IProducerConsumerCollection.TryAdd (T item) + //{ + // Enqueue (item); + // return true; + //} + + /// + /// + /// + public bool TryDequeue(out T value) + { + value = default(T); + bool advanced = false; + while (!advanced) + { + Node oldHead = head; + Node oldTail = tail; + Node oldNext = oldHead.Next; + + if (oldHead == head) + { + // Empty case ? + if (oldHead == oldTail) + { + // This should be false then + if (oldNext != null) + { + // If not then the linked list is mal formed, update tail + Interlocked.CompareExchange(ref tail, oldNext, oldTail); + } + value = default(T); + return false; + } + else + { + value = oldNext.Value; + advanced = Interlocked.CompareExchange(ref head, oldNext, oldHead) == oldHead; + } + } + } + + Interlocked.Decrement(ref count); + return true; + } + + /// + /// + /// + public bool TryPeek(out T value) + { + if (IsEmpty) + { + value = default(T); + return false; + } + + Node first = head.Next; + value = first.Value; + return true; + } + + internal void Clear() + { + count = 0; + tail = head = new Node(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return (IEnumerator)InternalGetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return InternalGetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + return InternalGetEnumerator(); + } + + IEnumerator InternalGetEnumerator() + { + Node my_head = head; + while ((my_head = my_head.Next) != null) + { + yield return my_head.Value; + } + } + + void ICollection.CopyTo(Array array, int index) + { + T[] dest = array as T[]; + if (dest == null) + { + return; + } + + CopyTo(dest, index); + } + + public void CopyTo(T[] dest, int index) + { + IEnumerator e = InternalGetEnumerator(); + int i = index; + while (e.MoveNext()) + { + dest[i++] = e.Current; + } + } + + public T[] ToArray() + { + T[] dest = new T[count]; + CopyTo(dest, 0); + return dest; + } + + protected virtual void GetObjectData(SerializationInfo info, StreamingContext context) + { + throw new NotImplementedException(); + } + + void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) + { + GetObjectData(info, context); + } + + bool ICollection.IsSynchronized + { + get { return true; } + } + + protected virtual void OnDeserialization(object sender) + { + throw new NotImplementedException(); + } + + void IDeserializationCallback.OnDeserialization(object sender) + { + OnDeserialization(sender); + } + + //bool IProducerConsumerCollection.TryTake (out T item) + //{ + // return TryDequeue (out item); + //} + + object syncRoot = new object(); + object ICollection.SyncRoot + { + get { return syncRoot; } + } + + public int Count + { + get + { + return count; + } + } + + public bool IsEmpty + { + get + { + return count == 0; + } + } + } +} +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/Concurrent/ConcurrentQueue.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/Concurrent/ConcurrentQueue.cs.meta new file mode 100644 index 000000000..dc6a8ae90 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/Concurrent/ConcurrentQueue.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 92c1038bf57eea84489da7232ffcb827 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/ObjectModel.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/ObjectModel.meta new file mode 100644 index 000000000..d2085d2f3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/ObjectModel.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e58ef16077b4b374b806509cec119484 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/ObjectModel/ObservableDictionary.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/ObjectModel/ObservableDictionary.cs new file mode 100644 index 000000000..5cfdd7283 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/ObjectModel/ObservableDictionary.cs @@ -0,0 +1,263 @@ +using System; +using System.Linq; +using System.ComponentModel; +using System.Collections.Generic; +using System.Collections; + +#if NETFX_CORE + using specialized = System.Collections.Specialized; +#else + using specialized = PlatformSupport.Collections.Specialized; +#endif + +namespace PlatformSupport.Collections.ObjectModel +{ + public class ObservableDictionary : IDictionary, specialized.INotifyCollectionChanged, INotifyPropertyChanged + { + private const string CountString = "Count"; + private const string IndexerName = "Item[]"; + private const string KeysName = "Keys"; + private const string ValuesName = "Values"; + + private IDictionary _Dictionary; + protected IDictionary Dictionary + { + get { return _Dictionary; } + } + +#region Constructors + public ObservableDictionary() + { + _Dictionary = new Dictionary(); + } + public ObservableDictionary(IDictionary dictionary) + { + _Dictionary = new Dictionary(dictionary); + } + public ObservableDictionary(IEqualityComparer comparer) + { + _Dictionary = new Dictionary(comparer); + } + public ObservableDictionary(int capacity) + { + _Dictionary = new Dictionary(capacity); + } + public ObservableDictionary(IDictionary dictionary, IEqualityComparer comparer) + { + _Dictionary = new Dictionary(dictionary, comparer); + } + public ObservableDictionary(int capacity, IEqualityComparer comparer) + { + _Dictionary = new Dictionary(capacity, comparer); + } +#endregion + +#region IDictionary Members + + public void Add(TKey key, TValue value) + { + Insert(key, value, true); + } + + public bool ContainsKey(TKey key) + { + return Dictionary.ContainsKey(key); + } + + public ICollection Keys + { + get { return Dictionary.Keys; } + } + + public bool Remove(TKey key) + { + if (key == null) throw new ArgumentNullException("key"); + + TValue value; + Dictionary.TryGetValue(key, out value); + var removed = Dictionary.Remove(key); + if (removed) + + //OnCollectionChanged(NotifyCollectionChangedAction.Remove, new KeyValuePair(key, value)); + OnCollectionChanged(); + + + return removed; + } + + public bool TryGetValue(TKey key, out TValue value) + { + return Dictionary.TryGetValue(key, out value); + } + + public ICollection Values + { + get { return Dictionary.Values; } + } + + public TValue this[TKey key] + { + get + { + return Dictionary[key]; + } + set + { + Insert(key, value, false); + } + } + +#endregion + +#region ICollection> Members + + public void Add(KeyValuePair item) + { + Insert(item.Key, item.Value, true); + } + + public void Clear() + { + if (Dictionary.Count > 0) + { + Dictionary.Clear(); + OnCollectionChanged(); + } + } + + public bool Contains(KeyValuePair item) + { + return Dictionary.Contains(item); + } + + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + Dictionary.CopyTo(array, arrayIndex); + } + + public int Count + { + get { return Dictionary.Count; } + } + + public bool IsReadOnly + { + get { return Dictionary.IsReadOnly; } + } + + public bool Remove(KeyValuePair item) + { + return Remove(item.Key); + } + +#endregion + +#region IEnumerable> Members + + public IEnumerator> GetEnumerator() + { + return Dictionary.GetEnumerator(); + } + +#endregion + +#region IEnumerable Members + + IEnumerator IEnumerable.GetEnumerator() + { + return ((IEnumerable)Dictionary).GetEnumerator(); + } + +#endregion + +#region INotifyCollectionChanged Members + + public event specialized.NotifyCollectionChangedEventHandler CollectionChanged; + +#endregion + +#region INotifyPropertyChanged Members + + public event PropertyChangedEventHandler PropertyChanged; + +#endregion + + public void AddRange(IDictionary items) + { + if (items == null) throw new ArgumentNullException("items"); + + if (items.Count > 0) + { + if (Dictionary.Count > 0) + { + if (items.Keys.Any((k) => Dictionary.ContainsKey(k))) + throw new ArgumentException("An item with the same key has already been added."); + else + foreach (var item in items) Dictionary.Add(item); + } + else + _Dictionary = new Dictionary(items); + + OnCollectionChanged(specialized.NotifyCollectionChangedAction.Add, items.ToArray()); + } + } + + private void Insert(TKey key, TValue value, bool add) + { + if (key == null) throw new ArgumentNullException("key"); + + TValue item; + if (Dictionary.TryGetValue(key, out item)) + { + if (add) throw new ArgumentException("An item with the same key has already been added."); + if (Equals(item, value)) return; + Dictionary[key] = value; + + OnCollectionChanged(specialized.NotifyCollectionChangedAction.Replace, new KeyValuePair(key, value), new KeyValuePair(key, item)); + } + else + { + Dictionary[key] = value; + + OnCollectionChanged(specialized.NotifyCollectionChangedAction.Add, new KeyValuePair(key, value)); + } + } + + private void OnPropertyChanged() + { + OnPropertyChanged(CountString); + OnPropertyChanged(IndexerName); + OnPropertyChanged(KeysName); + OnPropertyChanged(ValuesName); + } + + protected virtual void OnPropertyChanged(string propertyName) + { + if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); + } + + private void OnCollectionChanged() + { + OnPropertyChanged(); + if (CollectionChanged != null) CollectionChanged(this, new specialized.NotifyCollectionChangedEventArgs(specialized.NotifyCollectionChangedAction.Reset)); + } + + private void OnCollectionChanged(specialized.NotifyCollectionChangedAction action, KeyValuePair changedItem) + { + OnPropertyChanged(); + if (CollectionChanged != null) CollectionChanged(this, new specialized.NotifyCollectionChangedEventArgs(action, changedItem)); + } + + private void OnCollectionChanged(specialized.NotifyCollectionChangedAction action, KeyValuePair newItem, KeyValuePair oldItem) + { + OnPropertyChanged(); + if (CollectionChanged != null) CollectionChanged(this, new specialized.NotifyCollectionChangedEventArgs(action, newItem, oldItem)); + } + + private void OnCollectionChanged(specialized.NotifyCollectionChangedAction action, IList newItems) + { + OnPropertyChanged(); + if (CollectionChanged != null) CollectionChanged(this, new specialized.NotifyCollectionChangedEventArgs(action, newItems)); + } + } +} \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/ObjectModel/ObservableDictionary.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/ObjectModel/ObservableDictionary.cs.meta new file mode 100644 index 000000000..2fa1dc411 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/ObjectModel/ObservableDictionary.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b5467f7e4679aea4bbadc541e674c23d +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/Specialized.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/Specialized.meta new file mode 100644 index 000000000..2815645a8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/Specialized.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ed08c64055c2bad49888497192d9980b +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/Specialized/NotifyCollectionChangedEventArgs.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/Specialized/NotifyCollectionChangedEventArgs.cs new file mode 100644 index 000000000..79df06bbc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/Specialized/NotifyCollectionChangedEventArgs.cs @@ -0,0 +1,467 @@ +#if !NETFX_CORE +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System; +using System.Collections; +using System.Diagnostics; + +namespace PlatformSupport.Collections.Specialized +{ + public delegate void NotifyCollectionChangedEventHandler(object sender, PlatformSupport.Collections.Specialized.NotifyCollectionChangedEventArgs e); + + public interface INotifyCollectionChanged + { + event NotifyCollectionChangedEventHandler CollectionChanged; + } + + /// + /// This enum describes the action that caused a CollectionChanged event. + /// + public enum NotifyCollectionChangedAction + { + /// One or more items were added to the collection. + Add, + /// One or more items were removed from the collection. + Remove, + /// One or more items were replaced in the collection. + Replace, + /// One or more items were moved within the collection. + Move, + /// The contents of the collection changed dramatically. + Reset, + } + + /// + /// Arguments for the CollectionChanged event. + /// A collection that supports INotifyCollectionChangedThis raises this event + /// whenever an item is added or removed, or when the contents of the collection + /// changes dramatically. + /// + public class NotifyCollectionChangedEventArgs : EventArgs + { + //------------------------------------------------------ + // + // Constructors + // + //------------------------------------------------------ + + /// + /// Construct a NotifyCollectionChangedEventArgs that describes a reset change. + /// + /// The action that caused the event (must be Reset). + public NotifyCollectionChangedEventArgs(PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction action) + { + if (action != PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Reset) + throw new ArgumentException("action"); + + InitializeAdd(action, null, -1); + } + + /// + /// Construct a NotifyCollectionChangedEventArgs that describes a one-item change. + /// + /// The action that caused the event; can only be Reset, Add or Remove action. + /// The item affected by the change. + public NotifyCollectionChangedEventArgs(PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction action, object changedItem) + { + if ((action != PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Add) && (action != PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Remove) + && (action != PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Reset)) + throw new ArgumentException("action"); + + if (action == PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Reset) + { + if (changedItem != null) + throw new ArgumentException("action"); + + InitializeAdd(action, null, -1); + } + else + { + InitializeAddOrRemove(action, new object[] { changedItem }, -1); + } + } + + /// + /// Construct a NotifyCollectionChangedEventArgs that describes a one-item change. + /// + /// The action that caused the event. + /// The item affected by the change. + /// The index where the change occurred. + public NotifyCollectionChangedEventArgs(PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction action, object changedItem, int index) + { + if ((action != PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Add) && (action != PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Remove) + && (action != PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Reset)) + throw new ArgumentException("action"); + + if (action == PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Reset) + { + if (changedItem != null) + throw new ArgumentException("action"); + if (index != -1) + throw new ArgumentException("action"); + + InitializeAdd(action, null, -1); + } + else + { + InitializeAddOrRemove(action, new object[] { changedItem }, index); + } + } + + /// + /// Construct a NotifyCollectionChangedEventArgs that describes a multi-item change. + /// + /// The action that caused the event. + /// The items affected by the change. + public NotifyCollectionChangedEventArgs(PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction action, IList changedItems) + { + if ((action != PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Add) && (action != PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Remove) + && (action != PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Reset)) + throw new ArgumentException("action"); + + if (action == PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Reset) + { + if (changedItems != null) + throw new ArgumentException("action"); + + InitializeAdd(action, null, -1); + } + else + { + if (changedItems == null) + throw new ArgumentNullException("changedItems"); + + InitializeAddOrRemove(action, changedItems, -1); + } + } + + /// + /// Construct a NotifyCollectionChangedEventArgs that describes a multi-item change (or a reset). + /// + /// The action that caused the event. + /// The items affected by the change. + /// The index where the change occurred. + public NotifyCollectionChangedEventArgs(PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction action, IList changedItems, int startingIndex) + { + if ((action != PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Add) && (action != PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Remove) + && (action != PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Reset)) + throw new ArgumentException("action"); + + if (action == PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Reset) + { + if (changedItems != null) + throw new ArgumentException("action"); + if (startingIndex != -1) + throw new ArgumentException("action"); + + InitializeAdd(action, null, -1); + } + else + { + if (changedItems == null) + throw new ArgumentNullException("changedItems"); + if (startingIndex < -1) + throw new ArgumentException("startingIndex"); + + InitializeAddOrRemove(action, changedItems, startingIndex); + } + } + + /// + /// Construct a NotifyCollectionChangedEventArgs that describes a one-item Replace event. + /// + /// Can only be a Replace action. + /// The new item replacing the original item. + /// The original item that is replaced. + public NotifyCollectionChangedEventArgs(PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction action, object newItem, object oldItem) + { + if (action != PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Replace) + throw new ArgumentException("action"); + + InitializeMoveOrReplace(action, new object[] { newItem }, new object[] { oldItem }, -1, -1); + } + + /// + /// Construct a NotifyCollectionChangedEventArgs that describes a one-item Replace event. + /// + /// Can only be a Replace action. + /// The new item replacing the original item. + /// The original item that is replaced. + /// The index of the item being replaced. + public NotifyCollectionChangedEventArgs(PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction action, object newItem, object oldItem, int index) + { + if (action != PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Replace) + throw new ArgumentException("action"); + + InitializeMoveOrReplace(action, new object[] { newItem }, new object[] { oldItem }, index, index); + } + + /// + /// Construct a NotifyCollectionChangedEventArgs that describes a multi-item Replace event. + /// + /// Can only be a Replace action. + /// The new items replacing the original items. + /// The original items that are replaced. + public NotifyCollectionChangedEventArgs(PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction action, IList newItems, IList oldItems) + { + if (action != PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Replace) + throw new ArgumentException("action"); + if (newItems == null) + throw new ArgumentNullException("newItems"); + if (oldItems == null) + throw new ArgumentNullException("oldItems"); + + InitializeMoveOrReplace(action, newItems, oldItems, -1, -1); + } + + /// + /// Construct a NotifyCollectionChangedEventArgs that describes a multi-item Replace event. + /// + /// Can only be a Replace action. + /// The new items replacing the original items. + /// The original items that are replaced. + /// The starting index of the items being replaced. + public NotifyCollectionChangedEventArgs(PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction action, IList newItems, IList oldItems, int startingIndex) + { + if (action != PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Replace) + throw new ArgumentException("action"); + if (newItems == null) + throw new ArgumentNullException("newItems"); + if (oldItems == null) + throw new ArgumentNullException("oldItems"); + + InitializeMoveOrReplace(action, newItems, oldItems, startingIndex, startingIndex); + } + + /// + /// Construct a NotifyCollectionChangedEventArgs that describes a one-item Move event. + /// + /// Can only be a Move action. + /// The item affected by the change. + /// The new index for the changed item. + /// The old index for the changed item. + public NotifyCollectionChangedEventArgs(PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction action, object changedItem, int index, int oldIndex) + { + if (action != PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Move) + throw new ArgumentException("action"); + if (index < 0) + throw new ArgumentException("index"); + + object[] changedItems = new object[] { changedItem }; + InitializeMoveOrReplace(action, changedItems, changedItems, index, oldIndex); + } + + /// + /// Construct a NotifyCollectionChangedEventArgs that describes a multi-item Move event. + /// + /// The action that caused the event. + /// The items affected by the change. + /// The new index for the changed items. + /// The old index for the changed items. + public NotifyCollectionChangedEventArgs(PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction action, IList changedItems, int index, int oldIndex) + { + if (action != PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Move) + throw new ArgumentException("action"); + if (index < 0) + throw new ArgumentException("index"); + + InitializeMoveOrReplace(action, changedItems, changedItems, index, oldIndex); + } + + /// + /// Construct a NotifyCollectionChangedEventArgs with given fields (no validation). Used by WinRT marshaling. + /// + internal NotifyCollectionChangedEventArgs(PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction action, IList newItems, IList oldItems, int newIndex, int oldIndex) + { + _action = action; + _newItems = (newItems == null) ? null : new ReadOnlyList(newItems); + _oldItems = (oldItems == null) ? null : new ReadOnlyList(oldItems); + _newStartingIndex = newIndex; + _oldStartingIndex = oldIndex; + } + + private void InitializeAddOrRemove(PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction action, IList changedItems, int startingIndex) + { + if (action == PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Add) + InitializeAdd(action, changedItems, startingIndex); + else if (action == PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction.Remove) + InitializeRemove(action, changedItems, startingIndex); + else + Debug.Assert(false, String.Format("Unsupported action: {0}", action.ToString())); + } + + private void InitializeAdd(PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction action, IList newItems, int newStartingIndex) + { + _action = action; + _newItems = (newItems == null) ? null : new ReadOnlyList(newItems); + _newStartingIndex = newStartingIndex; + } + + private void InitializeRemove(PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction action, IList oldItems, int oldStartingIndex) + { + _action = action; + _oldItems = (oldItems == null) ? null : new ReadOnlyList(oldItems); + _oldStartingIndex = oldStartingIndex; + } + + private void InitializeMoveOrReplace(PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction action, IList newItems, IList oldItems, int startingIndex, int oldStartingIndex) + { + InitializeAdd(action, newItems, startingIndex); + InitializeRemove(action, oldItems, oldStartingIndex); + } + + //------------------------------------------------------ + // + // Public Properties + // + //------------------------------------------------------ + + /// + /// The action that caused the event. + /// + public PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction Action + { + get { return _action; } + } + + /// + /// The items affected by the change. + /// + public IList NewItems + { + get { return _newItems; } + } + + /// + /// The old items affected by the change (for Replace events). + /// + public IList OldItems + { + get { return _oldItems; } + } + + /// + /// The index where the change occurred. + /// + public int NewStartingIndex + { + get { return _newStartingIndex; } + } + + /// + /// The old index where the change occurred (for Move events). + /// + public int OldStartingIndex + { + get { return _oldStartingIndex; } + } + + //------------------------------------------------------ + // + // Private Fields + // + //------------------------------------------------------ + + private PlatformSupport.Collections.Specialized.NotifyCollectionChangedAction _action; + private IList _newItems, _oldItems; + private int _newStartingIndex = -1; + private int _oldStartingIndex = -1; + } + + internal sealed class ReadOnlyList : IList + { + private readonly IList _list; + + internal ReadOnlyList(IList list) + { + Debug.Assert(list != null); + + _list = list; + } + + public int Count + { + get { return _list.Count; } + } + + public bool IsReadOnly + { + get { return true; } + } + + public bool IsFixedSize + { + get { return true; } + } + + public bool IsSynchronized + { + get { return _list.IsSynchronized; } + } + + public object this[int index] + { + get + { + return _list[index]; + } + set + { + throw new NotSupportedException(); + } + } + + public object SyncRoot + { + get { return _list.SyncRoot; } + } + + public int Add(object value) + { + throw new NotSupportedException(); + } + + public void Clear() + { + throw new NotSupportedException(); + } + + public bool Contains(object value) + { + return _list.Contains(value); + } + + public void CopyTo(Array array, int index) + { + _list.CopyTo(array, index); + } + + public IEnumerator GetEnumerator() + { + return _list.GetEnumerator(); + } + + public int IndexOf(object value) + { + return _list.IndexOf(value); + } + + public void Insert(int index, object value) + { + throw new NotSupportedException(); + } + + public void Remove(object value) + { + throw new NotSupportedException(); + } + + public void RemoveAt(int index) + { + throw new NotSupportedException(); + } + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/Specialized/NotifyCollectionChangedEventArgs.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/Specialized/NotifyCollectionChangedEventArgs.cs.meta new file mode 100644 index 000000000..eb7399978 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Collections/Specialized/NotifyCollectionChangedEventArgs.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7578ac65ac9a66a4f920882f3e04ea5f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem.meta new file mode 100644 index 000000000..222f79bae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c9301e8ec954a2d4babaa5044b7967e8 +folderAsset: yes +timeCreated: 1547115442 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem/DefaultIOService.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem/DefaultIOService.cs new file mode 100644 index 000000000..86b1b2a82 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem/DefaultIOService.cs @@ -0,0 +1,75 @@ +#if !NETFX_CORE //&& (!UNITY_WEBGL || UNITY_EDITOR) +using System; +using System.IO; + +namespace BestHTTP.PlatformSupport.FileSystem +{ + public sealed class DefaultIOService : IIOService + { + public Stream CreateFileStream(string path, FileStreamModes mode) + { + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("DefaultIOService", string.Format("CreateFileStream path: '{0}' mode: {1}", path, mode)); + + switch (mode) + { + case FileStreamModes.Create: + return new FileStream(path, FileMode.Create); + case FileStreamModes.OpenRead: + return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); + case FileStreamModes.OpenReadWrite: + return new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); + case FileStreamModes.Append: + return new FileStream(path, FileMode.Append); + } + + throw new NotImplementedException("DefaultIOService.CreateFileStream - mode not implemented: " + mode.ToString()); + } + + public void DirectoryCreate(string path) + { + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("DefaultIOService", string.Format("DirectoryCreate path: '{0}'", path)); + Directory.CreateDirectory(path); + } + + public bool DirectoryExists(string path) + { + bool exists = Directory.Exists(path); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("DefaultIOService", string.Format("DirectoryExists path: '{0}' exists: {1}", path, exists)); + + return exists; + } + + public string[] GetFiles(string path) + { + var files = Directory.GetFiles(path); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("DefaultIOService", string.Format("GetFiles path: '{0}' files count: {1}", path, files.Length)); + + return files; + } + + public void FileDelete(string path) + { + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("DefaultIOService", string.Format("FileDelete path: '{0}'", path)); + File.Delete(path); + } + + public bool FileExists(string path) + { + bool exists = File.Exists(path); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("DefaultIOService", string.Format("FileExists path: '{0}' exists: {1}", path, exists)); + + return exists; + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem/DefaultIOService.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem/DefaultIOService.cs.meta new file mode 100644 index 000000000..4d69f33b8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem/DefaultIOService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0324d8e9b4f9e7f4599f8e988e2e1927 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem/IIOService.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem/IIOService.cs new file mode 100644 index 000000000..43b375d01 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem/IIOService.cs @@ -0,0 +1,68 @@ +using System; +using System.IO; + +namespace BestHTTP.PlatformSupport.FileSystem +{ + /// + /// These are the different modes that the plugin want's to use a filestream. + /// + public enum FileStreamModes + { + /// + /// Create a new file. + /// + Create, + + /// + /// Open an existing file for reading. + /// + OpenRead, + + /// + /// Open or create a file for read and write. + /// + OpenReadWrite, + + /// + /// Open an existing file for writing to the end. + /// + Append + } + + public interface IIOService + { + /// + /// Create a directory for the given path. + /// + void DirectoryCreate(string path); + + /// + /// Return true if the directory exists for the given path. + /// + /// + /// + bool DirectoryExists(string path); + + /// + /// Return with the file names for the given path. + /// + /// + /// + string[] GetFiles(string path); + + /// + /// Delete the file for the given path. + /// + void FileDelete(string path); + + /// + /// Return true if the file exists on the given path. + /// + bool FileExists(string path); + + /// + /// Create a stream that can read and/or write a file on the given path. + /// + Stream CreateFileStream(string path, FileStreamModes mode); + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem/IIOService.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem/IIOService.cs.meta new file mode 100644 index 000000000..d60ad47b5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem/IIOService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 90b2250bdf568eb4aa0723186dfa0ecc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem/NETFXCOREIOService.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem/NETFXCOREIOService.cs new file mode 100644 index 000000000..da03b4ef9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem/NETFXCOREIOService.cs @@ -0,0 +1,246 @@ +#if NETFX_CORE +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using System.IO; +using System.Linq; +using System.Text; +using Windows.Storage; +using Windows.Storage.Streams; +using Windows.Foundation; + +namespace BestHTTP.PlatformSupport.FileSystem +{ + public sealed class NETFXCOREIOService : IIOService + { + public Stream CreateFileStream(string path, FileStreamModes mode) + { + switch (mode) + { + case FileStreamModes.Create: + return new FileStream(path, FileMode.Create); + case FileStreamModes.OpenRead: + return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); + case FileStreamModes.OpenReadWrite: + return new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); + case FileStreamModes.Append: + return new FileStream(path, FileMode.Append); + } + + throw new NotImplementedException("DefaultIOService.CreateFileStream - mode not implemented: " + mode.ToString()); + } + + public void DirectoryCreate(string path) + { + if (path == null) + throw new ArgumentNullException(); + if (string.IsNullOrWhiteSpace(path)) + throw new ArgumentNullException("Path is empty"); + StorageFolder folder = (StorageFolder)null; + path = path.Replace('/', '\\'); + string path1 = path; + Stack stack = new Stack(); + do + { + try + { + folder = NETFXCOREIOService.GetDirectoryForPath(path1); + break; + } + catch + { + int length = path1.LastIndexOf('\\'); + if (length < 0) + { + path1 = (string)null; + } + else + { + stack.Push(path1.Substring(length + 1)); + path1 = path1.Substring(0, length); + } + } + } + while (path1 != null); + if (path1 == null) + { + System.Diagnostics.Debug.WriteLine("NETFXCOREIOService.DirectoryCreate: Could not find any part of the path: " + path); + throw new IOException("Could not find any part of the path: " + path); + } + try + { + while (stack.Count > 0) + { + string desiredName = stack.Pop(); + if (string.IsNullOrWhiteSpace(desiredName) && stack.Count > 0) + throw new ArgumentNullException("Empty directory name in the path"); + IAsyncOperation folderAsync = folder.CreateFolderAsync(desiredName); + WindowsRuntimeSystemExtensions.AsTask(folderAsync).Wait(); + folder = folderAsync.GetResults(); + } + } + catch (IOException ex) + { + System.Diagnostics.Debug.WriteLine("NETFXCOREIOService.DirectoryCreate: " + ex.Message + "\n" + ex.StackTrace); + throw; + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine("NETFXCOREIOService.DirectoryCreate: " + ex.Message + "\n" + ex.StackTrace); + throw new IOException(ex.Message, ex); + } + } + + public bool DirectoryExists(string path) + { + try + { + return NETFXCOREIOService.GetDirectoryForPath(path) != null; + } + catch + { + return false; + } + } + + public string[] GetFiles(string path) + { + if (path == null) + throw new ArgumentNullException(); + if (string.IsNullOrWhiteSpace(path)) + throw new ArgumentException("Path is empty"); + try + { + IAsyncOperation> filesAsync = NETFXCOREIOService.GetDirectoryForPath(path).GetFilesAsync(); + WindowsRuntimeSystemExtensions.AsTask>(filesAsync).Wait(); + IReadOnlyList results = filesAsync.GetResults(); + List list = new List(Enumerable.Count((IEnumerable)results)); + foreach (StorageFile storageFile in (IEnumerable)results) + list.Add(storageFile.Path); + return list.ToArray(); + } + catch (IOException ex) + { + System.Diagnostics.Debug.WriteLine("NETFXCOREIOService.GetFiles: " + ex.Message + "\n" + ex.StackTrace); + throw; + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine("NETFXCOREIOService.GetFiles: " + ex.Message + "\n" + ex.StackTrace); + throw new IOException(ex.Message, ex); + } + } + + public void FileDelete(string path) + { + if (path == null) + throw new ArgumentNullException(); + if (path.Trim() == "") + throw new ArgumentException(); + try + { + WindowsRuntimeSystemExtensions.AsTask(NETFXCOREIOService.GetFileForPathOrURI(path).DeleteAsync()) + .Wait(); + } + catch (Exception ex) + { + throw NETFXCOREIOService.GetRethrowException(ex); + } + } + + public bool FileExists(string path) + { + try + { + return NETFXCOREIOService.GetFileForPathOrURI(path) != null; + } + catch + { + return false; + } + } + + private const string LOCAL_FOLDER = "ms-appdata:///local/"; + private const string ROAMING_FOLDER = "ms-appdata:///roaming/"; + private const string TEMP_FOLDER = "ms-appdata:///temp/"; + private const string STORE_FOLDER = "isostore:/"; + + private static Exception GetRethrowException(Exception ex) + { + System.Diagnostics.Debug.WriteLine("NETFXCOREIOService.GetRethrowException: " + ex.Message + "\n" + ex.StackTrace); + if (ex.GetType() == typeof(IOException)) + return ex; + else + return (Exception)new IOException(ex.Message, ex); + } + + private static StorageFolder GetDirectoryForPath(string path) + { + IAsyncOperation folderFromPathAsync = StorageFolder.GetFolderFromPathAsync(path); + WindowsRuntimeSystemExtensions.AsTask(folderFromPathAsync).Wait(); + return folderFromPathAsync.GetResults(); + } + + private static StorageFolder GetFolderForURI(string uri) + { + uri = uri.ToLower(); + StorageFolder storageFolder1; + if (uri.StartsWith("ms-appdata:///local/")) + { + storageFolder1 = ApplicationData.Current.LocalFolder; + uri = uri.Replace("ms-appdata:///local/", ""); + } + else if (uri.StartsWith("ms-appdata:///roaming/")) + { + storageFolder1 = ApplicationData.Current.RoamingFolder; + uri = uri.Replace("ms-appdata:///roaming/", ""); + } + else + { + if (!uri.StartsWith("ms-appdata:///temp/")) + throw new Exception("Unsupported URI: " + uri); + storageFolder1 = ApplicationData.Current.TemporaryFolder; + uri = uri.Replace("ms-appdata:///temp/", ""); + } + string[] strArray = uri.Split(new char[1] { '/' }); + for (int index = 0; index < strArray.Length - 1; ++index) + { + Task> task = WindowsRuntimeSystemExtensions.AsTask>(storageFolder1.CreateFolderQuery().GetFoldersAsync()); + task.Wait(); + if (task.Status != TaskStatus.RanToCompletion) + throw new Exception("Failed to find folder: " + strArray[index]); + IReadOnlyList result = task.Result; + bool flag = false; + foreach (StorageFolder storageFolder2 in (IEnumerable)result) + { + if (storageFolder2.Name == strArray[index]) + { + storageFolder1 = storageFolder2; + flag = true; + break; + } + } + if (!flag) + throw new Exception("Folder not found: " + strArray[index]); + } + return storageFolder1; + } + + internal static StorageFolder GetFolderForPathOrURI(string path) + { + if (System.Uri.IsWellFormedUriString(path, UriKind.RelativeOrAbsolute)) + return NETFXCOREIOService.GetFolderForURI(path); + IAsyncOperation folderFromPathAsync = StorageFolder.GetFolderFromPathAsync(Path.GetDirectoryName(path)); + WindowsRuntimeSystemExtensions.AsTask(folderFromPathAsync).Wait(); + return folderFromPathAsync.GetResults(); + } + + internal static StorageFile GetFileForPathOrURI(string path) + { + IAsyncOperation source = !System.Uri.IsWellFormedUriString(path, UriKind.RelativeOrAbsolute) ? StorageFile.GetFileFromPathAsync(path) : StorageFile.GetFileFromApplicationUriAsync(new System.Uri(path)); + WindowsRuntimeSystemExtensions.AsTask(source).Wait(); + return source.GetResults(); + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem/NETFXCOREIOService.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem/NETFXCOREIOService.cs.meta new file mode 100644 index 000000000..16ebe6e77 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/FileSystem/NETFXCOREIOService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 21d8ec4418877f947b6d37200985904d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP.meta new file mode 100644 index 000000000..e08ddc996 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1dcac31963b5e704ebd652b07ada8528 +folderAsset: yes +timeCreated: 1597434329 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP/Il2CppEagerStaticClassConstructionAttribute.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP/Il2CppEagerStaticClassConstructionAttribute.cs new file mode 100644 index 000000000..9e35ca19a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP/Il2CppEagerStaticClassConstructionAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace BestHTTP.PlatformSupport.IL2CPP +{ + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, Inherited = false, AllowMultiple = false)] + public class Il2CppEagerStaticClassConstructionAttribute : Attribute + { + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP/Il2CppEagerStaticClassConstructionAttribute.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP/Il2CppEagerStaticClassConstructionAttribute.cs.meta new file mode 100644 index 000000000..454f0a70f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP/Il2CppEagerStaticClassConstructionAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7d395e32cc6d9a94094b72b5c8bf83dd +timeCreated: 1598201534 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP/Il2CppSetOptionAttribute.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP/Il2CppSetOptionAttribute.cs new file mode 100644 index 000000000..6d4972f27 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP/Il2CppSetOptionAttribute.cs @@ -0,0 +1,75 @@ +// https://forum.unity.com/threads/il2cpp-code-generation-options.367074/ +using System; + +namespace BestHTTP.PlatformSupport.IL2CPP +{ + /// + /// The code generation options available for IL to C++ conversion. + /// Enable or disabled these with caution. + /// + public enum Option + { + /// + /// Enable or disable code generation for null checks. + /// + /// Global null check support is enabled by default when il2cpp.exe + /// is launched from the Unity editor. + /// + /// Disabling this will prevent NullReferenceException exceptions from + /// being thrown in generated code. In *most* cases, code that dereferences + /// a null pointer will crash then. Sometimes the point where the crash + /// happens is later than the location where the null reference check would + /// have been emitted though. + /// + NullChecks = 1, + /// + /// Enable or disable code generation for array bounds checks. + /// + /// Global array bounds check support is enabled by default when il2cpp.exe + /// is launched from the Unity editor. + /// + /// Disabling this will prevent IndexOutOfRangeException exceptions from + /// being thrown in generated code. This will allow reading and writing to + /// memory outside of the bounds of an array without any runtime checks. + /// Disable this check with extreme caution. + /// + ArrayBoundsChecks = 2, + /// + /// Enable or disable code generation for divide by zero checks. + /// + /// Global divide by zero check support is disabled by default when il2cpp.exe + /// is launched from the Unity editor. + /// + /// Enabling this will cause DivideByZeroException exceptions to be + /// thrown in generated code. Most code doesn't need to handle this + /// exception, so it is probably safe to leave it disabled. + /// + DivideByZeroChecks = 3, + } + + /// + /// Use this attribute on a class, method, or property to inform the IL2CPP code conversion utility to override the + /// global setting for one of a few different runtime checks. + /// + /// Example: + /// + /// [Il2CppSetOption(Option.NullChecks, false)] + /// public static string MethodWithNullChecksDisabled() + /// { + /// var tmp = new Object(); + /// return tmp.ToString(); + /// } + /// + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] + public class Il2CppSetOptionAttribute : Attribute + { + public Option Option { get; private set; } + public object Value { get; private set; } + + public Il2CppSetOptionAttribute(Option option, object value) + { + Option = option; + Value = value; + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP/Il2CppSetOptionAttribute.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP/Il2CppSetOptionAttribute.cs.meta new file mode 100644 index 000000000..032af2ee5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP/Il2CppSetOptionAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: d94ea9f7eaa82e347907389dff592960 +timeCreated: 1597434329 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP/PreserveAttribute.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP/PreserveAttribute.cs new file mode 100644 index 000000000..349bfa06c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP/PreserveAttribute.cs @@ -0,0 +1,21 @@ +using System; + +namespace BestHTTP.PlatformSupport.IL2CPP +{ + /// + /// https://docs.unity3d.com/Manual/ManagedCodeStripping.html + /// + [AttributeUsage( + AttributeTargets.Assembly | + AttributeTargets.Class | + AttributeTargets.Constructor | + AttributeTargets.Delegate | + AttributeTargets.Enum | + AttributeTargets.Event | + AttributeTargets.Field | + AttributeTargets.Interface | + AttributeTargets.Method | + AttributeTargets.Property | + AttributeTargets.Struct)] + public sealed class PreserveAttribute : Attribute {} +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP/PreserveAttribute.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP/PreserveAttribute.cs.meta new file mode 100644 index 000000000..107c2d465 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/IL2CPP/PreserveAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa95c6fcbe201444a82ab44f3a3dcc9b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory.meta new file mode 100644 index 000000000..944181fa8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e15bef0b716df29479230fc596fe48a9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory/BufferPool.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory/BufferPool.cs new file mode 100644 index 000000000..7adc0db25 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory/BufferPool.cs @@ -0,0 +1,498 @@ +using System; +using System.Collections.Generic; +using System.Threading; + +using BestHTTP.PlatformSupport.Threading; +using System.Linq; + +#if NET_STANDARD_2_0 || NETFX_CORE +using System.Runtime.CompilerServices; +#endif + +namespace BestHTTP.PlatformSupport.Memory +{ + [BestHTTP.PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstructionAttribute] + public static class BufferPool + { + public static readonly byte[] NoData = new byte[0]; + + /// + /// Setting this property to false the pooling mechanism can be disabled. + /// + public static bool IsEnabled { + get { return _isEnabled; } + set + { + _isEnabled = value; + + // When set to non-enabled remove all stored entries + if (!_isEnabled) + Clear(); + } + } + private static volatile bool _isEnabled = true; + + /// + /// Buffer entries that released back to the pool and older than this value are moved when next maintenance is triggered. + /// + public static TimeSpan RemoveOlderThan = TimeSpan.FromSeconds(30); + + /// + /// How often pool maintenance must run. + /// + public static TimeSpan RunMaintenanceEvery = TimeSpan.FromSeconds(10); + + /// + /// Minimum buffer size that the plugin will allocate when the requested size is smaller than this value, and canBeLarger is set to true. + /// + public static long MinBufferSize = 32; + + /// + /// Maximum size of a buffer that the plugin will store. + /// + public static long MaxBufferSize = long.MaxValue; + + /// + /// Maximum accumulated size of the stored buffers. + /// + public static long MaxPoolSize = 30 * 1024 * 1024; + + /// + /// Whether to remove empty buffer stores from the free list. + /// + public static bool RemoveEmptyLists = false; + + /// + /// If it set to true and a byte[] is released more than once it will log out an error. + /// + public static bool IsDoubleReleaseCheckEnabled = false; + + // It must be sorted by buffer size! + private readonly static List FreeBuffers = new List(); + private static DateTime lastMaintenance = DateTime.MinValue; + + // Statistics + private static long PoolSize = 0; + private static long GetBuffers = 0; + private static long ReleaseBuffers = 0; + private static long Borrowed = 0; + private static long ArrayAllocations = 0; + +#if BESTHTTP_ENABLE_BUFFERPOOL_BORROWED_BUFFERS_COLLECTION + private static Dictionary BorrowedBuffers = new Dictionary(); +#endif + + private readonly static ReaderWriterLockSlim rwLock = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion); + + static BufferPool() + { +#if UNITY_EDITOR + IsDoubleReleaseCheckEnabled = true; +#else + IsDoubleReleaseCheckEnabled = false; +#endif + } + + /// + /// Get byte[] from the pool. If canBeLarge is true, the returned buffer might be larger than the requested size. + /// + public static byte[] Get(long size, bool canBeLarger) + { + if (!_isEnabled) + return new byte[size]; + + // Return a fix reference for 0 length requests. Any resize call (even Array.Resize) creates a new reference + // so we are safe to expose it to multiple callers. + if (size == 0) + return BufferPool.NoData; + + if (canBeLarger) + { + if (size < MinBufferSize) + size = MinBufferSize; + else if (!IsPowerOfTwo(size)) + size = NextPowerOf2(size); + } + else + { + if (size < MinBufferSize) + return new byte[size]; + } + + if (FreeBuffers.Count == 0) + { + Interlocked.Add(ref Borrowed, size); + Interlocked.Increment(ref ArrayAllocations); + + var result = new byte[size]; + +#if BESTHTTP_ENABLE_BUFFERPOOL_BORROWED_BUFFERS_COLLECTION + lock (FreeBuffers) + BorrowedBuffers.Add(result, ProcessStackTrace(Environment.StackTrace)); +#endif + + return result; + } + + BufferDesc bufferDesc = FindFreeBuffer(size, canBeLarger); + + if (bufferDesc.buffer == null) + { + Interlocked.Add(ref Borrowed, size); + Interlocked.Increment(ref ArrayAllocations); + + var result = new byte[size]; + +#if BESTHTTP_ENABLE_BUFFERPOOL_BORROWED_BUFFERS_COLLECTION + lock (FreeBuffers) + BorrowedBuffers.Add(result, ProcessStackTrace(Environment.StackTrace)); +#endif + + return result; + } + else + { +#if BESTHTTP_ENABLE_BUFFERPOOL_BORROWED_BUFFERS_COLLECTION + lock (FreeBuffers) + BorrowedBuffers.Add(bufferDesc.buffer, ProcessStackTrace(Environment.StackTrace)); +#endif + + Interlocked.Increment(ref GetBuffers); + } + + Interlocked.Add(ref Borrowed, bufferDesc.buffer.Length); + Interlocked.Add(ref PoolSize, -bufferDesc.buffer.Length); + + return bufferDesc.buffer; + } + + /// + /// Release back a BufferSegment's data to the pool. + /// + /// +#if NET_STANDARD_2_0 || NETFX_CORE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static void Release(BufferSegment segment) + { + Release(segment.Data); + } + + /// + /// Release back a byte array to the pool. + /// + public static void Release(byte[] buffer) + { + if (!_isEnabled || buffer == null) + return; + + int size = buffer.Length; + +#if BESTHTTP_ENABLE_BUFFERPOOL_BORROWED_BUFFERS_COLLECTION + lock (FreeBuffers) + BorrowedBuffers.Remove(buffer); +#endif + + Interlocked.Add(ref Borrowed, -size); + + if (size == 0 || size < MinBufferSize || size > MaxBufferSize) + return; + + using (new WriteLock(rwLock)) + { + var ps = Interlocked.Read(ref PoolSize); + if (ps + size > MaxPoolSize) + return; + + Interlocked.Add(ref PoolSize, size); + + ReleaseBuffers++; + + AddFreeBuffer(buffer); + } + } + + /// + /// Resize a byte array. It will release the old one to the pool, and the new one is from the pool too. + /// + public static byte[] Resize(ref byte[] buffer, int newSize, bool canBeLarger, bool clear) + { + if (!_isEnabled) + { + Array.Resize(ref buffer, newSize); + return buffer; + } + + byte[] newBuf = BufferPool.Get(newSize, canBeLarger); + if (buffer != null) + { + if (!clear) + Array.Copy(buffer, 0, newBuf, 0, Math.Min(newBuf.Length, buffer.Length)); + BufferPool.Release(buffer); + } + + if (clear) + Array.Clear(newBuf, 0, newSize); + + return buffer = newBuf; + } + + + public static KeyValuePair[] GetBorrowedBuffers() + { +#if BESTHTTP_ENABLE_BUFFERPOOL_BORROWED_BUFFERS_COLLECTION + lock (FreeBuffers) + return BorrowedBuffers.ToArray(); +#else + return new KeyValuePair[0]; +#endif + } + +#if true //UNITY_EDITOR + public struct BufferStats + { + public long Size; + public int Count; + } + + public struct BufferPoolStats + { + public long GetBuffers; + public long ReleaseBuffers; + public long PoolSize; + public long MaxPoolSize; + public long MinBufferSize; + public long MaxBufferSize; + + public long Borrowed; + public long ArrayAllocations; + + public int FreeBufferCount; + public List FreeBufferStats; + + public TimeSpan NextMaintenance; + } + + public static void GetStatistics(ref BufferPoolStats stats) + { + using (new ReadLock(rwLock)) + { + stats.GetBuffers = GetBuffers; + stats.ReleaseBuffers = ReleaseBuffers; + stats.PoolSize = PoolSize; + stats.MinBufferSize = MinBufferSize; + stats.MaxBufferSize = MaxBufferSize; + stats.MaxPoolSize = MaxPoolSize; + + stats.Borrowed = Borrowed; + stats.ArrayAllocations = ArrayAllocations; + + stats.FreeBufferCount = FreeBuffers.Count; + if (stats.FreeBufferStats == null) + stats.FreeBufferStats = new List(FreeBuffers.Count); + else + stats.FreeBufferStats.Clear(); + + for (int i = 0; i < FreeBuffers.Count; ++i) + { + BufferStore store = FreeBuffers[i]; + List buffers = store.buffers; + + BufferStats bufferStats = new BufferStats(); + bufferStats.Size = store.Size; + bufferStats.Count = buffers.Count; + + stats.FreeBufferStats.Add(bufferStats); + } + + stats.NextMaintenance = (lastMaintenance + RunMaintenanceEvery) - DateTime.UtcNow; + } + } +#endif + + /// + /// Remove all stored entries instantly. + /// + public static void Clear() + { + using (new WriteLock(rwLock)) + { + FreeBuffers.Clear(); + Interlocked.Exchange(ref PoolSize, 0); + } + } + + /// + /// Internal function called by the plugin to remove old, non-used buffers. + /// + internal static void Maintain() + { + DateTime now = DateTime.UtcNow; + if (!_isEnabled || lastMaintenance + RunMaintenanceEvery > now) + return; + lastMaintenance = now; + + DateTime olderThan = now - RemoveOlderThan; + using (new WriteLock(rwLock)) + { + for (int i = 0; i < FreeBuffers.Count; ++i) + { + BufferStore store = FreeBuffers[i]; + List buffers = store.buffers; + + for (int cv = buffers.Count - 1; cv >= 0; cv--) + { + BufferDesc desc = buffers[cv]; + + if (desc.released < olderThan) + { + // buffers stores available buffers ascending by age. So, when we find an old enough, we can + // delete all entries in the [0..cv] range. + + int removeCount = cv + 1; + buffers.RemoveRange(0, removeCount); + PoolSize -= (int)(removeCount * store.Size); + break; + } + } + + if (RemoveEmptyLists && buffers.Count == 0) + FreeBuffers.RemoveAt(i--); + } + } + } + +#region Private helper functions + +#if NET_STANDARD_2_0 || NETFX_CORE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static bool IsPowerOfTwo(long x) + { + return (x & (x - 1)) == 0; + } + +#if NET_STANDARD_2_0 || NETFX_CORE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static long NextPowerOf2(long x) + { + long pow = 1; + while (pow <= x) + pow *= 2; + return pow; + } + +#if NET_STANDARD_2_0 || NETFX_CORE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static BufferDesc FindFreeBuffer(long size, bool canBeLarger) + { + // Previously it was an upgradable read lock, and later a write lock around store.buffers.RemoveAt. + // However, checking store.buffers.Count in the if statement, and then get the last buffer and finally write lock the RemoveAt call + // has plenty of time for race conditions. + // Another thread could change store.buffers after checking count and getting the last element and before the write lock, + // so in theory we could return with an element and remove another one from the buffers list. + // A new FindFreeBuffer call could return it again causing malformed data and/or releasing it could duplicate it in the store. + // I tried to reproduce both issues (malformed data, duble entries) with a test where creating growin number of threads getting buffers writing to them, check the buffers and finally release them + // would fail _only_ if i used a plain Enter/Exit ReadLock pair, or no locking at all. + // But, because there's quite a few different platforms and unity's implementation can be different too, switching from an upgradable lock to a more stricter write lock seems safer. + // + // An interesting read can be found here: https://stackoverflow.com/questions/21411018/readerwriterlockslim-enterupgradeablereadlock-always-a-deadlock + + using (new WriteLock(rwLock)) + { + for (int i = 0; i < FreeBuffers.Count; ++i) + { + BufferStore store = FreeBuffers[i]; + + if (store.buffers.Count > 0 && (store.Size == size || (canBeLarger && store.Size > size))) + { + // Getting the last one has two desired effect: + // 1.) RemoveAt should be quicker as it don't have to move all the remaining entries + // 2.) Old, non-used buffers will age. Getting a buffer and putting it back will not keep buffers fresh. + + BufferDesc lastFree = store.buffers[store.buffers.Count - 1]; + store.buffers.RemoveAt(store.buffers.Count - 1); + + return lastFree; + } + } + } + + return BufferDesc.Empty; + } + +#if NET_STANDARD_2_0 || NETFX_CORE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static void AddFreeBuffer(byte[] buffer) + { + int bufferLength = buffer.Length; + + for (int i = 0; i < FreeBuffers.Count; ++i) + { + BufferStore store = FreeBuffers[i]; + + if (store.Size == bufferLength) + { + // We highly assume here that every buffer will be released only once. + // Checking for double-release would mean that we have to do another O(n) operation, where n is the + // count of the store's elements. + + if (IsDoubleReleaseCheckEnabled) + for (int cv = 0; cv < store.buffers.Count; ++cv) + { + var entry = store.buffers[cv]; + if (System.Object.ReferenceEquals(entry.buffer, buffer)) + { + HTTPManager.Logger.Error("BufferPool", string.Format("Buffer ({0}) already added to the pool!", entry.ToString())); + return; + } + } + + store.buffers.Add(new BufferDesc(buffer)); + return; + } + + if (store.Size > bufferLength) + { + FreeBuffers.Insert(i, new BufferStore(bufferLength, buffer)); + return; + } + } + + // When we reach this point, there's no same sized or larger BufferStore present, so we have to add a new one + // to the end of our list. + FreeBuffers.Add(new BufferStore(bufferLength, buffer)); + } + +#if BESTHTTP_ENABLE_BUFFERPOOL_BORROWED_BUFFERS_COLLECTION + private static System.Text.StringBuilder stacktraceBuilder; + private static string ProcessStackTrace(string stackTrace) + { + if (string.IsNullOrEmpty(stackTrace)) + return string.Empty; + + var lines = stackTrace.Split('\n'); + + if (stacktraceBuilder == null) + stacktraceBuilder = new System.Text.StringBuilder(lines.Length); + else + stacktraceBuilder.Length = 0; + + // skip top 4 lines that would show the logger. + + for (int i = 0; i < lines.Length; ++i) + if (!lines[i].Contains(".Memory.BufferPool") && + !lines[i].Contains("Environment") && + !lines[i].Contains("System.Threading")) + stacktraceBuilder.Append(lines[i].Replace("BestHTTP.", "")); + + return stacktraceBuilder.ToString(); + } +#endif + +#endregion + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory/BufferPool.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory/BufferPool.cs.meta new file mode 100644 index 000000000..6f8493bb0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory/BufferPool.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 38406f68b308d4f45982c0381665d567 +timeCreated: 1571210041 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory/BufferSegment.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory/BufferSegment.cs new file mode 100644 index 000000000..0140a528c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory/BufferSegment.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; + +using BestHTTP.PlatformSupport.Threading; +using System.Collections.Concurrent; +using BestHTTP.PlatformSupport.Text; + +#if NET_STANDARD_2_0 || NETFX_CORE +using System.Runtime.CompilerServices; +#endif + +namespace BestHTTP.PlatformSupport.Memory +{ + [BestHTTP.PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstructionAttribute] + public struct BufferSegment + { + private const int ToStringMaxDumpLength = 128; + + public static readonly BufferSegment Empty = new BufferSegment(null, 0, 0); + + public readonly byte[] Data; + public readonly int Offset; + public readonly int Count; + + public BufferSegment(byte[] data, int offset, int count) + { + this.Data = data; + this.Offset = offset; + this.Count = count; + } + + public BufferSegment Slice(int newOffset) + { + int diff = newOffset - this.Offset; + return new BufferSegment(this.Data, newOffset, this.Count - diff); + } + + public BufferSegment Slice(int offset, int count) + { + return new BufferSegment(this.Data, offset, count); + } + + public override bool Equals(object obj) + { + if (obj == null || !(obj is BufferSegment)) + return false; + + return Equals((BufferSegment)obj); + } + + public bool Equals(BufferSegment other) + { + return this.Data == other.Data && + this.Offset == other.Offset && + this.Count == other.Count; + } + + public override int GetHashCode() + { + return (this.Data != null ? this.Data.GetHashCode() : 0) * 21 + this.Offset + this.Count; + } + + public static bool operator ==(BufferSegment left, BufferSegment right) + { + return left.Equals(right); + } + + public static bool operator !=(BufferSegment left, BufferSegment right) + { + return !left.Equals(right); + } + + public override string ToString() + { + var sb = StringBuilderPool.Get(this.Count + 5); + sb.Append("[BufferSegment "); + sb.AppendFormat("Offset: {0:N0} ", this.Offset); + sb.AppendFormat("Count: {0:N0} ", this.Count); + sb.Append("Data: ["); + + if (this.Count > 0) + { + if (this.Count <= ToStringMaxDumpLength) + { + sb.AppendFormat("{0:X2}", this.Data[this.Offset]); + for (int i = 1; i < this.Count; ++i) + sb.AppendFormat(", {0:X2}", this.Data[this.Offset + i]); + } + else + sb.Append("..."); + } + + sb.Append("]]"); + return StringBuilderPool.ReleaseAndGrab(sb); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory/BufferSegment.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory/BufferSegment.cs.meta new file mode 100644 index 000000000..568bdcad8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory/BufferSegment.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 113ff5eff505e8f41bd264ab17bf78b1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory/BufferStore.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory/BufferStore.cs new file mode 100644 index 000000000..f6c0af359 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory/BufferStore.cs @@ -0,0 +1,109 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; + +using BestHTTP.PlatformSupport.Threading; +using System.Collections.Concurrent; + +#if NET_STANDARD_2_0 || NETFX_CORE +using System.Runtime.CompilerServices; +#endif + +namespace BestHTTP.PlatformSupport.Memory +{ + [BestHTTP.PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstructionAttribute] + public struct PooledBuffer : IDisposable + { + public byte[] Data; + public int Length; + + public PooledBuffer(byte[] data) + { + this.Data = data; + this.Length = data != null ? data.Length : 0; + } + + public PooledBuffer(BufferSegment segment) + { + this.Data = segment.Data; + this.Length = segment.Count; + } + + public PooledBuffer(byte[] data, int length) + { + this.Data = data; + this.Length = length; + } + + public void Dispose() + { + if (this.Data != null) + BufferPool.Release(this.Data); + this.Data = null; + } + } + + /// + /// Private data struct that contains the size <-> byte arrays mapping. + /// + [BestHTTP.PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstructionAttribute] + struct BufferStore + { + /// + /// Size/length of the arrays stored in the buffers. + /// + public readonly long Size; + + /// + /// + /// + public List buffers; + + public BufferStore(long size) + { + this.Size = size; + this.buffers = new List(); + } + + /// + /// Create a new store with its first byte[] to store. + /// + public BufferStore(long size, byte[] buffer) + : this(size) + { + this.buffers.Add(new BufferDesc(buffer)); + } + + public override string ToString() + { + return string.Format("[BufferStore Size: {0:N0}, Buffers: {1}]", this.Size, this.buffers.Count); + } + } + + [BestHTTP.PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstructionAttribute] + struct BufferDesc + { + public static readonly BufferDesc Empty = new BufferDesc(null); + + /// + /// The actual reference to the stored byte array. + /// + public byte[] buffer; + + /// + /// When the buffer is put back to the pool. Based on this value the pool will calculate the age of the buffer. + /// + public DateTime released; + + public BufferDesc(byte[] buff) + { + this.buffer = buff; + this.released = DateTime.UtcNow; + } + public override string ToString() + { + return string.Format("[BufferDesc Size: {0}, Released: {1}]", this.buffer.Length, DateTime.UtcNow - this.released); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory/BufferStore.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory/BufferStore.cs.meta new file mode 100644 index 000000000..87fab53d5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Memory/BufferStore.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6021d9bfd261f642a7da50ccb964482 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient.meta new file mode 100644 index 000000000..9060705e2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2b874ed66c4deeb4f9a5f68d9de30628 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/TcpClient.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/TcpClient.cs new file mode 100644 index 000000000..2c5c55d9d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/TcpClient.cs @@ -0,0 +1,639 @@ +#if !NETFX_CORE || UNITY_EDITOR + +// TcpClient.cs +// +// Author: +// Phillip Pearson (pp@myelin.co.nz) +// Gonzalo Paniagua Javier (gonzalo@novell.com) +// Sridhar Kulkarni (sridharkulkarni@gmail.com) +// Marek Safar (marek.safar@gmail.com) +// +// Copyright (C) 2001, Phillip Pearson http://www.myelin.co.nz +// Copyright (c) 2006 Novell, Inc. (http://www.novell.com) +// Copyright 2011 Xamarin Inc. +// + +// +// 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. +// +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Net.Sockets; + +namespace BestHTTP.PlatformSupport.TcpClient.General +{ + // This is a little modified TcpClient class from the Mono src tree. + public class TcpClient : IDisposable + { + enum Properties : uint + { + LingerState = 1, + NoDelay = 2, + ReceiveBufferSize = 4, + ReceiveTimeout = 8, + SendBufferSize = 16, + SendTimeout = 32 + } + + // private data + NetworkStream stream; + bool active; + Socket client; + bool disposed; + Properties values; + int recv_timeout, send_timeout; + int recv_buffer_size, send_buffer_size; + LingerOption linger_state; + bool no_delay; + + private void Init(AddressFamily family) + { + active = false; + + if (client != null) + { + client.Close(); + client = null; + } + + client = new Socket(family, SocketType.Stream, ProtocolType.Tcp); + } + + public TcpClient() + { + Init(AddressFamily.InterNetwork); + //client.Bind(new IPEndPoint(IPAddress.Any, 0)); + + ConnectTimeout = TimeSpan.FromSeconds(2); + } + + public TcpClient(AddressFamily family) + { + if (family != AddressFamily.InterNetwork && + family != AddressFamily.InterNetworkV6) + { + throw new ArgumentException("Family must be InterNetwork or InterNetworkV6", "family"); + } + + Init(family); + /*IPAddress any = IPAddress.Any; + if (family == AddressFamily.InterNetworkV6) + any = IPAddress.IPv6Any; + client.Bind(new IPEndPoint(any, 0));*/ + + ConnectTimeout = TimeSpan.FromSeconds(2); + } + + public TcpClient(IPEndPoint localEP) + { + Init(localEP.AddressFamily); + //client.Bind(localEP); + + ConnectTimeout = TimeSpan.FromSeconds(2); + } + + public TcpClient(string hostname, int port) + { + ConnectTimeout = TimeSpan.FromSeconds(2); + + Connect(hostname, port); + } + + protected bool Active + { + get { return active; } + set { active = value; } + } + + public Socket Client + { + get { return client; } + set + { + client = value; + stream = null; + } + } + + public int Available + { + get { return client.Available; } + } + + public bool Connected + { + get { return client.Connected; } + } + + + public bool IsConnected() + { + try + { + return !(Client.Poll(1, SelectMode.SelectRead) && Client.Available == 0); + } + catch (Exception) { return false; } + } + + public bool ExclusiveAddressUse + { + get + { + return (client.ExclusiveAddressUse); + } + set + { + client.ExclusiveAddressUse = value; + } + } + + internal void SetTcpClient(Socket s) + { + Client = s; + } + + public LingerOption LingerState + { + get + { + if ((values & Properties.LingerState) != 0) + return linger_state; + + return (LingerOption)client.GetSocketOption(SocketOptionLevel.Socket, + SocketOptionName.Linger); + } + set + { + if (!client.Connected) + { + linger_state = value; + values |= Properties.LingerState; + return; + } + client.SetSocketOption( + SocketOptionLevel.Socket, + SocketOptionName.Linger, value); + } + } + + public bool NoDelay + { + get + { + if ((values & Properties.NoDelay) != 0) + return no_delay; + + return (bool)client.GetSocketOption( + SocketOptionLevel.Tcp, + SocketOptionName.NoDelay); + } + set + { + if (!client.Connected) + { + no_delay = value; + values |= Properties.NoDelay; + return; + } + client.SetSocketOption( + SocketOptionLevel.Tcp, + SocketOptionName.NoDelay, value ? 1 : 0); + } + } + + public int ReceiveBufferSize + { + get + { + if ((values & Properties.ReceiveBufferSize) != 0) + return recv_buffer_size; + + return (int)client.GetSocketOption( + SocketOptionLevel.Socket, + SocketOptionName.ReceiveBuffer); + } + set + { + if (!client.Connected) + { + recv_buffer_size = value; + values |= Properties.ReceiveBufferSize; + return; + } + client.SetSocketOption( + SocketOptionLevel.Socket, + SocketOptionName.ReceiveBuffer, value); + } + } + + public int ReceiveTimeout + { + get + { + if ((values & Properties.ReceiveTimeout) != 0) + return recv_timeout; + + return (int)client.GetSocketOption( + SocketOptionLevel.Socket, + SocketOptionName.ReceiveTimeout); + } + set + { + if (!client.Connected) + { + recv_timeout = value; + values |= Properties.ReceiveTimeout; + return; + } + client.SetSocketOption( + SocketOptionLevel.Socket, + SocketOptionName.ReceiveTimeout, value); + } + } + + public int SendBufferSize + { + get + { + if ((values & Properties.SendBufferSize) != 0) + return send_buffer_size; + + return (int)client.GetSocketOption( + SocketOptionLevel.Socket, + SocketOptionName.SendBuffer); + } + set + { + if (!client.Connected) + { + send_buffer_size = value; + values |= Properties.SendBufferSize; + return; + } + client.SetSocketOption( + SocketOptionLevel.Socket, + SocketOptionName.SendBuffer, value); + } + } + + public int SendTimeout + { + get + { + if ((values & Properties.SendTimeout) != 0) + return send_timeout; + + return (int)client.GetSocketOption( + SocketOptionLevel.Socket, + SocketOptionName.SendTimeout); + } + set + { + if (!client.Connected) + { + send_timeout = value; + values |= Properties.SendTimeout; + return; + } + client.SetSocketOption( + SocketOptionLevel.Socket, + SocketOptionName.SendTimeout, value); + } + } + + public TimeSpan ConnectTimeout { get; set; } + + // methods + + public void Close() + { + ((IDisposable)this).Dispose(); + } + + public void Connect(IPEndPoint remoteEP) + { + try + { + if (ConnectTimeout > TimeSpan.Zero) + { + // Third version, works in WebPlayer + System.Threading.ManualResetEvent mre = new System.Threading.ManualResetEvent(false); + IAsyncResult result = client.BeginConnect(remoteEP, (res) => mre.Set(), null); + active = mre.WaitOne(ConnectTimeout); + if (active) + client.EndConnect(result); + else + { + try + { + client.Disconnect(true); + } + catch + { } + + throw new TimeoutException("Connection timed out!"); + } + + // Second version with timeout, in WebPlayer can't connect: + // Attempt to access a private/protected method failed. at System.Security.SecurityManager.ThrowException (System.Exception ex) [0x00000] in :0 + /*IAsyncResult result = client.BeginConnect(remoteEP, null, null); + Active = result.AsyncWaitHandle.WaitOne(ConnectTimeout, true); + if (active) + { + client.EndConnect(result); + } + else + { + client.Close(); + //throw new SocketException(10060); + throw new TimeoutException("Connection timed out!"); + }*/ + } + else + { + // First(old) version, no timeout + client.Connect(remoteEP); + active = true; + } + } + finally + { + CheckDisposed(); + } + } + + public void Connect(IPAddress address, int port) + { + Connect(new IPEndPoint(address, port)); + } + + void SetOptions() + { + Properties props = values; + values = 0; + + if ((props & Properties.LingerState) != 0) + LingerState = linger_state; + if ((props & Properties.NoDelay) != 0) + NoDelay = no_delay; + if ((props & Properties.ReceiveBufferSize) != 0) + ReceiveBufferSize = recv_buffer_size; + if ((props & Properties.ReceiveTimeout) != 0) + ReceiveTimeout = recv_timeout; + if ((props & Properties.SendBufferSize) != 0) + SendBufferSize = send_buffer_size; + if ((props & Properties.SendTimeout) != 0) + SendTimeout = send_timeout; + } + + public void Connect(string hostname, int port) + { + if (ConnectTimeout > TimeSpan.Zero) + { + // https://forum.unity3d.com/threads/best-http-released.200006/page-37#post-3150972 + System.Threading.ManualResetEvent mre = new System.Threading.ManualResetEvent(false); + IAsyncResult result = Dns.BeginGetHostAddresses(hostname, (res) => mre.Set(), null); + bool success = mre.WaitOne(ConnectTimeout); + if (success) + { + IPAddress[] addresses = Dns.EndGetHostAddresses(result); + Connect(addresses, port, null); + } + else + { + throw new TimeoutException("DNS resolve timed out!"); + } + } + else + { + IPAddress[] addresses = Dns.GetHostAddresses(hostname); + Connect(addresses, port, null); + } + } + + public void Connect(IPAddress[] ipAddresses, int port, HTTPRequest request) + { + CheckDisposed(); + + if (ipAddresses == null) + { + throw new ArgumentNullException("ipAddresses"); + } + + List addresses = new List(ipAddresses); + addresses.Sort((a, b) => a.AddressFamily - b.AddressFamily); + + for (int i = 0; i < addresses.Count; i++) + { + try + { + IPAddress address = addresses[i]; + + if (address.Equals(IPAddress.Any) || + address.Equals(IPAddress.IPv6Any)) + { + throw new SocketException((int)SocketError.AddressNotAvailable); + } + + Init(address.AddressFamily); + + if (address.AddressFamily == AddressFamily.InterNetwork) + { + //client.Bind(new IPEndPoint(IPAddress.Any, 0)); + } + else if (address.AddressFamily == AddressFamily.InterNetworkV6) + { + //client.Bind(new IPEndPoint(IPAddress.IPv6Any, 0)); + } + else + { + throw new NotSupportedException("This method is only valid for sockets in the InterNetwork and InterNetworkV6 families"); + } + + if (request != null && request.IsCancellationRequested) + throw new Exception("IsCancellationRequested"); + + HTTPManager.Logger.Verbose("TcpClient", string.Format("Trying to connect to {0}:{1}", address.ToString(), port.ToString()), request.Context); + + Connect(new IPEndPoint(address, port)); + + if (values != 0) + { + SetOptions(); + } + + try + { + // Enable Keep-Alive packets + client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true); + + /* + TCP_KEEPIDLE 4 // Start keeplives after this period + TCP_KEEPINTVL 5 // Interval between keepalives + TCP_KEEPCNT 6 // Number of keepalives before death + */ + + //client.SetSocketOption(SocketOptionLevel.Tcp, (SocketOptionName)4, 30); + //client.SetSocketOption(SocketOptionLevel.Tcp, (SocketOptionName)5, 10); + } + catch { } + + +#if UNITY_WINDOWS || UNITY_EDITOR + // Set the keep-alive time and interval on windows + + // https://msdn.microsoft.com/en-us/library/windows/desktop/dd877220%28v=vs.85%29.aspx + // https://msdn.microsoft.com/en-us/library/windows/desktop/ee470551%28v=vs.85%29.aspx + try + { + //SetKeepAlive(true, 30000, 1000); + } + catch{ } +#endif + + HTTPManager.Logger.Information("TcpClient", string.Format("Connected to {0}:{1}", address.ToString(), port.ToString()), request.Context); + + break; + } + catch (Exception e) + { + /* Reinitialise the socket so + * other properties still work + * (see no-arg constructor) + */ + Init(AddressFamily.InterNetwork); + + /* This is the last known + * address, so re-throw the + * exception + */ + if (i == addresses.Count - 1) + { + throw e; + } + } + } + } + + public void EndConnect(IAsyncResult asyncResult) + { + client.EndConnect(asyncResult); + } + + public IAsyncResult BeginConnect(IPAddress address, int port, AsyncCallback requestCallback, object state) + { + return client.BeginConnect(address, port, requestCallback, state); + } + + public IAsyncResult BeginConnect(IPAddress[] addresses, int port, AsyncCallback requestCallback, object state) + { + return client.BeginConnect(addresses, port, requestCallback, state); + } + + public IAsyncResult BeginConnect(string host, int port, AsyncCallback requestCallback, object state) + { + return client.BeginConnect(host, port, requestCallback, state); + } + + void IDisposable.Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposed) + return; + disposed = true; + + if (disposing) + { + // release managed resources + NetworkStream s = stream; + stream = null; + if (s != null) + { + // This closes the socket as well, as the NetworkStream + // owns the socket. + s.Close(); + active = false; + s = null; + } + else if (client != null) + { + client.Close(); + client = null; + } + } + } + + ~TcpClient() + { + Dispose(false); + } + + public Stream GetStream() + { + try + { + if (stream == null) + stream = new NetworkStream(client, true); + return stream; + } + finally { CheckDisposed(); } + } + + private void CheckDisposed() + { + if (disposed) + throw new ObjectDisposedException(GetType().FullName); + } + +#if UNITY_WINDOWS || UNITY_EDITOR + public void SetKeepAlive(bool on, uint keepAliveTime, uint keepAliveInterval) + { + int size = System.Runtime.InteropServices.Marshal.SizeOf(new uint()); + + var inOptionValues = new byte[size * 3]; + + BitConverter.GetBytes((uint)(on ? 1 : 0)).CopyTo(inOptionValues, 0); + BitConverter.GetBytes((uint)keepAliveTime).CopyTo(inOptionValues, size); + BitConverter.GetBytes((uint)keepAliveInterval).CopyTo(inOptionValues, size * 2); + + //client.IOControl(IOControlCode.KeepAliveValues, inOptionValues, null); + int dwBytesRet = 0; + WSAIoctl(client.Handle, /*SIO_KEEPALIVE_VALS*/ System.Net.Sockets.IOControlCode.KeepAliveValues, inOptionValues, inOptionValues.Length, /*NULL*/IntPtr.Zero, 0, ref dwBytesRet, /*NULL*/IntPtr.Zero, /*NULL*/IntPtr.Zero); + } + + [System.Runtime.InteropServices.DllImport("Ws2_32.dll")] + public static extern int WSAIoctl( + /* Socket, Mode */ IntPtr s, System.Net.Sockets.IOControlCode dwIoControlCode, + /* Optional Or IntPtr.Zero, 0 */ byte[] lpvInBuffer, int cbInBuffer, + /* Optional Or IntPtr.Zero, 0 */ IntPtr lpvOutBuffer, int cbOutBuffer, + /* reference to receive Size */ ref int lpcbBytesReturned, + /* IntPtr.Zero, IntPtr.Zero */ IntPtr lpOverlapped, IntPtr lpCompletionRoutine); +#endif + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/TcpClient.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/TcpClient.cs.meta new file mode 100644 index 000000000..fb6f20b0c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/TcpClient.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e8000d20829121a4aa2466c39057835e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/WinRT.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/WinRT.meta new file mode 100644 index 000000000..dd22bf7a0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/WinRT.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1d6092b0b312e184b8d45e66dba37d60 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/WinRT/DataReaderWriterStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/WinRT/DataReaderWriterStream.cs new file mode 100644 index 000000000..e4d4806f2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/WinRT/DataReaderWriterStream.cs @@ -0,0 +1,66 @@ +#if UNITY_WSA && !UNITY_EDITOR && !ENABLE_IL2CPP + +using System; +using System.IO; + +using Windows.Storage.Streams; +using System.Runtime.InteropServices.WindowsRuntime; + +namespace BestHTTP.PlatformSupport.TcpClient.WinRT +{ + public sealed class DataReaderWriterStream : System.IO.Stream + { + private TcpClient Client { get; set; } + + public DataReaderWriterStream(TcpClient socket) + { + this.Client = socket; + } + + public override bool CanRead { get { return true; } } + public override bool CanSeek { get { return false; } } + public override bool CanWrite { get { return true; } } + public override void Flush() { } + public override long Length { get { throw new NotImplementedException(); } } + public override long Position { get { throw new NotImplementedException(); } set { throw new NotImplementedException(); } } + public bool DataAvailable { get { return true; } } + + public override int Read(byte[] buffer, int offset, int count) + { + Windows.Storage.Streams.Buffer tmpBuffer = new Windows.Storage.Streams.Buffer((uint)count); + + try + { + var task = Client.Socket.InputStream.ReadAsync(tmpBuffer, tmpBuffer.Capacity, InputStreamOptions.Partial) + .AsTask(); + task.ConfigureAwait(false); + task.Wait(); + } + catch(AggregateException ex) + { + if (ex.InnerException != null) + throw ex.InnerException; + else + throw ex; + } + + DataReader reader = DataReader.FromBuffer(tmpBuffer); + int length = (int)reader.UnconsumedBufferLength; + for (int i = 0; i < length; ++i) + buffer[offset + i] = reader.ReadByte(); + return length; + } + + public override void Write(byte[] buffer, int offset, int count) + { + var task = Client.Socket.OutputStream.WriteAsync(buffer.AsBuffer(offset, count)).AsTask(); + task.ConfigureAwait(false); + task.Wait(); + } + + public override long Seek(long offset, System.IO.SeekOrigin origin) { return 0; } + public override void SetLength(long value) { } + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/WinRT/DataReaderWriterStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/WinRT/DataReaderWriterStream.cs.meta new file mode 100644 index 000000000..0ccf26b39 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/WinRT/DataReaderWriterStream.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 427d34e18e3b2874bb249aea978feba8 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/WinRT/TcpClient.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/WinRT/TcpClient.cs new file mode 100644 index 000000000..22dd896ee --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/WinRT/TcpClient.cs @@ -0,0 +1,133 @@ +#if NETFX_CORE && !UNITY_EDITOR && !ENABLE_IL2CPP + +using System; +using Windows.Networking; +using Windows.Networking.Sockets; + +namespace BestHTTP.PlatformSupport.TcpClient.WinRT +{ + public sealed class TcpClient : IDisposable + { +#region Public Properties + + public bool Connected { get; private set; } + public TimeSpan ConnectTimeout { get; set; } +#endregion + +#region Private Properties + + internal StreamSocket Socket { get; set; } + private System.IO.Stream Stream { get; set; } + +#endregion + + public TcpClient() + { + ConnectTimeout = TimeSpan.FromSeconds(2); + } + + public void Connect(string hostName, int port) + { + //How to secure socket connections with TLS/SSL: + //http://msdn.microsoft.com/en-us/library/windows/apps/jj150597.aspx + + //Networking in Windows 8 Apps - Using StreamSocket for TCP Communication + //http://blogs.msdn.com/b/metulev/archive/2012/10/22/networking-in-windows-8-apps-using-streamsocket-for-tcp-communication.aspx + + Socket = new StreamSocket(); + Socket.Control.KeepAlive = true; + Socket.Control.NoDelay = true; + + var host = new HostName(hostName); + + System.Threading.CancellationTokenSource tokenSource = new System.Threading.CancellationTokenSource(); + + // https://msdn.microsoft.com/en-us/library/windows/apps/xaml/jj710176.aspx#content + try + { + if (ConnectTimeout > TimeSpan.Zero) + tokenSource.CancelAfter(ConnectTimeout); + + var task = Socket.ConnectAsync(host, port.ToString(), SocketProtectionLevel.PlainSocket).AsTask(tokenSource.Token); + task.ConfigureAwait(false); + task.Wait(); + Connected = task.IsCompleted; + } + catch(AggregateException ex) + { + //https://msdn.microsoft.com/en-us/library/dd537614(v=vs.110).aspx?f=255&MSPPError=-2147217396 + + Connected = false; + if (ex.InnerException != null) + //throw ex.InnerException; + { + if ( ex.Message.Contains("No such host is known") || ex.Message.Contains("unreachable host") ) + throw new Exception("Socket Exception: " + ex.Message); + else + throw ex.InnerException; + } + else + throw ex; + } + finally { + // https://docs.microsoft.com/en-us/dotnet/api/system.threading.cancellationtokensource + tokenSource.Dispose(); + } + + if (!Connected) + throw new TimeoutException("Connection timed out!"); + } + + public bool IsConnected() + { + return true; + } + + public System.IO.Stream GetStream() + { + if (Stream == null) + Stream = new DataReaderWriterStream(this); + return Stream; + } + + public void Close() + { + Dispose(); + } + +#region IDisposeble + + private bool disposed = false; + + private void Dispose(bool disposing) + { + if (!disposed) + { + disposed = true; + if (disposing) + { + if (Stream != null) + Stream.Dispose(); + Stream = null; + Connected = false; + this.Socket.Dispose(); + } + } + } + + ~TcpClient() + { + Dispose(false); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + +#endregion + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/WinRT/TcpClient.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/WinRT/TcpClient.cs.meta new file mode 100644 index 000000000..44682dda4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/TcpClient/WinRT/TcpClient.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f655ab9e34dc51541b1d220a7ba46446 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Text.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Text.meta new file mode 100644 index 000000000..417386003 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Text.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dc866afc8c452ac4bab7c1f770dc92e4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Text/StringBuilderPool.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Text/StringBuilderPool.cs new file mode 100644 index 000000000..ef01b6d2f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Text/StringBuilderPool.cs @@ -0,0 +1,144 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; + +using BestHTTP.PlatformSupport.Threading; + +namespace BestHTTP.PlatformSupport.Text +{ + [BestHTTP.PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstructionAttribute] + public static class StringBuilderPool + { + /// + /// Setting this property to false the pooling mechanism can be disabled. + /// + public static bool IsEnabled + { + get { return _isEnabled; } + set + { + _isEnabled = value; + + // When set to non-enabled remove all stored entries + if (!_isEnabled) + Clear(); + } + } + private static volatile bool _isEnabled = true; + + /// + /// Buffer entries that released back to the pool and older than this value are moved when next maintenance is triggered. + /// + public static TimeSpan RemoveOlderThan = TimeSpan.FromSeconds(10); + + /// + /// How often pool maintenance must run. + /// + public static TimeSpan RunMaintenanceEvery = TimeSpan.FromSeconds(5); + + private static DateTime lastMaintenance = DateTime.MinValue; + + private readonly static ReaderWriterLockSlim rwLock = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion); + + struct BuilderShelf + { + public StringBuilder builder; + public DateTime released; + + public BuilderShelf(StringBuilder sb) + { + this.builder = sb; + this.released = DateTime.UtcNow; + } + } + + private static List pooledBuilders = new List(); + + public static StringBuilder Get(int lengthHint) + { + if (!_isEnabled) + return new StringBuilder(lengthHint); + + using (new WriteLock(rwLock)) + { + for (int i = pooledBuilders.Count - 1; i >= 0; i--) + { + BuilderShelf shelf = pooledBuilders[i]; + if (shelf.builder.Capacity >= lengthHint) + { + pooledBuilders.RemoveAt(i); + return shelf.builder; + } + } + + // no builder found with lengthHint, take the first available + if (pooledBuilders.Count > 0) + { + BuilderShelf shelf = pooledBuilders[pooledBuilders.Count - 1]; + pooledBuilders.RemoveAt(pooledBuilders.Count - 1); + return shelf.builder; + } + } + + return new StringBuilder(lengthHint); + } + + public static void Release(StringBuilder builder) + { + if (builder == null) + return; + + if (!_isEnabled) + return; + + builder.Clear(); + + using (new WriteLock(rwLock)) + pooledBuilders.Add(new BuilderShelf(builder)); + } + + public static string ReleaseAndGrab(StringBuilder builder) + { + if (builder == null) + return null; + + var result = builder.ToString(); + if (!_isEnabled) + return result; + + builder.Clear(); + + using (new WriteLock(rwLock)) + pooledBuilders.Add(new BuilderShelf(builder)); + + return result; + } + + internal static void Maintain() + { + DateTime now = DateTime.UtcNow; + if (!_isEnabled || lastMaintenance + RunMaintenanceEvery > now) + return; + lastMaintenance = now; + + DateTime olderThan = now - RemoveOlderThan; + using (new WriteLock(rwLock)) + { + for (int i = 0; i < pooledBuilders.Count; i++) + { + BuilderShelf shelf = pooledBuilders[i]; + + if (shelf.released < olderThan) + pooledBuilders.RemoveAt(i--); + } + } + } + + public static void Clear() + { + using (new WriteLock(rwLock)) + pooledBuilders.Clear(); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Text/StringBuilderPool.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Text/StringBuilderPool.cs.meta new file mode 100644 index 000000000..ec6a1df58 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Text/StringBuilderPool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be78127ff31739148be6638f5e141470 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Threading.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Threading.meta new file mode 100644 index 000000000..06cb657e4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Threading.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d4338351fc3cf324684c1fcb2db9492b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Threading/LockHelpers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Threading/LockHelpers.cs new file mode 100644 index 000000000..3741fa0fd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Threading/LockHelpers.cs @@ -0,0 +1,46 @@ +using System; +using System.Threading; + +namespace BestHTTP.PlatformSupport.Threading +{ + public struct ReadLock : IDisposable + { + private ReaderWriterLockSlim rwLock; + private bool locked; + public ReadLock(ReaderWriterLockSlim rwLock) + { + this.rwLock = rwLock; + + this.locked = this.rwLock.IsReadLockHeld; + if (!this.locked) + this.rwLock.EnterReadLock(); + } + + public void Dispose() + { + if (!this.locked) + this.rwLock.ExitReadLock(); + } + } + + public struct WriteLock : IDisposable + { + private ReaderWriterLockSlim rwLock; + private bool locked; + + public WriteLock(ReaderWriterLockSlim rwLock) + { + this.rwLock = rwLock; + this.locked = rwLock.IsWriteLockHeld; + + if (!locked) + this.rwLock.EnterWriteLock(); + } + + public void Dispose() + { + if (!locked) + this.rwLock.ExitWriteLock(); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Threading/LockHelpers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Threading/LockHelpers.cs.meta new file mode 100644 index 000000000..9d23a85c7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Threading/LockHelpers.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 549ae5c28c10d0b48a0fa7e45c085dff +timeCreated: 1606125511 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Threading/ThreadedRunner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Threading/ThreadedRunner.cs new file mode 100644 index 000000000..d76002ee7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Threading/ThreadedRunner.cs @@ -0,0 +1,117 @@ +using System; +using System.Threading; + +#if NET_STANDARD_2_0 +using System.Threading.Tasks; +#endif + +namespace BestHTTP.PlatformSupport.Threading +{ + public static class ThreadedRunner + { + public static void SetThreadName(string name) + { + try + { + System.Threading.Thread.CurrentThread.Name = name; + } + catch(Exception ex) + { + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Exception("ThreadedRunner", "SetThreadName", ex); + } + } + + public static void RunShortLiving(Action job, T param) + { +#if NETFX_CORE +#pragma warning disable 4014 + Windows.System.Threading.ThreadPool.RunAsync(_ => job(param)); +#pragma warning restore 4014 +#elif NET_STANDARD_2_0 + var _task = new Task(() => job(param)); + _task.ConfigureAwait(false); + _task.Start(); +#else + ThreadPool.QueueUserWorkItem(new WaitCallback(_ => job(param))); +#endif + } + + public static void RunShortLiving(Action job, T1 param1, T2 param2) + { +#if NETFX_CORE +#pragma warning disable 4014 + Windows.System.Threading.ThreadPool.RunAsync((param) => job(param1, param2)); +#pragma warning restore 4014 +#elif NET_STANDARD_2_0 + var _task = new Task(() => job(param1, param2)); + _task.ConfigureAwait(false); + _task.Start(); +#else + ThreadPool.QueueUserWorkItem(new WaitCallback(_ => job(param1, param2))); +#endif + } + + public static void RunShortLiving(Action job, T1 param1, T2 param2, T3 param3) + { +#if NETFX_CORE +#pragma warning disable 4014 + Windows.System.Threading.ThreadPool.RunAsync((param) => job(param1, param2, param3)); +#pragma warning restore 4014 +#elif NET_STANDARD_2_0 + var _task = new Task(() => job(param1, param2, param3)); + _task.ConfigureAwait(false); + _task.Start(); +#else + ThreadPool.QueueUserWorkItem(new WaitCallback(_ => job(param1, param2, param3))); +#endif + } + + public static void RunShortLiving(Action job, T1 param1, T2 param2, T3 param3, T4 param4) + { +#if NETFX_CORE +#pragma warning disable 4014 + Windows.System.Threading.ThreadPool.RunAsync((param) => job(param1, param2, param3, param4)); +#pragma warning restore 4014 +#elif NET_STANDARD_2_0 + var _task = new Task(() => job(param1, param2, param3, param4)); + _task.ConfigureAwait(false); + _task.Start(); +#else + ThreadPool.QueueUserWorkItem(new WaitCallback(_ => job(param1, param2, param3, param4))); +#endif + } + + public static void RunShortLiving(Action job) + { +#if NETFX_CORE +#pragma warning disable 4014 + Windows.System.Threading.ThreadPool.RunAsync((param) => job()); +#pragma warning restore 4014 +#elif NET_STANDARD_2_0 + var _task = new Task(() => job()); + _task.ConfigureAwait(false); + _task.Start(); +#else + ThreadPool.QueueUserWorkItem(new WaitCallback((param) => job())); +#endif + } + + public static void RunLongLiving(Action job) + { +#if NETFX_CORE +#pragma warning disable 4014 + Windows.System.Threading.ThreadPool.RunAsync((param) => job()); +#pragma warning restore 4014 +#elif NET_STANDARD_2_0 + var _task = new Task(() => job(), TaskCreationOptions.LongRunning); + _task.ConfigureAwait(false); + _task.Start(); +#else + var thread = new Thread(new ParameterizedThreadStart((param) => job())); + thread.IsBackground = true; + thread.Start(); +#endif + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Threading/ThreadedRunner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Threading/ThreadedRunner.cs.meta new file mode 100644 index 000000000..a5e036e40 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/PlatformSupport/Threading/ThreadedRunner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5903d845a5954b5469f33ec1e8c282b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies.meta new file mode 100644 index 000000000..73a1efa31 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a8a542b142d803c46bb88b1207bda397 +folderAsset: yes +timeCreated: 1572520245 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect.meta new file mode 100644 index 000000000..237c7a257 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 855ac4bfd19c3a4409869bf1ac3f6b55 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/AndroidProxyDetector.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/AndroidProxyDetector.cs new file mode 100644 index 000000000..d4006e22d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/AndroidProxyDetector.cs @@ -0,0 +1,59 @@ +#if !BESTHTTP_DISABLE_PROXY && UNITY_ANDROID && !UNITY_EDITOR +using System; + +using UnityEngine; + +namespace BestHTTP.Proxies.Autodetect +{ + public sealed class AndroidProxyDetector : IProxyDetector + { + private const string ClassPath = "com.besthttp.proxy.ProxyFinder"; + + Proxy IProxyDetector.GetProxy(HTTPRequest request) + { + try + { + var proxyUrl = FindFor(request.CurrentUri.ToString()); + + HTTPManager.Logger.Information(nameof(AndroidProxyDetector), $"{nameof(IProxyDetector.GetProxy)} - FindFor returned with proxyUrl: '{proxyUrl}'", request.Context); + + if (proxyUrl == null) + return null; + + if (proxyUrl.StartsWith("socks://", StringComparison.OrdinalIgnoreCase)) + { + return new SOCKSProxy(new Uri(proxyUrl), null); + } + else if (proxyUrl.StartsWith("http://", StringComparison.OrdinalIgnoreCase)) + { + return new HTTPProxy(new Uri(proxyUrl)); + } + else + { + HTTPManager.Logger.Warning(nameof(AndroidProxyDetector), $"{nameof(IProxyDetector.GetProxy)} - FindFor returned with unknown format. proxyUrl: '{proxyUrl}'", request.Context); + } + } + catch (Exception ex) + { + HTTPManager.Logger.Exception(nameof(AndroidProxyDetector), nameof(IProxyDetector.GetProxy), ex, request.Context); + } + + return null; + } + + private string FindFor(string uriStr) => Call("FindFor", uriStr); + + private static void Call(string methodName, params object[] args) + { + using (var javaClass = new AndroidJavaClass(ClassPath)) + javaClass.CallStatic(methodName, args); + } + + private static T Call(string methodName, params object[] args) + { + using (var javaClass = new AndroidJavaClass(ClassPath)) + return javaClass.CallStatic(methodName, args); + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/AndroidProxyDetector.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/AndroidProxyDetector.cs.meta new file mode 100644 index 000000000..d98ef4317 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/AndroidProxyDetector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac7faed5a1e9336479173f34a38a8965 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/EnvironmentProxyDetector.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/EnvironmentProxyDetector.cs new file mode 100644 index 000000000..19a378e93 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/EnvironmentProxyDetector.cs @@ -0,0 +1,80 @@ +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) +using System; +using System.Linq; + +using BestHTTP.Connections; + +// Examples on proxy strings: +// https://gist.github.com/yougg/5d2b3353fc5e197a0917aae0b3287d64 + +namespace BestHTTP.Proxies.Autodetect +{ + /// + /// Based on https://curl.se/docs/manual.html "Environment Variables" section. + /// + public sealed class EnvironmentProxyDetector : IProxyDetector + { + private Proxy _cachedProxy; + + Proxy IProxyDetector.GetProxy(HTTPRequest request) + { + if (this._cachedProxy != null) + return this._cachedProxy; + + string proxyUrl = null; + + if (HTTPProtocolFactory.IsSecureProtocol(request.CurrentUri)) + { + proxyUrl = GetEnv("HTTPS_PROXY"); + HTTPManager.Logger.Information(nameof(EnvironmentProxyDetector), $"{nameof(IProxyDetector.GetProxy)} - HTTPS_PROXY: '{proxyUrl}'", request.Context); + } + else + { + proxyUrl = GetEnv("HTTP_PROXY"); + HTTPManager.Logger.Information(nameof(EnvironmentProxyDetector), $"{nameof(IProxyDetector.GetProxy)} - HTTP_PROXY: '{proxyUrl}'", request.Context); + } + + if (proxyUrl == null) + { + proxyUrl = GetEnv("ALL_PROXY"); + } + else + HTTPManager.Logger.Information(nameof(EnvironmentProxyDetector), $"{nameof(IProxyDetector.GetProxy)} - ALL_PROXY: '{proxyUrl}'", request.Context); + + if (string.IsNullOrEmpty(proxyUrl)) + return null; + + // if the url is just a host[:port], add the http:// part too. Checking for :// should keep and treat the socks:// scheme too. + if (proxyUrl.IndexOf("://") == -1 && !proxyUrl.StartsWith("http", StringComparison.OrdinalIgnoreCase)) + proxyUrl = "http://" + proxyUrl; + + string exceptionList = null; + try + { + var proxyUri = new Uri(proxyUrl); + + Proxy proxy = null; + if (proxyUri.Scheme.StartsWith("socks", StringComparison.OrdinalIgnoreCase)) + proxy = new SOCKSProxy(proxyUri, null); + else + proxy = new HTTPProxy(proxyUri); + + // A comma-separated list of host names that should not go through any proxy is set in (only an asterisk, * matches all hosts) + exceptionList = GetEnv("NO_PROXY"); + if (!string.IsNullOrEmpty(exceptionList)) + proxy.Exceptions = exceptionList.Split(';').ToList(); + + return this._cachedProxy = proxy; + } + catch (Exception ex) + { + HTTPManager.Logger.Exception(nameof(EnvironmentProxyDetector), $"GetProxy - proxyUrl: '{proxyUrl}', exceptionList: '{exceptionList}'", ex, request.Context); + } + + return null; + } + + string GetEnv(string key) => System.Environment.GetEnvironmentVariable(key) ?? System.Environment.GetEnvironmentVariable(key.ToLowerInvariant()); + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/EnvironmentProxyDetector.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/EnvironmentProxyDetector.cs.meta new file mode 100644 index 000000000..010749847 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/EnvironmentProxyDetector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 152166acb3a569d45a58d0fa2b33eec3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/FrameworkProxyDetector.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/FrameworkProxyDetector.cs new file mode 100644 index 000000000..11e431ac1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/FrameworkProxyDetector.cs @@ -0,0 +1,62 @@ +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + +using System; + +namespace BestHTTP.Proxies.Autodetect +{ + /// + /// This is a detector using the .net framework's implementation. It might work not just under Windows but MacOS and Linux too. + /// + /// + public sealed class FrameworkProxyDetector : IProxyDetector + { + Proxy IProxyDetector.GetProxy(HTTPRequest request) + { + var detectedProxy = System.Net.WebRequest.GetSystemWebProxy() as System.Net.WebProxy; + if (detectedProxy != null && detectedProxy.Address != null) + { + var proxyUri = detectedProxy.GetProxy(request.CurrentUri); + if (proxyUri != null && !proxyUri.Equals(request.CurrentUri)) + { + if (proxyUri.Scheme.StartsWith("socks", StringComparison.OrdinalIgnoreCase)) + { + return SetExceptionList(new SOCKSProxy(proxyUri, null), detectedProxy); + } + else if (proxyUri.Scheme.StartsWith("http", StringComparison.OrdinalIgnoreCase)) + { + return SetExceptionList(new HTTPProxy(proxyUri), detectedProxy); + } + else + { + HTTPManager.Logger.Warning(nameof(FrameworkProxyDetector), $"{nameof(IProxyDetector.GetProxy)} - FindFor returned with unknown format. proxyUri: '{proxyUri}'", request.Context); + } + } + } + + return null; + } + + private Proxy SetExceptionList(Proxy proxy, System.Net.WebProxy detectedProxy) + { + if (detectedProxy.BypassProxyOnLocal) + { + proxy.Exceptions = proxy.Exceptions ?? new System.Collections.Generic.List(); + + proxy.Exceptions.Add("localhost"); + proxy.Exceptions.Add("127.0.0.1"); + } + + // TODO: use BypassList to put more entries to the Exceptions list. + // But because BypassList contains regex strings, we either + // 1.) store and use regex strings in the Exception list (not backward compatible) + // 2.) store non-regex strings but create a new list for regex + // 3.) detect if the stored entry in the Exceptions list is regex or not and use it accordingly + // "^.*\\.httpbin\\.org$" + // https://github.com/Benedicht/BestHTTP-Issues/issues/141 + + return proxy; + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/FrameworkProxyDetector.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/FrameworkProxyDetector.cs.meta new file mode 100644 index 000000000..3d2a50595 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/FrameworkProxyDetector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58ef74f62e307544fa7e434332a6d3ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/ProgrammaticallyAddedProxyDetector.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/ProgrammaticallyAddedProxyDetector.cs new file mode 100644 index 000000000..b75376af2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/ProgrammaticallyAddedProxyDetector.cs @@ -0,0 +1,14 @@ +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) +namespace BestHTTP.Proxies.Autodetect +{ + /// + /// This one just returns with HTTPManager.Proxy, + /// so when ProgrammaticallyAddedProxyDetector is used in the first place for the ProxyDetector, + /// HTTPManager.Proxy gets the highest priority. + /// + public sealed class ProgrammaticallyAddedProxyDetector : IProxyDetector + { + Proxy IProxyDetector.GetProxy(HTTPRequest request) => HTTPManager.Proxy; + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/ProgrammaticallyAddedProxyDetector.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/ProgrammaticallyAddedProxyDetector.cs.meta new file mode 100644 index 000000000..e253cbd1b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/ProgrammaticallyAddedProxyDetector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ad0e404074491274e83de0ce83db8a97 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/ProxyDetector.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/ProxyDetector.cs new file mode 100644 index 000000000..9fc35cf74 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/ProxyDetector.cs @@ -0,0 +1,145 @@ +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) +using System; + +using BestHTTP.Core; + +namespace BestHTTP.Proxies.Autodetect +{ + public interface IProxyDetector + { + Proxy GetProxy(HTTPRequest request); + } + + public enum ProxyDetectionMode + { + /// + /// In Continouos mode the ProxyDetector will check for a proxy for every request. + /// + Continouos, + + /// + /// This mode will cache the first Proxy found and use it for consecutive requests. + /// + CacheFirstFound + } + + public sealed class ProxyDetector + { + public static IProxyDetector[] GetDefaultDetectors() => new IProxyDetector[] { + // HTTPManager.Proxy has the highest priority + new ProgrammaticallyAddedProxyDetector(), + + // then comes the environment set + new EnvironmentProxyDetector(), + + // .net framework's detector + new FrameworkProxyDetector(), + +#if UNITY_ANDROID && !UNITY_EDITOR + new AndroidProxyDetector(), +#endif + }; + + private IProxyDetector[] _proxyDetectors; + private ProxyDetectionMode _detectionMode; + private bool _attached; + + public ProxyDetector() + : this(ProxyDetectionMode.CacheFirstFound, GetDefaultDetectors()) + { } + + public ProxyDetector(ProxyDetectionMode detectionMode) + :this(detectionMode, GetDefaultDetectors()) + { } + + public ProxyDetector(ProxyDetectionMode detectionMode, IProxyDetector[] proxyDetectors) + { + this._detectionMode = detectionMode; + this._proxyDetectors = proxyDetectors; + + if (this._proxyDetectors != null) + Reattach(); + } + + public void Reattach() + { + HTTPManager.Logger.Information(nameof(ProxyDetector), $"{nameof(Reattach)}({this._attached})"); + + if (!this._attached) + { + RequestEventHelper.OnEvent += OnRequestEvent; + this._attached = true; + } + } + + /// + /// Call Detach() to disable ProxyDetector's logic to find and set a proxy. + /// + public void Detach() + { + HTTPManager.Logger.Information(nameof(ProxyDetector), $"{nameof(Detach)}({this._attached})"); + + if (this._attached) + { + RequestEventHelper.OnEvent -= OnRequestEvent; + this._attached = false; + } + } + + private void OnRequestEvent(RequestEventInfo @event) + { + // The Resend event is raised for every request when it's queued up (sent or redirected). + if (@event.Event == RequestEvents.Resend && @event.SourceRequest.Proxy == null) + { + Uri uri = @event.SourceRequest.CurrentUri; + + HTTPManager.Logger.Information(nameof(ProxyDetector), $"OnRequestEvent(RequestEvents.Resend) uri: '{uri}'", @event.SourceRequest.Context); + + try + { + foreach (var detector in this._proxyDetectors) + { + if (detector == null) + continue; + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose(nameof(ProxyDetector), $"Calling {detector.GetType().Name}'s GetProxy", @event.SourceRequest.Context); + + var proxy = detector.GetProxy(@event.SourceRequest); + if (proxy != null && proxy.UseProxyForAddress(uri)) + { + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose(nameof(ProxyDetector), $"[{detector.GetType().Name}] Proxy found: {proxy.Address} ", @event.SourceRequest.Context); + + switch (this._detectionMode) + { + case ProxyDetectionMode.Continouos: + @event.SourceRequest.Proxy = proxy; + break; + + case ProxyDetectionMode.CacheFirstFound: + HTTPManager.Proxy = @event.SourceRequest.Proxy = proxy; + + HTTPManager.Logger.Verbose(nameof(ProxyDetector), $"Proxy cached in HTTPManager.Proxy!", @event.SourceRequest.Context); + + Detach(); + break; + } + + return; + } + } + + HTTPManager.Logger.Information(nameof(ProxyDetector), $"No Proxy for '{uri}'.", @event.SourceRequest.Context); + } + catch (Exception ex) + { + if (HTTPManager.Logger.Level == BestHTTP.Logger.Loglevels.All) + HTTPManager.Logger.Exception(nameof(ProxyDetector), $"GetProxyFor({@event.SourceRequest.CurrentUri})", ex, @event.SourceRequest.Context); + } + } + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/ProxyDetector.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/ProxyDetector.cs.meta new file mode 100644 index 000000000..3a9f80a53 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/Autodetect/ProxyDetector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f11e35f15ae944141a7fe661e2783ae4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/HTTPProxy.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/HTTPProxy.cs new file mode 100644 index 000000000..1181d3aaf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/HTTPProxy.cs @@ -0,0 +1,290 @@ +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using BestHTTP.Authentication; +using BestHTTP.Connections; +using BestHTTP.Extensions; +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP +{ + public abstract class Proxy + { + /// + /// Address of the proxy server. It has to be in the http://proxyaddress:port form. + /// + public Uri Address { get; set; } + + /// + /// Credentials of the proxy + /// + public Credentials Credentials { get; set; } + + /// + /// Use the proxy except for addresses that start with these entries. Elements of this list are compared to the Host (DNS or IP address) part of the uri. + /// + public List Exceptions { get; set; } + + internal Proxy(Uri address, Credentials credentials) + { + this.Address = address; + this.Credentials = credentials; + } + + internal abstract void Connect(Stream stream, HTTPRequest request); + + internal abstract string GetRequestPath(Uri uri); + internal abstract bool SetupRequest(HTTPRequest request); + + internal bool UseProxyForAddress(Uri address) + { + if (this.Exceptions == null) + return true; + + string host = address.Host; + + // https://github.com/httplib2/httplib2/issues/94 + // If domain starts with a dot (example: .example.com): + // 1. Use endswith to match any subdomain (foo.example.com should match) + // 2. Remove the dot and do an exact match (example.com should also match) + // + // If domain does not start with a dot (example: example.com): + // 1. It should be an exact match. + for (int i = 0; i < this.Exceptions.Count; ++i) + { + var exception = this.Exceptions[i]; + + if (exception == "*") + return false; + + if (exception.StartsWith(".")) + { + // Use EndsWith to match any subdomain + if (host.EndsWith(exception)) + return false; + + // Remove the dot and + exception = exception.Substring(1); + } + + // do an exact match + if (host.Equals(exception)) + return false; + } + + return true; + } + } + + public sealed class HTTPProxy : Proxy + { + /// + /// True if the proxy can act as a transparent proxy + /// + public bool IsTransparent { get; set; } + + /// + /// Some non-transparent proxies are except only the path and query of the request uri. Default value is true + /// + public bool SendWholeUri { get; set; } + + /// + /// Regardless of the value of IsTransparent, for secure protocols(HTTPS://, WSS://) the plugin will use the proxy as an explicit proxy(will issue a CONNECT request to the proxy) + /// + public bool NonTransparentForHTTPS { get; set; } + + public HTTPProxy(Uri address) + :this(address, null, false) + {} + + public HTTPProxy(Uri address, Credentials credentials) + :this(address, credentials, false) + {} + + public HTTPProxy(Uri address, Credentials credentials, bool isTransparent) + :this(address, credentials, isTransparent, true) + { } + + public HTTPProxy(Uri address, Credentials credentials, bool isTransparent, bool sendWholeUri) + : this(address, credentials, isTransparent, sendWholeUri, true) + { } + + public HTTPProxy(Uri address, Credentials credentials, bool isTransparent, bool sendWholeUri, bool nonTransparentForHTTPS) + :base(address, credentials) + { + this.IsTransparent = isTransparent; + this.SendWholeUri = sendWholeUri; + this.NonTransparentForHTTPS = nonTransparentForHTTPS; + } + + internal override string GetRequestPath(Uri uri) + { + return this.SendWholeUri ? uri.OriginalString : uri.GetRequestPathAndQueryURL(); + } + + internal override bool SetupRequest(HTTPRequest request) + { + if (request == null || request.Response == null || !this.IsTransparent) + return false; + + string authHeader = DigestStore.FindBest(request.Response.GetHeaderValues("proxy-authenticate")); + if (!string.IsNullOrEmpty(authHeader)) + { + var digest = DigestStore.GetOrCreate(request.Proxy.Address); + digest.ParseChallange(authHeader); + + if (request.Proxy.Credentials != null && digest.IsUriProtected(request.Proxy.Address) && (!request.HasHeader("Proxy-Authorization") || digest.Stale)) + { + switch (request.Proxy.Credentials.Type) + { + case AuthenticationTypes.Basic: + // With Basic authentication we don't want to wait for a challenge, we will send the hash with the first request + request.SetHeader("Proxy-Authorization", string.Concat("Basic ", Convert.ToBase64String(Encoding.UTF8.GetBytes(request.Proxy.Credentials.UserName + ":" + request.Proxy.Credentials.Password)))); + return true; + + case AuthenticationTypes.Unknown: + case AuthenticationTypes.Digest: + //var digest = DigestStore.Get(request.Proxy.Address); + if (digest != null) + { + string authentication = digest.GenerateResponseHeader(request, request.Proxy.Credentials, true); + if (!string.IsNullOrEmpty(authentication)) + { + request.SetHeader("Proxy-Authorization", authentication); + return true; + } + } + + break; + } + } + } + + return false; + } + + internal override void Connect(Stream stream, HTTPRequest request) + { + bool isSecure = HTTPProtocolFactory.IsSecureProtocol(request.CurrentUri); + + if (!this.IsTransparent || (isSecure && this.NonTransparentForHTTPS)) + { + using (var bufferedStream = new WriteOnlyBufferedStream(stream, HTTPRequest.UploadChunkSize)) + using (var outStream = new BinaryWriter(bufferedStream, Encoding.UTF8)) + { + bool retry; + do + { + // If we have to because of a authentication request, we will switch it to true + retry = false; + + string connectStr = string.Format("CONNECT {0}:{1} HTTP/1.1", request.CurrentUri.Host, request.CurrentUri.Port.ToString()); + + HTTPManager.Logger.Information("HTTPProxy", "Sending " + connectStr, request.Context); + + outStream.SendAsASCII(connectStr); + outStream.Write(HTTPRequest.EOL); + + outStream.SendAsASCII("Proxy-Connection: Keep-Alive"); + outStream.Write(HTTPRequest.EOL); + + outStream.SendAsASCII("Connection: Keep-Alive"); + outStream.Write(HTTPRequest.EOL); + + outStream.SendAsASCII(string.Format("Host: {0}:{1}", request.CurrentUri.Host, request.CurrentUri.Port.ToString())); + outStream.Write(HTTPRequest.EOL); + + // Proxy Authentication + if (this.Credentials != null) + { + switch (this.Credentials.Type) + { + case AuthenticationTypes.Basic: + { + // With Basic authentication we don't want to wait for a challenge, we will send the hash with the first request + var buff = string.Format("Proxy-Authorization: {0}", string.Concat("Basic ", Convert.ToBase64String(Encoding.UTF8.GetBytes(this.Credentials.UserName + ":" + this.Credentials.Password)))).GetASCIIBytes(); + outStream.Write(buff.Data, buff.Offset, buff.Count); + BufferPool.Release(buff); + + outStream.Write(HTTPRequest.EOL); + break; + } + + case AuthenticationTypes.Unknown: + case AuthenticationTypes.Digest: + { + var digest = DigestStore.Get(this.Address); + if (digest != null) + { + string authentication = digest.GenerateResponseHeader(request, this.Credentials, true); + if (!string.IsNullOrEmpty(authentication)) + { + string auth = string.Format("Proxy-Authorization: {0}", authentication); + if (HTTPManager.Logger.Level <= Logger.Loglevels.Information) + HTTPManager.Logger.Information("HTTPProxy", "Sending proxy authorization header: " + auth, request.Context); + + var buff = auth.GetASCIIBytes(); + outStream.Write(buff.Data, buff.Offset, buff.Count); + BufferPool.Release(buff); + + outStream.Write(HTTPRequest.EOL); + } + } + + break; + } + } + } + + outStream.Write(HTTPRequest.EOL); + + // Make sure to send all the wrote data to the wire + outStream.Flush(); + + request.ProxyResponse = new HTTPResponse(request, stream, false, false, true); + + // Read back the response of the proxy + if (!request.ProxyResponse.Receive(-1, true)) + throw new Exception("Connection to the Proxy Server failed!"); + + if (HTTPManager.Logger.Level <= Logger.Loglevels.Information) + HTTPManager.Logger.Information("HTTPProxy", "Proxy returned - status code: " + request.ProxyResponse.StatusCode + " message: " + request.ProxyResponse.Message + " Body: " + request.ProxyResponse.DataAsText, request.Context); + + switch (request.ProxyResponse.StatusCode) + { + // Proxy authentication required + // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.8 + case 407: + { + string authHeader = DigestStore.FindBest(request.ProxyResponse.GetHeaderValues("proxy-authenticate")); + if (!string.IsNullOrEmpty(authHeader)) + { + var digest = DigestStore.GetOrCreate(this.Address); + digest.ParseChallange(authHeader); + + if (this.Credentials != null && digest.IsUriProtected(this.Address) && (!request.HasHeader("Proxy-Authorization") || digest.Stale)) + retry = true; + } + + if (!retry) + throw new Exception(string.Format("Can't authenticate Proxy! Status Code: \"{0}\", Message: \"{1}\" and Response: {2}", request.ProxyResponse.StatusCode, request.ProxyResponse.Message, request.ProxyResponse.DataAsText)); + break; + } + + default: + if (!request.ProxyResponse.IsSuccess) + throw new Exception(string.Format("Proxy returned Status Code: \"{0}\", Message: \"{1}\" and Response: {2}", request.ProxyResponse.StatusCode, request.ProxyResponse.Message, request.ProxyResponse.DataAsText)); + break; + } + + } while (retry); + } // using outstream + } + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/HTTPProxy.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/HTTPProxy.cs.meta new file mode 100644 index 000000000..632889ca9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/HTTPProxy.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9e3868a6f38c2cc42bbb8c562caba79a +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/SOCKSProxy.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/SOCKSProxy.cs new file mode 100644 index 000000000..86707e9f3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/SOCKSProxy.cs @@ -0,0 +1,371 @@ +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) +using System; +using System.IO; +using System.Text; +using BestHTTP.Authentication; +using BestHTTP.Extensions; +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.PlatformSupport.Text; + +namespace BestHTTP +{ + internal enum SOCKSVersions : byte + { + Unknown = 0x00, + V5 = 0x05 + } + + /// + /// https://tools.ietf.org/html/rfc1928 + /// The values currently defined for METHOD are: + /// o X'00' NO AUTHENTICATION REQUIRED + /// o X'01' GSSAPI + /// o X'02' USERNAME/PASSWORD + /// o X'03' to X'7F' IANA ASSIGNED + /// o X'80' to X'FE' RESERVED FOR PRIVATE METHODS + /// o X'FF' NO ACCEPTABLE METHODS + /// + internal enum SOCKSMethods : byte + { + NoAuthenticationRequired = 0x00, + GSSAPI = 0x01, + UsernameAndPassword = 0x02, + NoAcceptableMethods = 0xFF + } + + internal enum SOCKSReplies : byte + { + Succeeded = 0x00, + GeneralSOCKSServerFailure = 0x01, + ConnectionNotAllowedByRuleset = 0x02, + NetworkUnreachable = 0x03, + HostUnreachable = 0x04, + ConnectionRefused = 0x05, + TTLExpired = 0x06, + CommandNotSupported = 0x07, + AddressTypeNotSupported = 0x08 + } + + internal enum SOCKSAddressTypes + { + IPV4 = 0x00, + DomainName = 0x03, + IPv6 = 0x04 + } + + public sealed class SOCKSProxy : Proxy + { + public SOCKSProxy(Uri address, Credentials credentials) + : base(address, credentials) + { } + + internal override string GetRequestPath(Uri uri) + { + return uri.GetRequestPathAndQueryURL(); + } + + internal override bool SetupRequest(HTTPRequest request) + { + return false; + } + + internal override void Connect(Stream stream, HTTPRequest request) + { + var buffer = BufferPool.Get(1024, true); + try + { + int count = 0; + + // https://tools.ietf.org/html/rfc1928 + // The client connects to the server, and sends a version + // identifier/method selection message: + // + // +----+----------+----------+ + // |VER | NMETHODS | METHODS | + // +----+----------+----------+ + // | 1 | 1 | 1 to 255 | + // +----+----------+----------+ + // + // The VER field is set to X'05' for this version of the protocol. The + // NMETHODS field contains the number of method identifier octets that + // appear in the METHODS field. + // + + buffer[count++] = (byte)SOCKSVersions.V5; + if (this.Credentials != null) + { + buffer[count++] = 0x02; // method count + buffer[count++] = (byte)SOCKSMethods.UsernameAndPassword; + buffer[count++] = (byte)SOCKSMethods.NoAuthenticationRequired; + } + else + { + buffer[count++] = 0x01; // method count + buffer[count++] = (byte)SOCKSMethods.NoAuthenticationRequired; + } + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Information("SOCKSProxy", string.Format("Sending method negotiation - count: {0} buffer: {1} ", count.ToString(), BufferToHexStr(buffer, count)), request.Context); + + // Write negotiation + stream.Write(buffer, 0, count); + // Read result + count = stream.Read(buffer, 0, buffer.Length); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Information("SOCKSProxy", string.Format("Negotiation response - count: {0} buffer: {1} ", count.ToString(), BufferToHexStr(buffer, count)), request.Context); + + // The server selects from one of the methods given in METHODS, and + // sends a METHOD selection message: + // + // +----+--------+ + // |VER | METHOD | + // +----+--------+ + // | 1 | 1 | + // +----+--------+ + // + // If the selected METHOD is X'FF', none of the methods listed by the + // client are acceptable, and the client MUST close the connection. + // + // The values currently defined for METHOD are: + // + // o X'00' NO AUTHENTICATION REQUIRED + // o X'01' GSSAPI + // o X'02' USERNAME/PASSWORD + // o X'03' to X'7F' IANA ASSIGNED + // o X'80' to X'FE' RESERVED FOR PRIVATE METHODS + // o X'FF' NO ACCEPTABLE METHODS + // + // The client and server then enter a method-specific sub-negotiation. + + SOCKSVersions version = (SOCKSVersions)buffer[0]; + SOCKSMethods method = (SOCKSMethods)buffer[1]; + + // Expected result: + // 1.) Received bytes' count is 2: version + preferred method + // 2.) Version must be 5 + // 3.) Preferred method must NOT be 0xFF + if (count != 2) + throw new Exception(string.Format("SOCKS Proxy - Expected read count: 2! count: {0} buffer: {1}" + count.ToString(), BufferToHexStr(buffer, count))); + else if (version != SOCKSVersions.V5) + throw new Exception("SOCKS Proxy - Expected version: 5, received version: " + buffer[0].ToString("X2")); + else if (method == SOCKSMethods.NoAcceptableMethods) + throw new Exception("SOCKS Proxy - Received 'NO ACCEPTABLE METHODS' (0xFF)"); + else + { + HTTPManager.Logger.Information("SOCKSProxy", "Method negotiation over. Method: " + method.ToString(), request.Context); + switch (method) + { + case SOCKSMethods.NoAuthenticationRequired: + // nothing to do + break; + + case SOCKSMethods.UsernameAndPassword: + if (this.Credentials.UserName.Length > 255) + throw new Exception(string.Format("SOCKS Proxy - Credentials.UserName too long! {0} > 255", this.Credentials.UserName.Length.ToString())); + if (this.Credentials.Password.Length > 255) + throw new Exception(string.Format("SOCKS Proxy - Credentials.Password too long! {0} > 255", this.Credentials.Password.Length.ToString())); + + // https://tools.ietf.org/html/rfc1929 : Username/Password Authentication for SOCKS V5 + // Once the SOCKS V5 server has started, and the client has selected the + // Username/Password Authentication protocol, the Username/Password + // subnegotiation begins. This begins with the client producing a + // Username/Password request: + // + // +----+------+----------+------+----------+ + // |VER | ULEN | UNAME | PLEN | PASSWD | + // +----+------+----------+------+----------+ + // | 1 | 1 | 1 to 255 | 1 | 1 to 255 | + // +----+------+----------+------+----------+ + + HTTPManager.Logger.Information("SOCKSProxy", "starting sub-negotiation", request.Context); + count = 0; + buffer[count++] = 0x01; // version of sub negotiation + + WriteString(buffer, ref count, this.Credentials.UserName); + WriteString(buffer, ref count, this.Credentials.Password); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Information("SOCKSProxy", string.Format("Sending username and password sub-negotiation - count: {0} buffer: {1} ", count.ToString(), BufferToHexStr(buffer, count)), request.Context); + + // Write negotiation + stream.Write(buffer, 0, count); + // Read result + count = stream.Read(buffer, 0, buffer.Length); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Information("SOCKSProxy", string.Format("Username and password sub-negotiation response - count: {0} buffer: {1} ", count.ToString(), BufferToHexStr(buffer, count)), request.Context); + + // The server verifies the supplied UNAME and PASSWD, and sends the + // following response: + // + // +----+--------+ + // |VER | STATUS | + // +----+--------+ + // | 1 | 1 | + // +----+--------+ + + // A STATUS field of X'00' indicates success. If the server returns a + // `failure' (STATUS value other than X'00') status, it MUST close the + // connection. + bool success = buffer[1] == 0; + + if (count != 2) + throw new Exception(string.Format("SOCKS Proxy - Expected read count: 2! count: {0} buffer: {1}" + count.ToString(), BufferToHexStr(buffer, count))); + else if (!success) + throw new Exception("SOCKS proxy: username+password authentication failed!"); + + HTTPManager.Logger.Information("SOCKSProxy", "Authenticated!", request.Context); + break; + + case SOCKSMethods.GSSAPI: + throw new Exception("SOCKS proxy: GSSAPI not supported!"); + + case SOCKSMethods.NoAcceptableMethods: + throw new Exception("SOCKS proxy: No acceptable method"); + } + } + + // The SOCKS request is formed as follows: + // + // +----+-----+-------+------+----------+----------+ + // |VER | CMD | RSV | ATYP | DST.ADDR | DST.PORT | + // +----+-----+-------+------+----------+----------+ + // | 1 | 1 | X'00' | 1 | Variable | 2 | + // +----+-----+-------+------+----------+----------+ + // + // Where: + // + // o VER protocol version: X'05' + // o CMD + // o CONNECT X'01' + // o BIND X'02' + // o UDP ASSOCIATE X'03' + // o RSV RESERVED + // o ATYP address type of following address + // o IP V4 address: X'01' + // o DOMAINNAME: X'03' + // o IP V6 address: X'04' + // o DST.ADDR desired destination address + // o DST.PORT desired destination port in network octet + // order + + count = 0; + buffer[count++] = (byte)SOCKSVersions.V5; // version: 5 + buffer[count++] = 0x01; // command: connect + buffer[count++] = 0x00; // reserved, bust be 0x00 + + if (request.CurrentUri.IsHostIsAnIPAddress()) + { + bool isIPV4 = Extensions.Extensions.IsIpV4AddressValid(request.CurrentUri.Host); + buffer[count++] = isIPV4 ? (byte)SOCKSAddressTypes.IPV4 : (byte)SOCKSAddressTypes.IPv6; + + var ipAddress = System.Net.IPAddress.Parse(request.CurrentUri.Host); + var ipBytes = ipAddress.GetAddressBytes(); + WriteBytes(buffer, ref count, ipBytes); // destination address + } + else + { + buffer[count++] = (byte)SOCKSAddressTypes.DomainName; + + // The first octet of the address field contains the number of octets of name that + // follow, there is no terminating NUL octet. + WriteString(buffer, ref count, request.CurrentUri.Host); + } + + // destination port in network octet order + buffer[count++] = (byte)((request.CurrentUri.Port >> 8) & 0xFF); + buffer[count++] = (byte)(request.CurrentUri.Port & 0xFF); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Information("SOCKSProxy", string.Format("Sending connect request - count: {0} buffer: {1} ", count.ToString(), BufferToHexStr(buffer, count)), request.Context); + + stream.Write(buffer, 0, count); + count = stream.Read(buffer, 0, buffer.Length); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Information("SOCKSProxy", string.Format("Connect response - count: {0} buffer: {1} ", count.ToString(), BufferToHexStr(buffer, count)), request.Context); + + // The SOCKS request information is sent by the client as soon as it has + // established a connection to the SOCKS server, and completed the + // authentication negotiations. The server evaluates the request, and + // returns a reply formed as follows: + // + // +----+-----+-------+------+----------+----------+ + // |VER | REP | RSV | ATYP | BND.ADDR | BND.PORT | + // +----+-----+-------+------+----------+----------+ + // | 1 | 1 | X'00' | 1 | Variable | 2 | + // +----+-----+-------+------+----------+----------+ + // + // Where: + // o VER protocol version: X'05' + // o REP Reply field: + // o X'00' succeeded + // o X'01' general SOCKS server failure + // o X'02' connection not allowed by ruleset + // o X'03' Network unreachable + // o X'04' Host unreachable + // o X'05' Connection refused + // o X'06' TTL expired + // o X'07' Command not supported + // o X'08' Address type not supported + // o X'09' to X'FF' unassigned + // o RSV RESERVED + // o ATYP address type of following address + // o IP V4 address: X'01' + // o DOMAINNAME: X'03' + // o IP V6 address: X'04' + // o BND.ADDR server bound address + // o BND.PORT server bound port in network octet order + // + // Fields marked RESERVED (RSV) must be set to X'00'. + + version = (SOCKSVersions)buffer[0]; + SOCKSReplies reply = (SOCKSReplies)buffer[1]; + + // at least 10 bytes expected as a result + if (count < 10) + throw new Exception(string.Format("SOCKS proxy: not enough data returned by the server. Expected count is at least 10 bytes, server returned {0} bytes! content: {1}", count.ToString(), BufferToHexStr(buffer, count))); + else if (reply != SOCKSReplies.Succeeded) + throw new Exception("SOCKS proxy error: " + reply.ToString()); + + HTTPManager.Logger.Information("SOCKSProxy", "Connected!", request.Context); + } + finally + { + BufferPool.Release(buffer); + } + } + + private void WriteString(byte[] buffer, ref int count, string str) + { + // Get the bytes + int byteCount = Encoding.UTF8.GetByteCount(str); + if (byteCount > 255) + throw new Exception(string.Format("SOCKS Proxy - String is too large ({0}) to fit in 255 bytes!", byteCount.ToString())); + + // number of bytes + buffer[count++] = (byte)byteCount; + + // and the bytes itself + Encoding.UTF8.GetBytes(str, 0, str.Length, buffer, count); + + count += byteCount; + } + + private void WriteBytes(byte[] buffer, ref int count, byte[] bytes) + { + Array.Copy(bytes, 0, buffer, count, bytes.Length); + count += bytes.Length; + } + + private string BufferToHexStr(byte[] buffer, int count) + { + StringBuilder sb = StringBuilderPool.Get(count * 2); //new StringBuilder(count * 2); + for (int i = 0; i < count; ++i) + sb.AppendFormat("0x{0} ", buffer[i].ToString("X2")); + return StringBuilderPool.ReleaseAndGrab(sb); + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/SOCKSProxy.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/SOCKSProxy.cs.meta new file mode 100644 index 000000000..37dcab6c9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Proxies/SOCKSProxy.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c9df92482bea23b4aab51dbfc2522c63 +timeCreated: 1548063275 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol.meta new file mode 100644 index 000000000..3d21f3067 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 97fdcd3872eb99b47b5b13fc86176ca5 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/License.txt b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/License.txt new file mode 100644 index 000000000..96e67d586 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/License.txt @@ -0,0 +1,7 @@ +Copyright (c) 2000 - 2017 The Legion of the Bouncy Castle Inc. (https://www.bouncycastle.org) + +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. \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/License.txt.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/License.txt.meta new file mode 100644 index 000000000..8f3271c43 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/License.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fc7453f14fee55347b287df5490f3c4d +timeCreated: 1490202077 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1.meta new file mode 100644 index 000000000..c4943d1ab --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bedc740ef99712e40b82c0c7de92cf9c +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1Generator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1Generator.cs new file mode 100644 index 000000000..b61edf480 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1Generator.cs @@ -0,0 +1,32 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public abstract class Asn1Generator + { + private Stream _out; + + protected Asn1Generator( + Stream outStream) + { + _out = outStream; + } + + protected Stream Out + { + get { return _out; } + } + + public abstract void AddObject(Asn1Encodable obj); + + public abstract void AddObject(Asn1Object obj); + + public abstract Stream GetRawOutputStream(); + + public abstract void Close(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1Generator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1Generator.cs.meta new file mode 100644 index 000000000..866fb88dd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1Generator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bdc81b96ab45ff94098a67c1dcf27e23 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1OctetStringParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1OctetStringParser.cs new file mode 100644 index 000000000..924e7baa7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1OctetStringParser.cs @@ -0,0 +1,17 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public interface Asn1OctetStringParser + : IAsn1Convertible + { + /// Return the content of the OCTET STRING as a . + /// A represnting the OCTET STRING's content. + Stream GetOctetStream(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1OctetStringParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1OctetStringParser.cs.meta new file mode 100644 index 000000000..83de61226 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1OctetStringParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc7b00883ebe075438a06d46defe0b35 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1SequenceParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1SequenceParser.cs new file mode 100644 index 000000000..81605115d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1SequenceParser.cs @@ -0,0 +1,12 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public interface Asn1SequenceParser + : IAsn1Convertible + { + IAsn1Convertible ReadObject(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1SequenceParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1SequenceParser.cs.meta new file mode 100644 index 000000000..e4194e052 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1SequenceParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 945f35756f280754580483acdd35d1f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1SetParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1SetParser.cs new file mode 100644 index 000000000..c5eda4c52 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1SetParser.cs @@ -0,0 +1,12 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public interface Asn1SetParser + : IAsn1Convertible + { + IAsn1Convertible ReadObject(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1SetParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1SetParser.cs.meta new file mode 100644 index 000000000..ce0441dc4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1SetParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5c4059ebe7ac0240878ec76e191d1ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1StreamParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1StreamParser.cs new file mode 100644 index 000000000..bee937cb3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1StreamParser.cs @@ -0,0 +1,248 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class Asn1StreamParser + { + private readonly Stream _in; + private readonly int _limit; + + private readonly byte[][] tmpBuffers; + + public Asn1StreamParser(Stream input) + : this(input, Asn1InputStream.FindLimit(input)) + { + } + + public Asn1StreamParser(byte[] encoding) + : this(new MemoryStream(encoding, false), encoding.Length) + { + } + + public Asn1StreamParser(Stream input, int limit) + : this(input, limit, new byte[16][]) + { + } + + internal Asn1StreamParser(Stream input, int limit, byte[][] tmpBuffers) + { + if (!input.CanRead) + throw new ArgumentException("Expected stream to be readable", "input"); + + this._in = input; + this._limit = limit; + this.tmpBuffers = tmpBuffers; + } + + public virtual IAsn1Convertible ReadObject() + { + int tagHdr = _in.ReadByte(); + if (tagHdr < 0) + return null; + + return ImplParseObject(tagHdr); + } + + internal IAsn1Convertible ImplParseObject(int tagHdr) + { + // turn off looking for "00" while we resolve the tag + Set00Check(false); + + // + // calculate tag number + // + int tagNo = Asn1InputStream.ReadTagNumber(_in, tagHdr); + + // + // calculate length + // + int length = Asn1InputStream.ReadLength(_in, _limit, + tagNo == Asn1Tags.BitString || tagNo == Asn1Tags.OctetString || tagNo == Asn1Tags.Sequence || + tagNo == Asn1Tags.Set || tagNo == Asn1Tags.External); + + if (length < 0) // indefinite-length method + { + if (0 == (tagHdr & Asn1Tags.Constructed)) + throw new IOException("indefinite-length primitive encoding encountered"); + + IndefiniteLengthInputStream indIn = new IndefiniteLengthInputStream(_in, _limit); + Asn1StreamParser sp = new Asn1StreamParser(indIn, _limit, tmpBuffers); + + int tagClass = tagHdr & Asn1Tags.Private; + if (0 != tagClass) + return new BerTaggedObjectParser(tagClass, tagNo, sp); + + return sp.ParseImplicitConstructedIL(tagNo); + } + else + { + DefiniteLengthInputStream defIn = new DefiniteLengthInputStream(_in, length, _limit); + + if (0 == (tagHdr & Asn1Tags.Flags)) + return ParseImplicitPrimitive(tagNo, defIn); + + Asn1StreamParser sp = new Asn1StreamParser(defIn, defIn.Remaining, tmpBuffers); + + int tagClass = tagHdr & Asn1Tags.Private; + if (0 != tagClass) + { + bool isConstructed = (tagHdr & Asn1Tags.Constructed) != 0; + + return new DLTaggedObjectParser(tagClass, tagNo, isConstructed, sp); + } + + return sp.ParseImplicitConstructedDL(tagNo); + } + } + + internal Asn1Object LoadTaggedDL(int tagClass, int tagNo, bool constructed) + { + if (!constructed) + { + byte[] contentsOctets = ((DefiniteLengthInputStream)_in).ToArray(); + return Asn1TaggedObject.CreatePrimitive(tagClass, tagNo, contentsOctets); + } + + Asn1EncodableVector contentsElements = ReadVector(); + return Asn1TaggedObject.CreateConstructedDL(tagClass, tagNo, contentsElements); + } + + internal Asn1Object LoadTaggedIL(int tagClass, int tagNo) + { + Asn1EncodableVector contentsElements = ReadVector(); + return Asn1TaggedObject.CreateConstructedIL(tagClass, tagNo, contentsElements); + } + + internal IAsn1Convertible ParseImplicitConstructedDL(int univTagNo) + { + switch (univTagNo) + { + case Asn1Tags.BitString: + // TODO[asn1] DLConstructedBitStringParser + return new BerBitStringParser(this); + case Asn1Tags.External: + return new DerExternalParser(this); + case Asn1Tags.OctetString: + // TODO[asn1] DLConstructedOctetStringParser + return new BerOctetStringParser(this); + case Asn1Tags.Set: + return new DerSetParser(this); + case Asn1Tags.Sequence: + return new DerSequenceParser(this); + default: + throw new Asn1Exception("unknown DL object encountered: 0x" + univTagNo.ToString("X")); + } + } + + internal IAsn1Convertible ParseImplicitConstructedIL(int univTagNo) + { + switch (univTagNo) + { + case Asn1Tags.BitString: + return new BerBitStringParser(this); + case Asn1Tags.External: + // TODO[asn1] BERExternalParser + return new DerExternalParser(this); + case Asn1Tags.OctetString: + return new BerOctetStringParser(this); + case Asn1Tags.Sequence: + return new BerSequenceParser(this); + case Asn1Tags.Set: + return new BerSetParser(this); + default: + throw new Asn1Exception("unknown BER object encountered: 0x" + univTagNo.ToString("X")); + } + } + + internal IAsn1Convertible ParseImplicitPrimitive(int univTagNo) + { + return ParseImplicitPrimitive(univTagNo, (DefiniteLengthInputStream)_in); + } + + internal IAsn1Convertible ParseImplicitPrimitive(int univTagNo, DefiniteLengthInputStream defIn) + { + // Some primitive encodings can be handled by parsers too... + switch (univTagNo) + { + case Asn1Tags.BitString: + return new DLBitStringParser(defIn); + case Asn1Tags.External: + throw new Asn1Exception("externals must use constructed encoding (see X.690 8.18)"); + case Asn1Tags.OctetString: + return new DerOctetStringParser(defIn); + case Asn1Tags.Set: + throw new Asn1Exception("sequences must use constructed encoding (see X.690 8.9.1/8.10.1)"); + case Asn1Tags.Sequence: + throw new Asn1Exception("sets must use constructed encoding (see X.690 8.11.1/8.12.1)"); + } + + try + { + return Asn1InputStream.CreatePrimitiveDerObject(univTagNo, defIn, tmpBuffers); + } + catch (ArgumentException e) + { + throw new Asn1Exception("corrupted stream detected", e); + } + } + + internal IAsn1Convertible ParseObject(int univTagNo) + { + if (univTagNo < 0 || univTagNo > 30) + throw new ArgumentException("invalid universal tag number: " + univTagNo, "univTagNo"); + + int tagHdr = _in.ReadByte(); + if (tagHdr < 0) + return null; + + if ((tagHdr & ~Asn1Tags.Constructed) != univTagNo) + throw new IOException("unexpected identifier encountered: " + tagHdr); + + return ImplParseObject(tagHdr); + } + + internal Asn1TaggedObjectParser ParseTaggedObject() + { + int tagHdr = _in.ReadByte(); + if (tagHdr< 0) + return null; + + int tagClass = tagHdr & Asn1Tags.Private; + if (0 == tagClass) + throw new Asn1Exception("no tagged object found"); + + return (Asn1TaggedObjectParser)ImplParseObject(tagHdr); + } + + // TODO[asn1] Prefer 'LoadVector' + internal Asn1EncodableVector ReadVector() + { + int tagHdr = _in.ReadByte(); + if (tagHdr < 0) + return new Asn1EncodableVector(0); + + Asn1EncodableVector v = new Asn1EncodableVector(); + do + { + IAsn1Convertible obj = ImplParseObject(tagHdr); + + v.Add(obj.ToAsn1Object()); + } + while ((tagHdr = _in.ReadByte()) >= 0); + return v; + } + + private void Set00Check(bool enabled) + { + if (_in is IndefiniteLengthInputStream indef) + { + indef.SetEofOn00(enabled); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1StreamParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1StreamParser.cs.meta new file mode 100644 index 000000000..dcf144f74 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1StreamParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12d648f2463b0b34a8a0756dbb9d6bfb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1TaggedObjectParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1TaggedObjectParser.cs new file mode 100644 index 000000000..07e7a1610 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1TaggedObjectParser.cs @@ -0,0 +1,39 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public interface Asn1TaggedObjectParser + : IAsn1Convertible + { + int TagClass { get; } + + int TagNo { get; } + + bool HasContextTag(int tagNo); + + bool HasTag(int tagClass, int tagNo); + + /// + IAsn1Convertible ParseBaseUniversal(bool declaredExplicit, int baseTagNo); + + /// Needed for open types, until we have better type-guided parsing support. + /// + /// Use sparingly for other purposes, and prefer or + /// where possible. Before using, check for matching tag + /// class and number. + /// + /// + IAsn1Convertible ParseExplicitBaseObject(); + + /// + Asn1TaggedObjectParser ParseExplicitBaseTagged(); + + /// + Asn1TaggedObjectParser ParseImplicitBaseTagged(int baseTagClass, int baseTagNo); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1TaggedObjectParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1TaggedObjectParser.cs.meta new file mode 100644 index 000000000..fffc2b3eb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ASN1TaggedObjectParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e183ed6c26f0fac4caebd14e56080e86 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1BitStringParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1BitStringParser.cs new file mode 100644 index 000000000..776feccd3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1BitStringParser.cs @@ -0,0 +1,36 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public interface Asn1BitStringParser + : IAsn1Convertible + { + /// Return a representing the contents of the BIT STRING. The final byte, if any, + /// may include pad bits. See . + /// A with its source as the BIT STRING content. + /// + Stream GetBitStream(); + + /// Return a representing the contents of the BIT STRING, where the content is + /// expected to be octet-aligned (this will be automatically checked during parsing). + /// A with its source as the BIT STRING content. + /// + Stream GetOctetStream(); + + /// Return the number of pad bits, if any, in the final byte, if any, read from + /// . + /// + /// This number is in the range zero to seven. That number of the least significant bits of the final byte, if + /// any, are not part of the contents and should be ignored. NOTE: Must be called AFTER the stream has been + /// fully processed. (Does not need to be called if was used instead of + /// . + /// + /// The number of pad bits. In the range zero to seven. + int PadBits { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1BitStringParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1BitStringParser.cs.meta new file mode 100644 index 000000000..a1c063854 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1BitStringParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24137e6820af97b4bb29831a34398f8f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Encodable.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Encodable.cs new file mode 100644 index 000000000..fbe06a82f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Encodable.cs @@ -0,0 +1,80 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public abstract class Asn1Encodable + : IAsn1Convertible + { + public const string Der = "DER"; + public const string Ber = "BER"; + + public virtual void EncodeTo(Stream output) + { + ToAsn1Object().EncodeTo(output); + } + + public virtual void EncodeTo(Stream output, string encoding) + { + ToAsn1Object().EncodeTo(output, encoding); + } + + public byte[] GetEncoded() + { + MemoryStream bOut = new MemoryStream(); + ToAsn1Object().EncodeTo(bOut); + return bOut.ToArray(); + } + + public byte[] GetEncoded(string encoding) + { + MemoryStream bOut = new MemoryStream(); + ToAsn1Object().EncodeTo(bOut, encoding); + return bOut.ToArray(); + } + + /** + * Return the DER encoding of the object, null if the DER encoding can not be made. + * + * @return a DER byte array, null otherwise. + */ + public byte[] GetDerEncoded() + { + try + { + return GetEncoded(Der); + } + catch (IOException) + { + return null; + } + } + + public sealed override int GetHashCode() + { + return ToAsn1Object().CallAsn1GetHashCode(); + } + + public sealed override bool Equals( + object obj) + { + if (obj == this) + return true; + + IAsn1Convertible other = obj as IAsn1Convertible; + + if (other == null) + return false; + + Asn1Object o1 = ToAsn1Object(); + Asn1Object o2 = other.ToAsn1Object(); + + return o1 == o2 || (null != o2 && o1.CallAsn1Equals(o2)); + } + + public abstract Asn1Object ToAsn1Object(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Encodable.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Encodable.cs.meta new file mode 100644 index 000000000..f4215c8fa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Encodable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b69b682df6ac1845b77ec1b6bf0427d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1EncodableVector.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1EncodableVector.cs new file mode 100644 index 000000000..5b681772b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1EncodableVector.cs @@ -0,0 +1,248 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * Mutable class for building ASN.1 constructed objects such as SETs or SEQUENCEs. + */ + public class Asn1EncodableVector + : IEnumerable + { + internal static readonly Asn1Encodable[] EmptyElements = new Asn1Encodable[0]; + + private const int DefaultCapacity = 10; + + private Asn1Encodable[] elements; + private int elementCount; + private bool copyOnWrite; + + public static Asn1EncodableVector FromEnumerable(IEnumerable e) + { + Asn1EncodableVector v = new Asn1EncodableVector(); + foreach (Asn1Encodable obj in e) + { + v.Add(obj); + } + return v; + } + + public Asn1EncodableVector() + : this(DefaultCapacity) + { + } + + public Asn1EncodableVector(int initialCapacity) + { + if (initialCapacity < 0) + throw new ArgumentException("must not be negative", "initialCapacity"); + + this.elements = (initialCapacity == 0) ? EmptyElements : new Asn1Encodable[initialCapacity]; + this.elementCount = 0; + this.copyOnWrite = false; + } + + public Asn1EncodableVector(Asn1Encodable element) + : this() + { + Add(element); + } + + public Asn1EncodableVector(Asn1Encodable element1, Asn1Encodable element2) + : this() + { + Add(element1); + Add(element2); + } + + public Asn1EncodableVector(params Asn1Encodable[] v) + : this() + { + Add(v); + } + + public void Add(Asn1Encodable element) + { + if (null == element) + throw new ArgumentNullException("element"); + + int capacity = elements.Length; + int minCapacity = elementCount + 1; + if ((minCapacity > capacity) | copyOnWrite) + { + Reallocate(minCapacity); + } + + this.elements[elementCount] = element; + this.elementCount = minCapacity; + } + + public void Add(Asn1Encodable element1, Asn1Encodable element2) + { + Add(element1); + Add(element2); + } + + public void Add(params Asn1Encodable[] objs) + { + foreach (Asn1Encodable obj in objs) + { + Add(obj); + } + } + + public void AddOptional(Asn1Encodable element) + { + if (element != null) + { + Add(element); + } + } + + public void AddOptional(Asn1Encodable element1, Asn1Encodable element2) + { + if (element1 != null) + { + Add(element1); + } + if (element2 != null) + { + Add(element2); + } + } + + public void AddOptional(params Asn1Encodable[] elements) + { + if (elements != null) + { + foreach (var element in elements) + { + if (element != null) + { + Add(element); + } + } + } + } + + public void AddOptionalTagged(bool isExplicit, int tagNo, Asn1Encodable obj) + { + if (null != obj) + { + Add(new DerTaggedObject(isExplicit, tagNo, obj)); + } + } + + public void AddOptionalTagged(bool isExplicit, int tagClass, int tagNo, Asn1Encodable obj) + { + if (null != obj) + { + Add(new DerTaggedObject(isExplicit, tagClass, tagNo, obj)); + } + } + + public void AddAll(Asn1EncodableVector other) + { + if (null == other) + throw new ArgumentNullException("other"); + + int otherElementCount = other.Count; + if (otherElementCount < 1) + return; + + int capacity = elements.Length; + int minCapacity = elementCount + otherElementCount; + if ((minCapacity > capacity) | copyOnWrite) + { + Reallocate(minCapacity); + } + + int i = 0; + do + { + Asn1Encodable otherElement = other[i]; + if (null == otherElement) + throw new NullReferenceException("'other' elements cannot be null"); + + this.elements[elementCount + i] = otherElement; + } + while (++i < otherElementCount); + + this.elementCount = minCapacity; + } + + public Asn1Encodable this[int index] + { + get + { + if (index >= elementCount) + throw new IndexOutOfRangeException(index + " >= " + elementCount); + + return elements[index]; + } + } + + public int Count + { + get { return elementCount; } + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + IEnumerable e = CopyElements(); + return e.GetEnumerator(); + } + + internal Asn1Encodable[] CopyElements() + { + if (0 == elementCount) + return EmptyElements; + + Asn1Encodable[] copy = new Asn1Encodable[elementCount]; + Array.Copy(elements, 0, copy, 0, elementCount); + return copy; + } + + internal Asn1Encodable[] TakeElements() + { + if (0 == elementCount) + return EmptyElements; + + if (elements.Length == elementCount) + { + this.copyOnWrite = true; + return elements; + } + + Asn1Encodable[] copy = new Asn1Encodable[elementCount]; + Array.Copy(elements, 0, copy, 0, elementCount); + return copy; + } + + private void Reallocate(int minCapacity) + { + int oldCapacity = elements.Length; + int newCapacity = System.Math.Max(oldCapacity, minCapacity + (minCapacity >> 1)); + + Asn1Encodable[] copy = new Asn1Encodable[newCapacity]; + Array.Copy(elements, 0, copy, 0, elementCount); + + this.elements = copy; + this.copyOnWrite = false; + } + + internal static Asn1Encodable[] CloneElements(Asn1Encodable[] elements) + { + return elements.Length < 1 ? EmptyElements : (Asn1Encodable[])elements.Clone(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1EncodableVector.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1EncodableVector.cs.meta new file mode 100644 index 000000000..8a71ee65a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1EncodableVector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e3245f80405a56e41ad1c7af42022aea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Exception.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Exception.cs new file mode 100644 index 000000000..5b28c2292 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Exception.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + [Serializable] + public class Asn1Exception + : IOException + { + public Asn1Exception() + : base() + { + } + + public Asn1Exception(string message) + : base(message) + { + } + + public Asn1Exception(string message, Exception innerException) + : base(message, innerException) + { + } + + protected Asn1Exception(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Exception.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Exception.cs.meta new file mode 100644 index 000000000..eea64643d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Exception.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bbd822b3cbfd4b643a313c46df1ee0a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1GeneralizedTime.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1GeneralizedTime.cs new file mode 100644 index 000000000..303640bdb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1GeneralizedTime.cs @@ -0,0 +1,266 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Globalization; +using System.IO; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /// GeneralizedTime ASN.1 type + public class Asn1GeneralizedTime + : Asn1Object + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(Asn1GeneralizedTime), Asn1Tags.GeneralizedTime) { } + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets()); + } + } + + public static Asn1GeneralizedTime GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is Asn1GeneralizedTime asn1GeneralizedTime) + return asn1GeneralizedTime; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is Asn1GeneralizedTime converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (Asn1GeneralizedTime)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct generalized time from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), nameof(obj)); + } + + public static Asn1GeneralizedTime GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (Asn1GeneralizedTime)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + private readonly string m_timeString; + private readonly bool m_timeStringCanonical; + private readonly DateTime m_dateTime; + + public Asn1GeneralizedTime(string timeString) + { + m_timeString = timeString ?? throw new ArgumentNullException(nameof(timeString)); + m_timeStringCanonical = false; // TODO Dynamic check? + + try + { + m_dateTime = FromString(timeString); + } + catch (FormatException e) + { + throw new ArgumentException("invalid date string: " + e.Message); + } + } + + public Asn1GeneralizedTime(DateTime dateTime) + { + dateTime = dateTime.ToUniversalTime(); + + m_dateTime = dateTime; + m_timeString = ToStringCanonical(dateTime); + m_timeStringCanonical = true; + } + + // TODO TimeZoneInfo or other locale-specific constructors? + + internal Asn1GeneralizedTime(byte[] contents) + : this(Encoding.ASCII.GetString(contents)) + { + } + + public string TimeString => m_timeString; + + public DateTime ToDateTime() + { + return m_dateTime; + } + + internal byte[] GetContents(int encoding) + { + if (encoding == Asn1OutputStream.EncodingDer && !m_timeStringCanonical) + return Encoding.ASCII.GetBytes(ToStringCanonical(m_dateTime)); + + return Encoding.ASCII.GetBytes(m_timeString); + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.GeneralizedTime, GetContents(encoding)); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, GetContents(encoding)); + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + if (!(asn1Object is Asn1GeneralizedTime that)) + return false; + + // TODO Performance + return Arrays.AreEqual( + this.GetContents(Asn1OutputStream.EncodingDer), + that.GetContents(Asn1OutputStream.EncodingDer)); + } + + protected override int Asn1GetHashCode() + { + // TODO Performance + return Arrays.GetHashCode( + this.GetContents(Asn1OutputStream.EncodingDer)); + } + + internal static Asn1GeneralizedTime CreatePrimitive(byte[] contents) + { + return new Asn1GeneralizedTime(contents); + } + + private static DateTime FromString(string s) + { + if (s.Length < 10) + throw new FormatException(); + + s = s.Replace(',', '.'); + + if (Org.BouncyCastle.Utilities.Platform.EndsWith(s, "Z")) + { + switch (s.Length) + { + case 11: return ParseUtc(s, @"yyyyMMddHH\Z"); + case 13: return ParseUtc(s, @"yyyyMMddHHmm\Z"); + case 15: return ParseUtc(s, @"yyyyMMddHHmmss\Z"); + case 17: return ParseUtc(s, @"yyyyMMddHHmmss.f\Z"); + case 18: return ParseUtc(s, @"yyyyMMddHHmmss.ff\Z"); + case 19: return ParseUtc(s, @"yyyyMMddHHmmss.fff\Z"); + case 20: return ParseUtc(s, @"yyyyMMddHHmmss.ffff\Z"); + case 21: return ParseUtc(s, @"yyyyMMddHHmmss.fffff\Z"); + case 22: return ParseUtc(s, @"yyyyMMddHHmmss.ffffff\Z"); + case 23: return ParseUtc(s, @"yyyyMMddHHmmss.fffffff\Z"); + default: + throw new FormatException(); + } + } + + int signIndex = IndexOfSign(s, System.Math.Max(10, s.Length - 5)); + + if (signIndex < 0) + { + switch (s.Length) + { + case 10: return ParseLocal(s, @"yyyyMMddHH"); + case 12: return ParseLocal(s, @"yyyyMMddHHmm"); + case 14: return ParseLocal(s, @"yyyyMMddHHmmss"); + case 16: return ParseLocal(s, @"yyyyMMddHHmmss.f"); + case 17: return ParseLocal(s, @"yyyyMMddHHmmss.ff"); + case 18: return ParseLocal(s, @"yyyyMMddHHmmss.fff"); + case 19: return ParseLocal(s, @"yyyyMMddHHmmss.ffff"); + case 20: return ParseLocal(s, @"yyyyMMddHHmmss.fffff"); + case 21: return ParseLocal(s, @"yyyyMMddHHmmss.ffffff"); + case 22: return ParseLocal(s, @"yyyyMMddHHmmss.fffffff"); + default: + throw new FormatException(); + } + } + + if (signIndex == s.Length - 5) + { + switch (s.Length) + { + case 15: return ParseTimeZone(s, @"yyyyMMddHHzzz"); + case 17: return ParseTimeZone(s, @"yyyyMMddHHmmzzz"); + case 19: return ParseTimeZone(s, @"yyyyMMddHHmmsszzz"); + case 21: return ParseTimeZone(s, @"yyyyMMddHHmmss.fzzz"); + case 22: return ParseTimeZone(s, @"yyyyMMddHHmmss.ffzzz"); + case 23: return ParseTimeZone(s, @"yyyyMMddHHmmss.fffzzz"); + case 24: return ParseTimeZone(s, @"yyyyMMddHHmmss.ffffzzz"); + case 25: return ParseTimeZone(s, @"yyyyMMddHHmmss.fffffzzz"); + case 26: return ParseTimeZone(s, @"yyyyMMddHHmmss.ffffffzzz"); + case 27: return ParseTimeZone(s, @"yyyyMMddHHmmss.fffffffzzz"); + default: + throw new FormatException(); + } + } + + if (signIndex == s.Length - 3) + { + switch (s.Length) + { + case 13: return ParseTimeZone(s, @"yyyyMMddHHzz"); + case 15: return ParseTimeZone(s, @"yyyyMMddHHmmzz"); + case 17: return ParseTimeZone(s, @"yyyyMMddHHmmsszz"); + case 19: return ParseTimeZone(s, @"yyyyMMddHHmmss.fzz"); + case 20: return ParseTimeZone(s, @"yyyyMMddHHmmss.ffzz"); + case 21: return ParseTimeZone(s, @"yyyyMMddHHmmss.fffzz"); + case 22: return ParseTimeZone(s, @"yyyyMMddHHmmss.ffffzz"); + case 23: return ParseTimeZone(s, @"yyyyMMddHHmmss.fffffzz"); + case 24: return ParseTimeZone(s, @"yyyyMMddHHmmss.ffffffzz"); + case 25: return ParseTimeZone(s, @"yyyyMMddHHmmss.fffffffzz"); + default: + throw new FormatException(); + } + } + + throw new FormatException(); + } + + private static int IndexOfSign(string s, int startIndex) + { + int index = Org.BouncyCastle.Utilities.Platform.IndexOf(s, '+', startIndex); + if (index < 0) + { + index = Org.BouncyCastle.Utilities.Platform.IndexOf(s, '-', startIndex); + } + return index; + } + + private static DateTime ParseLocal(string s, string format) + { + return DateTime.ParseExact(s, format, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AssumeLocal); + } + + private static DateTime ParseTimeZone(string s, string format) + { + return DateTime.ParseExact(s, format, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AdjustToUniversal); + } + + private static DateTime ParseUtc(string s, string format) + { + return DateTime.ParseExact(s, format, DateTimeFormatInfo.InvariantInfo, + DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal); + } + + private static string ToStringCanonical(DateTime dateTime) + { + return dateTime.ToUniversalTime().ToString(@"yyyyMMddHHmmss.FFFFFFFK", DateTimeFormatInfo.InvariantInfo); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1GeneralizedTime.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1GeneralizedTime.cs.meta new file mode 100644 index 000000000..bdf45734f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1GeneralizedTime.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d717ef26a13ca4645a37a12bf5d48229 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1InputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1InputStream.cs new file mode 100644 index 000000000..823d9c3e4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1InputStream.cs @@ -0,0 +1,471 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * a general purpose ASN.1 decoder - note: this class differs from the + * others in that it returns null after it has read the last object in + * the stream. If an ASN.1 Null is encountered a Der/BER Null object is + * returned. + */ + public class Asn1InputStream + : FilterStream + { + private readonly int limit; + + internal byte[][] tmpBuffers; + + internal static int FindLimit(Stream input) + { + if (input is LimitedInputStream limited) + return limited.Limit; + + if (input is Asn1InputStream asn1) + return asn1.Limit; + + if (input is MemoryStream memory) + return Convert.ToInt32(memory.Length - memory.Position); + + return int.MaxValue; + } + + public Asn1InputStream(Stream input) + : this(input, FindLimit(input)) + { + } + + /** + * Create an ASN1InputStream based on the input byte array. The length of DER objects in + * the stream is automatically limited to the length of the input array. + * + * @param input array containing ASN.1 encoded data. + */ + public Asn1InputStream(byte[] input) + : this(new MemoryStream(input, false), input.Length) + { + } + + /** + * Create an ASN1InputStream where no DER object will be longer than limit. + * + * @param input stream containing ASN.1 encoded data. + * @param limit maximum size of a DER encoded object. + */ + public Asn1InputStream(Stream input, int limit) + : this(input, limit, new byte[16][]) + { + } + + internal Asn1InputStream(Stream input, int limit, byte[][] tmpBuffers) + : base(input) + { + this.limit = limit; + this.tmpBuffers = tmpBuffers; + } + + protected override void Dispose(bool disposing) + { + tmpBuffers = null; + + base.Dispose(disposing); + } + + /** + * build an object given its tag and the number of bytes to construct it from. + */ + private Asn1Object BuildObject(int tagHdr, int tagNo, int length) + { + // TODO[asn1] Special-case zero length first? + + DefiniteLengthInputStream defIn = new DefiniteLengthInputStream(s, length, limit); + + if (0 == (tagHdr & Asn1Tags.Flags)) + return CreatePrimitiveDerObject(tagNo, defIn, tmpBuffers); + + int tagClass = tagHdr & Asn1Tags.Private; + if (0 != tagClass) + { + bool isConstructed = (tagHdr & Asn1Tags.Constructed) != 0; + return ReadTaggedObjectDL(tagClass, tagNo, isConstructed, defIn); + } + + switch (tagNo) + { + case Asn1Tags.BitString: + return BuildConstructedBitString(ReadVector(defIn)); + case Asn1Tags.OctetString: + return BuildConstructedOctetString(ReadVector(defIn)); + case Asn1Tags.Sequence: + return CreateDLSequence(defIn); + case Asn1Tags.Set: + return CreateDLSet(defIn); + case Asn1Tags.External: + return DLSequence.FromVector(ReadVector(defIn)).ToAsn1External(); + default: + throw new IOException("unknown tag " + tagNo + " encountered"); + } + } + + internal Asn1Object ReadTaggedObjectDL(int tagClass, int tagNo, bool constructed, DefiniteLengthInputStream defIn) + { + if (!constructed) + { + byte[] contentsOctets = defIn.ToArray(); + return Asn1TaggedObject.CreatePrimitive(tagClass, tagNo, contentsOctets); + } + + Asn1EncodableVector contentsElements = ReadVector(defIn); + return Asn1TaggedObject.CreateConstructedDL(tagClass, tagNo, contentsElements); + } + + internal virtual Asn1EncodableVector ReadVector() + { + Asn1Object o = ReadObject(); + if (null == o) + return new Asn1EncodableVector(0); + + Asn1EncodableVector v = new Asn1EncodableVector(); + do + { + v.Add(o); + } + while ((o = ReadObject()) != null); + return v; + } + + internal virtual Asn1EncodableVector ReadVector(DefiniteLengthInputStream defIn) + { + int remaining = defIn.Remaining; + if (remaining < 1) + return new Asn1EncodableVector(0); + + return new Asn1InputStream(defIn, remaining, tmpBuffers).ReadVector(); + } + + internal virtual Asn1Sequence CreateDLSequence(DefiniteLengthInputStream defIn) + { + return DLSequence.FromVector(ReadVector(defIn)); + } + + internal virtual Asn1Set CreateDLSet(DefiniteLengthInputStream defIn) + { + return DLSet.FromVector(ReadVector(defIn)); + } + + public Asn1Object ReadObject() + { + int tagHdr = s.ReadByte(); + if (tagHdr <= 0) + { + if (tagHdr == 0) + throw new IOException("unexpected end-of-contents marker"); + + return null; + } + + int tagNo = ReadTagNumber(s, tagHdr); + int length = ReadLength(s, limit, false); + + if (length >= 0) + { + // definite-length + try + { + return BuildObject(tagHdr, tagNo, length); + } + catch (ArgumentException e) + { + throw new Asn1Exception("corrupted stream detected", e); + } + } + + // indefinite-length + + if (0 == (tagHdr & Asn1Tags.Constructed)) + throw new IOException("indefinite-length primitive encoding encountered"); + + IndefiniteLengthInputStream indIn = new IndefiniteLengthInputStream(s, limit); + Asn1StreamParser sp = new Asn1StreamParser(indIn, limit, tmpBuffers); + + int tagClass = tagHdr & Asn1Tags.Private; + if (0 != tagClass) + return sp.LoadTaggedIL(tagClass, tagNo); + + switch (tagNo) + { + case Asn1Tags.BitString: + return BerBitStringParser.Parse(sp); + case Asn1Tags.OctetString: + return BerOctetStringParser.Parse(sp); + case Asn1Tags.Sequence: + return BerSequenceParser.Parse(sp); + case Asn1Tags.Set: + return BerSetParser.Parse(sp); + case Asn1Tags.External: + // TODO[asn1] BerExternalParser + return DerExternalParser.Parse(sp); + default: + throw new IOException("unknown BER object encountered"); + } + } + + internal virtual DerBitString BuildConstructedBitString(Asn1EncodableVector contentsElements) + { + DerBitString[] bitStrings = new DerBitString[contentsElements.Count]; + + for (int i = 0; i != bitStrings.Length; i++) + { + DerBitString bitString = contentsElements[i] as DerBitString; + if (null == bitString) + throw new Asn1Exception("unknown object encountered in constructed BIT STRING: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(contentsElements[i])); + + bitStrings[i] = bitString; + } + + return new DLBitString(BerBitString.FlattenBitStrings(bitStrings), false); + } + + internal virtual Asn1OctetString BuildConstructedOctetString(Asn1EncodableVector contentsElements) + { + Asn1OctetString[] octetStrings = new Asn1OctetString[contentsElements.Count]; + + for (int i = 0; i != octetStrings.Length; i++) + { + Asn1OctetString octetString = contentsElements[i] as Asn1OctetString; + if (null == octetString) + throw new Asn1Exception("unknown object encountered in constructed OCTET STRING: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(contentsElements[i])); + + octetStrings[i] = octetString; + } + + // Note: No DLOctetString available + return new DerOctetString(BerOctetString.FlattenOctetStrings(octetStrings)); + } + + internal virtual int Limit + { + get { return limit; } + } + + internal static int ReadTagNumber(Stream s, int tagHdr) + { + int tagNo = tagHdr & 0x1f; + + // + // with tagged object tag number is bottom 5 bits, or stored at the start of the content + // + if (tagNo == 0x1f) + { + int b = s.ReadByte(); + if (b < 31) + { + if (b < 0) + throw new EndOfStreamException("EOF found inside tag value."); + + throw new IOException("corrupted stream - high tag number < 31 found"); + } + + tagNo = b & 0x7f; + + // X.690-0207 8.1.2.4.2 + // "c) bits 7 to 1 of the first subsequent octet shall not all be zero." + if (0 == tagNo) + throw new IOException("corrupted stream - invalid high tag number found"); + + while ((b & 0x80) != 0) + { + if (((uint)tagNo >> 24) != 0U) + throw new IOException("Tag number more than 31 bits"); + + tagNo <<= 7; + + b = s.ReadByte(); + if (b < 0) + throw new EndOfStreamException("EOF found inside tag value."); + + tagNo |= b & 0x7f; + } + } + + return tagNo; + } + + internal static int ReadLength(Stream s, int limit, bool isParsing) + { + int length = s.ReadByte(); + if (0U == ((uint)length >> 7)) + { + // definite-length short form + return length; + } + if (0x80 == length) + { + // indefinite-length + return -1; + } + if (length < 0) + { + throw new EndOfStreamException("EOF found when length expected"); + } + if (0xFF == length) + { + throw new IOException("invalid long form definite-length 0xFF"); + } + + int octetsCount = length & 0x7F, octetsPos = 0; + + length = 0; + do + { + int octet = s.ReadByte(); + if (octet < 0) + throw new EndOfStreamException("EOF found reading length"); + + if (((uint)length >> 23) != 0U) + throw new IOException("long form definite-length more than 31 bits"); + + length = (length << 8) + octet; + } + while (++octetsPos < octetsCount); + + if (length >= limit && !isParsing) // after all we must have read at least 1 byte + throw new IOException("corrupted stream - out of bounds length found: " + length + " >= " + limit); + + return length; + } + + private static byte[] GetBuffer(DefiniteLengthInputStream defIn, byte[][] tmpBuffers) + { + int len = defIn.Remaining; + if (len >= tmpBuffers.Length) + { + return defIn.ToArray(); + } + + byte[] buf = tmpBuffers[len]; + if (buf == null) + { + buf = tmpBuffers[len] = new byte[len]; + } + + defIn.ReadAllIntoByteArray(buf); + + return buf; + } + + private static char[] GetBmpCharBuffer(DefiniteLengthInputStream defIn) + { + int remainingBytes = defIn.Remaining; + if (0 != (remainingBytes & 1)) + throw new IOException("malformed BMPString encoding encountered"); + + char[] str = new char[remainingBytes / 2]; + int stringPos = 0; + + byte[] buf = new byte[8]; + while (remainingBytes >= 8) + { + if (Streams.ReadFully(defIn, buf, 0, 8) != 8) + throw new EndOfStreamException("EOF encountered in middle of BMPString"); + + str[stringPos ] = (char)((buf[0] << 8) | (buf[1] & 0xFF)); + str[stringPos + 1] = (char)((buf[2] << 8) | (buf[3] & 0xFF)); + str[stringPos + 2] = (char)((buf[4] << 8) | (buf[5] & 0xFF)); + str[stringPos + 3] = (char)((buf[6] << 8) | (buf[7] & 0xFF)); + stringPos += 4; + remainingBytes -= 8; + } + if (remainingBytes > 0) + { + if (Streams.ReadFully(defIn, buf, 0, remainingBytes) != remainingBytes) + throw new EndOfStreamException("EOF encountered in middle of BMPString"); + + int bufPos = 0; + do + { + int b1 = buf[bufPos++] << 8; + int b2 = buf[bufPos++] & 0xFF; + str[stringPos++] = (char)(b1 | b2); + } + while (bufPos < remainingBytes); + } + + if (0 != defIn.Remaining || str.Length != stringPos) + throw new InvalidOperationException(); + + return str; + } + + internal static Asn1Object CreatePrimitiveDerObject(int tagNo, DefiniteLengthInputStream defIn, + byte[][] tmpBuffers) + { + switch (tagNo) + { + case Asn1Tags.BmpString: + return DerBmpString.CreatePrimitive(GetBmpCharBuffer(defIn)); + case Asn1Tags.Boolean: + return DerBoolean.CreatePrimitive(GetBuffer(defIn, tmpBuffers)); + case Asn1Tags.Enumerated: + // TODO Ideally only clone if we used a buffer + return DerEnumerated.CreatePrimitive(GetBuffer(defIn, tmpBuffers), true); + case Asn1Tags.ObjectIdentifier: + // TODO Ideally only clone if we used a buffer + return DerObjectIdentifier.CreatePrimitive(GetBuffer(defIn, tmpBuffers), true); + } + + byte[] bytes = defIn.ToArray(); + + switch (tagNo) + { + case Asn1Tags.BitString: + return DerBitString.CreatePrimitive(bytes); + case Asn1Tags.GeneralizedTime: + return Asn1GeneralizedTime.CreatePrimitive(bytes); + case Asn1Tags.GeneralString: + return DerGeneralString.CreatePrimitive(bytes); + case Asn1Tags.GraphicString: + return DerGraphicString.CreatePrimitive(bytes); + case Asn1Tags.IA5String: + return DerIA5String.CreatePrimitive(bytes); + case Asn1Tags.Integer: + return DerInteger.CreatePrimitive(bytes); + case Asn1Tags.Null: + return Asn1Null.CreatePrimitive(bytes); + case Asn1Tags.NumericString: + return DerNumericString.CreatePrimitive(bytes); + case Asn1Tags.ObjectDescriptor: + return Asn1ObjectDescriptor.CreatePrimitive(bytes); + case Asn1Tags.OctetString: + return Asn1OctetString.CreatePrimitive(bytes); + case Asn1Tags.PrintableString: + return DerPrintableString.CreatePrimitive(bytes); + case Asn1Tags.RelativeOid: + return Asn1RelativeOid.CreatePrimitive(bytes, false); + case Asn1Tags.T61String: + return DerT61String.CreatePrimitive(bytes); + case Asn1Tags.UniversalString: + return DerUniversalString.CreatePrimitive(bytes); + case Asn1Tags.UtcTime: + return Asn1UtcTime.CreatePrimitive(bytes); + case Asn1Tags.Utf8String: + return DerUtf8String.CreatePrimitive(bytes); + case Asn1Tags.VideotexString: + return DerVideotexString.CreatePrimitive(bytes); + case Asn1Tags.VisibleString: + return DerVisibleString.CreatePrimitive(bytes); + default: + throw new IOException("unknown tag " + tagNo + " encountered"); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1InputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1InputStream.cs.meta new file mode 100644 index 000000000..f97b5115c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1InputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e252ac704e464264d8409a56a0bb3eb3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Null.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Null.cs new file mode 100644 index 000000000..58003f7d8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Null.cs @@ -0,0 +1,81 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * A Null object. + */ + public abstract class Asn1Null + : Asn1Object + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(Asn1Null), Asn1Tags.Null) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets()); + } + } + + public static Asn1Null GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is Asn1Null asn1Null) + return asn1Null; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is Asn1Null converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (Asn1Null)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct NULL from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public static Asn1Null GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (Asn1Null)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + internal Asn1Null() + { + } + + public override string ToString() + { + return "NULL"; + } + + internal static Asn1Null CreatePrimitive(byte[] contents) + { + if (0 != contents.Length) + throw new InvalidOperationException("malformed NULL encoding encountered"); + + return DerNull.Instance; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Null.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Null.cs.meta new file mode 100644 index 000000000..a829bca4c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Null.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b6ffeb7c543040429c96c7fa0041261 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Object.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Object.cs new file mode 100644 index 000000000..1b9a6de2a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Object.cs @@ -0,0 +1,95 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public abstract class Asn1Object + : Asn1Encodable + { + public override void EncodeTo(Stream output) + { + Asn1OutputStream asn1Out = Asn1OutputStream.Create(output); + GetEncoding(asn1Out.Encoding).Encode(asn1Out); + asn1Out.FlushInternal(); + } + + public override void EncodeTo(Stream output, string encoding) + { + Asn1OutputStream asn1Out = Asn1OutputStream.Create(output, encoding); + GetEncoding(asn1Out.Encoding).Encode(asn1Out); + asn1Out.FlushInternal(); + } + + public bool Equals(Asn1Object other) + { + return this == other || Asn1Equals(other); + } + + /// Create a base ASN.1 object from a byte array. + /// The byte array to parse. + /// The base ASN.1 object represented by the byte array. + /// + /// If there is a problem parsing the data, or parsing an object did not exhaust the available data. + /// + public static Asn1Object FromByteArray( + byte[] data) + { + try + { + MemoryStream input = new MemoryStream(data, false); + Asn1InputStream asn1 = new Asn1InputStream(input, data.Length); + Asn1Object result = asn1.ReadObject(); + if (input.Position != input.Length) + throw new IOException("extra data found after object"); + return result; + } + catch (InvalidCastException) + { + throw new IOException("cannot recognise object in byte array"); + } + } + + /// Read a base ASN.1 object from a stream. + /// The stream to parse. + /// The base ASN.1 object represented by the byte array. + /// If there is a problem parsing the data. + public static Asn1Object FromStream( + Stream inStr) + { + try + { + return new Asn1InputStream(inStr).ReadObject(); + } + catch (InvalidCastException) + { + throw new IOException("cannot recognise object in stream"); + } + } + + public sealed override Asn1Object ToAsn1Object() + { + return this; + } + + internal abstract IAsn1Encoding GetEncoding(int encoding); + + internal abstract IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo); + + protected abstract bool Asn1Equals(Asn1Object asn1Object); + protected abstract int Asn1GetHashCode(); + + internal bool CallAsn1Equals(Asn1Object obj) + { + return Asn1Equals(obj); + } + + internal int CallAsn1GetHashCode() + { + return Asn1GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Object.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Object.cs.meta new file mode 100644 index 000000000..a702d99cb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Object.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 86b4801bceb05f54ab0490784feb75c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1ObjectDescriptor.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1ObjectDescriptor.cs new file mode 100644 index 000000000..318fd7151 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1ObjectDescriptor.cs @@ -0,0 +1,125 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public sealed class Asn1ObjectDescriptor + : Asn1Object + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(Asn1ObjectDescriptor), Asn1Tags.ObjectDescriptor) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return new Asn1ObjectDescriptor( + (DerGraphicString)DerGraphicString.Meta.Instance.FromImplicitPrimitive(octetString)); + } + + internal override Asn1Object FromImplicitConstructed(Asn1Sequence sequence) + { + return new Asn1ObjectDescriptor( + (DerGraphicString)DerGraphicString.Meta.Instance.FromImplicitConstructed(sequence)); + } + } + + /** + * Return an ObjectDescriptor from the passed in object. + * + * @param obj an ASN1ObjectDescriptor or an object that can be converted into one. + * @exception IllegalArgumentException if the object cannot be converted. + * @return an ASN1ObjectDescriptor instance, or null. + */ + public static Asn1ObjectDescriptor GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is Asn1ObjectDescriptor asn1ObjectDescriptor) + return asn1ObjectDescriptor; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is Asn1ObjectDescriptor converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (Asn1ObjectDescriptor)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct object descriptor from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * Return an ObjectDescriptor from a tagged object. + * + * @param taggedObject the tagged object holding the object we want. + * @param declaredExplicit true if the object is meant to be explicitly tagged, false otherwise. + * @exception IllegalArgumentException if the tagged object cannot be converted. + * @return an ASN1ObjectDescriptor instance, or null. + */ + public static Asn1ObjectDescriptor GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (Asn1ObjectDescriptor)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + private readonly DerGraphicString m_baseGraphicString; + + public Asn1ObjectDescriptor(DerGraphicString baseGraphicString) + { + if (null == baseGraphicString) + throw new ArgumentNullException("baseGraphicString"); + + this.m_baseGraphicString = baseGraphicString; + } + + public DerGraphicString BaseGraphicString + { + get { return m_baseGraphicString; } + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return m_baseGraphicString.GetEncodingImplicit(encoding, Asn1Tags.Universal, Asn1Tags.ObjectDescriptor); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return m_baseGraphicString.GetEncodingImplicit(encoding, tagClass, tagNo); + } + + protected override int Asn1GetHashCode() + { + return ~m_baseGraphicString.CallAsn1GetHashCode(); + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + Asn1ObjectDescriptor that = asn1Object as Asn1ObjectDescriptor; + return null != that + && this.m_baseGraphicString.Equals(that.m_baseGraphicString); + } + + internal static Asn1ObjectDescriptor CreatePrimitive(byte[] contents) + { + return new Asn1ObjectDescriptor(DerGraphicString.CreatePrimitive(contents)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1ObjectDescriptor.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1ObjectDescriptor.cs.meta new file mode 100644 index 000000000..e2d818fa9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1ObjectDescriptor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ef670ce0aae993744a256d3bb7362b31 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1OctetString.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1OctetString.cs new file mode 100644 index 000000000..ec14b5346 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1OctetString.cs @@ -0,0 +1,136 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public abstract class Asn1OctetString + : Asn1Object, Asn1OctetStringParser + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(Asn1OctetString), Asn1Tags.OctetString) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return octetString; + } + + internal override Asn1Object FromImplicitConstructed(Asn1Sequence sequence) + { + return sequence.ToAsn1OctetString(); + } + } + + internal static readonly byte[] EmptyOctets = new byte[0]; + + /** + * return an Octet string from the given object. + * + * @param obj the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static Asn1OctetString GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is Asn1OctetString asn1OctetString) + return asn1OctetString; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is Asn1OctetString converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (Asn1OctetString)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct OCTET STRING from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * return an octet string from a tagged object. + * + * @param taggedObject the tagged object holding the object we want. + * @param declaredExplicit true if the object is meant to be explicitly tagged false otherwise. + * @exception ArgumentException if the tagged object cannot be converted. + */ + public static Asn1OctetString GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (Asn1OctetString)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + internal readonly byte[] contents; + + /** + * @param string the octets making up the octet string. + */ + internal Asn1OctetString(byte[] contents) + { + if (null == contents) + throw new ArgumentNullException("contents"); + + this.contents = contents; + } + + public Stream GetOctetStream() + { + return new MemoryStream(contents, false); + } + + public Asn1OctetStringParser Parser + { + get { return this; } + } + + public virtual byte[] GetOctets() + { + return contents; + } + + protected override int Asn1GetHashCode() + { + return Arrays.GetHashCode(GetOctets()); + } + + protected override bool Asn1Equals( + Asn1Object asn1Object) + { + DerOctetString other = asn1Object as DerOctetString; + + if (other == null) + return false; + + return Arrays.AreEqual(GetOctets(), other.GetOctets()); + } + + public override string ToString() + { + return "#" + Hex.ToHexString(contents); + } + + internal static Asn1OctetString CreatePrimitive(byte[] contents) + { + return new DerOctetString(contents); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1OctetString.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1OctetString.cs.meta new file mode 100644 index 000000000..da7987a92 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1OctetString.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 605a6b277ffde7640a895840c2243816 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1OutputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1OutputStream.cs new file mode 100644 index 000000000..a522ed9c4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1OutputStream.cs @@ -0,0 +1,192 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Diagnostics; +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ +using System.Buffers.Binary; +using System.Numerics; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class Asn1OutputStream + : FilterStream + { + internal const int EncodingBer = 1; + internal const int EncodingDer = 2; + + public static Asn1OutputStream Create(Stream output) + { + return new Asn1OutputStream(output); + } + + public static Asn1OutputStream Create(Stream output, string encoding) + { + if (Asn1Encodable.Der.Equals(encoding)) + { + return new DerOutputStream(output); + } + else + { + return new Asn1OutputStream(output); + } + } + + internal Asn1OutputStream(Stream os) + : base(os) + { + } + + public virtual void WriteObject(Asn1Encodable asn1Encodable) + { + if (null == asn1Encodable) + throw new ArgumentNullException("asn1Encodable"); + + asn1Encodable.ToAsn1Object().GetEncoding(this.Encoding).Encode(this); + FlushInternal(); + } + + public virtual void WriteObject(Asn1Object asn1Object) + { + if (null == asn1Object) + throw new ArgumentNullException("asn1Object"); + + asn1Object.GetEncoding(this.Encoding).Encode(this); + FlushInternal(); + } + + internal void EncodeContents(IAsn1Encoding[] contentsEncodings) + { + for (int i = 0, count = contentsEncodings.Length; i < count; ++i) + { + contentsEncodings[i].Encode(this); + } + } + + internal virtual int Encoding + { + get { return EncodingBer; } + } + + internal void FlushInternal() + { + // Placeholder to support future internal buffering + } + + internal void WriteDL(int dl) + { + if (dl < 128) + { + Debug.Assert(dl >= 0); + WriteByte((byte)dl); + return; + } + +#if false && (NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_) + Span encoding = stackalloc byte[5]; + BinaryPrimitives.WriteUInt32BigEndian(encoding[1..], (uint)dl); + int leadingZeroBytes = BitOperations.LeadingZeroCount((uint)dl) / 8; + encoding[leadingZeroBytes] = (byte)(0x84 - leadingZeroBytes); + Write(encoding[leadingZeroBytes..]); +#else + byte[] stack = new byte[5]; + int pos = stack.Length; + + do + { + stack[--pos] = (byte)dl; + dl >>= 8; + } + while (dl > 0); + + int count = stack.Length - pos; + stack[--pos] = (byte)(0x80 | count); + + Write(stack, pos, count + 1); +#endif + } + + internal void WriteIdentifier(int tagClass, int tagNo) + { + if (tagNo < 31) + { + WriteByte((byte)(tagClass | tagNo)); + return; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span stack = stackalloc byte[6]; +#else + byte[] stack = new byte[6]; +#endif + int pos = stack.Length; + + stack[--pos] = (byte)(tagNo & 0x7F); + while (tagNo > 127) + { + tagNo >>= 7; + stack[--pos] = (byte)(tagNo & 0x7F | 0x80); + } + + stack[--pos] = (byte)(tagClass | 0x1F); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Write(stack[pos..]); +#else + Write(stack, pos, stack.Length - pos); +#endif + } + + internal static IAsn1Encoding[] GetContentsEncodings(int encoding, Asn1Encodable[] elements) + { + int count = elements.Length; + IAsn1Encoding[] contentsEncodings = new IAsn1Encoding[count]; + for (int i = 0; i < count; ++i) + { + contentsEncodings[i] = elements[i].ToAsn1Object().GetEncoding(encoding); + } + return contentsEncodings; + } + + internal static int GetLengthOfContents(IAsn1Encoding[] contentsEncodings) + { + int contentsLength = 0; + for (int i = 0, count = contentsEncodings.Length; i < count; ++i) + { + contentsLength += contentsEncodings[i].GetLength(); + } + return contentsLength; + } + + internal static int GetLengthOfDL(int dl) + { + if (dl < 128) + return 1; + + int length = 2; + while ((dl >>= 8) > 0) + { + ++length; + } + return length; + } + + internal static int GetLengthOfIdentifier(int tagNo) + { + if (tagNo < 31) + return 1; + + int length = 2; + while ((tagNo >>= 7) > 0) + { + ++length; + } + return length; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1OutputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1OutputStream.cs.meta new file mode 100644 index 000000000..164c0172e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1OutputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ca2e340a1bd44254cac396effbb16cda +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1ParsingException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1ParsingException.cs new file mode 100644 index 000000000..ccae61b6d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1ParsingException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + [Serializable] + public class Asn1ParsingException + : InvalidOperationException + { + public Asn1ParsingException() + : base() + { + } + + public Asn1ParsingException(string message) + : base(message) + { + } + + public Asn1ParsingException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected Asn1ParsingException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1ParsingException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1ParsingException.cs.meta new file mode 100644 index 000000000..ce065d283 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1ParsingException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e565a5f2f13a702468596b17c248ac68 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1RelativeOid.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1RelativeOid.cs new file mode 100644 index 000000000..cd93da5d7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1RelativeOid.cs @@ -0,0 +1,320 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class Asn1RelativeOid + : Asn1Object + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(Asn1RelativeOid), Asn1Tags.RelativeOid) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets(), false); + } + } + + public static Asn1RelativeOid FromContents(byte[] contents) + { + return CreatePrimitive(contents, true); + } + + public static Asn1RelativeOid GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is Asn1RelativeOid asn1RelativeOid) + return asn1RelativeOid; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is Asn1RelativeOid converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (Asn1RelativeOid)FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct relative OID from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public static Asn1RelativeOid GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (Asn1RelativeOid)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + private const long LongLimit = (long.MaxValue >> 7) - 0x7F; + + private readonly string identifier; + private byte[] contents; + + public Asn1RelativeOid(string identifier) + { + if (identifier == null) + throw new ArgumentNullException("identifier"); + if (!IsValidIdentifier(identifier, 0)) + throw new FormatException("string " + identifier + " not a relative OID"); + + this.identifier = identifier; + } + + private Asn1RelativeOid(Asn1RelativeOid oid, string branchID) + { + if (!IsValidIdentifier(branchID, 0)) + throw new FormatException("string " + branchID + " not a valid relative OID branch"); + + this.identifier = oid.Id + "." + branchID; + } + + private Asn1RelativeOid(byte[] contents, bool clone) + { + this.identifier = ParseContents(contents); + this.contents = clone ? Arrays.Clone(contents) : contents; + } + + public virtual Asn1RelativeOid Branch(string branchID) + { + return new Asn1RelativeOid(this, branchID); + } + + public string Id + { + get { return identifier; } + } + + public override string ToString() + { + return identifier; + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + Asn1RelativeOid that = asn1Object as Asn1RelativeOid; + return null != that + && this.identifier == that.identifier; + } + + protected override int Asn1GetHashCode() + { + return identifier.GetHashCode(); + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.RelativeOid, GetContents()); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, GetContents()); + } + + private void DoOutput(MemoryStream bOut) + { + OidTokenizer tok = new OidTokenizer(identifier); + while (tok.HasMoreTokens) + { + string token = tok.NextToken(); + if (token.Length <= 18) + { + WriteField(bOut, long.Parse(token)); + } + else + { + WriteField(bOut, new BigInteger(token)); + } + } + } + + private byte[] GetContents() + { + lock (this) + { + if (contents == null) + { + MemoryStream bOut = new MemoryStream(); + DoOutput(bOut); + contents = bOut.ToArray(); + } + + return contents; + } + } + + internal static Asn1RelativeOid CreatePrimitive(byte[] contents, bool clone) + { + return new Asn1RelativeOid(contents, clone); + } + + internal static bool IsValidIdentifier(string identifier, int from) + { + int digitCount = 0; + + int pos = identifier.Length; + while (--pos >= from) + { + char ch = identifier[pos]; + + if (ch == '.') + { + if (0 == digitCount || (digitCount > 1 && identifier[pos + 1] == '0')) + return false; + + digitCount = 0; + } + else if ('0' <= ch && ch <= '9') + { + ++digitCount; + } + else + { + return false; + } + } + + if (0 == digitCount || (digitCount > 1 && identifier[pos + 1] == '0')) + return false; + + return true; + } + + internal static void WriteField(Stream outputStream, long fieldValue) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span result = stackalloc byte[9]; +#else + byte[] result = new byte[9]; +#endif + int pos = 8; + result[pos] = (byte)((int)fieldValue & 0x7F); + while (fieldValue >= (1L << 7)) + { + fieldValue >>= 7; + result[--pos] = (byte)((int)fieldValue | 0x80); + } +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + outputStream.Write(result[pos..]); +#else + outputStream.Write(result, pos, 9 - pos); +#endif + } + + internal static void WriteField(Stream outputStream, BigInteger fieldValue) + { + int byteCount = (fieldValue.BitLength + 6) / 7; + if (byteCount == 0) + { + outputStream.WriteByte(0); + } + else + { + BigInteger tmpValue = fieldValue; +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span tmp = byteCount <= 16 + ? stackalloc byte[byteCount] + : new byte[byteCount]; +#else + byte[] tmp = new byte[byteCount]; +#endif + for (int i = byteCount - 1; i >= 0; i--) + { + tmp[i] = (byte)(tmpValue.IntValue | 0x80); + tmpValue = tmpValue.ShiftRight(7); + } + tmp[byteCount - 1] &= 0x7F; +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + outputStream.Write(tmp); +#else + outputStream.Write(tmp, 0, tmp.Length); +#endif + } + } + + private static string ParseContents(byte[] contents) + { + StringBuilder objId = new StringBuilder(); + long value = 0; + BigInteger bigValue = null; + bool first = true; + + for (int i = 0; i != contents.Length; i++) + { + int b = contents[i]; + + if (value <= LongLimit) + { + value += b & 0x7F; + if ((b & 0x80) == 0) + { + if (first) + { + first = false; + } + else + { + objId.Append('.'); + } + + objId.Append(value); + value = 0; + } + else + { + value <<= 7; + } + } + else + { + if (bigValue == null) + { + bigValue = BigInteger.ValueOf(value); + } + bigValue = bigValue.Or(BigInteger.ValueOf(b & 0x7F)); + if ((b & 0x80) == 0) + { + if (first) + { + first = false; + } + else + { + objId.Append('.'); + } + + objId.Append(bigValue); + bigValue = null; + value = 0; + } + else + { + bigValue = bigValue.ShiftLeft(7); + } + } + } + + return objId.ToString(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1RelativeOid.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1RelativeOid.cs.meta new file mode 100644 index 000000000..90e06b31f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1RelativeOid.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ae6c5229271568c4f968518558270b85 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Sequence.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Sequence.cs new file mode 100644 index 000000000..2e5e0e4b5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Sequence.cs @@ -0,0 +1,284 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public abstract class Asn1Sequence + : Asn1Object, IEnumerable + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(Asn1Sequence), Asn1Tags.Sequence) {} + + internal override Asn1Object FromImplicitConstructed(Asn1Sequence sequence) + { + return sequence; + } + } + + /** + * return an Asn1Sequence from the given object. + * + * @param obj the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static Asn1Sequence GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is Asn1Sequence asn1Sequence) + return asn1Sequence; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is Asn1Sequence converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (Asn1Sequence)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct sequence from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * Return an ASN1 sequence from a tagged object. There is a special + * case here, if an object appears to have been explicitly tagged on + * reading but we were expecting it to be implicitly tagged in the + * normal course of events it indicates that we lost the surrounding + * sequence - so we need to add it back (this will happen if the tagged + * object is a sequence that contains other sequences). If you are + * dealing with implicitly tagged sequences you really should + * be using this method. + * + * @param taggedObject the tagged object. + * @param declaredExplicit true if the object is meant to be explicitly tagged, false otherwise. + * @exception ArgumentException if the tagged object cannot be converted. + */ + public static Asn1Sequence GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (Asn1Sequence)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + // NOTE: Only non-readonly to support LazyDLSequence + internal Asn1Encodable[] elements; + + protected internal Asn1Sequence() + { + this.elements = Asn1EncodableVector.EmptyElements; + } + + protected internal Asn1Sequence(Asn1Encodable element) + { + if (null == element) + throw new ArgumentNullException(nameof(element)); + + this.elements = new Asn1Encodable[]{ element }; + } + + protected internal Asn1Sequence(Asn1Encodable element1, Asn1Encodable element2) + { + if (null == element1) + throw new ArgumentNullException(nameof(element1)); + if (null == element2) + throw new ArgumentNullException(nameof(element2)); + + this.elements = new Asn1Encodable[]{ element1, element2 }; + } + + protected internal Asn1Sequence(params Asn1Encodable[] elements) + { + if (Arrays.IsNullOrContainsNull(elements)) + throw new NullReferenceException("'elements' cannot be null, or contain null"); + + this.elements = Asn1EncodableVector.CloneElements(elements); + } + + internal Asn1Sequence(Asn1Encodable[] elements, bool clone) + { + this.elements = clone ? Asn1EncodableVector.CloneElements(elements) : elements; + } + + protected internal Asn1Sequence(Asn1EncodableVector elementVector) + { + if (null == elementVector) + throw new ArgumentNullException("elementVector"); + + this.elements = elementVector.TakeElements(); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public virtual IEnumerator GetEnumerator() + { + IEnumerable e = elements; + return e.GetEnumerator(); + } + + private class Asn1SequenceParserImpl + : Asn1SequenceParser + { + private readonly Asn1Sequence outer; + private readonly int max; + private int index; + + public Asn1SequenceParserImpl( + Asn1Sequence outer) + { + this.outer = outer; + // NOTE: Call Count here to 'force' a LazyDerSequence + this.max = outer.Count; + } + + public IAsn1Convertible ReadObject() + { + if (index == max) + return null; + + Asn1Encodable obj = outer[index++]; + + if (obj is Asn1Sequence) + return ((Asn1Sequence)obj).Parser; + + if (obj is Asn1Set) + return ((Asn1Set)obj).Parser; + + // NB: Asn1OctetString implements Asn1OctetStringParser directly +// if (obj is Asn1OctetString) +// return ((Asn1OctetString)obj).Parser; + + return obj; + } + + public Asn1Object ToAsn1Object() + { + return outer; + } + } + + public virtual Asn1SequenceParser Parser + { + get { return new Asn1SequenceParserImpl(this); } + } + + /** + * return the object at the sequence position indicated by index. + * + * @param index the sequence number (starting at zero) of the object + * @return the object at the sequence position indicated by index. + */ + public virtual Asn1Encodable this[int index] + { + get { return elements[index]; } + } + + public virtual int Count + { + get { return elements.Length; } + } + + public virtual T[] MapElements(Func func) + { + // NOTE: Call Count here to 'force' a LazyDerSequence + int count = Count; + T[] result = new T[count]; + for (int i = 0; i < count; ++i) + { + result[i] = func(elements[i]); + } + return result; + } + + public virtual Asn1Encodable[] ToArray() + { + return Asn1EncodableVector.CloneElements(elements); + } + + protected override int Asn1GetHashCode() + { + // NOTE: Call Count here to 'force' a LazyDerSequence + int i = Count; + int hc = i + 1; + + while (--i >= 0) + { + hc *= 257; + hc ^= elements[i].ToAsn1Object().CallAsn1GetHashCode(); + } + + return hc; + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + Asn1Sequence that = asn1Object as Asn1Sequence; + if (null == that) + return false; + + // NOTE: Call Count here (on both) to 'force' a LazyDerSequence + int count = this.Count; + if (that.Count != count) + return false; + + for (int i = 0; i < count; ++i) + { + Asn1Object o1 = this.elements[i].ToAsn1Object(); + Asn1Object o2 = that.elements[i].ToAsn1Object(); + + if (!o1.Equals(o2)) + return false; + } + + return true; + } + + public override string ToString() + { + return CollectionUtilities.ToString(elements); + } + + // TODO[asn1] Preferably return an Asn1BitString[] (doesn't exist yet) + internal DerBitString[] GetConstructedBitStrings() + { + return MapElements(DerBitString.GetInstance); + } + + internal Asn1OctetString[] GetConstructedOctetStrings() + { + return MapElements(Asn1OctetString.GetInstance); + } + + // TODO[asn1] Preferably return an Asn1BitString (doesn't exist yet) + internal abstract DerBitString ToAsn1BitString(); + + // TODO[asn1] Preferably return an Asn1External (doesn't exist yet) + internal abstract DerExternal ToAsn1External(); + + internal abstract Asn1OctetString ToAsn1OctetString(); + + internal abstract Asn1Set ToAsn1Set(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Sequence.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Sequence.cs.meta new file mode 100644 index 000000000..a7ac3670a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Sequence.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 251efabb5e3250d49ad3fb7b45d68d01 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Set.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Set.cs new file mode 100644 index 000000000..d1245ab98 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Set.cs @@ -0,0 +1,331 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public abstract class Asn1Set + : Asn1Object, IEnumerable + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(Asn1Set), Asn1Tags.Set) {} + + internal override Asn1Object FromImplicitConstructed(Asn1Sequence sequence) + { + return sequence.ToAsn1Set(); + } + } + + /** + * return an ASN1Set from the given object. + * + * @param obj the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static Asn1Set GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is Asn1Set asn1Set) + return asn1Set; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is Asn1Set converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (Asn1Set)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct set from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * Return an ASN1 set from a tagged object. There is a special + * case here, if an object appears to have been explicitly tagged on + * reading but we were expecting it to be implicitly tagged in the + * normal course of events it indicates that we lost the surrounding + * set - so we need to add it back (this will happen if the tagged + * object is a sequence that contains other sequences). If you are + * dealing with implicitly tagged sets you really should + * be using this method. + * + * @param taggedObject the tagged object. + * @param declaredExplicit true if the object is meant to be explicitly tagged false otherwise. + * @exception ArgumentException if the tagged object cannot be converted. + */ + public static Asn1Set GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (Asn1Set)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + // NOTE: Only non-readonly to support LazyDLSet + internal Asn1Encodable[] elements; + internal bool isSorted; + + protected internal Asn1Set() + { + this.elements = Asn1EncodableVector.EmptyElements; + this.isSorted = true; + } + + protected internal Asn1Set(Asn1Encodable element) + { + if (null == element) + throw new ArgumentNullException("element"); + + this.elements = new Asn1Encodable[]{ element }; + this.isSorted = true; + } + + protected internal Asn1Set(Asn1Encodable[] elements, bool doSort) + { + if (Arrays.IsNullOrContainsNull(elements)) + throw new NullReferenceException("'elements' cannot be null, or contain null"); + + Asn1Encodable[] tmp = Asn1EncodableVector.CloneElements(elements); + if (doSort && tmp.Length >= 2) + { + tmp = Sort(tmp); + } + + this.elements = tmp; + this.isSorted = doSort || tmp.Length < 2; + } + + protected internal Asn1Set(Asn1EncodableVector elementVector, bool doSort) + { + if (null == elementVector) + throw new ArgumentNullException("elementVector"); + + Asn1Encodable[] tmp; + if (doSort && elementVector.Count >= 2) + { + tmp = Sort(elementVector.CopyElements()); + } + else + { + tmp = elementVector.TakeElements(); + } + + this.elements = tmp; + this.isSorted = doSort || tmp.Length < 2; + } + + protected internal Asn1Set(bool isSorted, Asn1Encodable[] elements) + { + this.elements = elements; + this.isSorted = isSorted || elements.Length < 2; + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public virtual IEnumerator GetEnumerator() + { + IEnumerable e = elements; + return e.GetEnumerator(); + } + + /** + * return the object at the set position indicated by index. + * + * @param index the set number (starting at zero) of the object + * @return the object at the set position indicated by index. + */ + public virtual Asn1Encodable this[int index] + { + get { return elements[index]; } + } + + public virtual int Count + { + get { return elements.Length; } + } + + public virtual T[] MapElements(Func func) + { + // NOTE: Call Count here to 'force' a LazyDerSet + int count = Count; + T[] result = new T[count]; + for (int i = 0; i < count; ++i) + { + result[i] = func(elements[i]); + } + return result; + } + + public virtual Asn1Encodable[] ToArray() + { + return Asn1EncodableVector.CloneElements(elements); + } + + private class Asn1SetParserImpl + : Asn1SetParser + { + private readonly Asn1Set outer; + private readonly int max; + private int index; + + public Asn1SetParserImpl( + Asn1Set outer) + { + this.outer = outer; + // NOTE: Call Count here to 'force' a LazyDerSet + this.max = outer.Count; + } + + public IAsn1Convertible ReadObject() + { + if (index == max) + return null; + + Asn1Encodable obj = outer[index++]; + if (obj is Asn1Sequence) + return ((Asn1Sequence)obj).Parser; + + if (obj is Asn1Set) + return ((Asn1Set)obj).Parser; + + // NB: Asn1OctetString implements Asn1OctetStringParser directly +// if (obj is Asn1OctetString) +// return ((Asn1OctetString)obj).Parser; + + return obj; + } + + public virtual Asn1Object ToAsn1Object() + { + return outer; + } + } + + public Asn1SetParser Parser + { + get { return new Asn1SetParserImpl(this); } + } + + protected override int Asn1GetHashCode() + { + // NOTE: Call Count here to 'force' a LazyDerSet + int i = Count; + int hc = i + 1; + + while (--i >= 0) + { + hc *= 257; + hc ^= elements[i].ToAsn1Object().CallAsn1GetHashCode(); + } + + return hc; + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + Asn1Set that = asn1Object as Asn1Set; + if (null == that) + return false; + + // NOTE: Call Count here (on both) to 'force' a LazyDerSet + int count = this.Count; + if (that.Count != count) + return false; + + for (int i = 0; i < count; ++i) + { + Asn1Object o1 = this.elements[i].ToAsn1Object(); + Asn1Object o2 = that.elements[i].ToAsn1Object(); + + if (!o1.Equals(o2)) + return false; + } + + return true; + } + + public override string ToString() + { + return CollectionUtilities.ToString(elements); + } + + internal static Asn1Encodable[] Sort(Asn1Encodable[] elements) + { + int count = elements.Length; + if (count < 2) + return elements; + + byte[][] keys = new byte[count][]; + for (int i = 0; i < count; ++i) + { + keys[i] = elements[i].GetEncoded(Der); + } + Array.Sort(keys, elements, new DerComparer()); + return elements; + } + + private class DerComparer + : IComparer + { + public int Compare(byte[] a, byte[] b) + { + Debug.Assert(a.Length >= 2 && b.Length >= 2); + + /* + * NOTE: Set elements in DER encodings are ordered first according to their tags (class and + * number); the CONSTRUCTED bit is not part of the tag. + * + * For SET-OF, this is unimportant. All elements have the same tag and DER requires them to + * either all be in constructed form or all in primitive form, according to that tag. The + * elements are effectively ordered according to their content octets. + * + * For SET, the elements will have distinct tags, and each will be in constructed or + * primitive form accordingly. Failing to ignore the CONSTRUCTED bit could therefore lead to + * ordering inversions. + */ + int a0 = a[0] & ~Asn1Tags.Constructed; + int b0 = b[0] & ~Asn1Tags.Constructed; + if (a0 != b0) + return a0 < b0 ? -1 : 1; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int compareLength = System.Math.Min(a.Length, b.Length) - 1; + return a.AsSpan(1, compareLength).SequenceCompareTo(b.AsSpan(1, compareLength)); +#else + int len = System.Math.Min(a.Length, b.Length); + for (int i = 1; i < len; ++i) + { + byte ai = a[i], bi = b[i]; + if (ai != bi) + return ai < bi ? -1 : 1; + } + Debug.Assert(a.Length == b.Length); + return 0; +#endif + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Set.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Set.cs.meta new file mode 100644 index 000000000..ea0fc21bf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Set.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: db687a85bbc7c7240b1b2f57359d0c46 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Tag.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Tag.cs new file mode 100644 index 000000000..f491772d9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Tag.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal sealed class Asn1Tag + { + internal static Asn1Tag Create(int tagClass, int tagNo) + { + return new Asn1Tag(tagClass, tagNo); + } + + private readonly int m_tagClass; + private readonly int m_tagNo; + + private Asn1Tag(int tagClass, int tagNo) + { + m_tagClass = tagClass; + m_tagNo = tagNo; + } + + internal int TagClass + { + get { return m_tagClass; } + } + + internal int TagNo + { + get { return m_tagNo; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Tag.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Tag.cs.meta new file mode 100644 index 000000000..5df92a5f6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Tag.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 86fc5dd31416c1b4797892dbb3a76111 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1TaggedObject.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1TaggedObject.cs new file mode 100644 index 000000000..06faecd25 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1TaggedObject.cs @@ -0,0 +1,409 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * ASN.1 TaggedObject - in ASN.1 notation this is any object preceded by + * a [n] where n is some number - these are assumed to follow the construction + * rules (as with sequences). + */ + public abstract class Asn1TaggedObject + : Asn1Object, Asn1TaggedObjectParser + { + private const int DeclaredExplicit = 1; + private const int DeclaredImplicit = 2; + // TODO It will probably be better to track parsing constructed vs primitive instead + private const int ParsedExplicit = 3; + private const int ParsedImplicit = 4; + + public static Asn1TaggedObject GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is Asn1TaggedObject asn1TaggedObject) + return asn1TaggedObject; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is Asn1TaggedObject converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return CheckedCast(FromByteArray(bytes)); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct tagged object from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public static Asn1TaggedObject GetInstance(object obj, int tagClass) + { + if (obj == null) + throw new ArgumentNullException(nameof(obj)); + + Asn1TaggedObject taggedObject = GetInstance(obj); + if (tagClass != taggedObject.TagClass) + throw new ArgumentException("unexpected tag in GetInstance: " + Asn1Utilities.GetTagText(taggedObject)); + + return taggedObject; + } + + public static Asn1TaggedObject GetInstance(object obj, int tagClass, int tagNo) + { + if (obj == null) + throw new ArgumentNullException(nameof(obj)); + + Asn1TaggedObject taggedObject = GetInstance(obj); + if (!taggedObject.HasTag(tagClass, tagNo)) + throw new ArgumentException("unexpected tag in GetInstance: " + Asn1Utilities.GetTagText(taggedObject)); + + return taggedObject; + } + + public static Asn1TaggedObject GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + if (Asn1Tags.ContextSpecific != taggedObject.TagClass) + throw new InvalidOperationException("this method only valid for CONTEXT_SPECIFIC tags"); + + if (declaredExplicit) + return taggedObject.GetExplicitBaseTagged(); + + throw new ArgumentException("this method not valid for implicitly tagged tagged objects"); + } + + internal readonly int explicitness; + internal readonly int tagClass; + internal readonly int tagNo; + internal readonly Asn1Encodable obj; + + /** + * @param explicitly true if the object is explicitly tagged. + * @param tagNo the tag number for this object. + * @param obj the tagged object. + */ + protected Asn1TaggedObject(bool isExplicit, int tagNo, Asn1Encodable obj) + : this(isExplicit, Asn1Tags.ContextSpecific, tagNo, obj) + { + } + + protected Asn1TaggedObject(bool isExplicit, int tagClass, int tagNo, Asn1Encodable obj) + : this(isExplicit ? DeclaredExplicit : DeclaredImplicit, tagClass, tagNo, obj) + { + } + + internal Asn1TaggedObject(int explicitness, int tagClass, int tagNo, Asn1Encodable obj) + { + if (null == obj) + throw new ArgumentNullException("obj"); + if (Asn1Tags.Universal == tagClass || (tagClass & Asn1Tags.Private) != tagClass) + throw new ArgumentException("invalid tag class: " + tagClass, "tagClass"); + + this.explicitness = (obj is IAsn1Choice) ? DeclaredExplicit : explicitness; + this.tagClass = tagClass; + this.tagNo = tagNo; + this.obj = obj; + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + Asn1TaggedObject that = asn1Object as Asn1TaggedObject; + if (null == that || this.tagNo != that.tagNo || this.tagClass != that.tagClass) + return false; + + if (this.explicitness != that.explicitness) + { + /* + * TODO This seems incorrect for some cases of implicit tags e.g. if one is a + * declared-implicit SET and the other a parsed object. + */ + if (this.IsExplicit() != that.IsExplicit()) + return false; + } + + Asn1Object p1 = this.obj.ToAsn1Object(); + Asn1Object p2 = that.obj.ToAsn1Object(); + + if (p1 == p2) + return true; + + if (!this.IsExplicit()) + { + try + { + byte[] d1 = this.GetEncoded(); + byte[] d2 = that.GetEncoded(); + + return Arrays.AreEqual(d1, d2); + } + catch (IOException) + { + return false; + } + } + + return p1.CallAsn1Equals(p2); + } + + protected override int Asn1GetHashCode() + { + return (tagClass * 7919) ^ tagNo ^ (IsExplicit() ? 0x0F : 0xF0) ^ obj.ToAsn1Object().CallAsn1GetHashCode(); + } + + public int TagClass + { + get { return tagClass; } + } + + public int TagNo + { + get { return tagNo; } + } + + public bool HasContextTag(int tagNo) + { + return this.tagClass == Asn1Tags.ContextSpecific && this.tagNo == tagNo; + } + + public bool HasTag(int tagClass, int tagNo) + { + return this.tagClass == tagClass && this.tagNo == tagNo; + } + + /** + * return whether or not the object may be explicitly tagged. + *

+ * Note: if the object has been read from an input stream, the only + * time you can be sure if isExplicit is returning the true state of + * affairs is if it returns false. An implicitly tagged object may appear + * to be explicitly tagged, so you need to understand the context under + * which the reading was done as well, see GetObject below.

+ */ + public bool IsExplicit() + { + // TODO New methods like 'IsKnownExplicit' etc. to distinguish uncertain cases? + switch (explicitness) + { + case DeclaredExplicit: + case ParsedExplicit: + return true; + default: + return false; + } + } + + internal bool IsParsed() + { + switch (explicitness) + { + case ParsedExplicit: + case ParsedImplicit: + return true; + default: + return false; + } + } + + /** + * return whatever was following the tag. + *

+ * Note: tagged objects are generally context dependent if you're + * trying to extract a tagged object you should be going via the + * appropriate GetInstance method.

+ */ + public Asn1Object GetObject() + { + if (Asn1Tags.ContextSpecific != TagClass) + throw new InvalidOperationException("this method only valid for CONTEXT_SPECIFIC tags"); + + return obj.ToAsn1Object(); + } + + /** + * Needed for open types, until we have better type-guided parsing support. Use sparingly for other + * purposes, and prefer {@link #getExplicitBaseTagged()}, {@link #getImplicitBaseTagged(int, int)} or + * {@link #getBaseUniversal(boolean, int)} where possible. Before using, check for matching tag + * {@link #getTagClass() class} and {@link #getTagNo() number}. + */ + public Asn1Encodable GetBaseObject() + { + return obj; + } + + /** + * Needed for open types, until we have better type-guided parsing support. Use + * sparingly for other purposes, and prefer {@link #getExplicitBaseTagged()} or + * {@link #getBaseUniversal(boolean, int)} where possible. Before using, check + * for matching tag {@link #getTagClass() class} and {@link #getTagNo() number}. + */ + public Asn1Encodable GetExplicitBaseObject() + { + if (!IsExplicit()) + throw new InvalidOperationException("object implicit - explicit expected."); + + return obj; + } + + public Asn1TaggedObject GetExplicitBaseTagged() + { + if (!IsExplicit()) + throw new InvalidOperationException("object implicit - explicit expected."); + + return CheckedCast(obj.ToAsn1Object()); + } + + public Asn1TaggedObject GetImplicitBaseTagged(int baseTagClass, int baseTagNo) + { + if (Asn1Tags.Universal == baseTagClass || (baseTagClass & Asn1Tags.Private) != baseTagClass) + throw new ArgumentException("invalid base tag class: " + baseTagClass, "baseTagClass"); + + switch (explicitness) + { + case DeclaredExplicit: + throw new InvalidOperationException("object explicit - implicit expected."); + + case DeclaredImplicit: + { + Asn1TaggedObject declared = CheckedCast(obj.ToAsn1Object()); + return Asn1Utilities.CheckTag(declared, baseTagClass, baseTagNo); + } + + // Parsed; return a virtual tag (i.e. that couldn't have been present in the encoding) + default: + return ReplaceTag(baseTagClass, baseTagNo); + } + } + + public Asn1Object GetBaseUniversal(bool declaredExplicit, int tagNo) + { + Asn1UniversalType universalType = Asn1UniversalTypes.Get(tagNo); + if (null == universalType) + throw new ArgumentException("unsupported UNIVERSAL tag number: " + tagNo, "tagNo"); + + return GetBaseUniversal(declaredExplicit, universalType); + } + + internal Asn1Object GetBaseUniversal(bool declaredExplicit, Asn1UniversalType universalType) + { + if (declaredExplicit) + { + if (!IsExplicit()) + throw new InvalidOperationException("object explicit - implicit expected."); + + return universalType.CheckedCast(obj.ToAsn1Object()); + } + + if (DeclaredExplicit == explicitness) + throw new InvalidOperationException("object explicit - implicit expected."); + + Asn1Object baseObject = obj.ToAsn1Object(); + switch (explicitness) + { + case ParsedExplicit: + return universalType.FromImplicitConstructed(RebuildConstructed(baseObject)); + case ParsedImplicit: + { + if (baseObject is Asn1Sequence asn1Sequence) + return universalType.FromImplicitConstructed(asn1Sequence); + + return universalType.FromImplicitPrimitive((DerOctetString)baseObject); + } + default: + return universalType.CheckedCast(baseObject); + } + } + + public IAsn1Convertible ParseBaseUniversal(bool declaredExplicit, int baseTagNo) + { + Asn1Object asn1Object = GetBaseUniversal(declaredExplicit, baseTagNo); + + switch (baseTagNo) + { + case Asn1Tags.BitString: + return ((DerBitString)asn1Object).Parser; + case Asn1Tags.OctetString: + return ((Asn1OctetString)asn1Object).Parser; + case Asn1Tags.Sequence: + return ((Asn1Sequence)asn1Object).Parser; + case Asn1Tags.Set: + return ((Asn1Set)asn1Object).Parser; + } + + return asn1Object; + } + + public IAsn1Convertible ParseExplicitBaseObject() + { + return GetExplicitBaseObject(); + } + + public Asn1TaggedObjectParser ParseExplicitBaseTagged() + { + return GetExplicitBaseTagged(); + } + + public Asn1TaggedObjectParser ParseImplicitBaseTagged(int baseTagClass, int baseTagNo) + { + return GetImplicitBaseTagged(baseTagClass, baseTagNo); + } + + public override string ToString() + { + return Asn1Utilities.GetTagText(tagClass, tagNo) + obj; + } + + internal abstract string Asn1Encoding { get; } + + internal abstract Asn1Sequence RebuildConstructed(Asn1Object asn1Object); + + internal abstract Asn1TaggedObject ReplaceTag(int tagClass, int tagNo); + + internal static Asn1Object CreateConstructedDL(int tagClass, int tagNo, Asn1EncodableVector contentsElements) + { + bool maybeExplicit = (contentsElements.Count == 1); + + return maybeExplicit + ? new DLTaggedObject(ParsedExplicit, tagClass, tagNo, contentsElements[0]) + : new DLTaggedObject(ParsedImplicit, tagClass, tagNo, DLSequence.FromVector(contentsElements)); + } + + internal static Asn1Object CreateConstructedIL(int tagClass, int tagNo, Asn1EncodableVector contentsElements) + { + bool maybeExplicit = (contentsElements.Count == 1); + + return maybeExplicit + ? new BerTaggedObject(ParsedExplicit, tagClass, tagNo, contentsElements[0]) + : new BerTaggedObject(ParsedImplicit, tagClass, tagNo, BerSequence.FromVector(contentsElements)); + } + + internal static Asn1Object CreatePrimitive(int tagClass, int tagNo, byte[] contentsOctets) + { + // Note: !CONSTRUCTED => IMPLICIT + return new DLTaggedObject(ParsedImplicit, tagClass, tagNo, new DerOctetString(contentsOctets)); + } + + private static Asn1TaggedObject CheckedCast(Asn1Object asn1Object) + { + Asn1TaggedObject taggedObject = asn1Object as Asn1TaggedObject; + if (null != taggedObject) + return taggedObject; + + throw new InvalidOperationException("unexpected object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(asn1Object)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1TaggedObject.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1TaggedObject.cs.meta new file mode 100644 index 000000000..b1939c6b0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1TaggedObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8dc761d7a5e48814998a495824555f3a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Tags.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Tags.cs new file mode 100644 index 000000000..94c956847 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Tags.cs @@ -0,0 +1,53 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class Asn1Tags + { + public const int Boolean = 0x01; + public const int Integer = 0x02; + public const int BitString = 0x03; + public const int OctetString = 0x04; + public const int Null = 0x05; + public const int ObjectIdentifier = 0x06; + public const int ObjectDescriptor = 0x07; + public const int External = 0x08; + public const int Real = 0x09; + public const int Enumerated = 0x0a; + public const int EmbeddedPdv = 0x0b; + public const int Utf8String = 0x0c; + public const int RelativeOid = 0x0d; + // NOTE: 14-15 are reserved. + public const int Sequence = 0x10; + public const int SequenceOf = 0x10; // for completeness + public const int Set = 0x11; + public const int SetOf = 0x11; // for completeness + + public const int NumericString = 0x12; + public const int PrintableString = 0x13; + public const int T61String = 0x14; + public const int VideotexString = 0x15; + public const int IA5String = 0x16; + public const int UtcTime = 0x17; + public const int GeneralizedTime = 0x18; + public const int GraphicString = 0x19; + public const int VisibleString = 0x1a; + public const int GeneralString = 0x1b; + public const int UniversalString = 0x1c; + public const int UnrestrictedString = 0x1d; + public const int BmpString = 0x1e; + + public const int Constructed = 0x20; + + public const int Universal = 0x00; + public const int Application = 0x40; + public const int ContextSpecific = 0x80; + public const int Private = 0xC0; + + public const int Flags = 0xE0; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Tags.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Tags.cs.meta new file mode 100644 index 000000000..d12170b9a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Tags.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1d609f8d10b0a5c469fd85eb4b389e30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Type.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Type.cs new file mode 100644 index 000000000..900044f76 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Type.cs @@ -0,0 +1,33 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal abstract class Asn1Type + { + internal readonly Type m_platformType; + + internal Asn1Type(Type platformType) + { + m_platformType = platformType; + } + + internal Type PlatformType + { + get { return m_platformType; } + } + + public sealed override bool Equals(object that) + { + return this == that; + } + + public sealed override int GetHashCode() + { + return base.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Type.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Type.cs.meta new file mode 100644 index 000000000..ac1b51b9a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Type.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ffac7d6916dbabc449fd3c8f9f3b51c5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1UniversalType.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1UniversalType.cs new file mode 100644 index 000000000..db051b8fe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1UniversalType.cs @@ -0,0 +1,63 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +#if UNITY_WSA && !UNITY_EDITOR && !ENABLE_IL2CPP +using System.TypeFix; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal abstract class Asn1UniversalType + : Asn1Type + { + internal readonly Asn1Tag m_tag; + + internal Asn1UniversalType(Type platformType, int tagNo) + : base(platformType) + { + m_tag = Asn1Tag.Create(Asn1Tags.Universal, tagNo); + } + + internal Asn1Object CheckedCast(Asn1Object asn1Object) + { + if (PlatformType.IsInstanceOfType(asn1Object)) + return asn1Object; + + throw new InvalidOperationException("unexpected object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(asn1Object)); + } + + internal virtual Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + throw new InvalidOperationException("unexpected implicit primitive encoding"); + } + + internal virtual Asn1Object FromImplicitConstructed(Asn1Sequence sequence) + { + throw new InvalidOperationException("unexpected implicit constructed encoding"); + } + + /// + internal Asn1Object FromByteArray(byte[] bytes) + { + return CheckedCast(Asn1Object.FromByteArray(bytes)); + } + + internal Asn1Object GetContextInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + if (Asn1Tags.ContextSpecific != taggedObject.TagClass) + throw new InvalidOperationException("this method only valid for CONTEXT_SPECIFIC tags"); + + return CheckedCast(taggedObject.GetBaseUniversal(declaredExplicit, this)); + } + + internal Asn1Tag Tag + { + get { return m_tag; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1UniversalType.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1UniversalType.cs.meta new file mode 100644 index 000000000..40e9a053f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1UniversalType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1449dc3fb760c69478b79ac2d2d26975 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1UniversalTypes.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1UniversalTypes.cs new file mode 100644 index 000000000..67d964988 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1UniversalTypes.cs @@ -0,0 +1,78 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal sealed class Asn1UniversalTypes + { + private Asn1UniversalTypes() + { + } + + internal static Asn1UniversalType Get(int tagNo) + { + switch (tagNo) + { + case Asn1Tags.Boolean: + return DerBoolean.Meta.Instance; + case Asn1Tags.Integer: + return DerInteger.Meta.Instance; + case Asn1Tags.BitString: + return DerBitString.Meta.Instance; + case Asn1Tags.OctetString: + return Asn1OctetString.Meta.Instance; + case Asn1Tags.Null: + return Asn1Null.Meta.Instance; + case Asn1Tags.ObjectIdentifier: + return DerObjectIdentifier.Meta.Instance; + case Asn1Tags.ObjectDescriptor: // [UNIVERSAL 7] IMPLICIT GraphicString + return Asn1ObjectDescriptor.Meta.Instance; + case Asn1Tags.External: + return DerExternal.Meta.Instance; + case Asn1Tags.Enumerated: + return DerEnumerated.Meta.Instance; + case Asn1Tags.Utf8String: // [UNIVERSAL 12] IMPLICIT OCTET STRING (encode as if) + return DerUtf8String.Meta.Instance; + case Asn1Tags.RelativeOid: + return Asn1RelativeOid.Meta.Instance; + case Asn1Tags.Sequence: + return Asn1Sequence.Meta.Instance; + case Asn1Tags.Set: + return Asn1Set.Meta.Instance; + case Asn1Tags.NumericString: // [UNIVERSAL 18] IMPLICIT OCTET STRING (encode as if) + return DerNumericString.Meta.Instance; + case Asn1Tags.PrintableString: // [UNIVERSAL 19] IMPLICIT OCTET STRING (encode as if) + return DerPrintableString.Meta.Instance; + case Asn1Tags.T61String: // [UNIVERSAL 20] IMPLICIT OCTET STRING (encode as if) + return DerT61String.Meta.Instance; + case Asn1Tags.VideotexString: // [UNIVERSAL 21] IMPLICIT OCTET STRING (encode as if) + return DerVideotexString.Meta.Instance; + case Asn1Tags.IA5String: // [UNIVERSAL 22] IMPLICIT OCTET STRING (encode as if) + return DerIA5String.Meta.Instance; + case Asn1Tags.UtcTime: // [UNIVERSAL 23] IMPLICIT VisibleString (restricted values) + return Asn1UtcTime.Meta.Instance; + case Asn1Tags.GeneralizedTime: // [UNIVERSAL 24] IMPLICIT VisibleString (restricted values) + return Asn1GeneralizedTime.Meta.Instance; + case Asn1Tags.GraphicString: // [UNIVERSAL 25] IMPLICIT OCTET STRING (encode as if) + return DerGraphicString.Meta.Instance; + case Asn1Tags.VisibleString: // [UNIVERSAL 26] IMPLICIT OCTET STRING (encode as if) + return DerVisibleString.Meta.Instance; + case Asn1Tags.GeneralString: // [UNIVERSAL 27] IMPLICIT OCTET STRING (encode as if) + return DerGeneralString.Meta.Instance; + case Asn1Tags.UniversalString: // [UNIVERSAL 28] IMPLICIT OCTET STRING (encode as if) + return DerUniversalString.Meta.Instance; + case Asn1Tags.BmpString: // [UNIVERSAL 30] IMPLICIT OCTET STRING (encode as if) + return DerBmpString.Meta.Instance; + + case Asn1Tags.Real: + case Asn1Tags.EmbeddedPdv: + case Asn1Tags.UnrestrictedString: + default: + return null; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1UniversalTypes.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1UniversalTypes.cs.meta new file mode 100644 index 000000000..534e2bfb1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1UniversalTypes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 839094e1a57356a4eaefab55a4481ef9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1UtcTime.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1UtcTime.cs new file mode 100644 index 000000000..e24dcd21b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1UtcTime.cs @@ -0,0 +1,257 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Globalization; +using System.IO; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Date; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /// UTCTime ASN.1 type + public class Asn1UtcTime + : Asn1Object + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(Asn1UtcTime), Asn1Tags.UtcTime) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets()); + } + } + + /** + * return a UTC Time from the passed in object. + * + * @exception ArgumentException if the object cannot be converted. + */ + public static Asn1UtcTime GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is Asn1UtcTime asn1UtcTime) + return asn1UtcTime; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is Asn1UtcTime converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (Asn1UtcTime)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct UTC time from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), nameof(obj)); + } + + public static Asn1UtcTime GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (Asn1UtcTime)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + private readonly string m_timeString; + private readonly DateTime m_dateTime; + private readonly bool m_dateTimeLocked; + private readonly int m_twoDigitYearMax; + + public Asn1UtcTime(string timeString) + { + m_timeString = timeString ?? throw new ArgumentNullException(nameof(timeString)); + + try + { + m_dateTime = FromString(timeString, out m_twoDigitYearMax); + m_dateTimeLocked = false; + } + catch (FormatException e) + { + throw new ArgumentException("invalid date string: " + e.Message); + } + } + + + public Asn1UtcTime(DateTime dateTime) + { + dateTime = DateTimeUtilities.WithPrecisionSecond(dateTime.ToUniversalTime()); + + m_dateTime = dateTime; + m_dateTimeLocked = true; + m_timeString = ToStringCanonical(dateTime, out m_twoDigitYearMax); + } + + public Asn1UtcTime(DateTime dateTime, int twoDigitYearMax) + { + dateTime = DateTimeUtilities.WithPrecisionSecond(dateTime.ToUniversalTime()); + + Validate(dateTime, twoDigitYearMax); + + m_dateTime = dateTime; + m_dateTimeLocked = true; + m_timeString = ToStringCanonical(dateTime); + m_twoDigitYearMax = twoDigitYearMax; + } + + internal Asn1UtcTime(byte[] contents) + // NOTE: Non-ASCII characters will produce '?' characters, which will fail DateTime parsing + : this(Encoding.ASCII.GetString(contents)) + { + } + + public string TimeString => m_timeString; + + public DateTime ToDateTime() + { + return m_dateTime; + } + + public DateTime ToDateTime(int twoDigitYearMax) + { + if (InRange(m_dateTime, twoDigitYearMax)) + return m_dateTime; + + if (m_dateTimeLocked) + throw new InvalidOperationException(); + + int twoDigitYear = m_dateTime.Year % 100; + int twoDigitYearCutoff = twoDigitYearMax % 100; + + int diff = twoDigitYear - twoDigitYearCutoff; + int newYear = twoDigitYearMax + diff; + if (diff > 0) + { + newYear -= 100; + } + + return m_dateTime.AddYears(newYear - m_dateTime.Year); + } + + public DateTime ToDateTime(Calendar calendar) + { + return ToDateTime(calendar.TwoDigitYearMax); + } + + /// Return an adjusted date in the range of 1950 - 2049. + + public DateTime ToAdjustedDateTime() + { + return ToDateTime(2049); + } + + public int TwoDigitYearMax => m_twoDigitYearMax; + + internal byte[] GetContents(int encoding) + { + if (encoding == Asn1OutputStream.EncodingDer && m_timeString.Length != 13) + { + string canonical = ToStringCanonical(m_dateTime); + return Encoding.ASCII.GetBytes(canonical); + } + + return Encoding.ASCII.GetBytes(m_timeString); + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.UtcTime, GetContents(encoding)); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, GetContents(encoding)); + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + if (!(asn1Object is Asn1UtcTime that)) + return false; + + // TODO Performance + return Arrays.AreEqual( + this.GetContents(Asn1OutputStream.EncodingDer), + that.GetContents(Asn1OutputStream.EncodingDer)); + } + + protected override int Asn1GetHashCode() + { + // TODO Performance + return Arrays.GetHashCode( + this.GetContents(Asn1OutputStream.EncodingDer)); + } + + public override string ToString() + { + return m_timeString; + } + + internal static Asn1UtcTime CreatePrimitive(byte[] contents) + { + return new Asn1UtcTime(contents); + } + + private static DateTime FromString(string s, out int twoDigitYearMax) + { + var provider = DateTimeFormatInfo.InvariantInfo; + twoDigitYearMax = provider.Calendar.TwoDigitYearMax; + + switch (s.Length) + { + case 11: + return DateTime.ParseExact(s, @"yyMMddHHmm\Z", provider, + DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal); + case 13: + return DateTime.ParseExact(s, @"yyMMddHHmmss\Z", provider, + DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal); + case 15: + return DateTime.ParseExact(s, @"yyMMddHHmmzzz", provider, DateTimeStyles.AdjustToUniversal); + case 17: + return DateTime.ParseExact(s, @"yyMMddHHmmsszzz", provider, DateTimeStyles.AdjustToUniversal); + default: + throw new FormatException(); + } + } + + private static bool InRange(DateTime dateTime, int twoDigitYearMax) + { + return (uint)(twoDigitYearMax - dateTime.Year) < 100; + } + + private static string ToStringCanonical(DateTime dateTime, out int twoDigitYearMax) + { + var provider = DateTimeFormatInfo.InvariantInfo; + twoDigitYearMax = provider.Calendar.TwoDigitYearMax; + + Validate(dateTime, twoDigitYearMax); + + return dateTime.ToString(@"yyMMddHHmmss\Z", provider); + } + + private static string ToStringCanonical(DateTime dateTime) + { + return dateTime.ToString(@"yyMMddHHmmss\Z", DateTimeFormatInfo.InvariantInfo); + } + + private static void Validate(DateTime dateTime, int twoDigitYearMax) + { + if (!InRange(dateTime, twoDigitYearMax)) + throw new ArgumentOutOfRangeException(nameof(dateTime)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1UtcTime.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1UtcTime.cs.meta new file mode 100644 index 000000000..499bdd232 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1UtcTime.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: edf61982cdff33c408181b8d191ae7ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Utilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Utilities.cs new file mode 100644 index 000000000..e76bffbe4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Utilities.cs @@ -0,0 +1,333 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public abstract class Asn1Utilities + { + internal static Asn1TaggedObject CheckTag(Asn1TaggedObject taggedObject, int tagClass, int tagNo) + { + if (!taggedObject.HasTag(tagClass, tagNo)) + { + string expected = GetTagText(tagClass, tagNo); + string found = GetTagText(taggedObject); + throw new InvalidOperationException("Expected " + expected + " tag but found " + found); + } + return taggedObject; + } + + internal static Asn1TaggedObjectParser CheckTag(Asn1TaggedObjectParser taggedObjectParser, int tagClass, + int tagNo) + { + if (!taggedObjectParser.HasTag(tagClass, tagNo)) + { + string expected = GetTagText(tagClass, tagNo); + string found = GetTagText(taggedObjectParser); + throw new InvalidOperationException("Expected " + expected + " tag but found " + found); + } + return taggedObjectParser; + } + + + internal static string GetTagText(Asn1Tag tag) + { + return GetTagText(tag.TagClass, tag.TagNo); + } + + public static string GetTagText(Asn1TaggedObject taggedObject) + { + return GetTagText(taggedObject.TagClass, taggedObject.TagNo); + } + + public static string GetTagText(Asn1TaggedObjectParser taggedObjectParser) + { + return GetTagText(taggedObjectParser.TagClass, taggedObjectParser.TagNo); + } + + public static string GetTagText(int tagClass, int tagNo) + { + switch (tagClass) + { + case Asn1Tags.Application: + return "[APPLICATION " + tagNo + "]"; + case Asn1Tags.ContextSpecific: + return "[CONTEXT " + tagNo + "]"; + case Asn1Tags.Private: + return "[PRIVATE " + tagNo + "]"; + default: + return "[UNIVERSAL " + tagNo + "]"; + } + } + + + /* + * Wrappers for Asn1TaggedObject.GetExplicitBaseObject + */ + + public static Asn1Encodable GetExplicitBaseObject(Asn1TaggedObject taggedObject, int tagClass, int tagNo) + { + return CheckTag(taggedObject, tagClass, tagNo).GetExplicitBaseObject(); + } + + public static Asn1Encodable GetExplicitContextBaseObject(Asn1TaggedObject taggedObject, int tagNo) + { + return GetExplicitBaseObject(taggedObject, Asn1Tags.ContextSpecific, tagNo); + } + + public static Asn1Encodable TryGetExplicitBaseObject(Asn1TaggedObject taggedObject, int tagClass, int tagNo) + { + if (!taggedObject.HasTag(tagClass, tagNo)) + return null; + + return taggedObject.GetExplicitBaseObject(); + } + + public static Asn1Encodable TryGetExplicitContextBaseObject(Asn1TaggedObject taggedObject, int tagNo) + { + return TryGetExplicitBaseObject(taggedObject, Asn1Tags.ContextSpecific, tagNo); + } + + + /* + * Wrappers for Asn1TaggedObject.GetExplicitBaseTagged + */ + + public static Asn1TaggedObject GetExplicitBaseTagged(Asn1TaggedObject taggedObject, int tagClass, int tagNo) + { + return CheckTag(taggedObject, tagClass, tagNo).GetExplicitBaseTagged(); + } + + public static Asn1TaggedObject GetExplicitContextBaseTagged(Asn1TaggedObject taggedObject, int tagNo) + { + return GetExplicitBaseTagged(taggedObject, Asn1Tags.ContextSpecific, tagNo); + } + + public static Asn1TaggedObject TryGetExplicitBaseTagged(Asn1TaggedObject taggedObject, int tagClass, int tagNo) + { + if (!taggedObject.HasTag(tagClass, tagNo)) + return null; + + return taggedObject.GetExplicitBaseTagged(); + } + + public static Asn1TaggedObject TryGetExplicitContextBaseTagged(Asn1TaggedObject taggedObject, int tagNo) + { + return TryGetExplicitBaseTagged(taggedObject, Asn1Tags.ContextSpecific, tagNo); + } + + + /* + * Wrappers for Asn1TaggedObject.GetImplicitBaseTagged + */ + + public static Asn1TaggedObject GetImplicitBaseTagged(Asn1TaggedObject taggedObject, int tagClass, int tagNo, + int baseTagClass, int baseTagNo) + { + return CheckTag(taggedObject, tagClass, tagNo).GetImplicitBaseTagged(baseTagClass, baseTagNo); + } + + public static Asn1TaggedObject GetImplicitContextBaseTagged(Asn1TaggedObject taggedObject, int tagNo, + int baseTagClass, int baseTagNo) + { + return GetImplicitBaseTagged(taggedObject, Asn1Tags.ContextSpecific, tagNo, baseTagClass, baseTagNo); + } + + public static Asn1TaggedObject TryGetImplicitBaseTagged(Asn1TaggedObject taggedObject, int tagClass, int tagNo, + int baseTagClass, int baseTagNo) + { + if (!taggedObject.HasTag(tagClass, tagNo)) + return null; + + return taggedObject.GetImplicitBaseTagged(baseTagClass, baseTagNo); + } + + public static Asn1TaggedObject TryGetImplicitContextBaseTagged(Asn1TaggedObject taggedObject, int tagNo, + int baseTagClass, int baseTagNo) + { + return TryGetImplicitBaseTagged(taggedObject, Asn1Tags.ContextSpecific, tagNo, baseTagClass, baseTagNo); + } + + + /* + * Wrappers for Asn1TaggedObject.GetBaseUniversal + */ + + public static Asn1Object GetBaseUniversal(Asn1TaggedObject taggedObject, int tagClass, int tagNo, + bool declaredExplicit, int baseTagNo) + { + return CheckTag(taggedObject, tagClass, tagNo).GetBaseUniversal(declaredExplicit, baseTagNo); + } + + public static Asn1Object GetContextBaseUniversal(Asn1TaggedObject taggedObject, int tagNo, + bool declaredExplicit, int baseTagNo) + { + return GetBaseUniversal(taggedObject, Asn1Tags.ContextSpecific, tagNo, declaredExplicit, baseTagNo); + } + + public static Asn1Object TryGetBaseUniversal(Asn1TaggedObject taggedObject, int tagClass, int tagNo, + bool declaredExplicit, int baseTagNo) + { + if (!taggedObject.HasTag(tagClass, tagNo)) + return null; + + return taggedObject.GetBaseUniversal(declaredExplicit, baseTagNo); + } + + public static Asn1Object TryGetContextBaseUniversal(Asn1TaggedObject taggedObject, int tagNo, + bool declaredExplicit, int baseTagNo) + { + return TryGetBaseUniversal(taggedObject, Asn1Tags.ContextSpecific, tagNo, declaredExplicit, baseTagNo); + } + + + /* + * Wrappers for Asn1TaggedObjectParser.ParseExplicitBaseTagged + */ + + /// + public static Asn1TaggedObjectParser ParseExplicitBaseTagged(Asn1TaggedObjectParser taggedObjectParser, + int tagClass, int tagNo) + { + return CheckTag(taggedObjectParser, tagClass, tagNo).ParseExplicitBaseTagged(); + } + + /// + public static Asn1TaggedObjectParser ParseExplicitContextBaseTagged(Asn1TaggedObjectParser taggedObjectParser, + int tagNo) + { + return ParseExplicitBaseTagged(taggedObjectParser, Asn1Tags.ContextSpecific, tagNo); + } + + /// + public static Asn1TaggedObjectParser TryParseExplicitBaseTagged(Asn1TaggedObjectParser taggedObjectParser, + int tagClass, int tagNo) + { + if (!taggedObjectParser.HasTag(tagClass, tagNo)) + return null; + + return taggedObjectParser.ParseExplicitBaseTagged(); + } + + /// + public static Asn1TaggedObjectParser TryParseExplicitContextBaseTagged( + Asn1TaggedObjectParser taggedObjectParser, int tagNo) + { + return TryParseExplicitBaseTagged(taggedObjectParser, Asn1Tags.ContextSpecific, tagNo); + } + + + /* + * Wrappers for Asn1TaggedObjectParser.ParseImplicitBaseTagged + */ + + /// + public static Asn1TaggedObjectParser ParseImplicitBaseTagged(Asn1TaggedObjectParser taggedObjectParser, + int tagClass, int tagNo, int baseTagClass, int baseTagNo) + { + return CheckTag(taggedObjectParser, tagClass, tagNo).ParseImplicitBaseTagged(baseTagClass, baseTagNo); + } + + /// + public static Asn1TaggedObjectParser ParseImplicitContextBaseTagged(Asn1TaggedObjectParser taggedObjectParser, + int tagNo, int baseTagClass, int baseTagNo) + { + return ParseImplicitBaseTagged(taggedObjectParser, Asn1Tags.ContextSpecific, tagNo, baseTagClass, + baseTagNo); + } + + /// + public static Asn1TaggedObjectParser TryParseImplicitBaseTagged(Asn1TaggedObjectParser taggedObjectParser, + int tagClass, int tagNo, int baseTagClass, int baseTagNo) + { + if (!taggedObjectParser.HasTag(tagClass, tagNo)) + return null; + + return taggedObjectParser.ParseImplicitBaseTagged(baseTagClass, baseTagNo); + } + + /// + public static Asn1TaggedObjectParser TryParseImplicitContextBaseTagged( + Asn1TaggedObjectParser taggedObjectParser, int tagNo, int baseTagClass, int baseTagNo) + { + return TryParseImplicitBaseTagged(taggedObjectParser, Asn1Tags.ContextSpecific, tagNo, baseTagClass, + baseTagNo); + } + + + /* + * Wrappers for Asn1TaggedObjectParser.ParseBaseUniversal + */ + + /// + public static IAsn1Convertible ParseBaseUniversal(Asn1TaggedObjectParser taggedObjectParser, int tagClass, + int tagNo, bool declaredExplicit, int baseTagNo) + { + return CheckTag(taggedObjectParser, tagClass, tagNo).ParseBaseUniversal(declaredExplicit, baseTagNo); + } + + /// + public static IAsn1Convertible ParseContextBaseUniversal(Asn1TaggedObjectParser taggedObjectParser, int tagNo, + bool declaredExplicit, int baseTagNo) + { + return ParseBaseUniversal(taggedObjectParser, Asn1Tags.ContextSpecific, tagNo, declaredExplicit, baseTagNo); + } + + /// + public static IAsn1Convertible TryParseBaseUniversal(Asn1TaggedObjectParser taggedObjectParser, int tagClass, + int tagNo, bool declaredExplicit, int baseTagNo) + { + if (!taggedObjectParser.HasTag(tagClass, tagNo)) + return null; + + return taggedObjectParser.ParseBaseUniversal(declaredExplicit, baseTagNo); + } + + /// + public static IAsn1Convertible TryParseContextBaseUniversal(Asn1TaggedObjectParser taggedObjectParser, + int tagNo, bool declaredExplicit, int baseTagNo) + { + return TryParseBaseUniversal(taggedObjectParser, Asn1Tags.ContextSpecific, tagNo, declaredExplicit, + baseTagNo); + } + + + /* + * Wrappers for Asn1TaggedObjectParser.ParseExplicitBaseObject + */ + + /// + public static IAsn1Convertible ParseExplicitBaseObject(Asn1TaggedObjectParser taggedObjectParser, int tagClass, + int tagNo) + { + return CheckTag(taggedObjectParser, tagClass, tagNo).ParseExplicitBaseObject(); + } + + /// + public static IAsn1Convertible ParseExplicitContextBaseObject(Asn1TaggedObjectParser taggedObjectParser, + int tagNo) + { + return ParseExplicitBaseObject(taggedObjectParser, Asn1Tags.ContextSpecific, tagNo); + } + + /// + public static IAsn1Convertible TryParseExplicitBaseObject(Asn1TaggedObjectParser taggedObjectParser, + int tagClass, int tagNo) + { + if (!taggedObjectParser.HasTag(tagClass, tagNo)) + return null; + + return taggedObjectParser.ParseExplicitBaseObject(); + } + + /// + public static IAsn1Convertible TryParseExplicitContextBaseObject(Asn1TaggedObjectParser taggedObjectParser, + int tagNo) + { + return TryParseExplicitBaseObject(taggedObjectParser, Asn1Tags.ContextSpecific, tagNo); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Utilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Utilities.cs.meta new file mode 100644 index 000000000..192c793ee --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/Asn1Utilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 62e229680bdece24987221dc054bce7d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERBitString.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERBitString.cs new file mode 100644 index 000000000..d8ddfcdac --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERBitString.cs @@ -0,0 +1,142 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class BerBitString + : DerBitString + { + private const int DefaultSegmentLimit = 1000; + + internal static byte[] FlattenBitStrings(DerBitString[] bitStrings) + { + int count = bitStrings.Length; + switch (count) + { + case 0: + // No bits + return new byte[]{ 0 }; + case 1: + return bitStrings[0].contents; + default: + { + int last = count - 1, totalLength = 0; + for (int i = 0; i < last; ++i) + { + byte[] elementContents = bitStrings[i].contents; + if (elementContents[0] != 0) + throw new ArgumentException("only the last nested bitstring can have padding", "bitStrings"); + + totalLength += elementContents.Length - 1; + } + + // Last one can have padding + byte[] lastElementContents = bitStrings[last].contents; + byte padBits = lastElementContents[0]; + totalLength += lastElementContents.Length; + + byte[] contents = new byte[totalLength]; + contents[0] = padBits; + + int pos = 1; + for (int i = 0; i < count; ++i) + { + byte[] elementContents = bitStrings[i].contents; + int length = elementContents.Length - 1; + Array.Copy(elementContents, 1, contents, pos, length); + pos += length; + } + + Debug.Assert(pos == totalLength); + return contents; + } + } + } + + private readonly int segmentLimit; + private readonly DerBitString[] elements; + + public BerBitString(byte data, int padBits) + : base(data, padBits) + { + this.elements = null; + this.segmentLimit = DefaultSegmentLimit; + } + + public BerBitString(byte[] data) + : this(data, 0) + { + } + + public BerBitString(byte[] data, int padBits) + : this(data, padBits, DefaultSegmentLimit) + { + } + + public BerBitString(byte[] data, int padBits, int segmentLimit) + : base(data, padBits) + { + this.elements = null; + this.segmentLimit = segmentLimit; + } + + public BerBitString(int namedBits) + : base(namedBits) + { + this.elements = null; + this.segmentLimit = DefaultSegmentLimit; + } + + public BerBitString(Asn1Encodable obj) + : this(obj.GetDerEncoded(), 0) + { + } + + public BerBitString(DerBitString[] elements) + : this(elements, DefaultSegmentLimit) + { + } + + public BerBitString(DerBitString[] elements, int segmentLimit) + : base(FlattenBitStrings(elements), false) + { + this.elements = elements; + this.segmentLimit = segmentLimit; + } + + internal BerBitString(byte[] contents, bool check) + : base(contents, check) + { + this.elements = null; + this.segmentLimit = DefaultSegmentLimit; + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + if (Asn1OutputStream.EncodingBer != encoding) + return base.GetEncoding(encoding); + + if (null == elements) + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.BitString, contents); + + return new ConstructedILEncoding(Asn1Tags.Universal, Asn1Tags.BitString, + Asn1OutputStream.GetContentsEncodings(encoding, elements)); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + if (Asn1OutputStream.EncodingBer != encoding) + return base.GetEncodingImplicit(encoding, tagClass, tagNo); + + if (null == elements) + return new PrimitiveEncoding(tagClass, tagNo, contents); + + return new ConstructedILEncoding(tagClass, tagNo, + Asn1OutputStream.GetContentsEncodings(encoding, elements)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERBitString.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERBitString.cs.meta new file mode 100644 index 000000000..3814fd633 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERBitString.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e6d38188b772c2409c7dad9240d601a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERGenerator.cs new file mode 100644 index 000000000..61c24f959 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERGenerator.cs @@ -0,0 +1,110 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public abstract class BerGenerator + : Asn1Generator + { + private bool _tagged = false; + private bool _isExplicit; + private int _tagNo; + + protected BerGenerator( + Stream outStream) + : base(outStream) + { + } + + protected BerGenerator( + Stream outStream, + int tagNo, + bool isExplicit) + : base(outStream) + { + _tagged = true; + _isExplicit = isExplicit; + _tagNo = tagNo; + } + + public override void AddObject(Asn1Encodable obj) + { + obj.EncodeTo(Out); + } + + public override void AddObject(Asn1Object obj) + { + obj.EncodeTo(Out); + } + + public override Stream GetRawOutputStream() + { + return Out; + } + + public override void Close() + { + WriteBerEnd(); + } + + private void WriteHdr( + int tag) + { + Out.WriteByte((byte) tag); + Out.WriteByte(0x80); + } + + protected void WriteBerHeader( + int tag) + { + if (_tagged) + { + int tagNum = _tagNo | Asn1Tags.ContextSpecific; + + if (_isExplicit) + { + WriteHdr(tagNum | Asn1Tags.Constructed); + WriteHdr(tag); + } + else + { + if ((tag & Asn1Tags.Constructed) != 0) + { + WriteHdr(tagNum | Asn1Tags.Constructed); + } + else + { + WriteHdr(tagNum); + } + } + } + else + { + WriteHdr(tag); + } + } + + protected void WriteBerBody( + Stream contentStream) + { + Streams.PipeAll(contentStream, Out); + } + + protected void WriteBerEnd() + { + Out.WriteByte(0x00); + Out.WriteByte(0x00); + + if (_tagged && _isExplicit) // write extra end for tag header + { + Out.WriteByte(0x00); + Out.WriteByte(0x00); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERGenerator.cs.meta new file mode 100644 index 000000000..8dfa7db6f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ebf471a1d43735f4aa2425eda406c2d7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BEROctetStringGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BEROctetStringGenerator.cs new file mode 100644 index 000000000..30063610a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BEROctetStringGenerator.cs @@ -0,0 +1,162 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class BerOctetStringGenerator + : BerGenerator + { + public BerOctetStringGenerator(Stream outStream) + : base(outStream) + { + WriteBerHeader(Asn1Tags.Constructed | Asn1Tags.OctetString); + } + + public BerOctetStringGenerator( + Stream outStream, + int tagNo, + bool isExplicit) + : base(outStream, tagNo, isExplicit) + { + WriteBerHeader(Asn1Tags.Constructed | Asn1Tags.OctetString); + } + + public Stream GetOctetOutputStream() + { + return GetOctetOutputStream(new byte[1000]); // limit for CER encoding. + } + + public Stream GetOctetOutputStream( + int bufSize) + { + return bufSize < 1 + ? GetOctetOutputStream() + : GetOctetOutputStream(new byte[bufSize]); + } + + public Stream GetOctetOutputStream( + byte[] buf) + { + return new BufferedBerOctetStream(this, buf); + } + + private class BufferedBerOctetStream + : BaseOutputStream + { + private byte[] _buf; + private int _off; + private readonly BerOctetStringGenerator _gen; + private readonly Asn1OutputStream _derOut; + + internal BufferedBerOctetStream( + BerOctetStringGenerator gen, + byte[] buf) + { + _gen = gen; + _buf = buf; + _off = 0; + _derOut = Asn1OutputStream.Create(_gen.Out, Asn1Encodable.Der); + } + + public override void Write(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Write(buffer.AsSpan(offset, count)); +#else + int bufLen = _buf.Length; + int available = bufLen - _off; + if (count < available) + { + Array.Copy(buffer, offset, _buf, _off, count); + _off += count; + return; + } + + int pos = 0; + if (_off > 0) + { + Array.Copy(buffer, offset, _buf, _off, available); + pos = available; + DerOctetString.Encode(_derOut, _buf, 0, bufLen); + //_off = 0; + } + + int remaining; + while ((remaining = count - pos) >= bufLen) + { + DerOctetString.Encode(_derOut, buffer, offset + pos, bufLen); + pos += bufLen; + } + + Array.Copy(buffer, offset + pos, _buf, 0, remaining); + this._off = remaining; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) + { + int bufLen = _buf.Length; + int available = bufLen - _off; + if (buffer.Length < available) + { + buffer.CopyTo(_buf.AsSpan(_off)); + _off += buffer.Length; + return; + } + + if (_off > 0) + { + DerOctetString.Encode(_derOut, _buf.AsSpan(0, _off), buffer[..available]); + buffer = buffer[available..]; + //_off = 0; + } + + while (buffer.Length >= bufLen) + { + DerOctetString.Encode(_derOut, buffer[..bufLen]); + buffer = buffer[bufLen..]; + } + + buffer.CopyTo(_buf.AsSpan()); + _off = buffer.Length; + } +#endif + + public override void WriteByte(byte value) + { + _buf[_off++] = value; + + if (_off == _buf.Length) + { + DerOctetString.Encode(_derOut, _buf, 0, _off); + _off = 0; + } + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (_off != 0) + { + DerOctetString.Encode(_derOut, _buf, 0, _off); + } + + _derOut.FlushInternal(); + + _gen.WriteBerEnd(); + } + base.Dispose(disposing); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BEROctetStringGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BEROctetStringGenerator.cs.meta new file mode 100644 index 000000000..0c2995992 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BEROctetStringGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d5318cc9ca270a547b9434252273ff30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BEROctetStringParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BEROctetStringParser.cs new file mode 100644 index 000000000..ca05a4e1f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BEROctetStringParser.cs @@ -0,0 +1,44 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class BerOctetStringParser + : Asn1OctetStringParser + { + private readonly Asn1StreamParser _parser; + + internal BerOctetStringParser(Asn1StreamParser parser) + { + _parser = parser; + } + + public Stream GetOctetStream() + { + return new ConstructedOctetStream(_parser); + } + + public Asn1Object ToAsn1Object() + { + try + { + return Parse(_parser); + } + catch (IOException e) + { + throw new Asn1ParsingException("IOException converting stream to byte array: " + e.Message, e); + } + } + + internal static BerOctetString Parse(Asn1StreamParser sp) + { + return new BerOctetString(Streams.ReadAll(new ConstructedOctetStream(sp))); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BEROctetStringParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BEROctetStringParser.cs.meta new file mode 100644 index 000000000..5eb6569f0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BEROctetStringParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f349002b9962c3f449219681235b114a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSequenceGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSequenceGenerator.cs new file mode 100644 index 000000000..f91d4d0bb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSequenceGenerator.cs @@ -0,0 +1,28 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class BerSequenceGenerator + : BerGenerator + { + public BerSequenceGenerator( + Stream outStream) + : base(outStream) + { + WriteBerHeader(Asn1Tags.Constructed | Asn1Tags.Sequence); + } + + public BerSequenceGenerator( + Stream outStream, + int tagNo, + bool isExplicit) + : base(outStream, tagNo, isExplicit) + { + WriteBerHeader(Asn1Tags.Constructed | Asn1Tags.Sequence); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSequenceGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSequenceGenerator.cs.meta new file mode 100644 index 000000000..2de6026fb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSequenceGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 39e69b682926f0348a2f183f3d1c8913 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSequenceParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSequenceParser.cs new file mode 100644 index 000000000..47aa5357c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSequenceParser.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class BerSequenceParser + : Asn1SequenceParser + { + private readonly Asn1StreamParser _parser; + + internal BerSequenceParser(Asn1StreamParser parser) + { + this._parser = parser; + } + + public IAsn1Convertible ReadObject() + { + return _parser.ReadObject(); + } + + public Asn1Object ToAsn1Object() + { + return Parse(_parser); + } + + internal static BerSequence Parse(Asn1StreamParser sp) + { + return new BerSequence(sp.ReadVector()); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSequenceParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSequenceParser.cs.meta new file mode 100644 index 000000000..8bcc4d1d8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSequenceParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d593cc0e2b63d14a8aeed9ce0369876 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSetGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSetGenerator.cs new file mode 100644 index 000000000..1a441940a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSetGenerator.cs @@ -0,0 +1,28 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class BerSetGenerator + : BerGenerator + { + public BerSetGenerator( + Stream outStream) + : base(outStream) + { + WriteBerHeader(Asn1Tags.Constructed | Asn1Tags.Set); + } + + public BerSetGenerator( + Stream outStream, + int tagNo, + bool isExplicit) + : base(outStream, tagNo, isExplicit) + { + WriteBerHeader(Asn1Tags.Constructed | Asn1Tags.Set); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSetGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSetGenerator.cs.meta new file mode 100644 index 000000000..0bfa4a9b7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSetGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fbdbc3f5ccf9f446b5a5b30159adca1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSetParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSetParser.cs new file mode 100644 index 000000000..fd85d5141 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSetParser.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class BerSetParser + : Asn1SetParser + { + private readonly Asn1StreamParser _parser; + + internal BerSetParser(Asn1StreamParser parser) + { + this._parser = parser; + } + + public IAsn1Convertible ReadObject() + { + return _parser.ReadObject(); + } + + public Asn1Object ToAsn1Object() + { + return Parse(_parser); + } + + internal static BerSet Parse(Asn1StreamParser sp) + { + return new BerSet(sp.ReadVector()); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSetParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSetParser.cs.meta new file mode 100644 index 000000000..94bfc53bf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERSetParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0260d4642cd5cf94c965eb9cd0ea9635 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERTaggedObjectParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERTaggedObjectParser.cs new file mode 100644 index 000000000..ca88f25c4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERTaggedObjectParser.cs @@ -0,0 +1,84 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal class BerTaggedObjectParser + : Asn1TaggedObjectParser + { + internal readonly int m_tagClass; + internal readonly int m_tagNo; + internal readonly Asn1StreamParser m_parser; + + internal BerTaggedObjectParser(int tagClass, int tagNo, Asn1StreamParser parser) + { + m_tagClass = tagClass; + m_tagNo = tagNo; + m_parser = parser; + } + + public virtual bool IsConstructed + { + get { return true; } + } + + public int TagClass + { + get { return m_tagClass; } + } + + public int TagNo + { + get { return m_tagNo; } + } + + public bool HasContextTag(int tagNo) + { + return m_tagClass == Asn1Tags.ContextSpecific && m_tagNo == tagNo; + } + + public bool HasTag(int tagClass, int tagNo) + { + return m_tagClass == tagClass && m_tagNo == tagNo; + } + + public virtual IAsn1Convertible ParseBaseUniversal(bool declaredExplicit, int baseTagNo) + { + if (declaredExplicit) + return m_parser.ParseObject(baseTagNo); + + return m_parser.ParseImplicitConstructedIL(baseTagNo); + } + + public virtual IAsn1Convertible ParseExplicitBaseObject() + { + return m_parser.ReadObject(); + } + + public virtual Asn1TaggedObjectParser ParseExplicitBaseTagged() + { + return m_parser.ParseTaggedObject(); + } + + public virtual Asn1TaggedObjectParser ParseImplicitBaseTagged(int baseTagClass, int baseTagNo) + { + return new BerTaggedObjectParser(baseTagClass, baseTagNo, m_parser); + } + + public virtual Asn1Object ToAsn1Object() + { + try + { + return m_parser.LoadTaggedIL(TagClass, TagNo); + } + catch (IOException e) + { + throw new Asn1ParsingException(e.Message); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERTaggedObjectParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERTaggedObjectParser.cs.meta new file mode 100644 index 000000000..d6f0bbf0e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BERTaggedObjectParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59190053596d8924a9902581e3b94f46 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerApplicationSpecific.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerApplicationSpecific.cs new file mode 100644 index 000000000..0454b349a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerApplicationSpecific.cs @@ -0,0 +1,3 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerApplicationSpecific.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerApplicationSpecific.cs.meta new file mode 100644 index 000000000..7be134d14 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerApplicationSpecific.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d565bd50647e32459915b52caf8d736 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerApplicationSpecificParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerApplicationSpecificParser.cs new file mode 100644 index 000000000..3b1d777ff --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerApplicationSpecificParser.cs @@ -0,0 +1,2 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerApplicationSpecificParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerApplicationSpecificParser.cs.meta new file mode 100644 index 000000000..190e82057 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerApplicationSpecificParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f60af26f2a3ecad4ab67ab32b5796bbe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerBitStringParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerBitStringParser.cs new file mode 100644 index 000000000..47013e32d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerBitStringParser.cs @@ -0,0 +1,60 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /// A parser for indefinite-length BIT STRINGs. + internal class BerBitStringParser + : Asn1BitStringParser + { + private readonly Asn1StreamParser m_parser; + + private ConstructedBitStream m_bitStream; + + internal BerBitStringParser(Asn1StreamParser parser) + { + m_parser = parser; + } + + public Stream GetOctetStream() + { + return m_bitStream = new ConstructedBitStream(m_parser, true); + } + + public Stream GetBitStream() + { + return m_bitStream = new ConstructedBitStream(m_parser, false); + } + + public int PadBits + { + get { return m_bitStream.PadBits; } + } + + public Asn1Object ToAsn1Object() + { + try + { + return Parse(m_parser); + } + catch (IOException e) + { + throw new Asn1ParsingException("IOException converting stream to byte array: " + e.Message, e); + } + } + + internal static BerBitString Parse(Asn1StreamParser sp) + { + ConstructedBitStream bitStream = new ConstructedBitStream(sp, false); + byte[] data = Streams.ReadAll(bitStream); + int padBits = bitStream.PadBits; + return new BerBitString(data, padBits); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerBitStringParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerBitStringParser.cs.meta new file mode 100644 index 000000000..8e378fdb3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerBitStringParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0935e7c4731287a488fd95f8f9670666 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerOctetString.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerOctetString.cs new file mode 100644 index 000000000..d867b00b5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerOctetString.cs @@ -0,0 +1,112 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class BerOctetString + : DerOctetString + { + private const int DefaultSegmentLimit = 1000; + + public static BerOctetString FromSequence(Asn1Sequence seq) + { + int count = seq.Count; + Asn1OctetString[] v = new Asn1OctetString[count]; + for (int i = 0; i < count; ++i) + { + v[i] = GetInstance(seq[i]); + } + return new BerOctetString(v); + } + + internal static byte[] FlattenOctetStrings(Asn1OctetString[] octetStrings) + { + int count = octetStrings.Length; + switch (count) + { + case 0: + return EmptyOctets; + case 1: + return octetStrings[0].contents; + default: + { + int totalOctets = 0; + for (int i = 0; i < count; ++i) + { + totalOctets += octetStrings[i].contents.Length; + } + + byte[] str = new byte[totalOctets]; + int pos = 0; + for (int i = 0; i < count; ++i) + { + byte[] octets = octetStrings[i].contents; + Array.Copy(octets, 0, str, pos, octets.Length); + pos += octets.Length; + } + + Debug.Assert(pos == totalOctets); + return str; + } + } + } + + private readonly int segmentLimit; + private readonly Asn1OctetString[] elements; + + public BerOctetString(byte[] contents) + : this(contents, DefaultSegmentLimit) + { + } + + public BerOctetString(Asn1OctetString[] elements) + : this(elements, DefaultSegmentLimit) + { + } + + public BerOctetString(byte[] contents, int segmentLimit) + : this(contents, null, segmentLimit) + { + } + + public BerOctetString(Asn1OctetString[] elements, int segmentLimit) + : this(FlattenOctetStrings(elements), elements, segmentLimit) + { + } + + private BerOctetString(byte[] contents, Asn1OctetString[] elements, int segmentLimit) + : base(contents) + { + this.elements = elements; + this.segmentLimit = segmentLimit; + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + if (Asn1OutputStream.EncodingBer != encoding) + return base.GetEncoding(encoding); + + if (null == elements) + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.OctetString, contents); + + return new ConstructedILEncoding(Asn1Tags.Universal, Asn1Tags.OctetString, + Asn1OutputStream.GetContentsEncodings(encoding, elements)); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + if (Asn1OutputStream.EncodingBer != encoding) + return base.GetEncodingImplicit(encoding, tagClass, tagNo); + + if (null == elements) + return new PrimitiveEncoding(tagClass, tagNo, contents); + + return new ConstructedILEncoding(tagClass, tagNo, + Asn1OutputStream.GetContentsEncodings(encoding, elements)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerOctetString.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerOctetString.cs.meta new file mode 100644 index 000000000..7e1c7dcfe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerOctetString.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d06a07cbd3b71a74f8cb664efab20cd0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerOutputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerOutputStream.cs new file mode 100644 index 000000000..0454b349a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerOutputStream.cs @@ -0,0 +1,3 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerOutputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerOutputStream.cs.meta new file mode 100644 index 000000000..6e7d69fa7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerOutputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4acf00c72bf317e489e931a8c0c3c3da +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerSequence.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerSequence.cs new file mode 100644 index 000000000..a79443ad2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerSequence.cs @@ -0,0 +1,101 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class BerSequence + : DerSequence + { + public static new readonly BerSequence Empty = new BerSequence(); + + public static new BerSequence FromVector(Asn1EncodableVector elementVector) + { + return elementVector.Count < 1 ? Empty : new BerSequence(elementVector); + } + + /** + * create an empty sequence + */ + public BerSequence() + : base() + { + } + + /** + * create a sequence containing one object + */ + public BerSequence(Asn1Encodable element) + : base(element) + { + } + + /** + * create a sequence containing two objects + */ + public BerSequence(Asn1Encodable element1, Asn1Encodable element2) + : base(element1, element2) + { + } + + public BerSequence(params Asn1Encodable[] elements) + : base(elements) + { + } + + /** + * create a sequence containing a vector of objects. + */ + public BerSequence(Asn1EncodableVector elementVector) + : base(elementVector) + { + } + + internal BerSequence(Asn1Encodable[] elements, bool clone) + : base(elements, clone) + { + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + if (Asn1OutputStream.EncodingBer != encoding) + return base.GetEncoding(encoding); + + return new ConstructedILEncoding(Asn1Tags.Universal, Asn1Tags.Sequence, + Asn1OutputStream.GetContentsEncodings(encoding, elements)); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + if (Asn1OutputStream.EncodingBer != encoding) + return base.GetEncodingImplicit(encoding, tagClass, tagNo); + + return new ConstructedILEncoding(tagClass, tagNo, + Asn1OutputStream.GetContentsEncodings(encoding, elements)); + } + + internal override DerBitString ToAsn1BitString() + { + return new BerBitString(GetConstructedBitStrings()); + } + + internal override DerExternal ToAsn1External() + { + // TODO There is currently no BerExternal class (or ToDLObject/ToDerObject) + //return ((Asn1Sequence)ToDLObject()).ToAsn1External(); + return new DLSequence(elements).ToAsn1External(); + } + + internal override Asn1OctetString ToAsn1OctetString() + { + return new BerOctetString(GetConstructedOctetStrings()); + } + + internal override Asn1Set ToAsn1Set() + { + return new BerSet(false, elements); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerSequence.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerSequence.cs.meta new file mode 100644 index 000000000..8acfaef67 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerSequence.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c5bc0026174da4a4e878a4914a50457b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerSet.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerSet.cs new file mode 100644 index 000000000..ffc960555 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerSet.cs @@ -0,0 +1,73 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class BerSet + : DerSet + { + public static new readonly BerSet Empty = new BerSet(); + + public static new BerSet FromVector(Asn1EncodableVector elementVector) + { + return elementVector.Count < 1 ? Empty : new BerSet(elementVector); + } + + /** + * create an empty set + */ + public BerSet() + : base() + { + } + + /** + * create a set containing one object + */ + public BerSet(Asn1Encodable element) + : base(element) + { + } + + public BerSet(params Asn1Encodable[] elements) + : base(elements, false) + { + } + + /** + * create a set containing a vector of objects. + */ + public BerSet(Asn1EncodableVector elementVector) + : base(elementVector, false) + { + } + + internal BerSet(bool isSorted, Asn1Encodable[] elements) + : base(isSorted, elements) + { + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + if (Asn1OutputStream.EncodingBer != encoding) + return base.GetEncoding(encoding); + + return new ConstructedILEncoding(Asn1Tags.Universal, Asn1Tags.Set, + Asn1OutputStream.GetContentsEncodings(encoding, elements)); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + if (Asn1OutputStream.EncodingBer != encoding) + return base.GetEncodingImplicit(encoding, tagClass, tagNo); + + return new ConstructedILEncoding(tagClass, tagNo, + Asn1OutputStream.GetContentsEncodings(encoding, elements)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerSet.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerSet.cs.meta new file mode 100644 index 000000000..8c283b4d6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerSet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01890d0dd345cff48bdbba411a658317 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerTaggedObject.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerTaggedObject.cs new file mode 100644 index 000000000..09781c730 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerTaggedObject.cs @@ -0,0 +1,92 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * BER TaggedObject - in ASN.1 notation this is any object preceded by + * a [n] where n is some number - these are assumed to follow the construction + * rules (as with sequences). + */ + public class BerTaggedObject + : DerTaggedObject + { + /** + * @param tagNo the tag number for this object. + * @param obj the tagged object. + */ + public BerTaggedObject(int tagNo, Asn1Encodable obj) + : base(true, tagNo, obj) + { + } + + public BerTaggedObject(int tagClass, int tagNo, Asn1Encodable obj) + : base(true, tagClass, tagNo, obj) + { + } + + /** + * @param isExplicit true if an explicitly tagged object. + * @param tagNo the tag number for this object. + * @param obj the tagged object. + */ + public BerTaggedObject(bool isExplicit, int tagNo, Asn1Encodable obj) + : base(isExplicit, tagNo, obj) + { + } + + public BerTaggedObject(bool isExplicit, int tagClass, int tagNo, Asn1Encodable obj) + : base(isExplicit, tagClass, tagNo, obj) + { + } + + internal BerTaggedObject(int explicitness, int tagClass, int tagNo, Asn1Encodable obj) + : base(explicitness, tagClass, tagNo, obj) + { + } + + internal override string Asn1Encoding + { + get { return Ber; } + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + if (Asn1OutputStream.EncodingBer != encoding) + return base.GetEncoding(encoding); + + Asn1Object baseObject = GetBaseObject().ToAsn1Object(); + + if (!IsExplicit()) + return baseObject.GetEncodingImplicit(encoding, TagClass, TagNo); + + return new ConstructedILEncoding(TagClass, TagNo, new IAsn1Encoding[]{ baseObject.GetEncoding(encoding) }); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + if (Asn1OutputStream.EncodingBer != encoding) + return base.GetEncodingImplicit(encoding, tagClass, tagNo); + + Asn1Object baseObject = GetBaseObject().ToAsn1Object(); + + if (!IsExplicit()) + return baseObject.GetEncodingImplicit(encoding, tagClass, tagNo); + + return new ConstructedILEncoding(tagClass, tagNo, new IAsn1Encoding[]{ baseObject.GetEncoding(encoding) }); + } + + internal override Asn1Sequence RebuildConstructed(Asn1Object asn1Object) + { + return new BerSequence(asn1Object); + } + + internal override Asn1TaggedObject ReplaceTag(int tagClass, int tagNo) + { + return new BerTaggedObject(explicitness, tagClass, tagNo, obj); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerTaggedObject.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerTaggedObject.cs.meta new file mode 100644 index 000000000..655fb05c0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/BerTaggedObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cb57ca2d9225e0340bc7c9ef54c0bd13 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedBitStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedBitStream.cs new file mode 100644 index 000000000..c4e76238d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedBitStream.cs @@ -0,0 +1,192 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal class ConstructedBitStream + : BaseInputStream + { + private readonly Asn1StreamParser m_parser; + private readonly bool m_octetAligned; + + private bool m_first = true; + private int m_padBits = 0; + + private Asn1BitStringParser m_currentParser; + private Stream m_currentStream; + + internal ConstructedBitStream(Asn1StreamParser parser, bool octetAligned) + { + m_parser = parser; + m_octetAligned = octetAligned; + } + + internal int PadBits + { + get { return m_padBits; } + } + + public override int Read(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return Read(buffer.AsSpan(offset, count)); +#else + if (count < 1) + return 0; + + if (m_currentStream == null) + { + if (!m_first) + return 0; + + m_currentParser = GetNextParser(); + if (m_currentParser == null) + return 0; + + m_first = false; + m_currentStream = m_currentParser.GetBitStream(); + } + + int totalRead = 0; + + for (;;) + { + int numRead = m_currentStream.Read(buffer, offset + totalRead, count - totalRead); + + if (numRead > 0) + { + totalRead += numRead; + + if (totalRead == count) + return totalRead; + } + else + { + m_padBits = m_currentParser.PadBits; + m_currentParser = GetNextParser(); + if (m_currentParser == null) + { + m_currentStream = null; + return totalRead; + } + + m_currentStream = m_currentParser.GetBitStream(); + } + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int Read(Span buffer) + { + if (buffer.IsEmpty) + return 0; + + if (m_currentStream == null) + { + if (!m_first) + return 0; + + m_currentParser = GetNextParser(); + if (m_currentParser == null) + return 0; + + m_first = false; + m_currentStream = m_currentParser.GetBitStream(); + } + + int totalRead = 0; + + for (;;) + { + int numRead = m_currentStream.Read(buffer[totalRead..]); + + if (numRead > 0) + { + totalRead += numRead; + + if (totalRead == buffer.Length) + return totalRead; + } + else + { + m_padBits = m_currentParser.PadBits; + m_currentParser = GetNextParser(); + if (m_currentParser == null) + { + m_currentStream = null; + return totalRead; + } + + m_currentStream = m_currentParser.GetBitStream(); + } + } + } +#endif + + public override int ReadByte() + { + if (m_currentStream == null) + { + if (!m_first) + return -1; + + m_currentParser = GetNextParser(); + if (m_currentParser == null) + return -1; + + m_first = false; + m_currentStream = m_currentParser.GetBitStream(); + } + + for (;;) + { + int b = m_currentStream.ReadByte(); + + if (b >= 0) + return b; + + m_padBits = m_currentParser.PadBits; + m_currentParser = GetNextParser(); + if (m_currentParser == null) + { + m_currentStream = null; + return -1; + } + + m_currentStream = m_currentParser.GetBitStream(); + } + } + + private Asn1BitStringParser GetNextParser() + { + IAsn1Convertible asn1Obj = m_parser.ReadObject(); + if (asn1Obj == null) + { + if (m_octetAligned && m_padBits != 0) + throw new IOException("expected octet-aligned bitstring, but found padBits: " + m_padBits); + + return null; + } + + if (asn1Obj is Asn1BitStringParser) + { + if (m_padBits != 0) + throw new IOException("only the last nested bitstring can have padding"); + + return (Asn1BitStringParser)asn1Obj; + } + + throw new IOException("unknown object encountered: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(asn1Obj)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedBitStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedBitStream.cs.meta new file mode 100644 index 000000000..365cb96b0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedBitStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 86bbb9386c084ce47a3672ac12a5afa1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedDLEncoding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedDLEncoding.cs new file mode 100644 index 000000000..b4d0bc97e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedDLEncoding.cs @@ -0,0 +1,39 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal class ConstructedDLEncoding + : IAsn1Encoding + { + private readonly int m_tagClass; + private readonly int m_tagNo; + private readonly IAsn1Encoding[] m_contentsElements; + private readonly int m_contentsLength; + + internal ConstructedDLEncoding(int tagClass, int tagNo, IAsn1Encoding[] contentsElements) + { + m_tagClass = tagClass; + m_tagNo = tagNo; + m_contentsElements = contentsElements; + m_contentsLength = Asn1OutputStream.GetLengthOfContents(contentsElements); + } + + void IAsn1Encoding.Encode(Asn1OutputStream asn1Out) + { + asn1Out.WriteIdentifier(Asn1Tags.Constructed | m_tagClass, m_tagNo); + asn1Out.WriteDL(m_contentsLength); + asn1Out.EncodeContents(m_contentsElements); + } + + int IAsn1Encoding.GetLength() + { + return Asn1OutputStream.GetLengthOfIdentifier(m_tagNo) + + Asn1OutputStream.GetLengthOfDL(m_contentsLength) + + m_contentsLength; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedDLEncoding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedDLEncoding.cs.meta new file mode 100644 index 000000000..9b5d23121 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedDLEncoding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 95ca1443910ef7d48b13c585349fd261 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedILEncoding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedILEncoding.cs new file mode 100644 index 000000000..0317f1514 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedILEncoding.cs @@ -0,0 +1,39 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal class ConstructedILEncoding + : IAsn1Encoding + { + private readonly int m_tagClass; + private readonly int m_tagNo; + private readonly IAsn1Encoding[] m_contentsElements; + + internal ConstructedILEncoding(int tagClass, int tagNo, IAsn1Encoding[] contentsElements) + { + m_tagClass = tagClass; + m_tagNo = tagNo; + m_contentsElements = contentsElements; + } + + void IAsn1Encoding.Encode(Asn1OutputStream asn1Out) + { + asn1Out.WriteIdentifier(Asn1Tags.Constructed | m_tagClass, m_tagNo); + asn1Out.WriteByte(0x80); + asn1Out.EncodeContents(m_contentsElements); + asn1Out.WriteByte(0x00); + asn1Out.WriteByte(0x00); + } + + int IAsn1Encoding.GetLength() + { + return Asn1OutputStream.GetLengthOfIdentifier(m_tagNo) + + 3 + + Asn1OutputStream.GetLengthOfContents(m_contentsElements); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedILEncoding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedILEncoding.cs.meta new file mode 100644 index 000000000..6c785c8cb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedILEncoding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8ddca6f0e8886b5409e7379e9d09dc77 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedLazyDLEncoding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedLazyDLEncoding.cs new file mode 100644 index 000000000..f6046809d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedLazyDLEncoding.cs @@ -0,0 +1,37 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal class ConstructedLazyDLEncoding + : IAsn1Encoding + { + private readonly int m_tagClass; + private readonly int m_tagNo; + private readonly byte[] m_contentsOctets; + + internal ConstructedLazyDLEncoding(int tagClass, int tagNo, byte[] contentsOctets) + { + m_tagClass = tagClass; + m_tagNo = tagNo; + m_contentsOctets = contentsOctets; + } + + void IAsn1Encoding.Encode(Asn1OutputStream asn1Out) + { + asn1Out.WriteIdentifier(Asn1Tags.Constructed | m_tagClass, m_tagNo); + asn1Out.WriteDL(m_contentsOctets.Length); + asn1Out.Write(m_contentsOctets, 0, m_contentsOctets.Length); + } + + int IAsn1Encoding.GetLength() + { + return Asn1OutputStream.GetLengthOfIdentifier(m_tagNo) + + Asn1OutputStream.GetLengthOfDL(m_contentsOctets.Length) + + m_contentsOctets.Length; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedLazyDLEncoding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedLazyDLEncoding.cs.meta new file mode 100644 index 000000000..25d99cc01 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedLazyDLEncoding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c7c2fedd867a2bf41bb4a45ced6041d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedOctetStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedOctetStream.cs new file mode 100644 index 000000000..6e79861a8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedOctetStream.cs @@ -0,0 +1,169 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal class ConstructedOctetStream + : BaseInputStream + { + private readonly Asn1StreamParser m_parser; + + private bool m_first = true; + private Stream m_currentStream; + + internal ConstructedOctetStream(Asn1StreamParser parser) + { + m_parser = parser; + } + + public override int Read(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return Read(buffer.AsSpan(offset, count)); +#else + if (count < 1) + return 0; + + if (m_currentStream == null) + { + if (!m_first) + return 0; + + Asn1OctetStringParser next = GetNextParser(); + if (next == null) + return 0; + + m_first = false; + m_currentStream = next.GetOctetStream(); + } + + int totalRead = 0; + + for (;;) + { + int numRead = m_currentStream.Read(buffer, offset + totalRead, count - totalRead); + + if (numRead > 0) + { + totalRead += numRead; + + if (totalRead == count) + return totalRead; + } + else + { + Asn1OctetStringParser next = GetNextParser(); + if (next == null) + { + m_currentStream = null; + return totalRead; + } + + m_currentStream = next.GetOctetStream(); + } + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int Read(Span buffer) + { + if (buffer.IsEmpty) + return 0; + + if (m_currentStream == null) + { + if (!m_first) + return 0; + + Asn1OctetStringParser next = GetNextParser(); + if (next == null) + return 0; + + m_first = false; + m_currentStream = next.GetOctetStream(); + } + + int totalRead = 0; + + for (;;) + { + int numRead = m_currentStream.Read(buffer[totalRead..]); + + if (numRead > 0) + { + totalRead += numRead; + + if (totalRead == buffer.Length) + return totalRead; + } + else + { + Asn1OctetStringParser next = GetNextParser(); + if (next == null) + { + m_currentStream = null; + return totalRead; + } + + m_currentStream = next.GetOctetStream(); + } + } + } +#endif + + public override int ReadByte() + { + if (m_currentStream == null) + { + if (!m_first) + return -1; + + Asn1OctetStringParser next = GetNextParser(); + if (next == null) + return -1; + + m_first = false; + m_currentStream = next.GetOctetStream(); + } + + for (;;) + { + int b = m_currentStream.ReadByte(); + + if (b >= 0) + return b; + + Asn1OctetStringParser next = GetNextParser(); + if (next == null) + { + m_currentStream = null; + return -1; + } + + m_currentStream = next.GetOctetStream(); + } + } + + private Asn1OctetStringParser GetNextParser() + { + IAsn1Convertible asn1Obj = m_parser.ReadObject(); + if (asn1Obj == null) + return null; + + if (asn1Obj is Asn1OctetStringParser) + return (Asn1OctetStringParser)asn1Obj; + + throw new IOException("unknown object encountered: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(asn1Obj)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedOctetStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedOctetStream.cs.meta new file mode 100644 index 000000000..92da60a1c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ConstructedOctetStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b0993a20facfcf478ecec624bad7b88 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERExternal.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERExternal.cs new file mode 100644 index 000000000..06bb37fc4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERExternal.cs @@ -0,0 +1,274 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * Class representing the DER-type External + */ + public class DerExternal + : Asn1Object + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(DerExternal), Asn1Tags.External) {} + + internal override Asn1Object FromImplicitConstructed(Asn1Sequence sequence) + { + return sequence.ToAsn1External(); + } + } + + public static DerExternal GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is DerExternal derExternal) + return derExternal; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is DerExternal converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (DerExternal)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct external from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public static DerExternal GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (DerExternal)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + private readonly DerObjectIdentifier directReference; + private readonly DerInteger indirectReference; + private readonly Asn1ObjectDescriptor dataValueDescriptor; + private readonly int encoding; + private readonly Asn1Object externalContent; + + public DerExternal(Asn1EncodableVector vector) + : this(new DerSequence(vector)) + { + } + + public DerExternal(Asn1Sequence sequence) + { + int offset = 0; + + Asn1Object asn1 = GetObjFromSequence(sequence, offset); + if (asn1 is DerObjectIdentifier) + { + directReference = (DerObjectIdentifier)asn1; + asn1 = GetObjFromSequence(sequence, ++offset); + } + if (asn1 is DerInteger) + { + indirectReference = (DerInteger)asn1; + asn1 = GetObjFromSequence(sequence, ++offset); + } + if (!(asn1 is Asn1TaggedObject)) + { + dataValueDescriptor = (Asn1ObjectDescriptor)asn1; + asn1 = GetObjFromSequence(sequence, ++offset); + } + + if (sequence.Count != offset + 1) + throw new ArgumentException("input sequence too large", "sequence"); + + if (!(asn1 is Asn1TaggedObject)) + throw new ArgumentException( + "No tagged object found in sequence. Structure doesn't seem to be of type External", "sequence"); + + Asn1TaggedObject obj = (Asn1TaggedObject)asn1; + this.encoding = CheckEncoding(obj.TagNo); + this.externalContent = GetExternalContent(obj); + } + + /** + * Creates a new instance of DerExternal + * See X.690 for more informations about the meaning of these parameters + * @param directReference The direct reference or null if not set. + * @param indirectReference The indirect reference or null if not set. + * @param dataValueDescriptor The data value descriptor or null if not set. + * @param externalData The external data in its encoded form. + */ + public DerExternal(DerObjectIdentifier directReference, DerInteger indirectReference, + Asn1ObjectDescriptor dataValueDescriptor, DerTaggedObject externalData) + { + this.directReference = directReference; + this.indirectReference = indirectReference; + this.dataValueDescriptor = dataValueDescriptor; + this.encoding = CheckEncoding(externalData.TagNo); + this.externalContent = GetExternalContent(externalData); + } + + /** + * Creates a new instance of DerExternal. + * See X.690 for more informations about the meaning of these parameters + * @param directReference The direct reference or null if not set. + * @param indirectReference The indirect reference or null if not set. + * @param dataValueDescriptor The data value descriptor or null if not set. + * @param encoding The encoding to be used for the external data + * @param externalData The external data + */ + public DerExternal(DerObjectIdentifier directReference, DerInteger indirectReference, + Asn1ObjectDescriptor dataValueDescriptor, int encoding, Asn1Object externalData) + { + this.directReference = directReference; + this.indirectReference = indirectReference; + this.dataValueDescriptor = dataValueDescriptor; + this.encoding = CheckEncoding(encoding); + this.externalContent = CheckExternalContent(encoding, externalData); + } + + internal Asn1Sequence BuildSequence() + { + Asn1EncodableVector v = new Asn1EncodableVector(4); + v.AddOptional(directReference, indirectReference, dataValueDescriptor); + v.Add(new DerTaggedObject(0 == encoding, encoding, externalContent)); + return new DerSequence(v); + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return BuildSequence().GetEncodingImplicit(encoding, Asn1Tags.Universal, Asn1Tags.External); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return BuildSequence().GetEncodingImplicit(encoding, tagClass, tagNo); + } + + protected override int Asn1GetHashCode() + { + return Objects.GetHashCode(this.directReference) + ^ Objects.GetHashCode(this.indirectReference) + ^ Objects.GetHashCode(this.dataValueDescriptor) + ^ this.encoding + ^ this.externalContent.GetHashCode(); + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + DerExternal that = asn1Object as DerExternal; + return null != that + && Equals(this.directReference, that.directReference) + && Equals(this.indirectReference, that.indirectReference) + && Equals(this.dataValueDescriptor, that.dataValueDescriptor) + && this.encoding == that.encoding + && this.externalContent.Equals(that.externalContent); + } + + public Asn1ObjectDescriptor DataValueDescriptor + { + get { return dataValueDescriptor; } + } + + public DerObjectIdentifier DirectReference + { + get { return directReference; } + } + + /** + * The encoding of the content. Valid values are + *
    + *
  • 0 single-ASN1-type
  • + *
  • 1 OCTET STRING
  • + *
  • 2 BIT STRING
  • + *
+ */ + public int Encoding + { + get { return encoding; } + } + + public Asn1Object ExternalContent + { + get { return externalContent; } + } + + public DerInteger IndirectReference + { + get { return indirectReference; } + } + + private static Asn1ObjectDescriptor CheckDataValueDescriptor(Asn1Object dataValueDescriptor) + { + if (dataValueDescriptor is Asn1ObjectDescriptor) + return (Asn1ObjectDescriptor)dataValueDescriptor; + if (dataValueDescriptor is DerGraphicString) + return new Asn1ObjectDescriptor((DerGraphicString)dataValueDescriptor); + + throw new ArgumentException("incompatible type for data-value-descriptor", "dataValueDescriptor"); + } + + private static int CheckEncoding(int encoding) + { + if (encoding < 0 || encoding > 2) + throw new InvalidOperationException("invalid encoding value: " + encoding); + + return encoding; + } + + private static Asn1Object CheckExternalContent(int tagNo, Asn1Object externalContent) + { + switch (tagNo) + { + case 1: + return Asn1OctetString.Meta.Instance.CheckedCast(externalContent); + case 2: + return DerBitString.Meta.Instance.CheckedCast(externalContent); + default: + return externalContent; + } + } + + private static Asn1Object GetExternalContent(Asn1TaggedObject encoding) + { + int tagClass = encoding.TagClass, tagNo = encoding.TagNo; + if (Asn1Tags.ContextSpecific != tagClass) + throw new ArgumentException("invalid tag: " + Asn1Utilities.GetTagText(tagClass, tagNo), "encoding"); + + switch (tagNo) + { + case 0: + return encoding.GetExplicitBaseObject().ToAsn1Object(); + case 1: + return Asn1OctetString.GetInstance(encoding, false); + case 2: + return DerBitString.GetInstance(encoding, false); + default: + throw new ArgumentException("invalid tag: " + Asn1Utilities.GetTagText(tagClass, tagNo), "encoding"); + } + } + + private static Asn1Object GetObjFromSequence(Asn1Sequence sequence, int index) + { + if (sequence.Count <= index) + throw new ArgumentException("too few objects in input sequence", "sequence"); + + return sequence[index].ToAsn1Object(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERExternal.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERExternal.cs.meta new file mode 100644 index 000000000..2ad5d4450 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERExternal.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 935fe2462b03f3d428919bf7cefbb60b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERExternalParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERExternalParser.cs new file mode 100644 index 000000000..415ec89ea --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERExternalParser.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class DerExternalParser + : Asn1Encodable + { + private readonly Asn1StreamParser m_parser; + + internal DerExternalParser(Asn1StreamParser parser) + { + m_parser = parser; + } + + public IAsn1Convertible ReadObject() + { + return m_parser.ReadObject(); + } + + public override Asn1Object ToAsn1Object() + { + return Parse(m_parser); + } + + internal static DerExternal Parse(Asn1StreamParser sp) + { + return new DerExternal(sp.ReadVector()); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERExternalParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERExternalParser.cs.meta new file mode 100644 index 000000000..58402392c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERExternalParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31eecbd25b910414fa16a090b4665272 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERGenerator.cs new file mode 100644 index 000000000..d2c7ae6b8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERGenerator.cs @@ -0,0 +1,111 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public abstract class DerGenerator + : Asn1Generator + { + private bool _tagged = false; + private bool _isExplicit; + private int _tagNo; + + protected DerGenerator( + Stream outStream) + : base(outStream) + { + } + + protected DerGenerator( + Stream outStream, + int tagNo, + bool isExplicit) + : base(outStream) + { + _tagged = true; + _isExplicit = isExplicit; + _tagNo = tagNo; + } + + private static void WriteLength( + Stream outStr, + int length) + { + if (length > 127) + { + int size = 1; + int val = length; + + while ((val >>= 8) != 0) + { + size++; + } + + outStr.WriteByte((byte)(size | 0x80)); + + for (int i = (size - 1) * 8; i >= 0; i -= 8) + { + outStr.WriteByte((byte)(length >> i)); + } + } + else + { + outStr.WriteByte((byte)length); + } + } + + internal static void WriteDerEncoded( + Stream outStream, + int tag, + byte[] bytes) + { + outStream.WriteByte((byte) tag); + WriteLength(outStream, bytes.Length); + outStream.Write(bytes, 0, bytes.Length); + } + + internal void WriteDerEncoded( + int tag, + byte[] bytes) + { + if (_tagged) + { + int tagNum = _tagNo | Asn1Tags.ContextSpecific; + + if (_isExplicit) + { + int newTag = _tagNo | Asn1Tags.Constructed | Asn1Tags.ContextSpecific; + MemoryStream bOut = new MemoryStream(); + WriteDerEncoded(bOut, tag, bytes); + WriteDerEncoded(Out, newTag, bOut.ToArray()); + } + else + { + if ((tag & Asn1Tags.Constructed) != 0) + { + tagNum |= Asn1Tags.Constructed; + } + + WriteDerEncoded(Out, tagNum, bytes); + } + } + else + { + WriteDerEncoded(Out, tag, bytes); + } + } + + internal static void WriteDerEncoded( + Stream outStr, + int tag, + Stream inStr) + { + WriteDerEncoded(outStr, tag, Streams.ReadAll(inStr)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERGenerator.cs.meta new file mode 100644 index 000000000..e2c2ee6a0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 86052d0b423f7dd4e812736107d50f9c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DEROctetStringParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DEROctetStringParser.cs new file mode 100644 index 000000000..d67c9d92a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DEROctetStringParser.cs @@ -0,0 +1,40 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class DerOctetStringParser + : Asn1OctetStringParser + { + private readonly DefiniteLengthInputStream stream; + + internal DerOctetStringParser( + DefiniteLengthInputStream stream) + { + this.stream = stream; + } + + public Stream GetOctetStream() + { + return stream; + } + + public Asn1Object ToAsn1Object() + { + try + { + return new DerOctetString(stream.ToArray()); + } + catch (IOException e) + { + throw new InvalidOperationException("IOException converting stream to byte array: " + e.Message, e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DEROctetStringParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DEROctetStringParser.cs.meta new file mode 100644 index 000000000..bba9aa903 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DEROctetStringParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d08d17989b4e0584ba0cd58d1293e26f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSequenceGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSequenceGenerator.cs new file mode 100644 index 000000000..03718c073 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSequenceGenerator.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class DerSequenceGenerator + : DerGenerator + { + private readonly MemoryStream _bOut = new MemoryStream(); + + public DerSequenceGenerator( + Stream outStream) + : base(outStream) + { + } + + public DerSequenceGenerator( + Stream outStream, + int tagNo, + bool isExplicit) + : base(outStream, tagNo, isExplicit) + { + } + + public override void AddObject(Asn1Encodable obj) + { + obj.EncodeTo(_bOut, Asn1Encodable.Der); + } + + public override void AddObject(Asn1Object obj) + { + obj.EncodeTo(_bOut, Asn1Encodable.Der); + } + + public override Stream GetRawOutputStream() + { + return _bOut; + } + + public override void Close() + { + WriteDerEncoded(Asn1Tags.Constructed | Asn1Tags.Sequence, _bOut.ToArray()); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSequenceGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSequenceGenerator.cs.meta new file mode 100644 index 000000000..010e2caac --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSequenceGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9c132559ea4aae9448f2cc6da224abc4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSequenceParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSequenceParser.cs new file mode 100644 index 000000000..423fa4211 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSequenceParser.cs @@ -0,0 +1,30 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + // TODO[asn1] Should be renamed/replaced with DLSequenceParser + public class DerSequenceParser + : Asn1SequenceParser + { + private readonly Asn1StreamParser m_parser; + + internal DerSequenceParser(Asn1StreamParser parser) + { + this.m_parser = parser; + } + + public IAsn1Convertible ReadObject() + { + return m_parser.ReadObject(); + } + + public Asn1Object ToAsn1Object() + { + return DLSequence.FromVector(m_parser.ReadVector()); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSequenceParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSequenceParser.cs.meta new file mode 100644 index 000000000..69baa4f11 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSequenceParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 78a54d52c5aa20746a40a83ecd7dcf8c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSetGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSetGenerator.cs new file mode 100644 index 000000000..7fd7f8075 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSetGenerator.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class DerSetGenerator + : DerGenerator + { + private readonly MemoryStream _bOut = new MemoryStream(); + + public DerSetGenerator( + Stream outStream) + : base(outStream) + { + } + + public DerSetGenerator( + Stream outStream, + int tagNo, + bool isExplicit) + : base(outStream, tagNo, isExplicit) + { + } + + public override void AddObject(Asn1Encodable obj) + { + obj.EncodeTo(_bOut, Asn1Encodable.Der); + } + + public override void AddObject(Asn1Object obj) + { + obj.EncodeTo(_bOut, Asn1Encodable.Der); + } + + public override Stream GetRawOutputStream() + { + return _bOut; + } + + public override void Close() + { + WriteDerEncoded(Asn1Tags.Constructed | Asn1Tags.Set, _bOut.ToArray()); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSetGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSetGenerator.cs.meta new file mode 100644 index 000000000..cbe6ff02a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSetGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1f54b39d3b0bb24a932046d612bdac3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSetParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSetParser.cs new file mode 100644 index 000000000..43be31b3e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSetParser.cs @@ -0,0 +1,30 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + // TODO[asn1] Should be renamed/replaced with DLSetParser + public class DerSetParser + : Asn1SetParser + { + private readonly Asn1StreamParser m_parser; + + internal DerSetParser(Asn1StreamParser parser) + { + this.m_parser = parser; + } + + public IAsn1Convertible ReadObject() + { + return m_parser.ReadObject(); + } + + public Asn1Object ToAsn1Object() + { + return DLSet.FromVector(m_parser.ReadVector()); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSetParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSetParser.cs.meta new file mode 100644 index 000000000..554a6dd9b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DERSetParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e88a6ff513bc2d0438d22d47ace8fe6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLBitString.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLBitString.cs new file mode 100644 index 000000000..72b9976b6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLBitString.cs @@ -0,0 +1,59 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /// A Definite length BIT STRING + public class DLBitString + : DerBitString + { + public DLBitString(byte data, int padBits) + : base(data, padBits) + { + } + + public DLBitString(byte[] data) + : this(data, 0) + { + } + + public DLBitString(byte[] data, int padBits) + : base(data, padBits) + { + } + + public DLBitString(int namedBits) + : base(namedBits) + { + } + + public DLBitString(Asn1Encodable obj) + : this(obj.GetDerEncoded(), 0) + { + } + + internal DLBitString(byte[] contents, bool check) + : base(contents, check) + { + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + if (Asn1OutputStream.EncodingDer == encoding) + return base.GetEncoding(encoding); + + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.BitString, contents); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + if (Asn1OutputStream.EncodingDer == encoding) + return base.GetEncodingImplicit(encoding, tagClass, tagNo); + + return new PrimitiveEncoding(tagClass, tagNo, contents); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLBitString.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLBitString.cs.meta new file mode 100644 index 000000000..7c67064e9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLBitString.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 986e474ccac71c949b5a6f940fe786c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLBitStringParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLBitStringParser.cs new file mode 100644 index 000000000..2837642d6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLBitStringParser.cs @@ -0,0 +1,69 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /// Parser for a DL encoded BIT STRING. + internal class DLBitStringParser + : Asn1BitStringParser + { + private readonly DefiniteLengthInputStream m_stream; + private int m_padBits = 0; + + internal DLBitStringParser(DefiniteLengthInputStream stream) + { + m_stream = stream; + } + + public Stream GetBitStream() + { + return GetBitStream(false); + } + + public Stream GetOctetStream() + { + return GetBitStream(true); + } + + public int PadBits + { + get { return m_padBits; } + } + + public Asn1Object ToAsn1Object() + { + try + { + return DerBitString.CreatePrimitive(m_stream.ToArray()); + } + catch (IOException e) + { + throw new Asn1ParsingException("IOException converting stream to byte array: " + e.Message, e); + } + } + + private Stream GetBitStream(bool octetAligned) + { + int length = m_stream.Remaining; + if (length < 1) + throw new InvalidOperationException("content octets cannot be empty"); + + m_padBits = m_stream.ReadByte(); + if (m_padBits > 0) + { + if (length < 2) + throw new InvalidOperationException("zero length data with non-zero pad bits"); + if (m_padBits > 7) + throw new InvalidOperationException("pad bits cannot be greater than 7 or less than 0"); + if (octetAligned) + throw new IOException("expected octet-aligned bitstring, but found padBits: " + m_padBits); + } + + return m_stream; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLBitStringParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLBitStringParser.cs.meta new file mode 100644 index 000000000..2bca0984f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLBitStringParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24a951851976cf046ad8b7ea513aaef3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLSequence.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLSequence.cs new file mode 100644 index 000000000..0cce03bef --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLSequence.cs @@ -0,0 +1,95 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal class DLSequence + : DerSequence + { + internal static new readonly DLSequence Empty = new DLSequence(); + + internal static new DLSequence FromVector(Asn1EncodableVector elementVector) + { + return elementVector.Count < 1 ? Empty : new DLSequence(elementVector); + } + + /** + * create an empty sequence + */ + internal DLSequence() + : base() + { + } + + /** + * create a sequence containing one object + */ + internal DLSequence(Asn1Encodable element) + : base(element) + { + } + + /** + * create a sequence containing two objects + */ + public DLSequence(Asn1Encodable element1, Asn1Encodable element2) + : base(element1, element2) + { + } + + internal DLSequence(params Asn1Encodable[] elements) + : base(elements) + { + } + + /** + * create a sequence containing a vector of objects. + */ + internal DLSequence(Asn1EncodableVector elementVector) + : base(elementVector) + { + } + + internal DLSequence(Asn1Encodable[] elements, bool clone) + : base(elements, clone) + { + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + if (Asn1OutputStream.EncodingDer == encoding) + return base.GetEncoding(encoding); + + return new ConstructedDLEncoding(Asn1Tags.Universal, Asn1Tags.Sequence, + Asn1OutputStream.GetContentsEncodings(encoding, elements)); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + if (Asn1OutputStream.EncodingDer == encoding) + return base.GetEncodingImplicit(encoding, tagClass, tagNo); + + return new ConstructedDLEncoding(tagClass, tagNo, + Asn1OutputStream.GetContentsEncodings(encoding, elements)); + } + + internal override DerBitString ToAsn1BitString() + { + return new DLBitString(BerBitString.FlattenBitStrings(GetConstructedBitStrings()), false); + } + + // TODO[asn1] DLExternal + //internal override DerExternal ToAsn1External() + //{ + // return new DLExternal(this); + //} + + internal override Asn1Set ToAsn1Set() + { + return new DLSet(false, elements); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLSequence.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLSequence.cs.meta new file mode 100644 index 000000000..1d263ac57 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLSequence.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 821aa4f8eba1f69488486a017ab09680 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLSet.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLSet.cs new file mode 100644 index 000000000..fd1e8406f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLSet.cs @@ -0,0 +1,71 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal class DLSet + : DerSet + { + internal static new readonly DLSet Empty = new DLSet(); + + internal static new DLSet FromVector(Asn1EncodableVector elementVector) + { + return elementVector.Count < 1 ? Empty : new DLSet(elementVector); + } + + /** + * create an empty set + */ + internal DLSet() + : base() + { + } + + /** + * create a set containing one object + */ + internal DLSet(Asn1Encodable element) + : base(element) + { + } + + internal DLSet(params Asn1Encodable[] elements) + : base(elements, false) + { + } + + /** + * create a set containing a vector of objects. + */ + internal DLSet(Asn1EncodableVector elementVector) + : base(elementVector, false) + { + } + + internal DLSet(bool isSorted, Asn1Encodable[] elements) + : base(isSorted, elements) + { + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + if (Asn1OutputStream.EncodingDer == encoding) + return base.GetEncoding(encoding); + + return new ConstructedDLEncoding(Asn1Tags.Universal, Asn1Tags.Set, + Asn1OutputStream.GetContentsEncodings(encoding, elements)); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + if (Asn1OutputStream.EncodingDer == encoding) + return base.GetEncodingImplicit(encoding, tagClass, tagNo); + + return new ConstructedDLEncoding(tagClass, tagNo, + Asn1OutputStream.GetContentsEncodings(encoding, elements)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLSet.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLSet.cs.meta new file mode 100644 index 000000000..f4755c8dd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLSet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6524089898db35644b2343ee5c380e6b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLTaggedObject.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLTaggedObject.cs new file mode 100644 index 000000000..55de758ac --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLTaggedObject.cs @@ -0,0 +1,79 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal class DLTaggedObject + : DerTaggedObject + { + internal DLTaggedObject(int tagNo, Asn1Encodable obj) + : base(tagNo, obj) + { + } + + internal DLTaggedObject(int tagClass, int tagNo, Asn1Encodable obj) + : base(tagClass, tagNo, obj) + { + } + + internal DLTaggedObject(bool isExplicit, int tagNo, Asn1Encodable obj) + : base(isExplicit, tagNo, obj) + { + } + + internal DLTaggedObject(bool isExplicit, int tagClass, int tagNo, Asn1Encodable obj) + : base(isExplicit, tagClass, tagNo, obj) + { + } + + internal DLTaggedObject(int explicitness, int tagClass, int tagNo, Asn1Encodable obj) + : base(explicitness, tagClass, tagNo, obj) + { + } + + internal override string Asn1Encoding + { + // TODO[asn1] Use DL encoding when supported + get { return Ber; } + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + if (Asn1OutputStream.EncodingDer == encoding) + return base.GetEncoding(encoding); + + Asn1Object baseObject = GetBaseObject().ToAsn1Object(); + + if (!IsExplicit()) + return baseObject.GetEncodingImplicit(encoding, TagClass, TagNo); + + return new ConstructedDLEncoding(TagClass, TagNo, new IAsn1Encoding[]{ baseObject.GetEncoding(encoding) }); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + if (Asn1OutputStream.EncodingDer == encoding) + return base.GetEncodingImplicit(encoding, tagClass, tagNo); + + Asn1Object baseObject = GetBaseObject().ToAsn1Object(); + + if (!IsExplicit()) + return baseObject.GetEncodingImplicit(encoding, tagClass, tagNo); + + return new ConstructedDLEncoding(tagClass, tagNo, new IAsn1Encoding[]{ baseObject.GetEncoding(encoding) }); + } + + internal override Asn1Sequence RebuildConstructed(Asn1Object asn1Object) + { + return new DLSequence(asn1Object); + } + + internal override Asn1TaggedObject ReplaceTag(int tagClass, int tagNo) + { + return new DLTaggedObject(explicitness, tagClass, tagNo, obj); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLTaggedObject.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLTaggedObject.cs.meta new file mode 100644 index 000000000..51a0f4df6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLTaggedObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd68f6d88a9b2c1418c72e64c599ce93 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLTaggedObjectParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLTaggedObjectParser.cs new file mode 100644 index 000000000..4365e8ff4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLTaggedObjectParser.cs @@ -0,0 +1,78 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * Parser for definite-length tagged objects. + */ + internal class DLTaggedObjectParser + : BerTaggedObjectParser + { + private readonly bool m_constructed; + + internal DLTaggedObjectParser(int tagClass, int tagNo, bool constructed, Asn1StreamParser parser) + : base(tagClass, tagNo, parser) + { + m_constructed = constructed; + } + + public override bool IsConstructed + { + get { return m_constructed; } + } + + public override IAsn1Convertible ParseBaseUniversal(bool declaredExplicit, int baseTagNo) + { + if (declaredExplicit) + { + if (!m_constructed) + throw new IOException("Explicit tags must be constructed (see X.690 8.14.2)"); + + return m_parser.ParseObject(baseTagNo); + } + + return m_constructed + ? m_parser.ParseImplicitConstructedDL(baseTagNo) + : m_parser.ParseImplicitPrimitive(baseTagNo); + } + + public override IAsn1Convertible ParseExplicitBaseObject() + { + if (!m_constructed) + throw new IOException("Explicit tags must be constructed (see X.690 8.14.2)"); + + return m_parser.ReadObject(); + } + + public override Asn1TaggedObjectParser ParseExplicitBaseTagged() + { + if (!m_constructed) + throw new IOException("Explicit tags must be constructed (see X.690 8.14.2)"); + + return m_parser.ParseTaggedObject(); + } + + public override Asn1TaggedObjectParser ParseImplicitBaseTagged(int baseTagClass, int baseTagNo) + { + return new DLTaggedObjectParser(baseTagClass, baseTagNo, m_constructed, m_parser); + } + + public override Asn1Object ToAsn1Object() + { + try + { + return m_parser.LoadTaggedDL(TagClass, TagNo, m_constructed); + } + catch (IOException e) + { + throw new Asn1ParsingException(e.Message); + } + } + } +} + +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLTaggedObjectParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLTaggedObjectParser.cs.meta new file mode 100644 index 000000000..83d548bdf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DLTaggedObjectParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5e1d9345964a51d4ca58f102e52dc9b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DefiniteLengthInputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DefiniteLengthInputStream.cs new file mode 100644 index 000000000..115da9dcb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DefiniteLengthInputStream.cs @@ -0,0 +1,142 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + class DefiniteLengthInputStream + : LimitedInputStream + { + private static readonly byte[] EmptyBytes = new byte[0]; + + private readonly int _originalLength; + private int _remaining; + + internal DefiniteLengthInputStream(Stream inStream, int length, int limit) + : base(inStream, limit) + { + if (length <= 0) + { + if (length < 0) + throw new ArgumentException("negative lengths not allowed", "length"); + + SetParentEofDetect(); + } + + this._originalLength = length; + this._remaining = length; + } + + internal int Remaining + { + get { return _remaining; } + } + + public override int ReadByte() + { + if (_remaining < 2) + { + if (_remaining == 0) + return -1; + + int b = _in.ReadByte(); + if (b < 0) + throw new EndOfStreamException("DEF length " + _originalLength + " object truncated by " + _remaining); + + _remaining = 0; + SetParentEofDetect(); + + return b; + } + else + { + int b = _in.ReadByte(); + if (b < 0) + throw new EndOfStreamException("DEF length " + _originalLength + " object truncated by " + _remaining); + + --_remaining; + return b; + } + } + + public override int Read(byte[] buf, int off, int len) + { + if (_remaining == 0) + return 0; + + int toRead = System.Math.Min(len, _remaining); + int numRead = _in.Read(buf, off, toRead); + + if (numRead < 1) + throw new EndOfStreamException("DEF length " + _originalLength + " object truncated by " + _remaining); + + if ((_remaining -= numRead) == 0) + { + SetParentEofDetect(); + } + + return numRead; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int Read(Span buffer) + { + if (_remaining == 0) + return 0; + + int toRead = System.Math.Min(buffer.Length, _remaining); + int numRead = _in.Read(buffer[..toRead]); + + if (numRead < 1) + throw new EndOfStreamException("DEF length " + _originalLength + " object truncated by " + _remaining); + + if ((_remaining -= numRead) == 0) + { + SetParentEofDetect(); + } + + return numRead; + } +#endif + + internal void ReadAllIntoByteArray(byte[] buf) + { + if (_remaining != buf.Length) + throw new ArgumentException("buffer length not right for data"); + + if (_remaining == 0) + return; + + // make sure it's safe to do this! + int limit = Limit; + if (_remaining >= limit) + throw new IOException("corrupted stream - out of bounds length found: " + _remaining + " >= " + limit); + + if ((_remaining -= Streams.ReadFully(_in, buf, 0, buf.Length)) != 0) + throw new EndOfStreamException("DEF length " + _originalLength + " object truncated by " + _remaining); + SetParentEofDetect(); + } + + internal byte[] ToArray() + { + if (_remaining == 0) + return EmptyBytes; + + // make sure it's safe to do this! + int limit = Limit; + if (_remaining >= limit) + throw new IOException("corrupted stream - out of bounds length found: " + _remaining + " >= " + limit); + + byte[] bytes = new byte[_remaining]; + if ((_remaining -= Streams.ReadFully(_in, bytes, 0, bytes.Length)) != 0) + throw new EndOfStreamException("DEF length " + _originalLength + " object truncated by " + _remaining); + SetParentEofDetect(); + return bytes; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DefiniteLengthInputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DefiniteLengthInputStream.cs.meta new file mode 100644 index 000000000..cbb40d493 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DefiniteLengthInputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 062975b128b005345a6d1502412231dd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerApplicationSpecific.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerApplicationSpecific.cs new file mode 100644 index 000000000..0454b349a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerApplicationSpecific.cs @@ -0,0 +1,3 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerApplicationSpecific.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerApplicationSpecific.cs.meta new file mode 100644 index 000000000..4ea9e8466 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerApplicationSpecific.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bce8e7bbc9b4e2248b00e554b19a01c3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerBMPString.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerBMPString.cs new file mode 100644 index 000000000..1924a5048 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerBMPString.cs @@ -0,0 +1,170 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * Der BMPString object. + */ + public class DerBmpString + : DerStringBase + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(DerBmpString), Asn1Tags.BmpString) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets()); + } + } + + /** + * return a BMP string from the given object. + * + * @param obj the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static DerBmpString GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is DerBmpString derBmpString) + return derBmpString; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is DerBmpString converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (DerBmpString)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct BMP string from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + /** + * return a BMP string from a tagged object. + * + * @param taggedObject the tagged object holding the object we want + * @param declaredExplicit true if the object is meant to be explicitly tagged false otherwise. + * @exception ArgumentException if the tagged object cannot be converted. + */ + public static DerBmpString GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (DerBmpString)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + private readonly string m_str; + + internal DerBmpString(byte[] contents) + { + if (null == contents) + throw new ArgumentNullException("contents"); + + int byteLen = contents.Length; + if (0 != (byteLen & 1)) + throw new ArgumentException("malformed BMPString encoding encountered", "contents"); + + int charLen = byteLen / 2; + char[] cs = new char[charLen]; + + for (int i = 0; i != charLen; i++) + { + cs[i] = (char)((contents[2 * i] << 8) | (contents[2 * i + 1] & 0xff)); + } + + m_str = new string(cs); + } + + internal DerBmpString(char[] str) + { + if (str == null) + throw new ArgumentNullException("str"); + + m_str = new string(str); + } + + /** + * basic constructor + */ + public DerBmpString(string str) + { + if (str == null) + throw new ArgumentNullException("str"); + + m_str = str; + } + + public override string GetString() + { + return m_str; + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + DerBmpString that = asn1Object as DerBmpString; + return null != that + && this.m_str.Equals(that.m_str); + } + + protected override int Asn1GetHashCode() + { + return m_str.GetHashCode(); + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.BmpString, GetContents()); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, GetContents()); + } + + private byte[] GetContents() + { + char[] c = m_str.ToCharArray(); + byte[] b = new byte[c.Length * 2]; + + for (int i = 0; i != c.Length; i++) + { + b[2 * i] = (byte)(c[i] >> 8); + b[2 * i + 1] = (byte)c[i]; + } + + return b; + } + + internal static DerBmpString CreatePrimitive(byte[] contents) + { + return new DerBmpString(contents); + } + + internal static DerBmpString CreatePrimitive(char[] str) + { + // TODO[asn1] Asn1InputStream has a validator/converter that should be unified in this class somehow + return new DerBmpString(str); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerBMPString.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerBMPString.cs.meta new file mode 100644 index 000000000..c094578e7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerBMPString.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1237842c248008f47ae09b2fc3d95cb2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerBitString.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerBitString.cs new file mode 100644 index 000000000..9313cc960 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerBitString.cs @@ -0,0 +1,373 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +using System.IO; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class DerBitString + : DerStringBase, Asn1BitStringParser + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(DerBitString), Asn1Tags.BitString) { } + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets()); + } + + internal override Asn1Object FromImplicitConstructed(Asn1Sequence sequence) + { + return sequence.ToAsn1BitString(); + } + } + + private static readonly char[] table + = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + + /** + * return a Bit string from the passed in object + * + * @exception ArgumentException if the object cannot be converted. + */ + public static DerBitString GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is DerBitString derBitString) + return derBitString; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is DerBitString converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return GetInstance(FromByteArray(bytes)); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct BIT STRING from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + /** + * return a Bit string from a tagged object. + * + * @param obj the tagged object holding the object we want + * @param explicitly true if the object is meant to be explicitly + * tagged false otherwise. + * @exception ArgumentException if the tagged object cannot + * be converted. + */ + public static DerBitString GetInstance(Asn1TaggedObject obj, bool isExplicit) + { + Asn1Object o = obj.GetObject(); + + if (isExplicit || o is DerBitString) + { + return GetInstance(o); + } + + // Not copied because assumed to be a tagged implicit primitive from the parser + return CreatePrimitive(((Asn1OctetString)o).GetOctets()); + } + + internal readonly byte[] contents; + + public DerBitString(byte data, int padBits) + { + if (padBits > 7 || padBits < 0) + throw new ArgumentException("pad bits cannot be greater than 7 or less than 0", "padBits"); + + this.contents = new byte[] { (byte)padBits, data }; + } + + public DerBitString(byte[] data) + : this(data, 0) + { + } + + /** + * @param data the octets making up the bit string. + * @param padBits the number of extra bits at the end of the string. + */ + public DerBitString(byte[] data, int padBits) + { + if (data == null) + throw new ArgumentNullException("data"); + if (padBits < 0 || padBits > 7) + throw new ArgumentException("must be in the range 0 to 7", "padBits"); + if (data.Length == 0 && padBits != 0) + throw new ArgumentException("if 'data' is empty, 'padBits' must be 0"); + + this.contents = Arrays.Prepend(data, (byte)padBits); + } + + public DerBitString(int namedBits) + { + if (namedBits == 0) + { + this.contents = new byte[]{ 0 }; + return; + } + + int bits = 32 - Integers.NumberOfLeadingZeros(namedBits); + int bytes = (bits + 7) / 8; + Debug.Assert(0 < bytes && bytes <= 4); + + byte[] data = new byte[1 + bytes]; + + for (int i = 1; i < bytes; i++) + { + data[i] = (byte)namedBits; + namedBits >>= 8; + } + + Debug.Assert((namedBits & 0xFF) != 0); + data[bytes] = (byte)namedBits; + + int padBits = 0; + while ((namedBits & (1 << padBits)) == 0) + { + ++padBits; + } + + Debug.Assert(padBits < 8); + data[0] = (byte)padBits; + + this.contents = data; + } + + public DerBitString(Asn1Encodable obj) + : this(obj.GetDerEncoded()) + { + } + + internal DerBitString(byte[] contents, bool check) + { + if (check) + { + if (null == contents) + throw new ArgumentNullException("contents"); + if (contents.Length < 1) + throw new ArgumentException("cannot be empty", "contents"); + + int padBits = contents[0]; + if (padBits > 0) + { + if (contents.Length < 2) + throw new ArgumentException("zero length data with non-zero pad bits", "contents"); + if (padBits > 7) + throw new ArgumentException("pad bits cannot be greater than 7 or less than 0", "contents"); + } + } + + this.contents = contents; + } + + /** + * Return the octets contained in this BIT STRING, checking that this BIT STRING really + * does represent an octet aligned string. Only use this method when the standard you are + * following dictates that the BIT STRING will be octet aligned. + * + * @return a copy of the octet aligned data. + */ + public virtual byte[] GetOctets() + { + if (contents[0] != 0) + throw new InvalidOperationException("attempt to get non-octet aligned data from BIT STRING"); + + return Arrays.CopyOfRange(contents, 1, contents.Length); + } + + public virtual byte[] GetBytes() + { + if (contents.Length == 1) + return Asn1OctetString.EmptyOctets; + + int padBits = contents[0]; + byte[] rv = Arrays.CopyOfRange(contents, 1, contents.Length); + // DER requires pad bits be zero + rv[rv.Length - 1] &= (byte)(0xFF << padBits); + return rv; + } + + public virtual int PadBits + { + get { return contents[0]; } + } + + /** + * @return the value of the bit string as an int (truncating if necessary) + */ + public virtual int IntValue + { + get + { + int value = 0, end = System.Math.Min(5, contents.Length - 1); + for (int i = 1; i < end; ++i) + { + value |= (int)contents[i] << (8 * (i - 1)); + } + if (1 <= end && end < 5) + { + int padBits = contents[0]; + byte der = (byte)(contents[end] & (0xFF << padBits)); + value |= (int)der << (8 * (end - 1)); + } + return value; + } + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + int padBits = contents[0]; + if (padBits != 0) + { + int last = contents.Length - 1; + byte lastBer = contents[last]; + byte lastDer = (byte)(lastBer & (0xFF << padBits)); + + if (lastBer != lastDer) + return new PrimitiveEncodingSuffixed(Asn1Tags.Universal, Asn1Tags.BitString, contents, lastDer); + } + + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.BitString, contents); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + int padBits = contents[0]; + if (padBits != 0) + { + int last = contents.Length - 1; + byte lastBer = contents[last]; + byte lastDer = (byte)(lastBer & (0xFF << padBits)); + + if (lastBer != lastDer) + return new PrimitiveEncodingSuffixed(tagClass, tagNo, contents, lastDer); + } + + return new PrimitiveEncoding(tagClass, tagNo, contents); + } + + protected override int Asn1GetHashCode() + { + if (contents.Length < 2) + return 1; + + int padBits = contents[0]; + int last = contents.Length - 1; + + byte lastDer = (byte)(contents[last] & (0xFF << padBits)); + + int hc = Arrays.GetHashCode(contents, 0, last); + hc *= 257; + hc ^= lastDer; + return hc; + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + DerBitString that = asn1Object as DerBitString; + if (null == that) + return false; + + byte[] thisContents = this.contents, thatContents = that.contents; + + int length = thisContents.Length; + if (thatContents.Length != length) + return false; + if (length == 1) + return true; + + int last = length - 1; + for (int i = 0; i < last; ++i) + { + if (thisContents[i] != thatContents[i]) + return false; + } + + int padBits = thisContents[0]; + byte thisLastDer = (byte)(thisContents[last] & (0xFF << padBits)); + byte thatLastDer = (byte)(thatContents[last] & (0xFF << padBits)); + + return thisLastDer == thatLastDer; + } + + public Stream GetBitStream() + { + return new MemoryStream(contents, 1, contents.Length - 1, false); + } + + public Stream GetOctetStream() + { + int padBits = contents[0] & 0xFF; + if (0 != padBits) + throw new IOException("expected octet-aligned bitstring, but found padBits: " + padBits); + + return GetBitStream(); + } + + public Asn1BitStringParser Parser + { + get { return this; } + } + + public override string GetString() + { + byte[] str = GetDerEncoded(); + + StringBuilder buffer = PlatformSupport.Text.StringBuilderPool.Get(1 + str.Length * 2); //new StringBuilder(1 + str.Length * 2); + buffer.Append('#'); + + for (int i = 0; i != str.Length; i++) + { + uint u8 = str[i]; + buffer.Append(table[u8 >> 4]); + buffer.Append(table[u8 & 0xF]); + } + + return PlatformSupport.Text.StringBuilderPool.ReleaseAndGrab(buffer); + } + + internal static DerBitString CreatePrimitive(byte[] contents) + { + int length = contents.Length; + if (length < 1) + throw new ArgumentException("truncated BIT STRING detected", "contents"); + + int padBits = contents[0]; + if (padBits > 0) + { + if (padBits > 7 || length < 2) + throw new ArgumentException("invalid pad bits detected", "contents"); + + byte finalOctet = contents[length - 1]; + if (finalOctet != (byte)(finalOctet & (0xFF << padBits))) + return new DLBitString(contents, false); + } + + return new DerBitString(contents, false); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerBitString.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerBitString.cs.meta new file mode 100644 index 000000000..610a4e6b0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerBitString.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3267bb6b435ba4a4a90fa383aa2c3bde +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerBoolean.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerBoolean.cs new file mode 100644 index 000000000..5da77ef34 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerBoolean.cs @@ -0,0 +1,161 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class DerBoolean + : Asn1Object + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(DerBoolean), Asn1Tags.Boolean) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets()); + } + } + + public static readonly DerBoolean False = new DerBoolean(false); + public static readonly DerBoolean True = new DerBoolean(true); + + /** + * return a bool from the passed in object. + * + * @exception ArgumentException if the object cannot be converted. + */ + public static DerBoolean GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is DerBoolean derBoolean) + return derBoolean; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is DerBoolean converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (DerBoolean)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct boolean from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public static DerBoolean GetInstance(bool value) + { + return value ? True : False; + } + + public static DerBoolean GetInstance(int value) + { + return value != 0 ? True : False; + } + + /** + * return a Boolean from a tagged object. + * + * @param taggedObject the tagged object holding the object we want + * @param declaredExplicit true if the object is meant to be explicitly tagged false otherwise. + * @exception ArgumentException if the tagged object cannot be converted. + */ + public static DerBoolean GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (DerBoolean)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + private readonly byte value; + + public DerBoolean( + byte[] val) + { + if (val.Length != 1) + throw new ArgumentException("byte value should have 1 byte in it", "val"); + + // TODO Are there any constraints on the possible byte values? + this.value = val[0]; + } + + private DerBoolean( + bool value) + { + this.value = value ? (byte)0xff : (byte)0; + } + + public bool IsTrue + { + get { return value != 0; } + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.Boolean, GetContents(encoding)); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, GetContents(encoding)); + } + + protected override bool Asn1Equals( + Asn1Object asn1Object) + { + DerBoolean other = asn1Object as DerBoolean; + + if (other == null) + return false; + + return IsTrue == other.IsTrue; + } + + protected override int Asn1GetHashCode() + { + return IsTrue.GetHashCode(); + } + + public override string ToString() + { + return IsTrue ? "TRUE" : "FALSE"; + } + + internal static DerBoolean CreatePrimitive(byte[] contents) + { + if (contents.Length != 1) + throw new ArgumentException("BOOLEAN value should have 1 byte in it", "contents"); + + byte b = contents[0]; + + return b == 0 ? False : b == 0xFF ? True : new DerBoolean(contents); + } + + private byte[] GetContents(int encoding) + { + byte contents = value; + if (Asn1OutputStream.EncodingDer == encoding && IsTrue) + { + contents = 0xFF; + } + + return new byte[]{ contents }; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerBoolean.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerBoolean.cs.meta new file mode 100644 index 000000000..c6ac43768 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerBoolean.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 720c28a719a95734a88eab4e5bfce644 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerEnumerated.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerEnumerated.cs new file mode 100644 index 000000000..bbaade95b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerEnumerated.cs @@ -0,0 +1,196 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class DerEnumerated + : Asn1Object + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(DerEnumerated), Asn1Tags.Enumerated) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets(), false); + } + } + + /** + * return an integer from the passed in object + * + * @exception ArgumentException if the object cannot be converted. + */ + public static DerEnumerated GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is DerEnumerated derEnumerated) + return derEnumerated; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is DerEnumerated converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (DerEnumerated)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct enumerated from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + /** + * return an Enumerated from a tagged object. + * + * @param taggedObject the tagged object holding the object we want + * @param declaredExplicit true if the object is meant to be explicitly tagged false otherwise. + * @exception ArgumentException if the tagged object cannot be converted. + */ + public static DerEnumerated GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (DerEnumerated)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + private readonly byte[] contents; + private readonly int start; + + public DerEnumerated(int val) + { + if (val < 0) + throw new ArgumentException("enumerated must be non-negative", "val"); + + this.contents = BigInteger.ValueOf(val).ToByteArray(); + this.start = 0; + } + + public DerEnumerated(long val) + { + if (val < 0L) + throw new ArgumentException("enumerated must be non-negative", "val"); + + this.contents = BigInteger.ValueOf(val).ToByteArray(); + this.start = 0; + } + + public DerEnumerated(BigInteger val) + { + if (val.SignValue < 0) + throw new ArgumentException("enumerated must be non-negative", "val"); + + this.contents = val.ToByteArray(); + this.start = 0; + } + + public DerEnumerated(byte[] contents) + : this(contents, true) + { + } + + internal DerEnumerated(byte[] contents, bool clone) + { + if (DerInteger.IsMalformed(contents)) + throw new ArgumentException("malformed enumerated", "contents"); + if (0 != (contents[0] & 0x80)) + throw new ArgumentException("enumerated must be non-negative", "contents"); + + this.contents = clone ? Arrays.Clone(contents) : contents; + this.start = DerInteger.SignBytesToSkip(this.contents); + } + + public BigInteger Value + { + get { return new BigInteger(contents); } + } + + public bool HasValue(int x) + { + return (contents.Length - start) <= 4 + && DerInteger.IntValue(contents, start, DerInteger.SignExtSigned) == x; + } + + public bool HasValue(BigInteger x) + { + return null != x + // Fast check to avoid allocation + && DerInteger.IntValue(contents, start, DerInteger.SignExtSigned) == x.IntValue + && Value.Equals(x); + } + + public int IntValueExact + { + get + { + int count = contents.Length - start; + if (count > 4) + throw new ArithmeticException("ASN.1 Enumerated out of int range"); + + return DerInteger.IntValue(contents, start, DerInteger.SignExtSigned); + } + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.Enumerated, contents); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, contents); + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + DerEnumerated other = asn1Object as DerEnumerated; + if (other == null) + return false; + + return Arrays.AreEqual(this.contents, other.contents); + } + + protected override int Asn1GetHashCode() + { + return Arrays.GetHashCode(contents); + } + + private static readonly DerEnumerated[] cache = new DerEnumerated[12]; + + internal static DerEnumerated CreatePrimitive(byte[] contents, bool clone) + { + if (contents.Length > 1) + return new DerEnumerated(contents, clone); + if (contents.Length == 0) + throw new ArgumentException("ENUMERATED has zero length", "contents"); + + int value = contents[0]; + if (value >= cache.Length) + return new DerEnumerated(contents, clone); + + DerEnumerated possibleMatch = cache[value]; + if (possibleMatch == null) + { + cache[value] = possibleMatch = new DerEnumerated(contents, clone); + } + return possibleMatch; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerEnumerated.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerEnumerated.cs.meta new file mode 100644 index 000000000..e6cd2a40f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerEnumerated.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 061d704d9da7baf4a98aaad06e96b37c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerGeneralString.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerGeneralString.cs new file mode 100644 index 000000000..f302ab504 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerGeneralString.cs @@ -0,0 +1,121 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class DerGeneralString + : DerStringBase + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(DerGeneralString), Asn1Tags.GeneralString) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets()); + } + } + + public static DerGeneralString GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is DerGeneralString derGeneralString) + return derGeneralString; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is DerGeneralString converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (DerGeneralString)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct general string from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public static DerGeneralString GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (DerGeneralString)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + private readonly byte[] m_contents; + + public DerGeneralString(string str) + { + if (str == null) + throw new ArgumentNullException("str"); + + m_contents = Strings.ToAsciiByteArray(str); + } + + public DerGeneralString(byte[] contents) + : this(contents, true) + { + } + + internal DerGeneralString(byte[] contents, bool clone) + { + if (null == contents) + throw new ArgumentNullException("contents"); + + m_contents = clone ? Arrays.Clone(contents) : contents; + } + + public override string GetString() + { + return Strings.FromAsciiByteArray(m_contents); + } + + public byte[] GetOctets() + { + return Arrays.Clone(m_contents); + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.GeneralString, m_contents); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, m_contents); + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + DerGeneralString that = asn1Object as DerGeneralString; + return null != that + && Arrays.AreEqual(this.m_contents, that.m_contents); + } + + protected override int Asn1GetHashCode() + { + return Arrays.GetHashCode(m_contents); + } + + internal static DerGeneralString CreatePrimitive(byte[] contents) + { + return new DerGeneralString(contents, false); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerGeneralString.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerGeneralString.cs.meta new file mode 100644 index 000000000..2c41ef2de --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerGeneralString.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f83195af35e42dd42900ea19ea491dda +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerGeneralizedTime.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerGeneralizedTime.cs new file mode 100644 index 000000000..659c22fb6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerGeneralizedTime.cs @@ -0,0 +1,38 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class DerGeneralizedTime + : Asn1GeneralizedTime + { + public DerGeneralizedTime(string timeString) + : base(timeString) + { + } + + public DerGeneralizedTime(DateTime dateTime) + : base(dateTime) + { + } + + internal DerGeneralizedTime(byte[] contents) + : base(contents) + { + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.GeneralizedTime, + GetContents(Asn1OutputStream.EncodingDer)); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, GetContents(Asn1OutputStream.EncodingDer)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerGeneralizedTime.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerGeneralizedTime.cs.meta new file mode 100644 index 000000000..b7a2d0f03 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerGeneralizedTime.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ebcc047ba1daf04db5d2ebd9c124a28 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerGraphicString.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerGraphicString.cs new file mode 100644 index 000000000..5b2e362f9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerGraphicString.cs @@ -0,0 +1,128 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class DerGraphicString + : DerStringBase + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(DerGraphicString), Asn1Tags.GraphicString) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets()); + } + } + + /** + * return a Graphic String from the passed in object + * + * @param obj a DerGraphicString or an object that can be converted into one. + * @exception IllegalArgumentException if the object cannot be converted. + * @return a DerGraphicString instance, or null. + */ + public static DerGraphicString GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is DerGraphicString derGraphicString) + return derGraphicString; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is DerGraphicString converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (DerGraphicString)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct graphic string from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * return a Graphic String from a tagged object. + * + * @param taggedObject the tagged object holding the object we want + * @param declaredExplicit true if the object is meant to be explicitly tagged false otherwise. + * @exception IllegalArgumentException if the tagged object cannot be converted. + * @return a DerGraphicString instance, or null. + */ + public static DerGraphicString GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (DerGraphicString)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + private readonly byte[] m_contents; + + public DerGraphicString(byte[] contents) + : this(contents, true) + { + } + + internal DerGraphicString(byte[] contents, bool clone) + { + if (null == contents) + throw new ArgumentNullException("contents"); + + this.m_contents = clone ? Arrays.Clone(contents) : contents; + } + + public override string GetString() + { + return Strings.FromByteArray(m_contents); + } + + public byte[] GetOctets() + { + return Arrays.Clone(m_contents); + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.GraphicString, m_contents); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, m_contents); + } + + protected override int Asn1GetHashCode() + { + return Arrays.GetHashCode(m_contents); + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + DerGraphicString that = asn1Object as DerGraphicString; + return null != that + && Arrays.AreEqual(this.m_contents, that.m_contents); + } + + internal static DerGraphicString CreatePrimitive(byte[] contents) + { + return new DerGraphicString(contents, false); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerGraphicString.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerGraphicString.cs.meta new file mode 100644 index 000000000..80a2f5ce8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerGraphicString.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f18e39588618e334c961eec4c763ef13 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerIA5String.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerIA5String.cs new file mode 100644 index 000000000..79498959d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerIA5String.cs @@ -0,0 +1,168 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * IA5String object - this is an Ascii string. + */ + public class DerIA5String + : DerStringBase + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(DerIA5String), Asn1Tags.IA5String) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets()); + } + } + + /** + * return an IA5 string from the passed in object + * + * @exception ArgumentException if the object cannot be converted. + */ + public static DerIA5String GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is DerIA5String derIA5String) + return derIA5String; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is DerIA5String converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (DerIA5String)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct IA5 string from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + /** + * return an IA5 string from a tagged object. + * + * @param taggedObject the tagged object holding the object we want + * @param declaredExplicit true if the object is meant to be explicitly tagged false otherwise. + * @exception ArgumentException if the tagged object cannot be converted. + */ + public static DerIA5String GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (DerIA5String)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + private readonly byte[] m_contents; + + public DerIA5String(string str) + : this(str, false) + { + } + + /** + * Constructor with optional validation. + * + * @param string the base string to wrap. + * @param validate whether or not to check the string. + * @throws ArgumentException if validate is true and the string + * contains characters that should not be in an IA5String. + */ + public DerIA5String(string str, bool validate) + { + if (str == null) + throw new ArgumentNullException("str"); + if (validate && !IsIA5String(str)) + throw new ArgumentException("string contains illegal characters", "str"); + + m_contents = Strings.ToAsciiByteArray(str); + } + + public DerIA5String(byte[] contents) + : this(contents, true) + { + } + + internal DerIA5String(byte[] contents, bool clone) + { + if (null == contents) + throw new ArgumentNullException("contents"); + + m_contents = clone ? Arrays.Clone(contents) : contents; + } + + public override string GetString() + { + return Strings.FromAsciiByteArray(m_contents); + } + + public byte[] GetOctets() + { + return Arrays.Clone(m_contents); + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.IA5String, m_contents); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, m_contents); + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + DerIA5String that = asn1Object as DerIA5String; + return null != that + && Arrays.AreEqual(this.m_contents, that.m_contents); + } + + protected override int Asn1GetHashCode() + { + return Arrays.GetHashCode(m_contents); + } + + /** + * return true if the passed in String can be represented without + * loss as an IA5String, false otherwise. + * + * @return true if in printable set, false otherwise. + */ + public static bool IsIA5String(string str) + { + foreach (char ch in str) + { + if (ch > 0x007f) + return false; + } + + return true; + } + + internal static DerIA5String CreatePrimitive(byte[] contents) + { + return new DerIA5String(contents, false); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerIA5String.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerIA5String.cs.meta new file mode 100644 index 000000000..286717d92 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerIA5String.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 92ba1c46247b34d4b83218ac4a011b9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerInteger.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerInteger.cs new file mode 100644 index 000000000..621bb1630 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerInteger.cs @@ -0,0 +1,283 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class DerInteger + : Asn1Object + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(DerInteger), Asn1Tags.Integer) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets()); + } + } + + public const string AllowUnsafeProperty = "BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.AllowUnsafeInteger"; + + internal static bool AllowUnsafe() + { + string allowUnsafeValue = Org.BouncyCastle.Utilities.Platform.GetEnvironmentVariable(AllowUnsafeProperty); + return allowUnsafeValue != null && Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase("true", allowUnsafeValue); + } + + internal const int SignExtSigned = -1; + internal const int SignExtUnsigned = 0xFF; + + private readonly byte[] bytes; + private readonly int start; + + /** + * return an integer from the passed in object + * + * @exception ArgumentException if the object cannot be converted. + */ + public static DerInteger GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is DerInteger derInteger) + return derInteger; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is DerInteger converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (DerInteger)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct integer from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + /** + * return an Integer from a tagged object. + * + * @param taggedObject the tagged object holding the object we want + * @param declaredExplicit true if the object is meant to be explicitly tagged false otherwise. + * @exception ArgumentException if the tagged object cannot be converted. + */ + public static DerInteger GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (DerInteger)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + public DerInteger(int value) + { + this.bytes = BigInteger.ValueOf(value).ToByteArray(); + this.start = 0; + } + + public DerInteger(long value) + { + this.bytes = BigInteger.ValueOf(value).ToByteArray(); + this.start = 0; + } + + public DerInteger(BigInteger value) + { + if (value == null) + throw new ArgumentNullException("value"); + + this.bytes = value.ToByteArray(); + this.start = 0; + } + + public DerInteger(byte[] bytes) + : this(bytes, true) + { + } + + internal DerInteger(byte[] bytes, bool clone) + { + if (IsMalformed(bytes)) + throw new ArgumentException("malformed integer", "bytes"); + + this.bytes = clone ? Arrays.Clone(bytes) : bytes; + this.start = SignBytesToSkip(bytes); + } + + /** + * in some cases positive values Get crammed into a space, + * that's not quite big enough... + */ + public BigInteger PositiveValue + { + get { return new BigInteger(1, bytes); } + } + + public BigInteger Value + { + get { return new BigInteger(bytes); } + } + + public bool HasValue(int x) + { + return (bytes.Length - start) <= 4 + && IntValue(bytes, start, SignExtSigned) == x; + } + + public bool HasValue(long x) + { + return (bytes.Length - start) <= 8 + && LongValue(bytes, start, SignExtSigned) == x; + } + + public bool HasValue(BigInteger x) + { + return null != x + // Fast check to avoid allocation + && IntValue(bytes, start, SignExtSigned) == x.IntValue + && Value.Equals(x); + } + + public int IntPositiveValueExact + { + get + { + int count = bytes.Length - start; + if (count > 4 || (count == 4 && 0 != (bytes[start] & 0x80))) + throw new ArithmeticException("ASN.1 Integer out of positive int range"); + + return IntValue(bytes, start, SignExtUnsigned); + } + } + + public int IntValueExact + { + get + { + int count = bytes.Length - start; + if (count > 4) + throw new ArithmeticException("ASN.1 Integer out of int range"); + + return IntValue(bytes, start, SignExtSigned); + } + } + + public long LongValueExact + { + get + { + int count = bytes.Length - start; + if (count > 8) + throw new ArithmeticException("ASN.1 Integer out of long range"); + + return LongValue(bytes, start, SignExtSigned); + } + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.Integer, bytes); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, bytes); + } + + protected override int Asn1GetHashCode() + { + return Arrays.GetHashCode(bytes); + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + DerInteger other = asn1Object as DerInteger; + if (other == null) + return false; + + return Arrays.AreEqual(this.bytes, other.bytes); + } + + public override string ToString() + { + return Value.ToString(); + } + + internal static DerInteger CreatePrimitive(byte[] contents) + { + return new DerInteger(contents, false); + } + + internal static int IntValue(byte[] bytes, int start, int signExt) + { + int length = bytes.Length; + int pos = System.Math.Max(start, length - 4); + + int val = (sbyte)bytes[pos] & signExt; + while (++pos < length) + { + val = (val << 8) | bytes[pos]; + } + return val; + } + + internal static long LongValue(byte[] bytes, int start, int signExt) + { + int length = bytes.Length; + int pos = System.Math.Max(start, length - 8); + + long val = (sbyte)bytes[pos] & signExt; + while (++pos < length) + { + val = (val << 8) | bytes[pos]; + } + return val; + } + + /** + * Apply the correct validation for an INTEGER primitive following the BER rules. + * + * @param bytes The raw encoding of the integer. + * @return true if the (in)put fails this validation. + */ + internal static bool IsMalformed(byte[] bytes) + { + switch (bytes.Length) + { + case 0: + return true; + case 1: + return false; + default: + return (sbyte)bytes[0] == ((sbyte)bytes[1] >> 7) && !AllowUnsafe(); + } + } + + internal static int SignBytesToSkip(byte[] bytes) + { + int pos = 0, last = bytes.Length - 1; + while (pos < last + && (sbyte)bytes[pos] == ((sbyte)bytes[pos + 1] >> 7)) + { + ++pos; + } + return pos; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerInteger.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerInteger.cs.meta new file mode 100644 index 000000000..7492aca55 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerInteger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ae09d83855723bc498fdae7631d51686 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerNull.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerNull.cs new file mode 100644 index 000000000..377ccd912 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerNull.cs @@ -0,0 +1,43 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * A Null object. + */ + public class DerNull + : Asn1Null + { + public static readonly DerNull Instance = new DerNull(); + + private static readonly byte[] ZeroBytes = new byte[0]; + + protected internal DerNull() + { + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.Null, ZeroBytes); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, ZeroBytes); + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + return asn1Object is DerNull; + } + + protected override int Asn1GetHashCode() + { + return -1; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerNull.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerNull.cs.meta new file mode 100644 index 000000000..6513dbce6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerNull.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 48eba232a4b25614c941a9adb09edc24 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerNumericString.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerNumericString.cs new file mode 100644 index 000000000..e9ad1f884 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerNumericString.cs @@ -0,0 +1,197 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * Der NumericString object - this is an ascii string of characters {0,1,2,3,4,5,6,7,8,9, }. + */ + public class DerNumericString + : DerStringBase + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(DerNumericString), Asn1Tags.NumericString) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets()); + } + } + + /** + * return a numeric string from the passed in object + * + * @exception ArgumentException if the object cannot be converted. + */ + public static DerNumericString GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is DerNumericString derNumericString) + return derNumericString; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is DerNumericString converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (DerNumericString)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct numeric string from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + /** + * return a numeric string from a tagged object. + * + * @param taggedObject the tagged object holding the object we want + * @param declaredExplicit true if the object is meant to be explicitly tagged false otherwise. + * @exception ArgumentException if the tagged object cannot be converted. + */ + public static DerNumericString GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (DerNumericString)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + private readonly byte[] m_contents; + + public DerNumericString(string str) + : this(str, false) + { + } + + /** + * Constructor with optional validation. + * + * @param string the base string to wrap. + * @param validate whether or not to check the string. + * @throws ArgumentException if validate is true and the string + * contains characters that should not be in a NumericString. + */ + public DerNumericString(string str, bool validate) + { + if (str == null) + throw new ArgumentNullException("str"); + if (validate && !IsNumericString(str)) + throw new ArgumentException("string contains illegal characters", "str"); + + m_contents = Strings.ToAsciiByteArray(str); + } + + public DerNumericString(byte[] contents) + : this(contents, true) + { + } + + internal DerNumericString(byte[] contents, bool clone) + { + if (null == contents) + throw new ArgumentNullException("contents"); + + m_contents = clone ? Arrays.Clone(contents) : contents; + } + + public override string GetString() + { + return Strings.FromAsciiByteArray(m_contents); + } + + public byte[] GetOctets() + { + return Arrays.Clone(m_contents); + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.NumericString, m_contents); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, m_contents); + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + DerNumericString that = asn1Object as DerNumericString; + return null != that + && Arrays.AreEqual(this.m_contents, that.m_contents); + } + + protected override int Asn1GetHashCode() + { + return Arrays.GetHashCode(m_contents); + } + + /** + * Return true if the string can be represented as a NumericString ('0'..'9', ' ') + * + * @param str string to validate. + * @return true if numeric, fale otherwise. + */ + public static bool IsNumericString(string str) + { + foreach (char ch in str) + { + if (ch > 0x007f || (ch != ' ' && !char.IsDigit(ch))) + return false; + } + + return true; + } + + internal static bool IsNumericString(byte[] contents) + { + for (int i = 0; i < contents.Length; ++i) + { + switch (contents[i]) + { + case 0x20: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + break; + default: + return false; + } + } + + return true; + } + + internal static DerNumericString CreatePrimitive(byte[] contents) + { + // TODO Validation - sort out exception types + //if (!IsNumericString(contents)) + + return new DerNumericString(contents, false); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerNumericString.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerNumericString.cs.meta new file mode 100644 index 000000000..3cc5a3bf6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerNumericString.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0707908aca9e6943ba955d46365d37e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerObjectIdentifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerObjectIdentifier.cs new file mode 100644 index 000000000..910179996 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerObjectIdentifier.cs @@ -0,0 +1,314 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class DerObjectIdentifier + : Asn1Object + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(DerObjectIdentifier), Asn1Tags.ObjectIdentifier) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets(), false); + } + } + + public static DerObjectIdentifier FromContents(byte[] contents) + { + return CreatePrimitive(contents, true); + } + + /** + * return an OID from the passed in object + * + * @exception ArgumentException if the object cannot be converted. + */ + public static DerObjectIdentifier GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is DerObjectIdentifier derObjectIdentifier) + return derObjectIdentifier; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is DerObjectIdentifier converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (DerObjectIdentifier)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct object identifier from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public static DerObjectIdentifier GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + /* + * TODO[asn1] This block here is for backward compatibility, but should eventually be removed. + * + * - see https://github.com/bcgit/bc-java/issues/1015 + */ + if (!declaredExplicit && !taggedObject.IsParsed()) + { + Asn1Object baseObject = taggedObject.GetObject(); + if (!(baseObject is DerObjectIdentifier)) + return FromContents(Asn1OctetString.GetInstance(baseObject).GetOctets()); + } + + return (DerObjectIdentifier)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + private const long LongLimit = (long.MaxValue >> 7) - 0x7F; + + private static readonly DerObjectIdentifier[] cache = new DerObjectIdentifier[1024]; + + private readonly string identifier; + private byte[] contents; + + public DerObjectIdentifier(string identifier) + { + if (identifier == null) + throw new ArgumentNullException("identifier"); + if (!IsValidIdentifier(identifier)) + throw new FormatException("string " + identifier + " not an OID"); + + this.identifier = identifier; + } + + private DerObjectIdentifier(DerObjectIdentifier oid, string branchID) + { + if (!Asn1RelativeOid.IsValidIdentifier(branchID, 0)) + throw new ArgumentException("string " + branchID + " not a valid OID branch", "branchID"); + + this.identifier = oid.Id + "." + branchID; + } + + private DerObjectIdentifier(byte[] contents, bool clone) + { + this.identifier = ParseContents(contents); + this.contents = clone ? Arrays.Clone(contents) : contents; + } + + public virtual DerObjectIdentifier Branch(string branchID) + { + return new DerObjectIdentifier(this, branchID); + } + + public string Id + { + get { return identifier; } + } + + /** + * Return true if this oid is an extension of the passed in branch, stem. + * @param stem the arc or branch that is a possible parent. + * @return true if the branch is on the passed in stem, false otherwise. + */ + public virtual bool On(DerObjectIdentifier stem) + { + string id = Id, stemId = stem.Id; + return id.Length > stemId.Length && id[stemId.Length] == '.' && Org.BouncyCastle.Utilities.Platform.StartsWith(id, stemId); + } + + public override string ToString() + { + return identifier; + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + DerObjectIdentifier that = asn1Object as DerObjectIdentifier; + return null != that + && this.identifier == that.identifier; + } + + protected override int Asn1GetHashCode() + { + return identifier.GetHashCode(); + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.ObjectIdentifier, GetContents()); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, GetContents()); + } + + private void DoOutput(MemoryStream bOut) + { + OidTokenizer tok = new OidTokenizer(identifier); + + string token = tok.NextToken(); + int first = int.Parse(token) * 40; + + token = tok.NextToken(); + if (token.Length <= 18) + { + Asn1RelativeOid.WriteField(bOut, first + long.Parse(token)); + } + else + { + Asn1RelativeOid.WriteField(bOut, new BigInteger(token).Add(BigInteger.ValueOf(first))); + } + + while (tok.HasMoreTokens) + { + token = tok.NextToken(); + if (token.Length <= 18) + { + Asn1RelativeOid.WriteField(bOut, long.Parse(token)); + } + else + { + Asn1RelativeOid.WriteField(bOut, new BigInteger(token)); + } + } + } + + private byte[] GetContents() + { + lock (this) + { + if (contents == null) + { + MemoryStream bOut = new MemoryStream(); + DoOutput(bOut); + contents = bOut.ToArray(); + } + + return contents; + } + } + + internal static DerObjectIdentifier CreatePrimitive(byte[] contents, bool clone) + { + int hashCode = Arrays.GetHashCode(contents); + int first = hashCode & 1023; + + lock (cache) + { + DerObjectIdentifier entry = cache[first]; + if (entry != null && Arrays.AreEqual(contents, entry.GetContents())) + { + return entry; + } + + return cache[first] = new DerObjectIdentifier(contents, clone); + } + } + + private static bool IsValidIdentifier(string identifier) + { + if (identifier.Length < 3 || identifier[1] != '.') + return false; + + char first = identifier[0]; + if (first < '0' || first > '2') + return false; + + return Asn1RelativeOid.IsValidIdentifier(identifier, 2); + } + + private static string ParseContents(byte[] contents) + { + StringBuilder objId = new StringBuilder(); + long value = 0; + BigInteger bigValue = null; + bool first = true; + + for (int i = 0; i != contents.Length; i++) + { + int b = contents[i]; + + if (value <= LongLimit) + { + value += b & 0x7F; + if ((b & 0x80) == 0) + { + if (first) + { + if (value < 40) + { + objId.Append('0'); + } + else if (value < 80) + { + objId.Append('1'); + value -= 40; + } + else + { + objId.Append('2'); + value -= 80; + } + first = false; + } + + objId.Append('.'); + objId.Append(value); + value = 0; + } + else + { + value <<= 7; + } + } + else + { + if (bigValue == null) + { + bigValue = BigInteger.ValueOf(value); + } + bigValue = bigValue.Or(BigInteger.ValueOf(b & 0x7F)); + if ((b & 0x80) == 0) + { + if (first) + { + objId.Append('2'); + bigValue = bigValue.Subtract(BigInteger.ValueOf(80)); + first = false; + } + + objId.Append('.'); + objId.Append(bigValue); + bigValue = null; + value = 0; + } + else + { + bigValue = bigValue.ShiftLeft(7); + } + } + } + + return objId.ToString(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerObjectIdentifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerObjectIdentifier.cs.meta new file mode 100644 index 000000000..d76bd72a4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerObjectIdentifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 44d9a2bc67c903f468455f944abaccfc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerOctetString.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerOctetString.cs new file mode 100644 index 000000000..741b3766d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerOctetString.cs @@ -0,0 +1,62 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class DerOctetString + : Asn1OctetString + { + /// The octets making up the octet string. + public DerOctetString(byte[] contents) + : base(contents) + { + } + + public DerOctetString(IAsn1Convertible obj) + : this(obj.ToAsn1Object()) + { + } + + public DerOctetString(Asn1Encodable obj) + : base(obj.GetEncoded(Der)) + { + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.OctetString, contents); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, contents); + } + + internal static void Encode(Asn1OutputStream asn1Out, byte[] buf, int off, int len) + { + asn1Out.WriteIdentifier(Asn1Tags.Universal, Asn1Tags.OctetString); + asn1Out.WriteDL(len); + asn1Out.Write(buf, off, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal static void Encode(Asn1OutputStream asn1Out, ReadOnlySpan buf) + { + asn1Out.WriteIdentifier(Asn1Tags.Universal, Asn1Tags.OctetString); + asn1Out.WriteDL(buf.Length); + asn1Out.Write(buf); + } + + internal static void Encode(Asn1OutputStream asn1Out, ReadOnlySpan buf1, ReadOnlySpan buf2) + { + asn1Out.WriteIdentifier(Asn1Tags.Universal, Asn1Tags.OctetString); + asn1Out.WriteDL(buf1.Length + buf2.Length); + asn1Out.Write(buf1); + asn1Out.Write(buf2); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerOctetString.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerOctetString.cs.meta new file mode 100644 index 000000000..3a2f33f64 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerOctetString.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8d4f36a04b2ccfc478c9e105de48f09f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerOutputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerOutputStream.cs new file mode 100644 index 000000000..08a531cc1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerOutputStream.cs @@ -0,0 +1,23 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal class DerOutputStream + : Asn1OutputStream + { + internal DerOutputStream(Stream os) + : base(os) + { + } + + internal override int Encoding + { + get { return EncodingDer; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerOutputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerOutputStream.cs.meta new file mode 100644 index 000000000..68f7bbb1d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerOutputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b1bb944f8dee86942a8e2fb0c5c9520c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerPrintableString.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerPrintableString.cs new file mode 100644 index 000000000..0c2ff1e95 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerPrintableString.cs @@ -0,0 +1,194 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * Der PrintableString object. + */ + public class DerPrintableString + : DerStringBase + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(DerPrintableString), Asn1Tags.PrintableString) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets()); + } + } + + /** + * return a printable string from the passed in object. + * + * @exception ArgumentException if the object cannot be converted. + */ + public static DerPrintableString GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is DerPrintableString derPrintableString) + return derPrintableString; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is DerPrintableString converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (DerPrintableString)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct printable string from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + /** + * return a printable string from a tagged object. + * + * @param taggedObject the tagged object holding the object we want + * @param declaredExplicit true if the object is meant to be explicitly tagged false otherwise. + * @exception ArgumentException if the tagged object cannot be converted. + */ + public static DerPrintableString GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (DerPrintableString)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + private readonly byte[] m_contents; + + public DerPrintableString(string str) + : this(str, false) + { + } + + /** + * Constructor with optional validation. + * + * @param string the base string to wrap. + * @param validate whether or not to check the string. + * @throws ArgumentException if validate is true and the string + * contains characters that should not be in a PrintableString. + */ + public DerPrintableString(string str, bool validate) + { + if (str == null) + throw new ArgumentNullException("str"); + if (validate && !IsPrintableString(str)) + throw new ArgumentException("string contains illegal characters", "str"); + + m_contents = Strings.ToAsciiByteArray(str); + } + + public DerPrintableString(byte[] contents) + : this(contents, true) + { + } + + internal DerPrintableString(byte[] contents, bool clone) + { + if (null == contents) + throw new ArgumentNullException("contents"); + + m_contents = clone ? Arrays.Clone(contents) : contents; + } + + public override string GetString() + { + return Strings.FromAsciiByteArray(m_contents); + } + + public byte[] GetOctets() + { + return Arrays.Clone(m_contents); + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.PrintableString, m_contents); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, m_contents); + } + + protected override bool Asn1Equals( + Asn1Object asn1Object) + { + DerPrintableString that = asn1Object as DerPrintableString; + return null != that + && Arrays.AreEqual(this.m_contents, that.m_contents); + } + + protected override int Asn1GetHashCode() + { + return Arrays.GetHashCode(m_contents); + } + + /** + * return true if the passed in String can be represented without + * loss as a PrintableString, false otherwise. + * + * @return true if in printable set, false otherwise. + */ + public static bool IsPrintableString(string str) + { + foreach (char ch in str) + { + if (ch > 0x007f) + return false; + + if (char.IsLetterOrDigit(ch)) + continue; + +// if (char.IsPunctuation(ch)) +// continue; + + switch (ch) + { + case ' ': + case '\'': + case '(': + case ')': + case '+': + case '-': + case '.': + case ':': + case '=': + case '?': + case '/': + case ',': + continue; + } + + return false; + } + + return true; + } + + internal static DerPrintableString CreatePrimitive(byte[] contents) + { + return new DerPrintableString(contents, false); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerPrintableString.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerPrintableString.cs.meta new file mode 100644 index 000000000..fedbd3012 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerPrintableString.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1200ec73d3f7fca4aaff102854e1059d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerSequence.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerSequence.cs new file mode 100644 index 000000000..e333c08a0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerSequence.cs @@ -0,0 +1,94 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class DerSequence + : Asn1Sequence + { + public static readonly DerSequence Empty = new DerSequence(); + + public static DerSequence FromVector(Asn1EncodableVector elementVector) + { + return elementVector.Count < 1 ? Empty : new DerSequence(elementVector); + } + + /** + * create an empty sequence + */ + public DerSequence() + : base() + { + } + + /** + * create a sequence containing one object + */ + public DerSequence(Asn1Encodable element) + : base(element) + { + } + + /** + * create a sequence containing two objects + */ + public DerSequence(Asn1Encodable element1, Asn1Encodable element2) + : base(element1, element2) + { + } + + public DerSequence(params Asn1Encodable[] elements) + : base(elements) + { + } + + /** + * create a sequence containing a vector of objects. + */ + public DerSequence(Asn1EncodableVector elementVector) + : base(elementVector) + { + } + + internal DerSequence(Asn1Encodable[] elements, bool clone) + : base(elements, clone) + { + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new ConstructedDLEncoding(Asn1Tags.Universal, Asn1Tags.Sequence, + Asn1OutputStream.GetContentsEncodings(Asn1OutputStream.EncodingDer, elements)); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new ConstructedDLEncoding(tagClass, tagNo, + Asn1OutputStream.GetContentsEncodings(Asn1OutputStream.EncodingDer, elements)); + } + + internal override DerBitString ToAsn1BitString() + { + return new DerBitString(BerBitString.FlattenBitStrings(GetConstructedBitStrings()), false); + } + + internal override DerExternal ToAsn1External() + { + return new DerExternal(this); + } + + internal override Asn1OctetString ToAsn1OctetString() + { + return new DerOctetString(BerOctetString.FlattenOctetStrings(GetConstructedOctetStrings())); + } + + internal override Asn1Set ToAsn1Set() + { + // NOTE: DLSet is intentional, we don't want sorting + return new DLSet(false, elements); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerSequence.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerSequence.cs.meta new file mode 100644 index 000000000..6f646b1f2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerSequence.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ca9f0cbe9fb5c1489017b4d412573eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerSet.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerSet.cs new file mode 100644 index 000000000..463e87d7b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerSet.cs @@ -0,0 +1,93 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * A Der encoded set object + */ + public class DerSet + : Asn1Set + { + public static readonly DerSet Empty = new DerSet(); + + public static DerSet FromVector(Asn1EncodableVector elementVector) + { + return elementVector.Count < 1 ? Empty : new DerSet(elementVector); + } + + /** + * create an empty set + */ + public DerSet() + : base() + { + } + + /** + * @param obj - a single object that makes up the set. + */ + public DerSet(Asn1Encodable element) + : base(element) + { + } + + public DerSet(params Asn1Encodable[] elements) + : base(elements, true) + { + } + + internal DerSet(Asn1Encodable[] elements, bool doSort) + : base(elements, doSort) + { + } + + /** + * @param v - a vector of objects making up the set. + */ + public DerSet(Asn1EncodableVector elementVector) + : base(elementVector, true) + { + } + + internal DerSet(Asn1EncodableVector elementVector, bool doSort) + : base(elementVector, doSort) + { + } + + internal DerSet(bool isSorted, Asn1Encodable[] elements) + : base(isSorted, elements) + { + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new ConstructedDLEncoding(Asn1Tags.Universal, Asn1Tags.Set, + Asn1OutputStream.GetContentsEncodings(Asn1OutputStream.EncodingDer, GetSortedElements())); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new ConstructedDLEncoding(tagClass, tagNo, + Asn1OutputStream.GetContentsEncodings(Asn1OutputStream.EncodingDer, GetSortedElements())); + } + + private Asn1Encodable[] GetSortedElements() + { + if (isSorted) + return elements; + + int count = elements.Length; + Asn1Object[] asn1Objects = new Asn1Object[count]; + for (int i = 0; i < count; ++i) + { + asn1Objects[i] = elements[i].ToAsn1Object(); + } + + return Sort(asn1Objects); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerSet.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerSet.cs.meta new file mode 100644 index 000000000..eb8e6376c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerSet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f364dec2c9a290d44970ffd282c606bc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerStringBase.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerStringBase.cs new file mode 100644 index 000000000..fd1c5039d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerStringBase.cs @@ -0,0 +1,26 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public abstract class DerStringBase + : Asn1Object, IAsn1String + { + protected DerStringBase() + { + } + + public abstract string GetString(); + + public override string ToString() + { + return GetString(); + } + + protected override int Asn1GetHashCode() + { + return GetString().GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerStringBase.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerStringBase.cs.meta new file mode 100644 index 000000000..8065a32e5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerStringBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ff347a2eb85434458a6035f9c07cb84 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerT61String.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerT61String.cs new file mode 100644 index 000000000..951b9a84d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerT61String.cs @@ -0,0 +1,136 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * Der T61String (also the teletex string) - 8-bit characters + */ + public class DerT61String + : DerStringBase + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(DerT61String), Asn1Tags.T61String) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets()); + } + } + + /** + * return a T61 string from the passed in object. + * + * @exception ArgumentException if the object cannot be converted. + */ + public static DerT61String GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is DerT61String derT61String) + return derT61String; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is DerT61String converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (DerT61String)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct T61 string from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + /** + * return a T61 string from a tagged object. + * + * @param taggedObject the tagged object holding the object we want + * @param declaredExplicit true if the object is meant to be explicitly tagged false otherwise. + * @exception ArgumentException if the tagged object cannot be converted. + */ + public static DerT61String GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (DerT61String)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + private readonly byte[] m_contents; + + public DerT61String(string str) + { + if (str == null) + throw new ArgumentNullException("str"); + + m_contents = Strings.ToByteArray(str); + } + + public DerT61String(byte[] contents) + : this(contents, true) + { + } + + internal DerT61String(byte[] contents, bool clone) + { + if (null == contents) + throw new ArgumentNullException("contents"); + + m_contents = clone ? Arrays.Clone(contents) : contents; + } + + public override string GetString() + { + return Strings.FromByteArray(m_contents); + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.T61String, m_contents); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, m_contents); + } + + public byte[] GetOctets() + { + return Arrays.Clone(m_contents); + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + DerT61String that = asn1Object as DerT61String; + return null != that + && Arrays.AreEqual(this.m_contents, that.m_contents); + } + + protected override int Asn1GetHashCode() + { + return Arrays.GetHashCode(m_contents); + } + + internal static DerT61String CreatePrimitive(byte[] contents) + { + return new DerT61String(contents, false); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerT61String.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerT61String.cs.meta new file mode 100644 index 000000000..20d449ec9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerT61String.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3128101ae52c6af4982834c862464364 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerTaggedObject.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerTaggedObject.cs new file mode 100644 index 000000000..9cc288f0f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerTaggedObject.cs @@ -0,0 +1,86 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * DER TaggedObject - in ASN.1 notation this is any object preceded by + * a [n] where n is some number - these are assumed to follow the construction + * rules (as with sequences). + */ + public class DerTaggedObject + : Asn1TaggedObject + { + public DerTaggedObject(int tagNo, Asn1Encodable obj) + : base(true, tagNo, obj) + { + } + + public DerTaggedObject(int tagClass, int tagNo, Asn1Encodable obj) + : base(true, tagClass, tagNo, obj) + { + } + + /** + * @param isExplicit true if an explicitly tagged object. + * @param tagNo the tag number for this object. + * @param obj the tagged object. + */ + public DerTaggedObject(bool isExplicit, int tagNo, Asn1Encodable obj) + : base(isExplicit, tagNo, obj) + { + } + + public DerTaggedObject(bool isExplicit, int tagClass, int tagNo, Asn1Encodable obj) + : base(isExplicit, tagClass, tagNo, obj) + { + } + + internal DerTaggedObject(int explicitness, int tagClass, int tagNo, Asn1Encodable obj) + : base(explicitness, tagClass, tagNo, obj) + { + } + + internal override string Asn1Encoding + { + get { return Der; } + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + encoding = Asn1OutputStream.EncodingDer; + + Asn1Object baseObject = GetBaseObject().ToAsn1Object(); + + if (!IsExplicit()) + return baseObject.GetEncodingImplicit(encoding, TagClass, TagNo); + + return new ConstructedDLEncoding(TagClass, TagNo, new IAsn1Encoding[]{ baseObject.GetEncoding(encoding) }); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + encoding = Asn1OutputStream.EncodingDer; + + Asn1Object baseObject = GetBaseObject().ToAsn1Object(); + + if (!IsExplicit()) + return baseObject.GetEncodingImplicit(encoding, tagClass, tagNo); + + return new ConstructedDLEncoding(tagClass, tagNo, new IAsn1Encoding[]{ baseObject.GetEncoding(encoding) }); + } + + internal override Asn1Sequence RebuildConstructed(Asn1Object asn1Object) + { + return new DerSequence(asn1Object); + } + + internal override Asn1TaggedObject ReplaceTag(int tagClass, int tagNo) + { + return new DerTaggedObject(explicitness, tagClass, tagNo, obj); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerTaggedObject.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerTaggedObject.cs.meta new file mode 100644 index 000000000..9d6344ad1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerTaggedObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 09a923adf168ad244bfe61ba31f805bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerUTCTime.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerUTCTime.cs new file mode 100644 index 000000000..641620208 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerUTCTime.cs @@ -0,0 +1,44 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class DerUtcTime + : Asn1UtcTime + { + public DerUtcTime(string timeString) + : base(timeString) + { + } + + + public DerUtcTime(DateTime dateTime) + : base(dateTime) + { + } + + public DerUtcTime(DateTime dateTime, int twoDigitYearMax) + : base(dateTime, twoDigitYearMax) + { + } + + internal DerUtcTime(byte[] contents) + : base(contents) + { + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.UtcTime, + GetContents(Asn1OutputStream.EncodingDer)); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, GetContents(Asn1OutputStream.EncodingDer)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerUTCTime.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerUTCTime.cs.meta new file mode 100644 index 000000000..f6ae5216f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerUTCTime.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 974cf3154ca4d22409f3c9f174fd6f5d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerUTF8String.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerUTF8String.cs new file mode 100644 index 000000000..55da1bd90 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerUTF8String.cs @@ -0,0 +1,128 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * Der UTF8String object. + */ + public class DerUtf8String + : DerStringBase + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(DerUtf8String), Asn1Tags.Utf8String) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets()); + } + } + + /** + * return an UTF8 string from the passed in object. + * + * @exception ArgumentException if the object cannot be converted. + */ + public static DerUtf8String GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is DerUtf8String derUtf8String) + return derUtf8String; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is DerUtf8String converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (DerUtf8String)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct UTF8 string from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + /** + * return a UTF8 string from a tagged object. + * + * @param taggedObject the tagged object holding the object we want + * @param declaredExplicit true if the object is meant to be explicitly tagged false otherwise. + * @exception ArgumentException if the tagged object cannot be converted. + */ + public static DerUtf8String GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (DerUtf8String)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + private readonly byte[] m_contents; + + public DerUtf8String(string str) + : this(Strings.ToUtf8ByteArray(str), false) + { + } + + public DerUtf8String(byte[] contents) + : this(contents, true) + { + } + + internal DerUtf8String(byte[] contents, bool clone) + { + if (null == contents) + throw new ArgumentNullException("contents"); + + m_contents = clone ? Arrays.Clone(contents) : contents; + } + + public override string GetString() + { + return Strings.FromUtf8ByteArray(m_contents); + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + DerUtf8String that = asn1Object as DerUtf8String; + return null != that + && Arrays.AreEqual(this.m_contents, that.m_contents); + } + + protected override int Asn1GetHashCode() + { + return Arrays.GetHashCode(m_contents); + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.Utf8String, m_contents); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, m_contents); + } + + internal static DerUtf8String CreatePrimitive(byte[] contents) + { + return new DerUtf8String(contents, false); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerUTF8String.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerUTF8String.cs.meta new file mode 100644 index 000000000..70a0e116c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerUTF8String.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59793e3c98172f046a238fb0352e1e38 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerUniversalString.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerUniversalString.cs new file mode 100644 index 000000000..495284118 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerUniversalString.cs @@ -0,0 +1,177 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +using System.IO; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * UniversalString object. + */ + public class DerUniversalString + : DerStringBase + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(DerUniversalString), Asn1Tags.UniversalString) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets()); + } + } + + private static readonly char[] table = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + + /** + * return a universal string from the passed in object. + * + * @exception ArgumentException if the object cannot be converted. + */ + public static DerUniversalString GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is DerUniversalString derUniversalString) + return derUniversalString; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is DerUniversalString converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (DerUniversalString)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct universal string from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + /** + * return a universal string from a tagged object. + * + * @param taggedObject the tagged object holding the object we want + * @param declaredExplicit true if the object is meant to be explicitly tagged false otherwise. + * @exception ArgumentException if the tagged object cannot be converted. + */ + public static DerUniversalString GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (DerUniversalString)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + private readonly byte[] m_contents; + + public DerUniversalString(byte[] contents) + : this(contents, true) + { + } + + internal DerUniversalString(byte[] contents, bool clone) + { + if (null == contents) + throw new ArgumentNullException("contents"); + + m_contents = clone ? Arrays.Clone(contents) : contents; + } + + public override string GetString() + { + int dl = m_contents.Length; + int capacity = 3 + 2 * (Asn1OutputStream.GetLengthOfDL(dl) + dl); + StringBuilder buf = new StringBuilder("#1C", capacity); + EncodeHexDL(buf, dl); + + for (int i = 0; i < dl; ++i) + { + EncodeHexByte(buf, m_contents[i]); + } + + Debug.Assert(buf.Length == capacity); + return buf.ToString(); + } + + public byte[] GetOctets() + { + return Arrays.Clone(m_contents); + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.UniversalString, m_contents); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, m_contents); + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + DerUniversalString that = asn1Object as DerUniversalString; + return null != that + && Arrays.AreEqual(this.m_contents, that.m_contents); + } + + protected override int Asn1GetHashCode() + { + return Arrays.GetHashCode(m_contents); + } + + internal static DerUniversalString CreatePrimitive(byte[] contents) + { + return new DerUniversalString(contents, false); + } + + private static void EncodeHexByte(StringBuilder buf, int i) + { + buf.Append(table[(i >> 4) & 0xF]); + buf.Append(table[i & 0xF]); + } + + private static void EncodeHexDL(StringBuilder buf, int dl) + { + if (dl < 128) + { + EncodeHexByte(buf, dl); + return; + } + + byte[] stack = new byte[5]; + int pos = 5; + + do + { + stack[--pos] = (byte)dl; + dl >>= 8; + } + while (dl != 0); + + int count = stack.Length - pos; + stack[--pos] = (byte)(0x80 | count); + + do + { + EncodeHexByte(buf, stack[pos++]); + } + while (pos < stack.Length); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerUniversalString.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerUniversalString.cs.meta new file mode 100644 index 000000000..648b26f4e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerUniversalString.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9aeab3619d1c4324f9e7968fa71c7ed4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerVideotexString.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerVideotexString.cs new file mode 100644 index 000000000..b1e5d9a16 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerVideotexString.cs @@ -0,0 +1,128 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class DerVideotexString + : DerStringBase + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(DerVideotexString), Asn1Tags.VideotexString) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets()); + } + } + + /** + * return a videotex string from the passed in object + * + * @param obj a DERVideotexString or an object that can be converted into one. + * @exception IllegalArgumentException if the object cannot be converted. + * @return a DERVideotexString instance, or null. + */ + public static DerVideotexString GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is DerVideotexString derVideotexString) + return derVideotexString; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is DerVideotexString converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (DerVideotexString)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct videotex string from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * return a videotex string from a tagged object. + * + * @param taggedObject the tagged object holding the object we want + * @param declaredExplicit true if the object is meant to be explicitly tagged false otherwise. + * @exception IllegalArgumentException if the tagged object cannot be converted. + * @return a DERVideotexString instance, or null. + */ + public static DerVideotexString GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (DerVideotexString)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + private readonly byte[] m_contents; + + public DerVideotexString(byte[] contents) + : this(contents, true) + { + } + + internal DerVideotexString(byte[] contents, bool clone) + { + if (null == contents) + throw new ArgumentNullException("contents"); + + m_contents = clone ? Arrays.Clone(contents) : contents; + } + + public override string GetString() + { + return Strings.FromByteArray(m_contents); + } + + public byte[] GetOctets() + { + return Arrays.Clone(m_contents); + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.VideotexString, m_contents); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, m_contents); + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + DerVideotexString that = asn1Object as DerVideotexString; + return null != that + && Arrays.AreEqual(this.m_contents, that.m_contents); + } + + protected override int Asn1GetHashCode() + { + return Arrays.GetHashCode(m_contents); + } + + internal static DerVideotexString CreatePrimitive(byte[] contents) + { + return new DerVideotexString(contents, false); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerVideotexString.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerVideotexString.cs.meta new file mode 100644 index 000000000..b9e4a3c79 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerVideotexString.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd1f8c7688b859b4d990225267b276ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerVisibleString.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerVisibleString.cs new file mode 100644 index 000000000..ed1a6c001 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerVisibleString.cs @@ -0,0 +1,136 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * VisibleString object. + */ + public class DerVisibleString + : DerStringBase + { + internal class Meta : Asn1UniversalType + { + internal static readonly Asn1UniversalType Instance = new Meta(); + + private Meta() : base(typeof(DerVisibleString), Asn1Tags.VisibleString) {} + + internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString) + { + return CreatePrimitive(octetString.GetOctets()); + } + } + + /** + * return a visible string from the passed in object. + * + * @exception ArgumentException if the object cannot be converted. + */ + public static DerVisibleString GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is DerVisibleString derVisibleString) + return derVisibleString; + + if (obj is IAsn1Convertible asn1Convertible) + { + Asn1Object asn1Object = asn1Convertible.ToAsn1Object(); + if (asn1Object is DerVisibleString converted) + return converted; + } + else if (obj is byte[] bytes) + { + try + { + return (DerVisibleString)Meta.Instance.FromByteArray(bytes); + } + catch (IOException e) + { + throw new ArgumentException("failed to construct visible string from byte[]: " + e.Message); + } + } + + throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + /** + * return a visible string from a tagged object. + * + * @param taggedObject the tagged object holding the object we want + * @param declaredExplicit true if the object is meant to be explicitly tagged false otherwise. + * @exception ArgumentException if the tagged object cannot be converted. + */ + public static DerVisibleString GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return (DerVisibleString)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit); + } + + private readonly byte[] m_contents; + + public DerVisibleString(string str) + { + if (str == null) + throw new ArgumentNullException("str"); + + m_contents = Strings.ToAsciiByteArray(str); + } + + public DerVisibleString(byte[] contents) + : this(contents, true) + { + } + + internal DerVisibleString(byte[] contents, bool clone) + { + if (null == contents) + throw new ArgumentNullException("contents"); + + m_contents = clone ? Arrays.Clone(contents) : contents; + } + + public override string GetString() + { + return Strings.FromAsciiByteArray(m_contents); + } + + public byte[] GetOctets() + { + return Arrays.Clone(m_contents); + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.VisibleString, m_contents); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + return new PrimitiveEncoding(tagClass, tagNo, m_contents); + } + + protected override bool Asn1Equals(Asn1Object asn1Object) + { + DerVisibleString that = asn1Object as DerVisibleString; + return null != that + && Arrays.AreEqual(this.m_contents, that.m_contents); + } + + protected override int Asn1GetHashCode() + { + return Arrays.GetHashCode(m_contents); + } + + internal static DerVisibleString CreatePrimitive(byte[] contents) + { + return new DerVisibleString(contents, false); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerVisibleString.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerVisibleString.cs.meta new file mode 100644 index 000000000..92b11d148 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/DerVisibleString.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9c45522cf4626c4c81e4e6b8b3fe74b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1Choice.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1Choice.cs new file mode 100644 index 000000000..77b82c8e0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1Choice.cs @@ -0,0 +1,21 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * Marker interface for CHOICE objects - if you implement this in a roll-your-own + * object, any attempt to tag the object implicitly will convert the tag to an + * explicit one as the encoding rules require. + *

+ * If you use this interface your class should also implement the getInstance + * pattern which takes a tag object and the tagging mode used. + *

+ */ + public interface IAsn1Choice + { + // marker interface + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1Choice.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1Choice.cs.meta new file mode 100644 index 000000000..d0f7086c1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1Choice.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71028704810a2d447920c97d24f875e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1Convertible.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1Convertible.cs new file mode 100644 index 000000000..2fbeaa8d9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1Convertible.cs @@ -0,0 +1,11 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public interface IAsn1Convertible + { + Asn1Object ToAsn1Object(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1Convertible.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1Convertible.cs.meta new file mode 100644 index 000000000..98058a2fa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1Convertible.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 07cd5c034ed2a474690fa66bd2118ce9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1Encoding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1Encoding.cs new file mode 100644 index 000000000..55e046626 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1Encoding.cs @@ -0,0 +1,15 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal interface IAsn1Encoding + { + void Encode(Asn1OutputStream asn1Out); + + int GetLength(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1Encoding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1Encoding.cs.meta new file mode 100644 index 000000000..164a39145 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1Encoding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 949eb025ceb7cc645baca227261703ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1String.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1String.cs new file mode 100644 index 000000000..8a1016153 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1String.cs @@ -0,0 +1,14 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * basic interface for Der string objects. + */ + public interface IAsn1String + { + string GetString(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1String.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1String.cs.meta new file mode 100644 index 000000000..83cedd8a4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IAsn1String.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f46d890a56de484eb4eef965cc5cb64 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IndefiniteLengthInputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IndefiniteLengthInputStream.cs new file mode 100644 index 000000000..49db12564 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IndefiniteLengthInputStream.cs @@ -0,0 +1,110 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + class IndefiniteLengthInputStream + : LimitedInputStream + { + private int _lookAhead; + private bool _eofOn00 = true; + + internal IndefiniteLengthInputStream(Stream inStream, int limit) + : base(inStream, limit) + { + _lookAhead = RequireByte(); + + if (0 == _lookAhead) + { + CheckEndOfContents(); + } + } + + internal void SetEofOn00(bool eofOn00) + { + _eofOn00 = eofOn00; + if (_eofOn00 && 0 == _lookAhead) + { + CheckEndOfContents(); + } + } + + private void CheckEndOfContents() + { + if (0 != RequireByte()) + throw new IOException("malformed end-of-contents marker"); + + _lookAhead = -1; + SetParentEofDetect(); + } + + public override int Read(byte[] buffer, int offset, int count) + { + // Only use this optimisation if we aren't checking for 00 + if (_eofOn00 || count <= 1) + return base.Read(buffer, offset, count); + + if (_lookAhead < 0) + return 0; + + int numRead = _in.Read(buffer, offset + 1, count - 1); + if (numRead <= 0) + throw new EndOfStreamException(); + + buffer[offset] = (byte)_lookAhead; + _lookAhead = RequireByte(); + + return numRead + 1; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int Read(Span buffer) + { + // Only use this optimisation if we aren't checking for 00 + if (_eofOn00 || buffer.Length <= 1) + return base.Read(buffer); + + if (_lookAhead < 0) + return 0; + + int numRead = _in.Read(buffer[1..]); + if (numRead <= 0) + throw new EndOfStreamException(); + + buffer[0] = (byte)_lookAhead; + _lookAhead = RequireByte(); + + return numRead + 1; + } +#endif + + public override int ReadByte() + { + if (_eofOn00 && _lookAhead <= 0) + { + if (0 == _lookAhead) + { + CheckEndOfContents(); + } + return -1; + } + + int result = _lookAhead; + _lookAhead = RequireByte(); + return result; + } + + private int RequireByte() + { + int b = _in.ReadByte(); + if (b < 0) + throw new EndOfStreamException(); + + return b; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IndefiniteLengthInputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IndefiniteLengthInputStream.cs.meta new file mode 100644 index 000000000..e533b1dbf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/IndefiniteLengthInputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5faa2aff355d23945ae836ec7393a1b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyASN1InputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyASN1InputStream.cs new file mode 100644 index 000000000..b3e32cce4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyASN1InputStream.cs @@ -0,0 +1,47 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + public class LazyAsn1InputStream + : Asn1InputStream + { + public LazyAsn1InputStream(byte[] input) + : base(input) + { + } + + public LazyAsn1InputStream(Stream inputStream) + : base(inputStream) + { + } + + internal LazyAsn1InputStream(Stream input, int limit, byte[][] tmpBuffers) + : base(input, limit, tmpBuffers) + { + } + + internal override Asn1Sequence CreateDLSequence(DefiniteLengthInputStream defIn) + { + return new LazyDLSequence(defIn.ToArray()); + } + + internal override Asn1Set CreateDLSet(DefiniteLengthInputStream defIn) + { + return new LazyDLSet(defIn.ToArray()); + } + + internal override Asn1EncodableVector ReadVector(DefiniteLengthInputStream defIn) + { + int remaining = defIn.Remaining; + if (remaining < 1) + return new Asn1EncodableVector(0); + + return new LazyAsn1InputStream(defIn, remaining, tmpBuffers).ReadVector(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyASN1InputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyASN1InputStream.cs.meta new file mode 100644 index 000000000..502f4b5bc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyASN1InputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b99b4c1a9bb0e04cac3fe4ae55f6cf9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDERSequence.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDERSequence.cs new file mode 100644 index 000000000..0454b349a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDERSequence.cs @@ -0,0 +1,3 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDERSequence.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDERSequence.cs.meta new file mode 100644 index 000000000..db7f56713 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDERSequence.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cbdd39fdc49876048aef91ae0de8ced9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDERSet.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDERSet.cs new file mode 100644 index 000000000..0454b349a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDERSet.cs @@ -0,0 +1,3 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDERSet.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDERSet.cs.meta new file mode 100644 index 000000000..0c291848e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDERSet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8cc1ad753f557e943a6a5397371c9680 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDLEnumerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDLEnumerator.cs new file mode 100644 index 000000000..940882023 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDLEnumerator.cs @@ -0,0 +1,69 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal class LazyDLEnumerator + : IEnumerator + { + private readonly byte[] m_contents; + + private Asn1InputStream m_input; + private Asn1Object m_current; + + internal LazyDLEnumerator(byte[] contents) + { + this.m_contents = contents; + + Reset(); + } + + object System.Collections.IEnumerator.Current + { + get { return Current; } + } + + public Asn1Encodable Current + { + get + { + if (null == m_current) + throw new InvalidOperationException(); + + return m_current; + } + } + + public virtual void Dispose() + { + } + + public bool MoveNext() + { + return null != (this.m_current = ReadObject()); + } + + public void Reset() + { + this.m_input = new LazyAsn1InputStream(m_contents); + this.m_current = null; + } + + private Asn1Object ReadObject() + { + try + { + return m_input.ReadObject(); + } + catch (IOException e) + { + throw new Asn1ParsingException("malformed ASN.1: " + e.Message, e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDLEnumerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDLEnumerator.cs.meta new file mode 100644 index 000000000..49d5be069 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDLEnumerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e013eba2cec788241b17adad97d20283 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDLSequence.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDLSequence.cs new file mode 100644 index 000000000..60e20afb1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDLSequence.cs @@ -0,0 +1,129 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal class LazyDLSequence + : DLSequence + { + private byte[] encoded; + + internal LazyDLSequence(byte[] encoded) + : base() + { + if (null == encoded) + throw new ArgumentNullException("encoded"); + + this.encoded = encoded; + } + + public override Asn1Encodable this[int index] + { + get + { + Force(); + + return base[index]; + } + } + + public override IEnumerator GetEnumerator() + { + byte[] encoded = GetContents(); + if (null != encoded) + { + return new LazyDLEnumerator(encoded); + } + + return base.GetEnumerator(); + } + + public override int Count + { + get + { + Force(); + + return base.Count; + } + } + + public override Asn1Encodable[] ToArray() + { + Force(); + + return base.ToArray(); + } + + public override string ToString() + { + Force(); + + return base.ToString(); + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + if (Asn1OutputStream.EncodingBer == encoding) + { + byte[] encoded = GetContents(); + if (encoded != null) + return new ConstructedLazyDLEncoding(Asn1Tags.Universal, Asn1Tags.Sequence, encoded); + } + else + { + Force(); + } + + return base.GetEncoding(encoding); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + if (Asn1OutputStream.EncodingBer == encoding) + { + byte[] encoded = GetContents(); + if (encoded != null) + return new ConstructedLazyDLEncoding(tagClass, tagNo, encoded); + } + else + { + Force(); + } + + return base.GetEncodingImplicit(encoding, tagClass, tagNo); + } + + private void Force() + { + lock (this) + { + if (null != encoded) + { + Asn1InputStream input = new LazyAsn1InputStream(encoded); + try + { + Asn1EncodableVector v = input.ReadVector(); + + this.elements = v.TakeElements(); + this.encoded = null; + } + catch (IOException e) + { + throw new Asn1ParsingException("malformed ASN.1: " + e.Message, e); + } + } + } + } + + private byte[] GetContents() + { + lock (this) return encoded; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDLSequence.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDLSequence.cs.meta new file mode 100644 index 000000000..c46d40c0e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDLSequence.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f4a719db5e2c874eb236ba3f734acca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDLSet.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDLSet.cs new file mode 100644 index 000000000..fe5de4c75 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDLSet.cs @@ -0,0 +1,128 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal class LazyDLSet + : DLSet + { + private byte[] encoded; + + internal LazyDLSet(byte[] encoded) + : base() + { + if (null == encoded) + throw new ArgumentNullException("encoded"); + + this.encoded = encoded; + } + + public override Asn1Encodable this[int index] + { + get + { + Force(); + + return base[index]; + } + } + + public override IEnumerator GetEnumerator() + { + byte[] encoded = GetContents(); + if (null != encoded) + return new LazyDLEnumerator(encoded); + + return base.GetEnumerator(); + } + + public override int Count + { + get + { + Force(); + + return base.Count; + } + } + + public override Asn1Encodable[] ToArray() + { + Force(); + + return base.ToArray(); + } + + public override string ToString() + { + Force(); + + return base.ToString(); + } + + internal override IAsn1Encoding GetEncoding(int encoding) + { + if (Asn1OutputStream.EncodingBer == encoding) + { + byte[] encoded = GetContents(); + if (null != encoded) + return new ConstructedLazyDLEncoding(Asn1Tags.Universal, Asn1Tags.Set, encoded); + } + else + { + Force(); + } + + return base.GetEncoding(encoding); + } + + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + if (Asn1OutputStream.EncodingBer == encoding) + { + byte[] encoded = GetContents(); + if (null != encoded) + return new ConstructedLazyDLEncoding(tagClass, tagNo, encoded); + } + else + { + Force(); + } + + return base.GetEncodingImplicit(encoding, tagClass, tagNo); + } + + private void Force() + { + lock (this) + { + if (null != encoded) + { + Asn1InputStream input = new LazyAsn1InputStream(encoded); + try + { + Asn1EncodableVector v = input.ReadVector(); + + this.elements = v.TakeElements(); + this.isSorted = elements.Length < 2; + this.encoded = null; + } + catch (IOException e) + { + throw new Asn1ParsingException("malformed ASN.1: " + e.Message, e); + } + } + } + } + + private byte[] GetContents() + { + lock (this) return encoded; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDLSet.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDLSet.cs.meta new file mode 100644 index 000000000..1d4592c34 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LazyDLSet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b2a69dabb4519d84a9de7f3158fe1588 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LimitedInputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LimitedInputStream.cs new file mode 100644 index 000000000..9e4dd134e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LimitedInputStream.cs @@ -0,0 +1,36 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal abstract class LimitedInputStream + : BaseInputStream + { + protected readonly Stream _in; + private int _limit; + + internal LimitedInputStream(Stream inStream, int limit) + { + this._in = inStream; + this._limit = limit; + } + + internal virtual int Limit + { + get { return _limit; } + } + + protected void SetParentEofDetect() + { + if (_in is IndefiniteLengthInputStream) + { + ((IndefiniteLengthInputStream)_in).SetEofOn00(true); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LimitedInputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LimitedInputStream.cs.meta new file mode 100644 index 000000000..1544ee846 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/LimitedInputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2282e5c2e036b444d8ef59d4ca1522dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/OidTokenizer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/OidTokenizer.cs new file mode 100644 index 000000000..f40c51923 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/OidTokenizer.cs @@ -0,0 +1,49 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + /** + * class for breaking up an Oid into it's component tokens, ala + * java.util.StringTokenizer. We need this class as some of the + * lightweight Java environment don't support classes like + * StringTokenizer. + */ + public class OidTokenizer + { + private string oid; + private int index; + + public OidTokenizer( + string oid) + { + this.oid = oid; + } + + public bool HasMoreTokens + { + get { return index != -1; } + } + + public string NextToken() + { + if (index == -1) + { + return null; + } + + int end = oid.IndexOf('.', index); + if (end == -1) + { + string lastToken = oid.Substring(index); + index = -1; + return lastToken; + } + + string nextToken = oid.Substring(index, end - index); + index = end + 1; + return nextToken; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/OidTokenizer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/OidTokenizer.cs.meta new file mode 100644 index 000000000..9f3cfe438 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/OidTokenizer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6be1ce8f546e0745948e3d162116698 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/PrimitiveEncoding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/PrimitiveEncoding.cs new file mode 100644 index 000000000..9bdd08bb1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/PrimitiveEncoding.cs @@ -0,0 +1,37 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal class PrimitiveEncoding + : IAsn1Encoding + { + private readonly int m_tagClass; + private readonly int m_tagNo; + private readonly byte[] m_contentsOctets; + + internal PrimitiveEncoding(int tagClass, int tagNo, byte[] contentsOctets) + { + m_tagClass = tagClass; + m_tagNo = tagNo; + m_contentsOctets = contentsOctets; + } + + void IAsn1Encoding.Encode(Asn1OutputStream asn1Out) + { + asn1Out.WriteIdentifier(m_tagClass, m_tagNo); + asn1Out.WriteDL(m_contentsOctets.Length); + asn1Out.Write(m_contentsOctets, 0, m_contentsOctets.Length); + } + + int IAsn1Encoding.GetLength() + { + return Asn1OutputStream.GetLengthOfIdentifier(m_tagNo) + + Asn1OutputStream.GetLengthOfDL(m_contentsOctets.Length) + + m_contentsOctets.Length; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/PrimitiveEncoding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/PrimitiveEncoding.cs.meta new file mode 100644 index 000000000..11d0603ea --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/PrimitiveEncoding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d78fe1945b88734e92a3fb89251c0d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/PrimitiveEncodingSuffixed.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/PrimitiveEncodingSuffixed.cs new file mode 100644 index 000000000..c399c5396 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/PrimitiveEncodingSuffixed.cs @@ -0,0 +1,40 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1 +{ + internal class PrimitiveEncodingSuffixed + : IAsn1Encoding + { + private readonly int m_tagClass; + private readonly int m_tagNo; + private readonly byte[] m_contentsOctets; + private readonly byte m_contentsSuffix; + + internal PrimitiveEncodingSuffixed(int tagClass, int tagNo, byte[] contentsOctets, byte contentsSuffix) + { + m_tagClass = tagClass; + m_tagNo = tagNo; + m_contentsOctets = contentsOctets; + m_contentsSuffix = contentsSuffix; + } + + void IAsn1Encoding.Encode(Asn1OutputStream asn1Out) + { + asn1Out.WriteIdentifier(m_tagClass, m_tagNo); + asn1Out.WriteDL(m_contentsOctets.Length); + asn1Out.Write(m_contentsOctets, 0, m_contentsOctets.Length - 1); + asn1Out.WriteByte(m_contentsSuffix); + } + + int IAsn1Encoding.GetLength() + { + return Asn1OutputStream.GetLengthOfIdentifier(m_tagNo) + + Asn1OutputStream.GetLengthOfDL(m_contentsOctets.Length) + + m_contentsOctets.Length; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/PrimitiveEncodingSuffixed.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/PrimitiveEncodingSuffixed.cs.meta new file mode 100644 index 000000000..76c5fabe9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/PrimitiveEncodingSuffixed.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce5b5c34049b0fe4ca5b509fb2b50cd2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/anssi.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/anssi.meta new file mode 100644 index 000000000..670bc12c2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/anssi.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a78b3d8524e59be4999d414a705d774a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/anssi/ANSSINamedCurves.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/anssi/ANSSINamedCurves.cs new file mode 100644 index 000000000..a30d65d27 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/anssi/ANSSINamedCurves.cs @@ -0,0 +1,146 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Anssi +{ + /// Elliptic curve registry for ANSSI. + public static class AnssiNamedCurves + { + private static X9ECPoint ConfigureBasepoint(ECCurve curve, string encoding) + { + X9ECPoint G = new X9ECPoint(curve, Hex.DecodeStrict(encoding)); + WNafUtilities.ConfigureBasepoint(G.Point); + return G; + } + + private static ECCurve ConfigureCurve(ECCurve curve) + { + return curve; + } + + private static BigInteger FromHex(string hex) + { + return new BigInteger(1, Hex.DecodeStrict(hex)); + } + + internal class Frp256v1Holder + : X9ECParametersHolder + { + private Frp256v1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Frp256v1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger p = FromHex("F1FD178C0B3AD58F10126DE8CE42435B3961ADBCABC8CA6DE8FCF353D86E9C03"); + BigInteger a = FromHex("F1FD178C0B3AD58F10126DE8CE42435B3961ADBCABC8CA6DE8FCF353D86E9C00"); + BigInteger b = FromHex("EE353FCA5428A9300D4ABA754A44C00FDFEC0C9AE4B1A1803075ED967B7BB73F"); + BigInteger n = FromHex("F1FD178C0B3AD58F10126DE8CE42435B53DC67E140D2BF941FFDD459C6D655E1"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve(p, a, b, n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "04B6B3D4C356C139EB31183D4749D423958C27D2DCAF98B70164C97A2DD98F5CFF6142E0F7C8B204911F9271F0F3ECEF8C2701C307E8E4C9E183115A1554062CFB"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + private static readonly Dictionary objIds = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly Dictionary curves = + new Dictionary(); + private static readonly Dictionary names = + new Dictionary(); + + private static void DefineCurve(string name, DerObjectIdentifier oid, X9ECParametersHolder holder) + { + objIds.Add(name, oid); + names.Add(oid, name); + curves.Add(oid, holder); + } + + static AnssiNamedCurves() + { + DefineCurve("FRP256v1", AnssiObjectIdentifiers.FRP256v1, Frp256v1Holder.Instance); + } + + /// Look up the for the curve with the given name. + /// The name of the curve. + public static X9ECParameters GetByName(string name) + { + DerObjectIdentifier oid = GetOid(name); + return oid == null ? null : GetByOid(oid); + } + + /// Look up an for the curve with the given name. + /// + /// Allows accessing the curve without necessarily triggering the creation of the + /// full . + /// + /// The name of the curve. + public static X9ECParametersHolder GetByNameLazy(string name) + { + DerObjectIdentifier oid = GetOid(name); + return oid == null ? null : GetByOidLazy(oid); + } + + /// Look up the for the curve with the given + /// OID. + /// The OID for the curve. + public static X9ECParameters GetByOid(DerObjectIdentifier oid) + { + return GetByOidLazy(oid)?.Parameters; + } + + /// Look up an for the curve with the given + /// OID. + /// + /// Allows accessing the curve without necessarily triggering the creation of the + /// full . + /// + /// The OID for the curve. + public static X9ECParametersHolder GetByOidLazy(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(curves, oid); + } + + /// Look up the name of the curve with the given OID. + /// The OID for the curve. + public static string GetName(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(names, oid); + } + + /// Look up the OID of the curve with the given name. + /// The name of the curve. + public static DerObjectIdentifier GetOid(string name) + { + return CollectionUtilities.GetValueOrNull(objIds, name); + } + + /// Enumerate the available curve names in this registry. + public static IEnumerable Names + { + get { return CollectionUtilities.Proxy(objIds.Keys); } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/anssi/ANSSINamedCurves.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/anssi/ANSSINamedCurves.cs.meta new file mode 100644 index 000000000..0522f6168 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/anssi/ANSSINamedCurves.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e908adca735a50b4ea4afcceea30542f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/anssi/ANSSIObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/anssi/ANSSIObjectIdentifiers.cs new file mode 100644 index 000000000..1c406c742 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/anssi/ANSSIObjectIdentifiers.cs @@ -0,0 +1,17 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Anssi +{ + public sealed class AnssiObjectIdentifiers + { + private AnssiObjectIdentifiers() + { + } + + public static readonly DerObjectIdentifier FRP256v1 = new DerObjectIdentifier("1.2.250.1.223.101.256.1"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/anssi/ANSSIObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/anssi/ANSSIObjectIdentifiers.cs.meta new file mode 100644 index 000000000..0dcf77ab4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/anssi/ANSSIObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: edd7ffa2202a9ad4fb1a88ae60f09ea7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bc.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bc.meta new file mode 100644 index 000000000..d356e9234 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bc.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 458d0ea5f30d18d4c984273e5827384a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bc/BCObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bc/BCObjectIdentifiers.cs new file mode 100644 index 000000000..e5950f2f6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bc/BCObjectIdentifiers.cs @@ -0,0 +1,252 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.BC +{ + public abstract class BCObjectIdentifiers + { + /** + * iso.org.dod.internet.private.enterprise.legion-of-the-bouncy-castle + *

1.3.6.1.4.1.22554

+ */ + public static readonly DerObjectIdentifier bc = new DerObjectIdentifier("1.3.6.1.4.1.22554"); + + /** + * pbe(1) algorithms + *

1.3.6.1.4.1.22554.1

+ */ + public static readonly DerObjectIdentifier bc_pbe = bc.Branch("1"); + + /** + * SHA-1(1) + *

1.3.6.1.4.1.22554.1.1

+ */ + public static readonly DerObjectIdentifier bc_pbe_sha1 = bc_pbe.Branch("1"); + + /** SHA-2.SHA-256; 1.3.6.1.4.1.22554.1.2.1 */ + public static readonly DerObjectIdentifier bc_pbe_sha256 = bc_pbe.Branch("2.1"); + /** SHA-2.SHA-384; 1.3.6.1.4.1.22554.1.2.2 */ + public static readonly DerObjectIdentifier bc_pbe_sha384 = bc_pbe.Branch("2.2"); + /** SHA-2.SHA-512; 1.3.6.1.4.1.22554.1.2.3 */ + public static readonly DerObjectIdentifier bc_pbe_sha512 = bc_pbe.Branch("2.3"); + /** SHA-2.SHA-224; 1.3.6.1.4.1.22554.1.2.4 */ + public static readonly DerObjectIdentifier bc_pbe_sha224 = bc_pbe.Branch("2.4"); + + /** + * PKCS-5(1)|PKCS-12(2) + */ + /** SHA-1.PKCS5; 1.3.6.1.4.1.22554.1.1.1 */ + public static readonly DerObjectIdentifier bc_pbe_sha1_pkcs5 = bc_pbe_sha1.Branch("1"); + /** SHA-1.PKCS12; 1.3.6.1.4.1.22554.1.1.2 */ + public static readonly DerObjectIdentifier bc_pbe_sha1_pkcs12 = bc_pbe_sha1.Branch("2"); + + /** SHA-256.PKCS12; 1.3.6.1.4.1.22554.1.2.1.1 */ + public static readonly DerObjectIdentifier bc_pbe_sha256_pkcs5 = bc_pbe_sha256.Branch("1"); + /** SHA-256.PKCS12; 1.3.6.1.4.1.22554.1.2.1.2 */ + public static readonly DerObjectIdentifier bc_pbe_sha256_pkcs12 = bc_pbe_sha256.Branch("2"); + + /** + * AES(1) . (CBC-128(2)|CBC-192(22)|CBC-256(42)) + */ + /** 1.3.6.1.4.1.22554.1.1.2.1.2 */ + public static readonly DerObjectIdentifier bc_pbe_sha1_pkcs12_aes128_cbc = bc_pbe_sha1_pkcs12.Branch("1.2"); + /** 1.3.6.1.4.1.22554.1.1.2.1.22 */ + public static readonly DerObjectIdentifier bc_pbe_sha1_pkcs12_aes192_cbc = bc_pbe_sha1_pkcs12.Branch("1.22"); + /** 1.3.6.1.4.1.22554.1.1.2.1.42 */ + public static readonly DerObjectIdentifier bc_pbe_sha1_pkcs12_aes256_cbc = bc_pbe_sha1_pkcs12.Branch("1.42"); + + /** 1.3.6.1.4.1.22554.1.1.2.2.2 */ + public static readonly DerObjectIdentifier bc_pbe_sha256_pkcs12_aes128_cbc = bc_pbe_sha256_pkcs12.Branch("1.2"); + /** 1.3.6.1.4.1.22554.1.1.2.2.22 */ + public static readonly DerObjectIdentifier bc_pbe_sha256_pkcs12_aes192_cbc = bc_pbe_sha256_pkcs12.Branch("1.22"); + /** 1.3.6.1.4.1.22554.1.1.2.2.42 */ + public static readonly DerObjectIdentifier bc_pbe_sha256_pkcs12_aes256_cbc = bc_pbe_sha256_pkcs12.Branch("1.42"); + + /** + * signature(2) algorithms + */ + public static readonly DerObjectIdentifier bc_sig = bc.Branch("2"); + + /** + * Sphincs-256 + */ + public static readonly DerObjectIdentifier sphincs256 = bc_sig.Branch("1"); + public static readonly DerObjectIdentifier sphincs256_with_BLAKE512 = sphincs256.Branch("1"); + public static readonly DerObjectIdentifier sphincs256_with_SHA512 = sphincs256.Branch("2"); + public static readonly DerObjectIdentifier sphincs256_with_SHA3_512 = sphincs256.Branch("3"); + + /** + * XMSS + */ + public static readonly DerObjectIdentifier xmss = bc_sig.Branch("2"); + public static readonly DerObjectIdentifier xmss_with_SHA256 = xmss.Branch("1"); + public static readonly DerObjectIdentifier xmss_with_SHA512 = xmss.Branch("2"); + public static readonly DerObjectIdentifier xmss_with_SHAKE128 = xmss.Branch("3"); + public static readonly DerObjectIdentifier xmss_with_SHAKE256 = xmss.Branch("4"); + + /** + * XMSS^MT + */ + public static readonly DerObjectIdentifier xmss_mt = bc_sig.Branch("3"); + public static readonly DerObjectIdentifier xmss_mt_with_SHA256 = xmss_mt.Branch("1"); + public static readonly DerObjectIdentifier xmss_mt_with_SHA512 = xmss_mt.Branch("2"); + public static readonly DerObjectIdentifier xmss_mt_with_SHAKE128 = xmss_mt.Branch("3"); + public static readonly DerObjectIdentifier xmss_mt_with_SHAKE256 = xmss_mt.Branch("4"); + + /** + * SPHINCS+ + */ + public static readonly DerObjectIdentifier sphincsPlus = bc_sig.Branch("5"); + public static readonly DerObjectIdentifier sphincsPlus_shake_256 = sphincsPlus.Branch("1"); + public static readonly DerObjectIdentifier sphincsPlus_sha_256 = sphincsPlus.Branch("2"); + public static readonly DerObjectIdentifier sphincsPlus_sha_512 = sphincsPlus.Branch("3"); + + /** + * Picnic + */ + public static readonly DerObjectIdentifier picnic = bc_sig.Branch("6"); + public static readonly DerObjectIdentifier picnicl1fs = picnic.Branch("1"); + public static readonly DerObjectIdentifier picnicl1ur = picnic.Branch("2"); + public static readonly DerObjectIdentifier picnicl3fs = picnic.Branch("3"); + public static readonly DerObjectIdentifier picnicl3ur = picnic.Branch("4"); + public static readonly DerObjectIdentifier picnicl5fs = picnic.Branch("5"); + public static readonly DerObjectIdentifier picnicl5ur = picnic.Branch("6"); + public static readonly DerObjectIdentifier picnic3l1 = picnic.Branch("7"); + public static readonly DerObjectIdentifier picnic3l3 = picnic.Branch("8"); + public static readonly DerObjectIdentifier picnic3l5 = picnic.Branch("9"); + public static readonly DerObjectIdentifier picnicl1full = picnic.Branch("10"); + public static readonly DerObjectIdentifier picnicl3full = picnic.Branch("11"); + public static readonly DerObjectIdentifier picnicl5full = picnic.Branch("12"); + + /* + * Falcon + */ + public static readonly DerObjectIdentifier falcon = bc_sig.Branch("7"); + + public static readonly DerObjectIdentifier falcon_512 = new DerObjectIdentifier("1.3.9999.3.1"); // falcon.branch("1"); + public static readonly DerObjectIdentifier falcon_1024 = new DerObjectIdentifier("1.3.9999.3.4"); // falcon.branch("2"); + + /* + * Dilithium + */ + public static readonly DerObjectIdentifier dilithium = bc_sig.Branch("8"); + + // OpenSSL OIDs + public static readonly DerObjectIdentifier dilithium2 = new DerObjectIdentifier("1.3.6.1.4.1.2.267.7.4.4"); // dilithium.branch("1"); + public static readonly DerObjectIdentifier dilithium3 = new DerObjectIdentifier("1.3.6.1.4.1.2.267.7.6.5"); // dilithium.branch("2"); + public static readonly DerObjectIdentifier dilithium5 = new DerObjectIdentifier("1.3.6.1.4.1.2.267.7.8.7"); // dilithium.branch("3"); + public static readonly DerObjectIdentifier dilithium2_aes = new DerObjectIdentifier("1.3.6.1.4.1.2.267.11.4.4"); // dilithium.branch("4"); + public static readonly DerObjectIdentifier dilithium3_aes = new DerObjectIdentifier("1.3.6.1.4.1.2.267.11.6.5"); // dilithium.branch("5"); + public static readonly DerObjectIdentifier dilithium5_aes = new DerObjectIdentifier("1.3.6.1.4.1.2.267.11.8.7"); // dilithium.branch("6"); + + + /** + * key_exchange(3) algorithms + */ + public static readonly DerObjectIdentifier bc_exch = bc.Branch("3"); + + /** + * NewHope + */ + public static readonly DerObjectIdentifier newHope = bc_exch.Branch("1"); + + /** + * X.509 extension(4) values + *

+ * 1.3.6.1.4.1.22554.4 + */ + public static readonly DerObjectIdentifier bc_ext = bc.Branch("4"); + + public static readonly DerObjectIdentifier linkedCertificate = bc_ext.Branch("1"); + + /** + * KEM(4) algorithms + */ + public static readonly DerObjectIdentifier bc_kem = bc.Branch("5"); + + /** + * Classic McEliece + */ + public static readonly DerObjectIdentifier pqc_kem_mceliece = bc_kem.Branch("1"); + + public static readonly DerObjectIdentifier mceliece348864_r3 = pqc_kem_mceliece.Branch("1"); + public static readonly DerObjectIdentifier mceliece348864f_r3 = pqc_kem_mceliece.Branch("2"); + public static readonly DerObjectIdentifier mceliece460896_r3 = pqc_kem_mceliece.Branch("3"); + public static readonly DerObjectIdentifier mceliece460896f_r3 = pqc_kem_mceliece.Branch("4"); + public static readonly DerObjectIdentifier mceliece6688128_r3 = pqc_kem_mceliece.Branch("5"); + public static readonly DerObjectIdentifier mceliece6688128f_r3 = pqc_kem_mceliece.Branch("6"); + public static readonly DerObjectIdentifier mceliece6960119_r3 = pqc_kem_mceliece.Branch("7"); + public static readonly DerObjectIdentifier mceliece6960119f_r3 = pqc_kem_mceliece.Branch("8"); + public static readonly DerObjectIdentifier mceliece8192128_r3 = pqc_kem_mceliece.Branch("9"); + public static readonly DerObjectIdentifier mceliece8192128f_r3 = pqc_kem_mceliece.Branch("10"); + + /** + * SABER + */ + public static readonly DerObjectIdentifier pqc_kem_saber = bc_kem.Branch("3"); + public static readonly DerObjectIdentifier lightsaberkem128r3 = pqc_kem_saber.Branch("1"); + public static readonly DerObjectIdentifier saberkem128r3 = pqc_kem_saber.Branch("2"); + public static readonly DerObjectIdentifier firesaberkem128r3 = pqc_kem_saber.Branch("3"); + public static readonly DerObjectIdentifier lightsaberkem192r3 = pqc_kem_saber.Branch("4"); + public static readonly DerObjectIdentifier saberkem192r3 = pqc_kem_saber.Branch("5"); + public static readonly DerObjectIdentifier firesaberkem192r3 = pqc_kem_saber.Branch("6"); + public static readonly DerObjectIdentifier lightsaberkem256r3 = pqc_kem_saber.Branch("7"); + public static readonly DerObjectIdentifier saberkem256r3 = pqc_kem_saber.Branch("8"); + public static readonly DerObjectIdentifier firesaberkem256r3 = pqc_kem_saber.Branch("9"); + public static readonly DerObjectIdentifier ulightsaberkemr3 = pqc_kem_saber.Branch("10"); + public static readonly DerObjectIdentifier usaberkemr3 = pqc_kem_saber.Branch("11"); + public static readonly DerObjectIdentifier ufiresaberkemr3 = pqc_kem_saber.Branch("12"); + public static readonly DerObjectIdentifier lightsaberkem90sr3 = pqc_kem_saber.Branch("13"); + public static readonly DerObjectIdentifier saberkem90sr3 = pqc_kem_saber.Branch("14"); + public static readonly DerObjectIdentifier firesaberkem90sr3 = pqc_kem_saber.Branch("15"); + public static readonly DerObjectIdentifier ulightsaberkem90sr3 = pqc_kem_saber.Branch("16"); + public static readonly DerObjectIdentifier usaberkem90sr3 = pqc_kem_saber.Branch("17"); + public static readonly DerObjectIdentifier ufiresaberkem90sr3 = pqc_kem_saber.Branch("18"); + + /** + * SIKE + */ + public static readonly DerObjectIdentifier pqc_kem_sike = bc_kem.Branch("4"); + public static readonly DerObjectIdentifier sikep434 = pqc_kem_sike.Branch("1"); + public static readonly DerObjectIdentifier sikep503 = pqc_kem_sike.Branch("2"); + public static readonly DerObjectIdentifier sikep610 = pqc_kem_sike.Branch("3"); + public static readonly DerObjectIdentifier sikep751 = pqc_kem_sike.Branch("4"); + public static readonly DerObjectIdentifier sikep434_compressed = pqc_kem_sike.Branch("5"); + public static readonly DerObjectIdentifier sikep503_compressed = pqc_kem_sike.Branch("6"); + public static readonly DerObjectIdentifier sikep610_compressed = pqc_kem_sike.Branch("7"); + public static readonly DerObjectIdentifier sikep751_compressed = pqc_kem_sike.Branch("8"); + + /** + * Kyber + */ + public static readonly DerObjectIdentifier pqc_kem_kyber = bc_kem.Branch("6"); + + public static readonly DerObjectIdentifier kyber512 = new DerObjectIdentifier("1.3.6.1.4.1.2.267.8.2.2"); // pqc_kem_kyber.Branch("1"); + public static readonly DerObjectIdentifier kyber768 = new DerObjectIdentifier("1.3.6.1.4.1.2.267.8.3.3"); // pqc_kem_kyber.Branch("2"); + public static readonly DerObjectIdentifier kyber1024 = new DerObjectIdentifier("1.3.6.1.4.1.2.267.8.4.4"); // pqc_kem_kyber.Branch("3"); + public static readonly DerObjectIdentifier kyber512_aes = new DerObjectIdentifier("1.3.6.1.4.1.2.267.10.2.2"); // pqc_kem_kyber.Branch("4"); + public static readonly DerObjectIdentifier kyber768_aes = new DerObjectIdentifier("1.3.6.1.4.1.2.267.10.3.3"); // pqc_kem_kyber.Branch("5"); + public static readonly DerObjectIdentifier kyber1024_aes = new DerObjectIdentifier("1.3.6.1.4.1.2.267.10.4.4"); // pqc_kem_kyber.Branch("6"); + + /** + * BIKE + */ + public static readonly DerObjectIdentifier pqc_kem_bike = bc_kem.Branch("8"); + + public static readonly DerObjectIdentifier bike128 = pqc_kem_bike.Branch("1"); + public static readonly DerObjectIdentifier bike192 = pqc_kem_bike.Branch("2"); + public static readonly DerObjectIdentifier bike256 = pqc_kem_bike.Branch("3"); + + /** + * HQC + */ + public static readonly DerObjectIdentifier pqc_kem_hqc = bc_kem.Branch("9"); + + public static readonly DerObjectIdentifier hqc128 = pqc_kem_hqc.Branch("1"); + public static readonly DerObjectIdentifier hqc192 = pqc_kem_hqc.Branch("2"); + public static readonly DerObjectIdentifier hqc256 = pqc_kem_hqc.Branch("3"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bc/BCObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bc/BCObjectIdentifiers.cs.meta new file mode 100644 index 000000000..040ff09ce --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bc/BCObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 88b600bd01c1bd84d852eaee534e8c9a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bc/LinkedCertificate.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bc/LinkedCertificate.cs new file mode 100644 index 000000000..1d949c1fe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bc/LinkedCertificate.cs @@ -0,0 +1,104 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.BC +{ + /** + * Extension to tie an alternate certificate to the containing certificate. + *

+     *     LinkedCertificate := SEQUENCE {
+     *         digest        DigestInfo,                   -- digest of PQC certificate
+     *         certLocation  GeneralName,                  -- location of PQC certificate
+     *         certIssuer    [0] Name OPTIONAL,            -- issuer of PQC cert (if different from current certificate)
+     *         cACerts       [1] GeneralNames OPTIONAL,    -- CA certificates for PQC cert (one of more locations)
+     * }
+     * 
+ */ + public class LinkedCertificate + : Asn1Encodable + { + private readonly DigestInfo mDigest; + private readonly GeneralName mCertLocation; + + private X509Name mCertIssuer; + private GeneralNames mCACerts; + + public LinkedCertificate(DigestInfo digest, GeneralName certLocation) + : this(digest, certLocation, null, null) + { + } + + public LinkedCertificate(DigestInfo digest, GeneralName certLocation, X509Name certIssuer, GeneralNames caCerts) + { + this.mDigest = digest; + this.mCertLocation = certLocation; + this.mCertIssuer = certIssuer; + this.mCACerts = caCerts; + } + + private LinkedCertificate(Asn1Sequence seq) + { + this.mDigest = DigestInfo.GetInstance(seq[0]); + this.mCertLocation = GeneralName.GetInstance(seq[1]); + + for (int i = 2; i < seq.Count; ++i) + { + Asn1TaggedObject tagged = Asn1TaggedObject.GetInstance(seq[i]); + + switch (tagged.TagNo) + { + case 0: + this.mCertIssuer = X509Name.GetInstance(tagged, false); + break; + case 1: + this.mCACerts = GeneralNames.GetInstance(tagged, false); + break; + default: + throw new ArgumentException("unknown tag in tagged field"); + } + } + } + + public static LinkedCertificate GetInstance(object obj) + { + if (obj is LinkedCertificate) + return (LinkedCertificate)obj; + if (obj != null) + return new LinkedCertificate(Asn1Sequence.GetInstance(obj)); + return null; + } + + public virtual DigestInfo Digest + { + get { return mDigest; } + } + + public virtual GeneralName CertLocation + { + get { return mCertLocation; } + } + + public virtual X509Name CertIssuer + { + get { return mCertIssuer; } + } + + public virtual GeneralNames CACerts + { + get { return mCACerts; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(mDigest, mCertLocation); + v.AddOptionalTagged(false, 0, mCertIssuer); + v.AddOptionalTagged(false, 1, mCACerts); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bc/LinkedCertificate.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bc/LinkedCertificate.cs.meta new file mode 100644 index 000000000..ce4085135 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bc/LinkedCertificate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 676a2e2175c64b649a3189bba260dba0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bsi.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bsi.meta new file mode 100644 index 000000000..211a68aed --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bsi.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d69a6d859d991b64f8b842ce92e9378d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bsi/BsiObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bsi/BsiObjectIdentifiers.cs new file mode 100644 index 000000000..f6b6e270f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bsi/BsiObjectIdentifiers.cs @@ -0,0 +1,106 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Bsi +{ + /// See https://www.bsi.bund.de/cae/servlet/contentblob/471398/publicationFile/30615/BSI-TR-03111_pdf.pdf + public abstract class BsiObjectIdentifiers + { + public static readonly DerObjectIdentifier bsi_de = new DerObjectIdentifier("0.4.0.127.0.7"); + + /* 0.4.0.127.0.7.1.1 */ + public static readonly DerObjectIdentifier id_ecc = bsi_de.Branch("1.1"); + + /* 0.4.0.127.0.7.1.1.4.1 */ + public static readonly DerObjectIdentifier ecdsa_plain_signatures = id_ecc.Branch("4.1"); + + /* 0.4.0.127.0.7.1.1.4.1.1 */ + public static readonly DerObjectIdentifier ecdsa_plain_SHA1 = ecdsa_plain_signatures.Branch("1"); + + /* 0.4.0.127.0.7.1.1.4.1.2 */ + public static readonly DerObjectIdentifier ecdsa_plain_SHA224 = ecdsa_plain_signatures.Branch("2"); + + /* 0.4.0.127.0.7.1.1.4.1.3 */ + public static readonly DerObjectIdentifier ecdsa_plain_SHA256 = ecdsa_plain_signatures.Branch("3"); + + /* 0.4.0.127.0.7.1.1.4.1.4 */ + public static readonly DerObjectIdentifier ecdsa_plain_SHA384 = ecdsa_plain_signatures.Branch("4"); + + /* 0.4.0.127.0.7.1.1.4.1.5 */ + public static readonly DerObjectIdentifier ecdsa_plain_SHA512 = ecdsa_plain_signatures.Branch("5"); + + /* 0.4.0.127.0.7.1.1.4.1.6 */ + public static readonly DerObjectIdentifier ecdsa_plain_RIPEMD160 = ecdsa_plain_signatures.Branch("6"); + + /** 0.4.0.127.0.7.1 */ + public static readonly DerObjectIdentifier algorithm = bsi_de.Branch("1"); + + public static readonly DerObjectIdentifier ecka_eg = id_ecc.Branch("5.1"); + + /** ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 OID: 0.4.0.127.0.7.1.1.5.1.1 */ + public static readonly DerObjectIdentifier ecka_eg_X963kdf = ecka_eg.Branch("1"); + + /** ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + * with hash function SHA-1 + * OID: 0.4.0.127.0.7.1.1.5.1.1.1 */ + public static readonly DerObjectIdentifier ecka_eg_X963kdf_SHA1 = ecka_eg_X963kdf.Branch("1"); + + /** ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + * with hash function SHA224 + * OID: 0.4.0.127.0.7.1.1.5.1.1.2 */ + public static readonly DerObjectIdentifier ecka_eg_X963kdf_SHA224 = ecka_eg_X963kdf.Branch("2"); + + /** ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + * with hash function SHA256 + * OID: 0.4.0.127.0.7.1.1.5.1.1.3 */ + public static readonly DerObjectIdentifier ecka_eg_X963kdf_SHA256 = ecka_eg_X963kdf.Branch("3"); + + /** ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + * with hash function SHA384 + * OID: 0.4.0.127.0.7.1.1.5.1.1.4 */ + public static readonly DerObjectIdentifier ecka_eg_X963kdf_SHA384 = ecka_eg_X963kdf.Branch("4"); + + /** ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + * with hash function SHA512 + * OID: 0.4.0.127.0.7.1.1.5.1.1.5 */ + public static readonly DerObjectIdentifier ecka_eg_X963kdf_SHA512 = ecka_eg_X963kdf.Branch("5"); + + /** ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + * with hash function RIPEMD160 + * OID: 0.4.0.127.0.7.1.1.5.1.1.6 */ + public static readonly DerObjectIdentifier ecka_eg_X963kdf_RIPEMD160 = ecka_eg_X963kdf.Branch("6"); + + /** + * Key Derivation Function for Session Keys + */ + public static readonly DerObjectIdentifier ecka_eg_SessionKDF = ecka_eg.Branch("2"); + + public static readonly DerObjectIdentifier ecka_eg_SessionKDF_3DES = ecka_eg_SessionKDF.Branch("1"); + public static readonly DerObjectIdentifier ecka_eg_SessionKDF_AES128 = ecka_eg_SessionKDF.Branch("2"); + public static readonly DerObjectIdentifier ecka_eg_SessionKDF_AES192 = ecka_eg_SessionKDF.Branch("3"); + public static readonly DerObjectIdentifier ecka_eg_SessionKDF_AES256 = ecka_eg_SessionKDF.Branch("4"); + + /* AES encryption (CBC) and authentication (CMAC) + * OID: 0.4.0.127.0.7.1.x */ + //TODO: replace "1" with correct OID + //public static readonly DerObjectIdentifier aes_cbc_cmac = algorithm.Branch("1"); + + /* AES encryption (CBC) and authentication (CMAC) with 128 bit + * OID: 0.4.0.127.0.7.1.x.y1 */ + //TODO: replace "1" with correct OID + //public static readonly DerObjectIdentifier id_aes128_CBC_CMAC = aes_cbc_cmac.Branch("1"); + + /* AES encryption (CBC) and authentication (CMAC) with 192 bit + * OID: 0.4.0.127.0.7.1.x.y2 */ + //TODO: replace "1" with correct OID + //public static readonly DerObjectIdentifier id_aes192_CBC_CMAC = aes_cbc_cmac.Branch("1"); + + /* AES encryption (CBC) and authentication (CMAC) with 256 bit + * OID: 0.4.0.127.0.7.1.x.y3 */ + //TODO: replace "1" with correct OID + //public static readonly DerObjectIdentifier id_aes256_CBC_CMAC = aes_cbc_cmac.Branch("1"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bsi/BsiObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bsi/BsiObjectIdentifiers.cs.meta new file mode 100644 index 000000000..505ba3bf9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/bsi/BsiObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c637ff969c8ac00459df1c73c136ad8b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp.meta new file mode 100644 index 000000000..5419c323e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 90e6fc2668a091f4dba719add4667fee +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CAKeyUpdAnnContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CAKeyUpdAnnContent.cs new file mode 100644 index 000000000..b69054817 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CAKeyUpdAnnContent.cs @@ -0,0 +1,57 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class CAKeyUpdAnnContent + : Asn1Encodable + { + public static CAKeyUpdAnnContent GetInstance(object obj) + { + if (obj is CAKeyUpdAnnContent content) + return content; + + if (obj is Asn1Sequence seq) + return new CAKeyUpdAnnContent(seq); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), nameof(obj)); + } + + private readonly CmpCertificate m_oldWithNew; + private readonly CmpCertificate m_newWithOld; + private readonly CmpCertificate m_newWithNew; + + private CAKeyUpdAnnContent(Asn1Sequence seq) + { + m_oldWithNew = CmpCertificate.GetInstance(seq[0]); + m_newWithOld = CmpCertificate.GetInstance(seq[1]); + m_newWithNew = CmpCertificate.GetInstance(seq[2]); + } + + public virtual CmpCertificate OldWithNew => m_oldWithNew; + + public virtual CmpCertificate NewWithOld => m_newWithOld; + + public virtual CmpCertificate NewWithNew => m_newWithNew; + + /** + *
+		 * CAKeyUpdAnnContent ::= SEQUENCE {
+		 *                             oldWithNew   CmpCertificate, -- old pub signed with new priv
+		 *                             newWithOld   CmpCertificate, -- new pub signed with old priv
+		 *                             newWithNew   CmpCertificate  -- new pub signed with new priv
+		 *  }
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(m_oldWithNew, m_newWithOld, m_newWithNew); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CAKeyUpdAnnContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CAKeyUpdAnnContent.cs.meta new file mode 100644 index 000000000..fa080768f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CAKeyUpdAnnContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 150c338559420ab47bb4a131373c25e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertAnnContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertAnnContent.cs new file mode 100644 index 000000000..f3f210643 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertAnnContent.cs @@ -0,0 +1,76 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + * CertAnnContent ::= CMPCertificate + */ + public class CertAnnContent + : CmpCertificate + { + public static new CertAnnContent GetInstance(object obj) + { + // TODO[cmp] + if (obj == null) + return null; + + if (obj is CertAnnContent content) + return content; + + if (obj is CmpCertificate cmpCertificate) + return GetInstance(cmpCertificate.GetEncoded()); + + if (obj is byte[] bs) + { + try + { + obj = Asn1Object.FromByteArray(bs); + } + catch (IOException) + { + throw new ArgumentException("Invalid encoding in CertAnnContent"); + } + } + + if (obj is Asn1Sequence) + return new CertAnnContent(X509CertificateStructure.GetInstance(obj)); + + // TODO[cmp] + if (obj is Asn1TaggedObject taggedObject) + return new CertAnnContent(taggedObject.TagNo, taggedObject.GetObject()); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), nameof(obj)); + } + + public static new CertAnnContent GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + // TODO[cmp] + if (taggedObject == null) + return null; + + if (!declaredExplicit) + throw new ArgumentException("tag must be explicit"); + + // TODO[cmp] + return GetInstance(taggedObject.GetObject()); + } + + public CertAnnContent(int type, Asn1Object otherCert) + : base(type, otherCert) + { + } + + public CertAnnContent(X509CertificateStructure x509v3PKCert) + : base(x509v3PKCert) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertAnnContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertAnnContent.cs.meta new file mode 100644 index 000000000..0755ed35a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertAnnContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac1d7e1613f79474e99c1cb95dbda39d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertConfirmContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertConfirmContent.cs new file mode 100644 index 000000000..018537bc0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertConfirmContent.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class CertConfirmContent + : Asn1Encodable + { + public static CertConfirmContent GetInstance(object obj) + { + if (obj is CertConfirmContent content) + return content; + + if (obj is Asn1Sequence seq) + return new CertConfirmContent(seq); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), nameof(obj)); + } + + private readonly Asn1Sequence m_content; + + private CertConfirmContent(Asn1Sequence seq) + { + m_content = seq; + } + + public virtual CertStatus[] ToCertStatusArray() + { + return m_content.MapElements(CertStatus.GetInstance); + } + + /** + *
+		 * CertConfirmContent ::= SEQUENCE OF CertStatus
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return m_content; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertConfirmContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertConfirmContent.cs.meta new file mode 100644 index 000000000..545a300f9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertConfirmContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b732b337a24c214dba59e936c4ee227 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertOrEncCert.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertOrEncCert.cs new file mode 100644 index 000000000..837feec99 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertOrEncCert.cs @@ -0,0 +1,90 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class CertOrEncCert + : Asn1Encodable, IAsn1Choice + { + public static CertOrEncCert GetInstance(object obj) + { + if (obj is CertOrEncCert certOrEncCert) + return certOrEncCert; + + if (obj is Asn1TaggedObject taggedObject) + return new CertOrEncCert(taggedObject); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), nameof(obj)); + } + + private readonly CmpCertificate m_certificate; + private readonly EncryptedKey m_encryptedCert; + + private CertOrEncCert(Asn1TaggedObject taggedObject) + { + if (taggedObject.TagNo == 0) + { + m_certificate = CmpCertificate.GetInstance(taggedObject.GetObject()); + } + else if (taggedObject.TagNo == 1) + { + m_encryptedCert = EncryptedKey.GetInstance(taggedObject.GetObject()); + } + else + { + throw new ArgumentException("unknown tag: " + taggedObject.TagNo, nameof(taggedObject)); + } + } + + public CertOrEncCert(CmpCertificate certificate) + { + if (certificate == null) + throw new ArgumentNullException(nameof(certificate)); + + m_certificate = certificate; + } + + public CertOrEncCert(EncryptedValue encryptedValue) + { + if (encryptedValue == null) + throw new ArgumentNullException(nameof(encryptedValue)); + + m_encryptedCert = new EncryptedKey(encryptedValue); + } + + public CertOrEncCert(EncryptedKey encryptedKey) + { + if (encryptedKey == null) + throw new ArgumentNullException(nameof(encryptedKey)); + + m_encryptedCert = encryptedKey; + } + + public virtual CmpCertificate Certificate => m_certificate; + + public virtual EncryptedKey EncryptedCert => m_encryptedCert; + + /** + *
+		 * CertOrEncCert ::= CHOICE {
+		 *                      certificate     [0] CMPCertificate,
+		 *                      encryptedCert   [1] EncryptedKey
+		 *           }
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + if (m_certificate != null) + return new DerTaggedObject(true, 0, m_certificate); + + return new DerTaggedObject(true, 1, m_encryptedCert); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertOrEncCert.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertOrEncCert.cs.meta new file mode 100644 index 000000000..457de2709 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertOrEncCert.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce884c7a300e0334c910c96cd680bfef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertRepMessage.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertRepMessage.cs new file mode 100644 index 000000000..cbf551fd9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertRepMessage.cs @@ -0,0 +1,81 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class CertRepMessage + : Asn1Encodable + { + public static CertRepMessage GetInstance(object obj) + { + if (obj is CertRepMessage certRepMessage) + return certRepMessage; + + if (obj != null) + return new CertRepMessage(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly Asn1Sequence m_caPubs; + private readonly Asn1Sequence m_response; + + private CertRepMessage(Asn1Sequence seq) + { + int index = 0; + + if (seq.Count > 1) + { + m_caPubs = Asn1Sequence.GetInstance((Asn1TaggedObject)seq[index++], true); + } + + m_response = Asn1Sequence.GetInstance(seq[index]); + } + + public CertRepMessage(CmpCertificate[] caPubs, CertResponse[] response) + { + if (response == null) + throw new ArgumentNullException(nameof(response)); + + if (caPubs != null) + { + m_caPubs = new DerSequence(caPubs); + } + + m_response = new DerSequence(response); + } + + public virtual CmpCertificate[] GetCAPubs() + { + return m_caPubs == null ? null : m_caPubs.MapElements(CmpCertificate.GetInstance); + } + + public virtual CertResponse[] GetResponse() + { + return m_response.MapElements(CertResponse.GetInstance); + } + + /** + *
+		 * CertRepMessage ::= SEQUENCE {
+		 *                          caPubs       [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
+		 *                                                                             OPTIONAL,
+		 *                          response         SEQUENCE OF CertResponse
+		 * }
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(2); + v.AddOptionalTagged(true, 1, m_caPubs); + v.Add(m_response); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertRepMessage.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertRepMessage.cs.meta new file mode 100644 index 000000000..3b070b88c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertRepMessage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bfe88edcc13d18b449bf9f9319595135 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertReqTemplateContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertReqTemplateContent.cs new file mode 100644 index 000000000..497050d31 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertReqTemplateContent.cs @@ -0,0 +1,71 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + * GenMsg: {id-it 19}, < absent > + * GenRep: {id-it 19}, CertReqTemplateContent | < absent > + *

+ * CertReqTemplateValue ::= CertReqTemplateContent + *

+ * CertReqTemplateContent ::= SEQUENCE { + * certTemplate CertTemplate, + * keySpec Controls OPTIONAL } + *

+ * Controls ::= SEQUENCE SIZE (1..MAX) OF AttributeTypeAndValue + *

+ */ + public class CertReqTemplateContent + : Asn1Encodable + { + public static CertReqTemplateContent GetInstance(object obj) + { + if (obj is CertReqTemplateContent certReqTemplateContent) + return certReqTemplateContent; + + if (obj != null) + return new CertReqTemplateContent(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly CertTemplate m_certTemplate; + private readonly Asn1Sequence m_keySpec; + + private CertReqTemplateContent(Asn1Sequence seq) + { + if (seq.Count != 1 && seq.Count != 2) + throw new ArgumentException("expected sequence size of 1 or 2"); + + m_certTemplate = CertTemplate.GetInstance(seq[0]); + + if (seq.Count > 1) + { + m_keySpec = Asn1Sequence.GetInstance(seq[1]); + } + } + + public CertReqTemplateContent(CertTemplate certTemplate, Asn1Sequence keySpec) + { + m_certTemplate = certTemplate; + m_keySpec = keySpec; + } + + public virtual CertTemplate CertTemplate => m_certTemplate; + + public virtual Asn1Sequence KeySpec => m_keySpec; + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(m_certTemplate); + v.AddOptional(m_keySpec); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertReqTemplateContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertReqTemplateContent.cs.meta new file mode 100644 index 000000000..281d5e26a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertReqTemplateContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be9a5338c205ad742b1ecd78f88ba2b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertResponse.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertResponse.cs new file mode 100644 index 000000000..ed392de25 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertResponse.cs @@ -0,0 +1,104 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class CertResponse + : Asn1Encodable + { + public static CertResponse GetInstance(object obj) + { + if (obj is CertResponse certResponse) + return certResponse; + + if (obj != null) + return new CertResponse(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly DerInteger m_certReqId; + private readonly PkiStatusInfo m_status; + private readonly CertifiedKeyPair m_certifiedKeyPair; + private readonly Asn1OctetString m_rspInfo; + + private CertResponse(Asn1Sequence seq) + { + m_certReqId = DerInteger.GetInstance(seq[0]); + m_status = PkiStatusInfo.GetInstance(seq[1]); + + if (seq.Count >= 3) + { + if (seq.Count == 3) + { + Asn1Encodable o = seq[2]; + if (o is Asn1OctetString) + { + m_rspInfo = Asn1OctetString.GetInstance(o); + } + else + { + m_certifiedKeyPair = CertifiedKeyPair.GetInstance(o); + } + } + else + { + m_certifiedKeyPair = CertifiedKeyPair.GetInstance(seq[2]); + m_rspInfo = Asn1OctetString.GetInstance(seq[3]); + } + } + } + + public CertResponse(DerInteger certReqId, PkiStatusInfo status) + : this(certReqId, status, null, null) + { + } + + public CertResponse(DerInteger certReqId, PkiStatusInfo status, CertifiedKeyPair certifiedKeyPair, + Asn1OctetString rspInfo) + { + if (certReqId == null) + throw new ArgumentNullException(nameof(certReqId)); + + if (status == null) + throw new ArgumentNullException(nameof(status)); + + m_certReqId = certReqId; + m_status = status; + m_certifiedKeyPair = certifiedKeyPair; + m_rspInfo = rspInfo; + } + + public virtual DerInteger CertReqID => m_certReqId; + + public virtual PkiStatusInfo Status => m_status; + + public virtual CertifiedKeyPair CertifiedKeyPair => m_certifiedKeyPair; + + /** + *
+		 * CertResponse ::= SEQUENCE {
+		 *                            certReqId           INTEGER,
+		 *                            -- to match this response with corresponding request (a value
+		 *                            -- of -1 is to be used if certReqId is not specified in the
+		 *                            -- corresponding request)
+		 *                            status              PKIStatusInfo,
+		 *                            certifiedKeyPair    CertifiedKeyPair    OPTIONAL,
+		 *                            rspInfo             OCTET STRING        OPTIONAL
+		 *                            -- analogous to the id-regInfo-utf8Pairs string defined
+		 *                            -- for regInfo in CertReqMsg [CRMF]
+		 *             }
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(m_certReqId, m_status); + v.AddOptional(m_certifiedKeyPair, m_rspInfo); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertResponse.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertResponse.cs.meta new file mode 100644 index 000000000..76cf26050 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertResponse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 35d34c1b3a2dfb14a82957b9abb1a115 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertStatus.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertStatus.cs new file mode 100644 index 000000000..646fa56ed --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertStatus.cs @@ -0,0 +1,107 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class CertStatus + : Asn1Encodable + { + public static CertStatus GetInstance(object obj) + { + if (obj is CertStatus certStatus) + return certStatus; + + if (obj != null) + return new CertStatus(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly Asn1OctetString m_certHash; + private readonly DerInteger m_certReqID; + private readonly PkiStatusInfo m_statusInfo; + private readonly AlgorithmIdentifier m_hashAlg; + + private CertStatus(Asn1Sequence seq) + { + m_certHash = Asn1OctetString.GetInstance(seq[0]); + m_certReqID = DerInteger.GetInstance(seq[1]); + + if (seq.Count > 2) + { + for (int t = 2; t < seq.Count; t++) + { + Asn1Object p = seq[t].ToAsn1Object(); + if (p is Asn1Sequence s) + { + m_statusInfo = PkiStatusInfo.GetInstance(s); + } + if (p is Asn1TaggedObject dto) + { + if (dto.TagNo != 0) + throw new ArgumentException("unknown tag " + dto.TagNo); + + m_hashAlg = AlgorithmIdentifier.GetInstance(dto, true); + } + } + } + } + + public CertStatus(byte[] certHash, BigInteger certReqID) + { + m_certHash = new DerOctetString(certHash); + m_certReqID = new DerInteger(certReqID); + } + + public CertStatus(byte[] certHash, BigInteger certReqID, PkiStatusInfo statusInfo) + { + m_certHash = new DerOctetString(certHash); + m_certReqID = new DerInteger(certReqID); + m_statusInfo = statusInfo; + } + + public CertStatus(byte[] certHash, BigInteger certReqID, PkiStatusInfo statusInfo, AlgorithmIdentifier hashAlg) + { + m_certHash = new DerOctetString(certHash); + m_certReqID = new DerInteger(certReqID); + m_statusInfo = statusInfo; + m_hashAlg = hashAlg; + } + + public virtual Asn1OctetString CertHash => m_certHash; + + public virtual DerInteger CertReqID => m_certReqID; + + public virtual PkiStatusInfo StatusInfo => m_statusInfo; + + public virtual AlgorithmIdentifier HashAlg => m_hashAlg; + + /** + *
+         *
+         *  CertStatus ::= SEQUENCE {
+         *     certHash    OCTET STRING,
+         *     certReqId   INTEGER,
+         *     statusInfo  PKIStatusInfo OPTIONAL,
+         *     hashAlg [0] AlgorithmIdentifier{DIGEST-ALGORITHM, {...}} OPTIONAL
+         *   }
+         *
+         * 
+ * + * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(m_certHash, m_certReqID); + v.AddOptional(m_statusInfo); + v.AddOptionalTagged(true, 0, m_hashAlg); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertStatus.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertStatus.cs.meta new file mode 100644 index 000000000..271c60e3d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertStatus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93801c7195f300e47aefca0ff93ee8f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertifiedKeyPair.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertifiedKeyPair.cs new file mode 100644 index 000000000..a446ec916 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertifiedKeyPair.cs @@ -0,0 +1,102 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class CertifiedKeyPair + : Asn1Encodable + { + public static CertifiedKeyPair GetInstance(object obj) + { + if (obj is CertifiedKeyPair certifiedKeyPair) + return certifiedKeyPair; + + if (obj != null) + return new CertifiedKeyPair(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly CertOrEncCert m_certOrEncCert; + private readonly EncryptedKey m_privateKey; + private readonly PkiPublicationInfo m_publicationInfo; + + private CertifiedKeyPair(Asn1Sequence seq) + { + m_certOrEncCert = CertOrEncCert.GetInstance(seq[0]); + + if (seq.Count >= 2) + { + if (seq.Count == 2) + { + Asn1TaggedObject tagged = Asn1TaggedObject.GetInstance(seq[1]); + if (tagged.TagNo == 0) + { + m_privateKey = EncryptedKey.GetInstance(tagged.GetObject()); + } + else + { + m_publicationInfo = PkiPublicationInfo.GetInstance(tagged.GetObject()); + } + } + else + { + m_privateKey = EncryptedKey.GetInstance(Asn1TaggedObject.GetInstance(seq[1]).GetObject()); + m_publicationInfo = PkiPublicationInfo.GetInstance(Asn1TaggedObject.GetInstance(seq[2]).GetObject()); + } + } + } + + public CertifiedKeyPair(CertOrEncCert certOrEncCert) + : this(certOrEncCert, (EncryptedKey)null, null) + { + } + + public CertifiedKeyPair(CertOrEncCert certOrEncCert, EncryptedValue privateKey, + PkiPublicationInfo publicationInfo) + : this(certOrEncCert, privateKey == null ? null : new EncryptedKey(privateKey), publicationInfo) + { + } + + public CertifiedKeyPair(CertOrEncCert certOrEncCert, EncryptedKey privateKey, + PkiPublicationInfo publicationInfo) + { + if (certOrEncCert == null) + throw new ArgumentNullException(nameof(certOrEncCert)); + + m_certOrEncCert = certOrEncCert; + m_privateKey = privateKey; + m_publicationInfo = publicationInfo; + } + + public virtual CertOrEncCert CertOrEncCert => m_certOrEncCert; + + public virtual EncryptedKey PrivateKey => m_privateKey; + + public virtual PkiPublicationInfo PublicationInfo => m_publicationInfo; + + /** + *
+		 * CertifiedKeyPair ::= SEQUENCE {
+		 *                                  certOrEncCert       CertOrEncCert,
+		 *                                  privateKey      [0] EncryptedValue      OPTIONAL,
+		 *                                  -- see [CRMF] for comment on encoding
+		 *                                  publicationInfo [1] PKIPublicationInfo  OPTIONAL
+		 *       }
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(m_certOrEncCert); + v.AddOptionalTagged(true, 0, m_privateKey); + v.AddOptionalTagged(true, 1, m_publicationInfo); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertifiedKeyPair.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertifiedKeyPair.cs.meta new file mode 100644 index 000000000..10edf2d20 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CertifiedKeyPair.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f1ce79d23a53ca47979c3dd7e561fbc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/Challenge.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/Challenge.cs new file mode 100644 index 000000000..093ea91fe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/Challenge.cs @@ -0,0 +1,166 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + *
+     * Challenge ::= SEQUENCE {
+     *          owf                 AlgorithmIdentifier  OPTIONAL,
+     *
+     *          -- MUST be present in the first Challenge; MAY be omitted in
+     *          -- any subsequent Challenge in POPODecKeyChallContent (if
+     *          -- omitted, then the owf used in the immediately preceding
+     *          -- Challenge is to be used).
+     *
+     *          witness             OCTET STRING,
+     *          -- the result of applying the one-way function (owf) to a
+     *          -- randomly-generated INTEGER, A.  [Note that a different
+     *          -- INTEGER MUST be used for each Challenge.]
+     *          challenge           OCTET STRING
+     *          -- the encryption (under the public key for which the cert.
+     *          -- request is being made) of Rand, where Rand is specified as
+     *          --   Rand ::= SEQUENCE {
+     *          --      int      INTEGER,
+     *          --       - the randomly-generated INTEGER A (above)
+     *          --      sender   GeneralName
+     *          --       - the sender's name (as included in PKIHeader)
+     *          --   }
+     *      }
+     *      
+ */ + public class Challenge + : Asn1Encodable + { + public static Challenge GetInstance(object obj) + { + if (obj is Challenge challenge) + return challenge; + + if (obj != null) + return new Challenge(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly AlgorithmIdentifier m_owf; + private readonly Asn1OctetString m_witness; + private readonly Asn1OctetString m_challenge; + + private Challenge(Asn1Sequence seq) + { + int index = 0; + + if (seq.Count == 3) + { + m_owf = AlgorithmIdentifier.GetInstance(seq[index++]); + } + + m_witness = Asn1OctetString.GetInstance(seq[index++]); + m_challenge = Asn1OctetString.GetInstance(seq[index]); + } + + public Challenge(byte[] witness, byte[] challenge) + : this(null, witness, challenge) + { + } + + public Challenge(AlgorithmIdentifier owf, byte[] witness, byte[] challenge) + { + m_owf = owf; + m_witness = new DerOctetString(witness); + m_challenge = new DerOctetString(challenge); + } + + public virtual AlgorithmIdentifier Owf => m_owf; + + public virtual Asn1OctetString Witness => m_witness; + + public virtual Asn1OctetString ChallengeValue => m_challenge; + + /** + *
+		 * Challenge ::= SEQUENCE {
+		 *                 owf                 AlgorithmIdentifier  OPTIONAL,
+		 *
+		 *                 -- MUST be present in the first Challenge; MAY be omitted in
+		 *                 -- any subsequent Challenge in POPODecKeyChallContent (if
+		 *                 -- omitted, then the owf used in the immediately preceding
+		 *                 -- Challenge is to be used).
+		 *
+		 *                 witness             OCTET STRING,
+		 *                 -- the result of applying the one-way function (owf) to a
+		 *                 -- randomly-generated INTEGER, A.  [Note that a different
+		 *                 -- INTEGER MUST be used for each Challenge.]
+		 *                 challenge           OCTET STRING
+		 *                 -- the encryption (under the public key for which the cert.
+		 *                 -- request is being made) of Rand, where Rand is specified as
+		 *                 --   Rand ::= SEQUENCE {
+		 *                 --      int      INTEGER,
+		 *                 --       - the randomly-generated INTEGER A (above)
+		 *                 --      sender   GeneralName
+		 *                 --       - the sender's name (as included in PKIHeader)
+		 *                 --   }
+		 *      }
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptional(m_owf); + v.Add(m_witness, m_challenge); + return new DerSequence(v); + } + + /** + * Rand is the inner type + */ + public class Rand + : Asn1Encodable + { + public static Rand GetInstance(object obj) + { + if (obj is Rand rand) + return rand; + + if (obj != null) + return new Rand(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly DerInteger m_intVal; + private readonly GeneralName m_sender; + + public Rand(DerInteger intVal, GeneralName sender) + { + m_intVal = intVal; + m_sender = sender; + } + + public Rand(Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("expected sequence size of 2"); + + m_intVal = DerInteger.GetInstance(seq[0]); + m_sender = GeneralName.GetInstance(seq[1]); + } + + public virtual DerInteger IntVal => m_intVal; + + public virtual GeneralName Sender => m_sender; + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(m_intVal, m_sender); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/Challenge.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/Challenge.cs.meta new file mode 100644 index 000000000..2d13e2823 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/Challenge.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ab7eeb71d93e81e498a0911105158b6d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CmpCertificate.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CmpCertificate.cs new file mode 100644 index 000000000..daf7c8c66 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CmpCertificate.cs @@ -0,0 +1,116 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class CmpCertificate + : Asn1Encodable, IAsn1Choice + { + public static CmpCertificate GetInstance(object obj) + { + // TODO[cmp] Review this whole metho + + if (obj == null) + return null; + + if (obj is CmpCertificate cmpCertificate) + return cmpCertificate; + + if (obj is byte[] bs) + { + try + { + obj = Asn1Object.FromByteArray(bs); + } + catch (IOException) + { + throw new ArgumentException("Invalid encoding in CmpCertificate"); + } + } + + if (obj is Asn1Sequence) + return new CmpCertificate(X509CertificateStructure.GetInstance(obj)); + + if (obj is Asn1TaggedObject taggedObject) + return new CmpCertificate(taggedObject.TagNo, taggedObject.GetObject()); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), nameof(obj)); + } + + public static CmpCertificate GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + // TODO[cmp] + if (taggedObject == null) + return null; + + if (!declaredExplicit) + throw new ArgumentException("tag must be explicit"); + + // TODO[cmp] + return GetInstance(taggedObject.GetObject()); + } + + private readonly X509CertificateStructure m_x509v3PKCert; + + private readonly int m_otherTagValue; + private readonly Asn1Encodable m_otherCert; + + /** + * Note: the addition of other certificates is a BC extension. If you use this constructor they + * will be added with an explicit tag value of type. + * + * @param type the type of the certificate (used as a tag value). + * @param otherCert the object representing the certificate + */ + public CmpCertificate(int type, Asn1Encodable otherCert) + { + m_otherTagValue = type; + m_otherCert = otherCert; + } + + public CmpCertificate(X509CertificateStructure x509v3PKCert) + { + if (x509v3PKCert.Version != 3) + throw new ArgumentException("only version 3 certificates allowed", nameof(x509v3PKCert)); + + m_x509v3PKCert = x509v3PKCert; + } + + public virtual bool IsX509v3PKCert => m_x509v3PKCert != null; + + public virtual X509CertificateStructure X509v3PKCert => m_x509v3PKCert; + + public virtual int OtherCertTag => m_otherTagValue; + + public virtual Asn1Encodable OtherCert => m_otherCert; + + /** + *
+         * CMPCertificate ::= CHOICE {
+         *            x509v3PKCert        Certificate
+         *            x509v2AttrCert      [1] AttributeCertificate
+         *  }
+         * 
+ * Note: the addition of attribute certificates is a BC extension. + * + * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + if (m_otherCert != null) + { + // explicit following CMP conventions + return new DerTaggedObject(true, m_otherTagValue, m_otherCert); + } + + return m_x509v3PKCert.ToAsn1Object(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CmpCertificate.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CmpCertificate.cs.meta new file mode 100644 index 000000000..c738f165c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CmpCertificate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 887d3ec3a21a312428d4cbe2e4e539ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CmpObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CmpObjectIdentifiers.cs new file mode 100644 index 000000000..8f06d3d38 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CmpObjectIdentifiers.cs @@ -0,0 +1,262 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public static class CmpObjectIdentifiers + { + // RFC 4210 + + /** + * id-PasswordBasedMac OBJECT IDENTIFIER ::= {1 2 840 113533 7 66 13} + */ + public static readonly DerObjectIdentifier passwordBasedMac = new DerObjectIdentifier("1.2.840.113533.7.66.13"); + + /** + * id-DHBasedMac OBJECT IDENTIFIER ::= {1 2 840 113533 7 66 30} + */ + public static readonly DerObjectIdentifier dhBasedMac = new DerObjectIdentifier("1.2.840.113533.7.66.30"); + + // Example InfoTypeAndValue contents include, but are not limited + // to, the following (un-comment in this ASN.1 module and use as + // appropriate for a given environment): + // + // id-it-caProtEncCert OBJECT IDENTIFIER ::= {id-it 1} + // CAProtEncCertValue ::= CMPCertificate + // id-it-signKeyPairTypes OBJECT IDENTIFIER ::= {id-it 2} + // SignKeyPairTypesValue ::= SEQUENCE OF AlgorithmIdentifier + // id-it-encKeyPairTypes OBJECT IDENTIFIER ::= {id-it 3} + // EncKeyPairTypesValue ::= SEQUENCE OF AlgorithmIdentifier + // id-it-preferredSymmAlg OBJECT IDENTIFIER ::= {id-it 4} + // PreferredSymmAlgValue ::= AlgorithmIdentifier + // id-it-caKeyUpdateInfo OBJECT IDENTIFIER ::= {id-it 5} + // CAKeyUpdateInfoValue ::= CAKeyUpdAnnContent + // id-it-currentCRL OBJECT IDENTIFIER ::= {id-it 6} + // CurrentCRLValue ::= CertificateList + // id-it-unsupportedOIDs OBJECT IDENTIFIER ::= {id-it 7} + // UnsupportedOIDsValue ::= SEQUENCE OF OBJECT IDENTIFIER + // id-it-keyPairParamReq OBJECT IDENTIFIER ::= {id-it 10} + // KeyPairParamReqValue ::= OBJECT IDENTIFIER + // id-it-keyPairParamRep OBJECT IDENTIFIER ::= {id-it 11} + // KeyPairParamRepValue ::= AlgorithmIdentifer + // id-it-revPassphrase OBJECT IDENTIFIER ::= {id-it 12} + // RevPassphraseValue ::= EncryptedValue + // id-it-implicitConfirm OBJECT IDENTIFIER ::= {id-it 13} + // ImplicitConfirmValue ::= NULL + // id-it-confirmWaitTime OBJECT IDENTIFIER ::= {id-it 14} + // ConfirmWaitTimeValue ::= GeneralizedTime + // id-it-origPKIMessage OBJECT IDENTIFIER ::= {id-it 15} + // OrigPKIMessageValue ::= PKIMessages + // id-it-suppLangTags OBJECT IDENTIFIER ::= {id-it 16} + // SuppLangTagsValue ::= SEQUENCE OF UTF8String + // id-it-certProfile OBJECT IDENTIFIER ::= {id-it 21} + // CertProfileValue ::= SEQUENCE SIZE (1..MAX) OF UTF8String + // where + // + // id-pkix OBJECT IDENTIFIER ::= { + // iso(1) identified-organization(3) + // dod(6) internet(1) security(5) mechanisms(5) pkix(7)} + // and + // id-it OBJECT IDENTIFIER ::= {id-pkix 4} + + /** RFC 4120: it-id: PKIX.4 = 1.3.6.1.5.5.7.4 */ + + + /** + * RFC 4120: 1.3.6.1.5.5.7.4.1 + */ + public static readonly DerObjectIdentifier it_caProtEncCert = new DerObjectIdentifier("1.3.6.1.5.5.7.4.1"); + /** + * RFC 4120: 1.3.6.1.5.5.7.4.2 + */ + public static readonly DerObjectIdentifier it_signKeyPairTypes = new DerObjectIdentifier("1.3.6.1.5.5.7.4.2"); + /** + * RFC 4120: 1.3.6.1.5.5.7.4.3 + */ + public static readonly DerObjectIdentifier it_encKeyPairTypes = new DerObjectIdentifier("1.3.6.1.5.5.7.4.3"); + /** + * RFC 4120: 1.3.6.1.5.5.7.4.4 + */ + public static readonly DerObjectIdentifier it_preferredSymAlg = new DerObjectIdentifier("1.3.6.1.5.5.7.4.4"); + /** + * RFC 4120: 1.3.6.1.5.5.7.4.5 + */ + public static readonly DerObjectIdentifier it_caKeyUpdateInfo = new DerObjectIdentifier("1.3.6.1.5.5.7.4.5"); + /** + * RFC 4120: 1.3.6.1.5.5.7.4.6 + */ + public static readonly DerObjectIdentifier it_currentCRL = new DerObjectIdentifier("1.3.6.1.5.5.7.4.6"); + /** + * RFC 4120: 1.3.6.1.5.5.7.4.7 + */ + public static readonly DerObjectIdentifier it_unsupportedOIDs = new DerObjectIdentifier("1.3.6.1.5.5.7.4.7"); + /** + * RFC 4120: 1.3.6.1.5.5.7.4.10 + */ + public static readonly DerObjectIdentifier it_keyPairParamReq = new DerObjectIdentifier("1.3.6.1.5.5.7.4.10"); + /** + * RFC 4120: 1.3.6.1.5.5.7.4.11 + */ + public static readonly DerObjectIdentifier it_keyPairParamRep = new DerObjectIdentifier("1.3.6.1.5.5.7.4.11"); + /** + * RFC 4120: 1.3.6.1.5.5.7.4.12 + */ + public static readonly DerObjectIdentifier it_revPassphrase = new DerObjectIdentifier("1.3.6.1.5.5.7.4.12"); + /** + * RFC 4120: 1.3.6.1.5.5.7.4.13 + */ + public static readonly DerObjectIdentifier it_implicitConfirm = new DerObjectIdentifier("1.3.6.1.5.5.7.4.13"); + /** + * RFC 4120: 1.3.6.1.5.5.7.4.14 + */ + public static readonly DerObjectIdentifier it_confirmWaitTime = new DerObjectIdentifier("1.3.6.1.5.5.7.4.14"); + /** + * RFC 4120: 1.3.6.1.5.5.7.4.15 + */ + public static readonly DerObjectIdentifier it_origPKIMessage = new DerObjectIdentifier("1.3.6.1.5.5.7.4.15"); + /** + * RFC 4120: 1.3.6.1.5.5.7.4.16 + */ + public static readonly DerObjectIdentifier it_suppLangTags = new DerObjectIdentifier("1.3.6.1.5.5.7.4.16"); + + /** + * Update 16, RFC 4210 + * {id-it 17} + */ + public static readonly DerObjectIdentifier id_it_caCerts = new DerObjectIdentifier("1.3.6.1.5.5.7.4.17"); + + + /** + * Update 16, RFC 4210 + * GenRep: {id-it 18}, RootCaKeyUpdateContent + */ + public static readonly DerObjectIdentifier id_it_rootCaKeyUpdate = new DerObjectIdentifier("1.3.6.1.5.5.7.4.18"); + + + /** + * Update 16, RFC 4210 + * {id-it 19} + */ + public static readonly DerObjectIdentifier id_it_certReqTemplate = new DerObjectIdentifier("1.3.6.1.5.5.7.4.19"); + + + /** + * Update 16, RFC 4210 + * GenMsg: {id-it 20}, RootCaCertValue + */ + public static readonly DerObjectIdentifier id_it_rootCaCert = new DerObjectIdentifier("1.3.6.1.5.5.7.4.20"); + + /** + * Update-16 to RFC 4210 + * id-it-certProfile OBJECT IDENTIFIER ::= {id-it 21} + */ + public static readonly DerObjectIdentifier id_it_certProfile = new DerObjectIdentifier("1.3.6.1.5.5.7.4.21"); + + public static readonly DerObjectIdentifier id_it_crlStatusList = new DerObjectIdentifier("1.3.6.1.5.5.7.4.22"); + + public static readonly DerObjectIdentifier id_it_crls = new DerObjectIdentifier("1.3.6.1.5.5.7.4.23"); + + // Not yet formally defined. + + //public static readonly DerObjectIdentifier id_it_crlStatusList = null; + //public static readonly DerObjectIdentifier id_it_crls = null; + + + // RFC 4211 + + // id-pkix OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) + // dod(6) internet(1) security(5) mechanisms(5) pkix(7) } + // + // arc for Internet X.509 PKI protocols and their components + // id-pkip OBJECT IDENTIFIER :: { id-pkix pkip(5) } + // + // arc for Registration Controls in CRMF + // id-regCtrl OBJECT IDENTIFIER ::= { id-pkip regCtrl(1) } + // + // arc for Registration Info in CRMF + // id-regInfo OBJECT IDENTIFIER ::= { id-pkip id-regInfo(2) } + + /** + * RFC 4211: it-pkip: PKIX.5 = 1.3.6.1.5.5.7.5 + */ + public static readonly DerObjectIdentifier id_pkip = new DerObjectIdentifier("1.3.6.1.5.5.7.5"); + + /** + * RFC 4211: it-regCtrl: 1.3.6.1.5.5.7.5.1 + */ + public static readonly DerObjectIdentifier id_regCtrl = new DerObjectIdentifier("1.3.6.1.5.5.7.5.1"); + /** + * RFC 4211: it-regInfo: 1.3.6.1.5.5.7.5.2 + */ + public static readonly DerObjectIdentifier id_regInfo = new DerObjectIdentifier("1.3.6.1.5.5.7.5.2"); + + + /** + * 1.3.6.1.5.5.7.5.1.1 + */ + public static readonly DerObjectIdentifier regCtrl_regToken = new DerObjectIdentifier("1.3.6.1.5.5.7.5.1.1"); + /** + * 1.3.6.1.5.5.7.5.1.2 + */ + public static readonly DerObjectIdentifier regCtrl_authenticator = new DerObjectIdentifier("1.3.6.1.5.5.7.5.1.2"); + /** + * 1.3.6.1.5.5.7.5.1.3 + */ + public static readonly DerObjectIdentifier regCtrl_pkiPublicationInfo = new DerObjectIdentifier("1.3.6.1.5.5.7.5.1.3"); + /** + * 1.3.6.1.5.5.7.5.1.4 + */ + public static readonly DerObjectIdentifier regCtrl_pkiArchiveOptions = new DerObjectIdentifier("1.3.6.1.5.5.7.5.1.4"); + /** + * 1.3.6.1.5.5.7.5.1.5 + */ + public static readonly DerObjectIdentifier regCtrl_oldCertID = new DerObjectIdentifier("1.3.6.1.5.5.7.5.1.5"); + /** + * 1.3.6.1.5.5.7.5.1.6 + */ + public static readonly DerObjectIdentifier regCtrl_protocolEncrKey = new DerObjectIdentifier("1.3.6.1.5.5.7.5.1.6"); + + /** + * From RFC4210: + * id-regCtrl-altCertTemplate OBJECT IDENTIFIER ::= {id-regCtrl 7}; 1.3.6.1.5.5.7.1.7 + */ + public static readonly DerObjectIdentifier regCtrl_altCertTemplate = new DerObjectIdentifier("1.3.6.1.5.5.7.5.1.7"); + + /** + * RFC 4211: it-regInfo-utf8Pairs: 1.3.6.1.5.5.7.5.2.1 + */ + public static readonly DerObjectIdentifier regInfo_utf8Pairs = new DerObjectIdentifier("1.3.6.1.5.5.7.5.2.1"); + /** + * RFC 4211: it-regInfo-certReq: 1.3.6.1.5.5.7.5.2.1 + */ + public static readonly DerObjectIdentifier regInfo_certReq = new DerObjectIdentifier("1.3.6.1.5.5.7.5.2.2"); + + /** + * 1.2.840.113549.1.9.16.1.21 + *

+ * id-ct OBJECT IDENTIFIER ::= { id-smime 1 } -- content types + *

+ * id-ct-encKeyWithID OBJECT IDENTIFIER ::= {id-ct 21} + *

+ */ + public static readonly DerObjectIdentifier ct_encKeyWithID = new DerObjectIdentifier("1.2.840.113549.1.9.16.1.21"); + + + /** + * id-regCtrl-algId OBJECT IDENTIFIER ::= { iso(1) + * identified-organization(3) dod(6) internet(1) security(5) + * mechanisms(5) pkix(7) pkip(5) regCtrl(1) 11 } + */ + public static readonly DerObjectIdentifier id_regCtrl_algId = id_pkip.Branch("1.11"); + + /** + * id-regCtrl-rsaKeyLen OBJECT IDENTIFIER ::= { iso(1) + * identified-organization(3) dod(6) internet(1) security(5) + * mechanisms(5) pkix(7) pkip(5) regCtrl(1) 12 } + */ + public static readonly DerObjectIdentifier id_regCtrl_rsaKeyLen = id_pkip.Branch("1.12"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CmpObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CmpObjectIdentifiers.cs.meta new file mode 100644 index 000000000..6065cff16 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CmpObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e92835683fd3ad948ba0990d3be48a86 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CrlAnnContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CrlAnnContent.cs new file mode 100644 index 000000000..cb98bba54 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CrlAnnContent.cs @@ -0,0 +1,51 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class CrlAnnContent + : Asn1Encodable + { + public static CrlAnnContent GetInstance(object obj) + { + if (obj is CrlAnnContent crlAnnContent) + return crlAnnContent; + + if (obj != null) + return new CrlAnnContent(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly Asn1Sequence m_content; + + private CrlAnnContent(Asn1Sequence seq) + { + m_content = seq; + } + + public CrlAnnContent(CertificateList crl) + { + m_content = new DerSequence(crl); + } + + public virtual CertificateList[] ToCertificateListArray() + { + return m_content.MapElements(CertificateList.GetInstance); + } + + /** + *
+		 * CrlAnnContent ::= SEQUENCE OF CertificateList
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return m_content; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CrlAnnContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CrlAnnContent.cs.meta new file mode 100644 index 000000000..70877d236 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CrlAnnContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d4143a5fd08c41b41b39f20b7af3d7dd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CrlSource.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CrlSource.cs new file mode 100644 index 000000000..9f908bde2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CrlSource.cs @@ -0,0 +1,76 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + * GenMsg: {id-it TBD1}, SEQUENCE SIZE (1..MAX) OF CRLStatus + * GenRep: {id-it TBD2}, SEQUENCE SIZE (1..MAX) OF + * CertificateList | < absent > + *

+ * CRLSource ::= CHOICE { + * dpn [0] DistributionPointName, + * issuer [1] GeneralNames } + *

+ */ + public class CrlSource + : Asn1Encodable, IAsn1Choice + { + public static CrlSource GetInstance(object obj) + { + if (obj is CrlSource crlSource) + return crlSource; + + if (obj != null) + return new CrlSource(Asn1TaggedObject.GetInstance(obj)); + + return null; + } + + private readonly DistributionPointName m_dpn; + private readonly GeneralNames m_issuer; + + private CrlSource(Asn1TaggedObject taggedObject) + { + switch (taggedObject.TagNo) + { + case 0: + m_dpn = DistributionPointName.GetInstance(taggedObject, true); + m_issuer = null; + break; + case 1: + m_dpn = null; + m_issuer = GeneralNames.GetInstance(taggedObject, true); + break; + default: + throw new ArgumentException("unknown tag: " + Asn1Utilities.GetTagText(taggedObject)); + } + } + + public CrlSource(DistributionPointName dpn, GeneralNames issuer) + { + if ((dpn == null) == (issuer == null)) + throw new ArgumentException("either dpn or issuer must be set"); + + m_dpn = dpn; + m_issuer = issuer; + } + + public virtual DistributionPointName Dpn => m_dpn; + + public virtual GeneralNames Issuer => m_issuer; + + public override Asn1Object ToAsn1Object() + { + if (m_dpn != null) + return new DerTaggedObject(true, 0, m_dpn); + + return new DerTaggedObject(true, 1, m_issuer); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CrlSource.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CrlSource.cs.meta new file mode 100644 index 000000000..f267307f6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CrlSource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: afe000dd78e06d0488222d24f2979eb3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CrlStatus.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CrlStatus.cs new file mode 100644 index 000000000..27f97d2b8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CrlStatus.cs @@ -0,0 +1,65 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + * CRLStatus ::= SEQUENCE { + * source CRLSource, + * thisUpdate Time OPTIONAL } + */ + public class CrlStatus + : Asn1Encodable + { + public static CrlStatus GetInstance(object obj) + { + if (obj is CrlStatus crlStatus) + return crlStatus; + + if (obj != null) + return new CrlStatus(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly CrlSource m_source; + private readonly Time m_thisUpdate; + + private CrlStatus(Asn1Sequence sequence) + { + int count = sequence.Count; + if (count < 1 || count > 2) + throw new ArgumentException("expected sequence size of 1 or 2, got " + count); + + m_source = CrlSource.GetInstance(sequence[0]); + + if (sequence.Count == 2) + { + m_thisUpdate = Time.GetInstance(sequence[1]); + } + } + + public CrlStatus(CrlSource source, Time thisUpdate) + { + m_source = source; + m_thisUpdate = thisUpdate; + } + + public virtual CrlSource Source => m_source; + + public virtual Time ThisUpdate => m_thisUpdate; + + public override Asn1Object ToAsn1Object() + { + if (m_thisUpdate == null) + return new DerSequence(m_source); + + return new DerSequence(m_source, m_thisUpdate); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CrlStatus.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CrlStatus.cs.meta new file mode 100644 index 000000000..7d895c4e8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/CrlStatus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3052d842bf432244e83cfd2c826ef98b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/DhbmParameter.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/DhbmParameter.cs new file mode 100644 index 000000000..858a59e59 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/DhbmParameter.cs @@ -0,0 +1,60 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + * DHBMParameter ::= SEQUENCE { + * owf AlgorithmIdentifier, + * -- AlgId for a One-Way Function (SHA-1 recommended) + * mac AlgorithmIdentifier + * -- the MAC AlgId (e.g., DES-MAC, Triple-DES-MAC [PKCS11], + * } -- or HMAC [RFC2104, RFC2202]) + */ + public class DhbmParameter + : Asn1Encodable + { + public static DhbmParameter GetInstance(object obj) + { + if (obj is DhbmParameter dhbmParameter) + return dhbmParameter; + + if (obj != null) + return new DhbmParameter(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly AlgorithmIdentifier m_owf; + private readonly AlgorithmIdentifier m_mac; + + private DhbmParameter(Asn1Sequence sequence) + { + if (sequence.Count != 2) + throw new ArgumentException("expecting sequence size of 2"); + + m_owf = AlgorithmIdentifier.GetInstance(sequence[0]); + m_mac = AlgorithmIdentifier.GetInstance(sequence[1]); + } + + public DhbmParameter(AlgorithmIdentifier owf, AlgorithmIdentifier mac) + { + m_owf = owf; + m_mac = mac; + } + + public virtual AlgorithmIdentifier Owf => m_owf; + + public virtual AlgorithmIdentifier Mac => m_mac; + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(m_owf, m_mac); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/DhbmParameter.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/DhbmParameter.cs.meta new file mode 100644 index 000000000..b71da346a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/DhbmParameter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 99e6138334c46e04e879fb85b6991bc7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/ErrorMsgContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/ErrorMsgContent.cs new file mode 100644 index 000000000..07b304c7f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/ErrorMsgContent.cs @@ -0,0 +1,99 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + *
+     *      ErrorMsgContent ::= SEQUENCE {
+     *          pKIStatusInfo          PKIStatusInfo,
+     *          errorCode              INTEGER           OPTIONAL,
+     *          -- implementation-specific error codes
+     *          errorDetails           PKIFreeText       OPTIONAL
+     *          -- implementation-specific error details
+     *      }
+     * 
+ */ + public class ErrorMsgContent + : Asn1Encodable + { + public static ErrorMsgContent GetInstance(object obj) + { + if (obj is ErrorMsgContent errorMsgContent) + return errorMsgContent; + + if (obj != null) + return new ErrorMsgContent(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly PkiStatusInfo m_pkiStatusInfo; + private readonly DerInteger m_errorCode; + private readonly PkiFreeText m_errorDetails; + + private ErrorMsgContent(Asn1Sequence seq) + { + m_pkiStatusInfo = PkiStatusInfo.GetInstance(seq[0]); + + for (int pos = 1; pos < seq.Count; ++pos) + { + Asn1Encodable ae = seq[pos]; + if (ae is DerInteger) + { + m_errorCode = DerInteger.GetInstance(ae); + } + else + { + m_errorDetails = PkiFreeText.GetInstance(ae); + } + } + } + + public ErrorMsgContent(PkiStatusInfo pkiStatusInfo) + : this(pkiStatusInfo, null, null) + { + } + + public ErrorMsgContent( + PkiStatusInfo pkiStatusInfo, + DerInteger errorCode, + PkiFreeText errorDetails) + { + if (pkiStatusInfo == null) + throw new ArgumentNullException(nameof(pkiStatusInfo)); + + m_pkiStatusInfo = pkiStatusInfo; + m_errorCode = errorCode; + m_errorDetails = errorDetails; + } + + public virtual PkiStatusInfo PkiStatusInfo => m_pkiStatusInfo; + + public virtual DerInteger ErrorCode => m_errorCode; + + public virtual PkiFreeText ErrorDetails => m_errorDetails; + + /** + *
+		 * ErrorMsgContent ::= SEQUENCE {
+		 *                        pKIStatusInfo          PKIStatusInfo,
+		 *                        errorCode              INTEGER           OPTIONAL,
+		 *                        -- implementation-specific error codes
+		 *                        errorDetails           PKIFreeText       OPTIONAL
+		 *                        -- implementation-specific error details
+		 * }
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(m_pkiStatusInfo); + v.AddOptional(m_errorCode, m_errorDetails); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/ErrorMsgContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/ErrorMsgContent.cs.meta new file mode 100644 index 000000000..b10c0fb42 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/ErrorMsgContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8820469b233f5b9459b2d669b0ea6ee9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/GenMsgContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/GenMsgContent.cs new file mode 100644 index 000000000..acdf17355 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/GenMsgContent.cs @@ -0,0 +1,57 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + *
GenMsgContent ::= SEQUENCE OF InfoTypeAndValue
+ */ + public class GenMsgContent + : Asn1Encodable + { + public static GenMsgContent GetInstance(object obj) + { + if (obj is GenMsgContent genMsgContent) + return genMsgContent; + + if (obj != null) + return new GenMsgContent(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly Asn1Sequence m_content; + + private GenMsgContent(Asn1Sequence seq) + { + m_content = seq; + } + + public GenMsgContent(InfoTypeAndValue itv) + { + m_content = new DerSequence(itv); + } + + public GenMsgContent(params InfoTypeAndValue[] itvs) + { + m_content = new DerSequence(itvs); + } + + public virtual InfoTypeAndValue[] ToInfoTypeAndValueArray() + { + return m_content.MapElements(InfoTypeAndValue.GetInstance); + } + + /** + *
+		 * GenMsgContent ::= SEQUENCE OF InfoTypeAndValue
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return m_content; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/GenMsgContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/GenMsgContent.cs.meta new file mode 100644 index 000000000..4e813b877 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/GenMsgContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fd6633fc472f373469b8461ba0ca9665 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/GenRepContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/GenRepContent.cs new file mode 100644 index 000000000..50f729682 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/GenRepContent.cs @@ -0,0 +1,54 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class GenRepContent + : Asn1Encodable + { + public static GenRepContent GetInstance(object obj) + { + if (obj is GenRepContent genRepContent) + return genRepContent; + + if (obj != null) + return new GenRepContent(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly Asn1Sequence m_content; + + private GenRepContent(Asn1Sequence seq) + { + m_content = seq; + } + + public GenRepContent(InfoTypeAndValue itv) + { + m_content = new DerSequence(itv); + } + + public GenRepContent(params InfoTypeAndValue[] itvs) + { + m_content = new DerSequence(itvs); + } + + public virtual InfoTypeAndValue[] ToInfoTypeAndValueArray() + { + return m_content.MapElements(InfoTypeAndValue.GetInstance); + } + + /** + *
+		 * GenRepContent ::= SEQUENCE OF InfoTypeAndValue
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return m_content; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/GenRepContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/GenRepContent.cs.meta new file mode 100644 index 000000000..5357e5487 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/GenRepContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4647b364f75e5ee428ef793100be1463 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/InfoTypeAndValue.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/InfoTypeAndValue.cs new file mode 100644 index 000000000..e004812c3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/InfoTypeAndValue.cs @@ -0,0 +1,116 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + * Example InfoTypeAndValue contents include, but are not limited + * to, the following (un-comment in this ASN.1 module and use as + * appropriate for a given environment): + *
+     *   id-it-caProtEncCert    OBJECT IDENTIFIER ::= {id-it 1}
+     *      CAProtEncCertValue      ::= CMPCertificate
+     *   id-it-signKeyPairTypes OBJECT IDENTIFIER ::= {id-it 2}
+     *     SignKeyPairTypesValue   ::= SEQUENCE OF AlgorithmIdentifier
+     *   id-it-encKeyPairTypes  OBJECT IDENTIFIER ::= {id-it 3}
+     *     EncKeyPairTypesValue    ::= SEQUENCE OF AlgorithmIdentifier
+     *   id-it-preferredSymmAlg OBJECT IDENTIFIER ::= {id-it 4}
+     *      PreferredSymmAlgValue   ::= AlgorithmIdentifier
+     *   id-it-caKeyUpdateInfo  OBJECT IDENTIFIER ::= {id-it 5}
+     *      CAKeyUpdateInfoValue    ::= CAKeyUpdAnnContent
+     *   id-it-currentCRL       OBJECT IDENTIFIER ::= {id-it 6}
+     *      CurrentCRLValue         ::= CertificateList
+     *   id-it-unsupportedOIDs  OBJECT IDENTIFIER ::= {id-it 7}
+     *      UnsupportedOIDsValue    ::= SEQUENCE OF OBJECT IDENTIFIER
+     *   id-it-keyPairParamReq  OBJECT IDENTIFIER ::= {id-it 10}
+     *      KeyPairParamReqValue    ::= OBJECT IDENTIFIER
+     *   id-it-keyPairParamRep  OBJECT IDENTIFIER ::= {id-it 11}
+     *      KeyPairParamRepValue    ::= AlgorithmIdentifer
+     *   id-it-revPassphrase    OBJECT IDENTIFIER ::= {id-it 12}
+     *      RevPassphraseValue      ::= EncryptedValue
+     *   id-it-implicitConfirm  OBJECT IDENTIFIER ::= {id-it 13}
+     *      ImplicitConfirmValue    ::= NULL
+     *   id-it-confirmWaitTime  OBJECT IDENTIFIER ::= {id-it 14}
+     *      ConfirmWaitTimeValue    ::= GeneralizedTime
+     *   id-it-origPKIMessage   OBJECT IDENTIFIER ::= {id-it 15}
+     *      OrigPKIMessageValue     ::= PKIMessages
+     *   id-it-suppLangTags     OBJECT IDENTIFIER ::= {id-it 16}
+     *      SuppLangTagsValue       ::= SEQUENCE OF UTF8String
+     *
+     * where
+     *
+     *   id-pkix OBJECT IDENTIFIER ::= {
+     *      iso(1) identified-organization(3)
+     *      dod(6) internet(1) security(5) mechanisms(5) pkix(7)}
+     * and
+     *      id-it   OBJECT IDENTIFIER ::= {id-pkix 4}
+     * 
+ */ + public class InfoTypeAndValue + : Asn1Encodable + { + private readonly DerObjectIdentifier m_infoType; + private readonly Asn1Encodable m_infoValue; + + private InfoTypeAndValue(Asn1Sequence seq) + { + m_infoType = DerObjectIdentifier.GetInstance(seq[0]); + + if (seq.Count > 1) + { + m_infoValue = seq[1]; + } + } + + public static InfoTypeAndValue GetInstance(object obj) + { + if (obj is InfoTypeAndValue infoTypeAndValue) + return infoTypeAndValue; + + if (obj != null) + return new InfoTypeAndValue(Asn1Sequence.GetInstance(obj)); + + return null; + } + + public InfoTypeAndValue(DerObjectIdentifier infoType) + : this(infoType, null) + { + } + + public InfoTypeAndValue(DerObjectIdentifier infoType, Asn1Encodable infoValue) + { + if (infoType == null) + throw new ArgumentNullException(nameof(infoType)); + + m_infoType = infoType; + m_infoValue = infoValue; + } + + public virtual DerObjectIdentifier InfoType => m_infoType; + + public virtual Asn1Encodable InfoValue => m_infoValue; + + /** + *
+         * InfoTypeAndValue ::= SEQUENCE {
+         *                         infoType               OBJECT IDENTIFIER,
+         *                         infoValue              ANY DEFINED BY infoType  OPTIONAL
+         * }
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + if (m_infoValue == null) + return new DerSequence(m_infoType); + + return new DerSequence(m_infoType, m_infoValue); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/InfoTypeAndValue.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/InfoTypeAndValue.cs.meta new file mode 100644 index 000000000..8d36ca4eb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/InfoTypeAndValue.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be1c69797e9f7b04c925d67140b7cf3b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/KeyRecRepContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/KeyRecRepContent.cs new file mode 100644 index 000000000..c8cd2bd1c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/KeyRecRepContent.cs @@ -0,0 +1,95 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class KeyRecRepContent + : Asn1Encodable + { + public static KeyRecRepContent GetInstance(object obj) + { + if (obj is KeyRecRepContent keyRecRepContent) + return keyRecRepContent; + + if (obj != null) + return new KeyRecRepContent(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly PkiStatusInfo m_status; + private readonly CmpCertificate m_newSigCert; + private readonly Asn1Sequence m_caCerts; + private readonly Asn1Sequence m_keyPairHist; + + private KeyRecRepContent(Asn1Sequence seq) + { + m_status = PkiStatusInfo.GetInstance(seq[0]); + + for (int pos = 1; pos < seq.Count; ++pos) + { + Asn1TaggedObject tObj = Asn1TaggedObject.GetInstance(seq[pos]); + + switch (tObj.TagNo) + { + case 0: + m_newSigCert = CmpCertificate.GetInstance(tObj.GetObject()); + break; + case 1: + m_caCerts = Asn1Sequence.GetInstance(tObj.GetObject()); + break; + case 2: + m_keyPairHist = Asn1Sequence.GetInstance(tObj.GetObject()); + break; + default: + throw new ArgumentException("unknown tag number: " + tObj.TagNo, "seq"); + } + } + } + + public virtual PkiStatusInfo Status => m_status; + + public virtual CmpCertificate NewSigCert => m_newSigCert; + + public virtual CmpCertificate[] GetCACerts() + { + if (m_caCerts == null) + return null; + + return m_caCerts.MapElements(CmpCertificate.GetInstance); + } + + public virtual CertifiedKeyPair[] GetKeyPairHist() + { + if (m_keyPairHist == null) + return null; + + return m_keyPairHist.MapElements(CertifiedKeyPair.GetInstance); + } + + /** + *
+		 * KeyRecRepContent ::= SEQUENCE {
+		 *                         status                  PKIStatusInfo,
+		 *                         newSigCert          [0] CMPCertificate OPTIONAL,
+		 *                         caCerts             [1] SEQUENCE SIZE (1..MAX) OF
+		 *                                                           CMPCertificate OPTIONAL,
+		 *                         keyPairHist         [2] SEQUENCE SIZE (1..MAX) OF
+		 *                                                           CertifiedKeyPair OPTIONAL
+		 *              }
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(m_status); + v.AddOptionalTagged(true, 0, m_newSigCert); + v.AddOptionalTagged(true, 1, m_caCerts); + v.AddOptionalTagged(true, 2, m_keyPairHist); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/KeyRecRepContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/KeyRecRepContent.cs.meta new file mode 100644 index 000000000..a441d3cff --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/KeyRecRepContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d74e86646a8e6a74388ee918ba063046 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/NestedMessageContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/NestedMessageContent.cs new file mode 100644 index 000000000..87d5a24a9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/NestedMessageContent.cs @@ -0,0 +1,39 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + * NestedMessageContent ::= PKIMessages + */ + public class NestedMessageContent + : PkiMessages + { + public static new NestedMessageContent GetInstance(object obj) + { + if (obj is NestedMessageContent nestedMessageContent) + return nestedMessageContent; + + if (obj != null) + return new NestedMessageContent(Asn1Sequence.GetInstance(obj)); + + return null; + } + + public NestedMessageContent(PkiMessage msg) + : base(msg) + { + } + + public NestedMessageContent(PkiMessage[] msgs) + : base(msgs) + { + } + + public NestedMessageContent(Asn1Sequence seq) + : base(seq) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/NestedMessageContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/NestedMessageContent.cs.meta new file mode 100644 index 000000000..7b72a34c1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/NestedMessageContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1d5b9fe9255383040a52bb7e4465d3e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/OobCert.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/OobCert.cs new file mode 100644 index 000000000..c2e1e1d7e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/OobCert.cs @@ -0,0 +1,72 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + * OOBCert ::= CMPCertificate + */ + public class OobCert + : CmpCertificate + { + public static new OobCert GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is OobCert oobCert) + return oobCert; + + if (obj is CmpCertificate cmpCertificate) + return GetInstance(cmpCertificate.GetEncoded()); + + if (obj is byte[] bs) + { + try + { + obj = Asn1Object.FromByteArray(bs); + } + catch (IOException) + { + throw new ArgumentException("Invalid encoding in OobCert"); + } + } + + if (obj is Asn1Sequence seq) + return new OobCert(X509CertificateStructure.GetInstance(obj)); + + if (obj is Asn1TaggedObject taggedObject) + return new OobCert(taggedObject.TagNo, taggedObject.GetObject()); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), nameof(obj)); + } + + public static new OobCert GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + if (taggedObject == null) + return null; + + if (!declaredExplicit) + throw new ArgumentException("tag must be explicit"); + + return GetInstance(taggedObject.GetObject()); + } + + public OobCert(int type, Asn1Encodable otherCert) + : base(type, otherCert) + { + } + + public OobCert(X509CertificateStructure x509v3PKCert) + : base(x509v3PKCert) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/OobCert.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/OobCert.cs.meta new file mode 100644 index 000000000..fb69ef265 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/OobCert.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a4a3d68d7cd11b4f81f94409f6b94be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/OobCertHash.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/OobCertHash.cs new file mode 100644 index 000000000..f1d8dccd9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/OobCertHash.cs @@ -0,0 +1,90 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + *
+     * OOBCertHash ::= SEQUENCE {
+     * hashAlg     [0] AlgorithmIdentifier     OPTIONAL,
+     * certId      [1] CertId                  OPTIONAL,
+     * hashVal         BIT STRING
+     * -- hashVal is calculated over the DER encoding of the
+     * -- self-signed certificate with the identifier certID.
+     * }
+     * 
+ */ + public class OobCertHash + : Asn1Encodable + { + public static OobCertHash GetInstance(object obj) + { + if (obj is OobCertHash oobCertHash) + return oobCertHash; + + if (obj != null) + return new OobCertHash(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly AlgorithmIdentifier m_hashAlg; + private readonly CertId m_certId; + private readonly DerBitString m_hashVal; + + private OobCertHash(Asn1Sequence seq) + { + int index = seq.Count - 1; + + m_hashVal = DerBitString.GetInstance(seq[index--]); + + for (int i = index; i >= 0; i--) + { + Asn1TaggedObject tObj = (Asn1TaggedObject)seq[i]; + + if (tObj.TagNo == 0) + { + m_hashAlg = AlgorithmIdentifier.GetInstance(tObj, true); + } + else + { + m_certId = CertId.GetInstance(tObj, true); + } + } + } + + public virtual CertId CertID => m_certId; + + public virtual AlgorithmIdentifier HashAlg => m_hashAlg; + + public virtual DerBitString HashVal => m_hashVal; + + /** + *
+		 * OobCertHash ::= SEQUENCE {
+		 *                      hashAlg     [0] AlgorithmIdentifier     OPTIONAL,
+		 *                      certId      [1] CertId                  OPTIONAL,
+		 *                      hashVal         BIT STRING
+		 *                      -- hashVal is calculated over the Der encoding of the
+		 *                      -- self-signed certificate with the identifier certID.
+		 *       }
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptionalTagged(true, 0, m_hashAlg); + v.AddOptionalTagged(true, 1, m_certId); + v.Add(m_hashVal); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/OobCertHash.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/OobCertHash.cs.meta new file mode 100644 index 000000000..775cade09 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/OobCertHash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 36ad7355f732cc4479f37fe03095da97 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIBody.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIBody.cs new file mode 100644 index 000000000..5f49ff0d6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIBody.cs @@ -0,0 +1,215 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + * PKIBody ::= CHOICE { -- message-specific body elements + * ir [0] CertReqMessages, --Initialization Request + * ip [1] CertRepMessage, --Initialization Response + * cr [2] CertReqMessages, --Certification Request + * cp [3] CertRepMessage, --Certification Response + * p10cr [4] CertificationRequest, --imported from [PKCS10] + * popdecc [5] POPODecKeyChallContent, --pop Challenge + * popdecr [6] POPODecKeyRespContent, --pop Response + * kur [7] CertReqMessages, --Key Update Request + * kup [8] CertRepMessage, --Key Update Response + * krr [9] CertReqMessages, --Key Recovery Request + * krp [10] KeyRecRepContent, --Key Recovery Response + * rr [11] RevReqContent, --Revocation Request + * rp [12] RevRepContent, --Revocation Response + * ccr [13] CertReqMessages, --Cross-Cert. Request + * ccp [14] CertRepMessage, --Cross-Cert. Response + * ckuann [15] CAKeyUpdAnnContent, --CA Key Update Ann. + * cann [16] CertAnnContent, --Certificate Ann. + * rann [17] RevAnnContent, --Revocation Ann. + * crlann [18] CRLAnnContent, --CRL Announcement + * pkiconf [19] PKIConfirmContent, --Confirmation + * nested [20] NestedMessageContent, --Nested Message + * genm [21] GenMsgContent, --General Message + * genp [22] GenRepContent, --General Response + * error [23] ErrorMsgContent, --Error Message + * certConf [24] CertConfirmContent, --Certificate confirm + * pollReq [25] PollReqContent, --Polling request + * pollRep [26] PollRepContent --Polling response + * } + */ + public class PkiBody + : Asn1Encodable, IAsn1Choice + { + public const int TYPE_INIT_REQ = 0; + public const int TYPE_INIT_REP = 1; + public const int TYPE_CERT_REQ = 2; + public const int TYPE_CERT_REP = 3; + public const int TYPE_P10_CERT_REQ = 4; + public const int TYPE_POPO_CHALL = 5; + public const int TYPE_POPO_REP = 6; + public const int TYPE_KEY_UPDATE_REQ = 7; + public const int TYPE_KEY_UPDATE_REP = 8; + public const int TYPE_KEY_RECOVERY_REQ = 9; + public const int TYPE_KEY_RECOVERY_REP = 10; + public const int TYPE_REVOCATION_REQ = 11; + public const int TYPE_REVOCATION_REP = 12; + public const int TYPE_CROSS_CERT_REQ = 13; + public const int TYPE_CROSS_CERT_REP = 14; + public const int TYPE_CA_KEY_UPDATE_ANN = 15; + public const int TYPE_CERT_ANN = 16; + public const int TYPE_REVOCATION_ANN = 17; + public const int TYPE_CRL_ANN = 18; + public const int TYPE_CONFIRM = 19; + public const int TYPE_NESTED = 20; + public const int TYPE_GEN_MSG = 21; + public const int TYPE_GEN_REP = 22; + public const int TYPE_ERROR = 23; + public const int TYPE_CERT_CONFIRM = 24; + public const int TYPE_POLL_REQ = 25; + public const int TYPE_POLL_REP = 26; + + public static PkiBody GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is PkiBody pkiBody) + return pkiBody; + + if (obj is Asn1TaggedObject taggedObject) + return new PkiBody(taggedObject); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), nameof(obj)); + } + + private readonly int m_tagNo; + private readonly Asn1Encodable m_body; + + private PkiBody(Asn1TaggedObject taggedObject) + { + m_tagNo = taggedObject.TagNo; + m_body = GetBodyForType(m_tagNo, taggedObject.GetObject()); + } + + /** + * Creates a new PkiBody. + * @param type one of the TYPE_* constants + * @param content message content + */ + public PkiBody(int type, Asn1Encodable content) + { + m_tagNo = type; + m_body = GetBodyForType(type, content); + } + + private static Asn1Encodable GetBodyForType(int type, Asn1Encodable o) + { + switch (type) + { + case TYPE_INIT_REQ: + return CertReqMessages.GetInstance(o); + case TYPE_INIT_REP: + return CertRepMessage.GetInstance(o); + case TYPE_CERT_REQ: + return CertReqMessages.GetInstance(o); + case TYPE_CERT_REP: + return CertRepMessage.GetInstance(o); + case TYPE_P10_CERT_REQ: + return CertificationRequest.GetInstance(o); + case TYPE_POPO_CHALL: + return PopoDecKeyChallContent.GetInstance(o); + case TYPE_POPO_REP: + return PopoDecKeyRespContent.GetInstance(o); + case TYPE_KEY_UPDATE_REQ: + return CertReqMessages.GetInstance(o); + case TYPE_KEY_UPDATE_REP: + return CertRepMessage.GetInstance(o); + case TYPE_KEY_RECOVERY_REQ: + return CertReqMessages.GetInstance(o); + case TYPE_KEY_RECOVERY_REP: + return KeyRecRepContent.GetInstance(o); + case TYPE_REVOCATION_REQ: + return RevReqContent.GetInstance(o); + case TYPE_REVOCATION_REP: + return RevRepContent.GetInstance(o); + case TYPE_CROSS_CERT_REQ: + return CertReqMessages.GetInstance(o); + case TYPE_CROSS_CERT_REP: + return CertRepMessage.GetInstance(o); + case TYPE_CA_KEY_UPDATE_ANN: + return CAKeyUpdAnnContent.GetInstance(o); + case TYPE_CERT_ANN: + return CmpCertificate.GetInstance(o); + case TYPE_REVOCATION_ANN: + return RevAnnContent.GetInstance(o); + case TYPE_CRL_ANN: + return CrlAnnContent.GetInstance(o); + case TYPE_CONFIRM: + return PkiConfirmContent.GetInstance(o); + case TYPE_NESTED: + return PkiMessages.GetInstance(o); + case TYPE_GEN_MSG: + return GenMsgContent.GetInstance(o); + case TYPE_GEN_REP: + return GenRepContent.GetInstance(o); + case TYPE_ERROR: + return ErrorMsgContent.GetInstance(o); + case TYPE_CERT_CONFIRM: + return CertConfirmContent.GetInstance(o); + case TYPE_POLL_REQ: + return PollReqContent.GetInstance(o); + case TYPE_POLL_REP: + return PollRepContent.GetInstance(o); + default: + throw new ArgumentException("unknown tag number: " + type, nameof(type)); + } + } + + public virtual Asn1Encodable Content => m_body; + + public virtual int Type => m_tagNo; + + /** + *
+         * PkiBody ::= CHOICE {       -- message-specific body elements
+         *        ir       [0]  CertReqMessages,        --Initialization Request
+         *        ip       [1]  CertRepMessage,         --Initialization Response
+         *        cr       [2]  CertReqMessages,        --Certification Request
+         *        cp       [3]  CertRepMessage,         --Certification Response
+         *        p10cr    [4]  CertificationRequest,   --imported from [PKCS10]
+         *        popdecc  [5]  POPODecKeyChallContent, --pop Challenge
+         *        popdecr  [6]  POPODecKeyRespContent,  --pop Response
+         *        kur      [7]  CertReqMessages,        --Key Update Request
+         *        kup      [8]  CertRepMessage,         --Key Update Response
+         *        krr      [9]  CertReqMessages,        --Key Recovery Request
+         *        krp      [10] KeyRecRepContent,       --Key Recovery Response
+         *        rr       [11] RevReqContent,          --Revocation Request
+         *        rp       [12] RevRepContent,          --Revocation Response
+         *        ccr      [13] CertReqMessages,        --Cross-Cert. Request
+         *        ccp      [14] CertRepMessage,         --Cross-Cert. Response
+         *        ckuann   [15] CAKeyUpdAnnContent,     --CA Key Update Ann.
+         *        cann     [16] CertAnnContent,         --Certificate Ann.
+         *        rann     [17] RevAnnContent,          --Revocation Ann.
+         *        crlann   [18] CRLAnnContent,          --CRL Announcement
+         *        pkiconf  [19] PKIConfirmContent,      --Confirmation
+         *        nested   [20] NestedMessageContent,   --Nested Message
+         *        genm     [21] GenMsgContent,          --General Message
+         *        genp     [22] GenRepContent,          --General Response
+         *        error    [23] ErrorMsgContent,        --Error Message
+         *        certConf [24] CertConfirmContent,     --Certificate confirm
+         *        pollReq  [25] PollReqContent,         --Polling request
+         *        pollRep  [26] PollRepContent          --Polling response
+         * }
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return new DerTaggedObject(true, m_tagNo, m_body); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIBody.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIBody.cs.meta new file mode 100644 index 000000000..c278d4db9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIBody.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ba31bdf64d25dc34080447e485c9a522 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIConfirmContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIConfirmContent.cs new file mode 100644 index 000000000..93508be37 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIConfirmContent.cs @@ -0,0 +1,54 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + * PKIConfirmContent ::= NULL + */ + public class PkiConfirmContent + : Asn1Encodable + { + public static PkiConfirmContent GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is PkiConfirmContent pkiConfirmContent) + return pkiConfirmContent; + + if (obj is Asn1Null asn1Null) + return new PkiConfirmContent(asn1Null); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), nameof(obj)); + } + + private readonly Asn1Null m_val; + + public PkiConfirmContent() + : this(DerNull.Instance) + { + } + + private PkiConfirmContent(Asn1Null val) + { + m_val = val; + } + + /** + *
+		 * PkiConfirmContent ::= NULL
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return m_val; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIConfirmContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIConfirmContent.cs.meta new file mode 100644 index 000000000..622c0e9b2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIConfirmContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1898f6e49b274c84f9988d21199155f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIFailureInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIFailureInfo.cs new file mode 100644 index 000000000..2f762acbf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIFailureInfo.cs @@ -0,0 +1,100 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + *
+     * PKIFailureInfo ::= BIT STRING {
+     * badAlg               (0),
+     *   -- unrecognized or unsupported Algorithm Identifier
+     * badMessageCheck      (1), -- integrity check failed (e.g., signature did not verify)
+     * badRequest           (2),
+     *   -- transaction not permitted or supported
+     * badTime              (3), -- messageTime was not sufficiently close to the system time, as defined by local policy
+     * badCertId            (4), -- no certificate could be found matching the provided criteria
+     * badDataFormat        (5),
+     *   -- the data submitted has the wrong format
+     * wrongAuthority       (6), -- the authority indicated in the request is different from the one creating the response token
+     * incorrectData        (7), -- the requester's data is incorrect (for notary services)
+     * missingTimeStamp     (8), -- when the timestamp is missing but should be there (by policy)
+     * badPOP               (9)  -- the proof-of-possession failed
+     * certRevoked         (10),
+     * certConfirmed       (11),
+     * wrongIntegrity      (12),
+     * badRecipientNonce   (13),
+     * timeNotAvailable    (14),
+     *   -- the TSA's time source is not available
+     * unacceptedPolicy    (15),
+     *   -- the requested TSA policy is not supported by the TSA
+     * unacceptedExtension (16),
+     *   -- the requested extension is not supported by the TSA
+     * addInfoNotAvailable (17)
+     *   -- the additional information requested could not be understood
+     *   -- or is not available
+     * badSenderNonce      (18),
+     * badCertTemplate     (19),
+     * signerNotTrusted    (20),
+     * transactionIdInUse  (21),
+     * unsupportedVersion  (22),
+     * notAuthorized       (23),
+     * systemUnavail       (24),
+     * systemFailure       (25),
+     *   -- the request cannot be handled due to system failure
+     * duplicateCertReq    (26)
+     * 
+ */ + public class PkiFailureInfo + : DerBitString + { + public const int BadAlg = (1 << 7); // unrecognized or unsupported Algorithm Identifier + public const int BadMessageCheck = (1 << 6); // integrity check failed (e.g., signature did not verify) + public const int BadRequest = (1 << 5); + public const int BadTime = (1 << 4); // -- messageTime was not sufficiently close to the system time, as defined by local policy + public const int BadCertId = (1 << 3); // no certificate could be found matching the provided criteria + public const int BadDataFormat = (1 << 2); + public const int WrongAuthority = (1 << 1); // the authority indicated in the request is different from the one creating the response token + public const int IncorrectData = 1; // the requester's data is incorrect (for notary services) + public const int MissingTimeStamp = (1 << 15); // when the timestamp is missing but should be there (by policy) + public const int BadPop = (1 << 14); // the proof-of-possession failed + public const int CertRevoked = (1 << 13); + public const int CertConfirmed = (1 << 12); + public const int WrongIntegrity = (1 << 11); + public const int BadRecipientNonce = (1 << 10); + public const int TimeNotAvailable = (1 << 9); // the TSA's time source is not available + public const int UnacceptedPolicy = (1 << 8); // the requested TSA policy is not supported by the TSA + public const int UnacceptedExtension = (1 << 23); //the requested extension is not supported by the TSA + public const int AddInfoNotAvailable = (1 << 22); //the additional information requested could not be understood or is not available + public const int BadSenderNonce = (1 << 21); + public const int BadCertTemplate = (1 << 20); + public const int SignerNotTrusted = (1 << 19); + public const int TransactionIdInUse = (1 << 18); + public const int UnsupportedVersion = (1 << 17); + public const int NotAuthorized = (1 << 16); + public const int SystemUnavail = (1 << 31); + public const int SystemFailure = (1 << 30); //the request cannot be handled due to system failure + public const int DuplicateCertReq = (1 << 29); + + /** + * Basic constructor. + */ + public PkiFailureInfo(int info) + : base(info) + { + } + + public PkiFailureInfo( + DerBitString info) + : base(info.GetBytes(), info.PadBits) + { + } + + public override string ToString() + { + return "PkiFailureInfo: 0x" + this.IntValue.ToString("X"); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIFailureInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIFailureInfo.cs.meta new file mode 100644 index 000000000..b8192f305 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIFailureInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a919d31f3c580104786c2734f49858f9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIFreeText.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIFreeText.cs new file mode 100644 index 000000000..94c9f417a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIFreeText.cs @@ -0,0 +1,89 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class PkiFreeText + : Asn1Encodable + { + public static PkiFreeText GetInstance(object obj) + { + if (obj is PkiFreeText pkiFreeText) + return pkiFreeText; + + if (obj != null) + return new PkiFreeText(Asn1Sequence.GetInstance(obj)); + + return null; + } + + public static PkiFreeText GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); + } + + internal Asn1Sequence m_strings; + + internal PkiFreeText(Asn1Sequence seq) + { + foreach (var element in seq) + { + if (!(element is DerUtf8String)) + throw new ArgumentException("attempt to insert non UTF8 STRING into PkiFreeText"); + } + + m_strings = seq; + } + + public PkiFreeText(DerUtf8String p) + { + m_strings = new DerSequence(p); + } + + public PkiFreeText(string p) + : this(new DerUtf8String(p)) + { + } + + public PkiFreeText(DerUtf8String[] strs) + { + m_strings = new DerSequence(strs); + } + + public PkiFreeText(string[] strs) + { + Asn1EncodableVector v = new Asn1EncodableVector(strs.Length); + for (int i = 0; i < strs.Length; i++) + { + v.Add(new DerUtf8String(strs[i])); + } + m_strings = new DerSequence(v); + } + + public virtual int Count => m_strings.Count; + + /** + * Return the UTF8STRING at index. + * + * @param index index of the string of interest + * @return the string at index. + */ + public DerUtf8String this[int index] + { + get { return (DerUtf8String)m_strings[index]; } + } + + /** + *
+		 * PkiFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String
+		 * 
+ */ + public override Asn1Object ToAsn1Object() + { + return m_strings; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIFreeText.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIFreeText.cs.meta new file mode 100644 index 000000000..92ffdcb72 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIFreeText.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1c30b06d0ba2a3f44b862ceb31b712a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIHeader.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIHeader.cs new file mode 100644 index 000000000..85bb50d75 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIHeader.cs @@ -0,0 +1,232 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class PkiHeader + : Asn1Encodable + { + /** + * Value for a "null" recipient or sender. + */ + public static readonly GeneralName NULL_NAME = new GeneralName(X509Name.GetInstance(new DerSequence())); + + public static readonly int CMP_1999 = 1; + public static readonly int CMP_2000 = 2; + + private readonly DerInteger pvno; + private readonly GeneralName sender; + private readonly GeneralName recipient; + private readonly Asn1GeneralizedTime messageTime; + private readonly AlgorithmIdentifier protectionAlg; + private readonly Asn1OctetString senderKID; // KeyIdentifier + private readonly Asn1OctetString recipKID; // KeyIdentifier + private readonly Asn1OctetString transactionID; + private readonly Asn1OctetString senderNonce; + private readonly Asn1OctetString recipNonce; + private readonly PkiFreeText freeText; + private readonly Asn1Sequence generalInfo; + + private PkiHeader(Asn1Sequence seq) + { + pvno = DerInteger.GetInstance(seq[0]); + sender = GeneralName.GetInstance(seq[1]); + recipient = GeneralName.GetInstance(seq[2]); + + for (int pos = 3; pos < seq.Count; ++pos) + { + Asn1TaggedObject tObj = (Asn1TaggedObject)seq[pos]; + + switch (tObj.TagNo) + { + case 0: + messageTime = Asn1GeneralizedTime.GetInstance(tObj, true); + break; + case 1: + protectionAlg = AlgorithmIdentifier.GetInstance(tObj, true); + break; + case 2: + senderKID = Asn1OctetString.GetInstance(tObj, true); + break; + case 3: + recipKID = Asn1OctetString.GetInstance(tObj, true); + break; + case 4: + transactionID = Asn1OctetString.GetInstance(tObj, true); + break; + case 5: + senderNonce = Asn1OctetString.GetInstance(tObj, true); + break; + case 6: + recipNonce = Asn1OctetString.GetInstance(tObj, true); + break; + case 7: + freeText = PkiFreeText.GetInstance(tObj, true); + break; + case 8: + generalInfo = Asn1Sequence.GetInstance(tObj, true); + break; + default: + throw new ArgumentException("unknown tag number: " + tObj.TagNo, nameof(seq)); + } + } + } + + public static PkiHeader GetInstance(object obj) + { + if (obj is PkiHeader) + return (PkiHeader)obj; + + if (obj is Asn1Sequence) + return new PkiHeader((Asn1Sequence)obj); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public PkiHeader( + int pvno, + GeneralName sender, + GeneralName recipient) + : this(new DerInteger(pvno), sender, recipient) + { + } + + private PkiHeader( + DerInteger pvno, + GeneralName sender, + GeneralName recipient) + { + this.pvno = pvno; + this.sender = sender; + this.recipient = recipient; + } + + public virtual DerInteger Pvno + { + get { return pvno; } + } + + public virtual GeneralName Sender + { + get { return sender; } + } + + public virtual GeneralName Recipient + { + get { return recipient; } + } + + public virtual Asn1GeneralizedTime MessageTime + { + get { return messageTime; } + } + + public virtual AlgorithmIdentifier ProtectionAlg + { + get { return protectionAlg; } + } + + public virtual Asn1OctetString SenderKID + { + get { return senderKID; } + } + + public virtual Asn1OctetString RecipKID + { + get { return recipKID; } + } + + public virtual Asn1OctetString TransactionID + { + get { return transactionID; } + } + + public virtual Asn1OctetString SenderNonce + { + get { return senderNonce; } + } + + public virtual Asn1OctetString RecipNonce + { + get { return recipNonce; } + } + + public virtual PkiFreeText FreeText + { + get { return freeText; } + } + + public virtual InfoTypeAndValue[] GetGeneralInfo() + { + if (generalInfo == null) + { + return null; + } + InfoTypeAndValue[] results = new InfoTypeAndValue[generalInfo.Count]; + for (int i = 0; i < results.Length; i++) + { + results[i] = InfoTypeAndValue.GetInstance(generalInfo[i]); + } + return results; + } + + /** + *
+         *  PkiHeader ::= SEQUENCE {
+         *            pvno                INTEGER     { cmp1999(1), cmp2000(2) },
+         *            sender              GeneralName,
+         *            -- identifies the sender
+         *            recipient           GeneralName,
+         *            -- identifies the intended recipient
+         *            messageTime     [0] GeneralizedTime         OPTIONAL,
+         *            -- time of production of this message (used when sender
+         *            -- believes that the transport will be "suitable"; i.e.,
+         *            -- that the time will still be meaningful upon receipt)
+         *            protectionAlg   [1] AlgorithmIdentifier     OPTIONAL,
+         *            -- algorithm used for calculation of protection bits
+         *            senderKID       [2] KeyIdentifier           OPTIONAL,
+         *            recipKID        [3] KeyIdentifier           OPTIONAL,
+         *            -- to identify specific keys used for protection
+         *            transactionID   [4] OCTET STRING            OPTIONAL,
+         *            -- identifies the transaction; i.e., this will be the same in
+         *            -- corresponding request, response, certConf, and PKIConf
+         *            -- messages
+         *            senderNonce     [5] OCTET STRING            OPTIONAL,
+         *            recipNonce      [6] OCTET STRING            OPTIONAL,
+         *            -- nonces used to provide replay protection, senderNonce
+         *            -- is inserted by the creator of this message; recipNonce
+         *            -- is a nonce previously inserted in a related message by
+         *            -- the intended recipient of this message
+         *            freeText        [7] PKIFreeText             OPTIONAL,
+         *            -- this may be used to indicate context-specific instructions
+         *            -- (this field is intended for human consumption)
+         *            generalInfo     [8] SEQUENCE SIZE (1..MAX) OF
+         *                                 InfoTypeAndValue     OPTIONAL
+         *            -- this may be used to convey context-specific information
+         *            -- (this field not primarily intended for human consumption)
+         * }
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(pvno, sender, recipient); + v.AddOptionalTagged(true, 0, messageTime); + v.AddOptionalTagged(true, 1, protectionAlg); + v.AddOptionalTagged(true, 2, senderKID); + v.AddOptionalTagged(true, 3, recipKID); + v.AddOptionalTagged(true, 4, transactionID); + v.AddOptionalTagged(true, 5, senderNonce); + v.AddOptionalTagged(true, 6, recipNonce); + v.AddOptionalTagged(true, 7, freeText); + v.AddOptionalTagged(true, 8, generalInfo); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIHeader.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIHeader.cs.meta new file mode 100644 index 000000000..c2d09da1a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIHeader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aee8ded125544ab41b0c6c5ce69a48ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIHeaderBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIHeaderBuilder.cs new file mode 100644 index 000000000..70c79b115 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIHeaderBuilder.cs @@ -0,0 +1,227 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class PkiHeaderBuilder + { + private DerInteger pvno; + private GeneralName sender; + private GeneralName recipient; + private Asn1GeneralizedTime messageTime; + private AlgorithmIdentifier protectionAlg; + private Asn1OctetString senderKID; // KeyIdentifier + private Asn1OctetString recipKID; // KeyIdentifier + private Asn1OctetString transactionID; + private Asn1OctetString senderNonce; + private Asn1OctetString recipNonce; + private PkiFreeText freeText; + private Asn1Sequence generalInfo; + + public PkiHeaderBuilder( + int pvno, + GeneralName sender, + GeneralName recipient) + : this(new DerInteger(pvno), sender, recipient) + { + } + + private PkiHeaderBuilder( + DerInteger pvno, + GeneralName sender, + GeneralName recipient) + { + this.pvno = pvno; + this.sender = sender; + this.recipient = recipient; + } + + public virtual PkiHeaderBuilder SetMessageTime(Asn1GeneralizedTime time) + { + messageTime = time; + return this; + } + + public virtual PkiHeaderBuilder SetProtectionAlg(AlgorithmIdentifier aid) + { + protectionAlg = aid; + return this; + } + + public virtual PkiHeaderBuilder SetSenderKID(byte[] kid) + { + return SetSenderKID(kid == null ? null : new DerOctetString(kid)); + } + + public virtual PkiHeaderBuilder SetSenderKID(Asn1OctetString kid) + { + senderKID = kid; + return this; + } + + public virtual PkiHeaderBuilder SetRecipKID(byte[] kid) + { + return SetRecipKID(kid == null ? null : new DerOctetString(kid)); + } + + public virtual PkiHeaderBuilder SetRecipKID(Asn1OctetString kid) + { + recipKID = kid; + return this; + } + + public virtual PkiHeaderBuilder SetTransactionID(byte[] tid) + { + return SetTransactionID(tid == null ? null : new DerOctetString(tid)); + } + + public virtual PkiHeaderBuilder SetTransactionID(Asn1OctetString tid) + { + transactionID = tid; + return this; + } + + public virtual PkiHeaderBuilder SetSenderNonce(byte[] nonce) + { + return SetSenderNonce(nonce == null ? null : new DerOctetString(nonce)); + } + + public virtual PkiHeaderBuilder SetSenderNonce(Asn1OctetString nonce) + { + senderNonce = nonce; + return this; + } + + public virtual PkiHeaderBuilder SetRecipNonce(byte[] nonce) + { + return SetRecipNonce(nonce == null ? null : new DerOctetString(nonce)); + } + + public virtual PkiHeaderBuilder SetRecipNonce(Asn1OctetString nonce) + { + recipNonce = nonce; + return this; + } + + public virtual PkiHeaderBuilder SetFreeText(PkiFreeText text) + { + freeText = text; + return this; + } + + public virtual PkiHeaderBuilder SetGeneralInfo(InfoTypeAndValue genInfo) + { + return SetGeneralInfo(MakeGeneralInfoSeq(genInfo)); + } + + public virtual PkiHeaderBuilder SetGeneralInfo(InfoTypeAndValue[] genInfos) + { + return SetGeneralInfo(MakeGeneralInfoSeq(genInfos)); + } + + public virtual PkiHeaderBuilder SetGeneralInfo(Asn1Sequence seqOfInfoTypeAndValue) + { + generalInfo = seqOfInfoTypeAndValue; + return this; + } + + private static Asn1Sequence MakeGeneralInfoSeq( + InfoTypeAndValue generalInfo) + { + return new DerSequence(generalInfo); + } + + private static Asn1Sequence MakeGeneralInfoSeq( + InfoTypeAndValue[] generalInfos) + { + Asn1Sequence genInfoSeq = null; + if (generalInfos != null) + { + Asn1EncodableVector v = new Asn1EncodableVector(); + for (int i = 0; i < generalInfos.Length; ++i) + { + v.Add(generalInfos[i]); + } + genInfoSeq = new DerSequence(v); + } + return genInfoSeq; + } + + /** + *
+		 *  PKIHeader ::= SEQUENCE {
+		 *            pvno                INTEGER     { cmp1999(1), cmp2000(2) },
+		 *            sender              GeneralName,
+		 *            -- identifies the sender
+		 *            recipient           GeneralName,
+		 *            -- identifies the intended recipient
+		 *            messageTime     [0] GeneralizedTime         OPTIONAL,
+		 *            -- time of production of this message (used when sender
+		 *            -- believes that the transport will be "suitable"; i.e.,
+		 *            -- that the time will still be meaningful upon receipt)
+		 *            protectionAlg   [1] AlgorithmIdentifier     OPTIONAL,
+		 *            -- algorithm used for calculation of protection bits
+		 *            senderKID       [2] KeyIdentifier           OPTIONAL,
+		 *            recipKID        [3] KeyIdentifier           OPTIONAL,
+		 *            -- to identify specific keys used for protection
+		 *            transactionID   [4] OCTET STRING            OPTIONAL,
+		 *            -- identifies the transaction; i.e., this will be the same in
+		 *            -- corresponding request, response, certConf, and PKIConf
+		 *            -- messages
+		 *            senderNonce     [5] OCTET STRING            OPTIONAL,
+		 *            recipNonce      [6] OCTET STRING            OPTIONAL,
+		 *            -- nonces used to provide replay protection, senderNonce
+		 *            -- is inserted by the creator of this message; recipNonce
+		 *            -- is a nonce previously inserted in a related message by
+		 *            -- the intended recipient of this message
+		 *            freeText        [7] PKIFreeText             OPTIONAL,
+		 *            -- this may be used to indicate context-specific instructions
+		 *            -- (this field is intended for human consumption)
+		 *            generalInfo     [8] SEQUENCE SIZE (1..MAX) OF
+		 *                                 InfoTypeAndValue     OPTIONAL
+		 *            -- this may be used to convey context-specific information
+		 *            -- (this field not primarily intended for human consumption)
+		 * }
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public virtual PkiHeader Build() + { + Asn1EncodableVector v = new Asn1EncodableVector(pvno, sender, recipient); + AddOptional(v, 0, messageTime); + AddOptional(v, 1, protectionAlg); + AddOptional(v, 2, senderKID); + AddOptional(v, 3, recipKID); + AddOptional(v, 4, transactionID); + AddOptional(v, 5, senderNonce); + AddOptional(v, 6, recipNonce); + AddOptional(v, 7, freeText); + AddOptional(v, 8, generalInfo); + + messageTime = null; + protectionAlg = null; + senderKID = null; + recipKID = null; + transactionID = null; + senderNonce = null; + recipNonce = null; + freeText = null; + generalInfo = null; + + return PkiHeader.GetInstance(new DerSequence(v)); + } + + private void AddOptional(Asn1EncodableVector v, int tagNo, Asn1Encodable obj) + { + if (obj != null) + { + v.Add(new DerTaggedObject(true, tagNo, obj)); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIHeaderBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIHeaderBuilder.cs.meta new file mode 100644 index 000000000..21f735994 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIHeaderBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24d442ff1814b144a88cfabe826fb351 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIMessage.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIMessage.cs new file mode 100644 index 000000000..32316c583 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIMessage.cs @@ -0,0 +1,134 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class PkiMessage + : Asn1Encodable + { + private readonly PkiHeader header; + private readonly PkiBody body; + private readonly DerBitString protection; + private readonly Asn1Sequence extraCerts; + + private PkiMessage(Asn1Sequence seq) + { + header = PkiHeader.GetInstance(seq[0]); + body = PkiBody.GetInstance(seq[1]); + + for (int pos = 2; pos < seq.Count; ++pos) + { + Asn1TaggedObject tObj = (Asn1TaggedObject)seq[pos].ToAsn1Object(); + + if (tObj.TagNo == 0) + { + protection = DerBitString.GetInstance(tObj, true); + } + else + { + extraCerts = Asn1Sequence.GetInstance(tObj, true); + } + } + } + + public static PkiMessage GetInstance(object obj) + { + if (obj is PkiMessage) + return (PkiMessage)obj; + + if (obj != null) + return new PkiMessage(Asn1Sequence.GetInstance(obj)); + + return null; + } + + /** + * Creates a new PkiMessage. + * + * @param header message header + * @param body message body + * @param protection message protection (may be null) + * @param extraCerts extra certificates (may be null) + */ + public PkiMessage( + PkiHeader header, + PkiBody body, + DerBitString protection, + CmpCertificate[] extraCerts) + { + this.header = header; + this.body = body; + this.protection = protection; + if (extraCerts != null) + { + this.extraCerts = new DerSequence(extraCerts); + } + } + + public PkiMessage( + PkiHeader header, + PkiBody body, + DerBitString protection) + : this(header, body, protection, null) + { + } + + public PkiMessage( + PkiHeader header, + PkiBody body) + : this(header, body, null, null) + { + } + + public virtual PkiHeader Header + { + get { return header; } + } + + public virtual PkiBody Body + { + get { return body; } + } + + public virtual DerBitString Protection + { + get { return protection; } + } + + public virtual CmpCertificate[] GetExtraCerts() + { + if (extraCerts == null) + return null; + + CmpCertificate[] results = new CmpCertificate[extraCerts.Count]; + for (int i = 0; i < results.Length; ++i) + { + results[i] = CmpCertificate.GetInstance(extraCerts[i]); + } + return results; + } + + /** + *
+         * PkiMessage ::= SEQUENCE {
+         *                  header           PKIHeader,
+         *                  body             PKIBody,
+         *                  protection   [0] PKIProtection OPTIONAL,
+         *                  extraCerts   [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
+         *                                                                     OPTIONAL
+         * }
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(header, body); + v.AddOptionalTagged(true, 0, protection); + v.AddOptionalTagged(true, 1, extraCerts); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIMessage.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIMessage.cs.meta new file mode 100644 index 000000000..4430e84f0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIMessage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a0563d398536b954a8c98b851fe52849 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIMessages.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIMessages.cs new file mode 100644 index 000000000..9719ab977 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIMessages.cs @@ -0,0 +1,58 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class PkiMessages + : Asn1Encodable + { + private Asn1Sequence content; + + internal PkiMessages(Asn1Sequence seq) + { + content = seq; + } + + public static PkiMessages GetInstance(object obj) + { + if (obj is PkiMessages) + return (PkiMessages)obj; + + if (obj is Asn1Sequence) + return new PkiMessages((Asn1Sequence)obj); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public PkiMessages(params PkiMessage[] msgs) + { + content = new DerSequence(msgs); + } + + public virtual PkiMessage[] ToPkiMessageArray() + { + PkiMessage[] result = new PkiMessage[content.Count]; + for (int i = 0; i != result.Length; ++i) + { + result[i] = PkiMessage.GetInstance(content[i]); + } + return result; + } + + /** + *
+         * PkiMessages ::= SEQUENCE SIZE (1..MAX) OF PkiMessage
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return content; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIMessages.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIMessages.cs.meta new file mode 100644 index 000000000..d32d4ebf3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIMessages.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0526fbe8e7df8f45acfa32f3ea07a4f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIStatus.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIStatus.cs new file mode 100644 index 000000000..406f35eb3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIStatus.cs @@ -0,0 +1,67 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public enum PkiStatus + { + Granted = 0, + GrantedWithMods = 1, + Rejection = 2, + Waiting = 3, + RevocationWarning = 4, + RevocationNotification = 5, + KeyUpdateWarning = 6, + } + + public class PkiStatusEncodable + : Asn1Encodable + { + public static readonly PkiStatusEncodable granted = new PkiStatusEncodable(PkiStatus.Granted); + public static readonly PkiStatusEncodable grantedWithMods = new PkiStatusEncodable(PkiStatus.GrantedWithMods); + public static readonly PkiStatusEncodable rejection = new PkiStatusEncodable(PkiStatus.Rejection); + public static readonly PkiStatusEncodable waiting = new PkiStatusEncodable(PkiStatus.Waiting); + public static readonly PkiStatusEncodable revocationWarning = new PkiStatusEncodable(PkiStatus.RevocationWarning); + public static readonly PkiStatusEncodable revocationNotification = new PkiStatusEncodable(PkiStatus.RevocationNotification); + public static readonly PkiStatusEncodable keyUpdateWaiting = new PkiStatusEncodable(PkiStatus.KeyUpdateWarning); + + private readonly DerInteger status; + + private PkiStatusEncodable(PkiStatus status) + : this(new DerInteger((int)status)) + { + } + + private PkiStatusEncodable(DerInteger status) + { + this.status = status; + } + + public static PkiStatusEncodable GetInstance(object obj) + { + if (obj is PkiStatusEncodable) + return (PkiStatusEncodable)obj; + + if (obj is DerInteger) + return new PkiStatusEncodable((DerInteger)obj); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public virtual BigInteger Value + { + get { return status.Value; } + } + + public override Asn1Object ToAsn1Object() + { + return status; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIStatus.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIStatus.cs.meta new file mode 100644 index 000000000..99283ec31 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIStatus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dfa7d1eebf7c88b4ca93f109f145db83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIStatusInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIStatusInfo.cs new file mode 100644 index 000000000..e9fd17f69 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIStatusInfo.cs @@ -0,0 +1,160 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class PkiStatusInfo + : Asn1Encodable + { + DerInteger status; + PkiFreeText statusString; + DerBitString failInfo; + + public static PkiStatusInfo GetInstance( + Asn1TaggedObject obj, + bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit)); + } + + public static PkiStatusInfo GetInstance( + object obj) + { + if (obj is PkiStatusInfo) + { + return (PkiStatusInfo)obj; + } + else if (obj is Asn1Sequence) + { + return new PkiStatusInfo((Asn1Sequence)obj); + } + + throw new ArgumentException("Unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public PkiStatusInfo( + Asn1Sequence seq) + { + this.status = DerInteger.GetInstance(seq[0]); + + this.statusString = null; + this.failInfo = null; + + if (seq.Count > 2) + { + this.statusString = PkiFreeText.GetInstance(seq[1]); + this.failInfo = DerBitString.GetInstance(seq[2]); + } + else if (seq.Count > 1) + { + object obj = seq[1]; + if (obj is DerBitString) + { + this.failInfo = DerBitString.GetInstance(obj); + } + else + { + this.statusString = PkiFreeText.GetInstance(obj); + } + } + } + + /** + * @param status + */ + public PkiStatusInfo(int status) + { + this.status = new DerInteger(status); + } + + /** + * @param status + * @param statusString + */ + public PkiStatusInfo( + int status, + PkiFreeText statusString) + { + this.status = new DerInteger(status); + this.statusString = statusString; + } + + public PkiStatusInfo( + int status, + PkiFreeText statusString, + PkiFailureInfo failInfo) + { + this.status = new DerInteger(status); + this.statusString = statusString; + this.failInfo = failInfo; + } + + public BigInteger Status + { + get + { + return status.Value; + } + } + + public PkiFreeText StatusString + { + get + { + return statusString; + } + } + + public DerBitString FailInfo + { + get + { + return failInfo; + } + } + + /** + *
+		 * PkiStatusInfo ::= SEQUENCE {
+		 *     status        PKIStatus,                (INTEGER)
+		 *     statusString  PkiFreeText     OPTIONAL,
+		 *     failInfo      PkiFailureInfo  OPTIONAL  (BIT STRING)
+		 * }
+		 *
+		 * PKIStatus:
+		 *   granted                (0), -- you got exactly what you asked for
+		 *   grantedWithMods        (1), -- you got something like what you asked for
+		 *   rejection              (2), -- you don't get it, more information elsewhere in the message
+		 *   waiting                (3), -- the request body part has not yet been processed, expect to hear more later
+		 *   revocationWarning      (4), -- this message contains a warning that a revocation is imminent
+		 *   revocationNotification (5), -- notification that a revocation has occurred
+		 *   keyUpdateWarning       (6)  -- update already done for the oldCertId specified in CertReqMsg
+		 *
+		 * PkiFailureInfo:
+		 *   badAlg           (0), -- unrecognized or unsupported Algorithm Identifier
+		 *   badMessageCheck  (1), -- integrity check failed (e.g., signature did not verify)
+		 *   badRequest       (2), -- transaction not permitted or supported
+		 *   badTime          (3), -- messageTime was not sufficiently close to the system time, as defined by local policy
+		 *   badCertId        (4), -- no certificate could be found matching the provided criteria
+		 *   badDataFormat    (5), -- the data submitted has the wrong format
+		 *   wrongAuthority   (6), -- the authority indicated in the request is different from the one creating the response token
+		 *   incorrectData    (7), -- the requester's data is incorrect (for notary services)
+		 *   missingTimeStamp (8), -- when the timestamp is missing but should be there (by policy)
+		 *   badPOP           (9)  -- the proof-of-possession failed
+		 *
+		 * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(status); + v.AddOptional(statusString, failInfo); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIStatusInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIStatusInfo.cs.meta new file mode 100644 index 000000000..68dc17020 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PKIStatusInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b858b39e6697ba349b591ba47cdb9a47 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PbmParameter.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PbmParameter.cs new file mode 100644 index 000000000..1acc5554f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PbmParameter.cs @@ -0,0 +1,102 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + * PBMParameter ::= SEQUENCE { + * salt OCTET STRING, + * -- note: implementations MAY wish to limit acceptable sizes + * -- of this string to values appropriate for their environment + * -- in order to reduce the risk of denial-of-service attacks + * owf AlgorithmIdentifier, + * -- AlgId for a One-Way Function (SHA-1 recommended) + * iterationCount INTEGER, + * -- number of times the OWF is applied + * -- note: implementations MAY wish to limit acceptable sizes + * -- of this integer to values appropriate for their environment + * -- in order to reduce the risk of denial-of-service attacks + * mac AlgorithmIdentifier + * -- the MAC AlgId (e.g., DES-MAC, Triple-DES-MAC [PKCS11], + * } -- or HMAC [RFC2104, RFC2202]) + */ + public class PbmParameter + : Asn1Encodable + { + public static PbmParameter GetInstance(object obj) + { + if (obj is PbmParameter pbmParameter) + return pbmParameter; + + if (obj != null) + return new PbmParameter(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly Asn1OctetString m_salt; + private readonly AlgorithmIdentifier m_owf; + private readonly DerInteger m_iterationCount; + private readonly AlgorithmIdentifier m_mac; + + private PbmParameter(Asn1Sequence seq) + { + m_salt = Asn1OctetString.GetInstance(seq[0]); + m_owf = AlgorithmIdentifier.GetInstance(seq[1]); + m_iterationCount = DerInteger.GetInstance(seq[2]); + m_mac = AlgorithmIdentifier.GetInstance(seq[3]); + } + + public PbmParameter(byte[] salt, AlgorithmIdentifier owf, int iterationCount, AlgorithmIdentifier mac) + : this(new DerOctetString(salt), owf, new DerInteger(iterationCount), mac) + { + } + + public PbmParameter(Asn1OctetString salt, AlgorithmIdentifier owf, DerInteger iterationCount, + AlgorithmIdentifier mac) + { + m_salt = salt; + m_owf = owf; + m_iterationCount = iterationCount; + m_mac = mac; + } + + public virtual DerInteger IterationCount => m_iterationCount; + + public virtual AlgorithmIdentifier Mac => m_mac; + + public virtual AlgorithmIdentifier Owf => m_owf; + + public virtual Asn1OctetString Salt => m_salt; + + /** + *
+         *  PbmParameter ::= SEQUENCE {
+         *                        salt                OCTET STRING,
+         *                        -- note:  implementations MAY wish to limit acceptable sizes
+         *                        -- of this string to values appropriate for their environment
+         *                        -- in order to reduce the risk of denial-of-service attacks
+         *                        owf                 AlgorithmIdentifier,
+         *                        -- AlgId for a One-Way Function (SHA-1 recommended)
+         *                        iterationCount      INTEGER,
+         *                        -- number of times the OWF is applied
+         *                        -- note:  implementations MAY wish to limit acceptable sizes
+         *                        -- of this integer to values appropriate for their environment
+         *                        -- in order to reduce the risk of denial-of-service attacks
+         *                        mac                 AlgorithmIdentifier
+         *                        -- the MAC AlgId (e.g., DES-MAC, Triple-DES-MAC [PKCS11],
+         *    }   -- or HMAC [RFC2104, RFC2202])
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(m_salt, m_owf, m_iterationCount, m_mac); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PbmParameter.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PbmParameter.cs.meta new file mode 100644 index 000000000..3d1c50e1f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PbmParameter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd320e494de41774bad9ed84a8fbc952 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PollRepContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PollRepContent.cs new file mode 100644 index 000000000..d344d56d3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PollRepContent.cs @@ -0,0 +1,100 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + * PollRepContent ::= SEQUENCE OF SEQUENCE { + * certReqId INTEGER, + * checkAfter INTEGER, -- time in seconds + * reason PKIFreeText OPTIONAL } + */ + public class PollRepContent + : Asn1Encodable + { + public static PollRepContent GetInstance(object obj) + { + if (obj is PollRepContent pollRepContent) + return pollRepContent; + + if (obj != null) + return new PollRepContent(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly DerInteger[] m_certReqID; + private readonly DerInteger[] m_checkAfter; + private readonly PkiFreeText[] m_reason; + + private PollRepContent(Asn1Sequence seq) + { + int count = seq.Count; + m_certReqID = new DerInteger[count]; + m_checkAfter = new DerInteger[count]; + m_reason = new PkiFreeText[count]; + + for (int i = 0; i != count; i++) + { + Asn1Sequence s = Asn1Sequence.GetInstance(seq[i]); + + m_certReqID[i] = DerInteger.GetInstance(s[0]); + m_checkAfter[i] = DerInteger.GetInstance(s[1]); + + if (s.Count > 2) + { + m_reason[i] = PkiFreeText.GetInstance(s[2]); + } + } + } + + public PollRepContent(DerInteger certReqID, DerInteger checkAfter) + : this(certReqID, checkAfter, null) + { + } + + public PollRepContent(DerInteger certReqID, DerInteger checkAfter, PkiFreeText reason) + { + m_certReqID = new DerInteger[1]{ certReqID }; + m_checkAfter = new DerInteger[1]{ checkAfter }; + m_reason = new PkiFreeText[1]{ reason }; + } + + public virtual int Count => m_certReqID.Length; + + public virtual DerInteger GetCertReqID(int index) => m_certReqID[index]; + + public virtual DerInteger GetCheckAfter(int index) => m_checkAfter[index]; + + public virtual PkiFreeText GetReason(int index) => m_reason[index]; + + /** + *
+		 * PollRepContent ::= SEQUENCE OF SEQUENCE {
+		 *         certReqId              INTEGER,
+		 *         checkAfter             INTEGER,  -- time in seconds
+		 *         reason                 PKIFreeText OPTIONAL
+		 *     }
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector outer = new Asn1EncodableVector(m_certReqID.Length); + + for (int i = 0; i != m_certReqID.Length; i++) + { + Asn1EncodableVector v = new Asn1EncodableVector(3); + + v.Add(m_certReqID[i]); + v.Add(m_checkAfter[i]); + v.AddOptional(m_reason[i]); + + outer.Add(new DerSequence(v)); + } + + return new DerSequence(outer); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PollRepContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PollRepContent.cs.meta new file mode 100644 index 000000000..e17d96260 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PollRepContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d2f8b9fe8bebdb41ab51cccec867e82 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PollReqContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PollReqContent.cs new file mode 100644 index 000000000..676167786 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PollReqContent.cs @@ -0,0 +1,134 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class PollReqContent + : Asn1Encodable + { + public static PollReqContent GetInstance(object obj) + { + if (obj is PollReqContent pollReqContent) + return pollReqContent; + + if (obj != null) + return new PollReqContent(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly Asn1Sequence m_content; + + private PollReqContent(Asn1Sequence seq) + { + m_content = seq; + } + + /** + * Create a pollReqContent for a single certReqId. + * + * @param certReqId the certificate request ID. + */ + public PollReqContent(DerInteger certReqId) + : this(new DerSequence(new DerSequence(certReqId))) + { + } + + /** + * Create a pollReqContent for a multiple certReqIds. + * + * @param certReqIds the certificate request IDs. + */ + public PollReqContent(DerInteger[] certReqIds) + : this(new DerSequence(IntsToSequence(certReqIds))) + { + } + + /** + * Create a pollReqContent for a single certReqId. + * + * @param certReqId the certificate request ID. + */ + public PollReqContent(BigInteger certReqId) + : this(new DerInteger(certReqId)) + { + } + + /** + * Create a pollReqContent for a multiple certReqIds. + * + * @param certReqIds the certificate request IDs. + */ + public PollReqContent(BigInteger[] certReqIds) + : this(IntsToAsn1(certReqIds)) + { + } + + public virtual DerInteger[][] GetCertReqIDs() + { + DerInteger[][] result = new DerInteger[m_content.Count][]; + for (int i = 0; i != result.Length; ++i) + { + result[i] = SequenceToDerIntegerArray((Asn1Sequence)m_content[i]); + } + return result; + } + + public virtual BigInteger[] GetCertReqIDValues() + { + BigInteger[] result = new BigInteger[m_content.Count]; + + for (int i = 0; i != result.Length; i++) + { + result[i] = DerInteger.GetInstance(Asn1Sequence.GetInstance(m_content[i])[0]).Value; + } + + return result; + } + + /** + *
+		 * PollReqContent ::= SEQUENCE OF SEQUENCE {
+		 *                        certReqId              INTEGER
+		 * }
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return m_content; + } + + private static DerInteger[] SequenceToDerIntegerArray(Asn1Sequence seq) + { + return seq.MapElements(DerInteger.GetInstance); + } + + private static DerSequence[] IntsToSequence(DerInteger[] ids) + { + DerSequence[] result = new DerSequence[ids.Length]; + + for (int i = 0; i != result.Length; i++) + { + result[i] = new DerSequence(ids[i]); + } + + return result; + } + + private static DerInteger[] IntsToAsn1(BigInteger[] ids) + { + DerInteger[] result = new DerInteger[ids.Length]; + + for (int i = 0; i != result.Length; i++) + { + result[i] = new DerInteger(ids[i]); + } + + return result; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PollReqContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PollReqContent.cs.meta new file mode 100644 index 000000000..7c94ee9b3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PollReqContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1bca1f54c3479f642b90261dbcf7259d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PopoDecKeyChallContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PopoDecKeyChallContent.cs new file mode 100644 index 000000000..e662a7a44 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PopoDecKeyChallContent.cs @@ -0,0 +1,46 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class PopoDecKeyChallContent + : Asn1Encodable + { + public static PopoDecKeyChallContent GetInstance(object obj) + { + if (obj is PopoDecKeyChallContent popoDecKeyChallContent) + return popoDecKeyChallContent; + + if (obj != null) + return new PopoDecKeyChallContent(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly Asn1Sequence m_content; + + private PopoDecKeyChallContent(Asn1Sequence seq) + { + m_content = seq; + } + + public virtual Challenge[] ToChallengeArray() + { + return m_content.MapElements(Challenge.GetInstance); + } + + /** + *
+	     * PopoDecKeyChallContent ::= SEQUENCE OF Challenge
+	     * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return m_content; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PopoDecKeyChallContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PopoDecKeyChallContent.cs.meta new file mode 100644 index 000000000..7105fc8d6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PopoDecKeyChallContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98d81e1a79824f146878c4c6c52c7746 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PopoDecKeyRespContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PopoDecKeyRespContent.cs new file mode 100644 index 000000000..0341c1487 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PopoDecKeyRespContent.cs @@ -0,0 +1,44 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class PopoDecKeyRespContent + : Asn1Encodable + { + public static PopoDecKeyRespContent GetInstance(object obj) + { + if (obj is PopoDecKeyRespContent popoDecKeyRespContent) + return popoDecKeyRespContent; + + if (obj != null) + return new PopoDecKeyRespContent(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly Asn1Sequence m_content; + + private PopoDecKeyRespContent(Asn1Sequence seq) + { + m_content = seq; + } + + public virtual DerInteger[] ToIntegerArray() + { + return m_content.MapElements(DerInteger.GetInstance); + } + + /** + *
+		 * PopoDecKeyRespContent ::= SEQUENCE OF INTEGER
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return m_content; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PopoDecKeyRespContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PopoDecKeyRespContent.cs.meta new file mode 100644 index 000000000..1634c7da4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/PopoDecKeyRespContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 56dff331657c84e4cad67a130c78763a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/ProtectedPart.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/ProtectedPart.cs new file mode 100644 index 000000000..6bf2ce689 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/ProtectedPart.cs @@ -0,0 +1,54 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class ProtectedPart + : Asn1Encodable + { + public static ProtectedPart GetInstance(object obj) + { + if (obj is ProtectedPart protectedPart) + return protectedPart; + + if (obj != null) + return new ProtectedPart(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly PkiHeader m_header; + private readonly PkiBody m_body; + + private ProtectedPart(Asn1Sequence seq) + { + m_header = PkiHeader.GetInstance(seq[0]); + m_body = PkiBody.GetInstance(seq[1]); + } + + public ProtectedPart(PkiHeader header, PkiBody body) + { + m_header = header; + m_body = body; + } + + public virtual PkiHeader Header => m_header; + + public virtual PkiBody Body => m_body; + + /** + *
+		 * ProtectedPart ::= SEQUENCE {
+		 *                    header    PKIHeader,
+		 *                    body      PKIBody
+		 * }
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(m_header, m_body); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/ProtectedPart.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/ProtectedPart.cs.meta new file mode 100644 index 000000000..2ac9526df --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/ProtectedPart.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b10f4ec27b6bbd8419746853cb16ce26 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevAnnContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevAnnContent.cs new file mode 100644 index 000000000..3af7a4fea --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevAnnContent.cs @@ -0,0 +1,89 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class RevAnnContent + : Asn1Encodable + { + public static RevAnnContent GetInstance(object obj) + { + if (obj is RevAnnContent revAnnContent) + return revAnnContent; + + if (obj != null) + return new RevAnnContent(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly PkiStatusEncodable m_status; + private readonly CertId m_certID; + private readonly Asn1GeneralizedTime m_willBeRevokedAt; + private readonly Asn1GeneralizedTime m_badSinceDate; + private readonly X509Extensions m_crlDetails; + + public RevAnnContent(PkiStatusEncodable status, CertId certID, Asn1GeneralizedTime willBeRevokedAt, + Asn1GeneralizedTime badSinceDate) + : this(status, certID, willBeRevokedAt, badSinceDate, null) + { + } + + public RevAnnContent(PkiStatusEncodable status, CertId certID, Asn1GeneralizedTime willBeRevokedAt, + Asn1GeneralizedTime badSinceDate, X509Extensions crlDetails) + { + m_status = status; + m_certID = certID; + m_willBeRevokedAt = willBeRevokedAt; + m_badSinceDate = badSinceDate; + m_crlDetails = crlDetails; + } + + private RevAnnContent(Asn1Sequence seq) + { + m_status = PkiStatusEncodable.GetInstance(seq[0]); + m_certID = CertId.GetInstance(seq[1]); + m_willBeRevokedAt = Asn1GeneralizedTime.GetInstance(seq[2]); + m_badSinceDate = Asn1GeneralizedTime.GetInstance(seq[3]); + + if (seq.Count > 4) + { + m_crlDetails = X509Extensions.GetInstance(seq[4]); + } + } + + public virtual PkiStatusEncodable Status => m_status; + + public virtual CertId CertID => m_certID; + + public virtual Asn1GeneralizedTime WillBeRevokedAt => m_willBeRevokedAt; + + public virtual Asn1GeneralizedTime BadSinceDate => m_badSinceDate; + + public virtual X509Extensions CrlDetails => m_crlDetails; + + /** + *
+		 * RevAnnContent ::= SEQUENCE {
+		 *       status              PKIStatus,
+		 *       certId              CertId,
+		 *       willBeRevokedAt     GeneralizedTime,
+		 *       badSinceDate        GeneralizedTime,
+		 *       crlDetails          Extensions  OPTIONAL
+		 *        -- extra CRL details (e.g., crl number, reason, location, etc.)
+		 * }
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(m_status, m_certID, m_willBeRevokedAt, m_badSinceDate); + v.AddOptional(m_crlDetails); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevAnnContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevAnnContent.cs.meta new file mode 100644 index 000000000..95e2818c9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevAnnContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9c293847cae773d4b84a6258ea122501 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevDetails.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevDetails.cs new file mode 100644 index 000000000..72bcd1048 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevDetails.cs @@ -0,0 +1,84 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + *
+     * RevDetails ::= SEQUENCE {
+     *          certDetails         CertTemplate,
+     *          -- allows requester to specify as much as they can about
+     *          -- the cert. for which revocation is requested
+     *          -- (e.g., for cases in which serialNumber is not available)
+     *          crlEntryDetails     Extensions       OPTIONAL
+     *          -- requested crlEntryExtensions
+     *      }
+     * 
+ */ + public class RevDetails + : Asn1Encodable + { + public static RevDetails GetInstance(object obj) + { + if (obj is RevDetails revDetails) + return revDetails; + + if (obj != null) + return new RevDetails(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly CertTemplate m_certDetails; + private readonly X509Extensions m_crlEntryDetails; + + private RevDetails(Asn1Sequence seq) + { + m_certDetails = CertTemplate.GetInstance(seq[0]); + + if (seq.Count > 1) + { + m_crlEntryDetails = X509Extensions.GetInstance(seq[1]); + } + } + + public RevDetails(CertTemplate certDetails) + : this(certDetails, null) + { + } + + public RevDetails(CertTemplate certDetails, X509Extensions crlEntryDetails) + { + m_certDetails = certDetails; + m_crlEntryDetails = crlEntryDetails; + } + + public virtual CertTemplate CertDetails => m_certDetails; + + public virtual X509Extensions CrlEntryDetails => m_crlEntryDetails; + + /** + *
+		* RevDetails ::= SEQUENCE {
+		*                  certDetails         CertTemplate,
+		*                   -- allows requester to specify as much as they can about
+		*                   -- the cert. for which revocation is requested
+		*                   -- (e.g., for cases in which serialNumber is not available)
+		*                   crlEntryDetails     Extensions       OPTIONAL
+		*                   -- requested crlEntryExtensions
+		*             }
+		* 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(m_certDetails); + v.AddOptional(m_crlEntryDetails); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevDetails.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevDetails.cs.meta new file mode 100644 index 000000000..733f620df --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevDetails.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f46b291060b224942bd837481375c005 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevRepContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevRepContent.cs new file mode 100644 index 000000000..8f7f27f47 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevRepContent.cs @@ -0,0 +1,104 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + *
+     * RevRepContent ::= SEQUENCE {
+     *          status       SEQUENCE SIZE (1..MAX) OF PKIStatusInfo,
+     *          -- in same order as was sent in RevReqContent
+     *          revCerts [0] SEQUENCE SIZE (1..MAX) OF CertId
+     *                                              OPTIONAL,
+     *          -- IDs for which revocation was requested
+     *          -- (same order as status)
+     *          crls     [1] SEQUENCE SIZE (1..MAX) OF CertificateList OPTIONAL
+     *          -- the resulting CRLs (there may be more than one)
+     *      }
+     *
+ */ + public class RevRepContent + : Asn1Encodable + { + public static RevRepContent GetInstance(object obj) + { + if (obj is RevRepContent revRepContent) + return revRepContent; + + if (obj != null) + return new RevRepContent(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly Asn1Sequence m_status; + private readonly Asn1Sequence m_revCerts; + private readonly Asn1Sequence m_crls; + + private RevRepContent(Asn1Sequence seq) + { + m_status = Asn1Sequence.GetInstance(seq[0]); + + for (int pos = 1; pos < seq.Count; ++pos) + { + Asn1TaggedObject tObj = Asn1TaggedObject.GetInstance(seq[pos]); + + if (tObj.TagNo == 0) + { + m_revCerts = Asn1Sequence.GetInstance(tObj, true); + } + else + { + m_crls = Asn1Sequence.GetInstance(tObj, true); + } + } + } + + public virtual PkiStatusInfo[] GetStatus() + { + return m_status.MapElements(PkiStatusInfo.GetInstance); + } + + public virtual CertId[] GetRevCerts() + { + if (m_revCerts == null) + return null; + + return m_revCerts.MapElements(CertId.GetInstance); + } + + public virtual CertificateList[] GetCrls() + { + if (m_crls == null) + return null; + + return m_crls.MapElements(CertificateList.GetInstance); + } + + /** + *
+		 * RevRepContent ::= SEQUENCE {
+		 *        status       SEQUENCE SIZE (1..MAX) OF PKIStatusInfo,
+		 *        -- in same order as was sent in RevReqContent
+		 *        revCerts [0] SEQUENCE SIZE (1..MAX) OF CertId OPTIONAL,
+		 *        -- IDs for which revocation was requested
+		 *        -- (same order as status)
+		 *        crls     [1] SEQUENCE SIZE (1..MAX) OF CertificateList OPTIONAL
+		 *        -- the resulting CRLs (there may be more than one)
+		 *   }
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(m_status); + v.AddOptionalTagged(true, 0, m_revCerts); + v.AddOptionalTagged(true, 1, m_crls); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevRepContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevRepContent.cs.meta new file mode 100644 index 000000000..76f4795c9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevRepContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 345761cabacdee14199048da28d3c395 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevRepContentBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevRepContentBuilder.cs new file mode 100644 index 000000000..15e88671a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevRepContentBuilder.cs @@ -0,0 +1,59 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class RevRepContentBuilder + { + private readonly Asn1EncodableVector m_status = new Asn1EncodableVector(); + private readonly Asn1EncodableVector m_revCerts = new Asn1EncodableVector(); + private readonly Asn1EncodableVector m_crls = new Asn1EncodableVector(); + + public virtual RevRepContentBuilder Add(PkiStatusInfo status) + { + m_status.Add(status); + return this; + } + + public virtual RevRepContentBuilder Add(PkiStatusInfo status, CertId certId) + { + if (m_status.Count != m_revCerts.Count) + throw new InvalidOperationException("status and revCerts sequence must be in common order"); + + m_status.Add(status); + m_revCerts.Add(certId); + return this; + } + + public virtual RevRepContentBuilder AddCrl(CertificateList crl) + { + m_crls.Add(crl); + return this; + } + + public virtual RevRepContent Build() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + v.Add(new DerSequence(m_status)); + + if (m_revCerts.Count != 0) + { + v.Add(new DerTaggedObject(true, 0, new DerSequence(m_revCerts))); + } + + if (m_crls.Count != 0) + { + v.Add(new DerTaggedObject(true, 1, new DerSequence(m_crls))); + } + + return RevRepContent.GetInstance(new DerSequence(v)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevRepContentBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevRepContentBuilder.cs.meta new file mode 100644 index 000000000..2be8b5004 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevRepContentBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c0470f2df4fce4e44a4fe1b0bab3e09d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevReqContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevReqContent.cs new file mode 100644 index 000000000..a7f61c941 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevReqContent.cs @@ -0,0 +1,58 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + public class RevReqContent + : Asn1Encodable + { + public static RevReqContent GetInstance(object obj) + { + if (obj is RevReqContent revReqContent) + return revReqContent; + + if (obj != null) + return new RevReqContent(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly Asn1Sequence m_content; + + private RevReqContent(Asn1Sequence seq) + { + m_content = seq; + } + + public RevReqContent(RevDetails revDetails) + { + m_content = new DerSequence(revDetails); + } + + public RevReqContent(params RevDetails[] revDetailsArray) + { + m_content = new DerSequence(revDetailsArray); + } + + public virtual RevDetails[] ToRevDetailsArray() + { + return m_content.MapElements(RevDetails.GetInstance); + } + + /** + *
+		 * RevReqContent ::= SEQUENCE OF RevDetails
+		 * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return m_content; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevReqContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevReqContent.cs.meta new file mode 100644 index 000000000..edf08dd2c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RevReqContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ca8dfb330261e2f449c12dd74b53fde3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RootCaKeyUpdateContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RootCaKeyUpdateContent.cs new file mode 100644 index 000000000..53080c189 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RootCaKeyUpdateContent.cs @@ -0,0 +1,95 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp +{ + /** + * GenMsg: {id-it 20}, RootCaCertValue | < absent > + * GenRep: {id-it 18}, RootCaKeyUpdateContent | < absent > + *

+ * RootCaCertValue ::= CMPCertificate + *

+ * RootCaKeyUpdateValue ::= RootCaKeyUpdateContent + *

+ * RootCaKeyUpdateContent ::= SEQUENCE { + * newWithNew CMPCertificate, + * newWithOld [0] CMPCertificate OPTIONAL, + * oldWithNew [1] CMPCertificate OPTIONAL + * } + *

+ */ + public class RootCaKeyUpdateContent + : Asn1Encodable + { + public static RootCaKeyUpdateContent GetInstance(object obj) + { + if (obj is RootCaKeyUpdateContent rootCaKeyUpdateContent) + return rootCaKeyUpdateContent; + + if (obj != null) + return new RootCaKeyUpdateContent(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly CmpCertificate m_newWithNew; + private readonly CmpCertificate m_newWithOld; + private readonly CmpCertificate m_oldWithNew; + + public RootCaKeyUpdateContent(CmpCertificate newWithNew, CmpCertificate newWithOld, CmpCertificate oldWithNew) + { + if (newWithNew == null) + throw new ArgumentNullException(nameof(newWithNew)); + + m_newWithNew = newWithNew; + m_newWithOld = newWithOld; + m_oldWithNew = oldWithNew; + } + + private RootCaKeyUpdateContent(Asn1Sequence seq) + { + if (seq.Count < 1 || seq.Count > 3) + throw new ArgumentException("expected sequence of 1 to 3 elements only"); + + CmpCertificate newWithNew; + CmpCertificate newWithOld = null; + CmpCertificate oldWithNew = null; + + newWithNew = CmpCertificate.GetInstance(seq[0]); + + for (int pos = 1; pos < seq.Count; ++pos) + { + Asn1TaggedObject ato = Asn1TaggedObject.GetInstance(seq[pos]); + if (ato.TagNo == 0) + { + newWithOld = CmpCertificate.GetInstance(ato, true); + } + else if (ato.TagNo == 1) + { + oldWithNew = CmpCertificate.GetInstance(ato, true); + } + } + + m_newWithNew = newWithNew; + m_newWithOld = newWithOld; + m_oldWithNew = oldWithNew; + } + + public virtual CmpCertificate NewWithNew => m_newWithNew; + + public virtual CmpCertificate NewWithOld => m_newWithOld; + + public virtual CmpCertificate OldWithNew => m_oldWithNew; + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(m_newWithNew); + v.AddOptionalTagged(true, 0, m_newWithOld); + v.AddOptionalTagged(true, 1, m_oldWithNew); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RootCaKeyUpdateContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RootCaKeyUpdateContent.cs.meta new file mode 100644 index 000000000..64587e705 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cmp/RootCaKeyUpdateContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f84c9fabbf2c01545acaf4b36e0c6e20 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms.meta new file mode 100644 index 000000000..6b0ededd2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 212c4beac220c8742966c43564131081 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Attribute.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Attribute.cs new file mode 100644 index 000000000..a493b7a24 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Attribute.cs @@ -0,0 +1,74 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class Attribute + : Asn1Encodable + { + private DerObjectIdentifier attrType; + private Asn1Set attrValues; + + /** + * return an Attribute object from the given object. + * + * @param o the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static Attribute GetInstance( + object obj) + { + if (obj == null || obj is Attribute) + return (Attribute) obj; + + if (obj is Asn1Sequence) + return new Attribute((Asn1Sequence) obj); + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public Attribute( + Asn1Sequence seq) + { + attrType = (DerObjectIdentifier)seq[0]; + attrValues = (Asn1Set)seq[1]; + } + + public Attribute( + DerObjectIdentifier attrType, + Asn1Set attrValues) + { + this.attrType = attrType; + this.attrValues = attrValues; + } + + public DerObjectIdentifier AttrType + { + get { return attrType; } + } + + public Asn1Set AttrValues + { + get { return attrValues; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+        * Attribute ::= SEQUENCE {
+        *     attrType OBJECT IDENTIFIER,
+        *     attrValues SET OF AttributeValue
+        * }
+        * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(attrType, attrValues); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Attribute.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Attribute.cs.meta new file mode 100644 index 000000000..1bacf0f8e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Attribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 80a1a404f8f8d0b40802427c7a9a919a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AttributeTable.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AttributeTable.cs new file mode 100644 index 000000000..af711d355 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AttributeTable.cs @@ -0,0 +1,224 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class AttributeTable + { + private readonly Dictionary m_attributes; + + public AttributeTable(IDictionary attrs) + { + m_attributes = new Dictionary(attrs); + } + + public AttributeTable(Asn1EncodableVector v) + { + m_attributes = new Dictionary(v.Count); + + foreach (Asn1Encodable e in v) + { + AddAttribute(Attribute.GetInstance(e)); + } + } + + public AttributeTable(Asn1Set s) + { + m_attributes = new Dictionary(s.Count); + + foreach (Asn1Encodable e in s) + { + AddAttribute(Attribute.GetInstance(e)); + } + } + + public AttributeTable(Attributes attrs) + : this(Asn1Set.GetInstance(attrs.ToAsn1Object())) + { + } + + private void AddAttribute(Attribute a) + { + DerObjectIdentifier oid = a.AttrType; + + if (!m_attributes.TryGetValue(oid, out object existingValue)) + { + m_attributes[oid] = a; + return; + } + + if (existingValue is IList existingList) + { + existingList.Add(a); + return; + } + + if (existingValue is Attribute existingAttr) + { + var newList = new List(); + newList.Add(existingAttr); + newList.Add(a); + m_attributes[oid] = newList; + return; + } + + throw new InvalidOperationException(); + } + + /// Return the first attribute matching the given OBJECT IDENTIFIER + public Attribute this[DerObjectIdentifier oid] + { + get + { + if (!m_attributes.TryGetValue(oid, out object existingValue)) + return null; + + if (existingValue is IList existingList) + return existingList[0]; + + if (existingValue is Attribute existingAttr) + return existingAttr; + + throw new InvalidOperationException(); + } + } + + /** + * Return all the attributes matching the OBJECT IDENTIFIER oid. The vector will be + * empty if there are no attributes of the required type present. + * + * @param oid type of attribute required. + * @return a vector of all the attributes found of type oid. + */ + public Asn1EncodableVector GetAll(DerObjectIdentifier oid) + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + if (m_attributes.TryGetValue(oid, out object existingValue)) + { + if (existingValue is IList existingList) + { + foreach (var attr in existingList) + { + v.Add(attr); + } + } + else if (existingValue is Attribute existingAttr) + { + v.Add(existingAttr); + } + else + { + throw new InvalidOperationException(); + } + } + + return v; + } + + public int Count + { + get + { + int total = 0; + + foreach (object existingValue in m_attributes.Values) + { + if (existingValue is IList existingList) + { + total += existingList.Count; + } + else if (existingValue is Attribute existingAttr) + { + ++total; + } + else + { + throw new InvalidOperationException(); + } + } + + return total; + } + } + + public IDictionary ToDictionary() + { + return new Dictionary(m_attributes); + } + + public Asn1EncodableVector ToAsn1EncodableVector() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + foreach (object existingValue in m_attributes.Values) + { + if (existingValue is IList existingList) + { + foreach (Attribute existingAttr in existingList) + { + v.Add(existingAttr); + } + } + else if (existingValue is Attribute existingAttr) + { + v.Add(existingAttr); + } + else + { + throw new InvalidOperationException(); + } + } + + return v; + } + + public Attributes ToAttributes() + { + return new Attributes(ToAsn1EncodableVector()); + } + + public AttributeTable Add(params Attribute[] attributes) + { + if (attributes == null || attributes.Length < 1) + return this; + + var newTable = new AttributeTable(m_attributes); + foreach (Attribute attribute in attributes) + { + newTable.AddAttribute(attribute); + } + + return newTable; + } + + /** + * Return a new table with the passed in attribute added. + * + * @param attrType + * @param attrValue + * @return + */ + public AttributeTable Add(DerObjectIdentifier attrType, Asn1Encodable attrValue) + { + AttributeTable newTable = new AttributeTable(m_attributes); + + newTable.AddAttribute(new Attribute(attrType, new DerSet(attrValue))); + + return newTable; + } + + public AttributeTable Remove(DerObjectIdentifier attrType) + { + AttributeTable newTable = new AttributeTable(m_attributes); + + newTable.m_attributes.Remove(attrType); + + return newTable; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AttributeTable.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AttributeTable.cs.meta new file mode 100644 index 000000000..079fe3160 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AttributeTable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 912ed9d9330ddd94f9e159d5fc9eff79 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Attributes.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Attributes.cs new file mode 100644 index 000000000..10941f122 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Attributes.cs @@ -0,0 +1,59 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class Attributes + : Asn1Encodable + { + private readonly Asn1Set attributes; + + private Attributes(Asn1Set attributes) + { + this.attributes = attributes; + } + + public Attributes(Asn1EncodableVector v) + { + attributes = new BerSet(v); + } + + public static Attributes GetInstance(object obj) + { + if (obj is Attributes) + return (Attributes)obj; + + if (obj != null) + return new Attributes(Asn1Set.GetInstance(obj)); + + return null; + } + + public virtual Attribute[] GetAttributes() + { + Attribute[] rv = new Attribute[attributes.Count]; + + for (int i = 0; i != rv.Length; i++) + { + rv[i] = Attribute.GetInstance(attributes[i]); + } + + return rv; + } + + /** + *
+         * Attributes ::=
+         *   SET SIZE(1..MAX) OF Attribute -- according to RFC 5652
+         * 
+ * @return + */ + public override Asn1Object ToAsn1Object() + { + return attributes; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Attributes.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Attributes.cs.meta new file mode 100644 index 000000000..bb988be87 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Attributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0312113ad395aa44798f44ad1425c4e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthEnvelopedData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthEnvelopedData.cs new file mode 100644 index 000000000..c38f04d9b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthEnvelopedData.cs @@ -0,0 +1,209 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class AuthEnvelopedData + : Asn1Encodable + { + private DerInteger version; + private OriginatorInfo originatorInfo; + private Asn1Set recipientInfos; + private EncryptedContentInfo authEncryptedContentInfo; + private Asn1Set authAttrs; + private Asn1OctetString mac; + private Asn1Set unauthAttrs; + + public AuthEnvelopedData( + OriginatorInfo originatorInfo, + Asn1Set recipientInfos, + EncryptedContentInfo authEncryptedContentInfo, + Asn1Set authAttrs, + Asn1OctetString mac, + Asn1Set unauthAttrs) + { + // "It MUST be set to 0." + this.version = new DerInteger(0); + + this.originatorInfo = originatorInfo; + + // "There MUST be at least one element in the collection." + this.recipientInfos = recipientInfos; + if (this.recipientInfos.Count < 1) + throw new ArgumentException("AuthEnvelopedData requires at least 1 RecipientInfo"); + + this.authEncryptedContentInfo = authEncryptedContentInfo; + + // "The authAttrs MUST be present if the content type carried in + // EncryptedContentInfo is not id-data." + this.authAttrs = authAttrs; + if (!authEncryptedContentInfo.ContentType.Equals(CmsObjectIdentifiers.Data)) + { + if (authAttrs == null || authAttrs.Count < 1) + throw new ArgumentException("authAttrs must be present with non-data content"); + } + + this.mac = mac; + + this.unauthAttrs = unauthAttrs; + } + + private AuthEnvelopedData( + Asn1Sequence seq) + { + int index = 0; + + // "It MUST be set to 0." + Asn1Object tmp = seq[index++].ToAsn1Object(); + version = DerInteger.GetInstance(tmp); + if (!version.HasValue(0)) + throw new ArgumentException("AuthEnvelopedData version number must be 0"); + + tmp = seq[index++].ToAsn1Object(); + if (tmp is Asn1TaggedObject) + { + originatorInfo = OriginatorInfo.GetInstance((Asn1TaggedObject)tmp, false); + tmp = seq[index++].ToAsn1Object(); + } + + // "There MUST be at least one element in the collection." + recipientInfos = Asn1Set.GetInstance(tmp); + if (recipientInfos.Count < 1) + throw new ArgumentException("AuthEnvelopedData requires at least 1 RecipientInfo"); + + tmp = seq[index++].ToAsn1Object(); + authEncryptedContentInfo = EncryptedContentInfo.GetInstance(tmp); + + tmp = seq[index++].ToAsn1Object(); + if (tmp is Asn1TaggedObject) + { + authAttrs = Asn1Set.GetInstance((Asn1TaggedObject)tmp, false); + tmp = seq[index++].ToAsn1Object(); + } + else + { + // "The authAttrs MUST be present if the content type carried in + // EncryptedContentInfo is not id-data." + if (!authEncryptedContentInfo.ContentType.Equals(CmsObjectIdentifiers.Data)) + { + if (authAttrs == null || authAttrs.Count < 1) + throw new ArgumentException("authAttrs must be present with non-data content"); + } + } + + mac = Asn1OctetString.GetInstance(tmp); + + if (seq.Count > index) + { + tmp = seq[index++].ToAsn1Object(); + unauthAttrs = Asn1Set.GetInstance((Asn1TaggedObject)tmp, false); + } + } + + /** + * return an AuthEnvelopedData object from a tagged object. + * + * @param obj the tagged object holding the object we want. + * @param isExplicit true if the object is meant to be explicitly + * tagged false otherwise. + * @throws ArgumentException if the object held by the + * tagged object cannot be converted. + */ + public static AuthEnvelopedData GetInstance( + Asn1TaggedObject obj, + bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit)); + } + + /** + * return an AuthEnvelopedData object from the given object. + * + * @param obj the object we want converted. + * @throws ArgumentException if the object cannot be converted. + */ + public static AuthEnvelopedData GetInstance( + object obj) + { + if (obj == null || obj is AuthEnvelopedData) + return (AuthEnvelopedData)obj; + + if (obj is Asn1Sequence) + return new AuthEnvelopedData((Asn1Sequence)obj); + + throw new ArgumentException("Invalid AuthEnvelopedData: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public DerInteger Version + { + get { return version; } + } + + public OriginatorInfo OriginatorInfo + { + get { return originatorInfo; } + } + + public Asn1Set RecipientInfos + { + get { return recipientInfos; } + } + + public EncryptedContentInfo AuthEncryptedContentInfo + { + get { return authEncryptedContentInfo; } + } + + public Asn1Set AuthAttrs + { + get { return authAttrs; } + } + + public Asn1OctetString Mac + { + get { return mac; } + } + + public Asn1Set UnauthAttrs + { + get { return unauthAttrs; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+		 * AuthEnvelopedData ::= SEQUENCE {
+		 *   version CMSVersion,
+		 *   originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
+		 *   recipientInfos RecipientInfos,
+		 *   authEncryptedContentInfo EncryptedContentInfo,
+		 *   authAttrs [1] IMPLICIT AuthAttributes OPTIONAL,
+		 *   mac MessageAuthenticationCode,
+		 *   unauthAttrs [2] IMPLICIT UnauthAttributes OPTIONAL }
+		 * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(version); + v.AddOptionalTagged(false, 0, originatorInfo); + v.Add(recipientInfos, authEncryptedContentInfo); + + // "authAttrs optionally contains the authenticated attributes." + // "AuthAttributes MUST be DER encoded, even if the rest of the + // AuthEnvelopedData structure is BER encoded." + v.AddOptionalTagged(false, 1, authAttrs); + + v.Add(mac); + + // "unauthAttrs optionally contains the unauthenticated attributes." + v.AddOptionalTagged(false, 2, unauthAttrs); + + return new BerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthEnvelopedData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthEnvelopedData.cs.meta new file mode 100644 index 000000000..20f63cb80 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthEnvelopedData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c8a15712ba58fe4abdcf4a3af30a4ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthEnvelopedDataParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthEnvelopedDataParser.cs new file mode 100644 index 000000000..5acd34630 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthEnvelopedDataParser.cs @@ -0,0 +1,155 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + /** + * Produce an object suitable for an Asn1OutputStream. + * + *
+	 * AuthEnvelopedData ::= SEQUENCE {
+	 *   version CMSVersion,
+	 *   originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
+	 *   recipientInfos RecipientInfos,
+	 *   authEncryptedContentInfo EncryptedContentInfo,
+	 *   authAttrs [1] IMPLICIT AuthAttributes OPTIONAL,
+	 *   mac MessageAuthenticationCode,
+	 *   unauthAttrs [2] IMPLICIT UnauthAttributes OPTIONAL }
+	 * 
+ */ + public class AuthEnvelopedDataParser + { + private Asn1SequenceParser seq; + private DerInteger version; + private IAsn1Convertible nextObject; + private bool originatorInfoCalled; + private bool isData; + + public AuthEnvelopedDataParser( + Asn1SequenceParser seq) + { + this.seq = seq; + + // "It MUST be set to 0." + this.version = (DerInteger)seq.ReadObject(); + if (!version.HasValue(0)) + throw new Asn1ParsingException("AuthEnvelopedData version number must be 0"); + } + + public DerInteger Version + { + get { return version; } + } + + public OriginatorInfo GetOriginatorInfo() + { + originatorInfoCalled = true; + + if (nextObject == null) + { + nextObject = seq.ReadObject(); + } + + if (nextObject is Asn1TaggedObjectParser o) + { + if (o.HasContextTag(0)) + { + Asn1SequenceParser originatorInfo = (Asn1SequenceParser)o.ParseBaseUniversal(false, Asn1Tags.Sequence); + nextObject = null; + return OriginatorInfo.GetInstance(originatorInfo.ToAsn1Object()); + } + } + + return null; + } + + public Asn1SetParser GetRecipientInfos() + { + if (!originatorInfoCalled) + { + GetOriginatorInfo(); + } + + if (nextObject == null) + { + nextObject = seq.ReadObject(); + } + + Asn1SetParser recipientInfos = (Asn1SetParser)nextObject; + nextObject = null; + return recipientInfos; + } + + public EncryptedContentInfoParser GetAuthEncryptedContentInfo() + { + if (nextObject == null) + { + nextObject = seq.ReadObject(); + } + + if (nextObject != null) + { + Asn1SequenceParser o = (Asn1SequenceParser) nextObject; + nextObject = null; + EncryptedContentInfoParser encryptedContentInfoParser = new EncryptedContentInfoParser(o); + isData = CmsObjectIdentifiers.Data.Equals(encryptedContentInfoParser.ContentType); + return encryptedContentInfoParser; + } + + return null; + } + + public Asn1SetParser GetAuthAttrs() + { + if (nextObject == null) + { + nextObject = seq.ReadObject(); + } + + if (nextObject is Asn1TaggedObjectParser o) + { + nextObject = null; + return (Asn1SetParser)Asn1Utilities.ParseContextBaseUniversal(o, 1, false, Asn1Tags.SetOf); + } + + // "The authAttrs MUST be present if the content type carried in EncryptedContentInfo is not id-data." + if (!isData) + throw new Asn1ParsingException("authAttrs must be present with non-data content"); + + return null; + } + + public Asn1OctetString GetMac() + { + if (nextObject == null) + { + nextObject = seq.ReadObject(); + } + + IAsn1Convertible o = nextObject; + nextObject = null; + + return Asn1OctetString.GetInstance(o.ToAsn1Object()); + } + + public Asn1SetParser GetUnauthAttrs() + { + if (nextObject == null) + { + nextObject = seq.ReadObject(); + } + + if (nextObject != null) + { + Asn1TaggedObjectParser o = (Asn1TaggedObjectParser)nextObject; + nextObject = null; + return (Asn1SetParser)Asn1Utilities.ParseContextBaseUniversal(o, 2, false, Asn1Tags.SetOf); + } + + return null; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthEnvelopedDataParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthEnvelopedDataParser.cs.meta new file mode 100644 index 000000000..136a48738 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthEnvelopedDataParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 443c4c049a391fb43a3fbfe484820cd9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthenticatedData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthenticatedData.cs new file mode 100644 index 000000000..195ce12a9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthenticatedData.cs @@ -0,0 +1,255 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class AuthenticatedData + : Asn1Encodable + { + private DerInteger version; + private OriginatorInfo originatorInfo; + private Asn1Set recipientInfos; + private AlgorithmIdentifier macAlgorithm; + private AlgorithmIdentifier digestAlgorithm; + private ContentInfo encapsulatedContentInfo; + private Asn1Set authAttrs; + private Asn1OctetString mac; + private Asn1Set unauthAttrs; + + public AuthenticatedData( + OriginatorInfo originatorInfo, + Asn1Set recipientInfos, + AlgorithmIdentifier macAlgorithm, + AlgorithmIdentifier digestAlgorithm, + ContentInfo encapsulatedContent, + Asn1Set authAttrs, + Asn1OctetString mac, + Asn1Set unauthAttrs) + { + if (digestAlgorithm != null || authAttrs != null) + { + if (digestAlgorithm == null || authAttrs == null) + { + throw new ArgumentException("digestAlgorithm and authAttrs must be set together"); + } + } + + version = new DerInteger(CalculateVersion(originatorInfo)); + + this.originatorInfo = originatorInfo; + this.macAlgorithm = macAlgorithm; + this.digestAlgorithm = digestAlgorithm; + this.recipientInfos = recipientInfos; + this.encapsulatedContentInfo = encapsulatedContent; + this.authAttrs = authAttrs; + this.mac = mac; + this.unauthAttrs = unauthAttrs; + } + + private AuthenticatedData( + Asn1Sequence seq) + { + int index = 0; + + version = (DerInteger)seq[index++]; + + Asn1Encodable tmp = seq[index++]; + if (tmp is Asn1TaggedObject) + { + originatorInfo = OriginatorInfo.GetInstance((Asn1TaggedObject)tmp, false); + tmp = seq[index++]; + } + + recipientInfos = Asn1Set.GetInstance(tmp); + macAlgorithm = AlgorithmIdentifier.GetInstance(seq[index++]); + + tmp = seq[index++]; + if (tmp is Asn1TaggedObject) + { + digestAlgorithm = AlgorithmIdentifier.GetInstance((Asn1TaggedObject)tmp, false); + tmp = seq[index++]; + } + + encapsulatedContentInfo = ContentInfo.GetInstance(tmp); + + tmp = seq[index++]; + if (tmp is Asn1TaggedObject) + { + authAttrs = Asn1Set.GetInstance((Asn1TaggedObject)tmp, false); + tmp = seq[index++]; + } + + mac = Asn1OctetString.GetInstance(tmp); + + if (seq.Count > index) + { + unauthAttrs = Asn1Set.GetInstance((Asn1TaggedObject)seq[index], false); + } + } + + /** + * return an AuthenticatedData object from a tagged object. + * + * @param obj the tagged object holding the object we want. + * @param isExplicit true if the object is meant to be explicitly + * tagged false otherwise. + * @throws ArgumentException if the object held by the + * tagged object cannot be converted. + */ + public static AuthenticatedData GetInstance( + Asn1TaggedObject obj, + bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit)); + } + + /** + * return an AuthenticatedData object from the given object. + * + * @param obj the object we want converted. + * @throws ArgumentException if the object cannot be converted. + */ + public static AuthenticatedData GetInstance( + object obj) + { + if (obj == null || obj is AuthenticatedData) + { + return (AuthenticatedData)obj; + } + + if (obj is Asn1Sequence) + { + return new AuthenticatedData((Asn1Sequence)obj); + } + + throw new ArgumentException("Invalid AuthenticatedData: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public DerInteger Version + { + get { return version; } + } + + public OriginatorInfo OriginatorInfo + { + get { return originatorInfo; } + } + + public Asn1Set RecipientInfos + { + get { return recipientInfos; } + } + + public AlgorithmIdentifier MacAlgorithm + { + get { return macAlgorithm; } + } + + public AlgorithmIdentifier DigestAlgorithm + { + get { return digestAlgorithm; } + } + + public ContentInfo EncapsulatedContentInfo + { + get { return encapsulatedContentInfo; } + } + + public Asn1Set AuthAttrs + { + get { return authAttrs; } + } + + public Asn1OctetString Mac + { + get { return mac; } + } + + public Asn1Set UnauthAttrs + { + get { return unauthAttrs; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+		 * AuthenticatedData ::= SEQUENCE {
+		 *       version CMSVersion,
+		 *       originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
+		 *       recipientInfos RecipientInfos,
+		 *       macAlgorithm MessageAuthenticationCodeAlgorithm,
+		 *       digestAlgorithm [1] DigestAlgorithmIdentifier OPTIONAL,
+		 *       encapContentInfo EncapsulatedContentInfo,
+		 *       authAttrs [2] IMPLICIT AuthAttributes OPTIONAL,
+		 *       mac MessageAuthenticationCode,
+		 *       unauthAttrs [3] IMPLICIT UnauthAttributes OPTIONAL }
+		 *
+		 * AuthAttributes ::= SET SIZE (1..MAX) OF Attribute
+		 *
+		 * UnauthAttributes ::= SET SIZE (1..MAX) OF Attribute
+		 *
+		 * MessageAuthenticationCode ::= OCTET STRING
+		 * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(version); + v.AddOptionalTagged(false, 0, originatorInfo); + v.Add(recipientInfos, macAlgorithm); + v.AddOptionalTagged(false, 1, digestAlgorithm); + v.Add(encapsulatedContentInfo); + v.AddOptionalTagged(false, 2, authAttrs); + v.Add(mac); + v.AddOptionalTagged(false, 3, unauthAttrs); + return new BerSequence(v); + } + + public static int CalculateVersion(OriginatorInfo origInfo) + { + if (origInfo == null) + return 0; + + int ver = 0; + + foreach (object obj in origInfo.Certificates) + { + if (obj is Asn1TaggedObject) + { + Asn1TaggedObject tag = (Asn1TaggedObject)obj; + + if (tag.TagNo == 2) + { + ver = 1; + } + else if (tag.TagNo == 3) + { + ver = 3; + break; + } + } + } + + foreach (object obj in origInfo.Crls) + { + if (obj is Asn1TaggedObject) + { + Asn1TaggedObject tag = (Asn1TaggedObject)obj; + + if (tag.TagNo == 1) + { + ver = 3; + break; + } + } + } + + return ver; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthenticatedData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthenticatedData.cs.meta new file mode 100644 index 000000000..48b6b252b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthenticatedData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bd580b30e67ffd4408ff835aa957e0a3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthenticatedDataParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthenticatedDataParser.cs new file mode 100644 index 000000000..46c31d253 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthenticatedDataParser.cs @@ -0,0 +1,188 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + /** + * Produce an object suitable for an Asn1OutputStream. + *
+	 * AuthenticatedData ::= SEQUENCE {
+	 *       version CMSVersion,
+	 *       originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
+	 *       recipientInfos RecipientInfos,
+	 *       macAlgorithm MessageAuthenticationCodeAlgorithm,
+	 *       digestAlgorithm [1] DigestAlgorithmIdentifier OPTIONAL,
+	 *       encapContentInfo EncapsulatedContentInfo,
+	 *       authAttrs [2] IMPLICIT AuthAttributes OPTIONAL,
+	 *       mac MessageAuthenticationCode,
+	 *       unauthAttrs [3] IMPLICIT UnauthAttributes OPTIONAL }
+	 *
+	 * AuthAttributes ::= SET SIZE (1..MAX) OF Attribute
+	 *
+	 * UnauthAttributes ::= SET SIZE (1..MAX) OF Attribute
+	 *
+	 * MessageAuthenticationCode ::= OCTET STRING
+	 * 
+ */ + public class AuthenticatedDataParser + { + private Asn1SequenceParser seq; + private DerInteger version; + private IAsn1Convertible nextObject; + private bool originatorInfoCalled; + + public AuthenticatedDataParser( + Asn1SequenceParser seq) + { + this.seq = seq; + this.version = (DerInteger)seq.ReadObject(); + } + + public DerInteger Version + { + get { return version; } + } + + public OriginatorInfo GetOriginatorInfo() + { + originatorInfoCalled = true; + + if (nextObject == null) + { + nextObject = seq.ReadObject(); + } + + if (nextObject is Asn1TaggedObjectParser o) + { + if (o.HasContextTag(0)) + { + Asn1SequenceParser originatorInfo = (Asn1SequenceParser)o.ParseBaseUniversal(false, Asn1Tags.Sequence); + nextObject = null; + return OriginatorInfo.GetInstance(originatorInfo.ToAsn1Object()); + } + } + + return null; + } + + public Asn1SetParser GetRecipientInfos() + { + if (!originatorInfoCalled) + { + GetOriginatorInfo(); + } + + if (nextObject == null) + { + nextObject = seq.ReadObject(); + } + + Asn1SetParser recipientInfos = (Asn1SetParser)nextObject; + nextObject = null; + return recipientInfos; + } + + public AlgorithmIdentifier GetMacAlgorithm() + { + if (nextObject == null) + { + nextObject = seq.ReadObject(); + } + + if (nextObject != null) + { + Asn1SequenceParser o = (Asn1SequenceParser)nextObject; + nextObject = null; + return AlgorithmIdentifier.GetInstance(o.ToAsn1Object()); + } + + return null; + } + + public AlgorithmIdentifier GetDigestAlgorithm() + { + if (nextObject == null) + { + nextObject = seq.ReadObject(); + } + + if (nextObject is Asn1TaggedObjectParser) + { + AlgorithmIdentifier obj = AlgorithmIdentifier.GetInstance( + (Asn1TaggedObject)nextObject.ToAsn1Object(), false); + nextObject = null; + return obj; + } + + return null; + } + + public ContentInfoParser GetEnapsulatedContentInfo() + { + if (nextObject == null) + { + nextObject = seq.ReadObject(); + } + + if (nextObject != null) + { + Asn1SequenceParser o = (Asn1SequenceParser)nextObject; + nextObject = null; + return new ContentInfoParser(o); + } + + return null; + } + + public Asn1SetParser GetAuthAttrs() + { + if (nextObject == null) + { + nextObject = seq.ReadObject(); + } + + if (nextObject is Asn1TaggedObjectParser o) + { + nextObject = null; + return (Asn1SetParser)Asn1Utilities.ParseContextBaseUniversal(o, 2, false, Asn1Tags.SetOf); + } + + return null; + } + + public Asn1OctetString GetMac() + { + if (nextObject == null) + { + nextObject = seq.ReadObject(); + } + + IAsn1Convertible o = nextObject; + nextObject = null; + + return Asn1OctetString.GetInstance(o.ToAsn1Object()); + } + + public Asn1SetParser GetUnauthAttrs() + { + if (nextObject == null) + { + nextObject = seq.ReadObject(); + } + + if (nextObject != null) + { + Asn1TaggedObject o = (Asn1TaggedObject)nextObject; + nextObject = null; + return (Asn1SetParser)Asn1Utilities.ParseContextBaseUniversal(o, 3, false, Asn1Tags.SetOf); + } + + return null; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthenticatedDataParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthenticatedDataParser.cs.meta new file mode 100644 index 000000000..39cc7ec42 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/AuthenticatedDataParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ebbdcf3516ac7004dbf60b37ec8649ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CMSAttributes.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CMSAttributes.cs new file mode 100644 index 000000000..ac3eac370 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CMSAttributes.cs @@ -0,0 +1,18 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public abstract class CmsAttributes + { + public static readonly DerObjectIdentifier ContentType = PkcsObjectIdentifiers.Pkcs9AtContentType; + public static readonly DerObjectIdentifier MessageDigest = PkcsObjectIdentifiers.Pkcs9AtMessageDigest; + public static readonly DerObjectIdentifier SigningTime = PkcsObjectIdentifiers.Pkcs9AtSigningTime; + public static readonly DerObjectIdentifier CounterSignature = PkcsObjectIdentifiers.Pkcs9AtCounterSignature; + public static readonly DerObjectIdentifier ContentHint = PkcsObjectIdentifiers.IdAAContentHint; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CMSAttributes.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CMSAttributes.cs.meta new file mode 100644 index 000000000..9789db7e2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CMSAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0757271e8a9b09e47b7b926b9e69bc40 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CMSObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CMSObjectIdentifiers.cs new file mode 100644 index 000000000..379549d34 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CMSObjectIdentifiers.cs @@ -0,0 +1,33 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public abstract class CmsObjectIdentifiers + { + public static readonly DerObjectIdentifier Data = PkcsObjectIdentifiers.Data; + public static readonly DerObjectIdentifier SignedData = PkcsObjectIdentifiers.SignedData; + public static readonly DerObjectIdentifier EnvelopedData = PkcsObjectIdentifiers.EnvelopedData; + public static readonly DerObjectIdentifier SignedAndEnvelopedData = PkcsObjectIdentifiers.SignedAndEnvelopedData; + public static readonly DerObjectIdentifier DigestedData = PkcsObjectIdentifiers.DigestedData; + public static readonly DerObjectIdentifier EncryptedData = PkcsObjectIdentifiers.EncryptedData; + public static readonly DerObjectIdentifier AuthenticatedData = PkcsObjectIdentifiers.IdCTAuthData; + public static readonly DerObjectIdentifier CompressedData = PkcsObjectIdentifiers.IdCTCompressedData; + public static readonly DerObjectIdentifier AuthEnvelopedData = PkcsObjectIdentifiers.IdCTAuthEnvelopedData; + public static readonly DerObjectIdentifier TimestampedData = PkcsObjectIdentifiers.IdCTTimestampedData; + public static readonly DerObjectIdentifier ZlibCompress = PkcsObjectIdentifiers.IdAlgZlibCompress; + + /** + * The other Revocation Info arc + * id-ri OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) + * dod(6) internet(1) security(5) mechanisms(5) pkix(7) ri(16) } + */ + public static readonly DerObjectIdentifier id_ri = new DerObjectIdentifier("1.3.6.1.5.5.7.16"); + + public static readonly DerObjectIdentifier id_ri_ocsp_response = id_ri.Branch("2"); + public static readonly DerObjectIdentifier id_ri_scvp = id_ri.Branch("4"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CMSObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CMSObjectIdentifiers.cs.meta new file mode 100644 index 000000000..60686d23f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CMSObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1048b2656131c87478097ba9d30c9529 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CompressedData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CompressedData.cs new file mode 100644 index 000000000..a4ccfb662 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CompressedData.cs @@ -0,0 +1,100 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + /** + * RFC 3274 - CMS Compressed Data. + *
+     * CompressedData ::= Sequence {
+     *  version CMSVersion,
+     *  compressionAlgorithm CompressionAlgorithmIdentifier,
+     *  encapContentInfo EncapsulatedContentInfo
+     * }
+     * 
+ */ + public class CompressedData + : Asn1Encodable + { + private DerInteger version; + private AlgorithmIdentifier compressionAlgorithm; + private ContentInfo encapContentInfo; + + public CompressedData( + AlgorithmIdentifier compressionAlgorithm, + ContentInfo encapContentInfo) + { + this.version = new DerInteger(0); + this.compressionAlgorithm = compressionAlgorithm; + this.encapContentInfo = encapContentInfo; + } + + public CompressedData( + Asn1Sequence seq) + { + this.version = (DerInteger) seq[0]; + this.compressionAlgorithm = AlgorithmIdentifier.GetInstance(seq[1]); + this.encapContentInfo = ContentInfo.GetInstance(seq[2]); + } + + /** + * return a CompressedData object from a tagged object. + * + * @param ato the tagged object holding the object we want. + * @param explicitly true if the object is meant to be explicitly + * tagged false otherwise. + * @exception ArgumentException if the object held by the + * tagged object cannot be converted. + */ + public static CompressedData GetInstance( + Asn1TaggedObject ato, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(ato, explicitly)); + } + + /** + * return a CompressedData object from the given object. + * + * @param _obj the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static CompressedData GetInstance( + object obj) + { + if (obj == null || obj is CompressedData) + return (CompressedData)obj; + + if (obj is Asn1Sequence) + return new CompressedData((Asn1Sequence) obj); + + throw new ArgumentException("Invalid CompressedData: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public DerInteger Version + { + get { return version; } + } + + public AlgorithmIdentifier CompressionAlgorithmIdentifier + { + get { return compressionAlgorithm; } + } + + public ContentInfo EncapContentInfo + { + get { return encapContentInfo; } + } + + public override Asn1Object ToAsn1Object() + { + return new BerSequence(version, compressionAlgorithm, encapContentInfo); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CompressedData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CompressedData.cs.meta new file mode 100644 index 000000000..c94c54a22 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CompressedData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce76e0ad7ebaa474b93ee262adb8891f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CompressedDataParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CompressedDataParser.cs new file mode 100644 index 000000000..978d16f05 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CompressedDataParser.cs @@ -0,0 +1,51 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + /** + * RFC 3274 - CMS Compressed Data. + *
+	* CompressedData ::= SEQUENCE {
+	*  version CMSVersion,
+	*  compressionAlgorithm CompressionAlgorithmIdentifier,
+	*  encapContentInfo EncapsulatedContentInfo
+	* }
+	* 
+ */ + public class CompressedDataParser + { + private DerInteger _version; + private AlgorithmIdentifier _compressionAlgorithm; + private ContentInfoParser _encapContentInfo; + + public CompressedDataParser( + Asn1SequenceParser seq) + { + this._version = (DerInteger)seq.ReadObject(); + this._compressionAlgorithm = AlgorithmIdentifier.GetInstance(seq.ReadObject().ToAsn1Object()); + this._encapContentInfo = new ContentInfoParser((Asn1SequenceParser)seq.ReadObject()); + } + + public DerInteger Version + { + get { return _version; } + } + + public AlgorithmIdentifier CompressionAlgorithmIdentifier + { + get { return _compressionAlgorithm; } + } + + public ContentInfoParser GetEncapContentInfo() + { + return _encapContentInfo; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CompressedDataParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CompressedDataParser.cs.meta new file mode 100644 index 000000000..d3d0c9e0c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/CompressedDataParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c601491913dd1a843bb9249917b4d526 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ContentInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ContentInfo.cs new file mode 100644 index 000000000..ca5869a13 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ContentInfo.cs @@ -0,0 +1,91 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class ContentInfo + : Asn1Encodable + { + private readonly DerObjectIdentifier contentType; + private readonly Asn1Encodable content; + + public static ContentInfo GetInstance( + object obj) + { + if (obj == null || obj is ContentInfo) + return (ContentInfo) obj; + + if (obj is Asn1Sequence) + return new ContentInfo((Asn1Sequence) obj); + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public static ContentInfo GetInstance(Asn1TaggedObject obj, bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit)); + } + + private ContentInfo( + Asn1Sequence seq) + { + if (seq.Count < 1 || seq.Count > 2) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + contentType = (DerObjectIdentifier) seq[0]; + + if (seq.Count > 1) + { + Asn1TaggedObject tagged = (Asn1TaggedObject) seq[1]; + if (!tagged.IsExplicit() || tagged.TagNo != 0) + throw new ArgumentException("Bad tag for 'content'", "seq"); + + content = tagged.GetObject(); + } + } + + public ContentInfo( + DerObjectIdentifier contentType, + Asn1Encodable content) + { + this.contentType = contentType; + this.content = content; + } + + public DerObjectIdentifier ContentType + { + get { return contentType; } + } + + public Asn1Encodable Content + { + get { return content; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * ContentInfo ::= Sequence {
+         *          contentType ContentType,
+         *          content
+         *          [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(contentType); + + if (content != null) + { + v.Add(new BerTaggedObject(0, content)); + } + + return new BerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ContentInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ContentInfo.cs.meta new file mode 100644 index 000000000..00cf2d337 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ContentInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c6e4f0a47c3351438d7f12b33875555 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ContentInfoParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ContentInfoParser.cs new file mode 100644 index 000000000..692546657 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ContentInfoParser.cs @@ -0,0 +1,44 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + /** + * Produce an object suitable for an Asn1OutputStream. + *
+	* ContentInfo ::= SEQUENCE {
+	*          contentType ContentType,
+	*          content
+	*          [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
+	* 
+ */ + public class ContentInfoParser + { + private readonly DerObjectIdentifier m_contentType; + private readonly Asn1TaggedObjectParser m_content; + + public ContentInfoParser(Asn1SequenceParser seq) + { + m_contentType = (DerObjectIdentifier)seq.ReadObject(); + m_content = (Asn1TaggedObjectParser)seq.ReadObject(); + } + + public DerObjectIdentifier ContentType + { + get { return m_contentType; } + } + + public IAsn1Convertible GetContent(int tag) + { + if (null == m_content) + return null; + + // TODO[cms] Ideally we could enforce the claimed tag + //return Asn1Utilities.ParseContextBaseUniversal(content, 0, true, tag); + return Asn1Utilities.ParseExplicitContextBaseObject(m_content, 0); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ContentInfoParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ContentInfoParser.cs.meta new file mode 100644 index 000000000..747eacf2f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ContentInfoParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d534f39bac83c4345bdd3b1116cc1b3b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EncryptedContentInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EncryptedContentInfo.cs new file mode 100644 index 000000000..24495c1ce --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EncryptedContentInfo.cs @@ -0,0 +1,98 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class EncryptedContentInfo + : Asn1Encodable + { + private DerObjectIdentifier contentType; + private AlgorithmIdentifier contentEncryptionAlgorithm; + private Asn1OctetString encryptedContent; + + public EncryptedContentInfo( + DerObjectIdentifier contentType, + AlgorithmIdentifier contentEncryptionAlgorithm, + Asn1OctetString encryptedContent) + { + this.contentType = contentType; + this.contentEncryptionAlgorithm = contentEncryptionAlgorithm; + this.encryptedContent = encryptedContent; + } + + public EncryptedContentInfo( + Asn1Sequence seq) + { + contentType = (DerObjectIdentifier) seq[0]; + contentEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(seq[1]); + + if (seq.Count > 2) + { + encryptedContent = Asn1OctetString.GetInstance( + (Asn1TaggedObject) seq[2], false); + } + } + + /** + * return an EncryptedContentInfo object from the given object. + * + * @param obj the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static EncryptedContentInfo GetInstance( + object obj) + { + if (obj == null || obj is EncryptedContentInfo) + return (EncryptedContentInfo)obj; + + if (obj is Asn1Sequence) + return new EncryptedContentInfo((Asn1Sequence)obj); + + throw new ArgumentException("Invalid EncryptedContentInfo: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public DerObjectIdentifier ContentType + { + get { return contentType; } + } + + public AlgorithmIdentifier ContentEncryptionAlgorithm + { + get { return contentEncryptionAlgorithm; } + } + + public Asn1OctetString EncryptedContent + { + get { return encryptedContent; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * EncryptedContentInfo ::= Sequence {
+         *     contentType ContentType,
+         *     contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
+         *     encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
+         * }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector( + contentType, contentEncryptionAlgorithm); + + if (encryptedContent != null) + { + v.Add(new BerTaggedObject(false, 0, encryptedContent)); + } + + return new BerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EncryptedContentInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EncryptedContentInfo.cs.meta new file mode 100644 index 000000000..6a4896ea3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EncryptedContentInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 734316637f0e5fe4ea88123150e3f192 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EncryptedContentInfoParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EncryptedContentInfoParser.cs new file mode 100644 index 000000000..ce95bafd6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EncryptedContentInfoParser.cs @@ -0,0 +1,50 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + /** + *
+	* EncryptedContentInfo ::= SEQUENCE {
+	*     contentType ContentType,
+	*     contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
+	*     encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
+	* }
+	* 
+ */ + public class EncryptedContentInfoParser + { + private DerObjectIdentifier _contentType; + private AlgorithmIdentifier _contentEncryptionAlgorithm; + private Asn1TaggedObjectParser _encryptedContent; + + public EncryptedContentInfoParser( + Asn1SequenceParser seq) + { + _contentType = (DerObjectIdentifier)seq.ReadObject(); + _contentEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(seq.ReadObject().ToAsn1Object()); + _encryptedContent = (Asn1TaggedObjectParser)seq.ReadObject(); + } + + public DerObjectIdentifier ContentType + { + get { return _contentType; } + } + + public AlgorithmIdentifier ContentEncryptionAlgorithm + { + get { return _contentEncryptionAlgorithm; } + } + + public IAsn1Convertible GetEncryptedContent( + int tag) + { + return Asn1Utilities.ParseContextBaseUniversal(_encryptedContent, 0, false, tag); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EncryptedContentInfoParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EncryptedContentInfoParser.cs.meta new file mode 100644 index 000000000..a08be01e9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EncryptedContentInfoParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 301c2fc37f969434998cc7676ef6bf29 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EncryptedData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EncryptedData.cs new file mode 100644 index 000000000..74f9a697c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EncryptedData.cs @@ -0,0 +1,101 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class EncryptedData + : Asn1Encodable + { + private readonly DerInteger version; + private readonly EncryptedContentInfo encryptedContentInfo; + private readonly Asn1Set unprotectedAttrs; + + public static EncryptedData GetInstance( + object obj) + { + if (obj is EncryptedData) + return (EncryptedData) obj; + + if (obj is Asn1Sequence) + return new EncryptedData((Asn1Sequence) obj); + + throw new ArgumentException("Invalid EncryptedData: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public EncryptedData( + EncryptedContentInfo encInfo) + : this(encInfo, null) + { + } + + public EncryptedData( + EncryptedContentInfo encInfo, + Asn1Set unprotectedAttrs) + { + if (encInfo == null) + throw new ArgumentNullException("encInfo"); + + this.version = new DerInteger((unprotectedAttrs == null) ? 0 : 2); + this.encryptedContentInfo = encInfo; + this.unprotectedAttrs = unprotectedAttrs; + } + + private EncryptedData( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + if (seq.Count < 2 || seq.Count > 3) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + this.version = DerInteger.GetInstance(seq[0]); + this.encryptedContentInfo = EncryptedContentInfo.GetInstance(seq[1]); + + if (seq.Count > 2) + { + this.unprotectedAttrs = Asn1Set.GetInstance((Asn1TaggedObject)seq[2], false); + } + } + + public virtual DerInteger Version + { + get { return version; } + } + + public virtual EncryptedContentInfo EncryptedContentInfo + { + get { return encryptedContentInfo; } + } + + public virtual Asn1Set UnprotectedAttrs + { + get { return unprotectedAttrs; } + } + + /** + *
+		*       EncryptedData ::= SEQUENCE {
+		*                     version CMSVersion,
+		*                     encryptedContentInfo EncryptedContentInfo,
+		*                     unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL }
+		* 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(version, encryptedContentInfo); + + if (unprotectedAttrs != null) + { + v.Add(new BerTaggedObject(false, 1, unprotectedAttrs)); + } + + return new BerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EncryptedData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EncryptedData.cs.meta new file mode 100644 index 000000000..a868e783c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EncryptedData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 32e23c002c8a122438df52ee042896f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EnvelopedData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EnvelopedData.cs new file mode 100644 index 000000000..9688931da --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EnvelopedData.cs @@ -0,0 +1,165 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class EnvelopedData + : Asn1Encodable + { + private DerInteger version; + private OriginatorInfo originatorInfo; + private Asn1Set recipientInfos; + private EncryptedContentInfo encryptedContentInfo; + private Asn1Set unprotectedAttrs; + + public EnvelopedData( + OriginatorInfo originatorInfo, + Asn1Set recipientInfos, + EncryptedContentInfo encryptedContentInfo, + Asn1Set unprotectedAttrs) + { + this.version = new DerInteger(CalculateVersion(originatorInfo, recipientInfos, unprotectedAttrs)); + this.originatorInfo = originatorInfo; + this.recipientInfos = recipientInfos; + this.encryptedContentInfo = encryptedContentInfo; + this.unprotectedAttrs = unprotectedAttrs; + } + + public EnvelopedData( + OriginatorInfo originatorInfo, + Asn1Set recipientInfos, + EncryptedContentInfo encryptedContentInfo, + Attributes unprotectedAttrs) + { + this.version = new DerInteger(CalculateVersion(originatorInfo, recipientInfos, Asn1Set.GetInstance(unprotectedAttrs))); + this.originatorInfo = originatorInfo; + this.recipientInfos = recipientInfos; + this.encryptedContentInfo = encryptedContentInfo; + this.unprotectedAttrs = Asn1Set.GetInstance(unprotectedAttrs); + } + + private EnvelopedData(Asn1Sequence seq) + { + int index = 0; + + version = (DerInteger) seq[index++]; + + object tmp = seq[index++]; + + if (tmp is Asn1TaggedObject) + { + originatorInfo = OriginatorInfo.GetInstance((Asn1TaggedObject) tmp, false); + tmp = seq[index++]; + } + + recipientInfos = Asn1Set.GetInstance(tmp); + encryptedContentInfo = EncryptedContentInfo.GetInstance(seq[index++]); + + if (seq.Count > index) + { + unprotectedAttrs = Asn1Set.GetInstance((Asn1TaggedObject) seq[index], false); + } + } + + /** + * return an EnvelopedData object from a tagged object. + * + * @param obj the tagged object holding the object we want. + * @param explicitly true if the object is meant to be explicitly + * tagged false otherwise. + * @exception ArgumentException if the object held by the + * tagged object cannot be converted. + */ + public static EnvelopedData GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + /** + * return an EnvelopedData object from the given object. + * + * @param obj the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static EnvelopedData GetInstance( + object obj) + { + if (obj is EnvelopedData) + return (EnvelopedData)obj; + if (obj == null) + return null; + return new EnvelopedData(Asn1Sequence.GetInstance(obj)); + } + + public DerInteger Version + { + get { return version; } + } + + public OriginatorInfo OriginatorInfo + { + get { return originatorInfo; } + } + + public Asn1Set RecipientInfos + { + get { return recipientInfos; } + } + + public EncryptedContentInfo EncryptedContentInfo + { + get { return encryptedContentInfo; } + } + + public Asn1Set UnprotectedAttrs + { + get { return unprotectedAttrs; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * EnvelopedData ::= Sequence {
+         *     version CMSVersion,
+         *     originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
+         *     recipientInfos RecipientInfos,
+         *     encryptedContentInfo EncryptedContentInfo,
+         *     unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL
+         * }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(version); + v.AddOptionalTagged(false, 0, originatorInfo); + v.Add(recipientInfos, encryptedContentInfo); + v.AddOptionalTagged(false, 1, unprotectedAttrs); + return new BerSequence(v); + } + + public static int CalculateVersion(OriginatorInfo originatorInfo, Asn1Set recipientInfos, Asn1Set unprotectedAttrs) + { + if (originatorInfo != null || unprotectedAttrs != null) + { + return 2; + } + + foreach (object o in recipientInfos) + { + RecipientInfo ri = RecipientInfo.GetInstance(o); + + if (!ri.Version.HasValue(0)) + { + return 2; + } + } + + return 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EnvelopedData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EnvelopedData.cs.meta new file mode 100644 index 000000000..74a2ee2ba --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EnvelopedData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2cd9c9aa9076bc2428a5e356f289eb7d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EnvelopedDataParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EnvelopedDataParser.cs new file mode 100644 index 000000000..067f68150 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EnvelopedDataParser.cs @@ -0,0 +1,113 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + /** + * Produce an object suitable for an Asn1OutputStream. + *
+	* EnvelopedData ::= SEQUENCE {
+	*     version CMSVersion,
+	*     originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
+	*     recipientInfos RecipientInfos,
+	*     encryptedContentInfo EncryptedContentInfo,
+	*     unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL
+	* }
+	* 
+ */ + public class EnvelopedDataParser + { + private Asn1SequenceParser _seq; + private DerInteger _version; + private IAsn1Convertible _nextObject; + private bool _originatorInfoCalled; + + public EnvelopedDataParser( + Asn1SequenceParser seq) + { + this._seq = seq; + this._version = (DerInteger)seq.ReadObject(); + } + + public DerInteger Version + { + get { return _version; } + } + + public OriginatorInfo GetOriginatorInfo() + { + _originatorInfoCalled = true; + + if (_nextObject == null) + { + _nextObject = _seq.ReadObject(); + } + + if (_nextObject is Asn1TaggedObjectParser o) + { + if (o.HasContextTag(0)) + { + Asn1SequenceParser originatorInfo = (Asn1SequenceParser)o.ParseBaseUniversal(false, Asn1Tags.Sequence); + _nextObject = null; + return OriginatorInfo.GetInstance(originatorInfo.ToAsn1Object()); + } + } + + return null; + } + + public Asn1SetParser GetRecipientInfos() + { + if (!_originatorInfoCalled) + { + GetOriginatorInfo(); + } + + if (_nextObject == null) + { + _nextObject = _seq.ReadObject(); + } + + Asn1SetParser recipientInfos = (Asn1SetParser)_nextObject; + _nextObject = null; + return recipientInfos; + } + + public EncryptedContentInfoParser GetEncryptedContentInfo() + { + if (_nextObject == null) + { + _nextObject = _seq.ReadObject(); + } + + if (_nextObject != null) + { + Asn1SequenceParser o = (Asn1SequenceParser) _nextObject; + _nextObject = null; + return new EncryptedContentInfoParser(o); + } + + return null; + } + + public Asn1SetParser GetUnprotectedAttrs() + { + if (_nextObject == null) + { + _nextObject = _seq.ReadObject(); + } + + if (_nextObject != null) + { + Asn1TaggedObjectParser o = (Asn1TaggedObjectParser)_nextObject; + _nextObject = null; + return (Asn1SetParser)Asn1Utilities.ParseContextBaseUniversal(o, 1, false, Asn1Tags.SetOf); + } + + return null; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EnvelopedDataParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EnvelopedDataParser.cs.meta new file mode 100644 index 000000000..b37a7d7a1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/EnvelopedDataParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 049f3d1fdd7f54b4ebc65dfb671c29cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Evidence.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Evidence.cs new file mode 100644 index 000000000..5a45ba81c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Evidence.cs @@ -0,0 +1,77 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class Evidence + : Asn1Encodable, IAsn1Choice + { + private TimeStampTokenEvidence tstEvidence; + private Asn1Sequence otherEvidence; + + public Evidence(TimeStampTokenEvidence tstEvidence) + { + this.tstEvidence = tstEvidence; + } + + private Evidence(Asn1TaggedObject tagged) + { + if (tagged.TagNo == 0) + { + this.tstEvidence = TimeStampTokenEvidence.GetInstance(tagged, false); + } + //else if (tagged.TagNo == 1) + //{ + // this.ersEvidence = EvidenceRecord.GetInstance(tagged, false); + //} + else if (tagged.TagNo == 2) + { + this.otherEvidence = Asn1Sequence.GetInstance(tagged, false); + } + else + { + throw new ArgumentException("unknown tag in Evidence", "tagged"); + } + } + + public static Evidence GetInstance(object obj) + { + if (obj is Evidence) + return (Evidence)obj; + + if (obj is Asn1TaggedObject) + return new Evidence(Asn1TaggedObject.GetInstance(obj)); + + throw new ArgumentException("Unknown object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public static Evidence GetInstance(Asn1TaggedObject obj, bool isExplicit) + { + return GetInstance(obj.GetObject()); // must be explicitly tagged + } + + public virtual TimeStampTokenEvidence TstEvidence + { + get { return tstEvidence; } + } + + //public EvidenceRecord ErsEvidence + //{ + // get { return ersEvidence; } + //} + + public override Asn1Object ToAsn1Object() + { + if (tstEvidence != null) + return new DerTaggedObject(false, 0, tstEvidence); + //if (ersEvidence != null) + // return new DerTaggedObject(false, 1, ersEvidence); + return new DerTaggedObject(false, 2, otherEvidence); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Evidence.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Evidence.cs.meta new file mode 100644 index 000000000..9de1d692c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Evidence.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 46c54e768090c1144ba42fbc8902b810 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/IssuerAndSerialNumber.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/IssuerAndSerialNumber.cs new file mode 100644 index 000000000..631ac0472 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/IssuerAndSerialNumber.cs @@ -0,0 +1,65 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class IssuerAndSerialNumber + : Asn1Encodable + { + private X509Name name; + private DerInteger serialNumber; + + public static IssuerAndSerialNumber GetInstance(object obj) + { + if (obj == null) + return null; + IssuerAndSerialNumber existing = obj as IssuerAndSerialNumber; + if (existing != null) + return existing; + return new IssuerAndSerialNumber(Asn1Sequence.GetInstance(obj)); + } + + private IssuerAndSerialNumber(Asn1Sequence seq) + { + this.name = X509Name.GetInstance(seq[0]); + this.serialNumber = (DerInteger) seq[1]; + } + + public IssuerAndSerialNumber( + X509Name name, + BigInteger serialNumber) + { + this.name = name; + this.serialNumber = new DerInteger(serialNumber); + } + + public IssuerAndSerialNumber( + X509Name name, + DerInteger serialNumber) + { + this.name = name; + this.serialNumber = serialNumber; + } + + public X509Name Name + { + get { return name; } + } + + public DerInteger SerialNumber + { + get { return serialNumber; } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(name, serialNumber); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/IssuerAndSerialNumber.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/IssuerAndSerialNumber.cs.meta new file mode 100644 index 000000000..04b5c52da --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/IssuerAndSerialNumber.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8ca6d762d4dfef047abdc3f3b7b31120 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KEKIdentifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KEKIdentifier.cs new file mode 100644 index 000000000..5812cd37f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KEKIdentifier.cs @@ -0,0 +1,123 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class KekIdentifier + : Asn1Encodable + { + private Asn1OctetString keyIdentifier; + private Asn1GeneralizedTime date; + private OtherKeyAttribute other; + + public KekIdentifier( + byte[] keyIdentifier, + Asn1GeneralizedTime date, + OtherKeyAttribute other) + { + this.keyIdentifier = new DerOctetString(keyIdentifier); + this.date = date; + this.other = other; + } + + public KekIdentifier( + Asn1Sequence seq) + { + keyIdentifier = (Asn1OctetString) seq[0]; + + switch (seq.Count) + { + case 1: + break; + case 2: + if (seq[1] is Asn1GeneralizedTime) + { + date = (Asn1GeneralizedTime) seq[1]; + } + else + { + other = OtherKeyAttribute.GetInstance(seq[2]); + } + break; + case 3: + date = (Asn1GeneralizedTime) seq[1]; + other = OtherKeyAttribute.GetInstance(seq[2]); + break; + default: + throw new ArgumentException("Invalid KekIdentifier"); + } + } + + /** + * return a KekIdentifier object from a tagged object. + * + * @param obj the tagged object holding the object we want. + * @param explicitly true if the object is meant to be explicitly + * tagged false otherwise. + * @exception ArgumentException if the object held by the + * tagged object cannot be converted. + */ + public static KekIdentifier GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + /** + * return a KekIdentifier object from the given object. + * + * @param obj the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static KekIdentifier GetInstance( + object obj) + { + if (obj == null || obj is KekIdentifier) + return (KekIdentifier)obj; + + if (obj is Asn1Sequence) + return new KekIdentifier((Asn1Sequence)obj); + + throw new ArgumentException("Invalid KekIdentifier: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public Asn1OctetString KeyIdentifier + { + get { return keyIdentifier; } + } + + public Asn1GeneralizedTime Date + { + get { return date; } + } + + public OtherKeyAttribute Other + { + get { return other; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * KekIdentifier ::= Sequence {
+         *     keyIdentifier OCTET STRING,
+         *     date GeneralizedTime OPTIONAL,
+         *     other OtherKeyAttribute OPTIONAL
+         * }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(keyIdentifier); + v.AddOptional(date, other); + return new DerSequence(v); + } + } +} + +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KEKIdentifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KEKIdentifier.cs.meta new file mode 100644 index 000000000..203d42b91 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KEKIdentifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49130dda685b7044b9695b4626ca1598 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KEKRecipientInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KEKRecipientInfo.cs new file mode 100644 index 000000000..beb2a5145 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KEKRecipientInfo.cs @@ -0,0 +1,110 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class KekRecipientInfo + : Asn1Encodable + { + private DerInteger version; + private KekIdentifier kekID; + private AlgorithmIdentifier keyEncryptionAlgorithm; + private Asn1OctetString encryptedKey; + + public KekRecipientInfo( + KekIdentifier kekID, + AlgorithmIdentifier keyEncryptionAlgorithm, + Asn1OctetString encryptedKey) + { + this.version = new DerInteger(4); + this.kekID = kekID; + this.keyEncryptionAlgorithm = keyEncryptionAlgorithm; + this.encryptedKey = encryptedKey; + } + + public KekRecipientInfo( + Asn1Sequence seq) + { + version = (DerInteger) seq[0]; + kekID = KekIdentifier.GetInstance(seq[1]); + keyEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(seq[2]); + encryptedKey = (Asn1OctetString) seq[3]; + } + + /** + * return a KekRecipientInfo object from a tagged object. + * + * @param obj the tagged object holding the object we want. + * @param explicitly true if the object is meant to be explicitly + * tagged false otherwise. + * @exception ArgumentException if the object held by the + * tagged object cannot be converted. + */ + public static KekRecipientInfo GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + /** + * return a KekRecipientInfo object from the given object. + * + * @param obj the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static KekRecipientInfo GetInstance( + object obj) + { + if (obj == null || obj is KekRecipientInfo) + return (KekRecipientInfo)obj; + + if(obj is Asn1Sequence) + return new KekRecipientInfo((Asn1Sequence)obj); + + throw new ArgumentException("Invalid KekRecipientInfo: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public DerInteger Version + { + get { return version; } + } + + public KekIdentifier KekID + { + get { return kekID; } + } + + public AlgorithmIdentifier KeyEncryptionAlgorithm + { + get { return keyEncryptionAlgorithm; } + } + + public Asn1OctetString EncryptedKey + { + get { return encryptedKey; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * KekRecipientInfo ::= Sequence {
+         *     version CMSVersion,  -- always set to 4
+         *     kekID KekIdentifier,
+         *     keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
+         *     encryptedKey EncryptedKey
+         * }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(version, kekID, keyEncryptionAlgorithm, encryptedKey); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KEKRecipientInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KEKRecipientInfo.cs.meta new file mode 100644 index 000000000..a3fc353b1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KEKRecipientInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3a08f4c5a8855d34499caeb77a3a5a99 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KeyAgreeRecipientIdentifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KeyAgreeRecipientIdentifier.cs new file mode 100644 index 000000000..29f2e2162 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KeyAgreeRecipientIdentifier.cs @@ -0,0 +1,98 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class KeyAgreeRecipientIdentifier + : Asn1Encodable, IAsn1Choice + { + /** + * return an KeyAgreeRecipientIdentifier object from a tagged object. + * + * @param obj the tagged object holding the object we want. + * @param isExplicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception ArgumentException if the object held by the + * tagged object cannot be converted. + */ + public static KeyAgreeRecipientIdentifier GetInstance( + Asn1TaggedObject obj, + bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit)); + } + + /** + * return an KeyAgreeRecipientIdentifier object from the given object. + * + * @param obj the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static KeyAgreeRecipientIdentifier GetInstance( + object obj) + { + if (obj == null || obj is KeyAgreeRecipientIdentifier) + return (KeyAgreeRecipientIdentifier)obj; + + if (obj is Asn1Sequence) + return new KeyAgreeRecipientIdentifier(IssuerAndSerialNumber.GetInstance(obj)); + + if (obj is Asn1TaggedObject && ((Asn1TaggedObject)obj).TagNo == 0) + { + return new KeyAgreeRecipientIdentifier(RecipientKeyIdentifier.GetInstance( + (Asn1TaggedObject)obj, false)); + } + + throw new ArgumentException("Invalid KeyAgreeRecipientIdentifier: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + private readonly IssuerAndSerialNumber issuerSerial; + private readonly RecipientKeyIdentifier rKeyID; + + public KeyAgreeRecipientIdentifier( + IssuerAndSerialNumber issuerSerial) + { + this.issuerSerial = issuerSerial; + } + + public KeyAgreeRecipientIdentifier( + RecipientKeyIdentifier rKeyID) + { + this.rKeyID = rKeyID; + } + + public IssuerAndSerialNumber IssuerAndSerialNumber + { + get { return issuerSerial; } + } + + public RecipientKeyIdentifier RKeyID + { + get { return rKeyID; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+		 * KeyAgreeRecipientIdentifier ::= CHOICE {
+		 *     issuerAndSerialNumber IssuerAndSerialNumber,
+		 *     rKeyId [0] IMPLICIT RecipientKeyIdentifier
+		 * }
+		 * 
+ */ + public override Asn1Object ToAsn1Object() + { + if (issuerSerial != null) + { + return issuerSerial.ToAsn1Object(); + } + + return new DerTaggedObject(false, 0, rKeyID); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KeyAgreeRecipientIdentifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KeyAgreeRecipientIdentifier.cs.meta new file mode 100644 index 000000000..c5ccc5602 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KeyAgreeRecipientIdentifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0372bc62893e54440854c9f5bd12da12 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KeyAgreeRecipientInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KeyAgreeRecipientInfo.cs new file mode 100644 index 000000000..bbb857e27 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KeyAgreeRecipientInfo.cs @@ -0,0 +1,138 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class KeyAgreeRecipientInfo + : Asn1Encodable + { + private DerInteger version; + private OriginatorIdentifierOrKey originator; + private Asn1OctetString ukm; + private AlgorithmIdentifier keyEncryptionAlgorithm; + private Asn1Sequence recipientEncryptedKeys; + + public KeyAgreeRecipientInfo( + OriginatorIdentifierOrKey originator, + Asn1OctetString ukm, + AlgorithmIdentifier keyEncryptionAlgorithm, + Asn1Sequence recipientEncryptedKeys) + { + this.version = new DerInteger(3); + this.originator = originator; + this.ukm = ukm; + this.keyEncryptionAlgorithm = keyEncryptionAlgorithm; + this.recipientEncryptedKeys = recipientEncryptedKeys; + } + + public KeyAgreeRecipientInfo( + Asn1Sequence seq) + { + int index = 0; + + version = (DerInteger) seq[index++]; + originator = OriginatorIdentifierOrKey.GetInstance( + (Asn1TaggedObject) seq[index++], true); + + if (seq[index] is Asn1TaggedObject) + { + ukm = Asn1OctetString.GetInstance( + (Asn1TaggedObject) seq[index++], true); + } + + keyEncryptionAlgorithm = AlgorithmIdentifier.GetInstance( + seq[index++]); + + recipientEncryptedKeys = (Asn1Sequence) seq[index++]; + } + + /** + * return a KeyAgreeRecipientInfo object from a tagged object. + * + * @param obj the tagged object holding the object we want. + * @param explicitly true if the object is meant to be explicitly + * tagged false otherwise. + * @exception ArgumentException if the object held by the + * tagged object cannot be converted. + */ + public static KeyAgreeRecipientInfo GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + /** + * return a KeyAgreeRecipientInfo object from the given object. + * + * @param obj the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static KeyAgreeRecipientInfo GetInstance( + object obj) + { + if (obj == null || obj is KeyAgreeRecipientInfo) + return (KeyAgreeRecipientInfo)obj; + + if (obj is Asn1Sequence) + return new KeyAgreeRecipientInfo((Asn1Sequence)obj); + + throw new ArgumentException( + "Illegal object in KeyAgreeRecipientInfo: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + + } + + public DerInteger Version + { + get { return version; } + } + + public OriginatorIdentifierOrKey Originator + { + get { return originator; } + } + + public Asn1OctetString UserKeyingMaterial + { + get { return ukm; } + } + + public AlgorithmIdentifier KeyEncryptionAlgorithm + { + get { return keyEncryptionAlgorithm; } + } + + public Asn1Sequence RecipientEncryptedKeys + { + get { return recipientEncryptedKeys; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * KeyAgreeRecipientInfo ::= Sequence {
+         *     version CMSVersion,  -- always set to 3
+         *     originator [0] EXPLICIT OriginatorIdentifierOrKey,
+         *     ukm [1] EXPLICIT UserKeyingMaterial OPTIONAL,
+         *     keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
+         *     recipientEncryptedKeys RecipientEncryptedKeys
+         * }
+		 *
+		 * UserKeyingMaterial ::= OCTET STRING
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(version, new DerTaggedObject(true, 0, originator)); + v.AddOptionalTagged(true, 1, ukm); + v.Add(keyEncryptionAlgorithm, recipientEncryptedKeys); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KeyAgreeRecipientInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KeyAgreeRecipientInfo.cs.meta new file mode 100644 index 000000000..ae16291c3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KeyAgreeRecipientInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc4f430e5e3afd84d8f4f7e81b4f28e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KeyTransRecipientInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KeyTransRecipientInfo.cs new file mode 100644 index 000000000..9541a12d3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KeyTransRecipientInfo.cs @@ -0,0 +1,103 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class KeyTransRecipientInfo + : Asn1Encodable + { + private DerInteger version; + private RecipientIdentifier rid; + private AlgorithmIdentifier keyEncryptionAlgorithm; + private Asn1OctetString encryptedKey; + + public KeyTransRecipientInfo( + RecipientIdentifier rid, + AlgorithmIdentifier keyEncryptionAlgorithm, + Asn1OctetString encryptedKey) + { + if (rid.ToAsn1Object() is Asn1TaggedObject) + { + this.version = new DerInteger(2); + } + else + { + this.version = new DerInteger(0); + } + + this.rid = rid; + this.keyEncryptionAlgorithm = keyEncryptionAlgorithm; + this.encryptedKey = encryptedKey; + } + + public KeyTransRecipientInfo( + Asn1Sequence seq) + { + this.version = (DerInteger) seq[0]; + this.rid = RecipientIdentifier.GetInstance(seq[1]); + this.keyEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(seq[2]); + this.encryptedKey = (Asn1OctetString) seq[3]; + } + + /** + * return a KeyTransRecipientInfo object from the given object. + * + * @param obj the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static KeyTransRecipientInfo GetInstance( + object obj) + { + if (obj == null || obj is KeyTransRecipientInfo) + return (KeyTransRecipientInfo) obj; + + if(obj is Asn1Sequence) + return new KeyTransRecipientInfo((Asn1Sequence) obj); + + throw new ArgumentException( + "Illegal object in KeyTransRecipientInfo: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public DerInteger Version + { + get { return version; } + } + + public RecipientIdentifier RecipientIdentifier + { + get { return rid; } + } + + public AlgorithmIdentifier KeyEncryptionAlgorithm + { + get { return keyEncryptionAlgorithm; } + } + + public Asn1OctetString EncryptedKey + { + get { return encryptedKey; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * KeyTransRecipientInfo ::= Sequence {
+         *     version CMSVersion,  -- always set to 0 or 2
+         *     rid RecipientIdentifier,
+         *     keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
+         *     encryptedKey EncryptedKey
+         * }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(version, rid, keyEncryptionAlgorithm, encryptedKey); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KeyTransRecipientInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KeyTransRecipientInfo.cs.meta new file mode 100644 index 000000000..7cc5c6de4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/KeyTransRecipientInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d063c42f925d95d4ebb266d4c0a24edd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/MetaData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/MetaData.cs new file mode 100644 index 000000000..82aa7a549 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/MetaData.cs @@ -0,0 +1,98 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class MetaData + : Asn1Encodable + { + private DerBoolean hashProtected; + private DerUtf8String fileName; + private DerIA5String mediaType; + private Attributes otherMetaData; + + public MetaData( + DerBoolean hashProtected, + DerUtf8String fileName, + DerIA5String mediaType, + Attributes otherMetaData) + { + this.hashProtected = hashProtected; + this.fileName = fileName; + this.mediaType = mediaType; + this.otherMetaData = otherMetaData; + } + + private MetaData(Asn1Sequence seq) + { + this.hashProtected = DerBoolean.GetInstance(seq[0]); + + int index = 1; + + if (index < seq.Count && seq[index] is DerUtf8String) + { + this.fileName = DerUtf8String.GetInstance(seq[index++]); + } + if (index < seq.Count && seq[index] is DerIA5String) + { + this.mediaType = DerIA5String.GetInstance(seq[index++]); + } + if (index < seq.Count) + { + this.otherMetaData = Attributes.GetInstance(seq[index++]); + } + } + + public static MetaData GetInstance(object obj) + { + if (obj is MetaData) + return (MetaData)obj; + + if (obj != null) + return new MetaData(Asn1Sequence.GetInstance(obj)); + + return null; + } + + /** + *
+		 * MetaData ::= SEQUENCE {
+		 *   hashProtected        BOOLEAN,
+		 *   fileName             UTF8String OPTIONAL,
+		 *   mediaType            IA5String OPTIONAL,
+		 *   otherMetaData        Attributes OPTIONAL
+		 * }
+		 * 
+ * @return + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(hashProtected); + v.AddOptional(fileName, mediaType, otherMetaData); + return new DerSequence(v); + } + + public virtual bool IsHashProtected + { + get { return hashProtected.IsTrue; } + } + + public virtual DerUtf8String FileName + { + get { return fileName; } + } + + public virtual DerIA5String MediaType + { + get { return mediaType; } + } + + public virtual Attributes OtherMetaData + { + get { return otherMetaData; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/MetaData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/MetaData.cs.meta new file mode 100644 index 000000000..af16f122b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/MetaData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c069e17a92db0594c807bf2fb47f8ef4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OriginatorIdentifierOrKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OriginatorIdentifierOrKey.cs new file mode 100644 index 000000000..2dd400446 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OriginatorIdentifierOrKey.cs @@ -0,0 +1,148 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class OriginatorIdentifierOrKey + : Asn1Encodable, IAsn1Choice + { + private readonly Asn1Encodable id; + + public OriginatorIdentifierOrKey(IssuerAndSerialNumber id) + { + this.id = id; + } + + public OriginatorIdentifierOrKey(SubjectKeyIdentifier id) + { + this.id = new DerTaggedObject(false, 0, id); + } + + public OriginatorIdentifierOrKey(OriginatorPublicKey id) + { + this.id = new DerTaggedObject(false, 1, id); + } + + private OriginatorIdentifierOrKey(Asn1TaggedObject id) + { + // TODO Add validation + this.id = id; + } + + /** + * return an OriginatorIdentifierOrKey object from a tagged object. + * + * @param o the tagged object holding the object we want. + * @param explicitly true if the object is meant to be explicitly + * tagged false otherwise. + * @exception ArgumentException if the object held by the + * tagged object cannot be converted. + */ + public static OriginatorIdentifierOrKey GetInstance( + Asn1TaggedObject o, + bool explicitly) + { + if (!explicitly) + { + throw new ArgumentException( + "Can't implicitly tag OriginatorIdentifierOrKey"); + } + + return GetInstance(o.GetObject()); + } + + /** + * return an OriginatorIdentifierOrKey object from the given object. + * + * @param o the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static OriginatorIdentifierOrKey GetInstance( + object o) + { + if (o == null || o is OriginatorIdentifierOrKey) + return (OriginatorIdentifierOrKey)o; + + if (o is IssuerAndSerialNumber) + return new OriginatorIdentifierOrKey((IssuerAndSerialNumber)o); + + if (o is SubjectKeyIdentifier) + return new OriginatorIdentifierOrKey((SubjectKeyIdentifier)o); + + if (o is OriginatorPublicKey) + return new OriginatorIdentifierOrKey((OriginatorPublicKey)o); + + if (o is Asn1TaggedObject) + return new OriginatorIdentifierOrKey((Asn1TaggedObject)o); + + throw new ArgumentException("Invalid OriginatorIdentifierOrKey: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(o)); + } + + public Asn1Encodable ID + { + get { return id; } + } + + public IssuerAndSerialNumber IssuerAndSerialNumber + { + get + { + if (id is IssuerAndSerialNumber) + { + return (IssuerAndSerialNumber)id; + } + + return null; + } + } + + public SubjectKeyIdentifier SubjectKeyIdentifier + { + get + { + if (id is Asn1TaggedObject && ((Asn1TaggedObject)id).TagNo == 0) + { + return SubjectKeyIdentifier.GetInstance((Asn1TaggedObject)id, false); + } + + return null; + } + } + + public OriginatorPublicKey OriginatorPublicKey + { + get + { + if (id is Asn1TaggedObject && ((Asn1TaggedObject)id).TagNo == 1) + { + return OriginatorPublicKey.GetInstance((Asn1TaggedObject)id, false); + } + + return null; + } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * OriginatorIdentifierOrKey ::= CHOICE {
+         *     issuerAndSerialNumber IssuerAndSerialNumber,
+         *     subjectKeyIdentifier [0] SubjectKeyIdentifier,
+         *     originatorKey [1] OriginatorPublicKey
+         * }
+         *
+         * SubjectKeyIdentifier ::= OCTET STRING
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return id.ToAsn1Object(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OriginatorIdentifierOrKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OriginatorIdentifierOrKey.cs.meta new file mode 100644 index 000000000..f82c9ade7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OriginatorIdentifierOrKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: edf95ebe065692842a5dad19e9c09988 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OriginatorInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OriginatorInfo.cs new file mode 100644 index 000000000..fd798d815 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OriginatorInfo.cs @@ -0,0 +1,116 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class OriginatorInfo + : Asn1Encodable + { + private Asn1Set certs; + private Asn1Set crls; + + public OriginatorInfo( + Asn1Set certs, + Asn1Set crls) + { + this.certs = certs; + this.crls = crls; + } + + public OriginatorInfo( + Asn1Sequence seq) + { + switch (seq.Count) + { + case 0: // empty + break; + case 1: + Asn1TaggedObject o = (Asn1TaggedObject) seq[0]; + switch (o.TagNo) + { + case 0 : + certs = Asn1Set.GetInstance(o, false); + break; + case 1 : + crls = Asn1Set.GetInstance(o, false); + break; + default: + throw new ArgumentException("Bad tag in OriginatorInfo: " + o.TagNo); + } + break; + case 2: + certs = Asn1Set.GetInstance((Asn1TaggedObject) seq[0], false); + crls = Asn1Set.GetInstance((Asn1TaggedObject) seq[1], false); + break; + default: + throw new ArgumentException("OriginatorInfo too big"); + } + } + + /** + * return an OriginatorInfo object from a tagged object. + * + * @param obj the tagged object holding the object we want. + * @param explicitly true if the object is meant to be explicitly + * tagged false otherwise. + * @exception ArgumentException if the object held by the + * tagged object cannot be converted. + */ + public static OriginatorInfo GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + /** + * return an OriginatorInfo object from the given object. + * + * @param obj the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static OriginatorInfo GetInstance( + object obj) + { + if (obj == null || obj is OriginatorInfo) + return (OriginatorInfo)obj; + + if (obj is Asn1Sequence) + return new OriginatorInfo((Asn1Sequence)obj); + + throw new ArgumentException("Invalid OriginatorInfo: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public Asn1Set Certificates + { + get { return certs; } + } + + public Asn1Set Crls + { + get { return crls; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * OriginatorInfo ::= Sequence {
+         *     certs [0] IMPLICIT CertificateSet OPTIONAL,
+         *     crls [1] IMPLICIT CertificateRevocationLists OPTIONAL
+         * }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptionalTagged(false, 0, certs); + v.AddOptionalTagged(false, 1, crls); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OriginatorInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OriginatorInfo.cs.meta new file mode 100644 index 000000000..268eba4a4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OriginatorInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fa1c981fcfa71ec40ade9b84d1c85001 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OriginatorPublicKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OriginatorPublicKey.cs new file mode 100644 index 000000000..5cf96ef7d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OriginatorPublicKey.cs @@ -0,0 +1,90 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class OriginatorPublicKey + : Asn1Encodable + { + private readonly AlgorithmIdentifier mAlgorithm; + private readonly DerBitString mPublicKey; + + public OriginatorPublicKey( + AlgorithmIdentifier algorithm, + byte[] publicKey) + { + this.mAlgorithm = algorithm; + this.mPublicKey = new DerBitString(publicKey); + } + + private OriginatorPublicKey(Asn1Sequence seq) + { + this.mAlgorithm = AlgorithmIdentifier.GetInstance(seq[0]); + this.mPublicKey = DerBitString.GetInstance(seq[1]); + } + + /** + * return an OriginatorPublicKey object from a tagged object. + * + * @param obj the tagged object holding the object we want. + * @param explicitly true if the object is meant to be explicitly + * tagged false otherwise. + * @exception ArgumentException if the object held by the + * tagged object cannot be converted. + */ + public static OriginatorPublicKey GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + /** + * return an OriginatorPublicKey object from the given object. + * + * @param obj the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static OriginatorPublicKey GetInstance( + object obj) + { + if (obj == null || obj is OriginatorPublicKey) + return (OriginatorPublicKey)obj; + + if (obj is Asn1Sequence) + return new OriginatorPublicKey(Asn1Sequence.GetInstance(obj)); + + throw new ArgumentException("Invalid OriginatorPublicKey: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public AlgorithmIdentifier Algorithm + { + get { return mAlgorithm; } + } + + public DerBitString PublicKey + { + get { return mPublicKey; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * OriginatorPublicKey ::= Sequence {
+         *     algorithm AlgorithmIdentifier,
+         *     publicKey BIT STRING
+         * }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(mAlgorithm, mPublicKey); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OriginatorPublicKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OriginatorPublicKey.cs.meta new file mode 100644 index 000000000..9069cdb14 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OriginatorPublicKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8ede139be247f84aada13d5cc2f812c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OtherKeyAttribute.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OtherKeyAttribute.cs new file mode 100644 index 000000000..19f062835 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OtherKeyAttribute.cs @@ -0,0 +1,74 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class OtherKeyAttribute + : Asn1Encodable + { + private DerObjectIdentifier keyAttrId; + private Asn1Encodable keyAttr; + + /** + * return an OtherKeyAttribute object from the given object. + * + * @param o the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static OtherKeyAttribute GetInstance( + object obj) + { + if (obj == null || obj is OtherKeyAttribute) + return (OtherKeyAttribute) obj; + + if (obj is Asn1Sequence) + return new OtherKeyAttribute((Asn1Sequence) obj); + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public OtherKeyAttribute( + Asn1Sequence seq) + { + keyAttrId = (DerObjectIdentifier) seq[0]; + keyAttr = seq[1]; + } + + public OtherKeyAttribute( + DerObjectIdentifier keyAttrId, + Asn1Encodable keyAttr) + { + this.keyAttrId = keyAttrId; + this.keyAttr = keyAttr; + } + + public DerObjectIdentifier KeyAttrId + { + get { return keyAttrId; } + } + + public Asn1Encodable KeyAttr + { + get { return keyAttr; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * OtherKeyAttribute ::= Sequence {
+         *     keyAttrId OBJECT IDENTIFIER,
+         *     keyAttr ANY DEFINED BY keyAttrId OPTIONAL
+         * }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(keyAttrId, keyAttr); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OtherKeyAttribute.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OtherKeyAttribute.cs.meta new file mode 100644 index 000000000..b0f442f84 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OtherKeyAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96a6f83f9549ee94b8cb8ec0fc736279 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OtherRecipientInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OtherRecipientInfo.cs new file mode 100644 index 000000000..809e11040 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OtherRecipientInfo.cs @@ -0,0 +1,85 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class OtherRecipientInfo + : Asn1Encodable + { + private readonly DerObjectIdentifier oriType; + private readonly Asn1Encodable oriValue; + + public OtherRecipientInfo( + DerObjectIdentifier oriType, + Asn1Encodable oriValue) + { + this.oriType = oriType; + this.oriValue = oriValue; + } + + private OtherRecipientInfo(Asn1Sequence seq) + { + oriType = DerObjectIdentifier.GetInstance(seq[0]); + oriValue = seq[1]; + } + + /** + * return a OtherRecipientInfo object from a tagged object. + * + * @param obj the tagged object holding the object we want. + * @param explicitly true if the object is meant to be explicitly + * tagged false otherwise. + * @exception ArgumentException if the object held by the + * tagged object cannot be converted. + */ + public static OtherRecipientInfo GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + /** + * return a OtherRecipientInfo object from the given object. + * + * @param obj the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static OtherRecipientInfo GetInstance( + object obj) + { + if (obj == null) + return null; + OtherRecipientInfo existing = obj as OtherRecipientInfo; + if (existing != null) + return existing; + return new OtherRecipientInfo(Asn1Sequence.GetInstance(obj)); + } + + public virtual DerObjectIdentifier OriType + { + get { return oriType; } + } + + public virtual Asn1Encodable OriValue + { + get { return oriValue; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * OtherRecipientInfo ::= Sequence {
+         *    oriType OBJECT IDENTIFIER,
+         *    oriValue ANY DEFINED BY oriType }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(oriType, oriValue); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OtherRecipientInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OtherRecipientInfo.cs.meta new file mode 100644 index 000000000..e6781a20b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OtherRecipientInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 412dcb4cb5551154cbe9584c4c280eed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OtherRevocationInfoFormat.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OtherRevocationInfoFormat.cs new file mode 100644 index 000000000..9f1aed9b4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OtherRevocationInfoFormat.cs @@ -0,0 +1,79 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class OtherRevocationInfoFormat + : Asn1Encodable + { + private readonly DerObjectIdentifier otherRevInfoFormat; + private readonly Asn1Encodable otherRevInfo; + + public OtherRevocationInfoFormat( + DerObjectIdentifier otherRevInfoFormat, + Asn1Encodable otherRevInfo) + { + this.otherRevInfoFormat = otherRevInfoFormat; + this.otherRevInfo = otherRevInfo; + } + + private OtherRevocationInfoFormat(Asn1Sequence seq) + { + otherRevInfoFormat = DerObjectIdentifier.GetInstance(seq[0]); + otherRevInfo = seq[1]; + } + + /** + * return a OtherRevocationInfoFormat object from a tagged object. + * + * @param obj the tagged object holding the object we want. + * @param explicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception IllegalArgumentException if the object held by the + * tagged object cannot be converted. + */ + public static OtherRevocationInfoFormat GetInstance(Asn1TaggedObject obj, bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit)); + } + + /** + * return a OtherRevocationInfoFormat object from the given object. + * + * @param obj the object we want converted. + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static OtherRevocationInfoFormat GetInstance(object obj) + { + if (obj is OtherRevocationInfoFormat otherRevocationInfoFormat) + return otherRevocationInfoFormat; + if (obj != null) + return new OtherRevocationInfoFormat(Asn1Sequence.GetInstance(obj)); + return null; + } + + public virtual DerObjectIdentifier InfoFormat + { + get { return otherRevInfoFormat; } + } + + public virtual Asn1Encodable Info + { + get { return otherRevInfo; } + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
+         * OtherRevocationInfoFormat ::= SEQUENCE {
+         *      otherRevInfoFormat OBJECT IDENTIFIER,
+         *      otherRevInfo ANY DEFINED BY otherRevInfoFormat }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(otherRevInfoFormat, otherRevInfo); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OtherRevocationInfoFormat.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OtherRevocationInfoFormat.cs.meta new file mode 100644 index 000000000..82309ac3e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/OtherRevocationInfoFormat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4e3b4defd74e67b4884d478f8fffa56b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/PasswordRecipientInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/PasswordRecipientInfo.cs new file mode 100644 index 000000000..63485e834 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/PasswordRecipientInfo.cs @@ -0,0 +1,131 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class PasswordRecipientInfo + : Asn1Encodable + { + private readonly DerInteger version; + private readonly AlgorithmIdentifier keyDerivationAlgorithm; + private readonly AlgorithmIdentifier keyEncryptionAlgorithm; + private readonly Asn1OctetString encryptedKey; + + public PasswordRecipientInfo( + AlgorithmIdentifier keyEncryptionAlgorithm, + Asn1OctetString encryptedKey) + { + this.version = new DerInteger(0); + this.keyEncryptionAlgorithm = keyEncryptionAlgorithm; + this.encryptedKey = encryptedKey; + } + + public PasswordRecipientInfo( + AlgorithmIdentifier keyDerivationAlgorithm, + AlgorithmIdentifier keyEncryptionAlgorithm, + Asn1OctetString encryptedKey) + { + this.version = new DerInteger(0); + this.keyDerivationAlgorithm = keyDerivationAlgorithm; + this.keyEncryptionAlgorithm = keyEncryptionAlgorithm; + this.encryptedKey = encryptedKey; + } + + public PasswordRecipientInfo( + Asn1Sequence seq) + { + version = (DerInteger) seq[0]; + + if (seq[1] is Asn1TaggedObject) + { + keyDerivationAlgorithm = AlgorithmIdentifier.GetInstance((Asn1TaggedObject) seq[1], false); + keyEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(seq[2]); + encryptedKey = (Asn1OctetString) seq[3]; + } + else + { + keyEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(seq[1]); + encryptedKey = (Asn1OctetString) seq[2]; + } + } + + /** + * return a PasswordRecipientInfo object from a tagged object. + * + * @param obj the tagged object holding the object we want. + * @param explicitly true if the object is meant to be explicitly + * tagged false otherwise. + * @exception ArgumentException if the object held by the + * tagged object cannot be converted. + */ + public static PasswordRecipientInfo GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + /** + * return a PasswordRecipientInfo object from the given object. + * + * @param obj the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static PasswordRecipientInfo GetInstance( + object obj) + { + if (obj == null || obj is PasswordRecipientInfo) + return (PasswordRecipientInfo) obj; + + if (obj is Asn1Sequence) + return new PasswordRecipientInfo((Asn1Sequence) obj); + + throw new ArgumentException("Invalid PasswordRecipientInfo: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public DerInteger Version + { + get { return version; } + } + + public AlgorithmIdentifier KeyDerivationAlgorithm + { + get { return keyDerivationAlgorithm; } + } + + public AlgorithmIdentifier KeyEncryptionAlgorithm + { + get { return keyEncryptionAlgorithm; } + } + + public Asn1OctetString EncryptedKey + { + get { return encryptedKey; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * PasswordRecipientInfo ::= Sequence {
+         *   version CMSVersion,   -- Always set to 0
+         *   keyDerivationAlgorithm [0] KeyDerivationAlgorithmIdentifier
+         *                             OPTIONAL,
+         *  keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
+         *  encryptedKey EncryptedKey }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(version); + v.AddOptionalTagged(false, 0, keyDerivationAlgorithm); + v.Add(keyEncryptionAlgorithm, encryptedKey); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/PasswordRecipientInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/PasswordRecipientInfo.cs.meta new file mode 100644 index 000000000..22f7a316f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/PasswordRecipientInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 56045582a99e8964cb8d0e7ac4d0cb6b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientEncryptedKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientEncryptedKey.cs new file mode 100644 index 000000000..59d2021b0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientEncryptedKey.cs @@ -0,0 +1,94 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class RecipientEncryptedKey + : Asn1Encodable + { + private readonly KeyAgreeRecipientIdentifier identifier; + private readonly Asn1OctetString encryptedKey; + + private RecipientEncryptedKey( + Asn1Sequence seq) + { + identifier = KeyAgreeRecipientIdentifier.GetInstance(seq[0]); + encryptedKey = (Asn1OctetString) seq[1]; + } + + /** + * return an RecipientEncryptedKey object from a tagged object. + * + * @param obj the tagged object holding the object we want. + * @param isExplicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception ArgumentException if the object held by the + * tagged object cannot be converted. + */ + public static RecipientEncryptedKey GetInstance( + Asn1TaggedObject obj, + bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit)); + } + + /** + * return a RecipientEncryptedKey object from the given object. + * + * @param obj the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static RecipientEncryptedKey GetInstance( + object obj) + { + if (obj == null || obj is RecipientEncryptedKey) + { + return (RecipientEncryptedKey) obj; + } + + if (obj is Asn1Sequence) + { + return new RecipientEncryptedKey((Asn1Sequence) obj); + } + + throw new ArgumentException("Invalid RecipientEncryptedKey: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public RecipientEncryptedKey( + KeyAgreeRecipientIdentifier id, + Asn1OctetString encryptedKey) + { + this.identifier = id; + this.encryptedKey = encryptedKey; + } + + public KeyAgreeRecipientIdentifier Identifier + { + get { return identifier; } + } + + public Asn1OctetString EncryptedKey + { + get { return encryptedKey; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+		 * RecipientEncryptedKey ::= SEQUENCE {
+		 *     rid KeyAgreeRecipientIdentifier,
+		 *     encryptedKey EncryptedKey
+		 * }
+		 * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(identifier, encryptedKey); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientEncryptedKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientEncryptedKey.cs.meta new file mode 100644 index 000000000..935c3bcab --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientEncryptedKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9fad49673d746fd489658518c25af573 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientIdentifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientIdentifier.cs new file mode 100644 index 000000000..0b0641134 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientIdentifier.cs @@ -0,0 +1,93 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class RecipientIdentifier + : Asn1Encodable, IAsn1Choice + { + private Asn1Encodable id; + + public RecipientIdentifier( + IssuerAndSerialNumber id) + { + this.id = id; + } + + public RecipientIdentifier( + Asn1OctetString id) + { + this.id = new DerTaggedObject(false, 0, id); + } + + public RecipientIdentifier( + Asn1Object id) + { + this.id = id; + } + + /** + * return a RecipientIdentifier object from the given object. + * + * @param o the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static RecipientIdentifier GetInstance( + object o) + { + if (o == null || o is RecipientIdentifier) + return (RecipientIdentifier)o; + + if (o is IssuerAndSerialNumber) + return new RecipientIdentifier((IssuerAndSerialNumber) o); + + if (o is Asn1OctetString) + return new RecipientIdentifier((Asn1OctetString) o); + + if (o is Asn1Object) + return new RecipientIdentifier((Asn1Object) o); + + throw new ArgumentException( + "Illegal object in RecipientIdentifier: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(o)); + } + + public bool IsTagged + { + get { return (id is Asn1TaggedObject); } + } + + public Asn1Encodable ID + { + get + { + if (id is Asn1TaggedObject) + { + return Asn1OctetString.GetInstance((Asn1TaggedObject) id, false); + } + + return IssuerAndSerialNumber.GetInstance(id); + } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * RecipientIdentifier ::= CHOICE {
+         *     issuerAndSerialNumber IssuerAndSerialNumber,
+         *     subjectKeyIdentifier [0] SubjectKeyIdentifier
+         * }
+         *
+         * SubjectKeyIdentifier ::= OCTET STRING
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return id.ToAsn1Object(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientIdentifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientIdentifier.cs.meta new file mode 100644 index 000000000..d89ec2f86 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientIdentifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 30c7f636380542d4d9712ae601fc5f03 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientInfo.cs new file mode 100644 index 000000000..8a0560784 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientInfo.cs @@ -0,0 +1,149 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class RecipientInfo + : Asn1Encodable, IAsn1Choice + { + internal Asn1Encodable info; + + public RecipientInfo( + KeyTransRecipientInfo info) + { + this.info = info; + } + + public RecipientInfo( + KeyAgreeRecipientInfo info) + { + this.info = new DerTaggedObject(false, 1, info); + } + + public RecipientInfo( + KekRecipientInfo info) + { + this.info = new DerTaggedObject(false, 2, info); + } + + public RecipientInfo( + PasswordRecipientInfo info) + { + this.info = new DerTaggedObject(false, 3, info); + } + + public RecipientInfo( + OtherRecipientInfo info) + { + this.info = new DerTaggedObject(false, 4, info); + } + + public RecipientInfo( + Asn1Object info) + { + this.info = info; + } + + public static RecipientInfo GetInstance( + object o) + { + if (o == null || o is RecipientInfo) + return (RecipientInfo) o; + + if (o is Asn1Sequence) + return new RecipientInfo((Asn1Sequence) o); + + if (o is Asn1TaggedObject) + return new RecipientInfo((Asn1TaggedObject) o); + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(o)); + } + + public DerInteger Version + { + get + { + if (info is Asn1TaggedObject) + { + Asn1TaggedObject o = (Asn1TaggedObject) info; + + switch (o.TagNo) + { + case 1: + return KeyAgreeRecipientInfo.GetInstance(o, false).Version; + case 2: + return GetKekInfo(o).Version; + case 3: + return PasswordRecipientInfo.GetInstance(o, false).Version; + case 4: + return new DerInteger(0); // no syntax version for OtherRecipientInfo + default: + throw new InvalidOperationException("unknown tag"); + } + } + + return KeyTransRecipientInfo.GetInstance(info).Version; + } + } + + public bool IsTagged + { + get { return info is Asn1TaggedObject; } + } + + public Asn1Encodable Info + { + get + { + if (info is Asn1TaggedObject) + { + Asn1TaggedObject o = (Asn1TaggedObject) info; + + switch (o.TagNo) + { + case 1: + return KeyAgreeRecipientInfo.GetInstance(o, false); + case 2: + return GetKekInfo(o); + case 3: + return PasswordRecipientInfo.GetInstance(o, false); + case 4: + return OtherRecipientInfo.GetInstance(o, false); + default: + throw new InvalidOperationException("unknown tag"); + } + } + + return KeyTransRecipientInfo.GetInstance(info); + } + } + + private KekRecipientInfo GetKekInfo( + Asn1TaggedObject o) + { + // For compatibility with erroneous version, we don't always pass 'false' here + return KekRecipientInfo.GetInstance(o, o.IsExplicit()); + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * RecipientInfo ::= CHOICE {
+         *     ktri KeyTransRecipientInfo,
+         *     kari [1] KeyAgreeRecipientInfo,
+         *     kekri [2] KekRecipientInfo,
+         *     pwri [3] PasswordRecipientInfo,
+         *     ori [4] OtherRecipientInfo }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return info.ToAsn1Object(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientInfo.cs.meta new file mode 100644 index 000000000..d06d88560 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a85a3b31eb7210a47b17a727f44f9928 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientKeyIdentifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientKeyIdentifier.cs new file mode 100644 index 000000000..821b178b0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientKeyIdentifier.cs @@ -0,0 +1,141 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class RecipientKeyIdentifier + : Asn1Encodable + { + private Asn1OctetString subjectKeyIdentifier; + private Asn1GeneralizedTime date; + private OtherKeyAttribute other; + + public RecipientKeyIdentifier( + Asn1OctetString subjectKeyIdentifier, + Asn1GeneralizedTime date, + OtherKeyAttribute other) + { + this.subjectKeyIdentifier = subjectKeyIdentifier; + this.date = date; + this.other = other; + } + + public RecipientKeyIdentifier( + byte[] subjectKeyIdentifier) + : this(subjectKeyIdentifier, null, null) + { + } + + public RecipientKeyIdentifier( + byte[] subjectKeyIdentifier, + Asn1GeneralizedTime date, + OtherKeyAttribute other) + { + this.subjectKeyIdentifier = new DerOctetString(subjectKeyIdentifier); + this.date = date; + this.other = other; + } + + public RecipientKeyIdentifier( + Asn1Sequence seq) + { + subjectKeyIdentifier = Asn1OctetString.GetInstance( + seq[0]); + + switch(seq.Count) + { + case 1: + break; + case 2: + if (seq[1] is Asn1GeneralizedTime) + { + date = (Asn1GeneralizedTime)seq[1]; + } + else + { + other = OtherKeyAttribute.GetInstance(seq[2]); + } + break; + case 3: + date = (Asn1GeneralizedTime)seq[1]; + other = OtherKeyAttribute.GetInstance(seq[2]); + break; + default: + throw new ArgumentException("Invalid RecipientKeyIdentifier"); + } + } + + /** + * return a RecipientKeyIdentifier object from a tagged object. + * + * @param _ato the tagged object holding the object we want. + * @param _explicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception ArgumentException if the object held by the + * tagged object cannot be converted. + */ + public static RecipientKeyIdentifier GetInstance( + Asn1TaggedObject ato, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(ato, explicitly)); + } + + /** + * return a RecipientKeyIdentifier object from the given object. + * + * @param _obj the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static RecipientKeyIdentifier GetInstance( + object obj) + { + if (obj == null || obj is RecipientKeyIdentifier) + return (RecipientKeyIdentifier) obj; + + if (obj is Asn1Sequence) + return new RecipientKeyIdentifier((Asn1Sequence) obj); + + throw new ArgumentException("Invalid RecipientKeyIdentifier: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public Asn1OctetString SubjectKeyIdentifier + { + get { return subjectKeyIdentifier; } + } + + public Asn1GeneralizedTime Date + { + get { return date; } + } + + public OtherKeyAttribute OtherKeyAttribute + { + get { return other; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * RecipientKeyIdentifier ::= Sequence {
+         *     subjectKeyIdentifier SubjectKeyIdentifier,
+         *     date GeneralizedTime OPTIONAL,
+         *     other OtherKeyAttribute OPTIONAL
+         * }
+         *
+         * SubjectKeyIdentifier ::= OCTET STRING
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(subjectKeyIdentifier); + v.AddOptional(date, other); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientKeyIdentifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientKeyIdentifier.cs.meta new file mode 100644 index 000000000..31b17e470 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/RecipientKeyIdentifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3a2571078d5b78e4eb534333a1068127 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SCVPReqRes.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SCVPReqRes.cs new file mode 100644 index 000000000..0212cf886 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SCVPReqRes.cs @@ -0,0 +1,75 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class ScvpReqRes + : Asn1Encodable + { + private readonly ContentInfo request; + private readonly ContentInfo response; + + public static ScvpReqRes GetInstance(object obj) + { + if (obj is ScvpReqRes) + return (ScvpReqRes)obj; + if (obj != null) + return new ScvpReqRes(Asn1Sequence.GetInstance(obj)); + return null; + } + + private ScvpReqRes(Asn1Sequence seq) + { + if (seq[0] is Asn1TaggedObject) + { + this.request = ContentInfo.GetInstance(Asn1TaggedObject.GetInstance(seq[0]), true); + this.response = ContentInfo.GetInstance(seq[1]); + } + else + { + this.request = null; + this.response = ContentInfo.GetInstance(seq[0]); + } + } + + public ScvpReqRes(ContentInfo response) + : this(null, response) + { + } + + public ScvpReqRes(ContentInfo request, ContentInfo response) + { + this.request = request; + this.response = response; + } + + public virtual ContentInfo Request + { + get { return request; } + } + + public virtual ContentInfo Response + { + get { return response; } + } + + /** + *
+         *    ScvpReqRes ::= SEQUENCE {
+         *    request  [0] EXPLICIT ContentInfo OPTIONAL,
+         *    response     ContentInfo }
+         * 
+ * @return the ASN.1 primitive representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptionalTagged(true, 0, request); + v.Add(response); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SCVPReqRes.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SCVPReqRes.cs.meta new file mode 100644 index 000000000..3978380d4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SCVPReqRes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 92dbb27973d540649af93402eedd7360 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignedData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignedData.cs new file mode 100644 index 000000000..9dd7bf664 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignedData.cs @@ -0,0 +1,281 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + /** + * a signed data object. + */ + public class SignedData + : Asn1Encodable + { + private static readonly DerInteger Version1 = new DerInteger(1); + private static readonly DerInteger Version3 = new DerInteger(3); + private static readonly DerInteger Version4 = new DerInteger(4); + private static readonly DerInteger Version5 = new DerInteger(5); + + private readonly DerInteger version; + private readonly Asn1Set digestAlgorithms; + private readonly ContentInfo contentInfo; + private readonly Asn1Set certificates; + private readonly Asn1Set crls; + private readonly Asn1Set signerInfos; + private readonly bool certsBer; + private readonly bool crlsBer; + + public static SignedData GetInstance(object obj) + { + if (obj is SignedData) + return (SignedData)obj; + if (obj == null) + return null; + return new SignedData(Asn1Sequence.GetInstance(obj)); + } + + public SignedData( + Asn1Set digestAlgorithms, + ContentInfo contentInfo, + Asn1Set certificates, + Asn1Set crls, + Asn1Set signerInfos) + { + this.version = CalculateVersion(contentInfo.ContentType, certificates, crls, signerInfos); + this.digestAlgorithms = digestAlgorithms; + this.contentInfo = contentInfo; + this.certificates = certificates; + this.crls = crls; + this.signerInfos = signerInfos; + this.crlsBer = crls is BerSet; + this.certsBer = certificates is BerSet; + } + + // RFC3852, section 5.1: + // IF ((certificates is present) AND + // (any certificates with a type of other are present)) OR + // ((crls is present) AND + // (any crls with a type of other are present)) + // THEN version MUST be 5 + // ELSE + // IF (certificates is present) AND + // (any version 2 attribute certificates are present) + // THEN version MUST be 4 + // ELSE + // IF ((certificates is present) AND + // (any version 1 attribute certificates are present)) OR + // (any SignerInfo structures are version 3) OR + // (encapContentInfo eContentType is other than id-data) + // THEN version MUST be 3 + // ELSE version MUST be 1 + // + private DerInteger CalculateVersion( + DerObjectIdentifier contentOid, + Asn1Set certs, + Asn1Set crls, + Asn1Set signerInfs) + { + bool otherCert = false; + bool otherCrl = false; + bool attrCertV1Found = false; + bool attrCertV2Found = false; + + if (certs != null) + { + foreach (object obj in certs) + { + if (obj is Asn1TaggedObject) + { + Asn1TaggedObject tagged = (Asn1TaggedObject)obj; + + if (tagged.TagNo == 1) + { + attrCertV1Found = true; + } + else if (tagged.TagNo == 2) + { + attrCertV2Found = true; + } + else if (tagged.TagNo == 3) + { + otherCert = true; + break; + } + } + } + } + + if (otherCert) + { + return Version5; + } + + if (crls != null) + { + foreach (object obj in crls) + { + if (obj is Asn1TaggedObject) + { + otherCrl = true; + break; + } + } + } + + if (otherCrl) + { + return Version5; + } + + if (attrCertV2Found) + { + return Version4; + } + + if (attrCertV1Found || !CmsObjectIdentifiers.Data.Equals(contentOid) || CheckForVersion3(signerInfs)) + { + return Version3; + } + + return Version1; + } + + private bool CheckForVersion3(Asn1Set signerInfs) + { + foreach (object obj in signerInfs) + { + SignerInfo s = SignerInfo.GetInstance(obj); + + if (s.Version.HasValue(3)) + { + return true; + } + } + + return false; + } + + private SignedData(Asn1Sequence seq) + { + var e = seq.GetEnumerator(); + + e.MoveNext(); + version = (DerInteger)e.Current; + + e.MoveNext(); + digestAlgorithms = (Asn1Set)e.Current.ToAsn1Object(); + + e.MoveNext(); + contentInfo = ContentInfo.GetInstance(e.Current.ToAsn1Object()); + + while (e.MoveNext()) + { + Asn1Object o = e.Current.ToAsn1Object(); + + // + // an interesting feature of SignedData is that there appear + // to be varying implementations... + // for the moment we ignore anything which doesn't fit. + // + if (o is Asn1TaggedObject tagged) + { + switch (tagged.TagNo) + { + case 0: + certsBer = tagged is BerTaggedObject; + certificates = Asn1Set.GetInstance(tagged, false); + break; + case 1: + crlsBer = tagged is BerTaggedObject; + crls = Asn1Set.GetInstance(tagged, false); + break; + default: + throw new ArgumentException("unknown tag value " + tagged.TagNo); + } + } + else + { + signerInfos = (Asn1Set) o; + } + } + } + + public DerInteger Version + { + get { return version; } + } + + public Asn1Set DigestAlgorithms + { + get { return digestAlgorithms; } + } + + public ContentInfo EncapContentInfo + { + get { return contentInfo; } + } + + public Asn1Set Certificates + { + get { return certificates; } + } + + public Asn1Set CRLs + { + get { return crls; } + } + + public Asn1Set SignerInfos + { + get { return signerInfos; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * SignedData ::= Sequence {
+         *     version CMSVersion,
+         *     digestAlgorithms DigestAlgorithmIdentifiers,
+         *     encapContentInfo EncapsulatedContentInfo,
+         *     certificates [0] IMPLICIT CertificateSet OPTIONAL,
+         *     crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
+         *     signerInfos SignerInfos
+         *   }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector( + version, digestAlgorithms, contentInfo); + + if (certificates != null) + { + if (certsBer) + { + v.Add(new BerTaggedObject(false, 0, certificates)); + } + else + { + v.Add(new DerTaggedObject(false, 0, certificates)); + } + } + + if (crls != null) + { + if (crlsBer) + { + v.Add(new BerTaggedObject(false, 1, crls)); + } + else + { + v.Add(new DerTaggedObject(false, 1, crls)); + } + } + + v.Add(signerInfos); + + return new BerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignedData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignedData.cs.meta new file mode 100644 index 000000000..586f90fb4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignedData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a5dc6d047e3b72c4dbc7647580b4200b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignedDataParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignedDataParser.cs new file mode 100644 index 000000000..f860e461a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignedDataParser.cs @@ -0,0 +1,122 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + /** + *
+	* SignedData ::= SEQUENCE {
+	*     version CMSVersion,
+	*     digestAlgorithms DigestAlgorithmIdentifiers,
+	*     encapContentInfo EncapsulatedContentInfo,
+	*     certificates [0] IMPLICIT CertificateSet OPTIONAL,
+	*     crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
+	*     signerInfos SignerInfos
+	*   }
+	* 
+ */ + public class SignedDataParser + { + private Asn1SequenceParser _seq; + private DerInteger _version; + private object _nextObject; + private bool _certsCalled; + private bool _crlsCalled; + + public static SignedDataParser GetInstance( + object o) + { + if (o is Asn1Sequence) + return new SignedDataParser(((Asn1Sequence)o).Parser); + + if (o is Asn1SequenceParser) + return new SignedDataParser((Asn1SequenceParser)o); + + throw new IOException("unknown object encountered: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(o)); + } + + public SignedDataParser( + Asn1SequenceParser seq) + { + this._seq = seq; + this._version = (DerInteger)seq.ReadObject(); + } + + public DerInteger Version + { + get { return _version; } + } + + public Asn1SetParser GetDigestAlgorithms() + { + return (Asn1SetParser)_seq.ReadObject(); + } + + public ContentInfoParser GetEncapContentInfo() + { + return new ContentInfoParser((Asn1SequenceParser)_seq.ReadObject()); + } + + public Asn1SetParser GetCertificates() + { + _certsCalled = true; + _nextObject = _seq.ReadObject(); + + if (_nextObject is Asn1TaggedObjectParser o) + { + if (o.HasContextTag(0)) + { + Asn1SetParser certs = (Asn1SetParser)o.ParseBaseUniversal(false, Asn1Tags.SetOf); + _nextObject = null; + return certs; + } + } + + return null; + } + + public Asn1SetParser GetCrls() + { + if (!_certsCalled) + throw new IOException("GetCerts() has not been called."); + + _crlsCalled = true; + + if (_nextObject == null) + { + _nextObject = _seq.ReadObject(); + } + + if (_nextObject is Asn1TaggedObjectParser o) + { + if (o.HasContextTag(1)) + { + Asn1SetParser crls = (Asn1SetParser)o.ParseBaseUniversal(false, Asn1Tags.SetOf); + _nextObject = null; + return crls; + } + } + + return null; + } + + public Asn1SetParser GetSignerInfos() + { + if (!_certsCalled || !_crlsCalled) + throw new IOException("GetCerts() and/or GetCrls() has not been called."); + + if (_nextObject == null) + { + _nextObject = _seq.ReadObject(); + } + + return (Asn1SetParser)_nextObject; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignedDataParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignedDataParser.cs.meta new file mode 100644 index 000000000..7264a427b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignedDataParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fe03f140a8f8c9140a306a9386ee2e6c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignerIdentifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignerIdentifier.cs new file mode 100644 index 000000000..a164f27b9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignerIdentifier.cs @@ -0,0 +1,93 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class SignerIdentifier + : Asn1Encodable, IAsn1Choice + { + private Asn1Encodable id; + + public SignerIdentifier( + IssuerAndSerialNumber id) + { + this.id = id; + } + + public SignerIdentifier( + Asn1OctetString id) + { + this.id = new DerTaggedObject(false, 0, id); + } + + public SignerIdentifier( + Asn1Object id) + { + this.id = id; + } + + /** + * return a SignerIdentifier object from the given object. + * + * @param o the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static SignerIdentifier GetInstance( + object o) + { + if (o == null || o is SignerIdentifier) + return (SignerIdentifier) o; + + if (o is IssuerAndSerialNumber) + return new SignerIdentifier((IssuerAndSerialNumber) o); + + if (o is Asn1OctetString) + return new SignerIdentifier((Asn1OctetString) o); + + if (o is Asn1Object) + return new SignerIdentifier((Asn1Object) o); + + throw new ArgumentException( + "Illegal object in SignerIdentifier: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(o)); + } + + public bool IsTagged + { + get { return (id is Asn1TaggedObject); } + } + + public Asn1Encodable ID + { + get + { + if (id is Asn1TaggedObject) + { + return Asn1OctetString.GetInstance((Asn1TaggedObject)id, false); + } + + return id; + } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * SignerIdentifier ::= CHOICE {
+         *     issuerAndSerialNumber IssuerAndSerialNumber,
+         *     subjectKeyIdentifier [0] SubjectKeyIdentifier
+         * }
+         *
+         * SubjectKeyIdentifier ::= OCTET STRING
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return id.ToAsn1Object(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignerIdentifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignerIdentifier.cs.meta new file mode 100644 index 000000000..8f01da1f6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignerIdentifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1834d9476e2fa5642acce8e4bc2a71c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignerInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignerInfo.cs new file mode 100644 index 000000000..74a72b5da --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignerInfo.cs @@ -0,0 +1,174 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class SignerInfo + : Asn1Encodable + { + private DerInteger version; + private SignerIdentifier sid; + private AlgorithmIdentifier digAlgorithm; + private Asn1Set authenticatedAttributes; + private AlgorithmIdentifier digEncryptionAlgorithm; + private Asn1OctetString encryptedDigest; + private Asn1Set unauthenticatedAttributes; + + public static SignerInfo GetInstance(object obj) + { + if (obj == null || obj is SignerInfo) + return (SignerInfo) obj; + + if (obj is Asn1Sequence) + return new SignerInfo((Asn1Sequence) obj); + + throw new ArgumentException("Unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public SignerInfo( + SignerIdentifier sid, + AlgorithmIdentifier digAlgorithm, + Asn1Set authenticatedAttributes, + AlgorithmIdentifier digEncryptionAlgorithm, + Asn1OctetString encryptedDigest, + Asn1Set unauthenticatedAttributes) + { + this.version = new DerInteger(sid.IsTagged ? 3 : 1); + this.sid = sid; + this.digAlgorithm = digAlgorithm; + this.authenticatedAttributes = authenticatedAttributes; + this.digEncryptionAlgorithm = digEncryptionAlgorithm; + this.encryptedDigest = encryptedDigest; + this.unauthenticatedAttributes = unauthenticatedAttributes; + } + + public SignerInfo( + SignerIdentifier sid, + AlgorithmIdentifier digAlgorithm, + Attributes authenticatedAttributes, + AlgorithmIdentifier digEncryptionAlgorithm, + Asn1OctetString encryptedDigest, + Attributes unauthenticatedAttributes) + { + this.version = new DerInteger(sid.IsTagged ? 3 : 1); + this.sid = sid; + this.digAlgorithm = digAlgorithm; + this.authenticatedAttributes = Asn1Set.GetInstance(authenticatedAttributes); + this.digEncryptionAlgorithm = digEncryptionAlgorithm; + this.encryptedDigest = encryptedDigest; + this.unauthenticatedAttributes = Asn1Set.GetInstance(unauthenticatedAttributes); + } + + private SignerInfo(Asn1Sequence seq) + { + var e = seq.GetEnumerator(); + + e.MoveNext(); + version = (DerInteger)e.Current; + + e.MoveNext(); + sid = SignerIdentifier.GetInstance(e.Current.ToAsn1Object()); + + e.MoveNext(); + digAlgorithm = AlgorithmIdentifier.GetInstance(e.Current.ToAsn1Object()); + + e.MoveNext(); + var obj = e.Current.ToAsn1Object(); + + if (obj is Asn1TaggedObject tagged) + { + authenticatedAttributes = Asn1Set.GetInstance(tagged, false); + + e.MoveNext(); + digEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(e.Current.ToAsn1Object()); + } + else + { + authenticatedAttributes = null; + digEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(obj); + } + + e.MoveNext(); + encryptedDigest = Asn1OctetString.GetInstance(e.Current.ToAsn1Object()); + + if (e.MoveNext()) + { + unauthenticatedAttributes = Asn1Set.GetInstance((Asn1TaggedObject)e.Current.ToAsn1Object(), false); + } + else + { + unauthenticatedAttributes = null; + } + } + + public DerInteger Version + { + get { return version; } + } + + public SignerIdentifier SignerID + { + get { return sid; } + } + + public Asn1Set AuthenticatedAttributes + { + get { return authenticatedAttributes; } + } + + public AlgorithmIdentifier DigestAlgorithm + { + get { return digAlgorithm; } + } + + public Asn1OctetString EncryptedDigest + { + get { return encryptedDigest; } + } + + public AlgorithmIdentifier DigestEncryptionAlgorithm + { + get { return digEncryptionAlgorithm; } + } + + public Asn1Set UnauthenticatedAttributes + { + get { return unauthenticatedAttributes; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         *  SignerInfo ::= Sequence {
+         *      version Version,
+         *      SignerIdentifier sid,
+         *      digestAlgorithm DigestAlgorithmIdentifier,
+         *      authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
+         *      digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
+         *      encryptedDigest EncryptedDigest,
+         *      unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL
+         *  }
+         *
+         *  EncryptedDigest ::= OCTET STRING
+         *
+         *  DigestAlgorithmIdentifier ::= AlgorithmIdentifier
+         *
+         *  DigestEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(version, sid, digAlgorithm); + v.AddOptionalTagged(false, 0, authenticatedAttributes); + v.Add(digEncryptionAlgorithm, encryptedDigest); + v.AddOptionalTagged(false, 1, unauthenticatedAttributes); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignerInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignerInfo.cs.meta new file mode 100644 index 000000000..adaa11949 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/SignerInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b001eabd602e8924b916b46709474a77 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Time.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Time.cs new file mode 100644 index 000000000..592ae9e32 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Time.cs @@ -0,0 +1,114 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Globalization; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class Time + : Asn1Encodable, IAsn1Choice + { + public static Time GetInstance(object obj) + { + if (obj == null) + return null; + if (obj is Time time) + return time; + if (obj is Asn1UtcTime utcTime) + return new Time(utcTime); + if (obj is Asn1GeneralizedTime generalizedTime) + return new Time(generalizedTime); + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), nameof(obj)); + } + + public static Time GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return GetInstance(taggedObject.GetObject()); + } + + private readonly Asn1Object m_timeObject; + + public Time(Asn1GeneralizedTime generalizedTime) + { + this.m_timeObject = generalizedTime ?? throw new ArgumentNullException(nameof(generalizedTime)); + } + + public Time(Asn1UtcTime utcTime) + { + if (utcTime == null) + throw new ArgumentNullException(nameof(utcTime)); + + // Validate utcTime is in the appropriate year range + utcTime.ToDateTime(2049); + + this.m_timeObject = utcTime; + } + + /** + * creates a time object from a given date - if the date is between 1950 + * and 2049 a UTCTime object is Generated, otherwise a GeneralizedTime + * is used. + */ + public Time(DateTime date) + { + DateTime utc = date.ToUniversalTime(); + + if (utc.Year < 1950 || utc.Year > 2049) + { + m_timeObject = new DerGeneralizedTime(utc); + } + else + { + m_timeObject = new DerUtcTime(utc, 2049); + } + } + + public DateTime ToDateTime() + { + try + { + if (m_timeObject is Asn1UtcTime utcTime) + return utcTime.ToDateTime(2049); + + return ((Asn1GeneralizedTime)m_timeObject).ToDateTime(); + } + catch (FormatException e) + { + // this should never happen + throw new InvalidOperationException("invalid date string: " + e.Message); + } + } + + + public DateTime Date => ToDateTime(); + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * Time ::= CHOICE {
+         *             utcTime        UTCTime,
+         *             generalTime    GeneralizedTime }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return m_timeObject; + } + + public override string ToString() + { + if (m_timeObject is Asn1UtcTime utcTime) + return utcTime.ToDateTime(2049).ToString(@"yyyyMMddHHmmssK", DateTimeFormatInfo.InvariantInfo); + + if (m_timeObject is Asn1GeneralizedTime generalizedTime) + return generalizedTime.ToDateTime().ToString(@"yyyyMMddHHmmss.FFFFFFFK", DateTimeFormatInfo.InvariantInfo); + + throw new InvalidOperationException(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Time.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Time.cs.meta new file mode 100644 index 000000000..76f08082a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/Time.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd53b1f6bb9d6d340b540b1b2f98b5e3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampAndCRL.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampAndCRL.cs new file mode 100644 index 000000000..755cf9796 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampAndCRL.cs @@ -0,0 +1,66 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class TimeStampAndCrl + : Asn1Encodable + { + private ContentInfo timeStamp; + private X509.CertificateList crl; + + public TimeStampAndCrl(ContentInfo timeStamp) + { + this.timeStamp = timeStamp; + } + + private TimeStampAndCrl(Asn1Sequence seq) + { + this.timeStamp = ContentInfo.GetInstance(seq[0]); + if (seq.Count == 2) + { + this.crl = X509.CertificateList.GetInstance(seq[1]); + } + } + + public static TimeStampAndCrl GetInstance(object obj) + { + if (obj is TimeStampAndCrl) + return (TimeStampAndCrl)obj; + + if (obj != null) + return new TimeStampAndCrl(Asn1Sequence.GetInstance(obj)); + + return null; + } + + public virtual ContentInfo TimeStampToken + { + get { return this.timeStamp; } + } + + public virtual X509.CertificateList Crl + { + get { return this.crl; } + } + + /** + *
+		 * TimeStampAndCRL ::= SEQUENCE {
+		 *     timeStamp   TimeStampToken,          -- according to RFC 3161
+		 *     crl         CertificateList OPTIONAL -- according to RFC 5280
+		 *  }
+		 * 
+ * @return + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(timeStamp); + v.AddOptional(crl); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampAndCRL.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampAndCRL.cs.meta new file mode 100644 index 000000000..4fe72d323 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampAndCRL.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aefd69060f6d123459d8901c0ebf1119 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampTokenEvidence.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampTokenEvidence.cs new file mode 100644 index 000000000..6060ef858 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampTokenEvidence.cs @@ -0,0 +1,69 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class TimeStampTokenEvidence + : Asn1Encodable + { + private TimeStampAndCrl[] timeStampAndCrls; + + public TimeStampTokenEvidence(TimeStampAndCrl[] timeStampAndCrls) + { + this.timeStampAndCrls = timeStampAndCrls; + } + + public TimeStampTokenEvidence(TimeStampAndCrl timeStampAndCrl) + { + this.timeStampAndCrls = new TimeStampAndCrl[]{ timeStampAndCrl }; + } + + private TimeStampTokenEvidence(Asn1Sequence seq) + { + this.timeStampAndCrls = new TimeStampAndCrl[seq.Count]; + + int count = 0; + + foreach (Asn1Encodable ae in seq) + { + this.timeStampAndCrls[count++] = TimeStampAndCrl.GetInstance(ae.ToAsn1Object()); + } + } + + public static TimeStampTokenEvidence GetInstance(Asn1TaggedObject tagged, bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(tagged, isExplicit)); + } + + public static TimeStampTokenEvidence GetInstance(object obj) + { + if (obj is TimeStampTokenEvidence) + return (TimeStampTokenEvidence)obj; + + if (obj != null) + return new TimeStampTokenEvidence(Asn1Sequence.GetInstance(obj)); + + return null; + } + + public virtual TimeStampAndCrl[] ToTimeStampAndCrlArray() + { + return (TimeStampAndCrl[])timeStampAndCrls.Clone(); + } + + /** + *
+		 * TimeStampTokenEvidence ::=
+		 *    SEQUENCE SIZE(1..MAX) OF TimeStampAndCrl
+		 * 
+ * @return + */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(timeStampAndCrls); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampTokenEvidence.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampTokenEvidence.cs.meta new file mode 100644 index 000000000..5b1d1759c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampTokenEvidence.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c5e92824f624151419005181ce6e0331 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampedData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampedData.cs new file mode 100644 index 000000000..cf7e638cb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampedData.cs @@ -0,0 +1,99 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class TimeStampedData + : Asn1Encodable + { + private DerInteger version; + private DerIA5String dataUri; + private MetaData metaData; + private Asn1OctetString content; + private Evidence temporalEvidence; + + public TimeStampedData(DerIA5String dataUri, MetaData metaData, Asn1OctetString content, + Evidence temporalEvidence) + { + this.version = new DerInteger(1); + this.dataUri = dataUri; + this.metaData = metaData; + this.content = content; + this.temporalEvidence = temporalEvidence; + } + + private TimeStampedData(Asn1Sequence seq) + { + this.version = DerInteger.GetInstance(seq[0]); + + int index = 1; + if (seq[index] is DerIA5String) + { + this.dataUri = DerIA5String.GetInstance(seq[index++]); + } + if (seq[index] is MetaData || seq[index] is Asn1Sequence) + { + this.metaData = MetaData.GetInstance(seq[index++]); + } + if (seq[index] is Asn1OctetString) + { + this.content = Asn1OctetString.GetInstance(seq[index++]); + } + this.temporalEvidence = Evidence.GetInstance(seq[index]); + } + + public static TimeStampedData GetInstance(object obj) + { + if (obj is TimeStampedData) + return (TimeStampedData)obj; + + if (obj != null) + return new TimeStampedData(Asn1Sequence.GetInstance(obj)); + + return null; + } + + public virtual DerIA5String DataUri + { + get { return dataUri; } + } + + public MetaData MetaData + { + get { return metaData; } + } + + public Asn1OctetString Content + { + get { return content; } + } + + public Evidence TemporalEvidence + { + get { return temporalEvidence; } + } + + /** + *
+		 * TimeStampedData ::= SEQUENCE {
+		 *   version              INTEGER { v1(1) },
+		 *   dataUri              IA5String OPTIONAL,
+		 *   metaData             MetaData OPTIONAL,
+		 *   content              OCTET STRING OPTIONAL,
+		 *   temporalEvidence     Evidence
+		 * }
+		 * 
+ * @return + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(version); + v.AddOptional(dataUri, metaData, content); + v.Add(temporalEvidence); + return new BerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampedData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampedData.cs.meta new file mode 100644 index 000000000..957a1d5c8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampedData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e751bd777e44aa74dbd38f3cb1a50108 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampedDataParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampedDataParser.cs new file mode 100644 index 000000000..37348625f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampedDataParser.cs @@ -0,0 +1,80 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms +{ + public class TimeStampedDataParser + { + private DerInteger version; + private DerIA5String dataUri; + private MetaData metaData; + private Asn1OctetStringParser content; + private Evidence temporalEvidence; + private Asn1SequenceParser parser; + + private TimeStampedDataParser(Asn1SequenceParser parser) + { + this.parser = parser; + this.version = DerInteger.GetInstance(parser.ReadObject()); + + Asn1Object obj = parser.ReadObject().ToAsn1Object(); + + if (obj is DerIA5String) + { + this.dataUri = DerIA5String.GetInstance(obj); + obj = parser.ReadObject().ToAsn1Object(); + } + + if (//obj is MetaData || + obj is Asn1SequenceParser) + { + this.metaData = MetaData.GetInstance(obj.ToAsn1Object()); + obj = parser.ReadObject().ToAsn1Object(); + } + + if (obj is Asn1OctetStringParser) + { + this.content = (Asn1OctetStringParser)obj; + } + } + + public static TimeStampedDataParser GetInstance(object obj) + { + if (obj is Asn1Sequence) + return new TimeStampedDataParser(((Asn1Sequence)obj).Parser); + + if (obj is Asn1SequenceParser) + return new TimeStampedDataParser((Asn1SequenceParser)obj); + + return null; + } + + public virtual DerIA5String DataUri + { + get { return dataUri; } + } + + public virtual MetaData MetaData + { + get { return metaData; } + } + + public virtual Asn1OctetStringParser Content + { + get { return content; } + } + + public virtual Evidence GetTemporalEvidence() + { + if (temporalEvidence == null) + { + temporalEvidence = Evidence.GetInstance(parser.ReadObject().ToAsn1Object()); + } + + return temporalEvidence; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampedDataParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampedDataParser.cs.meta new file mode 100644 index 000000000..12bc328cf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/TimeStampedDataParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5ee0a6768d4e72e40b64486cfe1efff9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ecc.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ecc.meta new file mode 100644 index 000000000..c9e909c42 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ecc.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ce6f9ee43d9bc864dae54bd548ed363e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ecc/MQVuserKeyingMaterial.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ecc/MQVuserKeyingMaterial.cs new file mode 100644 index 000000000..5948817eb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ecc/MQVuserKeyingMaterial.cs @@ -0,0 +1,104 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms.Ecc +{ + public class MQVuserKeyingMaterial + : Asn1Encodable + { + private OriginatorPublicKey ephemeralPublicKey; + private Asn1OctetString addedukm; + + public MQVuserKeyingMaterial( + OriginatorPublicKey ephemeralPublicKey, + Asn1OctetString addedukm) + { + // TODO Check ephemeralPublicKey not null + + this.ephemeralPublicKey = ephemeralPublicKey; + this.addedukm = addedukm; + } + + private MQVuserKeyingMaterial( + Asn1Sequence seq) + { + // TODO Check seq has either 1 or 2 elements + + this.ephemeralPublicKey = OriginatorPublicKey.GetInstance(seq[0]); + + if (seq.Count > 1) + { + this.addedukm = Asn1OctetString.GetInstance( + (Asn1TaggedObject)seq[1], true); + } + } + + /** + * return an AuthEnvelopedData object from a tagged object. + * + * @param obj the tagged object holding the object we want. + * @param isExplicit true if the object is meant to be explicitly + * tagged false otherwise. + * @throws ArgumentException if the object held by the + * tagged object cannot be converted. + */ + public static MQVuserKeyingMaterial GetInstance( + Asn1TaggedObject obj, + bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit)); + } + + /** + * return an AuthEnvelopedData object from the given object. + * + * @param obj the object we want converted. + * @throws ArgumentException if the object cannot be converted. + */ + public static MQVuserKeyingMaterial GetInstance( + object obj) + { + if (obj == null || obj is MQVuserKeyingMaterial) + { + return (MQVuserKeyingMaterial)obj; + } + + if (obj is Asn1Sequence) + { + return new MQVuserKeyingMaterial((Asn1Sequence)obj); + } + + throw new ArgumentException("Invalid MQVuserKeyingMaterial: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public OriginatorPublicKey EphemeralPublicKey + { + get { return ephemeralPublicKey; } + } + + public Asn1OctetString AddedUkm + { + get { return addedukm; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+		* MQVuserKeyingMaterial ::= SEQUENCE {
+		*   ephemeralPublicKey OriginatorPublicKey,
+		*   addedukm [0] EXPLICIT UserKeyingMaterial OPTIONAL  }
+		* 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(ephemeralPublicKey); + v.AddOptionalTagged(true, 0, addedukm); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ecc/MQVuserKeyingMaterial.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ecc/MQVuserKeyingMaterial.cs.meta new file mode 100644 index 000000000..7eb5ff7f7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cms/ecc/MQVuserKeyingMaterial.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 695997000ded4e642af4ecb0946fb50b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf.meta new file mode 100644 index 000000000..e82837933 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 421265fb97e2f904fb773f0f014a9ba1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/AttributeTypeAndValue.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/AttributeTypeAndValue.cs new file mode 100644 index 000000000..0e2f20326 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/AttributeTypeAndValue.cs @@ -0,0 +1,72 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public class AttributeTypeAndValue + : Asn1Encodable + { + private readonly DerObjectIdentifier type; + private readonly Asn1Encodable value; + + private AttributeTypeAndValue(Asn1Sequence seq) + { + type = (DerObjectIdentifier)seq[0]; + value = (Asn1Encodable)seq[1]; + } + + public static AttributeTypeAndValue GetInstance(object obj) + { + if (obj is AttributeTypeAndValue) + return (AttributeTypeAndValue)obj; + + if (obj is Asn1Sequence) + return new AttributeTypeAndValue((Asn1Sequence)obj); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public AttributeTypeAndValue( + string oid, + Asn1Encodable value) + : this(new DerObjectIdentifier(oid), value) + { + } + + public AttributeTypeAndValue( + DerObjectIdentifier type, + Asn1Encodable value) + { + this.type = type; + this.value = value; + } + + public virtual DerObjectIdentifier Type + { + get { return type; } + } + + public virtual Asn1Encodable Value + { + get { return value; } + } + + /** + *
+         * AttributeTypeAndValue ::= SEQUENCE {
+         *           type         OBJECT IDENTIFIER,
+         *           value        ANY DEFINED BY type }
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(type, value); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/AttributeTypeAndValue.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/AttributeTypeAndValue.cs.meta new file mode 100644 index 000000000..ad14e705e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/AttributeTypeAndValue.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 653f45c93caaf0442ada642dbd511ee5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertId.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertId.cs new file mode 100644 index 000000000..47e9eb3b9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertId.cs @@ -0,0 +1,63 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public class CertId + : Asn1Encodable + { + private readonly GeneralName issuer; + private readonly DerInteger serialNumber; + + private CertId(Asn1Sequence seq) + { + issuer = GeneralName.GetInstance(seq[0]); + serialNumber = DerInteger.GetInstance(seq[1]); + } + + public static CertId GetInstance(object obj) + { + if (obj is CertId) + return (CertId)obj; + + if (obj is Asn1Sequence) + return new CertId((Asn1Sequence)obj); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public static CertId GetInstance(Asn1TaggedObject obj, bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit)); + } + + public virtual GeneralName Issuer + { + get { return issuer; } + } + + public virtual DerInteger SerialNumber + { + get { return serialNumber; } + } + + /** + *
+         * CertId ::= SEQUENCE {
+         *                 issuer           GeneralName,
+         *                 serialNumber     INTEGER }
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(issuer, serialNumber); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertId.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertId.cs.meta new file mode 100644 index 000000000..ce0be9b18 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertId.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e5ffe9cc9bcb1740b2f4820f8252006 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertReqMessages.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertReqMessages.cs new file mode 100644 index 000000000..ddffce6fd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertReqMessages.cs @@ -0,0 +1,58 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public class CertReqMessages + : Asn1Encodable + { + private readonly Asn1Sequence content; + + private CertReqMessages(Asn1Sequence seq) + { + content = seq; + } + + public static CertReqMessages GetInstance(object obj) + { + if (obj is CertReqMessages) + return (CertReqMessages)obj; + + if (obj is Asn1Sequence) + return new CertReqMessages((Asn1Sequence)obj); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public CertReqMessages(params CertReqMsg[] msgs) + { + content = new DerSequence(msgs); + } + + public virtual CertReqMsg[] ToCertReqMsgArray() + { + CertReqMsg[] result = new CertReqMsg[content.Count]; + for (int i = 0; i != result.Length; ++i) + { + result[i] = CertReqMsg.GetInstance(content[i]); + } + return result; + } + + /** + *
+         * CertReqMessages ::= SEQUENCE SIZE (1..MAX) OF CertReqMsg
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return content; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertReqMessages.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertReqMessages.cs.meta new file mode 100644 index 000000000..afef5ea4d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertReqMessages.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 82200b023ea804a49b04c3f12be1db36 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertReqMsg.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertReqMsg.cs new file mode 100644 index 000000000..0f6168d2d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertReqMsg.cs @@ -0,0 +1,116 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public class CertReqMsg + : Asn1Encodable + { + private readonly CertRequest certReq; + private readonly ProofOfPossession popo; + private readonly Asn1Sequence regInfo; + + private CertReqMsg(Asn1Sequence seq) + { + certReq = CertRequest.GetInstance(seq[0]); + + for (int pos = 1; pos < seq.Count; ++pos) + { + object o = seq[pos]; + + if (o is Asn1TaggedObject || o is ProofOfPossession) + { + popo = ProofOfPossession.GetInstance(o); + } + else + { + regInfo = Asn1Sequence.GetInstance(o); + } + } + } + + public static CertReqMsg GetInstance(object obj) + { + if (obj is CertReqMsg) + return (CertReqMsg)obj; + + if (obj != null) + return new CertReqMsg(Asn1Sequence.GetInstance(obj)); + + return null; + } + + public static CertReqMsg GetInstance( + Asn1TaggedObject obj, + bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit)); + } + + /** + * Creates a new CertReqMsg. + * @param certReq CertRequest + * @param popo may be null + * @param regInfo may be null + */ + public CertReqMsg( + CertRequest certReq, + ProofOfPossession popo, + AttributeTypeAndValue[] regInfo) + { + if (certReq == null) + throw new ArgumentNullException("certReq"); + + this.certReq = certReq; + this.popo = popo; + + if (regInfo != null) + { + this.regInfo = new DerSequence(regInfo); + } + } + + public virtual CertRequest CertReq + { + get { return certReq; } + } + + public virtual ProofOfPossession Popo + { + get { return popo; } + } + + public virtual AttributeTypeAndValue[] GetRegInfo() + { + if (regInfo == null) + return null; + + AttributeTypeAndValue[] results = new AttributeTypeAndValue[regInfo.Count]; + for (int i = 0; i != results.Length; ++i) + { + results[i] = AttributeTypeAndValue.GetInstance(regInfo[i]); + } + return results; + } + + /** + *
+         * CertReqMsg ::= SEQUENCE {
+         *                    certReq   CertRequest,
+         *                    pop       ProofOfPossession  OPTIONAL,
+         *                    -- content depends upon key type
+         *                    regInfo   SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue OPTIONAL }
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(certReq); + v.AddOptional(popo, regInfo); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertReqMsg.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertReqMsg.cs.meta new file mode 100644 index 000000000..ce3238585 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertReqMsg.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e659fe800c14c834ebea2ba531c24f69 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertRequest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertRequest.cs new file mode 100644 index 000000000..d5581daaf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertRequest.cs @@ -0,0 +1,87 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crmf; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public class CertRequest + : Asn1Encodable + { + private readonly DerInteger certReqId; + private readonly CertTemplate certTemplate; + private readonly Controls controls; + + private CertRequest(Asn1Sequence seq) + { + certReqId = DerInteger.GetInstance(seq[0]); + certTemplate = CertTemplate.GetInstance(seq[1]); + if (seq.Count > 2) + { + controls = Controls.GetInstance(seq[2]); + } + } + + public static CertRequest GetInstance(object obj) + { + if (obj is CertRequest) + return (CertRequest)obj; + + if (obj != null) + return new CertRequest(Asn1Sequence.GetInstance(obj)); + + return null; + } + + public CertRequest( + int certReqId, + CertTemplate certTemplate, + Controls controls) + : this(new DerInteger(certReqId), certTemplate, controls) + { + } + + public CertRequest( + DerInteger certReqId, + CertTemplate certTemplate, + Controls controls) + { + this.certReqId = certReqId; + this.certTemplate = certTemplate; + this.controls = controls; + } + + public virtual DerInteger CertReqID + { + get { return certReqId; } + } + + public virtual CertTemplate CertTemplate + { + get { return certTemplate; } + } + + public virtual Controls Controls + { + get { return controls; } + } + + /** + *
+         * CertRequest ::= SEQUENCE {
+         *                      certReqId     INTEGER,          -- ID for matching request and reply
+         *                      certTemplate  CertTemplate,  -- Selected fields of cert to be issued
+         *                      controls      Controls OPTIONAL }   -- Attributes affecting issuance
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(certReqId, certTemplate); + v.AddOptional(controls); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertRequest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertRequest.cs.meta new file mode 100644 index 000000000..1921aac20 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0a580e44b515af04394c93a780461f39 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertTemplate.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertTemplate.cs new file mode 100644 index 000000000..1a07eb779 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertTemplate.cs @@ -0,0 +1,153 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public class CertTemplate + : Asn1Encodable + { + private readonly Asn1Sequence seq; + + private readonly DerInteger version; + private readonly DerInteger serialNumber; + private readonly AlgorithmIdentifier signingAlg; + private readonly X509Name issuer; + private readonly OptionalValidity validity; + private readonly X509Name subject; + private readonly SubjectPublicKeyInfo publicKey; + private readonly DerBitString issuerUID; + private readonly DerBitString subjectUID; + private readonly X509Extensions extensions; + + private CertTemplate(Asn1Sequence seq) + { + this.seq = seq; + + foreach (Asn1TaggedObject tObj in seq) + { + switch (tObj.TagNo) + { + case 0: + version = DerInteger.GetInstance(tObj, false); + break; + case 1: + serialNumber = DerInteger.GetInstance(tObj, false); + break; + case 2: + signingAlg = AlgorithmIdentifier.GetInstance(tObj, false); + break; + case 3: + issuer = X509Name.GetInstance(tObj, true); // CHOICE + break; + case 4: + validity = OptionalValidity.GetInstance(Asn1Sequence.GetInstance(tObj, false)); + break; + case 5: + subject = X509Name.GetInstance(tObj, true); // CHOICE + break; + case 6: + publicKey = SubjectPublicKeyInfo.GetInstance(tObj, false); + break; + case 7: + issuerUID = DerBitString.GetInstance(tObj, false); + break; + case 8: + subjectUID = DerBitString.GetInstance(tObj, false); + break; + case 9: + extensions = X509Extensions.GetInstance(tObj, false); + break; + default: + throw new ArgumentException("unknown tag: " + tObj.TagNo, "seq"); + } + } + } + + public static CertTemplate GetInstance(object obj) + { + if (obj is CertTemplate) + return (CertTemplate)obj; + + if (obj != null) + return new CertTemplate(Asn1Sequence.GetInstance(obj)); + + return null; + } + + public virtual int Version + { + get { return version.IntValueExact; } + } + + public virtual DerInteger SerialNumber + { + get { return serialNumber; } + } + + public virtual AlgorithmIdentifier SigningAlg + { + get { return signingAlg; } + } + + public virtual X509Name Issuer + { + get { return issuer; } + } + + public virtual OptionalValidity Validity + { + get { return validity; } + } + + public virtual X509Name Subject + { + get { return subject; } + } + + public virtual SubjectPublicKeyInfo PublicKey + { + get { return publicKey; } + } + + public virtual DerBitString IssuerUID + { + get { return issuerUID; } + } + + public virtual DerBitString SubjectUID + { + get { return subjectUID; } + } + + public virtual X509Extensions Extensions + { + get { return extensions; } + } + + /** + *
+         *  CertTemplate ::= SEQUENCE {
+         *      version      [0] Version               OPTIONAL,
+         *      serialNumber [1] INTEGER               OPTIONAL,
+         *      signingAlg   [2] AlgorithmIdentifier   OPTIONAL,
+         *      issuer       [3] Name                  OPTIONAL,
+         *      validity     [4] OptionalValidity      OPTIONAL,
+         *      subject      [5] Name                  OPTIONAL,
+         *      publicKey    [6] SubjectPublicKeyInfo  OPTIONAL,
+         *      issuerUID    [7] UniqueIdentifier      OPTIONAL,
+         *      subjectUID   [8] UniqueIdentifier      OPTIONAL,
+         *      extensions   [9] Extensions            OPTIONAL }
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return seq; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertTemplate.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertTemplate.cs.meta new file mode 100644 index 000000000..a151e1297 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertTemplate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a82a7af9b79d84b4fa7520bc051a97b3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertTemplateBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertTemplateBuilder.cs new file mode 100644 index 000000000..9f6414656 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertTemplateBuilder.cs @@ -0,0 +1,129 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public class CertTemplateBuilder + { + private DerInteger version; + private DerInteger serialNumber; + private AlgorithmIdentifier signingAlg; + private X509Name issuer; + private OptionalValidity validity; + private X509Name subject; + private SubjectPublicKeyInfo publicKey; + private DerBitString issuerUID; + private DerBitString subjectUID; + private X509Extensions extensions; + + /** Sets the X.509 version. Note: for X509v3, use 2 here. */ + public virtual CertTemplateBuilder SetVersion(int ver) + { + version = new DerInteger(ver); + return this; + } + + public virtual CertTemplateBuilder SetSerialNumber(DerInteger ser) + { + serialNumber = ser; + return this; + } + + public virtual CertTemplateBuilder SetSigningAlg(AlgorithmIdentifier aid) + { + signingAlg = aid; + return this; + } + + public virtual CertTemplateBuilder SetIssuer(X509Name name) + { + issuer = name; + return this; + } + + public virtual CertTemplateBuilder SetValidity(OptionalValidity v) + { + validity = v; + return this; + } + + public virtual CertTemplateBuilder SetSubject(X509Name name) + { + subject = name; + return this; + } + + public virtual CertTemplateBuilder SetPublicKey(SubjectPublicKeyInfo spki) + { + publicKey = spki; + return this; + } + + /** Sets the issuer unique ID (deprecated in X.509v3) */ + public virtual CertTemplateBuilder SetIssuerUID(DerBitString uid) + { + issuerUID = uid; + return this; + } + + /** Sets the subject unique ID (deprecated in X.509v3) */ + public virtual CertTemplateBuilder SetSubjectUID(DerBitString uid) + { + subjectUID = uid; + return this; + } + + public virtual CertTemplateBuilder SetExtensions(X509Extensions extens) + { + extensions = extens; + return this; + } + + /** + *
+         *  CertTemplate ::= SEQUENCE {
+         *      version      [0] Version               OPTIONAL,
+         *      serialNumber [1] INTEGER               OPTIONAL,
+         *      signingAlg   [2] AlgorithmIdentifier   OPTIONAL,
+         *      issuer       [3] Name                  OPTIONAL,
+         *      validity     [4] OptionalValidity      OPTIONAL,
+         *      subject      [5] Name                  OPTIONAL,
+         *      publicKey    [6] SubjectPublicKeyInfo  OPTIONAL,
+         *      issuerUID    [7] UniqueIdentifier      OPTIONAL,
+         *      subjectUID   [8] UniqueIdentifier      OPTIONAL,
+         *      extensions   [9] Extensions            OPTIONAL }
+         * 
+ * @return a basic ASN.1 object representation. + */ + public virtual CertTemplate Build() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + AddOptional(v, 0, false, version); + AddOptional(v, 1, false, serialNumber); + AddOptional(v, 2, false, signingAlg); + AddOptional(v, 3, true, issuer); // CHOICE + AddOptional(v, 4, false, validity); + AddOptional(v, 5, true, subject); // CHOICE + AddOptional(v, 6, false, publicKey); + AddOptional(v, 7, false, issuerUID); + AddOptional(v, 8, false, subjectUID); + AddOptional(v, 9, false, extensions); + + return CertTemplate.GetInstance(new DerSequence(v)); + } + + private void AddOptional(Asn1EncodableVector v, int tagNo, bool isExplicit, Asn1Encodable obj) + { + if (obj != null) + { + v.Add(new DerTaggedObject(isExplicit, tagNo, obj)); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertTemplateBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertTemplateBuilder.cs.meta new file mode 100644 index 000000000..bf97106c6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CertTemplateBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4bf113698405148429bc8b161fb67386 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/Controls.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/Controls.cs new file mode 100644 index 000000000..eb8e6ac40 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/Controls.cs @@ -0,0 +1,59 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public class Controls + : Asn1Encodable + { + private readonly Asn1Sequence content; + + private Controls(Asn1Sequence seq) + { + content = seq; + } + + public static Controls GetInstance(object obj) + { + if (obj is Controls) + return (Controls)obj; + + if (obj is Asn1Sequence) + return new Controls((Asn1Sequence)obj); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public Controls(params AttributeTypeAndValue[] atvs) + { + content = new DerSequence(atvs); + } + + public virtual AttributeTypeAndValue[] ToAttributeTypeAndValueArray() + { + AttributeTypeAndValue[] result = new AttributeTypeAndValue[content.Count]; + for (int i = 0; i != result.Length; ++i) + { + result[i] = AttributeTypeAndValue.GetInstance(content[i]); + } + return result; + } + + /** + *
+         * Controls  ::= SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return content; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/Controls.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/Controls.cs.meta new file mode 100644 index 000000000..fe1cb5a65 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/Controls.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5127d8b9ccfe5f142a48aa88de23eda0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CrmfObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CrmfObjectIdentifiers.cs new file mode 100644 index 000000000..603d5a1a6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CrmfObjectIdentifiers.cs @@ -0,0 +1,27 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public abstract class CrmfObjectIdentifiers + { + public static readonly DerObjectIdentifier id_pkix = new DerObjectIdentifier("1.3.6.1.5.5.7"); + + // arc for Internet X.509 PKI protocols and their components + + public static readonly DerObjectIdentifier id_pkip = id_pkix.Branch("5"); + + public static readonly DerObjectIdentifier id_regCtrl = id_pkip.Branch("1"); + public static readonly DerObjectIdentifier id_regCtrl_regToken = id_regCtrl.Branch("1"); + public static readonly DerObjectIdentifier id_regCtrl_authenticator = id_regCtrl.Branch("2"); + public static readonly DerObjectIdentifier id_regCtrl_pkiPublicationInfo = id_regCtrl.Branch("3"); + public static readonly DerObjectIdentifier id_regCtrl_pkiArchiveOptions = id_regCtrl.Branch("4"); + + public static readonly DerObjectIdentifier id_ct_encKeyWithID = new DerObjectIdentifier(PkcsObjectIdentifiers.IdCT + ".21"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CrmfObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CrmfObjectIdentifiers.cs.meta new file mode 100644 index 000000000..d54f63311 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/CrmfObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 56f2b5350cd59b64e9acf4ebddec88d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/EncKeyWithID.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/EncKeyWithID.cs new file mode 100644 index 000000000..bf774b1ef --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/EncKeyWithID.cs @@ -0,0 +1,107 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public class EncKeyWithID + : Asn1Encodable + { + private readonly PrivateKeyInfo privKeyInfo; + private readonly Asn1Encodable identifier; + + public static EncKeyWithID GetInstance(object obj) + { + if (obj is EncKeyWithID) + return (EncKeyWithID)obj; + + if (obj != null) + return new EncKeyWithID(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private EncKeyWithID(Asn1Sequence seq) + { + this.privKeyInfo = PrivateKeyInfo.GetInstance(seq[0]); + + if (seq.Count > 1) + { + if (!(seq[1] is DerUtf8String)) + { + this.identifier = GeneralName.GetInstance(seq[1]); + } + else + { + this.identifier = (Asn1Encodable)seq[1]; + } + } + else + { + this.identifier = null; + } + } + + public EncKeyWithID(PrivateKeyInfo privKeyInfo) + { + this.privKeyInfo = privKeyInfo; + this.identifier = null; + } + + public EncKeyWithID(PrivateKeyInfo privKeyInfo, DerUtf8String str) + { + this.privKeyInfo = privKeyInfo; + this.identifier = str; + } + + public EncKeyWithID(PrivateKeyInfo privKeyInfo, GeneralName generalName) + { + this.privKeyInfo = privKeyInfo; + this.identifier = generalName; + } + + public virtual PrivateKeyInfo PrivateKey + { + get { return privKeyInfo; } + } + + public virtual bool HasIdentifier + { + get { return identifier != null; } + } + + public virtual bool IsIdentifierUtf8String + { + get { return identifier is DerUtf8String; } + } + + public virtual Asn1Encodable Identifier + { + get { return identifier; } + } + + /** + *
+         * EncKeyWithID ::= SEQUENCE {
+         *      privateKey           PrivateKeyInfo,
+         *      identifier CHOICE {
+         *         string               UTF8String,
+         *         generalName          GeneralName
+         *     } OPTIONAL
+         * }
+         * 
+ * @return + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(privKeyInfo); + v.AddOptional(identifier); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/EncKeyWithID.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/EncKeyWithID.cs.meta new file mode 100644 index 000000000..938a172d8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/EncKeyWithID.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3d7af5a56b569c4b8bc5a711a1196ab +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/EncryptedKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/EncryptedKey.cs new file mode 100644 index 000000000..56ee5d299 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/EncryptedKey.cs @@ -0,0 +1,66 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public class EncryptedKey + : Asn1Encodable, IAsn1Choice + { + public static EncryptedKey GetInstance(object obj) + { + if (obj is EncryptedKey encryptedKey) + return encryptedKey; + + if (obj is Asn1TaggedObject taggedObject) + return new EncryptedKey(EnvelopedData.GetInstance(taggedObject, false)); + + return new EncryptedKey(EncryptedValue.GetInstance(obj)); + } + + private readonly EnvelopedData m_envelopedData; + private readonly EncryptedValue m_encryptedValue; + + public EncryptedKey(EnvelopedData envelopedData) + { + m_envelopedData = envelopedData; + } + + public EncryptedKey(EncryptedValue encryptedValue) + { + m_encryptedValue = encryptedValue; + } + + public virtual bool IsEncryptedValue => m_encryptedValue != null; + + public virtual Asn1Encodable Value + { + get + { + if (m_encryptedValue != null) + return m_encryptedValue; + + return m_envelopedData; + } + } + + /** + *
+         *    EncryptedKey ::= CHOICE {
+         *        encryptedValue        EncryptedValue, -- deprecated
+         *        envelopedData     [0] EnvelopedData }
+         *        -- The encrypted private key MUST be placed in the envelopedData
+         *        -- encryptedContentInfo encryptedContent OCTET STRING.
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + if (m_encryptedValue != null) + return m_encryptedValue.ToAsn1Object(); + + return new DerTaggedObject(false, 0, m_envelopedData); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/EncryptedKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/EncryptedKey.cs.meta new file mode 100644 index 000000000..b8cd1d3f2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/EncryptedKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5dc2937d0f9acaa4aa2371076521984b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/EncryptedValue.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/EncryptedValue.cs new file mode 100644 index 000000000..155542e9f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/EncryptedValue.cs @@ -0,0 +1,121 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public class EncryptedValue + : Asn1Encodable + { + public static EncryptedValue GetInstance(object obj) + { + if (obj is EncryptedValue encryptedValue) + return encryptedValue; + + if (obj != null) + return new EncryptedValue(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly AlgorithmIdentifier m_intendedAlg; + private readonly AlgorithmIdentifier m_symmAlg; + private readonly DerBitString m_encSymmKey; + private readonly AlgorithmIdentifier m_keyAlg; + private readonly Asn1OctetString m_valueHint; + private readonly DerBitString m_encValue; + + private EncryptedValue(Asn1Sequence seq) + { + int index = 0; + while (seq[index] is Asn1TaggedObject tObj) + { + switch (tObj.TagNo) + { + case 0: + m_intendedAlg = AlgorithmIdentifier.GetInstance(tObj, false); + break; + case 1: + m_symmAlg = AlgorithmIdentifier.GetInstance(tObj, false); + break; + case 2: + m_encSymmKey = DerBitString.GetInstance(tObj, false); + break; + case 3: + m_keyAlg = AlgorithmIdentifier.GetInstance(tObj, false); + break; + case 4: + m_valueHint = Asn1OctetString.GetInstance(tObj, false); + break; + } + ++index; + } + + m_encValue = DerBitString.GetInstance(seq[index]); + } + + public EncryptedValue(AlgorithmIdentifier intendedAlg, AlgorithmIdentifier symmAlg, DerBitString encSymmKey, + AlgorithmIdentifier keyAlg, Asn1OctetString valueHint, DerBitString encValue) + { + if (encValue == null) + throw new ArgumentNullException(nameof(encValue)); + + m_intendedAlg = intendedAlg; + m_symmAlg = symmAlg; + m_encSymmKey = encSymmKey; + m_keyAlg = keyAlg; + m_valueHint = valueHint; + m_encValue = encValue; + } + + public virtual AlgorithmIdentifier IntendedAlg => m_intendedAlg; + + public virtual AlgorithmIdentifier SymmAlg => m_symmAlg; + + public virtual DerBitString EncSymmKey => m_encSymmKey; + + public virtual AlgorithmIdentifier KeyAlg => m_keyAlg; + + public virtual Asn1OctetString ValueHint => m_valueHint; + + public virtual DerBitString EncValue => m_encValue; + + /** + *
+         * (IMPLICIT TAGS)
+         * EncryptedValue ::= SEQUENCE {
+         *                     intendedAlg   [0] AlgorithmIdentifier  OPTIONAL,
+         *                     -- the intended algorithm for which the value will be used
+         *                     symmAlg       [1] AlgorithmIdentifier  OPTIONAL,
+         *                     -- the symmetric algorithm used to encrypt the value
+         *                     encSymmKey    [2] BIT STRING           OPTIONAL,
+         *                     -- the (encrypted) symmetric key used to encrypt the value
+         *                     keyAlg        [3] AlgorithmIdentifier  OPTIONAL,
+         *                     -- algorithm used to encrypt the symmetric key
+         *                     valueHint     [4] OCTET STRING         OPTIONAL,
+         *                     -- a brief description or identifier of the encValue content
+         *                     -- (may be meaningful only to the sending entity, and used only
+         *                     -- if EncryptedValue might be re-examined by the sending entity
+         *                     -- in the future)
+         *                     encValue       BIT STRING }
+         *                     -- the encrypted value itself
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptionalTagged(false, 0, m_intendedAlg); + v.AddOptionalTagged(false, 1, m_symmAlg); + v.AddOptionalTagged(false, 2, m_encSymmKey); + v.AddOptionalTagged(false, 3, m_keyAlg); + v.AddOptionalTagged(false, 4, m_valueHint); + v.Add(m_encValue); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/EncryptedValue.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/EncryptedValue.cs.meta new file mode 100644 index 000000000..40356f9dd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/EncryptedValue.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 368e47d04d2ed734fb60cd6268921682 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/OptionalValidity.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/OptionalValidity.cs new file mode 100644 index 000000000..360399859 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/OptionalValidity.cs @@ -0,0 +1,72 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public class OptionalValidity + : Asn1Encodable + { + private readonly Time notBefore; + private readonly Time notAfter; + + private OptionalValidity(Asn1Sequence seq) + { + foreach (Asn1TaggedObject tObj in seq) + { + if (tObj.TagNo == 0) + { + notBefore = Time.GetInstance(tObj, true); + } + else + { + notAfter = Time.GetInstance(tObj, true); + } + } + } + + public static OptionalValidity GetInstance(object obj) + { + if (obj == null || obj is OptionalValidity) + return (OptionalValidity)obj; + + return new OptionalValidity(Asn1Sequence.GetInstance(obj)); + } + + public OptionalValidity(Time notBefore, Time notAfter) + { + this.notBefore = notBefore; + this.notAfter = notAfter; + } + + public virtual Time NotBefore + { + get { return notBefore; } + } + + public virtual Time NotAfter + { + get { return notAfter; } + } + + /** + *
+         * OptionalValidity ::= SEQUENCE {
+         *                        notBefore  [0] Time OPTIONAL,
+         *                        notAfter   [1] Time OPTIONAL } --at least one MUST be present
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptionalTagged(true, 0, notBefore); + v.AddOptionalTagged(true, 1, notAfter); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/OptionalValidity.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/OptionalValidity.cs.meta new file mode 100644 index 000000000..360a45543 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/OptionalValidity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6de9f44c885f284d97ff26f588e3437 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PKIArchiveOptions.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PKIArchiveOptions.cs new file mode 100644 index 000000000..5415b8af8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PKIArchiveOptions.cs @@ -0,0 +1,111 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public class PkiArchiveOptions + : Asn1Encodable, IAsn1Choice + { + public const int encryptedPrivKey = 0; + public const int keyGenParameters = 1; + public const int archiveRemGenPrivKey = 2; + + private readonly Asn1Encodable value; + + public static PkiArchiveOptions GetInstance(object obj) + { + if (obj is PkiArchiveOptions) + return (PkiArchiveOptions)obj; + + if (obj is Asn1TaggedObject) + return new PkiArchiveOptions((Asn1TaggedObject)obj); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + private PkiArchiveOptions(Asn1TaggedObject tagged) + { + switch (tagged.TagNo) + { + case encryptedPrivKey: + value = EncryptedKey.GetInstance(tagged.GetObject()); + break; + case keyGenParameters: + value = Asn1OctetString.GetInstance(tagged, false); + break; + case archiveRemGenPrivKey: + value = DerBoolean.GetInstance(tagged, false); + break; + default: + throw new ArgumentException("unknown tag number: " + tagged.TagNo, "tagged"); + } + } + + public PkiArchiveOptions(EncryptedKey encKey) + { + this.value = encKey; + } + + public PkiArchiveOptions(Asn1OctetString keyGenParameters) + { + this.value = keyGenParameters; + } + + public PkiArchiveOptions(bool archiveRemGenPrivKey) + { + this.value = DerBoolean.GetInstance(archiveRemGenPrivKey); + } + + public virtual int Type + { + get + { + if (value is EncryptedKey) + return encryptedPrivKey; + + if (value is Asn1OctetString) + return keyGenParameters; + + return archiveRemGenPrivKey; + } + } + + public virtual Asn1Encodable Value + { + get { return value; } + } + + /** + *
+         *  PkiArchiveOptions ::= CHOICE {
+         *      encryptedPrivKey     [0] EncryptedKey,
+         *      -- the actual value of the private key
+         *      keyGenParameters     [1] KeyGenParameters,
+         *      -- parameters which allow the private key to be re-generated
+         *      archiveRemGenPrivKey [2] BOOLEAN }
+         *      -- set to TRUE if sender wishes receiver to archive the private
+         *      -- key of a key pair that the receiver generates in response to
+         *      -- this request; set to FALSE if no archival is desired.
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + if (value is EncryptedKey) + { + return new DerTaggedObject(true, encryptedPrivKey, value); // choice + } + + if (value is Asn1OctetString) + { + return new DerTaggedObject(false, keyGenParameters, value); + } + + return new DerTaggedObject(false, archiveRemGenPrivKey, value); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PKIArchiveOptions.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PKIArchiveOptions.cs.meta new file mode 100644 index 000000000..335884aa4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PKIArchiveOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eaa126763652fd9439d5bf4d5b5462b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PKIPublicationInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PKIPublicationInfo.cs new file mode 100644 index 000000000..4bab73b3b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PKIPublicationInfo.cs @@ -0,0 +1,116 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + /** + *
+     * PKIPublicationInfo ::= SEQUENCE {
+     *                  action     INTEGER {
+     *                                 dontPublish (0),
+     *                                 pleasePublish (1) },
+     *                  pubInfos  SEQUENCE SIZE (1..MAX) OF SinglePubInfo OPTIONAL }
+     * -- pubInfos MUST NOT be present if action is "dontPublish"
+     * -- (if action is "pleasePublish" and pubInfos is omitted,
+     * -- "dontCare" is assumed)
+     * 
+ */ + public class PkiPublicationInfo + : Asn1Encodable + { + public static readonly DerInteger DontPublish = new DerInteger(0); + public static readonly DerInteger PleasePublish = new DerInteger(1); + + public static PkiPublicationInfo GetInstance(object obj) + { + if (obj is PkiPublicationInfo pkiPublicationInfo) + return pkiPublicationInfo; + + if (obj != null) + return new PkiPublicationInfo(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private readonly DerInteger m_action; + private readonly Asn1Sequence m_pubInfos; + + private PkiPublicationInfo(Asn1Sequence seq) + { + m_action = DerInteger.GetInstance(seq[0]); + if (seq.Count > 1) + { + m_pubInfos = Asn1Sequence.GetInstance(seq[1]); + } + } + + public PkiPublicationInfo(BigInteger action) + : this(new DerInteger(action)) + { + } + + public PkiPublicationInfo(DerInteger action) + { + m_action = action; + } + + /** + * Constructor with a single pubInfo, assumes pleasePublish as the action. + * + * @param pubInfo the pubInfo to be published (can be null if don't care is required). + */ + public PkiPublicationInfo(SinglePubInfo pubInfo) + : this(pubInfo != null ? new SinglePubInfo[1]{ pubInfo } : null) + { + } + + /** + * Constructor with multiple pubInfo, assumes pleasePublish as the action. + * + * @param pubInfos the pubInfos to be published (can be null if don't care is required). + */ + public PkiPublicationInfo(SinglePubInfo[] pubInfos) + { + m_action = PleasePublish; + + if (pubInfos != null) + { + m_pubInfos = new DerSequence(pubInfos); + } + } + + public virtual DerInteger Action => m_action; + + public virtual SinglePubInfo[] GetPubInfos() + { + if (m_pubInfos == null) + return null; + + return m_pubInfos.MapElements(SinglePubInfo.GetInstance); + } + + /** + *
+         * PkiPublicationInfo ::= SEQUENCE {
+         *                  action     INTEGER {
+         *                                 dontPublish (0),
+         *                                 pleasePublish (1) },
+         *                  pubInfos  SEQUENCE SIZE (1..MAX) OF SinglePubInfo OPTIONAL }
+         * -- pubInfos MUST NOT be present if action is "dontPublish"
+         * -- (if action is "pleasePublish" and pubInfos is omitted,
+         * -- "dontCare" is assumed)
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + if (m_pubInfos == null) + return new DerSequence(m_action); + + return new DerSequence(m_action, m_pubInfos); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PKIPublicationInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PKIPublicationInfo.cs.meta new file mode 100644 index 000000000..84c2b54aa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PKIPublicationInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de4b7fe794a82644eadd8807a60cd8f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PKMacValue.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PKMacValue.cs new file mode 100644 index 000000000..294888846 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PKMacValue.cs @@ -0,0 +1,94 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + /** + * Password-based MAC value for use with POPOSigningKeyInput. + */ + public class PKMacValue + : Asn1Encodable + { + private readonly AlgorithmIdentifier algID; + private readonly DerBitString macValue; + + private PKMacValue(Asn1Sequence seq) + { + this.algID = AlgorithmIdentifier.GetInstance(seq[0]); + this.macValue = DerBitString.GetInstance(seq[1]); + } + + public static PKMacValue GetInstance(object obj) + { + if (obj is PKMacValue) + return (PKMacValue)obj; + + if (obj is Asn1Sequence) + return new PKMacValue((Asn1Sequence)obj); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public static PKMacValue GetInstance(Asn1TaggedObject obj, bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit)); + } + + /** + * Creates a new PKMACValue. + * @param params parameters for password-based MAC + * @param value MAC of the DER-encoded SubjectPublicKeyInfo + */ + public PKMacValue( + PbmParameter pbmParams, + DerBitString macValue) + : this(new AlgorithmIdentifier(CmpObjectIdentifiers.passwordBasedMac, pbmParams), macValue) + { + } + + /** + * Creates a new PKMACValue. + * @param aid CMPObjectIdentifiers.passwordBasedMAC, with PBMParameter + * @param value MAC of the DER-encoded SubjectPublicKeyInfo + */ + public PKMacValue( + AlgorithmIdentifier algID, + DerBitString macValue) + { + this.algID = algID; + this.macValue = macValue; + } + + public virtual AlgorithmIdentifier AlgID + { + get { return algID; } + } + + public virtual DerBitString MacValue + { + get { return macValue; } + } + + /** + *
+         * PKMACValue ::= SEQUENCE {
+         *      algId  AlgorithmIdentifier,
+         *      -- algorithm value shall be PasswordBasedMac 1.2.840.113533.7.66.13
+         *      -- parameter value is PBMParameter
+         *      value  BIT STRING }
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(algID, macValue); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PKMacValue.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PKMacValue.cs.meta new file mode 100644 index 000000000..72421417d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PKMacValue.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d5c2d9623df92ba49b7e5fa1a8da0847 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PopoPrivKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PopoPrivKey.cs new file mode 100644 index 000000000..dc6074945 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PopoPrivKey.cs @@ -0,0 +1,88 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public class PopoPrivKey + : Asn1Encodable, IAsn1Choice + { + public const int thisMessage = 0; + public const int subsequentMessage = 1; + public const int dhMAC = 2; + public const int agreeMAC = 3; + public const int encryptedKey = 4; + + private readonly int tagNo; + private readonly Asn1Encodable obj; + + private PopoPrivKey(Asn1TaggedObject obj) + { + this.tagNo = obj.TagNo; + + switch (tagNo) + { + case thisMessage: + this.obj = DerBitString.GetInstance(obj, false); + break; + case subsequentMessage: + this.obj = SubsequentMessage.ValueOf(DerInteger.GetInstance(obj, false).IntValueExact); + break; + case dhMAC: + this.obj = DerBitString.GetInstance(obj, false); + break; + case agreeMAC: + this.obj = PKMacValue.GetInstance(obj, false); + break; + case encryptedKey: + this.obj = EnvelopedData.GetInstance(obj, false); + break; + default: + throw new ArgumentException("unknown tag in PopoPrivKey", "obj"); + } + } + + public static PopoPrivKey GetInstance(Asn1TaggedObject tagged, bool isExplicit) + { + return new PopoPrivKey(Asn1TaggedObject.GetInstance(tagged, true)); + } + + public PopoPrivKey(SubsequentMessage msg) + { + this.tagNo = subsequentMessage; + this.obj = msg; + } + + public virtual int Type + { + get { return tagNo; } + } + + public virtual Asn1Encodable Value + { + get { return obj; } + } + + /** + *
+         * PopoPrivKey ::= CHOICE {
+         *        thisMessage       [0] BIT STRING,         -- Deprecated
+         *         -- possession is proven in this message (which contains the private
+         *         -- key itself (encrypted for the CA))
+         *        subsequentMessage [1] SubsequentMessage,
+         *         -- possession will be proven in a subsequent message
+         *        dhMAC             [2] BIT STRING,         -- Deprecated
+         *        agreeMAC          [3] PKMACValue,
+         *        encryptedKey      [4] EnvelopedData }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerTaggedObject(false, tagNo, obj); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PopoPrivKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PopoPrivKey.cs.meta new file mode 100644 index 000000000..53ec01300 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PopoPrivKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d95dc5442df1cd644ab2f400b01d5596 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PopoSigningKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PopoSigningKey.cs new file mode 100644 index 000000000..194bb292f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PopoSigningKey.cs @@ -0,0 +1,114 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public class PopoSigningKey + : Asn1Encodable + { + private readonly PopoSigningKeyInput poposkInput; + private readonly AlgorithmIdentifier algorithmIdentifier; + private readonly DerBitString signature; + + private PopoSigningKey(Asn1Sequence seq) + { + int index = 0; + + if (seq[index] is Asn1TaggedObject) + { + Asn1TaggedObject tagObj + = (Asn1TaggedObject) seq[index++]; + if (tagObj.TagNo != 0) + { + throw new ArgumentException( "Unknown PopoSigningKeyInput tag: " + tagObj.TagNo, "seq"); + } + poposkInput = PopoSigningKeyInput.GetInstance(tagObj.GetObject()); + } + algorithmIdentifier = AlgorithmIdentifier.GetInstance(seq[index++]); + signature = DerBitString.GetInstance(seq[index]); + } + + public static PopoSigningKey GetInstance(object obj) + { + if (obj is PopoSigningKey) + return (PopoSigningKey)obj; + + if (obj is Asn1Sequence) + return new PopoSigningKey((Asn1Sequence)obj); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public static PopoSigningKey GetInstance(Asn1TaggedObject obj, bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit)); + } + + /** + * Creates a new Proof of Possession object for a signing key. + * @param poposkIn the PopoSigningKeyInput structure, or null if the + * CertTemplate includes both subject and publicKey values. + * @param aid the AlgorithmIdentifier used to sign the proof of possession. + * @param signature a signature over the DER-encoded value of poposkIn, + * or the DER-encoded value of certReq if poposkIn is null. + */ + public PopoSigningKey( + PopoSigningKeyInput poposkIn, + AlgorithmIdentifier aid, + DerBitString signature) + { + this.poposkInput = poposkIn; + this.algorithmIdentifier = aid; + this.signature = signature; + } + + public virtual PopoSigningKeyInput PoposkInput + { + get { return poposkInput; } + } + + public virtual AlgorithmIdentifier AlgorithmIdentifier + { + get { return algorithmIdentifier; } + } + + public virtual DerBitString Signature + { + get { return signature; } + } + + /** + *
+         * PopoSigningKey ::= SEQUENCE {
+         *                      poposkInput           [0] PopoSigningKeyInput OPTIONAL,
+         *                      algorithmIdentifier   AlgorithmIdentifier,
+         *                      signature             BIT STRING }
+         *  -- The signature (using "algorithmIdentifier") is on the
+         *  -- DER-encoded value of poposkInput.  NOTE: If the CertReqMsg
+         *  -- certReq CertTemplate contains the subject and publicKey values,
+         *  -- then poposkInput MUST be omitted and the signature MUST be
+         *  -- computed on the DER-encoded value of CertReqMsg certReq.  If
+         *  -- the CertReqMsg certReq CertTemplate does not contain the public
+         *  -- key and subject values, then poposkInput MUST be present and
+         *  -- MUST be signed.  This strategy ensures that the public key is
+         *  -- not present in both the poposkInput and CertReqMsg certReq
+         *  -- CertTemplate fields.
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptionalTagged(false, 0, poposkInput); + v.Add(algorithmIdentifier); + v.Add(signature); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PopoSigningKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PopoSigningKey.cs.meta new file mode 100644 index 000000000..3f372b545 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PopoSigningKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ec8a4d88bfe18d741b1a1b7358aa692e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PopoSigningKeyInput.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PopoSigningKeyInput.cs new file mode 100644 index 000000000..0d9c47551 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PopoSigningKeyInput.cs @@ -0,0 +1,120 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public class PopoSigningKeyInput + : Asn1Encodable + { + private readonly GeneralName sender; + private readonly PKMacValue publicKeyMac; + private readonly SubjectPublicKeyInfo publicKey; + + private PopoSigningKeyInput(Asn1Sequence seq) + { + Asn1Encodable authInfo = (Asn1Encodable)seq[0]; + + if (authInfo is Asn1TaggedObject) + { + Asn1TaggedObject tagObj = (Asn1TaggedObject)authInfo; + if (tagObj.TagNo != 0) + { + throw new ArgumentException("Unknown authInfo tag: " + tagObj.TagNo, "seq"); + } + sender = GeneralName.GetInstance(tagObj.GetObject()); + } + else + { + publicKeyMac = PKMacValue.GetInstance(authInfo); + } + + publicKey = SubjectPublicKeyInfo.GetInstance(seq[1]); + } + + public static PopoSigningKeyInput GetInstance(object obj) + { + if (obj is PopoSigningKeyInput) + return (PopoSigningKeyInput)obj; + + if (obj is Asn1Sequence) + return new PopoSigningKeyInput((Asn1Sequence)obj); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** Creates a new PopoSigningKeyInput with sender name as authInfo. */ + public PopoSigningKeyInput( + GeneralName sender, + SubjectPublicKeyInfo spki) + { + this.sender = sender; + this.publicKey = spki; + } + + /** Creates a new PopoSigningKeyInput using password-based MAC. */ + public PopoSigningKeyInput( + PKMacValue pkmac, + SubjectPublicKeyInfo spki) + { + this.publicKeyMac = pkmac; + this.publicKey = spki; + } + + /** Returns the sender field, or null if authInfo is publicKeyMac */ + public virtual GeneralName Sender + { + get { return sender; } + } + + /** Returns the publicKeyMac field, or null if authInfo is sender */ + public virtual PKMacValue PublicKeyMac + { + get { return publicKeyMac; } + } + + public virtual SubjectPublicKeyInfo PublicKey + { + get { return publicKey; } + } + + /** + *
+         * PopoSigningKeyInput ::= SEQUENCE {
+         *        authInfo             CHOICE {
+         *                                 sender              [0] GeneralName,
+         *                                 -- used only if an authenticated identity has been
+         *                                 -- established for the sender (e.g., a DN from a
+         *                                 -- previously-issued and currently-valid certificate
+         *                                 publicKeyMac        PKMacValue },
+         *                                 -- used if no authenticated GeneralName currently exists for
+         *                                 -- the sender; publicKeyMac contains a password-based MAC
+         *                                 -- on the DER-encoded value of publicKey
+         *        publicKey           SubjectPublicKeyInfo }  -- from CertTemplate
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + if (sender != null) + { + v.Add(new DerTaggedObject(false, 0, sender)); + } + else + { + v.Add(publicKeyMac); + } + + v.Add(publicKey); + + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PopoSigningKeyInput.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PopoSigningKeyInput.cs.meta new file mode 100644 index 000000000..fe43e4b76 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/PopoSigningKeyInput.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 905c188ed11f8c7409e765172165a1f5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/ProofOfPossession.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/ProofOfPossession.cs new file mode 100644 index 000000000..431c60798 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/ProofOfPossession.cs @@ -0,0 +1,104 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public class ProofOfPossession + : Asn1Encodable, IAsn1Choice + { + public const int TYPE_RA_VERIFIED = 0; + public const int TYPE_SIGNING_KEY = 1; + public const int TYPE_KEY_ENCIPHERMENT = 2; + public const int TYPE_KEY_AGREEMENT = 3; + + private readonly int tagNo; + private readonly Asn1Encodable obj; + + private ProofOfPossession(Asn1TaggedObject tagged) + { + tagNo = tagged.TagNo; + switch (tagNo) + { + case 0: + obj = DerNull.Instance; + break; + case 1: + obj = PopoSigningKey.GetInstance(tagged, false); + break; + case 2: + case 3: + obj = PopoPrivKey.GetInstance(tagged, false); + break; + default: + throw new ArgumentException("unknown tag: " + tagNo, "tagged"); + } + } + + public static ProofOfPossession GetInstance(object obj) + { + if (obj is ProofOfPossession) + return (ProofOfPossession)obj; + + if (obj is Asn1TaggedObject) + return new ProofOfPossession((Asn1TaggedObject)obj); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** Creates a ProofOfPossession with type raVerified. */ + public ProofOfPossession() + { + tagNo = TYPE_RA_VERIFIED; + obj = DerNull.Instance; + } + + /** Creates a ProofOfPossession for a signing key. */ + public ProofOfPossession(PopoSigningKey Poposk) + { + tagNo = TYPE_SIGNING_KEY; + obj = Poposk; + } + + /** + * Creates a ProofOfPossession for key encipherment or agreement. + * @param type one of TYPE_KEY_ENCIPHERMENT or TYPE_KEY_AGREEMENT + */ + public ProofOfPossession(int type, PopoPrivKey privkey) + { + tagNo = type; + obj = privkey; + } + + public virtual int Type + { + get { return tagNo; } + } + + public virtual Asn1Encodable Object + { + get { return obj; } + } + + /** + *
+         * ProofOfPossession ::= CHOICE {
+         *                           raVerified        [0] NULL,
+         *                           -- used if the RA has already verified that the requester is in
+         *                           -- possession of the private key
+         *                           signature         [1] PopoSigningKey,
+         *                           keyEncipherment   [2] PopoPrivKey,
+         *                           keyAgreement      [3] PopoPrivKey }
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return new DerTaggedObject(false, tagNo, obj); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/ProofOfPossession.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/ProofOfPossession.cs.meta new file mode 100644 index 000000000..6da78ae55 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/ProofOfPossession.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eb50e05648077ff4a856c209154b84f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/SinglePubInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/SinglePubInfo.cs new file mode 100644 index 000000000..208539b0b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/SinglePubInfo.cs @@ -0,0 +1,63 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public class SinglePubInfo + : Asn1Encodable + { + private readonly DerInteger pubMethod; + private readonly GeneralName pubLocation; + + private SinglePubInfo(Asn1Sequence seq) + { + pubMethod = DerInteger.GetInstance(seq[0]); + + if (seq.Count == 2) + { + pubLocation = GeneralName.GetInstance(seq[1]); + } + } + + public static SinglePubInfo GetInstance(object obj) + { + if (obj is SinglePubInfo) + return (SinglePubInfo)obj; + + if (obj is Asn1Sequence) + return new SinglePubInfo((Asn1Sequence)obj); + + throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public virtual GeneralName PubLocation + { + get { return pubLocation; } + } + + /** + *
+         * SinglePubInfo ::= SEQUENCE {
+         *        pubMethod    INTEGER {
+         *           dontCare    (0),
+         *           x500        (1),
+         *           web         (2),
+         *           ldap        (3) },
+         *       pubLocation  GeneralName OPTIONAL }
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(pubMethod); + v.AddOptional(pubLocation); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/SinglePubInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/SinglePubInfo.cs.meta new file mode 100644 index 000000000..a99624258 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/SinglePubInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: da64e834caac97e47b6b3f30da84c27d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/SubsequentMessage.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/SubsequentMessage.cs new file mode 100644 index 000000000..7e8de58b2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/SubsequentMessage.cs @@ -0,0 +1,31 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf +{ + public class SubsequentMessage + : DerInteger + { + public static readonly SubsequentMessage encrCert = new SubsequentMessage(0); + public static readonly SubsequentMessage challengeResp = new SubsequentMessage(1); + + private SubsequentMessage(int value) + : base(value) + { + } + + public static SubsequentMessage ValueOf(int value) + { + if (value == 0) + return encrCert; + + if (value == 1) + return challengeResp; + + throw new ArgumentException("unknown value: " + value, "value"); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/SubsequentMessage.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/SubsequentMessage.cs.meta new file mode 100644 index 000000000..f403b582e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/crmf/SubsequentMessage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd09675ac9b89194b9672a085f5f546d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptlib.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptlib.meta new file mode 100644 index 000000000..707c88967 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptlib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b7e94c4f09946be448be208a562e1104 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptlib/CryptlibObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptlib/CryptlibObjectIdentifiers.cs new file mode 100644 index 000000000..41562711c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptlib/CryptlibObjectIdentifiers.cs @@ -0,0 +1,15 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cryptlib +{ + internal class CryptlibObjectIdentifiers + { + internal static readonly DerObjectIdentifier cryptlib = new DerObjectIdentifier("1.3.6.1.4.1.3029"); + + internal static readonly DerObjectIdentifier ecc = cryptlib.Branch("1.5"); + + internal static readonly DerObjectIdentifier curvey25519 = ecc.Branch("1"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptlib/CryptlibObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptlib/CryptlibObjectIdentifiers.cs.meta new file mode 100644 index 000000000..1c89bd0c8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptlib/CryptlibObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 856b811f51fd661418a85bce2a11f35a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro.meta new file mode 100644 index 000000000..0cbcb83a0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e3ca23ca4294d3b4b9a88be14d6cde49 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/CryptoProObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/CryptoProObjectIdentifiers.cs new file mode 100644 index 000000000..a4a0c4b56 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/CryptoProObjectIdentifiers.cs @@ -0,0 +1,61 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro +{ + public abstract class CryptoProObjectIdentifiers + { + // GOST Algorithms OBJECT IDENTIFIERS : + // { iso(1) member-body(2) ru(643) rans(2) cryptopro(2)} + public const string GostID = "1.2.643.2.2"; + + public static readonly DerObjectIdentifier GostR3411 = new DerObjectIdentifier(GostID + ".9"); + public static readonly DerObjectIdentifier GostR3411Hmac = new DerObjectIdentifier(GostID + ".10"); + + public static readonly DerObjectIdentifier GostR28147Gcfb = new DerObjectIdentifier(GostID + ".21"); + + public static readonly DerObjectIdentifier GostR28147Cbc = GostR28147Gcfb; + + public static readonly DerObjectIdentifier ID_Gost28147_89_CryptoPro_A_ParamSet = new DerObjectIdentifier(GostID + ".31.1"); + + public static readonly DerObjectIdentifier GostR3410x94 = new DerObjectIdentifier(GostID + ".20"); + public static readonly DerObjectIdentifier GostR3410x2001 = new DerObjectIdentifier(GostID + ".19"); + public static readonly DerObjectIdentifier GostR3411x94WithGostR3410x94 = new DerObjectIdentifier(GostID + ".4"); + public static readonly DerObjectIdentifier GostR3411x94WithGostR3410x2001 = new DerObjectIdentifier(GostID + ".3"); + + // { iso(1) member-body(2) ru(643) rans(2) cryptopro(2) hashes(30) } + public static readonly DerObjectIdentifier GostR3411x94CryptoProParamSet = new DerObjectIdentifier(GostID + ".30.1"); + + // { iso(1) member-body(2) ru(643) rans(2) cryptopro(2) signs(32) } + public static readonly DerObjectIdentifier GostR3410x94CryptoProA = new DerObjectIdentifier(GostID + ".32.2"); + public static readonly DerObjectIdentifier GostR3410x94CryptoProB = new DerObjectIdentifier(GostID + ".32.3"); + public static readonly DerObjectIdentifier GostR3410x94CryptoProC = new DerObjectIdentifier(GostID + ".32.4"); + public static readonly DerObjectIdentifier GostR3410x94CryptoProD = new DerObjectIdentifier(GostID + ".32.5"); + + // { iso(1) member-body(2) ru(643) rans(2) cryptopro(2) exchanges(33) } + public static readonly DerObjectIdentifier GostR3410x94CryptoProXchA = new DerObjectIdentifier(GostID + ".33.1"); + public static readonly DerObjectIdentifier GostR3410x94CryptoProXchB = new DerObjectIdentifier(GostID + ".33.2"); + public static readonly DerObjectIdentifier GostR3410x94CryptoProXchC = new DerObjectIdentifier(GostID + ".33.3"); + + //{ iso(1) member-body(2)ru(643) rans(2) cryptopro(2) ecc-signs(35) } + public static readonly DerObjectIdentifier GostR3410x2001CryptoProA = new DerObjectIdentifier(GostID + ".35.1"); + public static readonly DerObjectIdentifier GostR3410x2001CryptoProB = new DerObjectIdentifier(GostID + ".35.2"); + public static readonly DerObjectIdentifier GostR3410x2001CryptoProC = new DerObjectIdentifier(GostID + ".35.3"); + + // { iso(1) member-body(2) ru(643) rans(2) cryptopro(2) ecc-exchanges(36) } + public static readonly DerObjectIdentifier GostR3410x2001CryptoProXchA = new DerObjectIdentifier(GostID + ".36.0"); + public static readonly DerObjectIdentifier GostR3410x2001CryptoProXchB = new DerObjectIdentifier(GostID + ".36.1"); + + public static readonly DerObjectIdentifier GostElSgDH3410Default = new DerObjectIdentifier(GostID + ".36.0"); + public static readonly DerObjectIdentifier GostElSgDH3410x1 = new DerObjectIdentifier(GostID + ".36.1"); + + public static readonly DerObjectIdentifier GostR3410x2001CryptoProESDH = new DerObjectIdentifier(GostID + ".96"); + + public static readonly DerObjectIdentifier GostR3410x2001DH = new DerObjectIdentifier(GostID + ".98"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/CryptoProObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/CryptoProObjectIdentifiers.cs.meta new file mode 100644 index 000000000..df299af71 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/CryptoProObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be4c3eced0609684c9f9ffa5a4ddd1c5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/ECGOST3410NamedCurves.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/ECGOST3410NamedCurves.cs new file mode 100644 index 000000000..a5616bf1f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/ECGOST3410NamedCurves.cs @@ -0,0 +1,399 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Rosstandart; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro +{ + /// Elliptic curve registry for GOST 3410-2001 / 2012. + public static class ECGost3410NamedCurves + { + private static X9ECPoint ConfigureBasepoint(ECCurve curve, BigInteger x, BigInteger y) + { + ECPoint G = curve.CreatePoint(x, y); + WNafUtilities.ConfigureBasepoint(G); + return new X9ECPoint(G, false); + } + + private static ECCurve ConfigureCurve(ECCurve curve) + { + return curve; + } + + private static BigInteger FromHex(string hex) + { + return new BigInteger(1, Hex.DecodeStrict(hex)); + } + + internal class Holder_gostR3410_2001_CryptoPro_A + : X9ECParametersHolder + { + private Holder_gostR3410_2001_CryptoPro_A() {} + + internal static readonly X9ECParametersHolder Instance = new Holder_gostR3410_2001_CryptoPro_A(); + + protected override ECCurve CreateCurve() + { + BigInteger mod_p = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD97"); + BigInteger mod_q = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C611070995AD10045841B09B761B893"); + + return ConfigureCurve(new FpCurve( + mod_p, + FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD94"), + FromHex("A6"), + mod_q, BigInteger.One, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + BigInteger.One, + FromHex("8D91E471E0989CDA27DF505A453F2B7635294F2DDF23E3B122ACC99C9E9F1E14")); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class Holder_gostR3410_2001_CryptoPro_B + : X9ECParametersHolder + { + private Holder_gostR3410_2001_CryptoPro_B() {} + + internal static readonly X9ECParametersHolder Instance = new Holder_gostR3410_2001_CryptoPro_B(); + + protected override ECCurve CreateCurve() + { + BigInteger mod_p = FromHex("8000000000000000000000000000000000000000000000000000000000000C99"); + BigInteger mod_q = FromHex("800000000000000000000000000000015F700CFFF1A624E5E497161BCC8A198F"); + + return ConfigureCurve(new FpCurve( + mod_p, + FromHex("8000000000000000000000000000000000000000000000000000000000000C96"), + FromHex("3E1AF419A269A5F866A7D3C25C3DF80AE979259373FF2B182F49D4CE7E1BBC8B"), + mod_q, BigInteger.One, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + BigInteger.One, + FromHex("3FA8124359F96680B83D1C3EB2C070E5C545C9858D03ECFB744BF8D717717EFC")); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class Holder_gostR3410_2001_CryptoPro_C + : X9ECParametersHolder + { + private Holder_gostR3410_2001_CryptoPro_C() {} + + internal static readonly X9ECParametersHolder Instance = new Holder_gostR3410_2001_CryptoPro_C(); + + protected override ECCurve CreateCurve() + { + BigInteger mod_p = FromHex("9B9F605F5A858107AB1EC85E6B41C8AACF846E86789051D37998F7B9022D759B"); + BigInteger mod_q = FromHex("9B9F605F5A858107AB1EC85E6B41C8AA582CA3511EDDFB74F02F3A6598980BB9"); + + return ConfigureCurve(new FpCurve( + mod_p, + FromHex("9B9F605F5A858107AB1EC85E6B41C8AACF846E86789051D37998F7B9022D7598"), + FromHex("805A"), + mod_q, BigInteger.One, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + BigInteger.Zero, + FromHex("41ECE55743711A8C3CBF3783CD08C0EE4D4DC440D4641A8F366E550DFDB3BB67")); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class Holder_gostR3410_2001_CryptoPro_XchB + : X9ECParametersHolder + { + private Holder_gostR3410_2001_CryptoPro_XchB() {} + + internal static readonly X9ECParametersHolder Instance = new Holder_gostR3410_2001_CryptoPro_XchB(); + + protected override ECCurve CreateCurve() + { + BigInteger mod_p = FromHex("9B9F605F5A858107AB1EC85E6B41C8AACF846E86789051D37998F7B9022D759B"); + BigInteger mod_q = FromHex("9B9F605F5A858107AB1EC85E6B41C8AA582CA3511EDDFB74F02F3A6598980BB9"); + + return ConfigureCurve(new FpCurve( + mod_p, + FromHex("9B9F605F5A858107AB1EC85E6B41C8AACF846E86789051D37998F7B9022D7598"), + FromHex("805A"), + mod_q, BigInteger.One, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + BigInteger.Zero, + FromHex("41ECE55743711A8C3CBF3783CD08C0EE4D4DC440D4641A8F366E550DFDB3BB67")); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class Holder_id_tc26_gost_3410_12_256_paramSetA + : X9ECParametersHolder + { + private Holder_id_tc26_gost_3410_12_256_paramSetA() {} + + internal static readonly X9ECParametersHolder Instance = new Holder_id_tc26_gost_3410_12_256_paramSetA(); + + protected override ECCurve CreateCurve() + { + BigInteger mod_p = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD97"); + BigInteger mod_q = FromHex("400000000000000000000000000000000FD8CDDFC87B6635C115AF556C360C67"); + + return ConfigureCurve(new FpCurve( + mod_p, + FromHex("C2173F1513981673AF4892C23035A27CE25E2013BF95AA33B22C656F277E7335"), + FromHex("295F9BAE7428ED9CCC20E7C359A9D41A22FCCD9108E17BF7BA9337A6F8AE9513"), + mod_q, BigInteger.Four, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + FromHex("91E38443A5E82C0D880923425712B2BB658B9196932E02C78B2582FE742DAA28"), + FromHex("32879423AB1A0375895786C4BB46E9565FDE0B5344766740AF268ADB32322E5C")); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class Holder_id_tc26_gost_3410_12_512_paramSetA + : X9ECParametersHolder + { + private Holder_id_tc26_gost_3410_12_512_paramSetA() {} + + internal static readonly X9ECParametersHolder Instance = new Holder_id_tc26_gost_3410_12_512_paramSetA(); + + protected override ECCurve CreateCurve() + { + BigInteger mod_p = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC7"); + BigInteger mod_q = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27E69532F48D89116FF22B8D4E0560609B4B38ABFAD2B85DCACDB1411F10B275"); + + return ConfigureCurve(new FpCurve( + mod_p, + FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC4"), + FromHex("E8C2505DEDFC86DDC1BD0B2B6667F1DA34B82574761CB0E879BD081CFD0B6265EE3CB090F30D27614CB4574010DA90DD862EF9D4EBEE4761503190785A71C760"), + mod_q, BigInteger.One, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + BigInteger.Three, + FromHex("7503CFE87A836AE3A61B8816E25450E6CE5E1C93ACF1ABC1778064FDCBEFA921DF1626BE4FD036E93D75E6A50E3A41E98028FE5FC235F5B889A589CB5215F2A4")); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class Holder_id_tc26_gost_3410_12_512_paramSetB + : X9ECParametersHolder + { + private Holder_id_tc26_gost_3410_12_512_paramSetB() {} + + internal static readonly X9ECParametersHolder Instance = new Holder_id_tc26_gost_3410_12_512_paramSetB(); + + protected override ECCurve CreateCurve() + { + BigInteger mod_p = FromHex("8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006F"); + BigInteger mod_q = FromHex("800000000000000000000000000000000000000000000000000000000000000149A1EC142565A545ACFDB77BD9D40CFA8B996712101BEA0EC6346C54374F25BD"); + + return ConfigureCurve(new FpCurve( + mod_p, + FromHex("8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006C"), + FromHex("687D1B459DC841457E3E06CF6F5E2517B97C7D614AF138BCBF85DC806C4B289F3E965D2DB1416D217F8B276FAD1AB69C50F78BEE1FA3106EFB8CCBC7C5140116"), + mod_q, BigInteger.One, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + BigInteger.Two, + FromHex("1A8F7EDA389B094C2C071E3647A8940F3C123B697578C213BE6DD9E6C8EC7335DCB228FD1EDF4A39152CBCAAF8C0398828041055F94CEEEC7E21340780FE41BD")); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class Holder_id_tc26_gost_3410_12_512_paramSetC + : X9ECParametersHolder + { + private Holder_id_tc26_gost_3410_12_512_paramSetC() {} + + internal static readonly X9ECParametersHolder Instance = new Holder_id_tc26_gost_3410_12_512_paramSetC(); + + protected override ECCurve CreateCurve() + { + BigInteger mod_p = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC7"); + BigInteger mod_q = FromHex("3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC98CDBA46506AB004C33A9FF5147502CC8EDA9E7A769A12694623CEF47F023ED"); + + return ConfigureCurve(new FpCurve( + mod_p, + FromHex("DC9203E514A721875485A529D2C722FB187BC8980EB866644DE41C68E143064546E861C0E2C9EDD92ADE71F46FCF50FF2AD97F951FDA9F2A2EB6546F39689BD3"), + FromHex("B4C4EE28CEBC6C2C8AC12952CF37F16AC7EFB6A9F69F4B57FFDA2E4F0DE5ADE038CBC2FFF719D2C18DE0284B8BFEF3B52B8CC7A5F5BF0A3C8D2319A5312557E1"), + mod_q, BigInteger.Four, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + FromHex("E2E31EDFC23DE7BDEBE241CE593EF5DE2295B7A9CBAEF021D385F7074CEA043AA27272A7AE602BF2A7B9033DB9ED3610C6FB85487EAE97AAC5BC7928C1950148"), + FromHex("F5CE40D95B5EB899ABBCCFF5911CB8577939804D6527378B8C108C3D2090FF9BE18E2D33E3021ED2EF32D85822423B6304F726AA854BAE07D0396E9A9ADDC40F")); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + private static readonly Dictionary objIds = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly Dictionary curves = + new Dictionary(); + private static readonly Dictionary names = + new Dictionary(); + + private static void DefineCurve(string name, DerObjectIdentifier oid, X9ECParametersHolder holder) + { + objIds.Add(name, oid); + names.Add(oid, name); + curves.Add(oid, holder); + } + + static ECGost3410NamedCurves() + { + DefineCurve("GostR3410-2001-CryptoPro-A", + CryptoProObjectIdentifiers.GostR3410x2001CryptoProA, + Holder_gostR3410_2001_CryptoPro_A.Instance); + DefineCurve("GostR3410-2001-CryptoPro-B", + CryptoProObjectIdentifiers.GostR3410x2001CryptoProB, + Holder_gostR3410_2001_CryptoPro_B.Instance); + DefineCurve("GostR3410-2001-CryptoPro-C", + CryptoProObjectIdentifiers.GostR3410x2001CryptoProC, + Holder_gostR3410_2001_CryptoPro_C.Instance); + DefineCurve("GostR3410-2001-CryptoPro-XchA", + CryptoProObjectIdentifiers.GostR3410x2001CryptoProXchA, + Holder_gostR3410_2001_CryptoPro_A.Instance); + DefineCurve("GostR3410-2001-CryptoPro-XchB", + CryptoProObjectIdentifiers.GostR3410x2001CryptoProXchB, + Holder_gostR3410_2001_CryptoPro_XchB.Instance); + DefineCurve("Tc26-Gost-3410-12-256-paramSetA", + RosstandartObjectIdentifiers.id_tc26_gost_3410_12_256_paramSetA, + Holder_id_tc26_gost_3410_12_256_paramSetA.Instance); + DefineCurve("Tc26-Gost-3410-12-512-paramSetA", + RosstandartObjectIdentifiers.id_tc26_gost_3410_12_512_paramSetA, + Holder_id_tc26_gost_3410_12_512_paramSetA.Instance); + DefineCurve("Tc26-Gost-3410-12-512-paramSetB", + RosstandartObjectIdentifiers.id_tc26_gost_3410_12_512_paramSetB, + Holder_id_tc26_gost_3410_12_512_paramSetB.Instance); + DefineCurve("Tc26-Gost-3410-12-512-paramSetC", + RosstandartObjectIdentifiers.id_tc26_gost_3410_12_512_paramSetC, + Holder_id_tc26_gost_3410_12_512_paramSetC.Instance); + } + + /// Look up the for the curve with the given name. + /// The name of the curve. + public static X9ECParameters GetByName(string name) + { + DerObjectIdentifier oid = GetOid(name); + return oid == null ? null : GetByOid(oid); + } + + /// Look up an for the curve with the given name. + /// + /// Allows accessing the curve without necessarily triggering the creation of the + /// full . + /// + /// The name of the curve. + public static X9ECParametersHolder GetByNameLazy(string name) + { + DerObjectIdentifier oid = GetOid(name); + return oid == null ? null : GetByOidLazy(oid); + } + + /// Look up the for the curve with the given + /// OID. + /// The OID for the curve. + public static X9ECParameters GetByOid(DerObjectIdentifier oid) + { + return GetByOidLazy(oid)?.Parameters; + } + + /// Look up an for the curve with the given + /// OID. + /// + /// Allows accessing the curve without necessarily triggering the creation of the + /// full . + /// + /// The OID for the curve. + public static X9ECParametersHolder GetByOidLazy(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(curves, oid); + } + + /// Look up the name of the curve with the given OID. + /// The OID for the curve. + public static string GetName(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(names, oid); + } + + /// Look up the OID of the curve with the given name. + /// The name of the curve. + public static DerObjectIdentifier GetOid(string name) + { + return CollectionUtilities.GetValueOrNull(objIds, name); + } + + /// Enumerate the available curve names in this registry. + public static IEnumerable Names + { + get { return CollectionUtilities.Proxy(objIds.Keys); } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/ECGOST3410NamedCurves.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/ECGOST3410NamedCurves.cs.meta new file mode 100644 index 000000000..fc99fb8c7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/ECGOST3410NamedCurves.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 052c30aad96856e439a9a9ac7651d489 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/ECGOST3410ParamSetParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/ECGOST3410ParamSetParameters.cs new file mode 100644 index 000000000..e9f95506d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/ECGOST3410ParamSetParameters.cs @@ -0,0 +1,85 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro +{ + public class ECGost3410ParamSetParameters + : Asn1Encodable + { + internal readonly DerInteger p, q, a, b, x, y; + + public static ECGost3410ParamSetParameters GetInstance(Asn1TaggedObject obj, bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static ECGost3410ParamSetParameters GetInstance(object obj) + { + if (obj == null || obj is ECGost3410ParamSetParameters) + { + return (ECGost3410ParamSetParameters) obj; + } + + if (obj is Asn1Sequence seq) + return new ECGost3410ParamSetParameters(seq); + + throw new ArgumentException("Invalid GOST3410Parameter: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public ECGost3410ParamSetParameters( + BigInteger a, + BigInteger b, + BigInteger p, + BigInteger q, + int x, + BigInteger y) + { + this.a = new DerInteger(a); + this.b = new DerInteger(b); + this.p = new DerInteger(p); + this.q = new DerInteger(q); + this.x = new DerInteger(x); + this.y = new DerInteger(y); + } + + public ECGost3410ParamSetParameters( + Asn1Sequence seq) + { + if (seq.Count != 6) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + this.a = DerInteger.GetInstance(seq[0]); + this.b = DerInteger.GetInstance(seq[1]); + this.p = DerInteger.GetInstance(seq[2]); + this.q = DerInteger.GetInstance(seq[3]); + this.x = DerInteger.GetInstance(seq[4]); + this.y = DerInteger.GetInstance(seq[5]); + } + + public BigInteger P + { + get { return p.PositiveValue; } + } + + public BigInteger Q + { + get { return q.PositiveValue; } + } + + public BigInteger A + { + get { return a.PositiveValue; } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(a, b, p, q, x, y); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/ECGOST3410ParamSetParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/ECGOST3410ParamSetParameters.cs.meta new file mode 100644 index 000000000..b6899d8a5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/ECGOST3410ParamSetParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d82ddd5e96adf74ea6f6a4b7a6c4b73 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST28147Parameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST28147Parameters.cs new file mode 100644 index 000000000..9f32d39ab --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST28147Parameters.cs @@ -0,0 +1,58 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro +{ + public class Gost28147Parameters + : Asn1Encodable + { + private readonly Asn1OctetString iv; + private readonly DerObjectIdentifier paramSet; + + public static Gost28147Parameters GetInstance(Asn1TaggedObject obj, bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static Gost28147Parameters GetInstance(object obj) + { + if (obj == null || obj is Gost28147Parameters) + return (Gost28147Parameters) obj; + + if (obj is Asn1Sequence seq) + return new Gost28147Parameters(seq); + + throw new ArgumentException("Invalid GOST3410Parameter: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + private Gost28147Parameters(Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + this.iv = Asn1OctetString.GetInstance(seq[0]); + this.paramSet = DerObjectIdentifier.GetInstance(seq[1]); + } + + /** + *
+         * Gost28147-89-Parameters ::=
+         *               SEQUENCE {
+         *                       iv                   Gost28147-89-IV,
+         *                       encryptionParamSet   OBJECT IDENTIFIER
+         *                }
+         *
+         *   Gost28147-89-IV ::= OCTET STRING (SIZE (8))
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(iv, paramSet); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST28147Parameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST28147Parameters.cs.meta new file mode 100644 index 000000000..50e099c34 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST28147Parameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1f0e78f8f1d25914794542ae98d5a38d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST3410NamedParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST3410NamedParameters.cs new file mode 100644 index 000000000..7c67dfb3e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST3410NamedParameters.cs @@ -0,0 +1,112 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro +{ + /// Registry of available named parameters for GOST 3410-94. + public static class Gost3410NamedParameters + { + private static readonly Gost3410ParamSetParameters cryptoProA = new Gost3410ParamSetParameters( + 1024, + new BigInteger("127021248288932417465907042777176443525787653508916535812817507265705031260985098497423188333483401180925999995120988934130659205614996724254121049274349357074920312769561451689224110579311248812610229678534638401693520013288995000362260684222750813532307004517341633685004541062586971416883686778842537820383"), + new BigInteger("68363196144955700784444165611827252895102170888761442055095051287550314083023"), + new BigInteger("100997906755055304772081815535925224869841082572053457874823515875577147990529272777244152852699298796483356699682842027972896052747173175480590485607134746852141928680912561502802222185647539190902656116367847270145019066794290930185446216399730872221732889830323194097355403213400972588322876850946740663962") + // validationAlgorithm { + // algorithm + // id-GostR3410-94-bBis, + // parameters + // GostR3410-94-ValidationBisParameters: { + // x0 1376285941, + // c 3996757427 + // } + // } + + ); + + private static readonly Gost3410ParamSetParameters cryptoProB = new Gost3410ParamSetParameters( + 1024, + new BigInteger("139454871199115825601409655107690713107041707059928031797758001454375765357722984094124368522288239833039114681648076688236921220737322672160740747771700911134550432053804647694904686120113087816240740184800477047157336662926249423571248823968542221753660143391485680840520336859458494803187341288580489525163"), + new BigInteger("79885141663410976897627118935756323747307951916507639758300472692338873533959"), + new BigInteger("42941826148615804143873447737955502392672345968607143066798112994089471231420027060385216699563848719957657284814898909770759462613437669456364882730370838934791080835932647976778601915343474400961034231316672578686920482194932878633360203384797092684342247621055760235016132614780652761028509445403338652341") + // validationAlgorithm { + // algorithm + // id-GostR3410-94-bBis, + // parameters + // GostR3410-94-ValidationBisParameters: { + // x0 1536654555, + // c 1855361757, + // d 14408629386140014567655 + //4902939282056547857802241461782996702017713059974755104394739915140 + //6115284791024439062735788342744854120601660303926203867703556828005 + //8957203818114895398976594425537561271800850306 + // } + // } + //} + ); + + private static readonly Gost3410ParamSetParameters cryptoProXchA = new Gost3410ParamSetParameters( + 1024, + new BigInteger("142011741597563481196368286022318089743276138395243738762872573441927459393512718973631166078467600360848946623567625795282774719212241929071046134208380636394084512691828894000571524625445295769349356752728956831541775441763139384457191755096847107846595662547942312293338483924514339614727760681880609734239"), + new BigInteger("91771529896554605945588149018382750217296858393520724172743325725474374979801"), + new BigInteger("133531813272720673433859519948319001217942375967847486899482359599369642528734712461590403327731821410328012529253871914788598993103310567744136196364803064721377826656898686468463277710150809401182608770201615324990468332931294920912776241137878030224355746606283971659376426832674269780880061631528163475887") + ); + + private static readonly Dictionary objIds = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly Dictionary parameters = + new Dictionary(); + + private static void DefineParameters(string name, DerObjectIdentifier oid, + Gost3410ParamSetParameters parameterSet) + { + objIds.Add(name, oid); + parameters.Add(oid, parameterSet); + } + + static Gost3410NamedParameters() + { + DefineParameters("GostR3410-94-CryptoPro-A", CryptoProObjectIdentifiers.GostR3410x94CryptoProA, cryptoProA); + DefineParameters("GostR3410-94-CryptoPro-B", CryptoProObjectIdentifiers.GostR3410x94CryptoProB, cryptoProB); + DefineParameters("GostR3410-94-CryptoPro-XchA", CryptoProObjectIdentifiers.GostR3410x94CryptoProXchA, + cryptoProXchA); + } + + /// Look up the for the parameter set with the given name. + /// + /// The name of the parameter set. + public static Gost3410ParamSetParameters GetByName(string name) + { + DerObjectIdentifier oid = GetOid(name); + return oid == null ? null : GetByOid(oid); + } + + /// Look up the for the parameter set with the given + /// OID. + /// The OID for the parameter set. + public static Gost3410ParamSetParameters GetByOid(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(parameters, oid); + } + + /// Look up the OID of the parameter set with the given name. + /// + /// The name of the parameter set. + public static DerObjectIdentifier GetOid(string name) + { + return CollectionUtilities.GetValueOrNull(objIds, name); + } + + /// Enumerate the available parameter set names in this registry. + public static IEnumerable Names + { + get { return CollectionUtilities.Proxy(objIds.Keys); } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST3410NamedParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST3410NamedParameters.cs.meta new file mode 100644 index 000000000..0ceafa89d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST3410NamedParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b57d96c489c54b94c9770abece1115aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST3410ParamSetParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST3410ParamSetParameters.cs new file mode 100644 index 000000000..717372d14 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST3410ParamSetParameters.cs @@ -0,0 +1,83 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro +{ + public class Gost3410ParamSetParameters + : Asn1Encodable + { + private readonly int keySize; + private readonly DerInteger p, q, a; + + public static Gost3410ParamSetParameters GetInstance(Asn1TaggedObject obj, bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static Gost3410ParamSetParameters GetInstance(object obj) + { + if (obj == null || obj is Gost3410ParamSetParameters) + return (Gost3410ParamSetParameters) obj; + + if (obj is Asn1Sequence seq) + return new Gost3410ParamSetParameters(seq); + + throw new ArgumentException("Invalid GOST3410Parameter: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public Gost3410ParamSetParameters( + int keySize, + BigInteger p, + BigInteger q, + BigInteger a) + { + this.keySize = keySize; + this.p = new DerInteger(p); + this.q = new DerInteger(q); + this.a = new DerInteger(a); + } + + private Gost3410ParamSetParameters( + Asn1Sequence seq) + { + if (seq.Count != 4) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + this.keySize = DerInteger.GetInstance(seq[0]).IntValueExact; + this.p = DerInteger.GetInstance(seq[1]); + this.q = DerInteger.GetInstance(seq[2]); + this.a = DerInteger.GetInstance(seq[3]); + } + + public int KeySize + { + get { return keySize; } + } + + public BigInteger P + { + get { return p.PositiveValue; } + } + + public BigInteger Q + { + get { return q.PositiveValue; } + } + + public BigInteger A + { + get { return a.PositiveValue; } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(new DerInteger(keySize), p, q, a); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST3410ParamSetParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST3410ParamSetParameters.cs.meta new file mode 100644 index 000000000..d22ec4d62 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST3410ParamSetParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3aa39c3f91903543994a83200a235d9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST3410PublicKeyAlgParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST3410PublicKeyAlgParameters.cs new file mode 100644 index 000000000..cd45b3908 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST3410PublicKeyAlgParameters.cs @@ -0,0 +1,84 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro +{ + public class Gost3410PublicKeyAlgParameters + : Asn1Encodable + { + private DerObjectIdentifier publicKeyParamSet; + private DerObjectIdentifier digestParamSet; + private DerObjectIdentifier encryptionParamSet; + + public static Gost3410PublicKeyAlgParameters GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); + } + + public static Gost3410PublicKeyAlgParameters GetInstance(object obj) + { + if (obj == null || obj is Gost3410PublicKeyAlgParameters) + return (Gost3410PublicKeyAlgParameters)obj; + + return new Gost3410PublicKeyAlgParameters(Asn1Sequence.GetInstance(obj)); + } + + public Gost3410PublicKeyAlgParameters( + DerObjectIdentifier publicKeyParamSet, + DerObjectIdentifier digestParamSet) + : this (publicKeyParamSet, digestParamSet, null) + { + } + + public Gost3410PublicKeyAlgParameters( + DerObjectIdentifier publicKeyParamSet, + DerObjectIdentifier digestParamSet, + DerObjectIdentifier encryptionParamSet) + { + if (publicKeyParamSet == null) + throw new ArgumentNullException("publicKeyParamSet"); + if (digestParamSet == null) + throw new ArgumentNullException("digestParamSet"); + + this.publicKeyParamSet = publicKeyParamSet; + this.digestParamSet = digestParamSet; + this.encryptionParamSet = encryptionParamSet; + } + + private Gost3410PublicKeyAlgParameters(Asn1Sequence seq) + { + this.publicKeyParamSet = (DerObjectIdentifier) seq[0]; + this.digestParamSet = (DerObjectIdentifier) seq[1]; + + if (seq.Count > 2) + { + this.encryptionParamSet = (DerObjectIdentifier) seq[2]; + } + } + + public DerObjectIdentifier PublicKeyParamSet + { + get { return publicKeyParamSet; } + } + + public DerObjectIdentifier DigestParamSet + { + get { return digestParamSet; } + } + + public DerObjectIdentifier EncryptionParamSet + { + get { return encryptionParamSet; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(publicKeyParamSet, digestParamSet); + v.AddOptional(encryptionParamSet); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST3410PublicKeyAlgParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST3410PublicKeyAlgParameters.cs.meta new file mode 100644 index 000000000..d38aa73da --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/cryptopro/GOST3410PublicKeyAlgParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d4780d2370f25ea43972c78a80d65319 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/eac.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/eac.meta new file mode 100644 index 000000000..f73ed1813 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/eac.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8ce3259f985df4047a1c6f106d608f93 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/eac/EACObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/eac/EACObjectIdentifiers.cs new file mode 100644 index 000000000..4c3aab984 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/eac/EACObjectIdentifiers.cs @@ -0,0 +1,54 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Eac +{ + public abstract class EacObjectIdentifiers + { + // bsi-de OBJECT IDENTIFIER ::= { + // itu-t(0) identified-organization(4) etsi(0) + // reserved(127) etsi-identified-organization(0) 7 + // } + public static readonly DerObjectIdentifier bsi_de = new DerObjectIdentifier("0.4.0.127.0.7"); + + // id-PK OBJECT IDENTIFIER ::= { + // bsi-de protocols(2) smartcard(2) 1 + // } + public static readonly DerObjectIdentifier id_PK = new DerObjectIdentifier(bsi_de + ".2.2.1"); + + public static readonly DerObjectIdentifier id_PK_DH = new DerObjectIdentifier(id_PK + ".1"); + public static readonly DerObjectIdentifier id_PK_ECDH = new DerObjectIdentifier(id_PK + ".2"); + + // id-CA OBJECT IDENTIFIER ::= { + // bsi-de protocols(2) smartcard(2) 3 + // } + public static readonly DerObjectIdentifier id_CA = new DerObjectIdentifier(bsi_de + ".2.2.3"); + public static readonly DerObjectIdentifier id_CA_DH = new DerObjectIdentifier(id_CA + ".1"); + public static readonly DerObjectIdentifier id_CA_DH_3DES_CBC_CBC = new DerObjectIdentifier(id_CA_DH + ".1"); + public static readonly DerObjectIdentifier id_CA_ECDH = new DerObjectIdentifier(id_CA + ".2"); + public static readonly DerObjectIdentifier id_CA_ECDH_3DES_CBC_CBC = new DerObjectIdentifier(id_CA_ECDH + ".1"); + + // + // id-TA OBJECT IDENTIFIER ::= { + // bsi-de protocols(2) smartcard(2) 2 + // } + public static readonly DerObjectIdentifier id_TA = new DerObjectIdentifier(bsi_de + ".2.2.2"); + + public static readonly DerObjectIdentifier id_TA_RSA = new DerObjectIdentifier(id_TA + ".1"); + public static readonly DerObjectIdentifier id_TA_RSA_v1_5_SHA_1 = new DerObjectIdentifier(id_TA_RSA + ".1"); + public static readonly DerObjectIdentifier id_TA_RSA_v1_5_SHA_256 = new DerObjectIdentifier(id_TA_RSA + ".2"); + public static readonly DerObjectIdentifier id_TA_RSA_PSS_SHA_1 = new DerObjectIdentifier(id_TA_RSA + ".3"); + public static readonly DerObjectIdentifier id_TA_RSA_PSS_SHA_256 = new DerObjectIdentifier(id_TA_RSA + ".4"); + public static readonly DerObjectIdentifier id_TA_ECDSA = new DerObjectIdentifier(id_TA + ".2"); + public static readonly DerObjectIdentifier id_TA_ECDSA_SHA_1 = new DerObjectIdentifier(id_TA_ECDSA + ".1"); + public static readonly DerObjectIdentifier id_TA_ECDSA_SHA_224 = new DerObjectIdentifier(id_TA_ECDSA + ".2"); + public static readonly DerObjectIdentifier id_TA_ECDSA_SHA_256 = new DerObjectIdentifier(id_TA_ECDSA + ".3"); + public static readonly DerObjectIdentifier id_TA_ECDSA_SHA_384 = new DerObjectIdentifier(id_TA_ECDSA + ".4"); + public static readonly DerObjectIdentifier id_TA_ECDSA_SHA_512 = new DerObjectIdentifier(id_TA_ECDSA + ".5"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/eac/EACObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/eac/EACObjectIdentifiers.cs.meta new file mode 100644 index 000000000..dc44d662f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/eac/EACObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d0b75271ac3e464f895c2c6ac33791f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/edec.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/edec.meta new file mode 100644 index 000000000..6a8a5a8bb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/edec.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: be0b3f81fe633d3409f5f425d34c732b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/edec/EdECObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/edec/EdECObjectIdentifiers.cs new file mode 100644 index 000000000..14a808556 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/edec/EdECObjectIdentifiers.cs @@ -0,0 +1,21 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.EdEC +{ + /** + * Edwards Elliptic Curve Object Identifiers (RFC 8410) + */ + public abstract class EdECObjectIdentifiers + { + public static readonly DerObjectIdentifier id_edwards_curve_algs = new DerObjectIdentifier("1.3.101"); + + public static readonly DerObjectIdentifier id_X25519 = id_edwards_curve_algs.Branch("110"); + public static readonly DerObjectIdentifier id_X448 = id_edwards_curve_algs.Branch("111"); + public static readonly DerObjectIdentifier id_Ed25519 = id_edwards_curve_algs.Branch("112"); + public static readonly DerObjectIdentifier id_Ed448 = id_edwards_curve_algs.Branch("113"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/edec/EdECObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/edec/EdECObjectIdentifiers.cs.meta new file mode 100644 index 000000000..fd46093c1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/edec/EdECObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4dcf91519f9beba449a2e0874fcaeaa4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf.meta new file mode 100644 index 000000000..edc923284 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d9bcda6a2f10b8342b2a8ab4082e7ea7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CertificateValues.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CertificateValues.cs new file mode 100644 index 000000000..e107df77b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CertificateValues.cs @@ -0,0 +1,87 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// RFC 3126: 4.3.1 Certificate Values Attribute Definition + /// + /// CertificateValues ::= SEQUENCE OF Certificate + /// + /// + public class CertificateValues + : Asn1Encodable + { + private readonly Asn1Sequence certificates; + + public static CertificateValues GetInstance( + object obj) + { + if (obj == null || obj is CertificateValues) + return (CertificateValues) obj; + + if (obj is Asn1Sequence) + return new CertificateValues((Asn1Sequence) obj); + + throw new ArgumentException( + "Unknown object in 'CertificateValues' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + private CertificateValues( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + + foreach (Asn1Encodable ae in seq) + { + X509CertificateStructure.GetInstance(ae.ToAsn1Object()); + } + + this.certificates = seq; + } + + public CertificateValues( + params X509CertificateStructure[] certificates) + { + if (certificates == null) + throw new ArgumentNullException("certificates"); + + this.certificates = new DerSequence(certificates); + } + + public CertificateValues( + IEnumerable certificates) + { + if (certificates == null) + throw new ArgumentNullException("certificates"); + + this.certificates = new DerSequence( + Asn1EncodableVector.FromEnumerable(certificates)); + } + + public X509CertificateStructure[] GetCertificates() + { + X509CertificateStructure[] result = new X509CertificateStructure[certificates.Count]; + for (int i = 0; i < certificates.Count; ++i) + { + result[i] = X509CertificateStructure.GetInstance(certificates[i]); + } + return result; + } + + public override Asn1Object ToAsn1Object() + { + return certificates; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CertificateValues.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CertificateValues.cs.meta new file mode 100644 index 000000000..b1c46c5de --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CertificateValues.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b9ae83cd7d55f0945a141df25e248c50 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CommitmentTypeIdentifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CommitmentTypeIdentifier.cs new file mode 100644 index 000000000..f027ccd31 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CommitmentTypeIdentifier.cs @@ -0,0 +1,21 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + public abstract class CommitmentTypeIdentifier + { + public static readonly DerObjectIdentifier ProofOfOrigin = PkcsObjectIdentifiers.IdCtiEtsProofOfOrigin; + public static readonly DerObjectIdentifier ProofOfReceipt = PkcsObjectIdentifiers.IdCtiEtsProofOfReceipt; + public static readonly DerObjectIdentifier ProofOfDelivery = PkcsObjectIdentifiers.IdCtiEtsProofOfDelivery; + public static readonly DerObjectIdentifier ProofOfSender = PkcsObjectIdentifiers.IdCtiEtsProofOfSender; + public static readonly DerObjectIdentifier ProofOfApproval = PkcsObjectIdentifiers.IdCtiEtsProofOfApproval; + public static readonly DerObjectIdentifier ProofOfCreation = PkcsObjectIdentifiers.IdCtiEtsProofOfCreation; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CommitmentTypeIdentifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CommitmentTypeIdentifier.cs.meta new file mode 100644 index 000000000..81b2f1311 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CommitmentTypeIdentifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 336b70d8be7970a4e8de1375f4a75f23 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CommitmentTypeIndication.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CommitmentTypeIndication.cs new file mode 100644 index 000000000..ff160f163 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CommitmentTypeIndication.cs @@ -0,0 +1,94 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + public class CommitmentTypeIndication + : Asn1Encodable + { + private readonly DerObjectIdentifier commitmentTypeId; + private readonly Asn1Sequence commitmentTypeQualifier; + + public static CommitmentTypeIndication GetInstance( + object obj) + { + if (obj == null || obj is CommitmentTypeIndication) + return (CommitmentTypeIndication) obj; + + if (obj is Asn1Sequence) + return new CommitmentTypeIndication((Asn1Sequence) obj); + + throw new ArgumentException( + "Unknown object in 'CommitmentTypeIndication' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + public CommitmentTypeIndication( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + if (seq.Count < 1 || seq.Count > 2) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + this.commitmentTypeId = (DerObjectIdentifier) seq[0].ToAsn1Object(); + + if (seq.Count > 1) + { + this.commitmentTypeQualifier = (Asn1Sequence) seq[1].ToAsn1Object(); + } + } + + public CommitmentTypeIndication( + DerObjectIdentifier commitmentTypeId) + : this(commitmentTypeId, null) + { + } + + public CommitmentTypeIndication( + DerObjectIdentifier commitmentTypeId, + Asn1Sequence commitmentTypeQualifier) + { + if (commitmentTypeId == null) + throw new ArgumentNullException("commitmentTypeId"); + + this.commitmentTypeId = commitmentTypeId; + + if (commitmentTypeQualifier != null) + { + this.commitmentTypeQualifier = commitmentTypeQualifier; + } + } + + public DerObjectIdentifier CommitmentTypeID + { + get { return commitmentTypeId; } + } + + public Asn1Sequence CommitmentTypeQualifier + { + get { return commitmentTypeQualifier; } + } + + /** + *
+        * CommitmentTypeIndication ::= SEQUENCE {
+        *      commitmentTypeId   CommitmentTypeIdentifier,
+        *      commitmentTypeQualifier   SEQUENCE SIZE (1..MAX) OF
+        *              CommitmentTypeQualifier OPTIONAL }
+        * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(commitmentTypeId); + v.AddOptional(commitmentTypeQualifier); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CommitmentTypeIndication.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CommitmentTypeIndication.cs.meta new file mode 100644 index 000000000..affd97b73 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CommitmentTypeIndication.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 88bf9f38a14468341ae7a0327e7528eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CommitmentTypeQualifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CommitmentTypeQualifier.cs new file mode 100644 index 000000000..06fe4a423 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CommitmentTypeQualifier.cs @@ -0,0 +1,117 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /** + * Commitment type qualifiers, used in the Commitment-Type-Indication attribute (RFC3126). + * + *
+    *   CommitmentTypeQualifier ::= SEQUENCE {
+    *       commitmentTypeIdentifier  CommitmentTypeIdentifier,
+    *       qualifier          ANY DEFINED BY commitmentTypeIdentifier OPTIONAL }
+    * 
+ */ + public class CommitmentTypeQualifier + : Asn1Encodable + { + private readonly DerObjectIdentifier commitmentTypeIdentifier; + private readonly Asn1Object qualifier; + + /** + * Creates a new CommitmentTypeQualifier instance. + * + * @param commitmentTypeIdentifier a CommitmentTypeIdentifier value + */ + public CommitmentTypeQualifier( + DerObjectIdentifier commitmentTypeIdentifier) + : this(commitmentTypeIdentifier, null) + { + } + + /** + * Creates a new CommitmentTypeQualifier instance. + * + * @param commitmentTypeIdentifier a CommitmentTypeIdentifier value + * @param qualifier the qualifier, defined by the above field. + */ + public CommitmentTypeQualifier( + DerObjectIdentifier commitmentTypeIdentifier, + Asn1Encodable qualifier) + { + if (commitmentTypeIdentifier == null) + throw new ArgumentNullException("commitmentTypeIdentifier"); + + this.commitmentTypeIdentifier = commitmentTypeIdentifier; + + if (qualifier != null) + { + this.qualifier = qualifier.ToAsn1Object(); + } + } + + /** + * Creates a new CommitmentTypeQualifier instance. + * + * @param as CommitmentTypeQualifier structure + * encoded as an Asn1Sequence. + */ + public CommitmentTypeQualifier( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + if (seq.Count < 1 || seq.Count > 2) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + commitmentTypeIdentifier = (DerObjectIdentifier) seq[0].ToAsn1Object(); + + if (seq.Count > 1) + { + qualifier = seq[1].ToAsn1Object(); + } + } + + public static CommitmentTypeQualifier GetInstance( + object obj) + { + if (obj == null || obj is CommitmentTypeQualifier) + return (CommitmentTypeQualifier) obj; + + if (obj is Asn1Sequence) + return new CommitmentTypeQualifier((Asn1Sequence) obj); + + throw new ArgumentException( + "Unknown object in 'CommitmentTypeQualifier' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + public DerObjectIdentifier CommitmentTypeIdentifier + { + get { return commitmentTypeIdentifier; } + } + + public Asn1Object Qualifier + { + get { return qualifier; } + } + + /** + * Returns a DER-encodable representation of this instance. + * + * @return a Asn1Object value + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(commitmentTypeIdentifier); + v.AddOptional(qualifier); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CommitmentTypeQualifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CommitmentTypeQualifier.cs.meta new file mode 100644 index 000000000..bb8536517 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CommitmentTypeQualifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2bbf93b7313b2254c9f5fd30c4fbed90 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CompleteCertificateRefs.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CompleteCertificateRefs.cs new file mode 100644 index 000000000..5bc3964c4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CompleteCertificateRefs.cs @@ -0,0 +1,86 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// RFC 3126: 4.2.1 Complete Certificate Refs Attribute Definition + /// + /// CompleteCertificateRefs ::= SEQUENCE OF OtherCertID + /// + /// + public class CompleteCertificateRefs + : Asn1Encodable + { + private readonly Asn1Sequence otherCertIDs; + + public static CompleteCertificateRefs GetInstance( + object obj) + { + if (obj == null || obj is CompleteCertificateRefs) + return (CompleteCertificateRefs) obj; + + if (obj is Asn1Sequence) + return new CompleteCertificateRefs((Asn1Sequence) obj); + + throw new ArgumentException( + "Unknown object in 'CompleteCertificateRefs' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + private CompleteCertificateRefs( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + + foreach (Asn1Encodable ae in seq) + { + OtherCertID.GetInstance(ae.ToAsn1Object()); + } + + this.otherCertIDs = seq; + } + + public CompleteCertificateRefs( + params OtherCertID[] otherCertIDs) + { + if (otherCertIDs == null) + throw new ArgumentNullException("otherCertIDs"); + + this.otherCertIDs = new DerSequence(otherCertIDs); + } + + public CompleteCertificateRefs( + IEnumerable otherCertIDs) + { + if (otherCertIDs == null) + throw new ArgumentNullException("otherCertIDs"); + + this.otherCertIDs = new DerSequence( + Asn1EncodableVector.FromEnumerable(otherCertIDs)); + } + + public OtherCertID[] GetOtherCertIDs() + { + OtherCertID[] result = new OtherCertID[otherCertIDs.Count]; + for (int i = 0; i < otherCertIDs.Count; ++i) + { + result[i] = OtherCertID.GetInstance(otherCertIDs[i].ToAsn1Object()); + } + return result; + } + + public override Asn1Object ToAsn1Object() + { + return otherCertIDs; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CompleteCertificateRefs.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CompleteCertificateRefs.cs.meta new file mode 100644 index 000000000..ceabad5a1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CompleteCertificateRefs.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 78cb9237027ea2145a39723f2c83ee4a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CompleteRevocationRefs.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CompleteRevocationRefs.cs new file mode 100644 index 000000000..844354ca7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CompleteRevocationRefs.cs @@ -0,0 +1,86 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + /// + /// CompleteRevocationRefs ::= SEQUENCE OF CrlOcspRef + /// + /// + public class CompleteRevocationRefs + : Asn1Encodable + { + private readonly Asn1Sequence crlOcspRefs; + + public static CompleteRevocationRefs GetInstance( + object obj) + { + if (obj == null || obj is CompleteRevocationRefs) + return (CompleteRevocationRefs) obj; + + if (obj is Asn1Sequence) + return new CompleteRevocationRefs((Asn1Sequence) obj); + + throw new ArgumentException( + "Unknown object in 'CompleteRevocationRefs' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + private CompleteRevocationRefs( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + + foreach (Asn1Encodable ae in seq) + { + CrlOcspRef.GetInstance(ae.ToAsn1Object()); + } + + this.crlOcspRefs = seq; + } + + public CompleteRevocationRefs( + params CrlOcspRef[] crlOcspRefs) + { + if (crlOcspRefs == null) + throw new ArgumentNullException("crlOcspRefs"); + + this.crlOcspRefs = new DerSequence(crlOcspRefs); + } + + public CompleteRevocationRefs( + IEnumerable crlOcspRefs) + { + if (crlOcspRefs == null) + throw new ArgumentNullException("crlOcspRefs"); + + this.crlOcspRefs = new DerSequence( + Asn1EncodableVector.FromEnumerable(crlOcspRefs)); + } + + public CrlOcspRef[] GetCrlOcspRefs() + { + CrlOcspRef[] result = new CrlOcspRef[crlOcspRefs.Count]; + for (int i = 0; i < crlOcspRefs.Count; ++i) + { + result[i] = CrlOcspRef.GetInstance(crlOcspRefs[i].ToAsn1Object()); + } + return result; + } + + public override Asn1Object ToAsn1Object() + { + return crlOcspRefs; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CompleteRevocationRefs.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CompleteRevocationRefs.cs.meta new file mode 100644 index 000000000..fabfa63f5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CompleteRevocationRefs.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 44f51b37ced10d641ab10e0b68eb8000 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlIdentifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlIdentifier.cs new file mode 100644 index 000000000..7bca4f25c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlIdentifier.cs @@ -0,0 +1,121 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Reflection; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + /// + /// CrlIdentifier ::= SEQUENCE + /// { + /// crlissuer Name, + /// crlIssuedTime UTCTime, + /// crlNumber INTEGER OPTIONAL + /// } + /// + /// + public class CrlIdentifier + : Asn1Encodable + { + private readonly X509Name crlIssuer; + private readonly Asn1UtcTime crlIssuedTime; + private readonly DerInteger crlNumber; + + public static CrlIdentifier GetInstance(object obj) + { + if (obj == null) + return null; + + if (obj is CrlIdentifier crlIdentifier) + return crlIdentifier; + + if (obj is Asn1Sequence asn1Sequence) + return new CrlIdentifier(asn1Sequence); + + throw new ArgumentException("Unknown object in 'CrlIdentifier' factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + nameof(obj)); + } + + private CrlIdentifier(Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException(nameof(seq)); + if (seq.Count < 2 || seq.Count > 3) + throw new ArgumentException("Bad sequence size: " + seq.Count, nameof(seq)); + + this.crlIssuer = X509Name.GetInstance(seq[0]); + this.crlIssuedTime = Asn1UtcTime.GetInstance(seq[1]); + + // Validate crlIssuedTime is in the appropriate year range + crlIssuedTime.ToDateTime(2049); + + if (seq.Count > 2) + { + this.crlNumber = DerInteger.GetInstance(seq[2]); + } + } + + public CrlIdentifier(X509Name crlIssuer, DateTime crlIssuedTime) + : this(crlIssuer, crlIssuedTime, null) + { + } + + public CrlIdentifier(X509Name crlIssuer, DateTime crlIssuedTime, BigInteger crlNumber) + : this(crlIssuer, new Asn1UtcTime(crlIssuedTime, 2049), crlNumber) + { + } + + public CrlIdentifier(X509Name crlIssuer, Asn1UtcTime crlIssuedTime) + : this(crlIssuer, crlIssuedTime, null) + { + } + + public CrlIdentifier(X509Name crlIssuer, Asn1UtcTime crlIssuedTime, BigInteger crlNumber) + { + if (crlIssuer == null) + throw new ArgumentNullException(nameof(crlIssuer)); + if (crlIssuedTime == null) + throw new ArgumentNullException(nameof(crlIssuedTime)); + + // Validate crlIssuedTime is in the appropriate year range + crlIssuedTime.ToDateTime(2049); + + this.crlIssuer = crlIssuer; + this.crlIssuedTime = crlIssuedTime; + + if (null != crlNumber) + { + this.crlNumber = new DerInteger(crlNumber); + } + } + + public X509Name CrlIssuer + { + get { return crlIssuer; } + } + + public DateTime CrlIssuedTime + { + get { return crlIssuedTime.ToDateTime(2049); } + } + + public BigInteger CrlNumber + { + get { return crlNumber == null ? null : crlNumber.Value; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(crlIssuer.ToAsn1Object(), crlIssuedTime); + v.AddOptional(crlNumber); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlIdentifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlIdentifier.cs.meta new file mode 100644 index 000000000..14305b17a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlIdentifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8b9bbf1d7e684f84fbd58f13c3f2334a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlListID.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlListID.cs new file mode 100644 index 000000000..e680705b0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlListID.cs @@ -0,0 +1,91 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + /// + /// CRLListID ::= SEQUENCE + /// { + /// crls SEQUENCE OF CrlValidatedID + /// } + /// + /// + public class CrlListID + : Asn1Encodable + { + private readonly Asn1Sequence crls; + + public static CrlListID GetInstance( + object obj) + { + if (obj == null || obj is CrlListID) + return (CrlListID) obj; + + if (obj is Asn1Sequence) + return new CrlListID((Asn1Sequence) obj); + + throw new ArgumentException( + "Unknown object in 'CrlListID' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + private CrlListID( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + if (seq.Count != 1) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + this.crls = (Asn1Sequence) seq[0].ToAsn1Object(); + + foreach (Asn1Encodable ae in this.crls) + { + CrlValidatedID.GetInstance(ae.ToAsn1Object()); + } + } + + public CrlListID( + params CrlValidatedID[] crls) + { + if (crls == null) + throw new ArgumentNullException("crls"); + + this.crls = new DerSequence(crls); + } + + public CrlListID( + IEnumerable crls) + { + if (crls == null) + throw new ArgumentNullException("crls"); + + this.crls = new DerSequence( + Asn1EncodableVector.FromEnumerable(crls)); + } + + public CrlValidatedID[] GetCrls() + { + CrlValidatedID[] result = new CrlValidatedID[crls.Count]; + for (int i = 0; i < crls.Count; ++i) + { + result[i] = CrlValidatedID.GetInstance(crls[i].ToAsn1Object()); + } + return result; + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(crls); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlListID.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlListID.cs.meta new file mode 100644 index 000000000..43bcfff0b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlListID.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0548220571862154a81c0e79a075edce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlOcspRef.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlOcspRef.cs new file mode 100644 index 000000000..66f57f5e6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlOcspRef.cs @@ -0,0 +1,117 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + /// + /// CrlOcspRef ::= SEQUENCE { + /// crlids [0] CRLListID OPTIONAL, + /// ocspids [1] OcspListID OPTIONAL, + /// otherRev [2] OtherRevRefs OPTIONAL + /// } + /// + /// + public class CrlOcspRef + : Asn1Encodable + { + private readonly CrlListID crlids; + private readonly OcspListID ocspids; + private readonly OtherRevRefs otherRev; + + public static CrlOcspRef GetInstance( + object obj) + { + if (obj == null || obj is CrlOcspRef) + return (CrlOcspRef) obj; + + if (obj is Asn1Sequence) + return new CrlOcspRef((Asn1Sequence) obj); + + throw new ArgumentException( + "Unknown object in 'CrlOcspRef' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + private CrlOcspRef( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + + foreach (Asn1TaggedObject taggedObj in seq) + { + Asn1Object asn1Obj = taggedObj.GetObject(); + + switch (taggedObj.TagNo) + { + case 0: + this.crlids = CrlListID.GetInstance(asn1Obj); + break; + case 1: + this.ocspids = OcspListID.GetInstance(asn1Obj); + break; + case 2: + this.otherRev = OtherRevRefs.GetInstance(asn1Obj); + break; + default: + throw new ArgumentException("Illegal tag in CrlOcspRef", "seq"); + } + } + } + + public CrlOcspRef( + CrlListID crlids, + OcspListID ocspids, + OtherRevRefs otherRev) + { + this.crlids = crlids; + this.ocspids = ocspids; + this.otherRev = otherRev; + } + + public CrlListID CrlIDs + { + get { return crlids; } + } + + public OcspListID OcspIDs + { + get { return ocspids; } + } + + public OtherRevRefs OtherRev + { + get { return otherRev; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + if (crlids != null) + { + v.Add(new DerTaggedObject(true, 0, crlids.ToAsn1Object())); + } + + if (ocspids != null) + { + v.Add(new DerTaggedObject(true, 1, ocspids.ToAsn1Object())); + } + + if (otherRev != null) + { + v.Add(new DerTaggedObject(true, 2, otherRev.ToAsn1Object())); + } + + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlOcspRef.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlOcspRef.cs.meta new file mode 100644 index 000000000..073cfcdac --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlOcspRef.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fec52d54f1a67b54ebf12ba30110c472 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlValidatedID.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlValidatedID.cs new file mode 100644 index 000000000..cdff9fc98 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlValidatedID.cs @@ -0,0 +1,95 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + /// + /// CrlValidatedID ::= SEQUENCE { + /// crlHash OtherHash, + /// crlIdentifier CrlIdentifier OPTIONAL} + /// + /// + public class CrlValidatedID + : Asn1Encodable + { + private readonly OtherHash crlHash; + private readonly CrlIdentifier crlIdentifier; + + public static CrlValidatedID GetInstance( + object obj) + { + if (obj == null || obj is CrlValidatedID) + return (CrlValidatedID) obj; + + if (obj is Asn1Sequence) + return new CrlValidatedID((Asn1Sequence) obj); + + throw new ArgumentException( + "Unknown object in 'CrlValidatedID' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + private CrlValidatedID( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + if (seq.Count < 1 || seq.Count > 2) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + this.crlHash = OtherHash.GetInstance(seq[0].ToAsn1Object()); + + if (seq.Count > 1) + { + this.crlIdentifier = CrlIdentifier.GetInstance(seq[1].ToAsn1Object()); + } + } + + public CrlValidatedID( + OtherHash crlHash) + : this(crlHash, null) + { + } + + public CrlValidatedID( + OtherHash crlHash, + CrlIdentifier crlIdentifier) + { + if (crlHash == null) + throw new ArgumentNullException("crlHash"); + + this.crlHash = crlHash; + this.crlIdentifier = crlIdentifier; + } + + public OtherHash CrlHash + { + get { return crlHash; } + } + + public CrlIdentifier CrlIdentifier + { + get { return crlIdentifier; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(crlHash.ToAsn1Object()); + + if (crlIdentifier != null) + { + v.Add(crlIdentifier.ToAsn1Object()); + } + + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlValidatedID.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlValidatedID.cs.meta new file mode 100644 index 000000000..eae74f04d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/CrlValidatedID.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 79d1caf0af4a8054d93f7b52cb4f58d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/ESFAttributes.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/ESFAttributes.cs new file mode 100644 index 000000000..0bfab5a52 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/ESFAttributes.cs @@ -0,0 +1,29 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + public abstract class EsfAttributes + { + public static readonly DerObjectIdentifier SigPolicyId = PkcsObjectIdentifiers.IdAAEtsSigPolicyID; + public static readonly DerObjectIdentifier CommitmentType = PkcsObjectIdentifiers.IdAAEtsCommitmentType; + public static readonly DerObjectIdentifier SignerLocation = PkcsObjectIdentifiers.IdAAEtsSignerLocation; + public static readonly DerObjectIdentifier SignerAttr = PkcsObjectIdentifiers.IdAAEtsSignerAttr; + public static readonly DerObjectIdentifier OtherSigCert = PkcsObjectIdentifiers.IdAAEtsOtherSigCert; + public static readonly DerObjectIdentifier ContentTimestamp = PkcsObjectIdentifiers.IdAAEtsContentTimestamp; + public static readonly DerObjectIdentifier CertificateRefs = PkcsObjectIdentifiers.IdAAEtsCertificateRefs; + public static readonly DerObjectIdentifier RevocationRefs = PkcsObjectIdentifiers.IdAAEtsRevocationRefs; + public static readonly DerObjectIdentifier CertValues = PkcsObjectIdentifiers.IdAAEtsCertValues; + public static readonly DerObjectIdentifier RevocationValues = PkcsObjectIdentifiers.IdAAEtsRevocationValues; + public static readonly DerObjectIdentifier EscTimeStamp = PkcsObjectIdentifiers.IdAAEtsEscTimeStamp; + public static readonly DerObjectIdentifier CertCrlTimestamp = PkcsObjectIdentifiers.IdAAEtsCertCrlTimestamp; + public static readonly DerObjectIdentifier ArchiveTimestamp = PkcsObjectIdentifiers.IdAAEtsArchiveTimestamp; + public static readonly DerObjectIdentifier ArchiveTimestampV2 = new DerObjectIdentifier(PkcsObjectIdentifiers.IdAA + ".48"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/ESFAttributes.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/ESFAttributes.cs.meta new file mode 100644 index 000000000..597e8f3cb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/ESFAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 27b0e7aba5c89c94eb9fc2ac8618b287 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OcspIdentifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OcspIdentifier.cs new file mode 100644 index 000000000..73cfbadaa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OcspIdentifier.cs @@ -0,0 +1,91 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + /// + /// OcspIdentifier ::= SEQUENCE { + /// ocspResponderID ResponderID, + /// -- As in OCSP response data + /// producedAt GeneralizedTime + /// -- As in OCSP response data + /// } + /// + /// + public class OcspIdentifier + : Asn1Encodable + { + private readonly ResponderID ocspResponderID; + private readonly Asn1GeneralizedTime producedAt; + + public static OcspIdentifier GetInstance( + object obj) + { + if (obj == null || obj is OcspIdentifier) + return (OcspIdentifier) obj; + + if (obj is Asn1Sequence) + return new OcspIdentifier((Asn1Sequence) obj); + + throw new ArgumentException( + "Unknown object in 'OcspIdentifier' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + private OcspIdentifier( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + if (seq.Count != 2) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + this.ocspResponderID = ResponderID.GetInstance(seq[0].ToAsn1Object()); + this.producedAt = (Asn1GeneralizedTime)seq[1].ToAsn1Object(); + } + + public OcspIdentifier(ResponderID ocspResponderID, DateTime producedAt) + { + if (ocspResponderID == null) + throw new ArgumentNullException(nameof(ocspResponderID)); + + this.ocspResponderID = ocspResponderID; + this.producedAt = new Asn1GeneralizedTime(producedAt); + } + + public OcspIdentifier(ResponderID ocspResponderID, Asn1GeneralizedTime producedAt) + { + if (ocspResponderID == null) + throw new ArgumentNullException(nameof(ocspResponderID)); + if (producedAt == null) + throw new ArgumentNullException(nameof(producedAt)); + + this.ocspResponderID = ocspResponderID; + this.producedAt = producedAt; + } + + public ResponderID OcspResponderID + { + get { return ocspResponderID; } + } + + public DateTime ProducedAt + { + get { return producedAt.ToDateTime(); } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(ocspResponderID, producedAt); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OcspIdentifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OcspIdentifier.cs.meta new file mode 100644 index 000000000..426eb60d8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OcspIdentifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5768d144eb9d5d743bd69dfd0e52983f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OcspListID.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OcspListID.cs new file mode 100644 index 000000000..72aece46b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OcspListID.cs @@ -0,0 +1,90 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + /// + /// OcspListID ::= SEQUENCE { + /// ocspResponses SEQUENCE OF OcspResponsesID + /// } + /// + /// + public class OcspListID + : Asn1Encodable + { + private readonly Asn1Sequence ocspResponses; + + public static OcspListID GetInstance( + object obj) + { + if (obj == null || obj is OcspListID) + return (OcspListID) obj; + + if (obj is Asn1Sequence) + return new OcspListID((Asn1Sequence) obj); + + throw new ArgumentException( + "Unknown object in 'OcspListID' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + private OcspListID( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + if (seq.Count != 1) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + this.ocspResponses = (Asn1Sequence) seq[0].ToAsn1Object(); + + foreach (Asn1Encodable ae in this.ocspResponses) + { + OcspResponsesID.GetInstance(ae.ToAsn1Object()); + } + } + + public OcspListID( + params OcspResponsesID[] ocspResponses) + { + if (ocspResponses == null) + throw new ArgumentNullException("ocspResponses"); + + this.ocspResponses = new DerSequence(ocspResponses); + } + + public OcspListID( + IEnumerable ocspResponses) + { + if (ocspResponses == null) + throw new ArgumentNullException("ocspResponses"); + + this.ocspResponses = new DerSequence( + Asn1EncodableVector.FromEnumerable(ocspResponses)); + } + + public OcspResponsesID[] GetOcspResponses() + { + OcspResponsesID[] result = new OcspResponsesID[ocspResponses.Count]; + for (int i = 0; i < ocspResponses.Count; ++i) + { + result[i] = OcspResponsesID.GetInstance(ocspResponses[i].ToAsn1Object()); + } + return result; + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(ocspResponses); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OcspListID.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OcspListID.cs.meta new file mode 100644 index 000000000..ca31e9906 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OcspListID.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eb0c80b3b4b2b5447aac0dd47934c395 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OcspResponsesID.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OcspResponsesID.cs new file mode 100644 index 000000000..05fd9ae33 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OcspResponsesID.cs @@ -0,0 +1,98 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + /// + /// OcspResponsesID ::= SEQUENCE { + /// ocspIdentifier OcspIdentifier, + /// ocspRepHash OtherHash OPTIONAL + /// } + /// + /// + public class OcspResponsesID + : Asn1Encodable + { + private readonly OcspIdentifier ocspIdentifier; + private readonly OtherHash ocspRepHash; + + public static OcspResponsesID GetInstance( + object obj) + { + if (obj == null || obj is OcspResponsesID) + return (OcspResponsesID) obj; + + if (obj is Asn1Sequence) + return new OcspResponsesID((Asn1Sequence) obj); + + throw new ArgumentException( + "Unknown object in 'OcspResponsesID' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + private OcspResponsesID( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + if (seq.Count < 1 || seq.Count > 2) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + this.ocspIdentifier = OcspIdentifier.GetInstance(seq[0].ToAsn1Object()); + + if (seq.Count > 1) + { + this.ocspRepHash = OtherHash.GetInstance(seq[1].ToAsn1Object()); + } + } + + public OcspResponsesID( + OcspIdentifier ocspIdentifier) + : this(ocspIdentifier, null) + { + } + + public OcspResponsesID( + OcspIdentifier ocspIdentifier, + OtherHash ocspRepHash) + { + if (ocspIdentifier == null) + throw new ArgumentNullException("ocspIdentifier"); + + this.ocspIdentifier = ocspIdentifier; + this.ocspRepHash = ocspRepHash; + } + + public OcspIdentifier OcspIdentifier + { + get { return ocspIdentifier; } + } + + public OtherHash OcspRepHash + { + get { return ocspRepHash; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector( + ocspIdentifier.ToAsn1Object()); + + if (ocspRepHash != null) + { + v.Add(ocspRepHash.ToAsn1Object()); + } + + return new DerSequence(v); + } + + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OcspResponsesID.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OcspResponsesID.cs.meta new file mode 100644 index 000000000..7b9aa3d55 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OcspResponsesID.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c15ad696d7f40db4993112131d5ccc9c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherCertID.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherCertID.cs new file mode 100644 index 000000000..3df13da00 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherCertID.cs @@ -0,0 +1,98 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// + /// OtherCertID ::= SEQUENCE { + /// otherCertHash OtherHash, + /// issuerSerial IssuerSerial OPTIONAL + /// } + /// + /// + public class OtherCertID + : Asn1Encodable + { + private readonly OtherHash otherCertHash; + private readonly IssuerSerial issuerSerial; + + public static OtherCertID GetInstance( + object obj) + { + if (obj == null || obj is OtherCertID) + return (OtherCertID) obj; + + if (obj is Asn1Sequence) + return new OtherCertID((Asn1Sequence) obj); + + throw new ArgumentException( + "Unknown object in 'OtherCertID' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + private OtherCertID( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + if (seq.Count < 1 || seq.Count > 2) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + this.otherCertHash = OtherHash.GetInstance(seq[0].ToAsn1Object()); + + if (seq.Count > 1) + { + this.issuerSerial = IssuerSerial.GetInstance(seq[1].ToAsn1Object()); + } + } + + public OtherCertID( + OtherHash otherCertHash) + : this(otherCertHash, null) + { + } + + public OtherCertID( + OtherHash otherCertHash, + IssuerSerial issuerSerial) + { + if (otherCertHash == null) + throw new ArgumentNullException("otherCertHash"); + + this.otherCertHash = otherCertHash; + this.issuerSerial = issuerSerial; + } + + public OtherHash OtherCertHash + { + get { return otherCertHash; } + } + + public IssuerSerial IssuerSerial + { + get { return issuerSerial; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector( + otherCertHash.ToAsn1Object()); + + if (issuerSerial != null) + { + v.Add(issuerSerial.ToAsn1Object()); + } + + return new DerSequence(v); + } + + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherCertID.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherCertID.cs.meta new file mode 100644 index 000000000..d0c038fc1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherCertID.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4fe95960541b4ea46b716b7a538de65c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherHash.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherHash.cs new file mode 100644 index 000000000..27d9afa89 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherHash.cs @@ -0,0 +1,92 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// + /// OtherHash ::= CHOICE { + /// sha1Hash OtherHashValue, -- This contains a SHA-1 hash + /// otherHash OtherHashAlgAndValue + /// } + /// + /// OtherHashValue ::= OCTET STRING + /// + /// + public class OtherHash + : Asn1Encodable, IAsn1Choice + { + private readonly Asn1OctetString sha1Hash; + private readonly OtherHashAlgAndValue otherHash; + + public static OtherHash GetInstance( + object obj) + { + if (obj == null || obj is OtherHash) + return (OtherHash) obj; + + if (obj is Asn1OctetString) + return new OtherHash((Asn1OctetString) obj); + + return new OtherHash( + OtherHashAlgAndValue.GetInstance(obj)); + } + + public OtherHash( + byte[] sha1Hash) + { + if (sha1Hash == null) + throw new ArgumentNullException("sha1Hash"); + + this.sha1Hash = new DerOctetString(sha1Hash); + } + + public OtherHash( + Asn1OctetString sha1Hash) + { + if (sha1Hash == null) + throw new ArgumentNullException("sha1Hash"); + + this.sha1Hash = sha1Hash; + } + + public OtherHash( + OtherHashAlgAndValue otherHash) + { + if (otherHash == null) + throw new ArgumentNullException("otherHash"); + + this.otherHash = otherHash; + } + + public AlgorithmIdentifier HashAlgorithm + { + get + { + return otherHash == null + ? new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1) + : otherHash.HashAlgorithm; + } + } + + public byte[] GetHashValue() + { + return otherHash == null + ? sha1Hash.GetOctets() + : otherHash.GetHashValue(); + } + + public override Asn1Object ToAsn1Object() + { + return otherHash == null + ? sha1Hash + : otherHash.ToAsn1Object(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherHash.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherHash.cs.meta new file mode 100644 index 000000000..6190b7693 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherHash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58f777dca43ae81438f2da0092e74fba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherHashAlgAndValue.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherHashAlgAndValue.cs new file mode 100644 index 000000000..50b079e0f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherHashAlgAndValue.cs @@ -0,0 +1,99 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// Summary description for OtherHashAlgAndValue. + /// + /// + /// + /// OtherHashAlgAndValue ::= SEQUENCE { + /// hashAlgorithm AlgorithmIdentifier, + /// hashValue OtherHashValue + /// } + /// + /// OtherHashValue ::= OCTET STRING + /// + /// + public class OtherHashAlgAndValue + : Asn1Encodable + { + private readonly AlgorithmIdentifier hashAlgorithm; + private readonly Asn1OctetString hashValue; + + public static OtherHashAlgAndValue GetInstance( + object obj) + { + if (obj == null || obj is OtherHashAlgAndValue) + return (OtherHashAlgAndValue) obj; + + if (obj is Asn1Sequence) + return new OtherHashAlgAndValue((Asn1Sequence) obj); + + throw new ArgumentException( + "Unknown object in 'OtherHashAlgAndValue' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + private OtherHashAlgAndValue( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + if (seq.Count != 2) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + this.hashAlgorithm = AlgorithmIdentifier.GetInstance(seq[0].ToAsn1Object()); + this.hashValue = (Asn1OctetString) seq[1].ToAsn1Object(); + } + + public OtherHashAlgAndValue( + AlgorithmIdentifier hashAlgorithm, + byte[] hashValue) + { + if (hashAlgorithm == null) + throw new ArgumentNullException("hashAlgorithm"); + if (hashValue == null) + throw new ArgumentNullException("hashValue"); + + this.hashAlgorithm = hashAlgorithm; + this.hashValue = new DerOctetString(hashValue); + } + + public OtherHashAlgAndValue( + AlgorithmIdentifier hashAlgorithm, + Asn1OctetString hashValue) + { + if (hashAlgorithm == null) + throw new ArgumentNullException("hashAlgorithm"); + if (hashValue == null) + throw new ArgumentNullException("hashValue"); + + this.hashAlgorithm = hashAlgorithm; + this.hashValue = hashValue; + } + + public AlgorithmIdentifier HashAlgorithm + { + get { return hashAlgorithm; } + } + + public byte[] GetHashValue() + { + return hashValue.GetOctets(); + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(hashAlgorithm, hashValue); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherHashAlgAndValue.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherHashAlgAndValue.cs.meta new file mode 100644 index 000000000..42b03c857 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherHashAlgAndValue.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eefa24fd14060ff469112a0023643954 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherRevRefs.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherRevRefs.cs new file mode 100644 index 000000000..6e19b2486 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherRevRefs.cs @@ -0,0 +1,84 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + /// + /// OtherRevRefs ::= SEQUENCE + /// { + /// otherRevRefType OtherRevRefType, + /// otherRevRefs ANY DEFINED BY otherRevRefType + /// } + /// + /// OtherRevRefType ::= OBJECT IDENTIFIER + /// + /// + public class OtherRevRefs + : Asn1Encodable + { + private readonly DerObjectIdentifier otherRevRefType; + private readonly Asn1Object otherRevRefs; + + public static OtherRevRefs GetInstance( + object obj) + { + if (obj == null || obj is OtherRevRefs) + return (OtherRevRefs) obj; + + if (obj is Asn1Sequence) + return new OtherRevRefs((Asn1Sequence) obj); + + throw new ArgumentException( + "Unknown object in 'OtherRevRefs' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + private OtherRevRefs( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + if (seq.Count != 2) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + this.otherRevRefType = (DerObjectIdentifier) seq[0].ToAsn1Object(); + this.otherRevRefs = seq[1].ToAsn1Object(); + } + + public OtherRevRefs( + DerObjectIdentifier otherRevRefType, + Asn1Encodable otherRevRefs) + { + if (otherRevRefType == null) + throw new ArgumentNullException("otherRevRefType"); + if (otherRevRefs == null) + throw new ArgumentNullException("otherRevRefs"); + + this.otherRevRefType = otherRevRefType; + this.otherRevRefs = otherRevRefs.ToAsn1Object(); + } + + public DerObjectIdentifier OtherRevRefType + { + get { return otherRevRefType; } + } + + public Asn1Object OtherRevRefsObject + { + get { return otherRevRefs; } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(otherRevRefType, otherRevRefs); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherRevRefs.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherRevRefs.cs.meta new file mode 100644 index 000000000..3849c6348 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherRevRefs.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 085694bc59fbce84485d29da1ee62c79 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherRevVals.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherRevVals.cs new file mode 100644 index 000000000..1f02c7fd0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherRevVals.cs @@ -0,0 +1,84 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// RFC 3126: 4.3.2 Revocation Values Attribute Definition + /// + /// OtherRevVals ::= SEQUENCE + /// { + /// otherRevValType OtherRevValType, + /// otherRevVals ANY DEFINED BY otherRevValType + /// } + /// + /// OtherRevValType ::= OBJECT IDENTIFIER + /// + /// + public class OtherRevVals + : Asn1Encodable + { + private readonly DerObjectIdentifier otherRevValType; + private readonly Asn1Object otherRevVals; + + public static OtherRevVals GetInstance( + object obj) + { + if (obj == null || obj is OtherRevVals) + return (OtherRevVals) obj; + + if (obj is Asn1Sequence) + return new OtherRevVals((Asn1Sequence) obj); + + throw new ArgumentException( + "Unknown object in 'OtherRevVals' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + private OtherRevVals( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + if (seq.Count != 2) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + this.otherRevValType = (DerObjectIdentifier) seq[0].ToAsn1Object(); + this.otherRevVals = seq[1].ToAsn1Object(); + } + + public OtherRevVals( + DerObjectIdentifier otherRevValType, + Asn1Encodable otherRevVals) + { + if (otherRevValType == null) + throw new ArgumentNullException("otherRevValType"); + if (otherRevVals == null) + throw new ArgumentNullException("otherRevVals"); + + this.otherRevValType = otherRevValType; + this.otherRevVals = otherRevVals.ToAsn1Object(); + } + + public DerObjectIdentifier OtherRevValType + { + get { return otherRevValType; } + } + + public Asn1Object OtherRevValsObject + { + get { return otherRevVals; } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(otherRevValType, otherRevVals); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherRevVals.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherRevVals.cs.meta new file mode 100644 index 000000000..84983bfae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherRevVals.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a03fbd2d4e225854b90c6419a1562f98 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherSigningCertificate.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherSigningCertificate.cs new file mode 100644 index 000000000..e7c131c2b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherSigningCertificate.cs @@ -0,0 +1,132 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// + /// OtherSigningCertificate ::= SEQUENCE { + /// certs SEQUENCE OF OtherCertID, + /// policies SEQUENCE OF PolicyInformation OPTIONAL + /// } + /// + /// + public class OtherSigningCertificate + : Asn1Encodable + { + private readonly Asn1Sequence certs; + private readonly Asn1Sequence policies; + + public static OtherSigningCertificate GetInstance( + object obj) + { + if (obj == null || obj is OtherSigningCertificate) + return (OtherSigningCertificate) obj; + + if (obj is Asn1Sequence) + return new OtherSigningCertificate((Asn1Sequence) obj); + + throw new ArgumentException( + "Unknown object in 'OtherSigningCertificate' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + private OtherSigningCertificate( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + if (seq.Count < 1 || seq.Count > 2) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + this.certs = Asn1Sequence.GetInstance(seq[0].ToAsn1Object()); + + if (seq.Count > 1) + { + this.policies = Asn1Sequence.GetInstance(seq[1].ToAsn1Object()); + } + } + + public OtherSigningCertificate( + params OtherCertID[] certs) + : this(certs, null) + { + } + + public OtherSigningCertificate( + OtherCertID[] certs, + params PolicyInformation[] policies) + { + if (certs == null) + throw new ArgumentNullException("certs"); + + this.certs = new DerSequence(certs); + + if (policies != null) + { + this.policies = new DerSequence(policies); + } + } + + public OtherSigningCertificate( + IEnumerable certs) + : this(certs, null) + { + } + + public OtherSigningCertificate( + IEnumerable certs, + IEnumerable policies) + { + if (certs == null) + throw new ArgumentNullException("certs"); + + this.certs = new DerSequence( + Asn1EncodableVector.FromEnumerable(certs)); + + if (policies != null) + { + this.policies = new DerSequence( + Asn1EncodableVector.FromEnumerable(policies)); + } + } + + public OtherCertID[] GetCerts() + { + OtherCertID[] cs = new OtherCertID[certs.Count]; + for (int i = 0; i < certs.Count; ++i) + { + cs[i] = OtherCertID.GetInstance(certs[i].ToAsn1Object()); + } + return cs; + } + + public PolicyInformation[] GetPolicies() + { + if (policies == null) + return null; + + PolicyInformation[] ps = new PolicyInformation[policies.Count]; + for (int i = 0; i < policies.Count; ++i) + { + ps[i] = PolicyInformation.GetInstance(policies[i].ToAsn1Object()); + } + return ps; + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(certs); + v.AddOptional(policies); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherSigningCertificate.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherSigningCertificate.cs.meta new file mode 100644 index 000000000..6c17bf5ae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/OtherSigningCertificate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 16e25eea74d6b9948a1b8bea685c4116 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/RevocationValues.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/RevocationValues.cs new file mode 100644 index 000000000..b50556aa3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/RevocationValues.cs @@ -0,0 +1,154 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// RFC 5126: 6.3.4. revocation-values Attribute Definition + /// + /// RevocationValues ::= SEQUENCE { + /// crlVals [0] SEQUENCE OF CertificateList OPTIONAL, + /// ocspVals [1] SEQUENCE OF BasicOCSPResponse OPTIONAL, + /// otherRevVals [2] OtherRevVals OPTIONAL + /// } + /// + /// + public class RevocationValues + : Asn1Encodable + { + private readonly Asn1Sequence crlVals; + private readonly Asn1Sequence ocspVals; + private readonly OtherRevVals otherRevVals; + + public static RevocationValues GetInstance( + object obj) + { + if (obj == null || obj is RevocationValues) + return (RevocationValues) obj; + + return new RevocationValues(Asn1Sequence.GetInstance(obj)); + } + + private RevocationValues( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + if (seq.Count > 3) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + foreach (Asn1TaggedObject taggedObj in seq) + { + Asn1Object asn1Obj = taggedObj.GetObject(); + switch (taggedObj.TagNo) + { + case 0: + Asn1Sequence crlValsSeq = (Asn1Sequence) asn1Obj; + foreach (Asn1Encodable ae in crlValsSeq) + { + CertificateList.GetInstance(ae.ToAsn1Object()); + } + this.crlVals = crlValsSeq; + break; + case 1: + Asn1Sequence ocspValsSeq = (Asn1Sequence) asn1Obj; + foreach (Asn1Encodable ae in ocspValsSeq) + { + BasicOcspResponse.GetInstance(ae.ToAsn1Object()); + } + this.ocspVals = ocspValsSeq; + break; + case 2: + this.otherRevVals = OtherRevVals.GetInstance(asn1Obj); + break; + default: + throw new ArgumentException("Illegal tag in RevocationValues", "seq"); + } + } + } + + public RevocationValues( + CertificateList[] crlVals, + BasicOcspResponse[] ocspVals, + OtherRevVals otherRevVals) + { + if (crlVals != null) + { + this.crlVals = new DerSequence(crlVals); + } + + if (ocspVals != null) + { + this.ocspVals = new DerSequence(ocspVals); + } + + this.otherRevVals = otherRevVals; + } + + public RevocationValues( + IEnumerable crlVals, + IEnumerable ocspVals, + OtherRevVals otherRevVals) + { + if (crlVals != null) + { + this.crlVals = new DerSequence( + Asn1EncodableVector.FromEnumerable(crlVals)); + } + + if (ocspVals != null) + { + this.ocspVals = new DerSequence( + Asn1EncodableVector.FromEnumerable(ocspVals)); + } + + this.otherRevVals = otherRevVals; + } + + public CertificateList[] GetCrlVals() + { + CertificateList[] result = new CertificateList[crlVals.Count]; + for (int i = 0; i < crlVals.Count; ++i) + { + result[i] = CertificateList.GetInstance(crlVals[i].ToAsn1Object()); + } + return result; + } + + public BasicOcspResponse[] GetOcspVals() + { + BasicOcspResponse[] result = new BasicOcspResponse[ocspVals.Count]; + for (int i = 0; i < ocspVals.Count; ++i) + { + result[i] = BasicOcspResponse.GetInstance(ocspVals[i].ToAsn1Object()); + } + return result; + } + + public OtherRevVals OtherRevVals + { + get { return otherRevVals; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptionalTagged(true, 0, crlVals); + v.AddOptionalTagged(true, 1, ocspVals); + + if (otherRevVals != null) + { + v.Add(new DerTaggedObject(true, 2, otherRevVals.ToAsn1Object())); + } + + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/RevocationValues.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/RevocationValues.cs.meta new file mode 100644 index 000000000..435654a5e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/RevocationValues.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5ef9495d1fec73844ac79e7d1baf428a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SigPolicyQualifierInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SigPolicyQualifierInfo.cs new file mode 100644 index 000000000..d3785c9e6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SigPolicyQualifierInfo.cs @@ -0,0 +1,77 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// + /// SigPolicyQualifierInfo ::= SEQUENCE { + /// sigPolicyQualifierId SigPolicyQualifierId, + /// sigQualifier ANY DEFINED BY sigPolicyQualifierId + /// } + /// + /// SigPolicyQualifierId ::= OBJECT IDENTIFIER + /// + /// + public class SigPolicyQualifierInfo + : Asn1Encodable + { + private readonly DerObjectIdentifier sigPolicyQualifierId; + private readonly Asn1Object sigQualifier; + + public static SigPolicyQualifierInfo GetInstance( + object obj) + { + if (obj == null || obj is SigPolicyQualifierInfo) + return (SigPolicyQualifierInfo) obj; + + if (obj is Asn1Sequence) + return new SigPolicyQualifierInfo((Asn1Sequence) obj); + + throw new ArgumentException( + "Unknown object in 'SigPolicyQualifierInfo' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + private SigPolicyQualifierInfo( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + if (seq.Count != 2) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + this.sigPolicyQualifierId = (DerObjectIdentifier) seq[0].ToAsn1Object(); + this.sigQualifier = seq[1].ToAsn1Object(); + } + + public SigPolicyQualifierInfo( + DerObjectIdentifier sigPolicyQualifierId, + Asn1Encodable sigQualifier) + { + this.sigPolicyQualifierId = sigPolicyQualifierId; + this.sigQualifier = sigQualifier.ToAsn1Object(); + } + + public DerObjectIdentifier SigPolicyQualifierId + { + get { return sigPolicyQualifierId; } + } + + public Asn1Object SigQualifier + { + get { return sigQualifier; } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(sigPolicyQualifierId, sigQualifier); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SigPolicyQualifierInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SigPolicyQualifierInfo.cs.meta new file mode 100644 index 000000000..dd9f7e59e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SigPolicyQualifierInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 48561c565612aa04f9aaf7c1d22a3f6b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignaturePolicyId.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignaturePolicyId.cs new file mode 100644 index 000000000..d24690bce --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignaturePolicyId.cs @@ -0,0 +1,146 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// + /// SignaturePolicyId ::= SEQUENCE { + /// sigPolicyIdentifier SigPolicyId, + /// sigPolicyHash SigPolicyHash, + /// sigPolicyQualifiers SEQUENCE SIZE (1..MAX) OF SigPolicyQualifierInfo OPTIONAL + /// } + /// + /// SigPolicyId ::= OBJECT IDENTIFIER + /// + /// SigPolicyHash ::= OtherHashAlgAndValue + /// + /// + public class SignaturePolicyId + : Asn1Encodable + { + private readonly DerObjectIdentifier sigPolicyIdentifier; + private readonly OtherHashAlgAndValue sigPolicyHash; + private readonly Asn1Sequence sigPolicyQualifiers; + + public static SignaturePolicyId GetInstance( + object obj) + { + if (obj == null || obj is SignaturePolicyId) + return (SignaturePolicyId) obj; + + if (obj is Asn1Sequence) + return new SignaturePolicyId((Asn1Sequence) obj); + + throw new ArgumentException( + "Unknown object in 'SignaturePolicyId' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + private SignaturePolicyId( + Asn1Sequence seq) + { + if (seq == null) + throw new ArgumentNullException("seq"); + if (seq.Count < 2 || seq.Count > 3) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + this.sigPolicyIdentifier = (DerObjectIdentifier) seq[0].ToAsn1Object(); + this.sigPolicyHash = OtherHashAlgAndValue.GetInstance(seq[1].ToAsn1Object()); + + if (seq.Count > 2) + { + this.sigPolicyQualifiers = (Asn1Sequence) seq[2].ToAsn1Object(); + } + } + + public SignaturePolicyId( + DerObjectIdentifier sigPolicyIdentifier, + OtherHashAlgAndValue sigPolicyHash) + : this(sigPolicyIdentifier, sigPolicyHash, null) + { + } + + public SignaturePolicyId( + DerObjectIdentifier sigPolicyIdentifier, + OtherHashAlgAndValue sigPolicyHash, + params SigPolicyQualifierInfo[] sigPolicyQualifiers) + { + if (sigPolicyIdentifier == null) + throw new ArgumentNullException("sigPolicyIdentifier"); + if (sigPolicyHash == null) + throw new ArgumentNullException("sigPolicyHash"); + + this.sigPolicyIdentifier = sigPolicyIdentifier; + this.sigPolicyHash = sigPolicyHash; + + if (sigPolicyQualifiers != null) + { + this.sigPolicyQualifiers = new DerSequence(sigPolicyQualifiers); + } + } + + public SignaturePolicyId( + DerObjectIdentifier sigPolicyIdentifier, + OtherHashAlgAndValue sigPolicyHash, + IEnumerable sigPolicyQualifiers) + { + if (sigPolicyIdentifier == null) + throw new ArgumentNullException("sigPolicyIdentifier"); + if (sigPolicyHash == null) + throw new ArgumentNullException("sigPolicyHash"); + + this.sigPolicyIdentifier = sigPolicyIdentifier; + this.sigPolicyHash = sigPolicyHash; + + if (sigPolicyQualifiers != null) + { + this.sigPolicyQualifiers = new DerSequence( + Asn1EncodableVector.FromEnumerable(sigPolicyQualifiers)); + } + } + + public DerObjectIdentifier SigPolicyIdentifier + { + get { return sigPolicyIdentifier; } + } + + public OtherHashAlgAndValue SigPolicyHash + { + get { return sigPolicyHash; } + } + + public SigPolicyQualifierInfo[] GetSigPolicyQualifiers() + { + if (sigPolicyQualifiers == null) + return null; + + SigPolicyQualifierInfo[] infos = new SigPolicyQualifierInfo[sigPolicyQualifiers.Count]; + for (int i = 0; i < sigPolicyQualifiers.Count; ++i) + { + infos[i] = SigPolicyQualifierInfo.GetInstance(sigPolicyQualifiers[i]); + } + return infos; + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector( + sigPolicyIdentifier, sigPolicyHash.ToAsn1Object()); + + if (sigPolicyQualifiers != null) + { + v.Add(sigPolicyQualifiers.ToAsn1Object()); + } + + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignaturePolicyId.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignaturePolicyId.cs.meta new file mode 100644 index 000000000..30422fcdb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignaturePolicyId.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6902922cff414ce4dbc76162dba1ffc9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignaturePolicyIdentifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignaturePolicyIdentifier.cs new file mode 100644 index 000000000..4d7d75748 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignaturePolicyIdentifier.cs @@ -0,0 +1,70 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /// + /// + /// SignaturePolicyIdentifier ::= CHOICE { + /// SignaturePolicyId SignaturePolicyId, + /// SignaturePolicyImplied SignaturePolicyImplied + /// } + /// + /// SignaturePolicyImplied ::= NULL + /// + /// + public class SignaturePolicyIdentifier + : Asn1Encodable, IAsn1Choice + { + private readonly SignaturePolicyId sigPolicy; + + public static SignaturePolicyIdentifier GetInstance( + object obj) + { + if (obj == null || obj is SignaturePolicyIdentifier) + return (SignaturePolicyIdentifier) obj; + + if (obj is SignaturePolicyId) + return new SignaturePolicyIdentifier((SignaturePolicyId) obj); + + if (obj is Asn1Null) + return new SignaturePolicyIdentifier(); + + throw new ArgumentException( + "Unknown object in 'SignaturePolicyIdentifier' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + public SignaturePolicyIdentifier() + { + this.sigPolicy = null; + } + + public SignaturePolicyIdentifier( + SignaturePolicyId signaturePolicyId) + { + if (signaturePolicyId == null) + throw new ArgumentNullException("signaturePolicyId"); + + this.sigPolicy = signaturePolicyId; + } + + public SignaturePolicyId SignaturePolicyId + { + get { return sigPolicy; } + } + + public override Asn1Object ToAsn1Object() + { + return sigPolicy == null + ? DerNull.Instance + : sigPolicy.ToAsn1Object(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignaturePolicyIdentifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignaturePolicyIdentifier.cs.meta new file mode 100644 index 000000000..3ff2cb12f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignaturePolicyIdentifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 88b8dce751cd3ce46b923eb32d31d99c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignerAttribute.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignerAttribute.cs new file mode 100644 index 000000000..fe9878234 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignerAttribute.cs @@ -0,0 +1,101 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + public class SignerAttribute + : Asn1Encodable + { + private Asn1Sequence claimedAttributes; + private AttributeCertificate certifiedAttributes; + + public static SignerAttribute GetInstance( + object obj) + { + if (obj == null || obj is SignerAttribute) + return (SignerAttribute) obj; + + if (obj is Asn1Sequence) + return new SignerAttribute(obj); + + throw new ArgumentException( + "Unknown object in 'SignerAttribute' factory: " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), + "obj"); + } + + private SignerAttribute( + object obj) + { + Asn1Sequence seq = (Asn1Sequence) obj; + DerTaggedObject taggedObject = (DerTaggedObject) seq[0]; + if (taggedObject.TagNo == 0) + { + claimedAttributes = Asn1Sequence.GetInstance(taggedObject, true); + } + else if (taggedObject.TagNo == 1) + { + certifiedAttributes = AttributeCertificate.GetInstance(taggedObject); + } + else + { + throw new ArgumentException("illegal tag.", "obj"); + } + } + + public SignerAttribute( + Asn1Sequence claimedAttributes) + { + this.claimedAttributes = claimedAttributes; + } + + public SignerAttribute( + AttributeCertificate certifiedAttributes) + { + this.certifiedAttributes = certifiedAttributes; + } + + public virtual Asn1Sequence ClaimedAttributes + { + get { return claimedAttributes; } + } + + public virtual AttributeCertificate CertifiedAttributes + { + get { return certifiedAttributes; } + } + + /** + * + *
+		*  SignerAttribute ::= SEQUENCE OF CHOICE {
+		*      claimedAttributes   [0] ClaimedAttributes,
+		*      certifiedAttributes [1] CertifiedAttributes }
+		*
+		*  ClaimedAttributes ::= SEQUENCE OF Attribute
+		*  CertifiedAttributes ::= AttributeCertificate -- as defined in RFC 3281: see clause 4.1.
+		* 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + if (claimedAttributes != null) + { + v.Add(new DerTaggedObject(0, claimedAttributes)); + } + else + { + v.Add(new DerTaggedObject(1, certifiedAttributes)); + } + + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignerAttribute.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignerAttribute.cs.meta new file mode 100644 index 000000000..69407a58c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignerAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f58fcecdd066ee741b449d23d468df72 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignerLocation.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignerLocation.cs new file mode 100644 index 000000000..f868d4154 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignerLocation.cs @@ -0,0 +1,146 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X500; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf +{ + /** + * Signer-Location attribute (RFC3126). + * + *
+	*   SignerLocation ::= SEQUENCE {
+	*       countryName        [0] DirectoryString OPTIONAL,
+	*       localityName       [1] DirectoryString OPTIONAL,
+	*       postalAddress      [2] PostalAddress OPTIONAL }
+	*
+	*   PostalAddress ::= SEQUENCE SIZE(1..6) OF DirectoryString
+	* 
+ */ + public class SignerLocation + : Asn1Encodable + { + private DirectoryString countryName; + private DirectoryString localityName; + private Asn1Sequence postalAddress; + + public SignerLocation(Asn1Sequence seq) + { + foreach (Asn1TaggedObject obj in seq) + { + switch (obj.TagNo) + { + case 0: + this.countryName = DirectoryString.GetInstance(obj, true); + break; + case 1: + this.localityName = DirectoryString.GetInstance(obj, true); + break; + case 2: + bool isExplicit = obj.IsExplicit(); // handle erroneous implicitly tagged sequences + this.postalAddress = Asn1Sequence.GetInstance(obj, isExplicit); + if (postalAddress != null && postalAddress.Count > 6) + throw new ArgumentException("postal address must contain less than 6 strings"); + break; + default: + throw new ArgumentException("illegal tag"); + } + } + } + + private SignerLocation( + DirectoryString countryName, + DirectoryString localityName, + Asn1Sequence postalAddress) + { + if (postalAddress != null && postalAddress.Count > 6) + throw new ArgumentException("postal address must contain less than 6 strings"); + + this.countryName = countryName; + this.localityName = localityName; + this.postalAddress = postalAddress; + } + + public SignerLocation( + DirectoryString countryName, + DirectoryString localityName, + DirectoryString[] postalAddress) + : this(countryName, localityName, new DerSequence(postalAddress)) + { + } + + public SignerLocation( + DerUtf8String countryName, + DerUtf8String localityName, + Asn1Sequence postalAddress) + : this(DirectoryString.GetInstance(countryName), DirectoryString.GetInstance(localityName), postalAddress) + { + } + + public static SignerLocation GetInstance(object obj) + { + if (obj == null || obj is SignerLocation) + return (SignerLocation) obj; + + return new SignerLocation(Asn1Sequence.GetInstance(obj)); + } + + public DirectoryString Country + { + get { return countryName; } + } + + public DirectoryString Locality + { + get { return localityName; } + } + + public DirectoryString[] GetPostal() + { + if (postalAddress == null) + return null; + + DirectoryString[] dirStrings = new DirectoryString[postalAddress.Count]; + for (int i = 0; i != dirStrings.Length; i++) + { + dirStrings[i] = DirectoryString.GetInstance(postalAddress[i]); + } + + return dirStrings; + } + + public Asn1Sequence PostalAddress + { + get { return postalAddress; } + } + + /** + *
+		*   SignerLocation ::= SEQUENCE {
+		*       countryName        [0] DirectoryString OPTIONAL,
+		*       localityName       [1] DirectoryString OPTIONAL,
+		*       postalAddress      [2] PostalAddress OPTIONAL }
+		*
+		*   PostalAddress ::= SEQUENCE SIZE(1..6) OF DirectoryString
+		*
+		*   DirectoryString ::= CHOICE {
+		*         teletexString           TeletexString (SIZE (1..MAX)),
+		*         printableString         PrintableString (SIZE (1..MAX)),
+		*         universalString         UniversalString (SIZE (1..MAX)),
+		*         utf8String              UTF8String (SIZE (1.. MAX)),
+		*         bmpString               BMPString (SIZE (1..MAX)) }
+		* 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptionalTagged(true, 0, countryName); + v.AddOptionalTagged(true, 1, localityName); + v.AddOptionalTagged(true, 2, postalAddress); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignerLocation.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignerLocation.cs.meta new file mode 100644 index 000000000..b853061de --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/esf/SignerLocation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f7089095be6eac84d82475eb79a5eeb1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess.meta new file mode 100644 index 000000000..d0c7803da --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: be5c7e0fbad5cce469d07efe51b4bd28 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ContentHints.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ContentHints.cs new file mode 100644 index 000000000..586bb9916 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ContentHints.cs @@ -0,0 +1,92 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ess +{ + public class ContentHints + : Asn1Encodable + { + private readonly DerUtf8String contentDescription; + private readonly DerObjectIdentifier contentType; + + public static ContentHints GetInstance( + object o) + { + if (o == null || o is ContentHints) + { + return (ContentHints)o; + } + + if (o is Asn1Sequence) + { + return new ContentHints((Asn1Sequence)o); + } + + throw new ArgumentException("unknown object in 'ContentHints' factory : " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(o) + "."); + } + + /** + * constructor + */ + private ContentHints( + Asn1Sequence seq) + { + IAsn1Convertible field = seq[0]; + if (field.ToAsn1Object() is DerUtf8String) + { + contentDescription = DerUtf8String.GetInstance(field); + contentType = DerObjectIdentifier.GetInstance(seq[1]); + } + else + { + contentType = DerObjectIdentifier.GetInstance(seq[0]); + } + } + + public ContentHints( + DerObjectIdentifier contentType) + { + this.contentType = contentType; + this.contentDescription = null; + } + + public ContentHints( + DerObjectIdentifier contentType, + DerUtf8String contentDescription) + { + this.contentType = contentType; + this.contentDescription = contentDescription; + } + + public DerObjectIdentifier ContentType + { + get { return contentType; } + } + + public DerUtf8String ContentDescription + { + get { return contentDescription; } + } + + /** + *
+		 * ContentHints ::= SEQUENCE {
+		 *   contentDescription UTF8String (SIZE (1..MAX)) OPTIONAL,
+		 *   contentType ContentType }
+		 * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptional(contentDescription); + v.Add(contentType); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ContentHints.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ContentHints.cs.meta new file mode 100644 index 000000000..a4dda05de --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ContentHints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f0d1765f5e7423941ad4b87086d833dd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ContentIdentifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ContentIdentifier.cs new file mode 100644 index 000000000..ea4c7f732 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ContentIdentifier.cs @@ -0,0 +1,71 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ess +{ + public class ContentIdentifier + : Asn1Encodable + { + private Asn1OctetString value; + + public static ContentIdentifier GetInstance( + object o) + { + if (o == null || o is ContentIdentifier) + { + return (ContentIdentifier) o; + } + + if (o is Asn1OctetString) + { + return new ContentIdentifier((Asn1OctetString) o); + } + + throw new ArgumentException( + "unknown object in 'ContentIdentifier' factory : " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(o) + "."); + } + + /** + * Create from OCTET STRING whose octets represent the identifier. + */ + public ContentIdentifier( + Asn1OctetString value) + { + this.value = value; + } + + /** + * Create from byte array representing the identifier. + */ + public ContentIdentifier( + byte[] value) + : this(new DerOctetString(value)) + { + } + + public Asn1OctetString Value + { + get { return value; } + } + + /** + * The definition of ContentIdentifier is + *
+		 * ContentIdentifier ::=  OCTET STRING
+		 * 
+ * id-aa-contentIdentifier OBJECT IDENTIFIER ::= { iso(1) + * member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + * smime(16) id-aa(2) 7 } + */ + public override Asn1Object ToAsn1Object() + { + return value; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ContentIdentifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ContentIdentifier.cs.meta new file mode 100644 index 000000000..7eb95774d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ContentIdentifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 27b1b62e343bdae41b3a77f1059287ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ESSCertID.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ESSCertID.cs new file mode 100644 index 000000000..2fadb90a1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ESSCertID.cs @@ -0,0 +1,93 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ess +{ + public class EssCertID + : Asn1Encodable + { + private Asn1OctetString certHash; + private IssuerSerial issuerSerial; + + public static EssCertID GetInstance( + object o) + { + if (o == null || o is EssCertID) + { + return (EssCertID) o; + } + + if (o is Asn1Sequence) + { + return new EssCertID((Asn1Sequence) o); + } + + throw new ArgumentException( + "unknown object in 'EssCertID' factory : " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(o) + "."); + } + + /** + * constructor + */ + public EssCertID( + Asn1Sequence seq) + { + if (seq.Count < 1 || seq.Count > 2) + { + throw new ArgumentException("Bad sequence size: " + seq.Count); + } + + this.certHash = Asn1OctetString.GetInstance(seq[0]); + + if (seq.Count > 1) + { + issuerSerial = IssuerSerial.GetInstance(seq[1]); + } + } + + public EssCertID( + byte[] hash) + { + certHash = new DerOctetString(hash); + } + + public EssCertID( + byte[] hash, + IssuerSerial issuerSerial) + { + this.certHash = new DerOctetString(hash); + this.issuerSerial = issuerSerial; + } + + public byte[] GetCertHash() + { + return certHash.GetOctets(); + } + + public IssuerSerial IssuerSerial + { + get { return issuerSerial; } + } + + /** + *
+		 * EssCertID ::= SEQUENCE {
+		 *     certHash Hash,
+		 *     issuerSerial IssuerSerial OPTIONAL }
+		 * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(certHash); + v.AddOptional(issuerSerial); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ESSCertID.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ESSCertID.cs.meta new file mode 100644 index 000000000..e7042244e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ESSCertID.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5ccdea76922a5cd40ad41188515286ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ESSCertIDv2.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ESSCertIDv2.cs new file mode 100644 index 000000000..5c26b4414 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ESSCertIDv2.cs @@ -0,0 +1,145 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ess +{ + public class EssCertIDv2 + : Asn1Encodable + { + private readonly AlgorithmIdentifier hashAlgorithm; + private readonly byte[] certHash; + private readonly IssuerSerial issuerSerial; + + private static readonly AlgorithmIdentifier DefaultAlgID = new AlgorithmIdentifier( + NistObjectIdentifiers.IdSha256); + + public static EssCertIDv2 GetInstance(object obj) + { + if (obj == null) + return null; + EssCertIDv2 existing = obj as EssCertIDv2; + if (existing != null) + return existing; + return new EssCertIDv2(Asn1Sequence.GetInstance(obj)); + } + + private EssCertIDv2( + Asn1Sequence seq) + { + if (seq.Count > 3) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + int count = 0; + + if (seq[0] is Asn1OctetString) + { + // Default value + this.hashAlgorithm = DefaultAlgID; + } + else + { + this.hashAlgorithm = AlgorithmIdentifier.GetInstance(seq[count++].ToAsn1Object()); + } + + this.certHash = Asn1OctetString.GetInstance(seq[count++].ToAsn1Object()).GetOctets(); + + if (seq.Count > count) + { + this.issuerSerial = IssuerSerial.GetInstance( + Asn1Sequence.GetInstance(seq[count].ToAsn1Object())); + } + } + + public EssCertIDv2(byte[] certHash) + : this(null, certHash, null) + { + } + + public EssCertIDv2( + AlgorithmIdentifier algId, + byte[] certHash) + : this(algId, certHash, null) + { + } + + public EssCertIDv2( + byte[] certHash, + IssuerSerial issuerSerial) + : this(null, certHash, issuerSerial) + { + } + + public EssCertIDv2( + AlgorithmIdentifier algId, + byte[] certHash, + IssuerSerial issuerSerial) + { + if (algId == null) + { + // Default value + this.hashAlgorithm = DefaultAlgID; + } + else + { + this.hashAlgorithm = algId; + } + + this.certHash = certHash; + this.issuerSerial = issuerSerial; + } + + public AlgorithmIdentifier HashAlgorithm + { + get { return this.hashAlgorithm; } + } + + public byte[] GetCertHash() + { + return Arrays.Clone(certHash); + } + + public IssuerSerial IssuerSerial + { + get { return issuerSerial; } + } + + /** + *
+         * EssCertIDv2 ::=  SEQUENCE {
+         *     hashAlgorithm     AlgorithmIdentifier
+         *              DEFAULT {algorithm id-sha256},
+         *     certHash          Hash,
+         *     issuerSerial      IssuerSerial OPTIONAL
+         * }
+         *
+         * Hash ::= OCTET STRING
+         *
+         * IssuerSerial ::= SEQUENCE {
+         *     issuer         GeneralNames,
+         *     serialNumber   CertificateSerialNumber
+         * }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + if (!hashAlgorithm.Equals(DefaultAlgID)) + { + v.Add(hashAlgorithm); + } + + v.Add(new DerOctetString(certHash).ToAsn1Object()); + v.AddOptional(issuerSerial); + return new DerSequence(v); + } + + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ESSCertIDv2.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ESSCertIDv2.cs.meta new file mode 100644 index 000000000..e288d96f9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/ESSCertIDv2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 97aacaa98ec473e45b9bece6d113dd65 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/SigningCertificate.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/SigningCertificate.cs new file mode 100644 index 000000000..3fa18f19f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/SigningCertificate.cs @@ -0,0 +1,108 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ess +{ + public class SigningCertificate + : Asn1Encodable + { + private Asn1Sequence certs, policies; + + public static SigningCertificate GetInstance( + object o) + { + if (o == null || o is SigningCertificate) + { + return (SigningCertificate) o; + } + + if (o is Asn1Sequence) + { + return new SigningCertificate((Asn1Sequence) o); + } + + throw new ArgumentException( + "unknown object in 'SigningCertificate' factory : " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(o) + "."); + } + + /** + * constructors + */ + public SigningCertificate( + Asn1Sequence seq) + { + if (seq.Count < 1 || seq.Count > 2) + { + throw new ArgumentException("Bad sequence size: " + seq.Count); + } + + this.certs = Asn1Sequence.GetInstance(seq[0]); + + if (seq.Count > 1) + { + this.policies = Asn1Sequence.GetInstance(seq[1]); + } + } + + public SigningCertificate( + EssCertID essCertID) + { + certs = new DerSequence(essCertID); + } + + public EssCertID[] GetCerts() + { + EssCertID[] cs = new EssCertID[certs.Count]; + + for (int i = 0; i != certs.Count; i++) + { + cs[i] = EssCertID.GetInstance(certs[i]); + } + + return cs; + } + + public PolicyInformation[] GetPolicies() + { + if (policies == null) + { + return null; + } + + PolicyInformation[] ps = new PolicyInformation[policies.Count]; + + for (int i = 0; i != policies.Count; i++) + { + ps[i] = PolicyInformation.GetInstance(policies[i]); + } + + return ps; + } + + /** + * The definition of SigningCertificate is + *
+		 * SigningCertificate ::=  SEQUENCE {
+		 *      certs        SEQUENCE OF EssCertID,
+		 *      policies     SEQUENCE OF PolicyInformation OPTIONAL
+		 * }
+		 * 
+ * id-aa-signingCertificate OBJECT IDENTIFIER ::= { iso(1) + * member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + * smime(16) id-aa(2) 12 } + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(certs); + v.AddOptional(policies); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/SigningCertificate.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/SigningCertificate.cs.meta new file mode 100644 index 000000000..343b52420 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/SigningCertificate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ecb5cb440c6832c4397b528afb561193 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/SigningCertificateV2.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/SigningCertificateV2.cs new file mode 100644 index 000000000..9e53d8293 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/SigningCertificateV2.cs @@ -0,0 +1,112 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ess +{ + public class SigningCertificateV2 + : Asn1Encodable + { + private readonly Asn1Sequence certs; + private readonly Asn1Sequence policies; + + public static SigningCertificateV2 GetInstance( + object o) + { + if (o == null || o is SigningCertificateV2) + return (SigningCertificateV2) o; + + if (o is Asn1Sequence) + return new SigningCertificateV2((Asn1Sequence) o); + + throw new ArgumentException( + "unknown object in 'SigningCertificateV2' factory : " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(o) + "."); + } + + private SigningCertificateV2( + Asn1Sequence seq) + { + if (seq.Count < 1 || seq.Count > 2) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + this.certs = Asn1Sequence.GetInstance(seq[0].ToAsn1Object()); + + if (seq.Count > 1) + { + this.policies = Asn1Sequence.GetInstance(seq[1].ToAsn1Object()); + } + } + + public SigningCertificateV2( + EssCertIDv2 cert) + { + this.certs = new DerSequence(cert); + } + + public SigningCertificateV2( + EssCertIDv2[] certs) + { + this.certs = new DerSequence(certs); + } + + public SigningCertificateV2( + EssCertIDv2[] certs, + PolicyInformation[] policies) + { + this.certs = new DerSequence(certs); + + if (policies != null) + { + this.policies = new DerSequence(policies); + } + } + + public EssCertIDv2[] GetCerts() + { + EssCertIDv2[] certIds = new EssCertIDv2[certs.Count]; + for (int i = 0; i != certs.Count; i++) + { + certIds[i] = EssCertIDv2.GetInstance(certs[i]); + } + return certIds; + } + + public PolicyInformation[] GetPolicies() + { + if (policies == null) + return null; + + PolicyInformation[] policyInformations = new PolicyInformation[policies.Count]; + for (int i = 0; i != policies.Count; i++) + { + policyInformations[i] = PolicyInformation.GetInstance(policies[i]); + } + return policyInformations; + } + + /** + * The definition of SigningCertificateV2 is + *
+         * SigningCertificateV2 ::=  SEQUENCE {
+         *      certs        SEQUENCE OF EssCertIDv2,
+         *      policies     SEQUENCE OF PolicyInformation OPTIONAL
+         * }
+         * 
+ * id-aa-signingCertificateV2 OBJECT IDENTIFIER ::= { iso(1) + * member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + * smime(16) id-aa(2) 47 } + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(certs); + v.AddOptional(policies); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/SigningCertificateV2.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/SigningCertificateV2.cs.meta new file mode 100644 index 000000000..94a9547ef --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ess/SigningCertificateV2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f785e4cf85621947934ef4f8c805604 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gm.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gm.meta new file mode 100644 index 000000000..80c961704 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gm.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 65d7766a734038745a7014d928c85edb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gm/GMNamedCurves.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gm/GMNamedCurves.cs new file mode 100644 index 000000000..463a48d2f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gm/GMNamedCurves.cs @@ -0,0 +1,177 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.GM +{ + /// Elliptic curve registry for GM. + public static class GMNamedCurves + { + private static X9ECPoint ConfigureBasepoint(ECCurve curve, string encoding) + { + X9ECPoint G = new X9ECPoint(curve, Hex.DecodeStrict(encoding)); + WNafUtilities.ConfigureBasepoint(G.Point); + return G; + } + + private static ECCurve ConfigureCurve(ECCurve curve) + { + return curve; + } + + private static BigInteger FromHex(string hex) + { + return new BigInteger(1, Hex.DecodeStrict(hex)); + } + + internal class SM2P256V1Holder + : X9ECParametersHolder + { + private SM2P256V1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SM2P256V1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger p = FromHex("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF"); + BigInteger a = FromHex("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC"); + BigInteger b = FromHex("28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93"); + BigInteger n = FromHex("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve(p, a, b, n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0432C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class WapiP192V1Holder + : X9ECParametersHolder + { + private WapiP192V1Holder() { } + + internal static readonly X9ECParametersHolder Instance = new WapiP192V1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger p = FromHex("BDB6F4FE3E8B1D9E0DA8C0D46F4C318CEFE4AFE3B6B8551F"); + BigInteger a = FromHex("BB8E5E8FBC115E139FE6A814FE48AAA6F0ADA1AA5DF91985"); + BigInteger b = FromHex("1854BEBDC31B21B7AEFC80AB0ECD10D5B1B3308E6DBF11C1"); + BigInteger n = FromHex("BDB6F4FE3E8B1D9E0DA8C0D40FC962195DFAE76F56564677"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve(p, a, b, n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "044AD5F7048DE709AD51236DE65E4D4B482C836DC6E410664002BB3A02D4AAADACAE24817A4CA3A1B014B5270432DB27D2"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + private static readonly Dictionary objIds = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly Dictionary curves = + new Dictionary(); + private static readonly Dictionary names = + new Dictionary(); + + private static void DefineCurve(string name, DerObjectIdentifier oid, X9ECParametersHolder holder) + { + objIds.Add(name, oid); + names.Add(oid, name); + curves.Add(oid, holder); + } + + static GMNamedCurves() + { + DefineCurve("wapip192v1", GMObjectIdentifiers.wapip192v1, WapiP192V1Holder.Instance); + DefineCurve("sm2p256v1", GMObjectIdentifiers.sm2p256v1, SM2P256V1Holder.Instance); + } + + /// Look up the for the curve with the given name. + /// The name of the curve. + public static X9ECParameters GetByName(string name) + { + DerObjectIdentifier oid = GetOid(name); + return oid == null ? null : GetByOid(oid); + } + + /// Look up an for the curve with the given name. + /// + /// Allows accessing the curve without necessarily triggering the creation of the + /// full . + /// + /// The name of the curve. + public static X9ECParametersHolder GetByNameLazy(string name) + { + DerObjectIdentifier oid = GetOid(name); + return oid == null ? null : GetByOidLazy(oid); + } + + /// Look up the for the curve with the given + /// OID. + /// The OID for the curve. + public static X9ECParameters GetByOid(DerObjectIdentifier oid) + { + return GetByOidLazy(oid)?.Parameters; + } + + /// Look up an for the curve with the given + /// OID. + /// + /// Allows accessing the curve without necessarily triggering the creation of the + /// full . + /// + /// The OID for the curve. + public static X9ECParametersHolder GetByOidLazy(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(curves, oid); + } + + /// Look up the name of the curve with the given OID. + /// The OID for the curve. + public static string GetName(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(names, oid); + } + + /// Look up the OID of the curve with the given name. + /// The name of the curve. + public static DerObjectIdentifier GetOid(string name) + { + return CollectionUtilities.GetValueOrNull(objIds, name); + } + + /// Enumerate the available curve names in this registry. + public static IEnumerable Names + { + get { return CollectionUtilities.Proxy(objIds.Keys); } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gm/GMNamedCurves.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gm/GMNamedCurves.cs.meta new file mode 100644 index 000000000..afc2482e7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gm/GMNamedCurves.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 535b199f82fd148449c845d63b040acf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gm/GMObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gm/GMObjectIdentifiers.cs new file mode 100644 index 000000000..2f2b66ff0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gm/GMObjectIdentifiers.cs @@ -0,0 +1,89 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.GM +{ + public abstract class GMObjectIdentifiers + { + public static readonly DerObjectIdentifier sm_scheme = new DerObjectIdentifier("1.2.156.10197.1"); + + public static readonly DerObjectIdentifier sm6_ecb = sm_scheme.Branch("101.1"); + public static readonly DerObjectIdentifier sm6_cbc = sm_scheme.Branch("101.2"); + public static readonly DerObjectIdentifier sm6_ofb128 = sm_scheme.Branch("101.3"); + public static readonly DerObjectIdentifier sm6_cfb128 = sm_scheme.Branch("101.4"); + + public static readonly DerObjectIdentifier sm1_ecb = sm_scheme.Branch("102.1"); + public static readonly DerObjectIdentifier sm1_cbc = sm_scheme.Branch("102.2"); + public static readonly DerObjectIdentifier sm1_ofb128 = sm_scheme.Branch("102.3"); + public static readonly DerObjectIdentifier sm1_cfb128 = sm_scheme.Branch("102.4"); + public static readonly DerObjectIdentifier sm1_cfb1 = sm_scheme.Branch("102.5"); + public static readonly DerObjectIdentifier sm1_cfb8 = sm_scheme.Branch("102.6"); + + public static readonly DerObjectIdentifier ssf33_ecb = sm_scheme.Branch("103.1"); + public static readonly DerObjectIdentifier ssf33_cbc = sm_scheme.Branch("103.2"); + public static readonly DerObjectIdentifier ssf33_ofb128 = sm_scheme.Branch("103.3"); + public static readonly DerObjectIdentifier ssf33_cfb128 = sm_scheme.Branch("103.4"); + public static readonly DerObjectIdentifier ssf33_cfb1 = sm_scheme.Branch("103.5"); + public static readonly DerObjectIdentifier ssf33_cfb8 = sm_scheme.Branch("103.6"); + + public static readonly DerObjectIdentifier sms4_ecb = sm_scheme.Branch("104.1"); + public static readonly DerObjectIdentifier sms4_cbc = sm_scheme.Branch("104.2"); + public static readonly DerObjectIdentifier sms4_ofb128 = sm_scheme.Branch("104.3"); + public static readonly DerObjectIdentifier sms4_cfb128 = sm_scheme.Branch("104.4"); + public static readonly DerObjectIdentifier sms4_cfb1 = sm_scheme.Branch("104.5"); + public static readonly DerObjectIdentifier sms4_cfb8 = sm_scheme.Branch("104.6"); + public static readonly DerObjectIdentifier sms4_ctr = sm_scheme.Branch("104.7"); + public static readonly DerObjectIdentifier sms4_gcm = sm_scheme.Branch("104.8"); + public static readonly DerObjectIdentifier sms4_ccm = sm_scheme.Branch("104.9"); + public static readonly DerObjectIdentifier sms4_xts = sm_scheme.Branch("104.10"); + public static readonly DerObjectIdentifier sms4_wrap = sm_scheme.Branch("104.11"); + public static readonly DerObjectIdentifier sms4_wrap_pad = sm_scheme.Branch("104.12"); + public static readonly DerObjectIdentifier sms4_ocb = sm_scheme.Branch("104.100"); + + public static readonly DerObjectIdentifier sm5 = sm_scheme.Branch("201"); + + public static readonly DerObjectIdentifier sm2p256v1 = sm_scheme.Branch("301"); + public static readonly DerObjectIdentifier sm2sign = sm_scheme.Branch("301.1"); + public static readonly DerObjectIdentifier sm2exchange = sm_scheme.Branch("301.2"); + public static readonly DerObjectIdentifier sm2encrypt = sm_scheme.Branch("301.3"); + + public static readonly DerObjectIdentifier wapip192v1 = sm_scheme.Branch("301.101"); + + public static readonly DerObjectIdentifier sm2encrypt_recommendedParameters = sm2encrypt.Branch("1"); + public static readonly DerObjectIdentifier sm2encrypt_specifiedParameters = sm2encrypt.Branch("2"); + public static readonly DerObjectIdentifier sm2encrypt_with_sm3 = sm2encrypt.Branch("2.1"); + public static readonly DerObjectIdentifier sm2encrypt_with_sha1 = sm2encrypt.Branch("2.2"); + public static readonly DerObjectIdentifier sm2encrypt_with_sha224 = sm2encrypt.Branch("2.3"); + public static readonly DerObjectIdentifier sm2encrypt_with_sha256 = sm2encrypt.Branch("2.4"); + public static readonly DerObjectIdentifier sm2encrypt_with_sha384 = sm2encrypt.Branch("2.5"); + public static readonly DerObjectIdentifier sm2encrypt_with_sha512 = sm2encrypt.Branch("2.6"); + public static readonly DerObjectIdentifier sm2encrypt_with_rmd160 = sm2encrypt.Branch("2.7"); + public static readonly DerObjectIdentifier sm2encrypt_with_whirlpool = sm2encrypt.Branch("2.8"); + public static readonly DerObjectIdentifier sm2encrypt_with_blake2b512 = sm2encrypt.Branch("2.9"); + public static readonly DerObjectIdentifier sm2encrypt_with_blake2s256 = sm2encrypt.Branch("2.10"); + public static readonly DerObjectIdentifier sm2encrypt_with_md5 = sm2encrypt.Branch("2.11"); + + public static readonly DerObjectIdentifier id_sm9PublicKey = sm_scheme.Branch("302"); + public static readonly DerObjectIdentifier sm9sign = sm_scheme.Branch("302.1"); + public static readonly DerObjectIdentifier sm9keyagreement = sm_scheme.Branch("302.2"); + public static readonly DerObjectIdentifier sm9encrypt = sm_scheme.Branch("302.3"); + + public static readonly DerObjectIdentifier sm3 = sm_scheme.Branch("401"); + + public static readonly DerObjectIdentifier hmac_sm3 = sm3.Branch("2"); + + public static readonly DerObjectIdentifier sm2sign_with_sm3 = sm_scheme.Branch("501"); + public static readonly DerObjectIdentifier sm2sign_with_sha1 = sm_scheme.Branch("502"); + public static readonly DerObjectIdentifier sm2sign_with_sha256 = sm_scheme.Branch("503"); + public static readonly DerObjectIdentifier sm2sign_with_sha512 = sm_scheme.Branch("504"); + public static readonly DerObjectIdentifier sm2sign_with_sha224 = sm_scheme.Branch("505"); + public static readonly DerObjectIdentifier sm2sign_with_sha384 = sm_scheme.Branch("506"); + public static readonly DerObjectIdentifier sm2sign_with_rmd160 = sm_scheme.Branch("507"); + public static readonly DerObjectIdentifier sm2sign_with_whirlpool = sm_scheme.Branch("520"); + public static readonly DerObjectIdentifier sm2sign_with_blake2b512 = sm_scheme.Branch("521"); + public static readonly DerObjectIdentifier sm2sign_with_blake2s256 = sm_scheme.Branch("522"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gm/GMObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gm/GMObjectIdentifiers.cs.meta new file mode 100644 index 000000000..4ae4e01ae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gm/GMObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 23f63dbcf505ada4c8f01fa93a0e2a52 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gnu.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gnu.meta new file mode 100644 index 000000000..3fb7837de --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gnu.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 38e3e44dacb703b46859a58b3956fe2e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gnu/GNUObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gnu/GNUObjectIdentifiers.cs new file mode 100644 index 000000000..55b8b3bfd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gnu/GNUObjectIdentifiers.cs @@ -0,0 +1,40 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Gnu +{ + public abstract class GnuObjectIdentifiers + { + public static readonly DerObjectIdentifier Gnu = new DerObjectIdentifier("1.3.6.1.4.1.11591.1"); // GNU Radius + public static readonly DerObjectIdentifier GnuPG = new DerObjectIdentifier("1.3.6.1.4.1.11591.2"); // GnuPG (Ägypten) + public static readonly DerObjectIdentifier Notation = new DerObjectIdentifier("1.3.6.1.4.1.11591.2.1"); // notation + public static readonly DerObjectIdentifier PkaAddress = new DerObjectIdentifier("1.3.6.1.4.1.11591.2.1.1"); // pkaAddress + public static readonly DerObjectIdentifier GnuRadar = new DerObjectIdentifier("1.3.6.1.4.1.11591.3"); // GNU Radar + public static readonly DerObjectIdentifier DigestAlgorithm = new DerObjectIdentifier("1.3.6.1.4.1.11591.12"); // digestAlgorithm + public static readonly DerObjectIdentifier Tiger192 = new DerObjectIdentifier("1.3.6.1.4.1.11591.12.2"); // TIGER/192 + public static readonly DerObjectIdentifier EncryptionAlgorithm = new DerObjectIdentifier("1.3.6.1.4.1.11591.13"); // encryptionAlgorithm + public static readonly DerObjectIdentifier Serpent = new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2"); // Serpent + public static readonly DerObjectIdentifier Serpent128Ecb = new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.1"); // Serpent-128-ECB + public static readonly DerObjectIdentifier Serpent128Cbc = new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.2"); // Serpent-128-CBC + public static readonly DerObjectIdentifier Serpent128Ofb = new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.3"); // Serpent-128-OFB + public static readonly DerObjectIdentifier Serpent128Cfb = new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.4"); // Serpent-128-CFB + public static readonly DerObjectIdentifier Serpent192Ecb = new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.21"); // Serpent-192-ECB + public static readonly DerObjectIdentifier Serpent192Cbc = new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.22"); // Serpent-192-CBC + public static readonly DerObjectIdentifier Serpent192Ofb = new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.23"); // Serpent-192-OFB + public static readonly DerObjectIdentifier Serpent192Cfb = new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.24"); // Serpent-192-CFB + public static readonly DerObjectIdentifier Serpent256Ecb = new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.41"); // Serpent-256-ECB + public static readonly DerObjectIdentifier Serpent256Cbc = new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.42"); // Serpent-256-CBC + public static readonly DerObjectIdentifier Serpent256Ofb = new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.43"); // Serpent-256-OFB + public static readonly DerObjectIdentifier Serpent256Cfb = new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.44"); // Serpent-256-CFB + public static readonly DerObjectIdentifier Crc = new DerObjectIdentifier("1.3.6.1.4.1.11591.14"); // CRC algorithms + public static readonly DerObjectIdentifier Crc32 = new DerObjectIdentifier("1.3.6.1.4.1.11591.14.1"); // CRC 32 + + /** 1.3.6.1.4.1.11591.15 - ellipticCurve */ + public static readonly DerObjectIdentifier EllipticCurve = new DerObjectIdentifier("1.3.6.1.4.1.11591.15"); + + public static readonly DerObjectIdentifier Ed25519 = EllipticCurve.Branch("1"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gnu/GNUObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gnu/GNUObjectIdentifiers.cs.meta new file mode 100644 index 000000000..0379a87ff --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/gnu/GNUObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f404fe2564f43a449f5497f81afcd2d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/iana.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/iana.meta new file mode 100644 index 000000000..fab96f15e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/iana.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3e16237bf0f5bb14e8475973550804e3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/iana/IANAObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/iana/IANAObjectIdentifiers.cs new file mode 100644 index 000000000..395ce69b7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/iana/IANAObjectIdentifiers.cs @@ -0,0 +1,22 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Iana +{ + public abstract class IanaObjectIdentifiers + { + // id-SHA1 OBJECT IDENTIFIER ::= + // {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) ipsec(8) isakmpOakley(1)} + // + + public static readonly DerObjectIdentifier IsakmpOakley = new DerObjectIdentifier("1.3.6.1.5.5.8.1"); + + public static readonly DerObjectIdentifier HmacMD5 = new DerObjectIdentifier(IsakmpOakley + ".1"); + public static readonly DerObjectIdentifier HmacSha1 = new DerObjectIdentifier(IsakmpOakley + ".2"); + + public static readonly DerObjectIdentifier HmacTiger = new DerObjectIdentifier(IsakmpOakley + ".3"); + + public static readonly DerObjectIdentifier HmacRipeMD160 = new DerObjectIdentifier(IsakmpOakley + ".4"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/iana/IANAObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/iana/IANAObjectIdentifiers.cs.meta new file mode 100644 index 000000000..d919d73a3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/iana/IANAObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8cd1511c90406684f8d5a303e45a9012 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao.meta new file mode 100644 index 000000000..df5c92012 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6ad23146b2034f54784ce73af93d939e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/CscaMasterList.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/CscaMasterList.cs new file mode 100644 index 000000000..3efc3387d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/CscaMasterList.cs @@ -0,0 +1,87 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Icao +{ + /** + * The CscaMasterList object. This object can be wrapped in a + * CMSSignedData to be published in LDAP. + * + *
+	 * CscaMasterList ::= SEQUENCE {
+	 *   version                CscaMasterListVersion,
+	 *   certList               SET OF Certificate }
+	 *   
+	 * CscaMasterListVersion :: INTEGER {v0(0)}
+	 * 
+ */ + public class CscaMasterList + : Asn1Encodable + { + private DerInteger version = new DerInteger(0); + private X509CertificateStructure[] certList; + + public static CscaMasterList GetInstance( + object obj) + { + if (obj is CscaMasterList) + return (CscaMasterList)obj; + + if (obj != null) + return new CscaMasterList(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private CscaMasterList( + Asn1Sequence seq) + { + if (seq == null || seq.Count == 0) + throw new ArgumentException("null or empty sequence passed."); + + if (seq.Count != 2) + throw new ArgumentException("Incorrect sequence size: " + seq.Count); + + this.version = DerInteger.GetInstance(seq[0]); + + Asn1Set certSet = Asn1Set.GetInstance(seq[1]); + + this.certList = new X509CertificateStructure[certSet.Count]; + for (int i = 0; i < certList.Length; i++) + { + certList[i] = X509CertificateStructure.GetInstance(certSet[i]); + } + } + + public CscaMasterList( + X509CertificateStructure[] certStructs) + { + certList = CopyCertList(certStructs); + } + + public virtual int Version + { + get { return version.IntValueExact; } + } + + public X509CertificateStructure[] GetCertStructs() + { + return CopyCertList(certList); + } + + private static X509CertificateStructure[] CopyCertList(X509CertificateStructure[] orig) + { + return (X509CertificateStructure[])orig.Clone(); + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(version, new DerSet(certList)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/CscaMasterList.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/CscaMasterList.cs.meta new file mode 100644 index 000000000..81b4aabc7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/CscaMasterList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 673e1f5e682b5fd4a85c571cec2f0a2f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/DataGroupHash.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/DataGroupHash.cs new file mode 100644 index 000000000..8bff273f2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/DataGroupHash.cs @@ -0,0 +1,85 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Icao +{ + /** + * The DataGroupHash object. + *
+    * DataGroupHash  ::=  SEQUENCE {
+    *      dataGroupNumber         DataGroupNumber,
+    *      dataGroupHashValue     OCTET STRING }
+    *
+    * DataGroupNumber ::= INTEGER {
+    *         dataGroup1    (1),
+    *         dataGroup1    (2),
+    *         dataGroup1    (3),
+    *         dataGroup1    (4),
+    *         dataGroup1    (5),
+    *         dataGroup1    (6),
+    *         dataGroup1    (7),
+    *         dataGroup1    (8),
+    *         dataGroup1    (9),
+    *         dataGroup1    (10),
+    *         dataGroup1    (11),
+    *         dataGroup1    (12),
+    *         dataGroup1    (13),
+    *         dataGroup1    (14),
+    *         dataGroup1    (15),
+    *         dataGroup1    (16) }
+    *
+    * 
+ */ + public class DataGroupHash + : Asn1Encodable + { + private readonly DerInteger dataGroupNumber; + private readonly Asn1OctetString dataGroupHashValue; + + public static DataGroupHash GetInstance(object obj) + { + if (obj is DataGroupHash) + return (DataGroupHash)obj; + + if (obj != null) + return new DataGroupHash(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private DataGroupHash(Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + this.dataGroupNumber = DerInteger.GetInstance(seq[0]); + this.dataGroupHashValue = Asn1OctetString.GetInstance(seq[1]); + } + + public DataGroupHash( + int dataGroupNumber, + Asn1OctetString dataGroupHashValue) + { + this.dataGroupNumber = new DerInteger(dataGroupNumber); + this.dataGroupHashValue = dataGroupHashValue; + } + + public int DataGroupNumber + { + get { return dataGroupNumber.IntValueExact; } + } + + public Asn1OctetString DataGroupHashValue + { + get { return dataGroupHashValue; } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(dataGroupNumber, dataGroupHashValue); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/DataGroupHash.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/DataGroupHash.cs.meta new file mode 100644 index 000000000..852ce8265 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/DataGroupHash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b2e8130e8ec694947aa88179a7b9b1c8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/ICAOObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/ICAOObjectIdentifiers.cs new file mode 100644 index 000000000..1f14c3fa1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/ICAOObjectIdentifiers.cs @@ -0,0 +1,38 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Icao +{ + public abstract class IcaoObjectIdentifiers + { + // + // base id + // + public static readonly DerObjectIdentifier IdIcao = new DerObjectIdentifier("2.23.136"); + + public static readonly DerObjectIdentifier IdIcaoMrtd = IdIcao.Branch("1"); + public static readonly DerObjectIdentifier IdIcaoMrtdSecurity = IdIcaoMrtd.Branch("1"); + + // LDS security object, see ICAO Doc 9303-Volume 2-Section IV-A3.2 + public static readonly DerObjectIdentifier IdIcaoLdsSecurityObject = IdIcaoMrtdSecurity.Branch("1"); + + // CSCA master list, see TR CSCA Countersigning and Master List issuance + public static readonly DerObjectIdentifier IdIcaoCscaMasterList = IdIcaoMrtdSecurity.Branch("2"); + public static readonly DerObjectIdentifier IdIcaoCscaMasterListSigningKey = IdIcaoMrtdSecurity.Branch("3"); + + // document type list, see draft TR LDS and PKI Maintenance, par. 3.2.1 + public static readonly DerObjectIdentifier IdIcaoDocumentTypeList = IdIcaoMrtdSecurity.Branch("4"); + + // Active Authentication protocol, see draft TR LDS and PKI Maintenance, + // par. 5.2.2 + public static readonly DerObjectIdentifier IdIcaoAAProtocolObject = IdIcaoMrtdSecurity.Branch("5"); + + // CSCA name change and key reoll-over, see draft TR LDS and PKI + // Maintenance, par. 3.2.1 + public static readonly DerObjectIdentifier IdIcaoExtensions = IdIcaoMrtdSecurity.Branch("6"); + public static readonly DerObjectIdentifier IdIcaoExtensionsNamechangekeyrollover = IdIcaoExtensions.Branch("1"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/ICAOObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/ICAOObjectIdentifiers.cs.meta new file mode 100644 index 000000000..cd668fda5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/ICAOObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b075f6182a901d141ba71d90145241b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/LDSSecurityObject.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/LDSSecurityObject.cs new file mode 100644 index 000000000..4b5aec4f0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/LDSSecurityObject.cs @@ -0,0 +1,140 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Icao +{ + /** + * The LDSSecurityObject object (V1.8). + *
+	 * LDSSecurityObject ::= SEQUENCE {
+	 *   version                LDSSecurityObjectVersion,
+	 *   hashAlgorithm          DigestAlgorithmIdentifier,
+	 *   dataGroupHashValues    SEQUENCE SIZE (2..ub-DataGroups) OF DataHashGroup,
+	 *   ldsVersionInfo         LDSVersionInfo OPTIONAL
+	 *     -- if present, version MUST be v1 }
+	 *
+	 * DigestAlgorithmIdentifier ::= AlgorithmIdentifier,
+	 *
+	 * LDSSecurityObjectVersion :: INTEGER {V0(0)}
+	 * 
+ */ + public class LdsSecurityObject + : Asn1Encodable + { + public const int UBDataGroups = 16; + + private DerInteger version = new DerInteger(0); + private AlgorithmIdentifier digestAlgorithmIdentifier; + private DataGroupHash[] datagroupHash; + private LdsVersionInfo versionInfo; + + public static LdsSecurityObject GetInstance(object obj) + { + if (obj is LdsSecurityObject) + return (LdsSecurityObject)obj; + + if (obj != null) + return new LdsSecurityObject(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private LdsSecurityObject(Asn1Sequence seq) + { + if (seq == null || seq.Count == 0) + throw new ArgumentException("null or empty sequence passed."); + + var e = seq.GetEnumerator(); + + // version + e.MoveNext(); + version = DerInteger.GetInstance(e.Current); + // digestAlgorithmIdentifier + e.MoveNext(); + digestAlgorithmIdentifier = AlgorithmIdentifier.GetInstance(e.Current); + + e.MoveNext(); + Asn1Sequence datagroupHashSeq = Asn1Sequence.GetInstance(e.Current); + + if (version.HasValue(1)) + { + e.MoveNext(); + versionInfo = LdsVersionInfo.GetInstance(e.Current); + } + + CheckDatagroupHashSeqSize(datagroupHashSeq.Count); + + datagroupHash = new DataGroupHash[datagroupHashSeq.Count]; + for (int i= 0; i< datagroupHashSeq.Count; i++) + { + datagroupHash[i] = DataGroupHash.GetInstance(datagroupHashSeq[i]); + } + } + + public LdsSecurityObject( + AlgorithmIdentifier digestAlgorithmIdentifier, + DataGroupHash[] datagroupHash) + { + this.version = new DerInteger(0); + this.digestAlgorithmIdentifier = digestAlgorithmIdentifier; + this.datagroupHash = datagroupHash; + + CheckDatagroupHashSeqSize(datagroupHash.Length); + } + + + public LdsSecurityObject( + AlgorithmIdentifier digestAlgorithmIdentifier, + DataGroupHash[] datagroupHash, + LdsVersionInfo versionInfo) + { + this.version = new DerInteger(1); + this.digestAlgorithmIdentifier = digestAlgorithmIdentifier; + this.datagroupHash = datagroupHash; + this.versionInfo = versionInfo; + + CheckDatagroupHashSeqSize(datagroupHash.Length); + } + + private void CheckDatagroupHashSeqSize(int size) + { + if (size < 2 || size > UBDataGroups) + throw new ArgumentException("wrong size in DataGroupHashValues : not in (2.."+ UBDataGroups +")"); + } + + public BigInteger Version + { + get { return version.Value; } + } + + public AlgorithmIdentifier DigestAlgorithmIdentifier + { + get { return digestAlgorithmIdentifier; } + } + + public DataGroupHash[] GetDatagroupHash() + { + return datagroupHash; + } + + public LdsVersionInfo VersionInfo + { + get { return versionInfo; } + } + + public override Asn1Object ToAsn1Object() + { + DerSequence hashSeq = new DerSequence(datagroupHash); + + Asn1EncodableVector v = new Asn1EncodableVector(version, digestAlgorithmIdentifier, hashSeq); + v.AddOptional(versionInfo); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/LDSSecurityObject.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/LDSSecurityObject.cs.meta new file mode 100644 index 000000000..0395ed04c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/LDSSecurityObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f249d42c49a0974c99a8ea26510af18 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/LDSVersionInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/LDSVersionInfo.cs new file mode 100644 index 000000000..4407e143a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/LDSVersionInfo.cs @@ -0,0 +1,65 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Icao +{ + public class LdsVersionInfo + : Asn1Encodable + { + private DerPrintableString ldsVersion; + private DerPrintableString unicodeVersion; + + public LdsVersionInfo(string ldsVersion, string unicodeVersion) + { + this.ldsVersion = new DerPrintableString(ldsVersion); + this.unicodeVersion = new DerPrintableString(unicodeVersion); + } + + private LdsVersionInfo(Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("sequence wrong size for LDSVersionInfo", "seq"); + + this.ldsVersion = DerPrintableString.GetInstance(seq[0]); + this.unicodeVersion = DerPrintableString.GetInstance(seq[1]); + } + + public static LdsVersionInfo GetInstance(object obj) + { + if (obj is LdsVersionInfo) + return (LdsVersionInfo)obj; + + if (obj != null) + return new LdsVersionInfo(Asn1Sequence.GetInstance(obj)); + + return null; + } + + public virtual string GetLdsVersion() + { + return ldsVersion.GetString(); + } + + public virtual string GetUnicodeVersion() + { + return unicodeVersion.GetString(); + } + + /** + *
+		 * LDSVersionInfo ::= SEQUENCE {
+		 *    ldsVersion PRINTABLE STRING
+		 *    unicodeVersion PRINTABLE STRING
+		 *  }
+		 * 
+ * @return + */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(ldsVersion, unicodeVersion); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/LDSVersionInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/LDSVersionInfo.cs.meta new file mode 100644 index 000000000..f0b9007d5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/icao/LDSVersionInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bc5cd50c808246b4ea60097a0befbc88 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt.meta new file mode 100644 index 000000000..d0ce4def1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f34c4124bf07f0a4a99df098156d3a27 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ISISMTTObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ISISMTTObjectIdentifiers.cs new file mode 100644 index 000000000..09678c5ac --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ISISMTTObjectIdentifiers.cs @@ -0,0 +1,181 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt +{ + public abstract class IsisMttObjectIdentifiers + { + public static readonly DerObjectIdentifier IdIsisMtt = new DerObjectIdentifier("1.3.36.8"); + + public static readonly DerObjectIdentifier IdIsisMttCP = new DerObjectIdentifier(IdIsisMtt + ".1"); + + /** + * The id-isismtt-cp-accredited OID indicates that the certificate is a + * qualified certificate according to Directive 1999/93/EC of the European + * Parliament and of the Council of 13 December 1999 on a Community + * Framework for Electronic Signatures, which additionally conforms the + * special requirements of the SigG and has been issued by an accredited CA. + */ + public static readonly DerObjectIdentifier IdIsisMttCPAccredited = new DerObjectIdentifier(IdIsisMttCP + ".1"); + + public static readonly DerObjectIdentifier IdIsisMttAT = new DerObjectIdentifier(IdIsisMtt + ".3"); + + /** + * Certificate extensionDate of certificate generation + * + *
+		 *		DateOfCertGenSyntax ::= GeneralizedTime
+		 * 
+ */ + public static readonly DerObjectIdentifier IdIsisMttATDateOfCertGen = new DerObjectIdentifier(IdIsisMttAT + ".1"); + + /** + * Attribute to indicate that the certificate holder may sign in the name of + * a third person. May also be used as extension in a certificate. + */ + public static readonly DerObjectIdentifier IdIsisMttATProcuration = new DerObjectIdentifier(IdIsisMttAT + ".2"); + + /** + * Attribute to indicate admissions to certain professions. May be used as + * attribute in attribute certificate or as extension in a certificate + */ + public static readonly DerObjectIdentifier IdIsisMttATAdmission = new DerObjectIdentifier(IdIsisMttAT + ".3"); + + /** + * Monetary limit for transactions. The QcEuMonetaryLimit QC statement MUST + * be used in new certificates in place of the extension/attribute + * MonetaryLimit since January 1, 2004. For the sake of backward + * compatibility with certificates already in use, SigG conforming + * components MUST support MonetaryLimit (as well as QcEuLimitValue). + */ + public static readonly DerObjectIdentifier IdIsisMttATMonetaryLimit = new DerObjectIdentifier(IdIsisMttAT + ".4"); + + /** + * A declaration of majority. May be used as attribute in attribute + * certificate or as extension in a certificate + */ + public static readonly DerObjectIdentifier IdIsisMttATDeclarationOfMajority = new DerObjectIdentifier(IdIsisMttAT + ".5"); + + /** + * + * Serial number of the smart card containing the corresponding private key + * + *
+		 *		ICCSNSyntax ::= OCTET STRING (SIZE(8..20))
+		 * 
+ */ + public static readonly DerObjectIdentifier IdIsisMttATIccsn = new DerObjectIdentifier(IdIsisMttAT + ".6"); + + /** + * + * Reference for a file of a smartcard that stores the public key of this + * certificate and that is used as �security anchor�. + * + *
+		 *		PKReferenceSyntax ::= OCTET STRING (SIZE(20))
+		 * 
+ */ + public static readonly DerObjectIdentifier IdIsisMttATPKReference = new DerObjectIdentifier(IdIsisMttAT + ".7"); + + /** + * Some other restriction regarding the usage of this certificate. May be + * used as attribute in attribute certificate or as extension in a + * certificate. + * + *
+		 *		RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
+		 * 
+ * + * @see BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.X509.Restriction + */ + public static readonly DerObjectIdentifier IdIsisMttATRestriction = new DerObjectIdentifier(IdIsisMttAT + ".8"); + + /** + * + * (Single)Request extension: Clients may include this extension in a + * (single) Request to request the responder to send the certificate in the + * response message along with the status information. Besides the LDAP + * service, this extension provides another mechanism for the distribution + * of certificates, which MAY optionally be provided by certificate + * repositories. + * + *
+		 *		RetrieveIfAllowed ::= BOOLEAN
+		 * 
+ */ + public static readonly DerObjectIdentifier IdIsisMttATRetrieveIfAllowed = new DerObjectIdentifier(IdIsisMttAT + ".9"); + + /** + * SingleOCSPResponse extension: The certificate requested by the client by + * inserting the RetrieveIfAllowed extension in the request, will be + * returned in this extension. + * + * @see BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.Ocsp.RequestedCertificate + */ + public static readonly DerObjectIdentifier IdIsisMttATRequestedCertificate = new DerObjectIdentifier(IdIsisMttAT + ".10"); + + /** + * Base ObjectIdentifier for naming authorities + */ + public static readonly DerObjectIdentifier IdIsisMttATNamingAuthorities = new DerObjectIdentifier(IdIsisMttAT + ".11"); + + /** + * SingleOCSPResponse extension: Date, when certificate has been published + * in the directory and status information has become available. Currently, + * accrediting authorities enforce that SigG-conforming OCSP servers include + * this extension in the responses. + * + *
+		 *		CertInDirSince ::= GeneralizedTime
+		 * 
+ */ + public static readonly DerObjectIdentifier IdIsisMttATCertInDirSince = new DerObjectIdentifier(IdIsisMttAT + ".12"); + + /** + * Hash of a certificate in OCSP. + * + * @see BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.Ocsp.CertHash + */ + public static readonly DerObjectIdentifier IdIsisMttATCertHash = new DerObjectIdentifier(IdIsisMttAT + ".13"); + + /** + *
+		 *		NameAtBirth ::= DirectoryString(SIZE(1..64)
+		 * 
+ * + * Used in + * {@link BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509.SubjectDirectoryAttributes SubjectDirectoryAttributes} + */ + public static readonly DerObjectIdentifier IdIsisMttATNameAtBirth = new DerObjectIdentifier(IdIsisMttAT + ".14"); + + /** + * Some other information of non-restrictive nature regarding the usage of + * this certificate. May be used as attribute in atribute certificate or as + * extension in a certificate. + * + *
+		 *               AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
+		 * 
+ * + * @see BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.X509.AdditionalInformationSyntax + */ + public static readonly DerObjectIdentifier IdIsisMttATAdditionalInformation = new DerObjectIdentifier(IdIsisMttAT + ".15"); + + /** + * Indicates that an attribute certificate exists, which limits the + * usability of this public key certificate. Whenever verifying a signature + * with the help of this certificate, the content of the corresponding + * attribute certificate should be concerned. This extension MUST be + * included in a PKC, if a corresponding attribute certificate (having the + * PKC as base certificate) contains some attribute that restricts the + * usability of the PKC too. Attribute certificates with restricting content + * MUST always be included in the signed document. + * + *
+		 *		LiabilityLimitationFlagSyntax ::= BOOLEAN
+		 * 
+ */ + public static readonly DerObjectIdentifier IdIsisMttATLiabilityLimitationFlag = new DerObjectIdentifier("0.2.262.1.10.12.0"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ISISMTTObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ISISMTTObjectIdentifiers.cs.meta new file mode 100644 index 000000000..f8acfccef --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ISISMTTObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5e3c9c5610f76c44f9193c35adb683d2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ocsp.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ocsp.meta new file mode 100644 index 000000000..6b8c4d03c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ocsp.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 253673684631a1e4e99ba19279b7cb38 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ocsp/CertHash.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ocsp/CertHash.cs new file mode 100644 index 000000000..96d250734 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ocsp/CertHash.cs @@ -0,0 +1,126 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.Ocsp +{ + /** + * ISIS-MTT PROFILE: The responder may include this extension in a response to + * send the hash of the requested certificate to the responder. This hash is + * cryptographically bound to the certificate and serves as evidence that the + * certificate is known to the responder (i.e. it has been issued and is present + * in the directory). Hence, this extension is a means to provide a positive + * statement of availability as described in T8.[8]. As explained in T13.[1], + * clients may rely on this information to be able to validate signatures after + * the expiry of the corresponding certificate. Hence, clients MUST support this + * extension. If a positive statement of availability is to be delivered, this + * extension syntax and OID MUST be used. + *

+ *

+ *

+	*     CertHash ::= SEQUENCE {
+	*       hashAlgorithm AlgorithmIdentifier,
+	*       certificateHash OCTET STRING
+	*     }
+	* 
+ */ + public class CertHash + : Asn1Encodable + { + private readonly AlgorithmIdentifier hashAlgorithm; + private readonly byte[] certificateHash; + + public static CertHash GetInstance( + object obj) + { + if (obj == null || obj is CertHash) + { + return (CertHash) obj; + } + + if (obj is Asn1Sequence) + { + return new CertHash((Asn1Sequence) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * Constructor from Asn1Sequence. + *

+ * The sequence is of type CertHash: + *

+ *

+		*     CertHash ::= SEQUENCE {
+		*       hashAlgorithm AlgorithmIdentifier,
+		*       certificateHash OCTET STRING
+		*     }
+		* 
+ * + * @param seq The ASN.1 sequence. + */ + private CertHash( + Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Bad sequence size: " + seq.Count); + + this.hashAlgorithm = AlgorithmIdentifier.GetInstance(seq[0]); + this.certificateHash = DerOctetString.GetInstance(seq[1]).GetOctets(); + } + + /** + * Constructor from a given details. + * + * @param hashAlgorithm The hash algorithm identifier. + * @param certificateHash The hash of the whole DER encoding of the certificate. + */ + public CertHash( + AlgorithmIdentifier hashAlgorithm, + byte[] certificateHash) + { + if (hashAlgorithm == null) + throw new ArgumentNullException("hashAlgorithm"); + if (certificateHash == null) + throw new ArgumentNullException("certificateHash"); + + this.hashAlgorithm = hashAlgorithm; + this.certificateHash = (byte[]) certificateHash.Clone(); + } + + public AlgorithmIdentifier HashAlgorithm + { + get { return hashAlgorithm; } + } + + public byte[] CertificateHash + { + get { return (byte[]) certificateHash.Clone(); } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *

+ * Returns: + *

+ *

+		*     CertHash ::= SEQUENCE {
+		*       hashAlgorithm AlgorithmIdentifier,
+		*       certificateHash OCTET STRING
+		*     }
+		* 
+ * + * @return an Asn1Object + */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(hashAlgorithm, new DerOctetString(certificateHash)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ocsp/CertHash.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ocsp/CertHash.cs.meta new file mode 100644 index 000000000..6b809fde5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ocsp/CertHash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49e52b41d04217249919b3502b7c9def +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ocsp/RequestedCertificate.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ocsp/RequestedCertificate.cs new file mode 100644 index 000000000..22556840a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ocsp/RequestedCertificate.cs @@ -0,0 +1,192 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.Ocsp +{ + /** + * ISIS-MTT-Optional: The certificate requested by the client by inserting the + * RetrieveIfAllowed extension in the request, will be returned in this + * extension. + *

+ * ISIS-MTT-SigG: The signature act allows publishing certificates only then, + * when the certificate owner gives his isExplicit permission. Accordingly, there + * may be �nondownloadable� certificates, about which the responder must provide + * status information, but MUST NOT include them in the response. Clients may + * get therefore the following three kind of answers on a single request + * including the RetrieveIfAllowed extension: + *

    + *
  • a) the responder supports the extension and is allowed to publish the + * certificate: RequestedCertificate returned including the requested + * certificate
  • + *
  • b) the responder supports the extension but is NOT allowed to publish + * the certificate: RequestedCertificate returned including an empty OCTET + * STRING
  • + *
  • c) the responder does not support the extension: RequestedCertificate is + * not included in the response
  • + *
+ * Clients requesting RetrieveIfAllowed MUST be able to handle these cases. If + * any of the OCTET STRING options is used, it MUST contain the DER encoding of + * the requested certificate. + *

+ *

+	*            RequestedCertificate ::= CHOICE {
+	*              Certificate Certificate,
+	*              publicKeyCertificate [0] EXPLICIT OCTET STRING,
+	*              attributeCertificate [1] EXPLICIT OCTET STRING
+	*            }
+	* 
+ */ + public class RequestedCertificate + : Asn1Encodable, IAsn1Choice + { + public enum Choice + { + Certificate = -1, + PublicKeyCertificate = 0, + AttributeCertificate = 1 + } + + private readonly X509CertificateStructure cert; + private readonly byte[] publicKeyCert; + private readonly byte[] attributeCert; + + public static RequestedCertificate GetInstance( + object obj) + { + if (obj == null || obj is RequestedCertificate) + { + return (RequestedCertificate) obj; + } + + if (obj is Asn1Sequence) + { + return new RequestedCertificate(X509CertificateStructure.GetInstance(obj)); + } + + if (obj is Asn1TaggedObject) + { + return new RequestedCertificate((Asn1TaggedObject) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public static RequestedCertificate GetInstance( + Asn1TaggedObject obj, + bool isExplicit) + { + if (!isExplicit) + throw new ArgumentException("choice item must be explicitly tagged"); + + return GetInstance(obj.GetObject()); + } + + private RequestedCertificate( + Asn1TaggedObject tagged) + { + switch ((Choice) tagged.TagNo) + { + case Choice.AttributeCertificate: + this.attributeCert = Asn1OctetString.GetInstance(tagged, true).GetOctets(); + break; + case Choice.PublicKeyCertificate: + this.publicKeyCert = Asn1OctetString.GetInstance(tagged, true).GetOctets(); + break; + default: + throw new ArgumentException("unknown tag number: " + tagged.TagNo); + } + } + + /** + * Constructor from a given details. + *

+ * Only one parameter can be given. All other must be null. + * + * @param certificate Given as Certificate + */ + public RequestedCertificate( + X509CertificateStructure certificate) + { + this.cert = certificate; + } + + public RequestedCertificate( + Choice type, + byte[] certificateOctets) + : this(new DerTaggedObject((int) type, new DerOctetString(certificateOctets))) + { + } + + public Choice Type + { + get + { + if (cert != null) + return Choice.Certificate; + + if (publicKeyCert != null) + return Choice.PublicKeyCertificate; + + return Choice.AttributeCertificate; + } + } + + public byte[] GetCertificateBytes() + { + if (cert != null) + { + try + { + return cert.GetEncoded(); + } + catch (IOException e) + { + throw new InvalidOperationException("can't decode certificate: " + e); + } + } + + if (publicKeyCert != null) + return publicKeyCert; + + return attributeCert; + } + + + /** + * Produce an object suitable for an Asn1OutputStream. + *

+ * Returns: + *

+ *

+		*            RequestedCertificate ::= CHOICE {
+		*              Certificate Certificate,
+		*              publicKeyCertificate [0] EXPLICIT OCTET STRING,
+		*              attributeCertificate [1] EXPLICIT OCTET STRING
+		*            }
+		* 
+ * + * @return an Asn1Object + */ + public override Asn1Object ToAsn1Object() + { + if (publicKeyCert != null) + { + return new DerTaggedObject(0, new DerOctetString(publicKeyCert)); + } + + if (attributeCert != null) + { + return new DerTaggedObject(1, new DerOctetString(attributeCert)); + } + + return cert.ToAsn1Object(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ocsp/RequestedCertificate.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ocsp/RequestedCertificate.cs.meta new file mode 100644 index 000000000..82ae2b3bf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/ocsp/RequestedCertificate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c972793f90bc37f4c8ad96a494f360fd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509.meta new file mode 100644 index 000000000..972127090 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 75de97a9b8a0a08478e4959ccc72a4a2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/AdditionalInformationSyntax.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/AdditionalInformationSyntax.cs new file mode 100644 index 000000000..7a9b7ca21 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/AdditionalInformationSyntax.cs @@ -0,0 +1,75 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X500; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.X509 +{ + /** + * Some other information of non-restrictive nature regarding the usage of this + * certificate. + * + *
+	*    AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
+	* 
+ */ + public class AdditionalInformationSyntax + : Asn1Encodable + { + private readonly DirectoryString information; + + public static AdditionalInformationSyntax GetInstance( + object obj) + { + if (obj is AdditionalInformationSyntax) + return (AdditionalInformationSyntax) obj; + + if (obj is IAsn1String) + return new AdditionalInformationSyntax(DirectoryString.GetInstance(obj)); + + throw new ArgumentException("Unknown object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + private AdditionalInformationSyntax( + DirectoryString information) + { + this.information = information; + } + + /** + * Constructor from a given details. + * + * @param information The describtion of the information. + */ + public AdditionalInformationSyntax( + string information) + { + this.information = new DirectoryString(information); + } + + public virtual DirectoryString Information + { + get { return information; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *

+ * Returns: + *

+ *

+		*   AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
+		* 
+ * + * @return an Asn1Object + */ + public override Asn1Object ToAsn1Object() + { + return information.ToAsn1Object(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/AdditionalInformationSyntax.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/AdditionalInformationSyntax.cs.meta new file mode 100644 index 000000000..4565f1c70 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/AdditionalInformationSyntax.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 21d333e8be430d74eab3c4a558acb8eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/AdmissionSyntax.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/AdmissionSyntax.cs new file mode 100644 index 000000000..f7e23422b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/AdmissionSyntax.cs @@ -0,0 +1,279 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.X509 +{ + /** + * Attribute to indicate admissions to certain professions. + *

+ *

+    *     AdmissionSyntax ::= SEQUENCE
+    *     {
+    *       admissionAuthority GeneralName OPTIONAL,
+    *       contentsOfAdmissions SEQUENCE OF Admissions
+    *     }
+    * 

+ * Admissions ::= SEQUENCE + * { + * admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + * namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + * professionInfos SEQUENCE OF ProfessionInfo + * } + *

+ * NamingAuthority ::= SEQUENCE + * { + * namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + * namingAuthorityUrl IA5String OPTIONAL, + * namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + * } + *

+ * ProfessionInfo ::= SEQUENCE + * { + * namingAuthority [0] EXPLICIT NamingAuthority OPTIONAL, + * professionItems SEQUENCE OF DirectoryString (SIZE(1..128)), + * professionOIDs SEQUENCE OF OBJECT IDENTIFIER OPTIONAL, + * registrationNumber PrintableString(SIZE(1..128)) OPTIONAL, + * addProfessionInfo OCTET STRING OPTIONAL + * } + *

+ *

+ *

+ * ISIS-MTT PROFILE: The relatively complex structure of AdmissionSyntax + * supports the following concepts and requirements: + *

    + *
  • External institutions (e.g. professional associations, chambers, unions, + * administrative bodies, companies, etc.), which are responsible for granting + * and verifying professional admissions, are indicated by means of the data + * field admissionAuthority. An admission authority is indicated by a + * GeneralName object. Here an X.501 directory name (distinguished name) can be + * indicated in the field directoryName, a URL address can be indicated in the + * field uniformResourceIdentifier, and an object identifier can be indicated in + * the field registeredId.
  • + *
  • The names of authorities which are responsible for the administration of + * title registers are indicated in the data field namingAuthority. The name of + * the authority can be identified by an object identifier in the field + * namingAuthorityId, by means of a text string in the field + * namingAuthorityText, by means of a URL address in the field + * namingAuthorityUrl, or by a combination of them. For example, the text string + * can contain the name of the authority, the country and the name of the title + * register. The URL-option refers to a web page which contains lists with + * officially registered professions (text and possibly OID) as well as + * further information on these professions. Object identifiers for the + * component namingAuthorityId are grouped under the OID-branch + * id-isis-at-namingAuthorities and must be applied for.
  • + *
  • See http://www.teletrust.de/anwend.asp?Id=30200&Sprache=E_&HomePG=0 + * for an application form and http://www.teletrust.de/links.asp?id=30220,11 + * for an overview of registered naming authorities.
  • + *
  • By means of the data type ProfessionInfo certain professions, + * specializations, disciplines, fields of activity, etc. are identified. A + * profession is represented by one or more text strings, resp. profession OIDs + * in the fields professionItems and professionOIDs and by a registration number + * in the field registrationNumber. An indication in text form must always be + * present, whereas the other indications are optional. The component + * addProfessionInfo may contain additional applicationspecific information in + * DER-encoded form.
  • + *
+ *

+ * By means of different namingAuthority-OIDs or profession OIDs hierarchies of + * professions, specializations, disciplines, fields of activity, etc. can be + * expressed. The issuing admission authority should always be indicated (field + * admissionAuthority), whenever a registration number is presented. Still, + * information on admissions can be given without indicating an admission or a + * naming authority by the exclusive use of the component professionItems. In + * this case the certification authority is responsible for the verification of + * the admission information. + *

+ *

+ *

+ * This attribute is single-valued. Still, several admissions can be captured in + * the sequence structure of the component contentsOfAdmissions of + * AdmissionSyntax or in the component professionInfos of Admissions. The + * component admissionAuthority of AdmissionSyntax serves as default value for + * the component admissionAuthority of Admissions. Within the latter component + * the default value can be overwritten, in case that another authority is + * responsible. The component namingAuthority of Admissions serves as a default + * value for the component namingAuthority of ProfessionInfo. Within the latter + * component the default value can be overwritten, in case that another naming + * authority needs to be recorded. + *

+ * The length of the string objects is limited to 128 characters. It is + * recommended to indicate a namingAuthorityURL in all issued attribute + * certificates. If a namingAuthorityURL is indicated, the field professionItems + * of ProfessionInfo should contain only registered titles. If the field + * professionOIDs exists, it has to contain the OIDs of the professions listed + * in professionItems in the same order. In general, the field professionInfos + * should contain only one entry, unless the admissions that are to be listed + * are logically connected (e.g. they have been issued under the same admission + * number). + * + * @see BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.X509.Admissions + * @see BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.X509.ProfessionInfo + * @see BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.X509.NamingAuthority + */ + public class AdmissionSyntax + : Asn1Encodable + { + private readonly GeneralName admissionAuthority; + private readonly Asn1Sequence contentsOfAdmissions; + + public static AdmissionSyntax GetInstance( + object obj) + { + if (obj == null || obj is AdmissionSyntax) + { + return (AdmissionSyntax)obj; + } + + if (obj is Asn1Sequence) + { + return new AdmissionSyntax((Asn1Sequence)obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * Constructor from Asn1Sequence. + *

+ * The sequence is of type ProcurationSyntax: + *

+ *

+        *     AdmissionSyntax ::= SEQUENCE
+        *     {
+        *       admissionAuthority GeneralName OPTIONAL,
+        *       contentsOfAdmissions SEQUENCE OF Admissions
+        *     }
+        * 

+ * Admissions ::= SEQUENCE + * { + * admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + * namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + * professionInfos SEQUENCE OF ProfessionInfo + * } + *

+ * NamingAuthority ::= SEQUENCE + * { + * namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + * namingAuthorityUrl IA5String OPTIONAL, + * namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + * } + *

+ * ProfessionInfo ::= SEQUENCE + * { + * namingAuthority [0] EXPLICIT NamingAuthority OPTIONAL, + * professionItems SEQUENCE OF DirectoryString (SIZE(1..128)), + * professionOIDs SEQUENCE OF OBJECT IDENTIFIER OPTIONAL, + * registrationNumber PrintableString(SIZE(1..128)) OPTIONAL, + * addProfessionInfo OCTET STRING OPTIONAL + * } + *

+ * + * @param seq The ASN.1 sequence. + */ + private AdmissionSyntax( + Asn1Sequence seq) + { + switch (seq.Count) + { + case 1: + this.contentsOfAdmissions = DerSequence.GetInstance(seq[0]); + break; + case 2: + admissionAuthority = GeneralName.GetInstance(seq[0]); + contentsOfAdmissions = DerSequence.GetInstance(seq[1]); + break; + default: + throw new ArgumentException("Bad sequence size: " + seq.Count); + } + } + + /** + * Constructor from given details. + * + * @param admissionAuthority The admission authority. + * @param contentsOfAdmissions The admissions. + */ + public AdmissionSyntax( + GeneralName admissionAuthority, + Asn1Sequence contentsOfAdmissions) + { + this.admissionAuthority = admissionAuthority; + this.contentsOfAdmissions = contentsOfAdmissions; + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *

+ * Returns: + *

+ *

+        *     AdmissionSyntax ::= SEQUENCE
+        *     {
+        *       admissionAuthority GeneralName OPTIONAL,
+        *       contentsOfAdmissions SEQUENCE OF Admissions
+        *     }
+        * 

+ * Admissions ::= SEQUENCE + * { + * admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + * namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + * professionInfos SEQUENCE OF ProfessionInfo + * } + *

+ * NamingAuthority ::= SEQUENCE + * { + * namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + * namingAuthorityUrl IA5String OPTIONAL, + * namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + * } + *

+ * ProfessionInfo ::= SEQUENCE + * { + * namingAuthority [0] EXPLICIT NamingAuthority OPTIONAL, + * professionItems SEQUENCE OF DirectoryString (SIZE(1..128)), + * professionOIDs SEQUENCE OF OBJECT IDENTIFIER OPTIONAL, + * registrationNumber PrintableString(SIZE(1..128)) OPTIONAL, + * addProfessionInfo OCTET STRING OPTIONAL + * } + *

+ * + * @return an Asn1Object + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptional(admissionAuthority); + v.Add(contentsOfAdmissions); + return new DerSequence(v); + } + + /** + * @return Returns the admissionAuthority if present, null otherwise. + */ + public virtual GeneralName AdmissionAuthority + { + get { return admissionAuthority; } + } + + /** + * @return Returns the contentsOfAdmissions. + */ + public virtual Admissions[] GetContentsOfAdmissions() + { + Admissions[] result = new Admissions[contentsOfAdmissions.Count]; + + for (int i = 0; i < contentsOfAdmissions.Count; ++i) + { + result[i] = Admissions.GetInstance(contentsOfAdmissions[i]); + } + + return result; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/AdmissionSyntax.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/AdmissionSyntax.cs.meta new file mode 100644 index 000000000..60c7a6080 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/AdmissionSyntax.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 23a4d30aee976fe48b8a76f5b205eeed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/Admissions.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/Admissions.cs new file mode 100644 index 000000000..1e318d13a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/Admissions.cs @@ -0,0 +1,174 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.X509 +{ + /** + * An Admissions structure. + *

+ *

+	*            Admissions ::= SEQUENCE
+	*            {
+	*              admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
+	*              namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
+	*              professionInfos SEQUENCE OF ProfessionInfo
+	*            }
+	* 

+ *

+ * + * @see BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax + * @see BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.X509.ProfessionInfo + * @see BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.X509.NamingAuthority + */ + public class Admissions + : Asn1Encodable + { + private readonly GeneralName admissionAuthority; + private readonly NamingAuthority namingAuthority; + private readonly Asn1Sequence professionInfos; + + public static Admissions GetInstance(object obj) + { + if (obj == null || obj is Admissions) + return (Admissions)obj; + + if (obj is Asn1Sequence seq) + return new Admissions(seq); + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * Constructor from Asn1Sequence. + *

+ * The sequence is of type ProcurationSyntax: + *

+ *

+		*            Admissions ::= SEQUENCE
+		*            {
+		*              admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
+		*              namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
+		*              professionInfos SEQUENCE OF ProfessionInfo
+		*            }
+		* 
+ * + * @param seq The ASN.1 sequence. + */ + private Admissions(Asn1Sequence seq) + { + if (seq.Count > 3) + throw new ArgumentException("Bad sequence size: " + seq.Count); + + var e = seq.GetEnumerator(); + + e.MoveNext(); + Asn1Encodable o = e.Current; + if (o is Asn1TaggedObject tagged1) + { + switch (tagged1.TagNo) + { + case 0: + admissionAuthority = GeneralName.GetInstance((Asn1TaggedObject)o, true); + break; + case 1: + namingAuthority = NamingAuthority.GetInstance((Asn1TaggedObject)o, true); + break; + default: + throw new ArgumentException("Bad tag number: " + ((Asn1TaggedObject)o).TagNo); + } + e.MoveNext(); + o = e.Current; + } + if (o is Asn1TaggedObject tagged2) + { + switch (tagged2.TagNo) + { + case 1: + namingAuthority = NamingAuthority.GetInstance((Asn1TaggedObject)o, true); + break; + default: + throw new ArgumentException("Bad tag number: " + ((Asn1TaggedObject)o).TagNo); + } + e.MoveNext(); + o = e.Current; + } + professionInfos = Asn1Sequence.GetInstance(o); + if (e.MoveNext()) + { + throw new ArgumentException("Bad object encountered: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(e.Current)); + } + } + + /** + * Constructor from a given details. + *

+ * Parameter professionInfos is mandatory. + * + * @param admissionAuthority The admission authority. + * @param namingAuthority The naming authority. + * @param professionInfos The profession infos. + */ + public Admissions( + GeneralName admissionAuthority, + NamingAuthority namingAuthority, + ProfessionInfo[] professionInfos) + { + this.admissionAuthority = admissionAuthority; + this.namingAuthority = namingAuthority; + this.professionInfos = new DerSequence(professionInfos); + } + + public virtual GeneralName AdmissionAuthority + { + get { return admissionAuthority; } + } + + public virtual NamingAuthority NamingAuthority + { + get { return namingAuthority; } + } + + public ProfessionInfo[] GetProfessionInfos() + { + ProfessionInfo[] infos = new ProfessionInfo[professionInfos.Count]; + int count = 0; + foreach (Asn1Encodable ae in professionInfos) + { + infos[count++] = ProfessionInfo.GetInstance(ae); + } + return infos; + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *

+ * Returns: + *

+ *

+		*       Admissions ::= SEQUENCE
+		*       {
+		*         admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
+		*         namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
+		*         professionInfos SEQUENCE OF ProfessionInfo
+		*       }
+		* 

+ *

+ * + * @return an Asn1Object + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptionalTagged(true, 0, admissionAuthority); + v.AddOptionalTagged(true, 1, namingAuthority); + v.Add(professionInfos); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/Admissions.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/Admissions.cs.meta new file mode 100644 index 000000000..60fed24e6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/Admissions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f95d9ba29daeb49479f647a6f375c272 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/DeclarationOfMajority.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/DeclarationOfMajority.cs new file mode 100644 index 000000000..6918caf8c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/DeclarationOfMajority.cs @@ -0,0 +1,176 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.X509 +{ + /** + * A declaration of majority. + *

+ *

+	*           DeclarationOfMajoritySyntax ::= CHOICE
+	*           {
+	*             notYoungerThan [0] IMPLICIT INTEGER,
+	*             fullAgeAtCountry [1] IMPLICIT SEQUENCE
+	*             {
+	*               fullAge BOOLEAN DEFAULT TRUE,
+	*               country PrintableString (SIZE(2))
+	*             }
+	*             dateOfBirth [2] IMPLICIT GeneralizedTime
+	*           }
+	* 
+ *

+ * fullAgeAtCountry indicates the majority of the owner with respect to the laws + * of a specific country. + */ + public class DeclarationOfMajority + : Asn1Encodable, IAsn1Choice + { + public enum Choice + { + NotYoungerThan = 0, + FullAgeAtCountry = 1, + DateOfBirth = 2 + }; + + private readonly Asn1TaggedObject declaration; + + public DeclarationOfMajority( + int notYoungerThan) + { + declaration = new DerTaggedObject(false, 0, new DerInteger(notYoungerThan)); + } + + public DeclarationOfMajority( + bool fullAge, + string country) + { + if (country.Length > 2) + throw new ArgumentException("country can only be 2 characters"); + + DerPrintableString countryString = new DerPrintableString(country, true); + + DerSequence seq; + if (fullAge) + { + seq = new DerSequence(countryString); + } + else + { + seq = new DerSequence(DerBoolean.False, countryString); + } + + this.declaration = new DerTaggedObject(false, 1, seq); + } + + public DeclarationOfMajority( + Asn1GeneralizedTime dateOfBirth) + { + this.declaration = new DerTaggedObject(false, 2, dateOfBirth); + } + + public static DeclarationOfMajority GetInstance( + object obj) + { + if (obj == null || obj is DeclarationOfMajority) + { + return (DeclarationOfMajority) obj; + } + + if (obj is Asn1TaggedObject) + { + return new DeclarationOfMajority((Asn1TaggedObject) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + private DeclarationOfMajority( + Asn1TaggedObject o) + { + if (o.TagNo > 2) + throw new ArgumentException("Bad tag number: " + o.TagNo); + + this.declaration = o; + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *

+ * Returns: + *

+ *

+		*           DeclarationOfMajoritySyntax ::= CHOICE
+		*           {
+		*             notYoungerThan [0] IMPLICIT INTEGER,
+		*             fullAgeAtCountry [1] IMPLICIT SEQUENCE
+		*             {
+		*               fullAge BOOLEAN DEFAULT TRUE,
+		*               country PrintableString (SIZE(2))
+		*             }
+		*             dateOfBirth [2] IMPLICIT GeneralizedTime
+		*           }
+		* 
+ * + * @return an Asn1Object + */ + public override Asn1Object ToAsn1Object() + { + return declaration; + } + + public Choice Type + { + get { return (Choice) declaration.TagNo; } + } + + /** + * @return notYoungerThan if that's what we are, -1 otherwise + */ + public virtual int NotYoungerThan + { + get + { + switch ((Choice) declaration.TagNo) + { + case Choice.NotYoungerThan: + return DerInteger.GetInstance(declaration, false).IntValueExact; + default: + return -1; + } + } + } + + public virtual Asn1Sequence FullAgeAtCountry + { + get + { + switch ((Choice) declaration.TagNo) + { + case Choice.FullAgeAtCountry: + return Asn1Sequence.GetInstance(declaration, false); + default: + return null; + } + } + } + + public virtual Asn1GeneralizedTime DateOfBirth + { + get + { + switch ((Choice) declaration.TagNo) + { + case Choice.DateOfBirth: + return Asn1GeneralizedTime.GetInstance(declaration, false); + default: + return null; + } + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/DeclarationOfMajority.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/DeclarationOfMajority.cs.meta new file mode 100644 index 000000000..eba7a61a0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/DeclarationOfMajority.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f20d111cf7a822747b272a88f13eb245 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/MonetaryLimit.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/MonetaryLimit.cs new file mode 100644 index 000000000..a3fa7198a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/MonetaryLimit.cs @@ -0,0 +1,126 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.X509 +{ + /** + * Monetary limit for transactions. The QcEuMonetaryLimit QC statement MUST be + * used in new certificates in place of the extension/attribute MonetaryLimit + * since January 1, 2004. For the sake of backward compatibility with + * certificates already in use, components SHOULD support MonetaryLimit (as well + * as QcEuLimitValue). + *

+ * Indicates a monetary limit within which the certificate holder is authorized + * to act. (This value DOES NOT express a limit on the liability of the + * certification authority). + *

+ *

+	*    MonetaryLimitSyntax ::= SEQUENCE
+	*    {
+	*      currency PrintableString (SIZE(3)),
+	*      amount INTEGER,
+	*      exponent INTEGER
+	*    }
+	* 
+ *

+ * currency must be the ISO code. + *

+ * value = amount�10*exponent + */ + public class MonetaryLimit + : Asn1Encodable + { + private readonly DerPrintableString currency; + private readonly DerInteger amount; + private readonly DerInteger exponent; + + public static MonetaryLimit GetInstance( + object obj) + { + if (obj == null || obj is MonetaryLimit) + { + return (MonetaryLimit) obj; + } + + if (obj is Asn1Sequence) + { + return new MonetaryLimit(Asn1Sequence.GetInstance(obj)); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + private MonetaryLimit( + Asn1Sequence seq) + { + if (seq.Count != 3) + throw new ArgumentException("Bad sequence size: " + seq.Count); + + currency = DerPrintableString.GetInstance(seq[0]); + amount = DerInteger.GetInstance(seq[1]); + exponent = DerInteger.GetInstance(seq[2]); + } + + /** + * Constructor from a given details. + *

+ *

+ * value = amount�10^exponent + * + * @param currency The currency. Must be the ISO code. + * @param amount The amount + * @param exponent The exponent + */ + public MonetaryLimit( + string currency, + int amount, + int exponent) + { + this.currency = new DerPrintableString(currency, true); + this.amount = new DerInteger(amount); + this.exponent = new DerInteger(exponent); + } + + public virtual string Currency + { + get { return currency.GetString(); } + } + + public virtual BigInteger Amount + { + get { return amount.Value; } + } + + public virtual BigInteger Exponent + { + get { return exponent.Value; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *

+ * Returns: + *

+ *

+		*    MonetaryLimitSyntax ::= SEQUENCE
+		*    {
+		*      currency PrintableString (SIZE(3)),
+		*      amount INTEGER,
+		*      exponent INTEGER
+		*    }
+		* 
+ * + * @return an Asn1Object + */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(currency, amount, exponent); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/MonetaryLimit.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/MonetaryLimit.cs.meta new file mode 100644 index 000000000..b2ce7530b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/MonetaryLimit.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b033addc86f1284881821ac60593581 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/NamingAuthority.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/NamingAuthority.cs new file mode 100644 index 000000000..781fa7236 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/NamingAuthority.cs @@ -0,0 +1,206 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X500; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.X509 +{ + /** + * Names of authorities which are responsible for the administration of title + * registers. + * + *
+	*             NamingAuthority ::= SEQUENCE 
+	*             {
+	*               namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
+	*               namingAuthorityUrl IA5String OPTIONAL,
+	*               namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
+	*             }
+	* 
+ * @see BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax + * + */ + public class NamingAuthority + : Asn1Encodable + { + /** + * Profession OIDs should always be defined under the OID branch of the + * responsible naming authority. At the time of this writing, the work group + * �Recht, Wirtschaft, Steuern� (�Law, Economy, Taxes�) is registered as the + * first naming authority under the OID id-isismtt-at-namingAuthorities. + */ + public static readonly DerObjectIdentifier IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + = new DerObjectIdentifier(IsisMttObjectIdentifiers.IdIsisMttATNamingAuthorities + ".1"); + + private readonly DerObjectIdentifier namingAuthorityID; + private readonly string namingAuthorityUrl; + private readonly DirectoryString namingAuthorityText; + + public static NamingAuthority GetInstance(object obj) + { + if (obj == null || obj is NamingAuthority) + return (NamingAuthority) obj; + + if (obj is Asn1Sequence seq) + return new NamingAuthority(seq); + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public static NamingAuthority GetInstance(Asn1TaggedObject obj, bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit)); + } + + /** + * Constructor from Asn1Sequence. + *

+ *

+ *

+		*             NamingAuthority ::= SEQUENCE
+		*             {
+		*               namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
+		*               namingAuthorityUrl IA5String OPTIONAL,
+		*               namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
+		*             }
+		* 
+ * + * @param seq The ASN.1 sequence. + */ + private NamingAuthority(Asn1Sequence seq) + { + if (seq.Count > 3) + throw new ArgumentException("Bad sequence size: " + seq.Count); + + var e = seq.GetEnumerator(); + + if (e.MoveNext()) + { + Asn1Encodable o = e.Current; + if (o is DerObjectIdentifier oid) + { + namingAuthorityID = oid; + } + else if (o is DerIA5String ia5) + { + namingAuthorityUrl = ia5.GetString(); + } + else if (o is IAsn1String) + { + namingAuthorityText = DirectoryString.GetInstance(o); + } + else + { + throw new ArgumentException("Bad object encountered: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(o)); + } + } + + if (e.MoveNext()) + { + Asn1Encodable o = e.Current; + if (o is DerIA5String ia5) + { + namingAuthorityUrl = ia5.GetString(); + } + else if (o is IAsn1String) + { + namingAuthorityText = DirectoryString.GetInstance(o); + } + else + { + throw new ArgumentException("Bad object encountered: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(o)); + } + } + + if (e.MoveNext()) + { + Asn1Encodable o = e.Current; + if (o is IAsn1String) + { + namingAuthorityText = DirectoryString.GetInstance(o); + } + else + { + throw new ArgumentException("Bad object encountered: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(o)); + } + } + } + + /** + * @return Returns the namingAuthorityID. + */ + public virtual DerObjectIdentifier NamingAuthorityID + { + get { return namingAuthorityID; } + } + + /** + * @return Returns the namingAuthorityText. + */ + public virtual DirectoryString NamingAuthorityText + { + get { return namingAuthorityText; } + } + + /** + * @return Returns the namingAuthorityUrl. + */ + public virtual string NamingAuthorityUrl + { + get { return namingAuthorityUrl; } + } + + /** + * Constructor from given details. + *

+ * All parameters can be combined. + * + * @param namingAuthorityID ObjectIdentifier for naming authority. + * @param namingAuthorityUrl URL for naming authority. + * @param namingAuthorityText Textual representation of naming authority. + */ + public NamingAuthority( + DerObjectIdentifier namingAuthorityID, + string namingAuthorityUrl, + DirectoryString namingAuthorityText) + { + this.namingAuthorityID = namingAuthorityID; + this.namingAuthorityUrl = namingAuthorityUrl; + this.namingAuthorityText = namingAuthorityText; + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *

+ * Returns: + *

+ *

+		*             NamingAuthority ::= SEQUENCE
+		*             {
+		*               namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
+		*               namingAuthorityUrl IA5String OPTIONAL,
+		*               namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
+		*             }
+		* 
+ * + * @return an Asn1Object + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptional(namingAuthorityID); + + if (namingAuthorityUrl != null) + { + v.Add(new DerIA5String(namingAuthorityUrl, true)); + } + + v.AddOptional(namingAuthorityText); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/NamingAuthority.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/NamingAuthority.cs.meta new file mode 100644 index 000000000..2ab74bafc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/NamingAuthority.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59bd2c22203ef6d459836bb7661ba720 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/ProcurationSyntax.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/ProcurationSyntax.cs new file mode 100644 index 000000000..bab8a76c1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/ProcurationSyntax.cs @@ -0,0 +1,230 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X500; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.X509 +{ + /** + * Attribute to indicate that the certificate holder may sign in the name of a + * third person. + *

+ * ISIS-MTT PROFILE: The corresponding ProcurationSyntax contains either the + * name of the person who is represented (subcomponent thirdPerson) or a + * reference to his/her base certificate (in the component signingFor, + * subcomponent certRef), furthermore the optional components country and + * typeSubstitution to indicate the country whose laws apply, and respectively + * the type of procuration (e.g. manager, procuration, custody). + *

+ *

+ * ISIS-MTT PROFILE: The GeneralName MUST be of type directoryName and MAY only + * contain: - RFC3039 attributes, except pseudonym (countryName, commonName, + * surname, givenName, serialNumber, organizationName, organizationalUnitName, + * stateOrProvincename, localityName, postalAddress) and - SubjectDirectoryName + * attributes (title, dateOfBirth, placeOfBirth, gender, countryOfCitizenship, + * countryOfResidence and NameAtBirth). + *

+ *
+	*               ProcurationSyntax ::= SEQUENCE {
+	*                 country [1] EXPLICIT PrintableString(SIZE(2)) OPTIONAL,
+	*                 typeOfSubstitution [2] EXPLICIT DirectoryString (SIZE(1..128)) OPTIONAL,
+	*                 signingFor [3] EXPLICIT SigningFor 
+	*               }
+	*               
+	*               SigningFor ::= CHOICE 
+	*               { 
+	*                 thirdPerson GeneralName,
+	*                 certRef IssuerSerial 
+	*               }
+	* 
+ * + */ + public class ProcurationSyntax + : Asn1Encodable + { + private readonly string country; + private readonly DirectoryString typeOfSubstitution; + private readonly GeneralName thirdPerson; + private readonly IssuerSerial certRef; + + public static ProcurationSyntax GetInstance(object obj) + { + if (obj == null || obj is ProcurationSyntax) + return (ProcurationSyntax) obj; + + if (obj is Asn1Sequence seq) + return new ProcurationSyntax(seq); + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * Constructor from Asn1Sequence. + *

+ * The sequence is of type ProcurationSyntax: + *

+ *

+		*               ProcurationSyntax ::= SEQUENCE {
+		*                 country [1] EXPLICIT PrintableString(SIZE(2)) OPTIONAL,
+		*                 typeOfSubstitution [2] EXPLICIT DirectoryString (SIZE(1..128)) OPTIONAL,
+		*                 signingFor [3] EXPLICIT SigningFor
+		*               }
+		* 

+ * SigningFor ::= CHOICE + * { + * thirdPerson GeneralName, + * certRef IssuerSerial + * } + *

+ * + * @param seq The ASN.1 sequence. + */ + private ProcurationSyntax(Asn1Sequence seq) + { + if (seq.Count < 1 || seq.Count > 3) + throw new ArgumentException("Bad sequence size: " + seq.Count); + + var e = seq.GetEnumerator(); + + while (e.MoveNext()) + { + Asn1TaggedObject o = Asn1TaggedObject.GetInstance(e.Current); + switch (o.TagNo) + { + case 1: + country = DerPrintableString.GetInstance(o, true).GetString(); + break; + case 2: + typeOfSubstitution = DirectoryString.GetInstance(o, true); + break; + case 3: + Asn1Object signingFor = o.GetObject(); + if (signingFor is Asn1TaggedObject) + { + thirdPerson = GeneralName.GetInstance(signingFor); + } + else + { + certRef = IssuerSerial.GetInstance(signingFor); + } + break; + default: + throw new ArgumentException("Bad tag number: " + o.TagNo); + } + } + } + + /** + * Constructor from a given details. + *

+ *

+ * Either generalName or certRef MUST be + * null. + * + * @param country The country code whose laws apply. + * @param typeOfSubstitution The type of procuration. + * @param certRef Reference to certificate of the person who is represented. + */ + public ProcurationSyntax( + string country, + DirectoryString typeOfSubstitution, + IssuerSerial certRef) + { + this.country = country; + this.typeOfSubstitution = typeOfSubstitution; + this.thirdPerson = null; + this.certRef = certRef; + } + + /** + * Constructor from a given details. + *

+ *

+ * Either generalName or certRef MUST be + * null. + * + * @param country The country code whose laws apply. + * @param typeOfSubstitution The type of procuration. + * @param thirdPerson The GeneralName of the person who is represented. + */ + public ProcurationSyntax( + string country, + DirectoryString typeOfSubstitution, + GeneralName thirdPerson) + { + this.country = country; + this.typeOfSubstitution = typeOfSubstitution; + this.thirdPerson = thirdPerson; + this.certRef = null; + } + + public virtual string Country + { + get { return country; } + } + + public virtual DirectoryString TypeOfSubstitution + { + get { return typeOfSubstitution; } + } + + public virtual GeneralName ThirdPerson + { + get { return thirdPerson; } + } + + public virtual IssuerSerial CertRef + { + get { return certRef; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *

+ * Returns: + *

+ *

+		*               ProcurationSyntax ::= SEQUENCE {
+		*                 country [1] EXPLICIT PrintableString(SIZE(2)) OPTIONAL,
+		*                 typeOfSubstitution [2] EXPLICIT DirectoryString (SIZE(1..128)) OPTIONAL,
+		*                 signingFor [3] EXPLICIT SigningFor
+		*               }
+		* 

+ * SigningFor ::= CHOICE + * { + * thirdPerson GeneralName, + * certRef IssuerSerial + * } + *

+ * + * @return an Asn1Object + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + if (country != null) + { + v.Add(new DerTaggedObject(true, 1, new DerPrintableString(country, true))); + } + + v.AddOptionalTagged(true, 2, typeOfSubstitution); + + if (thirdPerson != null) + { + v.Add(new DerTaggedObject(true, 3, thirdPerson)); + } + else + { + v.Add(new DerTaggedObject(true, 3, certRef)); + } + + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/ProcurationSyntax.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/ProcurationSyntax.cs.meta new file mode 100644 index 000000000..702a5acae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/ProcurationSyntax.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9474a0a6a951b3c4abec5e6d6ff34dfd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/ProfessionInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/ProfessionInfo.cs new file mode 100644 index 000000000..eb73040ca --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/ProfessionInfo.cs @@ -0,0 +1,376 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X500; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.X509 +{ + /** + * Professions, specializations, disciplines, fields of activity, etc. + * + *
+	*               ProfessionInfo ::= SEQUENCE 
+	*               {
+	*                 namingAuthority [0] EXPLICIT NamingAuthority OPTIONAL,
+	*                 professionItems SEQUENCE OF DirectoryString (SIZE(1..128)),
+	*                 professionOids SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
+	*                 registrationNumber PrintableString(SIZE(1..128)) OPTIONAL,
+	*                 addProfessionInfo OCTET STRING OPTIONAL 
+	*               }
+	* 
+ * + * @see BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax + */ + public class ProfessionInfo + : Asn1Encodable + { + /** + * Rechtsanw�ltin + */ + public static readonly DerObjectIdentifier Rechtsanwltin = new DerObjectIdentifier( + NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".1"); + + /** + * Rechtsanwalt + */ + public static readonly DerObjectIdentifier Rechtsanwalt = new DerObjectIdentifier( + NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".2"); + + /** + * Rechtsbeistand + */ + public static readonly DerObjectIdentifier Rechtsbeistand = new DerObjectIdentifier( + NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".3"); + + /** + * Steuerberaterin + */ + public static readonly DerObjectIdentifier Steuerberaterin = new DerObjectIdentifier( + NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".4"); + + /** + * Steuerberater + */ + public static readonly DerObjectIdentifier Steuerberater = new DerObjectIdentifier( + NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".5"); + + /** + * Steuerbevollm�chtigte + */ + public static readonly DerObjectIdentifier Steuerbevollmchtigte = new DerObjectIdentifier( + NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".6"); + + /** + * Steuerbevollm�chtigter + */ + public static readonly DerObjectIdentifier Steuerbevollmchtigter = new DerObjectIdentifier( + NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".7"); + + /** + * Notarin + */ + public static readonly DerObjectIdentifier Notarin = new DerObjectIdentifier( + NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".8"); + + /** + * Notar + */ + public static readonly DerObjectIdentifier Notar = new DerObjectIdentifier( + NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".9"); + + /** + * Notarvertreterin + */ + public static readonly DerObjectIdentifier Notarvertreterin = new DerObjectIdentifier( + NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".10"); + + /** + * Notarvertreter + */ + public static readonly DerObjectIdentifier Notarvertreter = new DerObjectIdentifier( + NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".11"); + + /** + * Notariatsverwalterin + */ + public static readonly DerObjectIdentifier Notariatsverwalterin = new DerObjectIdentifier( + NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".12"); + + /** + * Notariatsverwalter + */ + public static readonly DerObjectIdentifier Notariatsverwalter = new DerObjectIdentifier( + NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".13"); + + /** + * Wirtschaftspr�ferin + */ + public static readonly DerObjectIdentifier Wirtschaftsprferin = new DerObjectIdentifier( + NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".14"); + + /** + * Wirtschaftspr�fer + */ + public static readonly DerObjectIdentifier Wirtschaftsprfer = new DerObjectIdentifier( + NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".15"); + + /** + * Vereidigte Buchpr�ferin + */ + public static readonly DerObjectIdentifier VereidigteBuchprferin = new DerObjectIdentifier( + NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".16"); + + /** + * Vereidigter Buchpr�fer + */ + public static readonly DerObjectIdentifier VereidigterBuchprfer = new DerObjectIdentifier( + NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".17"); + + /** + * Patentanw�ltin + */ + public static readonly DerObjectIdentifier Patentanwltin = new DerObjectIdentifier( + NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".18"); + + /** + * Patentanwalt + */ + public static readonly DerObjectIdentifier Patentanwalt = new DerObjectIdentifier( + NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".19"); + + private readonly NamingAuthority namingAuthority; + private readonly Asn1Sequence professionItems; + private readonly Asn1Sequence professionOids; + private readonly string registrationNumber; + private readonly Asn1OctetString addProfessionInfo; + + public static ProfessionInfo GetInstance(object obj) + { + if (obj == null || obj is ProfessionInfo) + return (ProfessionInfo) obj; + + if (obj is Asn1Sequence seq) + return new ProfessionInfo(seq); + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * Constructor from Asn1Sequence. + *

+ *

+ *

+		*               ProfessionInfo ::= SEQUENCE
+		*               {
+		*                 namingAuthority [0] EXPLICIT NamingAuthority OPTIONAL,
+		*                 professionItems SEQUENCE OF DirectoryString (SIZE(1..128)),
+		*                 professionOids SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
+		*                 registrationNumber PrintableString(SIZE(1..128)) OPTIONAL,
+		*                 addProfessionInfo OCTET STRING OPTIONAL
+		*               }
+		* 
+ * + * @param seq The ASN.1 sequence. + */ + private ProfessionInfo(Asn1Sequence seq) + { + if (seq.Count > 5) + throw new ArgumentException("Bad sequence size: " + seq.Count); + + var e = seq.GetEnumerator(); + + e.MoveNext(); + Asn1Encodable o = e.Current; + + if (o is Asn1TaggedObject ato) + { + if (ato.TagNo != 0) + throw new ArgumentException("Bad tag number: " + ato.TagNo); + + namingAuthority = NamingAuthority.GetInstance(ato, true); + e.MoveNext(); + o = e.Current; + } + + professionItems = Asn1Sequence.GetInstance(o); + + if (e.MoveNext()) + { + o = e.Current; + if (o is Asn1Sequence sequence) + { + professionOids = sequence; + } + else if (o is DerPrintableString printable) + { + registrationNumber = printable.GetString(); + } + else if (o is Asn1OctetString octets) + { + addProfessionInfo = octets; + } + else + { + throw new ArgumentException("Bad object encountered: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(o)); + } + } + + if (e.MoveNext()) + { + o = e.Current; + if (o is DerPrintableString printable) + { + registrationNumber = printable.GetString(); + } + else if (o is Asn1OctetString octets) + { + addProfessionInfo = octets; + } + else + { + throw new ArgumentException("Bad object encountered: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(o)); + } + } + + if (e.MoveNext()) + { + o = e.Current; + if (o is Asn1OctetString octets) + { + addProfessionInfo = octets; + } + else + { + throw new ArgumentException("Bad object encountered: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(o)); + } + } + } + + /** + * Constructor from given details. + *

+ * professionItems is mandatory, all other parameters are + * optional. + * + * @param namingAuthority The naming authority. + * @param professionItems Directory strings of the profession. + * @param professionOids DERObjectIdentfier objects for the + * profession. + * @param registrationNumber Registration number. + * @param addProfessionInfo Additional infos in encoded form. + */ + public ProfessionInfo( + NamingAuthority namingAuthority, + DirectoryString[] professionItems, + DerObjectIdentifier[] professionOids, + string registrationNumber, + Asn1OctetString addProfessionInfo) + { + this.namingAuthority = namingAuthority; + this.professionItems = new DerSequence(professionItems); + if (professionOids != null) + { + this.professionOids = new DerSequence(professionOids); + } + this.registrationNumber = registrationNumber; + this.addProfessionInfo = addProfessionInfo; + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *

+ * Returns: + *

+ *

+		*               ProfessionInfo ::= SEQUENCE
+		*               {
+		*                 namingAuthority [0] EXPLICIT NamingAuthority OPTIONAL,
+		*                 professionItems SEQUENCE OF DirectoryString (SIZE(1..128)),
+		*                 professionOids SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
+		*                 registrationNumber PrintableString(SIZE(1..128)) OPTIONAL,
+		*                 addProfessionInfo OCTET STRING OPTIONAL
+		*               }
+		* 
+ * + * @return an Asn1Object + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptionalTagged(true, 0, namingAuthority); + v.Add(professionItems); + v.AddOptional(professionOids); + + if (registrationNumber != null) + { + v.Add(new DerPrintableString(registrationNumber, true)); + } + + v.AddOptional(addProfessionInfo); + return new DerSequence(v); + } + + /** + * @return Returns the addProfessionInfo. + */ + public virtual Asn1OctetString AddProfessionInfo + { + get { return addProfessionInfo; } + } + + /** + * @return Returns the namingAuthority. + */ + public virtual NamingAuthority NamingAuthority + { + get { return namingAuthority; } + } + + /** + * @return Returns the professionItems. + */ + public virtual DirectoryString[] GetProfessionItems() + { + DirectoryString[] result = new DirectoryString[professionItems.Count]; + + for (int i = 0; i < professionItems.Count; ++i) + { + result[i] = DirectoryString.GetInstance(professionItems[i]); + } + + return result; + } + + /** + * @return Returns the professionOids. + */ + public virtual DerObjectIdentifier[] GetProfessionOids() + { + if (professionOids == null) + { + return new DerObjectIdentifier[0]; + } + + DerObjectIdentifier[] result = new DerObjectIdentifier[professionOids.Count]; + + for (int i = 0; i < professionOids.Count; ++i) + { + result[i] = DerObjectIdentifier.GetInstance(professionOids[i]); + } + + return result; + } + + /** + * @return Returns the registrationNumber. + */ + public virtual string RegistrationNumber + { + get { return registrationNumber; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/ProfessionInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/ProfessionInfo.cs.meta new file mode 100644 index 000000000..cf15d7072 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/ProfessionInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2057623a426c80c43aae7ccb88f3fde7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/Restriction.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/Restriction.cs new file mode 100644 index 000000000..97c1d245c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/Restriction.cs @@ -0,0 +1,83 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X500; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt.X509 +{ + /** + * Some other restriction regarding the usage of this certificate. + *

+ *

+	*  RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
+	* 
+ */ + public class Restriction + : Asn1Encodable + { + private readonly DirectoryString restriction; + + public static Restriction GetInstance(object obj) + { + if (obj is Restriction) + return (Restriction) obj; + + if (obj is IAsn1String) + return new Restriction(DirectoryString.GetInstance(obj)); + + throw new ArgumentException("Unknown object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * Constructor from DirectoryString. + *

+ * The DirectoryString is of type RestrictionSyntax: + *

+ *

+		*      RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
+		* 
+ * + * @param restriction A IAsn1String. + */ + private Restriction(DirectoryString restriction) + { + this.restriction = restriction; + } + + /** + * Constructor from a given details. + * + * @param restriction The description of the restriction. + */ + public Restriction(string restriction) + { + this.restriction = new DirectoryString(restriction); + } + + public virtual DirectoryString RestrictionString + { + get { return restriction; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *

+ * Returns: + *

+ *

+		*      RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
+		* 

+ *

+ * + * @return an Asn1Object + */ + public override Asn1Object ToAsn1Object() + { + return restriction.ToAsn1Object(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/Restriction.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/Restriction.cs.meta new file mode 100644 index 000000000..7e80d9e14 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/isismtt/x509/Restriction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b6d5432c2d3b37549a76c93a4fed9357 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/kisa.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/kisa.meta new file mode 100644 index 000000000..021f0d69a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/kisa.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 669fa057d480bd743b202f7d12974cc9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/kisa/KISAObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/kisa/KISAObjectIdentifiers.cs new file mode 100644 index 000000000..3713eaee6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/kisa/KISAObjectIdentifiers.cs @@ -0,0 +1,12 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Kisa +{ + public abstract class KisaObjectIdentifiers + { + public static readonly DerObjectIdentifier IdSeedCbc = new DerObjectIdentifier("1.2.410.200004.1.4"); + public static readonly DerObjectIdentifier IdNpkiAppCmsSeedWrap = new DerObjectIdentifier("1.2.410.200004.7.1.1.1"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/kisa/KISAObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/kisa/KISAObjectIdentifiers.cs.meta new file mode 100644 index 000000000..9ca512a1c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/kisa/KISAObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 796094cd22c787a4eb33f54473a088a5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/microsoft.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/microsoft.meta new file mode 100644 index 000000000..a8e6fa24f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/microsoft.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 248bbf2976dfbb4459acd5d2b16b17dd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/microsoft/MicrosoftObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/microsoft/MicrosoftObjectIdentifiers.cs new file mode 100644 index 000000000..b0e293551 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/microsoft/MicrosoftObjectIdentifiers.cs @@ -0,0 +1,23 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Microsoft +{ + public abstract class MicrosoftObjectIdentifiers + { + // + // Microsoft + // iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) Microsoft(311) + // + public static readonly DerObjectIdentifier Microsoft = new DerObjectIdentifier("1.3.6.1.4.1.311"); + public static readonly DerObjectIdentifier MicrosoftCertTemplateV1 = Microsoft.Branch("20.2"); + public static readonly DerObjectIdentifier MicrosoftCAVersion = Microsoft.Branch("21.1"); + public static readonly DerObjectIdentifier MicrosoftPrevCACertHash = Microsoft.Branch("21.2"); + public static readonly DerObjectIdentifier MicrosoftCrlNextPublish = Microsoft.Branch("21.4"); + public static readonly DerObjectIdentifier MicrosoftCertTemplateV2 = Microsoft.Branch("21.7"); + public static readonly DerObjectIdentifier MicrosoftAppPolicies = Microsoft.Branch("21.10"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/microsoft/MicrosoftObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/microsoft/MicrosoftObjectIdentifiers.cs.meta new file mode 100644 index 000000000..eedcc4ca2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/microsoft/MicrosoftObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7471325fadd3ab142bae369d34944f2a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc.meta new file mode 100644 index 000000000..4ae06bbb1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5ea43e51ea443414cb46f425a92b6a69 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/CAST5CBCParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/CAST5CBCParameters.cs new file mode 100644 index 000000000..0338d7007 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/CAST5CBCParameters.cs @@ -0,0 +1,78 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Misc +{ + public class Cast5CbcParameters + : Asn1Encodable + { + private readonly DerInteger keyLength; + private readonly Asn1OctetString iv; + + public static Cast5CbcParameters GetInstance( + object o) + { + if (o is Cast5CbcParameters) + { + return (Cast5CbcParameters) o; + } + + if (o is Asn1Sequence) + { + return new Cast5CbcParameters((Asn1Sequence) o); + } + + throw new ArgumentException("unknown object in Cast5CbcParameters factory"); + } + + public Cast5CbcParameters( + byte[] iv, + int keyLength) + { + this.iv = new DerOctetString(iv); + this.keyLength = new DerInteger(keyLength); + } + + private Cast5CbcParameters( + Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + iv = (Asn1OctetString) seq[0]; + keyLength = (DerInteger) seq[1]; + } + + public byte[] GetIV() + { + return Arrays.Clone(iv.GetOctets()); + } + + public int KeyLength + { + get { return keyLength.IntValueExact; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * cast5CBCParameters ::= Sequence {
+         *                           iv         OCTET STRING DEFAULT 0,
+         *                                  -- Initialization vector
+         *                           keyLength  Integer
+         *                                  -- Key length, in bits
+         *                      }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(iv, keyLength); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/CAST5CBCParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/CAST5CBCParameters.cs.meta new file mode 100644 index 000000000..513c790f7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/CAST5CBCParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 80f0404533dd69c4d8f35f1deabd4d9c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/IDEACBCPar.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/IDEACBCPar.cs new file mode 100644 index 000000000..8361d7f9b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/IDEACBCPar.cs @@ -0,0 +1,67 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Misc +{ + public class IdeaCbcPar + : Asn1Encodable + { + internal Asn1OctetString iv; + + public static IdeaCbcPar GetInstance( + object o) + { + if (o is IdeaCbcPar) + { + return (IdeaCbcPar) o; + } + + if (o is Asn1Sequence) + { + return new IdeaCbcPar((Asn1Sequence) o); + } + + throw new ArgumentException("unknown object in IDEACBCPar factory"); + } + + public IdeaCbcPar( + byte[] iv) + { + this.iv = new DerOctetString(iv); + } + + private IdeaCbcPar( + Asn1Sequence seq) + { + if (seq.Count == 1) + { + iv = (Asn1OctetString) seq[0]; + } + } + + public byte[] GetIV() + { + return iv == null ? null : iv.GetOctets(); + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * IDEA-CBCPar ::= Sequence {
+         *                      iv    OCTET STRING OPTIONAL -- exactly 8 octets
+         *                  }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptional(iv); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/IDEACBCPar.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/IDEACBCPar.cs.meta new file mode 100644 index 000000000..b6343cd83 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/IDEACBCPar.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 824ef5862fd9d344aac066430b57edd9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/MiscObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/MiscObjectIdentifiers.cs new file mode 100644 index 000000000..f44782b0b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/MiscObjectIdentifiers.cs @@ -0,0 +1,124 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Misc +{ + public abstract class MiscObjectIdentifiers + { + // + // Netscape + // iso/itu(2) joint-assign(16) us(840) uscompany(1) Netscape(113730) cert-extensions(1) } + // + public static readonly DerObjectIdentifier Netscape = new DerObjectIdentifier("2.16.840.1.113730.1"); + public static readonly DerObjectIdentifier NetscapeCertType = Netscape.Branch("1"); + public static readonly DerObjectIdentifier NetscapeBaseUrl = Netscape.Branch("2"); + public static readonly DerObjectIdentifier NetscapeRevocationUrl = Netscape.Branch("3"); + public static readonly DerObjectIdentifier NetscapeCARevocationUrl = Netscape.Branch("4"); + public static readonly DerObjectIdentifier NetscapeRenewalUrl = Netscape.Branch("7"); + public static readonly DerObjectIdentifier NetscapeCAPolicyUrl = Netscape.Branch("8"); + public static readonly DerObjectIdentifier NetscapeSslServerName = Netscape.Branch("12"); + public static readonly DerObjectIdentifier NetscapeCertComment = Netscape.Branch("13"); + + // + // Verisign + // iso/itu(2) joint-assign(16) us(840) uscompany(1) verisign(113733) cert-extensions(1) } + // + public static readonly DerObjectIdentifier Verisign = new DerObjectIdentifier("2.16.840.1.113733.1"); + + // + // CZAG - country, zip, age, and gender + // + public static readonly DerObjectIdentifier VerisignCzagExtension = Verisign.Branch("6.3"); + + public static readonly DerObjectIdentifier VerisignPrivate_6_9 = Verisign.Branch("6.9"); + public static readonly DerObjectIdentifier VerisignOnSiteJurisdictionHash = Verisign.Branch("6.11"); + public static readonly DerObjectIdentifier VerisignBitString_6_13 = Verisign.Branch("6.13"); + + // D&B D-U-N-S number + public static readonly DerObjectIdentifier VerisignDnbDunsNumber = Verisign.Branch("6.15"); + + public static readonly DerObjectIdentifier VerisignIssStrongCrypto = Verisign.Branch("8.1"); + + // + // Novell + // iso/itu(2) country(16) us(840) organization(1) novell(113719) + // + public static readonly DerObjectIdentifier Novell = new DerObjectIdentifier("2.16.840.1.113719"); + public static readonly DerObjectIdentifier NovellSecurityAttribs = Novell.Branch("1.9.4.1"); + + // + // Entrust + // iso(1) member-body(16) us(840) nortelnetworks(113533) entrust(7) + // + public static readonly DerObjectIdentifier Entrust = new DerObjectIdentifier("1.2.840.113533.7"); + public static readonly DerObjectIdentifier EntrustVersionExtension = Entrust.Branch("65.0"); + + public static readonly DerObjectIdentifier cast5CBC = new DerObjectIdentifier(Entrust+ ".66.10"); + + // + // HMAC-SHA1 hMAC-SHA1 OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) + // dod(6) internet(1) security(5) mechanisms(5) 8 1 2 } + // + public static readonly DerObjectIdentifier HMAC_SHA1 = new DerObjectIdentifier("1.3.6.1.5.5.8.1.2"); + + // + // Ascom + // + public static readonly DerObjectIdentifier as_sys_sec_alg_ideaCBC = new DerObjectIdentifier("1.3.6.1.4.1.188.7.1.1.2"); + + // + // Peter Gutmann's Cryptlib + // + public static readonly DerObjectIdentifier cryptlib = new DerObjectIdentifier("1.3.6.1.4.1.3029"); + + public static readonly DerObjectIdentifier cryptlib_algorithm = cryptlib.Branch("1"); + public static readonly DerObjectIdentifier cryptlib_algorithm_blowfish_ECB = cryptlib_algorithm.Branch("1.1"); + public static readonly DerObjectIdentifier cryptlib_algorithm_blowfish_CBC = cryptlib_algorithm.Branch("1.2"); + public static readonly DerObjectIdentifier cryptlib_algorithm_blowfish_CFB = cryptlib_algorithm.Branch("1.3"); + public static readonly DerObjectIdentifier cryptlib_algorithm_blowfish_OFB = cryptlib_algorithm.Branch("1.4"); + + // + // Blake2b + // + public static readonly DerObjectIdentifier blake2 = new DerObjectIdentifier("1.3.6.1.4.1.1722.12.2"); + + public static readonly DerObjectIdentifier id_blake2b160 = blake2.Branch("1.5"); + public static readonly DerObjectIdentifier id_blake2b256 = blake2.Branch("1.8"); + public static readonly DerObjectIdentifier id_blake2b384 = blake2.Branch("1.12"); + public static readonly DerObjectIdentifier id_blake2b512 = blake2.Branch("1.16"); + + public static readonly DerObjectIdentifier id_blake2s128 = blake2.Branch("2.4"); + public static readonly DerObjectIdentifier id_blake2s160 = blake2.Branch("2.5"); + public static readonly DerObjectIdentifier id_blake2s224 = blake2.Branch("2.7"); + public static readonly DerObjectIdentifier id_blake2s256 = blake2.Branch("2.8"); + + public static readonly DerObjectIdentifier blake3 = blake2.Branch("3"); + + public static readonly DerObjectIdentifier blake3_256 = blake3.Branch("8"); + + // + // Scrypt + public static readonly DerObjectIdentifier id_scrypt = new DerObjectIdentifier("1.3.6.1.4.1.11591.4.11"); + + // Composite key/signature oid - prototyping + // + // id-alg-composite OBJECT IDENTIFIER ::= { + // iso(1) identified-organization(3) dod(6) internet(1) private(4) + // enterprise(1) OpenCA(18227) Algorithms(2) id-alg-composite(1) } + public static readonly DerObjectIdentifier id_alg_composite = new DerObjectIdentifier("1.3.6.1.4.1.18227.2.1"); + + // -- To be replaced by IANA + // + //id-composite-key OBJECT IDENTIFIER ::= { + // + // joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027) + // + // Algorithm(80) Composite(4) CompositeKey(1) + public static readonly DerObjectIdentifier id_composite_key = + new DerObjectIdentifier("2.16.840.1.114027.80.4.1"); + + public static readonly DerObjectIdentifier id_oracle_pkcs12_trusted_key_usage = + new DerObjectIdentifier("2.16.840.1.113894.746875.1.1"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/MiscObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/MiscObjectIdentifiers.cs.meta new file mode 100644 index 000000000..8565d2979 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/MiscObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ffdbc8830f79f824dba418df238c3d44 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/NetscapeCertType.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/NetscapeCertType.cs new file mode 100644 index 000000000..d5082844d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/NetscapeCertType.cs @@ -0,0 +1,58 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Misc +{ + /** + * The NetscapeCertType object. + *
+     *    NetscapeCertType ::= BIT STRING {
+     *         SSLClient               (0),
+     *         SSLServer               (1),
+     *         S/MIME                  (2),
+     *         Object Signing          (3),
+     *         Reserved                (4),
+     *         SSL CA                  (5),
+     *         S/MIME CA               (6),
+     *         Object Signing CA       (7) }
+     * 
+ */ + public class NetscapeCertType + : DerBitString + { + public const int SslClient = (1 << 7); + public const int SslServer = (1 << 6); + public const int Smime = (1 << 5); + public const int ObjectSigning = (1 << 4); + public const int Reserved = (1 << 3); + public const int SslCA = (1 << 2); + public const int SmimeCA = (1 << 1); + public const int ObjectSigningCA = (1 << 0); + + /** + * Basic constructor. + * + * @param usage - the bitwise OR of the Key Usage flags giving the + * allowed uses for the key. + * e.g. (X509NetscapeCertType.sslCA | X509NetscapeCertType.smimeCA) + */ + public NetscapeCertType(int usage) + : base(usage) + { + } + + public NetscapeCertType(DerBitString usage) + : base(usage.GetBytes(), usage.PadBits) + { + } + + public override string ToString() + { + byte[] data = GetBytes(); + return "NetscapeCertType: 0x" + (data[0] & 0xff).ToString("X"); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/NetscapeCertType.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/NetscapeCertType.cs.meta new file mode 100644 index 000000000..00507c410 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/NetscapeCertType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d87f849d29198334ab7d6ede2a794d59 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/NetscapeRevocationURL.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/NetscapeRevocationURL.cs new file mode 100644 index 000000000..6332b4c50 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/NetscapeRevocationURL.cs @@ -0,0 +1,22 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Misc +{ + public class NetscapeRevocationUrl + : DerIA5String + { + public NetscapeRevocationUrl(DerIA5String str) + : base(str.GetString()) + { + } + + public override string ToString() + { + return "NetscapeRevocationUrl: " + this.GetString(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/NetscapeRevocationURL.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/NetscapeRevocationURL.cs.meta new file mode 100644 index 000000000..f1eaea849 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/NetscapeRevocationURL.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 566e17568a7913148b5dec3061e0c7ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/VerisignCzagExtension.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/VerisignCzagExtension.cs new file mode 100644 index 000000000..aa210ec60 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/VerisignCzagExtension.cs @@ -0,0 +1,22 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Misc +{ + public class VerisignCzagExtension + : DerIA5String + { + public VerisignCzagExtension(DerIA5String str) + : base(str.GetString()) + { + } + + public override string ToString() + { + return "VerisignCzagExtension: " + this.GetString(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/VerisignCzagExtension.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/VerisignCzagExtension.cs.meta new file mode 100644 index 000000000..57ac14145 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/misc/VerisignCzagExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ea51add55957484479a5898cc980d7b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/mozilla.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/mozilla.meta new file mode 100644 index 000000000..e56b49f5a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/mozilla.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 66bc493576bc81d41bec581fe1d40712 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/mozilla/PublicKeyAndChallenge.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/mozilla/PublicKeyAndChallenge.cs new file mode 100644 index 000000000..679491d2c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/mozilla/PublicKeyAndChallenge.cs @@ -0,0 +1,72 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Mozilla +{ + /** + * This is designed to parse + * the PublicKeyAndChallenge created by the KEYGEN tag included by + * Mozilla based browsers. + *
+	 *  PublicKeyAndChallenge ::= SEQUENCE {
+	 *    spki SubjectPublicKeyInfo,
+	 *    challenge IA5STRING
+	 *  }
+	 *
+	 *  
+ */ + public class PublicKeyAndChallenge + : Asn1Encodable + { + private Asn1Sequence pkacSeq; + private SubjectPublicKeyInfo spki; + private DerIA5String challenge; + + public static PublicKeyAndChallenge GetInstance( + object obj) + { + if (obj is PublicKeyAndChallenge) + { + return (PublicKeyAndChallenge) obj; + } + + if (obj is Asn1Sequence) + { + return new PublicKeyAndChallenge((Asn1Sequence) obj); + } + + throw new ArgumentException( + "unknown object in 'PublicKeyAndChallenge' factory : " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj) + "."); + } + + public PublicKeyAndChallenge( + Asn1Sequence seq) + { + pkacSeq = seq; + spki = SubjectPublicKeyInfo.GetInstance(seq[0]); + challenge = DerIA5String.GetInstance(seq[1]); + } + + public override Asn1Object ToAsn1Object() + { + return pkacSeq; + } + + public SubjectPublicKeyInfo SubjectPublicKeyInfo + { + get { return spki; } + } + + public DerIA5String Challenge + { + get { return challenge; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/mozilla/PublicKeyAndChallenge.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/mozilla/PublicKeyAndChallenge.cs.meta new file mode 100644 index 000000000..6ee7d41a8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/mozilla/PublicKeyAndChallenge.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9f1d02959da7cbe449330b04b5b234ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist.meta new file mode 100644 index 000000000..ece03d086 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e02e741e81a810c4a82a0730fa1d0d19 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/KMACwithSHAKE128_params.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/KMACwithSHAKE128_params.cs new file mode 100644 index 000000000..1e62306fe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/KMACwithSHAKE128_params.cs @@ -0,0 +1,107 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using System; + + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist +{ + /// + /// KMACwithSHAKE128-params ::= SEQUENCE { + /// kMACOutputLength INTEGER DEFAULT 256, -- Output length in bits + /// customizationString OCTET STRING DEFAULT ''H + /// } + /// +public class KMacWithShake128Params : Asn1Encodable +{ + private static readonly byte[] EMPTY_STRING = new byte[0]; + private static readonly int DEF_LENGTH = 256; + + private readonly int outputLength; + private readonly byte[] customizationString; + + public KMacWithShake128Params(int outputLength) + { + this.outputLength = outputLength; + this.customizationString = EMPTY_STRING; + } + + public KMacWithShake128Params(int outputLength, byte[] customizationString) + { + this.outputLength = outputLength; + this.customizationString = Arrays.Clone(customizationString); + } + + public static KMacWithShake128Params GetInstance(object o) + { + if (o is KMacWithShake128Params) + { + return (KMacWithShake128Params)o; + } + else if (o != null) + { + return new KMacWithShake128Params(Asn1Sequence.GetInstance(o)); + } + + return null; + } + + private KMacWithShake128Params(Asn1Sequence seq) + { + if (seq.Count > 2) + throw new InvalidOperationException("sequence size greater than 2"); + + if (seq.Count == 2) + { + this.outputLength = DerInteger.GetInstance(seq[0]).IntValueExact; + this.customizationString = Arrays.Clone(Asn1OctetString.GetInstance(seq[1]).GetOctets()); + } + else if (seq.Count == 1) + { + if (seq[0] is DerInteger) + { + this.outputLength = DerInteger.GetInstance(seq[0]).IntValueExact; + this.customizationString = EMPTY_STRING; + } + else + { + this.outputLength = DEF_LENGTH; + this.customizationString = Arrays.Clone(Asn1OctetString.GetInstance(seq[0]).GetOctets()); + } + } + else + { + this.outputLength = DEF_LENGTH; + this.customizationString = EMPTY_STRING; + } + } + + public int OutputLength + { + get { return outputLength; } + } + + public byte[] CustomizationString + { + get { return Arrays.Clone(customizationString); } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + if (outputLength != DEF_LENGTH) + { + v.Add(new DerInteger(outputLength)); + } + + if (customizationString.Length != 0) + { + v.Add(new DerOctetString(CustomizationString)); + } + + return new DerSequence(v); + } +} +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/KMACwithSHAKE128_params.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/KMACwithSHAKE128_params.cs.meta new file mode 100644 index 000000000..402fba9d5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/KMACwithSHAKE128_params.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aef7bf7b626d311429e679582c70947c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/KMACwithSHAKE256_params.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/KMACwithSHAKE256_params.cs new file mode 100644 index 000000000..6325dd689 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/KMACwithSHAKE256_params.cs @@ -0,0 +1,106 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist +{ + /// + /// KMACwithSHAKE256-params ::= SEQUENCE { + /// kMACOutputLength INTEGER DEFAULT 512, -- Output length in bits + /// customizationString OCTET STRING DEFAULT ''H + /// } + /// +public class KMacWithShake256Params : Asn1Encodable +{ + private static readonly byte[] EMPTY_STRING = new byte[0]; + private static readonly int DEF_LENGTH = 512; + + private readonly int outputLength; + private readonly byte[] customizationString; + + public KMacWithShake256Params(int outputLength) + { + this.outputLength = outputLength; + this.customizationString = EMPTY_STRING; + } + + public KMacWithShake256Params(int outputLength, byte[] customizationString) + { + this.outputLength = outputLength; + this.customizationString = Arrays.Clone(customizationString); + } + + public static KMacWithShake256Params GetInstance(object o) + { + if (o is KMacWithShake256Params) + { + return (KMacWithShake256Params)o; + } + else if (o != null) + { + return new KMacWithShake256Params(Asn1Sequence.GetInstance(o)); + } + + return null; + } + + private KMacWithShake256Params(Asn1Sequence seq) + { + if (seq.Count > 2) + throw new InvalidOperationException("sequence size greater than 2"); + + if (seq.Count == 2) + { + this.outputLength = DerInteger.GetInstance(seq[0]).IntValueExact; + this.customizationString = Arrays.Clone(Asn1OctetString.GetInstance(seq[1]).GetOctets()); + } + else if (seq.Count == 1) + { + if (seq[0] is DerInteger) + { + this.outputLength = DerInteger.GetInstance(seq[0]).IntValueExact; + this.customizationString = EMPTY_STRING; + } + else + { + this.outputLength = DEF_LENGTH; + this.customizationString = Arrays.Clone(Asn1OctetString.GetInstance(seq[0]).GetOctets()); + } + } + else + { + this.outputLength = DEF_LENGTH; + this.customizationString = EMPTY_STRING; + } + } + + public int OutputLength + { + get { return outputLength; } + } + + public byte[] CustomizationString + { + get { return Arrays.Clone(customizationString); } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + if (outputLength != DEF_LENGTH) + { + v.Add(new DerInteger(outputLength)); + } + + if (customizationString.Length != 0) + { + v.Add(new DerOctetString(CustomizationString)); + } + + return new DerSequence(v); + } +} +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/KMACwithSHAKE256_params.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/KMACwithSHAKE256_params.cs.meta new file mode 100644 index 000000000..2f0ad4f00 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/KMACwithSHAKE256_params.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cccadade0597bd44193a0cb8a3424594 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/NISTNamedCurves.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/NISTNamedCurves.cs new file mode 100644 index 000000000..e977bd429 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/NISTNamedCurves.cs @@ -0,0 +1,112 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Sec; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist +{ + /// Elliptic curve registry for NIST curves. + public static class NistNamedCurves + { + private static readonly Dictionary objIds = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly Dictionary names = + new Dictionary(); + + private static void DefineCurveAlias(string name, DerObjectIdentifier oid) + { + if (SecNamedCurves.GetByOidLazy(oid) == null) + throw new InvalidOperationException(); + + objIds.Add(name, oid); + names.Add(oid, name); + } + + static NistNamedCurves() + { + DefineCurveAlias("B-163", SecObjectIdentifiers.SecT163r2); + DefineCurveAlias("B-233", SecObjectIdentifiers.SecT233r1); + DefineCurveAlias("B-283", SecObjectIdentifiers.SecT283r1); + DefineCurveAlias("B-409", SecObjectIdentifiers.SecT409r1); + DefineCurveAlias("B-571", SecObjectIdentifiers.SecT571r1); + + DefineCurveAlias("K-163", SecObjectIdentifiers.SecT163k1); + DefineCurveAlias("K-233", SecObjectIdentifiers.SecT233k1); + DefineCurveAlias("K-283", SecObjectIdentifiers.SecT283k1); + DefineCurveAlias("K-409", SecObjectIdentifiers.SecT409k1); + DefineCurveAlias("K-571", SecObjectIdentifiers.SecT571k1); + + DefineCurveAlias("P-192", SecObjectIdentifiers.SecP192r1); + DefineCurveAlias("P-224", SecObjectIdentifiers.SecP224r1); + DefineCurveAlias("P-256", SecObjectIdentifiers.SecP256r1); + DefineCurveAlias("P-384", SecObjectIdentifiers.SecP384r1); + DefineCurveAlias("P-521", SecObjectIdentifiers.SecP521r1); + } + + /// Look up the for the curve with the given name. + /// The name of the curve. + public static X9ECParameters GetByName(string name) + { + DerObjectIdentifier oid = GetOid(name); + return oid == null ? null : GetByOid(oid); + } + + /// Look up an for the curve with the given name. + /// + /// Allows accessing the curve without necessarily triggering the creation of + /// the full . + /// + /// The name of the curve. + public static X9ECParametersHolder GetByNameLazy(string name) + { + DerObjectIdentifier oid = GetOid(name); + return oid == null ? null : GetByOidLazy(oid); + } + + /// Look up the for the curve with the given + /// OID. + /// The OID for the curve. + public static X9ECParameters GetByOid(DerObjectIdentifier oid) + { + return GetByOidLazy(oid)?.Parameters; + } + + /// Look up an for the curve with the given + /// OID. + /// + /// Allows accessing the curve without necessarily triggering the creation of + /// the full . + /// + /// The OID for the curve. + public static X9ECParametersHolder GetByOidLazy(DerObjectIdentifier oid) + { + return names.ContainsKey(oid) ? SecNamedCurves.GetByOidLazy(oid) : null; + } + + /// Look up the name of the curve with the given OID. + /// The OID for the curve. + public static string GetName(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(names, oid); + } + + /// Look up the OID of the curve with the given name. + /// The name of the curve. + public static DerObjectIdentifier GetOid(string name) + { + return CollectionUtilities.GetValueOrNull(objIds, name); + } + + /// Enumerate the available curve names in this registry. + public static IEnumerable Names + { + get { return CollectionUtilities.Proxy(objIds.Keys); } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/NISTNamedCurves.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/NISTNamedCurves.cs.meta new file mode 100644 index 000000000..6cac67b95 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/NISTNamedCurves.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9f827e48f3be93842b031d823157cb82 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/NISTObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/NISTObjectIdentifiers.cs new file mode 100644 index 000000000..8734db0a9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/NISTObjectIdentifiers.cs @@ -0,0 +1,112 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist +{ + public sealed class NistObjectIdentifiers + { + private NistObjectIdentifiers() + { + } + + // + // NIST + // iso/itu(2) joint-assign(16) us(840) organization(1) gov(101) csor(3) + + // + // nistalgorithms(4) + // + public static readonly DerObjectIdentifier NistAlgorithm = new DerObjectIdentifier("2.16.840.1.101.3.4"); + + public static readonly DerObjectIdentifier HashAlgs = NistAlgorithm.Branch("2"); + + public static readonly DerObjectIdentifier IdSha256 = HashAlgs.Branch("1"); + public static readonly DerObjectIdentifier IdSha384 = HashAlgs.Branch("2"); + public static readonly DerObjectIdentifier IdSha512 = HashAlgs.Branch("3"); + public static readonly DerObjectIdentifier IdSha224 = HashAlgs.Branch("4"); + public static readonly DerObjectIdentifier IdSha512_224 = HashAlgs.Branch("5"); + public static readonly DerObjectIdentifier IdSha512_256 = HashAlgs.Branch("6"); + public static readonly DerObjectIdentifier IdSha3_224 = HashAlgs.Branch("7"); + public static readonly DerObjectIdentifier IdSha3_256 = HashAlgs.Branch("8"); + public static readonly DerObjectIdentifier IdSha3_384 = HashAlgs.Branch("9"); + public static readonly DerObjectIdentifier IdSha3_512 = HashAlgs.Branch("10"); + public static readonly DerObjectIdentifier IdShake128 = HashAlgs.Branch("11"); + public static readonly DerObjectIdentifier IdShake256 = HashAlgs.Branch("12"); + public static readonly DerObjectIdentifier IdHMacWithSha3_224 = HashAlgs.Branch("13"); + public static readonly DerObjectIdentifier IdHMacWithSha3_256 = HashAlgs.Branch("14"); + public static readonly DerObjectIdentifier IdHMacWithSha3_384 = HashAlgs.Branch("15"); + public static readonly DerObjectIdentifier IdHMacWithSha3_512 = HashAlgs.Branch("16"); + public static readonly DerObjectIdentifier IdShake128Len = HashAlgs.Branch("17"); + public static readonly DerObjectIdentifier IdShake256Len = HashAlgs.Branch("18"); + public static readonly DerObjectIdentifier IdKmacWithShake128 = HashAlgs.Branch("19"); + public static readonly DerObjectIdentifier IdKmacWithShake256 = HashAlgs.Branch("20"); + + public static readonly DerObjectIdentifier Aes = new DerObjectIdentifier(NistAlgorithm + ".1"); + + public static readonly DerObjectIdentifier IdAes128Ecb = new DerObjectIdentifier(Aes + ".1"); + public static readonly DerObjectIdentifier IdAes128Cbc = new DerObjectIdentifier(Aes + ".2"); + public static readonly DerObjectIdentifier IdAes128Ofb = new DerObjectIdentifier(Aes + ".3"); + public static readonly DerObjectIdentifier IdAes128Cfb = new DerObjectIdentifier(Aes + ".4"); + public static readonly DerObjectIdentifier IdAes128Wrap = new DerObjectIdentifier(Aes + ".5"); + public static readonly DerObjectIdentifier IdAes128Gcm = new DerObjectIdentifier(Aes + ".6"); + public static readonly DerObjectIdentifier IdAes128Ccm = new DerObjectIdentifier(Aes + ".7"); + + public static readonly DerObjectIdentifier IdAes192Ecb = new DerObjectIdentifier(Aes + ".21"); + public static readonly DerObjectIdentifier IdAes192Cbc = new DerObjectIdentifier(Aes + ".22"); + public static readonly DerObjectIdentifier IdAes192Ofb = new DerObjectIdentifier(Aes + ".23"); + public static readonly DerObjectIdentifier IdAes192Cfb = new DerObjectIdentifier(Aes + ".24"); + public static readonly DerObjectIdentifier IdAes192Wrap = new DerObjectIdentifier(Aes + ".25"); + public static readonly DerObjectIdentifier IdAes192Gcm = new DerObjectIdentifier(Aes + ".26"); + public static readonly DerObjectIdentifier IdAes192Ccm = new DerObjectIdentifier(Aes + ".27"); + + public static readonly DerObjectIdentifier IdAes256Ecb = new DerObjectIdentifier(Aes + ".41"); + public static readonly DerObjectIdentifier IdAes256Cbc = new DerObjectIdentifier(Aes + ".42"); + public static readonly DerObjectIdentifier IdAes256Ofb = new DerObjectIdentifier(Aes + ".43"); + public static readonly DerObjectIdentifier IdAes256Cfb = new DerObjectIdentifier(Aes + ".44"); + public static readonly DerObjectIdentifier IdAes256Wrap = new DerObjectIdentifier(Aes + ".45"); + public static readonly DerObjectIdentifier IdAes256Gcm = new DerObjectIdentifier(Aes + ".46"); + public static readonly DerObjectIdentifier IdAes256Ccm = new DerObjectIdentifier(Aes + ".47"); + + // + // signatures + // + public static readonly DerObjectIdentifier IdDsaWithSha2 = new DerObjectIdentifier(NistAlgorithm + ".3"); + + public static readonly DerObjectIdentifier DsaWithSha224 = new DerObjectIdentifier(IdDsaWithSha2 + ".1"); + public static readonly DerObjectIdentifier DsaWithSha256 = new DerObjectIdentifier(IdDsaWithSha2 + ".2"); + public static readonly DerObjectIdentifier DsaWithSha384 = new DerObjectIdentifier(IdDsaWithSha2 + ".3"); + public static readonly DerObjectIdentifier DsaWithSha512 = new DerObjectIdentifier(IdDsaWithSha2 + ".4"); + + /** 2.16.840.1.101.3.4.3.5 */ + public static readonly DerObjectIdentifier IdDsaWithSha3_224 = new DerObjectIdentifier(IdDsaWithSha2 + ".5"); + /** 2.16.840.1.101.3.4.3.6 */ + public static readonly DerObjectIdentifier IdDsaWithSha3_256 = new DerObjectIdentifier(IdDsaWithSha2 + ".6"); + /** 2.16.840.1.101.3.4.3.7 */ + public static readonly DerObjectIdentifier IdDsaWithSha3_384 = new DerObjectIdentifier(IdDsaWithSha2 + ".7"); + /** 2.16.840.1.101.3.4.3.8 */ + public static readonly DerObjectIdentifier IdDsaWithSha3_512 = new DerObjectIdentifier(IdDsaWithSha2 + ".8"); + + // ECDSA with SHA-3 + /** 2.16.840.1.101.3.4.3.9 */ + public static readonly DerObjectIdentifier IdEcdsaWithSha3_224 = new DerObjectIdentifier(IdDsaWithSha2 + ".9"); + /** 2.16.840.1.101.3.4.3.10 */ + public static readonly DerObjectIdentifier IdEcdsaWithSha3_256 = new DerObjectIdentifier(IdDsaWithSha2 + ".10"); + /** 2.16.840.1.101.3.4.3.11 */ + public static readonly DerObjectIdentifier IdEcdsaWithSha3_384 = new DerObjectIdentifier(IdDsaWithSha2 + ".11"); + /** 2.16.840.1.101.3.4.3.12 */ + public static readonly DerObjectIdentifier IdEcdsaWithSha3_512 = new DerObjectIdentifier(IdDsaWithSha2 + ".12"); + + // RSA PKCS #1 v1.5 Signature with SHA-3 family. + /** 2.16.840.1.101.3.4.3.9 */ + public static readonly DerObjectIdentifier IdRsassaPkcs1V15WithSha3_224 = new DerObjectIdentifier(IdDsaWithSha2 + ".13"); + /** 2.16.840.1.101.3.4.3.10 */ + public static readonly DerObjectIdentifier IdRsassaPkcs1V15WithSha3_256 = new DerObjectIdentifier(IdDsaWithSha2 + ".14"); + /** 2.16.840.1.101.3.4.3.11 */ + public static readonly DerObjectIdentifier IdRsassaPkcs1V15WithSha3_384 = new DerObjectIdentifier(IdDsaWithSha2 + ".15"); + /** 2.16.840.1.101.3.4.3.12 */ + public static readonly DerObjectIdentifier IdRsassaPkcs1V15WithSha3_512 = new DerObjectIdentifier(IdDsaWithSha2 + ".16"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/NISTObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/NISTObjectIdentifiers.cs.meta new file mode 100644 index 000000000..09409c27f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nist/NISTObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 156ecab2f2766c44d9d74760780d0860 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nsri.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nsri.meta new file mode 100644 index 000000000..68121e2de --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nsri.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e95d026a25549a849b705b898eee2d0f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nsri/NsriObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nsri/NsriObjectIdentifiers.cs new file mode 100644 index 000000000..1aa0c4b19 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nsri/NsriObjectIdentifiers.cs @@ -0,0 +1,63 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nsri +{ + public sealed class NsriObjectIdentifiers + { + public static readonly DerObjectIdentifier nsri = new DerObjectIdentifier("1.2.410.200046"); + + public static readonly DerObjectIdentifier id_algorithm = nsri.Branch("1"); + + public static readonly DerObjectIdentifier id_sea = id_algorithm.Branch("1"); + public static readonly DerObjectIdentifier id_pad = id_algorithm.Branch("2"); + + public static readonly DerObjectIdentifier id_pad_null = id_algorithm.Branch("0"); + public static readonly DerObjectIdentifier id_pad_1 = id_algorithm.Branch("1"); + + public static readonly DerObjectIdentifier id_aria128_ecb = id_sea.Branch("1"); + public static readonly DerObjectIdentifier id_aria128_cbc = id_sea.Branch("2"); + public static readonly DerObjectIdentifier id_aria128_cfb = id_sea.Branch("3"); + public static readonly DerObjectIdentifier id_aria128_ofb = id_sea.Branch("4"); + public static readonly DerObjectIdentifier id_aria128_ctr = id_sea.Branch("5"); + + public static readonly DerObjectIdentifier id_aria192_ecb = id_sea.Branch("6"); + public static readonly DerObjectIdentifier id_aria192_cbc = id_sea.Branch("7"); + public static readonly DerObjectIdentifier id_aria192_cfb = id_sea.Branch("8"); + public static readonly DerObjectIdentifier id_aria192_ofb = id_sea.Branch("9"); + public static readonly DerObjectIdentifier id_aria192_ctr = id_sea.Branch("10"); + + public static readonly DerObjectIdentifier id_aria256_ecb = id_sea.Branch("11"); + public static readonly DerObjectIdentifier id_aria256_cbc = id_sea.Branch("12"); + public static readonly DerObjectIdentifier id_aria256_cfb = id_sea.Branch("13"); + public static readonly DerObjectIdentifier id_aria256_ofb = id_sea.Branch("14"); + public static readonly DerObjectIdentifier id_aria256_ctr = id_sea.Branch("15"); + + public static readonly DerObjectIdentifier id_aria128_cmac = id_sea.Branch("21"); + public static readonly DerObjectIdentifier id_aria192_cmac = id_sea.Branch("22"); + public static readonly DerObjectIdentifier id_aria256_cmac = id_sea.Branch("23"); + + public static readonly DerObjectIdentifier id_aria128_ocb2 = id_sea.Branch("31"); + public static readonly DerObjectIdentifier id_aria192_ocb2 = id_sea.Branch("32"); + public static readonly DerObjectIdentifier id_aria256_ocb2 = id_sea.Branch("33"); + + public static readonly DerObjectIdentifier id_aria128_gcm = id_sea.Branch("34"); + public static readonly DerObjectIdentifier id_aria192_gcm = id_sea.Branch("35"); + public static readonly DerObjectIdentifier id_aria256_gcm = id_sea.Branch("36"); + + public static readonly DerObjectIdentifier id_aria128_ccm = id_sea.Branch("37"); + public static readonly DerObjectIdentifier id_aria192_ccm = id_sea.Branch("38"); + public static readonly DerObjectIdentifier id_aria256_ccm = id_sea.Branch("39"); + + public static readonly DerObjectIdentifier id_aria128_kw = id_sea.Branch("40"); + public static readonly DerObjectIdentifier id_aria192_kw = id_sea.Branch("41"); + public static readonly DerObjectIdentifier id_aria256_kw = id_sea.Branch("42"); + + public static readonly DerObjectIdentifier id_aria128_kwp = id_sea.Branch("43"); + public static readonly DerObjectIdentifier id_aria192_kwp = id_sea.Branch("44"); + public static readonly DerObjectIdentifier id_aria256_kwp = id_sea.Branch("45"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nsri/NsriObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nsri/NsriObjectIdentifiers.cs.meta new file mode 100644 index 000000000..833dd30d8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/nsri/NsriObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b3d8cb32d858904bb4107b08246e4c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ntt.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ntt.meta new file mode 100644 index 000000000..baa77d866 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ntt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 16ca13f58cd6010428f9c56741245ebe +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ntt/NTTObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ntt/NTTObjectIdentifiers.cs new file mode 100644 index 000000000..b42b1db19 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ntt/NTTObjectIdentifiers.cs @@ -0,0 +1,18 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ntt +{ + /// From RFC 3657 + public abstract class NttObjectIdentifiers + { + public static readonly DerObjectIdentifier IdCamellia128Cbc = new DerObjectIdentifier("1.2.392.200011.61.1.1.1.2"); + public static readonly DerObjectIdentifier IdCamellia192Cbc = new DerObjectIdentifier("1.2.392.200011.61.1.1.1.3"); + public static readonly DerObjectIdentifier IdCamellia256Cbc = new DerObjectIdentifier("1.2.392.200011.61.1.1.1.4"); + + public static readonly DerObjectIdentifier IdCamellia128Wrap = new DerObjectIdentifier("1.2.392.200011.61.1.1.3.2"); + public static readonly DerObjectIdentifier IdCamellia192Wrap = new DerObjectIdentifier("1.2.392.200011.61.1.1.3.3"); + public static readonly DerObjectIdentifier IdCamellia256Wrap = new DerObjectIdentifier("1.2.392.200011.61.1.1.3.4"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ntt/NTTObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ntt/NTTObjectIdentifiers.cs.meta new file mode 100644 index 000000000..36c3c09ad --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ntt/NTTObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 743cda84966ce1948b33282fe4961b67 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp.meta new file mode 100644 index 000000000..b5cd7cce8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 44025a17146cfb54bbf85c69cc3fc7d9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/BasicOCSPResponse.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/BasicOCSPResponse.cs new file mode 100644 index 000000000..687343d12 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/BasicOCSPResponse.cs @@ -0,0 +1,111 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp +{ + public class BasicOcspResponse + : Asn1Encodable + { + private readonly ResponseData tbsResponseData; + private readonly AlgorithmIdentifier signatureAlgorithm; + private readonly DerBitString signature; + private readonly Asn1Sequence certs; + + public static BasicOcspResponse GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static BasicOcspResponse GetInstance( + object obj) + { + if (obj == null || obj is BasicOcspResponse) + { + return (BasicOcspResponse)obj; + } + + if (obj is Asn1Sequence) + { + return new BasicOcspResponse((Asn1Sequence)obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public BasicOcspResponse( + ResponseData tbsResponseData, + AlgorithmIdentifier signatureAlgorithm, + DerBitString signature, + Asn1Sequence certs) + { + this.tbsResponseData = tbsResponseData; + this.signatureAlgorithm = signatureAlgorithm; + this.signature = signature; + this.certs = certs; + } + + private BasicOcspResponse( + Asn1Sequence seq) + { + this.tbsResponseData = ResponseData.GetInstance(seq[0]); + this.signatureAlgorithm = AlgorithmIdentifier.GetInstance(seq[1]); + this.signature = (DerBitString)seq[2]; + + if (seq.Count > 3) + { + this.certs = Asn1Sequence.GetInstance((Asn1TaggedObject)seq[3], true); + } + } + + public ResponseData TbsResponseData + { + get { return tbsResponseData; } + } + + public AlgorithmIdentifier SignatureAlgorithm + { + get { return signatureAlgorithm; } + } + + public DerBitString Signature + { + get { return signature; } + } + + public byte[] GetSignatureOctets() + { + return signature.GetOctets(); + } + + public Asn1Sequence Certs + { + get { return certs; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * BasicOcspResponse       ::= Sequence {
+         *      tbsResponseData      ResponseData,
+         *      signatureAlgorithm   AlgorithmIdentifier,
+         *      signature            BIT STRING,
+         *      certs                [0] EXPLICIT Sequence OF Certificate OPTIONAL }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(tbsResponseData, signatureAlgorithm, signature); + v.AddOptionalTagged(true, 0, certs); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/BasicOCSPResponse.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/BasicOCSPResponse.cs.meta new file mode 100644 index 000000000..79a5b1ee6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/BasicOCSPResponse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0024dee4352844149816ed3d081fa572 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/CertID.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/CertID.cs new file mode 100644 index 000000000..727f6fddf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/CertID.cs @@ -0,0 +1,103 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp +{ + public class CertID + : Asn1Encodable + { + private readonly AlgorithmIdentifier hashAlgorithm; + private readonly Asn1OctetString issuerNameHash; + private readonly Asn1OctetString issuerKeyHash; + private readonly DerInteger serialNumber; + + public static CertID GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static CertID GetInstance( + object obj) + { + if (obj == null || obj is CertID) + { + return (CertID)obj; + } + + if (obj is Asn1Sequence) + { + return new CertID((Asn1Sequence)obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public CertID( + AlgorithmIdentifier hashAlgorithm, + Asn1OctetString issuerNameHash, + Asn1OctetString issuerKeyHash, + DerInteger serialNumber) + { + this.hashAlgorithm = hashAlgorithm; + this.issuerNameHash = issuerNameHash; + this.issuerKeyHash = issuerKeyHash; + this.serialNumber = serialNumber; + } + + private CertID( + Asn1Sequence seq) + { + if (seq.Count != 4) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + this.hashAlgorithm = AlgorithmIdentifier.GetInstance(seq[0]); + this.issuerNameHash = Asn1OctetString.GetInstance(seq[1]); + this.issuerKeyHash = Asn1OctetString.GetInstance(seq[2]); + this.serialNumber = DerInteger.GetInstance(seq[3]); + } + + public AlgorithmIdentifier HashAlgorithm + { + get { return hashAlgorithm; } + } + + public Asn1OctetString IssuerNameHash + { + get { return issuerNameHash; } + } + + public Asn1OctetString IssuerKeyHash + { + get { return issuerKeyHash; } + } + + public DerInteger SerialNumber + { + get { return serialNumber; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * CertID          ::=     Sequence {
+         *     hashAlgorithm       AlgorithmIdentifier,
+         *     issuerNameHash      OCTET STRING, -- Hash of Issuer's DN
+         *     issuerKeyHash       OCTET STRING, -- Hash of Issuers public key
+         *     serialNumber        CertificateSerialNumber }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(hashAlgorithm, issuerNameHash, issuerKeyHash, serialNumber); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/CertID.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/CertID.cs.meta new file mode 100644 index 000000000..1d5eccbe7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/CertID.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c00c7fd4fc5076848a82dd1095e8e246 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/CertStatus.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/CertStatus.cs new file mode 100644 index 000000000..cc19e149e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/CertStatus.cs @@ -0,0 +1,101 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp +{ + public class CertStatus + : Asn1Encodable, IAsn1Choice + { + private readonly int tagNo; + private readonly Asn1Encodable value; + + /** + * create a CertStatus object with a tag of zero. + */ + public CertStatus() + { + tagNo = 0; + value = DerNull.Instance; + } + + public CertStatus( + RevokedInfo info) + { + tagNo = 1; + value = info; + } + + public CertStatus( + int tagNo, + Asn1Encodable value) + { + this.tagNo = tagNo; + this.value = value; + } + + public CertStatus(Asn1TaggedObject choice) + { + this.tagNo = choice.TagNo; + + switch (choice.TagNo) + { + case 0: + value = Asn1Null.GetInstance(choice, false); + break; + case 1: + value = RevokedInfo.GetInstance(choice, false); + break; + case 2: + value = Asn1Null.GetInstance(choice, false); + break; + default: + throw new ArgumentException("Unknown tag encountered: " + Asn1Utilities.GetTagText(choice)); + } + } + + public static CertStatus GetInstance( + object obj) + { + if (obj == null || obj is CertStatus) + { + return (CertStatus)obj; + } + + if (obj is Asn1TaggedObject) + { + return new CertStatus((Asn1TaggedObject)obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public int TagNo + { + get { return tagNo; } + } + + public Asn1Encodable Status + { + get { return value; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         *  CertStatus ::= CHOICE {
+         *                  good        [0]     IMPLICIT Null,
+         *                  revoked     [1]     IMPLICIT RevokedInfo,
+         *                  unknown     [2]     IMPLICIT UnknownInfo }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerTaggedObject(false, tagNo, value); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/CertStatus.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/CertStatus.cs.meta new file mode 100644 index 000000000..ec3138a6b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/CertStatus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b6ada7643cbf84f4b94d04fd68ef003f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/CrlID.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/CrlID.cs new file mode 100644 index 000000000..7f182e0c3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/CrlID.cs @@ -0,0 +1,71 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp +{ + public class CrlID + : Asn1Encodable + { + private readonly DerIA5String crlUrl; + private readonly DerInteger crlNum; + private readonly Asn1GeneralizedTime crlTime; + + // TODO Add GetInstance method(s) and make this private? + public CrlID(Asn1Sequence seq) + { + foreach (Asn1TaggedObject o in seq) + { + switch (o.TagNo) + { + case 0: + crlUrl = DerIA5String.GetInstance(o, true); + break; + case 1: + crlNum = DerInteger.GetInstance(o, true); + break; + case 2: + crlTime = Asn1GeneralizedTime.GetInstance(o, true); + break; + default: + throw new ArgumentException("unknown tag number: " + o.TagNo); + } + } + } + + public DerIA5String CrlUrl + { + get { return crlUrl; } + } + + public DerInteger CrlNum + { + get { return crlNum; } + } + + public Asn1GeneralizedTime CrlTime + { + get { return crlTime; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * CrlID ::= Sequence {
+         *     crlUrl               [0]     EXPLICIT IA5String OPTIONAL,
+         *     crlNum               [1]     EXPLICIT Integer OPTIONAL,
+         *     crlTime              [2]     EXPLICIT GeneralizedTime OPTIONAL }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptionalTagged(true, 0, crlUrl); + v.AddOptionalTagged(true, 1, crlNum); + v.AddOptionalTagged(true, 2, crlTime); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/CrlID.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/CrlID.cs.meta new file mode 100644 index 000000000..c82f3df79 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/CrlID.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d87e0a9a858ccb94cb41f29411c725b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPObjectIdentifiers.cs new file mode 100644 index 000000000..fd46cd476 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPObjectIdentifiers.cs @@ -0,0 +1,27 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp +{ + public abstract class OcspObjectIdentifiers + { + internal const string PkixOcspId = "1.3.6.1.5.5.7.48.1"; + + public static readonly DerObjectIdentifier PkixOcsp = new DerObjectIdentifier(PkixOcspId); + public static readonly DerObjectIdentifier PkixOcspBasic = new DerObjectIdentifier(PkixOcspId + ".1"); + + // + // extensions + // + public static readonly DerObjectIdentifier PkixOcspNonce = new DerObjectIdentifier(PkixOcsp + ".2"); + public static readonly DerObjectIdentifier PkixOcspCrl = new DerObjectIdentifier(PkixOcsp + ".3"); + + public static readonly DerObjectIdentifier PkixOcspResponse = new DerObjectIdentifier(PkixOcsp + ".4"); + public static readonly DerObjectIdentifier PkixOcspNocheck = new DerObjectIdentifier(PkixOcsp + ".5"); + public static readonly DerObjectIdentifier PkixOcspArchiveCutoff = new DerObjectIdentifier(PkixOcsp + ".6"); + public static readonly DerObjectIdentifier PkixOcspServiceLocator = new DerObjectIdentifier(PkixOcsp + ".7"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPObjectIdentifiers.cs.meta new file mode 100644 index 000000000..7936ba3ce --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8415878ec63dc99489adfa5c7770f4ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPRequest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPRequest.cs new file mode 100644 index 000000000..8cf6d7835 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPRequest.cs @@ -0,0 +1,88 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp +{ + public class OcspRequest + : Asn1Encodable + { + private readonly TbsRequest tbsRequest; + private readonly Signature optionalSignature; + + public static OcspRequest GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static OcspRequest GetInstance( + object obj) + { + if (obj == null || obj is OcspRequest) + { + return (OcspRequest)obj; + } + + if (obj is Asn1Sequence) + { + return new OcspRequest((Asn1Sequence)obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public OcspRequest( + TbsRequest tbsRequest, + Signature optionalSignature) + { + if (tbsRequest == null) + throw new ArgumentNullException("tbsRequest"); + + this.tbsRequest = tbsRequest; + this.optionalSignature = optionalSignature; + } + + private OcspRequest( + Asn1Sequence seq) + { + tbsRequest = TbsRequest.GetInstance(seq[0]); + + if (seq.Count == 2) + { + optionalSignature = Signature.GetInstance( + (Asn1TaggedObject)seq[1], true); + } + } + + public TbsRequest TbsRequest + { + get { return tbsRequest; } + } + + public Signature OptionalSignature + { + get { return optionalSignature; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * OcspRequest     ::=     Sequence {
+         *     tbsRequest                  TBSRequest,
+         *     optionalSignature   [0]     EXPLICIT Signature OPTIONAL }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(tbsRequest); + v.AddOptionalTagged(true, 0, optionalSignature); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPRequest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPRequest.cs.meta new file mode 100644 index 000000000..d173274a2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3778c0c035ab13044b79e2d97bee672d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPResponse.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPResponse.cs new file mode 100644 index 000000000..78128718f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPResponse.cs @@ -0,0 +1,89 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp +{ + public class OcspResponse + : Asn1Encodable + { + private readonly OcspResponseStatus responseStatus; + private readonly ResponseBytes responseBytes; + + public static OcspResponse GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static OcspResponse GetInstance( + object obj) + { + if (obj == null || obj is OcspResponse) + { + return (OcspResponse)obj; + } + + if (obj is Asn1Sequence) + { + return new OcspResponse((Asn1Sequence)obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public OcspResponse( + OcspResponseStatus responseStatus, + ResponseBytes responseBytes) + { + if (responseStatus == null) + throw new ArgumentNullException("responseStatus"); + + this.responseStatus = responseStatus; + this.responseBytes = responseBytes; + } + + private OcspResponse( + Asn1Sequence seq) + { + responseStatus = new OcspResponseStatus( + DerEnumerated.GetInstance(seq[0])); + + if (seq.Count == 2) + { + responseBytes = ResponseBytes.GetInstance( + (Asn1TaggedObject)seq[1], true); + } + } + + public OcspResponseStatus ResponseStatus + { + get { return responseStatus; } + } + + public ResponseBytes ResponseBytes + { + get { return responseBytes; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * OcspResponse ::= Sequence {
+         *     responseStatus         OcspResponseStatus,
+         *     responseBytes          [0] EXPLICIT ResponseBytes OPTIONAL }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(responseStatus); + v.AddOptionalTagged(true, 0, responseBytes); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPResponse.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPResponse.cs.meta new file mode 100644 index 000000000..6f0625db4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPResponse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b6d3078d2d344f4b937e25054e084ae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPResponseStatus.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPResponseStatus.cs new file mode 100644 index 000000000..7f2135a23 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPResponseStatus.cs @@ -0,0 +1,45 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp +{ + public class OcspResponseStatus + : DerEnumerated + { + public const int Successful = 0; + public const int MalformedRequest = 1; + public const int InternalError = 2; + public const int TryLater = 3; + public const int SignatureRequired = 5; + public const int Unauthorized = 6; + + /** + * The OcspResponseStatus enumeration. + *
+         * OcspResponseStatus ::= Enumerated {
+         *     successful            (0),  --Response has valid confirmations
+         *     malformedRequest      (1),  --Illegal confirmation request
+         *     internalError         (2),  --Internal error in issuer
+         *     tryLater              (3),  --Try again later
+         *                                 --(4) is not used
+         *     sigRequired           (5),  --Must sign the request
+         *     unauthorized          (6)   --Request unauthorized
+         * }
+         * 
+ */ + public OcspResponseStatus(int value) + : base(value) + { + } + + public OcspResponseStatus(DerEnumerated value) + : base(value.IntValueExact) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPResponseStatus.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPResponseStatus.cs.meta new file mode 100644 index 000000000..fc642cb11 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/OCSPResponseStatus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 23667b08f22dccd4bbf811e2f210dd74 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/Request.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/Request.cs new file mode 100644 index 000000000..92fc819d7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/Request.cs @@ -0,0 +1,90 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp +{ + public class Request + : Asn1Encodable + { + private readonly CertID reqCert; + private readonly X509Extensions singleRequestExtensions; + + public static Request GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static Request GetInstance( + object obj) + { + if (obj == null || obj is Request) + { + return (Request)obj; + } + + if (obj is Asn1Sequence) + { + return new Request((Asn1Sequence)obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public Request( + CertID reqCert, + X509Extensions singleRequestExtensions) + { + if (reqCert == null) + throw new ArgumentNullException("reqCert"); + + this.reqCert = reqCert; + this.singleRequestExtensions = singleRequestExtensions; + } + + private Request( + Asn1Sequence seq) + { + reqCert = CertID.GetInstance(seq[0]); + + if (seq.Count == 2) + { + singleRequestExtensions = X509Extensions.GetInstance( + (Asn1TaggedObject)seq[1], true); + } + } + + public CertID ReqCert + { + get { return reqCert; } + } + + public X509Extensions SingleRequestExtensions + { + get { return singleRequestExtensions; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * Request         ::=     Sequence {
+         *     reqCert                     CertID,
+         *     singleRequestExtensions     [0] EXPLICIT Extensions OPTIONAL }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(reqCert); + v.AddOptionalTagged(true, 0, singleRequestExtensions); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/Request.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/Request.cs.meta new file mode 100644 index 000000000..8e1eafd4a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/Request.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bdab62c940065664d87b68a36ad957dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ResponderID.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ResponderID.cs new file mode 100644 index 000000000..b8ee59fa7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ResponderID.cs @@ -0,0 +1,111 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp +{ + public class ResponderID + : Asn1Encodable, IAsn1Choice + { + private readonly Asn1Encodable id; + + public static ResponderID GetInstance( + object obj) + { + if (obj == null || obj is ResponderID) + { + return (ResponderID)obj; + } + + if (obj is DerOctetString) + { + return new ResponderID((DerOctetString)obj); + } + + if (obj is Asn1TaggedObject) + { + Asn1TaggedObject o = (Asn1TaggedObject)obj; + + if (o.TagNo == 1) + { + return new ResponderID(X509Name.GetInstance(o, true)); + } + + return new ResponderID(Asn1OctetString.GetInstance(o, true)); + } + + return new ResponderID(X509Name.GetInstance(obj)); + } + + public ResponderID( + Asn1OctetString id) + { + if (id == null) + throw new ArgumentNullException("id"); + + this.id = id; + } + + public ResponderID( + X509Name id) + { + if (id == null) + throw new ArgumentNullException("id"); + + this.id = id; + } + + public static ResponderID GetInstance( + Asn1TaggedObject obj, + bool isExplicit) + { + return GetInstance(obj.GetObject()); // must be explicitly tagged + } + + public virtual byte[] GetKeyHash() + { + if (id is Asn1OctetString) + { + return ((Asn1OctetString)id).GetOctets(); + } + + return null; + } + + public virtual X509Name Name + { + get + { + if (id is Asn1OctetString) + { + return null; + } + + return X509Name.GetInstance(id); + } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * ResponderID ::= CHOICE {
+         *      byName          [1] Name,
+         *      byKey           [2] KeyHash }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + if (id is Asn1OctetString) + { + return new DerTaggedObject(true, 2, id); + } + + return new DerTaggedObject(true, 1, id); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ResponderID.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ResponderID.cs.meta new file mode 100644 index 000000000..bfcebb1cf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ResponderID.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1d2f0b66c62702343b6d4d874dab6abe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ResponseBytes.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ResponseBytes.cs new file mode 100644 index 000000000..db6603628 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ResponseBytes.cs @@ -0,0 +1,86 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp +{ + public class ResponseBytes + : Asn1Encodable + { + private readonly DerObjectIdentifier responseType; + private readonly Asn1OctetString response; + + public static ResponseBytes GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static ResponseBytes GetInstance( + object obj) + { + if (obj == null || obj is ResponseBytes) + { + return (ResponseBytes)obj; + } + + if (obj is Asn1Sequence) + { + return new ResponseBytes((Asn1Sequence)obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public ResponseBytes( + DerObjectIdentifier responseType, + Asn1OctetString response) + { + if (responseType == null) + throw new ArgumentNullException("responseType"); + if (response == null) + throw new ArgumentNullException("response"); + + this.responseType = responseType; + this.response = response; + } + + private ResponseBytes( + Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + this.responseType = DerObjectIdentifier.GetInstance(seq[0]); + this.response = Asn1OctetString.GetInstance(seq[1]); + } + + public DerObjectIdentifier ResponseType + { + get { return responseType; } + } + + public Asn1OctetString Response + { + get { return response; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * ResponseBytes ::=       Sequence {
+         *     responseType   OBJECT IDENTIFIER,
+         *     response       OCTET STRING }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(responseType, response); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ResponseBytes.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ResponseBytes.cs.meta new file mode 100644 index 000000000..39390293f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ResponseBytes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c1277fc319921a4ebca46154111d17d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ResponseData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ResponseData.cs new file mode 100644 index 000000000..2bb60af5f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ResponseData.cs @@ -0,0 +1,157 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp +{ + public class ResponseData + : Asn1Encodable + { + private static readonly DerInteger V1 = new DerInteger(0); + + private readonly bool versionPresent; + private readonly DerInteger version; + private readonly ResponderID responderID; + private readonly Asn1GeneralizedTime producedAt; + private readonly Asn1Sequence responses; + private readonly X509Extensions responseExtensions; + + public static ResponseData GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static ResponseData GetInstance( + object obj) + { + if (obj == null || obj is ResponseData) + { + return (ResponseData)obj; + } + + if (obj is Asn1Sequence) + { + return new ResponseData((Asn1Sequence)obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public ResponseData( + DerInteger version, + ResponderID responderID, + Asn1GeneralizedTime producedAt, + Asn1Sequence responses, + X509Extensions responseExtensions) + { + this.version = version; + this.responderID = responderID; + this.producedAt = producedAt; + this.responses = responses; + this.responseExtensions = responseExtensions; + } + + public ResponseData( + ResponderID responderID, + Asn1GeneralizedTime producedAt, + Asn1Sequence responses, + X509Extensions responseExtensions) + : this(V1, responderID, producedAt, responses, responseExtensions) + { + } + + private ResponseData( + Asn1Sequence seq) + { + int index = 0; + + Asn1Encodable enc = seq[0]; + if (enc is Asn1TaggedObject) + { + Asn1TaggedObject o = (Asn1TaggedObject)enc; + + if (o.TagNo == 0) + { + this.versionPresent = true; + this.version = DerInteger.GetInstance(o, true); + index++; + } + else + { + this.version = V1; + } + } + else + { + this.version = V1; + } + + this.responderID = ResponderID.GetInstance(seq[index++]); + this.producedAt = (Asn1GeneralizedTime)seq[index++]; + this.responses = (Asn1Sequence)seq[index++]; + + if (seq.Count > index) + { + this.responseExtensions = X509Extensions.GetInstance( + (Asn1TaggedObject)seq[index], true); + } + } + + public DerInteger Version + { + get { return version; } + } + + public ResponderID ResponderID + { + get { return responderID; } + } + + public Asn1GeneralizedTime ProducedAt + { + get { return producedAt; } + } + + public Asn1Sequence Responses + { + get { return responses; } + } + + public X509Extensions ResponseExtensions + { + get { return responseExtensions; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * ResponseData ::= Sequence {
+         *     version              [0] EXPLICIT Version DEFAULT v1,
+         *     responderID              ResponderID,
+         *     producedAt               GeneralizedTime,
+         *     responses                Sequence OF SingleResponse,
+         *     responseExtensions   [1] EXPLICIT Extensions OPTIONAL }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + if (versionPresent || !version.Equals(V1)) + { + v.Add(new DerTaggedObject(true, 0, version)); + } + + v.Add(responderID, producedAt, responses); + v.AddOptionalTagged(true, 1, responseExtensions); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ResponseData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ResponseData.cs.meta new file mode 100644 index 000000000..c3fdeb290 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ResponseData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9a5e949e97ad55f46a22cdc20c23ac99 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/RevokedInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/RevokedInfo.cs new file mode 100644 index 000000000..718b75e03 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/RevokedInfo.cs @@ -0,0 +1,95 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp +{ + public class RevokedInfo + : Asn1Encodable + { + private readonly Asn1GeneralizedTime revocationTime; + private readonly CrlReason revocationReason; + + public static RevokedInfo GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static RevokedInfo GetInstance( + object obj) + { + if (obj == null || obj is RevokedInfo) + { + return (RevokedInfo) obj; + } + + if (obj is Asn1Sequence) + { + return new RevokedInfo((Asn1Sequence) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public RevokedInfo( + Asn1GeneralizedTime revocationTime) + : this(revocationTime, null) + { + } + + public RevokedInfo( + Asn1GeneralizedTime revocationTime, + CrlReason revocationReason) + { + if (revocationTime == null) + throw new ArgumentNullException("revocationTime"); + + this.revocationTime = revocationTime; + this.revocationReason = revocationReason; + } + + private RevokedInfo( + Asn1Sequence seq) + { + this.revocationTime = (Asn1GeneralizedTime)seq[0]; + + if (seq.Count > 1) + { + this.revocationReason = new CrlReason( + DerEnumerated.GetInstance((Asn1TaggedObject) seq[1], true)); + } + } + + public Asn1GeneralizedTime RevocationTime + { + get { return revocationTime; } + } + + public CrlReason RevocationReason + { + get { return revocationReason; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * RevokedInfo ::= Sequence {
+         *      revocationTime              GeneralizedTime,
+         *      revocationReason    [0]     EXPLICIT CRLReason OPTIONAL }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(revocationTime); + v.AddOptionalTagged(true, 0, revocationReason); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/RevokedInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/RevokedInfo.cs.meta new file mode 100644 index 000000000..6a842b6b8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/RevokedInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 39642c63b2e65694eb47d4378f1b69da +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ServiceLocator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ServiceLocator.cs new file mode 100644 index 000000000..09bb7072e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ServiceLocator.cs @@ -0,0 +1,94 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp +{ + public class ServiceLocator + : Asn1Encodable + { + private readonly X509Name issuer; + private readonly Asn1Object locator; + + public static ServiceLocator GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static ServiceLocator GetInstance( + object obj) + { + if (obj == null || obj is ServiceLocator) + { + return (ServiceLocator) obj; + } + + if (obj is Asn1Sequence) + { + return new ServiceLocator((Asn1Sequence) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public ServiceLocator( + X509Name issuer) + : this(issuer, null) + { + } + + public ServiceLocator( + X509Name issuer, + Asn1Object locator) + { + if (issuer == null) + throw new ArgumentNullException("issuer"); + + this.issuer = issuer; + this.locator = locator; + } + + private ServiceLocator( + Asn1Sequence seq) + { + this.issuer = X509Name.GetInstance(seq[0]); + + if (seq.Count > 1) + { + this.locator = seq[1].ToAsn1Object(); + } + } + + public X509Name Issuer + { + get { return issuer; } + } + + public Asn1Object Locator + { + get { return locator; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * ServiceLocator ::= Sequence {
+         *     issuer    Name,
+         *     locator   AuthorityInfoAccessSyntax OPTIONAL }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(issuer); + v.AddOptional(locator); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ServiceLocator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ServiceLocator.cs.meta new file mode 100644 index 000000000..3417f799c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/ServiceLocator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b835881b17de6fe4786621f9fd55405e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/Signature.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/Signature.cs new file mode 100644 index 000000000..5d15d6135 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/Signature.cs @@ -0,0 +1,113 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp +{ + public class Signature + : Asn1Encodable + { + internal AlgorithmIdentifier signatureAlgorithm; + internal DerBitString signatureValue; + internal Asn1Sequence certs; + + public static Signature GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static Signature GetInstance( + object obj) + { + if (obj == null || obj is Signature) + { + return (Signature)obj; + } + + if (obj is Asn1Sequence) + { + return new Signature((Asn1Sequence)obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public Signature( + AlgorithmIdentifier signatureAlgorithm, + DerBitString signatureValue) + : this(signatureAlgorithm, signatureValue, null) + { + } + + public Signature( + AlgorithmIdentifier signatureAlgorithm, + DerBitString signatureValue, + Asn1Sequence certs) + { + if (signatureAlgorithm == null) + throw new ArgumentException("signatureAlgorithm"); + if (signatureValue == null) + throw new ArgumentException("signatureValue"); + + this.signatureAlgorithm = signatureAlgorithm; + this.signatureValue = signatureValue; + this.certs = certs; + } + + private Signature( + Asn1Sequence seq) + { + signatureAlgorithm = AlgorithmIdentifier.GetInstance(seq[0]); + signatureValue = (DerBitString)seq[1]; + + if (seq.Count == 3) + { + certs = Asn1Sequence.GetInstance( + (Asn1TaggedObject)seq[2], true); + } + } + + public AlgorithmIdentifier SignatureAlgorithm + { + get { return signatureAlgorithm; } + } + + public DerBitString SignatureValue + { + get { return signatureValue; } + } + + public byte[] GetSignatureOctets() + { + return signatureValue.GetOctets(); + } + + public Asn1Sequence Certs + { + get { return certs; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * Signature       ::=     Sequence {
+         *     signatureAlgorithm      AlgorithmIdentifier,
+         *     signature               BIT STRING,
+         *     certs               [0] EXPLICIT Sequence OF Certificate OPTIONAL}
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(signatureAlgorithm, signatureValue); + v.AddOptionalTagged(true, 0, certs); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/Signature.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/Signature.cs.meta new file mode 100644 index 000000000..74f378256 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/Signature.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b21fa2dbdb89eaf49a4a2cc3ee8041e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/SingleResponse.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/SingleResponse.cs new file mode 100644 index 000000000..843067979 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/SingleResponse.cs @@ -0,0 +1,131 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp +{ + public class SingleResponse + : Asn1Encodable + { + private readonly CertID certID; + private readonly CertStatus certStatus; + private readonly Asn1GeneralizedTime thisUpdate; + private readonly Asn1GeneralizedTime nextUpdate; + private readonly X509Extensions singleExtensions; + + public SingleResponse( + CertID certID, + CertStatus certStatus, + Asn1GeneralizedTime thisUpdate, + Asn1GeneralizedTime nextUpdate, + X509Extensions singleExtensions) + { + this.certID = certID; + this.certStatus = certStatus; + this.thisUpdate = thisUpdate; + this.nextUpdate = nextUpdate; + this.singleExtensions = singleExtensions; + } + + public SingleResponse( + Asn1Sequence seq) + { + this.certID = CertID.GetInstance(seq[0]); + this.certStatus = CertStatus.GetInstance(seq[1]); + this.thisUpdate = (Asn1GeneralizedTime)seq[2]; + + if (seq.Count > 4) + { + this.nextUpdate = Asn1GeneralizedTime.GetInstance( + (Asn1TaggedObject) seq[3], true); + this.singleExtensions = X509Extensions.GetInstance( + (Asn1TaggedObject) seq[4], true); + } + else if (seq.Count > 3) + { + Asn1TaggedObject o = (Asn1TaggedObject) seq[3]; + + if (o.TagNo == 0) + { + this.nextUpdate = Asn1GeneralizedTime.GetInstance(o, true); + } + else + { + this.singleExtensions = X509Extensions.GetInstance(o, true); + } + } + } + + public static SingleResponse GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static SingleResponse GetInstance( + object obj) + { + if (obj == null || obj is SingleResponse) + { + return (SingleResponse)obj; + } + + if (obj is Asn1Sequence) + { + return new SingleResponse((Asn1Sequence)obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public CertID CertId + { + get { return certID; } + } + + public CertStatus CertStatus + { + get { return certStatus; } + } + + public Asn1GeneralizedTime ThisUpdate + { + get { return thisUpdate; } + } + + public Asn1GeneralizedTime NextUpdate + { + get { return nextUpdate; } + } + + public X509Extensions SingleExtensions + { + get { return singleExtensions; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         *  SingleResponse ::= Sequence {
+         *          certID                       CertID,
+         *          certStatus                   CertStatus,
+         *          thisUpdate                   GeneralizedTime,
+         *          nextUpdate         [0]       EXPLICIT GeneralizedTime OPTIONAL,
+         *          singleExtensions   [1]       EXPLICIT Extensions OPTIONAL }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(certID, certStatus, thisUpdate); + v.AddOptionalTagged(true, 0, nextUpdate); + v.AddOptionalTagged(true, 1, singleExtensions); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/SingleResponse.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/SingleResponse.cs.meta new file mode 100644 index 000000000..299afbc94 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/SingleResponse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f95d68668b2faba49b1fb25625208006 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/TBSRequest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/TBSRequest.cs new file mode 100644 index 000000000..2206a810d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/TBSRequest.cs @@ -0,0 +1,146 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp +{ + public class TbsRequest + : Asn1Encodable + { + private static readonly DerInteger V1 = new DerInteger(0); + + private readonly DerInteger version; + private readonly GeneralName requestorName; + private readonly Asn1Sequence requestList; + private readonly X509Extensions requestExtensions; + + private bool versionSet; + + public static TbsRequest GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static TbsRequest GetInstance( + object obj) + { + if (obj == null || obj is TbsRequest) + { + return (TbsRequest)obj; + } + + if (obj is Asn1Sequence) + { + return new TbsRequest((Asn1Sequence)obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public TbsRequest( + GeneralName requestorName, + Asn1Sequence requestList, + X509Extensions requestExtensions) + { + this.version = V1; + this.requestorName = requestorName; + this.requestList = requestList; + this.requestExtensions = requestExtensions; + } + + private TbsRequest( + Asn1Sequence seq) + { + int index = 0; + + Asn1Encodable enc = seq[0]; + if (enc is Asn1TaggedObject) + { + Asn1TaggedObject o = (Asn1TaggedObject) enc; + + if (o.TagNo == 0) + { + versionSet = true; + version = DerInteger.GetInstance(o, true); + index++; + } + else + { + version = V1; + } + } + else + { + version = V1; + } + + if (seq[index] is Asn1TaggedObject) + { + requestorName = GeneralName.GetInstance((Asn1TaggedObject) seq[index++], true); + } + + requestList = (Asn1Sequence) seq[index++]; + + if (seq.Count == (index + 1)) + { + requestExtensions = X509Extensions.GetInstance((Asn1TaggedObject) seq[index], true); + } + } + + public DerInteger Version + { + get { return version; } + } + + public GeneralName RequestorName + { + get { return requestorName; } + } + + public Asn1Sequence RequestList + { + get { return requestList; } + } + + public X509Extensions RequestExtensions + { + get { return requestExtensions; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * TBSRequest      ::=     Sequence {
+         *     version             [0]     EXPLICIT Version DEFAULT v1,
+         *     requestorName       [1]     EXPLICIT GeneralName OPTIONAL,
+         *     requestList                 Sequence OF Request,
+         *     requestExtensions   [2]     EXPLICIT Extensions OPTIONAL }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + // + // if default don't include - unless explicitly provided. Not strictly correct + // but required for some requests + // + if (!version.Equals(V1) || versionSet) + { + v.Add(new DerTaggedObject(true, 0, version)); + } + + v.AddOptionalTagged(true, 1, requestorName); + v.Add(requestList); + v.AddOptionalTagged(true, 2, requestExtensions); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/TBSRequest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/TBSRequest.cs.meta new file mode 100644 index 000000000..d03d9b472 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ocsp/TBSRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 56a7afa756fe1904b853bb8c33b6ece5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/oiw.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/oiw.meta new file mode 100644 index 000000000..5c51a6bd2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/oiw.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 09d1a73b7ec49b046a598def5fc61483 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/oiw/ElGamalParameter.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/oiw/ElGamalParameter.cs new file mode 100644 index 000000000..186d1ab9e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/oiw/ElGamalParameter.cs @@ -0,0 +1,49 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw +{ + public class ElGamalParameter + : Asn1Encodable + { + internal DerInteger p, g; + + public ElGamalParameter( + BigInteger p, + BigInteger g) + { + this.p = new DerInteger(p); + this.g = new DerInteger(g); + } + + public ElGamalParameter( + Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + p = DerInteger.GetInstance(seq[0]); + g = DerInteger.GetInstance(seq[1]); + } + + public BigInteger P + { + get { return p.PositiveValue; } + } + + public BigInteger G + { + get { return g.PositiveValue; } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(p, g); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/oiw/ElGamalParameter.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/oiw/ElGamalParameter.cs.meta new file mode 100644 index 000000000..cc0bc6553 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/oiw/ElGamalParameter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a50b32b1d8a393a438cb8d7e885202e1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/oiw/OIWObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/oiw/OIWObjectIdentifiers.cs new file mode 100644 index 000000000..8932a1189 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/oiw/OIWObjectIdentifiers.cs @@ -0,0 +1,33 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw +{ + public abstract class OiwObjectIdentifiers + { + public static readonly DerObjectIdentifier MD4WithRsa = new DerObjectIdentifier("1.3.14.3.2.2"); + public static readonly DerObjectIdentifier MD5WithRsa = new DerObjectIdentifier("1.3.14.3.2.3"); + public static readonly DerObjectIdentifier MD4WithRsaEncryption = new DerObjectIdentifier("1.3.14.3.2.4"); + + public static readonly DerObjectIdentifier DesEcb = new DerObjectIdentifier("1.3.14.3.2.6"); + public static readonly DerObjectIdentifier DesCbc = new DerObjectIdentifier("1.3.14.3.2.7"); + public static readonly DerObjectIdentifier DesOfb = new DerObjectIdentifier("1.3.14.3.2.8"); + public static readonly DerObjectIdentifier DesCfb = new DerObjectIdentifier("1.3.14.3.2.9"); + + public static readonly DerObjectIdentifier DesEde = new DerObjectIdentifier("1.3.14.3.2.17"); + + // id-SHA1 OBJECT IDENTIFIER ::= + // {iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2) 26 } // + public static readonly DerObjectIdentifier IdSha1 = new DerObjectIdentifier("1.3.14.3.2.26"); + + public static readonly DerObjectIdentifier DsaWithSha1 = new DerObjectIdentifier("1.3.14.3.2.27"); + + public static readonly DerObjectIdentifier Sha1WithRsa = new DerObjectIdentifier("1.3.14.3.2.29"); + + // ElGamal Algorithm OBJECT IDENTIFIER ::= + // {iso(1) identified-organization(3) oiw(14) dirservsig(7) algorithm(2) encryption(1) 1 } + // + public static readonly DerObjectIdentifier ElGamalAlgorithm = new DerObjectIdentifier("1.3.14.7.2.1.1"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/oiw/OIWObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/oiw/OIWObjectIdentifiers.cs.meta new file mode 100644 index 000000000..bf2ba50b4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/oiw/OIWObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 869fa662a3f9784479a943f14f0a8915 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs.meta new file mode 100644 index 000000000..ce68dc7ce --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 09fcff0d03b2a6c4c8a625ec7c05be96 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/Attribute.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/Attribute.cs new file mode 100644 index 000000000..c5efb2ee0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/Attribute.cs @@ -0,0 +1,83 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public class AttributePkcs + : Asn1Encodable + { + private readonly DerObjectIdentifier attrType; + private readonly Asn1Set attrValues; + + /** + * return an Attribute object from the given object. + * + * @param o the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static AttributePkcs GetInstance( + object obj) + { + AttributePkcs attr = obj as AttributePkcs; + if (obj == null || attr != null) + { + return attr; + } + + Asn1Sequence seq = obj as Asn1Sequence; + if (seq != null) + { + return new AttributePkcs(seq); + } + + throw new ArgumentException("Unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + private AttributePkcs( + Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + attrType = DerObjectIdentifier.GetInstance(seq[0]); + attrValues = Asn1Set.GetInstance(seq[1]); + } + + public AttributePkcs( + DerObjectIdentifier attrType, + Asn1Set attrValues) + { + this.attrType = attrType; + this.attrValues = attrValues; + } + + public DerObjectIdentifier AttrType + { + get { return attrType; } + } + + public Asn1Set AttrValues + { + get { return attrValues; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * Attr ::= Sequence {
+         *     attrType OBJECT IDENTIFIER,
+         *     attrValues Set OF AttributeValue
+         * }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(attrType, attrValues); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/Attribute.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/Attribute.cs.meta new file mode 100644 index 000000000..0d3e5a79e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/Attribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d43f45bc4a941174f93b102883e8db23 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/AuthenticatedSafe.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/AuthenticatedSafe.cs new file mode 100644 index 000000000..e75ec31b3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/AuthenticatedSafe.cs @@ -0,0 +1,67 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public class AuthenticatedSafe + : Asn1Encodable + { + private static ContentInfo[] Copy(ContentInfo[] info) + { + return (ContentInfo[])info.Clone(); + } + + public static AuthenticatedSafe GetInstance(object obj) + { + if (obj is AuthenticatedSafe) + return (AuthenticatedSafe)obj; + if (obj == null) + return null; + return new AuthenticatedSafe(Asn1Sequence.GetInstance(obj)); + } + + private readonly ContentInfo[] info; + private readonly bool isBer; + + private AuthenticatedSafe(Asn1Sequence seq) + { + info = new ContentInfo[seq.Count]; + + for (int i = 0; i != info.Length; i++) + { + info[i] = ContentInfo.GetInstance(seq[i]); + } + + isBer = seq is BerSequence; + } + + public AuthenticatedSafe( + ContentInfo[] info) + { + this.info = Copy(info); + this.isBer = true; + } + + public ContentInfo[] GetContentInfo() + { + return Copy(info); + } + + public override Asn1Object ToAsn1Object() + { + if (isBer) + { + return new BerSequence(info); + } + + // TODO bc-java uses DL sequence + //return new DLSequence(info); + return new DerSequence(info); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/AuthenticatedSafe.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/AuthenticatedSafe.cs.meta new file mode 100644 index 000000000..798d17e29 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/AuthenticatedSafe.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a5509ac0a56c50c4c9a320a66874e392 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/CertBag.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/CertBag.cs new file mode 100644 index 000000000..7412aa441 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/CertBag.cs @@ -0,0 +1,56 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public class CertBag + : Asn1Encodable + { + public static CertBag GetInstance(object obj) + { + if (obj is CertBag) + return (CertBag)obj; + if (obj == null) + return null; + return new CertBag(Asn1Sequence.GetInstance(obj)); + } + + private readonly DerObjectIdentifier certID; + private readonly Asn1Object certValue; + + private CertBag(Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + this.certID = DerObjectIdentifier.GetInstance(seq[0]); + this.certValue = Asn1TaggedObject.GetInstance(seq[1]).GetObject(); + } + + public CertBag( + DerObjectIdentifier certID, + Asn1Object certValue) + { + this.certID = certID; + this.certValue = certValue; + } + + public virtual DerObjectIdentifier CertID + { + get { return certID; } + } + + public virtual Asn1Object CertValue + { + get { return certValue; } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(certID, new DerTaggedObject(0, certValue)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/CertBag.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/CertBag.cs.meta new file mode 100644 index 000000000..d298c6f32 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/CertBag.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 94efdd8ff79c1294ebc94c6454d6e202 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/CertificationRequest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/CertificationRequest.cs new file mode 100644 index 000000000..52b35a681 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/CertificationRequest.cs @@ -0,0 +1,87 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + /** + * Pkcs10 Certfication request object. + *
+     * CertificationRequest ::= Sequence {
+     *   certificationRequestInfo  CertificationRequestInfo,
+     *   signatureAlgorithm        AlgorithmIdentifier{{ SignatureAlgorithms }},
+     *   signature                 BIT STRING
+     * }
+     * 
+ */ + public class CertificationRequest + : Asn1Encodable + { + protected CertificationRequestInfo reqInfo; + protected AlgorithmIdentifier sigAlgId; + protected DerBitString sigBits; + + public static CertificationRequest GetInstance( + object obj) + { + if (obj == null) + return null; + if (obj is CertificationRequest) + return (CertificationRequest)obj; + return new CertificationRequest(Asn1Sequence.GetInstance(obj)); + } + + protected CertificationRequest() + { + } + + public CertificationRequest( + CertificationRequestInfo requestInfo, + AlgorithmIdentifier algorithm, + DerBitString signature) + { + this.reqInfo = requestInfo; + this.sigAlgId = algorithm; + this.sigBits = signature; + } + + internal CertificationRequest(Asn1Sequence seq) + { + if (seq.Count != 3) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + reqInfo = CertificationRequestInfo.GetInstance(seq[0]); + sigAlgId = AlgorithmIdentifier.GetInstance(seq[1]); + sigBits = DerBitString.GetInstance(seq[2]); + } + + public CertificationRequestInfo GetCertificationRequestInfo() + { + return reqInfo; + } + + public AlgorithmIdentifier SignatureAlgorithm + { + get { return sigAlgId; } + } + + public DerBitString Signature + { + get { return sigBits; } + } + + public byte[] GetSignatureOctets() + { + return sigBits.GetOctets(); + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(reqInfo, sigAlgId, sigBits); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/CertificationRequest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/CertificationRequest.cs.meta new file mode 100644 index 000000000..711571902 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/CertificationRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e4e699e746ace347bd9bbc263c0fd1e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/CertificationRequestInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/CertificationRequestInfo.cs new file mode 100644 index 000000000..c4b0c60a4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/CertificationRequestInfo.cs @@ -0,0 +1,135 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + /** + * Pkcs10 CertificationRequestInfo object. + *
+     *  CertificationRequestInfo ::= Sequence {
+     *   version             Integer { v1(0) } (v1,...),
+     *   subject             Name,
+     *   subjectPKInfo   SubjectPublicKeyInfo{{ PKInfoAlgorithms }},
+     *   attributes          [0] Attributes{{ CRIAttributes }}
+     *  }
+     *
+     *  Attributes { ATTRIBUTE:IOSet } ::= Set OF Attr{{ IOSet }}
+     *
+     *  Attr { ATTRIBUTE:IOSet } ::= Sequence {
+     *    type    ATTRIBUTE.&id({IOSet}),
+     *    values  Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type})
+     *  }
+     * 
+ */ + public class CertificationRequestInfo + : Asn1Encodable + { + internal DerInteger version = new DerInteger(0); + internal X509Name subject; + internal SubjectPublicKeyInfo subjectPKInfo; + internal Asn1Set attributes; + + public static CertificationRequestInfo GetInstance(object obj) + { + if (obj is CertificationRequestInfo) + return (CertificationRequestInfo)obj; + if (obj != null) + return new CertificationRequestInfo(Asn1Sequence.GetInstance(obj)); + return null; + } + + public CertificationRequestInfo( + X509Name subject, + SubjectPublicKeyInfo pkInfo, + Asn1Set attributes) + { + this.subject = subject; + this.subjectPKInfo = pkInfo; + this.attributes = attributes; + + ValidateAttributes(attributes); + + if (subject == null || version == null || subjectPKInfo == null) + { + throw new ArgumentException( + "Not all mandatory fields set in CertificationRequestInfo generator."); + } + } + + private CertificationRequestInfo( + Asn1Sequence seq) + { + version = (DerInteger) seq[0]; + + subject = X509Name.GetInstance(seq[1]); + subjectPKInfo = SubjectPublicKeyInfo.GetInstance(seq[2]); + + // + // some CertificationRequestInfo objects seem to treat this field + // as optional. + // + if (seq.Count > 3) + { + DerTaggedObject tagobj = (DerTaggedObject) seq[3]; + attributes = Asn1Set.GetInstance(tagobj, false); + } + + ValidateAttributes(attributes); + + if (subject == null || version == null || subjectPKInfo == null) + { + throw new ArgumentException( + "Not all mandatory fields set in CertificationRequestInfo generator."); + } + } + + public DerInteger Version + { + get { return version; } + } + + public X509Name Subject + { + get { return subject; } + } + + public SubjectPublicKeyInfo SubjectPublicKeyInfo + { + get { return subjectPKInfo; } + } + + public Asn1Set Attributes + { + get { return attributes; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(version, subject, subjectPKInfo); + v.AddOptionalTagged(false, 0, attributes); + return new DerSequence(v); + } + + private static void ValidateAttributes(Asn1Set attributes) + { + if (attributes == null) + return; + + foreach (Asn1Encodable ae in attributes) + { + Asn1Object obj = ae.ToAsn1Object(); + AttributePkcs attr = AttributePkcs.GetInstance(obj); + if (attr.AttrType.Equals(PkcsObjectIdentifiers.Pkcs9AtChallengePassword)) + { + if (attr.AttrValues.Count != 1) + throw new ArgumentException("challengePassword attribute must have one value"); + } + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/CertificationRequestInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/CertificationRequestInfo.cs.meta new file mode 100644 index 000000000..318d03665 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/CertificationRequestInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e133ac9ba64dd0644824dab07bb829c2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/ContentInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/ContentInfo.cs new file mode 100644 index 000000000..f2e31ac0b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/ContentInfo.cs @@ -0,0 +1,75 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public class ContentInfo + : Asn1Encodable + { + private readonly DerObjectIdentifier contentType; + private readonly Asn1Encodable content; + + public static ContentInfo GetInstance(object obj) + { + if (obj == null) + return null; + ContentInfo existing = obj as ContentInfo; + if (existing != null) + return existing; + return new ContentInfo(Asn1Sequence.GetInstance(obj)); + } + + private ContentInfo( + Asn1Sequence seq) + { + contentType = (DerObjectIdentifier) seq[0]; + + if (seq.Count > 1) + { + content = ((Asn1TaggedObject) seq[1]).GetObject(); + } + } + + public ContentInfo( + DerObjectIdentifier contentType, + Asn1Encodable content) + { + this.contentType = contentType; + this.content = content; + } + + public DerObjectIdentifier ContentType + { + get { return contentType; } + } + + public Asn1Encodable Content + { + get { return content; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * ContentInfo ::= Sequence {
+         *          contentType ContentType,
+         *          content
+         *          [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(contentType); + + if (content != null) + { + v.Add(new BerTaggedObject(0, content)); + } + + return new BerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/ContentInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/ContentInfo.cs.meta new file mode 100644 index 000000000..f2e3dac34 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/ContentInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5322ed3a7bcf61c4cbb3a9aec4ec97cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/DHParameter.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/DHParameter.cs new file mode 100644 index 000000000..72d535c60 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/DHParameter.cs @@ -0,0 +1,67 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public class DHParameter + : Asn1Encodable + { + internal DerInteger p, g, l; + + public DHParameter( + BigInteger p, + BigInteger g, + int l) + { + this.p = new DerInteger(p); + this.g = new DerInteger(g); + + if (l != 0) + { + this.l = new DerInteger(l); + } + } + + public DHParameter( + Asn1Sequence seq) + { + var e = seq.GetEnumerator(); + + e.MoveNext(); + p = (DerInteger)e.Current; + + e.MoveNext(); + g = (DerInteger)e.Current; + + if (e.MoveNext()) + { + l = (DerInteger) e.Current; + } + } + + public BigInteger P + { + get { return p.PositiveValue; } + } + + public BigInteger G + { + get { return g.PositiveValue; } + } + + public BigInteger L + { + get { return l == null ? null : l.PositiveValue; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(p, g); + v.AddOptional(l); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/DHParameter.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/DHParameter.cs.meta new file mode 100644 index 000000000..8a3113479 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/DHParameter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 67e3f053ff4865548b157255d290ff7a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/EncryptedData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/EncryptedData.cs new file mode 100644 index 000000000..52f079eb6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/EncryptedData.cs @@ -0,0 +1,107 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + /** + * The EncryptedData object. + *
+     *      EncryptedData ::= Sequence {
+     *           version Version,
+     *           encryptedContentInfo EncryptedContentInfo
+     *      }
+     *
+     *
+     *      EncryptedContentInfo ::= Sequence {
+     *          contentType ContentType,
+     *          contentEncryptionAlgorithm  ContentEncryptionAlgorithmIdentifier,
+     *          encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
+     *    }
+     *
+     *    EncryptedContent ::= OCTET STRING
+     * 
+ */ + public class EncryptedData + : Asn1Encodable + { + private readonly Asn1Sequence data; +// private readonly DerObjectIdentifier bagId; +// private readonly Asn1Object bagValue; + + public static EncryptedData GetInstance( + object obj) + { + if (obj is EncryptedData) + { + return (EncryptedData) obj; + } + + if (obj is Asn1Sequence) + { + return new EncryptedData((Asn1Sequence) obj); + } + + throw new ArgumentException("Unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + private EncryptedData( + Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + DerInteger version = (DerInteger)seq[0]; + if (!version.HasValue(0)) + throw new ArgumentException("sequence not version 0"); + + this.data = (Asn1Sequence) seq[1]; + } + + public EncryptedData( + DerObjectIdentifier contentType, + AlgorithmIdentifier encryptionAlgorithm, + Asn1Encodable content) + { + data = new BerSequence( + contentType, + encryptionAlgorithm.ToAsn1Object(), + new BerTaggedObject(false, 0, content)); + } + + public DerObjectIdentifier ContentType + { + get { return (DerObjectIdentifier) data[0]; } + } + + public AlgorithmIdentifier EncryptionAlgorithm + { + get { return AlgorithmIdentifier.GetInstance(data[1]); } + } + + public Asn1OctetString Content + { + get + { + if (data.Count == 3) + { + DerTaggedObject o = (DerTaggedObject) data[2]; + + return Asn1OctetString.GetInstance(o, false); + } + + return null; + } + } + + public override Asn1Object ToAsn1Object() + { + return new BerSequence(new DerInteger(0), data); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/EncryptedData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/EncryptedData.cs.meta new file mode 100644 index 000000000..2336358d2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/EncryptedData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e5a5e27478cb2e4ca76eab1c04d9d47 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/EncryptedPrivateKeyInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/EncryptedPrivateKeyInfo.cs new file mode 100644 index 000000000..c81177517 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/EncryptedPrivateKeyInfo.cs @@ -0,0 +1,79 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public class EncryptedPrivateKeyInfo + : Asn1Encodable + { + private readonly AlgorithmIdentifier algId; + private readonly Asn1OctetString data; + + private EncryptedPrivateKeyInfo(Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + algId = AlgorithmIdentifier.GetInstance(seq[0]); + data = Asn1OctetString.GetInstance(seq[1]); + } + + public EncryptedPrivateKeyInfo( + AlgorithmIdentifier algId, + byte[] encoding) + { + this.algId = algId; + this.data = new DerOctetString(encoding); + } + + public static EncryptedPrivateKeyInfo GetInstance( + object obj) + { + if (obj is EncryptedPrivateKeyInfo) + { + return (EncryptedPrivateKeyInfo) obj; + } + + if (obj is Asn1Sequence seq) + return new EncryptedPrivateKeyInfo(seq); + + throw new ArgumentException("Unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public AlgorithmIdentifier EncryptionAlgorithm + { + get { return algId; } + } + + public byte[] GetEncryptedData() + { + return data.GetOctets(); + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * EncryptedPrivateKeyInfo ::= Sequence {
+         *      encryptionAlgorithm AlgorithmIdentifier {{KeyEncryptionAlgorithms}},
+         *      encryptedData EncryptedData
+         * }
+         *
+         * EncryptedData ::= OCTET STRING
+         *
+         * KeyEncryptionAlgorithms ALGORITHM-IDENTIFIER ::= {
+         *          ... -- For local profiles
+         * }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(algId, data); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/EncryptedPrivateKeyInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/EncryptedPrivateKeyInfo.cs.meta new file mode 100644 index 000000000..1ab8cab72 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/EncryptedPrivateKeyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af5c877a9b9cdf1459c179e82b8524a3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/EncryptionScheme.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/EncryptionScheme.cs new file mode 100644 index 000000000..0d7ff9a52 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/EncryptionScheme.cs @@ -0,0 +1,59 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public class EncryptionScheme + : AlgorithmIdentifier + { + public EncryptionScheme( + DerObjectIdentifier objectID) + : base(objectID) + { + } + + public EncryptionScheme( + DerObjectIdentifier objectID, + Asn1Encodable parameters) + : base(objectID, parameters) + { + } + + internal EncryptionScheme( + Asn1Sequence seq) + : this((DerObjectIdentifier)seq[0], seq[1]) + { + } + + public new static EncryptionScheme GetInstance(object obj) + { + if (obj is EncryptionScheme) + { + return (EncryptionScheme)obj; + } + + if (obj is Asn1Sequence) + { + return new EncryptionScheme((Asn1Sequence)obj); + } + + throw new ArgumentException("Unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public Asn1Object Asn1Object + { + get { return Parameters.ToAsn1Object(); } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(Algorithm, Parameters); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/EncryptionScheme.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/EncryptionScheme.cs.meta new file mode 100644 index 000000000..56194898c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/EncryptionScheme.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1be94192fb432444a8f65ef46743b401 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/IssuerAndSerialNumber.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/IssuerAndSerialNumber.cs new file mode 100644 index 000000000..7f5e86aac --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/IssuerAndSerialNumber.cs @@ -0,0 +1,76 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public class IssuerAndSerialNumber + : Asn1Encodable + { + private readonly X509Name name; + private readonly DerInteger certSerialNumber; + + public static IssuerAndSerialNumber GetInstance( + object obj) + { + if (obj is IssuerAndSerialNumber) + { + return (IssuerAndSerialNumber) obj; + } + + if (obj is Asn1Sequence) + { + return new IssuerAndSerialNumber((Asn1Sequence) obj); + } + + throw new ArgumentException("Unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + private IssuerAndSerialNumber( + Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + this.name = X509Name.GetInstance(seq[0]); + this.certSerialNumber = DerInteger.GetInstance(seq[1]); + } + + public IssuerAndSerialNumber( + X509Name name, + BigInteger certSerialNumber) + { + this.name = name; + this.certSerialNumber = new DerInteger(certSerialNumber); + } + + public IssuerAndSerialNumber( + X509Name name, + DerInteger certSerialNumber) + { + this.name = name; + this.certSerialNumber = certSerialNumber; + } + + public X509Name Name + { + get { return name; } + } + + public DerInteger CertificateSerialNumber + { + get { return certSerialNumber; } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(name, certSerialNumber); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/IssuerAndSerialNumber.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/IssuerAndSerialNumber.cs.meta new file mode 100644 index 000000000..d4af237f7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/IssuerAndSerialNumber.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04e4c32bfcc281d43a3839b6418f7c9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/KeyDerivationFunc.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/KeyDerivationFunc.cs new file mode 100644 index 000000000..cc136ec11 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/KeyDerivationFunc.cs @@ -0,0 +1,25 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public class KeyDerivationFunc + : AlgorithmIdentifier + { + internal KeyDerivationFunc(Asn1Sequence seq) + : base(seq) + { + } + + public KeyDerivationFunc( + DerObjectIdentifier id, + Asn1Encodable parameters) + : base(id, parameters) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/KeyDerivationFunc.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/KeyDerivationFunc.cs.meta new file mode 100644 index 000000000..e0628e20c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/KeyDerivationFunc.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb32edeaaefdcc347a4362febd84a90d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/MacData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/MacData.cs new file mode 100644 index 000000000..501a3bcfc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/MacData.cs @@ -0,0 +1,100 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public class MacData + : Asn1Encodable + { + internal DigestInfo digInfo; + internal byte[] salt; + internal BigInteger iterationCount; + + public static MacData GetInstance( + object obj) + { + if (obj is MacData) + { + return (MacData) obj; + } + + if (obj is Asn1Sequence) + { + return new MacData((Asn1Sequence) obj); + } + + throw new ArgumentException("Unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + private MacData( + Asn1Sequence seq) + { + this.digInfo = DigestInfo.GetInstance(seq[0]); + this.salt = ((Asn1OctetString) seq[1]).GetOctets(); + + if (seq.Count == 3) + { + this.iterationCount = ((DerInteger) seq[2]).Value; + } + else + { + this.iterationCount = BigInteger.One; + } + } + + public MacData( + DigestInfo digInfo, + byte[] salt, + int iterationCount) + { + this.digInfo = digInfo; + this.salt = (byte[]) salt.Clone(); + this.iterationCount = BigInteger.ValueOf(iterationCount); + } + + public DigestInfo Mac + { + get { return digInfo; } + } + + public byte[] GetSalt() + { + return (byte[]) salt.Clone(); + } + + public BigInteger IterationCount + { + get { return iterationCount; } + } + + /** + *
+		 * MacData ::= SEQUENCE {
+		 *     mac      DigestInfo,
+		 *     macSalt  OCTET STRING,
+		 *     iterations INTEGER DEFAULT 1
+		 *     -- Note: The default is for historic reasons and its use is deprecated. A
+		 *     -- higher value, like 1024 is recommended.
+		 * 
+ * @return the basic DERObject construction. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(digInfo, new DerOctetString(salt)); + + if (!iterationCount.Equals(BigInteger.One)) + { + v.Add(new DerInteger(iterationCount)); + } + + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/MacData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/MacData.cs.meta new file mode 100644 index 000000000..8de127a6b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/MacData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9cc5c731aedc89645813d9fe248b448d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PBEParameter.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PBEParameter.cs new file mode 100644 index 000000000..801ddee12 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PBEParameter.cs @@ -0,0 +1,63 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public class PbeParameter + : Asn1Encodable + { + private readonly Asn1OctetString salt; + private readonly DerInteger iterationCount; + + public static PbeParameter GetInstance(object obj) + { + if (obj is PbeParameter || obj == null) + { + return (PbeParameter) obj; + } + + if (obj is Asn1Sequence) + { + return new PbeParameter((Asn1Sequence) obj); + } + + throw new ArgumentException("Unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + private PbeParameter(Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + salt = Asn1OctetString.GetInstance(seq[0]); + iterationCount = DerInteger.GetInstance(seq[1]); + } + + public PbeParameter(byte[] salt, int iterationCount) + { + this.salt = new DerOctetString(salt); + this.iterationCount = new DerInteger(iterationCount); + } + + public byte[] GetSalt() + { + return salt.GetOctets(); + } + + public BigInteger IterationCount + { + get { return iterationCount.Value; } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(salt, iterationCount); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PBEParameter.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PBEParameter.cs.meta new file mode 100644 index 000000000..47d8d8685 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PBEParameter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a2905fb1449d42a488e211b8d8d0ab97 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PBES2Parameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PBES2Parameters.cs new file mode 100644 index 000000000..f43a7feba --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PBES2Parameters.cs @@ -0,0 +1,67 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public class PbeS2Parameters + : Asn1Encodable + { + private readonly KeyDerivationFunc func; + private readonly EncryptionScheme scheme; + + public static PbeS2Parameters GetInstance(object obj) + { + if (obj == null) + return null; + PbeS2Parameters existing = obj as PbeS2Parameters; + if (existing != null) + return existing; + return new PbeS2Parameters(Asn1Sequence.GetInstance(obj)); + } + + public PbeS2Parameters(KeyDerivationFunc keyDevFunc, EncryptionScheme encScheme) + { + this.func = keyDevFunc; + this.scheme = encScheme; + } + + private PbeS2Parameters(Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + Asn1Sequence funcSeq = (Asn1Sequence)seq[0].ToAsn1Object(); + + // TODO Not sure if this special case is really necessary/appropriate + if (funcSeq[0].Equals(PkcsObjectIdentifiers.IdPbkdf2)) + { + func = new KeyDerivationFunc(PkcsObjectIdentifiers.IdPbkdf2, + Pbkdf2Params.GetInstance(funcSeq[1])); + } + else + { + func = new KeyDerivationFunc(funcSeq); + } + + scheme = EncryptionScheme.GetInstance(seq[1].ToAsn1Object()); + } + + public KeyDerivationFunc KeyDerivationFunc + { + get { return func; } + } + + public EncryptionScheme EncryptionScheme + { + get { return scheme; } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(func, scheme); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PBES2Parameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PBES2Parameters.cs.meta new file mode 100644 index 000000000..24947f229 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PBES2Parameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb3fc7932c18ad24bb197cf87989240d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PBKDF2Params.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PBKDF2Params.cs new file mode 100644 index 000000000..581933c47 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PBKDF2Params.cs @@ -0,0 +1,144 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public class Pbkdf2Params + : Asn1Encodable + { + private static AlgorithmIdentifier algid_hmacWithSHA1 = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdHmacWithSha1, DerNull.Instance); + + private readonly Asn1OctetString octStr; + private readonly DerInteger iterationCount, keyLength; + private readonly AlgorithmIdentifier prf; + + public static Pbkdf2Params GetInstance( + object obj) + { + if (obj == null || obj is Pbkdf2Params) + return (Pbkdf2Params)obj; + + if (obj is Asn1Sequence) + return new Pbkdf2Params((Asn1Sequence)obj); + + throw new ArgumentException("Unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public Pbkdf2Params( + Asn1Sequence seq) + { + if (seq.Count < 2 || seq.Count > 4) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + this.octStr = (Asn1OctetString)seq[0]; + this.iterationCount = (DerInteger)seq[1]; + + Asn1Encodable kl = null, d = null; + if (seq.Count > 3) + { + kl = seq[2]; + d = seq[3]; + } + else if (seq.Count > 2) + { + if (seq[2] is DerInteger) + { + kl = seq[2]; + } + else + { + d = seq[2]; + } + } + if (kl != null) + { + keyLength = (DerInteger)kl; + } + if (d != null) + { + prf = AlgorithmIdentifier.GetInstance(d); + } + } + + public Pbkdf2Params( + byte[] salt, + int iterationCount) + { + this.octStr = new DerOctetString(salt); + this.iterationCount = new DerInteger(iterationCount); + } + + public Pbkdf2Params( + byte[] salt, + int iterationCount, + int keyLength) + : this(salt, iterationCount) + { + this.keyLength = new DerInteger(keyLength); + } + + public Pbkdf2Params( + byte[] salt, + int iterationCount, + int keyLength, + AlgorithmIdentifier prf) + : this(salt, iterationCount, keyLength) + { + this.prf = prf; + } + + public Pbkdf2Params( + byte[] salt, + int iterationCount, + AlgorithmIdentifier prf) + : this(salt, iterationCount) + { + this.prf = prf; + } + + public byte[] GetSalt() + { + return octStr.GetOctets(); + } + + public BigInteger IterationCount + { + get { return iterationCount.Value; } + } + + public BigInteger KeyLength + { + get { return keyLength == null ? null : keyLength.Value; } + } + + public bool IsDefaultPrf + { + get { return prf == null || prf.Equals(algid_hmacWithSHA1); } + } + + public AlgorithmIdentifier Prf + { + get { return prf != null ? prf : algid_hmacWithSHA1; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(octStr, iterationCount); + v.AddOptional(keyLength); + + if (!IsDefaultPrf) + { + v.Add(prf); + } + + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PBKDF2Params.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PBKDF2Params.cs.meta new file mode 100644 index 000000000..1d5d3048f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PBKDF2Params.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5ec42b2b8cbb37f4b99b10df913c771d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PKCS12PBEParams.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PKCS12PBEParams.cs new file mode 100644 index 000000000..aea459f9d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PKCS12PBEParams.cs @@ -0,0 +1,67 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public class Pkcs12PbeParams + : Asn1Encodable + { + private readonly DerInteger iterations; + private readonly Asn1OctetString iv; + + public Pkcs12PbeParams( + byte[] salt, + int iterations) + { + this.iv = new DerOctetString(salt); + this.iterations = new DerInteger(iterations); + } + + private Pkcs12PbeParams( + Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + iv = Asn1OctetString.GetInstance(seq[0]); + iterations = DerInteger.GetInstance(seq[1]); + } + + public static Pkcs12PbeParams GetInstance( + object obj) + { + if (obj is Pkcs12PbeParams) + { + return (Pkcs12PbeParams) obj; + } + + if (obj is Asn1Sequence) + { + return new Pkcs12PbeParams((Asn1Sequence) obj); + } + + throw new ArgumentException("Unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public BigInteger Iterations + { + get { return iterations.Value; } + } + + public byte[] GetIV() + { + return iv.GetOctets(); + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(iv, iterations); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PKCS12PBEParams.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PKCS12PBEParams.cs.meta new file mode 100644 index 000000000..3d6a5fee4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PKCS12PBEParams.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd66e6bf80ac29d439006d4145a1f961 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PKCSObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PKCSObjectIdentifiers.cs new file mode 100644 index 000000000..84d555048 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PKCSObjectIdentifiers.cs @@ -0,0 +1,306 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public abstract class PkcsObjectIdentifiers + { + // + // pkcs-1 OBJECT IDENTIFIER ::= { + // iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1 } + // + public const string Pkcs1 = "1.2.840.113549.1.1"; + internal static readonly DerObjectIdentifier Pkcs1Oid = new DerObjectIdentifier(Pkcs1); + + public static readonly DerObjectIdentifier RsaEncryption = Pkcs1Oid.Branch("1"); + public static readonly DerObjectIdentifier MD2WithRsaEncryption = Pkcs1Oid.Branch("2"); + public static readonly DerObjectIdentifier MD4WithRsaEncryption = Pkcs1Oid.Branch("3"); + public static readonly DerObjectIdentifier MD5WithRsaEncryption = Pkcs1Oid.Branch("4"); + public static readonly DerObjectIdentifier Sha1WithRsaEncryption = Pkcs1Oid.Branch("5"); + public static readonly DerObjectIdentifier SrsaOaepEncryptionSet = Pkcs1Oid.Branch("6"); + public static readonly DerObjectIdentifier IdRsaesOaep = Pkcs1Oid.Branch("7"); + public static readonly DerObjectIdentifier IdMgf1 = Pkcs1Oid.Branch("8"); + public static readonly DerObjectIdentifier IdPSpecified = Pkcs1Oid.Branch("9"); + public static readonly DerObjectIdentifier IdRsassaPss = Pkcs1Oid.Branch("10"); + public static readonly DerObjectIdentifier Sha256WithRsaEncryption = Pkcs1Oid.Branch("11"); + public static readonly DerObjectIdentifier Sha384WithRsaEncryption = Pkcs1Oid.Branch("12"); + public static readonly DerObjectIdentifier Sha512WithRsaEncryption = Pkcs1Oid.Branch("13"); + public static readonly DerObjectIdentifier Sha224WithRsaEncryption = Pkcs1Oid.Branch("14"); + /** PKCS#1: 1.2.840.113549.1.1.15 */ + public static readonly DerObjectIdentifier Sha512_224WithRSAEncryption = Pkcs1Oid.Branch("15"); + /** PKCS#1: 1.2.840.113549.1.1.16 */ + public static readonly DerObjectIdentifier Sha512_256WithRSAEncryption = Pkcs1Oid.Branch("16"); + + // + // pkcs-3 OBJECT IDENTIFIER ::= { + // iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 3 } + // + public const string Pkcs3 = "1.2.840.113549.1.3"; + + public static readonly DerObjectIdentifier DhKeyAgreement = new DerObjectIdentifier(Pkcs3 + ".1"); + + // + // pkcs-5 OBJECT IDENTIFIER ::= { + // iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 5 } + // + public const string Pkcs5 = "1.2.840.113549.1.5"; + + public static readonly DerObjectIdentifier PbeWithMD2AndDesCbc = new DerObjectIdentifier(Pkcs5 + ".1"); + public static readonly DerObjectIdentifier PbeWithMD2AndRC2Cbc = new DerObjectIdentifier(Pkcs5 + ".4"); + public static readonly DerObjectIdentifier PbeWithMD5AndDesCbc = new DerObjectIdentifier(Pkcs5 + ".3"); + public static readonly DerObjectIdentifier PbeWithMD5AndRC2Cbc = new DerObjectIdentifier(Pkcs5 + ".6"); + public static readonly DerObjectIdentifier PbeWithSha1AndDesCbc = new DerObjectIdentifier(Pkcs5 + ".10"); + public static readonly DerObjectIdentifier PbeWithSha1AndRC2Cbc = new DerObjectIdentifier(Pkcs5 + ".11"); + + public static readonly DerObjectIdentifier IdPbeS2 = new DerObjectIdentifier(Pkcs5 + ".13"); + public static readonly DerObjectIdentifier IdPbkdf2 = new DerObjectIdentifier(Pkcs5 + ".12"); + + // + // encryptionAlgorithm OBJECT IDENTIFIER ::= { + // iso(1) member-body(2) us(840) rsadsi(113549) 3 } + // + public const string EncryptionAlgorithm = "1.2.840.113549.3"; + + public static readonly DerObjectIdentifier DesEde3Cbc = new DerObjectIdentifier(EncryptionAlgorithm + ".7"); + public static readonly DerObjectIdentifier RC2Cbc = new DerObjectIdentifier(EncryptionAlgorithm + ".2"); + public static readonly DerObjectIdentifier rc4 = new DerObjectIdentifier(EncryptionAlgorithm + ".4"); + + // + // object identifiers for digests + // + public const string DigestAlgorithm = "1.2.840.113549.2"; + + // + // md2 OBJECT IDENTIFIER ::= + // {iso(1) member-body(2) US(840) rsadsi(113549) DigestAlgorithm(2) 2} + // + public static readonly DerObjectIdentifier MD2 = new DerObjectIdentifier(DigestAlgorithm + ".2"); + + // + // md4 OBJECT IDENTIFIER ::= + // {iso(1) member-body(2) US(840) rsadsi(113549) DigestAlgorithm(2) 4} + // + public static readonly DerObjectIdentifier MD4 = new DerObjectIdentifier(DigestAlgorithm + ".4"); + + // + // md5 OBJECT IDENTIFIER ::= + // {iso(1) member-body(2) US(840) rsadsi(113549) DigestAlgorithm(2) 5} + // + public static readonly DerObjectIdentifier MD5 = new DerObjectIdentifier(DigestAlgorithm + ".5"); + + public static readonly DerObjectIdentifier IdHmacWithSha1 = new DerObjectIdentifier(DigestAlgorithm + ".7"); + public static readonly DerObjectIdentifier IdHmacWithSha224 = new DerObjectIdentifier(DigestAlgorithm + ".8"); + public static readonly DerObjectIdentifier IdHmacWithSha256 = new DerObjectIdentifier(DigestAlgorithm + ".9"); + public static readonly DerObjectIdentifier IdHmacWithSha384 = new DerObjectIdentifier(DigestAlgorithm + ".10"); + public static readonly DerObjectIdentifier IdHmacWithSha512 = new DerObjectIdentifier(DigestAlgorithm + ".11"); + + // + // pkcs-7 OBJECT IDENTIFIER ::= { + // iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 7 } + // + public const string Pkcs7 = "1.2.840.113549.1.7"; + + public static readonly DerObjectIdentifier Data = new DerObjectIdentifier(Pkcs7 + ".1"); + public static readonly DerObjectIdentifier SignedData = new DerObjectIdentifier(Pkcs7 + ".2"); + public static readonly DerObjectIdentifier EnvelopedData = new DerObjectIdentifier(Pkcs7 + ".3"); + public static readonly DerObjectIdentifier SignedAndEnvelopedData = new DerObjectIdentifier(Pkcs7 + ".4"); + public static readonly DerObjectIdentifier DigestedData = new DerObjectIdentifier(Pkcs7 + ".5"); + public static readonly DerObjectIdentifier EncryptedData = new DerObjectIdentifier(Pkcs7 + ".6"); + + // + // pkcs-9 OBJECT IDENTIFIER ::= { + // iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 9 } + // + public const string Pkcs9 = "1.2.840.113549.1.9"; + + public static readonly DerObjectIdentifier Pkcs9AtEmailAddress = new DerObjectIdentifier(Pkcs9 + ".1"); + public static readonly DerObjectIdentifier Pkcs9AtUnstructuredName = new DerObjectIdentifier(Pkcs9 + ".2"); + public static readonly DerObjectIdentifier Pkcs9AtContentType = new DerObjectIdentifier(Pkcs9 + ".3"); + public static readonly DerObjectIdentifier Pkcs9AtMessageDigest = new DerObjectIdentifier(Pkcs9 + ".4"); + public static readonly DerObjectIdentifier Pkcs9AtSigningTime = new DerObjectIdentifier(Pkcs9 + ".5"); + public static readonly DerObjectIdentifier Pkcs9AtCounterSignature = new DerObjectIdentifier(Pkcs9 + ".6"); + public static readonly DerObjectIdentifier Pkcs9AtChallengePassword = new DerObjectIdentifier(Pkcs9 + ".7"); + public static readonly DerObjectIdentifier Pkcs9AtUnstructuredAddress = new DerObjectIdentifier(Pkcs9 + ".8"); + public static readonly DerObjectIdentifier Pkcs9AtExtendedCertificateAttributes = new DerObjectIdentifier(Pkcs9 + ".9"); + public static readonly DerObjectIdentifier Pkcs9AtSigningDescription = new DerObjectIdentifier(Pkcs9 + ".13"); + public static readonly DerObjectIdentifier Pkcs9AtExtensionRequest = new DerObjectIdentifier(Pkcs9 + ".14"); + public static readonly DerObjectIdentifier Pkcs9AtSmimeCapabilities = new DerObjectIdentifier(Pkcs9 + ".15"); + public static readonly DerObjectIdentifier IdSmime = new DerObjectIdentifier(Pkcs9 + ".16"); + + public static readonly DerObjectIdentifier Pkcs9AtFriendlyName = new DerObjectIdentifier(Pkcs9 + ".20"); + public static readonly DerObjectIdentifier Pkcs9AtLocalKeyID = new DerObjectIdentifier(Pkcs9 + ".21"); + + public const string CertTypes = Pkcs9 + ".22"; + public static readonly DerObjectIdentifier X509Certificate = new DerObjectIdentifier(CertTypes + ".1"); + public static readonly DerObjectIdentifier SdsiCertificate = new DerObjectIdentifier(CertTypes + ".2"); + + public const string CrlTypes = Pkcs9 + ".23"; + public static readonly DerObjectIdentifier X509Crl = new DerObjectIdentifier(CrlTypes + ".1"); + + public static readonly DerObjectIdentifier IdAlg = IdSmime.Branch("3"); + + public static readonly DerObjectIdentifier IdAlgEsdh = IdAlg.Branch("5"); + public static readonly DerObjectIdentifier IdAlgCms3DesWrap = IdAlg.Branch("6"); + public static readonly DerObjectIdentifier IdAlgCmsRC2Wrap = IdAlg.Branch("7"); + public static readonly DerObjectIdentifier IdAlgZlibCompress = IdAlg.Branch("8"); + public static readonly DerObjectIdentifier IdAlgPwriKek = IdAlg.Branch("9"); + public static readonly DerObjectIdentifier IdAlgSsdh = IdAlg.Branch("10"); + + /* + *
+         * -- RSA-KEM Key Transport Algorithm
+         *
+         * id-rsa-kem OID ::= {
+         *      iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
+         *      pkcs-9(9) smime(16) alg(3) 14
+         *   }
+         * 
+ */ + public static readonly DerObjectIdentifier IdRsaKem = IdAlg.Branch("14"); + + /** + *
+         * id-alg-AEADChaCha20Poly1305 OBJECT IDENTIFIER ::=
+         * { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
+         *    pkcs9(9) smime(16) alg(3) 18 }
+         *
+         * AEADChaCha20Poly1305Nonce ::= OCTET STRING (SIZE(12))
+         * 
+ */ + public static readonly DerObjectIdentifier IdAlgAeadChaCha20Poly1305 = IdAlg.Branch("18"); + + + /** + * id-alg-hss-lms-hashsig OBJECT IDENTIFIER ::= { iso(1) + * member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + * smime(16) alg(3) 17 } + */ + public static readonly DerObjectIdentifier IdAlgHssLmsHashsig = IdAlg.Branch("17"); + + // + // SMIME capability sub oids. + // + public static readonly DerObjectIdentifier PreferSignedData = Pkcs9AtSmimeCapabilities.Branch("1"); + public static readonly DerObjectIdentifier CannotDecryptAny = Pkcs9AtSmimeCapabilities.Branch("2"); + public static readonly DerObjectIdentifier SmimeCapabilitiesVersions = Pkcs9AtSmimeCapabilities.Branch("3"); + + // + // other SMIME attributes + // + public static readonly DerObjectIdentifier IdAAReceiptRequest = IdSmime.Branch("2.1"); + + // + // id-ct OBJECT IDENTIFIER ::= {iso(1) member-body(2) usa(840) + // rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1)} + // + public const string IdCT = "1.2.840.113549.1.9.16.1"; + + public static readonly DerObjectIdentifier IdCTAuthData = new DerObjectIdentifier(IdCT + ".2"); + public static readonly DerObjectIdentifier IdCTTstInfo = new DerObjectIdentifier(IdCT + ".4"); + public static readonly DerObjectIdentifier IdCTCompressedData = new DerObjectIdentifier(IdCT + ".9"); + public static readonly DerObjectIdentifier IdCTAuthEnvelopedData = new DerObjectIdentifier(IdCT + ".23"); + public static readonly DerObjectIdentifier IdCTTimestampedData = new DerObjectIdentifier(IdCT + ".31"); + + // + // id-cti OBJECT IDENTIFIER ::= {iso(1) member-body(2) usa(840) + // rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) cti(6)} + // + public const string IdCti = "1.2.840.113549.1.9.16.6"; + + public static readonly DerObjectIdentifier IdCtiEtsProofOfOrigin = new DerObjectIdentifier(IdCti + ".1"); + public static readonly DerObjectIdentifier IdCtiEtsProofOfReceipt = new DerObjectIdentifier(IdCti + ".2"); + public static readonly DerObjectIdentifier IdCtiEtsProofOfDelivery = new DerObjectIdentifier(IdCti + ".3"); + public static readonly DerObjectIdentifier IdCtiEtsProofOfSender = new DerObjectIdentifier(IdCti + ".4"); + public static readonly DerObjectIdentifier IdCtiEtsProofOfApproval = new DerObjectIdentifier(IdCti + ".5"); + public static readonly DerObjectIdentifier IdCtiEtsProofOfCreation = new DerObjectIdentifier(IdCti + ".6"); + + // + // id-aa OBJECT IDENTIFIER ::= {iso(1) member-body(2) usa(840) + // rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) attributes(2)} + // + public const string IdAA = "1.2.840.113549.1.9.16.2"; + public static readonly DerObjectIdentifier IdAAOid = new DerObjectIdentifier(IdAA); + + public static readonly DerObjectIdentifier IdAAContentHint = new DerObjectIdentifier(IdAA + ".4"); // See RFC 2634 + public static readonly DerObjectIdentifier IdAAMsgSigDigest = new DerObjectIdentifier(IdAA + ".5"); + public static readonly DerObjectIdentifier IdAAContentReference = new DerObjectIdentifier(IdAA + ".10"); + + /* + * id-aa-encrypKeyPref OBJECT IDENTIFIER ::= {id-aa 11} + * + */ + public static readonly DerObjectIdentifier IdAAEncrypKeyPref = new DerObjectIdentifier(IdAA + ".11"); + public static readonly DerObjectIdentifier IdAASigningCertificate = new DerObjectIdentifier(IdAA + ".12"); + public static readonly DerObjectIdentifier IdAASigningCertificateV2 = new DerObjectIdentifier(IdAA + ".47"); + + public static readonly DerObjectIdentifier IdAAContentIdentifier = new DerObjectIdentifier(IdAA + ".7"); // See RFC 2634 + + /* + * RFC 3126 + */ + public static readonly DerObjectIdentifier IdAASignatureTimeStampToken = new DerObjectIdentifier(IdAA + ".14"); + + public static readonly DerObjectIdentifier IdAAEtsSigPolicyID = new DerObjectIdentifier(IdAA + ".15"); + public static readonly DerObjectIdentifier IdAAEtsCommitmentType = new DerObjectIdentifier(IdAA + ".16"); + public static readonly DerObjectIdentifier IdAAEtsSignerLocation = new DerObjectIdentifier(IdAA + ".17"); + public static readonly DerObjectIdentifier IdAAEtsSignerAttr = new DerObjectIdentifier(IdAA + ".18"); + public static readonly DerObjectIdentifier IdAAEtsOtherSigCert = new DerObjectIdentifier(IdAA + ".19"); + public static readonly DerObjectIdentifier IdAAEtsContentTimestamp = new DerObjectIdentifier(IdAA + ".20"); + public static readonly DerObjectIdentifier IdAAEtsCertificateRefs = new DerObjectIdentifier(IdAA + ".21"); + public static readonly DerObjectIdentifier IdAAEtsRevocationRefs = new DerObjectIdentifier(IdAA + ".22"); + public static readonly DerObjectIdentifier IdAAEtsCertValues = new DerObjectIdentifier(IdAA + ".23"); + public static readonly DerObjectIdentifier IdAAEtsRevocationValues = new DerObjectIdentifier(IdAA + ".24"); + public static readonly DerObjectIdentifier IdAAEtsEscTimeStamp = new DerObjectIdentifier(IdAA + ".25"); + public static readonly DerObjectIdentifier IdAAEtsCertCrlTimestamp = new DerObjectIdentifier(IdAA + ".26"); + public static readonly DerObjectIdentifier IdAAEtsArchiveTimestamp = new DerObjectIdentifier(IdAA + ".27"); + + /** PKCS#9: 1.2.840.113549.1.9.16.2.37 - RFC 4108 */ + public static readonly DerObjectIdentifier IdAADecryptKeyID = IdAAOid.Branch("37"); + + /** PKCS#9: 1.2.840.113549.1.9.16.2.38 - RFC 4108 */ + public static readonly DerObjectIdentifier IdAAImplCryptoAlgs = IdAAOid.Branch("38"); + + /** PKCS#9: 1.2.840.113549.1.9.16.2.54 RFC7030*/ + public static readonly DerObjectIdentifier IdAAAsymmDecryptKeyID = IdAAOid.Branch("54"); + + /** PKCS#9: 1.2.840.113549.1.9.16.2.43 RFC7030*/ + public static readonly DerObjectIdentifier IdAAImplCompressAlgs = IdAAOid.Branch("43"); + /** PKCS#9: 1.2.840.113549.1.9.16.2.40 RFC7030*/ + public static readonly DerObjectIdentifier IdAACommunityIdentifiers = IdAAOid.Branch("40"); + + // + // id-spq OBJECT IDENTIFIER ::= {iso(1) member-body(2) usa(840) + // rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-spq(5)} + // + public const string IdSpq = "1.2.840.113549.1.9.16.5"; + + public static readonly DerObjectIdentifier IdSpqEtsUri = new DerObjectIdentifier(IdSpq + ".1"); + public static readonly DerObjectIdentifier IdSpqEtsUNotice = new DerObjectIdentifier(IdSpq + ".2"); + + // + // pkcs-12 OBJECT IDENTIFIER ::= { + // iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 12 } + // + public const string Pkcs12 = "1.2.840.113549.1.12"; + public const string BagTypes = Pkcs12 + ".10.1"; + + public static readonly DerObjectIdentifier KeyBag = new DerObjectIdentifier(BagTypes + ".1"); + public static readonly DerObjectIdentifier Pkcs8ShroudedKeyBag = new DerObjectIdentifier(BagTypes + ".2"); + public static readonly DerObjectIdentifier CertBag = new DerObjectIdentifier(BagTypes + ".3"); + public static readonly DerObjectIdentifier CrlBag = new DerObjectIdentifier(BagTypes + ".4"); + public static readonly DerObjectIdentifier SecretBag = new DerObjectIdentifier(BagTypes + ".5"); + public static readonly DerObjectIdentifier SafeContentsBag = new DerObjectIdentifier(BagTypes + ".6"); + + public const string Pkcs12PbeIds = Pkcs12 + ".1"; + + public static readonly DerObjectIdentifier PbeWithShaAnd128BitRC4 = new DerObjectIdentifier(Pkcs12PbeIds + ".1"); + public static readonly DerObjectIdentifier PbeWithShaAnd40BitRC4 = new DerObjectIdentifier(Pkcs12PbeIds + ".2"); + public static readonly DerObjectIdentifier PbeWithShaAnd3KeyTripleDesCbc = new DerObjectIdentifier(Pkcs12PbeIds + ".3"); + public static readonly DerObjectIdentifier PbeWithShaAnd2KeyTripleDesCbc = new DerObjectIdentifier(Pkcs12PbeIds + ".4"); + public static readonly DerObjectIdentifier PbeWithShaAnd128BitRC2Cbc = new DerObjectIdentifier(Pkcs12PbeIds + ".5"); + public static readonly DerObjectIdentifier PbewithShaAnd40BitRC2Cbc = new DerObjectIdentifier(Pkcs12PbeIds + ".6"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PKCSObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PKCSObjectIdentifiers.cs.meta new file mode 100644 index 000000000..0778611a5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PKCSObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00c35305dafe0c74eb19e23e1f3f8cb1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/Pfx.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/Pfx.cs new file mode 100644 index 000000000..2be6b0110 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/Pfx.cs @@ -0,0 +1,67 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + /** + * the infamous Pfx from Pkcs12 + */ + public class Pfx + : Asn1Encodable + { + public static Pfx GetInstance(object obj) + { + if (obj is Pfx) + return (Pfx)obj; + if (obj == null) + return null; + return new Pfx(Asn1Sequence.GetInstance(obj)); + } + + private readonly ContentInfo contentInfo; + private readonly MacData macData; + + private Pfx(Asn1Sequence seq) + { + DerInteger version = DerInteger.GetInstance(seq[0]); + if (!version.HasValue(3)) + throw new ArgumentException("wrong version for PFX PDU"); + + this.contentInfo = ContentInfo.GetInstance(seq[1]); + + if (seq.Count == 3) + { + this.macData = MacData.GetInstance(seq[2]); + } + } + + public Pfx(ContentInfo contentInfo, MacData macData) + { + this.contentInfo = contentInfo; + this.macData = macData; + } + + public ContentInfo AuthSafe + { + get { return contentInfo; } + } + + public MacData MacData + { + get { return macData; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(new DerInteger(3), contentInfo); + v.AddOptional(macData); + return new BerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/Pfx.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/Pfx.cs.meta new file mode 100644 index 000000000..ffd87e535 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/Pfx.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3df657f0f5dc2e84eaa5506d529f5d72 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PrivateKeyInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PrivateKeyInfo.cs new file mode 100644 index 000000000..81af967e9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PrivateKeyInfo.cs @@ -0,0 +1,207 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + /** + * RFC 5958 + * + *
+     *  [IMPLICIT TAGS]
+     *
+     *  OneAsymmetricKey ::= SEQUENCE {
+     *      version                   Version,
+     *      privateKeyAlgorithm       PrivateKeyAlgorithmIdentifier,
+     *      privateKey                PrivateKey,
+     *      attributes            [0] Attributes OPTIONAL,
+     *      ...,
+     *      [[2: publicKey        [1] PublicKey OPTIONAL ]],
+     *      ...
+     *  }
+     *
+     *  PrivateKeyInfo ::= OneAsymmetricKey
+     *
+     *  Version ::= INTEGER { v1(0), v2(1) } (v1, ..., v2)
+     *
+     *  PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier
+     *                                     { PUBLIC-KEY,
+     *                                       { PrivateKeyAlgorithms } }
+     *
+     *  PrivateKey ::= OCTET STRING
+     *                     -- Content varies based on type of key.  The
+     *                     -- algorithm identifier dictates the format of
+     *                     -- the key.
+     *
+     *  PublicKey ::= BIT STRING
+     *                     -- Content varies based on type of key.  The
+     *                     -- algorithm identifier dictates the format of
+     *                     -- the key.
+     *
+     *  Attributes ::= SET OF Attribute { { OneAsymmetricKeyAttributes } }
+     *  
+ */ + public class PrivateKeyInfo + : Asn1Encodable + { + private readonly DerInteger version; + private readonly AlgorithmIdentifier privateKeyAlgorithm; + private readonly Asn1OctetString privateKey; + private readonly Asn1Set attributes; + private readonly DerBitString publicKey; + + public static PrivateKeyInfo GetInstance(Asn1TaggedObject obj, bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static PrivateKeyInfo GetInstance( + object obj) + { + if (obj == null) + return null; + if (obj is PrivateKeyInfo) + return (PrivateKeyInfo)obj; + return new PrivateKeyInfo(Asn1Sequence.GetInstance(obj)); + } + + private static int GetVersionValue(DerInteger version) + { + BigInteger bigValue = version.Value; + if (bigValue.CompareTo(BigInteger.Zero) < 0 || bigValue.CompareTo(BigInteger.One) > 0) + throw new ArgumentException("invalid version for private key info", "version"); + + return bigValue.IntValue; + } + + public PrivateKeyInfo( + AlgorithmIdentifier privateKeyAlgorithm, + Asn1Encodable privateKey) + : this(privateKeyAlgorithm, privateKey, null, null) + { + } + + public PrivateKeyInfo( + AlgorithmIdentifier privateKeyAlgorithm, + Asn1Encodable privateKey, + Asn1Set attributes) + : this(privateKeyAlgorithm, privateKey, attributes, null) + { + } + + public PrivateKeyInfo( + AlgorithmIdentifier privateKeyAlgorithm, + Asn1Encodable privateKey, + Asn1Set attributes, + byte[] publicKey) + { + this.version = new DerInteger(publicKey != null ? BigInteger.One : BigInteger.Zero); + this.privateKeyAlgorithm = privateKeyAlgorithm; + this.privateKey = new DerOctetString(privateKey); + this.attributes = attributes; + this.publicKey = publicKey == null ? null : new DerBitString(publicKey); + } + + private PrivateKeyInfo(Asn1Sequence seq) + { + var e = seq.GetEnumerator(); + + this.version = DerInteger.GetInstance(CollectionUtilities.RequireNext(e)); + + int versionValue = GetVersionValue(version); + + this.privateKeyAlgorithm = AlgorithmIdentifier.GetInstance(CollectionUtilities.RequireNext(e)); + this.privateKey = Asn1OctetString.GetInstance(CollectionUtilities.RequireNext(e)); + + int lastTag = -1; + while (e.MoveNext()) + { + Asn1TaggedObject tagged = (Asn1TaggedObject)e.Current; + + int tag = tagged.TagNo; + if (tag <= lastTag) + throw new ArgumentException("invalid optional field in private key info", "seq"); + + lastTag = tag; + + switch (tag) + { + case 0: + { + this.attributes = Asn1Set.GetInstance(tagged, false); + break; + } + case 1: + { + if (versionValue < 1) + throw new ArgumentException("'publicKey' requires version v2(1) or later", "seq"); + + this.publicKey = DerBitString.GetInstance(tagged, false); + break; + } + default: + { + throw new ArgumentException("unknown optional field in private key info", "seq"); + } + } + } + } + + public virtual DerInteger Version + { + get { return version; } + } + + public virtual Asn1Set Attributes + { + get { return attributes; } + } + + /// Return true if a public key is present, false otherwise. + public virtual bool HasPublicKey + { + get { return publicKey != null; } + } + + public virtual AlgorithmIdentifier PrivateKeyAlgorithm + { + get { return privateKeyAlgorithm; } + } + + public virtual Asn1OctetString PrivateKeyData + { + get { return privateKey; } + } + + public virtual Asn1Object ParsePrivateKey() + { + return Asn1Object.FromByteArray(privateKey.GetOctets()); + } + + /// For when the public key is an ASN.1 encoding. + public virtual Asn1Object ParsePublicKey() + { + return publicKey == null ? null : Asn1Object.FromByteArray(publicKey.GetOctets()); + } + + /// Return the public key as a raw bit string. + public virtual DerBitString PublicKeyData + { + get { return publicKey; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(version, privateKeyAlgorithm, privateKey); + v.AddOptionalTagged(false, 0, attributes); + v.AddOptionalTagged(false, 1, publicKey); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PrivateKeyInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PrivateKeyInfo.cs.meta new file mode 100644 index 000000000..8a4354c91 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/PrivateKeyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 335bcf7659194c5488f3a96b9d1e3b98 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RC2CBCParameter.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RC2CBCParameter.cs new file mode 100644 index 000000000..690986eac --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RC2CBCParameter.cs @@ -0,0 +1,78 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public class RC2CbcParameter + : Asn1Encodable + { + internal DerInteger version; + internal Asn1OctetString iv; + + public static RC2CbcParameter GetInstance( + object obj) + { + if (obj is Asn1Sequence) + { + return new RC2CbcParameter((Asn1Sequence) obj); + } + + throw new ArgumentException("Unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public RC2CbcParameter( + byte[] iv) + { + this.iv = new DerOctetString(iv); + } + + public RC2CbcParameter( + int parameterVersion, + byte[] iv) + { + this.version = new DerInteger(parameterVersion); + this.iv = new DerOctetString(iv); + } + + private RC2CbcParameter( + Asn1Sequence seq) + { + if (seq.Count == 1) + { + iv = (Asn1OctetString)seq[0]; + } + else + { + version = (DerInteger)seq[0]; + iv = (Asn1OctetString)seq[1]; + } + } + + public BigInteger RC2ParameterVersion + { + get + { + return version == null ? null : version.Value; + } + } + + public byte[] GetIV() + { + return Arrays.Clone(iv.GetOctets()); + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptional(version); + v.Add(iv); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RC2CBCParameter.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RC2CBCParameter.cs.meta new file mode 100644 index 000000000..62db33f13 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RC2CBCParameter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d2335725ce7a9c4ebe1ae1ee1f328fc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RSAESOAEPparams.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RSAESOAEPparams.cs new file mode 100644 index 000000000..6f379f83f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RSAESOAEPparams.cs @@ -0,0 +1,155 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public class RsaesOaepParameters + : Asn1Encodable + { + private AlgorithmIdentifier hashAlgorithm; + private AlgorithmIdentifier maskGenAlgorithm; + private AlgorithmIdentifier pSourceAlgorithm; + + public readonly static AlgorithmIdentifier DefaultHashAlgorithm = new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1, DerNull.Instance); + public readonly static AlgorithmIdentifier DefaultMaskGenFunction = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdMgf1, DefaultHashAlgorithm); + public readonly static AlgorithmIdentifier DefaultPSourceAlgorithm = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdPSpecified, new DerOctetString(new byte[0])); + + public static RsaesOaepParameters GetInstance( + object obj) + { + if (obj is RsaesOaepParameters) + { + return (RsaesOaepParameters)obj; + } + else if (obj is Asn1Sequence) + { + return new RsaesOaepParameters((Asn1Sequence)obj); + } + + throw new ArgumentException("Unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * The default version + */ + public RsaesOaepParameters() + : this(DefaultHashAlgorithm, DefaultMaskGenFunction, DefaultPSourceAlgorithm) + { + } + + public RsaesOaepParameters( + AlgorithmIdentifier hashAlgorithm, + AlgorithmIdentifier maskGenAlgorithm) + : this(hashAlgorithm, maskGenAlgorithm, DefaultPSourceAlgorithm) + { + } + + public RsaesOaepParameters( + AlgorithmIdentifier hashAlgorithm, + AlgorithmIdentifier maskGenAlgorithm, + AlgorithmIdentifier pSourceAlgorithm) + { + this.hashAlgorithm = hashAlgorithm; + this.maskGenAlgorithm = maskGenAlgorithm; + this.pSourceAlgorithm = pSourceAlgorithm; + } + + public RsaesOaepParameters( + Asn1Sequence seq) + { + hashAlgorithm = DefaultHashAlgorithm; + maskGenAlgorithm = DefaultMaskGenFunction; + pSourceAlgorithm = DefaultPSourceAlgorithm; + + for (int i = 0; i != seq.Count; i++) + { + Asn1TaggedObject o = (Asn1TaggedObject)seq[i]; + + switch (o.TagNo) + { + case 0: + hashAlgorithm = AlgorithmIdentifier.GetInstance(o, true); + break; + case 1: + maskGenAlgorithm = AlgorithmIdentifier.GetInstance(o, true); + break; + case 2: + pSourceAlgorithm = AlgorithmIdentifier.GetInstance(o, true); + break; + default: + throw new ArgumentException("unknown tag"); + } + } + } + + public AlgorithmIdentifier HashAlgorithm + { + get { return hashAlgorithm; } + } + + public AlgorithmIdentifier MaskGenAlgorithm + { + get { return maskGenAlgorithm; } + } + + public AlgorithmIdentifier PSourceAlgorithm + { + get { return pSourceAlgorithm; } + } + + /** + *
+		 *  RSAES-OAEP-params ::= SEQUENCE {
+		 *     hashAlgorithm      [0] OAEP-PSSDigestAlgorithms     DEFAULT sha1,
+		 *     maskGenAlgorithm   [1] PKCS1MGFAlgorithms  DEFAULT mgf1SHA1,
+		 *     pSourceAlgorithm   [2] PKCS1PSourceAlgorithms  DEFAULT pSpecifiedEmpty
+		 *   }
+		 *
+		 *   OAEP-PSSDigestAlgorithms    ALGORITHM-IDENTIFIER ::= {
+		 *     { OID id-sha1 PARAMETERS NULL   }|
+		 *     { OID id-sha256 PARAMETERS NULL }|
+		 *     { OID id-sha384 PARAMETERS NULL }|
+		 *     { OID id-sha512 PARAMETERS NULL },
+		 *     ...  -- Allows for future expansion --
+		 *   }
+		 *   PKCS1MGFAlgorithms    ALGORITHM-IDENTIFIER ::= {
+		 *     { OID id-mgf1 PARAMETERS OAEP-PSSDigestAlgorithms },
+		 *    ...  -- Allows for future expansion --
+		 *   }
+		 *   PKCS1PSourceAlgorithms    ALGORITHM-IDENTIFIER ::= {
+		 *     { OID id-pSpecified PARAMETERS OCTET STRING },
+		 *     ...  -- Allows for future expansion --
+		 *  }
+		 * 
+ * @return the asn1 primitive representing the parameters. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + if (!hashAlgorithm.Equals(DefaultHashAlgorithm)) + { + v.Add(new DerTaggedObject(true, 0, hashAlgorithm)); + } + + if (!maskGenAlgorithm.Equals(DefaultMaskGenFunction)) + { + v.Add(new DerTaggedObject(true, 1, maskGenAlgorithm)); + } + + if (!pSourceAlgorithm.Equals(DefaultPSourceAlgorithm)) + { + v.Add(new DerTaggedObject(true, 2, pSourceAlgorithm)); + } + + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RSAESOAEPparams.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RSAESOAEPparams.cs.meta new file mode 100644 index 000000000..c22e16f06 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RSAESOAEPparams.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d7df70097725cd54689ca8cea620b7ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RSAPrivateKeyStructure.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RSAPrivateKeyStructure.cs new file mode 100644 index 000000000..8c8f84185 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RSAPrivateKeyStructure.cs @@ -0,0 +1,146 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public class RsaPrivateKeyStructure + : Asn1Encodable + { + private readonly BigInteger modulus; + private readonly BigInteger publicExponent; + private readonly BigInteger privateExponent; + private readonly BigInteger prime1; + private readonly BigInteger prime2; + private readonly BigInteger exponent1; + private readonly BigInteger exponent2; + private readonly BigInteger coefficient; + + public static RsaPrivateKeyStructure GetInstance(Asn1TaggedObject obj, bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit)); + } + + public static RsaPrivateKeyStructure GetInstance(object obj) + { + if (obj == null) + return null; + if (obj is RsaPrivateKeyStructure) + return (RsaPrivateKeyStructure)obj; + return new RsaPrivateKeyStructure(Asn1Sequence.GetInstance(obj)); + } + + public RsaPrivateKeyStructure( + BigInteger modulus, + BigInteger publicExponent, + BigInteger privateExponent, + BigInteger prime1, + BigInteger prime2, + BigInteger exponent1, + BigInteger exponent2, + BigInteger coefficient) + { + this.modulus = modulus; + this.publicExponent = publicExponent; + this.privateExponent = privateExponent; + this.prime1 = prime1; + this.prime2 = prime2; + this.exponent1 = exponent1; + this.exponent2 = exponent2; + this.coefficient = coefficient; + } + + private RsaPrivateKeyStructure(Asn1Sequence seq) + { + BigInteger version = ((DerInteger)seq[0]).Value; + if (version.IntValue != 0) + throw new ArgumentException("wrong version for RSA private key"); + + modulus = ((DerInteger)seq[1]).Value; + publicExponent = ((DerInteger)seq[2]).Value; + privateExponent = ((DerInteger)seq[3]).Value; + prime1 = ((DerInteger)seq[4]).Value; + prime2 = ((DerInteger)seq[5]).Value; + exponent1 = ((DerInteger)seq[6]).Value; + exponent2 = ((DerInteger)seq[7]).Value; + coefficient = ((DerInteger)seq[8]).Value; + } + + public BigInteger Modulus + { + get { return modulus; } + } + + public BigInteger PublicExponent + { + get { return publicExponent; } + } + + public BigInteger PrivateExponent + { + get { return privateExponent; } + } + + public BigInteger Prime1 + { + get { return prime1; } + } + + public BigInteger Prime2 + { + get { return prime2; } + } + + public BigInteger Exponent1 + { + get { return exponent1; } + } + + public BigInteger Exponent2 + { + get { return exponent2; } + } + + public BigInteger Coefficient + { + get { return coefficient; } + } + + /** + * This outputs the key in Pkcs1v2 format. + *
+         *      RsaPrivateKey ::= Sequence {
+         *                          version Version,
+         *                          modulus Integer, -- n
+         *                          publicExponent Integer, -- e
+         *                          privateExponent Integer, -- d
+         *                          prime1 Integer, -- p
+         *                          prime2 Integer, -- q
+         *                          exponent1 Integer, -- d mod (p-1)
+         *                          exponent2 Integer, -- d mod (q-1)
+         *                          coefficient Integer -- (inverse of q) mod p
+         *                      }
+         *
+         *      Version ::= Integer
+         * 
+ *

This routine is written to output Pkcs1 version 0, private keys.

+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence( + new DerInteger(0), // version + new DerInteger(Modulus), + new DerInteger(PublicExponent), + new DerInteger(PrivateExponent), + new DerInteger(Prime1), + new DerInteger(Prime2), + new DerInteger(Exponent1), + new DerInteger(Exponent2), + new DerInteger(Coefficient)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RSAPrivateKeyStructure.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RSAPrivateKeyStructure.cs.meta new file mode 100644 index 000000000..3c41cb39a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RSAPrivateKeyStructure.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c725dc005bd541e4691f1ed5eaeec816 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RSASSAPSSparams.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RSASSAPSSparams.cs new file mode 100644 index 000000000..7d1cd3a71 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RSASSAPSSparams.cs @@ -0,0 +1,170 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public class RsassaPssParameters + : Asn1Encodable + { + private AlgorithmIdentifier hashAlgorithm; + private AlgorithmIdentifier maskGenAlgorithm; + private DerInteger saltLength; + private DerInteger trailerField; + + public readonly static AlgorithmIdentifier DefaultHashAlgorithm = new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1, DerNull.Instance); + public readonly static AlgorithmIdentifier DefaultMaskGenFunction = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdMgf1, DefaultHashAlgorithm); + public readonly static DerInteger DefaultSaltLength = new DerInteger(20); + public readonly static DerInteger DefaultTrailerField = new DerInteger(1); + + public static RsassaPssParameters GetInstance( + object obj) + { + if (obj == null || obj is RsassaPssParameters) + { + return (RsassaPssParameters)obj; + } + + if (obj is Asn1Sequence) + { + return new RsassaPssParameters((Asn1Sequence)obj); + } + + throw new ArgumentException("Unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * The default version + */ + public RsassaPssParameters() + { + hashAlgorithm = DefaultHashAlgorithm; + maskGenAlgorithm = DefaultMaskGenFunction; + saltLength = DefaultSaltLength; + trailerField = DefaultTrailerField; + } + + public RsassaPssParameters( + AlgorithmIdentifier hashAlgorithm, + AlgorithmIdentifier maskGenAlgorithm, + DerInteger saltLength, + DerInteger trailerField) + { + this.hashAlgorithm = hashAlgorithm; + this.maskGenAlgorithm = maskGenAlgorithm; + this.saltLength = saltLength; + this.trailerField = trailerField; + } + + public RsassaPssParameters( + Asn1Sequence seq) + { + hashAlgorithm = DefaultHashAlgorithm; + maskGenAlgorithm = DefaultMaskGenFunction; + saltLength = DefaultSaltLength; + trailerField = DefaultTrailerField; + + for (int i = 0; i != seq.Count; i++) + { + Asn1TaggedObject o = (Asn1TaggedObject)seq[i]; + + switch (o.TagNo) + { + case 0: + hashAlgorithm = AlgorithmIdentifier.GetInstance(o, true); + break; + case 1: + maskGenAlgorithm = AlgorithmIdentifier.GetInstance(o, true); + break; + case 2: + saltLength = DerInteger.GetInstance(o, true); + break; + case 3: + trailerField = DerInteger.GetInstance(o, true); + break; + default: + throw new ArgumentException("unknown tag"); + } + } + } + + public AlgorithmIdentifier HashAlgorithm + { + get { return hashAlgorithm; } + } + + public AlgorithmIdentifier MaskGenAlgorithm + { + get { return maskGenAlgorithm; } + } + + public DerInteger SaltLength + { + get { return saltLength; } + } + + public DerInteger TrailerField + { + get { return trailerField; } + } + + /** + *
+		 * RSASSA-PSS-params ::= SEQUENCE {
+		 *   hashAlgorithm      [0] OAEP-PSSDigestAlgorithms  DEFAULT sha1,
+		 *    maskGenAlgorithm   [1] PKCS1MGFAlgorithms  DEFAULT mgf1SHA1,
+		 *    saltLength         [2] INTEGER  DEFAULT 20,
+		 *    trailerField       [3] TrailerField  DEFAULT trailerFieldBC
+		 *  }
+		 *
+		 * OAEP-PSSDigestAlgorithms    ALGORITHM-IDENTIFIER ::= {
+		 *    { OID id-sha1 PARAMETERS NULL   }|
+		 *    { OID id-sha256 PARAMETERS NULL }|
+		 *    { OID id-sha384 PARAMETERS NULL }|
+		 *    { OID id-sha512 PARAMETERS NULL },
+		 *    ...  -- Allows for future expansion --
+		 * }
+		 *
+		 * PKCS1MGFAlgorithms    ALGORITHM-IDENTIFIER ::= {
+		 *   { OID id-mgf1 PARAMETERS OAEP-PSSDigestAlgorithms },
+		 *    ...  -- Allows for future expansion --
+		 * }
+		 *
+		 * TrailerField ::= INTEGER { trailerFieldBC(1) }
+		 * 
+ * @return the asn1 primitive representing the parameters. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + if (!hashAlgorithm.Equals(DefaultHashAlgorithm)) + { + v.Add(new DerTaggedObject(true, 0, hashAlgorithm)); + } + + if (!maskGenAlgorithm.Equals(DefaultMaskGenFunction)) + { + v.Add(new DerTaggedObject(true, 1, maskGenAlgorithm)); + } + + if (!saltLength.Equals(DefaultSaltLength)) + { + v.Add(new DerTaggedObject(true, 2, saltLength)); + } + + if (!trailerField.Equals(DefaultTrailerField)) + { + v.Add(new DerTaggedObject(true, 3, trailerField)); + } + + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RSASSAPSSparams.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RSASSAPSSparams.cs.meta new file mode 100644 index 000000000..a11534074 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/RSASSAPSSparams.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b2c22d57de73f1d48bae3043e36e6a4e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/SafeBag.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/SafeBag.cs new file mode 100644 index 000000000..b1fd22d55 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/SafeBag.cs @@ -0,0 +1,78 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + public class SafeBag + : Asn1Encodable + { + public static SafeBag GetInstance(object obj) + { + if (obj is SafeBag) + return (SafeBag)obj; + if (obj == null) + return null; + return new SafeBag(Asn1Sequence.GetInstance(obj)); + } + + private readonly DerObjectIdentifier bagID; + private readonly Asn1Object bagValue; + private readonly Asn1Set bagAttributes; + + public SafeBag( + DerObjectIdentifier oid, + Asn1Object obj) + { + this.bagID = oid; + this.bagValue = obj; + this.bagAttributes = null; + } + + public SafeBag( + DerObjectIdentifier oid, + Asn1Object obj, + Asn1Set bagAttributes) + { + this.bagID = oid; + this.bagValue = obj; + this.bagAttributes = bagAttributes; + } + + private SafeBag(Asn1Sequence seq) + { + this.bagID = (DerObjectIdentifier)seq[0]; + this.bagValue = ((DerTaggedObject)seq[1]).GetObject(); + if (seq.Count == 3) + { + this.bagAttributes = (Asn1Set)seq[2]; + } + } + + public DerObjectIdentifier BagID + { + get { return bagID; } + } + + public Asn1Object BagValue + { + get { return bagValue; } + } + + public Asn1Set BagAttributes + { + get { return bagAttributes; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(bagID, new DerTaggedObject(0, bagValue)); + v.AddOptional(bagAttributes); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/SafeBag.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/SafeBag.cs.meta new file mode 100644 index 000000000..be48c2445 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/SafeBag.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 69c7953ae9f2fba46aba947a13b2f6a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/SignedData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/SignedData.cs new file mode 100644 index 000000000..364f9a67c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/SignedData.cs @@ -0,0 +1,145 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + /** + * a Pkcs#7 signed data object. + */ + public class SignedData + : Asn1Encodable + { + private readonly DerInteger version; + private readonly Asn1Set digestAlgorithms; + private readonly ContentInfo contentInfo; + private readonly Asn1Set certificates; + private readonly Asn1Set crls; + private readonly Asn1Set signerInfos; + + public static SignedData GetInstance(object obj) + { + if (obj == null) + return null; + SignedData existing = obj as SignedData; + if (existing != null) + return existing; + return new SignedData(Asn1Sequence.GetInstance(obj)); + } + + public SignedData( + DerInteger _version, + Asn1Set _digestAlgorithms, + ContentInfo _contentInfo, + Asn1Set _certificates, + Asn1Set _crls, + Asn1Set _signerInfos) + { + version = _version; + digestAlgorithms = _digestAlgorithms; + contentInfo = _contentInfo; + certificates = _certificates; + crls = _crls; + signerInfos = _signerInfos; + } + + private SignedData( + Asn1Sequence seq) + { + var e = seq.GetEnumerator(); + + e.MoveNext(); + version = (DerInteger) e.Current; + + e.MoveNext(); + digestAlgorithms = (Asn1Set) e.Current; + + e.MoveNext(); + contentInfo = ContentInfo.GetInstance(e.Current); + + while (e.MoveNext()) + { + Asn1Object o = e.Current.ToAsn1Object(); + + // + // an interesting feature of SignedData is that there appear to be varying implementations... + // for the moment we ignore anything which doesn't fit. + // + if (o is Asn1TaggedObject tagged) + { + switch (tagged.TagNo) + { + case 0: + certificates = Asn1Set.GetInstance(tagged, false); + break; + case 1: + crls = Asn1Set.GetInstance(tagged, false); + break; + default: + throw new ArgumentException("unknown tag value " + tagged.TagNo); + } + } + else + { + signerInfos = (Asn1Set) o; + } + } + } + + public DerInteger Version + { + get { return version; } + } + + public Asn1Set DigestAlgorithms + { + get { return digestAlgorithms; } + } + + public ContentInfo ContentInfo + { + get { return contentInfo; } + } + + public Asn1Set Certificates + { + get { return certificates; } + } + + public Asn1Set Crls + { + get { return crls; } + } + + public Asn1Set SignerInfos + { + get { return signerInfos; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         *  SignedData ::= Sequence {
+         *      version Version,
+         *      digestAlgorithms DigestAlgorithmIdentifiers,
+         *      contentInfo ContentInfo,
+         *      certificates
+         *          [0] IMPLICIT ExtendedCertificatesAndCertificates
+         *                   OPTIONAL,
+         *      crls
+         *          [1] IMPLICIT CertificateRevocationLists OPTIONAL,
+         *      signerInfos SignerInfos }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(version, digestAlgorithms, contentInfo); + v.AddOptionalTagged(false, 0, certificates); + v.AddOptionalTagged(false, 1, crls); + v.Add(signerInfos); + return new BerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/SignedData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/SignedData.cs.meta new file mode 100644 index 000000000..10acb628c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/SignedData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ec29216e5122374bad13557289fe449 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/SignerInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/SignerInfo.cs new file mode 100644 index 000000000..41bc6c073 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/SignerInfo.cs @@ -0,0 +1,146 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs +{ + /** + * a Pkcs#7 signer info object. + */ + public class SignerInfo + : Asn1Encodable + { + private DerInteger version; + private IssuerAndSerialNumber issuerAndSerialNumber; + private AlgorithmIdentifier digAlgorithm; + private Asn1Set authenticatedAttributes; + private AlgorithmIdentifier digEncryptionAlgorithm; + private Asn1OctetString encryptedDigest; + private Asn1Set unauthenticatedAttributes; + + public static SignerInfo GetInstance( + object obj) + { + if (obj is SignerInfo) + { + return (SignerInfo) obj; + } + + if (obj is Asn1Sequence) + { + return new SignerInfo((Asn1Sequence) obj); + } + + throw new ArgumentException("Unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public SignerInfo( + DerInteger version, + IssuerAndSerialNumber issuerAndSerialNumber, + AlgorithmIdentifier digAlgorithm, + Asn1Set authenticatedAttributes, + AlgorithmIdentifier digEncryptionAlgorithm, + Asn1OctetString encryptedDigest, + Asn1Set unauthenticatedAttributes) + { + this.version = version; + this.issuerAndSerialNumber = issuerAndSerialNumber; + this.digAlgorithm = digAlgorithm; + this.authenticatedAttributes = authenticatedAttributes; + this.digEncryptionAlgorithm = digEncryptionAlgorithm; + this.encryptedDigest = encryptedDigest; + this.unauthenticatedAttributes = unauthenticatedAttributes; + } + + public SignerInfo( + Asn1Sequence seq) + { + var e = seq.GetEnumerator(); + + e.MoveNext(); + version = (DerInteger) e.Current; + + e.MoveNext(); + issuerAndSerialNumber = IssuerAndSerialNumber.GetInstance(e.Current); + + e.MoveNext(); + digAlgorithm = AlgorithmIdentifier.GetInstance(e.Current); + + e.MoveNext(); + var obj = e.Current; + + if (obj is Asn1TaggedObject tagged) + { + authenticatedAttributes = Asn1Set.GetInstance(tagged, false); + + e.MoveNext(); + digEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(e.Current); + } + else + { + authenticatedAttributes = null; + digEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(obj); + } + + e.MoveNext(); + encryptedDigest = DerOctetString.GetInstance(e.Current); + + if (e.MoveNext()) + { + unauthenticatedAttributes = Asn1Set.GetInstance((Asn1TaggedObject)e.Current, false); + } + else + { + unauthenticatedAttributes = null; + } + } + + public DerInteger Version { get { return version; } } + + public IssuerAndSerialNumber IssuerAndSerialNumber { get { return issuerAndSerialNumber; } } + + public Asn1Set AuthenticatedAttributes { get { return authenticatedAttributes; } } + + public AlgorithmIdentifier DigestAlgorithm { get { return digAlgorithm; } } + + public Asn1OctetString EncryptedDigest { get { return encryptedDigest; } } + + public AlgorithmIdentifier DigestEncryptionAlgorithm { get { return digEncryptionAlgorithm; } } + + public Asn1Set UnauthenticatedAttributes { get { return unauthenticatedAttributes; } } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         *  SignerInfo ::= Sequence {
+         *      version Version,
+         *      issuerAndSerialNumber IssuerAndSerialNumber,
+         *      digestAlgorithm DigestAlgorithmIdentifier,
+         *      authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
+         *      digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
+         *      encryptedDigest EncryptedDigest,
+         *      unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL
+         *  }
+         *
+         *  EncryptedDigest ::= OCTET STRING
+         *
+         *  DigestAlgorithmIdentifier ::= AlgorithmIdentifier
+         *
+         *  DigestEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(version, issuerAndSerialNumber, digAlgorithm); + v.AddOptionalTagged(false, 0, authenticatedAttributes); + v.Add(digEncryptionAlgorithm, encryptedDigest); + v.AddOptionalTagged(false, 1, unauthenticatedAttributes); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/SignerInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/SignerInfo.cs.meta new file mode 100644 index 000000000..574beeac2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/pkcs/SignerInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58ed4961ab7743046883b626554bd657 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/rosstandart.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/rosstandart.meta new file mode 100644 index 000000000..a1c3b0542 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/rosstandart.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: be558af1c7bddea47a6659440ff96e6d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/rosstandart/RosstandartObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/rosstandart/RosstandartObjectIdentifiers.cs new file mode 100644 index 000000000..363228bb3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/rosstandart/RosstandartObjectIdentifiers.cs @@ -0,0 +1,51 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Rosstandart +{ + public abstract class RosstandartObjectIdentifiers + { + public static readonly DerObjectIdentifier rosstandart = new DerObjectIdentifier("1.2.643.7"); + + public static readonly DerObjectIdentifier id_tc26 = rosstandart.Branch("1"); + + public static readonly DerObjectIdentifier id_tc26_gost_3411_12_256 = id_tc26.Branch("1.2.2"); + + public static readonly DerObjectIdentifier id_tc26_gost_3411_12_512 = id_tc26.Branch("1.2.3"); + + public static readonly DerObjectIdentifier id_tc26_hmac_gost_3411_12_256 = id_tc26.Branch("1.4.1"); + + public static readonly DerObjectIdentifier id_tc26_hmac_gost_3411_12_512 = id_tc26.Branch("1.4.2"); + + public static readonly DerObjectIdentifier id_tc26_gost_3410_12_256 = id_tc26.Branch("1.1.1"); + + public static readonly DerObjectIdentifier id_tc26_gost_3410_12_512 = id_tc26.Branch("1.1.2"); + + public static readonly DerObjectIdentifier id_tc26_signwithdigest_gost_3410_12_256 = id_tc26.Branch("1.3.2"); + + public static readonly DerObjectIdentifier id_tc26_signwithdigest_gost_3410_12_512 = id_tc26.Branch("1.3.3"); + + public static readonly DerObjectIdentifier id_tc26_agreement = id_tc26.Branch("1.6"); + + public static readonly DerObjectIdentifier id_tc26_agreement_gost_3410_12_256 = id_tc26_agreement.Branch("1"); + + public static readonly DerObjectIdentifier id_tc26_agreement_gost_3410_12_512 = id_tc26_agreement.Branch("2"); + + public static readonly DerObjectIdentifier id_tc26_gost_3410_12_256_paramSet = id_tc26.Branch("2.1.1"); + + public static readonly DerObjectIdentifier id_tc26_gost_3410_12_256_paramSetA = id_tc26_gost_3410_12_256_paramSet.Branch("1"); + + public static readonly DerObjectIdentifier id_tc26_gost_3410_12_512_paramSet = id_tc26.Branch("2.1.2"); + + public static readonly DerObjectIdentifier id_tc26_gost_3410_12_512_paramSetA = id_tc26_gost_3410_12_512_paramSet.Branch("1"); + + public static readonly DerObjectIdentifier id_tc26_gost_3410_12_512_paramSetB = id_tc26_gost_3410_12_512_paramSet.Branch("2"); + + public static readonly DerObjectIdentifier id_tc26_gost_3410_12_512_paramSetC = id_tc26_gost_3410_12_512_paramSet.Branch("3"); + + public static readonly DerObjectIdentifier id_tc26_gost_28147_param_Z = id_tc26.Branch("2.5.1.1"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/rosstandart/RosstandartObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/rosstandart/RosstandartObjectIdentifiers.cs.meta new file mode 100644 index 000000000..6aa215bc2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/rosstandart/RosstandartObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6ab1e50b9be3ca84eb9839c72f6a2075 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec.meta new file mode 100644 index 000000000..ff268dd16 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 33f43652a7e9789499bdc30289b5bc3e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec/ECPrivateKeyStructure.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec/ECPrivateKeyStructure.cs new file mode 100644 index 000000000..4b82ca274 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec/ECPrivateKeyStructure.cs @@ -0,0 +1,121 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Sec +{ + /** + * the elliptic curve private key object from SEC 1 + */ + public class ECPrivateKeyStructure + : Asn1Encodable + { + private readonly Asn1Sequence m_seq; + + public static ECPrivateKeyStructure GetInstance(object obj) + { + if (obj == null) + return null; + if (obj is ECPrivateKeyStructure ecPrivateKeyStructure) + return ecPrivateKeyStructure; + return new ECPrivateKeyStructure(Asn1Sequence.GetInstance(obj)); + } + + private ECPrivateKeyStructure(Asn1Sequence seq) + { + m_seq = seq ?? throw new ArgumentNullException(nameof(seq)); + } + + public ECPrivateKeyStructure( + int orderBitLength, + BigInteger key) + : this(orderBitLength, key, null) + { + } + + public ECPrivateKeyStructure( + int orderBitLength, + BigInteger key, + Asn1Encodable parameters) + : this(orderBitLength, key, null, parameters) + { + } + + public ECPrivateKeyStructure( + int orderBitLength, + BigInteger key, + DerBitString publicKey, + Asn1Encodable parameters) + { + if (key == null) + throw new ArgumentNullException(nameof(key)); + if (orderBitLength < key.BitLength) + throw new ArgumentException("must be >= key bitlength", nameof(orderBitLength)); + + byte[] bytes = BigIntegers.AsUnsignedByteArray((orderBitLength + 7) / 8, key); + + Asn1EncodableVector v = new Asn1EncodableVector( + new DerInteger(1), + new DerOctetString(bytes)); + + v.AddOptionalTagged(true, 0, parameters); + v.AddOptionalTagged(true, 1, publicKey); + + m_seq = new DerSequence(v); + } + + public virtual BigInteger GetKey() + { + Asn1OctetString octs = (Asn1OctetString)m_seq[1]; + + return new BigInteger(1, octs.GetOctets()); + } + + public virtual DerBitString GetPublicKey() + { + return (DerBitString)GetObjectInTag(1, Asn1Tags.BitString); + } + + public virtual Asn1Object GetParameters() + { + return GetObjectInTag(0, -1); + } + + private Asn1Object GetObjectInTag(int tagNo, int baseTagNo) + { + foreach (Asn1Encodable ae in m_seq) + { + Asn1Object obj = ae.ToAsn1Object(); + + if (obj is Asn1TaggedObject tag) + { + if (tag.HasContextTag(tagNo)) + { + return baseTagNo < 0 + ? tag.GetExplicitBaseObject().ToAsn1Object() + : tag.GetBaseUniversal(true, baseTagNo); + } + } + } + + return null; + } + + /** + * ECPrivateKey ::= SEQUENCE { + * version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), + * privateKey OCTET STRING, + * parameters [0] Parameters OPTIONAL, + * publicKey [1] BIT STRING OPTIONAL } + */ + public override Asn1Object ToAsn1Object() + { + return m_seq; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec/ECPrivateKeyStructure.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec/ECPrivateKeyStructure.cs.meta new file mode 100644 index 000000000..bef17ece8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec/ECPrivateKeyStructure.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 76e4de814cc3dd54891497924540b15f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec/SECNamedCurves.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec/SECNamedCurves.cs new file mode 100644 index 000000000..e0e17cd20 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec/SECNamedCurves.cs @@ -0,0 +1,1278 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Endo; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Sec +{ + /// Elliptic curve registry for the SEC standard. + public static class SecNamedCurves + { + private static X9ECPoint ConfigureBasepoint(ECCurve curve, string encoding) + { + X9ECPoint G = new X9ECPoint(curve, Hex.DecodeStrict(encoding)); + WNafUtilities.ConfigureBasepoint(G.Point); + return G; + } + + private static ECCurve ConfigureCurve(ECCurve curve) + { + return curve; + } + + private static ECCurve ConfigureCurveGlv(ECCurve c, GlvTypeBParameters p) + { + return c.Configure().SetEndomorphism(new GlvTypeBEndomorphism(c, p)).Create(); + } + + private static BigInteger FromHex(string hex) + { + return new BigInteger(1, Hex.DecodeStrict(hex)); + } + + internal class Secp112r1Holder + : X9ECParametersHolder + { + private Secp112r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Secp112r1Holder(); + + protected override ECCurve CreateCurve() + { + // p = (2^128 - 3) / 76439 + BigInteger p = FromHex("DB7C2ABF62E35E668076BEAD208B"); + BigInteger a = FromHex("DB7C2ABF62E35E668076BEAD2088"); + BigInteger b = FromHex("659EF8BA043916EEDE8911702B22"); + BigInteger n = FromHex("DB7C2ABF62E35E7628DFAC6561C5"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve(p, a, b, n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("00F50B028E4D696E676875615175290472783FB1"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0409487239995A5EE76B55F9C2F098A89CE5AF8724C0A23E0E0FF77500"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Secp112r2Holder + : X9ECParametersHolder + { + private Secp112r2Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Secp112r2Holder(); + + protected override ECCurve CreateCurve() + { + // p = (2^128 - 3) / 76439 + BigInteger p = FromHex("DB7C2ABF62E35E668076BEAD208B"); + BigInteger a = FromHex("6127C24C05F38A0AAAF65C0EF02C"); + BigInteger b = FromHex("51DEF1815DB5ED74FCC34C85D709"); + BigInteger n = FromHex("36DF0AAFD8B8D7597CA10520D04B"); + BigInteger h = BigInteger.ValueOf(4); + + return ConfigureCurve(new FpCurve(p, a, b, n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("002757A1114D696E6768756151755316C05E0BD4"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "044BA30AB5E892B4E1649DD0928643ADCD46F5882E3747DEF36E956E97"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Secp128r1Holder + : X9ECParametersHolder + { + private Secp128r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Secp128r1Holder(); + + protected override ECCurve CreateCurve() + { + // p = 2^128 - 2^97 - 1 + BigInteger p = FromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF"); + BigInteger a = FromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC"); + BigInteger b = FromHex("E87579C11079F43DD824993C2CEE5ED3"); + BigInteger n = FromHex("FFFFFFFE0000000075A30D1B9038A115"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve(p, a, b, n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("000E0D4D696E6768756151750CC03A4473D03679"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "04161FF7528B899B2D0C28607CA52C5B86CF5AC8395BAFEB13C02DA292DDED7A83"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Secp128r2Holder + : X9ECParametersHolder + { + private Secp128r2Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Secp128r2Holder(); + + protected override ECCurve CreateCurve() + { + // p = 2^128 - 2^97 - 1 + BigInteger p = FromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF"); + BigInteger a = FromHex("D6031998D1B3BBFEBF59CC9BBFF9AEE1"); + BigInteger b = FromHex("5EEEFCA380D02919DC2C6558BB6D8A5D"); + BigInteger n = FromHex("3FFFFFFF7FFFFFFFBE0024720613B5A3"); + BigInteger h = BigInteger.ValueOf(4); + + return ConfigureCurve(new FpCurve(p, a, b, n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("004D696E67687561517512D8F03431FCE63B88F4"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "047B6AA5D85E572983E6FB32A7CDEBC14027B6916A894D3AEE7106FE805FC34B44"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Secp160k1Holder + : X9ECParametersHolder + { + private Secp160k1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Secp160k1Holder(); + + protected override ECCurve CreateCurve() + { + // p = 2^160 - 2^32 - 2^14 - 2^12 - 2^9 - 2^8 - 2^7 - 2^3 - 2^2 - 1 + BigInteger p = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73"); + BigInteger a = BigInteger.Zero; + BigInteger b = BigInteger.ValueOf(7); + BigInteger n = FromHex("0100000000000000000001B8FA16DFAB9ACA16B6B3"); + BigInteger h = BigInteger.One; + + GlvTypeBParameters glv = new GlvTypeBParameters( + new BigInteger("9ba48cba5ebcb9b6bd33b92830b2a2e0e192f10a", 16), + new BigInteger("c39c6c3b3a36d7701b9c71a1f5804ae5d0003f4", 16), + new ScalarSplitParameters( + new BigInteger[]{ + new BigInteger("9162fbe73984472a0a9e", 16), + new BigInteger("-96341f1138933bc2f505", 16) }, + new BigInteger[]{ + new BigInteger("127971af8721782ecffa3", 16), + new BigInteger("9162fbe73984472a0a9e", 16) }, + new BigInteger("9162fbe73984472a0a9d0590", 16), + new BigInteger("96341f1138933bc2f503fd44", 16), + 176)); + + return ConfigureCurveGlv(new FpCurve(p, a, b, n, h, true), glv); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "043B4C382CE37AA192A4019E763036F4F5DD4D7EBB938CF935318FDCED6BC28286531733C3F03C4FEE"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Secp160r1Holder + : X9ECParametersHolder + { + private Secp160r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Secp160r1Holder(); + + protected override ECCurve CreateCurve() + { + // p = 2^160 - 2^31 - 1 + BigInteger p = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF"); + BigInteger a = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC"); + BigInteger b = FromHex("1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45"); + BigInteger n = FromHex("0100000000000000000001F4C8F927AED3CA752257"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve(p, a, b, n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("1053CDE42C14D696E67687561517533BF3F83345"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "044A96B5688EF573284664698968C38BB913CBFC8223A628553168947D59DCC912042351377AC5FB32"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Secp160r2Holder + : X9ECParametersHolder + { + private Secp160r2Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Secp160r2Holder(); + + protected override ECCurve CreateCurve() + { + // p = 2^160 - 2^32 - 2^14 - 2^12 - 2^9 - 2^8 - 2^7 - 2^3 - 2^2 - 1 + BigInteger p = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73"); + BigInteger a = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC70"); + BigInteger b = FromHex("B4E134D3FB59EB8BAB57274904664D5AF50388BA"); + BigInteger n = FromHex("0100000000000000000000351EE786A818F3A1A16B"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve(p, a, b, n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("B99B99B099B323E02709A4D696E6768756151751"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0452DCB034293A117E1F4FF11B30F7199D3144CE6DFEAFFEF2E331F296E071FA0DF9982CFEA7D43F2E"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Secp192k1Holder + : X9ECParametersHolder + { + private Secp192k1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Secp192k1Holder(); + + protected override ECCurve CreateCurve() + { + // p = 2^192 - 2^32 - 2^12 - 2^8 - 2^7 - 2^6 - 2^3 - 1 + BigInteger p = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37"); + BigInteger a = BigInteger.Zero; + BigInteger b = BigInteger.ValueOf(3); + BigInteger n = FromHex("FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D"); + BigInteger h = BigInteger.One; + + GlvTypeBParameters glv = new GlvTypeBParameters( + new BigInteger("bb85691939b869c1d087f601554b96b80cb4f55b35f433c2", 16), + new BigInteger("3d84f26c12238d7b4f3d516613c1759033b1a5800175d0b1", 16), + new ScalarSplitParameters( + new BigInteger[]{ + new BigInteger("71169be7330b3038edb025f1", 16), + new BigInteger("-b3fb3400dec5c4adceb8655c", 16) }, + new BigInteger[]{ + new BigInteger("12511cfe811d0f4e6bc688b4d", 16), + new BigInteger("71169be7330b3038edb025f1", 16) }, + new BigInteger("71169be7330b3038edb025f1d0f9", 16), + new BigInteger("b3fb3400dec5c4adceb8655d4c94", 16), + 208)); + + return ConfigureCurveGlv(new FpCurve(p, a, b, n, h, true), glv); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "04DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Secp192r1Holder + : X9ECParametersHolder + { + private Secp192r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Secp192r1Holder(); + + protected override ECCurve CreateCurve() + { + // p = 2^192 - 2^64 - 1 + BigInteger p = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"); + BigInteger a = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC"); + BigInteger b = FromHex("64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1"); + BigInteger n = FromHex("FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve(p, a, b, n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("3045AE6FC8422F64ED579528D38120EAE12196D5"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "04188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF101207192B95FFC8DA78631011ED6B24CDD573F977A11E794811"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Secp224k1Holder + : X9ECParametersHolder + { + private Secp224k1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Secp224k1Holder(); + + protected override ECCurve CreateCurve() + { + // p = 2^224 - 2^32 - 2^12 - 2^11 - 2^9 - 2^7 - 2^4 - 2 - 1 + BigInteger p = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D"); + BigInteger a = BigInteger.Zero; + BigInteger b = BigInteger.ValueOf(5); + BigInteger n = FromHex("010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7"); + BigInteger h = BigInteger.One; + + GlvTypeBParameters glv = new GlvTypeBParameters( + new BigInteger("fe0e87005b4e83761908c5131d552a850b3f58b749c37cf5b84d6768", 16), + new BigInteger("60dcd2104c4cbc0be6eeefc2bdd610739ec34e317f9b33046c9e4788", 16), + new ScalarSplitParameters( + new BigInteger[]{ + new BigInteger("6b8cf07d4ca75c88957d9d670591", 16), + new BigInteger("-b8adf1378a6eb73409fa6c9c637d", 16) }, + new BigInteger[]{ + new BigInteger("1243ae1b4d71613bc9f780a03690e", 16), + new BigInteger("6b8cf07d4ca75c88957d9d670591", 16) }, + new BigInteger("6b8cf07d4ca75c88957d9d67059037a4", 16), + new BigInteger("b8adf1378a6eb73409fa6c9c637ba7f5", 16), + 240)); + + return ConfigureCurveGlv(new FpCurve(p, a, b, n, h, true), glv); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "04A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Secp224r1Holder + : X9ECParametersHolder + { + private Secp224r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Secp224r1Holder(); + + protected override ECCurve CreateCurve() + { + // p = 2^224 - 2^96 + 1 + BigInteger p = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001"); + BigInteger a = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE"); + BigInteger b = FromHex("B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4"); + BigInteger n = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve(p, a, b, n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("BD71344799D5C7FCDC45B59FA3B9AB8F6A948BC5"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "04B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Secp256k1Holder + : X9ECParametersHolder + { + private Secp256k1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Secp256k1Holder(); + + protected override ECCurve CreateCurve() + { + // p = 2^256 - 2^32 - 2^9 - 2^8 - 2^7 - 2^6 - 2^4 - 1 + BigInteger p = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F"); + BigInteger a = BigInteger.Zero; + BigInteger b = BigInteger.ValueOf(7); + BigInteger n = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141"); + BigInteger h = BigInteger.One; + + GlvTypeBParameters glv = new GlvTypeBParameters( + new BigInteger("7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee", 16), + new BigInteger("5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72", 16), + new ScalarSplitParameters( + new BigInteger[]{ + new BigInteger("3086d221a7d46bcde86c90e49284eb15", 16), + new BigInteger("-e4437ed6010e88286f547fa90abfe4c3", 16) }, + new BigInteger[]{ + new BigInteger("114ca50f7a8e2f3f657c1108d9d44cfd8", 16), + new BigInteger("3086d221a7d46bcde86c90e49284eb15", 16) }, + new BigInteger("3086d221a7d46bcde86c90e49284eb153dab", 16), + new BigInteger("e4437ed6010e88286f547fa90abfe4c42212", 16), + 272)); + + return ConfigureCurveGlv(new FpCurve(p, a, b, n, h, true), glv); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0479BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Secp256r1Holder + : X9ECParametersHolder + { + private Secp256r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Secp256r1Holder(); + + protected override ECCurve CreateCurve() + { + // p = 2^224 (2^32 - 1) + 2^192 + 2^96 - 1 + BigInteger p = FromHex("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF"); + BigInteger a = FromHex("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC"); + BigInteger b = FromHex("5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B"); + BigInteger n = FromHex("FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve(p, a, b, n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("C49D360886E704936A6678E1139D26B7819F7E90"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Secp384r1Holder + : X9ECParametersHolder + { + private Secp384r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Secp384r1Holder(); + + protected override ECCurve CreateCurve() + { + // p = 2^384 - 2^128 - 2^96 + 2^32 - 1 + BigInteger p = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF"); + BigInteger a = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC"); + BigInteger b = FromHex("B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF"); + BigInteger n = FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve(p, a, b, n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("A335926AA319A27A1D00896A6773A4827ACDAC73"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, "04" + + "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7" + + "3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Secp521r1Holder + : X9ECParametersHolder + { + private Secp521r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Secp521r1Holder(); + + protected override ECCurve CreateCurve() + { + // p = 2^521 - 1 + BigInteger p = FromHex("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"); + BigInteger a = FromHex("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC"); + BigInteger b = FromHex("0051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00"); + BigInteger n = FromHex("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve(p, a, b, n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("D09E8800291CB85396CC6717393284AAA0DA64BA"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, "04" + + "00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66" + + "011839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Sect113r1Holder + : X9ECParametersHolder + { + private Sect113r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Sect113r1Holder(); + + private const int m = 113; + private const int k = 9; + + protected override ECCurve CreateCurve() + { + BigInteger a = FromHex("003088250CA6E7C7FE649CE85820F7"); + BigInteger b = FromHex("00E8BEE4D3E2260744188BE0E9C723"); + BigInteger n = FromHex("0100000000000000D9CCEC8A39E56F"); + BigInteger h = BigInteger.ValueOf(2); + + return ConfigureCurve(new F2mCurve(m, k, a, b, n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("10E723AB14D696E6768756151756FEBF8FCB49A9"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "04009D73616F35F4AB1407D73562C10F00A52830277958EE84D1315ED31886"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Sect113r2Holder + : X9ECParametersHolder + { + private Sect113r2Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Sect113r2Holder(); + + private const int m = 113; + private const int k = 9; + + protected override ECCurve CreateCurve() + { + BigInteger a = FromHex("00689918DBEC7E5A0DD6DFC0AA55C7"); + BigInteger b = FromHex("0095E9A9EC9B297BD4BF36E059184F"); + BigInteger n = FromHex("010000000000000108789B2496AF93"); + BigInteger h = BigInteger.ValueOf(2); + + return ConfigureCurve(new F2mCurve(m, k, a, b, n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("10C0FB15760860DEF1EEF4D696E676875615175D"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0401A57A6A7B26CA5EF52FCDB816479700B3ADC94ED1FE674C06E695BABA1D"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Sect131r1Holder + : X9ECParametersHolder + { + private Sect131r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Sect131r1Holder(); + + private const int m = 131; + private const int k1 = 2; + private const int k2 = 3; + private const int k3 = 8; + + protected override ECCurve CreateCurve() + { + BigInteger a = FromHex("07A11B09A76B562144418FF3FF8C2570B8"); + BigInteger b = FromHex("0217C05610884B63B9C6C7291678F9D341"); + BigInteger n = FromHex("0400000000000000023123953A9464B54D"); + BigInteger h = BigInteger.ValueOf(2); + + return ConfigureCurve(new F2mCurve(m, k1, k2, k3, a, b, n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("4D696E676875615175985BD3ADBADA21B43A97E2"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "040081BAF91FDF9833C40F9C181343638399078C6E7EA38C001F73C8134B1B4EF9E150"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Sect131r2Holder + : X9ECParametersHolder + { + private Sect131r2Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Sect131r2Holder(); + + private const int m = 131; + private const int k1 = 2; + private const int k2 = 3; + private const int k3 = 8; + + protected override ECCurve CreateCurve() + { + BigInteger a = FromHex("03E5A88919D7CAFCBF415F07C2176573B2"); + BigInteger b = FromHex("04B8266A46C55657AC734CE38F018F2192"); + BigInteger n = FromHex("0400000000000000016954A233049BA98F"); + BigInteger h = BigInteger.ValueOf(2); + + return ConfigureCurve(new F2mCurve(m, k1, k2, k3, a, b, n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("985BD3ADBAD4D696E676875615175A21B43A97E3"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "040356DCD8F2F95031AD652D23951BB366A80648F06D867940A5366D9E265DE9EB240F"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Sect163k1Holder + : X9ECParametersHolder + { + private Sect163k1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Sect163k1Holder(); + + private const int m = 163; + private const int k1 = 3; + private const int k2 = 6; + private const int k3 = 7; + + protected override ECCurve CreateCurve() + { + BigInteger a = BigInteger.One; + BigInteger b = BigInteger.One; + BigInteger n = FromHex("04000000000000000000020108A2E0CC0D99F8A5EF"); + BigInteger h = BigInteger.ValueOf(2); + + return ConfigureCurve(new F2mCurve(m, k1, k2, k3, a, b, n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0402FE13C0537BBC11ACAA07D793DE4E6D5E5C94EEE80289070FB05D38FF58321F2E800536D538CCDAA3D9"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Sect163r1Holder + : X9ECParametersHolder + { + private Sect163r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Sect163r1Holder(); + + private const int m = 163; + private const int k1 = 3; + private const int k2 = 6; + private const int k3 = 7; + + protected override ECCurve CreateCurve() + { + BigInteger a = FromHex("07B6882CAAEFA84F9554FF8428BD88E246D2782AE2"); + BigInteger b = FromHex("0713612DCDDCB40AAB946BDA29CA91F73AF958AFD9"); + BigInteger n = FromHex("03FFFFFFFFFFFFFFFFFFFF48AAB689C29CA710279B"); + BigInteger h = BigInteger.ValueOf(2); + + return ConfigureCurve(new F2mCurve(m, k1, k2, k3, a, b, n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("24B7B137C8A14D696E6768756151756FD0DA2E5C"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "040369979697AB43897789566789567F787A7876A65400435EDB42EFAFB2989D51FEFCE3C80988F41FF883"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Sect163r2Holder + : X9ECParametersHolder + { + private Sect163r2Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Sect163r2Holder(); + + private const int m = 163; + private const int k1 = 3; + private const int k2 = 6; + private const int k3 = 7; + + protected override ECCurve CreateCurve() + { + BigInteger a = BigInteger.One; + BigInteger b = FromHex("020A601907B8C953CA1481EB10512F78744A3205FD"); + BigInteger n = FromHex("040000000000000000000292FE77E70C12A4234C33"); + BigInteger h = BigInteger.ValueOf(2); + + return ConfigureCurve(new F2mCurve(m, k1, k2, k3, a, b, n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("85E25BFE5C86226CDB12016F7553F9D0E693A268"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0403F0EBA16286A2D57EA0991168D4994637E8343E3600D51FBC6C71A0094FA2CDD545B11C5C0C797324F1"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Sect193r1Holder + : X9ECParametersHolder + { + private Sect193r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Sect193r1Holder(); + + private const int m = 193; + private const int k = 15; + + protected override ECCurve CreateCurve() + { + BigInteger a = FromHex("0017858FEB7A98975169E171F77B4087DE098AC8A911DF7B01"); + BigInteger b = FromHex("00FDFB49BFE6C3A89FACADAA7A1E5BBC7CC1C2E5D831478814"); + BigInteger n = FromHex("01000000000000000000000000C7F34A778F443ACC920EBA49"); + BigInteger h = BigInteger.ValueOf(2); + + return ConfigureCurve(new F2mCurve(m, k, a, b, n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("103FAEC74D696E676875615175777FC5B191EF30"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0401F481BC5F0FF84A74AD6CDF6FDEF4BF6179625372D8C0C5E10025E399F2903712CCF3EA9E3A1AD17FB0B3201B6AF7CE1B05"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Sect193r2Holder + : X9ECParametersHolder + { + private Sect193r2Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Sect193r2Holder(); + + private const int m = 193; + private const int k = 15; + + protected override ECCurve CreateCurve() + { + BigInteger a = FromHex("0163F35A5137C2CE3EA6ED8667190B0BC43ECD69977702709B"); + BigInteger b = FromHex("00C9BB9E8927D4D64C377E2AB2856A5B16E3EFB7F61D4316AE"); + BigInteger n = FromHex("010000000000000000000000015AAB561B005413CCD4EE99D5"); + BigInteger h = BigInteger.ValueOf(2); + + return ConfigureCurve(new F2mCurve(m, k, a, b, n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("10B7B4D696E676875615175137C8A16FD0DA2211"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0400D9B67D192E0367C803F39E1A7E82CA14A651350AAE617E8F01CE94335607C304AC29E7DEFBD9CA01F596F927224CDECF6C"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Sect233k1Holder + : X9ECParametersHolder + { + private Sect233k1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Sect233k1Holder(); + + private const int m = 233; + private const int k = 74; + + protected override ECCurve CreateCurve() + { + BigInteger a = BigInteger.Zero; + BigInteger b = BigInteger.One; + BigInteger n = FromHex("8000000000000000000000000000069D5BB915BCD46EFB1AD5F173ABDF"); + BigInteger h = BigInteger.ValueOf(4); + + return ConfigureCurve(new F2mCurve(m, k, a, b, n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "04017232BA853A7E731AF129F22FF4149563A419C26BF50A4C9D6EEFAD612601DB537DECE819B7F70F555A67C427A8CD9BF18AEB9B56E0C11056FAE6A3"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Sect233r1Holder + : X9ECParametersHolder + { + private Sect233r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Sect233r1Holder(); + + private const int m = 233; + private const int k = 74; + + protected override ECCurve CreateCurve() + { + BigInteger a = BigInteger.One; + BigInteger b = FromHex("0066647EDE6C332C7F8C0923BB58213B333B20E9CE4281FE115F7D8F90AD"); + BigInteger n = FromHex("01000000000000000000000000000013E974E72F8A6922031D2603CFE0D7"); + BigInteger h = BigInteger.ValueOf(2); + + return ConfigureCurve(new F2mCurve(m, k, a, b, n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("74D59FF07F6B413D0EA14B344B20A2DB049B50C3"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0400FAC9DFCBAC8313BB2139F1BB755FEF65BC391F8B36F8F8EB7371FD558B01006A08A41903350678E58528BEBF8A0BEFF867A7CA36716F7E01F81052"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Sect239k1Holder + : X9ECParametersHolder + { + private Sect239k1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Sect239k1Holder(); + + private const int m = 239; + private const int k = 158; + + protected override ECCurve CreateCurve() + { + BigInteger a = BigInteger.Zero; + BigInteger b = BigInteger.One; + BigInteger n = FromHex("2000000000000000000000000000005A79FEC67CB6E91F1C1DA800E478A5"); + BigInteger h = BigInteger.ValueOf(4); + + return ConfigureCurve(new F2mCurve(m, k, a, b, n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0429A0B6A887A983E9730988A68727A8B2D126C44CC2CC7B2A6555193035DC76310804F12E549BDB011C103089E73510ACB275FC312A5DC6B76553F0CA"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Sect283k1Holder + : X9ECParametersHolder + { + private Sect283k1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Sect283k1Holder(); + + private const int m = 283; + private const int k1 = 5; + private const int k2 = 7; + private const int k3 = 12; + + protected override ECCurve CreateCurve() + { + BigInteger a = BigInteger.Zero; + BigInteger b = BigInteger.One; + BigInteger n = FromHex("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9AE2ED07577265DFF7F94451E061E163C61"); + BigInteger h = BigInteger.ValueOf(4); + + return ConfigureCurve(new F2mCurve(m, k1, k2, k3, a, b, n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, "04" + + "0503213F78CA44883F1A3B8162F188E553CD265F23C1567A16876913B0C2AC2458492836" + + "01CCDA380F1C9E318D90F95D07E5426FE87E45C0E8184698E45962364E34116177DD2259"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Sect283r1Holder + : X9ECParametersHolder + { + private Sect283r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Sect283r1Holder(); + + private const int m = 283; + private const int k1 = 5; + private const int k2 = 7; + private const int k3 = 12; + + protected override ECCurve CreateCurve() + { + BigInteger a = BigInteger.One; + BigInteger b = FromHex("027B680AC8B8596DA5A4AF8A19A0303FCA97FD7645309FA2A581485AF6263E313B79A2F5"); + BigInteger n = FromHex("03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF90399660FC938A90165B042A7CEFADB307"); + BigInteger h = BigInteger.ValueOf(2); + + return ConfigureCurve(new F2mCurve(m, k1, k2, k3, a, b, n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("77E2B07370EB0F832A6DD5B62DFC88CD06BB84BE"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, "04" + + "05F939258DB7DD90E1934F8C70B0DFEC2EED25B8557EAC9C80E2E198F8CDBECD86B12053" + + "03676854FE24141CB98FE6D4B20D02B4516FF702350EDDB0826779C813F0DF45BE8112F4"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Sect409k1Holder + : X9ECParametersHolder + { + private Sect409k1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Sect409k1Holder(); + + private const int m = 409; + private const int k = 87; + + protected override ECCurve CreateCurve() + { + BigInteger a = BigInteger.Zero; + BigInteger b = BigInteger.One; + BigInteger n = FromHex("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5F83B2D4EA20400EC4557D5ED3E3E7CA5B4B5C83B8E01E5FCF"); + BigInteger h = BigInteger.ValueOf(4); + + return ConfigureCurve(new F2mCurve(m, k, a, b, n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, "04" + + "0060F05F658F49C1AD3AB1890F7184210EFD0987E307C84C27ACCFB8F9F67CC2C460189EB5AAAA62EE222EB1B35540CFE9023746" + + "01E369050B7C4E42ACBA1DACBF04299C3460782F918EA427E6325165E9EA10E3DA5F6C42E9C55215AA9CA27A5863EC48D8E0286B"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Sect409r1Holder + : X9ECParametersHolder + { + private Sect409r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Sect409r1Holder(); + + private const int m = 409; + private const int k = 87; + + protected override ECCurve CreateCurve() + { + BigInteger a = BigInteger.One; + BigInteger b = FromHex("0021A5C2C8EE9FEB5C4B9A753B7B476B7FD6422EF1F3DD674761FA99D6AC27C8A9A197B272822F6CD57A55AA4F50AE317B13545F"); + BigInteger n = FromHex("010000000000000000000000000000000000000000000000000001E2AAD6A612F33307BE5FA47C3C9E052F838164CD37D9A21173"); + BigInteger h = BigInteger.ValueOf(2); + + return ConfigureCurve(new F2mCurve(m, k, a, b, n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("4099B5A457F9D69F79213D094C4BCD4D4262210B"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, "04" + + "015D4860D088DDB3496B0C6064756260441CDE4AF1771D4DB01FFE5B34E59703DC255A868A1180515603AEAB60794E54BB7996A7" + + "0061B1CFAB6BE5F32BBFA78324ED106A7636B9C5A7BD198D0158AA4F5488D08F38514F1FDF4B4F40D2181B3681C364BA0273C706"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Sect571k1Holder + : X9ECParametersHolder + { + private Sect571k1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Sect571k1Holder(); + + private const int m = 571; + private const int k1 = 2; + private const int k2 = 5; + private const int k3 = 10; + + protected override ECCurve CreateCurve() + { + BigInteger a = BigInteger.Zero; + BigInteger b = BigInteger.One; + BigInteger n = FromHex("020000000000000000000000000000000000000000000000000000000000000000000000131850E1F19A63E4B391A8DB917F4138B630D84BE5D639381E91DEB45CFE778F637C1001"); + BigInteger h = BigInteger.ValueOf(4); + + return ConfigureCurve(new F2mCurve(m, k1, k2, k3, a, b, n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, "04" + + "026EB7A859923FBC82189631F8103FE4AC9CA2970012D5D46024804801841CA44370958493B205E647DA304DB4CEB08CBBD1BA39494776FB988B47174DCA88C7E2945283A01C8972" + + "0349DC807F4FBF374F4AEADE3BCA95314DD58CEC9F307A54FFC61EFC006D8A2C9D4979C0AC44AEA74FBEBBB9F772AEDCB620B01A7BA7AF1B320430C8591984F601CD4C143EF1C7A3"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Sect571r1Holder + : X9ECParametersHolder + { + private Sect571r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Sect571r1Holder(); + + private const int m = 571; + private const int k1 = 2; + private const int k2 = 5; + private const int k3 = 10; + + protected override ECCurve CreateCurve() + { + BigInteger a = BigInteger.One; + BigInteger b = FromHex("02F40E7E2221F295DE297117B7F3D62F5C6A97FFCB8CEFF1CD6BA8CE4A9A18AD84FFABBD8EFA59332BE7AD6756A66E294AFD185A78FF12AA520E4DE739BACA0C7FFEFF7F2955727A"); + BigInteger n = FromHex("03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE661CE18FF55987308059B186823851EC7DD9CA1161DE93D5174D66E8382E9BB2FE84E47"); + BigInteger h = BigInteger.ValueOf(2); + + return ConfigureCurve(new F2mCurve(m, k1, k2, k3, a, b, n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("2AA058F73A0E33AB486B0F610410C53A7F132310"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, "04" + + "0303001D34B856296C16C0D40D3CD7750A93D1D2955FA80AA5F40FC8DB7B2ABDBDE53950F4C0D293CDD711A35B67FB1499AE60038614F1394ABFA3B4C850D927E1E7769C8EEC2D19" + + "037BF27342DA639B6DCCFFFEB73D69D78C6C27A6009CBBCA1980F8533921E8A684423E43BAB08A576291AF8F461BB2A8B3531D2F0485C19B16E2F1516E23DD3C1A4827AF1B8AC15B"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + private static readonly Dictionary objIds = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly Dictionary curves = + new Dictionary(); + private static readonly Dictionary names = + new Dictionary(); + + private static void DefineCurve(string name, DerObjectIdentifier oid, X9ECParametersHolder holder) + { + objIds.Add(name, oid); + names.Add(oid, name); + curves.Add(oid, holder); + } + + static SecNamedCurves() + { + DefineCurve("secp112r1", SecObjectIdentifiers.SecP112r1, Secp112r1Holder.Instance); + DefineCurve("secp112r2", SecObjectIdentifiers.SecP112r2, Secp112r2Holder.Instance); + DefineCurve("secp128r1", SecObjectIdentifiers.SecP128r1, Secp128r1Holder.Instance); + DefineCurve("secp128r2", SecObjectIdentifiers.SecP128r2, Secp128r2Holder.Instance); + DefineCurve("secp160k1", SecObjectIdentifiers.SecP160k1, Secp160k1Holder.Instance); + DefineCurve("secp160r1", SecObjectIdentifiers.SecP160r1, Secp160r1Holder.Instance); + DefineCurve("secp160r2", SecObjectIdentifiers.SecP160r2, Secp160r2Holder.Instance); + DefineCurve("secp192k1", SecObjectIdentifiers.SecP192k1, Secp192k1Holder.Instance); + DefineCurve("secp192r1", SecObjectIdentifiers.SecP192r1, Secp192r1Holder.Instance); + DefineCurve("secp224k1", SecObjectIdentifiers.SecP224k1, Secp224k1Holder.Instance); + DefineCurve("secp224r1", SecObjectIdentifiers.SecP224r1, Secp224r1Holder.Instance); + DefineCurve("secp256k1", SecObjectIdentifiers.SecP256k1, Secp256k1Holder.Instance); + DefineCurve("secp256r1", SecObjectIdentifiers.SecP256r1, Secp256r1Holder.Instance); + DefineCurve("secp384r1", SecObjectIdentifiers.SecP384r1, Secp384r1Holder.Instance); + DefineCurve("secp521r1", SecObjectIdentifiers.SecP521r1, Secp521r1Holder.Instance); + + DefineCurve("sect113r1", SecObjectIdentifiers.SecT113r1, Sect113r1Holder.Instance); + DefineCurve("sect113r2", SecObjectIdentifiers.SecT113r2, Sect113r2Holder.Instance); + DefineCurve("sect131r1", SecObjectIdentifiers.SecT131r1, Sect131r1Holder.Instance); + DefineCurve("sect131r2", SecObjectIdentifiers.SecT131r2, Sect131r2Holder.Instance); + DefineCurve("sect163k1", SecObjectIdentifiers.SecT163k1, Sect163k1Holder.Instance); + DefineCurve("sect163r1", SecObjectIdentifiers.SecT163r1, Sect163r1Holder.Instance); + DefineCurve("sect163r2", SecObjectIdentifiers.SecT163r2, Sect163r2Holder.Instance); + DefineCurve("sect193r1", SecObjectIdentifiers.SecT193r1, Sect193r1Holder.Instance); + DefineCurve("sect193r2", SecObjectIdentifiers.SecT193r2, Sect193r2Holder.Instance); + DefineCurve("sect233k1", SecObjectIdentifiers.SecT233k1, Sect233k1Holder.Instance); + DefineCurve("sect233r1", SecObjectIdentifiers.SecT233r1, Sect233r1Holder.Instance); + DefineCurve("sect239k1", SecObjectIdentifiers.SecT239k1, Sect239k1Holder.Instance); + DefineCurve("sect283k1", SecObjectIdentifiers.SecT283k1, Sect283k1Holder.Instance); + DefineCurve("sect283r1", SecObjectIdentifiers.SecT283r1, Sect283r1Holder.Instance); + DefineCurve("sect409k1", SecObjectIdentifiers.SecT409k1, Sect409k1Holder.Instance); + DefineCurve("sect409r1", SecObjectIdentifiers.SecT409r1, Sect409r1Holder.Instance); + DefineCurve("sect571k1", SecObjectIdentifiers.SecT571k1, Sect571k1Holder.Instance); + DefineCurve("sect571r1", SecObjectIdentifiers.SecT571r1, Sect571r1Holder.Instance); + } + + /// Look up the for the curve with the given name. + /// The name of the curve. + public static X9ECParameters GetByName(string name) + { + DerObjectIdentifier oid = GetOid(name); + return oid == null ? null : GetByOid(oid); + } + + /// Look up an for the curve with the given name. + /// + /// Allows accessing the curve without necessarily triggering the creation of the + /// full . + /// + /// The name of the curve. + public static X9ECParametersHolder GetByNameLazy(string name) + { + DerObjectIdentifier oid = GetOid(name); + return oid == null ? null : GetByOidLazy(oid); + } + + /// Look up the for the curve with the given + /// OID. + /// The OID for the curve. + public static X9ECParameters GetByOid(DerObjectIdentifier oid) + { + return GetByOidLazy(oid)?.Parameters; + } + + /// Look up an for the curve with the given + /// OID. + /// + /// Allows accessing the curve without necessarily triggering the creation of the + /// full . + /// + /// The OID for the curve. + public static X9ECParametersHolder GetByOidLazy(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(curves, oid); + } + + /// Look up the name of the curve with the given OID. + /// The OID for the curve. + public static string GetName(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(names, oid); + } + + /// Look up the OID of the curve with the given name. + /// The name of the curve. + public static DerObjectIdentifier GetOid(string name) + { + return CollectionUtilities.GetValueOrNull(objIds, name); + } + + /// Enumerate the available curve names in this registry. + public static IEnumerable Names + { + get { return CollectionUtilities.Proxy(objIds.Keys); } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec/SECNamedCurves.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec/SECNamedCurves.cs.meta new file mode 100644 index 000000000..4db17a993 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec/SECNamedCurves.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aedfafe74a7ae674e921b71e86371006 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec/SECObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec/SECObjectIdentifiers.cs new file mode 100644 index 000000000..2d9a37c23 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec/SECObjectIdentifiers.cs @@ -0,0 +1,56 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Sec +{ + public abstract class SecObjectIdentifiers + { + /** + * EllipticCurve OBJECT IDENTIFIER ::= { + * iso(1) identified-organization(3) certicom(132) curve(0) + * } + */ + public static readonly DerObjectIdentifier EllipticCurve = new DerObjectIdentifier("1.3.132.0"); + + public static readonly DerObjectIdentifier SecT163k1 = new DerObjectIdentifier(EllipticCurve + ".1"); + public static readonly DerObjectIdentifier SecT163r1 = new DerObjectIdentifier(EllipticCurve + ".2"); + public static readonly DerObjectIdentifier SecT239k1 = new DerObjectIdentifier(EllipticCurve + ".3"); + public static readonly DerObjectIdentifier SecT113r1 = new DerObjectIdentifier(EllipticCurve + ".4"); + public static readonly DerObjectIdentifier SecT113r2 = new DerObjectIdentifier(EllipticCurve + ".5"); + public static readonly DerObjectIdentifier SecP112r1 = new DerObjectIdentifier(EllipticCurve + ".6"); + public static readonly DerObjectIdentifier SecP112r2 = new DerObjectIdentifier(EllipticCurve + ".7"); + public static readonly DerObjectIdentifier SecP160r1 = new DerObjectIdentifier(EllipticCurve + ".8"); + public static readonly DerObjectIdentifier SecP160k1 = new DerObjectIdentifier(EllipticCurve + ".9"); + public static readonly DerObjectIdentifier SecP256k1 = new DerObjectIdentifier(EllipticCurve + ".10"); + public static readonly DerObjectIdentifier SecT163r2 = new DerObjectIdentifier(EllipticCurve + ".15"); + public static readonly DerObjectIdentifier SecT283k1 = new DerObjectIdentifier(EllipticCurve + ".16"); + public static readonly DerObjectIdentifier SecT283r1 = new DerObjectIdentifier(EllipticCurve + ".17"); + public static readonly DerObjectIdentifier SecT131r1 = new DerObjectIdentifier(EllipticCurve + ".22"); + public static readonly DerObjectIdentifier SecT131r2 = new DerObjectIdentifier(EllipticCurve + ".23"); + public static readonly DerObjectIdentifier SecT193r1 = new DerObjectIdentifier(EllipticCurve + ".24"); + public static readonly DerObjectIdentifier SecT193r2 = new DerObjectIdentifier(EllipticCurve + ".25"); + public static readonly DerObjectIdentifier SecT233k1 = new DerObjectIdentifier(EllipticCurve + ".26"); + public static readonly DerObjectIdentifier SecT233r1 = new DerObjectIdentifier(EllipticCurve + ".27"); + public static readonly DerObjectIdentifier SecP128r1 = new DerObjectIdentifier(EllipticCurve + ".28"); + public static readonly DerObjectIdentifier SecP128r2 = new DerObjectIdentifier(EllipticCurve + ".29"); + public static readonly DerObjectIdentifier SecP160r2 = new DerObjectIdentifier(EllipticCurve + ".30"); + public static readonly DerObjectIdentifier SecP192k1 = new DerObjectIdentifier(EllipticCurve + ".31"); + public static readonly DerObjectIdentifier SecP224k1 = new DerObjectIdentifier(EllipticCurve + ".32"); + public static readonly DerObjectIdentifier SecP224r1 = new DerObjectIdentifier(EllipticCurve + ".33"); + public static readonly DerObjectIdentifier SecP384r1 = new DerObjectIdentifier(EllipticCurve + ".34"); + public static readonly DerObjectIdentifier SecP521r1 = new DerObjectIdentifier(EllipticCurve + ".35"); + public static readonly DerObjectIdentifier SecT409k1 = new DerObjectIdentifier(EllipticCurve + ".36"); + public static readonly DerObjectIdentifier SecT409r1 = new DerObjectIdentifier(EllipticCurve + ".37"); + public static readonly DerObjectIdentifier SecT571k1 = new DerObjectIdentifier(EllipticCurve + ".38"); + public static readonly DerObjectIdentifier SecT571r1 = new DerObjectIdentifier(EllipticCurve + ".39"); + + public static readonly DerObjectIdentifier SecP192r1 = X9ObjectIdentifiers.Prime192v1; + public static readonly DerObjectIdentifier SecP256r1 = X9ObjectIdentifiers.Prime256v1; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec/SECObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec/SECObjectIdentifiers.cs.meta new file mode 100644 index 000000000..5f01bb0e4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/sec/SECObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 76a08db15fb9c8c4b9dd62f83a1de3fa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime.meta new file mode 100644 index 000000000..8bcb7bd6d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e13e45a04503de4f9338df3df0bc63d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMEAttributes.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMEAttributes.cs new file mode 100644 index 000000000..86b88ddf4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMEAttributes.cs @@ -0,0 +1,15 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Smime +{ + public abstract class SmimeAttributes + { + public static readonly DerObjectIdentifier SmimeCapabilities = PkcsObjectIdentifiers.Pkcs9AtSmimeCapabilities; + public static readonly DerObjectIdentifier EncrypKeyPref = PkcsObjectIdentifiers.IdAAEncrypKeyPref; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMEAttributes.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMEAttributes.cs.meta new file mode 100644 index 000000000..d3d18e59c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMEAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 618d879528bc1f34f88316ac7ef6f9e7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapabilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapabilities.cs new file mode 100644 index 000000000..a67cbdc8c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapabilities.cs @@ -0,0 +1,113 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Smime +{ + /** + * Handler class for dealing with S/MIME Capabilities + */ + public class SmimeCapabilities + : Asn1Encodable + { + /** + * general preferences + */ + public static readonly DerObjectIdentifier PreferSignedData = PkcsObjectIdentifiers.PreferSignedData; + public static readonly DerObjectIdentifier CannotDecryptAny = PkcsObjectIdentifiers.CannotDecryptAny; + public static readonly DerObjectIdentifier SmimeCapabilitesVersions = PkcsObjectIdentifiers.SmimeCapabilitiesVersions; + + /** + * encryption algorithms preferences + */ + public static readonly DerObjectIdentifier Aes256Cbc = NistObjectIdentifiers.IdAes256Cbc; + public static readonly DerObjectIdentifier Aes192Cbc = NistObjectIdentifiers.IdAes192Cbc; + public static readonly DerObjectIdentifier Aes128Cbc = NistObjectIdentifiers.IdAes128Cbc; + public static readonly DerObjectIdentifier IdeaCbc = new DerObjectIdentifier("1.3.6.1.4.1.188.7.1.1.2"); + public static readonly DerObjectIdentifier Cast5Cbc = new DerObjectIdentifier("1.2.840.113533.7.66.10"); + public static readonly DerObjectIdentifier DesCbc = new DerObjectIdentifier("1.3.14.3.2.7"); + public static readonly DerObjectIdentifier DesEde3Cbc = PkcsObjectIdentifiers.DesEde3Cbc; + public static readonly DerObjectIdentifier RC2Cbc = PkcsObjectIdentifiers.RC2Cbc; + + private Asn1Sequence capabilities; + + /** + * return an Attr object from the given object. + * + * @param o the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static SmimeCapabilities GetInstance( + object obj) + { + if (obj == null || obj is SmimeCapabilities) + { + return (SmimeCapabilities) obj; + } + + if (obj is Asn1Sequence) + { + return new SmimeCapabilities((Asn1Sequence) obj); + } + + if (obj is AttributeX509) + { + return new SmimeCapabilities( + (Asn1Sequence)(((AttributeX509) obj).AttrValues[0])); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public SmimeCapabilities( + Asn1Sequence seq) + { + capabilities = seq; + } + + /** + * returns an ArrayList with 0 or more objects of all the capabilities + * matching the passed in capability Oid. If the Oid passed is null the + * entire set is returned. + */ + public IList GetCapabilitiesForOid(DerObjectIdentifier capability) + { + var list = new List(); + DoGetCapabilitiesForOid(capability, list); + return list; + } + + private void DoGetCapabilitiesForOid(DerObjectIdentifier capability, IList list) + { + foreach (object o in capabilities) + { + SmimeCapability cap = SmimeCapability.GetInstance(o); + + if (capability == null || capability.Equals(cap.CapabilityID)) + { + list.Add(cap); + } + } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * SMIMECapabilities ::= Sequence OF SMIMECapability
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return capabilities; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapabilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapabilities.cs.meta new file mode 100644 index 000000000..667a01e14 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapabilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ffd2e8259df59b9469711dc167c1a9d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapabilitiesAttribute.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapabilitiesAttribute.cs new file mode 100644 index 000000000..02fca5937 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapabilitiesAttribute.cs @@ -0,0 +1,20 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Smime +{ + public class SmimeCapabilitiesAttribute + : AttributeX509 + { + public SmimeCapabilitiesAttribute( + SmimeCapabilityVector capabilities) + : base(SmimeAttributes.SmimeCapabilities, + new DerSet(new DerSequence(capabilities.ToAsn1EncodableVector()))) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapabilitiesAttribute.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapabilitiesAttribute.cs.meta new file mode 100644 index 000000000..b4ab5c0d3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapabilitiesAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 56df916a3b62f584dafc0167c35fe71c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapability.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapability.cs new file mode 100644 index 000000000..88bfb9127 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapability.cs @@ -0,0 +1,100 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Smime +{ + public class SmimeCapability + : Asn1Encodable + { + /** + * general preferences + */ + public static readonly DerObjectIdentifier PreferSignedData = PkcsObjectIdentifiers.PreferSignedData; + public static readonly DerObjectIdentifier CannotDecryptAny = PkcsObjectIdentifiers.CannotDecryptAny; + public static readonly DerObjectIdentifier SmimeCapabilitiesVersions = PkcsObjectIdentifiers.SmimeCapabilitiesVersions; + + /** + * encryption algorithms preferences + */ + public static readonly DerObjectIdentifier DesCbc = new DerObjectIdentifier("1.3.14.3.2.7"); + public static readonly DerObjectIdentifier DesEde3Cbc = PkcsObjectIdentifiers.DesEde3Cbc; + public static readonly DerObjectIdentifier RC2Cbc = PkcsObjectIdentifiers.RC2Cbc; + + private DerObjectIdentifier capabilityID; + private Asn1Object parameters; + + public SmimeCapability( + Asn1Sequence seq) + { + capabilityID = (DerObjectIdentifier) seq[0].ToAsn1Object(); + + if (seq.Count > 1) + { + parameters = seq[1].ToAsn1Object(); + } + } + + public SmimeCapability( + DerObjectIdentifier capabilityID, + Asn1Encodable parameters) + { + if (capabilityID == null) + throw new ArgumentNullException("capabilityID"); + + this.capabilityID = capabilityID; + + if (parameters != null) + { + this.parameters = parameters.ToAsn1Object(); + } + } + + public static SmimeCapability GetInstance( + object obj) + { + if (obj == null || obj is SmimeCapability) + { + return (SmimeCapability) obj; + } + + if (obj is Asn1Sequence) + { + return new SmimeCapability((Asn1Sequence) obj); + } + + throw new ArgumentException("Invalid SmimeCapability"); + } + + public DerObjectIdentifier CapabilityID + { + get { return capabilityID; } + } + + public Asn1Object Parameters + { + get { return parameters; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * SMIMECapability ::= Sequence {
+         *     capabilityID OBJECT IDENTIFIER,
+         *     parameters ANY DEFINED BY capabilityID OPTIONAL
+         * }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(capabilityID); + v.AddOptional(parameters); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapability.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapability.cs.meta new file mode 100644 index 000000000..54eb55d36 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapability.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 793064d3349c4ab49839801723352783 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapabilityVector.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapabilityVector.cs new file mode 100644 index 000000000..789f7d4d2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapabilityVector.cs @@ -0,0 +1,41 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Smime +{ + /** + * Handler for creating a vector S/MIME Capabilities + */ + public class SmimeCapabilityVector + { + private readonly Asn1EncodableVector capabilities = new Asn1EncodableVector(); + + public void AddCapability( + DerObjectIdentifier capability) + { + capabilities.Add(new DerSequence(capability)); + } + + public void AddCapability( + DerObjectIdentifier capability, + int value) + { + capabilities.Add(new DerSequence(capability, new DerInteger(value))); + } + + public void AddCapability( + DerObjectIdentifier capability, + Asn1Encodable parameters) + { + capabilities.Add(new DerSequence(capability, parameters)); + } + + public Asn1EncodableVector ToAsn1EncodableVector() + { + return capabilities; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapabilityVector.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapabilityVector.cs.meta new file mode 100644 index 000000000..e995b6d3d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMECapabilityVector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 276533a04a388f24b8e12af192913d72 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMEEncryptionKeyPreferenceAttribute.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMEEncryptionKeyPreferenceAttribute.cs new file mode 100644 index 000000000..acec063ef --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMEEncryptionKeyPreferenceAttribute.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Smime +{ + /** + * The SmimeEncryptionKeyPreference object. + *
+     * SmimeEncryptionKeyPreference ::= CHOICE {
+     *     issuerAndSerialNumber   [0] IssuerAndSerialNumber,
+     *     receipentKeyId          [1] RecipientKeyIdentifier,
+     *     subjectAltKeyIdentifier [2] SubjectKeyIdentifier
+     * }
+     * 
+ */ + public class SmimeEncryptionKeyPreferenceAttribute + : AttributeX509 + { + public SmimeEncryptionKeyPreferenceAttribute( + IssuerAndSerialNumber issAndSer) + : base(SmimeAttributes.EncrypKeyPref, + new DerSet(new DerTaggedObject(false, 0, issAndSer))) + { + } + + public SmimeEncryptionKeyPreferenceAttribute( + RecipientKeyIdentifier rKeyID) + : base(SmimeAttributes.EncrypKeyPref, + new DerSet(new DerTaggedObject(false, 1, rKeyID))) + { + } + + /** + * @param sKeyId the subjectKeyIdentifier value (normally the X.509 one) + */ + public SmimeEncryptionKeyPreferenceAttribute( + Asn1OctetString sKeyID) + : base(SmimeAttributes.EncrypKeyPref, + new DerSet(new DerTaggedObject(false, 2, sKeyID))) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMEEncryptionKeyPreferenceAttribute.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMEEncryptionKeyPreferenceAttribute.cs.meta new file mode 100644 index 000000000..a695f4f9b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/smime/SMIMEEncryptionKeyPreferenceAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 943827e6b6fc4dc42867c76471818998 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/teletrust.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/teletrust.meta new file mode 100644 index 000000000..4c3e0c378 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/teletrust.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b40fe8af30f4d1546857f2347f88102a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/teletrust/TeleTrusTNamedCurves.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/teletrust/TeleTrusTNamedCurves.cs new file mode 100644 index 000000000..ca94aa0eb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/teletrust/TeleTrusTNamedCurves.cs @@ -0,0 +1,557 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.TeleTrust +{ + /// Elliptic curve registry for curves defined in "ECC Brainpool Standard Curves and Curve Generation" + /// http://www.ecc-brainpool.org/download/draft_pkix_additional_ecc_dp.txt . + public static class TeleTrusTNamedCurves + { + private static X9ECPoint ConfigureBasepoint(ECCurve curve, string encoding) + { + X9ECPoint G = new X9ECPoint(curve, Hex.DecodeStrict(encoding)); + WNafUtilities.ConfigureBasepoint(G.Point); + return G; + } + + private static ECCurve ConfigureCurve(ECCurve curve) + { + return curve; + } + + private static BigInteger FromHex(string hex) + { + return new BigInteger(1, Hex.DecodeStrict(hex)); + } + + internal class BrainpoolP160r1Holder + : X9ECParametersHolder + { + private BrainpoolP160r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new BrainpoolP160r1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("E95E4A5F737059DC60DF5991D45029409E60FC09"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + FromHex("E95E4A5F737059DC60DFC7AD95B3D8139515620F"), // q + FromHex("340E7BE2A280EB74E2BE61BADA745D97E8F7C300"), // a + FromHex("1E589A8595423412134FAA2DBDEC95C8D8675E58"), // b + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "04BED5AF16EA3F6A4F62938C4631EB5AF7BDBCDBC31667CB477A1A8EC338F94741669C976316DA6321"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor); + } + } + + internal class BrainpoolP160t1Holder + : X9ECParametersHolder + { + private BrainpoolP160t1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new BrainpoolP160t1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("E95E4A5F737059DC60DF5991D45029409E60FC09"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + //FromHex("24DBFF5DEC9B986BBFE5295A29BFBAE45E0F5D0B"), // Z + FromHex("E95E4A5F737059DC60DFC7AD95B3D8139515620F"), // q + FromHex("E95E4A5F737059DC60DFC7AD95B3D8139515620C"), // a + FromHex("7A556B6DAE535B7B51ED2C4D7DAA7A0B5C55F380"), // b + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "04B199B13B9B34EFC1397E64BAEB05ACC265FF2378ADD6718B7C7C1961F0991B842443772152C9E0AD"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor); + } + } + + internal class BrainpoolP192r1Holder + : X9ECParametersHolder + { + private BrainpoolP192r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new BrainpoolP192r1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("C302F41D932A36CDA7A3462F9E9E916B5BE8F1029AC4ACC1"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + FromHex("C302F41D932A36CDA7A3463093D18DB78FCE476DE1A86297"), // q + FromHex("6A91174076B1E0E19C39C031FE8685C1CAE040E5C69A28EF"), // a + FromHex("469A28EF7C28CCA3DC721D044F4496BCCA7EF4146FBF25C9"), // b + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "04C0A0647EAAB6A48753B033C56CB0F0900A2F5C4853375FD614B690866ABD5BB88B5F4828C1490002E6773FA2FA299B8F"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor); + } + } + + internal class BrainpoolP192t1Holder + : X9ECParametersHolder + { + private BrainpoolP192t1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new BrainpoolP192t1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("C302F41D932A36CDA7A3462F9E9E916B5BE8F1029AC4ACC1"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + //FromHex("1B6F5CC8DB4DC7AF19458A9CB80DC2295E5EB9C3732104CB") // Z + FromHex("C302F41D932A36CDA7A3463093D18DB78FCE476DE1A86297"), // q + FromHex("C302F41D932A36CDA7A3463093D18DB78FCE476DE1A86294"), // a + FromHex("13D56FFAEC78681E68F9DEB43B35BEC2FB68542E27897B79"), // b + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "043AE9E58C82F63C30282E1FE7BBF43FA72C446AF6F4618129097E2C5667C2223A902AB5CA449D0084B7E5B3DE7CCC01C9"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor); + } + } + + internal class BrainpoolP224r1Holder + : X9ECParametersHolder + { + private BrainpoolP224r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new BrainpoolP224r1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("D7C134AA264366862A18302575D0FB98D116BC4B6DDEBCA3A5A7939F"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + FromHex("D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF"), // q + FromHex("68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43"), // a + FromHex("2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B"), // b + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "040D9029AD2C7E5CF4340823B2A87DC68C9E4CE3174C1E6EFDEE12C07D58AA56F772C0726F24C6B89E4ECDAC24354B9E99CAA3F6D3761402CD"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor); + } + } + + internal class BrainpoolP224t1Holder + : X9ECParametersHolder + { + private BrainpoolP224t1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new BrainpoolP224t1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("D7C134AA264366862A18302575D0FB98D116BC4B6DDEBCA3A5A7939F"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + //FromHex("2DF271E14427A346910CF7A2E6CFA7B3F484E5C2CCE1C8B730E28B3F") // Z + FromHex("D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF"), // q + FromHex("D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FC"), // a + FromHex("4B337D934104CD7BEF271BF60CED1ED20DA14C08B3BB64F18A60888D"), // b + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "046AB1E344CE25FF3896424E7FFE14762ECB49F8928AC0C76029B4D5800374E9F5143E568CD23F3F4D7C0D4B1E41C8CC0D1C6ABD5F1A46DB4C"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor); + } + } + + internal class BrainpoolP256r1Holder + : X9ECParametersHolder + { + private BrainpoolP256r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new BrainpoolP256r1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + FromHex("A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377"), // q + FromHex("7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9"), // a + FromHex("26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6"), // b + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor); + } + } + + internal class BrainpoolP256t1Holder + : X9ECParametersHolder + { + private BrainpoolP256t1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new BrainpoolP256t1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + //FromHex("3E2D4BD9597B58639AE7AA669CAB9837CF5CF20A2C852D10F655668DFC150EF0") // Z + FromHex("A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377"), // q + FromHex("A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5374"), // a + FromHex("662C61C430D84EA4FE66A7733D0B76B7BF93EBC4AF2F49256AE58101FEE92B04"), // b + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "04A3E8EB3CC1CFE7B7732213B23A656149AFA142C47AAFBC2B79A191562E1305F42D996C823439C56D7F7B22E14644417E69BCB6DE39D027001DABE8F35B25C9BE"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor); + } + } + + internal class BrainpoolP320r1Holder + : X9ECParametersHolder + { + private BrainpoolP320r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new BrainpoolP320r1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("D35E472036BC4FB7E13C785ED201E065F98FCFA5B68F12A32D482EC7EE8658E98691555B44C59311"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + FromHex("D35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F92B9EC7893EC28FCD412B1F1B32E27"), // q + FromHex("3EE30B568FBAB0F883CCEBD46D3F3BB8A2A73513F5EB79DA66190EB085FFA9F492F375A97D860EB4"), // a + FromHex("520883949DFDBC42D3AD198640688A6FE13F41349554B49ACC31DCCD884539816F5EB4AC8FB1F1A6"), // b + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0443BD7E9AFB53D8B85289BCC48EE5BFE6F20137D10A087EB6E7871E2A10A599C710AF8D0D39E2061114FDD05545EC1CC8AB4093247F77275E0743FFED117182EAA9C77877AAAC6AC7D35245D1692E8EE1"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor); + } + } + + internal class BrainpoolP320t1Holder + : X9ECParametersHolder + { + private BrainpoolP320t1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new BrainpoolP320t1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("D35E472036BC4FB7E13C785ED201E065F98FCFA5B68F12A32D482EC7EE8658E98691555B44C59311"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + //FromHex("15F75CAF668077F7E85B42EB01F0A81FF56ECD6191D55CB82B7D861458A18FEFC3E5AB7496F3C7B1") // Z + FromHex("D35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F92B9EC7893EC28FCD412B1F1B32E27"), // q + FromHex("D35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F92B9EC7893EC28FCD412B1F1B32E24"), // a + FromHex("A7F561E038EB1ED560B3D147DB782013064C19F27ED27C6780AAF77FB8A547CEB5B4FEF422340353"), // b + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "04925BE9FB01AFC6FB4D3E7D4990010F813408AB106C4F09CB7EE07868CC136FFF3357F624A21BED5263BA3A7A27483EBF6671DBEF7ABB30EBEE084E58A0B077AD42A5A0989D1EE71B1B9BC0455FB0D2C3"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor); + } + } + + internal class BrainpoolP384r1Holder + : X9ECParametersHolder + { + private BrainpoolP384r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new BrainpoolP384r1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B31F166E6CAC0425A7CF3AB6AF6B7FC3103B883202E9046565"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + FromHex("8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901D1A71874700133107EC53"), // q + FromHex("7BC382C63D8C150C3C72080ACE05AFA0C2BEA28E4FB22787139165EFBA91F90F8AA5814A503AD4EB04A8C7DD22CE2826"), // a + FromHex("04A8C7DD22CE28268B39B55416F0447C2FB77DE107DCD2A62E880EA53EEB62D57CB4390295DBC9943AB78696FA504C11"), // b + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "041D1C64F068CF45FFA2A63A81B7C13F6B8847A3E77EF14FE3DB7FCAFE0CBD10E8E826E03436D646AAEF87B2E247D4AF1E8ABE1D7520F9C2A45CB1EB8E95CFD55262B70B29FEEC5864E19C054FF99129280E4646217791811142820341263C5315"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor); + } + } + + internal class BrainpoolP384t1Holder + : X9ECParametersHolder + { + private BrainpoolP384t1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new BrainpoolP384t1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B31F166E6CAC0425A7CF3AB6AF6B7FC3103B883202E9046565"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + //FromHex("41DFE8DD399331F7166A66076734A89CD0D2BCDB7D068E44E1F378F41ECBAE97D2D63DBC87BCCDDCCC5DA39E8589291C") // Z + FromHex("8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901D1A71874700133107EC53"), // q + FromHex("8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901D1A71874700133107EC50"), // a + FromHex("7F519EADA7BDA81BD826DBA647910F8C4B9346ED8CCDC64E4B1ABD11756DCE1D2074AA263B88805CED70355A33B471EE"), // b + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0418DE98B02DB9A306F2AFCD7235F72A819B80AB12EBD653172476FECD462AABFFC4FF191B946A5F54D8D0AA2F418808CC25AB056962D30651A114AFD2755AD336747F93475B7A1FCA3B88F2B6A208CCFE469408584DC2B2912675BF5B9E582928"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor); + } + } + + internal class BrainpoolP512r1Holder + : X9ECParametersHolder + { + private BrainpoolP512r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new BrainpoolP512r1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA70330870553E5C414CA92619418661197FAC10471DB1D381085DDADDB58796829CA90069"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + FromHex("AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F3"), // q + FromHex("7830A3318B603B89E2327145AC234CC594CBDD8D3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CA"), // a + FromHex("3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CADC083E67984050B75EBAE5DD2809BD638016F723"), // b + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0481AEE4BDD82ED9645A21322E9C4C6A9385ED9F70B5D916C1B43B62EEF4D0098EFF3B1F78E2D0D48D50D1687B93B97D5F7C6D5047406A5E688B352209BCB9F8227DDE385D566332ECC0EABFA9CF7822FDF209F70024A57B1AA000C55B881F8111B2DCDE494A5F485E5BCA4BD88A2763AED1CA2B2FA8F0540678CD1E0F3AD80892"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor); + } + } + + internal class BrainpoolP512t1Holder + : X9ECParametersHolder + { + private BrainpoolP512t1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new BrainpoolP512t1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA70330870553E5C414CA92619418661197FAC10471DB1D381085DDADDB58796829CA90069"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + //FromHex("12EE58E6764838B69782136F0F2D3BA06E27695716054092E60A80BEDB212B64E585D90BCE13761F85C3F1D2A64E3BE8FEA2220F01EBA5EEB0F35DBD29D922AB") // Z + FromHex("AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F3"), // q + FromHex("AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F0"), // a + FromHex("7CBBBCF9441CFAB76E1890E46884EAE321F70C0BCB4981527897504BEC3E36A62BCDFA2304976540F6450085F2DAE145C22553B465763689180EA2571867423E"), // b + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "04640ECE5C12788717B9C1BA06CBC2A6FEBA85842458C56DDE9DB1758D39C0313D82BA51735CDB3EA499AA77A7D6943A64F7A3F25FE26F06B51BAA2696FA9035DA5B534BD595F5AF0FA2C892376C84ACE1BB4E3019B71634C01131159CAE03CEE9D9932184BEEF216BD71DF2DADF86A627306ECFF96DBB8BACE198B61E00F8B332"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor); + } + } + + private static readonly Dictionary objIds = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly Dictionary curves = + new Dictionary(); + private static readonly Dictionary names = + new Dictionary(); + + private static void DefineCurve(string name, DerObjectIdentifier oid, X9ECParametersHolder holder) + { + objIds.Add(name, oid); + names.Add(oid, name); + curves.Add(oid, holder); + } + + static TeleTrusTNamedCurves() + { + DefineCurve("brainpoolP160r1", TeleTrusTObjectIdentifiers.BrainpoolP160R1, BrainpoolP160r1Holder.Instance); + DefineCurve("brainpoolP160t1", TeleTrusTObjectIdentifiers.BrainpoolP160T1, BrainpoolP160t1Holder.Instance); + DefineCurve("brainpoolP192r1", TeleTrusTObjectIdentifiers.BrainpoolP192R1, BrainpoolP192r1Holder.Instance); + DefineCurve("brainpoolP192t1", TeleTrusTObjectIdentifiers.BrainpoolP192T1, BrainpoolP192t1Holder.Instance); + DefineCurve("brainpoolP224r1", TeleTrusTObjectIdentifiers.BrainpoolP224R1, BrainpoolP224r1Holder.Instance); + DefineCurve("brainpoolP224t1", TeleTrusTObjectIdentifiers.BrainpoolP224T1, BrainpoolP224t1Holder.Instance); + DefineCurve("brainpoolP256r1", TeleTrusTObjectIdentifiers.BrainpoolP256R1, BrainpoolP256r1Holder.Instance); + DefineCurve("brainpoolP256t1", TeleTrusTObjectIdentifiers.BrainpoolP256T1, BrainpoolP256t1Holder.Instance); + DefineCurve("brainpoolP320r1", TeleTrusTObjectIdentifiers.BrainpoolP320R1, BrainpoolP320r1Holder.Instance); + DefineCurve("brainpoolP320t1", TeleTrusTObjectIdentifiers.BrainpoolP320T1, BrainpoolP320t1Holder.Instance); + DefineCurve("brainpoolP384r1", TeleTrusTObjectIdentifiers.BrainpoolP384R1, BrainpoolP384r1Holder.Instance); + DefineCurve("brainpoolP384t1", TeleTrusTObjectIdentifiers.BrainpoolP384T1, BrainpoolP384t1Holder.Instance); + DefineCurve("brainpoolP512r1", TeleTrusTObjectIdentifiers.BrainpoolP512R1, BrainpoolP512r1Holder.Instance); + DefineCurve("brainpoolP512t1", TeleTrusTObjectIdentifiers.BrainpoolP512T1, BrainpoolP512t1Holder.Instance); + } + + /// Look up the for the curve with the given name. + /// The name of the curve. + public static X9ECParameters GetByName(string name) + { + DerObjectIdentifier oid = GetOid(name); + return oid == null ? null : GetByOid(oid); + } + + /// Look up an for the curve with the given name. + /// + /// Allows accessing the curve without necessarily triggering the creation of the + /// full . + /// + /// The name of the curve. + public static X9ECParametersHolder GetByNameLazy(string name) + { + DerObjectIdentifier oid = GetOid(name); + return oid == null ? null : GetByOidLazy(oid); + } + + /// Look up the for the curve with the given + /// OID. + /// The OID for the curve. + public static X9ECParameters GetByOid(DerObjectIdentifier oid) + { + return GetByOidLazy(oid)?.Parameters; + } + + /// Look up an for the curve with the given + /// OID. + /// + /// Allows accessing the curve without necessarily triggering the creation of the + /// full . + /// + /// The OID for the curve. + public static X9ECParametersHolder GetByOidLazy(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(curves, oid); + } + + /// Look up the name of the curve with the given OID. + /// The OID for the curve. + public static string GetName(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(names, oid); + } + + /// Look up the OID of the curve with the given name. + /// The name of the curve. + public static DerObjectIdentifier GetOid(string name) + { + return CollectionUtilities.GetValueOrNull(objIds, name); + } + + /// Enumerate the available curve names in this registry. + public static IEnumerable Names + { + get { return CollectionUtilities.Proxy(objIds.Keys); } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/teletrust/TeleTrusTNamedCurves.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/teletrust/TeleTrusTNamedCurves.cs.meta new file mode 100644 index 000000000..19c112099 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/teletrust/TeleTrusTNamedCurves.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a0a21d207ece6f34bbc1b20fffaac190 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/teletrust/TeleTrusTObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/teletrust/TeleTrusTObjectIdentifiers.cs new file mode 100644 index 000000000..9cd420f75 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/teletrust/TeleTrusTObjectIdentifiers.cs @@ -0,0 +1,49 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.TeleTrust +{ + public sealed class TeleTrusTObjectIdentifiers + { + private TeleTrusTObjectIdentifiers() + { + } + + public static readonly DerObjectIdentifier TeleTrusTAlgorithm = new DerObjectIdentifier("1.3.36.3"); + + public static readonly DerObjectIdentifier RipeMD160 = new DerObjectIdentifier(TeleTrusTAlgorithm + ".2.1"); + public static readonly DerObjectIdentifier RipeMD128 = new DerObjectIdentifier(TeleTrusTAlgorithm + ".2.2"); + public static readonly DerObjectIdentifier RipeMD256 = new DerObjectIdentifier(TeleTrusTAlgorithm + ".2.3"); + + public static readonly DerObjectIdentifier TeleTrusTRsaSignatureAlgorithm = new DerObjectIdentifier(TeleTrusTAlgorithm + ".3.1"); + + public static readonly DerObjectIdentifier RsaSignatureWithRipeMD160 = new DerObjectIdentifier(TeleTrusTRsaSignatureAlgorithm + ".2"); + public static readonly DerObjectIdentifier RsaSignatureWithRipeMD128 = new DerObjectIdentifier(TeleTrusTRsaSignatureAlgorithm + ".3"); + public static readonly DerObjectIdentifier RsaSignatureWithRipeMD256 = new DerObjectIdentifier(TeleTrusTRsaSignatureAlgorithm + ".4"); + + public static readonly DerObjectIdentifier ECSign = new DerObjectIdentifier(TeleTrusTAlgorithm + ".3.2"); + + public static readonly DerObjectIdentifier ECSignWithSha1 = new DerObjectIdentifier(ECSign + ".1"); + public static readonly DerObjectIdentifier ECSignWithRipeMD160 = new DerObjectIdentifier(ECSign + ".2"); + + public static readonly DerObjectIdentifier EccBrainpool = new DerObjectIdentifier(TeleTrusTAlgorithm + ".3.2.8"); + public static readonly DerObjectIdentifier EllipticCurve = new DerObjectIdentifier(EccBrainpool + ".1"); + public static readonly DerObjectIdentifier VersionOne = new DerObjectIdentifier(EllipticCurve + ".1"); + + public static readonly DerObjectIdentifier BrainpoolP160R1 = new DerObjectIdentifier(VersionOne + ".1"); + public static readonly DerObjectIdentifier BrainpoolP160T1 = new DerObjectIdentifier(VersionOne + ".2"); + public static readonly DerObjectIdentifier BrainpoolP192R1 = new DerObjectIdentifier(VersionOne + ".3"); + public static readonly DerObjectIdentifier BrainpoolP192T1 = new DerObjectIdentifier(VersionOne + ".4"); + public static readonly DerObjectIdentifier BrainpoolP224R1 = new DerObjectIdentifier(VersionOne + ".5"); + public static readonly DerObjectIdentifier BrainpoolP224T1 = new DerObjectIdentifier(VersionOne + ".6"); + public static readonly DerObjectIdentifier BrainpoolP256R1 = new DerObjectIdentifier(VersionOne + ".7"); + public static readonly DerObjectIdentifier BrainpoolP256T1 = new DerObjectIdentifier(VersionOne + ".8"); + public static readonly DerObjectIdentifier BrainpoolP320R1 = new DerObjectIdentifier(VersionOne + ".9"); + public static readonly DerObjectIdentifier BrainpoolP320T1 = new DerObjectIdentifier(VersionOne + ".10"); + public static readonly DerObjectIdentifier BrainpoolP384R1 = new DerObjectIdentifier(VersionOne + ".11"); + public static readonly DerObjectIdentifier BrainpoolP384T1 = new DerObjectIdentifier(VersionOne + ".12"); + public static readonly DerObjectIdentifier BrainpoolP512R1 = new DerObjectIdentifier(VersionOne + ".13"); + public static readonly DerObjectIdentifier BrainpoolP512T1 = new DerObjectIdentifier(VersionOne + ".14"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/teletrust/TeleTrusTObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/teletrust/TeleTrusTObjectIdentifiers.cs.meta new file mode 100644 index 000000000..807ee86af --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/teletrust/TeleTrusTObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2bcaf3493b261b3408acb0edd506fb5b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp.meta new file mode 100644 index 000000000..371b773c1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3953c729f85a1e045892502d72f656f9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/Accuracy.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/Accuracy.cs new file mode 100644 index 000000000..4912080a5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/Accuracy.cs @@ -0,0 +1,124 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Tsp +{ + public class Accuracy + : Asn1Encodable + { + private readonly DerInteger seconds; + private readonly DerInteger millis; + private readonly DerInteger micros; + + // constants + protected const int MinMillis = 1; + protected const int MaxMillis = 999; + protected const int MinMicros = 1; + protected const int MaxMicros = 999; + + public Accuracy( + DerInteger seconds, + DerInteger millis, + DerInteger micros) + { + if (null != millis) + { + int millisValue = millis.IntValueExact; + if (millisValue < MinMillis || millisValue > MaxMillis) + throw new ArgumentException("Invalid millis field : not in (1..999)"); + } + if (null != micros) + { + int microsValue = micros.IntValueExact; + if (microsValue < MinMicros || microsValue > MaxMicros) + throw new ArgumentException("Invalid micros field : not in (1..999)"); + } + + this.seconds = seconds; + this.millis = millis; + this.micros = micros; + } + + private Accuracy( + Asn1Sequence seq) + { + for (int i = 0; i < seq.Count; ++i) + { + // seconds + if (seq[i] is DerInteger) + { + seconds = (DerInteger) seq[i]; + } + else if (seq[i] is Asn1TaggedObject) + { + Asn1TaggedObject extra = (Asn1TaggedObject)seq[i]; + + switch (extra.TagNo) + { + case 0: + millis = DerInteger.GetInstance(extra, false); + int millisValue = millis.IntValueExact; + if (millisValue < MinMillis || millisValue > MaxMillis) + throw new ArgumentException("Invalid millis field : not in (1..999)"); + break; + case 1: + micros = DerInteger.GetInstance(extra, false); + int microsValue = micros.IntValueExact; + if (microsValue < MinMicros || microsValue > MaxMicros) + throw new ArgumentException("Invalid micros field : not in (1..999)"); + break; + default: + throw new ArgumentException("Invalid tag number"); + } + } + } + } + + public static Accuracy GetInstance(object obj) + { + if (obj is Accuracy) + return (Accuracy)obj; + if (obj == null) + return null; + return new Accuracy(Asn1Sequence.GetInstance(obj)); + } + + public DerInteger Seconds + { + get { return seconds; } + } + + public DerInteger Millis + { + get { return millis; } + } + + public DerInteger Micros + { + get { return micros; } + } + + /** + *
+		 * Accuracy ::= SEQUENCE {
+		 *             seconds        INTEGER              OPTIONAL,
+		 *             millis     [0] INTEGER  (1..999)    OPTIONAL,
+		 *             micros     [1] INTEGER  (1..999)    OPTIONAL
+		 *             }
+		 * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptional(seconds); + v.AddOptionalTagged(false, 0, millis); + v.AddOptionalTagged(false, 1, micros); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/Accuracy.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/Accuracy.cs.meta new file mode 100644 index 000000000..c4a84872a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/Accuracy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a8961d826eed5f54ca3a63faccf46a7e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/MessageImprint.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/MessageImprint.cs new file mode 100644 index 000000000..e80868812 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/MessageImprint.cs @@ -0,0 +1,67 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Tsp +{ + public class MessageImprint + : Asn1Encodable + { + private readonly AlgorithmIdentifier hashAlgorithm; + private readonly byte[] hashedMessage; + + public static MessageImprint GetInstance(object obj) + { + if (obj is MessageImprint) + return (MessageImprint)obj; + if (obj == null) + return null; + return new MessageImprint(Asn1Sequence.GetInstance(obj)); + } + + private MessageImprint( + Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + this.hashAlgorithm = AlgorithmIdentifier.GetInstance(seq[0]); + this.hashedMessage = Asn1OctetString.GetInstance(seq[1]).GetOctets(); + } + + public MessageImprint( + AlgorithmIdentifier hashAlgorithm, + byte[] hashedMessage) + { + this.hashAlgorithm = hashAlgorithm; + this.hashedMessage = hashedMessage; + } + + public AlgorithmIdentifier HashAlgorithm + { + get { return hashAlgorithm; } + } + + public byte[] GetHashedMessage() + { + return hashedMessage; + } + + /** + *
+		 *    MessageImprint ::= SEQUENCE  {
+		 *       hashAlgorithm                AlgorithmIdentifier,
+		 *       hashedMessage                OCTET STRING  }
+		 * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(hashAlgorithm, new DerOctetString(hashedMessage)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/MessageImprint.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/MessageImprint.cs.meta new file mode 100644 index 000000000..fa90faf68 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/MessageImprint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 835f6babba6da8b469b31289b68395ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/TSTInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/TSTInfo.cs new file mode 100644 index 000000000..45c24b683 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/TSTInfo.cs @@ -0,0 +1,211 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Tsp +{ + public class TstInfo + : Asn1Encodable + { + private readonly DerInteger version; + private readonly DerObjectIdentifier tsaPolicyId; + private readonly MessageImprint messageImprint; + private readonly DerInteger serialNumber; + private readonly Asn1GeneralizedTime genTime; + private readonly Accuracy accuracy; + private readonly DerBoolean ordering; + private readonly DerInteger nonce; + private readonly GeneralName tsa; + private readonly X509Extensions extensions; + + public static TstInfo GetInstance(object obj) + { + if (obj is TstInfo) + return (TstInfo)obj; + if (obj == null) + return null; + return new TstInfo(Asn1Sequence.GetInstance(obj)); + } + + private TstInfo(Asn1Sequence seq) + { + var e = seq.GetEnumerator(); + + // version + e.MoveNext(); + version = DerInteger.GetInstance(e.Current); + + // tsaPolicy + e.MoveNext(); + tsaPolicyId = DerObjectIdentifier.GetInstance(e.Current); + + // messageImprint + e.MoveNext(); + messageImprint = MessageImprint.GetInstance(e.Current); + + // serialNumber + e.MoveNext(); + serialNumber = DerInteger.GetInstance(e.Current); + + // genTime + e.MoveNext(); + genTime = Asn1GeneralizedTime.GetInstance(e.Current); + + // default for ordering + ordering = DerBoolean.False; + + while (e.MoveNext()) + { + Asn1Object o = (Asn1Object) e.Current; + + if (o is Asn1TaggedObject) + { + DerTaggedObject tagged = (DerTaggedObject) o; + + switch (tagged.TagNo) + { + case 0: + tsa = GeneralName.GetInstance(tagged, true); + break; + case 1: + extensions = X509Extensions.GetInstance(tagged, false); + break; + default: + throw new ArgumentException("Unknown tag value " + tagged.TagNo); + } + } + + if (o is DerSequence) + { + accuracy = Accuracy.GetInstance(o); + } + + if (o is DerBoolean) + { + ordering = DerBoolean.GetInstance(o); + } + + if (o is DerInteger) + { + nonce = DerInteger.GetInstance(o); + } + } + } + + public TstInfo( + DerObjectIdentifier tsaPolicyId, + MessageImprint messageImprint, + DerInteger serialNumber, + Asn1GeneralizedTime genTime, + Accuracy accuracy, + DerBoolean ordering, + DerInteger nonce, + GeneralName tsa, + X509Extensions extensions) + { + this.version = new DerInteger(1); + this.tsaPolicyId = tsaPolicyId; + this.messageImprint = messageImprint; + this.serialNumber = serialNumber; + this.genTime = genTime; + this.accuracy = accuracy; + this.ordering = ordering; + this.nonce = nonce; + this.tsa = tsa; + this.extensions = extensions; + } + + public DerInteger Version + { + get { return version; } + } + + public MessageImprint MessageImprint + { + get { return messageImprint; } + } + + public DerObjectIdentifier Policy + { + get { return tsaPolicyId; } + } + + public DerInteger SerialNumber + { + get { return serialNumber; } + } + + public Accuracy Accuracy + { + get { return accuracy; } + } + + public Asn1GeneralizedTime GenTime + { + get { return genTime; } + } + + public DerBoolean Ordering + { + get { return ordering; } + } + + public DerInteger Nonce + { + get { return nonce; } + } + + public GeneralName Tsa + { + get { return tsa; } + } + + public X509Extensions Extensions + { + get { return extensions; } + } + + /** + *
+		 *
+		 *     TstInfo ::= SEQUENCE  {
+		 *        version                      INTEGER  { v1(1) },
+		 *        policy                       TSAPolicyId,
+		 *        messageImprint               MessageImprint,
+		 *          -- MUST have the same value as the similar field in
+		 *          -- TimeStampReq
+		 *        serialNumber                 INTEGER,
+		 *         -- Time-Stamping users MUST be ready to accommodate integers
+		 *         -- up to 160 bits.
+		 *        genTime                      GeneralizedTime,
+		 *        accuracy                     Accuracy                 OPTIONAL,
+		 *        ordering                     BOOLEAN             DEFAULT FALSE,
+		 *        nonce                        INTEGER                  OPTIONAL,
+		 *          -- MUST be present if the similar field was present
+		 *          -- in TimeStampReq.  In that case it MUST have the same value.
+		 *        tsa                          [0] GeneralName          OPTIONAL,
+		 *        extensions                   [1] IMPLICIT Extensions   OPTIONAL  }
+		 *
+		 * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(version, tsaPolicyId, messageImprint, serialNumber, genTime); + v.AddOptional(accuracy); + + if (ordering != null && ordering.IsTrue) + { + v.Add(ordering); + } + + v.AddOptional(nonce); + v.AddOptionalTagged(true, 0, tsa); + v.AddOptionalTagged(false, 1, extensions); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/TSTInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/TSTInfo.cs.meta new file mode 100644 index 000000000..4f68fe947 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/TSTInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3322c001cd222c4098bc3985c447853 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/TimeStampReq.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/TimeStampReq.cs new file mode 100644 index 000000000..2d704880a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/TimeStampReq.cs @@ -0,0 +1,147 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Tsp +{ + public class TimeStampReq + : Asn1Encodable + { + private readonly DerInteger version; + private readonly MessageImprint messageImprint; + private readonly DerObjectIdentifier tsaPolicy; + private readonly DerInteger nonce; + private readonly DerBoolean certReq; + private readonly X509Extensions extensions; + + public static TimeStampReq GetInstance(object obj) + { + if (obj is TimeStampReq) + return (TimeStampReq)obj; + if (obj == null) + return null; + return new TimeStampReq(Asn1Sequence.GetInstance(obj)); + } + + private TimeStampReq( + Asn1Sequence seq) + { + int nbObjects = seq.Count; + int seqStart = 0; + + // version + version = DerInteger.GetInstance(seq[seqStart++]); + + // messageImprint + messageImprint = MessageImprint.GetInstance(seq[seqStart++]); + + for (int opt = seqStart; opt < nbObjects; opt++) + { + // tsaPolicy + if (seq[opt] is DerObjectIdentifier) + { + tsaPolicy = DerObjectIdentifier.GetInstance(seq[opt]); + } + // nonce + else if (seq[opt] is DerInteger) + { + nonce = DerInteger.GetInstance(seq[opt]); + } + // certReq + else if (seq[opt] is DerBoolean) + { + certReq = DerBoolean.GetInstance(seq[opt]); + } + // extensions + else if (seq[opt] is Asn1TaggedObject) + { + Asn1TaggedObject tagged = (Asn1TaggedObject) seq[opt]; + if (tagged.TagNo == 0) + { + extensions = X509Extensions.GetInstance(tagged, false); + } + } + } + } + + public TimeStampReq( + MessageImprint messageImprint, + DerObjectIdentifier tsaPolicy, + DerInteger nonce, + DerBoolean certReq, + X509Extensions extensions) + { + // default + this.version = new DerInteger(1); + + this.messageImprint = messageImprint; + this.tsaPolicy = tsaPolicy; + this.nonce = nonce; + this.certReq = certReq; + this.extensions = extensions; + } + + public DerInteger Version + { + get { return version; } + } + + public MessageImprint MessageImprint + { + get { return messageImprint; } + } + + public DerObjectIdentifier ReqPolicy + { + get { return tsaPolicy; } + } + + public DerInteger Nonce + { + get { return nonce; } + } + + public DerBoolean CertReq + { + get { return certReq; } + } + + public X509Extensions Extensions + { + get { return extensions; } + } + + /** + *
+		 * TimeStampReq ::= SEQUENCE  {
+		 *  version                      INTEGER  { v1(1) },
+		 *  messageImprint               MessageImprint,
+		 *    --a hash algorithm OID and the hash value of the data to be
+		 *    --time-stamped
+		 *  reqPolicy             TSAPolicyId              OPTIONAL,
+		 *  nonce                 INTEGER                  OPTIONAL,
+		 *  certReq               BOOLEAN                  DEFAULT FALSE,
+		 *  extensions            [0] IMPLICIT Extensions  OPTIONAL
+		 * }
+		 * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(version, messageImprint); + v.AddOptional(tsaPolicy, nonce); + + if (certReq != null && certReq.IsTrue) + { + v.Add(certReq); + } + + v.AddOptionalTagged(false, 0, extensions); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/TimeStampReq.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/TimeStampReq.cs.meta new file mode 100644 index 000000000..fa6aa908c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/TimeStampReq.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31b5ae6dc42d4624cb6ccb943e16d0fd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/TimeStampResp.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/TimeStampResp.cs new file mode 100644 index 000000000..66a50a934 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/TimeStampResp.cs @@ -0,0 +1,71 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Tsp +{ + public class TimeStampResp + : Asn1Encodable + { + private readonly PkiStatusInfo pkiStatusInfo; + private readonly ContentInfo timeStampToken; + + public static TimeStampResp GetInstance(object obj) + { + if (obj is TimeStampResp) + return (TimeStampResp)obj; + if (obj == null) + return null; + return new TimeStampResp(Asn1Sequence.GetInstance(obj)); + } + + private TimeStampResp( + Asn1Sequence seq) + { + this.pkiStatusInfo = PkiStatusInfo.GetInstance(seq[0]); + + if (seq.Count > 1) + { + this.timeStampToken = ContentInfo.GetInstance(seq[1]); + } + } + + public TimeStampResp( + PkiStatusInfo pkiStatusInfo, + ContentInfo timeStampToken) + { + this.pkiStatusInfo = pkiStatusInfo; + this.timeStampToken = timeStampToken; + } + + public PkiStatusInfo Status + { + get { return pkiStatusInfo; } + } + + public ContentInfo TimeStampToken + { + get { return timeStampToken; } + } + + /** + *
+		 * TimeStampResp ::= SEQUENCE  {
+		 *   status                  PkiStatusInfo,
+		 *   timeStampToken          TimeStampToken     OPTIONAL  }
+		 * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(pkiStatusInfo); + v.AddOptional(timeStampToken); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/TimeStampResp.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/TimeStampResp.cs.meta new file mode 100644 index 000000000..4f61b7831 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/tsp/TimeStampResp.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9ec52bc1476daae4f87068811480b959 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ua.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ua.meta new file mode 100644 index 000000000..5f435c4b3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ua.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e39155a1305d6e64c8b52cff75fe8748 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ua/UAObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ua/UAObjectIdentifiers.cs new file mode 100644 index 000000000..044402db2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ua/UAObjectIdentifiers.cs @@ -0,0 +1,111 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.UA +{ + /** + * Ukrainian object identifiers + *

+ * {iso(1) member-body(2) Ukraine(804) root(2) security(1) cryptography(1) pki(1)} + *

+ * { ... pki-alg(1) pki-alg-sym(3) Dstu4145WithGost34311(1) PB(1)} + *

+ * DSTU4145 in polynomial basis has 2 oids, one for little-endian representation and one for big-endian + */ + public abstract class UAObjectIdentifiers + { + /** Base OID: 1.2.804.2.1.1.1 */ + public static readonly DerObjectIdentifier UaOid = new DerObjectIdentifier("1.2.804.2.1.1.1"); + + /** DSTU4145 Little Endian presentation. OID: 1.2.804.2.1.1.1.1.3.1.1 */ + public static readonly DerObjectIdentifier dstu4145le = UaOid.Branch("1.3.1.1"); + /** DSTU4145 Big Endian presentation. OID: 1.2.804.2.1.1.1.1.3.1.1.1 */ + public static readonly DerObjectIdentifier dstu4145be = UaOid.Branch("1.3.1.1.1.1"); + + /** DSTU7564 256-bit digest presentation. */ + public static readonly DerObjectIdentifier dstu7564digest_256 = UaOid.Branch("1.2.2.1"); + /** DSTU7564 384-bit digest presentation. */ + public static readonly DerObjectIdentifier dstu7564digest_384 = UaOid.Branch("1.2.2.2"); + /** DSTU7564 512-bit digest presentation. */ + public static readonly DerObjectIdentifier dstu7564digest_512 = UaOid.Branch("1.2.2.3"); + + /** DSTU7564 256-bit mac presentation. */ + public static readonly DerObjectIdentifier dstu7564mac_256 = UaOid.Branch("1.2.2.4"); + /** DSTU7564 384-bit mac presentation. */ + public static readonly DerObjectIdentifier dstu7564mac_384 = UaOid.Branch("1.2.2.5"); + /** DSTU7564 512-bit mac presentation. */ + public static readonly DerObjectIdentifier dstu7564mac_512 = UaOid.Branch("1.2.2.6"); + + + /** DSTU7624 in ECB mode with 128 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624ecb_128 = UaOid.Branch("1.1.3.1.1"); + /** DSTU7624 in ECB mode with 256 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624ecb_256 = UaOid.Branch("1.1.3.1.2"); + /** DSTU7624 in ECB mode with 512 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624ecb_512 = UaOid.Branch("1.1.3.1.3"); + + /** DSTU7624 in CTR mode with 128 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624ctr_128 = UaOid.Branch("1.1.3.2.1"); + /** DSTU7624 in CTR mode with 256 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624ctr_256 = UaOid.Branch("1.1.3.2.2"); + /** DSTU7624 in CTR mode with 512 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624ctr_512 = UaOid.Branch("1.1.3.2.3"); + + /** DSTU7624 in CFB mode with 128 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624cfb_128 = UaOid.Branch("1.1.3.3.1"); + /** DSTU7624 in CFB mode with 256 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624cfb_256 = UaOid.Branch("1.1.3.3.2"); + /** DSTU7624 in CFB mode with 512 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624cfb_512 = UaOid.Branch("1.1.3.3.3"); + + /** DSTU7624 in MAC mode with 128 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624cmac_128 = UaOid.Branch("1.1.3.4.1"); + /** DSTU7624 in MAC mode with 256 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624cmac_256 = UaOid.Branch("1.1.3.4.2"); + /** DSTU7624 in MAC mode with 512 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624cmac_512 = UaOid.Branch("1.1.3.4.3"); + + /** DSTU7624 in CBC mode with 128 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624cbc_128 = UaOid.Branch("1.1.3.5.1"); + /** DSTU7624 in CBC mode with 256 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624cbc_256 = UaOid.Branch("1.1.3.5.2"); + /** DSTU7624 in CBC mode with 512 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624cbc_512 = UaOid.Branch("1.1.3.5.3"); + + /** DSTU7624 in OFB mode with 128 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624ofb_128 = UaOid.Branch("1.1.3.6.1"); + /** DSTU7624 in OFB mode with 256 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624ofb_256 = UaOid.Branch("1.1.3.6.2"); + /** DSTU7624 in OFB mode with 512 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624ofb_512 = UaOid.Branch("1.1.3.6.3"); + + /** DSTU7624 in GMAC (GCM witout encryption) mode with 128 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624gmac_128 = UaOid.Branch("1.1.3.7.1"); + /** DSTU7624 in GMAC (GCM witout encryption) mode with 256 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624gmac_256 = UaOid.Branch("1.1.3.7.2"); + /** DSTU7624 in GMAC (GCM witout encryption) mode with 512 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624gmac_512 = UaOid.Branch("1.1.3.7.3"); + + /** DSTU7624 in CCM mode with 128 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624ccm_128 = UaOid.Branch("1.1.3.8.1"); + /** DSTU7624 in CCM mode with 256 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624ccm_256 = UaOid.Branch("1.1.3.8.2"); + /** DSTU7624 in CCM mode with 512 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624ccm_512 = UaOid.Branch("1.1.3.8.3"); + + /** DSTU7624 in XTS mode with 128 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624xts_128 = UaOid.Branch("1.1.3.9.1"); + /** DSTU7624 in XTS mode with 256 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624xts_256 = UaOid.Branch("1.1.3.9.2"); + /** DSTU7624 in XTS mode with 512 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624xts_512 = UaOid.Branch("1.1.3.9.3"); + + /** DSTU7624 in key wrap (KW) mode with 128 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624kw_128 = UaOid.Branch("1.1.3.10.1"); + /** DSTU7624 in key wrap (KW) mode with 256 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624kw_256 = UaOid.Branch("1.1.3.10.2"); + /** DSTU7624 in key wrap (KW) mode with 512 bit block/key presentation */ + public static readonly DerObjectIdentifier dstu7624kw_512 = UaOid.Branch("1.1.3.10.3"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ua/UAObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ua/UAObjectIdentifiers.cs.meta new file mode 100644 index 000000000..3a0c35a6c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/ua/UAObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f7217807282a0840ad393555f9d08ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/util.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/util.meta new file mode 100644 index 000000000..552c8d5e6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/util.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3c52f2b6f7def7e48816d97f7186277b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/util/Asn1Dump.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/util/Asn1Dump.cs new file mode 100644 index 000000000..8df74b133 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/util/Asn1Dump.cs @@ -0,0 +1,332 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Utilities +{ + public static class Asn1Dump + { + private const string Tab = " "; + private const int SampleSize = 32; + + /** + * dump a Der object as a formatted string with indentation + * + * @param obj the Asn1Object to be dumped out. + */ + private static void AsString(string indent, bool verbose, Asn1Object obj, StringBuilder buf) + { + if (obj is Asn1Null) + { + buf.Append(indent); + buf.AppendLine("NULL"); + } + else if (obj is Asn1Sequence asn1Sequence) + { + buf.Append(indent); + + if (asn1Sequence is BerSequence) + { + buf.AppendLine("BER Sequence"); + } + else if (!(asn1Sequence is DLSequence)) + { + buf.AppendLine("DER Sequence"); + } + else + { + buf.AppendLine("Sequence"); + } + + string elementsIndent = indent + Tab; + + for (int i = 0, count = asn1Sequence.Count; i < count; ++i) + { + AsString(elementsIndent, verbose, asn1Sequence[i].ToAsn1Object(), buf); + } + } + else if (obj is Asn1Set asn1Set) + { + buf.Append(indent); + + if (asn1Set is BerSet) + { + buf.AppendLine("BER Set"); + } + else if (!(asn1Set is DLSet)) + { + buf.AppendLine("DER Set"); + } + else + { + buf.AppendLine("Set"); + } + + string elementsIndent = indent + Tab; + + for (int i = 0, count = asn1Set.Count; i < count; ++i) + { + AsString(elementsIndent, verbose, asn1Set[i].ToAsn1Object(), buf); + } + } + else if (obj is Asn1TaggedObject taggedObject) + { + buf.Append(indent); + + if (taggedObject is BerTaggedObject) + { + buf.Append("BER Tagged "); + } + else if (!(taggedObject is DLTaggedObject)) + { + buf.Append("DER Tagged "); + } + else + { + buf.Append("Tagged "); + } + + buf.Append(Asn1Utilities.GetTagText(taggedObject)); + + if (!taggedObject.IsExplicit()) + { + buf.Append(" IMPLICIT "); + } + + buf.AppendLine(); + + string baseIndent = indent + Tab; + + AsString(baseIndent, verbose, taggedObject.GetBaseObject().ToAsn1Object(), buf); + } + else if (obj is DerObjectIdentifier oid) + { + buf.Append(indent); + buf.AppendLine("ObjectIdentifier(" + oid.Id + ")"); + } + else if (obj is Asn1RelativeOid relativeOid) + { + buf.Append(indent); + buf.AppendLine("RelativeOID(" + relativeOid.Id + ")"); + } + else if (obj is DerBoolean derBoolean) + { + buf.Append(indent); + buf.AppendLine("Boolean(" + derBoolean.IsTrue + ")"); + } + else if (obj is DerInteger derInteger) + { + buf.Append(indent); + buf.AppendLine("Integer(" + derInteger.Value + ")"); + } + else if (obj is Asn1OctetString oct) + { + byte[] octets = oct.GetOctets(); + + buf.Append(indent); + + if (obj is BerOctetString) + { + buf.AppendLine("BER Octet String[" + octets.Length + "]"); + } + else + { + buf.AppendLine("DER Octet String[" + octets.Length + "]"); + } + + if (verbose) + { + DumpBinaryDataAsString(buf, indent, octets); + } + } + else if (obj is DerBitString bitString) + { + byte[] bytes = bitString.GetBytes(); + int padBits = bitString.PadBits; + + buf.Append(indent); + + if (bitString is BerBitString) + { + buf.AppendLine("BER Bit String[" + bytes.Length + ", " + padBits + "]"); + } + else if (bitString is DLBitString) + { + buf.AppendLine("DL Bit String[" + bytes.Length + ", " + padBits + "]"); + } + else + { + buf.AppendLine("DER Bit String[" + bytes.Length + ", " + padBits + "]"); + } + + if (verbose) + { + DumpBinaryDataAsString(buf, indent, bytes); + } + } + else if (obj is DerIA5String ia5String) + { + buf.Append(indent); + buf.AppendLine("IA5String(" + ia5String.GetString() + ")"); + } + else if (obj is DerUtf8String utf8String) + { + buf.Append(indent); + buf.AppendLine("UTF8String(" + utf8String.GetString() + ")"); + } + else if (obj is DerPrintableString printableString) + { + buf.Append(indent); + buf.AppendLine("PrintableString(" + printableString.GetString() + ")"); + } + else if (obj is DerVisibleString visibleString) + { + buf.Append(indent); + buf.AppendLine("VisibleString(" + visibleString.GetString() + ")"); + } + else if (obj is DerBmpString bmpString) + { + buf.Append(indent); + buf.AppendLine("BMPString(" + bmpString.GetString() + ")"); + } + else if (obj is DerT61String t61String) + { + buf.Append(indent); + buf.AppendLine("T61String(" + t61String.GetString() + ")"); + } + else if (obj is DerGraphicString graphicString) + { + buf.Append(indent); + buf.AppendLine("GraphicString(" + graphicString.GetString() + ")"); + } + else if (obj is DerVideotexString videotexString) + { + buf.Append(indent); + buf.AppendLine("VideotexString(" + videotexString.GetString() + ")"); + } + else if (obj is Asn1UtcTime utcTime) + { + buf.Append(indent); + buf.AppendLine("UTCTime(" + utcTime.TimeString + ")"); + } + else if (obj is Asn1GeneralizedTime generalizedTime) + { + buf.Append(indent); + buf.AppendLine("GeneralizedTime(" + generalizedTime.TimeString + ")"); + } + else if (obj is DerEnumerated en) + { + buf.Append(indent); + buf.AppendLine("DER Enumerated(" + en.Value + ")"); + } + else if (obj is DerExternal ext) + { + buf.Append(indent); + buf.AppendLine("External "); + string tab = indent + Tab; + + if (ext.DirectReference != null) + { + buf.Append(tab); + buf.AppendLine("Direct Reference: " + ext.DirectReference.Id); + } + if (ext.IndirectReference != null) + { + buf.Append(tab); + buf.AppendLine("Indirect Reference: " + ext.IndirectReference.ToString()); + } + if (ext.DataValueDescriptor != null) + { + AsString(tab, verbose, ext.DataValueDescriptor, buf); + } + buf.Append(tab); + buf.AppendLine("Encoding: " + ext.Encoding); + AsString(tab, verbose, ext.ExternalContent, buf); + } + else + { + buf.Append(indent); + buf.Append(obj); + buf.AppendLine(); + } + } + + ///

Parse ASN.1 objects from input , and write them to the output. + public static void Dump(Stream input, TextWriter output) + { + Asn1InputStream asn1InputStream = new Asn1InputStream(input); + Asn1Object asn1Object; + while ((asn1Object = asn1InputStream.ReadObject()) != null) + { + output.Write(DumpAsString(asn1Object)); + } + } + + /** + * dump out a DER object as a formatted string, in non-verbose mode + * + * @param obj the Asn1Encodable to be dumped out. + * @return the resulting string. + */ + public static string DumpAsString(Asn1Encodable obj) + { + return DumpAsString(obj, false); + } + + /** + * Dump out the object as a string + * + * @param obj the Asn1Encodable to be dumped out. + * @param verbose if true, dump out the contents of octet and bit strings. + * @return the resulting string. + */ + public static string DumpAsString(Asn1Encodable obj, bool verbose) + { + StringBuilder buf = new StringBuilder(); + AsString("", verbose, obj.ToAsn1Object(), buf); + return buf.ToString(); + } + + private static void DumpBinaryDataAsString(StringBuilder buf, string indent, byte[] bytes) + { + if (bytes.Length < 1) + return; + + indent += Tab; + + for (int i = 0; i < bytes.Length; i += SampleSize) + { + int remaining = bytes.Length - i; + int chunk = System.Math.Min(remaining, SampleSize); + + buf.Append(indent); + buf.Append(Hex.ToHexString(bytes, i, chunk)); + for (int j = chunk; j < SampleSize; ++j) + { + buf.Append(" "); + } + buf.Append(Tab); + AppendAscString(buf, bytes, i, chunk); + buf.AppendLine(); + } + } + + private static void AppendAscString(StringBuilder buf, byte[] bytes, int off, int len) + { + for (int i = off; i != off + len; i++) + { + char c = (char)bytes[i]; + if (c >= ' ' && c <= '~') + { + buf.Append(c); + } + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/util/Asn1Dump.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/util/Asn1Dump.cs.meta new file mode 100644 index 000000000..9d9c5a572 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/util/Asn1Dump.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d11a496b7c22849429b50cb347c4836e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/util/FilterStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/util/FilterStream.cs new file mode 100644 index 000000000..0454b349a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/util/FilterStream.cs @@ -0,0 +1,3 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/util/FilterStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/util/FilterStream.cs.meta new file mode 100644 index 000000000..4c3c298e1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/util/FilterStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2bdac595e49fdea498ef77f610df00fa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500.meta new file mode 100644 index 000000000..2047b9e94 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7ecc2a4f33b2c4248b350a81db15a2c3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/AttributeTypeAndValue.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/AttributeTypeAndValue.cs new file mode 100644 index 000000000..20d93f872 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/AttributeTypeAndValue.cs @@ -0,0 +1,64 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X500 +{ + /** + * Holding class for the AttributeTypeAndValue structures that make up an RDN. + */ + public class AttributeTypeAndValue + : Asn1Encodable + { + private readonly DerObjectIdentifier type; + private readonly Asn1Encodable value; + + private AttributeTypeAndValue(Asn1Sequence seq) + { + type = (DerObjectIdentifier)seq[0]; + value = seq[1]; + } + + public static AttributeTypeAndValue GetInstance(object obj) + { + if (obj is AttributeTypeAndValue) + return (AttributeTypeAndValue)obj; + if (null != obj) + return new AttributeTypeAndValue(Asn1Sequence.GetInstance(obj)); + throw new ArgumentNullException("obj"); + } + + public AttributeTypeAndValue( + DerObjectIdentifier type, + Asn1Encodable value) + { + this.type = type; + this.value = value; + } + + public virtual DerObjectIdentifier Type + { + get { return type; } + } + + public virtual Asn1Encodable Value + { + get { return value; } + } + + /** + *
+         * AttributeTypeAndValue ::= SEQUENCE {
+         *           type         OBJECT IDENTIFIER,
+         *           value        ANY DEFINED BY type }
+         * 
+ * @return a basic ASN.1 object representation. + */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(type, value); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/AttributeTypeAndValue.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/AttributeTypeAndValue.cs.meta new file mode 100644 index 000000000..b7094afdd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/AttributeTypeAndValue.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 65f29fd4ca53acc499f95b37f816cd19 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/DirectoryString.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/DirectoryString.cs new file mode 100644 index 000000000..f336f5c15 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/DirectoryString.cs @@ -0,0 +1,78 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X500 +{ + public class DirectoryString + : Asn1Encodable, IAsn1Choice, IAsn1String + { + private readonly DerStringBase str; + + public static DirectoryString GetInstance(object obj) + { + if (obj == null || obj is DirectoryString) + return (DirectoryString) obj; + + if (obj is DerStringBase) + { + if (obj is DerT61String + || obj is DerPrintableString + || obj is DerUniversalString + || obj is DerUtf8String + || obj is DerBmpString) + { + return new DirectoryString((DerStringBase) obj); + } + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public static DirectoryString GetInstance( + Asn1TaggedObject obj, + bool isExplicit) + { + if (!isExplicit) + throw new ArgumentException("choice item must be explicitly tagged"); + + return GetInstance(obj.GetObject()); + } + + private DirectoryString( + DerStringBase str) + { + this.str = str; + } + + public DirectoryString( + string str) + { + this.str = new DerUtf8String(str); + } + + public string GetString() + { + return str.GetString(); + } + + /** + *
+		 *  DirectoryString ::= CHOICE {
+		 *    teletexString               TeletexString (SIZE (1..MAX)),
+		 *    printableString             PrintableString (SIZE (1..MAX)),
+		 *    universalString             UniversalString (SIZE (1..MAX)),
+		 *    utf8String                  UTF8String (SIZE (1..MAX)),
+		 *    bmpString                   BMPString (SIZE (1..MAX))  }
+		 * 
+ */ + public override Asn1Object ToAsn1Object() + { + return str.ToAsn1Object(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/DirectoryString.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/DirectoryString.cs.meta new file mode 100644 index 000000000..2779da44c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/DirectoryString.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d4076af4d9a9dbd43ad4ee25b177aaa2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/Rdn.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/Rdn.cs new file mode 100644 index 000000000..7e4afacd0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/Rdn.cs @@ -0,0 +1,108 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X500 +{ + /** + * Holding class for a single Relative Distinguished Name (RDN). + */ + public class Rdn + : Asn1Encodable + { + private readonly Asn1Set values; + + private Rdn(Asn1Set values) + { + this.values = values; + } + + public static Rdn GetInstance(object obj) + { + if (obj is Rdn) + return (Rdn)obj; + if (null != obj) + return new Rdn(Asn1Set.GetInstance(obj)); + return null; + } + + /** + * Create a single valued RDN. + * + * @param oid RDN type. + * @param value RDN value. + */ + public Rdn(DerObjectIdentifier oid, Asn1Encodable value) + { + this.values = new DerSet(new DerSequence(oid, value)); + } + + public Rdn(AttributeTypeAndValue attrTAndV) + { + this.values = new DerSet(attrTAndV); + } + + /** + * Create a multi-valued RDN. + * + * @param aAndVs attribute type/value pairs making up the RDN + */ + public Rdn(AttributeTypeAndValue[] aAndVs) + { + this.values = new DerSet(aAndVs); + } + + public virtual bool IsMultiValued + { + get { return this.values.Count > 1; } + } + + /** + * Return the number of AttributeTypeAndValue objects in this RDN, + * + * @return size of RDN, greater than 1 if multi-valued. + */ + public virtual int Count + { + get { return this.values.Count; } + } + + public virtual AttributeTypeAndValue GetFirst() + { + if (this.values.Count == 0) + return null; + + return AttributeTypeAndValue.GetInstance(this.values[0]); + } + + public virtual AttributeTypeAndValue[] GetTypesAndValues() + { + AttributeTypeAndValue[] tmp = new AttributeTypeAndValue[values.Count]; + + for (int i = 0; i < tmp.Length; ++i) + { + tmp[i] = AttributeTypeAndValue.GetInstance(values[i]); + } + + return tmp; + } + + /** + *
+         * RelativeDistinguishedName ::=
+         *                     SET OF AttributeTypeAndValue
+
+         * AttributeTypeAndValue ::= SEQUENCE {
+         *        type     AttributeType,
+         *        value    AttributeValue }
+         * 
+ * @return this object as its ASN1Primitive type + */ + public override Asn1Object ToAsn1Object() + { + return values; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/Rdn.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/Rdn.cs.meta new file mode 100644 index 000000000..74d165a91 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/Rdn.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 767201eb1e40c2840ad7013792cf269e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/style.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/style.meta new file mode 100644 index 000000000..cff8c4f79 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/style.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ab435230d1dac724cb2dfa6753837e91 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/style/IetfUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/style/IetfUtilities.cs new file mode 100644 index 000000000..e6bc45646 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/style/IetfUtilities.cs @@ -0,0 +1,217 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X500.Style +{ + public abstract class IetfUtilities + { + public static string ValueToString(Asn1Encodable value) + { + StringBuilder vBuf = new StringBuilder(); + + if (value is IAsn1String && !(value is DerUniversalString)) + { + string v = ((IAsn1String)value).GetString(); + if (v.Length > 0 && v[0] == '#') + { + vBuf.Append('\\'); + } + + vBuf.Append(v); + } + else + { + try + { + vBuf.Append('#'); + vBuf.Append(Hex.ToHexString(value.ToAsn1Object().GetEncoded(Asn1Encodable.Der))); + } + catch (IOException e) + { + throw new ArgumentException("Other value has no encoded form", e); + } + } + + int end = vBuf.Length; + int index = 0; + + if (vBuf.Length >= 2 && vBuf[0] == '\\' && vBuf[1] == '#') + { + index += 2; + } + + while (index != end) + { + switch (vBuf[index]) + { + case ',': + case '"': + case '\\': + case '+': + case '=': + case '<': + case '>': + case ';': + { + vBuf.Insert(index, "\\"); + index += 2; + ++end; + break; + } + default: + { + ++index; + break; + } + } + } + + int start = 0; + if (vBuf.Length > 0) + { + while (vBuf.Length > start && vBuf[start] == ' ') + { + vBuf.Insert(start, "\\"); + start += 2; + } + } + + int endBuf = vBuf.Length - 1; + + while (endBuf >= 0 && vBuf[endBuf] == ' ') + { + vBuf.Insert(endBuf, "\\"); + endBuf--; + } + + return vBuf.ToString(); + } + + public static string Canonicalize(string s) + { + string value = s.ToLowerInvariant(); + + if (value.Length > 0 && value[0] == '#') + { + Asn1Object obj = DecodeObject(value); + + if (obj is IAsn1String str) + { + value = str.GetString().ToLowerInvariant(); + } + } + + if (value.Length > 1) + { + int start = 0; + while (start + 1 < value.Length && value[start] == '\\' && value[start + 1] == ' ') + { + start += 2; + } + + int end = value.Length - 1; + while (end - 1 > 0 && value[end - 1] == '\\' && value[end] == ' ') + { + end -= 2; + } + + if (start > 0 || end < value.Length - 1) + { + value = value.Substring(start, end + 1 - start); + } + } + + return StripInternalSpaces(value); + } + + public static string CanonicalString(Asn1Encodable value) + { + return Canonicalize(ValueToString(value)); + } + + private static Asn1Object DecodeObject(string oValue) + { + try + { + return Asn1Object.FromByteArray(Hex.DecodeStrict(oValue, 1, oValue.Length - 1)); + } + catch (IOException e) + { + throw new InvalidOperationException("unknown encoding in name: " + e); + } + } + + public static string StripInternalSpaces(string str) + { + if (str.IndexOf(" ") < 0) + return str; + + StringBuilder res = new StringBuilder(); + + char c1 = str[0]; + res.Append(c1); + + for (int k = 1; k < str.Length; k++) + { + char c2 = str[k]; + if (!(' ' == c1 && ' ' == c2)) + { + res.Append(c2); + c1 = c2; + } + } + + return res.ToString(); + } + + public static bool RdnAreEqual(Rdn rdn1, Rdn rdn2) + { + if (rdn1.Count != rdn2.Count) + return false; + + AttributeTypeAndValue[] atvs1 = rdn1.GetTypesAndValues(); + AttributeTypeAndValue[] atvs2 = rdn2.GetTypesAndValues(); + + if (atvs1.Length != atvs2.Length) + return false; + + for (int i = 0; i != atvs1.Length; i++) + { + if (!AtvAreEqual(atvs1[i], atvs2[i])) + return false; + } + + return true; + } + + private static bool AtvAreEqual(AttributeTypeAndValue atv1, AttributeTypeAndValue atv2) + { + if (atv1 == atv2) + return true; + if (null == atv1 || null == atv2) + return false; + + DerObjectIdentifier o1 = atv1.Type; + DerObjectIdentifier o2 = atv2.Type; + + if (!o1.Equals(o2)) + return false; + + string v1 = CanonicalString(atv1.Value); + string v2 = CanonicalString(atv2.Value); + + if (!v1.Equals(v2)) + return false; + + return true; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/style/IetfUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/style/IetfUtilities.cs.meta new file mode 100644 index 000000000..660d92400 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x500/style/IetfUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 399e41db22442a04a817d182655edb52 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509.meta new file mode 100644 index 000000000..a8647b30f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6326d041839c09a43bfda92c6aef7274 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AccessDescription.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AccessDescription.cs new file mode 100644 index 000000000..3ac4ef775 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AccessDescription.cs @@ -0,0 +1,89 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * The AccessDescription object. + *
+	 * AccessDescription  ::=  SEQUENCE {
+	 *       accessMethod          OBJECT IDENTIFIER,
+	 *       accessLocation        GeneralName  }
+	 * 
+ */ + public class AccessDescription + : Asn1Encodable + { + public readonly static DerObjectIdentifier IdADCAIssuers = new DerObjectIdentifier("1.3.6.1.5.5.7.48.2"); + public readonly static DerObjectIdentifier IdADOcsp = new DerObjectIdentifier("1.3.6.1.5.5.7.48.1"); + + private readonly DerObjectIdentifier accessMethod; + private readonly GeneralName accessLocation; + + public static AccessDescription GetInstance( + object obj) + { + if (obj is AccessDescription) + return (AccessDescription) obj; + + if (obj is Asn1Sequence) + return new AccessDescription((Asn1Sequence) obj); + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + private AccessDescription( + Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("wrong number of elements in sequence"); + + accessMethod = DerObjectIdentifier.GetInstance(seq[0]); + accessLocation = GeneralName.GetInstance(seq[1]); + } + + /** + * create an AccessDescription with the oid and location provided. + */ + public AccessDescription( + DerObjectIdentifier oid, + GeneralName location) + { + accessMethod = oid; + accessLocation = location; + } + + /** + * + * @return the access method. + */ + public DerObjectIdentifier AccessMethod + { + get { return accessMethod; } + } + + /** + * + * @return the access location + */ + public GeneralName AccessLocation + { + get { return accessLocation; } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(accessMethod, accessLocation); + } + + public override string ToString() + { + return "AccessDescription: Oid(" + this.accessMethod.Id + ")"; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AccessDescription.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AccessDescription.cs.meta new file mode 100644 index 000000000..40b5b4d51 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AccessDescription.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a289fcf7677caaf4dbdf264ebff8340a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AlgorithmIdentifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AlgorithmIdentifier.cs new file mode 100644 index 000000000..7be464367 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AlgorithmIdentifier.cs @@ -0,0 +1,87 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class AlgorithmIdentifier + : Asn1Encodable + { + private readonly DerObjectIdentifier algorithm; + private readonly Asn1Encodable parameters; + + public static AlgorithmIdentifier GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static AlgorithmIdentifier GetInstance( + object obj) + { + if (obj == null) + return null; + if (obj is AlgorithmIdentifier) + return (AlgorithmIdentifier)obj; + return new AlgorithmIdentifier(Asn1Sequence.GetInstance(obj)); + } + + public AlgorithmIdentifier( + DerObjectIdentifier algorithm) + { + this.algorithm = algorithm; + } + + public AlgorithmIdentifier( + DerObjectIdentifier algorithm, + Asn1Encodable parameters) + { + this.algorithm = algorithm; + this.parameters = parameters; + } + + internal AlgorithmIdentifier( + Asn1Sequence seq) + { + if (seq.Count < 1 || seq.Count > 2) + throw new ArgumentException("Bad sequence size: " + seq.Count); + + this.algorithm = DerObjectIdentifier.GetInstance(seq[0]); + this.parameters = seq.Count < 2 ? null : seq[1]; + } + + /// + /// Return the OID in the Algorithm entry of this identifier. + /// + public virtual DerObjectIdentifier Algorithm + { + get { return algorithm; } + } + + /// + /// Return the parameters structure in the Parameters entry of this identifier. + /// + public virtual Asn1Encodable Parameters + { + get { return parameters; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         *      AlgorithmIdentifier ::= Sequence {
+         *                            algorithm OBJECT IDENTIFIER,
+         *                            parameters ANY DEFINED BY algorithm OPTIONAL }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(algorithm); + v.AddOptional(parameters); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AlgorithmIdentifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AlgorithmIdentifier.cs.meta new file mode 100644 index 000000000..2d2807ca6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AlgorithmIdentifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8ca01d5013f07794b9fd040bfd8dc6b1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttCertIssuer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttCertIssuer.cs new file mode 100644 index 000000000..6973bde26 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttCertIssuer.cs @@ -0,0 +1,90 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class AttCertIssuer + : Asn1Encodable, IAsn1Choice + { + internal readonly Asn1Encodable obj; + internal readonly Asn1Object choiceObj; + + public static AttCertIssuer GetInstance( + object obj) + { + if (obj is AttCertIssuer) + { + return (AttCertIssuer)obj; + } + else if (obj is V2Form) + { + return new AttCertIssuer(V2Form.GetInstance(obj)); + } + else if (obj is GeneralNames) + { + return new AttCertIssuer((GeneralNames)obj); + } + else if (obj is Asn1TaggedObject) + { + return new AttCertIssuer(V2Form.GetInstance((Asn1TaggedObject)obj, false)); + } + else if (obj is Asn1Sequence) + { + return new AttCertIssuer(GeneralNames.GetInstance(obj)); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public static AttCertIssuer GetInstance( + Asn1TaggedObject obj, + bool isExplicit) + { + return GetInstance(obj.GetObject()); // must be explictly tagged + } + + /// + /// Don't use this one if you are trying to be RFC 3281 compliant. + /// Use it for v1 attribute certificates only. + /// + /// Our GeneralNames structure + public AttCertIssuer( + GeneralNames names) + { + obj = names; + choiceObj = obj.ToAsn1Object(); + } + + public AttCertIssuer( + V2Form v2Form) + { + obj = v2Form; + choiceObj = new DerTaggedObject(false, 0, obj); + } + + public Asn1Encodable Issuer + { + get { return obj; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         *  AttCertIssuer ::= CHOICE {
+         *       v1Form   GeneralNames,  -- MUST NOT be used in this
+         *                               -- profile
+         *       v2Form   [0] V2Form     -- v2 only
+         *  }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return choiceObj; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttCertIssuer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttCertIssuer.cs.meta new file mode 100644 index 000000000..b906b0c41 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttCertIssuer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f409a35c3f3abe44d9a6df60abf74aa4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttCertValidityPeriod.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttCertValidityPeriod.cs new file mode 100644 index 000000000..25504888b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttCertValidityPeriod.cs @@ -0,0 +1,82 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class AttCertValidityPeriod + : Asn1Encodable + { + private readonly Asn1GeneralizedTime notBeforeTime; + private readonly Asn1GeneralizedTime notAfterTime; + + public static AttCertValidityPeriod GetInstance( + object obj) + { + if (obj is AttCertValidityPeriod || obj == null) + { + return (AttCertValidityPeriod) obj; + } + + if (obj is Asn1Sequence) + { + return new AttCertValidityPeriod((Asn1Sequence) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public static AttCertValidityPeriod GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + private AttCertValidityPeriod( + Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Bad sequence size: " + seq.Count); + + notBeforeTime = Asn1GeneralizedTime.GetInstance(seq[0]); + notAfterTime = Asn1GeneralizedTime.GetInstance(seq[1]); + } + + public AttCertValidityPeriod( + Asn1GeneralizedTime notBeforeTime, + Asn1GeneralizedTime notAfterTime) + { + this.notBeforeTime = notBeforeTime; + this.notAfterTime = notAfterTime; + } + + public Asn1GeneralizedTime NotBeforeTime + { + get { return notBeforeTime; } + } + + public Asn1GeneralizedTime NotAfterTime + { + get { return notAfterTime; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         *  AttCertValidityPeriod  ::= Sequence {
+         *       notBeforeTime  GeneralizedTime,
+         *       notAfterTime   GeneralizedTime
+         *  }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(notBeforeTime, notAfterTime); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttCertValidityPeriod.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttCertValidityPeriod.cs.meta new file mode 100644 index 000000000..9fdfea687 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttCertValidityPeriod.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ded3eb9027f3df4298ed5c4d7734401 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Attribute.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Attribute.cs new file mode 100644 index 000000000..578bcd8a9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Attribute.cs @@ -0,0 +1,86 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class AttributeX509 + : Asn1Encodable + { + private readonly DerObjectIdentifier attrType; + private readonly Asn1Set attrValues; + + /** + * return an Attr object from the given object. + * + * @param o the object we want converted. + * @exception ArgumentException if the object cannot be converted. + */ + public static AttributeX509 GetInstance( + object obj) + { + if (obj == null || obj is AttributeX509) + { + return (AttributeX509) obj; + } + + if (obj is Asn1Sequence) + { + return new AttributeX509((Asn1Sequence) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + private AttributeX509( + Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Bad sequence size: " + seq.Count); + + attrType = DerObjectIdentifier.GetInstance(seq[0]); + attrValues = Asn1Set.GetInstance(seq[1]); + } + + public AttributeX509( + DerObjectIdentifier attrType, + Asn1Set attrValues) + { + this.attrType = attrType; + this.attrValues = attrValues; + } + + public DerObjectIdentifier AttrType + { + get { return attrType; } + } + + public Asn1Encodable[] GetAttributeValues() + { + return attrValues.ToArray(); + } + + public Asn1Set AttrValues + { + get { return attrValues; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * Attr ::= Sequence {
+         *     attrType OBJECT IDENTIFIER,
+         *     attrValues Set OF AttributeValue
+         * }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(attrType, attrValues); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Attribute.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Attribute.cs.meta new file mode 100644 index 000000000..b7e0c35f0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Attribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d51095bedbf8dd4ab263f1b3ae1e852 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttributeCertificate.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttributeCertificate.cs new file mode 100644 index 000000000..a65137d1e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttributeCertificate.cs @@ -0,0 +1,90 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class AttributeCertificate + : Asn1Encodable + { + private readonly AttributeCertificateInfo acinfo; + private readonly AlgorithmIdentifier signatureAlgorithm; + private readonly DerBitString signatureValue; + + /** + * @param obj + * @return + */ + public static AttributeCertificate GetInstance( + object obj) + { + if (obj is AttributeCertificate) + return (AttributeCertificate) obj; + + if (obj != null) + return new AttributeCertificate(Asn1Sequence.GetInstance(obj)); + + return null; + } + + public AttributeCertificate( + AttributeCertificateInfo acinfo, + AlgorithmIdentifier signatureAlgorithm, + DerBitString signatureValue) + { + this.acinfo = acinfo; + this.signatureAlgorithm = signatureAlgorithm; + this.signatureValue = signatureValue; + } + + private AttributeCertificate( + Asn1Sequence seq) + { + if (seq.Count != 3) + throw new ArgumentException("Bad sequence size: " + seq.Count); + + this.acinfo = AttributeCertificateInfo.GetInstance(seq[0]); + this.signatureAlgorithm = AlgorithmIdentifier.GetInstance(seq[1]); + this.signatureValue = DerBitString.GetInstance(seq[2]); + } + + public AttributeCertificateInfo ACInfo + { + get { return acinfo; } + } + + public AlgorithmIdentifier SignatureAlgorithm + { + get { return signatureAlgorithm; } + } + + public DerBitString SignatureValue + { + get { return signatureValue; } + } + + public byte[] GetSignatureOctets() + { + return signatureValue.GetOctets(); + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         *  AttributeCertificate ::= Sequence {
+         *       acinfo               AttributeCertificateInfo,
+         *       signatureAlgorithm   AlgorithmIdentifier,
+         *       signatureValue       BIT STRING
+         *  }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(acinfo, signatureAlgorithm, signatureValue); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttributeCertificate.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttributeCertificate.cs.meta new file mode 100644 index 000000000..2eb1f4339 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttributeCertificate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6cbd2ac468cff674a9165158e8a053c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttributeCertificateInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttributeCertificateInfo.cs new file mode 100644 index 000000000..8390d8687 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttributeCertificateInfo.cs @@ -0,0 +1,167 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class AttributeCertificateInfo + : Asn1Encodable + { + internal readonly DerInteger version; + internal readonly Holder holder; + internal readonly AttCertIssuer issuer; + internal readonly AlgorithmIdentifier signature; + internal readonly DerInteger serialNumber; + internal readonly AttCertValidityPeriod attrCertValidityPeriod; + internal readonly Asn1Sequence attributes; + internal readonly DerBitString issuerUniqueID; + internal readonly X509Extensions extensions; + + public static AttributeCertificateInfo GetInstance( + Asn1TaggedObject obj, + bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit)); + } + + public static AttributeCertificateInfo GetInstance( + object obj) + { + if (obj is AttributeCertificateInfo) + { + return (AttributeCertificateInfo) obj; + } + + if (obj is Asn1Sequence) + { + return new AttributeCertificateInfo((Asn1Sequence) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + private AttributeCertificateInfo( + Asn1Sequence seq) + { + if (seq.Count < 6 || seq.Count > 9) + { + throw new ArgumentException("Bad sequence size: " + seq.Count); + } + + int start; + if (seq[0] is DerInteger) // in version 1 certs version is DEFAULT v1(0) + { + this.version = DerInteger.GetInstance(seq[0]); + start = 1; + } + else + { + this.version = new DerInteger(0); + start = 0; + } + + this.holder = Holder.GetInstance(seq[start]); + this.issuer = AttCertIssuer.GetInstance(seq[start + 1]); + this.signature = AlgorithmIdentifier.GetInstance(seq[start + 2]); + this.serialNumber = DerInteger.GetInstance(seq[start + 3]); + this.attrCertValidityPeriod = AttCertValidityPeriod.GetInstance(seq[start + 4]); + this.attributes = Asn1Sequence.GetInstance(seq[start + 5]); + + for (int i = start + 6; i < seq.Count; i++) + { + Asn1Encodable obj = (Asn1Encodable) seq[i]; + + if (obj is DerBitString) + { + this.issuerUniqueID = DerBitString.GetInstance(seq[i]); + } + else if (obj is Asn1Sequence || obj is X509Extensions) + { + this.extensions = X509Extensions.GetInstance(seq[i]); + } + } + } + + public DerInteger Version + { + get { return version; } + } + + public Holder Holder + { + get { return holder; } + } + + public AttCertIssuer Issuer + { + get { return issuer; } + } + + public AlgorithmIdentifier Signature + { + get { return signature; } + } + + public DerInteger SerialNumber + { + get { return serialNumber; } + } + + public AttCertValidityPeriod AttrCertValidityPeriod + { + get { return attrCertValidityPeriod; } + } + + public Asn1Sequence Attributes + { + get { return attributes; } + } + + public DerBitString IssuerUniqueID + { + get { return issuerUniqueID; } + } + + public X509Extensions Extensions + { + get { return extensions; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         *  AttributeCertificateInfo ::= Sequence {
+         *       version              AttCertVersion -- version is v2,
+         *       holder               Holder,
+         *       issuer               AttCertIssuer,
+         *       signature            AlgorithmIdentifier,
+         *       serialNumber         CertificateSerialNumber,
+         *       attrCertValidityPeriod   AttCertValidityPeriod,
+         *       attributes           Sequence OF Attr,
+         *       issuerUniqueID       UniqueIdentifier OPTIONAL,
+         *       extensions           Extensions OPTIONAL
+         *  }
+         *
+         *  AttCertVersion ::= Integer { v2(1) }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(9); + + if (!version.HasValue(0)) + { + v.Add(version); + } + + v.Add(holder, issuer, signature, serialNumber, attrCertValidityPeriod, attributes); + v.AddOptional(issuerUniqueID, extensions); + + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttributeCertificateInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttributeCertificateInfo.cs.meta new file mode 100644 index 000000000..e33165ce2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttributeCertificateInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 63d26bd8566a0e444863a2c776d68b81 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttributeTable.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttributeTable.cs new file mode 100644 index 000000000..5d7f921b6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttributeTable.cs @@ -0,0 +1,54 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class AttributeTable + { + private readonly IDictionary m_attributes; + + public AttributeTable(IDictionary attrs) + { + m_attributes = new Dictionary(attrs); + } + + public AttributeTable(Asn1EncodableVector v) + { + m_attributes = new Dictionary(v.Count); + + for (int i = 0; i != v.Count; i++) + { + AttributeX509 a = AttributeX509.GetInstance(v[i]); + + m_attributes.Add(a.AttrType, a); + } + } + + public AttributeTable(Asn1Set s) + { + m_attributes = new Dictionary(s.Count); + + for (int i = 0; i != s.Count; i++) + { + AttributeX509 a = AttributeX509.GetInstance(s[i]); + + m_attributes.Add(a.AttrType, a); + } + } + + public AttributeX509 Get(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(m_attributes, oid); + } + + public IDictionary ToDictionary() + { + return new Dictionary(m_attributes); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttributeTable.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttributeTable.cs.meta new file mode 100644 index 000000000..f80ffd110 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AttributeTable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 29d365c75d2a2cd4584d446081c01294 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AuthorityInformationAccess.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AuthorityInformationAccess.cs new file mode 100644 index 000000000..9a9a0e3d3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AuthorityInformationAccess.cs @@ -0,0 +1,111 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * The AuthorityInformationAccess object. + *
+     * id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
+     *
+     * AuthorityInfoAccessSyntax  ::=
+     *      Sequence SIZE (1..MAX) OF AccessDescription
+     * AccessDescription  ::=  Sequence {
+     *       accessMethod          OBJECT IDENTIFIER,
+     *       accessLocation        GeneralName  }
+     *
+     * id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
+     * id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
+     * id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
+     * 
+ */ + public class AuthorityInformationAccess + : Asn1Encodable + { + private static AccessDescription[] Copy(AccessDescription[] descriptions) + { + return (AccessDescription[])descriptions.Clone(); + } + + public static AuthorityInformationAccess GetInstance(object obj) + { + if (obj is AuthorityInformationAccess) + return (AuthorityInformationAccess)obj; + if (obj == null) + return null; + return new AuthorityInformationAccess(Asn1Sequence.GetInstance(obj)); + } + + public static AuthorityInformationAccess FromExtensions(X509Extensions extensions) + { + return GetInstance(X509Extensions.GetExtensionParsedValue(extensions, X509Extensions.AuthorityInfoAccess)); + } + + private readonly AccessDescription[] descriptions; + + private AuthorityInformationAccess( + Asn1Sequence seq) + { + if (seq.Count < 1) + throw new ArgumentException("sequence may not be empty"); + + this.descriptions = new AccessDescription[seq.Count]; + + for (int i = 0; i < seq.Count; ++i) + { + descriptions[i] = AccessDescription.GetInstance(seq[i]); + } + } + + public AuthorityInformationAccess( + AccessDescription description) + { + this.descriptions = new AccessDescription[]{ description }; + } + + public AuthorityInformationAccess( + AccessDescription[] descriptions) + { + this.descriptions = Copy(descriptions); + } + + /** + * create an AuthorityInformationAccess with the oid and location provided. + */ + public AuthorityInformationAccess(DerObjectIdentifier oid, GeneralName location) + : this(new AccessDescription(oid, location)) + { + } + + public AccessDescription[] GetAccessDescriptions() + { + return Copy(descriptions); + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(descriptions); + } + + public override string ToString() + { + //return "AuthorityInformationAccess: Oid(" + this.descriptions[0].AccessMethod.Id + ")"; + + StringBuilder buf = new StringBuilder(); + buf.AppendLine("AuthorityInformationAccess:"); + foreach (AccessDescription description in descriptions) + { + buf.Append(" ") + .Append(description) + .AppendLine(); + } + return buf.ToString(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AuthorityInformationAccess.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AuthorityInformationAccess.cs.meta new file mode 100644 index 000000000..ceb59fd40 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AuthorityInformationAccess.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1601bbf3e05b8d8448bf4eb122f4bb52 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AuthorityKeyIdentifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AuthorityKeyIdentifier.cs new file mode 100644 index 000000000..9be21630d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AuthorityKeyIdentifier.cs @@ -0,0 +1,187 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * The AuthorityKeyIdentifier object. + *
+     * id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 35 }
+     *
+     *   AuthorityKeyIdentifier ::= Sequence {
+     *      keyIdentifier             [0] IMPLICIT KeyIdentifier           OPTIONAL,
+     *      authorityCertIssuer       [1] IMPLICIT GeneralNames            OPTIONAL,
+     *      authorityCertSerialNumber [2] IMPLICIT CertificateSerialNumber OPTIONAL  }
+     *
+     *   KeyIdentifier ::= OCTET STRING
+     * 
+ * + */ + public class AuthorityKeyIdentifier + : Asn1Encodable + { + public static AuthorityKeyIdentifier GetInstance(Asn1TaggedObject obj, bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static AuthorityKeyIdentifier GetInstance(object obj) + { + if (obj is AuthorityKeyIdentifier) + return (AuthorityKeyIdentifier)obj; + if (obj is X509Extension) + return GetInstance(X509Extension.ConvertValueToObject((X509Extension)obj)); + if (obj == null) + return null; + return new AuthorityKeyIdentifier(Asn1Sequence.GetInstance(obj)); + } + + public static AuthorityKeyIdentifier FromExtensions(X509Extensions extensions) + { + return GetInstance(X509Extensions.GetExtensionParsedValue(extensions, X509Extensions.AuthorityKeyIdentifier)); + } + + private readonly Asn1OctetString keyidentifier; + private readonly GeneralNames certissuer; + private readonly DerInteger certserno; + + protected internal AuthorityKeyIdentifier( + Asn1Sequence seq) + { + foreach (Asn1Encodable element in seq) + { + Asn1TaggedObject obj = Asn1TaggedObject.GetInstance(element); + + switch (obj.TagNo) + { + case 0: + this.keyidentifier = Asn1OctetString.GetInstance(obj, false); + break; + case 1: + this.certissuer = GeneralNames.GetInstance(obj, false); + break; + case 2: + this.certserno = DerInteger.GetInstance(obj, false); + break; + default: + throw new ArgumentException("illegal tag"); + } + } + } + + /** + * + * Calulates the keyidentifier using a SHA1 hash over the BIT STRING + * from SubjectPublicKeyInfo as defined in RFC2459. + * + * Example of making a AuthorityKeyIdentifier: + *
+	     *   SubjectPublicKeyInfo apki = new SubjectPublicKeyInfo((ASN1Sequence)new ASN1InputStream(
+		 *       publicKey.getEncoded()).readObject());
+         *   AuthorityKeyIdentifier aki = new AuthorityKeyIdentifier(apki);
+         * 
+ * + **/ + public AuthorityKeyIdentifier( + SubjectPublicKeyInfo spki) + : this(spki, null, null) + { + } + + /** + * create an AuthorityKeyIdentifier with the GeneralNames tag and + * the serial number provided as well. + */ + public AuthorityKeyIdentifier( + SubjectPublicKeyInfo spki, + GeneralNames name, + BigInteger serialNumber) + { + IDigest digest = new Sha1Digest(); + byte[] resBuf = new byte[digest.GetDigestSize()]; + byte[] bytes = spki.PublicKeyData.GetBytes(); + digest.BlockUpdate(bytes, 0, bytes.Length); + digest.DoFinal(resBuf, 0); + + this.keyidentifier = new DerOctetString(resBuf); + this.certissuer = name; + this.certserno = serialNumber == null ? null : new DerInteger(serialNumber); + } + + /** + * create an AuthorityKeyIdentifier with the GeneralNames tag and + * the serial number provided. + */ + public AuthorityKeyIdentifier( + GeneralNames name, + BigInteger serialNumber) + : this((byte[])null, name, serialNumber) + { + } + + /** + * create an AuthorityKeyIdentifier with a precomputed key identifier + */ + public AuthorityKeyIdentifier( + byte[] keyIdentifier) + : this(keyIdentifier, null, null) + { + } + + /** + * create an AuthorityKeyIdentifier with a precomupted key identifier + * and the GeneralNames tag and the serial number provided as well. + */ + public AuthorityKeyIdentifier( + byte[] keyIdentifier, + GeneralNames name, + BigInteger serialNumber) + { + this.keyidentifier = keyIdentifier == null ? null : new DerOctetString(keyIdentifier); + this.certissuer = name; + this.certserno = serialNumber == null ? null : new DerInteger(serialNumber); + } + + public byte[] GetKeyIdentifier() + { + return keyidentifier == null ? null : keyidentifier.GetOctets(); + } + + public GeneralNames AuthorityCertIssuer + { + get { return certissuer; } + } + + public BigInteger AuthorityCertSerialNumber + { + get { return certserno == null ? null : certserno.Value; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptionalTagged(false, 0, keyidentifier); + v.AddOptionalTagged(false, 1, certissuer); + v.AddOptionalTagged(false, 2, certserno); + return new DerSequence(v); + } + + public override string ToString() + { + string keyID = (keyidentifier != null) ? Hex.ToHexString(keyidentifier.GetOctets()) : "null"; + + return "AuthorityKeyIdentifier: KeyID(" + keyID + ")"; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AuthorityKeyIdentifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AuthorityKeyIdentifier.cs.meta new file mode 100644 index 000000000..a2ac5b840 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/AuthorityKeyIdentifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 092245cc8fba2f8429f6e2f39dc497a8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/BasicConstraints.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/BasicConstraints.cs new file mode 100644 index 000000000..03f7bb30b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/BasicConstraints.cs @@ -0,0 +1,121 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class BasicConstraints + : Asn1Encodable + { + public static BasicConstraints GetInstance(Asn1TaggedObject obj, bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static BasicConstraints GetInstance(object obj) + { + if (obj is BasicConstraints) + return (BasicConstraints)obj; + if (obj is X509Extension) + return GetInstance(X509Extension.ConvertValueToObject((X509Extension)obj)); + if (obj == null) + return null; + return new BasicConstraints(Asn1Sequence.GetInstance(obj)); + } + + public static BasicConstraints FromExtensions(X509Extensions extensions) + { + return GetInstance(X509Extensions.GetExtensionParsedValue(extensions, X509Extensions.BasicConstraints)); + } + + private readonly DerBoolean cA; + private readonly DerInteger pathLenConstraint; + + private BasicConstraints( + Asn1Sequence seq) + { + if (seq.Count > 0) + { + if (seq[0] is DerBoolean) + { + this.cA = DerBoolean.GetInstance(seq[0]); + } + else + { + this.pathLenConstraint = DerInteger.GetInstance(seq[0]); + } + + if (seq.Count > 1) + { + if (this.cA == null) + throw new ArgumentException("wrong sequence in constructor", "seq"); + + this.pathLenConstraint = DerInteger.GetInstance(seq[1]); + } + } + } + + public BasicConstraints( + bool cA) + { + if (cA) + { + this.cA = DerBoolean.True; + } + } + + /** + * create a cA=true object for the given path length constraint. + * + * @param pathLenConstraint + */ + public BasicConstraints( + int pathLenConstraint) + { + this.cA = DerBoolean.True; + this.pathLenConstraint = new DerInteger(pathLenConstraint); + } + + public bool IsCA() + { + return cA != null && cA.IsTrue; + } + + public BigInteger PathLenConstraint + { + get { return pathLenConstraint == null ? null : pathLenConstraint.Value; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * BasicConstraints := Sequence {
+         *    cA                  Boolean DEFAULT FALSE,
+         *    pathLenConstraint   Integer (0..MAX) OPTIONAL
+         * }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(2); + v.AddOptional(cA, + pathLenConstraint); // yes some people actually do this when cA is false... + return new DerSequence(v); + } + + public override string ToString() + { + if (pathLenConstraint == null) + { + return "BasicConstraints: isCa(" + this.IsCA() + ")"; + } + + return "BasicConstraints: isCa(" + this.IsCA() + "), pathLenConstraint = " + pathLenConstraint.Value; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/BasicConstraints.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/BasicConstraints.cs.meta new file mode 100644 index 000000000..ec2c5a295 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/BasicConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8d7502b6f25d26e42b47b45c612ce45c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CRLDistPoint.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CRLDistPoint.cs new file mode 100644 index 000000000..b8b2e7ac5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CRLDistPoint.cs @@ -0,0 +1,89 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class CrlDistPoint + : Asn1Encodable + { + public static CrlDistPoint GetInstance(Asn1TaggedObject obj, bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static CrlDistPoint GetInstance(object obj) + { + if (obj is CrlDistPoint) + return (CrlDistPoint)obj; + if (obj == null) + return null; + return new CrlDistPoint(Asn1Sequence.GetInstance(obj)); + } + + public static CrlDistPoint FromExtensions(X509Extensions extensions) + { + return GetInstance(X509Extensions.GetExtensionParsedValue(extensions, X509Extensions.CrlDistributionPoints)); + } + + internal readonly Asn1Sequence seq; + + private CrlDistPoint( + Asn1Sequence seq) + { + this.seq = seq; + } + + public CrlDistPoint( + DistributionPoint[] points) + { + seq = new DerSequence(points); + } + + /** + * Return the distribution points making up the sequence. + * + * @return DistributionPoint[] + */ + public DistributionPoint[] GetDistributionPoints() + { + DistributionPoint[] dp = new DistributionPoint[seq.Count]; + + for (int i = 0; i != seq.Count; ++i) + { + dp[i] = DistributionPoint.GetInstance(seq[i]); + } + + return dp; + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * CrlDistPoint ::= Sequence SIZE {1..MAX} OF DistributionPoint
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return seq; + } + + public override string ToString() + { + StringBuilder buf = new StringBuilder(); + buf.AppendLine("CRLDistPoint:"); + foreach (DistributionPoint dp in GetDistributionPoints()) + { + buf.Append(" ") + .Append(dp) + .AppendLine(); + } + return buf.ToString(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CRLDistPoint.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CRLDistPoint.cs.meta new file mode 100644 index 000000000..ec295a94c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CRLDistPoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 76f76b96a0c72084eb8684b7076c3b0c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CRLNumber.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CRLNumber.cs new file mode 100644 index 000000000..d2192dfc2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CRLNumber.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * The CRLNumber object. + *
+     * CRLNumber::= Integer(0..MAX)
+     * 
+ */ + public class CrlNumber + : DerInteger + { + public CrlNumber( + BigInteger number) + : base(number) + { + } + + public BigInteger Number + { + get { return PositiveValue; } + } + + public override string ToString() + { + return "CRLNumber: " + Number; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CRLNumber.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CRLNumber.cs.meta new file mode 100644 index 000000000..edcbbefa9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CRLNumber.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71369486ad637924399ae4b4f3b0cdb8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CRLReason.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CRLReason.cs new file mode 100644 index 000000000..efd1b98ae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CRLReason.cs @@ -0,0 +1,64 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * The CRLReason enumeration. + *
+     * CRLReason ::= Enumerated {
+     *  unspecified             (0),
+     *  keyCompromise           (1),
+     *  cACompromise            (2),
+     *  affiliationChanged      (3),
+     *  superseded              (4),
+     *  cessationOfOperation    (5),
+     *  certificateHold         (6),
+     *  removeFromCRL           (8),
+     *  privilegeWithdrawn      (9),
+     *  aACompromise           (10)
+     * }
+     * 
+ */ + public class CrlReason + : DerEnumerated + { + public const int Unspecified = 0; + public const int KeyCompromise = 1; + public const int CACompromise = 2; + public const int AffiliationChanged = 3; + public const int Superseded = 4; + public const int CessationOfOperation = 5; + public const int CertificateHold = 6; + // 7 -> Unknown + public const int RemoveFromCrl = 8; + public const int PrivilegeWithdrawn = 9; + public const int AACompromise = 10; + + private static readonly string[] ReasonString = new string[] + { + "Unspecified", "KeyCompromise", "CACompromise", "AffiliationChanged", + "Superseded", "CessationOfOperation", "CertificateHold", "Unknown", + "RemoveFromCrl", "PrivilegeWithdrawn", "AACompromise" + }; + + public CrlReason( + int reason) + : base(reason) + { + } + + public CrlReason(DerEnumerated reason) + : base(reason.IntValueExact) + { + } + + public override string ToString() + { + int reason = IntValueExact; + string str = (reason < 0 || reason > 10) ? "Invalid" : ReasonString[reason]; + return "CrlReason: " + str; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CRLReason.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CRLReason.cs.meta new file mode 100644 index 000000000..b9b4f826e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CRLReason.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c68d2f8100a5066489c0646ae5387d53 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertPolicyId.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertPolicyId.cs new file mode 100644 index 000000000..a576aaa2a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertPolicyId.cs @@ -0,0 +1,24 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * CertPolicyId, used in the CertificatePolicies and PolicyMappings + * X509V3 Extensions. + * + *
+     *     CertPolicyId ::= OBJECT IDENTIFIER
+     * 
+ */ + public class CertPolicyID + : DerObjectIdentifier + { + public CertPolicyID( + string id) + : base(id) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertPolicyId.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertPolicyId.cs.meta new file mode 100644 index 000000000..4acc5972f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertPolicyId.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f829275b09327e742be901d4f2ff5678 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertificateList.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertificateList.cs new file mode 100644 index 000000000..e2f65094a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertificateList.cs @@ -0,0 +1,115 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * PKIX RFC-2459 + * + * The X.509 v2 CRL syntax is as follows. For signature calculation, + * the data that is to be signed is ASN.1 Der encoded. + * + *
+     * CertificateList  ::=  Sequence  {
+     *      tbsCertList          TbsCertList,
+     *      signatureAlgorithm   AlgorithmIdentifier,
+     *      signatureValue       BIT STRING  }
+     * 
+ */ + public class CertificateList + : Asn1Encodable + { + private readonly TbsCertificateList tbsCertList; + private readonly AlgorithmIdentifier sigAlgID; + private readonly DerBitString sig; + + public static CertificateList GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static CertificateList GetInstance( + object obj) + { + if (obj is CertificateList) + return (CertificateList) obj; + + if (obj != null) + return new CertificateList(Asn1Sequence.GetInstance(obj)); + + return null; + } + + private CertificateList( + Asn1Sequence seq) + { + if (seq.Count != 3) + throw new ArgumentException("sequence wrong size for CertificateList", "seq"); + + tbsCertList = TbsCertificateList.GetInstance(seq[0]); + sigAlgID = AlgorithmIdentifier.GetInstance(seq[1]); + sig = DerBitString.GetInstance(seq[2]); + } + + public TbsCertificateList TbsCertList + { + get { return tbsCertList; } + } + + public CrlEntry[] GetRevokedCertificates() + { + return tbsCertList.GetRevokedCertificates(); + } + + public IEnumerable GetRevokedCertificateEnumeration() + { + return tbsCertList.GetRevokedCertificateEnumeration(); + } + + public AlgorithmIdentifier SignatureAlgorithm + { + get { return sigAlgID; } + } + + public DerBitString Signature + { + get { return sig; } + } + + public byte[] GetSignatureOctets() + { + return sig.GetOctets(); + } + + public int Version + { + get { return tbsCertList.Version; } + } + + public X509Name Issuer + { + get { return tbsCertList.Issuer; } + } + + public Time ThisUpdate + { + get { return tbsCertList.ThisUpdate; } + } + + public Time NextUpdate + { + get { return tbsCertList.NextUpdate; } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(tbsCertList, sigAlgID, sig); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertificateList.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertificateList.cs.meta new file mode 100644 index 000000000..44f82ba41 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertificateList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3e7c40fd85c424458bbf921ec3a90d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertificatePair.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertificatePair.cs new file mode 100644 index 000000000..66cb3f814 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertificatePair.cs @@ -0,0 +1,157 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * This class helps to support crossCerfificatePairs in a LDAP directory + * according RFC 2587 + * + *
+	*     crossCertificatePairATTRIBUTE::={
+	*       WITH SYNTAX   CertificatePair
+	*       EQUALITY MATCHING RULE certificatePairExactMatch
+	*       ID joint-iso-ccitt(2) ds(5) attributeType(4) crossCertificatePair(40)}
+	* 
+ * + *
The forward elements of the crossCertificatePair attribute of a + * CA's directory entry shall be used to store all, except self-issued + * certificates issued to this CA. Optionally, the reverse elements of the + * crossCertificatePair attribute, of a CA's directory entry may contain a + * subset of certificates issued by this CA to other CAs. When both the forward + * and the reverse elements are present in a single attribute value, issuer name + * in one certificate shall match the subject name in the other and vice versa, + * and the subject public key in one certificate shall be capable of verifying + * the digital signature on the other certificate and vice versa. + * + * When a reverse element is present, the forward element value and the reverse + * element value need not be stored in the same attribute value; in other words, + * they can be stored in either a single attribute value or two attribute + * values.
+ * + *
+	*       CertificatePair ::= SEQUENCE {
+	*         forward		[0]	Certificate OPTIONAL,
+	*         reverse		[1]	Certificate OPTIONAL,
+	*         -- at least one of the pair shall be present -- }
+	* 
+ */ + public class CertificatePair + : Asn1Encodable + { + private X509CertificateStructure forward, reverse; + + public static CertificatePair GetInstance( + object obj) + { + if (obj == null || obj is CertificatePair) + { + return (CertificatePair) obj; + } + + if (obj is Asn1Sequence) + { + return new CertificatePair((Asn1Sequence) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * Constructor from Asn1Sequence. + *

+ * The sequence is of type CertificatePair: + *

+ *

+		*       CertificatePair ::= SEQUENCE {
+		*         forward		[0]	Certificate OPTIONAL,
+		*         reverse		[1]	Certificate OPTIONAL,
+		*         -- at least one of the pair shall be present -- }
+		* 
+ * + * @param seq The ASN.1 sequence. + */ + private CertificatePair( + Asn1Sequence seq) + { + if (seq.Count != 1 && seq.Count != 2) + { + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + } + + foreach (object obj in seq) + { + Asn1TaggedObject o = Asn1TaggedObject.GetInstance(obj); + if (o.TagNo == 0) + { + forward = X509CertificateStructure.GetInstance(o, true); + } + else if (o.TagNo == 1) + { + reverse = X509CertificateStructure.GetInstance(o, true); + } + else + { + throw new ArgumentException("Bad tag number: " + o.TagNo); + } + } + } + + /** + * Constructor from a given details. + * + * @param forward Certificates issued to this CA. + * @param reverse Certificates issued by this CA to other CAs. + */ + public CertificatePair( + X509CertificateStructure forward, + X509CertificateStructure reverse) + { + this.forward = forward; + this.reverse = reverse; + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *

+ * Returns: + *

+ *

+		*       CertificatePair ::= SEQUENCE {
+		*         forward		[0]	Certificate OPTIONAL,
+		*         reverse		[1]	Certificate OPTIONAL,
+		*         -- at least one of the pair shall be present -- }
+		* 
+ * + * @return a DERObject + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptionalTagged(true, 0, forward); + v.AddOptionalTagged(true, 1, reverse); + return new DerSequence(v); + } + + /** + * @return Returns the forward. + */ + public X509CertificateStructure Forward + { + get { return forward; } + } + + /** + * @return Returns the reverse. + */ + public X509CertificateStructure Reverse + { + get { return reverse; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertificatePair.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertificatePair.cs.meta new file mode 100644 index 000000000..a7499e2a9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertificatePair.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4bac5cc073bdfcf45b1f1fb0763c43c8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertificatePolicies.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertificatePolicies.cs new file mode 100644 index 000000000..cf550e98f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertificatePolicies.cs @@ -0,0 +1,109 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class CertificatePolicies + : Asn1Encodable + { + private static PolicyInformation[] Copy(PolicyInformation[] policyInfo) + { + return (PolicyInformation[])policyInfo.Clone(); + } + + public static CertificatePolicies GetInstance(object obj) + { + if (obj is CertificatePolicies) + return (CertificatePolicies)obj; + if (obj == null) + return null; + return new CertificatePolicies(Asn1Sequence.GetInstance(obj)); + } + + public static CertificatePolicies GetInstance(Asn1TaggedObject obj, bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit)); + } + + public static CertificatePolicies FromExtensions(X509Extensions extensions) + { + return GetInstance(X509Extensions.GetExtensionParsedValue(extensions, X509Extensions.CertificatePolicies)); + } + + private readonly PolicyInformation[] policyInformation; + + /** + * Construct a CertificatePolicies object containing one PolicyInformation. + * + * @param name the name to be contained. + */ + public CertificatePolicies(PolicyInformation name) + { + this.policyInformation = new PolicyInformation[] { name }; + } + + public CertificatePolicies(PolicyInformation[] policyInformation) + { + this.policyInformation = Copy(policyInformation); + } + + private CertificatePolicies(Asn1Sequence seq) + { + this.policyInformation = new PolicyInformation[seq.Count]; + + for (int i = 0; i < seq.Count; ++i) + { + policyInformation[i] = PolicyInformation.GetInstance(seq[i]); + } + } + + public virtual PolicyInformation[] GetPolicyInformation() + { + return Copy(policyInformation); + } + + public virtual PolicyInformation GetPolicyInformation(DerObjectIdentifier policyIdentifier) + { + for (int i = 0; i != policyInformation.Length; i++) + { + if (policyIdentifier.Equals(policyInformation[i].PolicyIdentifier)) + { + return policyInformation[i]; + } + } + + return null; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
+         * CertificatePolicies ::= SEQUENCE SIZE {1..MAX} OF PolicyInformation
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(policyInformation); + } + + public override string ToString() + { + StringBuilder sb = new StringBuilder("CertificatePolicies:"); + if (policyInformation != null && policyInformation.Length > 0) + { + sb.Append(' '); + sb.Append(policyInformation[0]); + for (int i = 1; i < policyInformation.Length; ++i) + { + sb.Append(", "); + sb.Append(policyInformation[i]); + } + } + return sb.ToString(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertificatePolicies.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertificatePolicies.cs.meta new file mode 100644 index 000000000..bf0f4c976 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/CertificatePolicies.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12b89f11cdff44c448bddabcf8134606 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DSAParameter.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DSAParameter.cs new file mode 100644 index 000000000..ca9d72101 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DSAParameter.cs @@ -0,0 +1,81 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class DsaParameter + : Asn1Encodable + { + internal readonly DerInteger p, q, g; + + public static DsaParameter GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static DsaParameter GetInstance( + object obj) + { + if(obj == null || obj is DsaParameter) + { + return (DsaParameter) obj; + } + + if(obj is Asn1Sequence) + { + return new DsaParameter((Asn1Sequence) obj); + } + + throw new ArgumentException("Invalid DsaParameter: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public DsaParameter( + BigInteger p, + BigInteger q, + BigInteger g) + { + this.p = new DerInteger(p); + this.q = new DerInteger(q); + this.g = new DerInteger(g); + } + + private DsaParameter( + Asn1Sequence seq) + { + if (seq.Count != 3) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + this.p = DerInteger.GetInstance(seq[0]); + this.q = DerInteger.GetInstance(seq[1]); + this.g = DerInteger.GetInstance(seq[2]); + } + + public BigInteger P + { + get { return p.PositiveValue; } + } + + public BigInteger Q + { + get { return q.PositiveValue; } + } + + public BigInteger G + { + get { return g.PositiveValue; } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(p, q, g); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DSAParameter.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DSAParameter.cs.meta new file mode 100644 index 000000000..c8d62cf19 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DSAParameter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 670a21c8c431ee943b56aec700ffc433 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DigestInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DigestInfo.cs new file mode 100644 index 000000000..92c70d1e0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DigestInfo.cs @@ -0,0 +1,81 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * The DigestInfo object. + *
+     * DigestInfo::=Sequence{
+     *          digestAlgorithm  AlgorithmIdentifier,
+     *          digest OCTET STRING }
+     * 
+ */ + public class DigestInfo + : Asn1Encodable + { + private readonly byte[] digest; + private readonly AlgorithmIdentifier algID; + + public static DigestInfo GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static DigestInfo GetInstance( + object obj) + { + if (obj is DigestInfo) + { + return (DigestInfo) obj; + } + + if (obj is Asn1Sequence) + { + return new DigestInfo((Asn1Sequence) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public DigestInfo( + AlgorithmIdentifier algID, + byte[] digest) + { + this.digest = digest; + this.algID = algID; + } + + private DigestInfo( + Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Wrong number of elements in sequence", "seq"); + + algID = AlgorithmIdentifier.GetInstance(seq[0]); + digest = Asn1OctetString.GetInstance(seq[1]).GetOctets(); + } + + public AlgorithmIdentifier AlgorithmID + { + get { return algID; } + } + + public byte[] GetDigest() + { + return digest; + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(algID, new DerOctetString(digest)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DigestInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DigestInfo.cs.meta new file mode 100644 index 000000000..59e65b5d2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DigestInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bd2bf215172b1644bbeb087773fecc6a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DisplayText.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DisplayText.cs new file mode 100644 index 000000000..7dabc51a8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DisplayText.cs @@ -0,0 +1,178 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * DisplayText class, used in + * CertificatePolicies X509 V3 extensions (in policy qualifiers). + * + *

It stores a string in a chosen encoding. + *

+	 * DisplayText ::= CHOICE {
+	 *      ia5String        IA5String      (SIZE (1..200)),
+	 *      visibleString    VisibleString  (SIZE (1..200)),
+	 *      bmpString        BMPString      (SIZE (1..200)),
+	 *      utf8String       UTF8String     (SIZE (1..200)) }
+	 * 

+ * @see PolicyQualifierInfo + * @see PolicyInformation + */ + public class DisplayText + : Asn1Encodable, IAsn1Choice + { + /** + * Constant corresponding to ia5String encoding. + * + */ + public const int ContentTypeIA5String = 0; + /** + * Constant corresponding to bmpString encoding. + * + */ + public const int ContentTypeBmpString = 1; + /** + * Constant corresponding to utf8String encoding. + * + */ + public const int ContentTypeUtf8String = 2; + /** + * Constant corresponding to visibleString encoding. + * + */ + public const int ContentTypeVisibleString = 3; + /** + * Describe constant DisplayTextMaximumSize here. + * + */ + public const int DisplayTextMaximumSize = 200; + + internal readonly int contentType; + internal readonly IAsn1String contents; + + /** + * Creates a new DisplayText instance. + * + * @param type the desired encoding type for the text. + * @param text the text to store. Strings longer than 200 + * characters are truncated. + */ + public DisplayText( + int type, + string text) + { + if (text.Length > DisplayTextMaximumSize) + { + // RFC3280 limits these strings to 200 chars + // truncate the string + text = text.Substring(0, DisplayTextMaximumSize); + } + + contentType = type; + switch (type) + { + case ContentTypeIA5String: + contents = (IAsn1String)new DerIA5String (text); + break; + case ContentTypeUtf8String: + contents = (IAsn1String)new DerUtf8String(text); + break; + case ContentTypeVisibleString: + contents = (IAsn1String)new DerVisibleString(text); + break; + case ContentTypeBmpString: + contents = (IAsn1String)new DerBmpString(text); + break; + default: + contents = (IAsn1String)new DerUtf8String(text); + break; + } + } + +// /** +// * return true if the passed in string can be represented without +// * loss as a PrintableString, false otherwise. +// */ +// private bool CanBePrintable( +// string str) +// { +// for (int i = str.Length - 1; i >= 0; i--) +// { +// if (str[i] > 0x007f) +// { +// return false; +// } +// } +// +// return true; +// } + + /** + * Creates a new DisplayText instance. + * + * @param text the text to encapsulate. Strings longer than 200 + * characters are truncated. + */ + public DisplayText( + string text) + { + // by default use UTF8String + if (text.Length > DisplayTextMaximumSize) + { + text = text.Substring(0, DisplayTextMaximumSize); + } + + contentType = ContentTypeUtf8String; + contents = new DerUtf8String(text); + } + + /** + * Creates a new DisplayText instance. + *

Useful when reading back a DisplayText class + * from it's Asn1Encodable form.

+ * + * @param contents an Asn1Encodable instance. + */ + public DisplayText( + IAsn1String contents) + { + this.contents = contents; + } + + public static DisplayText GetInstance( + object obj) + { + if (obj is IAsn1String) + { + return new DisplayText((IAsn1String) obj); + } + + if (obj is DisplayText) + { + return (DisplayText) obj; + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public override Asn1Object ToAsn1Object() + { + return (Asn1Object) contents; + } + + /** + * Returns the stored string object. + * + * @return the stored text as a string. + */ + public string GetString() + { + return contents.GetString(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DisplayText.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DisplayText.cs.meta new file mode 100644 index 000000000..cec534ac9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DisplayText.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9ee75c757afa6a1419afa3acbd6a1dd8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DistributionPoint.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DistributionPoint.cs new file mode 100644 index 000000000..48ece19d8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DistributionPoint.cs @@ -0,0 +1,143 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * The DistributionPoint object. + *
+     * DistributionPoint ::= Sequence {
+     *      distributionPoint [0] DistributionPointName OPTIONAL,
+     *      reasons           [1] ReasonFlags OPTIONAL,
+     *      cRLIssuer         [2] GeneralNames OPTIONAL
+     * }
+     * 
+ */ + public class DistributionPoint + : Asn1Encodable + { + internal readonly DistributionPointName distributionPoint; + internal readonly ReasonFlags reasons; + internal readonly GeneralNames cRLIssuer; + + public static DistributionPoint GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static DistributionPoint GetInstance( + object obj) + { + if(obj == null || obj is DistributionPoint) + { + return (DistributionPoint) obj; + } + + if(obj is Asn1Sequence) + { + return new DistributionPoint((Asn1Sequence) obj); + } + + throw new ArgumentException("Invalid DistributionPoint: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + private DistributionPoint( + Asn1Sequence seq) + { + for (int i = 0; i != seq.Count; i++) + { + Asn1TaggedObject t = Asn1TaggedObject.GetInstance(seq[i]); + + switch (t.TagNo) + { + case 0: + distributionPoint = DistributionPointName.GetInstance(t, true); + break; + case 1: + reasons = new ReasonFlags(DerBitString.GetInstance(t, false)); + break; + case 2: + cRLIssuer = GeneralNames.GetInstance(t, false); + break; + } + } + } + + public DistributionPoint( + DistributionPointName distributionPointName, + ReasonFlags reasons, + GeneralNames crlIssuer) + { + this.distributionPoint = distributionPointName; + this.reasons = reasons; + this.cRLIssuer = crlIssuer; + } + + public DistributionPointName DistributionPointName + { + get { return distributionPoint; } + } + + public ReasonFlags Reasons + { + get { return reasons; } + } + + public GeneralNames CrlIssuer + { + get { return cRLIssuer; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + // As this is a CHOICE it must be explicitly tagged + v.AddOptionalTagged(true, 0, distributionPoint); + + v.AddOptionalTagged(false, 1, reasons); + v.AddOptionalTagged(false, 2, cRLIssuer); + return new DerSequence(v); + } + + public override string ToString() + { + StringBuilder buf = new StringBuilder(); + buf.AppendLine("DistributionPoint: ["); + if (distributionPoint != null) + { + AppendObject(buf, "distributionPoint", distributionPoint.ToString()); + } + if (reasons != null) + { + AppendObject(buf, "reasons", reasons.ToString()); + } + if (cRLIssuer != null) + { + AppendObject(buf, "cRLIssuer", cRLIssuer.ToString()); + } + buf.AppendLine("]"); + return buf.ToString(); + } + + private void AppendObject(StringBuilder buf, string name, string val) + { + string indent = " "; + buf.Append(indent); + buf.Append(name); + buf.AppendLine(":"); + buf.Append(indent); + buf.Append(indent); + buf.Append(val); + buf.AppendLine(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DistributionPoint.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DistributionPoint.cs.meta new file mode 100644 index 000000000..e052f0875 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DistributionPoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e72e206b525eea4fbefb336824b2b3a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DistributionPointName.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DistributionPointName.cs new file mode 100644 index 000000000..32e8d6c22 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DistributionPointName.cs @@ -0,0 +1,125 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * The DistributionPointName object. + *
+     * DistributionPointName ::= CHOICE {
+     *     fullName                 [0] GeneralNames,
+     *     nameRelativeToCRLIssuer  [1] RDN
+     * }
+     * 
+ */ + public class DistributionPointName + : Asn1Encodable, IAsn1Choice + { + internal readonly Asn1Encodable name; + internal readonly int type; + + public const int FullName = 0; + public const int NameRelativeToCrlIssuer = 1; + + public static DistributionPointName GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1TaggedObject.GetInstance(obj, true)); + } + + public static DistributionPointName GetInstance( + object obj) + { + if (obj == null || obj is DistributionPointName) + { + return (DistributionPointName) obj; + } + + if (obj is Asn1TaggedObject) + { + return new DistributionPointName((Asn1TaggedObject) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public DistributionPointName( + int type, + Asn1Encodable name) + { + this.type = type; + this.name = name; + } + + public DistributionPointName( + GeneralNames name) + : this(FullName, name) + { + } + + public int PointType + { + get { return type; } + } + + public Asn1Encodable Name + { + get { return name; } + } + + public DistributionPointName( + Asn1TaggedObject obj) + { + this.type = obj.TagNo; + + if (type == FullName) + { + this.name = GeneralNames.GetInstance(obj, false); + } + else + { + this.name = Asn1Set.GetInstance(obj, false); + } + } + + public override Asn1Object ToAsn1Object() + { + return new DerTaggedObject(false, type, name); + } + + public override string ToString() + { + StringBuilder buf = new StringBuilder(); + buf.AppendLine("DistributionPointName: ["); + if (type == FullName) + { + AppendObject(buf, "fullName", name.ToString()); + } + else + { + AppendObject(buf, "nameRelativeToCRLIssuer", name.ToString()); + } + buf.AppendLine("]"); + return buf.ToString(); + } + + private void AppendObject(StringBuilder buf, string name, string val) + { + string indent = " "; + buf.Append(indent); + buf.Append(name); + buf.AppendLine(":"); + buf.Append(indent); + buf.Append(indent); + buf.Append(val); + buf.AppendLine(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DistributionPointName.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DistributionPointName.cs.meta new file mode 100644 index 000000000..e291cf768 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/DistributionPointName.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7447a6a6bf3d479479bc3c2ba4ea9617 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/ExtendedKeyUsage.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/ExtendedKeyUsage.cs new file mode 100644 index 000000000..bde292387 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/ExtendedKeyUsage.cs @@ -0,0 +1,110 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * The extendedKeyUsage object. + *
+     *      extendedKeyUsage ::= Sequence SIZE (1..MAX) OF KeyPurposeId
+     * 
+ */ + public class ExtendedKeyUsage + : Asn1Encodable + { + public static ExtendedKeyUsage GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static ExtendedKeyUsage GetInstance( + object obj) + { + if (obj is ExtendedKeyUsage) + return (ExtendedKeyUsage)obj; + if (obj is X509Extension) + return GetInstance(X509Extension.ConvertValueToObject((X509Extension)obj)); + if (obj == null) + return null; + return new ExtendedKeyUsage(Asn1Sequence.GetInstance(obj)); + } + + public static ExtendedKeyUsage FromExtensions(X509Extensions extensions) + { + return GetInstance(X509Extensions.GetExtensionParsedValue(extensions, X509Extensions.ExtendedKeyUsage)); + } + + internal readonly ISet m_usageTable = new HashSet(); + internal readonly Asn1Sequence seq; + + private ExtendedKeyUsage(Asn1Sequence seq) + { + this.seq = seq; + + foreach (Asn1Encodable element in seq) + { + DerObjectIdentifier oid = DerObjectIdentifier.GetInstance(element); + + m_usageTable.Add(oid); + } + } + + public ExtendedKeyUsage(params KeyPurposeID[] usages) + { + this.seq = new DerSequence(usages); + + foreach (KeyPurposeID usage in usages) + { + m_usageTable.Add(usage); + } + } + + public ExtendedKeyUsage(IEnumerable usages) + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + foreach (object usage in usages) + { + DerObjectIdentifier oid = DerObjectIdentifier.GetInstance(usage); + + v.Add(oid); + m_usageTable.Add(oid); + } + + this.seq = new DerSequence(v); + } + + public bool HasKeyPurposeId(KeyPurposeID keyPurposeId) + { + return m_usageTable.Contains(keyPurposeId); + } + + /** + * Returns all extended key usages. + * The returned ArrayList contains DerObjectIdentifier instances. + * @return An ArrayList with all key purposes. + */ + public IList GetAllUsages() + { + return new List(m_usageTable); + } + + public int Count + { + get { return m_usageTable.Count; } + } + + public override Asn1Object ToAsn1Object() + { + return seq; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/ExtendedKeyUsage.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/ExtendedKeyUsage.cs.meta new file mode 100644 index 000000000..83e617180 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/ExtendedKeyUsage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2eb2d825f1d7b914cbf02056314ce462 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/GeneralName.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/GeneralName.cs new file mode 100644 index 000000000..7999ae836 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/GeneralName.cs @@ -0,0 +1,427 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using NetUtils = BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Net; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * The GeneralName object. + *
+     * GeneralName ::= CHOICE {
+     *      otherName                       [0]     OtherName,
+     *      rfc822Name                      [1]     IA5String,
+     *      dNSName                         [2]     IA5String,
+     *      x400Address                     [3]     ORAddress,
+     *      directoryName                   [4]     Name,
+     *      ediPartyName                    [5]     EDIPartyName,
+     *      uniformResourceIdentifier       [6]     IA5String,
+     *      iPAddress                       [7]     OCTET STRING,
+     *      registeredID                    [8]     OBJECT IDENTIFIER}
+     *
+     * OtherName ::= Sequence {
+     *      type-id    OBJECT IDENTIFIER,
+     *      value      [0] EXPLICIT ANY DEFINED BY type-id }
+     *
+     * EDIPartyName ::= Sequence {
+     *      nameAssigner            [0]     DirectoryString OPTIONAL,
+     *      partyName               [1]     DirectoryString }
+     * 
+ */ + public class GeneralName + : Asn1Encodable, IAsn1Choice + { + public const int OtherName = 0; + public const int Rfc822Name = 1; + public const int DnsName = 2; + public const int X400Address = 3; + public const int DirectoryName = 4; + public const int EdiPartyName = 5; + public const int UniformResourceIdentifier = 6; + public const int IPAddress = 7; + public const int RegisteredID = 8; + + internal readonly Asn1Encodable obj; + internal readonly int tag; + + public GeneralName( + X509Name directoryName) + { + this.obj = directoryName; + this.tag = 4; + } + + /** + * When the subjectAltName extension contains an Internet mail address, + * the address MUST be included as an rfc822Name. The format of an + * rfc822Name is an "addr-spec" as defined in RFC 822 [RFC 822]. + * + * When the subjectAltName extension contains a domain name service + * label, the domain name MUST be stored in the dNSName (an IA5String). + * The name MUST be in the "preferred name syntax," as specified by RFC + * 1034 [RFC 1034]. + * + * When the subjectAltName extension contains a URI, the name MUST be + * stored in the uniformResourceIdentifier (an IA5String). The name MUST + * be a non-relative URL, and MUST follow the URL syntax and encoding + * rules specified in [RFC 1738]. The name must include both a scheme + * (e.g., "http" or "ftp") and a scheme-specific-part. The scheme- + * specific-part must include a fully qualified domain name or IP + * address as the host. + * + * When the subjectAltName extension contains a iPAddress, the address + * MUST be stored in the octet string in "network byte order," as + * specified in RFC 791 [RFC 791]. The least significant bit (LSB) of + * each octet is the LSB of the corresponding byte in the network + * address. For IP Version 4, as specified in RFC 791, the octet string + * MUST contain exactly four octets. For IP Version 6, as specified in + * RFC 1883, the octet string MUST contain exactly sixteen octets [RFC + * 1883]. + */ + public GeneralName( + Asn1Object name, + int tag) + { + this.obj = name; + this.tag = tag; + } + + public GeneralName( + int tag, + Asn1Encodable name) + { + this.obj = name; + this.tag = tag; + } + + /** + * Create a GeneralName for the given tag from the passed in string. + *

+ * This constructor can handle: + *

    + *
  • rfc822Name
  • + *
  • iPAddress
  • + *
  • directoryName
  • + *
  • dNSName
  • + *
  • uniformResourceIdentifier
  • + *
  • registeredID
  • + *
+ * For x400Address, otherName and ediPartyName there is no common string + * format defined. + *

+ * Note: A directory name can be encoded in different ways into a byte + * representation. Be aware of this if the byte representation is used for + * comparing results. + *

+ * + * @param tag tag number + * @param name string representation of name + * @throws ArgumentException if the string encoding is not correct or + * not supported. + */ + public GeneralName( + int tag, + string name) + { + this.tag = tag; + + if (tag == Rfc822Name || tag == DnsName || tag == UniformResourceIdentifier) + { + this.obj = new DerIA5String(name); + } + else if (tag == RegisteredID) + { + this.obj = new DerObjectIdentifier(name); + } + else if (tag == DirectoryName) + { + this.obj = new X509Name(name); + } + else if (tag == IPAddress) + { + byte[] enc = toGeneralNameEncoding(name); + if (enc == null) + throw new ArgumentException("IP Address is invalid", "name"); + + this.obj = new DerOctetString(enc); + } + else + { + throw new ArgumentException("can't process string for tag: " + tag, "tag"); + } + } + + public static GeneralName GetInstance( + object obj) + { + if (obj == null || obj is GeneralName) + { + return (GeneralName) obj; + } + + if (obj is Asn1TaggedObject) + { + Asn1TaggedObject tagObj = (Asn1TaggedObject) obj; + int tag = tagObj.TagNo; + + switch (tag) + { + case EdiPartyName: + case OtherName: + case X400Address: + return new GeneralName(tag, Asn1Sequence.GetInstance(tagObj, false)); + + case DnsName: + case Rfc822Name: + case UniformResourceIdentifier: + return new GeneralName(tag, DerIA5String.GetInstance(tagObj, false)); + + case DirectoryName: + return new GeneralName(tag, X509Name.GetInstance(tagObj, true)); + case IPAddress: + return new GeneralName(tag, Asn1OctetString.GetInstance(tagObj, false)); + case RegisteredID: + return new GeneralName(tag, DerObjectIdentifier.GetInstance(tagObj, false)); + + default: + throw new ArgumentException("unknown tag: " + tag); + } + } + + if (obj is byte[]) + { + try + { + return GetInstance(Asn1Object.FromByteArray((byte[])obj)); + } + catch (IOException) + { + throw new ArgumentException("unable to parse encoded general name"); + } + } + + throw new ArgumentException("unknown object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public static GeneralName GetInstance( + Asn1TaggedObject tagObj, + bool explicitly) + { + return GetInstance(Asn1TaggedObject.GetInstance(tagObj, true)); + } + + public int TagNo + { + get { return tag; } + } + + public Asn1Encodable Name + { + get { return obj; } + } + + public override string ToString() + { + StringBuilder buf = new StringBuilder(); + buf.Append(tag); + buf.Append(": "); + + switch (tag) + { + case Rfc822Name: + case DnsName: + case UniformResourceIdentifier: + buf.Append(DerIA5String.GetInstance(obj).GetString()); + break; + case DirectoryName: + buf.Append(X509Name.GetInstance(obj).ToString()); + break; + default: + buf.Append(obj.ToString()); + break; + } + + return buf.ToString(); + } + + private byte[] toGeneralNameEncoding( + string ip) + { + if (NetUtils.IPAddress.IsValidIPv6WithNetmask(ip) || NetUtils.IPAddress.IsValidIPv6(ip)) + { + int slashIndex = ip.IndexOf('/'); + + if (slashIndex < 0) + { + byte[] addr = new byte[16]; + int[] parsedIp = parseIPv6(ip); + copyInts(parsedIp, addr, 0); + + return addr; + } + else + { + byte[] addr = new byte[32]; + int[] parsedIp = parseIPv6(ip.Substring(0, slashIndex)); + copyInts(parsedIp, addr, 0); + string mask = ip.Substring(slashIndex + 1); + if (mask.IndexOf(':') > 0) + { + parsedIp = parseIPv6(mask); + } + else + { + parsedIp = parseMask(mask); + } + copyInts(parsedIp, addr, 16); + + return addr; + } + } + else if (NetUtils.IPAddress.IsValidIPv4WithNetmask(ip) || NetUtils.IPAddress.IsValidIPv4(ip)) + { + int slashIndex = ip.IndexOf('/'); + + if (slashIndex < 0) + { + byte[] addr = new byte[4]; + + parseIPv4(ip, addr, 0); + + return addr; + } + else + { + byte[] addr = new byte[8]; + + parseIPv4(ip.Substring(0, slashIndex), addr, 0); + + string mask = ip.Substring(slashIndex + 1); + if (mask.IndexOf('.') > 0) + { + parseIPv4(mask, addr, 4); + } + else + { + parseIPv4Mask(mask, addr, 4); + } + + return addr; + } + } + + return null; + } + + private void parseIPv4Mask(string mask, byte[] addr, int offset) + { + int maskVal = int.Parse(mask); + + for (int i = 0; i != maskVal; i++) + { + addr[(i / 8) + offset] |= (byte)(1 << (i % 8)); + } + } + + private void parseIPv4(string ip, byte[] addr, int offset) + { + foreach (string token in ip.Split('.', '/')) + { + addr[offset++] = (byte)int.Parse(token); + } + } + + private int[] parseMask(string mask) + { + int[] res = new int[8]; + int maskVal = int.Parse(mask); + + for (int i = 0; i != maskVal; i++) + { + res[i / 16] |= 1 << (i % 16); + } + return res; + } + + private void copyInts(int[] parsedIp, byte[] addr, int offSet) + { + for (int i = 0; i != parsedIp.Length; i++) + { + addr[(i * 2) + offSet] = (byte)(parsedIp[i] >> 8); + addr[(i * 2 + 1) + offSet] = (byte)parsedIp[i]; + } + } + + private int[] parseIPv6(string ip) + { + if (Org.BouncyCastle.Utilities.Platform.StartsWith(ip, "::")) + { + ip = ip.Substring(1); + } + else if (Org.BouncyCastle.Utilities.Platform.EndsWith(ip, "::")) + { + ip = ip.Substring(0, ip.Length - 1); + } + + IEnumerable split = ip.Split(':'); + var sEnum = split.GetEnumerator(); + + int index = 0; + int[] val = new int[8]; + + int doubleColon = -1; + + while (sEnum.MoveNext()) + { + string e = sEnum.Current; + + if (e.Length == 0) + { + doubleColon = index; + val[index++] = 0; + } + else + { + if (e.IndexOf('.') < 0) + { + val[index++] = int.Parse(e, NumberStyles.AllowHexSpecifier); + } + else + { + string[] tokens = e.Split('.'); + + val[index++] = (int.Parse(tokens[0]) << 8) | int.Parse(tokens[1]); + val[index++] = (int.Parse(tokens[2]) << 8) | int.Parse(tokens[3]); + } + } + } + + if (index != val.Length) + { + Array.Copy(val, doubleColon, val, val.Length - (index - doubleColon), index - doubleColon); + for (int i = doubleColon; i != val.Length - (index - doubleColon); i++) + { + val[i] = 0; + } + } + + return val; + } + + public override Asn1Object ToAsn1Object() + { + // directoryName is explicitly tagged as it is a CHOICE + bool isExplicit = (tag == DirectoryName); + + return new DerTaggedObject(isExplicit, tag, obj); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/GeneralName.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/GeneralName.cs.meta new file mode 100644 index 000000000..2ce0ce85f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/GeneralName.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f9fa15cc99df23488aa1a0f35bb278d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/GeneralNames.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/GeneralNames.cs new file mode 100644 index 000000000..326cbbc9f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/GeneralNames.cs @@ -0,0 +1,95 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class GeneralNames + : Asn1Encodable + { + private static GeneralName[] Copy(GeneralName[] names) + { + return (GeneralName[])names.Clone(); + } + + public static GeneralNames GetInstance(object obj) + { + if (obj is GeneralNames) + return (GeneralNames)obj; + if (obj == null) + return null; + return new GeneralNames(Asn1Sequence.GetInstance(obj)); + } + + public static GeneralNames GetInstance(Asn1TaggedObject obj, bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static GeneralNames FromExtensions(X509Extensions extensions, DerObjectIdentifier extOid) + { + return GetInstance(X509Extensions.GetExtensionParsedValue(extensions, extOid)); + } + + private readonly GeneralName[] names; + + /// Construct a GeneralNames object containing one GeneralName. + /// The name to be contained. + public GeneralNames( + GeneralName name) + { + names = new GeneralName[]{ name }; + } + + public GeneralNames( + GeneralName[] names) + { + this.names = Copy(names); + } + + private GeneralNames( + Asn1Sequence seq) + { + this.names = new GeneralName[seq.Count]; + + for (int i = 0; i != seq.Count; i++) + { + names[i] = GeneralName.GetInstance(seq[i]); + } + } + + public GeneralName[] GetNames() + { + return Copy(names); + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+		 * GeneralNames ::= Sequence SIZE {1..MAX} OF GeneralName
+		 * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(names); + } + + public override string ToString() + { + StringBuilder buf = new StringBuilder(); + buf.AppendLine("GeneralNames:"); + foreach (GeneralName name in names) + { + buf.Append(" ") + .Append(name) + .AppendLine(); + } + return buf.ToString(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/GeneralNames.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/GeneralNames.cs.meta new file mode 100644 index 000000000..e9140dd6e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/GeneralNames.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2f5291483fbf63c488fd9c2eb029e9bc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/GeneralSubtree.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/GeneralSubtree.cs new file mode 100644 index 000000000..d8e82da48 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/GeneralSubtree.cs @@ -0,0 +1,189 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * Class for containing a restriction object subtrees in NameConstraints. See + * RFC 3280. + * + *
+	 *
+	 *       GeneralSubtree ::= SEQUENCE
+	 *       {
+	 *         baseName                    GeneralName,
+	 *         minimum         [0]     BaseDistance DEFAULT 0,
+	 *         maximum         [1]     BaseDistance OPTIONAL
+	 *       }
+	 * 
+ * + * @see org.bouncycastle.asn1.x509.NameConstraints + * + */ + public class GeneralSubtree + : Asn1Encodable + { + private readonly GeneralName baseName; + private readonly DerInteger minimum; + private readonly DerInteger maximum; + + private GeneralSubtree( + Asn1Sequence seq) + { + baseName = GeneralName.GetInstance(seq[0]); + + switch (seq.Count) + { + case 1: + break; + case 2: + { + Asn1TaggedObject o = Asn1TaggedObject.GetInstance(seq[1]); + switch (o.TagNo) + { + case 0: + minimum = DerInteger.GetInstance(o, false); + break; + case 1: + maximum = DerInteger.GetInstance(o, false); + break; + default: + throw new ArgumentException("Bad tag number: " + o.TagNo); + } + break; + } + case 3: + { + { + Asn1TaggedObject oMin = Asn1TaggedObject.GetInstance(seq[1]); + if (oMin.TagNo != 0) + throw new ArgumentException("Bad tag number for 'minimum': " + oMin.TagNo); + minimum = DerInteger.GetInstance(oMin, false); + } + + { + Asn1TaggedObject oMax = Asn1TaggedObject.GetInstance(seq[2]); + if (oMax.TagNo != 1) + throw new ArgumentException("Bad tag number for 'maximum': " + oMax.TagNo); + maximum = DerInteger.GetInstance(oMax, false); + } + + break; + } + default: + throw new ArgumentException("Bad sequence size: " + seq.Count); + } + } + + /** + * Constructor from a given details. + * + * According RFC 3280, the minimum and maximum fields are not used with any + * name forms, thus minimum MUST be zero, and maximum MUST be absent. + *

+ * If minimum is null, zero is assumed, if + * maximum is null, maximum is absent.

+ * + * @param baseName + * A restriction. + * @param minimum + * Minimum + * + * @param maximum + * Maximum + */ + public GeneralSubtree( + GeneralName baseName, + BigInteger minimum, + BigInteger maximum) + { + this.baseName = baseName; + if (minimum != null) + { + this.minimum = new DerInteger(minimum); + } + if (maximum != null) + { + this.maximum = new DerInteger(maximum); + } + } + + public GeneralSubtree( + GeneralName baseName) + : this(baseName, null, null) + { + } + + public static GeneralSubtree GetInstance( + Asn1TaggedObject o, + bool isExplicit) + { + return new GeneralSubtree(Asn1Sequence.GetInstance(o, isExplicit)); + } + + public static GeneralSubtree GetInstance( + object obj) + { + if (obj == null) + { + return null; + } + + if (obj is GeneralSubtree) + { + return (GeneralSubtree) obj; + } + + return new GeneralSubtree(Asn1Sequence.GetInstance(obj)); + } + + public GeneralName Base + { + get { return baseName; } + } + + public BigInteger Minimum + { + get { return minimum == null ? BigInteger.Zero : minimum.Value; } + } + + public BigInteger Maximum + { + get { return maximum == null ? null : maximum.Value; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + * + * Returns: + * + *
+		 *       GeneralSubtree ::= SEQUENCE
+		 *       {
+		 *         baseName                    GeneralName,
+		 *         minimum         [0]     BaseDistance DEFAULT 0,
+		 *         maximum         [1]     BaseDistance OPTIONAL
+		 *       }
+		 * 
+ * + * @return a DERObject + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(baseName); + + if (minimum != null && !minimum.HasValue(0)) + { + v.Add(new DerTaggedObject(false, 0, minimum)); + } + + v.AddOptionalTagged(false, 1, maximum); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/GeneralSubtree.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/GeneralSubtree.cs.meta new file mode 100644 index 000000000..e28a73aad --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/GeneralSubtree.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fc8548e99749b9d48b6261e328373569 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Holder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Holder.cs new file mode 100644 index 000000000..c6d7a1484 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Holder.cs @@ -0,0 +1,250 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * The Holder object. + *

+ * For an v2 attribute certificate this is: + * + *

+	 *            Holder ::= SEQUENCE {
+	 *                  baseCertificateID   [0] IssuerSerial OPTIONAL,
+	 *                           -- the issuer and serial number of
+	 *                           -- the holder's Public Key Certificate
+	 *                  entityName          [1] GeneralNames OPTIONAL,
+	 *                           -- the name of the claimant or role
+	 *                  objectDigestInfo    [2] ObjectDigestInfo OPTIONAL
+	 *                           -- used to directly authenticate the holder,
+	 *                           -- for example, an executable
+	 *            }
+	 * 
+ *

+ *

+ * For an v1 attribute certificate this is: + * + *

+	 *         subject CHOICE {
+	 *          baseCertificateID [0] EXPLICIT IssuerSerial,
+	 *          -- associated with a Public Key Certificate
+	 *          subjectName [1] EXPLICIT GeneralNames },
+	 *          -- associated with a name
+	 * 
+ *

+ */ + public class Holder + : Asn1Encodable + { + internal readonly IssuerSerial baseCertificateID; + internal readonly GeneralNames entityName; + internal readonly ObjectDigestInfo objectDigestInfo; + private readonly int version; + + public static Holder GetInstance( + object obj) + { + if (obj is Holder) + { + return (Holder) obj; + } + + if (obj is Asn1Sequence) + { + return new Holder((Asn1Sequence) obj); + } + + if (obj is Asn1TaggedObject) + { + return new Holder((Asn1TaggedObject) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * Constructor for a holder for an v1 attribute certificate. + * + * @param tagObj The ASN.1 tagged holder object. + */ + public Holder( + Asn1TaggedObject tagObj) + { + switch (tagObj.TagNo) + { + case 0: + baseCertificateID = IssuerSerial.GetInstance(tagObj, true); + break; + case 1: + entityName = GeneralNames.GetInstance(tagObj, true); + break; + default: + throw new ArgumentException("unknown tag in Holder"); + } + + this.version = 0; + } + + /** + * Constructor for a holder for an v2 attribute certificate. * + * + * @param seq The ASN.1 sequence. + */ + private Holder( + Asn1Sequence seq) + { + if (seq.Count > 3) + throw new ArgumentException("Bad sequence size: " + seq.Count); + + for (int i = 0; i != seq.Count; i++) + { + Asn1TaggedObject tObj = Asn1TaggedObject.GetInstance(seq[i]); + + switch (tObj.TagNo) + { + case 0: + baseCertificateID = IssuerSerial.GetInstance(tObj, false); + break; + case 1: + entityName = GeneralNames.GetInstance(tObj, false); + break; + case 2: + objectDigestInfo = ObjectDigestInfo.GetInstance(tObj, false); + break; + default: + throw new ArgumentException("unknown tag in Holder"); + } + } + + this.version = 1; + } + + public Holder( + IssuerSerial baseCertificateID) + : this(baseCertificateID, 1) + { + } + + /** + * Constructs a holder from a IssuerSerial. + * @param baseCertificateID The IssuerSerial. + * @param version The version of the attribute certificate. + */ + public Holder( + IssuerSerial baseCertificateID, + int version) + { + this.baseCertificateID = baseCertificateID; + this.version = version; + } + + /** + * Returns 1 for v2 attribute certificates or 0 for v1 attribute + * certificates. + * @return The version of the attribute certificate. + */ + public int Version + { + get { return version; } + } + + /** + * Constructs a holder with an entityName for v2 attribute certificates or + * with a subjectName for v1 attribute certificates. + * + * @param entityName The entity or subject name. + */ + public Holder( + GeneralNames entityName) + : this(entityName, 1) + { + } + + /** + * Constructs a holder with an entityName for v2 attribute certificates or + * with a subjectName for v1 attribute certificates. + * + * @param entityName The entity or subject name. + * @param version The version of the attribute certificate. + */ + public Holder( + GeneralNames entityName, + int version) + { + this.entityName = entityName; + this.version = version; + } + + /** + * Constructs a holder from an object digest info. + * + * @param objectDigestInfo The object digest info object. + */ + public Holder( + ObjectDigestInfo objectDigestInfo) + { + this.objectDigestInfo = objectDigestInfo; + this.version = 1; + } + + public IssuerSerial BaseCertificateID + { + get { return baseCertificateID; } + } + + /** + * Returns the entityName for an v2 attribute certificate or the subjectName + * for an v1 attribute certificate. + * + * @return The entityname or subjectname. + */ + public GeneralNames EntityName + { + get { return entityName; } + } + + public ObjectDigestInfo ObjectDigestInfo + { + get { return objectDigestInfo; } + } + + /** + * The Holder object. + *
+         *  Holder ::= Sequence {
+         *        baseCertificateID   [0] IssuerSerial OPTIONAL,
+         *                 -- the issuer and serial number of
+         *                 -- the holder's Public Key Certificate
+         *        entityName          [1] GeneralNames OPTIONAL,
+         *                 -- the name of the claimant or role
+         *        objectDigestInfo    [2] ObjectDigestInfo OPTIONAL
+         *                 -- used to directly authenticate the holder,
+         *                 -- for example, an executable
+         *  }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + if (version == 1) + { + Asn1EncodableVector v = new Asn1EncodableVector(3); + v.AddOptionalTagged(false, 0, baseCertificateID); + v.AddOptionalTagged(false, 1, entityName); + v.AddOptionalTagged(false, 2, objectDigestInfo); + return new DerSequence(v); + } + + if (entityName != null) + { + return new DerTaggedObject(true, 1, entityName); + } + + return new DerTaggedObject(true, 0, baseCertificateID); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Holder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Holder.cs.meta new file mode 100644 index 000000000..64ecd73c1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Holder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c9e8d3105c3fd874f887aff60be61f33 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/IetfAttrSyntax.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/IetfAttrSyntax.cs new file mode 100644 index 000000000..3feebc486 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/IetfAttrSyntax.cs @@ -0,0 +1,156 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * Implementation of IetfAttrSyntax as specified by RFC3281. + */ + public class IetfAttrSyntax + : Asn1Encodable + { + public const int ValueOctets = 1; + public const int ValueOid = 2; + public const int ValueUtf8 = 3; + + internal readonly GeneralNames policyAuthority; + internal readonly Asn1EncodableVector values = new Asn1EncodableVector(); + + internal int valueChoice = -1; + + /** + * + */ + public IetfAttrSyntax( + Asn1Sequence seq) + { + int i = 0; + + if (seq[0] is Asn1TaggedObject) + { + policyAuthority = GeneralNames.GetInstance(((Asn1TaggedObject)seq[0]), false); + i++; + } + else if (seq.Count == 2) + { // VOMS fix + policyAuthority = GeneralNames.GetInstance(seq[0]); + i++; + } + + if (!(seq[i] is Asn1Sequence)) + { + throw new ArgumentException("Non-IetfAttrSyntax encoding"); + } + + seq = (Asn1Sequence) seq[i]; + + foreach (Asn1Object obj in seq) + { + int type; + + if (obj is DerObjectIdentifier) + { + type = ValueOid; + } + else if (obj is DerUtf8String) + { + type = ValueUtf8; + } + else if (obj is DerOctetString) + { + type = ValueOctets; + } + else + { + throw new ArgumentException("Bad value type encoding IetfAttrSyntax"); + } + + if (valueChoice < 0) + { + valueChoice = type; + } + + if (type != valueChoice) + { + throw new ArgumentException("Mix of value types in IetfAttrSyntax"); + } + + values.Add(obj); + } + } + + public GeneralNames PolicyAuthority + { + get { return policyAuthority; } + } + + public int ValueType + { + get { return valueChoice; } + } + + public object[] GetValues() + { + if (this.ValueType == ValueOctets) + { + Asn1OctetString[] tmp = new Asn1OctetString[values.Count]; + + for (int i = 0; i != tmp.Length; i++) + { + tmp[i] = (Asn1OctetString) values[i]; + } + + return tmp; + } + + if (this.ValueType == ValueOid) + { + DerObjectIdentifier[] tmp = new DerObjectIdentifier[values.Count]; + + for (int i = 0; i != tmp.Length; i++) + { + tmp[i] = (DerObjectIdentifier) values[i]; + } + + return tmp; + } + + { + DerUtf8String[] tmp = new DerUtf8String[values.Count]; + + for (int i = 0; i != tmp.Length; i++) + { + tmp[i] = (DerUtf8String) values[i]; + } + + return tmp; + } + } + + /** + * + *
+         *
+         *  IetfAttrSyntax ::= Sequence {
+         *    policyAuthority [0] GeneralNames OPTIONAL,
+         *    values Sequence OF CHOICE {
+         *      octets OCTET STRING,
+         *      oid OBJECT IDENTIFIER,
+         *      string UTF8String
+         *    }
+         *  }
+         *
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptionalTagged(true, 0, policyAuthority); + v.Add(new DerSequence(values)); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/IetfAttrSyntax.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/IetfAttrSyntax.cs.meta new file mode 100644 index 000000000..4950c8ade --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/IetfAttrSyntax.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be6b4b59a6ec29e45b85a8a741b98acf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/IssuerSerial.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/IssuerSerial.cs new file mode 100644 index 000000000..549c25be3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/IssuerSerial.cs @@ -0,0 +1,98 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class IssuerSerial + : Asn1Encodable + { + internal readonly GeneralNames issuer; + internal readonly DerInteger serial; + internal readonly DerBitString issuerUid; + + public static IssuerSerial GetInstance( + object obj) + { + if (obj == null || obj is IssuerSerial) + { + return (IssuerSerial) obj; + } + + if (obj is Asn1Sequence) + { + return new IssuerSerial((Asn1Sequence) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public static IssuerSerial GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + private IssuerSerial( + Asn1Sequence seq) + { + if (seq.Count != 2 && seq.Count != 3) + { + throw new ArgumentException("Bad sequence size: " + seq.Count); + } + + issuer = GeneralNames.GetInstance(seq[0]); + serial = DerInteger.GetInstance(seq[1]); + + if (seq.Count == 3) + { + issuerUid = DerBitString.GetInstance(seq[2]); + } + } + + public IssuerSerial( + GeneralNames issuer, + DerInteger serial) + { + this.issuer = issuer; + this.serial = serial; + } + + public GeneralNames Issuer + { + get { return issuer; } + } + + public DerInteger Serial + { + get { return serial; } + } + + public DerBitString IssuerUid + { + get { return issuerUid; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         *  IssuerSerial  ::=  Sequence {
+         *       issuer         GeneralNames,
+         *       serial         CertificateSerialNumber,
+         *       issuerUid      UniqueIdentifier OPTIONAL
+         *  }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(issuer, serial); + v.AddOptional(issuerUid); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/IssuerSerial.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/IssuerSerial.cs.meta new file mode 100644 index 000000000..58d959244 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/IssuerSerial.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8781dee073516046a951024b1e4f4f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/IssuingDistributionPoint.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/IssuingDistributionPoint.cs new file mode 100644 index 000000000..7f58f7ec5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/IssuingDistributionPoint.cs @@ -0,0 +1,241 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + *
+	 * IssuingDistributionPoint ::= SEQUENCE { 
+	 *   distributionPoint          [0] DistributionPointName OPTIONAL, 
+	 *   onlyContainsUserCerts      [1] BOOLEAN DEFAULT FALSE, 
+	 *   onlyContainsCACerts        [2] BOOLEAN DEFAULT FALSE, 
+	 *   onlySomeReasons            [3] ReasonFlags OPTIONAL, 
+	 *   indirectCRL                [4] BOOLEAN DEFAULT FALSE,
+	 *   onlyContainsAttributeCerts [5] BOOLEAN DEFAULT FALSE }
+	 * 
+ */ + public class IssuingDistributionPoint + : Asn1Encodable + { + private readonly DistributionPointName _distributionPoint; + private readonly bool _onlyContainsUserCerts; + private readonly bool _onlyContainsCACerts; + private readonly ReasonFlags _onlySomeReasons; + private readonly bool _indirectCRL; + private readonly bool _onlyContainsAttributeCerts; + + private readonly Asn1Sequence seq; + + public static IssuingDistributionPoint GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static IssuingDistributionPoint GetInstance( + object obj) + { + if (obj == null || obj is IssuingDistributionPoint) + { + return (IssuingDistributionPoint) obj; + } + + if (obj is Asn1Sequence) + { + return new IssuingDistributionPoint((Asn1Sequence) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * Constructor from given details. + * + * @param distributionPoint + * May contain an URI as pointer to most current CRL. + * @param onlyContainsUserCerts Covers revocation information for end certificates. + * @param onlyContainsCACerts Covers revocation information for CA certificates. + * + * @param onlySomeReasons + * Which revocation reasons does this point cover. + * @param indirectCRL + * If true then the CRL contains revocation + * information about certificates ssued by other CAs. + * @param onlyContainsAttributeCerts Covers revocation information for attribute certificates. + */ + public IssuingDistributionPoint( + DistributionPointName distributionPoint, + bool onlyContainsUserCerts, + bool onlyContainsCACerts, + ReasonFlags onlySomeReasons, + bool indirectCRL, + bool onlyContainsAttributeCerts) + { + this._distributionPoint = distributionPoint; + this._indirectCRL = indirectCRL; + this._onlyContainsAttributeCerts = onlyContainsAttributeCerts; + this._onlyContainsCACerts = onlyContainsCACerts; + this._onlyContainsUserCerts = onlyContainsUserCerts; + this._onlySomeReasons = onlySomeReasons; + + Asn1EncodableVector vec = new Asn1EncodableVector(); + if (distributionPoint != null) + { // CHOICE item so explicitly tagged + vec.Add(new DerTaggedObject(true, 0, distributionPoint)); + } + if (onlyContainsUserCerts) + { + vec.Add(new DerTaggedObject(false, 1, DerBoolean.True)); + } + if (onlyContainsCACerts) + { + vec.Add(new DerTaggedObject(false, 2, DerBoolean.True)); + } + if (onlySomeReasons != null) + { + vec.Add(new DerTaggedObject(false, 3, onlySomeReasons)); + } + if (indirectCRL) + { + vec.Add(new DerTaggedObject(false, 4, DerBoolean.True)); + } + if (onlyContainsAttributeCerts) + { + vec.Add(new DerTaggedObject(false, 5, DerBoolean.True)); + } + + seq = new DerSequence(vec); + } + + /** + * Constructor from Asn1Sequence + */ + private IssuingDistributionPoint( + Asn1Sequence seq) + { + this.seq = seq; + + for (int i = 0; i != seq.Count; i++) + { + Asn1TaggedObject o = Asn1TaggedObject.GetInstance(seq[i]); + + switch (o.TagNo) + { + case 0: + // CHOICE so explicit + _distributionPoint = DistributionPointName.GetInstance(o, true); + break; + case 1: + _onlyContainsUserCerts = DerBoolean.GetInstance(o, false).IsTrue; + break; + case 2: + _onlyContainsCACerts = DerBoolean.GetInstance(o, false).IsTrue; + break; + case 3: + _onlySomeReasons = new ReasonFlags(ReasonFlags.GetInstance(o, false)); + break; + case 4: + _indirectCRL = DerBoolean.GetInstance(o, false).IsTrue; + break; + case 5: + _onlyContainsAttributeCerts = DerBoolean.GetInstance(o, false).IsTrue; + break; + default: + throw new ArgumentException("unknown tag in IssuingDistributionPoint"); + } + } + } + + public bool OnlyContainsUserCerts + { + get { return _onlyContainsUserCerts; } + } + + public bool OnlyContainsCACerts + { + get { return _onlyContainsCACerts; } + } + + public bool IsIndirectCrl + { + get { return _indirectCRL; } + } + + public bool OnlyContainsAttributeCerts + { + get { return _onlyContainsAttributeCerts; } + } + + /** + * @return Returns the distributionPoint. + */ + public DistributionPointName DistributionPoint + { + get { return _distributionPoint; } + } + + /** + * @return Returns the onlySomeReasons. + */ + public ReasonFlags OnlySomeReasons + { + get { return _onlySomeReasons; } + } + + public override Asn1Object ToAsn1Object() + { + return seq; + } + + public override string ToString() + { + StringBuilder buf = new StringBuilder(); + buf.AppendLine("IssuingDistributionPoint: ["); + if (_distributionPoint != null) + { + AppendObject(buf, "distributionPoint", _distributionPoint.ToString()); + } + if (_onlyContainsUserCerts) + { + AppendObject(buf, "onlyContainsUserCerts", _onlyContainsUserCerts.ToString()); + } + if (_onlyContainsCACerts) + { + AppendObject(buf, "onlyContainsCACerts", _onlyContainsCACerts.ToString()); + } + if (_onlySomeReasons != null) + { + AppendObject(buf, "onlySomeReasons", _onlySomeReasons.ToString()); + } + if (_onlyContainsAttributeCerts) + { + AppendObject(buf, "onlyContainsAttributeCerts", _onlyContainsAttributeCerts.ToString()); + } + if (_indirectCRL) + { + AppendObject(buf, "indirectCRL", _indirectCRL.ToString()); + } + buf.AppendLine("]"); + return buf.ToString(); + } + + private void AppendObject(StringBuilder buf, string name, string val) + { + string indent = " "; + buf.Append(indent); + buf.Append(name); + buf.AppendLine(":"); + buf.Append(indent); + buf.Append(indent); + buf.Append(val); + buf.AppendLine(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/IssuingDistributionPoint.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/IssuingDistributionPoint.cs.meta new file mode 100644 index 000000000..22fd455f4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/IssuingDistributionPoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 294595b60094c3f47b8d0e7a74f0534d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/KeyPurposeId.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/KeyPurposeId.cs new file mode 100644 index 000000000..0389fa278 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/KeyPurposeId.cs @@ -0,0 +1,100 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * The KeyPurposeID object. + *
+     *     KeyPurposeID ::= OBJECT IDENTIFIER
+     * 
+ */ + public sealed class KeyPurposeID + : DerObjectIdentifier + { + private const string id_kp = "1.3.6.1.5.5.7.3"; + + private KeyPurposeID(string id) + : base(id) + { + } + + public static readonly KeyPurposeID AnyExtendedKeyUsage = new KeyPurposeID(X509Extensions.ExtendedKeyUsage.Id + ".0"); + + public static readonly KeyPurposeID id_kp_serverAuth = new KeyPurposeID(id_kp + ".1"); + public static readonly KeyPurposeID id_kp_clientAuth = new KeyPurposeID(id_kp + ".2"); + public static readonly KeyPurposeID id_kp_codeSigning = new KeyPurposeID(id_kp + ".3"); + public static readonly KeyPurposeID id_kp_emailProtection = new KeyPurposeID(id_kp + ".4"); + public static readonly KeyPurposeID id_kp_ipsecEndSystem = new KeyPurposeID(id_kp + ".5"); + public static readonly KeyPurposeID id_kp_ipsecTunnel = new KeyPurposeID(id_kp + ".6"); + public static readonly KeyPurposeID id_kp_ipsecUser = new KeyPurposeID(id_kp + ".7"); + public static readonly KeyPurposeID id_kp_timeStamping = new KeyPurposeID(id_kp + ".8"); + public static readonly KeyPurposeID id_kp_OCSPSigning = new KeyPurposeID(id_kp + ".9"); + public static readonly KeyPurposeID id_kp_dvcs = new KeyPurposeID(id_kp + ".10"); + public static readonly KeyPurposeID id_kp_sbgpCertAAServerAuth = new KeyPurposeID(id_kp + ".11"); + public static readonly KeyPurposeID id_kp_scvp_responder = new KeyPurposeID(id_kp + ".12"); + public static readonly KeyPurposeID id_kp_eapOverPPP = new KeyPurposeID(id_kp + ".13"); + public static readonly KeyPurposeID id_kp_eapOverLAN = new KeyPurposeID(id_kp + ".14"); + public static readonly KeyPurposeID id_kp_scvpServer = new KeyPurposeID(id_kp + ".15"); + public static readonly KeyPurposeID id_kp_scvpClient = new KeyPurposeID(id_kp + ".16"); + public static readonly KeyPurposeID id_kp_ipsecIKE = new KeyPurposeID(id_kp + ".17"); + public static readonly KeyPurposeID id_kp_capwapAC = new KeyPurposeID(id_kp + ".18"); + public static readonly KeyPurposeID id_kp_capwapWTP = new KeyPurposeID(id_kp + ".19"); + + public static readonly KeyPurposeID id_kp_cmcCA = new KeyPurposeID(id_kp + ".27"); + public static readonly KeyPurposeID id_kp_cmcRA = new KeyPurposeID(id_kp + ".28"); + public static readonly KeyPurposeID id_kp_cmKGA = new KeyPurposeID(id_kp + ".32"); + + // + // microsoft key purpose ids + // + public static readonly KeyPurposeID id_kp_smartcardlogon = new KeyPurposeID("1.3.6.1.4.1.311.20.2.2"); + + public static readonly KeyPurposeID id_kp_macAddress = new KeyPurposeID("1.3.6.1.1.1.1.22"); + + /// Microsoft Server Gated Crypto (msSGC). + /// see https://www.alvestrand.no/objectid/1.3.6.1.4.1.311.10.3.3.html + public static readonly KeyPurposeID id_kp_msSGC = new KeyPurposeID("1.3.6.1.4.1.311.10.3.3"); + + private const string id_pkinit = "1.3.6.1.5.2.3"; + + public static readonly KeyPurposeID scSysNodeNumber = new KeyPurposeID(id_pkinit + ".0"); + public static readonly KeyPurposeID id_pkinit_authData = new KeyPurposeID(id_pkinit + ".1"); + public static readonly KeyPurposeID id_pkinit_DHKeyData = new KeyPurposeID(id_pkinit + ".2"); + public static readonly KeyPurposeID id_pkinit_rkeyData = new KeyPurposeID(id_pkinit + ".3"); + public static readonly KeyPurposeID keyPurposeClientAuth = new KeyPurposeID(id_pkinit + ".4"); + public static readonly KeyPurposeID keyPurposeKdc = new KeyPurposeID(id_pkinit + ".5"); + + /// Netscape Server Gated Crypto (nsSGC). + /// see https://www.alvestrand.no/objectid/2.16.840.1.113730.4.1.html + public static readonly KeyPurposeID id_kp_nsSGC = new KeyPurposeID("2.16.840.1.113730.4.1"); + + + public static readonly KeyPurposeID IdKPServerAuth = id_kp_serverAuth; + + public static readonly KeyPurposeID IdKPClientAuth = id_kp_clientAuth; + + public static readonly KeyPurposeID IdKPCodeSigning = id_kp_codeSigning; + + public static readonly KeyPurposeID IdKPEmailProtection = id_kp_emailProtection; + + public static readonly KeyPurposeID IdKPIpsecEndSystem = id_kp_ipsecEndSystem; + + public static readonly KeyPurposeID IdKPIpsecTunnel = id_kp_ipsecTunnel; + + public static readonly KeyPurposeID IdKPIpsecUser = id_kp_ipsecUser; + + public static readonly KeyPurposeID IdKPTimeStamping = id_kp_timeStamping; + + public static readonly KeyPurposeID IdKPOcspSigning = id_kp_OCSPSigning; + + + public static readonly KeyPurposeID IdKPSmartCardLogon = id_kp_smartcardlogon; + + + public static readonly KeyPurposeID IdKPMacAddress = id_kp_macAddress; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/KeyPurposeId.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/KeyPurposeId.cs.meta new file mode 100644 index 000000000..d6913f932 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/KeyPurposeId.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: faf30a7baf2f5f54f9c0ee4046ad1b4f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/KeyUsage.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/KeyUsage.cs new file mode 100644 index 000000000..76fa3124b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/KeyUsage.cs @@ -0,0 +1,82 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * The KeyUsage object. + *
+     *    id-ce-keyUsage OBJECT IDENTIFIER ::=  { id-ce 15 }
+     *
+     *    KeyUsage ::= BIT STRING {
+     *         digitalSignature        (0),
+     *         nonRepudiation          (1),
+     *         keyEncipherment         (2),
+     *         dataEncipherment        (3),
+     *         keyAgreement            (4),
+     *         keyCertSign             (5),
+     *         cRLSign                 (6),
+     *         encipherOnly            (7),
+     *         decipherOnly            (8) }
+     * 
+ */ + public class KeyUsage + : DerBitString + { + public const int DigitalSignature = (1 << 7); + public const int NonRepudiation = (1 << 6); + public const int KeyEncipherment = (1 << 5); + public const int DataEncipherment = (1 << 4); + public const int KeyAgreement = (1 << 3); + public const int KeyCertSign = (1 << 2); + public const int CrlSign = (1 << 1); + public const int EncipherOnly = (1 << 0); + public const int DecipherOnly = (1 << 15); + + public static new KeyUsage GetInstance(object obj) + { + if (obj is KeyUsage) + return (KeyUsage)obj; + if (obj is X509Extension) + return GetInstance(X509Extension.ConvertValueToObject((X509Extension)obj)); + if (obj == null) + return null; + return new KeyUsage(DerBitString.GetInstance(obj)); + } + + public static KeyUsage FromExtensions(X509Extensions extensions) + { + return GetInstance(X509Extensions.GetExtensionParsedValue(extensions, X509Extensions.KeyUsage)); + } + + /** + * Basic constructor. + * + * @param usage - the bitwise OR of the Key Usage flags giving the + * allowed uses for the key. + * e.g. (KeyUsage.keyEncipherment | KeyUsage.dataEncipherment) + */ + public KeyUsage(int usage) + : base(usage) + { + } + + private KeyUsage( + DerBitString usage) + : base(usage.GetBytes(), usage.PadBits) + { + } + + public override string ToString() + { + byte[] data = GetBytes(); + if (data.Length == 1) + { + return "KeyUsage: 0x" + (data[0] & 0xff).ToString("X"); + } + + return "KeyUsage: 0x" + ((data[1] & 0xff) << 8 | (data[0] & 0xff)).ToString("X"); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/KeyUsage.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/KeyUsage.cs.meta new file mode 100644 index 000000000..3e1753f79 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/KeyUsage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4021a83960488554b81323fece140b47 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/NameConstraints.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/NameConstraints.cs new file mode 100644 index 000000000..e0c2a7406 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/NameConstraints.cs @@ -0,0 +1,105 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class NameConstraints + : Asn1Encodable + { + private Asn1Sequence permitted, excluded; + + public static NameConstraints GetInstance( + object obj) + { + if (obj == null || obj is NameConstraints) + { + return (NameConstraints) obj; + } + + if (obj is Asn1Sequence) + { + return new NameConstraints((Asn1Sequence) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public NameConstraints( + Asn1Sequence seq) + { + foreach (Asn1TaggedObject o in seq) + { + switch (o.TagNo) + { + case 0: + permitted = Asn1Sequence.GetInstance(o, false); + break; + case 1: + excluded = Asn1Sequence.GetInstance(o, false); + break; + } + } + } + + /** + * Constructor from a given details. + * + *

permitted and excluded are Vectors of GeneralSubtree objects.

+ * + * @param permitted Permitted subtrees + * @param excluded Excluded subtrees + */ + public NameConstraints( + IList permitted, + IList excluded) + { + if (permitted != null) + { + this.permitted = CreateSequence(permitted); + } + + if (excluded != null) + { + this.excluded = CreateSequence(excluded); + } + } + + private DerSequence CreateSequence(IList subtrees) + { + GeneralSubtree[] gsts = new GeneralSubtree[subtrees.Count]; + for (int i = 0; i < subtrees.Count; ++i) + { + gsts[i] = subtrees[i]; + } + return new DerSequence(gsts); + } + + public Asn1Sequence PermittedSubtrees + { + get { return permitted; } + } + + public Asn1Sequence ExcludedSubtrees + { + get { return excluded; } + } + + /* + * NameConstraints ::= SEQUENCE { permittedSubtrees [0] GeneralSubtrees + * OPTIONAL, excludedSubtrees [1] GeneralSubtrees OPTIONAL } + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptionalTagged(false, 0, permitted); + v.AddOptionalTagged(false, 1, excluded); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/NameConstraints.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/NameConstraints.cs.meta new file mode 100644 index 000000000..c67107505 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/NameConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 90f58613456a0f244bd469ff52a88379 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/NoticeReference.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/NoticeReference.cs new file mode 100644 index 000000000..904bc5bf8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/NoticeReference.cs @@ -0,0 +1,147 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * NoticeReference class, used in + * CertificatePolicies X509 V3 extensions + * (in policy qualifiers). + * + *
+     *  NoticeReference ::= Sequence {
+     *      organization     DisplayText,
+     *      noticeNumbers    Sequence OF Integer }
+     *
+     * 
+ * + * @see PolicyQualifierInfo + * @see PolicyInformation + */ + public class NoticeReference + : Asn1Encodable + { + private readonly DisplayText organization; + private readonly Asn1Sequence noticeNumbers; + + private static Asn1EncodableVector ConvertVector(IList numbers) + { + Asn1EncodableVector av = new Asn1EncodableVector(); + + foreach (object o in numbers) + { + DerInteger di; + + if (o is BigInteger) + { + di = new DerInteger((BigInteger)o); + } + else if (o is int) + { + di = new DerInteger((int)o); + } + else + { + throw new ArgumentException(); + } + + av.Add(di); + } + return av; + } + + /** + * Creates a new NoticeReference instance. + * + * @param organization a String value + * @param numbers a Vector value + */ + public NoticeReference(string organization, IList numbers) + : this(organization, ConvertVector(numbers)) + { + } + + /** + * Creates a new NoticeReference instance. + * + * @param organization a String value + * @param noticeNumbers an ASN1EncodableVector value + */ + public NoticeReference(string organization, Asn1EncodableVector noticeNumbers) + : this(new DisplayText(organization), noticeNumbers) + { + } + + /** + * Creates a new NoticeReference instance. + * + * @param organization displayText + * @param noticeNumbers an ASN1EncodableVector value + */ + public NoticeReference(DisplayText organization, Asn1EncodableVector noticeNumbers) + { + this.organization = organization; + this.noticeNumbers = new DerSequence(noticeNumbers); + } + + /** + * Creates a new NoticeReference instance. + *

Useful for reconstructing a NoticeReference + * instance from its encodable/encoded form.

+ * + * @param as an Asn1Sequence value obtained from either + * calling @{link ToAsn1Object()} for a NoticeReference + * instance or from parsing it from a Der-encoded stream. + */ + private NoticeReference(Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + organization = DisplayText.GetInstance(seq[0]); + noticeNumbers = Asn1Sequence.GetInstance(seq[1]); + } + + public static NoticeReference GetInstance(object obj) + { + if (obj is NoticeReference) + return (NoticeReference)obj; + if (obj == null) + return null; + return new NoticeReference(Asn1Sequence.GetInstance(obj)); + } + + public virtual DisplayText Organization + { + get { return organization; } + } + + public virtual DerInteger[] GetNoticeNumbers() + { + DerInteger[] tmp = new DerInteger[noticeNumbers.Count]; + + for (int i = 0; i != noticeNumbers.Count; ++i) + { + tmp[i] = DerInteger.GetInstance(noticeNumbers[i]); + } + + return tmp; + } + + /** + * Describe ToAsn1Object method here. + * + * @return a Asn1Object value + */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(organization, noticeNumbers); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/NoticeReference.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/NoticeReference.cs.meta new file mode 100644 index 000000000..1fa875236 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/NoticeReference.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0b149789548ee9f4a8a817d529d868b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/ObjectDigestInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/ObjectDigestInfo.cs new file mode 100644 index 000000000..8b3042fa3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/ObjectDigestInfo.cs @@ -0,0 +1,177 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * ObjectDigestInfo ASN.1 structure used in v2 attribute certificates. + * + *
+	 *  
+	 *    ObjectDigestInfo ::= SEQUENCE {
+	 *         digestedObjectType  ENUMERATED {
+	 *                 publicKey            (0),
+	 *                 publicKeyCert        (1),
+	 *                 otherObjectTypes     (2) },
+	 *                         -- otherObjectTypes MUST NOT
+	 *                         -- be used in this profile
+	 *         otherObjectTypeID   OBJECT IDENTIFIER OPTIONAL,
+	 *         digestAlgorithm     AlgorithmIdentifier,
+	 *         objectDigest        BIT STRING
+	 *    }
+	 *   
+	 * 
+ * + */ + public class ObjectDigestInfo + : Asn1Encodable + { + /** + * The public key is hashed. + */ + public const int PublicKey = 0; + + /** + * The public key certificate is hashed. + */ + public const int PublicKeyCert = 1; + + /** + * An other object is hashed. + */ + public const int OtherObjectDigest = 2; + + internal readonly DerEnumerated digestedObjectType; + internal readonly DerObjectIdentifier otherObjectTypeID; + internal readonly AlgorithmIdentifier digestAlgorithm; + internal readonly DerBitString objectDigest; + + public static ObjectDigestInfo GetInstance( + object obj) + { + if (obj == null || obj is ObjectDigestInfo) + { + return (ObjectDigestInfo) obj; + } + + if (obj is Asn1Sequence) + { + return new ObjectDigestInfo((Asn1Sequence) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public static ObjectDigestInfo GetInstance( + Asn1TaggedObject obj, + bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit)); + } + + /** + * Constructor from given details. + *

+ * If digestedObjectType is not {@link #publicKeyCert} or + * {@link #publicKey} otherObjectTypeID must be given, + * otherwise it is ignored.

+ * + * @param digestedObjectType The digest object type. + * @param otherObjectTypeID The object type ID for + * otherObjectDigest. + * @param digestAlgorithm The algorithm identifier for the hash. + * @param objectDigest The hash value. + */ + public ObjectDigestInfo( + int digestedObjectType, + string otherObjectTypeID, + AlgorithmIdentifier digestAlgorithm, + byte[] objectDigest) + { + this.digestedObjectType = new DerEnumerated(digestedObjectType); + + if (digestedObjectType == OtherObjectDigest) + { + this.otherObjectTypeID = new DerObjectIdentifier(otherObjectTypeID); + } + + this.digestAlgorithm = digestAlgorithm; + + this.objectDigest = new DerBitString(objectDigest); + } + + private ObjectDigestInfo( + Asn1Sequence seq) + { + if (seq.Count > 4 || seq.Count < 3) + { + throw new ArgumentException("Bad sequence size: " + seq.Count); + } + + digestedObjectType = DerEnumerated.GetInstance(seq[0]); + + int offset = 0; + + if (seq.Count == 4) + { + otherObjectTypeID = DerObjectIdentifier.GetInstance(seq[1]); + offset++; + } + + digestAlgorithm = AlgorithmIdentifier.GetInstance(seq[1 + offset]); + objectDigest = DerBitString.GetInstance(seq[2 + offset]); + } + + public DerEnumerated DigestedObjectType + { + get { return digestedObjectType; } + } + + public DerObjectIdentifier OtherObjectTypeID + { + get { return otherObjectTypeID; } + } + + public AlgorithmIdentifier DigestAlgorithm + { + get { return digestAlgorithm; } + } + + public DerBitString ObjectDigest + { + get { return objectDigest; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + * + *
+		 *  
+		 *    ObjectDigestInfo ::= SEQUENCE {
+		 *         digestedObjectType  ENUMERATED {
+		 *                 publicKey            (0),
+		 *                 publicKeyCert        (1),
+		 *                 otherObjectTypes     (2) },
+		 *                         -- otherObjectTypes MUST NOT
+		 *                         -- be used in this profile
+		 *         otherObjectTypeID   OBJECT IDENTIFIER OPTIONAL,
+		 *         digestAlgorithm     AlgorithmIdentifier,
+		 *         objectDigest        BIT STRING
+		 *    }
+		 *   
+		 * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(digestedObjectType); + v.AddOptional(otherObjectTypeID); + v.Add(digestAlgorithm, objectDigest); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/ObjectDigestInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/ObjectDigestInfo.cs.meta new file mode 100644 index 000000000..7e452cc85 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/ObjectDigestInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 02207614e04f22b46a8c8d78f420c099 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/OtherName.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/OtherName.cs new file mode 100644 index 000000000..293e6893d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/OtherName.cs @@ -0,0 +1,75 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * The OtherName object. + *
+     * OtherName ::= SEQUENCE {
+     *      type-id    OBJECT IDENTIFIER,
+     *      value      [0] EXPLICIT ANY DEFINED BY type-id }
+     * 
+ */ + public class OtherName + : Asn1Encodable + { + private readonly DerObjectIdentifier typeID; + private readonly Asn1Encodable value; + + /** + * OtherName factory method. + * @param obj the object used to construct an instance of + * OtherName. It must be an instance of OtherName + * or ASN1Sequence. + * @return the instance of OtherName built from the + * supplied object. + * @throws java.lang.IllegalArgumentException if the object passed + * to the factory is not an instance of OtherName or something that + * can be converted into an appropriate ASN1Sequence. + */ + public static OtherName GetInstance(object obj) + { + if (obj is OtherName) + return (OtherName)obj; + if (obj == null) + return null; + return new OtherName(Asn1Sequence.GetInstance(obj)); + } + + /** + * Base constructor. + * @param typeID the type of the other name. + * @param value the ANY object that represents the value. + */ + public OtherName(DerObjectIdentifier typeID, Asn1Encodable value) + { + this.typeID = typeID; + this.value = value; + } + + private OtherName(Asn1Sequence seq) + { + this.typeID = DerObjectIdentifier.GetInstance(seq[0]); + this.value = DerTaggedObject.GetInstance(seq[1]).GetObject(); // explicitly tagged + } + + public virtual DerObjectIdentifier TypeID + { + get { return typeID; } + } + + public Asn1Encodable Value + { + get { return value; } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(typeID, new DerTaggedObject(true, 0, value)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/OtherName.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/OtherName.cs.meta new file mode 100644 index 000000000..41f7359da --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/OtherName.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 1bbd811e6a35cba42832f36b9f95d692 +timeCreated: 1596123404 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyInformation.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyInformation.cs new file mode 100644 index 000000000..3da98ad0a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyInformation.cs @@ -0,0 +1,79 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class PolicyInformation + : Asn1Encodable + { + private readonly DerObjectIdentifier policyIdentifier; + private readonly Asn1Sequence policyQualifiers; + + private PolicyInformation( + Asn1Sequence seq) + { + if (seq.Count < 1 || seq.Count > 2) + { + throw new ArgumentException("Bad sequence size: " + seq.Count); + } + + policyIdentifier = DerObjectIdentifier.GetInstance(seq[0]); + + if (seq.Count > 1) + { + policyQualifiers = Asn1Sequence.GetInstance(seq[1]); + } + } + + public PolicyInformation( + DerObjectIdentifier policyIdentifier) + { + this.policyIdentifier = policyIdentifier; + } + + public PolicyInformation( + DerObjectIdentifier policyIdentifier, + Asn1Sequence policyQualifiers) + { + this.policyIdentifier = policyIdentifier; + this.policyQualifiers = policyQualifiers; + } + + public static PolicyInformation GetInstance( + object obj) + { + if (obj == null || obj is PolicyInformation) + { + return (PolicyInformation) obj; + } + + return new PolicyInformation(Asn1Sequence.GetInstance(obj)); + } + + public DerObjectIdentifier PolicyIdentifier + { + get { return policyIdentifier; } + } + + public Asn1Sequence PolicyQualifiers + { + get { return policyQualifiers; } + } + + /* + * PolicyInformation ::= Sequence { + * policyIdentifier CertPolicyId, + * policyQualifiers Sequence SIZE (1..MAX) OF + * PolicyQualifierInfo OPTIONAL } + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(policyIdentifier); + v.AddOptional(policyQualifiers); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyInformation.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyInformation.cs.meta new file mode 100644 index 000000000..ef6bacebf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyInformation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5abbcd4c5528f6a439fd91d7dae43128 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyMappings.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyMappings.cs new file mode 100644 index 000000000..02e00eb73 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyMappings.cs @@ -0,0 +1,66 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.Collections.Generic; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * PolicyMappings V3 extension, described in RFC3280. + *
+	 *    PolicyMappings ::= Sequence SIZE (1..MAX) OF Sequence {
+	 *      issuerDomainPolicy      CertPolicyId,
+	 *      subjectDomainPolicy     CertPolicyId }
+	 * 
+ * + * @see RFC 3280, section 4.2.1.6 + */ + public class PolicyMappings + : Asn1Encodable + { + private readonly Asn1Sequence seq; + + /** + * Creates a new PolicyMappings instance. + * + * @param seq an Asn1Sequence constructed as specified + * in RFC 3280 + */ + public PolicyMappings( + Asn1Sequence seq) + { + this.seq = seq; + } + + /** + * Creates a new PolicyMappings instance. + * + * @param mappings a HashMap value that maps + * string oids + * to other string oids. + */ + public PolicyMappings(IDictionary mappings) + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + foreach (var entry in mappings) + { + string idp = entry.Key; + string sdp = entry.Value; + + v.Add( + new DerSequence( + new DerObjectIdentifier(idp), + new DerObjectIdentifier(sdp))); + } + + seq = new DerSequence(v); + } + + public override Asn1Object ToAsn1Object() + { + return seq; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyMappings.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyMappings.cs.meta new file mode 100644 index 000000000..b8e23ad98 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyMappings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6882991b865f5b14ca16e8b9ab76a181 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyQualifierId.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyQualifierId.cs new file mode 100644 index 000000000..fad2803c2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyQualifierId.cs @@ -0,0 +1,32 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * PolicyQualifierId, used in the CertificatePolicies + * X509V3 extension. + * + *
+	 *    id-qt          OBJECT IDENTIFIER ::=  { id-pkix 2 }
+	 *    id-qt-cps      OBJECT IDENTIFIER ::=  { id-qt 1 }
+	 *    id-qt-unotice  OBJECT IDENTIFIER ::=  { id-qt 2 }
+	 *  PolicyQualifierId ::=
+	 *       OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice )
+	 * 
+ */ + public sealed class PolicyQualifierID : DerObjectIdentifier + { + private const string IdQt = "1.3.6.1.5.5.7.2"; + + private PolicyQualifierID( + string id) + : base(id) + { + } + + public static readonly PolicyQualifierID IdQtCps = new PolicyQualifierID(IdQt + ".1"); + public static readonly PolicyQualifierID IdQtUnotice = new PolicyQualifierID(IdQt + ".2"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyQualifierId.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyQualifierId.cs.meta new file mode 100644 index 000000000..af6be561e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyQualifierId.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 17690092d4614f24dbdfb1fda0c9e085 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyQualifierInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyQualifierInfo.cs new file mode 100644 index 000000000..001958c87 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyQualifierInfo.cs @@ -0,0 +1,99 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * Policy qualifiers, used in the X509V3 CertificatePolicies + * extension. + * + *
+     *   PolicyQualifierInfo ::= Sequence {
+     *       policyQualifierId  PolicyQualifierId,
+     *       qualifier          ANY DEFINED BY policyQualifierId }
+     * 
+ */ + public class PolicyQualifierInfo + : Asn1Encodable + { + private readonly DerObjectIdentifier policyQualifierId; + private readonly Asn1Encodable qualifier; + + /** + * Creates a new PolicyQualifierInfo instance. + * + * @param policyQualifierId a PolicyQualifierId value + * @param qualifier the qualifier, defined by the above field. + */ + public PolicyQualifierInfo( + DerObjectIdentifier policyQualifierId, + Asn1Encodable qualifier) + { + this.policyQualifierId = policyQualifierId; + this.qualifier = qualifier; + } + + /** + * Creates a new PolicyQualifierInfo containing a + * cPSuri qualifier. + * + * @param cps the CPS (certification practice statement) uri as a + * string. + */ + public PolicyQualifierInfo( + string cps) + { + policyQualifierId = PolicyQualifierID.IdQtCps; + qualifier = new DerIA5String(cps); + } + + /** + * Creates a new PolicyQualifierInfo instance. + * + * @param as PolicyQualifierInfo X509 structure + * encoded as an Asn1Sequence. + */ + private PolicyQualifierInfo( + Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + policyQualifierId = DerObjectIdentifier.GetInstance(seq[0]); + qualifier = seq[1]; + } + + public static PolicyQualifierInfo GetInstance( + object obj) + { + if (obj is PolicyQualifierInfo) + return (PolicyQualifierInfo)obj; + if (obj == null) + return null; + return new PolicyQualifierInfo(Asn1Sequence.GetInstance(obj)); + } + + public virtual DerObjectIdentifier PolicyQualifierId + { + get { return policyQualifierId; } + } + + public virtual Asn1Encodable Qualifier + { + get { return qualifier; } + } + + /** + * Returns a Der-encodable representation of this instance. + * + * @return a Asn1Object value + */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(policyQualifierId, qualifier); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyQualifierInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyQualifierInfo.cs.meta new file mode 100644 index 000000000..541d77e49 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PolicyQualifierInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f452760c35c7b684396626dc773036ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PrivateKeyUsagePeriod.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PrivateKeyUsagePeriod.cs new file mode 100644 index 000000000..7b245a042 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PrivateKeyUsagePeriod.cs @@ -0,0 +1,79 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /// + ///
+	/// PrivateKeyUsagePeriod ::= SEQUENCE
+	/// {
+	/// notBefore       [0]     GeneralizedTime OPTIONAL,
+	/// notAfter        [1]     GeneralizedTime OPTIONAL }
+	/// 
+ ///
+ public class PrivateKeyUsagePeriod + : Asn1Encodable + { + public static PrivateKeyUsagePeriod GetInstance( + object obj) + { + if (obj is PrivateKeyUsagePeriod) + { + return (PrivateKeyUsagePeriod) obj; + } + + if (obj is Asn1Sequence) + { + return new PrivateKeyUsagePeriod((Asn1Sequence) obj); + } + + if (obj is X509Extension) + { + return GetInstance(X509Extension.ConvertValueToObject((X509Extension) obj)); + } + + throw new ArgumentException("unknown object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + private Asn1GeneralizedTime _notBefore, _notAfter; + + private PrivateKeyUsagePeriod( + Asn1Sequence seq) + { + foreach (Asn1TaggedObject tObj in seq) + { + if (tObj.TagNo == 0) + { + _notBefore = Asn1GeneralizedTime.GetInstance(tObj, false); + } + else if (tObj.TagNo == 1) + { + _notAfter = Asn1GeneralizedTime.GetInstance(tObj, false); + } + } + } + + public Asn1GeneralizedTime NotBefore + { + get { return _notBefore; } + } + + public Asn1GeneralizedTime NotAfter + { + get { return _notAfter; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptionalTagged(false, 0, _notBefore); + v.AddOptionalTagged(false, 1, _notAfter); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PrivateKeyUsagePeriod.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PrivateKeyUsagePeriod.cs.meta new file mode 100644 index 000000000..7fade4c11 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/PrivateKeyUsagePeriod.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 22c2678aa1fff7c40974a32519fe0930 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/RSAPublicKeyStructure.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/RSAPublicKeyStructure.cs new file mode 100644 index 000000000..2ec0a7929 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/RSAPublicKeyStructure.cs @@ -0,0 +1,95 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class RsaPublicKeyStructure + : Asn1Encodable + { + private BigInteger modulus; + private BigInteger publicExponent; + + public static RsaPublicKeyStructure GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static RsaPublicKeyStructure GetInstance( + object obj) + { + if (obj == null || obj is RsaPublicKeyStructure) + { + return (RsaPublicKeyStructure) obj; + } + + if (obj is Asn1Sequence) + { + return new RsaPublicKeyStructure((Asn1Sequence) obj); + } + + throw new ArgumentException("Invalid RsaPublicKeyStructure: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + public RsaPublicKeyStructure( + BigInteger modulus, + BigInteger publicExponent) + { + if (modulus == null) + throw new ArgumentNullException("modulus"); + if (publicExponent == null) + throw new ArgumentNullException("publicExponent"); + if (modulus.SignValue <= 0) + throw new ArgumentException("Not a valid RSA modulus", "modulus"); + if (publicExponent.SignValue <= 0) + throw new ArgumentException("Not a valid RSA public exponent", "publicExponent"); + + this.modulus = modulus; + this.publicExponent = publicExponent; + } + + private RsaPublicKeyStructure( + Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Bad sequence size: " + seq.Count); + + // Note: we are accepting technically incorrect (i.e. negative) values here + modulus = DerInteger.GetInstance(seq[0]).PositiveValue; + publicExponent = DerInteger.GetInstance(seq[1]).PositiveValue; + } + + public BigInteger Modulus + { + get { return modulus; } + } + + public BigInteger PublicExponent + { + get { return publicExponent; } + } + + /** + * This outputs the key in Pkcs1v2 format. + *
+         *      RSAPublicKey ::= Sequence {
+         *                          modulus Integer, -- n
+         *                          publicExponent Integer, -- e
+         *                      }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence( + new DerInteger(Modulus), + new DerInteger(PublicExponent)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/RSAPublicKeyStructure.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/RSAPublicKeyStructure.cs.meta new file mode 100644 index 000000000..e47f17e22 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/RSAPublicKeyStructure.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf27e7314c63a8242bc799931359c21d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/ReasonFlags.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/ReasonFlags.cs new file mode 100644 index 000000000..1ed629dc5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/ReasonFlags.cs @@ -0,0 +1,49 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * The ReasonFlags object. + *
+     * ReasonFlags ::= BIT STRING {
+     *    unused(0),
+     *    keyCompromise(1),
+     *    cACompromise(2),
+     *    affiliationChanged(3),
+     *    superseded(4),
+     *    cessationOfOperation(5),
+     *    certficateHold(6)
+     * }
+     * 
+ */ + public class ReasonFlags + : DerBitString + { + public const int Unused = (1 << 7); + public const int KeyCompromise = (1 << 6); + public const int CACompromise = (1 << 5); + public const int AffiliationChanged = (1 << 4); + public const int Superseded = (1 << 3); + public const int CessationOfOperation = (1 << 2); + public const int CertificateHold = (1 << 1); + public const int PrivilegeWithdrawn = (1 << 0); + public const int AACompromise = (1 << 15); + + /** + * @param reasons - the bitwise OR of the Key Reason flags giving the + * allowed uses for the key. + */ + public ReasonFlags(int reasons) + : base(reasons) + { + } + + public ReasonFlags( + DerBitString reasons) + : base(reasons.GetBytes(), reasons.PadBits) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/ReasonFlags.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/ReasonFlags.cs.meta new file mode 100644 index 000000000..9367e57f0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/ReasonFlags.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f55944d463a02e419739037579f2686 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/RoleSyntax.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/RoleSyntax.cs new file mode 100644 index 000000000..03413f048 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/RoleSyntax.cs @@ -0,0 +1,228 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * Implementation of the RoleSyntax object as specified by the RFC3281. + * + *
+	* RoleSyntax ::= SEQUENCE {
+	*                 roleAuthority  [0] GeneralNames OPTIONAL,
+	*                 roleName       [1] GeneralName
+	*           }
+	* 
+ */ + public class RoleSyntax + : Asn1Encodable + { + private readonly GeneralNames roleAuthority; + private readonly GeneralName roleName; + + /** + * RoleSyntax factory method. + * @param obj the object used to construct an instance of + * RoleSyntax. It must be an instance of RoleSyntax + * or Asn1Sequence. + * @return the instance of RoleSyntax built from the + * supplied object. + * @throws java.lang.ArgumentException if the object passed + * to the factory is not an instance of RoleSyntax or + * Asn1Sequence. + */ + public static RoleSyntax GetInstance( + object obj) + { + if (obj is RoleSyntax) + return (RoleSyntax)obj; + + if (obj != null) + return new RoleSyntax(Asn1Sequence.GetInstance(obj)); + + return null; + } + + /** + * Constructor. + * @param roleAuthority the role authority of this RoleSyntax. + * @param roleName the role name of this RoleSyntax. + */ + public RoleSyntax( + GeneralNames roleAuthority, + GeneralName roleName) + { + if (roleName == null + || roleName.TagNo != GeneralName.UniformResourceIdentifier + || ((IAsn1String) roleName.Name).GetString().Equals("")) + { + throw new ArgumentException("the role name MUST be non empty and MUST " + + "use the URI option of GeneralName"); + } + + this.roleAuthority = roleAuthority; + this.roleName = roleName; + } + + /** + * Constructor. Invoking this constructor is the same as invoking + * new RoleSyntax(null, roleName). + * @param roleName the role name of this RoleSyntax. + */ + public RoleSyntax( + GeneralName roleName) + : this(null, roleName) + { + } + + /** + * Utility constructor. Takes a string argument representing + * the role name, builds a GeneralName to hold the role name + * and calls the constructor that takes a GeneralName. + * @param roleName + */ + public RoleSyntax( + string roleName) + : this(new GeneralName(GeneralName.UniformResourceIdentifier, + (roleName == null)? "": roleName)) + { + } + + /** + * Constructor that builds an instance of RoleSyntax by + * extracting the encoded elements from the Asn1Sequence + * object supplied. + * @param seq an instance of Asn1Sequence that holds + * the encoded elements used to build this RoleSyntax. + */ + private RoleSyntax( + Asn1Sequence seq) + { + if (seq.Count < 1 || seq.Count > 2) + { + throw new ArgumentException("Bad sequence size: " + seq.Count); + } + + for (int i = 0; i != seq.Count; i++) + { + Asn1TaggedObject taggedObject = Asn1TaggedObject.GetInstance(seq[i]); + switch (taggedObject.TagNo) + { + case 0: + roleAuthority = GeneralNames.GetInstance(taggedObject, false); + break; + case 1: + roleName = GeneralName.GetInstance(taggedObject, true); + break; + default: + throw new ArgumentException("Unknown tag in RoleSyntax"); + } + } + } + + /** + * Gets the role authority of this RoleSyntax. + * @return an instance of GeneralNames holding the + * role authority of this RoleSyntax. + */ + public GeneralNames RoleAuthority + { + get { return this.roleAuthority; } + } + + /** + * Gets the role name of this RoleSyntax. + * @return an instance of GeneralName holding the + * role name of this RoleSyntax. + */ + public GeneralName RoleName + { + get { return this.roleName; } + } + + /** + * Gets the role name as a java.lang.string object. + * @return the role name of this RoleSyntax represented as a + * string object. + */ + public string GetRoleNameAsString() + { + return ((IAsn1String) this.roleName.Name).GetString(); + } + + /** + * Gets the role authority as a string[] object. + * @return the role authority of this RoleSyntax represented as a + * string[] array. + */ + public string[] GetRoleAuthorityAsString() + { + if (roleAuthority == null) + { + return new string[0]; + } + + GeneralName[] names = roleAuthority.GetNames(); + string[] namesString = new string[names.Length]; + for(int i = 0; i < names.Length; i++) + { + Asn1Encodable asn1Value = names[i].Name; + if (asn1Value is IAsn1String) + { + namesString[i] = ((IAsn1String) asn1Value).GetString(); + } + else + { + namesString[i] = asn1Value.ToString(); + } + } + + return namesString; + } + + /** + * Implementation of the method ToAsn1Object as + * required by the superclass ASN1Encodable. + * + *
+		* RoleSyntax ::= SEQUENCE {
+		*                 roleAuthority  [0] GeneralNames OPTIONAL,
+		*                 roleName       [1] GeneralName
+		*           }
+		* 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptionalTagged(false, 0, roleAuthority); + v.Add(new DerTaggedObject(true, 1, roleName)); + return new DerSequence(v); + } + + public override string ToString() + { + StringBuilder buff = new StringBuilder("Name: " + this.GetRoleNameAsString() + + " - Auth: "); + + if (this.roleAuthority == null || roleAuthority.GetNames().Length == 0) + { + buff.Append("N/A"); + } + else + { + string[] names = this.GetRoleAuthorityAsString(); + buff.Append('[').Append(names[0]); + for(int i = 1; i < names.Length; i++) + { + buff.Append(", ").Append(names[i]); + } + buff.Append(']'); + } + + return buff.ToString(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/RoleSyntax.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/RoleSyntax.cs.meta new file mode 100644 index 000000000..ca2fc568b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/RoleSyntax.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ff361cc4c49a0d41b7c348946274353 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/SubjectDirectoryAttributes.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/SubjectDirectoryAttributes.cs new file mode 100644 index 000000000..a294df441 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/SubjectDirectoryAttributes.cs @@ -0,0 +1,137 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * This extension may contain further X.500 attributes of the subject. See also + * RFC 3039. + * + *
+	 *     SubjectDirectoryAttributes ::= Attributes
+	 *     Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
+	 *     Attribute ::= SEQUENCE
+	 *     {
+	 *       type AttributeType
+	 *       values SET OF AttributeValue
+	 *     }
+	 *
+	 *     AttributeType ::= OBJECT IDENTIFIER
+	 *     AttributeValue ::= ANY DEFINED BY AttributeType
+	 * 
+ * + * @see org.bouncycastle.asn1.x509.X509Name for AttributeType ObjectIdentifiers. + */ + public class SubjectDirectoryAttributes + : Asn1Encodable + { + private readonly IList m_attributes; + + public static SubjectDirectoryAttributes GetInstance( + object obj) + { + if (obj == null || obj is SubjectDirectoryAttributes) + { + return (SubjectDirectoryAttributes) obj; + } + + if (obj is Asn1Sequence) + { + return new SubjectDirectoryAttributes((Asn1Sequence) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * Constructor from Asn1Sequence. + * + * The sequence is of type SubjectDirectoryAttributes: + * + *
+		 *      SubjectDirectoryAttributes ::= Attributes
+		 *      Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
+		 *      Attribute ::= SEQUENCE
+		 *      {
+		 *        type AttributeType
+		 *        values SET OF AttributeValue
+		 *      }
+		 *
+		 *      AttributeType ::= OBJECT IDENTIFIER
+		 *      AttributeValue ::= ANY DEFINED BY AttributeType
+		 * 
+ * + * @param seq + * The ASN.1 sequence. + */ + private SubjectDirectoryAttributes( + Asn1Sequence seq) + { + m_attributes = new List(); + + foreach (object o in seq) + { + Asn1Sequence s = Asn1Sequence.GetInstance(o); + m_attributes.Add(AttributeX509.GetInstance(s)); + } + } + + /** + * Constructor from an ArrayList of attributes. + * + * The ArrayList consists of attributes of type {@link Attribute Attribute} + * + * @param attributes The attributes. + * + */ + public SubjectDirectoryAttributes(IList attributes) + { + m_attributes = new List(attributes); + } + + /** + * Produce an object suitable for an Asn1OutputStream. + * + * Returns: + * + *
+		 *      SubjectDirectoryAttributes ::= Attributes
+		 *      Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
+		 *      Attribute ::= SEQUENCE
+		 *      {
+		 *        type AttributeType
+		 *        values SET OF AttributeValue
+		 *      }
+		 *
+		 *      AttributeType ::= OBJECT IDENTIFIER
+		 *      AttributeValue ::= ANY DEFINED BY AttributeType
+		 * 
+ * + * @return a DERObject + */ + public override Asn1Object ToAsn1Object() + { + AttributeX509[] v = new AttributeX509[m_attributes.Count]; + for (int i = 0; i < m_attributes.Count; ++i) + { + v[i] = m_attributes[i]; + } + return new DerSequence(v); + } + + /** + * @return Returns the attributes. + */ + public IEnumerable Attributes + { + get { return CollectionUtilities.Proxy(m_attributes); } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/SubjectDirectoryAttributes.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/SubjectDirectoryAttributes.cs.meta new file mode 100644 index 000000000..fb93f536f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/SubjectDirectoryAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 620383797bd814841818767fcb5e2ccb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/SubjectKeyIdentifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/SubjectKeyIdentifier.cs new file mode 100644 index 000000000..63eca4555 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/SubjectKeyIdentifier.cs @@ -0,0 +1,136 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * The SubjectKeyIdentifier object. + *
+     * SubjectKeyIdentifier::= OCTET STRING
+     * 
+ */ + public class SubjectKeyIdentifier + : Asn1Encodable + { + public static SubjectKeyIdentifier GetInstance(Asn1TaggedObject obj, bool explicitly) + { + return GetInstance(Asn1OctetString.GetInstance(obj, explicitly)); + } + + public static SubjectKeyIdentifier GetInstance(object obj) + { + if (obj is SubjectKeyIdentifier) + return (SubjectKeyIdentifier)obj; + if (obj is SubjectPublicKeyInfo) + return new SubjectKeyIdentifier((SubjectPublicKeyInfo)obj); + if (obj is X509Extension) + return GetInstance(X509Extension.ConvertValueToObject((X509Extension)obj)); + if (obj == null) + return null; + return new SubjectKeyIdentifier(Asn1OctetString.GetInstance(obj)); + } + + public static SubjectKeyIdentifier FromExtensions(X509Extensions extensions) + { + return GetInstance(X509Extensions.GetExtensionParsedValue(extensions, X509Extensions.SubjectKeyIdentifier)); + } + + private readonly byte[] keyIdentifier; + + public SubjectKeyIdentifier( + byte[] keyID) + { + if (keyID == null) + throw new ArgumentNullException("keyID"); + + this.keyIdentifier = Arrays.Clone(keyID); + } + + public SubjectKeyIdentifier( + Asn1OctetString keyID) + : this(keyID.GetOctets()) + { + } + + /** + * Calculates the keyIdentifier using a SHA1 hash over the BIT STRING + * from SubjectPublicKeyInfo as defined in RFC3280. + * + * @param spki the subject public key info. + */ + public SubjectKeyIdentifier( + SubjectPublicKeyInfo spki) + { + this.keyIdentifier = GetDigest(spki); + } + + public byte[] GetKeyIdentifier() + { + return Arrays.Clone(keyIdentifier); + } + + public override Asn1Object ToAsn1Object() + { + return new DerOctetString(GetKeyIdentifier()); + } + + /** + * Return a RFC 3280 type 1 key identifier. As in: + *
+		 * (1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the
+		 * value of the BIT STRING subjectPublicKey (excluding the tag,
+		 * length, and number of unused bits).
+		 * 
+ * @param keyInfo the key info object containing the subjectPublicKey field. + * @return the key identifier. + */ + public static SubjectKeyIdentifier CreateSha1KeyIdentifier( + SubjectPublicKeyInfo keyInfo) + { + return new SubjectKeyIdentifier(keyInfo); + } + + /** + * Return a RFC 3280 type 2 key identifier. As in: + *
+		 * (2) The keyIdentifier is composed of a four bit type field with
+		 * the value 0100 followed by the least significant 60 bits of the
+		 * SHA-1 hash of the value of the BIT STRING subjectPublicKey.
+		 * 
+ * @param keyInfo the key info object containing the subjectPublicKey field. + * @return the key identifier. + */ + public static SubjectKeyIdentifier CreateTruncatedSha1KeyIdentifier( + SubjectPublicKeyInfo keyInfo) + { + byte[] dig = GetDigest(keyInfo); + byte[] id = new byte[8]; + + Array.Copy(dig, dig.Length - 8, id, 0, id.Length); + + id[0] &= 0x0f; + id[0] |= 0x40; + + return new SubjectKeyIdentifier(id); + } + + private static byte[] GetDigest( + SubjectPublicKeyInfo spki) + { + IDigest digest = new Sha1Digest(); + byte[] resBuf = new byte[digest.GetDigestSize()]; + + byte[] bytes = spki.PublicKeyData.GetBytes(); + digest.BlockUpdate(bytes, 0, bytes.Length); + digest.DoFinal(resBuf, 0); + return resBuf; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/SubjectKeyIdentifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/SubjectKeyIdentifier.cs.meta new file mode 100644 index 000000000..db7b79182 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/SubjectKeyIdentifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 628854a153b3cf44391f8dbc2892b462 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/SubjectPublicKeyInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/SubjectPublicKeyInfo.cs new file mode 100644 index 000000000..4c935b997 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/SubjectPublicKeyInfo.cs @@ -0,0 +1,105 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * The object that contains the public key stored in a certficate. + *

+ * The GetEncoded() method in the public keys in the JCE produces a DER + * encoded one of these.

+ */ + public class SubjectPublicKeyInfo + : Asn1Encodable + { + private readonly AlgorithmIdentifier algID; + private readonly DerBitString keyData; + + public static SubjectPublicKeyInfo GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static SubjectPublicKeyInfo GetInstance( + object obj) + { + if (obj is SubjectPublicKeyInfo) + return (SubjectPublicKeyInfo) obj; + + if (obj != null) + return new SubjectPublicKeyInfo(Asn1Sequence.GetInstance(obj)); + + return null; + } + + public SubjectPublicKeyInfo( + AlgorithmIdentifier algID, + Asn1Encodable publicKey) + { + this.keyData = new DerBitString(publicKey); + this.algID = algID; + } + + public SubjectPublicKeyInfo( + AlgorithmIdentifier algID, + byte[] publicKey) + { + this.keyData = new DerBitString(publicKey); + this.algID = algID; + } + + private SubjectPublicKeyInfo( + Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + this.algID = AlgorithmIdentifier.GetInstance(seq[0]); + this.keyData = DerBitString.GetInstance(seq[1]); + } + + public AlgorithmIdentifier AlgorithmID + { + get { return algID; } + } + + /** + * for when the public key is an encoded object - if the bitstring + * can't be decoded this routine raises an IOException. + * + * @exception IOException - if the bit string doesn't represent a Der + * encoded object. + */ + public Asn1Object ParsePublicKey() + { + return Asn1Object.FromByteArray(keyData.GetOctets()); + } + + /** + * for when the public key is raw bits... + */ + public DerBitString PublicKeyData + { + get { return keyData; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * SubjectPublicKeyInfo ::= Sequence {
+         *                          algorithm AlgorithmIdentifier,
+         *                          publicKey BIT STRING }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(algID, keyData); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/SubjectPublicKeyInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/SubjectPublicKeyInfo.cs.meta new file mode 100644 index 000000000..c37e77c54 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/SubjectPublicKeyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 541f1fea72adbd644a70264d4145b14f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/TBSCertList.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/TBSCertList.cs new file mode 100644 index 000000000..afc491830 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/TBSCertList.cs @@ -0,0 +1,285 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class CrlEntry + : Asn1Encodable + { + internal Asn1Sequence seq; + internal DerInteger userCertificate; + internal Time revocationDate; + internal X509Extensions crlEntryExtensions; + + public CrlEntry(Asn1Sequence seq) + { + if (seq.Count < 2 || seq.Count > 3) + throw new ArgumentException("Bad sequence size: " + seq.Count); + + this.seq = seq; + + userCertificate = DerInteger.GetInstance(seq[0]); + revocationDate = Time.GetInstance(seq[1]); + } + + public DerInteger UserCertificate + { + get { return userCertificate; } + } + + public Time RevocationDate + { + get { return revocationDate; } + } + + public X509Extensions Extensions + { + get + { + if (crlEntryExtensions == null && seq.Count == 3) + { + crlEntryExtensions = X509Extensions.GetInstance(seq[2]); + } + + return crlEntryExtensions; + } + } + + public override Asn1Object ToAsn1Object() + { + return seq; + } + } + + /** + * PKIX RFC-2459 - TbsCertList object. + *
+     * TbsCertList  ::=  Sequence  {
+     *      version                 Version OPTIONAL,
+     *                                   -- if present, shall be v2
+     *      signature               AlgorithmIdentifier,
+     *      issuer                  Name,
+     *      thisUpdate              Time,
+     *      nextUpdate              Time OPTIONAL,
+     *      revokedCertificates     Sequence OF Sequence  {
+     *           userCertificate         CertificateSerialNumber,
+     *           revocationDate          Time,
+     *           crlEntryExtensions      Extensions OPTIONAL
+     *                                         -- if present, shall be v2
+     *                                }  OPTIONAL,
+     *      crlExtensions           [0]  EXPLICIT Extensions OPTIONAL
+     *                                         -- if present, shall be v2
+     *                                }
+     * 
+ */ + public class TbsCertificateList + : Asn1Encodable + { + private class RevokedCertificatesEnumeration + : IEnumerable + { + private readonly IEnumerable en; + + internal RevokedCertificatesEnumeration(IEnumerable en) + { + this.en = en; + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + return new RevokedCertificatesEnumerator(en.GetEnumerator()); + } + + private class RevokedCertificatesEnumerator + : IEnumerator + { + private readonly IEnumerator e; + + internal RevokedCertificatesEnumerator(IEnumerator e) + { + this.e = e; + } + + public virtual void Dispose() + { + } + + public bool MoveNext() + { + return e.MoveNext(); + } + + public void Reset() + { + e.Reset(); + } + + object System.Collections.IEnumerator.Current + { + get { return Current; } + } + + public CrlEntry Current + { + get { return new CrlEntry(Asn1Sequence.GetInstance(e.Current)); } + } + } + } + + internal Asn1Sequence seq; + internal DerInteger version; + internal AlgorithmIdentifier signature; + internal X509Name issuer; + internal Time thisUpdate; + internal Time nextUpdate; + internal Asn1Sequence revokedCertificates; + internal X509Extensions crlExtensions; + + public static TbsCertificateList GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static TbsCertificateList GetInstance( + object obj) + { + TbsCertificateList list = obj as TbsCertificateList; + + if (obj == null || list != null) + { + return list; + } + + if (obj is Asn1Sequence) + { + return new TbsCertificateList((Asn1Sequence) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + internal TbsCertificateList( + Asn1Sequence seq) + { + if (seq.Count < 3 || seq.Count > 7) + { + throw new ArgumentException("Bad sequence size: " + seq.Count); + } + + int seqPos = 0; + + this.seq = seq; + + if (seq[seqPos] is DerInteger) + { + version = DerInteger.GetInstance(seq[seqPos++]); + } + else + { + version = new DerInteger(0); + } + + signature = AlgorithmIdentifier.GetInstance(seq[seqPos++]); + issuer = X509Name.GetInstance(seq[seqPos++]); + thisUpdate = Time.GetInstance(seq[seqPos++]); + + if (seqPos < seq.Count + && (seq[seqPos] is Asn1UtcTime + || seq[seqPos] is Asn1GeneralizedTime + || seq[seqPos] is Time)) + { + nextUpdate = Time.GetInstance(seq[seqPos++]); + } + + if (seqPos < seq.Count + && !(seq[seqPos] is Asn1TaggedObject)) + { + revokedCertificates = Asn1Sequence.GetInstance(seq[seqPos++]); + } + + if (seqPos < seq.Count + && seq[seqPos] is Asn1TaggedObject) + { + crlExtensions = X509Extensions.GetInstance(seq[seqPos]); + } + } + + public int Version + { + get { return version.IntValueExact + 1; } + } + + public DerInteger VersionNumber + { + get { return version; } + } + + public AlgorithmIdentifier Signature + { + get { return signature; } + } + + public X509Name Issuer + { + get { return issuer; } + } + + public Time ThisUpdate + { + get { return thisUpdate; } + } + + public Time NextUpdate + { + get { return nextUpdate; } + } + + public CrlEntry[] GetRevokedCertificates() + { + if (revokedCertificates == null) + { + return new CrlEntry[0]; + } + + CrlEntry[] entries = new CrlEntry[revokedCertificates.Count]; + + for (int i = 0; i < entries.Length; i++) + { + entries[i] = new CrlEntry(Asn1Sequence.GetInstance(revokedCertificates[i])); + } + + return entries; + } + + public IEnumerable GetRevokedCertificateEnumeration() + { + if (revokedCertificates == null) + return new List(0); + + return new RevokedCertificatesEnumeration(revokedCertificates); + } + + public X509Extensions Extensions + { + get { return crlExtensions; } + } + + public override Asn1Object ToAsn1Object() + { + return seq; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/TBSCertList.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/TBSCertList.cs.meta new file mode 100644 index 000000000..8d6d72533 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/TBSCertList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6dd3b685770b5141ae5641c5efb878e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/TBSCertificateStructure.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/TBSCertificateStructure.cs new file mode 100644 index 000000000..66fd8a2ea --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/TBSCertificateStructure.cs @@ -0,0 +1,260 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * The TbsCertificate object. + *
+     * TbsCertificate ::= Sequence {
+     *      version          [ 0 ]  Version DEFAULT v1(0),
+     *      serialNumber            CertificateSerialNumber,
+     *      signature               AlgorithmIdentifier,
+     *      issuer                  Name,
+     *      validity                Validity,
+     *      subject                 Name,
+     *      subjectPublicKeyInfo    SubjectPublicKeyInfo,
+     *      issuerUniqueID    [ 1 ] IMPLICIT UniqueIdentifier OPTIONAL,
+     *      subjectUniqueID   [ 2 ] IMPLICIT UniqueIdentifier OPTIONAL,
+     *      extensions        [ 3 ] Extensions OPTIONAL
+     *      }
+     * 
+ *

+ * Note: issuerUniqueID and subjectUniqueID are both deprecated by the IETF. This class + * will parse them, but you really shouldn't be creating new ones.

+ */ + public class TbsCertificateStructure + : Asn1Encodable + { + internal Asn1Sequence seq; + internal DerInteger version; + internal DerInteger serialNumber; + internal AlgorithmIdentifier signature; + internal X509Name issuer; + internal Time startDate, endDate; + internal X509Name subject; + internal SubjectPublicKeyInfo subjectPublicKeyInfo; + internal DerBitString issuerUniqueID; + internal DerBitString subjectUniqueID; + internal X509Extensions extensions; + + public static TbsCertificateStructure GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static TbsCertificateStructure GetInstance( + object obj) + { + if (obj is TbsCertificateStructure) + return (TbsCertificateStructure) obj; + + if (obj != null) + return new TbsCertificateStructure(Asn1Sequence.GetInstance(obj)); + + return null; + } + + internal TbsCertificateStructure( + Asn1Sequence seq) + { + int seqStart = 0; + + this.seq = seq; + + // + // some certficates don't include a version number - we assume v1 + // + if (seq[0] is Asn1TaggedObject) + { + version = DerInteger.GetInstance((Asn1TaggedObject)seq[0], true); + } + else + { + seqStart = -1; // field 0 is missing! + version = new DerInteger(0); + } + + bool isV1 = false; + bool isV2 = false; + + if (version.HasValue(0)) + { + isV1 = true; + } + else if (version.HasValue(1)) + { + isV2 = true; + } + else if (!version.HasValue(2)) + { + throw new ArgumentException("version number not recognised"); + } + + serialNumber = DerInteger.GetInstance(seq[seqStart + 1]); + + signature = AlgorithmIdentifier.GetInstance(seq[seqStart + 2]); + issuer = X509Name.GetInstance(seq[seqStart + 3]); + + // + // before and after dates + // + Asn1Sequence dates = (Asn1Sequence)seq[seqStart + 4]; + + startDate = Time.GetInstance(dates[0]); + endDate = Time.GetInstance(dates[1]); + + subject = X509Name.GetInstance(seq[seqStart + 5]); + + // + // public key info. + // + subjectPublicKeyInfo = SubjectPublicKeyInfo.GetInstance(seq[seqStart + 6]); + + int extras = seq.Count - (seqStart + 6) - 1; + if (extras != 0 && isV1) + throw new ArgumentException("version 1 certificate contains extra data"); + + while (extras > 0) + { + Asn1TaggedObject extra = Asn1TaggedObject.GetInstance(seq[seqStart + 6 + extras]); + switch (extra.TagNo) + { + case 1: + { + issuerUniqueID = DerBitString.GetInstance(extra, false); + break; + } + case 2: + { + subjectUniqueID = DerBitString.GetInstance(extra, false); + break; + } + case 3: + { + if (isV2) + throw new ArgumentException("version 2 certificate cannot contain extensions"); + + extensions = X509Extensions.GetInstance(Asn1Sequence.GetInstance(extra, true)); + break; + } + default: + { + throw new ArgumentException("Unknown tag encountered in structure: " + extra.TagNo); + } + } + extras--; + } + } + + public int Version + { + get { return version.IntValueExact + 1; } + } + + public DerInteger VersionNumber + { + get { return version; } + } + + public DerInteger SerialNumber + { + get { return serialNumber; } + } + + public AlgorithmIdentifier Signature + { + get { return signature; } + } + + public X509Name Issuer + { + get { return issuer; } + } + + public Time StartDate + { + get { return startDate; } + } + + public Time EndDate + { + get { return endDate; } + } + + public X509Name Subject + { + get { return subject; } + } + + public SubjectPublicKeyInfo SubjectPublicKeyInfo + { + get { return subjectPublicKeyInfo; } + } + + public DerBitString IssuerUniqueID + { + get { return issuerUniqueID; } + } + + public DerBitString SubjectUniqueID + { + get { return subjectUniqueID; } + } + + public X509Extensions Extensions + { + get { return extensions; } + } + + public override Asn1Object ToAsn1Object() + { + string property = Org.BouncyCastle.Utilities.Platform.GetEnvironmentVariable("BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Allow_Non-DER_TBSCert"); + if (null == property || Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase("true", property)) + return seq; + + Asn1EncodableVector v = new Asn1EncodableVector(); + + // DEFAULT Zero + if (!version.HasValue(0)) + { + v.Add(new DerTaggedObject(true, 0, version)); + } + + v.Add(serialNumber, signature, issuer); + + // + // before and after dates + // + v.Add(new DerSequence(startDate, endDate)); + + if (subject != null) + { + v.Add(subject); + } + else + { + v.Add(DerSequence.Empty); + } + + v.Add(subjectPublicKeyInfo); + + // Note: implicit tag + v.AddOptionalTagged(false, 1, issuerUniqueID); + + // Note: implicit tag + v.AddOptionalTagged(false, 2, subjectUniqueID); + + v.AddOptionalTagged(true, 3, extensions); + + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/TBSCertificateStructure.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/TBSCertificateStructure.cs.meta new file mode 100644 index 000000000..d3edbb24e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/TBSCertificateStructure.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ebe58b240e863284fa86f16c303f818a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Target.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Target.cs new file mode 100644 index 000000000..9c3f53a3c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Target.cs @@ -0,0 +1,145 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * Target structure used in target information extension for attribute + * certificates from RFC 3281. + * + *
+	 *     Target  ::= CHOICE {
+	 *       targetName          [0] GeneralName,
+	 *       targetGroup         [1] GeneralName,
+	 *       targetCert          [2] TargetCert
+	 *     }
+	 * 
+ * + *

+ * The targetCert field is currently not supported and must not be used + * according to RFC 3281.

+ */ + public class Target + : Asn1Encodable, IAsn1Choice + { + public enum Choice + { + Name = 0, + Group = 1 + }; + + private readonly GeneralName targetName; + private readonly GeneralName targetGroup; + + /** + * Creates an instance of a Target from the given object. + *

+ * obj can be a Target or a {@link Asn1TaggedObject}

+ * + * @param obj The object. + * @return A Target instance. + * @throws ArgumentException if the given object cannot be + * interpreted as Target. + */ + public static Target GetInstance( + object obj) + { + if (obj is Target) + { + return (Target) obj; + } + + if (obj is Asn1TaggedObject) + { + return new Target((Asn1TaggedObject) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * Constructor from Asn1TaggedObject. + * + * @param tagObj The tagged object. + * @throws ArgumentException if the encoding is wrong. + */ + private Target( + Asn1TaggedObject tagObj) + { + switch ((Choice) tagObj.TagNo) + { + case Choice.Name: // GeneralName is already a choice so explicit + targetName = GeneralName.GetInstance(tagObj, true); + break; + case Choice.Group: + targetGroup = GeneralName.GetInstance(tagObj, true); + break; + default: + throw new ArgumentException("unknown tag: " + tagObj.TagNo); + } + } + + /** + * Constructor from given details. + *

+ * Exactly one of the parameters must be not null.

+ * + * @param type the choice type to apply to the name. + * @param name the general name. + * @throws ArgumentException if type is invalid. + */ + public Target( + Choice type, + GeneralName name) + : this(new DerTaggedObject((int) type, name)) + { + } + + /** + * @return Returns the targetGroup. + */ + public virtual GeneralName TargetGroup + { + get { return targetGroup; } + } + + /** + * @return Returns the targetName. + */ + public virtual GeneralName TargetName + { + get { return targetName; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + * + * Returns: + * + *
+		 *     Target  ::= CHOICE {
+		 *       targetName          [0] GeneralName,
+		 *       targetGroup         [1] GeneralName,
+		 *       targetCert          [2] TargetCert
+		 *     }
+		 * 
+ * + * @return an Asn1Object + */ + public override Asn1Object ToAsn1Object() + { + // GeneralName is a choice already so most be explicitly tagged + if (targetName != null) + { + return new DerTaggedObject(true, 0, targetName); + } + + return new DerTaggedObject(true, 1, targetGroup); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Target.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Target.cs.meta new file mode 100644 index 000000000..fe1c7fd10 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Target.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b4ad4b705590a2048ab897084fba3cd8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/TargetInformation.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/TargetInformation.cs new file mode 100644 index 000000000..46deb5da6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/TargetInformation.cs @@ -0,0 +1,129 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * Target information extension for attributes certificates according to RFC + * 3281. + * + *
+	 *           SEQUENCE OF Targets
+	 * 
+ * + */ + public class TargetInformation + : Asn1Encodable + { + private readonly Asn1Sequence targets; + + /** + * Creates an instance of a TargetInformation from the given object. + *

+ * obj can be a TargetInformation or a {@link Asn1Sequence}

+ * + * @param obj The object. + * @return A TargetInformation instance. + * @throws ArgumentException if the given object cannot be interpreted as TargetInformation. + */ + public static TargetInformation GetInstance( + object obj) + { + if (obj is TargetInformation) + { + return (TargetInformation) obj; + } + + if (obj is Asn1Sequence) + { + return new TargetInformation((Asn1Sequence) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * Constructor from a Asn1Sequence. + * + * @param seq The Asn1Sequence. + * @throws ArgumentException if the sequence does not contain + * correctly encoded Targets elements. + */ + private TargetInformation( + Asn1Sequence targets) + { + this.targets = targets; + } + + /** + * Returns the targets in this target information extension. + *

+ * The ArrayList is cloned before it is returned.

+ * + * @return Returns the targets. + */ + public virtual Targets[] GetTargetsObjects() + { + Targets[] result = new Targets[targets.Count]; + + for (int i = 0; i < targets.Count; ++i) + { + result[i] = Targets.GetInstance(targets[i]); + } + + return result; + } + + /** + * Constructs a target information from a single targets element. + * According to RFC 3281 only one targets element must be produced. + * + * @param targets A Targets instance. + */ + public TargetInformation( + Targets targets) + { + this.targets = new DerSequence(targets); + } + + /** + * According to RFC 3281 only one targets element must be produced. If + * multiple targets are given they must be merged in + * into one targets element. + * + * @param targets An array with {@link Targets}. + */ + public TargetInformation( + Target[] targets) + : this(new Targets(targets)) + { + } + + /** + * Produce an object suitable for an Asn1OutputStream. + * + * Returns: + * + *
+		 *          SEQUENCE OF Targets
+		 * 
+ * + *

+ * According to RFC 3281 only one targets element must be produced. If + * multiple targets are given in the constructor they are merged into one + * targets element. If this was produced from a + * {@link BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Asn1Sequence} the encoding is kept.

+ * + * @return an Asn1Object + */ + public override Asn1Object ToAsn1Object() + { + return targets; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/TargetInformation.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/TargetInformation.cs.meta new file mode 100644 index 000000000..21670680a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/TargetInformation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a0af01a9e7ae959438c7de9e59e9b10c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Targets.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Targets.cs new file mode 100644 index 000000000..24f88ef61 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Targets.cs @@ -0,0 +1,127 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * Targets structure used in target information extension for attribute + * certificates from RFC 3281. + * + *
+	 *            Targets ::= SEQUENCE OF Target
+	 *           
+	 *            Target  ::= CHOICE {
+	 *              targetName          [0] GeneralName,
+	 *              targetGroup         [1] GeneralName,
+	 *              targetCert          [2] TargetCert
+	 *            }
+	 *           
+	 *            TargetCert  ::= SEQUENCE {
+	 *              targetCertificate    IssuerSerial,
+	 *              targetName           GeneralName OPTIONAL,
+	 *              certDigestInfo       ObjectDigestInfo OPTIONAL
+	 *            }
+	 * 
+ * + * @see org.bouncycastle.asn1.x509.Target + * @see org.bouncycastle.asn1.x509.TargetInformation + */ + public class Targets + : Asn1Encodable + { + private readonly Asn1Sequence targets; + + /** + * Creates an instance of a Targets from the given object. + *

+ * obj can be a Targets or a {@link Asn1Sequence}

+ * + * @param obj The object. + * @return A Targets instance. + * @throws ArgumentException if the given object cannot be interpreted as Target. + */ + public static Targets GetInstance( + object obj) + { + if (obj is Targets) + { + return (Targets) obj; + } + + if (obj is Asn1Sequence) + { + return new Targets((Asn1Sequence) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * Constructor from Asn1Sequence. + * + * @param targets The ASN.1 SEQUENCE. + * @throws ArgumentException if the contents of the sequence are + * invalid. + */ + private Targets( + Asn1Sequence targets) + { + this.targets = targets; + } + + /** + * Constructor from given targets. + *

+ * The ArrayList is copied.

+ * + * @param targets An ArrayList of {@link Target}s. + * @see Target + * @throws ArgumentException if the ArrayList contains not only Targets. + */ + public Targets( + Target[] targets) + { + this.targets = new DerSequence(targets); + } + + /** + * Returns the targets in an ArrayList. + *

+ * The ArrayList is cloned before it is returned.

+ * + * @return Returns the targets. + */ + public virtual Target[] GetTargets() + { + Target[] result = new Target[targets.Count]; + + for (int i = 0; i < targets.Count; ++i) + { + result[i] = Target.GetInstance(targets[i]); + } + + return result; + } + + /** + * Produce an object suitable for an Asn1OutputStream. + * + * Returns: + * + *
+		 *            Targets ::= SEQUENCE OF Target
+		 * 
+ * + * @return an Asn1Object + */ + public override Asn1Object ToAsn1Object() + { + return targets; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Targets.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Targets.cs.meta new file mode 100644 index 000000000..a730be93e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Targets.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a25a5eb97af15846901b7b792706b8b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Time.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Time.cs new file mode 100644 index 000000000..d27a4d810 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Time.cs @@ -0,0 +1,115 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Globalization; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class Time + : Asn1Encodable, IAsn1Choice + { + public static Time GetInstance(object obj) + { + if (obj == null) + return null; + if (obj is Time time) + return time; + if (obj is Asn1UtcTime utcTime) + return new Time(utcTime); + if (obj is Asn1GeneralizedTime generalizedTime) + return new Time(generalizedTime); + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), nameof(obj)); + } + + public static Time GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return GetInstance(taggedObject.GetObject()); + } + + private readonly Asn1Object m_timeObject; + + public Time(Asn1GeneralizedTime generalizedTime) + { + this.m_timeObject = generalizedTime ?? throw new ArgumentNullException(nameof(generalizedTime)); + } + + public Time(Asn1UtcTime utcTime) + { + if (utcTime == null) + throw new ArgumentNullException(nameof(utcTime)); + + // Validate utcTime is in the appropriate year range + utcTime.ToDateTime(2049); + + this.m_timeObject = utcTime; + } + + /** + * creates a time object from a given date - if the date is between 1950 + * and 2049 a UTCTime object is Generated, otherwise a GeneralizedTime + * is used. + */ + public Time(DateTime date) + { + DateTime utc = date.ToUniversalTime(); + + if (utc.Year < 1950 || utc.Year > 2049) + { + m_timeObject = new DerGeneralizedTime(utc); + } + else + { + m_timeObject = new DerUtcTime(utc, 2049); + } + } + + /// + /// Return our time as DateTime. + /// + /// A date time. + public DateTime ToDateTime() + { + try + { + if (m_timeObject is Asn1UtcTime utcTime) + return utcTime.ToDateTime(2049); + + return ((Asn1GeneralizedTime)m_timeObject).ToDateTime(); + } + catch (FormatException e) + { + // this should never happen + throw new InvalidOperationException("invalid date string: " + e.Message); + } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * Time ::= CHOICE {
+         *             utcTime        UTCTime,
+         *             generalTime    GeneralizedTime }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return m_timeObject; + } + + public override string ToString() + { + if (m_timeObject is Asn1UtcTime utcTime) + return utcTime.ToDateTime(2049).ToString(@"yyyyMMddHHmmssK", DateTimeFormatInfo.InvariantInfo); + + if (m_timeObject is Asn1GeneralizedTime generalizedTime) + return generalizedTime.ToDateTime().ToString(@"yyyyMMddHHmmss.FFFFFFFK", DateTimeFormatInfo.InvariantInfo); + + throw new InvalidOperationException(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Time.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Time.cs.meta new file mode 100644 index 000000000..9d92eb23f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/Time.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 32375cfad4bb7a949954d9ef4def0986 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/UserNotice.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/UserNotice.cs new file mode 100644 index 000000000..281601ef2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/UserNotice.cs @@ -0,0 +1,113 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * UserNotice class, used in + * CertificatePolicies X509 extensions (in policy + * qualifiers). + *
+     * UserNotice ::= Sequence {
+     *      noticeRef        NoticeReference OPTIONAL,
+     *      explicitText     DisplayText OPTIONAL}
+     *
+     * 
+ * + * @see PolicyQualifierId + * @see PolicyInformation + */ + public class UserNotice + : Asn1Encodable + { + private readonly NoticeReference noticeRef; + private readonly DisplayText explicitText; + + /** + * Creates a new UserNotice instance. + * + * @param noticeRef a NoticeReference value + * @param explicitText a DisplayText value + */ + public UserNotice( + NoticeReference noticeRef, + DisplayText explicitText) + { + this.noticeRef = noticeRef; + this.explicitText = explicitText; + } + + /** + * Creates a new UserNotice instance. + * + * @param noticeRef a NoticeReference value + * @param str the explicitText field as a string. + */ + public UserNotice( + NoticeReference noticeRef, + string str) + : this(noticeRef, new DisplayText(str)) + { + } + + private UserNotice(Asn1Sequence seq) + { + if (seq.Count == 2) + { + noticeRef = NoticeReference.GetInstance(seq[0]); + explicitText = DisplayText.GetInstance(seq[1]); + } + else if (seq.Count == 1) + { + if (seq[0].ToAsn1Object() is Asn1Sequence) + { + noticeRef = NoticeReference.GetInstance(seq[0]); + explicitText = null; + } + else + { + noticeRef = null; + explicitText = DisplayText.GetInstance(seq[0]); + } + } + else if (seq.Count == 0) + { + noticeRef = null; // neither field set! + explicitText = null; + } + else + { + throw new ArgumentException("Bad sequence size: " + seq.Count); + } + } + + public static UserNotice GetInstance(object obj) + { + if (obj is UserNotice) + return (UserNotice)obj; + if (obj == null) + return null; + return new UserNotice(Asn1Sequence.GetInstance(obj)); + } + + public virtual NoticeReference NoticeRef + { + get { return noticeRef; } + } + + public virtual DisplayText ExplicitText + { + get { return explicitText; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptional(noticeRef, explicitText); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/UserNotice.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/UserNotice.cs.meta new file mode 100644 index 000000000..c052082ed --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/UserNotice.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1bacbf6042ecc245a3a8f24adb88d19 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V1TBSCertificateGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V1TBSCertificateGenerator.cs new file mode 100644 index 000000000..138a4125d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V1TBSCertificateGenerator.cs @@ -0,0 +1,112 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * Generator for Version 1 TbsCertificateStructures. + *
+     * TbsCertificate ::= Sequence {
+     *      version          [ 0 ]  Version DEFAULT v1(0),
+     *      serialNumber            CertificateSerialNumber,
+     *      signature               AlgorithmIdentifier,
+     *      issuer                  Name,
+     *      validity                Validity,
+     *      subject                 Name,
+     *      subjectPublicKeyInfo    SubjectPublicKeyInfo,
+     *      }
+     * 
+ * + */ + public class V1TbsCertificateGenerator + { + internal DerTaggedObject version = new DerTaggedObject(0, new DerInteger(0)); + internal DerInteger serialNumber; + internal AlgorithmIdentifier signature; + internal X509Name issuer; + internal Time startDate, endDate; + internal X509Name subject; + internal SubjectPublicKeyInfo subjectPublicKeyInfo; + + public V1TbsCertificateGenerator() + { + } + + public void SetSerialNumber( + DerInteger serialNumber) + { + this.serialNumber = serialNumber; + } + + public void SetSignature( + AlgorithmIdentifier signature) + { + this.signature = signature; + } + + public void SetIssuer( + X509Name issuer) + { + this.issuer = issuer; + } + + public void SetStartDate( + Time startDate) + { + this.startDate = startDate; + } + + public void SetStartDate( + Asn1UtcTime startDate) + { + this.startDate = new Time(startDate); + } + + public void SetEndDate( + Time endDate) + { + this.endDate = endDate; + } + + public void SetEndDate( + Asn1UtcTime endDate) + { + this.endDate = new Time(endDate); + } + + public void SetSubject( + X509Name subject) + { + this.subject = subject; + } + + public void SetSubjectPublicKeyInfo( + SubjectPublicKeyInfo pubKeyInfo) + { + this.subjectPublicKeyInfo = pubKeyInfo; + } + + public TbsCertificateStructure GenerateTbsCertificate() + { + if ((serialNumber == null) || (signature == null) + || (issuer == null) || (startDate == null) || (endDate == null) + || (subject == null) || (subjectPublicKeyInfo == null)) + { + throw new InvalidOperationException("not all mandatory fields set in V1 TBScertificate generator"); + } + + return new TbsCertificateStructure( + new DerSequence( + //version, - not required as default value + serialNumber, + signature, + issuer, + new DerSequence(startDate, endDate), // before and after dates + subject, + subjectPublicKeyInfo)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V1TBSCertificateGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V1TBSCertificateGenerator.cs.meta new file mode 100644 index 000000000..dc26aa102 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V1TBSCertificateGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3bf7b0d684835c0478c73f83d4d030b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V2AttributeCertificateInfoGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V2AttributeCertificateInfoGenerator.cs new file mode 100644 index 000000000..f56136919 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V2AttributeCertificateInfoGenerator.cs @@ -0,0 +1,143 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * Generator for Version 2 AttributeCertificateInfo + *
+     * AttributeCertificateInfo ::= Sequence {
+     *       version              AttCertVersion -- version is v2,
+     *       holder               Holder,
+     *       issuer               AttCertIssuer,
+     *       signature            AlgorithmIdentifier,
+     *       serialNumber         CertificateSerialNumber,
+     *       attrCertValidityPeriod   AttCertValidityPeriod,
+     *       attributes           Sequence OF Attr,
+     *       issuerUniqueID       UniqueIdentifier OPTIONAL,
+     *       extensions           Extensions OPTIONAL
+     * }
+     * 
+ * + */ + public class V2AttributeCertificateInfoGenerator + { + internal DerInteger version; + internal Holder holder; + internal AttCertIssuer issuer; + internal AlgorithmIdentifier signature; + internal DerInteger serialNumber; + internal Asn1EncodableVector attributes; + internal DerBitString issuerUniqueID; + internal X509Extensions extensions; + + // Note: validity period start/end dates stored directly + //internal AttCertValidityPeriod attrCertValidityPeriod; + internal Asn1GeneralizedTime startDate, endDate; + + public V2AttributeCertificateInfoGenerator() + { + this.version = new DerInteger(1); + attributes = new Asn1EncodableVector(); + } + + public void SetHolder( + Holder holder) + { + this.holder = holder; + } + + public void AddAttribute( + string oid, + Asn1Encodable value) + { + attributes.Add(new AttributeX509(new DerObjectIdentifier(oid), new DerSet(value))); + } + + /** + * @param attribute + */ + public void AddAttribute(AttributeX509 attribute) + { + attributes.Add(attribute); + } + + public void SetSerialNumber( + DerInteger serialNumber) + { + this.serialNumber = serialNumber; + } + + public void SetSignature( + AlgorithmIdentifier signature) + { + this.signature = signature; + } + + public void SetIssuer( + AttCertIssuer issuer) + { + this.issuer = issuer; + } + + public void SetStartDate( + Asn1GeneralizedTime startDate) + { + this.startDate = startDate; + } + + public void SetEndDate( + Asn1GeneralizedTime endDate) + { + this.endDate = endDate; + } + + public void SetIssuerUniqueID( + DerBitString issuerUniqueID) + { + this.issuerUniqueID = issuerUniqueID; + } + + public void SetExtensions( + X509Extensions extensions) + { + this.extensions = extensions; + } + + public AttributeCertificateInfo GenerateAttributeCertificateInfo() + { + if ((serialNumber == null) || (signature == null) + || (issuer == null) || (startDate == null) || (endDate == null) + || (holder == null) || (attributes == null)) + { + throw new InvalidOperationException("not all mandatory fields set in V2 AttributeCertificateInfo generator"); + } + + Asn1EncodableVector v = new Asn1EncodableVector( + version, holder, issuer, signature, serialNumber); + + // + // before and after dates => AttCertValidityPeriod + // + v.Add(new AttCertValidityPeriod(startDate, endDate)); + + // Attributes + v.Add(new DerSequence(attributes)); + + if (issuerUniqueID != null) + { + v.Add(issuerUniqueID); + } + + if (extensions != null) + { + v.Add(extensions); + } + + return AttributeCertificateInfo.GetInstance(new DerSequence(v)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V2AttributeCertificateInfoGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V2AttributeCertificateInfoGenerator.cs.meta new file mode 100644 index 000000000..cc8c5375d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V2AttributeCertificateInfoGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5bc1d69cea63ecc49ba5a62b9831c156 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V2Form.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V2Form.cs new file mode 100644 index 000000000..1f7c93fb1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V2Form.cs @@ -0,0 +1,128 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class V2Form + : Asn1Encodable + { + internal GeneralNames issuerName; + internal IssuerSerial baseCertificateID; + internal ObjectDigestInfo objectDigestInfo; + + public static V2Form GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static V2Form GetInstance(object obj) + { + if (obj is V2Form) + return (V2Form)obj; + if (obj != null) + return new V2Form(Asn1Sequence.GetInstance(obj)); + return null; + } + + public V2Form(GeneralNames issuerName) + : this(issuerName, null, null) + { + } + + public V2Form(GeneralNames issuerName, IssuerSerial baseCertificateID) + : this(issuerName, baseCertificateID, null) + { + } + + public V2Form(GeneralNames issuerName, ObjectDigestInfo objectDigestInfo) + : this(issuerName, null, objectDigestInfo) + { + } + + public V2Form( + GeneralNames issuerName, + IssuerSerial baseCertificateID, + ObjectDigestInfo objectDigestInfo) + { + this.issuerName = issuerName; + this.baseCertificateID = baseCertificateID; + this.objectDigestInfo = objectDigestInfo; + } + + private V2Form( + Asn1Sequence seq) + { + if (seq.Count > 3) + { + throw new ArgumentException("Bad sequence size: " + seq.Count); + } + + int index = 0; + + if (!(seq[0] is Asn1TaggedObject)) + { + index++; + this.issuerName = GeneralNames.GetInstance(seq[0]); + } + + for (int i = index; i != seq.Count; i++) + { + Asn1TaggedObject o = Asn1TaggedObject.GetInstance(seq[i]); + if (o.TagNo == 0) + { + baseCertificateID = IssuerSerial.GetInstance(o, false); + } + else if (o.TagNo == 1) + { + objectDigestInfo = ObjectDigestInfo.GetInstance(o, false); + } + else + { + throw new ArgumentException("Bad tag number: " + o.TagNo); + } + } + } + + public GeneralNames IssuerName + { + get { return issuerName; } + } + + public IssuerSerial BaseCertificateID + { + get { return baseCertificateID; } + } + + public ObjectDigestInfo ObjectDigestInfo + { + get { return objectDigestInfo; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         *  V2Form ::= Sequence {
+         *       issuerName            GeneralNames  OPTIONAL,
+         *       baseCertificateID     [0] IssuerSerial  OPTIONAL,
+         *       objectDigestInfo      [1] ObjectDigestInfo  OPTIONAL
+         *         -- issuerName MUST be present in this profile
+         *         -- baseCertificateID and objectDigestInfo MUST NOT
+         *         -- be present in this profile
+         *  }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptional(issuerName); + v.AddOptionalTagged(false, 0, baseCertificateID); + v.AddOptionalTagged(false, 1, objectDigestInfo); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V2Form.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V2Form.cs.meta new file mode 100644 index 000000000..cf2ef586e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V2Form.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59132af610a2a0848981b0d69a466f9b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V2TBSCertListGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V2TBSCertListGenerator.cs new file mode 100644 index 000000000..b4897853b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V2TBSCertListGenerator.cs @@ -0,0 +1,198 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * Generator for Version 2 TbsCertList structures. + *
+     *  TbsCertList  ::=  Sequence  {
+     *       version                 Version OPTIONAL,
+     *                                    -- if present, shall be v2
+     *       signature               AlgorithmIdentifier,
+     *       issuer                  Name,
+     *       thisUpdate              Time,
+     *       nextUpdate              Time OPTIONAL,
+     *       revokedCertificates     Sequence OF Sequence  {
+     *            userCertificate         CertificateSerialNumber,
+     *            revocationDate          Time,
+     *            crlEntryExtensions      Extensions OPTIONAL
+     *                                          -- if present, shall be v2
+     *                                 }  OPTIONAL,
+     *       crlExtensions           [0]  EXPLICIT Extensions OPTIONAL
+     *                                          -- if present, shall be v2
+     *                                 }
+     * 
+ * + * Note: This class may be subject to change + */ + public class V2TbsCertListGenerator + { + private DerInteger version = new DerInteger(1); + private AlgorithmIdentifier signature; + private X509Name issuer; + private Time thisUpdate, nextUpdate; + private X509Extensions extensions; + private List crlEntries; + + public V2TbsCertListGenerator() + { + } + + public void SetSignature( + AlgorithmIdentifier signature) + { + this.signature = signature; + } + + public void SetIssuer( + X509Name issuer) + { + this.issuer = issuer; + } + + public void SetThisUpdate( + Asn1UtcTime thisUpdate) + { + this.thisUpdate = new Time(thisUpdate); + } + + public void SetNextUpdate( + Asn1UtcTime nextUpdate) + { + this.nextUpdate = (nextUpdate != null) + ? new Time(nextUpdate) + : null; + } + + public void SetThisUpdate( + Time thisUpdate) + { + this.thisUpdate = thisUpdate; + } + + public void SetNextUpdate( + Time nextUpdate) + { + this.nextUpdate = nextUpdate; + } + + public void AddCrlEntry(Asn1Sequence crlEntry) + { + if (crlEntries == null) + { + crlEntries = new List(); + } + + crlEntries.Add(crlEntry); + } + + public void AddCrlEntry(DerInteger userCertificate, Asn1UtcTime revocationDate, int reason) + { + AddCrlEntry(userCertificate, new Time(revocationDate), reason); + } + + public void AddCrlEntry(DerInteger userCertificate, Time revocationDate, int reason) + { + AddCrlEntry(userCertificate, revocationDate, reason, null); + } + + public void AddCrlEntry(DerInteger userCertificate, Time revocationDate, int reason, + Asn1GeneralizedTime invalidityDate) + { + var extOids = new List(); + var extValues = new List(); + + if (reason != 0) + { + CrlReason crlReason = new CrlReason(reason); + + try + { + extOids.Add(X509Extensions.ReasonCode); + extValues.Add(new X509Extension(false, new DerOctetString(crlReason.GetEncoded()))); + } + catch (IOException e) + { + throw new ArgumentException("error encoding reason: " + e); + } + } + + if (invalidityDate != null) + { + try + { + extOids.Add(X509Extensions.InvalidityDate); + extValues.Add(new X509Extension(false, new DerOctetString(invalidityDate.GetEncoded()))); + } + catch (IOException e) + { + throw new ArgumentException("error encoding invalidityDate: " + e); + } + } + + if (extOids.Count != 0) + { + AddCrlEntry(userCertificate, revocationDate, new X509Extensions(extOids, extValues)); + } + else + { + AddCrlEntry(userCertificate, revocationDate, null); + } + } + + public void AddCrlEntry(DerInteger userCertificate, Time revocationDate, X509Extensions extensions) + { + Asn1EncodableVector v = new Asn1EncodableVector(userCertificate, revocationDate); + + if (extensions != null) + { + v.Add(extensions); + } + + AddCrlEntry(new DerSequence(v)); + } + + public void SetExtensions( + X509Extensions extensions) + { + this.extensions = extensions; + } + + public TbsCertificateList GenerateTbsCertList() + { + if ((signature == null) || (issuer == null) || (thisUpdate == null)) + { + throw new InvalidOperationException("Not all mandatory fields set in V2 TbsCertList generator."); + } + + Asn1EncodableVector v = new Asn1EncodableVector( + version, signature, issuer, thisUpdate); + + if (nextUpdate != null) + { + v.Add(nextUpdate); + } + + // Add CRLEntries if they exist + if (crlEntries != null) + { + v.Add(new DerSequence(crlEntries.ToArray())); + } + + if (extensions != null) + { + v.Add(new DerTaggedObject(0, extensions)); + } + + return new TbsCertificateList(new DerSequence(v)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V2TBSCertListGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V2TBSCertListGenerator.cs.meta new file mode 100644 index 000000000..72b742b04 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V2TBSCertListGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c78e8b920c4cda4439f32c1d3ee8c8bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V3TBSCertificateGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V3TBSCertificateGenerator.cs new file mode 100644 index 000000000..1b6a18e99 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V3TBSCertificateGenerator.cs @@ -0,0 +1,172 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * Generator for Version 3 TbsCertificateStructures. + *
+     * TbsCertificate ::= Sequence {
+     *      version          [ 0 ]  Version DEFAULT v1(0),
+     *      serialNumber            CertificateSerialNumber,
+     *      signature               AlgorithmIdentifier,
+     *      issuer                  Name,
+     *      validity                Validity,
+     *      subject                 Name,
+     *      subjectPublicKeyInfo    SubjectPublicKeyInfo,
+     *      issuerUniqueID    [ 1 ] IMPLICIT UniqueIdentifier OPTIONAL,
+     *      subjectUniqueID   [ 2 ] IMPLICIT UniqueIdentifier OPTIONAL,
+     *      extensions        [ 3 ] Extensions OPTIONAL
+     *      }
+     * 
+ * + */ + public class V3TbsCertificateGenerator + { + internal DerTaggedObject version = new DerTaggedObject(0, new DerInteger(2)); + internal DerInteger serialNumber; + internal AlgorithmIdentifier signature; + internal X509Name issuer; + internal Time startDate, endDate; + internal X509Name subject; + internal SubjectPublicKeyInfo subjectPublicKeyInfo; + internal X509Extensions extensions; + + private bool altNamePresentAndCritical; + private DerBitString issuerUniqueID; + private DerBitString subjectUniqueID; + + public V3TbsCertificateGenerator() + { + } + + public void SetSerialNumber( + DerInteger serialNumber) + { + this.serialNumber = serialNumber; + } + + public void SetSignature( + AlgorithmIdentifier signature) + { + this.signature = signature; + } + + public void SetIssuer( + X509Name issuer) + { + this.issuer = issuer; + } + + public void SetStartDate( + Asn1UtcTime startDate) + { + this.startDate = new Time(startDate); + } + + public void SetStartDate( + Time startDate) + { + this.startDate = startDate; + } + + public void SetEndDate( + Asn1UtcTime endDate) + { + this.endDate = new Time(endDate); + } + + public void SetEndDate( + Time endDate) + { + this.endDate = endDate; + } + + public void SetSubject( + X509Name subject) + { + this.subject = subject; + } + + public void SetIssuerUniqueID( + DerBitString uniqueID) + { + this.issuerUniqueID = uniqueID; + } + + public void SetSubjectUniqueID( + DerBitString uniqueID) + { + this.subjectUniqueID = uniqueID; + } + + public void SetSubjectPublicKeyInfo( + SubjectPublicKeyInfo pubKeyInfo) + { + this.subjectPublicKeyInfo = pubKeyInfo; + } + + public void SetExtensions( + X509Extensions extensions) + { + this.extensions = extensions; + + if (extensions != null) + { + X509Extension altName = extensions.GetExtension(X509Extensions.SubjectAlternativeName); + + if (altName != null && altName.IsCritical) + { + altNamePresentAndCritical = true; + } + } + } + + public TbsCertificateStructure GenerateTbsCertificate() + { + if ((serialNumber == null) || (signature == null) + || (issuer == null) || (startDate == null) || (endDate == null) + || (subject == null && !altNamePresentAndCritical) + || (subjectPublicKeyInfo == null)) + { + throw new InvalidOperationException("not all mandatory fields set in V3 TBScertificate generator"); + } + + DerSequence validity = new DerSequence(startDate, endDate); // before and after dates + + Asn1EncodableVector v = new Asn1EncodableVector( + version, serialNumber, signature, issuer, validity); + + if (subject != null) + { + v.Add(subject); + } + else + { + v.Add(DerSequence.Empty); + } + + v.Add(subjectPublicKeyInfo); + + if (issuerUniqueID != null) + { + v.Add(new DerTaggedObject(false, 1, issuerUniqueID)); + } + + if (subjectUniqueID != null) + { + v.Add(new DerTaggedObject(false, 2, subjectUniqueID)); + } + + if (extensions != null) + { + v.Add(new DerTaggedObject(3, extensions)); + } + + return new TbsCertificateStructure(new DerSequence(v)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V3TBSCertificateGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V3TBSCertificateGenerator.cs.meta new file mode 100644 index 000000000..f14d4d096 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/V3TBSCertificateGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e7cc7fb6ecbe8a439c121350604ca1c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Attributes.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Attributes.cs new file mode 100644 index 000000000..2c51a2545 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Attributes.cs @@ -0,0 +1,13 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class X509Attributes + { + public static readonly DerObjectIdentifier RoleSyntax = new DerObjectIdentifier("2.5.4.72"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Attributes.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Attributes.cs.meta new file mode 100644 index 000000000..921a32b41 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Attributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b1f8646b5113813429054946ba591142 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509CertificateStructure.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509CertificateStructure.cs new file mode 100644 index 000000000..e088019fc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509CertificateStructure.cs @@ -0,0 +1,136 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * an X509Certificate structure. + *
+     *  Certificate ::= Sequence {
+     *      tbsCertificate          TbsCertificate,
+     *      signatureAlgorithm      AlgorithmIdentifier,
+     *      signature               BIT STRING
+     *  }
+     * 
+ */ + public class X509CertificateStructure + : Asn1Encodable + { + private readonly TbsCertificateStructure tbsCert; + private readonly AlgorithmIdentifier sigAlgID; + private readonly DerBitString sig; + + public static X509CertificateStructure GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static X509CertificateStructure GetInstance( + object obj) + { + if (obj is X509CertificateStructure) + return (X509CertificateStructure)obj; + if (obj == null) + return null; + return new X509CertificateStructure(Asn1Sequence.GetInstance(obj)); + } + + public X509CertificateStructure( + TbsCertificateStructure tbsCert, + AlgorithmIdentifier sigAlgID, + DerBitString sig) + { + if (tbsCert == null) + throw new ArgumentNullException("tbsCert"); + if (sigAlgID == null) + throw new ArgumentNullException("sigAlgID"); + if (sig == null) + throw new ArgumentNullException("sig"); + + this.tbsCert = tbsCert; + this.sigAlgID = sigAlgID; + this.sig = sig; + } + + private X509CertificateStructure( + Asn1Sequence seq) + { + if (seq.Count != 3) + throw new ArgumentException("sequence wrong size for a certificate", "seq"); + + // + // correct x509 certficate + // + tbsCert = TbsCertificateStructure.GetInstance(seq[0]); + sigAlgID = AlgorithmIdentifier.GetInstance(seq[1]); + sig = DerBitString.GetInstance(seq[2]); + } + + public TbsCertificateStructure TbsCertificate + { + get { return tbsCert; } + } + + public int Version + { + get { return tbsCert.Version; } + } + + public DerInteger SerialNumber + { + get { return tbsCert.SerialNumber; } + } + + public X509Name Issuer + { + get { return tbsCert.Issuer; } + } + + public Time StartDate + { + get { return tbsCert.StartDate; } + } + + public Time EndDate + { + get { return tbsCert.EndDate; } + } + + public X509Name Subject + { + get { return tbsCert.Subject; } + } + + public SubjectPublicKeyInfo SubjectPublicKeyInfo + { + get { return tbsCert.SubjectPublicKeyInfo; } + } + + public AlgorithmIdentifier SignatureAlgorithm + { + get { return sigAlgID; } + } + + public DerBitString Signature + { + get { return sig; } + } + + public byte[] GetSignatureOctets() + { + return sig.GetOctets(); + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(tbsCert, sigAlgID, sig); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509CertificateStructure.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509CertificateStructure.cs.meta new file mode 100644 index 000000000..2eba51a84 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509CertificateStructure.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 07b8281eb25e0f54389db97a4909a94b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509DefaultEntryConverter.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509DefaultEntryConverter.cs new file mode 100644 index 000000000..279ad4c27 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509DefaultEntryConverter.cs @@ -0,0 +1,67 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * The default converter for X509 DN entries when going from their + * string value to ASN.1 strings. + */ + public class X509DefaultEntryConverter + : X509NameEntryConverter + { + /** + * Apply default conversion for the given value depending on the oid + * and the character range of the value. + * + * @param oid the object identifier for the DN entry + * @param value the value associated with it + * @return the ASN.1 equivalent for the string value. + */ + public override Asn1Object GetConvertedValue( + DerObjectIdentifier oid, + string value) + { + if (value.Length != 0 && value[0] == '#') + { + try + { + return ConvertHexEncoded(value, 1); + } + catch (IOException) + { + throw new Exception("can't recode value for oid " + oid.Id); + } + } + + if (value.Length != 0 && value[0] == '\\') + { + value = value.Substring(1); + } + + if (oid.Equals(X509Name.EmailAddress) || oid.Equals(X509Name.DC)) + { + return new DerIA5String(value); + } + + if (oid.Equals(X509Name.DateOfBirth)) // accept time string as well as # (for compatibility) + { + return new Asn1GeneralizedTime(value); + } + + if (oid.Equals(X509Name.C) + || oid.Equals(X509Name.SerialNumber) + || oid.Equals(X509Name.DnQualifier) + || oid.Equals(X509Name.TelephoneNumber)) + { + return new DerPrintableString(value); + } + + return new DerUtf8String(value); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509DefaultEntryConverter.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509DefaultEntryConverter.cs.meta new file mode 100644 index 000000000..943635711 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509DefaultEntryConverter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d2bf5c5a95b4e0d448438db02c8064bc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Extension.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Extension.cs new file mode 100644 index 000000000..5ecb78f69 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Extension.cs @@ -0,0 +1,83 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * an object for the elements in the X.509 V3 extension block. + */ + public class X509Extension + { + internal bool critical; + internal Asn1OctetString value; + + public X509Extension( + DerBoolean critical, + Asn1OctetString value) + { + if (critical == null) + { + throw new ArgumentNullException("critical"); + } + + this.critical = critical.IsTrue; + this.value = value; + } + + public X509Extension( + bool critical, + Asn1OctetString value) + { + this.critical = critical; + this.value = value; + } + + public bool IsCritical { get { return critical; } } + + public Asn1OctetString Value { get { return value; } } + + public Asn1Encodable GetParsedValue() + { + return ConvertValueToObject(this); + } + + public override int GetHashCode() + { + int vh = this.Value.GetHashCode(); + + return IsCritical ? vh : ~vh; + } + + public override bool Equals( + object obj) + { + X509Extension other = obj as X509Extension; + if (other == null) + { + return false; + } + + return Value.Equals(other.Value) && IsCritical == other.IsCritical; + } + + /// Convert the value of the passed in extension to an object. + /// The extension to parse. + /// The object the value string contains. + /// If conversion is not possible. + public static Asn1Object ConvertValueToObject( + X509Extension ext) + { + try + { + return Asn1Object.FromByteArray(ext.Value.GetOctets()); + } + catch (Exception e) + { + throw new ArgumentException("can't convert extension", e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Extension.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Extension.cs.meta new file mode 100644 index 000000000..1c6643cea --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Extension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bdf1efbea63a3c94781a5a0b7a673bb0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Extensions.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Extensions.cs new file mode 100644 index 000000000..cd4cca107 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Extensions.cs @@ -0,0 +1,401 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public class X509Extensions + : Asn1Encodable + { + /** + * Subject Directory Attributes + */ + public static readonly DerObjectIdentifier SubjectDirectoryAttributes = new DerObjectIdentifier("2.5.29.9"); + + /** + * Subject Key Identifier + */ + public static readonly DerObjectIdentifier SubjectKeyIdentifier = new DerObjectIdentifier("2.5.29.14"); + + /** + * Key Usage + */ + public static readonly DerObjectIdentifier KeyUsage = new DerObjectIdentifier("2.5.29.15"); + + /** + * Private Key Usage Period + */ + public static readonly DerObjectIdentifier PrivateKeyUsagePeriod = new DerObjectIdentifier("2.5.29.16"); + + /** + * Subject Alternative Name + */ + public static readonly DerObjectIdentifier SubjectAlternativeName = new DerObjectIdentifier("2.5.29.17"); + + /** + * Issuer Alternative Name + */ + public static readonly DerObjectIdentifier IssuerAlternativeName = new DerObjectIdentifier("2.5.29.18"); + + /** + * Basic Constraints + */ + public static readonly DerObjectIdentifier BasicConstraints = new DerObjectIdentifier("2.5.29.19"); + + /** + * CRL Number + */ + public static readonly DerObjectIdentifier CrlNumber = new DerObjectIdentifier("2.5.29.20"); + + /** + * Reason code + */ + public static readonly DerObjectIdentifier ReasonCode = new DerObjectIdentifier("2.5.29.21"); + + /** + * Hold Instruction Code + */ + public static readonly DerObjectIdentifier InstructionCode = new DerObjectIdentifier("2.5.29.23"); + + /** + * Invalidity Date + */ + public static readonly DerObjectIdentifier InvalidityDate = new DerObjectIdentifier("2.5.29.24"); + + /** + * Delta CRL indicator + */ + public static readonly DerObjectIdentifier DeltaCrlIndicator = new DerObjectIdentifier("2.5.29.27"); + + /** + * Issuing Distribution Point + */ + public static readonly DerObjectIdentifier IssuingDistributionPoint = new DerObjectIdentifier("2.5.29.28"); + + /** + * Certificate Issuer + */ + public static readonly DerObjectIdentifier CertificateIssuer = new DerObjectIdentifier("2.5.29.29"); + + /** + * Name Constraints + */ + public static readonly DerObjectIdentifier NameConstraints = new DerObjectIdentifier("2.5.29.30"); + + /** + * CRL Distribution Points + */ + public static readonly DerObjectIdentifier CrlDistributionPoints = new DerObjectIdentifier("2.5.29.31"); + + /** + * Certificate Policies + */ + public static readonly DerObjectIdentifier CertificatePolicies = new DerObjectIdentifier("2.5.29.32"); + + /** + * Policy Mappings + */ + public static readonly DerObjectIdentifier PolicyMappings = new DerObjectIdentifier("2.5.29.33"); + + /** + * Authority Key Identifier + */ + public static readonly DerObjectIdentifier AuthorityKeyIdentifier = new DerObjectIdentifier("2.5.29.35"); + + /** + * Policy Constraints + */ + public static readonly DerObjectIdentifier PolicyConstraints = new DerObjectIdentifier("2.5.29.36"); + + /** + * Extended Key Usage + */ + public static readonly DerObjectIdentifier ExtendedKeyUsage = new DerObjectIdentifier("2.5.29.37"); + + /** + * Freshest CRL + */ + public static readonly DerObjectIdentifier FreshestCrl = new DerObjectIdentifier("2.5.29.46"); + + /** + * Inhibit Any Policy + */ + public static readonly DerObjectIdentifier InhibitAnyPolicy = new DerObjectIdentifier("2.5.29.54"); + + /** + * Authority Info Access + */ + public static readonly DerObjectIdentifier AuthorityInfoAccess = new DerObjectIdentifier("1.3.6.1.5.5.7.1.1"); + + /** + * Subject Info Access + */ + public static readonly DerObjectIdentifier SubjectInfoAccess = new DerObjectIdentifier("1.3.6.1.5.5.7.1.11"); + + /** + * Logo Type + */ + public static readonly DerObjectIdentifier LogoType = new DerObjectIdentifier("1.3.6.1.5.5.7.1.12"); + + /** + * BiometricInfo + */ + public static readonly DerObjectIdentifier BiometricInfo = new DerObjectIdentifier("1.3.6.1.5.5.7.1.2"); + + /** + * QCStatements + */ + public static readonly DerObjectIdentifier QCStatements = new DerObjectIdentifier("1.3.6.1.5.5.7.1.3"); + + /** + * Audit identity extension in attribute certificates. + */ + public static readonly DerObjectIdentifier AuditIdentity = new DerObjectIdentifier("1.3.6.1.5.5.7.1.4"); + + /** + * NoRevAvail extension in attribute certificates. + */ + public static readonly DerObjectIdentifier NoRevAvail = new DerObjectIdentifier("2.5.29.56"); + + /** + * TargetInformation extension in attribute certificates. + */ + public static readonly DerObjectIdentifier TargetInformation = new DerObjectIdentifier("2.5.29.55"); + + /** + * Expired Certificates on CRL extension + */ + public static readonly DerObjectIdentifier ExpiredCertsOnCrl = new DerObjectIdentifier("2.5.29.60"); + + private readonly Dictionary m_extensions = + new Dictionary(); + private readonly List m_ordering; + + public static X509Extension GetExtension(X509Extensions extensions, DerObjectIdentifier oid) + { + return null == extensions ? null : extensions.GetExtension(oid); + } + + public static Asn1Encodable GetExtensionParsedValue(X509Extensions extensions, DerObjectIdentifier oid) + { + return null == extensions ? null : extensions.GetExtensionParsedValue(oid); + } + + public static X509Extensions GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); + } + + public static X509Extensions GetInstance( + object obj) + { + if (obj == null || obj is X509Extensions) + { + return (X509Extensions) obj; + } + + if (obj is Asn1Sequence) + { + return new X509Extensions((Asn1Sequence) obj); + } + + if (obj is Asn1TaggedObject) + { + return GetInstance(((Asn1TaggedObject) obj).GetObject()); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * Constructor from Asn1Sequence. + * + * the extensions are a list of constructed sequences, either with (Oid, OctetString) or (Oid, Boolean, OctetString) + */ + private X509Extensions(Asn1Sequence seq) + { + m_ordering = new List(); + + foreach (Asn1Encodable ae in seq) + { + Asn1Sequence s = Asn1Sequence.GetInstance(ae.ToAsn1Object()); + + if (s.Count < 2 || s.Count > 3) + throw new ArgumentException("Bad sequence size: " + s.Count); + + DerObjectIdentifier oid = DerObjectIdentifier.GetInstance(s[0].ToAsn1Object()); + + bool isCritical = s.Count == 3 + && DerBoolean.GetInstance(s[1].ToAsn1Object()).IsTrue; + + Asn1OctetString octets = Asn1OctetString.GetInstance(s[s.Count - 1].ToAsn1Object()); + + if (m_extensions.ContainsKey(oid)) + throw new ArgumentException("repeated extension found: " + oid); + + m_extensions.Add(oid, new X509Extension(isCritical, octets)); + m_ordering.Add(oid); + } + } + + /** + * constructor from a table of extensions. + *

+ * it's is assumed the table contains Oid/string pairs.

+ */ + public X509Extensions(IDictionary extensions) + : this(null, extensions) + { + } + + /** + * Constructor from a table of extensions with ordering. + *

+ * It's is assumed the table contains Oid/string pairs.

+ */ + public X509Extensions(IList ordering, + IDictionary extensions) + { + if (ordering == null) + { + m_ordering = new List(extensions.Keys); + } + else + { + m_ordering = new List(ordering); + } + + foreach (DerObjectIdentifier oid in m_ordering) + { + m_extensions.Add(oid, extensions[oid]); + } + } + + /** + * Constructor from two vectors + * + * @param objectIDs an ArrayList of the object identifiers. + * @param values an ArrayList of the extension values. + */ + public X509Extensions(IList oids, IList values) + { + m_ordering = new List(oids); + + int count = 0; + foreach (DerObjectIdentifier oid in m_ordering) + { + m_extensions.Add(oid, values[count++]); + } + } + + /** + * return an Enumeration of the extension field's object ids. + */ + public IEnumerable ExtensionOids + { + get { return CollectionUtilities.Proxy(m_ordering); } + } + + /** + * return the extension represented by the object identifier + * passed in. + * + * @return the extension if it's present, null otherwise. + */ + public X509Extension GetExtension(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(m_extensions, oid); + } + + /** + * return the parsed value of the extension represented by the object identifier + * passed in. + * + * @return the parsed value of the extension if it's present, null otherwise. + */ + public Asn1Encodable GetExtensionParsedValue(DerObjectIdentifier oid) + { + return GetExtension(oid)?.GetParsedValue(); + } + + /** + *
+		 *     Extensions        ::=   SEQUENCE SIZE (1..MAX) OF Extension
+		 *
+		 *     Extension         ::=   SEQUENCE {
+		 *        extnId            EXTENSION.&id ({ExtensionSet}),
+		 *        critical          BOOLEAN DEFAULT FALSE,
+		 *        extnValue         OCTET STRING }
+		 * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(m_ordering.Count); + + foreach (DerObjectIdentifier oid in m_ordering) + { + X509Extension ext = m_extensions[oid]; + if (ext.IsCritical) + { + v.Add(new DerSequence(oid, DerBoolean.True, ext.Value)); + } + else + { + v.Add(new DerSequence(oid, ext.Value)); + } + } + + return new DerSequence(v); + } + + public bool Equivalent(X509Extensions other) + { + if (m_extensions.Count != other.m_extensions.Count) + return false; + + foreach (var entry in m_extensions) + { + if (!entry.Value.Equals(other.GetExtension(entry.Key))) + return false; + } + + return true; + } + + public DerObjectIdentifier[] GetExtensionOids() + { + return m_ordering.ToArray(); + } + + public DerObjectIdentifier[] GetNonCriticalExtensionOids() + { + return GetExtensionOids(false); + } + + public DerObjectIdentifier[] GetCriticalExtensionOids() + { + return GetExtensionOids(true); + } + + private DerObjectIdentifier[] GetExtensionOids(bool isCritical) + { + var oids = new List(); + + foreach (DerObjectIdentifier oid in m_ordering) + { + if (m_extensions[oid].IsCritical == isCritical) + { + oids.Add(oid); + } + } + + return oids.ToArray(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Extensions.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Extensions.cs.meta new file mode 100644 index 000000000..3b11f40a7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Extensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00b54aa58571c6e429b23126f5560710 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509ExtensionsGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509ExtensionsGenerator.cs new file mode 100644 index 000000000..8e4d9d9ea --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509ExtensionsGenerator.cs @@ -0,0 +1,122 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /// Generator for X.509 extensions + public class X509ExtensionsGenerator + { + private Dictionary m_extensions = + new Dictionary(); + private List m_ordering = new List(); + + private static readonly ISet m_dupsAllowed = new HashSet() + { + X509Extensions.SubjectAlternativeName, + X509Extensions.IssuerAlternativeName, + X509Extensions.SubjectDirectoryAttributes, + X509Extensions.CertificateIssuer + }; + + /// Reset the generator + public void Reset() + { + m_extensions = new Dictionary(); + m_ordering = new List(); + } + + /// + /// Add an extension with the given oid and the passed in value to be included + /// in the OCTET STRING associated with the extension. + /// + /// OID for the extension. + /// True if critical, false otherwise. + /// The ASN.1 object to be included in the extension. + public void AddExtension(DerObjectIdentifier oid, bool critical, Asn1Encodable extValue) + { + byte[] encoded; + try + { + encoded = extValue.GetDerEncoded(); + } + catch (Exception e) + { + throw new ArgumentException("error encoding value: " + e); + } + + this.AddExtension(oid, critical, encoded); + } + + /// + /// Add an extension with the given oid and the passed in byte array to be wrapped + /// in the OCTET STRING associated with the extension. + /// + /// OID for the extension. + /// True if critical, false otherwise. + /// The byte array to be wrapped. + public void AddExtension(DerObjectIdentifier oid, bool critical, byte[] extValue) + { + if (m_extensions.TryGetValue(oid, out X509Extension existingExtension)) + { + if (!m_dupsAllowed.Contains(oid)) + throw new ArgumentException("extension " + oid + " already added"); + + Asn1Sequence seq1 = Asn1Sequence.GetInstance( + Asn1OctetString.GetInstance(existingExtension.Value).GetOctets()); + Asn1EncodableVector items = Asn1EncodableVector.FromEnumerable(seq1); + Asn1Sequence seq2 = Asn1Sequence.GetInstance(extValue); + + foreach (Asn1Encodable enc in seq2) + { + items.Add(enc); + } + + m_extensions[oid] = new X509Extension(existingExtension.IsCritical, + new DerOctetString(new DerSequence(items).GetEncoded())); + } + else + { + m_ordering.Add(oid); + m_extensions.Add(oid, new X509Extension(critical, new DerOctetString(extValue))); + } + } + + public void AddExtensions(X509Extensions extensions) + { + foreach (DerObjectIdentifier ident in extensions.ExtensionOids) + { + X509Extension ext = extensions.GetExtension(ident); + AddExtension(ident, ext.critical, ext.Value.GetOctets()); + } + } + + + + /// Return true if there are no extension present in this generator. + /// True if empty, false otherwise + public bool IsEmpty + { + get { return m_ordering.Count < 1; } + } + + /// Generate an X509Extensions object based on the current state of the generator. + /// An X509Extensions object + public X509Extensions Generate() + { + return new X509Extensions(m_ordering, m_extensions); + } + + internal void AddExtension(DerObjectIdentifier oid, X509Extension x509Extension) + { + if (m_extensions.ContainsKey(oid)) + throw new ArgumentException("extension " + oid + " already added"); + + m_ordering.Add(oid); + m_extensions.Add(oid, x509Extension); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509ExtensionsGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509ExtensionsGenerator.cs.meta new file mode 100644 index 000000000..e4a7e8a71 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509ExtensionsGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 17d0bf23e5bd4634286e5be7869c8ab4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Name.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Name.cs new file mode 100644 index 000000000..575b211e2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Name.cs @@ -0,0 +1,1024 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +using BestHTTP.PlatformSupport.Text; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + *
+    *     RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
+    *
+    *     RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue
+    *
+    *     AttributeTypeAndValue ::= SEQUENCE {
+    *                                   type  OBJECT IDENTIFIER,
+    *                                   value ANY }
+    * 
+ */ + public class X509Name + : Asn1Encodable + { + /** + * country code - StringType(SIZE(2)) + */ + public static readonly DerObjectIdentifier C = new DerObjectIdentifier("2.5.4.6"); + + /** + * organization - StringType(SIZE(1..64)) + */ + public static readonly DerObjectIdentifier O = new DerObjectIdentifier("2.5.4.10"); + + /** + * organizational unit name - StringType(SIZE(1..64)) + */ + public static readonly DerObjectIdentifier OU = new DerObjectIdentifier("2.5.4.11"); + + /** + * Title + */ + public static readonly DerObjectIdentifier T = new DerObjectIdentifier("2.5.4.12"); + + /** + * common name - StringType(SIZE(1..64)) + */ + public static readonly DerObjectIdentifier CN = new DerObjectIdentifier("2.5.4.3"); + + /** + * street - StringType(SIZE(1..64)) + */ + public static readonly DerObjectIdentifier Street = new DerObjectIdentifier("2.5.4.9"); + + /** + * device serial number name - StringType(SIZE(1..64)) + */ + public static readonly DerObjectIdentifier SerialNumber = new DerObjectIdentifier("2.5.4.5"); + + /** + * locality name - StringType(SIZE(1..64)) + */ + public static readonly DerObjectIdentifier L = new DerObjectIdentifier("2.5.4.7"); + + /** + * state, or province name - StringType(SIZE(1..64)) + */ + public static readonly DerObjectIdentifier ST = new DerObjectIdentifier("2.5.4.8"); + + /** + * Naming attributes of type X520name + */ + public static readonly DerObjectIdentifier Surname = new DerObjectIdentifier("2.5.4.4"); + public static readonly DerObjectIdentifier GivenName = new DerObjectIdentifier("2.5.4.42"); + public static readonly DerObjectIdentifier Initials = new DerObjectIdentifier("2.5.4.43"); + public static readonly DerObjectIdentifier Generation = new DerObjectIdentifier("2.5.4.44"); + public static readonly DerObjectIdentifier UniqueIdentifier = new DerObjectIdentifier("2.5.4.45"); + + /** + * businessCategory - DirectoryString(SIZE(1..128) + */ + public static readonly DerObjectIdentifier BusinessCategory = new DerObjectIdentifier( + "2.5.4.15"); + + /** + * postalCode - DirectoryString(SIZE(1..40) + */ + public static readonly DerObjectIdentifier PostalCode = new DerObjectIdentifier( + "2.5.4.17"); + + /** + * dnQualifier - DirectoryString(SIZE(1..64) + */ + public static readonly DerObjectIdentifier DnQualifier = new DerObjectIdentifier( + "2.5.4.46"); + + /** + * RFC 3039 Pseudonym - DirectoryString(SIZE(1..64) + */ + public static readonly DerObjectIdentifier Pseudonym = new DerObjectIdentifier( + "2.5.4.65"); + + /** + * RFC 3039 DateOfBirth - GeneralizedTime - YYYYMMDD000000Z + */ + public static readonly DerObjectIdentifier DateOfBirth = new DerObjectIdentifier( + "1.3.6.1.5.5.7.9.1"); + + /** + * RFC 3039 PlaceOfBirth - DirectoryString(SIZE(1..128) + */ + public static readonly DerObjectIdentifier PlaceOfBirth = new DerObjectIdentifier( + "1.3.6.1.5.5.7.9.2"); + + /** + * RFC 3039 DateOfBirth - PrintableString (SIZE(1)) -- "M", "F", "m" or "f" + */ + public static readonly DerObjectIdentifier Gender = new DerObjectIdentifier( + "1.3.6.1.5.5.7.9.3"); + + /** + * RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + * codes only + */ + public static readonly DerObjectIdentifier CountryOfCitizenship = new DerObjectIdentifier( + "1.3.6.1.5.5.7.9.4"); + + /** + * RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + * codes only + */ + public static readonly DerObjectIdentifier CountryOfResidence = new DerObjectIdentifier( + "1.3.6.1.5.5.7.9.5"); + + /** + * ISIS-MTT NameAtBirth - DirectoryString(SIZE(1..64) + */ + public static readonly DerObjectIdentifier NameAtBirth = new DerObjectIdentifier("1.3.36.8.3.14"); + + /** + * RFC 3039 PostalAddress - SEQUENCE SIZE (1..6) OF + * DirectoryString(SIZE(1..30)) + */ + public static readonly DerObjectIdentifier PostalAddress = new DerObjectIdentifier("2.5.4.16"); + + /** + * RFC 2256 dmdName + */ + public static readonly DerObjectIdentifier DmdName = new DerObjectIdentifier("2.5.4.54"); + + /** + * id-at-telephoneNumber + */ + public static readonly DerObjectIdentifier TelephoneNumber = X509ObjectIdentifiers.id_at_telephoneNumber; + + /** + * id-at-organizationIdentifier + */ + public static readonly DerObjectIdentifier OrganizationIdentifier = X509ObjectIdentifiers.id_at_organizationIdentifier; + + /** + * id-at-name + */ + public static readonly DerObjectIdentifier Name = X509ObjectIdentifiers.id_at_name; + + /** + * Email address (RSA PKCS#9 extension) - IA5String. + *

Note: if you're trying to be ultra orthodox, don't use this! It shouldn't be in here.

+ */ + public static readonly DerObjectIdentifier EmailAddress = PkcsObjectIdentifiers.Pkcs9AtEmailAddress; + + /** + * more from PKCS#9 + */ + public static readonly DerObjectIdentifier UnstructuredName = PkcsObjectIdentifiers.Pkcs9AtUnstructuredName; + public static readonly DerObjectIdentifier UnstructuredAddress = PkcsObjectIdentifiers.Pkcs9AtUnstructuredAddress; + + /** + * email address in Verisign certificates + */ + public static readonly DerObjectIdentifier E = EmailAddress; + + /* + * others... + */ + public static readonly DerObjectIdentifier DC = new DerObjectIdentifier("0.9.2342.19200300.100.1.25"); + + /** + * LDAP User id. + */ + public static readonly DerObjectIdentifier UID = new DerObjectIdentifier("0.9.2342.19200300.100.1.1"); + + /** + * determines whether or not strings should be processed and printed + * from back to front. + */ + public static bool DefaultReverse + { + get { lock (defaultReverse) return defaultReverse[0]; } + set { lock (defaultReverse) defaultReverse[0] = value; } + } + + private static readonly bool[] defaultReverse = { false }; + + /** + * default look up table translating OID values into their common symbols following + * the convention in RFC 2253 with a few extras + */ + private static readonly IDictionary DefaultSymbolsInternal = + new Dictionary(); + public static readonly IDictionary DefaultSymbols = + CollectionUtilities.ReadOnly(DefaultSymbolsInternal); + + /** + * look up table translating OID values into their common symbols following the convention in RFC 2253 + */ + private static readonly IDictionary RFC2253SymbolsInternal = + new Dictionary(); + public static readonly IDictionary RFC2253Symbols = + CollectionUtilities.ReadOnly(RFC2253SymbolsInternal); + + /** + * look up table translating OID values into their common symbols following the convention in RFC 1779 + * + */ + private static readonly IDictionary RFC1779SymbolsInternal = + new Dictionary(); + public static readonly IDictionary RFC1779Symbols = + CollectionUtilities.ReadOnly(RFC1779SymbolsInternal); + + /** + * look up table translating common symbols into their OIDS. + */ + private static readonly IDictionary DefaultLookupInternal = + new Dictionary(StringComparer.OrdinalIgnoreCase); + public static readonly IDictionary DefaultLookup = + CollectionUtilities.ReadOnly(DefaultLookupInternal); + + static X509Name() + { + DefaultSymbolsInternal.Add(C, "C"); + DefaultSymbolsInternal.Add(O, "O"); + DefaultSymbolsInternal.Add(T, "T"); + DefaultSymbolsInternal.Add(OU, "OU"); + DefaultSymbolsInternal.Add(CN, "CN"); + DefaultSymbolsInternal.Add(L, "L"); + DefaultSymbolsInternal.Add(ST, "ST"); + DefaultSymbolsInternal.Add(SerialNumber, "SERIALNUMBER"); + DefaultSymbolsInternal.Add(EmailAddress, "E"); + DefaultSymbolsInternal.Add(DC, "DC"); + DefaultSymbolsInternal.Add(UID, "UID"); + DefaultSymbolsInternal.Add(Street, "STREET"); + DefaultSymbolsInternal.Add(Surname, "SURNAME"); + DefaultSymbolsInternal.Add(GivenName, "GIVENNAME"); + DefaultSymbolsInternal.Add(Initials, "INITIALS"); + DefaultSymbolsInternal.Add(Generation, "GENERATION"); + DefaultSymbolsInternal.Add(UnstructuredAddress, "unstructuredAddress"); + DefaultSymbolsInternal.Add(UnstructuredName, "unstructuredName"); + DefaultSymbolsInternal.Add(UniqueIdentifier, "UniqueIdentifier"); + DefaultSymbolsInternal.Add(DnQualifier, "DN"); + DefaultSymbolsInternal.Add(Pseudonym, "Pseudonym"); + DefaultSymbolsInternal.Add(PostalAddress, "PostalAddress"); + DefaultSymbolsInternal.Add(NameAtBirth, "NameAtBirth"); + DefaultSymbolsInternal.Add(CountryOfCitizenship, "CountryOfCitizenship"); + DefaultSymbolsInternal.Add(CountryOfResidence, "CountryOfResidence"); + DefaultSymbolsInternal.Add(Gender, "Gender"); + DefaultSymbolsInternal.Add(PlaceOfBirth, "PlaceOfBirth"); + DefaultSymbolsInternal.Add(DateOfBirth, "DateOfBirth"); + DefaultSymbolsInternal.Add(PostalCode, "PostalCode"); + DefaultSymbolsInternal.Add(BusinessCategory, "BusinessCategory"); + DefaultSymbolsInternal.Add(TelephoneNumber, "TelephoneNumber"); + + RFC2253SymbolsInternal.Add(C, "C"); + RFC2253SymbolsInternal.Add(O, "O"); + RFC2253SymbolsInternal.Add(OU, "OU"); + RFC2253SymbolsInternal.Add(CN, "CN"); + RFC2253SymbolsInternal.Add(L, "L"); + RFC2253SymbolsInternal.Add(ST, "ST"); + RFC2253SymbolsInternal.Add(Street, "STREET"); + RFC2253SymbolsInternal.Add(DC, "DC"); + RFC2253SymbolsInternal.Add(UID, "UID"); + + RFC1779SymbolsInternal.Add(C, "C"); + RFC1779SymbolsInternal.Add(O, "O"); + RFC1779SymbolsInternal.Add(OU, "OU"); + RFC1779SymbolsInternal.Add(CN, "CN"); + RFC1779SymbolsInternal.Add(L, "L"); + RFC1779SymbolsInternal.Add(ST, "ST"); + RFC1779SymbolsInternal.Add(Street, "STREET"); + + DefaultLookupInternal.Add("c", C); + DefaultLookupInternal.Add("o", O); + DefaultLookupInternal.Add("t", T); + DefaultLookupInternal.Add("ou", OU); + DefaultLookupInternal.Add("cn", CN); + DefaultLookupInternal.Add("l", L); + DefaultLookupInternal.Add("st", ST); + DefaultLookupInternal.Add("serialnumber", SerialNumber); + DefaultLookupInternal.Add("street", Street); + DefaultLookupInternal.Add("emailaddress", E); + DefaultLookupInternal.Add("dc", DC); + DefaultLookupInternal.Add("e", E); + DefaultLookupInternal.Add("uid", UID); + DefaultLookupInternal.Add("surname", Surname); + DefaultLookupInternal.Add("givenname", GivenName); + DefaultLookupInternal.Add("initials", Initials); + DefaultLookupInternal.Add("generation", Generation); + DefaultLookupInternal.Add("unstructuredaddress", UnstructuredAddress); + DefaultLookupInternal.Add("unstructuredname", UnstructuredName); + DefaultLookupInternal.Add("uniqueidentifier", UniqueIdentifier); + DefaultLookupInternal.Add("dn", DnQualifier); + DefaultLookupInternal.Add("pseudonym", Pseudonym); + DefaultLookupInternal.Add("postaladdress", PostalAddress); + DefaultLookupInternal.Add("nameofbirth", NameAtBirth); + DefaultLookupInternal.Add("countryofcitizenship", CountryOfCitizenship); + DefaultLookupInternal.Add("countryofresidence", CountryOfResidence); + DefaultLookupInternal.Add("gender", Gender); + DefaultLookupInternal.Add("placeofbirth", PlaceOfBirth); + DefaultLookupInternal.Add("dateofbirth", DateOfBirth); + DefaultLookupInternal.Add("postalcode", PostalCode); + DefaultLookupInternal.Add("businesscategory", BusinessCategory); + DefaultLookupInternal.Add("telephonenumber", TelephoneNumber); + } + + private readonly List ordering = new List(); + private readonly X509NameEntryConverter converter; + + private IList values = new List(); + private IList added = new List(); + private Asn1Sequence seq; + + /** + * Return a X509Name based on the passed in tagged object. + * + * @param obj tag object holding name. + * @param explicitly true if explicitly tagged false otherwise. + * @return the X509Name + */ + public static X509Name GetInstance( + Asn1TaggedObject obj, + bool explicitly) + { + return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + } + + public static X509Name GetInstance( + object obj) + { + if (obj is X509Name) + return (X509Name)obj; + if (obj == null) + return null; + return new X509Name(Asn1Sequence.GetInstance(obj)); + } + + protected X509Name() + { + } + + /** + * Constructor from Asn1Sequence + * + * the principal will be a list of constructed sets, each containing an (OID, string) pair. + */ + protected X509Name(Asn1Sequence seq) + { + this.seq = seq; + + foreach (Asn1Encodable asn1Obj in seq) + { + Asn1Set asn1Set = Asn1Set.GetInstance(asn1Obj.ToAsn1Object()); + + for (int i = 0; i < asn1Set.Count; i++) + { + Asn1Sequence s = Asn1Sequence.GetInstance(asn1Set[i].ToAsn1Object()); + + if (s.Count != 2) + throw new ArgumentException("badly sized pair"); + + ordering.Add(DerObjectIdentifier.GetInstance(s[0].ToAsn1Object())); + + Asn1Object derValue = s[1].ToAsn1Object(); + if (derValue is IAsn1String && !(derValue is DerUniversalString)) + { + string v = ((IAsn1String)derValue).GetString(); +#if NET_STANDARD_2_1 + if (v.StartsWith('#')) +#else + if (v.StartsWith("#")) +#endif + { + v = "\\" + v; + } + + values.Add(v); + } + else + { + values.Add("#" + Hex.ToHexString(derValue.GetEncoded())); + } + + added.Add(i != 0); + } + } + } + + /** + * Constructor from a table of attributes with ordering. + *

+ * it's is assumed the table contains OID/string pairs, and the contents + * of the table are copied into an internal table as part of the + * construction process. The ordering ArrayList should contain the OIDs + * in the order they are meant to be encoded or printed in ToString.

+ */ + public X509Name( + IList ordering, + IDictionary attributes) + : this(ordering, attributes, new X509DefaultEntryConverter()) + { + } + + /** + * Constructor from a table of attributes with ordering. + *

+ * it's is assumed the table contains OID/string pairs, and the contents + * of the table are copied into an internal table as part of the + * construction process. The ordering ArrayList should contain the OIDs + * in the order they are meant to be encoded or printed in ToString.

+ *

+ * The passed in converter will be used to convert the strings into their + * ASN.1 counterparts.

+ */ + public X509Name( + IList ordering, + IDictionary attributes, + X509NameEntryConverter converter) + { + this.converter = converter; + + foreach (DerObjectIdentifier oid in ordering) + { + if (!attributes.TryGetValue(oid, out var attribute)) + throw new ArgumentException("No attribute for object id - " + oid + " - passed to distinguished name"); + + //object attribute = attributes[oid]; + //if (attribute == null) + //{ + // throw new ArgumentException("No attribute for object id - " + oid + " - passed to distinguished name"); + //} + + this.ordering.Add(oid); + this.added.Add(false); + this.values.Add(attribute); // copy the hash table + } + } + + /** + * Takes two vectors one of the oids and the other of the values. + */ + public X509Name(IList oids, IList values) + : this(oids, values, new X509DefaultEntryConverter()) + { + } + + /** + * Takes two vectors one of the oids and the other of the values. + *

+ * The passed in converter will be used to convert the strings into their + * ASN.1 counterparts.

+ */ + public X509Name(IList oids, IList values, X509NameEntryConverter converter) + { + this.converter = converter; + + if (oids.Count != values.Count) + throw new ArgumentException("'oids' must be same length as 'values'."); + + for (int i = 0; i < oids.Count; i++) + { + this.ordering.Add(oids[i]); + this.values.Add(values[i]); + this.added.Add(false); + } + } + + /** + * Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + * some such, converting it into an ordered set of name attributes. + */ + public X509Name(string dirName) + : this(DefaultReverse, DefaultLookup, dirName) + { + } + + /** + * Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + * some such, converting it into an ordered set of name attributes with each + * string value being converted to its associated ASN.1 type using the passed + * in converter. + */ + public X509Name(string dirName, X509NameEntryConverter converter) + : this(DefaultReverse, DefaultLookup, dirName, converter) + { + } + + /** + * Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + * some such, converting it into an ordered set of name attributes. If reverse + * is true, create the encoded version of the sequence starting from the + * last element in the string. + */ + public X509Name(bool reverse, string dirName) + : this(reverse, DefaultLookup, dirName) + { + } + + /** + * Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + * some such, converting it into an ordered set of name attributes with each + * string value being converted to its associated ASN.1 type using the passed + * in converter. If reverse is true the ASN.1 sequence representing the DN will + * be built by starting at the end of the string, rather than the start. + */ + public X509Name(bool reverse, string dirName, X509NameEntryConverter converter) + : this(reverse, DefaultLookup, dirName, converter) + { + } + + /** + * Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + * some such, converting it into an ordered set of name attributes. lookUp + * should provide a table of lookups, indexed by lowercase only strings and + * yielding a DerObjectIdentifier, other than that OID. and numeric oids + * will be processed automatically. + *
+ * If reverse is true, create the encoded version of the sequence + * starting from the last element in the string. + * @param reverse true if we should start scanning from the end (RFC 2553). + * @param lookUp table of names and their oids. + * @param dirName the X.500 string to be parsed. + */ + public X509Name(bool reverse, IDictionary lookup, string dirName) + : this(reverse, lookup, dirName, new X509DefaultEntryConverter()) + { + } + + private DerObjectIdentifier DecodeOid(string name, IDictionary lookup) + { + if (name.StartsWith("OID.", StringComparison.OrdinalIgnoreCase)) + return new DerObjectIdentifier(name.Substring("OID.".Length)); + + if (name[0] >= '0' && name[0] <= '9') + return new DerObjectIdentifier(name); + + if (lookup.TryGetValue(name, out var oid)) + return oid; + + throw new ArgumentException("Unknown object id - " + name + " - passed to distinguished name"); + } + + /** + * Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + * some such, converting it into an ordered set of name attributes. lookUp + * should provide a table of lookups, indexed by lowercase only strings and + * yielding a DerObjectIdentifier, other than that OID. and numeric oids + * will be processed automatically. The passed in converter is used to convert the + * string values to the right of each equals sign to their ASN.1 counterparts. + *
+ * @param reverse true if we should start scanning from the end, false otherwise. + * @param lookUp table of names and oids. + * @param dirName the string dirName + * @param converter the converter to convert string values into their ASN.1 equivalents + */ + public X509Name(bool reverse, IDictionary lookup, string dirName, + X509NameEntryConverter converter) + { + this.converter = converter; + X509NameTokenizer nTok = new X509NameTokenizer(dirName); + + while (nTok.HasMoreTokens()) + { + string token = nTok.NextToken(); + int index = token.IndexOf('='); + + if (index == -1) + throw new ArgumentException("badly formated directory string"); + + string name = token.Substring(0, index); + string value = token.Substring(index + 1); + DerObjectIdentifier oid = DecodeOid(name, lookup); + + if (value.IndexOf('+') > 0) + { + X509NameTokenizer vTok = new X509NameTokenizer(value, '+'); + string v = vTok.NextToken(); + + this.ordering.Add(oid); + this.values.Add(v); + this.added.Add(false); + + while (vTok.HasMoreTokens()) + { + string sv = vTok.NextToken(); + int ndx = sv.IndexOf('='); + + string nm = sv.Substring(0, ndx); + string vl = sv.Substring(ndx + 1); + this.ordering.Add(DecodeOid(nm, lookup)); + this.values.Add(vl); + this.added.Add(true); + } + } + else + { + this.ordering.Add(oid); + this.values.Add(value); + this.added.Add(false); + } + } + + if (reverse) + { +// this.ordering.Reverse(); +// this.values.Reverse(); +// this.added.Reverse(); + var o = new List(); + var v = new List(); + var a = new List(); + int count = 1; + + for (int i = 0; i < this.ordering.Count; i++) + { + if (!((bool) this.added[i])) + { + count = 0; + } + + int index = count++; + + o.Insert(index, this.ordering[i]); + v.Insert(index, this.values[i]); + a.Insert(index, this.added[i]); + } + + this.ordering = o; + this.values = v; + this.added = a; + } + } + + /** + * return an IList of the oids in the name, in the order they were found. + */ + public IList GetOidList() + { + return new List(ordering); + } + + /** + * return an IList of the values found in the name, in the order they + * were found. + */ + public IList GetValueList() + { + return GetValueList(null); + } + + /** + * return an IList of the values found in the name, in the order they + * were found, with the DN label corresponding to passed in oid. + */ + public IList GetValueList(DerObjectIdentifier oid) + { + var v = new List(); + for (int i = 0; i != values.Count; i++) + { + if (null == oid || oid.Equals(ordering[i])) + { + string val = (string)values[i]; + if (val.StartsWith("\\#", StringComparison.OrdinalIgnoreCase)) + { + val = val.Substring(1); + } + + v.Add(val); + } + } + return v; + } + + public override Asn1Object ToAsn1Object() + { + if (seq == null) + { + Asn1EncodableVector vec = new Asn1EncodableVector(); + Asn1EncodableVector sVec = new Asn1EncodableVector(); + DerObjectIdentifier lstOid = null; + + for (int i = 0; i != ordering.Count; i++) + { + DerObjectIdentifier oid = (DerObjectIdentifier)ordering[i]; + string str = (string)values[i]; + + if (lstOid == null + || ((bool)this.added[i])) + { + } + else + { + vec.Add(new DerSet(sVec)); + sVec = new Asn1EncodableVector(); + } + + sVec.Add( + new DerSequence( + oid, + converter.GetConvertedValue(oid, str))); + + lstOid = oid; + } + + vec.Add(new DerSet(sVec)); + + seq = new DerSequence(vec); + } + + return seq; + } + + /// The X509Name object to test equivalency against. + /// If true, the order of elements must be the same, + /// as well as the values associated with each element. + public bool Equivalent( + X509Name other, + bool inOrder) + { + if (!inOrder) + return this.Equivalent(other); + + if (other == null) + return false; + + if (other == this) + return true; + + int orderingSize = ordering.Count; + + if (orderingSize != other.ordering.Count) + return false; + + for (int i = 0; i < orderingSize; i++) + { + DerObjectIdentifier oid = (DerObjectIdentifier) ordering[i]; + DerObjectIdentifier oOid = (DerObjectIdentifier) other.ordering[i]; + + if (!oid.Equals(oOid)) + return false; + + string val = (string) values[i]; + string oVal = (string) other.values[i]; + + if (!EquivalentStrings(val, oVal)) + return false; + } + + return true; + } + + /** + * test for equivalence - note: case is ignored. + */ + public bool Equivalent( + X509Name other) + { + if (other == null) + return false; + + if (other == this) + return true; + + int orderingSize = ordering.Count; + + if (orderingSize != other.ordering.Count) + { + return false; + } + + bool[] indexes = new bool[orderingSize]; + int start, end, delta; + + if (ordering[0].Equals(other.ordering[0])) // guess forward + { + start = 0; + end = orderingSize; + delta = 1; + } + else // guess reversed - most common problem + { + start = orderingSize - 1; + end = -1; + delta = -1; + } + + for (int i = start; i != end; i += delta) + { + bool found = false; + DerObjectIdentifier oid = (DerObjectIdentifier)ordering[i]; + string value = (string)values[i]; + + for (int j = 0; j < orderingSize; j++) + { + if (indexes[j]) + { + continue; + } + + DerObjectIdentifier oOid = (DerObjectIdentifier)other.ordering[j]; + + if (oid.Equals(oOid)) + { + string oValue = (string)other.values[j]; + + if (EquivalentStrings(value, oValue)) + { + indexes[j] = true; + found = true; + break; + } + } + } + + if (!found) + { + return false; + } + } + + return true; + } + + private static bool EquivalentStrings(string s1, string s2) + { + string v1 = Canonicalize(s1); + string v2 = Canonicalize(s2); + + if (!v1.Equals(v2)) + { + v1 = StripInternalSpaces(v1); + v2 = StripInternalSpaces(v2); + + if (!v1.Equals(v2)) + return false; + } + + return true; + } + + private static string Canonicalize(string s) + { + string v = s.ToLowerInvariant().Trim(); + +#if NET_STANDARD_2_1 + if (v.StartsWith('#')) +#else + if (v.StartsWith("#")) +#endif + { + Asn1Object obj = DecodeObject(v); + if (obj is IAsn1String str) + { + v = str.GetString().ToLowerInvariant().Trim(); + } + } + + return v; + } + + private static Asn1Object DecodeObject(string v) + { + try + { + return Asn1Object.FromByteArray(Hex.DecodeStrict(v, 1, v.Length - 1)); + } + catch (IOException e) + { + throw new InvalidOperationException("unknown encoding in name: " + e.Message, e); + } + } + + private static string StripInternalSpaces(string str) + { + StringBuilder res = new StringBuilder(); + + if (str.Length != 0) + { + char c1 = str[0]; + + res.Append(c1); + + for (int k = 1; k < str.Length; k++) + { + char c2 = str[k]; + if (!(c1 == ' ' && c2 == ' ')) + { + res.Append(c2); + } + c1 = c2; + } + } + + return res.ToString(); + } + + private void AppendValue(StringBuilder buf, IDictionary oidSymbols, + DerObjectIdentifier oid, string val) + { + if (oidSymbols.TryGetValue(oid, out var sym)) + { + buf.Append(sym); + } + else + { + buf.Append(oid.Id); + } + + buf.Append('='); + + int index = buf.Length; + + buf.Append(val); + + int end = buf.Length; + + if (val.StartsWith("\\#", StringComparison.OrdinalIgnoreCase)) + { + index += 2; + } + + while (index != end) + { + if ((buf[index] == ',') + || (buf[index] == '"') + || (buf[index] == '\\') + || (buf[index] == '+') + || (buf[index] == '=') + || (buf[index] == '<') + || (buf[index] == '>') + || (buf[index] == ';')) + { + buf.Insert(index++, "\\"); + end++; + } + + index++; + } + } + + /** + * convert the structure to a string - if reverse is true the + * oids and values are listed out starting with the last element + * in the sequence (ala RFC 2253), otherwise the string will begin + * with the first element of the structure. If no string definition + * for the oid is found in oidSymbols the string value of the oid is + * added. Two standard symbol tables are provided DefaultSymbols, and + * RFC2253Symbols as part of this class. + * + * @param reverse if true start at the end of the sequence and work back. + * @param oidSymbols look up table strings for oids. + */ + public string ToString(bool reverse, IDictionary oidSymbols) + { + var components = new List(); + + StringBuilder ava = null; + + for (int i = 0; i < ordering.Count; i++) + { + if (added[i]) + { + ava.Append('+'); + AppendValue(ava, oidSymbols, ordering[i], values[i]); + } + else + { + ava = StringBuilderPool.Get(0); //new StringBuilder(); + AppendValue(ava, oidSymbols, ordering[i], values[i]); + components.Add(ava); + } + } + + if (reverse) + { + components.Reverse(); + } + + StringBuilder buf = StringBuilderPool.Get(components.Count); //new StringBuilder(); + + if (components.Count > 0) + { + buf.Append(StringBuilderPool.ReleaseAndGrab(components[0])); + + for (int i = 1; i < components.Count; ++i) + { + buf.Append(','); + buf.Append(StringBuilderPool.ReleaseAndGrab(components[i])); + } + } + + return StringBuilderPool.ReleaseAndGrab(buf); + } + + string cachedStrRepresentation = null; + public override string ToString() + { + return cachedStrRepresentation ?? (cachedStrRepresentation = ToString(DefaultReverse, DefaultSymbols)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Name.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Name.cs.meta new file mode 100644 index 000000000..e65200e09 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509Name.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c09a00533763e16488d5e052d2be7956 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509NameEntryConverter.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509NameEntryConverter.cs new file mode 100644 index 000000000..9dc322ca7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509NameEntryConverter.cs @@ -0,0 +1,91 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Globalization; +using System.IO; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * It turns out that the number of standard ways the fields in a DN should be + * encoded into their ASN.1 counterparts is rapidly approaching the + * number of machines on the internet. By default the X509Name class + * will produce UTF8Strings in line with the current recommendations (RFC 3280). + *

+ * An example of an encoder look like below: + *

+     * public class X509DirEntryConverter
+     *     : X509NameEntryConverter
+     * {
+     *     public Asn1Object GetConvertedValue(
+     *         DerObjectIdentifier  oid,
+     *         string               value)
+     *     {
+     *         if (str.Length() != 0 && str.charAt(0) == '#')
+     *         {
+     *             return ConvertHexEncoded(str, 1);
+     *         }
+     *         if (oid.Equals(EmailAddress))
+     *         {
+     *             return new DerIA5String(str);
+     *         }
+     *         else if (CanBePrintable(str))
+     *         {
+     *             return new DerPrintableString(str);
+     *         }
+     *         else if (CanBeUTF8(str))
+     *         {
+     *             return new DerUtf8String(str);
+     *         }
+     *         else
+     *         {
+     *             return new DerBmpString(str);
+     *         }
+     *     }
+     * }
+	 * 
+ *

+ */ + public abstract class X509NameEntryConverter + { + /** + * Convert an inline encoded hex string rendition of an ASN.1 + * object back into its corresponding ASN.1 object. + * + * @param str the hex encoded object + * @param off the index at which the encoding starts + * @return the decoded object + */ + protected Asn1Object ConvertHexEncoded( + string hexString, + int offset) + { + return Asn1Object.FromByteArray(Hex.DecodeStrict(hexString, offset, hexString.Length - offset)); + } + + /** + * return true if the passed in string can be represented without + * loss as a PrintableString, false otherwise. + */ + protected bool CanBePrintable( + string str) + { + return DerPrintableString.IsPrintableString(str); + } + + /** + * Convert the passed in string value into the appropriate ASN.1 + * encoded object. + * + * @param oid the oid associated with the value in the DN. + * @param value the value of the particular DN component. + * @return the ASN.1 equivalent for the value. + */ + public abstract Asn1Object GetConvertedValue(DerObjectIdentifier oid, string value); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509NameEntryConverter.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509NameEntryConverter.cs.meta new file mode 100644 index 000000000..5973d2a36 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509NameEntryConverter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa46b029d85419b43a5a45f6463a31d6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509NameTokenizer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509NameTokenizer.cs new file mode 100644 index 000000000..14845cc26 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509NameTokenizer.cs @@ -0,0 +1,108 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.Text; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + /** + * class for breaking up an X500 Name into it's component tokens, ala + * java.util.StringTokenizer. We need this class as some of the + * lightweight Java environment don't support classes like + * StringTokenizer. + */ + public class X509NameTokenizer + { + private string value; + private int index; + private char separator; + private StringBuilder buffer = new StringBuilder(); + + public X509NameTokenizer( + string oid) + : this(oid, ',') + { + } + + public X509NameTokenizer( + string oid, + char separator) + { + this.value = oid; + this.index = -1; + this.separator = separator; + } + + public bool HasMoreTokens() + { + return index != value.Length; + } + + public string NextToken() + { + if (index == value.Length) + { + return null; + } + + int end = index + 1; + bool quoted = false; + bool escaped = false; + + buffer.Remove(0, buffer.Length); + + while (end != value.Length) + { + char c = value[end]; + + if (c == '"') + { + if (!escaped) + { + quoted = !quoted; + } + else + { + buffer.Append(c); + escaped = false; + } + } + else + { + if (escaped || quoted) + { + if (c == '#' && buffer[buffer.Length - 1] == '=') + { + buffer.Append('\\'); + } + else if (c == '+' && separator != '+') + { + buffer.Append('\\'); + } + buffer.Append(c); + escaped = false; + } + else if (c == '\\') + { + escaped = true; + } + else if (c == separator) + { + break; + } + else + { + buffer.Append(c); + } + } + + end++; + } + + index = end; + + return buffer.ToString().Trim(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509NameTokenizer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509NameTokenizer.cs.meta new file mode 100644 index 000000000..bead510ee --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509NameTokenizer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8316e96f8ca1af14783eb899e5e15cbd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509ObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509ObjectIdentifiers.cs new file mode 100644 index 000000000..fa087f0b5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509ObjectIdentifiers.cs @@ -0,0 +1,65 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509 +{ + public abstract class X509ObjectIdentifiers + { + // + // base id + // + internal const string ID = "2.5.4"; + + public static readonly DerObjectIdentifier CommonName = new DerObjectIdentifier(ID + ".3"); + public static readonly DerObjectIdentifier CountryName = new DerObjectIdentifier(ID + ".6"); + public static readonly DerObjectIdentifier LocalityName = new DerObjectIdentifier(ID + ".7"); + public static readonly DerObjectIdentifier StateOrProvinceName = new DerObjectIdentifier(ID + ".8"); + public static readonly DerObjectIdentifier Organization = new DerObjectIdentifier(ID + ".10"); + public static readonly DerObjectIdentifier OrganizationalUnitName = new DerObjectIdentifier(ID + ".11"); + + public static readonly DerObjectIdentifier id_at_telephoneNumber = new DerObjectIdentifier(ID + ".20"); + public static readonly DerObjectIdentifier id_at_name = new DerObjectIdentifier(ID + ".41"); + + public static readonly DerObjectIdentifier id_at_organizationIdentifier = new DerObjectIdentifier("2.5.4.97"); + + // id-SHA1 OBJECT IDENTIFIER ::= + // {iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2) 26 } // + public static readonly DerObjectIdentifier IdSha1 = new DerObjectIdentifier("1.3.14.3.2.26"); + + // + // ripemd160 OBJECT IDENTIFIER ::= + // {iso(1) identified-organization(3) TeleTrust(36) algorithm(3) hashAlgorithm(2) RipeMD-160(1)} + // + public static readonly DerObjectIdentifier RipeMD160 = new DerObjectIdentifier("1.3.36.3.2.1"); + + // + // ripemd160WithRSAEncryption OBJECT IDENTIFIER ::= + // {iso(1) identified-organization(3) TeleTrust(36) algorithm(3) signatureAlgorithm(3) rsaSignature(1) rsaSignatureWithripemd160(2) } + // + public static readonly DerObjectIdentifier RipeMD160WithRsaEncryption = new DerObjectIdentifier("1.3.36.3.3.1.2"); + + public static readonly DerObjectIdentifier IdEARsa = new DerObjectIdentifier("2.5.8.1.1"); + + // id-pkix + public static readonly DerObjectIdentifier IdPkix = new DerObjectIdentifier("1.3.6.1.5.5.7"); + + // + // private internet extensions + // + public static readonly DerObjectIdentifier IdPE = new DerObjectIdentifier(IdPkix + ".1"); + + // + // authority information access + // + public static readonly DerObjectIdentifier IdAD = new DerObjectIdentifier(IdPkix + ".48"); + public static readonly DerObjectIdentifier IdADCAIssuers = new DerObjectIdentifier(IdAD + ".2"); + public static readonly DerObjectIdentifier IdADOcsp = new DerObjectIdentifier(IdAD + ".1"); + + // + // OID for ocsp and crl uri in AuthorityInformationAccess extension + // + public static readonly DerObjectIdentifier OcspAccessMethod = IdADOcsp; + public static readonly DerObjectIdentifier CrlAccessMethod = IdADCAIssuers; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509ObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509ObjectIdentifiers.cs.meta new file mode 100644 index 000000000..1a870b405 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/X509ObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 87dba2439330ae349ae823c87363e667 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified.meta new file mode 100644 index 000000000..bb32d8b15 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 68fd4e2cc85f3ec41b06a3e300f2e110 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/BiometricData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/BiometricData.cs new file mode 100644 index 000000000..de6bd1bc8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/BiometricData.cs @@ -0,0 +1,108 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509.Qualified +{ + /** + * The BiometricData object. + *
+    * BiometricData  ::=  SEQUENCE {
+    *       typeOfBiometricData  TypeOfBiometricData,
+    *       hashAlgorithm        AlgorithmIdentifier,
+    *       biometricDataHash    OCTET STRING,
+    *       sourceDataUri        IA5String OPTIONAL  }
+    * 
+ */ + public class BiometricData + : Asn1Encodable + { + private readonly TypeOfBiometricData typeOfBiometricData; + private readonly AlgorithmIdentifier hashAlgorithm; + private readonly Asn1OctetString biometricDataHash; + private readonly DerIA5String sourceDataUri; + + public static BiometricData GetInstance( + object obj) + { + if (obj == null || obj is BiometricData) + { + return (BiometricData)obj; + } + + if (obj is Asn1Sequence) + { + return new BiometricData(Asn1Sequence.GetInstance(obj)); + } + + throw new ArgumentException("unknown object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + private BiometricData( + Asn1Sequence seq) + { + typeOfBiometricData = TypeOfBiometricData.GetInstance(seq[0]); + hashAlgorithm = AlgorithmIdentifier.GetInstance(seq[1]); + biometricDataHash = Asn1OctetString.GetInstance(seq[2]); + + if (seq.Count > 3) + { + sourceDataUri = DerIA5String.GetInstance(seq[3]); + } + } + + public BiometricData( + TypeOfBiometricData typeOfBiometricData, + AlgorithmIdentifier hashAlgorithm, + Asn1OctetString biometricDataHash, + DerIA5String sourceDataUri) + { + this.typeOfBiometricData = typeOfBiometricData; + this.hashAlgorithm = hashAlgorithm; + this.biometricDataHash = biometricDataHash; + this.sourceDataUri = sourceDataUri; + } + + public BiometricData( + TypeOfBiometricData typeOfBiometricData, + AlgorithmIdentifier hashAlgorithm, + Asn1OctetString biometricDataHash) + { + this.typeOfBiometricData = typeOfBiometricData; + this.hashAlgorithm = hashAlgorithm; + this.biometricDataHash = biometricDataHash; + this.sourceDataUri = null; + } + + public TypeOfBiometricData TypeOfBiometricData + { + get { return typeOfBiometricData; } + } + + public AlgorithmIdentifier HashAlgorithm + { + get { return hashAlgorithm; } + } + + public Asn1OctetString BiometricDataHash + { + get { return biometricDataHash; } + } + + public DerIA5String SourceDataUri + { + get { return sourceDataUri; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(typeOfBiometricData, hashAlgorithm, biometricDataHash); + v.AddOptional(sourceDataUri); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/BiometricData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/BiometricData.cs.meta new file mode 100644 index 000000000..af9e49543 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/BiometricData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 721e9c5bde578064b8496eba5663908c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/ETSIQCObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/ETSIQCObjectIdentifiers.cs new file mode 100644 index 000000000..ae540d97e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/ETSIQCObjectIdentifiers.cs @@ -0,0 +1,23 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509.Qualified +{ + public abstract class EtsiQCObjectIdentifiers + { + // + // base id + // + public static readonly DerObjectIdentifier IdEtsiQcs = new DerObjectIdentifier("0.4.0.1862.1"); + + public static readonly DerObjectIdentifier IdEtsiQcsQcCompliance = new DerObjectIdentifier(IdEtsiQcs+".1"); + public static readonly DerObjectIdentifier IdEtsiQcsLimitValue = new DerObjectIdentifier(IdEtsiQcs+".2"); + public static readonly DerObjectIdentifier IdEtsiQcsRetentionPeriod = new DerObjectIdentifier(IdEtsiQcs+".3"); + public static readonly DerObjectIdentifier IdEtsiQcsQcSscd = new DerObjectIdentifier(IdEtsiQcs+".4"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/ETSIQCObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/ETSIQCObjectIdentifiers.cs.meta new file mode 100644 index 000000000..1b7a19e8a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/ETSIQCObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 45890795e82fa12498d9300923cf47e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/Iso4217CurrencyCode.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/Iso4217CurrencyCode.cs new file mode 100644 index 000000000..87e732e3f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/Iso4217CurrencyCode.cs @@ -0,0 +1,88 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509.Qualified +{ + /** + * The Iso4217CurrencyCode object. + *
+    * Iso4217CurrencyCode  ::=  CHOICE {
+    *       alphabetic              PrintableString (SIZE 3), --Recommended
+    *       numeric              INTEGER (1..999) }
+    * -- Alphabetic or numeric currency code as defined in ISO 4217
+    * -- It is recommended that the Alphabetic form is used
+    * 
+ */ + public class Iso4217CurrencyCode + : Asn1Encodable, IAsn1Choice + { + internal const int AlphabeticMaxSize = 3; + internal const int NumericMinSize = 1; + internal const int NumericMaxSize = 999; + + internal Asn1Encodable obj; +// internal int numeric; + + public static Iso4217CurrencyCode GetInstance( + object obj) + { + if (obj == null || obj is Iso4217CurrencyCode) + { + return (Iso4217CurrencyCode) obj; + } + + if (obj is DerInteger) + { + DerInteger numericobj = DerInteger.GetInstance(obj); + int numeric = numericobj.IntValueExact; + return new Iso4217CurrencyCode(numeric); + } + + if (obj is DerPrintableString) + { + DerPrintableString alphabetic = DerPrintableString.GetInstance(obj); + return new Iso4217CurrencyCode(alphabetic.GetString()); + } + + throw new ArgumentException("unknown object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public Iso4217CurrencyCode( + int numeric) + { + if (numeric > NumericMaxSize || numeric < NumericMinSize) + { + throw new ArgumentException("wrong size in numeric code : not in (" + NumericMinSize + ".." + NumericMaxSize + ")"); + } + + obj = new DerInteger(numeric); + } + + public Iso4217CurrencyCode( + string alphabetic) + { + if (alphabetic.Length > AlphabeticMaxSize) + { + throw new ArgumentException("wrong size in alphabetic code : max size is " + AlphabeticMaxSize); + } + + obj = new DerPrintableString(alphabetic); + } + + public bool IsAlphabetic { get { return obj is DerPrintableString; } } + + public string Alphabetic { get { return ((DerPrintableString) obj).GetString(); } } + + public int Numeric { get { return ((DerInteger)obj).IntValueExact; } } + + public override Asn1Object ToAsn1Object() + { + return obj.ToAsn1Object(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/Iso4217CurrencyCode.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/Iso4217CurrencyCode.cs.meta new file mode 100644 index 000000000..6f654ebe1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/Iso4217CurrencyCode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c7ad8cb705970a4409c018bb003ee423 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/MonetaryValue.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/MonetaryValue.cs new file mode 100644 index 000000000..18cffe266 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/MonetaryValue.cs @@ -0,0 +1,86 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509.Qualified +{ + /** + * The MonetaryValue object. + *
+    * MonetaryValue  ::=  SEQUENCE {
+    *       currency              Iso4217CurrencyCode,
+    *       amount               INTEGER,
+    *       exponent             INTEGER }
+    * -- value = amount * 10^exponent
+    * 
+ */ + public class MonetaryValue + : Asn1Encodable + { + internal Iso4217CurrencyCode currency; + internal DerInteger amount; + internal DerInteger exponent; + + public static MonetaryValue GetInstance( + object obj) + { + if (obj == null || obj is MonetaryValue) + { + return (MonetaryValue) obj; + } + + if (obj is Asn1Sequence) + { + return new MonetaryValue(Asn1Sequence.GetInstance(obj)); + } + + throw new ArgumentException("unknown object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + private MonetaryValue( + Asn1Sequence seq) + { + if (seq.Count != 3) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + currency = Iso4217CurrencyCode.GetInstance(seq[0]); + amount = DerInteger.GetInstance(seq[1]); + exponent = DerInteger.GetInstance(seq[2]); + } + + public MonetaryValue( + Iso4217CurrencyCode currency, + int amount, + int exponent) + { + this.currency = currency; + this.amount = new DerInteger(amount); + this.exponent = new DerInteger(exponent); + } + + public Iso4217CurrencyCode Currency + { + get { return currency; } + } + + public BigInteger Amount + { + get { return amount.Value; } + } + + public BigInteger Exponent + { + get { return exponent.Value; } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(currency, amount, exponent); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/MonetaryValue.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/MonetaryValue.cs.meta new file mode 100644 index 000000000..77c679d65 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/MonetaryValue.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 572832cf90fe82e428395e90960b2d1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/QCStatement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/QCStatement.cs new file mode 100644 index 000000000..30081c310 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/QCStatement.cs @@ -0,0 +1,83 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509.Qualified +{ + /** + * The QCStatement object. + *
+    * QCStatement ::= SEQUENCE {
+    *   statementId        OBJECT IDENTIFIER,
+    *   statementInfo      ANY DEFINED BY statementId OPTIONAL}
+    * 
+ */ + public class QCStatement + : Asn1Encodable + { + private readonly DerObjectIdentifier qcStatementId; + private readonly Asn1Encodable qcStatementInfo; + + public static QCStatement GetInstance( + object obj) + { + if (obj == null || obj is QCStatement) + { + return (QCStatement) obj; + } + + if (obj is Asn1Sequence) + { + return new QCStatement(Asn1Sequence.GetInstance(obj)); + } + + throw new ArgumentException("unknown object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + private QCStatement( + Asn1Sequence seq) + { + qcStatementId = DerObjectIdentifier.GetInstance(seq[0]); + + if (seq.Count > 1) + { + qcStatementInfo = seq[1]; + } + } + + public QCStatement( + DerObjectIdentifier qcStatementId) + { + this.qcStatementId = qcStatementId; + } + + public QCStatement( + DerObjectIdentifier qcStatementId, + Asn1Encodable qcStatementInfo) + { + this.qcStatementId = qcStatementId; + this.qcStatementInfo = qcStatementInfo; + } + + public DerObjectIdentifier StatementId + { + get { return qcStatementId; } + } + + public Asn1Encodable StatementInfo + { + get { return qcStatementInfo; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(qcStatementId); + v.AddOptional(qcStatementInfo); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/QCStatement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/QCStatement.cs.meta new file mode 100644 index 000000000..c6e3d67d8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/QCStatement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4aceafd3bd955db4e81caf7ea1fb66ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/RFC3739QCObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/RFC3739QCObjectIdentifiers.cs new file mode 100644 index 000000000..8f8b17145 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/RFC3739QCObjectIdentifiers.cs @@ -0,0 +1,25 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509.Qualified +{ + public sealed class Rfc3739QCObjectIdentifiers + { + private Rfc3739QCObjectIdentifiers() + { + } + + // + // base id + // + public static readonly DerObjectIdentifier IdQcs = new DerObjectIdentifier("1.3.6.1.5.5.7.11"); + + public static readonly DerObjectIdentifier IdQcsPkixQCSyntaxV1 = new DerObjectIdentifier(IdQcs+".1"); + public static readonly DerObjectIdentifier IdQcsPkixQCSyntaxV2 = new DerObjectIdentifier(IdQcs+".2"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/RFC3739QCObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/RFC3739QCObjectIdentifiers.cs.meta new file mode 100644 index 000000000..df86364bb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/RFC3739QCObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b81cf09f566e2fa4796ceaff9334bdf9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/SemanticsInformation.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/SemanticsInformation.cs new file mode 100644 index 000000000..75ee42b29 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/SemanticsInformation.cs @@ -0,0 +1,122 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509.Qualified +{ + /** + * The SemanticsInformation object. + *
+    *       SemanticsInformation ::= SEQUENCE {
+    *         semanticsIdentifier        OBJECT IDENTIFIER   OPTIONAL,
+    *         nameRegistrationAuthorities NameRegistrationAuthorities
+    *                                                         OPTIONAL }
+    *         (WITH COMPONENTS {..., semanticsIdentifier PRESENT}|
+    *          WITH COMPONENTS {..., nameRegistrationAuthorities PRESENT})
+    *
+    *     NameRegistrationAuthorities ::=  SEQUENCE SIZE (1..MAX) OF
+    *         GeneralName
+    * 
+ */ + public class SemanticsInformation + : Asn1Encodable + { + private readonly DerObjectIdentifier semanticsIdentifier; + private readonly GeneralName[] nameRegistrationAuthorities; + + public static SemanticsInformation GetInstance( + object obj) + { + if (obj == null || obj is SemanticsInformation) + { + return (SemanticsInformation) obj; + } + + if (obj is Asn1Sequence) + { + return new SemanticsInformation(Asn1Sequence.GetInstance(obj)); + } + + throw new ArgumentException("unknown object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public SemanticsInformation(Asn1Sequence seq) + { + if (seq.Count < 1) + throw new ArgumentException("no objects in SemanticsInformation"); + + var e = seq.GetEnumerator(); + e.MoveNext(); + var obj = e.Current; + if (obj is DerObjectIdentifier oid) + { + semanticsIdentifier = oid; + if (e.MoveNext()) + { + obj = e.Current; + } + else + { + obj = null; + } + } + + if (obj != null) + { + Asn1Sequence generalNameSeq = Asn1Sequence.GetInstance(obj); + nameRegistrationAuthorities = new GeneralName[generalNameSeq.Count]; + for (int i= 0; i < generalNameSeq.Count; i++) + { + nameRegistrationAuthorities[i] = GeneralName.GetInstance(generalNameSeq[i]); + } + } + } + + public SemanticsInformation( + DerObjectIdentifier semanticsIdentifier, + GeneralName[] generalNames) + { + this.semanticsIdentifier = semanticsIdentifier; + this.nameRegistrationAuthorities = generalNames; + } + + public SemanticsInformation( + DerObjectIdentifier semanticsIdentifier) + { + this.semanticsIdentifier = semanticsIdentifier; + } + + public SemanticsInformation( + GeneralName[] generalNames) + { + this.nameRegistrationAuthorities = generalNames; + } + + public DerObjectIdentifier SemanticsIdentifier + { + get { return semanticsIdentifier; } + } + + public GeneralName[] GetNameRegistrationAuthorities() + { + return nameRegistrationAuthorities; + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + v.AddOptional(semanticsIdentifier); + + if (null != nameRegistrationAuthorities) + { + v.Add(new DerSequence(nameRegistrationAuthorities)); + } + + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/SemanticsInformation.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/SemanticsInformation.cs.meta new file mode 100644 index 000000000..139e93f37 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/SemanticsInformation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 77db5a18fcace884c8d9922282917667 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/TypeOfBiometricData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/TypeOfBiometricData.cs new file mode 100644 index 000000000..5099d9086 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/TypeOfBiometricData.cs @@ -0,0 +1,95 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509.Qualified +{ + /** + * The TypeOfBiometricData object. + *
+    * TypeOfBiometricData ::= CHOICE {
+    *   predefinedBiometricType   PredefinedBiometricType,
+    *   biometricDataOid          OBJECT IDENTIFIER }
+    *
+    * PredefinedBiometricType ::= INTEGER {
+    *   picture(0),handwritten-signature(1)}
+    *   (picture|handwritten-signature)
+    * 
+ */ + public class TypeOfBiometricData + : Asn1Encodable, IAsn1Choice + { + public const int Picture = 0; + public const int HandwrittenSignature = 1; + + internal Asn1Encodable obj; + + public static TypeOfBiometricData GetInstance( + object obj) + { + if (obj == null || obj is TypeOfBiometricData) + { + return (TypeOfBiometricData) obj; + } + + if (obj is DerInteger) + { + DerInteger predefinedBiometricTypeObj = DerInteger.GetInstance(obj); + int predefinedBiometricType = predefinedBiometricTypeObj.IntValueExact; + + return new TypeOfBiometricData(predefinedBiometricType); + } + + if (obj is DerObjectIdentifier) + { + DerObjectIdentifier BiometricDataOid = DerObjectIdentifier.GetInstance(obj); + return new TypeOfBiometricData(BiometricDataOid); + } + + throw new ArgumentException("unknown object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public TypeOfBiometricData( + int predefinedBiometricType) + { + if (predefinedBiometricType == Picture || predefinedBiometricType == HandwrittenSignature) + { + obj = new DerInteger(predefinedBiometricType); + } + else + { + throw new ArgumentException("unknow PredefinedBiometricType : " + predefinedBiometricType); + } + } + + public TypeOfBiometricData( + DerObjectIdentifier biometricDataOid) + { + obj = biometricDataOid; + } + + public bool IsPredefined + { + get { return obj is DerInteger; } + } + + public int PredefinedBiometricType + { + get { return ((DerInteger)obj).IntValueExact; } + } + + public DerObjectIdentifier BiometricDataOid + { + get { return (DerObjectIdentifier) obj; } + } + + public override Asn1Object ToAsn1Object() + { + return obj.ToAsn1Object(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/TypeOfBiometricData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/TypeOfBiometricData.cs.meta new file mode 100644 index 000000000..b0a506b86 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/qualified/TypeOfBiometricData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 37387a2cf0365b54a8af39207988ed89 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi.meta new file mode 100644 index 000000000..4c3fc2091 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1db0f3ad39d2daf45acf71cf68fbe8b3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi/NameOrPseudonym.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi/NameOrPseudonym.cs new file mode 100644 index 000000000..109664034 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi/NameOrPseudonym.cs @@ -0,0 +1,181 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X500; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509.SigI +{ + /** + * Structure for a name or pseudonym. + * + *
+	*       NameOrPseudonym ::= CHOICE {
+	*     	   surAndGivenName SEQUENCE {
+	*     	     surName DirectoryString,
+	*     	     givenName SEQUENCE OF DirectoryString 
+	*         },
+	*     	   pseudonym DirectoryString 
+	*       }
+	* 
+ * + * @see org.bouncycastle.asn1.x509.sigi.PersonalData + * + */ + public class NameOrPseudonym + : Asn1Encodable, IAsn1Choice + { + private readonly DirectoryString pseudonym; + private readonly DirectoryString surname; + private readonly Asn1Sequence givenName; + + public static NameOrPseudonym GetInstance( + object obj) + { + if (obj == null || obj is NameOrPseudonym) + { + return (NameOrPseudonym)obj; + } + + if (obj is IAsn1String) + { + return new NameOrPseudonym(DirectoryString.GetInstance(obj)); + } + + if (obj is Asn1Sequence) + { + return new NameOrPseudonym((Asn1Sequence) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * Constructor from DERString. + *

+ * The sequence is of type NameOrPseudonym: + *

+ *

+		*       NameOrPseudonym ::= CHOICE {
+		*     	   surAndGivenName SEQUENCE {
+		*     	     surName DirectoryString,
+		*     	     givenName SEQUENCE OF DirectoryString
+		*         },
+		*     	   pseudonym DirectoryString
+		*       }
+		* 
+ * @param pseudonym pseudonym value to use. + */ + public NameOrPseudonym( + DirectoryString pseudonym) + { + this.pseudonym = pseudonym; + } + + /** + * Constructor from Asn1Sequence. + *

+ * The sequence is of type NameOrPseudonym: + *

+ *

+		*       NameOrPseudonym ::= CHOICE {
+		*     	   surAndGivenName SEQUENCE {
+		*     	     surName DirectoryString,
+		*     	     givenName SEQUENCE OF DirectoryString
+		*         },
+		*     	   pseudonym DirectoryString
+		*       }
+		* 
+ * + * @param seq The ASN.1 sequence. + */ + private NameOrPseudonym( + Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Bad sequence size: " + seq.Count); + + if (!(seq[0] is IAsn1String)) + throw new ArgumentException("Bad object encountered: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(seq[0])); + + surname = DirectoryString.GetInstance(seq[0]); + givenName = Asn1Sequence.GetInstance(seq[1]); + } + + /** + * Constructor from a given details. + * + * @param pseudonym The pseudonym. + */ + public NameOrPseudonym( + string pseudonym) + : this(new DirectoryString(pseudonym)) + { + } + + /** + * Constructor from a given details. + * + * @param surname The surname. + * @param givenName A sequence of directory strings making up the givenName + */ + public NameOrPseudonym( + DirectoryString surname, + Asn1Sequence givenName) + { + this.surname = surname; + this.givenName = givenName; + } + + public DirectoryString Pseudonym + { + get { return pseudonym; } + } + + public DirectoryString Surname + { + get { return surname; } + } + + public DirectoryString[] GetGivenName() + { + DirectoryString[] items = new DirectoryString[givenName.Count]; + int count = 0; + foreach (object o in givenName) + { + items[count++] = DirectoryString.GetInstance(o); + } + return items; + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *

+ * Returns: + *

+ *

+		*       NameOrPseudonym ::= CHOICE {
+		*     	   surAndGivenName SEQUENCE {
+		*     	     surName DirectoryString,
+		*     	     givenName SEQUENCE OF DirectoryString
+		*         },
+		*     	   pseudonym DirectoryString
+		*       }
+		* 
+ * + * @return an Asn1Object + */ + public override Asn1Object ToAsn1Object() + { + if (pseudonym != null) + { + return pseudonym.ToAsn1Object(); + } + + return new DerSequence(surname, givenName); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi/NameOrPseudonym.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi/NameOrPseudonym.cs.meta new file mode 100644 index 000000000..f097b0fa8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi/NameOrPseudonym.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d60c5ad72d35fec4cb24d9ba1b1cab75 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi/PersonalData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi/PersonalData.cs new file mode 100644 index 000000000..b11719572 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi/PersonalData.cs @@ -0,0 +1,207 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X500; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509.SigI +{ + /** + * Contains personal data for the otherName field in the subjectAltNames + * extension. + *

+ *

+	*     PersonalData ::= SEQUENCE {
+	*       nameOrPseudonym NameOrPseudonym,
+	*       nameDistinguisher [0] INTEGER OPTIONAL,
+	*       dateOfBirth [1] GeneralizedTime OPTIONAL,
+	*       placeOfBirth [2] DirectoryString OPTIONAL,
+	*       gender [3] PrintableString OPTIONAL,
+	*       postalAddress [4] DirectoryString OPTIONAL
+	*       }
+	* 
+ * + * @see org.bouncycastle.asn1.x509.sigi.NameOrPseudonym + * @see org.bouncycastle.asn1.x509.sigi.SigIObjectIdentifiers + */ + public class PersonalData + : Asn1Encodable + { + private readonly NameOrPseudonym nameOrPseudonym; + private readonly BigInteger nameDistinguisher; + private readonly Asn1GeneralizedTime dateOfBirth; + private readonly DirectoryString placeOfBirth; + private readonly string gender; + private readonly DirectoryString postalAddress; + + public static PersonalData GetInstance( + object obj) + { + if (obj == null || obj is PersonalData) + { + return (PersonalData) obj; + } + + if (obj is Asn1Sequence) + { + return new PersonalData((Asn1Sequence) obj); + } + + throw new ArgumentException("unknown object in factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + /** + * Constructor from Asn1Sequence. + *

+ * The sequence is of type NameOrPseudonym: + *

+ *

+		*     PersonalData ::= SEQUENCE {
+		*       nameOrPseudonym NameOrPseudonym,
+		*       nameDistinguisher [0] INTEGER OPTIONAL,
+		*       dateOfBirth [1] GeneralizedTime OPTIONAL,
+		*       placeOfBirth [2] DirectoryString OPTIONAL,
+		*       gender [3] PrintableString OPTIONAL,
+		*       postalAddress [4] DirectoryString OPTIONAL
+		*       }
+		* 
+ * + * @param seq The ASN.1 sequence. + */ + private PersonalData(Asn1Sequence seq) + { + if (seq.Count < 1) + throw new ArgumentException("Bad sequence size: " + seq.Count); + + var e = seq.GetEnumerator(); + e.MoveNext(); + + nameOrPseudonym = NameOrPseudonym.GetInstance(e.Current); + + while (e.MoveNext()) + { + Asn1TaggedObject o = Asn1TaggedObject.GetInstance(e.Current); + int tag = o.TagNo; + switch (tag) + { + case 0: + nameDistinguisher = DerInteger.GetInstance(o, false).Value; + break; + case 1: + dateOfBirth = Asn1GeneralizedTime.GetInstance(o, false); + break; + case 2: + placeOfBirth = DirectoryString.GetInstance(o, true); + break; + case 3: + gender = DerPrintableString.GetInstance(o, false).GetString(); + break; + case 4: + postalAddress = DirectoryString.GetInstance(o, true); + break; + default: + throw new ArgumentException("Bad tag number: " + o.TagNo); + } + } + } + + /** + * Constructor from a given details. + * + * @param nameOrPseudonym Name or pseudonym. + * @param nameDistinguisher Name distinguisher. + * @param dateOfBirth Date of birth. + * @param placeOfBirth Place of birth. + * @param gender Gender. + * @param postalAddress Postal Address. + */ + public PersonalData( + NameOrPseudonym nameOrPseudonym, + BigInteger nameDistinguisher, + Asn1GeneralizedTime dateOfBirth, + DirectoryString placeOfBirth, + string gender, + DirectoryString postalAddress) + { + this.nameOrPseudonym = nameOrPseudonym; + this.dateOfBirth = dateOfBirth; + this.gender = gender; + this.nameDistinguisher = nameDistinguisher; + this.postalAddress = postalAddress; + this.placeOfBirth = placeOfBirth; + } + + public NameOrPseudonym NameOrPseudonym + { + get { return nameOrPseudonym; } + } + + public BigInteger NameDistinguisher + { + get { return nameDistinguisher; } + } + + public Asn1GeneralizedTime DateOfBirth + { + get { return dateOfBirth; } + } + + public DirectoryString PlaceOfBirth + { + get { return placeOfBirth; } + } + + public string Gender + { + get { return gender; } + } + + public DirectoryString PostalAddress + { + get { return postalAddress; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *

+ * Returns: + *

+ *

+		*     PersonalData ::= SEQUENCE {
+		*       nameOrPseudonym NameOrPseudonym,
+		*       nameDistinguisher [0] INTEGER OPTIONAL,
+		*       dateOfBirth [1] GeneralizedTime OPTIONAL,
+		*       placeOfBirth [2] DirectoryString OPTIONAL,
+		*       gender [3] PrintableString OPTIONAL,
+		*       postalAddress [4] DirectoryString OPTIONAL
+		*       }
+		* 
+ * + * @return an Asn1Object + */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(nameOrPseudonym); + + if (null != nameDistinguisher) + { + v.Add(new DerTaggedObject(false, 0, new DerInteger(nameDistinguisher))); + } + + v.AddOptionalTagged(false, 1, dateOfBirth); + v.AddOptionalTagged(true, 2, placeOfBirth); + + if (null != gender) + { + v.Add(new DerTaggedObject(false, 3, new DerPrintableString(gender, true))); + } + + v.AddOptionalTagged(true, 4, postalAddress); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi/PersonalData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi/PersonalData.cs.meta new file mode 100644 index 000000000..3c5fcf940 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi/PersonalData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3cd249d30275a3846b1b34b4d05daed6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi/SigIObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi/SigIObjectIdentifiers.cs new file mode 100644 index 000000000..e5bca699e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi/SigIObjectIdentifiers.cs @@ -0,0 +1,53 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509.SigI +{ + /** + * Object Identifiers of SigI specifciation (German Signature Law + * Interoperability specification). + */ + public sealed class SigIObjectIdentifiers + { + private SigIObjectIdentifiers() + { + } + + public readonly static DerObjectIdentifier IdSigI = new DerObjectIdentifier("1.3.36.8"); + + /** + * Key purpose IDs for German SigI (Signature Interoperability + * Specification) + */ + public readonly static DerObjectIdentifier IdSigIKP = new DerObjectIdentifier(IdSigI + ".2"); + + /** + * Certificate policy IDs for German SigI (Signature Interoperability + * Specification) + */ + public readonly static DerObjectIdentifier IdSigICP = new DerObjectIdentifier(IdSigI + ".1"); + + /** + * Other Name IDs for German SigI (Signature Interoperability Specification) + */ + public readonly static DerObjectIdentifier IdSigION = new DerObjectIdentifier(IdSigI + ".4"); + + /** + * To be used for for the generation of directory service certificates. + */ + public static readonly DerObjectIdentifier IdSigIKPDirectoryService = new DerObjectIdentifier(IdSigIKP + ".1"); + + /** + * ID for PersonalData + */ + public static readonly DerObjectIdentifier IdSigIONPersonalData = new DerObjectIdentifier(IdSigION + ".1"); + + /** + * Certificate is conform to german signature law. + */ + public static readonly DerObjectIdentifier IdSigICPSigConform = new DerObjectIdentifier(IdSigICP + ".1"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi/SigIObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi/SigIObjectIdentifiers.cs.meta new file mode 100644 index 000000000..d985b3362 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x509/sigi/SigIObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7b37581af504a5348a00614a61953890 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9.meta new file mode 100644 index 000000000..a74992ad2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 76282f28a92d5d448879417bd0de6c37 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/DHDomainParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/DHDomainParameters.cs new file mode 100644 index 000000000..6b4c1a06e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/DHDomainParameters.cs @@ -0,0 +1,112 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9 +{ + public class DHDomainParameters + : Asn1Encodable + { + private readonly DerInteger p, g, q, j; + private readonly DHValidationParms validationParms; + + public static DHDomainParameters GetInstance(Asn1TaggedObject obj, bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit)); + } + + public static DHDomainParameters GetInstance(object obj) + { + if (obj == null || obj is DHDomainParameters) + return (DHDomainParameters)obj; + + if (obj is Asn1Sequence) + return new DHDomainParameters((Asn1Sequence)obj); + + throw new ArgumentException("Invalid DHDomainParameters: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public DHDomainParameters(DerInteger p, DerInteger g, DerInteger q, DerInteger j, + DHValidationParms validationParms) + { + if (p == null) + throw new ArgumentNullException("p"); + if (g == null) + throw new ArgumentNullException("g"); + if (q == null) + throw new ArgumentNullException("q"); + + this.p = p; + this.g = g; + this.q = q; + this.j = j; + this.validationParms = validationParms; + } + + private DHDomainParameters(Asn1Sequence seq) + { + if (seq.Count < 3 || seq.Count > 5) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + var e = seq.GetEnumerator(); + this.p = DerInteger.GetInstance(GetNext(e)); + this.g = DerInteger.GetInstance(GetNext(e)); + this.q = DerInteger.GetInstance(GetNext(e)); + + Asn1Encodable next = GetNext(e); + + if (next != null && next is DerInteger) + { + this.j = DerInteger.GetInstance(next); + next = GetNext(e); + } + + if (next != null) + { + this.validationParms = DHValidationParms.GetInstance(next.ToAsn1Object()); + } + } + + private static Asn1Encodable GetNext(IEnumerator e) + { + return e.MoveNext() ? (Asn1Encodable)e.Current : null; + } + + public DerInteger P + { + get { return this.p; } + } + + public DerInteger G + { + get { return this.g; } + } + + public DerInteger Q + { + get { return this.q; } + } + + public DerInteger J + { + get { return this.j; } + } + + public DHValidationParms ValidationParms + { + get { return this.validationParms; } + } + + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(p, g, q); + v.AddOptional(j, validationParms); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/DHDomainParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/DHDomainParameters.cs.meta new file mode 100644 index 000000000..9947a5ef7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/DHDomainParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 37ebcba642487dd429a8bf7303793ea7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/DHPublicKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/DHPublicKey.cs new file mode 100644 index 000000000..852baa1a0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/DHPublicKey.cs @@ -0,0 +1,50 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9 +{ + public class DHPublicKey + : Asn1Encodable + { + private readonly DerInteger y; + + public static DHPublicKey GetInstance(Asn1TaggedObject obj, bool isExplicit) + { + return GetInstance(DerInteger.GetInstance(obj, isExplicit)); + } + + public static DHPublicKey GetInstance(object obj) + { + if (obj == null || obj is DHPublicKey) + return (DHPublicKey)obj; + + if (obj is DerInteger) + return new DHPublicKey((DerInteger)obj); + + throw new ArgumentException("Invalid DHPublicKey: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public DHPublicKey(DerInteger y) + { + if (y == null) + throw new ArgumentNullException("y"); + + this.y = y; + } + + public DerInteger Y + { + get { return this.y; } + } + + public override Asn1Object ToAsn1Object() + { + return this.y; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/DHPublicKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/DHPublicKey.cs.meta new file mode 100644 index 000000000..d29a773b8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/DHPublicKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0b171cae4a7bfd74dafae201bbd43958 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/DHValidationParms.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/DHValidationParms.cs new file mode 100644 index 000000000..a787f39e9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/DHValidationParms.cs @@ -0,0 +1,68 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9 +{ + public class DHValidationParms + : Asn1Encodable + { + private readonly DerBitString seed; + private readonly DerInteger pgenCounter; + + public static DHValidationParms GetInstance(Asn1TaggedObject obj, bool isExplicit) + { + return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit)); + } + + public static DHValidationParms GetInstance(object obj) + { + if (obj == null || obj is DHValidationParms) + return (DHValidationParms)obj; + + if (obj is Asn1Sequence) + return new DHValidationParms((Asn1Sequence)obj); + + throw new ArgumentException("Invalid DHValidationParms: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj"); + } + + public DHValidationParms(DerBitString seed, DerInteger pgenCounter) + { + if (seed == null) + throw new ArgumentNullException("seed"); + if (pgenCounter == null) + throw new ArgumentNullException("pgenCounter"); + + this.seed = seed; + this.pgenCounter = pgenCounter; + } + + private DHValidationParms(Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + this.seed = DerBitString.GetInstance(seq[0]); + this.pgenCounter = DerInteger.GetInstance(seq[1]); + } + + public DerBitString Seed + { + get { return this.seed; } + } + + public DerInteger PgenCounter + { + get { return this.pgenCounter; } + } + + public override Asn1Object ToAsn1Object() + { + return new DerSequence(seed, pgenCounter); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/DHValidationParms.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/DHValidationParms.cs.meta new file mode 100644 index 000000000..381ca3514 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/DHValidationParms.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c6fa04a900b7794bb04300863773f6a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/ECNamedCurveTable.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/ECNamedCurveTable.cs new file mode 100644 index 000000000..9a33f70b1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/ECNamedCurveTable.cs @@ -0,0 +1,237 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Anssi; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.GM; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Sec; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.TeleTrust; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9 +{ + /// A unified elliptic curve registry of the various standard-specific registries. + public class ECNamedCurveTable + { + /// Look up the for the curve with the given name. + /// The name of the curve. + public static X9ECParameters GetByName(string name) + { + X9ECParameters ecP = X962NamedCurves.GetByName(name); + if (ecP == null) + { + ecP = SecNamedCurves.GetByName(name); + } + if (ecP == null) + { + ecP = NistNamedCurves.GetByName(name); + } + if (ecP == null) + { + ecP = TeleTrusTNamedCurves.GetByName(name); + } + if (ecP == null) + { + ecP = AnssiNamedCurves.GetByName(name); + } + if (ecP == null) + { + ecP = ECGost3410NamedCurves.GetByName(name); + } + if (ecP == null) + { + ecP = GMNamedCurves.GetByName(name); + } + return ecP; + } + + /// Look up an for the curve with the given name. + /// + /// Allows accessing the curve without necessarily triggering the creation of + /// the full . + /// + /// The name of the curve. + public static X9ECParametersHolder GetByNameLazy(string name) + { + X9ECParametersHolder holder = X962NamedCurves.GetByNameLazy(name); + if (null == holder) + { + holder = SecNamedCurves.GetByNameLazy(name); + } + if (null == holder) + { + holder = NistNamedCurves.GetByNameLazy(name); + } + if (null == holder) + { + holder = TeleTrusTNamedCurves.GetByNameLazy(name); + } + if (null == holder) + { + holder = AnssiNamedCurves.GetByNameLazy(name); + } + if (null == holder) + { + holder = ECGost3410NamedCurves.GetByNameLazy(name); + } + if (null == holder) + { + holder = GMNamedCurves.GetByNameLazy(name); + } + return holder; + } + + /// Look up the for the curve with the given + /// OID. + /// The OID for the curve. + public static X9ECParameters GetByOid(DerObjectIdentifier oid) + { + X9ECParameters ecP = X962NamedCurves.GetByOid(oid); + if (ecP == null) + { + ecP = SecNamedCurves.GetByOid(oid); + } + + // NOTE: All the NIST curves are currently from SEC, so no point in redundant OID lookup + + if (ecP == null) + { + ecP = TeleTrusTNamedCurves.GetByOid(oid); + } + if (ecP == null) + { + ecP = AnssiNamedCurves.GetByOid(oid); + } + if (ecP == null) + { + ecP = ECGost3410NamedCurves.GetByOid(oid); + } + if (ecP == null) + { + ecP = GMNamedCurves.GetByOid(oid); + } + return ecP; + } + + /// Look up an for the curve with the given + /// OID. + /// + /// Allows accessing the curve without necessarily triggering the creation of + /// the full . + /// + /// The OID for the curve. + public static X9ECParametersHolder GetByOidLazy(DerObjectIdentifier oid) + { + X9ECParametersHolder holder = X962NamedCurves.GetByOidLazy(oid); + if (null == holder) + { + holder = SecNamedCurves.GetByOidLazy(oid); + } + + // NOTE: All the NIST curves are currently from SEC, so no point in redundant OID lookup + + if (null == holder) + { + holder = TeleTrusTNamedCurves.GetByOidLazy(oid); + } + if (null == holder) + { + holder = AnssiNamedCurves.GetByOidLazy(oid); + } + if (null == holder) + { + holder = ECGost3410NamedCurves.GetByOidLazy(oid); + } + if (null == holder) + { + holder = GMNamedCurves.GetByOidLazy(oid); + } + return holder; + } + + /// Look up the name of the curve with the given OID. + /// The OID for the curve. + public static string GetName(DerObjectIdentifier oid) + { + string name = X962NamedCurves.GetName(oid); + if (name == null) + { + name = SecNamedCurves.GetName(oid); + } + if (name == null) + { + name = NistNamedCurves.GetName(oid); + } + if (name == null) + { + name = TeleTrusTNamedCurves.GetName(oid); + } + if (name == null) + { + name = AnssiNamedCurves.GetName(oid); + } + if (name == null) + { + name = ECGost3410NamedCurves.GetName(oid); + } + if (name == null) + { + name = GMNamedCurves.GetName(oid); + } + return name; + } + + /// Look up the OID of the curve with the given name. + /// The name of the curve. + public static DerObjectIdentifier GetOid(string name) + { + DerObjectIdentifier oid = X962NamedCurves.GetOid(name); + if (oid == null) + { + oid = SecNamedCurves.GetOid(name); + } + if (oid == null) + { + oid = NistNamedCurves.GetOid(name); + } + if (oid == null) + { + oid = TeleTrusTNamedCurves.GetOid(name); + } + if (oid == null) + { + oid = AnssiNamedCurves.GetOid(name); + } + if (oid == null) + { + oid = ECGost3410NamedCurves.GetOid(name); + } + if (oid == null) + { + oid = GMNamedCurves.GetOid(name); + } + return oid; + } + + /// Enumerate the available curve names in all the registries. + public static IEnumerable Names + { + get + { + var result = new List(); + result.AddRange(X962NamedCurves.Names); + result.AddRange(SecNamedCurves.Names); + result.AddRange(NistNamedCurves.Names); + result.AddRange(TeleTrusTNamedCurves.Names); + result.AddRange(AnssiNamedCurves.Names); + result.AddRange(ECGost3410NamedCurves.Names); + result.AddRange(GMNamedCurves.Names); + return result; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/ECNamedCurveTable.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/ECNamedCurveTable.cs.meta new file mode 100644 index 000000000..3b91f7e2f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/ECNamedCurveTable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9997102bd93d26b4383c8a708d2109ff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/KeySpecificInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/KeySpecificInfo.cs new file mode 100644 index 000000000..e732e195f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/KeySpecificInfo.cs @@ -0,0 +1,59 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9 +{ + /** + * ASN.1 def for Diffie-Hellman key exchange KeySpecificInfo structure. See + * RFC 2631, or X9.42, for further details. + */ + public class KeySpecificInfo + : Asn1Encodable + { + private DerObjectIdentifier algorithm; + private Asn1OctetString counter; + + public KeySpecificInfo( + DerObjectIdentifier algorithm, + Asn1OctetString counter) + { + this.algorithm = algorithm; + this.counter = counter; + } + + public KeySpecificInfo(Asn1Sequence seq) + { + var e = seq.GetEnumerator(); + + e.MoveNext(); + algorithm = (DerObjectIdentifier)e.Current; + e.MoveNext(); + counter = (Asn1OctetString)e.Current; + } + + public DerObjectIdentifier Algorithm + { + get { return algorithm; } + } + + public Asn1OctetString Counter + { + get { return counter; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         *  KeySpecificInfo ::= Sequence {
+         *      algorithm OBJECT IDENTIFIER,
+         *      counter OCTET STRING SIZE (4..4)
+         *  }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(algorithm, counter); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/KeySpecificInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/KeySpecificInfo.cs.meta new file mode 100644 index 000000000..dce06a918 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/KeySpecificInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6eb5dc76eeec5954fbd7be805a90f5c3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/OtherInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/OtherInfo.cs new file mode 100644 index 000000000..54ab5be17 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/OtherInfo.cs @@ -0,0 +1,83 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9 +{ + /** + * ANS.1 def for Diffie-Hellman key exchange OtherInfo structure. See + * RFC 2631, or X9.42, for further details. + */ + public class OtherInfo + : Asn1Encodable + { + private KeySpecificInfo keyInfo; + private Asn1OctetString partyAInfo; + private Asn1OctetString suppPubInfo; + + public OtherInfo( + KeySpecificInfo keyInfo, + Asn1OctetString partyAInfo, + Asn1OctetString suppPubInfo) + { + this.keyInfo = keyInfo; + this.partyAInfo = partyAInfo; + this.suppPubInfo = suppPubInfo; + } + + public OtherInfo(Asn1Sequence seq) + { + var e = seq.GetEnumerator(); + + e.MoveNext(); + keyInfo = new KeySpecificInfo((Asn1Sequence)e.Current); + + while (e.MoveNext()) + { + Asn1TaggedObject o = (Asn1TaggedObject)e.Current; + + if (o.TagNo == 0) + { + partyAInfo = (Asn1OctetString)o.GetObject(); + } + else if ((int) o.TagNo == 2) + { + suppPubInfo = (Asn1OctetString)o.GetObject(); + } + } + } + + public KeySpecificInfo KeyInfo + { + get { return keyInfo; } + } + + public Asn1OctetString PartyAInfo + { + get { return partyAInfo; } + } + + public Asn1OctetString SuppPubInfo + { + get { return suppPubInfo; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         *  OtherInfo ::= Sequence {
+         *      keyInfo KeySpecificInfo,
+         *      partyAInfo [0] OCTET STRING OPTIONAL,
+         *      suppPubInfo [2] OCTET STRING
+         *  }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(keyInfo); + v.AddOptionalTagged(true, 0, partyAInfo); + v.Add(new DerTaggedObject(2, suppPubInfo)); + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/OtherInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/OtherInfo.cs.meta new file mode 100644 index 000000000..44ce9fe2d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/OtherInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc4394b3d9564514f9ef4298729b5053 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X962NamedCurves.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X962NamedCurves.cs new file mode 100644 index 000000000..1e6f15cb1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X962NamedCurves.cs @@ -0,0 +1,866 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9 +{ + /// Elliptic curve registry for the curves defined in X.962 EC-DSA. + public static class X962NamedCurves + { + private static X9ECPoint ConfigureBasepoint(ECCurve curve, string encoding) + { + X9ECPoint G = new X9ECPoint(curve, Hex.DecodeStrict(encoding)); + WNafUtilities.ConfigureBasepoint(G.Point); + return G; + } + + private static ECCurve ConfigureCurve(ECCurve curve) + { + return curve; + } + + private static BigInteger FromHex(string hex) + { + return new BigInteger(1, Hex.DecodeStrict(hex)); + } + + internal class Prime192v1Holder + : X9ECParametersHolder + { + private Prime192v1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Prime192v1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("ffffffffffffffffffffffff99def836146bc9b1b4d22831"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"), + FromHex("fffffffffffffffffffffffffffffffefffffffffffffffc"), + FromHex("64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1"), + n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("3045AE6FC8422f64ED579528D38120EAE12196D5"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "03188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Prime192v2Holder + : X9ECParametersHolder + { + private Prime192v2Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Prime192v2Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("fffffffffffffffffffffffe5fb1a724dc80418648d8dd31"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"), + FromHex("fffffffffffffffffffffffffffffffefffffffffffffffc"), + FromHex("cc22d6dfb95c6b25e49c0d6364a4e5980c393aa21668d953"), + n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("31a92ee2029fd10d901b113e990710f0d21ac6b6"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "03eea2bae7e1497842f2de7769cfe9c989c072ad696f48034a"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Prime192v3Holder + : X9ECParametersHolder + { + private Prime192v3Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Prime192v3Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("ffffffffffffffffffffffff7a62d031c83f4294f640ec13"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"), + FromHex("fffffffffffffffffffffffffffffffefffffffffffffffc"), + FromHex("22123dc2395a05caa7423daeccc94760a7d462256bd56916"), + n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("c469684435deb378c4b65ca9591e2a5763059a2e"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "027d29778100c65a1da1783716588dce2b8b4aee8e228f1896"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Prime239v1Holder + : X9ECParametersHolder + { + private Prime239v1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Prime239v1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("7fffffffffffffffffffffff7fffff9e5e9a9f5d9071fbd1522688909d0b"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + new BigInteger("883423532389192164791648750360308885314476597252960362792450860609699839"), + FromHex("7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc"), + FromHex("6b016c3bdcf18941d0d654921475ca71a9db2fb27d1d37796185c2942c0a"), + n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("e43bb460f0b80cc0c0b075798e948060f8321b7d"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "020ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Prime239v2Holder + : X9ECParametersHolder + { + private Prime239v2Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Prime239v2Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("7fffffffffffffffffffffff800000cfa7e8594377d414c03821bc582063"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + new BigInteger("883423532389192164791648750360308885314476597252960362792450860609699839"), + FromHex("7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc"), + FromHex("617fab6832576cbbfed50d99f0249c3fee58b94ba0038c7ae84c8c832f2c"), + n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("e8b4011604095303ca3b8099982be09fcb9ae616"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0238af09d98727705120c921bb5e9e26296a3cdcf2f35757a0eafd87b830e7"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Prime239v3Holder + : X9ECParametersHolder + { + private Prime239v3Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Prime239v3Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("7fffffffffffffffffffffff7fffff975deb41b3a6057c3c432146526551"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + new BigInteger("883423532389192164791648750360308885314476597252960362792450860609699839"), + FromHex("7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc"), + FromHex("255705fa2a306654b1f4cb03d6a750a30c250102d4988717d9ba15ab6d3e"), + n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("7d7374168ffe3471b60a857686a19475d3bfa2ff"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "036768ae8e18bb92cfcf005c949aa2c6d94853d0e660bbf854b1c9505fe95a"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class Prime256v1Holder + : X9ECParametersHolder + { + private Prime256v1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new Prime256v1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551"); + BigInteger h = BigInteger.One; + + return ConfigureCurve(new FpCurve( + new BigInteger("115792089210356248762697446949407573530086143415290314195533631308867097853951"), + FromHex("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc"), + FromHex("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b"), + n, h, true)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("c49d360886e704936a6678e1139d26b7819f7e90"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class C2pnb163v1Holder + : X9ECParametersHolder + { + private C2pnb163v1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new C2pnb163v1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("0400000000000000000001E60FC8821CC74DAEAFC1"); + BigInteger h = BigInteger.Two; + + return ConfigureCurve(new F2mCurve( + 163, + 1, 2, 8, + FromHex("072546B5435234A422E0789675F432C89435DE5242"), + FromHex("00C9517D06D5240D3CFF38C74B20B6CD4D6F9DD4D9"), + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("D2C0FB15760860DEF1EEF4D696E6768756151754"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0307AF69989546103D79329FCC3D74880F33BBE803CB"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class C2pnb163v2Holder + : X9ECParametersHolder + { + private C2pnb163v2Holder() {} + + internal static readonly X9ECParametersHolder Instance = new C2pnb163v2Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("03FFFFFFFFFFFFFFFFFFFDF64DE1151ADBB78F10A7"); + BigInteger h = BigInteger.Two; + + return ConfigureCurve(new F2mCurve( + 163, + 1, 2, 8, + FromHex("0108B39E77C4B108BED981ED0E890E117C511CF072"), + FromHex("0667ACEB38AF4E488C407433FFAE4F1C811638DF20"), + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "030024266E4EB5106D0A964D92C4860E2671DB9B6CC5"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class C2pnb163v3Holder + : X9ECParametersHolder + { + private C2pnb163v3Holder() {} + + internal static readonly X9ECParametersHolder Instance = new C2pnb163v3Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("03FFFFFFFFFFFFFFFFFFFE1AEE140F110AFF961309"); + BigInteger h = BigInteger.Two; + + return ConfigureCurve(new F2mCurve( + 163, + 1, 2, 8, + FromHex("07A526C63D3E25A256A007699F5447E32AE456B50E"), + FromHex("03F7061798EB99E238FD6F1BF95B48FEEB4854252B"), + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0202F9F87B7C574D0BDECF8A22E6524775F98CDEBDCB"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class C2pnb176w1Holder + : X9ECParametersHolder + { + private C2pnb176w1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new C2pnb176w1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("010092537397ECA4F6145799D62B0A19CE06FE26AD"); + BigInteger h = BigInteger.ValueOf(0xFF6E); + + return ConfigureCurve(new F2mCurve( + 176, + 1, 2, 43, + FromHex("E4E6DB2995065C407D9D39B8D0967B96704BA8E9C90B"), + FromHex("5DDA470ABE6414DE8EC133AE28E9BBD7FCEC0AE0FFF2"), + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "038D16C2866798B600F9F08BB4A8E860F3298CE04A5798"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class C2tnb191v1Holder + : X9ECParametersHolder + { + private C2tnb191v1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new C2tnb191v1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("40000000000000000000000004A20E90C39067C893BBB9A5"); + BigInteger h = BigInteger.Two; + + return ConfigureCurve(new F2mCurve( + 191, + 9, + FromHex("2866537B676752636A68F56554E12640276B649EF7526267"), + FromHex("2E45EF571F00786F67B0081B9495A3D95462F5DE0AA185EC"), + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("4E13CA542744D696E67687561517552F279A8C84"); + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0236B3DAF8A23206F9C4F299D7B21A9C369137F2C84AE1AA0D"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class C2tnb191v2Holder + : X9ECParametersHolder + { + private C2tnb191v2Holder() {} + + internal static readonly X9ECParametersHolder Instance = new C2tnb191v2Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("20000000000000000000000050508CB89F652824E06B8173"); + BigInteger h = BigInteger.ValueOf(4); + + return ConfigureCurve(new F2mCurve( + 191, + 9, + FromHex("401028774D7777C7B7666D1366EA432071274F89FF01E718"), + FromHex("0620048D28BCBD03B6249C99182B7C8CD19700C362C46A01"), + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "023809B2B7CC1B28CC5A87926AAD83FD28789E81E2C9E3BF10"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class C2tnb191v3Holder + : X9ECParametersHolder + { + private C2tnb191v3Holder() {} + + internal static readonly X9ECParametersHolder Instance = new C2tnb191v3Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("155555555555555555555555610C0B196812BFB6288A3EA3"); + BigInteger h = BigInteger.ValueOf(6); + + return ConfigureCurve(new F2mCurve( + 191, + 9, + FromHex("6C01074756099122221056911C77D77E77A777E7E7E77FCB"), + FromHex("71FE1AF926CF847989EFEF8DB459F66394D90F32AD3F15E8"), + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "03375D4CE24FDE434489DE8746E71786015009E66E38A926DD"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class C2pnb208w1Holder + : X9ECParametersHolder + { + private C2pnb208w1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new C2pnb208w1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("0101BAF95C9723C57B6C21DA2EFF2D5ED588BDD5717E212F9D"); + BigInteger h = BigInteger.ValueOf(0xFE48); + + return ConfigureCurve(new F2mCurve( + 208, + 1, 2, 83, + BigInteger.Zero, + FromHex("C8619ED45A62E6212E1160349E2BFA844439FAFC2A3FD1638F9E"), + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0289FDFBE4ABE193DF9559ECF07AC0CE78554E2784EB8C1ED1A57A"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class C2tnb239v1Holder + : X9ECParametersHolder + { + private C2tnb239v1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new C2tnb239v1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("2000000000000000000000000000000F4D42FFE1492A4993F1CAD666E447"); + BigInteger h = BigInteger.ValueOf(4); + + return ConfigureCurve(new F2mCurve( + 239, + 36, + FromHex("32010857077C5431123A46B808906756F543423E8D27877578125778AC76"), + FromHex("790408F2EEDAF392B012EDEFB3392F30F4327C0CA3F31FC383C422AA8C16"), + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0257927098FA932E7C0A96D3FD5B706EF7E5F5C156E16B7E7C86038552E91D"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class C2tnb239v2Holder + : X9ECParametersHolder + { + private C2tnb239v2Holder() {} + + internal static readonly X9ECParametersHolder Instance = new C2tnb239v2Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("1555555555555555555555555555553C6F2885259C31E3FCDF154624522D"); + BigInteger h = BigInteger.ValueOf(6); + + return ConfigureCurve(new F2mCurve( + 239, + 36, + FromHex("4230017757A767FAE42398569B746325D45313AF0766266479B75654E65F"), + FromHex("5037EA654196CFF0CD82B2C14A2FCF2E3FF8775285B545722F03EACDB74B"), + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0228F9D04E900069C8DC47A08534FE76D2B900B7D7EF31F5709F200C4CA205"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class C2tnb239v3Holder + : X9ECParametersHolder + { + private C2tnb239v3Holder() {} + + internal static readonly X9ECParametersHolder Instance = new C2tnb239v3Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCAC4912D2D9DF903EF9888B8A0E4CFF"); + BigInteger h = BigInteger.ValueOf(10); + + return ConfigureCurve(new F2mCurve( + 239, + 36, + FromHex("01238774666A67766D6676F778E676B66999176666E687666D8766C66A9F"), + FromHex("6A941977BA9F6A435199ACFC51067ED587F519C5ECB541B8E44111DE1D40"), + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "0370F6E9D04D289C4E89913CE3530BFDE903977D42B146D539BF1BDE4E9C92"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class C2pnb272w1Holder + : X9ECParametersHolder + { + private C2pnb272w1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new C2pnb272w1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("0100FAF51354E0E39E4892DF6E319C72C8161603FA45AA7B998A167B8F1E629521"); + BigInteger h = BigInteger.ValueOf(0xFF06); + + return ConfigureCurve(new F2mCurve( + 272, + 1, 3, 56, + FromHex("91A091F03B5FBA4AB2CCF49C4EDD220FB028712D42BE752B2C40094DBACDB586FB20"), + FromHex("7167EFC92BB2E3CE7C8AAAFF34E12A9C557003D7C73A6FAF003F99F6CC8482E540F7"), + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "026108BABB2CEEBCF787058A056CBE0CFE622D7723A289E08A07AE13EF0D10D171DD8D"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class C2pnb304w1Holder + : X9ECParametersHolder + { + private C2pnb304w1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new C2pnb304w1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("0101D556572AABAC800101D556572AABAC8001022D5C91DD173F8FB561DA6899164443051D"); + BigInteger h = BigInteger.ValueOf(0xFE2E); + + return ConfigureCurve(new F2mCurve( + 304, + 1, 2, 11, + FromHex("FD0D693149A118F651E6DCE6802085377E5F882D1B510B44160074C1288078365A0396C8E681"), + FromHex("BDDB97E555A50A908E43B01C798EA5DAA6788F1EA2794EFCF57166B8C14039601E55827340BE"), + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "02197B07845E9BE2D96ADB0F5F3C7F2CFFBD7A3EB8B6FEC35C7FD67F26DDF6285A644F740A2614"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class C2tnb359v1Holder + : X9ECParametersHolder + { + private C2tnb359v1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new C2tnb359v1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("01AF286BCA1AF286BCA1AF286BCA1AF286BCA1AF286BC9FB8F6B85C556892C20A7EB964FE7719E74F490758D3B"); + BigInteger h = BigInteger.ValueOf(0x4C); + + return ConfigureCurve(new F2mCurve( + 359, + 68, + FromHex("5667676A654B20754F356EA92017D946567C46675556F19556A04616B567D223A5E05656FB549016A96656A557"), + FromHex("2472E2D0197C49363F1FE7F5B6DB075D52B6947D135D8CA445805D39BC345626089687742B6329E70680231988"), + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "033C258EF3047767E7EDE0F1FDAA79DAEE3841366A132E163ACED4ED2401DF9C6BDCDE98E8E707C07A2239B1B097"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class C2pnb368w1Holder + : X9ECParametersHolder + { + private C2pnb368w1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new C2pnb368w1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("010090512DA9AF72B08349D98A5DD4C7B0532ECA51CE03E2D10F3B7AC579BD87E909AE40A6F131E9CFCE5BD967"); + BigInteger h = BigInteger.ValueOf(0xFF70); + + return ConfigureCurve(new F2mCurve( + 368, + 1, 2, 85, + FromHex("E0D2EE25095206F5E2A4F9ED229F1F256E79A0E2B455970D8D0D865BD94778C576D62F0AB7519CCD2A1A906AE30D"), + FromHex("FC1217D4320A90452C760A58EDCD30C8DD069B3C34453837A34ED50CB54917E1C2112D84D164F444F8F74786046A"), + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "021085E2755381DCCCE3C1557AFA10C2F0C0C2825646C5B34A394CBCFA8BC16B22E7E789E927BE216F02E1FB136A5F"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class C2tnb431r1Holder + : X9ECParametersHolder + { + private C2tnb431r1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new C2tnb431r1Holder(); + + protected override ECCurve CreateCurve() + { + BigInteger n = FromHex("0340340340340340340340340340340340340340340340340340340323C313FAB50589703B5EC68D3587FEC60D161CC149C1AD4A91"); + BigInteger h = BigInteger.ValueOf(0x2760); + + return ConfigureCurve(new F2mCurve( + 431, + 120, + FromHex("1A827EF00DD6FC0E234CAF046C6A5D8A85395B236CC4AD2CF32A0CADBDC9DDF620B0EB9906D0957F6C6FEACD615468DF104DE296CD8F"), + FromHex("10D9B4A3D9047D8B154359ABFB1B7F5485B04CEB868237DDC9DEDA982A679A5A919B626D4E50A8DD731B107A9962381FB5D807BF2618"), + n, h)); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + + X9ECPoint G = ConfigureBasepoint(curve, + "02120FC05D3C67A99DE161D2F4092622FECA701BE4F50F4758714E8A87BBF2A658EF8C21E7C5EFE965361F6C2999C0C247B0DBD70CE6B7"); + + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + private static readonly Dictionary objIds = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly Dictionary curves = + new Dictionary(); + private static readonly Dictionary names = + new Dictionary(); + + private static void DefineCurve(string name, DerObjectIdentifier oid, X9ECParametersHolder holder) + { + objIds.Add(name, oid); + names.Add(oid, name); + curves.Add(oid, holder); + } + + static X962NamedCurves() + { + DefineCurve("prime192v1", X9ObjectIdentifiers.Prime192v1, Prime192v1Holder.Instance); + DefineCurve("prime192v2", X9ObjectIdentifiers.Prime192v2, Prime192v2Holder.Instance); + DefineCurve("prime192v3", X9ObjectIdentifiers.Prime192v3, Prime192v3Holder.Instance); + DefineCurve("prime239v1", X9ObjectIdentifiers.Prime239v1, Prime239v1Holder.Instance); + DefineCurve("prime239v2", X9ObjectIdentifiers.Prime239v2, Prime239v2Holder.Instance); + DefineCurve("prime239v3", X9ObjectIdentifiers.Prime239v3, Prime239v3Holder.Instance); + DefineCurve("prime256v1", X9ObjectIdentifiers.Prime256v1, Prime256v1Holder.Instance); + DefineCurve("c2pnb163v1", X9ObjectIdentifiers.C2Pnb163v1, C2pnb163v1Holder.Instance); + DefineCurve("c2pnb163v2", X9ObjectIdentifiers.C2Pnb163v2, C2pnb163v2Holder.Instance); + DefineCurve("c2pnb163v3", X9ObjectIdentifiers.C2Pnb163v3, C2pnb163v3Holder.Instance); + DefineCurve("c2pnb176w1", X9ObjectIdentifiers.C2Pnb176w1, C2pnb176w1Holder.Instance); + DefineCurve("c2tnb191v1", X9ObjectIdentifiers.C2Tnb191v1, C2tnb191v1Holder.Instance); + DefineCurve("c2tnb191v2", X9ObjectIdentifiers.C2Tnb191v2, C2tnb191v2Holder.Instance); + DefineCurve("c2tnb191v3", X9ObjectIdentifiers.C2Tnb191v3, C2tnb191v3Holder.Instance); + DefineCurve("c2pnb208w1", X9ObjectIdentifiers.C2Pnb208w1, C2pnb208w1Holder.Instance); + DefineCurve("c2tnb239v1", X9ObjectIdentifiers.C2Tnb239v1, C2tnb239v1Holder.Instance); + DefineCurve("c2tnb239v2", X9ObjectIdentifiers.C2Tnb239v2, C2tnb239v2Holder.Instance); + DefineCurve("c2tnb239v3", X9ObjectIdentifiers.C2Tnb239v3, C2tnb239v3Holder.Instance); + DefineCurve("c2pnb272w1", X9ObjectIdentifiers.C2Pnb272w1, C2pnb272w1Holder.Instance); + DefineCurve("c2pnb304w1", X9ObjectIdentifiers.C2Pnb304w1, C2pnb304w1Holder.Instance); + DefineCurve("c2tnb359v1", X9ObjectIdentifiers.C2Tnb359v1, C2tnb359v1Holder.Instance); + DefineCurve("c2pnb368w1", X9ObjectIdentifiers.C2Pnb368w1, C2pnb368w1Holder.Instance); + DefineCurve("c2tnb431r1", X9ObjectIdentifiers.C2Tnb431r1, C2tnb431r1Holder.Instance); + } + + /// Look up the for the curve with the given name. + /// The name of the curve. + public static X9ECParameters GetByName(string name) + { + DerObjectIdentifier oid = GetOid(name); + return oid == null ? null : GetByOid(oid); + } + + /// Look up an for the curve with the given name. + /// + /// Allows accessing the curve without necessarily triggering the creation of the + /// full . + /// + /// The name of the curve. + public static X9ECParametersHolder GetByNameLazy(string name) + { + DerObjectIdentifier oid = GetOid(name); + return oid == null ? null : GetByOidLazy(oid); + } + + /// Look up the for the curve with the given + /// OID. + /// The OID for the curve. + public static X9ECParameters GetByOid(DerObjectIdentifier oid) + { + return GetByOidLazy(oid)?.Parameters; + } + + /// Look up an for the curve with the given + /// OID. + /// + /// Allows accessing the curve without necessarily triggering the creation of the + /// full . + /// + /// The OID for the curve. + public static X9ECParametersHolder GetByOidLazy(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(curves, oid); + } + + /// Look up the name of the curve with the given OID. + /// The OID for the curve. + public static string GetName(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(names, oid); + } + + /// Look up the OID of the curve with the given name. + /// The name of the curve. + public static DerObjectIdentifier GetOid(string name) + { + return CollectionUtilities.GetValueOrNull(objIds, name); + } + + /// Enumerate the available curve names in this registry. + public static IEnumerable Names + { + get { return CollectionUtilities.Proxy(objIds.Keys); } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X962NamedCurves.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X962NamedCurves.cs.meta new file mode 100644 index 000000000..219951161 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X962NamedCurves.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d7cc30986b054f343b703754ae6cf47d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X962Parameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X962Parameters.cs new file mode 100644 index 000000000..782af7ccb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X962Parameters.cs @@ -0,0 +1,97 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9 +{ + public class X962Parameters + : Asn1Encodable, IAsn1Choice + { + private readonly Asn1Object _params; + + public static X962Parameters GetInstance( + object obj) + { + if (obj == null || obj is X962Parameters) + { + return (X962Parameters)obj; + } + + if (obj is Asn1Object) + { + return new X962Parameters((Asn1Object)obj); + } + + if (obj is byte[]) + { + try + { + return new X962Parameters(Asn1Object.FromByteArray((byte[])obj)); + } + catch (Exception e) + { + throw new ArgumentException("unable to parse encoded data: " + e.Message, e); + } + } + + throw new ArgumentException("unknown object in getInstance()"); + } + + public X962Parameters( + X9ECParameters ecParameters) + { + this._params = ecParameters.ToAsn1Object(); + } + + public X962Parameters( + DerObjectIdentifier namedCurve) + { + this._params = namedCurve; + } + + public X962Parameters( + Asn1Null obj) + { + this._params = obj; + } + + private X962Parameters(Asn1Object obj) + { + this._params = obj; + } + + public bool IsNamedCurve + { + get { return (_params is DerObjectIdentifier); } + } + + public bool IsImplicitlyCA + { + get { return (_params is Asn1Null); } + } + + public Asn1Object Parameters + { + get { return _params; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         * Parameters ::= CHOICE {
+         *    ecParameters ECParameters,
+         *    namedCurve   CURVES.&id({CurveNames}),
+         *    implicitlyCA Null
+         * }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return _params; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X962Parameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X962Parameters.cs.meta new file mode 100644 index 000000000..7cf2549a0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X962Parameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 61bfd513d3b6d3440aa9b03f5abe13b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9Curve.cs new file mode 100644 index 000000000..78f4384d1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9Curve.cs @@ -0,0 +1,151 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9 +{ + /** + * ASN.1 def for Elliptic-Curve Curve structure. See + * X9.62, for further details. + */ + public class X9Curve + : Asn1Encodable + { + private readonly ECCurve curve; + private readonly byte[] seed; + private readonly DerObjectIdentifier fieldIdentifier; + + public X9Curve( + ECCurve curve) + : this(curve, null) + { + } + + public X9Curve( + ECCurve curve, + byte[] seed) + { + if (curve == null) + throw new ArgumentNullException("curve"); + + this.curve = curve; + this.seed = Arrays.Clone(seed); + + if (ECAlgorithms.IsFpCurve(curve)) + { + this.fieldIdentifier = X9ObjectIdentifiers.PrimeField; + } + else if (ECAlgorithms.IsF2mCurve(curve)) + { + this.fieldIdentifier = X9ObjectIdentifiers.CharacteristicTwoField; + } + else + { + throw new ArgumentException("This type of ECCurve is not implemented"); + } + } + + public X9Curve( + X9FieldID fieldID, + BigInteger order, + BigInteger cofactor, + Asn1Sequence seq) + { + if (fieldID == null) + throw new ArgumentNullException("fieldID"); + if (seq == null) + throw new ArgumentNullException("seq"); + + this.fieldIdentifier = fieldID.Identifier; + + if (fieldIdentifier.Equals(X9ObjectIdentifiers.PrimeField)) + { + BigInteger p = ((DerInteger)fieldID.Parameters).Value; + BigInteger A = new BigInteger(1, Asn1OctetString.GetInstance(seq[0]).GetOctets()); + BigInteger B = new BigInteger(1, Asn1OctetString.GetInstance(seq[1]).GetOctets()); + curve = new FpCurve(p, A, B, order, cofactor); + } + else if (fieldIdentifier.Equals(X9ObjectIdentifiers.CharacteristicTwoField)) + { + // Characteristic two field + DerSequence parameters = (DerSequence)fieldID.Parameters; + int m = ((DerInteger)parameters[0]).IntValueExact; + DerObjectIdentifier representation = (DerObjectIdentifier)parameters[1]; + + int k1 = 0; + int k2 = 0; + int k3 = 0; + if (representation.Equals(X9ObjectIdentifiers.TPBasis)) + { + // Trinomial basis representation + k1 = ((DerInteger)parameters[2]).IntValueExact; + } + else + { + // Pentanomial basis representation + DerSequence pentanomial = (DerSequence) parameters[2]; + k1 = ((DerInteger)pentanomial[0]).IntValueExact; + k2 = ((DerInteger)pentanomial[1]).IntValueExact; + k3 = ((DerInteger)pentanomial[2]).IntValueExact; + } + BigInteger A = new BigInteger(1, Asn1OctetString.GetInstance(seq[0]).GetOctets()); + BigInteger B = new BigInteger(1, Asn1OctetString.GetInstance(seq[1]).GetOctets()); + curve = new F2mCurve(m, k1, k2, k3, A, B, order, cofactor); + } + else + { + throw new ArgumentException("This type of ECCurve is not implemented"); + } + + if (seq.Count == 3) + { + seed = ((DerBitString)seq[2]).GetBytes(); + } + } + + public ECCurve Curve + { + get { return curve; } + } + + public byte[] GetSeed() + { + return Arrays.Clone(seed); + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         *  Curve ::= Sequence {
+         *      a               FieldElement,
+         *      b               FieldElement,
+         *      seed            BIT STRING      OPTIONAL
+         *  }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + if (fieldIdentifier.Equals(X9ObjectIdentifiers.PrimeField) + || fieldIdentifier.Equals(X9ObjectIdentifiers.CharacteristicTwoField)) + { + v.Add(new X9FieldElement(curve.A).ToAsn1Object()); + v.Add(new X9FieldElement(curve.B).ToAsn1Object()); + } + + if (seed != null) + { + v.Add(new DerBitString(seed)); + } + + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9Curve.cs.meta new file mode 100644 index 000000000..d214031aa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f72ea46afaacfe4bbf9bb8fbff91598 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ECParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ECParameters.cs new file mode 100644 index 000000000..77a74b0ac --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ECParameters.cs @@ -0,0 +1,215 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Field; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9 +{ + /** + * ASN.1 def for Elliptic-Curve ECParameters structure. See + * X9.62, for further details. + */ + public class X9ECParameters + : Asn1Encodable + { + private X9FieldID fieldID; + private ECCurve curve; + private X9ECPoint g; + private BigInteger n; + private BigInteger h; + private byte[] seed; + + public static X9ECParameters GetInstance(object obj) + { + if (obj is X9ECParameters) + return (X9ECParameters)obj; + + if (obj != null) + return new X9ECParameters(Asn1Sequence.GetInstance(obj)); + + return null; + } + + public X9ECParameters( + Asn1Sequence seq) + { + if (!(seq[0] is DerInteger) + || !((DerInteger)seq[0]).HasValue(1)) + { + throw new ArgumentException("bad version in X9ECParameters"); + } + + this.n = ((DerInteger)seq[4]).Value; + + if (seq.Count == 6) + { + this.h = ((DerInteger)seq[5]).Value; + } + + X9Curve x9c = new X9Curve( + X9FieldID.GetInstance(seq[1]), n, h, + Asn1Sequence.GetInstance(seq[2])); + + this.curve = x9c.Curve; + object p = seq[3]; + + if (p is X9ECPoint) + { + this.g = (X9ECPoint)p; + } + else + { + this.g = new X9ECPoint(curve, (Asn1OctetString)p); + } + + this.seed = x9c.GetSeed(); + } + + public X9ECParameters( + ECCurve curve, + X9ECPoint g, + BigInteger n) + : this(curve, g, n, null, null) + { + } + + public X9ECParameters( + ECCurve curve, + X9ECPoint g, + BigInteger n, + BigInteger h) + : this(curve, g, n, h, null) + { + } + + public X9ECParameters( + ECCurve curve, + X9ECPoint g, + BigInteger n, + BigInteger h, + byte[] seed) + { + this.curve = curve; + this.g = g; + this.n = n; + this.h = h; + this.seed = seed; + + if (ECAlgorithms.IsFpCurve(curve)) + { + this.fieldID = new X9FieldID(curve.Field.Characteristic); + } + else if (ECAlgorithms.IsF2mCurve(curve)) + { + IPolynomialExtensionField field = (IPolynomialExtensionField)curve.Field; + int[] exponents = field.MinimalPolynomial.GetExponentsPresent(); + if (exponents.Length == 3) + { + this.fieldID = new X9FieldID(exponents[2], exponents[1]); + } + else if (exponents.Length == 5) + { + this.fieldID = new X9FieldID(exponents[4], exponents[1], exponents[2], exponents[3]); + } + else + { + throw new ArgumentException("Only trinomial and pentomial curves are supported"); + } + } + else + { + throw new ArgumentException("'curve' is of an unsupported type"); + } + } + + public ECCurve Curve + { + get { return curve; } + } + + public ECPoint G + { + get { return g.Point; } + } + + public BigInteger N + { + get { return n; } + } + + public BigInteger H + { + get { return h; } + } + + public byte[] GetSeed() + { + return seed; + } + + /** + * Return the ASN.1 entry representing the Curve. + * + * @return the X9Curve for the curve in these parameters. + */ + public X9Curve CurveEntry + { + get { return new X9Curve(curve, seed); } + } + + /** + * Return the ASN.1 entry representing the FieldID. + * + * @return the X9FieldID for the FieldID in these parameters. + */ + public X9FieldID FieldIDEntry + { + get { return fieldID; } + } + + /** + * Return the ASN.1 entry representing the base point G. + * + * @return the X9ECPoint for the base point in these parameters. + */ + public X9ECPoint BaseEntry + { + get { return g; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         *  ECParameters ::= Sequence {
+         *      version         Integer { ecpVer1(1) } (ecpVer1),
+         *      fieldID         FieldID {{FieldTypes}},
+         *      curve           X9Curve,
+         *      base            X9ECPoint,
+         *      order           Integer,
+         *      cofactor        Integer OPTIONAL
+         *  }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + Asn1EncodableVector v = new Asn1EncodableVector( + new DerInteger(BigInteger.One), + fieldID, + new X9Curve(curve, seed), + g, + new DerInteger(n)); + + if (h != null) + { + v.Add(new DerInteger(h)); + } + + return new DerSequence(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ECParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ECParameters.cs.meta new file mode 100644 index 000000000..88dd2e8cf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ECParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68de537605868744dbde9c6576be1805 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ECParametersHolder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ECParametersHolder.cs new file mode 100644 index 000000000..09eccd861 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ECParametersHolder.cs @@ -0,0 +1,53 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9 +{ + public abstract class X9ECParametersHolder + { + private ECCurve m_curve; + private X9ECParameters m_parameters; + + public ECCurve Curve + { + get + { + lock (this) + { + if (m_curve == null) + { + m_curve = CreateCurve(); + } + + return m_curve; + } + } + } + + public X9ECParameters Parameters + { + get + { + lock (this) + { + if (m_parameters == null) + { + m_parameters = CreateParameters(); + } + + return m_parameters; + } + } + } + + protected virtual ECCurve CreateCurve() + { + return CreateParameters().Curve; + } + + protected abstract X9ECParameters CreateParameters(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ECParametersHolder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ECParametersHolder.cs.meta new file mode 100644 index 000000000..8ca727995 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ECParametersHolder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2433893a590e27d438b5bc45cba65e36 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ECPoint.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ECPoint.cs new file mode 100644 index 000000000..b33eba2ea --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ECPoint.cs @@ -0,0 +1,79 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9 +{ + /** + * class for describing an ECPoint as a Der object. + */ + public class X9ECPoint + : Asn1Encodable + { + private readonly Asn1OctetString encoding; + + private ECCurve c; + private ECPoint p; + + public X9ECPoint(ECPoint p, bool compressed) + { + this.p = p.Normalize(); + this.encoding = new DerOctetString(p.GetEncoded(compressed)); + } + + public X9ECPoint(ECCurve c, byte[] encoding) + { + this.c = c; + this.encoding = new DerOctetString(Arrays.Clone(encoding)); + } + + public X9ECPoint(ECCurve c, Asn1OctetString s) + : this(c, s.GetOctets()) + { + } + + public byte[] GetPointEncoding() + { + return Arrays.Clone(encoding.GetOctets()); + } + + public ECPoint Point + { + get + { + if (p == null) + { + p = c.DecodePoint(encoding.GetOctets()).Normalize(); + } + + return p; + } + } + + public bool IsPointCompressed + { + get + { + byte[] octets = encoding.GetOctets(); + return octets != null && octets.Length > 0 && (octets[0] == 2 || octets[0] == 3); + } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         *  ECPoint ::= OCTET STRING
+         * 
+ *

+ * Octet string produced using ECPoint.GetEncoded().

+ */ + public override Asn1Object ToAsn1Object() + { + return encoding; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ECPoint.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ECPoint.cs.meta new file mode 100644 index 000000000..1fdf979e9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ECPoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7836651622621b946bda8dac7d8d97e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9FieldElement.cs new file mode 100644 index 000000000..84d8e9054 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9FieldElement.cs @@ -0,0 +1,56 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9 +{ + /** + * Class for processing an ECFieldElement as a DER object. + */ + public class X9FieldElement + : Asn1Encodable + { + private ECFieldElement f; + + public X9FieldElement( + ECFieldElement f) + { + this.f = f; + } + + public ECFieldElement Value + { + get { return f; } + } + + /** + * Produce an object suitable for an Asn1OutputStream. + *
+         *  FieldElement ::= OCTET STRING
+         * 
+ *

+ *

    + *
  1. if q is an odd prime then the field element is + * processed as an Integer and converted to an octet string + * according to x 9.62 4.3.1.
  2. + *
  3. if q is 2m then the bit string + * contained in the field element is converted into an octet + * string with the same ordering padded at the front if necessary. + *
  4. + *
+ *

+ */ + public override Asn1Object ToAsn1Object() + { + int byteCount = X9IntegerConverter.GetByteLength(f); + byte[] paddedBigInteger = X9IntegerConverter.IntegerToBytes(f.ToBigInteger(), byteCount); + + return new DerOctetString(paddedBigInteger); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9FieldElement.cs.meta new file mode 100644 index 000000000..1902c9bdd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9abf4b8380cc5f4fae08ae4356c3729 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9FieldID.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9FieldID.cs new file mode 100644 index 000000000..d58dc5c0a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9FieldID.cs @@ -0,0 +1,136 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9 +{ + /** + * ASN.1 def for Elliptic-Curve Field ID structure. See + * X9.62, for further details. + */ + public class X9FieldID + : Asn1Encodable + { + private readonly DerObjectIdentifier id; + private readonly Asn1Object parameters; + + /** + * Constructor for elliptic curves over prime fields + * F2. + * @param primeP The prime p defining the prime field. + */ + public X9FieldID( + BigInteger primeP) + { + this.id = X9ObjectIdentifiers.PrimeField; + this.parameters = new DerInteger(primeP); + } + + /** + * Constructor for elliptic curves over binary fields + * F2m. + * @param m The exponent m of + * F2m. + * @param k1 The integer k1 where xm + + * xk1 + 1 + * represents the reduction polynomial f(z). + */ + public X9FieldID(int m, int k1) + : this(m, k1, 0, 0) + { + } + + /** + * Constructor for elliptic curves over binary fields + * F2m. + * @param m The exponent m of + * F2m. + * @param k1 The integer k1 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z). + * @param k2 The integer k2 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z). + * @param k3 The integer k3 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z).. + */ + public X9FieldID( + int m, + int k1, + int k2, + int k3) + { + this.id = X9ObjectIdentifiers.CharacteristicTwoField; + + Asn1EncodableVector fieldIdParams = new Asn1EncodableVector(new DerInteger(m)); + + if (k2 == 0) + { + if (k3 != 0) + throw new ArgumentException("inconsistent k values"); + + fieldIdParams.Add( + X9ObjectIdentifiers.TPBasis, + new DerInteger(k1)); + } + else + { + if (k2 <= k1 || k3 <= k2) + throw new ArgumentException("inconsistent k values"); + + fieldIdParams.Add( + X9ObjectIdentifiers.PPBasis, + new DerSequence( + new DerInteger(k1), + new DerInteger(k2), + new DerInteger(k3))); + } + + this.parameters = new DerSequence(fieldIdParams); + } + + private X9FieldID(Asn1Sequence seq) + { + this.id = DerObjectIdentifier.GetInstance(seq[0]); + this.parameters = seq[1].ToAsn1Object(); + } + + public static X9FieldID GetInstance(object obj) + { + if (obj is X9FieldID) + return (X9FieldID)obj; + if (obj == null) + return null; + return new X9FieldID(Asn1Sequence.GetInstance(obj)); + } + + public DerObjectIdentifier Identifier + { + get { return id; } + } + + public Asn1Object Parameters + { + get { return parameters; } + } + + /** + * Produce a Der encoding of the following structure. + *
+         *  FieldID ::= Sequence {
+         *      fieldType       FIELD-ID.&id({IOSet}),
+         *      parameters      FIELD-ID.&Type({IOSet}{@fieldType})
+         *  }
+         * 
+ */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(id, parameters); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9FieldID.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9FieldID.cs.meta new file mode 100644 index 000000000..a1dba1e78 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9FieldID.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6662fe1cbc846fc4ea6de22585a73840 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9IntegerConverter.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9IntegerConverter.cs new file mode 100644 index 000000000..2a44d50f7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9IntegerConverter.cs @@ -0,0 +1,44 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9 +{ + public abstract class X9IntegerConverter + { + public static int GetByteLength(ECFieldElement fe) + { + return (fe.FieldSize + 7) / 8; + } + + public static int GetByteLength(ECCurve c) + { + return (c.FieldSize + 7) / 8; + } + + public static byte[] IntegerToBytes(BigInteger s, int qLength) + { + byte[] bytes = s.ToByteArrayUnsigned(); + + if (qLength < bytes.Length) + { + byte[] tmp = new byte[qLength]; + Array.Copy(bytes, bytes.Length - tmp.Length, tmp, 0, tmp.Length); + return tmp; + } + else if (qLength > bytes.Length) + { + byte[] tmp = new byte[qLength]; + Array.Copy(bytes, 0, tmp, tmp.Length - bytes.Length, bytes.Length); + return tmp; + } + + return bytes; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9IntegerConverter.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9IntegerConverter.cs.meta new file mode 100644 index 000000000..93be45609 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9IntegerConverter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f767dcd9b1855b447b6bb009b1a39508 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ObjectIdentifiers.cs new file mode 100644 index 000000000..3a4aa549f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ObjectIdentifiers.cs @@ -0,0 +1,135 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9 +{ + public abstract class X9ObjectIdentifiers + { + // + // X9.62 + // + // ansi-X9-62 OBJECT IDENTIFIER ::= { iso(1) member-body(2) + // us(840) ansi-x962(10045) } + // + + public static readonly DerObjectIdentifier ansi_X9_62 = new DerObjectIdentifier("1.2.840.10045"); + + public static readonly DerObjectIdentifier IdFieldType = ansi_X9_62.Branch("1"); + + public static readonly DerObjectIdentifier PrimeField = IdFieldType.Branch("1"); + public static readonly DerObjectIdentifier CharacteristicTwoField = IdFieldType.Branch("2"); + + public static readonly DerObjectIdentifier GNBasis = CharacteristicTwoField.Branch("3.1"); + public static readonly DerObjectIdentifier TPBasis = CharacteristicTwoField.Branch("3.2"); + public static readonly DerObjectIdentifier PPBasis = CharacteristicTwoField.Branch("3.3"); + + public static readonly DerObjectIdentifier id_ecSigType = ansi_X9_62.Branch("4"); + + public static readonly DerObjectIdentifier ECDsaWithSha1 = id_ecSigType.Branch("1"); + + public static readonly DerObjectIdentifier id_publicKeyType = ansi_X9_62.Branch("2"); + + public static readonly DerObjectIdentifier IdECPublicKey = id_publicKeyType.Branch("1"); + + public static readonly DerObjectIdentifier ECDsaWithSha2 = id_ecSigType.Branch("3"); + + public static readonly DerObjectIdentifier ECDsaWithSha224 = ECDsaWithSha2.Branch("1"); + public static readonly DerObjectIdentifier ECDsaWithSha256 = ECDsaWithSha2.Branch("2"); + public static readonly DerObjectIdentifier ECDsaWithSha384 = ECDsaWithSha2.Branch("3"); + public static readonly DerObjectIdentifier ECDsaWithSha512 = ECDsaWithSha2.Branch("4"); + + + // + // named curves + // + public static readonly DerObjectIdentifier EllipticCurve = ansi_X9_62.Branch("3"); + + // + // Two Curves + // + public static readonly DerObjectIdentifier CTwoCurve = EllipticCurve.Branch("0"); + + public static readonly DerObjectIdentifier C2Pnb163v1 = CTwoCurve.Branch("1"); + public static readonly DerObjectIdentifier C2Pnb163v2 = CTwoCurve.Branch("2"); + public static readonly DerObjectIdentifier C2Pnb163v3 = CTwoCurve.Branch("3"); + public static readonly DerObjectIdentifier C2Pnb176w1 = CTwoCurve.Branch("4"); + public static readonly DerObjectIdentifier C2Tnb191v1 = CTwoCurve.Branch("5"); + public static readonly DerObjectIdentifier C2Tnb191v2 = CTwoCurve.Branch("6"); + public static readonly DerObjectIdentifier C2Tnb191v3 = CTwoCurve.Branch("7"); + public static readonly DerObjectIdentifier C2Onb191v4 = CTwoCurve.Branch("8"); + public static readonly DerObjectIdentifier C2Onb191v5 = CTwoCurve.Branch("9"); + public static readonly DerObjectIdentifier C2Pnb208w1 = CTwoCurve.Branch("10"); + public static readonly DerObjectIdentifier C2Tnb239v1 = CTwoCurve.Branch("11"); + public static readonly DerObjectIdentifier C2Tnb239v2 = CTwoCurve.Branch("12"); + public static readonly DerObjectIdentifier C2Tnb239v3 = CTwoCurve.Branch("13"); + public static readonly DerObjectIdentifier C2Onb239v4 = CTwoCurve.Branch("14"); + public static readonly DerObjectIdentifier C2Onb239v5 = CTwoCurve.Branch("15"); + public static readonly DerObjectIdentifier C2Pnb272w1 = CTwoCurve.Branch("16"); + public static readonly DerObjectIdentifier C2Pnb304w1 = CTwoCurve.Branch("17"); + public static readonly DerObjectIdentifier C2Tnb359v1 = CTwoCurve.Branch("18"); + public static readonly DerObjectIdentifier C2Pnb368w1 = CTwoCurve.Branch("19"); + public static readonly DerObjectIdentifier C2Tnb431r1 = CTwoCurve.Branch("20"); + + // + // Prime + // + public static readonly DerObjectIdentifier PrimeCurve = EllipticCurve.Branch("1"); + + public static readonly DerObjectIdentifier Prime192v1 = PrimeCurve.Branch("1"); + public static readonly DerObjectIdentifier Prime192v2 = PrimeCurve.Branch("2"); + public static readonly DerObjectIdentifier Prime192v3 = PrimeCurve.Branch("3"); + public static readonly DerObjectIdentifier Prime239v1 = PrimeCurve.Branch("4"); + public static readonly DerObjectIdentifier Prime239v2 = PrimeCurve.Branch("5"); + public static readonly DerObjectIdentifier Prime239v3 = PrimeCurve.Branch("6"); + public static readonly DerObjectIdentifier Prime256v1 = PrimeCurve.Branch("7"); + + // + // DSA + // + // dsapublicnumber OBJECT IDENTIFIER ::= { iso(1) member-body(2) + // us(840) ansi-x957(10040) number-type(4) 1 } + public static readonly DerObjectIdentifier IdDsa = new DerObjectIdentifier("1.2.840.10040.4.1"); + + /** + * id-dsa-with-sha1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) + * us(840) x9-57 (10040) x9cm(4) 3 } + */ + public static readonly DerObjectIdentifier IdDsaWithSha1 = new DerObjectIdentifier("1.2.840.10040.4.3"); + + /** + * X9.63 + */ + public static readonly DerObjectIdentifier X9x63Scheme = new DerObjectIdentifier("1.3.133.16.840.63.0"); + public static readonly DerObjectIdentifier DHSinglePassStdDHSha1KdfScheme = X9x63Scheme.Branch("2"); + public static readonly DerObjectIdentifier DHSinglePassCofactorDHSha1KdfScheme = X9x63Scheme.Branch("3"); + public static readonly DerObjectIdentifier MqvSinglePassSha1KdfScheme = X9x63Scheme.Branch("16"); + + /** + * X9.42 + */ + + public static readonly DerObjectIdentifier ansi_x9_42 = new DerObjectIdentifier("1.2.840.10046"); + + // + // Diffie-Hellman + // + // dhpublicnumber OBJECT IDENTIFIER ::= { iso(1) member-body(2) + // us(840) ansi-x942(10046) number-type(2) 1 } + // + public static readonly DerObjectIdentifier DHPublicNumber = ansi_x9_42.Branch("2.1"); + + public static readonly DerObjectIdentifier X9x42Schemes = ansi_x9_42.Branch("2.3"); + + public static readonly DerObjectIdentifier DHStatic = X9x42Schemes.Branch("1"); + public static readonly DerObjectIdentifier DHEphem = X9x42Schemes.Branch("2"); + public static readonly DerObjectIdentifier DHOneFlow = X9x42Schemes.Branch("3"); + public static readonly DerObjectIdentifier DHHybrid1 = X9x42Schemes.Branch("4"); + public static readonly DerObjectIdentifier DHHybrid2 = X9x42Schemes.Branch("5"); + public static readonly DerObjectIdentifier DHHybridOneFlow = X9x42Schemes.Branch("6"); + public static readonly DerObjectIdentifier Mqv2 = X9x42Schemes.Branch("7"); + public static readonly DerObjectIdentifier Mqv1 = X9x42Schemes.Branch("8"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ObjectIdentifiers.cs.meta new file mode 100644 index 000000000..d0d8ceb79 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/asn1/x9/X9ObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3dd6e9b31ef0ab041a24e2053602a746 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg.meta new file mode 100644 index 000000000..287e9cbcb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 422a021873e9f5c4abc929627100a9ab +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ArmoredInputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ArmoredInputStream.cs new file mode 100644 index 000000000..10dba5703 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ArmoredInputStream.cs @@ -0,0 +1,531 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /** + * reader for Base64 armored objects - read the headers and then start returning + * bytes when the data is reached. An IOException is thrown if the CRC check + * is detected and fails. + *

+ * By default a missing CRC will not cause an exception. To force CRC detection use: + *

+     *     ArmoredInputStream aIn = ...
+     *
+     *     aIn.setDetectMissingCRC(true);
+     * 
+ *

+ */ + public class ArmoredInputStream + : BaseInputStream + { + /* + * set up the decoding table. + */ + private readonly static byte[] decodingTable; + static ArmoredInputStream() + { + decodingTable = new byte[128]; + Arrays.Fill(decodingTable, 0xff); + for (int i = 'A'; i <= 'Z'; i++) + { + decodingTable[i] = (byte)(i - 'A'); + } + for (int i = 'a'; i <= 'z'; i++) + { + decodingTable[i] = (byte)(i - 'a' + 26); + } + for (int i = '0'; i <= '9'; i++) + { + decodingTable[i] = (byte)(i - '0' + 52); + } + decodingTable['+'] = 62; + decodingTable['/'] = 63; + } + + /** + * decode the base 64 encoded input data. + * + * @return the offset the data starts in out. + */ + private static int Decode(int in0, int in1, int in2, int in3, int[] result) + { + if (in3 < 0) + throw new EndOfStreamException("unexpected end of file in armored stream."); + + int b1, b2, b3, b4; + if (in2 == '=') + { + b1 = decodingTable[in0]; + b2 = decodingTable[in1]; + if ((b1 | b2) >= 128) + throw new IOException("invalid armor"); + + result[2] = ((b1 << 2) | (b2 >> 4)) & 0xff; + return 2; + } + else if (in3 == '=') + { + b1 = decodingTable[in0]; + b2 = decodingTable[in1]; + b3 = decodingTable[in2]; + if ((b1 | b2 | b3) >= 128) + throw new IOException("invalid armor"); + + result[1] = ((b1 << 2) | (b2 >> 4)) & 0xff; + result[2] = ((b2 << 4) | (b3 >> 2)) & 0xff; + return 1; + } + else + { + b1 = decodingTable[in0]; + b2 = decodingTable[in1]; + b3 = decodingTable[in2]; + b4 = decodingTable[in3]; + if ((b1 | b2 | b3 | b4) >= 128) + throw new IOException("invalid armor"); + + result[0] = ((b1 << 2) | (b2 >> 4)) & 0xff; + result[1] = ((b2 << 4) | (b3 >> 2)) & 0xff; + result[2] = ((b3 << 6) | b4) & 0xff; + return 0; + } + } + + /* + * Ignore missing CRC checksums. + * https://tests.sequoia-pgp.org/#ASCII_Armor suggests that missing CRC sums do not invalidate the message. + */ + private bool detectMissingChecksum = false; + + Stream input; + bool start = true; + int[] outBuf = new int[3]; + int bufPtr = 3; + Crc24 crc = new Crc24(); + bool crcFound = false; + bool hasHeaders = true; + string header = null; + bool newLineFound = false; + bool clearText = false; + bool restart = false; + IList headerList = new List(); + int lastC = 0; + bool isEndOfStream; + + /** + * Create a stream for reading a PGP armoured message, parsing up to a header + * and then reading the data that follows. + * + * @param input + */ + public ArmoredInputStream(Stream input) + : this(input, true) + { + } + + /** + * Create an armoured input stream which will assume the data starts + * straight away, or parse for headers first depending on the value of + * hasHeaders. + * + * @param input + * @param hasHeaders true if headers are to be looked for, false otherwise. + */ + public ArmoredInputStream(Stream input, bool hasHeaders) + { + this.input = input; + this.hasHeaders = hasHeaders; + + if (hasHeaders) + { + ParseHeaders(); + } + + start = false; + } + + private bool ParseHeaders() + { + header = null; + + int c; + int last = 0; + bool headerFound = false; + + headerList = new List(); + + // + // if restart we already have a header + // + if (restart) + { + headerFound = true; + } + else + { + while ((c = input.ReadByte()) >= 0) + { + if (c == '-' && (last == 0 || last == '\n' || last == '\r')) + { + headerFound = true; + break; + } + + last = c; + } + } + + if (headerFound) + { + StringBuilder buf = new StringBuilder("-"); + bool eolReached = false; + bool crLf = false; + + if (restart) // we've had to look ahead two '-' + { + buf.Append('-'); + } + + while ((c = input.ReadByte()) >= 0) + { + if (last == '\r' && c == '\n') + { + crLf = true; + } + if (eolReached && (last != '\r' && c == '\n')) + { + break; + } + if (eolReached && c == '\r') + { + break; + } + if (c == '\r' || (last != '\r' && c == '\n')) + { + string line = buf.ToString(); + if (line.Trim().Length < 1) + break; + + if (headerList.Count > 0 && line.IndexOf(':') < 0) + throw new IOException("invalid armor header"); + + headerList.Add(line); + buf.Length = 0; + } + + if (c != '\n' && c != '\r') + { + buf.Append((char)c); + eolReached = false; + } + else + { + if (c == '\r' || (last != '\r' && c == '\n')) + { + eolReached = true; + } + } + + last = c; + } + + if (crLf) + { + input.ReadByte(); // skip last \n + } + } + + if (headerList.Count > 0) + { + header = (string)headerList[0]; + } + + clearText = "-----BEGIN PGP SIGNED MESSAGE-----".Equals(header); + newLineFound = true; + + return headerFound; + } + + /** + * @return true if we are inside the clear text section of a PGP + * signed message. + */ + public bool IsClearText() + { + return clearText; + } + + /** + * @return true if the stream is actually at end of file. + */ + public bool IsEndOfStream() + { + return isEndOfStream; + } + + /** + * Return the armor header line (if there is one) + * @return the armor header line, null if none present. + */ + public string GetArmorHeaderLine() + { + return header; + } + + /** + * Return the armor headers (the lines after the armor header line), + * @return an array of armor headers, null if there aren't any. + */ + public string[] GetArmorHeaders() + { + if (headerList.Count <= 1) + return null; + + string[] hdrs = new string[headerList.Count - 1]; + for (int i = 0; i != hdrs.Length; i++) + { + hdrs[i] = (string)headerList[i + 1]; + } + + return hdrs; + } + + private int ReadIgnoreSpace() + { + int c; + do + { + c = input.ReadByte(); + } + while (c == ' ' || c == '\t' || c == '\f' || c == '\u000B') ; // \u000B ~ \v + + if (c >= 128) + throw new IOException("invalid armor"); + + return c; + } + + public override int Read(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + + /* + * TODO Currently can't return partial data when exception thrown (breaking test case), so we don't inherit + * the base class implementation. Probably the reason is that throws don't mark this instance as 'failed'. + */ + int pos = 0; + while (pos < count) + { + int b = ReadByte(); + if (b < 0) + break; + + buffer[offset + pos++] = (byte)b; + } + return pos; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int Read(Span buffer) + { + /* + * TODO Currently can't return partial data when exception thrown (breaking test case), so we don't inherit + * the base class implementation. Probably the reason is that throws don't mark this instance as 'failed'. + */ + int pos = 0; + while (pos < buffer.Length) + { + int b = ReadByte(); + if (b < 0) + break; + + buffer[pos++] = (byte)b; + } + return pos; + } +#endif + + public override int ReadByte() + { + if (start) + { + if (hasHeaders) + { + ParseHeaders(); + } + + crc.Reset(); + start = false; + } + + int c; + + if (clearText) + { + c = input.ReadByte(); + + if (c == '\r' || (c == '\n' && lastC != '\r')) + { + newLineFound = true; + } + else if (newLineFound && c == '-') + { + c = input.ReadByte(); + if (c == '-') // a header, not dash escaped + { + clearText = false; + start = true; + restart = true; + } + else // a space - must be a dash escape + { + c = input.ReadByte(); + } + newLineFound = false; + } + else + { + if (c != '\n' && lastC != '\r') + { + newLineFound = false; + } + } + + lastC = c; + + if (c < 0) + { + isEndOfStream = true; + } + + return c; + } + + if (bufPtr > 2 || crcFound) + { + c = ReadIgnoreSpace(); + + if (c == '\r' || c == '\n') + { + c = ReadIgnoreSpace(); + + while (c == '\n' || c == '\r') + { + c = ReadIgnoreSpace(); + } + + if (c < 0) // EOF + { + isEndOfStream = true; + return -1; + } + + if (c == '=') // crc reached + { + bufPtr = Decode(ReadIgnoreSpace(), ReadIgnoreSpace(), ReadIgnoreSpace(), ReadIgnoreSpace(), outBuf); + if (bufPtr == 0) + { + int i = ((outBuf[0] & 0xff) << 16) + | ((outBuf[1] & 0xff) << 8) + | (outBuf[2] & 0xff); + + crcFound = true; + + if (i != crc.Value) + { + throw new IOException("crc check failed in armored message."); + } + return ReadByte(); + } + else + { + if (detectMissingChecksum) + { + throw new IOException("no crc found in armored message"); + } + } + } + else if (c == '-') // end of record reached + { + while ((c = input.ReadByte()) >= 0) + { + if (c == '\n' || c == '\r') + { + break; + } + } + + if (!crcFound && detectMissingChecksum) + { + throw new IOException("crc check not found"); + } + + crcFound = false; + start = true; + bufPtr = 3; + + if (c < 0) + { + isEndOfStream = true; + } + + return -1; + } + else // data + { + bufPtr = Decode(c, ReadIgnoreSpace(), ReadIgnoreSpace(), ReadIgnoreSpace(), outBuf); + } + } + else + { + if (c >= 0) + { + bufPtr = Decode(c, ReadIgnoreSpace(), ReadIgnoreSpace(), ReadIgnoreSpace(), outBuf); + } + else + { + isEndOfStream = true; + return -1; + } + } + } + + c = outBuf[bufPtr++]; + + crc.Update(c); + + return c; + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + input.Dispose(); + } + base.Dispose(disposing); + } + + /** + * Change how the stream should react if it encounters missing CRC checksum. + * The default value is false (ignore missing CRC checksums). If the behavior is set to true, + * an {@link IOException} will be thrown if a missing CRC checksum is encountered. + * + * @param detectMissing ignore missing CRC sums + */ + public virtual void SetDetectMissingCrc(bool detectMissing) + { + this.detectMissingChecksum = detectMissing; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ArmoredInputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ArmoredInputStream.cs.meta new file mode 100644 index 000000000..79d6a2ec9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ArmoredInputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9a86cdd2cf17a348946f31bff2c0261 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ArmoredOutputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ArmoredOutputStream.cs new file mode 100644 index 000000000..f0fa0bc3f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ArmoredOutputStream.cs @@ -0,0 +1,402 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Reflection; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /** + * Basic output stream. + */ + public class ArmoredOutputStream + : BaseOutputStream + { + public static readonly string HeaderVersion = "Version"; + + private static readonly byte[] encodingTable = + { + (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', (byte)'G', + (byte)'H', (byte)'I', (byte)'J', (byte)'K', (byte)'L', (byte)'M', (byte)'N', + (byte)'O', (byte)'P', (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U', + (byte)'V', (byte)'W', (byte)'X', (byte)'Y', (byte)'Z', + (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g', + (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n', + (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u', + (byte)'v', + (byte)'w', (byte)'x', (byte)'y', (byte)'z', + (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', + (byte)'7', (byte)'8', (byte)'9', + (byte)'+', (byte)'/' + }; + + /** + * encode the input data producing a base 64 encoded byte array. + */ + private static void Encode( + Stream outStream, + int[] data, + int len) + { + Debug.Assert(len > 0); + Debug.Assert(len < 4); + + byte[] bs = new byte[4]; + int d1 = data[0]; + bs[0] = encodingTable[(d1 >> 2) & 0x3f]; + + switch (len) + { + case 1: + { + bs[1] = encodingTable[(d1 << 4) & 0x3f]; + bs[2] = (byte)'='; + bs[3] = (byte)'='; + break; + } + case 2: + { + int d2 = data[1]; + bs[1] = encodingTable[((d1 << 4) | (d2 >> 4)) & 0x3f]; + bs[2] = encodingTable[(d2 << 2) & 0x3f]; + bs[3] = (byte)'='; + break; + } + case 3: + { + int d2 = data[1]; + int d3 = data[2]; + bs[1] = encodingTable[((d1 << 4) | (d2 >> 4)) & 0x3f]; + bs[2] = encodingTable[((d2 << 2) | (d3 >> 6)) & 0x3f]; + bs[3] = encodingTable[d3 & 0x3f]; + break; + } + } + + outStream.Write(bs, 0, bs.Length); + } + + private readonly Stream outStream; + private int[] buf = new int[3]; + private int bufPtr = 0; + private Crc24 crc = new Crc24(); + private int chunkCount = 0; + private int lastb; + + private bool start = true; + private bool clearText = false; + private bool newLine = false; + + private string type; + + private static readonly string NewLine = Environment.NewLine; + private static readonly string headerStart = "-----BEGIN PGP "; + private static readonly string headerTail = "-----"; + private static readonly string footerStart = "-----END PGP "; + private static readonly string footerTail = "-----"; + + private static string CreateVersion() + { + var assembly = Assembly.GetExecutingAssembly(); + var title = assembly.GetCustomAttribute().Title; + var version = assembly.GetCustomAttribute().InformationalVersion; + return title + " v" + version; + } + + private static readonly string Version = CreateVersion(); + + private readonly IDictionary> m_headers; + + public ArmoredOutputStream(Stream outStream) + { + this.outStream = outStream; + this.m_headers = new Dictionary>(1); + SetHeader(HeaderVersion, Version); + } + + public ArmoredOutputStream(Stream outStream, IDictionary headers) + : this(outStream) + { + foreach (var header in headers) + { + var headerList = new List(1); + headerList.Add(header.Value); + + m_headers[header.Key] = headerList; + } + } + + /** + * Set an additional header entry. Any current value(s) under the same name will be + * replaced by the new one. A null value will clear the entry for name. * + * @param name the name of the header entry. + * @param v the value of the header entry. + */ + public void SetHeader(string name, string val) + { + if (val == null) + { + this.m_headers.Remove(name); + return; + } + + if (m_headers.TryGetValue(name, out var valueList)) + { + valueList.Clear(); + } + else + { + valueList = new List(1); + m_headers[name] = valueList; + } + + valueList.Add(val); + } + + /** + * Set an additional header entry. The current value(s) will continue to exist together + * with the new one. Adding a null value has no effect. + * + * @param name the name of the header entry. + * @param value the value of the header entry. + */ + public void AddHeader(string name, string val) + { + if (val == null || name == null) + return; + + if (!m_headers.TryGetValue(name, out var valueList)) + { + valueList = new List(1); + m_headers[name] = valueList; + } + + valueList.Add(val); + } + + /** + * Reset the headers to only contain a Version string (if one is present). + */ + public void ResetHeaders() + { + var versions = CollectionUtilities.GetValueOrNull(m_headers, HeaderVersion); + + m_headers.Clear(); + + if (versions != null) + { + m_headers[HeaderVersion] = versions; + } + } + + /** + * Start a clear text signed message. + * @param hashAlgorithm + */ + public void BeginClearText( + HashAlgorithmTag hashAlgorithm) + { + string hash; + + switch (hashAlgorithm) + { + case HashAlgorithmTag.Sha1: + hash = "SHA1"; + break; + case HashAlgorithmTag.Sha256: + hash = "SHA256"; + break; + case HashAlgorithmTag.Sha384: + hash = "SHA384"; + break; + case HashAlgorithmTag.Sha512: + hash = "SHA512"; + break; + case HashAlgorithmTag.MD2: + hash = "MD2"; + break; + case HashAlgorithmTag.MD5: + hash = "MD5"; + break; + case HashAlgorithmTag.RipeMD160: + hash = "RIPEMD160"; + break; + default: + throw new IOException("unknown hash algorithm tag in beginClearText: " + hashAlgorithm); + } + + DoWrite("-----BEGIN PGP SIGNED MESSAGE-----" + NewLine); + DoWrite("Hash: " + hash + NewLine + NewLine); + + clearText = true; + newLine = true; + lastb = 0; + } + + public void EndClearText() + { + clearText = false; + } + + public override void WriteByte(byte value) + { + if (clearText) + { + outStream.WriteByte(value); + + if (newLine) + { + if (!(value == '\n' && lastb == '\r')) + { + newLine = false; + } + if (value == '-') + { + outStream.WriteByte((byte)' '); + outStream.WriteByte((byte)'-'); // dash escape + } + } + if (value == '\r' || (value == '\n' && lastb != '\r')) + { + newLine = true; + } + lastb = value; + return; + } + + if (start) + { + bool newPacket = (value & 0x40) != 0; + + int tag; + if (newPacket) + { + tag = value & 0x3f; + } + else + { + tag = (value & 0x3f) >> 2; + } + + switch ((PacketTag)tag) + { + case PacketTag.PublicKey: + type = "PUBLIC KEY BLOCK"; + break; + case PacketTag.SecretKey: + type = "PRIVATE KEY BLOCK"; + break; + case PacketTag.Signature: + type = "SIGNATURE"; + break; + default: + type = "MESSAGE"; + break; + } + + DoWrite(headerStart + type + headerTail + NewLine); + + if (m_headers.TryGetValue(HeaderVersion, out var versionHeaders)) + { + WriteHeaderEntry(HeaderVersion, versionHeaders[0]); + } + + foreach (var de in m_headers) + { + string k = de.Key; + if (k != HeaderVersion) + { + foreach (string v in de.Value) + { + WriteHeaderEntry(k, v); + } + } + } + + DoWrite(NewLine); + + start = false; + } + + if (bufPtr == 3) + { + Encode(outStream, buf, bufPtr); + bufPtr = 0; + if ((++chunkCount & 0xf) == 0) + { + DoWrite(NewLine); + } + } + + crc.Update(value); + buf[bufPtr++] = value & 0xff; + } + + /** + * Note: Close() does not close the underlying stream. So it is possible to write + * multiple objects using armoring to a single stream. + */ + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (type != null) + { + DoClose(); + + type = null; + start = true; + } + } + base.Dispose(disposing); + } + + private void DoClose() + { + if (bufPtr > 0) + { + Encode(outStream, buf, bufPtr); + } + + DoWrite(NewLine + '='); + + int crcV = crc.Value; + + buf[0] = ((crcV >> 16) & 0xff); + buf[1] = ((crcV >> 8) & 0xff); + buf[2] = (crcV & 0xff); + + Encode(outStream, buf, 3); + + DoWrite(NewLine); + DoWrite(footerStart); + DoWrite(type); + DoWrite(footerTail); + DoWrite(NewLine); + + outStream.Flush(); + } + + private void WriteHeaderEntry( + string name, + string v) + { + DoWrite(name + ": " + v + NewLine); + } + + private void DoWrite( + string s) + { + byte[] bs = Strings.ToAsciiByteArray(s); + outStream.Write(bs, 0, bs.Length); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ArmoredOutputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ArmoredOutputStream.cs.meta new file mode 100644 index 000000000..0128ed6e6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ArmoredOutputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f724f224c782c144bac2aa47960a0b3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/BcpgInputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/BcpgInputStream.cs new file mode 100644 index 000000000..0bdef70d0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/BcpgInputStream.cs @@ -0,0 +1,402 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Reader for PGP objects. + public class BcpgInputStream + : BaseInputStream + { + private Stream m_in; + private bool next = false; + private int nextB; + + internal static BcpgInputStream Wrap( + Stream inStr) + { + if (inStr is BcpgInputStream) + { + return (BcpgInputStream) inStr; + } + + return new BcpgInputStream(inStr); + } + + private BcpgInputStream( + Stream inputStream) + { + this.m_in = inputStream; + } + + public override int ReadByte() + { + if (next) + { + next = false; + return nextB; + } + + return m_in.ReadByte(); + } + + public override int Read(byte[] buffer, int offset, int count) + { + if (!next) + return m_in.Read(buffer, offset, count); + + Streams.ValidateBufferArguments(buffer, offset, count); + + if (nextB < 0) + return 0; + + buffer[offset] = (byte)nextB; + next = false; + return 1; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int Read(Span buffer) + { + if (!next) + return m_in.Read(buffer); + + if (nextB < 0) + return 0; + + buffer[0] = (byte)nextB; + next = false; + return 1; + } +#endif + + public byte[] ReadAll() + { + return Streams.ReadAll(this); + } + + public void ReadFully(byte[] buffer, int offset, int count) + { + if (Streams.ReadFully(this, buffer, offset, count) < count) + throw new EndOfStreamException(); + } + + public void ReadFully(byte[] buffer) + { + ReadFully(buffer, 0, buffer.Length); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void ReadFully(Span buffer) + { + if (Streams.ReadFully(this, buffer) < buffer.Length) + throw new EndOfStreamException(); + } +#endif + + /// Returns the next packet tag in the stream. + public PacketTag NextPacketTag() + { + if (!next) + { + try + { + nextB = m_in.ReadByte(); + } + catch (EndOfStreamException) + { + nextB = -1; + } + + next = true; + } + + if (nextB < 0) + return (PacketTag)nextB; + + int maskB = nextB & 0x3f; + if ((nextB & 0x40) == 0) // old + { + maskB >>= 2; + } + return (PacketTag)maskB; + } + + public Packet ReadPacket() + { + int hdr = this.ReadByte(); + + if (hdr < 0) + { + return null; + } + + if ((hdr & 0x80) == 0) + { + throw new IOException("invalid header encountered"); + } + + bool newPacket = (hdr & 0x40) != 0; + PacketTag tag = 0; + int bodyLen = 0; + bool partial = false; + + if (newPacket) + { + tag = (PacketTag)(hdr & 0x3f); + + int l = this.ReadByte(); + + if (l < 192) + { + bodyLen = l; + } + else if (l <= 223) + { + int b = m_in.ReadByte(); + bodyLen = ((l - 192) << 8) + (b) + 192; + } + else if (l == 255) + { + bodyLen = (m_in.ReadByte() << 24) | (m_in.ReadByte() << 16) + | (m_in.ReadByte() << 8) | m_in.ReadByte(); + } + else + { + partial = true; + bodyLen = 1 << (l & 0x1f); + } + } + else + { + int lengthType = hdr & 0x3; + + tag = (PacketTag)((hdr & 0x3f) >> 2); + + switch (lengthType) + { + case 0: + bodyLen = this.ReadByte(); + break; + case 1: + bodyLen = (this.ReadByte() << 8) | this.ReadByte(); + break; + case 2: + bodyLen = (this.ReadByte() << 24) | (this.ReadByte() << 16) + | (this.ReadByte() << 8) | this.ReadByte(); + break; + case 3: + partial = true; + break; + default: + throw new IOException("unknown length type encountered"); + } + } + + BcpgInputStream objStream; + if (bodyLen == 0 && partial) + { + objStream = this; + } + else + { + PartialInputStream pis = new PartialInputStream(this, partial, bodyLen); + Stream buf = new BufferedStream(pis); + objStream = new BcpgInputStream(buf); + } + + switch (tag) + { + case PacketTag.Reserved: + return new InputStreamPacket(objStream); + case PacketTag.PublicKeyEncryptedSession: + return new PublicKeyEncSessionPacket(objStream); + case PacketTag.Signature: + return new SignaturePacket(objStream); + case PacketTag.SymmetricKeyEncryptedSessionKey: + return new SymmetricKeyEncSessionPacket(objStream); + case PacketTag.OnePassSignature: + return new OnePassSignaturePacket(objStream); + case PacketTag.SecretKey: + return new SecretKeyPacket(objStream); + case PacketTag.PublicKey: + return new PublicKeyPacket(objStream); + case PacketTag.SecretSubkey: + return new SecretSubkeyPacket(objStream); + case PacketTag.CompressedData: + return new CompressedDataPacket(objStream); + case PacketTag.SymmetricKeyEncrypted: + return new SymmetricEncDataPacket(objStream); + case PacketTag.Marker: + return new MarkerPacket(objStream); + case PacketTag.LiteralData: + return new LiteralDataPacket(objStream); + case PacketTag.Trust: + return new TrustPacket(objStream); + case PacketTag.UserId: + return new UserIdPacket(objStream); + case PacketTag.UserAttribute: + return new UserAttributePacket(objStream); + case PacketTag.PublicSubkey: + return new PublicSubkeyPacket(objStream); + case PacketTag.SymmetricEncryptedIntegrityProtected: + return new SymmetricEncIntegrityPacket(objStream); + case PacketTag.ModificationDetectionCode: + return new ModDetectionCodePacket(objStream); + case PacketTag.Experimental1: + case PacketTag.Experimental2: + case PacketTag.Experimental3: + case PacketTag.Experimental4: + return new ExperimentalPacket(tag, objStream); + default: + throw new IOException("unknown packet type encountered: " + tag); + } + } + + public PacketTag SkipMarkerPackets() + { + PacketTag tag; + while ((tag = NextPacketTag()) == PacketTag.Marker) + { + ReadPacket(); + } + + return tag; + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + m_in.Dispose(); + } + base.Dispose(disposing); + } + + /// + /// A stream that overlays our input stream, allowing the user to only read a segment of it. + /// NB: dataLength will be negative if the segment length is in the upper range above 2**31. + /// + private class PartialInputStream + : BaseInputStream + { + private BcpgInputStream m_in; + private bool partial; + private int dataLength; + + internal PartialInputStream( + BcpgInputStream bcpgIn, + bool partial, + int dataLength) + { + this.m_in = bcpgIn; + this.partial = partial; + this.dataLength = dataLength; + } + + public override int ReadByte() + { + do + { + if (dataLength != 0) + { + int ch = m_in.ReadByte(); + if (ch < 0) + { + throw new EndOfStreamException("Premature end of stream in PartialInputStream"); + } + dataLength--; + return ch; + } + } + while (partial && ReadPartialDataLength() >= 0); + + return -1; + } + + public override int Read(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + + do + { + if (dataLength != 0) + { + int readLen = (dataLength > count || dataLength < 0) ? count : dataLength; + int len = m_in.Read(buffer, offset, readLen); + if (len < 1) + throw new EndOfStreamException("Premature end of stream in PartialInputStream"); + + dataLength -= len; + return len; + } + } + while (partial && ReadPartialDataLength() >= 0); + + return 0; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int Read(Span buffer) + { + do + { + if (dataLength != 0) + { + int count = buffer.Length; + int readLen = (dataLength > count || dataLength < 0) ? count : dataLength; + int len = m_in.Read(buffer[..readLen]); + if (len < 1) + throw new EndOfStreamException("Premature end of stream in PartialInputStream"); + + dataLength -= len; + return len; + } + } + while (partial && ReadPartialDataLength() >= 0); + + return 0; + } +#endif + + private int ReadPartialDataLength() + { + int l = m_in.ReadByte(); + + if (l < 0) + { + return -1; + } + + partial = false; + + if (l < 192) + { + dataLength = l; + } + else if (l <= 223) + { + dataLength = ((l - 192) << 8) + (m_in.ReadByte()) + 192; + } + else if (l == 255) + { + dataLength = (m_in.ReadByte() << 24) | (m_in.ReadByte() << 16) + | (m_in.ReadByte() << 8) | m_in.ReadByte(); + } + else + { + partial = true; + dataLength = 1 << (l & 0x1f); + } + + return 0; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/BcpgInputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/BcpgInputStream.cs.meta new file mode 100644 index 000000000..70de97c66 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/BcpgInputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 32f4aaeece81f6542afa03ada1c51bd4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/BcpgObject.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/BcpgObject.cs new file mode 100644 index 000000000..e730f1b9a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/BcpgObject.cs @@ -0,0 +1,26 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Base class for a PGP object. + public abstract class BcpgObject + { + public virtual byte[] GetEncoded() + { + MemoryStream bOut = new MemoryStream(); + BcpgOutputStream pOut = new BcpgOutputStream(bOut); + + pOut.WriteObject(this); + + return bOut.ToArray(); + } + + public abstract void Encode(BcpgOutputStream bcpgOut); + } +} + +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/BcpgObject.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/BcpgObject.cs.meta new file mode 100644 index 000000000..7eae319cd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/BcpgObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d642bd44be501634e945c40857b99e34 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/BcpgOutputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/BcpgOutputStream.cs new file mode 100644 index 000000000..20b3bd6d0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/BcpgOutputStream.cs @@ -0,0 +1,446 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Basic output stream. + public class BcpgOutputStream + : BaseOutputStream + { + internal static BcpgOutputStream Wrap( + Stream outStr) + { + if (outStr is BcpgOutputStream) + { + return (BcpgOutputStream) outStr; + } + + return new BcpgOutputStream(outStr); + } + + private Stream outStr; + private byte[] partialBuffer; + private int partialBufferLength; + private int partialPower; + private int partialOffset; + private const int BufferSizePower = 16; // 2^16 size buffer on long files + + /// Create a stream representing a general packet. + /// Output stream to write to. + public BcpgOutputStream( + Stream outStr) + { + if (outStr == null) + throw new ArgumentNullException("outStr"); + + this.outStr = outStr; + } + + /// Create a stream representing an old style partial object. + /// Output stream to write to. + /// The packet tag for the object. + public BcpgOutputStream( + Stream outStr, + PacketTag tag) + { + if (outStr == null) + throw new ArgumentNullException("outStr"); + + this.outStr = outStr; + this.WriteHeader(tag, true, true, 0); + } + + /// Create a stream representing a general packet. + /// Output stream to write to. + /// Packet tag. + /// Size of chunks making up the packet. + /// If true, the header is written out in old format. + public BcpgOutputStream( + Stream outStr, + PacketTag tag, + long length, + bool oldFormat) + { + if (outStr == null) + throw new ArgumentNullException("outStr"); + + this.outStr = outStr; + + if (length > 0xFFFFFFFFL) + { + this.WriteHeader(tag, false, true, 0); + this.partialBufferLength = 1 << BufferSizePower; + this.partialBuffer = new byte[partialBufferLength]; + this.partialPower = BufferSizePower; + this.partialOffset = 0; + } + else + { + this.WriteHeader(tag, oldFormat, false, length); + } + } + + /// Create a new style partial input stream buffered into chunks. + /// Output stream to write to. + /// Packet tag. + /// Size of chunks making up the packet. + public BcpgOutputStream( + Stream outStr, + PacketTag tag, + long length) + { + if (outStr == null) + throw new ArgumentNullException("outStr"); + + this.outStr = outStr; + this.WriteHeader(tag, false, false, length); + } + + /// Create a new style partial input stream buffered into chunks. + /// Output stream to write to. + /// Packet tag. + /// Buffer to use for collecting chunks. + public BcpgOutputStream( + Stream outStr, + PacketTag tag, + byte[] buffer) + { + if (outStr == null) + throw new ArgumentNullException("outStr"); + + this.outStr = outStr; + this.WriteHeader(tag, false, true, 0); + + this.partialBuffer = buffer; + + uint length = (uint) partialBuffer.Length; + for (partialPower = 0; length != 1; partialPower++) + { + length >>= 1; + } + + if (partialPower > 30) + { + throw new IOException("Buffer cannot be greater than 2^30 in length."); + } + this.partialBufferLength = 1 << partialPower; + this.partialOffset = 0; + } + + private void WriteNewPacketLength( + long bodyLen) + { + if (bodyLen < 192) + { + outStr.WriteByte((byte)bodyLen); + } + else if (bodyLen <= 8383) + { + bodyLen -= 192; + + outStr.WriteByte((byte)(((bodyLen >> 8) & 0xff) + 192)); + outStr.WriteByte((byte)bodyLen); + } + else + { + outStr.WriteByte(0xff); + outStr.WriteByte((byte)(bodyLen >> 24)); + outStr.WriteByte((byte)(bodyLen >> 16)); + outStr.WriteByte((byte)(bodyLen >> 8)); + outStr.WriteByte((byte)bodyLen); + } + } + + private void WriteHeader( + PacketTag tag, + bool oldPackets, + bool partial, + long bodyLen) + { + int hdr = 0x80; + + if (partialBuffer != null) + { + PartialFlushLast(); + partialBuffer = null; + } + + if (oldPackets) + { + hdr |= ((int) tag) << 2; + + if (partial) + { + this.WriteByte((byte)(hdr | 0x03)); + } + else + { + if (bodyLen <= 0xff) + { + this.WriteByte((byte) hdr); + this.WriteByte((byte)bodyLen); + } + else if (bodyLen <= 0xffff) + { + this.WriteByte((byte)(hdr | 0x01)); + this.WriteByte((byte)(bodyLen >> 8)); + this.WriteByte((byte)(bodyLen)); + } + else + { + this.WriteByte((byte)(hdr | 0x02)); + this.WriteByte((byte)(bodyLen >> 24)); + this.WriteByte((byte)(bodyLen >> 16)); + this.WriteByte((byte)(bodyLen >> 8)); + this.WriteByte((byte)bodyLen); + } + } + } + else + { + hdr |= 0x40 | (int) tag; + this.WriteByte((byte) hdr); + + if (partial) + { + partialOffset = 0; + } + else + { + this.WriteNewPacketLength(bodyLen); + } + } + } + + private void PartialFlush() + { + outStr.WriteByte((byte)(0xE0 | partialPower)); + outStr.Write(partialBuffer, 0, partialBufferLength); + partialOffset = 0; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void PartialFlush(ref ReadOnlySpan buffer) + { + outStr.WriteByte((byte)(0xE0 | partialPower)); + outStr.Write(buffer[..partialBufferLength]); + buffer = buffer[partialBufferLength..]; + } +#endif + + private void PartialFlushLast() + { + WriteNewPacketLength(partialOffset); + outStr.Write(partialBuffer, 0, partialOffset); + partialOffset = 0; + } + + private void PartialWrite(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + PartialWrite(buffer.AsSpan(offset, count)); +#else + if (partialOffset == partialBufferLength) + { + PartialFlush(); + } + + if (count <= (partialBufferLength - partialOffset)) + { + Array.Copy(buffer, offset, partialBuffer, partialOffset, count); + partialOffset += count; + return; + } + + int diff = partialBufferLength - partialOffset; + Array.Copy(buffer, offset, partialBuffer, partialOffset, diff); + offset += diff; + count -= diff; + PartialFlush(); + while (count > partialBufferLength) + { + Array.Copy(buffer, offset, partialBuffer, 0, partialBufferLength); + offset += partialBufferLength; + count -= partialBufferLength; + PartialFlush(); + } + Array.Copy(buffer, offset, partialBuffer, 0, count); + partialOffset = count; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void PartialWrite(ReadOnlySpan buffer) + { + if (partialOffset == partialBufferLength) + { + PartialFlush(); + } + + if (buffer.Length <= (partialBufferLength - partialOffset)) + { + buffer.CopyTo(partialBuffer.AsSpan(partialOffset)); + partialOffset += buffer.Length; + return; + } + + int diff = partialBufferLength - partialOffset; + buffer[..diff].CopyTo(partialBuffer.AsSpan(partialOffset)); + buffer = buffer[diff..]; + PartialFlush(); + while (buffer.Length > partialBufferLength) + { + PartialFlush(ref buffer); + } + buffer.CopyTo(partialBuffer); + partialOffset = buffer.Length; + } +#endif + + private void PartialWriteByte(byte value) + { + if (partialOffset == partialBufferLength) + { + PartialFlush(); + } + + partialBuffer[partialOffset++] = value; + } + + public override void Write(byte[] buffer, int offset, int count) + { + if (partialBuffer != null) + { + PartialWrite(buffer, offset, count); + } + else + { + outStr.Write(buffer, offset, count); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) + { + if (partialBuffer != null) + { + PartialWrite(buffer); + } + else + { + outStr.Write(buffer); + } + } +#endif + + public override void WriteByte(byte value) + { + if (partialBuffer != null) + { + PartialWriteByte(value); + } + else + { + outStr.WriteByte(value); + } + } + + // Additional helper methods to write primitive types + internal virtual void WriteShort( + short n) + { + this.Write( + (byte)(n >> 8), + (byte)n); + } + internal virtual void WriteInt( + int n) + { + this.Write( + (byte)(n >> 24), + (byte)(n >> 16), + (byte)(n >> 8), + (byte)n); + } + internal virtual void WriteLong( + long n) + { + this.Write( + (byte)(n >> 56), + (byte)(n >> 48), + (byte)(n >> 40), + (byte)(n >> 32), + (byte)(n >> 24), + (byte)(n >> 16), + (byte)(n >> 8), + (byte)n); + } + + public void WritePacket( + ContainedPacket p) + { + p.Encode(this); + } + + internal void WritePacket( + PacketTag tag, + byte[] body, + bool oldFormat) + { + this.WriteHeader(tag, oldFormat, false, body.Length); + this.Write(body); + } + + public void WriteObject( + BcpgObject bcpgObject) + { + bcpgObject.Encode(this); + } + + public void WriteObjects( + params BcpgObject[] v) + { + foreach (BcpgObject o in v) + { + o.Encode(this); + } + } + + /// Flush the underlying stream. + public override void Flush() + { + outStr.Flush(); + } + + /// Finish writing out the current packet without closing the underlying stream. + public void Finish() + { + if (partialBuffer != null) + { + PartialFlushLast(); + Array.Clear(partialBuffer, 0, partialBuffer.Length); + partialBuffer = null; + } + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + this.Finish(); + outStr.Flush(); + outStr.Dispose(); + } + base.Dispose(disposing); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/BcpgOutputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/BcpgOutputStream.cs.meta new file mode 100644 index 000000000..d15eca603 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/BcpgOutputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 39a6c32ff29d5924cab98e7fe91434f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/CompressedDataPacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/CompressedDataPacket.cs new file mode 100644 index 000000000..31da017d4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/CompressedDataPacket.cs @@ -0,0 +1,28 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Generic compressed data object. + public class CompressedDataPacket + : InputStreamPacket + { + private readonly CompressionAlgorithmTag algorithm; + + internal CompressedDataPacket( + BcpgInputStream bcpgIn) + : base(bcpgIn) + { + this.algorithm = (CompressionAlgorithmTag) bcpgIn.ReadByte(); + } + + /// The algorithm tag value. + public CompressionAlgorithmTag Algorithm + { + get { return algorithm; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/CompressedDataPacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/CompressedDataPacket.cs.meta new file mode 100644 index 000000000..078dd9ec7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/CompressedDataPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c0dd928f8e489c4aa84b76bfd69ed9d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/CompressionAlgorithmTags.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/CompressionAlgorithmTags.cs new file mode 100644 index 000000000..999520bee --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/CompressionAlgorithmTags.cs @@ -0,0 +1,15 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Basic tags for compression algorithms. + public enum CompressionAlgorithmTag + { + Uncompressed = 0, // Uncompressed + Zip = 1, // ZIP (RFC 1951) + ZLib = 2, // ZLIB (RFC 1950) + BZip2 = 3, // BZ2 + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/CompressionAlgorithmTags.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/CompressionAlgorithmTags.cs.meta new file mode 100644 index 000000000..2391144aa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/CompressionAlgorithmTags.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a075ed8dccc9ad04eba5fb8eb4fb1207 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ContainedPacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ContainedPacket.cs new file mode 100644 index 000000000..49b15f9d4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ContainedPacket.cs @@ -0,0 +1,26 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Basic type for a PGP packet. + public abstract class ContainedPacket + : Packet + { + public byte[] GetEncoded() + { + MemoryStream bOut = new MemoryStream(); + BcpgOutputStream pOut = new BcpgOutputStream(bOut); + + pOut.WritePacket(this); + + return bOut.ToArray(); + } + + public abstract void Encode(BcpgOutputStream bcpgOut); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ContainedPacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ContainedPacket.cs.meta new file mode 100644 index 000000000..c0a0750a8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ContainedPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5474bfdda1607be4284cc6ffa0de29e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/Crc24.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/Crc24.cs new file mode 100644 index 000000000..d13861a17 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/Crc24.cs @@ -0,0 +1,44 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + public class Crc24 + { + private const int Crc24Init = 0x0b704ce; + private const int Crc24Poly = 0x1864cfb; + + private int crc = Crc24Init; + + public Crc24() + { + } + + public void Update( + int b) + { + crc ^= b << 16; + for (int i = 0; i < 8; i++) + { + crc <<= 1; + if ((crc & 0x1000000) != 0) + { + crc ^= Crc24Poly; + } + } + } + + public int Value + { + get { return crc; } + } + + public void Reset() + { + crc = Crc24Init; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/Crc24.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/Crc24.cs.meta new file mode 100644 index 000000000..110bb560a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/Crc24.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c4dea685dcfa5e748bdebecb9a7bcc2d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/DsaPublicBcpgKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/DsaPublicBcpgKey.cs new file mode 100644 index 000000000..7faa38433 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/DsaPublicBcpgKey.cs @@ -0,0 +1,84 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Base class for a DSA public key. + public class DsaPublicBcpgKey + : BcpgObject, IBcpgKey + { + private readonly MPInteger p, q, g, y; + + /// The stream to read the packet from. + public DsaPublicBcpgKey( + BcpgInputStream bcpgIn) + { + this.p = new MPInteger(bcpgIn); + this.q = new MPInteger(bcpgIn); + this.g = new MPInteger(bcpgIn); + this.y = new MPInteger(bcpgIn); + } + + public DsaPublicBcpgKey( + BigInteger p, + BigInteger q, + BigInteger g, + BigInteger y) + { + this.p = new MPInteger(p); + this.q = new MPInteger(q); + this.g = new MPInteger(g); + this.y = new MPInteger(y); + } + + /// The format, as a string, always "PGP". + public string Format + { + get { return "PGP"; } + } + + /// Return the standard PGP encoding of the key. + public override byte[] GetEncoded() + { + try + { + return base.GetEncoded(); + } + catch (Exception) + { + return null; + } + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + bcpgOut.WriteObjects(p, q, g, y); + } + + public BigInteger G + { + get { return g.Value; } + } + + public BigInteger P + { + get { return p.Value; } + } + + public BigInteger Q + { + get { return q.Value; } + } + + public BigInteger Y + { + get { return y.Value; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/DsaPublicBcpgKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/DsaPublicBcpgKey.cs.meta new file mode 100644 index 000000000..3fe607e86 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/DsaPublicBcpgKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71cb50a82f5322245973364463bac01d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/DsaSecretBcpgKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/DsaSecretBcpgKey.cs new file mode 100644 index 000000000..01ca59bac --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/DsaSecretBcpgKey.cs @@ -0,0 +1,65 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Base class for a DSA secret key. + public class DsaSecretBcpgKey + : BcpgObject, IBcpgKey + { + internal MPInteger x; + + /** + * @param in + */ + public DsaSecretBcpgKey( + BcpgInputStream bcpgIn) + { + this.x = new MPInteger(bcpgIn); + } + + public DsaSecretBcpgKey( + BigInteger x) + { + this.x = new MPInteger(x); + } + + /// The format, as a string, always "PGP". + public string Format + { + get { return "PGP"; } + } + + /// Return the standard PGP encoding of the key. + public override byte[] GetEncoded() + { + try + { + return base.GetEncoded(); + } + catch (Exception) + { + return null; + } + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + bcpgOut.WriteObject(x); + } + + /** + * @return x + */ + public BigInteger X + { + get { return x.Value; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/DsaSecretBcpgKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/DsaSecretBcpgKey.cs.meta new file mode 100644 index 000000000..0a918a6a1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/DsaSecretBcpgKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a0c4b07d1770444e88381fd41cd5e49 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECDHPublicBCPGKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECDHPublicBCPGKey.cs new file mode 100644 index 000000000..4665ba177 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECDHPublicBCPGKey.cs @@ -0,0 +1,125 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Base class for an ECDH Public Key. + public class ECDHPublicBcpgKey + : ECPublicBcpgKey + { + private byte reserved; + private HashAlgorithmTag hashFunctionId; + private SymmetricKeyAlgorithmTag symAlgorithmId; + + /// The stream to read the packet from. + public ECDHPublicBcpgKey(BcpgInputStream bcpgIn) + : base(bcpgIn) + { + int length = bcpgIn.ReadByte(); + if (length != 3) + throw new InvalidOperationException("KDF parameters size of 3 expected."); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span kdfParameters = stackalloc byte[3]; +#else + byte[] kdfParameters = new byte[3]; +#endif + bcpgIn.ReadFully(kdfParameters); + + reserved = kdfParameters[0]; + hashFunctionId = (HashAlgorithmTag)kdfParameters[1]; + symAlgorithmId = (SymmetricKeyAlgorithmTag)kdfParameters[2]; + + VerifyHashAlgorithm(); + VerifySymmetricKeyAlgorithm(); + } + + public ECDHPublicBcpgKey( + DerObjectIdentifier oid, + ECPoint point, + HashAlgorithmTag hashAlgorithm, + SymmetricKeyAlgorithmTag symmetricKeyAlgorithm) + : base(oid, point) + { + reserved = 1; + hashFunctionId = hashAlgorithm; + symAlgorithmId = symmetricKeyAlgorithm; + + VerifyHashAlgorithm(); + VerifySymmetricKeyAlgorithm(); + } + + public ECDHPublicBcpgKey( + DerObjectIdentifier oid, + BigInteger point, + HashAlgorithmTag hashAlgorithm, + SymmetricKeyAlgorithmTag symmetricKeyAlgorithm) + : base(oid, point) + { + reserved = 1; + hashFunctionId = hashAlgorithm; + symAlgorithmId = symmetricKeyAlgorithm; + + VerifyHashAlgorithm(); + VerifySymmetricKeyAlgorithm(); + } + + public virtual byte Reserved + { + get { return reserved; } + } + + public virtual HashAlgorithmTag HashAlgorithm + { + get { return hashFunctionId; } + } + + public virtual SymmetricKeyAlgorithmTag SymmetricKeyAlgorithm + { + get { return symAlgorithmId; } + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + base.Encode(bcpgOut); + bcpgOut.WriteByte(0x3); + bcpgOut.WriteByte(reserved); + bcpgOut.WriteByte((byte)hashFunctionId); + bcpgOut.WriteByte((byte)symAlgorithmId); + } + + private void VerifyHashAlgorithm() + { + switch (hashFunctionId) + { + case HashAlgorithmTag.Sha256: + case HashAlgorithmTag.Sha384: + case HashAlgorithmTag.Sha512: + break; + default: + throw new InvalidOperationException("Hash algorithm must be SHA-256 or stronger."); + } + } + + private void VerifySymmetricKeyAlgorithm() + { + switch (symAlgorithmId) + { + case SymmetricKeyAlgorithmTag.Aes128: + case SymmetricKeyAlgorithmTag.Aes192: + case SymmetricKeyAlgorithmTag.Aes256: + break; + default: + throw new InvalidOperationException("Symmetric key algorithm must be AES-128 or stronger."); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECDHPublicBCPGKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECDHPublicBCPGKey.cs.meta new file mode 100644 index 000000000..f6d714e9b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECDHPublicBCPGKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 26a9e9688bc3c6d47bd10d3380f53397 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECDsaPublicBCPGKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECDsaPublicBCPGKey.cs new file mode 100644 index 000000000..7a4533cfe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECDsaPublicBCPGKey.cs @@ -0,0 +1,38 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Base class for an ECDSA Public Key. + public class ECDsaPublicBcpgKey + : ECPublicBcpgKey + { + /// The stream to read the packet from. + protected internal ECDsaPublicBcpgKey( + BcpgInputStream bcpgIn) + : base(bcpgIn) + { + } + + public ECDsaPublicBcpgKey( + DerObjectIdentifier oid, + ECPoint point) + : base(oid, point) + { + } + + public ECDsaPublicBcpgKey( + DerObjectIdentifier oid, + BigInteger encodedPoint) + : base(oid, encodedPoint) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECDsaPublicBCPGKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECDsaPublicBCPGKey.cs.meta new file mode 100644 index 000000000..931011a50 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECDsaPublicBCPGKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 95b1f455837bd00489e36360719c4475 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECPublicBCPGKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECPublicBCPGKey.cs new file mode 100644 index 000000000..326fc8976 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECPublicBCPGKey.cs @@ -0,0 +1,103 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Base class for an EC Public Key. + public abstract class ECPublicBcpgKey + : BcpgObject, IBcpgKey + { + internal DerObjectIdentifier oid; + internal BigInteger point; + + /// The stream to read the packet from. + protected ECPublicBcpgKey( + BcpgInputStream bcpgIn) + { + this.oid = DerObjectIdentifier.GetInstance(Asn1Object.FromByteArray(ReadBytesOfEncodedLength(bcpgIn))); + this.point = new MPInteger(bcpgIn).Value; + } + + protected ECPublicBcpgKey( + DerObjectIdentifier oid, + ECPoint point) + { + this.point = MPInteger.ToMpiBigInteger(point); + this.oid = oid; + } + + protected ECPublicBcpgKey( + DerObjectIdentifier oid, + BigInteger encodedPoint) + { + this.point = encodedPoint; + this.oid = oid; + } + + /// The format, as a string, always "PGP". + public string Format + { + get { return "PGP"; } + } + + /// Return the standard PGP encoding of the key. + public override byte[] GetEncoded() + { + try + { + return base.GetEncoded(); + } + catch (IOException) + { + return null; + } + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + byte[] oid = this.oid.GetEncoded(); + bcpgOut.Write(oid, 1, oid.Length - 1); + + MPInteger point = new MPInteger(this.point); + bcpgOut.WriteObject(point); + } + + public virtual BigInteger EncodedPoint + { + get { return point; } + } + + public virtual DerObjectIdentifier CurveOid + { + get { return oid; } + } + + protected static byte[] ReadBytesOfEncodedLength( + BcpgInputStream bcpgIn) + { + int length = bcpgIn.ReadByte(); + if (length < 0) + throw new EndOfStreamException(); + if (length == 0 || length == 0xFF) + throw new IOException("future extensions not yet implemented"); + if (length > 127) + throw new IOException("unsupported OID"); + + byte[] buffer = new byte[length + 2]; + bcpgIn.ReadFully(buffer, 2, buffer.Length - 2); + buffer[0] = (byte)0x06; + buffer[1] = (byte)length; + + return buffer; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECPublicBCPGKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECPublicBCPGKey.cs.meta new file mode 100644 index 000000000..21fbdc0a4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECPublicBCPGKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3e1f4884d15689f4591e3616803f41df +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECSecretBCPGKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECSecretBCPGKey.cs new file mode 100644 index 000000000..54ed1ab9c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECSecretBCPGKey.cs @@ -0,0 +1,59 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Base class for an EC Secret Key. + public class ECSecretBcpgKey + : BcpgObject, IBcpgKey + { + internal readonly MPInteger m_x; + + public ECSecretBcpgKey( + BcpgInputStream bcpgIn) + { + m_x = new MPInteger(bcpgIn); + } + + public ECSecretBcpgKey( + BigInteger x) + { + m_x = new MPInteger(x); + } + + /// The format, as a string, always "PGP". + public string Format + { + get { return "PGP"; } + } + + /// Return the standard PGP encoding of the key. + public override byte[] GetEncoded() + { + try + { + return base.GetEncoded(); + } + catch (Exception) + { + return null; + } + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + bcpgOut.WriteObject(m_x); + } + + public virtual BigInteger X + { + get { return m_x.Value; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECSecretBCPGKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECSecretBCPGKey.cs.meta new file mode 100644 index 000000000..93acc8e75 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ECSecretBCPGKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ef2691efaa3c5244b2ba98b291be784 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/EdDsaPublicBcpgKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/EdDsaPublicBcpgKey.cs new file mode 100644 index 000000000..89e0a421d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/EdDsaPublicBcpgKey.cs @@ -0,0 +1,29 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + public sealed class EdDsaPublicBcpgKey + : ECPublicBcpgKey + { + internal EdDsaPublicBcpgKey(BcpgInputStream bcpgIn) + : base(bcpgIn) + { + } + + public EdDsaPublicBcpgKey(DerObjectIdentifier oid, ECPoint point) + : base(oid, point) + { + } + + public EdDsaPublicBcpgKey(DerObjectIdentifier oid, BigInteger encodedPoint) + : base(oid, encodedPoint) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/EdDsaPublicBcpgKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/EdDsaPublicBcpgKey.cs.meta new file mode 100644 index 000000000..0977360f9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/EdDsaPublicBcpgKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 886e996d31601394ba4c3f2d691c6d68 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/EdSecretBcpgKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/EdSecretBcpgKey.cs new file mode 100644 index 000000000..e8e102b90 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/EdSecretBcpgKey.cs @@ -0,0 +1,47 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + public sealed class EdSecretBcpgKey + : BcpgObject, IBcpgKey + { + internal readonly MPInteger m_x; + + public EdSecretBcpgKey(BcpgInputStream bcpgIn) + { + m_x = new MPInteger(bcpgIn); + } + + public EdSecretBcpgKey(BigInteger x) + { + m_x = new MPInteger(x); + } + + public string Format => "PGP"; + + public override byte[] GetEncoded() + { + try + { + return base.GetEncoded(); + } + catch (Exception) + { + return null; + } + } + + public override void Encode(BcpgOutputStream bcpgOut) + { + bcpgOut.WriteObject(m_x); + } + + public BigInteger X => m_x.Value; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/EdSecretBcpgKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/EdSecretBcpgKey.cs.meta new file mode 100644 index 000000000..e9eb583b3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/EdSecretBcpgKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f1b967203f5d100409763ad04d4f89e3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ElGamalPublicBcpgKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ElGamalPublicBcpgKey.cs new file mode 100644 index 000000000..773acf48e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ElGamalPublicBcpgKey.cs @@ -0,0 +1,75 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Base class for an ElGamal public key. + public class ElGamalPublicBcpgKey + : BcpgObject, IBcpgKey + { + internal MPInteger p, g, y; + + public ElGamalPublicBcpgKey( + BcpgInputStream bcpgIn) + { + this.p = new MPInteger(bcpgIn); + this.g = new MPInteger(bcpgIn); + this.y = new MPInteger(bcpgIn); + } + + public ElGamalPublicBcpgKey( + BigInteger p, + BigInteger g, + BigInteger y) + { + this.p = new MPInteger(p); + this.g = new MPInteger(g); + this.y = new MPInteger(y); + } + + /// The format, as a string, always "PGP". + public string Format + { + get { return "PGP"; } + } + + /// Return the standard PGP encoding of the key. + public override byte[] GetEncoded() + { + try + { + return base.GetEncoded(); + } + catch (Exception) + { + return null; + } + } + + public BigInteger P + { + get { return p.Value; } + } + + public BigInteger G + { + get { return g.Value; } + } + + public BigInteger Y + { + get { return y.Value; } + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + bcpgOut.WriteObjects(p, g, y); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ElGamalPublicBcpgKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ElGamalPublicBcpgKey.cs.meta new file mode 100644 index 000000000..fa00d7691 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ElGamalPublicBcpgKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 041475c7c5e3bb748a026fd2d7cb6188 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ElGamalSecretBcpgKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ElGamalSecretBcpgKey.cs new file mode 100644 index 000000000..68f62db6c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ElGamalSecretBcpgKey.cs @@ -0,0 +1,65 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Base class for an ElGamal secret key. + public class ElGamalSecretBcpgKey + : BcpgObject, IBcpgKey + { + internal MPInteger x; + + /** + * @param in + */ + public ElGamalSecretBcpgKey( + BcpgInputStream bcpgIn) + { + this.x = new MPInteger(bcpgIn); + } + + /** + * @param x + */ + public ElGamalSecretBcpgKey( + BigInteger x) + { + this.x = new MPInteger(x); + } + + /// The format, as a string, always "PGP". + public string Format + { + get { return "PGP"; } + } + + public BigInteger X + { + get { return x.Value; } + } + + /// Return the standard PGP encoding of the key. + public override byte[] GetEncoded() + { + try + { + return base.GetEncoded(); + } + catch (Exception) + { + return null; + } + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + bcpgOut.WriteObject(x); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ElGamalSecretBcpgKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ElGamalSecretBcpgKey.cs.meta new file mode 100644 index 000000000..d92f3f40b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ElGamalSecretBcpgKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04e1edef56eb0884ea6902e6e8cbd629 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ExperimentalPacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ExperimentalPacket.cs new file mode 100644 index 000000000..7b7b225c9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ExperimentalPacket.cs @@ -0,0 +1,42 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Basic packet for an experimental packet. + public class ExperimentalPacket + : ContainedPacket //, PublicKeyAlgorithmTag + { + private readonly PacketTag tag; + private readonly byte[] contents; + + internal ExperimentalPacket( + PacketTag tag, + BcpgInputStream bcpgIn) + { + this.tag = tag; + + this.contents = bcpgIn.ReadAll(); + } + + public PacketTag Tag + { + get { return tag; } + } + + public byte[] GetContents() + { + return (byte[]) contents.Clone(); + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + bcpgOut.WritePacket(tag, contents, true); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ExperimentalPacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ExperimentalPacket.cs.meta new file mode 100644 index 000000000..cd604928a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ExperimentalPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7817fdb34c603bf4dab275a54bb4602f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/HashAlgorithmTags.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/HashAlgorithmTags.cs new file mode 100644 index 000000000..c2589ca80 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/HashAlgorithmTags.cs @@ -0,0 +1,23 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Basic tags for hash algorithms. + public enum HashAlgorithmTag + { + MD5 = 1, // MD5 + Sha1 = 2, // SHA-1 + RipeMD160 = 3, // RIPE-MD/160 + DoubleSha = 4, // Reserved for double-width SHA (experimental) + MD2 = 5, // MD2 + Tiger192 = 6, // Reserved for TIGER/192 + Haval5pass160 = 7, // Reserved for HAVAL (5 pass, 160-bit) + + Sha256 = 8, // SHA-256 + Sha384 = 9, // SHA-384 + Sha512 = 10, // SHA-512 + Sha224 = 11, // SHA-224 + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/HashAlgorithmTags.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/HashAlgorithmTags.cs.meta new file mode 100644 index 000000000..f666be741 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/HashAlgorithmTags.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3374d0310a5088b4bb1b2683a58b147c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/IBcpgKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/IBcpgKey.cs new file mode 100644 index 000000000..f51ed0297 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/IBcpgKey.cs @@ -0,0 +1,20 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Base interface for a PGP key. + public interface IBcpgKey + { + /// + /// The base format for this key - in the case of the symmetric keys it will generally + /// be raw indicating that the key is just a straight byte representation, for an asymmetric + /// key the format will be PGP, indicating the key is a string of MPIs encoded in PGP format. + /// + /// "RAW" or "PGP". + string Format { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/IBcpgKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/IBcpgKey.cs.meta new file mode 100644 index 000000000..31725f6b9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/IBcpgKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c1d668da834dae46a73cf6da424acc1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/InputStreamPacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/InputStreamPacket.cs new file mode 100644 index 000000000..d5ad894c6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/InputStreamPacket.cs @@ -0,0 +1,24 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + public class InputStreamPacket + : Packet + { + private readonly BcpgInputStream bcpgIn; + + public InputStreamPacket( + BcpgInputStream bcpgIn) + { + this.bcpgIn = bcpgIn; + } + + /// Note: you can only read from this once... + public BcpgInputStream GetInputStream() + { + return bcpgIn; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/InputStreamPacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/InputStreamPacket.cs.meta new file mode 100644 index 000000000..c56f71216 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/InputStreamPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 583e023939328f540b4958a82128dab7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/LiteralDataPacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/LiteralDataPacket.cs new file mode 100644 index 000000000..a57a7d093 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/LiteralDataPacket.cs @@ -0,0 +1,65 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Generic literal data packet. + public class LiteralDataPacket + : InputStreamPacket + { + private int format; + private byte[] fileName; + private long modDate; + + internal LiteralDataPacket( + BcpgInputStream bcpgIn) + : base(bcpgIn) + { + format = bcpgIn.ReadByte(); + int len = bcpgIn.ReadByte(); + + fileName = new byte[len]; + for (int i = 0; i != len; ++i) + { + int ch = bcpgIn.ReadByte(); + if (ch < 0) + throw new IOException("literal data truncated in header"); + + fileName[i] = (byte)ch; + } + + modDate = (((uint)bcpgIn.ReadByte() << 24) + | ((uint)bcpgIn.ReadByte() << 16) + | ((uint)bcpgIn.ReadByte() << 8) + | (uint)bcpgIn.ReadByte()) * 1000L; + } + + /// The format tag value. + public int Format + { + get { return format; } + } + + /// The modification time of the file in milli-seconds (since Jan 1, 1970 UTC) + public long ModificationTime + { + get { return modDate; } + } + + public string FileName + { + get { return Strings.FromUtf8ByteArray(fileName); } + } + + public byte[] GetRawFileName() + { + return Arrays.Clone(fileName); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/LiteralDataPacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/LiteralDataPacket.cs.meta new file mode 100644 index 000000000..885b4a7c8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/LiteralDataPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bbb6795003d25704fa1af50d4a6da485 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/MPInteger.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/MPInteger.cs new file mode 100644 index 000000000..5a33ed14c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/MPInteger.cs @@ -0,0 +1,70 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// A multiple precision integer + public sealed class MPInteger + : BcpgObject + { + private readonly BigInteger m_val; + + public MPInteger(BcpgInputStream bcpgIn) + { + if (bcpgIn == null) + throw new ArgumentNullException(nameof(bcpgIn)); + + int lengthInBits = (bcpgIn.ReadByte() << 8) | bcpgIn.ReadByte(); + int lengthInBytes = (lengthInBits + 7) / 8; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span bytes = lengthInBytes <= 512 + ? stackalloc byte[lengthInBytes] + : new byte[lengthInBytes]; +#else + byte[] bytes = new byte[lengthInBytes]; +#endif + + bcpgIn.ReadFully(bytes); + m_val = new BigInteger(1, bytes); + } + + public MPInteger(BigInteger val) + { + if (val == null) + throw new ArgumentNullException(nameof(val)); + if (val.SignValue < 0) + throw new ArgumentException("Values must be positive", nameof(val)); + + m_val = val; + } + + public BigInteger Value => m_val; + + public override void Encode(BcpgOutputStream bcpgOut) + { + bcpgOut.WriteShort((short)m_val.BitLength); + bcpgOut.Write(m_val.ToByteArrayUnsigned()); + } + + internal static BigInteger ToMpiBigInteger(ECPoint point) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int encodedLength = point.GetEncodedLength(false); + Span encoding = encodedLength <= 512 + ? stackalloc byte[encodedLength] + : new byte[encodedLength]; + point.EncodeTo(false, encoding); +#else + byte[] encoding = point.GetEncoded(false); +#endif + return new BigInteger(1, encoding); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/MPInteger.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/MPInteger.cs.meta new file mode 100644 index 000000000..7e0299df7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/MPInteger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 51c43f87142c9274cb885752c1ba2ca0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/MarkerPacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/MarkerPacket.cs new file mode 100644 index 000000000..94dfdae0f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/MarkerPacket.cs @@ -0,0 +1,28 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Basic type for a marker packet. + public class MarkerPacket + : ContainedPacket + { + // "PGP" + byte[] marker = { (byte)0x50, (byte)0x47, (byte)0x50 }; + + public MarkerPacket( + BcpgInputStream bcpgIn) + { + bcpgIn.ReadFully(marker); + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + bcpgOut.WritePacket(PacketTag.Marker, marker, true); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/MarkerPacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/MarkerPacket.cs.meta new file mode 100644 index 000000000..98359ae4d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/MarkerPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7507f951392bc4b41bc730caddecd831 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ModDetectionCodePacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ModDetectionCodePacket.cs new file mode 100644 index 000000000..57b8e4905 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ModDetectionCodePacket.cs @@ -0,0 +1,46 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Basic packet for a modification detection code packet. + public class ModDetectionCodePacket + : ContainedPacket + { + private readonly byte[] digest; + + internal ModDetectionCodePacket( + BcpgInputStream bcpgIn) + { + if (bcpgIn == null) + throw new ArgumentNullException("bcpgIn"); + + this.digest = new byte[20]; + bcpgIn.ReadFully(this.digest); + } + + public ModDetectionCodePacket( + byte[] digest) + { + if (digest == null) + throw new ArgumentNullException("digest"); + + this.digest = (byte[]) digest.Clone(); + } + + public byte[] GetDigest() + { + return (byte[]) digest.Clone(); + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + bcpgOut.WritePacket(PacketTag.ModificationDetectionCode, digest, false); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ModDetectionCodePacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ModDetectionCodePacket.cs.meta new file mode 100644 index 000000000..76066a937 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/ModDetectionCodePacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e6c3929f2a5efda46b5239155ec5c61f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/OnePassSignaturePacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/OnePassSignaturePacket.cs new file mode 100644 index 000000000..03dfa4fd9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/OnePassSignaturePacket.cs @@ -0,0 +1,91 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Generic signature object + public class OnePassSignaturePacket + : ContainedPacket + { + private int version; + private int sigType; + private HashAlgorithmTag hashAlgorithm; + private PublicKeyAlgorithmTag keyAlgorithm; + private long keyId; + private int nested; + + internal OnePassSignaturePacket( + BcpgInputStream bcpgIn) + { + version = bcpgIn.ReadByte(); + sigType = bcpgIn.ReadByte(); + hashAlgorithm = (HashAlgorithmTag) bcpgIn.ReadByte(); + keyAlgorithm = (PublicKeyAlgorithmTag) bcpgIn.ReadByte(); + + keyId |= (long)bcpgIn.ReadByte() << 56; + keyId |= (long)bcpgIn.ReadByte() << 48; + keyId |= (long)bcpgIn.ReadByte() << 40; + keyId |= (long)bcpgIn.ReadByte() << 32; + keyId |= (long)bcpgIn.ReadByte() << 24; + keyId |= (long)bcpgIn.ReadByte() << 16; + keyId |= (long)bcpgIn.ReadByte() << 8; + keyId |= (uint)bcpgIn.ReadByte(); + + nested = bcpgIn.ReadByte(); + } + + public OnePassSignaturePacket( + int sigType, + HashAlgorithmTag hashAlgorithm, + PublicKeyAlgorithmTag keyAlgorithm, + long keyId, + bool isNested) + { + this.version = 3; + this.sigType = sigType; + this.hashAlgorithm = hashAlgorithm; + this.keyAlgorithm = keyAlgorithm; + this.keyId = keyId; + this.nested = (isNested) ? 0 : 1; + } + + public int SignatureType + { + get { return sigType; } + } + + /// The encryption algorithm tag. + public PublicKeyAlgorithmTag KeyAlgorithm + { + get { return keyAlgorithm; } + } + + /// The hash algorithm tag. + public HashAlgorithmTag HashAlgorithm + { + get { return hashAlgorithm; } + } + + public long KeyId + { + get { return keyId; } + } + + public override void Encode(BcpgOutputStream bcpgOut) + { + MemoryStream bOut = new MemoryStream(); + using (var pOut = new BcpgOutputStream(bOut)) + { + pOut.Write((byte)version, (byte)sigType, (byte)hashAlgorithm, (byte)keyAlgorithm); + pOut.WriteLong(keyId); + pOut.WriteByte((byte)nested); + } + + bcpgOut.WritePacket(PacketTag.OnePassSignature, bOut.ToArray(), true); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/OnePassSignaturePacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/OnePassSignaturePacket.cs.meta new file mode 100644 index 000000000..714f863f5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/OnePassSignaturePacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e7e62a0975595a0479ec420eb593573d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/OutputStreamPacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/OutputStreamPacket.cs new file mode 100644 index 000000000..6f4e6f689 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/OutputStreamPacket.cs @@ -0,0 +1,28 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + public abstract class OutputStreamPacket + { + private readonly BcpgOutputStream bcpgOut; + + internal OutputStreamPacket( + BcpgOutputStream bcpgOut) + { + if (bcpgOut == null) + throw new ArgumentNullException("bcpgOut"); + + this.bcpgOut = bcpgOut; + } + + public abstract BcpgOutputStream Open(); + + public abstract void Close(); + } +} + +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/OutputStreamPacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/OutputStreamPacket.cs.meta new file mode 100644 index 000000000..036b6d9d7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/OutputStreamPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ab88778cc7899cb44bb4987dd4ea69cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/Packet.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/Packet.cs new file mode 100644 index 000000000..24758f872 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/Packet.cs @@ -0,0 +1,11 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + public class Packet + //: PacketTag + { + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/Packet.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/Packet.cs.meta new file mode 100644 index 000000000..1a3db61a2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/Packet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f681ca9844fb3804ebdc012de2ef2e52 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PacketTags.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PacketTags.cs new file mode 100644 index 000000000..361b6142c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PacketTags.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Basic PGP packet tag types. + public enum PacketTag + { + Reserved = 0, // Reserved - a packet tag must not have this value + PublicKeyEncryptedSession = 1, // Public-Key Encrypted Session Key Packet + Signature = 2, // Signature Packet + SymmetricKeyEncryptedSessionKey = 3, // Symmetric-Key Encrypted Session Key Packet + OnePassSignature = 4, // One-Pass Signature Packet + SecretKey = 5, // Secret Key Packet + PublicKey = 6, // Public Key Packet + SecretSubkey = 7, // Secret Subkey Packet + CompressedData = 8, // Compressed Data Packet + SymmetricKeyEncrypted = 9, // Symmetrically Encrypted Data Packet + Marker = 10, // Marker Packet + LiteralData = 11, // Literal Data Packet + Trust = 12, // Trust Packet + UserId = 13, // User ID Packet + PublicSubkey = 14, // Public Subkey Packet + UserAttribute = 17, // User attribute + SymmetricEncryptedIntegrityProtected = 18, // Symmetric encrypted, integrity protected + ModificationDetectionCode = 19, // Modification detection code + + Experimental1 = 60, // Private or Experimental Values + Experimental2 = 61, + Experimental3 = 62, + Experimental4 = 63 + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PacketTags.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PacketTags.cs.meta new file mode 100644 index 000000000..a17e6cd50 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PacketTags.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dcaf4305fb1e4ed49a53460eb6ae9857 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicKeyAlgorithmTags.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicKeyAlgorithmTags.cs new file mode 100644 index 000000000..07d96f876 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicKeyAlgorithmTags.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Public Key Algorithm tag numbers. + public enum PublicKeyAlgorithmTag + { + RsaGeneral = 1, // RSA (Encrypt or Sign) + RsaEncrypt = 2, // RSA Encrypt-Only + RsaSign = 3, // RSA Sign-Only + ElGamalEncrypt = 16, // Elgamal (Encrypt-Only), see [ELGAMAL] + Dsa = 17, // DSA (Digital Signature Standard) + ECDH = 18, // Reserved for Elliptic Curve (actual algorithm name) + ECDsa = 19, // Reserved for ECDSA + ElGamalGeneral = 20, // Elgamal (Encrypt or Sign) + DiffieHellman = 21, // Reserved for Diffie-Hellman (X9.42, as defined for IETF-S/MIME) + EdDsa = 22, // EdDSA - (internet draft, but appearing in use) + + Experimental_1 = 100, + Experimental_2 = 101, + Experimental_3 = 102, + Experimental_4 = 103, + Experimental_5 = 104, + Experimental_6 = 105, + Experimental_7 = 106, + Experimental_8 = 107, + Experimental_9 = 108, + Experimental_10 = 109, + Experimental_11 = 110, + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicKeyAlgorithmTags.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicKeyAlgorithmTags.cs.meta new file mode 100644 index 000000000..fe3a64423 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicKeyAlgorithmTags.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a8047fe7dbc9f55498b91c5ccbc9d4e1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicKeyEncSessionPacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicKeyEncSessionPacket.cs new file mode 100644 index 000000000..e58c158db --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicKeyEncSessionPacket.cs @@ -0,0 +1,115 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Basic packet for a PGP public key. + public class PublicKeyEncSessionPacket + : ContainedPacket //, PublicKeyAlgorithmTag + { + private int version; + private long keyId; + private PublicKeyAlgorithmTag algorithm; + private byte[][] data; + + internal PublicKeyEncSessionPacket( + BcpgInputStream bcpgIn) + { + version = bcpgIn.ReadByte(); + + keyId |= (long)bcpgIn.ReadByte() << 56; + keyId |= (long)bcpgIn.ReadByte() << 48; + keyId |= (long)bcpgIn.ReadByte() << 40; + keyId |= (long)bcpgIn.ReadByte() << 32; + keyId |= (long)bcpgIn.ReadByte() << 24; + keyId |= (long)bcpgIn.ReadByte() << 16; + keyId |= (long)bcpgIn.ReadByte() << 8; + keyId |= (uint)bcpgIn.ReadByte(); + + algorithm = (PublicKeyAlgorithmTag) bcpgIn.ReadByte(); + + switch ((PublicKeyAlgorithmTag) algorithm) + { + case PublicKeyAlgorithmTag.RsaEncrypt: + case PublicKeyAlgorithmTag.RsaGeneral: + data = new byte[][]{ new MPInteger(bcpgIn).GetEncoded() }; + break; + case PublicKeyAlgorithmTag.ElGamalEncrypt: + case PublicKeyAlgorithmTag.ElGamalGeneral: + MPInteger p = new MPInteger(bcpgIn); + MPInteger g = new MPInteger(bcpgIn); + data = new byte[][]{ + p.GetEncoded(), + g.GetEncoded(), + }; + break; + case PublicKeyAlgorithmTag.ECDH: + data = new byte[][]{ Streams.ReadAll(bcpgIn) }; + break; + default: + throw new IOException("unknown PGP public key algorithm encountered"); + } + } + + public PublicKeyEncSessionPacket( + long keyId, + PublicKeyAlgorithmTag algorithm, + byte[][] data) + { + this.version = 3; + this.keyId = keyId; + this.algorithm = algorithm; + this.data = new byte[data.Length][]; + for (int i = 0; i < data.Length; ++i) + { + this.data[i] = Arrays.Clone(data[i]); + } + } + + public int Version + { + get { return version; } + } + + public long KeyId + { + get { return keyId; } + } + + public PublicKeyAlgorithmTag Algorithm + { + get { return algorithm; } + } + + public byte[][] GetEncSessionKey() + { + return data; + } + + public override void Encode(BcpgOutputStream bcpgOut) + { + MemoryStream bOut = new MemoryStream(); + using (var pOut = new BcpgOutputStream(bOut)) + { + pOut.WriteByte((byte)version); + pOut.WriteLong(keyId); + pOut.WriteByte((byte)algorithm); + + for (int i = 0; i < data.Length; ++i) + { + pOut.Write(data[i]); + } + } + + bcpgOut.WritePacket(PacketTag.PublicKeyEncryptedSession, bOut.ToArray(), true); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicKeyEncSessionPacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicKeyEncSessionPacket.cs.meta new file mode 100644 index 000000000..9409a3745 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicKeyEncSessionPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 85cc1954c6d307041a1767fa723a7b52 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicKeyPacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicKeyPacket.cs new file mode 100644 index 000000000..18c731a8f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicKeyPacket.cs @@ -0,0 +1,128 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Date; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Basic packet for a PGP public key. + public class PublicKeyPacket + : ContainedPacket //, PublicKeyAlgorithmTag + { + private int version; + private long time; + private int validDays; + private PublicKeyAlgorithmTag algorithm; + private IBcpgKey key; + + internal PublicKeyPacket( + BcpgInputStream bcpgIn) + { + version = bcpgIn.ReadByte(); + + time = ((uint)bcpgIn.ReadByte() << 24) | ((uint)bcpgIn.ReadByte() << 16) + | ((uint)bcpgIn.ReadByte() << 8) | (uint)bcpgIn.ReadByte(); + + if (version <= 3) + { + validDays = (bcpgIn.ReadByte() << 8) | bcpgIn.ReadByte(); + } + + algorithm = (PublicKeyAlgorithmTag)bcpgIn.ReadByte(); + + switch (algorithm) + { + case PublicKeyAlgorithmTag.RsaEncrypt: + case PublicKeyAlgorithmTag.RsaGeneral: + case PublicKeyAlgorithmTag.RsaSign: + key = new RsaPublicBcpgKey(bcpgIn); + break; + case PublicKeyAlgorithmTag.Dsa: + key = new DsaPublicBcpgKey(bcpgIn); + break; + case PublicKeyAlgorithmTag.ElGamalEncrypt: + case PublicKeyAlgorithmTag.ElGamalGeneral: + key = new ElGamalPublicBcpgKey(bcpgIn); + break; + case PublicKeyAlgorithmTag.ECDH: + key = new ECDHPublicBcpgKey(bcpgIn); + break; + case PublicKeyAlgorithmTag.ECDsa: + key = new ECDsaPublicBcpgKey(bcpgIn); + break; + case PublicKeyAlgorithmTag.EdDsa: + key = new EdDsaPublicBcpgKey(bcpgIn); + break; + default: + throw new IOException("unknown PGP public key algorithm encountered"); + } + } + + /// Construct a version 4 public key packet. + public PublicKeyPacket( + PublicKeyAlgorithmTag algorithm, + DateTime time, + IBcpgKey key) + { + this.version = 4; + this.time = DateTimeUtilities.DateTimeToUnixMs(time) / 1000L; + this.algorithm = algorithm; + this.key = key; + } + + public virtual int Version + { + get { return version; } + } + + public virtual PublicKeyAlgorithmTag Algorithm + { + get { return algorithm; } + } + + public virtual int ValidDays + { + get { return validDays; } + } + + public virtual DateTime GetTime() + { + return DateTimeUtilities.UnixMsToDateTime(time * 1000L); + } + + public virtual IBcpgKey Key + { + get { return key; } + } + + public virtual byte[] GetEncodedContents() + { + MemoryStream bOut = new MemoryStream(); + BcpgOutputStream pOut = new BcpgOutputStream(bOut); + + pOut.WriteByte((byte) version); + pOut.WriteInt((int) time); + + if (version <= 3) + { + pOut.WriteShort((short) validDays); + } + + pOut.WriteByte((byte) algorithm); + + pOut.WriteObject((BcpgObject)key); + + return bOut.ToArray(); + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + bcpgOut.WritePacket(PacketTag.PublicKey, GetEncodedContents(), true); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicKeyPacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicKeyPacket.cs.meta new file mode 100644 index 000000000..f1826e0b4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicKeyPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4978f79fa76141d49b9b2130137082f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicSubkeyPacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicSubkeyPacket.cs new file mode 100644 index 000000000..dea14a359 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicSubkeyPacket.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Basic packet for a PGP public subkey + public class PublicSubkeyPacket + : PublicKeyPacket + { + internal PublicSubkeyPacket( + BcpgInputStream bcpgIn) + : base(bcpgIn) + { + } + + /// Construct a version 4 public subkey packet. + public PublicSubkeyPacket( + PublicKeyAlgorithmTag algorithm, + DateTime time, + IBcpgKey key) + : base(algorithm, time, key) + { + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + bcpgOut.WritePacket(PacketTag.PublicSubkey, GetEncodedContents(), true); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicSubkeyPacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicSubkeyPacket.cs.meta new file mode 100644 index 000000000..56f5eab98 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/PublicSubkeyPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0b1aa5a45da55614991fa91a2ea17148 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/RsaPublicBcpgKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/RsaPublicBcpgKey.cs new file mode 100644 index 000000000..032850da0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/RsaPublicBcpgKey.cs @@ -0,0 +1,70 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Base class for an RSA public key. + public class RsaPublicBcpgKey + : BcpgObject, IBcpgKey + { + private readonly MPInteger n, e; + + /// Construct an RSA public key from the passed in stream. + public RsaPublicBcpgKey( + BcpgInputStream bcpgIn) + { + this.n = new MPInteger(bcpgIn); + this.e = new MPInteger(bcpgIn); + } + + /// The modulus. + /// The public exponent. + public RsaPublicBcpgKey( + BigInteger n, + BigInteger e) + { + this.n = new MPInteger(n); + this.e = new MPInteger(e); + } + + public BigInteger PublicExponent + { + get { return e.Value; } + } + + public BigInteger Modulus + { + get { return n.Value; } + } + + /// The format, as a string, always "PGP". + public string Format + { + get { return "PGP"; } + } + + /// Return the standard PGP encoding of the key. + public override byte[] GetEncoded() + { + try + { + return base.GetEncoded(); + } + catch (Exception) + { + return null; + } + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + bcpgOut.WriteObjects(n, e); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/RsaPublicBcpgKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/RsaPublicBcpgKey.cs.meta new file mode 100644 index 000000000..8473b4e01 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/RsaPublicBcpgKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ffa063fd89c8f804089fe50ad3921cc1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/RsaSecretBcpgKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/RsaSecretBcpgKey.cs new file mode 100644 index 000000000..0e00684ba --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/RsaSecretBcpgKey.cs @@ -0,0 +1,119 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Base class for an RSA secret (or priate) key. + public class RsaSecretBcpgKey + : BcpgObject, IBcpgKey + { + private readonly MPInteger d, p, q, u; + private readonly BigInteger expP, expQ, crt; + + public RsaSecretBcpgKey( + BcpgInputStream bcpgIn) + { + this.d = new MPInteger(bcpgIn); + this.p = new MPInteger(bcpgIn); + this.q = new MPInteger(bcpgIn); + this.u = new MPInteger(bcpgIn); + + this.expP = d.Value.Remainder(p.Value.Subtract(BigInteger.One)); + this.expQ = d.Value.Remainder(q.Value.Subtract(BigInteger.One)); + this.crt = BigIntegers.ModOddInverse(p.Value, q.Value); + } + + public RsaSecretBcpgKey( + BigInteger d, + BigInteger p, + BigInteger q) + { + // PGP requires (p < q) + int cmp = p.CompareTo(q); + if (cmp >= 0) + { + if (cmp == 0) + throw new ArgumentException("p and q cannot be equal"); + + BigInteger tmp = p; + p = q; + q = tmp; + } + + this.d = new MPInteger(d); + this.p = new MPInteger(p); + this.q = new MPInteger(q); + this.u = new MPInteger(BigIntegers.ModOddInverse(q, p)); + + this.expP = d.Remainder(p.Subtract(BigInteger.One)); + this.expQ = d.Remainder(q.Subtract(BigInteger.One)); + this.crt = BigIntegers.ModOddInverse(p, q); + } + + public BigInteger Modulus + { + get { return p.Value.Multiply(q.Value); } + } + + public BigInteger PrivateExponent + { + get { return d.Value; } + } + + public BigInteger PrimeP + { + get { return p.Value; } + } + + public BigInteger PrimeQ + { + get { return q.Value; } + } + + public BigInteger PrimeExponentP + { + get { return expP; } + } + + public BigInteger PrimeExponentQ + { + get { return expQ; } + } + + public BigInteger CrtCoefficient + { + get { return crt; } + } + + /// The format, as a string, always "PGP". + public string Format + { + get { return "PGP"; } + } + + /// Return the standard PGP encoding of the key. + public override byte[] GetEncoded() + { + try + { + return base.GetEncoded(); + } + catch (Exception) + { + return null; + } + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + bcpgOut.WriteObjects(d, p, q, u); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/RsaSecretBcpgKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/RsaSecretBcpgKey.cs.meta new file mode 100644 index 000000000..aed26dfa8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/RsaSecretBcpgKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e4508a3c4cd43cb4082a991038ce0545 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/S2k.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/S2k.cs new file mode 100644 index 000000000..9099a943a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/S2k.cs @@ -0,0 +1,147 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// The string to key specifier class. + public class S2k + : BcpgObject + { + private const int ExpBias = 6; + + public const int Simple = 0; + public const int Salted = 1; + public const int SaltedAndIterated = 3; + public const int GnuDummyS2K = 101; + public const int GnuProtectionModeNoPrivateKey = 1; + public const int GnuProtectionModeDivertToCard = 2; + + internal int type; + internal HashAlgorithmTag algorithm; + internal byte[] iv; + internal int itCount = -1; + internal int protectionMode = -1; + + internal S2k( + Stream inStr) + { + type = inStr.ReadByte(); + algorithm = (HashAlgorithmTag) inStr.ReadByte(); + + // + // if this happens we have a dummy-S2k packet. + // + if (type != GnuDummyS2K) + { + if (type != 0) + { + iv = new byte[8]; + if (Streams.ReadFully(inStr, iv, 0, iv.Length) < iv.Length) + throw new EndOfStreamException(); + + if (type == 3) + { + itCount = inStr.ReadByte(); + } + } + } + else + { + inStr.ReadByte(); // G + inStr.ReadByte(); // N + inStr.ReadByte(); // U + protectionMode = inStr.ReadByte(); // protection mode + } + } + + public S2k( + HashAlgorithmTag algorithm) + { + this.type = 0; + this.algorithm = algorithm; + } + + public S2k( + HashAlgorithmTag algorithm, + byte[] iv) + { + this.type = 1; + this.algorithm = algorithm; + this.iv = iv; + } + + public S2k( + HashAlgorithmTag algorithm, + byte[] iv, + int itCount) + { + this.type = 3; + this.algorithm = algorithm; + this.iv = iv; + this.itCount = itCount; + } + + public virtual int Type + { + get { return type; } + } + + /// The hash algorithm. + public virtual HashAlgorithmTag HashAlgorithm + { + get { return algorithm; } + } + + /// The IV for the key generation algorithm. + public virtual byte[] GetIV() + { + return Arrays.Clone(iv); + } + + /// The iteration count + public virtual long IterationCount + { + get { return (16 + (itCount & 15)) << ((itCount >> 4) + ExpBias); } + } + + /// The protection mode - only if GnuDummyS2K + public virtual int ProtectionMode + { + get { return protectionMode; } + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + bcpgOut.WriteByte((byte) type); + bcpgOut.WriteByte((byte) algorithm); + + if (type != GnuDummyS2K) + { + if (type != 0) + { + bcpgOut.Write(iv); + } + + if (type == 3) + { + bcpgOut.WriteByte((byte) itCount); + } + } + else + { + bcpgOut.WriteByte((byte) 'G'); + bcpgOut.WriteByte((byte) 'N'); + bcpgOut.WriteByte((byte) 'U'); + bcpgOut.WriteByte((byte) protectionMode); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/S2k.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/S2k.cs.meta new file mode 100644 index 000000000..c1b668539 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/S2k.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: abfc948ea0289364dadb631d98b29e61 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SecretKeyPacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SecretKeyPacket.cs new file mode 100644 index 000000000..01724d97c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SecretKeyPacket.cs @@ -0,0 +1,174 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Basic packet for a PGP secret key. + public class SecretKeyPacket + : ContainedPacket //, PublicKeyAlgorithmTag + { + public const int UsageNone = 0x00; + public const int UsageChecksum = 0xff; + public const int UsageSha1 = 0xfe; + + private PublicKeyPacket pubKeyPacket; + private readonly byte[] secKeyData; + private int s2kUsage; + private SymmetricKeyAlgorithmTag encAlgorithm; + private S2k s2k; + private byte[] iv; + + internal SecretKeyPacket( + BcpgInputStream bcpgIn) + { + if (this is SecretSubkeyPacket) + { + pubKeyPacket = new PublicSubkeyPacket(bcpgIn); + } + else + { + pubKeyPacket = new PublicKeyPacket(bcpgIn); + } + + s2kUsage = bcpgIn.ReadByte(); + + if (s2kUsage == UsageChecksum || s2kUsage == UsageSha1) + { + encAlgorithm = (SymmetricKeyAlgorithmTag) bcpgIn.ReadByte(); + s2k = new S2k(bcpgIn); + } + else + { + encAlgorithm = (SymmetricKeyAlgorithmTag) s2kUsage; + } + + if (!(s2k != null && s2k.Type == S2k.GnuDummyS2K && s2k.ProtectionMode == 0x01)) + { + if (s2kUsage != 0) + { + if (((int) encAlgorithm) < 7) + { + iv = new byte[8]; + } + else + { + iv = new byte[16]; + } + bcpgIn.ReadFully(iv); + } + } + + secKeyData = bcpgIn.ReadAll(); + } + + public SecretKeyPacket( + PublicKeyPacket pubKeyPacket, + SymmetricKeyAlgorithmTag encAlgorithm, + S2k s2k, + byte[] iv, + byte[] secKeyData) + { + this.pubKeyPacket = pubKeyPacket; + this.encAlgorithm = encAlgorithm; + + if (encAlgorithm != SymmetricKeyAlgorithmTag.Null) + { + this.s2kUsage = UsageChecksum; + } + else + { + this.s2kUsage = UsageNone; + } + + this.s2k = s2k; + this.iv = Arrays.Clone(iv); + this.secKeyData = secKeyData; + } + + public SecretKeyPacket( + PublicKeyPacket pubKeyPacket, + SymmetricKeyAlgorithmTag encAlgorithm, + int s2kUsage, + S2k s2k, + byte[] iv, + byte[] secKeyData) + { + this.pubKeyPacket = pubKeyPacket; + this.encAlgorithm = encAlgorithm; + this.s2kUsage = s2kUsage; + this.s2k = s2k; + this.iv = Arrays.Clone(iv); + this.secKeyData = secKeyData; + } + + public SymmetricKeyAlgorithmTag EncAlgorithm + { + get { return encAlgorithm; } + } + + public int S2kUsage + { + get { return s2kUsage; } + } + + public byte[] GetIV() + { + return Arrays.Clone(iv); + } + + public S2k S2k + { + get { return s2k; } + } + + public PublicKeyPacket PublicKeyPacket + { + get { return pubKeyPacket; } + } + + public byte[] GetSecretKeyData() + { + return secKeyData; + } + + public byte[] GetEncodedContents() + { + MemoryStream bOut = new MemoryStream(); + BcpgOutputStream pOut = new BcpgOutputStream(bOut); + + pOut.Write(pubKeyPacket.GetEncodedContents()); + + pOut.WriteByte((byte) s2kUsage); + + if (s2kUsage == UsageChecksum || s2kUsage == UsageSha1) + { + pOut.WriteByte((byte) encAlgorithm); + pOut.WriteObject(s2k); + } + + if (iv != null) + { + pOut.Write(iv); + } + + if (secKeyData != null && secKeyData.Length > 0) + { + pOut.Write(secKeyData); + } + + return bOut.ToArray(); + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + bcpgOut.WritePacket(PacketTag.SecretKey, GetEncodedContents(), true); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SecretKeyPacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SecretKeyPacket.cs.meta new file mode 100644 index 000000000..afb0be7dc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SecretKeyPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a0959cf27a501f4298786b0bd9b10be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SecretSubkeyPacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SecretSubkeyPacket.cs new file mode 100644 index 000000000..ced8735ef --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SecretSubkeyPacket.cs @@ -0,0 +1,47 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Basic packet for a PGP secret key. + public class SecretSubkeyPacket + : SecretKeyPacket + { + internal SecretSubkeyPacket( + BcpgInputStream bcpgIn) + : base(bcpgIn) + { + } + + public SecretSubkeyPacket( + PublicKeyPacket pubKeyPacket, + SymmetricKeyAlgorithmTag encAlgorithm, + S2k s2k, + byte[] iv, + byte[] secKeyData) + : base(pubKeyPacket, encAlgorithm, s2k, iv, secKeyData) + { + } + + public SecretSubkeyPacket( + PublicKeyPacket pubKeyPacket, + SymmetricKeyAlgorithmTag encAlgorithm, + int s2kUsage, + S2k s2k, + byte[] iv, + byte[] secKeyData) + : base(pubKeyPacket, encAlgorithm, s2kUsage, s2k, iv, secKeyData) + { + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + bcpgOut.WritePacket(PacketTag.SecretSubkey, GetEncodedContents(), true); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SecretSubkeyPacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SecretSubkeyPacket.cs.meta new file mode 100644 index 000000000..40d81b5cd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SecretSubkeyPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8a71e0ececac4a645a427b6d001a363b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignaturePacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignaturePacket.cs new file mode 100644 index 000000000..48dfc96fd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignaturePacket.cs @@ -0,0 +1,466 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg.Sig; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Date; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Generic signature packet. + public class SignaturePacket + : ContainedPacket + { + private int version; + private int signatureType; + private long creationTime; + private long keyId; + private PublicKeyAlgorithmTag keyAlgorithm; + private HashAlgorithmTag hashAlgorithm; + private MPInteger[] signature; + private byte[] fingerprint; + private SignatureSubpacket[] hashedData; + private SignatureSubpacket[] unhashedData; + private byte[] signatureEncoding; + + internal SignaturePacket( + BcpgInputStream bcpgIn) + { + version = bcpgIn.ReadByte(); + + if (version == 3 || version == 2) + { +// int l = + bcpgIn.ReadByte(); + + signatureType = bcpgIn.ReadByte(); + creationTime = (((long)bcpgIn.ReadByte() << 24) | ((long)bcpgIn.ReadByte() << 16) + | ((long)bcpgIn.ReadByte() << 8) | (uint)bcpgIn.ReadByte()) * 1000L; + + keyId |= (long)bcpgIn.ReadByte() << 56; + keyId |= (long)bcpgIn.ReadByte() << 48; + keyId |= (long)bcpgIn.ReadByte() << 40; + keyId |= (long)bcpgIn.ReadByte() << 32; + keyId |= (long)bcpgIn.ReadByte() << 24; + keyId |= (long)bcpgIn.ReadByte() << 16; + keyId |= (long)bcpgIn.ReadByte() << 8; + keyId |= (uint)bcpgIn.ReadByte(); + + keyAlgorithm = (PublicKeyAlgorithmTag) bcpgIn.ReadByte(); + hashAlgorithm = (HashAlgorithmTag) bcpgIn.ReadByte(); + } + else if (version == 4) + { + signatureType = bcpgIn.ReadByte(); + keyAlgorithm = (PublicKeyAlgorithmTag) bcpgIn.ReadByte(); + hashAlgorithm = (HashAlgorithmTag) bcpgIn.ReadByte(); + + int hashedLength = (bcpgIn.ReadByte() << 8) | bcpgIn.ReadByte(); + byte[] hashed = new byte[hashedLength]; + + bcpgIn.ReadFully(hashed); + + // + // read the signature sub packet data. + // + SignatureSubpacketsParser sIn = new SignatureSubpacketsParser( + new MemoryStream(hashed, false)); + + var v = new List(); + + SignatureSubpacket sub; + while ((sub = sIn.ReadPacket()) != null) + { + v.Add(sub); + } + + hashedData = v.ToArray(); + + foreach (var p in hashedData) + { + if (p is IssuerKeyId issuerKeyId) + { + keyId = issuerKeyId.KeyId; + } + else if (p is SignatureCreationTime sigCreationTime) + { + creationTime = DateTimeUtilities.DateTimeToUnixMs(sigCreationTime.GetTime()); + } + } + + int unhashedLength = (bcpgIn.ReadByte() << 8) | bcpgIn.ReadByte(); + byte[] unhashed = new byte[unhashedLength]; + + bcpgIn.ReadFully(unhashed); + + sIn = new SignatureSubpacketsParser(new MemoryStream(unhashed, false)); + + v.Clear(); + + while ((sub = sIn.ReadPacket()) != null) + { + v.Add(sub); + } + + unhashedData = v.ToArray(); + + foreach (var p in unhashedData) + { + if (p is IssuerKeyId issuerKeyId) + { + keyId = issuerKeyId.KeyId; + } + } + } + else + { + Streams.Drain(bcpgIn); + + throw new UnsupportedPacketVersionException("unsupported version: " + version); + } + + fingerprint = new byte[2]; + bcpgIn.ReadFully(fingerprint); + + switch (keyAlgorithm) + { + case PublicKeyAlgorithmTag.RsaGeneral: + case PublicKeyAlgorithmTag.RsaSign: + MPInteger v = new MPInteger(bcpgIn); + signature = new MPInteger[1]{ v }; + break; + case PublicKeyAlgorithmTag.Dsa: + MPInteger r = new MPInteger(bcpgIn); + MPInteger s = new MPInteger(bcpgIn); + signature = new MPInteger[2]{ r, s }; + break; + case PublicKeyAlgorithmTag.ElGamalEncrypt: // yep, this really does happen sometimes. + case PublicKeyAlgorithmTag.ElGamalGeneral: + MPInteger p = new MPInteger(bcpgIn); + MPInteger g = new MPInteger(bcpgIn); + MPInteger y = new MPInteger(bcpgIn); + signature = new MPInteger[3]{ p, g, y }; + break; + case PublicKeyAlgorithmTag.ECDsa: + case PublicKeyAlgorithmTag.EdDsa: + MPInteger ecR = new MPInteger(bcpgIn); + MPInteger ecS = new MPInteger(bcpgIn); + signature = new MPInteger[2]{ ecR, ecS }; + break; + default: + if (keyAlgorithm < PublicKeyAlgorithmTag.Experimental_1 || keyAlgorithm > PublicKeyAlgorithmTag.Experimental_11) + throw new IOException("unknown signature key algorithm: " + keyAlgorithm); + + signature = null; + MemoryStream bOut = new MemoryStream(); + int ch; + while ((ch = bcpgIn.ReadByte()) >= 0) + { + bOut.WriteByte((byte) ch); + } + signatureEncoding = bOut.ToArray(); + break; + } + } + + /** + * Generate a version 4 signature packet. + * + * @param signatureType + * @param keyAlgorithm + * @param hashAlgorithm + * @param hashedData + * @param unhashedData + * @param fingerprint + * @param signature + */ + public SignaturePacket( + int signatureType, + long keyId, + PublicKeyAlgorithmTag keyAlgorithm, + HashAlgorithmTag hashAlgorithm, + SignatureSubpacket[] hashedData, + SignatureSubpacket[] unhashedData, + byte[] fingerprint, + MPInteger[] signature) + : this(4, signatureType, keyId, keyAlgorithm, hashAlgorithm, hashedData, unhashedData, fingerprint, signature) + { + } + + /** + * Generate a version 2/3 signature packet. + * + * @param signatureType + * @param keyAlgorithm + * @param hashAlgorithm + * @param fingerprint + * @param signature + */ + public SignaturePacket( + int version, + int signatureType, + long keyId, + PublicKeyAlgorithmTag keyAlgorithm, + HashAlgorithmTag hashAlgorithm, + long creationTime, + byte[] fingerprint, + MPInteger[] signature) + : this(version, signatureType, keyId, keyAlgorithm, hashAlgorithm, null, null, fingerprint, signature) + { + this.creationTime = creationTime; + } + + public SignaturePacket( + int version, + int signatureType, + long keyId, + PublicKeyAlgorithmTag keyAlgorithm, + HashAlgorithmTag hashAlgorithm, + SignatureSubpacket[] hashedData, + SignatureSubpacket[] unhashedData, + byte[] fingerprint, + MPInteger[] signature) + { + this.version = version; + this.signatureType = signatureType; + this.keyId = keyId; + this.keyAlgorithm = keyAlgorithm; + this.hashAlgorithm = hashAlgorithm; + this.hashedData = hashedData; + this.unhashedData = unhashedData; + this.fingerprint = fingerprint; + this.signature = signature; + + if (hashedData != null) + { + SetCreationTime(); + } + } + + public int Version + { + get { return version; } + } + + public int SignatureType + { + get { return signatureType; } + } + + /** + * return the keyId + * @return the keyId that created the signature. + */ + public long KeyId + { + get { return keyId; } + } + + /** + * return the signature trailer that must be included with the data + * to reconstruct the signature + * + * @return byte[] + */ + public byte[] GetSignatureTrailer() + { + if (version == 3) + { + long time = creationTime / 1000L; + + byte[] trailer = new byte[5]; + trailer[0] = (byte)signatureType; + trailer[1] = (byte)(time >> 24); + trailer[2] = (byte)(time >> 16); + trailer[3] = (byte)(time >> 8); + trailer[4] = (byte)(time ); + return trailer; + } + + MemoryStream sOut = new MemoryStream(); + + sOut.WriteByte((byte)Version); + sOut.WriteByte((byte)SignatureType); + sOut.WriteByte((byte)KeyAlgorithm); + sOut.WriteByte((byte)HashAlgorithm); + + // Mark position an reserve two bytes for length + long lengthPosition = sOut.Position; + sOut.WriteByte(0x00); + sOut.WriteByte(0x00); + + SignatureSubpacket[] hashed = GetHashedSubPackets(); + for (int i = 0; i != hashed.Length; i++) + { + hashed[i].Encode(sOut); + } + + ushort dataLength = Convert.ToUInt16(sOut.Position - lengthPosition - 2); + uint hDataLength = Convert.ToUInt32(sOut.Position); + + sOut.WriteByte((byte)Version); + sOut.WriteByte(0xff); + sOut.WriteByte((byte)(hDataLength >> 24)); + sOut.WriteByte((byte)(hDataLength >> 16)); + sOut.WriteByte((byte)(hDataLength >> 8)); + sOut.WriteByte((byte)(hDataLength )); + + // Reset position and fill in length + sOut.Position = lengthPosition; + sOut.WriteByte((byte)(dataLength >> 8)); + sOut.WriteByte((byte)(dataLength )); + + return sOut.ToArray(); + } + + public PublicKeyAlgorithmTag KeyAlgorithm + { + get { return keyAlgorithm; } + } + + public HashAlgorithmTag HashAlgorithm + { + get { return hashAlgorithm; } + } + + /** + * return the signature as a set of integers - note this is normalised to be the + * ASN.1 encoding of what appears in the signature packet. + */ + public MPInteger[] GetSignature() + { + return signature; + } + + /** + * Return the byte encoding of the signature section. + * @return uninterpreted signature bytes. + */ + public byte[] GetSignatureBytes() + { + if (signatureEncoding != null) + { + return (byte[]) signatureEncoding.Clone(); + } + + MemoryStream bOut = new MemoryStream(); + BcpgOutputStream bcOut = new BcpgOutputStream(bOut); + + foreach (MPInteger sigObj in signature) + { + try + { + bcOut.WriteObject(sigObj); + } + catch (IOException e) + { + throw new Exception("internal error: " + e); + } + } + + return bOut.ToArray(); + } + + public SignatureSubpacket[] GetHashedSubPackets() + { + return hashedData; + } + + public SignatureSubpacket[] GetUnhashedSubPackets() + { + return unhashedData; + } + + /// Return the creation time in milliseconds since 1 Jan., 1970 UTC. + public long CreationTime + { + get { return creationTime; } + } + + public override void Encode(BcpgOutputStream bcpgOut) + { + MemoryStream bOut = new MemoryStream(); + using (var pOut = new BcpgOutputStream(bOut)) + { + pOut.WriteByte((byte)version); + + if (version == 3 || version == 2) + { + byte nextBlockLength = 5; + pOut.Write(nextBlockLength, (byte)signatureType); + pOut.WriteInt((int)(creationTime / 1000L)); + pOut.WriteLong(keyId); + pOut.Write((byte)keyAlgorithm, (byte)hashAlgorithm); + } + else if (version == 4) + { + pOut.Write((byte)signatureType, (byte)keyAlgorithm, (byte)hashAlgorithm); + EncodeLengthAndData(pOut, GetEncodedSubpackets(hashedData)); + EncodeLengthAndData(pOut, GetEncodedSubpackets(unhashedData)); + } + else + { + throw new IOException("unknown version: " + version); + } + + pOut.Write(fingerprint); + + if (signature != null) + { + pOut.WriteObjects(signature); + } + else + { + pOut.Write(signatureEncoding); + } + } + + bcpgOut.WritePacket(PacketTag.Signature, bOut.ToArray(), true); + } + + private static void EncodeLengthAndData( + BcpgOutputStream pOut, + byte[] data) + { + pOut.WriteShort((short) data.Length); + pOut.Write(data); + } + + private static byte[] GetEncodedSubpackets( + SignatureSubpacket[] ps) + { + MemoryStream sOut = new MemoryStream(); + + foreach (SignatureSubpacket p in ps) + { + p.Encode(sOut); + } + + return sOut.ToArray(); + } + + private void SetCreationTime() + { + foreach (SignatureSubpacket p in hashedData) + { + if (p is SignatureCreationTime signatureCreationTime) + { + creationTime = DateTimeUtilities.DateTimeToUnixMs(signatureCreationTime.GetTime()); + break; + } + } + } + + public static SignaturePacket FromByteArray(byte[] data) + { + BcpgInputStream input = BcpgInputStream.Wrap(new MemoryStream(data)); + + return new SignaturePacket(input); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignaturePacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignaturePacket.cs.meta new file mode 100644 index 000000000..a67feba2e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignaturePacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cb04d6068460cbb4dbaacebe957d550d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignatureSubpacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignatureSubpacket.cs new file mode 100644 index 000000000..625dc9634 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignatureSubpacket.cs @@ -0,0 +1,119 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Basic type for a PGP Signature sub-packet. + public class SignatureSubpacket + { + private readonly SignatureSubpacketTag type; + private readonly bool critical; + private readonly bool isLongLength; + internal byte[] data; + + protected internal SignatureSubpacket( + SignatureSubpacketTag type, + bool critical, + bool isLongLength, + byte[] data) + { + this.type = type; + this.critical = critical; + this.isLongLength = isLongLength; + this.data = data; + } + + public SignatureSubpacketTag SubpacketType + { + get { return type; } + } + + public bool IsCritical() + { + return critical; + } + + public bool IsLongLength() + { + return isLongLength; + } + + /// Return the generic data making up the packet. + public byte[] GetData() + { + return (byte[]) data.Clone(); + } + + public void Encode( + Stream os) + { + int bodyLen = data.Length + 1; + + if (isLongLength) + { + os.WriteByte(0xff); + os.WriteByte((byte)(bodyLen >> 24)); + os.WriteByte((byte)(bodyLen >> 16)); + os.WriteByte((byte)(bodyLen >> 8)); + os.WriteByte((byte)bodyLen); + } + else + { + if (bodyLen < 192) + { + os.WriteByte((byte)bodyLen); + } + else if (bodyLen <= 8383) + { + bodyLen -= 192; + + os.WriteByte((byte)(((bodyLen >> 8) & 0xff) + 192)); + os.WriteByte((byte)bodyLen); + } + else + { + os.WriteByte(0xff); + os.WriteByte((byte)(bodyLen >> 24)); + os.WriteByte((byte)(bodyLen >> 16)); + os.WriteByte((byte)(bodyLen >> 8)); + os.WriteByte((byte)bodyLen); + } + } + + if (critical) + { + os.WriteByte((byte)(0x80 | (int) type)); + } + else + { + os.WriteByte((byte) type); + } + + os.Write(data, 0, data.Length); + } + + public override int GetHashCode() + { + return (critical ? 1 : 0) + 7 * (int)type + 49 * Arrays.GetHashCode(data); + } + + public override bool Equals(object obj) + { + if (obj == this) + return true; + + SignatureSubpacket other = obj as SignatureSubpacket; + if (null == other) + return false; + + return this.type == other.type + && this.critical == other.critical + && Arrays.AreEqual(this.data, other.data); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignatureSubpacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignatureSubpacket.cs.meta new file mode 100644 index 000000000..5cf60214b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignatureSubpacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12485b706aefe7f49b22c4d8185ca603 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignatureSubpacketTags.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignatureSubpacketTags.cs new file mode 100644 index 000000000..e27f14ecc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignatureSubpacketTags.cs @@ -0,0 +1,37 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /** + * Basic PGP signature sub-packet tag types. + */ + public enum SignatureSubpacketTag + { + CreationTime = 2, // signature creation time + ExpireTime = 3, // signature expiration time + Exportable = 4, // exportable certification + TrustSig = 5, // trust signature + RegExp = 6, // regular expression + Revocable = 7, // revocable + KeyExpireTime = 9, // key expiration time + Placeholder = 10, // placeholder for backward compatibility + PreferredSymmetricAlgorithms = 11, // preferred symmetric algorithms + RevocationKey = 12, // revocation key + IssuerKeyId = 16, // issuer key ID + NotationData = 20, // notation data + PreferredHashAlgorithms = 21, // preferred hash algorithms + PreferredCompressionAlgorithms = 22, // preferred compression algorithms + KeyServerPreferences = 23, // key server preferences + PreferredKeyServer = 24, // preferred key server + PrimaryUserId = 25, // primary user id + PolicyUrl = 26, // policy URL + KeyFlags = 27, // key flags + SignerUserId = 28, // signer's user id + RevocationReason = 29, // reason for revocation + Features = 30, // features + SignatureTarget = 31, // signature target + EmbeddedSignature = 32 // embedded signature + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignatureSubpacketTags.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignatureSubpacketTags.cs.meta new file mode 100644 index 000000000..abbc04a6f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignatureSubpacketTags.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 53dafaf5eabe775429e939e53176f906 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignatureSubpacketsReader.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignatureSubpacketsReader.cs new file mode 100644 index 000000000..6cb09bff7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignatureSubpacketsReader.cs @@ -0,0 +1,139 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg.Sig; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /** + * reader for signature sub-packets + */ + public class SignatureSubpacketsParser + { + private readonly Stream input; + + public SignatureSubpacketsParser( + Stream input) + { + this.input = input; + } + + public SignatureSubpacket ReadPacket() + { + int l = input.ReadByte(); + if (l < 0) + return null; + + int bodyLen = 0; + bool isLongLength = false; + + if (l < 192) + { + bodyLen = l; + } + else if (l <= 223) + { + bodyLen = ((l - 192) << 8) + (input.ReadByte()) + 192; + } + else if (l == 255) + { + isLongLength = true; + bodyLen = (input.ReadByte() << 24) | (input.ReadByte() << 16) + | (input.ReadByte() << 8) | input.ReadByte(); + } + else + { + throw new IOException("unexpected length header"); + } + + int tag = input.ReadByte(); + if (tag < 0) + throw new EndOfStreamException("unexpected EOF reading signature sub packet"); + + if (bodyLen <= 0) + throw new EndOfStreamException("out of range data found in signature sub packet"); + + byte[] data = new byte[bodyLen - 1]; + + // + // this may seem a bit strange but it turns out some applications miscode the length + // in fixed length fields, so we check the length we do get, only throwing an exception if + // we really cannot continue + // + int bytesRead = Streams.ReadFully(input, data); + + bool isCritical = ((tag & 0x80) != 0); + SignatureSubpacketTag type = (SignatureSubpacketTag)(tag & 0x7f); + + if (bytesRead != data.Length) + { + switch (type) + { + case SignatureSubpacketTag.CreationTime: + data = CheckData(data, 4, bytesRead, "Signature Creation Time"); + break; + case SignatureSubpacketTag.IssuerKeyId: + data = CheckData(data, 8, bytesRead, "Issuer"); + break; + case SignatureSubpacketTag.KeyExpireTime: + data = CheckData(data, 4, bytesRead, "Signature Key Expiration Time"); + break; + case SignatureSubpacketTag.ExpireTime: + data = CheckData(data, 4, bytesRead, "Signature Expiration Time"); + break; + default: + throw new EndOfStreamException("truncated subpacket data."); + } + } + + switch (type) + { + case SignatureSubpacketTag.CreationTime: + return new SignatureCreationTime(isCritical, isLongLength, data); + case SignatureSubpacketTag.KeyExpireTime: + return new KeyExpirationTime(isCritical, isLongLength, data); + case SignatureSubpacketTag.ExpireTime: + return new SignatureExpirationTime(isCritical, isLongLength, data); + case SignatureSubpacketTag.Revocable: + return new Revocable(isCritical, isLongLength, data); + case SignatureSubpacketTag.Exportable: + return new Exportable(isCritical, isLongLength, data); + case SignatureSubpacketTag.IssuerKeyId: + return new IssuerKeyId(isCritical, isLongLength, data); + case SignatureSubpacketTag.TrustSig: + return new TrustSignature(isCritical, isLongLength, data); + case SignatureSubpacketTag.PreferredCompressionAlgorithms: + case SignatureSubpacketTag.PreferredHashAlgorithms: + case SignatureSubpacketTag.PreferredSymmetricAlgorithms: + return new PreferredAlgorithms(type, isCritical, isLongLength, data); + case SignatureSubpacketTag.KeyFlags: + return new KeyFlags(isCritical, isLongLength, data); + case SignatureSubpacketTag.PrimaryUserId: + return new PrimaryUserId(isCritical, isLongLength, data); + case SignatureSubpacketTag.SignerUserId: + return new SignerUserId(isCritical, isLongLength, data); + case SignatureSubpacketTag.NotationData: + return new NotationData(isCritical, isLongLength, data); + case SignatureSubpacketTag.RevocationReason: + return new RevocationReason(isCritical, isLongLength, data); + case SignatureSubpacketTag.RevocationKey: + return new RevocationKey(isCritical, isLongLength, data); + } + return new SignatureSubpacket(type, isCritical, isLongLength, data); + } + + private byte[] CheckData(byte[] data, int expected, int bytesRead, string name) + { + if (bytesRead != expected) + throw new EndOfStreamException("truncated " + name + " subpacket data."); + + return Arrays.CopyOfRange(data, 0, expected); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignatureSubpacketsReader.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignatureSubpacketsReader.cs.meta new file mode 100644 index 000000000..4bbc4b4fa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SignatureSubpacketsReader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f94273b5bb4519448ab9101989a9972f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricEncDataPacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricEncDataPacket.cs new file mode 100644 index 000000000..4572cd08c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricEncDataPacket.cs @@ -0,0 +1,19 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Basic type for a symmetric key encrypted packet. + public class SymmetricEncDataPacket + : InputStreamPacket + { + public SymmetricEncDataPacket( + BcpgInputStream bcpgIn) + : base(bcpgIn) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricEncDataPacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricEncDataPacket.cs.meta new file mode 100644 index 000000000..cd487bd3c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricEncDataPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d668c9021b14934a98a3f736b472714 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricEncIntegrityPacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricEncIntegrityPacket.cs new file mode 100644 index 000000000..ac9dcf495 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricEncIntegrityPacket.cs @@ -0,0 +1,22 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + public class SymmetricEncIntegrityPacket + : InputStreamPacket + { + internal readonly int version; + + internal SymmetricEncIntegrityPacket( + BcpgInputStream bcpgIn) + : base(bcpgIn) + { + version = bcpgIn.ReadByte(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricEncIntegrityPacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricEncIntegrityPacket.cs.meta new file mode 100644 index 000000000..fb3456ed9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricEncIntegrityPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3d8627069cfc6bc419d3f2d253d4230f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricKeyAlgorithmTags.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricKeyAlgorithmTags.cs new file mode 100644 index 000000000..3c44d7bc0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricKeyAlgorithmTags.cs @@ -0,0 +1,27 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /** + * Basic tags for symmetric key algorithms + */ + public enum SymmetricKeyAlgorithmTag + { + Null = 0, // Plaintext or unencrypted data + Idea = 1, // IDEA [IDEA] + TripleDes = 2, // Triple-DES (DES-EDE, as per spec -168 bit key derived from 192) + Cast5 = 3, // Cast5 (128 bit key, as per RFC 2144) + Blowfish = 4, // Blowfish (128 bit key, 16 rounds) [Blowfish] + Safer = 5, // Safer-SK128 (13 rounds) [Safer] + Des = 6, // Reserved for DES/SK + Aes128 = 7, // Reserved for AES with 128-bit key + Aes192 = 8, // Reserved for AES with 192-bit key + Aes256 = 9, // Reserved for AES with 256-bit key + Twofish = 10, // Reserved for Twofish + Camellia128 = 11, // Reserved for AES with 128-bit key + Camellia192 = 12, // Reserved for AES with 192-bit key + Camellia256 = 13 // Reserved for AES with 256-bit key + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricKeyAlgorithmTags.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricKeyAlgorithmTags.cs.meta new file mode 100644 index 000000000..172be5f49 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricKeyAlgorithmTags.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 63ce06623f4338246b0618b822b1cf2f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricKeyEncSessionPacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricKeyEncSessionPacket.cs new file mode 100644 index 000000000..23507a863 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricKeyEncSessionPacket.cs @@ -0,0 +1,92 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /** + * Basic type for a symmetric encrypted session key packet + */ + public class SymmetricKeyEncSessionPacket + : ContainedPacket + { + private int version; + private SymmetricKeyAlgorithmTag encAlgorithm; + private S2k s2k; + private readonly byte[] secKeyData; + + public SymmetricKeyEncSessionPacket( + BcpgInputStream bcpgIn) + { + version = bcpgIn.ReadByte(); + encAlgorithm = (SymmetricKeyAlgorithmTag) bcpgIn.ReadByte(); + + s2k = new S2k(bcpgIn); + + secKeyData = bcpgIn.ReadAll(); + } + + public SymmetricKeyEncSessionPacket( + SymmetricKeyAlgorithmTag encAlgorithm, + S2k s2k, + byte[] secKeyData) + { + this.version = 4; + this.encAlgorithm = encAlgorithm; + this.s2k = s2k; + this.secKeyData = secKeyData; + } + + /** + * @return int + */ + public SymmetricKeyAlgorithmTag EncAlgorithm + { + get { return encAlgorithm; } + } + + /** + * @return S2k + */ + public S2k S2k + { + get { return s2k; } + } + + /** + * @return byte[] + */ + public byte[] GetSecKeyData() + { + return secKeyData; + } + + /** + * @return int + */ + public int Version + { + get { return version; } + } + + public override void Encode(BcpgOutputStream bcpgOut) + { + MemoryStream bOut = new MemoryStream(); + using (var pOut = new BcpgOutputStream(bOut)) + { + pOut.Write((byte)version, (byte)encAlgorithm); + pOut.WriteObject(s2k); + + if (secKeyData != null && secKeyData.Length > 0) + { + pOut.Write(secKeyData); + } + } + + bcpgOut.WritePacket(PacketTag.SymmetricKeyEncryptedSessionKey, bOut.ToArray(), true); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricKeyEncSessionPacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricKeyEncSessionPacket.cs.meta new file mode 100644 index 000000000..a36bef79a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/SymmetricKeyEncSessionPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 821a5a072ef823e4ba584738d06f922a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/TrustPacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/TrustPacket.cs new file mode 100644 index 000000000..d9fd47bd4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/TrustPacket.cs @@ -0,0 +1,47 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// Basic type for a trust packet. + public class TrustPacket + : ContainedPacket + { + private readonly byte[] levelAndTrustAmount; + + public TrustPacket( + BcpgInputStream bcpgIn) + { + MemoryStream bOut = new MemoryStream(); + + int ch; + while ((ch = bcpgIn.ReadByte()) >= 0) + { + bOut.WriteByte((byte) ch); + } + + levelAndTrustAmount = bOut.ToArray(); + } + + public TrustPacket( + int trustCode) + { + this.levelAndTrustAmount = new byte[]{ (byte) trustCode }; + } + + public byte[] GetLevelAndTrustAmount() + { + return (byte[]) levelAndTrustAmount.Clone(); + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + bcpgOut.WritePacket(PacketTag.Trust, levelAndTrustAmount, true); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/TrustPacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/TrustPacket.cs.meta new file mode 100644 index 000000000..8cae8fab3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/TrustPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58e56486c7a6faf4685209440e004728 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UnsupportedPacketVersionException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UnsupportedPacketVersionException.cs new file mode 100644 index 000000000..385deb11c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UnsupportedPacketVersionException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + [Serializable] + public class UnsupportedPacketVersionException + : Exception + { + public UnsupportedPacketVersionException() + : base() + { + } + + public UnsupportedPacketVersionException(string message) + : base(message) + { + } + + public UnsupportedPacketVersionException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected UnsupportedPacketVersionException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UnsupportedPacketVersionException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UnsupportedPacketVersionException.cs.meta new file mode 100644 index 000000000..7e7d8cac9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UnsupportedPacketVersionException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 06b7809f4ba6a494fa1a848f8e38d3f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributePacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributePacket.cs new file mode 100644 index 000000000..55175784d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributePacket.cs @@ -0,0 +1,57 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.Collections.Generic; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /** + * Basic type for a user attribute packet. + */ + public class UserAttributePacket + : ContainedPacket + { + private readonly UserAttributeSubpacket[] subpackets; + + public UserAttributePacket( + BcpgInputStream bcpgIn) + { + UserAttributeSubpacketsParser sIn = new UserAttributeSubpacketsParser(bcpgIn); + UserAttributeSubpacket sub; + + var v = new List(); + while ((sub = sIn.ReadPacket()) != null) + { + v.Add(sub); + } + + subpackets = v.ToArray(); + } + + public UserAttributePacket( + UserAttributeSubpacket[] subpackets) + { + this.subpackets = subpackets; + } + + public UserAttributeSubpacket[] GetSubpackets() + { + return subpackets; + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + MemoryStream bOut = new MemoryStream(); + + for (int i = 0; i != subpackets.Length; i++) + { + subpackets[i].Encode(bOut); + } + + bcpgOut.WritePacket(PacketTag.UserAttribute, bOut.ToArray(), false); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributePacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributePacket.cs.meta new file mode 100644 index 000000000..64d11efc6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributePacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 391ac0786d2adc44aa8c9d479d913759 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributeSubpacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributeSubpacket.cs new file mode 100644 index 000000000..b1effb072 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributeSubpacket.cs @@ -0,0 +1,94 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /** + * Basic type for a user attribute sub-packet. + */ + public class UserAttributeSubpacket + { + internal readonly UserAttributeSubpacketTag type; + private readonly bool longLength; // we preserve this as not everyone encodes length properly. + protected readonly byte[] data; + + protected internal UserAttributeSubpacket(UserAttributeSubpacketTag type, byte[] data) + : this(type, false, data) + { + } + + protected internal UserAttributeSubpacket(UserAttributeSubpacketTag type, bool forceLongLength, byte[] data) + { + this.type = type; + this.longLength = forceLongLength; + this.data = data; + } + + public virtual UserAttributeSubpacketTag SubpacketType + { + get { return type; } + } + + /** + * return the generic data making up the packet. + */ + public virtual byte[] GetData() + { + return data; + } + + public virtual void Encode(Stream os) + { + int bodyLen = data.Length + 1; + + if (bodyLen < 192 && !longLength) + { + os.WriteByte((byte)bodyLen); + } + else if (bodyLen <= 8383 && !longLength) + { + bodyLen -= 192; + + os.WriteByte((byte)(((bodyLen >> 8) & 0xff) + 192)); + os.WriteByte((byte)bodyLen); + } + else + { + os.WriteByte(0xff); + os.WriteByte((byte)(bodyLen >> 24)); + os.WriteByte((byte)(bodyLen >> 16)); + os.WriteByte((byte)(bodyLen >> 8)); + os.WriteByte((byte)bodyLen); + } + + os.WriteByte((byte) type); + os.Write(data, 0, data.Length); + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + UserAttributeSubpacket other = obj as UserAttributeSubpacket; + + if (other == null) + return false; + + return type == other.type + && Arrays.AreEqual(data, other.data); + } + + public override int GetHashCode() + { + return type.GetHashCode() ^ Arrays.GetHashCode(data); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributeSubpacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributeSubpacket.cs.meta new file mode 100644 index 000000000..f22ba2667 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributeSubpacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9aa95f166fe06324594d4343b257f990 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributeSubpacketTags.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributeSubpacketTags.cs new file mode 100644 index 000000000..ea3187ddd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributeSubpacketTags.cs @@ -0,0 +1,14 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /** + * Basic PGP user attribute sub-packet tag types. + */ + public enum UserAttributeSubpacketTag + { + ImageAttribute = 1 + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributeSubpacketTags.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributeSubpacketTags.cs.meta new file mode 100644 index 000000000..91c2e186c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributeSubpacketTags.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 33d2bd016499d8d4ebb78d965808edc5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributeSubpacketsReader.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributeSubpacketsReader.cs new file mode 100644 index 000000000..3fdf4ee3d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributeSubpacketsReader.cs @@ -0,0 +1,69 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg.Attr; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /** + * reader for user attribute sub-packets + */ + public class UserAttributeSubpacketsParser + { + private readonly Stream input; + + public UserAttributeSubpacketsParser( + Stream input) + { + this.input = input; + } + + public virtual UserAttributeSubpacket ReadPacket() + { + int l = input.ReadByte(); + if (l < 0) + return null; + + int bodyLen = 0; + bool longLength = false; + if (l < 192) + { + bodyLen = l; + } + else if (l <= 223) + { + bodyLen = ((l - 192) << 8) + (input.ReadByte()) + 192; + } + else if (l == 255) + { + bodyLen = (input.ReadByte() << 24) | (input.ReadByte() << 16) + | (input.ReadByte() << 8) | input.ReadByte(); + longLength = true; + } + else + { + throw new IOException("unrecognised length reading user attribute sub packet"); + } + + int tag = input.ReadByte(); + if (tag < 0) + throw new EndOfStreamException("unexpected EOF reading user attribute sub packet"); + + byte[] data = new byte[bodyLen - 1]; + if (Streams.ReadFully(input, data) < data.Length) + throw new EndOfStreamException(); + + UserAttributeSubpacketTag type = (UserAttributeSubpacketTag) tag; + switch (type) + { + case UserAttributeSubpacketTag.ImageAttribute: + return new ImageAttrib(longLength, data); + } + return new UserAttributeSubpacket(type, longLength, data); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributeSubpacketsReader.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributeSubpacketsReader.cs.meta new file mode 100644 index 000000000..432e2641e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserAttributeSubpacketsReader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 94880a7c27f8ead45bfa6713e4b5d548 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserIdPacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserIdPacket.cs new file mode 100644 index 000000000..555e58a29 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserIdPacket.cs @@ -0,0 +1,41 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /** + * Basic type for a user ID packet. + */ + public class UserIdPacket + : ContainedPacket + { + private readonly byte[] idData; + + public UserIdPacket( + BcpgInputStream bcpgIn) + { + this.idData = bcpgIn.ReadAll(); + } + + public UserIdPacket( + string id) + { + this.idData = Encoding.UTF8.GetBytes(id); + } + + public string GetId() + { + return Encoding.UTF8.GetString(idData, 0, idData.Length); + } + + public override void Encode( + BcpgOutputStream bcpgOut) + { + bcpgOut.WritePacket(PacketTag.UserId, idData, true); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserIdPacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserIdPacket.cs.meta new file mode 100644 index 000000000..21ae7b063 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/UserIdPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7e09868d940832e499f94e98f57876a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/attr.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/attr.meta new file mode 100644 index 000000000..efcb9f8b7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/attr.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cdf60a3dcf0b4a749896c9bf025c5087 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/attr/ImageAttrib.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/attr/ImageAttrib.cs new file mode 100644 index 000000000..cd8144e6a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/attr/ImageAttrib.cs @@ -0,0 +1,76 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg.Attr +{ + /// Basic type for a image attribute packet. + public class ImageAttrib + : UserAttributeSubpacket + { + public enum Format : byte + { + Jpeg = 1 + } + + private static readonly byte[] Zeroes = new byte[12]; + + private int hdrLength; + private int _version; + private int _encoding; + private byte[] imageData; + + public ImageAttrib(byte[] data) + : this(false, data) + { + } + + public ImageAttrib(bool forceLongLength, byte[] data) + : base(UserAttributeSubpacketTag.ImageAttribute, forceLongLength, data) + { + hdrLength = ((data[1] & 0xff) << 8) | (data[0] & 0xff); + _version = data[2] & 0xff; + _encoding = data[3] & 0xff; + + imageData = new byte[data.Length - hdrLength]; + Array.Copy(data, hdrLength, imageData, 0, imageData.Length); + } + + public ImageAttrib( + Format imageType, + byte[] imageData) + : this(ToByteArray(imageType, imageData)) + { + } + + private static byte[] ToByteArray( + Format imageType, + byte[] imageData) + { + MemoryStream bOut = new MemoryStream(); + bOut.WriteByte(0x10); bOut.WriteByte(0x00); bOut.WriteByte(0x01); + bOut.WriteByte((byte) imageType); + bOut.Write(Zeroes, 0, Zeroes.Length); + bOut.Write(imageData, 0, imageData.Length); + return bOut.ToArray(); + } + + public virtual int Version + { + get { return _version; } + } + + public virtual int Encoding + { + get { return _encoding; } + } + + public virtual byte[] GetImageData() + { + return imageData; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/attr/ImageAttrib.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/attr/ImageAttrib.cs.meta new file mode 100644 index 000000000..aa1ab386d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/attr/ImageAttrib.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: da3a9333170f3b045a38a64f561b7f0f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig.meta new file mode 100644 index 000000000..de8890121 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f4982bc494e38884d9f246ba58f51fa2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/EmbeddedSignature.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/EmbeddedSignature.cs new file mode 100644 index 000000000..ccf6b2574 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/EmbeddedSignature.cs @@ -0,0 +1,23 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg.Sig +{ + /** + * Packet embedded signature + */ + public class EmbeddedSignature + : SignatureSubpacket + { + public EmbeddedSignature( + bool critical, + bool isLongLength, + byte[] data) + : base(SignatureSubpacketTag.EmbeddedSignature, critical, isLongLength, data) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/EmbeddedSignature.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/EmbeddedSignature.cs.meta new file mode 100644 index 000000000..18703236b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/EmbeddedSignature.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ea483fafa967a0e4ea5f3f6e70b03b30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/Exportable.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/Exportable.cs new file mode 100644 index 000000000..e617f35c9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/Exportable.cs @@ -0,0 +1,40 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg.Sig +{ + /** + * packet giving signature creation time. + */ + public class Exportable + : SignatureSubpacket + { + private static byte[] BooleanToByteArray(bool val) + { + return new byte[1]{ Convert.ToByte(val) }; + } + + public Exportable( + bool critical, + bool isLongLength, + byte[] data) + : base(SignatureSubpacketTag.Exportable, critical, isLongLength, data) + { + } + + public Exportable( + bool critical, + bool isExportable) + : base(SignatureSubpacketTag.Exportable, critical, false, BooleanToByteArray(isExportable)) + { + } + + public bool IsExportable() + { + return data[0] != 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/Exportable.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/Exportable.cs.meta new file mode 100644 index 000000000..14ab2fea6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/Exportable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6ccd4c0965e645945b008b907dd1ae0c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/Features.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/Features.cs new file mode 100644 index 000000000..eea3ef285 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/Features.cs @@ -0,0 +1,63 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg.Sig +{ + /** + * packet giving signature expiration time. + */ + public class Features + : SignatureSubpacket + { + /** Identifier for the Modification Detection (packets 18 and 19) */ + public static readonly byte FEATURE_MODIFICATION_DETECTION = 0x01; + /** Identifier for the AEAD Encrypted Data Packet (packet 20) and version 5 + Symmetric-Key Encrypted Session Key Packets (packet 3) */ + public static readonly byte FEATURE_AEAD_ENCRYPTED_DATA = 0x02; + /** Identifier for the Version 5 Public-Key Packet format and corresponding new + fingerprint format */ + public static readonly byte FEATURE_VERSION_5_PUBLIC_KEY = 0x04; + + private static byte[] FeatureToByteArray(byte feature) + { + return new byte[1]{ feature }; + } + + public Features( + bool critical, + bool isLongLength, + byte[] data) + : base(SignatureSubpacketTag.Features, critical, isLongLength, data) + { + } + + public Features(bool critical, byte features): this(critical, false, FeatureToByteArray(features)) + { + } + + public Features(bool critical, int features): this(critical, false, FeatureToByteArray((byte)features)) + { + } + + /** + * Returns if modification detection is supported. + */ + public bool SupportsModificationDetection + { + get { return SupportsFeature(FEATURE_MODIFICATION_DETECTION); } + } + + /** + * Returns if a particular feature is supported. + */ + public bool SupportsFeature(byte feature) + { + return (data[0] & feature) != 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/Features.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/Features.cs.meta new file mode 100644 index 000000000..d1da5409d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/Features.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3bbf98a05b908ca46be3136313cfb9a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/IssuerKeyId.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/IssuerKeyId.cs new file mode 100644 index 000000000..981e5264f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/IssuerKeyId.cs @@ -0,0 +1,37 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg.Sig +{ + /** + * packet giving signature creation time. + */ + public class IssuerKeyId + : SignatureSubpacket + { + protected static byte[] KeyIdToBytes(long keyId) + { + return Pack.UInt64_To_BE((ulong)keyId); + } + + public IssuerKeyId( + bool critical, + bool isLongLength, + byte[] data) + : base(SignatureSubpacketTag.IssuerKeyId, critical, isLongLength, data) + { + } + + public IssuerKeyId( + bool critical, + long keyId) + : base(SignatureSubpacketTag.IssuerKeyId, critical, false, KeyIdToBytes(keyId)) + { + } + + public long KeyId => (long)Pack.BE_To_UInt64(data); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/IssuerKeyId.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/IssuerKeyId.cs.meta new file mode 100644 index 000000000..b9c0b37b4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/IssuerKeyId.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa987417da358ad40aadbac9285054ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/KeyExpirationTime.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/KeyExpirationTime.cs new file mode 100644 index 000000000..bbc115e97 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/KeyExpirationTime.cs @@ -0,0 +1,42 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg.Sig +{ + /** + * packet giving time after creation at which the key expires. + */ + public class KeyExpirationTime + : SignatureSubpacket + { + protected static byte[] TimeToBytes(long t) + { + return Pack.UInt32_To_BE((uint)t); + } + + public KeyExpirationTime( + bool critical, + bool isLongLength, + byte[] data) + : base(SignatureSubpacketTag.KeyExpireTime, critical, isLongLength, data) + { + } + + public KeyExpirationTime( + bool critical, + long seconds) + : base(SignatureSubpacketTag.KeyExpireTime, critical, false, TimeToBytes(seconds)) + { + } + + /** + * Return the number of seconds after creation time a key is valid for. + * + * @return second count for key validity. + */ + public long Time => (long)Pack.BE_To_UInt32(data); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/KeyExpirationTime.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/KeyExpirationTime.cs.meta new file mode 100644 index 000000000..8ea32857f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/KeyExpirationTime.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3d3ad8210cddfa498fa3e6c5d4fcbb0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/KeyFlags.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/KeyFlags.cs new file mode 100644 index 000000000..cc160e921 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/KeyFlags.cs @@ -0,0 +1,79 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg.Sig +{ + /** + * Packet holding the key flag values. + */ + public class KeyFlags + : SignatureSubpacket + { + public const int CertifyOther = 0x01; + public const int SignData = 0x02; + public const int EncryptComms = 0x04; + public const int EncryptStorage = 0x08; + public const int Split = 0x10; + public const int Authentication = 0x20; + public const int Shared = 0x80; + + private static byte[] IntToByteArray( + int v) + { + byte[] tmp = new byte[4]; + int size = 0; + + for (int i = 0; i != 4; i++) + { + tmp[i] = (byte)(v >> (i * 8)); + if (tmp[i] != 0) + { + size = i; + } + } + + byte[] data = new byte[size + 1]; + Array.Copy(tmp, 0, data, 0, data.Length); + return data; + } + + public KeyFlags( + bool critical, + bool isLongLength, + byte[] data) + : base(SignatureSubpacketTag.KeyFlags, critical, isLongLength, data) + { + } + + public KeyFlags( + bool critical, + int flags) + : base(SignatureSubpacketTag.KeyFlags, critical, false, IntToByteArray(flags)) + { + } + + /// + /// Return the flag values contained in the first 4 octets (note: at the moment + /// the standard only uses the first one). + /// + public int Flags + { + get + { + int flags = 0; + + for (int i = 0; i != data.Length; i++) + { + flags |= (data[i] & 0xff) << (i * 8); + } + + return flags; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/KeyFlags.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/KeyFlags.cs.meta new file mode 100644 index 000000000..7140052e9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/KeyFlags.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 22e4c0163580f014ca9f90e053d68564 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/NotationData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/NotationData.cs new file mode 100644 index 000000000..0604d62f7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/NotationData.cs @@ -0,0 +1,117 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Text; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg.Sig +{ + /** + * Class provided a NotationData object according to + * RFC2440, Chapter 5.2.3.15. Notation Data + */ + public class NotationData + : SignatureSubpacket + { + public const int HeaderFlagLength = 4; + public const int HeaderNameLength = 2; + public const int HeaderValueLength = 2; + + public NotationData( + bool critical, + bool isLongLength, + byte[] data) + : base(SignatureSubpacketTag.NotationData, critical, isLongLength, data) + { + } + + public NotationData( + bool critical, + bool humanReadable, + string notationName, + string notationValue) + : base(SignatureSubpacketTag.NotationData, critical, false, + CreateData(humanReadable, notationName, notationValue)) + { + } + + private static byte[] CreateData( + bool humanReadable, + string notationName, + string notationValue) + { + MemoryStream os = new MemoryStream(); + + // (4 octets of flags, 2 octets of name length (M), + // 2 octets of value length (N), + // M octets of name data, + // N octets of value data) + + // flags + os.WriteByte(humanReadable ? (byte)0x80 : (byte)0x00); + os.WriteByte(0x0); + os.WriteByte(0x0); + os.WriteByte(0x0); + + byte[] nameData, valueData = null; + int nameLength, valueLength; + + nameData = Encoding.UTF8.GetBytes(notationName); + nameLength = System.Math.Min(nameData.Length, 0xFF); + + valueData = Encoding.UTF8.GetBytes(notationValue); + valueLength = System.Math.Min(valueData.Length, 0xFF); + + // name length + os.WriteByte((byte)(nameLength >> 8)); + os.WriteByte((byte)(nameLength >> 0)); + + // value length + os.WriteByte((byte)(valueLength >> 8)); + os.WriteByte((byte)(valueLength >> 0)); + + // name + os.Write(nameData, 0, nameLength); + + // value + os.Write(valueData, 0, valueLength); + + return os.ToArray(); + } + + public bool IsHumanReadable + { + get { return data[0] == 0x80; } + } + + public string GetNotationName() + { + int nameLength = ((data[HeaderFlagLength] << 8) + (data[HeaderFlagLength + 1] << 0)); + int namePos = HeaderFlagLength + HeaderNameLength + HeaderValueLength; + + return Encoding.UTF8.GetString(data, namePos, nameLength); + } + + public string GetNotationValue() + { + int nameLength = ((data[HeaderFlagLength] << 8) + (data[HeaderFlagLength + 1] << 0)); + int valueLength = ((data[HeaderFlagLength + HeaderNameLength] << 8) + (data[HeaderFlagLength + HeaderNameLength + 1] << 0)); + int valuePos = HeaderFlagLength + HeaderNameLength + HeaderValueLength + nameLength; + + return Encoding.UTF8.GetString(data, valuePos, valueLength); + } + + public byte[] GetNotationValueBytes() + { + int nameLength = ((data[HeaderFlagLength] << 8) + (data[HeaderFlagLength + 1] << 0)); + int valueLength = ((data[HeaderFlagLength + HeaderNameLength] << 8) + (data[HeaderFlagLength + HeaderNameLength + 1] << 0)); + int valuePos = HeaderFlagLength + HeaderNameLength + HeaderValueLength + nameLength; + + byte[] bytes = new byte[valueLength]; + Array.Copy(data, valuePos, bytes, 0, valueLength); + return bytes; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/NotationData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/NotationData.cs.meta new file mode 100644 index 000000000..38fbc997c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/NotationData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3cf9b0878c3cf048981c0d097ce88ed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/PreferredAlgorithms.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/PreferredAlgorithms.cs new file mode 100644 index 000000000..e56aad463 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/PreferredAlgorithms.cs @@ -0,0 +1,57 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg.Sig +{ + /** + * packet giving signature creation time. + */ + public class PreferredAlgorithms + : SignatureSubpacket + { + private static byte[] IntToByteArray( + int[] v) + { + byte[] data = new byte[v.Length]; + + for (int i = 0; i != v.Length; i++) + { + data[i] = (byte)v[i]; + } + + return data; + } + + public PreferredAlgorithms( + SignatureSubpacketTag type, + bool critical, + bool isLongLength, + byte[] data) + : base(type, critical, isLongLength, data) + { + } + + public PreferredAlgorithms( + SignatureSubpacketTag type, + bool critical, + int[] preferences) + : base(type, critical, false, IntToByteArray(preferences)) + { + } + + public int[] GetPreferences() + { + int[] v = new int[data.Length]; + + for (int i = 0; i != v.Length; i++) + { + v[i] = data[i] & 0xff; + } + + return v; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/PreferredAlgorithms.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/PreferredAlgorithms.cs.meta new file mode 100644 index 000000000..d27f52ba2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/PreferredAlgorithms.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a7c38494a745484fa37da49228ea98a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/PrimaryUserId.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/PrimaryUserId.cs new file mode 100644 index 000000000..fed076d36 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/PrimaryUserId.cs @@ -0,0 +1,40 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg.Sig +{ + /** + * packet giving whether or not the signature is signed using the primary user ID for the key. + */ + public class PrimaryUserId + : SignatureSubpacket + { + private static byte[] BooleanToByteArray(bool val) + { + return new byte[1]{ Convert.ToByte(val) }; + } + + public PrimaryUserId( + bool critical, + bool isLongLength, + byte[] data) + : base(SignatureSubpacketTag.PrimaryUserId, critical, isLongLength, data) + { + } + + public PrimaryUserId( + bool critical, + bool isPrimaryUserId) + : base(SignatureSubpacketTag.PrimaryUserId, critical, false, BooleanToByteArray(isPrimaryUserId)) + { + } + + public bool IsPrimaryUserId() + { + return data[0] != 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/PrimaryUserId.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/PrimaryUserId.cs.meta new file mode 100644 index 000000000..198931ab1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/PrimaryUserId.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f278f3003d0865439687ecca616cebf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/Revocable.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/Revocable.cs new file mode 100644 index 000000000..7914cb656 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/Revocable.cs @@ -0,0 +1,40 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg.Sig +{ + /** + * packet giving whether or not is revocable. + */ + public class Revocable + : SignatureSubpacket + { + private static byte[] BooleanToByteArray(bool value) + { + return new byte[1]{ Convert.ToByte(value) }; + } + + public Revocable( + bool critical, + bool isLongLength, + byte[] data) + : base(SignatureSubpacketTag.Revocable, critical, isLongLength, data) + { + } + + public Revocable( + bool critical, + bool isRevocable) + : base(SignatureSubpacketTag.Revocable, critical, false, BooleanToByteArray(isRevocable)) + { + } + + public bool IsRevocable() + { + return data[0] != 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/Revocable.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/Revocable.cs.meta new file mode 100644 index 000000000..7cc467c1a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/Revocable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 586f0c03e0409bc40a69fb776d9a427c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationKey.cs new file mode 100644 index 000000000..7bdd57fe5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationKey.cs @@ -0,0 +1,67 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// + /// Represents revocation key OpenPGP signature sub packet. + /// + public class RevocationKey + : SignatureSubpacket + { + // 1 octet of class, + // 1 octet of public-key algorithm ID, + // 20 octets of fingerprint + public RevocationKey( + bool isCritical, + bool isLongLength, + byte[] data) + : base(SignatureSubpacketTag.RevocationKey, isCritical, isLongLength, data) + { + } + + public RevocationKey( + bool isCritical, + RevocationKeyTag signatureClass, + PublicKeyAlgorithmTag keyAlgorithm, + byte[] fingerprint) + : base(SignatureSubpacketTag.RevocationKey, isCritical, false, + CreateData(signatureClass, keyAlgorithm, fingerprint)) + { + } + + private static byte[] CreateData( + RevocationKeyTag signatureClass, + PublicKeyAlgorithmTag keyAlgorithm, + byte[] fingerprint) + { + byte[] data = new byte[2 + fingerprint.Length]; + data[0] = (byte)signatureClass; + data[1] = (byte)keyAlgorithm; + Array.Copy(fingerprint, 0, data, 2, fingerprint.Length); + return data; + } + + public virtual RevocationKeyTag SignatureClass + { + get { return (RevocationKeyTag)this.GetData()[0]; } + } + + public virtual PublicKeyAlgorithmTag Algorithm + { + get { return (PublicKeyAlgorithmTag)this.GetData()[1]; } + } + + public virtual byte[] GetFingerprint() + { + byte[] data = this.GetData(); + byte[] fingerprint = new byte[data.Length - 2]; + Array.Copy(data, 2, fingerprint, 0, fingerprint.Length); + return fingerprint; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationKey.cs.meta new file mode 100644 index 000000000..d7b29b31f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c23033f9d1d6fd4cb8a5086780b29f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationKeyTags.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationKeyTags.cs new file mode 100644 index 000000000..4c7b663e5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationKeyTags.cs @@ -0,0 +1,13 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + public enum RevocationKeyTag + : byte + { + ClassDefault = 0x80, + ClassSensitive = 0x40 + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationKeyTags.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationKeyTags.cs.meta new file mode 100644 index 000000000..c6fc2d12b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationKeyTags.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b8439301146f64b4690fbf44c59ec410 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationReason.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationReason.cs new file mode 100644 index 000000000..72aa4ae85 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationReason.cs @@ -0,0 +1,61 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + /// + /// Represents revocation reason OpenPGP signature sub packet. + /// + public class RevocationReason + : SignatureSubpacket + { + public RevocationReason(bool isCritical, bool isLongLength, byte[] data) + : base(SignatureSubpacketTag.RevocationReason, isCritical, isLongLength, data) + { + } + + public RevocationReason( + bool isCritical, + RevocationReasonTag reason, + string description) + : base(SignatureSubpacketTag.RevocationReason, isCritical, false, CreateData(reason, description)) + { + } + + private static byte[] CreateData( + RevocationReasonTag reason, + string description) + { + byte[] descriptionBytes = Strings.ToUtf8ByteArray(description); + byte[] data = new byte[1 + descriptionBytes.Length]; + + data[0] = (byte)reason; + Array.Copy(descriptionBytes, 0, data, 1, descriptionBytes.Length); + + return data; + } + + public virtual RevocationReasonTag GetRevocationReason() + { + return (RevocationReasonTag)GetData()[0]; + } + + public virtual string GetRevocationDescription() + { + byte[] data = GetData(); + if (data.Length == 1) + return string.Empty; + + byte[] description = new byte[data.Length - 1]; + Array.Copy(data, 1, description, 0, description.Length); + + return Strings.FromUtf8ByteArray(description); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationReason.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationReason.cs.meta new file mode 100644 index 000000000..8c70b0e12 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationReason.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 57ea4b89efb469d4ea1d5161387dab6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationReasonTags.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationReasonTags.cs new file mode 100644 index 000000000..72256dcd9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationReasonTags.cs @@ -0,0 +1,18 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg +{ + public enum RevocationReasonTag + : byte + { + NoReason = 0, // No reason specified (key revocations or cert revocations) + KeySuperseded = 1, // Key is superseded (key revocations) + KeyCompromised = 2, // Key material has been compromised (key revocations) + KeyRetired = 3, // Key is retired and no longer used (key revocations) + UserNoLongerValid = 32, // User ID information is no longer valid (cert revocations) + + // 100-110 - Private Use + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationReasonTags.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationReasonTags.cs.meta new file mode 100644 index 000000000..4fcbf7178 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/RevocationReasonTags.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 46beec6ba7af25340accb60766b88512 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/SignatureCreationTime.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/SignatureCreationTime.cs new file mode 100644 index 000000000..b3a62eb80 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/SignatureCreationTime.cs @@ -0,0 +1,40 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Date; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg.Sig +{ + /** + * packet giving signature creation time. + */ + public class SignatureCreationTime + : SignatureSubpacket + { + protected static byte[] TimeToBytes(DateTime time) + { + long t = DateTimeUtilities.DateTimeToUnixMs(time) / 1000L; + return Pack.UInt32_To_BE((uint)t); + } + + public SignatureCreationTime(bool critical, bool isLongLength, byte[] data) + : base(SignatureSubpacketTag.CreationTime, critical, isLongLength, data) + { + } + + public SignatureCreationTime(bool critical, DateTime date) + : base(SignatureSubpacketTag.CreationTime, critical, false, TimeToBytes(date)) + { + } + + public DateTime GetTime() + { + uint time = Pack.BE_To_UInt32(data, 0); + return DateTimeUtilities.UnixMsToDateTime(time * 1000L); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/SignatureCreationTime.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/SignatureCreationTime.cs.meta new file mode 100644 index 000000000..dcd77d8f5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/SignatureCreationTime.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e5a03cf65d76094e93be6bac486aaf8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/SignatureExpirationTime.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/SignatureExpirationTime.cs new file mode 100644 index 000000000..b7fc8ad79 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/SignatureExpirationTime.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg.Sig +{ + /** + * packet giving signature expiration time. + */ + public class SignatureExpirationTime + : SignatureSubpacket + { + protected static byte[] TimeToBytes(long t) + { + return Pack.UInt32_To_BE((uint)t); + } + + public SignatureExpirationTime(bool critical, bool isLongLength, byte[] data) + : base(SignatureSubpacketTag.ExpireTime, critical, isLongLength, data) + { + } + + public SignatureExpirationTime(bool critical, long seconds) + : base(SignatureSubpacketTag.ExpireTime, critical, false, TimeToBytes(seconds)) + { + } + + /** + * return time in seconds before signature expires after creation time. + */ + public long Time => Pack.BE_To_UInt32(data, 0); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/SignatureExpirationTime.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/SignatureExpirationTime.cs.meta new file mode 100644 index 000000000..650bb95af --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/SignatureExpirationTime.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31f88501cabe0ba448f1d75343fdc4c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/SignerUserId.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/SignerUserId.cs new file mode 100644 index 000000000..45c68c14d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/SignerUserId.cs @@ -0,0 +1,53 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg.Sig +{ + /** + * packet giving the User ID of the signer. + */ + public class SignerUserId + : SignatureSubpacket + { + private static byte[] UserIdToBytes( + string id) + { + byte[] idData = new byte[id.Length]; + + for (int i = 0; i != id.Length; i++) + { + idData[i] = (byte)id[i]; + } + + return idData; + } + + public SignerUserId( + bool critical, + bool isLongLength, + byte[] data) + : base(SignatureSubpacketTag.SignerUserId, critical, isLongLength, data) + { + } + + public SignerUserId( + bool critical, + string userId) + : base(SignatureSubpacketTag.SignerUserId, critical, false, UserIdToBytes(userId)) + { + } + + public string GetId() + { + char[] chars = new char[data.Length]; + + for (int i = 0; i != chars.Length; i++) + { + chars[i] = (char)(data[i] & 0xff); + } + + return new string(chars); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/SignerUserId.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/SignerUserId.cs.meta new file mode 100644 index 000000000..c3859955c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/SignerUserId.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8ccf955e99cbf1e438f0a55b6be308fd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/TrustSignature.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/TrustSignature.cs new file mode 100644 index 000000000..497fb053e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/TrustSignature.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Bcpg.Sig +{ + /** + * packet giving trust. + */ + public class TrustSignature + : SignatureSubpacket + { + private static byte[] IntToByteArray( + int v1, + int v2) + { + return new byte[]{ (byte)v1, (byte)v2 }; + } + + public TrustSignature( + bool critical, + bool isLongLength, + byte[] data) + : base(SignatureSubpacketTag.TrustSig, critical, isLongLength, data) + { + } + + public TrustSignature( + bool critical, + int depth, + int trustAmount) + : base(SignatureSubpacketTag.TrustSig, critical, false, IntToByteArray(depth, trustAmount)) + { + } + + public int Depth + { + get { return data[0] & 0xff; } + } + + public int TrustAmount + { + get { return data[1] & 0xff; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/TrustSignature.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/TrustSignature.cs.meta new file mode 100644 index 000000000..f4dbc311a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/bcpg/sig/TrustSignature.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 81febc63348561047bc38bf2c0095d7e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp.meta new file mode 100644 index 000000000..2e048b6b6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2b354e2f666af3246bbdd6c4a82db142 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CertificateConfirmationContent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CertificateConfirmationContent.cs new file mode 100644 index 000000000..61b12f038 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CertificateConfirmationContent.cs @@ -0,0 +1,46 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Cms; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cmp +{ + public class CertificateConfirmationContent + { + private readonly DefaultDigestAlgorithmIdentifierFinder m_digestAlgFinder; + private readonly CertConfirmContent m_content; + + public CertificateConfirmationContent(CertConfirmContent content) + { + this.m_content = content; + } + + public CertificateConfirmationContent(CertConfirmContent content, + DefaultDigestAlgorithmIdentifierFinder digestAlgFinder) + { + this.m_content = content; + this.m_digestAlgFinder = digestAlgFinder; + } + + public CertConfirmContent ToAsn1Structure() + { + return m_content; + } + + public CertificateStatus[] GetStatusMessages() + { + CertStatus[] statusArray = m_content.ToCertStatusArray(); + CertificateStatus[] ret = new CertificateStatus[statusArray.Length]; + for (int i = 0; i != ret.Length; i++) + { + ret[i] = new CertificateStatus(m_digestAlgFinder, statusArray[i]); + } + + return ret; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CertificateConfirmationContent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CertificateConfirmationContent.cs.meta new file mode 100644 index 000000000..34d909f9d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CertificateConfirmationContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f35656e52bb4e2848bb77febb18c71b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CertificateConfirmationContentBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CertificateConfirmationContentBuilder.cs new file mode 100644 index 000000000..706adffe0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CertificateConfirmationContentBuilder.cs @@ -0,0 +1,69 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cmp +{ + public sealed class CertificateConfirmationContentBuilder + { + private static readonly DefaultSignatureAlgorithmIdentifierFinder SigAlgFinder = + new DefaultSignatureAlgorithmIdentifierFinder(); + + private readonly DefaultDigestAlgorithmIdentifierFinder m_digestAlgFinder; + private readonly IList m_acceptedCerts = new List(); + private readonly IList m_acceptedReqIDs = new List(); + + public CertificateConfirmationContentBuilder() + : this(new DefaultDigestAlgorithmIdentifierFinder()) + { + } + + public CertificateConfirmationContentBuilder(DefaultDigestAlgorithmIdentifierFinder digestAlgFinder) + { + this.m_digestAlgFinder = digestAlgFinder; + } + + public CertificateConfirmationContentBuilder AddAcceptedCertificate(X509Certificate certHolder, + BigInteger certReqId) + { + m_acceptedCerts.Add(certHolder); + m_acceptedReqIDs.Add(certReqId); + return this; + } + + public CertificateConfirmationContent Build() + { + Asn1EncodableVector v = new Asn1EncodableVector(); + for (int i = 0; i != m_acceptedCerts.Count; i++) + { + X509Certificate cert = m_acceptedCerts[i]; + BigInteger reqID = m_acceptedReqIDs[i]; + + AlgorithmIdentifier algorithmIdentifier = SigAlgFinder.Find(cert.SigAlgName); + if (null == algorithmIdentifier) + throw new CmpException("cannot find algorithm identifier for signature name"); + + AlgorithmIdentifier digAlg = m_digestAlgFinder.Find(algorithmIdentifier); + if (null == digAlg) + throw new CmpException("cannot find algorithm for digest from signature"); + + byte[] digest = DigestUtilities.CalculateDigest(digAlg.Algorithm, cert.GetEncoded()); + + v.Add(new CertStatus(digest, reqID)); + } + + return new CertificateConfirmationContent(CertConfirmContent.GetInstance(new DerSequence(v)), + m_digestAlgFinder); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CertificateConfirmationContentBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CertificateConfirmationContentBuilder.cs.meta new file mode 100644 index 000000000..589f5e359 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CertificateConfirmationContentBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d16c3d50c5b29fd40a259ac7f6f67869 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CertificateStatus.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CertificateStatus.cs new file mode 100644 index 000000000..921f4073d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CertificateStatus.cs @@ -0,0 +1,46 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cmp +{ + public class CertificateStatus + { + private static readonly DefaultSignatureAlgorithmIdentifierFinder sigAlgFinder = new DefaultSignatureAlgorithmIdentifierFinder(); + + private readonly DefaultDigestAlgorithmIdentifierFinder digestAlgFinder; + private readonly CertStatus certStatus; + + public CertificateStatus(DefaultDigestAlgorithmIdentifierFinder digestAlgFinder, CertStatus certStatus) + { + this.digestAlgFinder = digestAlgFinder; + this.certStatus = certStatus; + } + + public virtual PkiStatusInfo StatusInfo => certStatus.StatusInfo; + + public virtual BigInteger CertRequestID => certStatus.CertReqID.Value; + + public virtual bool IsVerified(X509Certificate cert) + { + AlgorithmIdentifier digAlg = digestAlgFinder.Find(sigAlgFinder.Find(cert.SigAlgName)); + if (null == digAlg) + throw new CmpException("cannot find algorithm for digest from signature " + cert.SigAlgName); + + byte[] digest = DigestUtilities.CalculateDigest(digAlg.Algorithm, cert.GetEncoded()); + + return Arrays.ConstantTimeAreEqual(certStatus.CertHash.GetOctets(), digest); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CertificateStatus.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CertificateStatus.cs.meta new file mode 100644 index 000000000..0b6e02508 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CertificateStatus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b49242607e5a6d4ab596d2eeb0a2403 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CmpException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CmpException.cs new file mode 100644 index 000000000..e31b76da8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CmpException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cmp +{ + [Serializable] + public class CmpException + : Exception + { + public CmpException() + : base() + { + } + + public CmpException(string message) + : base(message) + { + } + + public CmpException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected CmpException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CmpException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CmpException.cs.meta new file mode 100644 index 000000000..ab0678e92 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/CmpException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 521d6298e5b1cbb4c803d6940b4e5a72 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/GeneralPkiMessage.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/GeneralPkiMessage.cs new file mode 100644 index 000000000..71062fead --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/GeneralPkiMessage.cs @@ -0,0 +1,49 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cmp +{ + public class GeneralPkiMessage + { + private readonly PkiMessage m_pkiMessage; + + private static PkiMessage ParseBytes(byte[] encoding) + { + return PkiMessage.GetInstance(Asn1Object.FromByteArray(encoding)); + } + + /// + /// Wrap a PKIMessage ASN.1 structure. + /// + /// PKI message. + public GeneralPkiMessage(PkiMessage pkiMessage) + { + this.m_pkiMessage = pkiMessage; + } + + /// + /// Create a PKIMessage from the passed in bytes. + /// + /// BER/DER encoding of the PKIMessage + public GeneralPkiMessage(byte[] encoding) + : this(ParseBytes(encoding)) + { + } + + public virtual PkiHeader Header => m_pkiMessage.Header; + + public virtual PkiBody Body => m_pkiMessage.Body; + + /// + /// Return true if this message has protection bits on it. A return value of true + /// indicates the message can be used to construct a ProtectedPKIMessage. + /// + public virtual bool HasProtection => m_pkiMessage.Protection != null; + + public virtual PkiMessage ToAsn1Structure() => m_pkiMessage; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/GeneralPkiMessage.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/GeneralPkiMessage.cs.meta new file mode 100644 index 000000000..3d4340eb7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/GeneralPkiMessage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed5a9dc6dafd3254d89c31fd2f933dbf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/ProtectedPkiMessage.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/ProtectedPkiMessage.cs new file mode 100644 index 000000000..96a8091fa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/ProtectedPkiMessage.cs @@ -0,0 +1,141 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crmf; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cmp +{ + /// + /// Wrapper for a PKIMessage with protection attached to it. + /// + public class ProtectedPkiMessage + { + private readonly PkiMessage m_pkiMessage; + + /// + /// Wrap a general message. + /// + /// If the general message does not have protection. + /// The General message + public ProtectedPkiMessage(GeneralPkiMessage pkiMessage) + { + if (!pkiMessage.HasProtection) + throw new ArgumentException("GeneralPkiMessage not protected"); + + this.m_pkiMessage = pkiMessage.ToAsn1Structure(); + } + + // TODO[cmp] Make internal? (Has test that uses it) + /// + /// Wrap a PKI message. + /// + /// If the PKI message does not have protection. + /// The PKI message + public ProtectedPkiMessage(PkiMessage pkiMessage) + { + if (null == pkiMessage.Header.ProtectionAlg) + throw new ArgumentException("PkiMessage not protected"); + + this.m_pkiMessage = pkiMessage; + } + + /// Message header + public virtual PkiHeader Header => m_pkiMessage.Header; + + /// Message body + public virtual PkiBody Body => m_pkiMessage.Body; + + /// + /// Return the underlying ASN.1 structure contained in this object. + /// + /// PkiMessage structure + public virtual PkiMessage ToAsn1Message() => m_pkiMessage; + + /// + /// Determine whether the message is protected by a password based MAC. Use verify(PKMACBuilder, char[]) + /// to verify the message if this method returns true. + /// + /// true if protection MAC PBE based, false otherwise. + public virtual bool HasPasswordBasedMacProtected + { + get { return CmpObjectIdentifiers.passwordBasedMac.Equals(Header.ProtectionAlg.Algorithm); } + } + + /// + /// Return the extra certificates associated with this message. + /// + /// an array of extra certificates, zero length if none present. + public virtual X509Certificate[] GetCertificates() + { + CmpCertificate[] certs = m_pkiMessage.GetExtraCerts(); + if (null == certs) + return new X509Certificate[0]; + + X509Certificate[] result = new X509Certificate[certs.Length]; + for (int t = 0; t < certs.Length; t++) + { + result[t] = new X509Certificate(certs[t].X509v3PKCert); + } + return result; + } + + /// + /// Verify a message with a public key based signature attached. + /// + /// a factory of signature verifiers. + /// true if the provider is able to create a verifier that validates the signature, false otherwise. + public virtual bool Verify(IVerifierFactory verifierFactory) + { + IStreamCalculator streamCalculator = verifierFactory.CreateCalculator(); + + IVerifier result = Process(streamCalculator); + + return result.IsVerified(m_pkiMessage.Protection.GetBytes()); + } + + /// + /// Verify a message with password based MAC protection. + /// + /// MAC builder that can be used to construct the appropriate MacCalculator + /// the MAC password + /// true if the passed in password and MAC builder verify the message, false otherwise. + /// if algorithm not MAC based, or an exception is thrown verifying the MAC. + public virtual bool Verify(PKMacBuilder pkMacBuilder, char[] password) + { + if (!CmpObjectIdentifiers.passwordBasedMac.Equals(m_pkiMessage.Header.ProtectionAlg.Algorithm)) + throw new InvalidOperationException("protection algorithm is not mac based"); + + PbmParameter parameter = PbmParameter.GetInstance(m_pkiMessage.Header.ProtectionAlg.Parameters); + + pkMacBuilder.SetParameters(parameter); + + IBlockResult result = Process(pkMacBuilder.Build(password).CreateCalculator()); + + return Arrays.ConstantTimeAreEqual(result.Collect(), m_pkiMessage.Protection.GetBytes()); + } + + private TResult Process(IStreamCalculator streamCalculator) + { + Asn1EncodableVector avec = new Asn1EncodableVector(); + avec.Add(m_pkiMessage.Header); + avec.Add(m_pkiMessage.Body); + byte[] enc = new DerSequence(avec).GetDerEncoded(); + + using (var stream = streamCalculator.Stream) + { + stream.Write(enc, 0, enc.Length); + } + + return streamCalculator.GetResult(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/ProtectedPkiMessage.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/ProtectedPkiMessage.cs.meta new file mode 100644 index 000000000..3ec0d2e55 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/ProtectedPkiMessage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6288a4eaf3dd8274fb93f532c1ed08ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/ProtectedPkiMessageBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/ProtectedPkiMessageBuilder.cs new file mode 100644 index 000000000..db86f1eec --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/ProtectedPkiMessageBuilder.cs @@ -0,0 +1,161 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cmp +{ + public sealed class ProtectedPkiMessageBuilder + { + private readonly PkiHeaderBuilder m_hdrBuilder; + private PkiBody body; + private readonly List generalInfos = new List(); + private readonly List extraCerts = new List(); + + public ProtectedPkiMessageBuilder(GeneralName sender, GeneralName recipient) + : this(PkiHeader.CMP_2000, sender, recipient) + { + } + + public ProtectedPkiMessageBuilder(int pvno, GeneralName sender, GeneralName recipient) + { + m_hdrBuilder = new PkiHeaderBuilder(pvno, sender, recipient); + } + + public ProtectedPkiMessageBuilder SetTransactionId(byte[] tid) + { + m_hdrBuilder.SetTransactionID(tid); + return this; + } + + public ProtectedPkiMessageBuilder SetFreeText(PkiFreeText freeText) + { + m_hdrBuilder.SetFreeText(freeText); + return this; + } + + public ProtectedPkiMessageBuilder AddGeneralInfo(InfoTypeAndValue genInfo) + { + generalInfos.Add(genInfo); + return this; + } + + public ProtectedPkiMessageBuilder SetMessageTime(DateTime time) + { + m_hdrBuilder.SetMessageTime(new Asn1GeneralizedTime(time)); + return this; + } + + public ProtectedPkiMessageBuilder SetMessageTime(Asn1GeneralizedTime generalizedTime) + { + m_hdrBuilder.SetMessageTime(generalizedTime); + return this; + } + + public ProtectedPkiMessageBuilder SetRecipKID(byte[] id) + { + m_hdrBuilder.SetRecipKID(id); + return this; + } + + public ProtectedPkiMessageBuilder SetRecipNonce(byte[] nonce) + { + m_hdrBuilder.SetRecipNonce(nonce); + return this; + } + + public ProtectedPkiMessageBuilder SetSenderKID(byte[] id) + { + m_hdrBuilder.SetSenderKID(id); + return this; + } + + public ProtectedPkiMessageBuilder SetSenderNonce(byte[] nonce) + { + m_hdrBuilder.SetSenderNonce(nonce); + return this; + } + + public ProtectedPkiMessageBuilder SetBody(PkiBody body) + { + this.body = body; + return this; + } + + public ProtectedPkiMessageBuilder AddCmpCertificate(X509Certificate certificate) + { + extraCerts.Add(certificate); + return this; + } + + public ProtectedPkiMessage Build(ISignatureFactory signatureFactory) + { + if (null == body) + throw new InvalidOperationException("body must be set before building"); + + IStreamCalculator calculator = signatureFactory.CreateCalculator(); + + if (!(signatureFactory.AlgorithmDetails is AlgorithmIdentifier algorithmDetails)) + throw new ArgumentException("AlgorithmDetails is not AlgorithmIdentifier"); + + FinalizeHeader(algorithmDetails); + PkiHeader header = m_hdrBuilder.Build(); + DerBitString protection = new DerBitString(CalculateSignature(calculator, header, body)); + return FinalizeMessage(header, protection); + } + + public ProtectedPkiMessage Build(IMacFactory macFactory) + { + if (null == body) + throw new InvalidOperationException("body must be set before building"); + + IStreamCalculator calculator = macFactory.CreateCalculator(); + + if (!(macFactory.AlgorithmDetails is AlgorithmIdentifier algorithmDetails)) + throw new ArgumentException("AlgorithmDetails is not AlgorithmIdentifier"); + + FinalizeHeader(algorithmDetails); + PkiHeader header = m_hdrBuilder.Build(); + DerBitString protection = new DerBitString(CalculateSignature(calculator, header, body)); + return FinalizeMessage(header, protection); + } + + private void FinalizeHeader(AlgorithmIdentifier algorithmIdentifier) + { + m_hdrBuilder.SetProtectionAlg(algorithmIdentifier); + if (generalInfos.Count > 0) + { + m_hdrBuilder.SetGeneralInfo(generalInfos.ToArray()); + } + } + + private ProtectedPkiMessage FinalizeMessage(PkiHeader header, DerBitString protection) + { + if (extraCerts.Count < 1) + return new ProtectedPkiMessage(new PkiMessage(header, body, protection)); + + CmpCertificate[] cmpCertificates = new CmpCertificate[extraCerts.Count]; + for (int i = 0; i < cmpCertificates.Length; i++) + { + cmpCertificates[i] = new CmpCertificate(extraCerts[i].CertificateStructure); + } + + return new ProtectedPkiMessage(new PkiMessage(header, body, protection, cmpCertificates)); + } + + private byte[] CalculateSignature(IStreamCalculator signer, PkiHeader header, PkiBody body) + { + new DerSequence(header, body).EncodeTo(signer.Stream); + return signer.GetResult().Collect(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/ProtectedPkiMessageBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/ProtectedPkiMessageBuilder.cs.meta new file mode 100644 index 000000000..390d2ed1b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/ProtectedPkiMessageBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 02044adf55171f74f8ba47909d15c277 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/RevocationDetails.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/RevocationDetails.cs new file mode 100644 index 000000000..690558b0e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/RevocationDetails.cs @@ -0,0 +1,28 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cmp +{ + public struct RevocationDetails + { + private readonly RevDetails m_revDetails; + + public RevocationDetails(RevDetails revDetails) + { + m_revDetails = revDetails; + } + + public X509Name Subject => m_revDetails.CertDetails.Subject; + + public X509Name Issuer => m_revDetails.CertDetails.Issuer; + + public BigInteger SerialNumber => m_revDetails.CertDetails.SerialNumber.Value; + + public RevDetails ToASN1Structure() => m_revDetails; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/RevocationDetails.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/RevocationDetails.cs.meta new file mode 100644 index 000000000..9b3c413ee --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/RevocationDetails.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0720348074c92e846ad33801abe028a5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/RevocationDetailsBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/RevocationDetailsBuilder.cs new file mode 100644 index 000000000..618a00cef --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/RevocationDetailsBuilder.cs @@ -0,0 +1,62 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cmp +{ + public sealed class RevocationDetailsBuilder + { + private readonly CertTemplateBuilder m_templateBuilder = new CertTemplateBuilder(); + + public RevocationDetailsBuilder SetPublicKey(SubjectPublicKeyInfo publicKey) + { + if (publicKey != null) + { + m_templateBuilder.SetPublicKey(publicKey); + } + + return this; + } + + public RevocationDetailsBuilder SetIssuer(X509Name issuer) + { + if (issuer != null) + { + m_templateBuilder.SetIssuer(issuer); + } + + return this; + } + + public RevocationDetailsBuilder SetSerialNumber(BigInteger serialNumber) + { + if (serialNumber != null) + { + m_templateBuilder.SetSerialNumber(new DerInteger(serialNumber)); + } + + return this; + } + + public RevocationDetailsBuilder SetSubject(X509Name subject) + { + if (subject != null) + { + m_templateBuilder.SetSubject(subject); + } + + return this; + } + + public RevocationDetails Build() + { + return new RevocationDetails(new RevDetails(m_templateBuilder.Build())); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/RevocationDetailsBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/RevocationDetailsBuilder.cs.meta new file mode 100644 index 000000000..89547ea5a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cmp/RevocationDetailsBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2587caf391202c04e8316616ff922461 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms.meta new file mode 100644 index 000000000..a3ed2cba4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f144c257e1a71424f951705ca53cd339 +folderAsset: yes +timeCreated: 1547039641 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/BaseDigestCalculator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/BaseDigestCalculator.cs new file mode 100644 index 000000000..8ef4f375f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/BaseDigestCalculator.cs @@ -0,0 +1,27 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + internal class BaseDigestCalculator + : IDigestCalculator + { + private readonly byte[] digest; + + internal BaseDigestCalculator( + byte[] digest) + { + this.digest = digest; + } + + public byte[] GetDigest() + { + return Arrays.Clone(digest); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/BaseDigestCalculator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/BaseDigestCalculator.cs.meta new file mode 100644 index 000000000..083540b41 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/BaseDigestCalculator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 52a4d50de29f4804b93120269066e5c2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAttributeTableGenerationException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAttributeTableGenerationException.cs new file mode 100644 index 000000000..9918f74e2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAttributeTableGenerationException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + [Serializable] + public class CmsAttributeTableGenerationException + : CmsException + { + public CmsAttributeTableGenerationException() + : base() + { + } + + public CmsAttributeTableGenerationException(string message) + : base(message) + { + } + + public CmsAttributeTableGenerationException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected CmsAttributeTableGenerationException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAttributeTableGenerationException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAttributeTableGenerationException.cs.meta new file mode 100644 index 000000000..f8173df76 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAttributeTableGenerationException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 95031575dd3091648956fd5b88a549f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAttributeTableGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAttributeTableGenerator.cs new file mode 100644 index 000000000..888bee533 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAttributeTableGenerator.cs @@ -0,0 +1,28 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /// + /// The 'Signature' parameter is only available when generating unsigned attributes. + /// + public enum CmsAttributeTableParameter + { +// const string ContentType = "contentType"; +// const string Digest = "digest"; +// const string Signature = "encryptedDigest"; +// const string DigestAlgorithmIdentifier = "digestAlgID"; + + ContentType, Digest, Signature, DigestAlgorithmIdentifier + } + + public interface CmsAttributeTableGenerator + { + AttributeTable GetAttributes(IDictionary parameters); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAttributeTableGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAttributeTableGenerator.cs.meta new file mode 100644 index 000000000..e220f7ddf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAttributeTableGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d18c7fc2e70c2c4dbabd5bf8cadd733 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthEnvelopedData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthEnvelopedData.cs new file mode 100644 index 000000000..97b4127ab --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthEnvelopedData.cs @@ -0,0 +1,115 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * containing class for an CMS AuthEnveloped Data object + */ + internal class CmsAuthEnvelopedData + { + internal RecipientInformationStore recipientInfoStore; + internal ContentInfo contentInfo; + + private OriginatorInfo originator; + private AlgorithmIdentifier authEncAlg; + private Asn1Set authAttrs; + private byte[] mac; + private Asn1Set unauthAttrs; + + public CmsAuthEnvelopedData( + byte[] authEnvData) + : this(CmsUtilities.ReadContentInfo(authEnvData)) + { + } + + public CmsAuthEnvelopedData( + Stream authEnvData) + : this(CmsUtilities.ReadContentInfo(authEnvData)) + { + } + + public CmsAuthEnvelopedData( + ContentInfo contentInfo) + { + this.contentInfo = contentInfo; + + AuthEnvelopedData authEnvData = AuthEnvelopedData.GetInstance(contentInfo.Content); + + this.originator = authEnvData.OriginatorInfo; + + // + // read the recipients + // + Asn1Set recipientInfos = authEnvData.RecipientInfos; + + // + // read the auth-encrypted content info + // + EncryptedContentInfo authEncInfo = authEnvData.AuthEncryptedContentInfo; + this.authEncAlg = authEncInfo.ContentEncryptionAlgorithm; + CmsSecureReadable secureReadable = new AuthEnvelopedSecureReadable(this); + + // + // build the RecipientInformationStore + // + this.recipientInfoStore = CmsEnvelopedHelper.BuildRecipientInformationStore( + recipientInfos, secureReadable); + + // FIXME These need to be passed to the AEAD cipher as AAD (Additional Authenticated Data) + this.authAttrs = authEnvData.AuthAttrs; + this.mac = authEnvData.Mac.GetOctets(); + this.unauthAttrs = authEnvData.UnauthAttrs; + } + + private class AuthEnvelopedSecureReadable : CmsSecureReadable + { + private readonly CmsAuthEnvelopedData parent; + + internal AuthEnvelopedSecureReadable(CmsAuthEnvelopedData parent) + { + this.parent = parent; + } + + public AlgorithmIdentifier Algorithm + { + get { return parent.authEncAlg; } + } + + public object CryptoObject + { + get { return null; } + } + + public CmsReadable GetReadable(KeyParameter key) + { + // TODO Create AEAD cipher instance to decrypt and calculate tag ( MAC) + throw new CmsException("AuthEnveloped data decryption not yet implemented"); + +// RFC 5084 ASN.1 Module +// -- Parameters for AlgorithmIdentifier +// +// CCMParameters ::= SEQUENCE { +// aes-nonce OCTET STRING (SIZE(7..13)), +// aes-ICVlen AES-CCM-ICVlen DEFAULT 12 } +// +// AES-CCM-ICVlen ::= INTEGER (4 | 6 | 8 | 10 | 12 | 14 | 16) +// +// GCMParameters ::= SEQUENCE { +// aes-nonce OCTET STRING, -- recommended size is 12 octets +// aes-ICVlen AES-GCM-ICVlen DEFAULT 12 } +// +// AES-GCM-ICVlen ::= INTEGER (12 | 13 | 14 | 15 | 16) + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthEnvelopedData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthEnvelopedData.cs.meta new file mode 100644 index 000000000..532a77679 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthEnvelopedData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7e3eb7a43c43e7c42aa4f8d9bd6ed4cd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthEnvelopedGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthEnvelopedGenerator.cs new file mode 100644 index 000000000..1118ab175 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthEnvelopedGenerator.cs @@ -0,0 +1,20 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + internal class CmsAuthEnvelopedGenerator + { + public static readonly string Aes128Ccm = NistObjectIdentifiers.IdAes128Ccm.Id; + public static readonly string Aes192Ccm = NistObjectIdentifiers.IdAes192Ccm.Id; + public static readonly string Aes256Ccm = NistObjectIdentifiers.IdAes256Ccm.Id; + public static readonly string Aes128Gcm = NistObjectIdentifiers.IdAes128Gcm.Id; + public static readonly string Aes192Gcm = NistObjectIdentifiers.IdAes192Gcm.Id; + public static readonly string Aes256Gcm = NistObjectIdentifiers.IdAes256Gcm.Id; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthEnvelopedGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthEnvelopedGenerator.cs.meta new file mode 100644 index 000000000..af7cbbff1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthEnvelopedGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f95ee1f852b380e43ba55cdb0bad8129 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedData.cs new file mode 100644 index 000000000..3e0bacaad --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedData.cs @@ -0,0 +1,140 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * containing class for an CMS Authenticated Data object + */ + public class CmsAuthenticatedData + { + internal RecipientInformationStore recipientInfoStore; + internal ContentInfo contentInfo; + + private AlgorithmIdentifier macAlg; + private Asn1Set authAttrs; + private Asn1Set unauthAttrs; + private byte[] mac; + + public CmsAuthenticatedData( + byte[] authData) + : this(CmsUtilities.ReadContentInfo(authData)) + { + } + + public CmsAuthenticatedData( + Stream authData) + : this(CmsUtilities.ReadContentInfo(authData)) + { + } + + public CmsAuthenticatedData( + ContentInfo contentInfo) + { + this.contentInfo = contentInfo; + + AuthenticatedData authData = AuthenticatedData.GetInstance(contentInfo.Content); + + // + // read the recipients + // + Asn1Set recipientInfos = authData.RecipientInfos; + + this.macAlg = authData.MacAlgorithm; + + // + // read the authenticated content info + // + ContentInfo encInfo = authData.EncapsulatedContentInfo; + CmsReadable readable = new CmsProcessableByteArray( + Asn1OctetString.GetInstance(encInfo.Content).GetOctets()); + CmsSecureReadable secureReadable = new CmsEnvelopedHelper.CmsAuthenticatedSecureReadable( + this.macAlg, readable); + + // + // build the RecipientInformationStore + // + this.recipientInfoStore = CmsEnvelopedHelper.BuildRecipientInformationStore( + recipientInfos, secureReadable); + + this.authAttrs = authData.AuthAttrs; + this.mac = authData.Mac.GetOctets(); + this.unauthAttrs = authData.UnauthAttrs; + } + + public byte[] GetMac() + { + return Arrays.Clone(mac); + } + + public AlgorithmIdentifier MacAlgorithmID + { + get { return macAlg; } + } + + /** + * return the object identifier for the content MAC algorithm. + */ + public string MacAlgOid + { + get { return macAlg.Algorithm.Id; } + } + + /** + * return a store of the intended recipients for this message + */ + public RecipientInformationStore GetRecipientInfos() + { + return recipientInfoStore; + } + + /** + * return the ContentInfo + */ + public ContentInfo ContentInfo + { + get { return contentInfo; } + } + + /** + * return a table of the digested attributes indexed by + * the OID of the attribute. + */ + public Asn1.Cms.AttributeTable GetAuthAttrs() + { + if (authAttrs == null) + return null; + + return new Asn1.Cms.AttributeTable(authAttrs); + } + + /** + * return a table of the undigested attributes indexed by + * the OID of the attribute. + */ + public Asn1.Cms.AttributeTable GetUnauthAttrs() + { + if (unauthAttrs == null) + return null; + + return new Asn1.Cms.AttributeTable(unauthAttrs); + } + + /** + * return the ASN.1 encoded representation of this object. + */ + public byte[] GetEncoded() + { + return contentInfo.GetEncoded(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedData.cs.meta new file mode 100644 index 000000000..9f6aa5f66 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e4e8925a09aa9741ad59f650cda261e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedDataGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedDataGenerator.cs new file mode 100644 index 000000000..089032216 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedDataGenerator.cs @@ -0,0 +1,150 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * General class for generating a CMS authenticated-data message. + * + * A simple example of usage. + * + *
+	 *      CMSAuthenticatedDataGenerator  fact = new CMSAuthenticatedDataGenerator();
+	 *
+	 *      fact.addKeyTransRecipient(cert);
+	 *
+	 *      CMSAuthenticatedData         data = fact.generate(content, algorithm, "BC");
+	 * 
+ */ + public class CmsAuthenticatedDataGenerator + : CmsAuthenticatedGenerator + { + public CmsAuthenticatedDataGenerator() + { + } + + /// Constructor allowing specific source of randomness + /// Instance of SecureRandom to use. + public CmsAuthenticatedDataGenerator(SecureRandom random) + : base(random) + { + } + + /** + * generate an enveloped object that contains an CMS Enveloped Data + * object using the given provider and the passed in key generator. + */ + private CmsAuthenticatedData Generate( + CmsProcessable content, + string macOid, + CipherKeyGenerator keyGen) + { + AlgorithmIdentifier macAlgId; + KeyParameter encKey; + Asn1OctetString encContent; + Asn1OctetString macResult; + + try + { + // FIXME Will this work for macs? + byte[] encKeyBytes = keyGen.GenerateKey(); + encKey = ParameterUtilities.CreateKeyParameter(macOid, encKeyBytes); + + Asn1Encodable asn1Params = GenerateAsn1Parameters(macOid, encKeyBytes); + + macAlgId = GetAlgorithmIdentifier(macOid, encKey, asn1Params, out var cipherParameters); + + IMac mac = MacUtilities.GetMac(macOid); + // TODO Confirm no ParametersWithRandom needed + // FIXME Only passing key at the moment +// mac.Init(cipherParameters); + mac.Init(encKey); + + var bOut = new MemoryStream(); + using (var mOut = new TeeOutputStream(bOut, new MacSink(mac))) + { + content.Write(mOut); + } + + encContent = new BerOctetString(bOut.ToArray()); + + byte[] macOctets = MacUtilities.DoFinal(mac); + macResult = new DerOctetString(macOctets); + } + catch (SecurityUtilityException e) + { + throw new CmsException("couldn't create cipher.", e); + } + catch (InvalidKeyException e) + { + throw new CmsException("key invalid in message.", e); + } + catch (IOException e) + { + throw new CmsException("exception decoding algorithm parameters.", e); + } + + var recipientInfos = new Asn1EncodableVector(); + + foreach (RecipientInfoGenerator rig in recipientInfoGenerators) + { + try + { + recipientInfos.Add(rig.Generate(encKey, m_random)); + } + catch (InvalidKeyException e) + { + throw new CmsException("key inappropriate for algorithm.", e); + } + catch (GeneralSecurityException e) + { + throw new CmsException("error making encrypted content.", e); + } + } + + var eci = new ContentInfo(CmsObjectIdentifiers.Data, encContent); + + var contentInfo = new ContentInfo( + CmsObjectIdentifiers.AuthenticatedData, + new AuthenticatedData(null, new DerSet(recipientInfos), macAlgId, null, eci, null, macResult, null)); + + return new CmsAuthenticatedData(contentInfo); + } + + /** + * generate an authenticated object that contains an CMS Authenticated Data object + */ + public CmsAuthenticatedData Generate( + CmsProcessable content, + string encryptionOid) + { + try + { + // FIXME Will this work for macs? + CipherKeyGenerator keyGen = GeneratorUtilities.GetKeyGenerator(encryptionOid); + + keyGen.Init(new KeyGenerationParameters(m_random, keyGen.DefaultStrength)); + + return Generate(content, encryptionOid, keyGen); + } + catch (SecurityUtilityException e) + { + throw new CmsException("can't find key generation algorithm.", e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedDataGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedDataGenerator.cs.meta new file mode 100644 index 000000000..b9390d765 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedDataGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a8b41fa9a2f17b45ba2fd190514a66c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedDataParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedDataParser.cs new file mode 100644 index 000000000..f2e4ad176 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedDataParser.cs @@ -0,0 +1,217 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * Parsing class for an CMS Authenticated Data object from an input stream. + *

+ * Note: that because we are in a streaming mode only one recipient can be tried and it is important + * that the methods on the parser are called in the appropriate order. + *

+ *

+ * Example of use - assuming the first recipient matches the private key we have. + *

+	*      CMSAuthenticatedDataParser     ad = new CMSAuthenticatedDataParser(inputStream);
+	*
+	*      RecipientInformationStore  recipients = ad.getRecipientInfos();
+	*
+	*      Collection  c = recipients.getRecipients();
+	*      Iterator    it = c.iterator();
+	*
+	*      if (it.hasNext())
+	*      {
+	*          RecipientInformation   recipient = (RecipientInformation)it.next();
+	*
+	*          CMSTypedStream recData = recipient.getContentStream(privateKey, "BC");
+	*
+	*          processDataStream(recData.getContentStream());
+	*
+	*          if (!Arrays.equals(ad.getMac(), recipient.getMac())
+	*          {
+	*              System.err.println("Data corrupted!!!!");
+	*          }
+	*      }
+	*  
+ * Note: this class does not introduce buffering - if you are processing large files you should create + * the parser with: + *
+	*          CMSAuthenticatedDataParser     ep = new CMSAuthenticatedDataParser(new BufferedInputStream(inputStream, bufSize));
+	*  
+ * where bufSize is a suitably large buffer size. + *

+ */ + public class CmsAuthenticatedDataParser + : CmsContentInfoParser + { + internal RecipientInformationStore _recipientInfoStore; + internal AuthenticatedDataParser authData; + + private AlgorithmIdentifier macAlg; + private byte[] mac; + private Asn1.Cms.AttributeTable authAttrs; + private Asn1.Cms.AttributeTable unauthAttrs; + + private bool authAttrNotRead; + private bool unauthAttrNotRead; + + public CmsAuthenticatedDataParser( + byte[] envelopedData) + : this(new MemoryStream(envelopedData, false)) + { + } + + public CmsAuthenticatedDataParser( + Stream envelopedData) + : base(envelopedData) + { + this.authAttrNotRead = true; + this.authData = new AuthenticatedDataParser( + (Asn1SequenceParser)contentInfo.GetContent(Asn1Tags.Sequence)); + + // TODO Validate version? + //DerInteger version = this.authData.getVersion(); + + // + // read the recipients + // + Asn1Set recipientInfos = Asn1Set.GetInstance(authData.GetRecipientInfos().ToAsn1Object()); + + this.macAlg = authData.GetMacAlgorithm(); + + // + // read the authenticated content info + // + ContentInfoParser data = authData.GetEnapsulatedContentInfo(); + CmsReadable readable = new CmsProcessableInputStream( + ((Asn1OctetStringParser)data.GetContent(Asn1Tags.OctetString)).GetOctetStream()); + CmsSecureReadable secureReadable = new CmsEnvelopedHelper.CmsAuthenticatedSecureReadable( + this.macAlg, readable); + + // + // build the RecipientInformationStore + // + this._recipientInfoStore = CmsEnvelopedHelper.BuildRecipientInformationStore( + recipientInfos, secureReadable); + } + + public AlgorithmIdentifier MacAlgorithmID + { + get { return macAlg; } + } + + /** + * return the object identifier for the mac algorithm. + */ + public string MacAlgOid + { + get { return macAlg.Algorithm.Id; } + } + + + /** + * return the ASN.1 encoded encryption algorithm parameters, or null if + * there aren't any. + */ + public Asn1Object MacAlgParams + { + get + { + Asn1Encodable ae = macAlg.Parameters; + + return ae == null ? null : ae.ToAsn1Object(); + } + } + + /** + * return a store of the intended recipients for this message + */ + public RecipientInformationStore GetRecipientInfos() + { + return _recipientInfoStore; + } + + public byte[] GetMac() + { + if (mac == null) + { + GetAuthAttrs(); + mac = authData.GetMac().GetOctets(); + } + return Arrays.Clone(mac); + } + + /** + * return a table of the unauthenticated attributes indexed by + * the OID of the attribute. + * @exception java.io.IOException + */ + public Asn1.Cms.AttributeTable GetAuthAttrs() + { + if (authAttrs == null && authAttrNotRead) + { + Asn1SetParser s = authData.GetAuthAttrs(); + + authAttrNotRead = false; + + if (s != null) + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + IAsn1Convertible o; + while ((o = s.ReadObject()) != null) + { + Asn1SequenceParser seq = (Asn1SequenceParser)o; + + v.Add(seq.ToAsn1Object()); + } + + authAttrs = new Asn1.Cms.AttributeTable(new DerSet(v)); + } + } + + return authAttrs; + } + + /** + * return a table of the unauthenticated attributes indexed by + * the OID of the attribute. + * @exception java.io.IOException + */ + public Asn1.Cms.AttributeTable GetUnauthAttrs() + { + if (unauthAttrs == null && unauthAttrNotRead) + { + Asn1SetParser s = authData.GetUnauthAttrs(); + + unauthAttrNotRead = false; + + if (s != null) + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + IAsn1Convertible o; + while ((o = s.ReadObject()) != null) + { + Asn1SequenceParser seq = (Asn1SequenceParser)o; + + v.Add(seq.ToAsn1Object()); + } + + unauthAttrs = new Asn1.Cms.AttributeTable(new DerSet(v)); + } + } + + return unauthAttrs; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedDataParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedDataParser.cs.meta new file mode 100644 index 000000000..d46dd7009 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedDataParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08feb4ccaf441894b9a5692041fb9168 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedDataStreamGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedDataStreamGenerator.cs new file mode 100644 index 000000000..16eb12029 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedDataStreamGenerator.cs @@ -0,0 +1,278 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * General class for generating a CMS authenticated-data message stream. + *

+ * A simple example of usage. + *

+	*      CMSAuthenticatedDataStreamGenerator edGen = new CMSAuthenticatedDataStreamGenerator();
+	*
+	*      edGen.addKeyTransRecipient(cert);
+	*
+	*      ByteArrayOutputStream  bOut = new ByteArrayOutputStream();
+	*
+	*      OutputStream out = edGen.open(
+	*                              bOut, CMSAuthenticatedDataGenerator.AES128_CBC, "BC");*
+	*      out.write(data);
+	*
+	*      out.close();
+	* 
+ *

+ */ + public class CmsAuthenticatedDataStreamGenerator + : CmsAuthenticatedGenerator + { + // TODO Add support +// private object _originatorInfo = null; +// private object _unprotectedAttributes = null; + private int _bufferSize; + private bool _berEncodeRecipientSet; + + public CmsAuthenticatedDataStreamGenerator() + { + } + + /// Constructor allowing specific source of randomness + /// Instance of SecureRandom to use. + public CmsAuthenticatedDataStreamGenerator(SecureRandom random) + : base(random) + { + } + + /** + * Set the underlying string size for encapsulated data + * + * @param bufferSize length of octet strings to buffer the data. + */ + public void SetBufferSize( + int bufferSize) + { + _bufferSize = bufferSize; + } + + /** + * Use a BER Set to store the recipient information + */ + public void SetBerEncodeRecipients( + bool berEncodeRecipientSet) + { + _berEncodeRecipientSet = berEncodeRecipientSet; + } + + /** + * generate an enveloped object that contains an CMS Enveloped Data + * object using the given provider and the passed in key generator. + * @throws java.io.IOException + */ + private Stream Open( + Stream outStr, + string macOid, + CipherKeyGenerator keyGen) + { + // FIXME Will this work for macs? + byte[] encKeyBytes = keyGen.GenerateKey(); + KeyParameter encKey = ParameterUtilities.CreateKeyParameter(macOid, encKeyBytes); + + Asn1Encodable asn1Params = GenerateAsn1Parameters(macOid, encKeyBytes); + + ICipherParameters cipherParameters; + AlgorithmIdentifier macAlgId = GetAlgorithmIdentifier( + macOid, encKey, asn1Params, out cipherParameters); + + Asn1EncodableVector recipientInfos = new Asn1EncodableVector(); + + foreach (RecipientInfoGenerator rig in recipientInfoGenerators) + { + try + { + recipientInfos.Add(rig.Generate(encKey, m_random)); + } + catch (InvalidKeyException e) + { + throw new CmsException("key inappropriate for algorithm.", e); + } + catch (GeneralSecurityException e) + { + throw new CmsException("error making encrypted content.", e); + } + } + + // FIXME Only passing key at the moment +// return Open(outStr, macAlgId, cipherParameters, recipientInfos); + return Open(outStr, macAlgId, encKey, recipientInfos); + } + + protected Stream Open( + Stream outStr, + AlgorithmIdentifier macAlgId, + ICipherParameters cipherParameters, + Asn1EncodableVector recipientInfos) + { + try + { + // + // ContentInfo + // + BerSequenceGenerator cGen = new BerSequenceGenerator(outStr); + + cGen.AddObject(CmsObjectIdentifiers.AuthenticatedData); + + // + // Authenticated Data + // + BerSequenceGenerator authGen = new BerSequenceGenerator( + cGen.GetRawOutputStream(), 0, true); + + authGen.AddObject(new DerInteger(AuthenticatedData.CalculateVersion(null))); + + Stream authRaw = authGen.GetRawOutputStream(); + Asn1Generator recipGen = _berEncodeRecipientSet + ? (Asn1Generator) new BerSetGenerator(authRaw) + : new DerSetGenerator(authRaw); + + foreach (Asn1Encodable ae in recipientInfos) + { + recipGen.AddObject(ae); + } + + recipGen.Close(); + + authGen.AddObject(macAlgId); + + BerSequenceGenerator eiGen = new BerSequenceGenerator(authRaw); + eiGen.AddObject(CmsObjectIdentifiers.Data); + + Stream octetOutputStream = CmsUtilities.CreateBerOctetOutputStream( + eiGen.GetRawOutputStream(), 0, true, _bufferSize); + + IMac mac = MacUtilities.GetMac(macAlgId.Algorithm); + // TODO Confirm no ParametersWithRandom needed + mac.Init(cipherParameters); + Stream mOut = new TeeOutputStream(octetOutputStream, new MacSink(mac)); + + return new CmsAuthenticatedDataOutputStream(mOut, mac, cGen, authGen, eiGen); + } + catch (SecurityUtilityException e) + { + throw new CmsException("couldn't create cipher.", e); + } + catch (InvalidKeyException e) + { + throw new CmsException("key invalid in message.", e); + } + catch (IOException e) + { + throw new CmsException("exception decoding algorithm parameters.", e); + } + } + + /** + * generate an enveloped object that contains an CMS Enveloped Data object + */ + public Stream Open( + Stream outStr, + string encryptionOid) + { + CipherKeyGenerator keyGen = GeneratorUtilities.GetKeyGenerator(encryptionOid); + + keyGen.Init(new KeyGenerationParameters(m_random, keyGen.DefaultStrength)); + + return Open(outStr, encryptionOid, keyGen); + } + + /** + * generate an enveloped object that contains an CMS Enveloped Data object + */ + public Stream Open( + Stream outStr, + string encryptionOid, + int keySize) + { + CipherKeyGenerator keyGen = GeneratorUtilities.GetKeyGenerator(encryptionOid); + + keyGen.Init(new KeyGenerationParameters(m_random, keySize)); + + return Open(outStr, encryptionOid, keyGen); + } + + private class CmsAuthenticatedDataOutputStream + : BaseOutputStream + { + private readonly Stream macStream; + private readonly IMac mac; + private readonly BerSequenceGenerator cGen; + private readonly BerSequenceGenerator authGen; + private readonly BerSequenceGenerator eiGen; + + public CmsAuthenticatedDataOutputStream( + Stream macStream, + IMac mac, + BerSequenceGenerator cGen, + BerSequenceGenerator authGen, + BerSequenceGenerator eiGen) + { + this.macStream = macStream; + this.mac = mac; + this.cGen = cGen; + this.authGen = authGen; + this.eiGen = eiGen; + } + + public override void Write(byte[] buffer, int offset, int count) + { + macStream.Write(buffer, offset, count); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) + { + macStream.Write(buffer); + } +#endif + + public override void WriteByte(byte value) + { + macStream.WriteByte(value); + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + macStream.Dispose(); + + // TODO Parent context(s) should really be be closed explicitly + + eiGen.Close(); + + // [TODO] auth attributes go here + byte[] macOctets = MacUtilities.DoFinal(mac); + authGen.AddObject(new DerOctetString(macOctets)); + // [TODO] unauth attributes go here + + authGen.Close(); + cGen.Close(); + } + base.Dispose(disposing); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedDataStreamGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedDataStreamGenerator.cs.meta new file mode 100644 index 000000000..3bb3114c2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedDataStreamGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c74bee6672ed33d4484fbb4d444253e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedGenerator.cs new file mode 100644 index 000000000..2815e0d41 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedGenerator.cs @@ -0,0 +1,32 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Date; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + public class CmsAuthenticatedGenerator + : CmsEnvelopedGenerator + { + public CmsAuthenticatedGenerator() + { + } + + /// Constructor allowing specific source of randomness + /// Instance of SecureRandom to use. + public CmsAuthenticatedGenerator(SecureRandom random) + : base(random) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedGenerator.cs.meta new file mode 100644 index 000000000..5f0fa32cd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSAuthenticatedGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 37764ed0474059d4cb0346705d807def +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedData.cs new file mode 100644 index 000000000..9e6696c9b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedData.cs @@ -0,0 +1,110 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO.Compression; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * containing class for an CMS Compressed Data object + */ + public class CmsCompressedData + { + internal ContentInfo contentInfo; + + public CmsCompressedData( + byte[] compressedData) + : this(CmsUtilities.ReadContentInfo(compressedData)) + { + } + + public CmsCompressedData( + Stream compressedDataStream) + : this(CmsUtilities.ReadContentInfo(compressedDataStream)) + { + } + + public CmsCompressedData( + ContentInfo contentInfo) + { + this.contentInfo = contentInfo; + } + + /** + * Return the uncompressed content. + * + * @return the uncompressed content + * @throws CmsException if there is an exception uncompressing the data. + */ + public byte[] GetContent() + { + CompressedData comData = CompressedData.GetInstance(contentInfo.Content); + ContentInfo content = comData.EncapContentInfo; + + Asn1OctetString bytes = (Asn1OctetString) content.Content; + Stream zIn = ZLib.DecompressInput(bytes.GetOctetStream()); + + try + { + return CmsUtilities.StreamToByteArray(zIn); + } + catch (IOException e) + { + throw new CmsException("exception reading compressed stream.", e); + } + finally + { + zIn.Dispose(); + } + } + + /** + * Return the uncompressed content, throwing an exception if the data size + * is greater than the passed in limit. If the content is exceeded getCause() + * on the CMSException will contain a StreamOverflowException + * + * @param limit maximum number of bytes to read + * @return the content read + * @throws CMSException if there is an exception uncompressing the data. + */ + public byte[] GetContent(int limit) + { + CompressedData comData = CompressedData.GetInstance(contentInfo.Content); + ContentInfo content = comData.EncapContentInfo; + + Asn1OctetString bytes = (Asn1OctetString)content.Content; + Stream zIn = ZLib.DecompressInput(bytes.GetOctetStream()); + + try + { + return CmsUtilities.StreamToByteArray(zIn, limit); + } + catch (IOException e) + { + throw new CmsException("exception reading compressed stream.", e); + } + } + + /** + * return the ContentInfo + */ + public ContentInfo ContentInfo + { + get { return contentInfo; } + } + + /** + * return the ASN.1 encoded representation of this object. + */ + public byte[] GetEncoded() + { + return contentInfo.GetEncoded(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedData.cs.meta new file mode 100644 index 000000000..440d689e9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4cbc55acb9953154086972e91a119005 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedDataGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedDataGenerator.cs new file mode 100644 index 000000000..47cd011e1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedDataGenerator.cs @@ -0,0 +1,71 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * General class for generating a compressed CMS message. + *

+ * A simple example of usage.

+ *

+ *

+    *      CMSCompressedDataGenerator fact = new CMSCompressedDataGenerator();
+    *      CMSCompressedData data = fact.Generate(content, algorithm);
+    * 
+ *

+ */ + public class CmsCompressedDataGenerator + { + public static readonly string ZLib = CmsObjectIdentifiers.ZlibCompress.Id; + + public CmsCompressedDataGenerator() + { + } + + /** + * Generate an object that contains an CMS Compressed Data + */ + public CmsCompressedData Generate(CmsProcessable content, string compressionOid) + { + if (ZLib != compressionOid) + throw new ArgumentException("Unsupported compression algorithm: " + compressionOid, + nameof(compressionOid)); + + AlgorithmIdentifier comAlgId; + Asn1OctetString comOcts; + + try + { + MemoryStream bOut = new MemoryStream(); + + using (var zOut = Utilities.IO.Compression.ZLib.CompressOutput(bOut, -1)) + { + content.Write(zOut); + } + + comAlgId = new AlgorithmIdentifier(CmsObjectIdentifiers.ZlibCompress); + comOcts = new BerOctetString(bOut.ToArray()); + } + catch (IOException e) + { + throw new CmsException("exception encoding data.", e); + } + + ContentInfo comContent = new ContentInfo(CmsObjectIdentifiers.Data, comOcts); + ContentInfo contentInfo = new ContentInfo( + CmsObjectIdentifiers.CompressedData, + new CompressedData(comAlgId, comContent)); + + return new CmsCompressedData(contentInfo); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedDataGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedDataGenerator.cs.meta new file mode 100644 index 000000000..4ebd32f7d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedDataGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7769c99d12beb884b8c70fd13c920cbf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedDataParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedDataParser.cs new file mode 100644 index 000000000..280fda9c9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedDataParser.cs @@ -0,0 +1,61 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO.Compression; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * Class for reading a CMS Compressed Data stream. + *
+    *     CMSCompressedDataParser cp = new CMSCompressedDataParser(inputStream);
+    *
+    *     process(cp.GetContent().GetContentStream());
+    * 
+ * Note: this class does not introduce buffering - if you are processing large files you should create + * the parser with: + *
+    *      CMSCompressedDataParser     ep = new CMSCompressedDataParser(new BufferedInputStream(inputStream, bufSize));
+    *  
+ * where bufSize is a suitably large buffer size. + */ + public class CmsCompressedDataParser + : CmsContentInfoParser + { + public CmsCompressedDataParser( + byte[] compressedData) + : this(new MemoryStream(compressedData, false)) + { + } + + public CmsCompressedDataParser( + Stream compressedData) + : base(compressedData) + { + } + + public CmsTypedStream GetContent() + { + try + { + CompressedDataParser comData = new CompressedDataParser((Asn1SequenceParser)this.contentInfo.GetContent(Asn1Tags.Sequence)); + ContentInfoParser content = comData.GetEncapContentInfo(); + + Asn1OctetStringParser bytes = (Asn1OctetStringParser)content.GetContent(Asn1Tags.OctetString); + Stream zIn = ZLib.DecompressInput(bytes.GetOctetStream()); + + return new CmsTypedStream(content.ContentType.ToString(), zIn); + } + catch (IOException e) + { + throw new CmsException("IOException reading compressed content.", e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedDataParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedDataParser.cs.meta new file mode 100644 index 000000000..d1f5559d7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedDataParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 622eaf613f9bfed4bad33078ade6c789 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedDataStreamGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedDataStreamGenerator.cs new file mode 100644 index 000000000..f22359157 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedDataStreamGenerator.cs @@ -0,0 +1,154 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * General class for generating a compressed CMS message stream. + *

+ * A simple example of usage. + *

+ *
+	*      CMSCompressedDataStreamGenerator gen = new CMSCompressedDataStreamGenerator();
+	*
+	*      Stream cOut = gen.Open(outputStream, CMSCompressedDataStreamGenerator.ZLIB);
+	*
+	*      cOut.Write(data);
+	*
+	*      cOut.Close();
+	* 
+ */ + public class CmsCompressedDataStreamGenerator + { + public static readonly string ZLib = CmsObjectIdentifiers.ZlibCompress.Id; + + private int _bufferSize; + + /** + * base constructor + */ + public CmsCompressedDataStreamGenerator() + { + } + + /** + * Set the underlying string size for encapsulated data + * + * @param bufferSize length of octet strings to buffer the data. + */ + public void SetBufferSize(int bufferSize) + { + _bufferSize = bufferSize; + } + + public Stream Open(Stream outStream) + { + return Open(outStream, CmsObjectIdentifiers.Data.Id, ZLib); + } + + public Stream Open(Stream outStream, string compressionOid) + { + return Open(outStream, CmsObjectIdentifiers.Data.Id, compressionOid); + } + + public Stream Open(Stream outStream, string contentOid, string compressionOid) + { + if (ZLib != compressionOid) + throw new ArgumentException("Unsupported compression algorithm: " + compressionOid, + nameof(compressionOid)); + + BerSequenceGenerator sGen = new BerSequenceGenerator(outStream); + + sGen.AddObject(CmsObjectIdentifiers.CompressedData); + + // + // Compressed Data + // + BerSequenceGenerator cGen = new BerSequenceGenerator( + sGen.GetRawOutputStream(), 0, true); + + // CMSVersion + cGen.AddObject(new DerInteger(0)); + + // CompressionAlgorithmIdentifier + cGen.AddObject(new AlgorithmIdentifier(CmsObjectIdentifiers.ZlibCompress)); + + // + // Encapsulated ContentInfo + // + BerSequenceGenerator eiGen = new BerSequenceGenerator(cGen.GetRawOutputStream()); + + eiGen.AddObject(new DerObjectIdentifier(contentOid)); + + Stream octetStream = CmsUtilities.CreateBerOctetOutputStream( + eiGen.GetRawOutputStream(), 0, true, _bufferSize); + + return new CmsCompressedOutputStream( + Utilities.IO.Compression.ZLib.CompressOutput(octetStream, -1), sGen, cGen, eiGen); + } + + private class CmsCompressedOutputStream + : BaseOutputStream + { + private Stream _out; + private BerSequenceGenerator _sGen; + private BerSequenceGenerator _cGen; + private BerSequenceGenerator _eiGen; + + internal CmsCompressedOutputStream( + Stream outStream, + BerSequenceGenerator sGen, + BerSequenceGenerator cGen, + BerSequenceGenerator eiGen) + { + _out = outStream; + _sGen = sGen; + _cGen = cGen; + _eiGen = eiGen; + } + + public override void Write(byte[] buffer, int offset, int count) + { + _out.Write(buffer, offset, count); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) + { + _out.Write(buffer); + } +#endif + + public override void WriteByte(byte value) + { + _out.WriteByte(value); + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + _out.Dispose(); + + // TODO Parent context(s) should really be be closed explicitly + + _eiGen.Close(); + _cGen.Close(); + _sGen.Close(); + } + base.Dispose(disposing); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedDataStreamGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedDataStreamGenerator.cs.meta new file mode 100644 index 000000000..4f78c9328 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSCompressedDataStreamGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d91ec399f12b551429fc03e870166006 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSContentInfoParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSContentInfoParser.cs new file mode 100644 index 000000000..4de7428c2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSContentInfoParser.cs @@ -0,0 +1,52 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + public class CmsContentInfoParser + { + protected ContentInfoParser contentInfo; + protected Stream data; + + protected CmsContentInfoParser( + Stream data) + { + if (data == null) + throw new ArgumentNullException("data"); + + this.data = data; + + try + { + Asn1StreamParser inStream = new Asn1StreamParser(data); + + this.contentInfo = new ContentInfoParser((Asn1SequenceParser)inStream.ReadObject()); + } + catch (IOException e) + { + throw new CmsException("IOException reading content.", e); + } + catch (InvalidCastException e) + { + throw new CmsException("Unexpected object reading content.", e); + } + } + + /** + * Close the underlying data stream. + * @throws IOException if the close fails. + */ + public void Close() + { + data.Dispose(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSContentInfoParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSContentInfoParser.cs.meta new file mode 100644 index 000000000..840b2f57d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSContentInfoParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e4a4f23cbc361fd44aea8365372784a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedData.cs new file mode 100644 index 000000000..3d0d14321 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedData.cs @@ -0,0 +1,116 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * containing class for an CMS Enveloped Data object + */ + public class CmsEnvelopedData + { + internal RecipientInformationStore recipientInfoStore; + internal ContentInfo contentInfo; + + private AlgorithmIdentifier encAlg; + private Asn1Set unprotectedAttributes; + + public CmsEnvelopedData( + byte[] envelopedData) + : this(CmsUtilities.ReadContentInfo(envelopedData)) + { + } + + public CmsEnvelopedData( + Stream envelopedData) + : this(CmsUtilities.ReadContentInfo(envelopedData)) + { + } + + public CmsEnvelopedData( + ContentInfo contentInfo) + { + this.contentInfo = contentInfo; + + EnvelopedData envData = EnvelopedData.GetInstance(contentInfo.Content); + + // + // read the recipients + // + Asn1Set recipientInfos = envData.RecipientInfos; + + // + // read the encrypted content info + // + EncryptedContentInfo encInfo = envData.EncryptedContentInfo; + this.encAlg = encInfo.ContentEncryptionAlgorithm; + CmsReadable readable = new CmsProcessableByteArray(encInfo.EncryptedContent.GetOctets()); + CmsSecureReadable secureReadable = new CmsEnvelopedHelper.CmsEnvelopedSecureReadable( + this.encAlg, readable); + + // + // build the RecipientInformationStore + // + this.recipientInfoStore = CmsEnvelopedHelper.BuildRecipientInformationStore( + recipientInfos, secureReadable); + + this.unprotectedAttributes = envData.UnprotectedAttrs; + } + + public AlgorithmIdentifier EncryptionAlgorithmID + { + get { return encAlg; } + } + + /** + * return the object identifier for the content encryption algorithm. + */ + public string EncryptionAlgOid + { + get { return encAlg.Algorithm.Id; } + } + + /** + * return a store of the intended recipients for this message + */ + public RecipientInformationStore GetRecipientInfos() + { + return recipientInfoStore; + } + + /** + * return the ContentInfo + */ + public ContentInfo ContentInfo + { + get { return contentInfo; } + } + + /** + * return a table of the unprotected attributes indexed by + * the OID of the attribute. + */ + public Asn1.Cms.AttributeTable GetUnprotectedAttributes() + { + if (unprotectedAttributes == null) + return null; + + return new Asn1.Cms.AttributeTable(unprotectedAttributes); + } + + /** + * return the ASN.1 encoded representation of this object. + */ + public byte[] GetEncoded() + { + return contentInfo.GetEncoded(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedData.cs.meta new file mode 100644 index 000000000..68ffdfb28 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8ea637f918b56de47aab71d1b268782a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedDataGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedDataGenerator.cs new file mode 100644 index 000000000..b0e69b68d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedDataGenerator.cs @@ -0,0 +1,246 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /// + /// General class for generating a CMS enveloped-data message. + /// + /// A simple example of usage. + /// + ///
+    ///      CmsEnvelopedDataGenerator  fact = new CmsEnvelopedDataGenerator();
+    ///
+    ///      fact.AddKeyTransRecipient(cert);
+    ///
+    ///      CmsEnvelopedData         data = fact.Generate(content, algorithm);
+    /// 
+ ///
+ public class CmsEnvelopedDataGenerator + : CmsEnvelopedGenerator + { + public CmsEnvelopedDataGenerator() + { + } + + /// Constructor allowing specific source of randomness + /// Instance of SecureRandom to use. + public CmsEnvelopedDataGenerator(SecureRandom random) + : base(random) + { + } + + /// + /// Generate an enveloped object that contains a CMS Enveloped Data + /// object using the passed in key generator. + /// + private CmsEnvelopedData Generate( + CmsProcessable content, + string encryptionOid, + CipherKeyGenerator keyGen) + { + AlgorithmIdentifier encAlgId = null; + KeyParameter encKey; + Asn1OctetString encContent; + + try + { + byte[] encKeyBytes = keyGen.GenerateKey(); + encKey = ParameterUtilities.CreateKeyParameter(encryptionOid, encKeyBytes); + + Asn1Encodable asn1Params = GenerateAsn1Parameters(encryptionOid, encKeyBytes); + + ICipherParameters cipherParameters; + encAlgId = GetAlgorithmIdentifier( + encryptionOid, encKey, asn1Params, out cipherParameters); + + IBufferedCipher cipher = CipherUtilities.GetCipher(encryptionOid); + cipher.Init(true, new ParametersWithRandom(cipherParameters, m_random)); + + MemoryStream bOut = new MemoryStream(); + using (var cOut = new CipherStream(bOut, null, cipher)) + { + content.Write(cOut); + } + + encContent = new BerOctetString(bOut.ToArray()); + } + catch (SecurityUtilityException e) + { + throw new CmsException("couldn't create cipher.", e); + } + catch (InvalidKeyException e) + { + throw new CmsException("key invalid in message.", e); + } + catch (IOException e) + { + throw new CmsException("exception decoding algorithm parameters.", e); + } + + + Asn1EncodableVector recipientInfos = new Asn1EncodableVector(); + + foreach (RecipientInfoGenerator rig in recipientInfoGenerators) + { + try + { + recipientInfos.Add(rig.Generate(encKey, m_random)); + } + catch (InvalidKeyException e) + { + throw new CmsException("key inappropriate for algorithm.", e); + } + catch (GeneralSecurityException e) + { + throw new CmsException("error making encrypted content.", e); + } + } + + EncryptedContentInfo eci = new EncryptedContentInfo( + CmsObjectIdentifiers.Data, + encAlgId, + encContent); + + Asn1Set unprotectedAttrSet = null; + if (unprotectedAttributeGenerator != null) + { + Asn1.Cms.AttributeTable attrTable = unprotectedAttributeGenerator.GetAttributes( + new Dictionary()); + + unprotectedAttrSet = new BerSet(attrTable.ToAsn1EncodableVector()); + } + + ContentInfo contentInfo = new ContentInfo( + CmsObjectIdentifiers.EnvelopedData, + new EnvelopedData(null, new DerSet(recipientInfos), eci, unprotectedAttrSet)); + + return new CmsEnvelopedData(contentInfo); + } + + /// Generate an enveloped object that contains an CMS Enveloped Data object. + public CmsEnvelopedData Generate( + CmsProcessable content, + string encryptionOid) + { + try + { + CipherKeyGenerator keyGen = GeneratorUtilities.GetKeyGenerator(encryptionOid); + + keyGen.Init(new KeyGenerationParameters(m_random, keyGen.DefaultStrength)); + + return Generate(content, encryptionOid, keyGen); + } + catch (SecurityUtilityException e) + { + throw new CmsException("can't find key generation algorithm.", e); + } + } + + + public CmsEnvelopedData Generate(CmsProcessable content, ICipherBuilderWithKey cipherBuilder) + { + //AlgorithmIdentifier encAlgId = null; + KeyParameter encKey; + Asn1OctetString encContent; + + try + { + encKey = (KeyParameter) cipherBuilder.Key; + + MemoryStream collector = new MemoryStream(); + var cipher = cipherBuilder.BuildCipher(collector); + using (var bOut = cipher.Stream) + { + content.Write(bOut); + } + + encContent = new BerOctetString(collector.ToArray()); + } + catch (SecurityUtilityException e) + { + throw new CmsException("couldn't create cipher.", e); + } + catch (InvalidKeyException e) + { + throw new CmsException("key invalid in message.", e); + } + catch (IOException e) + { + throw new CmsException("exception decoding algorithm parameters.", e); + } + + + Asn1EncodableVector recipientInfos = new Asn1EncodableVector(); + + foreach (RecipientInfoGenerator rig in recipientInfoGenerators) + { + try + { + recipientInfos.Add(rig.Generate(encKey, m_random)); + } + catch (InvalidKeyException e) + { + throw new CmsException("key inappropriate for algorithm.", e); + } + catch (GeneralSecurityException e) + { + throw new CmsException("error making encrypted content.", e); + } + } + + EncryptedContentInfo eci = new EncryptedContentInfo( + CmsObjectIdentifiers.Data, + (AlgorithmIdentifier) cipherBuilder.AlgorithmDetails, + encContent); + + Asn1Set unprotectedAttrSet = null; + if (unprotectedAttributeGenerator != null) + { + Asn1.Cms.AttributeTable attrTable = unprotectedAttributeGenerator.GetAttributes( + new Dictionary()); + + unprotectedAttrSet = new BerSet(attrTable.ToAsn1EncodableVector()); + } + + ContentInfo contentInfo = new ContentInfo( + CmsObjectIdentifiers.EnvelopedData, + new EnvelopedData(null, new DerSet(recipientInfos), eci, unprotectedAttrSet)); + + return new CmsEnvelopedData(contentInfo); + } + + /// Generate an enveloped object that contains an CMS Enveloped Data object. + public CmsEnvelopedData Generate( + CmsProcessable content, + string encryptionOid, + int keySize) + { + try + { + CipherKeyGenerator keyGen = GeneratorUtilities.GetKeyGenerator(encryptionOid); + + keyGen.Init(new KeyGenerationParameters(m_random, keySize)); + + return Generate(content, encryptionOid, keyGen); + } + catch (SecurityUtilityException e) + { + throw new CmsException("can't find key generation algorithm.", e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedDataGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedDataGenerator.cs.meta new file mode 100644 index 000000000..acbbe221a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedDataGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa4d4e34c5881f74ca33adf98582b07c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedDataParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedDataParser.cs new file mode 100644 index 000000000..a13ae5af9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedDataParser.cs @@ -0,0 +1,163 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * Parsing class for an CMS Enveloped Data object from an input stream. + *

+ * Note: that because we are in a streaming mode only one recipient can be tried and it is important + * that the methods on the parser are called in the appropriate order. + *

+ *

+ * Example of use - assuming the first recipient matches the private key we have. + *

+	*      CmsEnvelopedDataParser     ep = new CmsEnvelopedDataParser(inputStream);
+	*
+	*      RecipientInformationStore  recipients = ep.GetRecipientInfos();
+	*
+	*      Collection  c = recipients.getRecipients();
+	*      Iterator    it = c.iterator();
+	*
+	*      if (it.hasNext())
+	*      {
+	*          RecipientInformation   recipient = (RecipientInformation)it.next();
+	*
+	*          CMSTypedStream recData = recipient.getContentStream(privateKey);
+	*
+	*          processDataStream(recData.getContentStream());
+	*      }
+	*  
+ * Note: this class does not introduce buffering - if you are processing large files you should create + * the parser with: + *
+	*          CmsEnvelopedDataParser     ep = new CmsEnvelopedDataParser(new BufferedInputStream(inputStream, bufSize));
+	*  
+ * where bufSize is a suitably large buffer size. + *

+ */ + public class CmsEnvelopedDataParser + : CmsContentInfoParser + { + internal RecipientInformationStore recipientInfoStore; + internal EnvelopedDataParser envelopedData; + + private AlgorithmIdentifier _encAlg; + private Asn1.Cms.AttributeTable _unprotectedAttributes; + private bool _attrNotRead; + + public CmsEnvelopedDataParser( + byte[] envelopedData) + : this(new MemoryStream(envelopedData, false)) + { + } + + public CmsEnvelopedDataParser( + Stream envelopedData) + : base(envelopedData) + { + this._attrNotRead = true; + this.envelopedData = new EnvelopedDataParser( + (Asn1SequenceParser)this.contentInfo.GetContent(Asn1Tags.Sequence)); + + // TODO Validate version? + //DerInteger version = this.envelopedData.Version; + + // + // read the recipients + // + Asn1Set recipientInfos = Asn1Set.GetInstance(this.envelopedData.GetRecipientInfos().ToAsn1Object()); + + // + // read the encrypted content info + // + EncryptedContentInfoParser encInfo = this.envelopedData.GetEncryptedContentInfo(); + this._encAlg = encInfo.ContentEncryptionAlgorithm; + CmsReadable readable = new CmsProcessableInputStream( + ((Asn1OctetStringParser)encInfo.GetEncryptedContent(Asn1Tags.OctetString)).GetOctetStream()); + CmsSecureReadable secureReadable = new CmsEnvelopedHelper.CmsEnvelopedSecureReadable( + this._encAlg, readable); + + // + // build the RecipientInformationStore + // + this.recipientInfoStore = CmsEnvelopedHelper.BuildRecipientInformationStore( + recipientInfos, secureReadable); + } + + public AlgorithmIdentifier EncryptionAlgorithmID + { + get { return _encAlg; } + } + + /** + * return the object identifier for the content encryption algorithm. + */ + public string EncryptionAlgOid + { + get { return _encAlg.Algorithm.Id; } + } + + /** + * return the ASN.1 encoded encryption algorithm parameters, or null if + * there aren't any. + */ + public Asn1Object EncryptionAlgParams + { + get + { + Asn1Encodable ae = _encAlg.Parameters; + + return ae == null ? null : ae.ToAsn1Object(); + } + } + + /** + * return a store of the intended recipients for this message + */ + public RecipientInformationStore GetRecipientInfos() + { + return this.recipientInfoStore; + } + + /** + * return a table of the unprotected attributes indexed by + * the OID of the attribute. + * @throws IOException + */ + public Asn1.Cms.AttributeTable GetUnprotectedAttributes() + { + if (_unprotectedAttributes == null && _attrNotRead) + { + Asn1SetParser asn1Set = this.envelopedData.GetUnprotectedAttrs(); + + _attrNotRead = false; + + if (asn1Set != null) + { + Asn1EncodableVector v = new Asn1EncodableVector(); + IAsn1Convertible o; + + while ((o = asn1Set.ReadObject()) != null) + { + Asn1SequenceParser seq = (Asn1SequenceParser)o; + + v.Add(seq.ToAsn1Object()); + } + + _unprotectedAttributes = new Asn1.Cms.AttributeTable(new DerSet(v)); + } + } + + return _unprotectedAttributes; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedDataParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedDataParser.cs.meta new file mode 100644 index 000000000..a65843f89 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedDataParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2454ef1eaa70ad84aaf4aaba68576105 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedDataStreamGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedDataStreamGenerator.cs new file mode 100644 index 000000000..cdc8e071c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedDataStreamGenerator.cs @@ -0,0 +1,286 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * General class for generating a CMS enveloped-data message stream. + *

+ * A simple example of usage. + *

+	*      CmsEnvelopedDataStreamGenerator edGen = new CmsEnvelopedDataStreamGenerator();
+	*
+	*      edGen.AddKeyTransRecipient(cert);
+	*
+	*      MemoryStream  bOut = new MemoryStream();
+	*
+	*      Stream out = edGen.Open(
+	*                              bOut, CMSEnvelopedDataGenerator.AES128_CBC);*
+	*      out.Write(data);
+	*
+	*      out.Close();
+	* 
+ *

+ */ + public class CmsEnvelopedDataStreamGenerator + : CmsEnvelopedGenerator + { + private object _originatorInfo = null; + private object _unprotectedAttributes = null; + private int _bufferSize; + private bool _berEncodeRecipientSet; + + public CmsEnvelopedDataStreamGenerator() + { + } + + /// Constructor allowing specific source of randomness + /// Instance of SecureRandom to use. + public CmsEnvelopedDataStreamGenerator(SecureRandom random) + : base(random) + { + } + + /// Set the underlying string size for encapsulated data. + /// Length of octet strings to buffer the data. + public void SetBufferSize( + int bufferSize) + { + _bufferSize = bufferSize; + } + + /// Use a BER Set to store the recipient information. + public void SetBerEncodeRecipients( + bool berEncodeRecipientSet) + { + _berEncodeRecipientSet = berEncodeRecipientSet; + } + + private DerInteger Version + { + get + { + int version = (_originatorInfo != null || _unprotectedAttributes != null) + ? 2 + : 0; + + return new DerInteger(version); + } + } + + /// + /// Generate an enveloped object that contains an CMS Enveloped Data + /// object using the passed in key generator. + /// + private Stream Open( + Stream outStream, + string encryptionOid, + CipherKeyGenerator keyGen) + { + byte[] encKeyBytes = keyGen.GenerateKey(); + KeyParameter encKey = ParameterUtilities.CreateKeyParameter(encryptionOid, encKeyBytes); + + Asn1Encodable asn1Params = GenerateAsn1Parameters(encryptionOid, encKeyBytes); + + ICipherParameters cipherParameters; + AlgorithmIdentifier encAlgID = GetAlgorithmIdentifier( + encryptionOid, encKey, asn1Params, out cipherParameters); + + Asn1EncodableVector recipientInfos = new Asn1EncodableVector(); + + foreach (RecipientInfoGenerator rig in recipientInfoGenerators) + { + try + { + recipientInfos.Add(rig.Generate(encKey, m_random)); + } + catch (InvalidKeyException e) + { + throw new CmsException("key inappropriate for algorithm.", e); + } + catch (GeneralSecurityException e) + { + throw new CmsException("error making encrypted content.", e); + } + } + + return Open(outStream, encAlgID, cipherParameters, recipientInfos); + } + + private Stream Open( + Stream outStream, + AlgorithmIdentifier encAlgID, + ICipherParameters cipherParameters, + Asn1EncodableVector recipientInfos) + { + try + { + // + // ContentInfo + // + BerSequenceGenerator cGen = new BerSequenceGenerator(outStream); + + cGen.AddObject(CmsObjectIdentifiers.EnvelopedData); + + // + // Encrypted Data + // + BerSequenceGenerator envGen = new BerSequenceGenerator( + cGen.GetRawOutputStream(), 0, true); + + envGen.AddObject(this.Version); + + Stream envRaw = envGen.GetRawOutputStream(); + Asn1Generator recipGen = _berEncodeRecipientSet + ? (Asn1Generator) new BerSetGenerator(envRaw) + : new DerSetGenerator(envRaw); + + foreach (Asn1Encodable ae in recipientInfos) + { + recipGen.AddObject(ae); + } + + recipGen.Close(); + + BerSequenceGenerator eiGen = new BerSequenceGenerator(envRaw); + eiGen.AddObject(CmsObjectIdentifiers.Data); + eiGen.AddObject(encAlgID); + + Stream octetOutputStream = CmsUtilities.CreateBerOctetOutputStream( + eiGen.GetRawOutputStream(), 0, false, _bufferSize); + + IBufferedCipher cipher = CipherUtilities.GetCipher(encAlgID.Algorithm); + cipher.Init(true, new ParametersWithRandom(cipherParameters, m_random)); + CipherStream cOut = new CipherStream(octetOutputStream, null, cipher); + + return new CmsEnvelopedDataOutputStream(this, cOut, cGen, envGen, eiGen); + } + catch (SecurityUtilityException e) + { + throw new CmsException("couldn't create cipher.", e); + } + catch (InvalidKeyException e) + { + throw new CmsException("key invalid in message.", e); + } + catch (IOException e) + { + throw new CmsException("exception decoding algorithm parameters.", e); + } + } + + /** + * generate an enveloped object that contains an CMS Enveloped Data object + * @throws IOException + */ + public Stream Open( + Stream outStream, + string encryptionOid) + { + CipherKeyGenerator keyGen = GeneratorUtilities.GetKeyGenerator(encryptionOid); + + keyGen.Init(new KeyGenerationParameters(m_random, keyGen.DefaultStrength)); + + return Open(outStream, encryptionOid, keyGen); + } + + /** + * generate an enveloped object that contains an CMS Enveloped Data object + * @throws IOException + */ + public Stream Open( + Stream outStream, + string encryptionOid, + int keySize) + { + CipherKeyGenerator keyGen = GeneratorUtilities.GetKeyGenerator(encryptionOid); + + keyGen.Init(new KeyGenerationParameters(m_random, keySize)); + + return Open(outStream, encryptionOid, keyGen); + } + + private class CmsEnvelopedDataOutputStream + : BaseOutputStream + { + private readonly CmsEnvelopedGenerator _outer; + + private readonly CipherStream _out; + private readonly BerSequenceGenerator _cGen; + private readonly BerSequenceGenerator _envGen; + private readonly BerSequenceGenerator _eiGen; + + public CmsEnvelopedDataOutputStream( + CmsEnvelopedGenerator outer, + CipherStream outStream, + BerSequenceGenerator cGen, + BerSequenceGenerator envGen, + BerSequenceGenerator eiGen) + { + _outer = outer; + _out = outStream; + _cGen = cGen; + _envGen = envGen; + _eiGen = eiGen; + } + + public override void Write(byte[] buffer, int offset, int count) + { + _out.Write(buffer, offset, count); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) + { + _out.Write(buffer); + } +#endif + + public override void WriteByte(byte value) + { + _out.WriteByte(value); + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + _out.Dispose(); + + // TODO Parent context(s) should really be closed explicitly + + _eiGen.Close(); + + if (_outer.unprotectedAttributeGenerator != null) + { + Asn1.Cms.AttributeTable attrTable = _outer.unprotectedAttributeGenerator.GetAttributes( + new Dictionary()); + + Asn1Set unprotectedAttrs = new BerSet(attrTable.ToAsn1EncodableVector()); + + _envGen.AddObject(new DerTaggedObject(false, 1, unprotectedAttrs)); + } + + _envGen.Close(); + _cGen.Close(); + } + base.Dispose(disposing); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedDataStreamGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedDataStreamGenerator.cs.meta new file mode 100644 index 000000000..fe767e9f1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedDataStreamGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 505dd39c923b320418fae1526255c484 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedGenerator.cs new file mode 100644 index 000000000..21b55b254 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedGenerator.cs @@ -0,0 +1,343 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Kisa; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ntt; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * General class for generating a CMS enveloped-data message. + * + * A simple example of usage. + * + *
+	*      CMSEnvelopedDataGenerator  fact = new CMSEnvelopedDataGenerator();
+	*
+	*      fact.addKeyTransRecipient(cert);
+	*
+	*      CMSEnvelopedData         data = fact.generate(content, algorithm, "BC");
+	* 
+ */ + public abstract class CmsEnvelopedGenerator + { + // Note: These tables are complementary: If rc2Table[i]==j, then rc2Ekb[j]==i + internal static readonly short[] rc2Table = + { + 0xbd, 0x56, 0xea, 0xf2, 0xa2, 0xf1, 0xac, 0x2a, 0xb0, 0x93, 0xd1, 0x9c, 0x1b, 0x33, 0xfd, 0xd0, + 0x30, 0x04, 0xb6, 0xdc, 0x7d, 0xdf, 0x32, 0x4b, 0xf7, 0xcb, 0x45, 0x9b, 0x31, 0xbb, 0x21, 0x5a, + 0x41, 0x9f, 0xe1, 0xd9, 0x4a, 0x4d, 0x9e, 0xda, 0xa0, 0x68, 0x2c, 0xc3, 0x27, 0x5f, 0x80, 0x36, + 0x3e, 0xee, 0xfb, 0x95, 0x1a, 0xfe, 0xce, 0xa8, 0x34, 0xa9, 0x13, 0xf0, 0xa6, 0x3f, 0xd8, 0x0c, + 0x78, 0x24, 0xaf, 0x23, 0x52, 0xc1, 0x67, 0x17, 0xf5, 0x66, 0x90, 0xe7, 0xe8, 0x07, 0xb8, 0x60, + 0x48, 0xe6, 0x1e, 0x53, 0xf3, 0x92, 0xa4, 0x72, 0x8c, 0x08, 0x15, 0x6e, 0x86, 0x00, 0x84, 0xfa, + 0xf4, 0x7f, 0x8a, 0x42, 0x19, 0xf6, 0xdb, 0xcd, 0x14, 0x8d, 0x50, 0x12, 0xba, 0x3c, 0x06, 0x4e, + 0xec, 0xb3, 0x35, 0x11, 0xa1, 0x88, 0x8e, 0x2b, 0x94, 0x99, 0xb7, 0x71, 0x74, 0xd3, 0xe4, 0xbf, + 0x3a, 0xde, 0x96, 0x0e, 0xbc, 0x0a, 0xed, 0x77, 0xfc, 0x37, 0x6b, 0x03, 0x79, 0x89, 0x62, 0xc6, + 0xd7, 0xc0, 0xd2, 0x7c, 0x6a, 0x8b, 0x22, 0xa3, 0x5b, 0x05, 0x5d, 0x02, 0x75, 0xd5, 0x61, 0xe3, + 0x18, 0x8f, 0x55, 0x51, 0xad, 0x1f, 0x0b, 0x5e, 0x85, 0xe5, 0xc2, 0x57, 0x63, 0xca, 0x3d, 0x6c, + 0xb4, 0xc5, 0xcc, 0x70, 0xb2, 0x91, 0x59, 0x0d, 0x47, 0x20, 0xc8, 0x4f, 0x58, 0xe0, 0x01, 0xe2, + 0x16, 0x38, 0xc4, 0x6f, 0x3b, 0x0f, 0x65, 0x46, 0xbe, 0x7e, 0x2d, 0x7b, 0x82, 0xf9, 0x40, 0xb5, + 0x1d, 0x73, 0xf8, 0xeb, 0x26, 0xc7, 0x87, 0x97, 0x25, 0x54, 0xb1, 0x28, 0xaa, 0x98, 0x9d, 0xa5, + 0x64, 0x6d, 0x7a, 0xd4, 0x10, 0x81, 0x44, 0xef, 0x49, 0xd6, 0xae, 0x2e, 0xdd, 0x76, 0x5c, 0x2f, + 0xa7, 0x1c, 0xc9, 0x09, 0x69, 0x9a, 0x83, 0xcf, 0x29, 0x39, 0xb9, 0xe9, 0x4c, 0xff, 0x43, 0xab + }; + +// internal static readonly short[] rc2Ekb = +// { +// 0x5d, 0xbe, 0x9b, 0x8b, 0x11, 0x99, 0x6e, 0x4d, 0x59, 0xf3, 0x85, 0xa6, 0x3f, 0xb7, 0x83, 0xc5, +// 0xe4, 0x73, 0x6b, 0x3a, 0x68, 0x5a, 0xc0, 0x47, 0xa0, 0x64, 0x34, 0x0c, 0xf1, 0xd0, 0x52, 0xa5, +// 0xb9, 0x1e, 0x96, 0x43, 0x41, 0xd8, 0xd4, 0x2c, 0xdb, 0xf8, 0x07, 0x77, 0x2a, 0xca, 0xeb, 0xef, +// 0x10, 0x1c, 0x16, 0x0d, 0x38, 0x72, 0x2f, 0x89, 0xc1, 0xf9, 0x80, 0xc4, 0x6d, 0xae, 0x30, 0x3d, +// 0xce, 0x20, 0x63, 0xfe, 0xe6, 0x1a, 0xc7, 0xb8, 0x50, 0xe8, 0x24, 0x17, 0xfc, 0x25, 0x6f, 0xbb, +// 0x6a, 0xa3, 0x44, 0x53, 0xd9, 0xa2, 0x01, 0xab, 0xbc, 0xb6, 0x1f, 0x98, 0xee, 0x9a, 0xa7, 0x2d, +// 0x4f, 0x9e, 0x8e, 0xac, 0xe0, 0xc6, 0x49, 0x46, 0x29, 0xf4, 0x94, 0x8a, 0xaf, 0xe1, 0x5b, 0xc3, +// 0xb3, 0x7b, 0x57, 0xd1, 0x7c, 0x9c, 0xed, 0x87, 0x40, 0x8c, 0xe2, 0xcb, 0x93, 0x14, 0xc9, 0x61, +// 0x2e, 0xe5, 0xcc, 0xf6, 0x5e, 0xa8, 0x5c, 0xd6, 0x75, 0x8d, 0x62, 0x95, 0x58, 0x69, 0x76, 0xa1, +// 0x4a, 0xb5, 0x55, 0x09, 0x78, 0x33, 0x82, 0xd7, 0xdd, 0x79, 0xf5, 0x1b, 0x0b, 0xde, 0x26, 0x21, +// 0x28, 0x74, 0x04, 0x97, 0x56, 0xdf, 0x3c, 0xf0, 0x37, 0x39, 0xdc, 0xff, 0x06, 0xa4, 0xea, 0x42, +// 0x08, 0xda, 0xb4, 0x71, 0xb0, 0xcf, 0x12, 0x7a, 0x4e, 0xfa, 0x6c, 0x1d, 0x84, 0x00, 0xc8, 0x7f, +// 0x91, 0x45, 0xaa, 0x2b, 0xc2, 0xb1, 0x8f, 0xd5, 0xba, 0xf2, 0xad, 0x19, 0xb2, 0x67, 0x36, 0xf7, +// 0x0f, 0x0a, 0x92, 0x7d, 0xe3, 0x9d, 0xe9, 0x90, 0x3e, 0x23, 0x27, 0x66, 0x13, 0xec, 0x81, 0x15, +// 0xbd, 0x22, 0xbf, 0x9f, 0x7e, 0xa9, 0x51, 0x4b, 0x4c, 0xfb, 0x02, 0xd3, 0x70, 0x86, 0x31, 0xe7, +// 0x3b, 0x05, 0x03, 0x54, 0x60, 0x48, 0x65, 0x18, 0xd2, 0xcd, 0x5f, 0x32, 0x88, 0x0e, 0x35, 0xfd +// }; + + + // TODO Create named constants for all of these + public static readonly string DesEde3Cbc = PkcsObjectIdentifiers.DesEde3Cbc.Id; + public static readonly string RC2Cbc = PkcsObjectIdentifiers.RC2Cbc.Id; + public const string IdeaCbc = "1.3.6.1.4.1.188.7.1.1.2"; + public const string Cast5Cbc = "1.2.840.113533.7.66.10"; + public static readonly string Aes128Cbc = NistObjectIdentifiers.IdAes128Cbc.Id; + public static readonly string Aes192Cbc = NistObjectIdentifiers.IdAes192Cbc.Id; + public static readonly string Aes256Cbc = NistObjectIdentifiers.IdAes256Cbc.Id; + public static readonly string Camellia128Cbc = NttObjectIdentifiers.IdCamellia128Cbc.Id; + public static readonly string Camellia192Cbc = NttObjectIdentifiers.IdCamellia192Cbc.Id; + public static readonly string Camellia256Cbc = NttObjectIdentifiers.IdCamellia256Cbc.Id; + public static readonly string SeedCbc = KisaObjectIdentifiers.IdSeedCbc.Id; + + public static readonly string DesEde3Wrap = PkcsObjectIdentifiers.IdAlgCms3DesWrap.Id; + public static readonly string Aes128Wrap = NistObjectIdentifiers.IdAes128Wrap.Id; + public static readonly string Aes192Wrap = NistObjectIdentifiers.IdAes192Wrap.Id; + public static readonly string Aes256Wrap = NistObjectIdentifiers.IdAes256Wrap.Id; + public static readonly string Camellia128Wrap = NttObjectIdentifiers.IdCamellia128Wrap.Id; + public static readonly string Camellia192Wrap = NttObjectIdentifiers.IdCamellia192Wrap.Id; + public static readonly string Camellia256Wrap = NttObjectIdentifiers.IdCamellia256Wrap.Id; + public static readonly string SeedWrap = KisaObjectIdentifiers.IdNpkiAppCmsSeedWrap.Id; + + public static readonly string ECDHSha1Kdf = X9ObjectIdentifiers.DHSinglePassStdDHSha1KdfScheme.Id; + public static readonly string ECMqvSha1Kdf = X9ObjectIdentifiers.MqvSinglePassSha1KdfScheme.Id; + + internal readonly IList recipientInfoGenerators = new List(); + internal readonly SecureRandom m_random; + + internal CmsAttributeTableGenerator unprotectedAttributeGenerator = null; + + protected CmsEnvelopedGenerator() + : this(CryptoServicesRegistrar.GetSecureRandom()) + { + } + + /// Constructor allowing specific source of randomness + /// Instance of SecureRandom to use. + protected CmsEnvelopedGenerator(SecureRandom random) + { + if (random == null) + throw new ArgumentNullException(nameof(random)); + + m_random = random; + } + + public CmsAttributeTableGenerator UnprotectedAttributeGenerator + { + get { return this.unprotectedAttributeGenerator; } + set { this.unprotectedAttributeGenerator = value; } + } + + /** + * add a recipient. + * + * @param cert recipient's public key certificate + * @exception ArgumentException if there is a problem with the certificate + */ + public void AddKeyTransRecipient( + X509Certificate cert) + { + TbsCertificateStructure recipientTbsCert = CmsUtilities.GetTbsCertificateStructure(cert); + SubjectPublicKeyInfo info = recipientTbsCert.SubjectPublicKeyInfo; + this.AddRecipientInfoGenerator(new KeyTransRecipientInfoGenerator(cert, new Asn1KeyWrapper(info.AlgorithmID.Algorithm, info.AlgorithmID.Parameters, cert))); + } + + /** + * add a recipient + * + * @param key the public key used by the recipient + * @param subKeyId the identifier for the recipient's public key + * @exception ArgumentException if there is a problem with the key + */ + public void AddKeyTransRecipient( + AsymmetricKeyParameter pubKey, + byte[] subKeyId) + { + SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pubKey); + this.AddRecipientInfoGenerator(new KeyTransRecipientInfoGenerator(subKeyId, new Asn1KeyWrapper(info.AlgorithmID.Algorithm, info.AlgorithmID.Parameters, pubKey))); + } + + /** + * add a KEK recipient. + * @param key the secret key to use for wrapping + * @param keyIdentifier the byte string that identifies the key + */ + public void AddKekRecipient( + string keyAlgorithm, // TODO Remove need for this parameter + KeyParameter key, + byte[] keyIdentifier) + { + AddKekRecipient(keyAlgorithm, key, new KekIdentifier(keyIdentifier, null, null)); + } + + /** + * add a KEK recipient. + * @param key the secret key to use for wrapping + * @param keyIdentifier the byte string that identifies the key + */ + public void AddKekRecipient( + string keyAlgorithm, // TODO Remove need for this parameter + KeyParameter key, + KekIdentifier kekIdentifier) + { + KekRecipientInfoGenerator kekrig = new KekRecipientInfoGenerator(); + kekrig.KekIdentifier = kekIdentifier; + kekrig.KeyEncryptionKeyOID = keyAlgorithm; + kekrig.KeyEncryptionKey = key; + + recipientInfoGenerators.Add(kekrig); + } + + public void AddPasswordRecipient( + CmsPbeKey pbeKey, + string kekAlgorithmOid) + { + Pbkdf2Params p = new Pbkdf2Params(pbeKey.Salt, pbeKey.IterationCount); + + PasswordRecipientInfoGenerator prig = new PasswordRecipientInfoGenerator(); + prig.KeyDerivationAlgorithm = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdPbkdf2, p); + prig.KeyEncryptionKeyOID = kekAlgorithmOid; + prig.KeyEncryptionKey = pbeKey.GetEncoded(kekAlgorithmOid); + + recipientInfoGenerators.Add(prig); + } + + /** + * Add a key agreement based recipient. + * + * @param agreementAlgorithm key agreement algorithm to use. + * @param senderPrivateKey private key to initialise sender side of agreement with. + * @param senderPublicKey sender public key to include with message. + * @param recipientCert recipient's public key certificate. + * @param cekWrapAlgorithm OID for key wrapping algorithm to use. + * @exception SecurityUtilityException if the algorithm requested cannot be found + * @exception InvalidKeyException if the keys are inappropriate for the algorithm specified + */ + public void AddKeyAgreementRecipient( + string agreementAlgorithm, + AsymmetricKeyParameter senderPrivateKey, + AsymmetricKeyParameter senderPublicKey, + X509Certificate recipientCert, + string cekWrapAlgorithm) + { + var recipientCerts = new List(1); + recipientCerts.Add(recipientCert); + + AddKeyAgreementRecipients(agreementAlgorithm, senderPrivateKey, senderPublicKey, + recipientCerts, cekWrapAlgorithm); + } + + /** + * Add multiple key agreement based recipients (sharing a single KeyAgreeRecipientInfo structure). + * + * @param agreementAlgorithm key agreement algorithm to use. + * @param senderPrivateKey private key to initialise sender side of agreement with. + * @param senderPublicKey sender public key to include with message. + * @param recipientCerts recipients' public key certificates. + * @param cekWrapAlgorithm OID for key wrapping algorithm to use. + * @exception SecurityUtilityException if the algorithm requested cannot be found + * @exception InvalidKeyException if the keys are inappropriate for the algorithm specified + */ + public void AddKeyAgreementRecipients( + string agreementAlgorithm, + AsymmetricKeyParameter senderPrivateKey, + AsymmetricKeyParameter senderPublicKey, + IEnumerable recipientCerts, + string cekWrapAlgorithm) + { + if (!senderPrivateKey.IsPrivate) + throw new ArgumentException("Expected private key", "senderPrivateKey"); + if (senderPublicKey.IsPrivate) + throw new ArgumentException("Expected public key", "senderPublicKey"); + + /* TODO + * "a recipient X.509 version 3 certificate that contains a key usage extension MUST + * assert the keyAgreement bit." + */ + + KeyAgreeRecipientInfoGenerator karig = new KeyAgreeRecipientInfoGenerator(); + karig.KeyAgreementOID = new DerObjectIdentifier(agreementAlgorithm); + karig.KeyEncryptionOID = new DerObjectIdentifier(cekWrapAlgorithm); + karig.RecipientCerts = new List(recipientCerts); + karig.SenderKeyPair = new AsymmetricCipherKeyPair(senderPublicKey, senderPrivateKey); + + recipientInfoGenerators.Add(karig); + } + + /// + /// Add a generator to produce the recipient info required. + /// + /// a generator of a recipient info object. + public void AddRecipientInfoGenerator(RecipientInfoGenerator recipientInfoGenerator) + { + recipientInfoGenerators.Add(recipientInfoGenerator); + } + + + protected internal virtual AlgorithmIdentifier GetAlgorithmIdentifier( + string encryptionOid, + KeyParameter encKey, + Asn1Encodable asn1Params, + out ICipherParameters cipherParameters) + { + Asn1Object asn1Object; + if (asn1Params != null) + { + asn1Object = asn1Params.ToAsn1Object(); + cipherParameters = ParameterUtilities.GetCipherParameters( + encryptionOid, encKey, asn1Object); + } + else + { + asn1Object = DerNull.Instance; + cipherParameters = encKey; + } + + return new AlgorithmIdentifier( + new DerObjectIdentifier(encryptionOid), + asn1Object); + } + + protected internal virtual Asn1Encodable GenerateAsn1Parameters( + string encryptionOid, + byte[] encKeyBytes) + { + Asn1Encodable asn1Params = null; + + try + { + if (encryptionOid.Equals(RC2Cbc)) + { + byte[] iv = new byte[8]; + m_random.NextBytes(iv); + + // TODO Is this detailed repeat of Java version really necessary? + int effKeyBits = encKeyBytes.Length * 8; + int parameterVersion; + + if (effKeyBits < 256) + { + parameterVersion = rc2Table[effKeyBits]; + } + else + { + parameterVersion = effKeyBits; + } + + asn1Params = new RC2CbcParameter(parameterVersion, iv); + } + else + { + asn1Params = ParameterUtilities.GenerateParameters(encryptionOid, m_random); + } + } + catch (SecurityUtilityException) + { + // No problem... no parameters generated + } + + return asn1Params; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedGenerator.cs.meta new file mode 100644 index 000000000..7352f9bc5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7479720d2a2d32e4688e44695282bcbe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedHelper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedHelper.cs new file mode 100644 index 000000000..c95aee1fd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedHelper.cs @@ -0,0 +1,311 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + class CmsEnvelopedHelper + { + internal static readonly CmsEnvelopedHelper Instance = new CmsEnvelopedHelper(); + + private static readonly IDictionary KeySizes = new Dictionary(); + private static readonly IDictionary BaseCipherNames = new Dictionary(); + + static CmsEnvelopedHelper() + { + KeySizes.Add(CmsEnvelopedGenerator.DesEde3Cbc, 192); + KeySizes.Add(CmsEnvelopedGenerator.Aes128Cbc, 128); + KeySizes.Add(CmsEnvelopedGenerator.Aes192Cbc, 192); + KeySizes.Add(CmsEnvelopedGenerator.Aes256Cbc, 256); + + BaseCipherNames.Add(CmsEnvelopedGenerator.DesEde3Cbc, "DESEDE"); + BaseCipherNames.Add(CmsEnvelopedGenerator.Aes128Cbc, "AES"); + BaseCipherNames.Add(CmsEnvelopedGenerator.Aes192Cbc, "AES"); + BaseCipherNames.Add(CmsEnvelopedGenerator.Aes256Cbc, "AES"); + } + + private string GetAsymmetricEncryptionAlgName( + string encryptionAlgOid) + { + if (Asn1.Pkcs.PkcsObjectIdentifiers.RsaEncryption.Id.Equals(encryptionAlgOid)) + { + return "RSA/ECB/PKCS1Padding"; + } + + return encryptionAlgOid; + } + + internal IBufferedCipher CreateAsymmetricCipher( + string encryptionOid) + { + string asymName = GetAsymmetricEncryptionAlgName(encryptionOid); + if (!asymName.Equals(encryptionOid)) + { + try + { + return CipherUtilities.GetCipher(asymName); + } + catch (SecurityUtilityException) + { + // Ignore + } + } + return CipherUtilities.GetCipher(encryptionOid); + } + + internal IWrapper CreateWrapper( + string encryptionOid) + { + try + { + return WrapperUtilities.GetWrapper(encryptionOid); + } + catch (SecurityUtilityException) + { + return WrapperUtilities.GetWrapper(GetAsymmetricEncryptionAlgName(encryptionOid)); + } + } + + internal string GetRfc3211WrapperName(string oid) + { + if (oid == null) + throw new ArgumentNullException(nameof(oid)); + + if (!BaseCipherNames.TryGetValue(oid, out var alg)) + throw new ArgumentException("no name for " + oid, nameof(oid)); + + return alg + "RFC3211Wrap"; + } + + internal int GetKeySize(string oid) + { + if (oid == null) + throw new ArgumentNullException(nameof(oid)); + + if (!KeySizes.TryGetValue(oid, out var keySize)) + throw new ArgumentException("no keysize for " + oid, "oid"); + + return keySize; + } + + internal static RecipientInformationStore BuildRecipientInformationStore( + Asn1Set recipientInfos, CmsSecureReadable secureReadable) + { + var infos = new List(); + for (int i = 0; i != recipientInfos.Count; i++) + { + RecipientInfo info = RecipientInfo.GetInstance(recipientInfos[i]); + + ReadRecipientInfo(infos, info, secureReadable); + } + return new RecipientInformationStore(infos); + } + + private static void ReadRecipientInfo(IList infos, RecipientInfo info, + CmsSecureReadable secureReadable) + { + Asn1Encodable recipInfo = info.Info; + if (recipInfo is KeyTransRecipientInfo keyTransRecipientInfo) + { + infos.Add(new KeyTransRecipientInformation(keyTransRecipientInfo, secureReadable)); + } + else if (recipInfo is KekRecipientInfo kekRecipientInfo) + { + infos.Add(new KekRecipientInformation(kekRecipientInfo, secureReadable)); + } + else if (recipInfo is KeyAgreeRecipientInfo keyAgreeRecipientInfo) + { + KeyAgreeRecipientInformation.ReadRecipientInfo(infos, keyAgreeRecipientInfo, secureReadable); + } + else if (recipInfo is PasswordRecipientInfo passwordRecipientInfo) + { + infos.Add(new PasswordRecipientInformation(passwordRecipientInfo, secureReadable)); + } + } + + internal class CmsAuthenticatedSecureReadable : CmsSecureReadable + { + private AlgorithmIdentifier algorithm; + private IMac mac; + private CmsReadable readable; + + internal CmsAuthenticatedSecureReadable(AlgorithmIdentifier algorithm, CmsReadable readable) + { + this.algorithm = algorithm; + this.readable = readable; + } + + public AlgorithmIdentifier Algorithm + { + get { return this.algorithm; } + } + + public object CryptoObject + { + get { return this.mac; } + } + + public CmsReadable GetReadable(KeyParameter sKey) + { + string macAlg = this.algorithm.Algorithm.Id; +// Asn1Object sParams = this.algorithm.Parameters.ToAsn1Object(); + + try + { + this.mac = MacUtilities.GetMac(macAlg); + + // FIXME Support for MAC algorithm parameters similar to cipher parameters +// ASN1Object sParams = (ASN1Object)macAlg.getParameters(); +// +// if (sParams != null && !(sParams instanceof ASN1Null)) +// { +// AlgorithmParameters params = CMSEnvelopedHelper.INSTANCE.createAlgorithmParameters(macAlg.getObjectId().getId(), provider); +// +// params.init(sParams.getEncoded(), "ASN.1"); +// +// mac.init(sKey, params.getParameterSpec(IvParameterSpec.class)); +// } +// else + { + mac.Init(sKey); + } + +// Asn1Object asn1Params = asn1Enc == null ? null : asn1Enc.ToAsn1Object(); +// +// ICipherParameters cipherParameters = sKey; +// +// if (asn1Params != null && !(asn1Params is Asn1Null)) +// { +// cipherParameters = ParameterUtilities.GetCipherParameters( +// macAlg.Algorithm, cipherParameters, asn1Params); +// } +// else +// { +// string alg = macAlg.Algorithm.Id; +// if (alg.Equals(CmsEnvelopedDataGenerator.DesEde3Cbc) +// || alg.Equals(CmsEnvelopedDataGenerator.IdeaCbc) +// || alg.Equals(CmsEnvelopedDataGenerator.Cast5Cbc)) +// { +// cipherParameters = new ParametersWithIV(cipherParameters, new byte[8]); +// } +// } +// +// mac.Init(cipherParameters); + } + catch (SecurityUtilityException e) + { + throw new CmsException("couldn't create cipher.", e); + } + catch (InvalidKeyException e) + { + throw new CmsException("key invalid in message.", e); + } + catch (IOException e) + { + throw new CmsException("error decoding algorithm parameters.", e); + } + + try + { + return new CmsProcessableInputStream( + new TeeInputStream( + readable.GetInputStream(), + new MacSink(this.mac))); + } + catch (IOException e) + { + throw new CmsException("error reading content.", e); + } + } + } + + internal class CmsEnvelopedSecureReadable : CmsSecureReadable + { + private AlgorithmIdentifier algorithm; + private IBufferedCipher cipher; + private CmsReadable readable; + + internal CmsEnvelopedSecureReadable(AlgorithmIdentifier algorithm, CmsReadable readable) + { + this.algorithm = algorithm; + this.readable = readable; + } + + public AlgorithmIdentifier Algorithm + { + get { return this.algorithm; } + } + + public object CryptoObject + { + get { return this.cipher; } + } + + public CmsReadable GetReadable(KeyParameter sKey) + { + try + { + this.cipher = CipherUtilities.GetCipher(this.algorithm.Algorithm); + + Asn1Encodable asn1Enc = this.algorithm.Parameters; + Asn1Object asn1Params = asn1Enc == null ? null : asn1Enc.ToAsn1Object(); + + ICipherParameters cipherParameters = sKey; + + if (asn1Params != null && !(asn1Params is Asn1Null)) + { + cipherParameters = ParameterUtilities.GetCipherParameters( + this.algorithm.Algorithm, cipherParameters, asn1Params); + } + else + { + string alg = this.algorithm.Algorithm.Id; + if (alg.Equals(CmsEnvelopedDataGenerator.DesEde3Cbc) + || alg.Equals(CmsEnvelopedDataGenerator.IdeaCbc) + || alg.Equals(CmsEnvelopedDataGenerator.Cast5Cbc)) + { + cipherParameters = new ParametersWithIV(cipherParameters, new byte[8]); + } + } + + cipher.Init(false, cipherParameters); + } + catch (SecurityUtilityException e) + { + throw new CmsException("couldn't create cipher.", e); + } + catch (InvalidKeyException e) + { + throw new CmsException("key invalid in message.", e); + } + catch (IOException e) + { + throw new CmsException("error decoding algorithm parameters.", e); + } + + try + { + return new CmsProcessableInputStream( + new CipherStream(readable.GetInputStream(), cipher, null)); + } + catch (IOException e) + { + throw new CmsException("error reading content.", e); + } + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedHelper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedHelper.cs.meta new file mode 100644 index 000000000..ab985b9cc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSEnvelopedHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8aff90e61ecf2b749995884c8d10148a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSException.cs new file mode 100644 index 000000000..e60631fdc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + [Serializable] + public class CmsException + : Exception + { + public CmsException() + : base() + { + } + + public CmsException(string message) + : base(message) + { + } + + public CmsException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected CmsException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSException.cs.meta new file mode 100644 index 000000000..1a7c654cb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f90877e942bf2e4d98c1908021bf6d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSPBEKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSPBEKey.cs new file mode 100644 index 000000000..f19cc3c0f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSPBEKey.cs @@ -0,0 +1,84 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +//import javax.crypto.interfaces.PBEKey; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + public abstract class CmsPbeKey + // TODO Create an equivalent interface somewhere? + // : PBEKey + : ICipherParameters + { + internal readonly char[] password; + internal readonly byte[] salt; + internal readonly int iterationCount; + + public CmsPbeKey( + char[] password, + byte[] salt, + int iterationCount) + { + this.password = (char[])password.Clone(); + this.salt = Arrays.Clone(salt); + this.iterationCount = iterationCount; + } + + public CmsPbeKey( + char[] password, + AlgorithmIdentifier keyDerivationAlgorithm) + { + if (!keyDerivationAlgorithm.Algorithm.Equals(PkcsObjectIdentifiers.IdPbkdf2)) + throw new ArgumentException("Unsupported key derivation algorithm: " + + keyDerivationAlgorithm.Algorithm); + + Pbkdf2Params kdfParams = Pbkdf2Params.GetInstance( + keyDerivationAlgorithm.Parameters.ToAsn1Object()); + + this.password = (char[])password.Clone(); + this.salt = kdfParams.GetSalt(); + this.iterationCount = kdfParams.IterationCount.IntValue; + } + + ~CmsPbeKey() + { + Array.Clear(this.password, 0, this.password.Length); + } + + public byte[] Salt + { + get { return Arrays.Clone(salt); } + } + + public int IterationCount + { + get { return iterationCount; } + } + + public string Algorithm + { + get { return "PKCS5S2"; } + } + + public string Format + { + get { return "RAW"; } + } + + public byte[] GetEncoded() + { + return null; + } + + internal abstract KeyParameter GetEncoded(string algorithmOid); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSPBEKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSPBEKey.cs.meta new file mode 100644 index 000000000..90762536b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSPBEKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d60637ca80b5e34f9547fc0de7e2600 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessable.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessable.cs new file mode 100644 index 000000000..d38ab0988 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessable.cs @@ -0,0 +1,20 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + public interface CmsProcessable + { + /// + /// Generic routine to copy out the data we want processed. + /// + /// + /// This routine may be called multiple times. + /// + void Write(Stream outStream); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessable.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessable.cs.meta new file mode 100644 index 000000000..721307109 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc71b700fdd90dd48a259bb7a12d52b8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessableByteArray.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessableByteArray.cs new file mode 100644 index 000000000..8570ed718 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessableByteArray.cs @@ -0,0 +1,49 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * a holding class for a byte array of data to be processed. + */ + public class CmsProcessableByteArray + : CmsProcessable, CmsReadable + { + private readonly DerObjectIdentifier type; + private readonly byte[] bytes; + + public CmsProcessableByteArray(byte[] bytes) + { + type = CmsObjectIdentifiers.Data; + this.bytes = bytes; + } + + public CmsProcessableByteArray(DerObjectIdentifier type, byte[] bytes) + { + this.bytes = bytes; + this.type = type; + } + + public DerObjectIdentifier Type + { + get { return type; } + } + + public virtual Stream GetInputStream() + { + return new MemoryStream(bytes, false); + } + + public virtual void Write(Stream zOut) + { + zOut.Write(bytes, 0, bytes.Length); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessableByteArray.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessableByteArray.cs.meta new file mode 100644 index 000000000..6e07591bd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessableByteArray.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d84ec454eb730c64480bf4b1467ebf9d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessableFile.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessableFile.cs new file mode 100644 index 000000000..f3a1f3d6f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessableFile.cs @@ -0,0 +1,47 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * a holding class for a file of data to be processed. + */ + public class CmsProcessableFile + : CmsProcessable, CmsReadable + { + private const int DefaultBufSize = 32 * 1024; + + private readonly FileInfo _file; + private readonly int _bufSize; + + public CmsProcessableFile(FileInfo file) + : this(file, DefaultBufSize) + { + } + + public CmsProcessableFile(FileInfo file, int bufSize) + { + _file = file; + _bufSize = bufSize; + } + + public virtual Stream GetInputStream() + { + return new FileStream(_file.FullName, FileMode.Open, FileAccess.Read, FileShare.Read, _bufSize); + } + + public virtual void Write(Stream zOut) + { + using (var inStr = _file.OpenRead()) + { + Streams.PipeAll(inStr, zOut, _bufSize); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessableFile.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessableFile.cs.meta new file mode 100644 index 000000000..b9935c35d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessableFile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ee6794dc9ed9a21498c15a4d0ade7433 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessableInputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessableInputStream.cs new file mode 100644 index 000000000..0a8a4b335 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessableInputStream.cs @@ -0,0 +1,51 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + public class CmsProcessableInputStream + : CmsProcessable, CmsReadable + { + private readonly Stream input; + + private bool used = false; + + public CmsProcessableInputStream(Stream input) + { + this.input = input; + } + + public virtual Stream GetInputStream() + { + CheckSingleUsage(); + + return input; + } + + public virtual void Write(Stream output) + { + CheckSingleUsage(); + + Streams.PipeAll(input, output); + input.Dispose(); + } + + protected virtual void CheckSingleUsage() + { + lock (this) + { + if (used) + throw new InvalidOperationException("CmsProcessableInputStream can only be used once"); + + used = true; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessableInputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessableInputStream.cs.meta new file mode 100644 index 000000000..332e3d4f3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSProcessableInputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa606174dc043f747972f4383debbfc4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSReadable.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSReadable.cs new file mode 100644 index 000000000..da18c1e48 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSReadable.cs @@ -0,0 +1,14 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + public interface CmsReadable + { + Stream GetInputStream(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSReadable.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSReadable.cs.meta new file mode 100644 index 000000000..47b2cff28 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSReadable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0789b9aa682aeb342978fa21c8d81f43 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSecureReadable.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSecureReadable.cs new file mode 100644 index 000000000..d163d06cb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSecureReadable.cs @@ -0,0 +1,18 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + internal interface CmsSecureReadable + { + AlgorithmIdentifier Algorithm { get; } + object CryptoObject { get; } + CmsReadable GetReadable(KeyParameter key); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSecureReadable.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSecureReadable.cs.meta new file mode 100644 index 000000000..d7325c28b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSecureReadable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cacf6c4fdf0cc0a4e9a92dfebfbe7424 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedData.cs new file mode 100644 index 000000000..ab49bbbcc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedData.cs @@ -0,0 +1,415 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * general class for handling a pkcs7-signature message. + * + * A simple example of usage - note, in the example below the validity of + * the certificate isn't verified, just the fact that one of the certs + * matches the given signer... + * + *
+	*  IX509Store              certs = s.GetCertificates();
+	*  SignerInformationStore  signers = s.GetSignerInfos();
+	*
+	*  foreach (SignerInformation signer in signers.GetSigners())
+	*  {
+	*      ArrayList       certList = new ArrayList(certs.GetMatches(signer.SignerID));
+	*      X509Certificate cert = (X509Certificate) certList[0];
+	*
+	*      if (signer.Verify(cert.GetPublicKey()))
+	*      {
+	*          verified++;
+	*      }
+	*  }
+	* 
+ */ + public class CmsSignedData + { + private static readonly CmsSignedHelper Helper = CmsSignedHelper.Instance; + + private readonly CmsProcessable signedContent; + private SignedData signedData; + private ContentInfo contentInfo; + private SignerInformationStore signerInfoStore; + private IDictionary m_hashes; + + private CmsSignedData(CmsSignedData c) + { + this.signedData = c.signedData; + this.contentInfo = c.contentInfo; + this.signedContent = c.signedContent; + this.signerInfoStore = c.signerInfoStore; + } + + public CmsSignedData(byte[] sigBlock) + : this(CmsUtilities.ReadContentInfo(new MemoryStream(sigBlock, false))) + { + } + + public CmsSignedData(CmsProcessable signedContent, byte[] sigBlock) + : this(signedContent, CmsUtilities.ReadContentInfo(new MemoryStream(sigBlock, false))) + { + } + + /** + * Content with detached signature, digests precomputed + * + * @param hashes a map of precomputed digests for content indexed by name of hash. + * @param sigBlock the signature object. + */ + public CmsSignedData(IDictionary hashes, byte[] sigBlock) + : this(hashes, CmsUtilities.ReadContentInfo(sigBlock)) + { + } + + /** + * base constructor - content with detached signature. + * + * @param signedContent the content that was signed. + * @param sigData the signature object. + */ + public CmsSignedData(CmsProcessable signedContent, Stream sigData) + : this(signedContent, CmsUtilities.ReadContentInfo(sigData)) + { + } + + /** + * base constructor - with encapsulated content + */ + public CmsSignedData(Stream sigData) + : this(CmsUtilities.ReadContentInfo(sigData)) + { + } + + public CmsSignedData(CmsProcessable signedContent, ContentInfo sigData) + { + this.signedContent = signedContent; + this.contentInfo = sigData; + this.signedData = SignedData.GetInstance(contentInfo.Content); + } + + public CmsSignedData(IDictionary hashes, ContentInfo sigData) + { + this.m_hashes = hashes; + this.contentInfo = sigData; + this.signedData = SignedData.GetInstance(contentInfo.Content); + } + + public CmsSignedData(ContentInfo sigData) + { + this.contentInfo = sigData; + this.signedData = SignedData.GetInstance(contentInfo.Content); + + // + // this can happen if the signed message is sent simply to send a + // certificate chain. + // + if (signedData.EncapContentInfo.Content != null) + { + this.signedContent = new CmsProcessableByteArray( + ((Asn1OctetString)(signedData.EncapContentInfo.Content)).GetOctets()); + } +// else +// { +// this.signedContent = null; +// } + } + + /// Return the version number for this object. + public int Version + { + get { return signedData.Version.IntValueExact; } + } + + /** + * return the collection of signers that are associated with the + * signatures for the message. + */ + public SignerInformationStore GetSignerInfos() + { + if (signerInfoStore == null) + { + var signerInfos = new List(); + Asn1Set s = signedData.SignerInfos; + + foreach (object obj in s) + { + SignerInfo info = SignerInfo.GetInstance(obj); + DerObjectIdentifier contentType = signedData.EncapContentInfo.ContentType; + + if (m_hashes == null) + { + signerInfos.Add(new SignerInformation(info, contentType, signedContent, null)); + } + else if (m_hashes.TryGetValue(info.DigestAlgorithm.Algorithm.Id, out var hash)) + { + signerInfos.Add(new SignerInformation(info, contentType, null, new BaseDigestCalculator(hash))); + } + else + { + throw new InvalidOperationException(); + } + } + + signerInfoStore = new SignerInformationStore(signerInfos); + } + + return signerInfoStore; + } + + /** + * return a X509Store containing the attribute certificates, if any, contained + * in this message. + * + * @param type type of store to create + * @return a store of attribute certificates + * @exception NoSuchStoreException if the store type isn't available. + * @exception CmsException if a general exception prevents creation of the X509Store + */ + public IStore GetAttributeCertificates() + { + return Helper.GetAttributeCertificates(signedData.Certificates); + } + + /** + * return a X509Store containing the public key certificates, if any, contained in this message. + * + * @return a store of public key certificates + * @exception NoSuchStoreException if the store type isn't available. + * @exception CmsException if a general exception prevents creation of the X509Store + */ + public IStore GetCertificates() + { + return Helper.GetCertificates(signedData.Certificates); + } + + /** + * return a X509Store containing CRLs, if any, contained in this message. + * + * @return a store of CRLs + * @exception NoSuchStoreException if the store type isn't available. + * @exception CmsException if a general exception prevents creation of the X509Store + */ + public IStore GetCrls() + { + return Helper.GetCrls(signedData.CRLs); + } + + public IStore GetOtherRevInfos(DerObjectIdentifier otherRevInfoFormat) + { + return Helper.GetOtherRevInfos(signedData.CRLs, otherRevInfoFormat); + } + + /// + /// Return the DerObjectIdentifier associated with the encapsulated + /// content info structure carried in the signed data. + /// + public DerObjectIdentifier SignedContentType + { + get { return signedData.EncapContentInfo.ContentType; } + } + + public CmsProcessable SignedContent + { + get { return signedContent; } + } + + /** + * return the ContentInfo + */ + public ContentInfo ContentInfo + { + get { return contentInfo; } + } + + /** + * return the ASN.1 encoded representation of this object. + */ + public byte[] GetEncoded() + { + return contentInfo.GetEncoded(); + } + + /** + * return the ASN.1 encoded representation of this object using the specified encoding. + * + * @param encoding the ASN.1 encoding format to use ("BER" or "DER"). + */ + public byte[] GetEncoded(string encoding) + { + return contentInfo.GetEncoded(encoding); + } + + /** + * Replace the signerinformation store associated with this + * CmsSignedData object with the new one passed in. You would + * probably only want to do this if you wanted to change the unsigned + * attributes associated with a signer, or perhaps delete one. + * + * @param signedData the signed data object to be used as a base. + * @param signerInformationStore the new signer information store to use. + * @return a new signed data object. + */ + public static CmsSignedData ReplaceSigners( + CmsSignedData signedData, + SignerInformationStore signerInformationStore) + { + // + // copy + // + CmsSignedData cms = new CmsSignedData(signedData); + + // + // replace the store + // + cms.signerInfoStore = signerInformationStore; + + // + // replace the signers in the SignedData object + // + Asn1EncodableVector digestAlgs = new Asn1EncodableVector(); + Asn1EncodableVector vec = new Asn1EncodableVector(); + + foreach (SignerInformation signer in signerInformationStore.GetSigners()) + { + digestAlgs.Add(Helper.FixAlgID(signer.DigestAlgorithmID)); + vec.Add(signer.ToSignerInfo()); + } + + Asn1Set digests = new DerSet(digestAlgs); + Asn1Set signers = new DerSet(vec); + Asn1Sequence sD = (Asn1Sequence)signedData.signedData.ToAsn1Object(); + + // + // signers are the last item in the sequence. + // + vec = new Asn1EncodableVector( + sD[0], // version + digests); + + for (int i = 2; i != sD.Count - 1; i++) + { + vec.Add(sD[i]); + } + + vec.Add(signers); + + cms.signedData = SignedData.GetInstance(new BerSequence(vec)); + + // + // replace the contentInfo with the new one + // + cms.contentInfo = new ContentInfo(cms.contentInfo.ContentType, cms.signedData); + + return cms; + } + + /** + * Replace the certificate and CRL information associated with this + * CmsSignedData object with the new one passed in. + * + * @param signedData the signed data object to be used as a base. + * @param x509Certs the new certificates to be used. + * @param x509Crls the new CRLs to be used. + * @return a new signed data object. + * @exception CmsException if there is an error processing the stores + */ + public static CmsSignedData ReplaceCertificatesAndCrls(CmsSignedData signedData, + IStore x509Certs, IStore x509Crls) + { + return ReplaceCertificatesAndRevocations(signedData, x509Certs, x509Crls, null, null); + } + + public static CmsSignedData ReplaceCertificatesAndCrls(CmsSignedData signedData, + IStore x509Certs, IStore x509Crls, + IStore x509AttrCerts) + { + return ReplaceCertificatesAndRevocations(signedData, x509Certs, x509Crls, x509AttrCerts, null); + } + + public static CmsSignedData ReplaceCertificatesAndRevocations(CmsSignedData signedData, + IStore x509Certs, IStore x509Crls, + IStore x509AttrCerts, IStore otherRevocationInfos) + { + // + // copy + // + CmsSignedData cms = new CmsSignedData(signedData); + + // + // replace the certs and crls in the SignedData object + // + Asn1Set certSet = null; + Asn1Set revocationSet = null; + + if (x509Certs != null || x509AttrCerts != null) + { + var certificates = new List(); + if (x509Certs != null) + { + certificates.AddRange(CmsUtilities.GetCertificatesFromStore(x509Certs)); + } + if (x509AttrCerts != null) + { + certificates.AddRange(CmsUtilities.GetAttributeCertificatesFromStore(x509AttrCerts)); + } + + Asn1Set berSet = CmsUtilities.CreateBerSetFromList(certificates); + if (berSet.Count > 0) + { + certSet = berSet; + } + } + + if (x509Crls != null || otherRevocationInfos != null) + { + var revocations = new List(); + if (x509Crls != null) + { + revocations.AddRange(CmsUtilities.GetCrlsFromStore(x509Crls)); + } + if (otherRevocationInfos != null) + { + revocations.AddRange(CmsUtilities.GetOtherRevocationInfosFromStore(otherRevocationInfos)); + } + + Asn1Set berSet = CmsUtilities.CreateBerSetFromList(revocations); + if (berSet.Count > 0) + { + revocationSet = berSet; + } + } + + // + // replace the CMS structure. + // + SignedData old = signedData.signedData; + cms.signedData = new SignedData( + old.DigestAlgorithms, + old.EncapContentInfo, + certSet, + revocationSet, + old.SignerInfos); + + // + // replace the contentInfo with the new one + // + cms.contentInfo = new ContentInfo(cms.contentInfo.ContentType, cms.signedData); + + return cms; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedData.cs.meta new file mode 100644 index 000000000..fe63dbf6a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c43e6a93201d37548a399de669fafeea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedDataGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedDataGenerator.cs new file mode 100644 index 000000000..a9dbdaaaa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedDataGenerator.cs @@ -0,0 +1,581 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * general class for generating a pkcs7-signature message. + *

+ * A simple example of usage. + * + *

+     *      IX509Store certs...
+     *      IX509Store crls...
+     *      CmsSignedDataGenerator gen = new CmsSignedDataGenerator();
+     *
+     *      gen.AddSigner(privKey, cert, CmsSignedGenerator.DigestSha1);
+     *      gen.AddCertificates(certs);
+     *      gen.AddCrls(crls);
+     *
+     *      CmsSignedData data = gen.Generate(content);
+     * 
+ *

+ */ + public class CmsSignedDataGenerator + : CmsSignedGenerator + { + private static readonly CmsSignedHelper Helper = CmsSignedHelper.Instance; + + private readonly IList signerInfs = new List(); + + private class SignerInf + { + private readonly CmsSignedGenerator outer; + + private readonly ISignatureFactory sigCalc; + private readonly SignerIdentifier signerIdentifier; + private readonly string digestOID; + private readonly string encOID; + private readonly CmsAttributeTableGenerator sAttr; + private readonly CmsAttributeTableGenerator unsAttr; + private readonly Asn1.Cms.AttributeTable baseSignedTable; + + internal SignerInf( + CmsSignedGenerator outer, + AsymmetricKeyParameter key, + SecureRandom random, + SignerIdentifier signerIdentifier, + string digestOID, + string encOID, + CmsAttributeTableGenerator sAttr, + CmsAttributeTableGenerator unsAttr, + Asn1.Cms.AttributeTable baseSignedTable) + { + string digestName = Helper.GetDigestAlgName(digestOID); + + string signatureName = digestName + "with" + Helper.GetEncryptionAlgName(encOID); + + this.outer = outer; + this.sigCalc = new Asn1SignatureFactory(signatureName, key, random); + this.signerIdentifier = signerIdentifier; + this.digestOID = digestOID; + this.encOID = encOID; + this.sAttr = sAttr; + this.unsAttr = unsAttr; + this.baseSignedTable = baseSignedTable; + } + + internal SignerInf( + CmsSignedGenerator outer, + ISignatureFactory sigCalc, + SignerIdentifier signerIdentifier, + CmsAttributeTableGenerator sAttr, + CmsAttributeTableGenerator unsAttr, + Asn1.Cms.AttributeTable baseSignedTable) + { + this.outer = outer; + this.sigCalc = sigCalc; + this.signerIdentifier = signerIdentifier; + this.digestOID = new DefaultDigestAlgorithmIdentifierFinder().Find( + (AlgorithmIdentifier)sigCalc.AlgorithmDetails).Algorithm.Id; + this.encOID = ((AlgorithmIdentifier)sigCalc.AlgorithmDetails).Algorithm.Id; + this.sAttr = sAttr; + this.unsAttr = unsAttr; + this.baseSignedTable = baseSignedTable; + } + + internal AlgorithmIdentifier DigestAlgorithmID + { + get { return new AlgorithmIdentifier(new DerObjectIdentifier(digestOID), DerNull.Instance); } + } + + internal CmsAttributeTableGenerator SignedAttributes + { + get { return sAttr; } + } + + internal CmsAttributeTableGenerator UnsignedAttributes + { + get { return unsAttr; } + } + + internal SignerInfo ToSignerInfo(DerObjectIdentifier contentType, CmsProcessable content) + { + AlgorithmIdentifier digAlgId = DigestAlgorithmID; + string digestName = Helper.GetDigestAlgName(digestOID); + + string signatureName = digestName + "with" + Helper.GetEncryptionAlgName(encOID); + + if (!outer.m_digests.TryGetValue(digestOID, out var hash)) + { + IDigest dig = Helper.GetDigestInstance(digestName); + if (content != null) + { + content.Write(new DigestSink(dig)); + } + hash = DigestUtilities.DoFinal(dig); + outer.m_digests.Add(digestOID, (byte[])hash.Clone()); + } + + Asn1Set signedAttr = null; + + IStreamCalculator calculator = sigCalc.CreateCalculator(); + using (Stream sigStr = calculator.Stream) + { + if (sAttr != null) + { + var parameters = outer.GetBaseParameters(contentType, digAlgId, hash); + + //Asn1.Cms.AttributeTable signed = sAttr.GetAttributes(Collections.unmodifiableMap(parameters)); + Asn1.Cms.AttributeTable signed = sAttr.GetAttributes(parameters); + + if (contentType == null) //counter signature + { + if (signed != null && signed[CmsAttributes.ContentType] != null) + { + signed = signed.Remove(CmsAttributes.ContentType); + } + } + + // TODO Validate proposed signed attributes + + signedAttr = outer.GetAttributeSet(signed); + + // sig must be composed from the DER encoding. + signedAttr.EncodeTo(sigStr, Asn1Encodable.Der); + } + else if (content != null) + { + // TODO Use raw signature of the hash value instead + content.Write(sigStr); + } + } + + byte[] sigBytes = calculator.GetResult().Collect(); + + Asn1Set unsignedAttr = null; + if (unsAttr != null) + { + var baseParameters = outer.GetBaseParameters(contentType, digAlgId, hash); + baseParameters[CmsAttributeTableParameter.Signature] = sigBytes.Clone(); + +// Asn1.Cms.AttributeTable unsigned = unsAttr.GetAttributes(Collections.unmodifiableMap(baseParameters)); + Asn1.Cms.AttributeTable unsigned = unsAttr.GetAttributes(baseParameters); + + // TODO Validate proposed unsigned attributes + + unsignedAttr = outer.GetAttributeSet(unsigned); + } + + // TODO[RSAPSS] Need the ability to specify non-default parameters + Asn1Encodable sigX509Parameters = SignerUtilities.GetDefaultX509Parameters(signatureName); + AlgorithmIdentifier encAlgId = Helper.GetEncAlgorithmIdentifier( + new DerObjectIdentifier(encOID), sigX509Parameters); + + return new SignerInfo(signerIdentifier, digAlgId, + signedAttr, encAlgId, new DerOctetString(sigBytes), unsignedAttr); + } + } + + public CmsSignedDataGenerator() + { + } + + /// Constructor allowing specific source of randomness + /// Instance of SecureRandom to use. + public CmsSignedDataGenerator(SecureRandom random) + : base(random) + { + } + + /** + * add a signer - no attributes other than the default ones will be + * provided here. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param digestOID digest algorithm OID + */ + public void AddSigner( + AsymmetricKeyParameter privateKey, + X509Certificate cert, + string digestOID) + { + AddSigner(privateKey, cert, Helper.GetEncOid(privateKey, digestOID), digestOID); + } + + /** + * add a signer, specifying the digest encryption algorithm to use - no attributes other than the default ones will be + * provided here. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param encryptionOID digest encryption algorithm OID + * @param digestOID digest algorithm OID + */ + public void AddSigner( + AsymmetricKeyParameter privateKey, + X509Certificate cert, + string encryptionOID, + string digestOID) + { + doAddSigner(privateKey, GetSignerIdentifier(cert), encryptionOID, digestOID, + new DefaultSignedAttributeTableGenerator(), null, null); + } + + /** + * add a signer - no attributes other than the default ones will be + * provided here. + */ + public void AddSigner( + AsymmetricKeyParameter privateKey, + byte[] subjectKeyID, + string digestOID) + { + AddSigner(privateKey, subjectKeyID, Helper.GetEncOid(privateKey, digestOID), digestOID); + } + + /** + * add a signer, specifying the digest encryption algorithm to use - no attributes other than the default ones will be + * provided here. + */ + public void AddSigner( + AsymmetricKeyParameter privateKey, + byte[] subjectKeyID, + string encryptionOID, + string digestOID) + { + doAddSigner(privateKey, GetSignerIdentifier(subjectKeyID), encryptionOID, digestOID, + new DefaultSignedAttributeTableGenerator(), null, null); + } + + /** + * add a signer with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + */ + public void AddSigner( + AsymmetricKeyParameter privateKey, + X509Certificate cert, + string digestOID, + Asn1.Cms.AttributeTable signedAttr, + Asn1.Cms.AttributeTable unsignedAttr) + { + AddSigner(privateKey, cert, Helper.GetEncOid(privateKey, digestOID), digestOID, + signedAttr, unsignedAttr); + } + + /** + * add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param encryptionOID digest encryption algorithm OID + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + */ + public void AddSigner( + AsymmetricKeyParameter privateKey, + X509Certificate cert, + string encryptionOID, + string digestOID, + Asn1.Cms.AttributeTable signedAttr, + Asn1.Cms.AttributeTable unsignedAttr) + { + doAddSigner(privateKey, GetSignerIdentifier(cert), encryptionOID, digestOID, + new DefaultSignedAttributeTableGenerator(signedAttr), + new SimpleAttributeTableGenerator(unsignedAttr), + signedAttr); + } + + /** + * add a signer with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param subjectKeyID subjectKeyID of corresponding public key + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + */ + public void AddSigner( + AsymmetricKeyParameter privateKey, + byte[] subjectKeyID, + string digestOID, + Asn1.Cms.AttributeTable signedAttr, + Asn1.Cms.AttributeTable unsignedAttr) + { + AddSigner(privateKey, subjectKeyID, Helper.GetEncOid(privateKey, digestOID), digestOID, + signedAttr, unsignedAttr); + } + + /** + * add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param subjectKeyID subjectKeyID of corresponding public key + * @param encryptionOID digest encryption algorithm OID + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + */ + public void AddSigner( + AsymmetricKeyParameter privateKey, + byte[] subjectKeyID, + string encryptionOID, + string digestOID, + Asn1.Cms.AttributeTable signedAttr, + Asn1.Cms.AttributeTable unsignedAttr) + { + doAddSigner(privateKey, GetSignerIdentifier(subjectKeyID), encryptionOID, digestOID, + new DefaultSignedAttributeTableGenerator(signedAttr), + new SimpleAttributeTableGenerator(unsignedAttr), + signedAttr); + } + + /** + * add a signer with extra signed/unsigned attributes based on generators. + */ + public void AddSigner( + AsymmetricKeyParameter privateKey, + X509Certificate cert, + string digestOID, + CmsAttributeTableGenerator signedAttrGen, + CmsAttributeTableGenerator unsignedAttrGen) + { + AddSigner(privateKey, cert, Helper.GetEncOid(privateKey, digestOID), digestOID, + signedAttrGen, unsignedAttrGen); + } + + /** + * add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes based on generators. + */ + public void AddSigner( + AsymmetricKeyParameter privateKey, + X509Certificate cert, + string encryptionOID, + string digestOID, + CmsAttributeTableGenerator signedAttrGen, + CmsAttributeTableGenerator unsignedAttrGen) + { + doAddSigner(privateKey, GetSignerIdentifier(cert), encryptionOID, digestOID, signedAttrGen, + unsignedAttrGen, null); + } + + /** + * add a signer with extra signed/unsigned attributes based on generators. + */ + public void AddSigner( + AsymmetricKeyParameter privateKey, + byte[] subjectKeyID, + string digestOID, + CmsAttributeTableGenerator signedAttrGen, + CmsAttributeTableGenerator unsignedAttrGen) + { + AddSigner(privateKey, subjectKeyID, Helper.GetEncOid(privateKey, digestOID), digestOID, + signedAttrGen, unsignedAttrGen); + } + + /** + * add a signer, including digest encryption algorithm, with extra signed/unsigned attributes based on generators. + */ + public void AddSigner( + AsymmetricKeyParameter privateKey, + byte[] subjectKeyID, + string encryptionOID, + string digestOID, + CmsAttributeTableGenerator signedAttrGen, + CmsAttributeTableGenerator unsignedAttrGen) + { + doAddSigner(privateKey, GetSignerIdentifier(subjectKeyID), encryptionOID, digestOID, + signedAttrGen, unsignedAttrGen, null); + } + + public void AddSignerInfoGenerator(SignerInfoGenerator signerInfoGenerator) + { + signerInfs.Add(new SignerInf(this, signerInfoGenerator.contentSigner, signerInfoGenerator.sigId, + signerInfoGenerator.signedGen, signerInfoGenerator.unsignedGen, null)); + } + + private void doAddSigner( + AsymmetricKeyParameter privateKey, + SignerIdentifier signerIdentifier, + string encryptionOID, + string digestOID, + CmsAttributeTableGenerator signedAttrGen, + CmsAttributeTableGenerator unsignedAttrGen, + Asn1.Cms.AttributeTable baseSignedTable) + { + signerInfs.Add(new SignerInf(this, privateKey, m_random, signerIdentifier, digestOID, encryptionOID, + signedAttrGen, unsignedAttrGen, baseSignedTable)); + } + + /** + * generate a signed object that for a CMS Signed Data object + */ + public CmsSignedData Generate( + CmsProcessable content) + { + return Generate(content, false); + } + + /** + * generate a signed object that for a CMS Signed Data + * object - if encapsulate is true a copy + * of the message will be included in the signature. The content type + * is set according to the OID represented by the string signedContentType. + */ + public CmsSignedData Generate( + string signedContentType, + // FIXME Avoid accessing more than once to support CmsProcessableInputStream + CmsProcessable content, + bool encapsulate) + { + Asn1EncodableVector digestAlgs = new Asn1EncodableVector(); + Asn1EncodableVector signerInfos = new Asn1EncodableVector(); + + m_digests.Clear(); // clear the current preserved digest state + + // + // add the precalculated SignerInfo objects. + // + foreach (SignerInformation signer in _signers) + { + digestAlgs.Add(Helper.FixAlgID(signer.DigestAlgorithmID)); + + // TODO Verify the content type and calculated digest match the precalculated SignerInfo + signerInfos.Add(signer.ToSignerInfo()); + } + + // + // add the SignerInfo objects + // + bool isCounterSignature = (signedContentType == null); + + DerObjectIdentifier contentTypeOid = isCounterSignature + ? null + : new DerObjectIdentifier(signedContentType); + + foreach (SignerInf signer in signerInfs) + { + try + { + digestAlgs.Add(signer.DigestAlgorithmID); + signerInfos.Add(signer.ToSignerInfo(contentTypeOid, content)); + } + catch (IOException e) + { + throw new CmsException("encoding error.", e); + } + catch (InvalidKeyException e) + { + throw new CmsException("key inappropriate for signature.", e); + } + catch (SignatureException e) + { + throw new CmsException("error creating signature.", e); + } + catch (CertificateEncodingException e) + { + throw new CmsException("error creating sid.", e); + } + } + + Asn1Set certificates = null; + + if (_certs.Count != 0) + { + certificates = UseDerForCerts + ? CmsUtilities.CreateDerSetFromList(_certs) + : CmsUtilities.CreateBerSetFromList(_certs); + } + + Asn1Set certrevlist = null; + + if (_crls.Count != 0) + { + certrevlist = UseDerForCrls + ? CmsUtilities.CreateDerSetFromList(_crls) + : CmsUtilities.CreateBerSetFromList(_crls); + } + + Asn1OctetString octs = null; + if (encapsulate) + { + MemoryStream bOut = new MemoryStream(); + if (content != null) + { + try + { + content.Write(bOut); + } + catch (IOException e) + { + throw new CmsException("encapsulation error.", e); + } + } + octs = new BerOctetString(bOut.ToArray()); + } + + ContentInfo encInfo = new ContentInfo(contentTypeOid, octs); + + SignedData sd = new SignedData( + new DerSet(digestAlgs), + encInfo, + certificates, + certrevlist, + new DerSet(signerInfos)); + + ContentInfo contentInfo = new ContentInfo(CmsObjectIdentifiers.SignedData, sd); + + return new CmsSignedData(content, contentInfo); + } + + /** + * generate a signed object that for a CMS Signed Data + * object - if encapsulate is true a copy + * of the message will be included in the signature with the + * default content type "data". + */ + public CmsSignedData Generate( + CmsProcessable content, + bool encapsulate) + { + return this.Generate(Data, content, encapsulate); + } + + /** + * generate a set of one or more SignerInformation objects representing counter signatures on + * the passed in SignerInformation object. + * + * @param signer the signer to be countersigned + * @param sigProvider the provider to be used for counter signing. + * @return a store containing the signers. + */ + public SignerInformationStore GenerateCounterSigners( + SignerInformation signer) + { + return this.Generate(null, new CmsProcessableByteArray(signer.GetSignature()), false).GetSignerInfos(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedDataGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedDataGenerator.cs.meta new file mode 100644 index 000000000..4c34f1eb8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedDataGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 027a8f21814c46547a37d4ef8abcb9f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedDataParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedDataParser.cs new file mode 100644 index 000000000..9f0febf37 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedDataParser.cs @@ -0,0 +1,435 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * Parsing class for an CMS Signed Data object from an input stream. + *

+ * Note: that because we are in a streaming mode only one signer can be tried and it is important + * that the methods on the parser are called in the appropriate order. + *

+ *

+ * A simple example of usage for an encapsulated signature. + *

+ *

+ * Two notes: first, in the example below the validity of + * the certificate isn't verified, just the fact that one of the certs + * matches the given signer, and, second, because we are in a streaming + * mode the order of the operations is important. + *

+ *
+	*      CmsSignedDataParser     sp = new CmsSignedDataParser(encapSigData);
+	*
+	*      sp.GetSignedContent().Drain();
+	*
+	*      IX509Store              certs = sp.GetCertificates();
+	*      SignerInformationStore  signers = sp.GetSignerInfos();
+	*
+	*      foreach (SignerInformation signer in signers.GetSigners())
+	*      {
+	*          ArrayList       certList = new ArrayList(certs.GetMatches(signer.SignerID));
+	*          X509Certificate cert = (X509Certificate) certList[0];
+	*
+	*          Console.WriteLine("verify returns: " + signer.Verify(cert));
+	*      }
+	* 
+ * Note also: this class does not introduce buffering - if you are processing large files you should create + * the parser with: + *
+	*          CmsSignedDataParser     ep = new CmsSignedDataParser(new BufferedInputStream(encapSigData, bufSize));
+	*  
+ * where bufSize is a suitably large buffer size. + */ + public class CmsSignedDataParser + : CmsContentInfoParser + { + private static readonly CmsSignedHelper Helper = CmsSignedHelper.Instance; + + private SignedDataParser _signedData; + private DerObjectIdentifier _signedContentType; + private CmsTypedStream _signedContent; + private IDictionary m_digests; + private HashSet _digestOids; + + private SignerInformationStore _signerInfoStore; + private Asn1Set _certSet, _crlSet; + private bool _isCertCrlParsed; + + public CmsSignedDataParser( + byte[] sigBlock) + : this(new MemoryStream(sigBlock, false)) + { + } + + public CmsSignedDataParser( + CmsTypedStream signedContent, + byte[] sigBlock) + : this(signedContent, new MemoryStream(sigBlock, false)) + { + } + + /** + * base constructor - with encapsulated content + */ + public CmsSignedDataParser( + Stream sigData) + : this(null, sigData) + { + } + + /** + * base constructor + * + * @param signedContent the content that was signed. + * @param sigData the signature object. + */ + public CmsSignedDataParser( + CmsTypedStream signedContent, + Stream sigData) + : base(sigData) + { + try + { + this._signedContent = signedContent; + this._signedData = SignedDataParser.GetInstance(this.contentInfo.GetContent(Asn1Tags.Sequence)); + this.m_digests = new Dictionary(StringComparer.OrdinalIgnoreCase); + this._digestOids = new HashSet(); + + Asn1SetParser digAlgs = _signedData.GetDigestAlgorithms(); + IAsn1Convertible o; + + while ((o = digAlgs.ReadObject()) != null) + { + AlgorithmIdentifier id = AlgorithmIdentifier.GetInstance(o.ToAsn1Object()); + + try + { + string digestOid = id.Algorithm.Id; + string digestName = Helper.GetDigestAlgName(digestOid); + + if (!this.m_digests.ContainsKey(digestName)) + { + this.m_digests[digestName] = Helper.GetDigestInstance(digestName); + this._digestOids.Add(digestOid); + } + } + catch (SecurityUtilityException) + { + // TODO Should do something other than ignore it + } + } + + // + // If the message is simply a certificate chain message GetContent() may return null. + // + ContentInfoParser cont = _signedData.GetEncapContentInfo(); + Asn1OctetStringParser octs = (Asn1OctetStringParser) + cont.GetContent(Asn1Tags.OctetString); + + if (octs != null) + { + CmsTypedStream ctStr = new CmsTypedStream( + cont.ContentType.Id, octs.GetOctetStream()); + + if (_signedContent == null) + { + this._signedContent = ctStr; + } + else + { + // + // content passed in, need to read past empty encapsulated content info object if present + // + ctStr.Drain(); + } + } + + _signedContentType = _signedContent == null + ? cont.ContentType + : new DerObjectIdentifier(_signedContent.ContentType); + } + catch (IOException e) + { + throw new CmsException("io exception: " + e.Message, e); + } + } + + /** + * Return the version number for the SignedData object + * + * @return the version number + */ + public int Version + { + get { return _signedData.Version.IntValueExact; } + } + + public ISet DigestOids + { + get { return new HashSet(_digestOids); } + } + + /** + * return the collection of signers that are associated with the + * signatures for the message. + * @throws CmsException + */ + public SignerInformationStore GetSignerInfos() + { + if (_signerInfoStore == null) + { + PopulateCertCrlSets(); + + var signerInfos = new List(); + var hashes = new Dictionary(StringComparer.OrdinalIgnoreCase); + + foreach (var digest in m_digests) + { + hashes[digest.Key] = DigestUtilities.DoFinal(digest.Value); + } + + try + { + Asn1SetParser s = _signedData.GetSignerInfos(); + IAsn1Convertible o; + + while ((o = s.ReadObject()) != null) + { + SignerInfo info = SignerInfo.GetInstance(o.ToAsn1Object()); + string digestName = Helper.GetDigestAlgName(info.DigestAlgorithm.Algorithm.Id); + + byte[] hash = hashes[digestName]; + + signerInfos.Add(new SignerInformation(info, _signedContentType, null, new BaseDigestCalculator(hash))); + } + } + catch (IOException e) + { + throw new CmsException("io exception: " + e.Message, e); + } + + _signerInfoStore = new SignerInformationStore(signerInfos); + } + + return _signerInfoStore; + } + + /** + * return a X509Store containing the attribute certificates, if any, contained + * in this message. + * + * @param type type of store to create + * @return a store of attribute certificates + * @exception org.bouncycastle.x509.NoSuchStoreException if the store type isn't available. + * @exception CmsException if a general exception prevents creation of the X509Store + */ + public IStore GetAttributeCertificates() + { + PopulateCertCrlSets(); + + return Helper.GetAttributeCertificates(_certSet); + } + + /** + * return a X509Store containing the public key certificates, if any, contained + * in this message. + * + * @param type type of store to create + * @return a store of public key certificates + * @exception NoSuchStoreException if the store type isn't available. + * @exception CmsException if a general exception prevents creation of the X509Store + */ + public IStore GetCertificates() + { + PopulateCertCrlSets(); + + return Helper.GetCertificates(_certSet); + } + + /** + * return a X509Store containing CRLs, if any, contained + * in this message. + * + * @param type type of store to create + * @return a store of CRLs + * @exception NoSuchStoreException if the store type isn't available. + * @exception CmsException if a general exception prevents creation of the X509Store + */ + public IStore GetCrls() + { + PopulateCertCrlSets(); + + return Helper.GetCrls(_crlSet); + } + + public IStore GetOtherRevInfos(DerObjectIdentifier otherRevInfoFormat) + { + PopulateCertCrlSets(); + + return Helper.GetOtherRevInfos(_crlSet, otherRevInfoFormat); + } + + private void PopulateCertCrlSets() + { + if (_isCertCrlParsed) + return; + + _isCertCrlParsed = true; + + try + { + // care! Streaming - Must process the GetCertificates() result before calling GetCrls() + _certSet = GetAsn1Set(_signedData.GetCertificates()); + _crlSet = GetAsn1Set(_signedData.GetCrls()); + } + catch (IOException e) + { + throw new CmsException("problem parsing cert/crl sets", e); + } + } + + /// + /// Return the DerObjectIdentifier associated with the encapsulated + /// content info structure carried in the signed data. + /// + public DerObjectIdentifier SignedContentType + { + get { return _signedContentType; } + } + + public CmsTypedStream GetSignedContent() + { + if (_signedContent == null) + { + return null; + } + + Stream digStream = _signedContent.ContentStream; + + foreach (var digest in m_digests.Values) + { + digStream = new DigestStream(digStream, digest, null); + } + + return new CmsTypedStream(_signedContent.ContentType, digStream); + } + + /** + * Replace the signerinformation store associated with the passed + * in message contained in the stream original with the new one passed in. + * You would probably only want to do this if you wanted to change the unsigned + * attributes associated with a signer, or perhaps delete one. + *

+ * The output stream is returned unclosed. + *

+ * @param original the signed data stream to be used as a base. + * @param signerInformationStore the new signer information store to use. + * @param out the stream to Write the new signed data object to. + * @return out. + */ + public static Stream ReplaceSigners( + Stream original, + SignerInformationStore signerInformationStore, + Stream outStr) + { + // NB: SecureRandom would be ignored since using existing signatures only + CmsSignedDataStreamGenerator gen = new CmsSignedDataStreamGenerator(); + CmsSignedDataParser parser = new CmsSignedDataParser(original); + +// gen.AddDigests(parser.DigestOids); + gen.AddSigners(signerInformationStore); + + CmsTypedStream signedContent = parser.GetSignedContent(); + bool encapsulate = (signedContent != null); + Stream contentOut = gen.Open(outStr, parser.SignedContentType.Id, encapsulate); + if (encapsulate) + { + Streams.PipeAll(signedContent.ContentStream, contentOut); + } + + gen.AddAttributeCertificates(parser.GetAttributeCertificates()); + gen.AddCertificates(parser.GetCertificates()); + gen.AddCrls(parser.GetCrls()); + +// gen.AddSigners(parser.GetSignerInfos()); + + contentOut.Dispose(); + + return outStr; + } + + /** + * Replace the certificate and CRL information associated with this + * CMSSignedData object with the new one passed in. + *

+ * The output stream is returned unclosed. + *

+ * @param original the signed data stream to be used as a base. + * @param certsAndCrls the new certificates and CRLs to be used. + * @param out the stream to Write the new signed data object to. + * @return out. + * @exception CmsException if there is an error processing the CertStore + */ + public static Stream ReplaceCertificatesAndCrls(Stream original, IStore x509Certs, + IStore x509Crls, IStore x509AttrCerts, Stream outStr) + { + // NB: SecureRandom would be ignored since using existing signatures only + CmsSignedDataStreamGenerator gen = new CmsSignedDataStreamGenerator(); + CmsSignedDataParser parser = new CmsSignedDataParser(original); + + gen.AddDigests(parser.DigestOids); + + CmsTypedStream signedContent = parser.GetSignedContent(); + bool encapsulate = (signedContent != null); + Stream contentOut = gen.Open(outStr, parser.SignedContentType.Id, encapsulate); + if (encapsulate) + { + Streams.PipeAll(signedContent.ContentStream, contentOut); + } + + if (x509AttrCerts != null) + { + gen.AddAttributeCertificates(x509AttrCerts); + } + if (x509Certs != null) + { + gen.AddCertificates(x509Certs); + } + if (x509Crls != null) + { + gen.AddCrls(x509Crls); + } + + gen.AddSigners(parser.GetSignerInfos()); + + contentOut.Dispose(); + + return outStr; + } + + private static Asn1Set GetAsn1Set( + Asn1SetParser asn1SetParser) + { + return asn1SetParser == null + ? null + : Asn1Set.GetInstance(asn1SetParser.ToAsn1Object()); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedDataParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedDataParser.cs.meta new file mode 100644 index 000000000..e3f0287cd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedDataParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ccc5588045627642964cdaa1b1fddcf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedDataStreamGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedDataStreamGenerator.cs new file mode 100644 index 000000000..f538bffad --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedDataStreamGenerator.cs @@ -0,0 +1,913 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * General class for generating a pkcs7-signature message stream. + *

+ * A simple example of usage. + *

+ *
+    *      IX509Store                   certs...
+    *      CmsSignedDataStreamGenerator gen = new CmsSignedDataStreamGenerator();
+    *
+    *      gen.AddSigner(privateKey, cert, CmsSignedDataStreamGenerator.DIGEST_SHA1);
+    *
+    *      gen.AddCertificates(certs);
+    *
+    *      Stream sigOut = gen.Open(bOut);
+    *
+    *      sigOut.Write(Encoding.UTF8.GetBytes("Hello World!"));
+    *
+    *      sigOut.Close();
+    * 
+ */ + public class CmsSignedDataStreamGenerator + : CmsSignedGenerator + { + private static readonly CmsSignedHelper Helper = CmsSignedHelper.Instance; + + private readonly IList _signerInfs = + new List(); + private readonly HashSet _messageDigestOids = new HashSet(); + private readonly IDictionary m_messageDigests = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private readonly IDictionary m_messageHashes = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private bool _messageDigestsLocked; + private int _bufferSize; + + private class DigestAndSignerInfoGeneratorHolder + { + internal readonly ISignerInfoGenerator signerInf; + internal readonly string digestOID; + + internal DigestAndSignerInfoGeneratorHolder(ISignerInfoGenerator signerInf, string digestOID) + { + this.signerInf = signerInf; + this.digestOID = digestOID; + } + + internal AlgorithmIdentifier DigestAlgorithm + { + get { return new AlgorithmIdentifier(new DerObjectIdentifier(this.digestOID), DerNull.Instance); } + } + } + + private class SignerInfoGeneratorImpl : ISignerInfoGenerator + { + private readonly CmsSignedDataStreamGenerator outer; + + private readonly SignerIdentifier _signerIdentifier; + private readonly string _digestOID; + private readonly string _encOID; + private readonly CmsAttributeTableGenerator _sAttr; + private readonly CmsAttributeTableGenerator _unsAttr; + private readonly string _encName; + private readonly ISigner _sig; + + internal SignerInfoGeneratorImpl( + CmsSignedDataStreamGenerator outer, + AsymmetricKeyParameter key, + SignerIdentifier signerIdentifier, + string digestOID, + string encOID, + CmsAttributeTableGenerator sAttr, + CmsAttributeTableGenerator unsAttr) + { + this.outer = outer; + + _signerIdentifier = signerIdentifier; + _digestOID = digestOID; + _encOID = encOID; + _sAttr = sAttr; + _unsAttr = unsAttr; + _encName = Helper.GetEncryptionAlgName(_encOID); + + string digestName = Helper.GetDigestAlgName(_digestOID); + string signatureName = digestName + "with" + _encName; + + if (_sAttr != null) + { + _sig = Helper.GetSignatureInstance(signatureName); + } + else + { + // Note: Need to use raw signatures here since we have already calculated the digest + if (_encName.Equals("RSA")) + { + _sig = Helper.GetSignatureInstance("RSA"); + } + else if (_encName.Equals("DSA")) + { + _sig = Helper.GetSignatureInstance("NONEwithDSA"); + } + // TODO Add support for raw PSS +// else if (_encName.equals("RSAandMGF1")) +// { +// _sig = CMSSignedHelper.INSTANCE.getSignatureInstance("NONEWITHRSAPSS", _sigProvider); +// try +// { +// // Init the params this way to avoid having a 'raw' version of each PSS algorithm +// Signature sig2 = CMSSignedHelper.INSTANCE.getSignatureInstance(signatureName, _sigProvider); +// PSSParameterSpec spec = (PSSParameterSpec)sig2.getParameters().getParameterSpec(PSSParameterSpec.class); +// _sig.setParameter(spec); +// } +// catch (Exception e) +// { +// throw new SignatureException("algorithm: " + _encName + " could not be configured."); +// } +// } + else + { + throw new SignatureException("algorithm: " + _encName + " not supported in base signatures."); + } + } + + _sig.Init(true, new ParametersWithRandom(key, outer.m_random)); + } + + public SignerInfo Generate(DerObjectIdentifier contentType, AlgorithmIdentifier digestAlgorithm, + byte[] calculatedDigest) + { + try + { + string digestName = Helper.GetDigestAlgName(_digestOID); + string signatureName = digestName + "with" + _encName; + +// AlgorithmIdentifier digAlgId = DigestAlgorithmID; +// +// byte[] hash = (byte[])outer._messageHashes[Helper.GetDigestAlgName(this._digestOID)]; +// outer._digests[_digestOID] = hash.Clone(); + + byte[] bytesToSign = calculatedDigest; + + /* RFC 3852 5.4 + * The result of the message digest calculation process depends on + * whether the signedAttrs field is present. When the field is absent, + * the result is just the message digest of the content as described + * + * above. When the field is present, however, the result is the message + * digest of the complete DER encoding of the SignedAttrs value + * contained in the signedAttrs field. + */ + Asn1Set signedAttr = null; + if (_sAttr != null) + { + var parameters = outer.GetBaseParameters(contentType, digestAlgorithm, calculatedDigest); + +// Asn1.Cms.AttributeTable signed = _sAttr.GetAttributes(Collections.unmodifiableMap(parameters)); + Asn1.Cms.AttributeTable signed = _sAttr.GetAttributes(parameters); + + if (contentType == null) //counter signature + { + if (signed != null && signed[CmsAttributes.ContentType] != null) + { + signed = signed.Remove(CmsAttributes.ContentType); + } + } + + signedAttr = outer.GetAttributeSet(signed); + + // sig must be composed from the DER encoding. + bytesToSign = signedAttr.GetEncoded(Asn1Encodable.Der); + } + else + { + // Note: Need to use raw signatures here since we have already calculated the digest + if (_encName.Equals("RSA")) + { + DigestInfo dInfo = new DigestInfo(digestAlgorithm, calculatedDigest); + bytesToSign = dInfo.GetEncoded(Asn1Encodable.Der); + } + } + + _sig.BlockUpdate(bytesToSign, 0, bytesToSign.Length); + byte[] sigBytes = _sig.GenerateSignature(); + + Asn1Set unsignedAttr = null; + if (_unsAttr != null) + { + var parameters = outer.GetBaseParameters(contentType, digestAlgorithm, calculatedDigest); + parameters[CmsAttributeTableParameter.Signature] = sigBytes.Clone(); + +// Asn1.Cms.AttributeTable unsigned = _unsAttr.getAttributes(Collections.unmodifiableMap(parameters)); + Asn1.Cms.AttributeTable unsigned = _unsAttr.GetAttributes(parameters); + + unsignedAttr = outer.GetAttributeSet(unsigned); + } + + // TODO[RSAPSS] Need the ability to specify non-default parameters + Asn1Encodable sigX509Parameters = SignerUtilities.GetDefaultX509Parameters(signatureName); + AlgorithmIdentifier digestEncryptionAlgorithm = Helper.GetEncAlgorithmIdentifier( + new DerObjectIdentifier(_encOID), sigX509Parameters); + + return new SignerInfo(_signerIdentifier, digestAlgorithm, + signedAttr, digestEncryptionAlgorithm, new DerOctetString(sigBytes), unsignedAttr); + } + catch (IOException e) + { + throw new CmsStreamException("encoding error.", e); + } + catch (SignatureException e) + { + throw new CmsStreamException("error creating signature.", e); + } + } + } + + public CmsSignedDataStreamGenerator() + { + } + + /// Constructor allowing specific source of randomness + /// Instance of SecureRandom to use. + public CmsSignedDataStreamGenerator(SecureRandom random) + : base(random) + { + } + + /** + * Set the underlying string size for encapsulated data + * + * @param bufferSize length of octet strings to buffer the data. + */ + public void SetBufferSize(int bufferSize) + { + _bufferSize = bufferSize; + } + + public void AddDigests(params string[] digestOids) + { + foreach (string digestOid in digestOids) + { + ConfigureDigest(digestOid); + } + } + + public void AddDigests(IEnumerable digestOids) + { + foreach (string digestOid in digestOids) + { + ConfigureDigest(digestOid); + } + } + + /** + * add a signer - no attributes other than the default ones will be + * provided here. + * @throws NoSuchAlgorithmException + * @throws InvalidKeyException + */ + public void AddSigner( + AsymmetricKeyParameter privateKey, + X509Certificate cert, + string digestOid) + { + AddSigner(privateKey, cert, digestOid, + new DefaultSignedAttributeTableGenerator(), null); + } + + /** + * add a signer, specifying the digest encryption algorithm - no attributes other than the default ones will be + * provided here. + * @throws NoSuchProviderException + * @throws NoSuchAlgorithmException + * @throws InvalidKeyException + */ + public void AddSigner( + AsymmetricKeyParameter privateKey, + X509Certificate cert, + string encryptionOid, + string digestOid) + { + AddSigner(privateKey, cert, encryptionOid, digestOid, + new DefaultSignedAttributeTableGenerator(), + (CmsAttributeTableGenerator)null); + } + + /** + * add a signer with extra signed/unsigned attributes. + * @throws NoSuchAlgorithmException + * @throws InvalidKeyException + */ + public void AddSigner( + AsymmetricKeyParameter privateKey, + X509Certificate cert, + string digestOid, + Asn1.Cms.AttributeTable signedAttr, + Asn1.Cms.AttributeTable unsignedAttr) + { + AddSigner(privateKey, cert, digestOid, + new DefaultSignedAttributeTableGenerator(signedAttr), + new SimpleAttributeTableGenerator(unsignedAttr)); + } + + /** + * add a signer with extra signed/unsigned attributes - specifying digest + * encryption algorithm. + * @throws NoSuchProviderException + * @throws NoSuchAlgorithmException + * @throws InvalidKeyException + */ + public void AddSigner( + AsymmetricKeyParameter privateKey, + X509Certificate cert, + string encryptionOid, + string digestOid, + Asn1.Cms.AttributeTable signedAttr, + Asn1.Cms.AttributeTable unsignedAttr) + { + AddSigner(privateKey, cert, encryptionOid, digestOid, + new DefaultSignedAttributeTableGenerator(signedAttr), + new SimpleAttributeTableGenerator(unsignedAttr)); + } + + public void AddSigner( + AsymmetricKeyParameter privateKey, + X509Certificate cert, + string digestOid, + CmsAttributeTableGenerator signedAttrGenerator, + CmsAttributeTableGenerator unsignedAttrGenerator) + { + AddSigner(privateKey, cert, Helper.GetEncOid(privateKey, digestOid), digestOid, + signedAttrGenerator, unsignedAttrGenerator); + } + + public void AddSigner( + AsymmetricKeyParameter privateKey, + X509Certificate cert, + string encryptionOid, + string digestOid, + CmsAttributeTableGenerator signedAttrGenerator, + CmsAttributeTableGenerator unsignedAttrGenerator) + { + DoAddSigner(privateKey, GetSignerIdentifier(cert), encryptionOid, digestOid, + signedAttrGenerator, unsignedAttrGenerator); + } + + /** + * add a signer - no attributes other than the default ones will be + * provided here. + * @throws NoSuchAlgorithmException + * @throws InvalidKeyException + */ + public void AddSigner( + AsymmetricKeyParameter privateKey, + byte[] subjectKeyID, + string digestOid) + { + AddSigner(privateKey, subjectKeyID, digestOid, new DefaultSignedAttributeTableGenerator(), + (CmsAttributeTableGenerator)null); + } + + /** + * add a signer - no attributes other than the default ones will be + * provided here. + * @throws NoSuchProviderException + * @throws NoSuchAlgorithmException + * @throws InvalidKeyException + */ + public void AddSigner( + AsymmetricKeyParameter privateKey, + byte[] subjectKeyID, + string encryptionOid, + string digestOid) + { + AddSigner(privateKey, subjectKeyID, encryptionOid, digestOid, + new DefaultSignedAttributeTableGenerator(), + (CmsAttributeTableGenerator)null); + } + + /** + * add a signer with extra signed/unsigned attributes. + * @throws NoSuchAlgorithmException + * @throws InvalidKeyException + */ + public void AddSigner( + AsymmetricKeyParameter privateKey, + byte[] subjectKeyID, + string digestOid, + Asn1.Cms.AttributeTable signedAttr, + Asn1.Cms.AttributeTable unsignedAttr) + { + AddSigner(privateKey, subjectKeyID, digestOid, + new DefaultSignedAttributeTableGenerator(signedAttr), + new SimpleAttributeTableGenerator(unsignedAttr)); + } + + public void AddSigner( + AsymmetricKeyParameter privateKey, + byte[] subjectKeyID, + string digestOid, + CmsAttributeTableGenerator signedAttrGenerator, + CmsAttributeTableGenerator unsignedAttrGenerator) + { + AddSigner(privateKey, subjectKeyID, Helper.GetEncOid(privateKey, digestOid), + digestOid, signedAttrGenerator, unsignedAttrGenerator); + } + + public void AddSigner( + AsymmetricKeyParameter privateKey, + byte[] subjectKeyID, + string encryptionOid, + string digestOid, + CmsAttributeTableGenerator signedAttrGenerator, + CmsAttributeTableGenerator unsignedAttrGenerator) + { + DoAddSigner(privateKey, GetSignerIdentifier(subjectKeyID), encryptionOid, digestOid, + signedAttrGenerator, unsignedAttrGenerator); + } + + private void DoAddSigner( + AsymmetricKeyParameter privateKey, + SignerIdentifier signerIdentifier, + string encryptionOid, + string digestOid, + CmsAttributeTableGenerator signedAttrGenerator, + CmsAttributeTableGenerator unsignedAttrGenerator) + { + ConfigureDigest(digestOid); + + SignerInfoGeneratorImpl signerInf = new SignerInfoGeneratorImpl(this, privateKey, + signerIdentifier, digestOid, encryptionOid, signedAttrGenerator, unsignedAttrGenerator); + + _signerInfs.Add(new DigestAndSignerInfoGeneratorHolder(signerInf, digestOid)); + } + + internal override void AddSignerCallback( + SignerInformation si) + { + // FIXME If there were parameters in si.DigestAlgorithmID.Parameters, they are lost + // NB: Would need to call FixAlgID on the DigestAlgorithmID + + // For precalculated signers, just need to register the algorithm, not configure a digest + RegisterDigestOid(si.DigestAlgorithmID.Algorithm.Id); + } + + /** + * generate a signed object that for a CMS Signed Data object + */ + public Stream Open( + Stream outStream) + { + return Open(outStream, false); + } + + /** + * generate a signed object that for a CMS Signed Data + * object - if encapsulate is true a copy + * of the message will be included in the signature with the + * default content type "data". + */ + public Stream Open( + Stream outStream, + bool encapsulate) + { + return Open(outStream, Data, encapsulate); + } + + /** + * generate a signed object that for a CMS Signed Data + * object using the given provider - if encapsulate is true a copy + * of the message will be included in the signature with the + * default content type "data". If dataOutputStream is non null the data + * being signed will be written to the stream as it is processed. + * @param out stream the CMS object is to be written to. + * @param encapsulate true if data should be encapsulated. + * @param dataOutputStream output stream to copy the data being signed to. + */ + public Stream Open( + Stream outStream, + bool encapsulate, + Stream dataOutputStream) + { + return Open(outStream, Data, encapsulate, dataOutputStream); + } + + /** + * generate a signed object that for a CMS Signed Data + * object - if encapsulate is true a copy + * of the message will be included in the signature. The content type + * is set according to the OID represented by the string signedContentType. + */ + public Stream Open( + Stream outStream, + string signedContentType, + bool encapsulate) + { + return Open(outStream, signedContentType, encapsulate, null); + } + + /** + * generate a signed object that for a CMS Signed Data + * object using the given provider - if encapsulate is true a copy + * of the message will be included in the signature. The content type + * is set according to the OID represented by the string signedContentType. + * @param out stream the CMS object is to be written to. + * @param signedContentType OID for data to be signed. + * @param encapsulate true if data should be encapsulated. + * @param dataOutputStream output stream to copy the data being signed to. + */ + public Stream Open( + Stream outStream, + string signedContentType, + bool encapsulate, + Stream dataOutputStream) + { + if (outStream == null) + throw new ArgumentNullException("outStream"); + if (!outStream.CanWrite) + throw new ArgumentException("Expected writeable stream", "outStream"); + if (dataOutputStream != null && !dataOutputStream.CanWrite) + throw new ArgumentException("Expected writeable stream", "dataOutputStream"); + + _messageDigestsLocked = true; + + // + // ContentInfo + // + BerSequenceGenerator sGen = new BerSequenceGenerator(outStream); + + sGen.AddObject(CmsObjectIdentifiers.SignedData); + + // + // Signed Data + // + BerSequenceGenerator sigGen = new BerSequenceGenerator( + sGen.GetRawOutputStream(), 0, true); + + bool isCounterSignature = (signedContentType == null); + + DerObjectIdentifier contentTypeOid = isCounterSignature + ? null + : new DerObjectIdentifier(signedContentType); + + sigGen.AddObject(CalculateVersion(contentTypeOid)); + + Asn1EncodableVector digestAlgs = new Asn1EncodableVector(); + + foreach (string digestOid in _messageDigestOids) + { + digestAlgs.Add(new AlgorithmIdentifier(new DerObjectIdentifier(digestOid), DerNull.Instance)); + } + + new DerSet(digestAlgs).EncodeTo(sigGen.GetRawOutputStream()); + + BerSequenceGenerator eiGen = new BerSequenceGenerator(sigGen.GetRawOutputStream()); + eiGen.AddObject(contentTypeOid); + + // If encapsulating, add the data as an octet string in the sequence + Stream encapStream = encapsulate + ? CmsUtilities.CreateBerOctetOutputStream(eiGen.GetRawOutputStream(), 0, true, _bufferSize) + : null; + + // Also send the data to 'dataOutputStream' if necessary + Stream teeStream = GetSafeTeeOutputStream(dataOutputStream, encapStream); + + // Let all the digests see the data as it is written + Stream digStream = AttachDigestsToOutputStream(m_messageDigests.Values, teeStream); + + return new CmsSignedDataOutputStream(this, digStream, signedContentType, sGen, sigGen, eiGen); + } + + private void RegisterDigestOid( + string digestOid) + { + if (_messageDigestsLocked) + { + if (!_messageDigestOids.Contains(digestOid)) + throw new InvalidOperationException("Cannot register new digest OIDs after the data stream is opened"); + } + else + { + _messageDigestOids.Add(digestOid); + } + } + + private void ConfigureDigest(string digestOid) + { + RegisterDigestOid(digestOid); + + string digestName = Helper.GetDigestAlgName(digestOid); + + if (!m_messageDigests.ContainsKey(digestName)) + { + if (_messageDigestsLocked) + throw new InvalidOperationException("Cannot configure new digests after the data stream is opened"); + + m_messageDigests[digestName] = Helper.GetDigestInstance(digestName); + } + } + + // TODO Make public? + internal void Generate( + Stream outStream, + string eContentType, + bool encapsulate, + Stream dataOutputStream, + CmsProcessable content) + { + using (var signedOut = Open(outStream, eContentType, encapsulate, dataOutputStream)) + { + if (content != null) + { + content.Write(signedOut); + } + } + } + + // RFC3852, section 5.1: + // IF ((certificates is present) AND + // (any certificates with a type of other are present)) OR + // ((crls is present) AND + // (any crls with a type of other are present)) + // THEN version MUST be 5 + // ELSE + // IF (certificates is present) AND + // (any version 2 attribute certificates are present) + // THEN version MUST be 4 + // ELSE + // IF ((certificates is present) AND + // (any version 1 attribute certificates are present)) OR + // (any SignerInfo structures are version 3) OR + // (encapContentInfo eContentType is other than id-data) + // THEN version MUST be 3 + // ELSE version MUST be 1 + // + private DerInteger CalculateVersion( + DerObjectIdentifier contentOid) + { + bool otherCert = false; + bool otherCrl = false; + bool attrCertV1Found = false; + bool attrCertV2Found = false; + + if (_certs != null) + { + foreach (object obj in _certs) + { + if (obj is Asn1TaggedObject tagged) + { + if (tagged.TagNo == 1) + { + attrCertV1Found = true; + } + else if (tagged.TagNo == 2) + { + attrCertV2Found = true; + } + else if (tagged.TagNo == 3) + { + otherCert = true; + break; + } + } + } + } + + if (otherCert) + { + return new DerInteger(5); + } + + if (_crls != null) + { + foreach (object obj in _crls) + { + if (obj is Asn1TaggedObject) + { + otherCrl = true; + break; + } + } + } + + if (otherCrl) + { + return new DerInteger(5); + } + + if (attrCertV2Found) + { + return new DerInteger(4); + } + + if (attrCertV1Found || !CmsObjectIdentifiers.Data.Equals(contentOid) || CheckForVersion3(_signers)) + { + return new DerInteger(3); + } + + return new DerInteger(1); + } + + private bool CheckForVersion3(IList signerInfos) + { + foreach (SignerInformation si in signerInfos) + { + SignerInfo s = SignerInfo.GetInstance(si.ToSignerInfo()); + + if (s.Version.IntValueExact == 3) + return true; + } + + return false; + } + + private static Stream AttachDigestsToOutputStream(IEnumerable digests, Stream s) + { + Stream result = s; + foreach (IDigest digest in digests) + { + result = GetSafeTeeOutputStream(result, new DigestSink(digest)); + } + return result; + } + + private static Stream GetSafeOutputStream(Stream s) + { + return s ?? Stream.Null; + } + + private static Stream GetSafeTeeOutputStream(Stream s1, Stream s2) + { + if (s1 == null) + return GetSafeOutputStream(s2); + if (s2 == null) + return GetSafeOutputStream(s1); + return new TeeOutputStream(s1, s2); + } + + private class CmsSignedDataOutputStream + : BaseOutputStream + { + private readonly CmsSignedDataStreamGenerator outer; + + private Stream _out; + private DerObjectIdentifier _contentOID; + private BerSequenceGenerator _sGen; + private BerSequenceGenerator _sigGen; + private BerSequenceGenerator _eiGen; + + public CmsSignedDataOutputStream( + CmsSignedDataStreamGenerator outer, + Stream outStream, + string contentOID, + BerSequenceGenerator sGen, + BerSequenceGenerator sigGen, + BerSequenceGenerator eiGen) + { + this.outer = outer; + + _out = outStream; + _contentOID = new DerObjectIdentifier(contentOID); + _sGen = sGen; + _sigGen = sigGen; + _eiGen = eiGen; + } + + public override void Write(byte[] buffer, int offset, int count) + { + _out.Write(buffer, offset, count); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) + { + _out.Write(buffer); + } +#endif + + public override void WriteByte(byte value) + { + _out.WriteByte(value); + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + DoClose(); + } + base.Dispose(disposing); + } + + private void DoClose() + { + _out.Dispose(); + + // TODO Parent context(s) should really be be closed explicitly + + _eiGen.Close(); + + outer.m_digests.Clear(); // clear the current preserved digest state + + if (outer._certs.Count > 0) + { + Asn1Set certs = outer.UseDerForCerts + ? CmsUtilities.CreateDerSetFromList(outer._certs) + : CmsUtilities.CreateBerSetFromList(outer._certs); + + WriteToGenerator(_sigGen, new BerTaggedObject(false, 0, certs)); + } + + if (outer._crls.Count > 0) + { + Asn1Set crls = outer.UseDerForCrls + ? CmsUtilities.CreateDerSetFromList(outer._crls) + : CmsUtilities.CreateBerSetFromList(outer._crls); + + WriteToGenerator(_sigGen, new BerTaggedObject(false, 1, crls)); + } + + // + // Calculate the digest hashes + // + foreach (var de in outer.m_messageDigests) + { + outer.m_messageHashes.Add(de.Key, DigestUtilities.DoFinal(de.Value)); + } + + // TODO If the digest OIDs for precalculated signers weren't mixed in with + // the others, we could fill in outer._digests here, instead of SignerInfoGenerator.Generate + + // + // collect all the SignerInfo objects + // + Asn1EncodableVector signerInfos = new Asn1EncodableVector(); + + // + // add the generated SignerInfo objects + // + { + foreach (DigestAndSignerInfoGeneratorHolder holder in outer._signerInfs) + { + AlgorithmIdentifier digestAlgorithm = holder.DigestAlgorithm; + + byte[] calculatedDigest = outer.m_messageHashes[ + Helper.GetDigestAlgName(holder.digestOID)]; + outer.m_digests[holder.digestOID] = (byte[])calculatedDigest.Clone(); + + signerInfos.Add(holder.signerInf.Generate(_contentOID, digestAlgorithm, calculatedDigest)); + } + } + + // + // add the precalculated SignerInfo objects. + // + { + foreach (SignerInformation signer in outer._signers) + { + // TODO Verify the content type and calculated digest match the precalculated SignerInfo +// if (!signer.ContentType.Equals(_contentOID)) +// { +// // TODO The precalculated content type did not match - error? +// } +// +// byte[] calculatedDigest = (byte[])outer._digests[signer.DigestAlgOid]; +// if (calculatedDigest == null) +// { +// // TODO We can't confirm this digest because we didn't calculate it - error? +// } +// else +// { +// if (!Arrays.AreEqual(signer.GetContentDigest(), calculatedDigest)) +// { +// // TODO The precalculated digest did not match - error? +// } +// } + + signerInfos.Add(signer.ToSignerInfo()); + } + } + + WriteToGenerator(_sigGen, new DerSet(signerInfos)); + + _sigGen.Close(); + _sGen.Close(); + } + + private static void WriteToGenerator(Asn1Generator ag, Asn1Encodable ae) + { + ae.EncodeTo(ag.GetRawOutputStream()); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedDataStreamGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedDataStreamGenerator.cs.meta new file mode 100644 index 000000000..088a416a7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedDataStreamGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7609ff86af1d8cc4599341b4d5d36229 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedGenerator.cs new file mode 100644 index 000000000..b55b948cb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedGenerator.cs @@ -0,0 +1,664 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.BC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Bsi; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Eac; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.GM; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Rosstandart; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.TeleTrust; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + public class DefaultSignatureAlgorithmIdentifierFinder + { + private static readonly IDictionary m_algorithms = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly HashSet noParams = new HashSet(); + private static readonly IDictionary m_params = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly HashSet pkcs15RsaEncryption = new HashSet(); + private static readonly IDictionary m_digestOids = + new Dictionary(); + + //private static readonly DerObjectIdentifier ENCRYPTION_RSA = PkcsObjectIdentifiers.RsaEncryption; + //private static readonly DerObjectIdentifier ENCRYPTION_DSA = X9ObjectIdentifiers.IdDsaWithSha1; + //private static readonly DerObjectIdentifier ENCRYPTION_ECDSA = X9ObjectIdentifiers.ECDsaWithSha1; + //private static readonly DerObjectIdentifier ENCRYPTION_RSA_PSS = PkcsObjectIdentifiers.IdRsassaPss; + //private static readonly DerObjectIdentifier ENCRYPTION_GOST3410 = CryptoProObjectIdentifiers.GostR3410x94; + //private static readonly DerObjectIdentifier ENCRYPTION_ECGOST3410 = CryptoProObjectIdentifiers.GostR3410x2001; + //private static readonly DerObjectIdentifier ENCRYPTION_ECGOST3410_2012_256 = RosstandartObjectIdentifiers.id_tc26_gost_3410_12_256; + //private static readonly DerObjectIdentifier ENCRYPTION_ECGOST3410_2012_512 = RosstandartObjectIdentifiers.id_tc26_gost_3410_12_512; + + static DefaultSignatureAlgorithmIdentifierFinder() + { + m_algorithms["MD2WITHRSAENCRYPTION"] = PkcsObjectIdentifiers.MD2WithRsaEncryption; + m_algorithms["MD2WITHRSA"] = PkcsObjectIdentifiers.MD2WithRsaEncryption; + m_algorithms["MD5WITHRSAENCRYPTION"] = PkcsObjectIdentifiers.MD5WithRsaEncryption; + m_algorithms["MD5WITHRSA"] = PkcsObjectIdentifiers.MD5WithRsaEncryption; + m_algorithms["SHA1WITHRSAENCRYPTION"] = PkcsObjectIdentifiers.Sha1WithRsaEncryption; + m_algorithms["SHA-1WITHRSAENCRYPTION"] = PkcsObjectIdentifiers.Sha1WithRsaEncryption; + m_algorithms["SHA1WITHRSA"] = PkcsObjectIdentifiers.Sha1WithRsaEncryption; + m_algorithms["SHA-1WITHRSA"] = PkcsObjectIdentifiers.Sha1WithRsaEncryption; + m_algorithms["SHA224WITHRSAENCRYPTION"] = PkcsObjectIdentifiers.Sha224WithRsaEncryption; + m_algorithms["SHA-224WITHRSAENCRYPTION"] = PkcsObjectIdentifiers.Sha224WithRsaEncryption; + m_algorithms["SHA224WITHRSA"] = PkcsObjectIdentifiers.Sha224WithRsaEncryption; + m_algorithms["SHA-224WITHRSA"] = PkcsObjectIdentifiers.Sha224WithRsaEncryption; + m_algorithms["SHA256WITHRSAENCRYPTION"] = PkcsObjectIdentifiers.Sha256WithRsaEncryption; + m_algorithms["SHA-256WITHRSAENCRYPTION"] = PkcsObjectIdentifiers.Sha256WithRsaEncryption; + m_algorithms["SHA256WITHRSA"] = PkcsObjectIdentifiers.Sha256WithRsaEncryption; + m_algorithms["SHA-256WITHRSA"] = PkcsObjectIdentifiers.Sha256WithRsaEncryption; + m_algorithms["SHA384WITHRSAENCRYPTION"] = PkcsObjectIdentifiers.Sha384WithRsaEncryption; + m_algorithms["SHA-384WITHRSAENCRYPTION"] = PkcsObjectIdentifiers.Sha384WithRsaEncryption; + m_algorithms["SHA384WITHRSA"] = PkcsObjectIdentifiers.Sha384WithRsaEncryption; + m_algorithms["SHA-384WITHRSA"] = PkcsObjectIdentifiers.Sha384WithRsaEncryption; + m_algorithms["SHA512WITHRSAENCRYPTION"] = PkcsObjectIdentifiers.Sha512WithRsaEncryption; + m_algorithms["SHA-512WITHRSAENCRYPTION"] = PkcsObjectIdentifiers.Sha512WithRsaEncryption; + m_algorithms["SHA512WITHRSA"] = PkcsObjectIdentifiers.Sha512WithRsaEncryption; + m_algorithms["SHA-512WITHRSA"] = PkcsObjectIdentifiers.Sha512WithRsaEncryption; + m_algorithms["SHA512(224)WITHRSAENCRYPTION"] = PkcsObjectIdentifiers.Sha512_224WithRSAEncryption; + m_algorithms["SHA-512(224)WITHRSAENCRYPTION"] = PkcsObjectIdentifiers.Sha512_224WithRSAEncryption; + m_algorithms["SHA512(224)WITHRSA"] = PkcsObjectIdentifiers.Sha512_224WithRSAEncryption; + m_algorithms["SHA-512(224)WITHRSA"] = PkcsObjectIdentifiers.Sha512_224WithRSAEncryption; + m_algorithms["SHA512(256)WITHRSAENCRYPTION"] = PkcsObjectIdentifiers.Sha512_256WithRSAEncryption; + m_algorithms["SHA-512(256)WITHRSAENCRYPTION"] = PkcsObjectIdentifiers.Sha512_256WithRSAEncryption; + m_algorithms["SHA512(256)WITHRSA"] = PkcsObjectIdentifiers.Sha512_256WithRSAEncryption; + m_algorithms["SHA-512(256)WITHRSA"] = PkcsObjectIdentifiers.Sha512_256WithRSAEncryption; + m_algorithms["SHA1WITHRSAANDMGF1"] = PkcsObjectIdentifiers.IdRsassaPss; + m_algorithms["SHA224WITHRSAANDMGF1"] = PkcsObjectIdentifiers.IdRsassaPss; + m_algorithms["SHA256WITHRSAANDMGF1"] = PkcsObjectIdentifiers.IdRsassaPss; + m_algorithms["SHA384WITHRSAANDMGF1"] = PkcsObjectIdentifiers.IdRsassaPss; + m_algorithms["SHA512WITHRSAANDMGF1"] = PkcsObjectIdentifiers.IdRsassaPss; + m_algorithms["SHA3-224WITHRSAANDMGF1"] = PkcsObjectIdentifiers.IdRsassaPss; + m_algorithms["SHA3-256WITHRSAANDMGF1"] = PkcsObjectIdentifiers.IdRsassaPss; + m_algorithms["SHA3-384WITHRSAANDMGF1"] = PkcsObjectIdentifiers.IdRsassaPss; + m_algorithms["SHA3-512WITHRSAANDMGF1"] = PkcsObjectIdentifiers.IdRsassaPss; + m_algorithms["RIPEMD160WITHRSAENCRYPTION"] = TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD160; + m_algorithms["RIPEMD160WITHRSA"] = TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD160; + m_algorithms["RIPEMD128WITHRSAENCRYPTION"] = TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD128; + m_algorithms["RIPEMD128WITHRSA"] = TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD128; + m_algorithms["RIPEMD256WITHRSAENCRYPTION"] = TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD256; + m_algorithms["RIPEMD256WITHRSA"] = TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD256; + m_algorithms["SHA1WITHDSA"] = X9ObjectIdentifiers.IdDsaWithSha1; + m_algorithms["SHA-1WITHDSA"] = X9ObjectIdentifiers.IdDsaWithSha1; + m_algorithms["DSAWITHSHA1"] = X9ObjectIdentifiers.IdDsaWithSha1; + m_algorithms["SHA224WITHDSA"] = NistObjectIdentifiers.DsaWithSha224; + m_algorithms["SHA256WITHDSA"] = NistObjectIdentifiers.DsaWithSha256; + m_algorithms["SHA384WITHDSA"] = NistObjectIdentifiers.DsaWithSha384; + m_algorithms["SHA512WITHDSA"] = NistObjectIdentifiers.DsaWithSha512; + m_algorithms["SHA3-224WITHDSA"] = NistObjectIdentifiers.IdDsaWithSha3_224; + m_algorithms["SHA3-256WITHDSA"] = NistObjectIdentifiers.IdDsaWithSha3_256; + m_algorithms["SHA3-384WITHDSA"] = NistObjectIdentifiers.IdDsaWithSha3_384; + m_algorithms["SHA3-512WITHDSA"] = NistObjectIdentifiers.IdDsaWithSha3_512; + m_algorithms["SHA3-224WITHECDSA"] = NistObjectIdentifiers.IdEcdsaWithSha3_224; + m_algorithms["SHA3-256WITHECDSA"] = NistObjectIdentifiers.IdEcdsaWithSha3_256; + m_algorithms["SHA3-384WITHECDSA"] = NistObjectIdentifiers.IdEcdsaWithSha3_384; + m_algorithms["SHA3-512WITHECDSA"] = NistObjectIdentifiers.IdEcdsaWithSha3_512; + m_algorithms["SHA3-224WITHRSA"] = NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_224; + m_algorithms["SHA3-256WITHRSA"] = NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_256; + m_algorithms["SHA3-384WITHRSA"] = NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_384; + m_algorithms["SHA3-512WITHRSA"] = NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_512; + m_algorithms["SHA3-224WITHRSAENCRYPTION"] = NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_224; + m_algorithms["SHA3-256WITHRSAENCRYPTION"] = NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_256; + m_algorithms["SHA3-384WITHRSAENCRYPTION"] = NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_384; + m_algorithms["SHA3-512WITHRSAENCRYPTION"] = NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_512; + m_algorithms["SHA1WITHECDSA"] = X9ObjectIdentifiers.ECDsaWithSha1; + m_algorithms["ECDSAWITHSHA1"] = X9ObjectIdentifiers.ECDsaWithSha1; + m_algorithms["SHA224WITHECDSA"] = X9ObjectIdentifiers.ECDsaWithSha224; + m_algorithms["SHA256WITHECDSA"] = X9ObjectIdentifiers.ECDsaWithSha256; + m_algorithms["SHA384WITHECDSA"] = X9ObjectIdentifiers.ECDsaWithSha384; + m_algorithms["SHA512WITHECDSA"] = X9ObjectIdentifiers.ECDsaWithSha512; + + + m_algorithms["GOST3411WITHGOST3410"] = CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94; + m_algorithms["GOST3411WITHGOST3410-94"] = CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94; + m_algorithms["GOST3411WITHECGOST3410"] = CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001; + m_algorithms["GOST3411WITHECGOST3410-2001"] = CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001; + m_algorithms["GOST3411WITHGOST3410-2001"] = CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001; + m_algorithms["GOST3411WITHECGOST3410-2012-256"] = RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_256; + m_algorithms["GOST3411WITHECGOST3410-2012-512"] = RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_512; + m_algorithms["GOST3411-2012-256WITHECGOST3410"] = RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_256; + m_algorithms["GOST3411-2012-256WITHECGOST3410-2012-256"] = RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_256; + m_algorithms["GOST3411-2012-512WITHECGOST3410"] = RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_512; + m_algorithms["GOST3411-2012-512WITHECGOST3410-2012-512"] = RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_512; + m_algorithms["SHA1WITHPLAIN-ECDSA"] = BsiObjectIdentifiers.ecdsa_plain_SHA1; + m_algorithms["SHA224WITHPLAIN-ECDSA"] = BsiObjectIdentifiers.ecdsa_plain_SHA224; + m_algorithms["SHA256WITHPLAIN-ECDSA"] = BsiObjectIdentifiers.ecdsa_plain_SHA256; + m_algorithms["SHA384WITHPLAIN-ECDSA"] = BsiObjectIdentifiers.ecdsa_plain_SHA384; + m_algorithms["SHA512WITHPLAIN-ECDSA"] = BsiObjectIdentifiers.ecdsa_plain_SHA512; + m_algorithms["RIPEMD160WITHPLAIN-ECDSA"] = BsiObjectIdentifiers.ecdsa_plain_RIPEMD160; + m_algorithms["SHA1WITHCVC-ECDSA"] = EacObjectIdentifiers.id_TA_ECDSA_SHA_1; + m_algorithms["SHA224WITHCVC-ECDSA"] = EacObjectIdentifiers.id_TA_ECDSA_SHA_224; + m_algorithms["SHA256WITHCVC-ECDSA"] = EacObjectIdentifiers.id_TA_ECDSA_SHA_256; + m_algorithms["SHA384WITHCVC-ECDSA"] = EacObjectIdentifiers.id_TA_ECDSA_SHA_384; + m_algorithms["SHA512WITHCVC-ECDSA"] = EacObjectIdentifiers.id_TA_ECDSA_SHA_512; + m_algorithms["SHA3-512WITHSPHINCS256"] = BCObjectIdentifiers.sphincs256_with_SHA3_512; + m_algorithms["SHA512WITHSPHINCS256"] = BCObjectIdentifiers.sphincs256_with_SHA512; + + m_algorithms["SHA256WITHSM2"] = GMObjectIdentifiers.sm2sign_with_sha256; + m_algorithms["SM3WITHSM2"] = GMObjectIdentifiers.sm2sign_with_sm3; + + m_algorithms["SHA256WITHXMSS"] = BCObjectIdentifiers.xmss_with_SHA256; + m_algorithms["SHA512WITHXMSS"] = BCObjectIdentifiers.xmss_with_SHA512; + m_algorithms["SHAKE128WITHXMSS"] = BCObjectIdentifiers.xmss_with_SHAKE128; + m_algorithms["SHAKE256WITHXMSS"] = BCObjectIdentifiers.xmss_with_SHAKE256; + + m_algorithms["SHA256WITHXMSSMT"] = BCObjectIdentifiers.xmss_mt_with_SHA256; + m_algorithms["SHA512WITHXMSSMT"] = BCObjectIdentifiers.xmss_mt_with_SHA512; + m_algorithms["SHAKE128WITHXMSSMT"] = BCObjectIdentifiers.xmss_mt_with_SHAKE128; + m_algorithms["SHAKE256WITHXMSSMT"] = BCObjectIdentifiers.xmss_mt_with_SHAKE256; + + + // + // According to RFC 3279, the ASN.1 encoding SHALL (id-dsa-with-sha1) or MUST (ecdsa-with-SHA*) omit the parameters field. + // The parameters field SHALL be NULL for RSA based signature algorithms. + // + noParams.Add(X9ObjectIdentifiers.ECDsaWithSha1); + noParams.Add(X9ObjectIdentifiers.ECDsaWithSha224); + noParams.Add(X9ObjectIdentifiers.ECDsaWithSha256); + noParams.Add(X9ObjectIdentifiers.ECDsaWithSha384); + noParams.Add(X9ObjectIdentifiers.ECDsaWithSha512); + noParams.Add(X9ObjectIdentifiers.IdDsaWithSha1); + noParams.Add(NistObjectIdentifiers.DsaWithSha224); + noParams.Add(NistObjectIdentifiers.DsaWithSha256); + noParams.Add(NistObjectIdentifiers.DsaWithSha384); + noParams.Add(NistObjectIdentifiers.DsaWithSha512); + noParams.Add(NistObjectIdentifiers.IdDsaWithSha3_224); + noParams.Add(NistObjectIdentifiers.IdDsaWithSha3_256); + noParams.Add(NistObjectIdentifiers.IdDsaWithSha3_384); + noParams.Add(NistObjectIdentifiers.IdDsaWithSha3_512); + noParams.Add(NistObjectIdentifiers.IdEcdsaWithSha3_224); + noParams.Add(NistObjectIdentifiers.IdEcdsaWithSha3_256); + noParams.Add(NistObjectIdentifiers.IdEcdsaWithSha3_384); + noParams.Add(NistObjectIdentifiers.IdEcdsaWithSha3_512); + + + // + // RFC 4491 + // + noParams.Add(CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94); + noParams.Add(CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001); + noParams.Add(RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_256); + noParams.Add(RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_512); + + // + // SPHINCS-256 + // + noParams.Add(BCObjectIdentifiers.sphincs256_with_SHA512); + noParams.Add(BCObjectIdentifiers.sphincs256_with_SHA3_512); + + // + // XMSS + // + noParams.Add(BCObjectIdentifiers.xmss_with_SHA256); + noParams.Add(BCObjectIdentifiers.xmss_with_SHA512); + noParams.Add(BCObjectIdentifiers.xmss_with_SHAKE128); + noParams.Add(BCObjectIdentifiers.xmss_with_SHAKE256); + noParams.Add(BCObjectIdentifiers.xmss_mt_with_SHA256); + noParams.Add(BCObjectIdentifiers.xmss_mt_with_SHA512); + noParams.Add(BCObjectIdentifiers.xmss_mt_with_SHAKE128); + noParams.Add(BCObjectIdentifiers.xmss_mt_with_SHAKE256); + + // + // SM2 + // + noParams.Add(GMObjectIdentifiers.sm2sign_with_sha256); + noParams.Add(GMObjectIdentifiers.sm2sign_with_sm3); + + // + // PKCS 1.5 encrypted algorithms + // + pkcs15RsaEncryption.Add(PkcsObjectIdentifiers.Sha1WithRsaEncryption); + pkcs15RsaEncryption.Add(PkcsObjectIdentifiers.Sha224WithRsaEncryption); + pkcs15RsaEncryption.Add(PkcsObjectIdentifiers.Sha256WithRsaEncryption); + pkcs15RsaEncryption.Add(PkcsObjectIdentifiers.Sha384WithRsaEncryption); + pkcs15RsaEncryption.Add(PkcsObjectIdentifiers.Sha512WithRsaEncryption); + pkcs15RsaEncryption.Add(PkcsObjectIdentifiers.Sha512_224WithRSAEncryption); + pkcs15RsaEncryption.Add(PkcsObjectIdentifiers.Sha512_256WithRSAEncryption); + pkcs15RsaEncryption.Add(TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD128); + pkcs15RsaEncryption.Add(TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD160); + pkcs15RsaEncryption.Add(TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD256); + pkcs15RsaEncryption.Add(NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_224); + pkcs15RsaEncryption.Add(NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_256); + pkcs15RsaEncryption.Add(NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_384); + pkcs15RsaEncryption.Add(NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_512); + + // + // explicit params + // + AlgorithmIdentifier sha1AlgId = new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1, DerNull.Instance); + m_params["SHA1WITHRSAANDMGF1"] = CreatePssParams(sha1AlgId, 20); + + AlgorithmIdentifier sha224AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha224, DerNull.Instance); + m_params["SHA224WITHRSAANDMGF1"] = CreatePssParams(sha224AlgId, 28); + + AlgorithmIdentifier sha256AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha256, DerNull.Instance); + m_params["SHA256WITHRSAANDMGF1"] = CreatePssParams(sha256AlgId, 32); + + AlgorithmIdentifier sha384AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha384, DerNull.Instance); + m_params["SHA384WITHRSAANDMGF1"] = CreatePssParams(sha384AlgId, 48); + + AlgorithmIdentifier sha512AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha512, DerNull.Instance); + m_params["SHA512WITHRSAANDMGF1"] = CreatePssParams(sha512AlgId, 64); + + AlgorithmIdentifier sha3_224AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha3_224, DerNull.Instance); + m_params["SHA3-224WITHRSAANDMGF1"] = CreatePssParams(sha3_224AlgId, 28); + + AlgorithmIdentifier sha3_256AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha3_256, DerNull.Instance); + m_params["SHA3-256WITHRSAANDMGF1"] = CreatePssParams(sha3_256AlgId, 32); + + AlgorithmIdentifier sha3_384AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha3_384, DerNull.Instance); + m_params["SHA3-384WITHRSAANDMGF1"] = CreatePssParams(sha3_384AlgId, 48); + + AlgorithmIdentifier sha3_512AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha3_512, DerNull.Instance); + m_params["SHA3-512WITHRSAANDMGF1"] = CreatePssParams(sha3_512AlgId, 64); + + // + // digests + // + m_digestOids[PkcsObjectIdentifiers.Sha224WithRsaEncryption] = NistObjectIdentifiers.IdSha224; + m_digestOids[PkcsObjectIdentifiers.Sha256WithRsaEncryption] = NistObjectIdentifiers.IdSha256; + m_digestOids[PkcsObjectIdentifiers.Sha384WithRsaEncryption] = NistObjectIdentifiers.IdSha384; + m_digestOids[PkcsObjectIdentifiers.Sha512WithRsaEncryption] = NistObjectIdentifiers.IdSha512; + m_digestOids[PkcsObjectIdentifiers.Sha512_224WithRSAEncryption] = NistObjectIdentifiers.IdSha512_224; + m_digestOids[PkcsObjectIdentifiers.Sha512_256WithRSAEncryption] = NistObjectIdentifiers.IdSha512_256; + m_digestOids[NistObjectIdentifiers.DsaWithSha224] = NistObjectIdentifiers.IdSha224; + m_digestOids[NistObjectIdentifiers.DsaWithSha256] = NistObjectIdentifiers.IdSha256; + m_digestOids[NistObjectIdentifiers.DsaWithSha384] = NistObjectIdentifiers.IdSha384; + m_digestOids[NistObjectIdentifiers.DsaWithSha512] = NistObjectIdentifiers.IdSha512; + m_digestOids[NistObjectIdentifiers.IdDsaWithSha3_224] = NistObjectIdentifiers.IdSha3_224; + m_digestOids[NistObjectIdentifiers.IdDsaWithSha3_256] = NistObjectIdentifiers.IdSha3_256; + m_digestOids[NistObjectIdentifiers.IdDsaWithSha3_384] = NistObjectIdentifiers.IdSha3_384; + m_digestOids[NistObjectIdentifiers.IdDsaWithSha3_512] = NistObjectIdentifiers.IdSha3_512; + m_digestOids[NistObjectIdentifiers.IdEcdsaWithSha3_224] = NistObjectIdentifiers.IdSha3_224; + m_digestOids[NistObjectIdentifiers.IdEcdsaWithSha3_256] = NistObjectIdentifiers.IdSha3_256; + m_digestOids[NistObjectIdentifiers.IdEcdsaWithSha3_384] = NistObjectIdentifiers.IdSha3_384; + m_digestOids[NistObjectIdentifiers.IdEcdsaWithSha3_512] = NistObjectIdentifiers.IdSha3_512; + m_digestOids[NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_224] = NistObjectIdentifiers.IdSha3_224; + m_digestOids[NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_256] = NistObjectIdentifiers.IdSha3_256; + m_digestOids[NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_384] = NistObjectIdentifiers.IdSha3_384; + m_digestOids[NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_512] = NistObjectIdentifiers.IdSha3_512; + + m_digestOids[PkcsObjectIdentifiers.MD2WithRsaEncryption] = PkcsObjectIdentifiers.MD2; + m_digestOids[PkcsObjectIdentifiers.MD4WithRsaEncryption] = PkcsObjectIdentifiers.MD4; + m_digestOids[PkcsObjectIdentifiers.MD5WithRsaEncryption] = PkcsObjectIdentifiers.MD5; + m_digestOids[PkcsObjectIdentifiers.Sha1WithRsaEncryption] = OiwObjectIdentifiers.IdSha1; + m_digestOids[TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD128] = TeleTrusTObjectIdentifiers.RipeMD128; + m_digestOids[TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD160] = TeleTrusTObjectIdentifiers.RipeMD160; + m_digestOids[TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD256] = TeleTrusTObjectIdentifiers.RipeMD256; + m_digestOids[CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94] = CryptoProObjectIdentifiers.GostR3411; + m_digestOids[CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001] = CryptoProObjectIdentifiers.GostR3411; + m_digestOids[RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_256] = RosstandartObjectIdentifiers.id_tc26_gost_3411_12_256; + m_digestOids[RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_512] = RosstandartObjectIdentifiers.id_tc26_gost_3411_12_512; + + m_digestOids[GMObjectIdentifiers.sm2sign_with_sha256] = NistObjectIdentifiers.IdSha256; + m_digestOids[GMObjectIdentifiers.sm2sign_with_sm3] = GMObjectIdentifiers.sm3; + } + + private static AlgorithmIdentifier Generate(string signatureAlgorithm) + { + AlgorithmIdentifier sigAlgId; + //AlgorithmIdentifier encAlgId; + //AlgorithmIdentifier digAlgId; + + if (!m_algorithms.TryGetValue(signatureAlgorithm, out var sigOid)) + throw new ArgumentException("Unknown signature type requested: " + signatureAlgorithm); + + if (noParams.Contains(sigOid)) + { + sigAlgId = new AlgorithmIdentifier(sigOid); + } + else if (m_params.TryGetValue(signatureAlgorithm, out var explicitParameters)) + { + sigAlgId = new AlgorithmIdentifier(sigOid, explicitParameters); + } + else + { + sigAlgId = new AlgorithmIdentifier(sigOid, DerNull.Instance); + } + + //if (pkcs15RsaEncryption.Contains(sigOid)) + //{ + // encAlgId = new AlgorithmIdentifier(PkcsObjectIdentifiers.RsaEncryption, DerNull.Instance); + //} + //else + //{ + // encAlgId = sigAlgId; + //} + + //if (sigAlgId.Algorithm.Equals(PkcsObjectIdentifiers.IdRsassaPss)) + //{ + // digAlgId = ((RsassaPssParameters)sigAlgId.Parameters).HashAlgorithm; + //} + //else + //{ + // digAlgId = new AlgorithmIdentifier(m_digestOids[sigOid], DerNull.Instance); + //} + + return sigAlgId; + } + + private static RsassaPssParameters CreatePssParams(AlgorithmIdentifier hashAlgId, int saltSize) + { + return new RsassaPssParameters( + hashAlgId, + new AlgorithmIdentifier(PkcsObjectIdentifiers.IdMgf1, hashAlgId), + new DerInteger(saltSize), + new DerInteger(1)); + } + + public AlgorithmIdentifier Find(string sigAlgName) + { + return Generate(sigAlgName); + } + } + + public class DefaultDigestAlgorithmIdentifierFinder + { + private static readonly IDictionary m_digestOids = + new Dictionary(); + private static readonly IDictionary m_digestNameToOids = + new Dictionary(StringComparer.OrdinalIgnoreCase); + + static DefaultDigestAlgorithmIdentifierFinder() + { + // + // digests + // + m_digestOids.Add(OiwObjectIdentifiers.MD4WithRsaEncryption, PkcsObjectIdentifiers.MD4); + m_digestOids.Add(OiwObjectIdentifiers.MD4WithRsa, PkcsObjectIdentifiers.MD4); + m_digestOids.Add(OiwObjectIdentifiers.MD5WithRsa, PkcsObjectIdentifiers.MD5); + m_digestOids.Add(OiwObjectIdentifiers.Sha1WithRsa, OiwObjectIdentifiers.IdSha1); + m_digestOids.Add(OiwObjectIdentifiers.DsaWithSha1, OiwObjectIdentifiers.IdSha1); + + m_digestOids.Add(PkcsObjectIdentifiers.Sha224WithRsaEncryption, NistObjectIdentifiers.IdSha224); + m_digestOids.Add(PkcsObjectIdentifiers.Sha256WithRsaEncryption, NistObjectIdentifiers.IdSha256); + m_digestOids.Add(PkcsObjectIdentifiers.Sha384WithRsaEncryption, NistObjectIdentifiers.IdSha384); + m_digestOids.Add(PkcsObjectIdentifiers.Sha512WithRsaEncryption, NistObjectIdentifiers.IdSha512); + m_digestOids.Add(PkcsObjectIdentifiers.Sha512_224WithRSAEncryption, NistObjectIdentifiers.IdSha512_224); + m_digestOids.Add(PkcsObjectIdentifiers.Sha512_256WithRSAEncryption, NistObjectIdentifiers.IdSha512_256); + + m_digestOids.Add(NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_224, NistObjectIdentifiers.IdSha3_224); + m_digestOids.Add(NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_256, NistObjectIdentifiers.IdSha3_256); + m_digestOids.Add(NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_384, NistObjectIdentifiers.IdSha3_384); + m_digestOids.Add(NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_512, NistObjectIdentifiers.IdSha3_512); + + m_digestOids.Add(PkcsObjectIdentifiers.MD2WithRsaEncryption, PkcsObjectIdentifiers.MD2); + m_digestOids.Add(PkcsObjectIdentifiers.MD4WithRsaEncryption, PkcsObjectIdentifiers.MD4); + m_digestOids.Add(PkcsObjectIdentifiers.MD5WithRsaEncryption, PkcsObjectIdentifiers.MD5); + m_digestOids.Add(PkcsObjectIdentifiers.Sha1WithRsaEncryption, OiwObjectIdentifiers.IdSha1); + + m_digestOids.Add(X9ObjectIdentifiers.ECDsaWithSha1, OiwObjectIdentifiers.IdSha1); + m_digestOids.Add(X9ObjectIdentifiers.ECDsaWithSha224, NistObjectIdentifiers.IdSha224); + m_digestOids.Add(X9ObjectIdentifiers.ECDsaWithSha256, NistObjectIdentifiers.IdSha256); + m_digestOids.Add(X9ObjectIdentifiers.ECDsaWithSha384, NistObjectIdentifiers.IdSha384); + m_digestOids.Add(X9ObjectIdentifiers.ECDsaWithSha512, NistObjectIdentifiers.IdSha512); + m_digestOids.Add(X9ObjectIdentifiers.IdDsaWithSha1, OiwObjectIdentifiers.IdSha1); + + m_digestOids.Add(NistObjectIdentifiers.DsaWithSha224, NistObjectIdentifiers.IdSha224); + m_digestOids.Add(NistObjectIdentifiers.DsaWithSha256, NistObjectIdentifiers.IdSha256); + m_digestOids.Add(NistObjectIdentifiers.DsaWithSha384, NistObjectIdentifiers.IdSha384); + m_digestOids.Add(NistObjectIdentifiers.DsaWithSha512, NistObjectIdentifiers.IdSha512); + + m_digestOids.Add(TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD128, TeleTrusTObjectIdentifiers.RipeMD128); + m_digestOids.Add(TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD160, TeleTrusTObjectIdentifiers.RipeMD160); + m_digestOids.Add(TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD256, TeleTrusTObjectIdentifiers.RipeMD256); + + m_digestOids.Add(CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94, CryptoProObjectIdentifiers.GostR3411); + m_digestOids.Add(CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001, CryptoProObjectIdentifiers.GostR3411); + + m_digestNameToOids.Add("SHA-1", OiwObjectIdentifiers.IdSha1); + m_digestNameToOids.Add("SHA-224", NistObjectIdentifiers.IdSha224); + m_digestNameToOids.Add("SHA-256", NistObjectIdentifiers.IdSha256); + m_digestNameToOids.Add("SHA-384", NistObjectIdentifiers.IdSha384); + m_digestNameToOids.Add("SHA-512", NistObjectIdentifiers.IdSha512); + m_digestNameToOids.Add("SHA-512/224", NistObjectIdentifiers.IdSha512_224); + m_digestNameToOids.Add("SHA-512(224)", NistObjectIdentifiers.IdSha512_224); + m_digestNameToOids.Add("SHA-512/256", NistObjectIdentifiers.IdSha512_256); + m_digestNameToOids.Add("SHA-512(256)", NistObjectIdentifiers.IdSha512_256); + + m_digestNameToOids.Add("SHA1", OiwObjectIdentifiers.IdSha1); + m_digestNameToOids.Add("SHA224", NistObjectIdentifiers.IdSha224); + m_digestNameToOids.Add("SHA256", NistObjectIdentifiers.IdSha256); + m_digestNameToOids.Add("SHA384", NistObjectIdentifiers.IdSha384); + m_digestNameToOids.Add("SHA512", NistObjectIdentifiers.IdSha512); + m_digestNameToOids.Add("SHA512/224", NistObjectIdentifiers.IdSha512_224); + m_digestNameToOids.Add("SHA512(224)", NistObjectIdentifiers.IdSha512_224); + m_digestNameToOids.Add("SHA512/256", NistObjectIdentifiers.IdSha512_256); + m_digestNameToOids.Add("SHA512(256)", NistObjectIdentifiers.IdSha512_256); + + m_digestNameToOids.Add("SHA3-224", NistObjectIdentifiers.IdSha3_224); + m_digestNameToOids.Add("SHA3-256", NistObjectIdentifiers.IdSha3_256); + m_digestNameToOids.Add("SHA3-384", NistObjectIdentifiers.IdSha3_384); + m_digestNameToOids.Add("SHA3-512", NistObjectIdentifiers.IdSha3_512); + + m_digestNameToOids.Add("SHAKE-128", NistObjectIdentifiers.IdShake128); + m_digestNameToOids.Add("SHAKE-256", NistObjectIdentifiers.IdShake256); + + m_digestNameToOids.Add("GOST3411", CryptoProObjectIdentifiers.GostR3411); + + m_digestNameToOids.Add("MD2", PkcsObjectIdentifiers.MD2); + m_digestNameToOids.Add("MD4", PkcsObjectIdentifiers.MD4); + m_digestNameToOids.Add("MD5", PkcsObjectIdentifiers.MD5); + + m_digestNameToOids.Add("RIPEMD128", TeleTrusTObjectIdentifiers.RipeMD128); + m_digestNameToOids.Add("RIPEMD160", TeleTrusTObjectIdentifiers.RipeMD160); + m_digestNameToOids.Add("RIPEMD256", TeleTrusTObjectIdentifiers.RipeMD256); + } + + public AlgorithmIdentifier Find(AlgorithmIdentifier sigAlgId) + { + AlgorithmIdentifier digAlgId; + + if (sigAlgId.Algorithm.Equals(PkcsObjectIdentifiers.IdRsassaPss)) + { + digAlgId = RsassaPssParameters.GetInstance(sigAlgId.Parameters).HashAlgorithm; + } + else + { + digAlgId = new AlgorithmIdentifier(m_digestOids[sigAlgId.Algorithm], DerNull.Instance); + } + + return digAlgId; + } + + public AlgorithmIdentifier Find(string digAlgName) + { + return new AlgorithmIdentifier(m_digestNameToOids[digAlgName], DerNull.Instance); + } + } + + public abstract class CmsSignedGenerator + { + /** + * Default type for the signed data. + */ + public static readonly string Data = CmsObjectIdentifiers.Data.Id; + + public static readonly string DigestSha1 = OiwObjectIdentifiers.IdSha1.Id; + public static readonly string DigestSha224 = NistObjectIdentifiers.IdSha224.Id; + public static readonly string DigestSha256 = NistObjectIdentifiers.IdSha256.Id; + public static readonly string DigestSha384 = NistObjectIdentifiers.IdSha384.Id; + public static readonly string DigestSha512 = NistObjectIdentifiers.IdSha512.Id; + public static readonly string DigestSha512_224 = NistObjectIdentifiers.IdSha512_224.Id; + public static readonly string DigestSha512_256 = NistObjectIdentifiers.IdSha512_256.Id; + public static readonly string DigestMD5 = PkcsObjectIdentifiers.MD5.Id; + public static readonly string DigestGost3411 = CryptoProObjectIdentifiers.GostR3411.Id; + public static readonly string DigestRipeMD128 = TeleTrusTObjectIdentifiers.RipeMD128.Id; + public static readonly string DigestRipeMD160 = TeleTrusTObjectIdentifiers.RipeMD160.Id; + public static readonly string DigestRipeMD256 = TeleTrusTObjectIdentifiers.RipeMD256.Id; + + public static readonly string EncryptionRsa = PkcsObjectIdentifiers.RsaEncryption.Id; + public static readonly string EncryptionDsa = X9ObjectIdentifiers.IdDsaWithSha1.Id; + public static readonly string EncryptionECDsa = X9ObjectIdentifiers.ECDsaWithSha1.Id; + public static readonly string EncryptionRsaPss = PkcsObjectIdentifiers.IdRsassaPss.Id; + public static readonly string EncryptionGost3410 = CryptoProObjectIdentifiers.GostR3410x94.Id; + public static readonly string EncryptionECGost3410 = CryptoProObjectIdentifiers.GostR3410x2001.Id; + public static readonly string EncryptionECGost3410_2012_256 = RosstandartObjectIdentifiers.id_tc26_gost_3410_12_256.Id; + public static readonly string EncryptionECGost3410_2012_512 = RosstandartObjectIdentifiers.id_tc26_gost_3410_12_512.Id; + + internal List _certs = new List(); + internal List _crls = new List(); + internal IList _signers = new List(); + internal IDictionary m_digests = + new Dictionary(StringComparer.OrdinalIgnoreCase); + internal bool _useDerForCerts = false; + internal bool _useDerForCrls = false; + + protected readonly SecureRandom m_random; + + protected CmsSignedGenerator() + : this(CryptoServicesRegistrar.GetSecureRandom()) + { + } + + /// Constructor allowing specific source of randomness + /// Instance of SecureRandom to use. + protected CmsSignedGenerator(SecureRandom random) + { + if (random == null) + throw new ArgumentNullException(nameof(random)); + + m_random = random; + } + + internal protected virtual IDictionary GetBaseParameters( + DerObjectIdentifier contentType, AlgorithmIdentifier digAlgId, byte[] hash) + { + var param = new Dictionary(); + + if (contentType != null) + { + param[CmsAttributeTableParameter.ContentType] = contentType; + } + + param[CmsAttributeTableParameter.DigestAlgorithmIdentifier] = digAlgId; + param[CmsAttributeTableParameter.Digest] = hash.Clone(); + + return param; + } + + internal protected virtual Asn1Set GetAttributeSet( + Asn1.Cms.AttributeTable attr) + { + return attr == null + ? null + : new DerSet(attr.ToAsn1EncodableVector()); + } + + public void AddAttributeCertificate(X509V2AttributeCertificate attrCert) + { + _certs.Add(new DerTaggedObject(false, 2, attrCert.AttributeCertificate)); + } + + public void AddAttributeCertificates(IStore attrCertStore) + { + _certs.AddRange(CmsUtilities.GetAttributeCertificatesFromStore(attrCertStore)); + } + + public void AddCertificate(X509Certificate cert) + { + _certs.Add(cert.CertificateStructure); + } + + public void AddCertificates(IStore certStore) + { + _certs.AddRange(CmsUtilities.GetCertificatesFromStore(certStore)); + } + + public void AddCrl(X509Crl crl) + { + _crls.Add(crl.CertificateList); + } + + public void AddCrls(IStore crlStore) + { + _crls.AddRange(CmsUtilities.GetCrlsFromStore(crlStore)); + } + + public void AddOtherRevocationInfo(OtherRevocationInfoFormat otherRevocationInfo) + { + CmsUtilities.ValidateOtherRevocationInfo(otherRevocationInfo); + _crls.Add(new DerTaggedObject(false, 1, otherRevocationInfo)); + } + + public void AddOtherRevocationInfos(IStore otherRevocationInfoStore) + { + _crls.AddRange(CmsUtilities.GetOtherRevocationInfosFromStore(otherRevocationInfoStore)); + } + + public void AddOtherRevocationInfos(DerObjectIdentifier otherRevInfoFormat, + IStore otherRevInfoStore) + { + _crls.AddRange(CmsUtilities.GetOtherRevocationInfosFromStore(otherRevInfoStore, otherRevInfoFormat)); + } + + /** + * Add a store of precalculated signers to the generator. + * + * @param signerStore store of signers + */ + public void AddSigners(SignerInformationStore signerStore) + { + foreach (SignerInformation o in signerStore.GetSigners()) + { + _signers.Add(o); + AddSignerCallback(o); + } + } + + /** + * Return a map of oids and byte arrays representing the digests calculated on the content during + * the last generate. + * + * @return a map of oids (as string objects) and byte[] representing digests. + */ + public IDictionary GetGeneratedDigests() + { + return new Dictionary(m_digests, StringComparer.OrdinalIgnoreCase); + } + + public bool UseDerForCerts + { + get { return _useDerForCerts; } + set { this._useDerForCerts = value; } + } + + public bool UseDerForCrls + { + get { return _useDerForCrls; } + set { this._useDerForCrls = value; } + } + + internal virtual void AddSignerCallback( + SignerInformation si) + { + } + + internal static SignerIdentifier GetSignerIdentifier(X509Certificate cert) + { + return new SignerIdentifier(CmsUtilities.GetIssuerAndSerialNumber(cert)); + } + + internal static SignerIdentifier GetSignerIdentifier(byte[] subjectKeyIdentifier) + { + return new SignerIdentifier(new DerOctetString(subjectKeyIdentifier)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedGenerator.cs.meta new file mode 100644 index 000000000..50cecdfc3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 005c41845e2bb2c44b19515d790e39e7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedHelper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedHelper.cs new file mode 100644 index 000000000..0815c150e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedHelper.cs @@ -0,0 +1,382 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Eac; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Rosstandart; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.TeleTrust; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + internal class CmsSignedHelper + { + internal static readonly CmsSignedHelper Instance = new CmsSignedHelper(); + + private static readonly string EncryptionECDsaWithSha1 = X9ObjectIdentifiers.ECDsaWithSha1.Id; + private static readonly string EncryptionECDsaWithSha224 = X9ObjectIdentifiers.ECDsaWithSha224.Id; + private static readonly string EncryptionECDsaWithSha256 = X9ObjectIdentifiers.ECDsaWithSha256.Id; + private static readonly string EncryptionECDsaWithSha384 = X9ObjectIdentifiers.ECDsaWithSha384.Id; + private static readonly string EncryptionECDsaWithSha512 = X9ObjectIdentifiers.ECDsaWithSha512.Id; + + private static readonly IDictionary m_encryptionAlgs = new Dictionary(); + private static readonly IDictionary m_digestAlgs = new Dictionary(); + private static readonly IDictionary m_digestAliases = new Dictionary(); + + private static readonly HashSet noParams = new HashSet(); + private static readonly IDictionary m_ecAlgorithms = new Dictionary(); + + private static void AddEntries(DerObjectIdentifier oid, string digest, string encryption) + { + string alias = oid.Id; + m_digestAlgs.Add(alias, digest); + m_encryptionAlgs.Add(alias, encryption); + } + + static CmsSignedHelper() + { + AddEntries(NistObjectIdentifiers.DsaWithSha224, "SHA224", "DSA"); + AddEntries(NistObjectIdentifiers.DsaWithSha256, "SHA256", "DSA"); + AddEntries(NistObjectIdentifiers.DsaWithSha384, "SHA384", "DSA"); + AddEntries(NistObjectIdentifiers.DsaWithSha512, "SHA512", "DSA"); + AddEntries(OiwObjectIdentifiers.DsaWithSha1, "SHA1", "DSA"); + AddEntries(OiwObjectIdentifiers.MD4WithRsa, "MD4", "RSA"); + AddEntries(OiwObjectIdentifiers.MD4WithRsaEncryption, "MD4", "RSA"); + AddEntries(OiwObjectIdentifiers.MD5WithRsa, "MD5", "RSA"); + AddEntries(OiwObjectIdentifiers.Sha1WithRsa, "SHA1", "RSA"); + AddEntries(PkcsObjectIdentifiers.MD2WithRsaEncryption, "MD2", "RSA"); + AddEntries(PkcsObjectIdentifiers.MD4WithRsaEncryption, "MD4", "RSA"); + AddEntries(PkcsObjectIdentifiers.MD5WithRsaEncryption, "MD5", "RSA"); + AddEntries(PkcsObjectIdentifiers.Sha1WithRsaEncryption, "SHA1", "RSA"); + AddEntries(PkcsObjectIdentifiers.Sha224WithRsaEncryption, "SHA224", "RSA"); + AddEntries(PkcsObjectIdentifiers.Sha256WithRsaEncryption, "SHA256", "RSA"); + AddEntries(PkcsObjectIdentifiers.Sha384WithRsaEncryption, "SHA384", "RSA"); + AddEntries(PkcsObjectIdentifiers.Sha512WithRsaEncryption, "SHA512", "RSA"); + AddEntries(PkcsObjectIdentifiers.Sha512_224WithRSAEncryption, "SHA512(224)", "RSA"); + AddEntries(PkcsObjectIdentifiers.Sha512_256WithRSAEncryption, "SHA512(256)", "RSA"); + AddEntries(NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_224, "SHA3-224", "RSA"); + AddEntries(NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_256, "SHA3-256", "RSA"); + AddEntries(NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_384, "SHA3-384", "RSA"); + AddEntries(NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_512, "SHA3-512", "RSA"); + AddEntries(X9ObjectIdentifiers.ECDsaWithSha1, "SHA1", "ECDSA"); + AddEntries(X9ObjectIdentifiers.ECDsaWithSha224, "SHA224", "ECDSA"); + AddEntries(X9ObjectIdentifiers.ECDsaWithSha256, "SHA256", "ECDSA"); + AddEntries(X9ObjectIdentifiers.ECDsaWithSha384, "SHA384", "ECDSA"); + AddEntries(X9ObjectIdentifiers.ECDsaWithSha512, "SHA512", "ECDSA"); + AddEntries(X9ObjectIdentifiers.IdDsaWithSha1, "SHA1", "DSA"); + AddEntries(EacObjectIdentifiers.id_TA_ECDSA_SHA_1, "SHA1", "ECDSA"); + AddEntries(EacObjectIdentifiers.id_TA_ECDSA_SHA_224, "SHA224", "ECDSA"); + AddEntries(EacObjectIdentifiers.id_TA_ECDSA_SHA_256, "SHA256", "ECDSA"); + AddEntries(EacObjectIdentifiers.id_TA_ECDSA_SHA_384, "SHA384", "ECDSA"); + AddEntries(EacObjectIdentifiers.id_TA_ECDSA_SHA_512, "SHA512", "ECDSA"); + AddEntries(EacObjectIdentifiers.id_TA_RSA_v1_5_SHA_1, "SHA1", "RSA"); + AddEntries(EacObjectIdentifiers.id_TA_RSA_v1_5_SHA_256, "SHA256", "RSA"); + AddEntries(EacObjectIdentifiers.id_TA_RSA_PSS_SHA_1, "SHA1", "RSAandMGF1"); + AddEntries(EacObjectIdentifiers.id_TA_RSA_PSS_SHA_256, "SHA256", "RSAandMGF1"); + AddEntries(CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94, "GOST3411", "GOST3410"); + AddEntries(CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001, "GOST3411", "ECGOST3410"); + AddEntries(RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_256, "GOST3411-2012-256", "ECGOST3410"); + AddEntries(RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_512, "GOST3411-2012-512", "ECGOST3410"); + + m_encryptionAlgs.Add(X9ObjectIdentifiers.IdDsa.Id, "DSA"); + m_encryptionAlgs.Add(PkcsObjectIdentifiers.RsaEncryption.Id, "RSA"); + m_encryptionAlgs.Add(TeleTrusTObjectIdentifiers.TeleTrusTRsaSignatureAlgorithm.Id, "RSA"); + m_encryptionAlgs.Add(X509ObjectIdentifiers.IdEARsa.Id, "RSA"); + m_encryptionAlgs.Add(CmsSignedGenerator.EncryptionRsaPss, "RSAandMGF1"); + m_encryptionAlgs.Add(CryptoProObjectIdentifiers.GostR3410x94.Id, "GOST3410"); + m_encryptionAlgs.Add(CryptoProObjectIdentifiers.GostR3410x2001.Id, "ECGOST3410"); + m_encryptionAlgs.Add(RosstandartObjectIdentifiers.id_tc26_gost_3410_12_256.Id, "ECGOST3410"); + m_encryptionAlgs.Add(RosstandartObjectIdentifiers.id_tc26_gost_3410_12_512.Id, "ECGOST3410"); + m_encryptionAlgs.Add("1.3.6.1.4.1.5849.1.6.2", "ECGOST3410"); + m_encryptionAlgs.Add("1.3.6.1.4.1.5849.1.1.5", "GOST3410"); + + m_digestAlgs.Add(PkcsObjectIdentifiers.MD2.Id, "MD2"); + m_digestAlgs.Add(PkcsObjectIdentifiers.MD4.Id, "MD4"); + m_digestAlgs.Add(PkcsObjectIdentifiers.MD5.Id, "MD5"); + m_digestAlgs.Add(OiwObjectIdentifiers.IdSha1.Id, "SHA1"); + m_digestAlgs.Add(NistObjectIdentifiers.IdSha224.Id, "SHA224"); + m_digestAlgs.Add(NistObjectIdentifiers.IdSha256.Id, "SHA256"); + m_digestAlgs.Add(NistObjectIdentifiers.IdSha384.Id, "SHA384"); + m_digestAlgs.Add(NistObjectIdentifiers.IdSha512.Id, "SHA512"); + m_digestAlgs.Add(NistObjectIdentifiers.IdSha512_224.Id, "SHA512(224)"); + m_digestAlgs.Add(NistObjectIdentifiers.IdSha512_256.Id, "SHA512(256)"); + m_digestAlgs.Add(NistObjectIdentifiers.IdSha3_224.Id, "SHA3-224"); + m_digestAlgs.Add(NistObjectIdentifiers.IdSha3_256.Id, "SHA3-256"); + m_digestAlgs.Add(NistObjectIdentifiers.IdSha3_384.Id, "SHA3-384"); + m_digestAlgs.Add(NistObjectIdentifiers.IdSha3_512.Id, "SHA3-512"); + m_digestAlgs.Add(TeleTrusTObjectIdentifiers.RipeMD128.Id, "RIPEMD128"); + m_digestAlgs.Add(TeleTrusTObjectIdentifiers.RipeMD160.Id, "RIPEMD160"); + m_digestAlgs.Add(TeleTrusTObjectIdentifiers.RipeMD256.Id, "RIPEMD256"); + m_digestAlgs.Add(CryptoProObjectIdentifiers.GostR3411.Id, "GOST3411"); + m_digestAlgs.Add("1.3.6.1.4.1.5849.1.2.1", "GOST3411"); + m_digestAlgs.Add(RosstandartObjectIdentifiers.id_tc26_gost_3411_12_256.Id, "GOST3411-2012-256"); + m_digestAlgs.Add(RosstandartObjectIdentifiers.id_tc26_gost_3411_12_512.Id, "GOST3411-2012-512"); + + m_digestAliases.Add("SHA1", new string[]{ "SHA-1" }); + m_digestAliases.Add("SHA224", new string[]{ "SHA-224" }); + m_digestAliases.Add("SHA256", new string[]{ "SHA-256" }); + m_digestAliases.Add("SHA384", new string[]{ "SHA-384" }); + m_digestAliases.Add("SHA512", new string[]{ "SHA-512" }); + + noParams.Add(CmsSignedGenerator.EncryptionDsa); + //noParams.Add(EncryptionECDsa); + noParams.Add(EncryptionECDsaWithSha1); + noParams.Add(EncryptionECDsaWithSha224); + noParams.Add(EncryptionECDsaWithSha256); + noParams.Add(EncryptionECDsaWithSha384); + noParams.Add(EncryptionECDsaWithSha512); + + m_ecAlgorithms.Add(CmsSignedGenerator.DigestSha1, EncryptionECDsaWithSha1); + m_ecAlgorithms.Add(CmsSignedGenerator.DigestSha224, EncryptionECDsaWithSha224); + m_ecAlgorithms.Add(CmsSignedGenerator.DigestSha256, EncryptionECDsaWithSha256); + m_ecAlgorithms.Add(CmsSignedGenerator.DigestSha384, EncryptionECDsaWithSha384); + m_ecAlgorithms.Add(CmsSignedGenerator.DigestSha512, EncryptionECDsaWithSha512); + } + + /** + * Return the digest algorithm using one of the standard JCA string + * representations rather than the algorithm identifier (if possible). + */ + internal string GetDigestAlgName(string digestAlgOid) + { + return m_digestAlgs.TryGetValue(digestAlgOid, out var algName) ? algName : digestAlgOid; + } + + internal AlgorithmIdentifier GetEncAlgorithmIdentifier(DerObjectIdentifier encOid, + Asn1Encodable sigX509Parameters) + { + if (noParams.Contains(encOid.Id)) + { + return new AlgorithmIdentifier(encOid); + } + + return new AlgorithmIdentifier(encOid, sigX509Parameters); + } + + internal string[] GetDigestAliases(string algName) + { + return m_digestAliases.TryGetValue(algName, out var aliases) ? (string[])aliases.Clone() : new string[0]; + } + + /** + * Return the digest encryption algorithm using one of the standard + * JCA string representations rather than the algorithm identifier (if + * possible). + */ + internal string GetEncryptionAlgName(string encryptionAlgOid) + { + return m_encryptionAlgs.TryGetValue(encryptionAlgOid, out var algName) ? algName : encryptionAlgOid; + } + + internal IDigest GetDigestInstance( + string algorithm) + { + try + { + return DigestUtilities.GetDigest(algorithm); + } + catch (SecurityUtilityException e) + { + // This is probably superfluous on C#, since no provider infrastructure, + // assuming DigestUtilities already knows all the aliases + foreach (string alias in GetDigestAliases(algorithm)) + { + try { return DigestUtilities.GetDigest(alias); } + catch (SecurityUtilityException) {} + } + throw e; + } + } + + internal ISigner GetSignatureInstance( + string algorithm) + { + return SignerUtilities.GetSigner(algorithm); + } + + internal AlgorithmIdentifier FixAlgID( + AlgorithmIdentifier algId) + { + if (algId.Parameters == null) + return new AlgorithmIdentifier(algId.Algorithm, DerNull.Instance); + + return algId; + } + + internal string GetEncOid( + AsymmetricKeyParameter key, + string digestOID) + { + string encOID = null; + + if (key is RsaKeyParameters rsaKeyParameters) + { + if (!rsaKeyParameters.IsPrivate) + throw new ArgumentException("Expected RSA private key"); + + encOID = CmsSignedGenerator.EncryptionRsa; + } + else if (key is DsaPrivateKeyParameters) + { + if (digestOID.Equals(CmsSignedGenerator.DigestSha1)) + { + encOID = CmsSignedGenerator.EncryptionDsa; + } + else if (digestOID.Equals(CmsSignedGenerator.DigestSha224)) + { + encOID = NistObjectIdentifiers.DsaWithSha224.Id; + } + else if (digestOID.Equals(CmsSignedGenerator.DigestSha256)) + { + encOID = NistObjectIdentifiers.DsaWithSha256.Id; + } + else if (digestOID.Equals(CmsSignedGenerator.DigestSha384)) + { + encOID = NistObjectIdentifiers.DsaWithSha384.Id; + } + else if (digestOID.Equals(CmsSignedGenerator.DigestSha512)) + { + encOID = NistObjectIdentifiers.DsaWithSha512.Id; + } + else + { + throw new ArgumentException("can't mix DSA with anything but SHA1/SHA2"); + } + } + else if (key is ECPrivateKeyParameters ecPrivKey) + { + string algName = ecPrivKey.AlgorithmName; + + if (algName == "ECGOST3410") + { + encOID = CmsSignedGenerator.EncryptionECGost3410; + } + else if (ecPrivKey.Parameters is ECGost3410Parameters ecGost3410Parameters) + { + var digestParamSet = ecGost3410Parameters.DigestParamSet; + if (digestParamSet.Equals(RosstandartObjectIdentifiers.id_tc26_gost_3411_12_256)) + { + encOID = CmsSignedGenerator.EncryptionECGost3410_2012_256; + } + else if (digestParamSet.Equals(RosstandartObjectIdentifiers.id_tc26_gost_3411_12_512)) + { + encOID = CmsSignedGenerator.EncryptionECGost3410_2012_512; + } + else + { + throw new ArgumentException("can't determine GOST3410 algorithm"); + } + } + else + { + // TODO Should we insist on algName being one of "EC" or "ECDSA", as Java does? + if (!m_ecAlgorithms.TryGetValue(digestOID, out encOID)) + throw new ArgumentException("can't mix ECDSA with anything but SHA family digests"); + } + } + else if (key is Gost3410PrivateKeyParameters) + { + encOID = CmsSignedGenerator.EncryptionGost3410; + } + else + { + throw new ArgumentException("Unknown algorithm in CmsSignedGenerator.GetEncOid"); + } + + return encOID; + } + + internal IStore GetAttributeCertificates(Asn1Set attrCertSet) + { + var contents = new List(); + if (attrCertSet != null) + { + foreach (Asn1Encodable ae in attrCertSet) + { + if (ae != null && ae.ToAsn1Object() is Asn1TaggedObject t) + { + if (t.HasContextTag(2)) + { + Asn1Sequence s = Asn1Sequence.GetInstance(t, false); + + contents.Add(new X509V2AttributeCertificate(AttributeCertificate.GetInstance(s))); + } + } + } + } + return CollectionUtilities.CreateStore(contents); + } + + internal IStore GetCertificates(Asn1Set certSet) + { + var contents = new List(); + if (certSet != null) + { + foreach (Asn1Encodable ae in certSet) + { + if (ae != null && ae.ToAsn1Object() is Asn1Sequence s) + { + contents.Add(new X509Certificate(X509CertificateStructure.GetInstance(s))); + } + } + } + return CollectionUtilities.CreateStore(contents); + } + + internal IStore GetCrls(Asn1Set crlSet) + { + var contents = new List(); + if (crlSet != null) + { + foreach (Asn1Encodable ae in crlSet) + { + if (ae != null && ae.ToAsn1Object() is Asn1Sequence s) + { + contents.Add(new X509Crl(CertificateList.GetInstance(s))); + } + } + } + return CollectionUtilities.CreateStore(contents); + } + + internal IStore GetOtherRevInfos(Asn1Set crlSet, DerObjectIdentifier otherRevInfoFormat) + { + var contents = new List(); + if (crlSet != null && otherRevInfoFormat != null) + { + foreach (Asn1Encodable ae in crlSet) + { + if (ae != null && ae.ToAsn1Object() is Asn1TaggedObject taggedObject) + { + if (taggedObject.HasContextTag(1)) + { + var otherRevocationInfo = OtherRevocationInfoFormat.GetInstance(taggedObject, false); + + if (otherRevInfoFormat.Equals(otherRevocationInfo.InfoFormat)) + { + contents.Add(otherRevocationInfo.Info); + } + } + } + } + } + return CollectionUtilities.CreateStore(contents); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedHelper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedHelper.cs.meta new file mode 100644 index 000000000..0f4d986bd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSSignedHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f0f0baf6a26286f41b9a981fa79313a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSStreamException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSStreamException.cs new file mode 100644 index 000000000..c617ec581 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSStreamException.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + [Serializable] + public class CmsStreamException + : IOException + { + public CmsStreamException() + : base() + { + } + + public CmsStreamException(string message) + : base(message) + { + } + + public CmsStreamException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected CmsStreamException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSStreamException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSStreamException.cs.meta new file mode 100644 index 000000000..811e76dd8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSStreamException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 65c03251f868f0c4eacde295bcfa8a55 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSTypedStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSTypedStream.cs new file mode 100644 index 000000000..b109e947a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSTypedStream.cs @@ -0,0 +1,79 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + public class CmsTypedStream + { + private const int BufferSize = 32 * 1024; + + private readonly string _oid; + private readonly Stream _in; + + public CmsTypedStream( + Stream inStream) + : this(PkcsObjectIdentifiers.Data.Id, inStream, BufferSize) + { + } + + public CmsTypedStream( + string oid, + Stream inStream) + : this(oid, inStream, BufferSize) + { + } + + public CmsTypedStream( + string oid, + Stream inStream, + int bufSize) + { + _oid = oid; + _in = new FullReaderStream(new BufferedStream(inStream, bufSize)); + } + + public string ContentType + { + get { return _oid; } + } + + public Stream ContentStream + { + get { return _in; } + } + + public void Drain() + { + Streams.Drain(_in); + _in.Dispose(); + } + + private class FullReaderStream : FilterStream + { + internal FullReaderStream(Stream input) + : base(input) + { + } + + public override int Read(byte[] buf, int off, int len) + { + return Streams.ReadFully(s, buf, off, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int Read(Span buffer) + { + return Streams.ReadFully(s, buffer); + } +#endif + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSTypedStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSTypedStream.cs.meta new file mode 100644 index 000000000..0c621f898 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSTypedStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7cb2eb2d53bfddc48ada720945f16136 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSUtils.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSUtils.cs new file mode 100644 index 000000000..7b51d3810 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSUtils.cs @@ -0,0 +1,211 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + internal class CmsUtilities + { + // TODO Is there a .NET equivalent to this? +// private static readonly Runtime RUNTIME = Runtime.getRuntime(); + + internal static int MaximumMemory + { + get + { + // TODO Is there a .NET equivalent to this? + long maxMem = int.MaxValue;//RUNTIME.maxMemory(); + + if (maxMem > int.MaxValue) + { + return int.MaxValue; + } + + return (int)maxMem; + } + } + + internal static ContentInfo ReadContentInfo( + byte[] input) + { + // enforce limit checking as from a byte array + return ReadContentInfo(new Asn1InputStream(input)); + } + + internal static ContentInfo ReadContentInfo( + Stream input) + { + // enforce some limit checking + return ReadContentInfo(new Asn1InputStream(input, MaximumMemory)); + } + + private static ContentInfo ReadContentInfo( + Asn1InputStream aIn) + { + try + { + return ContentInfo.GetInstance(aIn.ReadObject()); + } + catch (IOException e) + { + throw new CmsException("IOException reading content.", e); + } + catch (InvalidCastException e) + { + throw new CmsException("Malformed content.", e); + } + catch (ArgumentException e) + { + throw new CmsException("Malformed content.", e); + } + } + + internal static byte[] StreamToByteArray(Stream inStream) + { + return Streams.ReadAll(inStream); + } + + internal static byte[] StreamToByteArray(Stream inStream, int limit) + { + return Streams.ReadAllLimited(inStream, limit); + } + + internal static List GetAttributeCertificatesFromStore( + IStore attrCertStore) + { + var result = new List(); + if (attrCertStore != null) + { + foreach (var attrCert in attrCertStore.EnumerateMatches(null)) + { + result.Add(new DerTaggedObject(false, 2, attrCert.AttributeCertificate)); + } + } + return result; + } + + internal static List GetCertificatesFromStore(IStore certStore) + { + var result = new List(); + if (certStore != null) + { + foreach (var cert in certStore.EnumerateMatches(null)) + { + result.Add(cert.CertificateStructure); + } + } + return result; + } + + internal static List GetCrlsFromStore(IStore crlStore) + { + var result = new List(); + if (crlStore != null) + { + foreach (var crl in crlStore.EnumerateMatches(null)) + { + result.Add(crl.CertificateList); + } + } + return result; + } + + internal static List GetOtherRevocationInfosFromStore( + IStore otherRevocationInfoStore) + { + var result = new List(); + if (otherRevocationInfoStore != null) + { + foreach (var otherRevocationInfo in otherRevocationInfoStore.EnumerateMatches(null)) + { + ValidateOtherRevocationInfo(otherRevocationInfo); + + result.Add(new DerTaggedObject(false, 1, otherRevocationInfo)); + } + } + return result; + } + + internal static List GetOtherRevocationInfosFromStore(IStore otherRevInfoStore, + DerObjectIdentifier otherRevInfoFormat) + { + var result = new List(); + if (otherRevInfoStore != null && otherRevInfoFormat != null) + { + foreach (var otherRevInfo in otherRevInfoStore.EnumerateMatches(null)) + { + var otherRevocationInfo = new OtherRevocationInfoFormat(otherRevInfoFormat, otherRevInfo); + + ValidateOtherRevocationInfo(otherRevocationInfo); + + result.Add(new DerTaggedObject(false, 1, otherRevocationInfo)); + } + } + return result; + } + + internal static Asn1Set CreateBerSetFromList(IEnumerable elements) + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + foreach (Asn1Encodable element in elements) + { + v.Add(element); + } + + return new BerSet(v); + } + + internal static Asn1Set CreateDerSetFromList(IEnumerable elements) + { + Asn1EncodableVector v = new Asn1EncodableVector(); + + foreach (Asn1Encodable element in elements) + { + v.Add(element); + } + + return new DerSet(v); + } + + internal static Stream CreateBerOctetOutputStream(Stream s, int tagNo, bool isExplicit, int bufferSize) + { + BerOctetStringGenerator octGen = new BerOctetStringGenerator(s, tagNo, isExplicit); + return octGen.GetOctetOutputStream(bufferSize); + } + + internal static TbsCertificateStructure GetTbsCertificateStructure(X509Certificate cert) + { + return TbsCertificateStructure.GetInstance(Asn1Object.FromByteArray(cert.GetTbsCertificate())); + } + + internal static IssuerAndSerialNumber GetIssuerAndSerialNumber(X509Certificate cert) + { + TbsCertificateStructure tbsCert = GetTbsCertificateStructure(cert); + return new IssuerAndSerialNumber(tbsCert.Issuer, tbsCert.SerialNumber.Value); + } + + internal static void ValidateOtherRevocationInfo(OtherRevocationInfoFormat otherRevocationInfo) + { + if (CmsObjectIdentifiers.id_ri_ocsp_response.Equals(otherRevocationInfo.InfoFormat)) + { + OcspResponse ocspResponse = OcspResponse.GetInstance(otherRevocationInfo.Info); + + if (OcspResponseStatus.Successful != ocspResponse.ResponseStatus.IntValueExact) + throw new ArgumentException("cannot add unsuccessful OCSP response to CMS SignedData"); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSUtils.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSUtils.cs.meta new file mode 100644 index 000000000..10f2e314c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CMSUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 67354a24f57564445b672cc8ecb0d55a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CounterSignatureDigestCalculator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CounterSignatureDigestCalculator.cs new file mode 100644 index 000000000..4f8611ee6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CounterSignatureDigestCalculator.cs @@ -0,0 +1,32 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + internal class CounterSignatureDigestCalculator + : IDigestCalculator + { + private readonly string alg; + private readonly byte[] data; + + internal CounterSignatureDigestCalculator( + string alg, + byte[] data) + { + this.alg = alg; + this.data = data; + } + + public byte[] GetDigest() + { + IDigest digest = CmsSignedHelper.Instance.GetDigestInstance(alg); + return DigestUtilities.DoFinal(digest, data); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CounterSignatureDigestCalculator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CounterSignatureDigestCalculator.cs.meta new file mode 100644 index 000000000..b2cde11bc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/CounterSignatureDigestCalculator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0dc404fbdaec35e45ba416368a1f3d44 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/DefaultAuthenticatedAttributeTableGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/DefaultAuthenticatedAttributeTableGenerator.cs new file mode 100644 index 000000000..c751e79b5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/DefaultAuthenticatedAttributeTableGenerator.cs @@ -0,0 +1,92 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * Default authenticated attributes generator. + */ + public class DefaultAuthenticatedAttributeTableGenerator + : CmsAttributeTableGenerator + { + private readonly IDictionary m_table; + + /** + * Initialise to use all defaults + */ + public DefaultAuthenticatedAttributeTableGenerator() + { + m_table = new Dictionary(); + } + + /** + * Initialise with some extra attributes or overrides. + * + * @param attributeTable initial attribute table to use. + */ + public DefaultAuthenticatedAttributeTableGenerator( + AttributeTable attributeTable) + { + if (attributeTable != null) + { + m_table = attributeTable.ToDictionary(); + } + else + { + m_table = new Dictionary(); + } + } + + /** + * Create a standard attribute table from the passed in parameters - this will + * normally include contentType and messageDigest. If the constructor + * using an AttributeTable was used, entries in it for contentType and + * messageDigest will override the generated ones. + * + * @param parameters source parameters for table generation. + * + * @return a filled in IDictionary of attributes. + */ + protected virtual IDictionary CreateStandardAttributeTable( + IDictionary parameters) + { + var std = new Dictionary(m_table); + + if (!std.ContainsKey(CmsAttributes.ContentType)) + { + DerObjectIdentifier contentType = (DerObjectIdentifier) + parameters[CmsAttributeTableParameter.ContentType]; + Asn1.Cms.Attribute attr = new Asn1.Cms.Attribute(CmsAttributes.ContentType, + new DerSet(contentType)); + std[attr.AttrType] = attr; + } + + if (!std.ContainsKey(CmsAttributes.MessageDigest)) + { + byte[] messageDigest = (byte[])parameters[CmsAttributeTableParameter.Digest]; + Asn1.Cms.Attribute attr = new Asn1.Cms.Attribute(CmsAttributes.MessageDigest, + new DerSet(new DerOctetString(messageDigest))); + std[attr.AttrType] = attr; + } + + return std; + } + + /** + * @param parameters source parameters + * @return the populated attribute table + */ + public virtual AttributeTable GetAttributes(IDictionary parameters) + { + var table = CreateStandardAttributeTable(parameters); + return new AttributeTable(table); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/DefaultAuthenticatedAttributeTableGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/DefaultAuthenticatedAttributeTableGenerator.cs.meta new file mode 100644 index 000000000..330e0fdd0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/DefaultAuthenticatedAttributeTableGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ff46025627cc3f4db1238e4c51595a1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/DefaultSignedAttributeTableGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/DefaultSignedAttributeTableGenerator.cs new file mode 100644 index 000000000..49b76e2cb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/DefaultSignedAttributeTableGenerator.cs @@ -0,0 +1,107 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * Default signed attributes generator. + */ + public class DefaultSignedAttributeTableGenerator + : CmsAttributeTableGenerator + { + private readonly IDictionary m_table; + + /** + * Initialise to use all defaults + */ + public DefaultSignedAttributeTableGenerator() + { + m_table = new Dictionary(); + } + + /** + * Initialise with some extra attributes or overrides. + * + * @param attributeTable initial attribute table to use. + */ + public DefaultSignedAttributeTableGenerator(AttributeTable attributeTable) + { + if (attributeTable != null) + { + m_table = attributeTable.ToDictionary(); + } + else + { + m_table = new Dictionary(); + } + } + + /** + * Create a standard attribute table from the passed in parameters - this will + * normally include contentType, signingTime, and messageDigest. If the constructor + * using an AttributeTable was used, entries in it for contentType, signingTime, and + * messageDigest will override the generated ones. + * + * @param parameters source parameters for table generation. + * + * @return a filled in Dictionary of attributes. + */ + protected virtual IDictionary CreateStandardAttributeTable( + IDictionary parameters) + { + var std = new Dictionary(m_table); + DoCreateStandardAttributeTable(parameters, std); + return std; + } + + private void DoCreateStandardAttributeTable(IDictionary parameters, + IDictionary std) + { + // contentType will be absent if we're trying to generate a counter signature. + + if (parameters.ContainsKey(CmsAttributeTableParameter.ContentType)) + { + if (!std.ContainsKey(CmsAttributes.ContentType)) + { + DerObjectIdentifier contentType = (DerObjectIdentifier) + parameters[CmsAttributeTableParameter.ContentType]; + Asn1.Cms.Attribute attr = new Asn1.Cms.Attribute(CmsAttributes.ContentType, + new DerSet(contentType)); + std[attr.AttrType] = attr; + } + } + + if (!std.ContainsKey(CmsAttributes.SigningTime)) + { + Asn1.Cms.Attribute attr = new Asn1.Cms.Attribute(CmsAttributes.SigningTime, + new DerSet(new Time(DateTime.UtcNow))); + std[attr.AttrType] = attr; + } + + if (!std.ContainsKey(CmsAttributes.MessageDigest)) + { + byte[] messageDigest = (byte[])parameters[CmsAttributeTableParameter.Digest]; + Asn1.Cms.Attribute attr = new Asn1.Cms.Attribute(CmsAttributes.MessageDigest, + new DerSet(new DerOctetString(messageDigest))); + std[attr.AttrType] = attr; + } + } + + /** + * @param parameters source parameters + * @return the populated attribute table + */ + public virtual AttributeTable GetAttributes(IDictionary parameters) + { + var table = CreateStandardAttributeTable(parameters); + return new AttributeTable(table); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/DefaultSignedAttributeTableGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/DefaultSignedAttributeTableGenerator.cs.meta new file mode 100644 index 000000000..a5f366d16 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/DefaultSignedAttributeTableGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0436e2d77a8dae845a14d9535027953c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/EnvelopedDataHelper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/EnvelopedDataHelper.cs new file mode 100644 index 000000000..1aad16283 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/EnvelopedDataHelper.cs @@ -0,0 +1,94 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + internal class EnvelopedDataHelper + { + //private static readonly IDictionary BaseCipherNames = + // new Dictionary(); + //private static readonly IDictionary MacAlgNames = + // new Dictionary(); + //private static readonly IDictionary PrfDigests = + // new Dictionary(); + + //static EnvelopedDataHelper() + //{ + // PrfDigests.Add(PkcsObjectIdentifiers.IdHmacWithSha1, "SHA-1"); + // PrfDigests.Add(PkcsObjectIdentifiers.IdHmacWithSha224, "SHA-224"); + // PrfDigests.Add(PkcsObjectIdentifiers.IdHmacWithSha256, "SHA-256"); + // PrfDigests.Add(PkcsObjectIdentifiers.IdHmacWithSha384, "SHA-384"); + // PrfDigests.Add(PkcsObjectIdentifiers.IdHmacWithSha512, "SHA-512"); + + // BaseCipherNames.Add(PkcsObjectIdentifiers.DesEde3Cbc, "DESEDE"); + // BaseCipherNames.Add(NistObjectIdentifiers.IdAes128Cbc, "AES"); + // BaseCipherNames.Add(NistObjectIdentifiers.IdAes192Cbc, "AES"); + // BaseCipherNames.Add(NistObjectIdentifiers.IdAes256Cbc, "AES"); + + // MacAlgNames.Add(PkcsObjectIdentifiers.DesEde3Cbc, "DESEDEMac"); + // MacAlgNames.Add(NistObjectIdentifiers.IdAes128Cbc, "AESMac"); + // MacAlgNames.Add(NistObjectIdentifiers.IdAes192Cbc, "AESMac"); + // MacAlgNames.Add(NistObjectIdentifiers.IdAes256Cbc, "AESMac"); + // MacAlgNames.Add(PkcsObjectIdentifiers.RC2Cbc, "RC2Mac"); + //} + + //internal static IDigest GetPrf(AlgorithmIdentifier algID) + //{ + // string digestName = (string)PrfDigests[algID]; + + // return DigestUtilities.GetDigest(digestName); + //} + + //internal static IWrapper CreateRfc3211Wrapper(DerObjectIdentifier algorithm) + //{ + // if (NistObjectIdentifiers.IdAes128Cbc.Equals(algorithm) + // || NistObjectIdentifiers.IdAes192Cbc.Equals(algorithm) + // || NistObjectIdentifiers.IdAes256Cbc.Equals(algorithm)) + // { + // return new Rfc3211WrapEngine(AesUtilities.CreateEngine()); + // } + // else if (PkcsObjectIdentifiers.DesEde3Cbc.Equals(algorithm)) + // { + // return new Rfc3211WrapEngine(new DesEdeEngine()); + // } + // else if (OiwObjectIdentifiers.DesCbc.Equals(algorithm)) + // { + // return new Rfc3211WrapEngine(new DesEngine()); + // } + // else if (PkcsObjectIdentifiers.RC2Cbc.Equals(algorithm)) + // { + // return new Rfc3211WrapEngine(new RC2Engine()); + // } + // else + // { + // throw new CmsException("cannot recognise wrapper: " + algorithm); + // } + //} + + public static object CreateContentCipher(bool forEncryption, ICipherParameters encKey, + AlgorithmIdentifier encryptionAlgID) + { + return CipherFactory.CreateContentCipher(forEncryption, encKey, encryptionAlgID); + } + + public AlgorithmIdentifier GenerateEncryptionAlgID(DerObjectIdentifier encryptionOID, KeyParameter encKey, + SecureRandom random) + { + return AlgorithmIdentifierFactory.GenerateEncryptionAlgID(encryptionOID, encKey.GetKey().Length * 8, random); + } + + public CipherKeyGenerator CreateKeyGenerator(DerObjectIdentifier algorithm, SecureRandom random) + { + return CipherKeyGeneratorFactory.CreateKeyGenerator(algorithm, random); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/EnvelopedDataHelper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/EnvelopedDataHelper.cs.meta new file mode 100644 index 000000000..ad69d4f8e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/EnvelopedDataHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c8039bbad55ce4b46bd7fc355bbab885 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/IDigestCalculator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/IDigestCalculator.cs new file mode 100644 index 000000000..e88c7e410 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/IDigestCalculator.cs @@ -0,0 +1,13 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + internal interface IDigestCalculator + { + byte[] GetDigest(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/IDigestCalculator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/IDigestCalculator.cs.meta new file mode 100644 index 000000000..7c94d2a50 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/IDigestCalculator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d9dc3e4ade64ee40b172d9d67f0830c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KEKRecipientInfoGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KEKRecipientInfoGenerator.cs new file mode 100644 index 000000000..baea3d46a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KEKRecipientInfoGenerator.cs @@ -0,0 +1,142 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Kisa; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ntt; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + internal class KekRecipientInfoGenerator : RecipientInfoGenerator + { + private static readonly CmsEnvelopedHelper Helper = CmsEnvelopedHelper.Instance; + + private KeyParameter keyEncryptionKey; + // TODO Can get this from keyEncryptionKey? + private string keyEncryptionKeyOID; + private KekIdentifier kekIdentifier; + + // Derived + private AlgorithmIdentifier keyEncryptionAlgorithm; + + internal KekRecipientInfoGenerator() + { + } + + internal KekIdentifier KekIdentifier + { + set { this.kekIdentifier = value; } + } + + internal KeyParameter KeyEncryptionKey + { + set + { + this.keyEncryptionKey = value; + this.keyEncryptionAlgorithm = DetermineKeyEncAlg(keyEncryptionKeyOID, keyEncryptionKey); + } + } + + internal string KeyEncryptionKeyOID + { + set { this.keyEncryptionKeyOID = value; } + } + + public RecipientInfo Generate(KeyParameter contentEncryptionKey, SecureRandom random) + { + byte[] keyBytes = contentEncryptionKey.GetKey(); + + IWrapper keyWrapper = Helper.CreateWrapper(keyEncryptionAlgorithm.Algorithm.Id); + keyWrapper.Init(true, new ParametersWithRandom(keyEncryptionKey, random)); + Asn1OctetString encryptedKey = new DerOctetString( + keyWrapper.Wrap(keyBytes, 0, keyBytes.Length)); + + return new RecipientInfo(new KekRecipientInfo(kekIdentifier, keyEncryptionAlgorithm, encryptedKey)); + } + + private static AlgorithmIdentifier DetermineKeyEncAlg( + string algorithm, KeyParameter key) + { + if (Org.BouncyCastle.Utilities.Platform.StartsWith(algorithm, "DES")) + { + return new AlgorithmIdentifier( + PkcsObjectIdentifiers.IdAlgCms3DesWrap, + DerNull.Instance); + } + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(algorithm, "RC2")) + { + return new AlgorithmIdentifier( + PkcsObjectIdentifiers.IdAlgCmsRC2Wrap, + new DerInteger(58)); + } + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(algorithm, "AES")) + { + int length = key.GetKey().Length * 8; + DerObjectIdentifier wrapOid; + + if (length == 128) + { + wrapOid = NistObjectIdentifiers.IdAes128Wrap; + } + else if (length == 192) + { + wrapOid = NistObjectIdentifiers.IdAes192Wrap; + } + else if (length == 256) + { + wrapOid = NistObjectIdentifiers.IdAes256Wrap; + } + else + { + throw new ArgumentException("illegal keysize in AES"); + } + + return new AlgorithmIdentifier(wrapOid); // parameters absent + } + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(algorithm, "SEED")) + { + // parameters absent + return new AlgorithmIdentifier(KisaObjectIdentifiers.IdNpkiAppCmsSeedWrap); + } + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(algorithm, "CAMELLIA")) + { + int length = key.GetKey().Length * 8; + DerObjectIdentifier wrapOid; + + if (length == 128) + { + wrapOid = NttObjectIdentifiers.IdCamellia128Wrap; + } + else if (length == 192) + { + wrapOid = NttObjectIdentifiers.IdCamellia192Wrap; + } + else if (length == 256) + { + wrapOid = NttObjectIdentifiers.IdCamellia256Wrap; + } + else + { + throw new ArgumentException("illegal keysize in Camellia"); + } + + return new AlgorithmIdentifier(wrapOid); // parameters must be absent + } + else + { + throw new ArgumentException("unknown algorithm"); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KEKRecipientInfoGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KEKRecipientInfoGenerator.cs.meta new file mode 100644 index 000000000..e0fa9ab14 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KEKRecipientInfoGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 764accd23d3d15147a4cf8f10a88f687 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KEKRecipientInformation.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KEKRecipientInformation.cs new file mode 100644 index 000000000..efe706a57 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KEKRecipientInformation.cs @@ -0,0 +1,66 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * the RecipientInfo class for a recipient who has been sent a message + * encrypted using a secret key known to the other side. + */ + public class KekRecipientInformation + : RecipientInformation + { + private KekRecipientInfo info; + + internal KekRecipientInformation( + KekRecipientInfo info, + CmsSecureReadable secureReadable) + : base(info.KeyEncryptionAlgorithm, secureReadable) + { + this.info = info; + this.rid = new RecipientID(); + + KekIdentifier kekId = info.KekID; + + rid.KeyIdentifier = kekId.KeyIdentifier.GetOctets(); + } + + /** + * decrypt the content and return an input stream. + */ + public override CmsTypedStream GetContentStream( + ICipherParameters key) + { + try + { + byte[] encryptedKey = info.EncryptedKey.GetOctets(); + IWrapper keyWrapper = WrapperUtilities.GetWrapper(keyEncAlg.Algorithm.Id); + + keyWrapper.Init(false, key); + + KeyParameter sKey = ParameterUtilities.CreateKeyParameter( + GetContentAlgorithmName(), keyWrapper.Unwrap(encryptedKey, 0, encryptedKey.Length)); + + return GetContentFromSessionKey(sKey); + } + catch (SecurityUtilityException e) + { + throw new CmsException("couldn't create cipher.", e); + } + catch (InvalidKeyException e) + { + throw new CmsException("key invalid in message.", e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KEKRecipientInformation.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KEKRecipientInformation.cs.meta new file mode 100644 index 000000000..93dfbc922 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KEKRecipientInformation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a668dd24874b8c047b20f583f86df772 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyAgreeRecipientInfoGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyAgreeRecipientInfoGenerator.cs new file mode 100644 index 000000000..4879aae74 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyAgreeRecipientInfoGenerator.cs @@ -0,0 +1,174 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms.Ecc; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + internal class KeyAgreeRecipientInfoGenerator : RecipientInfoGenerator + { + private static readonly CmsEnvelopedHelper Helper = CmsEnvelopedHelper.Instance; + + private DerObjectIdentifier keyAgreementOID; + private DerObjectIdentifier keyEncryptionOID; + private IList recipientCerts; + private AsymmetricCipherKeyPair senderKeyPair; + + internal KeyAgreeRecipientInfoGenerator() + { + } + + internal DerObjectIdentifier KeyAgreementOID + { + set { this.keyAgreementOID = value; } + } + + internal DerObjectIdentifier KeyEncryptionOID + { + set { this.keyEncryptionOID = value; } + } + + internal IEnumerable RecipientCerts + { + set { this.recipientCerts = new List(value); } + } + + internal AsymmetricCipherKeyPair SenderKeyPair + { + set { this.senderKeyPair = value; } + } + + public RecipientInfo Generate(KeyParameter contentEncryptionKey, SecureRandom random) + { + byte[] keyBytes = contentEncryptionKey.GetKey(); + + AsymmetricKeyParameter senderPublicKey = senderKeyPair.Public; + ICipherParameters senderPrivateParams = senderKeyPair.Private; + + + OriginatorIdentifierOrKey originator; + try + { + originator = new OriginatorIdentifierOrKey( + CreateOriginatorPublicKey(senderPublicKey)); + } + catch (IOException e) + { + throw new InvalidKeyException("cannot extract originator public key: " + e); + } + + + Asn1OctetString ukm = null; + if (keyAgreementOID.Id.Equals(CmsEnvelopedGenerator.ECMqvSha1Kdf)) + { + try + { + IAsymmetricCipherKeyPairGenerator ephemKPG = + GeneratorUtilities.GetKeyPairGenerator(keyAgreementOID); + ephemKPG.Init( + ((ECPublicKeyParameters)senderPublicKey).CreateKeyGenerationParameters(random)); + + AsymmetricCipherKeyPair ephemKP = ephemKPG.GenerateKeyPair(); + + ukm = new DerOctetString( + new MQVuserKeyingMaterial( + CreateOriginatorPublicKey(ephemKP.Public), null)); + + senderPrivateParams = new MqvPrivateParameters( + (ECPrivateKeyParameters)senderPrivateParams, + (ECPrivateKeyParameters)ephemKP.Private, + (ECPublicKeyParameters)ephemKP.Public); + } + catch (IOException e) + { + throw new InvalidKeyException("cannot extract MQV ephemeral public key: " + e); + } + catch (SecurityUtilityException e) + { + throw new InvalidKeyException("cannot determine MQV ephemeral key pair parameters from public key: " + e); + } + } + + + DerSequence paramSeq = new DerSequence( + keyEncryptionOID, + DerNull.Instance); + AlgorithmIdentifier keyEncAlg = new AlgorithmIdentifier(keyAgreementOID, paramSeq); + + + Asn1EncodableVector recipientEncryptedKeys = new Asn1EncodableVector(); + foreach (X509Certificate recipientCert in recipientCerts) + { + TbsCertificateStructure tbsCert; + try + { + tbsCert = TbsCertificateStructure.GetInstance( + Asn1Object.FromByteArray(recipientCert.GetTbsCertificate())); + } + catch (Exception) + { + throw new ArgumentException("can't extract TBS structure from certificate"); + } + + // TODO Should there be a SubjectKeyIdentifier-based alternative? + IssuerAndSerialNumber issuerSerial = new IssuerAndSerialNumber( + tbsCert.Issuer, tbsCert.SerialNumber.Value); + KeyAgreeRecipientIdentifier karid = new KeyAgreeRecipientIdentifier(issuerSerial); + + ICipherParameters recipientPublicParams = recipientCert.GetPublicKey(); + if (keyAgreementOID.Id.Equals(CmsEnvelopedGenerator.ECMqvSha1Kdf)) + { + recipientPublicParams = new MqvPublicParameters( + (ECPublicKeyParameters)recipientPublicParams, + (ECPublicKeyParameters)recipientPublicParams); + } + + // Use key agreement to choose a wrap key for this recipient + IBasicAgreement keyAgreement = AgreementUtilities.GetBasicAgreementWithKdf( + keyAgreementOID, keyEncryptionOID.Id); + keyAgreement.Init(new ParametersWithRandom(senderPrivateParams, random)); + BigInteger agreedValue = keyAgreement.CalculateAgreement(recipientPublicParams); + + int keyEncryptionKeySize = GeneratorUtilities.GetDefaultKeySize(keyEncryptionOID) / 8; + byte[] keyEncryptionKeyBytes = X9IntegerConverter.IntegerToBytes(agreedValue, keyEncryptionKeySize); + KeyParameter keyEncryptionKey = ParameterUtilities.CreateKeyParameter( + keyEncryptionOID, keyEncryptionKeyBytes); + + // Wrap the content encryption key with the agreement key + IWrapper keyWrapper = Helper.CreateWrapper(keyEncryptionOID.Id); + keyWrapper.Init(true, new ParametersWithRandom(keyEncryptionKey, random)); + byte[] encryptedKeyBytes = keyWrapper.Wrap(keyBytes, 0, keyBytes.Length); + + Asn1OctetString encryptedKey = new DerOctetString(encryptedKeyBytes); + + recipientEncryptedKeys.Add(new RecipientEncryptedKey(karid, encryptedKey)); + } + + return new RecipientInfo(new KeyAgreeRecipientInfo(originator, ukm, keyEncAlg, + new DerSequence(recipientEncryptedKeys))); + } + + private static OriginatorPublicKey CreateOriginatorPublicKey( + AsymmetricKeyParameter publicKey) + { + SubjectPublicKeyInfo spki = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(publicKey); + return new OriginatorPublicKey( + new AlgorithmIdentifier(spki.AlgorithmID.Algorithm, DerNull.Instance), + spki.PublicKeyData.GetBytes()); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyAgreeRecipientInfoGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyAgreeRecipientInfoGenerator.cs.meta new file mode 100644 index 000000000..ced2b2fee --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyAgreeRecipientInfoGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 123a2fced714ba64db37e4e782038e10 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyAgreeRecipientInformation.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyAgreeRecipientInformation.cs new file mode 100644 index 000000000..8d8f5f512 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyAgreeRecipientInformation.cs @@ -0,0 +1,226 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms.Ecc; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * the RecipientInfo class for a recipient who has been sent a message + * encrypted using key agreement. + */ + public class KeyAgreeRecipientInformation + : RecipientInformation + { + private KeyAgreeRecipientInfo info; + private Asn1OctetString encryptedKey; + + internal static void ReadRecipientInfo(IList infos, KeyAgreeRecipientInfo info, + CmsSecureReadable secureReadable) + { + try + { + foreach (Asn1Encodable rek in info.RecipientEncryptedKeys) + { + RecipientEncryptedKey id = RecipientEncryptedKey.GetInstance(rek.ToAsn1Object()); + + RecipientID rid = new RecipientID(); + + Asn1.Cms.KeyAgreeRecipientIdentifier karid = id.Identifier; + + Asn1.Cms.IssuerAndSerialNumber iAndSN = karid.IssuerAndSerialNumber; + if (iAndSN != null) + { + rid.Issuer = iAndSN.Name; + rid.SerialNumber = iAndSN.SerialNumber.Value; + } + else + { + Asn1.Cms.RecipientKeyIdentifier rKeyID = karid.RKeyID; + + // Note: 'date' and 'other' fields of RecipientKeyIdentifier appear to be only informational + + rid.SubjectKeyIdentifier = rKeyID.SubjectKeyIdentifier.GetOctets(); + } + + infos.Add(new KeyAgreeRecipientInformation(info, rid, id.EncryptedKey, + secureReadable)); + } + } + catch (IOException e) + { + throw new ArgumentException("invalid rid in KeyAgreeRecipientInformation", e); + } + } + + internal KeyAgreeRecipientInformation( + KeyAgreeRecipientInfo info, + RecipientID rid, + Asn1OctetString encryptedKey, + CmsSecureReadable secureReadable) + : base(info.KeyEncryptionAlgorithm, secureReadable) + { + this.info = info; + this.rid = rid; + this.encryptedKey = encryptedKey; + } + + private AsymmetricKeyParameter GetSenderPublicKey( + AsymmetricKeyParameter receiverPrivateKey, + OriginatorIdentifierOrKey originator) + { + OriginatorPublicKey opk = originator.OriginatorPublicKey; + if (opk != null) + { + return GetPublicKeyFromOriginatorPublicKey(receiverPrivateKey, opk); + } + + OriginatorID origID = new OriginatorID(); + + Asn1.Cms.IssuerAndSerialNumber iAndSN = originator.IssuerAndSerialNumber; + if (iAndSN != null) + { + origID.Issuer = iAndSN.Name; + origID.SerialNumber = iAndSN.SerialNumber.Value; + } + else + { + SubjectKeyIdentifier ski = originator.SubjectKeyIdentifier; + + origID.SubjectKeyIdentifier = ski.GetKeyIdentifier(); + } + + return GetPublicKeyFromOriginatorID(origID); + } + + private AsymmetricKeyParameter GetPublicKeyFromOriginatorPublicKey( + AsymmetricKeyParameter receiverPrivateKey, + OriginatorPublicKey originatorPublicKey) + { + PrivateKeyInfo privInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(receiverPrivateKey); + SubjectPublicKeyInfo pubInfo = new SubjectPublicKeyInfo( + privInfo.PrivateKeyAlgorithm, + originatorPublicKey.PublicKey.GetBytes()); + return PublicKeyFactory.CreateKey(pubInfo); + } + + private AsymmetricKeyParameter GetPublicKeyFromOriginatorID( + OriginatorID origID) + { + // TODO Support all alternatives for OriginatorIdentifierOrKey + // see RFC 3852 6.2.2 + throw new CmsException("No support for 'originator' as IssuerAndSerialNumber or SubjectKeyIdentifier"); + } + + private KeyParameter CalculateAgreedWrapKey( + string wrapAlg, + AsymmetricKeyParameter senderPublicKey, + AsymmetricKeyParameter receiverPrivateKey) + { + DerObjectIdentifier agreeAlgID = keyEncAlg.Algorithm; + + ICipherParameters senderPublicParams = senderPublicKey; + ICipherParameters receiverPrivateParams = receiverPrivateKey; + + if (agreeAlgID.Id.Equals(CmsEnvelopedGenerator.ECMqvSha1Kdf)) + { + byte[] ukmEncoding = info.UserKeyingMaterial.GetOctets(); + MQVuserKeyingMaterial ukm = MQVuserKeyingMaterial.GetInstance( + Asn1Object.FromByteArray(ukmEncoding)); + + AsymmetricKeyParameter ephemeralKey = GetPublicKeyFromOriginatorPublicKey( + receiverPrivateKey, ukm.EphemeralPublicKey); + + senderPublicParams = new MqvPublicParameters( + (ECPublicKeyParameters)senderPublicParams, + (ECPublicKeyParameters)ephemeralKey); + receiverPrivateParams = new MqvPrivateParameters( + (ECPrivateKeyParameters)receiverPrivateParams, + (ECPrivateKeyParameters)receiverPrivateParams); + } + + IBasicAgreement agreement = AgreementUtilities.GetBasicAgreementWithKdf( + agreeAlgID, wrapAlg); + agreement.Init(receiverPrivateParams); + BigInteger agreedValue = agreement.CalculateAgreement(senderPublicParams); + + int wrapKeySize = GeneratorUtilities.GetDefaultKeySize(wrapAlg) / 8; + byte[] wrapKeyBytes = X9IntegerConverter.IntegerToBytes(agreedValue, wrapKeySize); + return ParameterUtilities.CreateKeyParameter(wrapAlg, wrapKeyBytes); + } + + private KeyParameter UnwrapSessionKey( + string wrapAlg, + KeyParameter agreedKey) + { + byte[] encKeyOctets = encryptedKey.GetOctets(); + + IWrapper keyCipher = WrapperUtilities.GetWrapper(wrapAlg); + keyCipher.Init(false, agreedKey); + byte[] sKeyBytes = keyCipher.Unwrap(encKeyOctets, 0, encKeyOctets.Length); + return ParameterUtilities.CreateKeyParameter(GetContentAlgorithmName(), sKeyBytes); + } + + internal KeyParameter GetSessionKey( + AsymmetricKeyParameter receiverPrivateKey) + { + try + { + string wrapAlg = DerObjectIdentifier.GetInstance( + Asn1Sequence.GetInstance(keyEncAlg.Parameters)[0]).Id; + + AsymmetricKeyParameter senderPublicKey = GetSenderPublicKey( + receiverPrivateKey, info.Originator); + + KeyParameter agreedWrapKey = CalculateAgreedWrapKey(wrapAlg, + senderPublicKey, receiverPrivateKey); + + return UnwrapSessionKey(wrapAlg, agreedWrapKey); + } + catch (SecurityUtilityException e) + { + throw new CmsException("couldn't create cipher.", e); + } + catch (InvalidKeyException e) + { + throw new CmsException("key invalid in message.", e); + } + catch (Exception e) + { + throw new CmsException("originator key invalid.", e); + } + } + + /** + * decrypt the content and return an input stream. + */ + public override CmsTypedStream GetContentStream( + ICipherParameters key) + { + if (!(key is AsymmetricKeyParameter receiverPrivateKey)) + throw new ArgumentException("KeyAgreement requires asymmetric key", "key"); + + if (!receiverPrivateKey.IsPrivate) + throw new ArgumentException("Expected private key", "key"); + + KeyParameter sKey = GetSessionKey(receiverPrivateKey); + + return GetContentFromSessionKey(sKey); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyAgreeRecipientInformation.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyAgreeRecipientInformation.cs.meta new file mode 100644 index 000000000..2afa8460b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyAgreeRecipientInformation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 16d9a42147799fc408b9bb9ff87d2d6d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyTransRecipientInfoGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyTransRecipientInfoGenerator.cs new file mode 100644 index 000000000..fff2b9253 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyTransRecipientInfoGenerator.cs @@ -0,0 +1,72 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + public class KeyTransRecipientInfoGenerator + : RecipientInfoGenerator + { + private readonly IKeyWrapper m_keyWrapper; + + private IssuerAndSerialNumber m_issuerAndSerialNumber; + private Asn1OctetString m_subjectKeyIdentifier; + + public KeyTransRecipientInfoGenerator(X509Certificate recipCert, IKeyWrapper keyWrapper) + : this(new IssuerAndSerialNumber(recipCert.IssuerDN, new DerInteger(recipCert.SerialNumber)), keyWrapper) + { + } + + public KeyTransRecipientInfoGenerator(IssuerAndSerialNumber issuerAndSerial, IKeyWrapper keyWrapper) + { + m_issuerAndSerialNumber = issuerAndSerial; + m_keyWrapper = keyWrapper; + } + + public KeyTransRecipientInfoGenerator(byte[] subjectKeyID, IKeyWrapper keyWrapper) + { + m_subjectKeyIdentifier = new DerOctetString(subjectKeyID); + m_keyWrapper = keyWrapper; + } + + public RecipientInfo Generate(KeyParameter contentEncryptionKey, SecureRandom random) + { + AlgorithmIdentifier keyEncryptionAlgorithm = AlgorithmDetails; + + byte[] encryptedKeyBytes = GenerateWrappedKey(contentEncryptionKey); + + RecipientIdentifier recipId; + if (m_issuerAndSerialNumber != null) + { + recipId = new RecipientIdentifier(m_issuerAndSerialNumber); + } + else + { + recipId = new RecipientIdentifier(m_subjectKeyIdentifier); + } + + return new RecipientInfo(new KeyTransRecipientInfo(recipId, keyEncryptionAlgorithm, + new DerOctetString(encryptedKeyBytes))); + } + + protected virtual AlgorithmIdentifier AlgorithmDetails + { + get { return (AlgorithmIdentifier)m_keyWrapper.AlgorithmDetails; } + } + + protected virtual byte[] GenerateWrappedKey(KeyParameter contentEncryptionKey) + { + return m_keyWrapper.Wrap(contentEncryptionKey.GetKey()).Collect(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyTransRecipientInfoGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyTransRecipientInfoGenerator.cs.meta new file mode 100644 index 000000000..eed2c815f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyTransRecipientInfoGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 62cf515f439ab014faae9f84218999b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyTransRecipientInformation.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyTransRecipientInformation.cs new file mode 100644 index 000000000..5be14cac6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyTransRecipientInformation.cs @@ -0,0 +1,136 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using Asn1Pkcs = BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * the KeyTransRecipientInformation class for a recipient who has been sent a secret + * key encrypted using their public key that needs to be used to + * extract the message. + */ + public class KeyTransRecipientInformation + : RecipientInformation + { + private KeyTransRecipientInfo info; + + internal KeyTransRecipientInformation( + KeyTransRecipientInfo info, + CmsSecureReadable secureReadable) + : base(info.KeyEncryptionAlgorithm, secureReadable) + { + this.info = info; + this.rid = new RecipientID(); + + RecipientIdentifier r = info.RecipientIdentifier; + + try + { + if (r.IsTagged) + { + Asn1OctetString octs = Asn1OctetString.GetInstance(r.ID); + + rid.SubjectKeyIdentifier = octs.GetOctets(); + } + else + { + Asn1.Cms.IssuerAndSerialNumber iAnds = Asn1.Cms.IssuerAndSerialNumber.GetInstance(r.ID); + + rid.Issuer = iAnds.Name; + rid.SerialNumber = iAnds.SerialNumber.Value; + } + } + catch (IOException) + { + throw new ArgumentException("invalid rid in KeyTransRecipientInformation"); + } + } + + private string GetExchangeEncryptionAlgorithmName( + AlgorithmIdentifier algo) + { + DerObjectIdentifier oid = algo.Algorithm; + + if (Asn1Pkcs.PkcsObjectIdentifiers.RsaEncryption.Equals(oid)) + { + return "RSA//PKCS1Padding"; + } else if (Asn1Pkcs.PkcsObjectIdentifiers.IdRsaesOaep.Equals(oid)) + { + Asn1Pkcs.RsaesOaepParameters rsaParams = Asn1Pkcs.RsaesOaepParameters.GetInstance(algo.Parameters); + return "RSA//OAEPWITH"+DigestUtilities.GetAlgorithmName(rsaParams.HashAlgorithm.Algorithm)+"ANDMGF1Padding"; + } + + return oid.Id; + } + + internal KeyParameter UnwrapKey(ICipherParameters key) + { + byte[] encryptedKey = info.EncryptedKey.GetOctets(); + + + try + { + if (keyEncAlg.Algorithm.Equals(PkcsObjectIdentifiers.IdRsaesOaep)) + { + IKeyUnwrapper keyWrapper = new Asn1KeyUnwrapper(keyEncAlg.Algorithm, keyEncAlg.Parameters, key); + + return ParameterUtilities.CreateKeyParameter( + GetContentAlgorithmName(), keyWrapper.Unwrap(encryptedKey, 0, encryptedKey.Length).Collect()); + } + else + { + string keyExchangeAlgorithm = GetExchangeEncryptionAlgorithmName(keyEncAlg); + IWrapper keyWrapper = WrapperUtilities.GetWrapper(keyExchangeAlgorithm); + keyWrapper.Init(false, key); + + // FIXME Support for MAC algorithm parameters similar to cipher parameters + return ParameterUtilities.CreateKeyParameter( + GetContentAlgorithmName(), keyWrapper.Unwrap(encryptedKey, 0, encryptedKey.Length)); + } + } + catch (SecurityUtilityException e) + { + throw new CmsException("couldn't create cipher.", e); + } + catch (InvalidKeyException e) + { + throw new CmsException("key invalid in message.", e); + } +// catch (IllegalBlockSizeException e) + catch (DataLengthException e) + { + throw new CmsException("illegal blocksize in message.", e); + } +// catch (BadPaddingException e) + catch (InvalidCipherTextException e) + { + throw new CmsException("bad padding in message.", e); + } + } + + /** + * decrypt the content and return it as a byte array. + */ + public override CmsTypedStream GetContentStream( + ICipherParameters key) + { + KeyParameter sKey = UnwrapKey(key); + + return GetContentFromSessionKey(sKey); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyTransRecipientInformation.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyTransRecipientInformation.cs.meta new file mode 100644 index 000000000..216db4ba2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/KeyTransRecipientInformation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e0e4c1fe9df46304aad8da6377a731b3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/OriginatorId.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/OriginatorId.cs new file mode 100644 index 000000000..5ab836c82 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/OriginatorId.cs @@ -0,0 +1,55 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Store; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * a basic index for an originator. + */ + public class OriginatorID + : X509CertStoreSelector + { + public override int GetHashCode() + { + int code = Arrays.GetHashCode(this.SubjectKeyIdentifier); + + BigInteger serialNumber = this.SerialNumber; + if (serialNumber != null) + { + code ^= serialNumber.GetHashCode(); + } + + X509Name issuer = this.Issuer; + if (issuer != null) + { + code ^= issuer.GetHashCode(); + } + + return code; + } + + public override bool Equals( + object obj) + { + if (obj == this) + return false; + + OriginatorID id = obj as OriginatorID; + + if (id == null) + return false; + + return Arrays.AreEqual(SubjectKeyIdentifier, id.SubjectKeyIdentifier) + && Org.BouncyCastle.Utilities.Platform.Equals(SerialNumber, id.SerialNumber) + && IssuersMatch(Issuer, id.Issuer); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/OriginatorId.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/OriginatorId.cs.meta new file mode 100644 index 000000000..c46a4e762 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/OriginatorId.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 88730f33bf66f0a448ad35da8082b31d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/OriginatorInfoGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/OriginatorInfoGenerator.cs new file mode 100644 index 000000000..72fee2eb9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/OriginatorInfoGenerator.cs @@ -0,0 +1,77 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + public class OriginatorInfoGenerator + { + private readonly List origCerts; + private readonly List origCrls; + + public OriginatorInfoGenerator(X509Certificate origCert) + { + this.origCerts = new List{ origCert.CertificateStructure }; + this.origCrls = null; + } + + public OriginatorInfoGenerator(IStore x509Certs) + : this(x509Certs, null, null, null) + { + } + + public OriginatorInfoGenerator(IStore x509Certs, IStore x509Crls) + : this(x509Certs, x509Crls, null, null) + { + } + + public OriginatorInfoGenerator(IStore x509Certs, IStore x509Crls, + IStore x509AttrCerts, IStore otherRevocationInfos) + { + List certificates = null; + if (x509Certs != null || x509AttrCerts != null) + { + certificates = new List(); + if (x509Certs != null) + { + certificates.AddRange(CmsUtilities.GetCertificatesFromStore(x509Certs)); + } + if (x509AttrCerts != null) + { + certificates.AddRange(CmsUtilities.GetAttributeCertificatesFromStore(x509AttrCerts)); + } + } + + List revocations = null; + if (x509Crls != null || otherRevocationInfos != null) + { + revocations = new List(); + if (x509Crls != null) + { + revocations.AddRange(CmsUtilities.GetCrlsFromStore(x509Crls)); + } + if (otherRevocationInfos != null) + { + revocations.AddRange(CmsUtilities.GetOtherRevocationInfosFromStore(otherRevocationInfos)); + } + } + + this.origCerts = certificates; + this.origCrls = revocations; + } + + public virtual OriginatorInfo Generate() + { + Asn1Set certSet = origCerts == null ? null : CmsUtilities.CreateDerSetFromList(origCerts); + Asn1Set crlSet = origCrls == null ? null : CmsUtilities.CreateDerSetFromList(origCrls); + return new OriginatorInfo(certSet, crlSet); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/OriginatorInfoGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/OriginatorInfoGenerator.cs.meta new file mode 100644 index 000000000..e55cac035 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/OriginatorInfoGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e2dbdf7ea09dde0419cae93bf8aecc19 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/OriginatorInformation.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/OriginatorInformation.cs new file mode 100644 index 000000000..16b7fd1cb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/OriginatorInformation.cs @@ -0,0 +1,52 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + public class OriginatorInformation + { + private readonly OriginatorInfo originatorInfo; + + internal OriginatorInformation(OriginatorInfo originatorInfo) + { + this.originatorInfo = originatorInfo; + } + + /** + * Return the certificates stored in the underlying OriginatorInfo object. + * + * @return a Store of X509CertificateHolder objects. + */ + public virtual IStore GetCertificates() + { + return CmsSignedHelper.Instance.GetCertificates(originatorInfo.Certificates); + } + + /** + * Return the CRLs stored in the underlying OriginatorInfo object. + * + * @return a Store of X509CRLHolder objects. + */ + public virtual IStore GetCrls() + { + return CmsSignedHelper.Instance.GetCrls(originatorInfo.Crls); + } + + /** + * Return the underlying ASN.1 object defining this SignerInformation object. + * + * @return a OriginatorInfo. + */ + public virtual OriginatorInfo ToAsn1Structure() + { + return originatorInfo; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/OriginatorInformation.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/OriginatorInformation.cs.meta new file mode 100644 index 000000000..57ecb3907 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/OriginatorInformation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c0274e45e4aa4c948bc4607426c487bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PKCS5Scheme2PBEKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PKCS5Scheme2PBEKey.cs new file mode 100644 index 000000000..c32250a87 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PKCS5Scheme2PBEKey.cs @@ -0,0 +1,51 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /// + /// PKCS5 scheme-2 - password converted to bytes assuming ASCII. + /// + public class Pkcs5Scheme2PbeKey + : CmsPbeKey + { + public Pkcs5Scheme2PbeKey( + char[] password, + byte[] salt, + int iterationCount) + : base(password, salt, iterationCount) + { + } + + public Pkcs5Scheme2PbeKey( + char[] password, + AlgorithmIdentifier keyDerivationAlgorithm) + : base(password, keyDerivationAlgorithm) + { + } + + internal override KeyParameter GetEncoded( + string algorithmOid) + { + Pkcs5S2ParametersGenerator gen = new Pkcs5S2ParametersGenerator(); + + gen.Init( + PbeParametersGenerator.Pkcs5PasswordToBytes(password), + salt, + iterationCount); + + return (KeyParameter) gen.GenerateDerivedParameters( + algorithmOid, + CmsEnvelopedHelper.Instance.GetKeySize(algorithmOid)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PKCS5Scheme2PBEKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PKCS5Scheme2PBEKey.cs.meta new file mode 100644 index 000000000..12b7fb473 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PKCS5Scheme2PBEKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff95842945d4c9b43a55fdf3135fe940 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PKCS5Scheme2UTF8PBEKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PKCS5Scheme2UTF8PBEKey.cs new file mode 100644 index 000000000..d6de0cd24 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PKCS5Scheme2UTF8PBEKey.cs @@ -0,0 +1,51 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * PKCS5 scheme-2 - password converted to bytes using UTF-8. + */ + public class Pkcs5Scheme2Utf8PbeKey + : CmsPbeKey + { + public Pkcs5Scheme2Utf8PbeKey( + char[] password, + byte[] salt, + int iterationCount) + : base(password, salt, iterationCount) + { + } + + public Pkcs5Scheme2Utf8PbeKey( + char[] password, + AlgorithmIdentifier keyDerivationAlgorithm) + : base(password, keyDerivationAlgorithm) + { + } + + internal override KeyParameter GetEncoded( + string algorithmOid) + { + Pkcs5S2ParametersGenerator gen = new Pkcs5S2ParametersGenerator(); + + gen.Init( + PbeParametersGenerator.Pkcs5PasswordToUtf8Bytes(password), + salt, + iterationCount); + + return (KeyParameter) gen.GenerateDerivedParameters( + algorithmOid, + CmsEnvelopedHelper.Instance.GetKeySize(algorithmOid)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PKCS5Scheme2UTF8PBEKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PKCS5Scheme2UTF8PBEKey.cs.meta new file mode 100644 index 000000000..a69f6ec53 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PKCS5Scheme2UTF8PBEKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9efe8084cdcc5b94abb2f637c28bbbb4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PasswordRecipientInfoGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PasswordRecipientInfoGenerator.cs new file mode 100644 index 000000000..6efa8c7a3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PasswordRecipientInfoGenerator.cs @@ -0,0 +1,74 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + internal class PasswordRecipientInfoGenerator : RecipientInfoGenerator + { + private static readonly CmsEnvelopedHelper Helper = CmsEnvelopedHelper.Instance; + + private AlgorithmIdentifier keyDerivationAlgorithm; + private KeyParameter keyEncryptionKey; + // TODO Can get this from keyEncryptionKey? + private string keyEncryptionKeyOID; + + internal PasswordRecipientInfoGenerator() + { + } + + internal AlgorithmIdentifier KeyDerivationAlgorithm + { + set { this.keyDerivationAlgorithm = value; } + } + + internal KeyParameter KeyEncryptionKey + { + set { this.keyEncryptionKey = value; } + } + + internal string KeyEncryptionKeyOID + { + set { this.keyEncryptionKeyOID = value; } + } + + public RecipientInfo Generate(KeyParameter contentEncryptionKey, SecureRandom random) + { + byte[] keyBytes = contentEncryptionKey.GetKey(); + + string rfc3211WrapperName = Helper.GetRfc3211WrapperName(keyEncryptionKeyOID); + IWrapper keyWrapper = Helper.CreateWrapper(rfc3211WrapperName); + + // Note: In Java build, the IV is automatically generated in JCE layer + int ivLength = Org.BouncyCastle.Utilities.Platform.StartsWith(rfc3211WrapperName, "DESEDE") ? 8 : 16; + byte[] iv = new byte[ivLength]; + random.NextBytes(iv); + + ICipherParameters parameters = new ParametersWithIV(keyEncryptionKey, iv); + keyWrapper.Init(true, new ParametersWithRandom(parameters, random)); + Asn1OctetString encryptedKey = new DerOctetString( + keyWrapper.Wrap(keyBytes, 0, keyBytes.Length)); + + DerSequence seq = new DerSequence( + new DerObjectIdentifier(keyEncryptionKeyOID), + new DerOctetString(iv)); + + AlgorithmIdentifier keyEncryptionAlgorithm = new AlgorithmIdentifier( + PkcsObjectIdentifiers.IdAlgPwriKek, seq); + + return new RecipientInfo(new PasswordRecipientInfo( + keyDerivationAlgorithm, keyEncryptionAlgorithm, encryptedKey)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PasswordRecipientInfoGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PasswordRecipientInfoGenerator.cs.meta new file mode 100644 index 000000000..204ad2440 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PasswordRecipientInfoGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0797ef17dd9a6674e99ef08509e4fae2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PasswordRecipientInformation.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PasswordRecipientInformation.cs new file mode 100644 index 000000000..4aa58f080 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PasswordRecipientInformation.cs @@ -0,0 +1,83 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * the RecipientInfo class for a recipient who has been sent a message + * encrypted using a password. + */ + public class PasswordRecipientInformation + : RecipientInformation + { + private readonly PasswordRecipientInfo info; + + internal PasswordRecipientInformation( + PasswordRecipientInfo info, + CmsSecureReadable secureReadable) + : base(info.KeyEncryptionAlgorithm, secureReadable) + { + this.info = info; + this.rid = new RecipientID(); + } + + /** + * return the object identifier for the key derivation algorithm, or null + * if there is none present. + * + * @return OID for key derivation algorithm, if present. + */ + public virtual AlgorithmIdentifier KeyDerivationAlgorithm + { + get { return info.KeyDerivationAlgorithm; } + } + + /** + * decrypt the content and return an input stream. + */ + public override CmsTypedStream GetContentStream( + ICipherParameters key) + { + try + { + AlgorithmIdentifier kekAlg = AlgorithmIdentifier.GetInstance(info.KeyEncryptionAlgorithm); + Asn1Sequence kekAlgParams = (Asn1Sequence)kekAlg.Parameters; + byte[] encryptedKey = info.EncryptedKey.GetOctets(); + string kekAlgName = DerObjectIdentifier.GetInstance(kekAlgParams[0]).Id; + string cName = CmsEnvelopedHelper.Instance.GetRfc3211WrapperName(kekAlgName); + IWrapper keyWrapper = WrapperUtilities.GetWrapper(cName); + + byte[] iv = Asn1OctetString.GetInstance(kekAlgParams[1]).GetOctets(); + + ICipherParameters parameters = ((CmsPbeKey)key).GetEncoded(kekAlgName); + parameters = new ParametersWithIV(parameters, iv); + + keyWrapper.Init(false, parameters); + + KeyParameter sKey = ParameterUtilities.CreateKeyParameter( + GetContentAlgorithmName(), keyWrapper.Unwrap(encryptedKey, 0, encryptedKey.Length)); + + return GetContentFromSessionKey(sKey); + } + catch (SecurityUtilityException e) + { + throw new CmsException("couldn't create cipher.", e); + } + catch (InvalidKeyException e) + { + throw new CmsException("key invalid in message.", e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PasswordRecipientInformation.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PasswordRecipientInformation.cs.meta new file mode 100644 index 000000000..7f74e0262 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/PasswordRecipientInformation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59db2f4f7992797448e438347160b5d1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientId.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientId.cs new file mode 100644 index 000000000..35413ea98 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientId.cs @@ -0,0 +1,62 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Store; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + public class RecipientID + : X509CertStoreSelector + { + private byte[] keyIdentifier; + + public byte[] KeyIdentifier + { + get { return Arrays.Clone(keyIdentifier); } + set { keyIdentifier = Arrays.Clone(value); } + } + + public override int GetHashCode() + { + int code = Arrays.GetHashCode(keyIdentifier) + ^ Arrays.GetHashCode(this.SubjectKeyIdentifier); + + BigInteger serialNumber = this.SerialNumber; + if (serialNumber != null) + { + code ^= serialNumber.GetHashCode(); + } + + X509Name issuer = this.Issuer; + if (issuer != null) + { + code ^= issuer.GetHashCode(); + } + + return code; + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + RecipientID id = obj as RecipientID; + + if (id == null) + return false; + + return Arrays.AreEqual(keyIdentifier, id.keyIdentifier) + && Arrays.AreEqual(SubjectKeyIdentifier, id.SubjectKeyIdentifier) + && Org.BouncyCastle.Utilities.Platform.Equals(SerialNumber, id.SerialNumber) + && IssuersMatch(Issuer, id.Issuer); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientId.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientId.cs.meta new file mode 100644 index 000000000..a3e5b777d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientId.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8d8f726b35dc2ff4a82eedd642b0f48a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientInfoGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientInfoGenerator.cs new file mode 100644 index 000000000..d9667136c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientInfoGenerator.cs @@ -0,0 +1,30 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + public interface RecipientInfoGenerator + { + /// + /// Generate a RecipientInfo object for the given key. + /// + /// + /// A + /// + /// + /// A + /// + /// + /// A + /// + /// + RecipientInfo Generate(KeyParameter contentEncryptionKey, SecureRandom random); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientInfoGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientInfoGenerator.cs.meta new file mode 100644 index 000000000..5266110e6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientInfoGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98552255b0d43084da588633f2b167e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientInformation.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientInformation.cs new file mode 100644 index 000000000..de92035e7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientInformation.cs @@ -0,0 +1,130 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + public abstract class RecipientInformation + { + internal RecipientID rid = new RecipientID(); + internal AlgorithmIdentifier keyEncAlg; + internal CmsSecureReadable secureReadable; + + private byte[] resultMac; + + internal RecipientInformation( + AlgorithmIdentifier keyEncAlg, + CmsSecureReadable secureReadable) + { + this.keyEncAlg = keyEncAlg; + this.secureReadable = secureReadable; + } + + internal string GetContentAlgorithmName() + { + AlgorithmIdentifier algorithm = secureReadable.Algorithm; +// return CmsEnvelopedHelper.Instance.GetSymmetricCipherName(algorithm.Algorithm.Id); + return algorithm.Algorithm.Id; + } + + public RecipientID RecipientID + { + get { return rid; } + } + + public AlgorithmIdentifier KeyEncryptionAlgorithmID + { + get { return keyEncAlg; } + } + + /** + * return the object identifier for the key encryption algorithm. + * + * @return OID for key encryption algorithm. + */ + public string KeyEncryptionAlgOid + { + get { return keyEncAlg.Algorithm.Id; } + } + + /** + * return the ASN.1 encoded key encryption algorithm parameters, or null if + * there aren't any. + * + * @return ASN.1 encoding of key encryption algorithm parameters. + */ + public Asn1Object KeyEncryptionAlgParams + { + get + { + Asn1Encodable ae = keyEncAlg.Parameters; + + return ae == null ? null : ae.ToAsn1Object(); + } + } + + internal CmsTypedStream GetContentFromSessionKey( + KeyParameter sKey) + { + CmsReadable readable = secureReadable.GetReadable(sKey); + + try + { + return new CmsTypedStream(readable.GetInputStream()); + } + catch (IOException e) + { + throw new CmsException("error getting .", e); + } + } + + public byte[] GetContent( + ICipherParameters key) + { + try + { + return CmsUtilities.StreamToByteArray(GetContentStream(key).ContentStream); + } + catch (IOException e) + { + throw new Exception("unable to parse internal stream: " + e); + } + } + + /** + * Return the MAC calculated for the content stream. Note: this call is only meaningful once all + * the content has been read. + * + * @return byte array containing the mac. + */ + public byte[] GetMac() + { + if (resultMac == null) + { + object cryptoObject = secureReadable.CryptoObject; + if (cryptoObject is IMac mac) + { + resultMac = MacUtilities.DoFinal(mac); + } + } + + return Arrays.Clone(resultMac); + } + + public abstract CmsTypedStream GetContentStream(ICipherParameters key); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientInformation.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientInformation.cs.meta new file mode 100644 index 000000000..2cb5fd11e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientInformation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b09bd29817789f64585d8d5fd9c5bc31 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientInformationStore.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientInformationStore.cs new file mode 100644 index 000000000..89b777aa3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientInformationStore.cs @@ -0,0 +1,89 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + public class RecipientInformationStore + { + private readonly IList m_all; + private readonly IDictionary> m_table = + new Dictionary>(); + + public RecipientInformationStore(IEnumerable recipientInfos) + { + foreach (RecipientInformation recipientInformation in recipientInfos) + { + RecipientID rid = recipientInformation.RecipientID; + + if (!m_table.TryGetValue(rid, out var list)) + { + m_table[rid] = list = new List(1); + } + + list.Add(recipientInformation); + } + + this.m_all = new List(recipientInfos); + } + + public RecipientInformation this[RecipientID selector] + { + get { return GetFirstRecipient(selector); } + } + + /** + * Return the first RecipientInformation object that matches the + * passed in selector. Null if there are no matches. + * + * @param selector to identify a recipient + * @return a single RecipientInformation object. Null if none matches. + */ + public RecipientInformation GetFirstRecipient(RecipientID selector) + { + if (!m_table.TryGetValue(selector, out var list)) + return null; + + return list[0]; + } + + /** + * Return the number of recipients in the collection. + * + * @return number of recipients identified. + */ + public int Count + { + get { return m_all.Count; } + } + + /** + * Return all recipients in the collection + * + * @return a collection of recipients. + */ + public IList GetRecipients() + { + return new List(m_all); + } + + /** + * Return possible empty collection with recipients matching the passed in RecipientID + * + * @param selector a recipient id to select against. + * @return a collection of RecipientInformation objects. + */ + public IList GetRecipients(RecipientID selector) + { + if (!m_table.TryGetValue(selector, out var list)) + return new List(0); + + return new List(list); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientInformationStore.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientInformationStore.cs.meta new file mode 100644 index 000000000..4010dbe74 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/RecipientInformationStore.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b264e8d3e47b2984cbe5e32516b48789 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerId.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerId.cs new file mode 100644 index 000000000..d58f68507 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerId.cs @@ -0,0 +1,55 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Store; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * a basic index for a signer. + */ + public class SignerID + : X509CertStoreSelector + { + public override int GetHashCode() + { + int code = Arrays.GetHashCode(this.SubjectKeyIdentifier); + + BigInteger serialNumber = this.SerialNumber; + if (serialNumber != null) + { + code ^= serialNumber.GetHashCode(); + } + + X509Name issuer = this.Issuer; + if (issuer != null) + { + code ^= issuer.GetHashCode(); + } + + return code; + } + + public override bool Equals( + object obj) + { + if (obj == this) + return false; + + SignerID id = obj as SignerID; + + if (id == null) + return false; + + return Arrays.AreEqual(SubjectKeyIdentifier, id.SubjectKeyIdentifier) + && Org.BouncyCastle.Utilities.Platform.Equals(SerialNumber, id.SerialNumber) + && IssuersMatch(Issuer, id.Issuer); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerId.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerId.cs.meta new file mode 100644 index 000000000..2f99c90f0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerId.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 301fe279a448eb44e9877141e50d0d51 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerInfoGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerInfoGenerator.cs new file mode 100644 index 000000000..ce226a5e2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerInfoGenerator.cs @@ -0,0 +1,181 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + internal interface ISignerInfoGenerator + { + SignerInfo Generate(DerObjectIdentifier contentType, AlgorithmIdentifier digestAlgorithm, + byte[] calculatedDigest); + } + + public class SignerInfoGenerator + { + internal X509Certificate certificate; + internal ISignatureFactory contentSigner; + internal SignerIdentifier sigId; + internal CmsAttributeTableGenerator signedGen; + internal CmsAttributeTableGenerator unsignedGen; + private bool isDirectSignature; + + internal SignerInfoGenerator(SignerIdentifier sigId, ISignatureFactory signerFactory): this(sigId, signerFactory, false) + { + + } + + internal SignerInfoGenerator(SignerIdentifier sigId, ISignatureFactory signerFactory, bool isDirectSignature) + { + this.sigId = sigId; + this.contentSigner = signerFactory; + this.isDirectSignature = isDirectSignature; + if (this.isDirectSignature) + { + this.signedGen = null; + this.unsignedGen = null; + } + else + { + this.signedGen = new DefaultSignedAttributeTableGenerator(); + this.unsignedGen = null; + } + } + + internal SignerInfoGenerator(SignerIdentifier sigId, ISignatureFactory contentSigner, CmsAttributeTableGenerator signedGen, CmsAttributeTableGenerator unsignedGen) + { + this.sigId = sigId; + this.contentSigner = contentSigner; + this.signedGen = signedGen; + this.unsignedGen = unsignedGen; + this.isDirectSignature = false; + } + + internal void setAssociatedCertificate(X509Certificate certificate) + { + this.certificate = certificate; + } + + public SignerInfoGeneratorBuilder NewBuilder() + { + SignerInfoGeneratorBuilder builder = new SignerInfoGeneratorBuilder(); + builder.WithSignedAttributeGenerator(signedGen); + builder.WithUnsignedAttributeGenerator(unsignedGen); + builder.SetDirectSignature(isDirectSignature); + return builder; + } + + } + + public class SignerInfoGeneratorBuilder + { + private bool directSignature; + private CmsAttributeTableGenerator signedGen; + private CmsAttributeTableGenerator unsignedGen; + + public SignerInfoGeneratorBuilder() + { + } + + + /** + * If the passed in flag is true, the signer signature will be based on the data, not + * a collection of signed attributes, and no signed attributes will be included. + * + * @return the builder object + */ + public SignerInfoGeneratorBuilder SetDirectSignature(bool hasNoSignedAttributes) + { + this.directSignature = hasNoSignedAttributes; + + return this; + } + + /** + * Provide a custom signed attribute generator. + * + * @param signedGen a generator of signed attributes. + * @return the builder object + */ + public SignerInfoGeneratorBuilder WithSignedAttributeGenerator(CmsAttributeTableGenerator signedGen) + { + this.signedGen = signedGen; + + return this; + } + + /** + * Provide a generator of unsigned attributes. + * + * @param unsignedGen a generator for signed attributes. + * @return the builder object + */ + public SignerInfoGeneratorBuilder WithUnsignedAttributeGenerator(CmsAttributeTableGenerator unsignedGen) + { + this.unsignedGen = unsignedGen; + + return this; + } + + /** + * Build a generator with the passed in X.509 certificate issuer and serial number as the signerIdentifier. + * + * @param contentSigner operator for generating the final signature in the SignerInfo with. + * @param certificate X.509 certificate related to the contentSigner. + * @return a SignerInfoGenerator + * @throws OperatorCreationException if the generator cannot be built. + */ + public SignerInfoGenerator Build(ISignatureFactory contentSigner, X509Certificate certificate) + { + SignerIdentifier sigId = new SignerIdentifier(new IssuerAndSerialNumber(certificate.IssuerDN, new DerInteger(certificate.SerialNumber))); + + SignerInfoGenerator sigInfoGen = CreateGenerator(contentSigner, sigId); + + sigInfoGen.setAssociatedCertificate(certificate); + + return sigInfoGen; + } + + /** + * Build a generator with the passed in subjectKeyIdentifier as the signerIdentifier. If used you should + * try to follow the calculation described in RFC 5280 section 4.2.1.2. + * + * @param signerFactory operator factory for generating the final signature in the SignerInfo with. + * @param subjectKeyIdentifier key identifier to identify the public key for verifying the signature. + * @return a SignerInfoGenerator + */ + public SignerInfoGenerator Build(ISignatureFactory signerFactory, byte[] subjectKeyIdentifier) + { + SignerIdentifier sigId = new SignerIdentifier(new DerOctetString(subjectKeyIdentifier)); + + return CreateGenerator(signerFactory, sigId); + } + + private SignerInfoGenerator CreateGenerator(ISignatureFactory contentSigner, SignerIdentifier sigId) + { + if (directSignature) + { + return new SignerInfoGenerator(sigId, contentSigner, true); + } + + if (signedGen != null || unsignedGen != null) + { + if (signedGen == null) + { + signedGen = new DefaultSignedAttributeTableGenerator(); + } + + return new SignerInfoGenerator(sigId, contentSigner, signedGen, unsignedGen); + } + + return new SignerInfoGenerator(sigId, contentSigner); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerInfoGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerInfoGenerator.cs.meta new file mode 100644 index 000000000..c63cc452d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerInfoGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 432e7e0fd04f285448faeb0b827ea82e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerInformation.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerInformation.cs new file mode 100644 index 000000000..c8b9f7adb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerInformation.cs @@ -0,0 +1,813 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * an expanded SignerInfo block from a CMS Signed message + */ + public class SignerInformation + { + private static readonly CmsSignedHelper Helper = CmsSignedHelper.Instance; + + private SignerID sid; + + private CmsProcessable content; + private byte[] signature; + private DerObjectIdentifier contentType; + private byte[] calculatedDigest; + private byte[] resultDigest; + + // Derived + private Asn1.Cms.AttributeTable signedAttributeTable; + private Asn1.Cms.AttributeTable unsignedAttributeTable; + private readonly bool isCounterSignature; + + protected SignerInfo info; + protected AlgorithmIdentifier digestAlgorithm; + protected AlgorithmIdentifier encryptionAlgorithm; + protected readonly Asn1Set signedAttributeSet; + protected readonly Asn1Set unsignedAttributeSet; + + internal SignerInformation( + SignerInfo info, + DerObjectIdentifier contentType, + CmsProcessable content, + IDigestCalculator digestCalculator) + { + this.info = info; + this.sid = new SignerID(); + this.contentType = contentType; + this.isCounterSignature = contentType == null; + + try + { + SignerIdentifier s = info.SignerID; + + if (s.IsTagged) + { + Asn1OctetString octs = Asn1OctetString.GetInstance(s.ID); + + sid.SubjectKeyIdentifier = octs.GetEncoded(); + } + else + { + Asn1.Cms.IssuerAndSerialNumber iAnds = + Asn1.Cms.IssuerAndSerialNumber.GetInstance(s.ID); + + sid.Issuer = iAnds.Name; + sid.SerialNumber = iAnds.SerialNumber.Value; + } + } + catch (IOException) + { + throw new ArgumentException("invalid sid in SignerInfo"); + } + + this.digestAlgorithm = info.DigestAlgorithm; + this.signedAttributeSet = info.AuthenticatedAttributes; + this.unsignedAttributeSet = info.UnauthenticatedAttributes; + this.encryptionAlgorithm = info.DigestEncryptionAlgorithm; + this.signature = (byte[])info.EncryptedDigest.GetOctets().Clone(); + + this.content = content; + this.calculatedDigest = (digestCalculator != null) ? digestCalculator.GetDigest() : null; + } + + /** + * Protected constructor. In some cases clients have their own idea about how to encode + * the signed attributes and calculate the signature. This constructor is to allow developers + * to deal with that by extending off the class and overriding e.g. SignedAttributes property. + * + * @param baseInfo the SignerInformation to base this one on. + */ + protected SignerInformation(SignerInformation baseInfo) + { + this.info = baseInfo.info; + this.content = baseInfo.content; + this.contentType = baseInfo.contentType; + this.isCounterSignature = baseInfo.IsCounterSignature; + this.sid = baseInfo.sid; + this.digestAlgorithm = info.DigestAlgorithm; + this.signedAttributeSet = info.AuthenticatedAttributes; + this.unsignedAttributeSet = info.UnauthenticatedAttributes; + this.encryptionAlgorithm = info.DigestEncryptionAlgorithm; + this.signature = (byte[])info.EncryptedDigest.GetOctets().Clone(); + + this.calculatedDigest = baseInfo.calculatedDigest; + this.signedAttributeTable = baseInfo.signedAttributeTable; + this.unsignedAttributeTable = baseInfo.unsignedAttributeTable; + } + + public bool IsCounterSignature + { + get { return isCounterSignature; } + } + + public DerObjectIdentifier ContentType + { + get { return contentType; } + } + + public SignerID SignerID + { + get { return sid; } + } + + /** + * return the version number for this objects underlying SignerInfo structure. + */ + public int Version + { + get { return info.Version.IntValueExact; } + } + + public AlgorithmIdentifier DigestAlgorithmID + { + get { return digestAlgorithm; } + } + + /** + * return the object identifier for the signature. + */ + public string DigestAlgOid + { + get { return digestAlgorithm.Algorithm.Id; } + } + + /** + * return the signature parameters, or null if there aren't any. + */ + public Asn1Object DigestAlgParams + { + get + { + Asn1Encodable ae = digestAlgorithm.Parameters; + + return ae == null ? null : ae.ToAsn1Object(); + } + } + + /** + * return the content digest that was calculated during verification. + */ + public byte[] GetContentDigest() + { + if (resultDigest == null) + { + throw new InvalidOperationException("method can only be called after verify."); + } + + return (byte[])resultDigest.Clone(); + } + + public AlgorithmIdentifier EncryptionAlgorithmID + { + get { return encryptionAlgorithm; } + } + + /** + * return the object identifier for the signature. + */ + public string EncryptionAlgOid + { + get { return encryptionAlgorithm.Algorithm.Id; } + } + + /** + * return the signature/encryption algorithm parameters, or null if + * there aren't any. + */ + public Asn1Object EncryptionAlgParams + { + get + { + Asn1Encodable ae = encryptionAlgorithm.Parameters; + + return ae == null ? null : ae.ToAsn1Object(); + } + } + + /** + * return a table of the signed attributes - indexed by + * the OID of the attribute. + */ + public Asn1.Cms.AttributeTable SignedAttributes + { + get + { + if (signedAttributeSet != null && signedAttributeTable == null) + { + signedAttributeTable = new Asn1.Cms.AttributeTable(signedAttributeSet); + } + return signedAttributeTable; + } + } + + /** + * return a table of the unsigned attributes indexed by + * the OID of the attribute. + */ + public Asn1.Cms.AttributeTable UnsignedAttributes + { + get + { + if (unsignedAttributeSet != null && unsignedAttributeTable == null) + { + unsignedAttributeTable = new Asn1.Cms.AttributeTable(unsignedAttributeSet); + } + return unsignedAttributeTable; + } + } + + /** + * return the encoded signature + */ + public byte[] GetSignature() + { + return (byte[]) signature.Clone(); + } + + /** + * Return a SignerInformationStore containing the counter signatures attached to this + * signer. If no counter signatures are present an empty store is returned. + */ + public SignerInformationStore GetCounterSignatures() + { + // TODO There are several checks implied by the RFC3852 comments that are missing + + /* + The countersignature attribute MUST be an unsigned attribute; it MUST + NOT be a signed attribute, an authenticated attribute, an + unauthenticated attribute, or an unprotected attribute. + */ + Asn1.Cms.AttributeTable unsignedAttributeTable = UnsignedAttributes; + if (unsignedAttributeTable == null) + { + return new SignerInformationStore(new List(0)); + } + + var counterSignatures = new List(); + + /* + The UnsignedAttributes syntax is defined as a SET OF Attributes. The + UnsignedAttributes in a signerInfo may include multiple instances of + the countersignature attribute. + */ + Asn1EncodableVector allCSAttrs = unsignedAttributeTable.GetAll(CmsAttributes.CounterSignature); + + foreach (Asn1.Cms.Attribute counterSignatureAttribute in allCSAttrs) + { + /* + A countersignature attribute can have multiple attribute values. The + syntax is defined as a SET OF AttributeValue, and there MUST be one + or more instances of AttributeValue present. + */ + Asn1Set values = counterSignatureAttribute.AttrValues; + if (values.Count < 1) + { + // TODO Throw an appropriate exception? + } + + foreach (Asn1Encodable asn1Obj in values) + { + /* + Countersignature values have the same meaning as SignerInfo values + for ordinary signatures, except that: + + 1. The signedAttributes field MUST NOT contain a content-type + attribute; there is no content type for countersignatures. + + 2. The signedAttributes field MUST contain a message-digest + attribute if it contains any other attributes. + + 3. The input to the message-digesting process is the contents + octets of the DER encoding of the signatureValue field of the + SignerInfo value with which the attribute is associated. + */ + SignerInfo si = SignerInfo.GetInstance(asn1Obj.ToAsn1Object()); + + string digestName = CmsSignedHelper.Instance.GetDigestAlgName(si.DigestAlgorithm.Algorithm.Id); + + counterSignatures.Add(new SignerInformation(si, null, null, new CounterSignatureDigestCalculator(digestName, GetSignature()))); + } + } + + return new SignerInformationStore(counterSignatures); + } + + /** + * return the DER encoding of the signed attributes. + * @throws IOException if an encoding error occurs. + */ + public virtual byte[] GetEncodedSignedAttributes() + { + return signedAttributeSet == null + ? null + : signedAttributeSet.GetEncoded(Asn1Encodable.Der); + } + + private bool DoVerify( + AsymmetricKeyParameter key) + { + DerObjectIdentifier sigAlgOid = this.encryptionAlgorithm.Algorithm; + Asn1Encodable sigParams = this.encryptionAlgorithm.Parameters; + string digestName = Helper.GetDigestAlgName(this.EncryptionAlgOid); + + if (digestName.Equals(sigAlgOid.Id)) + { + digestName = Helper.GetDigestAlgName(this.DigestAlgOid); + } + + IDigest digest = Helper.GetDigestInstance(digestName); + ISigner sig; + + if (sigAlgOid.Equals(Asn1.Pkcs.PkcsObjectIdentifiers.IdRsassaPss)) + { + // RFC 4056 2.2 + // When the id-RSASSA-PSS algorithm identifier is used for a signature, + // the AlgorithmIdentifier parameters field MUST contain RSASSA-PSS-params. + if (sigParams == null) + throw new CmsException("RSASSA-PSS signature must specify algorithm parameters"); + + try + { + // TODO Provide abstract configuration mechanism + // (via alternate SignerUtilities.GetSigner method taking ASN.1 params) + + Asn1.Pkcs.RsassaPssParameters pss = Asn1.Pkcs.RsassaPssParameters.GetInstance( + sigParams.ToAsn1Object()); + + if (!pss.HashAlgorithm.Algorithm.Equals(this.digestAlgorithm.Algorithm)) + throw new CmsException("RSASSA-PSS signature parameters specified incorrect hash algorithm"); + if (!pss.MaskGenAlgorithm.Algorithm.Equals(Asn1.Pkcs.PkcsObjectIdentifiers.IdMgf1)) + throw new CmsException("RSASSA-PSS signature parameters specified unknown MGF"); + + IDigest pssDigest = DigestUtilities.GetDigest(pss.HashAlgorithm.Algorithm); + int saltLength = pss.SaltLength.IntValueExact; + + // RFC 4055 3.1 + // The value MUST be 1, which represents the trailer field with hexadecimal value 0xBC + if (!Asn1.Pkcs.RsassaPssParameters.DefaultTrailerField.Equals(pss.TrailerField)) + throw new CmsException("RSASSA-PSS signature parameters must have trailerField of 1"); + + IAsymmetricBlockCipher rsa = new RsaBlindedEngine(); + + if (signedAttributeSet == null && calculatedDigest != null) + { + sig = PssSigner.CreateRawSigner(rsa, pssDigest, pssDigest, saltLength, PssSigner.TrailerImplicit); + } + else + { + sig = new PssSigner(rsa, pssDigest, saltLength); + } + } + catch (Exception e) + { + throw new CmsException("failed to set RSASSA-PSS signature parameters", e); + } + } + else + { + // TODO Probably too strong a check at the moment + // if (sigParams != null) + // throw new CmsException("unrecognised signature parameters provided"); + + string signatureName = digestName + "with" + Helper.GetEncryptionAlgName(this.EncryptionAlgOid); + + sig = Helper.GetSignatureInstance(signatureName); + + //sig = Helper.GetSignatureInstance(this.EncryptionAlgOid); + //sig = SignerUtilities.GetSigner(sigAlgOid); + } + + try + { + if (calculatedDigest != null) + { + resultDigest = calculatedDigest; + } + else + { + if (content != null) + { + content.Write(new DigestSink(digest)); + } + else if (signedAttributeSet == null) + { + // TODO Get rid of this exception and just treat content==null as empty not missing? + throw new CmsException("data not encapsulated in signature - use detached constructor."); + } + + resultDigest = DigestUtilities.DoFinal(digest); + } + } + catch (IOException e) + { + throw new CmsException("can't process mime object to create signature.", e); + } + + // RFC 3852 11.1 Check the content-type attribute is correct + { + Asn1Object validContentType = GetSingleValuedSignedAttribute( + CmsAttributes.ContentType, "content-type"); + if (validContentType == null) + { + if (!isCounterSignature && signedAttributeSet != null) + throw new CmsException("The content-type attribute type MUST be present whenever signed attributes are present in signed-data"); + } + else + { + if (isCounterSignature) + throw new CmsException("[For counter signatures,] the signedAttributes field MUST NOT contain a content-type attribute"); + + if (!(validContentType is DerObjectIdentifier signedContentType)) + throw new CmsException("content-type attribute value not of ASN.1 type 'OBJECT IDENTIFIER'"); + + if (!signedContentType.Equals(contentType)) + throw new CmsException("content-type attribute value does not match eContentType"); + } + } + + // RFC 3852 11.2 Check the message-digest attribute is correct + { + Asn1Object validMessageDigest = GetSingleValuedSignedAttribute( + CmsAttributes.MessageDigest, "message-digest"); + if (validMessageDigest == null) + { + if (signedAttributeSet != null) + throw new CmsException("the message-digest signed attribute type MUST be present when there are any signed attributes present"); + } + else + { + if (!(validMessageDigest is Asn1OctetString signedMessageDigest)) + throw new CmsException("message-digest attribute value not of ASN.1 type 'OCTET STRING'"); + + if (!Arrays.AreEqual(resultDigest, signedMessageDigest.GetOctets())) + throw new CmsException("message-digest attribute value does not match calculated value"); + } + } + + // RFC 3852 11.4 Validate countersignature attribute(s) + { + Asn1.Cms.AttributeTable signedAttrTable = this.SignedAttributes; + if (signedAttrTable != null + && signedAttrTable.GetAll(CmsAttributes.CounterSignature).Count > 0) + { + throw new CmsException("A countersignature attribute MUST NOT be a signed attribute"); + } + + Asn1.Cms.AttributeTable unsignedAttrTable = this.UnsignedAttributes; + if (unsignedAttrTable != null) + { + foreach (Asn1.Cms.Attribute csAttr in unsignedAttrTable.GetAll(CmsAttributes.CounterSignature)) + { + if (csAttr.AttrValues.Count < 1) + throw new CmsException("A countersignature attribute MUST contain at least one AttributeValue"); + + // Note: We don't recursively validate the countersignature value + } + } + } + + try + { + sig.Init(false, key); + + if (signedAttributeSet == null) + { + if (calculatedDigest != null) + { + if (sig is PssSigner) + { + sig.BlockUpdate(resultDigest, 0, resultDigest.Length); + } + else + { + // need to decrypt signature and check message bytes + return VerifyDigest(resultDigest, key, this.GetSignature()); + } + } + else if (content != null) + { + try + { + // TODO Use raw signature of the hash value instead + content.Write(new SignerSink(sig)); + } + catch (SignatureException e) + { + throw new CmsStreamException("signature problem: " + e); + } + } + } + else + { + byte[] tmp = this.GetEncodedSignedAttributes(); + sig.BlockUpdate(tmp, 0, tmp.Length); + } + + return sig.VerifySignature(this.GetSignature()); + } + catch (InvalidKeyException e) + { + throw new CmsException("key not appropriate to signature in message.", e); + } + catch (IOException e) + { + throw new CmsException("can't process mime object to create signature.", e); + } + catch (SignatureException e) + { + throw new CmsException("invalid signature format in message: " + e.Message, e); + } + } + + private bool IsNull( + Asn1Encodable o) + { + return (o is Asn1Null) || (o == null); + } + + private DigestInfo DerDecode( + byte[] encoding) + { + if (encoding[0] != (int)(Asn1Tags.Constructed | Asn1Tags.Sequence)) + { + throw new IOException("not a digest info object"); + } + + DigestInfo digInfo = DigestInfo.GetInstance(Asn1Object.FromByteArray(encoding)); + + // length check to avoid Bleichenbacher vulnerability + + if (digInfo.GetEncoded().Length != encoding.Length) + { + throw new CmsException("malformed RSA signature"); + } + + return digInfo; + } + + private bool VerifyDigest( + byte[] digest, + AsymmetricKeyParameter key, + byte[] signature) + { + string algorithm = Helper.GetEncryptionAlgName(this.EncryptionAlgOid); + + try + { + if (algorithm.Equals("RSA")) + { + IBufferedCipher c = CmsEnvelopedHelper.Instance.CreateAsymmetricCipher("RSA/ECB/PKCS1Padding"); + + c.Init(false, key); + + byte[] decrypt = c.DoFinal(signature); + + DigestInfo digInfo = DerDecode(decrypt); + + if (!digInfo.AlgorithmID.Algorithm.Equals(digestAlgorithm.Algorithm)) + { + return false; + } + + if (!IsNull(digInfo.AlgorithmID.Parameters)) + { + return false; + } + + byte[] sigHash = digInfo.GetDigest(); + + return Arrays.ConstantTimeAreEqual(digest, sigHash); + } + else if (algorithm.Equals("DSA")) + { + ISigner sig = SignerUtilities.GetSigner("NONEwithDSA"); + + sig.Init(false, key); + + sig.BlockUpdate(digest, 0, digest.Length); + + return sig.VerifySignature(signature); + } + else + { + throw new CmsException("algorithm: " + algorithm + " not supported in base signatures."); + } + } + catch (SecurityUtilityException e) + { + throw e; + } + catch (GeneralSecurityException e) + { + throw new CmsException("Exception processing signature: " + e, e); + } + catch (IOException e) + { + throw new CmsException("Exception decoding signature: " + e, e); + } + } + + /** + * verify that the given public key successfully handles and confirms the + * signature associated with this signer. + */ + public bool Verify( + AsymmetricKeyParameter pubKey) + { + if (pubKey.IsPrivate) + throw new ArgumentException("Expected public key", "pubKey"); + + // Optional, but still need to validate if present + GetSigningTime(); + + return DoVerify(pubKey); + } + + /** + * verify that the given certificate successfully handles and confirms + * the signature associated with this signer and, if a signingTime + * attribute is available, that the certificate was valid at the time the + * signature was generated. + */ + public bool Verify( + X509Certificate cert) + { + Asn1.Cms.Time signingTime = GetSigningTime(); + if (signingTime != null) + { + cert.CheckValidity(signingTime.ToDateTime()); + } + + return DoVerify(cert.GetPublicKey()); + } + + /** + * Return the base ASN.1 CMS structure that this object contains. + * + * @return an object containing a CMS SignerInfo structure. + */ + public SignerInfo ToSignerInfo() + { + return info; + } + + private Asn1Object GetSingleValuedSignedAttribute( + DerObjectIdentifier attrOID, string printableName) + { + + Asn1.Cms.AttributeTable unsignedAttrTable = this.UnsignedAttributes; + if (unsignedAttrTable != null + && unsignedAttrTable.GetAll(attrOID).Count > 0) + { + throw new CmsException("The " + printableName + + " attribute MUST NOT be an unsigned attribute"); + } + + Asn1.Cms.AttributeTable signedAttrTable = this.SignedAttributes; + if (signedAttrTable == null) + { + return null; + } + + Asn1EncodableVector v = signedAttrTable.GetAll(attrOID); + switch (v.Count) + { + case 0: + return null; + case 1: + Asn1.Cms.Attribute t = (Asn1.Cms.Attribute) v[0]; + Asn1Set attrValues = t.AttrValues; + + if (attrValues.Count != 1) + throw new CmsException("A " + printableName + + " attribute MUST have a single attribute value"); + + return attrValues[0].ToAsn1Object(); + default: + throw new CmsException("The SignedAttributes in a signerInfo MUST NOT include multiple instances of the " + + printableName + " attribute"); + } + } + + private Asn1.Cms.Time GetSigningTime() + { + Asn1Object validSigningTime = GetSingleValuedSignedAttribute( + CmsAttributes.SigningTime, "signing-time"); + + if (validSigningTime == null) + return null; + + try + { + return Asn1.Cms.Time.GetInstance(validSigningTime); + } + catch (ArgumentException) + { + throw new CmsException("signing-time attribute value not a valid 'Time' structure"); + } + } + + /** + * Return a signer information object with the passed in unsigned + * attributes replacing the ones that are current associated with + * the object passed in. + * + * @param signerInformation the signerInfo to be used as the basis. + * @param unsignedAttributes the unsigned attributes to add. + * @return a copy of the original SignerInformationObject with the changed attributes. + */ + public static SignerInformation ReplaceUnsignedAttributes( + SignerInformation signerInformation, + Asn1.Cms.AttributeTable unsignedAttributes) + { + SignerInfo sInfo = signerInformation.info; + Asn1Set unsignedAttr = null; + + if (unsignedAttributes != null) + { + unsignedAttr = new DerSet(unsignedAttributes.ToAsn1EncodableVector()); + } + + return new SignerInformation( + new SignerInfo( + sInfo.SignerID, + sInfo.DigestAlgorithm, + sInfo.AuthenticatedAttributes, + sInfo.DigestEncryptionAlgorithm, + sInfo.EncryptedDigest, + unsignedAttr), + signerInformation.contentType, + signerInformation.content, + null); + } + + /** + * Return a signer information object with passed in SignerInformationStore representing counter + * signatures attached as an unsigned attribute. + * + * @param signerInformation the signerInfo to be used as the basis. + * @param counterSigners signer info objects carrying counter signature. + * @return a copy of the original SignerInformationObject with the changed attributes. + */ + public static SignerInformation AddCounterSigners( + SignerInformation signerInformation, + SignerInformationStore counterSigners) + { + // TODO Perform checks from RFC 3852 11.4 + + SignerInfo sInfo = signerInformation.info; + Asn1.Cms.AttributeTable unsignedAttr = signerInformation.UnsignedAttributes; + Asn1EncodableVector v; + + if (unsignedAttr != null) + { + v = unsignedAttr.ToAsn1EncodableVector(); + } + else + { + v = new Asn1EncodableVector(); + } + + Asn1EncodableVector sigs = new Asn1EncodableVector(); + + foreach (SignerInformation sigInf in counterSigners.GetSigners()) + { + sigs.Add(sigInf.ToSignerInfo()); + } + + v.Add(new Asn1.Cms.Attribute(CmsAttributes.CounterSignature, new DerSet(sigs))); + + return new SignerInformation( + new SignerInfo( + sInfo.SignerID, + sInfo.DigestAlgorithm, + sInfo.AuthenticatedAttributes, + sInfo.DigestEncryptionAlgorithm, + sInfo.EncryptedDigest, + new DerSet(v)), + signerInformation.contentType, + signerInformation.content, + null); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerInformation.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerInformation.cs.meta new file mode 100644 index 000000000..c30025603 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerInformation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dfd117ab49ca573488f189430fec731e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerInformationStore.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerInformationStore.cs new file mode 100644 index 000000000..ca8871b2a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerInformationStore.cs @@ -0,0 +1,94 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + public class SignerInformationStore + { + private readonly IList all; + private readonly IDictionary> m_table = + new Dictionary>(); + + /** + * Create a store containing a single SignerInformation object. + * + * @param signerInfo the signer information to contain. + */ + public SignerInformationStore(SignerInformation signerInfo) + { + this.all = new List(1); + this.all.Add(signerInfo); + + SignerID sid = signerInfo.SignerID; + + m_table[sid] = all; + } + + /** + * Create a store containing a collection of SignerInformation objects. + * + * @param signerInfos a collection signer information objects to contain. + */ + public SignerInformationStore(IEnumerable signerInfos) + { + foreach (SignerInformation signer in signerInfos) + { + SignerID sid = signer.SignerID; + + if (!m_table.TryGetValue(sid, out var list)) + { + m_table[sid] = list = new List(1); + } + + list.Add(signer); + } + + this.all = new List(signerInfos); + } + + /** + * Return the first SignerInformation object that matches the + * passed in selector. Null if there are no matches. + * + * @param selector to identify a signer + * @return a single SignerInformation object. Null if none matches. + */ + public SignerInformation GetFirstSigner(SignerID selector) + { + if (m_table.TryGetValue(selector, out var list)) + return list[0]; + + return null; + } + + /// The number of signers in the collection. + public int Count + { + get { return all.Count; } + } + + /// An ICollection of all signers in the collection + public IList GetSigners() + { + return new List(all); + } + + /** + * Return possible empty collection with signers matching the passed in SignerID + * + * @param selector a signer id to select against. + * @return a collection of SignerInformation objects. + */ + public IList GetSigners(SignerID selector) + { + if (m_table.TryGetValue(selector, out var list)) + return new List(list); + + return new List(0); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerInformationStore.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerInformationStore.cs.meta new file mode 100644 index 000000000..5f2fd7a0d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SignerInformationStore.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d7833ac1bdca67e48b219183aab7cebe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SimpleAttributeTableGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SimpleAttributeTableGenerator.cs new file mode 100644 index 000000000..b5260cb5a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SimpleAttributeTableGenerator.cs @@ -0,0 +1,31 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms +{ + /** + * Basic generator that just returns a preconstructed attribute table + */ + public class SimpleAttributeTableGenerator + : CmsAttributeTableGenerator + { + private readonly AttributeTable attributes; + + public SimpleAttributeTableGenerator( + AttributeTable attributes) + { + this.attributes = attributes; + } + + public virtual AttributeTable GetAttributes(IDictionary parameters) + { + return attributes; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SimpleAttributeTableGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SimpleAttributeTableGenerator.cs.meta new file mode 100644 index 000000000..1501fae48 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/cms/SimpleAttributeTableGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 373dc7b36a67c43448524ed163119b9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf.meta new file mode 100644 index 000000000..ce52268ac --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c9b0ed79bbe31e941afccc233def7108 +folderAsset: yes +timeCreated: 1572510023 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/AuthenticatorControl.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/AuthenticatorControl.cs new file mode 100644 index 000000000..d8398a604 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/AuthenticatorControl.cs @@ -0,0 +1,56 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crmf +{ + /// + /// Carrier for an authenticator control. + /// + public class AuthenticatorControl + : IControl + { + private static readonly DerObjectIdentifier type = CrmfObjectIdentifiers.id_regCtrl_authenticator; + + private readonly DerUtf8String token; + + /// + /// Basic constructor - build from a UTF-8 string representing the token. + /// + /// UTF-8 string representing the token. + public AuthenticatorControl(DerUtf8String token) + { + this.token = token; + } + + /// + /// Basic constructor - build from a string representing the token. + /// + /// string representing the token. + public AuthenticatorControl(string token) + { + this.token = new DerUtf8String(token); + } + + /// + /// Return the type of this control. + /// + public DerObjectIdentifier Type + { + get { return type; } + } + + /// + /// Return the token associated with this control (a UTF8String). + /// + public Asn1Encodable Value + { + get { return token; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/AuthenticatorControl.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/AuthenticatorControl.cs.meta new file mode 100644 index 000000000..29c252647 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/AuthenticatorControl.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 28a1a8a8f104c564bb93406b47ed90bd +timeCreated: 1572510027 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/CertificateRequestMessage.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/CertificateRequestMessage.cs new file mode 100644 index 000000000..8d953dd4f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/CertificateRequestMessage.cs @@ -0,0 +1,233 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crmf +{ + public class CertificateRequestMessage + { + public static readonly int popRaVerified = BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf.ProofOfPossession.TYPE_RA_VERIFIED; + public static readonly int popSigningKey = BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf.ProofOfPossession.TYPE_SIGNING_KEY; + public static readonly int popKeyEncipherment = BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf.ProofOfPossession.TYPE_KEY_ENCIPHERMENT; + public static readonly int popKeyAgreement = BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf.ProofOfPossession.TYPE_KEY_AGREEMENT; + + private readonly CertReqMsg certReqMsg; + private readonly Controls controls; + + private static CertReqMsg ParseBytes(byte[] encoding) + { + return CertReqMsg.GetInstance(encoding); + } + + /// + /// Create a CertificateRequestMessage from the passed in bytes. + /// + /// BER/DER encoding of the CertReqMsg structure. + public CertificateRequestMessage(byte[] encoded) + : this(CertReqMsg.GetInstance(encoded)) + { + } + + public CertificateRequestMessage(CertReqMsg certReqMsg) + { + this.certReqMsg = certReqMsg; + this.controls = certReqMsg.CertReq.Controls; + } + + /// + /// Return the underlying ASN.1 object defining this CertificateRequestMessage object. + /// + /// A CertReqMsg + public CertReqMsg ToAsn1Structure() + { + return certReqMsg; + } + + /// + /// Return the certificate template contained in this message. + /// + /// a CertTemplate structure. + public CertTemplate GetCertTemplate() + { + return this.certReqMsg.CertReq.CertTemplate; + } + + /// + /// Return whether or not this request has control values associated with it. + /// + /// true if there are control values present, false otherwise. + public bool HasControls + { + get { return controls != null; } + } + + /// + /// Return whether or not this request has a specific type of control value. + /// + /// the type OID for the control value we are checking for. + /// true if a control value of type is present, false otherwise. + public bool HasControl(DerObjectIdentifier objectIdentifier) + { + return FindControl(objectIdentifier) != null; + } + + /// + /// Return a control value of the specified type. + /// + /// the type OID for the control value we are checking for. + /// the control value if present, null otherwise. + public IControl GetControl(DerObjectIdentifier type) + { + AttributeTypeAndValue found = FindControl(type); + if (found != null) + { + if (found.Type.Equals(CrmfObjectIdentifiers.id_regCtrl_pkiArchiveOptions)) + { + return new PkiArchiveControl(PkiArchiveOptions.GetInstance(found.Value)); + } + + if (found.Type.Equals(CrmfObjectIdentifiers.id_regCtrl_regToken)) + { + return new RegTokenControl(DerUtf8String.GetInstance(found.Value)); + } + + if (found.Type.Equals(CrmfObjectIdentifiers.id_regCtrl_authenticator)) + { + return new AuthenticatorControl(DerUtf8String.GetInstance(found.Value)); + } + } + return null; + } + + public AttributeTypeAndValue FindControl(DerObjectIdentifier type) + { + if (controls == null) + { + return null; + } + + AttributeTypeAndValue[] tAndV = controls.ToAttributeTypeAndValueArray(); + AttributeTypeAndValue found = null; + + for (int i = 0; i < tAndV.Length; i++) + { + if (tAndV[i].Type.Equals(type)) + { + found = tAndV[i]; + break; + } + } + + return found; + } + + /// + /// Return whether or not this request message has a proof-of-possession field in it. + /// + /// true if proof-of-possession is present, false otherwise. + public bool HasProofOfPossession + { + get { return certReqMsg.Popo != null; } + } + + /// + /// Return the type of the proof-of-possession this request message provides. + /// + /// one of: popRaVerified, popSigningKey, popKeyEncipherment, popKeyAgreement + public int ProofOfPossession + { + get { return certReqMsg.Popo.Type; } + } + + /// + /// Return whether or not the proof-of-possession (POP) is of the type popSigningKey and + /// it has a public key MAC associated with it. + /// + /// true if POP is popSigningKey and a PKMAC is present, false otherwise. + public bool HasSigningKeyProofOfPossessionWithPkMac + { + get + { + ProofOfPossession pop = certReqMsg.Popo; + + if (pop.Type == popSigningKey) + { + PopoSigningKey popoSign = PopoSigningKey.GetInstance(pop.Object); + + return popoSign.PoposkInput.PublicKeyMac != null; + } + + return false; + } + } + + /// + /// Return whether or not a signing key proof-of-possession (POP) is valid. + /// + /// a provider that can produce content verifiers for the signature contained in this POP. + /// true if the POP is valid, false otherwise. + /// if there is a problem in verification or content verifier creation. + /// if POP not appropriate. + public bool IsValidSigningKeyPop(IVerifierFactoryProvider verifierProvider) + { + ProofOfPossession pop = certReqMsg.Popo; + if (pop.Type == popSigningKey) + { + PopoSigningKey popoSign = PopoSigningKey.GetInstance(pop.Object); + if (popoSign.PoposkInput != null && popoSign.PoposkInput.PublicKeyMac != null) + { + throw new InvalidOperationException("verification requires password check"); + } + return verifySignature(verifierProvider, popoSign); + } + + throw new InvalidOperationException("not Signing Key type of proof of possession"); + } + + private bool verifySignature(IVerifierFactoryProvider verifierFactoryProvider, PopoSigningKey signKey) + { + IVerifierFactory verifer; + IStreamCalculator calculator; + try + { + verifer = verifierFactoryProvider.CreateVerifierFactory(signKey.AlgorithmIdentifier); + calculator = verifer.CreateCalculator(); + } + catch (Exception ex) + { + throw new CrmfException("unable to create verifier: " + ex.Message, ex); + } + + if (signKey.PoposkInput != null) + { + byte[] b = signKey.GetDerEncoded(); + calculator.Stream.Write(b, 0, b.Length); + } + else + { + byte[] b = certReqMsg.CertReq.GetDerEncoded(); + calculator.Stream.Write(b, 0, b.Length); + } + + IVerifier result = calculator.GetResult(); + + return result.IsVerified(signKey.Signature.GetBytes()); + } + + /// + /// Return the ASN.1 encoding of the certReqMsg we wrap. + /// + /// a byte array containing the binary encoding of the certReqMsg. + public byte[] GetEncoded() + { + return certReqMsg.GetEncoded(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/CertificateRequestMessage.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/CertificateRequestMessage.cs.meta new file mode 100644 index 000000000..aaa72f0c2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/CertificateRequestMessage.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5697d71e405982946a806d7706eca78d +timeCreated: 1572510030 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/CertificateRequestMessageBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/CertificateRequestMessageBuilder.cs new file mode 100644 index 000000000..b9392c8c3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/CertificateRequestMessageBuilder.cs @@ -0,0 +1,269 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crmf +{ + public class CertificateRequestMessageBuilder + { + private readonly BigInteger _certReqId; + private X509ExtensionsGenerator _extGenerator; + private CertTemplateBuilder _templateBuilder; + private IList m_controls = new List(); + private ISignatureFactory _popSigner; + private PKMacBuilder _pkMacBuilder; + private char[] _password; + private GeneralName _sender; + private int _popoType = ProofOfPossession.TYPE_KEY_ENCIPHERMENT; + private PopoPrivKey _popoPrivKey; + private Asn1Null _popRaVerified; + private PKMacValue _agreeMac; + + public CertificateRequestMessageBuilder(BigInteger certReqId) + { + this._certReqId = certReqId; + this._extGenerator = new X509ExtensionsGenerator(); + this._templateBuilder = new CertTemplateBuilder(); + } + + public CertificateRequestMessageBuilder SetPublicKey(SubjectPublicKeyInfo publicKeyInfo) + { + if (publicKeyInfo != null) + { + _templateBuilder.SetPublicKey(publicKeyInfo); + } + + return this; + } + + public CertificateRequestMessageBuilder SetIssuer(X509Name issuer) + { + if (issuer != null) + { + _templateBuilder.SetIssuer(issuer); + } + + return this; + } + + public CertificateRequestMessageBuilder SetSubject(X509Name subject) + { + if (subject != null) + { + _templateBuilder.SetSubject(subject); + } + + return this; + } + + public CertificateRequestMessageBuilder SetSerialNumber(BigInteger serialNumber) + { + if (serialNumber != null) + { + _templateBuilder.SetSerialNumber(new DerInteger(serialNumber)); + } + + return this; + } + + public CertificateRequestMessageBuilder SetValidity(DateTime? notBefore, DateTime? notAfter) + { + _templateBuilder.SetValidity(new OptionalValidity(CreateTime(notBefore), CreateTime(notAfter))); + return this; + } + + public CertificateRequestMessageBuilder AddExtension(DerObjectIdentifier oid, bool critical, + Asn1Encodable value) + { + _extGenerator.AddExtension(oid, critical, value); + return this; + } + + public CertificateRequestMessageBuilder AddExtension(DerObjectIdentifier oid, bool critical, + byte[] value) + { + _extGenerator.AddExtension(oid, critical, value); + return this; + } + + public CertificateRequestMessageBuilder AddControl(IControl control) + { + m_controls.Add(control); + return this; + } + + public CertificateRequestMessageBuilder SetProofOfPossessionSignKeySigner(ISignatureFactory popoSignatureFactory) + { + if (_popoPrivKey != null || _popRaVerified != null || _agreeMac != null) + { + throw new InvalidOperationException("only one proof of possession is allowed."); + } + + this._popSigner = popoSignatureFactory; + + return this; + } + + public CertificateRequestMessageBuilder SetProofOfPossessionSubsequentMessage(SubsequentMessage msg) + { + if (_popoPrivKey != null || _popRaVerified != null || _agreeMac != null) + { + throw new InvalidOperationException("only one proof of possession is allowed."); + } + + this._popoType = ProofOfPossession.TYPE_KEY_ENCIPHERMENT; + this._popoPrivKey = new PopoPrivKey(msg); + + return this; + } + + + public CertificateRequestMessageBuilder SetProofOfPossessionSubsequentMessage(int type, SubsequentMessage msg) + { + if (_popoPrivKey != null || _popRaVerified != null || _agreeMac != null) + { + throw new InvalidOperationException("only one proof of possession is allowed."); + } + + if (type != ProofOfPossession.TYPE_KEY_ENCIPHERMENT && type != ProofOfPossession.TYPE_KEY_AGREEMENT) + { + throw new ArgumentException("type must be ProofOfPossession.TYPE_KEY_ENCIPHERMENT || ProofOfPossession.TYPE_KEY_AGREEMENT"); + } + + this._popoType = type; + this._popoPrivKey = new PopoPrivKey(msg); + return this; + } + + public CertificateRequestMessageBuilder SetProofOfPossessionAgreeMac(PKMacValue macValue) + { + if (_popSigner != null || _popRaVerified != null || _popoPrivKey != null) + { + throw new InvalidOperationException("only one proof of possession allowed"); + } + + this._agreeMac = macValue; + return this; + } + + public CertificateRequestMessageBuilder SetProofOfPossessionRaVerified() + { + if (_popSigner != null || _popoPrivKey != null) + { + throw new InvalidOperationException("only one proof of possession allowed"); + } + + this._popRaVerified = DerNull.Instance; + + return this; + } + + public CertificateRequestMessageBuilder SetAuthInfoPKMAC(PKMacBuilder pkmacFactory, char[] password) + { + this._pkMacBuilder = pkmacFactory; + this._password = password; + + return this; + } + + public CertificateRequestMessageBuilder SetAuthInfoSender(X509Name sender) + { + return SetAuthInfoSender(new GeneralName(sender)); + } + + public CertificateRequestMessageBuilder SetAuthInfoSender(GeneralName sender) + { + this._sender = sender; + return this; + } + + public CertificateRequestMessage Build() + { + Asn1EncodableVector v = new Asn1EncodableVector(new DerInteger(this._certReqId)); + + if (!this._extGenerator.IsEmpty) + { + this._templateBuilder.SetExtensions(_extGenerator.Generate()); + } + + v.Add(_templateBuilder.Build()); + + if (m_controls.Count > 0) + { + Asn1EncodableVector controlV = new Asn1EncodableVector(); + + foreach (var control in m_controls) + { + controlV.Add(new AttributeTypeAndValue(control.Type, control.Value)); + } + + v.Add(new DerSequence(controlV)); + } + + CertRequest request = CertRequest.GetInstance(new DerSequence(v)); + + v = new Asn1EncodableVector(request); + + if (_popSigner != null) + { + CertTemplate template = request.CertTemplate; + + if (template.Subject == null || template.PublicKey == null) + { + SubjectPublicKeyInfo pubKeyInfo = request.CertTemplate.PublicKey; + + ProofOfPossessionSigningKeyBuilder builder = new ProofOfPossessionSigningKeyBuilder(pubKeyInfo); + + if (_sender != null) + { + builder.SetSender(_sender); + } + else + { + //PKMACValueGenerator pkmacGenerator = new PKMACValueGenerator(_pkmacBuilder); + + builder.SetPublicKeyMac(_pkMacBuilder, _password); + } + + v.Add(new ProofOfPossession(builder.Build(_popSigner))); + } + else + { + ProofOfPossessionSigningKeyBuilder builder = new ProofOfPossessionSigningKeyBuilder(request); + + v.Add(new ProofOfPossession(builder.Build(_popSigner))); + } + } + else if (_popoPrivKey != null) + { + v.Add(new ProofOfPossession(_popoType, _popoPrivKey)); + } + else if (_agreeMac != null) + { + v.Add(new ProofOfPossession(ProofOfPossession.TYPE_KEY_AGREEMENT, + PopoPrivKey.GetInstance(new DerTaggedObject(false, PopoPrivKey.agreeMAC, _agreeMac), true))); + + } + else if (_popRaVerified != null) + { + v.Add(new ProofOfPossession()); + } + + return new CertificateRequestMessage(CertReqMsg.GetInstance(new DerSequence(v))); + } + + private static Time CreateTime(DateTime? dateTime) + { + return dateTime == null ? null : new Time(dateTime.Value); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/CertificateRequestMessageBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/CertificateRequestMessageBuilder.cs.meta new file mode 100644 index 000000000..cfa285be6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/CertificateRequestMessageBuilder.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 99bec169f4967e6448dbb4a6d120db96 +timeCreated: 1572510035 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/CrmfException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/CrmfException.cs new file mode 100644 index 000000000..3ee792ade --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/CrmfException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crmf +{ + [Serializable] + public class CrmfException + : Exception + { + public CrmfException() + : base() + { + } + + public CrmfException(string message) + : base(message) + { + } + + public CrmfException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected CrmfException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/CrmfException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/CrmfException.cs.meta new file mode 100644 index 000000000..97d1ae4a6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/CrmfException.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: cf363d14806bf124f8fdb4e168eb4b41 +timeCreated: 1572510039 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/DefaultPKMacPrimitivesProvider.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/DefaultPKMacPrimitivesProvider.cs new file mode 100644 index 000000000..8b06d3aa0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/DefaultPKMacPrimitivesProvider.cs @@ -0,0 +1,26 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crmf +{ + public class DefaultPKMacPrimitivesProvider + : IPKMacPrimitivesProvider + { + public IDigest CreateDigest(AlgorithmIdentifier digestAlg) + { + return DigestUtilities.GetDigest(digestAlg.Algorithm); + } + + public IMac CreateMac(AlgorithmIdentifier macAlg) + { + return MacUtilities.GetMac(macAlg.Algorithm); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/DefaultPKMacPrimitivesProvider.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/DefaultPKMacPrimitivesProvider.cs.meta new file mode 100644 index 000000000..9b7d5ac2d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/DefaultPKMacPrimitivesProvider.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 482c84e5101b85a4297c9e59d8f3b098 +timeCreated: 1572510029 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/EncryptedValueBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/EncryptedValueBuilder.cs new file mode 100644 index 000000000..f1c70ac80 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/EncryptedValueBuilder.cs @@ -0,0 +1,163 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crmf +{ + public class EncryptedValueBuilder + { + private readonly IKeyWrapper wrapper; + private readonly ICipherBuilderWithKey encryptor; + private readonly IEncryptedValuePadder padder; + + /// + /// Create a builder that makes EncryptedValue structures. + /// + /// wrapper a wrapper for key used to encrypt the actual data contained in the EncryptedValue. + /// encryptor an output encryptor to encrypt the actual data contained in the EncryptedValue. + /// + public EncryptedValueBuilder(IKeyWrapper wrapper, ICipherBuilderWithKey encryptor) + : this(wrapper, encryptor, null) + { + } + + /// + /// Create a builder that makes EncryptedValue structures with fixed length blocks padded using the passed in padder. + /// + /// a wrapper for key used to encrypt the actual data contained in the EncryptedValue. + /// encryptor an output encryptor to encrypt the actual data contained in the EncryptedValue. + /// padder a padder to ensure that the EncryptedValue created will always be a constant length. + /// + public EncryptedValueBuilder(IKeyWrapper wrapper, ICipherBuilderWithKey encryptor, IEncryptedValuePadder padder) + { + this.wrapper = wrapper; + this.encryptor = encryptor; + this.padder = padder; + } + + /// + /// Build an EncryptedValue structure containing the passed in pass phrase. + /// + /// a revocation pass phrase. + ///an EncryptedValue containing the encrypted pass phrase. + /// + public EncryptedValue Build(char[] revocationPassphrase) + { + return EncryptData(PadData(Strings.ToUtf8ByteArray(revocationPassphrase))); + } + + /// + /// Build an EncryptedValue structure containing the certificate contained in + /// the passed in holder. + /// + /// a holder containing a certificate. + /// an EncryptedValue containing the encrypted certificate. + /// on a failure to encrypt the data, or wrap the symmetric key for this value. + /// + public EncryptedValue Build(X509Certificate holder) + { + try + { + return EncryptData(PadData(holder.GetEncoded())); + } + catch (IOException e) + { + throw new CrmfException("cannot encode certificate: " + e.Message, e); + } + } + + /// + /// Build an EncryptedValue structure containing the private key contained in + /// the passed info structure. + /// + /// a PKCS#8 private key info structure. + /// an EncryptedValue containing an EncryptedPrivateKeyInfo structure. + /// on a failure to encrypt the data, or wrap the symmetric key for this value. + /// + public EncryptedValue Build(PrivateKeyInfo privateKeyInfo) + { + Pkcs8EncryptedPrivateKeyInfoBuilder encInfoBldr = new Pkcs8EncryptedPrivateKeyInfoBuilder(privateKeyInfo); + + AlgorithmIdentifier intendedAlg = privateKeyInfo.PrivateKeyAlgorithm; + AlgorithmIdentifier symmAlg = (AlgorithmIdentifier)encryptor.AlgorithmDetails; + DerBitString encSymmKey; + + try + { + Pkcs8EncryptedPrivateKeyInfo encInfo = encInfoBldr.Build(encryptor); + + encSymmKey = new DerBitString(wrapper.Wrap(((KeyParameter)encryptor.Key).GetKey()).Collect()); + + AlgorithmIdentifier keyAlg = (AlgorithmIdentifier)wrapper.AlgorithmDetails; + Asn1OctetString valueHint = null; + + return new EncryptedValue(intendedAlg, symmAlg, encSymmKey, keyAlg, valueHint, new DerBitString(encInfo.GetEncryptedData())); + } + catch (Exception e) + { + throw new CrmfException("cannot wrap key: " + e.Message, e); + } + } + + private EncryptedValue EncryptData(byte[] data) + { + MemoryOutputStream bOut = new MemoryOutputStream(); + var cipher = encryptor.BuildCipher(bOut); + + try + { + using (var eOut = cipher.Stream) + { + eOut.Write(data, 0, data.Length); + } + } + catch (IOException e) + { + throw new CrmfException("cannot process data: " + e.Message, e); + } + + AlgorithmIdentifier intendedAlg = null; + AlgorithmIdentifier symmAlg = (AlgorithmIdentifier)encryptor.AlgorithmDetails; + + DerBitString encSymmKey; + try + { + encSymmKey = new DerBitString(wrapper.Wrap(((KeyParameter)encryptor.Key).GetKey()).Collect()); + } + catch (Exception e) + { + throw new CrmfException("cannot wrap key: " + e.Message, e); + } + + AlgorithmIdentifier keyAlg = (AlgorithmIdentifier)wrapper.AlgorithmDetails; + Asn1OctetString valueHint = null; + DerBitString encValue = new DerBitString(bOut.ToArray()); + + return new EncryptedValue(intendedAlg, symmAlg, encSymmKey, keyAlg, valueHint, encValue); + } + + private byte[] PadData(byte[] data) + { + if (padder != null) + { + return padder.GetPaddedData(data); + } + + return data; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/EncryptedValueBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/EncryptedValueBuilder.cs.meta new file mode 100644 index 000000000..d0c7bce8a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/EncryptedValueBuilder.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: abe43d8f6206a0f47816e41b75cde35d +timeCreated: 1572510036 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/IControl.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/IControl.cs new file mode 100644 index 000000000..827d8c20b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/IControl.cs @@ -0,0 +1,26 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crmf +{ + /// + /// Generic interface for a CertificateRequestMessage control value. + /// + public interface IControl + { + /// + /// Return the type of this control. + /// + DerObjectIdentifier Type { get; } + + /// + /// Return the value contained in this control object. + /// + Asn1Encodable Value { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/IControl.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/IControl.cs.meta new file mode 100644 index 000000000..c609149c8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/IControl.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 79bfa4fcd3dc54544ae96884fd0d8a13 +timeCreated: 1572510033 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/IEncryptedValuePadder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/IEncryptedValuePadder.cs new file mode 100644 index 000000000..7d2d54c7c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/IEncryptedValuePadder.cs @@ -0,0 +1,31 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crmf +{ + /// + /// An encrypted value padder is used to make sure that prior to a value been + /// encrypted the data is padded to a standard length. + /// + public interface IEncryptedValuePadder + { + /// + /// Return a byte array of padded data. + /// + /// the data to be padded. + /// a padded byte array containing data. + /// + byte[] GetPaddedData(byte[] data); + + /// + /// Return a byte array of with padding removed. + /// + /// the data to be padded. + /// an array containing the original unpadded data. + /// + byte[] GetUnpaddedData(byte[] paddedData); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/IEncryptedValuePadder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/IEncryptedValuePadder.cs.meta new file mode 100644 index 000000000..fff52dc45 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/IEncryptedValuePadder.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c54ee56c868092749ae800211ccf9380 +timeCreated: 1572510038 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/IPKMacPrimitivesProvider.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/IPKMacPrimitivesProvider.cs new file mode 100644 index 000000000..3e425ef63 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/IPKMacPrimitivesProvider.cs @@ -0,0 +1,18 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crmf +{ + public interface IPKMacPrimitivesProvider + { + IDigest CreateDigest(AlgorithmIdentifier digestAlg); + + IMac CreateMac(AlgorithmIdentifier macAlg); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/IPKMacPrimitivesProvider.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/IPKMacPrimitivesProvider.cs.meta new file mode 100644 index 000000000..103183cef --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/IPKMacPrimitivesProvider.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 98a3d91a2844864488aa560cee92d84e +timeCreated: 1572510035 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/PKMacBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/PKMacBuilder.cs new file mode 100644 index 000000000..f9b29ec14 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/PKMacBuilder.cs @@ -0,0 +1,290 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Iana; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crmf +{ + internal class PKMacStreamCalculator + : IStreamCalculator + { + private readonly MacSink _stream; + + public PKMacStreamCalculator(IMac mac) + { + _stream = new MacSink(mac); + } + + public Stream Stream + { + get { return _stream; } + } + + public DefaultPKMacResult GetResult() + { + return new DefaultPKMacResult(_stream.Mac); + } + } + + internal class PKMacFactory + : IMacFactory + { + protected readonly PbmParameter parameters; + private readonly byte[] key; + + public PKMacFactory(byte[] key, PbmParameter parameters) + { + this.key = Arrays.Clone(key); + this.parameters = parameters; + } + + public virtual object AlgorithmDetails + { + get { return new AlgorithmIdentifier(CmpObjectIdentifiers.passwordBasedMac, parameters); } + } + + public virtual IStreamCalculator CreateCalculator() + { + IMac mac = MacUtilities.GetMac(parameters.Mac.Algorithm); + mac.Init(new KeyParameter(key)); + return new PKMacStreamCalculator(mac); + } + } + + internal class DefaultPKMacResult + : IBlockResult + { + private readonly IMac mac; + + public DefaultPKMacResult(IMac mac) + { + this.mac = mac; + } + + public byte[] Collect() + { + byte[] res = new byte[mac.GetMacSize()]; + mac.DoFinal(res, 0); + return res; + } + + public int Collect(byte[] sig, int sigOff) + { + byte[] signature = Collect(); + signature.CopyTo(sig, sigOff); + return signature.Length; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int Collect(Span destination) + { + byte[] result = Collect(); + result.CopyTo(destination); + return result.Length; + } +#endif + } + + public class PKMacBuilder + { + private AlgorithmIdentifier owf; + private AlgorithmIdentifier mac; + private IPKMacPrimitivesProvider provider; + private SecureRandom random; + private PbmParameter parameters; + private int iterationCount; + private int saltLength = 20; + private int maxIterations; + + /// + /// Default, IterationCount = 1000, OIW=IdSha1, Mac=HmacSHA1 + /// + public PKMacBuilder() : + this(new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1), 1000, new AlgorithmIdentifier(IanaObjectIdentifiers.HmacSha1, DerNull.Instance), new DefaultPKMacPrimitivesProvider()) + { + } + + /// + /// Defaults with IPKMacPrimitivesProvider + /// + /// + public PKMacBuilder(IPKMacPrimitivesProvider provider) : + this(new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1), 1000, new AlgorithmIdentifier(IanaObjectIdentifiers.HmacSha1, DerNull.Instance), provider) + { + } + + /// + /// Create. + /// + /// The Mac provider + /// Digest Algorithm Id + /// Mac Algorithm Id + public PKMacBuilder(IPKMacPrimitivesProvider provider, AlgorithmIdentifier digestAlgorithmIdentifier, AlgorithmIdentifier macAlgorithmIdentifier) : + this(digestAlgorithmIdentifier, 1000, macAlgorithmIdentifier, provider) + { + } + + /// + /// Create a PKMAC builder enforcing a ceiling on the maximum iteration count. + /// + /// supporting calculator + /// max allowable value for iteration count. + public PKMacBuilder(IPKMacPrimitivesProvider provider, int maxIterations) + { + this.provider = provider; + this.maxIterations = maxIterations; + } + + private PKMacBuilder(AlgorithmIdentifier digestAlgorithmIdentifier, int iterationCount, AlgorithmIdentifier macAlgorithmIdentifier, IPKMacPrimitivesProvider provider) + { + this.iterationCount = iterationCount; + this.mac = macAlgorithmIdentifier; + this.owf = digestAlgorithmIdentifier; + this.provider = provider; + } + + /** + * Set the salt length in octets. + * + * @param saltLength length in octets of the salt to be generated. + * @return the generator + */ + public PKMacBuilder SetSaltLength(int saltLength) + { + if (saltLength < 8) + throw new ArgumentException("salt length must be at least 8 bytes"); + + this.saltLength = saltLength; + + return this; + } + + /// + /// Set the iteration count. + /// + /// the iteration count. + /// this + /// if iteration count is less than 100 + public PKMacBuilder SetIterationCount(int iterationCount) + { + if (iterationCount < 100) + throw new ArgumentException("iteration count must be at least 100"); + + CheckIterationCountCeiling(iterationCount); + + this.iterationCount = iterationCount; + + return this; + } + + /// + /// Set PbmParameters + /// + /// The parameters. + /// this + public PKMacBuilder SetParameters(PbmParameter parameters) + { + CheckIterationCountCeiling(parameters.IterationCount.IntValueExact); + + this.parameters = parameters; + + return this; + } + + /// + /// The Secure random + /// + /// The random. + /// this + public PKMacBuilder SetSecureRandom(SecureRandom random) + { + this.random = random; + + return this; + } + + /// + /// Build an IMacFactory. + /// + /// The password. + /// IMacFactory + public IMacFactory Build(char[] password) + { + if (parameters != null) + return GenCalculator(parameters, password); + + byte[] salt = new byte[saltLength]; + + this.random = CryptoServicesRegistrar.GetSecureRandom(random); + + random.NextBytes(salt); + + return GenCalculator(new PbmParameter(salt, owf, iterationCount, mac), password); + } + + private void CheckIterationCountCeiling(int iterationCount) + { + if (maxIterations > 0 && iterationCount > maxIterations) + throw new ArgumentException("iteration count exceeds limit (" + iterationCount + " > " + maxIterations + ")"); + } + + private IMacFactory GenCalculator(PbmParameter parameters, char[] password) + { + // From RFC 4211 + // + // 1. Generate a random salt value S + // + // 2. Append the salt to the pw. K = pw || salt. + // + // 3. Hash the value of K. K = HASH(K) + // + // 4. Iter = Iter - 1. If Iter is greater than zero. Goto step 3. + // + // 5. Compute an HMAC as documented in [HMAC]. + // + // MAC = HASH( K XOR opad, HASH( K XOR ipad, data) ) + // + // Where opad and ipad are defined in [HMAC]. + byte[] pw = Strings.ToUtf8ByteArray(password); + byte[] salt = parameters.Salt.GetOctets(); + byte[] K = new byte[pw.Length + salt.Length]; + + Array.Copy(pw, 0, K, 0, pw.Length); + Array.Copy(salt, 0, K, pw.Length, salt.Length); + + IDigest digest = provider.CreateDigest(parameters.Owf); + + int iter = parameters.IterationCount.IntValueExact; + + digest.BlockUpdate(K, 0, K.Length); + + K = new byte[digest.GetDigestSize()]; + + digest.DoFinal(K, 0); + + while (--iter > 0) + { + digest.BlockUpdate(K, 0, K.Length); + + digest.DoFinal(K, 0); + } + + byte[] key = K; + + return new PKMacFactory(key, parameters); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/PKMacBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/PKMacBuilder.cs.meta new file mode 100644 index 000000000..913adb06b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/PKMacBuilder.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: fc9d9ca6c9d795c4fa152a11e7d6d13e +timeCreated: 1572510043 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/PkiArchiveControl.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/PkiArchiveControl.cs new file mode 100644 index 000000000..0e9c545ff --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/PkiArchiveControl.cs @@ -0,0 +1,98 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Cms; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crmf +{ + public class PkiArchiveControl + : IControl + { + public static readonly int encryptedPrivKey = PkiArchiveOptions.encryptedPrivKey; + public static readonly int keyGenParameters = PkiArchiveOptions.keyGenParameters; + public static readonly int archiveRemGenPrivKey = PkiArchiveOptions.archiveRemGenPrivKey; + + private static readonly DerObjectIdentifier type = CrmfObjectIdentifiers.id_regCtrl_pkiArchiveOptions; + + private readonly PkiArchiveOptions pkiArchiveOptions; + + /// + /// Basic constructor - build from an PKIArchiveOptions structure. + /// + /// the ASN.1 structure that will underlie this control. + public PkiArchiveControl(PkiArchiveOptions pkiArchiveOptions) + { + this.pkiArchiveOptions = pkiArchiveOptions; + } + + /// + /// Return the type of this control. + /// + /// CRMFObjectIdentifiers.id_regCtrl_pkiArchiveOptions + public DerObjectIdentifier Type + { + + get { return type; } + } + + /// + /// Return the underlying ASN.1 object. + /// + /// a PKIArchiveOptions structure. + public Asn1Encodable Value + { + get { return pkiArchiveOptions; } + } + + /// + /// Return the archive control type, one of: encryptedPrivKey,keyGenParameters,or archiveRemGenPrivKey. + /// + /// the archive control type. + public int ArchiveType + { + get { return pkiArchiveOptions.Type; } + } + + /// + /// Return whether this control contains enveloped data. + /// + /// true if the control contains enveloped data, false otherwise. + public bool EnvelopedData + { + get + { + EncryptedKey encKey = EncryptedKey.GetInstance(pkiArchiveOptions.Value); + return !encKey.IsEncryptedValue; + } + } + + /// + /// Return the enveloped data structure contained in this control. + /// + /// a CMSEnvelopedData object. + public CmsEnvelopedData GetEnvelopedData() + { + try + { + EncryptedKey encKey = EncryptedKey.GetInstance(pkiArchiveOptions.Value); + EnvelopedData data = BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms.EnvelopedData.GetInstance(encKey.Value); + + return new CmsEnvelopedData(new ContentInfo(CmsObjectIdentifiers.EnvelopedData, data)); + } + catch (CmsException e) + { + throw new CrmfException("CMS parsing error: " + e.Message, e); + } + catch (Exception e) + { + throw new CrmfException("CRMF parsing error: " + e.Message, e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/PkiArchiveControl.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/PkiArchiveControl.cs.meta new file mode 100644 index 000000000..e6fb00b8a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/PkiArchiveControl.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c6866b361dff159478f3a7b0a8dfa4cf +timeCreated: 1572510039 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/PkiArchiveControlBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/PkiArchiveControlBuilder.cs new file mode 100644 index 000000000..44b35ec2e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/PkiArchiveControlBuilder.cs @@ -0,0 +1,63 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crmf +{ + public class PkiArchiveControlBuilder + { + private CmsEnvelopedDataGenerator envGen; + private CmsProcessableByteArray keyContent; + + /// + ///Basic constructor - specify the contents of the PKIArchiveControl structure. + /// + /// the private key to be archived. + /// the general name to be associated with the private key. + /// + public PkiArchiveControlBuilder(PrivateKeyInfo privateKeyInfo, GeneralName generalName) + { + EncKeyWithID encKeyWithID = new EncKeyWithID(privateKeyInfo, generalName); + + try + { + this.keyContent = new CmsProcessableByteArray(CrmfObjectIdentifiers.id_ct_encKeyWithID, encKeyWithID.GetEncoded()); + } + catch (IOException e) + { + throw new InvalidOperationException("unable to encode key and general name info", e); + } + + this.envGen = new CmsEnvelopedDataGenerator(); + } + + ///Add a recipient generator to this control. + /// recipient generator created for a specific recipient. + ///this builder object. + public PkiArchiveControlBuilder AddRecipientGenerator(RecipientInfoGenerator recipientGen) + { + envGen.AddRecipientInfoGenerator(recipientGen); + return this; + } + + /// Build the PKIArchiveControl using the passed in encryptor to encrypt its contents. + /// a suitable content encryptor. + /// a PKIArchiveControl object. + public PkiArchiveControl Build(ICipherBuilderWithKey contentEncryptor) + { + CmsEnvelopedData envContent = envGen.Generate(keyContent, contentEncryptor); + EnvelopedData envD = EnvelopedData.GetInstance(envContent.ContentInfo.Content); + return new PkiArchiveControl(new PkiArchiveOptions(new EncryptedKey(envD))); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/PkiArchiveControlBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/PkiArchiveControlBuilder.cs.meta new file mode 100644 index 000000000..96fb7e79a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/PkiArchiveControlBuilder.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 53e72fbeaecc61049b4b45f296b26073 +timeCreated: 1572510030 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/ProofOfPossessionSigningKeyBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/ProofOfPossessionSigningKeyBuilder.cs new file mode 100644 index 000000000..79e3808da --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/ProofOfPossessionSigningKeyBuilder.cs @@ -0,0 +1,94 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crmf +{ + public class ProofOfPossessionSigningKeyBuilder + { + private CertRequest _certRequest; + private SubjectPublicKeyInfo _pubKeyInfo; + private GeneralName _name; + private PKMacValue _publicKeyMAC; + + public ProofOfPossessionSigningKeyBuilder(CertRequest certRequest) + { + this._certRequest = certRequest; + } + + public ProofOfPossessionSigningKeyBuilder(SubjectPublicKeyInfo pubKeyInfo) + { + this._pubKeyInfo = pubKeyInfo; + } + + public ProofOfPossessionSigningKeyBuilder SetSender(GeneralName name) + { + this._name = name; + + return this; + } + + public ProofOfPossessionSigningKeyBuilder SetPublicKeyMac(PKMacBuilder generator, char[] password) + { + IMacFactory fact = generator.Build(password); + + byte[] d = _pubKeyInfo.GetDerEncoded(); + + IStreamCalculator calc = fact.CreateCalculator(); + using (var stream = calc.Stream) + { + stream.Write(d, 0, d.Length); + } + + this._publicKeyMAC = new PKMacValue( + (AlgorithmIdentifier)fact.AlgorithmDetails, + new DerBitString(calc.GetResult().Collect())); + + return this; + } + + public PopoSigningKey Build(ISignatureFactory signer) + { + if (_name != null && _publicKeyMAC != null) + { + throw new InvalidOperationException("name and publicKeyMAC cannot both be set."); + } + + PopoSigningKeyInput popo; + + IStreamCalculator calc = signer.CreateCalculator(); + using (Stream sigStream = calc.Stream) + { + if (_certRequest != null) + { + popo = null; + _certRequest.EncodeTo(sigStream, Asn1Encodable.Der); + } + else if (_name != null) + { + popo = new PopoSigningKeyInput(_name, _pubKeyInfo); + popo.EncodeTo(sigStream, Asn1Encodable.Der); + } + else + { + popo = new PopoSigningKeyInput(_publicKeyMAC, _pubKeyInfo); + popo.EncodeTo(sigStream, Asn1Encodable.Der); + } + } + + var signature = calc.GetResult().Collect(); + + return new PopoSigningKey(popo, (AlgorithmIdentifier)signer.AlgorithmDetails, new DerBitString(signature)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/ProofOfPossessionSigningKeyBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/ProofOfPossessionSigningKeyBuilder.cs.meta new file mode 100644 index 000000000..afa7b3dd2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/ProofOfPossessionSigningKeyBuilder.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 95ca5515bfa281a4e80a8b3cf8b6f31c +timeCreated: 1572510035 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/RegTokenControl.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/RegTokenControl.cs new file mode 100644 index 000000000..49ab9e367 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/RegTokenControl.cs @@ -0,0 +1,55 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crmf +{ + public class RegTokenControl + : IControl + { + private static readonly DerObjectIdentifier type = CrmfObjectIdentifiers.id_regCtrl_regToken; + + private readonly DerUtf8String token; + + /// + /// Basic constructor - build from a UTF-8 string representing the token. + /// + /// UTF-8 string representing the token. + public RegTokenControl(DerUtf8String token) + { + this.token = token; + } + + /// + /// Basic constructor - build from a string representing the token. + /// + /// string representing the token. + public RegTokenControl(string token) + { + this.token = new DerUtf8String(token); + } + + /// + /// Return the type of this control. + /// + /// CRMFObjectIdentifiers.id_regCtrl_regToken + public DerObjectIdentifier Type + { + get { return type; } + } + + /// + /// Return the token associated with this control (a UTF8String). + /// + /// a UTF8String. + public Asn1Encodable Value + { + get { return token; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/RegTokenControl.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/RegTokenControl.cs.meta new file mode 100644 index 000000000..4fd51ff8f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crmf/RegTokenControl.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: bdf5fab6c84b8ae42a49e261d385ae38 +timeCreated: 1572510038 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto.meta new file mode 100644 index 000000000..beffab3bf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 65f5702f015c2304e9152f0d0a52eb2f +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/AesUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/AesUtilities.cs new file mode 100644 index 000000000..3f34dd20c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/AesUtilities.cs @@ -0,0 +1,27 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + public static class AesUtilities + { + public static IBlockCipher CreateEngine() + { +#if NETCOREAPP3_0_OR_GREATER + if (AesEngine_X86.IsSupported) + return new AesEngine_X86(); +#endif + + return new AesEngine(); + } + +#if NETCOREAPP3_0_OR_GREATER + public static bool IsHardwareAccelerated => AesEngine_X86.IsSupported; +#else + public static bool IsHardwareAccelerated => false; +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/AesUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/AesUtilities.cs.meta new file mode 100644 index 000000000..83a9b14b6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/AesUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f78dabbad81b1942bbfcb6d20af6264 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/AsymmetricCipherKeyPair.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/AsymmetricCipherKeyPair.cs new file mode 100644 index 000000000..6c2b79d3c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/AsymmetricCipherKeyPair.cs @@ -0,0 +1,56 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /** + * a holding class for public/private parameter pairs. + */ + public class AsymmetricCipherKeyPair + { + private readonly AsymmetricKeyParameter publicParameter; + private readonly AsymmetricKeyParameter privateParameter; + + /** + * basic constructor. + * + * @param publicParam a public key parameters object. + * @param privateParam the corresponding private key parameters. + */ + public AsymmetricCipherKeyPair( + AsymmetricKeyParameter publicParameter, + AsymmetricKeyParameter privateParameter) + { + if (publicParameter.IsPrivate) + throw new ArgumentException("Expected a public key", "publicParameter"); + if (!privateParameter.IsPrivate) + throw new ArgumentException("Expected a private key", "privateParameter"); + + this.publicParameter = publicParameter; + this.privateParameter = privateParameter; + } + + /** + * return the public key parameters. + * + * @return the public key parameters. + */ + public AsymmetricKeyParameter Public + { + get { return publicParameter; } + } + + /** + * return the private key parameters. + * + * @return the private key parameters. + */ + public AsymmetricKeyParameter Private + { + get { return privateParameter; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/AsymmetricCipherKeyPair.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/AsymmetricCipherKeyPair.cs.meta new file mode 100644 index 000000000..6028e8c03 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/AsymmetricCipherKeyPair.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eef9b100979b64f49a4f37506e85cbea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/AsymmetricKeyParameter.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/AsymmetricKeyParameter.cs new file mode 100644 index 000000000..b5313dd35 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/AsymmetricKeyParameter.cs @@ -0,0 +1,51 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + public abstract class AsymmetricKeyParameter + : ICipherParameters + { + private readonly bool privateKey; + + protected AsymmetricKeyParameter( + bool privateKey) + { + this.privateKey = privateKey; + } + + public bool IsPrivate + { + get { return privateKey; } + } + + public override bool Equals( + object obj) + { + AsymmetricKeyParameter other = obj as AsymmetricKeyParameter; + + if (other == null) + { + return false; + } + + return Equals(other); + } + + protected bool Equals( + AsymmetricKeyParameter other) + { + return privateKey == other.privateKey; + } + + public override int GetHashCode() + { + return privateKey.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/AsymmetricKeyParameter.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/AsymmetricKeyParameter.cs.meta new file mode 100644 index 000000000..f05ee328d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/AsymmetricKeyParameter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a345564cb9c4fb64eb3b18227bc3bc11 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedAeadBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedAeadBlockCipher.cs new file mode 100644 index 000000000..423bea679 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedAeadBlockCipher.cs @@ -0,0 +1,276 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /** + * The AEAD block ciphers already handle buffering internally, so this class + * just takes care of implementing IBufferedCipher methods. + */ + public class BufferedAeadBlockCipher + : BufferedCipherBase + { + private readonly IAeadBlockCipher cipher; + + public BufferedAeadBlockCipher( + IAeadBlockCipher cipher) + { + if (cipher == null) + throw new ArgumentNullException("cipher"); + + this.cipher = cipher; + } + + public override string AlgorithmName + { + get { return cipher.AlgorithmName; } + } + + /** + * initialise the cipher. + * + * @param forEncryption if true the cipher is initialised for + * encryption, if false for decryption. + * @param param the key and other data required by the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public override void Init( + bool forEncryption, + ICipherParameters parameters) + { + if (parameters is ParametersWithRandom) + { + parameters = ((ParametersWithRandom) parameters).Parameters; + } + + cipher.Init(forEncryption, parameters); + } + + /** + * return the blocksize for the underlying cipher. + * + * @return the blocksize for the underlying cipher. + */ + public override int GetBlockSize() + { + return cipher.GetBlockSize(); + } + + /** + * return the size of the output buffer required for an update + * an input of len bytes. + * + * @param len the length of the input. + * @return the space required to accommodate a call to update + * with len bytes of input. + */ + public override int GetUpdateOutputSize( + int length) + { + return cipher.GetUpdateOutputSize(length); + } + + /** + * return the size of the output buffer required for an update plus a + * doFinal with an input of len bytes. + * + * @param len the length of the input. + * @return the space required to accommodate a call to update and doFinal + * with len bytes of input. + */ + public override int GetOutputSize( + int length) + { + return cipher.GetOutputSize(length); + } + + /** + * process a single byte, producing an output block if necessary. + * + * @param in the input byte. + * @param out the space for any output that might be produced. + * @param outOff the offset from which the output will be copied. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there isn't enough space in out. + * @exception InvalidOperationException if the cipher isn't initialised. + */ + public override int ProcessByte(byte input, byte[] output, int outOff) + { + return cipher.ProcessByte(input, output, outOff); + } + + public override byte[] ProcessByte( + byte input) + { + int outLength = GetUpdateOutputSize(1); + + byte[] outBytes = outLength > 0 ? new byte[outLength] : null; + + int pos = ProcessByte(input, outBytes, 0); + + if (outLength > 0 && pos < outLength) + { + byte[] tmp = new byte[pos]; + Array.Copy(outBytes, 0, tmp, 0, pos); + outBytes = tmp; + } + + return outBytes; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int ProcessByte(byte input, Span output) + { + return cipher.ProcessByte(input, output); + } +#endif + + public override byte[] ProcessBytes( + byte[] input, + int inOff, + int length) + { + if (input == null) + throw new ArgumentNullException("input"); + if (length < 1) + return null; + + int outLength = GetUpdateOutputSize(length); + + byte[] outBytes = outLength > 0 ? new byte[outLength] : null; + + int pos = ProcessBytes(input, inOff, length, outBytes, 0); + + if (outLength > 0 && pos < outLength) + { + byte[] tmp = new byte[pos]; + Array.Copy(outBytes, 0, tmp, 0, pos); + outBytes = tmp; + } + + return outBytes; + } + + /** + * process an array of bytes, producing output if necessary. + * + * @param in the input byte array. + * @param inOff the offset at which the input data starts. + * @param len the number of bytes to be copied out of the input array. + * @param out the space for any output that might be produced. + * @param outOff the offset from which the output will be copied. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there isn't enough space in out. + * @exception InvalidOperationException if the cipher isn't initialised. + */ + public override int ProcessBytes( + byte[] input, + int inOff, + int length, + byte[] output, + int outOff) + { + return cipher.ProcessBytes(input, inOff, length, output, outOff); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int ProcessBytes(ReadOnlySpan input, Span output) + { + return cipher.ProcessBytes(input, output); + } +#endif + + public override byte[] DoFinal() + { + byte[] outBytes = new byte[GetOutputSize(0)]; + + int pos = DoFinal(outBytes, 0); + + if (pos < outBytes.Length) + { + byte[] tmp = new byte[pos]; + Array.Copy(outBytes, 0, tmp, 0, pos); + outBytes = tmp; + } + + return outBytes; + } + + public override byte[] DoFinal( + byte[] input, + int inOff, + int inLen) + { + if (input == null) + throw new ArgumentNullException("input"); + + byte[] outBytes = new byte[GetOutputSize(inLen)]; + + int pos = (inLen > 0) + ? ProcessBytes(input, inOff, inLen, outBytes, 0) + : 0; + + pos += DoFinal(outBytes, pos); + + if (pos < outBytes.Length) + { + byte[] tmp = new byte[pos]; + Array.Copy(outBytes, 0, tmp, 0, pos); + outBytes = tmp; + } + + return outBytes; + } + + /** + * Process the last block in the buffer. + * + * @param out the array the block currently being held is copied into. + * @param outOff the offset at which the copying starts. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there is insufficient space in out for + * the output, or the input is not block size aligned and should be. + * @exception InvalidOperationException if the underlying cipher is not + * initialised. + * @exception InvalidCipherTextException if padding is expected and not found. + * @exception DataLengthException if the input is not block size + * aligned. + */ + public override int DoFinal( + byte[] output, + int outOff) + { + return cipher.DoFinal(output, outOff); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + return cipher.DoFinal(output); + } + + public override int DoFinal(ReadOnlySpan input, Span output) + { + int len = cipher.ProcessBytes(input, output); + len += cipher.DoFinal(output[len..]); + return len; + } +#endif + + /** + * Reset the buffer and cipher. After resetting the object is in the same + * state as it was after the last init (if there was one). + */ + public override void Reset() + { + cipher.Reset(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedAeadBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedAeadBlockCipher.cs.meta new file mode 100644 index 000000000..faf3ebcbe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedAeadBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7341cef11d2e8f24e844590b6747bf16 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedAeadCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedAeadCipher.cs new file mode 100644 index 000000000..dd4019550 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedAeadCipher.cs @@ -0,0 +1,275 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /** + * The AEAD ciphers already handle buffering internally, so this class + * just takes care of implementing IBufferedCipher methods. + */ + public class BufferedAeadCipher + : BufferedCipherBase + { + private readonly IAeadCipher cipher; + + public BufferedAeadCipher(IAeadCipher cipher) + { + if (cipher == null) + throw new ArgumentNullException("cipher"); + + this.cipher = cipher; + } + + public override string AlgorithmName + { + get { return cipher.AlgorithmName; } + } + + /** + * initialise the cipher. + * + * @param forEncryption if true the cipher is initialised for + * encryption, if false for decryption. + * @param param the key and other data required by the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public override void Init( + bool forEncryption, + ICipherParameters parameters) + { + if (parameters is ParametersWithRandom) + { + parameters = ((ParametersWithRandom)parameters).Parameters; + } + + cipher.Init(forEncryption, parameters); + } + + /** + * return the blocksize for the underlying cipher. + * + * @return the blocksize for the underlying cipher. + */ + public override int GetBlockSize() + { + return 0; + } + + /** + * return the size of the output buffer required for an update + * an input of len bytes. + * + * @param len the length of the input. + * @return the space required to accommodate a call to update + * with len bytes of input. + */ + public override int GetUpdateOutputSize( + int length) + { + return cipher.GetUpdateOutputSize(length); + } + + /** + * return the size of the output buffer required for an update plus a + * doFinal with an input of len bytes. + * + * @param len the length of the input. + * @return the space required to accommodate a call to update and doFinal + * with len bytes of input. + */ + public override int GetOutputSize( + int length) + { + return cipher.GetOutputSize(length); + } + + /** + * process a single byte, producing an output block if necessary. + * + * @param in the input byte. + * @param out the space for any output that might be produced. + * @param outOff the offset from which the output will be copied. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there isn't enough space in out. + * @exception InvalidOperationException if the cipher isn't initialised. + */ + public override int ProcessByte(byte input, byte[] output, int outOff) + { + return cipher.ProcessByte(input, output, outOff); + } + + public override byte[] ProcessByte( + byte input) + { + int outLength = GetUpdateOutputSize(1); + + byte[] outBytes = outLength > 0 ? new byte[outLength] : null; + + int pos = ProcessByte(input, outBytes, 0); + + if (outLength > 0 && pos < outLength) + { + byte[] tmp = new byte[pos]; + Array.Copy(outBytes, 0, tmp, 0, pos); + outBytes = tmp; + } + + return outBytes; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int ProcessByte(byte input, Span output) + { + return cipher.ProcessByte(input, output); + } +#endif + + public override byte[] ProcessBytes( + byte[] input, + int inOff, + int length) + { + if (input == null) + throw new ArgumentNullException("input"); + if (length < 1) + return null; + + int outLength = GetUpdateOutputSize(length); + + byte[] outBytes = outLength > 0 ? new byte[outLength] : null; + + int pos = ProcessBytes(input, inOff, length, outBytes, 0); + + if (outLength > 0 && pos < outLength) + { + byte[] tmp = new byte[pos]; + Array.Copy(outBytes, 0, tmp, 0, pos); + outBytes = tmp; + } + + return outBytes; + } + + /** + * process an array of bytes, producing output if necessary. + * + * @param in the input byte array. + * @param inOff the offset at which the input data starts. + * @param len the number of bytes to be copied out of the input array. + * @param out the space for any output that might be produced. + * @param outOff the offset from which the output will be copied. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there isn't enough space in out. + * @exception InvalidOperationException if the cipher isn't initialised. + */ + public override int ProcessBytes( + byte[] input, + int inOff, + int length, + byte[] output, + int outOff) + { + return cipher.ProcessBytes(input, inOff, length, output, outOff); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int ProcessBytes(ReadOnlySpan input, Span output) + { + return cipher.ProcessBytes(input, output); + } +#endif + + public override byte[] DoFinal() + { + byte[] outBytes = new byte[GetOutputSize(0)]; + + int pos = DoFinal(outBytes, 0); + + if (pos < outBytes.Length) + { + byte[] tmp = new byte[pos]; + Array.Copy(outBytes, 0, tmp, 0, pos); + outBytes = tmp; + } + + return outBytes; + } + + public override byte[] DoFinal( + byte[] input, + int inOff, + int inLen) + { + if (input == null) + throw new ArgumentNullException("input"); + + byte[] outBytes = new byte[GetOutputSize(inLen)]; + + int pos = (inLen > 0) + ? ProcessBytes(input, inOff, inLen, outBytes, 0) + : 0; + + pos += DoFinal(outBytes, pos); + + if (pos < outBytes.Length) + { + byte[] tmp = new byte[pos]; + Array.Copy(outBytes, 0, tmp, 0, pos); + outBytes = tmp; + } + + return outBytes; + } + + /** + * Process the last block in the buffer. + * + * @param out the array the block currently being held is copied into. + * @param outOff the offset at which the copying starts. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there is insufficient space in out for + * the output, or the input is not block size aligned and should be. + * @exception InvalidOperationException if the underlying cipher is not + * initialised. + * @exception InvalidCipherTextException if padding is expected and not found. + * @exception DataLengthException if the input is not block size + * aligned. + */ + public override int DoFinal( + byte[] output, + int outOff) + { + return cipher.DoFinal(output, outOff); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + return cipher.DoFinal(output); + } + + public override int DoFinal(ReadOnlySpan input, Span output) + { + int len = cipher.ProcessBytes(input, output); + len += cipher.DoFinal(output[len..]); + return len; + } +#endif + + /** + * Reset the buffer and cipher. After resetting the object is in the same + * state as it was after the last init (if there was one). + */ + public override void Reset() + { + cipher.Reset(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedAeadCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedAeadCipher.cs.meta new file mode 100644 index 000000000..0eee4af7c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedAeadCipher.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 224bf921b8d1f70408f67fcae4aab3fe +timeCreated: 1572510026 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedAsymmetricBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedAsymmetricBlockCipher.cs new file mode 100644 index 000000000..ea5f32804 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedAsymmetricBlockCipher.cs @@ -0,0 +1,201 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /** + * a buffer wrapper for an asymmetric block cipher, allowing input + * to be accumulated in a piecemeal fashion until final processing. + */ + public class BufferedAsymmetricBlockCipher + : BufferedCipherBase + { + private readonly IAsymmetricBlockCipher cipher; + + private byte[] buffer; + private int bufOff; + + /** + * base constructor. + * + * @param cipher the cipher this buffering object wraps. + */ + public BufferedAsymmetricBlockCipher( + IAsymmetricBlockCipher cipher) + { + this.cipher = cipher; + } + + /** + * return the amount of data sitting in the buffer. + * + * @return the amount of data sitting in the buffer. + */ + internal int GetBufferPosition() + { + return bufOff; + } + + public override string AlgorithmName + { + get { return cipher.AlgorithmName; } + } + + public override int GetBlockSize() + { + return cipher.GetInputBlockSize(); + } + + public override int GetOutputSize( + int length) + { + return cipher.GetOutputBlockSize(); + } + + public override int GetUpdateOutputSize( + int length) + { + return 0; + } + + /** + * initialise the buffer and the underlying cipher. + * + * @param forEncryption if true the cipher is initialised for + * encryption, if false for decryption. + * @param param the key and other data required by the cipher. + */ + public override void Init( + bool forEncryption, + ICipherParameters parameters) + { + Reset(); + + cipher.Init(forEncryption, parameters); + + // + // we allow for an extra byte where people are using their own padding + // mechanisms on a raw cipher. + // + this.buffer = new byte[cipher.GetInputBlockSize() + (forEncryption ? 1 : 0)]; + this.bufOff = 0; + } + + public override byte[] ProcessByte( + byte input) + { + if (bufOff >= buffer.Length) + throw new DataLengthException("attempt to process message too long for cipher"); + + buffer[bufOff++] = input; + return null; + } + + public override int ProcessByte(byte input, byte[] output, int outOff) + { + if (bufOff >= buffer.Length) + throw new DataLengthException("attempt to process message too long for cipher"); + + buffer[bufOff++] = input; + return 0; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int ProcessByte(byte input, Span output) + { + if (bufOff >= buffer.Length) + throw new DataLengthException("attempt to process message too long for cipher"); + + buffer[bufOff++] = input; + return 0; + } +#endif + + public override byte[] ProcessBytes( + byte[] input, + int inOff, + int length) + { + if (length < 1) + return null; + + if (input == null) + throw new ArgumentNullException("input"); + if (bufOff + length > buffer.Length) + throw new DataLengthException("attempt to process message too long for cipher"); + + Array.Copy(input, inOff, buffer, bufOff, length); + bufOff += length; + return null; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int ProcessBytes(ReadOnlySpan input, Span output) + { + Check.DataLength(input, buffer.Length - bufOff, "attempt to process message too long for cipher"); + + input.CopyTo(buffer.AsSpan(bufOff)); + bufOff += input.Length; + return 0; + } +#endif + + /** + * process the contents of the buffer using the underlying + * cipher. + * + * @return the result of the encryption/decryption process on the + * buffer. + * @exception InvalidCipherTextException if we are given a garbage block. + */ + public override byte[] DoFinal() + { + byte[] outBytes = bufOff > 0 + ? cipher.ProcessBlock(buffer, 0, bufOff) + : EmptyBuffer; + + Reset(); + + return outBytes; + } + + public override byte[] DoFinal( + byte[] input, + int inOff, + int length) + { + ProcessBytes(input, inOff, length); + return DoFinal(); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + int result = 0; + if (bufOff > 0) + { + byte[] outBytes = cipher.ProcessBlock(buffer, 0, bufOff); + outBytes.CopyTo(output); + result = outBytes.Length; + } + + Reset(); + + return result; + } +#endif + + /// Reset the buffer + public override void Reset() + { + if (buffer != null) + { + Array.Clear(buffer, 0, buffer.Length); + bufOff = 0; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedAsymmetricBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedAsymmetricBlockCipher.cs.meta new file mode 100644 index 000000000..eac7104dc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedAsymmetricBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f143b86b595928a4ba2e043ae553d1ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedBlockCipher.cs new file mode 100644 index 000000000..ea3e38866 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedBlockCipher.cs @@ -0,0 +1,425 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /** + * A wrapper class that allows block ciphers to be used to process data in + * a piecemeal fashion. The BufferedBlockCipher outputs a block only when the + * buffer is full and more data is being added, or on a doFinal. + *

+ * Note: in the case where the underlying cipher is either a CFB cipher or an + * OFB one the last block may not be a multiple of the block size. + *

+ */ + public class BufferedBlockCipher + : BufferedCipherBase + { + internal byte[] buf; + internal int bufOff; + internal bool forEncryption; + internal IBlockCipherMode m_cipherMode; + + /** + * constructor for subclasses + */ + protected BufferedBlockCipher() + { + } + + public BufferedBlockCipher(IBlockCipher cipher) + : this(EcbBlockCipher.GetBlockCipherMode(cipher)) + { + } + + /** + * Create a buffered block cipher without padding. + * + * @param cipher the underlying block cipher this buffering object wraps. + * false otherwise. + */ + public BufferedBlockCipher(IBlockCipherMode cipherMode) + { + if (cipherMode == null) + throw new ArgumentNullException(nameof(cipherMode)); + + m_cipherMode = cipherMode; + buf = new byte[cipherMode.GetBlockSize()]; + bufOff = 0; + } + + public override string AlgorithmName + { + get { return m_cipherMode.AlgorithmName; } + } + + /** + * initialise the cipher. + * + * @param forEncryption if true the cipher is initialised for + * encryption, if false for decryption. + * @param param the key and other data required by the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + // Note: This doubles as the Init in the event that this cipher is being used as an IWrapper + public override void Init(bool forEncryption, ICipherParameters parameters) + { + this.forEncryption = forEncryption; + + if (parameters is ParametersWithRandom withRandom) + { + parameters = withRandom.Parameters; + } + + Reset(); + + m_cipherMode.Init(forEncryption, parameters); + } + + /** + * return the blocksize for the underlying cipher. + * + * @return the blocksize for the underlying cipher. + */ + public override int GetBlockSize() + { + return m_cipherMode.GetBlockSize(); + } + + /** + * return the size of the output buffer required for an update + * an input of len bytes. + * + * @param len the length of the input. + * @return the space required to accommodate a call to update + * with len bytes of input. + */ + public override int GetUpdateOutputSize(int length) + { + int total = length + bufOff; + int leftOver = total % buf.Length; + return total - leftOver; + } + + /** + * return the size of the output buffer required for an update plus a + * doFinal with an input of len bytes. + * + * @param len the length of the input. + * @return the space required to accommodate a call to update and doFinal + * with len bytes of input. + */ + public override int GetOutputSize(int length) + { + // Note: Can assume IsPartialBlockOkay is true for purposes of this calculation + return length + bufOff; + } + + /** + * process a single byte, producing an output block if necessary. + * + * @param in the input byte. + * @param out the space for any output that might be produced. + * @param outOff the offset from which the output will be copied. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there isn't enough space in out. + * @exception InvalidOperationException if the cipher isn't initialised. + */ + public override int ProcessByte(byte input, byte[] output, int outOff) + { + buf[bufOff++] = input; + + if (bufOff == buf.Length) + { + if ((outOff + buf.Length) > output.Length) + throw new DataLengthException("output buffer too short"); + + bufOff = 0; + return m_cipherMode.ProcessBlock(buf, 0, output, outOff); + } + + return 0; + } + + public override byte[] ProcessByte(byte input) + { + int outLength = GetUpdateOutputSize(1); + + byte[] outBytes = outLength > 0 ? new byte[outLength] : null; + + int pos = ProcessByte(input, outBytes, 0); + + if (outLength > 0 && pos < outLength) + { + byte[] tmp = new byte[pos]; + Array.Copy(outBytes, 0, tmp, 0, pos); + outBytes = tmp; + } + + return outBytes; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int ProcessByte(byte input, Span output) + { + buf[bufOff++] = input; + + if (bufOff == buf.Length) + { + Check.OutputLength(output, buf.Length, "output buffer too short"); + + bufOff = 0; + return m_cipherMode.ProcessBlock(buf, output); + } + + return 0; + } +#endif + + public override byte[] ProcessBytes(byte[] input, int inOff, int length) + { + if (input == null) + throw new ArgumentNullException(nameof(input)); + if (length < 1) + return null; + + int outLength = GetUpdateOutputSize(length); + + byte[] outBytes = outLength > 0 ? new byte[outLength] : null; + + int pos = ProcessBytes(input, inOff, length, outBytes, 0); + + if (outLength > 0 && pos < outLength) + { + byte[] tmp = new byte[pos]; + Array.Copy(outBytes, 0, tmp, 0, pos); + outBytes = tmp; + } + + return outBytes; + } + + /** + * process an array of bytes, producing output if necessary. + * + * @param in the input byte array. + * @param inOff the offset at which the input data starts. + * @param len the number of bytes to be copied out of the input array. + * @param out the space for any output that might be produced. + * @param outOff the offset from which the output will be copied. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there isn't enough space in out. + * @exception InvalidOperationException if the cipher isn't initialised. + */ + public override int ProcessBytes(byte[] input, int inOff, int length, byte[] output, int outOff) + { + if (length < 1) + { + if (length < 0) + throw new ArgumentException("Can't have a negative input length!"); + + return 0; + } + + int blockSize = GetBlockSize(); + int outLength = GetUpdateOutputSize(length); + + if (outLength > 0) + { + Check.OutputLength(output, outOff, outLength, "output buffer too short"); + } + + int resultLen = 0; + int gapLen = buf.Length - bufOff; + if (length >= gapLen) + { + Array.Copy(input, inOff, buf, bufOff, gapLen); + resultLen = m_cipherMode.ProcessBlock(buf, 0, output, outOff); + bufOff = 0; + length -= gapLen; + inOff += gapLen; + while (length >= buf.Length) + { + resultLen += m_cipherMode.ProcessBlock(input, inOff, output, outOff + resultLen); + length -= blockSize; + inOff += blockSize; + } + } + Array.Copy(input, inOff, buf, bufOff, length); + bufOff += length; + return resultLen; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int ProcessBytes(ReadOnlySpan input, Span output) + { + if (input.IsEmpty) + return 0; + + int blockSize = GetBlockSize(); + int outLength = GetUpdateOutputSize(input.Length); + + if (outLength > 0) + { + Check.OutputLength(output, outLength, "output buffer too short"); + } + + int resultLen = 0; + int gapLen = buf.Length - bufOff; + if (input.Length >= gapLen) + { + input[..gapLen].CopyTo(buf.AsSpan(bufOff)); + resultLen = m_cipherMode.ProcessBlock(buf, output); + bufOff = 0; + input = input[gapLen..]; + while (input.Length >= buf.Length) + { + resultLen += m_cipherMode.ProcessBlock(input, output[resultLen..]); + input = input[blockSize..]; + } + } + input.CopyTo(buf.AsSpan(bufOff)); + bufOff += input.Length; + return resultLen; + } +#endif + + public override byte[] DoFinal() + { + byte[] outBytes = EmptyBuffer; + + int length = GetOutputSize(0); + if (length > 0) + { + outBytes = new byte[length]; + + int pos = DoFinal(outBytes, 0); + if (pos < outBytes.Length) + { + byte[] tmp = new byte[pos]; + Array.Copy(outBytes, 0, tmp, 0, pos); + outBytes = tmp; + } + } + else + { + Reset(); + } + + return outBytes; + } + + public override byte[] DoFinal(byte[] input, int inOff, int inLen) + { + if (input == null) + throw new ArgumentNullException(nameof(input)); + + int length = GetOutputSize(inLen); + + byte[] outBytes = EmptyBuffer; + + if (length > 0) + { + outBytes = new byte[length]; + + int pos = (inLen > 0) + ? ProcessBytes(input, inOff, inLen, outBytes, 0) + : 0; + + pos += DoFinal(outBytes, pos); + + if (pos < outBytes.Length) + { + byte[] tmp = new byte[pos]; + Array.Copy(outBytes, 0, tmp, 0, pos); + outBytes = tmp; + } + } + else + { + Reset(); + } + + return outBytes; + } + + /** + * Process the last block in the buffer. + * + * @param out the array the block currently being held is copied into. + * @param outOff the offset at which the copying starts. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there is insufficient space in out for + * the output, or the input is not block size aligned and should be. + * @exception InvalidOperationException if the underlying cipher is not + * initialised. + * @exception InvalidCipherTextException if padding is expected and not found. + * @exception DataLengthException if the input is not block size + * aligned. + */ + public override int DoFinal(byte[] output, int outOff) + { + try + { + if (bufOff != 0) + { + Check.DataLength(!m_cipherMode.IsPartialBlockOkay, "data not block size aligned"); + Check.OutputLength(output, outOff, bufOff, "output buffer too short for DoFinal()"); + + // NB: Can't copy directly, or we may write too much output + m_cipherMode.ProcessBlock(buf, 0, buf, 0); + Array.Copy(buf, 0, output, outOff, bufOff); + } + + return bufOff; + } + finally + { + Reset(); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + try + { + if (bufOff != 0) + { + Check.DataLength(!m_cipherMode.IsPartialBlockOkay, "data not block size aligned"); + Check.OutputLength(output, bufOff, "output buffer too short for DoFinal()"); + + // NB: Can't copy directly, or we may write too much output + m_cipherMode.ProcessBlock(buf, buf); + buf.AsSpan(0, bufOff).CopyTo(output); + } + + return bufOff; + } + finally + { + Reset(); + } + } +#endif + + /** + * Reset the buffer and cipher. After resetting the object is in the same + * state as it was after the last init (if there was one). + */ + public override void Reset() + { + Array.Clear(buf, 0, buf.Length); + bufOff = 0; + + m_cipherMode.Reset(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedBlockCipher.cs.meta new file mode 100644 index 000000000..0ed241ac4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e161ee652f7d84c49abc183b5ef37846 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedCipherBase.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedCipherBase.cs new file mode 100644 index 000000000..b79110cd5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedCipherBase.cs @@ -0,0 +1,136 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + public abstract class BufferedCipherBase + : IBufferedCipher + { + protected static readonly byte[] EmptyBuffer = new byte[0]; + + public abstract string AlgorithmName { get; } + + public abstract void Init(bool forEncryption, ICipherParameters parameters); + + public abstract int GetBlockSize(); + + public abstract int GetOutputSize(int inputLen); + public abstract int GetUpdateOutputSize(int inputLen); + + public abstract byte[] ProcessByte(byte input); + + public virtual int ProcessByte( + byte input, + byte[] output, + int outOff) + { + byte[] outBytes = ProcessByte(input); + if (outBytes == null) + return 0; + if (outOff + outBytes.Length > output.Length) + throw new DataLengthException("output buffer too short"); + outBytes.CopyTo(output, outOff); + return outBytes.Length; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public abstract int ProcessByte(byte input, Span output); +#endif + + public virtual byte[] ProcessBytes( + byte[] input) + { + return ProcessBytes(input, 0, input.Length); + } + + public abstract byte[] ProcessBytes(byte[] input, int inOff, int length); + + public virtual int ProcessBytes( + byte[] input, + byte[] output, + int outOff) + { + return ProcessBytes(input, 0, input.Length, output, outOff); + } + + public virtual int ProcessBytes( + byte[] input, + int inOff, + int length, + byte[] output, + int outOff) + { + byte[] outBytes = ProcessBytes(input, inOff, length); + if (outBytes == null) + return 0; + if (outOff + outBytes.Length > output.Length) + throw new DataLengthException("output buffer too short"); + outBytes.CopyTo(output, outOff); + return outBytes.Length; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public abstract int ProcessBytes(ReadOnlySpan input, Span output); +#endif + + public abstract byte[] DoFinal(); + + public virtual byte[] DoFinal( + byte[] input) + { + return DoFinal(input, 0, input.Length); + } + + public abstract byte[] DoFinal( + byte[] input, + int inOff, + int length); + + public virtual int DoFinal( + byte[] output, + int outOff) + { + byte[] outBytes = DoFinal(); + if (outOff + outBytes.Length > output.Length) + throw new DataLengthException("output buffer too short"); + outBytes.CopyTo(output, outOff); + return outBytes.Length; + } + + public virtual int DoFinal( + byte[] input, + byte[] output, + int outOff) + { + return DoFinal(input, 0, input.Length, output, outOff); + } + + public virtual int DoFinal( + byte[] input, + int inOff, + int length, + byte[] output, + int outOff) + { + int len = ProcessBytes(input, inOff, length, output, outOff); + len += DoFinal(output, outOff + len); + return len; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public abstract int DoFinal(Span output); + + public virtual int DoFinal(ReadOnlySpan input, Span output) + { + int len = ProcessBytes(input, output); + len += DoFinal(output[len..]); + return len; + } +#endif + + public abstract void Reset(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedCipherBase.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedCipherBase.cs.meta new file mode 100644 index 000000000..b1ea27b98 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedCipherBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2c014e96623bd48488c402407e71df96 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedIesCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedIesCipher.cs new file mode 100644 index 000000000..f39ecd35e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedIesCipher.cs @@ -0,0 +1,149 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + public class BufferedIesCipher + : BufferedCipherBase + { + private readonly IesEngine engine; + private bool forEncryption; + private MemoryStream buffer = new MemoryStream(); + + public BufferedIesCipher( + IesEngine engine) + { + if (engine == null) + throw new ArgumentNullException("engine"); + + this.engine = engine; + } + + public override string AlgorithmName + { + // TODO Create IESEngine.AlgorithmName + get { return "IES"; } + } + + public override void Init( + bool forEncryption, + ICipherParameters parameters) + { + this.forEncryption = forEncryption; + + // TODO + throw new NotImplementedException("IES"); + } + + public override int GetBlockSize() + { + return 0; + } + + public override int GetOutputSize( + int inputLen) + { + if (engine == null) + throw new InvalidOperationException("cipher not initialised"); + + int baseLen = inputLen + Convert.ToInt32(buffer.Length); + return forEncryption + ? baseLen + 20 + : baseLen - 20; + } + + public override int GetUpdateOutputSize( + int inputLen) + { + return 0; + } + + public override byte[] ProcessByte(byte input) + { + buffer.WriteByte(input); + return null; + } + + public override int ProcessByte(byte input, byte[] output, int outOff) + { + buffer.WriteByte(input); + return 0; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int ProcessByte(byte input, Span output) + { + buffer.WriteByte(input); + return 0; + } +#endif + + public override byte[] ProcessBytes( + byte[] input, + int inOff, + int length) + { + if (input == null) + throw new ArgumentNullException("input"); + if (inOff < 0) + throw new ArgumentException("inOff"); + if (length < 0) + throw new ArgumentException("length"); + if (inOff + length > input.Length) + throw new ArgumentException("invalid offset/length specified for input array"); + + buffer.Write(input, inOff, length); + return null; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int ProcessBytes(ReadOnlySpan input, Span output) + { + buffer.Write(input); + return 0; + } +#endif + + public override byte[] DoFinal() + { + byte[] buf = buffer.ToArray(); + + Reset(); + + return engine.ProcessBlock(buf, 0, buf.Length); + } + + public override byte[] DoFinal( + byte[] input, + int inOff, + int length) + { + ProcessBytes(input, inOff, length); + return DoFinal(); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + byte[] buf = buffer.ToArray(); + + Reset(); + + byte[] block = engine.ProcessBlock(buf, 0, buf.Length); + block.CopyTo(output); + return block.Length; + } +#endif + + public override void Reset() + { + buffer.SetLength(0); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedIesCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedIesCipher.cs.meta new file mode 100644 index 000000000..0951783f4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedIesCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b73c34a06bcbdb3449c9b9221fc8a9c2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedStreamCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedStreamCipher.cs new file mode 100644 index 000000000..8d110d208 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedStreamCipher.cs @@ -0,0 +1,141 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + public class BufferedStreamCipher + : BufferedCipherBase + { + private readonly IStreamCipher m_cipher; + + public BufferedStreamCipher(IStreamCipher cipher) + { + if (cipher == null) + throw new ArgumentNullException("cipher"); + + this.m_cipher = cipher; + } + + public override string AlgorithmName + { + get { return m_cipher.AlgorithmName; } + } + + public override void Init(bool forEncryption, ICipherParameters parameters) + { + if (parameters is ParametersWithRandom withRandom) + { + parameters = withRandom.Parameters; + } + + m_cipher.Init(forEncryption, parameters); + } + + public override int GetBlockSize() + { + return 0; + } + + public override int GetOutputSize(int inputLen) + { + return inputLen; + } + + public override int GetUpdateOutputSize(int inputLen) + { + return inputLen; + } + + public override byte[] ProcessByte(byte input) + { + return new byte[]{ m_cipher.ReturnByte(input) }; + } + + public override int ProcessByte(byte input, byte[] output, int outOff) + { + if (outOff >= output.Length) + throw new DataLengthException("output buffer too short"); + + output[outOff] = m_cipher.ReturnByte(input); + return 1; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int ProcessByte(byte input, Span output) + { + output[0] = m_cipher.ReturnByte(input); + return 1; + } +#endif + + public override byte[] ProcessBytes(byte[] input, int inOff, int length) + { + if (length < 1) + return null; + + byte[] output = new byte[length]; + m_cipher.ProcessBytes(input, inOff, length, output, 0); + return output; + } + + public override int ProcessBytes(byte[] input, int inOff, int length, byte[] output, int outOff) + { + if (length < 1) + return 0; + + m_cipher.ProcessBytes(input, inOff, length, output, outOff); + return length; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int ProcessBytes(ReadOnlySpan input, Span output) + { + m_cipher.ProcessBytes(input, output); + return input.Length; + } +#endif + + public override byte[] DoFinal() + { + m_cipher.Reset(); + + return EmptyBuffer; + } + + public override byte[] DoFinal(byte[] input, int inOff, int length) + { + if (length < 1) + return EmptyBuffer; + + byte[] output = new byte[length]; + m_cipher.ProcessBytes(input, inOff, length, output, 0); + m_cipher.Reset(); + return output; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + m_cipher.Reset(); + return 0; + } + + public override int DoFinal(ReadOnlySpan input, Span output) + { + m_cipher.ProcessBytes(input, output); + m_cipher.Reset(); + return input.Length; + } +#endif + + public override void Reset() + { + m_cipher.Reset(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedStreamCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedStreamCipher.cs.meta new file mode 100644 index 000000000..e0f41bc2b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/BufferedStreamCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f552bd4118a37e46b3c3e8b94df1660 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/Check.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/Check.cs new file mode 100644 index 000000000..39190d21e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/Check.cs @@ -0,0 +1,43 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + internal class Check + { + internal static void DataLength(bool condition, string msg) + { + if (condition) + throw new DataLengthException(msg); + } + + internal static void DataLength(byte[] buf, int off, int len, string msg) + { + if (off > (buf.Length - len)) + throw new DataLengthException(msg); + } + + internal static void OutputLength(byte[] buf, int off, int len, string msg) + { + if (off > (buf.Length - len)) + throw new OutputLengthException(msg); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal static void DataLength(ReadOnlySpan input, int len, string msg) + { + if (input.Length < len) + throw new DataLengthException(msg); + } + + internal static void OutputLength(Span output, int len, string msg) + { + if (output.Length < len) + throw new OutputLengthException(msg); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/Check.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/Check.cs.meta new file mode 100644 index 000000000..30f8a3d68 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/Check.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6dd41045620467949adfc127f66c0e85 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/CipherKeyGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/CipherKeyGenerator.cs new file mode 100644 index 000000000..7d4e7a55e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/CipherKeyGenerator.cs @@ -0,0 +1,85 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /** + * The base class for symmetric, or secret, cipher key generators. + */ + public class CipherKeyGenerator + { + protected internal SecureRandom random; + protected internal int strength; + private bool uninitialised = true; + private int defaultStrength; + + public CipherKeyGenerator() + { + } + + internal CipherKeyGenerator( + int defaultStrength) + { + if (defaultStrength < 1) + throw new ArgumentException("strength must be a positive value", "defaultStrength"); + + this.defaultStrength = defaultStrength; + } + + public int DefaultStrength + { + get { return defaultStrength; } + } + + /** + * initialise the key generator. + * + * @param param the parameters to be used for key generation + */ + public void Init(KeyGenerationParameters parameters) + { + if (parameters == null) + throw new ArgumentNullException(nameof(parameters)); + + this.uninitialised = false; + + EngineInit(parameters); + } + + protected virtual void EngineInit(KeyGenerationParameters parameters) + { + this.random = parameters.Random; + this.strength = (parameters.Strength + 7) / 8; + } + + /** + * Generate a secret key. + * + * @return a byte array containing the key value. + */ + public byte[] GenerateKey() + { + if (uninitialised) + { + if (defaultStrength < 1) + throw new InvalidOperationException("Generator has not been initialised"); + + uninitialised = false; + + EngineInit(new KeyGenerationParameters(CryptoServicesRegistrar.GetSecureRandom(), defaultStrength)); + } + + return EngineGenerateKey(); + } + + protected virtual byte[] EngineGenerateKey() + { + return SecureRandom.GetNextBytes(random, strength); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/CipherKeyGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/CipherKeyGenerator.cs.meta new file mode 100644 index 000000000..f465116f9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/CipherKeyGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 83b99673c89b7be4491f695d8e374d3c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/CryptoException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/CryptoException.cs new file mode 100644 index 000000000..19e4f16ae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/CryptoException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + [Serializable] + public class CryptoException + : Exception + { + public CryptoException() + : base() + { + } + + public CryptoException(string message) + : base(message) + { + } + + public CryptoException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected CryptoException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/CryptoException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/CryptoException.cs.meta new file mode 100644 index 000000000..25a38b6e2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/CryptoException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd38a0fa65d30fc4eae48fa3319f9645 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/CryptoServicesRegistrar.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/CryptoServicesRegistrar.cs new file mode 100644 index 000000000..cae2d0a85 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/CryptoServicesRegistrar.cs @@ -0,0 +1,21 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + public static class CryptoServicesRegistrar + { + public static SecureRandom GetSecureRandom() + { + return new SecureRandom(); + } + + public static SecureRandom GetSecureRandom(SecureRandom secureRandom) + { + return secureRandom ?? new SecureRandom(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/CryptoServicesRegistrar.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/CryptoServicesRegistrar.cs.meta new file mode 100644 index 000000000..e1b0aeb61 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/CryptoServicesRegistrar.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5080aaa8a1b6a3a45a17cd1781379690 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/DataLengthException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/DataLengthException.cs new file mode 100644 index 000000000..a34abe591 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/DataLengthException.cs @@ -0,0 +1,39 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// This exception is thrown if a buffer that is meant to have output copied into it turns out to be too + /// short, or if we've been given insufficient input. + /// + /// In general this exception will get thrown rather than an . + /// + [Serializable] + public class DataLengthException + : CryptoException + { + public DataLengthException() + : base() + { + } + + public DataLengthException(string message) + : base(message) + { + } + + public DataLengthException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected DataLengthException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/DataLengthException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/DataLengthException.cs.meta new file mode 100644 index 000000000..4fe44ff11 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/DataLengthException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34a508389e47f4745921ea8106b00645 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IAlphabetMapper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IAlphabetMapper.cs new file mode 100644 index 000000000..4a2161b92 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IAlphabetMapper.cs @@ -0,0 +1,36 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ +/** + * Base interface for mapping from an alphabet to a set of indexes + * suitable for use with FPE. + */ +public interface IAlphabetMapper +{ + /// + /// Return the number of characters in the alphabet. + /// + /// the radix for the alphabet. + int Radix { get; } + + /// + /// Return the passed in char[] as a byte array of indexes (indexes + /// can be more than 1 byte) + /// + /// an index array. + /// characters to be mapped. + byte[] ConvertToIndexes(char[] input); + + /// + /// Return a char[] for this alphabet based on the indexes passed. + /// + /// an array of char corresponding to the index values. + /// input array of indexes. + char[] ConvertToChars(byte[] input); +} +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IAlphabetMapper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IAlphabetMapper.cs.meta new file mode 100644 index 000000000..a28139efe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IAlphabetMapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fffa4712c5e427e4bb35b79edb26841d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IAsymmetricBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IAsymmetricBlockCipher.cs new file mode 100644 index 000000000..8fba447e1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IAsymmetricBlockCipher.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// Base interface for a public/private key block cipher. + public interface IAsymmetricBlockCipher + { + /// The name of the algorithm this cipher implements. + string AlgorithmName { get; } + + /// Initialise the cipher. + /// Initialise for encryption if true, for decryption if false. + /// The key or other data required by the cipher. + void Init(bool forEncryption, ICipherParameters parameters); + + /// The maximum size, in bytes, an input block may be. + int GetInputBlockSize(); + + /// The maximum size, in bytes, an output block will be. + int GetOutputBlockSize(); + + /// Process a block. + /// The input buffer. + /// The offset into inBuf that the input block begins. + /// The length of the input block. + /// Input decrypts improperly. + /// Input is too large for the cipher. + byte[] ProcessBlock(byte[] inBuf, int inOff, int inLen); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IAsymmetricBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IAsymmetricBlockCipher.cs.meta new file mode 100644 index 000000000..88685e0a5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IAsymmetricBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6abbe02392e03f543a957ac413172bd3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IAsymmetricCipherKeyPairGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IAsymmetricCipherKeyPairGenerator.cs new file mode 100644 index 000000000..a67c7dc87 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IAsymmetricCipherKeyPairGenerator.cs @@ -0,0 +1,28 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /** + * interface that a public/private key pair generator should conform to. + */ + public interface IAsymmetricCipherKeyPairGenerator + { + /** + * intialise the key pair generator. + * + * @param the parameters the key pair is to be initialised with. + */ + void Init(KeyGenerationParameters parameters); + + /** + * return an AsymmetricCipherKeyPair containing the Generated keys. + * + * @return an AsymmetricCipherKeyPair containing the Generated keys. + */ + AsymmetricCipherKeyPair GenerateKeyPair(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IAsymmetricCipherKeyPairGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IAsymmetricCipherKeyPairGenerator.cs.meta new file mode 100644 index 000000000..736a05675 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IAsymmetricCipherKeyPairGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af1fbd88542b90240bb580ea2247b4cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBasicAgreement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBasicAgreement.cs new file mode 100644 index 000000000..e46733b8a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBasicAgreement.cs @@ -0,0 +1,33 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /** + * The basic interface that basic Diffie-Hellman implementations + * conforms to. + */ + public interface IBasicAgreement + { + /** + * initialise the agreement engine. + */ + void Init(ICipherParameters parameters); + + /** + * return the field size for the agreement algorithm in bytes. + */ + int GetFieldSize(); + + /** + * given a public key from a given party calculate the next + * message in the agreement sequence. + */ + BigInteger CalculateAgreement(ICipherParameters pubKey); + } + +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBasicAgreement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBasicAgreement.cs.meta new file mode 100644 index 000000000..f248610bd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBasicAgreement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd9d504c0c209eb4ab0ba46c3f015a85 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBlockCipher.cs new file mode 100644 index 000000000..223c2be5f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBlockCipher.cs @@ -0,0 +1,42 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// Base interface for a symmetric key block cipher. + public interface IBlockCipher + { + /// The name of the algorithm this cipher implements. + string AlgorithmName { get; } + + /// Initialise the cipher. + /// Initialise for encryption if true, for decryption if false. + /// The key or other data required by the cipher. + void Init(bool forEncryption, ICipherParameters parameters); + + /// The block size for this cipher, in bytes. + int GetBlockSize(); + + /// Process a block. + /// The input buffer. + /// The offset into inBuf that the input block begins. + /// The output buffer. + /// The offset into outBuf to write the output block. + /// If input block is wrong size, or outBuf too small. + /// The number of bytes processed and produced. + int ProcessBlock(byte[] inBuf, int inOff, byte[] outBuf, int outOff); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + + /// Process a block. + /// The input block as a span. + /// The output span. + /// If input block is wrong size, or output span too small. + /// The number of bytes processed and produced. + int ProcessBlock(ReadOnlySpan input, Span output); +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBlockCipher.cs.meta new file mode 100644 index 000000000..1fbd3c755 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4935d5699e88bf6459028d927973e8af +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBlockResult.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBlockResult.cs new file mode 100644 index 000000000..3372ba4a0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBlockResult.cs @@ -0,0 +1,38 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// + /// Operators that reduce their input to a single block return an object + /// of this type. + /// + public interface IBlockResult + { + /// + /// Return the final result of the operation. + /// + /// A block of bytes, representing the result of an operation. + byte[] Collect(); + + /// + /// Store the final result of the operation by copying it into the destination array. + /// + /// The number of bytes copied into destination. + /// The byte array to copy the result into. + /// The offset into destination to start copying the result at. + int Collect(byte[] destination, int offset); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// + /// Store the final result of the operation by copying it into the destination span. + /// + /// The number of bytes copied into destination. + /// The span to copy the result into. + int Collect(Span destination); +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBlockResult.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBlockResult.cs.meta new file mode 100644 index 000000000..e6b803d99 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBlockResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8ffde966c8f3b9c4282b23834e282a0c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBufferedCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBufferedCipher.cs new file mode 100644 index 000000000..51cb2248f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBufferedCipher.cs @@ -0,0 +1,61 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// Block cipher engines are expected to conform to this interface. + public interface IBufferedCipher + { + /// The name of the algorithm this cipher implements. + string AlgorithmName { get; } + + /// Initialise the cipher. + /// If true the cipher is initialised for encryption, + /// if false for decryption. + /// The key and other data required by the cipher. + void Init(bool forEncryption, ICipherParameters parameters); + + int GetBlockSize(); + + int GetOutputSize(int inputLen); + + int GetUpdateOutputSize(int inputLen); + + byte[] ProcessByte(byte input); + int ProcessByte(byte input, byte[] output, int outOff); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int ProcessByte(byte input, Span output); +#endif + + byte[] ProcessBytes(byte[] input); + byte[] ProcessBytes(byte[] input, int inOff, int length); + int ProcessBytes(byte[] input, byte[] output, int outOff); + int ProcessBytes(byte[] input, int inOff, int length, byte[] output, int outOff); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int ProcessBytes(ReadOnlySpan input, Span output); +#endif + + byte[] DoFinal(); + byte[] DoFinal(byte[] input); + byte[] DoFinal(byte[] input, int inOff, int length); + int DoFinal(byte[] output, int outOff); + int DoFinal(byte[] input, byte[] output, int outOff); + int DoFinal(byte[] input, int inOff, int length, byte[] output, int outOff); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int DoFinal(Span output); + int DoFinal(ReadOnlySpan input, Span output); +#endif + + /// + /// Reset the cipher. After resetting the cipher is in the same state + /// as it was after the last init (if there was one). + /// + void Reset(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBufferedCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBufferedCipher.cs.meta new file mode 100644 index 000000000..34fb872bb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IBufferedCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c8a92034d413bfc40b6680d876d7f8b1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipher.cs new file mode 100644 index 000000000..0adf0648f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipher.cs @@ -0,0 +1,45 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// + /// Base interface for a ciphers that do not require data to be block aligned. + /// + /// Note: In cases where the underlying algorithm is block based, these ciphers may add or remove padding as needed. + /// + /// + public interface ICipher + { + /// + /// Return the size of the output buffer required for a Write() plus a + /// close() with the write() being passed inputLen bytes. + /// + /// The returned size may be dependent on the initialisation of this cipher + /// and may not be accurate once subsequent input data is processed as the cipher may + /// add, add or remove padding, as it sees fit. + /// + /// + /// The space required to accommodate a call to processBytes and doFinal with inputLen bytes of input. + /// The length of the expected input. + int GetMaxOutputSize(int inputLen); + + /// + /// Return the size of the output buffer required for a write() with the write() being + /// passed inputLen bytes and just updating the cipher output. + /// + /// The space required to accommodate a call to processBytes with inputLen bytes of input. + /// The length of the expected input. + int GetUpdateOutputSize(int inputLen); + + /// + /// Gets the stream for reading/writing data processed/to be processed. + /// + /// The stream associated with this cipher. + Stream Stream { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipher.cs.meta new file mode 100644 index 000000000..00ba5faba --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 86285cf95551c6e4fb416662bd5c0d13 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipherBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipherBuilder.cs new file mode 100644 index 000000000..43b184a53 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipherBuilder.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// + /// Base interface for cipher builders. + /// + public interface ICipherBuilder + { + /// + /// Return the algorithm and parameter details associated with any cipher built. + /// + object AlgorithmDetails { get; } + + /// + /// Return the maximum output size that a given input will produce. + /// + /// the length of the expected input. + /// The maximum possible output size that can produced for the expected input length. + int GetMaxOutputSize(int inputLen); + + /// + /// Build a cipher that operates on the passed in stream. + /// + /// The stream to write/read any encrypted/decrypted data. + /// A cipher based around the given stream. + ICipher BuildCipher(Stream stream); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipherBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipherBuilder.cs.meta new file mode 100644 index 000000000..25ffae114 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipherBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e6f3dfacdfa050844888d634d386017f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipherBuilderWithKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipherBuilderWithKey.cs new file mode 100644 index 000000000..25a67acad --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipherBuilderWithKey.cs @@ -0,0 +1,20 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// + /// A cipher builder that can also return the key it was initialized with. + /// + public interface ICipherBuilderWithKey + : ICipherBuilder + { + /// + /// Return the key we were initialized with. + /// + ICipherParameters Key { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipherBuilderWithKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipherBuilderWithKey.cs.meta new file mode 100644 index 000000000..44806357f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipherBuilderWithKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 951828338ca8a174890e28050ae2f02a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipherParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipherParameters.cs new file mode 100644 index 000000000..7768de101 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipherParameters.cs @@ -0,0 +1,15 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /** + * all parameter classes implement this. + */ + public interface ICipherParameters + { + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipherParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipherParameters.cs.meta new file mode 100644 index 000000000..610be9974 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ICipherParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 48f7fda0d1eff294e9c36d8da4c5b237 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDSA.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDSA.cs new file mode 100644 index 000000000..2a2371ac4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDSA.cs @@ -0,0 +1,36 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// Interface for classes implementing the Digital Signature Algorithm + public interface IDsa + { + /// The algorithm name. + string AlgorithmName { get; } + + /// Initialise the signer for signature generation or signature verification. + /// true if we are generating a signature, false otherwise. + /// key parameters for signature generation. + void Init(bool forSigning, ICipherParameters parameters); + + /// Sign the passed in message (usually the output of a hash function). + /// the message to be signed. + /// two big integers representing the r and s values respectively. + BigInteger[] GenerateSignature(byte[] message); + + /// The order of the group that the r, s values in signatures belong to. + BigInteger Order { get; } + + /// Verify the message message against the signature values r and s. + /// the message that was supposed to have been signed. + /// the r signature value. + /// the s signature value. + bool VerifySignature(byte[] message, BigInteger r, BigInteger s); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDSA.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDSA.cs.meta new file mode 100644 index 000000000..312883bbf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDSA.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8cc954fc8fc070a45955c5a315ebc07a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDecryptorBuilderProvider.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDecryptorBuilderProvider.cs new file mode 100644 index 000000000..3f65140a6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDecryptorBuilderProvider.cs @@ -0,0 +1,21 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// + /// Interface describing a provider of cipher builders for creating decrypting ciphers. + /// + public interface IDecryptorBuilderProvider + { + /// + /// Return a cipher builder for creating decrypting ciphers. + /// + /// The algorithm details/parameters to use to create the final cipher. + /// A new cipher builder. + ICipherBuilder CreateDecryptorBuilder(object algorithmDetails); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDecryptorBuilderProvider.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDecryptorBuilderProvider.cs.meta new file mode 100644 index 000000000..abfb1d0d9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDecryptorBuilderProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 37600e3f2022147409b8c5c4f9e253a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDerivationFunction.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDerivationFunction.cs new file mode 100644 index 000000000..bb1d01378 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDerivationFunction.cs @@ -0,0 +1,27 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /** + * base interface for general purpose byte derivation functions. + */ + public interface IDerivationFunction + { + void Init(IDerivationParameters parameters); + + /** + * return the message digest used as the basis for the function + */ + IDigest Digest { get; } + + int GenerateBytes(byte[] output, int outOff, int length); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int GenerateBytes(Span output); +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDerivationFunction.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDerivationFunction.cs.meta new file mode 100644 index 000000000..10f91f5a8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDerivationFunction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4485e5cea1db5dc4ebed2d30a3bfa672 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDerivationParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDerivationParameters.cs new file mode 100644 index 000000000..4d6596391 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDerivationParameters.cs @@ -0,0 +1,15 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /** + * Parameters for key/byte stream derivation classes + */ + public interface IDerivationParameters + { + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDerivationParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDerivationParameters.cs.meta new file mode 100644 index 000000000..c1eee885d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDerivationParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ea9b134ee70b91b42b1ad2b5bf68204c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDigest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDigest.cs new file mode 100644 index 000000000..669f5672e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDigest.cs @@ -0,0 +1,57 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// Base interface for a message digest. + public interface IDigest + { + /// The algorithm name. + string AlgorithmName { get; } + + /// Return the size, in bytes, of the digest produced by this message digest. + /// the size, in bytes, of the digest produced by this message digest. + int GetDigestSize(); + + /// Return the size, in bytes, of the internal buffer used by this digest. + /// the size, in bytes, of the internal buffer used by this digest. + int GetByteLength(); + + /// Update the message digest with a single byte. + /// the input byte to be entered. + void Update(byte input); + + /// Update the message digest with a block of bytes. + /// the byte array containing the data. + /// the offset into the byte array where the data starts. + /// the length of the data. + void BlockUpdate(byte[] input, int inOff, int inLen); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// Update the message digest with a span of bytes. + /// the span containing the data. + void BlockUpdate(ReadOnlySpan input); +#endif + + /// Close the digest, producing the final digest value. + /// This call leaves the digest reset. + /// the byte array the digest is to be copied into. + /// the offset into the byte array the digest is to start at. + /// the number of bytes written + int DoFinal(byte[] output, int outOff); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// Close the digest, producing the final digest value. + /// This call leaves the digest reset. + /// the span the digest is to be copied into. + /// the number of bytes written + int DoFinal(Span output); +#endif + + /// Reset the digest back to its initial state. + void Reset(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDigest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDigest.cs.meta new file mode 100644 index 000000000..819ccdc86 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDigest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 232948e340c96d0439b8c002b2ab0ec9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDigestFactory.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDigestFactory.cs new file mode 100644 index 000000000..a7347993a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDigestFactory.cs @@ -0,0 +1,29 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// + /// Base interface for operator factories that create stream-based digest calculators. + /// + public interface IDigestFactory + { + /// The algorithm details object for calculators made by this factory. + object AlgorithmDetails { get ; } + + /// Return the size of the digest associated with this factory. + /// The length of the digest produced by this calculators from this factory in bytes. + int DigestLength { get; } + + /// + /// Create a stream calculator for the digest associated with this factory. The stream + /// calculator is used for the actual operation of entering the data to be digested + /// and producing the digest block. + /// + /// A calculator producing an IBlockResult with the final digest in it. + IStreamCalculator CreateCalculator(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDigestFactory.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDigestFactory.cs.meta new file mode 100644 index 000000000..aa4730806 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IDigestFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 95298a0892f290144b5f75892ba62990 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEncapsulatedSecretExtractor.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEncapsulatedSecretExtractor.cs new file mode 100644 index 000000000..505e39e22 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEncapsulatedSecretExtractor.cs @@ -0,0 +1,20 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + public interface IEncapsulatedSecretExtractor + { + /// + /// Generate an exchange pair based on the recipient public key. + /// + /// the encapsulated secret. + byte[] ExtractSecret(byte[] encapsulation); + + /// + /// The length in bytes of the encapsulation. + /// + int EncapsulationLength { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEncapsulatedSecretExtractor.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEncapsulatedSecretExtractor.cs.meta new file mode 100644 index 000000000..fddc5af90 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEncapsulatedSecretExtractor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d43d7edf40e958546bc77bcb9954e1f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEncapsulatedSecretGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEncapsulatedSecretGenerator.cs new file mode 100644 index 000000000..6318678af --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEncapsulatedSecretGenerator.cs @@ -0,0 +1,16 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + public interface IEncapsulatedSecretGenerator + { + /// + /// Generate an exchange pair based on the recipient public key. + /// + /// + /// An SecretWithEncapsulation derived from the recipient public key. + ISecretWithEncapsulation GenerateEncapsulated(AsymmetricKeyParameter recipientKey); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEncapsulatedSecretGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEncapsulatedSecretGenerator.cs.meta new file mode 100644 index 000000000..6d0968644 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEncapsulatedSecretGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 642c0e33a85937744af2d35b54685f2c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEntropySource.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEntropySource.cs new file mode 100644 index 000000000..00c8c32f4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEntropySource.cs @@ -0,0 +1,37 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// + /// Base interface describing an entropy source for a DRBG. + /// + public interface IEntropySource + { + /// + /// Return whether or not this entropy source is regarded as prediction resistant. + /// + /// true if this instance is prediction resistant; otherwise, false. + bool IsPredictionResistant { get; } + + /// + /// Return a byte array of entropy. + /// + /// The entropy bytes. + byte[] GetEntropy(); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int GetEntropy(Span output); +#endif + + /// + /// Return the number of bits of entropy this source can produce. + /// + /// The size, in bits, of the return value of getEntropy. + int EntropySize { get; } + } +} + +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEntropySource.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEntropySource.cs.meta new file mode 100644 index 000000000..26f3565d9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEntropySource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b41ded217d64e9d4a88e5a4f45785906 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEntropySourceProvider.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEntropySourceProvider.cs new file mode 100644 index 000000000..f1e7c1bc1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEntropySourceProvider.cs @@ -0,0 +1,21 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// + /// Base interface describing a provider of entropy sources. + /// + public interface IEntropySourceProvider + { + /// + /// Return an entropy source providing a block of entropy. + /// + /// The size of the block of entropy required. + /// An entropy source providing bitsRequired blocks of entropy. + IEntropySource Get(int bitsRequired); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEntropySourceProvider.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEntropySourceProvider.cs.meta new file mode 100644 index 000000000..6c118104e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IEntropySourceProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a4e94522d8beb6942a87bb520c8bcbe1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IKeyUnwrapper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IKeyUnwrapper.cs new file mode 100644 index 000000000..f82281037 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IKeyUnwrapper.cs @@ -0,0 +1,28 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// + /// Base interface for a key unwrapper. + /// + public interface IKeyUnwrapper + { + /// + /// The parameter set used to configure this key unwrapper. + /// + object AlgorithmDetails { get; } + + /// + /// Unwrap the passed in data. + /// + /// The array containing the data to be unwrapped. + /// The offset into cipherText at which the unwrapped data starts. + /// The length of the data to be unwrapped. + /// an IBlockResult containing the unwrapped key data. + IBlockResult Unwrap(byte[] cipherText, int offset, int length); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IKeyUnwrapper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IKeyUnwrapper.cs.meta new file mode 100644 index 000000000..9e137e6bc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IKeyUnwrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e650368ca96964e438ca612547183b5a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IKeyWrapper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IKeyWrapper.cs new file mode 100644 index 000000000..d99f13b57 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IKeyWrapper.cs @@ -0,0 +1,26 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// + /// Base interface for a key wrapper. + /// + public interface IKeyWrapper + { + /// + /// The parameter set used to configure this key wrapper. + /// + object AlgorithmDetails { get; } + + /// + /// Wrap the passed in key data. + /// + /// The key data to be wrapped. + /// an IBlockResult containing the wrapped key data. + IBlockResult Wrap(byte[] keyData); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IKeyWrapper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IKeyWrapper.cs.meta new file mode 100644 index 000000000..77f60f682 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IKeyWrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08485454896e80b4fb1b674205285bca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IMac.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IMac.cs new file mode 100644 index 000000000..7b3e53f13 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IMac.cs @@ -0,0 +1,57 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// The base interface for implementations of message authentication codes (MACs). + public interface IMac + { + /// Initialise the MAC. + /// The key or other data required by the MAC. + void Init(ICipherParameters parameters); + + /// The algorithm name. + string AlgorithmName { get; } + + /// Return the size, in bytes, of the MAC produced by this implementation. + /// the size, in bytes, of the MAC produced by this implementation. + int GetMacSize(); + + /// Update the MAC with a single byte. + /// the input byte to be entered. + void Update(byte input); + + /// Update the MAC with a block of bytes. + /// the byte array containing the data. + /// the offset into the byte array where the data starts. + /// the length of the data. + void BlockUpdate(byte[] input, int inOff, int inLen); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// Update the MAC with a span of bytes. + /// the span containing the data. + void BlockUpdate(ReadOnlySpan input); +#endif + + /// Perform final calculations, producing the result MAC. + /// This call leaves the MAC reset. + /// the byte array the MAC is to be copied into. + /// the offset into the byte array the MAC is to start at. + /// the number of bytes written + int DoFinal(byte[] output, int outOff); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// Perform final calculations, producing the result MAC. + /// This call leaves the MAC reset. + /// the span the MAC is to be copied into. + /// the number of bytes written + int DoFinal(Span output); +#endif + + /// Reset the MAC back to its initial state. + void Reset(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IMac.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IMac.cs.meta new file mode 100644 index 000000000..f0fc5d772 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IMac.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 06c6c4ff752285d4181fc6f0f7a3bbc1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IMacDerivationFunction.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IMacDerivationFunction.cs new file mode 100644 index 000000000..b05c7fa33 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IMacDerivationFunction.cs @@ -0,0 +1,12 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + public interface IMacDerivationFunction + : IDerivationFunction + { + IMac Mac { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IMacDerivationFunction.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IMacDerivationFunction.cs.meta new file mode 100644 index 000000000..4ba575710 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IMacDerivationFunction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d231b65c9f54dec40a0309d3face6e5d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IMacFactory.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IMacFactory.cs new file mode 100644 index 000000000..78f68f437 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IMacFactory.cs @@ -0,0 +1,22 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + public interface IMacFactory + { + /// The algorithm details object for this calculator. + object AlgorithmDetails { get; } + + /// + /// Create a stream calculator for this signature calculator. The stream + /// calculator is used for the actual operation of entering the data to be signed + /// and producing the signature block. + /// + /// A calculator producing an IBlockResult with a signature in it. + IStreamCalculator CreateCalculator(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IMacFactory.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IMacFactory.cs.meta new file mode 100644 index 000000000..839be9fcc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IMacFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 74bbe413ab66ee84e966ede17712327a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IRawAgreement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IRawAgreement.cs new file mode 100644 index 000000000..64ab5a6c4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IRawAgreement.cs @@ -0,0 +1,21 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + public interface IRawAgreement + { + void Init(ICipherParameters parameters); + + int AgreementSize { get; } + + void CalculateAgreement(ICipherParameters publicKey, byte[] buf, int off); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + void CalculateAgreement(ICipherParameters publicKey, Span output); +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IRawAgreement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IRawAgreement.cs.meta new file mode 100644 index 000000000..13cc19ab7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IRawAgreement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a4955c6838f252e4cba62fb0ee5dc679 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IRsa.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IRsa.cs new file mode 100644 index 000000000..8d9d1ce45 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IRsa.cs @@ -0,0 +1,20 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + public interface IRsa + { + void Init(bool forEncryption, ICipherParameters parameters); + int GetInputBlockSize(); + int GetOutputBlockSize(); + BigInteger ConvertInput(byte[] buf, int off, int len); + BigInteger ProcessBlock(BigInteger input); + byte[] ConvertOutput(BigInteger result); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IRsa.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IRsa.cs.meta new file mode 100644 index 000000000..6bc536e64 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IRsa.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bfae5f5df323ffa4d878ad34f7914052 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISecretWithEncapsulation.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISecretWithEncapsulation.cs new file mode 100644 index 000000000..3f74e871c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISecretWithEncapsulation.cs @@ -0,0 +1,25 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + public interface ISecretWithEncapsulation + : IDisposable + { + + /// + /// Return the secret associated with the encapsulation. + /// + /// the secret the encapsulation is for. + byte[] GetSecret(); + + /// + /// Return the data that carries the secret in its encapsulated form. + /// + /// the encapsulation of the secret. + byte[] GetEncapsulation(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISecretWithEncapsulation.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISecretWithEncapsulation.cs.meta new file mode 100644 index 000000000..9fa953f3e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISecretWithEncapsulation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3160d4314f9a00f41823ce0d5bf32ea4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISignatureFactory.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISignatureFactory.cs new file mode 100644 index 000000000..14f099988 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISignatureFactory.cs @@ -0,0 +1,23 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// + /// Base interface for operators that serve as stream-based signature calculators. + /// + public interface ISignatureFactory + { + /// The algorithm details object for this calculator. + object AlgorithmDetails { get; } + + /// + /// Create a stream calculator for this signature calculator. The stream + /// calculator is used for the actual operation of entering the data to be signed + /// and producing the signature block. + /// + /// A calculator producing an IBlockResult with a signature in it. + IStreamCalculator CreateCalculator(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISignatureFactory.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISignatureFactory.cs.meta new file mode 100644 index 000000000..5c1be3ea3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISignatureFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9b932d94d8fe22545b8c91109d2bf521 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISigner.cs new file mode 100644 index 000000000..ca18fc99f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISigner.cs @@ -0,0 +1,49 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + public interface ISigner + { + /// The algorithm name. + string AlgorithmName { get; } + + /// Initialise the signer for signing or verification. + /// true if for signing, false otherwise. + /// necessary parameters. + void Init(bool forSigning, ICipherParameters parameters); + + /// Update the signer with a single byte. + /// the input byte to be entered. + void Update(byte input); + + /// Update the signer with a block of bytes. + /// the byte array containing the data. + /// the offset into the byte array where the data starts. + /// the length of the data. + void BlockUpdate(byte[] input, int inOff, int inLen); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// Update the signer with a span of bytes. + /// the span containing the data. + void BlockUpdate(ReadOnlySpan input); +#endif + + /// Generate a signature for the message we've been loaded with using the key we were initialised with. + /// + /// A byte array containing the signature for the message. + byte[] GenerateSignature(); + + /// Return true if the internal state represents the signature described in the passed in array. + /// + /// an array containing the candidate signature to verify. + /// true if the internal state represents the signature described in the passed in array. + bool VerifySignature(byte[] signature); + + /// Reset the signer back to its initial state. + void Reset(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISigner.cs.meta new file mode 100644 index 000000000..cbe2da52e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3bcb10b760d17945bfcb44c2b23d5a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISignerWithRecovery.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISignerWithRecovery.cs new file mode 100644 index 000000000..5c26f8d8a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISignerWithRecovery.cs @@ -0,0 +1,41 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /** + * Signer with message recovery. + */ + public interface ISignerWithRecovery + : ISigner + { + /** + * Returns true if the signer has recovered the full message as + * part of signature verification. + * + * @return true if full message recovered. + */ + bool HasFullMessage(); + + /** + * Returns a reference to what message was recovered (if any). + * + * @return full/partial message, null if nothing. + */ + byte[] GetRecoveredMessage(); + + /** + * Perform an update with the recovered message before adding any other data. This must + * be the first update method called, and calling it will result in the signer assuming + * that further calls to update will include message content past what is recoverable. + * + * @param signature the signature that we are in the process of verifying. + * @throws IllegalStateException + */ + void UpdateWithRecoveredMessage(byte[] signature); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISignerWithRecovery.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISignerWithRecovery.cs.meta new file mode 100644 index 000000000..dc03b0379 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ISignerWithRecovery.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e65905090a3ed6d4d8a088adeef895f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IStreamCalculator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IStreamCalculator.cs new file mode 100644 index 000000000..2cc077f3e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IStreamCalculator.cs @@ -0,0 +1,26 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// + /// Base interface for cryptographic operations such as Hashes, MACs, and Signatures which reduce a stream of data + /// to a single value. + /// + public interface IStreamCalculator + { + /// Return a "sink" stream which only exists to update the implementing object. + /// A stream to write to in order to update the implementing object. + Stream Stream { get; } + + /// + /// Return the result of processing the stream. This value is only available once the stream + /// has been closed. + /// + /// The result of processing the stream. + TResult GetResult(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IStreamCalculator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IStreamCalculator.cs.meta new file mode 100644 index 000000000..7aa322944 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IStreamCalculator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71c66ead22110194abc4b7138f2fa247 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IStreamCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IStreamCipher.cs new file mode 100644 index 000000000..e72c7e7b8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IStreamCipher.cs @@ -0,0 +1,60 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// The interface stream ciphers conform to. + public interface IStreamCipher + { + /// The name of the algorithm this cipher implements. + string AlgorithmName { get; } + + /// Initialise the cipher. + /// If true the cipher is initialised for encryption, + /// if false for decryption. + /// The key and other data required by the cipher. + /// + /// If the parameters argument is inappropriate. + /// + void Init(bool forEncryption, ICipherParameters parameters); + + /// encrypt/decrypt a single byte returning the result. + /// the byte to be processed. + /// the result of processing the input byte. + byte ReturnByte(byte input); + + /// + /// Process a block of bytes from , putting the result into . + /// + /// The input byte array. + /// + /// The offset into input where the data to be processed starts. + /// + /// The number of bytes to be processed. + /// The output buffer the processed bytes go into. + /// + /// The offset into output the processed data starts at. + /// + /// If the input buffer is too small. + /// If the output buffer is too small. + void ProcessBytes(byte[] input, int inOff, int length, byte[] output, int outOff); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// + /// Process a block of bytes from , putting the result into . + /// + /// The input span. + /// The output span. + /// If the output span is too small. + void ProcessBytes(ReadOnlySpan input, Span output); +#endif + + /// + /// Reset the cipher to the same state as it was after the last init (if there was one). + /// + void Reset(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IStreamCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IStreamCipher.cs.meta new file mode 100644 index 000000000..be0d38cbe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IStreamCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ef95f78d58f8f2848a0600acae2dbde9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IVerifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IVerifier.cs new file mode 100644 index 000000000..255204a8d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IVerifier.cs @@ -0,0 +1,29 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// + /// Operators that reduce their input to the validation of a signature produce this type. + /// + public interface IVerifier + { + /// + /// Return true if the passed in data matches what is expected by the verification result. + /// + /// The bytes representing the signature. + /// true if the signature verifies, false otherwise. + bool IsVerified(byte[] data); + + /// + /// Return true if the length bytes from off in the source array match the signature + /// expected by the verification result. + /// + /// Byte array containing the signature. + /// The offset into the source array where the signature starts. + /// The number of bytes in source making up the signature. + /// true if the signature verifies, false otherwise. + bool IsVerified(byte[] source, int off, int length); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IVerifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IVerifier.cs.meta new file mode 100644 index 000000000..d3a1ccc24 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IVerifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e9b2937c1d75e3a4a853544b58c02a98 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IVerifierFactory.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IVerifierFactory.cs new file mode 100644 index 000000000..a3000e87c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IVerifierFactory.cs @@ -0,0 +1,23 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// + /// Base interface for operators that serve as stream-based signature verifiers. + /// + public interface IVerifierFactory + { + /// The algorithm details object for this verifier. + object AlgorithmDetails { get; } + + /// + /// Create a stream calculator for this verifier. The stream + /// calculator is used for the actual operation of entering the data to be verified + /// and producing a result which can be used to verify the original signature. + /// + /// A calculator producing an IVerifier which can verify the signature. + IStreamCalculator CreateCalculator(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IVerifierFactory.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IVerifierFactory.cs.meta new file mode 100644 index 000000000..d90f7e973 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IVerifierFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2bb89900480afd44dbd6fd6f123f4197 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IVerifierFactoryProvider.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IVerifierFactoryProvider.cs new file mode 100644 index 000000000..84c0fc610 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IVerifierFactoryProvider.cs @@ -0,0 +1,22 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// + /// Base interface for a provider to support the dynamic creation of signature verifiers. + /// + public interface IVerifierFactoryProvider + { + /// + /// Return a signature verfier for signature algorithm described in the passed in algorithm details object. + /// + /// The details of the signature algorithm verification is required for. + /// A new signature verifier. + IVerifierFactory CreateVerifierFactory (object algorithmDetails); + } +} + +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IVerifierFactoryProvider.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IVerifierFactoryProvider.cs.meta new file mode 100644 index 000000000..71232a9aa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IVerifierFactoryProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d25c82ed85117949850d76a12de1304 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IWrapper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IWrapper.cs new file mode 100644 index 000000000..2b97d226b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IWrapper.cs @@ -0,0 +1,18 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + public interface IWrapper + { + /// The name of the algorithm this cipher implements. + string AlgorithmName { get; } + + void Init(bool forWrapping, ICipherParameters parameters); + + byte[] Wrap(byte[] input, int inOff, int length); + + byte[] Unwrap(byte[] input, int inOff, int length); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IWrapper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IWrapper.cs.meta new file mode 100644 index 000000000..5b8285a0f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IWrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e6dd993ef516c2419ecc5849e22d756 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IXof.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IXof.cs new file mode 100644 index 000000000..fc3a800f8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IXof.cs @@ -0,0 +1,54 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// + /// With FIPS PUB 202 a new kind of message digest was announced which supported extendable output, or variable digest sizes. + /// This interface provides the extra methods required to support variable output on a digest implementation. + /// + public interface IXof + : IDigest + { + /// + /// Output the results of the final calculation for this XOF to outLen number of bytes. + /// + /// output array to write the output bytes to. + /// offset to start writing the bytes at. + /// the number of output bytes requested. + /// the number of bytes written + int OutputFinal(byte[] output, int outOff, int outLen); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// + /// Output the results of the final calculation for this XOF to fill the output span. + /// + /// span to fill with the output bytes. + /// the number of bytes written + int OutputFinal(Span output); +#endif + + /// + /// Start outputting the results of the final calculation for this XOF. Unlike DoFinal, this method + /// will continue producing output until the XOF is explicitly reset, or signals otherwise. + /// + /// output array to write the output bytes to. + /// offset to start writing the bytes at. + /// the number of output bytes requested. + /// the number of bytes written + int Output(byte[] output, int outOff, int outLen); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// + /// Start outputting the results of the final calculation for this XOF. Unlike OutputFinal, this method + /// will continue producing output until the XOF is explicitly reset, or signals otherwise. + /// + /// span to fill with the output bytes. + /// the number of bytes written + int Output(Span output); +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IXof.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IXof.cs.meta new file mode 100644 index 000000000..b7e4cdfd8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/IXof.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0dc703e606f9afc47a3e7859c663a442 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/InvalidCipherTextException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/InvalidCipherTextException.cs new file mode 100644 index 000000000..8ee6e3170 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/InvalidCipherTextException.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// This exception is thrown whenever we find something we don't expect in a message. + [Serializable] + public class InvalidCipherTextException + : CryptoException + { + public InvalidCipherTextException() + : base() + { + } + + public InvalidCipherTextException(string message) + : base(message) + { + } + + public InvalidCipherTextException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected InvalidCipherTextException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/InvalidCipherTextException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/InvalidCipherTextException.cs.meta new file mode 100644 index 000000000..87322c1e1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/InvalidCipherTextException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8853d9e74bb4d214ca464e63632d1f0c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/KeyGenerationParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/KeyGenerationParameters.cs new file mode 100644 index 000000000..3c920c16c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/KeyGenerationParameters.cs @@ -0,0 +1,59 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /** + * The base class for parameters to key generators. + */ + public class KeyGenerationParameters + { + private SecureRandom random; + private int strength; + + /** + * initialise the generator with a source of randomness + * and a strength (in bits). + * + * @param random the random byte source. + * @param strength the size, in bits, of the keys we want to produce. + */ + public KeyGenerationParameters( + SecureRandom random, + int strength) + { + if (random == null) + throw new ArgumentNullException("random"); + if (strength < 1) + throw new ArgumentException("strength must be a positive value", "strength"); + + this.random = random; + this.strength = strength; + } + + /** + * return the random source associated with this + * generator. + * + * @return the generators random source. + */ + public SecureRandom Random + { + get { return random; } + } + + /** + * return the bit strength for keys produced by this generator, + * + * @return the strength of the keys this generator produces (in bits). + */ + public int Strength + { + get { return strength; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/KeyGenerationParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/KeyGenerationParameters.cs.meta new file mode 100644 index 000000000..61d375d67 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/KeyGenerationParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04045d0d5f207b6429614236fbee6859 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/MaxBytesExceededException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/MaxBytesExceededException.cs new file mode 100644 index 000000000..8ffd48e22 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/MaxBytesExceededException.cs @@ -0,0 +1,37 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// This exception is thrown whenever a cipher requires a change of key, IV or similar after x amount of + /// bytes enciphered. + /// + [Serializable] + public class MaxBytesExceededException + : CryptoException + { + public MaxBytesExceededException() + : base() + { + } + + public MaxBytesExceededException(string message) + : base(message) + { + } + + public MaxBytesExceededException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected MaxBytesExceededException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/MaxBytesExceededException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/MaxBytesExceededException.cs.meta new file mode 100644 index 000000000..e094f03f6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/MaxBytesExceededException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 92610e3167822424cbf998e12a4d959a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/OutputLengthException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/OutputLengthException.cs new file mode 100644 index 000000000..1516cec5b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/OutputLengthException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + [Serializable] + public class OutputLengthException + : DataLengthException + { + public OutputLengthException() + : base() + { + } + + public OutputLengthException(string message) + : base(message) + { + } + + public OutputLengthException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected OutputLengthException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/OutputLengthException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/OutputLengthException.cs.meta new file mode 100644 index 000000000..7085e8c69 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/OutputLengthException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aeef960a80a930f47af2e7599623e501 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/PbeParametersGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/PbeParametersGenerator.cs new file mode 100644 index 000000000..883b60efc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/PbeParametersGenerator.cs @@ -0,0 +1,145 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /** + * super class for all Password Based Encyrption (Pbe) parameter generator classes. + */ + public abstract class PbeParametersGenerator + { + protected byte[] mPassword; + protected byte[] mSalt; + protected int mIterationCount; + + /** + * base constructor. + */ + protected PbeParametersGenerator() + { + } + + /** + * initialise the Pbe generator. + * + * @param password the password converted into bytes (see below). + * @param salt the salt to be mixed with the password. + * @param iterationCount the number of iterations the "mixing" function + * is to be applied for. + */ + public virtual void Init( + byte[] password, + byte[] salt, + int iterationCount) + { + if (password == null) + throw new ArgumentNullException("password"); + if (salt == null) + throw new ArgumentNullException("salt"); + + this.mPassword = Arrays.Clone(password); + this.mSalt = Arrays.Clone(salt); + this.mIterationCount = iterationCount; + } + + public virtual byte[] Password + { + get { return Arrays.Clone(mPassword); } + } + + public virtual byte[] Salt + { + get { return Arrays.Clone(mSalt); } + } + + /** + * return the iteration count. + * + * @return the iteration count. + */ + public virtual int IterationCount + { + get { return mIterationCount; } + } + + public abstract ICipherParameters GenerateDerivedParameters(string algorithm, int keySize); + public abstract ICipherParameters GenerateDerivedParameters(string algorithm, int keySize, int ivSize); + + /** + * Generate derived parameters for a key of length keySize, specifically + * for use with a MAC. + * + * @param keySize the length, in bits, of the key required. + * @return a parameters object representing a key. + */ + public abstract ICipherParameters GenerateDerivedMacParameters(int keySize); + + /** + * converts a password to a byte array according to the scheme in + * Pkcs5 (ascii, no padding) + * + * @param password a character array representing the password. + * @return a byte array representing the password. + */ + public static byte[] Pkcs5PasswordToBytes( + char[] password) + { + if (password == null) + return new byte[0]; + + return Strings.ToByteArray(password); + } + + /** + * converts a password to a byte array according to the scheme in + * PKCS5 (UTF-8, no padding) + * + * @param password a character array representing the password. + * @return a byte array representing the password. + */ + public static byte[] Pkcs5PasswordToUtf8Bytes( + char[] password) + { + if (password == null) + return new byte[0]; + + return Encoding.UTF8.GetBytes(password); + } + + /** + * converts a password to a byte array according to the scheme in + * Pkcs12 (unicode, big endian, 2 zero pad bytes at the end). + * + * @param password a character array representing the password. + * @return a byte array representing the password. + */ + public static byte[] Pkcs12PasswordToBytes( + char[] password) + { + return Pkcs12PasswordToBytes(password, false); + } + + public static byte[] Pkcs12PasswordToBytes( + char[] password, + bool wrongPkcs12Zero) + { + if (password == null || password.Length < 1) + { + return new byte[wrongPkcs12Zero ? 2 : 0]; + } + + // +1 for extra 2 pad bytes. + byte[] bytes = new byte[(password.Length + 1) * 2]; + + Encoding.BigEndianUnicode.GetBytes(password, 0, password.Length, bytes, 0); + + return bytes; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/PbeParametersGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/PbeParametersGenerator.cs.meta new file mode 100644 index 000000000..493df6f59 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/PbeParametersGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e8e08c20f9235643b9bc29aa415dfab +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/Security.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/Security.cs new file mode 100644 index 000000000..0454b349a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/Security.cs @@ -0,0 +1,3 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/Security.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/Security.cs.meta new file mode 100644 index 000000000..ff7c0cffc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/Security.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b1d368c12b4edfe4b920a33d51d08c44 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/SimpleBlockResult.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/SimpleBlockResult.cs new file mode 100644 index 000000000..46c20973d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/SimpleBlockResult.cs @@ -0,0 +1,66 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /// + /// A simple block result object which just carries a byte array. + /// + public class SimpleBlockResult + : IBlockResult + { + private readonly byte[] result; + + /// + /// Base constructor - a wrapper for the passed in byte array. + /// + /// The byte array to be wrapped. + public SimpleBlockResult(byte[] result) + { + this.result = result; + } + + /// + /// Return the number of bytes in the result + /// + /// The length of the result in bytes. + public int Length + { + get { return result.Length; } + } + + /// + /// Return the final result of the operation. + /// + /// A block of bytes, representing the result of an operation. + public byte[] Collect() + { + return result; + } + + /// + /// Store the final result of the operation by copying it into the destination array. + /// + /// The number of bytes copied into destination. + /// The byte array to copy the result into. + /// The offset into destination to start copying the result at. + public int Collect(byte[] destination, int offset) + { + Array.Copy(result, 0, destination, offset, result.Length); + + return result.Length; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int Collect(Span destination) + { + result.CopyTo(destination); + + return result.Length; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/SimpleBlockResult.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/SimpleBlockResult.cs.meta new file mode 100644 index 000000000..4e842e0b8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/SimpleBlockResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b2047d77dd33602429b5422dfe67ba4f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/StreamBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/StreamBlockCipher.cs new file mode 100644 index 000000000..f0a1fde80 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/StreamBlockCipher.cs @@ -0,0 +1,116 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto +{ + /** + * a wrapper for block ciphers with a single byte block size, so that they + * can be treated like stream ciphers. + */ + public class StreamBlockCipher + : IStreamCipher + { + private readonly IBlockCipherMode m_cipherMode; + private readonly byte[] oneByte = new byte[1]; + + /** + * basic constructor. + * + * @param cipher the block cipher to be wrapped. + * @exception ArgumentException if the cipher has a block size other than + * one. + */ + public StreamBlockCipher(IBlockCipherMode cipherMode) + { + if (cipherMode == null) + throw new ArgumentNullException(nameof(cipherMode)); + if (cipherMode.GetBlockSize() != 1) + throw new ArgumentException("block cipher block size != 1.", nameof(cipherMode)); + + m_cipherMode = cipherMode; + } + + /** + * initialise the underlying cipher. + * + * @param forEncryption true if we are setting up for encryption, false otherwise. + * @param param the necessary parameters for the underlying cipher to be initialised. + */ + public void Init(bool forEncryption, ICipherParameters parameters) + { + m_cipherMode.Init(forEncryption, parameters); + } + + /** + * return the name of the algorithm we are wrapping. + * + * @return the name of the algorithm we are wrapping. + */ + public string AlgorithmName + { + get { return m_cipherMode.AlgorithmName; } + } + + /** + * encrypt/decrypt a single byte returning the result. + * + * @param in the byte to be processed. + * @return the result of processing the input byte. + */ + public byte ReturnByte(byte input) + { + oneByte[0] = input; + + m_cipherMode.ProcessBlock(oneByte, 0, oneByte, 0); + + return oneByte[0]; + } + + /** + * process a block of bytes from in putting the result into out. + * + * @param in the input byte array. + * @param inOff the offset into the in array where the data to be processed starts. + * @param len the number of bytes to be processed. + * @param out the output buffer the processed bytes go into. + * @param outOff the offset into the output byte array the processed data stars at. + * @exception DataLengthException if the output buffer is too small. + */ + public void ProcessBytes(byte[] input, int inOff, int length, byte[] output, int outOff) + { + Check.DataLength(input, inOff, length, "input buffer too short"); + Check.OutputLength(output, outOff, length, "output buffer too short"); + + for (int i = 0; i != length; i++) + { + m_cipherMode.ProcessBlock(input, inOff + i, output, outOff + i); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void ProcessBytes(ReadOnlySpan input, Span output) + { + Check.OutputLength(output, input.Length, "output buffer too short"); + + for (int i = 0; i != input.Length; i++) + { + m_cipherMode.ProcessBlock(input[i..], output[i..]); + } + } +#endif + + /** + * reset the underlying cipher. This leaves it in the same state + * it was at after the last init (if there was one). + */ + public void Reset() + { + m_cipherMode.Reset(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/StreamBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/StreamBlockCipher.cs.meta new file mode 100644 index 000000000..ed4f36bdc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/StreamBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01d635ad1339b4c4a83239af73f165d7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement.meta new file mode 100644 index 000000000..816c289f2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2bc69c4ab864f9b47b55d5556201d098 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/DHAgreement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/DHAgreement.cs new file mode 100644 index 000000000..8780e06a0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/DHAgreement.cs @@ -0,0 +1,98 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement +{ + /** + * a Diffie-Hellman key exchange engine. + *

+ * note: This uses MTI/A0 key agreement in order to make the key agreement + * secure against passive attacks. If you're doing Diffie-Hellman and both + * parties have long term public keys you should look at using this. For + * further information have a look at RFC 2631.

+ *

+ * It's possible to extend this to more than two parties as well, for the moment + * that is left as an exercise for the reader.

+ */ + public class DHAgreement + { + private DHPrivateKeyParameters key; + private DHParameters dhParams; + private BigInteger privateValue; + private SecureRandom random; + + public void Init(ICipherParameters parameters) + { + AsymmetricKeyParameter kParam; + if (parameters is ParametersWithRandom rParam) + { + this.random = rParam.Random; + kParam = (AsymmetricKeyParameter)rParam.Parameters; + } + else + { + this.random = CryptoServicesRegistrar.GetSecureRandom(); + kParam = (AsymmetricKeyParameter)parameters; + } + + if (!(kParam is DHPrivateKeyParameters dhPrivateKeyParameters)) + throw new ArgumentException("DHEngine expects DHPrivateKeyParameters"); + + this.key = dhPrivateKeyParameters; + this.dhParams = dhPrivateKeyParameters.Parameters; + } + + /** + * calculate our initial message. + */ + public BigInteger CalculateMessage() + { + DHKeyPairGenerator dhGen = new DHKeyPairGenerator(); + dhGen.Init(new DHKeyGenerationParameters(random, dhParams)); + AsymmetricCipherKeyPair dhPair = dhGen.GenerateKeyPair(); + + this.privateValue = ((DHPrivateKeyParameters)dhPair.Private).X; + + return ((DHPublicKeyParameters)dhPair.Public).Y; + } + + /** + * given a message from a given party and the corresponding public key + * calculate the next message in the agreement sequence. In this case + * this will represent the shared secret. + */ + public BigInteger CalculateAgreement( + DHPublicKeyParameters pub, + BigInteger message) + { + if (pub == null) + throw new ArgumentNullException("pub"); + if (message == null) + throw new ArgumentNullException("message"); + + if (!pub.Parameters.Equals(dhParams)) + throw new ArgumentException("Diffie-Hellman public key has wrong parameters."); + + BigInteger p = dhParams.P; + + BigInteger peerY = pub.Y; + if (peerY == null || peerY.CompareTo(BigInteger.One) <= 0 || peerY.CompareTo(p.Subtract(BigInteger.One)) >= 0) + throw new ArgumentException("Diffie-Hellman public key is weak"); + + BigInteger result = peerY.ModPow(privateValue, p); + if (result.Equals(BigInteger.One)) + throw new InvalidOperationException("Shared key can't be 1"); + + return message.ModPow(key.X, p).Multiply(result).Mod(p); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/DHAgreement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/DHAgreement.cs.meta new file mode 100644 index 000000000..f7d4a73a2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/DHAgreement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43b4c5b9cdeee0a4ea13e8d2efdb7a4a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/DHBasicAgreement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/DHBasicAgreement.cs new file mode 100644 index 000000000..63be85741 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/DHBasicAgreement.cs @@ -0,0 +1,76 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement +{ + /** + * a Diffie-Hellman key agreement class. + *

+ * note: This is only the basic algorithm, it doesn't take advantage of + * long term public keys if they are available. See the DHAgreement class + * for a "better" implementation.

+ */ + public class DHBasicAgreement + : IBasicAgreement + { + private DHPrivateKeyParameters key; + private DHParameters dhParams; + + public virtual void Init( + ICipherParameters parameters) + { + if (parameters is ParametersWithRandom) + { + parameters = ((ParametersWithRandom) parameters).Parameters; + } + + if (!(parameters is DHPrivateKeyParameters)) + { + throw new ArgumentException("DHEngine expects DHPrivateKeyParameters"); + } + + this.key = (DHPrivateKeyParameters) parameters; + this.dhParams = key.Parameters; + } + + public virtual int GetFieldSize() + { + return (key.Parameters.P.BitLength + 7) / 8; + } + + /** + * given a short term public key from a given party calculate the next + * message in the agreement sequence. + */ + public virtual BigInteger CalculateAgreement( + ICipherParameters pubKey) + { + if (this.key == null) + throw new InvalidOperationException("Agreement algorithm not initialised"); + + DHPublicKeyParameters pub = (DHPublicKeyParameters)pubKey; + + if (!pub.Parameters.Equals(dhParams)) + throw new ArgumentException("Diffie-Hellman public key has wrong parameters."); + + BigInteger p = dhParams.P; + + BigInteger peerY = pub.Y; + if (peerY == null || peerY.CompareTo(BigInteger.One) <= 0 || peerY.CompareTo(p.Subtract(BigInteger.One)) >= 0) + throw new ArgumentException("Diffie-Hellman public key is weak"); + + BigInteger result = peerY.ModPow(key.X, p); + if (result.Equals(BigInteger.One)) + throw new InvalidOperationException("Shared key can't be 1"); + + return result; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/DHBasicAgreement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/DHBasicAgreement.cs.meta new file mode 100644 index 000000000..9ec23b827 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/DHBasicAgreement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 784404322f00cbf4d8deb0ae525835dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/DHStandardGroups.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/DHStandardGroups.cs new file mode 100644 index 000000000..508ccfe43 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/DHStandardGroups.cs @@ -0,0 +1,253 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement +{ + /// Standard Diffie-Hellman groups from various IETF specifications. + public class DHStandardGroups + { + private static readonly BigInteger Two = BigInteger.ValueOf(2); + + private static BigInteger FromHex(string hex) + { + return new BigInteger(1, Hex.DecodeStrict(hex)); + } + + private static DHParameters FromPG(string hexP, string hexG) + { + return new DHParameters(FromHex(hexP), FromHex(hexG)); + } + + private static DHParameters SafePrimeGen2(string hexP) + { + return SafePrimeGen2(hexP, 0); + } + + private static DHParameters SafePrimeGen2(string hexP, int l) + { + // NOTE: A group using a safe prime (i.e. q = (p-1)/2), and generator g = 2 + BigInteger p = FromHex(hexP); + return new DHParameters(p, Two, p.ShiftRight(1), l); + } + + /* + * RFC 2409 + */ + private static readonly string rfc2409_768_p = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" + + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" + + "E485B576625E7EC6F44C42E9A63A3620FFFFFFFFFFFFFFFF"; + public static readonly DHParameters rfc2409_768 = SafePrimeGen2(rfc2409_768_p); + + private static readonly string rfc2409_1024_p = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" + + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" + + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381" + + "FFFFFFFFFFFFFFFF"; + public static readonly DHParameters rfc2409_1024 = SafePrimeGen2(rfc2409_1024_p); + + /* + * RFC 3526 + */ + private static readonly string rfc3526_1536_p = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" + + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" + + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" + + "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" + "83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF"; + private static readonly int rfc3526_1536_l = 200; // RFC3526/RFC7919 + public static readonly DHParameters rfc3526_1536 = SafePrimeGen2(rfc3526_1536_p, rfc3526_1536_l); + + private static readonly string rfc3526_2048_p = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" + + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" + + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" + + "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" + "83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" + "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" + + "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" + "15728E5A8AACAA68FFFFFFFFFFFFFFFF"; + private static readonly int rfc3526_2048_l = System.Math.Max(225, 112 * 2); // MAX(RFC3526/RFC7919,FIPS) + public static readonly DHParameters rfc3526_2048 = SafePrimeGen2(rfc3526_2048_p, rfc3526_2048_l); + + private static readonly string rfc3526_3072_p = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" + + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" + + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" + + "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" + "83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" + "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" + + "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" + "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" + + "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" + "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" + + "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" + + "43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF"; + private static readonly int rfc3526_3072_l = System.Math.Max(275, 128 * 2); // MAX(RFC3526/RFC7919,FIPS) + public static readonly DHParameters rfc3526_3072 = SafePrimeGen2(rfc3526_3072_p, rfc3526_3072_l); + + private static readonly string rfc3526_4096_p = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" + + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" + + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" + + "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" + "83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" + "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" + + "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" + "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" + + "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" + "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" + + "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" + + "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7" + "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA" + + "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6" + "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED" + + "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9" + "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199" + + "FFFFFFFFFFFFFFFF"; + private static readonly int rfc3526_4096_l = System.Math.Max(325, 152 * 2); // MAX(RFC3526/RFC7919,FIPS) + public static readonly DHParameters rfc3526_4096 = SafePrimeGen2(rfc3526_4096_p, rfc3526_4096_l); + + private static readonly string rfc3526_6144_p = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08" + + "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B" + + "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9" + + "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6" + + "49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8" + + "FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C" + + "180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718" + + "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D" + + "04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D" + + "B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226" + + "1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC" + + "E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26" + + "99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB" + + "04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2" + + "233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127" + + "D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492" + + "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406" + + "AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918" + + "DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B33205151" + + "2BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03" + + "F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97F" + + "BEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA" + + "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58B" + + "B7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632" + + "387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E" + + "6DCC4024FFFFFFFFFFFFFFFF"; + private static readonly int rfc3526_6144_l = System.Math.Max(375, 176 * 2); // MAX(RFC3526/RFC7919,FIPS) + public static readonly DHParameters rfc3526_6144 = SafePrimeGen2(rfc3526_6144_p, rfc3526_6144_l); + + private static readonly string rfc3526_8192_p = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" + + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" + + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" + + "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" + "83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" + "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" + + "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" + "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" + + "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" + "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" + + "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" + + "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7" + "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA" + + "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6" + "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED" + + "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9" + "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492" + + "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BD" + "F8FF9406AD9E530EE5DB382F413001AEB06A53ED9027D831" + + "179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1B" + "DB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF" + + "5983CA01C64B92ECF032EA15D1721D03F482D7CE6E74FEF6" + "D55E702F46980C82B5A84031900B1C9E59E7C97FBEC7E8F3" + + "23A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA" + "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE328" + + "06A1D58BB7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55C" + "DA56C9EC2EF29632387FE8D76E3C0468043E8F663F4860EE" + + "12BF2D5B0B7474D6E694F91E6DBE115974A3926F12FEE5E4" + "38777CB6A932DF8CD8BEC4D073B931BA3BC832B68D9DD300" + + "741FA7BF8AFC47ED2576F6936BA424663AAB639C5AE4F568" + "3423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD9" + + "22222E04A4037C0713EB57A81A23F0C73473FC646CEA306B" + "4BCBC8862F8385DDFA9D4B7FA2C087E879683303ED5BDD3A" + + "062B3CF5B3A278A66D2A13F83F44F82DDF310EE074AB6A36" + "4597E899A0255DC164F31CC50846851DF9AB48195DED7EA1" + + "B1D510BD7EE74D73FAF36BC31ECFA268359046F4EB879F92" + "4009438B481C6CD7889A002ED5EE382BC9190DA6FC026E47" + + "9558E4475677E9AA9E3050E2765694DFC81F56E880B96E71" + "60C980DD98EDD3DFFFFFFFFFFFFFFFFF"; + private static readonly int rfc3526_8192_l = System.Math.Max(400, 200 * 2); // MAX(RFC3526/RFC7919,FIPS) + public static readonly DHParameters rfc3526_8192 = SafePrimeGen2(rfc3526_8192_p, rfc3526_8192_l); + + /* + * RFC 4306 + */ + public static readonly DHParameters rfc4306_768 = rfc2409_768; + public static readonly DHParameters rfc4306_1024 = rfc2409_1024; + + /* + * RFC 5996 + */ + public static readonly DHParameters rfc5996_768 = rfc4306_768; + public static readonly DHParameters rfc5996_1024 = rfc4306_1024; + + /* + * RFC 7919 + */ + private static readonly string rfc7919_ffdhe2048_p = "FFFFFFFFFFFFFFFFADF85458A2BB4A9AAFDC5620273D3CF1" + + "D8B9C583CE2D3695A9E13641146433FBCC939DCE249B3EF9" + "7D2FE363630C75D8F681B202AEC4617AD3DF1ED5D5FD6561" + + "2433F51F5F066ED0856365553DED1AF3B557135E7F57C935" + "984F0C70E0E68B77E2A689DAF3EFE8721DF158A136ADE735" + + "30ACCA4F483A797ABC0AB182B324FB61D108A94BB2C8E3FB" + "B96ADAB760D7F4681D4F42A3DE394DF4AE56EDE76372BB19" + + "0B07A7C8EE0A6D709E02FCE1CDF7E2ECC03404CD28342F61" + "9172FE9CE98583FF8E4F1232EEF28183C3FE3B1B4C6FAD73" + + "3BB5FCBC2EC22005C58EF1837D1683B2C6F34A26C1B2EFFA" + "886B423861285C97FFFFFFFFFFFFFFFF"; + private static readonly int rfc7919_ffdhe2048_l = System.Math.Max(225, 112 * 2); // MAX(RFC7919,FIPS) + public static readonly DHParameters rfc7919_ffdhe2048 = SafePrimeGen2(rfc7919_ffdhe2048_p, rfc7919_ffdhe2048_l); + + private static readonly string rfc7919_ffdhe3072_p = "FFFFFFFFFFFFFFFFADF85458A2BB4A9AAFDC5620273D3CF1" + + "D8B9C583CE2D3695A9E13641146433FBCC939DCE249B3EF9" + "7D2FE363630C75D8F681B202AEC4617AD3DF1ED5D5FD6561" + + "2433F51F5F066ED0856365553DED1AF3B557135E7F57C935" + "984F0C70E0E68B77E2A689DAF3EFE8721DF158A136ADE735" + + "30ACCA4F483A797ABC0AB182B324FB61D108A94BB2C8E3FB" + "B96ADAB760D7F4681D4F42A3DE394DF4AE56EDE76372BB19" + + "0B07A7C8EE0A6D709E02FCE1CDF7E2ECC03404CD28342F61" + "9172FE9CE98583FF8E4F1232EEF28183C3FE3B1B4C6FAD73" + + "3BB5FCBC2EC22005C58EF1837D1683B2C6F34A26C1B2EFFA" + "886B4238611FCFDCDE355B3B6519035BBC34F4DEF99C0238" + + "61B46FC9D6E6C9077AD91D2691F7F7EE598CB0FAC186D91C" + "AEFE130985139270B4130C93BC437944F4FD4452E2D74DD3" + + "64F2E21E71F54BFF5CAE82AB9C9DF69EE86D2BC522363A0D" + "ABC521979B0DEADA1DBF9A42D5C4484E0ABCD06BFA53DDEF" + + "3C1B20EE3FD59D7C25E41D2B66C62E37FFFFFFFFFFFFFFFF"; + private static readonly int rfc7919_ffdhe3072_l = System.Math.Max(275, 128 * 2); // MAX(RFC7919,FIPS) + public static readonly DHParameters rfc7919_ffdhe3072 = SafePrimeGen2(rfc7919_ffdhe3072_p, rfc7919_ffdhe3072_l); + + private static readonly string rfc7919_ffdhe4096_p = "FFFFFFFFFFFFFFFFADF85458A2BB4A9AAFDC5620273D3CF1" + + "D8B9C583CE2D3695A9E13641146433FBCC939DCE249B3EF9" + "7D2FE363630C75D8F681B202AEC4617AD3DF1ED5D5FD6561" + + "2433F51F5F066ED0856365553DED1AF3B557135E7F57C935" + "984F0C70E0E68B77E2A689DAF3EFE8721DF158A136ADE735" + + "30ACCA4F483A797ABC0AB182B324FB61D108A94BB2C8E3FB" + "B96ADAB760D7F4681D4F42A3DE394DF4AE56EDE76372BB19" + + "0B07A7C8EE0A6D709E02FCE1CDF7E2ECC03404CD28342F61" + "9172FE9CE98583FF8E4F1232EEF28183C3FE3B1B4C6FAD73" + + "3BB5FCBC2EC22005C58EF1837D1683B2C6F34A26C1B2EFFA" + "886B4238611FCFDCDE355B3B6519035BBC34F4DEF99C0238" + + "61B46FC9D6E6C9077AD91D2691F7F7EE598CB0FAC186D91C" + "AEFE130985139270B4130C93BC437944F4FD4452E2D74DD3" + + "64F2E21E71F54BFF5CAE82AB9C9DF69EE86D2BC522363A0D" + "ABC521979B0DEADA1DBF9A42D5C4484E0ABCD06BFA53DDEF" + + "3C1B20EE3FD59D7C25E41D2B669E1EF16E6F52C3164DF4FB" + "7930E9E4E58857B6AC7D5F42D69F6D187763CF1D55034004" + + "87F55BA57E31CC7A7135C886EFB4318AED6A1E012D9E6832" + "A907600A918130C46DC778F971AD0038092999A333CB8B7A" + + "1A1DB93D7140003C2A4ECEA9F98D0ACC0A8291CDCEC97DCF" + "8EC9B55A7F88A46B4DB5A851F44182E1C68A007E5E655F6A" + + "FFFFFFFFFFFFFFFF"; + private static readonly int rfc7919_ffdhe4096_l = System.Math.Max(325, 152 * 2); // MAX(RFC7919,FIPS) + public static readonly DHParameters rfc7919_ffdhe4096 = SafePrimeGen2(rfc7919_ffdhe4096_p, rfc7919_ffdhe4096_l); + + private static readonly string rfc7919_ffdhe6144_p = "FFFFFFFFFFFFFFFFADF85458A2BB4A9AAFDC5620273D3CF1" + + "D8B9C583CE2D3695A9E13641146433FBCC939DCE249B3EF9" + "7D2FE363630C75D8F681B202AEC4617AD3DF1ED5D5FD6561" + + "2433F51F5F066ED0856365553DED1AF3B557135E7F57C935" + "984F0C70E0E68B77E2A689DAF3EFE8721DF158A136ADE735" + + "30ACCA4F483A797ABC0AB182B324FB61D108A94BB2C8E3FB" + "B96ADAB760D7F4681D4F42A3DE394DF4AE56EDE76372BB19" + + "0B07A7C8EE0A6D709E02FCE1CDF7E2ECC03404CD28342F61" + "9172FE9CE98583FF8E4F1232EEF28183C3FE3B1B4C6FAD73" + + "3BB5FCBC2EC22005C58EF1837D1683B2C6F34A26C1B2EFFA" + "886B4238611FCFDCDE355B3B6519035BBC34F4DEF99C0238" + + "61B46FC9D6E6C9077AD91D2691F7F7EE598CB0FAC186D91C" + "AEFE130985139270B4130C93BC437944F4FD4452E2D74DD3" + + "64F2E21E71F54BFF5CAE82AB9C9DF69EE86D2BC522363A0D" + "ABC521979B0DEADA1DBF9A42D5C4484E0ABCD06BFA53DDEF" + + "3C1B20EE3FD59D7C25E41D2B669E1EF16E6F52C3164DF4FB" + "7930E9E4E58857B6AC7D5F42D69F6D187763CF1D55034004" + + "87F55BA57E31CC7A7135C886EFB4318AED6A1E012D9E6832" + "A907600A918130C46DC778F971AD0038092999A333CB8B7A" + + "1A1DB93D7140003C2A4ECEA9F98D0ACC0A8291CDCEC97DCF" + "8EC9B55A7F88A46B4DB5A851F44182E1C68A007E5E0DD902" + + "0BFD64B645036C7A4E677D2C38532A3A23BA4442CAF53EA6" + "3BB454329B7624C8917BDD64B1C0FD4CB38E8C334C701C3A" + + "CDAD0657FCCFEC719B1F5C3E4E46041F388147FB4CFDB477" + "A52471F7A9A96910B855322EDB6340D8A00EF092350511E3" + + "0ABEC1FFF9E3A26E7FB29F8C183023C3587E38DA0077D9B4" + "763E4E4B94B2BBC194C6651E77CAF992EEAAC0232A281BF6" + + "B3A739C1226116820AE8DB5847A67CBEF9C9091B462D538C" + "D72B03746AE77F5E62292C311562A846505DC82DB854338A" + + "E49F5235C95B91178CCF2DD5CACEF403EC9D1810C6272B04" + "5B3B71F9DC6B80D63FDD4A8E9ADB1E6962A69526D43161C1" + + "A41D570D7938DAD4A40E329CD0E40E65FFFFFFFFFFFFFFFF"; + private static readonly int rfc7919_ffdhe6144_l = System.Math.Max(375, 176 * 2); // MAX(RFC7919,FIPS) + public static readonly DHParameters rfc7919_ffdhe6144 = SafePrimeGen2(rfc7919_ffdhe6144_p, rfc7919_ffdhe6144_l); + + private static readonly string rfc7919_ffdhe8192_p = "FFFFFFFFFFFFFFFFADF85458A2BB4A9AAFDC5620273D3CF1" + + "D8B9C583CE2D3695A9E13641146433FBCC939DCE249B3EF9" + "7D2FE363630C75D8F681B202AEC4617AD3DF1ED5D5FD6561" + + "2433F51F5F066ED0856365553DED1AF3B557135E7F57C935" + "984F0C70E0E68B77E2A689DAF3EFE8721DF158A136ADE735" + + "30ACCA4F483A797ABC0AB182B324FB61D108A94BB2C8E3FB" + "B96ADAB760D7F4681D4F42A3DE394DF4AE56EDE76372BB19" + + "0B07A7C8EE0A6D709E02FCE1CDF7E2ECC03404CD28342F61" + "9172FE9CE98583FF8E4F1232EEF28183C3FE3B1B4C6FAD73" + + "3BB5FCBC2EC22005C58EF1837D1683B2C6F34A26C1B2EFFA" + "886B4238611FCFDCDE355B3B6519035BBC34F4DEF99C0238" + + "61B46FC9D6E6C9077AD91D2691F7F7EE598CB0FAC186D91C" + "AEFE130985139270B4130C93BC437944F4FD4452E2D74DD3" + + "64F2E21E71F54BFF5CAE82AB9C9DF69EE86D2BC522363A0D" + "ABC521979B0DEADA1DBF9A42D5C4484E0ABCD06BFA53DDEF" + + "3C1B20EE3FD59D7C25E41D2B669E1EF16E6F52C3164DF4FB" + "7930E9E4E58857B6AC7D5F42D69F6D187763CF1D55034004" + + "87F55BA57E31CC7A7135C886EFB4318AED6A1E012D9E6832" + "A907600A918130C46DC778F971AD0038092999A333CB8B7A" + + "1A1DB93D7140003C2A4ECEA9F98D0ACC0A8291CDCEC97DCF" + "8EC9B55A7F88A46B4DB5A851F44182E1C68A007E5E0DD902" + + "0BFD64B645036C7A4E677D2C38532A3A23BA4442CAF53EA6" + "3BB454329B7624C8917BDD64B1C0FD4CB38E8C334C701C3A" + + "CDAD0657FCCFEC719B1F5C3E4E46041F388147FB4CFDB477" + "A52471F7A9A96910B855322EDB6340D8A00EF092350511E3" + + "0ABEC1FFF9E3A26E7FB29F8C183023C3587E38DA0077D9B4" + "763E4E4B94B2BBC194C6651E77CAF992EEAAC0232A281BF6" + + "B3A739C1226116820AE8DB5847A67CBEF9C9091B462D538C" + "D72B03746AE77F5E62292C311562A846505DC82DB854338A" + + "E49F5235C95B91178CCF2DD5CACEF403EC9D1810C6272B04" + "5B3B71F9DC6B80D63FDD4A8E9ADB1E6962A69526D43161C1" + + "A41D570D7938DAD4A40E329CCFF46AAA36AD004CF600C838" + "1E425A31D951AE64FDB23FCEC9509D43687FEB69EDD1CC5E" + + "0B8CC3BDF64B10EF86B63142A3AB8829555B2F747C932665" + "CB2C0F1CC01BD70229388839D2AF05E454504AC78B758282" + + "2846C0BA35C35F5C59160CC046FD8251541FC68C9C86B022" + "BB7099876A460E7451A8A93109703FEE1C217E6C3826E52C" + + "51AA691E0E423CFC99E9E31650C1217B624816CDAD9A95F9" + "D5B8019488D9C0A0A1FE3075A577E23183F81D4A3F2FA457" + + "1EFC8CE0BA8A4FE8B6855DFE72B0A66EDED2FBABFBE58A30" + "FAFABE1C5D71A87E2F741EF8C1FE86FEA6BBFDE530677F0D" + + "97D11D49F7A8443D0822E506A9F4614E011E2A94838FF88C" + "D68C8BB7C5C6424CFFFFFFFFFFFFFFFF"; + private static readonly int rfc7919_ffdhe8192_l = System.Math.Max(400, 200 * 2); // MAX(RFC7919,FIPS) + public static readonly DHParameters rfc7919_ffdhe8192 = SafePrimeGen2(rfc7919_ffdhe8192_p, rfc7919_ffdhe8192_l); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/DHStandardGroups.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/DHStandardGroups.cs.meta new file mode 100644 index 000000000..ad73ed30d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/DHStandardGroups.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 70ce942152c050a419149690a08eec59 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECDHBasicAgreement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECDHBasicAgreement.cs new file mode 100644 index 000000000..7fd1f7fac --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECDHBasicAgreement.cs @@ -0,0 +1,78 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement +{ + /** + * P1363 7.2.1 ECSVDP-DH + * + * ECSVDP-DH is Elliptic Curve Secret Value Derivation Primitive, + * Diffie-Hellman version. It is based on the work of [DH76], [Mil86], + * and [Kob87]. This primitive derives a shared secret value from one + * party's private key and another party's public key, where both have + * the same set of EC domain parameters. If two parties correctly + * execute this primitive, they will produce the same output. This + * primitive can be invoked by a scheme to derive a shared secret key; + * specifically, it may be used with the schemes ECKAS-DH1 and + * DL/ECKAS-DH2. It assumes that the input keys are valid (see also + * Section 7.2.2). + */ + public class ECDHBasicAgreement + : IBasicAgreement + { + protected internal ECPrivateKeyParameters privKey; + + public virtual void Init( + ICipherParameters parameters) + { + if (parameters is ParametersWithRandom) + { + parameters = ((ParametersWithRandom)parameters).Parameters; + } + + this.privKey = (ECPrivateKeyParameters)parameters; + } + + public virtual int GetFieldSize() + { + return (privKey.Parameters.Curve.FieldSize + 7) / 8; + } + + public virtual BigInteger CalculateAgreement( + ICipherParameters pubKey) + { + ECPublicKeyParameters pub = (ECPublicKeyParameters)pubKey; + ECDomainParameters dp = privKey.Parameters; + if (!dp.Equals(pub.Parameters)) + throw new InvalidOperationException("ECDH public key has wrong domain parameters"); + + BigInteger d = privKey.D; + + // Always perform calculations on the exact curve specified by our private key's parameters + ECPoint Q = ECAlgorithms.CleanPoint(dp.Curve, pub.Q); + if (Q.IsInfinity) + throw new InvalidOperationException("Infinity is not a valid public key for ECDH"); + + BigInteger h = dp.H; + if (!h.Equals(BigInteger.One)) + { + d = dp.HInv.Multiply(d).Mod(dp.N); + Q = ECAlgorithms.ReferenceMultiply(Q, h); + } + + ECPoint P = Q.Multiply(d).Normalize(); + if (P.IsInfinity) + throw new InvalidOperationException("Infinity is not a valid agreement value for ECDH"); + + return P.AffineXCoord.ToBigInteger(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECDHBasicAgreement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECDHBasicAgreement.cs.meta new file mode 100644 index 000000000..cdce65369 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECDHBasicAgreement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 113c4d3158892b44b9ffa9a028ad0762 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECDHCBasicAgreement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECDHCBasicAgreement.cs new file mode 100644 index 000000000..947b8ae6c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECDHCBasicAgreement.cs @@ -0,0 +1,76 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement +{ + /** + * P1363 7.2.2 ECSVDP-DHC + * + * ECSVDP-DHC is Elliptic Curve Secret Value Derivation Primitive, + * Diffie-Hellman version with cofactor multiplication. It is based on + * the work of [DH76], [Mil86], [Kob87], [LMQ98] and [Kal98a]. This + * primitive derives a shared secret value from one party's private key + * and another party's public key, where both have the same set of EC + * domain parameters. If two parties correctly execute this primitive, + * they will produce the same output. This primitive can be invoked by a + * scheme to derive a shared secret key; specifically, it may be used + * with the schemes ECKAS-DH1 and DL/ECKAS-DH2. It does not assume the + * validity of the input public key (see also Section 7.2.1). + *

+ * Note: As stated P1363 compatibility mode with ECDH can be preset, and + * in this case the implementation doesn't have a ECDH compatibility mode + * (if you want that just use ECDHBasicAgreement and note they both implement + * BasicAgreement!).

+ */ + public class ECDHCBasicAgreement + : IBasicAgreement + { + private ECPrivateKeyParameters privKey; + + public virtual void Init( + ICipherParameters parameters) + { + if (parameters is ParametersWithRandom) + { + parameters = ((ParametersWithRandom) parameters).Parameters; + } + + this.privKey = (ECPrivateKeyParameters)parameters; + } + + public virtual int GetFieldSize() + { + return (privKey.Parameters.Curve.FieldSize + 7) / 8; + } + + public virtual BigInteger CalculateAgreement( + ICipherParameters pubKey) + { + ECPublicKeyParameters pub = (ECPublicKeyParameters)pubKey; + ECDomainParameters dp = privKey.Parameters; + if (!dp.Equals(pub.Parameters)) + throw new InvalidOperationException("ECDHC public key has wrong domain parameters"); + + BigInteger hd = dp.H.Multiply(privKey.D).Mod(dp.N); + + // Always perform calculations on the exact curve specified by our private key's parameters + ECPoint pubPoint = ECAlgorithms.CleanPoint(dp.Curve, pub.Q); + if (pubPoint.IsInfinity) + throw new InvalidOperationException("Infinity is not a valid public key for ECDHC"); + + ECPoint P = pubPoint.Multiply(hd).Normalize(); + if (P.IsInfinity) + throw new InvalidOperationException("Infinity is not a valid agreement value for ECDHC"); + + return P.AffineXCoord.ToBigInteger(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECDHCBasicAgreement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECDHCBasicAgreement.cs.meta new file mode 100644 index 000000000..228181b23 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECDHCBasicAgreement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0263cf715bcf72c4ab328faf462a207b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECDHWithKdfBasicAgreement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECDHWithKdfBasicAgreement.cs new file mode 100644 index 000000000..7622a5e37 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECDHWithKdfBasicAgreement.cs @@ -0,0 +1,63 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.Kdf; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement +{ + public class ECDHWithKdfBasicAgreement + : ECDHBasicAgreement + { + private readonly string algorithm; + private readonly IDerivationFunction kdf; + + public ECDHWithKdfBasicAgreement( + string algorithm, + IDerivationFunction kdf) + { + if (algorithm == null) + throw new ArgumentNullException("algorithm"); + if (kdf == null) + throw new ArgumentNullException("kdf"); + + this.algorithm = algorithm; + this.kdf = kdf; + } + + public override BigInteger CalculateAgreement( + ICipherParameters pubKey) + { + // Note that the ec.KeyAgreement class in JCE only uses kdf in one + // of the engineGenerateSecret methods. + + BigInteger result = base.CalculateAgreement(pubKey); + + int keySize = GeneratorUtilities.GetDefaultKeySize(algorithm); + + DHKdfParameters dhKdfParams = new DHKdfParameters( + new DerObjectIdentifier(algorithm), + keySize, + BigIntToBytes(result)); + + kdf.Init(dhKdfParams); + + byte[] keyBytes = new byte[keySize / 8]; + kdf.GenerateBytes(keyBytes, 0, keyBytes.Length); + + return new BigInteger(1, keyBytes); + } + + private byte[] BigIntToBytes(BigInteger r) + { + int byteLength = X9IntegerConverter.GetByteLength(privKey.Parameters.Curve); + return X9IntegerConverter.IntegerToBytes(r, byteLength); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECDHWithKdfBasicAgreement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECDHWithKdfBasicAgreement.cs.meta new file mode 100644 index 000000000..0c02a22d9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECDHWithKdfBasicAgreement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7bbcd424d33a48544b430a90ee0e859d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECMqvBasicAgreement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECMqvBasicAgreement.cs new file mode 100644 index 000000000..09229b6f4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECMqvBasicAgreement.cs @@ -0,0 +1,90 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement +{ + public class ECMqvBasicAgreement + : IBasicAgreement + { + protected internal MqvPrivateParameters privParams; + + public virtual void Init( + ICipherParameters parameters) + { + if (parameters is ParametersWithRandom) + { + parameters = ((ParametersWithRandom)parameters).Parameters; + } + + this.privParams = (MqvPrivateParameters)parameters; + } + + public virtual int GetFieldSize() + { + return (privParams.StaticPrivateKey.Parameters.Curve.FieldSize + 7) / 8; + } + + public virtual BigInteger CalculateAgreement( + ICipherParameters pubKey) + { + MqvPublicParameters pubParams = (MqvPublicParameters)pubKey; + + ECPrivateKeyParameters staticPrivateKey = privParams.StaticPrivateKey; + ECDomainParameters parameters = staticPrivateKey.Parameters; + + if (!parameters.Equals(pubParams.StaticPublicKey.Parameters)) + throw new InvalidOperationException("ECMQV public key components have wrong domain parameters"); + + ECPoint agreement = CalculateMqvAgreement(parameters, staticPrivateKey, + privParams.EphemeralPrivateKey, privParams.EphemeralPublicKey, + pubParams.StaticPublicKey, pubParams.EphemeralPublicKey).Normalize(); + + if (agreement.IsInfinity) + throw new InvalidOperationException("Infinity is not a valid agreement value for MQV"); + + return agreement.AffineXCoord.ToBigInteger(); + } + + // The ECMQV Primitive as described in SEC-1, 3.4 + private static ECPoint CalculateMqvAgreement( + ECDomainParameters parameters, + ECPrivateKeyParameters d1U, + ECPrivateKeyParameters d2U, + ECPublicKeyParameters Q2U, + ECPublicKeyParameters Q1V, + ECPublicKeyParameters Q2V) + { + BigInteger n = parameters.N; + int e = (n.BitLength + 1) / 2; + BigInteger powE = BigInteger.One.ShiftLeft(e); + + ECCurve curve = parameters.Curve; + + ECPoint q2u = ECAlgorithms.CleanPoint(curve, Q2U.Q); + ECPoint q1v = ECAlgorithms.CleanPoint(curve, Q1V.Q); + ECPoint q2v = ECAlgorithms.CleanPoint(curve, Q2V.Q); + + BigInteger x = q2u.AffineXCoord.ToBigInteger(); + BigInteger xBar = x.Mod(powE); + BigInteger Q2UBar = xBar.SetBit(e); + BigInteger s = d1U.D.Multiply(Q2UBar).Add(d2U.D).Mod(n); + + BigInteger xPrime = q2v.AffineXCoord.ToBigInteger(); + BigInteger xPrimeBar = xPrime.Mod(powE); + BigInteger Q2VBar = xPrimeBar.SetBit(e); + + BigInteger hs = parameters.H.Multiply(s).Mod(n); + + return ECAlgorithms.SumOfTwoMultiplies( + q1v, Q2VBar.Multiply(hs).Mod(n), q2v, hs); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECMqvBasicAgreement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECMqvBasicAgreement.cs.meta new file mode 100644 index 000000000..e41cd1a92 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECMqvBasicAgreement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7e49c61c5cba8d548ad042204e8f501b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECMqvWithKdfBasicAgreement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECMqvWithKdfBasicAgreement.cs new file mode 100644 index 000000000..82892db53 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECMqvWithKdfBasicAgreement.cs @@ -0,0 +1,63 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.Kdf; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement +{ + public class ECMqvWithKdfBasicAgreement + : ECMqvBasicAgreement + { + private readonly string algorithm; + private readonly IDerivationFunction kdf; + + public ECMqvWithKdfBasicAgreement( + string algorithm, + IDerivationFunction kdf) + { + if (algorithm == null) + throw new ArgumentNullException("algorithm"); + if (kdf == null) + throw new ArgumentNullException("kdf"); + + this.algorithm = algorithm; + this.kdf = kdf; + } + + public override BigInteger CalculateAgreement( + ICipherParameters pubKey) + { + // Note that the ec.KeyAgreement class in JCE only uses kdf in one + // of the engineGenerateSecret methods. + + BigInteger result = base.CalculateAgreement(pubKey); + + int keySize = GeneratorUtilities.GetDefaultKeySize(algorithm); + + DHKdfParameters dhKdfParams = new DHKdfParameters( + new DerObjectIdentifier(algorithm), + keySize, + BigIntToBytes(result)); + + kdf.Init(dhKdfParams); + + byte[] keyBytes = new byte[keySize / 8]; + kdf.GenerateBytes(keyBytes, 0, keyBytes.Length); + + return new BigInteger(1, keyBytes); + } + + private byte[] BigIntToBytes(BigInteger r) + { + int byteLength = X9IntegerConverter.GetByteLength(privParams.StaticPrivateKey.Parameters.Curve); + return X9IntegerConverter.IntegerToBytes(r, byteLength); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECMqvWithKdfBasicAgreement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECMqvWithKdfBasicAgreement.cs.meta new file mode 100644 index 000000000..cfb571a1a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/ECMqvWithKdfBasicAgreement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 67f980d3d0ee56d4f912ba8597340259 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/SM2KeyExchange.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/SM2KeyExchange.cs new file mode 100644 index 000000000..02575c99c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/SM2KeyExchange.cs @@ -0,0 +1,278 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement +{ + /// + /// SM2 Key Exchange protocol - based on https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02 + /// + public class SM2KeyExchange + { + private readonly IDigest mDigest; + + private byte[] mUserID; + private ECPrivateKeyParameters mStaticKey; + private ECPoint mStaticPubPoint; + private ECPoint mEphemeralPubPoint; + private ECDomainParameters mECParams; + private int mW; + private ECPrivateKeyParameters mEphemeralKey; + private bool mInitiator; + + public SM2KeyExchange() + : this(new SM3Digest()) + { + } + + public SM2KeyExchange(IDigest digest) + { + this.mDigest = digest; + } + + public virtual void Init(ICipherParameters privParam) + { + SM2KeyExchangePrivateParameters baseParam; + + if (privParam is ParametersWithID) + { + baseParam = (SM2KeyExchangePrivateParameters)((ParametersWithID)privParam).Parameters; + mUserID = ((ParametersWithID)privParam).GetID(); + } + else + { + baseParam = (SM2KeyExchangePrivateParameters)privParam; + mUserID = new byte[0]; + } + + mInitiator = baseParam.IsInitiator; + mStaticKey = baseParam.StaticPrivateKey; + mEphemeralKey = baseParam.EphemeralPrivateKey; + mECParams = mStaticKey.Parameters; + mStaticPubPoint = baseParam.StaticPublicPoint; + mEphemeralPubPoint = baseParam.EphemeralPublicPoint; + mW = mECParams.Curve.FieldSize / 2 - 1; + } + + public virtual byte[] CalculateKey(int kLen, ICipherParameters pubParam) + { + SM2KeyExchangePublicParameters otherPub; + byte[] otherUserID; + + if (pubParam is ParametersWithID) + { + otherPub = (SM2KeyExchangePublicParameters)((ParametersWithID)pubParam).Parameters; + otherUserID = ((ParametersWithID)pubParam).GetID(); + } + else + { + otherPub = (SM2KeyExchangePublicParameters)pubParam; + otherUserID = new byte[0]; + } + + byte[] za = GetZ(mDigest, mUserID, mStaticPubPoint); + byte[] zb = GetZ(mDigest, otherUserID, otherPub.StaticPublicKey.Q); + + ECPoint U = CalculateU(otherPub); + + byte[] rv; + if (mInitiator) + { + rv = Kdf(U, za, zb, kLen); + } + else + { + rv = Kdf(U, zb, za, kLen); + } + + return rv; + } + + public virtual byte[][] CalculateKeyWithConfirmation(int kLen, byte[] confirmationTag, ICipherParameters pubParam) + { + SM2KeyExchangePublicParameters otherPub; + byte[] otherUserID; + + if (pubParam is ParametersWithID) + { + otherPub = (SM2KeyExchangePublicParameters)((ParametersWithID)pubParam).Parameters; + otherUserID = ((ParametersWithID)pubParam).GetID(); + } + else + { + otherPub = (SM2KeyExchangePublicParameters)pubParam; + otherUserID = new byte[0]; + } + + if (mInitiator && confirmationTag == null) + throw new ArgumentException("if initiating, confirmationTag must be set"); + + byte[] za = GetZ(mDigest, mUserID, mStaticPubPoint); + byte[] zb = GetZ(mDigest, otherUserID, otherPub.StaticPublicKey.Q); + + ECPoint U = CalculateU(otherPub); + + byte[] rv; + if (mInitiator) + { + rv = Kdf(U, za, zb, kLen); + + byte[] inner = CalculateInnerHash(mDigest, U, za, zb, mEphemeralPubPoint, otherPub.EphemeralPublicKey.Q); + + byte[] s1 = S1(mDigest, U, inner); + + if (!Arrays.ConstantTimeAreEqual(s1, confirmationTag)) + throw new InvalidOperationException("confirmation tag mismatch"); + + return new byte[][] { rv, S2(mDigest, U, inner)}; + } + else + { + rv = Kdf(U, zb, za, kLen); + + byte[] inner = CalculateInnerHash(mDigest, U, zb, za, otherPub.EphemeralPublicKey.Q, mEphemeralPubPoint); + + return new byte[][] { rv, S1(mDigest, U, inner), S2(mDigest, U, inner) }; + } + } + + protected virtual ECPoint CalculateU(SM2KeyExchangePublicParameters otherPub) + { + ECDomainParameters dp = mStaticKey.Parameters; + + ECPoint p1 = ECAlgorithms.CleanPoint(dp.Curve, otherPub.StaticPublicKey.Q); + ECPoint p2 = ECAlgorithms.CleanPoint(dp.Curve, otherPub.EphemeralPublicKey.Q); + + BigInteger x1 = Reduce(mEphemeralPubPoint.AffineXCoord.ToBigInteger()); + BigInteger x2 = Reduce(p2.AffineXCoord.ToBigInteger()); + BigInteger tA = mStaticKey.D.Add(x1.Multiply(mEphemeralKey.D)); + BigInteger k1 = mECParams.H.Multiply(tA).Mod(mECParams.N); + BigInteger k2 = k1.Multiply(x2).Mod(mECParams.N); + + return ECAlgorithms.SumOfTwoMultiplies(p1, k1, p2, k2).Normalize(); + } + + protected virtual byte[] Kdf(ECPoint u, byte[] za, byte[] zb, int klen) + { + int digestSize = mDigest.GetDigestSize(); + byte[] buf = new byte[System.Math.Max(4, digestSize)]; + byte[] rv = new byte[(klen + 7) / 8]; + int off = 0; + + IMemoable memo = mDigest as IMemoable; + IMemoable copy = null; + + if (memo != null) + { + AddFieldElement(mDigest, u.AffineXCoord); + AddFieldElement(mDigest, u.AffineYCoord); + mDigest.BlockUpdate(za, 0, za.Length); + mDigest.BlockUpdate(zb, 0, zb.Length); + copy = memo.Copy(); + } + + uint ct = 0; + + while (off < rv.Length) + { + if (memo != null) + { + memo.Reset(copy); + } + else + { + AddFieldElement(mDigest, u.AffineXCoord); + AddFieldElement(mDigest, u.AffineYCoord); + mDigest.BlockUpdate(za, 0, za.Length); + mDigest.BlockUpdate(zb, 0, zb.Length); + } + + Pack.UInt32_To_BE(++ct, buf, 0); + mDigest.BlockUpdate(buf, 0, 4); + mDigest.DoFinal(buf, 0); + + int copyLen = System.Math.Min(digestSize, rv.Length - off); + Array.Copy(buf, 0, rv, off, copyLen); + off += copyLen; + } + + return rv; + } + + //x1~=2^w+(x1 AND (2^w-1)) + private BigInteger Reduce(BigInteger x) + { + return x.And(BigInteger.One.ShiftLeft(mW).Subtract(BigInteger.One)).SetBit(mW); + } + + private byte[] S1(IDigest digest, ECPoint u, byte[] inner) + { + digest.Update((byte)0x02); + AddFieldElement(digest, u.AffineYCoord); + digest.BlockUpdate(inner, 0, inner.Length); + + return DigestUtilities.DoFinal(digest); + } + + private byte[] CalculateInnerHash(IDigest digest, ECPoint u, byte[] za, byte[] zb, ECPoint p1, ECPoint p2) + { + AddFieldElement(digest, u.AffineXCoord); + digest.BlockUpdate(za, 0, za.Length); + digest.BlockUpdate(zb, 0, zb.Length); + AddFieldElement(digest, p1.AffineXCoord); + AddFieldElement(digest, p1.AffineYCoord); + AddFieldElement(digest, p2.AffineXCoord); + AddFieldElement(digest, p2.AffineYCoord); + + return DigestUtilities.DoFinal(digest); + } + + private byte[] S2(IDigest digest, ECPoint u, byte[] inner) + { + digest.Update((byte)0x03); + AddFieldElement(digest, u.AffineYCoord); + digest.BlockUpdate(inner, 0, inner.Length); + + return DigestUtilities.DoFinal(digest); + } + + private byte[] GetZ(IDigest digest, byte[] userID, ECPoint pubPoint) + { + AddUserID(digest, userID); + + AddFieldElement(digest, mECParams.Curve.A); + AddFieldElement(digest, mECParams.Curve.B); + AddFieldElement(digest, mECParams.G.AffineXCoord); + AddFieldElement(digest, mECParams.G.AffineYCoord); + AddFieldElement(digest, pubPoint.AffineXCoord); + AddFieldElement(digest, pubPoint.AffineYCoord); + + return DigestUtilities.DoFinal(digest); + } + + private void AddUserID(IDigest digest, byte[] userID) + { + uint len = (uint)(userID.Length * 8); + + digest.Update((byte)(len >> 8)); + digest.Update((byte)len); + digest.BlockUpdate(userID, 0, userID.Length); + } + + private void AddFieldElement(IDigest digest, ECFieldElement v) + { + byte[] p = v.GetEncoded(); + digest.BlockUpdate(p, 0, p.Length); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/SM2KeyExchange.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/SM2KeyExchange.cs.meta new file mode 100644 index 000000000..77951387b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/SM2KeyExchange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c65b4245b6212194cb13060a735041cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/X25519Agreement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/X25519Agreement.cs new file mode 100644 index 000000000..a8ebaa489 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/X25519Agreement.cs @@ -0,0 +1,42 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement +{ + public sealed class X25519Agreement + : IRawAgreement + { + private X25519PrivateKeyParameters m_privateKey; + + public void Init(ICipherParameters parameters) + { + m_privateKey = (X25519PrivateKeyParameters)parameters; + } + + public int AgreementSize + { + get { return X25519PrivateKeyParameters.SecretSize; } + } + + public void CalculateAgreement(ICipherParameters publicKey, byte[] buf, int off) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + CalculateAgreement(publicKey, buf.AsSpan(off)); +#else + m_privateKey.GenerateSecret((X25519PublicKeyParameters)publicKey, buf, off); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void CalculateAgreement(ICipherParameters publicKey, Span buf) + { + m_privateKey.GenerateSecret((X25519PublicKeyParameters)publicKey, buf); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/X25519Agreement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/X25519Agreement.cs.meta new file mode 100644 index 000000000..defe92d9f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/X25519Agreement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8af8db1542a849649a3f82494db76443 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/X448Agreement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/X448Agreement.cs new file mode 100644 index 000000000..06974b452 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/X448Agreement.cs @@ -0,0 +1,42 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement +{ + public sealed class X448Agreement + : IRawAgreement + { + private X448PrivateKeyParameters m_privateKey; + + public void Init(ICipherParameters parameters) + { + m_privateKey = (X448PrivateKeyParameters)parameters; + } + + public int AgreementSize + { + get { return X448PrivateKeyParameters.SecretSize; } + } + + public void CalculateAgreement(ICipherParameters publicKey, byte[] buf, int off) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + CalculateAgreement(publicKey, buf.AsSpan(off)); +#else + m_privateKey.GenerateSecret((X448PublicKeyParameters)publicKey, buf, off); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void CalculateAgreement(ICipherParameters publicKey, Span buf) + { + m_privateKey.GenerateSecret((X448PublicKeyParameters)publicKey, buf); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/X448Agreement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/X448Agreement.cs.meta new file mode 100644 index 000000000..66e115a4f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/X448Agreement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ddbf1a879e5a42342899c3c269e0297d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake.meta new file mode 100644 index 000000000..617179cf1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 97ce8e71bc258e84e8329127d33eb89e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeParticipant.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeParticipant.cs new file mode 100644 index 000000000..2c8872866 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeParticipant.cs @@ -0,0 +1,459 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.JPake +{ + /// + /// A participant in a Password Authenticated Key Exchange by Juggling (J-PAKE) exchange. + /// + /// The J-PAKE exchange is defined by Feng Hao and Peter Ryan in the paper + /// + /// "Password Authenticated Key Exchange by Juggling, 2008." + /// + /// The J-PAKE protocol is symmetric. + /// There is no notion of a client or server, but rather just two participants. + /// An instance of JPakeParticipant represents one participant, and + /// is the primary interface for executing the exchange. + /// + /// To execute an exchange, construct a JPakeParticipant on each end, + /// and call the following 7 methods + /// (once and only once, in the given order, for each participant, sending messages between them as described): + /// + /// CreateRound1PayloadToSend() - and send the payload to the other participant + /// ValidateRound1PayloadReceived(JPakeRound1Payload) - use the payload received from the other participant + /// CreateRound2PayloadToSend() - and send the payload to the other participant + /// ValidateRound2PayloadReceived(JPakeRound2Payload) - use the payload received from the other participant + /// CalculateKeyingMaterial() + /// CreateRound3PayloadToSend(BigInteger) - and send the payload to the other participant + /// ValidateRound3PayloadReceived(JPakeRound3Payload, BigInteger) - use the payload received from the other participant + /// + /// Each side should derive a session key from the keying material returned by CalculateKeyingMaterial(). + /// The caller is responsible for deriving the session key using a secure key derivation function (KDF). + /// + /// Round 3 is an optional key confirmation process. + /// If you do not execute round 3, then there is no assurance that both participants are using the same key. + /// (i.e. if the participants used different passwords, then their session keys will differ.) + /// + /// If the round 3 validation succeeds, then the keys are guaranteed to be the same on both sides. + /// + /// The symmetric design can easily support the asymmetric cases when one party initiates the communication. + /// e.g. Sometimes the round1 payload and round2 payload may be sent in one pass. + /// Also, in some cases, the key confirmation payload can be sent together with the round2 payload. + /// These are the trivial techniques to optimize the communication. + /// + /// The key confirmation process is implemented as specified in + /// NIST SP 800-56A Revision 1, + /// Section 8.2 Unilateral Key Confirmation for Key Agreement Schemes. + /// + /// This class is stateful and NOT threadsafe. + /// Each instance should only be used for ONE complete J-PAKE exchange + /// (i.e. a new JPakeParticipant should be constructed for each new J-PAKE exchange). + /// + public class JPakeParticipant + { + // Possible internal states. Used for state checking. + public static readonly int STATE_INITIALIZED = 0; + public static readonly int STATE_ROUND_1_CREATED = 10; + public static readonly int STATE_ROUND_1_VALIDATED = 20; + public static readonly int STATE_ROUND_2_CREATED = 30; + public static readonly int STATE_ROUND_2_VALIDATED = 40; + public static readonly int STATE_KEY_CALCULATED = 50; + public static readonly int STATE_ROUND_3_CREATED = 60; + public static readonly int STATE_ROUND_3_VALIDATED = 70; + + // Unique identifier of this participant. + // The two participants in the exchange must NOT share the same id. + private string participantId; + + // Shared secret. This only contains the secret between construction + // and the call to CalculateKeyingMaterial(). + // + // i.e. When CalculateKeyingMaterial() is called, this buffer overwritten with 0's, + // and the field is set to null. + private char[] password; + + // Digest to use during calculations. + private IDigest digest; + + // Source of secure random data. + private readonly SecureRandom random; + + private readonly BigInteger p; + private readonly BigInteger q; + private readonly BigInteger g; + + // The participantId of the other participant in this exchange. + private string partnerParticipantId; + + // Alice's x1 or Bob's x3. + private BigInteger x1; + // Alice's x2 or Bob's x4. + private BigInteger x2; + // Alice's g^x1 or Bob's g^x3. + private BigInteger gx1; + // Alice's g^x2 or Bob's g^x4. + private BigInteger gx2; + // Alice's g^x3 or Bob's g^x1. + private BigInteger gx3; + // Alice's g^x4 or Bob's g^x2. + private BigInteger gx4; + // Alice's B or Bob's A. + private BigInteger b; + + // The current state. + // See the STATE_* constants for possible values. + private int state; + + /// + /// Convenience constructor for a new JPakeParticipant that uses + /// the JPakePrimeOrderGroups#NIST_3072 prime order group, + /// a SHA-256 digest, and a default SecureRandom implementation. + /// + /// After construction, the State state will be STATE_INITIALIZED. + /// + /// Throws NullReferenceException if any argument is null. Throws + /// ArgumentException if password is empty. + /// + /// Unique identifier of this participant. + /// The two participants in the exchange must NOT share the same id. + /// Shared secret. + /// A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + /// Caller should clear the input password as soon as possible. + public JPakeParticipant(string participantId, char[] password) + : this(participantId, password, JPakePrimeOrderGroups.NIST_3072) { } + + /// + /// Convenience constructor for a new JPakeParticipant that uses + /// a SHA-256 digest, and a default SecureRandom implementation. + /// + /// After construction, the State state will be STATE_INITIALIZED. + /// + /// Throws NullReferenceException if any argument is null. Throws + /// ArgumentException if password is empty. + /// + /// Unique identifier of this participant. + /// The two participants in the exchange must NOT share the same id. + /// Shared secret. + /// A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + /// Caller should clear the input password as soon as possible. + /// Prime order group. See JPakePrimeOrderGroups for standard groups. + public JPakeParticipant(string participantId, char[] password, JPakePrimeOrderGroup group) + : this(participantId, password, group, new Sha256Digest(), CryptoServicesRegistrar.GetSecureRandom()) { } + + + /// + /// Constructor for a new JPakeParticipant. + /// + /// After construction, the State state will be STATE_INITIALIZED. + /// + /// Throws NullReferenceException if any argument is null. Throws + /// ArgumentException if password is empty. + /// + /// Unique identifier of this participant. + /// The two participants in the exchange must NOT share the same id. + /// Shared secret. + /// A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + /// Caller should clear the input password as soon as possible. + /// Prime order group. See JPakePrimeOrderGroups for standard groups. + /// Digest to use during zero knowledge proofs and key confirmation + /// (SHA-256 or stronger preferred). + /// Source of secure random data for x1 and x2, and for the zero knowledge proofs. + public JPakeParticipant(string participantId, char[] password, JPakePrimeOrderGroup group, IDigest digest, + SecureRandom random) + { + JPakeUtilities.ValidateNotNull(participantId, "participantId"); + JPakeUtilities.ValidateNotNull(password, "password"); + JPakeUtilities.ValidateNotNull(group, "p"); + JPakeUtilities.ValidateNotNull(digest, "digest"); + JPakeUtilities.ValidateNotNull(random, "random"); + + if (password.Length == 0) + throw new ArgumentException("Password must not be empty."); + + this.participantId = participantId; + + // Create a defensive copy so as to fully encapsulate the password. + // + // This array will contain the password for the lifetime of this + // participant BEFORE CalculateKeyingMaterial() is called. + // + // i.e. When CalculateKeyingMaterial() is called, the array will be cleared + // in order to remove the password from memory. + // + // The caller is responsible for clearing the original password array + // given as input to this constructor. + this.password = new char[password.Length]; + Array.Copy(password, this.password, password.Length); + + this.p = group.P; + this.q = group.Q; + this.g = group.G; + + this.digest = digest; + this.random = random; + + this.state = STATE_INITIALIZED; + } + + /// + /// Gets the current state of this participant. + /// See the STATE_* constants for possible values. + /// + public virtual int State + { + get { return state; } + } + + + /// + /// Creates and returns the payload to send to the other participant during round 1. + /// + /// After execution, the State state} will be STATE_ROUND_1_CREATED}. + /// + public virtual JPakeRound1Payload CreateRound1PayloadToSend() + { + if (this.state >= STATE_ROUND_1_CREATED) + throw new InvalidOperationException("Round 1 payload already created for " + this.participantId); + + this.x1 = JPakeUtilities.GenerateX1(q, random); + this.x2 = JPakeUtilities.GenerateX2(q, random); + + this.gx1 = JPakeUtilities.CalculateGx(p, g, x1); + this.gx2 = JPakeUtilities.CalculateGx(p, g, x2); + BigInteger[] knowledgeProofForX1 = JPakeUtilities.CalculateZeroKnowledgeProof(p, q, g, gx1, x1, participantId, digest, random); + BigInteger[] knowledgeProofForX2 = JPakeUtilities.CalculateZeroKnowledgeProof(p, q, g, gx2, x2, participantId, digest, random); + + this.state = STATE_ROUND_1_CREATED; + + return new JPakeRound1Payload(participantId, gx1, gx2, knowledgeProofForX1, knowledgeProofForX2); + } + + /// + /// Validates the payload received from the other participant during round 1. + /// + /// Must be called prior to CreateRound2PayloadToSend(). + /// + /// After execution, the State state will be STATE_ROUND_1_VALIDATED. + /// + /// Throws CryptoException if validation fails. Throws InvalidOperationException + /// if called multiple times. + /// + public virtual void ValidateRound1PayloadReceived(JPakeRound1Payload round1PayloadReceived) + { + if (this.state >= STATE_ROUND_1_VALIDATED) + throw new InvalidOperationException("Validation already attempted for round 1 payload for " + this.participantId); + + this.partnerParticipantId = round1PayloadReceived.ParticipantId; + this.gx3 = round1PayloadReceived.Gx1; + this.gx4 = round1PayloadReceived.Gx2; + + BigInteger[] knowledgeProofForX3 = round1PayloadReceived.KnowledgeProofForX1; + BigInteger[] knowledgeProofForX4 = round1PayloadReceived.KnowledgeProofForX2; + + JPakeUtilities.ValidateParticipantIdsDiffer(participantId, round1PayloadReceived.ParticipantId); + JPakeUtilities.ValidateGx4(gx4); + JPakeUtilities.ValidateZeroKnowledgeProof(p, q, g, gx3, knowledgeProofForX3, round1PayloadReceived.ParticipantId, digest); + JPakeUtilities.ValidateZeroKnowledgeProof(p, q, g, gx4, knowledgeProofForX4, round1PayloadReceived.ParticipantId, digest); + this.state = STATE_ROUND_1_VALIDATED; + } + + /// + /// Creates and returns the payload to send to the other participant during round 2. + /// + /// ValidateRound1PayloadReceived(JPakeRound1Payload) must be called prior to this method. + /// + /// After execution, the State state will be STATE_ROUND_2_CREATED. + /// + /// Throws InvalidOperationException if called prior to ValidateRound1PayloadReceived(JPakeRound1Payload), or multiple times + /// + public virtual JPakeRound2Payload CreateRound2PayloadToSend() + { + if (this.state >= STATE_ROUND_2_CREATED) + throw new InvalidOperationException("Round 2 payload already created for " + this.participantId); + if (this.state < STATE_ROUND_1_VALIDATED) + throw new InvalidOperationException("Round 1 payload must be validated prior to creating round 2 payload for " + this.participantId); + + BigInteger gA = JPakeUtilities.CalculateGA(p, gx1, gx3, gx4); + BigInteger s = JPakeUtilities.CalculateS(password); + BigInteger x2s = JPakeUtilities.CalculateX2s(q, x2, s); + BigInteger A = JPakeUtilities.CalculateA(p, q, gA, x2s); + BigInteger[] knowledgeProofForX2s = JPakeUtilities.CalculateZeroKnowledgeProof(p, q, gA, A, x2s, participantId, digest, random); + + this.state = STATE_ROUND_2_CREATED; + + return new JPakeRound2Payload(participantId, A, knowledgeProofForX2s); + } + + /// + /// Validates the payload received from the other participant during round 2. + /// Note that this DOES NOT detect a non-common password. + /// The only indication of a non-common password is through derivation + /// of different keys (which can be detected explicitly by executing round 3 and round 4) + /// + /// Must be called prior to CalculateKeyingMaterial(). + /// + /// After execution, the State state will be STATE_ROUND_2_VALIDATED. + /// + /// Throws CryptoException if validation fails. Throws + /// InvalidOperationException if called prior to ValidateRound1PayloadReceived(JPakeRound1Payload), or multiple times + /// + public virtual void ValidateRound2PayloadReceived(JPakeRound2Payload round2PayloadReceived) + { + if (this.state >= STATE_ROUND_2_VALIDATED) + throw new InvalidOperationException("Validation already attempted for round 2 payload for " + this.participantId); + if (this.state < STATE_ROUND_1_VALIDATED) + throw new InvalidOperationException("Round 1 payload must be validated prior to validation round 2 payload for " + this.participantId); + + BigInteger gB = JPakeUtilities.CalculateGA(p, gx3, gx1, gx2); + this.b = round2PayloadReceived.A; + BigInteger[] knowledgeProofForX4s = round2PayloadReceived.KnowledgeProofForX2s; + + JPakeUtilities.ValidateParticipantIdsDiffer(participantId, round2PayloadReceived.ParticipantId); + JPakeUtilities.ValidateParticipantIdsEqual(this.partnerParticipantId, round2PayloadReceived.ParticipantId); + JPakeUtilities.ValidateGa(gB); + JPakeUtilities.ValidateZeroKnowledgeProof(p, q, gB, b, knowledgeProofForX4s, round2PayloadReceived.ParticipantId, digest); + + this.state = STATE_ROUND_2_VALIDATED; + } + + /// + /// Calculates and returns the key material. + /// A session key must be derived from this key material using a secure key derivation function (KDF). + /// The KDF used to derive the key is handled externally (i.e. not by JPakeParticipant). + /// + /// The keying material will be identical for each participant if and only if + /// each participant's password is the same. i.e. If the participants do not + /// share the same password, then each participant will derive a different key. + /// Therefore, if you immediately start using a key derived from + /// the keying material, then you must handle detection of incorrect keys. + /// If you want to handle this detection explicitly, you can optionally perform + /// rounds 3 and 4. See JPakeParticipant for details on how to execute + /// rounds 3 and 4. + /// + /// The keying material will be in the range [0, p-1]. + /// + /// ValidateRound2PayloadReceived(JPakeRound2Payload) must be called prior to this method. + /// + /// As a side effect, the internal password array is cleared, since it is no longer needed. + /// + /// After execution, the State state will be STATE_KEY_CALCULATED. + /// + /// Throws InvalidOperationException if called prior to ValidateRound2PayloadReceived(JPakeRound2Payload), + /// or if called multiple times. + /// + public virtual BigInteger CalculateKeyingMaterial() + { + if (this.state >= STATE_KEY_CALCULATED) + throw new InvalidOperationException("Key already calculated for " + participantId); + if (this.state < STATE_ROUND_2_VALIDATED) + throw new InvalidOperationException("Round 2 payload must be validated prior to creating key for " + participantId); + + BigInteger s = JPakeUtilities.CalculateS(password); + + // Clear the password array from memory, since we don't need it anymore. + // Also set the field to null as a flag to indicate that the key has already been calculated. + Array.Clear(password, 0, password.Length); + this.password = null; + + BigInteger keyingMaterial = JPakeUtilities.CalculateKeyingMaterial(p, q, gx4, x2, s, b); + + // Clear the ephemeral private key fields as well. + // Note that we're relying on the garbage collector to do its job to clean these up. + // The old objects will hang around in memory until the garbage collector destroys them. + // + // If the ephemeral private keys x1 and x2 are leaked, + // the attacker might be able to brute-force the password. + this.x1 = null; + this.x2 = null; + this.b = null; + + // Do not clear gx* yet, since those are needed by round 3. + + this.state = STATE_KEY_CALCULATED; + + return keyingMaterial; + } + + /// + /// Creates and returns the payload to send to the other participant during round 3. + /// + /// See JPakeParticipant for more details on round 3. + /// + /// After execution, the State state} will be STATE_ROUND_3_CREATED. + /// Throws InvalidOperationException if called prior to CalculateKeyingMaterial, or multiple + /// times. + /// + /// The keying material as returned from CalculateKeyingMaterial(). + public virtual JPakeRound3Payload CreateRound3PayloadToSend(BigInteger keyingMaterial) + { + if (this.state >= STATE_ROUND_3_CREATED) + throw new InvalidOperationException("Round 3 payload already created for " + this.participantId); + if (this.state < STATE_KEY_CALCULATED) + throw new InvalidOperationException("Keying material must be calculated prior to creating round 3 payload for " + this.participantId); + + BigInteger macTag = JPakeUtilities.CalculateMacTag( + this.participantId, + this.partnerParticipantId, + this.gx1, + this.gx2, + this.gx3, + this.gx4, + keyingMaterial, + this.digest); + + this.state = STATE_ROUND_3_CREATED; + + return new JPakeRound3Payload(participantId, macTag); + } + + /// + /// Validates the payload received from the other participant during round 3. + /// + /// See JPakeParticipant for more details on round 3. + /// + /// After execution, the State state will be STATE_ROUND_3_VALIDATED. + /// + /// Throws CryptoException if validation fails. Throws InvalidOperationException if called prior to + /// CalculateKeyingMaterial or multiple times + /// + /// The round 3 payload received from the other participant. + /// The keying material as returned from CalculateKeyingMaterial(). + public virtual void ValidateRound3PayloadReceived(JPakeRound3Payload round3PayloadReceived, BigInteger keyingMaterial) + { + if (this.state >= STATE_ROUND_3_VALIDATED) + throw new InvalidOperationException("Validation already attempted for round 3 payload for " + this.participantId); + if (this.state < STATE_KEY_CALCULATED) + throw new InvalidOperationException("Keying material must be calculated prior to validating round 3 payload for " + this.participantId); + + JPakeUtilities.ValidateParticipantIdsDiffer(participantId, round3PayloadReceived.ParticipantId); + JPakeUtilities.ValidateParticipantIdsEqual(this.partnerParticipantId, round3PayloadReceived.ParticipantId); + + JPakeUtilities.ValidateMacTag( + this.participantId, + this.partnerParticipantId, + this.gx1, + this.gx2, + this.gx3, + this.gx4, + keyingMaterial, + this.digest, + round3PayloadReceived.MacTag); + + // Clear the rest of the fields. + this.gx1 = null; + this.gx2 = null; + this.gx3 = null; + this.gx4 = null; + + this.state = STATE_ROUND_3_VALIDATED; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeParticipant.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeParticipant.cs.meta new file mode 100644 index 000000000..6e8d86e37 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeParticipant.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8a86105cd9524ff40925c8a6fa7cb124 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakePrimeOrderGroup.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakePrimeOrderGroup.cs new file mode 100644 index 000000000..42107e13f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakePrimeOrderGroup.cs @@ -0,0 +1,107 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.JPake +{ + /// + /// A pre-computed prime order group for use during a J-PAKE exchange. + /// + /// Typically a Schnorr group is used. In general, J-PAKE can use any prime order group + /// that is suitable for public key cryptography, including elliptic curve cryptography. + /// + /// See JPakePrimeOrderGroups for convenient standard groups. + /// + /// NIST publishes + /// many groups that can be used for the desired level of security. + /// + public class JPakePrimeOrderGroup + { + private readonly BigInteger p; + private readonly BigInteger q; + private readonly BigInteger g; + + /// + /// Constructs a new JPakePrimeOrderGroup. + /// + /// In general, you should use one of the pre-approved groups from + /// JPakePrimeOrderGroups, rather than manually constructing one. + /// + /// The following basic checks are performed: + /// + /// p-1 must be evenly divisible by q + /// g must be in [2, p-1] + /// g^q mod p must equal 1 + /// p must be prime (within reasonably certainty) + /// q must be prime (within reasonably certainty) + /// + /// The prime checks are performed using BigInteger#isProbablePrime(int), + /// and are therefore subject to the same probability guarantees. + /// + /// These checks prevent trivial mistakes. + /// However, due to the small uncertainties if p and q are not prime, + /// advanced attacks are not prevented. + /// Use it at your own risk. + /// + /// Throws NullReferenceException if any argument is null. Throws + /// InvalidOperationException is any of the above validations fail. + /// + public JPakePrimeOrderGroup(BigInteger p, BigInteger q, BigInteger g) + : this(p, q, g, false) + { + // Don't skip the checks on user-specified groups. + } + + /// + /// Constructor used by the pre-approved groups in JPakePrimeOrderGroups. + /// These pre-approved groups can avoid the expensive checks. + /// User-specified groups should not use this constructor. + /// + public JPakePrimeOrderGroup(BigInteger p, BigInteger q, BigInteger g, bool skipChecks) + { + JPakeUtilities.ValidateNotNull(p, "p"); + JPakeUtilities.ValidateNotNull(q, "q"); + JPakeUtilities.ValidateNotNull(g, "g"); + + if (!skipChecks) + { + if (!p.Subtract(JPakeUtilities.One).Mod(q).Equals(JPakeUtilities.Zero)) + throw new ArgumentException("p-1 must be evenly divisible by q"); + if (g.CompareTo(BigInteger.Two) == -1 || g.CompareTo(p.Subtract(JPakeUtilities.One)) == 1) + throw new ArgumentException("g must be in [2, p-1]"); + if (!g.ModPow(q, p).Equals(JPakeUtilities.One)) + throw new ArgumentException("g^q mod p must equal 1"); + + // Note these checks do not guarantee that p and q are prime. + // We just have reasonable certainty that they are prime. + if (!p.IsProbablePrime(20)) + throw new ArgumentException("p must be prime"); + if (!q.IsProbablePrime(20)) + throw new ArgumentException("q must be prime"); + } + + this.p = p; + this.q = q; + this.g = g; + } + + public virtual BigInteger P + { + get { return p; } + } + + public virtual BigInteger Q + { + get { return q; } + } + + public virtual BigInteger G + { + get { return g; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakePrimeOrderGroup.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakePrimeOrderGroup.cs.meta new file mode 100644 index 000000000..5f78d44a5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakePrimeOrderGroup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 815a3d26dbbb4e047a319b26542acdb1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakePrimeOrderGroups.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakePrimeOrderGroups.cs new file mode 100644 index 000000000..1d1a92f21 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakePrimeOrderGroups.cs @@ -0,0 +1,112 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.JPake +{ + /// + /// Standard pre-computed prime order groups for use by J-PAKE. + /// (J-PAKE can use pre-computed prime order groups, same as DSA and Diffie-Hellman.) + ///

+ /// This class contains some convenient constants for use as input for + /// constructing {@link JPAKEParticipant}s. + ///

+ /// The prime order groups below are taken from Sun's JDK JavaDoc (docs/guide/security/CryptoSpec.html#AppB), + /// and from the prime order groups + /// published by NIST. + ///

+ public class JPakePrimeOrderGroups + { + /// + /// From Sun's JDK JavaDoc (docs/guide/security/CryptoSpec.html#AppB) + /// 1024-bit p, 160-bit q and 1024-bit g for 80-bit security. + /// + public static readonly JPakePrimeOrderGroup SUN_JCE_1024 = new JPakePrimeOrderGroup( + // p + new BigInteger( + "fd7f53811d75122952df4a9c2eece4e7f611b7523cef4400c31e3f80b6512669" + + "455d402251fb593d8d58fabfc5f5ba30f6cb9b556cd7813b801d346ff26660b7" + + "6b9950a5a49f9fe8047b1022c24fbba9d7feb7c61bf83b57e7c6a8a6150f04fb" + + "83f6d3c51ec3023554135a169132f675f3ae2b61d72aeff22203199dd14801c7", 16), + // q + new BigInteger("9760508f15230bccb292b982a2eb840bf0581cf5", 16), + // g + new BigInteger( + "f7e1a085d69b3ddecbbcab5c36b857b97994afbbfa3aea82f9574c0b3d078267" + + "5159578ebad4594fe67107108180b449167123e84c281613b7cf09328cc8a6e1" + + "3c167a8b547c8d28e0a3ae1e2bb3a675916ea37f0bfa213562f1fb627a01243b" + + "cca4f1bea8519089a883dfe15ae59f06928b665e807b552564014c3bfecf492a", 16), + true + ); + + /// + /// From NIST. + /// 2048-bit p, 224-bit q and 2048-bit g for 112-bit security. + /// + public static readonly JPakePrimeOrderGroup NIST_2048 = new JPakePrimeOrderGroup( + // p + new BigInteger( + "C196BA05AC29E1F9C3C72D56DFFC6154A033F1477AC88EC37F09BE6C5BB95F51" + + "C296DD20D1A28A067CCC4D4316A4BD1DCA55ED1066D438C35AEBAABF57E7DAE4" + + "28782A95ECA1C143DB701FD48533A3C18F0FE23557EA7AE619ECACC7E0B51652" + + "A8776D02A425567DED36EABD90CA33A1E8D988F0BBB92D02D1D20290113BB562" + + "CE1FC856EEB7CDD92D33EEA6F410859B179E7E789A8F75F645FAE2E136D252BF" + + "FAFF89528945C1ABE705A38DBC2D364AADE99BE0D0AAD82E5320121496DC65B3" + + "930E38047294FF877831A16D5228418DE8AB275D7D75651CEFED65F78AFC3EA7" + + "FE4D79B35F62A0402A1117599ADAC7B269A59F353CF450E6982D3B1702D9CA83", 16), + // q + new BigInteger("90EAF4D1AF0708B1B612FF35E0A2997EB9E9D263C9CE659528945C0D", 16), + // g + new BigInteger( + "A59A749A11242C58C894E9E5A91804E8FA0AC64B56288F8D47D51B1EDC4D6544" + + "4FECA0111D78F35FC9FDD4CB1F1B79A3BA9CBEE83A3F811012503C8117F98E50" + + "48B089E387AF6949BF8784EBD9EF45876F2E6A5A495BE64B6E770409494B7FEE" + + "1DBB1E4B2BC2A53D4F893D418B7159592E4FFFDF6969E91D770DAEBD0B5CB14C" + + "00AD68EC7DC1E5745EA55C706C4A1C5C88964E34D09DEB753AD418C1AD0F4FDF" + + "D049A955E5D78491C0B7A2F1575A008CCD727AB376DB6E695515B05BD412F5B8" + + "C2F4C77EE10DA48ABD53F5DD498927EE7B692BBBCDA2FB23A516C5B4533D7398" + + "0B2A3B60E384ED200AE21B40D273651AD6060C13D97FD69AA13C5611A51B9085", 16), + true + ); + + /// + /// From NIST. + /// 3072-bit p, 256-bit q and 3072-bit g for 128-bit security. + /// + public static readonly JPakePrimeOrderGroup NIST_3072 = new JPakePrimeOrderGroup( + // p + new BigInteger( + "90066455B5CFC38F9CAA4A48B4281F292C260FEEF01FD61037E56258A7795A1C" + + "7AD46076982CE6BB956936C6AB4DCFE05E6784586940CA544B9B2140E1EB523F" + + "009D20A7E7880E4E5BFA690F1B9004A27811CD9904AF70420EEFD6EA11EF7DA1" + + "29F58835FF56B89FAA637BC9AC2EFAAB903402229F491D8D3485261CD068699B" + + "6BA58A1DDBBEF6DB51E8FE34E8A78E542D7BA351C21EA8D8F1D29F5D5D159394" + + "87E27F4416B0CA632C59EFD1B1EB66511A5A0FBF615B766C5862D0BD8A3FE7A0" + + "E0DA0FB2FE1FCB19E8F9996A8EA0FCCDE538175238FC8B0EE6F29AF7F642773E" + + "BE8CD5402415A01451A840476B2FCEB0E388D30D4B376C37FE401C2A2C2F941D" + + "AD179C540C1C8CE030D460C4D983BE9AB0B20F69144C1AE13F9383EA1C08504F" + + "B0BF321503EFE43488310DD8DC77EC5B8349B8BFE97C2C560EA878DE87C11E3D" + + "597F1FEA742D73EEC7F37BE43949EF1A0D15C3F3E3FC0A8335617055AC91328E" + + "C22B50FC15B941D3D1624CD88BC25F3E941FDDC6200689581BFEC416B4B2CB73", 16), + // q + new BigInteger("CFA0478A54717B08CE64805B76E5B14249A77A4838469DF7F7DC987EFCCFB11D", 16), + // g + new BigInteger( + "5E5CBA992E0A680D885EB903AEA78E4A45A469103D448EDE3B7ACCC54D521E37" + + "F84A4BDD5B06B0970CC2D2BBB715F7B82846F9A0C393914C792E6A923E2117AB" + + "805276A975AADB5261D91673EA9AAFFEECBFA6183DFCB5D3B7332AA19275AFA1" + + "F8EC0B60FB6F66CC23AE4870791D5982AAD1AA9485FD8F4A60126FEB2CF05DB8" + + "A7F0F09B3397F3937F2E90B9E5B9C9B6EFEF642BC48351C46FB171B9BFA9EF17" + + "A961CE96C7E7A7CC3D3D03DFAD1078BA21DA425198F07D2481622BCE45969D9C" + + "4D6063D72AB7A0F08B2F49A7CC6AF335E08C4720E31476B67299E231F8BD90B3" + + "9AC3AE3BE0C6B6CACEF8289A2E2873D58E51E029CAFBD55E6841489AB66B5B4B" + + "9BA6E2F784660896AFF387D92844CCB8B69475496DE19DA2E58259B090489AC8" + + "E62363CDF82CFD8EF2A427ABCD65750B506F56DDE3B988567A88126B914D7828" + + "E2B63A6D7ED0747EC59E0E0A23CE7D8A74C1D2C2A7AFB6A29799620F00E11C33" + + "787F7DED3B30E1A22D09F1FBDA1ABBBFBF25CAE05A13F812E34563F99410E73B", 16), + true + ); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakePrimeOrderGroups.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakePrimeOrderGroups.cs.meta new file mode 100644 index 000000000..fac13fdfb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakePrimeOrderGroups.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 13d01b3239aa0c7408aecd78c5976f60 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeRound1Payload.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeRound1Payload.cs new file mode 100644 index 000000000..38c31fba6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeRound1Payload.cs @@ -0,0 +1,105 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.JPake +{ + /// + /// The payload sent/received during the first round of a J-PAKE exchange. + /// + /// Each JPAKEParticipant creates and sends an instance of this payload to + /// the other. The payload to send should be created via + /// JPAKEParticipant.CreateRound1PayloadToSend(). + /// + /// Each participant must also validate the payload received from the other. + /// The received payload should be validated via + /// JPAKEParticipant.ValidateRound1PayloadReceived(JPakeRound1Payload). + /// + public class JPakeRound1Payload + { + /// + /// The id of the JPAKEParticipant who created/sent this payload. + /// + private readonly string participantId; + + /// + /// The value of g^x1 + /// + private readonly BigInteger gx1; + + /// + /// The value of g^x2 + /// + private readonly BigInteger gx2; + + /// + /// The zero knowledge proof for x1. + /// + /// This is a two element array, containing {g^v, r} for x1. + /// + private readonly BigInteger[] knowledgeProofForX1; + + /// + /// The zero knowledge proof for x2. + /// + /// This is a two element array, containing {g^v, r} for x2. + /// + private readonly BigInteger[] knowledgeProofForX2; + + public JPakeRound1Payload(string participantId, BigInteger gx1, BigInteger gx2, BigInteger[] knowledgeProofForX1, BigInteger[] knowledgeProofForX2) + { + JPakeUtilities.ValidateNotNull(participantId, "participantId"); + JPakeUtilities.ValidateNotNull(gx1, "gx1"); + JPakeUtilities.ValidateNotNull(gx2, "gx2"); + JPakeUtilities.ValidateNotNull(knowledgeProofForX1, "knowledgeProofForX1"); + JPakeUtilities.ValidateNotNull(knowledgeProofForX2, "knowledgeProofForX2"); + + this.participantId = participantId; + this.gx1 = gx1; + this.gx2 = gx2; + this.knowledgeProofForX1 = new BigInteger[knowledgeProofForX1.Length]; + Array.Copy(knowledgeProofForX1, this.knowledgeProofForX1, knowledgeProofForX1.Length); + this.knowledgeProofForX2 = new BigInteger[knowledgeProofForX2.Length]; + Array.Copy(knowledgeProofForX2, this.knowledgeProofForX2, knowledgeProofForX2.Length); + } + + public virtual string ParticipantId + { + get { return participantId; } + } + + public virtual BigInteger Gx1 + { + get { return gx1; } + } + + public virtual BigInteger Gx2 + { + get { return gx2; } + } + + public virtual BigInteger[] KnowledgeProofForX1 + { + get + { + BigInteger[] kp = new BigInteger[knowledgeProofForX1.Length]; + Array.Copy(knowledgeProofForX1, kp, knowledgeProofForX1.Length); + return kp; + } + } + + public virtual BigInteger[] KnowledgeProofForX2 + { + get + { + BigInteger[] kp = new BigInteger[knowledgeProofForX2.Length]; + Array.Copy(knowledgeProofForX2, kp, knowledgeProofForX2.Length); + return kp; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeRound1Payload.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeRound1Payload.cs.meta new file mode 100644 index 000000000..4bd2b84da --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeRound1Payload.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7fc56df6fc654ef4bb43c5563964146f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeRound2Payload.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeRound2Payload.cs new file mode 100644 index 000000000..5e900653f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeRound2Payload.cs @@ -0,0 +1,76 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.JPake +{ + /// + /// The payload sent/received during the second round of a J-PAKE exchange. + /// + /// Each JPAKEParticipant creates and sends an instance + /// of this payload to the other JPAKEParticipant. + /// The payload to send should be created via + /// JPAKEParticipant#createRound2PayloadToSend() + /// + /// Each JPAKEParticipant must also validate the payload + /// received from the other JPAKEParticipant. + /// The received payload should be validated via + /// JPAKEParticipant#validateRound2PayloadReceived(JPakeRound2Payload) + /// + public class JPakeRound2Payload + { + /// + /// The id of the JPAKEParticipant who created/sent this payload. + /// + private readonly string participantId; + + /// + /// The value of A, as computed during round 2. + /// + private readonly BigInteger a; + + /// + /// The zero knowledge proof for x2 * s. + /// + /// This is a two element array, containing {g^v, r} for x2 * s. + /// + private readonly BigInteger[] knowledgeProofForX2s; + + public JPakeRound2Payload(string participantId, BigInteger a, BigInteger[] knowledgeProofForX2s) + { + JPakeUtilities.ValidateNotNull(participantId, "participantId"); + JPakeUtilities.ValidateNotNull(a, "a"); + JPakeUtilities.ValidateNotNull(knowledgeProofForX2s, "knowledgeProofForX2s"); + + this.participantId = participantId; + this.a = a; + this.knowledgeProofForX2s = new BigInteger[knowledgeProofForX2s.Length]; + knowledgeProofForX2s.CopyTo(this.knowledgeProofForX2s, 0); + } + + public virtual string ParticipantId + { + get { return participantId; } + } + + public virtual BigInteger A + { + get { return a; } + } + + public virtual BigInteger[] KnowledgeProofForX2s + { + get + { + BigInteger[] kp = new BigInteger[knowledgeProofForX2s.Length]; + Array.Copy(knowledgeProofForX2s, kp, knowledgeProofForX2s.Length); + return kp; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeRound2Payload.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeRound2Payload.cs.meta new file mode 100644 index 000000000..f5e1f9a96 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeRound2Payload.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1d38ef449df8e44a932211b157b405c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeRound3Payload.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeRound3Payload.cs new file mode 100644 index 000000000..e98a53a77 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeRound3Payload.cs @@ -0,0 +1,55 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.JPake +{ + /// + /// The payload sent/received during the optional third round of a J-PAKE exchange, + /// which is for explicit key confirmation. + /// + /// Each JPAKEParticipant creates and sends an instance + /// of this payload to the other JPAKEParticipant. + /// The payload to send should be created via + /// JPAKEParticipant#createRound3PayloadToSend(BigInteger) + /// + /// Eeach JPAKEParticipant must also validate the payload + /// received from the other JPAKEParticipant. + /// The received payload should be validated via + /// JPAKEParticipant#validateRound3PayloadReceived(JPakeRound3Payload, BigInteger) + /// + public class JPakeRound3Payload + { + /// + /// The id of the {@link JPAKEParticipant} who created/sent this payload. + /// + private readonly string participantId; + + /// + /// The value of MacTag, as computed by round 3. + /// + /// See JPAKEUtil#calculateMacTag(string, string, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, org.bouncycastle.crypto.Digest) + /// + private readonly BigInteger macTag; + + public JPakeRound3Payload(string participantId, BigInteger magTag) + { + this.participantId = participantId; + this.macTag = magTag; + } + + public virtual string ParticipantId + { + get { return participantId; } + } + + public virtual BigInteger MacTag + { + get { return macTag; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeRound3Payload.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeRound3Payload.cs.meta new file mode 100644 index 000000000..b7fb80400 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeRound3Payload.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 569e3cdfa1c67e04090ea2d99c91f427 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeUtilities.cs new file mode 100644 index 000000000..d2c84c314 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeUtilities.cs @@ -0,0 +1,394 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.JPake +{ + /// + /// Primitives needed for a J-PAKE exchange. + /// + /// The recommended way to perform a J-PAKE exchange is by using + /// two JPAKEParticipants. Internally, those participants + /// call these primitive operations in JPakeUtilities. + /// + /// The primitives, however, can be used without a JPAKEParticipant if needed. + /// + public abstract class JPakeUtilities + { + public static readonly BigInteger Zero = BigInteger.Zero; + public static readonly BigInteger One = BigInteger.One; + + /// + /// Return a value that can be used as x1 or x3 during round 1. + /// The returned value is a random value in the range [0, q-1]. + /// + public static BigInteger GenerateX1(BigInteger q, SecureRandom random) + { + BigInteger min = Zero; + BigInteger max = q.Subtract(One); + return BigIntegers.CreateRandomInRange(min, max, random); + } + + /// + /// Return a value that can be used as x2 or x4 during round 1. + /// The returned value is a random value in the range [1, q-1]. + /// + public static BigInteger GenerateX2(BigInteger q, SecureRandom random) + { + BigInteger min = One; + BigInteger max = q.Subtract(One); + return BigIntegers.CreateRandomInRange(min, max, random); + } + + /// + /// Converts the given password to a BigInteger + /// for use in arithmetic calculations. + /// + public static BigInteger CalculateS(char[] password) + { + return new BigInteger(Encoding.UTF8.GetBytes(password)); + } + + /// + /// Calculate g^x mod p as done in round 1. + /// + public static BigInteger CalculateGx(BigInteger p, BigInteger g, BigInteger x) + { + return g.ModPow(x, p); + } + + /// + /// Calculate ga as done in round 2. + /// + public static BigInteger CalculateGA(BigInteger p, BigInteger gx1, BigInteger gx3, BigInteger gx4) + { + // ga = g^(x1+x3+x4) = g^x1 * g^x3 * g^x4 + return gx1.Multiply(gx3).Multiply(gx4).Mod(p); + } + + /// + /// Calculate x2 * s as done in round 2. + /// + public static BigInteger CalculateX2s(BigInteger q, BigInteger x2, BigInteger s) + { + return x2.Multiply(s).Mod(q); + } + + /// + /// Calculate A as done in round 2. + /// + public static BigInteger CalculateA(BigInteger p, BigInteger q, BigInteger gA, BigInteger x2s) + { + // A = ga^(x*s) + return gA.ModPow(x2s, p); + } + + /// + /// Calculate a zero knowledge proof of x using Schnorr's signature. + /// The returned array has two elements {g^v, r = v-x*h} for x. + /// + public static BigInteger[] CalculateZeroKnowledgeProof(BigInteger p, BigInteger q, BigInteger g, + BigInteger gx, BigInteger x, string participantId, IDigest digest, SecureRandom random) + { + /* Generate a random v, and compute g^v */ + BigInteger vMin = Zero; + BigInteger vMax = q.Subtract(One); + BigInteger v = BigIntegers.CreateRandomInRange(vMin, vMax, random); + + BigInteger gv = g.ModPow(v, p); + BigInteger h = CalculateHashForZeroKnowledgeProof(g, gv, gx, participantId, digest); // h + + return new BigInteger[] + { + gv, + v.Subtract(x.Multiply(h)).Mod(q) // r = v-x*h + }; + } + + private static BigInteger CalculateHashForZeroKnowledgeProof(BigInteger g, BigInteger gr, BigInteger gx, + string participantId, IDigest digest) + { + digest.Reset(); + + UpdateDigestIncludingSize(digest, g); + + UpdateDigestIncludingSize(digest, gr); + + UpdateDigestIncludingSize(digest, gx); + + UpdateDigestIncludingSize(digest, participantId); + + byte[] output = DigestUtilities.DoFinal(digest); + + return new BigInteger(output); + } + + /// + /// Validates that g^x4 is not 1. + /// throws CryptoException if g^x4 is 1 + /// + public static void ValidateGx4(BigInteger gx4) + { + if (gx4.Equals(One)) + throw new CryptoException("g^x validation failed. g^x should not be 1."); + } + + /// + /// Validates that ga is not 1. + /// + /// As described by Feng Hao... + /// Alice could simply check ga != 1 to ensure it is a generator. + /// In fact, as we will explain in Section 3, (x1 + x3 + x4 ) is random over Zq even in the face of active attacks. + /// Hence, the probability for ga = 1 is extremely small - on the order of 2^160 for 160-bit q. + /// + /// throws CryptoException if ga is 1 + /// + public static void ValidateGa(BigInteger ga) + { + if (ga.Equals(One)) + throw new CryptoException("ga is equal to 1. It should not be. The chances of this happening are on the order of 2^160 for a 160-bit q. Try again."); + } + + /// + /// Validates the zero knowledge proof (generated by + /// calculateZeroKnowledgeProof(BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, string, Digest, SecureRandom) + /// is correct. + /// + /// throws CryptoException if the zero knowledge proof is not correct + /// + public static void ValidateZeroKnowledgeProof(BigInteger p, BigInteger q, BigInteger g, + BigInteger gx, BigInteger[] zeroKnowledgeProof, string participantId, IDigest digest) + { + /* sig={g^v,r} */ + BigInteger gv = zeroKnowledgeProof[0]; + BigInteger r = zeroKnowledgeProof[1]; + + BigInteger h = CalculateHashForZeroKnowledgeProof(g, gv, gx, participantId, digest); + if (!(gx.CompareTo(Zero) == 1 && // g^x > 0 + gx.CompareTo(p) == -1 && // g^x < p + gx.ModPow(q, p).CompareTo(One) == 0 && // g^x^q mod q = 1 + /* + * Below, I took a straightforward way to compute g^r * g^x^h, + * which needs 2 exp. Using a simultaneous computation technique + * would only need 1 exp. + */ + g.ModPow(r, p).Multiply(gx.ModPow(h, p)).Mod(p).CompareTo(gv) == 0)) // g^v=g^r * g^x^h + { + throw new CryptoException("Zero-knowledge proof validation failed"); + } + } + + /// + /// Calculates the keying material, which can be done after round 2 has completed. + /// A session key must be derived from this key material using a secure key derivation function (KDF). + /// The KDF used to derive the key is handled externally (i.e. not by JPAKEParticipant). + /// + /// KeyingMaterial = (B/g^{x2*x4*s})^x2 + /// + public static BigInteger CalculateKeyingMaterial(BigInteger p, BigInteger q, + BigInteger gx4, BigInteger x2, BigInteger s, BigInteger B) + { + return gx4.ModPow(x2.Multiply(s).Negate().Mod(q), p).Multiply(B).ModPow(x2, p); + } + + /// + /// Validates that the given participant ids are not equal. + /// (For the J-PAKE exchange, each participant must use a unique id.) + /// + /// Throws CryptoException if the participantId strings are equal. + /// + public static void ValidateParticipantIdsDiffer(string participantId1, string participantId2) + { + if (participantId1.Equals(participantId2)) + { + throw new CryptoException( + "Both participants are using the same participantId (" + + participantId1 + + "). This is not allowed. " + + "Each participant must use a unique participantId."); + } + } + + /// + /// Validates that the given participant ids are equal. + /// This is used to ensure that the payloads received from + /// each round all come from the same participant. + /// + public static void ValidateParticipantIdsEqual(string expectedParticipantId, string actualParticipantId) + { + if (!expectedParticipantId.Equals(actualParticipantId)) + { + throw new CryptoException( + "Received payload from incorrect partner (" + + actualParticipantId + + "). Expected to receive payload from " + + expectedParticipantId + + "."); + } + } + + /// + /// Validates that the given object is not null. + /// throws NullReferenceException if the object is null. + /// + /// object in question + /// name of the object (to be used in exception message) + public static void ValidateNotNull(object obj, string description) + { + if (obj == null) + throw new ArgumentNullException(description); + } + + /// + /// Calculates the MacTag (to be used for key confirmation), as defined by + /// NIST SP 800-56A Revision 1, + /// Section 8.2 Unilateral Key Confirmation for Key Agreement Schemes. + /// + /// MacTag = HMAC(MacKey, MacLen, MacData) + /// MacKey = H(K || "JPAKE_KC") + /// MacData = "KC_1_U" || participantId || partnerParticipantId || gx1 || gx2 || gx3 || gx4 + /// + /// Note that both participants use "KC_1_U" because the sender of the round 3 message + /// is always the initiator for key confirmation. + /// + /// HMAC = {@link HMac} used with the given {@link Digest} + /// H = The given {@link Digest} + /// MacLen = length of MacTag + /// + public static BigInteger CalculateMacTag(string participantId, string partnerParticipantId, + BigInteger gx1, BigInteger gx2, BigInteger gx3, BigInteger gx4, BigInteger keyingMaterial, IDigest digest) + { + byte[] macKey = CalculateMacKey(keyingMaterial, digest); + + HMac mac = new HMac(digest); + mac.Init(new KeyParameter(macKey)); + Arrays.Fill(macKey, (byte)0); + + /* + * MacData = "KC_1_U" || participantId_Alice || participantId_Bob || gx1 || gx2 || gx3 || gx4. + */ + UpdateMac(mac, "KC_1_U"); + UpdateMac(mac, participantId); + UpdateMac(mac, partnerParticipantId); + UpdateMac(mac, gx1); + UpdateMac(mac, gx2); + UpdateMac(mac, gx3); + UpdateMac(mac, gx4); + + byte[] macOutput = MacUtilities.DoFinal(mac); + + return new BigInteger(macOutput); + } + + /// + /// Calculates the MacKey (i.e. the key to use when calculating the MagTag for key confirmation). + /// + /// MacKey = H(K || "JPAKE_KC") + /// + private static byte[] CalculateMacKey(BigInteger keyingMaterial, IDigest digest) + { + digest.Reset(); + + UpdateDigest(digest, keyingMaterial); + /* + * This constant is used to ensure that the macKey is NOT the same as the derived key. + */ + UpdateDigest(digest, "JPAKE_KC"); + + return DigestUtilities.DoFinal(digest); + } + + /// + /// Validates the MacTag received from the partner participant. + /// + /// throws CryptoException if the participantId strings are equal. + /// + public static void ValidateMacTag(string participantId, string partnerParticipantId, + BigInteger gx1, BigInteger gx2, BigInteger gx3, BigInteger gx4, + BigInteger keyingMaterial, IDigest digest, BigInteger partnerMacTag) + { + /* + * Calculate the expected MacTag using the parameters as the partner + * would have used when the partner called calculateMacTag. + * + * i.e. basically all the parameters are reversed. + * participantId <-> partnerParticipantId + * x1 <-> x3 + * x2 <-> x4 + */ + BigInteger expectedMacTag = CalculateMacTag(partnerParticipantId, participantId, gx3, gx4, gx1, gx2, keyingMaterial, digest); + + if (!expectedMacTag.Equals(partnerMacTag)) + { + throw new CryptoException( + "Partner MacTag validation failed. " + + "Therefore, the password, MAC, or digest algorithm of each participant does not match."); + } + } + + private static void UpdateDigest(IDigest digest, BigInteger bigInteger) + { + UpdateDigest(digest, BigIntegers.AsUnsignedByteArray(bigInteger)); + } + + private static void UpdateDigest(IDigest digest, string str) + { + UpdateDigest(digest, Encoding.UTF8.GetBytes(str)); + } + + private static void UpdateDigest(IDigest digest, byte[] bytes) + { + digest.BlockUpdate(bytes, 0, bytes.Length); + Arrays.Fill(bytes, (byte)0); + } + + private static void UpdateDigestIncludingSize(IDigest digest, BigInteger bigInteger) + { + UpdateDigestIncludingSize(digest, BigIntegers.AsUnsignedByteArray(bigInteger)); + } + + private static void UpdateDigestIncludingSize(IDigest digest, string str) + { + UpdateDigestIncludingSize(digest, Encoding.UTF8.GetBytes(str)); + } + + private static void UpdateDigestIncludingSize(IDigest digest, byte[] bytes) + { + digest.BlockUpdate(IntToByteArray(bytes.Length), 0, 4); + digest.BlockUpdate(bytes, 0, bytes.Length); + Arrays.Fill(bytes, (byte)0); + } + + private static void UpdateMac(IMac mac, BigInteger bigInteger) + { + UpdateMac(mac, BigIntegers.AsUnsignedByteArray(bigInteger)); + } + + private static void UpdateMac(IMac mac, string str) + { + UpdateMac(mac, Encoding.UTF8.GetBytes(str)); + } + + private static void UpdateMac(IMac mac, byte[] bytes) + { + mac.BlockUpdate(bytes, 0, bytes.Length); + Arrays.Fill(bytes, (byte)0); + } + + private static byte[] IntToByteArray(int value) + { + return Pack.UInt32_To_BE((uint)value); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeUtilities.cs.meta new file mode 100644 index 000000000..2efcff6a5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/jpake/JPakeUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be8c03db27c054b4dbee7970d93bba33 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf.meta new file mode 100644 index 000000000..22b27a384 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 46e2b05f22025dd47b5d1c86ce8f0c93 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/ConcatenationKdfGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/ConcatenationKdfGenerator.cs new file mode 100644 index 000000000..6d95fff0f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/ConcatenationKdfGenerator.cs @@ -0,0 +1,118 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.Kdf +{ + /// Generator for Concatenation Key Derivation Function defined in NIST SP 800-56A, Sect 5.8.1 + public sealed class ConcatenationKdfGenerator + : IDerivationFunction + { + private readonly IDigest m_digest; + private readonly int m_hLen; + + private byte[] m_buffer; + + /// the digest to be used as the source of generated bytes + public ConcatenationKdfGenerator(IDigest digest) + { + m_digest = digest; + m_hLen = digest.GetDigestSize(); + } + + public void Init(IDerivationParameters param) + { + if (!(param is KdfParameters kdfParameters)) + throw new ArgumentException("KDF parameters required for ConcatenationKdfGenerator"); + + byte[] sharedSecret = kdfParameters.GetSharedSecret(); + byte[] otherInfo = kdfParameters.GetIV(); + + m_buffer = new byte[4 + sharedSecret.Length + otherInfo.Length + m_hLen]; + sharedSecret.CopyTo(m_buffer, 4); + otherInfo.CopyTo(m_buffer, 4 + sharedSecret.Length); + } + + /// the underlying digest. + public IDigest Digest => m_digest; + + /// Fill len bytes of the output buffer with bytes generated from the derivation function. + /// + public int GenerateBytes(byte[] output, int outOff, int length) + { + Check.OutputLength(output, outOff, length, "output buffer too small"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return GenerateBytes(output.AsSpan(outOff, length)); +#else + int hashPos = m_buffer.Length - m_hLen; + uint counter = 1; + + m_digest.Reset(); + + int end = outOff + length; + int limit = end - m_hLen; + + while (outOff <= limit) + { + Pack.UInt32_To_BE(counter++, m_buffer, 0); + + m_digest.BlockUpdate(m_buffer, 0, hashPos); + m_digest.DoFinal(output, outOff); + + outOff += m_hLen; + } + + if (outOff < end) + { + Pack.UInt32_To_BE(counter, m_buffer, 0); + + m_digest.BlockUpdate(m_buffer, 0, hashPos); + m_digest.DoFinal(m_buffer, hashPos); + + Array.Copy(m_buffer, hashPos, output, outOff, end - outOff); + } + + return length; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int GenerateBytes(Span output) + { + int hashPos = m_buffer.Length - m_hLen; + uint counter = 1; + + m_digest.Reset(); + + int pos = 0, length = output.Length, limit = length - m_hLen; + + while (pos <= limit) + { + Pack.UInt32_To_BE(counter++, m_buffer.AsSpan()); + + m_digest.BlockUpdate(m_buffer.AsSpan(0, hashPos)); + m_digest.DoFinal(output[pos..]); + + pos += m_hLen; + } + + if (pos < length) + { + Pack.UInt32_To_BE(counter, m_buffer.AsSpan()); + + m_digest.BlockUpdate(m_buffer.AsSpan(0, hashPos)); + m_digest.DoFinal(m_buffer.AsSpan(hashPos)); + m_buffer.AsSpan(hashPos, length - pos).CopyTo(output[pos..]); + } + + return length; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/ConcatenationKdfGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/ConcatenationKdfGenerator.cs.meta new file mode 100644 index 000000000..f82a3a962 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/ConcatenationKdfGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2968651d26eab974fbac139e56e083ed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/DHKdfParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/DHKdfParameters.cs new file mode 100644 index 000000000..3bde996ae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/DHKdfParameters.cs @@ -0,0 +1,61 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.Kdf +{ + public class DHKdfParameters + : IDerivationParameters + { + private readonly DerObjectIdentifier algorithm; + private readonly int keySize; + private readonly byte[] z; + private readonly byte[] extraInfo; + + public DHKdfParameters( + DerObjectIdentifier algorithm, + int keySize, + byte[] z) + : this(algorithm, keySize, z, null) + { + } + + public DHKdfParameters( + DerObjectIdentifier algorithm, + int keySize, + byte[] z, + byte[] extraInfo) + { + this.algorithm = algorithm; + this.keySize = keySize; + this.z = z; // TODO Clone? + this.extraInfo = extraInfo; + } + + public DerObjectIdentifier Algorithm + { + get { return algorithm; } + } + + public int KeySize + { + get { return keySize; } + } + + public byte[] GetZ() + { + // TODO Clone? + return z; + } + + public byte[] GetExtraInfo() + { + // TODO Clone? + return extraInfo; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/DHKdfParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/DHKdfParameters.cs.meta new file mode 100644 index 000000000..1b10be0d0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/DHKdfParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 37821fa6280a2bf4a96d3dc5f096c6ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/DHKekGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/DHKekGenerator.cs new file mode 100644 index 000000000..aa09fd245 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/DHKekGenerator.cs @@ -0,0 +1,174 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.Kdf +{ + /** + * RFC 2631 Diffie-hellman KEK derivation function. + */ + public sealed class DHKekGenerator + : IDerivationFunction + { + private readonly IDigest m_digest; + + private DerObjectIdentifier algorithm; + private int keySize; + private byte[] z; + private byte[] partyAInfo; + + public DHKekGenerator(IDigest digest) + { + m_digest = digest; + } + + public void Init(IDerivationParameters param) + { + DHKdfParameters parameters = (DHKdfParameters)param; + + this.algorithm = parameters.Algorithm; + this.keySize = parameters.KeySize; + this.z = parameters.GetZ(); // TODO Clone? + this.partyAInfo = parameters.GetExtraInfo(); // TODO Clone? + } + + public IDigest Digest => m_digest; + + public int GenerateBytes(byte[] outBytes, int outOff, int length) + { + Check.OutputLength(outBytes, outOff, length, "output buffer too small"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return GenerateBytes(outBytes.AsSpan(outOff, length)); +#else + long oBytes = length; + int digestSize = m_digest.GetDigestSize(); + + // + // this is at odds with the standard implementation, the + // maximum value should be hBits * (2^32 - 1) where hBits + // is the digest output size in bits. We can't have an + // array with a long index at the moment... + // + if (oBytes > ((2L << 32) - 1)) + throw new ArgumentException("Output length too large"); + + int cThreshold = (int)((oBytes + digestSize - 1) / digestSize); + + byte[] dig = new byte[digestSize]; + + uint counter = 1; + + for (int i = 0; i < cThreshold; i++) + { + // KeySpecificInfo + DerSequence keyInfo = new DerSequence(algorithm, new DerOctetString(Pack.UInt32_To_BE(counter))); + + // OtherInfo + Asn1EncodableVector v1 = new Asn1EncodableVector(keyInfo); + + if (partyAInfo != null) + { + v1.Add(new DerTaggedObject(true, 0, new DerOctetString(partyAInfo))); + } + + v1.Add(new DerTaggedObject(true, 2, new DerOctetString(Pack.UInt32_To_BE((uint)keySize)))); + + byte[] other = new DerSequence(v1).GetDerEncoded(); + + m_digest.BlockUpdate(z, 0, z.Length); + m_digest.BlockUpdate(other, 0, other.Length); + m_digest.DoFinal(dig, 0); + + if (length > digestSize) + { + Array.Copy(dig, 0, outBytes, outOff, digestSize); + outOff += digestSize; + length -= digestSize; + } + else + { + Array.Copy(dig, 0, outBytes, outOff, length); + } + + counter++; + } + + m_digest.Reset(); + + return (int)oBytes; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int GenerateBytes(Span output) + { + long oBytes = output.Length; + int digestSize = m_digest.GetDigestSize(); + + // + // this is at odds with the standard implementation, the + // maximum value should be hBits * (2^32 - 1) where hBits + // is the digest output size in bits. We can't have an + // array with a long index at the moment... + // + if (oBytes > ((2L << 32) - 1)) + throw new ArgumentException("Output length too large"); + + int cThreshold = (int)((oBytes + digestSize - 1) / digestSize); + + Span dig = digestSize <= 128 + ? stackalloc byte[digestSize] + : new byte[digestSize]; + + uint counter = 1; + + for (int i = 0; i < cThreshold; i++) + { + // KeySpecificInfo + DerSequence keyInfo = new DerSequence(algorithm, new DerOctetString(Pack.UInt32_To_BE(counter))); + + // OtherInfo + Asn1EncodableVector v1 = new Asn1EncodableVector(keyInfo); + + if (partyAInfo != null) + { + v1.Add(new DerTaggedObject(true, 0, new DerOctetString(partyAInfo))); + } + + v1.Add(new DerTaggedObject(true, 2, new DerOctetString(Pack.UInt32_To_BE((uint)keySize)))); + + byte[] other = new DerSequence(v1).GetDerEncoded(); + + m_digest.BlockUpdate(z); + m_digest.BlockUpdate(other); + m_digest.DoFinal(dig); + + int remaining = output.Length; + if (remaining > digestSize) + { + dig.CopyTo(output); + output = output[digestSize..]; + } + else + { + dig[..remaining].CopyTo(output); + } + + counter++; + } + + m_digest.Reset(); + + return (int)oBytes; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/DHKekGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/DHKekGenerator.cs.meta new file mode 100644 index 000000000..1549ad032 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/DHKekGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 15d1d1044377c8349b064a27a6649808 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/ECDHKekGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/ECDHKekGenerator.cs new file mode 100644 index 000000000..0859b0421 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/ECDHKekGenerator.cs @@ -0,0 +1,77 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.Kdf +{ + /** + * X9.63 based key derivation function for ECDH CMS. + */ + public sealed class ECDHKekGenerator + : IDerivationFunction + { + private readonly IDerivationFunction m_kdf; + + private DerObjectIdentifier algorithm; + private int keySize; + private byte[] z; + + public ECDHKekGenerator(IDigest digest) + { + m_kdf = new Kdf2BytesGenerator(digest); + } + + public void Init(IDerivationParameters param) + { + DHKdfParameters parameters = (DHKdfParameters)param; + + this.algorithm = parameters.Algorithm; + this.keySize = parameters.KeySize; + this.z = parameters.GetZ(); // TODO Clone? + } + + public IDigest Digest => m_kdf.Digest; + + public int GenerateBytes(byte[] outBytes, int outOff, int length) + { + Check.OutputLength(outBytes, outOff, length, "output buffer too small"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return GenerateBytes(outBytes.AsSpan(outOff, length)); +#else + // TODO Create an ASN.1 class for this (RFC3278) + // ECC-CMS-SharedInfo + DerSequence s = new DerSequence( + new AlgorithmIdentifier(algorithm, DerNull.Instance), + new DerTaggedObject(true, 2, new DerOctetString(Pack.UInt32_To_BE((uint)keySize)))); + + m_kdf.Init(new KdfParameters(z, s.GetDerEncoded())); + + return m_kdf.GenerateBytes(outBytes, outOff, length); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int GenerateBytes(Span output) + { + // TODO Create an ASN.1 class for this (RFC3278) + // ECC-CMS-SharedInfo + DerSequence s = new DerSequence( + new AlgorithmIdentifier(algorithm, DerNull.Instance), + new DerTaggedObject(true, 2, new DerOctetString(Pack.UInt32_To_BE((uint)keySize)))); + + m_kdf.Init(new KdfParameters(z, s.GetDerEncoded())); + + return m_kdf.GenerateBytes(output); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/ECDHKekGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/ECDHKekGenerator.cs.meta new file mode 100644 index 000000000..7806536b8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/kdf/ECDHKekGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1cfab31e18f7d80498fe6cee2a7e4955 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp.meta new file mode 100644 index 000000000..07781139e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b6aacc3094b914340b5c92347295dc21 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6Client.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6Client.cs new file mode 100644 index 000000000..a060206e8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6Client.cs @@ -0,0 +1,168 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.Srp +{ + /** + * Implements the client side SRP-6a protocol. Note that this class is stateful, and therefore NOT threadsafe. + * This implementation of SRP is based on the optimized message sequence put forth by Thomas Wu in the paper + * "SRP-6: Improvements and Refinements to the Secure Remote Password Protocol, 2002" + */ + public class Srp6Client + { + protected BigInteger N; + protected BigInteger g; + + protected BigInteger privA; + protected BigInteger pubA; + + protected BigInteger B; + + protected BigInteger x; + protected BigInteger u; + protected BigInteger S; + + protected BigInteger M1; + protected BigInteger M2; + protected BigInteger Key; + + protected IDigest digest; + protected SecureRandom random; + + public Srp6Client() + { + } + + /** + * Initialises the client to begin new authentication attempt + * @param N The safe prime associated with the client's verifier + * @param g The group parameter associated with the client's verifier + * @param digest The digest algorithm associated with the client's verifier + * @param random For key generation + */ + public virtual void Init(BigInteger N, BigInteger g, IDigest digest, SecureRandom random) + { + this.N = N; + this.g = g; + this.digest = digest; + this.random = random; + } + + public virtual void Init(Srp6GroupParameters group, IDigest digest, SecureRandom random) + { + Init(group.N, group.G, digest, random); + } + + /** + * Generates client's credentials given the client's salt, identity and password + * @param salt The salt used in the client's verifier. + * @param identity The user's identity (eg. username) + * @param password The user's password + * @return Client's public value to send to server + */ + public virtual BigInteger GenerateClientCredentials(byte[] salt, byte[] identity, byte[] password) + { + this.x = Srp6Utilities.CalculateX(digest, N, salt, identity, password); + this.privA = SelectPrivateValue(); + this.pubA = g.ModPow(privA, N); + + return pubA; + } + + /** + * Generates client's verification message given the server's credentials + * @param serverB The server's credentials + * @return Client's verification message for the server + * @throws CryptoException If server's credentials are invalid + */ + public virtual BigInteger CalculateSecret(BigInteger serverB) + { + this.B = Srp6Utilities.ValidatePublicValue(N, serverB); + this.u = Srp6Utilities.CalculateU(digest, N, pubA, B); + this.S = CalculateS(); + + return S; + } + + protected virtual BigInteger SelectPrivateValue() + { + return Srp6Utilities.GeneratePrivateValue(digest, N, g, random); + } + + private BigInteger CalculateS() + { + BigInteger k = Srp6Utilities.CalculateK(digest, N, g); + BigInteger exp = u.Multiply(x).Add(privA); + BigInteger tmp = g.ModPow(x, N).Multiply(k).Mod(N); + return B.Subtract(tmp).Mod(N).ModPow(exp, N); + } + + /** + * Computes the client evidence message M1 using the previously received values. + * To be called after calculating the secret S. + * @return M1: the client side generated evidence message + * @throws CryptoException + */ + public virtual BigInteger CalculateClientEvidenceMessage() + { + // Verify pre-requirements + if (this.pubA == null || this.B == null || this.S == null) + { + throw new CryptoException("Impossible to compute M1: " + + "some data are missing from the previous operations (A,B,S)"); + } + // compute the client evidence message 'M1' + this.M1 = Srp6Utilities.CalculateM1(digest, N, pubA, B, S); + return M1; + } + + /** Authenticates the server evidence message M2 received and saves it only if correct. + * @param M2: the server side generated evidence message + * @return A boolean indicating if the server message M2 was the expected one. + * @throws CryptoException + */ + public virtual bool VerifyServerEvidenceMessage(BigInteger serverM2) + { + // Verify pre-requirements + if (this.pubA == null || this.M1 == null || this.S == null) + { + throw new CryptoException("Impossible to compute and verify M2: " + + "some data are missing from the previous operations (A,M1,S)"); + } + + // Compute the own server evidence message 'M2' + BigInteger computedM2 = Srp6Utilities.CalculateM2(digest, N, pubA, M1, S); + if (computedM2.Equals(serverM2)) + { + this.M2 = serverM2; + return true; + } + return false; + } + + /** + * Computes the final session key as a result of the SRP successful mutual authentication + * To be called after verifying the server evidence message M2. + * @return Key: the mutually authenticated symmetric session key + * @throws CryptoException + */ + public virtual BigInteger CalculateSessionKey() + { + // Verify pre-requirements (here we enforce a previous calculation of M1 and M2) + if (this.S == null || this.M1 == null || this.M2 == null) + { + throw new CryptoException("Impossible to compute Key: " + + "some data are missing from the previous operations (S,M1,M2)"); + } + this.Key = Srp6Utilities.CalculateKey(digest, N, S); + return Key; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6Client.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6Client.cs.meta new file mode 100644 index 000000000..4bc105021 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6Client.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c97144c9d901452429331664aae38f7b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6Server.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6Server.cs new file mode 100644 index 000000000..905766fd3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6Server.cs @@ -0,0 +1,167 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.Srp +{ + /** + * Implements the server side SRP-6a protocol. Note that this class is stateful, and therefore NOT threadsafe. + * This implementation of SRP is based on the optimized message sequence put forth by Thomas Wu in the paper + * "SRP-6: Improvements and Refinements to the Secure Remote Password Protocol, 2002" + */ + public class Srp6Server + { + protected BigInteger N; + protected BigInteger g; + protected BigInteger v; + + protected SecureRandom random; + protected IDigest digest; + + protected BigInteger A; + + protected BigInteger privB; + protected BigInteger pubB; + + protected BigInteger u; + protected BigInteger S; + protected BigInteger M1; + protected BigInteger M2; + protected BigInteger Key; + + public Srp6Server() + { + } + + /** + * Initialises the server to accept a new client authentication attempt + * @param N The safe prime associated with the client's verifier + * @param g The group parameter associated with the client's verifier + * @param v The client's verifier + * @param digest The digest algorithm associated with the client's verifier + * @param random For key generation + */ + public virtual void Init(BigInteger N, BigInteger g, BigInteger v, IDigest digest, SecureRandom random) + { + this.N = N; + this.g = g; + this.v = v; + + this.random = random; + this.digest = digest; + } + + public virtual void Init(Srp6GroupParameters group, BigInteger v, IDigest digest, SecureRandom random) + { + Init(group.N, group.G, v, digest, random); + } + + /** + * Generates the server's credentials that are to be sent to the client. + * @return The server's public value to the client + */ + public virtual BigInteger GenerateServerCredentials() + { + BigInteger k = Srp6Utilities.CalculateK(digest, N, g); + this.privB = SelectPrivateValue(); + this.pubB = k.Multiply(v).Mod(N).Add(g.ModPow(privB, N)).Mod(N); + + return pubB; + } + + /** + * Processes the client's credentials. If valid the shared secret is generated and returned. + * @param clientA The client's credentials + * @return A shared secret BigInteger + * @throws CryptoException If client's credentials are invalid + */ + public virtual BigInteger CalculateSecret(BigInteger clientA) + { + this.A = Srp6Utilities.ValidatePublicValue(N, clientA); + this.u = Srp6Utilities.CalculateU(digest, N, A, pubB); + this.S = CalculateS(); + + return S; + } + + protected virtual BigInteger SelectPrivateValue() + { + return Srp6Utilities.GeneratePrivateValue(digest, N, g, random); + } + + private BigInteger CalculateS() + { + return v.ModPow(u, N).Multiply(A).Mod(N).ModPow(privB, N); + } + + /** + * Authenticates the received client evidence message M1 and saves it only if correct. + * To be called after calculating the secret S. + * @param M1: the client side generated evidence message + * @return A boolean indicating if the client message M1 was the expected one. + * @throws CryptoException + */ + public virtual bool VerifyClientEvidenceMessage(BigInteger clientM1) + { + // Verify pre-requirements + if (this.A == null || this.pubB == null || this.S == null) + { + throw new CryptoException("Impossible to compute and verify M1: " + + "some data are missing from the previous operations (A,B,S)"); + } + + // Compute the own client evidence message 'M1' + BigInteger computedM1 = Srp6Utilities.CalculateM1(digest, N, A, pubB, S); + if (computedM1.Equals(clientM1)) + { + this.M1 = clientM1; + return true; + } + return false; + } + + /** + * Computes the server evidence message M2 using the previously verified values. + * To be called after successfully verifying the client evidence message M1. + * @return M2: the server side generated evidence message + * @throws CryptoException + */ + public virtual BigInteger CalculateServerEvidenceMessage() + { + // Verify pre-requirements + if (this.A == null || this.M1 == null || this.S == null) + { + throw new CryptoException("Impossible to compute M2: " + + "some data are missing from the previous operations (A,M1,S)"); + } + + // Compute the server evidence message 'M2' + this.M2 = Srp6Utilities.CalculateM2(digest, N, A, M1, S); + return M2; + } + + /** + * Computes the final session key as a result of the SRP successful mutual authentication + * To be called after calculating the server evidence message M2. + * @return Key: the mutual authenticated symmetric session key + * @throws CryptoException + */ + public virtual BigInteger CalculateSessionKey() + { + // Verify pre-requirements + if (this.S == null || this.M1 == null || this.M2 == null) + { + throw new CryptoException("Impossible to compute Key: " + + "some data are missing from the previous operations (S,M1,M2)"); + } + this.Key = Srp6Utilities.CalculateKey(digest, N, S); + return Key; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6Server.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6Server.cs.meta new file mode 100644 index 000000000..851efd2aa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6Server.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 036c95a84f457134c94137d3f36c6603 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6StandardGroups.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6StandardGroups.cs new file mode 100644 index 000000000..7b44b6492 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6StandardGroups.cs @@ -0,0 +1,163 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.Srp +{ + public class Srp6StandardGroups + { + private static BigInteger FromHex(string hex) + { + return new BigInteger(1, Hex.DecodeStrict(hex)); + } + + private static Srp6GroupParameters FromNG(string hexN, string hexG) + { + return new Srp6GroupParameters(FromHex(hexN), FromHex(hexG)); + } + + /* + * RFC 5054 + */ + private const string rfc5054_1024_N = "EEAF0AB9ADB38DD69C33F80AFA8FC5E86072618775FF3C0B9EA2314C" + + "9C256576D674DF7496EA81D3383B4813D692C6E0E0D5D8E250B98BE4" + + "8E495C1D6089DAD15DC7D7B46154D6B6CE8EF4AD69B15D4982559B29" + + "7BCF1885C529F566660E57EC68EDBC3C05726CC02FD4CBF4976EAA9A" + "FD5138FE8376435B9FC61D2FC0EB06E3"; + private const string rfc5054_1024_g = "02"; + public static readonly Srp6GroupParameters rfc5054_1024 = FromNG(rfc5054_1024_N, rfc5054_1024_g); + + private const string rfc5054_1536_N = "9DEF3CAFB939277AB1F12A8617A47BBBDBA51DF499AC4C80BEEEA961" + + "4B19CC4D5F4F5F556E27CBDE51C6A94BE4607A291558903BA0D0F843" + + "80B655BB9A22E8DCDF028A7CEC67F0D08134B1C8B97989149B609E0B" + + "E3BAB63D47548381DBC5B1FC764E3F4B53DD9DA1158BFD3E2B9C8CF5" + + "6EDF019539349627DB2FD53D24B7C48665772E437D6C7F8CE442734A" + + "F7CCB7AE837C264AE3A9BEB87F8A2FE9B8B5292E5A021FFF5E91479E" + + "8CE7A28C2442C6F315180F93499A234DCF76E3FED135F9BB"; + private const string rfc5054_1536_g = "02"; + public static readonly Srp6GroupParameters rfc5054_1536 = FromNG(rfc5054_1536_N, rfc5054_1536_g); + + private const string rfc5054_2048_N = "AC6BDB41324A9A9BF166DE5E1389582FAF72B6651987EE07FC319294" + + "3DB56050A37329CBB4A099ED8193E0757767A13DD52312AB4B03310D" + + "CD7F48A9DA04FD50E8083969EDB767B0CF6095179A163AB3661A05FB" + + "D5FAAAE82918A9962F0B93B855F97993EC975EEAA80D740ADBF4FF74" + + "7359D041D5C33EA71D281E446B14773BCA97B43A23FB801676BD207A" + + "436C6481F1D2B9078717461A5B9D32E688F87748544523B524B0D57D" + + "5EA77A2775D2ECFA032CFBDBF52FB3786160279004E57AE6AF874E73" + + "03CE53299CCC041C7BC308D82A5698F3A8D0C38271AE35F8E9DBFBB6" + + "94B5C803D89F7AE435DE236D525F54759B65E372FCD68EF20FA7111F" + "9E4AFF73"; + private const string rfc5054_2048_g = "02"; + public static readonly Srp6GroupParameters rfc5054_2048 = FromNG(rfc5054_2048_N, rfc5054_2048_g); + + private const string rfc5054_3072_N = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08" + + "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B" + + "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9" + + "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6" + + "49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8" + + "FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C" + + "180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718" + + "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D" + + "04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D" + + "B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226" + + "1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC" + "E0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF"; + private const string rfc5054_3072_g = "05"; + public static readonly Srp6GroupParameters rfc5054_3072 = FromNG(rfc5054_3072_N, rfc5054_3072_g); + + private const string rfc5054_4096_N = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08" + + "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B" + + "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9" + + "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6" + + "49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8" + + "FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C" + + "180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718" + + "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D" + + "04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D" + + "B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226" + + "1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC" + + "E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26" + + "99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB" + + "04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2" + + "233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127" + + "D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199" + "FFFFFFFFFFFFFFFF"; + private const string rfc5054_4096_g = "05"; + public static readonly Srp6GroupParameters rfc5054_4096 = FromNG(rfc5054_4096_N, rfc5054_4096_g); + + private const string rfc5054_6144_N = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08" + + "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B" + + "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9" + + "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6" + + "49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8" + + "FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C" + + "180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718" + + "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D" + + "04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D" + + "B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226" + + "1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC" + + "E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26" + + "99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB" + + "04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2" + + "233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127" + + "D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492" + + "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406" + + "AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918" + + "DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B33205151" + + "2BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03" + + "F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97F" + + "BEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA" + + "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58B" + + "B7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632" + + "387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E" + "6DCC4024FFFFFFFFFFFFFFFF"; + private const string rfc5054_6144_g = "05"; + public static readonly Srp6GroupParameters rfc5054_6144 = FromNG(rfc5054_6144_N, rfc5054_6144_g); + + private const string rfc5054_8192_N = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08" + + "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B" + + "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9" + + "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6" + + "49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8" + + "FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C" + + "180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718" + + "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D" + + "04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D" + + "B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226" + + "1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC" + + "E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26" + + "99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB" + + "04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2" + + "233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127" + + "D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492" + + "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406" + + "AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918" + + "DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B33205151" + + "2BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03" + + "F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97F" + + "BEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA" + + "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58B" + + "B7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632" + + "387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E" + + "6DBE115974A3926F12FEE5E438777CB6A932DF8CD8BEC4D073B931BA" + + "3BC832B68D9DD300741FA7BF8AFC47ED2576F6936BA424663AAB639C" + + "5AE4F5683423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD9" + + "22222E04A4037C0713EB57A81A23F0C73473FC646CEA306B4BCBC886" + + "2F8385DDFA9D4B7FA2C087E879683303ED5BDD3A062B3CF5B3A278A6" + + "6D2A13F83F44F82DDF310EE074AB6A364597E899A0255DC164F31CC5" + + "0846851DF9AB48195DED7EA1B1D510BD7EE74D73FAF36BC31ECFA268" + + "359046F4EB879F924009438B481C6CD7889A002ED5EE382BC9190DA6" + + "FC026E479558E4475677E9AA9E3050E2765694DFC81F56E880B96E71" + "60C980DD98EDD3DFFFFFFFFFFFFFFFFF"; + private const string rfc5054_8192_g = "13"; + public static readonly Srp6GroupParameters rfc5054_8192 = FromNG(rfc5054_8192_N, rfc5054_8192_g); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6StandardGroups.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6StandardGroups.cs.meta new file mode 100644 index 000000000..d68e5d370 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6StandardGroups.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 031c325c69c0dde4090a9a0a0fc4ac5e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6Utilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6Utilities.cs new file mode 100644 index 000000000..bab787a6f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6Utilities.cs @@ -0,0 +1,222 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.Srp +{ + public class Srp6Utilities + { + public static BigInteger CalculateK(IDigest digest, BigInteger N, BigInteger g) + { + return HashPaddedPair(digest, N, N, g); + } + + public static BigInteger CalculateU(IDigest digest, BigInteger N, BigInteger A, BigInteger B) + { + return HashPaddedPair(digest, N, A, B); + } + + public static BigInteger CalculateX(IDigest digest, BigInteger N, byte[] salt, byte[] identity, byte[] password) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return CalculateX(digest, N, salt.AsSpan(), identity.AsSpan(), password.AsSpan()); +#else + byte[] output = new byte[digest.GetDigestSize()]; + + digest.BlockUpdate(identity, 0, identity.Length); + digest.Update((byte)':'); + digest.BlockUpdate(password, 0, password.Length); + digest.DoFinal(output, 0); + + digest.BlockUpdate(salt, 0, salt.Length); + digest.BlockUpdate(output, 0, output.Length); + digest.DoFinal(output, 0); + + return new BigInteger(1, output); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static BigInteger CalculateX(IDigest digest, BigInteger N, ReadOnlySpan salt, + ReadOnlySpan identity, ReadOnlySpan password) + { + int digestSize = digest.GetDigestSize(); + Span output = digestSize <= 128 + ? stackalloc byte[digestSize] + : new byte[digestSize]; + + digest.BlockUpdate(identity); + digest.Update((byte)':'); + digest.BlockUpdate(password); + digest.DoFinal(output); + + digest.BlockUpdate(salt); + digest.BlockUpdate(output); + digest.DoFinal(output); + + return new BigInteger(1, output); + } +#endif + + public static BigInteger GeneratePrivateValue(IDigest digest, BigInteger N, BigInteger g, SecureRandom random) + { + int minBits = System.Math.Min(256, N.BitLength / 2); + BigInteger min = BigInteger.One.ShiftLeft(minBits - 1); + BigInteger max = N.Subtract(BigInteger.One); + + return BigIntegers.CreateRandomInRange(min, max, random); + } + + public static BigInteger ValidatePublicValue(BigInteger N, BigInteger val) + { + val = val.Mod(N); + + // Check that val % N != 0 + if (val.Equals(BigInteger.Zero)) + throw new CryptoException("Invalid public value: 0"); + + return val; + } + + /** + * Computes the client evidence message (M1) according to the standard routine: + * M1 = H( A | B | S ) + * @param digest The Digest used as the hashing function H + * @param N Modulus used to get the pad length + * @param A The public client value + * @param B The public server value + * @param S The secret calculated by both sides + * @return M1 The calculated client evidence message + */ + public static BigInteger CalculateM1(IDigest digest, BigInteger N, BigInteger A, BigInteger B, BigInteger S) + { + BigInteger M1 = HashPaddedTriplet(digest, N, A, B, S); + return M1; + } + + /** + * Computes the server evidence message (M2) according to the standard routine: + * M2 = H( A | M1 | S ) + * @param digest The Digest used as the hashing function H + * @param N Modulus used to get the pad length + * @param A The public client value + * @param M1 The client evidence message + * @param S The secret calculated by both sides + * @return M2 The calculated server evidence message + */ + public static BigInteger CalculateM2(IDigest digest, BigInteger N, BigInteger A, BigInteger M1, BigInteger S) + { + BigInteger M2 = HashPaddedTriplet(digest, N, A, M1, S); + return M2; + } + + /** + * Computes the final Key according to the standard routine: Key = H(S) + * @param digest The Digest used as the hashing function H + * @param N Modulus used to get the pad length + * @param S The secret calculated by both sides + * @return + */ + public static BigInteger CalculateKey(IDigest digest, BigInteger N, BigInteger S) + { + int paddedLength = (N.BitLength + 7) / 8; + int digestSize = digest.GetDigestSize(); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span bytes = paddedLength <= 512 + ? stackalloc byte[paddedLength] + : new byte[paddedLength]; + BigIntegers.AsUnsignedByteArray(S, bytes); + digest.BlockUpdate(bytes); + + Span output = digestSize <= 128 + ? stackalloc byte[digestSize] + : new byte[digestSize]; + digest.DoFinal(output); +#else + byte[] bytes = new byte[paddedLength]; + BigIntegers.AsUnsignedByteArray(S, bytes, 0, bytes.Length); + digest.BlockUpdate(bytes, 0, bytes.Length); + + byte[] output = new byte[digestSize]; + digest.DoFinal(output, 0); +#endif + + return new BigInteger(1, output); + } + + private static BigInteger HashPaddedTriplet(IDigest digest, BigInteger N, BigInteger n1, BigInteger n2, BigInteger n3) + { + int paddedLength = (N.BitLength + 7) / 8; + int digestSize = digest.GetDigestSize(); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span bytes = paddedLength <= 512 + ? stackalloc byte[paddedLength] + : new byte[paddedLength]; + BigIntegers.AsUnsignedByteArray(n1, bytes); + digest.BlockUpdate(bytes); + BigIntegers.AsUnsignedByteArray(n2, bytes); + digest.BlockUpdate(bytes); + BigIntegers.AsUnsignedByteArray(n3, bytes); + digest.BlockUpdate(bytes); + + Span output = digestSize <= 128 + ? stackalloc byte[digestSize] + : new byte[digestSize]; + digest.DoFinal(output); +#else + byte[] bytes = new byte[paddedLength]; + BigIntegers.AsUnsignedByteArray(n1, bytes, 0, bytes.Length); + digest.BlockUpdate(bytes, 0, bytes.Length); + BigIntegers.AsUnsignedByteArray(n2, bytes, 0, bytes.Length); + digest.BlockUpdate(bytes, 0, bytes.Length); + BigIntegers.AsUnsignedByteArray(n3, bytes, 0, bytes.Length); + digest.BlockUpdate(bytes, 0, bytes.Length); + + byte[] output = new byte[digestSize]; + digest.DoFinal(output, 0); +#endif + + return new BigInteger(1, output); + } + + private static BigInteger HashPaddedPair(IDigest digest, BigInteger N, BigInteger n1, BigInteger n2) + { + int paddedLength = (N.BitLength + 7) / 8; + int digestSize = digest.GetDigestSize(); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span bytes = paddedLength <= 512 + ? stackalloc byte[paddedLength] + : new byte[paddedLength]; + BigIntegers.AsUnsignedByteArray(n1, bytes); + digest.BlockUpdate(bytes); + BigIntegers.AsUnsignedByteArray(n2, bytes); + digest.BlockUpdate(bytes); + + Span output = digestSize <= 128 + ? stackalloc byte[digestSize] + : new byte[digestSize]; + digest.DoFinal(output); +#else + byte[] bytes = new byte[paddedLength]; + BigIntegers.AsUnsignedByteArray(n1, bytes, 0, bytes.Length); + digest.BlockUpdate(bytes, 0, bytes.Length); + BigIntegers.AsUnsignedByteArray(n2, bytes, 0, bytes.Length); + digest.BlockUpdate(bytes, 0, bytes.Length); + + byte[] output = new byte[digestSize]; + digest.DoFinal(output, 0); +#endif + + return new BigInteger(1, output); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6Utilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6Utilities.cs.meta new file mode 100644 index 000000000..5eca1e594 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6Utilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f2d639deca700ab4ebd379e19bf15295 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6VerifierGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6VerifierGenerator.cs new file mode 100644 index 000000000..f3eef55d7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6VerifierGenerator.cs @@ -0,0 +1,59 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.Srp +{ + /** + * Generates new SRP verifier for user + */ + public class Srp6VerifierGenerator + { + protected BigInteger N; + protected BigInteger g; + protected IDigest digest; + + public Srp6VerifierGenerator() + { + } + + /** + * Initialises generator to create new verifiers + * @param N The safe prime to use (see DHParametersGenerator) + * @param g The group parameter to use (see DHParametersGenerator) + * @param digest The digest to use. The same digest type will need to be used later for the actual authentication + * attempt. Also note that the final session key size is dependent on the chosen digest. + */ + public virtual void Init(BigInteger N, BigInteger g, IDigest digest) + { + this.N = N; + this.g = g; + this.digest = digest; + } + + public virtual void Init(Srp6GroupParameters group, IDigest digest) + { + Init(group.N, group.G, digest); + } + + /** + * Creates a new SRP verifier + * @param salt The salt to use, generally should be large and random + * @param identity The user's identifying information (eg. username) + * @param password The user's password + * @return A new verifier for use in future SRP authentication + */ + public virtual BigInteger GenerateVerifier(byte[] salt, byte[] identity, byte[] password) + { + BigInteger x = Srp6Utilities.CalculateX(digest, N, salt, identity, password); + + return g.ModPow(x, N); + } + } +} + +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6VerifierGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6VerifierGenerator.cs.meta new file mode 100644 index 000000000..027da2876 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/agreement/srp/SRP6VerifierGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e48df3dca5d9954b9cad7406b784e1b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests.meta new file mode 100644 index 000000000..07abf1faa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1e980ab0e11551042aa0a47cac1b3062 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake2bDigest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake2bDigest.cs new file mode 100644 index 000000000..34a63bc7f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake2bDigest.cs @@ -0,0 +1,650 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER +using System.Runtime.CompilerServices; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /* The BLAKE2 cryptographic hash function was designed by Jean- + Philippe Aumasson, Samuel Neves, Zooko Wilcox-O'Hearn, and Christian + Winnerlein. + + Reference Implementation and Description can be found at: https://blake2.net/ + Internet Draft: https://tools.ietf.org/html/draft-saarinen-blake2-02 + + This implementation does not support the Tree Hashing Mode. + + For unkeyed hashing, developers adapting BLAKE2 to ASN.1 - based + message formats SHOULD use the OID tree at x = 1.3.6.1.4.1.1722.12.2. + + Algorithm | Target | Collision | Hash | Hash ASN.1 | + Identifier | Arch | Security | nn | OID Suffix | + ---------------+--------+-----------+------+------------+ + id-blake2b160 | 64-bit | 2**80 | 20 | x.1.20 | + id-blake2b256 | 64-bit | 2**128 | 32 | x.1.32 | + id-blake2b384 | 64-bit | 2**192 | 48 | x.1.48 | + id-blake2b512 | 64-bit | 2**256 | 64 | x.1.64 | + ---------------+--------+-----------+------+------------+ + */ + + /** + * Implementation of the cryptographic hash function Blake2b. + *

+ * Blake2b offers a built-in keying mechanism to be used directly + * for authentication ("Prefix-MAC") rather than a HMAC construction. + *

+ * Blake2b offers a built-in support for a salt for randomized hashing + * and a personal string for defining a unique hash function for each application. + *

+ * BLAKE2b is optimized for 64-bit platforms and produces digests of any size + * between 1 and 64 bytes. + */ + public sealed class Blake2bDigest + : IDigest + { + // Blake2b Initialization Vector: + private static readonly ulong[] blake2b_IV = + // Produced from the square root of primes 2, 3, 5, 7, 11, 13, 17, 19. + // The same as SHA-512 IV. + { + 0x6a09e667f3bcc908UL, 0xbb67ae8584caa73bUL, 0x3c6ef372fe94f82bUL, + 0xa54ff53a5f1d36f1UL, 0x510e527fade682d1UL, 0x9b05688c2b3e6c1fUL, + 0x1f83d9abfb41bd6bUL, 0x5be0cd19137e2179UL + }; + + // Message word permutations: + private static readonly byte[,] blake2b_sigma = + { + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, + { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 }, + { 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 }, + { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 }, + { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 }, + { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 }, + { 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 }, + { 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 }, + { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 }, + { 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0 }, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, + { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } + }; + + private const int ROUNDS = 12; // to use for Catenas H' + private const int BLOCK_LENGTH_BYTES = 128;// bytes + + // General parameters: + private int digestLength = 64; // 1- 64 bytes + private int keyLength = 0; // 0 - 64 bytes for keyed hashing for MAC + private byte[] salt = null;// new byte[16]; + private byte[] personalization = null;// new byte[16]; + + // the key + private byte[] key = null; + + // Tree hashing parameters: + // Because this class does not implement the Tree Hashing Mode, + // these parameters can be treated as constants (see init() function) + /* + * private int fanout = 1; // 0-255 private int depth = 1; // 1 - 255 + * private int leafLength= 0; private long nodeOffset = 0L; private int + * nodeDepth = 0; private int innerHashLength = 0; + */ + + // whenever this buffer overflows, it will be processed + // in the Compress() function. + // For performance issues, long messages will not use this buffer. + private byte[] buffer = null;// new byte[BLOCK_LENGTH_BYTES]; + // Position of last inserted byte: + private int bufferPos = 0;// a value from 0 up to 128 + + private ulong[] internalState = new ulong[16]; // In the Blake2b paper it is + // called: v + private ulong[] chainValue = null; // state vector, in the Blake2b paper it + // is called: h + + private ulong t0 = 0UL; // holds last significant bits, counter (counts bytes) + private ulong t1 = 0UL; // counter: Length up to 2^128 are supported + private ulong f0 = 0UL; // finalization flag, for last block: ~0L + + // For Tree Hashing Mode, not used here: + // private long f1 = 0L; // finalization flag, for last node: ~0L + + public Blake2bDigest() + : this(512) + { + } + + public Blake2bDigest(Blake2bDigest digest) + { + this.bufferPos = digest.bufferPos; + this.buffer = Arrays.Clone(digest.buffer); + this.keyLength = digest.keyLength; + this.key = Arrays.Clone(digest.key); + this.digestLength = digest.digestLength; + this.chainValue = Arrays.Clone(digest.chainValue); + this.personalization = Arrays.Clone(digest.personalization); + this.salt = Arrays.Clone(digest.salt); + this.t0 = digest.t0; + this.t1 = digest.t1; + this.f0 = digest.f0; + } + + /** + * Basic sized constructor - size in bits. + * + * @param digestSize size of the digest in bits + */ + public Blake2bDigest(int digestSize) + { + if (digestSize < 8 || digestSize > 512 || digestSize % 8 != 0) + throw new ArgumentException("BLAKE2b digest bit length must be a multiple of 8 and not greater than 512"); + + buffer = new byte[BLOCK_LENGTH_BYTES]; + keyLength = 0; + this.digestLength = digestSize / 8; + Init(); + } + + /** + * Blake2b for authentication ("Prefix-MAC mode"). + * After calling the doFinal() method, the key will + * remain to be used for further computations of + * this instance. + * The key can be overwritten using the clearKey() method. + * + * @param key A key up to 64 bytes or null + */ + public Blake2bDigest(byte[] key) + { + buffer = new byte[BLOCK_LENGTH_BYTES]; + if (key != null) + { + this.key = new byte[key.Length]; + Array.Copy(key, 0, this.key, 0, key.Length); + + if (key.Length > 64) + throw new ArgumentException("Keys > 64 are not supported"); + + keyLength = key.Length; + Array.Copy(key, 0, buffer, 0, key.Length); + bufferPos = BLOCK_LENGTH_BYTES; // zero padding + } + digestLength = 64; + Init(); + } + + /** + * Blake2b with key, required digest length (in bytes), salt and personalization. + * After calling the doFinal() method, the key, the salt and the personal string + * will remain and might be used for further computations with this instance. + * The key can be overwritten using the clearKey() method, the salt (pepper) + * can be overwritten using the clearSalt() method. + * + * @param key A key up to 64 bytes or null + * @param digestLength from 1 up to 64 bytes + * @param salt 16 bytes or null + * @param personalization 16 bytes or null + */ + public Blake2bDigest(byte[] key, int digestLength, byte[] salt, byte[] personalization) + { + if (digestLength < 1 || digestLength > 64) + throw new ArgumentException("Invalid digest length (required: 1 - 64)"); + + this.digestLength = digestLength; + this.buffer = new byte[BLOCK_LENGTH_BYTES]; + + if (salt != null) + { + if (salt.Length != 16) + throw new ArgumentException("salt length must be exactly 16 bytes"); + + this.salt = new byte[16]; + Array.Copy(salt, 0, this.salt, 0, salt.Length); + } + if (personalization != null) + { + if (personalization.Length != 16) + throw new ArgumentException("personalization length must be exactly 16 bytes"); + + this.personalization = new byte[16]; + Array.Copy(personalization, 0, this.personalization, 0, personalization.Length); + } + if (key != null) + { + if (key.Length > 64) + throw new ArgumentException("Keys > 64 are not supported"); + + this.key = new byte[key.Length]; + Array.Copy(key, 0, this.key, 0, key.Length); + + keyLength = key.Length; + Array.Copy(key, 0, buffer, 0, key.Length); + bufferPos = BLOCK_LENGTH_BYTES; // zero padding + } + Init(); + } + + // initialize chainValue + private void Init() + { + if (chainValue == null) + { + chainValue = new ulong[8]; + + chainValue[0] = blake2b_IV[0] ^ (ulong)(digestLength | (keyLength << 8) | 0x1010000); + + // 0x1010000 = ((fanout << 16) | (depth << 24) | (leafLength << + // 32)); + // with fanout = 1; depth = 0; leafLength = 0; + chainValue[1] = blake2b_IV[1];// ^ nodeOffset; with nodeOffset = 0; + chainValue[2] = blake2b_IV[2];// ^ ( nodeDepth | (innerHashLength << 8) ); + // with nodeDepth = 0; innerHashLength = 0; + + chainValue[3] = blake2b_IV[3]; + + chainValue[4] = blake2b_IV[4]; + chainValue[5] = blake2b_IV[5]; + if (salt != null) + { + chainValue[4] ^= Pack.LE_To_UInt64(salt, 0); + chainValue[5] ^= Pack.LE_To_UInt64(salt, 8); + } + + chainValue[6] = blake2b_IV[6]; + chainValue[7] = blake2b_IV[7]; + if (personalization != null) + { + chainValue[6] ^= Pack.LE_To_UInt64(personalization, 0); + chainValue[7] ^= Pack.LE_To_UInt64(personalization, 8); + } + } + } + + private void InitializeInternalState() + { + // initialize v: + Array.Copy(chainValue, 0, internalState, 0, chainValue.Length); + Array.Copy(blake2b_IV, 0, internalState, chainValue.Length, 4); + internalState[12] = t0 ^ blake2b_IV[4]; + internalState[13] = t1 ^ blake2b_IV[5]; + internalState[14] = f0 ^ blake2b_IV[6]; + internalState[15] = blake2b_IV[7];// ^ f1 with f1 = 0 + } + + /** + * update the message digest with a single byte. + * + * @param b the input byte to be entered. + */ + public void Update(byte b) + { + // process the buffer if full else add to buffer: + int remainingLength = BLOCK_LENGTH_BYTES - bufferPos; + if (remainingLength == 0) + { // full buffer + t0 += BLOCK_LENGTH_BYTES; + if (t0 == 0) + { // if message > 2^64 + t1++; + } +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Compress(buffer); +#else + Compress(buffer, 0); +#endif + Array.Clear(buffer, 0, buffer.Length);// clear buffer + buffer[0] = b; + bufferPos = 1; + } + else + { + buffer[bufferPos] = b; + bufferPos++; + } + } + + /** + * update the message digest with a block of bytes. + * + * @param message the byte array containing the data. + * @param offset the offset into the byte array where the data starts. + * @param len the length of the data. + */ + public void BlockUpdate(byte[] message, int offset, int len) + { + if (message == null || len == 0) + return; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BlockUpdate(message.AsSpan(offset, len)); +#else + int remainingLength = 0; // left bytes of buffer + + if (bufferPos != 0) + { // commenced, incomplete buffer + + // complete the buffer: + remainingLength = BLOCK_LENGTH_BYTES - bufferPos; + if (remainingLength < len) + { // full buffer + at least 1 byte + Array.Copy(message, offset, buffer, bufferPos, remainingLength); + t0 += BLOCK_LENGTH_BYTES; + if (t0 == 0) + { // if message > 2^64 + t1++; + } + Compress(buffer, 0); + bufferPos = 0; + Array.Clear(buffer, 0, buffer.Length);// clear buffer + } + else + { + Array.Copy(message, offset, buffer, bufferPos, len); + bufferPos += len; + return; + } + } + + // process blocks except last block (also if last block is full) + int messagePos; + int blockWiseLastPos = offset + len - BLOCK_LENGTH_BYTES; + for (messagePos = offset + remainingLength; messagePos < blockWiseLastPos; messagePos += BLOCK_LENGTH_BYTES) + { // block wise 128 bytes + // without buffer: + t0 += BLOCK_LENGTH_BYTES; + if (t0 == 0) + { + t1++; + } + Compress(message, messagePos); + } + + // fill the buffer with left bytes, this might be a full block + Array.Copy(message, messagePos, buffer, 0, offset + len - messagePos); + bufferPos += offset + len - messagePos; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + if (input.IsEmpty) + return; + + int remainingLength = 0; // left bytes of buffer + + if (bufferPos != 0) + { // commenced, incomplete buffer + + // complete the buffer: + remainingLength = BLOCK_LENGTH_BYTES - bufferPos; + if (remainingLength < input.Length) + { // full buffer + at least 1 byte + input[..remainingLength].CopyTo(buffer.AsSpan(bufferPos)); + t0 += BLOCK_LENGTH_BYTES; + if (t0 == 0) + { // if message > 2^64 + t1++; + } + Compress(buffer); + bufferPos = 0; + Array.Clear(buffer, 0, buffer.Length);// clear buffer + } + else + { + input.CopyTo(buffer.AsSpan(bufferPos)); + bufferPos += input.Length; + return; + } + } + + // process blocks except last block (also if last block is full) + int messagePos; + int blockWiseLastPos = input.Length - BLOCK_LENGTH_BYTES; + for (messagePos = remainingLength; messagePos < blockWiseLastPos; messagePos += BLOCK_LENGTH_BYTES) + { // block wise 128 bytes + // without buffer: + t0 += BLOCK_LENGTH_BYTES; + if (t0 == 0) + { + t1++; + } + Compress(input[messagePos..]); + } + + // fill the buffer with left bytes, this might be a full block + input[messagePos..].CopyTo(buffer.AsSpan()); + bufferPos += input.Length - messagePos; + } +#endif + + /** + * close the digest, producing the final digest value. The doFinal + * call leaves the digest reset. + * Key, salt and personal string remain. + * + * @param out the array the digest is to be copied into. + * @param outOffset the offset into the out array the digest is to start at. + */ + public int DoFinal(byte[] output, int outOffset) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(output.AsSpan(outOffset)); +#else + f0 = 0xFFFFFFFFFFFFFFFFUL; + t0 += (ulong)bufferPos; + if (bufferPos > 0 && t0 == 0) + { + t1++; + } + Compress(buffer, 0); + Array.Clear(buffer, 0, buffer.Length);// Holds eventually the key if input is null + Array.Clear(internalState, 0, internalState.Length); + + int full = digestLength >> 3, partial = digestLength & 7; + Pack.UInt64_To_LE(chainValue, 0, full, output, outOffset); + if (partial > 0) + { + byte[] bytes = new byte[8]; + Pack.UInt64_To_LE(chainValue[full], bytes, 0); + Array.Copy(bytes, 0, output, outOffset + digestLength - partial, partial); + } + + Array.Clear(chainValue, 0, chainValue.Length); + + Reset(); + + return digestLength; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + f0 = 0xFFFFFFFFFFFFFFFFUL; + t0 += (ulong)bufferPos; + if (bufferPos > 0 && t0 == 0) + { + t1++; + } + Compress(buffer); + Array.Clear(buffer, 0, buffer.Length);// Holds eventually the key if input is null + Array.Clear(internalState, 0, internalState.Length); + + int full = digestLength >> 3, partial = digestLength & 7; + Pack.UInt64_To_LE(chainValue.AsSpan(0, full), output); + if (partial > 0) + { + Span bytes = stackalloc byte[8]; + Pack.UInt64_To_LE(chainValue[full], bytes); + bytes[..partial].CopyTo(output[(digestLength - partial)..]); + } + + Array.Clear(chainValue, 0, chainValue.Length); + + Reset(); + + return digestLength; + } +#endif + + /** + * Reset the digest back to it's initial state. + * The key, the salt and the personal string will + * remain for further computations. + */ + public void Reset() + { + bufferPos = 0; + f0 = 0L; + t0 = 0L; + t1 = 0L; + chainValue = null; + Array.Clear(buffer, 0, buffer.Length); + if (key != null) + { + Array.Copy(key, 0, buffer, 0, key.Length); + bufferPos = BLOCK_LENGTH_BYTES; // zero padding + } + Init(); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void Compress(ReadOnlySpan message) + { + InitializeInternalState(); + + Span m = stackalloc ulong[16]; + Pack.LE_To_UInt64(message, m); + + for (int round = 0; round < ROUNDS; round++) + { + // G apply to columns of internalState:m[blake2b_sigma[round][2 * blockPos]] /+1 + G(m[blake2b_sigma[round, 0]], m[blake2b_sigma[round, 1]], 0, 4, 8, 12); + G(m[blake2b_sigma[round, 2]], m[blake2b_sigma[round, 3]], 1, 5, 9, 13); + G(m[blake2b_sigma[round, 4]], m[blake2b_sigma[round, 5]], 2, 6, 10, 14); + G(m[blake2b_sigma[round, 6]], m[blake2b_sigma[round, 7]], 3, 7, 11, 15); + // G apply to diagonals of internalState: + G(m[blake2b_sigma[round, 8]], m[blake2b_sigma[round, 9]], 0, 5, 10, 15); + G(m[blake2b_sigma[round, 10]], m[blake2b_sigma[round, 11]], 1, 6, 11, 12); + G(m[blake2b_sigma[round, 12]], m[blake2b_sigma[round, 13]], 2, 7, 8, 13); + G(m[blake2b_sigma[round, 14]], m[blake2b_sigma[round, 15]], 3, 4, 9, 14); + } + + // update chain values: + for (int offset = 0; offset < chainValue.Length; offset++) + { + chainValue[offset] = chainValue[offset] ^ internalState[offset] ^ internalState[offset + 8]; + } + } +#else + private void Compress(byte[] message, int messagePos) + { + InitializeInternalState(); + + ulong[] m = new ulong[16]; + Pack.LE_To_UInt64(message, messagePos, m); + + for (int round = 0; round < ROUNDS; round++) + { + // G apply to columns of internalState:m[blake2b_sigma[round][2 * blockPos]] /+1 + G(m[blake2b_sigma[round,0]], m[blake2b_sigma[round,1]], 0, 4, 8, 12); + G(m[blake2b_sigma[round,2]], m[blake2b_sigma[round,3]], 1, 5, 9, 13); + G(m[blake2b_sigma[round,4]], m[blake2b_sigma[round,5]], 2, 6, 10, 14); + G(m[blake2b_sigma[round,6]], m[blake2b_sigma[round,7]], 3, 7, 11, 15); + // G apply to diagonals of internalState: + G(m[blake2b_sigma[round,8]], m[blake2b_sigma[round,9]], 0, 5, 10, 15); + G(m[blake2b_sigma[round,10]], m[blake2b_sigma[round,11]], 1, 6, 11, 12); + G(m[blake2b_sigma[round,12]], m[blake2b_sigma[round,13]], 2, 7, 8, 13); + G(m[blake2b_sigma[round,14]], m[blake2b_sigma[round,15]], 3, 4, 9, 14); + } + + // update chain values: + for (int offset = 0; offset < chainValue.Length; offset++) + { + chainValue[offset] = chainValue[offset] ^ internalState[offset] ^ internalState[offset + 8]; + } + } +#endif + +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private void G(ulong m1, ulong m2, int posA, int posB, int posC, int posD) + { + internalState[posA] = internalState[posA] + internalState[posB] + m1; + internalState[posD] = Rotr64(internalState[posD] ^ internalState[posA], 32); + internalState[posC] = internalState[posC] + internalState[posD]; + internalState[posB] = Rotr64(internalState[posB] ^ internalState[posC], 24); // replaces 25 of BLAKE + internalState[posA] = internalState[posA] + internalState[posB] + m2; + internalState[posD] = Rotr64(internalState[posD] ^ internalState[posA], 16); + internalState[posC] = internalState[posC] + internalState[posD]; + internalState[posB] = Rotr64(internalState[posB] ^ internalState[posC], 63); // replaces 11 of BLAKE + } + + private static ulong Rotr64(ulong x, int rot) + { + return x >> rot | x << -rot; + } + + /** + * return the algorithm name + * + * @return the algorithm name + */ + public string AlgorithmName => "BLAKE2b"; + + /** + * return the size, in bytes, of the digest produced by this message digest. + * + * @return the size, in bytes, of the digest produced by this message digest. + */ + public int GetDigestSize() + { + return digestLength; + } + + /** + * Return the size in bytes of the internal buffer the digest applies it's compression + * function to. + * + * @return byte length of the digests internal buffer. + */ + public int GetByteLength() + { + return BLOCK_LENGTH_BYTES; + } + + /** + * Overwrite the key + * if it is no longer used (zeroization) + */ + public void ClearKey() + { + if (key != null) + { + Array.Clear(key, 0, key.Length); + Array.Clear(buffer, 0, buffer.Length); + } + } + + /** + * Overwrite the salt (pepper) if it + * is secret and no longer used (zeroization) + */ + public void ClearSalt() + { + if (salt != null) + { + Array.Clear(salt, 0, salt.Length); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake2bDigest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake2bDigest.cs.meta new file mode 100644 index 000000000..d6d972119 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake2bDigest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a1380ac762da4394197da48540465160 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake2sDigest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake2sDigest.cs new file mode 100644 index 000000000..946019524 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake2sDigest.cs @@ -0,0 +1,684 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER +using System.Runtime.CompilerServices; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /* + The BLAKE2 cryptographic hash function was designed by Jean- + Philippe Aumasson, Samuel Neves, Zooko Wilcox-O'Hearn, and Christian + Winnerlein. + + Reference Implementation and Description can be found at: https://blake2.net/ + RFC: https://tools.ietf.org/html/rfc7693 + + This implementation does not support the Tree Hashing Mode. + + For unkeyed hashing, developers adapting BLAKE2 to ASN.1 - based + message formats SHOULD use the OID tree at x = 1.3.6.1.4.1.1722.12.2. + + Algorithm | Target | Collision | Hash | Hash ASN.1 | + Identifier | Arch | Security | nn | OID Suffix | + ---------------+--------+-----------+------+------------+ + id-blake2s128 | 32-bit | 2**64 | 16 | x.2.4 | + id-blake2s160 | 32-bit | 2**80 | 20 | x.2.5 | + id-blake2s224 | 32-bit | 2**112 | 28 | x.2.7 | + id-blake2s256 | 32-bit | 2**128 | 32 | x.2.8 | + ---------------+--------+-----------+------+------------+ + */ + + /** + * Implementation of the cryptographic hash function BLAKE2s. + *

+ * BLAKE2s offers a built-in keying mechanism to be used directly + * for authentication ("Prefix-MAC") rather than a HMAC construction. + *

+ * BLAKE2s offers a built-in support for a salt for randomized hashing + * and a personal string for defining a unique hash function for each application. + *

+ * BLAKE2s is optimized for 32-bit platforms and produces digests of any size + * between 1 and 32 bytes. + */ + public sealed class Blake2sDigest + : IDigest + { + /** + * BLAKE2s Initialization Vector + **/ + private static readonly uint[] blake2s_IV = + // Produced from the square root of primes 2, 3, 5, 7, 11, 13, 17, 19. + // The same as SHA-256 IV. + { + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, + 0xa54ff53a, 0x510e527f, 0x9b05688c, + 0x1f83d9ab, 0x5be0cd19 + }; + + /** + * Message word permutations + **/ + private static readonly byte[,] blake2s_sigma = + { + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, + { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 }, + { 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 }, + { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 }, + { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 }, + { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 }, + { 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 }, + { 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 }, + { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 }, + { 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0 } + }; + + private const int ROUNDS = 10; // to use for Catenas H' + private const int BLOCK_LENGTH_BYTES = 64;// bytes + + // General parameters: + private int digestLength = 32; // 1- 32 bytes + private int keyLength = 0; // 0 - 32 bytes for keyed hashing for MAC + private byte[] salt = null; + private byte[] personalization = null; + private byte[] key = null; + + // Tree hashing parameters: + // The Tree Hashing Mode is not supported but these are used for the XOF implementation + private int fanout = 1; // 0-255 + private int depth = 1; // 0-255 + private int leafLength = 0; + private long nodeOffset = 0L; + private int nodeDepth = 0; + private int innerHashLength = 0; + + /** + * Whenever this buffer overflows, it will be processed in the Compress() + * function. For performance issues, long messages will not use this buffer. + */ + private byte[] buffer = null; + /** + * Position of last inserted byte + **/ + private int bufferPos = 0;// a value from 0 up to BLOCK_LENGTH_BYTES + + /** + * Internal state, in the BLAKE2 paper it is called v + **/ + private uint[] internalState = new uint[16]; + /** + * State vector, in the BLAKE2 paper it is called h + **/ + private uint[] chainValue = null; + + // counter (counts bytes): Length up to 2^64 are supported + /** + * holds least significant bits of counter + **/ + private uint t0 = 0; + /** + * holds most significant bits of counter + **/ + private uint t1 = 0; + /** + * finalization flag, for last block: ~0 + **/ + private uint f0 = 0; + + // For Tree Hashing Mode, not used here: + // private long f1 = 0L; // finalization flag, for last node: ~0L + + /** + * BLAKE2s-256 for hashing. + */ + public Blake2sDigest() + : this(256) + { + } + + public Blake2sDigest(Blake2sDigest digest) + { + this.bufferPos = digest.bufferPos; + this.buffer = Arrays.Clone(digest.buffer); + this.keyLength = digest.keyLength; + this.key = Arrays.Clone(digest.key); + this.digestLength = digest.digestLength; + this.internalState = Arrays.Clone(digest.internalState); + this.chainValue = Arrays.Clone(digest.chainValue); + this.t0 = digest.t0; + this.t1 = digest.t1; + this.f0 = digest.f0; + this.salt = Arrays.Clone(digest.salt); + this.personalization = Arrays.Clone(digest.personalization); + this.fanout = digest.fanout; + this.depth = digest.depth; + this.leafLength = digest.leafLength; + this.nodeOffset = digest.nodeOffset; + this.nodeDepth = digest.nodeDepth; + this.innerHashLength = digest.innerHashLength; + } + + /** + * BLAKE2s for hashing. + * + * @param digestBits the desired digest length in bits. Must be a multiple of 8 and less than 256. + */ + public Blake2sDigest(int digestBits) + { + if (digestBits < 8 || digestBits > 256 || digestBits % 8 != 0) + throw new ArgumentException("BLAKE2s digest bit length must be a multiple of 8 and not greater than 256"); + + digestLength = digestBits / 8; + + Init(null, null, null); + } + + /** + * BLAKE2s for authentication ("Prefix-MAC mode"). + *

+ * After calling the doFinal() method, the key will remain to be used for + * further computations of this instance. The key can be overwritten using + * the clearKey() method. + * + * @param key a key up to 32 bytes or null + */ + public Blake2sDigest(byte[] key) + { + Init(null, null, key); + } + + /** + * BLAKE2s with key, required digest length, salt and personalization. + *

+ * After calling the doFinal() method, the key, the salt and the personal + * string will remain and might be used for further computations with this + * instance. The key can be overwritten using the clearKey() method, the + * salt (pepper) can be overwritten using the clearSalt() method. + * + * @param key a key up to 32 bytes or null + * @param digestBytes from 1 up to 32 bytes + * @param salt 8 bytes or null + * @param personalization 8 bytes or null + */ + public Blake2sDigest(byte[] key, int digestBytes, byte[] salt, byte[] personalization) + { + if (digestBytes < 1 || digestBytes > 32) + throw new ArgumentException("Invalid digest length (required: 1 - 32)"); + + this.digestLength = digestBytes; + + Init(salt, personalization, key); + } + + // XOF root hash parameters + internal Blake2sDigest(int digestBytes, byte[] key, byte[] salt, byte[] personalization, long offset) + { + digestLength = digestBytes; + nodeOffset = offset; + + Init(salt, personalization, key); + } + + // XOF internal hash parameters + internal Blake2sDigest(int digestBytes, int hashLength, long offset) + { + digestLength = digestBytes; + nodeOffset = offset; + fanout = 0; + depth = 0; + leafLength = hashLength; + innerHashLength = hashLength; + nodeDepth = 0; + + Init(null, null, null); + } + + // initialize the digest's parameters + private void Init(byte[] salt, byte[] personalization, byte[] key) + { + buffer = new byte[BLOCK_LENGTH_BYTES]; + + if (key != null && key.Length > 0) + { + keyLength = key.Length; + if (keyLength > 32) + throw new ArgumentException("Keys > 32 bytes are not supported"); + + this.key = new byte[keyLength]; + Array.Copy(key, 0, this.key, 0, keyLength); + Array.Copy(key, 0, buffer, 0, keyLength); + bufferPos = BLOCK_LENGTH_BYTES; // zero padding + } + + if (chainValue == null) + { + chainValue = new uint[8]; + + chainValue[0] = blake2s_IV[0] + ^ (uint)(digestLength | (keyLength << 8) | ((fanout << 16) | (depth << 24))); + chainValue[1] = blake2s_IV[1] ^ (uint)leafLength; + + int nofHi = (int)(nodeOffset >> 32); + int nofLo = (int)nodeOffset; + chainValue[2] = blake2s_IV[2] ^ (uint)nofLo; + chainValue[3] = blake2s_IV[3] ^ (uint)(nofHi | (nodeDepth << 16) | (innerHashLength << 24)); + + chainValue[4] = blake2s_IV[4]; + chainValue[5] = blake2s_IV[5]; + if (salt != null) + { + if (salt.Length != 8) + throw new ArgumentException("Salt length must be exactly 8 bytes"); + + this.salt = new byte[8]; + Array.Copy(salt, 0, this.salt, 0, salt.Length); + + chainValue[4] ^= Pack.LE_To_UInt32(salt, 0); + chainValue[5] ^= Pack.LE_To_UInt32(salt, 4); + } + + chainValue[6] = blake2s_IV[6]; + chainValue[7] = blake2s_IV[7]; + if (personalization != null) + { + if (personalization.Length != 8) + throw new ArgumentException("Personalization length must be exactly 8 bytes"); + + this.personalization = new byte[8]; + Array.Copy(personalization, 0, this.personalization, 0, personalization.Length); + + chainValue[6] ^= Pack.LE_To_UInt32(personalization, 0); + chainValue[7] ^= Pack.LE_To_UInt32(personalization, 4); + } + } + } + + private void InitializeInternalState() + { + // initialize v: + Array.Copy(chainValue, 0, internalState, 0, chainValue.Length); + Array.Copy(blake2s_IV, 0, internalState, chainValue.Length, 4); + internalState[12] = t0 ^ blake2s_IV[4]; + internalState[13] = t1 ^ blake2s_IV[5]; + internalState[14] = f0 ^ blake2s_IV[6]; + internalState[15] = blake2s_IV[7];// ^ f1 with f1 = 0 + } + + /** + * Update the message digest with a single byte. + * + * @param b the input byte to be entered. + */ + public void Update(byte b) + { + // process the buffer if full else add to buffer: + int remainingLength = BLOCK_LENGTH_BYTES - bufferPos; + if (remainingLength == 0) + { // full buffer + t0 += BLOCK_LENGTH_BYTES; + if (t0 == 0) + { // if message > 2^32 + t1++; + } +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Compress(buffer); +#else + Compress(buffer, 0); +#endif + Array.Clear(buffer, 0, buffer.Length);// clear buffer + buffer[0] = b; + bufferPos = 1; + } + else + { + buffer[bufferPos] = b; + bufferPos++; + } + } + + /** + * Update the message digest with a block of bytes. + * + * @param message the byte array containing the data. + * @param offset the offset into the byte array where the data starts. + * @param len the length of the data. + */ + public void BlockUpdate(byte[] message, int offset, int len) + { + if (message == null || len == 0) + return; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BlockUpdate(message.AsSpan(offset, len)); +#else + int remainingLength = 0; // left bytes of buffer + + if (bufferPos != 0) + { // commenced, incomplete buffer + + // complete the buffer: + remainingLength = BLOCK_LENGTH_BYTES - bufferPos; + if (remainingLength < len) + { // full buffer + at least 1 byte + Array.Copy(message, offset, buffer, bufferPos, remainingLength); + t0 += BLOCK_LENGTH_BYTES; + if (t0 == 0) + { // if message > 2^32 + t1++; + } + Compress(buffer, 0); + bufferPos = 0; + Array.Clear(buffer, 0, buffer.Length);// clear buffer + } + else + { + Array.Copy(message, offset, buffer, bufferPos, len); + bufferPos += len; + return; + } + } + + // process blocks except last block (also if last block is full) + int messagePos; + int blockWiseLastPos = offset + len - BLOCK_LENGTH_BYTES; + for (messagePos = offset + remainingLength; + messagePos < blockWiseLastPos; + messagePos += BLOCK_LENGTH_BYTES) + { // block wise 64 bytes + // without buffer: + t0 += BLOCK_LENGTH_BYTES; + if (t0 == 0) + { + t1++; + } + Compress(message, messagePos); + } + + // fill the buffer with left bytes, this might be a full block + Array.Copy(message, messagePos, buffer, 0, offset + len + - messagePos); + bufferPos += offset + len - messagePos; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + if (input.IsEmpty) + return; + + int remainingLength = 0; // left bytes of buffer + + if (bufferPos != 0) + { // commenced, incomplete buffer + + // complete the buffer: + remainingLength = BLOCK_LENGTH_BYTES - bufferPos; + if (remainingLength < input.Length) + { // full buffer + at least 1 byte + input[..remainingLength].CopyTo(buffer.AsSpan(bufferPos)); + t0 += BLOCK_LENGTH_BYTES; + if (t0 == 0) + { // if message > 2^32 + t1++; + } + Compress(buffer); + bufferPos = 0; + Array.Clear(buffer, 0, buffer.Length);// clear buffer + } + else + { + input.CopyTo(buffer.AsSpan(bufferPos)); + bufferPos += input.Length; + return; + } + } + + // process blocks except last block (also if last block is full) + int messagePos; + int blockWiseLastPos = input.Length - BLOCK_LENGTH_BYTES; + for (messagePos = remainingLength; + messagePos < blockWiseLastPos; + messagePos += BLOCK_LENGTH_BYTES) + { // block wise 64 bytes + // without buffer: + t0 += BLOCK_LENGTH_BYTES; + if (t0 == 0) + { + t1++; + } + Compress(input[messagePos..]); + } + + // fill the buffer with left bytes, this might be a full block + input[messagePos..].CopyTo(buffer.AsSpan()); + bufferPos += input.Length - messagePos; + } +#endif + + /** + * Close the digest, producing the final digest value. The doFinal() call + * leaves the digest reset. Key, salt and personal string remain. + * + * @param out the array the digest is to be copied into. + * @param outOffset the offset into the out array the digest is to start at. + */ + public int DoFinal(byte[] output, int outOffset) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(output.AsSpan(outOffset)); +#else + f0 = 0xFFFFFFFFU; + t0 += (uint)bufferPos; + // bufferPos may be < 64, so (t0 == 0) does not work + // for 2^32 < message length > 2^32 - 63 + if ((t0 < 0) && (bufferPos > -t0)) + { + t1++; + } + Compress(buffer, 0); + Array.Clear(buffer, 0, buffer.Length);// Holds eventually the key if input is null + Array.Clear(internalState, 0, internalState.Length); + + int full = digestLength >> 2, partial = digestLength & 3; + Pack.UInt32_To_LE(chainValue, 0, full, output, outOffset); + if (partial > 0) + { + byte[] bytes = new byte[4]; + Pack.UInt32_To_LE(chainValue[full], bytes, 0); + Array.Copy(bytes, 0, output, outOffset + digestLength - partial, partial); + } + + Array.Clear(chainValue, 0, chainValue.Length); + + Reset(); + + return digestLength; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + f0 = 0xFFFFFFFFU; + t0 += (uint)bufferPos; + // bufferPos may be < 64, so (t0 == 0) does not work + // for 2^32 < message length > 2^32 - 63 + if ((t0 < 0) && (bufferPos > -t0)) + { + t1++; + } + Compress(buffer); + Array.Clear(buffer, 0, buffer.Length);// Holds eventually the key if input is null + Array.Clear(internalState, 0, internalState.Length); + + int full = digestLength >> 2, partial = digestLength & 3; + Pack.UInt32_To_LE(chainValue.AsSpan(0, full), output); + if (partial > 0) + { + Span bytes = stackalloc byte[4]; + Pack.UInt32_To_LE(chainValue[full], bytes); + bytes[..partial].CopyTo(output[(digestLength - partial)..]); + } + + Array.Clear(chainValue, 0, chainValue.Length); + + Reset(); + + return digestLength; + } +#endif + + /** + * Reset the digest back to its initial state. The key, the salt and the + * personal string will remain for further computations. + */ + public void Reset() + { + bufferPos = 0; + f0 = 0; + t0 = 0; + t1 = 0; + chainValue = null; + Array.Clear(buffer, 0, buffer.Length); + if (key != null) + { + Array.Copy(key, 0, buffer, 0, key.Length); + bufferPos = BLOCK_LENGTH_BYTES; // zero padding + } + + Init(this.salt, this.personalization, this.key); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void Compress(ReadOnlySpan message) + { + InitializeInternalState(); + + Span m = stackalloc uint[16]; + Pack.LE_To_UInt32(message, m); + + for (int round = 0; round < ROUNDS; round++) + { + // G apply to columns of internalState: m[blake2s_sigma[round][2 * blockPos]] /+1 + G(m[blake2s_sigma[round, 0]], m[blake2s_sigma[round, 1]], 0, 4, 8, 12); + G(m[blake2s_sigma[round, 2]], m[blake2s_sigma[round, 3]], 1, 5, 9, 13); + G(m[blake2s_sigma[round, 4]], m[blake2s_sigma[round, 5]], 2, 6, 10, 14); + G(m[blake2s_sigma[round, 6]], m[blake2s_sigma[round, 7]], 3, 7, 11, 15); + // G apply to diagonals of internalState: + G(m[blake2s_sigma[round, 8]], m[blake2s_sigma[round, 9]], 0, 5, 10, 15); + G(m[blake2s_sigma[round, 10]], m[blake2s_sigma[round, 11]], 1, 6, 11, 12); + G(m[blake2s_sigma[round, 12]], m[blake2s_sigma[round, 13]], 2, 7, 8, 13); + G(m[blake2s_sigma[round, 14]], m[blake2s_sigma[round, 15]], 3, 4, 9, 14); + } + + // update chain values: + for (int offset = 0; offset < chainValue.Length; offset++) + { + chainValue[offset] = chainValue[offset] ^ internalState[offset] ^ internalState[offset + 8]; + } + } +#else + private void Compress(byte[] message, int messagePos) + { + InitializeInternalState(); + + uint[] m = new uint[16]; + Pack.LE_To_UInt32(message, messagePos, m); + + for (int round = 0; round < ROUNDS; round++) + { + // G apply to columns of internalState: m[blake2s_sigma[round][2 * blockPos]] /+1 + G(m[blake2s_sigma[round,0]], m[blake2s_sigma[round,1]], 0, 4, 8, 12); + G(m[blake2s_sigma[round,2]], m[blake2s_sigma[round,3]], 1, 5, 9, 13); + G(m[blake2s_sigma[round,4]], m[blake2s_sigma[round,5]], 2, 6, 10, 14); + G(m[blake2s_sigma[round,6]], m[blake2s_sigma[round,7]], 3, 7, 11, 15); + // G apply to diagonals of internalState: + G(m[blake2s_sigma[round,8]], m[blake2s_sigma[round,9]], 0, 5, 10, 15); + G(m[blake2s_sigma[round,10]], m[blake2s_sigma[round,11]], 1, 6, 11, 12); + G(m[blake2s_sigma[round,12]], m[blake2s_sigma[round,13]], 2, 7, 8, 13); + G(m[blake2s_sigma[round,14]], m[blake2s_sigma[round,15]], 3, 4, 9, 14); + } + + // update chain values: + for (int offset = 0; offset < chainValue.Length; offset++) + { + chainValue[offset] = chainValue[offset] ^ internalState[offset] ^ internalState[offset + 8]; + } + } +#endif + +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private void G(uint m1, uint m2, int posA, int posB, int posC, int posD) + { + internalState[posA] = internalState[posA] + internalState[posB] + m1; + internalState[posD] = Integers.RotateRight(internalState[posD] ^ internalState[posA], 16); + internalState[posC] = internalState[posC] + internalState[posD]; + internalState[posB] = Integers.RotateRight(internalState[posB] ^ internalState[posC], 12); + internalState[posA] = internalState[posA] + internalState[posB] + m2; + internalState[posD] = Integers.RotateRight(internalState[posD] ^ internalState[posA], 8); + internalState[posC] = internalState[posC] + internalState[posD]; + internalState[posB] = Integers.RotateRight(internalState[posB] ^ internalState[posC], 7); + } + + /** + * Return the algorithm name. + * + * @return the algorithm name + */ + public string AlgorithmName => "BLAKE2s"; + + /** + * Return the size in bytes of the digest produced by this message digest. + * + * @return the size in bytes of the digest produced by this message digest. + */ + public int GetDigestSize() + { + return digestLength; + } + + /** + * Return the size in bytes of the internal buffer the digest applies its + * compression function to. + * + * @return byte length of the digest's internal buffer. + */ + public int GetByteLength() + { + return BLOCK_LENGTH_BYTES; + } + + /** + * Overwrite the key if it is no longer used (zeroization). + */ + public void ClearKey() + { + if (key != null) + { + Array.Clear(key, 0, key.Length); + Array.Clear(buffer, 0, buffer.Length); + } + } + + /** + * Overwrite the salt (pepper) if it is secret and no longer used + * (zeroization). + */ + public void ClearSalt() + { + if (salt != null) + { + Array.Clear(salt, 0, salt.Length); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake2sDigest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake2sDigest.cs.meta new file mode 100644 index 000000000..52b4c8004 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake2sDigest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1534bbcd31a51bd478d6266c448de7fc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake2xsDigest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake2xsDigest.cs new file mode 100644 index 000000000..a981223ce --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake2xsDigest.cs @@ -0,0 +1,372 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /* + The BLAKE2 cryptographic hash function was designed by Jean- + Philippe Aumasson, Samuel Neves, Zooko Wilcox-O'Hearn, and Christian + Winnerlein. + + Reference Implementation and Description can be found at: https://blake2.net/blake2x.pdf + */ + + /** + * Implementation of the eXtendable Output Function (XOF) BLAKE2xs. + *

+ * BLAKE2xs offers a built-in keying mechanism to be used directly + * for authentication ("Prefix-MAC") rather than a HMAC construction. + *

+ * BLAKE2xs offers a built-in support for a salt for randomized hashing + * and a personal string for defining a unique hash function for each application. + *

+ * BLAKE2xs is optimized for 32-bit platforms and produces digests of any size + * between 1 and 2^16-2 bytes. The length can also be unknown and then the maximum + * length will be 2^32 blocks of 32 bytes. + */ + public sealed class Blake2xsDigest + : IXof + { + /** + * Magic number to indicate an unknown length of digest + */ + public const int UnknownDigestLength = 65535; + + private const int DigestLength = 32; + private const long MaxNumberBlocks = 1L << 32; + + /** + * Expected digest length for the xof. It can be unknown. + */ + private int digestLength; + + /** + * Root hash that will take the updates + */ + private Blake2sDigest hash; + + /** + * Digest of the root hash + */ + private byte[] h0 = null; + + /** + * Digest of each round of the XOF + */ + private byte[] buf = new byte[32]; + + /** + * Current position for a round + */ + private int bufPos = 32; + + /** + * Overall position of the digest. It is useful when the length is known + * in advance to get last block length. + */ + private int digestPos = 0; + + /** + * Keep track of the round number to detect the end of the digest after + * 2^32 blocks of 32 bytes. + */ + private long blockPos = 0; + + /** + * Current node offset incremented by 1 every round. + */ + private long nodeOffset; + + /** + * BLAKE2xs for hashing with unknown digest length + */ + public Blake2xsDigest() + : this(UnknownDigestLength) + { + } + + /** + * BLAKE2xs for hashing + * + * @param digestBytes The desired digest length in bytes. Must be above 1 and less than 2^16-1 + */ + public Blake2xsDigest(int digestBytes) + : this(digestBytes, null, null, null) + { + } + + /** + * BLAKE2xs with key + * + * @param digestBytes The desired digest length in bytes. Must be above 1 and less than 2^16-1 + * @param key A key up to 32 bytes or null + */ + public Blake2xsDigest(int digestBytes, byte[] key) + : this(digestBytes, key, null, null) + { + } + + /** + * BLAKE2xs with key, salt and personalization + * + * @param digestBytes The desired digest length in bytes. Must be above 1 and less than 2^16-1 + * @param key A key up to 32 bytes or null + * @param salt 8 bytes or null + * @param personalization 8 bytes or null + */ + public Blake2xsDigest(int digestBytes, byte[] key, byte[] salt, byte[] personalization) + { + if (digestBytes < 1 || digestBytes > UnknownDigestLength) + throw new ArgumentException("BLAKE2xs digest length must be between 1 and 2^16-1"); + + digestLength = digestBytes; + nodeOffset = ComputeNodeOffset(); + hash = new Blake2sDigest(DigestLength, key, salt, personalization, nodeOffset); + } + + public Blake2xsDigest(Blake2xsDigest digest) + { + digestLength = digest.digestLength; + hash = new Blake2sDigest(digest.hash); + h0 = Arrays.Clone(digest.h0); + buf = Arrays.Clone(digest.buf); + bufPos = digest.bufPos; + digestPos = digest.digestPos; + blockPos = digest.blockPos; + nodeOffset = digest.nodeOffset; + } + + /** + * Return the algorithm name. + * + * @return the algorithm name + */ + public string AlgorithmName => "BLAKE2xs"; + + /** + * Return the size in bytes of the digest produced by this message digest. + * + * @return the size in bytes of the digest produced by this message digest. + */ + public int GetDigestSize() => digestLength; + + /** + * Return the size in bytes of the internal buffer the digest applies its + * compression function to. + * + * @return byte length of the digest's internal buffer. + */ + public int GetByteLength() => hash.GetByteLength(); + + /** + * Return the maximum size in bytes the digest can produce when the length + * is unknown + * + * @return byte length of the largest digest with unknown length + */ + public long GetUnknownMaxLength() + { + return MaxNumberBlocks * DigestLength; + } + + /** + * Update the message digest with a single byte. + * + * @param in the input byte to be entered. + */ + public void Update(byte b) + { + hash.Update(b); + } + + /** + * Update the message digest with a block of bytes. + * + * @param in the byte array containing the data. + * @param inOff the offset into the byte array where the data starts. + * @param len the length of the data. + */ + public void BlockUpdate(byte[] input, int inOff, int inLen) + { + hash.BlockUpdate(input, inOff, inLen); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + hash.BlockUpdate(input); + } +#endif + + /** + * Reset the digest back to its initial state. The key, the salt and the + * personal string will remain for further computations. + */ + public void Reset() + { + hash.Reset(); + + h0 = null; + bufPos = DigestLength; + digestPos = 0; + blockPos = 0; + nodeOffset = ComputeNodeOffset(); + } + + /** + * Close the digest, producing the final digest value. The doFinal() call + * leaves the digest reset. Key, salt and personal string remain. + * + * @param out the array the digest is to be copied into. + * @param outOffset the offset into the out array the digest is to start at. + */ + public int DoFinal(byte[] output, int outOff) + { + return OutputFinal(output, outOff, digestLength); + } + + /** + * Close the digest, producing the final digest value. The doFinal() call + * leaves the digest reset. Key, salt, personal string remain. + * + * @param out output array to write the output bytes to. + * @param outOff offset to start writing the bytes at. + * @param outLen the number of output bytes requested. + */ + public int OutputFinal(byte[] output, int outOff, int outLen) + { + int ret = Output(output, outOff, outLen); + + Reset(); + + return ret; + } + + /** + * Start outputting the results of the final calculation for this digest. Unlike doFinal, this method + * will continue producing output until the Xof is explicitly reset, or signals otherwise. + * + * @param out output array to write the output bytes to. + * @param outOff offset to start writing the bytes at. + * @param outLen the number of output bytes requested. + * @return the number of bytes written + */ + public int Output(byte[] output, int outOff, int outLen) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return Output(output.AsSpan(outOff, outLen)); +#else + if (h0 == null) + { + h0 = new byte[hash.GetDigestSize()]; + hash.DoFinal(h0, 0); + } + + if (digestLength != UnknownDigestLength) + { + if (digestPos + outLen > digestLength) + throw new ArgumentException("Output length is above the digest length"); + } + else if (blockPos << 5 >= GetUnknownMaxLength()) + { + throw new ArgumentException("Maximum length is 2^32 blocks of 32 bytes"); + } + + for (int i = 0; i < outLen; i++) + { + if (bufPos >= DigestLength) + { + Blake2sDigest h = new Blake2sDigest(ComputeStepLength(), DigestLength, nodeOffset); + h.BlockUpdate(h0, 0, h0.Length); + + Arrays.Fill(buf, 0); + h.DoFinal(buf, 0); + bufPos = 0; + nodeOffset++; + blockPos++; + } + output[outOff + i] = buf[bufPos]; + bufPos++; + digestPos++; + } + + return outLen; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + return OutputFinal(output[..digestLength]); + } + + public int OutputFinal(Span output) + { + int ret = Output(output); + + Reset(); + + return ret; + } + + public int Output(Span output) + { + int outLen = output.Length; + if (h0 == null) + { + h0 = new byte[hash.GetDigestSize()]; + hash.DoFinal(h0); + } + + if (digestLength != UnknownDigestLength) + { + if (digestPos + outLen > digestLength) + throw new ArgumentException("Output length is above the digest length"); + } + else if (blockPos << 5 >= GetUnknownMaxLength()) + { + throw new ArgumentException("Maximum length is 2^32 blocks of 32 bytes"); + } + + for (int i = 0; i < outLen; i++) + { + if (bufPos >= DigestLength) + { + Blake2sDigest h = new Blake2sDigest(ComputeStepLength(), DigestLength, nodeOffset); + h.BlockUpdate(h0); + + Arrays.Fill(buf, 0); + h.DoFinal(buf); + bufPos = 0; + nodeOffset++; + blockPos++; + } + output[i] = buf[bufPos]; + bufPos++; + digestPos++; + } + + return outLen; + } +#endif + + // get the next round length. If the length is unknown, the digest length is always the maximum. + private int ComputeStepLength() + { + if (digestLength == UnknownDigestLength) + return DigestLength; + + return System.Math.Min(DigestLength, digestLength - digestPos); + } + + private long ComputeNodeOffset() + { + return digestLength * 0x100000000L; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake2xsDigest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake2xsDigest.cs.meta new file mode 100644 index 000000000..551ef9f1b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake2xsDigest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f547ae5de0f059b4b9098a1dcb31da14 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake3Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake3Digest.cs new file mode 100644 index 000000000..28e9d9972 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake3Digest.cs @@ -0,0 +1,1051 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER +using System.Runtime.CompilerServices; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + public sealed class Blake3Digest + : IDigest, IMemoable, IXof + { + /** + * Already outputting error. + */ + private const string ERR_OUTPUTTING = "Already outputting"; + + /** + * Number of Words. + */ + private const int NUMWORDS = 8; + + /** + * Number of Rounds. + */ + private const int ROUNDS = 7; + + /** + * Buffer length. + */ + private const int BLOCKLEN = NUMWORDS * Integers.NumBytes * 2; + + /** + * Chunk length. + */ + private const int CHUNKLEN = 1024; + + /** + * ChunkStart Flag. + */ + private const int CHUNKSTART = 1; + + /** + * ChunkEnd Flag. + */ + private const int CHUNKEND = 2; + + /** + * Parent Flag. + */ + private const int PARENT = 4; + + /** + * Root Flag. + */ + private const int ROOT = 8; + + /** + * KeyedHash Flag. + */ + private const int KEYEDHASH = 16; + + /** + * DeriveContext Flag. + */ + private const int DERIVECONTEXT = 32; + + /** + * DeriveKey Flag. + */ + private const int DERIVEKEY = 64; + + /** + * Chaining0 State Locations. + */ + private const int CHAINING0 = 0; + + /** + * Chaining1 State Location. + */ + private const int CHAINING1 = 1; + + /** + * Chaining2 State Location. + */ + private const int CHAINING2 = 2; + + /** + * Chaining3 State Location. + */ + private const int CHAINING3 = 3; + + /** + * Chaining4 State Location. + */ + private const int CHAINING4 = 4; + + /** + * Chaining5 State Location. + */ + private const int CHAINING5 = 5; + + /** + * Chaining6 State Location. + */ + private const int CHAINING6 = 6; + + /** + * Chaining7 State Location. + */ + private const int CHAINING7 = 7; + + /** + * IV0 State Locations. + */ + private const int IV0 = 8; + + /** + * IV1 State Location. + */ + private const int IV1 = 9; + + /** + * IV2 State Location. + */ + private const int IV2 = 10; + + /** + * IV3 State Location. + */ + private const int IV3 = 11; + + /** + * Count0 State Location. + */ + private const int COUNT0 = 12; + + /** + * Count1 State Location. + */ + private const int COUNT1 = 13; + + /** + * DataLen State Location. + */ + private const int DATALEN = 14; + + /** + * Flags State Location. + */ + private const int FLAGS = 15; + + /** + * Message word permutations. + */ + private static readonly byte[] SIGMA = { 2, 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8 }; + + /** + * Blake3 Initialization Vector. + */ + private static readonly uint[] IV = { + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 + }; + + /** + * The byte input/output buffer. + */ + private readonly byte[] m_theBuffer = new byte[BLOCKLEN]; + + /** + * The key. + */ + private readonly uint[] m_theK = new uint[NUMWORDS]; + + /** + * The chaining value. + */ + private readonly uint[] m_theChaining = new uint[NUMWORDS]; + + /** + * The state. + */ + private readonly uint[] m_theV = new uint[NUMWORDS << 1]; + + /** + * The message Buffer. + */ + private readonly uint[] m_theM = new uint[NUMWORDS << 1]; + + /** + * The indices. + */ + private readonly byte[] m_theIndices = new byte[NUMWORDS << 1]; + + /** + * The chainingStack. + */ + private readonly List m_theStack = new List(); + + /** + * The default digestLength. + */ + private readonly int m_theDigestLen; + + /** + * Are we outputting? + */ + private bool m_outputting; + + /** + * How many more bytes can we output? + */ + private long m_outputAvailable; + + /** + * The current mode. + */ + private int m_theMode; + + /** + * The output mode. + */ + private int m_theOutputMode; + + /** + * The output dataLen. + */ + private int m_theOutputDataLen; + + /** + * The block counter. + */ + private long m_theCounter; + + /** + * The # of bytes in the current block. + */ + private int m_theCurrBytes; + + /** + * The position of the next byte in the buffer. + */ + private int m_thePos; + + public Blake3Digest() + : this((BLOCKLEN >> 1) * 8) + { + } + + /// the default digest size (in bits) + public Blake3Digest(int pDigestSize) + { + m_theDigestLen = pDigestSize / 8; + + Init(null); + } + + /** + * Constructor. + * + * @param pSource the source digest. + */ + public Blake3Digest(Blake3Digest pSource) + { + /* Copy default digest length */ + m_theDigestLen = pSource.m_theDigestLen; + + /* Initialise from source */ + Reset(pSource); + } + + public int GetByteLength() => BLOCKLEN; + + public string AlgorithmName => "BLAKE3"; + + public int GetDigestSize() => m_theDigestLen; + + /** + * Initialise. + * + * @param pParams the parameters. + */ + public void Init(Blake3Parameters pParams) + { + /* Access key/context */ + byte[] myKey = pParams?.GetKey(); + byte[] myContext = pParams?.GetContext(); + + /* Reset the digest */ + Reset(); + + /* If we have a key */ + if (myKey != null) + { + /* Initialise with the key */ + InitKey(myKey); + Arrays.Fill(myKey, 0); + + /* else if we have a context */ + } + else if (myContext != null) + { + /* Initialise for deriving context */ + InitNullKey(); + m_theMode = DERIVECONTEXT; + + /* Derive key from context */ + BlockUpdate(myContext, 0, myContext.Length); + DoFinal(m_theBuffer, 0); + InitKeyFromContext(); + Reset(); + + /* Else init null key and reset mode */ + } + else + { + InitNullKey(); + m_theMode = 0; + } + } + + public void Update(byte b) + { + /* Check that we are not outputting */ + if (m_outputting) + throw new InvalidOperationException(ERR_OUTPUTTING); + + /* If the buffer is full */ + int blockLen = m_theBuffer.Length; + int remainingLength = blockLen - m_thePos; + if (remainingLength == 0) + { + /* Process the buffer */ +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + CompressBlock(m_theBuffer); +#else + CompressBlock(m_theBuffer, 0); +#endif + + /* Reset the buffer */ + Arrays.Fill(m_theBuffer, 0); + m_thePos = 0; + } + + /* Store the byte */ + m_theBuffer[m_thePos] = b; + m_thePos++; + } + + public void BlockUpdate(byte[] pMessage, int pOffset, int pLen) + { + /* Ignore null operation */ + if (pMessage == null) + return; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BlockUpdate(pMessage.AsSpan(pOffset, pLen)); +#else + if (pLen == 0) + return; + + /* Check that we are not outputting */ + if (m_outputting) + throw new InvalidOperationException(ERR_OUTPUTTING); + + /* Process any bytes currently in the buffer */ + int remainingLen = 0; // left bytes of buffer + if (m_thePos != 0) + { + /* Calculate space remaining in the buffer */ + remainingLen = BLOCKLEN - m_thePos; + + /* If there is sufficient space in the buffer */ + if (remainingLen >= pLen) + { + /* Copy data into buffer and return */ + Array.Copy(pMessage, pOffset, m_theBuffer, m_thePos, pLen); + m_thePos += pLen; + return; + } + + /* Fill the buffer */ + Array.Copy(pMessage, pOffset, m_theBuffer, m_thePos, remainingLen); + + /* Process the buffer */ + CompressBlock(m_theBuffer, 0); + + /* Reset the buffer */ + m_thePos = 0; + Arrays.Fill(m_theBuffer, 0); + } + + /* process all blocks except the last one */ + int messagePos; + int blockWiseLastPos = pOffset + pLen - BLOCKLEN; + for (messagePos = pOffset + remainingLen; messagePos < blockWiseLastPos; messagePos += BLOCKLEN) + { + /* Process the buffer */ + CompressBlock(pMessage, messagePos); + } + + /* Fill the buffer with the remaining bytes of the message */ + int len = pLen - messagePos; + Array.Copy(pMessage, messagePos, m_theBuffer, 0, pOffset + len); + m_thePos += pOffset + len; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + if (input.IsEmpty) + return; + + /* Check that we are not outputting */ + if (m_outputting) + throw new InvalidOperationException(ERR_OUTPUTTING); + + int pLen = input.Length; + + /* Process any bytes currently in the buffer */ + int remainingLen = 0; // left bytes of buffer + if (m_thePos != 0) + { + /* Calculate space remaining in the buffer */ + remainingLen = BLOCKLEN - m_thePos; + + /* If there is sufficient space in the buffer */ + if (remainingLen >= pLen) + { + /* Copy data into buffer and return */ + input.CopyTo(m_theBuffer.AsSpan(m_thePos)); + m_thePos += pLen; + return; + } + + /* Fill the buffer */ + input[..remainingLen].CopyTo(m_theBuffer.AsSpan(m_thePos)); + + /* Process the buffer */ + CompressBlock(m_theBuffer); + + /* Reset the buffer */ + m_thePos = 0; + Arrays.Fill(m_theBuffer, 0); + } + + /* process all blocks except the last one */ + int messagePos; + int blockWiseLastPos = pLen - BLOCKLEN; + for (messagePos = remainingLen; messagePos < blockWiseLastPos; messagePos += BLOCKLEN) + { + /* Process the buffer */ + CompressBlock(input[messagePos..]); + } + + /* Fill the buffer with the remaining bytes of the message */ + input[messagePos..].CopyTo(m_theBuffer); + m_thePos += pLen - messagePos; + } +#endif + + public int DoFinal(byte[] pOutput, int pOutOffset) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return OutputFinal(pOutput.AsSpan(pOutOffset, GetDigestSize())); +#else + return OutputFinal(pOutput, pOutOffset, GetDigestSize()); +#endif + } + + public int OutputFinal(byte[] pOut, int pOutOffset, int pOutLen) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return OutputFinal(pOut.AsSpan(pOutOffset, pOutLen)); +#else + /* Reject if we are already outputting */ + if (m_outputting) + throw new InvalidOperationException(ERR_OUTPUTTING); + + /* Build the required output */ + int length = Output(pOut, pOutOffset, pOutLen); + + /* reset the underlying digest and return the length */ + Reset(); + return length; +#endif + } + + public int Output(byte[] pOut, int pOutOffset, int pOutLen) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return Output(pOut.AsSpan(pOutOffset, pOutLen)); +#else + /* If we have not started outputting yet */ + if (!m_outputting) + { + /* Process the buffer */ + CompressFinalBlock(m_thePos); + } + + /* Reject if there is insufficient Xof remaining */ + if (pOutLen < 0 || (m_outputAvailable >= 0 && pOutLen > m_outputAvailable)) + throw new ArgumentException("Insufficient bytes remaining"); + + /* If we have some remaining data in the current buffer */ + int dataLeft = pOutLen; + int outPos = pOutOffset; + if (m_thePos < BLOCKLEN) + { + /* Copy data from current hash */ + int dataToCopy = System.Math.Min(dataLeft, BLOCKLEN - m_thePos); + Array.Copy(m_theBuffer, m_thePos, pOut, outPos, dataToCopy); + + /* Adjust counters */ + m_thePos += dataToCopy; + outPos += dataToCopy; + dataLeft -= dataToCopy; + } + + /* Loop until we have completed the request */ + while (dataLeft > 0) + { + /* Calculate the next block */ + NextOutputBlock(); + + /* Copy data from current hash */ + int dataToCopy = System.Math.Min(dataLeft, BLOCKLEN); + Array.Copy(m_theBuffer, 0, pOut, outPos, dataToCopy); + + /* Adjust counters */ + m_thePos += dataToCopy; + outPos += dataToCopy; + dataLeft -= dataToCopy; + } + + /* Adjust outputAvailable */ + m_outputAvailable -= pOutLen; + + /* Return the number of bytes transferred */ + return pOutLen; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + return OutputFinal(output[..GetDigestSize()]); + } + + public int OutputFinal(Span output) + { + /* Reject if we are already outputting */ + if (m_outputting) + throw new InvalidOperationException(ERR_OUTPUTTING); + + /* Build the required output */ + int length = Output(output); + + /* reset the underlying digest and return the length */ + Reset(); + return length; + } + + public int Output(Span output) + { + /* If we have not started outputting yet */ + if (!m_outputting) + { + /* Process the buffer */ + CompressFinalBlock(m_thePos); + } + + int pOutOffset = 0, pOutLen = output.Length; + /* Reject if there is insufficient Xof remaining */ + if (pOutLen < 0 || (m_outputAvailable >= 0 && pOutLen > m_outputAvailable)) + throw new ArgumentException("Insufficient bytes remaining"); + + /* If we have some remaining data in the current buffer */ + int dataLeft = pOutLen; + int outPos = pOutOffset; + if (m_thePos < BLOCKLEN) + { + /* Copy data from current hash */ + int dataToCopy = System.Math.Min(dataLeft, BLOCKLEN - m_thePos); + m_theBuffer.AsSpan(m_thePos, dataToCopy).CopyTo(output[outPos..]); + + /* Adjust counters */ + m_thePos += dataToCopy; + outPos += dataToCopy; + dataLeft -= dataToCopy; + } + + /* Loop until we have completed the request */ + while (dataLeft > 0) + { + /* Calculate the next block */ + NextOutputBlock(); + + /* Copy data from current hash */ + int dataToCopy = System.Math.Min(dataLeft, BLOCKLEN); + m_theBuffer.AsSpan(0, dataToCopy).CopyTo(output[outPos..]); + + /* Adjust counters */ + m_thePos += dataToCopy; + outPos += dataToCopy; + dataLeft -= dataToCopy; + } + + /* Adjust outputAvailable */ + m_outputAvailable -= pOutLen; + + /* Return the number of bytes transferred */ + return pOutLen; + } +#endif + + public void Reset() + { + ResetBlockCount(); + m_thePos = 0; + m_outputting = false; + Arrays.Fill(m_theBuffer, 0); + } + + public void Reset(IMemoable pSource) + { + /* Access source */ + Blake3Digest mySource = (Blake3Digest)pSource; + + /* Reset counter */ + m_theCounter = mySource.m_theCounter; + m_theCurrBytes = mySource.m_theCurrBytes; + m_theMode = mySource.m_theMode; + + /* Reset output state */ + m_outputting = mySource.m_outputting; + m_outputAvailable = mySource.m_outputAvailable; + m_theOutputMode = mySource.m_theOutputMode; + m_theOutputDataLen = mySource.m_theOutputDataLen; + + /* Copy state */ + Array.Copy(mySource.m_theChaining, 0, m_theChaining, 0, m_theChaining.Length); + Array.Copy(mySource.m_theK, 0, m_theK, 0, m_theK.Length); + Array.Copy(mySource.m_theM, 0, m_theM, 0, m_theM.Length); + + /* Copy stack */ + m_theStack.Clear(); + foreach (var element in mySource.m_theStack) + { + m_theStack.Add(Arrays.Clone(element)); + } + + /* Copy buffer */ + Array.Copy(mySource.m_theBuffer, 0, m_theBuffer, 0, m_theBuffer.Length); + m_thePos = mySource.m_thePos; + } + + public IMemoable Copy() + { + return new Blake3Digest(this); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void CompressBlock(ReadOnlySpan block) + { + /* Initialise state and compress message */ + InitChunkBlock(BLOCKLEN, false); + InitM(block); + Compress(); + + /* Adjust stack if we have completed a block */ + if (m_theCurrBytes == 0) + { + AdjustStack(); + } + } + + private void InitM(ReadOnlySpan block) + { + /* Copy message bytes into word array */ + Pack.LE_To_UInt32(block, m_theM); + } +#else + /** + * Compress next block of the message. + * + * @param pMessage the message buffer + * @param pMsgPos the position within the message buffer + */ + private void CompressBlock(byte[] pMessage, int pMsgPos) + { + /* Initialise state and compress message */ + InitChunkBlock(BLOCKLEN, false); + InitM(pMessage, pMsgPos); + Compress(); + + /* Adjust stack if we have completed a block */ + if (m_theCurrBytes == 0) + { + AdjustStack(); + } + } + + /** + * Initialise M from message. + * + * @param pMessage the source message + * @param pMsgPos the message position + */ + private void InitM(byte[] pMessage, int pMsgPos) + { + /* Copy message bytes into word array */ + Pack.LE_To_UInt32(pMessage, pMsgPos, m_theM); + } +#endif + + /** + * Adjust the stack. + */ + private void AdjustStack() + { + /* Loop to combine blocks */ + long myCount = m_theCounter; + while (myCount > 0) + { + /* Break loop if we are not combining */ + if ((myCount & 1) == 1) + break; + + /* Build the message to be hashed */ + uint[] myLeft = m_theStack[m_theStack.Count - 1]; + m_theStack.RemoveAt(m_theStack.Count - 1); + + Array.Copy(myLeft, 0, m_theM, 0, NUMWORDS); + Array.Copy(m_theChaining, 0, m_theM, NUMWORDS, NUMWORDS); + + /* Create parent block */ + InitParentBlock(); + Compress(); + + /* Next block */ + myCount >>= 1; + } + + /* Add back to the stack */ + m_theStack.Add(Arrays.CopyOf(m_theChaining, NUMWORDS)); + } + + /** + * Compress final block. + * + * @param pDataLen the data length + */ + private void CompressFinalBlock(int pDataLen) + { + /* Initialise state and compress message */ + InitChunkBlock(pDataLen, true); +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + InitM(m_theBuffer); +#else + InitM(m_theBuffer, 0); +#endif + Compress(); + + /* Finalise stack */ + ProcessStack(); + } + + /** + * Process the stack. + */ + private void ProcessStack() + { + /* Finalise stack */ + while (m_theStack.Count > 0) + { + /* Build the message to be hashed */ + uint[] myLeft = m_theStack[m_theStack.Count - 1]; + m_theStack.RemoveAt(m_theStack.Count - 1); + + Array.Copy(myLeft, 0, m_theM, 0, NUMWORDS); + Array.Copy(m_theChaining, 0, m_theM, NUMWORDS, NUMWORDS); + + /* Create parent block */ + InitParentBlock(); + if (m_theStack.Count < 1) + { + SetRoot(); + } + Compress(); + } + } + + /** + * Perform compression. + */ + private void Compress() + { + /* Initialise the buffers */ + InitIndices(); + + /* Loop through the rounds */ + for (int round = 0; round < ROUNDS - 1; round++) + { + /* Perform the round and permuteM */ + PerformRound(); + PermuteIndices(); + } + PerformRound(); + AdjustChaining(); + } + + /** + * Perform a round. + */ +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private void PerformRound() + { + /* Apply to columns of V */ + MixG(0, CHAINING0, CHAINING4, IV0, COUNT0); + MixG(1, CHAINING1, CHAINING5, IV1, COUNT1); + MixG(2, CHAINING2, CHAINING6, IV2, DATALEN); + MixG(3, CHAINING3, CHAINING7, IV3, FLAGS); + + /* Apply to diagonals of V */ + MixG(4, CHAINING0, CHAINING5, IV2, FLAGS); + MixG(5, CHAINING1, CHAINING6, IV3, COUNT0); + MixG(6, CHAINING2, CHAINING7, IV0, COUNT1); + MixG(7, CHAINING3, CHAINING4, IV1, DATALEN); + } + + /** + * Adjust Chaining after compression. + */ + private void AdjustChaining() + { + /* If we are outputting */ + if (m_outputting) + { + /* Adjust full state */ + for (int i = 0; i < NUMWORDS; i++) + { + m_theV[i] ^= m_theV[i + NUMWORDS]; + m_theV[i + NUMWORDS] ^= m_theChaining[i]; + } + + /* Output state to buffer */ + Pack.UInt32_To_LE(m_theV, m_theBuffer, 0); + m_thePos = 0; + + /* Else just build chain value */ + } + else + { + /* Combine V into Chaining */ + for (int i = 0; i < NUMWORDS; i++) + { + m_theChaining[i] = m_theV[i] ^ m_theV[i + NUMWORDS]; + } + } + } + + /** + * Mix function G. + * + * @param msgIdx the message index + * @param posA position A in V + * @param posB position B in V + * @param posC position C in V + * @param posD poistion D in V + */ +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private void MixG(int msgIdx, int posA, int posB, int posC, int posD) + { + /* Determine indices */ + int msg = msgIdx << 1; + + /* Perform the Round */ + m_theV[posA] += m_theV[posB] + m_theM[m_theIndices[msg++]]; + m_theV[posD] = Integers.RotateRight(m_theV[posD] ^ m_theV[posA], 16); + m_theV[posC] += m_theV[posD]; + m_theV[posB] = Integers.RotateRight(m_theV[posB] ^ m_theV[posC], 12); + m_theV[posA] += m_theV[posB] + m_theM[m_theIndices[msg]]; + m_theV[posD] = Integers.RotateRight(m_theV[posD] ^ m_theV[posA], 8); + m_theV[posC] += m_theV[posD]; + m_theV[posB] = Integers.RotateRight(m_theV[posB] ^ m_theV[posC], 7); + } + + /** + * initialise the indices. + */ + private void InitIndices() + { + for (byte i = 0; i < m_theIndices.Length; i++) + { + m_theIndices[i] = i; + } + } + + /** + * PermuteIndices. + */ + private void PermuteIndices() + { + for (byte i = 0; i < m_theIndices.Length; i++) + { + m_theIndices[i] = SIGMA[m_theIndices[i]]; + } + } + + /** + * Initialise null key. + */ + private void InitNullKey() + { + Array.Copy(IV, 0, m_theK, 0, NUMWORDS); + } + + /** + * Initialise key. + * + * @param pKey the keyBytes + */ + private void InitKey(byte[] pKey) + { + /* Copy message bytes into word array */ + Pack.LE_To_UInt32(pKey, 0, m_theK); + m_theMode = KEYEDHASH; + } + + /** + * Initialise key from context. + */ + private void InitKeyFromContext() + { + Array.Copy(m_theV, 0, m_theK, 0, NUMWORDS); + m_theMode = DERIVEKEY; + } + + /** + * Initialise chunk block. + * + * @param pDataLen the dataLength + * @param pFinal is this the final chunk? + */ + private void InitChunkBlock(int pDataLen, bool pFinal) + { + /* Initialise the block */ + Array.Copy(m_theCurrBytes == 0 ? m_theK : m_theChaining, 0, m_theV, 0, NUMWORDS); + Array.Copy(IV, 0, m_theV, NUMWORDS, NUMWORDS >> 1); + m_theV[COUNT0] = (uint)m_theCounter; + m_theV[COUNT1] = (uint)(m_theCounter >> Integers.NumBits); + m_theV[DATALEN] = (uint)pDataLen; + m_theV[FLAGS] = (uint)(m_theMode + + (m_theCurrBytes == 0 ? CHUNKSTART : 0) + + (pFinal ? CHUNKEND : 0)); + + /* * Adjust block count */ + m_theCurrBytes += pDataLen; + if (m_theCurrBytes >= CHUNKLEN) + { + IncrementBlockCount(); + m_theV[FLAGS] |= CHUNKEND; + } + + /* If we are single chunk */ + if (pFinal && m_theStack.Count < 1) + { + SetRoot(); + } + } + + /** + * Initialise parent block. + */ + private void InitParentBlock() + { + /* Initialise the block */ + Array.Copy(m_theK, 0, m_theV, 0, NUMWORDS); + Array.Copy(IV, 0, m_theV, NUMWORDS, NUMWORDS >> 1); + m_theV[COUNT0] = 0; + m_theV[COUNT1] = 0; + m_theV[DATALEN] = BLOCKLEN; + m_theV[FLAGS] = (uint)(m_theMode | PARENT); + } + + /** + * Initialise output block. + */ + private void NextOutputBlock() + { + /* Increment the counter */ + m_theCounter++; + + /* Initialise the block */ + Array.Copy(m_theChaining, 0, m_theV, 0, NUMWORDS); + Array.Copy(IV, 0, m_theV, NUMWORDS, NUMWORDS >> 1); + m_theV[COUNT0] = (uint)m_theCounter; + m_theV[COUNT1] = (uint)(m_theCounter >> Integers.NumBits); + m_theV[DATALEN] = (uint)m_theOutputDataLen; + m_theV[FLAGS] = (uint)m_theOutputMode; + + /* Generate output */ + Compress(); + } + + /** + * IncrementBlockCount. + */ + private void IncrementBlockCount() + { + m_theCounter++; + m_theCurrBytes = 0; + } + + /** + * ResetBlockCount. + */ + private void ResetBlockCount() + { + m_theCounter = 0; + m_theCurrBytes = 0; + } + + /** + * Set root indication. + */ + private void SetRoot() + { + m_theV[FLAGS] |= ROOT; + m_theOutputMode = (int)m_theV[FLAGS]; + m_theOutputDataLen = (int)m_theV[DATALEN]; + m_theCounter = 0; + m_outputting = true; + m_outputAvailable = -1; + Array.Copy(m_theV, 0, m_theChaining, 0, NUMWORDS); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake3Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake3Digest.cs.meta new file mode 100644 index 000000000..e0dd25fed --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Blake3Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ded5cb56c1e36294db2395e1831ee1a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/CSHAKEDigest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/CSHAKEDigest.cs new file mode 100644 index 000000000..2a227231b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/CSHAKEDigest.cs @@ -0,0 +1,131 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + ///

+ /// Customizable SHAKE function. + /// + public class CShakeDigest + : ShakeDigest + { + private static readonly byte[] padding = new byte[100]; + + private static byte[] EncodeString(byte[] str) + { + if (Arrays.IsNullOrEmpty(str)) + { + return XofUtilities.LeftEncode(0L); + } + + return Arrays.Concatenate(XofUtilities.LeftEncode(str.Length * 8L), str); + } + + private readonly byte[] diff; + + /// + /// Base constructor + /// + /// bit length of the underlying SHAKE function, 128 or 256. + /// the function name string, note this is reserved for use by NIST. Avoid using it if not required. + /// the customization string - available for local use. + public CShakeDigest(int bitLength, byte[] N, byte[] S) + : base(bitLength) + { + if ((N == null || N.Length == 0) && (S == null || S.Length == 0)) + { + diff = null; + } + else + { + diff = Arrays.ConcatenateAll(XofUtilities.LeftEncode(rate / 8), EncodeString(N), EncodeString(S)); + DiffPadAndAbsorb(); + } + } + + public CShakeDigest(CShakeDigest source) + : base(source) + { + this.diff = Arrays.Clone(source.diff); + } + + // bytepad in SP 800-185 + private void DiffPadAndAbsorb() + { + int blockSize = rate / 8; + Absorb(diff, 0, diff.Length); + + int delta = diff.Length % blockSize; + + // only add padding if needed + if (delta != 0) + { + int required = blockSize - delta; + + while (required > padding.Length) + { + Absorb(padding, 0, padding.Length); + required -= padding.Length; + } + + Absorb(padding, 0, required); + } + } + + public override string AlgorithmName + { + get { return "CSHAKE" + fixedOutputLength; } + } + + public override int Output(byte[] output, int outOff, int outLen) + { + if (diff == null) + { + return base.Output(output, outOff, outLen); + } + + if (!squeezing) + { + AbsorbBits(0x00, 2); + } + + Squeeze(output, outOff, ((long)outLen) << 3); + + return outLen; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int Output(Span output) + { + if (diff == null) + { + return base.Output(output); + } + + if (!squeezing) + { + AbsorbBits(0x00, 2); + } + + Squeeze(output); + + return output.Length; + } +#endif + + public override void Reset() + { + base.Reset(); + + if (diff != null) + { + DiffPadAndAbsorb(); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/CSHAKEDigest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/CSHAKEDigest.cs.meta new file mode 100644 index 000000000..5ad8c18c8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/CSHAKEDigest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e886e8838212e0748bab718eb89cfeaf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/DSTU7564Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/DSTU7564Digest.cs new file mode 100644 index 000000000..c50fa64a1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/DSTU7564Digest.cs @@ -0,0 +1,631 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /** + * implementation of Ukrainian DSTU 7564 hash function + */ + public class Dstu7564Digest + : IDigest, IMemoable + { + private const int NB_512 = 8; //Number of 8-byte words in state for <=256-bit hash code. + private const int NB_1024 = 16; //Number of 8-byte words in state for <=512-bit hash code. + + private const int NR_512 = 10; //Number of rounds for 512-bit state. + private const int NR_1024 = 14; //Number of rounds for 1024-bit state. + + private int hashSize; + private int blockSize; + + private int columns; + private int rounds; + + private ulong[] state; + private ulong[] tempState1; + private ulong[] tempState2; + + // TODO Guard against 'inputBlocks' overflow (2^64 blocks) + private ulong inputBlocks; + private int bufOff; + private byte[] buf; + + public Dstu7564Digest(Dstu7564Digest digest) + { + CopyIn(digest); + } + + private void CopyIn(Dstu7564Digest digest) + { + this.hashSize = digest.hashSize; + this.blockSize = digest.blockSize; + + this.rounds = digest.rounds; + if (columns > 0 && columns == digest.columns) + { + Array.Copy(digest.state, 0, state, 0, columns); + Array.Copy(digest.buf, 0, buf, 0, blockSize); + } + else + { + this.columns = digest.columns; + this.state = Arrays.Clone(digest.state); + this.tempState1 = new ulong[columns]; + this.tempState2 = new ulong[columns]; + this.buf = Arrays.Clone(digest.buf); + } + + this.inputBlocks = digest.inputBlocks; + this.bufOff = digest.bufOff; + } + + public Dstu7564Digest(int hashSizeBits) + { + if (hashSizeBits == 256 || hashSizeBits == 384 || hashSizeBits == 512) + { + this.hashSize = hashSizeBits / 8; + } + else + { + throw new ArgumentException("Hash size is not recommended. Use 256/384/512 instead"); + } + + if (hashSizeBits > 256) + { + this.columns = NB_1024; + this.rounds = NR_1024; + } + else + { + this.columns = NB_512; + this.rounds = NR_512; + } + + this.blockSize = columns << 3; + + this.state = new ulong[columns]; + this.state[0] = (ulong)blockSize; + + this.tempState1 = new ulong[columns]; + this.tempState2 = new ulong[columns]; + + this.buf = new byte[blockSize]; + } + + public virtual string AlgorithmName + { + get { return "DSTU7564"; } + } + + public virtual int GetDigestSize() + { + return hashSize; + } + + public virtual int GetByteLength() + { + return blockSize; + } + + public virtual void Update(byte input) + { + buf[bufOff++] = input; + if (bufOff == blockSize) + { + ProcessBlock(buf, 0); + bufOff = 0; + ++inputBlocks; + } + } + + public virtual void BlockUpdate(byte[] input, int inOff, int length) + { + while (bufOff != 0 && length > 0) + { + Update(input[inOff++]); + --length; + } + + while (length >= blockSize) + { + ProcessBlock(input, inOff); + inOff += blockSize; + length -= blockSize; + ++inputBlocks; + } + + while (length > 0) + { + Update(input[inOff++]); + --length; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + while (bufOff != 0 && input.Length > 0) + { + Update(input[0]); + input = input[1..]; + } + + while (input.Length >= blockSize) + { + ProcessBlock(input); + input = input[blockSize..]; + ++inputBlocks; + } + + while (input.Length > 0) + { + Update(input[0]); + input = input[1..]; + } + } +#endif + + public virtual int DoFinal(byte[] output, int outOff) + { + // Apply padding: terminator byte and 96-bit length field + { + int inputBytes = bufOff; + buf[bufOff++] = (byte)0x80; + + int lenPos = blockSize - 12; + if (bufOff > lenPos) + { + while (bufOff < blockSize) + { + buf[bufOff++] = 0; + } + bufOff = 0; + ProcessBlock(buf, 0); + } + + while (bufOff < lenPos) + { + buf[bufOff++] = 0; + } + + ulong c = ((inputBlocks & 0xFFFFFFFFUL) * (ulong)blockSize + (uint)inputBytes) << 3; + Pack.UInt32_To_LE((uint)c, buf, bufOff); + bufOff += 4; + c >>= 32; + c += ((inputBlocks >> 32) * (ulong)blockSize) << 3; + Pack.UInt64_To_LE(c, buf, bufOff); + //bufOff += 8; + ProcessBlock(buf, 0); + } + + { + Array.Copy(state, 0, tempState1, 0, columns); + + P(tempState1); + + for (int col = 0; col < columns; ++col) + { + state[col] ^= tempState1[col]; + } + } + + int neededColumns = hashSize / 8; + for (int col = columns - neededColumns; col < columns; ++col) + { + Pack.UInt64_To_LE(state[col], output, outOff); + outOff += 8; + } + + Reset(); + + return hashSize; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int DoFinal(Span output) + { + // Apply padding: terminator byte and 96-bit length field + { + int inputBytes = bufOff; + buf[bufOff++] = (byte)0x80; + + int lenPos = blockSize - 12; + if (bufOff > lenPos) + { + while (bufOff < blockSize) + { + buf[bufOff++] = 0; + } + bufOff = 0; + ProcessBlock(buf, 0); + } + + while (bufOff < lenPos) + { + buf[bufOff++] = 0; + } + + ulong c = ((inputBlocks & 0xFFFFFFFFUL) * (ulong)blockSize + (uint)inputBytes) << 3; + Pack.UInt32_To_LE((uint)c, buf, bufOff); + bufOff += 4; + c >>= 32; + c += ((inputBlocks >> 32) * (ulong)blockSize) << 3; + Pack.UInt64_To_LE(c, buf, bufOff); + //bufOff += 8; + ProcessBlock(buf, 0); + } + + { + Array.Copy(state, 0, tempState1, 0, columns); + + P(tempState1); + + for (int col = 0; col < columns; ++col) + { + state[col] ^= tempState1[col]; + } + } + + int neededColumns = hashSize / 8; + for (int col = columns - neededColumns; col < columns; ++col) + { + Pack.UInt64_To_LE(state[col], output); + output = output[8..]; + } + + Reset(); + + return hashSize; + } +#endif + + public virtual void Reset() + { + Array.Clear(state, 0, state.Length); + state[0] = (ulong)blockSize; + + inputBlocks = 0; + bufOff = 0; + } + + protected virtual void ProcessBlock(byte[] input, int inOff) + { + int pos = inOff; + for (int col = 0; col < columns; ++col) + { + ulong word = Pack.LE_To_UInt64(input, pos); + pos += 8; + + tempState1[col] = state[col] ^ word; + tempState2[col] = word; + } + + P(tempState1); + Q(tempState2); + + for (int col = 0; col < columns; ++col) + { + state[col] ^= tempState1[col] ^ tempState2[col]; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + protected virtual void ProcessBlock(ReadOnlySpan input) + { + for (int col = 0; col < columns; ++col) + { + ulong word = Pack.LE_To_UInt64(input); + input = input[8..]; + + tempState1[col] = state[col] ^ word; + tempState2[col] = word; + } + + P(tempState1); + Q(tempState2); + + for (int col = 0; col < columns; ++col) + { + state[col] ^= tempState1[col] ^ tempState2[col]; + } + } +#endif + + private void P(ulong[] s) + { + for (int round = 0; round < rounds; ++round) + { + ulong rc = (ulong)round; + + /* AddRoundConstants */ + for (int col = 0; col < columns; ++col) + { + s[col] ^= rc; + rc += 0x10L; + } + + ShiftRows(s); + SubBytes(s); + MixColumns(s); + } + } + + private void Q(ulong[] s) + { + for (int round = 0; round < rounds; ++round) + { + /* AddRoundConstantsQ */ + ulong rc = ((ulong)(((columns - 1) << 4) ^ round) << 56) | 0x00F0F0F0F0F0F0F3UL; + + for (int col = 0; col < columns; ++col) + { + s[col] += rc; + rc -= 0x1000000000000000L; + } + + ShiftRows(s); + SubBytes(s); + MixColumns(s); + } + } + + private static ulong MixColumn(ulong c) + { + //// Calculate column multiplied by powers of 'x' + //ulong x0 = c; + //ulong x1 = ((x0 & 0x7F7F7F7F7F7F7F7FUL) << 1) ^ (((x0 & 0x8080808080808080UL) >> 7) * 0x1DUL); + //ulong x2 = ((x1 & 0x7F7F7F7F7F7F7F7FUL) << 1) ^ (((x1 & 0x8080808080808080UL) >> 7) * 0x1DUL); + //ulong x3 = ((x2 & 0x7F7F7F7F7F7F7F7FUL) << 1) ^ (((x2 & 0x8080808080808080UL) >> 7) * 0x1DUL); + + //// Calculate products with circulant matrix from (0x01, 0x01, 0x05, 0x01, 0x08, 0x06, 0x07, 0x04) + //ulong m0 = x0; + //ulong m1 = x0; + //ulong m2 = x0 ^ x2; + //ulong m3 = x0; + //ulong m4 = x3; + //ulong m5 = x1 ^ x2; + //ulong m6 = x0 ^ x1 ^ x2; + //ulong m7 = x2; + + //// Assemble the rotated products + //return m0 + // ^ Rotate(8, m1) + // ^ Rotate(16, m2) + // ^ Rotate(24, m3) + // ^ Rotate(32, m4) + // ^ Rotate(40, m5) + // ^ Rotate(48, m6) + // ^ Rotate(56, m7); + + // Multiply elements by 'x' + ulong x1 = ((c & 0x7F7F7F7F7F7F7F7FUL) << 1) ^ (((c & 0x8080808080808080UL) >> 7) * 0x1DUL); + ulong u, v; + + u = Rotate(8, c) ^ c; + u ^= Rotate(16, u); + u ^= Rotate(48, c); + + v = u ^ c ^ x1; + + // Multiply elements by 'x^2' + v = ((v & 0x3F3F3F3F3F3F3F3FUL) << 2) ^ (((v & 0x8080808080808080UL) >> 6) * 0x1DUL) ^ (((v & 0x4040404040404040UL) >> 6) * 0x1DUL); + + return u ^ Rotate(32, v) ^ Rotate(40, x1) ^ Rotate(48, x1); + } + + private void MixColumns(ulong[] s) + { + for (int col = 0; col < columns; ++col) + { + s[col] = MixColumn(s[col]); + } + } + + private static ulong Rotate(int n, ulong x) + { + return (x >> n) | (x << -n); + } + + private void ShiftRows(ulong[] s) + { + switch (columns) + { + case NB_512: + { + ulong c0 = s[0], c1 = s[1], c2 = s[2], c3 = s[3]; + ulong c4 = s[4], c5 = s[5], c6 = s[6], c7 = s[7]; + ulong d; + + d = (c0 ^ c4) & 0xFFFFFFFF00000000UL; c0 ^= d; c4 ^= d; + d = (c1 ^ c5) & 0x00FFFFFFFF000000UL; c1 ^= d; c5 ^= d; + d = (c2 ^ c6) & 0x0000FFFFFFFF0000UL; c2 ^= d; c6 ^= d; + d = (c3 ^ c7) & 0x000000FFFFFFFF00UL; c3 ^= d; c7 ^= d; + + d = (c0 ^ c2) & 0xFFFF0000FFFF0000UL; c0 ^= d; c2 ^= d; + d = (c1 ^ c3) & 0x00FFFF0000FFFF00UL; c1 ^= d; c3 ^= d; + d = (c4 ^ c6) & 0xFFFF0000FFFF0000UL; c4 ^= d; c6 ^= d; + d = (c5 ^ c7) & 0x00FFFF0000FFFF00UL; c5 ^= d; c7 ^= d; + + d = (c0 ^ c1) & 0xFF00FF00FF00FF00UL; c0 ^= d; c1 ^= d; + d = (c2 ^ c3) & 0xFF00FF00FF00FF00UL; c2 ^= d; c3 ^= d; + d = (c4 ^ c5) & 0xFF00FF00FF00FF00UL; c4 ^= d; c5 ^= d; + d = (c6 ^ c7) & 0xFF00FF00FF00FF00UL; c6 ^= d; c7 ^= d; + + s[0] = c0; s[1] = c1; s[2] = c2; s[3] = c3; + s[4] = c4; s[5] = c5; s[6] = c6; s[7] = c7; + break; + } + case NB_1024: + { + ulong c00 = s[0], c01 = s[1], c02 = s[2], c03 = s[3]; + ulong c04 = s[4], c05 = s[5], c06 = s[6], c07 = s[7]; + ulong c08 = s[8], c09 = s[9], c10 = s[10], c11 = s[11]; + ulong c12 = s[12], c13 = s[13], c14 = s[14], c15 = s[15]; + ulong d; + + // NOTE: Row 7 is shifted by 11 + + d = (c00 ^ c08) & 0xFF00000000000000UL; c00 ^= d; c08 ^= d; + d = (c01 ^ c09) & 0xFF00000000000000UL; c01 ^= d; c09 ^= d; + d = (c02 ^ c10) & 0xFFFF000000000000UL; c02 ^= d; c10 ^= d; + d = (c03 ^ c11) & 0xFFFFFF0000000000UL; c03 ^= d; c11 ^= d; + d = (c04 ^ c12) & 0xFFFFFFFF00000000UL; c04 ^= d; c12 ^= d; + d = (c05 ^ c13) & 0x00FFFFFFFF000000UL; c05 ^= d; c13 ^= d; + d = (c06 ^ c14) & 0x00FFFFFFFFFF0000UL; c06 ^= d; c14 ^= d; + d = (c07 ^ c15) & 0x00FFFFFFFFFFFF00UL; c07 ^= d; c15 ^= d; + + d = (c00 ^ c04) & 0x00FFFFFF00000000UL; c00 ^= d; c04 ^= d; + d = (c01 ^ c05) & 0xFFFFFFFFFF000000UL; c01 ^= d; c05 ^= d; + d = (c02 ^ c06) & 0xFF00FFFFFFFF0000UL; c02 ^= d; c06 ^= d; + d = (c03 ^ c07) & 0xFF0000FFFFFFFF00UL; c03 ^= d; c07 ^= d; + d = (c08 ^ c12) & 0x00FFFFFF00000000UL; c08 ^= d; c12 ^= d; + d = (c09 ^ c13) & 0xFFFFFFFFFF000000UL; c09 ^= d; c13 ^= d; + d = (c10 ^ c14) & 0xFF00FFFFFFFF0000UL; c10 ^= d; c14 ^= d; + d = (c11 ^ c15) & 0xFF0000FFFFFFFF00UL; c11 ^= d; c15 ^= d; + + d = (c00 ^ c02) & 0xFFFF0000FFFF0000UL; c00 ^= d; c02 ^= d; + d = (c01 ^ c03) & 0x00FFFF0000FFFF00UL; c01 ^= d; c03 ^= d; + d = (c04 ^ c06) & 0xFFFF0000FFFF0000UL; c04 ^= d; c06 ^= d; + d = (c05 ^ c07) & 0x00FFFF0000FFFF00UL; c05 ^= d; c07 ^= d; + d = (c08 ^ c10) & 0xFFFF0000FFFF0000UL; c08 ^= d; c10 ^= d; + d = (c09 ^ c11) & 0x00FFFF0000FFFF00UL; c09 ^= d; c11 ^= d; + d = (c12 ^ c14) & 0xFFFF0000FFFF0000UL; c12 ^= d; c14 ^= d; + d = (c13 ^ c15) & 0x00FFFF0000FFFF00UL; c13 ^= d; c15 ^= d; + + d = (c00 ^ c01) & 0xFF00FF00FF00FF00UL; c00 ^= d; c01 ^= d; + d = (c02 ^ c03) & 0xFF00FF00FF00FF00UL; c02 ^= d; c03 ^= d; + d = (c04 ^ c05) & 0xFF00FF00FF00FF00UL; c04 ^= d; c05 ^= d; + d = (c06 ^ c07) & 0xFF00FF00FF00FF00UL; c06 ^= d; c07 ^= d; + d = (c08 ^ c09) & 0xFF00FF00FF00FF00UL; c08 ^= d; c09 ^= d; + d = (c10 ^ c11) & 0xFF00FF00FF00FF00UL; c10 ^= d; c11 ^= d; + d = (c12 ^ c13) & 0xFF00FF00FF00FF00UL; c12 ^= d; c13 ^= d; + d = (c14 ^ c15) & 0xFF00FF00FF00FF00UL; c14 ^= d; c15 ^= d; + + s[0] = c00; s[1] = c01; s[2] = c02; s[3] = c03; + s[4] = c04; s[5] = c05; s[6] = c06; s[7] = c07; + s[8] = c08; s[9] = c09; s[10] = c10; s[11] = c11; + s[12] = c12; s[13] = c13; s[14] = c14; s[15] = c15; + break; + } + default: + { + throw new InvalidOperationException("unsupported state size: only 512/1024 are allowed"); + } + } + } + + private void SubBytes(ulong[] s) + { + for (int i = 0; i < columns; ++i) + { + ulong u = s[i]; + uint lo = (uint)u, hi = (uint)(u >> 32); + byte t0 = S0[lo & 0xFF]; + byte t1 = S1[(lo >> 8) & 0xFF]; + byte t2 = S2[(lo >> 16) & 0xFF]; + byte t3 = S3[lo >> 24]; + lo = (uint)t0 | ((uint)t1 << 8) | ((uint)t2 << 16) | ((uint)t3 << 24); + byte t4 = S0[hi & 0xFF]; + byte t5 = S1[(hi >> 8) & 0xFF]; + byte t6 = S2[(hi >> 16) & 0xFF]; + byte t7 = S3[hi >> 24]; + hi = (uint)t4 | ((uint)t5 << 8) | ((uint)t6 << 16) | ((uint)t7 << 24); + s[i] = (ulong)lo | ((ulong)hi << 32); + } + } + + private static readonly byte[] S0 = new byte[] { + 0xa8, 0x43, 0x5f, 0x06, 0x6b, 0x75, 0x6c, 0x59, 0x71, 0xdf, 0x87, 0x95, 0x17, 0xf0, 0xd8, 0x09, + 0x6d, 0xf3, 0x1d, 0xcb, 0xc9, 0x4d, 0x2c, 0xaf, 0x79, 0xe0, 0x97, 0xfd, 0x6f, 0x4b, 0x45, 0x39, + 0x3e, 0xdd, 0xa3, 0x4f, 0xb4, 0xb6, 0x9a, 0x0e, 0x1f, 0xbf, 0x15, 0xe1, 0x49, 0xd2, 0x93, 0xc6, + 0x92, 0x72, 0x9e, 0x61, 0xd1, 0x63, 0xfa, 0xee, 0xf4, 0x19, 0xd5, 0xad, 0x58, 0xa4, 0xbb, 0xa1, + 0xdc, 0xf2, 0x83, 0x37, 0x42, 0xe4, 0x7a, 0x32, 0x9c, 0xcc, 0xab, 0x4a, 0x8f, 0x6e, 0x04, 0x27, + 0x2e, 0xe7, 0xe2, 0x5a, 0x96, 0x16, 0x23, 0x2b, 0xc2, 0x65, 0x66, 0x0f, 0xbc, 0xa9, 0x47, 0x41, + 0x34, 0x48, 0xfc, 0xb7, 0x6a, 0x88, 0xa5, 0x53, 0x86, 0xf9, 0x5b, 0xdb, 0x38, 0x7b, 0xc3, 0x1e, + 0x22, 0x33, 0x24, 0x28, 0x36, 0xc7, 0xb2, 0x3b, 0x8e, 0x77, 0xba, 0xf5, 0x14, 0x9f, 0x08, 0x55, + 0x9b, 0x4c, 0xfe, 0x60, 0x5c, 0xda, 0x18, 0x46, 0xcd, 0x7d, 0x21, 0xb0, 0x3f, 0x1b, 0x89, 0xff, + 0xeb, 0x84, 0x69, 0x3a, 0x9d, 0xd7, 0xd3, 0x70, 0x67, 0x40, 0xb5, 0xde, 0x5d, 0x30, 0x91, 0xb1, + 0x78, 0x11, 0x01, 0xe5, 0x00, 0x68, 0x98, 0xa0, 0xc5, 0x02, 0xa6, 0x74, 0x2d, 0x0b, 0xa2, 0x76, + 0xb3, 0xbe, 0xce, 0xbd, 0xae, 0xe9, 0x8a, 0x31, 0x1c, 0xec, 0xf1, 0x99, 0x94, 0xaa, 0xf6, 0x26, + 0x2f, 0xef, 0xe8, 0x8c, 0x35, 0x03, 0xd4, 0x7f, 0xfb, 0x05, 0xc1, 0x5e, 0x90, 0x20, 0x3d, 0x82, + 0xf7, 0xea, 0x0a, 0x0d, 0x7e, 0xf8, 0x50, 0x1a, 0xc4, 0x07, 0x57, 0xb8, 0x3c, 0x62, 0xe3, 0xc8, + 0xac, 0x52, 0x64, 0x10, 0xd0, 0xd9, 0x13, 0x0c, 0x12, 0x29, 0x51, 0xb9, 0xcf, 0xd6, 0x73, 0x8d, + 0x81, 0x54, 0xc0, 0xed, 0x4e, 0x44, 0xa7, 0x2a, 0x85, 0x25, 0xe6, 0xca, 0x7c, 0x8b, 0x56, 0x80 + }; + + private static readonly byte[] S1 = new byte[] { + 0xce, 0xbb, 0xeb, 0x92, 0xea, 0xcb, 0x13, 0xc1, 0xe9, 0x3a, 0xd6, 0xb2, 0xd2, 0x90, 0x17, 0xf8, + 0x42, 0x15, 0x56, 0xb4, 0x65, 0x1c, 0x88, 0x43, 0xc5, 0x5c, 0x36, 0xba, 0xf5, 0x57, 0x67, 0x8d, + 0x31, 0xf6, 0x64, 0x58, 0x9e, 0xf4, 0x22, 0xaa, 0x75, 0x0f, 0x02, 0xb1, 0xdf, 0x6d, 0x73, 0x4d, + 0x7c, 0x26, 0x2e, 0xf7, 0x08, 0x5d, 0x44, 0x3e, 0x9f, 0x14, 0xc8, 0xae, 0x54, 0x10, 0xd8, 0xbc, + 0x1a, 0x6b, 0x69, 0xf3, 0xbd, 0x33, 0xab, 0xfa, 0xd1, 0x9b, 0x68, 0x4e, 0x16, 0x95, 0x91, 0xee, + 0x4c, 0x63, 0x8e, 0x5b, 0xcc, 0x3c, 0x19, 0xa1, 0x81, 0x49, 0x7b, 0xd9, 0x6f, 0x37, 0x60, 0xca, + 0xe7, 0x2b, 0x48, 0xfd, 0x96, 0x45, 0xfc, 0x41, 0x12, 0x0d, 0x79, 0xe5, 0x89, 0x8c, 0xe3, 0x20, + 0x30, 0xdc, 0xb7, 0x6c, 0x4a, 0xb5, 0x3f, 0x97, 0xd4, 0x62, 0x2d, 0x06, 0xa4, 0xa5, 0x83, 0x5f, + 0x2a, 0xda, 0xc9, 0x00, 0x7e, 0xa2, 0x55, 0xbf, 0x11, 0xd5, 0x9c, 0xcf, 0x0e, 0x0a, 0x3d, 0x51, + 0x7d, 0x93, 0x1b, 0xfe, 0xc4, 0x47, 0x09, 0x86, 0x0b, 0x8f, 0x9d, 0x6a, 0x07, 0xb9, 0xb0, 0x98, + 0x18, 0x32, 0x71, 0x4b, 0xef, 0x3b, 0x70, 0xa0, 0xe4, 0x40, 0xff, 0xc3, 0xa9, 0xe6, 0x78, 0xf9, + 0x8b, 0x46, 0x80, 0x1e, 0x38, 0xe1, 0xb8, 0xa8, 0xe0, 0x0c, 0x23, 0x76, 0x1d, 0x25, 0x24, 0x05, + 0xf1, 0x6e, 0x94, 0x28, 0x9a, 0x84, 0xe8, 0xa3, 0x4f, 0x77, 0xd3, 0x85, 0xe2, 0x52, 0xf2, 0x82, + 0x50, 0x7a, 0x2f, 0x74, 0x53, 0xb3, 0x61, 0xaf, 0x39, 0x35, 0xde, 0xcd, 0x1f, 0x99, 0xac, 0xad, + 0x72, 0x2c, 0xdd, 0xd0, 0x87, 0xbe, 0x5e, 0xa6, 0xec, 0x04, 0xc6, 0x03, 0x34, 0xfb, 0xdb, 0x59, + 0xb6, 0xc2, 0x01, 0xf0, 0x5a, 0xed, 0xa7, 0x66, 0x21, 0x7f, 0x8a, 0x27, 0xc7, 0xc0, 0x29, 0xd7 + }; + + private static readonly byte[] S2 = new byte[] { + 0x93, 0xd9, 0x9a, 0xb5, 0x98, 0x22, 0x45, 0xfc, 0xba, 0x6a, 0xdf, 0x02, 0x9f, 0xdc, 0x51, 0x59, + 0x4a, 0x17, 0x2b, 0xc2, 0x94, 0xf4, 0xbb, 0xa3, 0x62, 0xe4, 0x71, 0xd4, 0xcd, 0x70, 0x16, 0xe1, + 0x49, 0x3c, 0xc0, 0xd8, 0x5c, 0x9b, 0xad, 0x85, 0x53, 0xa1, 0x7a, 0xc8, 0x2d, 0xe0, 0xd1, 0x72, + 0xa6, 0x2c, 0xc4, 0xe3, 0x76, 0x78, 0xb7, 0xb4, 0x09, 0x3b, 0x0e, 0x41, 0x4c, 0xde, 0xb2, 0x90, + 0x25, 0xa5, 0xd7, 0x03, 0x11, 0x00, 0xc3, 0x2e, 0x92, 0xef, 0x4e, 0x12, 0x9d, 0x7d, 0xcb, 0x35, + 0x10, 0xd5, 0x4f, 0x9e, 0x4d, 0xa9, 0x55, 0xc6, 0xd0, 0x7b, 0x18, 0x97, 0xd3, 0x36, 0xe6, 0x48, + 0x56, 0x81, 0x8f, 0x77, 0xcc, 0x9c, 0xb9, 0xe2, 0xac, 0xb8, 0x2f, 0x15, 0xa4, 0x7c, 0xda, 0x38, + 0x1e, 0x0b, 0x05, 0xd6, 0x14, 0x6e, 0x6c, 0x7e, 0x66, 0xfd, 0xb1, 0xe5, 0x60, 0xaf, 0x5e, 0x33, + 0x87, 0xc9, 0xf0, 0x5d, 0x6d, 0x3f, 0x88, 0x8d, 0xc7, 0xf7, 0x1d, 0xe9, 0xec, 0xed, 0x80, 0x29, + 0x27, 0xcf, 0x99, 0xa8, 0x50, 0x0f, 0x37, 0x24, 0x28, 0x30, 0x95, 0xd2, 0x3e, 0x5b, 0x40, 0x83, + 0xb3, 0x69, 0x57, 0x1f, 0x07, 0x1c, 0x8a, 0xbc, 0x20, 0xeb, 0xce, 0x8e, 0xab, 0xee, 0x31, 0xa2, + 0x73, 0xf9, 0xca, 0x3a, 0x1a, 0xfb, 0x0d, 0xc1, 0xfe, 0xfa, 0xf2, 0x6f, 0xbd, 0x96, 0xdd, 0x43, + 0x52, 0xb6, 0x08, 0xf3, 0xae, 0xbe, 0x19, 0x89, 0x32, 0x26, 0xb0, 0xea, 0x4b, 0x64, 0x84, 0x82, + 0x6b, 0xf5, 0x79, 0xbf, 0x01, 0x5f, 0x75, 0x63, 0x1b, 0x23, 0x3d, 0x68, 0x2a, 0x65, 0xe8, 0x91, + 0xf6, 0xff, 0x13, 0x58, 0xf1, 0x47, 0x0a, 0x7f, 0xc5, 0xa7, 0xe7, 0x61, 0x5a, 0x06, 0x46, 0x44, + 0x42, 0x04, 0xa0, 0xdb, 0x39, 0x86, 0x54, 0xaa, 0x8c, 0x34, 0x21, 0x8b, 0xf8, 0x0c, 0x74, 0x67 + }; + + private static readonly byte[] S3 = new byte[] { + 0x68, 0x8d, 0xca, 0x4d, 0x73, 0x4b, 0x4e, 0x2a, 0xd4, 0x52, 0x26, 0xb3, 0x54, 0x1e, 0x19, 0x1f, + 0x22, 0x03, 0x46, 0x3d, 0x2d, 0x4a, 0x53, 0x83, 0x13, 0x8a, 0xb7, 0xd5, 0x25, 0x79, 0xf5, 0xbd, + 0x58, 0x2f, 0x0d, 0x02, 0xed, 0x51, 0x9e, 0x11, 0xf2, 0x3e, 0x55, 0x5e, 0xd1, 0x16, 0x3c, 0x66, + 0x70, 0x5d, 0xf3, 0x45, 0x40, 0xcc, 0xe8, 0x94, 0x56, 0x08, 0xce, 0x1a, 0x3a, 0xd2, 0xe1, 0xdf, + 0xb5, 0x38, 0x6e, 0x0e, 0xe5, 0xf4, 0xf9, 0x86, 0xe9, 0x4f, 0xd6, 0x85, 0x23, 0xcf, 0x32, 0x99, + 0x31, 0x14, 0xae, 0xee, 0xc8, 0x48, 0xd3, 0x30, 0xa1, 0x92, 0x41, 0xb1, 0x18, 0xc4, 0x2c, 0x71, + 0x72, 0x44, 0x15, 0xfd, 0x37, 0xbe, 0x5f, 0xaa, 0x9b, 0x88, 0xd8, 0xab, 0x89, 0x9c, 0xfa, 0x60, + 0xea, 0xbc, 0x62, 0x0c, 0x24, 0xa6, 0xa8, 0xec, 0x67, 0x20, 0xdb, 0x7c, 0x28, 0xdd, 0xac, 0x5b, + 0x34, 0x7e, 0x10, 0xf1, 0x7b, 0x8f, 0x63, 0xa0, 0x05, 0x9a, 0x43, 0x77, 0x21, 0xbf, 0x27, 0x09, + 0xc3, 0x9f, 0xb6, 0xd7, 0x29, 0xc2, 0xeb, 0xc0, 0xa4, 0x8b, 0x8c, 0x1d, 0xfb, 0xff, 0xc1, 0xb2, + 0x97, 0x2e, 0xf8, 0x65, 0xf6, 0x75, 0x07, 0x04, 0x49, 0x33, 0xe4, 0xd9, 0xb9, 0xd0, 0x42, 0xc7, + 0x6c, 0x90, 0x00, 0x8e, 0x6f, 0x50, 0x01, 0xc5, 0xda, 0x47, 0x3f, 0xcd, 0x69, 0xa2, 0xe2, 0x7a, + 0xa7, 0xc6, 0x93, 0x0f, 0x0a, 0x06, 0xe6, 0x2b, 0x96, 0xa3, 0x1c, 0xaf, 0x6a, 0x12, 0x84, 0x39, + 0xe7, 0xb0, 0x82, 0xf7, 0xfe, 0x9d, 0x87, 0x5c, 0x81, 0x35, 0xde, 0xb4, 0xa5, 0xfc, 0x80, 0xef, + 0xcb, 0xbb, 0x6b, 0x76, 0xba, 0x5a, 0x7d, 0x78, 0x0b, 0x95, 0xe3, 0xad, 0x74, 0x98, 0x3b, 0x36, + 0x64, 0x6d, 0xdc, 0xf0, 0x59, 0xa9, 0x4c, 0x17, 0x7f, 0x91, 0xb8, 0xc9, 0x57, 0x1b, 0xe0, 0x61 + }; + + public virtual IMemoable Copy() + { + return new Dstu7564Digest(this); + } + + public virtual void Reset(IMemoable other) + { + Dstu7564Digest d = (Dstu7564Digest)other; + + CopyIn(d); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/DSTU7564Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/DSTU7564Digest.cs.meta new file mode 100644 index 000000000..7e611beb4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/DSTU7564Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 22476189e4ad78840b59be0858fa97af +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411Digest.cs new file mode 100644 index 000000000..c950d1c38 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411Digest.cs @@ -0,0 +1,396 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /** + * implementation of GOST R 34.11-94 + */ + public class Gost3411Digest + : IDigest, IMemoable + { + private const int DIGEST_LENGTH = 32; + + private byte[] H = new byte[32], L = new byte[32], + M = new byte[32], Sum = new byte[32]; + private byte[][] C = MakeC(); + + private byte[] xBuf = new byte[32]; + private int xBufOff; + private ulong byteCount; + + private readonly IBlockCipher cipher = new Gost28147Engine(); + private byte[] sBox; + + private static byte[][] MakeC() + { + byte[][] c = new byte[4][]; + for (int i = 0; i < 4; ++i) + { + c[i] = new byte[32]; + } + return c; + } + + /** + * Standard constructor + */ + public Gost3411Digest() + { + sBox = Gost28147Engine.GetSBox("D-A"); + cipher.Init(true, new ParametersWithSBox(null, sBox)); + + Reset(); + } + + /** + * Constructor to allow use of a particular sbox with GOST28147 + * @see GOST28147Engine#getSBox(String) + */ + public Gost3411Digest(byte[] sBoxParam) + { + sBox = Arrays.Clone(sBoxParam); + cipher.Init(true, new ParametersWithSBox(null, sBox)); + + Reset(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public Gost3411Digest(Gost3411Digest t) + { + Reset(t); + } + + public string AlgorithmName + { + get { return "Gost3411"; } + } + + public int GetDigestSize() + { + return DIGEST_LENGTH; + } + + public void Update( + byte input) + { + xBuf[xBufOff++] = input; + if (xBufOff == xBuf.Length) + { + sumByteArray(xBuf); // calc sum M + processBlock(xBuf, 0); + xBufOff = 0; + } + byteCount++; + } + + public void BlockUpdate(byte[] input, int inOff, int length) + { + while ((xBufOff != 0) && (length > 0)) + { + Update(input[inOff]); + inOff++; + length--; + } + + while (length >= xBuf.Length) + { + Array.Copy(input, inOff, xBuf, 0, xBuf.Length); + + sumByteArray(xBuf); // calc sum M + processBlock(xBuf, 0); + inOff += xBuf.Length; + length -= xBuf.Length; + byteCount += (uint)xBuf.Length; + } + + // load in the remainder. + while (length > 0) + { + Update(input[inOff]); + inOff++; + length--; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + while ((xBufOff != 0) && (input.Length > 0)) + { + Update(input[0]); + input = input[1..]; + } + + while (input.Length >= xBuf.Length) + { + input[..xBuf.Length].CopyTo(xBuf.AsSpan()); + + sumByteArray(xBuf); // calc sum M + processBlock(xBuf, 0); + input = input[xBuf.Length..]; + byteCount += (uint)xBuf.Length; + } + + // load in the remainder. + while (input.Length > 0) + { + Update(input[0]); + input = input[1..]; + } + } +#endif + + // (i + 1 + 4(k - 1)) = 8i + k i = 0-3, k = 1-8 + private byte[] K = new byte[32]; + + private byte[] P(byte[] input) + { + int fourK = 0; + for(int k = 0; k < 8; k++) + { + K[fourK++] = input[k]; + K[fourK++] = input[8 + k]; + K[fourK++] = input[16 + k]; + K[fourK++] = input[24 + k]; + } + + return K; + } + + //A (x) = (x0 ^ x1) || x3 || x2 || x1 + byte[] a = new byte[8]; + private byte[] A(byte[] input) + { + for(int j=0; j<8; j++) + { + a[j]=(byte)(input[j] ^ input[j+8]); + } + + Array.Copy(input, 8, input, 0, 24); + Array.Copy(a, 0, input, 24, 8); + + return input; + } + + //Encrypt function, ECB mode + private void E(byte[] key, byte[] s, int sOff, byte[] input, int inOff) + { + cipher.Init(true, new KeyParameter(key)); + + cipher.ProcessBlock(input, inOff, s, sOff); + } + + // (in:) n16||..||n1 ==> (out:) n1^n2^n3^n4^n13^n16||n16||..||n2 + internal short[] wS = new short[16], w_S = new short[16]; + + private void fw(byte[] input) + { + cpyBytesToShort(input, wS); + w_S[15] = (short)(wS[0] ^ wS[1] ^ wS[2] ^ wS[3] ^ wS[12] ^ wS[15]); + Array.Copy(wS, 1, w_S, 0, 15); + cpyShortToBytes(w_S, input); + } + + // block processing + internal byte[] S = new byte[32], U = new byte[32], V = new byte[32], W = new byte[32]; + + private void processBlock(byte[] input, int inOff) + { + Array.Copy(input, inOff, M, 0, 32); + + //key step 1 + + // H = h3 || h2 || h1 || h0 + // S = s3 || s2 || s1 || s0 + H.CopyTo(U, 0); + M.CopyTo(V, 0); + for (int j=0; j<32; j++) + { + W[j] = (byte)(U[j]^V[j]); + } + // Encrypt gost28147-ECB + E(P(W), S, 0, H, 0); // s0 = EK0 [h0] + + //keys step 2,3,4 + for (int i=1; i<4; i++) + { + byte[] tmpA = A(U); + for (int j=0; j<32; j++) + { + U[j] = (byte)(tmpA[j] ^ C[i][j]); + } + V = A(A(V)); + for (int j=0; j<32; j++) + { + W[j] = (byte)(U[j]^V[j]); + } + // Encrypt gost28147-ECB + E(P(W), S, i * 8, H, i * 8); // si = EKi [hi] + } + + // x(M, H) = y61(H^y(M^y12(S))) + for(int n = 0; n < 12; n++) + { + fw(S); + } + for(int n = 0; n < 32; n++) + { + S[n] = (byte)(S[n] ^ M[n]); + } + + fw(S); + + for(int n = 0; n < 32; n++) + { + S[n] = (byte)(H[n] ^ S[n]); + } + for(int n = 0; n < 61; n++) + { + fw(S); + } + Array.Copy(S, 0, H, 0, H.Length); + } + + private void Finish() + { + ulong bitCount = byteCount * 8; + Pack.UInt64_To_LE(bitCount, L); + + while (xBufOff != 0) + { + Update((byte)0); + } + + processBlock(L, 0); + processBlock(Sum, 0); + } + + public int DoFinal(byte[] output, int outOff) + { + Finish(); + + H.CopyTo(output, outOff); + + Reset(); + + return DIGEST_LENGTH; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + Finish(); + + H.CopyTo(output); + + Reset(); + + return DIGEST_LENGTH; + } +#endif + + /** + * reset the chaining variables to the IV values. + */ + private static readonly byte[] C2 = { + 0x00,(byte)0xFF,0x00,(byte)0xFF,0x00,(byte)0xFF,0x00,(byte)0xFF, + (byte)0xFF,0x00,(byte)0xFF,0x00,(byte)0xFF,0x00,(byte)0xFF,0x00, + 0x00,(byte)0xFF,(byte)0xFF,0x00,(byte)0xFF,0x00,0x00,(byte)0xFF, + (byte)0xFF,0x00,0x00,0x00,(byte)0xFF,(byte)0xFF,0x00,(byte)0xFF + }; + + public void Reset() + { + byteCount = 0; + xBufOff = 0; + + Array.Clear(H, 0, H.Length); + Array.Clear(L, 0, L.Length); + Array.Clear(M, 0, M.Length); + Array.Clear(C[1], 0, C[1].Length); // real index C = +1 because index array with 0. + Array.Clear(C[3], 0, C[3].Length); + Array.Clear(Sum, 0, Sum.Length); + Array.Clear(xBuf, 0, xBuf.Length); + + C2.CopyTo(C[2], 0); + } + + // 256 bitsblock modul -> (Sum + a mod (2^256)) + private void sumByteArray( + byte[] input) + { + int carry = 0; + + for (int i = 0; i != Sum.Length; i++) + { + int sum = (Sum[i] & 0xff) + (input[i] & 0xff) + carry; + + Sum[i] = (byte)sum; + + carry = sum >> 8; + } + } + + private static void cpyBytesToShort(byte[] S, short[] wS) + { + for(int i = 0; i < S.Length / 2; i++) + { + wS[i] = (short)(((S[i*2+1]<<8)&0xFF00)|(S[i*2]&0xFF)); + } + } + + private static void cpyShortToBytes(short[] wS, byte[] S) + { + for(int i=0; i> 8); + S[i*2] = (byte)wS[i]; + } + } + + public int GetByteLength() + { + return 32; + } + + public IMemoable Copy() + { + return new Gost3411Digest(this); + } + + public void Reset(IMemoable other) + { + Gost3411Digest t = (Gost3411Digest)other; + + this.sBox = t.sBox; + cipher.Init(true, new ParametersWithSBox(null, sBox)); + + Reset(); + + Array.Copy(t.H, 0, this.H, 0, t.H.Length); + Array.Copy(t.L, 0, this.L, 0, t.L.Length); + Array.Copy(t.M, 0, this.M, 0, t.M.Length); + Array.Copy(t.Sum, 0, this.Sum, 0, t.Sum.Length); + Array.Copy(t.C[1], 0, this.C[1], 0, t.C[1].Length); + Array.Copy(t.C[2], 0, this.C[2], 0, t.C[2].Length); + Array.Copy(t.C[3], 0, this.C[3], 0, t.C[3].Length); + Array.Copy(t.xBuf, 0, this.xBuf, 0, t.xBuf.Length); + + this.xBufOff = t.xBufOff; + this.byteCount = t.byteCount; + } + } + +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411Digest.cs.meta new file mode 100644 index 000000000..3f86fdccf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 64f3ba3752b08254c9377349d44de349 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411_2012Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411_2012Digest.cs new file mode 100644 index 000000000..1b1d5ad14 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411_2012Digest.cs @@ -0,0 +1,1096 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + public abstract class Gost3411_2012Digest + : IDigest, IMemoable + { + private readonly byte[] IV = new byte[64]; + private readonly byte[] N = new byte[64]; + private readonly byte[] Sigma = new byte[64]; + private readonly byte[] Ki = new byte[64]; + private readonly byte[] m = new byte[64]; + private readonly byte[] h = new byte[64]; + + // Temporary buffers + private readonly byte[] tmp = new byte[64]; + private readonly byte[] block = new byte[64]; + + private int bOff = 64; + + protected Gost3411_2012Digest(byte[] IV) + { + Array.Copy(IV,this.IV,64); + Array.Copy(IV, h, 64); + } + + public abstract string AlgorithmName { get; } + + public abstract IMemoable Copy(); + + public virtual int DoFinal(byte[] output, int outOff) + { + int lenM = 64 - bOff; + + // At this point it is certain that lenM is smaller than 64 + for (int i = 0; i != 64 - lenM; i++) + { + m[i] = 0; + } + + m[63 - lenM] = 1; + + if (bOff != 64) + { + Array.Copy(block, bOff, m, 64 - lenM, lenM); + } + + g_N(h, N, m); + addMod512(N, lenM * 8); + addMod512(Sigma, m); + g_N(h, Zero, N); + g_N(h, Zero, Sigma); + + reverse(h, tmp); + + Array.Copy(tmp, 0, output, outOff, 64); + + Reset(); + return 64; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int DoFinal(Span output) + { + int lenM = 64 - bOff; + + // At this point it is certain that lenM is smaller than 64 + for (int i = 0; i != 64 - lenM; i++) + { + m[i] = 0; + } + + m[63 - lenM] = 1; + + if (bOff != 64) + { + Array.Copy(block, bOff, m, 64 - lenM, lenM); + } + + g_N(h, N, m); + addMod512(N, lenM * 8); + addMod512(Sigma, m); + g_N(h, Zero, N); + g_N(h, Zero, Sigma); + + reverse(h, tmp); + + tmp.CopyTo(output); + + Reset(); + return 64; + } +#endif + + public int GetByteLength() + { + return 64; + } + + public abstract int GetDigestSize(); + + + public void Reset() + { + bOff = 64; + Arrays.Fill(N, (byte)0); + Arrays.Fill(Sigma, (byte)0); + Array.Copy(IV, 0, h, 0, 64); + Arrays.Fill(block, (byte)0); + } + + public void Reset(IMemoable other) + { + Gost3411_2012Digest o = (Gost3411_2012Digest)other; + + Array.Copy(o.IV, 0, this.IV, 0, 64); + Array.Copy(o.N, 0, this.N, 0, 64); + Array.Copy(o.Sigma, 0, this.Sigma, 0, 64); + Array.Copy(o.Ki, 0, this.Ki, 0, 64); + Array.Copy(o.m, 0, this.m, 0, 64); + Array.Copy(o.h, 0, this.h, 0, 64); + + Array.Copy(o.block, 0, this.block, 0, 64); + this.bOff = o.bOff; + } + + public void Update(byte input) + { + block[--bOff] = input; + if (bOff == 0) + { + g_N(h, N, block); + addMod512(N, 512); + addMod512(Sigma, block); + bOff = 64; + } + } + + public void BlockUpdate(byte[] input, int inOff, int len) + { + while (bOff != 64 && len > 0) + { + Update(input[inOff++]); + len--; + } + while (len >= 64) + { + Array.Copy(input, inOff, tmp, 0, 64); + reverse(tmp, block); + g_N(h, N, block); + addMod512(N, 512); + addMod512(Sigma, block); + + len -= 64; + inOff += 64; + } + while (len > 0) + { + Update(input[inOff++]); + len--; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + while (bOff != 64 && input.Length > 0) + { + Update(input[0]); + input = input[1..]; + } + while (input.Length >= 64) + { + input[..64].CopyTo(tmp.AsSpan()); + reverse(tmp, block); + g_N(h, N, block); + addMod512(N, 512); + addMod512(Sigma, block); + + input = input[64..]; + } + while (input.Length > 0) + { + Update(input[0]); + input = input[1..]; + } + } +#endif + + private void F(byte[] V) + { + ulong[] res = new ulong[8]; + ulong r; + + r = 0; + r ^= T[0][(V[56] & 0xFF)]; + r ^= T[1][(V[48] & 0xFF)]; + r ^= T[2][(V[40] & 0xFF)]; + r ^= T[3][(V[32] & 0xFF)]; + r ^= T[4][(V[24] & 0xFF)]; + r ^= T[5][(V[16] & 0xFF)]; + r ^= T[6][(V[8] & 0xFF)]; + r ^= T[7][(V[0] & 0xFF)]; + res[0] = r; + + r = 0; + r ^= T[0][(V[57] & 0xFF)]; + r ^= T[1][(V[49] & 0xFF)]; + r ^= T[2][(V[41] & 0xFF)]; + r ^= T[3][(V[33] & 0xFF)]; + r ^= T[4][(V[25] & 0xFF)]; + r ^= T[5][(V[17] & 0xFF)]; + r ^= T[6][(V[9] & 0xFF)]; + r ^= T[7][(V[1] & 0xFF)]; + res[1] = r; + + r = 0; + r ^= T[0][(V[58] & 0xFF)]; + r ^= T[1][(V[50] & 0xFF)]; + r ^= T[2][(V[42] & 0xFF)]; + r ^= T[3][(V[34] & 0xFF)]; + r ^= T[4][(V[26] & 0xFF)]; + r ^= T[5][(V[18] & 0xFF)]; + r ^= T[6][(V[10] & 0xFF)]; + r ^= T[7][(V[2] & 0xFF)]; + res[2] = r; + + r = 0; + r ^= T[0][(V[59] & 0xFF)]; + r ^= T[1][(V[51] & 0xFF)]; + r ^= T[2][(V[43] & 0xFF)]; + r ^= T[3][(V[35] & 0xFF)]; + r ^= T[4][(V[27] & 0xFF)]; + r ^= T[5][(V[19] & 0xFF)]; + r ^= T[6][(V[11] & 0xFF)]; + r ^= T[7][(V[3] & 0xFF)]; + res[3] = r; + + r = 0; + r ^= T[0][(V[60] & 0xFF)]; + r ^= T[1][(V[52] & 0xFF)]; + r ^= T[2][(V[44] & 0xFF)]; + r ^= T[3][(V[36] & 0xFF)]; + r ^= T[4][(V[28] & 0xFF)]; + r ^= T[5][(V[20] & 0xFF)]; + r ^= T[6][(V[12] & 0xFF)]; + r ^= T[7][(V[4] & 0xFF)]; + res[4] = r; + + r = 0; + r ^= T[0][(V[61] & 0xFF)]; + r ^= T[1][(V[53] & 0xFF)]; + r ^= T[2][(V[45] & 0xFF)]; + r ^= T[3][(V[37] & 0xFF)]; + r ^= T[4][(V[29] & 0xFF)]; + r ^= T[5][(V[21] & 0xFF)]; + r ^= T[6][(V[13] & 0xFF)]; + r ^= T[7][(V[5] & 0xFF)]; + res[5] = r; + + r = 0; + r ^= T[0][(V[62] & 0xFF)]; + r ^= T[1][(V[54] & 0xFF)]; + r ^= T[2][(V[46] & 0xFF)]; + r ^= T[3][(V[38] & 0xFF)]; + r ^= T[4][(V[30] & 0xFF)]; + r ^= T[5][(V[22] & 0xFF)]; + r ^= T[6][(V[14] & 0xFF)]; + r ^= T[7][(V[6] & 0xFF)]; + res[6] = r; + + r = 0; + r ^= T[0][(V[63] & 0xFF)]; + r ^= T[1][(V[55] & 0xFF)]; + r ^= T[2][(V[47] & 0xFF)]; + r ^= T[3][(V[39] & 0xFF)]; + r ^= T[4][(V[31] & 0xFF)]; + r ^= T[5][(V[23] & 0xFF)]; + r ^= T[6][(V[15] & 0xFF)]; + r ^= T[7][(V[7] & 0xFF)]; + res[7] = r; + + r = res[0]; + V[7] = (byte)(r >> 56); + V[6] = (byte)(r >> 48); + V[5] = (byte)(r >> 40); + V[4] = (byte)(r >> 32); + V[3] = (byte)(r >> 24); + V[2] = (byte)(r >> 16); + V[1] = (byte)(r >> 8); + V[0] = (byte)(r); + + r = res[1]; + V[15] = (byte)(r >> 56); + V[14] = (byte)(r >> 48); + V[13] = (byte)(r >> 40); + V[12] = (byte)(r >> 32); + V[11] = (byte)(r >> 24); + V[10] = (byte)(r >> 16); + V[9] = (byte)(r >> 8); + V[8] = (byte)(r); + + r = res[2]; + V[23] = (byte)(r >> 56); + V[22] = (byte)(r >> 48); + V[21] = (byte)(r >> 40); + V[20] = (byte)(r >> 32); + V[19] = (byte)(r >> 24); + V[18] = (byte)(r >> 16); + V[17] = (byte)(r >> 8); + V[16] = (byte)(r); + + r = res[3]; + V[31] = (byte)(r >> 56); + V[30] = (byte)(r >> 48); + V[29] = (byte)(r >> 40); + V[28] = (byte)(r >> 32); + V[27] = (byte)(r >> 24); + V[26] = (byte)(r >> 16); + V[25] = (byte)(r >> 8); + V[24] = (byte)(r); + + r = res[4]; + V[39] = (byte)(r >> 56); + V[38] = (byte)(r >> 48); + V[37] = (byte)(r >> 40); + V[36] = (byte)(r >> 32); + V[35] = (byte)(r >> 24); + V[34] = (byte)(r >> 16); + V[33] = (byte)(r >> 8); + V[32] = (byte)(r); + + r = res[5]; + V[47] = (byte)(r >> 56); + V[46] = (byte)(r >> 48); + V[45] = (byte)(r >> 40); + V[44] = (byte)(r >> 32); + V[43] = (byte)(r >> 24); + V[42] = (byte)(r >> 16); + V[41] = (byte)(r >> 8); + V[40] = (byte)(r); + + r = res[6]; + V[55] = (byte)(r >> 56); + V[54] = (byte)(r >> 48); + V[53] = (byte)(r >> 40); + V[52] = (byte)(r >> 32); + V[51] = (byte)(r >> 24); + V[50] = (byte)(r >> 16); + V[49] = (byte)(r >> 8); + V[48] = (byte)(r); + + r = res[7]; + V[63] = (byte)(r >> 56); + V[62] = (byte)(r >> 48); + V[61] = (byte)(r >> 40); + V[60] = (byte)(r >> 32); + V[59] = (byte)(r >> 24); + V[58] = (byte)(r >> 16); + V[57] = (byte)(r >> 8); + V[56] = (byte)(r); + } + + private void xor512(byte[] A, byte[] B) + { + for (int i = 0; i < 64; ++i) + { + A[i] ^= B[i]; + } + } + + private void E(byte[] K, byte[] m) + { + Array.Copy(K, 0, Ki, 0, 64); + xor512(K, m); + F(K); + for (int i = 0; i < 11; ++i) + { + xor512(Ki, C[i]); + F(Ki); + xor512(K, Ki); + F(K); + } + xor512(Ki, C[11]); + F(Ki); + xor512(K, Ki); + } + + private void g_N(byte[] h, byte[] N, byte[] m) + { + Array.Copy(h, 0, tmp, 0, 64); + + xor512(h, N); + F(h); + + E(h, m); + xor512(h, tmp); + xor512(h, m); + } + + private void addMod512(byte[] A, int num) + { + int c; + c = (A[63] & 0xFF) + (num & 0xFF); + A[63] = (byte)c; + + c = (A[62] & 0xFF) + ((num >> 8) & 0xFF) + (c >> 8); + A[62] = (byte)c; + + for (int i = 61; (i >= 0) && (c > 0); --i) + { + c = (A[i] & 0xFF) + (c >> 8); + A[i] = (byte)c; + } + } + + private void addMod512(byte[] A, byte[] B) + { + for (int c = 0, i = 63; i >= 0; --i) + { + c = (A[i] & 0xFF) + (B[i] & 0xFF) + (c >> 8); + A[i] = (byte)c; + } + } + + private void reverse(byte[] src, byte[] dst) + { + int len = src.Length; + for (int i = 0; i < len; i++) + { + dst[len - 1 - i] = src[i]; + } + } + + private static readonly byte[][] C = new byte[][]{ new byte[]{ + (byte)0xb1, (byte)0x08, (byte)0x5b, (byte)0xda, (byte)0x1e, (byte)0xca, (byte)0xda, (byte)0xe9, + (byte)0xeb, (byte)0xcb, (byte)0x2f, (byte)0x81, (byte)0xc0, (byte)0x65, (byte)0x7c, (byte)0x1f, + (byte)0x2f, (byte)0x6a, (byte)0x76, (byte)0x43, (byte)0x2e, (byte)0x45, (byte)0xd0, (byte)0x16, + (byte)0x71, (byte)0x4e, (byte)0xb8, (byte)0x8d, (byte)0x75, (byte)0x85, (byte)0xc4, (byte)0xfc, + (byte)0x4b, (byte)0x7c, (byte)0xe0, (byte)0x91, (byte)0x92, (byte)0x67, (byte)0x69, (byte)0x01, + (byte)0xa2, (byte)0x42, (byte)0x2a, (byte)0x08, (byte)0xa4, (byte)0x60, (byte)0xd3, (byte)0x15, + (byte)0x05, (byte)0x76, (byte)0x74, (byte)0x36, (byte)0xcc, (byte)0x74, (byte)0x4d, (byte)0x23, + (byte)0xdd, (byte)0x80, (byte)0x65, (byte)0x59, (byte)0xf2, (byte)0xa6, (byte)0x45, (byte)0x07}, + + new byte[]{ + (byte)0x6f, (byte)0xa3, (byte)0xb5, (byte)0x8a, (byte)0xa9, (byte)0x9d, (byte)0x2f, (byte)0x1a, + (byte)0x4f, (byte)0xe3, (byte)0x9d, (byte)0x46, (byte)0x0f, (byte)0x70, (byte)0xb5, (byte)0xd7, + (byte)0xf3, (byte)0xfe, (byte)0xea, (byte)0x72, (byte)0x0a, (byte)0x23, (byte)0x2b, (byte)0x98, + (byte)0x61, (byte)0xd5, (byte)0x5e, (byte)0x0f, (byte)0x16, (byte)0xb5, (byte)0x01, (byte)0x31, + (byte)0x9a, (byte)0xb5, (byte)0x17, (byte)0x6b, (byte)0x12, (byte)0xd6, (byte)0x99, (byte)0x58, + (byte)0x5c, (byte)0xb5, (byte)0x61, (byte)0xc2, (byte)0xdb, (byte)0x0a, (byte)0xa7, (byte)0xca, + (byte)0x55, (byte)0xdd, (byte)0xa2, (byte)0x1b, (byte)0xd7, (byte)0xcb, (byte)0xcd, (byte)0x56, + (byte)0xe6, (byte)0x79, (byte)0x04, (byte)0x70, (byte)0x21, (byte)0xb1, (byte)0x9b, (byte)0xb7}, + new byte[]{ + (byte)0xf5, (byte)0x74, (byte)0xdc, (byte)0xac, (byte)0x2b, (byte)0xce, (byte)0x2f, (byte)0xc7, + (byte)0x0a, (byte)0x39, (byte)0xfc, (byte)0x28, (byte)0x6a, (byte)0x3d, (byte)0x84, (byte)0x35, + (byte)0x06, (byte)0xf1, (byte)0x5e, (byte)0x5f, (byte)0x52, (byte)0x9c, (byte)0x1f, (byte)0x8b, + (byte)0xf2, (byte)0xea, (byte)0x75, (byte)0x14, (byte)0xb1, (byte)0x29, (byte)0x7b, (byte)0x7b, + (byte)0xd3, (byte)0xe2, (byte)0x0f, (byte)0xe4, (byte)0x90, (byte)0x35, (byte)0x9e, (byte)0xb1, + (byte)0xc1, (byte)0xc9, (byte)0x3a, (byte)0x37, (byte)0x60, (byte)0x62, (byte)0xdb, (byte)0x09, + (byte)0xc2, (byte)0xb6, (byte)0xf4, (byte)0x43, (byte)0x86, (byte)0x7a, (byte)0xdb, (byte)0x31, + (byte)0x99, (byte)0x1e, (byte)0x96, (byte)0xf5, (byte)0x0a, (byte)0xba, (byte)0x0a, (byte)0xb2}, + new byte[]{ + (byte)0xef, (byte)0x1f, (byte)0xdf, (byte)0xb3, (byte)0xe8, (byte)0x15, (byte)0x66, (byte)0xd2, + (byte)0xf9, (byte)0x48, (byte)0xe1, (byte)0xa0, (byte)0x5d, (byte)0x71, (byte)0xe4, (byte)0xdd, + (byte)0x48, (byte)0x8e, (byte)0x85, (byte)0x7e, (byte)0x33, (byte)0x5c, (byte)0x3c, (byte)0x7d, + (byte)0x9d, (byte)0x72, (byte)0x1c, (byte)0xad, (byte)0x68, (byte)0x5e, (byte)0x35, (byte)0x3f, + (byte)0xa9, (byte)0xd7, (byte)0x2c, (byte)0x82, (byte)0xed, (byte)0x03, (byte)0xd6, (byte)0x75, + (byte)0xd8, (byte)0xb7, (byte)0x13, (byte)0x33, (byte)0x93, (byte)0x52, (byte)0x03, (byte)0xbe, + (byte)0x34, (byte)0x53, (byte)0xea, (byte)0xa1, (byte)0x93, (byte)0xe8, (byte)0x37, (byte)0xf1, + (byte)0x22, (byte)0x0c, (byte)0xbe, (byte)0xbc, (byte)0x84, (byte)0xe3, (byte)0xd1, (byte)0x2e}, + new byte[] { + (byte)0x4b, (byte)0xea, (byte)0x6b, (byte)0xac, (byte)0xad, (byte)0x47, (byte)0x47, (byte)0x99, + (byte)0x9a, (byte)0x3f, (byte)0x41, (byte)0x0c, (byte)0x6c, (byte)0xa9, (byte)0x23, (byte)0x63, + (byte)0x7f, (byte)0x15, (byte)0x1c, (byte)0x1f, (byte)0x16, (byte)0x86, (byte)0x10, (byte)0x4a, + (byte)0x35, (byte)0x9e, (byte)0x35, (byte)0xd7, (byte)0x80, (byte)0x0f, (byte)0xff, (byte)0xbd, + (byte)0xbf, (byte)0xcd, (byte)0x17, (byte)0x47, (byte)0x25, (byte)0x3a, (byte)0xf5, (byte)0xa3, + (byte)0xdf, (byte)0xff, (byte)0x00, (byte)0xb7, (byte)0x23, (byte)0x27, (byte)0x1a, (byte)0x16, + (byte)0x7a, (byte)0x56, (byte)0xa2, (byte)0x7e, (byte)0xa9, (byte)0xea, (byte)0x63, (byte)0xf5, + (byte)0x60, (byte)0x17, (byte)0x58, (byte)0xfd, (byte)0x7c, (byte)0x6c, (byte)0xfe, (byte)0x57}, + new byte[]{ + (byte)0xae, (byte)0x4f, (byte)0xae, (byte)0xae, (byte)0x1d, (byte)0x3a, (byte)0xd3, (byte)0xd9, + (byte)0x6f, (byte)0xa4, (byte)0xc3, (byte)0x3b, (byte)0x7a, (byte)0x30, (byte)0x39, (byte)0xc0, + (byte)0x2d, (byte)0x66, (byte)0xc4, (byte)0xf9, (byte)0x51, (byte)0x42, (byte)0xa4, (byte)0x6c, + (byte)0x18, (byte)0x7f, (byte)0x9a, (byte)0xb4, (byte)0x9a, (byte)0xf0, (byte)0x8e, (byte)0xc6, + (byte)0xcf, (byte)0xfa, (byte)0xa6, (byte)0xb7, (byte)0x1c, (byte)0x9a, (byte)0xb7, (byte)0xb4, + (byte)0x0a, (byte)0xf2, (byte)0x1f, (byte)0x66, (byte)0xc2, (byte)0xbe, (byte)0xc6, (byte)0xb6, + (byte)0xbf, (byte)0x71, (byte)0xc5, (byte)0x72, (byte)0x36, (byte)0x90, (byte)0x4f, (byte)0x35, + (byte)0xfa, (byte)0x68, (byte)0x40, (byte)0x7a, (byte)0x46, (byte)0x64, (byte)0x7d, (byte)0x6e}, + new byte[] { + (byte)0xf4, (byte)0xc7, (byte)0x0e, (byte)0x16, (byte)0xee, (byte)0xaa, (byte)0xc5, (byte)0xec, + (byte)0x51, (byte)0xac, (byte)0x86, (byte)0xfe, (byte)0xbf, (byte)0x24, (byte)0x09, (byte)0x54, + (byte)0x39, (byte)0x9e, (byte)0xc6, (byte)0xc7, (byte)0xe6, (byte)0xbf, (byte)0x87, (byte)0xc9, + (byte)0xd3, (byte)0x47, (byte)0x3e, (byte)0x33, (byte)0x19, (byte)0x7a, (byte)0x93, (byte)0xc9, + (byte)0x09, (byte)0x92, (byte)0xab, (byte)0xc5, (byte)0x2d, (byte)0x82, (byte)0x2c, (byte)0x37, + (byte)0x06, (byte)0x47, (byte)0x69, (byte)0x83, (byte)0x28, (byte)0x4a, (byte)0x05, (byte)0x04, + (byte)0x35, (byte)0x17, (byte)0x45, (byte)0x4c, (byte)0xa2, (byte)0x3c, (byte)0x4a, (byte)0xf3, + (byte)0x88, (byte)0x86, (byte)0x56, (byte)0x4d, (byte)0x3a, (byte)0x14, (byte)0xd4, (byte)0x93}, + new byte[] { + (byte)0x9b, (byte)0x1f, (byte)0x5b, (byte)0x42, (byte)0x4d, (byte)0x93, (byte)0xc9, (byte)0xa7, + (byte)0x03, (byte)0xe7, (byte)0xaa, (byte)0x02, (byte)0x0c, (byte)0x6e, (byte)0x41, (byte)0x41, + (byte)0x4e, (byte)0xb7, (byte)0xf8, (byte)0x71, (byte)0x9c, (byte)0x36, (byte)0xde, (byte)0x1e, + (byte)0x89, (byte)0xb4, (byte)0x44, (byte)0x3b, (byte)0x4d, (byte)0xdb, (byte)0xc4, (byte)0x9a, + (byte)0xf4, (byte)0x89, (byte)0x2b, (byte)0xcb, (byte)0x92, (byte)0x9b, (byte)0x06, (byte)0x90, + (byte)0x69, (byte)0xd1, (byte)0x8d, (byte)0x2b, (byte)0xd1, (byte)0xa5, (byte)0xc4, (byte)0x2f, + (byte)0x36, (byte)0xac, (byte)0xc2, (byte)0x35, (byte)0x59, (byte)0x51, (byte)0xa8, (byte)0xd9, + (byte)0xa4, (byte)0x7f, (byte)0x0d, (byte)0xd4, (byte)0xbf, (byte)0x02, (byte)0xe7, (byte)0x1e}, + new byte[]{ + (byte)0x37, (byte)0x8f, (byte)0x5a, (byte)0x54, (byte)0x16, (byte)0x31, (byte)0x22, (byte)0x9b, + (byte)0x94, (byte)0x4c, (byte)0x9a, (byte)0xd8, (byte)0xec, (byte)0x16, (byte)0x5f, (byte)0xde, + (byte)0x3a, (byte)0x7d, (byte)0x3a, (byte)0x1b, (byte)0x25, (byte)0x89, (byte)0x42, (byte)0x24, + (byte)0x3c, (byte)0xd9, (byte)0x55, (byte)0xb7, (byte)0xe0, (byte)0x0d, (byte)0x09, (byte)0x84, + (byte)0x80, (byte)0x0a, (byte)0x44, (byte)0x0b, (byte)0xdb, (byte)0xb2, (byte)0xce, (byte)0xb1, + (byte)0x7b, (byte)0x2b, (byte)0x8a, (byte)0x9a, (byte)0xa6, (byte)0x07, (byte)0x9c, (byte)0x54, + (byte)0x0e, (byte)0x38, (byte)0xdc, (byte)0x92, (byte)0xcb, (byte)0x1f, (byte)0x2a, (byte)0x60, + (byte)0x72, (byte)0x61, (byte)0x44, (byte)0x51, (byte)0x83, (byte)0x23, (byte)0x5a, (byte)0xdb}, + new byte[] { + (byte)0xab, (byte)0xbe, (byte)0xde, (byte)0xa6, (byte)0x80, (byte)0x05, (byte)0x6f, (byte)0x52, + (byte)0x38, (byte)0x2a, (byte)0xe5, (byte)0x48, (byte)0xb2, (byte)0xe4, (byte)0xf3, (byte)0xf3, + (byte)0x89, (byte)0x41, (byte)0xe7, (byte)0x1c, (byte)0xff, (byte)0x8a, (byte)0x78, (byte)0xdb, + (byte)0x1f, (byte)0xff, (byte)0xe1, (byte)0x8a, (byte)0x1b, (byte)0x33, (byte)0x61, (byte)0x03, + (byte)0x9f, (byte)0xe7, (byte)0x67, (byte)0x02, (byte)0xaf, (byte)0x69, (byte)0x33, (byte)0x4b, + (byte)0x7a, (byte)0x1e, (byte)0x6c, (byte)0x30, (byte)0x3b, (byte)0x76, (byte)0x52, (byte)0xf4, + (byte)0x36, (byte)0x98, (byte)0xfa, (byte)0xd1, (byte)0x15, (byte)0x3b, (byte)0xb6, (byte)0xc3, + (byte)0x74, (byte)0xb4, (byte)0xc7, (byte)0xfb, (byte)0x98, (byte)0x45, (byte)0x9c, (byte)0xed}, + new byte[] { + (byte)0x7b, (byte)0xcd, (byte)0x9e, (byte)0xd0, (byte)0xef, (byte)0xc8, (byte)0x89, (byte)0xfb, + (byte)0x30, (byte)0x02, (byte)0xc6, (byte)0xcd, (byte)0x63, (byte)0x5a, (byte)0xfe, (byte)0x94, + (byte)0xd8, (byte)0xfa, (byte)0x6b, (byte)0xbb, (byte)0xeb, (byte)0xab, (byte)0x07, (byte)0x61, + (byte)0x20, (byte)0x01, (byte)0x80, (byte)0x21, (byte)0x14, (byte)0x84, (byte)0x66, (byte)0x79, + (byte)0x8a, (byte)0x1d, (byte)0x71, (byte)0xef, (byte)0xea, (byte)0x48, (byte)0xb9, (byte)0xca, + (byte)0xef, (byte)0xba, (byte)0xcd, (byte)0x1d, (byte)0x7d, (byte)0x47, (byte)0x6e, (byte)0x98, + (byte)0xde, (byte)0xa2, (byte)0x59, (byte)0x4a, (byte)0xc0, (byte)0x6f, (byte)0xd8, (byte)0x5d, + (byte)0x6b, (byte)0xca, (byte)0xa4, (byte)0xcd, (byte)0x81, (byte)0xf3, (byte)0x2d, (byte)0x1b}, + new byte[] { + (byte)0x37, (byte)0x8e, (byte)0xe7, (byte)0x67, (byte)0xf1, (byte)0x16, (byte)0x31, (byte)0xba, + (byte)0xd2, (byte)0x13, (byte)0x80, (byte)0xb0, (byte)0x04, (byte)0x49, (byte)0xb1, (byte)0x7a, + (byte)0xcd, (byte)0xa4, (byte)0x3c, (byte)0x32, (byte)0xbc, (byte)0xdf, (byte)0x1d, (byte)0x77, + (byte)0xf8, (byte)0x20, (byte)0x12, (byte)0xd4, (byte)0x30, (byte)0x21, (byte)0x9f, (byte)0x9b, + (byte)0x5d, (byte)0x80, (byte)0xef, (byte)0x9d, (byte)0x18, (byte)0x91, (byte)0xcc, (byte)0x86, + (byte)0xe7, (byte)0x1d, (byte)0xa4, (byte)0xaa, (byte)0x88, (byte)0xe1, (byte)0x28, (byte)0x52, + (byte)0xfa, (byte)0xf4, (byte)0x17, (byte)0xd5, (byte)0xd9, (byte)0xb2, (byte)0x1b, (byte)0x99, + (byte)0x48, (byte)0xbc, (byte)0x92, (byte)0x4a, (byte)0xf1, (byte)0x1b, (byte)0xd7, (byte)0x20} + }; + + private static readonly byte[] Zero = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + + private readonly static ulong[][] T = { + new ulong[] { + 0xE6F87E5C5B711FD0L, 0x258377800924FA16L, 0xC849E07E852EA4A8L, 0x5B4686A18F06C16AL, + 0x0B32E9A2D77B416EL, 0xABDA37A467815C66L, 0xF61796A81A686676L, 0xF5DC0B706391954BL, + 0x4862F38DB7E64BF1L, 0xFF5C629A68BD85C5L, 0xCB827DA6FCD75795L, 0x66D36DAF69B9F089L, + 0x356C9F74483D83B0L, 0x7CBCECB1238C99A1L, 0x36A702AC31C4708DL, 0x9EB6A8D02FBCDFD6L, + 0x8B19FA51E5B3AE37L, 0x9CCFB5408A127D0BL, 0xBC0C78B508208F5AL, 0xE533E3842288ECEDL, + 0xCEC2C7D377C15FD2L, 0xEC7817B6505D0F5EL, 0xB94CC2C08336871DL, 0x8C205DB4CB0B04ADL, + 0x763C855B28A0892FL, 0x588D1B79F6FF3257L, 0x3FECF69E4311933EL, 0x0FC0D39F803A18C9L, + 0xEE010A26F5F3AD83L, 0x10EFE8F4411979A6L, 0x5DCDA10C7DE93A10L, 0x4A1BEE1D1248E92CL, + 0x53BFF2DB21847339L, 0xB4F50CCFA6A23D09L, 0x5FB4BC9CD84798CDL, 0xE88A2D8B071C56F9L, + 0x7F7771695A756A9CL, 0xC5F02E71A0BA1EBCL, 0xA663F9AB4215E672L, 0x2EB19E22DE5FBB78L, + 0x0DB9CE0F2594BA14L, 0x82520E6397664D84L, 0x2F031E6A0208EA98L, 0x5C7F2144A1BE6BF0L, + 0x7A37CB1CD16362DBL, 0x83E08E2B4B311C64L, 0xCF70479BAB960E32L, 0x856BA986B9DEE71EL, + 0xB5478C877AF56CE9L, 0xB8FE42885F61D6FDL, 0x1BDD0156966238C8L, 0x622157923EF8A92EL, + 0xFC97FF42114476F8L, 0x9D7D350856452CEBL, 0x4C90C9B0E0A71256L, 0x2308502DFBCB016CL, + 0x2D7A03FAA7A64845L, 0xF46E8B38BFC6C4ABL, 0xBDBEF8FDD477DEBAL, 0x3AAC4CEBC8079B79L, + 0xF09CB105E8879D0CL, 0x27FA6A10AC8A58CBL, 0x8960E7C1401D0CEAL, 0x1A6F811E4A356928L, + 0x90C4FB0773D196FFL, 0x43501A2F609D0A9FL, 0xF7A516E0C63F3796L, 0x1CE4A6B3B8DA9252L, + 0x1324752C38E08A9BL, 0xA5A864733BEC154FL, 0x2BF124575549B33FL, 0xD766DB15440DC5C7L, + 0xA7D179E39E42B792L, 0xDADF151A61997FD3L, 0x86A0345EC0271423L, 0x38D5517B6DA939A4L, + 0x6518F077104003B4L, 0x02791D90A5AEA2DDL, 0x88D267899C4A5D0AL, 0x930F66DF0A2865C2L, + 0x4EE9D4204509B08BL, 0x325538916685292AL, 0x412907BFC533A842L, 0xB27E2B62544DC673L, + 0x6C5304456295E007L, 0x5AF406E95351908AL, 0x1F2F3B6BC123616FL, 0xC37B09DC5255E5C6L, + 0x3967D133B1FE6844L, 0x298839C7F0E711E2L, 0x409B87F71964F9A2L, 0xE938ADC3DB4B0719L, + 0x0C0B4E47F9C3EBF4L, 0x5534D576D36B8843L, 0x4610A05AEB8B02D8L, 0x20C3CDF58232F251L, + 0x6DE1840DBEC2B1E7L, 0xA0E8DE06B0FA1D08L, 0x7B854B540D34333BL, 0x42E29A67BCCA5B7FL, + 0xD8A6088AC437DD0EL, 0xC63BB3A9D943ED81L, 0x21714DBD5E65A3B1L, 0x6761EDE7B5EEA169L, + 0x2431F7C8D573ABF6L, 0xD51FC685E1A3671AL, 0x5E063CD40410C92DL, 0x283AB98F2CB04002L, + 0x8FEBC06CB2F2F790L, 0x17D64F116FA1D33CL, 0xE07359F1A99EE4AAL, 0x784ED68C74CDC006L, + 0x6E2A19D5C73B42DAL, 0x8712B4161C7045C3L, 0x371582E4ED93216DL, 0xACE390414939F6FCL, + 0x7EC5F12186223B7CL, 0xC0B094042BAC16FBL, 0xF9D745379A527EBFL, 0x737C3F2EA3B68168L, + 0x33E7B8D9BAD278CAL, 0xA9A32A34C22FFEBBL, 0xE48163CCFEDFBD0DL, 0x8E5940246EA5A670L, + 0x51C6EF4B842AD1E4L, 0x22BAD065279C508CL, 0xD91488C218608CEEL, 0x319EA5491F7CDA17L, + 0xD394E128134C9C60L, 0x094BF43272D5E3B3L, 0x9BF612A5A4AAD791L, 0xCCBBDA43D26FFD0FL, + 0x34DE1F3C946AD250L, 0x4F5B5468995EE16BL, 0xDF9FAF6FEA8F7794L, 0x2648EA5870DD092BL, + 0xBFC7E56D71D97C67L, 0xDDE6B2FF4F21D549L, 0x3C276B463AE86003L, 0x91767B4FAF86C71FL, + 0x68A13E7835D4B9A0L, 0xB68C115F030C9FD4L, 0x141DD2C916582001L, 0x983D8F7DDD5324ACL, + 0x64AA703FCC175254L, 0xC2C989948E02B426L, 0x3E5E76D69F46C2DEL, 0x50746F03587D8004L, + 0x45DB3D829272F1E5L, 0x60584A029B560BF3L, 0xFBAE58A73FFCDC62L, 0xA15A5E4E6CAD4CE8L, + 0x4BA96E55CE1FB8CCL, 0x08F9747AAE82B253L, 0xC102144CF7FB471BL, 0x9F042898F3EB8E36L, + 0x068B27ADF2EFFB7AL, 0xEDCA97FE8C0A5EBEL, 0x778E0513F4F7D8CFL, 0x302C2501C32B8BF7L, + 0x8D92DDFC175C554DL, 0xF865C57F46052F5FL, 0xEAF3301BA2B2F424L, 0xAA68B7ECBBD60D86L, + 0x998F0F350104754CL, 0x0000000000000000L, 0xF12E314D34D0CCECL, 0x710522BE061823B5L, + 0xAF280D9930C005C1L, 0x97FD5CE25D693C65L, 0x19A41CC633CC9A15L, 0x95844172F8C79EB8L, + 0xDC5432B7937684A9L, 0x9436C13A2490CF58L, 0x802B13F332C8EF59L, 0xC442AE397CED4F5CL, + 0xFA1CD8EFE3AB8D82L, 0xF2E5AC954D293FD1L, 0x6AD823E8907A1B7DL, 0x4D2249F83CF043B6L, + 0x03CB9DD879F9F33DL, 0xDE2D2F2736D82674L, 0x2A43A41F891EE2DFL, 0x6F98999D1B6C133AL, + 0xD4AD46CD3DF436FAL, 0xBB35DF50269825C0L, 0x964FDCAA813E6D85L, 0xEB41B0537EE5A5C4L, + 0x0540BA758B160847L, 0xA41AE43BE7BB44AFL, 0xE3B8C429D0671797L, 0x819993BBEE9FBEB9L, + 0xAE9A8DD1EC975421L, 0xF3572CDD917E6E31L, 0x6393D7DAE2AFF8CEL, 0x47A2201237DC5338L, + 0xA32343DEC903EE35L, 0x79FC56C4A89A91E6L, 0x01B28048DC5751E0L, 0x1296F564E4B7DB7BL, + 0x75F7188351597A12L, 0xDB6D9552BDCE2E33L, 0x1E9DBB231D74308FL, 0x520D7293FDD322D9L, + 0xE20A44610C304677L, 0xFEEEE2D2B4EAD425L, 0xCA30FDEE20800675L, 0x61EACA4A47015A13L, + 0xE74AFE1487264E30L, 0x2CC883B27BF119A5L, 0x1664CF59B3F682DCL, 0xA811AA7C1E78AF5BL, + 0x1D5626FB648DC3B2L, 0xB73E9117DF5BCE34L, 0xD05F7CF06AB56F5DL, 0xFD257F0ACD132718L, + 0x574DC8E676C52A9EL, 0x0739A7E52EB8AA9AL, 0x5486553E0F3CD9A3L, 0x56FF48AEAA927B7EL, + 0xBE756525AD8E2D87L, 0x7D0E6CF9FFDBC841L, 0x3B1ECCA31450CA99L, 0x6913BE30E983E840L, + 0xAD511009956EA71CL, 0xB1B5B6BA2DB4354EL, 0x4469BDCA4E25A005L, 0x15AF5281CA0F71E1L, + 0x744598CB8D0E2BF2L, 0x593F9B312AA863B7L, 0xEFB38A6E29A4FC63L, 0x6B6AA3A04C2D4A9DL, + 0x3D95EB0EE6BF31E3L, 0xA291C3961554BFD5L, 0x18169C8EEF9BCBF5L, 0x115D68BC9D4E2846L, + 0xBA875F18FACF7420L, 0xD1EDFCB8B6E23EBDL, 0xB00736F2F1E364AEL, 0x84D929CE6589B6FEL, + 0x70B7A2F6DA4F7255L, 0x0E7253D75C6D4929L, 0x04F23A3D574159A7L, 0x0A8069EA0B2C108EL, + 0x49D073C56BB11A11L, 0x8AAB7A1939E4FFD7L, 0xCD095A0B0E38ACEFL, 0xC9FB60365979F548L, + 0x92BDE697D67F3422L, 0xC78933E10514BC61L, 0xE1C1D9B975C9B54AL, 0xD2266160CF1BCD80L, + 0x9A4492ED78FD8671L, 0xB3CCAB2A881A9793L, 0x72CEBF667FE1D088L, 0xD6D45B5D985A9427L + }, + new ulong[]{ + 0xC811A8058C3F55DEL, 0x65F5B43196B50619L, 0xF74F96B1D6706E43L, 0x859D1E8BCB43D336L, + 0x5AAB8A85CCFA3D84L, 0xF9C7BF99C295FCFDL, 0xA21FD5A1DE4B630FL, 0xCDB3EF763B8B456DL, + 0x803F59F87CF7C385L, 0xB27C73BE5F31913CL, 0x98E3AC6633B04821L, 0xBF61674C26B8F818L, + 0x0FFBC995C4C130C8L, 0xAAA0862010761A98L, 0x6057F342210116AAL, 0xF63C760C0654CC35L, + 0x2DDB45CC667D9042L, 0xBCF45A964BD40382L, 0x68E8A0C3EF3C6F3DL, 0xA7BD92D269FF73BCL, + 0x290AE20201ED2287L, 0xB7DE34CDE885818FL, 0xD901EEA7DD61059BL, 0xD6FA273219A03553L, + 0xD56F1AE874CCCEC9L, 0xEA31245C2E83F554L, 0x7034555DA07BE499L, 0xCE26D2AC56E7BEF7L, + 0xFD161857A5054E38L, 0x6A0E7DA4527436D1L, 0x5BD86A381CDE9FF2L, 0xCAF7756231770C32L, + 0xB09AAED9E279C8D0L, 0x5DEF1091C60674DBL, 0x111046A2515E5045L, 0x23536CE4729802FCL, + 0xC50CBCF7F5B63CFAL, 0x73A16887CD171F03L, 0x7D2941AFD9F28DBDL, 0x3F5E3EB45A4F3B9DL, + 0x84EEFE361B677140L, 0x3DB8E3D3E7076271L, 0x1A3A28F9F20FD248L, 0x7EBC7C75B49E7627L, + 0x74E5F293C7EB565CL, 0x18DCF59E4F478BA4L, 0x0C6EF44FA9ADCB52L, 0xC699812D98DAC760L, + 0x788B06DC6E469D0EL, 0xFC65F8EA7521EC4EL, 0x30A5F7219E8E0B55L, 0x2BEC3F65BCA57B6BL, + 0xDDD04969BAF1B75EL, 0x99904CDBE394EA57L, 0x14B201D1E6EA40F6L, 0xBBB0C08241284ADDL, + 0x50F20463BF8F1DFFL, 0xE8D7F93B93CBACB8L, 0x4D8CB68E477C86E8L, 0xC1DD1B3992268E3FL, + 0x7C5AA11209D62FCBL, 0x2F3D98ABDB35C9AEL, 0x671369562BFD5FF5L, 0x15C1E16C36CEE280L, + 0x1D7EB2EDF8F39B17L, 0xDA94D37DB00DFE01L, 0x877BC3EC760B8ADAL, 0xCB8495DFE153AE44L, + 0x05A24773B7B410B3L, 0x12857B783C32ABDFL, 0x8EB770D06812513BL, 0x536739B9D2E3E665L, + 0x584D57E271B26468L, 0xD789C78FC9849725L, 0xA935BBFA7D1AE102L, 0x8B1537A3DFA64188L, + 0xD0CD5D9BC378DE7AL, 0x4AC82C9A4D80CFB7L, 0x42777F1B83BDB620L, 0x72D2883A1D33BD75L, + 0x5E7A2D4BAB6A8F41L, 0xF4DAAB6BBB1C95D9L, 0x905CFFE7FD8D31B6L, 0x83AA6422119B381FL, + 0xC0AEFB8442022C49L, 0xA0F908C663033AE3L, 0xA428AF0804938826L, 0xADE41C341A8A53C7L, + 0xAE7121EE77E6A85DL, 0xC47F5C4A25929E8CL, 0xB538E9AA55CDD863L, 0x06377AA9DAD8EB29L, + 0xA18AE87BB3279895L, 0x6EDFDA6A35E48414L, 0x6B7D9D19825094A7L, 0xD41CFA55A4E86CBFL, + 0xE5CAEDC9EA42C59CL, 0xA36C351C0E6FC179L, 0x5181E4DE6FABBF89L, 0xFFF0C530184D17D4L, + 0x9D41EB1584045892L, 0x1C0D525028D73961L, 0xF178EC180CA8856AL, 0x9A0571018EF811CDL, + 0x4091A27C3EF5EFCCL, 0x19AF15239F6329D2L, 0x347450EFF91EB990L, 0xE11B4A078DD27759L, + 0xB9561DE5FC601331L, 0x912F1F5A2DA993C0L, 0x1654DCB65BA2191AL, 0x3E2DDE098A6B99EBL, + 0x8A66D71E0F82E3FEL, 0x8C51ADB7D55A08D7L, 0x4533E50F8941FF7FL, 0x02E6DD67BD4859ECL, + 0xE068AABA5DF6D52FL, 0xC24826E3FF4A75A5L, 0x6C39070D88ACDDF8L, 0x6486548C4691A46FL, + 0xD1BEBD26135C7C0CL, 0xB30F93038F15334AL, 0x82D9849FC1BF9A69L, 0x9C320BA85420FAE4L, + 0xFA528243AFF90767L, 0x9ED4D6CFE968A308L, 0xB825FD582C44B147L, 0x9B7691BC5EDCB3BBL, + 0xC7EA619048FE6516L, 0x1063A61F817AF233L, 0x47D538683409A693L, 0x63C2CE984C6DED30L, + 0x2A9FDFD86C81D91DL, 0x7B1E3B06032A6694L, 0x666089EBFBD9FD83L, 0x0A598EE67375207BL, + 0x07449A140AFC495FL, 0x2CA8A571B6593234L, 0x1F986F8A45BBC2FBL, 0x381AA4A050B372C2L, + 0x5423A3ADD81FAF3AL, 0x17273C0B8B86BB6CL, 0xFE83258DC869B5A2L, 0x287902BFD1C980F1L, + 0xF5A94BD66B3837AFL, 0x88800A79B2CABA12L, 0x55504310083B0D4CL, 0xDF36940E07B9EEB2L, + 0x04D1A7CE6790B2C5L, 0x612413FFF125B4DCL, 0x26F12B97C52C124FL, 0x86082351A62F28ACL, + 0xEF93632F9937E5E7L, 0x3507B052293A1BE6L, 0xE72C30AE570A9C70L, 0xD3586041AE1425E0L, + 0xDE4574B3D79D4CC4L, 0x92BA228040C5685AL, 0xF00B0CA5DC8C271CL, 0xBE1287F1F69C5A6EL, + 0xF39E317FB1E0DC86L, 0x495D114020EC342DL, 0x699B407E3F18CD4BL, 0xDCA3A9D46AD51528L, + 0x0D1D14F279896924L, 0x0000000000000000L, 0x593EB75FA196C61EL, 0x2E4E78160B116BD8L, + 0x6D4AE7B058887F8EL, 0xE65FD013872E3E06L, 0x7A6DDBBBD30EC4E2L, 0xAC97FC89CAAEF1B1L, + 0x09CCB33C1E19DBE1L, 0x89F3EAC462EE1864L, 0x7770CF49AA87ADC6L, 0x56C57ECA6557F6D6L, + 0x03953DDA6D6CFB9AL, 0x36928D884456E07CL, 0x1EEB8F37959F608DL, 0x31D6179C4EAAA923L, + 0x6FAC3AD7E5C02662L, 0x43049FA653991456L, 0xABD3669DC052B8EEL, 0xAF02C153A7C20A2BL, + 0x3CCB036E3723C007L, 0x93C9C23D90E1CA2CL, 0xC33BC65E2F6ED7D3L, 0x4CFF56339758249EL, + 0xB1E94E64325D6AA6L, 0x37E16D359472420AL, 0x79F8E661BE623F78L, 0x5214D90402C74413L, + 0x482EF1FDF0C8965BL, 0x13F69BC5EC1609A9L, 0x0E88292814E592BEL, 0x4E198B542A107D72L, + 0xCCC00FCBEBAFE71BL, 0x1B49C844222B703EL, 0x2564164DA840E9D5L, 0x20C6513E1FF4F966L, + 0xBAC3203F910CE8ABL, 0xF2EDD1C261C47EF0L, 0x814CB945ACD361F3L, 0x95FEB8944A392105L, + 0x5C9CF02C1622D6ADL, 0x971865F3F77178E9L, 0xBD87BA2B9BF0A1F4L, 0x444005B259655D09L, + 0xED75BE48247FBC0BL, 0x7596122E17CFF42AL, 0xB44B091785E97A15L, 0x966B854E2755DA9FL, + 0xEEE0839249134791L, 0x32432A4623C652B9L, 0xA8465B47AD3E4374L, 0xF8B45F2412B15E8BL, + 0x2417F6F078644BA3L, 0xFB2162FE7FDDA511L, 0x4BBBCC279DA46DC1L, 0x0173E0BDD024A276L, + 0x22208C59A2BCA08AL, 0x8FC4906DB836F34DL, 0xE4B90D743A6667EAL, 0x7147B5E0705F46EFL, + 0x2782CB2A1508B039L, 0xEC065EF5F45B1E7DL, 0x21B5B183CFD05B10L, 0xDBE733C060295C77L, + 0x9FA73672394C017EL, 0xCF55321186C31C81L, 0xD8720E1A0D45A7EDL, 0x3B8F997A3DDF8958L, + 0x3AFC79C7EDFB2B2EL, 0xE9A4198643EF0ECEL, 0x5F09CDF67B4E2D37L, 0x4F6A6BE9FA34DF04L, + 0xB6ADD47038A123F9L, 0x8D224D0A057EAAA1L, 0xC96248B85C1BF7A8L, 0xE3FD9760309A2EB5L, + 0x0B2A6E5BA351820DL, 0xEB42C4E1FEA75722L, 0x948D58299A1D8373L, 0x7FCF9CC864BAD451L, + 0xA55B4FB5D4B72A50L, 0x08BF5381CE3D7997L, 0x46A6D8D5E42D04E5L, 0xD22B80FC7E308796L, + 0x57B69E77B57354A0L, 0x3969441D8097D0B4L, 0x3330CAFBF3E2F0CFL, 0xE28E77DDE0BE8CC3L, + 0x62B12E259C494F46L, 0xA6CE726FB9DBD1CAL, 0x41E242C1EED14DBAL, 0x76032FF47AA30FB0L + }, + new ulong[]{ + 0x45B268A93ACDE4CCL, 0xAF7F0BE884549D08L, 0x048354B3C1468263L, 0x925435C2C80EFED2L, + 0xEE4E37F27FDFFBA7L, 0x167A33920C60F14DL, 0xFB123B52EA03E584L, 0x4A0CAB53FDBB9007L, + 0x9DEAF6380F788A19L, 0xCB48EC558F0CB32AL, 0xB59DC4B2D6FEF7E0L, 0xDCDBCA22F4F3ECB6L, + 0x11DF5813549A9C40L, 0xE33FDEDF568ACED3L, 0xA0C1C8124322E9C3L, 0x07A56B8158FA6D0DL, + 0x77279579B1E1F3DDL, 0xD9B18B74422AC004L, 0xB8EC2D9FFFABC294L, 0xF4ACF8A82D75914FL, + 0x7BBF69B1EF2B6878L, 0xC4F62FAF487AC7E1L, 0x76CE809CC67E5D0CL, 0x6711D88F92E4C14CL, + 0x627B99D9243DEDFEL, 0x234AA5C3DFB68B51L, 0x909B1F15262DBF6DL, 0x4F66EA054B62BCB5L, + 0x1AE2CF5A52AA6AE8L, 0xBEA053FBD0CE0148L, 0xED6808C0E66314C9L, 0x43FE16CD15A82710L, + 0xCD049231A06970F6L, 0xE7BC8A6C97CC4CB0L, 0x337CE835FCB3B9C0L, 0x65DEF2587CC780F3L, + 0x52214EDE4132BB50L, 0x95F15E4390F493DFL, 0x870839625DD2E0F1L, 0x41313C1AFB8B66AFL, + 0x91720AF051B211BCL, 0x477D427ED4EEA573L, 0x2E3B4CEEF6E3BE25L, 0x82627834EB0BCC43L, + 0x9C03E3DD78E724C8L, 0x2877328AD9867DF9L, 0x14B51945E243B0F2L, 0x574B0F88F7EB97E2L, + 0x88B6FA989AA4943AL, 0x19C4F068CB168586L, 0x50EE6409AF11FAEFL, 0x7DF317D5C04EABA4L, + 0x7A567C5498B4C6A9L, 0xB6BBFB804F42188EL, 0x3CC22BCF3BC5CD0BL, 0xD04336EAAA397713L, + 0xF02FAC1BEC33132CL, 0x2506DBA7F0D3488DL, 0xD7E65D6BF2C31A1EL, 0x5EB9B2161FF820F5L, + 0x842E0650C46E0F9FL, 0x716BEB1D9E843001L, 0xA933758CAB315ED4L, 0x3FE414FDA2792265L, + 0x27C9F1701EF00932L, 0x73A4C1CA70A771BEL, 0x94184BA6E76B3D0EL, 0x40D829FF8C14C87EL, + 0x0FBEC3FAC77674CBL, 0x3616A9634A6A9572L, 0x8F139119C25EF937L, 0xF545ED4D5AEA3F9EL, + 0xE802499650BA387BL, 0x6437E7BD0B582E22L, 0xE6559F89E053E261L, 0x80AD52E305288DFCL, + 0x6DC55A23E34B9935L, 0xDE14E0F51AD0AD09L, 0xC6390578A659865EL, 0x96D7617109487CB1L, + 0xE2D6CB3A21156002L, 0x01E915E5779FAED1L, 0xADB0213F6A77DCB7L, 0x9880B76EB9A1A6ABL, + 0x5D9F8D248644CF9BL, 0xFD5E4536C5662658L, 0xF1C6B9FE9BACBDFDL, 0xEACD6341BE9979C4L, + 0xEFA7221708405576L, 0x510771ECD88E543EL, 0xC2BA51CB671F043DL, 0x0AD482AC71AF5879L, + 0xFE787A045CDAC936L, 0xB238AF338E049AEDL, 0xBD866CC94972EE26L, 0x615DA6EBBD810290L, + 0x3295FDD08B2C1711L, 0xF834046073BF0AEAL, 0xF3099329758FFC42L, 0x1CAEB13E7DCFA934L, + 0xBA2307481188832BL, 0x24EFCE42874CE65CL, 0x0E57D61FB0E9DA1AL, 0xB3D1BAD6F99B343CL, + 0xC0757B1C893C4582L, 0x2B510DB8403A9297L, 0x5C7698C1F1DB614AL, 0x3E0D0118D5E68CB4L, + 0xD60F488E855CB4CFL, 0xAE961E0DF3CB33D9L, 0x3A8E55AB14A00ED7L, 0x42170328623789C1L, + 0x838B6DD19C946292L, 0x895FEF7DED3B3AEBL, 0xCFCBB8E64E4A3149L, 0x064C7E642F65C3DCL, + 0x3D2B3E2A4C5A63DAL, 0x5BD3F340A9210C47L, 0xB474D157A1615931L, 0xAC5934DA1DE87266L, + 0x6EE365117AF7765BL, 0xC86ED36716B05C44L, 0x9BA6885C201D49C5L, 0xB905387A88346C45L, + 0x131072C4BAB9DDFFL, 0xBF49461EA751AF99L, 0xD52977BC1CE05BA1L, 0xB0F785E46027DB52L, + 0x546D30BA6E57788CL, 0x305AD707650F56AEL, 0xC987C682612FF295L, 0xA5AB8944F5FBC571L, + 0x7ED528E759F244CAL, 0x8DDCBBCE2C7DB888L, 0xAA154ABE328DB1BAL, 0x1E619BE993ECE88BL, + 0x09F2BD9EE813B717L, 0x7401AA4B285D1CB3L, 0x21858F143195CAEEL, 0x48C381841398D1B8L, + 0xFCB750D3B2F98889L, 0x39A86A998D1CE1B9L, 0x1F888E0CE473465AL, 0x7899568376978716L, + 0x02CF2AD7EE2341BFL, 0x85C713B5B3F1A14EL, 0xFF916FE12B4567E7L, 0x7C1A0230B7D10575L, + 0x0C98FCC85ECA9BA5L, 0xA3E7F720DA9E06ADL, 0x6A6031A2BBB1F438L, 0x973E74947ED7D260L, + 0x2CF4663918C0FF9AL, 0x5F50A7F368678E24L, 0x34D983B4A449D4CDL, 0x68AF1B755592B587L, + 0x7F3C3D022E6DEA1BL, 0xABFC5F5B45121F6BL, 0x0D71E92D29553574L, 0xDFFDF5106D4F03D8L, + 0x081BA87B9F8C19C6L, 0xDB7EA1A3AC0981BBL, 0xBBCA12AD66172DFAL, 0x79704366010829C7L, + 0x179326777BFF5F9CL, 0x0000000000000000L, 0xEB2476A4C906D715L, 0x724DD42F0738DF6FL, + 0xB752EE6538DDB65FL, 0x37FFBC863DF53BA3L, 0x8EFA84FCB5C157E6L, 0xE9EB5C73272596AAL, + 0x1B0BDABF2535C439L, 0x86E12C872A4D4E20L, 0x9969A28BCE3E087AL, 0xFAFB2EB79D9C4B55L, + 0x056A4156B6D92CB2L, 0x5A3AE6A5DEBEA296L, 0x22A3B026A8292580L, 0x53C85B3B36AD1581L, + 0xB11E900117B87583L, 0xC51F3A4A3FE56930L, 0xE019E1EDCF3621BDL, 0xEC811D2591FCBA18L, + 0x445B7D4C4D524A1DL, 0xA8DA6069DCAEF005L, 0x58F5CC72309DE329L, 0xD4C062596B7FF570L, + 0xCE22AD0339D59F98L, 0x591CD99747024DF8L, 0x8B90C5AA03187B54L, 0xF663D27FC356D0F0L, + 0xD8589E9135B56ED5L, 0x35309651D3D67A1CL, 0x12F96721CD26732EL, 0xD28C1C3D441A36ACL, + 0x492A946164077F69L, 0x2D1D73DC6F5F514BL, 0x6F0A70F40D68D88AL, 0x60B4B30ECA1EAC41L, + 0xD36509D83385987DL, 0x0B3D97490630F6A8L, 0x9ECCC90A96C46577L, 0xA20EE2C5AD01A87CL, + 0xE49AB55E0E70A3DEL, 0xA4429CA182646BA0L, 0xDA97B446DB962F6AL, 0xCCED87D4D7F6DE27L, + 0x2AB8185D37A53C46L, 0x9F25DCEFE15BCBA6L, 0xC19C6EF9FEA3EB53L, 0xA764A3931BD884CEL, + 0x2FD2590B817C10F4L, 0x56A21A6D80743933L, 0xE573A0BB79EF0D0FL, 0x155C0CA095DC1E23L, + 0x6C2C4FC694D437E4L, 0x10364DF623053291L, 0xDD32DFC7836C4267L, 0x03263F3299BCEF6EL, + 0x66F8CD6AE57B6F9DL, 0x8C35AE2B5BE21659L, 0x31B3C2E21290F87FL, 0x93BD2027BF915003L, + 0x69460E90220D1B56L, 0x299E276FAE19D328L, 0x63928C3C53A2432FL, 0x7082FEF8E91B9ED0L, + 0xBC6F792C3EED40F7L, 0x4C40D537D2DE53DBL, 0x75E8BFAE5FC2B262L, 0x4DA9C0D2A541FD0AL, + 0x4E8FFFE03CFD1264L, 0x2620E495696FA7E3L, 0xE1F0F408B8A98F6CL, 0xD1AA230FDDA6D9C2L, + 0xC7D0109DD1C6288FL, 0x8A79D04F7487D585L, 0x4694579BA3710BA2L, 0x38417F7CFA834F68L, + 0x1D47A4DB0A5007E5L, 0x206C9AF1460A643FL, 0xA128DDF734BD4712L, 0x8144470672B7232DL, + 0xF2E086CC02105293L, 0x182DE58DBC892B57L, 0xCAA1F9B0F8931DFBL, 0x6B892447CC2E5AE9L, + 0xF9DD11850420A43BL, 0x4BE5BEB68A243ED6L, 0x5584255F19C8D65DL, 0x3B67404E633FA006L, + 0xA68DB6766C472A1FL, 0xF78AC79AB4C97E21L, 0xC353442E1080AAECL, 0x9A4F9DB95782E714L + }, + new ulong[] { + 0x05BA7BC82C9B3220L, 0x31A54665F8B65E4FL, 0xB1B651F77547F4D4L, 0x8BFA0D857BA46682L, + 0x85A96C5AA16A98BBL, 0x990FAEF908EB79C9L, 0xA15E37A247F4A62DL, 0x76857DCD5D27741EL, + 0xF8C50B800A1820BCL, 0xBE65DCB201F7A2B4L, 0x666D1B986F9426E7L, 0x4CC921BF53C4E648L, + 0x95410A0F93D9CA42L, 0x20CDCCAA647BA4EFL, 0x429A4060890A1871L, 0x0C4EA4F69B32B38BL, + 0xCCDA362DDE354CD3L, 0x96DC23BC7C5B2FA9L, 0xC309BB68AA851AB3L, 0xD26131A73648E013L, + 0x021DC52941FC4DB2L, 0xCD5ADAB7704BE48AL, 0xA77965D984ED71E6L, 0x32386FD61734BBA4L, + 0xE82D6DD538AB7245L, 0x5C2147EA6177B4B1L, 0x5DA1AB70CF091CE8L, 0xAC907FCE72B8BDFFL, + 0x57C85DFD972278A8L, 0xA4E44C6A6B6F940DL, 0x3851995B4F1FDFE4L, 0x62578CCAED71BC9EL, + 0xD9882BB0C01D2C0AL, 0x917B9D5D113C503BL, 0xA2C31E11A87643C6L, 0xE463C923A399C1CEL, + 0xF71686C57EA876DCL, 0x87B4A973E096D509L, 0xAF0D567D9D3A5814L, 0xB40C2A3F59DCC6F4L, + 0x3602F88495D121DDL, 0xD3E1DD3D9836484AL, 0xF945E71AA46688E5L, 0x7518547EB2A591F5L, + 0x9366587450C01D89L, 0x9EA81018658C065BL, 0x4F54080CBC4603A3L, 0x2D0384C65137BF3DL, + 0xDC325078EC861E2AL, 0xEA30A8FC79573FF7L, 0x214D2030CA050CB6L, 0x65F0322B8016C30CL, + 0x69BE96DD1B247087L, 0xDB95EE9981E161B8L, 0xD1FC1814D9CA05F8L, 0x820ED2BBCC0DE729L, + 0x63D76050430F14C7L, 0x3BCCB0E8A09D3A0FL, 0x8E40764D573F54A2L, 0x39D175C1E16177BDL, + 0x12F5A37C734F1F4BL, 0xAB37C12F1FDFC26DL, 0x5648B167395CD0F1L, 0x6C04ED1537BF42A7L, + 0xED97161D14304065L, 0x7D6C67DAAB72B807L, 0xEC17FA87BA4EE83CL, 0xDFAF79CB0304FBC1L, + 0x733F060571BC463EL, 0x78D61C1287E98A27L, 0xD07CF48E77B4ADA1L, 0xB9C262536C90DD26L, + 0xE2449B5860801605L, 0x8FC09AD7F941FCFBL, 0xFAD8CEA94BE46D0EL, 0xA343F28B0608EB9FL, + 0x9B126BD04917347BL, 0x9A92874AE7699C22L, 0x1B017C42C4E69EE0L, 0x3A4C5C720EE39256L, + 0x4B6E9F5E3EA399DAL, 0x6BA353F45AD83D35L, 0xE7FEE0904C1B2425L, 0x22D009832587E95DL, + 0x842980C00F1430E2L, 0xC6B3C0A0861E2893L, 0x087433A419D729F2L, 0x341F3DADD42D6C6FL, + 0xEE0A3FAEFBB2A58EL, 0x4AEE73C490DD3183L, 0xAAB72DB5B1A16A34L, 0xA92A04065E238FDFL, + 0x7B4B35A1686B6FCCL, 0x6A23BF6EF4A6956CL, 0x191CB96B851AD352L, 0x55D598D4D6DE351AL, + 0xC9604DE5F2AE7EF3L, 0x1CA6C2A3A981E172L, 0xDE2F9551AD7A5398L, 0x3025AAFF56C8F616L, + 0x15521D9D1E2860D9L, 0x506FE31CFA45073AL, 0x189C55F12B647B0BL, 0x0180EC9AAE7EA859L, + 0x7CEC8B40050C105EL, 0x2350E5198BF94104L, 0xEF8AD33455CC0DD7L, 0x07A7BEE16D677F92L, + 0xE5E325B90DE76997L, 0x5A061591A26E637AL, 0xB611EF1618208B46L, 0x09F4DF3EB7A981ABL, + 0x1EBB078AE87DACC0L, 0xB791038CB65E231FL, 0x0FD38D4574B05660L, 0x67EDF702C1EA8EBEL, + 0xBA5F4BE0831238CDL, 0xE3C477C2CEFEBE5CL, 0x0DCE486C354C1BD2L, 0x8C5DB36416C31910L, + 0x26EA9ED1A7627324L, 0x039D29B3EF82E5EBL, 0x9F28FC82CBF2AE02L, 0xA8AAE89CF05D2786L, + 0x431AACFA2774B028L, 0xCF471F9E31B7A938L, 0x581BD0B8E3922EC8L, 0xBC78199B400BEF06L, + 0x90FB71C7BF42F862L, 0x1F3BEB1046030499L, 0x683E7A47B55AD8DEL, 0x988F4263A695D190L, + 0xD808C72A6E638453L, 0x0627527BC319D7CBL, 0xEBB04466D72997AEL, 0xE67E0C0AE2658C7CL, + 0x14D2F107B056C880L, 0x7122C32C30400B8CL, 0x8A7AE11FD5DACEDBL, 0xA0DEDB38E98A0E74L, + 0xAD109354DCC615A6L, 0x0BE91A17F655CC19L, 0x8DDD5FFEB8BDB149L, 0xBFE53028AF890AEDL, + 0xD65BA6F5B4AD7A6AL, 0x7956F0882997227EL, 0x10E8665532B352F9L, 0x0E5361DFDACEFE39L, + 0xCEC7F3049FC90161L, 0xFF62B561677F5F2EL, 0x975CCF26D22587F0L, 0x51EF0F86543BAF63L, + 0x2F1E41EF10CBF28FL, 0x52722635BBB94A88L, 0xAE8DBAE73344F04DL, 0x410769D36688FD9AL, + 0xB3AB94DE34BBB966L, 0x801317928DF1AA9BL, 0xA564A0F0C5113C54L, 0xF131D4BEBDB1A117L, + 0x7F71A2F3EA8EF5B5L, 0x40878549C8F655C3L, 0x7EF14E6944F05DECL, 0xD44663DCF55137D8L, + 0xF2ACFD0D523344FCL, 0x0000000000000000L, 0x5FBC6E598EF5515AL, 0x16CF342EF1AA8532L, + 0xB036BD6DDB395C8DL, 0x13754FE6DD31B712L, 0xBBDFA77A2D6C9094L, 0x89E7C8AC3A582B30L, + 0x3C6B0E09CDFA459DL, 0xC4AE0589C7E26521L, 0x49735A777F5FD468L, 0xCAFD64561D2C9B18L, + 0xDA1502032F9FC9E1L, 0x8867243694268369L, 0x3782141E3BAF8984L, 0x9CB5D53124704BE9L, + 0xD7DB4A6F1AD3D233L, 0xA6F989432A93D9BFL, 0x9D3539AB8A0EE3B0L, 0x53F2CAAF15C7E2D1L, + 0x6E19283C76430F15L, 0x3DEBE2936384EDC4L, 0x5E3C82C3208BF903L, 0x33B8834CB94A13FDL, + 0x6470DEB12E686B55L, 0x359FD1377A53C436L, 0x61CAA57902F35975L, 0x043A975282E59A79L, + 0xFD7F70482683129CL, 0xC52EE913699CCD78L, 0x28B9FF0E7DAC8D1DL, 0x5455744E78A09D43L, + 0xCB7D88CCB3523341L, 0x44BD121B4A13CFBAL, 0x4D49CD25FDBA4E11L, 0x3E76CB208C06082FL, + 0x3FF627BA2278A076L, 0xC28957F204FBB2EAL, 0x453DFE81E46D67E3L, 0x94C1E6953DA7621BL, + 0x2C83685CFF491764L, 0xF32C1197FC4DECA5L, 0x2B24D6BD922E68F6L, 0xB22B78449AC5113FL, + 0x48F3B6EDD1217C31L, 0x2E9EAD75BEB55AD6L, 0x174FD8B45FD42D6BL, 0x4ED4E4961238ABFAL, + 0x92E6B4EEFEBEB5D0L, 0x46A0D7320BEF8208L, 0x47203BA8A5912A51L, 0x24F75BF8E69E3E96L, + 0xF0B1382413CF094EL, 0xFEE259FBC901F777L, 0x276A724B091CDB7DL, 0xBDF8F501EE75475FL, + 0x599B3C224DEC8691L, 0x6D84018F99C1EAFEL, 0x7498B8E41CDB39ACL, 0xE0595E71217C5BB7L, + 0x2AA43A273C50C0AFL, 0xF50B43EC3F543B6EL, 0x838E3E2162734F70L, 0xC09492DB4507FF58L, + 0x72BFEA9FDFC2EE67L, 0x11688ACF9CCDFAA0L, 0x1A8190D86A9836B9L, 0x7ACBD93BC615C795L, + 0xC7332C3A286080CAL, 0x863445E94EE87D50L, 0xF6966A5FD0D6DE85L, 0xE9AD814F96D5DA1CL, + 0x70A22FB69E3EA3D5L, 0x0A69F68D582B6440L, 0xB8428EC9C2EE757FL, 0x604A49E3AC8DF12CL, + 0x5B86F90B0C10CB23L, 0xE1D9B2EB8F02F3EEL, 0x29391394D3D22544L, 0xC8E0A17F5CD0D6AAL, + 0xB58CC6A5F7A26EADL, 0x8193FB08238F02C2L, 0xD5C68F465B2F9F81L, 0xFCFF9CD288FDBAC5L, + 0x77059157F359DC47L, 0x1D262E3907FF492BL, 0xFB582233E59AC557L, 0xDDB2BCE242F8B673L, + 0x2577B76248E096CFL, 0x6F99C4A6D83DA74CL, 0xC1147E41EB795701L, 0xF48BAF76912A9337L + }, + new ulong[] { + 0x3EF29D249B2C0A19L, 0xE9E16322B6F8622FL, 0x5536994047757F7AL, 0x9F4D56D5A47B0B33L, + 0x822567466AA1174CL, 0xB8F5057DEB082FB2L, 0xCC48C10BF4475F53L, 0x373088D4275DEC3AL, + 0x968F4325180AED10L, 0x173D232CF7016151L, 0xAE4ED09F946FCC13L, 0xFD4B4741C4539873L, + 0x1B5B3F0DD9933765L, 0x2FFCB0967B644052L, 0xE02376D20A89840CL, 0xA3AE3A70329B18D7L, + 0x419CBD2335DE8526L, 0xFAFEBF115B7C3199L, 0x0397074F85AA9B0DL, 0xC58AD4FB4836B970L, + 0xBEC60BE3FC4104A8L, 0x1EFF36DC4B708772L, 0x131FDC33ED8453B6L, 0x0844E33E341764D3L, + 0x0FF11B6EAB38CD39L, 0x64351F0A7761B85AL, 0x3B5694F509CFBA0EL, 0x30857084B87245D0L, + 0x47AFB3BD2297AE3CL, 0xF2BA5C2F6F6B554AL, 0x74BDC4761F4F70E1L, 0xCFDFC64471EDC45EL, + 0xE610784C1DC0AF16L, 0x7ACA29D63C113F28L, 0x2DED411776A859AFL, 0xAC5F211E99A3D5EEL, + 0xD484F949A87EF33BL, 0x3CE36CA596E013E4L, 0xD120F0983A9D432CL, 0x6BC40464DC597563L, + 0x69D5F5E5D1956C9EL, 0x9AE95F043698BB24L, 0xC9ECC8DA66A4EF44L, 0xD69508C8A5B2EAC6L, + 0xC40C2235C0503B80L, 0x38C193BA8C652103L, 0x1CEEC75D46BC9E8FL, 0xD331011937515AD1L, + 0xD8E2E56886ECA50FL, 0xB137108D5779C991L, 0x709F3B6905CA4206L, 0x4FEB50831680CAEFL, + 0xEC456AF3241BD238L, 0x58D673AFE181ABBEL, 0x242F54E7CAD9BF8CL, 0x0211F1810DCC19FDL, + 0x90BC4DBB0F43C60AL, 0x9518446A9DA0761DL, 0xA1BFCBF13F57012AL, 0x2BDE4F8961E172B5L, + 0x27B853A84F732481L, 0xB0B1E643DF1F4B61L, 0x18CC38425C39AC68L, 0xD2B7F7D7BF37D821L, + 0x3103864A3014C720L, 0x14AA246372ABFA5CL, 0x6E600DB54EBAC574L, 0x394765740403A3F3L, + 0x09C215F0BC71E623L, 0x2A58B947E987F045L, 0x7B4CDF18B477BDD8L, 0x9709B5EB906C6FE0L, + 0x73083C268060D90BL, 0xFEDC400E41F9037EL, 0x284948C6E44BE9B8L, 0x728ECAE808065BFBL, + 0x06330E9E17492B1AL, 0x5950856169E7294EL, 0xBAE4F4FCE6C4364FL, 0xCA7BCF95E30E7449L, + 0x7D7FD186A33E96C2L, 0x52836110D85AD690L, 0x4DFAA1021B4CD312L, 0x913ABB75872544FAL, + 0xDD46ECB9140F1518L, 0x3D659A6B1E869114L, 0xC23F2CABD719109AL, 0xD713FE062DD46836L, + 0xD0A60656B2FBC1DCL, 0x221C5A79DD909496L, 0xEFD26DBCA1B14935L, 0x0E77EDA0235E4FC9L, + 0xCBFD395B6B68F6B9L, 0x0DE0EAEFA6F4D4C4L, 0x0422FF1F1A8532E7L, 0xF969B85EDED6AA94L, + 0x7F6E2007AEF28F3FL, 0x3AD0623B81A938FEL, 0x6624EE8B7AADA1A7L, 0xB682E8DDC856607BL, + 0xA78CC56F281E2A30L, 0xC79B257A45FAA08DL, 0x5B4174E0642B30B3L, 0x5F638BFF7EAE0254L, + 0x4BC9AF9C0C05F808L, 0xCE59308AF98B46AEL, 0x8FC58DA9CC55C388L, 0x803496C7676D0EB1L, + 0xF33CAAE1E70DD7BAL, 0xBB6202326EA2B4BFL, 0xD5020F87201871CBL, 0x9D5CA754A9B712CEL, + 0x841669D87DE83C56L, 0x8A6184785EB6739FL, 0x420BBA6CB0741E2BL, 0xF12D5B60EAC1CE47L, + 0x76AC35F71283691CL, 0x2C6BB7D9FECEDB5FL, 0xFCCDB18F4C351A83L, 0x1F79C012C3160582L, + 0xF0ABADAE62A74CB7L, 0xE1A5801C82EF06FCL, 0x67A21845F2CB2357L, 0x5114665F5DF04D9DL, + 0xBF40FD2D74278658L, 0xA0393D3FB73183DAL, 0x05A409D192E3B017L, 0xA9FB28CF0B4065F9L, + 0x25A9A22942BF3D7CL, 0xDB75E22703463E02L, 0xB326E10C5AB5D06CL, 0xE7968E8295A62DE6L, + 0xB973F3B3636EAD42L, 0xDF571D3819C30CE5L, 0xEE549B7229D7CBC5L, 0x12992AFD65E2D146L, + 0xF8EF4E9056B02864L, 0xB7041E134030E28BL, 0xC02EDD2ADAD50967L, 0x932B4AF48AE95D07L, + 0x6FE6FB7BC6DC4784L, 0x239AACB755F61666L, 0x401A4BEDBDB807D6L, 0x485EA8D389AF6305L, + 0xA41BC220ADB4B13DL, 0x753B32B89729F211L, 0x997E584BB3322029L, 0x1D683193CEDA1C7FL, + 0xFF5AB6C0C99F818EL, 0x16BBD5E27F67E3A1L, 0xA59D34EE25D233CDL, 0x98F8AE853B54A2D9L, + 0x6DF70AFACB105E79L, 0x795D2E99B9BBA425L, 0x8E437B6744334178L, 0x0186F6CE886682F0L, + 0xEBF092A3BB347BD2L, 0xBCD7FA62F18D1D55L, 0xADD9D7D011C5571EL, 0x0BD3E471B1BDFFDEL, + 0xAA6C2F808EEAFEF4L, 0x5EE57D31F6C880A4L, 0xF50FA47FF044FCA0L, 0x1ADDC9C351F5B595L, + 0xEA76646D3352F922L, 0x0000000000000000L, 0x85909F16F58EBEA6L, 0x46294573AAF12CCCL, + 0x0A5512BF39DB7D2EL, 0x78DBD85731DD26D5L, 0x29CFBE086C2D6B48L, 0x218B5D36583A0F9BL, + 0x152CD2ADFACD78ACL, 0x83A39188E2C795BCL, 0xC3B9DA655F7F926AL, 0x9ECBA01B2C1D89C3L, + 0x07B5F8509F2FA9EAL, 0x7EE8D6C926940DCFL, 0x36B67E1AAF3B6ECAL, 0x86079859702425ABL, + 0xFB7849DFD31AB369L, 0x4C7C57CC932A51E2L, 0xD96413A60E8A27FFL, 0x263EA566C715A671L, + 0x6C71FC344376DC89L, 0x4A4F595284637AF8L, 0xDAF314E98B20BCF2L, 0x572768C14AB96687L, + 0x1088DB7C682EC8BBL, 0x887075F9537A6A62L, 0x2E7A4658F302C2A2L, 0x619116DBE582084DL, + 0xA87DDE018326E709L, 0xDCC01A779C6997E8L, 0xEDC39C3DAC7D50C8L, 0xA60A33A1A078A8C0L, + 0xC1A82BE452B38B97L, 0x3F746BEA134A88E9L, 0xA228CCBEBAFD9A27L, 0xABEAD94E068C7C04L, + 0xF48952B178227E50L, 0x5CF48CB0FB049959L, 0x6017E0156DE48ABDL, 0x4438B4F2A73D3531L, + 0x8C528AE649FF5885L, 0xB515EF924DFCFB76L, 0x0C661C212E925634L, 0xB493195CC59A7986L, + 0x9CDA519A21D1903EL, 0x32948105B5BE5C2DL, 0x194ACE8CD45F2E98L, 0x438D4CA238129CDBL, + 0x9B6FA9CABEFE39D4L, 0x81B26009EF0B8C41L, 0xDED1EBF691A58E15L, 0x4E6DA64D9EE6481FL, + 0x54B06F8ECF13FD8AL, 0x49D85E1D01C9E1F5L, 0xAFC826511C094EE3L, 0xF698A33075EE67ADL, + 0x5AC7822EEC4DB243L, 0x8DD47C28C199DA75L, 0x89F68337DB1CE892L, 0xCDCE37C57C21DDA3L, + 0x530597DE503C5460L, 0x6A42F2AA543FF793L, 0x5D727A7E73621BA9L, 0xE232875307459DF1L, + 0x56A19E0FC2DFE477L, 0xC61DD3B4CD9C227DL, 0xE5877F03986A341BL, 0x949EB2A415C6F4EDL, + 0x6206119460289340L, 0x6380E75AE84E11B0L, 0x8BE772B6D6D0F16FL, 0x50929091D596CF6DL, + 0xE86795EC3E9EE0DFL, 0x7CF927482B581432L, 0xC86A3E14EEC26DB4L, 0x7119CDA78DACC0F6L, + 0xE40189CD100CB6EBL, 0x92ADBC3A028FDFF7L, 0xB2A017C2D2D3529CL, 0x200DABF8D05C8D6BL, + 0x34A78F9BA2F77737L, 0xE3B4719D8F231F01L, 0x45BE423C2F5BB7C1L, 0xF71E55FEFD88E55DL, + 0x6853032B59F3EE6EL, 0x65B3E9C4FF073AAAL, 0x772AC3399AE5EBECL, 0x87816E97F842A75BL, + 0x110E2DB2E0484A4BL, 0x331277CB3DD8DEDDL, 0xBD510CAC79EB9FA5L, 0x352179552A91F5C7L + }, + new ulong[] { + 0x8AB0A96846E06A6DL, 0x43C7E80B4BF0B33AL, 0x08C9B3546B161EE5L, 0x39F1C235EBA990BEL, + 0xC1BEF2376606C7B2L, 0x2C209233614569AAL, 0xEB01523B6FC3289AL, 0x946953AB935ACEDDL, + 0x272838F63E13340EL, 0x8B0455ECA12BA052L, 0x77A1B2C4978FF8A2L, 0xA55122CA13E54086L, + 0x2276135862D3F1CDL, 0xDB8DDFDE08B76CFEL, 0x5D1E12C89E4A178AL, 0x0E56816B03969867L, + 0xEE5F79953303ED59L, 0xAFED748BAB78D71DL, 0x6D929F2DF93E53EEL, 0xF5D8A8F8BA798C2AL, + 0xF619B1698E39CF6BL, 0x95DDAF2F749104E2L, 0xEC2A9C80E0886427L, 0xCE5C8FD8825B95EAL, + 0xC4E0D9993AC60271L, 0x4699C3A5173076F9L, 0x3D1B151F50A29F42L, 0x9ED505EA2BC75946L, + 0x34665ACFDC7F4B98L, 0x61B1FB53292342F7L, 0xC721C0080E864130L, 0x8693CD1696FD7B74L, + 0x872731927136B14BL, 0xD3446C8A63A1721BL, 0x669A35E8A6680E4AL, 0xCAB658F239509A16L, + 0xA4E5DE4EF42E8AB9L, 0x37A7435EE83F08D9L, 0x134E6239E26C7F96L, 0x82791A3C2DF67488L, + 0x3F6EF00A8329163CL, 0x8E5A7E42FDEB6591L, 0x5CAAEE4C7981DDB5L, 0x19F234785AF1E80DL, + 0x255DDDE3ED98BD70L, 0x50898A32A99CCCACL, 0x28CA4519DA4E6656L, 0xAE59880F4CB31D22L, + 0x0D9798FA37D6DB26L, 0x32F968F0B4FFCD1AL, 0xA00F09644F258545L, 0xFA3AD5175E24DE72L, + 0xF46C547C5DB24615L, 0x713E80FBFF0F7E20L, 0x7843CF2B73D2AAFAL, 0xBD17EA36AEDF62B4L, + 0xFD111BACD16F92CFL, 0x4ABAA7DBC72D67E0L, 0xB3416B5DAD49FAD3L, 0xBCA316B24914A88BL, + 0x15D150068AECF914L, 0xE27C1DEBE31EFC40L, 0x4FE48C759BEDA223L, 0x7EDCFD141B522C78L, + 0x4E5070F17C26681CL, 0xE696CAC15815F3BCL, 0x35D2A64B3BB481A7L, 0x800CFF29FE7DFDF6L, + 0x1ED9FAC3D5BAA4B0L, 0x6C2663A91EF599D1L, 0x03C1199134404341L, 0xF7AD4DED69F20554L, + 0xCD9D9649B61BD6ABL, 0xC8C3BDE7EADB1368L, 0xD131899FB02AFB65L, 0x1D18E352E1FAE7F1L, + 0xDA39235AEF7CA6C1L, 0xA1BBF5E0A8EE4F7AL, 0x91377805CF9A0B1EL, 0x3138716180BF8E5BL, + 0xD9F83ACBDB3CE580L, 0x0275E515D38B897EL, 0x472D3F21F0FBBCC6L, 0x2D946EB7868EA395L, + 0xBA3C248D21942E09L, 0xE7223645BFDE3983L, 0xFF64FEB902E41BB1L, 0xC97741630D10D957L, + 0xC3CB1722B58D4ECCL, 0xA27AEC719CAE0C3BL, 0x99FECB51A48C15FBL, 0x1465AC826D27332BL, + 0xE1BD047AD75EBF01L, 0x79F733AF941960C5L, 0x672EC96C41A3C475L, 0xC27FEBA6524684F3L, + 0x64EFD0FD75E38734L, 0xED9E60040743AE18L, 0xFB8E2993B9EF144DL, 0x38453EB10C625A81L, + 0x6978480742355C12L, 0x48CF42CE14A6EE9EL, 0x1CAC1FD606312DCEL, 0x7B82D6BA4792E9BBL, + 0x9D141C7B1F871A07L, 0x5616B80DC11C4A2EL, 0xB849C198F21FA777L, 0x7CA91801C8D9A506L, + 0xB1348E487EC273ADL, 0x41B20D1E987B3A44L, 0x7460AB55A3CFBBE3L, 0x84E628034576F20AL, + 0x1B87D16D897A6173L, 0x0FE27DEFE45D5258L, 0x83CDE6B8CA3DBEB7L, 0x0C23647ED01D1119L, + 0x7A362A3EA0592384L, 0xB61F40F3F1893F10L, 0x75D457D1440471DCL, 0x4558DA34237035B8L, + 0xDCA6116587FC2043L, 0x8D9B67D3C9AB26D0L, 0x2B0B5C88EE0E2517L, 0x6FE77A382AB5DA90L, + 0x269CC472D9D8FE31L, 0x63C41E46FAA8CB89L, 0xB7ABBC771642F52FL, 0x7D1DE4852F126F39L, + 0xA8C6BA3024339BA0L, 0x600507D7CEE888C8L, 0x8FEE82C61A20AFAEL, 0x57A2448926D78011L, + 0xFCA5E72836A458F0L, 0x072BCEBB8F4B4CBDL, 0x497BBE4AF36D24A1L, 0x3CAFE99BB769557DL, + 0x12FA9EBD05A7B5A9L, 0xE8C04BAA5B836BDBL, 0x4273148FAC3B7905L, 0x908384812851C121L, + 0xE557D3506C55B0FDL, 0x72FF996ACB4F3D61L, 0x3EDA0C8E64E2DC03L, 0xF0868356E6B949E9L, + 0x04EAD72ABB0B0FFCL, 0x17A4B5135967706AL, 0xE3C8E16F04D5367FL, 0xF84F30028DAF570CL, + 0x1846C8FCBD3A2232L, 0x5B8120F7F6CA9108L, 0xD46FA231ECEA3EA6L, 0x334D947453340725L, + 0x58403966C28AD249L, 0xBED6F3A79A9F21F5L, 0x68CCB483A5FE962DL, 0xD085751B57E1315AL, + 0xFED0023DE52FD18EL, 0x4B0E5B5F20E6ADDFL, 0x1A332DE96EB1AB4CL, 0xA3CE10F57B65C604L, + 0x108F7BA8D62C3CD7L, 0xAB07A3A11073D8E1L, 0x6B0DAD1291BED56CL, 0xF2F366433532C097L, + 0x2E557726B2CEE0D4L, 0x0000000000000000L, 0xCB02A476DE9B5029L, 0xE4E32FD48B9E7AC2L, + 0x734B65EE2C84F75EL, 0x6E5386BCCD7E10AFL, 0x01B4FC84E7CBCA3FL, 0xCFE8735C65905FD5L, + 0x3613BFDA0FF4C2E6L, 0x113B872C31E7F6E8L, 0x2FE18BA255052AEBL, 0xE974B72EBC48A1E4L, + 0x0ABC5641B89D979BL, 0xB46AA5E62202B66EL, 0x44EC26B0C4BBFF87L, 0xA6903B5B27A503C7L, + 0x7F680190FC99E647L, 0x97A84A3AA71A8D9CL, 0xDD12EDE16037EA7CL, 0xC554251DDD0DC84EL, + 0x88C54C7D956BE313L, 0x4D91696048662B5DL, 0xB08072CC9909B992L, 0xB5DE5962C5C97C51L, + 0x81B803AD19B637C9L, 0xB2F597D94A8230ECL, 0x0B08AAC55F565DA4L, 0xF1327FD2017283D6L, + 0xAD98919E78F35E63L, 0x6AB9519676751F53L, 0x24E921670A53774FL, 0xB9FD3D1C15D46D48L, + 0x92F66194FBDA485FL, 0x5A35DC7311015B37L, 0xDED3F4705477A93DL, 0xC00A0EB381CD0D8DL, + 0xBB88D809C65FE436L, 0x16104997BEACBA55L, 0x21B70AC95693B28CL, 0x59F4C5E225411876L, + 0xD5DB5EB50B21F499L, 0x55D7A19CF55C096FL, 0xA97246B4C3F8519FL, 0x8552D487A2BD3835L, + 0x54635D181297C350L, 0x23C2EFDC85183BF2L, 0x9F61F96ECC0C9379L, 0x534893A39DDC8FEDL, + 0x5EDF0B59AA0A54CBL, 0xAC2C6D1A9F38945CL, 0xD7AEBBA0D8AA7DE7L, 0x2ABFA00C09C5EF28L, + 0xD84CC64F3CF72FBFL, 0x2003F64DB15878B3L, 0xA724C7DFC06EC9F8L, 0x069F323F68808682L, + 0xCC296ACD51D01C94L, 0x055E2BAE5CC0C5C3L, 0x6270E2C21D6301B6L, 0x3B842720382219C0L, + 0xD2F0900E846AB824L, 0x52FC6F277A1745D2L, 0xC6953C8CE94D8B0FL, 0xE009F8FE3095753EL, + 0x655B2C7992284D0BL, 0x984A37D54347DFC4L, 0xEAB5AEBF8808E2A5L, 0x9A3FD2C090CC56BAL, + 0x9CA0E0FFF84CD038L, 0x4C2595E4AFADE162L, 0xDF6708F4B3BC6302L, 0xBF620F237D54EBCAL, + 0x93429D101C118260L, 0x097D4FD08CDDD4DAL, 0x8C2F9B572E60ECEFL, 0x708A7C7F18C4B41FL, + 0x3A30DBA4DFE9D3FFL, 0x4006F19A7FB0F07BL, 0x5F6BF7DD4DC19EF4L, 0x1F6D064732716E8FL, + 0xF9FBCC866A649D33L, 0x308C8DE567744464L, 0x8971B0F972A0292CL, 0xD61A47243F61B7D8L, + 0xEFEB8511D4C82766L, 0x961CB6BE40D147A3L, 0xAAB35F25F7B812DEL, 0x76154E407044329DL, + 0x513D76B64E570693L, 0xF3479AC7D2F90AA8L, 0x9B8B2E4477079C85L, 0x297EB99D3D85AC69L + }, + new ulong[] { + 0x7E37E62DFC7D40C3L, 0x776F25A4EE939E5BL, 0xE045C850DD8FB5ADL, 0x86ED5BA711FF1952L, + 0xE91D0BD9CF616B35L, 0x37E0AB256E408FFBL, 0x9607F6C031025A7AL, 0x0B02F5E116D23C9DL, + 0xF3D8486BFB50650CL, 0x621CFF27C40875F5L, 0x7D40CB71FA5FD34AL, 0x6DAA6616DAA29062L, + 0x9F5F354923EC84E2L, 0xEC847C3DC507C3B3L, 0x025A3668043CE205L, 0xA8BF9E6C4DAC0B19L, + 0xFA808BE2E9BEBB94L, 0xB5B99C5277C74FA3L, 0x78D9BC95F0397BCCL, 0xE332E50CDBAD2624L, + 0xC74FCE129332797EL, 0x1729ECEB2EA709ABL, 0xC2D6B9F69954D1F8L, 0x5D898CBFBAB8551AL, + 0x859A76FB17DD8ADBL, 0x1BE85886362F7FB5L, 0xF6413F8FF136CD8AL, 0xD3110FA5BBB7E35CL, + 0x0A2FEED514CC4D11L, 0xE83010EDCD7F1AB9L, 0xA1E75DE55F42D581L, 0xEEDE4A55C13B21B6L, + 0xF2F5535FF94E1480L, 0x0CC1B46D1888761EL, 0xBCE15FDB6529913BL, 0x2D25E8975A7181C2L, + 0x71817F1CE2D7A554L, 0x2E52C5CB5C53124BL, 0xF9F7A6BEEF9C281DL, 0x9E722E7D21F2F56EL, + 0xCE170D9B81DCA7E6L, 0x0E9B82051CB4941BL, 0x1E712F623C49D733L, 0x21E45CFA42F9F7DCL, + 0xCB8E7A7F8BBA0F60L, 0x8E98831A010FB646L, 0x474CCF0D8E895B23L, 0xA99285584FB27A95L, + 0x8CC2B57205335443L, 0x42D5B8E984EFF3A5L, 0x012D1B34021E718CL, 0x57A6626AAE74180BL, + 0xFF19FC06E3D81312L, 0x35BA9D4D6A7C6DFEL, 0xC9D44C178F86ED65L, 0x506523E6A02E5288L, + 0x03772D5C06229389L, 0x8B01F4FE0B691EC0L, 0xF8DABD8AED825991L, 0x4C4E3AEC985B67BEL, + 0xB10DF0827FBF96A9L, 0x6A69279AD4F8DAE1L, 0xE78689DCD3D5FF2EL, 0x812E1A2B1FA553D1L, + 0xFBAD90D6EBA0CA18L, 0x1AC543B234310E39L, 0x1604F7DF2CB97827L, 0xA6241C6951189F02L, + 0x753513CCEAAF7C5EL, 0x64F2A59FC84C4EFAL, 0x247D2B1E489F5F5AL, 0xDB64D718AB474C48L, + 0x79F4A7A1F2270A40L, 0x1573DA832A9BEBAEL, 0x3497867968621C72L, 0x514838D2A2302304L, + 0xF0AF6537FD72F685L, 0x1D06023E3A6B44BAL, 0x678588C3CE6EDD73L, 0x66A893F7CC70ACFFL, + 0xD4D24E29B5EDA9DFL, 0x3856321470EA6A6CL, 0x07C3418C0E5A4A83L, 0x2BCBB22F5635BACDL, + 0x04B46CD00878D90AL, 0x06EE5AB80C443B0FL, 0x3B211F4876C8F9E5L, 0x0958C38912EEDE98L, + 0xD14B39CDBF8B0159L, 0x397B292072F41BE0L, 0x87C0409313E168DEL, 0xAD26E98847CAA39FL, + 0x4E140C849C6785BBL, 0xD5FF551DB7F3D853L, 0xA0CA46D15D5CA40DL, 0xCD6020C787FE346FL, + 0x84B76DCF15C3FB57L, 0xDEFDA0FCA121E4CEL, 0x4B8D7B6096012D3DL, 0x9AC642AD298A2C64L, + 0x0875D8BD10F0AF14L, 0xB357C6EA7B8374ACL, 0x4D6321D89A451632L, 0xEDA96709C719B23FL, + 0xF76C24BBF328BC06L, 0xC662D526912C08F2L, 0x3CE25EC47892B366L, 0xB978283F6F4F39BDL, + 0xC08C8F9E9D6833FDL, 0x4F3917B09E79F437L, 0x593DE06FB2C08C10L, 0xD6887841B1D14BDAL, + 0x19B26EEE32139DB0L, 0xB494876675D93E2FL, 0x825937771987C058L, 0x90E9AC783D466175L, + 0xF1827E03FF6C8709L, 0x945DC0A8353EB87FL, 0x4516F9658AB5B926L, 0x3F9573987EB020EFL, + 0xB855330B6D514831L, 0x2AE6A91B542BCB41L, 0x6331E413C6160479L, 0x408F8E8180D311A0L, + 0xEFF35161C325503AL, 0xD06622F9BD9570D5L, 0x8876D9A20D4B8D49L, 0xA5533135573A0C8BL, + 0xE168D364DF91C421L, 0xF41B09E7F50A2F8FL, 0x12B09B0F24C1A12DL, 0xDA49CC2CA9593DC4L, + 0x1F5C34563E57A6BFL, 0x54D14F36A8568B82L, 0xAF7CDFE043F6419AL, 0xEA6A2685C943F8BCL, + 0xE5DCBFB4D7E91D2BL, 0xB27ADDDE799D0520L, 0x6B443CAED6E6AB6DL, 0x7BAE91C9F61BE845L, + 0x3EB868AC7CAE5163L, 0x11C7B65322E332A4L, 0xD23C1491B9A992D0L, 0x8FB5982E0311C7CAL, + 0x70AC6428E0C9D4D8L, 0x895BC2960F55FCC5L, 0x76423E90EC8DEFD7L, 0x6FF0507EDE9E7267L, + 0x3DCF45F07A8CC2EAL, 0x4AA06054941F5CB1L, 0x5810FB5BB0DEFD9CL, 0x5EFEA1E3BC9AC693L, + 0x6EDD4B4ADC8003EBL, 0x741808F8E8B10DD2L, 0x145EC1B728859A22L, 0x28BC9F7350172944L, + 0x270A06424EBDCCD3L, 0x972AEDF4331C2BF6L, 0x059977E40A66A886L, 0x2550302A4A812ED6L, + 0xDD8A8DA0A7037747L, 0xC515F87A970E9B7BL, 0x3023EAA9601AC578L, 0xB7E3AA3A73FBADA6L, + 0x0FB699311EAAE597L, 0x0000000000000000L, 0x310EF19D6204B4F4L, 0x229371A644DB6455L, + 0x0DECAF591A960792L, 0x5CA4978BB8A62496L, 0x1C2B190A38753536L, 0x41A295B582CD602CL, + 0x3279DCC16426277DL, 0xC1A194AA9F764271L, 0x139D803B26DFD0A1L, 0xAE51C4D441E83016L, + 0xD813FA44AD65DFC1L, 0xAC0BF2BC45D4D213L, 0x23BE6A9246C515D9L, 0x49D74D08923DCF38L, + 0x9D05032127D066E7L, 0x2F7FDEFF5E4D63C7L, 0xA47E2A0155247D07L, 0x99B16FF12FA8BFEDL, + 0x4661D4398C972AAFL, 0xDFD0BBC8A33F9542L, 0xDCA79694A51D06CBL, 0xB020EBB67DA1E725L, + 0xBA0F0563696DAA34L, 0xE4F1A480D5F76CA7L, 0xC438E34E9510EAF7L, 0x939E81243B64F2FCL, + 0x8DEFAE46072D25CFL, 0x2C08F3A3586FF04EL, 0xD7A56375B3CF3A56L, 0x20C947CE40E78650L, + 0x43F8A3DD86F18229L, 0x568B795EAC6A6987L, 0x8003011F1DBB225DL, 0xF53612D3F7145E03L, + 0x189F75DA300DEC3CL, 0x9570DB9C3720C9F3L, 0xBB221E576B73DBB8L, 0x72F65240E4F536DDL, + 0x443BE25188ABC8AAL, 0xE21FFE38D9B357A8L, 0xFD43CA6EE7E4F117L, 0xCAA3614B89A47EECL, + 0xFE34E732E1C6629EL, 0x83742C431B99B1D4L, 0xCF3A16AF83C2D66AL, 0xAAE5A8044990E91CL, + 0x26271D764CA3BD5FL, 0x91C4B74C3F5810F9L, 0x7C6DD045F841A2C6L, 0x7F1AFD19FE63314FL, + 0xC8F957238D989CE9L, 0xA709075D5306EE8EL, 0x55FC5402AA48FA0EL, 0x48FA563C9023BEB4L, + 0x65DFBEABCA523F76L, 0x6C877D22D8BCE1EEL, 0xCC4D3BF385E045E3L, 0xBEBB69B36115733EL, + 0x10EAAD6720FD4328L, 0xB6CEB10E71E5DC2AL, 0xBDCC44EF6737E0B7L, 0x523F158EA412B08DL, + 0x989C74C52DB6CE61L, 0x9BEB59992B945DE8L, 0x8A2CEFCA09776F4CL, 0xA3BD6B8D5B7E3784L, + 0xEB473DB1CB5D8930L, 0xC3FBA2C29B4AA074L, 0x9C28181525CE176BL, 0x683311F2D0C438E4L, + 0x5FD3BAD7BE84B71FL, 0xFC6ED15AE5FA809BL, 0x36CDB0116C5EFE77L, 0x29918447520958C8L, + 0xA29070B959604608L, 0x53120EBAA60CC101L, 0x3A0C047C74D68869L, 0x691E0AC6D2DA4968L, + 0x73DB4974E6EB4751L, 0x7A838AFDF40599C9L, 0x5A4ACD33B4E21F99L, 0x6046C94FC03497F0L, + 0xE6AB92E8D1CB8EA2L, 0x3354C7F5663856F1L, 0xD93EE170AF7BAE4DL, 0x616BD27BC22AE67CL, + 0x92B39A10397A8370L, 0xABC8B3304B8E9890L, 0xBF967287630B02B2L, 0x5B67D607B6FC6E15L + }, + new ulong[] { + 0xD031C397CE553FE6L, 0x16BA5B01B006B525L, 0xA89BADE6296E70C8L, 0x6A1F525D77D3435BL, + 0x6E103570573DFA0BL, 0x660EFB2A17FC95ABL, 0x76327A9E97634BF6L, 0x4BAD9D6462458BF5L, + 0xF1830CAEDBC3F748L, 0xC5C8F542669131FFL, 0x95044A1CDC48B0CBL, 0x892962DF3CF8B866L, + 0xB0B9E208E930C135L, 0xA14FB3F0611A767CL, 0x8D2605F21C160136L, 0xD6B71922FECC549EL, + 0x37089438A5907D8BL, 0x0B5DA38E5803D49CL, 0x5A5BCC9CEA6F3CBCL, 0xEDAE246D3B73FFE5L, + 0xD2B87E0FDE22EDCEL, 0x5E54ABB1CA8185ECL, 0x1DE7F88FE80561B9L, 0xAD5E1A870135A08CL, + 0x2F2ADBD665CECC76L, 0x5780B5A782F58358L, 0x3EDC8A2EEDE47B3FL, 0xC9D95C3506BEE70FL, + 0x83BE111D6C4E05EEL, 0xA603B90959367410L, 0x103C81B4809FDE5DL, 0x2C69B6027D0C774AL, + 0x399080D7D5C87953L, 0x09D41E16487406B4L, 0xCDD63B1826505E5FL, 0xF99DC2F49B0298E8L, + 0x9CD0540A943CB67FL, 0xBCA84B7F891F17C5L, 0x723D1DB3B78DF2A6L, 0x78AA6E71E73B4F2EL, + 0x1433E699A071670DL, 0x84F21BE454620782L, 0x98DF3327B4D20F2FL, 0xF049DCE2D3769E5CL, + 0xDB6C60199656EB7AL, 0x648746B2078B4783L, 0x32CD23598DCBADCFL, 0x1EA4955BF0C7DA85L, + 0xE9A143401B9D46B5L, 0xFD92A5D9BBEC21B8L, 0xC8138C790E0B8E1BL, 0x2EE00B9A6D7BA562L, + 0xF85712B893B7F1FCL, 0xEB28FED80BEA949DL, 0x564A65EB8A40EA4CL, 0x6C9988E8474A2823L, + 0x4535898B121D8F2DL, 0xABD8C03231ACCBF4L, 0xBA2E91CAB9867CBDL, 0x7960BE3DEF8E263AL, + 0x0C11A977602FD6F0L, 0xCB50E1AD16C93527L, 0xEAE22E94035FFD89L, 0x2866D12F5DE2CE1AL, + 0xFF1B1841AB9BF390L, 0x9F9339DE8CFE0D43L, 0x964727C8C48A0BF7L, 0x524502C6AAAE531CL, + 0x9B9C5EF3AC10B413L, 0x4FA2FA4942AB32A5L, 0x3F165A62E551122BL, 0xC74148DA76E6E3D7L, + 0x924840E5E464B2A7L, 0xD372AE43D69784DAL, 0x233B72A105E11A86L, 0xA48A04914941A638L, + 0xB4B68525C9DE7865L, 0xDDEABAACA6CF8002L, 0x0A9773C250B6BD88L, 0xC284FFBB5EBD3393L, + 0x8BA0DF472C8F6A4EL, 0x2AEF6CB74D951C32L, 0x427983722A318D41L, 0x73F7CDFFBF389BB2L, + 0x074C0AF9382C026CL, 0x8A6A0F0B243A035AL, 0x6FDAE53C5F88931FL, 0xC68B98967E538AC3L, + 0x44FF59C71AA8E639L, 0xE2FCE0CE439E9229L, 0xA20CDE2479D8CD40L, 0x19E89FA2C8EBD8E9L, + 0xF446BBCFF398270CL, 0x43B3533E2284E455L, 0xD82F0DCD8E945046L, 0x51066F12B26CE820L, + 0xE73957AF6BC5426DL, 0x081ECE5A40C16FA0L, 0x3B193D4FC5BFAB7BL, 0x7FE66488DF174D42L, + 0x0E9814EF705804D8L, 0x8137AC857C39D7C6L, 0xB1733244E185A821L, 0x695C3F896F11F867L, + 0xF6CF0657E3EFF524L, 0x1AABF276D02963D5L, 0x2DA3664E75B91E5EL, 0x0289BD981077D228L, + 0x90C1FD7DF413608FL, 0x3C5537B6FD93A917L, 0xAA12107E3919A2E0L, 0x0686DAB530996B78L, + 0xDAA6B0559EE3826EL, 0xC34E2FF756085A87L, 0x6D5358A44FFF4137L, 0xFC587595B35948ACL, + 0x7CA5095CC7D5F67EL, 0xFB147F6C8B754AC0L, 0xBFEB26AB91DDACF9L, 0x6896EFC567A49173L, + 0xCA9A31E11E7C5C33L, 0xBBE44186B13315A9L, 0x0DDB793B689ABFE4L, 0x70B4A02BA7FA208EL, + 0xE47A3A7B7307F951L, 0x8CECD5BE14A36822L, 0xEEED49B923B144D9L, 0x17708B4DB8B3DC31L, + 0x6088219F2765FED3L, 0xB3FA8FDCF1F27A09L, 0x910B2D31FCA6099BL, 0x0F52C4A378ED6DCCL, + 0x50CCBF5EBAD98134L, 0x6BD582117F662A4FL, 0x94CE9A50D4FDD9DFL, 0x2B25BCFB45207526L, + 0x67C42B661F49FCBFL, 0x492420FC723259DDL, 0x03436DD418C2BB3CL, 0x1F6E4517F872B391L, + 0xA08563BC69AF1F68L, 0xD43EA4BAEEBB86B6L, 0x01CAD04C08B56914L, 0xAC94CACB0980C998L, + 0x54C3D8739A373864L, 0x26FEC5C02DBACAC2L, 0xDEA9D778BE0D3B3EL, 0x040F672D20EEB950L, + 0xE5B0EA377BB29045L, 0xF30AB136CBB42560L, 0x62019C0737122CFBL, 0xE86B930C13282FA1L, + 0xCC1CEB542EE5374BL, 0x538FD28AA21B3A08L, 0x1B61223AD89C0AC1L, 0x36C24474AD25149FL, + 0x7A23D3E9F74C9D06L, 0xBE21F6E79968C5EDL, 0xCF5F868036278C77L, 0xF705D61BEB5A9C30L, + 0x4D2B47D152DCE08DL, 0x5F9E7BFDC234ECF8L, 0x247778583DCD18EAL, 0x867BA67C4415D5AAL, + 0x4CE1979D5A698999L, 0x0000000000000000L, 0xEC64F42133C696F1L, 0xB57C5569C16B1171L, + 0xC1C7926F467F88AFL, 0x654D96FE0F3E2E97L, 0x15F936D5A8C40E19L, 0xB8A72C52A9F1AE95L, + 0xA9517DAA21DB19DCL, 0x58D27104FA18EE94L, 0x5918A148F2AD8780L, 0x5CDD1629DAF657C4L, + 0x8274C15164FB6CFAL, 0xD1FB13DBC6E056F2L, 0x7D6FD910CF609F6AL, 0xB63F38BDD9A9AA4DL, + 0x3D9FE7FAF526C003L, 0x74BBC706871499DEL, 0xDF630734B6B8522AL, 0x3AD3ED03CD0AC26FL, + 0xFADEAF2083C023D4L, 0xC00D42234ECAE1BBL, 0x8538CBA85CD76E96L, 0xC402250E6E2458EBL, + 0x47BC3413026A5D05L, 0xAFD7A71F114272A4L, 0x978DF784CC3F62E3L, 0xB96DFC1EA144C781L, + 0x21B2CF391596C8AEL, 0x318E4E8D950916F3L, 0xCE9556CC3E92E563L, 0x385A509BDD7D1047L, + 0x358129A0B5E7AFA3L, 0xE6F387E363702B79L, 0xE0755D5653E94001L, 0x7BE903A5FFF9F412L, + 0x12B53C2C90E80C75L, 0x3307F315857EC4DBL, 0x8FAFB86A0C61D31EL, 0xD9E5DD8186213952L, + 0x77F8AAD29FD622E2L, 0x25BDA814357871FEL, 0x7571174A8FA1F0CAL, 0x137FEC60985D6561L, + 0x30449EC19DBC7FE7L, 0xA540D4DD41F4CF2CL, 0xDC206AE0AE7AE916L, 0x5B911CD0E2DA55A8L, + 0xB2305F90F947131DL, 0x344BF9ECBD52C6B7L, 0x5D17C665D2433ED0L, 0x18224FEEC05EB1FDL, + 0x9E59E992844B6457L, 0x9A568EBFA4A5DD07L, 0xA3C60E68716DA454L, 0x7E2CB4C4D7A22456L, + 0x87B176304CA0BCBEL, 0x413AEEA632F3367DL, 0x9915E36BBC67663BL, 0x40F03EEA3A465F69L, + 0x1C2D28C3E0B008ADL, 0x4E682A054A1E5BB1L, 0x05C5B761285BD044L, 0xE1BF8D1A5B5C2915L, + 0xF2C0617AC3014C74L, 0xB7F5E8F1D11CC359L, 0x63CB4C4B3FA745EFL, 0x9D1A84469C89DF6BL, + 0xE33630824B2BFB3DL, 0xD5F474F6E60EEFA2L, 0xF58C6B83FB2D4E18L, 0x4676E45F0ADF3411L, + 0x20781F751D23A1BAL, 0xBD629B3381AA7ED1L, 0xAE1D775319F71BB0L, 0xFED1C80DA32E9A84L, + 0x5509083F92825170L, 0x29AC01635557A70EL, 0xA7C9694551831D04L, 0x8E65682604D4BA0AL, + 0x11F651F8882AB749L, 0xD77DC96EF6793D8AL, 0xEF2799F52B042DCDL, 0x48EEF0B07A8730C9L, + 0x22F1A2ED0D547392L, 0x6142F1D32FD097C7L, 0x4A674D286AF0E2E1L, 0x80FD7CC9748CBED2L, + 0x717E7067AF4F499AL, 0x938290A9ECD1DBB3L, 0x88E3B293344DD172L, 0x2734158C250FA3D6L + } + }; + + + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411_2012Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411_2012Digest.cs.meta new file mode 100644 index 000000000..1813c2011 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411_2012Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f546987568a9514fb04c9befbf82d04 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411_2012_256Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411_2012_256Digest.cs new file mode 100644 index 000000000..67709d5bd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411_2012_256Digest.cs @@ -0,0 +1,70 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + public class Gost3411_2012_256Digest : Gost3411_2012Digest + { + private readonly static byte[] IV = { + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 + }; + + public override string AlgorithmName + { + get { return "GOST3411-2012-256"; } + } + + public Gost3411_2012_256Digest() : base(IV) + { + + } + + public Gost3411_2012_256Digest(Gost3411_2012_256Digest other) : base(IV) + { + Reset(other); + } + + public override int GetDigestSize() + { + return 32; + } + + public override int DoFinal(byte[] output, int outOff) + { + byte[] result = new byte[64]; + base.DoFinal(result, 0); + + Array.Copy(result, 32, output, outOff, 32); + + return 32; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + Span result = stackalloc byte[64]; + base.DoFinal(result); + + result[32..].CopyTo(output); + + return 32; + } +#endif + + public override IMemoable Copy() + { + return new Gost3411_2012_256Digest(this); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411_2012_256Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411_2012_256Digest.cs.meta new file mode 100644 index 000000000..46847c0c6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411_2012_256Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08510068b679edc44943819ee016267d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411_2012_512Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411_2012_512Digest.cs new file mode 100644 index 000000000..1b16dc8db --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411_2012_512Digest.cs @@ -0,0 +1,47 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + public class Gost3411_2012_512Digest:Gost3411_2012Digest + { + private readonly static byte[] IV = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + + public override string AlgorithmName + { + get { return "GOST3411-2012-512"; } + } + + public Gost3411_2012_512Digest():base(IV) + { + } + + public Gost3411_2012_512Digest(Gost3411_2012_512Digest other) : base(IV) + { + Reset(other); + } + + public override int GetDigestSize() + { + return 64; + } + + public override IMemoable Copy() + { + return new Gost3411_2012_512Digest(this); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411_2012_512Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411_2012_512Digest.cs.meta new file mode 100644 index 000000000..0daaa1206 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GOST3411_2012_512Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 172c217a7fbd94c47b30653edce69b2b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GeneralDigest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GeneralDigest.cs new file mode 100644 index 000000000..f63a11023 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GeneralDigest.cs @@ -0,0 +1,187 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /** + * base implementation of MD4 family style digest as outlined in + * "Handbook of Applied Cryptography", pages 344 - 347. + */ + public abstract class GeneralDigest + : IDigest, IMemoable + { + private const int BYTE_LENGTH = 64; + + private byte[] xBuf; + private int xBufOff; + + private long byteCount; + + internal GeneralDigest() + { + xBuf = new byte[4]; + } + + internal GeneralDigest(GeneralDigest t) + { + xBuf = new byte[t.xBuf.Length]; + CopyIn(t); + } + + protected void CopyIn(GeneralDigest t) + { + Array.Copy(t.xBuf, 0, xBuf, 0, t.xBuf.Length); + + xBufOff = t.xBufOff; + byteCount = t.byteCount; + } + + public void Update(byte input) + { + xBuf[xBufOff++] = input; + + if (xBufOff == xBuf.Length) + { + ProcessWord(xBuf, 0); + xBufOff = 0; + } + + byteCount++; + } + + public void BlockUpdate( + byte[] input, + int inOff, + int length) + { + length = System.Math.Max(0, length); + + // + // fill the current word + // + int i = 0; + if (xBufOff != 0) + { + while (i < length) + { + xBuf[xBufOff++] = input[inOff + i++]; + if (xBufOff == 4) + { + ProcessWord(xBuf, 0); + xBufOff = 0; + break; + } + } + } + + // + // process whole words. + // + int limit = length - 3; + for (; i < limit; i += 4) + { + ProcessWord(input, inOff + i); + } + + // + // load in the remainder. + // + while (i < length) + { + xBuf[xBufOff++] = input[inOff + i++]; + } + + byteCount += length; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + int length = input.Length; + + // + // fill the current word + // + int i = 0; + if (xBufOff != 0) + { + while (i < length) + { + xBuf[xBufOff++] = input[i++]; + if (xBufOff == 4) + { + ProcessWord(xBuf, 0); + xBufOff = 0; + break; + } + } + } + + // + // process whole words. + // + int limit = length - 3; + for (; i < limit; i += 4) + { + ProcessWord(input.Slice(i, 4)); + } + + // + // load in the remainder. + // + while (i < length) + { + xBuf[xBufOff++] = input[i++]; + } + + byteCount += length; + } +#endif + + public void Finish() + { + long bitLength = (byteCount << 3); + + // + // add the pad bytes. + // + Update((byte)128); + + while (xBufOff != 0) Update((byte)0); + ProcessLength(bitLength); + ProcessBlock(); + } + + public virtual void Reset() + { + byteCount = 0; + xBufOff = 0; + Array.Clear(xBuf, 0, xBuf.Length); + } + + public int GetByteLength() + { + return BYTE_LENGTH; + } + + internal abstract void ProcessWord(byte[] input, int inOff); +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal abstract void ProcessWord(ReadOnlySpan word); +#endif + internal abstract void ProcessLength(long bitLength); + internal abstract void ProcessBlock(); + public abstract string AlgorithmName { get; } + public abstract int GetDigestSize(); + public abstract int DoFinal(byte[] output, int outOff); + public abstract IMemoable Copy(); + public abstract void Reset(IMemoable t); +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public abstract int DoFinal(Span output); +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GeneralDigest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GeneralDigest.cs.meta new file mode 100644 index 000000000..69d34ad6f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/GeneralDigest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 86264b6205260ac4f9c649821fb106eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka256Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka256Digest.cs new file mode 100644 index 000000000..13a77bc3b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka256Digest.cs @@ -0,0 +1,218 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + public sealed class Haraka256Digest + : HarakaBase + { + private readonly byte[] m_buf; + private int m_bufPos; + + public Haraka256Digest() + { + m_buf = new byte[32]; + m_bufPos = 0; + } + + public override string AlgorithmName => "Haraka-256"; + + public override int GetByteLength() => 32; + + public override void Update(byte input) + { + if (m_bufPos > 32 - 1) + throw new ArgumentException("total input cannot be more than 32 bytes"); + + m_buf[m_bufPos++] = input; + } + + public override void BlockUpdate(byte[] input, int inOff, int len) + { + if (m_bufPos > 32 - len) + throw new ArgumentException("total input cannot be more than 32 bytes"); + + Array.Copy(input, inOff, m_buf, m_bufPos, len); + m_bufPos += len; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void BlockUpdate(ReadOnlySpan input) + { + if (m_bufPos > 32 - input.Length) + throw new ArgumentException("total input cannot be more than 32 bytes"); + + input.CopyTo(m_buf.AsSpan(m_bufPos)); + m_bufPos += input.Length; + } +#endif + + public override int DoFinal(byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(output.AsSpan(outOff)); +#else + if (m_bufPos != 32) + throw new ArgumentException("input must be exactly 32 bytes"); + + if (output.Length - outOff < 32) + throw new ArgumentException("output too short to receive digest"); + + int rv = Haraka256256(m_buf, output, outOff); + + Reset(); + + return rv; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + if (m_bufPos != 32) + throw new ArgumentException("input must be exactly 32 bytes"); + + if (output.Length < 32) + throw new ArgumentException("output too short to receive digest"); + +#if NETCOREAPP3_0_OR_GREATER + if (Haraka256_X86.IsSupported) + { + Haraka256_X86.Hash(m_buf, output); + Reset(); + return 32; + } +#endif + + int rv = Haraka256256(m_buf, output); + + Reset(); + + return rv; + } +#endif + + public override void Reset() + { + m_bufPos = 0; + Array.Clear(m_buf, 0, 32); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static int Haraka256256(ReadOnlySpan msg, Span output) + { + byte[][] s1 = new byte[2][]; + s1[0] = new byte[16]; + s1[1] = new byte[16]; + byte[][] s2 = new byte[2][]; + s2[0] = new byte[16]; + s2[1] = new byte[16]; + + msg[ ..16].CopyTo(s1[0]); + msg[16..32].CopyTo(s1[1]); + + s1[0] = AesEnc(s1[0], RC[0]); + s1[1] = AesEnc(s1[1], RC[1]); + s1[0] = AesEnc(s1[0], RC[2]); + s1[1] = AesEnc(s1[1], RC[3]); + Mix256(s1, s2); + + s1[0] = AesEnc(s2[0], RC[4]); + s1[1] = AesEnc(s2[1], RC[5]); + s1[0] = AesEnc(s1[0], RC[6]); + s1[1] = AesEnc(s1[1], RC[7]); + Mix256(s1, s2); + + s1[0] = AesEnc(s2[0], RC[8]); + s1[1] = AesEnc(s2[1], RC[9]); + s1[0] = AesEnc(s1[0], RC[10]); + s1[1] = AesEnc(s1[1], RC[11]); + Mix256(s1, s2); + + s1[0] = AesEnc(s2[0], RC[12]); + s1[1] = AesEnc(s2[1], RC[13]); + s1[0] = AesEnc(s1[0], RC[14]); + s1[1] = AesEnc(s1[1], RC[15]); + Mix256(s1, s2); + + s1[0] = AesEnc(s2[0], RC[16]); + s1[1] = AesEnc(s2[1], RC[17]); + s1[0] = AesEnc(s1[0], RC[18]); + s1[1] = AesEnc(s1[1], RC[19]); + Mix256(s1, s2); + + Xor(s2[0], msg , output[ ..16]); + Xor(s2[1], msg[16..], output[16..32]); + + return DIGEST_SIZE; + } +#else + private static int Haraka256256(byte[] msg, byte[] output, int outOff) + { + byte[][] s1 = new byte[2][]; + s1[0] = new byte[16]; + s1[1] = new byte[16]; + byte[][] s2 = new byte[2][]; + s2[0] = new byte[16]; + s2[1] = new byte[16]; + + Array.Copy(msg, 0, s1[0], 0, 16); + Array.Copy(msg, 16, s1[1], 0, 16); + + s1[0] = AesEnc(s1[0], RC[0]); + s1[1] = AesEnc(s1[1], RC[1]); + s1[0] = AesEnc(s1[0], RC[2]); + s1[1] = AesEnc(s1[1], RC[3]); + Mix256(s1, s2); + + s1[0] = AesEnc(s2[0], RC[4]); + s1[1] = AesEnc(s2[1], RC[5]); + s1[0] = AesEnc(s1[0], RC[6]); + s1[1] = AesEnc(s1[1], RC[7]); + Mix256(s1, s2); + + s1[0] = AesEnc(s2[0], RC[8]); + s1[1] = AesEnc(s2[1], RC[9]); + s1[0] = AesEnc(s1[0], RC[10]); + s1[1] = AesEnc(s1[1], RC[11]); + Mix256(s1, s2); + + s1[0] = AesEnc(s2[0], RC[12]); + s1[1] = AesEnc(s2[1], RC[13]); + s1[0] = AesEnc(s1[0], RC[14]); + s1[1] = AesEnc(s1[1], RC[15]); + Mix256(s1, s2); + + s1[0] = AesEnc(s2[0], RC[16]); + s1[1] = AesEnc(s2[1], RC[17]); + s1[0] = AesEnc(s1[0], RC[18]); + s1[1] = AesEnc(s1[1], RC[19]); + Mix256(s1, s2); + + s1[0] = Xor(s2[0], msg, 0); + s1[1] = Xor(s2[1], msg, 16); + + Array.Copy(s1[0], 0, output, outOff , 16); + Array.Copy(s1[1], 0, output, outOff + 16, 16); + + return DIGEST_SIZE; + } +#endif + + private static void Mix256(byte[][] s1, byte[][] s2) + { + Array.Copy(s1[0], 0, s2[0], 0, 4); + Array.Copy(s1[1], 0, s2[0], 4, 4); + Array.Copy(s1[0], 4, s2[0], 8, 4); + Array.Copy(s1[1], 4, s2[0], 12, 4); + + Array.Copy(s1[0], 8, s2[1], 0, 4); + Array.Copy(s1[1], 8, s2[1], 4, 4); + Array.Copy(s1[0], 12, s2[1], 8, 4); + Array.Copy(s1[1], 12, s2[1], 12, 4); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka256Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka256Digest.cs.meta new file mode 100644 index 000000000..3c1236599 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka256Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5dfb21fc4cfa4394cb874f140dbe6c7a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka256_X86.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka256_X86.cs new file mode 100644 index 000000000..16aef1087 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka256_X86.cs @@ -0,0 +1,148 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +#if NETCOREAPP3_0_OR_GREATER +using System; +using System.Buffers.Binary; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + using Aes = System.Runtime.Intrinsics.X86.Aes; + using Sse2 = System.Runtime.Intrinsics.X86.Sse2; + + public static class Haraka256_X86 + { + public static bool IsSupported => Aes.IsSupported; + + public static void Hash(ReadOnlySpan input, Span output) + { + if (!IsSupported) + throw new PlatformNotSupportedException(nameof(Haraka256_X86)); + + var s0 = Load128(input[ ..16]); + var s1 = Load128(input[16..32]); + + ImplRounds(ref s0, ref s1, Haraka512_X86.DefaultRoundConstants.AsSpan(0, 20)); + + s0 = Sse2.Xor(s0, Load128(input[ ..16])); + s1 = Sse2.Xor(s1, Load128(input[16..32])); + + Store128(s0, output[ ..16]); + Store128(s1, output[16..32]); + } + + public static void Hash(ReadOnlySpan input, Span output, + ReadOnlySpan> roundConstants) + { + if (!IsSupported) + throw new PlatformNotSupportedException(nameof(Haraka256_X86)); + + var s0 = Load128(input[ ..16]); + var s1 = Load128(input[16..32]); + + ImplRounds(ref s0, ref s1, roundConstants[..20]); + + s0 = Sse2.Xor(s0, Load128(input[ ..16])); + s1 = Sse2.Xor(s1, Load128(input[16..32])); + + Store128(s0, output[ ..16]); + Store128(s1, output[16..32]); + } + + public static void Permute(ReadOnlySpan input, Span output) + { + if (!IsSupported) + throw new PlatformNotSupportedException(nameof(Haraka256_X86)); + + var s0 = Load128(input[ ..16]); + var s1 = Load128(input[16..32]); + + ImplRounds(ref s0, ref s1, Haraka512_X86.DefaultRoundConstants.AsSpan(0, 20)); + + Store128(s0, output[ ..16]); + Store128(s1, output[16..32]); + } + + public static void Permute(ReadOnlySpan input, Span output, + ReadOnlySpan> roundConstants) + { + if (!IsSupported) + throw new PlatformNotSupportedException(nameof(Haraka256_X86)); + + var s0 = Load128(input[ ..16]); + var s1 = Load128(input[16..32]); + + ImplRounds(ref s0, ref s1, roundConstants[..20]); + + Store128(s0, output[ ..16]); + Store128(s1, output[16..32]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void ImplRounds(ref Vector128 s0, ref Vector128 s1, ReadOnlySpan> rc) + { + ImplRound(ref s0, ref s1, rc[ .. 4]); + ImplRound(ref s0, ref s1, rc[ 4.. 8]); + ImplRound(ref s0, ref s1, rc[ 8..12]); + ImplRound(ref s0, ref s1, rc[12..16]); + ImplRound(ref s0, ref s1, rc[16..20]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void ImplRound(ref Vector128 s0, ref Vector128 s1, ReadOnlySpan> rc) + { + ImplAes(ref s0, ref s1, rc[..4]); + ImplMix(ref s0, ref s1); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void ImplAes(ref Vector128 s0, ref Vector128 s1, ReadOnlySpan> rc) + { + s0 = Aes.Encrypt(s0, rc[0]); + s1 = Aes.Encrypt(s1, rc[1]); + + s0 = Aes.Encrypt(s0, rc[2]); + s1 = Aes.Encrypt(s1, rc[3]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void ImplMix(ref Vector128 s0, ref Vector128 s1) + { + Vector128 t0 = s0.AsUInt32(); + Vector128 t1 = s1.AsUInt32(); + s0 = Sse2.UnpackLow(t0, t1).AsByte(); + s1 = Sse2.UnpackHigh(t0, t1).AsByte(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static Vector128 Load128(ReadOnlySpan t) + { + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 16) + return MemoryMarshal.Read>(t); + + return Vector128.Create( + BinaryPrimitives.ReadUInt64LittleEndian(t[..8]), + BinaryPrimitives.ReadUInt64LittleEndian(t[8..]) + ).AsByte(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void Store128(Vector128 s, Span t) + { + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 16) + { + MemoryMarshal.Write(t, ref s); + return; + } + + var u = s.AsUInt64(); + BinaryPrimitives.WriteUInt64LittleEndian(t[..8], u.GetElement(0)); + BinaryPrimitives.WriteUInt64LittleEndian(t[8..], u.GetElement(1)); + } + } +} +#endif +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka256_X86.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka256_X86.cs.meta new file mode 100644 index 000000000..0cc919db1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka256_X86.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f5713a53a331cff40b1b1ca65f14b08d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka512Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka512Digest.cs new file mode 100644 index 000000000..cba22ef8c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka512Digest.cs @@ -0,0 +1,291 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + public sealed class Haraka512Digest + : HarakaBase + { + private readonly byte[] m_buf; + private int m_bufPos; + + public Haraka512Digest() + { + m_buf = new byte[64]; + m_bufPos = 0; + } + + public override string AlgorithmName => "Haraka-512"; + + public override int GetByteLength() => 64; + + public override void Update(byte input) + { + if (m_bufPos > 64 - 1) + throw new ArgumentException("total input cannot be more than 64 bytes"); + + m_buf[m_bufPos++] = input; + } + + public override void BlockUpdate(byte[] input, int inOff, int len) + { + if (m_bufPos > 64 - len) + throw new ArgumentException("total input cannot be more than 64 bytes"); + + Array.Copy(input, inOff, m_buf, m_bufPos, len); + m_bufPos += len; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void BlockUpdate(ReadOnlySpan input) + { + if (m_bufPos > 64 - input.Length) + throw new ArgumentException("total input cannot be more than 64 bytes"); + + input.CopyTo(m_buf.AsSpan(m_bufPos)); + m_bufPos += input.Length; + } +#endif + + public override int DoFinal(byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(output.AsSpan(outOff)); +#else + if (m_bufPos != 64) + throw new ArgumentException("input must be exactly 64 bytes"); + + if (output.Length - outOff < 32) + throw new ArgumentException("output too short to receive digest"); + + int rv = Haraka512256(m_buf, output, outOff); + + Reset(); + + return rv; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + if (m_bufPos != 64) + throw new ArgumentException("input must be exactly 64 bytes"); + + if (output.Length < 32) + throw new ArgumentException("output too short to receive digest"); + +#if NETCOREAPP3_0_OR_GREATER + if (Haraka512_X86.IsSupported) + { + Haraka512_X86.Hash(m_buf, output); + Reset(); + return 32; + } +#endif + + int rv = Haraka512256(m_buf, output); + + Reset(); + + return rv; + } +#endif + + public override void Reset() + { + m_bufPos = 0; + Array.Clear(m_buf, 0, 64); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static int Haraka512256(ReadOnlySpan msg, Span output) + { + byte[][] s1 = new byte[4][]; + s1[0] = new byte[16]; + s1[1] = new byte[16]; + s1[2] = new byte[16]; + s1[3] = new byte[16]; + byte[][] s2 = new byte[4][]; + s2[0] = new byte[16]; + s2[1] = new byte[16]; + s2[2] = new byte[16]; + s2[3] = new byte[16]; + + msg[ ..16].CopyTo(s1[0]); + msg[16..32].CopyTo(s1[1]); + msg[32..48].CopyTo(s1[2]); + msg[48..64].CopyTo(s1[3]); + + s1[0] = AesEnc(s1[0], RC[0]); + s1[1] = AesEnc(s1[1], RC[1]); + s1[2] = AesEnc(s1[2], RC[2]); + s1[3] = AesEnc(s1[3], RC[3]); + s1[0] = AesEnc(s1[0], RC[4]); + s1[1] = AesEnc(s1[1], RC[5]); + s1[2] = AesEnc(s1[2], RC[6]); + s1[3] = AesEnc(s1[3], RC[7]); + Mix512(s1, s2); + + s1[0] = AesEnc(s2[0], RC[8]); + s1[1] = AesEnc(s2[1], RC[9]); + s1[2] = AesEnc(s2[2], RC[10]); + s1[3] = AesEnc(s2[3], RC[11]); + s1[0] = AesEnc(s1[0], RC[12]); + s1[1] = AesEnc(s1[1], RC[13]); + s1[2] = AesEnc(s1[2], RC[14]); + s1[3] = AesEnc(s1[3], RC[15]); + Mix512(s1, s2); + + s1[0] = AesEnc(s2[0], RC[16]); + s1[1] = AesEnc(s2[1], RC[17]); + s1[2] = AesEnc(s2[2], RC[18]); + s1[3] = AesEnc(s2[3], RC[19]); + s1[0] = AesEnc(s1[0], RC[20]); + s1[1] = AesEnc(s1[1], RC[21]); + s1[2] = AesEnc(s1[2], RC[22]); + s1[3] = AesEnc(s1[3], RC[23]); + Mix512(s1, s2); + + s1[0] = AesEnc(s2[0], RC[24]); + s1[1] = AesEnc(s2[1], RC[25]); + s1[2] = AesEnc(s2[2], RC[26]); + s1[3] = AesEnc(s2[3], RC[27]); + s1[0] = AesEnc(s1[0], RC[28]); + s1[1] = AesEnc(s1[1], RC[29]); + s1[2] = AesEnc(s1[2], RC[30]); + s1[3] = AesEnc(s1[3], RC[31]); + Mix512(s1, s2); + + s1[0] = AesEnc(s2[0], RC[32]); + s1[1] = AesEnc(s2[1], RC[33]); + s1[2] = AesEnc(s2[2], RC[34]); + s1[3] = AesEnc(s2[3], RC[35]); + s1[0] = AesEnc(s1[0], RC[36]); + s1[1] = AesEnc(s1[1], RC[37]); + s1[2] = AesEnc(s1[2], RC[38]); + s1[3] = AesEnc(s1[3], RC[39]); + Mix512(s1, s2); + + Xor(s2[0], msg, s1[0]); + Xor(s2[1], msg[16..], s1[1]); + Xor(s2[2], msg[32..], s1[2]); + Xor(s2[3], msg[48..], s1[3]); + + s1[0].AsSpan(8, 8).CopyTo(output); + s1[1].AsSpan(8, 8).CopyTo(output[8..]); + s1[2].AsSpan(0, 8).CopyTo(output[16..]); + s1[3].AsSpan(0, 8).CopyTo(output[24..]); + + return DIGEST_SIZE; + } +#else + private static int Haraka512256(byte[] msg, byte[] output, int outOff) + { + byte[][] s1 = new byte[4][]; + s1[0] = new byte[16]; + s1[1] = new byte[16]; + s1[2] = new byte[16]; + s1[3] = new byte[16]; + byte[][] s2 = new byte[4][]; + s2[0] = new byte[16]; + s2[1] = new byte[16]; + s2[2] = new byte[16]; + s2[3] = new byte[16]; + + Array.Copy(msg, 0, s1[0], 0, 16); + Array.Copy(msg, 16, s1[1], 0, 16); + Array.Copy(msg, 32, s1[2], 0, 16); + Array.Copy(msg, 48, s1[3], 0, 16); + + s1[0] = AesEnc(s1[0], RC[0]); + s1[1] = AesEnc(s1[1], RC[1]); + s1[2] = AesEnc(s1[2], RC[2]); + s1[3] = AesEnc(s1[3], RC[3]); + s1[0] = AesEnc(s1[0], RC[4]); + s1[1] = AesEnc(s1[1], RC[5]); + s1[2] = AesEnc(s1[2], RC[6]); + s1[3] = AesEnc(s1[3], RC[7]); + Mix512(s1, s2); + + s1[0] = AesEnc(s2[0], RC[8]); + s1[1] = AesEnc(s2[1], RC[9]); + s1[2] = AesEnc(s2[2], RC[10]); + s1[3] = AesEnc(s2[3], RC[11]); + s1[0] = AesEnc(s1[0], RC[12]); + s1[1] = AesEnc(s1[1], RC[13]); + s1[2] = AesEnc(s1[2], RC[14]); + s1[3] = AesEnc(s1[3], RC[15]); + Mix512(s1, s2); + + s1[0] = AesEnc(s2[0], RC[16]); + s1[1] = AesEnc(s2[1], RC[17]); + s1[2] = AesEnc(s2[2], RC[18]); + s1[3] = AesEnc(s2[3], RC[19]); + s1[0] = AesEnc(s1[0], RC[20]); + s1[1] = AesEnc(s1[1], RC[21]); + s1[2] = AesEnc(s1[2], RC[22]); + s1[3] = AesEnc(s1[3], RC[23]); + Mix512(s1, s2); + + s1[0] = AesEnc(s2[0], RC[24]); + s1[1] = AesEnc(s2[1], RC[25]); + s1[2] = AesEnc(s2[2], RC[26]); + s1[3] = AesEnc(s2[3], RC[27]); + s1[0] = AesEnc(s1[0], RC[28]); + s1[1] = AesEnc(s1[1], RC[29]); + s1[2] = AesEnc(s1[2], RC[30]); + s1[3] = AesEnc(s1[3], RC[31]); + Mix512(s1, s2); + + s1[0] = AesEnc(s2[0], RC[32]); + s1[1] = AesEnc(s2[1], RC[33]); + s1[2] = AesEnc(s2[2], RC[34]); + s1[3] = AesEnc(s2[3], RC[35]); + s1[0] = AesEnc(s1[0], RC[36]); + s1[1] = AesEnc(s1[1], RC[37]); + s1[2] = AesEnc(s1[2], RC[38]); + s1[3] = AesEnc(s1[3], RC[39]); + Mix512(s1, s2); + + s1[0] = Xor(s2[0], msg, 0); + s1[1] = Xor(s2[1], msg, 16); + s1[2] = Xor(s2[2], msg, 32); + s1[3] = Xor(s2[3], msg, 48); + + Array.Copy(s1[0], 8, output, outOff, 8); + Array.Copy(s1[1], 8, output, outOff + 8, 8); + Array.Copy(s1[2], 0, output, outOff + 16, 8); + Array.Copy(s1[3], 0, output, outOff + 24, 8); + + return DIGEST_SIZE; + } +#endif + + private static void Mix512(byte[][] s1, byte[][] s2) + { + Array.Copy(s1[0], 12, s2[0], 0, 4); + Array.Copy(s1[2], 12, s2[0], 4, 4); + Array.Copy(s1[1], 12, s2[0], 8, 4); + Array.Copy(s1[3], 12, s2[0], 12, 4); + + Array.Copy(s1[2], 0, s2[1], 0, 4); + Array.Copy(s1[0], 0, s2[1], 4, 4); + Array.Copy(s1[3], 0, s2[1], 8, 4); + Array.Copy(s1[1], 0, s2[1], 12, 4); + + Array.Copy(s1[2], 4, s2[2], 0, 4); + Array.Copy(s1[0], 4, s2[2], 4, 4); + Array.Copy(s1[3], 4, s2[2], 8, 4); + Array.Copy(s1[1], 4, s2[2], 12, 4); + + Array.Copy(s1[0], 8, s2[3], 0, 4); + Array.Copy(s1[2], 8, s2[3], 4, 4); + Array.Copy(s1[1], 8, s2[3], 8, 4); + Array.Copy(s1[3], 8, s2[3], 12, 4); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka512Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka512Digest.cs.meta new file mode 100644 index 000000000..f1c0ee859 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka512Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 03a68d2e3101c084c95606cd3a16e70b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka512_X86.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka512_X86.cs new file mode 100644 index 000000000..e380b0b02 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka512_X86.cs @@ -0,0 +1,244 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +#if NETCOREAPP3_0_OR_GREATER +using System; +using System.Buffers.Binary; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + using Aes = System.Runtime.Intrinsics.X86.Aes; + using Sse2 = System.Runtime.Intrinsics.X86.Sse2; + + public static class Haraka512_X86 + { + public static bool IsSupported => Aes.IsSupported; + + // Haraka round constants + internal static readonly Vector128[] DefaultRoundConstants = new Vector128[] + { + Vector128.Create(0x9D, 0x7B, 0x81, 0x75, 0xF0, 0xFE, 0xC5, 0xB2, 0x0A, 0xC0, 0x20, 0xE6, 0x4C, 0x70, 0x84, 0x06), + Vector128.Create(0x17, 0xF7, 0x08, 0x2F, 0xA4, 0x6B, 0x0F, 0x64, 0x6B, 0xA0, 0xF3, 0x88, 0xE1, 0xB4, 0x66, 0x8B), + Vector128.Create(0x14, 0x91, 0x02, 0x9F, 0x60, 0x9D, 0x02, 0xCF, 0x98, 0x84, 0xF2, 0x53, 0x2D, 0xDE, 0x02, 0x34), + Vector128.Create(0x79, 0x4F, 0x5B, 0xFD, 0xAF, 0xBC, 0xF3, 0xBB, 0x08, 0x4F, 0x7B, 0x2E, 0xE6, 0xEA, 0xD6, 0x0E), + Vector128.Create(0x44, 0x70, 0x39, 0xBE, 0x1C, 0xCD, 0xEE, 0x79, 0x8B, 0x44, 0x72, 0x48, 0xCB, 0xB0, 0xCF, 0xCB), + Vector128.Create(0x7B, 0x05, 0x8A, 0x2B, 0xED, 0x35, 0x53, 0x8D, 0xB7, 0x32, 0x90, 0x6E, 0xEE, 0xCD, 0xEA, 0x7E), + Vector128.Create(0x1B, 0xEF, 0x4F, 0xDA, 0x61, 0x27, 0x41, 0xE2, 0xD0, 0x7C, 0x2E, 0x5E, 0x43, 0x8F, 0xC2, 0x67), + Vector128.Create(0x3B, 0x0B, 0xC7, 0x1F, 0xE2, 0xFD, 0x5F, 0x67, 0x07, 0xCC, 0xCA, 0xAF, 0xB0, 0xD9, 0x24, 0x29), + Vector128.Create(0xEE, 0x65, 0xD4, 0xB9, 0xCA, 0x8F, 0xDB, 0xEC, 0xE9, 0x7F, 0x86, 0xE6, 0xF1, 0x63, 0x4D, 0xAB), + Vector128.Create(0x33, 0x7E, 0x03, 0xAD, 0x4F, 0x40, 0x2A, 0x5B, 0x64, 0xCD, 0xB7, 0xD4, 0x84, 0xBF, 0x30, 0x1C), + Vector128.Create(0x00, 0x98, 0xF6, 0x8D, 0x2E, 0x8B, 0x02, 0x69, 0xBF, 0x23, 0x17, 0x94, 0xB9, 0x0B, 0xCC, 0xB2), + Vector128.Create(0x8A, 0x2D, 0x9D, 0x5C, 0xC8, 0x9E, 0xAA, 0x4A, 0x72, 0x55, 0x6F, 0xDE, 0xA6, 0x78, 0x04, 0xFA), + Vector128.Create(0xD4, 0x9F, 0x12, 0x29, 0x2E, 0x4F, 0xFA, 0x0E, 0x12, 0x2A, 0x77, 0x6B, 0x2B, 0x9F, 0xB4, 0xDF), + Vector128.Create(0xEE, 0x12, 0x6A, 0xBB, 0xAE, 0x11, 0xD6, 0x32, 0x36, 0xA2, 0x49, 0xF4, 0x44, 0x03, 0xA1, 0x1E), + Vector128.Create(0xA6, 0xEC, 0xA8, 0x9C, 0xC9, 0x00, 0x96, 0x5F, 0x84, 0x00, 0x05, 0x4B, 0x88, 0x49, 0x04, 0xAF), + Vector128.Create(0xEC, 0x93, 0xE5, 0x27, 0xE3, 0xC7, 0xA2, 0x78, 0x4F, 0x9C, 0x19, 0x9D, 0xD8, 0x5E, 0x02, 0x21), + Vector128.Create(0x73, 0x01, 0xD4, 0x82, 0xCD, 0x2E, 0x28, 0xB9, 0xB7, 0xC9, 0x59, 0xA7, 0xF8, 0xAA, 0x3A, 0xBF), + Vector128.Create(0x6B, 0x7D, 0x30, 0x10, 0xD9, 0xEF, 0xF2, 0x37, 0x17, 0xB0, 0x86, 0x61, 0x0D, 0x70, 0x60, 0x62), + Vector128.Create(0xC6, 0x9A, 0xFC, 0xF6, 0x53, 0x91, 0xC2, 0x81, 0x43, 0x04, 0x30, 0x21, 0xC2, 0x45, 0xCA, 0x5A), + Vector128.Create(0x3A, 0x94, 0xD1, 0x36, 0xE8, 0x92, 0xAF, 0x2C, 0xBB, 0x68, 0x6B, 0x22, 0x3C, 0x97, 0x23, 0x92), + Vector128.Create(0xB4, 0x71, 0x10, 0xE5, 0x58, 0xB9, 0xBA, 0x6C, 0xEB, 0x86, 0x58, 0x22, 0x38, 0x92, 0xBF, 0xD3), + Vector128.Create(0x8D, 0x12, 0xE1, 0x24, 0xDD, 0xFD, 0x3D, 0x93, 0x77, 0xC6, 0xF0, 0xAE, 0xE5, 0x3C, 0x86, 0xDB), + Vector128.Create(0xB1, 0x12, 0x22, 0xCB, 0xE3, 0x8D, 0xE4, 0x83, 0x9C, 0xA0, 0xEB, 0xFF, 0x68, 0x62, 0x60, 0xBB), + Vector128.Create(0x7D, 0xF7, 0x2B, 0xC7, 0x4E, 0x1A, 0xB9, 0x2D, 0x9C, 0xD1, 0xE4, 0xE2, 0xDC, 0xD3, 0x4B, 0x73), + Vector128.Create(0x4E, 0x92, 0xB3, 0x2C, 0xC4, 0x15, 0x14, 0x4B, 0x43, 0x1B, 0x30, 0x61, 0xC3, 0x47, 0xBB, 0x43), + Vector128.Create(0x99, 0x68, 0xEB, 0x16, 0xDD, 0x31, 0xB2, 0x03, 0xF6, 0xEF, 0x07, 0xE7, 0xA8, 0x75, 0xA7, 0xDB), + Vector128.Create(0x2C, 0x47, 0xCA, 0x7E, 0x02, 0x23, 0x5E, 0x8E, 0x77, 0x59, 0x75, 0x3C, 0x4B, 0x61, 0xF3, 0x6D), + Vector128.Create(0xF9, 0x17, 0x86, 0xB8, 0xB9, 0xE5, 0x1B, 0x6D, 0x77, 0x7D, 0xDE, 0xD6, 0x17, 0x5A, 0xA7, 0xCD), + Vector128.Create(0x5D, 0xEE, 0x46, 0xA9, 0x9D, 0x06, 0x6C, 0x9D, 0xAA, 0xE9, 0xA8, 0x6B, 0xF0, 0x43, 0x6B, 0xEC), + Vector128.Create(0xC1, 0x27, 0xF3, 0x3B, 0x59, 0x11, 0x53, 0xA2, 0x2B, 0x33, 0x57, 0xF9, 0x50, 0x69, 0x1E, 0xCB), + Vector128.Create(0xD9, 0xD0, 0x0E, 0x60, 0x53, 0x03, 0xED, 0xE4, 0x9C, 0x61, 0xDA, 0x00, 0x75, 0x0C, 0xEE, 0x2C), + Vector128.Create(0x50, 0xA3, 0xA4, 0x63, 0xBC, 0xBA, 0xBB, 0x80, 0xAB, 0x0C, 0xE9, 0x96, 0xA1, 0xA5, 0xB1, 0xF0), + Vector128.Create(0x39, 0xCA, 0x8D, 0x93, 0x30, 0xDE, 0x0D, 0xAB, 0x88, 0x29, 0x96, 0x5E, 0x02, 0xB1, 0x3D, 0xAE), + Vector128.Create(0x42, 0xB4, 0x75, 0x2E, 0xA8, 0xF3, 0x14, 0x88, 0x0B, 0xA4, 0x54, 0xD5, 0x38, 0x8F, 0xBB, 0x17), + Vector128.Create(0xF6, 0x16, 0x0A, 0x36, 0x79, 0xB7, 0xB6, 0xAE, 0xD7, 0x7F, 0x42, 0x5F, 0x5B, 0x8A, 0xBB, 0x34), + Vector128.Create(0xDE, 0xAF, 0xBA, 0xFF, 0x18, 0x59, 0xCE, 0x43, 0x38, 0x54, 0xE5, 0xCB, 0x41, 0x52, 0xF6, 0x26), + Vector128.Create(0x78, 0xC9, 0x9E, 0x83, 0xF7, 0x9C, 0xCA, 0xA2, 0x6A, 0x02, 0xF3, 0xB9, 0x54, 0x9A, 0xE9, 0x4C), + Vector128.Create(0x35, 0x12, 0x90, 0x22, 0x28, 0x6E, 0xC0, 0x40, 0xBE, 0xF7, 0xDF, 0x1B, 0x1A, 0xA5, 0x51, 0xAE), + Vector128.Create(0xCF, 0x59, 0xA6, 0x48, 0x0F, 0xBC, 0x73, 0xC1, 0x2B, 0xD2, 0x7E, 0xBA, 0x3C, 0x61, 0xC1, 0xA0), + Vector128.Create(0xA1, 0x9D, 0xC5, 0xE9, 0xFD, 0xBD, 0xD6, 0x4A, 0x88, 0x82, 0x28, 0x02, 0x03, 0xCC, 0x6A, 0x75), + }; + + public static void Hash(ReadOnlySpan input, Span output) + { + if (!IsSupported) + throw new PlatformNotSupportedException(nameof(Haraka512_X86)); + + var s0 = Load128(input[ ..16]); + var s1 = Load128(input[16..32]); + var s2 = Load128(input[32..48]); + var s3 = Load128(input[48..64]); + + ImplRounds(ref s0, ref s1, ref s2, ref s3, DefaultRoundConstants.AsSpan(0, 40)); + + s0 = Sse2.Xor(s0, Load128(input[ ..16])); + s1 = Sse2.Xor(s1, Load128(input[16..32])); + s2 = Sse2.Xor(s2, Load128(input[32..48])); + s3 = Sse2.Xor(s3, Load128(input[48..64])); + + Store64(s0.GetUpper(), output[ .. 8]); + Store64(s1.GetUpper(), output[ 8..16]); + Store64(s2.GetLower(), output[16..24]); + Store64(s3.GetLower(), output[24..32]); + } + + public static void Hash(ReadOnlySpan input, Span output, + ReadOnlySpan> roundConstants) + { + if (!IsSupported) + throw new PlatformNotSupportedException(nameof(Haraka512_X86)); + + var s0 = Load128(input[ ..16]); + var s1 = Load128(input[16..32]); + var s2 = Load128(input[32..48]); + var s3 = Load128(input[48..64]); + + ImplRounds(ref s0, ref s1, ref s2, ref s3, roundConstants[..40]); + + s0 = Sse2.Xor(s0, Load128(input[ ..16])); + s1 = Sse2.Xor(s1, Load128(input[16..32])); + s2 = Sse2.Xor(s2, Load128(input[32..48])); + s3 = Sse2.Xor(s3, Load128(input[48..64])); + + Store64(s0.GetUpper(), output[ .. 8]); + Store64(s1.GetUpper(), output[ 8..16]); + Store64(s2.GetLower(), output[16..24]); + Store64(s3.GetLower(), output[24..32]); + } + + public static void Permute(ReadOnlySpan input, Span output) + { + if (!IsSupported) + throw new PlatformNotSupportedException(nameof(Haraka512_X86)); + + var s0 = Load128(input[ ..16]); + var s1 = Load128(input[16..32]); + var s2 = Load128(input[32..48]); + var s3 = Load128(input[48..64]); + + ImplRounds(ref s0, ref s1, ref s2, ref s3, DefaultRoundConstants.AsSpan(0, 40)); + + Store128(s0, output[ ..16]); + Store128(s1, output[16..32]); + Store128(s2, output[32..48]); + Store128(s3, output[48..64]); + } + + public static void Permute(ReadOnlySpan input, Span output, + ReadOnlySpan> roundConstants) + { + if (!IsSupported) + throw new PlatformNotSupportedException(nameof(Haraka512_X86)); + + var s0 = Load128(input[ ..16]); + var s1 = Load128(input[16..32]); + var s2 = Load128(input[32..48]); + var s3 = Load128(input[48..64]); + + ImplRounds(ref s0, ref s1, ref s2, ref s3, roundConstants[..40]); + + Store128(s0, output[ ..16]); + Store128(s1, output[16..32]); + Store128(s2, output[32..48]); + Store128(s3, output[48..64]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void ImplRounds(ref Vector128 s0, ref Vector128 s1, ref Vector128 s2, + ref Vector128 s3, ReadOnlySpan> rc) + { + ImplRound(ref s0, ref s1, ref s2, ref s3, rc[ .. 8]); + ImplRound(ref s0, ref s1, ref s2, ref s3, rc[ 8..16]); + ImplRound(ref s0, ref s1, ref s2, ref s3, rc[16..24]); + ImplRound(ref s0, ref s1, ref s2, ref s3, rc[24..32]); + ImplRound(ref s0, ref s1, ref s2, ref s3, rc[32..40]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void ImplRound(ref Vector128 s0, ref Vector128 s1, ref Vector128 s2, + ref Vector128 s3, ReadOnlySpan> rc) + { + ImplAes(ref s0, ref s1, ref s2, ref s3, rc[..8]); + ImplMix(ref s0, ref s1, ref s2, ref s3); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void ImplAes(ref Vector128 s0, ref Vector128 s1, ref Vector128 s2, + ref Vector128 s3, ReadOnlySpan> rc) + { + s0 = Aes.Encrypt(s0, rc[0]); + s1 = Aes.Encrypt(s1, rc[1]); + s2 = Aes.Encrypt(s2, rc[2]); + s3 = Aes.Encrypt(s3, rc[3]); + + s0 = Aes.Encrypt(s0, rc[4]); + s1 = Aes.Encrypt(s1, rc[5]); + s2 = Aes.Encrypt(s2, rc[6]); + s3 = Aes.Encrypt(s3, rc[7]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void ImplMix(ref Vector128 s0, ref Vector128 s1, ref Vector128 s2, + ref Vector128 s3) + { + var t0 = s0.AsUInt32(); + var t1 = s1.AsUInt32(); + var t2 = s2.AsUInt32(); + var t3 = s3.AsUInt32(); + + var u0 = Sse2.UnpackLow(t0, t1); + var u1 = Sse2.UnpackHigh(t0, t1); + var u2 = Sse2.UnpackLow(t2, t3); + var u3 = Sse2.UnpackHigh(t2, t3); + + s0 = Sse2.UnpackHigh(u1, u3).AsByte(); + s1 = Sse2.UnpackLow(u2, u0).AsByte(); + s2 = Sse2.UnpackHigh(u2, u0).AsByte(); + s3 = Sse2.UnpackLow(u1, u3).AsByte(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static Vector128 Load128(ReadOnlySpan t) + { + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 16) + return MemoryMarshal.Read>(t); + + return Vector128.Create( + BinaryPrimitives.ReadUInt64LittleEndian(t[..8]), + BinaryPrimitives.ReadUInt64LittleEndian(t[8..]) + ).AsByte(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void Store128(Vector128 s, Span t) + { + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 16) + { + MemoryMarshal.Write(t, ref s); + return; + } + + var u = s.AsUInt64(); + BinaryPrimitives.WriteUInt64LittleEndian(t[..8], u.GetElement(0)); + BinaryPrimitives.WriteUInt64LittleEndian(t[8..], u.GetElement(1)); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void Store64(Vector64 s, Span t) + { + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 8) + { + MemoryMarshal.Write(t, ref s); + return; + } + + var u = s.AsUInt64(); + BinaryPrimitives.WriteUInt64LittleEndian(t, u.ToScalar()); + } + } +} +#endif +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka512_X86.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka512_X86.cs.meta new file mode 100644 index 000000000..a62134cc1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Haraka512_X86.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 54e732781fc194d428d4900db7245296 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/HarakaBase.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/HarakaBase.cs new file mode 100644 index 000000000..27632e572 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/HarakaBase.cs @@ -0,0 +1,188 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + public abstract class HarakaBase + : IDigest + { + internal static readonly int DIGEST_SIZE = 32; + + // Haraka round constants + internal static readonly byte[][] RC = new byte[][] + { + new byte[]{ 0x9D, 0x7B, 0x81, 0x75, 0xF0, 0xFE, 0xC5, 0xB2, 0x0A, 0xC0, 0x20, 0xE6, 0x4C, 0x70, 0x84, 0x06 }, + new byte[]{ 0x17, 0xF7, 0x08, 0x2F, 0xA4, 0x6B, 0x0F, 0x64, 0x6B, 0xA0, 0xF3, 0x88, 0xE1, 0xB4, 0x66, 0x8B }, + new byte[]{ 0x14, 0x91, 0x02, 0x9F, 0x60, 0x9D, 0x02, 0xCF, 0x98, 0x84, 0xF2, 0x53, 0x2D, 0xDE, 0x02, 0x34 }, + new byte[]{ 0x79, 0x4F, 0x5B, 0xFD, 0xAF, 0xBC, 0xF3, 0xBB, 0x08, 0x4F, 0x7B, 0x2E, 0xE6, 0xEA, 0xD6, 0x0E }, + new byte[]{ 0x44, 0x70, 0x39, 0xBE, 0x1C, 0xCD, 0xEE, 0x79, 0x8B, 0x44, 0x72, 0x48, 0xCB, 0xB0, 0xCF, 0xCB }, + new byte[]{ 0x7B, 0x05, 0x8A, 0x2B, 0xED, 0x35, 0x53, 0x8D, 0xB7, 0x32, 0x90, 0x6E, 0xEE, 0xCD, 0xEA, 0x7E }, + new byte[]{ 0x1B, 0xEF, 0x4F, 0xDA, 0x61, 0x27, 0x41, 0xE2, 0xD0, 0x7C, 0x2E, 0x5E, 0x43, 0x8F, 0xC2, 0x67 }, + new byte[]{ 0x3B, 0x0B, 0xC7, 0x1F, 0xE2, 0xFD, 0x5F, 0x67, 0x07, 0xCC, 0xCA, 0xAF, 0xB0, 0xD9, 0x24, 0x29 }, + new byte[]{ 0xEE, 0x65, 0xD4, 0xB9, 0xCA, 0x8F, 0xDB, 0xEC, 0xE9, 0x7F, 0x86, 0xE6, 0xF1, 0x63, 0x4D, 0xAB }, + new byte[]{ 0x33, 0x7E, 0x03, 0xAD, 0x4F, 0x40, 0x2A, 0x5B, 0x64, 0xCD, 0xB7, 0xD4, 0x84, 0xBF, 0x30, 0x1C }, + new byte[]{ 0x00, 0x98, 0xF6, 0x8D, 0x2E, 0x8B, 0x02, 0x69, 0xBF, 0x23, 0x17, 0x94, 0xB9, 0x0B, 0xCC, 0xB2 }, + new byte[]{ 0x8A, 0x2D, 0x9D, 0x5C, 0xC8, 0x9E, 0xAA, 0x4A, 0x72, 0x55, 0x6F, 0xDE, 0xA6, 0x78, 0x04, 0xFA }, + new byte[]{ 0xD4, 0x9F, 0x12, 0x29, 0x2E, 0x4F, 0xFA, 0x0E, 0x12, 0x2A, 0x77, 0x6B, 0x2B, 0x9F, 0xB4, 0xDF }, + new byte[]{ 0xEE, 0x12, 0x6A, 0xBB, 0xAE, 0x11, 0xD6, 0x32, 0x36, 0xA2, 0x49, 0xF4, 0x44, 0x03, 0xA1, 0x1E }, + new byte[]{ 0xA6, 0xEC, 0xA8, 0x9C, 0xC9, 0x00, 0x96, 0x5F, 0x84, 0x00, 0x05, 0x4B, 0x88, 0x49, 0x04, 0xAF }, + new byte[]{ 0xEC, 0x93, 0xE5, 0x27, 0xE3, 0xC7, 0xA2, 0x78, 0x4F, 0x9C, 0x19, 0x9D, 0xD8, 0x5E, 0x02, 0x21 }, + new byte[]{ 0x73, 0x01, 0xD4, 0x82, 0xCD, 0x2E, 0x28, 0xB9, 0xB7, 0xC9, 0x59, 0xA7, 0xF8, 0xAA, 0x3A, 0xBF }, + new byte[]{ 0x6B, 0x7D, 0x30, 0x10, 0xD9, 0xEF, 0xF2, 0x37, 0x17, 0xB0, 0x86, 0x61, 0x0D, 0x70, 0x60, 0x62 }, + new byte[]{ 0xC6, 0x9A, 0xFC, 0xF6, 0x53, 0x91, 0xC2, 0x81, 0x43, 0x04, 0x30, 0x21, 0xC2, 0x45, 0xCA, 0x5A }, + new byte[]{ 0x3A, 0x94, 0xD1, 0x36, 0xE8, 0x92, 0xAF, 0x2C, 0xBB, 0x68, 0x6B, 0x22, 0x3C, 0x97, 0x23, 0x92 }, + new byte[]{ 0xB4, 0x71, 0x10, 0xE5, 0x58, 0xB9, 0xBA, 0x6C, 0xEB, 0x86, 0x58, 0x22, 0x38, 0x92, 0xBF, 0xD3 }, + new byte[]{ 0x8D, 0x12, 0xE1, 0x24, 0xDD, 0xFD, 0x3D, 0x93, 0x77, 0xC6, 0xF0, 0xAE, 0xE5, 0x3C, 0x86, 0xDB }, + new byte[]{ 0xB1, 0x12, 0x22, 0xCB, 0xE3, 0x8D, 0xE4, 0x83, 0x9C, 0xA0, 0xEB, 0xFF, 0x68, 0x62, 0x60, 0xBB }, + new byte[]{ 0x7D, 0xF7, 0x2B, 0xC7, 0x4E, 0x1A, 0xB9, 0x2D, 0x9C, 0xD1, 0xE4, 0xE2, 0xDC, 0xD3, 0x4B, 0x73 }, + new byte[]{ 0x4E, 0x92, 0xB3, 0x2C, 0xC4, 0x15, 0x14, 0x4B, 0x43, 0x1B, 0x30, 0x61, 0xC3, 0x47, 0xBB, 0x43 }, + new byte[]{ 0x99, 0x68, 0xEB, 0x16, 0xDD, 0x31, 0xB2, 0x03, 0xF6, 0xEF, 0x07, 0xE7, 0xA8, 0x75, 0xA7, 0xDB }, + new byte[]{ 0x2C, 0x47, 0xCA, 0x7E, 0x02, 0x23, 0x5E, 0x8E, 0x77, 0x59, 0x75, 0x3C, 0x4B, 0x61, 0xF3, 0x6D }, + new byte[]{ 0xF9, 0x17, 0x86, 0xB8, 0xB9, 0xE5, 0x1B, 0x6D, 0x77, 0x7D, 0xDE, 0xD6, 0x17, 0x5A, 0xA7, 0xCD }, + new byte[]{ 0x5D, 0xEE, 0x46, 0xA9, 0x9D, 0x06, 0x6C, 0x9D, 0xAA, 0xE9, 0xA8, 0x6B, 0xF0, 0x43, 0x6B, 0xEC }, + new byte[]{ 0xC1, 0x27, 0xF3, 0x3B, 0x59, 0x11, 0x53, 0xA2, 0x2B, 0x33, 0x57, 0xF9, 0x50, 0x69, 0x1E, 0xCB }, + new byte[]{ 0xD9, 0xD0, 0x0E, 0x60, 0x53, 0x03, 0xED, 0xE4, 0x9C, 0x61, 0xDA, 0x00, 0x75, 0x0C, 0xEE, 0x2C }, + new byte[]{ 0x50, 0xA3, 0xA4, 0x63, 0xBC, 0xBA, 0xBB, 0x80, 0xAB, 0x0C, 0xE9, 0x96, 0xA1, 0xA5, 0xB1, 0xF0 }, + new byte[]{ 0x39, 0xCA, 0x8D, 0x93, 0x30, 0xDE, 0x0D, 0xAB, 0x88, 0x29, 0x96, 0x5E, 0x02, 0xB1, 0x3D, 0xAE }, + new byte[]{ 0x42, 0xB4, 0x75, 0x2E, 0xA8, 0xF3, 0x14, 0x88, 0x0B, 0xA4, 0x54, 0xD5, 0x38, 0x8F, 0xBB, 0x17 }, + new byte[]{ 0xF6, 0x16, 0x0A, 0x36, 0x79, 0xB7, 0xB6, 0xAE, 0xD7, 0x7F, 0x42, 0x5F, 0x5B, 0x8A, 0xBB, 0x34 }, + new byte[]{ 0xDE, 0xAF, 0xBA, 0xFF, 0x18, 0x59, 0xCE, 0x43, 0x38, 0x54, 0xE5, 0xCB, 0x41, 0x52, 0xF6, 0x26 }, + new byte[]{ 0x78, 0xC9, 0x9E, 0x83, 0xF7, 0x9C, 0xCA, 0xA2, 0x6A, 0x02, 0xF3, 0xB9, 0x54, 0x9A, 0xE9, 0x4C }, + new byte[]{ 0x35, 0x12, 0x90, 0x22, 0x28, 0x6E, 0xC0, 0x40, 0xBE, 0xF7, 0xDF, 0x1B, 0x1A, 0xA5, 0x51, 0xAE }, + new byte[]{ 0xCF, 0x59, 0xA6, 0x48, 0x0F, 0xBC, 0x73, 0xC1, 0x2B, 0xD2, 0x7E, 0xBA, 0x3C, 0x61, 0xC1, 0xA0 }, + new byte[]{ 0xA1, 0x9D, 0xC5, 0xE9, 0xFD, 0xBD, 0xD6, 0x4A, 0x88, 0x82, 0x28, 0x02, 0x03, 0xCC, 0x6A, 0x75 }, + }; + + private static readonly byte[,] S = + { + { 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76 }, + { 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0 }, + { 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15 }, + { 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75 }, + { 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84 }, + { 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF }, + { 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8 }, + { 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2 }, + { 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73 }, + { 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB }, + { 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79 }, + { 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08 }, + { 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A }, + { 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E }, + { 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF }, + { 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 }, + }; + + private static byte SBox(byte x) + { + return S[(uint)x >> 4, x & 0xFU]; + } + + private static byte[] SubBytes(byte[] s) + { + byte[] output = new byte[s.Length]; + for(int i = 0; i < 16; ++i) + { + output[i] = SBox(s[i]); + } + return output; + } + + private static byte[] ShiftRows(byte[] s) + { + return new byte[]{ + s[0], s[5], s[10], s[15], + s[4], s[9], s[14], s[3], + s[8], s[13], s[2], s[7], + s[12], s[1], s[6], s[11] + }; + } + + internal static byte[] AesEnc(byte[] s, byte[] rk) + { + s = SubBytes(s); + s = ShiftRows(s); + s = MixColumns(s); + XorTo(rk, s); + return s; + } + + private static byte MulX(byte p) + { + return (byte)(((p & 0x7F) << 1) ^ (((uint)p >> 7) * 0x1BU)); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal static void Xor(ReadOnlySpan x, ReadOnlySpan y, Span z) + { + for (int i = 0; i < z.Length; i++) + { + z[i] = (byte)(x[i] ^ y[i]); + } + } +#else + internal static byte[] Xor(byte[] x, byte[] y, int yStart) + { + byte[] output = new byte[16]; + for (int i = 0; i < output.Length; i++) + { + output[i] = (byte)(x[i] ^ y[yStart++]); + } + return output; + } +#endif + + private static void XorTo(byte[] x, byte[] z) + { + for (int i = 0; i < 16; i += 4) + { + z[i + 0] ^= x[i + 0]; + z[i + 1] ^= x[i + 1]; + z[i + 2] ^= x[i + 2]; + z[i + 3] ^= x[i + 3]; + } + } + + private static byte[] MixColumns(byte[] s) + { + byte[] output = new byte[s.Length]; + int j = 0, i4; + for (int i = 0; i < 4; i++) + { + i4 = i << 2; + output[j++] = (byte)(MulX(s[i4]) ^ MulX(s[i4 + 1]) ^ s[i4 + 1] ^ s[i4 + 2] ^ s[i4 + 3]); + output[j++] = (byte)(s[i4] ^ MulX(s[i4 + 1]) ^ MulX(s[i4 + 2]) ^ s[i4 + 2] ^ s[i4 + 3]); + output[j++] = (byte)(s[i4] ^ s[i4 + 1] ^ MulX(s[i4 + 2]) ^ MulX(s[i4 + 3]) ^ s[i4 + 3]); + output[j++] = (byte)(MulX(s[i4]) ^ s[i4] ^ s[i4 + 1] ^ s[i4 + 2] ^ MulX(s[i4 + 3])); + } + + return output; + } + + public abstract string AlgorithmName { get; } + + public int GetDigestSize() + { + return DIGEST_SIZE; + } + + public abstract int GetByteLength(); + + public abstract void Update(byte input); + + public abstract void BlockUpdate(byte[] input, int inOff, int length); + + public abstract int DoFinal(byte[] output, int outOff); + + public abstract void Reset(); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public abstract void BlockUpdate(ReadOnlySpan input); + + public abstract int DoFinal(Span output); +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/HarakaBase.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/HarakaBase.cs.meta new file mode 100644 index 000000000..2166c7c26 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/HarakaBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2cb5624e262e7964babc76f5311ba8ff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/KeccakDigest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/KeccakDigest.cs new file mode 100644 index 000000000..32d72f9f0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/KeccakDigest.cs @@ -0,0 +1,515 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /// + /// Implementation of Keccak based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + /// + /// + /// Following the naming conventions used in the C source code to enable easy review of the implementation. + /// + public class KeccakDigest + : IDigest, IMemoable + { + private static readonly ulong[] KeccakRoundConstants = new ulong[]{ + 0x0000000000000001UL, 0x0000000000008082UL, 0x800000000000808aUL, 0x8000000080008000UL, + 0x000000000000808bUL, 0x0000000080000001UL, 0x8000000080008081UL, 0x8000000000008009UL, + 0x000000000000008aUL, 0x0000000000000088UL, 0x0000000080008009UL, 0x000000008000000aUL, + 0x000000008000808bUL, 0x800000000000008bUL, 0x8000000000008089UL, 0x8000000000008003UL, + 0x8000000000008002UL, 0x8000000000000080UL, 0x000000000000800aUL, 0x800000008000000aUL, + 0x8000000080008081UL, 0x8000000000008080UL, 0x0000000080000001UL, 0x8000000080008008UL + }; + + private ulong[] state = new ulong[25]; + protected byte[] dataQueue = new byte[192]; + protected int rate; + protected int bitsInQueue; + protected internal int fixedOutputLength; + protected bool squeezing; + + public KeccakDigest() + : this(288) + { + } + + public KeccakDigest(int bitLength) + { + Init(bitLength); + } + + public KeccakDigest(KeccakDigest source) + { + CopyIn(source); + } + + private void CopyIn(KeccakDigest source) + { + Array.Copy(source.state, 0, this.state, 0, source.state.Length); + Array.Copy(source.dataQueue, 0, this.dataQueue, 0, source.dataQueue.Length); + this.rate = source.rate; + this.bitsInQueue = source.bitsInQueue; + this.fixedOutputLength = source.fixedOutputLength; + this.squeezing = source.squeezing; + } + + public virtual string AlgorithmName + { + get { return "Keccak-" + fixedOutputLength; } + } + + public virtual int GetDigestSize() + { + return fixedOutputLength >> 3; + } + + public virtual void Update(byte input) + { + Absorb(input); + } + + public virtual void BlockUpdate(byte[] input, int inOff, int len) + { + Absorb(input, inOff, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + Absorb(input); + } +#endif + + public virtual int DoFinal(byte[] output, int outOff) + { + Squeeze(output, outOff, fixedOutputLength); + + Reset(); + + return GetDigestSize(); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int DoFinal(Span output) + { + int digestSize = GetDigestSize(); + Squeeze(output[..digestSize]); + + Reset(); + + return digestSize; + } +#endif + + /* + * TODO Possible API change to support partial-byte suffixes. + */ + protected virtual int DoFinal(byte[] output, int outOff, byte partialByte, int partialBits) + { + if (partialBits > 0) + { + AbsorbBits(partialByte, partialBits); + } + + Squeeze(output, outOff, fixedOutputLength); + + Reset(); + + return GetDigestSize(); + } + + public virtual void Reset() + { + Init(fixedOutputLength); + } + + /** + * Return the size of block that the compression function is applied to in bytes. + * + * @return internal byte length of a block. + */ + public virtual int GetByteLength() + { + return rate >> 3; + } + + private void Init(int bitLength) + { + switch (bitLength) + { + case 128: + case 224: + case 256: + case 288: + case 384: + case 512: + InitSponge(1600 - (bitLength << 1)); + break; + default: + throw new ArgumentException("must be one of 128, 224, 256, 288, 384, or 512.", "bitLength"); + } + } + + private void InitSponge(int rate) + { + if (rate <= 0 || rate >= 1600 || (rate & 63) != 0) + throw new InvalidOperationException("invalid rate value"); + + this.rate = rate; + Array.Clear(state, 0, state.Length); + Arrays.Fill(this.dataQueue, (byte)0); + this.bitsInQueue = 0; + this.squeezing = false; + this.fixedOutputLength = (1600 - rate) >> 1; + } + + protected void Absorb(byte data) + { + if ((bitsInQueue & 7) != 0) + throw new InvalidOperationException("attempt to absorb with odd length queue"); + if (squeezing) + throw new InvalidOperationException("attempt to absorb while squeezing"); + + dataQueue[bitsInQueue >> 3] = data; + if ((bitsInQueue += 8) == rate) + { + KeccakAbsorb(dataQueue, 0); + bitsInQueue = 0; + } + } + + protected void Absorb(byte[] data, int off, int len) + { + if ((bitsInQueue & 7) != 0) + throw new InvalidOperationException("attempt to absorb with odd length queue"); + if (squeezing) + throw new InvalidOperationException("attempt to absorb while squeezing"); + + int bytesInQueue = bitsInQueue >> 3; + int rateBytes = rate >> 3; + + int available = rateBytes - bytesInQueue; + if (len < available) + { + Array.Copy(data, off, dataQueue, bytesInQueue, len); + this.bitsInQueue += len << 3; + return; + } + + int count = 0; + if (bytesInQueue > 0) + { + Array.Copy(data, off, dataQueue, bytesInQueue, available); + count += available; + KeccakAbsorb(dataQueue, 0); + } + + int remaining; + while ((remaining = (len - count)) >= rateBytes) + { + KeccakAbsorb(data, off + count); + count += rateBytes; + } + + Array.Copy(data, off + count, dataQueue, 0, remaining); + this.bitsInQueue = remaining << 3; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + protected void Absorb(ReadOnlySpan data) + { + if ((bitsInQueue & 7) != 0) + throw new InvalidOperationException("attempt to absorb with odd length queue"); + if (squeezing) + throw new InvalidOperationException("attempt to absorb while squeezing"); + + int bytesInQueue = bitsInQueue >> 3; + int rateBytes = rate >> 3; + + int len = data.Length; + int available = rateBytes - bytesInQueue; + if (len < available) + { + data.CopyTo(dataQueue.AsSpan(bytesInQueue)); + this.bitsInQueue += len << 3; + return; + } + + int count = 0; + if (bytesInQueue > 0) + { + data[..available].CopyTo(dataQueue.AsSpan(bytesInQueue)); + count += available; + KeccakAbsorb(dataQueue, 0); + } + + int remaining; + while ((remaining = len - count) >= rateBytes) + { + KeccakAbsorb(data[count..]); + count += rateBytes; + } + + data[count..].CopyTo(dataQueue.AsSpan()); + this.bitsInQueue = remaining << 3; + } +#endif + + protected void AbsorbBits(int data, int bits) + { + if (bits < 1 || bits > 7) + throw new ArgumentException("must be in the range 1 to 7", "bits"); + if ((bitsInQueue & 7) != 0) + throw new InvalidOperationException("attempt to absorb with odd length queue"); + if (squeezing) + throw new InvalidOperationException("attempt to absorb while squeezing"); + + int mask = (1 << bits) - 1; + dataQueue[bitsInQueue >> 3] = (byte)(data & mask); + + // NOTE: After this, bitsInQueue is no longer a multiple of 8, so no more absorbs will work + bitsInQueue += bits; + } + + private void PadAndSwitchToSqueezingPhase() + { + Debug.Assert(bitsInQueue < rate); + + dataQueue[bitsInQueue >> 3] |= (byte)(1 << (bitsInQueue & 7)); + + if (++bitsInQueue == rate) + { + KeccakAbsorb(dataQueue, 0); + } + else + { + int full = bitsInQueue >> 6, partial = bitsInQueue & 63; + int off = 0; + for (int i = 0; i < full; ++i) + { + state[i] ^= Pack.LE_To_UInt64(dataQueue, off); + off += 8; + } + if (partial > 0) + { + ulong mask = (1UL << partial) - 1UL; + state[full] ^= Pack.LE_To_UInt64(dataQueue, off) & mask; + } + } + + state[(rate - 1) >> 6] ^= (1UL << 63); + + bitsInQueue = 0; + squeezing = true; + } + + protected void Squeeze(byte[] output, int offset, long outputLength) + { + if (!squeezing) + { + PadAndSwitchToSqueezingPhase(); + } + if ((outputLength & 7L) != 0L) + throw new InvalidOperationException("outputLength not a multiple of 8"); + + long i = 0; + while (i < outputLength) + { + if (bitsInQueue == 0) + { + KeccakExtract(); + } + int partialBlock = (int)System.Math.Min((long)bitsInQueue, outputLength - i); + Array.Copy(dataQueue, (rate - bitsInQueue) >> 3, output, offset + (int)(i >> 3), partialBlock >> 3); + bitsInQueue -= partialBlock; + i += partialBlock; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + protected void Squeeze(Span output) + { + if (!squeezing) + { + PadAndSwitchToSqueezingPhase(); + } + long outputLength = (long)output.Length << 3; + + long i = 0; + while (i < outputLength) + { + if (bitsInQueue == 0) + { + KeccakExtract(); + } + int partialBlock = (int)System.Math.Min(bitsInQueue, outputLength - i); + dataQueue.AsSpan((rate - bitsInQueue) >> 3, partialBlock >> 3).CopyTo(output[(int)(i >> 3)..]); + bitsInQueue -= partialBlock; + i += partialBlock; + } + } +#endif + + private void KeccakAbsorb(byte[] data, int off) + { + int count = rate >> 6; + for (int i = 0; i < count; ++i) + { + state[i] ^= Pack.LE_To_UInt64(data, off); + off += 8; + } + + KeccakPermutation(); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void KeccakAbsorb(ReadOnlySpan data) + { + int count = rate >> 6, off = 0; + for (int i = 0; i < count; ++i) + { + state[i] ^= Pack.LE_To_UInt64(data[off..]); + off += 8; + } + + KeccakPermutation(); + } +#endif + + private void KeccakExtract() + { + KeccakPermutation(); + + Pack.UInt64_To_LE(state, 0, rate >> 6, dataQueue, 0); + + this.bitsInQueue = rate; + } + + private void KeccakPermutation() + { + ulong[] A = state; + + ulong a00 = A[ 0], a01 = A[ 1], a02 = A[ 2], a03 = A[ 3], a04 = A[ 4]; + ulong a05 = A[ 5], a06 = A[ 6], a07 = A[ 7], a08 = A[ 8], a09 = A[ 9]; + ulong a10 = A[10], a11 = A[11], a12 = A[12], a13 = A[13], a14 = A[14]; + ulong a15 = A[15], a16 = A[16], a17 = A[17], a18 = A[18], a19 = A[19]; + ulong a20 = A[20], a21 = A[21], a22 = A[22], a23 = A[23], a24 = A[24]; + + for (int i = 0; i < 24; i++) + { + // theta + ulong c0 = a00 ^ a05 ^ a10 ^ a15 ^ a20; + ulong c1 = a01 ^ a06 ^ a11 ^ a16 ^ a21; + ulong c2 = a02 ^ a07 ^ a12 ^ a17 ^ a22; + ulong c3 = a03 ^ a08 ^ a13 ^ a18 ^ a23; + ulong c4 = a04 ^ a09 ^ a14 ^ a19 ^ a24; + + ulong d1 = Longs.RotateLeft(c1, 1) ^ c4; + ulong d2 = Longs.RotateLeft(c2, 1) ^ c0; + ulong d3 = Longs.RotateLeft(c3, 1) ^ c1; + ulong d4 = Longs.RotateLeft(c4, 1) ^ c2; + ulong d0 = Longs.RotateLeft(c0, 1) ^ c3; + + a00 ^= d1; a05 ^= d1; a10 ^= d1; a15 ^= d1; a20 ^= d1; + a01 ^= d2; a06 ^= d2; a11 ^= d2; a16 ^= d2; a21 ^= d2; + a02 ^= d3; a07 ^= d3; a12 ^= d3; a17 ^= d3; a22 ^= d3; + a03 ^= d4; a08 ^= d4; a13 ^= d4; a18 ^= d4; a23 ^= d4; + a04 ^= d0; a09 ^= d0; a14 ^= d0; a19 ^= d0; a24 ^= d0; + + // rho/pi + c1 = Longs.RotateLeft(a01, 1); + a01 = Longs.RotateLeft(a06, 44); + a06 = Longs.RotateLeft(a09, 20); + a09 = Longs.RotateLeft(a22, 61); + a22 = Longs.RotateLeft(a14, 39); + a14 = Longs.RotateLeft(a20, 18); + a20 = Longs.RotateLeft(a02, 62); + a02 = Longs.RotateLeft(a12, 43); + a12 = Longs.RotateLeft(a13, 25); + a13 = Longs.RotateLeft(a19, 8); + a19 = Longs.RotateLeft(a23, 56); + a23 = Longs.RotateLeft(a15, 41); + a15 = Longs.RotateLeft(a04, 27); + a04 = Longs.RotateLeft(a24, 14); + a24 = Longs.RotateLeft(a21, 2); + a21 = Longs.RotateLeft(a08, 55); + a08 = Longs.RotateLeft(a16, 45); + a16 = Longs.RotateLeft(a05, 36); + a05 = Longs.RotateLeft(a03, 28); + a03 = Longs.RotateLeft(a18, 21); + a18 = Longs.RotateLeft(a17, 15); + a17 = Longs.RotateLeft(a11, 10); + a11 = Longs.RotateLeft(a07, 6); + a07 = Longs.RotateLeft(a10, 3); + a10 = c1; + + // chi + c0 = a00 ^ (~a01 & a02); + c1 = a01 ^ (~a02 & a03); + a02 ^= ~a03 & a04; + a03 ^= ~a04 & a00; + a04 ^= ~a00 & a01; + a00 = c0; + a01 = c1; + + c0 = a05 ^ (~a06 & a07); + c1 = a06 ^ (~a07 & a08); + a07 ^= ~a08 & a09; + a08 ^= ~a09 & a05; + a09 ^= ~a05 & a06; + a05 = c0; + a06 = c1; + + c0 = a10 ^ (~a11 & a12); + c1 = a11 ^ (~a12 & a13); + a12 ^= ~a13 & a14; + a13 ^= ~a14 & a10; + a14 ^= ~a10 & a11; + a10 = c0; + a11 = c1; + + c0 = a15 ^ (~a16 & a17); + c1 = a16 ^ (~a17 & a18); + a17 ^= ~a18 & a19; + a18 ^= ~a19 & a15; + a19 ^= ~a15 & a16; + a15 = c0; + a16 = c1; + + c0 = a20 ^ (~a21 & a22); + c1 = a21 ^ (~a22 & a23); + a22 ^= ~a23 & a24; + a23 ^= ~a24 & a20; + a24 ^= ~a20 & a21; + a20 = c0; + a21 = c1; + + // iota + a00 ^= KeccakRoundConstants[i]; + } + + A[ 0] = a00; A[ 1] = a01; A[ 2] = a02; A[ 3] = a03; A[ 4] = a04; + A[ 5] = a05; A[ 6] = a06; A[ 7] = a07; A[ 8] = a08; A[ 9] = a09; + A[10] = a10; A[11] = a11; A[12] = a12; A[13] = a13; A[14] = a14; + A[15] = a15; A[16] = a16; A[17] = a17; A[18] = a18; A[19] = a19; + A[20] = a20; A[21] = a21; A[22] = a22; A[23] = a23; A[24] = a24; + } + + public virtual IMemoable Copy() + { + return new KeccakDigest(this); + } + + public virtual void Reset(IMemoable other) + { + CopyIn((KeccakDigest)other); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/KeccakDigest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/KeccakDigest.cs.meta new file mode 100644 index 000000000..442bab93b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/KeccakDigest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ec6fde84d97edb44288b899e7b6b5d8b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/LongDigest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/LongDigest.cs new file mode 100644 index 000000000..f68aea0ca --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/LongDigest.cs @@ -0,0 +1,416 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /** + * Base class for SHA-384 and SHA-512. + */ + public abstract class LongDigest + : IDigest, IMemoable + { + private int MyByteLength = 128; + + private byte[] xBuf; + private int xBufOff; + + private long byteCount1; + private long byteCount2; + + internal ulong H1, H2, H3, H4, H5, H6, H7, H8; + + private ulong[] W = new ulong[80]; + private int wOff; + + /** + * Constructor for variable length word + */ + internal LongDigest() + { + xBuf = new byte[8]; + + Reset(); + } + + /** + * Copy constructor. We are using copy constructors in place + * of the object.Clone() interface as this interface is not + * supported by J2ME. + */ + internal LongDigest( + LongDigest t) + { + xBuf = new byte[t.xBuf.Length]; + + CopyIn(t); + } + + protected void CopyIn(LongDigest t) + { + Array.Copy(t.xBuf, 0, xBuf, 0, t.xBuf.Length); + + xBufOff = t.xBufOff; + byteCount1 = t.byteCount1; + byteCount2 = t.byteCount2; + + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + H4 = t.H4; + H5 = t.H5; + H6 = t.H6; + H7 = t.H7; + H8 = t.H8; + + Array.Copy(t.W, 0, W, 0, t.W.Length); + wOff = t.wOff; + } + + public void Update( + byte input) + { + xBuf[xBufOff++] = input; + + if (xBufOff == xBuf.Length) + { + ProcessWord(xBuf, 0); + xBufOff = 0; + } + + byteCount1++; + } + + public void BlockUpdate( + byte[] input, + int inOff, + int length) + { + // + // fill the current word + // + while ((xBufOff != 0) && (length > 0)) + { + Update(input[inOff]); + + inOff++; + length--; + } + + // + // process whole words. + // + while (length >= xBuf.Length) + { + ProcessWord(input, inOff); + + inOff += xBuf.Length; + length -= xBuf.Length; + byteCount1 += xBuf.Length; + } + + // + // load in the remainder. + // + while (length > 0) + { + Update(input[inOff]); + + inOff++; + length--; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + int inOff = 0; + int length = input.Length; + + // + // fill the current word + // + while ((xBufOff != 0) && (length > 0)) + { + Update(input[inOff]); + + inOff++; + length--; + } + + // + // process whole words. + // + while (length >= xBuf.Length) + { + ProcessWord(input.Slice(inOff, xBuf.Length)); + + inOff += xBuf.Length; + length -= xBuf.Length; + byteCount1 += xBuf.Length; + } + + // + // load in the remainder. + // + while (length > 0) + { + Update(input[inOff]); + + inOff++; + length--; + } + } +#endif + + public void Finish() + { + AdjustByteCounts(); + + long lowBitLength = byteCount1 << 3; + long hiBitLength = byteCount2; + + // + // add the pad bytes. + // + Update((byte)128); + + while (xBufOff != 0) + { + Update((byte)0); + } + + ProcessLength(lowBitLength, hiBitLength); + + ProcessBlock(); + } + + public virtual void Reset() + { + byteCount1 = 0; + byteCount2 = 0; + + xBufOff = 0; + for (int i = 0; i < xBuf.Length; i++) + { + xBuf[i] = 0; + } + + wOff = 0; + Array.Clear(W, 0, W.Length); + } + + internal void ProcessWord( + byte[] input, + int inOff) + { + W[wOff] = Pack.BE_To_UInt64(input, inOff); + + if (++wOff == 16) + { + ProcessBlock(); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal void ProcessWord(ReadOnlySpan word) + { + W[wOff] = Pack.BE_To_UInt64(word); + + if (++wOff == 16) + { + ProcessBlock(); + } + } +#endif + + /** + * adjust the byte counts so that byteCount2 represents the + * upper long (less 3 bits) word of the byte count. + */ + private void AdjustByteCounts() + { + if (byteCount1 > 0x1fffffffffffffffL) + { + byteCount2 += (long)((ulong)byteCount1 >> 61); + byteCount1 &= 0x1fffffffffffffffL; + } + } + + internal void ProcessLength( + long lowW, + long hiW) + { + if (wOff > 14) + { + ProcessBlock(); + } + + W[14] = (ulong)hiW; + W[15] = (ulong)lowW; + } + + internal void ProcessBlock() + { + AdjustByteCounts(); + + // + // expand 16 word block into 80 word blocks. + // + for (int ti = 16; ti <= 79; ++ti) + { + W[ti] = Sigma1(W[ti - 2]) + W[ti - 7] + Sigma0(W[ti - 15]) + W[ti - 16]; + } + + // + // set up working variables. + // + ulong a = H1; + ulong b = H2; + ulong c = H3; + ulong d = H4; + ulong e = H5; + ulong f = H6; + ulong g = H7; + ulong h = H8; + + int t = 0; + for (int i = 0; i < 10; i++) + { + // t = 8 * i + h += Sum1(e) + Ch(e, f, g) + K[t] + W[t++]; + d += h; + h += Sum0(a) + Maj(a, b, c); + + // t = 8 * i + 1 + g += Sum1(d) + Ch(d, e, f) + K[t] + W[t++]; + c += g; + g += Sum0(h) + Maj(h, a, b); + + // t = 8 * i + 2 + f += Sum1(c) + Ch(c, d, e) + K[t] + W[t++]; + b += f; + f += Sum0(g) + Maj(g, h, a); + + // t = 8 * i + 3 + e += Sum1(b) + Ch(b, c, d) + K[t] + W[t++]; + a += e; + e += Sum0(f) + Maj(f, g, h); + + // t = 8 * i + 4 + d += Sum1(a) + Ch(a, b, c) + K[t] + W[t++]; + h += d; + d += Sum0(e) + Maj(e, f, g); + + // t = 8 * i + 5 + c += Sum1(h) + Ch(h, a, b) + K[t] + W[t++]; + g += c; + c += Sum0(d) + Maj(d, e, f); + + // t = 8 * i + 6 + b += Sum1(g) + Ch(g, h, a) + K[t] + W[t++]; + f += b; + b += Sum0(c) + Maj(c, d, e); + + // t = 8 * i + 7 + a += Sum1(f) + Ch(f, g, h) + K[t] + W[t++]; + e += a; + a += Sum0(b) + Maj(b, c, d); + } + + H1 += a; + H2 += b; + H3 += c; + H4 += d; + H5 += e; + H6 += f; + H7 += g; + H8 += h; + + // + // reset the offset and clean out the word buffer. + // + wOff = 0; + Array.Clear(W, 0, 16); + } + + /* SHA-384 and SHA-512 functions (as for SHA-256 but for longs) */ + private static ulong Ch(ulong x, ulong y, ulong z) + { + return (x & y) ^ (~x & z); + } + + private static ulong Maj(ulong x, ulong y, ulong z) + { + return (x & y) ^ (x & z) ^ (y & z); + } + + private static ulong Sum0(ulong x) + { + return ((x << 36) | (x >> 28)) ^ ((x << 30) | (x >> 34)) ^ ((x << 25) | (x >> 39)); + } + + private static ulong Sum1(ulong x) + { + return ((x << 50) | (x >> 14)) ^ ((x << 46) | (x >> 18)) ^ ((x << 23) | (x >> 41)); + } + + private static ulong Sigma0(ulong x) + { + return ((x << 63) | (x >> 1)) ^ ((x << 56) | (x >> 8)) ^ (x >> 7); + } + + private static ulong Sigma1(ulong x) + { + return ((x << 45) | (x >> 19)) ^ ((x << 3) | (x >> 61)) ^ (x >> 6); + } + + /* SHA-384 and SHA-512 Constants + * (represent the first 64 bits of the fractional parts of the + * cube roots of the first sixty-four prime numbers) + */ + internal static readonly ulong[] K = + { + 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, + 0x3956c25bf348b538, 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, + 0xd807aa98a3030242, 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, + 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, 0xc19bf174cf692694, + 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, + 0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, + 0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, + 0xc6e00bf33da88fc2, 0xd5a79147930aa725, 0x06ca6351e003826f, 0x142929670a0e6e70, + 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df, + 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b, + 0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, + 0xd192e819d6ef5218, 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, + 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, + 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3, + 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, + 0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, + 0xca273eceea26619c, 0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, + 0x06f067aa72176fba, 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b, + 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c, + 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817 + }; + + public int GetByteLength() + { + return MyByteLength; + } + + public abstract string AlgorithmName { get; } + public abstract int GetDigestSize(); + public abstract int DoFinal(byte[] output, int outOff); +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public abstract int DoFinal(Span output); +#endif + public abstract IMemoable Copy(); + public abstract void Reset(IMemoable t); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/LongDigest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/LongDigest.cs.meta new file mode 100644 index 000000000..65ac6f29b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/LongDigest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c09e9ec58127294abaecdc2d14b88e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/MD2Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/MD2Digest.cs new file mode 100644 index 000000000..cf0d08164 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/MD2Digest.cs @@ -0,0 +1,330 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + + /** + * implementation of MD2 + * as outlined in RFC1319 by B.Kaliski from RSA Laboratories April 1992 + */ + public class MD2Digest + : IDigest, IMemoable + { + private const int DigestLength = 16; + private const int BYTE_LENGTH = 16; + + /* X buffer */ + private byte[] X = new byte[48]; + private int xOff; + + /* M buffer */ + + private byte[] M = new byte[16]; + private int mOff; + + /* check sum */ + + private byte[] C = new byte[16]; + private int COff; + + public MD2Digest() + { + Reset(); + } + + public MD2Digest(MD2Digest t) + { + CopyIn(t); + } + + private void CopyIn(MD2Digest t) + { + Array.Copy(t.X, 0, X, 0, t.X.Length); + xOff = t.xOff; + Array.Copy(t.M, 0, M, 0, t.M.Length); + mOff = t.mOff; + Array.Copy(t.C, 0, C, 0, t.C.Length); + COff = t.COff; + } + + /** + * return the algorithm name + * + * @return the algorithm name + */ + public string AlgorithmName + { + get { return "MD2"; } + } + + public int GetDigestSize() + { + return DigestLength; + } + + public int GetByteLength() + { + return BYTE_LENGTH; + } + + /** + * Close the digest, producing the final digest value. The doFinal + * call leaves the digest reset. + * + * @param out the array the digest is to be copied into. + * @param outOff the offset into the out array the digest is to start at. + */ + public int DoFinal(byte[] output, int outOff) + { + // add padding + byte paddingByte = (byte)(M.Length - mOff); + for (int i=mOff;i output) + { + // add padding + byte paddingByte = (byte)(M.Length - mOff); + for (int i = mOff; i < M.Length; i++) + { + M[i] = paddingByte; + } + //do final check sum + ProcessChecksum(M); + // do final block process + ProcessBlock(M); + + ProcessBlock(C); + + X.AsSpan(xOff, 16).CopyTo(output); + + Reset(); + + return DigestLength; + } +#endif + + /** + * reset the digest back to it's initial state. + */ + public void Reset() + { + xOff = 0; + for (int i = 0; i != X.Length; i++) + { + X[i] = 0; + } + mOff = 0; + for (int i = 0; i != M.Length; i++) + { + M[i] = 0; + } + COff = 0; + for (int i = 0; i != C.Length; i++) + { + C[i] = 0; + } + } + /** + * update the message digest with a single byte. + * + * @param in the input byte to be entered. + */ + public void Update(byte input) + { + M[mOff++] = input; + + if (mOff == 16) + { + ProcessChecksum(M); + ProcessBlock(M); + mOff = 0; + } + } + + /** + * update the message digest with a block of bytes. + * + * @param in the byte array containing the data. + * @param inOff the offset into the byte array where the data starts. + * @param len the length of the data. + */ + public void BlockUpdate(byte[] input, int inOff, int length) + { + // + // fill the current word + // + while ((mOff != 0) && (length > 0)) + { + Update(input[inOff]); + inOff++; + length--; + } + + // + // process whole words. + // + while (length >= 16) + { + Array.Copy(input,inOff,M,0,16); + ProcessChecksum(M); + ProcessBlock(M); + length -= 16; + inOff += 16; + } + + // + // load in the remainder. + // + while (length > 0) + { + Update(input[inOff]); + inOff++; + length--; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + // + // fill the current word + // + while ((mOff != 0) && (input.Length > 0)) + { + Update(input[0]); + input = input[1..]; + } + + // + // process whole words. + // + while (input.Length >= 16) + { + input[..16].CopyTo(M); + ProcessChecksum(M); + ProcessBlock(M); + input = input[16..]; + } + + // + // load in the remainder. + // + while (input.Length > 0) + { + Update(input[0]); + input = input[1..]; + } + } +#endif + + internal void ProcessChecksum(byte[] m) + { + int L = C[15]; + for (int i=0;i<16;i++) + { + C[i] ^= S[(m[i] ^ L) & 0xff]; + L = C[i]; + } + } + internal void ProcessBlock(byte[] m) + { + for (int i=0;i<16;i++) + { + X[i+16] = m[i]; + X[i+32] = (byte)(m[i] ^ X[i]); + } + // encrypt block + int t = 0; + + for (int j=0;j<18;j++) + { + for (int k=0;k<48;k++) + { + t = X[k] ^= S[t]; + t = t & 0xff; + } + t = (t + j)%256; + } + } + + + + // 256-byte random permutation constructed from the digits of PI + private static readonly byte[] S = { + (byte)41,(byte)46,(byte)67,(byte)201,(byte)162,(byte)216,(byte)124, + (byte)1,(byte)61,(byte)54,(byte)84,(byte)161,(byte)236,(byte)240, + (byte)6,(byte)19,(byte)98,(byte)167,(byte)5,(byte)243,(byte)192, + (byte)199,(byte)115,(byte)140,(byte)152,(byte)147,(byte)43,(byte)217, + (byte)188,(byte)76,(byte)130,(byte)202,(byte)30,(byte)155,(byte)87, + (byte)60,(byte)253,(byte)212,(byte)224,(byte)22,(byte)103,(byte)66, + (byte)111,(byte)24,(byte)138,(byte)23,(byte)229,(byte)18,(byte)190, + (byte)78,(byte)196,(byte)214,(byte)218,(byte)158,(byte)222,(byte)73, + (byte)160,(byte)251,(byte)245,(byte)142,(byte)187,(byte)47,(byte)238, + (byte)122,(byte)169,(byte)104,(byte)121,(byte)145,(byte)21,(byte)178, + (byte)7,(byte)63,(byte)148,(byte)194,(byte)16,(byte)137,(byte)11, + (byte)34,(byte)95,(byte)33,(byte)128,(byte)127,(byte)93,(byte)154, + (byte)90,(byte)144,(byte)50,(byte)39,(byte)53,(byte)62,(byte)204, + (byte)231,(byte)191,(byte)247,(byte)151,(byte)3,(byte)255,(byte)25, + (byte)48,(byte)179,(byte)72,(byte)165,(byte)181,(byte)209,(byte)215, + (byte)94,(byte)146,(byte)42,(byte)172,(byte)86,(byte)170,(byte)198, + (byte)79,(byte)184,(byte)56,(byte)210,(byte)150,(byte)164,(byte)125, + (byte)182,(byte)118,(byte)252,(byte)107,(byte)226,(byte)156,(byte)116, + (byte)4,(byte)241,(byte)69,(byte)157,(byte)112,(byte)89,(byte)100, + (byte)113,(byte)135,(byte)32,(byte)134,(byte)91,(byte)207,(byte)101, + (byte)230,(byte)45,(byte)168,(byte)2,(byte)27,(byte)96,(byte)37, + (byte)173,(byte)174,(byte)176,(byte)185,(byte)246,(byte)28,(byte)70, + (byte)97,(byte)105,(byte)52,(byte)64,(byte)126,(byte)15,(byte)85, + (byte)71,(byte)163,(byte)35,(byte)221,(byte)81,(byte)175,(byte)58, + (byte)195,(byte)92,(byte)249,(byte)206,(byte)186,(byte)197,(byte)234, + (byte)38,(byte)44,(byte)83,(byte)13,(byte)110,(byte)133,(byte)40, + (byte)132, 9,(byte)211,(byte)223,(byte)205,(byte)244,(byte)65, + (byte)129,(byte)77,(byte)82,(byte)106,(byte)220,(byte)55,(byte)200, + (byte)108,(byte)193,(byte)171,(byte)250,(byte)36,(byte)225,(byte)123, + (byte)8,(byte)12,(byte)189,(byte)177,(byte)74,(byte)120,(byte)136, + (byte)149,(byte)139,(byte)227,(byte)99,(byte)232,(byte)109,(byte)233, + (byte)203,(byte)213,(byte)254,(byte)59,(byte)0,(byte)29,(byte)57, + (byte)242,(byte)239,(byte)183,(byte)14,(byte)102,(byte)88,(byte)208, + (byte)228,(byte)166,(byte)119,(byte)114,(byte)248,(byte)235,(byte)117, + (byte)75,(byte)10,(byte)49,(byte)68,(byte)80,(byte)180,(byte)143, + (byte)237,(byte)31,(byte)26,(byte)219,(byte)153,(byte)141,(byte)51, + (byte)159,(byte)17,(byte)131,(byte)20 + }; + + public IMemoable Copy() + { + return new MD2Digest(this); + } + + public void Reset(IMemoable other) + { + MD2Digest d = (MD2Digest)other; + + CopyIn(d); + } + + } + +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/MD2Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/MD2Digest.cs.meta new file mode 100644 index 000000000..205bc4461 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/MD2Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 148e9d8b628e3e942995c6a5620f1b56 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/MD4Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/MD4Digest.cs new file mode 100644 index 000000000..bc430a1bb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/MD4Digest.cs @@ -0,0 +1,297 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /** + * implementation of MD4 as RFC 1320 by R. Rivest, MIT Laboratory for + * Computer Science and RSA Data Security, Inc. + *

+ * NOTE: This algorithm is only included for backwards compatibility + * with legacy applications, it's not secure, don't use it for anything new!

+ */ + public class MD4Digest + : GeneralDigest + { + private const int DigestLength = 16; + + private int H1, H2, H3, H4; // IV's + + private int[] X = new int[16]; + private int xOff; + + /** + * Standard constructor + */ + public MD4Digest() + { + Reset(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public MD4Digest(MD4Digest t) : base(t) + { + CopyIn(t); + } + + private void CopyIn(MD4Digest t) + { + base.CopyIn(t); + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + H4 = t.H4; + + Array.Copy(t.X, 0, X, 0, t.X.Length); + xOff = t.xOff; + } + + public override string AlgorithmName + { + get { return "MD4"; } + } + + public override int GetDigestSize() + { + return DigestLength; + } + + internal override void ProcessWord(byte[] input, int inOff) + { + X[xOff++] = (int)Pack.LE_To_UInt32(input, inOff); + + if (xOff == 16) + { + ProcessBlock(); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal override void ProcessWord(ReadOnlySpan word) + { + X[xOff++] = (int)Pack.LE_To_UInt32(word); + + if (xOff == 16) + { + ProcessBlock(); + } + } +#endif + + internal override void ProcessLength( + long bitLength) + { + if (xOff > 14) + { + ProcessBlock(); + } + + X[14] = (int)(bitLength & 0xffffffff); + X[15] = (int)((ulong) bitLength >> 32); + } + + public override int DoFinal(byte[] output, int outOff) + { + Finish(); + + Pack.UInt32_To_LE((uint)H1, output, outOff); + Pack.UInt32_To_LE((uint)H2, output, outOff + 4); + Pack.UInt32_To_LE((uint)H3, output, outOff + 8); + Pack.UInt32_To_LE((uint)H4, output, outOff + 12); + + Reset(); + + return DigestLength; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + Finish(); + + Pack.UInt32_To_LE((uint)H1, output); + Pack.UInt32_To_LE((uint)H2, output[4..]); + Pack.UInt32_To_LE((uint)H3, output[8..]); + Pack.UInt32_To_LE((uint)H4, output[12..]); + + Reset(); + + return DigestLength; + } +#endif + + /** + * reset the chaining variables to the IV values. + */ + public override void Reset() + { + base.Reset(); + + H1 = unchecked((int) 0x67452301); + H2 = unchecked((int) 0xefcdab89); + H3 = unchecked((int) 0x98badcfe); + H4 = unchecked((int) 0x10325476); + + xOff = 0; + + for (int i = 0; i != X.Length; i++) + { + X[i] = 0; + } + } + + // + // round 1 left rotates + // + private const int S11 = 3; + private const int S12 = 7; + private const int S13 = 11; + private const int S14 = 19; + + // + // round 2 left rotates + // + private const int S21 = 3; + private const int S22 = 5; + private const int S23 = 9; + private const int S24 = 13; + + // + // round 3 left rotates + // + private const int S31 = 3; + private const int S32 = 9; + private const int S33 = 11; + private const int S34 = 15; + + /* + * F, G, H and I are the basic MD4 functions. + */ + private int F( + int u, + int v, + int w) + { + return (u & v) | (~u & w); + } + + private int G( + int u, + int v, + int w) + { + return (u & v) | (u & w) | (v & w); + } + + private int H( + int u, + int v, + int w) + { + return u ^ v ^ w; + } + + internal override void ProcessBlock() + { + int a = H1; + int b = H2; + int c = H3; + int d = H4; + + // + // Round 1 - F cycle, 16 times. + // + a = Integers.RotateLeft((a + F(b, c, d) + X[ 0]), S11); + d = Integers.RotateLeft((d + F(a, b, c) + X[ 1]), S12); + c = Integers.RotateLeft((c + F(d, a, b) + X[ 2]), S13); + b = Integers.RotateLeft((b + F(c, d, a) + X[ 3]), S14); + a = Integers.RotateLeft((a + F(b, c, d) + X[ 4]), S11); + d = Integers.RotateLeft((d + F(a, b, c) + X[ 5]), S12); + c = Integers.RotateLeft((c + F(d, a, b) + X[ 6]), S13); + b = Integers.RotateLeft((b + F(c, d, a) + X[ 7]), S14); + a = Integers.RotateLeft((a + F(b, c, d) + X[ 8]), S11); + d = Integers.RotateLeft((d + F(a, b, c) + X[ 9]), S12); + c = Integers.RotateLeft((c + F(d, a, b) + X[10]), S13); + b = Integers.RotateLeft((b + F(c, d, a) + X[11]), S14); + a = Integers.RotateLeft((a + F(b, c, d) + X[12]), S11); + d = Integers.RotateLeft((d + F(a, b, c) + X[13]), S12); + c = Integers.RotateLeft((c + F(d, a, b) + X[14]), S13); + b = Integers.RotateLeft((b + F(c, d, a) + X[15]), S14); + + // + // Round 2 - G cycle, 16 times. + // + a = Integers.RotateLeft((a + G(b, c, d) + X[ 0] + 0x5a827999), S21); + d = Integers.RotateLeft((d + G(a, b, c) + X[ 4] + 0x5a827999), S22); + c = Integers.RotateLeft((c + G(d, a, b) + X[ 8] + 0x5a827999), S23); + b = Integers.RotateLeft((b + G(c, d, a) + X[12] + 0x5a827999), S24); + a = Integers.RotateLeft((a + G(b, c, d) + X[ 1] + 0x5a827999), S21); + d = Integers.RotateLeft((d + G(a, b, c) + X[ 5] + 0x5a827999), S22); + c = Integers.RotateLeft((c + G(d, a, b) + X[ 9] + 0x5a827999), S23); + b = Integers.RotateLeft((b + G(c, d, a) + X[13] + 0x5a827999), S24); + a = Integers.RotateLeft((a + G(b, c, d) + X[ 2] + 0x5a827999), S21); + d = Integers.RotateLeft((d + G(a, b, c) + X[ 6] + 0x5a827999), S22); + c = Integers.RotateLeft((c + G(d, a, b) + X[10] + 0x5a827999), S23); + b = Integers.RotateLeft((b + G(c, d, a) + X[14] + 0x5a827999), S24); + a = Integers.RotateLeft((a + G(b, c, d) + X[ 3] + 0x5a827999), S21); + d = Integers.RotateLeft((d + G(a, b, c) + X[ 7] + 0x5a827999), S22); + c = Integers.RotateLeft((c + G(d, a, b) + X[11] + 0x5a827999), S23); + b = Integers.RotateLeft((b + G(c, d, a) + X[15] + 0x5a827999), S24); + + // + // Round 3 - H cycle, 16 times. + // + a = Integers.RotateLeft((a + H(b, c, d) + X[ 0] + 0x6ed9eba1), S31); + d = Integers.RotateLeft((d + H(a, b, c) + X[ 8] + 0x6ed9eba1), S32); + c = Integers.RotateLeft((c + H(d, a, b) + X[ 4] + 0x6ed9eba1), S33); + b = Integers.RotateLeft((b + H(c, d, a) + X[12] + 0x6ed9eba1), S34); + a = Integers.RotateLeft((a + H(b, c, d) + X[ 2] + 0x6ed9eba1), S31); + d = Integers.RotateLeft((d + H(a, b, c) + X[10] + 0x6ed9eba1), S32); + c = Integers.RotateLeft((c + H(d, a, b) + X[ 6] + 0x6ed9eba1), S33); + b = Integers.RotateLeft((b + H(c, d, a) + X[14] + 0x6ed9eba1), S34); + a = Integers.RotateLeft((a + H(b, c, d) + X[ 1] + 0x6ed9eba1), S31); + d = Integers.RotateLeft((d + H(a, b, c) + X[ 9] + 0x6ed9eba1), S32); + c = Integers.RotateLeft((c + H(d, a, b) + X[ 5] + 0x6ed9eba1), S33); + b = Integers.RotateLeft((b + H(c, d, a) + X[13] + 0x6ed9eba1), S34); + a = Integers.RotateLeft((a + H(b, c, d) + X[ 3] + 0x6ed9eba1), S31); + d = Integers.RotateLeft((d + H(a, b, c) + X[11] + 0x6ed9eba1), S32); + c = Integers.RotateLeft((c + H(d, a, b) + X[ 7] + 0x6ed9eba1), S33); + b = Integers.RotateLeft((b + H(c, d, a) + X[15] + 0x6ed9eba1), S34); + + H1 += a; + H2 += b; + H3 += c; + H4 += d; + + // + // reset the offset and clean out the word buffer. + // + xOff = 0; + for (int i = 0; i != X.Length; i++) + { + X[i] = 0; + } + } + + public override IMemoable Copy() + { + return new MD4Digest(this); + } + + public override void Reset(IMemoable other) + { + MD4Digest d = (MD4Digest)other; + + CopyIn(d); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/MD4Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/MD4Digest.cs.meta new file mode 100644 index 000000000..6dbe7269c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/MD4Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c00e2d62bb704374caa7eae8a01a61c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/MD5Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/MD5Digest.cs new file mode 100644 index 000000000..3d8bbd8b4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/MD5Digest.cs @@ -0,0 +1,343 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /** + * implementation of MD5 as outlined in "Handbook of Applied Cryptography", pages 346 - 347. + */ + public class MD5Digest + : GeneralDigest + { + private const int DigestLength = 16; + + private uint H1, H2, H3, H4; // IV's + + private uint[] X = new uint[16]; + private int xOff; + + public MD5Digest() + { + Reset(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public MD5Digest(MD5Digest t) + : base(t) + { + CopyIn(t); + } + + private void CopyIn(MD5Digest t) + { + base.CopyIn(t); + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + H4 = t.H4; + + Array.Copy(t.X, 0, X, 0, t.X.Length); + xOff = t.xOff; + } + + public override string AlgorithmName + { + get { return "MD5"; } + } + + public override int GetDigestSize() + { + return DigestLength; + } + + internal override void ProcessWord(byte[] input, int inOff) + { + X[xOff] = Pack.LE_To_UInt32(input, inOff); + + if (++xOff == 16) + { + ProcessBlock(); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal override void ProcessWord(ReadOnlySpan word) + { + X[xOff] = Pack.LE_To_UInt32(word); + + if (++xOff == 16) + { + ProcessBlock(); + } + } +#endif + + internal override void ProcessLength( + long bitLength) + { + if (xOff > 14) + { + if (xOff == 15) + X[15] = 0; + + ProcessBlock(); + } + + for (int i = xOff; i < 14; ++i) + { + X[i] = 0; + } + + X[14] = (uint)((ulong)bitLength); + X[15] = (uint)((ulong)bitLength >> 32); + } + + public override int DoFinal( + byte[] output, + int outOff) + { + Finish(); + + Pack.UInt32_To_LE(H1, output, outOff); + Pack.UInt32_To_LE(H2, output, outOff + 4); + Pack.UInt32_To_LE(H3, output, outOff + 8); + Pack.UInt32_To_LE(H4, output, outOff + 12); + + Reset(); + + return DigestLength; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + Finish(); + + Pack.UInt32_To_LE(H1, output); + Pack.UInt32_To_LE(H2, output[4..]); + Pack.UInt32_To_LE(H3, output[8..]); + Pack.UInt32_To_LE(H4, output[12..]); + + Reset(); + + return DigestLength; + } +#endif + + /** + * reset the chaining variables to the IV values. + */ + public override void Reset() + { + base.Reset(); + + H1 = 0x67452301; + H2 = 0xefcdab89; + H3 = 0x98badcfe; + H4 = 0x10325476; + + xOff = 0; + + for (int i = 0; i != X.Length; i++) + { + X[i] = 0; + } + } + + // + // round 1 left rotates + // + private static readonly int S11 = 7; + private static readonly int S12 = 12; + private static readonly int S13 = 17; + private static readonly int S14 = 22; + + // + // round 2 left rotates + // + private static readonly int S21 = 5; + private static readonly int S22 = 9; + private static readonly int S23 = 14; + private static readonly int S24 = 20; + + // + // round 3 left rotates + // + private static readonly int S31 = 4; + private static readonly int S32 = 11; + private static readonly int S33 = 16; + private static readonly int S34 = 23; + + // + // round 4 left rotates + // + private static readonly int S41 = 6; + private static readonly int S42 = 10; + private static readonly int S43 = 15; + private static readonly int S44 = 21; + + /* + * rotate int x left n bits. + */ + private static uint RotateLeft( + uint x, + int n) + { + return (x << n) | (x >> (32 - n)); + } + + /* + * F, G, H and I are the basic MD5 functions. + */ + private static uint F( + uint u, + uint v, + uint w) + { + return (u & v) | (~u & w); + } + + private static uint G( + uint u, + uint v, + uint w) + { + return (u & w) | (v & ~w); + } + + private static uint H( + uint u, + uint v, + uint w) + { + return u ^ v ^ w; + } + + private static uint K( + uint u, + uint v, + uint w) + { + return v ^ (u | ~w); + } + + internal override void ProcessBlock() + { + uint a = H1; + uint b = H2; + uint c = H3; + uint d = H4; + + // + // Round 1 - F cycle, 16 times. + // + a = RotateLeft((a + F(b, c, d) + X[0] + 0xd76aa478), S11) + b; + d = RotateLeft((d + F(a, b, c) + X[1] + 0xe8c7b756), S12) + a; + c = RotateLeft((c + F(d, a, b) + X[2] + 0x242070db), S13) + d; + b = RotateLeft((b + F(c, d, a) + X[3] + 0xc1bdceee), S14) + c; + a = RotateLeft((a + F(b, c, d) + X[4] + 0xf57c0faf), S11) + b; + d = RotateLeft((d + F(a, b, c) + X[5] + 0x4787c62a), S12) + a; + c = RotateLeft((c + F(d, a, b) + X[6] + 0xa8304613), S13) + d; + b = RotateLeft((b + F(c, d, a) + X[7] + 0xfd469501), S14) + c; + a = RotateLeft((a + F(b, c, d) + X[8] + 0x698098d8), S11) + b; + d = RotateLeft((d + F(a, b, c) + X[9] + 0x8b44f7af), S12) + a; + c = RotateLeft((c + F(d, a, b) + X[10] + 0xffff5bb1), S13) + d; + b = RotateLeft((b + F(c, d, a) + X[11] + 0x895cd7be), S14) + c; + a = RotateLeft((a + F(b, c, d) + X[12] + 0x6b901122), S11) + b; + d = RotateLeft((d + F(a, b, c) + X[13] + 0xfd987193), S12) + a; + c = RotateLeft((c + F(d, a, b) + X[14] + 0xa679438e), S13) + d; + b = RotateLeft((b + F(c, d, a) + X[15] + 0x49b40821), S14) + c; + + // + // Round 2 - G cycle, 16 times. + // + a = RotateLeft((a + G(b, c, d) + X[1] + 0xf61e2562), S21) + b; + d = RotateLeft((d + G(a, b, c) + X[6] + 0xc040b340), S22) + a; + c = RotateLeft((c + G(d, a, b) + X[11] + 0x265e5a51), S23) + d; + b = RotateLeft((b + G(c, d, a) + X[0] + 0xe9b6c7aa), S24) + c; + a = RotateLeft((a + G(b, c, d) + X[5] + 0xd62f105d), S21) + b; + d = RotateLeft((d + G(a, b, c) + X[10] + 0x02441453), S22) + a; + c = RotateLeft((c + G(d, a, b) + X[15] + 0xd8a1e681), S23) + d; + b = RotateLeft((b + G(c, d, a) + X[4] + 0xe7d3fbc8), S24) + c; + a = RotateLeft((a + G(b, c, d) + X[9] + 0x21e1cde6), S21) + b; + d = RotateLeft((d + G(a, b, c) + X[14] + 0xc33707d6), S22) + a; + c = RotateLeft((c + G(d, a, b) + X[3] + 0xf4d50d87), S23) + d; + b = RotateLeft((b + G(c, d, a) + X[8] + 0x455a14ed), S24) + c; + a = RotateLeft((a + G(b, c, d) + X[13] + 0xa9e3e905), S21) + b; + d = RotateLeft((d + G(a, b, c) + X[2] + 0xfcefa3f8), S22) + a; + c = RotateLeft((c + G(d, a, b) + X[7] + 0x676f02d9), S23) + d; + b = RotateLeft((b + G(c, d, a) + X[12] + 0x8d2a4c8a), S24) + c; + + // + // Round 3 - H cycle, 16 times. + // + a = RotateLeft((a + H(b, c, d) + X[5] + 0xfffa3942), S31) + b; + d = RotateLeft((d + H(a, b, c) + X[8] + 0x8771f681), S32) + a; + c = RotateLeft((c + H(d, a, b) + X[11] + 0x6d9d6122), S33) + d; + b = RotateLeft((b + H(c, d, a) + X[14] + 0xfde5380c), S34) + c; + a = RotateLeft((a + H(b, c, d) + X[1] + 0xa4beea44), S31) + b; + d = RotateLeft((d + H(a, b, c) + X[4] + 0x4bdecfa9), S32) + a; + c = RotateLeft((c + H(d, a, b) + X[7] + 0xf6bb4b60), S33) + d; + b = RotateLeft((b + H(c, d, a) + X[10] + 0xbebfbc70), S34) + c; + a = RotateLeft((a + H(b, c, d) + X[13] + 0x289b7ec6), S31) + b; + d = RotateLeft((d + H(a, b, c) + X[0] + 0xeaa127fa), S32) + a; + c = RotateLeft((c + H(d, a, b) + X[3] + 0xd4ef3085), S33) + d; + b = RotateLeft((b + H(c, d, a) + X[6] + 0x04881d05), S34) + c; + a = RotateLeft((a + H(b, c, d) + X[9] + 0xd9d4d039), S31) + b; + d = RotateLeft((d + H(a, b, c) + X[12] + 0xe6db99e5), S32) + a; + c = RotateLeft((c + H(d, a, b) + X[15] + 0x1fa27cf8), S33) + d; + b = RotateLeft((b + H(c, d, a) + X[2] + 0xc4ac5665), S34) + c; + + // + // Round 4 - K cycle, 16 times. + // + a = RotateLeft((a + K(b, c, d) + X[0] + 0xf4292244), S41) + b; + d = RotateLeft((d + K(a, b, c) + X[7] + 0x432aff97), S42) + a; + c = RotateLeft((c + K(d, a, b) + X[14] + 0xab9423a7), S43) + d; + b = RotateLeft((b + K(c, d, a) + X[5] + 0xfc93a039), S44) + c; + a = RotateLeft((a + K(b, c, d) + X[12] + 0x655b59c3), S41) + b; + d = RotateLeft((d + K(a, b, c) + X[3] + 0x8f0ccc92), S42) + a; + c = RotateLeft((c + K(d, a, b) + X[10] + 0xffeff47d), S43) + d; + b = RotateLeft((b + K(c, d, a) + X[1] + 0x85845dd1), S44) + c; + a = RotateLeft((a + K(b, c, d) + X[8] + 0x6fa87e4f), S41) + b; + d = RotateLeft((d + K(a, b, c) + X[15] + 0xfe2ce6e0), S42) + a; + c = RotateLeft((c + K(d, a, b) + X[6] + 0xa3014314), S43) + d; + b = RotateLeft((b + K(c, d, a) + X[13] + 0x4e0811a1), S44) + c; + a = RotateLeft((a + K(b, c, d) + X[4] + 0xf7537e82), S41) + b; + d = RotateLeft((d + K(a, b, c) + X[11] + 0xbd3af235), S42) + a; + c = RotateLeft((c + K(d, a, b) + X[2] + 0x2ad7d2bb), S43) + d; + b = RotateLeft((b + K(c, d, a) + X[9] + 0xeb86d391), S44) + c; + + H1 += a; + H2 += b; + H3 += c; + H4 += d; + + xOff = 0; + } + + public override IMemoable Copy() + { + return new MD5Digest(this); + } + + public override void Reset(IMemoable other) + { + MD5Digest d = (MD5Digest)other; + + CopyIn(d); + } + + } + +} + +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/MD5Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/MD5Digest.cs.meta new file mode 100644 index 000000000..22396e6fa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/MD5Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 46ef6a4addc052240b7194ef4a92d2c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/NonMemoableDigest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/NonMemoableDigest.cs new file mode 100644 index 000000000..5cbd4638d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/NonMemoableDigest.cs @@ -0,0 +1,80 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /** + * Wrapper removes exposure to the IMemoable interface on an IDigest implementation. + */ + public class NonMemoableDigest + : IDigest + { + protected readonly IDigest mBaseDigest; + + /** + * Base constructor. + * + * @param baseDigest underlying digest to use. + * @exception IllegalArgumentException if baseDigest is null + */ + public NonMemoableDigest(IDigest baseDigest) + { + if (baseDigest == null) + throw new ArgumentNullException("baseDigest"); + + this.mBaseDigest = baseDigest; + } + + public virtual string AlgorithmName + { + get { return mBaseDigest.AlgorithmName; } + } + + public virtual int GetDigestSize() + { + return mBaseDigest.GetDigestSize(); + } + + public virtual void Update(byte input) + { + mBaseDigest.Update(input); + } + + public virtual void BlockUpdate(byte[] input, int inOff, int len) + { + mBaseDigest.BlockUpdate(input, inOff, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + mBaseDigest.BlockUpdate(input); + } +#endif + + public virtual int DoFinal(byte[] output, int outOff) + { + return mBaseDigest.DoFinal(output, outOff); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int DoFinal(Span output) + { + return mBaseDigest.DoFinal(output); + } +#endif + + public virtual void Reset() + { + mBaseDigest.Reset(); + } + + public virtual int GetByteLength() + { + return mBaseDigest.GetByteLength(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/NonMemoableDigest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/NonMemoableDigest.cs.meta new file mode 100644 index 000000000..1708d173b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/NonMemoableDigest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71b1ef56ae67fac44857a3cd26f9d4fc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/NullDigest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/NullDigest.cs new file mode 100644 index 000000000..0230a4e35 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/NullDigest.cs @@ -0,0 +1,90 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + public class NullDigest : IDigest + { + private readonly MemoryStream bOut = new MemoryStream(); + + public string AlgorithmName + { + get { return "NULL"; } + } + + public int GetByteLength() + { + // TODO Is this okay? + return 0; + } + + public int GetDigestSize() + { + return Convert.ToInt32(bOut.Length); + } + + public void Update(byte b) + { + bOut.WriteByte(b); + } + + public void BlockUpdate(byte[] inBytes, int inOff, int len) + { + bOut.Write(inBytes, inOff, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + bOut.Write(input); + } +#endif + + public int DoFinal(byte[] outBytes, int outOff) + { + try + { + byte[] data = bOut.GetBuffer(); + int length = Convert.ToInt32(bOut.Length); + + Array.Copy(data, 0, outBytes, outOff, length); + + return length; + } + finally + { + Reset(); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + try + { + byte[] data = bOut.GetBuffer(); + int length = Convert.ToInt32(bOut.Length); + + data.AsSpan(0, length).CopyTo(output); + + return length; + } + finally + { + Reset(); + } + } +#endif + + public void Reset() + { + bOut.SetLength(0); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/NullDigest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/NullDigest.cs.meta new file mode 100644 index 000000000..a484b12d0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/NullDigest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e4ba894a25f89ad4485499b6efb1cd37 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/ParallelHash.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/ParallelHash.cs new file mode 100644 index 000000000..73cadb28d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/ParallelHash.cs @@ -0,0 +1,306 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /// + /// ParallelHash - a hash designed to support the efficient hashing of very long strings, by taking advantage, + /// of the parallelism available in modern processors with an optional XOF mode. + /// + /// From NIST Special Publication 800-185 - SHA-3 Derived Functions:cSHAKE, KMAC, TupleHash and ParallelHash + /// + /// + public class ParallelHash + : IXof, IDigest + { + private static readonly byte[] N_PARALLEL_HASH = Strings.ToByteArray("ParallelHash"); + + private readonly CShakeDigest cshake; + private readonly CShakeDigest compressor; + private readonly int bitLength; + private readonly int outputLength; + private readonly int B; + private readonly byte[] buffer; + private readonly byte[] compressorBuffer; + + private bool firstOutput; + private int nCount; + private int bufOff; + + /** + * Base constructor. + * + * @param bitLength bit length of the underlying SHAKE function, 128 or 256. + * @param S the customization string - available for local use. + * @param B the blocksize (in bytes) for hashing. + */ + public ParallelHash(int bitLength, byte[] S, int B) + : this(bitLength, S, B, bitLength * 2) + { + + } + + public ParallelHash(int bitLength, byte[] S, int B, int outputSize) + { + this.cshake = new CShakeDigest(bitLength, N_PARALLEL_HASH, S); + this.compressor = new CShakeDigest(bitLength, new byte[0], new byte[0]); + this.bitLength = bitLength; + this.B = B; + this.outputLength = (outputSize + 7) / 8; + this.buffer = new byte[B]; + this.compressorBuffer = new byte[bitLength * 2 / 8]; + + Reset(); + } + + public ParallelHash(ParallelHash source) + { + this.cshake = new CShakeDigest(source.cshake); + this.compressor = new CShakeDigest(source.compressor); + this.bitLength = source.bitLength; + this.B = source.B; + this.outputLength = source.outputLength; + this.buffer = Arrays.Clone(source.buffer); + this.compressorBuffer = Arrays.Clone(source.compressorBuffer); + } + + public virtual string AlgorithmName + { + get { return "ParallelHash" + cshake.AlgorithmName.Substring(6); } + } + + public virtual int GetByteLength() + { + return cshake.GetByteLength(); + } + + public virtual int GetDigestSize() + { + return outputLength; + } + + public virtual void Update(byte b) + { + buffer[bufOff++] = b; + if (bufOff == buffer.Length) + { + Compress(); + } + } + + public virtual void BlockUpdate(byte[] inBuf, int inOff, int len) + { + len = System.Math.Max(0, len); + + // + // fill the current word + // + int i = 0; + if (bufOff != 0) + { + while (i < len && bufOff != buffer.Length) + { + buffer[bufOff++] = inBuf[inOff + i++]; + } + + if (bufOff == buffer.Length) + { + Compress(); + } + } + + if (i < len) + { + while (len - i >= B) + { + Compress(inBuf, inOff + i, B); + i += B; + } + } + + while (i < len) + { + Update(inBuf[inOff + i++]); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + // + // fill the current word + // + int i = 0; + if (bufOff != 0) + { + while (i < input.Length && bufOff != buffer.Length) + { + buffer[bufOff++] = input[i++]; + } + + if (bufOff == buffer.Length) + { + Compress(); + } + } + + if (i < input.Length) + { + while (input.Length - i >= B) + { + Compress(input, i, B); + i += B; + } + } + + while (i < input.Length) + { + Update(input[i++]); + } + } +#endif + + private void Compress() + { + Compress(buffer, 0, bufOff); + bufOff = 0; + } + + private void Compress(byte[] buf, int offSet, int len) + { + compressor.BlockUpdate(buf, offSet, len); + compressor.OutputFinal(compressorBuffer, 0, compressorBuffer.Length); + + cshake.BlockUpdate(compressorBuffer, 0, compressorBuffer.Length); + + nCount++; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void Compress(ReadOnlySpan input, int pos, int len) + { + compressor.BlockUpdate(input.Slice(pos, len)); + compressor.OutputFinal(compressorBuffer, 0, compressorBuffer.Length); + + cshake.BlockUpdate(compressorBuffer, 0, compressorBuffer.Length); + + nCount++; + } +#endif + + private void WrapUp(int outputSize) + { + if (bufOff != 0) + { + Compress(); + } + byte[] nOut = XofUtilities.RightEncode(nCount); + byte[] encOut = XofUtilities.RightEncode(outputSize * 8); + + cshake.BlockUpdate(nOut, 0, nOut.Length); + cshake.BlockUpdate(encOut, 0, encOut.Length); + + firstOutput = false; + } + + public virtual int DoFinal(byte[] outBuf, int outOff) + { + if (firstOutput) + { + WrapUp(outputLength); + } + + int rv = cshake.DoFinal(outBuf, outOff); + + Reset(); + + return rv; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int DoFinal(Span output) + { + if (firstOutput) + { + WrapUp(outputLength); + } + + int rv = cshake.DoFinal(output); + + Reset(); + + return rv; + } +#endif + + public virtual int OutputFinal(byte[] outBuf, int outOff, int outLen) + { + if (firstOutput) + { + WrapUp(outputLength); + } + + int rv = cshake.OutputFinal(outBuf, outOff, outLen); + + Reset(); + + return rv; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int OutputFinal(Span output) + { + if (firstOutput) + { + WrapUp(outputLength); + } + + int rv = cshake.OutputFinal(output); + + Reset(); + + return rv; + } +#endif + + public virtual int Output(byte[] outBuf, int outOff, int outLen) + { + if (firstOutput) + { + WrapUp(0); + } + + return cshake.Output(outBuf, outOff, outLen); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int Output(Span output) + { + if (firstOutput) + { + WrapUp(0); + } + + return cshake.Output(output); + } +#endif + + public virtual void Reset() + { + cshake.Reset(); + Arrays.Clear(buffer); + + byte[] hdr = XofUtilities.LeftEncode(B); + cshake.BlockUpdate(hdr, 0, hdr.Length); + + nCount = 0; + bufOff = 0; + firstOutput = true; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/ParallelHash.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/ParallelHash.cs.meta new file mode 100644 index 000000000..91fbc2751 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/ParallelHash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 021c0d356cb7f3649915a413a39db0f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD128Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD128Digest.cs new file mode 100644 index 000000000..3f4b65112 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD128Digest.cs @@ -0,0 +1,499 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /** + * implementation of RipeMD128 + */ + public class RipeMD128Digest + : GeneralDigest + { + private const int DigestLength = 16; + + private int H0, H1, H2, H3; // IV's + + private int[] X = new int[16]; + private int xOff; + + /** + * Standard constructor + */ + public RipeMD128Digest() + { + Reset(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public RipeMD128Digest(RipeMD128Digest t) : base(t) + { + CopyIn(t); + } + + private void CopyIn(RipeMD128Digest t) + { + base.CopyIn(t); + + H0 = t.H0; + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + + Array.Copy(t.X, 0, X, 0, t.X.Length); + xOff = t.xOff; + } + + public override string AlgorithmName + { + get { return "RIPEMD128"; } + } + + public override int GetDigestSize() + { + return DigestLength; + } + + internal override void ProcessWord(byte[] input, int inOff) + { + X[xOff++] = (int)Pack.LE_To_UInt32(input, inOff); + + if (xOff == 16) + { + ProcessBlock(); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal override void ProcessWord(ReadOnlySpan word) + { + X[xOff++] = (int)Pack.LE_To_UInt32(word); + + if (xOff == 16) + { + ProcessBlock(); + } + } +#endif + + internal override void ProcessLength( + long bitLength) + { + if (xOff > 14) + { + ProcessBlock(); + } + + X[14] = (int)(bitLength & 0xffffffff); + X[15] = (int)((ulong) bitLength >> 32); + } + + public override int DoFinal(byte[] output, int outOff) + { + Finish(); + + Pack.UInt32_To_LE((uint)H0, output, outOff); + Pack.UInt32_To_LE((uint)H1, output, outOff + 4); + Pack.UInt32_To_LE((uint)H2, output, outOff + 8); + Pack.UInt32_To_LE((uint)H3, output, outOff + 12); + + Reset(); + + return DigestLength; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + Finish(); + + Pack.UInt32_To_LE((uint)H0, output); + Pack.UInt32_To_LE((uint)H1, output[4..]); + Pack.UInt32_To_LE((uint)H2, output[8..]); + Pack.UInt32_To_LE((uint)H3, output[12..]); + + Reset(); + + return DigestLength; + } +#endif + + /** + * reset the chaining variables to the IV values. + */ + public override void Reset() + { + base.Reset(); + + H0 = unchecked((int) 0x67452301); + H1 = unchecked((int) 0xefcdab89); + H2 = unchecked((int) 0x98badcfe); + H3 = unchecked((int) 0x10325476); + + xOff = 0; + + for (int i = 0; i != X.Length; i++) + { + X[i] = 0; + } + } + + /* + * rotate int x left n bits. + */ + private int RL( + int x, + int n) + { + return (x << n) | (int) ((uint) x >> (32 - n)); + } + + /* + * f1,f2,f3,f4 are the basic RipeMD128 functions. + */ + + /* + * F + */ + private int F1( + int x, + int y, + int z) + { + return x ^ y ^ z; + } + + /* + * G + */ + private int F2( + int x, + int y, + int z) + { + return (x & y) | (~x & z); + } + + /* + * H + */ + private int F3( + int x, + int y, + int z) + { + return (x | ~y) ^ z; + } + + /* + * I + */ + private int F4( + int x, + int y, + int z) + { + return (x & z) | (y & ~z); + } + + private int F1( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + F1(b, c, d) + x, s); + } + + private int F2( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + F2(b, c, d) + x + unchecked((int) 0x5a827999), s); + } + + private int F3( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + F3(b, c, d) + x + unchecked((int) 0x6ed9eba1), s); + } + + private int F4( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + F4(b, c, d) + x + unchecked((int) 0x8f1bbcdc), s); + } + + private int FF1( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + F1(b, c, d) + x, s); + } + + private int FF2( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + F2(b, c, d) + x + unchecked((int) 0x6d703ef3), s); + } + + private int FF3( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + F3(b, c, d) + x + unchecked((int) 0x5c4dd124), s); + } + + private int FF4( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + F4(b, c, d) + x + unchecked((int) 0x50a28be6), s); + } + + internal override void ProcessBlock() + { + int a, aa; + int b, bb; + int c, cc; + int d, dd; + + a = aa = H0; + b = bb = H1; + c = cc = H2; + d = dd = H3; + + // + // Round 1 + // + a = F1(a, b, c, d, X[ 0], 11); + d = F1(d, a, b, c, X[ 1], 14); + c = F1(c, d, a, b, X[ 2], 15); + b = F1(b, c, d, a, X[ 3], 12); + a = F1(a, b, c, d, X[ 4], 5); + d = F1(d, a, b, c, X[ 5], 8); + c = F1(c, d, a, b, X[ 6], 7); + b = F1(b, c, d, a, X[ 7], 9); + a = F1(a, b, c, d, X[ 8], 11); + d = F1(d, a, b, c, X[ 9], 13); + c = F1(c, d, a, b, X[10], 14); + b = F1(b, c, d, a, X[11], 15); + a = F1(a, b, c, d, X[12], 6); + d = F1(d, a, b, c, X[13], 7); + c = F1(c, d, a, b, X[14], 9); + b = F1(b, c, d, a, X[15], 8); + + // + // Round 2 + // + a = F2(a, b, c, d, X[ 7], 7); + d = F2(d, a, b, c, X[ 4], 6); + c = F2(c, d, a, b, X[13], 8); + b = F2(b, c, d, a, X[ 1], 13); + a = F2(a, b, c, d, X[10], 11); + d = F2(d, a, b, c, X[ 6], 9); + c = F2(c, d, a, b, X[15], 7); + b = F2(b, c, d, a, X[ 3], 15); + a = F2(a, b, c, d, X[12], 7); + d = F2(d, a, b, c, X[ 0], 12); + c = F2(c, d, a, b, X[ 9], 15); + b = F2(b, c, d, a, X[ 5], 9); + a = F2(a, b, c, d, X[ 2], 11); + d = F2(d, a, b, c, X[14], 7); + c = F2(c, d, a, b, X[11], 13); + b = F2(b, c, d, a, X[ 8], 12); + + // + // Round 3 + // + a = F3(a, b, c, d, X[ 3], 11); + d = F3(d, a, b, c, X[10], 13); + c = F3(c, d, a, b, X[14], 6); + b = F3(b, c, d, a, X[ 4], 7); + a = F3(a, b, c, d, X[ 9], 14); + d = F3(d, a, b, c, X[15], 9); + c = F3(c, d, a, b, X[ 8], 13); + b = F3(b, c, d, a, X[ 1], 15); + a = F3(a, b, c, d, X[ 2], 14); + d = F3(d, a, b, c, X[ 7], 8); + c = F3(c, d, a, b, X[ 0], 13); + b = F3(b, c, d, a, X[ 6], 6); + a = F3(a, b, c, d, X[13], 5); + d = F3(d, a, b, c, X[11], 12); + c = F3(c, d, a, b, X[ 5], 7); + b = F3(b, c, d, a, X[12], 5); + + // + // Round 4 + // + a = F4(a, b, c, d, X[ 1], 11); + d = F4(d, a, b, c, X[ 9], 12); + c = F4(c, d, a, b, X[11], 14); + b = F4(b, c, d, a, X[10], 15); + a = F4(a, b, c, d, X[ 0], 14); + d = F4(d, a, b, c, X[ 8], 15); + c = F4(c, d, a, b, X[12], 9); + b = F4(b, c, d, a, X[ 4], 8); + a = F4(a, b, c, d, X[13], 9); + d = F4(d, a, b, c, X[ 3], 14); + c = F4(c, d, a, b, X[ 7], 5); + b = F4(b, c, d, a, X[15], 6); + a = F4(a, b, c, d, X[14], 8); + d = F4(d, a, b, c, X[ 5], 6); + c = F4(c, d, a, b, X[ 6], 5); + b = F4(b, c, d, a, X[ 2], 12); + + // + // Parallel round 1 + // + aa = FF4(aa, bb, cc, dd, X[ 5], 8); + dd = FF4(dd, aa, bb, cc, X[14], 9); + cc = FF4(cc, dd, aa, bb, X[ 7], 9); + bb = FF4(bb, cc, dd, aa, X[ 0], 11); + aa = FF4(aa, bb, cc, dd, X[ 9], 13); + dd = FF4(dd, aa, bb, cc, X[ 2], 15); + cc = FF4(cc, dd, aa, bb, X[11], 15); + bb = FF4(bb, cc, dd, aa, X[ 4], 5); + aa = FF4(aa, bb, cc, dd, X[13], 7); + dd = FF4(dd, aa, bb, cc, X[ 6], 7); + cc = FF4(cc, dd, aa, bb, X[15], 8); + bb = FF4(bb, cc, dd, aa, X[ 8], 11); + aa = FF4(aa, bb, cc, dd, X[ 1], 14); + dd = FF4(dd, aa, bb, cc, X[10], 14); + cc = FF4(cc, dd, aa, bb, X[ 3], 12); + bb = FF4(bb, cc, dd, aa, X[12], 6); + + // + // Parallel round 2 + // + aa = FF3(aa, bb, cc, dd, X[ 6], 9); + dd = FF3(dd, aa, bb, cc, X[11], 13); + cc = FF3(cc, dd, aa, bb, X[ 3], 15); + bb = FF3(bb, cc, dd, aa, X[ 7], 7); + aa = FF3(aa, bb, cc, dd, X[ 0], 12); + dd = FF3(dd, aa, bb, cc, X[13], 8); + cc = FF3(cc, dd, aa, bb, X[ 5], 9); + bb = FF3(bb, cc, dd, aa, X[10], 11); + aa = FF3(aa, bb, cc, dd, X[14], 7); + dd = FF3(dd, aa, bb, cc, X[15], 7); + cc = FF3(cc, dd, aa, bb, X[ 8], 12); + bb = FF3(bb, cc, dd, aa, X[12], 7); + aa = FF3(aa, bb, cc, dd, X[ 4], 6); + dd = FF3(dd, aa, bb, cc, X[ 9], 15); + cc = FF3(cc, dd, aa, bb, X[ 1], 13); + bb = FF3(bb, cc, dd, aa, X[ 2], 11); + + // + // Parallel round 3 + // + aa = FF2(aa, bb, cc, dd, X[15], 9); + dd = FF2(dd, aa, bb, cc, X[ 5], 7); + cc = FF2(cc, dd, aa, bb, X[ 1], 15); + bb = FF2(bb, cc, dd, aa, X[ 3], 11); + aa = FF2(aa, bb, cc, dd, X[ 7], 8); + dd = FF2(dd, aa, bb, cc, X[14], 6); + cc = FF2(cc, dd, aa, bb, X[ 6], 6); + bb = FF2(bb, cc, dd, aa, X[ 9], 14); + aa = FF2(aa, bb, cc, dd, X[11], 12); + dd = FF2(dd, aa, bb, cc, X[ 8], 13); + cc = FF2(cc, dd, aa, bb, X[12], 5); + bb = FF2(bb, cc, dd, aa, X[ 2], 14); + aa = FF2(aa, bb, cc, dd, X[10], 13); + dd = FF2(dd, aa, bb, cc, X[ 0], 13); + cc = FF2(cc, dd, aa, bb, X[ 4], 7); + bb = FF2(bb, cc, dd, aa, X[13], 5); + + // + // Parallel round 4 + // + aa = FF1(aa, bb, cc, dd, X[ 8], 15); + dd = FF1(dd, aa, bb, cc, X[ 6], 5); + cc = FF1(cc, dd, aa, bb, X[ 4], 8); + bb = FF1(bb, cc, dd, aa, X[ 1], 11); + aa = FF1(aa, bb, cc, dd, X[ 3], 14); + dd = FF1(dd, aa, bb, cc, X[11], 14); + cc = FF1(cc, dd, aa, bb, X[15], 6); + bb = FF1(bb, cc, dd, aa, X[ 0], 14); + aa = FF1(aa, bb, cc, dd, X[ 5], 6); + dd = FF1(dd, aa, bb, cc, X[12], 9); + cc = FF1(cc, dd, aa, bb, X[ 2], 12); + bb = FF1(bb, cc, dd, aa, X[13], 9); + aa = FF1(aa, bb, cc, dd, X[ 9], 12); + dd = FF1(dd, aa, bb, cc, X[ 7], 5); + cc = FF1(cc, dd, aa, bb, X[10], 15); + bb = FF1(bb, cc, dd, aa, X[14], 8); + + dd += c + H1; // final result for H0 + + // + // combine the results + // + H1 = H2 + d + aa; + H2 = H3 + a + bb; + H3 = H0 + b + cc; + H0 = dd; + + // + // reset the offset and clean out the word buffer. + // + xOff = 0; + for (int i = 0; i != X.Length; i++) + { + X[i] = 0; + } + } + + public override IMemoable Copy() + { + return new RipeMD128Digest(this); + } + + public override void Reset(IMemoable other) + { + RipeMD128Digest d = (RipeMD128Digest)other; + + CopyIn(d); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD128Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD128Digest.cs.meta new file mode 100644 index 000000000..444d6f0ab --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD128Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19005e1814c7f154599f0788dfc18e96 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD160Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD160Digest.cs new file mode 100644 index 000000000..a94bfa0c8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD160Digest.cs @@ -0,0 +1,461 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /** + * implementation of RipeMD see, + * http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html + */ + public class RipeMD160Digest + : GeneralDigest + { + private const int DigestLength = 20; + + private int H0, H1, H2, H3, H4; // IV's + + private int[] X = new int[16]; + private int xOff; + + /** + * Standard constructor + */ + public RipeMD160Digest() + { + Reset(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public RipeMD160Digest(RipeMD160Digest t) : base(t) + { + CopyIn(t); + } + + private void CopyIn(RipeMD160Digest t) + { + base.CopyIn(t); + + H0 = t.H0; + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + H4 = t.H4; + + Array.Copy(t.X, 0, X, 0, t.X.Length); + xOff = t.xOff; + } + + public override string AlgorithmName + { + get { return "RIPEMD160"; } + } + + public override int GetDigestSize() + { + return DigestLength; + } + + internal override void ProcessWord(byte[] input, int inOff) + { + X[xOff++] = (int)Pack.LE_To_UInt32(input, inOff); + + if (xOff == 16) + { + ProcessBlock(); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal override void ProcessWord(ReadOnlySpan word) + { + X[xOff++] = (int)Pack.LE_To_UInt32(word); + + if (xOff == 16) + { + ProcessBlock(); + } + } +#endif + + internal override void ProcessLength( + long bitLength) + { + if (xOff > 14) + { + ProcessBlock(); + } + + X[14] = (int)(bitLength & 0xffffffff); + X[15] = (int)((ulong) bitLength >> 32); + } + + public override int DoFinal(byte[] output, int outOff) + { + Finish(); + + Pack.UInt32_To_LE((uint)H0, output, outOff); + Pack.UInt32_To_LE((uint)H1, output, outOff + 4); + Pack.UInt32_To_LE((uint)H2, output, outOff + 8); + Pack.UInt32_To_LE((uint)H3, output, outOff + 12); + Pack.UInt32_To_LE((uint)H4, output, outOff + 16); + + Reset(); + + return DigestLength; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + Finish(); + + Pack.UInt32_To_LE((uint)H0, output); + Pack.UInt32_To_LE((uint)H1, output[4..]); + Pack.UInt32_To_LE((uint)H2, output[8..]); + Pack.UInt32_To_LE((uint)H3, output[12..]); + Pack.UInt32_To_LE((uint)H4, output[16..]); + + Reset(); + + return DigestLength; + } +#endif + + /** + * reset the chaining variables to the IV values. + */ + public override void Reset() + { + base.Reset(); + + H0 = unchecked((int) 0x67452301); + H1 = unchecked((int) 0xefcdab89); + H2 = unchecked((int) 0x98badcfe); + H3 = unchecked((int) 0x10325476); + H4 = unchecked((int) 0xc3d2e1f0); + + xOff = 0; + + for (int i = 0; i != X.Length; i++) + { + X[i] = 0; + } + } + + /* + * rotate int x left n bits. + */ + private int RL( + int x, + int n) + { + return (x << n) | (int) ((uint) x >> (32 - n)); + } + + /* + * f1,f2,f3,f4,f5 are the basic RipeMD160 functions. + */ + + /* + * rounds 0-15 + */ + private int F1( + int x, + int y, + int z) + { + return x ^ y ^ z; + } + + /* + * rounds 16-31 + */ + private int F2( + int x, + int y, + int z) + { + return (x & y) | (~x & z); + } + + /* + * rounds 32-47 + */ + private int F3( + int x, + int y, + int z) + { + return (x | ~y) ^ z; + } + + /* + * rounds 48-63 + */ + private int F4( + int x, + int y, + int z) + { + return (x & z) | (y & ~z); + } + + /* + * rounds 64-79 + */ + private int F5( + int x, + int y, + int z) + { + return x ^ (y | ~z); + } + + internal override void ProcessBlock() + { + int a, aa; + int b, bb; + int c, cc; + int d, dd; + int e, ee; + + a = aa = H0; + b = bb = H1; + c = cc = H2; + d = dd = H3; + e = ee = H4; + + // + // Rounds 1 - 16 + // + // left + a = RL(a + F1(b,c,d) + X[ 0], 11) + e; c = RL(c, 10); + e = RL(e + F1(a,b,c) + X[ 1], 14) + d; b = RL(b, 10); + d = RL(d + F1(e,a,b) + X[ 2], 15) + c; a = RL(a, 10); + c = RL(c + F1(d,e,a) + X[ 3], 12) + b; e = RL(e, 10); + b = RL(b + F1(c,d,e) + X[ 4], 5) + a; d = RL(d, 10); + a = RL(a + F1(b,c,d) + X[ 5], 8) + e; c = RL(c, 10); + e = RL(e + F1(a,b,c) + X[ 6], 7) + d; b = RL(b, 10); + d = RL(d + F1(e,a,b) + X[ 7], 9) + c; a = RL(a, 10); + c = RL(c + F1(d,e,a) + X[ 8], 11) + b; e = RL(e, 10); + b = RL(b + F1(c,d,e) + X[ 9], 13) + a; d = RL(d, 10); + a = RL(a + F1(b,c,d) + X[10], 14) + e; c = RL(c, 10); + e = RL(e + F1(a,b,c) + X[11], 15) + d; b = RL(b, 10); + d = RL(d + F1(e,a,b) + X[12], 6) + c; a = RL(a, 10); + c = RL(c + F1(d,e,a) + X[13], 7) + b; e = RL(e, 10); + b = RL(b + F1(c,d,e) + X[14], 9) + a; d = RL(d, 10); + a = RL(a + F1(b,c,d) + X[15], 8) + e; c = RL(c, 10); + + // right + aa = RL(aa + F5(bb,cc,dd) + X[ 5] + unchecked((int) 0x50a28be6), 8) + ee; cc = RL(cc, 10); + ee = RL(ee + F5(aa,bb,cc) + X[14] + unchecked((int) 0x50a28be6), 9) + dd; bb = RL(bb, 10); + dd = RL(dd + F5(ee,aa,bb) + X[ 7] + unchecked((int) 0x50a28be6), 9) + cc; aa = RL(aa, 10); + cc = RL(cc + F5(dd,ee,aa) + X[ 0] + unchecked((int) 0x50a28be6), 11) + bb; ee = RL(ee, 10); + bb = RL(bb + F5(cc,dd,ee) + X[ 9] + unchecked((int) 0x50a28be6), 13) + aa; dd = RL(dd, 10); + aa = RL(aa + F5(bb,cc,dd) + X[ 2] + unchecked((int) 0x50a28be6), 15) + ee; cc = RL(cc, 10); + ee = RL(ee + F5(aa,bb,cc) + X[11] + unchecked((int) 0x50a28be6), 15) + dd; bb = RL(bb, 10); + dd = RL(dd + F5(ee,aa,bb) + X[ 4] + unchecked((int) 0x50a28be6), 5) + cc; aa = RL(aa, 10); + cc = RL(cc + F5(dd,ee,aa) + X[13] + unchecked((int) 0x50a28be6), 7) + bb; ee = RL(ee, 10); + bb = RL(bb + F5(cc,dd,ee) + X[ 6] + unchecked((int) 0x50a28be6), 7) + aa; dd = RL(dd, 10); + aa = RL(aa + F5(bb,cc,dd) + X[15] + unchecked((int) 0x50a28be6), 8) + ee; cc = RL(cc, 10); + ee = RL(ee + F5(aa,bb,cc) + X[ 8] + unchecked((int) 0x50a28be6), 11) + dd; bb = RL(bb, 10); + dd = RL(dd + F5(ee,aa,bb) + X[ 1] + unchecked((int) 0x50a28be6), 14) + cc; aa = RL(aa, 10); + cc = RL(cc + F5(dd,ee,aa) + X[10] + unchecked((int) 0x50a28be6), 14) + bb; ee = RL(ee, 10); + bb = RL(bb + F5(cc,dd,ee) + X[ 3] + unchecked((int) 0x50a28be6), 12) + aa; dd = RL(dd, 10); + aa = RL(aa + F5(bb,cc,dd) + X[12] + unchecked((int) 0x50a28be6), 6) + ee; cc = RL(cc, 10); + + // + // Rounds 16-31 + // + // left + e = RL(e + F2(a,b,c) + X[ 7] + unchecked((int) 0x5a827999), 7) + d; b = RL(b, 10); + d = RL(d + F2(e,a,b) + X[ 4] + unchecked((int) 0x5a827999), 6) + c; a = RL(a, 10); + c = RL(c + F2(d,e,a) + X[13] + unchecked((int) 0x5a827999), 8) + b; e = RL(e, 10); + b = RL(b + F2(c,d,e) + X[ 1] + unchecked((int) 0x5a827999), 13) + a; d = RL(d, 10); + a = RL(a + F2(b,c,d) + X[10] + unchecked((int) 0x5a827999), 11) + e; c = RL(c, 10); + e = RL(e + F2(a,b,c) + X[ 6] + unchecked((int) 0x5a827999), 9) + d; b = RL(b, 10); + d = RL(d + F2(e,a,b) + X[15] + unchecked((int) 0x5a827999), 7) + c; a = RL(a, 10); + c = RL(c + F2(d,e,a) + X[ 3] + unchecked((int) 0x5a827999), 15) + b; e = RL(e, 10); + b = RL(b + F2(c,d,e) + X[12] + unchecked((int) 0x5a827999), 7) + a; d = RL(d, 10); + a = RL(a + F2(b,c,d) + X[ 0] + unchecked((int) 0x5a827999), 12) + e; c = RL(c, 10); + e = RL(e + F2(a,b,c) + X[ 9] + unchecked((int) 0x5a827999), 15) + d; b = RL(b, 10); + d = RL(d + F2(e,a,b) + X[ 5] + unchecked((int) 0x5a827999), 9) + c; a = RL(a, 10); + c = RL(c + F2(d,e,a) + X[ 2] + unchecked((int) 0x5a827999), 11) + b; e = RL(e, 10); + b = RL(b + F2(c,d,e) + X[14] + unchecked((int) 0x5a827999), 7) + a; d = RL(d, 10); + a = RL(a + F2(b,c,d) + X[11] + unchecked((int) 0x5a827999), 13) + e; c = RL(c, 10); + e = RL(e + F2(a,b,c) + X[ 8] + unchecked((int) 0x5a827999), 12) + d; b = RL(b, 10); + + // right + ee = RL(ee + F4(aa,bb,cc) + X[ 6] + unchecked((int) 0x5c4dd124), 9) + dd; bb = RL(bb, 10); + dd = RL(dd + F4(ee,aa,bb) + X[11] + unchecked((int) 0x5c4dd124), 13) + cc; aa = RL(aa, 10); + cc = RL(cc + F4(dd,ee,aa) + X[ 3] + unchecked((int) 0x5c4dd124), 15) + bb; ee = RL(ee, 10); + bb = RL(bb + F4(cc,dd,ee) + X[ 7] + unchecked((int) 0x5c4dd124), 7) + aa; dd = RL(dd, 10); + aa = RL(aa + F4(bb,cc,dd) + X[ 0] + unchecked((int) 0x5c4dd124), 12) + ee; cc = RL(cc, 10); + ee = RL(ee + F4(aa,bb,cc) + X[13] + unchecked((int) 0x5c4dd124), 8) + dd; bb = RL(bb, 10); + dd = RL(dd + F4(ee,aa,bb) + X[ 5] + unchecked((int) 0x5c4dd124), 9) + cc; aa = RL(aa, 10); + cc = RL(cc + F4(dd,ee,aa) + X[10] + unchecked((int) 0x5c4dd124), 11) + bb; ee = RL(ee, 10); + bb = RL(bb + F4(cc,dd,ee) + X[14] + unchecked((int) 0x5c4dd124), 7) + aa; dd = RL(dd, 10); + aa = RL(aa + F4(bb,cc,dd) + X[15] + unchecked((int) 0x5c4dd124), 7) + ee; cc = RL(cc, 10); + ee = RL(ee + F4(aa,bb,cc) + X[ 8] + unchecked((int) 0x5c4dd124), 12) + dd; bb = RL(bb, 10); + dd = RL(dd + F4(ee,aa,bb) + X[12] + unchecked((int) 0x5c4dd124), 7) + cc; aa = RL(aa, 10); + cc = RL(cc + F4(dd,ee,aa) + X[ 4] + unchecked((int) 0x5c4dd124), 6) + bb; ee = RL(ee, 10); + bb = RL(bb + F4(cc,dd,ee) + X[ 9] + unchecked((int) 0x5c4dd124), 15) + aa; dd = RL(dd, 10); + aa = RL(aa + F4(bb,cc,dd) + X[ 1] + unchecked((int) 0x5c4dd124), 13) + ee; cc = RL(cc, 10); + ee = RL(ee + F4(aa,bb,cc) + X[ 2] + unchecked((int) 0x5c4dd124), 11) + dd; bb = RL(bb, 10); + + // + // Rounds 32-47 + // + // left + d = RL(d + F3(e,a,b) + X[ 3] + unchecked((int) 0x6ed9eba1), 11) + c; a = RL(a, 10); + c = RL(c + F3(d,e,a) + X[10] + unchecked((int) 0x6ed9eba1), 13) + b; e = RL(e, 10); + b = RL(b + F3(c,d,e) + X[14] + unchecked((int) 0x6ed9eba1), 6) + a; d = RL(d, 10); + a = RL(a + F3(b,c,d) + X[ 4] + unchecked((int) 0x6ed9eba1), 7) + e; c = RL(c, 10); + e = RL(e + F3(a,b,c) + X[ 9] + unchecked((int) 0x6ed9eba1), 14) + d; b = RL(b, 10); + d = RL(d + F3(e,a,b) + X[15] + unchecked((int) 0x6ed9eba1), 9) + c; a = RL(a, 10); + c = RL(c + F3(d,e,a) + X[ 8] + unchecked((int) 0x6ed9eba1), 13) + b; e = RL(e, 10); + b = RL(b + F3(c,d,e) + X[ 1] + unchecked((int) 0x6ed9eba1), 15) + a; d = RL(d, 10); + a = RL(a + F3(b,c,d) + X[ 2] + unchecked((int) 0x6ed9eba1), 14) + e; c = RL(c, 10); + e = RL(e + F3(a,b,c) + X[ 7] + unchecked((int) 0x6ed9eba1), 8) + d; b = RL(b, 10); + d = RL(d + F3(e,a,b) + X[ 0] + unchecked((int) 0x6ed9eba1), 13) + c; a = RL(a, 10); + c = RL(c + F3(d,e,a) + X[ 6] + unchecked((int) 0x6ed9eba1), 6) + b; e = RL(e, 10); + b = RL(b + F3(c,d,e) + X[13] + unchecked((int) 0x6ed9eba1), 5) + a; d = RL(d, 10); + a = RL(a + F3(b,c,d) + X[11] + unchecked((int) 0x6ed9eba1), 12) + e; c = RL(c, 10); + e = RL(e + F3(a,b,c) + X[ 5] + unchecked((int) 0x6ed9eba1), 7) + d; b = RL(b, 10); + d = RL(d + F3(e,a,b) + X[12] + unchecked((int) 0x6ed9eba1), 5) + c; a = RL(a, 10); + + // right + dd = RL(dd + F3(ee,aa,bb) + X[15] + unchecked((int) 0x6d703ef3), 9) + cc; aa = RL(aa, 10); + cc = RL(cc + F3(dd,ee,aa) + X[ 5] + unchecked((int) 0x6d703ef3), 7) + bb; ee = RL(ee, 10); + bb = RL(bb + F3(cc,dd,ee) + X[ 1] + unchecked((int) 0x6d703ef3), 15) + aa; dd = RL(dd, 10); + aa = RL(aa + F3(bb,cc,dd) + X[ 3] + unchecked((int) 0x6d703ef3), 11) + ee; cc = RL(cc, 10); + ee = RL(ee + F3(aa,bb,cc) + X[ 7] + unchecked((int) 0x6d703ef3), 8) + dd; bb = RL(bb, 10); + dd = RL(dd + F3(ee,aa,bb) + X[14] + unchecked((int) 0x6d703ef3), 6) + cc; aa = RL(aa, 10); + cc = RL(cc + F3(dd,ee,aa) + X[ 6] + unchecked((int) 0x6d703ef3), 6) + bb; ee = RL(ee, 10); + bb = RL(bb + F3(cc,dd,ee) + X[ 9] + unchecked((int) 0x6d703ef3), 14) + aa; dd = RL(dd, 10); + aa = RL(aa + F3(bb,cc,dd) + X[11] + unchecked((int) 0x6d703ef3), 12) + ee; cc = RL(cc, 10); + ee = RL(ee + F3(aa,bb,cc) + X[ 8] + unchecked((int) 0x6d703ef3), 13) + dd; bb = RL(bb, 10); + dd = RL(dd + F3(ee,aa,bb) + X[12] + unchecked((int) 0x6d703ef3), 5) + cc; aa = RL(aa, 10); + cc = RL(cc + F3(dd,ee,aa) + X[ 2] + unchecked((int) 0x6d703ef3), 14) + bb; ee = RL(ee, 10); + bb = RL(bb + F3(cc,dd,ee) + X[10] + unchecked((int) 0x6d703ef3), 13) + aa; dd = RL(dd, 10); + aa = RL(aa + F3(bb,cc,dd) + X[ 0] + unchecked((int) 0x6d703ef3), 13) + ee; cc = RL(cc, 10); + ee = RL(ee + F3(aa,bb,cc) + X[ 4] + unchecked((int) 0x6d703ef3), 7) + dd; bb = RL(bb, 10); + dd = RL(dd + F3(ee,aa,bb) + X[13] + unchecked((int) 0x6d703ef3), 5) + cc; aa = RL(aa, 10); + + // + // Rounds 48-63 + // + // left + c = RL(c + F4(d,e,a) + X[ 1] + unchecked((int) 0x8f1bbcdc), 11) + b; e = RL(e, 10); + b = RL(b + F4(c,d,e) + X[ 9] + unchecked((int) 0x8f1bbcdc), 12) + a; d = RL(d, 10); + a = RL(a + F4(b,c,d) + X[11] + unchecked((int) 0x8f1bbcdc), 14) + e; c = RL(c, 10); + e = RL(e + F4(a,b,c) + X[10] + unchecked((int) 0x8f1bbcdc), 15) + d; b = RL(b, 10); + d = RL(d + F4(e,a,b) + X[ 0] + unchecked((int) 0x8f1bbcdc), 14) + c; a = RL(a, 10); + c = RL(c + F4(d,e,a) + X[ 8] + unchecked((int) 0x8f1bbcdc), 15) + b; e = RL(e, 10); + b = RL(b + F4(c,d,e) + X[12] + unchecked((int) 0x8f1bbcdc), 9) + a; d = RL(d, 10); + a = RL(a + F4(b,c,d) + X[ 4] + unchecked((int) 0x8f1bbcdc), 8) + e; c = RL(c, 10); + e = RL(e + F4(a,b,c) + X[13] + unchecked((int) 0x8f1bbcdc), 9) + d; b = RL(b, 10); + d = RL(d + F4(e,a,b) + X[ 3] + unchecked((int) 0x8f1bbcdc), 14) + c; a = RL(a, 10); + c = RL(c + F4(d,e,a) + X[ 7] + unchecked((int) 0x8f1bbcdc), 5) + b; e = RL(e, 10); + b = RL(b + F4(c,d,e) + X[15] + unchecked((int) 0x8f1bbcdc), 6) + a; d = RL(d, 10); + a = RL(a + F4(b,c,d) + X[14] + unchecked((int) 0x8f1bbcdc), 8) + e; c = RL(c, 10); + e = RL(e + F4(a,b,c) + X[ 5] + unchecked((int) 0x8f1bbcdc), 6) + d; b = RL(b, 10); + d = RL(d + F4(e,a,b) + X[ 6] + unchecked((int) 0x8f1bbcdc), 5) + c; a = RL(a, 10); + c = RL(c + F4(d,e,a) + X[ 2] + unchecked((int) 0x8f1bbcdc), 12) + b; e = RL(e, 10); + + // right + cc = RL(cc + F2(dd,ee,aa) + X[ 8] + unchecked((int) 0x7a6d76e9), 15) + bb; ee = RL(ee, 10); + bb = RL(bb + F2(cc,dd,ee) + X[ 6] + unchecked((int) 0x7a6d76e9), 5) + aa; dd = RL(dd, 10); + aa = RL(aa + F2(bb,cc,dd) + X[ 4] + unchecked((int) 0x7a6d76e9), 8) + ee; cc = RL(cc, 10); + ee = RL(ee + F2(aa,bb,cc) + X[ 1] + unchecked((int) 0x7a6d76e9), 11) + dd; bb = RL(bb, 10); + dd = RL(dd + F2(ee,aa,bb) + X[ 3] + unchecked((int) 0x7a6d76e9), 14) + cc; aa = RL(aa, 10); + cc = RL(cc + F2(dd,ee,aa) + X[11] + unchecked((int) 0x7a6d76e9), 14) + bb; ee = RL(ee, 10); + bb = RL(bb + F2(cc,dd,ee) + X[15] + unchecked((int) 0x7a6d76e9), 6) + aa; dd = RL(dd, 10); + aa = RL(aa + F2(bb,cc,dd) + X[ 0] + unchecked((int) 0x7a6d76e9), 14) + ee; cc = RL(cc, 10); + ee = RL(ee + F2(aa,bb,cc) + X[ 5] + unchecked((int) 0x7a6d76e9), 6) + dd; bb = RL(bb, 10); + dd = RL(dd + F2(ee,aa,bb) + X[12] + unchecked((int) 0x7a6d76e9), 9) + cc; aa = RL(aa, 10); + cc = RL(cc + F2(dd,ee,aa) + X[ 2] + unchecked((int) 0x7a6d76e9), 12) + bb; ee = RL(ee, 10); + bb = RL(bb + F2(cc,dd,ee) + X[13] + unchecked((int) 0x7a6d76e9), 9) + aa; dd = RL(dd, 10); + aa = RL(aa + F2(bb,cc,dd) + X[ 9] + unchecked((int) 0x7a6d76e9), 12) + ee; cc = RL(cc, 10); + ee = RL(ee + F2(aa,bb,cc) + X[ 7] + unchecked((int) 0x7a6d76e9), 5) + dd; bb = RL(bb, 10); + dd = RL(dd + F2(ee,aa,bb) + X[10] + unchecked((int) 0x7a6d76e9), 15) + cc; aa = RL(aa, 10); + cc = RL(cc + F2(dd,ee,aa) + X[14] + unchecked((int) 0x7a6d76e9), 8) + bb; ee = RL(ee, 10); + + // + // Rounds 64-79 + // + // left + b = RL(b + F5(c,d,e) + X[ 4] + unchecked((int) 0xa953fd4e), 9) + a; d = RL(d, 10); + a = RL(a + F5(b,c,d) + X[ 0] + unchecked((int) 0xa953fd4e), 15) + e; c = RL(c, 10); + e = RL(e + F5(a,b,c) + X[ 5] + unchecked((int) 0xa953fd4e), 5) + d; b = RL(b, 10); + d = RL(d + F5(e,a,b) + X[ 9] + unchecked((int) 0xa953fd4e), 11) + c; a = RL(a, 10); + c = RL(c + F5(d,e,a) + X[ 7] + unchecked((int) 0xa953fd4e), 6) + b; e = RL(e, 10); + b = RL(b + F5(c,d,e) + X[12] + unchecked((int) 0xa953fd4e), 8) + a; d = RL(d, 10); + a = RL(a + F5(b,c,d) + X[ 2] + unchecked((int) 0xa953fd4e), 13) + e; c = RL(c, 10); + e = RL(e + F5(a,b,c) + X[10] + unchecked((int) 0xa953fd4e), 12) + d; b = RL(b, 10); + d = RL(d + F5(e,a,b) + X[14] + unchecked((int) 0xa953fd4e), 5) + c; a = RL(a, 10); + c = RL(c + F5(d,e,a) + X[ 1] + unchecked((int) 0xa953fd4e), 12) + b; e = RL(e, 10); + b = RL(b + F5(c,d,e) + X[ 3] + unchecked((int) 0xa953fd4e), 13) + a; d = RL(d, 10); + a = RL(a + F5(b,c,d) + X[ 8] + unchecked((int) 0xa953fd4e), 14) + e; c = RL(c, 10); + e = RL(e + F5(a,b,c) + X[11] + unchecked((int) 0xa953fd4e), 11) + d; b = RL(b, 10); + d = RL(d + F5(e,a,b) + X[ 6] + unchecked((int) 0xa953fd4e), 8) + c; a = RL(a, 10); + c = RL(c + F5(d,e,a) + X[15] + unchecked((int) 0xa953fd4e), 5) + b; e = RL(e, 10); + b = RL(b + F5(c,d,e) + X[13] + unchecked((int) 0xa953fd4e), 6) + a; d = RL(d, 10); + + // right + bb = RL(bb + F1(cc,dd,ee) + X[12], 8) + aa; dd = RL(dd, 10); + aa = RL(aa + F1(bb,cc,dd) + X[15], 5) + ee; cc = RL(cc, 10); + ee = RL(ee + F1(aa,bb,cc) + X[10], 12) + dd; bb = RL(bb, 10); + dd = RL(dd + F1(ee,aa,bb) + X[ 4], 9) + cc; aa = RL(aa, 10); + cc = RL(cc + F1(dd,ee,aa) + X[ 1], 12) + bb; ee = RL(ee, 10); + bb = RL(bb + F1(cc,dd,ee) + X[ 5], 5) + aa; dd = RL(dd, 10); + aa = RL(aa + F1(bb,cc,dd) + X[ 8], 14) + ee; cc = RL(cc, 10); + ee = RL(ee + F1(aa,bb,cc) + X[ 7], 6) + dd; bb = RL(bb, 10); + dd = RL(dd + F1(ee,aa,bb) + X[ 6], 8) + cc; aa = RL(aa, 10); + cc = RL(cc + F1(dd,ee,aa) + X[ 2], 13) + bb; ee = RL(ee, 10); + bb = RL(bb + F1(cc,dd,ee) + X[13], 6) + aa; dd = RL(dd, 10); + aa = RL(aa + F1(bb,cc,dd) + X[14], 5) + ee; cc = RL(cc, 10); + ee = RL(ee + F1(aa,bb,cc) + X[ 0], 15) + dd; bb = RL(bb, 10); + dd = RL(dd + F1(ee,aa,bb) + X[ 3], 13) + cc; aa = RL(aa, 10); + cc = RL(cc + F1(dd,ee,aa) + X[ 9], 11) + bb; ee = RL(ee, 10); + bb = RL(bb + F1(cc,dd,ee) + X[11], 11) + aa; dd = RL(dd, 10); + + dd += c + H1; + H1 = H2 + d + ee; + H2 = H3 + e + aa; + H3 = H4 + a + bb; + H4 = H0 + b + cc; + H0 = dd; + + // + // reset the offset and clean out the word buffer. + // + xOff = 0; + for (int i = 0; i != X.Length; i++) + { + X[i] = 0; + } + } + + public override IMemoable Copy() + { + return new RipeMD160Digest(this); + } + + public override void Reset(IMemoable other) + { + RipeMD160Digest d = (RipeMD160Digest)other; + + CopyIn(d); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD160Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD160Digest.cs.meta new file mode 100644 index 000000000..af4084179 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD160Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 588720ec33ec63143abd90df75fee16e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD256Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD256Digest.cs new file mode 100644 index 000000000..d708f638b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD256Digest.cs @@ -0,0 +1,452 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /// + ///

Implementation of RipeMD256.

+ ///

Note: this algorithm offers the same level of security as RipeMD128.

+ ///
+ public class RipeMD256Digest + : GeneralDigest + { + public override string AlgorithmName + { + get { return "RIPEMD256"; } + } + + public override int GetDigestSize() + { + return DigestLength; + } + + private const int DigestLength = 32; + + private int H0, H1, H2, H3, H4, H5, H6, H7; // IV's + + private int[] X = new int[16]; + private int xOff; + + /// Standard constructor + public RipeMD256Digest() + { + Reset(); + } + + /// Copy constructor. This will copy the state of the provided + /// message digest. + /// + public RipeMD256Digest(RipeMD256Digest t):base(t) + { + CopyIn(t); + } + + private void CopyIn(RipeMD256Digest t) + { + base.CopyIn(t); + + H0 = t.H0; + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + H4 = t.H4; + H5 = t.H5; + H6 = t.H6; + H7 = t.H7; + + Array.Copy(t.X, 0, X, 0, t.X.Length); + xOff = t.xOff; + } + + internal override void ProcessWord(byte[] input, int inOff) + { + X[xOff++] = (int)Pack.LE_To_UInt32(input, inOff); + + if (xOff == 16) + { + ProcessBlock(); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal override void ProcessWord(ReadOnlySpan word) + { + X[xOff++] = (int)Pack.LE_To_UInt32(word); + + if (xOff == 16) + { + ProcessBlock(); + } + } +#endif + + internal override void ProcessLength( + long bitLength) + { + if (xOff > 14) + { + ProcessBlock(); + } + + X[14] = (int)(bitLength & 0xffffffff); + X[15] = (int)((ulong)bitLength >> 32); + } + + public override int DoFinal(byte[] output, int outOff) + { + Finish(); + + Pack.UInt32_To_LE((uint)H0, output, outOff); + Pack.UInt32_To_LE((uint)H1, output, outOff + 4); + Pack.UInt32_To_LE((uint)H2, output, outOff + 8); + Pack.UInt32_To_LE((uint)H3, output, outOff + 12); + Pack.UInt32_To_LE((uint)H4, output, outOff + 16); + Pack.UInt32_To_LE((uint)H5, output, outOff + 20); + Pack.UInt32_To_LE((uint)H6, output, outOff + 24); + Pack.UInt32_To_LE((uint)H7, output, outOff + 28); + + Reset(); + + return DigestLength; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + Finish(); + + Pack.UInt32_To_LE((uint)H0, output); + Pack.UInt32_To_LE((uint)H1, output[4..]); + Pack.UInt32_To_LE((uint)H2, output[8..]); + Pack.UInt32_To_LE((uint)H3, output[12..]); + Pack.UInt32_To_LE((uint)H4, output[16..]); + Pack.UInt32_To_LE((uint)H5, output[20..]); + Pack.UInt32_To_LE((uint)H6, output[24..]); + Pack.UInt32_To_LE((uint)H7, output[28..]); + + Reset(); + + return DigestLength; + } +#endif + + /// reset the chaining variables to the IV values. + public override void Reset() + { + base.Reset(); + + H0 = unchecked((int)0x67452301); + H1 = unchecked((int)0xefcdab89); + H2 = unchecked((int)0x98badcfe); + H3 = unchecked((int)0x10325476); + H4 = unchecked((int)0x76543210); + H5 = unchecked((int)0xFEDCBA98); + H6 = unchecked((int)0x89ABCDEF); + H7 = unchecked((int)0x01234567); + + xOff = 0; + + for (int i = 0; i != X.Length; i++) + { + X[i] = 0; + } + } + + /* + * rotate int x left n bits. + */ + private int RL( + int x, + int n) + { + return (x << n) | (int)((uint)x >> (32 - n)); + } + + /* + * f1,f2,f3,f4 are the basic RipeMD128 functions. + */ + + /* + * F + */ + private int F1(int x, int y, int z) + { + return x ^ y ^ z; + } + + /* + * G + */ + private int F2(int x, int y, int z) + { + return (x & y) | (~ x & z); + } + + /* + * H + */ + private int F3(int x, int y, int z) + { + return (x | ~ y) ^ z; + } + + /* + * I + */ + private int F4(int x, int y, int z) + { + return (x & z) | (y & ~ z); + } + + private int F1(int a, int b, int c, int d, int x, int s) + { + return RL(a + F1(b, c, d) + x, s); + } + + private int F2(int a, int b, int c, int d, int x, int s) + { + return RL(a + F2(b, c, d) + x + unchecked((int)0x5a827999), s); + } + + private int F3(int a, int b, int c, int d, int x, int s) + { + return RL(a + F3(b, c, d) + x + unchecked((int)0x6ed9eba1), s); + } + + private int F4(int a, int b, int c, int d, int x, int s) + { + return RL(a + F4(b, c, d) + x + unchecked((int)0x8f1bbcdc), s); + } + + private int FF1(int a, int b, int c, int d, int x, int s) + { + return RL(a + F1(b, c, d) + x, s); + } + + private int FF2(int a, int b, int c, int d, int x, int s) + { + return RL(a + F2(b, c, d) + x + unchecked((int)0x6d703ef3), s); + } + + private int FF3(int a, int b, int c, int d, int x, int s) + { + return RL(a + F3(b, c, d) + x + unchecked((int)0x5c4dd124), s); + } + + private int FF4(int a, int b, int c, int d, int x, int s) + { + return RL(a + F4(b, c, d) + x + unchecked((int)0x50a28be6), s); + } + + internal override void ProcessBlock() + { + int a, aa; + int b, bb; + int c, cc; + int d, dd; + int t; + + a = H0; + b = H1; + c = H2; + d = H3; + aa = H4; + bb = H5; + cc = H6; + dd = H7; + + // + // Round 1 + // + + a = F1(a, b, c, d, X[0], 11); + d = F1(d, a, b, c, X[1], 14); + c = F1(c, d, a, b, X[2], 15); + b = F1(b, c, d, a, X[3], 12); + a = F1(a, b, c, d, X[4], 5); + d = F1(d, a, b, c, X[5], 8); + c = F1(c, d, a, b, X[6], 7); + b = F1(b, c, d, a, X[7], 9); + a = F1(a, b, c, d, X[8], 11); + d = F1(d, a, b, c, X[9], 13); + c = F1(c, d, a, b, X[10], 14); + b = F1(b, c, d, a, X[11], 15); + a = F1(a, b, c, d, X[12], 6); + d = F1(d, a, b, c, X[13], 7); + c = F1(c, d, a, b, X[14], 9); + b = F1(b, c, d, a, X[15], 8); + + aa = FF4(aa, bb, cc, dd, X[5], 8); + dd = FF4(dd, aa, bb, cc, X[14], 9); + cc = FF4(cc, dd, aa, bb, X[7], 9); + bb = FF4(bb, cc, dd, aa, X[0], 11); + aa = FF4(aa, bb, cc, dd, X[9], 13); + dd = FF4(dd, aa, bb, cc, X[2], 15); + cc = FF4(cc, dd, aa, bb, X[11], 15); + bb = FF4(bb, cc, dd, aa, X[4], 5); + aa = FF4(aa, bb, cc, dd, X[13], 7); + dd = FF4(dd, aa, bb, cc, X[6], 7); + cc = FF4(cc, dd, aa, bb, X[15], 8); + bb = FF4(bb, cc, dd, aa, X[8], 11); + aa = FF4(aa, bb, cc, dd, X[1], 14); + dd = FF4(dd, aa, bb, cc, X[10], 14); + cc = FF4(cc, dd, aa, bb, X[3], 12); + bb = FF4(bb, cc, dd, aa, X[12], 6); + + t = a; a = aa; aa = t; + + // + // Round 2 + // + a = F2(a, b, c, d, X[7], 7); + d = F2(d, a, b, c, X[4], 6); + c = F2(c, d, a, b, X[13], 8); + b = F2(b, c, d, a, X[1], 13); + a = F2(a, b, c, d, X[10], 11); + d = F2(d, a, b, c, X[6], 9); + c = F2(c, d, a, b, X[15], 7); + b = F2(b, c, d, a, X[3], 15); + a = F2(a, b, c, d, X[12], 7); + d = F2(d, a, b, c, X[0], 12); + c = F2(c, d, a, b, X[9], 15); + b = F2(b, c, d, a, X[5], 9); + a = F2(a, b, c, d, X[2], 11); + d = F2(d, a, b, c, X[14], 7); + c = F2(c, d, a, b, X[11], 13); + b = F2(b, c, d, a, X[8], 12); + + aa = FF3(aa, bb, cc, dd, X[6], 9); + dd = FF3(dd, aa, bb, cc, X[11], 13); + cc = FF3(cc, dd, aa, bb, X[3], 15); + bb = FF3(bb, cc, dd, aa, X[7], 7); + aa = FF3(aa, bb, cc, dd, X[0], 12); + dd = FF3(dd, aa, bb, cc, X[13], 8); + cc = FF3(cc, dd, aa, bb, X[5], 9); + bb = FF3(bb, cc, dd, aa, X[10], 11); + aa = FF3(aa, bb, cc, dd, X[14], 7); + dd = FF3(dd, aa, bb, cc, X[15], 7); + cc = FF3(cc, dd, aa, bb, X[8], 12); + bb = FF3(bb, cc, dd, aa, X[12], 7); + aa = FF3(aa, bb, cc, dd, X[4], 6); + dd = FF3(dd, aa, bb, cc, X[9], 15); + cc = FF3(cc, dd, aa, bb, X[1], 13); + bb = FF3(bb, cc, dd, aa, X[2], 11); + + t = b; b = bb; bb = t; + + // + // Round 3 + // + a = F3(a, b, c, d, X[3], 11); + d = F3(d, a, b, c, X[10], 13); + c = F3(c, d, a, b, X[14], 6); + b = F3(b, c, d, a, X[4], 7); + a = F3(a, b, c, d, X[9], 14); + d = F3(d, a, b, c, X[15], 9); + c = F3(c, d, a, b, X[8], 13); + b = F3(b, c, d, a, X[1], 15); + a = F3(a, b, c, d, X[2], 14); + d = F3(d, a, b, c, X[7], 8); + c = F3(c, d, a, b, X[0], 13); + b = F3(b, c, d, a, X[6], 6); + a = F3(a, b, c, d, X[13], 5); + d = F3(d, a, b, c, X[11], 12); + c = F3(c, d, a, b, X[5], 7); + b = F3(b, c, d, a, X[12], 5); + + aa = FF2(aa, bb, cc, dd, X[15], 9); + dd = FF2(dd, aa, bb, cc, X[5], 7); + cc = FF2(cc, dd, aa, bb, X[1], 15); + bb = FF2(bb, cc, dd, aa, X[3], 11); + aa = FF2(aa, bb, cc, dd, X[7], 8); + dd = FF2(dd, aa, bb, cc, X[14], 6); + cc = FF2(cc, dd, aa, bb, X[6], 6); + bb = FF2(bb, cc, dd, aa, X[9], 14); + aa = FF2(aa, bb, cc, dd, X[11], 12); + dd = FF2(dd, aa, bb, cc, X[8], 13); + cc = FF2(cc, dd, aa, bb, X[12], 5); + bb = FF2(bb, cc, dd, aa, X[2], 14); + aa = FF2(aa, bb, cc, dd, X[10], 13); + dd = FF2(dd, aa, bb, cc, X[0], 13); + cc = FF2(cc, dd, aa, bb, X[4], 7); + bb = FF2(bb, cc, dd, aa, X[13], 5); + + t = c; c = cc; cc = t; + + // + // Round 4 + // + a = F4(a, b, c, d, X[1], 11); + d = F4(d, a, b, c, X[9], 12); + c = F4(c, d, a, b, X[11], 14); + b = F4(b, c, d, a, X[10], 15); + a = F4(a, b, c, d, X[0], 14); + d = F4(d, a, b, c, X[8], 15); + c = F4(c, d, a, b, X[12], 9); + b = F4(b, c, d, a, X[4], 8); + a = F4(a, b, c, d, X[13], 9); + d = F4(d, a, b, c, X[3], 14); + c = F4(c, d, a, b, X[7], 5); + b = F4(b, c, d, a, X[15], 6); + a = F4(a, b, c, d, X[14], 8); + d = F4(d, a, b, c, X[5], 6); + c = F4(c, d, a, b, X[6], 5); + b = F4(b, c, d, a, X[2], 12); + + aa = FF1(aa, bb, cc, dd, X[8], 15); + dd = FF1(dd, aa, bb, cc, X[6], 5); + cc = FF1(cc, dd, aa, bb, X[4], 8); + bb = FF1(bb, cc, dd, aa, X[1], 11); + aa = FF1(aa, bb, cc, dd, X[3], 14); + dd = FF1(dd, aa, bb, cc, X[11], 14); + cc = FF1(cc, dd, aa, bb, X[15], 6); + bb = FF1(bb, cc, dd, aa, X[0], 14); + aa = FF1(aa, bb, cc, dd, X[5], 6); + dd = FF1(dd, aa, bb, cc, X[12], 9); + cc = FF1(cc, dd, aa, bb, X[2], 12); + bb = FF1(bb, cc, dd, aa, X[13], 9); + aa = FF1(aa, bb, cc, dd, X[9], 12); + dd = FF1(dd, aa, bb, cc, X[7], 5); + cc = FF1(cc, dd, aa, bb, X[10], 15); + bb = FF1(bb, cc, dd, aa, X[14], 8); + + t = d; d = dd; dd = t; + + H0 += a; + H1 += b; + H2 += c; + H3 += d; + H4 += aa; + H5 += bb; + H6 += cc; + H7 += dd; + + // + // reset the offset and clean out the word buffer. + // + xOff = 0; + for (int i = 0; i != X.Length; i++) + { + X[i] = 0; + } + } + + public override IMemoable Copy() + { + return new RipeMD256Digest(this); + } + + public override void Reset(IMemoable other) + { + RipeMD256Digest d = (RipeMD256Digest)other; + + CopyIn(d); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD256Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD256Digest.cs.meta new file mode 100644 index 000000000..ed6da8c2c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD256Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf8ef59bb0f190a478b67b9040e142f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD320Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD320Digest.cs new file mode 100644 index 000000000..634dbab22 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD320Digest.cs @@ -0,0 +1,483 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /// + ///

Implementation of RipeMD 320.

+ ///

Note: this algorithm offers the same level of security as RipeMD160.

+ ///
+ public class RipeMD320Digest + : GeneralDigest + { + public override string AlgorithmName + { + get { return "RIPEMD320"; } + } + + public override int GetDigestSize() + { + return DigestLength; + } + + private const int DigestLength = 40; + + private int H0, H1, H2, H3, H4, H5, H6, H7, H8, H9; // IV's + + private int[] X = new int[16]; + private int xOff; + + /// Standard constructor + public RipeMD320Digest() + { + Reset(); + } + + /// Copy constructor. This will copy the state of the provided + /// message digest. + /// + public RipeMD320Digest(RipeMD320Digest t) + : base(t) + { + CopyIn(t); + } + + private void CopyIn(RipeMD320Digest t) + { + base.CopyIn(t); + + H0 = t.H0; + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + H4 = t.H4; + H5 = t.H5; + H6 = t.H6; + H7 = t.H7; + H8 = t.H8; + H9 = t.H9; + + Array.Copy(t.X, 0, X, 0, t.X.Length); + xOff = t.xOff; + } + + internal override void ProcessWord(byte[] input, int inOff) + { + X[xOff++] = (int)Pack.LE_To_UInt32(input, inOff); + + if (xOff == 16) + { + ProcessBlock(); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal override void ProcessWord(ReadOnlySpan word) + { + X[xOff++] = (int)Pack.LE_To_UInt32(word); + + if (xOff == 16) + { + ProcessBlock(); + } + } +#endif + + internal override void ProcessLength( + long bitLength) + { + if (xOff > 14) + { + ProcessBlock(); + } + + X[14] = (int)(bitLength & 0xffffffff); + X[15] = (int)((ulong)bitLength >> 32); + } + + public override int DoFinal(byte[] output, int outOff) + { + Finish(); + + Pack.UInt32_To_LE((uint)H0, output, outOff); + Pack.UInt32_To_LE((uint)H1, output, outOff + 4); + Pack.UInt32_To_LE((uint)H2, output, outOff + 8); + Pack.UInt32_To_LE((uint)H3, output, outOff + 12); + Pack.UInt32_To_LE((uint)H4, output, outOff + 16); + Pack.UInt32_To_LE((uint)H5, output, outOff + 20); + Pack.UInt32_To_LE((uint)H6, output, outOff + 24); + Pack.UInt32_To_LE((uint)H7, output, outOff + 28); + Pack.UInt32_To_LE((uint)H8, output, outOff + 32); + Pack.UInt32_To_LE((uint)H9, output, outOff + 36); + + Reset(); + + return DigestLength; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + Finish(); + + Pack.UInt32_To_LE((uint)H0, output); + Pack.UInt32_To_LE((uint)H1, output[4..]); + Pack.UInt32_To_LE((uint)H2, output[8..]); + Pack.UInt32_To_LE((uint)H3, output[12..]); + Pack.UInt32_To_LE((uint)H4, output[16..]); + Pack.UInt32_To_LE((uint)H5, output[20..]); + Pack.UInt32_To_LE((uint)H6, output[24..]); + Pack.UInt32_To_LE((uint)H7, output[28..]); + Pack.UInt32_To_LE((uint)H8, output[32..]); + Pack.UInt32_To_LE((uint)H9, output[36..]); + + Reset(); + + return DigestLength; + } +#endif + + /// reset the chaining variables to the IV values. + public override void Reset() + { + base.Reset(); + + H0 = unchecked((int) 0x67452301); + H1 = unchecked((int) 0xefcdab89); + H2 = unchecked((int) 0x98badcfe); + H3 = unchecked((int) 0x10325476); + H4 = unchecked((int) 0xc3d2e1f0); + H5 = unchecked((int) 0x76543210); + H6 = unchecked((int) 0xFEDCBA98); + H7 = unchecked((int) 0x89ABCDEF); + H8 = unchecked((int) 0x01234567); + H9 = unchecked((int) 0x3C2D1E0F); + + xOff = 0; + + for (int i = 0; i != X.Length; i++) + { + X[i] = 0; + } + } + + /* + * rotate int x left n bits. + */ + private int RL( + int x, + int n) + { + return (x << n) | (int)(((uint)x) >> (32 - n)); + } + + /* + * f1,f2,f3,f4,f5 are the basic RipeMD160 functions. + */ + + /* + * rounds 0-15 + */ + private int F1(int x, int y, int z) + { + return x ^ y ^ z; + } + + /* + * rounds 16-31 + */ + private int F2(int x, int y, int z) + { + return (x & y) | (~ x & z); + } + + /* + * rounds 32-47 + */ + private int F3(int x, int y, int z) + { + return (x | ~ y) ^ z; + } + + /* + * rounds 48-63 + */ + private int F4(int x, int y, int z) + { + return (x & z) | (y & ~ z); + } + + /* + * rounds 64-79 + */ + private int F5(int x, int y, int z) + { + return x ^ (y | ~z); + } + + internal override void ProcessBlock() + { + int a, aa; + int b, bb; + int c, cc; + int d, dd; + int e, ee; + int t; + + a = H0; + b = H1; + c = H2; + d = H3; + e = H4; + aa = H5; + bb = H6; + cc = H7; + dd = H8; + ee = H9; + + // + // Rounds 1 - 16 + // + // left + a = RL(a + F1(b, c, d) + X[0], 11) + e; c = RL(c, 10); + e = RL(e + F1(a, b, c) + X[1], 14) + d; b = RL(b, 10); + d = RL(d + F1(e, a, b) + X[2], 15) + c; a = RL(a, 10); + c = RL(c + F1(d, e, a) + X[3], 12) + b; e = RL(e, 10); + b = RL(b + F1(c, d, e) + X[4], 5) + a; d = RL(d, 10); + a = RL(a + F1(b, c, d) + X[5], 8) + e; c = RL(c, 10); + e = RL(e + F1(a, b, c) + X[6], 7) + d; b = RL(b, 10); + d = RL(d + F1(e, a, b) + X[7], 9) + c; a = RL(a, 10); + c = RL(c + F1(d, e, a) + X[8], 11) + b; e = RL(e, 10); + b = RL(b + F1(c, d, e) + X[9], 13) + a; d = RL(d, 10); + a = RL(a + F1(b, c, d) + X[10], 14) + e; c = RL(c, 10); + e = RL(e + F1(a, b, c) + X[11], 15) + d; b = RL(b, 10); + d = RL(d + F1(e, a, b) + X[12], 6) + c; a = RL(a, 10); + c = RL(c + F1(d, e, a) + X[13], 7) + b; e = RL(e, 10); + b = RL(b + F1(c, d, e) + X[14], 9) + a; d = RL(d, 10); + a = RL(a + F1(b, c, d) + X[15], 8) + e; c = RL(c, 10); + + // right + aa = RL(aa + F5(bb, cc, dd) + X[5] + unchecked((int)0x50a28be6), 8) + ee; cc = RL(cc, 10); + ee = RL(ee + F5(aa, bb, cc) + X[14] + unchecked((int)0x50a28be6), 9) + dd; bb = RL(bb, 10); + dd = RL(dd + F5(ee, aa, bb) + X[7] + unchecked((int)0x50a28be6), 9) + cc; aa = RL(aa, 10); + cc = RL(cc + F5(dd, ee, aa) + X[0] + unchecked((int)0x50a28be6), 11) + bb; ee = RL(ee, 10); + bb = RL(bb + F5(cc, dd, ee) + X[9] + unchecked((int)0x50a28be6), 13) + aa; dd = RL(dd, 10); + aa = RL(aa + F5(bb, cc, dd) + X[2] + unchecked((int)0x50a28be6), 15) + ee; cc = RL(cc, 10); + ee = RL(ee + F5(aa, bb, cc) + X[11] + unchecked((int)0x50a28be6), 15) + dd; bb = RL(bb, 10); + dd = RL(dd + F5(ee, aa, bb) + X[4] + unchecked((int)0x50a28be6), 5) + cc; aa = RL(aa, 10); + cc = RL(cc + F5(dd, ee, aa) + X[13] + unchecked((int)0x50a28be6), 7) + bb; ee = RL(ee, 10); + bb = RL(bb + F5(cc, dd, ee) + X[6] + unchecked((int)0x50a28be6), 7) + aa; dd = RL(dd, 10); + aa = RL(aa + F5(bb, cc, dd) + X[15] + unchecked((int)0x50a28be6), 8) + ee; cc = RL(cc, 10); + ee = RL(ee + F5(aa, bb, cc) + X[8] + unchecked((int)0x50a28be6), 11) + dd; bb = RL(bb, 10); + dd = RL(dd + F5(ee, aa, bb) + X[1] + unchecked((int)0x50a28be6), 14) + cc; aa = RL(aa, 10); + cc = RL(cc + F5(dd, ee, aa) + X[10] + unchecked((int)0x50a28be6), 14) + bb; ee = RL(ee, 10); + bb = RL(bb + F5(cc, dd, ee) + X[3] + unchecked((int)0x50a28be6), 12) + aa; dd = RL(dd, 10); + aa = RL(aa + F5(bb, cc, dd) + X[12] + unchecked((int)0x50a28be6), 6) + ee; cc = RL(cc, 10); + + t = a; a = aa; aa = t; + // + // Rounds 16-31 + // + // left + e = RL(e + F2(a, b, c) + X[7] + unchecked((int)0x5a827999), 7) + d; b = RL(b, 10); + d = RL(d + F2(e, a, b) + X[4] + unchecked((int)0x5a827999), 6) + c; a = RL(a, 10); + c = RL(c + F2(d, e, a) + X[13] + unchecked((int)0x5a827999), 8) + b; e = RL(e, 10); + b = RL(b + F2(c, d, e) + X[1] + unchecked((int)0x5a827999), 13) + a; d = RL(d, 10); + a = RL(a + F2(b, c, d) + X[10] + unchecked((int)0x5a827999), 11) + e; c = RL(c, 10); + e = RL(e + F2(a, b, c) + X[6] + unchecked((int)0x5a827999), 9) + d; b = RL(b, 10); + d = RL(d + F2(e, a, b) + X[15] + unchecked((int)0x5a827999), 7) + c; a = RL(a, 10); + c = RL(c + F2(d, e, a) + X[3] + unchecked((int)0x5a827999), 15) + b; e = RL(e, 10); + b = RL(b + F2(c, d, e) + X[12] + unchecked((int)0x5a827999), 7) + a; d = RL(d, 10); + a = RL(a + F2(b, c, d) + X[0] + unchecked((int)0x5a827999), 12) + e; c = RL(c, 10); + e = RL(e + F2(a, b, c) + X[9] + unchecked((int)0x5a827999), 15) + d; b = RL(b, 10); + d = RL(d + F2(e, a, b) + X[5] + unchecked((int)0x5a827999), 9) + c; a = RL(a, 10); + c = RL(c + F2(d, e, a) + X[2] + unchecked((int)0x5a827999), 11) + b; e = RL(e, 10); + b = RL(b + F2(c, d, e) + X[14] + unchecked((int)0x5a827999), 7) + a; d = RL(d, 10); + a = RL(a + F2(b, c, d) + X[11] + unchecked((int)0x5a827999), 13) + e; c = RL(c, 10); + e = RL(e + F2(a, b, c) + X[8] + unchecked((int)0x5a827999), 12) + d; b = RL(b, 10); + + // right + ee = RL(ee + F4(aa, bb, cc) + X[6] + unchecked((int)0x5c4dd124), 9) + dd; bb = RL(bb, 10); + dd = RL(dd + F4(ee, aa, bb) + X[11] + unchecked((int)0x5c4dd124), 13) + cc; aa = RL(aa, 10); + cc = RL(cc + F4(dd, ee, aa) + X[3] + unchecked((int)0x5c4dd124), 15) + bb; ee = RL(ee, 10); + bb = RL(bb + F4(cc, dd, ee) + X[7] + unchecked((int)0x5c4dd124), 7) + aa; dd = RL(dd, 10); + aa = RL(aa + F4(bb, cc, dd) + X[0] + unchecked((int)0x5c4dd124), 12) + ee; cc = RL(cc, 10); + ee = RL(ee + F4(aa, bb, cc) + X[13] + unchecked((int)0x5c4dd124), 8) + dd; bb = RL(bb, 10); + dd = RL(dd + F4(ee, aa, bb) + X[5] + unchecked((int)0x5c4dd124), 9) + cc; aa = RL(aa, 10); + cc = RL(cc + F4(dd, ee, aa) + X[10] + unchecked((int)0x5c4dd124), 11) + bb; ee = RL(ee, 10); + bb = RL(bb + F4(cc, dd, ee) + X[14] + unchecked((int)0x5c4dd124), 7) + aa; dd = RL(dd, 10); + aa = RL(aa + F4(bb, cc, dd) + X[15] + unchecked((int)0x5c4dd124), 7) + ee; cc = RL(cc, 10); + ee = RL(ee + F4(aa, bb, cc) + X[8] + unchecked((int)0x5c4dd124), 12) + dd; bb = RL(bb, 10); + dd = RL(dd + F4(ee, aa, bb) + X[12] + unchecked((int)0x5c4dd124), 7) + cc; aa = RL(aa, 10); + cc = RL(cc + F4(dd, ee, aa) + X[4] + unchecked((int)0x5c4dd124), 6) + bb; ee = RL(ee, 10); + bb = RL(bb + F4(cc, dd, ee) + X[9] + unchecked((int)0x5c4dd124), 15) + aa; dd = RL(dd, 10); + aa = RL(aa + F4(bb, cc, dd) + X[1] + unchecked((int)0x5c4dd124), 13) + ee; cc = RL(cc, 10); + ee = RL(ee + F4(aa, bb, cc) + X[2] + unchecked((int)0x5c4dd124), 11) + dd; bb = RL(bb, 10); + + t = b; b = bb; bb = t; + + // + // Rounds 32-47 + // + // left + d = RL(d + F3(e, a, b) + X[3] + unchecked((int)0x6ed9eba1), 11) + c; a = RL(a, 10); + c = RL(c + F3(d, e, a) + X[10] + unchecked((int)0x6ed9eba1), 13) + b; e = RL(e, 10); + b = RL(b + F3(c, d, e) + X[14] + unchecked((int)0x6ed9eba1), 6) + a; d = RL(d, 10); + a = RL(a + F3(b, c, d) + X[4] + unchecked((int)0x6ed9eba1), 7) + e; c = RL(c, 10); + e = RL(e + F3(a, b, c) + X[9] + unchecked((int)0x6ed9eba1), 14) + d; b = RL(b, 10); + d = RL(d + F3(e, a, b) + X[15] + unchecked((int)0x6ed9eba1), 9) + c; a = RL(a, 10); + c = RL(c + F3(d, e, a) + X[8] + unchecked((int)0x6ed9eba1), 13) + b; e = RL(e, 10); + b = RL(b + F3(c, d, e) + X[1] + unchecked((int)0x6ed9eba1), 15) + a; d = RL(d, 10); + a = RL(a + F3(b, c, d) + X[2] + unchecked((int)0x6ed9eba1), 14) + e; c = RL(c, 10); + e = RL(e + F3(a, b, c) + X[7] + unchecked((int)0x6ed9eba1), 8) + d; b = RL(b, 10); + d = RL(d + F3(e, a, b) + X[0] + unchecked((int)0x6ed9eba1), 13) + c; a = RL(a, 10); + c = RL(c + F3(d, e, a) + X[6] + unchecked((int)0x6ed9eba1), 6) + b; e = RL(e, 10); + b = RL(b + F3(c, d, e) + X[13] + unchecked((int)0x6ed9eba1), 5) + a; d = RL(d, 10); + a = RL(a + F3(b, c, d) + X[11] + unchecked((int)0x6ed9eba1), 12) + e; c = RL(c, 10); + e = RL(e + F3(a, b, c) + X[5] + unchecked((int)0x6ed9eba1), 7) + d; b = RL(b, 10); + d = RL(d + F3(e, a, b) + X[12] + unchecked((int)0x6ed9eba1), 5) + c; a = RL(a, 10); + + // right + dd = RL(dd + F3(ee, aa, bb) + X[15] + unchecked((int)0x6d703ef3), 9) + cc; aa = RL(aa, 10); + cc = RL(cc + F3(dd, ee, aa) + X[5] + unchecked((int)0x6d703ef3), 7) + bb; ee = RL(ee, 10); + bb = RL(bb + F3(cc, dd, ee) + X[1] + unchecked((int)0x6d703ef3), 15) + aa; dd = RL(dd, 10); + aa = RL(aa + F3(bb, cc, dd) + X[3] + unchecked((int)0x6d703ef3), 11) + ee; cc = RL(cc, 10); + ee = RL(ee + F3(aa, bb, cc) + X[7] + unchecked((int)0x6d703ef3), 8) + dd; bb = RL(bb, 10); + dd = RL(dd + F3(ee, aa, bb) + X[14] + unchecked((int)0x6d703ef3), 6) + cc; aa = RL(aa, 10); + cc = RL(cc + F3(dd, ee, aa) + X[6] + unchecked((int)0x6d703ef3), 6) + bb; ee = RL(ee, 10); + bb = RL(bb + F3(cc, dd, ee) + X[9] + unchecked((int)0x6d703ef3), 14) + aa; dd = RL(dd, 10); + aa = RL(aa + F3(bb, cc, dd) + X[11] + unchecked((int)0x6d703ef3), 12) + ee; cc = RL(cc, 10); + ee = RL(ee + F3(aa, bb, cc) + X[8] + unchecked((int)0x6d703ef3), 13) + dd; bb = RL(bb, 10); + dd = RL(dd + F3(ee, aa, bb) + X[12] + unchecked((int)0x6d703ef3), 5) + cc; aa = RL(aa, 10); + cc = RL(cc + F3(dd, ee, aa) + X[2] + unchecked((int)0x6d703ef3), 14) + bb; ee = RL(ee, 10); + bb = RL(bb + F3(cc, dd, ee) + X[10] + unchecked((int)0x6d703ef3), 13) + aa; dd = RL(dd, 10); + aa = RL(aa + F3(bb, cc, dd) + X[0] + unchecked((int)0x6d703ef3), 13) + ee; cc = RL(cc, 10); + ee = RL(ee + F3(aa, bb, cc) + X[4] + unchecked((int)0x6d703ef3), 7) + dd; bb = RL(bb, 10); + dd = RL(dd + F3(ee, aa, bb) + X[13] + unchecked((int)0x6d703ef3), 5) + cc; aa = RL(aa, 10); + + t = c; c = cc; cc = t; + + // + // Rounds 48-63 + // + // left + c = RL(c + F4(d, e, a) + X[1] + unchecked((int)0x8f1bbcdc), 11) + b; e = RL(e, 10); + b = RL(b + F4(c, d, e) + X[9] + unchecked((int)0x8f1bbcdc), 12) + a; d = RL(d, 10); + a = RL(a + F4(b, c, d) + X[11] + unchecked((int)0x8f1bbcdc), 14) + e; c = RL(c, 10); + e = RL(e + F4(a, b, c) + X[10] + unchecked((int)0x8f1bbcdc), 15) + d; b = RL(b, 10); + d = RL(d + F4(e, a, b) + X[0] + unchecked((int)0x8f1bbcdc), 14) + c; a = RL(a, 10); + c = RL(c + F4(d, e, a) + X[8] + unchecked((int)0x8f1bbcdc), 15) + b; e = RL(e, 10); + b = RL(b + F4(c, d, e) + X[12] + unchecked((int)0x8f1bbcdc), 9) + a; d = RL(d, 10); + a = RL(a + F4(b, c, d) + X[4] + unchecked((int)0x8f1bbcdc), 8) + e; c = RL(c, 10); + e = RL(e + F4(a, b, c) + X[13] + unchecked((int)0x8f1bbcdc), 9) + d; b = RL(b, 10); + d = RL(d + F4(e, a, b) + X[3] + unchecked((int)0x8f1bbcdc), 14) + c; a = RL(a, 10); + c = RL(c + F4(d, e, a) + X[7] + unchecked((int)0x8f1bbcdc), 5) + b; e = RL(e, 10); + b = RL(b + F4(c, d, e) + X[15] + unchecked((int)0x8f1bbcdc), 6) + a; d = RL(d, 10); + a = RL(a + F4(b, c, d) + X[14] + unchecked((int)0x8f1bbcdc), 8) + e; c = RL(c, 10); + e = RL(e + F4(a, b, c) + X[5] + unchecked((int)0x8f1bbcdc), 6) + d; b = RL(b, 10); + d = RL(d + F4(e, a, b) + X[6] + unchecked((int)0x8f1bbcdc), 5) + c; a = RL(a, 10); + c = RL(c + F4(d, e, a) + X[2] + unchecked((int)0x8f1bbcdc), 12) + b; e = RL(e, 10); + + // right + cc = RL(cc + F2(dd, ee, aa) + X[8] + unchecked((int)0x7a6d76e9), 15) + bb; ee = RL(ee, 10); + bb = RL(bb + F2(cc, dd, ee) + X[6] + unchecked((int)0x7a6d76e9), 5) + aa; dd = RL(dd, 10); + aa = RL(aa + F2(bb, cc, dd) + X[4] + unchecked((int)0x7a6d76e9), 8) + ee; cc = RL(cc, 10); + ee = RL(ee + F2(aa, bb, cc) + X[1] + unchecked((int)0x7a6d76e9), 11) + dd; bb = RL(bb, 10); + dd = RL(dd + F2(ee, aa, bb) + X[3] + unchecked((int)0x7a6d76e9), 14) + cc; aa = RL(aa, 10); + cc = RL(cc + F2(dd, ee, aa) + X[11] + unchecked((int)0x7a6d76e9), 14) + bb; ee = RL(ee, 10); + bb = RL(bb + F2(cc, dd, ee) + X[15] + unchecked((int)0x7a6d76e9), 6) + aa; dd = RL(dd, 10); + aa = RL(aa + F2(bb, cc, dd) + X[0] + unchecked((int)0x7a6d76e9), 14) + ee; cc = RL(cc, 10); + ee = RL(ee + F2(aa, bb, cc) + X[5] + unchecked((int)0x7a6d76e9), 6) + dd; bb = RL(bb, 10); + dd = RL(dd + F2(ee, aa, bb) + X[12] + unchecked((int)0x7a6d76e9), 9) + cc; aa = RL(aa, 10); + cc = RL(cc + F2(dd, ee, aa) + X[2] + unchecked((int)0x7a6d76e9), 12) + bb; ee = RL(ee, 10); + bb = RL(bb + F2(cc, dd, ee) + X[13] + unchecked((int)0x7a6d76e9), 9) + aa; dd = RL(dd, 10); + aa = RL(aa + F2(bb, cc, dd) + X[9] + unchecked((int)0x7a6d76e9), 12) + ee; cc = RL(cc, 10); + ee = RL(ee + F2(aa, bb, cc) + X[7] + unchecked((int)0x7a6d76e9), 5) + dd; bb = RL(bb, 10); + dd = RL(dd + F2(ee, aa, bb) + X[10] + unchecked((int)0x7a6d76e9), 15) + cc; aa = RL(aa, 10); + cc = RL(cc + F2(dd, ee, aa) + X[14] + unchecked((int)0x7a6d76e9), 8) + bb; ee = RL(ee, 10); + + t = d; d = dd; dd = t; + + // + // Rounds 64-79 + // + // left + b = RL(b + F5(c, d, e) + X[4] + unchecked((int)0xa953fd4e), 9) + a; d = RL(d, 10); + a = RL(a + F5(b, c, d) + X[0] + unchecked((int)0xa953fd4e), 15) + e; c = RL(c, 10); + e = RL(e + F5(a, b, c) + X[5] + unchecked((int)0xa953fd4e), 5) + d; b = RL(b, 10); + d = RL(d + F5(e, a, b) + X[9] + unchecked((int)0xa953fd4e), 11) + c; a = RL(a, 10); + c = RL(c + F5(d, e, a) + X[7] + unchecked((int)0xa953fd4e), 6) + b; e = RL(e, 10); + b = RL(b + F5(c, d, e) + X[12] + unchecked((int)0xa953fd4e), 8) + a; d = RL(d, 10); + a = RL(a + F5(b, c, d) + X[2] + unchecked((int)0xa953fd4e), 13) + e; c = RL(c, 10); + e = RL(e + F5(a, b, c) + X[10] + unchecked((int)0xa953fd4e), 12) + d; b = RL(b, 10); + d = RL(d + F5(e, a, b) + X[14] + unchecked((int)0xa953fd4e), 5) + c; a = RL(a, 10); + c = RL(c + F5(d, e, a) + X[1] + unchecked((int)0xa953fd4e), 12) + b; e = RL(e, 10); + b = RL(b + F5(c, d, e) + X[3] + unchecked((int)0xa953fd4e), 13) + a; d = RL(d, 10); + a = RL(a + F5(b, c, d) + X[8] + unchecked((int)0xa953fd4e), 14) + e; c = RL(c, 10); + e = RL(e + F5(a, b, c) + X[11] + unchecked((int)0xa953fd4e), 11) + d; b = RL(b, 10); + d = RL(d + F5(e, a, b) + X[6] + unchecked((int)0xa953fd4e), 8) + c; a = RL(a, 10); + c = RL(c + F5(d, e, a) + X[15] + unchecked((int)0xa953fd4e), 5) + b; e = RL(e, 10); + b = RL(b + F5(c, d, e) + X[13] + unchecked((int)0xa953fd4e), 6) + a; d = RL(d, 10); + + // right + bb = RL(bb + F1(cc, dd, ee) + X[12], 8) + aa; dd = RL(dd, 10); + aa = RL(aa + F1(bb, cc, dd) + X[15], 5) + ee; cc = RL(cc, 10); + ee = RL(ee + F1(aa, bb, cc) + X[10], 12) + dd; bb = RL(bb, 10); + dd = RL(dd + F1(ee, aa, bb) + X[4], 9) + cc; aa = RL(aa, 10); + cc = RL(cc + F1(dd, ee, aa) + X[1], 12) + bb; ee = RL(ee, 10); + bb = RL(bb + F1(cc, dd, ee) + X[5], 5) + aa; dd = RL(dd, 10); + aa = RL(aa + F1(bb, cc, dd) + X[8], 14) + ee; cc = RL(cc, 10); + ee = RL(ee + F1(aa, bb, cc) + X[7], 6) + dd; bb = RL(bb, 10); + dd = RL(dd + F1(ee, aa, bb) + X[6], 8) + cc; aa = RL(aa, 10); + cc = RL(cc + F1(dd, ee, aa) + X[2], 13) + bb; ee = RL(ee, 10); + bb = RL(bb + F1(cc, dd, ee) + X[13], 6) + aa; dd = RL(dd, 10); + aa = RL(aa + F1(bb, cc, dd) + X[14], 5) + ee; cc = RL(cc, 10); + ee = RL(ee + F1(aa, bb, cc) + X[0], 15) + dd; bb = RL(bb, 10); + dd = RL(dd + F1(ee, aa, bb) + X[3], 13) + cc; aa = RL(aa, 10); + cc = RL(cc + F1(dd, ee, aa) + X[9], 11) + bb; ee = RL(ee, 10); + bb = RL(bb + F1(cc, dd, ee) + X[11], 11) + aa; dd = RL(dd, 10); + + // + // do (e, ee) swap as part of assignment. + // + + H0 += a; + H1 += b; + H2 += c; + H3 += d; + H4 += ee; + H5 += aa; + H6 += bb; + H7 += cc; + H8 += dd; + H9 += e; + + // + // reset the offset and clean out the word buffer. + // + xOff = 0; + for (int i = 0; i != X.Length; i++) + { + X[i] = 0; + } + } + + public override IMemoable Copy() + { + return new RipeMD320Digest(this); + } + + public override void Reset(IMemoable other) + { + RipeMD320Digest d = (RipeMD320Digest)other; + + CopyIn(d); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD320Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD320Digest.cs.meta new file mode 100644 index 000000000..af7eb410f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/RipeMD320Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d7606c4169527a4bb35054b933733a3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SHA3Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SHA3Digest.cs new file mode 100644 index 000000000..7b134099d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SHA3Digest.cs @@ -0,0 +1,98 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /// + /// Implementation of SHA-3 based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + /// + /// + /// Following the naming conventions used in the C source code to enable easy review of the implementation. + /// + public class Sha3Digest + : KeccakDigest + { + private static int CheckBitLength(int bitLength) + { + switch (bitLength) + { + case 224: + case 256: + case 384: + case 512: + return bitLength; + default: + throw new ArgumentException(bitLength + " not supported for SHA-3", "bitLength"); + } + } + + public Sha3Digest() + : this(256) + { + } + + public Sha3Digest(int bitLength) + : base(CheckBitLength(bitLength)) + { + } + + public Sha3Digest(Sha3Digest source) + : base(source) + { + } + + public override string AlgorithmName + { + get { return "SHA3-" + fixedOutputLength; } + } + + public override int DoFinal(byte[] output, int outOff) + { + AbsorbBits(0x02, 2); + + return base.DoFinal(output, outOff); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + AbsorbBits(0x02, 2); + + return base.DoFinal(output); + } +#endif + + /* + * TODO Possible API change to support partial-byte suffixes. + */ + protected override int DoFinal(byte[] output, int outOff, byte partialByte, int partialBits) + { + if (partialBits < 0 || partialBits > 7) + throw new ArgumentException("must be in the range [0,7]", "partialBits"); + + int finalInput = (partialByte & ((1 << partialBits) - 1)) | (0x02 << partialBits); + Debug.Assert(finalInput >= 0); + int finalBits = partialBits + 2; + + if (finalBits >= 8) + { + Absorb((byte)finalInput); + finalBits -= 8; + finalInput >>= 8; + } + + return base.DoFinal(output, outOff, (byte)finalInput, finalBits); + } + + public override IMemoable Copy() + { + return new Sha3Digest(this); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SHA3Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SHA3Digest.cs.meta new file mode 100644 index 000000000..3f12c8df6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SHA3Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 21c525f413c2cbb458589e2c761f3c7e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SM3Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SM3Digest.cs new file mode 100644 index 000000000..5d1cf15ff --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SM3Digest.cs @@ -0,0 +1,344 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + + /// + /// Implementation of Chinese SM3 digest as described at + /// http://tools.ietf.org/html/draft-shen-sm3-hash-00 + /// and at .... ( Chinese PDF ) + /// + /// + /// The specification says "process a bit stream", + /// but this is written to process bytes in blocks of 4, + /// meaning this will process 32-bit word groups. + /// But so do also most other digest specifications, + /// including the SHA-256 which was a origin for + /// this specification. + /// + public class SM3Digest + : GeneralDigest + { + private const int DIGEST_LENGTH = 32; // bytes + private const int BLOCK_SIZE = 64 / 4; // of 32 bit ints (16 ints) + + private uint[] V = new uint[DIGEST_LENGTH / 4]; // in 32 bit ints (8 ints) + private uint[] inwords = new uint[BLOCK_SIZE]; + private int xOff; + + // Work-bufs used within processBlock() + private uint[] W = new uint[68]; + + // Round constant T for processBlock() which is 32 bit integer rolled left up to (63 MOD 32) bit positions. + private static readonly uint[] T = new uint[64]; + + static SM3Digest() + { + for (int i = 0; i < 16; ++i) + { + uint t = 0x79CC4519; + T[i] = (t << i) | (t >> (32 - i)); + } + for (int i = 16; i < 64; ++i) + { + int n = i % 32; + uint t = 0x7A879D8A; + T[i] = (t << n) | (t >> (32 - n)); + } + } + + + /// + /// Standard constructor + /// + public SM3Digest() + { + Reset(); + } + + /// + /// Copy constructor. This will copy the state of the provided + /// message digest. + /// + public SM3Digest(SM3Digest t) + : base(t) + { + CopyIn(t); + } + + private void CopyIn(SM3Digest t) + { + Array.Copy(t.V, 0, this.V, 0, this.V.Length); + Array.Copy(t.inwords, 0, this.inwords, 0, this.inwords.Length); + xOff = t.xOff; + } + + public override string AlgorithmName + { + get { return "SM3"; } + } + + public override int GetDigestSize() + { + return DIGEST_LENGTH; + } + + public override IMemoable Copy() + { + return new SM3Digest(this); + } + + public override void Reset(IMemoable other) + { + SM3Digest d = (SM3Digest)other; + + base.CopyIn(d); + CopyIn(d); + } + + /// + /// reset the chaining variables + /// + public override void Reset() + { + base.Reset(); + + this.V[0] = 0x7380166F; + this.V[1] = 0x4914B2B9; + this.V[2] = 0x172442D7; + this.V[3] = 0xDA8A0600; + this.V[4] = 0xA96F30BC; + this.V[5] = 0x163138AA; + this.V[6] = 0xE38DEE4D; + this.V[7] = 0xB0FB0E4E; + + this.xOff = 0; + } + + public override int DoFinal(byte[] output, int outOff) + { + Finish(); + + Pack.UInt32_To_BE(V, output, outOff); + + Reset(); + + return DIGEST_LENGTH; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + Finish(); + + Pack.UInt32_To_BE(V, output); + + Reset(); + + return DIGEST_LENGTH; + } +#endif + + internal override void ProcessWord(byte[] input, int inOff) + { + inwords[xOff++] = Pack.BE_To_UInt32(input, inOff); + + if (this.xOff >= 16) + { + ProcessBlock(); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal override void ProcessWord(ReadOnlySpan word) + { + inwords[xOff++] = Pack.BE_To_UInt32(word); + + if (this.xOff >= 16) + { + ProcessBlock(); + } + } +#endif + + internal override void ProcessLength(long bitLength) + { + if (this.xOff > (BLOCK_SIZE - 2)) + { + // xOff == 15 --> can't fit the 64 bit length field at tail.. + this.inwords[this.xOff] = 0; // fill with zero + ++this.xOff; + + ProcessBlock(); + } + // Fill with zero words, until reach 2nd to last slot + while (this.xOff < (BLOCK_SIZE - 2)) + { + this.inwords[this.xOff] = 0; + ++this.xOff; + } + + // Store input data length in BITS + this.inwords[this.xOff++] = (uint)(bitLength >> 32); + this.inwords[this.xOff++] = (uint)(bitLength); + } + + /* + + 3.4.2. Constants + + + Tj = 79cc4519 when 0 < = j < = 15 + Tj = 7a879d8a when 16 < = j < = 63 + + 3.4.3. Boolean function + + + FFj(X;Y;Z) = X XOR Y XOR Z when 0 < = j < = 15 + = (X AND Y) OR (X AND Z) OR (Y AND Z) when 16 < = j < = 63 + + GGj(X;Y;Z) = X XOR Y XOR Z when 0 < = j < = 15 + = (X AND Y) OR (NOT X AND Z) when 16 < = j < = 63 + + The X, Y, Z in the fomular are words!GBP + + 3.4.4. Permutation function + + + P0(X) = X XOR (X <<< 9) XOR (X <<< 17) ## ROLL, not SHIFT + P1(X) = X XOR (X <<< 15) XOR (X <<< 23) ## ROLL, not SHIFT + + The X in the fomular are a word. + + ---------- + + Each ROLL converted to Java expression: + + ROLL 9 : ((x << 9) | (x >> (32-9)))) + ROLL 17 : ((x << 17) | (x >> (32-17))) + ROLL 15 : ((x << 15) | (x >> (32-15))) + ROLL 23 : ((x << 23) | (x >> (32-23))) + + */ + + private uint P0(uint x) + { + uint r9 = ((x << 9) | (x >> (32 - 9))); + uint r17 = ((x << 17) | (x >> (32 - 17))); + return (x ^ r9 ^ r17); + } + + private uint P1(uint x) + { + uint r15 = ((x << 15) | (x >> (32 - 15))); + uint r23 = ((x << 23) | (x >> (32 - 23))); + return (x ^ r15 ^ r23); + } + + private uint FF0(uint x, uint y, uint z) + { + return (x ^ y ^ z); + } + + private uint FF1(uint x, uint y, uint z) + { + return ((x & y) | (x & z) | (y & z)); + } + + private uint GG0(uint x, uint y, uint z) + { + return (x ^ y ^ z); + } + + private uint GG1(uint x, uint y, uint z) + { + return ((x & y) | ((~x) & z)); + } + + + internal override void ProcessBlock() + { + for (int j = 0; j < 16; ++j) + { + this.W[j] = this.inwords[j]; + } + for (int j = 16; j < 68; ++j) + { + uint wj3 = this.W[j - 3]; + uint r15 = ((wj3 << 15) | (wj3 >> (32 - 15))); + uint wj13 = this.W[j - 13]; + uint r7 = ((wj13 << 7) | (wj13 >> (32 - 7))); + this.W[j] = P1(this.W[j - 16] ^ this.W[j - 9] ^ r15) ^ r7 ^ this.W[j - 6]; + } + + uint A = this.V[0]; + uint B = this.V[1]; + uint C = this.V[2]; + uint D = this.V[3]; + uint E = this.V[4]; + uint F = this.V[5]; + uint G = this.V[6]; + uint H = this.V[7]; + + + for (int j = 0; j < 16; ++j) + { + uint a12 = ((A << 12) | (A >> (32 - 12))); + uint s1_ = a12 + E + T[j]; + uint SS1 = ((s1_ << 7) | (s1_ >> (32 - 7))); + uint SS2 = SS1 ^ a12; + uint Wj = W[j]; + uint W1j = Wj ^ W[j + 4]; + uint TT1 = FF0(A, B, C) + D + SS2 + W1j; + uint TT2 = GG0(E, F, G) + H + SS1 + Wj; + D = C; + C = ((B << 9) | (B >> (32 - 9))); + B = A; + A = TT1; + H = G; + G = ((F << 19) | (F >> (32 - 19))); + F = E; + E = P0(TT2); + } + + // Different FF,GG functions on rounds 16..63 + for (int j = 16; j < 64; ++j) + { + uint a12 = ((A << 12) | (A >> (32 - 12))); + uint s1_ = a12 + E + T[j]; + uint SS1 = ((s1_ << 7) | (s1_ >> (32 - 7))); + uint SS2 = SS1 ^ a12; + uint Wj = W[j]; + uint W1j = Wj ^ W[j + 4]; + uint TT1 = FF1(A, B, C) + D + SS2 + W1j; + uint TT2 = GG1(E, F, G) + H + SS1 + Wj; + D = C; + C = ((B << 9) | (B >> (32 - 9))); + B = A; + A = TT1; + H = G; + G = ((F << 19) | (F >> (32 - 19))); + F = E; + E = P0(TT2); + } + + this.V[0] ^= A; + this.V[1] ^= B; + this.V[2] ^= C; + this.V[3] ^= D; + this.V[4] ^= E; + this.V[5] ^= F; + this.V[6] ^= G; + this.V[7] ^= H; + + this.xOff = 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SM3Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SM3Digest.cs.meta new file mode 100644 index 000000000..803b75385 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SM3Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3d6e7485ae18a344c947334b9afc7a39 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha1Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha1Digest.cs new file mode 100644 index 000000000..773f743e1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha1Digest.cs @@ -0,0 +1,314 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + + /** + * implementation of SHA-1 as outlined in "Handbook of Applied Cryptography", pages 346 - 349. + * + * It is interesting to ponder why the, apart from the extra IV, the other difference here from MD5 + * is the "endianness" of the word processing! + */ + public class Sha1Digest + : GeneralDigest + { + private const int DigestLength = 20; + + private uint H1, H2, H3, H4, H5; + + private uint[] X = new uint[80]; + private int xOff; + + public Sha1Digest() + { + Reset(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public Sha1Digest(Sha1Digest t) + : base(t) + { + CopyIn(t); + } + + private void CopyIn(Sha1Digest t) + { + base.CopyIn(t); + + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + H4 = t.H4; + H5 = t.H5; + + Array.Copy(t.X, 0, X, 0, t.X.Length); + xOff = t.xOff; + } + + public override string AlgorithmName + { + get { return "SHA-1"; } + } + + public override int GetDigestSize() + { + return DigestLength; + } + + internal override void ProcessWord(byte[] input, int inOff) + { + X[xOff] = Pack.BE_To_UInt32(input, inOff); + + if (++xOff == 16) + { + ProcessBlock(); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal override void ProcessWord(ReadOnlySpan word) + { + X[xOff] = Pack.BE_To_UInt32(word); + + if (++xOff == 16) + { + ProcessBlock(); + } + } +#endif + + internal override void ProcessLength(long bitLength) + { + if (xOff > 14) + { + ProcessBlock(); + } + + X[14] = (uint)((ulong)bitLength >> 32); + X[15] = (uint)((ulong)bitLength); + } + + public override int DoFinal( + byte[] output, + int outOff) + { + Finish(); + + Pack.UInt32_To_BE(H1, output, outOff); + Pack.UInt32_To_BE(H2, output, outOff + 4); + Pack.UInt32_To_BE(H3, output, outOff + 8); + Pack.UInt32_To_BE(H4, output, outOff + 12); + Pack.UInt32_To_BE(H5, output, outOff + 16); + + Reset(); + + return DigestLength; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + Finish(); + + Pack.UInt32_To_BE(H1, output); + Pack.UInt32_To_BE(H2, output[4..]); + Pack.UInt32_To_BE(H3, output[8..]); + Pack.UInt32_To_BE(H4, output[12..]); + Pack.UInt32_To_BE(H5, output[16..]); + + Reset(); + + return DigestLength; + } +#endif + + /** + * reset the chaining variables + */ + public override void Reset() + { + base.Reset(); + + H1 = 0x67452301; + H2 = 0xefcdab89; + H3 = 0x98badcfe; + H4 = 0x10325476; + H5 = 0xc3d2e1f0; + + xOff = 0; + Array.Clear(X, 0, X.Length); + } + + // + // Additive constants + // + private const uint Y1 = 0x5a827999; + private const uint Y2 = 0x6ed9eba1; + private const uint Y3 = 0x8f1bbcdc; + private const uint Y4 = 0xca62c1d6; + + private static uint F(uint u, uint v, uint w) + { + return (u & v) | (~u & w); + } + + private static uint H(uint u, uint v, uint w) + { + return u ^ v ^ w; + } + + private static uint G(uint u, uint v, uint w) + { + return (u & v) | (u & w) | (v & w); + } + + internal override void ProcessBlock() + { + // + // expand 16 word block into 80 word block. + // + for (int i = 16; i < 80; i++) + { + uint t = X[i - 3] ^ X[i - 8] ^ X[i - 14] ^ X[i - 16]; + X[i] = t << 1 | t >> 31; + } + + // + // set up working variables. + // + uint A = H1; + uint B = H2; + uint C = H3; + uint D = H4; + uint E = H5; + + // + // round 1 + // + int idx = 0; + + for (int j = 0; j < 4; j++) + { + // E = rotateLeft(A, 5) + F(B, C, D) + E + X[idx++] + Y1 + // B = rotateLeft(B, 30) + E += (A << 5 | (A >> 27)) + F(B, C, D) + X[idx++] + Y1; + B = B << 30 | (B >> 2); + + D += (E << 5 | (E >> 27)) + F(A, B, C) + X[idx++] + Y1; + A = A << 30 | (A >> 2); + + C += (D << 5 | (D >> 27)) + F(E, A, B) + X[idx++] + Y1; + E = E << 30 | (E >> 2); + + B += (C << 5 | (C >> 27)) + F(D, E, A) + X[idx++] + Y1; + D = D << 30 | (D >> 2); + + A += (B << 5 | (B >> 27)) + F(C, D, E) + X[idx++] + Y1; + C = C << 30 | (C >> 2); + } + + // + // round 2 + // + for (int j = 0; j < 4; j++) + { + // E = rotateLeft(A, 5) + H(B, C, D) + E + X[idx++] + Y2 + // B = rotateLeft(B, 30) + E += (A << 5 | (A >> 27)) + H(B, C, D) + X[idx++] + Y2; + B = B << 30 | (B >> 2); + + D += (E << 5 | (E >> 27)) + H(A, B, C) + X[idx++] + Y2; + A = A << 30 | (A >> 2); + + C += (D << 5 | (D >> 27)) + H(E, A, B) + X[idx++] + Y2; + E = E << 30 | (E >> 2); + + B += (C << 5 | (C >> 27)) + H(D, E, A) + X[idx++] + Y2; + D = D << 30 | (D >> 2); + + A += (B << 5 | (B >> 27)) + H(C, D, E) + X[idx++] + Y2; + C = C << 30 | (C >> 2); + } + + // + // round 3 + // + for (int j = 0; j < 4; j++) + { + // E = rotateLeft(A, 5) + G(B, C, D) + E + X[idx++] + Y3 + // B = rotateLeft(B, 30) + E += (A << 5 | (A >> 27)) + G(B, C, D) + X[idx++] + Y3; + B = B << 30 | (B >> 2); + + D += (E << 5 | (E >> 27)) + G(A, B, C) + X[idx++] + Y3; + A = A << 30 | (A >> 2); + + C += (D << 5 | (D >> 27)) + G(E, A, B) + X[idx++] + Y3; + E = E << 30 | (E >> 2); + + B += (C << 5 | (C >> 27)) + G(D, E, A) + X[idx++] + Y3; + D = D << 30 | (D >> 2); + + A += (B << 5 | (B >> 27)) + G(C, D, E) + X[idx++] + Y3; + C = C << 30 | (C >> 2); + } + + // + // round 4 + // + for (int j = 0; j < 4; j++) + { + // E = rotateLeft(A, 5) + H(B, C, D) + E + X[idx++] + Y4 + // B = rotateLeft(B, 30) + E += (A << 5 | (A >> 27)) + H(B, C, D) + X[idx++] + Y4; + B = B << 30 | (B >> 2); + + D += (E << 5 | (E >> 27)) + H(A, B, C) + X[idx++] + Y4; + A = A << 30 | (A >> 2); + + C += (D << 5 | (D >> 27)) + H(E, A, B) + X[idx++] + Y4; + E = E << 30 | (E >> 2); + + B += (C << 5 | (C >> 27)) + H(D, E, A) + X[idx++] + Y4; + D = D << 30 | (D >> 2); + + A += (B << 5 | (B >> 27)) + H(C, D, E) + X[idx++] + Y4; + C = C << 30 | (C >> 2); + } + + H1 += A; + H2 += B; + H3 += C; + H4 += D; + H5 += E; + + // + // reset start of the buffer. + // + xOff = 0; + Array.Clear(X, 0, 16); + } + + public override IMemoable Copy() + { + return new Sha1Digest(this); + } + + public override void Reset(IMemoable other) + { + Sha1Digest d = (Sha1Digest)other; + + CopyIn(d); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha1Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha1Digest.cs.meta new file mode 100644 index 000000000..d081d7912 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha1Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7ef8d80a00e8bb34093e8e8925dcd039 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha224Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha224Digest.cs new file mode 100644 index 000000000..c9ee9445a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha224Digest.cs @@ -0,0 +1,319 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /** + * SHA-224 as described in RFC 3874 + *
+     *         block  word  digest
+     * SHA-1   512    32    160
+     * SHA-224 512    32    224
+     * SHA-256 512    32    256
+     * SHA-384 1024   64    384
+     * SHA-512 1024   64    512
+     * 
+ */ + public class Sha224Digest + : GeneralDigest + { + private const int DigestLength = 28; + + private uint H1, H2, H3, H4, H5, H6, H7, H8; + + private uint[] X = new uint[64]; + private int xOff; + + /** + * Standard constructor + */ + public Sha224Digest() + { + Reset(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public Sha224Digest( + Sha224Digest t) + : base(t) + { + CopyIn(t); + } + + private void CopyIn(Sha224Digest t) + { + base.CopyIn(t); + + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + H4 = t.H4; + H5 = t.H5; + H6 = t.H6; + H7 = t.H7; + H8 = t.H8; + + Array.Copy(t.X, 0, X, 0, t.X.Length); + xOff = t.xOff; + } + + public override string AlgorithmName + { + get { return "SHA-224"; } + } + + public override int GetDigestSize() + { + return DigestLength; + } + + internal override void ProcessWord(byte[] input, int inOff) + { + X[xOff] = Pack.BE_To_UInt32(input, inOff); + + if (++xOff == 16) + { + ProcessBlock(); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal override void ProcessWord(ReadOnlySpan word) + { + X[xOff] = Pack.BE_To_UInt32(word); + + if (++xOff == 16) + { + ProcessBlock(); + } + } +#endif + + internal override void ProcessLength( + long bitLength) + { + if (xOff > 14) + { + ProcessBlock(); + } + + X[14] = (uint)((ulong)bitLength >> 32); + X[15] = (uint)((ulong)bitLength); + } + + public override int DoFinal(byte[] output, int outOff) + { + Finish(); + + Pack.UInt32_To_BE(H1, output, outOff); + Pack.UInt32_To_BE(H2, output, outOff + 4); + Pack.UInt32_To_BE(H3, output, outOff + 8); + Pack.UInt32_To_BE(H4, output, outOff + 12); + Pack.UInt32_To_BE(H5, output, outOff + 16); + Pack.UInt32_To_BE(H6, output, outOff + 20); + Pack.UInt32_To_BE(H7, output, outOff + 24); + + Reset(); + + return DigestLength; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + Finish(); + + Pack.UInt32_To_BE(H1, output); + Pack.UInt32_To_BE(H2, output[4..]); + Pack.UInt32_To_BE(H3, output[8..]); + Pack.UInt32_To_BE(H4, output[12..]); + Pack.UInt32_To_BE(H5, output[16..]); + Pack.UInt32_To_BE(H6, output[20..]); + Pack.UInt32_To_BE(H7, output[24..]); + + Reset(); + + return DigestLength; + } +#endif + + /** + * reset the chaining variables + */ + public override void Reset() + { + base.Reset(); + + /* SHA-224 initial hash value + */ + H1 = 0xc1059ed8; + H2 = 0x367cd507; + H3 = 0x3070dd17; + H4 = 0xf70e5939; + H5 = 0xffc00b31; + H6 = 0x68581511; + H7 = 0x64f98fa7; + H8 = 0xbefa4fa4; + + xOff = 0; + Array.Clear(X, 0, X.Length); + } + + internal override void ProcessBlock() + { + // + // expand 16 word block into 64 word blocks. + // + for (int ti = 16; ti <= 63; ti++) + { + X[ti] = Theta1(X[ti - 2]) + X[ti - 7] + Theta0(X[ti - 15]) + X[ti - 16]; + } + + // + // set up working variables. + // + uint a = H1; + uint b = H2; + uint c = H3; + uint d = H4; + uint e = H5; + uint f = H6; + uint g = H7; + uint h = H8; + + int t = 0; + for(int i = 0; i < 8; i ++) + { + // t = 8 * i + h += Sum1(e) + Ch(e, f, g) + K[t] + X[t]; + d += h; + h += Sum0(a) + Maj(a, b, c); + ++t; + + // t = 8 * i + 1 + g += Sum1(d) + Ch(d, e, f) + K[t] + X[t]; + c += g; + g += Sum0(h) + Maj(h, a, b); + ++t; + + // t = 8 * i + 2 + f += Sum1(c) + Ch(c, d, e) + K[t] + X[t]; + b += f; + f += Sum0(g) + Maj(g, h, a); + ++t; + + // t = 8 * i + 3 + e += Sum1(b) + Ch(b, c, d) + K[t] + X[t]; + a += e; + e += Sum0(f) + Maj(f, g, h); + ++t; + + // t = 8 * i + 4 + d += Sum1(a) + Ch(a, b, c) + K[t] + X[t]; + h += d; + d += Sum0(e) + Maj(e, f, g); + ++t; + + // t = 8 * i + 5 + c += Sum1(h) + Ch(h, a, b) + K[t] + X[t]; + g += c; + c += Sum0(d) + Maj(d, e, f); + ++t; + + // t = 8 * i + 6 + b += Sum1(g) + Ch(g, h, a) + K[t] + X[t]; + f += b; + b += Sum0(c) + Maj(c, d, e); + ++t; + + // t = 8 * i + 7 + a += Sum1(f) + Ch(f, g, h) + K[t] + X[t]; + e += a; + a += Sum0(b) + Maj(b, c, d); + ++t; + } + + H1 += a; + H2 += b; + H3 += c; + H4 += d; + H5 += e; + H6 += f; + H7 += g; + H8 += h; + + // + // reset the offset and clean out the word buffer. + // + xOff = 0; + Array.Clear(X, 0, 16); + } + + /* SHA-224 functions */ + private static uint Ch(uint x, uint y, uint z) + { + return (x & y) ^ (~x & z); + } + + private static uint Maj(uint x, uint y, uint z) + { + return (x & y) ^ (x & z) ^ (y & z); + } + + private static uint Sum0(uint x) + { + return ((x >> 2) | (x << 30)) ^ ((x >> 13) | (x << 19)) ^ ((x >> 22) | (x << 10)); + } + + private static uint Sum1(uint x) + { + return ((x >> 6) | (x << 26)) ^ ((x >> 11) | (x << 21)) ^ ((x >> 25) | (x << 7)); + } + + private static uint Theta0(uint x) + { + return ((x >> 7) | (x << 25)) ^ ((x >> 18) | (x << 14)) ^ (x >> 3); + } + + private static uint Theta1(uint x) + { + return ((x >> 17) | (x << 15)) ^ ((x >> 19) | (x << 13)) ^ (x >> 10); + } + + /* SHA-224 Constants + * (represent the first 32 bits of the fractional parts of the + * cube roots of the first sixty-four prime numbers) + */ + internal static readonly uint[] K = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 + }; + + public override IMemoable Copy() + { + return new Sha224Digest(this); + } + + public override void Reset(IMemoable other) + { + Sha224Digest d = (Sha224Digest)other; + + CopyIn(d); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha224Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha224Digest.cs.meta new file mode 100644 index 000000000..fb39805af --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha224Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 030ee55485af2ee4985a31227e05de47 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha256Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha256Digest.cs new file mode 100644 index 000000000..dff9aa360 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha256Digest.cs @@ -0,0 +1,349 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /** + * Draft FIPS 180-2 implementation of SHA-256. Note: As this is + * based on a draft this implementation is subject to change. + * + *
+    *         block  word  digest
+    * SHA-1   512    32    160
+    * SHA-256 512    32    256
+    * SHA-384 1024   64    384
+    * SHA-512 1024   64    512
+    * 
+ */ + public class Sha256Digest + : GeneralDigest + { + private const int DigestLength = 32; + + private uint H1, H2, H3, H4, H5, H6, H7, H8; + private uint[] X = new uint[64]; + private int xOff; + + public Sha256Digest() + { + initHs(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public Sha256Digest(Sha256Digest t) : base(t) + { + CopyIn(t); + } + + private void CopyIn(Sha256Digest t) + { + base.CopyIn(t); + + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + H4 = t.H4; + H5 = t.H5; + H6 = t.H6; + H7 = t.H7; + H8 = t.H8; + + Array.Copy(t.X, 0, X, 0, t.X.Length); + xOff = t.xOff; + } + + public override string AlgorithmName + { + get { return "SHA-256"; } + } + + public override int GetDigestSize() + { + return DigestLength; + } + + internal override void ProcessWord(byte[] input, int inOff) + { + X[xOff] = Pack.BE_To_UInt32(input, inOff); + + if (++xOff == 16) + { + ProcessBlock(); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal override void ProcessWord(ReadOnlySpan word) + { + X[xOff] = Pack.BE_To_UInt32(word); + + if (++xOff == 16) + { + ProcessBlock(); + } + } +#endif + + internal override void ProcessLength( + long bitLength) + { + if (xOff > 14) + { + ProcessBlock(); + } + + X[14] = (uint)((ulong)bitLength >> 32); + X[15] = (uint)((ulong)bitLength); + } + + public override int DoFinal(byte[] output, int outOff) + { + Finish(); + + Pack.UInt32_To_BE(H1, output, outOff); + Pack.UInt32_To_BE(H2, output, outOff + 4); + Pack.UInt32_To_BE(H3, output, outOff + 8); + Pack.UInt32_To_BE(H4, output, outOff + 12); + Pack.UInt32_To_BE(H5, output, outOff + 16); + Pack.UInt32_To_BE(H6, output, outOff + 20); + Pack.UInt32_To_BE(H7, output, outOff + 24); + Pack.UInt32_To_BE(H8, output, outOff + 28); + + Reset(); + + return DigestLength; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + Finish(); + + Pack.UInt32_To_BE(H1, output); + Pack.UInt32_To_BE(H2, output[4..]); + Pack.UInt32_To_BE(H3, output[8..]); + Pack.UInt32_To_BE(H4, output[12..]); + Pack.UInt32_To_BE(H5, output[16..]); + Pack.UInt32_To_BE(H6, output[20..]); + Pack.UInt32_To_BE(H7, output[24..]); + Pack.UInt32_To_BE(H8, output[28..]); + + Reset(); + + return DigestLength; + } +#endif + + /** + * reset the chaining variables + */ + public override void Reset() + { + base.Reset(); + + initHs(); + + xOff = 0; + Array.Clear(X, 0, X.Length); + } + + private void initHs() + { + /* SHA-256 initial hash value + * The first 32 bits of the fractional parts of the square roots + * of the first eight prime numbers + */ + H1 = 0x6a09e667; + H2 = 0xbb67ae85; + H3 = 0x3c6ef372; + H4 = 0xa54ff53a; + H5 = 0x510e527f; + H6 = 0x9b05688c; + H7 = 0x1f83d9ab; + H8 = 0x5be0cd19; + } + + internal override void ProcessBlock() + { + // + // expand 16 word block into 64 word blocks. + // + for (int ti = 16; ti <= 63; ti++) + { + X[ti] = Theta1(X[ti - 2]) + X[ti - 7] + Theta0(X[ti - 15]) + X[ti - 16]; + } + + // + // set up working variables. + // + uint a = H1; + uint b = H2; + uint c = H3; + uint d = H4; + uint e = H5; + uint f = H6; + uint g = H7; + uint h = H8; + + int t = 0; + for(int i = 0; i < 8; ++i) + { + // t = 8 * i + h += Sum1Ch(e, f, g) + K[t] + X[t]; + d += h; + h += Sum0Maj(a, b, c); + ++t; + + // t = 8 * i + 1 + g += Sum1Ch(d, e, f) + K[t] + X[t]; + c += g; + g += Sum0Maj(h, a, b); + ++t; + + // t = 8 * i + 2 + f += Sum1Ch(c, d, e) + K[t] + X[t]; + b += f; + f += Sum0Maj(g, h, a); + ++t; + + // t = 8 * i + 3 + e += Sum1Ch(b, c, d) + K[t] + X[t]; + a += e; + e += Sum0Maj(f, g, h); + ++t; + + // t = 8 * i + 4 + d += Sum1Ch(a, b, c) + K[t] + X[t]; + h += d; + d += Sum0Maj(e, f, g); + ++t; + + // t = 8 * i + 5 + c += Sum1Ch(h, a, b) + K[t] + X[t]; + g += c; + c += Sum0Maj(d, e, f); + ++t; + + // t = 8 * i + 6 + b += Sum1Ch(g, h, a) + K[t] + X[t]; + f += b; + b += Sum0Maj(c, d, e); + ++t; + + // t = 8 * i + 7 + a += Sum1Ch(f, g, h) + K[t] + X[t]; + e += a; + a += Sum0Maj(b, c, d); + ++t; + } + + H1 += a; + H2 += b; + H3 += c; + H4 += d; + H5 += e; + H6 += f; + H7 += g; + H8 += h; + + // + // reset the offset and clean out the word buffer. + // + xOff = 0; + Array.Clear(X, 0, 16); + } + + private static uint Sum1Ch(uint x, uint y, uint z) + { +// return Sum1(x) + Ch(x, y, z); + return (((x >> 6) | (x << 26)) ^ ((x >> 11) | (x << 21)) ^ ((x >> 25) | (x << 7))) + //+ ((x & y) ^ ((~x) & z)); + + (z ^ (x & (y ^ z))); + } + + private static uint Sum0Maj(uint x, uint y, uint z) + { +// return Sum0(x) + Maj(x, y, z); + return (((x >> 2) | (x << 30)) ^ ((x >> 13) | (x << 19)) ^ ((x >> 22) | (x << 10))) + //+ ((x & y) ^ (x & z) ^ (y & z)); + + ((x & y) | (z & (x ^ y))); + } + +// /* SHA-256 functions */ +// private static uint Ch(uint x, uint y, uint z) +// { +// return (x & y) ^ ((~x) & z); +// //return z ^ (x & (y ^ z)); +// } +// +// private static uint Maj(uint x, uint y, uint z) +// { +// //return (x & y) ^ (x & z) ^ (y & z); +// return (x & y) | (z & (x ^ y)); +// } +// +// private static uint Sum0(uint x) +// { +// return ((x >> 2) | (x << 30)) ^ ((x >> 13) | (x << 19)) ^ ((x >> 22) | (x << 10)); +// } +// +// private static uint Sum1(uint x) +// { +// return ((x >> 6) | (x << 26)) ^ ((x >> 11) | (x << 21)) ^ ((x >> 25) | (x << 7)); +// } + + private static uint Theta0(uint x) + { + return ((x >> 7) | (x << 25)) ^ ((x >> 18) | (x << 14)) ^ (x >> 3); + } + + private static uint Theta1(uint x) + { + return ((x >> 17) | (x << 15)) ^ ((x >> 19) | (x << 13)) ^ (x >> 10); + } + + /* SHA-256 Constants + * (represent the first 32 bits of the fractional parts of the + * cube roots of the first sixty-four prime numbers) + */ + private static readonly uint[] K = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, + 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, + 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, + 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, + 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 + }; + + public override IMemoable Copy() + { + return new Sha256Digest(this); + } + + public override void Reset(IMemoable other) + { + Sha256Digest d = (Sha256Digest)other; + + CopyIn(d); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha256Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha256Digest.cs.meta new file mode 100644 index 000000000..ba70f34e9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha256Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1c1f505a2c38e354a832ffbf8fbcbd63 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha384Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha384Digest.cs new file mode 100644 index 000000000..da5ce30d1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha384Digest.cs @@ -0,0 +1,122 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /** + * Draft FIPS 180-2 implementation of SHA-384. Note: As this is + * based on a draft this implementation is subject to change. + * + *
+     *         block  word  digest
+     * SHA-1   512    32    160
+     * SHA-256 512    32    256
+     * SHA-384 1024   64    384
+     * SHA-512 1024   64    512
+     * 
+ */ + public class Sha384Digest + : LongDigest + { + private const int DigestLength = 48; + + public Sha384Digest() + { + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public Sha384Digest( + Sha384Digest t) + : base(t) + { + } + + public override string AlgorithmName + { + get { return "SHA-384"; } + } + + public override int GetDigestSize() + { + return DigestLength; + } + + public override int DoFinal( + byte[] output, + int outOff) + { + Finish(); + + Pack.UInt64_To_BE(H1, output, outOff); + Pack.UInt64_To_BE(H2, output, outOff + 8); + Pack.UInt64_To_BE(H3, output, outOff + 16); + Pack.UInt64_To_BE(H4, output, outOff + 24); + Pack.UInt64_To_BE(H5, output, outOff + 32); + Pack.UInt64_To_BE(H6, output, outOff + 40); + + Reset(); + + return DigestLength; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + Finish(); + + Pack.UInt64_To_BE(H1, output); + Pack.UInt64_To_BE(H2, output[8..]); + Pack.UInt64_To_BE(H3, output[16..]); + Pack.UInt64_To_BE(H4, output[24..]); + Pack.UInt64_To_BE(H5, output[32..]); + Pack.UInt64_To_BE(H6, output[40..]); + + Reset(); + + return DigestLength; + } +#endif + + /** + * reset the chaining variables + */ + public override void Reset() + { + base.Reset(); + + /* SHA-384 initial hash value + * The first 64 bits of the fractional parts of the square roots + * of the 9th through 16th prime numbers + */ + H1 = 0xcbbb9d5dc1059ed8; + H2 = 0x629a292a367cd507; + H3 = 0x9159015a3070dd17; + H4 = 0x152fecd8f70e5939; + H5 = 0x67332667ffc00b31; + H6 = 0x8eb44a8768581511; + H7 = 0xdb0c2e0d64f98fa7; + H8 = 0x47b5481dbefa4fa4; + } + + public override IMemoable Copy() + { + return new Sha384Digest(this); + } + + public override void Reset(IMemoable other) + { + Sha384Digest d = (Sha384Digest)other; + + CopyIn(d); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha384Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha384Digest.cs.meta new file mode 100644 index 000000000..d4a0fdfe2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha384Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 202b9c65c2b4bf3429962b5c945902a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha512Digest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha512Digest.cs new file mode 100644 index 000000000..ec4be76a2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha512Digest.cs @@ -0,0 +1,127 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /** + * Draft FIPS 180-2 implementation of SHA-512. Note: As this is + * based on a draft this implementation is subject to change. + * + *
+     *         block  word  digest
+     * SHA-1   512    32    160
+     * SHA-256 512    32    256
+     * SHA-384 1024   64    384
+     * SHA-512 1024   64    512
+     * 
+ */ + public class Sha512Digest + : LongDigest + { + private const int DigestLength = 64; + + public Sha512Digest() + { + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public Sha512Digest( + Sha512Digest t) + : base(t) + { + } + + public override string AlgorithmName + { + get { return "SHA-512"; } + } + + public override int GetDigestSize() + { + return DigestLength; + } + + public override int DoFinal( + byte[] output, + int outOff) + { + Finish(); + + Pack.UInt64_To_BE(H1, output, outOff); + Pack.UInt64_To_BE(H2, output, outOff + 8); + Pack.UInt64_To_BE(H3, output, outOff + 16); + Pack.UInt64_To_BE(H4, output, outOff + 24); + Pack.UInt64_To_BE(H5, output, outOff + 32); + Pack.UInt64_To_BE(H6, output, outOff + 40); + Pack.UInt64_To_BE(H7, output, outOff + 48); + Pack.UInt64_To_BE(H8, output, outOff + 56); + + Reset(); + + return DigestLength; + + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + Finish(); + + Pack.UInt64_To_BE(H1, output); + Pack.UInt64_To_BE(H2, output[8..]); + Pack.UInt64_To_BE(H3, output[16..]); + Pack.UInt64_To_BE(H4, output[24..]); + Pack.UInt64_To_BE(H5, output[32..]); + Pack.UInt64_To_BE(H6, output[40..]); + Pack.UInt64_To_BE(H7, output[48..]); + Pack.UInt64_To_BE(H8, output[56..]); + + Reset(); + + return DigestLength; + } +#endif + + /** + * reset the chaining variables + */ + public override void Reset() + { + base.Reset(); + + /* SHA-512 initial hash value + * The first 64 bits of the fractional parts of the square roots + * of the first eight prime numbers + */ + H1 = 0x6a09e667f3bcc908; + H2 = 0xbb67ae8584caa73b; + H3 = 0x3c6ef372fe94f82b; + H4 = 0xa54ff53a5f1d36f1; + H5 = 0x510e527fade682d1; + H6 = 0x9b05688c2b3e6c1f; + H7 = 0x1f83d9abfb41bd6b; + H8 = 0x5be0cd19137e2179; + } + + public override IMemoable Copy() + { + return new Sha512Digest(this); + } + + public override void Reset(IMemoable other) + { + Sha512Digest d = (Sha512Digest)other; + + CopyIn(d); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha512Digest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha512Digest.cs.meta new file mode 100644 index 000000000..821af2ff3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha512Digest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4adbb7dfd7c2c4f41ba95f6affb474dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha512tDigest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha512tDigest.cs new file mode 100644 index 000000000..f334c6948 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha512tDigest.cs @@ -0,0 +1,249 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /** + * FIPS 180-4 implementation of SHA-512/t + */ + public class Sha512tDigest + : LongDigest + { + private const ulong A5 = 0xa5a5a5a5a5a5a5a5UL; + + private readonly int digestLength; + + private ulong H1t, H2t, H3t, H4t, H5t, H6t, H7t, H8t; + + /** + * Standard constructor + */ + public Sha512tDigest(int bitLength) + { + if (bitLength >= 512) + throw new ArgumentException("cannot be >= 512", "bitLength"); + if (bitLength % 8 != 0) + throw new ArgumentException("needs to be a multiple of 8", "bitLength"); + if (bitLength == 384) + throw new ArgumentException("cannot be 384 use SHA384 instead", "bitLength"); + + this.digestLength = bitLength / 8; + + tIvGenerate(digestLength * 8); + + Reset(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public Sha512tDigest(Sha512tDigest t) + : base(t) + { + this.digestLength = t.digestLength; + + Reset(t); + } + + public override string AlgorithmName + { + get { return "SHA-512/" + (digestLength * 8); } + } + + public override int GetDigestSize() + { + return digestLength; + } + + public override int DoFinal(byte[] output, int outOff) + { + Finish(); + + UInt64_To_BE(H1, output, outOff, digestLength); + UInt64_To_BE(H2, output, outOff + 8, digestLength - 8); + UInt64_To_BE(H3, output, outOff + 16, digestLength - 16); + UInt64_To_BE(H4, output, outOff + 24, digestLength - 24); + UInt64_To_BE(H5, output, outOff + 32, digestLength - 32); + UInt64_To_BE(H6, output, outOff + 40, digestLength - 40); + UInt64_To_BE(H7, output, outOff + 48, digestLength - 48); + UInt64_To_BE(H8, output, outOff + 56, digestLength - 56); + + Reset(); + + return digestLength; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + Finish(); + + UInt64_To_BE(H1, output, 0, digestLength); + UInt64_To_BE(H2, output, 8, digestLength - 8); + UInt64_To_BE(H3, output, 16, digestLength - 16); + UInt64_To_BE(H4, output, 24, digestLength - 24); + UInt64_To_BE(H5, output, 32, digestLength - 32); + UInt64_To_BE(H6, output, 40, digestLength - 40); + UInt64_To_BE(H7, output, 48, digestLength - 48); + UInt64_To_BE(H8, output, 56, digestLength - 56); + + Reset(); + + return digestLength; + } +#endif + + /** + * reset the chaining variables + */ + public override void Reset() + { + base.Reset(); + + /* + * initial hash values use the iv generation algorithm for t. + */ + H1 = H1t; + H2 = H2t; + H3 = H3t; + H4 = H4t; + H5 = H5t; + H6 = H6t; + H7 = H7t; + H8 = H8t; + } + + private void tIvGenerate(int bitLength) + { + H1 = 0x6a09e667f3bcc908UL ^ A5; + H2 = 0xbb67ae8584caa73bUL ^ A5; + H3 = 0x3c6ef372fe94f82bUL ^ A5; + H4 = 0xa54ff53a5f1d36f1UL ^ A5; + H5 = 0x510e527fade682d1UL ^ A5; + H6 = 0x9b05688c2b3e6c1fUL ^ A5; + H7 = 0x1f83d9abfb41bd6bUL ^ A5; + H8 = 0x5be0cd19137e2179UL ^ A5; + + Update(0x53); + Update(0x48); + Update(0x41); + Update(0x2D); + Update(0x35); + Update(0x31); + Update(0x32); + Update(0x2F); + + if (bitLength > 100) + { + Update((byte)(bitLength / 100 + 0x30)); + bitLength = bitLength % 100; + Update((byte)(bitLength / 10 + 0x30)); + bitLength = bitLength % 10; + Update((byte)(bitLength + 0x30)); + } + else if (bitLength > 10) + { + Update((byte)(bitLength / 10 + 0x30)); + bitLength = bitLength % 10; + Update((byte)(bitLength + 0x30)); + } + else + { + Update((byte)(bitLength + 0x30)); + } + + Finish(); + + H1t = H1; + H2t = H2; + H3t = H3; + H4t = H4; + H5t = H5; + H6t = H6; + H7t = H7; + H8t = H8; + } + + private static void UInt64_To_BE(ulong n, byte[] bs, int off, int max) + { + if (max > 0) + { + UInt32_To_BE((uint)(n >> 32), bs, off, max); + + if (max > 4) + { + UInt32_To_BE((uint)n, bs, off + 4, max - 4); + } + } + } + + private static void UInt32_To_BE(uint n, byte[] bs, int off, int max) + { + int num = System.Math.Min(4, max); + while (--num >= 0) + { + int shift = 8 * (3 - num); + bs[off + num] = (byte)(n >> shift); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void UInt64_To_BE(ulong n, Span bs, int off, int max) + { + if (max > 0) + { + UInt32_To_BE((uint)(n >> 32), bs, off, max); + + if (max > 4) + { + UInt32_To_BE((uint)n, bs, off + 4, max - 4); + } + } + } + + private static void UInt32_To_BE(uint n, Span bs, int off, int max) + { + int num = System.Math.Min(4, max); + while (--num >= 0) + { + int shift = 8 * (3 - num); + bs[off + num] = (byte)(n >> shift); + } + } +#endif + + public override IMemoable Copy() + { + return new Sha512tDigest(this); + } + + public override void Reset(IMemoable other) + { + Sha512tDigest t = (Sha512tDigest)other; + + if (this.digestLength != t.digestLength) + { + throw new MemoableResetException("digestLength inappropriate in other"); + } + + base.CopyIn(t); + + this.H1t = t.H1t; + this.H2t = t.H2t; + this.H3t = t.H3t; + this.H4t = t.H4t; + this.H5t = t.H5t; + this.H6t = t.H6t; + this.H7t = t.H7t; + this.H8t = t.H8t; + } + + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha512tDigest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha512tDigest.cs.meta new file mode 100644 index 000000000..739d908c2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/Sha512tDigest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71193c0a7b8cb1d49939d290bb0b4004 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/ShakeDigest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/ShakeDigest.cs new file mode 100644 index 000000000..32b3742dc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/ShakeDigest.cs @@ -0,0 +1,156 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /// + /// Implementation of SHAKE based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + /// + /// + /// Following the naming conventions used in the C source code to enable easy review of the implementation. + /// + public class ShakeDigest + : KeccakDigest, IXof + { + private static int CheckBitLength(int bitLength) + { + switch (bitLength) + { + case 128: + case 256: + return bitLength; + default: + throw new ArgumentException(bitLength + " not supported for SHAKE", "bitLength"); + } + } + + public ShakeDigest() + : this(128) + { + } + + public ShakeDigest(int bitLength) + : base(CheckBitLength(bitLength)) + { + } + + public ShakeDigest(ShakeDigest source) + : base(source) + { + } + + public override string AlgorithmName + { + get { return "SHAKE" + fixedOutputLength; } + } + + public override int GetDigestSize() + { + return fixedOutputLength >> 2; + } + + public override int DoFinal(byte[] output, int outOff) + { + return OutputFinal(output, outOff, GetDigestSize()); + } + + public virtual int OutputFinal(byte[] output, int outOff, int outLen) + { + int length = Output(output, outOff, outLen); + + Reset(); + + return length; + } + + public virtual int Output(byte[] output, int outOff, int outLen) + { + if (!squeezing) + { + AbsorbBits(0x0F, 4); + } + + Squeeze(output, outOff, (long)outLen << 3); + + return outLen; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + return OutputFinal(output[..GetDigestSize()]); + } + + public virtual int OutputFinal(Span output) + { + int length = Output(output); + + Reset(); + + return length; + } + + public virtual int Output(Span output) + { + if (!squeezing) + { + AbsorbBits(0x0F, 4); + } + + Squeeze(output); + + return output.Length; + } +#endif + + /* + * TODO Possible API change to support partial-byte suffixes. + */ + protected override int DoFinal(byte[] output, int outOff, byte partialByte, int partialBits) + { + return OutputFinal(output, outOff, GetDigestSize(), partialByte, partialBits); + } + + /* + * TODO Possible API change to support partial-byte suffixes. + */ + protected virtual int OutputFinal(byte[] output, int outOff, int outLen, byte partialByte, int partialBits) + { + if (partialBits < 0 || partialBits > 7) + throw new ArgumentException("must be in the range [0,7]", "partialBits"); + + int finalInput = (partialByte & ((1 << partialBits) - 1)) | (0x0F << partialBits); + Debug.Assert(finalInput >= 0); + int finalBits = partialBits + 4; + + if (finalBits >= 8) + { + Absorb((byte)finalInput); + finalBits -= 8; + finalInput >>= 8; + } + + if (finalBits > 0) + { + AbsorbBits(finalInput, finalBits); + } + + Squeeze(output, outOff, (long)outLen << 3); + + Reset(); + + return outLen; + } + + public override IMemoable Copy() + { + return new ShakeDigest(this); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/ShakeDigest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/ShakeDigest.cs.meta new file mode 100644 index 000000000..ea8a28d58 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/ShakeDigest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eaf2e157553c41e44be2794678a8fc53 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/ShortenedDigest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/ShortenedDigest.cs new file mode 100644 index 000000000..708ab7e92 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/ShortenedDigest.cs @@ -0,0 +1,108 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /** + * Wrapper class that reduces the output length of a particular digest to + * only the first n bytes of the digest function. + */ + public class ShortenedDigest + : IDigest + { + private IDigest baseDigest; + private int length; + + /** + * Base constructor. + * + * @param baseDigest underlying digest to use. + * @param length length in bytes of the output of doFinal. + * @exception ArgumentException if baseDigest is null, or length is greater than baseDigest.GetDigestSize(). + */ + public ShortenedDigest( + IDigest baseDigest, + int length) + { + if (baseDigest == null) + { + throw new ArgumentNullException("baseDigest"); + } + + if (length > baseDigest.GetDigestSize()) + { + throw new ArgumentException("baseDigest output not large enough to support length"); + } + + this.baseDigest = baseDigest; + this.length = length; + } + + public string AlgorithmName + { + get { return baseDigest.AlgorithmName + "(" + length * 8 + ")"; } + } + + public int GetDigestSize() + { + return length; + } + + public void Update(byte input) + { + baseDigest.Update(input); + } + + public void BlockUpdate(byte[] input, int inOff, int length) + { + baseDigest.BlockUpdate(input, inOff, length); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + baseDigest.BlockUpdate(input); + } +#endif + + public int DoFinal(byte[] output, int outOff) + { + byte[] tmp = new byte[baseDigest.GetDigestSize()]; + + baseDigest.DoFinal(tmp, 0); + + Array.Copy(tmp, 0, output, outOff, length); + + return length; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + int baseDigestSize = baseDigest.GetDigestSize(); + Span tmp = baseDigestSize <= 128 + ? stackalloc byte[baseDigestSize] + : new byte[baseDigestSize]; + + baseDigest.DoFinal(tmp); + + tmp[..length].CopyTo(output); + + return length; + } +#endif + + public void Reset() + { + baseDigest.Reset(); + } + + public int GetByteLength() + { + return baseDigest.GetByteLength(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/ShortenedDigest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/ShortenedDigest.cs.meta new file mode 100644 index 000000000..c603c94f2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/ShortenedDigest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ea482868e0969942b9f9d454a43ae66 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SkeinDigest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SkeinDigest.cs new file mode 100644 index 000000000..f307553cc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SkeinDigest.cs @@ -0,0 +1,129 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /// + /// Implementation of the Skein parameterised hash function in 256, 512 and 1024 bit block sizes, + /// based on the Threefish tweakable block cipher. + /// + /// + /// This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + /// competition in October 2010. + ///

+ /// Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + /// Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + /// + /// + /// + public class SkeinDigest + : IDigest, IMemoable + { + ///

+ /// 256 bit block size - Skein-256 + /// + public const int SKEIN_256 = SkeinEngine.SKEIN_256; + /// + /// 512 bit block size - Skein-512 + /// + public const int SKEIN_512 = SkeinEngine.SKEIN_512; + /// + /// 1024 bit block size - Skein-1024 + /// + public const int SKEIN_1024 = SkeinEngine.SKEIN_1024; + + private readonly SkeinEngine engine; + + /// + /// Constructs a Skein digest with an internal state size and output size. + /// + /// the internal state size in bits - one of or + /// . + /// the output/digest size to produce in bits, which must be an integral number of + /// bytes. + public SkeinDigest(int stateSizeBits, int digestSizeBits) + { + this.engine = new SkeinEngine(stateSizeBits, digestSizeBits); + Init(null); + } + + public SkeinDigest(SkeinDigest digest) + { + this.engine = new SkeinEngine(digest.engine); + } + + public void Reset(IMemoable other) + { + SkeinDigest d = (SkeinDigest)other; + engine.Reset(d.engine); + } + + public IMemoable Copy() + { + return new SkeinDigest(this); + } + + public string AlgorithmName + { + get { return "Skein-" + (engine.BlockSize * 8) + "-" + (engine.OutputSize * 8); } + } + + public int GetDigestSize() + { + return engine.OutputSize; + } + + public int GetByteLength() + { + return engine.BlockSize; + } + + /// + /// Optionally initialises the Skein digest with the provided parameters. + /// + /// See for details on the parameterisation of the Skein hash function. + /// the parameters to apply to this engine, or null to use no parameters. + public void Init(SkeinParameters parameters) + { + engine.Init(parameters); + } + + public void Reset() + { + engine.Reset(); + } + + public void Update(byte inByte) + { + engine.Update(inByte); + } + + public void BlockUpdate(byte[] inBytes, int inOff, int len) + { + engine.BlockUpdate(inBytes, inOff, len); + } + + public int DoFinal(byte[] outBytes, int outOff) + { + return engine.DoFinal(outBytes, outOff); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + engine.BlockUpdate(input); + } + + public int DoFinal(Span output) + { + return engine.DoFinal(output); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SkeinDigest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SkeinDigest.cs.meta new file mode 100644 index 000000000..659ccfa2f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SkeinDigest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 77b034e30a6e8f3459f3c17cd88e13b1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SkeinEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SkeinEngine.cs new file mode 100644 index 000000000..220cf485b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SkeinEngine.cs @@ -0,0 +1,903 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + + /// + /// Implementation of the Skein family of parameterised hash functions in 256, 512 and 1024 bit block + /// sizes, based on the Threefish tweakable block cipher. + /// + /// + /// This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + /// competition in October 2010. + ///

+ /// Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + /// Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + ///

+ /// This implementation is the basis for and , implementing the + /// parameter based configuration system that allows Skein to be adapted to multiple applications.
+ /// Initialising the engine with allows standard and arbitrary parameters to + /// be applied during the Skein hash function. + ///

+ /// Implemented: + ///

    + ///
  • 256, 512 and 1024 bit internal states.
  • + ///
  • Full 96 bit input length.
  • + ///
  • Parameters defined in the Skein specification, and arbitrary other pre and post message + /// parameters.
  • + ///
  • Arbitrary output size in 1 byte intervals.
  • + ///
+ ///

+ /// Not implemented: + ///

    + ///
  • Sub-byte length input (bit padding).
  • + ///
  • Tree hashing.
  • + ///
+ ///
+ /// + public class SkeinEngine + : IMemoable + { + /// + /// 256 bit block size - Skein-256 + /// + public const int SKEIN_256 = ThreefishEngine.BLOCKSIZE_256; + /// + /// 512 bit block size - Skein-512 + /// + public const int SKEIN_512 = ThreefishEngine.BLOCKSIZE_512; + /// + /// 1024 bit block size - Skein-1024 + /// + public const int SKEIN_1024 = ThreefishEngine.BLOCKSIZE_1024; + + // Minimal at present, but more complex when tree hashing is implemented + private class Configuration + { + private byte[] bytes = new byte[32]; + + public Configuration(long outputSizeBits) + { + // 0..3 = ASCII SHA3 + bytes[0] = (byte)'S'; + bytes[1] = (byte)'H'; + bytes[2] = (byte)'A'; + bytes[3] = (byte)'3'; + + // 4..5 = version number in LSB order + bytes[4] = 1; + bytes[5] = 0; + + // 8..15 = output length + Pack.UInt64_To_LE((ulong)outputSizeBits, bytes, 8); + } + + public byte[] Bytes + { + get { return bytes; } + } + + } + + public class Parameter + { + private int type; + private byte[] value; + + public Parameter(int type, byte[] value) + { + this.type = type; + this.value = value; + } + + public int Type + { + get { return type; } + } + + public byte[] Value + { + get { return value; } + } + + } + + /** + * The parameter type for the Skein key. + */ + private const int PARAM_TYPE_KEY = 0; + + /** + * The parameter type for the Skein configuration block. + */ + private const int PARAM_TYPE_CONFIG = 4; + + /** + * The parameter type for the message. + */ + private const int PARAM_TYPE_MESSAGE = 48; + + /** + * The parameter type for the output transformation. + */ + private const int PARAM_TYPE_OUTPUT = 63; + + /** + * Precalculated UBI(CFG) states for common state/output combinations without key or other + * pre-message params. + */ + private static readonly IDictionary InitialStates = new Dictionary(); + + static SkeinEngine() + { + // From Appendix C of the Skein 1.3 NIST submission + InitialState(SKEIN_256, 128, new ulong[]{ + 0xe1111906964d7260UL, + 0x883daaa77c8d811cUL, + 0x10080df491960f7aUL, + 0xccf7dde5b45bc1c2UL}); + + InitialState(SKEIN_256, 160, new ulong[]{ + 0x1420231472825e98UL, + 0x2ac4e9a25a77e590UL, + 0xd47a58568838d63eUL, + 0x2dd2e4968586ab7dUL}); + + InitialState(SKEIN_256, 224, new ulong[]{ + 0xc6098a8c9ae5ea0bUL, + 0x876d568608c5191cUL, + 0x99cb88d7d7f53884UL, + 0x384bddb1aeddb5deUL}); + + InitialState(SKEIN_256, 256, new ulong[]{ + 0xfc9da860d048b449UL, + 0x2fca66479fa7d833UL, + 0xb33bc3896656840fUL, + 0x6a54e920fde8da69UL}); + + InitialState(SKEIN_512, 128, new ulong[]{ + 0xa8bc7bf36fbf9f52UL, + 0x1e9872cebd1af0aaUL, + 0x309b1790b32190d3UL, + 0xbcfbb8543f94805cUL, + 0x0da61bcd6e31b11bUL, + 0x1a18ebead46a32e3UL, + 0xa2cc5b18ce84aa82UL, + 0x6982ab289d46982dUL}); + + InitialState(SKEIN_512, 160, new ulong[]{ + 0x28b81a2ae013bd91UL, + 0xc2f11668b5bdf78fUL, + 0x1760d8f3f6a56f12UL, + 0x4fb747588239904fUL, + 0x21ede07f7eaf5056UL, + 0xd908922e63ed70b8UL, + 0xb8ec76ffeccb52faUL, + 0x01a47bb8a3f27a6eUL}); + + InitialState(SKEIN_512, 224, new ulong[]{ + 0xccd0616248677224UL, + 0xcba65cf3a92339efUL, + 0x8ccd69d652ff4b64UL, + 0x398aed7b3ab890b4UL, + 0x0f59d1b1457d2bd0UL, + 0x6776fe6575d4eb3dUL, + 0x99fbc70e997413e9UL, + 0x9e2cfccfe1c41ef7UL}); + + InitialState(SKEIN_512, 384, new ulong[]{ + 0xa3f6c6bf3a75ef5fUL, + 0xb0fef9ccfd84faa4UL, + 0x9d77dd663d770cfeUL, + 0xd798cbf3b468fddaUL, + 0x1bc4a6668a0e4465UL, + 0x7ed7d434e5807407UL, + 0x548fc1acd4ec44d6UL, + 0x266e17546aa18ff8UL}); + + InitialState(SKEIN_512, 512, new ulong[]{ + 0x4903adff749c51ceUL, + 0x0d95de399746df03UL, + 0x8fd1934127c79bceUL, + 0x9a255629ff352cb1UL, + 0x5db62599df6ca7b0UL, + 0xeabe394ca9d5c3f4UL, + 0x991112c71a75b523UL, + 0xae18a40b660fcc33UL}); + } + + private static void InitialState(int blockSize, int outputSize, ulong[] state) + { + InitialStates.Add(VariantIdentifier(blockSize / 8, outputSize / 8), state); + } + + private static int VariantIdentifier(int blockSizeBytes, int outputSizeBytes) + { + return (outputSizeBytes << 16) | blockSizeBytes; + } + + private class UbiTweak + { + /** + * Point at which position might overflow long, so switch to add with carry logic + */ + private const ulong LOW_RANGE = ulong.MaxValue - uint.MaxValue; + + /** + * Bit 127 = final + */ + private const ulong T1_FINAL = 1UL << 63; + + /** + * Bit 126 = first + */ + private const ulong T1_FIRST = 1UL << 62; + + /** + * UBI uses a 128 bit tweak + */ + private ulong[] tweak = new ulong[2]; + + /** + * Whether 64 bit position exceeded + */ + private bool extendedPosition; + + public UbiTweak() + { + Reset(); + } + + public void Reset(UbiTweak tweak) + { + this.tweak = Arrays.Clone(tweak.tweak, this.tweak); + this.extendedPosition = tweak.extendedPosition; + } + + public void Reset() + { + tweak[0] = 0; + tweak[1] = 0; + extendedPosition = false; + First = true; + } + + public uint Type + { + get + { + return (uint)((tweak[1] >> 56) & 0x3FUL); + } + + set + { + // Bits 120..125 = type + tweak[1] = (tweak[1] & 0xFFFFFFC000000000UL) | ((value & 0x3FUL) << 56); + } + } + + public bool First + { + get + { + return ((tweak[1] & T1_FIRST) != 0); + } + set + { + if (value) + { + tweak[1] |= T1_FIRST; + } + else + { + tweak[1] &= ~T1_FIRST; + } + } + } + + public bool Final + { + get + { + return ((tweak[1] & T1_FINAL) != 0); + } + set + { + if (value) + { + tweak[1] |= T1_FINAL; + } + else + { + tweak[1] &= ~T1_FINAL; + } + } + } + + /** + * Advances the position in the tweak by the specified value. + */ + public void AdvancePosition(int advance) + { + // Bits 0..95 = position + if (extendedPosition) + { + ulong[] parts = new ulong[3]; + parts[0] = tweak[0] & 0xFFFFFFFFUL; + parts[1] = (tweak[0] >> 32) & 0xFFFFFFFFUL; + parts[2] = tweak[1] & 0xFFFFFFFFUL; + + ulong carry = (ulong)advance; + for (int i = 0; i < parts.Length; i++) + { + carry += parts[i]; + parts[i] = carry; + carry >>= 32; + } + tweak[0] = ((parts[1] & 0xFFFFFFFFUL) << 32) | (parts[0] & 0xFFFFFFFFUL); + tweak[1] = (tweak[1] & 0xFFFFFFFF00000000UL) | (parts[2] & 0xFFFFFFFFUL); + } + else + { + ulong position = tweak[0]; + position += (uint)advance; + tweak[0] = position; + if (position > LOW_RANGE) + { + extendedPosition = true; + } + } + } + + public ulong[] GetWords() + { + return tweak; + } + + public override string ToString() + { + return Type + " first: " + First + ", final: " + Final; + } + + } + + /** + * The Unique Block Iteration chaining mode. + */ + // TODO: This might be better as methods... + private class UBI + { + private readonly UbiTweak tweak = new UbiTweak(); + + private readonly SkeinEngine engine; + + /** + * Buffer for the current block of message data + */ + private byte[] currentBlock; + + /** + * Offset into the current message block + */ + private int currentOffset; + + /** + * Buffer for message words for feedback into encrypted block + */ + private ulong[] message; + + public UBI(SkeinEngine engine, int blockSize) + { + this.engine = engine; + currentBlock = new byte[blockSize]; + message = new ulong[currentBlock.Length / 8]; + } + + public void Reset(UBI ubi) + { + currentBlock = Arrays.Clone(ubi.currentBlock, currentBlock); + currentOffset = ubi.currentOffset; + message = Arrays.Clone(ubi.message, this.message); + tweak.Reset(ubi.tweak); + } + + public void Reset(int type) + { + tweak.Reset(); + tweak.Type = (uint)type; + currentOffset = 0; + } + + public void Update(byte[] value, int offset, int len, ulong[] output) + { + /* + * Buffer complete blocks for the underlying Threefish cipher, only flushing when there + * are subsequent bytes (last block must be processed in doFinal() with final=true set). + */ + int copied = 0; + while (len > copied) + { + if (currentOffset == currentBlock.Length) + { + ProcessBlock(output); + tweak.First = false; + currentOffset = 0; + } + + int toCopy = System.Math.Min(len - copied, currentBlock.Length - currentOffset); + Array.Copy(value, offset + copied, currentBlock, currentOffset, toCopy); + copied += toCopy; + currentOffset += toCopy; + tweak.AdvancePosition(toCopy); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Update(ReadOnlySpan input, ulong[] output) + { + /* + * Buffer complete blocks for the underlying Threefish cipher, only flushing when there + * are subsequent bytes (last block must be processed in doFinal() with final=true set). + */ + int copied = 0, len = input.Length; + while (len > copied) + { + if (currentOffset == currentBlock.Length) + { + ProcessBlock(output); + tweak.First = false; + currentOffset = 0; + } + + int toCopy = System.Math.Min(len - copied, currentBlock.Length - currentOffset); + input.Slice(copied, toCopy).CopyTo(currentBlock.AsSpan(currentOffset)); + copied += toCopy; + currentOffset += toCopy; + tweak.AdvancePosition(toCopy); + } + } +#endif + + private void ProcessBlock(ulong[] output) + { + engine.threefish.Init(true, engine.chain, tweak.GetWords()); + Pack.LE_To_UInt64(currentBlock, 0, message); + + engine.threefish.ProcessBlock(message, output); + + for (int i = 0; i < output.Length; i++) + { + output[i] ^= message[i]; + } + } + + public void DoFinal(ulong[] output) + { + // Pad remainder of current block with zeroes + for (int i = currentOffset; i < currentBlock.Length; i++) + { + currentBlock[i] = 0; + } + + tweak.Final = true; + ProcessBlock(output); + } + } + + /** + * Underlying Threefish tweakable block cipher + */ + private readonly ThreefishEngine threefish; + + /** + * Size of the digest output, in bytes + */ + private readonly int outputSizeBytes; + + /** + * The current chaining/state value + */ + private ulong[] chain; + + /** + * The initial state value + */ + private ulong[] initialState; + + /** + * The (optional) key parameter + */ + private byte[] key; + + /** + * Parameters to apply prior to the message + */ + private Parameter[] preMessageParameters; + + /** + * Parameters to apply after the message, but prior to output + */ + private Parameter[] postMessageParameters; + + /** + * The current UBI operation + */ + private readonly UBI ubi; + + /** + * Buffer for single byte update method + */ + private readonly byte[] singleByte = new byte[1]; + + /// + /// Constructs a Skein digest with an internal state size and output size. + /// + /// the internal state size in bits - one of or + /// . + /// the output/digest size to produce in bits, which must be an integral number of + /// bytes. + public SkeinEngine(int blockSizeBits, int outputSizeBits) + { + if (outputSizeBits % 8 != 0) + { + throw new ArgumentException("Output size must be a multiple of 8 bits. :" + outputSizeBits); + } + // TODO: Prevent digest sizes > block size? + this.outputSizeBytes = outputSizeBits / 8; + + this.threefish = new ThreefishEngine(blockSizeBits); + this.ubi = new UBI(this,threefish.GetBlockSize()); + } + + /// + /// Creates a SkeinEngine as an exact copy of an existing instance. + /// + public SkeinEngine(SkeinEngine engine) + : this(engine.BlockSize * 8, engine.OutputSize * 8) + { + CopyIn(engine); + } + + private void CopyIn(SkeinEngine engine) + { + this.ubi.Reset(engine.ubi); + this.chain = Arrays.Clone(engine.chain, this.chain); + this.initialState = Arrays.Clone(engine.initialState, this.initialState); + this.key = Arrays.Clone(engine.key, this.key); + this.preMessageParameters = Clone(engine.preMessageParameters, this.preMessageParameters); + this.postMessageParameters = Clone(engine.postMessageParameters, this.postMessageParameters); + } + + private static Parameter[] Clone(Parameter[] data, Parameter[] existing) + { + if (data == null) + { + return null; + } + if ((existing == null) || (existing.Length != data.Length)) + { + existing = new Parameter[data.Length]; + } + Array.Copy(data, 0, existing, 0, existing.Length); + return existing; + } + + public IMemoable Copy() + { + return new SkeinEngine(this); + } + + public void Reset(IMemoable other) + { + SkeinEngine s = (SkeinEngine)other; + if ((BlockSize != s.BlockSize) || (outputSizeBytes != s.outputSizeBytes)) + { + throw new MemoableResetException("Incompatible parameters in provided SkeinEngine."); + } + CopyIn(s); + } + + public int OutputSize + { + get { return outputSizeBytes; } + } + + public int BlockSize + { + get { return threefish.GetBlockSize (); } + } + + /// + /// Initialises the Skein engine with the provided parameters. See for + /// details on the parameterisation of the Skein hash function. + /// + /// the parameters to apply to this engine, or null to use no parameters. + public void Init(SkeinParameters parameters) + { + this.chain = null; + this.key = null; + this.preMessageParameters = null; + this.postMessageParameters = null; + + if (parameters != null) + { + byte[] key = parameters.GetKey(); + if (key.Length < 16) + { + throw new ArgumentException("Skein key must be at least 128 bits."); + } + InitParams(parameters.GetParameters()); + } + CreateInitialState(); + + // Initialise message block + UbiInit(PARAM_TYPE_MESSAGE); + } + + private void InitParams(IDictionary parameters) + { + //IEnumerator keys = parameters.Keys.GetEnumerator(); + var pre = new List(); + var post = new List(); + + //while (keys.MoveNext()) + foreach (var parameter in parameters) + { + int type = parameter.Key; + byte[] value = parameter.Value; + + if (type == PARAM_TYPE_KEY) + { + this.key = value; + } + else if (type < PARAM_TYPE_MESSAGE) + { + pre.Add(new Parameter(type, value)); + } + else + { + post.Add(new Parameter(type, value)); + } + } + preMessageParameters = new Parameter[pre.Count]; + pre.CopyTo(preMessageParameters, 0); + Array.Sort(preMessageParameters); + + postMessageParameters = new Parameter[post.Count]; + post.CopyTo(postMessageParameters, 0); + Array.Sort(postMessageParameters); + } + + /** + * Calculate the initial (pre message block) chaining state. + */ + private void CreateInitialState() + { + var precalc = CollectionUtilities.GetValueOrNull(InitialStates, VariantIdentifier(BlockSize, OutputSize)); + if ((key == null) && (precalc != null)) + { + // Precalculated UBI(CFG) + chain = Arrays.Clone(precalc); + } + else + { + // Blank initial state + chain = new ulong[BlockSize / 8]; + + // Process key block + if (key != null) + { + UbiComplete(SkeinParameters.PARAM_TYPE_KEY, key); + } + + // Process configuration block + UbiComplete(PARAM_TYPE_CONFIG, new Configuration(outputSizeBytes * 8).Bytes); + } + + // Process additional pre-message parameters + if (preMessageParameters != null) + { + for (int i = 0; i < preMessageParameters.Length; i++) + { + Parameter param = preMessageParameters[i]; + UbiComplete(param.Type, param.Value); + } + } + initialState = Arrays.Clone(chain); + } + + /// + /// Reset the engine to the initial state (with the key and any pre-message parameters , ready to + /// accept message input. + /// + public void Reset() + { + Array.Copy(initialState, 0, chain, 0, chain.Length); + + UbiInit(PARAM_TYPE_MESSAGE); + } + + private void UbiComplete(int type, byte[] value) + { + UbiInit(type); + this.ubi.Update(value, 0, value.Length, chain); + UbiFinal(); + } + + private void UbiInit(int type) + { + this.ubi.Reset(type); + } + + private void UbiFinal() + { + ubi.DoFinal(chain); + } + + private void CheckInitialised() + { + if (this.ubi == null) + { + throw new ArgumentException("Skein engine is not initialised."); + } + } + + public void Update(byte inByte) + { + singleByte[0] = inByte; + BlockUpdate(singleByte, 0, 1); + } + + public void BlockUpdate(byte[] inBytes, int inOff, int len) + { + CheckInitialised(); + ubi.Update(inBytes, inOff, len, chain); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + CheckInitialised(); + ubi.Update(input, chain); + } +#endif + + public int DoFinal(byte[] outBytes, int outOff) + { + CheckInitialised(); + if (outBytes.Length < (outOff + outputSizeBytes)) + { + throw new DataLengthException("Output buffer is too short to hold output"); + } + + // Finalise message block + UbiFinal(); + + // Process additional post-message parameters + if (postMessageParameters != null) + { + for (int i = 0; i < postMessageParameters.Length; i++) + { + Parameter param = postMessageParameters[i]; + UbiComplete(param.Type, param.Value); + } + } + + // Perform the output transform + int blockSize = BlockSize; + int blocksRequired = ((outputSizeBytes + blockSize - 1) / blockSize); + for (int i = 0; i < blocksRequired; i++) + { + int toWrite = System.Math.Min(blockSize, outputSizeBytes - (i * blockSize)); + Output((ulong)i, outBytes, outOff + (i * blockSize), toWrite); + } + + Reset(); + + return outputSizeBytes; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + CheckInitialised(); + if (output.Length < outputSizeBytes) + throw new DataLengthException("Output span is too short to hold output"); + + // Finalise message block + UbiFinal(); + + // Process additional post-message parameters + if (postMessageParameters != null) + { + for (int i = 0; i < postMessageParameters.Length; i++) + { + Parameter param = postMessageParameters[i]; + UbiComplete(param.Type, param.Value); + } + } + + // Perform the output transform + int blockSize = BlockSize; + int blocksRequired = (outputSizeBytes + blockSize - 1) / blockSize; + for (int i = 0; i < blocksRequired; i++) + { + int toWrite = System.Math.Min(blockSize, outputSizeBytes - (i * blockSize)); + //Output((ulong)i, outBytes, outOff + (i * blockSize), toWrite); + Output((ulong)i, output[(i * blockSize)..], toWrite); + } + + Reset(); + + return outputSizeBytes; + } +#endif + + private void Output(ulong outputSequence, byte[] outBytes, int outOff, int outputBytes) + { + byte[] currentBytes = new byte[8]; + Pack.UInt64_To_LE(outputSequence, currentBytes, 0); + + // Output is a sequence of UBI invocations all of which use and preserve the pre-output state + ulong[] outputWords = new ulong[chain.Length]; + UbiInit(PARAM_TYPE_OUTPUT); + this.ubi.Update(currentBytes, 0, currentBytes.Length, outputWords); + ubi.DoFinal(outputWords); + + int wordsRequired = (outputBytes + 8 - 1) / 8; + for (int i = 0; i < wordsRequired; i++) + { + int toWrite = System.Math.Min(8, outputBytes - (i * 8)); + if (toWrite == 8) + { + Pack.UInt64_To_LE(outputWords[i], outBytes, outOff + (i * 8)); + } + else + { + Pack.UInt64_To_LE(outputWords[i], currentBytes, 0); + Array.Copy(currentBytes, 0, outBytes, outOff + (i * 8), toWrite); + } + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void Output(ulong outputSequence, Span output, int outputBytes) + { + Span currentBytes = stackalloc byte[8]; + Pack.UInt64_To_LE(outputSequence, currentBytes); + + // Output is a sequence of UBI invocations all of which use and preserve the pre-output state + ulong[] outputWords = new ulong[chain.Length]; + UbiInit(PARAM_TYPE_OUTPUT); + this.ubi.Update(currentBytes, outputWords); + ubi.DoFinal(outputWords); + + int wordsRequired = (outputBytes + 8 - 1) / 8; + for (int i = 0; i < wordsRequired; i++) + { + int toWrite = System.Math.Min(8, outputBytes - (i * 8)); + if (toWrite == 8) + { + Pack.UInt64_To_LE(outputWords[i], output[(i * 8)..]); + } + else + { + Pack.UInt64_To_LE(outputWords[i], currentBytes); + currentBytes[..toWrite].CopyTo(output[(i * 8)..]); + } + } + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SkeinEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SkeinEngine.cs.meta new file mode 100644 index 000000000..8f064ca77 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/SkeinEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e565ca2c8b5ee54ebf0856d25fc2b8b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/TigerDigest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/TigerDigest.cs new file mode 100644 index 000000000..5f28167dd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/TigerDigest.cs @@ -0,0 +1,932 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /** + * implementation of Tiger based on: + * + * http://www.cs.technion.ac.il/~biham/Reports/Tiger + */ + public class TigerDigest + : IDigest, IMemoable + { + private const int MyByteLength = 64; + + /* + * S-Boxes. + */ + private static readonly long[] t1 = { + unchecked((long) 0x02AAB17CF7E90C5EL) /* 0 */, unchecked((long) 0xAC424B03E243A8ECL) /* 1 */, + unchecked((long) 0x72CD5BE30DD5FCD3L) /* 2 */, unchecked((long) 0x6D019B93F6F97F3AL) /* 3 */, + unchecked((long) 0xCD9978FFD21F9193L) /* 4 */, unchecked((long) 0x7573A1C9708029E2L) /* 5 */, + unchecked((long) 0xB164326B922A83C3L) /* 6 */, unchecked((long) 0x46883EEE04915870L) /* 7 */, + unchecked((long) 0xEAACE3057103ECE6L) /* 8 */, unchecked((long) 0xC54169B808A3535CL) /* 9 */, + unchecked((long) 0x4CE754918DDEC47CL) /* 10 */, unchecked((long) 0x0AA2F4DFDC0DF40CL) /* 11 */, + unchecked((long) 0x10B76F18A74DBEFAL) /* 12 */, unchecked((long) 0xC6CCB6235AD1AB6AL) /* 13 */, + unchecked((long) 0x13726121572FE2FFL) /* 14 */, unchecked((long) 0x1A488C6F199D921EL) /* 15 */, + unchecked((long) 0x4BC9F9F4DA0007CAL) /* 16 */, unchecked((long) 0x26F5E6F6E85241C7L) /* 17 */, + unchecked((long) 0x859079DBEA5947B6L) /* 18 */, unchecked((long) 0x4F1885C5C99E8C92L) /* 19 */, + unchecked((long) 0xD78E761EA96F864BL) /* 20 */, unchecked((long) 0x8E36428C52B5C17DL) /* 21 */, + unchecked((long) 0x69CF6827373063C1L) /* 22 */, unchecked((long) 0xB607C93D9BB4C56EL) /* 23 */, + unchecked((long) 0x7D820E760E76B5EAL) /* 24 */, unchecked((long) 0x645C9CC6F07FDC42L) /* 25 */, + unchecked((long) 0xBF38A078243342E0L) /* 26 */, unchecked((long) 0x5F6B343C9D2E7D04L) /* 27 */, + unchecked((long) 0xF2C28AEB600B0EC6L) /* 28 */, unchecked((long) 0x6C0ED85F7254BCACL) /* 29 */, + unchecked((long) 0x71592281A4DB4FE5L) /* 30 */, unchecked((long) 0x1967FA69CE0FED9FL) /* 31 */, + unchecked((long) 0xFD5293F8B96545DBL) /* 32 */, unchecked((long) 0xC879E9D7F2A7600BL) /* 33 */, + unchecked((long) 0x860248920193194EL) /* 34 */, unchecked((long) 0xA4F9533B2D9CC0B3L) /* 35 */, + unchecked((long) 0x9053836C15957613L) /* 36 */, unchecked((long) 0xDB6DCF8AFC357BF1L) /* 37 */, + unchecked((long) 0x18BEEA7A7A370F57L) /* 38 */, unchecked((long) 0x037117CA50B99066L) /* 39 */, + unchecked((long) 0x6AB30A9774424A35L) /* 40 */, unchecked((long) 0xF4E92F02E325249BL) /* 41 */, + unchecked((long) 0x7739DB07061CCAE1L) /* 42 */, unchecked((long) 0xD8F3B49CECA42A05L) /* 43 */, + unchecked((long) 0xBD56BE3F51382F73L) /* 44 */, unchecked((long) 0x45FAED5843B0BB28L) /* 45 */, + unchecked((long) 0x1C813D5C11BF1F83L) /* 46 */, unchecked((long) 0x8AF0E4B6D75FA169L) /* 47 */, + unchecked((long) 0x33EE18A487AD9999L) /* 48 */, unchecked((long) 0x3C26E8EAB1C94410L) /* 49 */, + unchecked((long) 0xB510102BC0A822F9L) /* 50 */, unchecked((long) 0x141EEF310CE6123BL) /* 51 */, + unchecked((long) 0xFC65B90059DDB154L) /* 52 */, unchecked((long) 0xE0158640C5E0E607L) /* 53 */, + unchecked((long) 0x884E079826C3A3CFL) /* 54 */, unchecked((long) 0x930D0D9523C535FDL) /* 55 */, + unchecked((long) 0x35638D754E9A2B00L) /* 56 */, unchecked((long) 0x4085FCCF40469DD5L) /* 57 */, + unchecked((long) 0xC4B17AD28BE23A4CL) /* 58 */, unchecked((long) 0xCAB2F0FC6A3E6A2EL) /* 59 */, + unchecked((long) 0x2860971A6B943FCDL) /* 60 */, unchecked((long) 0x3DDE6EE212E30446L) /* 61 */, + unchecked((long) 0x6222F32AE01765AEL) /* 62 */, unchecked((long) 0x5D550BB5478308FEL) /* 63 */, + unchecked((long) 0xA9EFA98DA0EDA22AL) /* 64 */, unchecked((long) 0xC351A71686C40DA7L) /* 65 */, + unchecked((long) 0x1105586D9C867C84L) /* 66 */, unchecked((long) 0xDCFFEE85FDA22853L) /* 67 */, + unchecked((long) 0xCCFBD0262C5EEF76L) /* 68 */, unchecked((long) 0xBAF294CB8990D201L) /* 69 */, + unchecked((long) 0xE69464F52AFAD975L) /* 70 */, unchecked((long) 0x94B013AFDF133E14L) /* 71 */, + unchecked((long) 0x06A7D1A32823C958L) /* 72 */, unchecked((long) 0x6F95FE5130F61119L) /* 73 */, + unchecked((long) 0xD92AB34E462C06C0L) /* 74 */, unchecked((long) 0xED7BDE33887C71D2L) /* 75 */, + unchecked((long) 0x79746D6E6518393EL) /* 76 */, unchecked((long) 0x5BA419385D713329L) /* 77 */, + unchecked((long) 0x7C1BA6B948A97564L) /* 78 */, unchecked((long) 0x31987C197BFDAC67L) /* 79 */, + unchecked((long) 0xDE6C23C44B053D02L) /* 80 */, unchecked((long) 0x581C49FED002D64DL) /* 81 */, + unchecked((long) 0xDD474D6338261571L) /* 82 */, unchecked((long) 0xAA4546C3E473D062L) /* 83 */, + unchecked((long) 0x928FCE349455F860L) /* 84 */, unchecked((long) 0x48161BBACAAB94D9L) /* 85 */, + unchecked((long) 0x63912430770E6F68L) /* 86 */, unchecked((long) 0x6EC8A5E602C6641CL) /* 87 */, + unchecked((long) 0x87282515337DDD2BL) /* 88 */, unchecked((long) 0x2CDA6B42034B701BL) /* 89 */, + unchecked((long) 0xB03D37C181CB096DL) /* 90 */, unchecked((long) 0xE108438266C71C6FL) /* 91 */, + unchecked((long) 0x2B3180C7EB51B255L) /* 92 */, unchecked((long) 0xDF92B82F96C08BBCL) /* 93 */, + unchecked((long) 0x5C68C8C0A632F3BAL) /* 94 */, unchecked((long) 0x5504CC861C3D0556L) /* 95 */, + unchecked((long) 0xABBFA4E55FB26B8FL) /* 96 */, unchecked((long) 0x41848B0AB3BACEB4L) /* 97 */, + unchecked((long) 0xB334A273AA445D32L) /* 98 */, unchecked((long) 0xBCA696F0A85AD881L) /* 99 */, + unchecked((long) 0x24F6EC65B528D56CL) /* 100 */, unchecked((long) 0x0CE1512E90F4524AL) /* 101 */, + unchecked((long) 0x4E9DD79D5506D35AL) /* 102 */, unchecked((long) 0x258905FAC6CE9779L) /* 103 */, + unchecked((long) 0x2019295B3E109B33L) /* 104 */, unchecked((long) 0xF8A9478B73A054CCL) /* 105 */, + unchecked((long) 0x2924F2F934417EB0L) /* 106 */, unchecked((long) 0x3993357D536D1BC4L) /* 107 */, + unchecked((long) 0x38A81AC21DB6FF8BL) /* 108 */, unchecked((long) 0x47C4FBF17D6016BFL) /* 109 */, + unchecked((long) 0x1E0FAADD7667E3F5L) /* 110 */, unchecked((long) 0x7ABCFF62938BEB96L) /* 111 */, + unchecked((long) 0xA78DAD948FC179C9L) /* 112 */, unchecked((long) 0x8F1F98B72911E50DL) /* 113 */, + unchecked((long) 0x61E48EAE27121A91L) /* 114 */, unchecked((long) 0x4D62F7AD31859808L) /* 115 */, + unchecked((long) 0xECEBA345EF5CEAEBL) /* 116 */, unchecked((long) 0xF5CEB25EBC9684CEL) /* 117 */, + unchecked((long) 0xF633E20CB7F76221L) /* 118 */, unchecked((long) 0xA32CDF06AB8293E4L) /* 119 */, + unchecked((long) 0x985A202CA5EE2CA4L) /* 120 */, unchecked((long) 0xCF0B8447CC8A8FB1L) /* 121 */, + unchecked((long) 0x9F765244979859A3L) /* 122 */, unchecked((long) 0xA8D516B1A1240017L) /* 123 */, + unchecked((long) 0x0BD7BA3EBB5DC726L) /* 124 */, unchecked((long) 0xE54BCA55B86ADB39L) /* 125 */, + unchecked((long) 0x1D7A3AFD6C478063L) /* 126 */, unchecked((long) 0x519EC608E7669EDDL) /* 127 */, + unchecked((long) 0x0E5715A2D149AA23L) /* 128 */, unchecked((long) 0x177D4571848FF194L) /* 129 */, + unchecked((long) 0xEEB55F3241014C22L) /* 130 */, unchecked((long) 0x0F5E5CA13A6E2EC2L) /* 131 */, + unchecked((long) 0x8029927B75F5C361L) /* 132 */, unchecked((long) 0xAD139FABC3D6E436L) /* 133 */, + unchecked((long) 0x0D5DF1A94CCF402FL) /* 134 */, unchecked((long) 0x3E8BD948BEA5DFC8L) /* 135 */, + unchecked((long) 0xA5A0D357BD3FF77EL) /* 136 */, unchecked((long) 0xA2D12E251F74F645L) /* 137 */, + unchecked((long) 0x66FD9E525E81A082L) /* 138 */, unchecked((long) 0x2E0C90CE7F687A49L) /* 139 */, + unchecked((long) 0xC2E8BCBEBA973BC5L) /* 140 */, unchecked((long) 0x000001BCE509745FL) /* 141 */, + unchecked((long) 0x423777BBE6DAB3D6L) /* 142 */, unchecked((long) 0xD1661C7EAEF06EB5L) /* 143 */, + unchecked((long) 0xA1781F354DAACFD8L) /* 144 */, unchecked((long) 0x2D11284A2B16AFFCL) /* 145 */, + unchecked((long) 0xF1FC4F67FA891D1FL) /* 146 */, unchecked((long) 0x73ECC25DCB920ADAL) /* 147 */, + unchecked((long) 0xAE610C22C2A12651L) /* 148 */, unchecked((long) 0x96E0A810D356B78AL) /* 149 */, + unchecked((long) 0x5A9A381F2FE7870FL) /* 150 */, unchecked((long) 0xD5AD62EDE94E5530L) /* 151 */, + unchecked((long) 0xD225E5E8368D1427L) /* 152 */, unchecked((long) 0x65977B70C7AF4631L) /* 153 */, + unchecked((long) 0x99F889B2DE39D74FL) /* 154 */, unchecked((long) 0x233F30BF54E1D143L) /* 155 */, + unchecked((long) 0x9A9675D3D9A63C97L) /* 156 */, unchecked((long) 0x5470554FF334F9A8L) /* 157 */, + unchecked((long) 0x166ACB744A4F5688L) /* 158 */, unchecked((long) 0x70C74CAAB2E4AEADL) /* 159 */, + unchecked((long) 0xF0D091646F294D12L) /* 160 */, unchecked((long) 0x57B82A89684031D1L) /* 161 */, + unchecked((long) 0xEFD95A5A61BE0B6BL) /* 162 */, unchecked((long) 0x2FBD12E969F2F29AL) /* 163 */, + unchecked((long) 0x9BD37013FEFF9FE8L) /* 164 */, unchecked((long) 0x3F9B0404D6085A06L) /* 165 */, + unchecked((long) 0x4940C1F3166CFE15L) /* 166 */, unchecked((long) 0x09542C4DCDF3DEFBL) /* 167 */, + unchecked((long) 0xB4C5218385CD5CE3L) /* 168 */, unchecked((long) 0xC935B7DC4462A641L) /* 169 */, + unchecked((long) 0x3417F8A68ED3B63FL) /* 170 */, unchecked((long) 0xB80959295B215B40L) /* 171 */, + unchecked((long) 0xF99CDAEF3B8C8572L) /* 172 */, unchecked((long) 0x018C0614F8FCB95DL) /* 173 */, + unchecked((long) 0x1B14ACCD1A3ACDF3L) /* 174 */, unchecked((long) 0x84D471F200BB732DL) /* 175 */, + unchecked((long) 0xC1A3110E95E8DA16L) /* 176 */, unchecked((long) 0x430A7220BF1A82B8L) /* 177 */, + unchecked((long) 0xB77E090D39DF210EL) /* 178 */, unchecked((long) 0x5EF4BD9F3CD05E9DL) /* 179 */, + unchecked((long) 0x9D4FF6DA7E57A444L) /* 180 */, unchecked((long) 0xDA1D60E183D4A5F8L) /* 181 */, + unchecked((long) 0xB287C38417998E47L) /* 182 */, unchecked((long) 0xFE3EDC121BB31886L) /* 183 */, + unchecked((long) 0xC7FE3CCC980CCBEFL) /* 184 */, unchecked((long) 0xE46FB590189BFD03L) /* 185 */, + unchecked((long) 0x3732FD469A4C57DCL) /* 186 */, unchecked((long) 0x7EF700A07CF1AD65L) /* 187 */, + unchecked((long) 0x59C64468A31D8859L) /* 188 */, unchecked((long) 0x762FB0B4D45B61F6L) /* 189 */, + unchecked((long) 0x155BAED099047718L) /* 190 */, unchecked((long) 0x68755E4C3D50BAA6L) /* 191 */, + unchecked((long) 0xE9214E7F22D8B4DFL) /* 192 */, unchecked((long) 0x2ADDBF532EAC95F4L) /* 193 */, + unchecked((long) 0x32AE3909B4BD0109L) /* 194 */, unchecked((long) 0x834DF537B08E3450L) /* 195 */, + unchecked((long) 0xFA209DA84220728DL) /* 196 */, unchecked((long) 0x9E691D9B9EFE23F7L) /* 197 */, + unchecked((long) 0x0446D288C4AE8D7FL) /* 198 */, unchecked((long) 0x7B4CC524E169785BL) /* 199 */, + unchecked((long) 0x21D87F0135CA1385L) /* 200 */, unchecked((long) 0xCEBB400F137B8AA5L) /* 201 */, + unchecked((long) 0x272E2B66580796BEL) /* 202 */, unchecked((long) 0x3612264125C2B0DEL) /* 203 */, + unchecked((long) 0x057702BDAD1EFBB2L) /* 204 */, unchecked((long) 0xD4BABB8EACF84BE9L) /* 205 */, + unchecked((long) 0x91583139641BC67BL) /* 206 */, unchecked((long) 0x8BDC2DE08036E024L) /* 207 */, + unchecked((long) 0x603C8156F49F68EDL) /* 208 */, unchecked((long) 0xF7D236F7DBEF5111L) /* 209 */, + unchecked((long) 0x9727C4598AD21E80L) /* 210 */, unchecked((long) 0xA08A0896670A5FD7L) /* 211 */, + unchecked((long) 0xCB4A8F4309EBA9CBL) /* 212 */, unchecked((long) 0x81AF564B0F7036A1L) /* 213 */, + unchecked((long) 0xC0B99AA778199ABDL) /* 214 */, unchecked((long) 0x959F1EC83FC8E952L) /* 215 */, + unchecked((long) 0x8C505077794A81B9L) /* 216 */, unchecked((long) 0x3ACAAF8F056338F0L) /* 217 */, + unchecked((long) 0x07B43F50627A6778L) /* 218 */, unchecked((long) 0x4A44AB49F5ECCC77L) /* 219 */, + unchecked((long) 0x3BC3D6E4B679EE98L) /* 220 */, unchecked((long) 0x9CC0D4D1CF14108CL) /* 221 */, + unchecked((long) 0x4406C00B206BC8A0L) /* 222 */, unchecked((long) 0x82A18854C8D72D89L) /* 223 */, + unchecked((long) 0x67E366B35C3C432CL) /* 224 */, unchecked((long) 0xB923DD61102B37F2L) /* 225 */, + unchecked((long) 0x56AB2779D884271DL) /* 226 */, unchecked((long) 0xBE83E1B0FF1525AFL) /* 227 */, + unchecked((long) 0xFB7C65D4217E49A9L) /* 228 */, unchecked((long) 0x6BDBE0E76D48E7D4L) /* 229 */, + unchecked((long) 0x08DF828745D9179EL) /* 230 */, unchecked((long) 0x22EA6A9ADD53BD34L) /* 231 */, + unchecked((long) 0xE36E141C5622200AL) /* 232 */, unchecked((long) 0x7F805D1B8CB750EEL) /* 233 */, + unchecked((long) 0xAFE5C7A59F58E837L) /* 234 */, unchecked((long) 0xE27F996A4FB1C23CL) /* 235 */, + unchecked((long) 0xD3867DFB0775F0D0L) /* 236 */, unchecked((long) 0xD0E673DE6E88891AL) /* 237 */, + unchecked((long) 0x123AEB9EAFB86C25L) /* 238 */, unchecked((long) 0x30F1D5D5C145B895L) /* 239 */, + unchecked((long) 0xBB434A2DEE7269E7L) /* 240 */, unchecked((long) 0x78CB67ECF931FA38L) /* 241 */, + unchecked((long) 0xF33B0372323BBF9CL) /* 242 */, unchecked((long) 0x52D66336FB279C74L) /* 243 */, + unchecked((long) 0x505F33AC0AFB4EAAL) /* 244 */, unchecked((long) 0xE8A5CD99A2CCE187L) /* 245 */, + unchecked((long) 0x534974801E2D30BBL) /* 246 */, unchecked((long) 0x8D2D5711D5876D90L) /* 247 */, + unchecked((long) 0x1F1A412891BC038EL) /* 248 */, unchecked((long) 0xD6E2E71D82E56648L) /* 249 */, + unchecked((long) 0x74036C3A497732B7L) /* 250 */, unchecked((long) 0x89B67ED96361F5ABL) /* 251 */, + unchecked((long) 0xFFED95D8F1EA02A2L) /* 252 */, unchecked((long) 0xE72B3BD61464D43DL) /* 253 */, + unchecked((long) 0xA6300F170BDC4820L) /* 254 */, unchecked((long) 0xEBC18760ED78A77AL) /* 255 */, + }; + + private static readonly long[] t2 = { + unchecked((long) 0xE6A6BE5A05A12138L) /* 256 */, unchecked((long) 0xB5A122A5B4F87C98L) /* 257 */, + unchecked((long) 0x563C6089140B6990L) /* 258 */, unchecked((long) 0x4C46CB2E391F5DD5L) /* 259 */, + unchecked((long) 0xD932ADDBC9B79434L) /* 260 */, unchecked((long) 0x08EA70E42015AFF5L) /* 261 */, + unchecked((long) 0xD765A6673E478CF1L) /* 262 */, unchecked((long) 0xC4FB757EAB278D99L) /* 263 */, + unchecked((long) 0xDF11C6862D6E0692L) /* 264 */, unchecked((long) 0xDDEB84F10D7F3B16L) /* 265 */, + unchecked((long) 0x6F2EF604A665EA04L) /* 266 */, unchecked((long) 0x4A8E0F0FF0E0DFB3L) /* 267 */, + unchecked((long) 0xA5EDEEF83DBCBA51L) /* 268 */, unchecked((long) 0xFC4F0A2A0EA4371EL) /* 269 */, + unchecked((long) 0xE83E1DA85CB38429L) /* 270 */, unchecked((long) 0xDC8FF882BA1B1CE2L) /* 271 */, + unchecked((long) 0xCD45505E8353E80DL) /* 272 */, unchecked((long) 0x18D19A00D4DB0717L) /* 273 */, + unchecked((long) 0x34A0CFEDA5F38101L) /* 274 */, unchecked((long) 0x0BE77E518887CAF2L) /* 275 */, + unchecked((long) 0x1E341438B3C45136L) /* 276 */, unchecked((long) 0xE05797F49089CCF9L) /* 277 */, + unchecked((long) 0xFFD23F9DF2591D14L) /* 278 */, unchecked((long) 0x543DDA228595C5CDL) /* 279 */, + unchecked((long) 0x661F81FD99052A33L) /* 280 */, unchecked((long) 0x8736E641DB0F7B76L) /* 281 */, + unchecked((long) 0x15227725418E5307L) /* 282 */, unchecked((long) 0xE25F7F46162EB2FAL) /* 283 */, + unchecked((long) 0x48A8B2126C13D9FEL) /* 284 */, unchecked((long) 0xAFDC541792E76EEAL) /* 285 */, + unchecked((long) 0x03D912BFC6D1898FL) /* 286 */, unchecked((long) 0x31B1AAFA1B83F51BL) /* 287 */, + unchecked((long) 0xF1AC2796E42AB7D9L) /* 288 */, unchecked((long) 0x40A3A7D7FCD2EBACL) /* 289 */, + unchecked((long) 0x1056136D0AFBBCC5L) /* 290 */, unchecked((long) 0x7889E1DD9A6D0C85L) /* 291 */, + unchecked((long) 0xD33525782A7974AAL) /* 292 */, unchecked((long) 0xA7E25D09078AC09BL) /* 293 */, + unchecked((long) 0xBD4138B3EAC6EDD0L) /* 294 */, unchecked((long) 0x920ABFBE71EB9E70L) /* 295 */, + unchecked((long) 0xA2A5D0F54FC2625CL) /* 296 */, unchecked((long) 0xC054E36B0B1290A3L) /* 297 */, + unchecked((long) 0xF6DD59FF62FE932BL) /* 298 */, unchecked((long) 0x3537354511A8AC7DL) /* 299 */, + unchecked((long) 0xCA845E9172FADCD4L) /* 300 */, unchecked((long) 0x84F82B60329D20DCL) /* 301 */, + unchecked((long) 0x79C62CE1CD672F18L) /* 302 */, unchecked((long) 0x8B09A2ADD124642CL) /* 303 */, + unchecked((long) 0xD0C1E96A19D9E726L) /* 304 */, unchecked((long) 0x5A786A9B4BA9500CL) /* 305 */, + unchecked((long) 0x0E020336634C43F3L) /* 306 */, unchecked((long) 0xC17B474AEB66D822L) /* 307 */, + unchecked((long) 0x6A731AE3EC9BAAC2L) /* 308 */, unchecked((long) 0x8226667AE0840258L) /* 309 */, + unchecked((long) 0x67D4567691CAECA5L) /* 310 */, unchecked((long) 0x1D94155C4875ADB5L) /* 311 */, + unchecked((long) 0x6D00FD985B813FDFL) /* 312 */, unchecked((long) 0x51286EFCB774CD06L) /* 313 */, + unchecked((long) 0x5E8834471FA744AFL) /* 314 */, unchecked((long) 0xF72CA0AEE761AE2EL) /* 315 */, + unchecked((long) 0xBE40E4CDAEE8E09AL) /* 316 */, unchecked((long) 0xE9970BBB5118F665L) /* 317 */, + unchecked((long) 0x726E4BEB33DF1964L) /* 318 */, unchecked((long) 0x703B000729199762L) /* 319 */, + unchecked((long) 0x4631D816F5EF30A7L) /* 320 */, unchecked((long) 0xB880B5B51504A6BEL) /* 321 */, + unchecked((long) 0x641793C37ED84B6CL) /* 322 */, unchecked((long) 0x7B21ED77F6E97D96L) /* 323 */, + unchecked((long) 0x776306312EF96B73L) /* 324 */, unchecked((long) 0xAE528948E86FF3F4L) /* 325 */, + unchecked((long) 0x53DBD7F286A3F8F8L) /* 326 */, unchecked((long) 0x16CADCE74CFC1063L) /* 327 */, + unchecked((long) 0x005C19BDFA52C6DDL) /* 328 */, unchecked((long) 0x68868F5D64D46AD3L) /* 329 */, + unchecked((long) 0x3A9D512CCF1E186AL) /* 330 */, unchecked((long) 0x367E62C2385660AEL) /* 331 */, + unchecked((long) 0xE359E7EA77DCB1D7L) /* 332 */, unchecked((long) 0x526C0773749ABE6EL) /* 333 */, + unchecked((long) 0x735AE5F9D09F734BL) /* 334 */, unchecked((long) 0x493FC7CC8A558BA8L) /* 335 */, + unchecked((long) 0xB0B9C1533041AB45L) /* 336 */, unchecked((long) 0x321958BA470A59BDL) /* 337 */, + unchecked((long) 0x852DB00B5F46C393L) /* 338 */, unchecked((long) 0x91209B2BD336B0E5L) /* 339 */, + unchecked((long) 0x6E604F7D659EF19FL) /* 340 */, unchecked((long) 0xB99A8AE2782CCB24L) /* 341 */, + unchecked((long) 0xCCF52AB6C814C4C7L) /* 342 */, unchecked((long) 0x4727D9AFBE11727BL) /* 343 */, + unchecked((long) 0x7E950D0C0121B34DL) /* 344 */, unchecked((long) 0x756F435670AD471FL) /* 345 */, + unchecked((long) 0xF5ADD442615A6849L) /* 346 */, unchecked((long) 0x4E87E09980B9957AL) /* 347 */, + unchecked((long) 0x2ACFA1DF50AEE355L) /* 348 */, unchecked((long) 0xD898263AFD2FD556L) /* 349 */, + unchecked((long) 0xC8F4924DD80C8FD6L) /* 350 */, unchecked((long) 0xCF99CA3D754A173AL) /* 351 */, + unchecked((long) 0xFE477BACAF91BF3CL) /* 352 */, unchecked((long) 0xED5371F6D690C12DL) /* 353 */, + unchecked((long) 0x831A5C285E687094L) /* 354 */, unchecked((long) 0xC5D3C90A3708A0A4L) /* 355 */, + unchecked((long) 0x0F7F903717D06580L) /* 356 */, unchecked((long) 0x19F9BB13B8FDF27FL) /* 357 */, + unchecked((long) 0xB1BD6F1B4D502843L) /* 358 */, unchecked((long) 0x1C761BA38FFF4012L) /* 359 */, + unchecked((long) 0x0D1530C4E2E21F3BL) /* 360 */, unchecked((long) 0x8943CE69A7372C8AL) /* 361 */, + unchecked((long) 0xE5184E11FEB5CE66L) /* 362 */, unchecked((long) 0x618BDB80BD736621L) /* 363 */, + unchecked((long) 0x7D29BAD68B574D0BL) /* 364 */, unchecked((long) 0x81BB613E25E6FE5BL) /* 365 */, + unchecked((long) 0x071C9C10BC07913FL) /* 366 */, unchecked((long) 0xC7BEEB7909AC2D97L) /* 367 */, + unchecked((long) 0xC3E58D353BC5D757L) /* 368 */, unchecked((long) 0xEB017892F38F61E8L) /* 369 */, + unchecked((long) 0xD4EFFB9C9B1CC21AL) /* 370 */, unchecked((long) 0x99727D26F494F7ABL) /* 371 */, + unchecked((long) 0xA3E063A2956B3E03L) /* 372 */, unchecked((long) 0x9D4A8B9A4AA09C30L) /* 373 */, + unchecked((long) 0x3F6AB7D500090FB4L) /* 374 */, unchecked((long) 0x9CC0F2A057268AC0L) /* 375 */, + unchecked((long) 0x3DEE9D2DEDBF42D1L) /* 376 */, unchecked((long) 0x330F49C87960A972L) /* 377 */, + unchecked((long) 0xC6B2720287421B41L) /* 378 */, unchecked((long) 0x0AC59EC07C00369CL) /* 379 */, + unchecked((long) 0xEF4EAC49CB353425L) /* 380 */, unchecked((long) 0xF450244EEF0129D8L) /* 381 */, + unchecked((long) 0x8ACC46E5CAF4DEB6L) /* 382 */, unchecked((long) 0x2FFEAB63989263F7L) /* 383 */, + unchecked((long) 0x8F7CB9FE5D7A4578L) /* 384 */, unchecked((long) 0x5BD8F7644E634635L) /* 385 */, + unchecked((long) 0x427A7315BF2DC900L) /* 386 */, unchecked((long) 0x17D0C4AA2125261CL) /* 387 */, + unchecked((long) 0x3992486C93518E50L) /* 388 */, unchecked((long) 0xB4CBFEE0A2D7D4C3L) /* 389 */, + unchecked((long) 0x7C75D6202C5DDD8DL) /* 390 */, unchecked((long) 0xDBC295D8E35B6C61L) /* 391 */, + unchecked((long) 0x60B369D302032B19L) /* 392 */, unchecked((long) 0xCE42685FDCE44132L) /* 393 */, + unchecked((long) 0x06F3DDB9DDF65610L) /* 394 */, unchecked((long) 0x8EA4D21DB5E148F0L) /* 395 */, + unchecked((long) 0x20B0FCE62FCD496FL) /* 396 */, unchecked((long) 0x2C1B912358B0EE31L) /* 397 */, + unchecked((long) 0xB28317B818F5A308L) /* 398 */, unchecked((long) 0xA89C1E189CA6D2CFL) /* 399 */, + unchecked((long) 0x0C6B18576AAADBC8L) /* 400 */, unchecked((long) 0xB65DEAA91299FAE3L) /* 401 */, + unchecked((long) 0xFB2B794B7F1027E7L) /* 402 */, unchecked((long) 0x04E4317F443B5BEBL) /* 403 */, + unchecked((long) 0x4B852D325939D0A6L) /* 404 */, unchecked((long) 0xD5AE6BEEFB207FFCL) /* 405 */, + unchecked((long) 0x309682B281C7D374L) /* 406 */, unchecked((long) 0xBAE309A194C3B475L) /* 407 */, + unchecked((long) 0x8CC3F97B13B49F05L) /* 408 */, unchecked((long) 0x98A9422FF8293967L) /* 409 */, + unchecked((long) 0x244B16B01076FF7CL) /* 410 */, unchecked((long) 0xF8BF571C663D67EEL) /* 411 */, + unchecked((long) 0x1F0D6758EEE30DA1L) /* 412 */, unchecked((long) 0xC9B611D97ADEB9B7L) /* 413 */, + unchecked((long) 0xB7AFD5887B6C57A2L) /* 414 */, unchecked((long) 0x6290AE846B984FE1L) /* 415 */, + unchecked((long) 0x94DF4CDEACC1A5FDL) /* 416 */, unchecked((long) 0x058A5BD1C5483AFFL) /* 417 */, + unchecked((long) 0x63166CC142BA3C37L) /* 418 */, unchecked((long) 0x8DB8526EB2F76F40L) /* 419 */, + unchecked((long) 0xE10880036F0D6D4EL) /* 420 */, unchecked((long) 0x9E0523C9971D311DL) /* 421 */, + unchecked((long) 0x45EC2824CC7CD691L) /* 422 */, unchecked((long) 0x575B8359E62382C9L) /* 423 */, + unchecked((long) 0xFA9E400DC4889995L) /* 424 */, unchecked((long) 0xD1823ECB45721568L) /* 425 */, + unchecked((long) 0xDAFD983B8206082FL) /* 426 */, unchecked((long) 0xAA7D29082386A8CBL) /* 427 */, + unchecked((long) 0x269FCD4403B87588L) /* 428 */, unchecked((long) 0x1B91F5F728BDD1E0L) /* 429 */, + unchecked((long) 0xE4669F39040201F6L) /* 430 */, unchecked((long) 0x7A1D7C218CF04ADEL) /* 431 */, + unchecked((long) 0x65623C29D79CE5CEL) /* 432 */, unchecked((long) 0x2368449096C00BB1L) /* 433 */, + unchecked((long) 0xAB9BF1879DA503BAL) /* 434 */, unchecked((long) 0xBC23ECB1A458058EL) /* 435 */, + unchecked((long) 0x9A58DF01BB401ECCL) /* 436 */, unchecked((long) 0xA070E868A85F143DL) /* 437 */, + unchecked((long) 0x4FF188307DF2239EL) /* 438 */, unchecked((long) 0x14D565B41A641183L) /* 439 */, + unchecked((long) 0xEE13337452701602L) /* 440 */, unchecked((long) 0x950E3DCF3F285E09L) /* 441 */, + unchecked((long) 0x59930254B9C80953L) /* 442 */, unchecked((long) 0x3BF299408930DA6DL) /* 443 */, + unchecked((long) 0xA955943F53691387L) /* 444 */, unchecked((long) 0xA15EDECAA9CB8784L) /* 445 */, + unchecked((long) 0x29142127352BE9A0L) /* 446 */, unchecked((long) 0x76F0371FFF4E7AFBL) /* 447 */, + unchecked((long) 0x0239F450274F2228L) /* 448 */, unchecked((long) 0xBB073AF01D5E868BL) /* 449 */, + unchecked((long) 0xBFC80571C10E96C1L) /* 450 */, unchecked((long) 0xD267088568222E23L) /* 451 */, + unchecked((long) 0x9671A3D48E80B5B0L) /* 452 */, unchecked((long) 0x55B5D38AE193BB81L) /* 453 */, + unchecked((long) 0x693AE2D0A18B04B8L) /* 454 */, unchecked((long) 0x5C48B4ECADD5335FL) /* 455 */, + unchecked((long) 0xFD743B194916A1CAL) /* 456 */, unchecked((long) 0x2577018134BE98C4L) /* 457 */, + unchecked((long) 0xE77987E83C54A4ADL) /* 458 */, unchecked((long) 0x28E11014DA33E1B9L) /* 459 */, + unchecked((long) 0x270CC59E226AA213L) /* 460 */, unchecked((long) 0x71495F756D1A5F60L) /* 461 */, + unchecked((long) 0x9BE853FB60AFEF77L) /* 462 */, unchecked((long) 0xADC786A7F7443DBFL) /* 463 */, + unchecked((long) 0x0904456173B29A82L) /* 464 */, unchecked((long) 0x58BC7A66C232BD5EL) /* 465 */, + unchecked((long) 0xF306558C673AC8B2L) /* 466 */, unchecked((long) 0x41F639C6B6C9772AL) /* 467 */, + unchecked((long) 0x216DEFE99FDA35DAL) /* 468 */, unchecked((long) 0x11640CC71C7BE615L) /* 469 */, + unchecked((long) 0x93C43694565C5527L) /* 470 */, unchecked((long) 0xEA038E6246777839L) /* 471 */, + unchecked((long) 0xF9ABF3CE5A3E2469L) /* 472 */, unchecked((long) 0x741E768D0FD312D2L) /* 473 */, + unchecked((long) 0x0144B883CED652C6L) /* 474 */, unchecked((long) 0xC20B5A5BA33F8552L) /* 475 */, + unchecked((long) 0x1AE69633C3435A9DL) /* 476 */, unchecked((long) 0x97A28CA4088CFDECL) /* 477 */, + unchecked((long) 0x8824A43C1E96F420L) /* 478 */, unchecked((long) 0x37612FA66EEEA746L) /* 479 */, + unchecked((long) 0x6B4CB165F9CF0E5AL) /* 480 */, unchecked((long) 0x43AA1C06A0ABFB4AL) /* 481 */, + unchecked((long) 0x7F4DC26FF162796BL) /* 482 */, unchecked((long) 0x6CBACC8E54ED9B0FL) /* 483 */, + unchecked((long) 0xA6B7FFEFD2BB253EL) /* 484 */, unchecked((long) 0x2E25BC95B0A29D4FL) /* 485 */, + unchecked((long) 0x86D6A58BDEF1388CL) /* 486 */, unchecked((long) 0xDED74AC576B6F054L) /* 487 */, + unchecked((long) 0x8030BDBC2B45805DL) /* 488 */, unchecked((long) 0x3C81AF70E94D9289L) /* 489 */, + unchecked((long) 0x3EFF6DDA9E3100DBL) /* 490 */, unchecked((long) 0xB38DC39FDFCC8847L) /* 491 */, + unchecked((long) 0x123885528D17B87EL) /* 492 */, unchecked((long) 0xF2DA0ED240B1B642L) /* 493 */, + unchecked((long) 0x44CEFADCD54BF9A9L) /* 494 */, unchecked((long) 0x1312200E433C7EE6L) /* 495 */, + unchecked((long) 0x9FFCC84F3A78C748L) /* 496 */, unchecked((long) 0xF0CD1F72248576BBL) /* 497 */, + unchecked((long) 0xEC6974053638CFE4L) /* 498 */, unchecked((long) 0x2BA7B67C0CEC4E4CL) /* 499 */, + unchecked((long) 0xAC2F4DF3E5CE32EDL) /* 500 */, unchecked((long) 0xCB33D14326EA4C11L) /* 501 */, + unchecked((long) 0xA4E9044CC77E58BCL) /* 502 */, unchecked((long) 0x5F513293D934FCEFL) /* 503 */, + unchecked((long) 0x5DC9645506E55444L) /* 504 */, unchecked((long) 0x50DE418F317DE40AL) /* 505 */, + unchecked((long) 0x388CB31A69DDE259L) /* 506 */, unchecked((long) 0x2DB4A83455820A86L) /* 507 */, + unchecked((long) 0x9010A91E84711AE9L) /* 508 */, unchecked((long) 0x4DF7F0B7B1498371L) /* 509 */, + unchecked((long) 0xD62A2EABC0977179L) /* 510 */, unchecked((long) 0x22FAC097AA8D5C0EL) /* 511 */, + }; + + private static readonly long[] t3 = { + unchecked((long) 0xF49FCC2FF1DAF39BL) /* 512 */, unchecked((long) 0x487FD5C66FF29281L) /* 513 */, + unchecked((long) 0xE8A30667FCDCA83FL) /* 514 */, unchecked((long) 0x2C9B4BE3D2FCCE63L) /* 515 */, + unchecked((long) 0xDA3FF74B93FBBBC2L) /* 516 */, unchecked((long) 0x2FA165D2FE70BA66L) /* 517 */, + unchecked((long) 0xA103E279970E93D4L) /* 518 */, unchecked((long) 0xBECDEC77B0E45E71L) /* 519 */, + unchecked((long) 0xCFB41E723985E497L) /* 520 */, unchecked((long) 0xB70AAA025EF75017L) /* 521 */, + unchecked((long) 0xD42309F03840B8E0L) /* 522 */, unchecked((long) 0x8EFC1AD035898579L) /* 523 */, + unchecked((long) 0x96C6920BE2B2ABC5L) /* 524 */, unchecked((long) 0x66AF4163375A9172L) /* 525 */, + unchecked((long) 0x2174ABDCCA7127FBL) /* 526 */, unchecked((long) 0xB33CCEA64A72FF41L) /* 527 */, + unchecked((long) 0xF04A4933083066A5L) /* 528 */, unchecked((long) 0x8D970ACDD7289AF5L) /* 529 */, + unchecked((long) 0x8F96E8E031C8C25EL) /* 530 */, unchecked((long) 0xF3FEC02276875D47L) /* 531 */, + unchecked((long) 0xEC7BF310056190DDL) /* 532 */, unchecked((long) 0xF5ADB0AEBB0F1491L) /* 533 */, + unchecked((long) 0x9B50F8850FD58892L) /* 534 */, unchecked((long) 0x4975488358B74DE8L) /* 535 */, + unchecked((long) 0xA3354FF691531C61L) /* 536 */, unchecked((long) 0x0702BBE481D2C6EEL) /* 537 */, + unchecked((long) 0x89FB24057DEDED98L) /* 538 */, unchecked((long) 0xAC3075138596E902L) /* 539 */, + unchecked((long) 0x1D2D3580172772EDL) /* 540 */, unchecked((long) 0xEB738FC28E6BC30DL) /* 541 */, + unchecked((long) 0x5854EF8F63044326L) /* 542 */, unchecked((long) 0x9E5C52325ADD3BBEL) /* 543 */, + unchecked((long) 0x90AA53CF325C4623L) /* 544 */, unchecked((long) 0xC1D24D51349DD067L) /* 545 */, + unchecked((long) 0x2051CFEEA69EA624L) /* 546 */, unchecked((long) 0x13220F0A862E7E4FL) /* 547 */, + unchecked((long) 0xCE39399404E04864L) /* 548 */, unchecked((long) 0xD9C42CA47086FCB7L) /* 549 */, + unchecked((long) 0x685AD2238A03E7CCL) /* 550 */, unchecked((long) 0x066484B2AB2FF1DBL) /* 551 */, + unchecked((long) 0xFE9D5D70EFBF79ECL) /* 552 */, unchecked((long) 0x5B13B9DD9C481854L) /* 553 */, + unchecked((long) 0x15F0D475ED1509ADL) /* 554 */, unchecked((long) 0x0BEBCD060EC79851L) /* 555 */, + unchecked((long) 0xD58C6791183AB7F8L) /* 556 */, unchecked((long) 0xD1187C5052F3EEE4L) /* 557 */, + unchecked((long) 0xC95D1192E54E82FFL) /* 558 */, unchecked((long) 0x86EEA14CB9AC6CA2L) /* 559 */, + unchecked((long) 0x3485BEB153677D5DL) /* 560 */, unchecked((long) 0xDD191D781F8C492AL) /* 561 */, + unchecked((long) 0xF60866BAA784EBF9L) /* 562 */, unchecked((long) 0x518F643BA2D08C74L) /* 563 */, + unchecked((long) 0x8852E956E1087C22L) /* 564 */, unchecked((long) 0xA768CB8DC410AE8DL) /* 565 */, + unchecked((long) 0x38047726BFEC8E1AL) /* 566 */, unchecked((long) 0xA67738B4CD3B45AAL) /* 567 */, + unchecked((long) 0xAD16691CEC0DDE19L) /* 568 */, unchecked((long) 0xC6D4319380462E07L) /* 569 */, + unchecked((long) 0xC5A5876D0BA61938L) /* 570 */, unchecked((long) 0x16B9FA1FA58FD840L) /* 571 */, + unchecked((long) 0x188AB1173CA74F18L) /* 572 */, unchecked((long) 0xABDA2F98C99C021FL) /* 573 */, + unchecked((long) 0x3E0580AB134AE816L) /* 574 */, unchecked((long) 0x5F3B05B773645ABBL) /* 575 */, + unchecked((long) 0x2501A2BE5575F2F6L) /* 576 */, unchecked((long) 0x1B2F74004E7E8BA9L) /* 577 */, + unchecked((long) 0x1CD7580371E8D953L) /* 578 */, unchecked((long) 0x7F6ED89562764E30L) /* 579 */, + unchecked((long) 0xB15926FF596F003DL) /* 580 */, unchecked((long) 0x9F65293DA8C5D6B9L) /* 581 */, + unchecked((long) 0x6ECEF04DD690F84CL) /* 582 */, unchecked((long) 0x4782275FFF33AF88L) /* 583 */, + unchecked((long) 0xE41433083F820801L) /* 584 */, unchecked((long) 0xFD0DFE409A1AF9B5L) /* 585 */, + unchecked((long) 0x4325A3342CDB396BL) /* 586 */, unchecked((long) 0x8AE77E62B301B252L) /* 587 */, + unchecked((long) 0xC36F9E9F6655615AL) /* 588 */, unchecked((long) 0x85455A2D92D32C09L) /* 589 */, + unchecked((long) 0xF2C7DEA949477485L) /* 590 */, unchecked((long) 0x63CFB4C133A39EBAL) /* 591 */, + unchecked((long) 0x83B040CC6EBC5462L) /* 592 */, unchecked((long) 0x3B9454C8FDB326B0L) /* 593 */, + unchecked((long) 0x56F56A9E87FFD78CL) /* 594 */, unchecked((long) 0x2DC2940D99F42BC6L) /* 595 */, + unchecked((long) 0x98F7DF096B096E2DL) /* 596 */, unchecked((long) 0x19A6E01E3AD852BFL) /* 597 */, + unchecked((long) 0x42A99CCBDBD4B40BL) /* 598 */, unchecked((long) 0xA59998AF45E9C559L) /* 599 */, + unchecked((long) 0x366295E807D93186L) /* 600 */, unchecked((long) 0x6B48181BFAA1F773L) /* 601 */, + unchecked((long) 0x1FEC57E2157A0A1DL) /* 602 */, unchecked((long) 0x4667446AF6201AD5L) /* 603 */, + unchecked((long) 0xE615EBCACFB0F075L) /* 604 */, unchecked((long) 0xB8F31F4F68290778L) /* 605 */, + unchecked((long) 0x22713ED6CE22D11EL) /* 606 */, unchecked((long) 0x3057C1A72EC3C93BL) /* 607 */, + unchecked((long) 0xCB46ACC37C3F1F2FL) /* 608 */, unchecked((long) 0xDBB893FD02AAF50EL) /* 609 */, + unchecked((long) 0x331FD92E600B9FCFL) /* 610 */, unchecked((long) 0xA498F96148EA3AD6L) /* 611 */, + unchecked((long) 0xA8D8426E8B6A83EAL) /* 612 */, unchecked((long) 0xA089B274B7735CDCL) /* 613 */, + unchecked((long) 0x87F6B3731E524A11L) /* 614 */, unchecked((long) 0x118808E5CBC96749L) /* 615 */, + unchecked((long) 0x9906E4C7B19BD394L) /* 616 */, unchecked((long) 0xAFED7F7E9B24A20CL) /* 617 */, + unchecked((long) 0x6509EADEEB3644A7L) /* 618 */, unchecked((long) 0x6C1EF1D3E8EF0EDEL) /* 619 */, + unchecked((long) 0xB9C97D43E9798FB4L) /* 620 */, unchecked((long) 0xA2F2D784740C28A3L) /* 621 */, + unchecked((long) 0x7B8496476197566FL) /* 622 */, unchecked((long) 0x7A5BE3E6B65F069DL) /* 623 */, + unchecked((long) 0xF96330ED78BE6F10L) /* 624 */, unchecked((long) 0xEEE60DE77A076A15L) /* 625 */, + unchecked((long) 0x2B4BEE4AA08B9BD0L) /* 626 */, unchecked((long) 0x6A56A63EC7B8894EL) /* 627 */, + unchecked((long) 0x02121359BA34FEF4L) /* 628 */, unchecked((long) 0x4CBF99F8283703FCL) /* 629 */, + unchecked((long) 0x398071350CAF30C8L) /* 630 */, unchecked((long) 0xD0A77A89F017687AL) /* 631 */, + unchecked((long) 0xF1C1A9EB9E423569L) /* 632 */, unchecked((long) 0x8C7976282DEE8199L) /* 633 */, + unchecked((long) 0x5D1737A5DD1F7ABDL) /* 634 */, unchecked((long) 0x4F53433C09A9FA80L) /* 635 */, + unchecked((long) 0xFA8B0C53DF7CA1D9L) /* 636 */, unchecked((long) 0x3FD9DCBC886CCB77L) /* 637 */, + unchecked((long) 0xC040917CA91B4720L) /* 638 */, unchecked((long) 0x7DD00142F9D1DCDFL) /* 639 */, + unchecked((long) 0x8476FC1D4F387B58L) /* 640 */, unchecked((long) 0x23F8E7C5F3316503L) /* 641 */, + unchecked((long) 0x032A2244E7E37339L) /* 642 */, unchecked((long) 0x5C87A5D750F5A74BL) /* 643 */, + unchecked((long) 0x082B4CC43698992EL) /* 644 */, unchecked((long) 0xDF917BECB858F63CL) /* 645 */, + unchecked((long) 0x3270B8FC5BF86DDAL) /* 646 */, unchecked((long) 0x10AE72BB29B5DD76L) /* 647 */, + unchecked((long) 0x576AC94E7700362BL) /* 648 */, unchecked((long) 0x1AD112DAC61EFB8FL) /* 649 */, + unchecked((long) 0x691BC30EC5FAA427L) /* 650 */, unchecked((long) 0xFF246311CC327143L) /* 651 */, + unchecked((long) 0x3142368E30E53206L) /* 652 */, unchecked((long) 0x71380E31E02CA396L) /* 653 */, + unchecked((long) 0x958D5C960AAD76F1L) /* 654 */, unchecked((long) 0xF8D6F430C16DA536L) /* 655 */, + unchecked((long) 0xC8FFD13F1BE7E1D2L) /* 656 */, unchecked((long) 0x7578AE66004DDBE1L) /* 657 */, + unchecked((long) 0x05833F01067BE646L) /* 658 */, unchecked((long) 0xBB34B5AD3BFE586DL) /* 659 */, + unchecked((long) 0x095F34C9A12B97F0L) /* 660 */, unchecked((long) 0x247AB64525D60CA8L) /* 661 */, + unchecked((long) 0xDCDBC6F3017477D1L) /* 662 */, unchecked((long) 0x4A2E14D4DECAD24DL) /* 663 */, + unchecked((long) 0xBDB5E6D9BE0A1EEBL) /* 664 */, unchecked((long) 0x2A7E70F7794301ABL) /* 665 */, + unchecked((long) 0xDEF42D8A270540FDL) /* 666 */, unchecked((long) 0x01078EC0A34C22C1L) /* 667 */, + unchecked((long) 0xE5DE511AF4C16387L) /* 668 */, unchecked((long) 0x7EBB3A52BD9A330AL) /* 669 */, + unchecked((long) 0x77697857AA7D6435L) /* 670 */, unchecked((long) 0x004E831603AE4C32L) /* 671 */, + unchecked((long) 0xE7A21020AD78E312L) /* 672 */, unchecked((long) 0x9D41A70C6AB420F2L) /* 673 */, + unchecked((long) 0x28E06C18EA1141E6L) /* 674 */, unchecked((long) 0xD2B28CBD984F6B28L) /* 675 */, + unchecked((long) 0x26B75F6C446E9D83L) /* 676 */, unchecked((long) 0xBA47568C4D418D7FL) /* 677 */, + unchecked((long) 0xD80BADBFE6183D8EL) /* 678 */, unchecked((long) 0x0E206D7F5F166044L) /* 679 */, + unchecked((long) 0xE258A43911CBCA3EL) /* 680 */, unchecked((long) 0x723A1746B21DC0BCL) /* 681 */, + unchecked((long) 0xC7CAA854F5D7CDD3L) /* 682 */, unchecked((long) 0x7CAC32883D261D9CL) /* 683 */, + unchecked((long) 0x7690C26423BA942CL) /* 684 */, unchecked((long) 0x17E55524478042B8L) /* 685 */, + unchecked((long) 0xE0BE477656A2389FL) /* 686 */, unchecked((long) 0x4D289B5E67AB2DA0L) /* 687 */, + unchecked((long) 0x44862B9C8FBBFD31L) /* 688 */, unchecked((long) 0xB47CC8049D141365L) /* 689 */, + unchecked((long) 0x822C1B362B91C793L) /* 690 */, unchecked((long) 0x4EB14655FB13DFD8L) /* 691 */, + unchecked((long) 0x1ECBBA0714E2A97BL) /* 692 */, unchecked((long) 0x6143459D5CDE5F14L) /* 693 */, + unchecked((long) 0x53A8FBF1D5F0AC89L) /* 694 */, unchecked((long) 0x97EA04D81C5E5B00L) /* 695 */, + unchecked((long) 0x622181A8D4FDB3F3L) /* 696 */, unchecked((long) 0xE9BCD341572A1208L) /* 697 */, + unchecked((long) 0x1411258643CCE58AL) /* 698 */, unchecked((long) 0x9144C5FEA4C6E0A4L) /* 699 */, + unchecked((long) 0x0D33D06565CF620FL) /* 700 */, unchecked((long) 0x54A48D489F219CA1L) /* 701 */, + unchecked((long) 0xC43E5EAC6D63C821L) /* 702 */, unchecked((long) 0xA9728B3A72770DAFL) /* 703 */, + unchecked((long) 0xD7934E7B20DF87EFL) /* 704 */, unchecked((long) 0xE35503B61A3E86E5L) /* 705 */, + unchecked((long) 0xCAE321FBC819D504L) /* 706 */, unchecked((long) 0x129A50B3AC60BFA6L) /* 707 */, + unchecked((long) 0xCD5E68EA7E9FB6C3L) /* 708 */, unchecked((long) 0xB01C90199483B1C7L) /* 709 */, + unchecked((long) 0x3DE93CD5C295376CL) /* 710 */, unchecked((long) 0xAED52EDF2AB9AD13L) /* 711 */, + unchecked((long) 0x2E60F512C0A07884L) /* 712 */, unchecked((long) 0xBC3D86A3E36210C9L) /* 713 */, + unchecked((long) 0x35269D9B163951CEL) /* 714 */, unchecked((long) 0x0C7D6E2AD0CDB5FAL) /* 715 */, + unchecked((long) 0x59E86297D87F5733L) /* 716 */, unchecked((long) 0x298EF221898DB0E7L) /* 717 */, + unchecked((long) 0x55000029D1A5AA7EL) /* 718 */, unchecked((long) 0x8BC08AE1B5061B45L) /* 719 */, + unchecked((long) 0xC2C31C2B6C92703AL) /* 720 */, unchecked((long) 0x94CC596BAF25EF42L) /* 721 */, + unchecked((long) 0x0A1D73DB22540456L) /* 722 */, unchecked((long) 0x04B6A0F9D9C4179AL) /* 723 */, + unchecked((long) 0xEFFDAFA2AE3D3C60L) /* 724 */, unchecked((long) 0xF7C8075BB49496C4L) /* 725 */, + unchecked((long) 0x9CC5C7141D1CD4E3L) /* 726 */, unchecked((long) 0x78BD1638218E5534L) /* 727 */, + unchecked((long) 0xB2F11568F850246AL) /* 728 */, unchecked((long) 0xEDFABCFA9502BC29L) /* 729 */, + unchecked((long) 0x796CE5F2DA23051BL) /* 730 */, unchecked((long) 0xAAE128B0DC93537CL) /* 731 */, + unchecked((long) 0x3A493DA0EE4B29AEL) /* 732 */, unchecked((long) 0xB5DF6B2C416895D7L) /* 733 */, + unchecked((long) 0xFCABBD25122D7F37L) /* 734 */, unchecked((long) 0x70810B58105DC4B1L) /* 735 */, + unchecked((long) 0xE10FDD37F7882A90L) /* 736 */, unchecked((long) 0x524DCAB5518A3F5CL) /* 737 */, + unchecked((long) 0x3C9E85878451255BL) /* 738 */, unchecked((long) 0x4029828119BD34E2L) /* 739 */, + unchecked((long) 0x74A05B6F5D3CECCBL) /* 740 */, unchecked((long) 0xB610021542E13ECAL) /* 741 */, + unchecked((long) 0x0FF979D12F59E2ACL) /* 742 */, unchecked((long) 0x6037DA27E4F9CC50L) /* 743 */, + unchecked((long) 0x5E92975A0DF1847DL) /* 744 */, unchecked((long) 0xD66DE190D3E623FEL) /* 745 */, + unchecked((long) 0x5032D6B87B568048L) /* 746 */, unchecked((long) 0x9A36B7CE8235216EL) /* 747 */, + unchecked((long) 0x80272A7A24F64B4AL) /* 748 */, unchecked((long) 0x93EFED8B8C6916F7L) /* 749 */, + unchecked((long) 0x37DDBFF44CCE1555L) /* 750 */, unchecked((long) 0x4B95DB5D4B99BD25L) /* 751 */, + unchecked((long) 0x92D3FDA169812FC0L) /* 752 */, unchecked((long) 0xFB1A4A9A90660BB6L) /* 753 */, + unchecked((long) 0x730C196946A4B9B2L) /* 754 */, unchecked((long) 0x81E289AA7F49DA68L) /* 755 */, + unchecked((long) 0x64669A0F83B1A05FL) /* 756 */, unchecked((long) 0x27B3FF7D9644F48BL) /* 757 */, + unchecked((long) 0xCC6B615C8DB675B3L) /* 758 */, unchecked((long) 0x674F20B9BCEBBE95L) /* 759 */, + unchecked((long) 0x6F31238275655982L) /* 760 */, unchecked((long) 0x5AE488713E45CF05L) /* 761 */, + unchecked((long) 0xBF619F9954C21157L) /* 762 */, unchecked((long) 0xEABAC46040A8EAE9L) /* 763 */, + unchecked((long) 0x454C6FE9F2C0C1CDL) /* 764 */, unchecked((long) 0x419CF6496412691CL) /* 765 */, + unchecked((long) 0xD3DC3BEF265B0F70L) /* 766 */, unchecked((long) 0x6D0E60F5C3578A9EL) /* 767 */, + }; + + private static readonly long[] t4 = { + unchecked((long) 0x5B0E608526323C55L) /* 768 */, unchecked((long) 0x1A46C1A9FA1B59F5L) /* 769 */, + unchecked((long) 0xA9E245A17C4C8FFAL) /* 770 */, unchecked((long) 0x65CA5159DB2955D7L) /* 771 */, + unchecked((long) 0x05DB0A76CE35AFC2L) /* 772 */, unchecked((long) 0x81EAC77EA9113D45L) /* 773 */, + unchecked((long) 0x528EF88AB6AC0A0DL) /* 774 */, unchecked((long) 0xA09EA253597BE3FFL) /* 775 */, + unchecked((long) 0x430DDFB3AC48CD56L) /* 776 */, unchecked((long) 0xC4B3A67AF45CE46FL) /* 777 */, + unchecked((long) 0x4ECECFD8FBE2D05EL) /* 778 */, unchecked((long) 0x3EF56F10B39935F0L) /* 779 */, + unchecked((long) 0x0B22D6829CD619C6L) /* 780 */, unchecked((long) 0x17FD460A74DF2069L) /* 781 */, + unchecked((long) 0x6CF8CC8E8510ED40L) /* 782 */, unchecked((long) 0xD6C824BF3A6ECAA7L) /* 783 */, + unchecked((long) 0x61243D581A817049L) /* 784 */, unchecked((long) 0x048BACB6BBC163A2L) /* 785 */, + unchecked((long) 0xD9A38AC27D44CC32L) /* 786 */, unchecked((long) 0x7FDDFF5BAAF410ABL) /* 787 */, + unchecked((long) 0xAD6D495AA804824BL) /* 788 */, unchecked((long) 0xE1A6A74F2D8C9F94L) /* 789 */, + unchecked((long) 0xD4F7851235DEE8E3L) /* 790 */, unchecked((long) 0xFD4B7F886540D893L) /* 791 */, + unchecked((long) 0x247C20042AA4BFDAL) /* 792 */, unchecked((long) 0x096EA1C517D1327CL) /* 793 */, + unchecked((long) 0xD56966B4361A6685L) /* 794 */, unchecked((long) 0x277DA5C31221057DL) /* 795 */, + unchecked((long) 0x94D59893A43ACFF7L) /* 796 */, unchecked((long) 0x64F0C51CCDC02281L) /* 797 */, + unchecked((long) 0x3D33BCC4FF6189DBL) /* 798 */, unchecked((long) 0xE005CB184CE66AF1L) /* 799 */, + unchecked((long) 0xFF5CCD1D1DB99BEAL) /* 800 */, unchecked((long) 0xB0B854A7FE42980FL) /* 801 */, + unchecked((long) 0x7BD46A6A718D4B9FL) /* 802 */, unchecked((long) 0xD10FA8CC22A5FD8CL) /* 803 */, + unchecked((long) 0xD31484952BE4BD31L) /* 804 */, unchecked((long) 0xC7FA975FCB243847L) /* 805 */, + unchecked((long) 0x4886ED1E5846C407L) /* 806 */, unchecked((long) 0x28CDDB791EB70B04L) /* 807 */, + unchecked((long) 0xC2B00BE2F573417FL) /* 808 */, unchecked((long) 0x5C9590452180F877L) /* 809 */, + unchecked((long) 0x7A6BDDFFF370EB00L) /* 810 */, unchecked((long) 0xCE509E38D6D9D6A4L) /* 811 */, + unchecked((long) 0xEBEB0F00647FA702L) /* 812 */, unchecked((long) 0x1DCC06CF76606F06L) /* 813 */, + unchecked((long) 0xE4D9F28BA286FF0AL) /* 814 */, unchecked((long) 0xD85A305DC918C262L) /* 815 */, + unchecked((long) 0x475B1D8732225F54L) /* 816 */, unchecked((long) 0x2D4FB51668CCB5FEL) /* 817 */, + unchecked((long) 0xA679B9D9D72BBA20L) /* 818 */, unchecked((long) 0x53841C0D912D43A5L) /* 819 */, + unchecked((long) 0x3B7EAA48BF12A4E8L) /* 820 */, unchecked((long) 0x781E0E47F22F1DDFL) /* 821 */, + unchecked((long) 0xEFF20CE60AB50973L) /* 822 */, unchecked((long) 0x20D261D19DFFB742L) /* 823 */, + unchecked((long) 0x16A12B03062A2E39L) /* 824 */, unchecked((long) 0x1960EB2239650495L) /* 825 */, + unchecked((long) 0x251C16FED50EB8B8L) /* 826 */, unchecked((long) 0x9AC0C330F826016EL) /* 827 */, + unchecked((long) 0xED152665953E7671L) /* 828 */, unchecked((long) 0x02D63194A6369570L) /* 829 */, + unchecked((long) 0x5074F08394B1C987L) /* 830 */, unchecked((long) 0x70BA598C90B25CE1L) /* 831 */, + unchecked((long) 0x794A15810B9742F6L) /* 832 */, unchecked((long) 0x0D5925E9FCAF8C6CL) /* 833 */, + unchecked((long) 0x3067716CD868744EL) /* 834 */, unchecked((long) 0x910AB077E8D7731BL) /* 835 */, + unchecked((long) 0x6A61BBDB5AC42F61L) /* 836 */, unchecked((long) 0x93513EFBF0851567L) /* 837 */, + unchecked((long) 0xF494724B9E83E9D5L) /* 838 */, unchecked((long) 0xE887E1985C09648DL) /* 839 */, + unchecked((long) 0x34B1D3C675370CFDL) /* 840 */, unchecked((long) 0xDC35E433BC0D255DL) /* 841 */, + unchecked((long) 0xD0AAB84234131BE0L) /* 842 */, unchecked((long) 0x08042A50B48B7EAFL) /* 843 */, + unchecked((long) 0x9997C4EE44A3AB35L) /* 844 */, unchecked((long) 0x829A7B49201799D0L) /* 845 */, + unchecked((long) 0x263B8307B7C54441L) /* 846 */, unchecked((long) 0x752F95F4FD6A6CA6L) /* 847 */, + unchecked((long) 0x927217402C08C6E5L) /* 848 */, unchecked((long) 0x2A8AB754A795D9EEL) /* 849 */, + unchecked((long) 0xA442F7552F72943DL) /* 850 */, unchecked((long) 0x2C31334E19781208L) /* 851 */, + unchecked((long) 0x4FA98D7CEAEE6291L) /* 852 */, unchecked((long) 0x55C3862F665DB309L) /* 853 */, + unchecked((long) 0xBD0610175D53B1F3L) /* 854 */, unchecked((long) 0x46FE6CB840413F27L) /* 855 */, + unchecked((long) 0x3FE03792DF0CFA59L) /* 856 */, unchecked((long) 0xCFE700372EB85E8FL) /* 857 */, + unchecked((long) 0xA7BE29E7ADBCE118L) /* 858 */, unchecked((long) 0xE544EE5CDE8431DDL) /* 859 */, + unchecked((long) 0x8A781B1B41F1873EL) /* 860 */, unchecked((long) 0xA5C94C78A0D2F0E7L) /* 861 */, + unchecked((long) 0x39412E2877B60728L) /* 862 */, unchecked((long) 0xA1265EF3AFC9A62CL) /* 863 */, + unchecked((long) 0xBCC2770C6A2506C5L) /* 864 */, unchecked((long) 0x3AB66DD5DCE1CE12L) /* 865 */, + unchecked((long) 0xE65499D04A675B37L) /* 866 */, unchecked((long) 0x7D8F523481BFD216L) /* 867 */, + unchecked((long) 0x0F6F64FCEC15F389L) /* 868 */, unchecked((long) 0x74EFBE618B5B13C8L) /* 869 */, + unchecked((long) 0xACDC82B714273E1DL) /* 870 */, unchecked((long) 0xDD40BFE003199D17L) /* 871 */, + unchecked((long) 0x37E99257E7E061F8L) /* 872 */, unchecked((long) 0xFA52626904775AAAL) /* 873 */, + unchecked((long) 0x8BBBF63A463D56F9L) /* 874 */, unchecked((long) 0xF0013F1543A26E64L) /* 875 */, + unchecked((long) 0xA8307E9F879EC898L) /* 876 */, unchecked((long) 0xCC4C27A4150177CCL) /* 877 */, + unchecked((long) 0x1B432F2CCA1D3348L) /* 878 */, unchecked((long) 0xDE1D1F8F9F6FA013L) /* 879 */, + unchecked((long) 0x606602A047A7DDD6L) /* 880 */, unchecked((long) 0xD237AB64CC1CB2C7L) /* 881 */, + unchecked((long) 0x9B938E7225FCD1D3L) /* 882 */, unchecked((long) 0xEC4E03708E0FF476L) /* 883 */, + unchecked((long) 0xFEB2FBDA3D03C12DL) /* 884 */, unchecked((long) 0xAE0BCED2EE43889AL) /* 885 */, + unchecked((long) 0x22CB8923EBFB4F43L) /* 886 */, unchecked((long) 0x69360D013CF7396DL) /* 887 */, + unchecked((long) 0x855E3602D2D4E022L) /* 888 */, unchecked((long) 0x073805BAD01F784CL) /* 889 */, + unchecked((long) 0x33E17A133852F546L) /* 890 */, unchecked((long) 0xDF4874058AC7B638L) /* 891 */, + unchecked((long) 0xBA92B29C678AA14AL) /* 892 */, unchecked((long) 0x0CE89FC76CFAADCDL) /* 893 */, + unchecked((long) 0x5F9D4E0908339E34L) /* 894 */, unchecked((long) 0xF1AFE9291F5923B9L) /* 895 */, + unchecked((long) 0x6E3480F60F4A265FL) /* 896 */, unchecked((long) 0xEEBF3A2AB29B841CL) /* 897 */, + unchecked((long) 0xE21938A88F91B4ADL) /* 898 */, unchecked((long) 0x57DFEFF845C6D3C3L) /* 899 */, + unchecked((long) 0x2F006B0BF62CAAF2L) /* 900 */, unchecked((long) 0x62F479EF6F75EE78L) /* 901 */, + unchecked((long) 0x11A55AD41C8916A9L) /* 902 */, unchecked((long) 0xF229D29084FED453L) /* 903 */, + unchecked((long) 0x42F1C27B16B000E6L) /* 904 */, unchecked((long) 0x2B1F76749823C074L) /* 905 */, + unchecked((long) 0x4B76ECA3C2745360L) /* 906 */, unchecked((long) 0x8C98F463B91691BDL) /* 907 */, + unchecked((long) 0x14BCC93CF1ADE66AL) /* 908 */, unchecked((long) 0x8885213E6D458397L) /* 909 */, + unchecked((long) 0x8E177DF0274D4711L) /* 910 */, unchecked((long) 0xB49B73B5503F2951L) /* 911 */, + unchecked((long) 0x10168168C3F96B6BL) /* 912 */, unchecked((long) 0x0E3D963B63CAB0AEL) /* 913 */, + unchecked((long) 0x8DFC4B5655A1DB14L) /* 914 */, unchecked((long) 0xF789F1356E14DE5CL) /* 915 */, + unchecked((long) 0x683E68AF4E51DAC1L) /* 916 */, unchecked((long) 0xC9A84F9D8D4B0FD9L) /* 917 */, + unchecked((long) 0x3691E03F52A0F9D1L) /* 918 */, unchecked((long) 0x5ED86E46E1878E80L) /* 919 */, + unchecked((long) 0x3C711A0E99D07150L) /* 920 */, unchecked((long) 0x5A0865B20C4E9310L) /* 921 */, + unchecked((long) 0x56FBFC1FE4F0682EL) /* 922 */, unchecked((long) 0xEA8D5DE3105EDF9BL) /* 923 */, + unchecked((long) 0x71ABFDB12379187AL) /* 924 */, unchecked((long) 0x2EB99DE1BEE77B9CL) /* 925 */, + unchecked((long) 0x21ECC0EA33CF4523L) /* 926 */, unchecked((long) 0x59A4D7521805C7A1L) /* 927 */, + unchecked((long) 0x3896F5EB56AE7C72L) /* 928 */, unchecked((long) 0xAA638F3DB18F75DCL) /* 929 */, + unchecked((long) 0x9F39358DABE9808EL) /* 930 */, unchecked((long) 0xB7DEFA91C00B72ACL) /* 931 */, + unchecked((long) 0x6B5541FD62492D92L) /* 932 */, unchecked((long) 0x6DC6DEE8F92E4D5BL) /* 933 */, + unchecked((long) 0x353F57ABC4BEEA7EL) /* 934 */, unchecked((long) 0x735769D6DA5690CEL) /* 935 */, + unchecked((long) 0x0A234AA642391484L) /* 936 */, unchecked((long) 0xF6F9508028F80D9DL) /* 937 */, + unchecked((long) 0xB8E319A27AB3F215L) /* 938 */, unchecked((long) 0x31AD9C1151341A4DL) /* 939 */, + unchecked((long) 0x773C22A57BEF5805L) /* 940 */, unchecked((long) 0x45C7561A07968633L) /* 941 */, + unchecked((long) 0xF913DA9E249DBE36L) /* 942 */, unchecked((long) 0xDA652D9B78A64C68L) /* 943 */, + unchecked((long) 0x4C27A97F3BC334EFL) /* 944 */, unchecked((long) 0x76621220E66B17F4L) /* 945 */, + unchecked((long) 0x967743899ACD7D0BL) /* 946 */, unchecked((long) 0xF3EE5BCAE0ED6782L) /* 947 */, + unchecked((long) 0x409F753600C879FCL) /* 948 */, unchecked((long) 0x06D09A39B5926DB6L) /* 949 */, + unchecked((long) 0x6F83AEB0317AC588L) /* 950 */, unchecked((long) 0x01E6CA4A86381F21L) /* 951 */, + unchecked((long) 0x66FF3462D19F3025L) /* 952 */, unchecked((long) 0x72207C24DDFD3BFBL) /* 953 */, + unchecked((long) 0x4AF6B6D3E2ECE2EBL) /* 954 */, unchecked((long) 0x9C994DBEC7EA08DEL) /* 955 */, + unchecked((long) 0x49ACE597B09A8BC4L) /* 956 */, unchecked((long) 0xB38C4766CF0797BAL) /* 957 */, + unchecked((long) 0x131B9373C57C2A75L) /* 958 */, unchecked((long) 0xB1822CCE61931E58L) /* 959 */, + unchecked((long) 0x9D7555B909BA1C0CL) /* 960 */, unchecked((long) 0x127FAFDD937D11D2L) /* 961 */, + unchecked((long) 0x29DA3BADC66D92E4L) /* 962 */, unchecked((long) 0xA2C1D57154C2ECBCL) /* 963 */, + unchecked((long) 0x58C5134D82F6FE24L) /* 964 */, unchecked((long) 0x1C3AE3515B62274FL) /* 965 */, + unchecked((long) 0xE907C82E01CB8126L) /* 966 */, unchecked((long) 0xF8ED091913E37FCBL) /* 967 */, + unchecked((long) 0x3249D8F9C80046C9L) /* 968 */, unchecked((long) 0x80CF9BEDE388FB63L) /* 969 */, + unchecked((long) 0x1881539A116CF19EL) /* 970 */, unchecked((long) 0x5103F3F76BD52457L) /* 971 */, + unchecked((long) 0x15B7E6F5AE47F7A8L) /* 972 */, unchecked((long) 0xDBD7C6DED47E9CCFL) /* 973 */, + unchecked((long) 0x44E55C410228BB1AL) /* 974 */, unchecked((long) 0xB647D4255EDB4E99L) /* 975 */, + unchecked((long) 0x5D11882BB8AAFC30L) /* 976 */, unchecked((long) 0xF5098BBB29D3212AL) /* 977 */, + unchecked((long) 0x8FB5EA14E90296B3L) /* 978 */, unchecked((long) 0x677B942157DD025AL) /* 979 */, + unchecked((long) 0xFB58E7C0A390ACB5L) /* 980 */, unchecked((long) 0x89D3674C83BD4A01L) /* 981 */, + unchecked((long) 0x9E2DA4DF4BF3B93BL) /* 982 */, unchecked((long) 0xFCC41E328CAB4829L) /* 983 */, + unchecked((long) 0x03F38C96BA582C52L) /* 984 */, unchecked((long) 0xCAD1BDBD7FD85DB2L) /* 985 */, + unchecked((long) 0xBBB442C16082AE83L) /* 986 */, unchecked((long) 0xB95FE86BA5DA9AB0L) /* 987 */, + unchecked((long) 0xB22E04673771A93FL) /* 988 */, unchecked((long) 0x845358C9493152D8L) /* 989 */, + unchecked((long) 0xBE2A488697B4541EL) /* 990 */, unchecked((long) 0x95A2DC2DD38E6966L) /* 991 */, + unchecked((long) 0xC02C11AC923C852BL) /* 992 */, unchecked((long) 0x2388B1990DF2A87BL) /* 993 */, + unchecked((long) 0x7C8008FA1B4F37BEL) /* 994 */, unchecked((long) 0x1F70D0C84D54E503L) /* 995 */, + unchecked((long) 0x5490ADEC7ECE57D4L) /* 996 */, unchecked((long) 0x002B3C27D9063A3AL) /* 997 */, + unchecked((long) 0x7EAEA3848030A2BFL) /* 998 */, unchecked((long) 0xC602326DED2003C0L) /* 999 */, + unchecked((long) 0x83A7287D69A94086L) /* 1000 */, unchecked((long) 0xC57A5FCB30F57A8AL) /* 1001 */, + unchecked((long) 0xB56844E479EBE779L) /* 1002 */, unchecked((long) 0xA373B40F05DCBCE9L) /* 1003 */, + unchecked((long) 0xD71A786E88570EE2L) /* 1004 */, unchecked((long) 0x879CBACDBDE8F6A0L) /* 1005 */, + unchecked((long) 0x976AD1BCC164A32FL) /* 1006 */, unchecked((long) 0xAB21E25E9666D78BL) /* 1007 */, + unchecked((long) 0x901063AAE5E5C33CL) /* 1008 */, unchecked((long) 0x9818B34448698D90L) /* 1009 */, + unchecked((long) 0xE36487AE3E1E8ABBL) /* 1010 */, unchecked((long) 0xAFBDF931893BDCB4L) /* 1011 */, + unchecked((long) 0x6345A0DC5FBBD519L) /* 1012 */, unchecked((long) 0x8628FE269B9465CAL) /* 1013 */, + unchecked((long) 0x1E5D01603F9C51ECL) /* 1014 */, unchecked((long) 0x4DE44006A15049B7L) /* 1015 */, + unchecked((long) 0xBF6C70E5F776CBB1L) /* 1016 */, unchecked((long) 0x411218F2EF552BEDL) /* 1017 */, + unchecked((long) 0xCB0C0708705A36A3L) /* 1018 */, unchecked((long) 0xE74D14754F986044L) /* 1019 */, + unchecked((long) 0xCD56D9430EA8280EL) /* 1020 */, unchecked((long) 0xC12591D7535F5065L) /* 1021 */, + unchecked((long) 0xC83223F1720AEF96L) /* 1022 */, unchecked((long) 0xC3A0396F7363A51FL) /* 1023 */ + }; + + private const int DigestLength = 24; + + // + // registers + // + private long a, b, c; + private long byteCount; + + // + // buffers + // + private byte[] m_buffer = new byte[8]; + private int bOff; + + private long[] x = new long[8]; + private int xOff; + + /** + * Standard constructor + */ + public TigerDigest() + { + Reset(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public TigerDigest(TigerDigest t) + { + Reset(t); + } + + public string AlgorithmName + { + get { return "Tiger"; } + } + + public int GetDigestSize() + { + return DigestLength; + } + + public int GetByteLength() + { + return MyByteLength; + } + + private void ProcessWord(byte[] b, int off) + { + x[xOff++] = (long)Pack.LE_To_UInt64(b, off); + + if (xOff == x.Length) + { + ProcessBlock(); + } + + bOff = 0; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void ProcessWord(ReadOnlySpan b) + { + x[xOff++] = (long)Pack.LE_To_UInt64(b); + + if (xOff == x.Length) + { + ProcessBlock(); + } + + bOff = 0; + } +#endif + + public void Update( + byte input) + { + m_buffer[bOff++] = input; + + if (bOff == m_buffer.Length) + { + ProcessWord(m_buffer, 0); + } + + byteCount++; + } + + public void BlockUpdate( + byte[] input, + int inOff, + int length) + { + // + // fill the current word + // + while ((bOff != 0) && (length > 0)) + { + Update(input[inOff]); + + inOff++; + length--; + } + + // + // process whole words. + // + while (length >= 8) + { + ProcessWord(input, inOff); + + inOff += 8; + length -= 8; + byteCount += 8; + } + + // + // load in the remainder. + // + while (length > 0) + { + Update(input[inOff]); + + inOff++; + length--; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + int inOff = 0, length = input.Length; + + // + // fill the current word + // + while ((bOff != 0) && (length > 0)) + { + Update(input[inOff]); + + inOff++; + length--; + } + + // + // process whole words. + // + while (length >= 8) + { + ProcessWord(input[inOff..]); + + inOff += 8; + length -= 8; + byteCount += 8; + } + + // + // load in the remainder. + // + while (length > 0) + { + Update(input[inOff]); + + inOff++; + length--; + } + } +#endif + + private void RoundABC( + long x, + long mul) + { + c ^= x ; + a -= t1[(int)c & 0xff] ^ t2[(int)(c >> 16) & 0xff] + ^ t3[(int)(c >> 32) & 0xff] ^ t4[(int)(c >> 48) & 0xff]; + b += t4[(int)(c >> 8) & 0xff] ^ t3[(int)(c >> 24) & 0xff] + ^ t2[(int)(c >> 40) & 0xff] ^ t1[(int)(c >> 56) & 0xff]; + b *= mul; + } + + private void RoundBCA( + long x, + long mul) + { + a ^= x ; + b -= t1[(int)a & 0xff] ^ t2[(int)(a >> 16) & 0xff] + ^ t3[(int)(a >> 32) & 0xff] ^ t4[(int)(a >> 48) & 0xff]; + c += t4[(int)(a >> 8) & 0xff] ^ t3[(int)(a >> 24) & 0xff] + ^ t2[(int)(a >> 40) & 0xff] ^ t1[(int)(a >> 56) & 0xff]; + c *= mul; + } + + private void RoundCAB( + long x, + long mul) + { + b ^= x ; + c -= t1[(int)b & 0xff] ^ t2[(int)(b >> 16) & 0xff] + ^ t3[(int)(b >> 32) & 0xff] ^ t4[(int)(b >> 48) & 0xff]; + a += t4[(int)(b >> 8) & 0xff] ^ t3[(int)(b >> 24) & 0xff] + ^ t2[(int)(b >> 40) & 0xff] ^ t1[(int)(b >> 56) & 0xff]; + a *= mul; + } + + private void KeySchedule() + { + x[0] -= x[7] ^ unchecked ((long) 0xA5A5A5A5A5A5A5A5L); + x[1] ^= x[0]; + x[2] += x[1]; + x[3] -= x[2] ^ ((~x[1]) << 19); + x[4] ^= x[3]; + x[5] += x[4]; + x[6] -= x[5] ^ (long) ((ulong) (~x[4]) >> 23); + x[7] ^= x[6]; + x[0] += x[7]; + x[1] -= x[0] ^ ((~x[7]) << 19); + x[2] ^= x[1]; + x[3] += x[2]; + x[4] -= x[3] ^ (long) ((ulong) (~x[2]) >> 23); + x[5] ^= x[4]; + x[6] += x[5]; + x[7] -= x[6] ^ 0x0123456789ABCDEFL; + } + + private void ProcessBlock() + { + // + // save abc + // + long aa = a; + long bb = b; + long cc = c; + + // + // rounds and schedule + // + RoundABC(x[0], 5); + RoundBCA(x[1], 5); + RoundCAB(x[2], 5); + RoundABC(x[3], 5); + RoundBCA(x[4], 5); + RoundCAB(x[5], 5); + RoundABC(x[6], 5); + RoundBCA(x[7], 5); + + KeySchedule(); + + RoundCAB(x[0], 7); + RoundABC(x[1], 7); + RoundBCA(x[2], 7); + RoundCAB(x[3], 7); + RoundABC(x[4], 7); + RoundBCA(x[5], 7); + RoundCAB(x[6], 7); + RoundABC(x[7], 7); + + KeySchedule(); + + RoundBCA(x[0], 9); + RoundCAB(x[1], 9); + RoundABC(x[2], 9); + RoundBCA(x[3], 9); + RoundCAB(x[4], 9); + RoundABC(x[5], 9); + RoundBCA(x[6], 9); + RoundCAB(x[7], 9); + + // + // feed forward + // + a ^= aa; + b -= bb; + c += cc; + + // + // clear the x buffer + // + xOff = 0; + for (int i = 0; i != x.Length; i++) + { + x[i] = 0; + } + } + + private void ProcessLength( + long bitLength) + { + x[7] = bitLength; + } + + private void Finish() + { + long bitLength = (byteCount << 3); + + Update((byte)0x01); + + while (bOff != 0) + { + Update((byte)0); + } + + ProcessLength(bitLength); + + ProcessBlock(); + } + + public int DoFinal( + byte[] output, + int outOff) + { + Finish(); + + Pack.UInt64_To_LE((ulong)a, output, outOff); + Pack.UInt64_To_LE((ulong)b, output, outOff + 8); + Pack.UInt64_To_LE((ulong)c, output, outOff + 16); + + Reset(); + + return DigestLength; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + Finish(); + + Pack.UInt64_To_LE((ulong)a, output); + Pack.UInt64_To_LE((ulong)b, output[8..]); + Pack.UInt64_To_LE((ulong)c, output[16..]); + + Reset(); + + return DigestLength; + } +#endif + + /** + * reset the chaining variables + */ + public void Reset() + { + a = unchecked((long) 0x0123456789ABCDEFL); + b = unchecked((long) 0xFEDCBA9876543210L); + c = unchecked((long) 0xF096A5B4C3B2E187L); + + xOff = 0; + for (int i = 0; i != x.Length; i++) + { + x[i] = 0; + } + + bOff = 0; + for (int i = 0; i != m_buffer.Length; i++) + { + m_buffer[i] = 0; + } + + byteCount = 0; + } + + public IMemoable Copy() + { + return new TigerDigest(this); + } + + public void Reset(IMemoable other) + { + TigerDigest t = (TigerDigest)other; + + a = t.a; + b = t.b; + c = t.c; + + Array.Copy(t.x, 0, x, 0, t.x.Length); + xOff = t.xOff; + + Array.Copy(t.m_buffer, 0, m_buffer, 0, t.m_buffer.Length); + bOff = t.bOff; + + byteCount = t.byteCount; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/TigerDigest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/TigerDigest.cs.meta new file mode 100644 index 000000000..f657cd97b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/TigerDigest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 57fcb6394b1838042a143a9847924a08 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/TupleHash.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/TupleHash.cs new file mode 100644 index 000000000..a0d11a3c7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/TupleHash.cs @@ -0,0 +1,165 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /// + /// TupleHash - a hash designed to simply hash a tuple of input strings, any or all of which may be empty strings, + /// in an unambiguous way with an optional XOF mode. + /// + /// From NIST Special Publication 800-185 - SHA-3 Derived Functions:cSHAKE, KMAC, TupleHash and ParallelHash + /// + /// + public class TupleHash + : IXof, IDigest + { + private static readonly byte[] N_TUPLE_HASH = Strings.ToByteArray("TupleHash"); + + private readonly CShakeDigest cshake; + private readonly int bitLength; + private readonly int outputLength; + + private bool firstOutput; + + /** + * Base constructor. + * + * @param bitLength bit length of the underlying SHAKE function, 128 or 256. + * @param S the customization string - available for local use. + */ + public TupleHash(int bitLength, byte[] S) + : this(bitLength, S, bitLength * 2) + { + + } + + public TupleHash(int bitLength, byte[] S, int outputSize) + { + this.cshake = new CShakeDigest(bitLength, N_TUPLE_HASH, S); + this.bitLength = bitLength; + this.outputLength = (outputSize + 7) / 8; + + Reset(); + } + + public TupleHash(TupleHash original) + { + this.cshake = new CShakeDigest(original.cshake); + this.bitLength = cshake.fixedOutputLength; + this.outputLength = bitLength * 2 / 8; + this.firstOutput = original.firstOutput; + } + + public virtual string AlgorithmName + { + get { return "TupleHash" + cshake.AlgorithmName.Substring(6); } + } + + public virtual int GetByteLength() + { + return cshake.GetByteLength(); + } + + public virtual int GetDigestSize() + { + return outputLength; + } + + public virtual void Update(byte b) + { + byte[] bytes = XofUtilities.Encode(b); + cshake.BlockUpdate(bytes, 0, bytes.Length); + } + + public virtual void BlockUpdate(byte[] inBuf, int inOff, int len) + { + byte[] bytes = XofUtilities.Encode(inBuf, inOff, len); + cshake.BlockUpdate(bytes, 0, bytes.Length); + } + + private void WrapUp(int outputSize) + { + byte[] encOut = XofUtilities.RightEncode(outputSize * 8); + + cshake.BlockUpdate(encOut, 0, encOut.Length); + + firstOutput = false; + } + + public virtual int DoFinal(byte[] outBuf, int outOff) + { + return OutputFinal(outBuf, outOff, GetDigestSize()); + } + + public virtual int OutputFinal(byte[] outBuf, int outOff, int outLen) + { + if (firstOutput) + { + WrapUp(GetDigestSize()); + } + + int rv = cshake.OutputFinal(outBuf, outOff, outLen); + + Reset(); + + return rv; + } + + public virtual int Output(byte[] outBuf, int outOff, int outLen) + { + if (firstOutput) + { + WrapUp(0); + } + + return cshake.Output(outBuf, outOff, outLen); + } + + public virtual void Reset() + { + cshake.Reset(); + firstOutput = true; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + XofUtilities.EncodeTo(cshake, input); + } + + public virtual int DoFinal(Span output) + { + return OutputFinal(output[..GetDigestSize()]); + } + + public virtual int OutputFinal(Span output) + { + if (firstOutput) + { + WrapUp(GetDigestSize()); + } + + int rv = cshake.OutputFinal(output); + + Reset(); + + return rv; + } + + public virtual int Output(Span output) + { + if (firstOutput) + { + WrapUp(0); + } + + return cshake.Output(output); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/TupleHash.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/TupleHash.cs.meta new file mode 100644 index 000000000..4ae7b92f9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/TupleHash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38727ead650330149892c402d774db90 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/WhirlpoolDigest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/WhirlpoolDigest.cs new file mode 100644 index 000000000..429585ec7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/WhirlpoolDigest.cs @@ -0,0 +1,386 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + /** + * Implementation of WhirlpoolDigest, based on Java source published by Barreto and Rijmen. + */ + public sealed class WhirlpoolDigest + : IDigest, IMemoable + { + private const int BITCOUNT_ARRAY_SIZE = 32; + private const int BYTE_LENGTH = 64; + private const int DIGEST_LENGTH_BYTES = 512 / 8; + private const int REDUCTION_POLYNOMIAL = 0x011d; // 2^8 + 2^4 + 2^3 + 2 + 1; + private const int ROUNDS = 10; + + private static readonly int[] SBOX = + { + 0x18, 0x23, 0xc6, 0xe8, 0x87, 0xb8, 0x01, 0x4f, 0x36, 0xa6, 0xd2, 0xf5, 0x79, 0x6f, 0x91, 0x52, + 0x60, 0xbc, 0x9b, 0x8e, 0xa3, 0x0c, 0x7b, 0x35, 0x1d, 0xe0, 0xd7, 0xc2, 0x2e, 0x4b, 0xfe, 0x57, + 0x15, 0x77, 0x37, 0xe5, 0x9f, 0xf0, 0x4a, 0xda, 0x58, 0xc9, 0x29, 0x0a, 0xb1, 0xa0, 0x6b, 0x85, + 0xbd, 0x5d, 0x10, 0xf4, 0xcb, 0x3e, 0x05, 0x67, 0xe4, 0x27, 0x41, 0x8b, 0xa7, 0x7d, 0x95, 0xd8, + 0xfb, 0xee, 0x7c, 0x66, 0xdd, 0x17, 0x47, 0x9e, 0xca, 0x2d, 0xbf, 0x07, 0xad, 0x5a, 0x83, 0x33, + 0x63, 0x02, 0xaa, 0x71, 0xc8, 0x19, 0x49, 0xd9, 0xf2, 0xe3, 0x5b, 0x88, 0x9a, 0x26, 0x32, 0xb0, + 0xe9, 0x0f, 0xd5, 0x80, 0xbe, 0xcd, 0x34, 0x48, 0xff, 0x7a, 0x90, 0x5f, 0x20, 0x68, 0x1a, 0xae, + 0xb4, 0x54, 0x93, 0x22, 0x64, 0xf1, 0x73, 0x12, 0x40, 0x08, 0xc3, 0xec, 0xdb, 0xa1, 0x8d, 0x3d, + 0x97, 0x00, 0xcf, 0x2b, 0x76, 0x82, 0xd6, 0x1b, 0xb5, 0xaf, 0x6a, 0x50, 0x45, 0xf3, 0x30, 0xef, + 0x3f, 0x55, 0xa2, 0xea, 0x65, 0xba, 0x2f, 0xc0, 0xde, 0x1c, 0xfd, 0x4d, 0x92, 0x75, 0x06, 0x8a, + 0xb2, 0xe6, 0x0e, 0x1f, 0x62, 0xd4, 0xa8, 0x96, 0xf9, 0xc5, 0x25, 0x59, 0x84, 0x72, 0x39, 0x4c, + 0x5e, 0x78, 0x38, 0x8c, 0xd1, 0xa5, 0xe2, 0x61, 0xb3, 0x21, 0x9c, 0x1e, 0x43, 0xc7, 0xfc, 0x04, + 0x51, 0x99, 0x6d, 0x0d, 0xfa, 0xdf, 0x7e, 0x24, 0x3b, 0xab, 0xce, 0x11, 0x8f, 0x4e, 0xb7, 0xeb, + 0x3c, 0x81, 0x94, 0xf7, 0xb9, 0x13, 0x2c, 0xd3, 0xe7, 0x6e, 0xc4, 0x03, 0x56, 0x44, 0x7f, 0xa9, + 0x2a, 0xbb, 0xc1, 0x53, 0xdc, 0x0b, 0x9d, 0x6c, 0x31, 0x74, 0xf6, 0x46, 0xac, 0x89, 0x14, 0xe1, + 0x16, 0x3a, 0x69, 0x09, 0x70, 0xb6, 0xd0, 0xed, 0xcc, 0x42, 0x98, 0xa4, 0x28, 0x5c, 0xf8, 0x86 + }; + + private static readonly ulong[] C0 = new ulong[256]; + private static readonly ulong[] C1 = new ulong[256]; + private static readonly ulong[] C2 = new ulong[256]; + private static readonly ulong[] C3 = new ulong[256]; + private static readonly ulong[] C4 = new ulong[256]; + private static readonly ulong[] C5 = new ulong[256]; + private static readonly ulong[] C6 = new ulong[256]; + private static readonly ulong[] C7 = new ulong[256]; + + /* + * increment() can be implemented in this way using 2 arrays or + * by having some temporary variables that are used to set the + * value provided by EIGHT[i] and carry within the loop. + * + * not having done any timing, this seems likely to be faster + * at the slight expense of 32*(sizeof short) bytes + */ + private static readonly short[] EIGHT = new short[BITCOUNT_ARRAY_SIZE]; + + static WhirlpoolDigest() + { + EIGHT[BITCOUNT_ARRAY_SIZE - 1] = 8; + + for (int i = 0; i < 256; i++) + { + int v1 = SBOX[i]; + int v2 = MulX(v1); + int v4 = MulX(v2); + int v5 = v4 ^ v1; + int v8 = MulX(v4); + int v9 = v8 ^ v1; + + C0[i] = PackIntoUInt64(v1, v1, v4, v1, v8, v5, v2, v9); + C1[i] = PackIntoUInt64(v9, v1, v1, v4, v1, v8, v5, v2); + C2[i] = PackIntoUInt64(v2, v9, v1, v1, v4, v1, v8, v5); + C3[i] = PackIntoUInt64(v5, v2, v9, v1, v1, v4, v1, v8); + C4[i] = PackIntoUInt64(v8, v5, v2, v9, v1, v1, v4, v1); + C5[i] = PackIntoUInt64(v1, v8, v5, v2, v9, v1, v1, v4); + C6[i] = PackIntoUInt64(v4, v1, v8, v5, v2, v9, v1, v1); + C7[i] = PackIntoUInt64(v1, v4, v1, v8, v5, v2, v9, v1); + } + } + + // int's are used to prevent sign extension. The values that are really being used are actually just 0..255 + private static int MulX(int input) + { + return (input << 1) ^ (-(input >> 7) & REDUCTION_POLYNOMIAL); + } + + private static ulong PackIntoUInt64(int b7, int b6, int b5, int b4, int b3, int b2, int b1, int b0) + { + return ((ulong)b7 << 56) ^ + ((ulong)b6 << 48) ^ + ((ulong)b5 << 40) ^ + ((ulong)b4 << 32) ^ + ((ulong)b3 << 24) ^ + ((ulong)b2 << 16) ^ + ((ulong)b1 << 8) ^ + (ulong)b0; + } + + private readonly ulong[] _rc = new ulong[ROUNDS + 1]; + + public WhirlpoolDigest() + { + _rc[0] = 0UL; + for (int r = 1; r <= ROUNDS; r++) + { + int i = 8 * (r - 1); + _rc[r] = + (C0[i ] & 0xff00000000000000UL) ^ + (C1[i + 1] & 0x00ff000000000000UL) ^ + (C2[i + 2] & 0x0000ff0000000000UL) ^ + (C3[i + 3] & 0x000000ff00000000UL) ^ + (C4[i + 4] & 0x00000000ff000000UL) ^ + (C5[i + 5] & 0x0000000000ff0000UL) ^ + (C6[i + 6] & 0x000000000000ff00UL) ^ + (C7[i + 7] & 0x00000000000000ffUL); + } + } + + // --------------------------------------------------------------------------------------// + + // -- buffer information -- + private byte[] _buffer = new byte[64]; + private int _bufferPos; + private short[] _bitCount = new short[BITCOUNT_ARRAY_SIZE]; + + // -- internal hash state -- + private ulong[] _hash = new ulong[8]; + private ulong[] _K = new ulong[8]; // the round key + private ulong[] _L = new ulong[8]; + private ulong[] _block = new ulong[8]; // mu (buffer) + private ulong[] _state = new ulong[8]; // the current "cipher" state + + /** + * Copy constructor. This will copy the state of the provided message digest. + */ + public WhirlpoolDigest(WhirlpoolDigest originalDigest) + { + Reset(originalDigest); + } + + public string AlgorithmName + { + get { return "Whirlpool"; } + } + + public int GetDigestSize() + { + return DIGEST_LENGTH_BYTES; + } + + public int DoFinal(byte[] output, int outOff) + { + // sets output[outOff] .. output[outOff+DIGEST_LENGTH_BYTES] + Finish(); + + Pack.UInt64_To_BE(_hash, output, outOff); + + Reset(); + + return GetDigestSize(); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + // sets output[0..DIGEST_LENGTH_BYTES] + Finish(); + + Pack.UInt64_To_BE(_hash, output); + + Reset(); + + return GetDigestSize(); + } +#endif + + /** + * Reset the chaining variables + */ + public void Reset() + { + // set variables to null, blank, whatever + _bufferPos = 0; + Array.Clear(_bitCount, 0, _bitCount.Length); + Array.Clear(_buffer, 0, _buffer.Length); + Array.Clear(_hash, 0, _hash.Length); + Array.Clear(_K, 0, _K.Length); + Array.Clear(_L, 0, _L.Length); + Array.Clear(_block, 0, _block.Length); + Array.Clear(_state, 0, _state.Length); + } + + // this takes a buffer of information and fills the block + private void ProcessFilledBuffer() + { + // copies into the block... + Pack.BE_To_UInt64(_buffer, 0, _block); + ProcessBlock(); + _bufferPos = 0; + Array.Clear(_buffer, 0, _buffer.Length); + } + + private void ProcessBlock() + { + // buffer contents have been transferred to the _block[] array via ProcessFilledBuffer + + // compute and apply K^0 + for (int i = 0; i < 8; i++) + { + _state[i] = _block[i] ^ (_K[i] = _hash[i]); + } + + // iterate over the rounds + for (int round = 1; round <= ROUNDS; round++) + { + for (int i = 0; i < 8; i++) + { + _L[i] = C0[(int)(_K[(i - 0) & 7] >> 56) & 0xff]; + _L[i] ^= C1[(int)(_K[(i - 1) & 7] >> 48) & 0xff]; + _L[i] ^= C2[(int)(_K[(i - 2) & 7] >> 40) & 0xff]; + _L[i] ^= C3[(int)(_K[(i - 3) & 7] >> 32) & 0xff]; + _L[i] ^= C4[(int)(_K[(i - 4) & 7] >> 24) & 0xff]; + _L[i] ^= C5[(int)(_K[(i - 5) & 7] >> 16) & 0xff]; + _L[i] ^= C6[(int)(_K[(i - 6) & 7] >> 8) & 0xff]; + _L[i] ^= C7[(int)(_K[(i - 7) & 7]) & 0xff]; + } + + Array.Copy(_L, 0, _K, 0, _K.Length); + + _K[0] ^= _rc[round]; + + // apply the round transformation + for (int i = 0; i < 8; i++) + { + _L[i] = _K[i]; + + _L[i] ^= C0[(int)(_state[(i - 0) & 7] >> 56) & 0xff]; + _L[i] ^= C1[(int)(_state[(i - 1) & 7] >> 48) & 0xff]; + _L[i] ^= C2[(int)(_state[(i - 2) & 7] >> 40) & 0xff]; + _L[i] ^= C3[(int)(_state[(i - 3) & 7] >> 32) & 0xff]; + _L[i] ^= C4[(int)(_state[(i - 4) & 7] >> 24) & 0xff]; + _L[i] ^= C5[(int)(_state[(i - 5) & 7] >> 16) & 0xff]; + _L[i] ^= C6[(int)(_state[(i - 6) & 7] >> 8) & 0xff]; + _L[i] ^= C7[(int)(_state[(i - 7) & 7]) & 0xff]; + } + + // save the current state + Array.Copy(_L, 0, _state, 0, _state.Length); + } + + // apply Miuaguchi-Preneel compression + for (int i = 0; i < 8; i++) + { + _hash[i] ^= _state[i] ^ _block[i]; + } + } + + public void Update(byte input) + { + _buffer[_bufferPos] = input; + if (++_bufferPos == _buffer.Length) + { + ProcessFilledBuffer(); + } + + Increment(); + } + + private void Increment() + { + int carry = 0; + for (int i = _bitCount.Length - 1; i >= 0; i--) + { + int sum = (_bitCount[i] & 0xff) + EIGHT[i] + carry; + + carry = sum >> 8; + _bitCount[i] = (short)(sum & 0xff); + } + } + + public void BlockUpdate(byte[] input, int inOff, int length) + { + while (length > 0) + { + Update(input[inOff]); + ++inOff; + --length; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + for (int i = 0; i < input.Length; ++i) + { + Update(input[i]); + } + } +#endif + + private void Finish() + { + /* + * this makes a copy of the current bit length. at the expense of an + * object creation of 32 bytes rather than providing a _stopCounting + * boolean which was the alternative I could think of. + */ + byte[] bitLength = CopyBitLength(); + + _buffer[_bufferPos] |= 0x80; + if (++_bufferPos == _buffer.Length) + { + ProcessFilledBuffer(); + } + + /* + * Final block contains + * [ ... data .... ][0][0][0][ length ] + * + * if [ length ] cannot fit. Need to create a new block. + */ + if (_bufferPos > 32) + { + while (_bufferPos != 0) + { + Update((byte)0); + } + } + + while (_bufferPos <= 32) + { + Update((byte)0); + } + + // copy the length information to the final 32 bytes of the 64 byte block.... + Array.Copy(bitLength, 0, _buffer, 32, bitLength.Length); + + ProcessFilledBuffer(); + } + + private byte[] CopyBitLength() + { + byte[] rv = new byte[BITCOUNT_ARRAY_SIZE]; + for (int i = 0; i < rv.Length; i++) + { + rv[i] = (byte)(_bitCount[i] & 0xff); + } + return rv; + } + + public int GetByteLength() + { + return BYTE_LENGTH; + } + + public IMemoable Copy() + { + return new WhirlpoolDigest(this); + } + + public void Reset(IMemoable other) + { + WhirlpoolDigest originalDigest = (WhirlpoolDigest)other; + + Array.Copy(originalDigest._rc, 0, _rc, 0, _rc.Length); + + Array.Copy(originalDigest._buffer, 0, _buffer, 0, _buffer.Length); + + this._bufferPos = originalDigest._bufferPos; + Array.Copy(originalDigest._bitCount, 0, _bitCount, 0, _bitCount.Length); + + // -- internal hash state -- + Array.Copy(originalDigest._hash, 0, _hash, 0, _hash.Length); + Array.Copy(originalDigest._K, 0, _K, 0, _K.Length); + Array.Copy(originalDigest._L, 0, _L, 0, _L.Length); + Array.Copy(originalDigest._block, 0, _block, 0, _block.Length); + Array.Copy(originalDigest._state, 0, _state, 0, _state.Length); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/WhirlpoolDigest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/WhirlpoolDigest.cs.meta new file mode 100644 index 000000000..857660a07 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/WhirlpoolDigest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c1514667bb945848a2337e88af6340c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/XofUtils.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/XofUtils.cs new file mode 100644 index 000000000..8c7eb28a9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/XofUtils.cs @@ -0,0 +1,121 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests +{ + internal class XofUtilities + { + internal static byte[] LeftEncode(long strLen) + { + byte n = 1; + + long v = strLen; + while ((v >>= 8) != 0) + { + n++; + } + + byte[] b = new byte[n + 1]; + + b[0] = n; + + for (int i = 1; i <= n; i++) + { + b[i] = (byte)(strLen >> (8 * (n - i))); + } + + return b; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal static int LeftEncode(long length, Span lengthEncoding) + { + byte n = 1; + + long v = length; + while ((v >>= 8) != 0) + { + n++; + } + + lengthEncoding[0] = n; + for (int i = 1; i <= n; i++) + { + lengthEncoding[i] = (byte)(length >> (8 * (n - i))); + } + return 1 + n; + } +#endif + + internal static byte[] RightEncode(long strLen) + { + byte n = 1; + + long v = strLen; + while ((v >>= 8) != 0) + { + n++; + } + + byte[] b = new byte[n + 1]; + + b[n] = n; + + for (int i = 0; i < n; i++) + { + b[i] = (byte)(strLen >> (8 * (n - i - 1))); + } + + return b; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal static int RightEncode(long length, Span lengthEncoding) + { + byte n = 1; + + long v = length; + while ((v >>= 8) != 0) + { + n++; + } + + lengthEncoding[n] = n; + for (int i = 0; i < n; i++) + { + lengthEncoding[i] = (byte)(length >> (8 * (n - i - 1))); + } + return n + 1; + } +#endif + + internal static byte[] Encode(byte X) + { + return Arrays.Concatenate(LeftEncode(8), new byte[] { X }); + } + + internal static byte[] Encode(byte[] inBuf, int inOff, int len) + { + if (inBuf.Length == len) + { + return Arrays.Concatenate(LeftEncode(len * 8), inBuf); + } + return Arrays.Concatenate(LeftEncode(len * 8), Arrays.CopyOfRange(inBuf, inOff, inOff + len)); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal static void EncodeTo(IDigest digest, ReadOnlySpan buf) + { + Span lengthEncoding = stackalloc byte[9]; + int count = LeftEncode(buf.Length * 8, lengthEncoding); + digest.BlockUpdate(lengthEncoding[..count]); + digest.BlockUpdate(buf); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/XofUtils.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/XofUtils.cs.meta new file mode 100644 index 000000000..ee1141502 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/digests/XofUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4e95054d5d42fa04f9a1b9c85c31a208 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ec.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ec.meta new file mode 100644 index 000000000..219a8fd04 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ec.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e0048515318c6fb408c1cc5edd0586a2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ec/CustomNamedCurves.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ec/CustomNamedCurves.cs new file mode 100644 index 000000000..1df1d8e73 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ec/CustomNamedCurves.cs @@ -0,0 +1,925 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.GM; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Sec; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.GM; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Endo; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.EC +{ + /// Elliptic curve registry for various customized curve implementations. + public static class CustomNamedCurves + { + private static X9ECPoint ConfigureBasepoint(ECCurve curve, string encoding) + { + X9ECPoint G = new X9ECPoint(curve, Hex.DecodeStrict(encoding)); + WNafUtilities.ConfigureBasepoint(G.Point); + return G; + } + + private static ECCurve ConfigureCurve(ECCurve curve) + { + return curve; + } + + private static ECCurve ConfigureCurveGlv(ECCurve c, GlvTypeBParameters p) + { + return c.Configure().SetEndomorphism(new GlvTypeBEndomorphism(c, p)).Create(); + } + + internal class SecP128R1Holder + : X9ECParametersHolder + { + private SecP128R1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecP128R1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecP128R1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("000E0D4D696E6768756151750CC03A4473D03679"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "04161FF7528B899B2D0C28607CA52C5B86CF5AC8395BAFEB13C02DA292DDED7A83"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecP160K1Holder + : X9ECParametersHolder + { + private SecP160K1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecP160K1Holder(); + + protected override ECCurve CreateCurve() + { + GlvTypeBParameters glv = new GlvTypeBParameters( + new BigInteger("9ba48cba5ebcb9b6bd33b92830b2a2e0e192f10a", 16), + new BigInteger("c39c6c3b3a36d7701b9c71a1f5804ae5d0003f4", 16), + new ScalarSplitParameters( + new BigInteger[]{ + new BigInteger("9162fbe73984472a0a9e", 16), + new BigInteger("-96341f1138933bc2f505", 16) }, + new BigInteger[]{ + new BigInteger("127971af8721782ecffa3", 16), + new BigInteger("9162fbe73984472a0a9e", 16) }, + new BigInteger("9162fbe73984472a0a9d0590", 16), + new BigInteger("96341f1138933bc2f503fd44", 16), + 176)); + return ConfigureCurveGlv(new SecP160K1Curve(), glv); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "043B4C382CE37AA192A4019E763036F4F5DD4D7EBB938CF935318FDCED6BC28286531733C3F03C4FEE"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecP160R1Holder + : X9ECParametersHolder + { + private SecP160R1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecP160R1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecP160R1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("1053CDE42C14D696E67687561517533BF3F83345"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "044A96B5688EF573284664698968C38BB913CBFC8223A628553168947D59DCC912042351377AC5FB32"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecP160R2Holder + : X9ECParametersHolder + { + private SecP160R2Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecP160R2Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecP160R2Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("B99B99B099B323E02709A4D696E6768756151751"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "0452DCB034293A117E1F4FF11B30F7199D3144CE6DFEAFFEF2E331F296E071FA0DF9982CFEA7D43F2E"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecP192K1Holder + : X9ECParametersHolder + { + private SecP192K1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecP192K1Holder(); + + protected override ECCurve CreateCurve() + { + GlvTypeBParameters glv = new GlvTypeBParameters( + new BigInteger("bb85691939b869c1d087f601554b96b80cb4f55b35f433c2", 16), + new BigInteger("3d84f26c12238d7b4f3d516613c1759033b1a5800175d0b1", 16), + new ScalarSplitParameters( + new BigInteger[]{ + new BigInteger("71169be7330b3038edb025f1", 16), + new BigInteger("-b3fb3400dec5c4adceb8655c", 16) }, + new BigInteger[]{ + new BigInteger("12511cfe811d0f4e6bc688b4d", 16), + new BigInteger("71169be7330b3038edb025f1", 16) }, + new BigInteger("71169be7330b3038edb025f1d0f9", 16), + new BigInteger("b3fb3400dec5c4adceb8655d4c94", 16), + 208)); + return ConfigureCurveGlv(new SecP192K1Curve(), glv); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "04DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class SecP192R1Holder + : X9ECParametersHolder + { + private SecP192R1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecP192R1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecP192R1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("3045AE6FC8422F64ED579528D38120EAE12196D5"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "04188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF101207192B95FFC8DA78631011ED6B24CDD573F977A11E794811"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class SecP224K1Holder + : X9ECParametersHolder + { + private SecP224K1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecP224K1Holder(); + + protected override ECCurve CreateCurve() + { + GlvTypeBParameters glv = new GlvTypeBParameters( + new BigInteger("fe0e87005b4e83761908c5131d552a850b3f58b749c37cf5b84d6768", 16), + new BigInteger("60dcd2104c4cbc0be6eeefc2bdd610739ec34e317f9b33046c9e4788", 16), + new ScalarSplitParameters( + new BigInteger[]{ + new BigInteger("6b8cf07d4ca75c88957d9d670591", 16), + new BigInteger("-b8adf1378a6eb73409fa6c9c637d", 16) }, + new BigInteger[]{ + new BigInteger("1243ae1b4d71613bc9f780a03690e", 16), + new BigInteger("6b8cf07d4ca75c88957d9d670591", 16) }, + new BigInteger("6b8cf07d4ca75c88957d9d67059037a4", 16), + new BigInteger("b8adf1378a6eb73409fa6c9c637ba7f5", 16), + 240)); + return ConfigureCurveGlv(new SecP224K1Curve(), glv); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "04A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class SecP224R1Holder + : X9ECParametersHolder + { + private SecP224R1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecP224R1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecP224R1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("BD71344799D5C7FCDC45B59FA3B9AB8F6A948BC5"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "04B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class SecP256K1Holder + : X9ECParametersHolder + { + private SecP256K1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecP256K1Holder(); + + protected override ECCurve CreateCurve() + { + GlvTypeBParameters glv = new GlvTypeBParameters( + new BigInteger("7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee", 16), + new BigInteger("5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72", 16), + new ScalarSplitParameters( + new BigInteger[]{ + new BigInteger("3086d221a7d46bcde86c90e49284eb15", 16), + new BigInteger("-e4437ed6010e88286f547fa90abfe4c3", 16) }, + new BigInteger[]{ + new BigInteger("114ca50f7a8e2f3f657c1108d9d44cfd8", 16), + new BigInteger("3086d221a7d46bcde86c90e49284eb15", 16) }, + new BigInteger("3086d221a7d46bcde86c90e49284eb153dab", 16), + new BigInteger("e4437ed6010e88286f547fa90abfe4c42212", 16), + 272)); + return ConfigureCurveGlv(new SecP256K1Curve(), glv); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "0479BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class SecP256R1Holder + : X9ECParametersHolder + { + private SecP256R1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecP256R1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecP256R1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("C49D360886E704936A6678E1139D26B7819F7E90"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class SecP384R1Holder + : X9ECParametersHolder + { + private SecP384R1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecP384R1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecP384R1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("A335926AA319A27A1D00896A6773A4827ACDAC73"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, "04" + + "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7" + + "3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class SecP521R1Holder + : X9ECParametersHolder + { + private SecP521R1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecP521R1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecP521R1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("D09E8800291CB85396CC6717393284AAA0DA64BA"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, "04" + + "00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66" + + "011839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + internal class SecT113R1Holder + : X9ECParametersHolder + { + private SecT113R1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecT113R1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecT113R1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("10E723AB14D696E6768756151756FEBF8FCB49A9"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "04009D73616F35F4AB1407D73562C10F00A52830277958EE84D1315ED31886"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecT113R2Holder + : X9ECParametersHolder + { + private SecT113R2Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecT113R2Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecT113R2Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("10C0FB15760860DEF1EEF4D696E676875615175D"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "0401A57A6A7B26CA5EF52FCDB816479700B3ADC94ED1FE674C06E695BABA1D"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecT131R1Holder + : X9ECParametersHolder + { + private SecT131R1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecT131R1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecT131R1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("4D696E676875615175985BD3ADBADA21B43A97E2"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "040081BAF91FDF9833C40F9C181343638399078C6E7EA38C001F73C8134B1B4EF9E150"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecT131R2Holder + : X9ECParametersHolder + { + private SecT131R2Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecT131R2Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecT131R2Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("985BD3ADBAD4D696E676875615175A21B43A97E3"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "040356DCD8F2F95031AD652D23951BB366A80648F06D867940A5366D9E265DE9EB240F"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecT163K1Holder + : X9ECParametersHolder + { + private SecT163K1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecT163K1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecT163K1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "0402FE13C0537BBC11ACAA07D793DE4E6D5E5C94EEE80289070FB05D38FF58321F2E800536D538CCDAA3D9"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecT163R1Holder + : X9ECParametersHolder + { + private SecT163R1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecT163R1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecT163R1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("24B7B137C8A14D696E6768756151756FD0DA2E5C"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "040369979697AB43897789566789567F787A7876A65400435EDB42EFAFB2989D51FEFCE3C80988F41FF883"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecT163R2Holder + : X9ECParametersHolder + { + private SecT163R2Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecT163R2Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecT163R2Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("85E25BFE5C86226CDB12016F7553F9D0E693A268"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "0403F0EBA16286A2D57EA0991168D4994637E8343E3600D51FBC6C71A0094FA2CDD545B11C5C0C797324F1"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecT193R1Holder + : X9ECParametersHolder + { + private SecT193R1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecT193R1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecT193R1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("103FAEC74D696E676875615175777FC5B191EF30"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "0401F481BC5F0FF84A74AD6CDF6FDEF4BF6179625372D8C0C5E10025E399F2903712CCF3EA9E3A1AD17FB0B3201B6AF7CE1B05"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecT193R2Holder + : X9ECParametersHolder + { + private SecT193R2Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecT193R2Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecT193R2Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("10B7B4D696E676875615175137C8A16FD0DA2211"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "0400D9B67D192E0367C803F39E1A7E82CA14A651350AAE617E8F01CE94335607C304AC29E7DEFBD9CA01F596F927224CDECF6C"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecT233K1Holder + : X9ECParametersHolder + { + private SecT233K1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecT233K1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecT233K1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "04017232BA853A7E731AF129F22FF4149563A419C26BF50A4C9D6EEFAD612601DB537DECE819B7F70F555A67C427A8CD9BF18AEB9B56E0C11056FAE6A3"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecT233R1Holder + : X9ECParametersHolder + { + private SecT233R1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecT233R1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecT233R1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("74D59FF07F6B413D0EA14B344B20A2DB049B50C3"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "0400FAC9DFCBAC8313BB2139F1BB755FEF65BC391F8B36F8F8EB7371FD558B01006A08A41903350678E58528BEBF8A0BEFF867A7CA36716F7E01F81052"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecT239K1Holder + : X9ECParametersHolder + { + private SecT239K1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecT239K1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecT239K1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "0429A0B6A887A983E9730988A68727A8B2D126C44CC2CC7B2A6555193035DC76310804F12E549BDB011C103089E73510ACB275FC312A5DC6B76553F0CA"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecT283K1Holder + : X9ECParametersHolder + { + private SecT283K1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecT283K1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecT283K1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, "04" + + "0503213F78CA44883F1A3B8162F188E553CD265F23C1567A16876913B0C2AC2458492836" + + "01CCDA380F1C9E318D90F95D07E5426FE87E45C0E8184698E45962364E34116177DD2259"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecT283R1Holder + : X9ECParametersHolder + { + private SecT283R1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecT283R1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecT283R1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("77E2B07370EB0F832A6DD5B62DFC88CD06BB84BE"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, "04" + + "05F939258DB7DD90E1934F8C70B0DFEC2EED25B8557EAC9C80E2E198F8CDBECD86B12053" + + "03676854FE24141CB98FE6D4B20D02B4516FF702350EDDB0826779C813F0DF45BE8112F4"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecT409K1Holder + : X9ECParametersHolder + { + private SecT409K1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecT409K1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecT409K1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, "04" + + "0060F05F658F49C1AD3AB1890F7184210EFD0987E307C84C27ACCFB8F9F67CC2C460189EB5AAAA62EE222EB1B35540CFE9023746" + + "01E369050B7C4E42ACBA1DACBF04299C3460782F918EA427E6325165E9EA10E3DA5F6C42E9C55215AA9CA27A5863EC48D8E0286B"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecT409R1Holder + : X9ECParametersHolder + { + private SecT409R1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecT409R1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecT409R1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("4099B5A457F9D69F79213D094C4BCD4D4262210B"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, "04" + + "015D4860D088DDB3496B0C6064756260441CDE4AF1771D4DB01FFE5B34E59703DC255A868A1180515603AEAB60794E54BB7996A7" + + "0061B1CFAB6BE5F32BBFA78324ED106A7636B9C5A7BD198D0158AA4F5488D08F38514F1FDF4B4F40D2181B3681C364BA0273C706"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecT571K1Holder + : X9ECParametersHolder + { + private SecT571K1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecT571K1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecT571K1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, "04" + + "026EB7A859923FBC82189631F8103FE4AC9CA2970012D5D46024804801841CA44370958493B205E647DA304DB4CEB08CBBD1BA39494776FB988B47174DCA88C7E2945283A01C8972" + + "0349DC807F4FBF374F4AEADE3BCA95314DD58CEC9F307A54FFC61EFC006D8A2C9D4979C0AC44AEA74FBEBBB9F772AEDCB620B01A7BA7AF1B320430C8591984F601CD4C143EF1C7A3"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SecT571R1Holder + : X9ECParametersHolder + { + private SecT571R1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SecT571R1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SecT571R1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = Hex.DecodeStrict("2AA058F73A0E33AB486B0F610410C53A7F132310"); + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, "04" + + "0303001D34B856296C16C0D40D3CD7750A93D1D2955FA80AA5F40FC8DB7B2ABDBDE53950F4C0D293CDD711A35B67FB1499AE60038614F1394ABFA3B4C850D927E1E7769C8EEC2D19" + + "037BF27342DA639B6DCCFFFEB73D69D78C6C27A6009CBBCA1980F8533921E8A684423E43BAB08A576291AF8F461BB2A8B3531D2F0485C19B16E2F1516E23DD3C1A4827AF1B8AC15B"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + }; + + internal class SM2P256V1Holder + : X9ECParametersHolder + { + private SM2P256V1Holder() {} + + internal static readonly X9ECParametersHolder Instance = new SM2P256V1Holder(); + + protected override ECCurve CreateCurve() + { + return ConfigureCurve(new SM2P256V1Curve()); + } + + protected override X9ECParameters CreateParameters() + { + byte[] S = null; + ECCurve curve = Curve; + X9ECPoint G = ConfigureBasepoint(curve, + "0432C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0"); + return new X9ECParameters(curve, G, curve.Order, curve.Cofactor, S); + } + } + + private static readonly Dictionary objIds = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly Dictionary curves = + new Dictionary(); + private static readonly Dictionary names = + new Dictionary(); + + private static void DefineCurve(string name, DerObjectIdentifier oid, X9ECParametersHolder holder) + { + objIds.Add(name, oid); + names.Add(oid, name); + curves.Add(oid, holder); + } + + private static void DefineCurveAlias(string name, DerObjectIdentifier oid) + { + if (!curves.ContainsKey(oid)) + throw new InvalidOperationException(); + + objIds.Add(name, oid); + } + + static CustomNamedCurves() + { + //DefineCurve("secp112r1", SecObjectIdentifiers.SecP112r1, SecP112R1Holder.Instance); + //DefineCurve("secp112r2", SecObjectIdentifiers.SecP112r2, SecP112R2Holder.Instance); + DefineCurve("secp128r1", SecObjectIdentifiers.SecP128r1, SecP128R1Holder.Instance); + //DefineCurve("secp128r2", SecObjectIdentifiers.SecP128r2, SecP128R2Holder.Instance); + DefineCurve("secp160k1", SecObjectIdentifiers.SecP160k1, SecP160K1Holder.Instance); + DefineCurve("secp160r1", SecObjectIdentifiers.SecP160r1, SecP160R1Holder.Instance); + DefineCurve("secp160r2", SecObjectIdentifiers.SecP160r2, SecP160R2Holder.Instance); + DefineCurve("secp192k1", SecObjectIdentifiers.SecP192k1, SecP192K1Holder.Instance); + DefineCurve("secp192r1", SecObjectIdentifiers.SecP192r1, SecP192R1Holder.Instance); + DefineCurve("secp224k1", SecObjectIdentifiers.SecP224k1, SecP224K1Holder.Instance); + DefineCurve("secp224r1", SecObjectIdentifiers.SecP224r1, SecP224R1Holder.Instance); + DefineCurve("secp256k1", SecObjectIdentifiers.SecP256k1, SecP256K1Holder.Instance); + DefineCurve("secp256r1", SecObjectIdentifiers.SecP256r1, SecP256R1Holder.Instance); + DefineCurve("secp384r1", SecObjectIdentifiers.SecP384r1, SecP384R1Holder.Instance); + DefineCurve("secp521r1", SecObjectIdentifiers.SecP521r1, SecP521R1Holder.Instance); + + DefineCurve("sect113r1", SecObjectIdentifiers.SecT113r1, SecT113R1Holder.Instance); + DefineCurve("sect113r2", SecObjectIdentifiers.SecT113r2, SecT113R2Holder.Instance); + DefineCurve("sect131r1", SecObjectIdentifiers.SecT131r1, SecT131R1Holder.Instance); + DefineCurve("sect131r2", SecObjectIdentifiers.SecT131r2, SecT131R2Holder.Instance); + DefineCurve("sect163k1", SecObjectIdentifiers.SecT163k1, SecT163K1Holder.Instance); + DefineCurve("sect163r1", SecObjectIdentifiers.SecT163r1, SecT163R1Holder.Instance); + DefineCurve("sect163r2", SecObjectIdentifiers.SecT163r2, SecT163R2Holder.Instance); + DefineCurve("sect193r1", SecObjectIdentifiers.SecT193r1, SecT193R1Holder.Instance); + DefineCurve("sect193r2", SecObjectIdentifiers.SecT193r2, SecT193R2Holder.Instance); + DefineCurve("sect233k1", SecObjectIdentifiers.SecT233k1, SecT233K1Holder.Instance); + DefineCurve("sect233r1", SecObjectIdentifiers.SecT233r1, SecT233R1Holder.Instance); + DefineCurve("sect239k1", SecObjectIdentifiers.SecT239k1, SecT239K1Holder.Instance); + DefineCurve("sect283k1", SecObjectIdentifiers.SecT283k1, SecT283K1Holder.Instance); + DefineCurve("sect283r1", SecObjectIdentifiers.SecT283r1, SecT283R1Holder.Instance); + DefineCurve("sect409k1", SecObjectIdentifiers.SecT409k1, SecT409K1Holder.Instance); + DefineCurve("sect409r1", SecObjectIdentifiers.SecT409r1, SecT409R1Holder.Instance); + DefineCurve("sect571k1", SecObjectIdentifiers.SecT571k1, SecT571K1Holder.Instance); + DefineCurve("sect571r1", SecObjectIdentifiers.SecT571r1, SecT571R1Holder.Instance); + + DefineCurve("sm2p256v1", GMObjectIdentifiers.sm2p256v1, SM2P256V1Holder.Instance); + + DefineCurveAlias("B-163", SecObjectIdentifiers.SecT163r2); + DefineCurveAlias("B-233", SecObjectIdentifiers.SecT233r1); + DefineCurveAlias("B-283", SecObjectIdentifiers.SecT283r1); + DefineCurveAlias("B-409", SecObjectIdentifiers.SecT409r1); + DefineCurveAlias("B-571", SecObjectIdentifiers.SecT571r1); + + DefineCurveAlias("K-163", SecObjectIdentifiers.SecT163k1); + DefineCurveAlias("K-233", SecObjectIdentifiers.SecT233k1); + DefineCurveAlias("K-283", SecObjectIdentifiers.SecT283k1); + DefineCurveAlias("K-409", SecObjectIdentifiers.SecT409k1); + DefineCurveAlias("K-571", SecObjectIdentifiers.SecT571k1); + + DefineCurveAlias("P-192", SecObjectIdentifiers.SecP192r1); + DefineCurveAlias("P-224", SecObjectIdentifiers.SecP224r1); + DefineCurveAlias("P-256", SecObjectIdentifiers.SecP256r1); + DefineCurveAlias("P-384", SecObjectIdentifiers.SecP384r1); + DefineCurveAlias("P-521", SecObjectIdentifiers.SecP521r1); + } + + /// Look up the for the curve with the given name. + /// The name of the curve. + public static X9ECParameters GetByName(string name) + { + DerObjectIdentifier oid = GetOid(name); + return oid == null ? null : GetByOid(oid); + } + + /// Look up an for the curve with the given name. + /// + /// Allows accessing the curve without necessarily triggering the creation of the + /// full . + /// + /// The name of the curve. + public static X9ECParametersHolder GetByNameLazy(string name) + { + DerObjectIdentifier oid = GetOid(name); + return oid == null ? null : GetByOidLazy(oid); + } + + /// Look up the for the curve with the given + /// OID. + /// The OID for the curve. + public static X9ECParameters GetByOid(DerObjectIdentifier oid) + { + return GetByOidLazy(oid)?.Parameters; + } + + /// Look up an for the curve with the given + /// OID. + /// + /// Allows accessing the curve without necessarily triggering the creation of the + /// full . + /// + /// The OID for the curve. + public static X9ECParametersHolder GetByOidLazy(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(curves, oid); + } + + /// Look up the name of the curve with the given OID. + /// The OID for the curve. + public static string GetName(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(names, oid); + } + + /// Look up the OID of the curve with the given name. + /// The name of the curve. + public static DerObjectIdentifier GetOid(string name) + { + return CollectionUtilities.GetValueOrNull(objIds, name); + } + + /// Enumerate the available curve names in this registry. + public static IEnumerable Names + { + get { return CollectionUtilities.Proxy(objIds.Keys); } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ec/CustomNamedCurves.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ec/CustomNamedCurves.cs.meta new file mode 100644 index 000000000..594561de9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/ec/CustomNamedCurves.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 32ffbd2c58332be4cb98527094e5ea00 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings.meta new file mode 100644 index 000000000..b5d5a6e21 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 35397ea2ff7827c429fbd3f646b14705 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings/ISO9796d1Encoding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings/ISO9796d1Encoding.cs new file mode 100644 index 000000000..7c53a9aae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings/ISO9796d1Encoding.cs @@ -0,0 +1,267 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Encodings +{ + /** + * ISO 9796-1 padding. Note in the light of recent results you should + * only use this with RSA (rather than the "simpler" Rabin keys) and you + * should never use it with anything other than a hash (ie. even if the + * message is small don't sign the message, sign it's hash) or some "random" + * value. See your favorite search engine for details. + */ + public class ISO9796d1Encoding + : IAsymmetricBlockCipher + { + private static readonly BigInteger Sixteen = BigInteger.ValueOf(16); + private static readonly BigInteger Six = BigInteger.ValueOf(6); + + private static readonly byte[] shadows = { 0xe, 0x3, 0x5, 0x8, 0x9, 0x4, 0x2, 0xf, + 0x0, 0xd, 0xb, 0x6, 0x7, 0xa, 0xc, 0x1 }; + private static readonly byte[] inverse = { 0x8, 0xf, 0x6, 0x1, 0x5, 0x2, 0xb, 0xc, + 0x3, 0x4, 0xd, 0xa, 0xe, 0x9, 0x0, 0x7 }; + + private readonly IAsymmetricBlockCipher engine; + private bool forEncryption; + private int bitSize; + private int padBits = 0; + private BigInteger modulus; + + public ISO9796d1Encoding(IAsymmetricBlockCipher cipher) + { + this.engine = cipher; + } + + public string AlgorithmName => engine.AlgorithmName + "/ISO9796-1Padding"; + + public IAsymmetricBlockCipher UnderlyingCipher => engine; + + public void Init(bool forEncryption, ICipherParameters parameters) + { + RsaKeyParameters kParam; + if (parameters is ParametersWithRandom withRandom) + { + kParam = (RsaKeyParameters)withRandom.Parameters; + } + else + { + kParam = (RsaKeyParameters)parameters; + } + + engine.Init(forEncryption, parameters); + + modulus = kParam.Modulus; + bitSize = modulus.BitLength; + + this.forEncryption = forEncryption; + } + + /** + * return the input block size. The largest message we can process + * is (key_size_in_bits + 3)/16, which in our world comes to + * key_size_in_bytes / 2. + */ + public int GetInputBlockSize() + { + int baseBlockSize = engine.GetInputBlockSize(); + + if (forEncryption) + { + return (baseBlockSize + 1) / 2; + } + else + { + return baseBlockSize; + } + } + + /** + * return the maximum possible size for the output. + */ + public int GetOutputBlockSize() + { + int baseBlockSize = engine.GetOutputBlockSize(); + + if (forEncryption) + { + return baseBlockSize; + } + else + { + return (baseBlockSize + 1) / 2; + } + } + + /** + * set the number of bits in the next message to be treated as + * pad bits. + */ + public void SetPadBits( + int padBits) + { + if (padBits > 7) + { + throw new ArgumentException("padBits > 7"); + } + + this.padBits = padBits; + } + + /** + * retrieve the number of pad bits in the last decoded message. + */ + public int GetPadBits() + { + return padBits; + } + + public byte[] ProcessBlock( + byte[] input, + int inOff, + int length) + { + if (forEncryption) + { + return EncodeBlock(input, inOff, length); + } + else + { + return DecodeBlock(input, inOff, length); + } + } + + private byte[] EncodeBlock( + byte[] input, + int inOff, + int inLen) + { + byte[] block = new byte[(bitSize + 7) / 8]; + int r = padBits + 1; + int z = inLen; + int t = (bitSize + 13) / 16; + + for (int i = 0; i < t; i += z) + { + if (i > t - z) + { + Array.Copy(input, inOff + inLen - (t - i), + block, block.Length - t, t - i); + } + else + { + Array.Copy(input, inOff, block, block.Length - (i + z), z); + } + } + + for (int i = block.Length - 2 * t; i != block.Length; i += 2) + { + byte val = block[block.Length - t + i / 2]; + + block[i] = (byte)((shadows[(uint) (val & 0xff) >> 4] << 4) + | shadows[val & 0x0f]); + block[i + 1] = val; + } + + block[block.Length - 2 * z] ^= (byte) r; + block[block.Length - 1] = (byte)((block[block.Length - 1] << 4) | 0x06); + + int maxBit = (8 - (bitSize - 1) % 8); + int offSet = 0; + + if (maxBit != 8) + { + block[0] &= (byte) ((ushort) 0xff >> maxBit); + block[0] |= (byte) ((ushort) 0x80 >> maxBit); + } + else + { + block[0] = 0x00; + block[1] |= 0x80; + offSet = 1; + } + + return engine.ProcessBlock(block, offSet, block.Length - offSet); + } + + /** + * @exception InvalidCipherTextException if the decrypted block is not a valid ISO 9796 bit string + */ + private byte[] DecodeBlock( + byte[] input, + int inOff, + int inLen) + { + byte[] block = engine.ProcessBlock(input, inOff, inLen); + int r = 1; + int t = (bitSize + 13) / 16; + + BigInteger iS = new BigInteger(1, block); + BigInteger iR; + if (iS.Mod(Sixteen).Equals(Six)) + { + iR = iS; + } + else + { + iR = modulus.Subtract(iS); + + if (!iR.Mod(Sixteen).Equals(Six)) + throw new InvalidCipherTextException("resulting integer iS or (modulus - iS) is not congruent to 6 mod 16"); + } + + block = iR.ToByteArrayUnsigned(); + + if ((block[block.Length - 1] & 0x0f) != 0x6) + throw new InvalidCipherTextException("invalid forcing byte in block"); + + block[block.Length - 1] = + (byte)(((ushort)(block[block.Length - 1] & 0xff) >> 4) + | ((inverse[(block[block.Length - 2] & 0xff) >> 4]) << 4)); + + block[0] = (byte)((shadows[(uint) (block[1] & 0xff) >> 4] << 4) + | shadows[block[1] & 0x0f]); + + bool boundaryFound = false; + int boundary = 0; + + for (int i = block.Length - 1; i >= block.Length - 2 * t; i -= 2) + { + int val = ((shadows[(uint) (block[i] & 0xff) >> 4] << 4) + | shadows[block[i] & 0x0f]); + + if (((block[i - 1] ^ val) & 0xff) != 0) + { + if (!boundaryFound) + { + boundaryFound = true; + r = (block[i - 1] ^ val) & 0xff; + boundary = i - 1; + } + else + { + throw new InvalidCipherTextException("invalid tsums in block"); + } + } + } + + block[boundary] = 0; + + byte[] nblock = new byte[(block.Length - boundary) / 2]; + + for (int i = 0; i < nblock.Length; i++) + { + nblock[i] = block[2 * i + boundary + 1]; + } + + padBits = r - 1; + + return nblock; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings/ISO9796d1Encoding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings/ISO9796d1Encoding.cs.meta new file mode 100644 index 000000000..961a33379 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings/ISO9796d1Encoding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a70193810adfc84bb1c2b7d0cfbdda8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings/OaepEncoding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings/OaepEncoding.cs new file mode 100644 index 000000000..32dccc91e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings/OaepEncoding.cs @@ -0,0 +1,356 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Encodings +{ + /** + * Optimal Asymmetric Encryption Padding (OAEP) - see PKCS 1 V 2. + */ + public class OaepEncoding + : IAsymmetricBlockCipher + { + private byte[] defHash; + private IDigest mgf1Hash; + + private IAsymmetricBlockCipher engine; + private SecureRandom random; + private bool forEncryption; + + public OaepEncoding( + IAsymmetricBlockCipher cipher) + : this(cipher, new Sha1Digest(), null) + { + } + + public OaepEncoding( + IAsymmetricBlockCipher cipher, + IDigest hash) + : this(cipher, hash, null) + { + } + + public OaepEncoding( + IAsymmetricBlockCipher cipher, + IDigest hash, + byte[] encodingParams) + : this(cipher, hash, hash, encodingParams) + { + } + + public OaepEncoding( + IAsymmetricBlockCipher cipher, + IDigest hash, + IDigest mgf1Hash, + byte[] encodingParams) + { + this.engine = cipher; + this.mgf1Hash = mgf1Hash; + this.defHash = new byte[hash.GetDigestSize()]; + + hash.Reset(); + + if (encodingParams != null) + { + hash.BlockUpdate(encodingParams, 0, encodingParams.Length); + } + + hash.DoFinal(defHash, 0); + } + + public string AlgorithmName => engine.AlgorithmName + "/OAEPPadding"; + + public IAsymmetricBlockCipher UnderlyingCipher => engine; + + public void Init(bool forEncryption, ICipherParameters parameters) + { + if (parameters is ParametersWithRandom withRandom) + { + this.random = withRandom.Random; + } + else + { + this.random = CryptoServicesRegistrar.GetSecureRandom(); + } + + engine.Init(forEncryption, parameters); + + this.forEncryption = forEncryption; + } + + public int GetInputBlockSize() + { + int baseBlockSize = engine.GetInputBlockSize(); + + if (forEncryption) + { + return baseBlockSize - 1 - 2 * defHash.Length; + } + else + { + return baseBlockSize; + } + } + + public int GetOutputBlockSize() + { + int baseBlockSize = engine.GetOutputBlockSize(); + + if (forEncryption) + { + return baseBlockSize; + } + else + { + return baseBlockSize - 1 - 2 * defHash.Length; + } + } + + public byte[] ProcessBlock( + byte[] inBytes, + int inOff, + int inLen) + { + if (forEncryption) + { + return EncodeBlock(inBytes, inOff, inLen); + } + else + { + return DecodeBlock(inBytes, inOff, inLen); + } + } + + private byte[] EncodeBlock( + byte[] inBytes, + int inOff, + int inLen) + { + Check.DataLength(inLen > GetInputBlockSize(), "input data too long"); + + byte[] block = new byte[GetInputBlockSize() + 1 + 2 * defHash.Length]; + + // + // copy in the message + // + Array.Copy(inBytes, inOff, block, block.Length - inLen, inLen); + + // + // add sentinel + // + block[block.Length - inLen - 1] = 0x01; + + // + // as the block is already zeroed - there's no need to add PS (the >= 0 pad of 0) + // + + // + // add the hash of the encoding params. + // + Array.Copy(defHash, 0, block, defHash.Length, defHash.Length); + + // + // generate the seed. + // + byte[] seed = SecureRandom.GetNextBytes(random, defHash.Length); + + // + // mask the message block. + // + byte[] mask = MaskGeneratorFunction(seed, 0, seed.Length, block.Length - defHash.Length); + + for (int i = defHash.Length; i != block.Length; i++) + { + block[i] ^= mask[i - defHash.Length]; + } + + // + // add in the seed + // + Array.Copy(seed, 0, block, 0, defHash.Length); + + // + // mask the seed. + // + mask = MaskGeneratorFunction( + block, defHash.Length, block.Length - defHash.Length, defHash.Length); + + for (int i = 0; i != defHash.Length; i++) + { + block[i] ^= mask[i]; + } + + return engine.ProcessBlock(block, 0, block.Length); + } + + /** + * @exception InvalidCipherTextException if the decrypted block turns out to + * be badly formatted. + */ + private byte[] DecodeBlock( + byte[] inBytes, + int inOff, + int inLen) + { + byte[] data = engine.ProcessBlock(inBytes, inOff, inLen); + byte[] block = new byte[engine.GetOutputBlockSize()]; + + // + // as we may have zeros in our leading bytes for the block we produced + // on encryption, we need to make sure our decrypted block comes back + // the same size. + // + // i.e. wrong when block.length < (2 * defHash.length) + 1 + int wrongMask = (block.Length - ((2 * defHash.Length) + 1)) >> 31; + + if (data.Length <= block.Length) + { + Array.Copy(data, 0, block, block.Length - data.Length, data.Length); + } + else + { + Array.Copy(data, 0, block, 0, block.Length); + wrongMask |= 1; + } + + // + // unmask the seed. + // + byte[] mask = MaskGeneratorFunction( + block, defHash.Length, block.Length - defHash.Length, defHash.Length); + + for (int i = 0; i != defHash.Length; i++) + { + block[i] ^= mask[i]; + } + + // + // unmask the message block. + // + mask = MaskGeneratorFunction(block, 0, defHash.Length, block.Length - defHash.Length); + + for (int i = defHash.Length; i != block.Length; i++) + { + block[i] ^= mask[i - defHash.Length]; + } + + // + // check the hash of the encoding params. + // long check to try to avoid this been a source of a timing attack. + // + for (int i = 0; i != defHash.Length; i++) + { + wrongMask |= defHash[i] ^ block[defHash.Length + i]; + } + + // + // find the data block + // + int start = -1; + + for (int index = 2 * defHash.Length; index != block.Length; index++) + { + int octet = block[index]; + + // i.e. mask will be 0xFFFFFFFF if octet is non-zero and start is (still) negative, else 0. + int shouldSetMask = (-octet & start) >> 31; + + start += index & shouldSetMask; + } + + wrongMask |= start >> 31; + ++start; + wrongMask |= block[start] ^ 1; + + if (wrongMask != 0) + { + Arrays.Fill(block, 0); + throw new InvalidCipherTextException("data wrong"); + } + + ++start; + + // + // extract the data block + // + byte[] output = new byte[block.Length - start]; + + Array.Copy(block, start, output, 0, output.Length); + Array.Clear(block, 0, block.Length); + + return output; + } + + private byte[] MaskGeneratorFunction( + byte[] Z, + int zOff, + int zLen, + int length) + { + if (mgf1Hash is IXof) + { + byte[] mask = new byte[length]; + mgf1Hash.BlockUpdate(Z, zOff, zLen); + ((IXof)mgf1Hash).OutputFinal(mask, 0, mask.Length); + + return mask; + } + else + { + return MaskGeneratorFunction1(Z, zOff, zLen, length); + } + } + + /** + * mask generator function, as described in PKCS1v2. + */ + private byte[] MaskGeneratorFunction1( + byte[] Z, + int zOff, + int zLen, + int length) + { + byte[] mask = new byte[length]; + byte[] hashBuf = new byte[mgf1Hash.GetDigestSize()]; + byte[] C = new byte[4]; + int counter = 0; + + mgf1Hash.Reset(); + + while (counter < (length / hashBuf.Length)) + { + Pack.UInt32_To_BE((uint)counter, C); + + mgf1Hash.BlockUpdate(Z, zOff, zLen); + mgf1Hash.BlockUpdate(C, 0, C.Length); + mgf1Hash.DoFinal(hashBuf, 0); + + Array.Copy(hashBuf, 0, mask, counter * hashBuf.Length, hashBuf.Length); + + counter++; + } + + if ((counter * hashBuf.Length) < length) + { + Pack.UInt32_To_BE((uint)counter, C); + + mgf1Hash.BlockUpdate(Z, zOff, zLen); + mgf1Hash.BlockUpdate(C, 0, C.Length); + mgf1Hash.DoFinal(hashBuf, 0); + + Array.Copy(hashBuf, 0, mask, counter * hashBuf.Length, mask.Length - (counter * hashBuf.Length)); + } + + return mask; + } + } +} + +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings/OaepEncoding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings/OaepEncoding.cs.meta new file mode 100644 index 000000000..741136c64 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings/OaepEncoding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 60f0db7343141334d896810ce58bf1bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings/Pkcs1Encoding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings/Pkcs1Encoding.cs new file mode 100644 index 000000000..a9a0a7e5f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings/Pkcs1Encoding.cs @@ -0,0 +1,380 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Encodings +{ + /** + * this does your basic Pkcs 1 v1.5 padding - whether or not you should be using this + * depends on your application - see Pkcs1 Version 2 for details. + */ + public class Pkcs1Encoding + : IAsymmetricBlockCipher + { + /** + * some providers fail to include the leading zero in PKCS1 encoded blocks. If you need to + * work with one of these set the system property BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs1.Strict to false. + */ + public const string StrictLengthEnabledProperty = "BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs1.Strict"; + + private const int HeaderLength = 10; + + /** + * The same effect can be achieved by setting the static property directly + *

+ * The static property is checked during construction of the encoding object, it is set to + * true by default. + *

+ */ + public static bool StrictLengthEnabled + { + get { return strictLengthEnabled[0]; } + set { strictLengthEnabled[0] = value; } + } + + private static readonly bool[] strictLengthEnabled; + + static Pkcs1Encoding() + { + string strictProperty = Org.BouncyCastle.Utilities.Platform.GetEnvironmentVariable(StrictLengthEnabledProperty); + + strictLengthEnabled = new bool[]{ strictProperty == null || Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase("true", strictProperty) }; + } + + + private SecureRandom random; + private IAsymmetricBlockCipher engine; + private bool forEncryption; + private bool forPrivateKey; + private bool useStrictLength; + private int pLen = -1; + private byte[] fallback = null; + private byte[] blockBuffer = null; + + /** + * Basic constructor. + * + * @param cipher + */ + public Pkcs1Encoding( + IAsymmetricBlockCipher cipher) + { + this.engine = cipher; + this.useStrictLength = StrictLengthEnabled; + } + + /** + * Constructor for decryption with a fixed plaintext length. + * + * @param cipher The cipher to use for cryptographic operation. + * @param pLen Length of the expected plaintext. + */ + public Pkcs1Encoding(IAsymmetricBlockCipher cipher, int pLen) + { + this.engine = cipher; + this.useStrictLength = StrictLengthEnabled; + this.pLen = pLen; + } + + /** + * Constructor for decryption with a fixed plaintext length and a fallback + * value that is returned, if the padding is incorrect. + * + * @param cipher + * The cipher to use for cryptographic operation. + * @param fallback + * The fallback value, we don't to a arraycopy here. + */ + public Pkcs1Encoding(IAsymmetricBlockCipher cipher, byte[] fallback) + { + this.engine = cipher; + this.useStrictLength = StrictLengthEnabled; + this.fallback = fallback; + this.pLen = fallback.Length; + } + + public string AlgorithmName => engine.AlgorithmName + "/PKCS1Padding"; + + public IAsymmetricBlockCipher UnderlyingCipher => engine; + + public void Init(bool forEncryption, ICipherParameters parameters) + { + AsymmetricKeyParameter kParam; + if (parameters is ParametersWithRandom withRandom) + { + this.random = withRandom.Random; + kParam = (AsymmetricKeyParameter)withRandom.Parameters; + } + else + { + this.random = CryptoServicesRegistrar.GetSecureRandom(); + kParam = (AsymmetricKeyParameter)parameters; + } + + engine.Init(forEncryption, parameters); + + this.forPrivateKey = kParam.IsPrivate; + this.forEncryption = forEncryption; + this.blockBuffer = new byte[engine.GetOutputBlockSize()]; + + if (pLen > 0 && fallback == null && random == null) + throw new ArgumentException("encoder requires random"); + } + + public int GetInputBlockSize() + { + int baseBlockSize = engine.GetInputBlockSize(); + + return forEncryption + ? baseBlockSize - HeaderLength + : baseBlockSize; + } + + public int GetOutputBlockSize() + { + int baseBlockSize = engine.GetOutputBlockSize(); + + return forEncryption + ? baseBlockSize + : baseBlockSize - HeaderLength; + } + + public byte[] ProcessBlock( + byte[] input, + int inOff, + int length) + { + return forEncryption + ? EncodeBlock(input, inOff, length) + : DecodeBlock(input, inOff, length); + } + + private byte[] EncodeBlock( + byte[] input, + int inOff, + int inLen) + { + if (inLen > GetInputBlockSize()) + throw new ArgumentException("input data too large", "inLen"); + + byte[] block = new byte[engine.GetInputBlockSize()]; + + if (forPrivateKey) + { + block[0] = 0x01; // type code 1 + + for (int i = 1; i != block.Length - inLen - 1; i++) + { + block[i] = (byte)0xFF; + } + } + else + { + random.NextBytes(block); // random fill + + block[0] = 0x02; // type code 2 + + // + // a zero byte marks the end of the padding, so all + // the pad bytes must be non-zero. + // + for (int i = 1; i != block.Length - inLen - 1; i++) + { + while (block[i] == 0) + { + block[i] = (byte)random.NextInt(); + } + } + } + + block[block.Length - inLen - 1] = 0x00; // mark the end of the padding + Array.Copy(input, inOff, block, block.Length - inLen, inLen); + + return engine.ProcessBlock(block, 0, block.Length); + } + + /** + * Checks if the argument is a correctly PKCS#1.5 encoded Plaintext + * for encryption. + * + * @param encoded The Plaintext. + * @param pLen Expected length of the plaintext. + * @return Either 0, if the encoding is correct, or -1, if it is incorrect. + */ + private static int CheckPkcs1Encoding(byte[] encoded, int pLen) + { + int correct = 0; + /* + * Check if the first two bytes are 0 2 + */ + correct |= (encoded[0] ^ 2); + + /* + * Now the padding check, check for no 0 byte in the padding + */ + int plen = encoded.Length - ( + pLen /* Length of the PMS */ + + 1 /* Final 0-byte before PMS */ + ); + + for (int i = 1; i < plen; i++) + { + int tmp = encoded[i]; + tmp |= tmp >> 1; + tmp |= tmp >> 2; + tmp |= tmp >> 4; + correct |= (tmp & 1) - 1; + } + + /* + * Make sure the padding ends with a 0 byte. + */ + correct |= encoded[encoded.Length - (pLen + 1)]; + + /* + * Return 0 or 1, depending on the result. + */ + correct |= correct >> 1; + correct |= correct >> 2; + correct |= correct >> 4; + return ~((correct & 1) - 1); + } + + /** + * Decode PKCS#1.5 encoding, and return a random value if the padding is not correct. + * + * @param in The encrypted block. + * @param inOff Offset in the encrypted block. + * @param inLen Length of the encrypted block. + * @param pLen Length of the desired output. + * @return The plaintext without padding, or a random value if the padding was incorrect. + * @throws InvalidCipherTextException + */ + private byte[] DecodeBlockOrRandom(byte[] input, int inOff, int inLen) + { + if (!forPrivateKey) + throw new InvalidCipherTextException("sorry, this method is only for decryption, not for signing"); + + byte[] block = engine.ProcessBlock(input, inOff, inLen); + byte[] random; + if (this.fallback == null) + { + random = new byte[this.pLen]; + this.random.NextBytes(random); + } + else + { + random = fallback; + } + + byte[] data = (useStrictLength & (block.Length != engine.GetOutputBlockSize())) ? blockBuffer : block; + + /* + * Check the padding. + */ + int correct = CheckPkcs1Encoding(data, this.pLen); + + /* + * Now, to a constant time constant memory copy of the decrypted value + * or the random value, depending on the validity of the padding. + */ + byte[] result = new byte[this.pLen]; + for (int i = 0; i < this.pLen; i++) + { + result[i] = (byte)((data[i + (data.Length - pLen)] & (~correct)) | (random[i] & correct)); + } + + Arrays.Fill(data, 0); + + return result; + } + + /** + * @exception InvalidCipherTextException if the decrypted block is not in Pkcs1 format. + */ + private byte[] DecodeBlock( + byte[] input, + int inOff, + int inLen) + { + /* + * If the length of the expected plaintext is known, we use a constant-time decryption. + * If the decryption fails, we return a random value. + */ + if (this.pLen != -1) + { + return this.DecodeBlockOrRandom(input, inOff, inLen); + } + + byte[] block = engine.ProcessBlock(input, inOff, inLen); + bool incorrectLength = (useStrictLength & (block.Length != engine.GetOutputBlockSize())); + + byte[] data; + if (block.Length < GetOutputBlockSize()) + { + data = blockBuffer; + } + else + { + data = block; + } + + byte expectedType = (byte)(forPrivateKey ? 2 : 1); + byte type = data[0]; + + bool badType = (type != expectedType); + + // + // find and extract the message block. + // + int start = FindStart(type, data); + + start++; // data should start at the next byte + + if (badType | (start < HeaderLength)) + { + Arrays.Fill(data, 0); + throw new InvalidCipherTextException("block incorrect"); + } + + // if we get this far, it's likely to be a genuine encoding error + if (incorrectLength) + { + Arrays.Fill(data, 0); + throw new InvalidCipherTextException("block incorrect size"); + } + + byte[] result = new byte[data.Length - start]; + + Array.Copy(data, start, result, 0, result.Length); + + return result; + } + + private int FindStart(byte type, byte[] block) + { + int start = -1; + bool padErr = false; + + for (int i = 1; i != block.Length; i++) + { + byte pad = block[i]; + + if (pad == 0 & start < 0) + { + start = i; + } + padErr |= ((type == 1) & (start < 0) & (pad != (byte)0xff)); + } + + return padErr ? -1 : start; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings/Pkcs1Encoding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings/Pkcs1Encoding.cs.meta new file mode 100644 index 000000000..17ace7b43 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/encodings/Pkcs1Encoding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5b1316d7c7c9dbc42b6ed758a5b1e70e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines.meta new file mode 100644 index 000000000..88ed5db07 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7b265757931cf134392d9b1ab2925c86 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesEngine.cs new file mode 100644 index 000000000..d8232e3d2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesEngine.cs @@ -0,0 +1,723 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * an implementation of the AES (Rijndael), from FIPS-197. + *

+ * For further details see: http://csrc.nist.gov/encryption/aes/. + * + * This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + * http://fp.gladman.plus.com/cryptography_technology/rijndael/ + * + * There are three levels of tradeoff of speed vs memory + * Because java has no preprocessor, they are written as three separate classes from which to choose + * + * The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + * and 4 for decryption. + * + * The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + * adding 12 rotate operations per round to compute the values contained in the other tables from + * the contents of the first. + * + * The slowest version uses no static tables at all and computes the values in each round. + *

+ *

+ * This file contains the middle performance version with 2Kbytes of static tables for round precomputation. + *

+ */ + public sealed class AesEngine + : IBlockCipher + { + // The S box + private static readonly byte[] S = + { + 99, 124, 119, 123, 242, 107, 111, 197, + 48, 1, 103, 43, 254, 215, 171, 118, + 202, 130, 201, 125, 250, 89, 71, 240, + 173, 212, 162, 175, 156, 164, 114, 192, + 183, 253, 147, 38, 54, 63, 247, 204, + 52, 165, 229, 241, 113, 216, 49, 21, + 4, 199, 35, 195, 24, 150, 5, 154, + 7, 18, 128, 226, 235, 39, 178, 117, + 9, 131, 44, 26, 27, 110, 90, 160, + 82, 59, 214, 179, 41, 227, 47, 132, + 83, 209, 0, 237, 32, 252, 177, 91, + 106, 203, 190, 57, 74, 76, 88, 207, + 208, 239, 170, 251, 67, 77, 51, 133, + 69, 249, 2, 127, 80, 60, 159, 168, + 81, 163, 64, 143, 146, 157, 56, 245, + 188, 182, 218, 33, 16, 255, 243, 210, + 205, 12, 19, 236, 95, 151, 68, 23, + 196, 167, 126, 61, 100, 93, 25, 115, + 96, 129, 79, 220, 34, 42, 144, 136, + 70, 238, 184, 20, 222, 94, 11, 219, + 224, 50, 58, 10, 73, 6, 36, 92, + 194, 211, 172, 98, 145, 149, 228, 121, + 231, 200, 55, 109, 141, 213, 78, 169, + 108, 86, 244, 234, 101, 122, 174, 8, + 186, 120, 37, 46, 28, 166, 180, 198, + 232, 221, 116, 31, 75, 189, 139, 138, + 112, 62, 181, 102, 72, 3, 246, 14, + 97, 53, 87, 185, 134, 193, 29, 158, + 225, 248, 152, 17, 105, 217, 142, 148, + 155, 30, 135, 233, 206, 85, 40, 223, + 140, 161, 137, 13, 191, 230, 66, 104, + 65, 153, 45, 15, 176, 84, 187, 22, + }; + + // The inverse S-box + private static readonly byte[] Si = + { + 82, 9, 106, 213, 48, 54, 165, 56, + 191, 64, 163, 158, 129, 243, 215, 251, + 124, 227, 57, 130, 155, 47, 255, 135, + 52, 142, 67, 68, 196, 222, 233, 203, + 84, 123, 148, 50, 166, 194, 35, 61, + 238, 76, 149, 11, 66, 250, 195, 78, + 8, 46, 161, 102, 40, 217, 36, 178, + 118, 91, 162, 73, 109, 139, 209, 37, + 114, 248, 246, 100, 134, 104, 152, 22, + 212, 164, 92, 204, 93, 101, 182, 146, + 108, 112, 72, 80, 253, 237, 185, 218, + 94, 21, 70, 87, 167, 141, 157, 132, + 144, 216, 171, 0, 140, 188, 211, 10, + 247, 228, 88, 5, 184, 179, 69, 6, + 208, 44, 30, 143, 202, 63, 15, 2, + 193, 175, 189, 3, 1, 19, 138, 107, + 58, 145, 17, 65, 79, 103, 220, 234, + 151, 242, 207, 206, 240, 180, 230, 115, + 150, 172, 116, 34, 231, 173, 53, 133, + 226, 249, 55, 232, 28, 117, 223, 110, + 71, 241, 26, 113, 29, 41, 197, 137, + 111, 183, 98, 14, 170, 24, 190, 27, + 252, 86, 62, 75, 198, 210, 121, 32, + 154, 219, 192, 254, 120, 205, 90, 244, + 31, 221, 168, 51, 136, 7, 199, 49, + 177, 18, 16, 89, 39, 128, 236, 95, + 96, 81, 127, 169, 25, 181, 74, 13, + 45, 229, 122, 159, 147, 201, 156, 239, + 160, 224, 59, 77, 174, 42, 245, 176, + 200, 235, 187, 60, 131, 83, 153, 97, + 23, 43, 4, 126, 186, 119, 214, 38, + 225, 105, 20, 99, 85, 33, 12, 125, + }; + + // vector used in calculating key schedule (powers of x in GF(256)) + private static readonly byte[] rcon = + { + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, + 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 + }; + + // precomputation tables of calculations for rounds + private static readonly uint[] T0 = + { + 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, 0x0df2f2ff, + 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591, 0x50303060, 0x03010102, + 0xa96767ce, 0x7d2b2b56, 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, + 0x9a7676ec, 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa, + 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb, 0xecadad41, + 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45, 0xbf9c9c23, 0xf7a4a453, + 0x967272e4, 0x5bc0c09b, 0xc2b7b775, 0x1cfdfde1, 0xae93933d, + 0x6a26264c, 0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83, + 0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9, 0x937171e2, + 0x73d8d8ab, 0x53313162, 0x3f15152a, 0x0c040408, 0x52c7c795, + 0x65232346, 0x5ec3c39d, 0x28181830, 0xa1969637, 0x0f05050a, + 0xb59a9a2f, 0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df, + 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea, 0x1b090912, + 0x9e83831d, 0x742c2c58, 0x2e1a1a34, 0x2d1b1b36, 0xb26e6edc, + 0xee5a5ab4, 0xfba0a05b, 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, + 0xceb3b37d, 0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413, + 0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1, 0x60202040, + 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6, 0xbe6a6ad4, 0x46cbcb8d, + 0xd9bebe67, 0x4b393972, 0xde4a4a94, 0xd44c4c98, 0xe85858b0, + 0x4acfcf85, 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed, + 0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511, 0xcf45458a, + 0x10f9f9e9, 0x06020204, 0x817f7ffe, 0xf05050a0, 0x443c3c78, + 0xba9f9f25, 0xe3a8a84b, 0xf35151a2, 0xfea3a35d, 0xc0404080, + 0x8a8f8f05, 0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1, + 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142, 0x30101020, + 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf, 0x4ccdcd81, 0x140c0c18, + 0x35131326, 0x2fececc3, 0xe15f5fbe, 0xa2979735, 0xcc444488, + 0x3917172e, 0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a, + 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6, 0xa06060c0, + 0x98818119, 0xd14f4f9e, 0x7fdcdca3, 0x66222244, 0x7e2a2a54, + 0xab90903b, 0x8388880b, 0xca46468c, 0x29eeeec7, 0xd3b8b86b, + 0x3c141428, 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad, + 0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14, 0xdb494992, + 0x0a06060c, 0x6c242448, 0xe45c5cb8, 0x5dc2c29f, 0x6ed3d3bd, + 0xefacac43, 0xa66262c4, 0xa8919139, 0xa4959531, 0x37e4e4d3, + 0x8b7979f2, 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda, + 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949, 0xb46c6cd8, + 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf, 0xaf6565ca, 0x8e7a7af4, + 0xe9aeae47, 0x18080810, 0xd5baba6f, 0x887878f0, 0x6f25254a, + 0x722e2e5c, 0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697, + 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e, 0xdd4b4b96, + 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f, 0x907070e0, 0x423e3e7c, + 0xc4b5b571, 0xaa6666cc, 0xd8484890, 0x05030306, 0x01f6f6f7, + 0x120e0e1c, 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969, + 0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27, 0x38e1e1d9, + 0x13f8f8eb, 0xb398982b, 0x33111122, 0xbb6969d2, 0x70d9d9a9, + 0x898e8e07, 0xa7949433, 0xb69b9b2d, 0x221e1e3c, 0x92878715, + 0x20e9e9c9, 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5, + 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a, 0xdabfbf65, + 0x31e6e6d7, 0xc6424284, 0xb86868d0, 0xc3414182, 0xb0999929, + 0x772d2d5a, 0x110f0f1e, 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, + 0x3a16162c + }; + + private static readonly uint[] Tinv0 = + { + 0x50a7f451, 0x5365417e, 0xc3a4171a, 0x965e273a, 0xcb6bab3b, + 0xf1459d1f, 0xab58faac, 0x9303e34b, 0x55fa3020, 0xf66d76ad, + 0x9176cc88, 0x254c02f5, 0xfcd7e54f, 0xd7cb2ac5, 0x80443526, + 0x8fa362b5, 0x495ab1de, 0x671bba25, 0x980eea45, 0xe1c0fe5d, + 0x02752fc3, 0x12f04c81, 0xa397468d, 0xc6f9d36b, 0xe75f8f03, + 0x959c9215, 0xeb7a6dbf, 0xda595295, 0x2d83bed4, 0xd3217458, + 0x2969e049, 0x44c8c98e, 0x6a89c275, 0x78798ef4, 0x6b3e5899, + 0xdd71b927, 0xb64fe1be, 0x17ad88f0, 0x66ac20c9, 0xb43ace7d, + 0x184adf63, 0x82311ae5, 0x60335197, 0x457f5362, 0xe07764b1, + 0x84ae6bbb, 0x1ca081fe, 0x942b08f9, 0x58684870, 0x19fd458f, + 0x876cde94, 0xb7f87b52, 0x23d373ab, 0xe2024b72, 0x578f1fe3, + 0x2aab5566, 0x0728ebb2, 0x03c2b52f, 0x9a7bc586, 0xa50837d3, + 0xf2872830, 0xb2a5bf23, 0xba6a0302, 0x5c8216ed, 0x2b1ccf8a, + 0x92b479a7, 0xf0f207f3, 0xa1e2694e, 0xcdf4da65, 0xd5be0506, + 0x1f6234d1, 0x8afea6c4, 0x9d532e34, 0xa055f3a2, 0x32e18a05, + 0x75ebf6a4, 0x39ec830b, 0xaaef6040, 0x069f715e, 0x51106ebd, + 0xf98a213e, 0x3d06dd96, 0xae053edd, 0x46bde64d, 0xb58d5491, + 0x055dc471, 0x6fd40604, 0xff155060, 0x24fb9819, 0x97e9bdd6, + 0xcc434089, 0x779ed967, 0xbd42e8b0, 0x888b8907, 0x385b19e7, + 0xdbeec879, 0x470a7ca1, 0xe90f427c, 0xc91e84f8, 0x00000000, + 0x83868009, 0x48ed2b32, 0xac70111e, 0x4e725a6c, 0xfbff0efd, + 0x5638850f, 0x1ed5ae3d, 0x27392d36, 0x64d90f0a, 0x21a65c68, + 0xd1545b9b, 0x3a2e3624, 0xb1670a0c, 0x0fe75793, 0xd296eeb4, + 0x9e919b1b, 0x4fc5c080, 0xa220dc61, 0x694b775a, 0x161a121c, + 0x0aba93e2, 0xe52aa0c0, 0x43e0223c, 0x1d171b12, 0x0b0d090e, + 0xadc78bf2, 0xb9a8b62d, 0xc8a91e14, 0x8519f157, 0x4c0775af, + 0xbbdd99ee, 0xfd607fa3, 0x9f2601f7, 0xbcf5725c, 0xc53b6644, + 0x347efb5b, 0x7629438b, 0xdcc623cb, 0x68fcedb6, 0x63f1e4b8, + 0xcadc31d7, 0x10856342, 0x40229713, 0x2011c684, 0x7d244a85, + 0xf83dbbd2, 0x1132f9ae, 0x6da129c7, 0x4b2f9e1d, 0xf330b2dc, + 0xec52860d, 0xd0e3c177, 0x6c16b32b, 0x99b970a9, 0xfa489411, + 0x2264e947, 0xc48cfca8, 0x1a3ff0a0, 0xd82c7d56, 0xef903322, + 0xc74e4987, 0xc1d138d9, 0xfea2ca8c, 0x360bd498, 0xcf81f5a6, + 0x28de7aa5, 0x268eb7da, 0xa4bfad3f, 0xe49d3a2c, 0x0d927850, + 0x9bcc5f6a, 0x62467e54, 0xc2138df6, 0xe8b8d890, 0x5ef7392e, + 0xf5afc382, 0xbe805d9f, 0x7c93d069, 0xa92dd56f, 0xb31225cf, + 0x3b99acc8, 0xa77d1810, 0x6e639ce8, 0x7bbb3bdb, 0x097826cd, + 0xf418596e, 0x01b79aec, 0xa89a4f83, 0x656e95e6, 0x7ee6ffaa, + 0x08cfbc21, 0xe6e815ef, 0xd99be7ba, 0xce366f4a, 0xd4099fea, + 0xd67cb029, 0xafb2a431, 0x31233f2a, 0x3094a5c6, 0xc066a235, + 0x37bc4e74, 0xa6ca82fc, 0xb0d090e0, 0x15d8a733, 0x4a9804f1, + 0xf7daec41, 0x0e50cd7f, 0x2ff69117, 0x8dd64d76, 0x4db0ef43, + 0x544daacc, 0xdf0496e4, 0xe3b5d19e, 0x1b886a4c, 0xb81f2cc1, + 0x7f516546, 0x04ea5e9d, 0x5d358c01, 0x737487fa, 0x2e410bfb, + 0x5a1d67b3, 0x52d2db92, 0x335610e9, 0x1347d66d, 0x8c61d79a, + 0x7a0ca137, 0x8e14f859, 0x893c13eb, 0xee27a9ce, 0x35c961b7, + 0xede51ce1, 0x3cb1477a, 0x59dfd29c, 0x3f73f255, 0x79ce1418, + 0xbf37c773, 0xeacdf753, 0x5baafd5f, 0x146f3ddf, 0x86db4478, + 0x81f3afca, 0x3ec468b9, 0x2c342438, 0x5f40a3c2, 0x72c31d16, + 0x0c25e2bc, 0x8b493c28, 0x41950dff, 0x7101a839, 0xdeb30c08, + 0x9ce4b4d8, 0x90c15664, 0x6184cb7b, 0x70b632d5, 0x745c6c48, + 0x4257b8d0 + }; + + private static uint Shift(uint r, int shift) + { + return (r >> shift) | (r << (32 - shift)); + } + + /* multiply four bytes in GF(2^8) by 'x' {02} in parallel */ + + private const uint m1 = 0x80808080; + private const uint m2 = 0x7f7f7f7f; + private const uint m3 = 0x0000001b; + private const uint m4 = 0xC0C0C0C0; + private const uint m5 = 0x3f3f3f3f; + + private static uint FFmulX(uint x) + { + return ((x & m2) << 1) ^ (((x & m1) >> 7) * m3); + } + + private static uint FFmulX2(uint x) + { + uint t0 = (x & m5) << 2; + uint t1 = (x & m4); + t1 ^= (t1 >> 1); + return t0 ^ (t1 >> 2) ^ (t1 >> 5); + } + + /* + The following defines provide alternative definitions of FFmulX that might + give improved performance if a fast 32-bit multiply is not available. + + private int FFmulX(int x) { int u = x & m1; u |= (u >> 1); return ((x & m2) << 1) ^ ((u >>> 3) | (u >>> 6)); } + private static final int m4 = 0x1b1b1b1b; + private int FFmulX(int x) { int u = x & m1; return ((x & m2) << 1) ^ ((u - (u >>> 7)) & m4); } + + */ + + private static uint Inv_Mcol(uint x) + { + uint t0, t1; + t0 = x; + t1 = t0 ^ Shift(t0, 8); + t0 ^= FFmulX(t1); + t1 ^= FFmulX2(t0); + t0 ^= t1 ^ Shift(t1, 16); + return t0; + } + + private static uint SubWord(uint x) + { + return (uint)S[x&255] + | (((uint)S[(x>>8)&255]) << 8) + | (((uint)S[(x>>16)&255]) << 16) + | (((uint)S[(x>>24)&255]) << 24); + } + + /** + * Calculate the necessary round keys + * The number of calculations depends on key size and block size + * AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + * This code is written assuming those are the only possible values + */ + private uint[][] GenerateWorkingKey(byte[] key, bool forEncryption) + { + int keyLen = key.Length; + if (keyLen < 16 || keyLen > 32 || (keyLen & 7) != 0) + throw new ArgumentException("Key length not 128/192/256 bits."); + + int KC = keyLen >> 2; + this.ROUNDS = KC + 6; // This is not always true for the generalized Rijndael that allows larger block sizes + + uint[][] W = new uint[ROUNDS + 1][]; // 4 words in a block + for (int i = 0; i <= ROUNDS; ++i) + { + W[i] = new uint[4]; + } + + switch (KC) + { + case 4: + { + uint t0 = Pack.LE_To_UInt32(key, 0); W[0][0] = t0; + uint t1 = Pack.LE_To_UInt32(key, 4); W[0][1] = t1; + uint t2 = Pack.LE_To_UInt32(key, 8); W[0][2] = t2; + uint t3 = Pack.LE_To_UInt32(key, 12); W[0][3] = t3; + + for (int i = 1; i <= 10; ++i) + { + uint u = SubWord(Shift(t3, 8)) ^ rcon[i - 1]; + t0 ^= u; W[i][0] = t0; + t1 ^= t0; W[i][1] = t1; + t2 ^= t1; W[i][2] = t2; + t3 ^= t2; W[i][3] = t3; + } + + break; + } + case 6: + { + uint t0 = Pack.LE_To_UInt32(key, 0); W[0][0] = t0; + uint t1 = Pack.LE_To_UInt32(key, 4); W[0][1] = t1; + uint t2 = Pack.LE_To_UInt32(key, 8); W[0][2] = t2; + uint t3 = Pack.LE_To_UInt32(key, 12); W[0][3] = t3; + uint t4 = Pack.LE_To_UInt32(key, 16); W[1][0] = t4; + uint t5 = Pack.LE_To_UInt32(key, 20); W[1][1] = t5; + + uint rcon = 1; + uint u = SubWord(Shift(t5, 8)) ^ rcon; rcon <<= 1; + t0 ^= u; W[1][2] = t0; + t1 ^= t0; W[1][3] = t1; + t2 ^= t1; W[2][0] = t2; + t3 ^= t2; W[2][1] = t3; + t4 ^= t3; W[2][2] = t4; + t5 ^= t4; W[2][3] = t5; + + for (int i = 3; i < 12; i += 3) + { + u = SubWord(Shift(t5, 8)) ^ rcon; rcon <<= 1; + t0 ^= u; W[i ][0] = t0; + t1 ^= t0; W[i ][1] = t1; + t2 ^= t1; W[i ][2] = t2; + t3 ^= t2; W[i ][3] = t3; + t4 ^= t3; W[i + 1][0] = t4; + t5 ^= t4; W[i + 1][1] = t5; + u = SubWord(Shift(t5, 8)) ^ rcon; rcon <<= 1; + t0 ^= u; W[i + 1][2] = t0; + t1 ^= t0; W[i + 1][3] = t1; + t2 ^= t1; W[i + 2][0] = t2; + t3 ^= t2; W[i + 2][1] = t3; + t4 ^= t3; W[i + 2][2] = t4; + t5 ^= t4; W[i + 2][3] = t5; + } + + u = SubWord(Shift(t5, 8)) ^ rcon; + t0 ^= u; W[12][0] = t0; + t1 ^= t0; W[12][1] = t1; + t2 ^= t1; W[12][2] = t2; + t3 ^= t2; W[12][3] = t3; + + break; + } + case 8: + { + uint t0 = Pack.LE_To_UInt32(key, 0); W[0][0] = t0; + uint t1 = Pack.LE_To_UInt32(key, 4); W[0][1] = t1; + uint t2 = Pack.LE_To_UInt32(key, 8); W[0][2] = t2; + uint t3 = Pack.LE_To_UInt32(key, 12); W[0][3] = t3; + uint t4 = Pack.LE_To_UInt32(key, 16); W[1][0] = t4; + uint t5 = Pack.LE_To_UInt32(key, 20); W[1][1] = t5; + uint t6 = Pack.LE_To_UInt32(key, 24); W[1][2] = t6; + uint t7 = Pack.LE_To_UInt32(key, 28); W[1][3] = t7; + + uint u, rcon = 1; + + for (int i = 2; i < 14; i += 2) + { + u = SubWord(Shift(t7, 8)) ^ rcon; rcon <<= 1; + t0 ^= u; W[i ][0] = t0; + t1 ^= t0; W[i ][1] = t1; + t2 ^= t1; W[i ][2] = t2; + t3 ^= t2; W[i ][3] = t3; + u = SubWord(t3); + t4 ^= u; W[i + 1][0] = t4; + t5 ^= t4; W[i + 1][1] = t5; + t6 ^= t5; W[i + 1][2] = t6; + t7 ^= t6; W[i + 1][3] = t7; + } + + u = SubWord(Shift(t7, 8)) ^ rcon; + t0 ^= u; W[14][0] = t0; + t1 ^= t0; W[14][1] = t1; + t2 ^= t1; W[14][2] = t2; + t3 ^= t2; W[14][3] = t3; + + break; + } + default: + { + throw new InvalidOperationException("Should never get here"); + } + } + + if (!forEncryption) + { + for (int j = 1; j < ROUNDS; j++) + { + uint[] w = W[j]; + for (int i = 0; i < 4; i++) + { + w[i] = Inv_Mcol(w[i]); + } + } + } + + return W; + } + + private int ROUNDS; + private uint[][] WorkingKey; + private bool forEncryption; + + private byte[] s; + + private const int BLOCK_SIZE = 16; + + /** + * default constructor - 128 bit block size. + */ + public AesEngine() + { + } + + /** + * initialise an AES cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param parameters the parameters required to set up the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public void Init(bool forEncryption, ICipherParameters parameters) + { + if (!(parameters is KeyParameter keyParameter)) + throw new ArgumentException("invalid parameter passed to AES init - " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + + WorkingKey = GenerateWorkingKey(keyParameter.GetKey(), forEncryption); + + this.forEncryption = forEncryption; + this.s = Arrays.Clone(forEncryption ? S : Si); + } + + public string AlgorithmName + { + get { return "AES"; } + } + + public int GetBlockSize() + { + return BLOCK_SIZE; + } + + public int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (WorkingKey == null) + throw new InvalidOperationException("AES engine not initialised"); + + Check.DataLength(input, inOff, 16, "input buffer too short"); + Check.OutputLength(output, outOff, 16, "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + if (forEncryption) + { + EncryptBlock(input.AsSpan(inOff), output.AsSpan(outOff), WorkingKey); + } + else + { + DecryptBlock(input.AsSpan(inOff), output.AsSpan(outOff), WorkingKey); + } +#else + if (forEncryption) + { + EncryptBlock(input, inOff, output, outOff, WorkingKey); + } + else + { + DecryptBlock(input, inOff, output, outOff, WorkingKey); + } +#endif + + return BLOCK_SIZE; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessBlock(ReadOnlySpan input, Span output) + { + if (WorkingKey == null) + throw new InvalidOperationException("AES engine not initialised"); + + Check.DataLength(input, 16, "input buffer too short"); + Check.OutputLength(output, 16, "output buffer too short"); + + if (forEncryption) + { + EncryptBlock(input, output, WorkingKey); + } + else + { + DecryptBlock(input, output, WorkingKey); + } + + return BLOCK_SIZE; + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void EncryptBlock(ReadOnlySpan input, Span output, uint[][] KW) + { + uint C0 = Pack.LE_To_UInt32(input); + uint C1 = Pack.LE_To_UInt32(input[4..]); + uint C2 = Pack.LE_To_UInt32(input[8..]); + uint C3 = Pack.LE_To_UInt32(input[12..]); + + uint[] kw = KW[0]; + uint t0 = C0 ^ kw[0]; + uint t1 = C1 ^ kw[1]; + uint t2 = C2 ^ kw[2]; + + uint r0, r1, r2, r3 = C3 ^ kw[3]; + int r = 1; + while (r < ROUNDS - 1) + { + kw = KW[r++]; + r0 = T0[t0 & 255] ^ Shift(T0[(t1 >> 8) & 255], 24) ^ Shift(T0[(t2 >> 16) & 255], 16) ^ Shift(T0[(r3 >> 24) & 255], 8) ^ kw[0]; + r1 = T0[t1 & 255] ^ Shift(T0[(t2 >> 8) & 255], 24) ^ Shift(T0[(r3 >> 16) & 255], 16) ^ Shift(T0[(t0 >> 24) & 255], 8) ^ kw[1]; + r2 = T0[t2 & 255] ^ Shift(T0[(r3 >> 8) & 255], 24) ^ Shift(T0[(t0 >> 16) & 255], 16) ^ Shift(T0[(t1 >> 24) & 255], 8) ^ kw[2]; + r3 = T0[r3 & 255] ^ Shift(T0[(t0 >> 8) & 255], 24) ^ Shift(T0[(t1 >> 16) & 255], 16) ^ Shift(T0[(t2 >> 24) & 255], 8) ^ kw[3]; + kw = KW[r++]; + t0 = T0[r0 & 255] ^ Shift(T0[(r1 >> 8) & 255], 24) ^ Shift(T0[(r2 >> 16) & 255], 16) ^ Shift(T0[(r3 >> 24) & 255], 8) ^ kw[0]; + t1 = T0[r1 & 255] ^ Shift(T0[(r2 >> 8) & 255], 24) ^ Shift(T0[(r3 >> 16) & 255], 16) ^ Shift(T0[(r0 >> 24) & 255], 8) ^ kw[1]; + t2 = T0[r2 & 255] ^ Shift(T0[(r3 >> 8) & 255], 24) ^ Shift(T0[(r0 >> 16) & 255], 16) ^ Shift(T0[(r1 >> 24) & 255], 8) ^ kw[2]; + r3 = T0[r3 & 255] ^ Shift(T0[(r0 >> 8) & 255], 24) ^ Shift(T0[(r1 >> 16) & 255], 16) ^ Shift(T0[(r2 >> 24) & 255], 8) ^ kw[3]; + } + + kw = KW[r++]; + r0 = T0[t0 & 255] ^ Shift(T0[(t1 >> 8) & 255], 24) ^ Shift(T0[(t2 >> 16) & 255], 16) ^ Shift(T0[(r3 >> 24) & 255], 8) ^ kw[0]; + r1 = T0[t1 & 255] ^ Shift(T0[(t2 >> 8) & 255], 24) ^ Shift(T0[(r3 >> 16) & 255], 16) ^ Shift(T0[(t0 >> 24) & 255], 8) ^ kw[1]; + r2 = T0[t2 & 255] ^ Shift(T0[(r3 >> 8) & 255], 24) ^ Shift(T0[(t0 >> 16) & 255], 16) ^ Shift(T0[(t1 >> 24) & 255], 8) ^ kw[2]; + r3 = T0[r3 & 255] ^ Shift(T0[(t0 >> 8) & 255], 24) ^ Shift(T0[(t1 >> 16) & 255], 16) ^ Shift(T0[(t2 >> 24) & 255], 8) ^ kw[3]; + + // the final round's table is a simple function of S so we don't use a whole other four tables for it + + kw = KW[r]; + C0 = (uint)S[r0 & 255] ^ (((uint)S[(r1 >> 8) & 255]) << 8) ^ (((uint)s[(r2 >> 16) & 255]) << 16) ^ (((uint)s[(r3 >> 24) & 255]) << 24) ^ kw[0]; + C1 = (uint)s[r1 & 255] ^ (((uint)S[(r2 >> 8) & 255]) << 8) ^ (((uint)S[(r3 >> 16) & 255]) << 16) ^ (((uint)s[(r0 >> 24) & 255]) << 24) ^ kw[1]; + C2 = (uint)s[r2 & 255] ^ (((uint)S[(r3 >> 8) & 255]) << 8) ^ (((uint)S[(r0 >> 16) & 255]) << 16) ^ (((uint)S[(r1 >> 24) & 255]) << 24) ^ kw[2]; + C3 = (uint)s[r3 & 255] ^ (((uint)s[(r0 >> 8) & 255]) << 8) ^ (((uint)s[(r1 >> 16) & 255]) << 16) ^ (((uint)S[(r2 >> 24) & 255]) << 24) ^ kw[3]; + + Pack.UInt32_To_LE(C0, output); + Pack.UInt32_To_LE(C1, output[4..]); + Pack.UInt32_To_LE(C2, output[8..]); + Pack.UInt32_To_LE(C3, output[12..]); + } + + private void DecryptBlock(ReadOnlySpan input, Span output, uint[][] KW) + { + uint C0 = Pack.LE_To_UInt32(input); + uint C1 = Pack.LE_To_UInt32(input[4..]); + uint C2 = Pack.LE_To_UInt32(input[8..]); + uint C3 = Pack.LE_To_UInt32(input[12..]); + + uint[] kw = KW[ROUNDS]; + uint t0 = C0 ^ kw[0]; + uint t1 = C1 ^ kw[1]; + uint t2 = C2 ^ kw[2]; + + uint r0, r1, r2, r3 = C3 ^ kw[3]; + int r = ROUNDS - 1; + while (r > 1) + { + kw = KW[r--]; + r0 = Tinv0[t0 & 255] ^ Shift(Tinv0[(r3 >> 8) & 255], 24) ^ Shift(Tinv0[(t2 >> 16) & 255], 16) ^ Shift(Tinv0[(t1 >> 24) & 255], 8) ^ kw[0]; + r1 = Tinv0[t1 & 255] ^ Shift(Tinv0[(t0 >> 8) & 255], 24) ^ Shift(Tinv0[(r3 >> 16) & 255], 16) ^ Shift(Tinv0[(t2 >> 24) & 255], 8) ^ kw[1]; + r2 = Tinv0[t2 & 255] ^ Shift(Tinv0[(t1 >> 8) & 255], 24) ^ Shift(Tinv0[(t0 >> 16) & 255], 16) ^ Shift(Tinv0[(r3 >> 24) & 255], 8) ^ kw[2]; + r3 = Tinv0[r3 & 255] ^ Shift(Tinv0[(t2 >> 8) & 255], 24) ^ Shift(Tinv0[(t1 >> 16) & 255], 16) ^ Shift(Tinv0[(t0 >> 24) & 255], 8) ^ kw[3]; + kw = KW[r--]; + t0 = Tinv0[r0 & 255] ^ Shift(Tinv0[(r3 >> 8) & 255], 24) ^ Shift(Tinv0[(r2 >> 16) & 255], 16) ^ Shift(Tinv0[(r1 >> 24) & 255], 8) ^ kw[0]; + t1 = Tinv0[r1 & 255] ^ Shift(Tinv0[(r0 >> 8) & 255], 24) ^ Shift(Tinv0[(r3 >> 16) & 255], 16) ^ Shift(Tinv0[(r2 >> 24) & 255], 8) ^ kw[1]; + t2 = Tinv0[r2 & 255] ^ Shift(Tinv0[(r1 >> 8) & 255], 24) ^ Shift(Tinv0[(r0 >> 16) & 255], 16) ^ Shift(Tinv0[(r3 >> 24) & 255], 8) ^ kw[2]; + r3 = Tinv0[r3 & 255] ^ Shift(Tinv0[(r2 >> 8) & 255], 24) ^ Shift(Tinv0[(r1 >> 16) & 255], 16) ^ Shift(Tinv0[(r0 >> 24) & 255], 8) ^ kw[3]; + } + + kw = KW[1]; + r0 = Tinv0[t0 & 255] ^ Shift(Tinv0[(r3 >> 8) & 255], 24) ^ Shift(Tinv0[(t2 >> 16) & 255], 16) ^ Shift(Tinv0[(t1 >> 24) & 255], 8) ^ kw[0]; + r1 = Tinv0[t1 & 255] ^ Shift(Tinv0[(t0 >> 8) & 255], 24) ^ Shift(Tinv0[(r3 >> 16) & 255], 16) ^ Shift(Tinv0[(t2 >> 24) & 255], 8) ^ kw[1]; + r2 = Tinv0[t2 & 255] ^ Shift(Tinv0[(t1 >> 8) & 255], 24) ^ Shift(Tinv0[(t0 >> 16) & 255], 16) ^ Shift(Tinv0[(r3 >> 24) & 255], 8) ^ kw[2]; + r3 = Tinv0[r3 & 255] ^ Shift(Tinv0[(t2 >> 8) & 255], 24) ^ Shift(Tinv0[(t1 >> 16) & 255], 16) ^ Shift(Tinv0[(t0 >> 24) & 255], 8) ^ kw[3]; + + // the final round's table is a simple function of Si so we don't use a whole other four tables for it + + kw = KW[0]; + C0 = (uint)Si[r0 & 255] ^ (((uint)s[(r3 >> 8) & 255]) << 8) ^ (((uint)s[(r2 >> 16) & 255]) << 16) ^ (((uint)Si[(r1 >> 24) & 255]) << 24) ^ kw[0]; + C1 = (uint)s[r1 & 255] ^ (((uint)s[(r0 >> 8) & 255]) << 8) ^ (((uint)Si[(r3 >> 16) & 255]) << 16) ^ (((uint)s[(r2 >> 24) & 255]) << 24) ^ kw[1]; + C2 = (uint)s[r2 & 255] ^ (((uint)Si[(r1 >> 8) & 255]) << 8) ^ (((uint)Si[(r0 >> 16) & 255]) << 16) ^ (((uint)s[(r3 >> 24) & 255]) << 24) ^ kw[2]; + C3 = (uint)Si[r3 & 255] ^ (((uint)s[(r2 >> 8) & 255]) << 8) ^ (((uint)s[(r1 >> 16) & 255]) << 16) ^ (((uint)s[(r0 >> 24) & 255]) << 24) ^ kw[3]; + + Pack.UInt32_To_LE(C0, output); + Pack.UInt32_To_LE(C1, output[4..]); + Pack.UInt32_To_LE(C2, output[8..]); + Pack.UInt32_To_LE(C3, output[12..]); + } +#else + private void EncryptBlock(byte[] input, int inOff, byte[] output, int outOff, uint[][] KW) + { + uint C0 = Pack.LE_To_UInt32(input, inOff + 0); + uint C1 = Pack.LE_To_UInt32(input, inOff + 4); + uint C2 = Pack.LE_To_UInt32(input, inOff + 8); + uint C3 = Pack.LE_To_UInt32(input, inOff + 12); + + uint[] kw = KW[0]; + uint t0 = C0 ^ kw[0]; + uint t1 = C1 ^ kw[1]; + uint t2 = C2 ^ kw[2]; + + uint r0, r1, r2, r3 = C3 ^ kw[3]; + int r = 1; + while (r < ROUNDS - 1) + { + kw = KW[r++]; + r0 = T0[t0 & 255] ^ Shift(T0[(t1 >> 8) & 255], 24) ^ Shift(T0[(t2 >> 16) & 255], 16) ^ Shift(T0[(r3 >> 24) & 255], 8) ^ kw[0]; + r1 = T0[t1 & 255] ^ Shift(T0[(t2 >> 8) & 255], 24) ^ Shift(T0[(r3 >> 16) & 255], 16) ^ Shift(T0[(t0 >> 24) & 255], 8) ^ kw[1]; + r2 = T0[t2 & 255] ^ Shift(T0[(r3 >> 8) & 255], 24) ^ Shift(T0[(t0 >> 16) & 255], 16) ^ Shift(T0[(t1 >> 24) & 255], 8) ^ kw[2]; + r3 = T0[r3 & 255] ^ Shift(T0[(t0 >> 8) & 255], 24) ^ Shift(T0[(t1 >> 16) & 255], 16) ^ Shift(T0[(t2 >> 24) & 255], 8) ^ kw[3]; + kw = KW[r++]; + t0 = T0[r0 & 255] ^ Shift(T0[(r1 >> 8) & 255], 24) ^ Shift(T0[(r2 >> 16) & 255], 16) ^ Shift(T0[(r3 >> 24) & 255], 8) ^ kw[0]; + t1 = T0[r1 & 255] ^ Shift(T0[(r2 >> 8) & 255], 24) ^ Shift(T0[(r3 >> 16) & 255], 16) ^ Shift(T0[(r0 >> 24) & 255], 8) ^ kw[1]; + t2 = T0[r2 & 255] ^ Shift(T0[(r3 >> 8) & 255], 24) ^ Shift(T0[(r0 >> 16) & 255], 16) ^ Shift(T0[(r1 >> 24) & 255], 8) ^ kw[2]; + r3 = T0[r3 & 255] ^ Shift(T0[(r0 >> 8) & 255], 24) ^ Shift(T0[(r1 >> 16) & 255], 16) ^ Shift(T0[(r2 >> 24) & 255], 8) ^ kw[3]; + } + + kw = KW[r++]; + r0 = T0[t0 & 255] ^ Shift(T0[(t1 >> 8) & 255], 24) ^ Shift(T0[(t2 >> 16) & 255], 16) ^ Shift(T0[(r3 >> 24) & 255], 8) ^ kw[0]; + r1 = T0[t1 & 255] ^ Shift(T0[(t2 >> 8) & 255], 24) ^ Shift(T0[(r3 >> 16) & 255], 16) ^ Shift(T0[(t0 >> 24) & 255], 8) ^ kw[1]; + r2 = T0[t2 & 255] ^ Shift(T0[(r3 >> 8) & 255], 24) ^ Shift(T0[(t0 >> 16) & 255], 16) ^ Shift(T0[(t1 >> 24) & 255], 8) ^ kw[2]; + r3 = T0[r3 & 255] ^ Shift(T0[(t0 >> 8) & 255], 24) ^ Shift(T0[(t1 >> 16) & 255], 16) ^ Shift(T0[(t2 >> 24) & 255], 8) ^ kw[3]; + + // the final round's table is a simple function of S so we don't use a whole other four tables for it + + kw = KW[r]; + C0 = (uint)S[r0 & 255] ^ (((uint)S[(r1 >> 8) & 255]) << 8) ^ (((uint)s[(r2 >> 16) & 255]) << 16) ^ (((uint)s[(r3 >> 24) & 255]) << 24) ^ kw[0]; + C1 = (uint)s[r1 & 255] ^ (((uint)S[(r2 >> 8) & 255]) << 8) ^ (((uint)S[(r3 >> 16) & 255]) << 16) ^ (((uint)s[(r0 >> 24) & 255]) << 24) ^ kw[1]; + C2 = (uint)s[r2 & 255] ^ (((uint)S[(r3 >> 8) & 255]) << 8) ^ (((uint)S[(r0 >> 16) & 255]) << 16) ^ (((uint)S[(r1 >> 24) & 255]) << 24) ^ kw[2]; + C3 = (uint)s[r3 & 255] ^ (((uint)s[(r0 >> 8) & 255]) << 8) ^ (((uint)s[(r1 >> 16) & 255]) << 16) ^ (((uint)S[(r2 >> 24) & 255]) << 24) ^ kw[3]; + + Pack.UInt32_To_LE(C0, output, outOff + 0); + Pack.UInt32_To_LE(C1, output, outOff + 4); + Pack.UInt32_To_LE(C2, output, outOff + 8); + Pack.UInt32_To_LE(C3, output, outOff + 12); + } + + private void DecryptBlock(byte[] input, int inOff, byte[] output, int outOff, uint[][] KW) + { + uint C0 = Pack.LE_To_UInt32(input, inOff + 0); + uint C1 = Pack.LE_To_UInt32(input, inOff + 4); + uint C2 = Pack.LE_To_UInt32(input, inOff + 8); + uint C3 = Pack.LE_To_UInt32(input, inOff + 12); + + uint[] kw = KW[ROUNDS]; + uint t0 = C0 ^ kw[0]; + uint t1 = C1 ^ kw[1]; + uint t2 = C2 ^ kw[2]; + + uint r0, r1, r2, r3 = C3 ^ kw[3]; + int r = ROUNDS - 1; + while (r > 1) + { + kw = KW[r--]; + r0 = Tinv0[t0 & 255] ^ Shift(Tinv0[(r3 >> 8) & 255], 24) ^ Shift(Tinv0[(t2 >> 16) & 255], 16) ^ Shift(Tinv0[(t1 >> 24) & 255], 8) ^ kw[0]; + r1 = Tinv0[t1 & 255] ^ Shift(Tinv0[(t0 >> 8) & 255], 24) ^ Shift(Tinv0[(r3 >> 16) & 255], 16) ^ Shift(Tinv0[(t2 >> 24) & 255], 8) ^ kw[1]; + r2 = Tinv0[t2 & 255] ^ Shift(Tinv0[(t1 >> 8) & 255], 24) ^ Shift(Tinv0[(t0 >> 16) & 255], 16) ^ Shift(Tinv0[(r3 >> 24) & 255], 8) ^ kw[2]; + r3 = Tinv0[r3 & 255] ^ Shift(Tinv0[(t2 >> 8) & 255], 24) ^ Shift(Tinv0[(t1 >> 16) & 255], 16) ^ Shift(Tinv0[(t0 >> 24) & 255], 8) ^ kw[3]; + kw = KW[r--]; + t0 = Tinv0[r0 & 255] ^ Shift(Tinv0[(r3 >> 8) & 255], 24) ^ Shift(Tinv0[(r2 >> 16) & 255], 16) ^ Shift(Tinv0[(r1 >> 24) & 255], 8) ^ kw[0]; + t1 = Tinv0[r1 & 255] ^ Shift(Tinv0[(r0 >> 8) & 255], 24) ^ Shift(Tinv0[(r3 >> 16) & 255], 16) ^ Shift(Tinv0[(r2 >> 24) & 255], 8) ^ kw[1]; + t2 = Tinv0[r2 & 255] ^ Shift(Tinv0[(r1 >> 8) & 255], 24) ^ Shift(Tinv0[(r0 >> 16) & 255], 16) ^ Shift(Tinv0[(r3 >> 24) & 255], 8) ^ kw[2]; + r3 = Tinv0[r3 & 255] ^ Shift(Tinv0[(r2 >> 8) & 255], 24) ^ Shift(Tinv0[(r1 >> 16) & 255], 16) ^ Shift(Tinv0[(r0 >> 24) & 255], 8) ^ kw[3]; + } + + kw = KW[1]; + r0 = Tinv0[t0 & 255] ^ Shift(Tinv0[(r3 >> 8) & 255], 24) ^ Shift(Tinv0[(t2 >> 16) & 255], 16) ^ Shift(Tinv0[(t1 >> 24) & 255], 8) ^ kw[0]; + r1 = Tinv0[t1 & 255] ^ Shift(Tinv0[(t0 >> 8) & 255], 24) ^ Shift(Tinv0[(r3 >> 16) & 255], 16) ^ Shift(Tinv0[(t2 >> 24) & 255], 8) ^ kw[1]; + r2 = Tinv0[t2 & 255] ^ Shift(Tinv0[(t1 >> 8) & 255], 24) ^ Shift(Tinv0[(t0 >> 16) & 255], 16) ^ Shift(Tinv0[(r3 >> 24) & 255], 8) ^ kw[2]; + r3 = Tinv0[r3 & 255] ^ Shift(Tinv0[(t2 >> 8) & 255], 24) ^ Shift(Tinv0[(t1 >> 16) & 255], 16) ^ Shift(Tinv0[(t0 >> 24) & 255], 8) ^ kw[3]; + + // the final round's table is a simple function of Si so we don't use a whole other four tables for it + + kw = KW[0]; + C0 = (uint)Si[r0 & 255] ^ (((uint)s[(r3 >> 8) & 255]) << 8) ^ (((uint)s[(r2 >> 16) & 255]) << 16) ^ (((uint)Si[(r1 >> 24) & 255]) << 24) ^ kw[0]; + C1 = (uint)s[r1 & 255] ^ (((uint)s[(r0 >> 8) & 255]) << 8) ^ (((uint)Si[(r3 >> 16) & 255]) << 16) ^ (((uint)s[(r2 >> 24) & 255]) << 24) ^ kw[1]; + C2 = (uint)s[r2 & 255] ^ (((uint)Si[(r1 >> 8) & 255]) << 8) ^ (((uint)Si[(r0 >> 16) & 255]) << 16) ^ (((uint)s[(r3 >> 24) & 255]) << 24) ^ kw[2]; + C3 = (uint)Si[r3 & 255] ^ (((uint)s[(r2 >> 8) & 255]) << 8) ^ (((uint)s[(r1 >> 16) & 255]) << 16) ^ (((uint)s[(r0 >> 24) & 255]) << 24) ^ kw[3]; + + Pack.UInt32_To_LE(C0, output, outOff + 0); + Pack.UInt32_To_LE(C1, output, outOff + 4); + Pack.UInt32_To_LE(C2, output, outOff + 8); + Pack.UInt32_To_LE(C3, output, outOff + 12); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesEngine.cs.meta new file mode 100644 index 000000000..1d6df9230 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c62f38dc79ccd334b9e0b7c898f109cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesEngine_X86.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesEngine_X86.cs new file mode 100644 index 000000000..ffeb90f4b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesEngine_X86.cs @@ -0,0 +1,834 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +#if NETCOREAPP3_0_OR_GREATER +using System; +using System.Buffers.Binary; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + using Aes = System.Runtime.Intrinsics.X86.Aes; + using Sse2 = System.Runtime.Intrinsics.X86.Sse2; + + public struct AesEngine_X86 + : IBlockCipher + { + public static bool IsSupported => Aes.IsSupported; + + private static Vector128[] CreateRoundKeys(byte[] key, bool forEncryption) + { + Vector128[] K; + + switch (key.Length) + { + case 16: + { + ReadOnlySpan rcon = stackalloc byte[]{ 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36 }; + + K = new Vector128[11]; + + var s = Load128(key.AsSpan(0, 16)); + K[0] = s; + + for (int round = 0; round < 10;) + { + var t = Aes.KeygenAssist(s, rcon[round++]); + t = Sse2.Shuffle(t.AsInt32(), 0xFF).AsByte(); + s = Sse2.Xor(s, Sse2.ShiftLeftLogical128BitLane(s, 8)); + s = Sse2.Xor(s, Sse2.ShiftLeftLogical128BitLane(s, 4)); + s = Sse2.Xor(s, t); + K[round] = s; + } + + break; + } + case 24: + { + K = new Vector128[13]; + + var s1 = Load128(key.AsSpan(0, 16)); + var s2 = Load64(key.AsSpan(16, 8)).ToVector128(); + K[0] = s1; + + byte rcon = 0x01; + for (int round = 0;;) + { + var t1 = Aes.KeygenAssist(s2, rcon); rcon <<= 1; + t1 = Sse2.Shuffle(t1.AsInt32(), 0x55).AsByte(); + + s1 = Sse2.Xor(s1, Sse2.ShiftLeftLogical128BitLane(s1, 8)); + s1 = Sse2.Xor(s1, Sse2.ShiftLeftLogical128BitLane(s1, 4)); + s1 = Sse2.Xor(s1, t1); + + K[++round] = Sse2.Xor(s2, Sse2.ShiftLeftLogical128BitLane(s1, 8)); + + var s3 = Sse2.Xor(s2, Sse2.ShiftRightLogical128BitLane(s1, 12)); + s3 = Sse2.Xor(s3, Sse2.ShiftLeftLogical128BitLane(s3, 4)); + + K[++round] = Sse2.Xor( + Sse2.ShiftRightLogical128BitLane(s1, 8), + Sse2.ShiftLeftLogical128BitLane(s3, 8)); + + var t2 = Aes.KeygenAssist(s3, rcon); rcon <<= 1; + t2 = Sse2.Shuffle(t2.AsInt32(), 0x55).AsByte(); + + s1 = Sse2.Xor(s1, Sse2.ShiftLeftLogical128BitLane(s1, 8)); + s1 = Sse2.Xor(s1, Sse2.ShiftLeftLogical128BitLane(s1, 4)); + s1 = Sse2.Xor(s1, t2); + + K[++round] = s1; + + if (round == 12) + break; + + s2 = Sse2.Xor(s3, Sse2.ShiftRightLogical128BitLane(s1, 12)); + s2 = Sse2.Xor(s2, Sse2.ShiftLeftLogical128BitLane(s2, 4)); + s2 = s2.WithUpper(Vector64.Zero); + } + + break; + } + case 32: + { + K = new Vector128[15]; + + var s1 = Load128(key.AsSpan(0, 16)); + var s2 = Load128(key.AsSpan(16, 16)); + K[0] = s1; + K[1] = s2; + + byte rcon = 0x01; + for (int round = 1;;) + { + var t1 = Aes.KeygenAssist(s2, rcon); rcon <<= 1; + t1 = Sse2.Shuffle(t1.AsInt32(), 0xFF).AsByte(); + s1 = Sse2.Xor(s1, Sse2.ShiftLeftLogical128BitLane(s1, 8)); + s1 = Sse2.Xor(s1, Sse2.ShiftLeftLogical128BitLane(s1, 4)); + s1 = Sse2.Xor(s1, t1); + K[++round] = s1; + + if (round == 14) + break; + + var t2 = Aes.KeygenAssist(s1, 0x00); + t2 = Sse2.Shuffle(t2.AsInt32(), 0xAA).AsByte(); + s2 = Sse2.Xor(s2, Sse2.ShiftLeftLogical128BitLane(s2, 8)); + s2 = Sse2.Xor(s2, Sse2.ShiftLeftLogical128BitLane(s2, 4)); + s2 = Sse2.Xor(s2, t2); + K[++round] = s2; + } + + break; + } + default: + throw new ArgumentException("Key length not 128/192/256 bits."); + } + + if (!forEncryption) + { + for (int i = 1, last = K.Length - 1; i < last; ++i) + { + K[i] = Aes.InverseMixColumns(K[i]); + } + + Array.Reverse(K); + } + + return K; + } + + private enum Mode { DEC_128, DEC_192, DEC_256, ENC_128, ENC_192, ENC_256, UNINITIALIZED }; + + private Vector128[] m_roundKeys = null; + private Mode m_mode = Mode.UNINITIALIZED; + + public AesEngine_X86() + { + if (!IsSupported) + throw new PlatformNotSupportedException(nameof(AesEngine_X86)); + } + + public string AlgorithmName => "AES"; + + public int GetBlockSize() => 16; + + public void Init(bool forEncryption, ICipherParameters parameters) + { + if (!(parameters is KeyParameter keyParameter)) + { + ArgumentNullException.ThrowIfNull(parameters, nameof(parameters)); + throw new ArgumentException("invalid type: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters), nameof(parameters)); + } + + m_roundKeys = CreateRoundKeys(keyParameter.GetKey(), forEncryption); + + if (m_roundKeys.Length == 11) + { + m_mode = forEncryption ? Mode.ENC_128 : Mode.DEC_128; + } + else if (m_roundKeys.Length == 13) + { + m_mode = forEncryption ? Mode.ENC_192 : Mode.DEC_192; + } + else + { + m_mode = forEncryption ? Mode.ENC_256 : Mode.DEC_256; + } + } + + public int ProcessBlock(byte[] inBuf, int inOff, byte[] outBuf, int outOff) + { + Check.DataLength(inBuf, inOff, 16, "input buffer too short"); + Check.OutputLength(outBuf, outOff, 16, "output buffer too short"); + + var state = Load128(inBuf.AsSpan(inOff, 16)); + ImplRounds(ref state); + Store128(state, outBuf.AsSpan(outOff, 16)); + return 16; + } + + public int ProcessBlock(ReadOnlySpan input, Span output) + { + Check.DataLength(input, 16, "input buffer too short"); + Check.OutputLength(output, 16, "output buffer too short"); + + var state = Load128(input[..16]); + ImplRounds(ref state); + Store128(state, output[..16]); + return 16; + } + + public int ProcessFourBlocks(ReadOnlySpan input, Span output) + { + Check.DataLength(input, 64, "input buffer too short"); + Check.OutputLength(output, 64, "output buffer too short"); + + var s1 = Load128(input[..16]); + var s2 = Load128(input[16..32]); + var s3 = Load128(input[32..48]); + var s4 = Load128(input[48..64]); + ImplRounds(ref s1, ref s2, ref s3, ref s4); + Store128(s1, output[..16]); + Store128(s2, output[16..32]); + Store128(s3, output[32..48]); + Store128(s4, output[48..64]); + return 64; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void ImplRounds(ref Vector128 state) + { + switch (m_mode) + { + case Mode.DEC_128: Decrypt128(m_roundKeys, ref state); break; + case Mode.DEC_192: Decrypt192(m_roundKeys, ref state); break; + case Mode.DEC_256: Decrypt256(m_roundKeys, ref state); break; + case Mode.ENC_128: Encrypt128(m_roundKeys, ref state); break; + case Mode.ENC_192: Encrypt192(m_roundKeys, ref state); break; + case Mode.ENC_256: Encrypt256(m_roundKeys, ref state); break; + default: throw new InvalidOperationException(nameof(AesEngine_X86) + " not initialised"); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void ImplRounds( + ref Vector128 s1, ref Vector128 s2, ref Vector128 s3, ref Vector128 s4) + { + switch (m_mode) + { + case Mode.DEC_128: DecryptFour128(m_roundKeys, ref s1, ref s2, ref s3, ref s4); break; + case Mode.DEC_192: DecryptFour192(m_roundKeys, ref s1, ref s2, ref s3, ref s4); break; + case Mode.DEC_256: DecryptFour256(m_roundKeys, ref s1, ref s2, ref s3, ref s4); break; + case Mode.ENC_128: EncryptFour128(m_roundKeys, ref s1, ref s2, ref s3, ref s4); break; + case Mode.ENC_192: EncryptFour192(m_roundKeys, ref s1, ref s2, ref s3, ref s4); break; + case Mode.ENC_256: EncryptFour256(m_roundKeys, ref s1, ref s2, ref s3, ref s4); break; + default: throw new InvalidOperationException(nameof(AesEngine_X86) + " not initialised"); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void Decrypt128(Vector128[] roundKeys, ref Vector128 state) + { + state = Sse2.Xor(state, roundKeys[0]); + state = Aes.Decrypt(state, roundKeys[1]); + state = Aes.Decrypt(state, roundKeys[2]); + state = Aes.Decrypt(state, roundKeys[3]); + state = Aes.Decrypt(state, roundKeys[4]); + state = Aes.Decrypt(state, roundKeys[5]); + state = Aes.Decrypt(state, roundKeys[6]); + state = Aes.Decrypt(state, roundKeys[7]); + state = Aes.Decrypt(state, roundKeys[8]); + state = Aes.Decrypt(state, roundKeys[9]); + state = Aes.DecryptLast(state, roundKeys[10]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void Decrypt192(Vector128[] roundKeys, ref Vector128 state) + { + state = Sse2.Xor(state, roundKeys[0]); + state = Aes.Decrypt(state, roundKeys[1]); + state = Aes.Decrypt(state, roundKeys[2]); + state = Aes.Decrypt(state, roundKeys[3]); + state = Aes.Decrypt(state, roundKeys[4]); + state = Aes.Decrypt(state, roundKeys[5]); + state = Aes.Decrypt(state, roundKeys[6]); + state = Aes.Decrypt(state, roundKeys[7]); + state = Aes.Decrypt(state, roundKeys[8]); + state = Aes.Decrypt(state, roundKeys[9]); + state = Aes.Decrypt(state, roundKeys[10]); + state = Aes.Decrypt(state, roundKeys[11]); + state = Aes.DecryptLast(state, roundKeys[12]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void Decrypt256(Vector128[] roundKeys, ref Vector128 state) + { + state = Sse2.Xor(state, roundKeys[0]); + state = Aes.Decrypt(state, roundKeys[1]); + state = Aes.Decrypt(state, roundKeys[2]); + state = Aes.Decrypt(state, roundKeys[3]); + state = Aes.Decrypt(state, roundKeys[4]); + state = Aes.Decrypt(state, roundKeys[5]); + state = Aes.Decrypt(state, roundKeys[6]); + state = Aes.Decrypt(state, roundKeys[7]); + state = Aes.Decrypt(state, roundKeys[8]); + state = Aes.Decrypt(state, roundKeys[9]); + state = Aes.Decrypt(state, roundKeys[10]); + state = Aes.Decrypt(state, roundKeys[11]); + state = Aes.Decrypt(state, roundKeys[12]); + state = Aes.Decrypt(state, roundKeys[13]); + state = Aes.DecryptLast(state, roundKeys[14]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void DecryptFour128(Vector128[] rk, + ref Vector128 s1, ref Vector128 s2, ref Vector128 s3, ref Vector128 s4) + { + s1 = Sse2.Xor(s1, rk[0]); + s2 = Sse2.Xor(s2, rk[0]); + s3 = Sse2.Xor(s3, rk[0]); + s4 = Sse2.Xor(s4, rk[0]); + + s1 = Aes.Decrypt(s1, rk[1]); + s2 = Aes.Decrypt(s2, rk[1]); + s3 = Aes.Decrypt(s3, rk[1]); + s4 = Aes.Decrypt(s4, rk[1]); + + s1 = Aes.Decrypt(s1, rk[2]); + s2 = Aes.Decrypt(s2, rk[2]); + s3 = Aes.Decrypt(s3, rk[2]); + s4 = Aes.Decrypt(s4, rk[2]); + + s1 = Aes.Decrypt(s1, rk[3]); + s2 = Aes.Decrypt(s2, rk[3]); + s3 = Aes.Decrypt(s3, rk[3]); + s4 = Aes.Decrypt(s4, rk[3]); + + s1 = Aes.Decrypt(s1, rk[4]); + s2 = Aes.Decrypt(s2, rk[4]); + s3 = Aes.Decrypt(s3, rk[4]); + s4 = Aes.Decrypt(s4, rk[4]); + + s1 = Aes.Decrypt(s1, rk[5]); + s2 = Aes.Decrypt(s2, rk[5]); + s3 = Aes.Decrypt(s3, rk[5]); + s4 = Aes.Decrypt(s4, rk[5]); + + s1 = Aes.Decrypt(s1, rk[6]); + s2 = Aes.Decrypt(s2, rk[6]); + s3 = Aes.Decrypt(s3, rk[6]); + s4 = Aes.Decrypt(s4, rk[6]); + + s1 = Aes.Decrypt(s1, rk[7]); + s2 = Aes.Decrypt(s2, rk[7]); + s3 = Aes.Decrypt(s3, rk[7]); + s4 = Aes.Decrypt(s4, rk[7]); + + s1 = Aes.Decrypt(s1, rk[8]); + s2 = Aes.Decrypt(s2, rk[8]); + s3 = Aes.Decrypt(s3, rk[8]); + s4 = Aes.Decrypt(s4, rk[8]); + + s1 = Aes.Decrypt(s1, rk[9]); + s2 = Aes.Decrypt(s2, rk[9]); + s3 = Aes.Decrypt(s3, rk[9]); + s4 = Aes.Decrypt(s4, rk[9]); + + s1 = Aes.DecryptLast(s1, rk[10]); + s2 = Aes.DecryptLast(s2, rk[10]); + s3 = Aes.DecryptLast(s3, rk[10]); + s4 = Aes.DecryptLast(s4, rk[10]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void DecryptFour192(Vector128[] rk, + ref Vector128 s1, ref Vector128 s2, ref Vector128 s3, ref Vector128 s4) + { + s1 = Sse2.Xor(s1, rk[0]); + s2 = Sse2.Xor(s2, rk[0]); + s3 = Sse2.Xor(s3, rk[0]); + s4 = Sse2.Xor(s4, rk[0]); + + s1 = Aes.Decrypt(s1, rk[1]); + s2 = Aes.Decrypt(s2, rk[1]); + s3 = Aes.Decrypt(s3, rk[1]); + s4 = Aes.Decrypt(s4, rk[1]); + + s1 = Aes.Decrypt(s1, rk[2]); + s2 = Aes.Decrypt(s2, rk[2]); + s3 = Aes.Decrypt(s3, rk[2]); + s4 = Aes.Decrypt(s4, rk[2]); + + s1 = Aes.Decrypt(s1, rk[3]); + s2 = Aes.Decrypt(s2, rk[3]); + s3 = Aes.Decrypt(s3, rk[3]); + s4 = Aes.Decrypt(s4, rk[3]); + + s1 = Aes.Decrypt(s1, rk[4]); + s2 = Aes.Decrypt(s2, rk[4]); + s3 = Aes.Decrypt(s3, rk[4]); + s4 = Aes.Decrypt(s4, rk[4]); + + s1 = Aes.Decrypt(s1, rk[5]); + s2 = Aes.Decrypt(s2, rk[5]); + s3 = Aes.Decrypt(s3, rk[5]); + s4 = Aes.Decrypt(s4, rk[5]); + + s1 = Aes.Decrypt(s1, rk[6]); + s2 = Aes.Decrypt(s2, rk[6]); + s3 = Aes.Decrypt(s3, rk[6]); + s4 = Aes.Decrypt(s4, rk[6]); + + s1 = Aes.Decrypt(s1, rk[7]); + s2 = Aes.Decrypt(s2, rk[7]); + s3 = Aes.Decrypt(s3, rk[7]); + s4 = Aes.Decrypt(s4, rk[7]); + + s1 = Aes.Decrypt(s1, rk[8]); + s2 = Aes.Decrypt(s2, rk[8]); + s3 = Aes.Decrypt(s3, rk[8]); + s4 = Aes.Decrypt(s4, rk[8]); + + s1 = Aes.Decrypt(s1, rk[9]); + s2 = Aes.Decrypt(s2, rk[9]); + s3 = Aes.Decrypt(s3, rk[9]); + s4 = Aes.Decrypt(s4, rk[9]); + + s1 = Aes.Decrypt(s1, rk[10]); + s2 = Aes.Decrypt(s2, rk[10]); + s3 = Aes.Decrypt(s3, rk[10]); + s4 = Aes.Decrypt(s4, rk[10]); + + s1 = Aes.Decrypt(s1, rk[11]); + s2 = Aes.Decrypt(s2, rk[11]); + s3 = Aes.Decrypt(s3, rk[11]); + s4 = Aes.Decrypt(s4, rk[11]); + + s1 = Aes.DecryptLast(s1, rk[12]); + s2 = Aes.DecryptLast(s2, rk[12]); + s3 = Aes.DecryptLast(s3, rk[12]); + s4 = Aes.DecryptLast(s4, rk[12]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void DecryptFour256(Vector128[] rk, + ref Vector128 s1, ref Vector128 s2, ref Vector128 s3, ref Vector128 s4) + { + s1 = Sse2.Xor(s1, rk[0]); + s2 = Sse2.Xor(s2, rk[0]); + s3 = Sse2.Xor(s3, rk[0]); + s4 = Sse2.Xor(s4, rk[0]); + + s1 = Aes.Decrypt(s1, rk[1]); + s2 = Aes.Decrypt(s2, rk[1]); + s3 = Aes.Decrypt(s3, rk[1]); + s4 = Aes.Decrypt(s4, rk[1]); + + s1 = Aes.Decrypt(s1, rk[2]); + s2 = Aes.Decrypt(s2, rk[2]); + s3 = Aes.Decrypt(s3, rk[2]); + s4 = Aes.Decrypt(s4, rk[2]); + + s1 = Aes.Decrypt(s1, rk[3]); + s2 = Aes.Decrypt(s2, rk[3]); + s3 = Aes.Decrypt(s3, rk[3]); + s4 = Aes.Decrypt(s4, rk[3]); + + s1 = Aes.Decrypt(s1, rk[4]); + s2 = Aes.Decrypt(s2, rk[4]); + s3 = Aes.Decrypt(s3, rk[4]); + s4 = Aes.Decrypt(s4, rk[4]); + + s1 = Aes.Decrypt(s1, rk[5]); + s2 = Aes.Decrypt(s2, rk[5]); + s3 = Aes.Decrypt(s3, rk[5]); + s4 = Aes.Decrypt(s4, rk[5]); + + s1 = Aes.Decrypt(s1, rk[6]); + s2 = Aes.Decrypt(s2, rk[6]); + s3 = Aes.Decrypt(s3, rk[6]); + s4 = Aes.Decrypt(s4, rk[6]); + + s1 = Aes.Decrypt(s1, rk[7]); + s2 = Aes.Decrypt(s2, rk[7]); + s3 = Aes.Decrypt(s3, rk[7]); + s4 = Aes.Decrypt(s4, rk[7]); + + s1 = Aes.Decrypt(s1, rk[8]); + s2 = Aes.Decrypt(s2, rk[8]); + s3 = Aes.Decrypt(s3, rk[8]); + s4 = Aes.Decrypt(s4, rk[8]); + + s1 = Aes.Decrypt(s1, rk[9]); + s2 = Aes.Decrypt(s2, rk[9]); + s3 = Aes.Decrypt(s3, rk[9]); + s4 = Aes.Decrypt(s4, rk[9]); + + s1 = Aes.Decrypt(s1, rk[10]); + s2 = Aes.Decrypt(s2, rk[10]); + s3 = Aes.Decrypt(s3, rk[10]); + s4 = Aes.Decrypt(s4, rk[10]); + + s1 = Aes.Decrypt(s1, rk[11]); + s2 = Aes.Decrypt(s2, rk[11]); + s3 = Aes.Decrypt(s3, rk[11]); + s4 = Aes.Decrypt(s4, rk[11]); + + s1 = Aes.Decrypt(s1, rk[12]); + s2 = Aes.Decrypt(s2, rk[12]); + s3 = Aes.Decrypt(s3, rk[12]); + s4 = Aes.Decrypt(s4, rk[12]); + + s1 = Aes.Decrypt(s1, rk[13]); + s2 = Aes.Decrypt(s2, rk[13]); + s3 = Aes.Decrypt(s3, rk[13]); + s4 = Aes.Decrypt(s4, rk[13]); + + s1 = Aes.DecryptLast(s1, rk[14]); + s2 = Aes.DecryptLast(s2, rk[14]); + s3 = Aes.DecryptLast(s3, rk[14]); + s4 = Aes.DecryptLast(s4, rk[14]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void Encrypt128(Vector128[] roundKeys, ref Vector128 state) + { + state = Sse2.Xor(state, roundKeys[0]); + state = Aes.Encrypt(state, roundKeys[1]); + state = Aes.Encrypt(state, roundKeys[2]); + state = Aes.Encrypt(state, roundKeys[3]); + state = Aes.Encrypt(state, roundKeys[4]); + state = Aes.Encrypt(state, roundKeys[5]); + state = Aes.Encrypt(state, roundKeys[6]); + state = Aes.Encrypt(state, roundKeys[7]); + state = Aes.Encrypt(state, roundKeys[8]); + state = Aes.Encrypt(state, roundKeys[9]); + state = Aes.EncryptLast(state, roundKeys[10]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void Encrypt192(Vector128[] roundKeys, ref Vector128 state) + { + state = Sse2.Xor(state, roundKeys[0]); + state = Aes.Encrypt(state, roundKeys[1]); + state = Aes.Encrypt(state, roundKeys[2]); + state = Aes.Encrypt(state, roundKeys[3]); + state = Aes.Encrypt(state, roundKeys[4]); + state = Aes.Encrypt(state, roundKeys[5]); + state = Aes.Encrypt(state, roundKeys[6]); + state = Aes.Encrypt(state, roundKeys[7]); + state = Aes.Encrypt(state, roundKeys[8]); + state = Aes.Encrypt(state, roundKeys[9]); + state = Aes.Encrypt(state, roundKeys[10]); + state = Aes.Encrypt(state, roundKeys[11]); + state = Aes.EncryptLast(state, roundKeys[12]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void Encrypt256(Vector128[] roundKeys, ref Vector128 state) + { + state = Sse2.Xor(state, roundKeys[0]); + state = Aes.Encrypt(state, roundKeys[1]); + state = Aes.Encrypt(state, roundKeys[2]); + state = Aes.Encrypt(state, roundKeys[3]); + state = Aes.Encrypt(state, roundKeys[4]); + state = Aes.Encrypt(state, roundKeys[5]); + state = Aes.Encrypt(state, roundKeys[6]); + state = Aes.Encrypt(state, roundKeys[7]); + state = Aes.Encrypt(state, roundKeys[8]); + state = Aes.Encrypt(state, roundKeys[9]); + state = Aes.Encrypt(state, roundKeys[10]); + state = Aes.Encrypt(state, roundKeys[11]); + state = Aes.Encrypt(state, roundKeys[12]); + state = Aes.Encrypt(state, roundKeys[13]); + state = Aes.EncryptLast(state, roundKeys[14]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void EncryptFour128(Vector128[] rk, + ref Vector128 s1, ref Vector128 s2, ref Vector128 s3, ref Vector128 s4) + { + s1 = Sse2.Xor(s1, rk[0]); + s2 = Sse2.Xor(s2, rk[0]); + s3 = Sse2.Xor(s3, rk[0]); + s4 = Sse2.Xor(s4, rk[0]); + + s1 = Aes.Encrypt(s1, rk[1]); + s2 = Aes.Encrypt(s2, rk[1]); + s3 = Aes.Encrypt(s3, rk[1]); + s4 = Aes.Encrypt(s4, rk[1]); + + s1 = Aes.Encrypt(s1, rk[2]); + s2 = Aes.Encrypt(s2, rk[2]); + s3 = Aes.Encrypt(s3, rk[2]); + s4 = Aes.Encrypt(s4, rk[2]); + + s1 = Aes.Encrypt(s1, rk[3]); + s2 = Aes.Encrypt(s2, rk[3]); + s3 = Aes.Encrypt(s3, rk[3]); + s4 = Aes.Encrypt(s4, rk[3]); + + s1 = Aes.Encrypt(s1, rk[4]); + s2 = Aes.Encrypt(s2, rk[4]); + s3 = Aes.Encrypt(s3, rk[4]); + s4 = Aes.Encrypt(s4, rk[4]); + + s1 = Aes.Encrypt(s1, rk[5]); + s2 = Aes.Encrypt(s2, rk[5]); + s3 = Aes.Encrypt(s3, rk[5]); + s4 = Aes.Encrypt(s4, rk[5]); + + s1 = Aes.Encrypt(s1, rk[6]); + s2 = Aes.Encrypt(s2, rk[6]); + s3 = Aes.Encrypt(s3, rk[6]); + s4 = Aes.Encrypt(s4, rk[6]); + + s1 = Aes.Encrypt(s1, rk[7]); + s2 = Aes.Encrypt(s2, rk[7]); + s3 = Aes.Encrypt(s3, rk[7]); + s4 = Aes.Encrypt(s4, rk[7]); + + s1 = Aes.Encrypt(s1, rk[8]); + s2 = Aes.Encrypt(s2, rk[8]); + s3 = Aes.Encrypt(s3, rk[8]); + s4 = Aes.Encrypt(s4, rk[8]); + + s1 = Aes.Encrypt(s1, rk[9]); + s2 = Aes.Encrypt(s2, rk[9]); + s3 = Aes.Encrypt(s3, rk[9]); + s4 = Aes.Encrypt(s4, rk[9]); + + s1 = Aes.EncryptLast(s1, rk[10]); + s2 = Aes.EncryptLast(s2, rk[10]); + s3 = Aes.EncryptLast(s3, rk[10]); + s4 = Aes.EncryptLast(s4, rk[10]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void EncryptFour192(Vector128[] rk, + ref Vector128 s1, ref Vector128 s2, ref Vector128 s3, ref Vector128 s4) + { + s1 = Sse2.Xor(s1, rk[0]); + s2 = Sse2.Xor(s2, rk[0]); + s3 = Sse2.Xor(s3, rk[0]); + s4 = Sse2.Xor(s4, rk[0]); + + s1 = Aes.Encrypt(s1, rk[1]); + s2 = Aes.Encrypt(s2, rk[1]); + s3 = Aes.Encrypt(s3, rk[1]); + s4 = Aes.Encrypt(s4, rk[1]); + + s1 = Aes.Encrypt(s1, rk[2]); + s2 = Aes.Encrypt(s2, rk[2]); + s3 = Aes.Encrypt(s3, rk[2]); + s4 = Aes.Encrypt(s4, rk[2]); + + s1 = Aes.Encrypt(s1, rk[3]); + s2 = Aes.Encrypt(s2, rk[3]); + s3 = Aes.Encrypt(s3, rk[3]); + s4 = Aes.Encrypt(s4, rk[3]); + + s1 = Aes.Encrypt(s1, rk[4]); + s2 = Aes.Encrypt(s2, rk[4]); + s3 = Aes.Encrypt(s3, rk[4]); + s4 = Aes.Encrypt(s4, rk[4]); + + s1 = Aes.Encrypt(s1, rk[5]); + s2 = Aes.Encrypt(s2, rk[5]); + s3 = Aes.Encrypt(s3, rk[5]); + s4 = Aes.Encrypt(s4, rk[5]); + + s1 = Aes.Encrypt(s1, rk[6]); + s2 = Aes.Encrypt(s2, rk[6]); + s3 = Aes.Encrypt(s3, rk[6]); + s4 = Aes.Encrypt(s4, rk[6]); + + s1 = Aes.Encrypt(s1, rk[7]); + s2 = Aes.Encrypt(s2, rk[7]); + s3 = Aes.Encrypt(s3, rk[7]); + s4 = Aes.Encrypt(s4, rk[7]); + + s1 = Aes.Encrypt(s1, rk[8]); + s2 = Aes.Encrypt(s2, rk[8]); + s3 = Aes.Encrypt(s3, rk[8]); + s4 = Aes.Encrypt(s4, rk[8]); + + s1 = Aes.Encrypt(s1, rk[9]); + s2 = Aes.Encrypt(s2, rk[9]); + s3 = Aes.Encrypt(s3, rk[9]); + s4 = Aes.Encrypt(s4, rk[9]); + + s1 = Aes.Encrypt(s1, rk[10]); + s2 = Aes.Encrypt(s2, rk[10]); + s3 = Aes.Encrypt(s3, rk[10]); + s4 = Aes.Encrypt(s4, rk[10]); + + s1 = Aes.Encrypt(s1, rk[11]); + s2 = Aes.Encrypt(s2, rk[11]); + s3 = Aes.Encrypt(s3, rk[11]); + s4 = Aes.Encrypt(s4, rk[11]); + + s1 = Aes.EncryptLast(s1, rk[12]); + s2 = Aes.EncryptLast(s2, rk[12]); + s3 = Aes.EncryptLast(s3, rk[12]); + s4 = Aes.EncryptLast(s4, rk[12]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void EncryptFour256(Vector128[] rk, + ref Vector128 s1, ref Vector128 s2, ref Vector128 s3, ref Vector128 s4) + { + s1 = Sse2.Xor(s1, rk[0]); + s2 = Sse2.Xor(s2, rk[0]); + s3 = Sse2.Xor(s3, rk[0]); + s4 = Sse2.Xor(s4, rk[0]); + + s1 = Aes.Encrypt(s1, rk[1]); + s2 = Aes.Encrypt(s2, rk[1]); + s3 = Aes.Encrypt(s3, rk[1]); + s4 = Aes.Encrypt(s4, rk[1]); + + s1 = Aes.Encrypt(s1, rk[2]); + s2 = Aes.Encrypt(s2, rk[2]); + s3 = Aes.Encrypt(s3, rk[2]); + s4 = Aes.Encrypt(s4, rk[2]); + + s1 = Aes.Encrypt(s1, rk[3]); + s2 = Aes.Encrypt(s2, rk[3]); + s3 = Aes.Encrypt(s3, rk[3]); + s4 = Aes.Encrypt(s4, rk[3]); + + s1 = Aes.Encrypt(s1, rk[4]); + s2 = Aes.Encrypt(s2, rk[4]); + s3 = Aes.Encrypt(s3, rk[4]); + s4 = Aes.Encrypt(s4, rk[4]); + + s1 = Aes.Encrypt(s1, rk[5]); + s2 = Aes.Encrypt(s2, rk[5]); + s3 = Aes.Encrypt(s3, rk[5]); + s4 = Aes.Encrypt(s4, rk[5]); + + s1 = Aes.Encrypt(s1, rk[6]); + s2 = Aes.Encrypt(s2, rk[6]); + s3 = Aes.Encrypt(s3, rk[6]); + s4 = Aes.Encrypt(s4, rk[6]); + + s1 = Aes.Encrypt(s1, rk[7]); + s2 = Aes.Encrypt(s2, rk[7]); + s3 = Aes.Encrypt(s3, rk[7]); + s4 = Aes.Encrypt(s4, rk[7]); + + s1 = Aes.Encrypt(s1, rk[8]); + s2 = Aes.Encrypt(s2, rk[8]); + s3 = Aes.Encrypt(s3, rk[8]); + s4 = Aes.Encrypt(s4, rk[8]); + + s1 = Aes.Encrypt(s1, rk[9]); + s2 = Aes.Encrypt(s2, rk[9]); + s3 = Aes.Encrypt(s3, rk[9]); + s4 = Aes.Encrypt(s4, rk[9]); + + s1 = Aes.Encrypt(s1, rk[10]); + s2 = Aes.Encrypt(s2, rk[10]); + s3 = Aes.Encrypt(s3, rk[10]); + s4 = Aes.Encrypt(s4, rk[10]); + + s1 = Aes.Encrypt(s1, rk[11]); + s2 = Aes.Encrypt(s2, rk[11]); + s3 = Aes.Encrypt(s3, rk[11]); + s4 = Aes.Encrypt(s4, rk[11]); + + s1 = Aes.Encrypt(s1, rk[12]); + s2 = Aes.Encrypt(s2, rk[12]); + s3 = Aes.Encrypt(s3, rk[12]); + s4 = Aes.Encrypt(s4, rk[12]); + + s1 = Aes.Encrypt(s1, rk[13]); + s2 = Aes.Encrypt(s2, rk[13]); + s3 = Aes.Encrypt(s3, rk[13]); + s4 = Aes.Encrypt(s4, rk[13]); + + s1 = Aes.EncryptLast(s1, rk[14]); + s2 = Aes.EncryptLast(s2, rk[14]); + s3 = Aes.EncryptLast(s3, rk[14]); + s4 = Aes.EncryptLast(s4, rk[14]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static Vector128 Load128(ReadOnlySpan t) + { +#if NET7_0_OR_GREATER + return Vector128.Create(t); +#else + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 16) + return MemoryMarshal.Read>(t); + + return Vector128.Create( + BinaryPrimitives.ReadUInt64LittleEndian(t[..8]), + BinaryPrimitives.ReadUInt64LittleEndian(t[8..]) + ).AsByte(); +#endif + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static Vector64 Load64(ReadOnlySpan t) + { +#if NET7_0_OR_GREATER + return Vector64.Create(t); +#else + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 8) + return MemoryMarshal.Read>(t); + + return Vector64.Create( + BinaryPrimitives.ReadUInt64LittleEndian(t[..8]) + ).AsByte(); +#endif + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void Store128(Vector128 s, Span t) + { +#if NET7_0_OR_GREATER + Vector128.CopyTo(s, t); +#else + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 16) + { + MemoryMarshal.Write(t, ref s); + return; + } + + var u = s.AsUInt64(); + BinaryPrimitives.WriteUInt64LittleEndian(t[..8], u.GetElement(0)); + BinaryPrimitives.WriteUInt64LittleEndian(t[8..], u.GetElement(1)); +#endif + } + } +} +#endif +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesEngine_X86.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesEngine_X86.cs.meta new file mode 100644 index 000000000..c2a1765d9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesEngine_X86.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1833d606ace538d4097cfc7ed3d87a28 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesFastEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesFastEngine.cs new file mode 100644 index 000000000..3b1d777ff --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesFastEngine.cs @@ -0,0 +1,2 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesFastEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesFastEngine.cs.meta new file mode 100644 index 000000000..38e55645d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesFastEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68dc51a4fca6eb041bdb766f4e8ca6f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesLightEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesLightEngine.cs new file mode 100644 index 000000000..7036a9f82 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesLightEngine.cs @@ -0,0 +1,617 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * an implementation of the AES (Rijndael), from FIPS-197. + *

+ * For further details see: http://csrc.nist.gov/encryption/aes/. + * + * This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + * http://fp.gladman.plus.com/cryptography_technology/rijndael/ + * + * There are three levels of tradeoff of speed vs memory + * Because java has no preprocessor, they are written as three separate classes from which to choose + * + * The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + * and 4 for decryption. + * + * The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + * adding 12 rotate operations per round to compute the values contained in the other tables from + * the contents of the first + * + * The slowest version uses no static tables at all and computes the values + * in each round. + *

+ *

+ * This file contains the slowest performance version with no static tables + * for round precomputation, but it has the smallest foot print. + *

+ */ + public sealed class AesLightEngine + : IBlockCipher + { + // The S box + private static readonly byte[] S = + { + 99, 124, 119, 123, 242, 107, 111, 197, + 48, 1, 103, 43, 254, 215, 171, 118, + 202, 130, 201, 125, 250, 89, 71, 240, + 173, 212, 162, 175, 156, 164, 114, 192, + 183, 253, 147, 38, 54, 63, 247, 204, + 52, 165, 229, 241, 113, 216, 49, 21, + 4, 199, 35, 195, 24, 150, 5, 154, + 7, 18, 128, 226, 235, 39, 178, 117, + 9, 131, 44, 26, 27, 110, 90, 160, + 82, 59, 214, 179, 41, 227, 47, 132, + 83, 209, 0, 237, 32, 252, 177, 91, + 106, 203, 190, 57, 74, 76, 88, 207, + 208, 239, 170, 251, 67, 77, 51, 133, + 69, 249, 2, 127, 80, 60, 159, 168, + 81, 163, 64, 143, 146, 157, 56, 245, + 188, 182, 218, 33, 16, 255, 243, 210, + 205, 12, 19, 236, 95, 151, 68, 23, + 196, 167, 126, 61, 100, 93, 25, 115, + 96, 129, 79, 220, 34, 42, 144, 136, + 70, 238, 184, 20, 222, 94, 11, 219, + 224, 50, 58, 10, 73, 6, 36, 92, + 194, 211, 172, 98, 145, 149, 228, 121, + 231, 200, 55, 109, 141, 213, 78, 169, + 108, 86, 244, 234, 101, 122, 174, 8, + 186, 120, 37, 46, 28, 166, 180, 198, + 232, 221, 116, 31, 75, 189, 139, 138, + 112, 62, 181, 102, 72, 3, 246, 14, + 97, 53, 87, 185, 134, 193, 29, 158, + 225, 248, 152, 17, 105, 217, 142, 148, + 155, 30, 135, 233, 206, 85, 40, 223, + 140, 161, 137, 13, 191, 230, 66, 104, + 65, 153, 45, 15, 176, 84, 187, 22, + }; + + // The inverse S-box + private static readonly byte[] Si = + { + 82, 9, 106, 213, 48, 54, 165, 56, + 191, 64, 163, 158, 129, 243, 215, 251, + 124, 227, 57, 130, 155, 47, 255, 135, + 52, 142, 67, 68, 196, 222, 233, 203, + 84, 123, 148, 50, 166, 194, 35, 61, + 238, 76, 149, 11, 66, 250, 195, 78, + 8, 46, 161, 102, 40, 217, 36, 178, + 118, 91, 162, 73, 109, 139, 209, 37, + 114, 248, 246, 100, 134, 104, 152, 22, + 212, 164, 92, 204, 93, 101, 182, 146, + 108, 112, 72, 80, 253, 237, 185, 218, + 94, 21, 70, 87, 167, 141, 157, 132, + 144, 216, 171, 0, 140, 188, 211, 10, + 247, 228, 88, 5, 184, 179, 69, 6, + 208, 44, 30, 143, 202, 63, 15, 2, + 193, 175, 189, 3, 1, 19, 138, 107, + 58, 145, 17, 65, 79, 103, 220, 234, + 151, 242, 207, 206, 240, 180, 230, 115, + 150, 172, 116, 34, 231, 173, 53, 133, + 226, 249, 55, 232, 28, 117, 223, 110, + 71, 241, 26, 113, 29, 41, 197, 137, + 111, 183, 98, 14, 170, 24, 190, 27, + 252, 86, 62, 75, 198, 210, 121, 32, + 154, 219, 192, 254, 120, 205, 90, 244, + 31, 221, 168, 51, 136, 7, 199, 49, + 177, 18, 16, 89, 39, 128, 236, 95, + 96, 81, 127, 169, 25, 181, 74, 13, + 45, 229, 122, 159, 147, 201, 156, 239, + 160, 224, 59, 77, 174, 42, 245, 176, + 200, 235, 187, 60, 131, 83, 153, 97, + 23, 43, 4, 126, 186, 119, 214, 38, + 225, 105, 20, 99, 85, 33, 12, 125, + }; + + // vector used in calculating key schedule (powers of x in GF(256)) + private static readonly byte[] rcon = + { + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, + 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 + }; + + private static uint Shift(uint r, int shift) + { + return (r >> shift) | (r << (32 - shift)); + } + + /* multiply four bytes in GF(2^8) by 'x' {02} in parallel */ + + private const uint m1 = 0x80808080; + private const uint m2 = 0x7f7f7f7f; + private const uint m3 = 0x0000001b; + private const uint m4 = 0xC0C0C0C0; + private const uint m5 = 0x3f3f3f3f; + + private static uint FFmulX(uint x) + { + return ((x & m2) << 1) ^ (((x & m1) >> 7) * m3); + } + + private static uint FFmulX2(uint x) + { + uint t0 = (x & m5) << 2; + uint t1 = (x & m4); + t1 ^= (t1 >> 1); + return t0 ^ (t1 >> 2) ^ (t1 >> 5); + } + + /* + The following defines provide alternative definitions of FFmulX that might + give improved performance if a fast 32-bit multiply is not available. + + private int FFmulX(int x) { int u = x & m1; u |= (u >> 1); return ((x & m2) << 1) ^ ((u >>> 3) | (u >>> 6)); } + private static final int m4 = 0x1b1b1b1b; + private int FFmulX(int x) { int u = x & m1; return ((x & m2) << 1) ^ ((u - (u >>> 7)) & m4); } + + */ + + private static uint Mcol(uint x) + { + uint t0, t1; + t0 = Shift(x, 8); + t1 = x ^ t0; + return Shift(t1, 16) ^ t0 ^ FFmulX(t1); + } + + private static uint Inv_Mcol(uint x) + { + uint t0, t1; + t0 = x; + t1 = t0 ^ Shift(t0, 8); + t0 ^= FFmulX(t1); + t1 ^= FFmulX2(t0); + t0 ^= t1 ^ Shift(t1, 16); + return t0; + } + + private static uint SubWord(uint x) + { + return (uint)S[x&255] + | (((uint)S[(x>>8)&255]) << 8) + | (((uint)S[(x>>16)&255]) << 16) + | (((uint)S[(x>>24)&255]) << 24); + } + + /** + * Calculate the necessary round keys + * The number of calculations depends on key size and block size + * AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + * This code is written assuming those are the only possible values + */ + private uint[][] GenerateWorkingKey(byte[] key, bool forEncryption) + { + int keyLen = key.Length; + if (keyLen < 16 || keyLen > 32 || (keyLen & 7) != 0) + throw new ArgumentException("Key length not 128/192/256 bits."); + + int KC = keyLen >> 2; + this.ROUNDS = KC + 6; // This is not always true for the generalized Rijndael that allows larger block sizes + + uint[][] W = new uint[ROUNDS + 1][]; // 4 words in a block + for (int i = 0; i <= ROUNDS; ++i) + { + W[i] = new uint[4]; + } + + switch (KC) + { + case 4: + { + uint t0 = Pack.LE_To_UInt32(key, 0); W[0][0] = t0; + uint t1 = Pack.LE_To_UInt32(key, 4); W[0][1] = t1; + uint t2 = Pack.LE_To_UInt32(key, 8); W[0][2] = t2; + uint t3 = Pack.LE_To_UInt32(key, 12); W[0][3] = t3; + + for (int i = 1; i <= 10; ++i) + { + uint u = SubWord(Shift(t3, 8)) ^ rcon[i - 1]; + t0 ^= u; W[i][0] = t0; + t1 ^= t0; W[i][1] = t1; + t2 ^= t1; W[i][2] = t2; + t3 ^= t2; W[i][3] = t3; + } + + break; + } + case 6: + { + uint t0 = Pack.LE_To_UInt32(key, 0); W[0][0] = t0; + uint t1 = Pack.LE_To_UInt32(key, 4); W[0][1] = t1; + uint t2 = Pack.LE_To_UInt32(key, 8); W[0][2] = t2; + uint t3 = Pack.LE_To_UInt32(key, 12); W[0][3] = t3; + uint t4 = Pack.LE_To_UInt32(key, 16); W[1][0] = t4; + uint t5 = Pack.LE_To_UInt32(key, 20); W[1][1] = t5; + + uint rcon = 1; + uint u = SubWord(Shift(t5, 8)) ^ rcon; rcon <<= 1; + t0 ^= u; W[1][2] = t0; + t1 ^= t0; W[1][3] = t1; + t2 ^= t1; W[2][0] = t2; + t3 ^= t2; W[2][1] = t3; + t4 ^= t3; W[2][2] = t4; + t5 ^= t4; W[2][3] = t5; + + for (int i = 3; i < 12; i += 3) + { + u = SubWord(Shift(t5, 8)) ^ rcon; rcon <<= 1; + t0 ^= u; W[i ][0] = t0; + t1 ^= t0; W[i ][1] = t1; + t2 ^= t1; W[i ][2] = t2; + t3 ^= t2; W[i ][3] = t3; + t4 ^= t3; W[i + 1][0] = t4; + t5 ^= t4; W[i + 1][1] = t5; + u = SubWord(Shift(t5, 8)) ^ rcon; rcon <<= 1; + t0 ^= u; W[i + 1][2] = t0; + t1 ^= t0; W[i + 1][3] = t1; + t2 ^= t1; W[i + 2][0] = t2; + t3 ^= t2; W[i + 2][1] = t3; + t4 ^= t3; W[i + 2][2] = t4; + t5 ^= t4; W[i + 2][3] = t5; + } + + u = SubWord(Shift(t5, 8)) ^ rcon; + t0 ^= u; W[12][0] = t0; + t1 ^= t0; W[12][1] = t1; + t2 ^= t1; W[12][2] = t2; + t3 ^= t2; W[12][3] = t3; + + break; + } + case 8: + { + uint t0 = Pack.LE_To_UInt32(key, 0); W[0][0] = t0; + uint t1 = Pack.LE_To_UInt32(key, 4); W[0][1] = t1; + uint t2 = Pack.LE_To_UInt32(key, 8); W[0][2] = t2; + uint t3 = Pack.LE_To_UInt32(key, 12); W[0][3] = t3; + uint t4 = Pack.LE_To_UInt32(key, 16); W[1][0] = t4; + uint t5 = Pack.LE_To_UInt32(key, 20); W[1][1] = t5; + uint t6 = Pack.LE_To_UInt32(key, 24); W[1][2] = t6; + uint t7 = Pack.LE_To_UInt32(key, 28); W[1][3] = t7; + + uint u, rcon = 1; + + for (int i = 2; i < 14; i += 2) + { + u = SubWord(Shift(t7, 8)) ^ rcon; rcon <<= 1; + t0 ^= u; W[i ][0] = t0; + t1 ^= t0; W[i ][1] = t1; + t2 ^= t1; W[i ][2] = t2; + t3 ^= t2; W[i ][3] = t3; + u = SubWord(t3); + t4 ^= u; W[i + 1][0] = t4; + t5 ^= t4; W[i + 1][1] = t5; + t6 ^= t5; W[i + 1][2] = t6; + t7 ^= t6; W[i + 1][3] = t7; + } + + u = SubWord(Shift(t7, 8)) ^ rcon; + t0 ^= u; W[14][0] = t0; + t1 ^= t0; W[14][1] = t1; + t2 ^= t1; W[14][2] = t2; + t3 ^= t2; W[14][3] = t3; + + break; + } + default: + { + throw new InvalidOperationException("Should never get here"); + } + } + + if (!forEncryption) + { + for (int j = 1; j < ROUNDS; j++) + { + uint[] w = W[j]; + for (int i = 0; i < 4; i++) + { + w[i] = Inv_Mcol(w[i]); + } + } + } + + return W; + } + + private int ROUNDS; + private uint[][] WorkingKey; + private bool forEncryption; + + private const int BLOCK_SIZE = 16; + + /** + * default constructor - 128 bit block size. + */ + public AesLightEngine() + { + } + + /** + * initialise an AES cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param parameters the parameters required to set up the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public void Init(bool forEncryption, ICipherParameters parameters) + { + if (!(parameters is KeyParameter keyParameter)) + throw new ArgumentException("invalid parameter passed to AES init - " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + + WorkingKey = GenerateWorkingKey(keyParameter.GetKey(), forEncryption); + + this.forEncryption = forEncryption; + } + + public string AlgorithmName + { + get { return "AES"; } + } + + public int GetBlockSize() + { + return BLOCK_SIZE; + } + + public int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (WorkingKey == null) + throw new InvalidOperationException("AES engine not initialised"); + + Check.DataLength(input, inOff, 16, "input buffer too short"); + Check.OutputLength(output, outOff, 16, "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + if (forEncryption) + { + EncryptBlock(input.AsSpan(inOff), output.AsSpan(outOff), WorkingKey); + } + else + { + DecryptBlock(input.AsSpan(inOff), output.AsSpan(outOff), WorkingKey); + } +#else + if (forEncryption) + { + EncryptBlock(input, inOff, output, outOff, WorkingKey); + } + else + { + DecryptBlock(input, inOff, output, outOff, WorkingKey); + } +#endif + + return BLOCK_SIZE; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessBlock(ReadOnlySpan input, Span output) + { + if (WorkingKey == null) + throw new InvalidOperationException("AES engine not initialised"); + + Check.DataLength(input, 16, "input buffer too short"); + Check.OutputLength(output, 16, "output buffer too short"); + + if (forEncryption) + { + EncryptBlock(input, output, WorkingKey); + } + else + { + DecryptBlock(input, output, WorkingKey); + } + + return BLOCK_SIZE; + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void EncryptBlock(ReadOnlySpan input, Span output, uint[][] KW) + { + uint C0 = Pack.LE_To_UInt32(input); + uint C1 = Pack.LE_To_UInt32(input[4..]); + uint C2 = Pack.LE_To_UInt32(input[8..]); + uint C3 = Pack.LE_To_UInt32(input[12..]); + + uint[] kw = KW[0]; + uint t0 = C0 ^ kw[0]; + uint t1 = C1 ^ kw[1]; + uint t2 = C2 ^ kw[2]; + + uint r0, r1, r2, r3 = C3 ^ kw[3]; + int r = 1; + while (r < ROUNDS - 1) + { + kw = KW[r++]; + r0 = Mcol((uint)S[t0 & 255] ^ (((uint)S[(t1 >> 8) & 255]) << 8) ^ (((uint)S[(t2 >> 16) & 255]) << 16) ^ (((uint)S[(r3 >> 24) & 255]) << 24)) ^ kw[0]; + r1 = Mcol((uint)S[t1 & 255] ^ (((uint)S[(t2 >> 8) & 255]) << 8) ^ (((uint)S[(r3 >> 16) & 255]) << 16) ^ (((uint)S[(t0 >> 24) & 255]) << 24)) ^ kw[1]; + r2 = Mcol((uint)S[t2 & 255] ^ (((uint)S[(r3 >> 8) & 255]) << 8) ^ (((uint)S[(t0 >> 16) & 255]) << 16) ^ (((uint)S[(t1 >> 24) & 255]) << 24)) ^ kw[2]; + r3 = Mcol((uint)S[r3 & 255] ^ (((uint)S[(t0 >> 8) & 255]) << 8) ^ (((uint)S[(t1 >> 16) & 255]) << 16) ^ (((uint)S[(t2 >> 24) & 255]) << 24)) ^ kw[3]; + kw = KW[r++]; + t0 = Mcol((uint)S[r0 & 255] ^ (((uint)S[(r1 >> 8) & 255]) << 8) ^ (((uint)S[(r2 >> 16) & 255]) << 16) ^ (((uint)S[(r3 >> 24) & 255]) << 24)) ^ kw[0]; + t1 = Mcol((uint)S[r1 & 255] ^ (((uint)S[(r2 >> 8) & 255]) << 8) ^ (((uint)S[(r3 >> 16) & 255]) << 16) ^ (((uint)S[(r0 >> 24) & 255]) << 24)) ^ kw[1]; + t2 = Mcol((uint)S[r2 & 255] ^ (((uint)S[(r3 >> 8) & 255]) << 8) ^ (((uint)S[(r0 >> 16) & 255]) << 16) ^ (((uint)S[(r1 >> 24) & 255]) << 24)) ^ kw[2]; + r3 = Mcol((uint)S[r3 & 255] ^ (((uint)S[(r0 >> 8) & 255]) << 8) ^ (((uint)S[(r1 >> 16) & 255]) << 16) ^ (((uint)S[(r2 >> 24) & 255]) << 24)) ^ kw[3]; + } + + kw = KW[r++]; + r0 = Mcol((uint)S[t0 & 255] ^ (((uint)S[(t1 >> 8) & 255]) << 8) ^ (((uint)S[(t2 >> 16) & 255]) << 16) ^ (((uint)S[(r3 >> 24) & 255]) << 24)) ^ kw[0]; + r1 = Mcol((uint)S[t1 & 255] ^ (((uint)S[(t2 >> 8) & 255]) << 8) ^ (((uint)S[(r3 >> 16) & 255]) << 16) ^ (((uint)S[(t0 >> 24) & 255]) << 24)) ^ kw[1]; + r2 = Mcol((uint)S[t2 & 255] ^ (((uint)S[(r3 >> 8) & 255]) << 8) ^ (((uint)S[(t0 >> 16) & 255]) << 16) ^ (((uint)S[(t1 >> 24) & 255]) << 24)) ^ kw[2]; + r3 = Mcol((uint)S[r3 & 255] ^ (((uint)S[(t0 >> 8) & 255]) << 8) ^ (((uint)S[(t1 >> 16) & 255]) << 16) ^ (((uint)S[(t2 >> 24) & 255]) << 24)) ^ kw[3]; + + // the final round is a simple function of S + + kw = KW[r]; + C0 = (uint)S[r0 & 255] ^ (((uint)S[(r1 >> 8) & 255]) << 8) ^ (((uint)S[(r2 >> 16) & 255]) << 16) ^ (((uint)S[(r3 >> 24) & 255]) << 24) ^ kw[0]; + C1 = (uint)S[r1 & 255] ^ (((uint)S[(r2 >> 8) & 255]) << 8) ^ (((uint)S[(r3 >> 16) & 255]) << 16) ^ (((uint)S[(r0 >> 24) & 255]) << 24) ^ kw[1]; + C2 = (uint)S[r2 & 255] ^ (((uint)S[(r3 >> 8) & 255]) << 8) ^ (((uint)S[(r0 >> 16) & 255]) << 16) ^ (((uint)S[(r1 >> 24) & 255]) << 24) ^ kw[2]; + C3 = (uint)S[r3 & 255] ^ (((uint)S[(r0 >> 8) & 255]) << 8) ^ (((uint)S[(r1 >> 16) & 255]) << 16) ^ (((uint)S[(r2 >> 24) & 255]) << 24) ^ kw[3]; + + Pack.UInt32_To_LE(C0, output); + Pack.UInt32_To_LE(C1, output[4..]); + Pack.UInt32_To_LE(C2, output[8..]); + Pack.UInt32_To_LE(C3, output[12..]); + } + + private void DecryptBlock(ReadOnlySpan input, Span output, uint[][] KW) + { + uint C0 = Pack.LE_To_UInt32(input); + uint C1 = Pack.LE_To_UInt32(input[4..]); + uint C2 = Pack.LE_To_UInt32(input[8..]); + uint C3 = Pack.LE_To_UInt32(input[12..]); + + uint[] kw = KW[ROUNDS]; + uint t0 = C0 ^ kw[0]; + uint t1 = C1 ^ kw[1]; + uint t2 = C2 ^ kw[2]; + + uint r0, r1, r2, r3 = C3 ^ kw[3]; + int r = ROUNDS - 1; + while (r > 1) + { + kw = KW[r--]; + r0 = Inv_Mcol((uint)Si[t0 & 255] ^ (((uint)Si[(r3 >> 8) & 255]) << 8) ^ (((uint)Si[(t2 >> 16) & 255]) << 16) ^ ((uint)Si[(t1 >> 24) & 255] << 24)) ^ kw[0]; + r1 = Inv_Mcol((uint)Si[t1 & 255] ^ (((uint)Si[(t0 >> 8) & 255]) << 8) ^ (((uint)Si[(r3 >> 16) & 255]) << 16) ^ ((uint)Si[(t2 >> 24) & 255] << 24)) ^ kw[1]; + r2 = Inv_Mcol((uint)Si[t2 & 255] ^ (((uint)Si[(t1 >> 8) & 255]) << 8) ^ (((uint)Si[(t0 >> 16) & 255]) << 16) ^ ((uint)Si[(r3 >> 24) & 255] << 24)) ^ kw[2]; + r3 = Inv_Mcol((uint)Si[r3 & 255] ^ (((uint)Si[(t2 >> 8) & 255]) << 8) ^ (((uint)Si[(t1 >> 16) & 255]) << 16) ^ ((uint)Si[(t0 >> 24) & 255] << 24)) ^ kw[3]; + kw = KW[r--]; + t0 = Inv_Mcol((uint)Si[r0 & 255] ^ (((uint)Si[(r3 >> 8) & 255]) << 8) ^ (((uint)Si[(r2 >> 16) & 255]) << 16) ^ ((uint)Si[(r1 >> 24) & 255] << 24)) ^ kw[0]; + t1 = Inv_Mcol((uint)Si[r1 & 255] ^ (((uint)Si[(r0 >> 8) & 255]) << 8) ^ (((uint)Si[(r3 >> 16) & 255]) << 16) ^ ((uint)Si[(r2 >> 24) & 255] << 24)) ^ kw[1]; + t2 = Inv_Mcol((uint)Si[r2 & 255] ^ (((uint)Si[(r1 >> 8) & 255]) << 8) ^ (((uint)Si[(r0 >> 16) & 255]) << 16) ^ ((uint)Si[(r3 >> 24) & 255] << 24)) ^ kw[2]; + r3 = Inv_Mcol((uint)Si[r3 & 255] ^ (((uint)Si[(r2 >> 8) & 255]) << 8) ^ (((uint)Si[(r1 >> 16) & 255]) << 16) ^ ((uint)Si[(r0 >> 24) & 255] << 24)) ^ kw[3]; + } + + kw = KW[1]; + r0 = Inv_Mcol((uint)Si[t0 & 255] ^ (((uint)Si[(r3 >> 8) & 255]) << 8) ^ (((uint)Si[(t2 >> 16) & 255]) << 16) ^ ((uint)Si[(t1 >> 24) & 255] << 24)) ^ kw[0]; + r1 = Inv_Mcol((uint)Si[t1 & 255] ^ (((uint)Si[(t0 >> 8) & 255]) << 8) ^ (((uint)Si[(r3 >> 16) & 255]) << 16) ^ ((uint)Si[(t2 >> 24) & 255] << 24)) ^ kw[1]; + r2 = Inv_Mcol((uint)Si[t2 & 255] ^ (((uint)Si[(t1 >> 8) & 255]) << 8) ^ (((uint)Si[(t0 >> 16) & 255]) << 16) ^ ((uint)Si[(r3 >> 24) & 255] << 24)) ^ kw[2]; + r3 = Inv_Mcol((uint)Si[r3 & 255] ^ (((uint)Si[(t2 >> 8) & 255]) << 8) ^ (((uint)Si[(t1 >> 16) & 255]) << 16) ^ ((uint)Si[(t0 >> 24) & 255] << 24)) ^ kw[3]; + + // the final round's table is a simple function of Si + + kw = KW[0]; + C0 = (uint)Si[r0 & 255] ^ (((uint)Si[(r3 >> 8) & 255]) << 8) ^ (((uint)Si[(r2 >> 16) & 255]) << 16) ^ (((uint)Si[(r1 >> 24) & 255]) << 24) ^ kw[0]; + C1 = (uint)Si[r1 & 255] ^ (((uint)Si[(r0 >> 8) & 255]) << 8) ^ (((uint)Si[(r3 >> 16) & 255]) << 16) ^ (((uint)Si[(r2 >> 24) & 255]) << 24) ^ kw[1]; + C2 = (uint)Si[r2 & 255] ^ (((uint)Si[(r1 >> 8) & 255]) << 8) ^ (((uint)Si[(r0 >> 16) & 255]) << 16) ^ (((uint)Si[(r3 >> 24) & 255]) << 24) ^ kw[2]; + C3 = (uint)Si[r3 & 255] ^ (((uint)Si[(r2 >> 8) & 255]) << 8) ^ (((uint)Si[(r1 >> 16) & 255]) << 16) ^ (((uint)Si[(r0 >> 24) & 255]) << 24) ^ kw[3]; + + Pack.UInt32_To_LE(C0, output); + Pack.UInt32_To_LE(C1, output[4..]); + Pack.UInt32_To_LE(C2, output[8..]); + Pack.UInt32_To_LE(C3, output[12..]); + } +#else + private void EncryptBlock(byte[] input, int inOff, byte[] output, int outOff, uint[][] KW) + { + uint C0 = Pack.LE_To_UInt32(input, inOff + 0); + uint C1 = Pack.LE_To_UInt32(input, inOff + 4); + uint C2 = Pack.LE_To_UInt32(input, inOff + 8); + uint C3 = Pack.LE_To_UInt32(input, inOff + 12); + + uint[] kw = KW[0]; + uint t0 = C0 ^ kw[0]; + uint t1 = C1 ^ kw[1]; + uint t2 = C2 ^ kw[2]; + + uint r0, r1, r2, r3 = C3 ^ kw[3]; + int r = 1; + while (r < ROUNDS - 1) + { + kw = KW[r++]; + r0 = Mcol((uint)S[t0 & 255] ^ (((uint)S[(t1 >> 8) & 255]) << 8) ^ (((uint)S[(t2 >> 16) & 255]) << 16) ^ (((uint)S[(r3 >> 24) & 255]) << 24)) ^ kw[0]; + r1 = Mcol((uint)S[t1 & 255] ^ (((uint)S[(t2 >> 8) & 255]) << 8) ^ (((uint)S[(r3 >> 16) & 255]) << 16) ^ (((uint)S[(t0 >> 24) & 255]) << 24)) ^ kw[1]; + r2 = Mcol((uint)S[t2 & 255] ^ (((uint)S[(r3 >> 8) & 255]) << 8) ^ (((uint)S[(t0 >> 16) & 255]) << 16) ^ (((uint)S[(t1 >> 24) & 255]) << 24)) ^ kw[2]; + r3 = Mcol((uint)S[r3 & 255] ^ (((uint)S[(t0 >> 8) & 255]) << 8) ^ (((uint)S[(t1 >> 16) & 255]) << 16) ^ (((uint)S[(t2 >> 24) & 255]) << 24)) ^ kw[3]; + kw = KW[r++]; + t0 = Mcol((uint)S[r0 & 255] ^ (((uint)S[(r1 >> 8) & 255]) << 8) ^ (((uint)S[(r2 >> 16) & 255]) << 16) ^ (((uint)S[(r3 >> 24) & 255]) << 24)) ^ kw[0]; + t1 = Mcol((uint)S[r1 & 255] ^ (((uint)S[(r2 >> 8) & 255]) << 8) ^ (((uint)S[(r3 >> 16) & 255]) << 16) ^ (((uint)S[(r0 >> 24) & 255]) << 24)) ^ kw[1]; + t2 = Mcol((uint)S[r2 & 255] ^ (((uint)S[(r3 >> 8) & 255]) << 8) ^ (((uint)S[(r0 >> 16) & 255]) << 16) ^ (((uint)S[(r1 >> 24) & 255]) << 24)) ^ kw[2]; + r3 = Mcol((uint)S[r3 & 255] ^ (((uint)S[(r0 >> 8) & 255]) << 8) ^ (((uint)S[(r1 >> 16) & 255]) << 16) ^ (((uint)S[(r2 >> 24) & 255]) << 24)) ^ kw[3]; + } + + kw = KW[r++]; + r0 = Mcol((uint)S[t0 & 255] ^ (((uint)S[(t1 >> 8) & 255]) << 8) ^ (((uint)S[(t2 >> 16) & 255]) << 16) ^ (((uint)S[(r3 >> 24) & 255]) << 24)) ^ kw[0]; + r1 = Mcol((uint)S[t1 & 255] ^ (((uint)S[(t2 >> 8) & 255]) << 8) ^ (((uint)S[(r3 >> 16) & 255]) << 16) ^ (((uint)S[(t0 >> 24) & 255]) << 24)) ^ kw[1]; + r2 = Mcol((uint)S[t2 & 255] ^ (((uint)S[(r3 >> 8) & 255]) << 8) ^ (((uint)S[(t0 >> 16) & 255]) << 16) ^ (((uint)S[(t1 >> 24) & 255]) << 24)) ^ kw[2]; + r3 = Mcol((uint)S[r3 & 255] ^ (((uint)S[(t0 >> 8) & 255]) << 8) ^ (((uint)S[(t1 >> 16) & 255]) << 16) ^ (((uint)S[(t2 >> 24) & 255]) << 24)) ^ kw[3]; + + // the final round is a simple function of S + + kw = KW[r]; + C0 = (uint)S[r0 & 255] ^ (((uint)S[(r1 >> 8) & 255]) << 8) ^ (((uint)S[(r2 >> 16) & 255]) << 16) ^ (((uint)S[(r3 >> 24) & 255]) << 24) ^ kw[0]; + C1 = (uint)S[r1 & 255] ^ (((uint)S[(r2 >> 8) & 255]) << 8) ^ (((uint)S[(r3 >> 16) & 255]) << 16) ^ (((uint)S[(r0 >> 24) & 255]) << 24) ^ kw[1]; + C2 = (uint)S[r2 & 255] ^ (((uint)S[(r3 >> 8) & 255]) << 8) ^ (((uint)S[(r0 >> 16) & 255]) << 16) ^ (((uint)S[(r1 >> 24) & 255]) << 24) ^ kw[2]; + C3 = (uint)S[r3 & 255] ^ (((uint)S[(r0 >> 8) & 255]) << 8) ^ (((uint)S[(r1 >> 16) & 255]) << 16) ^ (((uint)S[(r2 >> 24) & 255]) << 24) ^ kw[3]; + + Pack.UInt32_To_LE(C0, output, outOff + 0); + Pack.UInt32_To_LE(C1, output, outOff + 4); + Pack.UInt32_To_LE(C2, output, outOff + 8); + Pack.UInt32_To_LE(C3, output, outOff + 12); + } + + private void DecryptBlock(byte[] input, int inOff, byte[] output, int outOff, uint[][] KW) + { + uint C0 = Pack.LE_To_UInt32(input, inOff + 0); + uint C1 = Pack.LE_To_UInt32(input, inOff + 4); + uint C2 = Pack.LE_To_UInt32(input, inOff + 8); + uint C3 = Pack.LE_To_UInt32(input, inOff + 12); + + uint[] kw = KW[ROUNDS]; + uint t0 = C0 ^ kw[0]; + uint t1 = C1 ^ kw[1]; + uint t2 = C2 ^ kw[2]; + + uint r0, r1, r2, r3 = C3 ^ kw[3]; + int r = ROUNDS - 1; + while (r > 1) + { + kw = KW[r--]; + r0 = Inv_Mcol((uint)Si[t0 & 255] ^ (((uint)Si[(r3 >> 8) & 255]) << 8) ^ (((uint)Si[(t2 >> 16) & 255]) << 16) ^ ((uint)Si[(t1 >> 24) & 255] << 24)) ^ kw[0]; + r1 = Inv_Mcol((uint)Si[t1 & 255] ^ (((uint)Si[(t0 >> 8) & 255]) << 8) ^ (((uint)Si[(r3 >> 16) & 255]) << 16) ^ ((uint)Si[(t2 >> 24) & 255] << 24)) ^ kw[1]; + r2 = Inv_Mcol((uint)Si[t2 & 255] ^ (((uint)Si[(t1 >> 8) & 255]) << 8) ^ (((uint)Si[(t0 >> 16) & 255]) << 16) ^ ((uint)Si[(r3 >> 24) & 255] << 24)) ^ kw[2]; + r3 = Inv_Mcol((uint)Si[r3 & 255] ^ (((uint)Si[(t2 >> 8) & 255]) << 8) ^ (((uint)Si[(t1 >> 16) & 255]) << 16) ^ ((uint)Si[(t0 >> 24) & 255] << 24)) ^ kw[3]; + kw = KW[r--]; + t0 = Inv_Mcol((uint)Si[r0 & 255] ^ (((uint)Si[(r3 >> 8) & 255]) << 8) ^ (((uint)Si[(r2 >> 16) & 255]) << 16) ^ ((uint)Si[(r1 >> 24) & 255] << 24)) ^ kw[0]; + t1 = Inv_Mcol((uint)Si[r1 & 255] ^ (((uint)Si[(r0 >> 8) & 255]) << 8) ^ (((uint)Si[(r3 >> 16) & 255]) << 16) ^ ((uint)Si[(r2 >> 24) & 255] << 24)) ^ kw[1]; + t2 = Inv_Mcol((uint)Si[r2 & 255] ^ (((uint)Si[(r1 >> 8) & 255]) << 8) ^ (((uint)Si[(r0 >> 16) & 255]) << 16) ^ ((uint)Si[(r3 >> 24) & 255] << 24)) ^ kw[2]; + r3 = Inv_Mcol((uint)Si[r3 & 255] ^ (((uint)Si[(r2 >> 8) & 255]) << 8) ^ (((uint)Si[(r1 >> 16) & 255]) << 16) ^ ((uint)Si[(r0 >> 24) & 255] << 24)) ^ kw[3]; + } + + kw = KW[1]; + r0 = Inv_Mcol((uint)Si[t0 & 255] ^ (((uint)Si[(r3 >> 8) & 255]) << 8) ^ (((uint)Si[(t2 >> 16) & 255]) << 16) ^ ((uint)Si[(t1 >> 24) & 255] << 24)) ^ kw[0]; + r1 = Inv_Mcol((uint)Si[t1 & 255] ^ (((uint)Si[(t0 >> 8) & 255]) << 8) ^ (((uint)Si[(r3 >> 16) & 255]) << 16) ^ ((uint)Si[(t2 >> 24) & 255] << 24)) ^ kw[1]; + r2 = Inv_Mcol((uint)Si[t2 & 255] ^ (((uint)Si[(t1 >> 8) & 255]) << 8) ^ (((uint)Si[(t0 >> 16) & 255]) << 16) ^ ((uint)Si[(r3 >> 24) & 255] << 24)) ^ kw[2]; + r3 = Inv_Mcol((uint)Si[r3 & 255] ^ (((uint)Si[(t2 >> 8) & 255]) << 8) ^ (((uint)Si[(t1 >> 16) & 255]) << 16) ^ ((uint)Si[(t0 >> 24) & 255] << 24)) ^ kw[3]; + + // the final round's table is a simple function of Si + + kw = KW[0]; + C0 = (uint)Si[r0 & 255] ^ (((uint)Si[(r3 >> 8) & 255]) << 8) ^ (((uint)Si[(r2 >> 16) & 255]) << 16) ^ (((uint)Si[(r1 >> 24) & 255]) << 24) ^ kw[0]; + C1 = (uint)Si[r1 & 255] ^ (((uint)Si[(r0 >> 8) & 255]) << 8) ^ (((uint)Si[(r3 >> 16) & 255]) << 16) ^ (((uint)Si[(r2 >> 24) & 255]) << 24) ^ kw[1]; + C2 = (uint)Si[r2 & 255] ^ (((uint)Si[(r1 >> 8) & 255]) << 8) ^ (((uint)Si[(r0 >> 16) & 255]) << 16) ^ (((uint)Si[(r3 >> 24) & 255]) << 24) ^ kw[2]; + C3 = (uint)Si[r3 & 255] ^ (((uint)Si[(r2 >> 8) & 255]) << 8) ^ (((uint)Si[(r1 >> 16) & 255]) << 16) ^ (((uint)Si[(r0 >> 24) & 255]) << 24) ^ kw[3]; + + Pack.UInt32_To_LE(C0, output, outOff + 0); + Pack.UInt32_To_LE(C1, output, outOff + 4); + Pack.UInt32_To_LE(C2, output, outOff + 8); + Pack.UInt32_To_LE(C3, output, outOff + 12); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesLightEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesLightEngine.cs.meta new file mode 100644 index 000000000..e0c9e978a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesLightEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 13a5836677ccf124397d55f4f1cb136d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesWrapEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesWrapEngine.cs new file mode 100644 index 000000000..40f82096d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesWrapEngine.cs @@ -0,0 +1,20 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /// + /// An implementation of the AES Key Wrapper from the NIST Key Wrap Specification. + ///

+ /// For further details see: http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + /// + public class AesWrapEngine + : Rfc3394WrapEngine + { + public AesWrapEngine() + : base(AesUtilities.CreateEngine()) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesWrapEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesWrapEngine.cs.meta new file mode 100644 index 000000000..f390733af --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AesWrapEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 298095ce0aa6ae74e812fd919e59cdee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AriaEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AriaEngine.cs new file mode 100644 index 000000000..dfe142718 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AriaEngine.cs @@ -0,0 +1,445 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * RFC 5794. + * + * ARIA is a 128-bit block cipher with 128-, 192-, and 256-bit keys. + */ + public class AriaEngine + : IBlockCipher + { + private static readonly byte[][] C = { Hex.DecodeStrict("517cc1b727220a94fe13abe8fa9a6ee0"), + Hex.DecodeStrict("6db14acc9e21c820ff28b1d5ef5de2b0"), Hex.DecodeStrict("db92371d2126e9700324977504e8c90e") }; + + private static readonly byte[] SB1_sbox = { (byte)0x63, (byte)0x7c, (byte)0x77, (byte)0x7b, (byte)0xf2, (byte)0x6b, + (byte)0x6f, (byte)0xc5, (byte)0x30, (byte)0x01, (byte)0x67, (byte)0x2b, (byte)0xfe, (byte)0xd7, (byte)0xab, + (byte)0x76, (byte)0xca, (byte)0x82, (byte)0xc9, (byte)0x7d, (byte)0xfa, (byte)0x59, (byte)0x47, (byte)0xf0, + (byte)0xad, (byte)0xd4, (byte)0xa2, (byte)0xaf, (byte)0x9c, (byte)0xa4, (byte)0x72, (byte)0xc0, (byte)0xb7, + (byte)0xfd, (byte)0x93, (byte)0x26, (byte)0x36, (byte)0x3f, (byte)0xf7, (byte)0xcc, (byte)0x34, (byte)0xa5, + (byte)0xe5, (byte)0xf1, (byte)0x71, (byte)0xd8, (byte)0x31, (byte)0x15, (byte)0x04, (byte)0xc7, (byte)0x23, + (byte)0xc3, (byte)0x18, (byte)0x96, (byte)0x05, (byte)0x9a, (byte)0x07, (byte)0x12, (byte)0x80, (byte)0xe2, + (byte)0xeb, (byte)0x27, (byte)0xb2, (byte)0x75, (byte)0x09, (byte)0x83, (byte)0x2c, (byte)0x1a, (byte)0x1b, + (byte)0x6e, (byte)0x5a, (byte)0xa0, (byte)0x52, (byte)0x3b, (byte)0xd6, (byte)0xb3, (byte)0x29, (byte)0xe3, + (byte)0x2f, (byte)0x84, (byte)0x53, (byte)0xd1, (byte)0x00, (byte)0xed, (byte)0x20, (byte)0xfc, (byte)0xb1, + (byte)0x5b, (byte)0x6a, (byte)0xcb, (byte)0xbe, (byte)0x39, (byte)0x4a, (byte)0x4c, (byte)0x58, (byte)0xcf, + (byte)0xd0, (byte)0xef, (byte)0xaa, (byte)0xfb, (byte)0x43, (byte)0x4d, (byte)0x33, (byte)0x85, (byte)0x45, + (byte)0xf9, (byte)0x02, (byte)0x7f, (byte)0x50, (byte)0x3c, (byte)0x9f, (byte)0xa8, (byte)0x51, (byte)0xa3, + (byte)0x40, (byte)0x8f, (byte)0x92, (byte)0x9d, (byte)0x38, (byte)0xf5, (byte)0xbc, (byte)0xb6, (byte)0xda, + (byte)0x21, (byte)0x10, (byte)0xff, (byte)0xf3, (byte)0xd2, (byte)0xcd, (byte)0x0c, (byte)0x13, (byte)0xec, + (byte)0x5f, (byte)0x97, (byte)0x44, (byte)0x17, (byte)0xc4, (byte)0xa7, (byte)0x7e, (byte)0x3d, (byte)0x64, + (byte)0x5d, (byte)0x19, (byte)0x73, (byte)0x60, (byte)0x81, (byte)0x4f, (byte)0xdc, (byte)0x22, (byte)0x2a, + (byte)0x90, (byte)0x88, (byte)0x46, (byte)0xee, (byte)0xb8, (byte)0x14, (byte)0xde, (byte)0x5e, (byte)0x0b, + (byte)0xdb, (byte)0xe0, (byte)0x32, (byte)0x3a, (byte)0x0a, (byte)0x49, (byte)0x06, (byte)0x24, (byte)0x5c, + (byte)0xc2, (byte)0xd3, (byte)0xac, (byte)0x62, (byte)0x91, (byte)0x95, (byte)0xe4, (byte)0x79, (byte)0xe7, + (byte)0xc8, (byte)0x37, (byte)0x6d, (byte)0x8d, (byte)0xd5, (byte)0x4e, (byte)0xa9, (byte)0x6c, (byte)0x56, + (byte)0xf4, (byte)0xea, (byte)0x65, (byte)0x7a, (byte)0xae, (byte)0x08, (byte)0xba, (byte)0x78, (byte)0x25, + (byte)0x2e, (byte)0x1c, (byte)0xa6, (byte)0xb4, (byte)0xc6, (byte)0xe8, (byte)0xdd, (byte)0x74, (byte)0x1f, + (byte)0x4b, (byte)0xbd, (byte)0x8b, (byte)0x8a, (byte)0x70, (byte)0x3e, (byte)0xb5, (byte)0x66, (byte)0x48, + (byte)0x03, (byte)0xf6, (byte)0x0e, (byte)0x61, (byte)0x35, (byte)0x57, (byte)0xb9, (byte)0x86, (byte)0xc1, + (byte)0x1d, (byte)0x9e, (byte)0xe1, (byte)0xf8, (byte)0x98, (byte)0x11, (byte)0x69, (byte)0xd9, (byte)0x8e, + (byte)0x94, (byte)0x9b, (byte)0x1e, (byte)0x87, (byte)0xe9, (byte)0xce, (byte)0x55, (byte)0x28, (byte)0xdf, + (byte)0x8c, (byte)0xa1, (byte)0x89, (byte)0x0d, (byte)0xbf, (byte)0xe6, (byte)0x42, (byte)0x68, (byte)0x41, + (byte)0x99, (byte)0x2d, (byte)0x0f, (byte)0xb0, (byte)0x54, (byte)0xbb, (byte)0x16 }; + + private static readonly byte[] SB2_sbox = { (byte)0xe2, (byte)0x4e, (byte)0x54, (byte)0xfc, (byte)0x94, (byte)0xc2, + (byte)0x4a, (byte)0xcc, (byte)0x62, (byte)0x0d, (byte)0x6a, (byte)0x46, (byte)0x3c, (byte)0x4d, (byte)0x8b, + (byte)0xd1, (byte)0x5e, (byte)0xfa, (byte)0x64, (byte)0xcb, (byte)0xb4, (byte)0x97, (byte)0xbe, (byte)0x2b, + (byte)0xbc, (byte)0x77, (byte)0x2e, (byte)0x03, (byte)0xd3, (byte)0x19, (byte)0x59, (byte)0xc1, (byte)0x1d, + (byte)0x06, (byte)0x41, (byte)0x6b, (byte)0x55, (byte)0xf0, (byte)0x99, (byte)0x69, (byte)0xea, (byte)0x9c, + (byte)0x18, (byte)0xae, (byte)0x63, (byte)0xdf, (byte)0xe7, (byte)0xbb, (byte)0x00, (byte)0x73, (byte)0x66, + (byte)0xfb, (byte)0x96, (byte)0x4c, (byte)0x85, (byte)0xe4, (byte)0x3a, (byte)0x09, (byte)0x45, (byte)0xaa, + (byte)0x0f, (byte)0xee, (byte)0x10, (byte)0xeb, (byte)0x2d, (byte)0x7f, (byte)0xf4, (byte)0x29, (byte)0xac, + (byte)0xcf, (byte)0xad, (byte)0x91, (byte)0x8d, (byte)0x78, (byte)0xc8, (byte)0x95, (byte)0xf9, (byte)0x2f, + (byte)0xce, (byte)0xcd, (byte)0x08, (byte)0x7a, (byte)0x88, (byte)0x38, (byte)0x5c, (byte)0x83, (byte)0x2a, + (byte)0x28, (byte)0x47, (byte)0xdb, (byte)0xb8, (byte)0xc7, (byte)0x93, (byte)0xa4, (byte)0x12, (byte)0x53, + (byte)0xff, (byte)0x87, (byte)0x0e, (byte)0x31, (byte)0x36, (byte)0x21, (byte)0x58, (byte)0x48, (byte)0x01, + (byte)0x8e, (byte)0x37, (byte)0x74, (byte)0x32, (byte)0xca, (byte)0xe9, (byte)0xb1, (byte)0xb7, (byte)0xab, + (byte)0x0c, (byte)0xd7, (byte)0xc4, (byte)0x56, (byte)0x42, (byte)0x26, (byte)0x07, (byte)0x98, (byte)0x60, + (byte)0xd9, (byte)0xb6, (byte)0xb9, (byte)0x11, (byte)0x40, (byte)0xec, (byte)0x20, (byte)0x8c, (byte)0xbd, + (byte)0xa0, (byte)0xc9, (byte)0x84, (byte)0x04, (byte)0x49, (byte)0x23, (byte)0xf1, (byte)0x4f, (byte)0x50, + (byte)0x1f, (byte)0x13, (byte)0xdc, (byte)0xd8, (byte)0xc0, (byte)0x9e, (byte)0x57, (byte)0xe3, (byte)0xc3, + (byte)0x7b, (byte)0x65, (byte)0x3b, (byte)0x02, (byte)0x8f, (byte)0x3e, (byte)0xe8, (byte)0x25, (byte)0x92, + (byte)0xe5, (byte)0x15, (byte)0xdd, (byte)0xfd, (byte)0x17, (byte)0xa9, (byte)0xbf, (byte)0xd4, (byte)0x9a, + (byte)0x7e, (byte)0xc5, (byte)0x39, (byte)0x67, (byte)0xfe, (byte)0x76, (byte)0x9d, (byte)0x43, (byte)0xa7, + (byte)0xe1, (byte)0xd0, (byte)0xf5, (byte)0x68, (byte)0xf2, (byte)0x1b, (byte)0x34, (byte)0x70, (byte)0x05, + (byte)0xa3, (byte)0x8a, (byte)0xd5, (byte)0x79, (byte)0x86, (byte)0xa8, (byte)0x30, (byte)0xc6, (byte)0x51, + (byte)0x4b, (byte)0x1e, (byte)0xa6, (byte)0x27, (byte)0xf6, (byte)0x35, (byte)0xd2, (byte)0x6e, (byte)0x24, + (byte)0x16, (byte)0x82, (byte)0x5f, (byte)0xda, (byte)0xe6, (byte)0x75, (byte)0xa2, (byte)0xef, (byte)0x2c, + (byte)0xb2, (byte)0x1c, (byte)0x9f, (byte)0x5d, (byte)0x6f, (byte)0x80, (byte)0x0a, (byte)0x72, (byte)0x44, + (byte)0x9b, (byte)0x6c, (byte)0x90, (byte)0x0b, (byte)0x5b, (byte)0x33, (byte)0x7d, (byte)0x5a, (byte)0x52, + (byte)0xf3, (byte)0x61, (byte)0xa1, (byte)0xf7, (byte)0xb0, (byte)0xd6, (byte)0x3f, (byte)0x7c, (byte)0x6d, + (byte)0xed, (byte)0x14, (byte)0xe0, (byte)0xa5, (byte)0x3d, (byte)0x22, (byte)0xb3, (byte)0xf8, (byte)0x89, + (byte)0xde, (byte)0x71, (byte)0x1a, (byte)0xaf, (byte)0xba, (byte)0xb5, (byte)0x81 }; + + private static readonly byte[] SB3_sbox = { (byte)0x52, (byte)0x09, (byte)0x6a, (byte)0xd5, (byte)0x30, (byte)0x36, + (byte)0xa5, (byte)0x38, (byte)0xbf, (byte)0x40, (byte)0xa3, (byte)0x9e, (byte)0x81, (byte)0xf3, (byte)0xd7, + (byte)0xfb, (byte)0x7c, (byte)0xe3, (byte)0x39, (byte)0x82, (byte)0x9b, (byte)0x2f, (byte)0xff, (byte)0x87, + (byte)0x34, (byte)0x8e, (byte)0x43, (byte)0x44, (byte)0xc4, (byte)0xde, (byte)0xe9, (byte)0xcb, (byte)0x54, + (byte)0x7b, (byte)0x94, (byte)0x32, (byte)0xa6, (byte)0xc2, (byte)0x23, (byte)0x3d, (byte)0xee, (byte)0x4c, + (byte)0x95, (byte)0x0b, (byte)0x42, (byte)0xfa, (byte)0xc3, (byte)0x4e, (byte)0x08, (byte)0x2e, (byte)0xa1, + (byte)0x66, (byte)0x28, (byte)0xd9, (byte)0x24, (byte)0xb2, (byte)0x76, (byte)0x5b, (byte)0xa2, (byte)0x49, + (byte)0x6d, (byte)0x8b, (byte)0xd1, (byte)0x25, (byte)0x72, (byte)0xf8, (byte)0xf6, (byte)0x64, (byte)0x86, + (byte)0x68, (byte)0x98, (byte)0x16, (byte)0xd4, (byte)0xa4, (byte)0x5c, (byte)0xcc, (byte)0x5d, (byte)0x65, + (byte)0xb6, (byte)0x92, (byte)0x6c, (byte)0x70, (byte)0x48, (byte)0x50, (byte)0xfd, (byte)0xed, (byte)0xb9, + (byte)0xda, (byte)0x5e, (byte)0x15, (byte)0x46, (byte)0x57, (byte)0xa7, (byte)0x8d, (byte)0x9d, (byte)0x84, + (byte)0x90, (byte)0xd8, (byte)0xab, (byte)0x00, (byte)0x8c, (byte)0xbc, (byte)0xd3, (byte)0x0a, (byte)0xf7, + (byte)0xe4, (byte)0x58, (byte)0x05, (byte)0xb8, (byte)0xb3, (byte)0x45, (byte)0x06, (byte)0xd0, (byte)0x2c, + (byte)0x1e, (byte)0x8f, (byte)0xca, (byte)0x3f, (byte)0x0f, (byte)0x02, (byte)0xc1, (byte)0xaf, (byte)0xbd, + (byte)0x03, (byte)0x01, (byte)0x13, (byte)0x8a, (byte)0x6b, (byte)0x3a, (byte)0x91, (byte)0x11, (byte)0x41, + (byte)0x4f, (byte)0x67, (byte)0xdc, (byte)0xea, (byte)0x97, (byte)0xf2, (byte)0xcf, (byte)0xce, (byte)0xf0, + (byte)0xb4, (byte)0xe6, (byte)0x73, (byte)0x96, (byte)0xac, (byte)0x74, (byte)0x22, (byte)0xe7, (byte)0xad, + (byte)0x35, (byte)0x85, (byte)0xe2, (byte)0xf9, (byte)0x37, (byte)0xe8, (byte)0x1c, (byte)0x75, (byte)0xdf, + (byte)0x6e, (byte)0x47, (byte)0xf1, (byte)0x1a, (byte)0x71, (byte)0x1d, (byte)0x29, (byte)0xc5, (byte)0x89, + (byte)0x6f, (byte)0xb7, (byte)0x62, (byte)0x0e, (byte)0xaa, (byte)0x18, (byte)0xbe, (byte)0x1b, (byte)0xfc, + (byte)0x56, (byte)0x3e, (byte)0x4b, (byte)0xc6, (byte)0xd2, (byte)0x79, (byte)0x20, (byte)0x9a, (byte)0xdb, + (byte)0xc0, (byte)0xfe, (byte)0x78, (byte)0xcd, (byte)0x5a, (byte)0xf4, (byte)0x1f, (byte)0xdd, (byte)0xa8, + (byte)0x33, (byte)0x88, (byte)0x07, (byte)0xc7, (byte)0x31, (byte)0xb1, (byte)0x12, (byte)0x10, (byte)0x59, + (byte)0x27, (byte)0x80, (byte)0xec, (byte)0x5f, (byte)0x60, (byte)0x51, (byte)0x7f, (byte)0xa9, (byte)0x19, + (byte)0xb5, (byte)0x4a, (byte)0x0d, (byte)0x2d, (byte)0xe5, (byte)0x7a, (byte)0x9f, (byte)0x93, (byte)0xc9, + (byte)0x9c, (byte)0xef, (byte)0xa0, (byte)0xe0, (byte)0x3b, (byte)0x4d, (byte)0xae, (byte)0x2a, (byte)0xf5, + (byte)0xb0, (byte)0xc8, (byte)0xeb, (byte)0xbb, (byte)0x3c, (byte)0x83, (byte)0x53, (byte)0x99, (byte)0x61, + (byte)0x17, (byte)0x2b, (byte)0x04, (byte)0x7e, (byte)0xba, (byte)0x77, (byte)0xd6, (byte)0x26, (byte)0xe1, + (byte)0x69, (byte)0x14, (byte)0x63, (byte)0x55, (byte)0x21, (byte)0x0c, (byte)0x7d }; + + private static readonly byte[] SB4_sbox = { (byte)0x30, (byte)0x68, (byte)0x99, (byte)0x1b, (byte)0x87, (byte)0xb9, + (byte)0x21, (byte)0x78, (byte)0x50, (byte)0x39, (byte)0xdb, (byte)0xe1, (byte)0x72, (byte)0x9, (byte)0x62, + (byte)0x3c, (byte)0x3e, (byte)0x7e, (byte)0x5e, (byte)0x8e, (byte)0xf1, (byte)0xa0, (byte)0xcc, (byte)0xa3, + (byte)0x2a, (byte)0x1d, (byte)0xfb, (byte)0xb6, (byte)0xd6, (byte)0x20, (byte)0xc4, (byte)0x8d, (byte)0x81, + (byte)0x65, (byte)0xf5, (byte)0x89, (byte)0xcb, (byte)0x9d, (byte)0x77, (byte)0xc6, (byte)0x57, (byte)0x43, + (byte)0x56, (byte)0x17, (byte)0xd4, (byte)0x40, (byte)0x1a, (byte)0x4d, (byte)0xc0, (byte)0x63, (byte)0x6c, + (byte)0xe3, (byte)0xb7, (byte)0xc8, (byte)0x64, (byte)0x6a, (byte)0x53, (byte)0xaa, (byte)0x38, (byte)0x98, + (byte)0x0c, (byte)0xf4, (byte)0x9b, (byte)0xed, (byte)0x7f, (byte)0x22, (byte)0x76, (byte)0xaf, (byte)0xdd, + (byte)0x3a, (byte)0x0b, (byte)0x58, (byte)0x67, (byte)0x88, (byte)0x06, (byte)0xc3, (byte)0x35, (byte)0x0d, + (byte)0x01, (byte)0x8b, (byte)0x8c, (byte)0xc2, (byte)0xe6, (byte)0x5f, (byte)0x02, (byte)0x24, (byte)0x75, + (byte)0x93, (byte)0x66, (byte)0x1e, (byte)0xe5, (byte)0xe2, (byte)0x54, (byte)0xd8, (byte)0x10, (byte)0xce, + (byte)0x7a, (byte)0xe8, (byte)0x08, (byte)0x2c, (byte)0x12, (byte)0x97, (byte)0x32, (byte)0xab, (byte)0xb4, + (byte)0x27, (byte)0x0a, (byte)0x23, (byte)0xdf, (byte)0xef, (byte)0xca, (byte)0xd9, (byte)0xb8, (byte)0xfa, + (byte)0xdc, (byte)0x31, (byte)0x6b, (byte)0xd1, (byte)0xad, (byte)0x19, (byte)0x49, (byte)0xbd, (byte)0x51, + (byte)0x96, (byte)0xee, (byte)0xe4, (byte)0xa8, (byte)0x41, (byte)0xda, (byte)0xff, (byte)0xcd, (byte)0x55, + (byte)0x86, (byte)0x36, (byte)0xbe, (byte)0x61, (byte)0x52, (byte)0xf8, (byte)0xbb, (byte)0x0e, (byte)0x82, + (byte)0x48, (byte)0x69, (byte)0x9a, (byte)0xe0, (byte)0x47, (byte)0x9e, (byte)0x5c, (byte)0x04, (byte)0x4b, + (byte)0x34, (byte)0x15, (byte)0x79, (byte)0x26, (byte)0xa7, (byte)0xde, (byte)0x29, (byte)0xae, (byte)0x92, + (byte)0xd7, (byte)0x84, (byte)0xe9, (byte)0xd2, (byte)0xba, (byte)0x5d, (byte)0xf3, (byte)0xc5, (byte)0xb0, + (byte)0xbf, (byte)0xa4, (byte)0x3b, (byte)0x71, (byte)0x44, (byte)0x46, (byte)0x2b, (byte)0xfc, (byte)0xeb, + (byte)0x6f, (byte)0xd5, (byte)0xf6, (byte)0x14, (byte)0xfe, (byte)0x7c, (byte)0x70, (byte)0x5a, (byte)0x7d, + (byte)0xfd, (byte)0x2f, (byte)0x18, (byte)0x83, (byte)0x16, (byte)0xa5, (byte)0x91, (byte)0x1f, (byte)0x05, + (byte)0x95, (byte)0x74, (byte)0xa9, (byte)0xc1, (byte)0x5b, (byte)0x4a, (byte)0x85, (byte)0x6d, (byte)0x13, + (byte)0x07, (byte)0x4f, (byte)0x4e, (byte)0x45, (byte)0xb2, (byte)0x0f, (byte)0xc9, (byte)0x1c, (byte)0xa6, + (byte)0xbc, (byte)0xec, (byte)0x73, (byte)0x90, (byte)0x7b, (byte)0xcf, (byte)0x59, (byte)0x8f, (byte)0xa1, + (byte)0xf9, (byte)0x2d, (byte)0xf2, (byte)0xb1, (byte)0x00, (byte)0x94, (byte)0x37, (byte)0x9f, (byte)0xd0, + (byte)0x2e, (byte)0x9c, (byte)0x6e, (byte)0x28, (byte)0x3f, (byte)0x80, (byte)0xf0, (byte)0x3d, (byte)0xd3, + (byte)0x25, (byte)0x8a, (byte)0xb5, (byte)0xe7, (byte)0x42, (byte)0xb3, (byte)0xc7, (byte)0xea, (byte)0xf7, + (byte)0x4c, (byte)0x11, (byte)0x33, (byte)0x03, (byte)0xa2, (byte)0xac, (byte)0x60 }; + + protected const int BlockSize = 16; + + private byte[][] m_roundKeys; + + public virtual void Init(bool forEncryption, ICipherParameters parameters) + { + KeyParameter keyParameter = parameters as KeyParameter; + + if (keyParameter == null) + throw new ArgumentException("invalid parameter passed to ARIA init - " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + + this.m_roundKeys = KeySchedule(forEncryption, keyParameter.GetKey()); + } + + public virtual string AlgorithmName + { + get { return "ARIA"; } + } + + public virtual int GetBlockSize() + { + return BlockSize; + } + + public virtual int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (m_roundKeys == null) + throw new InvalidOperationException("ARIA engine not initialised"); + + Check.DataLength(input, inOff, BlockSize, "input buffer too short"); + Check.OutputLength(output, outOff, BlockSize, "output buffer too short"); + + byte[] z = new byte[BlockSize]; + Array.Copy(input, inOff, z, 0, BlockSize); + + int i = 0, rounds = m_roundKeys.Length - 3; + while (i < rounds) + { + FO(z, m_roundKeys[i++]); + FE(z, m_roundKeys[i++]); + } + + FO(z, m_roundKeys[i++]); + Xor(z, m_roundKeys[i++]); + SL2(z); + Xor(z, m_roundKeys[i]); + + Array.Copy(z, 0, output, outOff, BlockSize); + + return BlockSize; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + if (m_roundKeys == null) + throw new InvalidOperationException("ARIA engine not initialised"); + + Check.DataLength(input, BlockSize, "input buffer too short"); + Check.OutputLength(output, BlockSize, "output buffer too short"); + + byte[] z = new byte[BlockSize]; + input[..BlockSize].CopyTo(z); + + int i = 0, rounds = m_roundKeys.Length - 3; + while (i < rounds) + { + FO(z, m_roundKeys[i++]); + FE(z, m_roundKeys[i++]); + } + + FO(z, m_roundKeys[i++]); + Xor(z, m_roundKeys[i++]); + SL2(z); + Xor(z, m_roundKeys[i]); + + z.CopyTo(output); + + return BlockSize; + } +#endif + + protected static void A(byte[] z) + { + byte x0 = z[0], x1 = z[1], x2 = z[2], x3 = z[3], x4 = z[4], x5 = z[5], x6 = z[6], x7 = z[7], x8 = z[8], + x9 = z[9], x10 = z[10], x11 = z[11], x12 = z[12], x13 = z[13], x14 = z[14], x15 = z[15]; + + z[0] = (byte)(x3 ^ x4 ^ x6 ^ x8 ^ x9 ^ x13 ^ x14); + z[1] = (byte)(x2 ^ x5 ^ x7 ^ x8 ^ x9 ^ x12 ^ x15); + z[2] = (byte)(x1 ^ x4 ^ x6 ^ x10 ^ x11 ^ x12 ^ x15); + z[3] = (byte)(x0 ^ x5 ^ x7 ^ x10 ^ x11 ^ x13 ^ x14); + z[4] = (byte)(x0 ^ x2 ^ x5 ^ x8 ^ x11 ^ x14 ^ x15); + z[5] = (byte)(x1 ^ x3 ^ x4 ^ x9 ^ x10 ^ x14 ^ x15); + z[6] = (byte)(x0 ^ x2 ^ x7 ^ x9 ^ x10 ^ x12 ^ x13); + z[7] = (byte)(x1 ^ x3 ^ x6 ^ x8 ^ x11 ^ x12 ^ x13); + z[8] = (byte)(x0 ^ x1 ^ x4 ^ x7 ^ x10 ^ x13 ^ x15); + z[9] = (byte)(x0 ^ x1 ^ x5 ^ x6 ^ x11 ^ x12 ^ x14); + z[10] = (byte)(x2 ^ x3 ^ x5 ^ x6 ^ x8 ^ x13 ^ x15); + z[11] = (byte)(x2 ^ x3 ^ x4 ^ x7 ^ x9 ^ x12 ^ x14); + z[12] = (byte)(x1 ^ x2 ^ x6 ^ x7 ^ x9 ^ x11 ^ x12); + z[13] = (byte)(x0 ^ x3 ^ x6 ^ x7 ^ x8 ^ x10 ^ x13); + z[14] = (byte)(x0 ^ x3 ^ x4 ^ x5 ^ x9 ^ x11 ^ x14); + z[15] = (byte)(x1 ^ x2 ^ x4 ^ x5 ^ x8 ^ x10 ^ x15); + } + + protected static void FE(byte[] D, byte[] RK) + { + Xor(D, RK); + SL2(D); + A(D); + } + + protected static void FO(byte[] D, byte[] RK) + { + Xor(D, RK); + SL1(D); + A(D); + } + + protected static byte[][] KeySchedule(bool forEncryption, byte[] K) + { + int keyLen = K.Length; + if (keyLen < 16 || keyLen > 32 || (keyLen & 7) != 0) + throw new ArgumentException("Key length not 128/192/256 bits."); + + int keyLenIdx = (keyLen >> 3) - 2; + + byte[] CK1 = C[keyLenIdx]; + byte[] CK2 = C[(keyLenIdx + 1) % 3]; + byte[] CK3 = C[(keyLenIdx + 2) % 3]; + + byte[] KL = new byte[16], KR = new byte[16]; + Array.Copy(K, 0, KL, 0, 16); + Array.Copy(K, 16, KR, 0, keyLen - 16); + + byte[] W0 = new byte[16]; + byte[] W1 = new byte[16]; + byte[] W2 = new byte[16]; + byte[] W3 = new byte[16]; + + Array.Copy(KL, 0, W0, 0, 16); + + Array.Copy(W0, 0, W1, 0, 16); + FO(W1, CK1); + Xor(W1, KR); + + Array.Copy(W1, 0, W2, 0, 16); + FE(W2, CK2); + Xor(W2, W0); + + Array.Copy(W2, 0, W3, 0, 16); + FO(W3, CK3); + Xor(W3, W1); + + int numRounds = 12 + (keyLenIdx * 2); + byte[][] rks = new byte[numRounds + 1][]; + + rks[0] = KeyScheduleRound(W0, W1, 19); + rks[1] = KeyScheduleRound(W1, W2, 19); + rks[2] = KeyScheduleRound(W2, W3, 19); + rks[3] = KeyScheduleRound(W3, W0, 19); + + rks[4] = KeyScheduleRound(W0, W1, 31); + rks[5] = KeyScheduleRound(W1, W2, 31); + rks[6] = KeyScheduleRound(W2, W3, 31); + rks[7] = KeyScheduleRound(W3, W0, 31); + + rks[8] = KeyScheduleRound(W0, W1, 67); + rks[9] = KeyScheduleRound(W1, W2, 67); + rks[10] = KeyScheduleRound(W2, W3, 67); + rks[11] = KeyScheduleRound(W3, W0, 67); + + rks[12] = KeyScheduleRound(W0, W1, 97); + if (numRounds > 12) + { + rks[13] = KeyScheduleRound(W1, W2, 97); + rks[14] = KeyScheduleRound(W2, W3, 97); + if (numRounds > 14) + { + rks[15] = KeyScheduleRound(W3, W0, 97); + + rks[16] = KeyScheduleRound(W0, W1, 109); + } + } + + if (!forEncryption) + { + ReverseKeys(rks); + + for (int i = 1; i < numRounds; ++i) + { + A(rks[i]); + } + } + + return rks; + } + + protected static byte[] KeyScheduleRound(byte[] w, byte[] wr, int n) + { + byte[] rk = new byte[16]; + + int off = n >> 3, right = n & 7, left = 8 - right; + + int hi = wr[15 - off] & 0xFF; + + for (int to = 0; to < 16; ++to) + { + int lo = wr[(to - off) & 0xF] & 0xFF; + + int b = (hi << left) | (lo >> right); + b ^= (w[to] & 0xFF); + + rk[to] = (byte)b; + + hi = lo; + } + + return rk; + } + + protected static void ReverseKeys(byte[][] keys) + { + int length = keys.Length, limit = length / 2, last = length - 1; + for (int i = 0; i < limit; ++i) + { + byte[] t = keys[i]; + keys[i] = keys[last - i]; + keys[last - i] = t; + } + } + + protected static byte SB1(byte x) + { + return SB1_sbox[x & 0xFF]; + } + + protected static byte SB2(byte x) + { + return SB2_sbox[x & 0xFF]; + } + + protected static byte SB3(byte x) + { + return SB3_sbox[x & 0xFF]; + } + + protected static byte SB4(byte x) + { + return SB4_sbox[x & 0xFF]; + } + + protected static void SL1(byte[] z) + { + z[0] = SB1(z[0]); + z[1] = SB2(z[1]); + z[2] = SB3(z[2]); + z[3] = SB4(z[3]); + z[4] = SB1(z[4]); + z[5] = SB2(z[5]); + z[6] = SB3(z[6]); + z[7] = SB4(z[7]); + z[8] = SB1(z[8]); + z[9] = SB2(z[9]); + z[10] = SB3(z[10]); + z[11] = SB4(z[11]); + z[12] = SB1(z[12]); + z[13] = SB2(z[13]); + z[14] = SB3(z[14]); + z[15] = SB4(z[15]); + } + + protected static void SL2(byte[] z) + { + z[0] = SB3(z[0]); + z[1] = SB4(z[1]); + z[2] = SB1(z[2]); + z[3] = SB2(z[3]); + z[4] = SB3(z[4]); + z[5] = SB4(z[5]); + z[6] = SB1(z[6]); + z[7] = SB2(z[7]); + z[8] = SB3(z[8]); + z[9] = SB4(z[9]); + z[10] = SB1(z[10]); + z[11] = SB2(z[11]); + z[12] = SB3(z[12]); + z[13] = SB4(z[13]); + z[14] = SB1(z[14]); + z[15] = SB2(z[15]); + } + + protected static void Xor(byte[] z, byte[] x) + { + for (int i = 0; i < 16; ++i) + { + z[i] ^= x[i]; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AriaEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AriaEngine.cs.meta new file mode 100644 index 000000000..e7957cd9f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/AriaEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f26aa4271ff99946bbd3426b0c850ed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/BlowfishEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/BlowfishEngine.cs new file mode 100644 index 000000000..6fbf129e3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/BlowfishEngine.cs @@ -0,0 +1,604 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * A class that provides Blowfish key encryption operations, + * such as encoding data and generating keys. + * All the algorithms herein are from Applied Cryptography + * and implement a simplified cryptography interface. + */ + public sealed class BlowfishEngine + : IBlockCipher + { + private readonly static uint[] KP = + { + 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, + 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89, + 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C, + 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917, + 0x9216D5D9, 0x8979FB1B + }, + KS0 = + { + 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, + 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99, + 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16, + 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E, + 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE, + 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013, + 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF, + 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E, + 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60, + 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, + 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE, + 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A, + 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, + 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677, + 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193, + 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032, + 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88, + 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239, + 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, + 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0, + 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3, + 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, + 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88, + 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE, + 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6, + 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D, + 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B, + 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7, + 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA, + 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463, + 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, + 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09, + 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3, + 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB, + 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279, + 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8, + 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, + 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82, + 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB, + 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573, + 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0, + 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B, + 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790, + 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8, + 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4, + 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, + 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7, + 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C, + 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, + 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1, + 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299, + 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9, + 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477, + 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF, + 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, + 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF, + 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA, + 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, + 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41, + 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915, + 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400, + 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915, + 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664, + 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A + }, + KS1 = + { + 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, + 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266, + 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1, + 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E, + 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6, + 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1, + 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E, + 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1, + 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737, + 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, + 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF, + 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD, + 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, + 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7, + 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41, + 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331, + 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF, + 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF, + 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, + 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87, + 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C, + 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, + 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16, + 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD, + 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B, + 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509, + 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E, + 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3, + 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F, + 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A, + 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, + 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960, + 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66, + 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28, + 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802, + 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84, + 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, + 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF, + 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14, + 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E, + 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50, + 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7, + 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8, + 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281, + 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99, + 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, + 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128, + 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73, + 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, + 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0, + 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105, + 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250, + 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3, + 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285, + 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, + 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061, + 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB, + 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, + 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735, + 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC, + 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9, + 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340, + 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20, + 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 + }, + KS2 = + { + 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, + 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068, + 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF, + 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840, + 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45, + 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504, + 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A, + 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB, + 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE, + 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, + 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42, + 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B, + 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, + 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB, + 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527, + 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B, + 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33, + 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C, + 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, + 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC, + 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17, + 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, + 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B, + 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115, + 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922, + 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728, + 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0, + 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E, + 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37, + 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D, + 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, + 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B, + 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3, + 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB, + 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D, + 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C, + 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, + 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9, + 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A, + 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE, + 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D, + 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC, + 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F, + 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61, + 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2, + 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, + 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2, + 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C, + 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, + 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633, + 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10, + 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169, + 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52, + 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027, + 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, + 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62, + 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634, + 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, + 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24, + 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC, + 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4, + 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C, + 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837, + 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 + }, + KS3 = + { + 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, + 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE, + 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B, + 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4, + 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8, + 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6, + 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304, + 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22, + 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4, + 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, + 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9, + 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59, + 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, + 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51, + 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28, + 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C, + 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B, + 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28, + 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, + 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD, + 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A, + 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, + 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB, + 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F, + 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991, + 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32, + 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680, + 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166, + 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE, + 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB, + 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, + 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47, + 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370, + 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D, + 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84, + 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048, + 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, + 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD, + 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9, + 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7, + 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38, + 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F, + 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C, + 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525, + 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1, + 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, + 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964, + 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E, + 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, + 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D, + 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F, + 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299, + 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02, + 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC, + 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, + 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A, + 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6, + 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, + 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0, + 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060, + 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E, + 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9, + 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F, + 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 + }; + + //==================================== + // Useful constants + //==================================== + + private static readonly int ROUNDS = 16; + private const int BLOCK_SIZE = 8; // bytes = 64 bits + private static readonly int SBOX_SK = 256; + private static readonly int P_SZ = ROUNDS+2; + + private readonly uint[] S0, S1, S2, S3; // the s-boxes + private readonly uint[] P; // the p-array + + private bool encrypting; + + private byte[] workingKey; + + public BlowfishEngine() + { + S0 = new uint[SBOX_SK]; + S1 = new uint[SBOX_SK]; + S2 = new uint[SBOX_SK]; + S3 = new uint[SBOX_SK]; + P = new uint[P_SZ]; + } + + /** + * initialise a Blowfish cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param parameters the parameters required to set up the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public void Init( + bool forEncryption, + ICipherParameters parameters) + { + if (!(parameters is KeyParameter)) + throw new ArgumentException("invalid parameter passed to Blowfish init - " + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + + this.encrypting = forEncryption; + this.workingKey = ((KeyParameter)parameters).GetKey(); + SetKey(this.workingKey); + } + + public string AlgorithmName + { + get { return "Blowfish"; } + } + + public int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (workingKey == null) + throw new InvalidOperationException("Blowfish not initialised"); + + Check.DataLength(input, inOff, BLOCK_SIZE, "input buffer too short"); + Check.OutputLength(output, outOff, BLOCK_SIZE, "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + if (encrypting) + { + EncryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); + } + else + { + DecryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); + } +#else + if (encrypting) + { + EncryptBlock(input, inOff, output, outOff); + } + else + { + DecryptBlock(input, inOff, output, outOff); + } +#endif + + return BLOCK_SIZE; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessBlock(ReadOnlySpan input, Span output) + { + if (workingKey == null) + throw new InvalidOperationException("Blowfish not initialised"); + + Check.DataLength(input, BLOCK_SIZE, "input buffer too short"); + Check.OutputLength(output, BLOCK_SIZE, "output buffer too short"); + + if (encrypting) + { + EncryptBlock(input, output); + } + else + { + DecryptBlock(input, output); + } + + return BLOCK_SIZE; + } +#endif + + public int GetBlockSize() + { + return BLOCK_SIZE; + } + + //================================== + // Private Implementation + //================================== + + private uint F(uint x) + { + return (((S0[x >> 24] + S1[(x >> 16) & 0xff]) ^ S2[(x >> 8) & 0xff]) + S3[x & 0xff]); + } + + /** + * apply the encryption cycle to each value pair in the table. + */ + private void ProcessTable( + uint xl, + uint xr, + uint[] table) + { + int size = table.Length; + + for (int s = 0; s < size; s += 2) + { + xl ^= P[0]; + + for (int i = 1; i < ROUNDS; i += 2) + { + xr ^= F(xl) ^ P[i]; + xl ^= F(xr) ^ P[i + 1]; + } + + xr ^= P[ROUNDS + 1]; + + table[s] = xr; + table[s + 1] = xl; + + xr = xl; // end of cycle swap + xl = table[s]; + } + } + + private void SetKey(byte[] key) + { + if (key.Length < 4 || key.Length > 56) + { + throw new ArgumentException("key length must be in range 32 to 448 bits"); + } + + /* + * - comments are from _Applied Crypto_, Schneier, p338 + * please be careful comparing the two, AC numbers the + * arrays from 1, the enclosed code from 0. + * + * (1) + * Initialise the S-boxes and the P-array, with a fixed string + * This string contains the hexadecimal digits of pi (3.141...) + */ + Array.Copy(KS0, 0, S0, 0, SBOX_SK); + Array.Copy(KS1, 0, S1, 0, SBOX_SK); + Array.Copy(KS2, 0, S2, 0, SBOX_SK); + Array.Copy(KS3, 0, S3, 0, SBOX_SK); + + Array.Copy(KP, 0, P, 0, P_SZ); + + /* + * (2) + * Now, XOR P[0] with the first 32 bits of the key, XOR P[1] with the + * second 32-bits of the key, and so on for all bits of the key + * (up to P[17]). Repeatedly cycle through the key bits until the + * entire P-array has been XOR-ed with the key bits + */ + int keyLength = key.Length; + int keyIndex = 0; + + for (int i=0; i < P_SZ; i++) + { + // Get the 32 bits of the key, in 4 * 8 bit chunks + uint data = 0x0000000; + for (int j=0; j < 4; j++) + { + // create a 32 bit block + data = (data << 8) | (uint)key[keyIndex++]; + + // wrap when we get to the end of the key + if (keyIndex >= keyLength) + { + keyIndex = 0; + } + } + // XOR the newly created 32 bit chunk onto the P-array + P[i] ^= data; + } + + /* + * (3) + * Encrypt the all-zero string with the Blowfish algorithm, using + * the subkeys described in (1) and (2) + * + * (4) + * Replace P1 and P2 with the output of step (3) + * + * (5) + * Encrypt the output of step(3) using the Blowfish algorithm, + * with the modified subkeys. + * + * (6) + * Replace P3 and P4 with the output of step (5) + * + * (7) + * Continue the process, replacing all elements of the P-array + * and then all four S-boxes in order, with the output of the + * continuously changing Blowfish algorithm + */ + + ProcessTable(0, 0, P); + ProcessTable(P[P_SZ - 2], P[P_SZ - 1], S0); + ProcessTable(S0[SBOX_SK - 2], S0[SBOX_SK - 1], S1); + ProcessTable(S1[SBOX_SK - 2], S1[SBOX_SK - 1], S2); + ProcessTable(S2[SBOX_SK - 2], S2[SBOX_SK - 1], S3); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void EncryptBlock(ReadOnlySpan input, Span output) + { + uint xl = Pack.BE_To_UInt32(input); + uint xr = Pack.BE_To_UInt32(input[4..]); + + xl ^= P[0]; + + for (int i = 1; i < ROUNDS; i += 2) + { + xr ^= F(xl) ^ P[i]; + xl ^= F(xr) ^ P[i + 1]; + } + + xr ^= P[ROUNDS + 1]; + + Pack.UInt32_To_BE(xr, output); + Pack.UInt32_To_BE(xl, output[4..]); + } + + private void DecryptBlock(ReadOnlySpan input, Span output) + { + uint xl = Pack.BE_To_UInt32(input); + uint xr = Pack.BE_To_UInt32(input[4..]); + + xl ^= P[ROUNDS + 1]; + + for (int i = ROUNDS; i > 0; i -= 2) + { + xr ^= F(xl) ^ P[i]; + xl ^= F(xr) ^ P[i - 1]; + } + + xr ^= P[0]; + + Pack.UInt32_To_BE(xr, output); + Pack.UInt32_To_BE(xl, output[4..]); + } +#else + private void EncryptBlock(byte[] src, int srcIndex, byte[] dst, int dstIndex) + { + uint xl = Pack.BE_To_UInt32(src, srcIndex); + uint xr = Pack.BE_To_UInt32(src, srcIndex+4); + + xl ^= P[0]; + + for (int i = 1; i < ROUNDS; i += 2) + { + xr ^= F(xl) ^ P[i]; + xl ^= F(xr) ^ P[i + 1]; + } + + xr ^= P[ROUNDS + 1]; + + Pack.UInt32_To_BE(xr, dst, dstIndex); + Pack.UInt32_To_BE(xl, dst, dstIndex + 4); + } + + private void DecryptBlock(byte[] src, int srcIndex, byte[] dst, int dstIndex) + { + uint xl = Pack.BE_To_UInt32(src, srcIndex); + uint xr = Pack.BE_To_UInt32(src, srcIndex + 4); + + xl ^= P[ROUNDS + 1]; + + for (int i = ROUNDS; i > 0 ; i -= 2) + { + xr ^= F(xl) ^ P[i]; + xl ^= F(xr) ^ P[i - 1]; + } + + xr ^= P[0]; + + Pack.UInt32_To_BE(xr, dst, dstIndex); + Pack.UInt32_To_BE(xl, dst, dstIndex + 4); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/BlowfishEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/BlowfishEngine.cs.meta new file mode 100644 index 000000000..799d49263 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/BlowfishEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f53324f77555fe42bd19122a07da1dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/CamelliaEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/CamelliaEngine.cs new file mode 100644 index 000000000..633b7a284 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/CamelliaEngine.cs @@ -0,0 +1,714 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * Camellia - based on RFC 3713. + */ + public class CamelliaEngine + : IBlockCipher + { + private bool initialised = false; + private bool _keyIs128; + + private const int BLOCK_SIZE = 16; + + private uint[] subkey = new uint[24 * 4]; + private uint[] kw = new uint[4 * 2]; // for whitening + private uint[] ke = new uint[6 * 2]; // for FL and FL^(-1) + + private static readonly uint[] SIGMA = new uint[]{ + 0xa09e667f, 0x3bcc908b, + 0xb67ae858, 0x4caa73b2, + 0xc6ef372f, 0xe94f82be, + 0x54ff53a5, 0xf1d36f1c, + 0x10e527fa, 0xde682d1d, + 0xb05688c2, 0xb3e6c1fd + }; + + /* + * + * S-box data + * + */ + private static readonly uint[] SBOX1_1110 = new uint[]{ + 0x70707000, 0x82828200, 0x2c2c2c00, 0xececec00, 0xb3b3b300, 0x27272700, + 0xc0c0c000, 0xe5e5e500, 0xe4e4e400, 0x85858500, 0x57575700, 0x35353500, + 0xeaeaea00, 0x0c0c0c00, 0xaeaeae00, 0x41414100, 0x23232300, 0xefefef00, + 0x6b6b6b00, 0x93939300, 0x45454500, 0x19191900, 0xa5a5a500, 0x21212100, + 0xededed00, 0x0e0e0e00, 0x4f4f4f00, 0x4e4e4e00, 0x1d1d1d00, 0x65656500, + 0x92929200, 0xbdbdbd00, 0x86868600, 0xb8b8b800, 0xafafaf00, 0x8f8f8f00, + 0x7c7c7c00, 0xebebeb00, 0x1f1f1f00, 0xcecece00, 0x3e3e3e00, 0x30303000, + 0xdcdcdc00, 0x5f5f5f00, 0x5e5e5e00, 0xc5c5c500, 0x0b0b0b00, 0x1a1a1a00, + 0xa6a6a600, 0xe1e1e100, 0x39393900, 0xcacaca00, 0xd5d5d500, 0x47474700, + 0x5d5d5d00, 0x3d3d3d00, 0xd9d9d900, 0x01010100, 0x5a5a5a00, 0xd6d6d600, + 0x51515100, 0x56565600, 0x6c6c6c00, 0x4d4d4d00, 0x8b8b8b00, 0x0d0d0d00, + 0x9a9a9a00, 0x66666600, 0xfbfbfb00, 0xcccccc00, 0xb0b0b000, 0x2d2d2d00, + 0x74747400, 0x12121200, 0x2b2b2b00, 0x20202000, 0xf0f0f000, 0xb1b1b100, + 0x84848400, 0x99999900, 0xdfdfdf00, 0x4c4c4c00, 0xcbcbcb00, 0xc2c2c200, + 0x34343400, 0x7e7e7e00, 0x76767600, 0x05050500, 0x6d6d6d00, 0xb7b7b700, + 0xa9a9a900, 0x31313100, 0xd1d1d100, 0x17171700, 0x04040400, 0xd7d7d700, + 0x14141400, 0x58585800, 0x3a3a3a00, 0x61616100, 0xdedede00, 0x1b1b1b00, + 0x11111100, 0x1c1c1c00, 0x32323200, 0x0f0f0f00, 0x9c9c9c00, 0x16161600, + 0x53535300, 0x18181800, 0xf2f2f200, 0x22222200, 0xfefefe00, 0x44444400, + 0xcfcfcf00, 0xb2b2b200, 0xc3c3c300, 0xb5b5b500, 0x7a7a7a00, 0x91919100, + 0x24242400, 0x08080800, 0xe8e8e800, 0xa8a8a800, 0x60606000, 0xfcfcfc00, + 0x69696900, 0x50505000, 0xaaaaaa00, 0xd0d0d000, 0xa0a0a000, 0x7d7d7d00, + 0xa1a1a100, 0x89898900, 0x62626200, 0x97979700, 0x54545400, 0x5b5b5b00, + 0x1e1e1e00, 0x95959500, 0xe0e0e000, 0xffffff00, 0x64646400, 0xd2d2d200, + 0x10101000, 0xc4c4c400, 0x00000000, 0x48484800, 0xa3a3a300, 0xf7f7f700, + 0x75757500, 0xdbdbdb00, 0x8a8a8a00, 0x03030300, 0xe6e6e600, 0xdadada00, + 0x09090900, 0x3f3f3f00, 0xdddddd00, 0x94949400, 0x87878700, 0x5c5c5c00, + 0x83838300, 0x02020200, 0xcdcdcd00, 0x4a4a4a00, 0x90909000, 0x33333300, + 0x73737300, 0x67676700, 0xf6f6f600, 0xf3f3f300, 0x9d9d9d00, 0x7f7f7f00, + 0xbfbfbf00, 0xe2e2e200, 0x52525200, 0x9b9b9b00, 0xd8d8d800, 0x26262600, + 0xc8c8c800, 0x37373700, 0xc6c6c600, 0x3b3b3b00, 0x81818100, 0x96969600, + 0x6f6f6f00, 0x4b4b4b00, 0x13131300, 0xbebebe00, 0x63636300, 0x2e2e2e00, + 0xe9e9e900, 0x79797900, 0xa7a7a700, 0x8c8c8c00, 0x9f9f9f00, 0x6e6e6e00, + 0xbcbcbc00, 0x8e8e8e00, 0x29292900, 0xf5f5f500, 0xf9f9f900, 0xb6b6b600, + 0x2f2f2f00, 0xfdfdfd00, 0xb4b4b400, 0x59595900, 0x78787800, 0x98989800, + 0x06060600, 0x6a6a6a00, 0xe7e7e700, 0x46464600, 0x71717100, 0xbababa00, + 0xd4d4d400, 0x25252500, 0xababab00, 0x42424200, 0x88888800, 0xa2a2a200, + 0x8d8d8d00, 0xfafafa00, 0x72727200, 0x07070700, 0xb9b9b900, 0x55555500, + 0xf8f8f800, 0xeeeeee00, 0xacacac00, 0x0a0a0a00, 0x36363600, 0x49494900, + 0x2a2a2a00, 0x68686800, 0x3c3c3c00, 0x38383800, 0xf1f1f100, 0xa4a4a400, + 0x40404000, 0x28282800, 0xd3d3d300, 0x7b7b7b00, 0xbbbbbb00, 0xc9c9c900, + 0x43434300, 0xc1c1c100, 0x15151500, 0xe3e3e300, 0xadadad00, 0xf4f4f400, + 0x77777700, 0xc7c7c700, 0x80808000, 0x9e9e9e00 + }; + + private static readonly uint[] SBOX4_4404 = new uint[]{ + 0x70700070, 0x2c2c002c, 0xb3b300b3, 0xc0c000c0, 0xe4e400e4, 0x57570057, + 0xeaea00ea, 0xaeae00ae, 0x23230023, 0x6b6b006b, 0x45450045, 0xa5a500a5, + 0xeded00ed, 0x4f4f004f, 0x1d1d001d, 0x92920092, 0x86860086, 0xafaf00af, + 0x7c7c007c, 0x1f1f001f, 0x3e3e003e, 0xdcdc00dc, 0x5e5e005e, 0x0b0b000b, + 0xa6a600a6, 0x39390039, 0xd5d500d5, 0x5d5d005d, 0xd9d900d9, 0x5a5a005a, + 0x51510051, 0x6c6c006c, 0x8b8b008b, 0x9a9a009a, 0xfbfb00fb, 0xb0b000b0, + 0x74740074, 0x2b2b002b, 0xf0f000f0, 0x84840084, 0xdfdf00df, 0xcbcb00cb, + 0x34340034, 0x76760076, 0x6d6d006d, 0xa9a900a9, 0xd1d100d1, 0x04040004, + 0x14140014, 0x3a3a003a, 0xdede00de, 0x11110011, 0x32320032, 0x9c9c009c, + 0x53530053, 0xf2f200f2, 0xfefe00fe, 0xcfcf00cf, 0xc3c300c3, 0x7a7a007a, + 0x24240024, 0xe8e800e8, 0x60600060, 0x69690069, 0xaaaa00aa, 0xa0a000a0, + 0xa1a100a1, 0x62620062, 0x54540054, 0x1e1e001e, 0xe0e000e0, 0x64640064, + 0x10100010, 0x00000000, 0xa3a300a3, 0x75750075, 0x8a8a008a, 0xe6e600e6, + 0x09090009, 0xdddd00dd, 0x87870087, 0x83830083, 0xcdcd00cd, 0x90900090, + 0x73730073, 0xf6f600f6, 0x9d9d009d, 0xbfbf00bf, 0x52520052, 0xd8d800d8, + 0xc8c800c8, 0xc6c600c6, 0x81810081, 0x6f6f006f, 0x13130013, 0x63630063, + 0xe9e900e9, 0xa7a700a7, 0x9f9f009f, 0xbcbc00bc, 0x29290029, 0xf9f900f9, + 0x2f2f002f, 0xb4b400b4, 0x78780078, 0x06060006, 0xe7e700e7, 0x71710071, + 0xd4d400d4, 0xabab00ab, 0x88880088, 0x8d8d008d, 0x72720072, 0xb9b900b9, + 0xf8f800f8, 0xacac00ac, 0x36360036, 0x2a2a002a, 0x3c3c003c, 0xf1f100f1, + 0x40400040, 0xd3d300d3, 0xbbbb00bb, 0x43430043, 0x15150015, 0xadad00ad, + 0x77770077, 0x80800080, 0x82820082, 0xecec00ec, 0x27270027, 0xe5e500e5, + 0x85850085, 0x35350035, 0x0c0c000c, 0x41410041, 0xefef00ef, 0x93930093, + 0x19190019, 0x21210021, 0x0e0e000e, 0x4e4e004e, 0x65650065, 0xbdbd00bd, + 0xb8b800b8, 0x8f8f008f, 0xebeb00eb, 0xcece00ce, 0x30300030, 0x5f5f005f, + 0xc5c500c5, 0x1a1a001a, 0xe1e100e1, 0xcaca00ca, 0x47470047, 0x3d3d003d, + 0x01010001, 0xd6d600d6, 0x56560056, 0x4d4d004d, 0x0d0d000d, 0x66660066, + 0xcccc00cc, 0x2d2d002d, 0x12120012, 0x20200020, 0xb1b100b1, 0x99990099, + 0x4c4c004c, 0xc2c200c2, 0x7e7e007e, 0x05050005, 0xb7b700b7, 0x31310031, + 0x17170017, 0xd7d700d7, 0x58580058, 0x61610061, 0x1b1b001b, 0x1c1c001c, + 0x0f0f000f, 0x16160016, 0x18180018, 0x22220022, 0x44440044, 0xb2b200b2, + 0xb5b500b5, 0x91910091, 0x08080008, 0xa8a800a8, 0xfcfc00fc, 0x50500050, + 0xd0d000d0, 0x7d7d007d, 0x89890089, 0x97970097, 0x5b5b005b, 0x95950095, + 0xffff00ff, 0xd2d200d2, 0xc4c400c4, 0x48480048, 0xf7f700f7, 0xdbdb00db, + 0x03030003, 0xdada00da, 0x3f3f003f, 0x94940094, 0x5c5c005c, 0x02020002, + 0x4a4a004a, 0x33330033, 0x67670067, 0xf3f300f3, 0x7f7f007f, 0xe2e200e2, + 0x9b9b009b, 0x26260026, 0x37370037, 0x3b3b003b, 0x96960096, 0x4b4b004b, + 0xbebe00be, 0x2e2e002e, 0x79790079, 0x8c8c008c, 0x6e6e006e, 0x8e8e008e, + 0xf5f500f5, 0xb6b600b6, 0xfdfd00fd, 0x59590059, 0x98980098, 0x6a6a006a, + 0x46460046, 0xbaba00ba, 0x25250025, 0x42420042, 0xa2a200a2, 0xfafa00fa, + 0x07070007, 0x55550055, 0xeeee00ee, 0x0a0a000a, 0x49490049, 0x68680068, + 0x38380038, 0xa4a400a4, 0x28280028, 0x7b7b007b, 0xc9c900c9, 0xc1c100c1, + 0xe3e300e3, 0xf4f400f4, 0xc7c700c7, 0x9e9e009e + }; + + private static readonly uint[] SBOX2_0222 = new uint[]{ + 0x00e0e0e0, 0x00050505, 0x00585858, 0x00d9d9d9, 0x00676767, 0x004e4e4e, + 0x00818181, 0x00cbcbcb, 0x00c9c9c9, 0x000b0b0b, 0x00aeaeae, 0x006a6a6a, + 0x00d5d5d5, 0x00181818, 0x005d5d5d, 0x00828282, 0x00464646, 0x00dfdfdf, + 0x00d6d6d6, 0x00272727, 0x008a8a8a, 0x00323232, 0x004b4b4b, 0x00424242, + 0x00dbdbdb, 0x001c1c1c, 0x009e9e9e, 0x009c9c9c, 0x003a3a3a, 0x00cacaca, + 0x00252525, 0x007b7b7b, 0x000d0d0d, 0x00717171, 0x005f5f5f, 0x001f1f1f, + 0x00f8f8f8, 0x00d7d7d7, 0x003e3e3e, 0x009d9d9d, 0x007c7c7c, 0x00606060, + 0x00b9b9b9, 0x00bebebe, 0x00bcbcbc, 0x008b8b8b, 0x00161616, 0x00343434, + 0x004d4d4d, 0x00c3c3c3, 0x00727272, 0x00959595, 0x00ababab, 0x008e8e8e, + 0x00bababa, 0x007a7a7a, 0x00b3b3b3, 0x00020202, 0x00b4b4b4, 0x00adadad, + 0x00a2a2a2, 0x00acacac, 0x00d8d8d8, 0x009a9a9a, 0x00171717, 0x001a1a1a, + 0x00353535, 0x00cccccc, 0x00f7f7f7, 0x00999999, 0x00616161, 0x005a5a5a, + 0x00e8e8e8, 0x00242424, 0x00565656, 0x00404040, 0x00e1e1e1, 0x00636363, + 0x00090909, 0x00333333, 0x00bfbfbf, 0x00989898, 0x00979797, 0x00858585, + 0x00686868, 0x00fcfcfc, 0x00ececec, 0x000a0a0a, 0x00dadada, 0x006f6f6f, + 0x00535353, 0x00626262, 0x00a3a3a3, 0x002e2e2e, 0x00080808, 0x00afafaf, + 0x00282828, 0x00b0b0b0, 0x00747474, 0x00c2c2c2, 0x00bdbdbd, 0x00363636, + 0x00222222, 0x00383838, 0x00646464, 0x001e1e1e, 0x00393939, 0x002c2c2c, + 0x00a6a6a6, 0x00303030, 0x00e5e5e5, 0x00444444, 0x00fdfdfd, 0x00888888, + 0x009f9f9f, 0x00656565, 0x00878787, 0x006b6b6b, 0x00f4f4f4, 0x00232323, + 0x00484848, 0x00101010, 0x00d1d1d1, 0x00515151, 0x00c0c0c0, 0x00f9f9f9, + 0x00d2d2d2, 0x00a0a0a0, 0x00555555, 0x00a1a1a1, 0x00414141, 0x00fafafa, + 0x00434343, 0x00131313, 0x00c4c4c4, 0x002f2f2f, 0x00a8a8a8, 0x00b6b6b6, + 0x003c3c3c, 0x002b2b2b, 0x00c1c1c1, 0x00ffffff, 0x00c8c8c8, 0x00a5a5a5, + 0x00202020, 0x00898989, 0x00000000, 0x00909090, 0x00474747, 0x00efefef, + 0x00eaeaea, 0x00b7b7b7, 0x00151515, 0x00060606, 0x00cdcdcd, 0x00b5b5b5, + 0x00121212, 0x007e7e7e, 0x00bbbbbb, 0x00292929, 0x000f0f0f, 0x00b8b8b8, + 0x00070707, 0x00040404, 0x009b9b9b, 0x00949494, 0x00212121, 0x00666666, + 0x00e6e6e6, 0x00cecece, 0x00ededed, 0x00e7e7e7, 0x003b3b3b, 0x00fefefe, + 0x007f7f7f, 0x00c5c5c5, 0x00a4a4a4, 0x00373737, 0x00b1b1b1, 0x004c4c4c, + 0x00919191, 0x006e6e6e, 0x008d8d8d, 0x00767676, 0x00030303, 0x002d2d2d, + 0x00dedede, 0x00969696, 0x00262626, 0x007d7d7d, 0x00c6c6c6, 0x005c5c5c, + 0x00d3d3d3, 0x00f2f2f2, 0x004f4f4f, 0x00191919, 0x003f3f3f, 0x00dcdcdc, + 0x00797979, 0x001d1d1d, 0x00525252, 0x00ebebeb, 0x00f3f3f3, 0x006d6d6d, + 0x005e5e5e, 0x00fbfbfb, 0x00696969, 0x00b2b2b2, 0x00f0f0f0, 0x00313131, + 0x000c0c0c, 0x00d4d4d4, 0x00cfcfcf, 0x008c8c8c, 0x00e2e2e2, 0x00757575, + 0x00a9a9a9, 0x004a4a4a, 0x00575757, 0x00848484, 0x00111111, 0x00454545, + 0x001b1b1b, 0x00f5f5f5, 0x00e4e4e4, 0x000e0e0e, 0x00737373, 0x00aaaaaa, + 0x00f1f1f1, 0x00dddddd, 0x00595959, 0x00141414, 0x006c6c6c, 0x00929292, + 0x00545454, 0x00d0d0d0, 0x00787878, 0x00707070, 0x00e3e3e3, 0x00494949, + 0x00808080, 0x00505050, 0x00a7a7a7, 0x00f6f6f6, 0x00777777, 0x00939393, + 0x00868686, 0x00838383, 0x002a2a2a, 0x00c7c7c7, 0x005b5b5b, 0x00e9e9e9, + 0x00eeeeee, 0x008f8f8f, 0x00010101, 0x003d3d3d + }; + + private static readonly uint[] SBOX3_3033 = new uint[]{ + 0x38003838, 0x41004141, 0x16001616, 0x76007676, 0xd900d9d9, 0x93009393, + 0x60006060, 0xf200f2f2, 0x72007272, 0xc200c2c2, 0xab00abab, 0x9a009a9a, + 0x75007575, 0x06000606, 0x57005757, 0xa000a0a0, 0x91009191, 0xf700f7f7, + 0xb500b5b5, 0xc900c9c9, 0xa200a2a2, 0x8c008c8c, 0xd200d2d2, 0x90009090, + 0xf600f6f6, 0x07000707, 0xa700a7a7, 0x27002727, 0x8e008e8e, 0xb200b2b2, + 0x49004949, 0xde00dede, 0x43004343, 0x5c005c5c, 0xd700d7d7, 0xc700c7c7, + 0x3e003e3e, 0xf500f5f5, 0x8f008f8f, 0x67006767, 0x1f001f1f, 0x18001818, + 0x6e006e6e, 0xaf00afaf, 0x2f002f2f, 0xe200e2e2, 0x85008585, 0x0d000d0d, + 0x53005353, 0xf000f0f0, 0x9c009c9c, 0x65006565, 0xea00eaea, 0xa300a3a3, + 0xae00aeae, 0x9e009e9e, 0xec00ecec, 0x80008080, 0x2d002d2d, 0x6b006b6b, + 0xa800a8a8, 0x2b002b2b, 0x36003636, 0xa600a6a6, 0xc500c5c5, 0x86008686, + 0x4d004d4d, 0x33003333, 0xfd00fdfd, 0x66006666, 0x58005858, 0x96009696, + 0x3a003a3a, 0x09000909, 0x95009595, 0x10001010, 0x78007878, 0xd800d8d8, + 0x42004242, 0xcc00cccc, 0xef00efef, 0x26002626, 0xe500e5e5, 0x61006161, + 0x1a001a1a, 0x3f003f3f, 0x3b003b3b, 0x82008282, 0xb600b6b6, 0xdb00dbdb, + 0xd400d4d4, 0x98009898, 0xe800e8e8, 0x8b008b8b, 0x02000202, 0xeb00ebeb, + 0x0a000a0a, 0x2c002c2c, 0x1d001d1d, 0xb000b0b0, 0x6f006f6f, 0x8d008d8d, + 0x88008888, 0x0e000e0e, 0x19001919, 0x87008787, 0x4e004e4e, 0x0b000b0b, + 0xa900a9a9, 0x0c000c0c, 0x79007979, 0x11001111, 0x7f007f7f, 0x22002222, + 0xe700e7e7, 0x59005959, 0xe100e1e1, 0xda00dada, 0x3d003d3d, 0xc800c8c8, + 0x12001212, 0x04000404, 0x74007474, 0x54005454, 0x30003030, 0x7e007e7e, + 0xb400b4b4, 0x28002828, 0x55005555, 0x68006868, 0x50005050, 0xbe00bebe, + 0xd000d0d0, 0xc400c4c4, 0x31003131, 0xcb00cbcb, 0x2a002a2a, 0xad00adad, + 0x0f000f0f, 0xca00caca, 0x70007070, 0xff00ffff, 0x32003232, 0x69006969, + 0x08000808, 0x62006262, 0x00000000, 0x24002424, 0xd100d1d1, 0xfb00fbfb, + 0xba00baba, 0xed00eded, 0x45004545, 0x81008181, 0x73007373, 0x6d006d6d, + 0x84008484, 0x9f009f9f, 0xee00eeee, 0x4a004a4a, 0xc300c3c3, 0x2e002e2e, + 0xc100c1c1, 0x01000101, 0xe600e6e6, 0x25002525, 0x48004848, 0x99009999, + 0xb900b9b9, 0xb300b3b3, 0x7b007b7b, 0xf900f9f9, 0xce00cece, 0xbf00bfbf, + 0xdf00dfdf, 0x71007171, 0x29002929, 0xcd00cdcd, 0x6c006c6c, 0x13001313, + 0x64006464, 0x9b009b9b, 0x63006363, 0x9d009d9d, 0xc000c0c0, 0x4b004b4b, + 0xb700b7b7, 0xa500a5a5, 0x89008989, 0x5f005f5f, 0xb100b1b1, 0x17001717, + 0xf400f4f4, 0xbc00bcbc, 0xd300d3d3, 0x46004646, 0xcf00cfcf, 0x37003737, + 0x5e005e5e, 0x47004747, 0x94009494, 0xfa00fafa, 0xfc00fcfc, 0x5b005b5b, + 0x97009797, 0xfe00fefe, 0x5a005a5a, 0xac00acac, 0x3c003c3c, 0x4c004c4c, + 0x03000303, 0x35003535, 0xf300f3f3, 0x23002323, 0xb800b8b8, 0x5d005d5d, + 0x6a006a6a, 0x92009292, 0xd500d5d5, 0x21002121, 0x44004444, 0x51005151, + 0xc600c6c6, 0x7d007d7d, 0x39003939, 0x83008383, 0xdc00dcdc, 0xaa00aaaa, + 0x7c007c7c, 0x77007777, 0x56005656, 0x05000505, 0x1b001b1b, 0xa400a4a4, + 0x15001515, 0x34003434, 0x1e001e1e, 0x1c001c1c, 0xf800f8f8, 0x52005252, + 0x20002020, 0x14001414, 0xe900e9e9, 0xbd00bdbd, 0xdd00dddd, 0xe400e4e4, + 0xa100a1a1, 0xe000e0e0, 0x8a008a8a, 0xf100f1f1, 0xd600d6d6, 0x7a007a7a, + 0xbb00bbbb, 0xe300e3e3, 0x40004040, 0x4f004f4f + }; + + private static uint rightRotate(uint x, int s) + { + return ((x >> s) + (x << (32 - s))); + } + + private static uint leftRotate(uint x, int s) + { + return (x << s) + (x >> (32 - s)); + } + + private static void roldq(int rot, uint[] ki, int ioff, uint[] ko, int ooff) + { + ko[0 + ooff] = (ki[0 + ioff] << rot) | (ki[1 + ioff] >> (32 - rot)); + ko[1 + ooff] = (ki[1 + ioff] << rot) | (ki[2 + ioff] >> (32 - rot)); + ko[2 + ooff] = (ki[2 + ioff] << rot) | (ki[3 + ioff] >> (32 - rot)); + ko[3 + ooff] = (ki[3 + ioff] << rot) | (ki[0 + ioff] >> (32 - rot)); + ki[0 + ioff] = ko[0 + ooff]; + ki[1 + ioff] = ko[1 + ooff]; + ki[2 + ioff] = ko[2 + ooff]; + ki[3 + ioff] = ko[3 + ooff]; + } + + private static void decroldq(int rot, uint[] ki, int ioff, uint[] ko, int ooff) + { + ko[2 + ooff] = (ki[0 + ioff] << rot) | (ki[1 + ioff] >> (32 - rot)); + ko[3 + ooff] = (ki[1 + ioff] << rot) | (ki[2 + ioff] >> (32 - rot)); + ko[0 + ooff] = (ki[2 + ioff] << rot) | (ki[3 + ioff] >> (32 - rot)); + ko[1 + ooff] = (ki[3 + ioff] << rot) | (ki[0 + ioff] >> (32 - rot)); + ki[0 + ioff] = ko[2 + ooff]; + ki[1 + ioff] = ko[3 + ooff]; + ki[2 + ioff] = ko[0 + ooff]; + ki[3 + ioff] = ko[1 + ooff]; + } + + private static void roldqo32(int rot, uint[] ki, int ioff, uint[] ko, int ooff) + { + ko[0 + ooff] = (ki[1 + ioff] << (rot - 32)) | (ki[2 + ioff] >> (64 - rot)); + ko[1 + ooff] = (ki[2 + ioff] << (rot - 32)) | (ki[3 + ioff] >> (64 - rot)); + ko[2 + ooff] = (ki[3 + ioff] << (rot - 32)) | (ki[0 + ioff] >> (64 - rot)); + ko[3 + ooff] = (ki[0 + ioff] << (rot - 32)) | (ki[1 + ioff] >> (64 - rot)); + ki[0 + ioff] = ko[0 + ooff]; + ki[1 + ioff] = ko[1 + ooff]; + ki[2 + ioff] = ko[2 + ooff]; + ki[3 + ioff] = ko[3 + ooff]; + } + + private static void decroldqo32(int rot, uint[] ki, int ioff, uint[] ko, int ooff) + { + ko[2 + ooff] = (ki[1 + ioff] << (rot - 32)) | (ki[2 + ioff] >> (64 - rot)); + ko[3 + ooff] = (ki[2 + ioff] << (rot - 32)) | (ki[3 + ioff] >> (64 - rot)); + ko[0 + ooff] = (ki[3 + ioff] << (rot - 32)) | (ki[0 + ioff] >> (64 - rot)); + ko[1 + ooff] = (ki[0 + ioff] << (rot - 32)) | (ki[1 + ioff] >> (64 - rot)); + ki[0 + ioff] = ko[2 + ooff]; + ki[1 + ioff] = ko[3 + ooff]; + ki[2 + ioff] = ko[0 + ooff]; + ki[3 + ioff] = ko[1 + ooff]; + } + + private static void camelliaF2(uint[] s, uint[] skey, int keyoff) + { + uint t1, t2, u, v; + + t1 = s[0] ^ skey[0 + keyoff]; + u = SBOX4_4404[(byte)t1]; + u ^= SBOX3_3033[(byte)(t1 >> 8)]; + u ^= SBOX2_0222[(byte)(t1 >> 16)]; + u ^= SBOX1_1110[(byte)(t1 >> 24)]; + t2 = s[1] ^ skey[1 + keyoff]; + v = SBOX1_1110[(byte)t2]; + v ^= SBOX4_4404[(byte)(t2 >> 8)]; + v ^= SBOX3_3033[(byte)(t2 >> 16)]; + v ^= SBOX2_0222[(byte)(t2 >> 24)]; + + s[2] ^= u ^ v; + s[3] ^= u ^ v ^ rightRotate(u, 8); + + t1 = s[2] ^ skey[2 + keyoff]; + u = SBOX4_4404[(byte)t1]; + u ^= SBOX3_3033[(byte)(t1 >> 8)]; + u ^= SBOX2_0222[(byte)(t1 >> 16)]; + u ^= SBOX1_1110[(byte)(t1 >> 24)]; + t2 = s[3] ^ skey[3 + keyoff]; + v = SBOX1_1110[(byte)t2]; + v ^= SBOX4_4404[(byte)(t2 >> 8)]; + v ^= SBOX3_3033[(byte)(t2 >> 16)]; + v ^= SBOX2_0222[(byte)(t2 >> 24)]; + + s[0] ^= u ^ v; + s[1] ^= u ^ v ^ rightRotate(u, 8); + } + + private static void camelliaFLs(uint[] s, uint[] fkey, int keyoff) + { + + s[1] ^= leftRotate(s[0] & fkey[0 + keyoff], 1); + s[0] ^= fkey[1 + keyoff] | s[1]; + + s[2] ^= fkey[3 + keyoff] | s[3]; + s[3] ^= leftRotate(fkey[2 + keyoff] & s[2], 1); + } + + private void setKey(bool forEncryption, byte[] key) + { + uint[] k = new uint[8]; + uint[] ka = new uint[4]; + uint[] kb = new uint[4]; + uint[] t = new uint[4]; + + switch (key.Length) + { + case 16: + _keyIs128 = true; + Pack.BE_To_UInt32(key, 0, k, 0, 4); + k[4] = k[5] = k[6] = k[7] = 0; + break; + case 24: + Pack.BE_To_UInt32(key, 0, k, 0, 6); + k[6] = ~k[4]; + k[7] = ~k[5]; + _keyIs128 = false; + break; + case 32: + Pack.BE_To_UInt32(key, 0, k, 0, 8); + _keyIs128 = false; + break; + default: + throw new ArgumentException("key sizes are only 16/24/32 bytes."); + } + + for (int i = 0; i < 4; i++) + { + ka[i] = k[i] ^ k[i + 4]; + } + /* compute KA */ + camelliaF2(ka, SIGMA, 0); + for (int i = 0; i < 4; i++) + { + ka[i] ^= k[i]; + } + camelliaF2(ka, SIGMA, 4); + + if (_keyIs128) + { + if (forEncryption) + { + /* KL dependant keys */ + kw[0] = k[0]; + kw[1] = k[1]; + kw[2] = k[2]; + kw[3] = k[3]; + roldq(15, k, 0, subkey, 4); + roldq(30, k, 0, subkey, 12); + roldq(15, k, 0, t, 0); + subkey[18] = t[2]; + subkey[19] = t[3]; + roldq(17, k, 0, ke, 4); + roldq(17, k, 0, subkey, 24); + roldq(17, k, 0, subkey, 32); + /* KA dependant keys */ + subkey[0] = ka[0]; + subkey[1] = ka[1]; + subkey[2] = ka[2]; + subkey[3] = ka[3]; + roldq(15, ka, 0, subkey, 8); + roldq(15, ka, 0, ke, 0); + roldq(15, ka, 0, t, 0); + subkey[16] = t[0]; + subkey[17] = t[1]; + roldq(15, ka, 0, subkey, 20); + roldqo32(34, ka, 0, subkey, 28); + roldq(17, ka, 0, kw, 4); + + } + else + { // decryption + /* KL dependant keys */ + kw[4] = k[0]; + kw[5] = k[1]; + kw[6] = k[2]; + kw[7] = k[3]; + decroldq(15, k, 0, subkey, 28); + decroldq(30, k, 0, subkey, 20); + decroldq(15, k, 0, t, 0); + subkey[16] = t[0]; + subkey[17] = t[1]; + decroldq(17, k, 0, ke, 0); + decroldq(17, k, 0, subkey, 8); + decroldq(17, k, 0, subkey, 0); + /* KA dependant keys */ + subkey[34] = ka[0]; + subkey[35] = ka[1]; + subkey[32] = ka[2]; + subkey[33] = ka[3]; + decroldq(15, ka, 0, subkey, 24); + decroldq(15, ka, 0, ke, 4); + decroldq(15, ka, 0, t, 0); + subkey[18] = t[2]; + subkey[19] = t[3]; + decroldq(15, ka, 0, subkey, 12); + decroldqo32(34, ka, 0, subkey, 4); + roldq(17, ka, 0, kw, 0); + } + } + else + { // 192bit or 256bit + /* compute KB */ + for (int i = 0; i < 4; i++) + { + kb[i] = ka[i] ^ k[i + 4]; + } + camelliaF2(kb, SIGMA, 8); + + if (forEncryption) + { + /* KL dependant keys */ + kw[0] = k[0]; + kw[1] = k[1]; + kw[2] = k[2]; + kw[3] = k[3]; + roldqo32(45, k, 0, subkey, 16); + roldq(15, k, 0, ke, 4); + roldq(17, k, 0, subkey, 32); + roldqo32(34, k, 0, subkey, 44); + /* KR dependant keys */ + roldq(15, k, 4, subkey, 4); + roldq(15, k, 4, ke, 0); + roldq(30, k, 4, subkey, 24); + roldqo32(34, k, 4, subkey, 36); + /* KA dependant keys */ + roldq(15, ka, 0, subkey, 8); + roldq(30, ka, 0, subkey, 20); + /* 32bit rotation */ + ke[8] = ka[1]; + ke[9] = ka[2]; + ke[10] = ka[3]; + ke[11] = ka[0]; + roldqo32(49, ka, 0, subkey, 40); + + /* KB dependant keys */ + subkey[0] = kb[0]; + subkey[1] = kb[1]; + subkey[2] = kb[2]; + subkey[3] = kb[3]; + roldq(30, kb, 0, subkey, 12); + roldq(30, kb, 0, subkey, 28); + roldqo32(51, kb, 0, kw, 4); + + } + else + { // decryption + /* KL dependant keys */ + kw[4] = k[0]; + kw[5] = k[1]; + kw[6] = k[2]; + kw[7] = k[3]; + decroldqo32(45, k, 0, subkey, 28); + decroldq(15, k, 0, ke, 4); + decroldq(17, k, 0, subkey, 12); + decroldqo32(34, k, 0, subkey, 0); + /* KR dependant keys */ + decroldq(15, k, 4, subkey, 40); + decroldq(15, k, 4, ke, 8); + decroldq(30, k, 4, subkey, 20); + decroldqo32(34, k, 4, subkey, 8); + /* KA dependant keys */ + decroldq(15, ka, 0, subkey, 36); + decroldq(30, ka, 0, subkey, 24); + /* 32bit rotation */ + ke[2] = ka[1]; + ke[3] = ka[2]; + ke[0] = ka[3]; + ke[1] = ka[0]; + decroldqo32(49, ka, 0, subkey, 4); + + /* KB dependant keys */ + subkey[46] = kb[0]; + subkey[47] = kb[1]; + subkey[44] = kb[2]; + subkey[45] = kb[3]; + decroldq(30, kb, 0, subkey, 32); + decroldq(30, kb, 0, subkey, 16); + roldqo32(51, kb, 0, kw, 0); + } + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int ProcessBlock128(ReadOnlySpan input, Span output) + { + uint[] state = new uint[4]; + Pack.BE_To_UInt32(input, state); + + state[0] ^= kw[0]; + state[1] ^= kw[1]; + state[2] ^= kw[2]; + state[3] ^= kw[3]; + + camelliaF2(state, subkey, 0); + camelliaF2(state, subkey, 4); + camelliaF2(state, subkey, 8); + camelliaFLs(state, ke, 0); + camelliaF2(state, subkey, 12); + camelliaF2(state, subkey, 16); + camelliaF2(state, subkey, 20); + camelliaFLs(state, ke, 4); + camelliaF2(state, subkey, 24); + camelliaF2(state, subkey, 28); + camelliaF2(state, subkey, 32); + + Pack.UInt32_To_BE(state[2] ^ kw[4], output); + Pack.UInt32_To_BE(state[3] ^ kw[5], output[4..]); + Pack.UInt32_To_BE(state[0] ^ kw[6], output[8..]); + Pack.UInt32_To_BE(state[1] ^ kw[7], output[12..]); + + return BLOCK_SIZE; + } + + private int ProcessBlock192or256(ReadOnlySpan input, Span output) + { + uint[] state = new uint[4]; + Pack.BE_To_UInt32(input, state); + + state[0] ^= kw[0]; + state[1] ^= kw[1]; + state[2] ^= kw[2]; + state[3] ^= kw[3]; + + camelliaF2(state, subkey, 0); + camelliaF2(state, subkey, 4); + camelliaF2(state, subkey, 8); + camelliaFLs(state, ke, 0); + camelliaF2(state, subkey, 12); + camelliaF2(state, subkey, 16); + camelliaF2(state, subkey, 20); + camelliaFLs(state, ke, 4); + camelliaF2(state, subkey, 24); + camelliaF2(state, subkey, 28); + camelliaF2(state, subkey, 32); + camelliaFLs(state, ke, 8); + camelliaF2(state, subkey, 36); + camelliaF2(state, subkey, 40); + camelliaF2(state, subkey, 44); + + Pack.UInt32_To_BE(state[2] ^ kw[4], output); + Pack.UInt32_To_BE(state[3] ^ kw[5], output[4..]); + Pack.UInt32_To_BE(state[0] ^ kw[6], output[8..]); + Pack.UInt32_To_BE(state[1] ^ kw[7], output[12..]); + + return BLOCK_SIZE; + } +#else + private int ProcessBlock128(byte[] input, int inOff, byte[] output, int outOff) + { + uint[] state = new uint[4]; + + for (int i = 0; i < 4; i++) + { + state[i] = Pack.BE_To_UInt32(input, inOff + (i * 4)) ^ kw[i]; + } + + camelliaF2(state, subkey, 0); + camelliaF2(state, subkey, 4); + camelliaF2(state, subkey, 8); + camelliaFLs(state, ke, 0); + camelliaF2(state, subkey, 12); + camelliaF2(state, subkey, 16); + camelliaF2(state, subkey, 20); + camelliaFLs(state, ke, 4); + camelliaF2(state, subkey, 24); + camelliaF2(state, subkey, 28); + camelliaF2(state, subkey, 32); + + Pack.UInt32_To_BE(state[2] ^ kw[4], output, outOff); + Pack.UInt32_To_BE(state[3] ^ kw[5], output, outOff + 4); + Pack.UInt32_To_BE(state[0] ^ kw[6], output, outOff + 8); + Pack.UInt32_To_BE(state[1] ^ kw[7], output, outOff + 12); + + return BLOCK_SIZE; + } + + private int ProcessBlock192or256(byte[] input, int inOff, byte[] output, int outOff) + { + uint[] state = new uint[4]; + + for (int i = 0; i < 4; i++) + { + state[i] = Pack.BE_To_UInt32(input, inOff + (i * 4)) ^ kw[i]; + } + + camelliaF2(state, subkey, 0); + camelliaF2(state, subkey, 4); + camelliaF2(state, subkey, 8); + camelliaFLs(state, ke, 0); + camelliaF2(state, subkey, 12); + camelliaF2(state, subkey, 16); + camelliaF2(state, subkey, 20); + camelliaFLs(state, ke, 4); + camelliaF2(state, subkey, 24); + camelliaF2(state, subkey, 28); + camelliaF2(state, subkey, 32); + camelliaFLs(state, ke, 8); + camelliaF2(state, subkey, 36); + camelliaF2(state, subkey, 40); + camelliaF2(state, subkey, 44); + + Pack.UInt32_To_BE(state[2] ^ kw[4], output, outOff); + Pack.UInt32_To_BE(state[3] ^ kw[5], output, outOff + 4); + Pack.UInt32_To_BE(state[0] ^ kw[6], output, outOff + 8); + Pack.UInt32_To_BE(state[1] ^ kw[7], output, outOff + 12); + + return BLOCK_SIZE; + } +#endif + + public CamelliaEngine() + { + } + + public virtual void Init( + bool forEncryption, + ICipherParameters parameters) + { + if (!(parameters is KeyParameter)) + throw new ArgumentException("only simple KeyParameter expected."); + + setKey(forEncryption, ((KeyParameter)parameters).GetKey()); + + initialised = true; + } + + public virtual string AlgorithmName + { + get { return "Camellia"; } + } + + public virtual int GetBlockSize() + { + return BLOCK_SIZE; + } + + public virtual int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (!initialised) + throw new InvalidOperationException("Camellia engine not initialised"); + + Check.DataLength(input, inOff, BLOCK_SIZE, "input buffer too short"); + Check.OutputLength(output, outOff, BLOCK_SIZE, "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + if (_keyIs128) + { + return ProcessBlock128(input.AsSpan(inOff), output.AsSpan(outOff)); + } + else + { + return ProcessBlock192or256(input.AsSpan(inOff), output.AsSpan(outOff)); + } +#else + if (_keyIs128) + { + return ProcessBlock128(input, inOff, output, outOff); + } + else + { + return ProcessBlock192or256(input, inOff, output, outOff); + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + if (!initialised) + throw new InvalidOperationException("Camellia engine not initialised"); + + Check.DataLength(input, BLOCK_SIZE, "input buffer too short"); + Check.OutputLength(output, BLOCK_SIZE, "output buffer too short"); + + if (_keyIs128) + { + return ProcessBlock128(input, output); + } + else + { + return ProcessBlock192or256(input, output); + } + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/CamelliaEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/CamelliaEngine.cs.meta new file mode 100644 index 000000000..a9d76d739 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/CamelliaEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f140d1eda7db7a44a1f175275ecc0f5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/CamelliaLightEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/CamelliaLightEngine.cs new file mode 100644 index 000000000..3f84723df --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/CamelliaLightEngine.cs @@ -0,0 +1,627 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * Camellia - based on RFC 3713, smaller implementation, about half the size of CamelliaEngine. + */ + public class CamelliaLightEngine + : IBlockCipher + { + private const int BLOCK_SIZE = 16; +// private const int MASK8 = 0xff; + private bool initialised; + private bool _keyis128; + + private uint[] subkey = new uint[24 * 4]; + private uint[] kw = new uint[4 * 2]; // for whitening + private uint[] ke = new uint[6 * 2]; // for FL and FL^(-1) + + private static readonly uint[] SIGMA = { + 0xa09e667f, 0x3bcc908b, + 0xb67ae858, 0x4caa73b2, + 0xc6ef372f, 0xe94f82be, + 0x54ff53a5, 0xf1d36f1c, + 0x10e527fa, 0xde682d1d, + 0xb05688c2, 0xb3e6c1fd + }; + + /* + * + * S-box data + * + */ + private static readonly byte[] SBOX1 = { + (byte)112, (byte)130, (byte)44, (byte)236, + (byte)179, (byte)39, (byte)192, (byte)229, + (byte)228, (byte)133, (byte)87, (byte)53, + (byte)234, (byte)12, (byte)174, (byte)65, + (byte)35, (byte)239, (byte)107, (byte)147, + (byte)69, (byte)25, (byte)165, (byte)33, + (byte)237, (byte)14, (byte)79, (byte)78, + (byte)29, (byte)101, (byte)146, (byte)189, + (byte)134, (byte)184, (byte)175, (byte)143, + (byte)124, (byte)235, (byte)31, (byte)206, + (byte)62, (byte)48, (byte)220, (byte)95, + (byte)94, (byte)197, (byte)11, (byte)26, + (byte)166, (byte)225, (byte)57, (byte)202, + (byte)213, (byte)71, (byte)93, (byte)61, + (byte)217, (byte)1, (byte)90, (byte)214, + (byte)81, (byte)86, (byte)108, (byte)77, + (byte)139, (byte)13, (byte)154, (byte)102, + (byte)251, (byte)204, (byte)176, (byte)45, + (byte)116, (byte)18, (byte)43, (byte)32, + (byte)240, (byte)177, (byte)132, (byte)153, + (byte)223, (byte)76, (byte)203, (byte)194, + (byte)52, (byte)126, (byte)118, (byte)5, + (byte)109, (byte)183, (byte)169, (byte)49, + (byte)209, (byte)23, (byte)4, (byte)215, + (byte)20, (byte)88, (byte)58, (byte)97, + (byte)222, (byte)27, (byte)17, (byte)28, + (byte)50, (byte)15, (byte)156, (byte)22, + (byte)83, (byte)24, (byte)242, (byte)34, + (byte)254, (byte)68, (byte)207, (byte)178, + (byte)195, (byte)181, (byte)122, (byte)145, + (byte)36, (byte)8, (byte)232, (byte)168, + (byte)96, (byte)252, (byte)105, (byte)80, + (byte)170, (byte)208, (byte)160, (byte)125, + (byte)161, (byte)137, (byte)98, (byte)151, + (byte)84, (byte)91, (byte)30, (byte)149, + (byte)224, (byte)255, (byte)100, (byte)210, + (byte)16, (byte)196, (byte)0, (byte)72, + (byte)163, (byte)247, (byte)117, (byte)219, + (byte)138, (byte)3, (byte)230, (byte)218, + (byte)9, (byte)63, (byte)221, (byte)148, + (byte)135, (byte)92, (byte)131, (byte)2, + (byte)205, (byte)74, (byte)144, (byte)51, + (byte)115, (byte)103, (byte)246, (byte)243, + (byte)157, (byte)127, (byte)191, (byte)226, + (byte)82, (byte)155, (byte)216, (byte)38, + (byte)200, (byte)55, (byte)198, (byte)59, + (byte)129, (byte)150, (byte)111, (byte)75, + (byte)19, (byte)190, (byte)99, (byte)46, + (byte)233, (byte)121, (byte)167, (byte)140, + (byte)159, (byte)110, (byte)188, (byte)142, + (byte)41, (byte)245, (byte)249, (byte)182, + (byte)47, (byte)253, (byte)180, (byte)89, + (byte)120, (byte)152, (byte)6, (byte)106, + (byte)231, (byte)70, (byte)113, (byte)186, + (byte)212, (byte)37, (byte)171, (byte)66, + (byte)136, (byte)162, (byte)141, (byte)250, + (byte)114, (byte)7, (byte)185, (byte)85, + (byte)248, (byte)238, (byte)172, (byte)10, + (byte)54, (byte)73, (byte)42, (byte)104, + (byte)60, (byte)56, (byte)241, (byte)164, + (byte)64, (byte)40, (byte)211, (byte)123, + (byte)187, (byte)201, (byte)67, (byte)193, + (byte)21, (byte)227, (byte)173, (byte)244, + (byte)119, (byte)199, (byte)128, (byte)158 + }; + + private static uint rightRotate(uint x, int s) + { + return ((x >> s) + (x << (32 - s))); + } + + private static uint leftRotate(uint x, int s) + { + return (x << s) + (x >> (32 - s)); + } + + private static void roldq(int rot, uint[] ki, int ioff, uint[] ko, int ooff) + { + ko[0 + ooff] = (ki[0 + ioff] << rot) | (ki[1 + ioff] >> (32 - rot)); + ko[1 + ooff] = (ki[1 + ioff] << rot) | (ki[2 + ioff] >> (32 - rot)); + ko[2 + ooff] = (ki[2 + ioff] << rot) | (ki[3 + ioff] >> (32 - rot)); + ko[3 + ooff] = (ki[3 + ioff] << rot) | (ki[0 + ioff] >> (32 - rot)); + ki[0 + ioff] = ko[0 + ooff]; + ki[1 + ioff] = ko[1 + ooff]; + ki[2 + ioff] = ko[2 + ooff]; + ki[3 + ioff] = ko[3 + ooff]; + } + + private static void decroldq(int rot, uint[] ki, int ioff, uint[] ko, int ooff) + { + ko[2 + ooff] = (ki[0 + ioff] << rot) | (ki[1 + ioff] >> (32 - rot)); + ko[3 + ooff] = (ki[1 + ioff] << rot) | (ki[2 + ioff] >> (32 - rot)); + ko[0 + ooff] = (ki[2 + ioff] << rot) | (ki[3 + ioff] >> (32 - rot)); + ko[1 + ooff] = (ki[3 + ioff] << rot) | (ki[0 + ioff] >> (32 - rot)); + ki[0 + ioff] = ko[2 + ooff]; + ki[1 + ioff] = ko[3 + ooff]; + ki[2 + ioff] = ko[0 + ooff]; + ki[3 + ioff] = ko[1 + ooff]; + } + + private static void roldqo32(int rot, uint[] ki, int ioff, uint[] ko, int ooff) + { + ko[0 + ooff] = (ki[1 + ioff] << (rot - 32)) | (ki[2 + ioff] >> (64 - rot)); + ko[1 + ooff] = (ki[2 + ioff] << (rot - 32)) | (ki[3 + ioff] >> (64 - rot)); + ko[2 + ooff] = (ki[3 + ioff] << (rot - 32)) | (ki[0 + ioff] >> (64 - rot)); + ko[3 + ooff] = (ki[0 + ioff] << (rot - 32)) | (ki[1 + ioff] >> (64 - rot)); + ki[0 + ioff] = ko[0 + ooff]; + ki[1 + ioff] = ko[1 + ooff]; + ki[2 + ioff] = ko[2 + ooff]; + ki[3 + ioff] = ko[3 + ooff]; + } + + private static void decroldqo32(int rot, uint[] ki, int ioff, uint[] ko, int ooff) + { + ko[2 + ooff] = (ki[1 + ioff] << (rot - 32)) | (ki[2 + ioff] >> (64 - rot)); + ko[3 + ooff] = (ki[2 + ioff] << (rot - 32)) | (ki[3 + ioff] >> (64 - rot)); + ko[0 + ooff] = (ki[3 + ioff] << (rot - 32)) | (ki[0 + ioff] >> (64 - rot)); + ko[1 + ooff] = (ki[0 + ioff] << (rot - 32)) | (ki[1 + ioff] >> (64 - rot)); + ki[0 + ioff] = ko[2 + ooff]; + ki[1 + ioff] = ko[3 + ooff]; + ki[2 + ioff] = ko[0 + ooff]; + ki[3 + ioff] = ko[1 + ooff]; + } + + private byte lRot8(byte v, int rot) + { + return (byte)(((uint)v << rot) | ((uint)v >> (8 - rot))); + } + + private uint sbox2(int x) + { + return (uint)lRot8(SBOX1[x], 1); + } + + private uint sbox3(int x) + { + return (uint)lRot8(SBOX1[x], 7); + } + + private uint sbox4(int x) + { + return (uint)SBOX1[lRot8((byte)x, 1)]; + } + + private void camelliaF2(uint[] s, uint[] skey, int keyoff) + { + uint t1, t2, u, v; + + t1 = s[0] ^ skey[0 + keyoff]; + u = sbox4((byte)t1); + u |= (sbox3((byte)(t1 >> 8)) << 8); + u |= (sbox2((byte)(t1 >> 16)) << 16); + u |= ((uint)(SBOX1[(byte)(t1 >> 24)]) << 24); + + t2 = s[1] ^ skey[1 + keyoff]; + v = (uint)SBOX1[(byte)t2]; + v |= (sbox4((byte)(t2 >> 8)) << 8); + v |= (sbox3((byte)(t2 >> 16)) << 16); + v |= (sbox2((byte)(t2 >> 24)) << 24); + + v = leftRotate(v, 8); + u ^= v; + v = leftRotate(v, 8) ^ u; + u = rightRotate(u, 8) ^ v; + s[2] ^= leftRotate(v, 16) ^ u; + s[3] ^= leftRotate(u, 8); + + t1 = s[2] ^ skey[2 + keyoff]; + u = sbox4((byte)t1); + u |= sbox3((byte)(t1 >> 8)) << 8; + u |= sbox2((byte)(t1 >> 16)) << 16; + u |= ((uint)SBOX1[(byte)(t1 >> 24)]) << 24; + + t2 = s[3] ^ skey[3 + keyoff]; + v = (uint)SBOX1[(byte)t2]; + v |= sbox4((byte)(t2 >> 8)) << 8; + v |= sbox3((byte)(t2 >> 16)) << 16; + v |= sbox2((byte)(t2 >> 24)) << 24; + + v = leftRotate(v, 8); + u ^= v; + v = leftRotate(v, 8) ^ u; + u = rightRotate(u, 8) ^ v; + s[0] ^= leftRotate(v, 16) ^ u; + s[1] ^= leftRotate(u, 8); + } + + private void camelliaFLs(uint[] s, uint[] fkey, int keyoff) + { + s[1] ^= leftRotate(s[0] & fkey[0 + keyoff], 1); + s[0] ^= fkey[1 + keyoff] | s[1]; + + s[2] ^= fkey[3 + keyoff] | s[3]; + s[3] ^= leftRotate(fkey[2 + keyoff] & s[2], 1); + } + + private void setKey(bool forEncryption, byte[] key) + { + uint[] k = new uint[8]; + uint[] ka = new uint[4]; + uint[] kb = new uint[4]; + uint[] t = new uint[4]; + + switch (key.Length) + { + case 16: + _keyis128 = true; + Pack.BE_To_UInt32(key, 0, k, 0, 4); + k[4] = k[5] = k[6] = k[7] = 0; + break; + case 24: + Pack.BE_To_UInt32(key, 0, k, 0, 6); + k[6] = ~k[4]; + k[7] = ~k[5]; + _keyis128 = false; + break; + case 32: + Pack.BE_To_UInt32(key, 0, k, 0, 8); + _keyis128 = false; + break; + default: + throw new ArgumentException("key sizes are only 16/24/32 bytes."); + } + + for (int i = 0; i < 4; i++) + { + ka[i] = k[i] ^ k[i + 4]; + } + /* compute KA */ + camelliaF2(ka, SIGMA, 0); + for (int i = 0; i < 4; i++) + { + ka[i] ^= k[i]; + } + camelliaF2(ka, SIGMA, 4); + + if (_keyis128) + { + if (forEncryption) + { + /* KL dependant keys */ + kw[0] = k[0]; + kw[1] = k[1]; + kw[2] = k[2]; + kw[3] = k[3]; + roldq(15, k, 0, subkey, 4); + roldq(30, k, 0, subkey, 12); + roldq(15, k, 0, t, 0); + subkey[18] = t[2]; + subkey[19] = t[3]; + roldq(17, k, 0, ke, 4); + roldq(17, k, 0, subkey, 24); + roldq(17, k, 0, subkey, 32); + /* KA dependant keys */ + subkey[0] = ka[0]; + subkey[1] = ka[1]; + subkey[2] = ka[2]; + subkey[3] = ka[3]; + roldq(15, ka, 0, subkey, 8); + roldq(15, ka, 0, ke, 0); + roldq(15, ka, 0, t, 0); + subkey[16] = t[0]; + subkey[17] = t[1]; + roldq(15, ka, 0, subkey, 20); + roldqo32(34, ka, 0, subkey, 28); + roldq(17, ka, 0, kw, 4); + + } + else + { // decryption + /* KL dependant keys */ + kw[4] = k[0]; + kw[5] = k[1]; + kw[6] = k[2]; + kw[7] = k[3]; + decroldq(15, k, 0, subkey, 28); + decroldq(30, k, 0, subkey, 20); + decroldq(15, k, 0, t, 0); + subkey[16] = t[0]; + subkey[17] = t[1]; + decroldq(17, k, 0, ke, 0); + decroldq(17, k, 0, subkey, 8); + decroldq(17, k, 0, subkey, 0); + /* KA dependant keys */ + subkey[34] = ka[0]; + subkey[35] = ka[1]; + subkey[32] = ka[2]; + subkey[33] = ka[3]; + decroldq(15, ka, 0, subkey, 24); + decroldq(15, ka, 0, ke, 4); + decroldq(15, ka, 0, t, 0); + subkey[18] = t[2]; + subkey[19] = t[3]; + decroldq(15, ka, 0, subkey, 12); + decroldqo32(34, ka, 0, subkey, 4); + roldq(17, ka, 0, kw, 0); + } + } + else + { // 192bit or 256bit + /* compute KB */ + for (int i = 0; i < 4; i++) + { + kb[i] = ka[i] ^ k[i + 4]; + } + camelliaF2(kb, SIGMA, 8); + + if (forEncryption) + { + /* KL dependant keys */ + kw[0] = k[0]; + kw[1] = k[1]; + kw[2] = k[2]; + kw[3] = k[3]; + roldqo32(45, k, 0, subkey, 16); + roldq(15, k, 0, ke, 4); + roldq(17, k, 0, subkey, 32); + roldqo32(34, k, 0, subkey, 44); + /* KR dependant keys */ + roldq(15, k, 4, subkey, 4); + roldq(15, k, 4, ke, 0); + roldq(30, k, 4, subkey, 24); + roldqo32(34, k, 4, subkey, 36); + /* KA dependant keys */ + roldq(15, ka, 0, subkey, 8); + roldq(30, ka, 0, subkey, 20); + /* 32bit rotation */ + ke[8] = ka[1]; + ke[9] = ka[2]; + ke[10] = ka[3]; + ke[11] = ka[0]; + roldqo32(49, ka, 0, subkey, 40); + + /* KB dependant keys */ + subkey[0] = kb[0]; + subkey[1] = kb[1]; + subkey[2] = kb[2]; + subkey[3] = kb[3]; + roldq(30, kb, 0, subkey, 12); + roldq(30, kb, 0, subkey, 28); + roldqo32(51, kb, 0, kw, 4); + + } + else + { // decryption + /* KL dependant keys */ + kw[4] = k[0]; + kw[5] = k[1]; + kw[6] = k[2]; + kw[7] = k[3]; + decroldqo32(45, k, 0, subkey, 28); + decroldq(15, k, 0, ke, 4); + decroldq(17, k, 0, subkey, 12); + decroldqo32(34, k, 0, subkey, 0); + /* KR dependant keys */ + decroldq(15, k, 4, subkey, 40); + decroldq(15, k, 4, ke, 8); + decroldq(30, k, 4, subkey, 20); + decroldqo32(34, k, 4, subkey, 8); + /* KA dependant keys */ + decroldq(15, ka, 0, subkey, 36); + decroldq(30, ka, 0, subkey, 24); + /* 32bit rotation */ + ke[2] = ka[1]; + ke[3] = ka[2]; + ke[0] = ka[3]; + ke[1] = ka[0]; + decroldqo32(49, ka, 0, subkey, 4); + + /* KB dependant keys */ + subkey[46] = kb[0]; + subkey[47] = kb[1]; + subkey[44] = kb[2]; + subkey[45] = kb[3]; + decroldq(30, kb, 0, subkey, 32); + decroldq(30, kb, 0, subkey, 16); + roldqo32(51, kb, 0, kw, 0); + } + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int ProcessBlock128(ReadOnlySpan input, Span output) + { + uint[] state = new uint[4]; + Pack.BE_To_UInt32(input, state); + + state[0] ^= kw[0]; + state[1] ^= kw[1]; + state[2] ^= kw[2]; + state[3] ^= kw[3]; + + camelliaF2(state, subkey, 0); + camelliaF2(state, subkey, 4); + camelliaF2(state, subkey, 8); + camelliaFLs(state, ke, 0); + camelliaF2(state, subkey, 12); + camelliaF2(state, subkey, 16); + camelliaF2(state, subkey, 20); + camelliaFLs(state, ke, 4); + camelliaF2(state, subkey, 24); + camelliaF2(state, subkey, 28); + camelliaF2(state, subkey, 32); + + Pack.UInt32_To_BE(state[2] ^ kw[4], output); + Pack.UInt32_To_BE(state[3] ^ kw[5], output[4..]); + Pack.UInt32_To_BE(state[0] ^ kw[6], output[8..]); + Pack.UInt32_To_BE(state[1] ^ kw[7], output[12..]); + + return BLOCK_SIZE; + } + + private int ProcessBlock192or256(ReadOnlySpan input, Span output) + { + uint[] state = new uint[4]; + Pack.BE_To_UInt32(input, state); + + state[0] ^= kw[0]; + state[1] ^= kw[1]; + state[2] ^= kw[2]; + state[3] ^= kw[3]; + + camelliaF2(state, subkey, 0); + camelliaF2(state, subkey, 4); + camelliaF2(state, subkey, 8); + camelliaFLs(state, ke, 0); + camelliaF2(state, subkey, 12); + camelliaF2(state, subkey, 16); + camelliaF2(state, subkey, 20); + camelliaFLs(state, ke, 4); + camelliaF2(state, subkey, 24); + camelliaF2(state, subkey, 28); + camelliaF2(state, subkey, 32); + camelliaFLs(state, ke, 8); + camelliaF2(state, subkey, 36); + camelliaF2(state, subkey, 40); + camelliaF2(state, subkey, 44); + + Pack.UInt32_To_BE(state[2] ^ kw[4], output); + Pack.UInt32_To_BE(state[3] ^ kw[5], output[4..]); + Pack.UInt32_To_BE(state[0] ^ kw[6], output[8..]); + Pack.UInt32_To_BE(state[1] ^ kw[7], output[12..]); + + return BLOCK_SIZE; + } +#else + private int ProcessBlock128(byte[] input, int inOff, byte[] output, int outOff) + { + uint[] state = new uint[4]; + + for (int i = 0; i < 4; i++) + { + state[i] = Pack.BE_To_UInt32(input, inOff + (i * 4)) ^ kw[i]; + } + + camelliaF2(state, subkey, 0); + camelliaF2(state, subkey, 4); + camelliaF2(state, subkey, 8); + camelliaFLs(state, ke, 0); + camelliaF2(state, subkey, 12); + camelliaF2(state, subkey, 16); + camelliaF2(state, subkey, 20); + camelliaFLs(state, ke, 4); + camelliaF2(state, subkey, 24); + camelliaF2(state, subkey, 28); + camelliaF2(state, subkey, 32); + + Pack.UInt32_To_BE(state[2] ^ kw[4], output, outOff); + Pack.UInt32_To_BE(state[3] ^ kw[5], output, outOff + 4); + Pack.UInt32_To_BE(state[0] ^ kw[6], output, outOff + 8); + Pack.UInt32_To_BE(state[1] ^ kw[7], output, outOff + 12); + + return BLOCK_SIZE; + } + + private int ProcessBlock192or256(byte[] input, int inOff, byte[] output, int outOff) + { + uint[] state = new uint[4]; + + for (int i = 0; i < 4; i++) + { + state[i] = Pack.BE_To_UInt32(input, inOff + (i * 4)) ^ kw[i]; + } + + camelliaF2(state, subkey, 0); + camelliaF2(state, subkey, 4); + camelliaF2(state, subkey, 8); + camelliaFLs(state, ke, 0); + camelliaF2(state, subkey, 12); + camelliaF2(state, subkey, 16); + camelliaF2(state, subkey, 20); + camelliaFLs(state, ke, 4); + camelliaF2(state, subkey, 24); + camelliaF2(state, subkey, 28); + camelliaF2(state, subkey, 32); + camelliaFLs(state, ke, 8); + camelliaF2(state, subkey, 36); + camelliaF2(state, subkey, 40); + camelliaF2(state, subkey, 44); + + Pack.UInt32_To_BE(state[2] ^ kw[4], output, outOff); + Pack.UInt32_To_BE(state[3] ^ kw[5], output, outOff + 4); + Pack.UInt32_To_BE(state[0] ^ kw[6], output, outOff + 8); + Pack.UInt32_To_BE(state[1] ^ kw[7], output, outOff + 12); + + return BLOCK_SIZE; + } +#endif + + public CamelliaLightEngine() + { + initialised = false; + } + + public virtual string AlgorithmName + { + get { return "Camellia"; } + } + + public virtual int GetBlockSize() + { + return BLOCK_SIZE; + } + + public virtual void Init( + bool forEncryption, + ICipherParameters parameters) + { + if (!(parameters is KeyParameter)) + throw new ArgumentException("only simple KeyParameter expected."); + + setKey(forEncryption, ((KeyParameter)parameters).GetKey()); + + initialised = true; + } + + public virtual int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (!initialised) + throw new InvalidOperationException("Camellia engine not initialised"); + + Check.DataLength(input, inOff, BLOCK_SIZE, "input buffer too short"); + Check.OutputLength(output, outOff, BLOCK_SIZE, "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + if (_keyis128) + { + return ProcessBlock128(input.AsSpan(inOff), output.AsSpan(outOff)); + } + else + { + return ProcessBlock192or256(input.AsSpan(inOff), output.AsSpan(outOff)); + } +#else + if (_keyis128) + { + return ProcessBlock128(input, inOff, output, outOff); + } + else + { + return ProcessBlock192or256(input, inOff, output, outOff); + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + if (!initialised) + throw new InvalidOperationException("Camellia engine not initialised"); + + Check.DataLength(input, BLOCK_SIZE, "input buffer too short"); + Check.OutputLength(output, BLOCK_SIZE, "output buffer too short"); + + if (_keyis128) + { + return ProcessBlock128(input, output); + } + else + { + return ProcessBlock192or256(input, output); + } + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/CamelliaLightEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/CamelliaLightEngine.cs.meta new file mode 100644 index 000000000..4bad1d4be --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/CamelliaLightEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 95526c47cb1ea984ba143e6f98be7455 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/CamelliaWrapEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/CamelliaWrapEngine.cs new file mode 100644 index 000000000..fc3626736 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/CamelliaWrapEngine.cs @@ -0,0 +1,20 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /// + /// An implementation of the Camellia key wrapper based on RFC 3657/RFC 3394. + ///

+ /// For further details see: http://www.ietf.org/rfc/rfc3657.txt. + /// + public class CamelliaWrapEngine + : Rfc3394WrapEngine + { + public CamelliaWrapEngine() + : base(new CamelliaEngine()) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/CamelliaWrapEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/CamelliaWrapEngine.cs.meta new file mode 100644 index 000000000..f0ca40a4d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/CamelliaWrapEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b75fafaaa8f1b1041ae39378d6ce4a00 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Cast5Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Cast5Engine.cs new file mode 100644 index 000000000..c083f02c7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Cast5Engine.cs @@ -0,0 +1,838 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * A class that provides CAST key encryption operations, + * such as encoding data and generating keys. + * + * All the algorithms herein are from the Internet RFC's + * + * RFC2144 - Cast5 (64bit block, 40-128bit key) + * RFC2612 - CAST6 (128bit block, 128-256bit key) + * + * and implement a simplified cryptography interface. + */ + public class Cast5Engine + : IBlockCipher + { + private static readonly uint[] S1 = + { + 0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949, + 0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e, + 0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d, + 0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0, + 0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7, + 0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935, + 0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d, + 0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50, + 0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe, + 0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3, + 0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167, + 0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291, + 0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779, + 0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2, + 0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511, + 0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d, + 0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5, + 0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324, + 0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c, + 0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc, + 0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d, + 0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96, + 0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a, + 0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d, + 0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd, + 0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6, + 0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9, + 0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872, + 0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c, + 0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e, + 0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9, + 0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf + }, + S2 = + { + 0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651, + 0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3, + 0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb, + 0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806, + 0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b, + 0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359, + 0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b, + 0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c, + 0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34, + 0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb, + 0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd, + 0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860, + 0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b, + 0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304, + 0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b, + 0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf, + 0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c, + 0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13, + 0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f, + 0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6, + 0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6, + 0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58, + 0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906, + 0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d, + 0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6, + 0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4, + 0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6, + 0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f, + 0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249, + 0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa, + 0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9, + 0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1 + }, + S3 = + { + 0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90, + 0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5, + 0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e, + 0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240, + 0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5, + 0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b, + 0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71, + 0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04, + 0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82, + 0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15, + 0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2, + 0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176, + 0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148, + 0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc, + 0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341, + 0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e, + 0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51, + 0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f, + 0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a, + 0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b, + 0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b, + 0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5, + 0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45, + 0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536, + 0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc, + 0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0, + 0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69, + 0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2, + 0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49, + 0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d, + 0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a, + 0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783 + }, + S4 = + { + 0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1, + 0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf, + 0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15, + 0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121, + 0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25, + 0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5, + 0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb, + 0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5, + 0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d, + 0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6, + 0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23, + 0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003, + 0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6, + 0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119, + 0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24, + 0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a, + 0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79, + 0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df, + 0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26, + 0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab, + 0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7, + 0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417, + 0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2, + 0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2, + 0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a, + 0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919, + 0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef, + 0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876, + 0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab, + 0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04, + 0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282, + 0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2 + }, + S5 = + { + 0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f, + 0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, 0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a, + 0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180, 0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff, + 0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2, 0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02, + 0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725, 0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a, + 0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b, 0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7, + 0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571, 0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9, + 0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec, 0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981, + 0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea, 0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774, + 0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263, 0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655, + 0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468, 0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2, + 0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b, 0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910, + 0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284, 0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1, + 0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4, 0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da, + 0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7, 0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049, + 0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce, 0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f, + 0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6, 0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba, + 0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4, 0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be, + 0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561, 0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3, + 0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6, 0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840, + 0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406, 0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4, + 0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472, 0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2, + 0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487, 0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7, + 0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288, 0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5, + 0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2, 0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e, + 0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78, 0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e, + 0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76, 0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801, + 0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0, 0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad, + 0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58, 0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0, + 0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2, 0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20, + 0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be, 0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8, + 0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55, 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4 + }, + S6 = + { + 0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac, + 0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, 0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138, + 0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e, 0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367, + 0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866, 0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98, + 0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c, 0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072, + 0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd, 0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3, + 0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53, 0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd, + 0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d, 0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8, + 0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf, 0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9, + 0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807, 0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54, + 0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a, 0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387, + 0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563, 0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc, + 0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0, 0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf, + 0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be, 0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf, + 0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0, 0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f, + 0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2, 0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289, + 0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853, 0x20951063, 0x4576698d, 0xb6fad407, 0x592af950, + 0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa, 0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f, + 0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9, 0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b, + 0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751, 0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be, + 0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358, 0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13, + 0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397, 0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976, + 0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459, 0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0, + 0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4, 0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891, + 0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f, 0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da, + 0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb, 0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc, + 0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2, 0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084, + 0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab, 0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25, + 0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b, 0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121, + 0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b, 0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5, + 0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855, 0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd, + 0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454, 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f + }, + S7 = + { + 0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f, + 0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, 0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de, + 0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd, 0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43, + 0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f, 0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19, + 0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9, 0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2, + 0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e, 0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516, + 0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83, 0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88, + 0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e, 0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816, + 0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a, 0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756, + 0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f, 0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a, + 0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b, 0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264, + 0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78, 0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688, + 0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d, 0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28, + 0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802, 0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3, + 0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9, 0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7, + 0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302, 0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06, + 0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858, 0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033, + 0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a, 0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a, + 0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4, 0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566, + 0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df, 0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509, + 0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9, 0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962, + 0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c, 0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e, + 0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07, 0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c, + 0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939, 0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c, + 0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e, 0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285, + 0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378, 0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301, + 0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd, 0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be, + 0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567, 0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767, + 0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2, 0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647, + 0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf, 0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914, + 0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2, 0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c, + 0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada, 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3 + }, + S8 = + { + 0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5, + 0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, 0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc, + 0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940, 0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd, + 0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42, 0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d, + 0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164, 0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2, + 0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4, 0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862, + 0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0, 0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc, + 0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6, 0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c, + 0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491, 0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e, + 0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b, 0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039, + 0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8, 0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8, + 0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006, 0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42, + 0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564, 0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5, + 0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab, 0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472, + 0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc, 0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225, + 0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8, 0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c, + 0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441, 0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb, + 0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f, 0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054, + 0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504, 0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70, + 0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c, 0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc, + 0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6, 0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c, + 0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd, 0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3, + 0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4, 0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4, + 0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc, 0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101, + 0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba, 0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f, + 0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf, 0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e, + 0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603, 0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a, + 0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37, 0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c, + 0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819, 0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384, + 0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d, 0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c, + 0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347, 0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82, + 0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d, 0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e + }; + + //==================================== + // Useful constants + //==================================== + + internal static readonly int MAX_ROUNDS = 16; + internal static readonly int RED_ROUNDS = 12; + + private const int BLOCK_SIZE = 8; // bytes = 64 bits + + private int[] _Kr = new int[17]; // the rotating round key + private uint[] _Km = new uint[17]; // the masking round key + + private bool _encrypting; + + private byte[] _workingKey; + private int _rounds = MAX_ROUNDS; + + public Cast5Engine() + { + } + + /** + * initialise a CAST cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param parameters the parameters required to set up the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public virtual void Init( + bool forEncryption, + ICipherParameters parameters) + { + if (!(parameters is KeyParameter)) + throw new ArgumentException("Invalid parameter passed to "+ AlgorithmName +" init - " + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + + _encrypting = forEncryption; + _workingKey = ((KeyParameter)parameters).GetKey(); + SetKey(_workingKey); + } + + public virtual string AlgorithmName + { + get { return "CAST5"; } + } + + public virtual int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (_workingKey == null) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + int blockSize = GetBlockSize(); + Check.DataLength(input, inOff, blockSize, "input buffer too short"); + Check.OutputLength(output, outOff, blockSize, "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + if (_encrypting) + { + return EncryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); + } + else + { + return DecryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); + } +#else + if (_encrypting) + { + return EncryptBlock(input, inOff, output, outOff); + } + else + { + return DecryptBlock(input, inOff, output, outOff); + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + if (_workingKey == null) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + int blockSize = GetBlockSize(); + Check.DataLength(input, blockSize, "input buffer too short"); + Check.OutputLength(output, blockSize, "output buffer too short"); + + if (_encrypting) + { + return EncryptBlock(input, output); + } + else + { + return DecryptBlock(input, output); + } + } +#endif + + public virtual int GetBlockSize() + { + return BLOCK_SIZE; + } + + //================================== + // Private Implementation + //================================== + + /* + * Creates the subkeys using the same nomenclature + * as described in RFC2144. + * + * See section 2.4 + */ + internal virtual void SetKey(byte[] key) + { + /* + * Determine the key size here, if required + * + * if keysize <= 80bits, use 12 rounds instead of 16 + * if keysize < 128bits, pad with 0 + * + * Typical key sizes => 40, 64, 80, 128 + */ + + if (key.Length < 11) + { + _rounds = RED_ROUNDS; + } + + int [] z = new int[16]; + int [] x = new int[16]; + + uint z03, z47, z8B, zCF; + uint x03, x47, x8B, xCF; + + /* copy the key into x */ + for (int i=0; i< key.Length; i++) + { + x[i] = (int)(key[i] & 0xff); + } + + /* + * This will look different because the selection of + * bytes from the input key I've already chosen the + * correct int. + */ + x03 = IntsTo32bits(x, 0x0); + x47 = IntsTo32bits(x, 0x4); + x8B = IntsTo32bits(x, 0x8); + xCF = IntsTo32bits(x, 0xC); + + z03 = x03 ^S5[x[0xD]] ^S6[x[0xF]] ^S7[x[0xC]] ^S8[x[0xE]] ^S7[x[0x8]]; + + Bits32ToInts(z03, z, 0x0); + z47 = x8B ^S5[z[0x0]] ^S6[z[0x2]] ^S7[z[0x1]] ^S8[z[0x3]] ^S8[x[0xA]]; + Bits32ToInts(z47, z, 0x4); + z8B = xCF ^S5[z[0x7]] ^S6[z[0x6]] ^S7[z[0x5]] ^S8[z[0x4]] ^S5[x[0x9]]; + Bits32ToInts(z8B, z, 0x8); + zCF = x47 ^S5[z[0xA]] ^S6[z[0x9]] ^S7[z[0xB]] ^S8[z[0x8]] ^S6[x[0xB]]; + Bits32ToInts(zCF, z, 0xC); + _Km[ 1]= S5[z[0x8]] ^ S6[z[0x9]] ^ S7[z[0x7]] ^ S8[z[0x6]] ^ S5[z[0x2]]; + _Km[ 2]= S5[z[0xA]] ^ S6[z[0xB]] ^ S7[z[0x5]] ^ S8[z[0x4]] ^ S6[z[0x6]]; + _Km[ 3]= S5[z[0xC]] ^ S6[z[0xD]] ^ S7[z[0x3]] ^ S8[z[0x2]] ^ S7[z[0x9]]; + _Km[ 4]= S5[z[0xE]] ^ S6[z[0xF]] ^ S7[z[0x1]] ^ S8[z[0x0]] ^ S8[z[0xC]]; + + z03 = IntsTo32bits(z, 0x0); + z47 = IntsTo32bits(z, 0x4); + z8B = IntsTo32bits(z, 0x8); + zCF = IntsTo32bits(z, 0xC); + x03 = z8B ^S5[z[0x5]] ^S6[z[0x7]] ^S7[z[0x4]] ^S8[z[0x6]] ^S7[z[0x0]]; + Bits32ToInts(x03, x, 0x0); + x47 = z03 ^S5[x[0x0]] ^S6[x[0x2]] ^S7[x[0x1]] ^S8[x[0x3]] ^S8[z[0x2]]; + Bits32ToInts(x47, x, 0x4); + x8B = z47 ^S5[x[0x7]] ^S6[x[0x6]] ^S7[x[0x5]] ^S8[x[0x4]] ^S5[z[0x1]]; + Bits32ToInts(x8B, x, 0x8); + xCF = zCF ^S5[x[0xA]] ^S6[x[0x9]] ^S7[x[0xB]] ^S8[x[0x8]] ^S6[z[0x3]]; + Bits32ToInts(xCF, x, 0xC); + _Km[ 5]= S5[x[0x3]] ^ S6[x[0x2]] ^ S7[x[0xC]] ^ S8[x[0xD]] ^ S5[x[0x8]]; + _Km[ 6]= S5[x[0x1]] ^ S6[x[0x0]] ^ S7[x[0xE]] ^ S8[x[0xF]] ^ S6[x[0xD]]; + _Km[ 7]= S5[x[0x7]] ^ S6[x[0x6]] ^ S7[x[0x8]] ^ S8[x[0x9]] ^ S7[x[0x3]]; + _Km[ 8]= S5[x[0x5]] ^ S6[x[0x4]] ^ S7[x[0xA]] ^ S8[x[0xB]] ^ S8[x[0x7]]; + + x03 = IntsTo32bits(x, 0x0); + x47 = IntsTo32bits(x, 0x4); + x8B = IntsTo32bits(x, 0x8); + xCF = IntsTo32bits(x, 0xC); + z03 = x03 ^S5[x[0xD]] ^S6[x[0xF]] ^S7[x[0xC]] ^S8[x[0xE]] ^S7[x[0x8]]; + Bits32ToInts(z03, z, 0x0); + z47 = x8B ^S5[z[0x0]] ^S6[z[0x2]] ^S7[z[0x1]] ^S8[z[0x3]] ^S8[x[0xA]]; + Bits32ToInts(z47, z, 0x4); + z8B = xCF ^S5[z[0x7]] ^S6[z[0x6]] ^S7[z[0x5]] ^S8[z[0x4]] ^S5[x[0x9]]; + Bits32ToInts(z8B, z, 0x8); + zCF = x47 ^S5[z[0xA]] ^S6[z[0x9]] ^S7[z[0xB]] ^S8[z[0x8]] ^S6[x[0xB]]; + Bits32ToInts(zCF, z, 0xC); + _Km[ 9]= S5[z[0x3]] ^ S6[z[0x2]] ^ S7[z[0xC]] ^ S8[z[0xD]] ^ S5[z[0x9]]; + _Km[10]= S5[z[0x1]] ^ S6[z[0x0]] ^ S7[z[0xE]] ^ S8[z[0xF]] ^ S6[z[0xc]]; + _Km[11]= S5[z[0x7]] ^ S6[z[0x6]] ^ S7[z[0x8]] ^ S8[z[0x9]] ^ S7[z[0x2]]; + _Km[12]= S5[z[0x5]] ^ S6[z[0x4]] ^ S7[z[0xA]] ^ S8[z[0xB]] ^ S8[z[0x6]]; + + z03 = IntsTo32bits(z, 0x0); + z47 = IntsTo32bits(z, 0x4); + z8B = IntsTo32bits(z, 0x8); + zCF = IntsTo32bits(z, 0xC); + x03 = z8B ^S5[z[0x5]] ^S6[z[0x7]] ^S7[z[0x4]] ^S8[z[0x6]] ^S7[z[0x0]]; + Bits32ToInts(x03, x, 0x0); + x47 = z03 ^S5[x[0x0]] ^S6[x[0x2]] ^S7[x[0x1]] ^S8[x[0x3]] ^S8[z[0x2]]; + Bits32ToInts(x47, x, 0x4); + x8B = z47 ^S5[x[0x7]] ^S6[x[0x6]] ^S7[x[0x5]] ^S8[x[0x4]] ^S5[z[0x1]]; + Bits32ToInts(x8B, x, 0x8); + xCF = zCF ^S5[x[0xA]] ^S6[x[0x9]] ^S7[x[0xB]] ^S8[x[0x8]] ^S6[z[0x3]]; + Bits32ToInts(xCF, x, 0xC); + _Km[13]= S5[x[0x8]] ^ S6[x[0x9]] ^ S7[x[0x7]] ^ S8[x[0x6]] ^ S5[x[0x3]]; + _Km[14]= S5[x[0xA]] ^ S6[x[0xB]] ^ S7[x[0x5]] ^ S8[x[0x4]] ^ S6[x[0x7]]; + _Km[15]= S5[x[0xC]] ^ S6[x[0xD]] ^ S7[x[0x3]] ^ S8[x[0x2]] ^ S7[x[0x8]]; + _Km[16]= S5[x[0xE]] ^ S6[x[0xF]] ^ S7[x[0x1]] ^ S8[x[0x0]] ^ S8[x[0xD]]; + + x03 = IntsTo32bits(x, 0x0); + x47 = IntsTo32bits(x, 0x4); + x8B = IntsTo32bits(x, 0x8); + xCF = IntsTo32bits(x, 0xC); + z03 = x03 ^S5[x[0xD]] ^S6[x[0xF]] ^S7[x[0xC]] ^S8[x[0xE]] ^S7[x[0x8]]; + Bits32ToInts(z03, z, 0x0); + z47 = x8B ^S5[z[0x0]] ^S6[z[0x2]] ^S7[z[0x1]] ^S8[z[0x3]] ^S8[x[0xA]]; + Bits32ToInts(z47, z, 0x4); + z8B = xCF ^S5[z[0x7]] ^S6[z[0x6]] ^S7[z[0x5]] ^S8[z[0x4]] ^S5[x[0x9]]; + Bits32ToInts(z8B, z, 0x8); + zCF = x47 ^S5[z[0xA]] ^S6[z[0x9]] ^S7[z[0xB]] ^S8[z[0x8]] ^S6[x[0xB]]; + Bits32ToInts(zCF, z, 0xC); + _Kr[ 1]=(int)((S5[z[0x8]]^S6[z[0x9]]^S7[z[0x7]]^S8[z[0x6]] ^ S5[z[0x2]])&0x1f); + _Kr[ 2]=(int)((S5[z[0xA]]^S6[z[0xB]]^S7[z[0x5]]^S8[z[0x4]] ^ S6[z[0x6]])&0x1f); + _Kr[ 3]=(int)((S5[z[0xC]]^S6[z[0xD]]^S7[z[0x3]]^S8[z[0x2]] ^ S7[z[0x9]])&0x1f); + _Kr[ 4]=(int)((S5[z[0xE]]^S6[z[0xF]]^S7[z[0x1]]^S8[z[0x0]] ^ S8[z[0xC]])&0x1f); + + z03 = IntsTo32bits(z, 0x0); + z47 = IntsTo32bits(z, 0x4); + z8B = IntsTo32bits(z, 0x8); + zCF = IntsTo32bits(z, 0xC); + x03 = z8B ^S5[z[0x5]] ^S6[z[0x7]] ^S7[z[0x4]] ^S8[z[0x6]] ^S7[z[0x0]]; + Bits32ToInts(x03, x, 0x0); + x47 = z03 ^S5[x[0x0]] ^S6[x[0x2]] ^S7[x[0x1]] ^S8[x[0x3]] ^S8[z[0x2]]; + Bits32ToInts(x47, x, 0x4); + x8B = z47 ^S5[x[0x7]] ^S6[x[0x6]] ^S7[x[0x5]] ^S8[x[0x4]] ^S5[z[0x1]]; + Bits32ToInts(x8B, x, 0x8); + xCF = zCF ^S5[x[0xA]] ^S6[x[0x9]] ^S7[x[0xB]] ^S8[x[0x8]] ^S6[z[0x3]]; + Bits32ToInts(xCF, x, 0xC); + _Kr[ 5]=(int)((S5[x[0x3]]^S6[x[0x2]]^S7[x[0xC]]^S8[x[0xD]]^S5[x[0x8]])&0x1f); + _Kr[ 6]=(int)((S5[x[0x1]]^S6[x[0x0]]^S7[x[0xE]]^S8[x[0xF]]^S6[x[0xD]])&0x1f); + _Kr[ 7]=(int)((S5[x[0x7]]^S6[x[0x6]]^S7[x[0x8]]^S8[x[0x9]]^S7[x[0x3]])&0x1f); + _Kr[ 8]=(int)((S5[x[0x5]]^S6[x[0x4]]^S7[x[0xA]]^S8[x[0xB]]^S8[x[0x7]])&0x1f); + + x03 = IntsTo32bits(x, 0x0); + x47 = IntsTo32bits(x, 0x4); + x8B = IntsTo32bits(x, 0x8); + xCF = IntsTo32bits(x, 0xC); + z03 = x03 ^S5[x[0xD]] ^S6[x[0xF]] ^S7[x[0xC]] ^S8[x[0xE]] ^S7[x[0x8]]; + Bits32ToInts(z03, z, 0x0); + z47 = x8B ^S5[z[0x0]] ^S6[z[0x2]] ^S7[z[0x1]] ^S8[z[0x3]] ^S8[x[0xA]]; + Bits32ToInts(z47, z, 0x4); + z8B = xCF ^S5[z[0x7]] ^S6[z[0x6]] ^S7[z[0x5]] ^S8[z[0x4]] ^S5[x[0x9]]; + Bits32ToInts(z8B, z, 0x8); + zCF = x47 ^S5[z[0xA]] ^S6[z[0x9]] ^S7[z[0xB]] ^S8[z[0x8]] ^S6[x[0xB]]; + Bits32ToInts(zCF, z, 0xC); + _Kr[ 9]=(int)((S5[z[0x3]]^S6[z[0x2]]^S7[z[0xC]]^S8[z[0xD]]^S5[z[0x9]])&0x1f); + _Kr[10]=(int)((S5[z[0x1]]^S6[z[0x0]]^S7[z[0xE]]^S8[z[0xF]]^S6[z[0xc]])&0x1f); + _Kr[11]=(int)((S5[z[0x7]]^S6[z[0x6]]^S7[z[0x8]]^S8[z[0x9]]^S7[z[0x2]])&0x1f); + _Kr[12]=(int)((S5[z[0x5]]^S6[z[0x4]]^S7[z[0xA]]^S8[z[0xB]]^S8[z[0x6]])&0x1f); + + z03 = IntsTo32bits(z, 0x0); + z47 = IntsTo32bits(z, 0x4); + z8B = IntsTo32bits(z, 0x8); + zCF = IntsTo32bits(z, 0xC); + x03 = z8B ^S5[z[0x5]] ^S6[z[0x7]] ^S7[z[0x4]] ^S8[z[0x6]] ^S7[z[0x0]]; + Bits32ToInts(x03, x, 0x0); + x47 = z03 ^S5[x[0x0]] ^S6[x[0x2]] ^S7[x[0x1]] ^S8[x[0x3]] ^S8[z[0x2]]; + Bits32ToInts(x47, x, 0x4); + x8B = z47 ^S5[x[0x7]] ^S6[x[0x6]] ^S7[x[0x5]] ^S8[x[0x4]] ^S5[z[0x1]]; + Bits32ToInts(x8B, x, 0x8); + xCF = zCF ^S5[x[0xA]] ^S6[x[0x9]] ^S7[x[0xB]] ^S8[x[0x8]] ^S6[z[0x3]]; + Bits32ToInts(xCF, x, 0xC); + _Kr[13]=(int)((S5[x[0x8]]^S6[x[0x9]]^S7[x[0x7]]^S8[x[0x6]]^S5[x[0x3]])&0x1f); + _Kr[14]=(int)((S5[x[0xA]]^S6[x[0xB]]^S7[x[0x5]]^S8[x[0x4]]^S6[x[0x7]])&0x1f); + _Kr[15]=(int)((S5[x[0xC]]^S6[x[0xD]]^S7[x[0x3]]^S8[x[0x2]]^S7[x[0x8]])&0x1f); + _Kr[16]=(int)((S5[x[0xE]]^S6[x[0xF]]^S7[x[0x1]]^S8[x[0x0]]^S8[x[0xD]])&0x1f); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal virtual int EncryptBlock(ReadOnlySpan input, Span output) + { + // process the input block + // batch the units up into a 32 bit chunk and go for it + // the array is in bytes, the increment is 8x8 bits = 64 + + uint L0 = Pack.BE_To_UInt32(input); + uint R0 = Pack.BE_To_UInt32(input[4..]); + + uint[] result = new uint[2]; + CAST_Encipher(L0, R0, result); + + // now stuff them into the destination block + Pack.UInt32_To_BE(result[0], output); + Pack.UInt32_To_BE(result[1], output[4..]); + + return BLOCK_SIZE; + } + + internal virtual int DecryptBlock(ReadOnlySpan input, Span output) + { + // process the input block + // batch the units up into a 32 bit chunk and go for it + // the array is in bytes, the increment is 8x8 bits = 64 + uint L16 = Pack.BE_To_UInt32(input); + uint R16 = Pack.BE_To_UInt32(input[4..]); + + uint[] result = new uint[2]; + CAST_Decipher(L16, R16, result); + + // now stuff them into the destination block + Pack.UInt32_To_BE(result[0], output); + Pack.UInt32_To_BE(result[1], output[4..]); + + return BLOCK_SIZE; + } +#else + internal virtual int EncryptBlock(byte[] src, int srcIndex, byte[] dst, int dstIndex) + { + // process the input block + // batch the units up into a 32 bit chunk and go for it + // the array is in bytes, the increment is 8x8 bits = 64 + + uint L0 = Pack.BE_To_UInt32(src, srcIndex); + uint R0 = Pack.BE_To_UInt32(src, srcIndex + 4); + + uint[] result = new uint[2]; + CAST_Encipher(L0, R0, result); + + // now stuff them into the destination block + Pack.UInt32_To_BE(result[0], dst, dstIndex); + Pack.UInt32_To_BE(result[1], dst, dstIndex + 4); + + return BLOCK_SIZE; + } + + internal virtual int DecryptBlock(byte[] src, int srcIndex, byte[] dst, int dstIndex) + { + // process the input block + // batch the units up into a 32 bit chunk and go for it + // the array is in bytes, the increment is 8x8 bits = 64 + uint L16 = Pack.BE_To_UInt32(src, srcIndex); + uint R16 = Pack.BE_To_UInt32(src, srcIndex + 4); + + uint[] result = new uint[2]; + CAST_Decipher(L16, R16, result); + + // now stuff them into the destination block + Pack.UInt32_To_BE(result[0], dst, dstIndex); + Pack.UInt32_To_BE(result[1], dst, dstIndex + 4); + + return BLOCK_SIZE; + } +#endif + + /** + * The first of the three processing functions for the + * encryption and decryption. + * + * @param D the input to be processed + * @param Kmi the mask to be used from Km[n] + * @param Kri the rotation value to be used + * + */ + internal static uint F1(uint D, uint Kmi, int Kri) + { + uint I = Kmi + D; + I = I << Kri | (I >> (32-Kri)); + return ((S1[(I>>24)&0xff]^S2[(I>>16)&0xff])-S3[(I>>8)&0xff])+S4[I&0xff]; + } + + /** + * The second of the three processing functions for the + * encryption and decryption. + * + * @param D the input to be processed + * @param Kmi the mask to be used from Km[n] + * @param Kri the rotation value to be used + * + */ + internal static uint F2(uint D, uint Kmi, int Kri) + { + uint I = Kmi ^ D; + I = I << Kri | (I >> (32-Kri)); + return ((S1[(I>>24)&0xff]-S2[(I>>16)&0xff])+S3[(I>>8)&0xff])^S4[I&0xff]; + } + + /** + * The third of the three processing functions for the + * encryption and decryption. + * + * @param D the input to be processed + * @param Kmi the mask to be used from Km[n] + * @param Kri the rotation value to be used + * + */ + internal static uint F3(uint D, uint Kmi, int Kri) + { + uint I = Kmi - D; + I = I << Kri | (I >> (32-Kri)); + return ((S1[(I>>24)&0xff]+S2[(I>>16)&0xff])^S3[(I>>8)&0xff])-S4[I&0xff]; + } + + /** + * Does the 16 rounds to encrypt the block. + * + * @param L0 the LH-32bits of the plaintext block + * @param R0 the RH-32bits of the plaintext block + */ + internal void CAST_Encipher(uint L0, uint R0, uint[] result) + { + uint Lp = L0; // the previous value, equiv to L[i-1] + uint Rp = R0; // equivalent to R[i-1] + + /* + * numbering consistent with paper to make + * checking and validating easier + */ + uint Li = L0, Ri = R0; + + for (int i = 1; i<=_rounds ; i++) + { + Lp = Li; + Rp = Ri; + + Li = Rp; + switch (i) + { + case 1: + case 4: + case 7: + case 10: + case 13: + case 16: + Ri = Lp ^ F1(Rp, _Km[i], _Kr[i]); + break; + case 2: + case 5: + case 8: + case 11: + case 14: + Ri = Lp ^ F2(Rp, _Km[i], _Kr[i]); + break; + case 3: + case 6: + case 9: + case 12: + case 15: + Ri = Lp ^ F3(Rp, _Km[i], _Kr[i]); + break; + } + } + + result[0] = Ri; + result[1] = Li; + + return; + } + + internal void CAST_Decipher(uint L16, uint R16, uint[] result) + { + uint Lp = L16; // the previous value, equiv to L[i-1] + uint Rp = R16; // equivalent to R[i-1] + + /* + * numbering consistent with paper to make + * checking and validating easier + */ + uint Li = L16, Ri = R16; + + for (int i = _rounds; i > 0; i--) + { + Lp = Li; + Rp = Ri; + + Li = Rp; + switch (i) + { + case 1: + case 4: + case 7: + case 10: + case 13: + case 16: + Ri = Lp ^ F1(Rp, _Km[i], _Kr[i]); + break; + case 2: + case 5: + case 8: + case 11: + case 14: + Ri = Lp ^ F2(Rp, _Km[i], _Kr[i]); + break; + case 3: + case 6: + case 9: + case 12: + case 15: + Ri = Lp ^ F3(Rp, _Km[i], _Kr[i]); + break; + } + } + + result[0] = Ri; + result[1] = Li; + + return; + } + + internal static void Bits32ToInts(uint inData, int[] b, int offset) + { + b[offset + 3] = (int) (inData & 0xff); + b[offset + 2] = (int) ((inData >> 8) & 0xff); + b[offset + 1] = (int) ((inData >> 16) & 0xff); + b[offset] = (int) ((inData >> 24) & 0xff); + } + + internal static uint IntsTo32bits(int[] b, int i) + { + return (uint)(((b[i] & 0xff) << 24) | + ((b[i+1] & 0xff) << 16) | + ((b[i+2] & 0xff) << 8) | + ((b[i+3] & 0xff))); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Cast5Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Cast5Engine.cs.meta new file mode 100644 index 000000000..c34047e4a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Cast5Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8e6be43f32217e342897a427819c9724 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Cast6Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Cast6Engine.cs new file mode 100644 index 000000000..c389045e7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Cast6Engine.cs @@ -0,0 +1,291 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * A class that provides CAST6 key encryption operations, + * such as encoding data and generating keys. + * + * All the algorithms herein are from the Internet RFC + * + * RFC2612 - CAST6 (128bit block, 128-256bit key) + * + * and implement a simplified cryptography interface. + */ + public sealed class Cast6Engine + : Cast5Engine + { + //==================================== + // Useful constants + //==================================== + private const int ROUNDS = 12; + private const int BLOCK_SIZE = 16; // bytes = 128 bits + + /* + * Put the round and mask keys into an array. + * Kr0[i] => _Kr[i*4 + 0] + */ + private int []_Kr = new int[ROUNDS*4]; // the rotating round key(s) + private uint []_Km = new uint[ROUNDS*4]; // the masking round key(s) + + /* + * Key setup + */ + private int []_Tr = new int[24 * 8]; + private uint []_Tm = new uint[24 * 8]; + private uint[] _workingKey = new uint[8]; + + public Cast6Engine() + { + } + + public override string AlgorithmName + { + get { return "CAST6"; } + } + + public override int GetBlockSize() + { + return BLOCK_SIZE; + } + + //================================== + // Private Implementation + //================================== + /* + * Creates the subkeys using the same nomenclature + * as described in RFC2612. + * + * See section 2.4 + */ + internal override void SetKey( + byte[] key) + { + uint Cm = 0x5a827999; + uint Mm = 0x6ed9eba1; + int Cr = 19; + int Mr = 17; + /* + * Determine the key size here, if required + * + * if keysize < 256 bytes, pad with 0 + * + * Typical key sizes => 128, 160, 192, 224, 256 + */ + for (int i=0; i< 24; i++) + { + for (int j=0; j< 8; j++) + { + _Tm[i*8 + j] = Cm; + Cm += Mm; //mod 2^32; + _Tr[i*8 + j] = Cr; + Cr = (Cr + Mr) & 0x1f; // mod 32 + } + } + + byte[] tmpKey = new byte[64]; + key.CopyTo(tmpKey, 0); + + // now create ABCDEFGH + for (int i = 0; i < 8; i++) + { + _workingKey[i] = Pack.BE_To_UInt32(tmpKey, i*4); + } + + // Generate the key schedule + for (int i = 0; i < 12; i++) + { + // KAPPA <- W2i(KAPPA) + int i2 = i*2 *8; + _workingKey[6] ^= F1(_workingKey[7], _Tm[i2], _Tr[i2]); + _workingKey[5] ^= F2(_workingKey[6], _Tm[i2+1], _Tr[i2+1]); + _workingKey[4] ^= F3(_workingKey[5], _Tm[i2+2], _Tr[i2+2]); + _workingKey[3] ^= F1(_workingKey[4], _Tm[i2+3], _Tr[i2+3]); + _workingKey[2] ^= F2(_workingKey[3], _Tm[i2+4], _Tr[i2+4]); + _workingKey[1] ^= F3(_workingKey[2], _Tm[i2+5], _Tr[i2+5]); + _workingKey[0] ^= F1(_workingKey[1], _Tm[i2+6], _Tr[i2+6]); + _workingKey[7] ^= F2(_workingKey[0], _Tm[i2+7], _Tr[i2+7]); + // KAPPA <- W2i+1(KAPPA) + i2 = (i*2 + 1)*8; + _workingKey[6] ^= F1(_workingKey[7], _Tm[i2], _Tr[i2]); + _workingKey[5] ^= F2(_workingKey[6], _Tm[i2+1], _Tr[i2+1]); + _workingKey[4] ^= F3(_workingKey[5], _Tm[i2+2], _Tr[i2+2]); + _workingKey[3] ^= F1(_workingKey[4], _Tm[i2+3], _Tr[i2+3]); + _workingKey[2] ^= F2(_workingKey[3], _Tm[i2+4], _Tr[i2+4]); + _workingKey[1] ^= F3(_workingKey[2], _Tm[i2+5], _Tr[i2+5]); + _workingKey[0] ^= F1(_workingKey[1], _Tm[i2+6], _Tr[i2+6]); + _workingKey[7] ^= F2(_workingKey[0], _Tm[i2+7], _Tr[i2+7]); + // Kr_(i) <- KAPPA + _Kr[i*4] = (int)(_workingKey[0] & 0x1f); + _Kr[i*4 + 1] = (int)(_workingKey[2] & 0x1f); + _Kr[i*4 + 2] = (int)(_workingKey[4] & 0x1f); + _Kr[i*4 + 3] = (int)(_workingKey[6] & 0x1f); + // Km_(i) <- KAPPA + _Km[i*4] = _workingKey[7]; + _Km[i*4 + 1] = _workingKey[5]; + _Km[i*4 + 2] = _workingKey[3]; + _Km[i*4 + 3] = _workingKey[1]; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal override int EncryptBlock(ReadOnlySpan input, Span output) + { + // process the input block + // batch the units up into 4x32 bit chunks and go for it + uint A = Pack.BE_To_UInt32(input); + uint B = Pack.BE_To_UInt32(input[4..]); + uint C = Pack.BE_To_UInt32(input[8..]); + uint D = Pack.BE_To_UInt32(input[12..]); + uint[] result = new uint[4]; + CAST_Encipher(A, B, C, D, result); + // now stuff them into the destination block + Pack.UInt32_To_BE(result[0], output); + Pack.UInt32_To_BE(result[1], output[4..]); + Pack.UInt32_To_BE(result[2], output[8..]); + Pack.UInt32_To_BE(result[3], output[12..]); + return BLOCK_SIZE; + } + + internal override int DecryptBlock(ReadOnlySpan input, Span output) + { + // process the input block + // batch the units up into 4x32 bit chunks and go for it + uint A = Pack.BE_To_UInt32(input); + uint B = Pack.BE_To_UInt32(input[4..]); + uint C = Pack.BE_To_UInt32(input[8..]); + uint D = Pack.BE_To_UInt32(input[12..]); + uint[] result = new uint[4]; + CAST_Decipher(A, B, C, D, result); + // now stuff them into the destination block + Pack.UInt32_To_BE(result[0], output); + Pack.UInt32_To_BE(result[1], output[4..]); + Pack.UInt32_To_BE(result[2], output[8..]); + Pack.UInt32_To_BE(result[3], output[12..]); + return BLOCK_SIZE; + } +#else + internal override int EncryptBlock(byte[] src, int srcIndex, byte[] dst, int dstIndex) + { + // process the input block + // batch the units up into 4x32 bit chunks and go for it + uint A = Pack.BE_To_UInt32(src, srcIndex); + uint B = Pack.BE_To_UInt32(src, srcIndex + 4); + uint C = Pack.BE_To_UInt32(src, srcIndex + 8); + uint D = Pack.BE_To_UInt32(src, srcIndex + 12); + uint[] result = new uint[4]; + CAST_Encipher(A, B, C, D, result); + // now stuff them into the destination block + Pack.UInt32_To_BE(result[0], dst, dstIndex); + Pack.UInt32_To_BE(result[1], dst, dstIndex + 4); + Pack.UInt32_To_BE(result[2], dst, dstIndex + 8); + Pack.UInt32_To_BE(result[3], dst, dstIndex + 12); + return BLOCK_SIZE; + } + + internal override int DecryptBlock(byte[] src, int srcIndex, byte[] dst, int dstIndex) + { + // process the input block + // batch the units up into 4x32 bit chunks and go for it + uint A = Pack.BE_To_UInt32(src, srcIndex); + uint B = Pack.BE_To_UInt32(src, srcIndex + 4); + uint C = Pack.BE_To_UInt32(src, srcIndex + 8); + uint D = Pack.BE_To_UInt32(src, srcIndex + 12); + uint[] result = new uint[4]; + CAST_Decipher(A, B, C, D, result); + // now stuff them into the destination block + Pack.UInt32_To_BE(result[0], dst, dstIndex); + Pack.UInt32_To_BE(result[1], dst, dstIndex + 4); + Pack.UInt32_To_BE(result[2], dst, dstIndex + 8); + Pack.UInt32_To_BE(result[3], dst, dstIndex + 12); + return BLOCK_SIZE; + } +#endif + + /** + * Does the 12 quad rounds rounds to encrypt the block. + * + * @param A the 00-31 bits of the plaintext block + * @param B the 32-63 bits of the plaintext block + * @param C the 64-95 bits of the plaintext block + * @param D the 96-127 bits of the plaintext block + * @param result the resulting ciphertext + */ + private void CAST_Encipher( + uint A, + uint B, + uint C, + uint D, + uint[] result) + { + for (int i = 0; i < 6; i++) + { + int x = i*4; + // BETA <- Qi(BETA) + C ^= F1(D, _Km[x], _Kr[x]); + B ^= F2(C, _Km[x + 1], _Kr[x + 1]); + A ^= F3(B, _Km[x + 2], _Kr[x + 2]); + D ^= F1(A, _Km[x + 3], _Kr[x + 3]); + } + for (int i = 6; i < 12; i++) + { + int x = i*4; + // BETA <- QBARi(BETA) + D ^= F1(A, _Km[x + 3], _Kr[x + 3]); + A ^= F3(B, _Km[x + 2], _Kr[x + 2]); + B ^= F2(C, _Km[x + 1], _Kr[x + 1]); + C ^= F1(D, _Km[x], _Kr[x]); + } + result[0] = A; + result[1] = B; + result[2] = C; + result[3] = D; + } + + /** + * Does the 12 quad rounds rounds to decrypt the block. + * + * @param A the 00-31 bits of the ciphertext block + * @param B the 32-63 bits of the ciphertext block + * @param C the 64-95 bits of the ciphertext block + * @param D the 96-127 bits of the ciphertext block + * @param result the resulting plaintext + */ + private void CAST_Decipher( + uint A, + uint B, + uint C, + uint D, + uint[] result) + { + for (int i = 0; i < 6; i++) + { + int x = (11-i)*4; + // BETA <- Qi(BETA) + C ^= F1(D, _Km[x], _Kr[x]); + B ^= F2(C, _Km[x + 1], _Kr[x + 1]); + A ^= F3(B, _Km[x + 2], _Kr[x + 2]); + D ^= F1(A, _Km[x + 3], _Kr[x + 3]); + } + for (int i=6; i<12; i++) + { + int x = (11-i)*4; + // BETA <- QBARi(BETA) + D ^= F1(A, _Km[x + 3], _Kr[x + 3]); + A ^= F3(B, _Km[x + 2], _Kr[x + 2]); + B ^= F2(C, _Km[x + 1], _Kr[x + 1]); + C ^= F1(D, _Km[x], _Kr[x]); + } + result[0] = A; + result[1] = B; + result[2] = C; + result[3] = D; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Cast6Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Cast6Engine.cs.meta new file mode 100644 index 000000000..042ffc7c8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Cast6Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d1669c52f77c2147bfccea922c6c851 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ChaCha7539Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ChaCha7539Engine.cs new file mode 100644 index 000000000..255c83760 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ChaCha7539Engine.cs @@ -0,0 +1,525 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER +using System.Runtime.CompilerServices; +#endif +#if NETCOREAPP3_0_OR_GREATER +using System.Buffers.Binary; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + ///

+ /// Implementation of Daniel J. Bernstein's ChaCha stream cipher. + /// + public class ChaCha7539Engine + : Salsa20Engine + { + /// + /// Creates a 20 rounds ChaCha engine. + /// + public ChaCha7539Engine() + : base() + { + } + + public override string AlgorithmName + { + get { return "ChaCha7539"; } + } + + protected override int NonceSize + { + get { return 12; } + } + + protected override void AdvanceCounter() + { + if (++engineState[12] == 0) + throw new InvalidOperationException("attempt to increase counter past 2^32."); + } + + protected override void ResetCounter() + { + engineState[12] = 0; + } + + protected override void SetKey(byte[] keyBytes, byte[] ivBytes) + { + if (keyBytes != null) + { + if (keyBytes.Length != 32) + throw new ArgumentException(AlgorithmName + " requires 256 bit key"); + + PackTauOrSigma(keyBytes.Length, engineState, 0); + + // Key + Pack.LE_To_UInt32(keyBytes, 0, engineState, 4, 8); + } + + // IV + Pack.LE_To_UInt32(ivBytes, 0, engineState, 13, 3); + } + + protected override void GenerateKeyStream(byte[] output) + { + ChaChaEngine.ChachaCore(rounds, engineState, output); + } + + internal void DoFinal(byte[] inBuf, int inOff, int inLen, byte[] outBuf, int outOff) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + if (index != 0) + throw new InvalidOperationException(AlgorithmName + " not in block-aligned state"); + + Check.DataLength(inBuf, inOff, inLen, "input buffer too short"); + Check.OutputLength(outBuf, outOff, inLen, "output buffer too short"); + + while (inLen >= 128) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ProcessBlocks2(inBuf.AsSpan(inOff), outBuf.AsSpan(outOff)); +#else + ProcessBlocks2(inBuf, inOff, outBuf, outOff); +#endif + inOff += 128; + inLen -= 128; + outOff += 128; + } + + if (inLen >= 64) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ImplProcessBlock(inBuf.AsSpan(inOff), outBuf.AsSpan(outOff)); +#else + ImplProcessBlock(inBuf, inOff, outBuf, outOff); +#endif + inOff += 64; + inLen -= 64; + outOff += 64; + } + + if (inLen > 0) + { + GenerateKeyStream(keyStream); + AdvanceCounter(); + + for (int i = 0; i < inLen; ++i) + { + outBuf[outOff + i] = (byte)(inBuf[i + inOff] ^ keyStream[i]); + } + } + + engineState[12] = 0; + + // TODO Prevent re-use if encrypting + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal void ProcessBlock(ReadOnlySpan input, Span output) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + if (LimitExceeded(64U)) + throw new MaxBytesExceededException("2^38 byte limit per IV would be exceeded; Change IV"); + + Debug.Assert(index == 0); + + ImplProcessBlock(input, output); + } + + internal void ProcessBlocks2(ReadOnlySpan input, Span output) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + if (LimitExceeded(128U)) + throw new MaxBytesExceededException("2^38 byte limit per IV would be exceeded; Change IV"); + + Debug.Assert(index == 0); + +#if NETCOREAPP3_0_OR_GREATER + if (Avx2.IsSupported) + { + ImplProcessBlocks2_X86_Avx2(rounds, engineState, input, output); + return; + } + + if (Sse2.IsSupported) + { + ImplProcessBlocks2_X86_Sse2(rounds, engineState, input, output); + return; + } +#endif + + { + ImplProcessBlock(input, output); + ImplProcessBlock(input[64..], output[64..]); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal void ImplProcessBlock(ReadOnlySpan input, Span output) + { + ChaChaEngine.ChachaCore(rounds, engineState, keyStream); + AdvanceCounter(); + + for (int i = 0; i < 64; ++i) + { + output[i] = (byte)(keyStream[i] ^ input[i]); + } + } +#else + internal void ProcessBlock(byte[] inBytes, int inOff, byte[] outBytes, int outOff) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + if (LimitExceeded(64U)) + throw new MaxBytesExceededException("2^38 byte limit per IV would be exceeded; Change IV"); + + Debug.Assert(index == 0); + + ImplProcessBlock(inBytes, inOff, outBytes, outOff); + } + + internal void ProcessBlocks2(byte[] inBytes, int inOff, byte[] outBytes, int outOff) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + if (LimitExceeded(128U)) + throw new MaxBytesExceededException("2^38 byte limit per IV would be exceeded; Change IV"); + + Debug.Assert(index == 0); + + { + ImplProcessBlock(inBytes, inOff, outBytes, outOff); + ImplProcessBlock(inBytes, inOff + 64, outBytes, outOff + 64); + } + } + +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + internal void ImplProcessBlock(byte[] inBuf, int inOff, byte[] outBuf, int outOff) + { + ChaChaEngine.ChachaCore(rounds, engineState, keyStream); + AdvanceCounter(); + + for (int i = 0; i < 64; ++i) + { + outBuf[outOff + i] = (byte)(keyStream[i] ^ inBuf[inOff + i]); + } + } +#endif + +#if NETCOREAPP3_0_OR_GREATER + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void ImplProcessBlocks2_X86_Avx2(int rounds, uint[] state, ReadOnlySpan input, + Span output) + { + if (!Avx2.IsSupported) + throw new PlatformNotSupportedException(); + + Debug.Assert(rounds % 2 == 0); + Debug.Assert(state.Length >= 16); + Debug.Assert(input.Length >= 128); + Debug.Assert(output.Length >= 128); + + var t0 = Load128_UInt32(state.AsSpan()); + var t1 = Load128_UInt32(state.AsSpan(4)); + var t2 = Load128_UInt32(state.AsSpan(8)); + var t3 = Load128_UInt32(state.AsSpan(12)); + ++state[12]; + var t4 = Load128_UInt32(state.AsSpan(12)); + ++state[12]; + + var x0 = Vector256.Create(t0, t0); + var x1 = Vector256.Create(t1, t1); + var x2 = Vector256.Create(t2, t2); + var x3 = Vector256.Create(t3, t4); + + var v0 = x0; + var v1 = x1; + var v2 = x2; + var v3 = x3; + + for (int i = rounds; i > 0; i -= 2) + { + v0 = Avx2.Add(v0, v1); + v3 = Avx2.Xor(v3, v0); + v3 = Avx2.Xor(Avx2.ShiftLeftLogical(v3, 16), Avx2.ShiftRightLogical(v3, 16)); + v2 = Avx2.Add(v2, v3); + v1 = Avx2.Xor(v1, v2); + v1 = Avx2.Xor(Avx2.ShiftLeftLogical(v1, 12), Avx2.ShiftRightLogical(v1, 20)); + v0 = Avx2.Add(v0, v1); + v3 = Avx2.Xor(v3, v0); + v3 = Avx2.Xor(Avx2.ShiftLeftLogical(v3, 8), Avx2.ShiftRightLogical(v3, 24)); + v2 = Avx2.Add(v2, v3); + v1 = Avx2.Xor(v1, v2); + v1 = Avx2.Xor(Avx2.ShiftLeftLogical(v1, 7), Avx2.ShiftRightLogical(v1, 25)); + + v1 = Avx2.Shuffle(v1, 0x39); + v2 = Avx2.Shuffle(v2, 0x4E); + v3 = Avx2.Shuffle(v3, 0x93); + + v0 = Avx2.Add(v0, v1); + v3 = Avx2.Xor(v3, v0); + v3 = Avx2.Xor(Avx2.ShiftLeftLogical(v3, 16), Avx2.ShiftRightLogical(v3, 16)); + v2 = Avx2.Add(v2, v3); + v1 = Avx2.Xor(v1, v2); + v1 = Avx2.Xor(Avx2.ShiftLeftLogical(v1, 12), Avx2.ShiftRightLogical(v1, 20)); + v0 = Avx2.Add(v0, v1); + v3 = Avx2.Xor(v3, v0); + v3 = Avx2.Xor(Avx2.ShiftLeftLogical(v3, 8), Avx2.ShiftRightLogical(v3, 24)); + v2 = Avx2.Add(v2, v3); + v1 = Avx2.Xor(v1, v2); + v1 = Avx2.Xor(Avx2.ShiftLeftLogical(v1, 7), Avx2.ShiftRightLogical(v1, 25)); + + v1 = Avx2.Shuffle(v1, 0x93); + v2 = Avx2.Shuffle(v2, 0x4E); + v3 = Avx2.Shuffle(v3, 0x39); + } + + v0 = Avx2.Add(v0, x0); + v1 = Avx2.Add(v1, x1); + v2 = Avx2.Add(v2, x2); + v3 = Avx2.Add(v3, x3); + + var n0 = Avx2.Permute2x128(v0, v1, 0x20).AsByte(); + var n1 = Avx2.Permute2x128(v2, v3, 0x20).AsByte(); + var n2 = Avx2.Permute2x128(v0, v1, 0x31).AsByte(); + var n3 = Avx2.Permute2x128(v2, v3, 0x31).AsByte(); + + n0 = Avx2.Xor(n0, Load256_Byte(input)); + n1 = Avx2.Xor(n1, Load256_Byte(input[0x20..])); + n2 = Avx2.Xor(n2, Load256_Byte(input[0x40..])); + n3 = Avx2.Xor(n3, Load256_Byte(input[0x60..])); + + Store256_Byte(n0, output); + Store256_Byte(n1, output[0x20..]); + Store256_Byte(n2, output[0x40..]); + Store256_Byte(n3, output[0x60..]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void ImplProcessBlocks2_X86_Sse2(int rounds, uint[] state, ReadOnlySpan input, + Span output) + { + if (!Sse2.IsSupported) + throw new PlatformNotSupportedException(); + + Debug.Assert(rounds % 2 == 0); + Debug.Assert(state.Length >= 16); + Debug.Assert(input.Length >= 128); + Debug.Assert(output.Length >= 128); + + var x0 = Load128_UInt32(state.AsSpan()); + var x1 = Load128_UInt32(state.AsSpan(4)); + var x2 = Load128_UInt32(state.AsSpan(8)); + var x3 = Load128_UInt32(state.AsSpan(12)); + ++state[12]; + + var v0 = x0; + var v1 = x1; + var v2 = x2; + var v3 = x3; + + for (int i = rounds; i > 0; i -= 2) + { + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 16), Sse2.ShiftRightLogical(v3, 16)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 12), Sse2.ShiftRightLogical(v1, 20)); + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 8), Sse2.ShiftRightLogical(v3, 24)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 7), Sse2.ShiftRightLogical(v1, 25)); + + v1 = Sse2.Shuffle(v1, 0x39); + v2 = Sse2.Shuffle(v2, 0x4E); + v3 = Sse2.Shuffle(v3, 0x93); + + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 16), Sse2.ShiftRightLogical(v3, 16)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 12), Sse2.ShiftRightLogical(v1, 20)); + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 8), Sse2.ShiftRightLogical(v3, 24)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 7), Sse2.ShiftRightLogical(v1, 25)); + + v1 = Sse2.Shuffle(v1, 0x93); + v2 = Sse2.Shuffle(v2, 0x4E); + v3 = Sse2.Shuffle(v3, 0x39); + } + + v0 = Sse2.Add(v0, x0); + v1 = Sse2.Add(v1, x1); + v2 = Sse2.Add(v2, x2); + v3 = Sse2.Add(v3, x3); + + var n0 = Load128_Byte(input); + var n1 = Load128_Byte(input[0x10..]); + var n2 = Load128_Byte(input[0x20..]); + var n3 = Load128_Byte(input[0x30..]); + + n0 = Sse2.Xor(n0, v0.AsByte()); + n1 = Sse2.Xor(n1, v1.AsByte()); + n2 = Sse2.Xor(n2, v2.AsByte()); + n3 = Sse2.Xor(n3, v3.AsByte()); + + Store128_Byte(n0, output); + Store128_Byte(n1, output[0x10..]); + Store128_Byte(n2, output[0x20..]); + Store128_Byte(n3, output[0x30..]); + + x3 = Load128_UInt32(state.AsSpan(12)); + ++state[12]; + + v0 = x0; + v1 = x1; + v2 = x2; + v3 = x3; + + for (int i = rounds; i > 0; i -= 2) + { + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 16), Sse2.ShiftRightLogical(v3, 16)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 12), Sse2.ShiftRightLogical(v1, 20)); + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 8), Sse2.ShiftRightLogical(v3, 24)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 7), Sse2.ShiftRightLogical(v1, 25)); + + v1 = Sse2.Shuffle(v1, 0x39); + v2 = Sse2.Shuffle(v2, 0x4E); + v3 = Sse2.Shuffle(v3, 0x93); + + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 16), Sse2.ShiftRightLogical(v3, 16)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 12), Sse2.ShiftRightLogical(v1, 20)); + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 8), Sse2.ShiftRightLogical(v3, 24)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 7), Sse2.ShiftRightLogical(v1, 25)); + + v1 = Sse2.Shuffle(v1, 0x93); + v2 = Sse2.Shuffle(v2, 0x4E); + v3 = Sse2.Shuffle(v3, 0x39); + } + + v0 = Sse2.Add(v0, x0); + v1 = Sse2.Add(v1, x1); + v2 = Sse2.Add(v2, x2); + v3 = Sse2.Add(v3, x3); + + n0 = Load128_Byte(input[0x40..]); + n1 = Load128_Byte(input[0x50..]); + n2 = Load128_Byte(input[0x60..]); + n3 = Load128_Byte(input[0x70..]); + + n0 = Sse2.Xor(n0, v0.AsByte()); + n1 = Sse2.Xor(n1, v1.AsByte()); + n2 = Sse2.Xor(n2, v2.AsByte()); + n3 = Sse2.Xor(n3, v3.AsByte()); + + Store128_Byte(n0, output[0x40..]); + Store128_Byte(n1, output[0x50..]); + Store128_Byte(n2, output[0x60..]); + Store128_Byte(n3, output[0x70..]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static Vector128 Load128_Byte(ReadOnlySpan t) + { + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 16) + return MemoryMarshal.Read>(t); + + return Vector128.Create( + BinaryPrimitives.ReadUInt64LittleEndian(t[..8]), + BinaryPrimitives.ReadUInt64LittleEndian(t[8..]) + ).AsByte(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static Vector128 Load128_UInt32(ReadOnlySpan t) + { + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 16) + return MemoryMarshal.Read>(MemoryMarshal.AsBytes(t)); + + return Vector128.Create(t[0], t[1], t[2], t[3]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static Vector256 Load256_Byte(ReadOnlySpan t) + { + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 32) + return MemoryMarshal.Read>(t); + + return Vector256.Create( + BinaryPrimitives.ReadUInt64LittleEndian(t[ 0.. 8]), + BinaryPrimitives.ReadUInt64LittleEndian(t[ 8..16]), + BinaryPrimitives.ReadUInt64LittleEndian(t[16..24]), + BinaryPrimitives.ReadUInt64LittleEndian(t[24..32]) + ).AsByte(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void Store128_Byte(Vector128 s, Span t) + { + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 16) + { + MemoryMarshal.Write(t, ref s); + return; + } + + var u = s.AsUInt64(); + BinaryPrimitives.WriteUInt64LittleEndian(t[..8], u.GetElement(0)); + BinaryPrimitives.WriteUInt64LittleEndian(t[8..], u.GetElement(1)); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void Store256_Byte(Vector256 s, Span t) + { + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 32) + { + MemoryMarshal.Write(t, ref s); + return; + } + + var u = s.AsUInt64(); + BinaryPrimitives.WriteUInt64LittleEndian(t[ 0.. 8], u.GetElement(0)); + BinaryPrimitives.WriteUInt64LittleEndian(t[ 8..16], u.GetElement(1)); + BinaryPrimitives.WriteUInt64LittleEndian(t[16..24], u.GetElement(2)); + BinaryPrimitives.WriteUInt64LittleEndian(t[24..32], u.GetElement(3)); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ChaCha7539Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ChaCha7539Engine.cs.meta new file mode 100644 index 000000000..697fe158f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ChaCha7539Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a57a7d360758b345a64cca79b830e0c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ChaChaEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ChaChaEngine.cs new file mode 100644 index 000000000..160d03cf3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ChaChaEngine.cs @@ -0,0 +1,245 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +#if NETCOREAPP3_0_OR_GREATER +using System.Buffers.Binary; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /// + /// Implementation of Daniel J. Bernstein's ChaCha stream cipher. + /// + public class ChaChaEngine + : Salsa20Engine + { + /// + /// Creates a 20 rounds ChaCha engine. + /// + public ChaChaEngine() + { + } + + /// + /// Creates a ChaCha engine with a specific number of rounds. + /// + /// the number of rounds (must be an even number). + public ChaChaEngine(int rounds) + : base(rounds) + { + } + + public override string AlgorithmName + { + get { return "ChaCha" + rounds; } + } + + protected override void AdvanceCounter() + { + if (++engineState[12] == 0) + { + ++engineState[13]; + } + } + + protected override void ResetCounter() + { + engineState[12] = engineState[13] = 0; + } + + protected override void SetKey(byte[] keyBytes, byte[] ivBytes) + { + if (keyBytes != null) + { + if ((keyBytes.Length != 16) && (keyBytes.Length != 32)) + throw new ArgumentException(AlgorithmName + " requires 128 bit or 256 bit key"); + + PackTauOrSigma(keyBytes.Length, engineState, 0); + + // Key + Pack.LE_To_UInt32(keyBytes, 0, engineState, 4, 4); + Pack.LE_To_UInt32(keyBytes, keyBytes.Length - 16, engineState, 8, 4); + } + + // IV + Pack.LE_To_UInt32(ivBytes, 0, engineState, 14, 2); + } + + protected override void GenerateKeyStream(byte[] output) + { + ChachaCore(rounds, engineState, output); + } + + internal static void ChachaCore(int rounds, uint[] input, byte[] output) + { + Debug.Assert(rounds % 2 == 0); + Debug.Assert(input.Length >= 16); + Debug.Assert(output.Length >= 64); + +#if NETCOREAPP3_0_OR_GREATER + if (Sse2.IsSupported) + { + var x0 = Load128_UInt32(input.AsSpan()); + var x1 = Load128_UInt32(input.AsSpan(4)); + var x2 = Load128_UInt32(input.AsSpan(8)); + var x3 = Load128_UInt32(input.AsSpan(12)); + + var v0 = x0; + var v1 = x1; + var v2 = x2; + var v3 = x3; + + for (int i = rounds; i > 0; i -= 2) + { + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 16), Sse2.ShiftRightLogical(v3, 16)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 12), Sse2.ShiftRightLogical(v1, 20)); + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 8), Sse2.ShiftRightLogical(v3, 24)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 7), Sse2.ShiftRightLogical(v1, 25)); + + v1 = Sse2.Shuffle(v1, 0x39); + v2 = Sse2.Shuffle(v2, 0x4E); + v3 = Sse2.Shuffle(v3, 0x93); + + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 16), Sse2.ShiftRightLogical(v3, 16)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 12), Sse2.ShiftRightLogical(v1, 20)); + v0 = Sse2.Add(v0, v1); + v3 = Sse2.Xor(v3, v0); + v3 = Sse2.Xor(Sse2.ShiftLeftLogical(v3, 8), Sse2.ShiftRightLogical(v3, 24)); + v2 = Sse2.Add(v2, v3); + v1 = Sse2.Xor(v1, v2); + v1 = Sse2.Xor(Sse2.ShiftLeftLogical(v1, 7), Sse2.ShiftRightLogical(v1, 25)); + + v1 = Sse2.Shuffle(v1, 0x93); + v2 = Sse2.Shuffle(v2, 0x4E); + v3 = Sse2.Shuffle(v3, 0x39); + } + + v0 = Sse2.Add(v0, x0); + v1 = Sse2.Add(v1, x1); + v2 = Sse2.Add(v2, x2); + v3 = Sse2.Add(v3, x3); + + Store128_UInt32(v0, output.AsSpan()); + Store128_UInt32(v1, output.AsSpan(0x10)); + Store128_UInt32(v2, output.AsSpan(0x20)); + Store128_UInt32(v3, output.AsSpan(0x30)); + return; + } +#endif + + { + uint x00 = input[ 0], x01 = input[ 1], x02 = input[ 2], x03 = input[ 3]; + uint x04 = input[ 4], x05 = input[ 5], x06 = input[ 6], x07 = input[ 7]; + uint x08 = input[ 8], x09 = input[ 9], x10 = input[10], x11 = input[11]; + uint x12 = input[12], x13 = input[13], x14 = input[14], x15 = input[15]; + + for (int i = rounds; i > 0; i -= 2) + { + x00 += x04; x12 = Integers.RotateLeft(x12 ^ x00, 16); + x01 += x05; x13 = Integers.RotateLeft(x13 ^ x01, 16); + x02 += x06; x14 = Integers.RotateLeft(x14 ^ x02, 16); + x03 += x07; x15 = Integers.RotateLeft(x15 ^ x03, 16); + + x08 += x12; x04 = Integers.RotateLeft(x04 ^ x08, 12); + x09 += x13; x05 = Integers.RotateLeft(x05 ^ x09, 12); + x10 += x14; x06 = Integers.RotateLeft(x06 ^ x10, 12); + x11 += x15; x07 = Integers.RotateLeft(x07 ^ x11, 12); + + x00 += x04; x12 = Integers.RotateLeft(x12 ^ x00, 8); + x01 += x05; x13 = Integers.RotateLeft(x13 ^ x01, 8); + x02 += x06; x14 = Integers.RotateLeft(x14 ^ x02, 8); + x03 += x07; x15 = Integers.RotateLeft(x15 ^ x03, 8); + + x08 += x12; x04 = Integers.RotateLeft(x04 ^ x08, 7); + x09 += x13; x05 = Integers.RotateLeft(x05 ^ x09, 7); + x10 += x14; x06 = Integers.RotateLeft(x06 ^ x10, 7); + x11 += x15; x07 = Integers.RotateLeft(x07 ^ x11, 7); + + x00 += x05; x15 = Integers.RotateLeft(x15 ^ x00, 16); + x01 += x06; x12 = Integers.RotateLeft(x12 ^ x01, 16); + x02 += x07; x13 = Integers.RotateLeft(x13 ^ x02, 16); + x03 += x04; x14 = Integers.RotateLeft(x14 ^ x03, 16); + + x10 += x15; x05 = Integers.RotateLeft(x05 ^ x10, 12); + x11 += x12; x06 = Integers.RotateLeft(x06 ^ x11, 12); + x08 += x13; x07 = Integers.RotateLeft(x07 ^ x08, 12); + x09 += x14; x04 = Integers.RotateLeft(x04 ^ x09, 12); + + x00 += x05; x15 = Integers.RotateLeft(x15 ^ x00, 8); + x01 += x06; x12 = Integers.RotateLeft(x12 ^ x01, 8); + x02 += x07; x13 = Integers.RotateLeft(x13 ^ x02, 8); + x03 += x04; x14 = Integers.RotateLeft(x14 ^ x03, 8); + + x10 += x15; x05 = Integers.RotateLeft(x05 ^ x10, 7); + x11 += x12; x06 = Integers.RotateLeft(x06 ^ x11, 7); + x08 += x13; x07 = Integers.RotateLeft(x07 ^ x08, 7); + x09 += x14; x04 = Integers.RotateLeft(x04 ^ x09, 7); + } + + Pack.UInt32_To_LE(x00 + input[ 0], output, 0); + Pack.UInt32_To_LE(x01 + input[ 1], output, 4); + Pack.UInt32_To_LE(x02 + input[ 2], output, 8); + Pack.UInt32_To_LE(x03 + input[ 3], output, 12); + Pack.UInt32_To_LE(x04 + input[ 4], output, 16); + Pack.UInt32_To_LE(x05 + input[ 5], output, 20); + Pack.UInt32_To_LE(x06 + input[ 6], output, 24); + Pack.UInt32_To_LE(x07 + input[ 7], output, 28); + Pack.UInt32_To_LE(x08 + input[ 8], output, 32); + Pack.UInt32_To_LE(x09 + input[ 9], output, 36); + Pack.UInt32_To_LE(x10 + input[10], output, 40); + Pack.UInt32_To_LE(x11 + input[11], output, 44); + Pack.UInt32_To_LE(x12 + input[12], output, 48); + Pack.UInt32_To_LE(x13 + input[13], output, 52); + Pack.UInt32_To_LE(x14 + input[14], output, 56); + Pack.UInt32_To_LE(x15 + input[15], output, 60); + } + } + +#if NETCOREAPP3_0_OR_GREATER + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static Vector128 Load128_UInt32(ReadOnlySpan t) + { + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 16) + return MemoryMarshal.Read>(MemoryMarshal.AsBytes(t)); + + return Vector128.Create(t[0], t[1], t[2], t[3]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void Store128_UInt32(Vector128 s, Span t) + { + if (BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 16) + { + MemoryMarshal.Write(t, ref s); + return; + } + + var u = s.AsUInt64(); + BinaryPrimitives.WriteUInt64LittleEndian(t[..8], u.GetElement(0)); + BinaryPrimitives.WriteUInt64LittleEndian(t[8..], u.GetElement(1)); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ChaChaEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ChaChaEngine.cs.meta new file mode 100644 index 000000000..22c4b168a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ChaChaEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 64e919c1d89f77543913b622c89de806 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/DesEdeEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/DesEdeEngine.cs new file mode 100644 index 000000000..c4636d448 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/DesEdeEngine.cs @@ -0,0 +1,133 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /// A class that provides a basic DESede (or Triple DES) engine. + public class DesEdeEngine + : DesEngine + { + private int[] workingKey1, workingKey2, workingKey3; + private bool forEncryption; + + /** + * initialise a DESede cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param parameters the parameters required to set up the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public override void Init( + bool forEncryption, + ICipherParameters parameters) + { + if (!(parameters is KeyParameter)) + throw new ArgumentException("invalid parameter passed to DESede init - " + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + + byte[] keyMaster = ((KeyParameter)parameters).GetKey(); + if (keyMaster.Length != 24 && keyMaster.Length != 16) + throw new ArgumentException("key size must be 16 or 24 bytes."); + + this.forEncryption = forEncryption; + + byte[] key1 = new byte[8]; + Array.Copy(keyMaster, 0, key1, 0, key1.Length); + workingKey1 = GenerateWorkingKey(forEncryption, key1); + + byte[] key2 = new byte[8]; + Array.Copy(keyMaster, 8, key2, 0, key2.Length); + workingKey2 = GenerateWorkingKey(!forEncryption, key2); + + if (keyMaster.Length == 24) + { + byte[] key3 = new byte[8]; + Array.Copy(keyMaster, 16, key3, 0, key3.Length); + workingKey3 = GenerateWorkingKey(forEncryption, key3); + } + else // 16 byte key + { + workingKey3 = workingKey1; + } + } + + public override string AlgorithmName + { + get { return "DESede"; } + } + + public override int GetBlockSize() + { + return BLOCK_SIZE; + } + + public override int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (workingKey1 == null) + throw new InvalidOperationException("DESede engine not initialised"); + + Check.DataLength(input, inOff, BLOCK_SIZE, "input buffer too short"); + Check.OutputLength(output, outOff, BLOCK_SIZE, "output buffer too short"); + + uint hi32 = Pack.BE_To_UInt32(input, inOff); + uint lo32 = Pack.BE_To_UInt32(input, inOff + 4); + + if (forEncryption) + { + DesFunc(workingKey1, ref hi32, ref lo32); + DesFunc(workingKey2, ref hi32, ref lo32); + DesFunc(workingKey3, ref hi32, ref lo32); + } + else + { + DesFunc(workingKey3, ref hi32, ref lo32); + DesFunc(workingKey2, ref hi32, ref lo32); + DesFunc(workingKey1, ref hi32, ref lo32); + } + + Pack.UInt32_To_BE(hi32, output, outOff); + Pack.UInt32_To_BE(lo32, output, outOff + 4); + + return BLOCK_SIZE; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int ProcessBlock(ReadOnlySpan input, Span output) + { + if (workingKey1 == null) + throw new InvalidOperationException("DESede engine not initialised"); + + Check.DataLength(input, BLOCK_SIZE, "input buffer too short"); + Check.OutputLength(output, BLOCK_SIZE, "output buffer too short"); + + uint hi32 = Pack.BE_To_UInt32(input); + uint lo32 = Pack.BE_To_UInt32(input[4..]); + + if (forEncryption) + { + DesFunc(workingKey1, ref hi32, ref lo32); + DesFunc(workingKey2, ref hi32, ref lo32); + DesFunc(workingKey3, ref hi32, ref lo32); + } + else + { + DesFunc(workingKey3, ref hi32, ref lo32); + DesFunc(workingKey2, ref hi32, ref lo32); + DesFunc(workingKey1, ref hi32, ref lo32); + } + + Pack.UInt32_To_BE(hi32, output); + Pack.UInt32_To_BE(lo32, output[4..]); + + return BLOCK_SIZE; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/DesEdeEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/DesEdeEngine.cs.meta new file mode 100644 index 000000000..464de3ca4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/DesEdeEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 40f7755f6290bac4fa55c0f4ad40923a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/DesEdeWrapEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/DesEdeWrapEngine.cs new file mode 100644 index 000000000..b7b9c5023 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/DesEdeWrapEngine.cs @@ -0,0 +1,325 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * Wrap keys according to + * + * draft-ietf-smime-key-wrap-01.txt. + *

+ * Note: + *

    + *
  • this is based on a draft, and as such is subject to change - don't use this class for anything requiring long term storage.
  • + *
  • if you are using this to wrap triple-des keys you need to set the + * parity bits on the key and, if it's a two-key triple-des key, pad it + * yourself.
  • + *
+ *

+ */ + public class DesEdeWrapEngine + : IWrapper + { + /** Field engine */ + private CbcBlockCipher engine; + /** Field param */ + private KeyParameter param; + /** Field paramPlusIV */ + private ParametersWithIV paramPlusIV; + /** Field iv */ + private byte[] iv; + /** Field forWrapping */ + private bool forWrapping; + /** Field IV2 */ + private static readonly byte[] IV2 = { (byte) 0x4a, (byte) 0xdd, (byte) 0xa2, + (byte) 0x2c, (byte) 0x79, (byte) 0xe8, + (byte) 0x21, (byte) 0x05 }; + + // + // checksum digest + // + private readonly IDigest sha1 = new Sha1Digest(); + private readonly byte[] digest = new byte[20]; + + /** + * Method init + * + * @param forWrapping + * @param param + */ + public virtual void Init( + bool forWrapping, + ICipherParameters parameters) + { + this.forWrapping = forWrapping; + this.engine = new CbcBlockCipher(new DesEdeEngine()); + + SecureRandom sr; + if (parameters is ParametersWithRandom pr) + { + parameters = pr.Parameters; + sr = pr.Random; + } + else + { + sr = CryptoServicesRegistrar.GetSecureRandom(); + } + + if (parameters is KeyParameter) + { + this.param = (KeyParameter) parameters; + if (this.forWrapping) + { + // Hm, we have no IV but we want to wrap ?!? + // well, then we have to create our own IV. + this.iv = new byte[8]; + sr.NextBytes(iv); + + this.paramPlusIV = new ParametersWithIV(this.param, this.iv); + } + } + else if (parameters is ParametersWithIV) + { + if (!forWrapping) + throw new ArgumentException("You should not supply an IV for unwrapping"); + + this.paramPlusIV = (ParametersWithIV) parameters; + this.iv = this.paramPlusIV.GetIV(); + this.param = (KeyParameter) this.paramPlusIV.Parameters; + + if (this.iv.Length != 8) + throw new ArgumentException("IV is not 8 octets", "parameters"); + } + } + + /** + * Method GetAlgorithmName + * + * @return + */ + public virtual string AlgorithmName + { + get { return "DESede"; } + } + + /** + * Method wrap + * + * @param in + * @param inOff + * @param inLen + * @return + */ + public virtual byte[] Wrap( + byte[] input, + int inOff, + int length) + { + if (!forWrapping) + { + throw new InvalidOperationException("Not initialized for wrapping"); + } + + byte[] keyToBeWrapped = new byte[length]; + Array.Copy(input, inOff, keyToBeWrapped, 0, length); + + // Compute the CMS Key Checksum, (section 5.6.1), call this CKS. + byte[] CKS = CalculateCmsKeyChecksum(keyToBeWrapped); + + // Let WKCKS = WK || CKS where || is concatenation. + byte[] WKCKS = new byte[keyToBeWrapped.Length + CKS.Length]; + Array.Copy(keyToBeWrapped, 0, WKCKS, 0, keyToBeWrapped.Length); + Array.Copy(CKS, 0, WKCKS, keyToBeWrapped.Length, CKS.Length); + + // Encrypt WKCKS in CBC mode using KEK as the key and IV as the + // initialization vector. Call the results TEMP1. + + int blockSize = engine.GetBlockSize(); + + if (WKCKS.Length % blockSize != 0) + throw new InvalidOperationException("Not multiple of block length"); + + engine.Init(true, paramPlusIV); + + byte [] TEMP1 = new byte[WKCKS.Length]; + + for (int currentBytePos = 0; currentBytePos != WKCKS.Length; currentBytePos += blockSize) + { + engine.ProcessBlock(WKCKS, currentBytePos, TEMP1, currentBytePos); + } + + // Let TEMP2 = IV || TEMP1. + byte[] TEMP2 = new byte[this.iv.Length + TEMP1.Length]; + Array.Copy(this.iv, 0, TEMP2, 0, this.iv.Length); + Array.Copy(TEMP1, 0, TEMP2, this.iv.Length, TEMP1.Length); + + // Reverse the order of the octets in TEMP2 and call the result TEMP3. + byte[] TEMP3 = reverse(TEMP2); + + // Encrypt TEMP3 in CBC mode using the KEK and an initialization vector + // of 0x 4a dd a2 2c 79 e8 21 05. The resulting cipher text is the desired + // result. It is 40 octets long if a 168 bit key is being wrapped. + ParametersWithIV param2 = new ParametersWithIV(this.param, IV2); + this.engine.Init(true, param2); + + for (int currentBytePos = 0; currentBytePos != TEMP3.Length; currentBytePos += blockSize) + { + engine.ProcessBlock(TEMP3, currentBytePos, TEMP3, currentBytePos); + } + + return TEMP3; + } + + /** + * Method unwrap + * + * @param in + * @param inOff + * @param inLen + * @return + * @throws InvalidCipherTextException + */ + public virtual byte[] Unwrap( + byte[] input, + int inOff, + int length) + { + if (forWrapping) + { + throw new InvalidOperationException("Not set for unwrapping"); + } + if (input == null) + { + throw new InvalidCipherTextException("Null pointer as ciphertext"); + } + + int blockSize = engine.GetBlockSize(); + + if (length % blockSize != 0) + { + throw new InvalidCipherTextException("Ciphertext not multiple of " + blockSize); + } + + /* + // Check if the length of the cipher text is reasonable given the key + // type. It must be 40 bytes for a 168 bit key and either 32, 40, or + // 48 bytes for a 128, 192, or 256 bit key. If the length is not supported + // or inconsistent with the algorithm for which the key is intended, + // return error. + // + // we do not accept 168 bit keys. it has to be 192 bit. + int lengthA = (estimatedKeyLengthInBit / 8) + 16; + int lengthB = estimatedKeyLengthInBit % 8; + if ((lengthA != keyToBeUnwrapped.Length) || (lengthB != 0)) { + throw new XMLSecurityException("empty"); + } + */ + + // Decrypt the cipher text with TRIPLedeS in CBC mode using the KEK + // and an initialization vector (IV) of 0x4adda22c79e82105. Call the output TEMP3. + ParametersWithIV param2 = new ParametersWithIV(this.param, IV2); + this.engine.Init(false, param2); + + byte [] TEMP3 = new byte[length]; + + for (int currentBytePos = 0; currentBytePos != TEMP3.Length; currentBytePos += blockSize) + { + engine.ProcessBlock(input, inOff + currentBytePos, TEMP3, currentBytePos); + } + + // Reverse the order of the octets in TEMP3 and call the result TEMP2. + byte[] TEMP2 = reverse(TEMP3); + + // Decompose TEMP2 into IV, the first 8 octets, and TEMP1, the remaining octets. + this.iv = new byte[8]; + byte[] TEMP1 = new byte[TEMP2.Length - 8]; + Array.Copy(TEMP2, 0, this.iv, 0, 8); + Array.Copy(TEMP2, 8, TEMP1, 0, TEMP2.Length - 8); + + // Decrypt TEMP1 using TRIPLedeS in CBC mode using the KEK and the IV + // found in the previous step. Call the result WKCKS. + this.paramPlusIV = new ParametersWithIV(this.param, this.iv); + this.engine.Init(false, this.paramPlusIV); + + byte[] WKCKS = new byte[TEMP1.Length]; + + for (int currentBytePos = 0; currentBytePos != WKCKS.Length; currentBytePos += blockSize) + { + engine.ProcessBlock(TEMP1, currentBytePos, WKCKS, currentBytePos); + } + + // Decompose WKCKS. CKS is the last 8 octets and WK, the wrapped key, are + // those octets before the CKS. + byte[] result = new byte[WKCKS.Length - 8]; + byte[] CKStoBeVerified = new byte[8]; + Array.Copy(WKCKS, 0, result, 0, WKCKS.Length - 8); + Array.Copy(WKCKS, WKCKS.Length - 8, CKStoBeVerified, 0, 8); + + // Calculate a CMS Key Checksum, (section 5.6.1), over the WK and compare + // with the CKS extracted in the above step. If they are not equal, return error. + if (!CheckCmsKeyChecksum(result, CKStoBeVerified)) { + throw new InvalidCipherTextException( + "Checksum inside ciphertext is corrupted"); + } + + // WK is the wrapped key, now extracted for use in data decryption. + return result; + } + + /** + * Some key wrap algorithms make use of the Key Checksum defined + * in CMS [CMS-Algorithms]. This is used to provide an integrity + * check value for the key being wrapped. The algorithm is + * + * - Compute the 20 octet SHA-1 hash on the key being wrapped. + * - Use the first 8 octets of this hash as the checksum value. + * + * @param key + * @return + * @throws Exception + * @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + */ + private byte[] CalculateCmsKeyChecksum( + byte[] key) + { + sha1.BlockUpdate(key, 0, key.Length); + sha1.DoFinal(digest, 0); + + byte[] result = new byte[8]; + Array.Copy(digest, 0, result, 0, 8); + return result; + } + + /** + * @param key + * @param checksum + * @return + * @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + */ + private bool CheckCmsKeyChecksum( + byte[] key, + byte[] checksum) + { + return Arrays.ConstantTimeAreEqual(CalculateCmsKeyChecksum(key), checksum); + } + + private static byte[] reverse(byte[] bs) + { + byte[] result = new byte[bs.Length]; + for (int i = 0; i < bs.Length; i++) + { + result[i] = bs[bs.Length - (i + 1)]; + } + return result; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/DesEdeWrapEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/DesEdeWrapEngine.cs.meta new file mode 100644 index 000000000..417f67bf5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/DesEdeWrapEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f34c10037e77a294fa8cf56041b48c29 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/DesEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/DesEngine.cs new file mode 100644 index 000000000..9842c4e04 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/DesEngine.cs @@ -0,0 +1,485 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /// A class that provides a basic DES engine. + public class DesEngine + : IBlockCipher + { + internal const int BLOCK_SIZE = 8; + + private int[] workingKey; + + public virtual int[] GetWorkingKey() + { + return workingKey; + } + + /** + * initialise a DES cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param parameters the parameters required to set up the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public virtual void Init( + bool forEncryption, + ICipherParameters parameters) + { + if (!(parameters is KeyParameter keyParameter)) + throw new ArgumentException("invalid parameter passed to DES init - " + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + + workingKey = GenerateWorkingKey(forEncryption, keyParameter.GetKey()); + } + + public virtual string AlgorithmName + { + get { return "DES"; } + } + + public virtual int GetBlockSize() + { + return BLOCK_SIZE; + } + + public virtual int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (workingKey == null) + throw new InvalidOperationException("DES engine not initialised"); + + Check.DataLength(input, inOff, BLOCK_SIZE, "input buffer too short"); + Check.OutputLength(output, outOff, BLOCK_SIZE, "output buffer too short"); + + uint hi32 = Pack.BE_To_UInt32(input, inOff); + uint lo32 = Pack.BE_To_UInt32(input, inOff + 4); + + DesFunc(workingKey, ref hi32, ref lo32); + + Pack.UInt32_To_BE(hi32, output, outOff); + Pack.UInt32_To_BE(lo32, output, outOff + 4); + + return BLOCK_SIZE; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + if (workingKey == null) + throw new InvalidOperationException("DES engine not initialised"); + + Check.DataLength(input, BLOCK_SIZE, "input buffer too short"); + Check.OutputLength(output, BLOCK_SIZE, "output buffer too short"); + + uint hi32 = Pack.BE_To_UInt32(input); + uint lo32 = Pack.BE_To_UInt32(input[4..]); + + DesFunc(workingKey, ref hi32, ref lo32); + + Pack.UInt32_To_BE(hi32, output); + Pack.UInt32_To_BE(lo32, output[4..]); + + return BLOCK_SIZE; + } +#endif + + /** + * what follows is mainly taken from "Applied Cryptography", by + * Bruce Schneier, however it also bears great resemblance to Richard + * Outerbridge's D3DES... + */ + +// private static readonly short[] Df_Key = +// { +// 0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef, +// 0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10, +// 0x89,0xab,0xcd,0xef,0x01,0x23,0x45,0x67 +// }; + + private static readonly short[] bytebit = + { + 128, 64, 32, 16, 8, 4, 2, 1 + }; + + private static readonly int[] bigbyte = + { + 0x800000, 0x400000, 0x200000, 0x100000, + 0x80000, 0x40000, 0x20000, 0x10000, + 0x8000, 0x4000, 0x2000, 0x1000, + 0x800, 0x400, 0x200, 0x100, + 0x80, 0x40, 0x20, 0x10, + 0x8, 0x4, 0x2, 0x1 + }; + + /* + * Use the key schedule specified in the Standard (ANSI X3.92-1981). + */ + private static readonly byte[] pc1 = + { + 56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, + 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, + 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, + 13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3 + }; + + private static readonly byte[] totrot = + { + 1, 2, 4, 6, 8, 10, 12, 14, + 15, 17, 19, 21, 23, 25, 27, 28 + }; + + private static readonly byte[] pc2 = + { + 13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9, + 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1, + 40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47, + 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31 + }; + + private static readonly uint[] SP1 = + { + 0x01010400, 0x00000000, 0x00010000, 0x01010404, + 0x01010004, 0x00010404, 0x00000004, 0x00010000, + 0x00000400, 0x01010400, 0x01010404, 0x00000400, + 0x01000404, 0x01010004, 0x01000000, 0x00000004, + 0x00000404, 0x01000400, 0x01000400, 0x00010400, + 0x00010400, 0x01010000, 0x01010000, 0x01000404, + 0x00010004, 0x01000004, 0x01000004, 0x00010004, + 0x00000000, 0x00000404, 0x00010404, 0x01000000, + 0x00010000, 0x01010404, 0x00000004, 0x01010000, + 0x01010400, 0x01000000, 0x01000000, 0x00000400, + 0x01010004, 0x00010000, 0x00010400, 0x01000004, + 0x00000400, 0x00000004, 0x01000404, 0x00010404, + 0x01010404, 0x00010004, 0x01010000, 0x01000404, + 0x01000004, 0x00000404, 0x00010404, 0x01010400, + 0x00000404, 0x01000400, 0x01000400, 0x00000000, + 0x00010004, 0x00010400, 0x00000000, 0x01010004 + }; + + private static readonly uint[] SP2 = + { + 0x80108020, 0x80008000, 0x00008000, 0x00108020, + 0x00100000, 0x00000020, 0x80100020, 0x80008020, + 0x80000020, 0x80108020, 0x80108000, 0x80000000, + 0x80008000, 0x00100000, 0x00000020, 0x80100020, + 0x00108000, 0x00100020, 0x80008020, 0x00000000, + 0x80000000, 0x00008000, 0x00108020, 0x80100000, + 0x00100020, 0x80000020, 0x00000000, 0x00108000, + 0x00008020, 0x80108000, 0x80100000, 0x00008020, + 0x00000000, 0x00108020, 0x80100020, 0x00100000, + 0x80008020, 0x80100000, 0x80108000, 0x00008000, + 0x80100000, 0x80008000, 0x00000020, 0x80108020, + 0x00108020, 0x00000020, 0x00008000, 0x80000000, + 0x00008020, 0x80108000, 0x00100000, 0x80000020, + 0x00100020, 0x80008020, 0x80000020, 0x00100020, + 0x00108000, 0x00000000, 0x80008000, 0x00008020, + 0x80000000, 0x80100020, 0x80108020, 0x00108000 + }; + + private static readonly uint[] SP3 = + { + 0x00000208, 0x08020200, 0x00000000, 0x08020008, + 0x08000200, 0x00000000, 0x00020208, 0x08000200, + 0x00020008, 0x08000008, 0x08000008, 0x00020000, + 0x08020208, 0x00020008, 0x08020000, 0x00000208, + 0x08000000, 0x00000008, 0x08020200, 0x00000200, + 0x00020200, 0x08020000, 0x08020008, 0x00020208, + 0x08000208, 0x00020200, 0x00020000, 0x08000208, + 0x00000008, 0x08020208, 0x00000200, 0x08000000, + 0x08020200, 0x08000000, 0x00020008, 0x00000208, + 0x00020000, 0x08020200, 0x08000200, 0x00000000, + 0x00000200, 0x00020008, 0x08020208, 0x08000200, + 0x08000008, 0x00000200, 0x00000000, 0x08020008, + 0x08000208, 0x00020000, 0x08000000, 0x08020208, + 0x00000008, 0x00020208, 0x00020200, 0x08000008, + 0x08020000, 0x08000208, 0x00000208, 0x08020000, + 0x00020208, 0x00000008, 0x08020008, 0x00020200 + }; + + private static readonly uint[] SP4 = + { + 0x00802001, 0x00002081, 0x00002081, 0x00000080, + 0x00802080, 0x00800081, 0x00800001, 0x00002001, + 0x00000000, 0x00802000, 0x00802000, 0x00802081, + 0x00000081, 0x00000000, 0x00800080, 0x00800001, + 0x00000001, 0x00002000, 0x00800000, 0x00802001, + 0x00000080, 0x00800000, 0x00002001, 0x00002080, + 0x00800081, 0x00000001, 0x00002080, 0x00800080, + 0x00002000, 0x00802080, 0x00802081, 0x00000081, + 0x00800080, 0x00800001, 0x00802000, 0x00802081, + 0x00000081, 0x00000000, 0x00000000, 0x00802000, + 0x00002080, 0x00800080, 0x00800081, 0x00000001, + 0x00802001, 0x00002081, 0x00002081, 0x00000080, + 0x00802081, 0x00000081, 0x00000001, 0x00002000, + 0x00800001, 0x00002001, 0x00802080, 0x00800081, + 0x00002001, 0x00002080, 0x00800000, 0x00802001, + 0x00000080, 0x00800000, 0x00002000, 0x00802080 + }; + + private static readonly uint[] SP5 = + { + 0x00000100, 0x02080100, 0x02080000, 0x42000100, + 0x00080000, 0x00000100, 0x40000000, 0x02080000, + 0x40080100, 0x00080000, 0x02000100, 0x40080100, + 0x42000100, 0x42080000, 0x00080100, 0x40000000, + 0x02000000, 0x40080000, 0x40080000, 0x00000000, + 0x40000100, 0x42080100, 0x42080100, 0x02000100, + 0x42080000, 0x40000100, 0x00000000, 0x42000000, + 0x02080100, 0x02000000, 0x42000000, 0x00080100, + 0x00080000, 0x42000100, 0x00000100, 0x02000000, + 0x40000000, 0x02080000, 0x42000100, 0x40080100, + 0x02000100, 0x40000000, 0x42080000, 0x02080100, + 0x40080100, 0x00000100, 0x02000000, 0x42080000, + 0x42080100, 0x00080100, 0x42000000, 0x42080100, + 0x02080000, 0x00000000, 0x40080000, 0x42000000, + 0x00080100, 0x02000100, 0x40000100, 0x00080000, + 0x00000000, 0x40080000, 0x02080100, 0x40000100 + }; + + private static readonly uint[] SP6 = + { + 0x20000010, 0x20400000, 0x00004000, 0x20404010, + 0x20400000, 0x00000010, 0x20404010, 0x00400000, + 0x20004000, 0x00404010, 0x00400000, 0x20000010, + 0x00400010, 0x20004000, 0x20000000, 0x00004010, + 0x00000000, 0x00400010, 0x20004010, 0x00004000, + 0x00404000, 0x20004010, 0x00000010, 0x20400010, + 0x20400010, 0x00000000, 0x00404010, 0x20404000, + 0x00004010, 0x00404000, 0x20404000, 0x20000000, + 0x20004000, 0x00000010, 0x20400010, 0x00404000, + 0x20404010, 0x00400000, 0x00004010, 0x20000010, + 0x00400000, 0x20004000, 0x20000000, 0x00004010, + 0x20000010, 0x20404010, 0x00404000, 0x20400000, + 0x00404010, 0x20404000, 0x00000000, 0x20400010, + 0x00000010, 0x00004000, 0x20400000, 0x00404010, + 0x00004000, 0x00400010, 0x20004010, 0x00000000, + 0x20404000, 0x20000000, 0x00400010, 0x20004010 + }; + + private static readonly uint[] SP7 = + { + 0x00200000, 0x04200002, 0x04000802, 0x00000000, + 0x00000800, 0x04000802, 0x00200802, 0x04200800, + 0x04200802, 0x00200000, 0x00000000, 0x04000002, + 0x00000002, 0x04000000, 0x04200002, 0x00000802, + 0x04000800, 0x00200802, 0x00200002, 0x04000800, + 0x04000002, 0x04200000, 0x04200800, 0x00200002, + 0x04200000, 0x00000800, 0x00000802, 0x04200802, + 0x00200800, 0x00000002, 0x04000000, 0x00200800, + 0x04000000, 0x00200800, 0x00200000, 0x04000802, + 0x04000802, 0x04200002, 0x04200002, 0x00000002, + 0x00200002, 0x04000000, 0x04000800, 0x00200000, + 0x04200800, 0x00000802, 0x00200802, 0x04200800, + 0x00000802, 0x04000002, 0x04200802, 0x04200000, + 0x00200800, 0x00000000, 0x00000002, 0x04200802, + 0x00000000, 0x00200802, 0x04200000, 0x00000800, + 0x04000002, 0x04000800, 0x00000800, 0x00200002 + }; + + private static readonly uint[] SP8 = + { + 0x10001040, 0x00001000, 0x00040000, 0x10041040, + 0x10000000, 0x10001040, 0x00000040, 0x10000000, + 0x00040040, 0x10040000, 0x10041040, 0x00041000, + 0x10041000, 0x00041040, 0x00001000, 0x00000040, + 0x10040000, 0x10000040, 0x10001000, 0x00001040, + 0x00041000, 0x00040040, 0x10040040, 0x10041000, + 0x00001040, 0x00000000, 0x00000000, 0x10040040, + 0x10000040, 0x10001000, 0x00041040, 0x00040000, + 0x00041040, 0x00040000, 0x10041000, 0x00001000, + 0x00000040, 0x10040040, 0x00001000, 0x00041040, + 0x10001000, 0x00000040, 0x10000040, 0x10040000, + 0x10040040, 0x10000000, 0x00040000, 0x10001040, + 0x00000000, 0x10041040, 0x00040040, 0x10000040, + 0x10040000, 0x10001000, 0x10001040, 0x00000000, + 0x10041040, 0x00041000, 0x00041000, 0x00001040, + 0x00001040, 0x00040040, 0x10000000, 0x10041000 + }; + + /** + * Generate an integer based working key based on our secret key + * and what we processing we are planning to do. + * + * Acknowledgements for this routine go to James Gillogly and Phil Karn. + * (whoever, and wherever they are!). + */ + protected static int[] GenerateWorkingKey( + bool encrypting, + byte[] key) + { + int[] newKey = new int[32]; + bool[] pc1m = new bool[56]; + bool[] pcr = new bool[56]; + + for (int j = 0; j < 56; j++ ) + { + int l = pc1[j]; + + pc1m[j] = ((key[(uint) l >> 3] & bytebit[l & 07]) != 0); + } + + for (int i = 0; i < 16; i++) + { + int l, m, n; + + if (encrypting) + { + m = i << 1; + } + else + { + m = (15 - i) << 1; + } + + n = m + 1; + newKey[m] = newKey[n] = 0; + + for (int j = 0; j < 28; j++) + { + l = j + totrot[i]; + if ( l < 28 ) + { + pcr[j] = pc1m[l]; + } + else + { + pcr[j] = pc1m[l - 28]; + } + } + + for (int j = 28; j < 56; j++) + { + l = j + totrot[i]; + if (l < 56 ) + { + pcr[j] = pc1m[l]; + } + else + { + pcr[j] = pc1m[l - 28]; + } + } + + for (int j = 0; j < 24; j++) + { + if (pcr[pc2[j]]) + { + newKey[m] |= bigbyte[j]; + } + + if (pcr[pc2[j + 24]]) + { + newKey[n] |= bigbyte[j]; + } + } + } + + // + // store the processed key + // + for (int i = 0; i != 32; i += 2) + { + int i1, i2; + + i1 = newKey[i]; + i2 = newKey[i + 1]; + + newKey[i] = (int) ( (uint) ((i1 & 0x00fc0000) << 6) | + (uint) ((i1 & 0x00000fc0) << 10) | + ((uint) (i2 & 0x00fc0000) >> 10) | + ((uint) (i2 & 0x00000fc0) >> 6)); + + newKey[i + 1] = (int) ( (uint) ((i1 & 0x0003f000) << 12) | + (uint) ((i1 & 0x0000003f) << 16) | + ((uint) (i2 & 0x0003f000) >> 4) | + (uint) (i2 & 0x0000003f)); + } + + return newKey; + } + + internal static void DesFunc(int[] wKey, ref uint hi32, ref uint lo32) + { + uint left = hi32; + uint right = lo32; + uint work; + + work = ((left >> 4) ^ right) & 0x0f0f0f0f; + right ^= work; + left ^= (work << 4); + work = ((left >> 16) ^ right) & 0x0000ffff; + right ^= work; + left ^= (work << 16); + work = ((right >> 2) ^ left) & 0x33333333; + left ^= work; + right ^= (work << 2); + work = ((right >> 8) ^ left) & 0x00ff00ff; + left ^= work; + right ^= (work << 8); + right = (right << 1) | (right >> 31); + work = (left ^ right) & 0xaaaaaaaa; + left ^= work; + right ^= work; + left = (left << 1) | (left >> 31); + + for (int round = 0; round < 8; round++) + { + uint fval; + + work = (right << 28) | (right >> 4); + work ^= (uint)wKey[round * 4 + 0]; + fval = SP7[work & 0x3f]; + fval |= SP5[(work >> 8) & 0x3f]; + fval |= SP3[(work >> 16) & 0x3f]; + fval |= SP1[(work >> 24) & 0x3f]; + work = right ^ (uint)wKey[round * 4 + 1]; + fval |= SP8[ work & 0x3f]; + fval |= SP6[(work >> 8) & 0x3f]; + fval |= SP4[(work >> 16) & 0x3f]; + fval |= SP2[(work >> 24) & 0x3f]; + left ^= fval; + work = (left << 28) | (left >> 4); + work ^= (uint)wKey[round * 4 + 2]; + fval = SP7[ work & 0x3f]; + fval |= SP5[(work >> 8) & 0x3f]; + fval |= SP3[(work >> 16) & 0x3f]; + fval |= SP1[(work >> 24) & 0x3f]; + work = left ^ (uint)wKey[round * 4 + 3]; + fval |= SP8[ work & 0x3f]; + fval |= SP6[(work >> 8) & 0x3f]; + fval |= SP4[(work >> 16) & 0x3f]; + fval |= SP2[(work >> 24) & 0x3f]; + right ^= fval; + } + + right = (right << 31) | (right >> 1); + work = (left ^ right) & 0xaaaaaaaa; + left ^= work; + right ^= work; + left = (left << 31) | (left >> 1); + work = ((left >> 8) ^ right) & 0x00ff00ff; + right ^= work; + left ^= (work << 8); + work = ((left >> 2) ^ right) & 0x33333333; + right ^= work; + left ^= (work << 2); + work = ((right >> 16) ^ left) & 0x0000ffff; + left ^= work; + right ^= (work << 16); + work = ((right >> 4) ^ left) & 0x0f0f0f0f; + left ^= work; + right ^= (work << 4); + + hi32 = right; + lo32 = left; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/DesEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/DesEngine.cs.meta new file mode 100644 index 000000000..bb55258d0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/DesEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f19a6fb9b287c8f449b0d2caee173303 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Dstu7624Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Dstu7624Engine.cs new file mode 100644 index 000000000..270ec2628 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Dstu7624Engine.cs @@ -0,0 +1,1292 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * implementation of DSTU 7624 (Kalyna) + */ + public class Dstu7624Engine + : IBlockCipher + { + private ulong[] internalState; + private ulong[] workingKey; + private ulong[][] roundKeys; + + /* Number of 64-bit words in block */ + private int wordsInBlock; + + /* Number of 64-bit words in key */ + private int wordsInKey; + + /* Number of encryption rounds depending on key length */ + private const int ROUNDS_128 = 10; + private const int ROUNDS_256 = 14; + private const int ROUNDS_512 = 18; + + private int roundsAmount; + + private bool forEncryption; + + public Dstu7624Engine(int blockSizeBits) + { + /* DSTU7624 supports 128 | 256 | 512 key/block sizes */ + if (blockSizeBits != 128 && blockSizeBits != 256 && blockSizeBits != 512) + { + throw new ArgumentException("unsupported block length: only 128/256/512 are allowed"); + } + + wordsInBlock = blockSizeBits / 64; + internalState = new ulong[wordsInBlock]; + } + + #region INITIALIZATION + + public virtual void Init(bool forEncryption, ICipherParameters parameters) + { + if (!(parameters is KeyParameter)) + throw new ArgumentException("Invalid parameter passed to Dstu7624Engine Init"); + + this.forEncryption = forEncryption; + + byte[] keyBytes = ((KeyParameter)parameters).GetKey(); + int keyBitLength = keyBytes.Length << 3; + int blockBitLength = wordsInBlock << 6; + + if (keyBitLength != 128 && keyBitLength != 256 && keyBitLength != 512) + { + throw new ArgumentException("unsupported key length: only 128/256/512 are allowed"); + } + + /* Limitations on key lengths depending on block lengths. See table 6.1 in standard */ + if (keyBitLength != blockBitLength && keyBitLength != (2 * blockBitLength)) + { + throw new ArgumentException("Unsupported key length"); + } + + switch (keyBitLength) + { + case 128: + roundsAmount = ROUNDS_128; + break; + case 256: + roundsAmount = ROUNDS_256; + break; + case 512: + roundsAmount = ROUNDS_512; + break; + } + + wordsInKey = keyBitLength / 64; + + /* +1 round key as defined in standard */ + roundKeys = new ulong[roundsAmount + 1][]; + for (int roundKeyIndex = 0; roundKeyIndex < roundKeys.Length; roundKeyIndex++) + { + roundKeys[roundKeyIndex] = new ulong[wordsInBlock]; + } + + workingKey = new ulong[wordsInKey]; + + if (keyBytes.Length != wordsInKey * 8) + { + throw new ArgumentException("Invalid key parameter passed to Dstu7624Engine Init"); + } + + /* Unpack encryption key bytes to words */ + Pack.LE_To_UInt64(keyBytes, 0, workingKey); + + ulong[] tempKeys = new ulong[wordsInBlock]; + + /* KSA in DSTU7624 is strengthened to mitigate known weaknesses in AES KSA (eprint.iacr.org/2012/260.pdf) */ + WorkingKeyExpandKT(workingKey, tempKeys); + WorkingKeyExpandEven(workingKey, tempKeys); + WorkingKeyExpandOdd(); + } + + private void WorkingKeyExpandKT(ulong[] workingKey, ulong[] tempKeys) + { + ulong[] k0 = new ulong[wordsInBlock]; + ulong[] k1 = new ulong[wordsInBlock]; + + internalState = new ulong[wordsInBlock]; + internalState[0] += (ulong)(wordsInBlock + wordsInKey + 1); + + if (wordsInBlock == wordsInKey) + { + Array.Copy(workingKey, 0, k0, 0, k0.Length); + Array.Copy(workingKey, 0, k1, 0, k1.Length); + } + else + { + Array.Copy(workingKey, 0, k0, 0, wordsInBlock); + Array.Copy(workingKey, wordsInBlock, k1, 0, wordsInBlock); + } + + + for (int wordIndex = 0; wordIndex < internalState.Length; wordIndex++) + { + internalState[wordIndex] += k0[wordIndex]; + } + + EncryptionRound(); + + for (int wordIndex = 0; wordIndex < internalState.Length; wordIndex++) + { + internalState[wordIndex] ^= k1[wordIndex]; + } + + EncryptionRound(); + + for (int wordIndex = 0; wordIndex < internalState.Length; wordIndex++) + { + internalState[wordIndex] += k0[wordIndex]; + } + + EncryptionRound(); + + Array.Copy(internalState, 0, tempKeys, 0, wordsInBlock); + } + + private void WorkingKeyExpandEven(ulong[] workingKey, ulong[] tempKey) + { + ulong[] initialData = new ulong[wordsInKey]; + ulong[] tempRoundKey = new ulong[wordsInBlock]; + + int round = 0; + + Array.Copy(workingKey, 0, initialData, 0, wordsInKey); + + ulong tmv = 0x0001000100010001UL; + + while (true) + { + for (int wordIndex = 0; wordIndex < wordsInBlock; wordIndex++) + { + tempRoundKey[wordIndex] = tempKey[wordIndex] + tmv; + } + + for (int wordIndex = 0; wordIndex < wordsInBlock; wordIndex++) + { + internalState[wordIndex] = initialData[wordIndex] + tempRoundKey[wordIndex]; + } + + EncryptionRound(); + + for (int wordIndex = 0; wordIndex < wordsInBlock; wordIndex++) + { + internalState[wordIndex] ^= tempRoundKey[wordIndex]; + } + + EncryptionRound(); + + for (int wordIndex = 0; wordIndex < wordsInBlock; wordIndex++) + { + internalState[wordIndex] += tempRoundKey[wordIndex]; + } + + Array.Copy(internalState, 0, roundKeys[round], 0, wordsInBlock); + + if (roundsAmount == round) + { + break; + } + + if (wordsInKey != wordsInBlock) + { + round += 2; + tmv <<= 1; + + for (int wordIndex = 0; wordIndex < wordsInBlock; wordIndex++) + { + tempRoundKey[wordIndex] = tempKey[wordIndex] + tmv; + } + + for (int wordIndex = 0; wordIndex < wordsInBlock; wordIndex++) + { + internalState[wordIndex] = initialData[wordsInBlock + wordIndex] + tempRoundKey[wordIndex]; + } + + EncryptionRound(); + + for (int wordIndex = 0; wordIndex < wordsInBlock; wordIndex++) + { + internalState[wordIndex] ^= tempRoundKey[wordIndex]; + } + + EncryptionRound(); + + for (int wordIndex = 0; wordIndex < wordsInBlock; wordIndex++) + { + internalState[wordIndex] += tempRoundKey[wordIndex]; + } + + Array.Copy(internalState, 0, roundKeys[round], 0, wordsInBlock); + + if (roundsAmount == round) + { + break; + } + } + + round += 2; + tmv <<= 1; + + ulong temp = initialData[0]; + for (int i = 1; i < initialData.Length; ++i) + { + initialData[i - 1] = initialData[i]; + } + initialData[initialData.Length - 1] = temp; + } + } + + private void WorkingKeyExpandOdd() + { + for (int roundIndex = 1; roundIndex < roundsAmount; roundIndex += 2) + { + RotateLeft(roundKeys[roundIndex - 1], roundKeys[roundIndex]); + } + } + + #endregion + + public virtual int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (workingKey == null) + throw new InvalidOperationException("Dstu7624Engine not initialised"); + + Check.DataLength(input, inOff, GetBlockSize(), "input buffer too short"); + Check.OutputLength(output, outOff, GetBlockSize(), "output buffer too short"); + + if (forEncryption) + { + /* Encrypt */ + switch (wordsInBlock) + { + case 2: + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + EncryptBlock_128(input.AsSpan(inOff), output.AsSpan(outOff)); +#else + EncryptBlock_128(input, inOff, output, outOff); +#endif + break; + } + default: + { + Pack.LE_To_UInt64(input, inOff, internalState); + AddRoundKey(0); + for (int round = 0;;) + { + EncryptionRound(); + + if (++round == roundsAmount) + { + break; + } + + XorRoundKey(round); + } + AddRoundKey(roundsAmount); + Pack.UInt64_To_LE(internalState, output, outOff); + Array.Clear(internalState, 0, internalState.Length); + break; + } + } + } + else + { + /* Decrypt */ + switch (wordsInBlock) + { + case 2: + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + DecryptBlock_128(input.AsSpan(inOff), output.AsSpan(outOff)); +#else + DecryptBlock_128(input, inOff, output, outOff); +#endif + break; + } + default: + { + Pack.LE_To_UInt64(input, inOff, internalState); + SubRoundKey(roundsAmount); + for (int round = roundsAmount;;) + { + DecryptionRound(); + + if (--round == 0) + { + break; + } + + XorRoundKey(round); + } + SubRoundKey(0); + Pack.UInt64_To_LE(internalState, output, outOff); + Array.Clear(internalState, 0, internalState.Length); + break; + } + } + } + + return GetBlockSize(); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + if (workingKey == null) + throw new InvalidOperationException("Dstu7624Engine not initialised"); + + Check.DataLength(input, GetBlockSize(), "input buffer too short"); + Check.OutputLength(output, GetBlockSize(), "output buffer too short"); + + if (forEncryption) + { + /* Encrypt */ + switch (wordsInBlock) + { + case 2: + { + EncryptBlock_128(input, output); + break; + } + default: + { + Pack.LE_To_UInt64(input, internalState); + AddRoundKey(0); + for (int round = 0;;) + { + EncryptionRound(); + + if (++round == roundsAmount) + { + break; + } + + XorRoundKey(round); + } + AddRoundKey(roundsAmount); + Pack.UInt64_To_LE(internalState, output); + Array.Clear(internalState, 0, internalState.Length); + break; + } + } + } + else + { + /* Decrypt */ + switch (wordsInBlock) + { + case 2: + { + DecryptBlock_128(input, output); + break; + } + default: + { + Pack.LE_To_UInt64(input, internalState); + SubRoundKey(roundsAmount); + for (int round = roundsAmount;;) + { + DecryptionRound(); + + if (--round == 0) + { + break; + } + + XorRoundKey(round); + } + SubRoundKey(0); + Pack.UInt64_To_LE(internalState, output); + Array.Clear(internalState, 0, internalState.Length); + break; + } + } + } + + return GetBlockSize(); + } +#endif + + private void EncryptionRound() + { + SubBytes(); + ShiftRows(); + MixColumns(); + } + + private void DecryptionRound() + { + MixColumnsInv(); + InvShiftRows(); + InvSubBytes(); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void DecryptBlock_128(ReadOnlySpan input, Span output) + { + ulong c0 = Pack.LE_To_UInt64(input); + ulong c1 = Pack.LE_To_UInt64(input[8..]); + + ulong[] roundKey = roundKeys[roundsAmount]; + c0 -= roundKey[0]; + c1 -= roundKey[1]; + + for (int round = roundsAmount; ;) + { + c0 = MixColumnInv(c0); + c1 = MixColumnInv(c1); + + uint lo0 = (uint)c0, hi0 = (uint)(c0 >> 32); + uint lo1 = (uint)c1, hi1 = (uint)(c1 >> 32); + + { + byte t0 = T0[lo0 & 0xFF]; + byte t1 = T1[(lo0 >> 8) & 0xFF]; + byte t2 = T2[(lo0 >> 16) & 0xFF]; + byte t3 = T3[lo0 >> 24]; + lo0 = (uint)t0 | ((uint)t1 << 8) | ((uint)t2 << 16) | ((uint)t3 << 24); + byte t4 = T0[hi1 & 0xFF]; + byte t5 = T1[(hi1 >> 8) & 0xFF]; + byte t6 = T2[(hi1 >> 16) & 0xFF]; + byte t7 = T3[hi1 >> 24]; + hi1 = (uint)t4 | ((uint)t5 << 8) | ((uint)t6 << 16) | ((uint)t7 << 24); + c0 = (ulong)lo0 | ((ulong)hi1 << 32); + } + + { + byte t0 = T0[lo1 & 0xFF]; + byte t1 = T1[(lo1 >> 8) & 0xFF]; + byte t2 = T2[(lo1 >> 16) & 0xFF]; + byte t3 = T3[lo1 >> 24]; + lo1 = (uint)t0 | ((uint)t1 << 8) | ((uint)t2 << 16) | ((uint)t3 << 24); + byte t4 = T0[hi0 & 0xFF]; + byte t5 = T1[(hi0 >> 8) & 0xFF]; + byte t6 = T2[(hi0 >> 16) & 0xFF]; + byte t7 = T3[hi0 >> 24]; + hi0 = (uint)t4 | ((uint)t5 << 8) | ((uint)t6 << 16) | ((uint)t7 << 24); + c1 = (ulong)lo1 | ((ulong)hi0 << 32); + } + + if (--round == 0) + { + break; + } + + roundKey = roundKeys[round]; + c0 ^= roundKey[0]; + c1 ^= roundKey[1]; + } + + roundKey = roundKeys[0]; + c0 -= roundKey[0]; + c1 -= roundKey[1]; + + Pack.UInt64_To_LE(c0, output); + Pack.UInt64_To_LE(c1, output[8..]); + } + + private void EncryptBlock_128(ReadOnlySpan input, Span output) + { + ulong c0 = Pack.LE_To_UInt64(input); + ulong c1 = Pack.LE_To_UInt64(input[8..]); + + ulong[] roundKey = roundKeys[0]; + c0 += roundKey[0]; + c1 += roundKey[1]; + + for (int round = 0; ;) + { + uint lo0 = (uint)c0, hi0 = (uint)(c0 >> 32); + uint lo1 = (uint)c1, hi1 = (uint)(c1 >> 32); + + { + byte t0 = S0[lo0 & 0xFF]; + byte t1 = S1[(lo0 >> 8) & 0xFF]; + byte t2 = S2[(lo0 >> 16) & 0xFF]; + byte t3 = S3[lo0 >> 24]; + lo0 = (uint)t0 | ((uint)t1 << 8) | ((uint)t2 << 16) | ((uint)t3 << 24); + byte t4 = S0[hi1 & 0xFF]; + byte t5 = S1[(hi1 >> 8) & 0xFF]; + byte t6 = S2[(hi1 >> 16) & 0xFF]; + byte t7 = S3[hi1 >> 24]; + hi1 = (uint)t4 | ((uint)t5 << 8) | ((uint)t6 << 16) | ((uint)t7 << 24); + c0 = (ulong)lo0 | ((ulong)hi1 << 32); + } + + { + byte t0 = S0[lo1 & 0xFF]; + byte t1 = S1[(lo1 >> 8) & 0xFF]; + byte t2 = S2[(lo1 >> 16) & 0xFF]; + byte t3 = S3[lo1 >> 24]; + lo1 = (uint)t0 | ((uint)t1 << 8) | ((uint)t2 << 16) | ((uint)t3 << 24); + byte t4 = S0[hi0 & 0xFF]; + byte t5 = S1[(hi0 >> 8) & 0xFF]; + byte t6 = S2[(hi0 >> 16) & 0xFF]; + byte t7 = S3[hi0 >> 24]; + hi0 = (uint)t4 | ((uint)t5 << 8) | ((uint)t6 << 16) | ((uint)t7 << 24); + c1 = (ulong)lo1 | ((ulong)hi0 << 32); + } + + c0 = MixColumn(c0); + c1 = MixColumn(c1); + + if (++round == roundsAmount) + { + break; + } + + roundKey = roundKeys[round]; + c0 ^= roundKey[0]; + c1 ^= roundKey[1]; + } + + roundKey = roundKeys[roundsAmount]; + c0 += roundKey[0]; + c1 += roundKey[1]; + + Pack.UInt64_To_LE(c0, output); + Pack.UInt64_To_LE(c1, output[8..]); + } +#else + private void DecryptBlock_128(byte[] input, int inOff, byte[] output, int outOff) + { + ulong c0 = Pack.LE_To_UInt64(input, inOff); + ulong c1 = Pack.LE_To_UInt64(input, inOff + 8); + + ulong[] roundKey = roundKeys[roundsAmount]; + c0 -= roundKey[0]; + c1 -= roundKey[1]; + + for (int round = roundsAmount;;) + { + c0 = MixColumnInv(c0); + c1 = MixColumnInv(c1); + + uint lo0 = (uint)c0, hi0 = (uint)(c0 >> 32); + uint lo1 = (uint)c1, hi1 = (uint)(c1 >> 32); + + { + byte t0 = T0[lo0 & 0xFF]; + byte t1 = T1[(lo0 >> 8) & 0xFF]; + byte t2 = T2[(lo0 >> 16) & 0xFF]; + byte t3 = T3[lo0 >> 24]; + lo0 = (uint)t0 | ((uint)t1 << 8) | ((uint)t2 << 16) | ((uint)t3 << 24); + byte t4 = T0[hi1 & 0xFF]; + byte t5 = T1[(hi1 >> 8) & 0xFF]; + byte t6 = T2[(hi1 >> 16) & 0xFF]; + byte t7 = T3[hi1 >> 24]; + hi1 = (uint)t4 | ((uint)t5 << 8) | ((uint)t6 << 16) | ((uint)t7 << 24); + c0 = (ulong)lo0 | ((ulong)hi1 << 32); + } + + { + byte t0 = T0[lo1 & 0xFF]; + byte t1 = T1[(lo1 >> 8) & 0xFF]; + byte t2 = T2[(lo1 >> 16) & 0xFF]; + byte t3 = T3[lo1 >> 24]; + lo1 = (uint)t0 | ((uint)t1 << 8) | ((uint)t2 << 16) | ((uint)t3 << 24); + byte t4 = T0[hi0 & 0xFF]; + byte t5 = T1[(hi0 >> 8) & 0xFF]; + byte t6 = T2[(hi0 >> 16) & 0xFF]; + byte t7 = T3[hi0 >> 24]; + hi0 = (uint)t4 | ((uint)t5 << 8) | ((uint)t6 << 16) | ((uint)t7 << 24); + c1 = (ulong)lo1 | ((ulong)hi0 << 32); + } + + if (--round == 0) + { + break; + } + + roundKey = roundKeys[round]; + c0 ^= roundKey[0]; + c1 ^= roundKey[1]; + } + + roundKey = roundKeys[0]; + c0 -= roundKey[0]; + c1 -= roundKey[1]; + + Pack.UInt64_To_LE(c0, output, outOff); + Pack.UInt64_To_LE(c1, output, outOff + 8); + } + + private void EncryptBlock_128(byte[] input, int inOff, byte[] output, int outOff) + { + ulong c0 = Pack.LE_To_UInt64(input, inOff); + ulong c1 = Pack.LE_To_UInt64(input, inOff + 8); + + ulong[] roundKey = roundKeys[0]; + c0 += roundKey[0]; + c1 += roundKey[1]; + + for (int round = 0;;) + { + uint lo0 = (uint)c0, hi0 = (uint)(c0 >> 32); + uint lo1 = (uint)c1, hi1 = (uint)(c1 >> 32); + + { + byte t0 = S0[lo0 & 0xFF]; + byte t1 = S1[(lo0 >> 8) & 0xFF]; + byte t2 = S2[(lo0 >> 16) & 0xFF]; + byte t3 = S3[lo0 >> 24]; + lo0 = (uint)t0 | ((uint)t1 << 8) | ((uint)t2 << 16) | ((uint)t3 << 24); + byte t4 = S0[hi1 & 0xFF]; + byte t5 = S1[(hi1 >> 8) & 0xFF]; + byte t6 = S2[(hi1 >> 16) & 0xFF]; + byte t7 = S3[hi1 >> 24]; + hi1 = (uint)t4 | ((uint)t5 << 8) | ((uint)t6 << 16) | ((uint)t7 << 24); + c0 = (ulong)lo0 | ((ulong)hi1 << 32); + } + + { + byte t0 = S0[lo1 & 0xFF]; + byte t1 = S1[(lo1 >> 8) & 0xFF]; + byte t2 = S2[(lo1 >> 16) & 0xFF]; + byte t3 = S3[lo1 >> 24]; + lo1 = (uint)t0 | ((uint)t1 << 8) | ((uint)t2 << 16) | ((uint)t3 << 24); + byte t4 = S0[hi0 & 0xFF]; + byte t5 = S1[(hi0 >> 8) & 0xFF]; + byte t6 = S2[(hi0 >> 16) & 0xFF]; + byte t7 = S3[hi0 >> 24]; + hi0 = (uint)t4 | ((uint)t5 << 8) | ((uint)t6 << 16) | ((uint)t7 << 24); + c1 = (ulong)lo1 | ((ulong)hi0 << 32); + } + + c0 = MixColumn(c0); + c1 = MixColumn(c1); + + if (++round == roundsAmount) + { + break; + } + + roundKey = roundKeys[round]; + c0 ^= roundKey[0]; + c1 ^= roundKey[1]; + } + + roundKey = roundKeys[roundsAmount]; + c0 += roundKey[0]; + c1 += roundKey[1]; + + Pack.UInt64_To_LE(c0, output, outOff); + Pack.UInt64_To_LE(c1, output, outOff + 8); + } +#endif + + private void SubBytes() + { + for (int i = 0; i < wordsInBlock; i++) + { + ulong u = internalState[i]; + uint lo = (uint)u, hi = (uint)(u >> 32); + byte t0 = S0[lo & 0xFF]; + byte t1 = S1[(lo >> 8) & 0xFF]; + byte t2 = S2[(lo >> 16) & 0xFF]; + byte t3 = S3[lo >> 24]; + lo = (uint)t0 | ((uint)t1 << 8) | ((uint)t2 << 16) | ((uint)t3 << 24); + byte t4 = S0[hi & 0xFF]; + byte t5 = S1[(hi >> 8) & 0xFF]; + byte t6 = S2[(hi >> 16) & 0xFF]; + byte t7 = S3[hi >> 24]; + hi = (uint)t4 | ((uint)t5 << 8) | ((uint)t6 << 16) | ((uint)t7 << 24); + internalState[i] = (ulong)lo | ((ulong)hi << 32); + } + } + + private void InvSubBytes() + { + for (int i = 0; i < wordsInBlock; i++) + { + ulong u = internalState[i]; + uint lo = (uint)u, hi = (uint)(u >> 32); + byte t0 = T0[lo & 0xFF]; + byte t1 = T1[(lo >> 8) & 0xFF]; + byte t2 = T2[(lo >> 16) & 0xFF]; + byte t3 = T3[lo >> 24]; + lo = (uint)t0 | ((uint)t1 << 8) | ((uint)t2 << 16) | ((uint)t3 << 24); + byte t4 = T0[hi & 0xFF]; + byte t5 = T1[(hi >> 8) & 0xFF]; + byte t6 = T2[(hi >> 16) & 0xFF]; + byte t7 = T3[hi >> 24]; + hi = (uint)t4 | ((uint)t5 << 8) | ((uint)t6 << 16) | ((uint)t7 << 24); + internalState[i] = (ulong)lo | ((ulong)hi << 32); + } + } + + private void ShiftRows() + { + switch (wordsInBlock) + { + case 2: + { + ulong c0 = internalState[0], c1 = internalState[1]; + ulong d; + + d = (c0 ^ c1) & 0xFFFFFFFF00000000UL; c0 ^= d; c1 ^= d; + + internalState[0] = c0; + internalState[1] = c1; + break; + } + case 4: + { + ulong c0 = internalState[0], c1 = internalState[1], c2 = internalState[2], c3 = internalState[3]; + ulong d; + + d = (c0 ^ c2) & 0xFFFFFFFF00000000UL; c0 ^= d; c2 ^= d; + d = (c1 ^ c3) & 0x0000FFFFFFFF0000UL; c1 ^= d; c3 ^= d; + + d = (c0 ^ c1) & 0xFFFF0000FFFF0000UL; c0 ^= d; c1 ^= d; + d = (c2 ^ c3) & 0xFFFF0000FFFF0000UL; c2 ^= d; c3 ^= d; + + internalState[0] = c0; + internalState[1] = c1; + internalState[2] = c2; + internalState[3] = c3; + break; + } + case 8: + { + ulong c0 = internalState[0], c1 = internalState[1], c2 = internalState[2], c3 = internalState[3]; + ulong c4 = internalState[4], c5 = internalState[5], c6 = internalState[6], c7 = internalState[7]; + ulong d; + + d = (c0 ^ c4) & 0xFFFFFFFF00000000UL; c0 ^= d; c4 ^= d; + d = (c1 ^ c5) & 0x00FFFFFFFF000000UL; c1 ^= d; c5 ^= d; + d = (c2 ^ c6) & 0x0000FFFFFFFF0000UL; c2 ^= d; c6 ^= d; + d = (c3 ^ c7) & 0x000000FFFFFFFF00UL; c3 ^= d; c7 ^= d; + + d = (c0 ^ c2) & 0xFFFF0000FFFF0000UL; c0 ^= d; c2 ^= d; + d = (c1 ^ c3) & 0x00FFFF0000FFFF00UL; c1 ^= d; c3 ^= d; + d = (c4 ^ c6) & 0xFFFF0000FFFF0000UL; c4 ^= d; c6 ^= d; + d = (c5 ^ c7) & 0x00FFFF0000FFFF00UL; c5 ^= d; c7 ^= d; + + d = (c0 ^ c1) & 0xFF00FF00FF00FF00UL; c0 ^= d; c1 ^= d; + d = (c2 ^ c3) & 0xFF00FF00FF00FF00UL; c2 ^= d; c3 ^= d; + d = (c4 ^ c5) & 0xFF00FF00FF00FF00UL; c4 ^= d; c5 ^= d; + d = (c6 ^ c7) & 0xFF00FF00FF00FF00UL; c6 ^= d; c7 ^= d; + + internalState[0] = c0; + internalState[1] = c1; + internalState[2] = c2; + internalState[3] = c3; + internalState[4] = c4; + internalState[5] = c5; + internalState[6] = c6; + internalState[7] = c7; + break; + } + default: + { + throw new InvalidOperationException("unsupported block length: only 128/256/512 are allowed"); + } + } + } + + private void InvShiftRows() + { + switch (wordsInBlock) + { + case 2: + { + ulong c0 = internalState[0], c1 = internalState[1]; + ulong d; + + d = (c0 ^ c1) & 0xFFFFFFFF00000000UL; c0 ^= d; c1 ^= d; + + internalState[0] = c0; + internalState[1] = c1; + break; + } + case 4: + { + ulong c0 = internalState[0], c1 = internalState[1], c2 = internalState[2], c3 = internalState[3]; + ulong d; + + d = (c0 ^ c1) & 0xFFFF0000FFFF0000UL; c0 ^= d; c1 ^= d; + d = (c2 ^ c3) & 0xFFFF0000FFFF0000UL; c2 ^= d; c3 ^= d; + + d = (c0 ^ c2) & 0xFFFFFFFF00000000UL; c0 ^= d; c2 ^= d; + d = (c1 ^ c3) & 0x0000FFFFFFFF0000UL; c1 ^= d; c3 ^= d; + + internalState[0] = c0; + internalState[1] = c1; + internalState[2] = c2; + internalState[3] = c3; + break; + } + case 8: + { + ulong c0 = internalState[0], c1 = internalState[1], c2 = internalState[2], c3 = internalState[3]; + ulong c4 = internalState[4], c5 = internalState[5], c6 = internalState[6], c7 = internalState[7]; + ulong d; + + d = (c0 ^ c1) & 0xFF00FF00FF00FF00UL; c0 ^= d; c1 ^= d; + d = (c2 ^ c3) & 0xFF00FF00FF00FF00UL; c2 ^= d; c3 ^= d; + d = (c4 ^ c5) & 0xFF00FF00FF00FF00UL; c4 ^= d; c5 ^= d; + d = (c6 ^ c7) & 0xFF00FF00FF00FF00UL; c6 ^= d; c7 ^= d; + + d = (c0 ^ c2) & 0xFFFF0000FFFF0000UL; c0 ^= d; c2 ^= d; + d = (c1 ^ c3) & 0x00FFFF0000FFFF00UL; c1 ^= d; c3 ^= d; + d = (c4 ^ c6) & 0xFFFF0000FFFF0000UL; c4 ^= d; c6 ^= d; + d = (c5 ^ c7) & 0x00FFFF0000FFFF00UL; c5 ^= d; c7 ^= d; + + d = (c0 ^ c4) & 0xFFFFFFFF00000000UL; c0 ^= d; c4 ^= d; + d = (c1 ^ c5) & 0x00FFFFFFFF000000UL; c1 ^= d; c5 ^= d; + d = (c2 ^ c6) & 0x0000FFFFFFFF0000UL; c2 ^= d; c6 ^= d; + d = (c3 ^ c7) & 0x000000FFFFFFFF00UL; c3 ^= d; c7 ^= d; + + internalState[0] = c0; + internalState[1] = c1; + internalState[2] = c2; + internalState[3] = c3; + internalState[4] = c4; + internalState[5] = c5; + internalState[6] = c6; + internalState[7] = c7; + break; + } + default: + { + throw new InvalidOperationException("unsupported block length: only 128/256/512 are allowed"); + } + } + } + + private void AddRoundKey(int round) + { + ulong[] roundKey = roundKeys[round]; + for (int i = 0; i < wordsInBlock; ++i) + { + internalState[i] += roundKey[i]; + } + } + + private void SubRoundKey(int round) + { + ulong[] roundKey = roundKeys[round]; + for (int i = 0; i < wordsInBlock; ++i) + { + internalState[i] -= roundKey[i]; + } + } + + private void XorRoundKey(int round) + { + ulong[] roundKey = roundKeys[round]; + for (int i = 0; i < wordsInBlock; i++) + { + internalState[i] ^= roundKey[i]; + } + } + + private static ulong MixColumn(ulong c) + { + //// Calculate column multiplied by powers of 'x' + //ulong x0 = c; + //ulong x1 = MulX(x0); + //ulong x2 = MulX(x1); + //ulong x3 = MulX(x2); + + //// Calculate products with circulant matrix from (0x01, 0x01, 0x05, 0x01, 0x08, 0x06, 0x07, 0x04) + //ulong m0 = x0; + //ulong m1 = x0; + //ulong m2 = x0 ^ x2; + //ulong m3 = x0; + //ulong m4 = x3; + //ulong m5 = x1 ^ x2; + //ulong m6 = x0 ^ x1 ^ x2; + //ulong m7 = x2; + + //// Assemble the rotated products + //return m0 + // ^ Rotate(8, m1) + // ^ Rotate(16, m2) + // ^ Rotate(24, m3) + // ^ Rotate(32, m4) + // ^ Rotate(40, m5) + // ^ Rotate(48, m6) + // ^ Rotate(56, m7); + + ulong x1 = MulX(c); + ulong u, v; + + u = Rotate(8, c) ^ c; + u ^= Rotate(16, u); + u ^= Rotate(48, c); + + v = MulX2(u ^ c ^ x1); + + return u ^ Rotate(32, v) ^ Rotate(40, x1) ^ Rotate(48, x1); + } + + private void MixColumns() + { + for (int col = 0; col < wordsInBlock; ++col) + { + internalState[col] = MixColumn(internalState[col]); + } + } + + private static ulong MixColumnInv(ulong c) + { +/* + // Calculate column multiplied by powers of 'x' + ulong x0 = c; + ulong x1 = MulX(x0); + ulong x2 = MulX(x1); + ulong x3 = MulX(x2); + ulong x4 = MulX(x3); + ulong x5 = MulX(x4); + ulong x6 = MulX(x5); + ulong x7 = MulX(x6); + + // Calculate products with circulant matrix from (0xAD,0x95,0x76,0xA8,0x2F,0x49,0xD7,0xCA) + //long m0 = x0 ^ x2 ^ x3 ^ x5 ^ x7; + //long m1 = x0 ^ x2 ^ x4 ^ x7; + //long m2 = x1 ^ x2 ^ x4 ^ x5 ^ x6; + //long m3 = x3 ^ x5 ^ x7; + //long m4 = x0 ^ x1 ^ x2 ^ x3 ^ x5; + //long m5 = x0 ^ x3 ^ x6; + //long m6 = x0 ^ x1 ^ x2 ^ x4 ^ x6 ^ x7; + //long m7 = x1 ^ x3 ^ x6 ^ x7; + + ulong m5 = x0 ^ x3 ^ x6; + x0 ^= x2; + ulong m3 = x3 ^ x5 ^ x7; + ulong m0 = m3 ^ x0; + ulong m6 = x0 ^ x4; + ulong m1 = m6 ^ x7; + x5 ^= x1; + x7 ^= x1 ^ x6; + ulong m2 = x2 ^ x4 ^ x5 ^ x6; + ulong m4 = x0 ^ x3 ^ x5; + m6 ^= x7; + ulong m7 = x3 ^ x7; + + // Assemble the rotated products + return m0 + ^ Rotate(8, m1) + ^ Rotate(16, m2) + ^ Rotate(24, m3) + ^ Rotate(32, m4) + ^ Rotate(40, m5) + ^ Rotate(48, m6) + ^ Rotate(56, m7); +*/ + + ulong u0 = c; + u0 ^= Rotate( 8, u0); + u0 ^= Rotate(32, u0); + u0 ^= Rotate(48, c); + + ulong t = u0 ^ c; + + ulong c48 = Rotate(48, c); + ulong c56 = Rotate(56, c); + + ulong u7 = t ^ c56; + ulong u6 = Rotate(56, t); + u6 ^= MulX(u7); + ulong u5 = Rotate(16, t) ^ c; + u5 ^= Rotate(40, MulX(u6) ^ c); + ulong u4 = t ^ c48; + u4 ^= MulX(u5); + ulong u3 = Rotate(16, u0); + u3 ^= MulX(u4); + ulong u2 = t ^ Rotate(24, c) ^ c48 ^ c56; + u2 ^= MulX(u3); + ulong u1 = Rotate(32, t) ^ c ^ c56; + u1 ^= MulX(u2); + u0 ^= MulX(Rotate(40, u1)); + + return u0; + } + + private void MixColumnsInv() + { + for (int col = 0; col < wordsInBlock; ++col) + { + internalState[col] = MixColumnInv(internalState[col]); + } + } + + private static ulong MulX(ulong n) + { + return ((n & 0x7F7F7F7F7F7F7F7FUL) << 1) ^ (((n & 0x8080808080808080UL) >> 7) * 0x1DUL); + } + + private static ulong MulX2(ulong n) + { + return ((n & 0x3F3F3F3F3F3F3F3FUL) << 2) ^ (((n & 0x8080808080808080UL) >> 6) * 0x1DUL) ^ (((n & 0x4040404040404040UL) >> 6) * 0x1DUL); + } + + //private static ulong MulX4(ulong n) + //{ + // ulong u = n & 0xF0F0F0F0F0F0F0F0UL; + // return ((n & 0x0F0F0F0F0F0F0F0FUL) << 4) ^ u ^ (u >> 1) ^ (u >> 2) ^ (u >> 4); + //} + + /* + * Pair-wise modular multiplication of 8 byte-pairs. + * + * REDUCTION_POLYNOMIAL is x^8 + x^4 + x^3 + x^2 + 1 + */ + //private static ulong MultiplyGFx8(ulong u, ulong v, int vMaxDegree) + //{ + // ulong r = u & ((v & 0x0101010101010101UL) * 0xFFUL); + // for (int i = 1; i <= vMaxDegree; ++i) + // { + // u = ((u & 0x7F7F7F7F7F7F7F7FUL) << 1) ^ (((u >> 7) & 0x0101010101010101UL) * 0x1DUL); + // v >>= 1; + + // r ^= u & ((v & 0x0101010101010101UL) * 0xFFUL); + // } + + // return r; + //} + + //private static ulong MultiplyMds(ulong u) + //{ + // ulong r = 0, s = 0, t = (u >> 8); + // r ^= u & 0x0000001F00000000UL; r <<= 1; + // s ^= t & 0x00000000E0000000UL; s <<= 1; + // r ^= u & 0x3F3F3F00003F0000UL; r <<= 1; + // s ^= t & 0x00C0C0C00000C000UL; s <<= 1; + // r ^= u & 0x007F7F0000000000UL; r <<= 1; + // s ^= t & 0x0000808000000000UL; s <<= 1; + // r ^= u & 0x00FF0000FFFFFFFFUL; + // r ^= s ^ (s << 2) ^ (s << 3) ^ (s << 4); + // return r; + //} + + private static ulong Rotate(int n, ulong x) + { + return (x >> n) | (x << -n); + } + + private void RotateLeft(ulong[] x, ulong[] z) + { + switch (wordsInBlock) + { + case 2: + { + ulong x0 = x[0], x1 = x[1]; + z[0] = (x0 >> 56) | (x1 << 8); + z[1] = (x1 >> 56) | (x0 << 8); + break; + } + case 4: + { + ulong x0 = x[0], x1 = x[1], x2 = x[2], x3 = x[3]; + z[0] = (x1 >> 24) | (x2 << 40); + z[1] = (x2 >> 24) | (x3 << 40); + z[2] = (x3 >> 24) | (x0 << 40); + z[3] = (x0 >> 24) | (x1 << 40); + break; + } + case 8: + { + ulong x0 = x[0], x1 = x[1], x2 = x[2], x3 = x[3]; + ulong x4 = x[4], x5 = x[5], x6 = x[6], x7 = x[7]; + z[0] = (x2 >> 24) | (x3 << 40); + z[1] = (x3 >> 24) | (x4 << 40); + z[2] = (x4 >> 24) | (x5 << 40); + z[3] = (x5 >> 24) | (x6 << 40); + z[4] = (x6 >> 24) | (x7 << 40); + z[5] = (x7 >> 24) | (x0 << 40); + z[6] = (x0 >> 24) | (x1 << 40); + z[7] = (x1 >> 24) | (x2 << 40); + break; + } + default: + { + throw new InvalidOperationException("unsupported block length: only 128/256/512 are allowed"); + } + } + } + +#region TABLES AND S-BOXES + + private const ulong mdsMatrix = 0x0407060801050101UL; + private const ulong mdsInvMatrix = 0xCAD7492FA87695ADUL; + + private static readonly byte[] S0 = new byte[]{ + 0xa8, 0x43, 0x5f, 0x06, 0x6b, 0x75, 0x6c, 0x59, 0x71, 0xdf, 0x87, 0x95, 0x17, 0xf0, 0xd8, 0x09, + 0x6d, 0xf3, 0x1d, 0xcb, 0xc9, 0x4d, 0x2c, 0xaf, 0x79, 0xe0, 0x97, 0xfd, 0x6f, 0x4b, 0x45, 0x39, + 0x3e, 0xdd, 0xa3, 0x4f, 0xb4, 0xb6, 0x9a, 0x0e, 0x1f, 0xbf, 0x15, 0xe1, 0x49, 0xd2, 0x93, 0xc6, + 0x92, 0x72, 0x9e, 0x61, 0xd1, 0x63, 0xfa, 0xee, 0xf4, 0x19, 0xd5, 0xad, 0x58, 0xa4, 0xbb, 0xa1, + 0xdc, 0xf2, 0x83, 0x37, 0x42, 0xe4, 0x7a, 0x32, 0x9c, 0xcc, 0xab, 0x4a, 0x8f, 0x6e, 0x04, 0x27, + 0x2e, 0xe7, 0xe2, 0x5a, 0x96, 0x16, 0x23, 0x2b, 0xc2, 0x65, 0x66, 0x0f, 0xbc, 0xa9, 0x47, 0x41, + 0x34, 0x48, 0xfc, 0xb7, 0x6a, 0x88, 0xa5, 0x53, 0x86, 0xf9, 0x5b, 0xdb, 0x38, 0x7b, 0xc3, 0x1e, + 0x22, 0x33, 0x24, 0x28, 0x36, 0xc7, 0xb2, 0x3b, 0x8e, 0x77, 0xba, 0xf5, 0x14, 0x9f, 0x08, 0x55, + 0x9b, 0x4c, 0xfe, 0x60, 0x5c, 0xda, 0x18, 0x46, 0xcd, 0x7d, 0x21, 0xb0, 0x3f, 0x1b, 0x89, 0xff, + 0xeb, 0x84, 0x69, 0x3a, 0x9d, 0xd7, 0xd3, 0x70, 0x67, 0x40, 0xb5, 0xde, 0x5d, 0x30, 0x91, 0xb1, + 0x78, 0x11, 0x01, 0xe5, 0x00, 0x68, 0x98, 0xa0, 0xc5, 0x02, 0xa6, 0x74, 0x2d, 0x0b, 0xa2, 0x76, + 0xb3, 0xbe, 0xce, 0xbd, 0xae, 0xe9, 0x8a, 0x31, 0x1c, 0xec, 0xf1, 0x99, 0x94, 0xaa, 0xf6, 0x26, + 0x2f, 0xef, 0xe8, 0x8c, 0x35, 0x03, 0xd4, 0x7f, 0xfb, 0x05, 0xc1, 0x5e, 0x90, 0x20, 0x3d, 0x82, + 0xf7, 0xea, 0x0a, 0x0d, 0x7e, 0xf8, 0x50, 0x1a, 0xc4, 0x07, 0x57, 0xb8, 0x3c, 0x62, 0xe3, 0xc8, + 0xac, 0x52, 0x64, 0x10, 0xd0, 0xd9, 0x13, 0x0c, 0x12, 0x29, 0x51, 0xb9, 0xcf, 0xd6, 0x73, 0x8d, + 0x81, 0x54, 0xc0, 0xed, 0x4e, 0x44, 0xa7, 0x2a, 0x85, 0x25, 0xe6, 0xca, 0x7c, 0x8b, 0x56, 0x80 + }; + + private static readonly byte[] S1 = new byte[]{ + 0xce, 0xbb, 0xeb, 0x92, 0xea, 0xcb, 0x13, 0xc1, 0xe9, 0x3a, 0xd6, 0xb2, 0xd2, 0x90, 0x17, 0xf8, + 0x42, 0x15, 0x56, 0xb4, 0x65, 0x1c, 0x88, 0x43, 0xc5, 0x5c, 0x36, 0xba, 0xf5, 0x57, 0x67, 0x8d, + 0x31, 0xf6, 0x64, 0x58, 0x9e, 0xf4, 0x22, 0xaa, 0x75, 0x0f, 0x02, 0xb1, 0xdf, 0x6d, 0x73, 0x4d, + 0x7c, 0x26, 0x2e, 0xf7, 0x08, 0x5d, 0x44, 0x3e, 0x9f, 0x14, 0xc8, 0xae, 0x54, 0x10, 0xd8, 0xbc, + 0x1a, 0x6b, 0x69, 0xf3, 0xbd, 0x33, 0xab, 0xfa, 0xd1, 0x9b, 0x68, 0x4e, 0x16, 0x95, 0x91, 0xee, + 0x4c, 0x63, 0x8e, 0x5b, 0xcc, 0x3c, 0x19, 0xa1, 0x81, 0x49, 0x7b, 0xd9, 0x6f, 0x37, 0x60, 0xca, + 0xe7, 0x2b, 0x48, 0xfd, 0x96, 0x45, 0xfc, 0x41, 0x12, 0x0d, 0x79, 0xe5, 0x89, 0x8c, 0xe3, 0x20, + 0x30, 0xdc, 0xb7, 0x6c, 0x4a, 0xb5, 0x3f, 0x97, 0xd4, 0x62, 0x2d, 0x06, 0xa4, 0xa5, 0x83, 0x5f, + 0x2a, 0xda, 0xc9, 0x00, 0x7e, 0xa2, 0x55, 0xbf, 0x11, 0xd5, 0x9c, 0xcf, 0x0e, 0x0a, 0x3d, 0x51, + 0x7d, 0x93, 0x1b, 0xfe, 0xc4, 0x47, 0x09, 0x86, 0x0b, 0x8f, 0x9d, 0x6a, 0x07, 0xb9, 0xb0, 0x98, + 0x18, 0x32, 0x71, 0x4b, 0xef, 0x3b, 0x70, 0xa0, 0xe4, 0x40, 0xff, 0xc3, 0xa9, 0xe6, 0x78, 0xf9, + 0x8b, 0x46, 0x80, 0x1e, 0x38, 0xe1, 0xb8, 0xa8, 0xe0, 0x0c, 0x23, 0x76, 0x1d, 0x25, 0x24, 0x05, + 0xf1, 0x6e, 0x94, 0x28, 0x9a, 0x84, 0xe8, 0xa3, 0x4f, 0x77, 0xd3, 0x85, 0xe2, 0x52, 0xf2, 0x82, + 0x50, 0x7a, 0x2f, 0x74, 0x53, 0xb3, 0x61, 0xaf, 0x39, 0x35, 0xde, 0xcd, 0x1f, 0x99, 0xac, 0xad, + 0x72, 0x2c, 0xdd, 0xd0, 0x87, 0xbe, 0x5e, 0xa6, 0xec, 0x04, 0xc6, 0x03, 0x34, 0xfb, 0xdb, 0x59, + 0xb6, 0xc2, 0x01, 0xf0, 0x5a, 0xed, 0xa7, 0x66, 0x21, 0x7f, 0x8a, 0x27, 0xc7, 0xc0, 0x29, 0xd7 + }; + + private static readonly byte[] S2 = new byte[]{ + 0x93, 0xd9, 0x9a, 0xb5, 0x98, 0x22, 0x45, 0xfc, 0xba, 0x6a, 0xdf, 0x02, 0x9f, 0xdc, 0x51, 0x59, + 0x4a, 0x17, 0x2b, 0xc2, 0x94, 0xf4, 0xbb, 0xa3, 0x62, 0xe4, 0x71, 0xd4, 0xcd, 0x70, 0x16, 0xe1, + 0x49, 0x3c, 0xc0, 0xd8, 0x5c, 0x9b, 0xad, 0x85, 0x53, 0xa1, 0x7a, 0xc8, 0x2d, 0xe0, 0xd1, 0x72, + 0xa6, 0x2c, 0xc4, 0xe3, 0x76, 0x78, 0xb7, 0xb4, 0x09, 0x3b, 0x0e, 0x41, 0x4c, 0xde, 0xb2, 0x90, + 0x25, 0xa5, 0xd7, 0x03, 0x11, 0x00, 0xc3, 0x2e, 0x92, 0xef, 0x4e, 0x12, 0x9d, 0x7d, 0xcb, 0x35, + 0x10, 0xd5, 0x4f, 0x9e, 0x4d, 0xa9, 0x55, 0xc6, 0xd0, 0x7b, 0x18, 0x97, 0xd3, 0x36, 0xe6, 0x48, + 0x56, 0x81, 0x8f, 0x77, 0xcc, 0x9c, 0xb9, 0xe2, 0xac, 0xb8, 0x2f, 0x15, 0xa4, 0x7c, 0xda, 0x38, + 0x1e, 0x0b, 0x05, 0xd6, 0x14, 0x6e, 0x6c, 0x7e, 0x66, 0xfd, 0xb1, 0xe5, 0x60, 0xaf, 0x5e, 0x33, + 0x87, 0xc9, 0xf0, 0x5d, 0x6d, 0x3f, 0x88, 0x8d, 0xc7, 0xf7, 0x1d, 0xe9, 0xec, 0xed, 0x80, 0x29, + 0x27, 0xcf, 0x99, 0xa8, 0x50, 0x0f, 0x37, 0x24, 0x28, 0x30, 0x95, 0xd2, 0x3e, 0x5b, 0x40, 0x83, + 0xb3, 0x69, 0x57, 0x1f, 0x07, 0x1c, 0x8a, 0xbc, 0x20, 0xeb, 0xce, 0x8e, 0xab, 0xee, 0x31, 0xa2, + 0x73, 0xf9, 0xca, 0x3a, 0x1a, 0xfb, 0x0d, 0xc1, 0xfe, 0xfa, 0xf2, 0x6f, 0xbd, 0x96, 0xdd, 0x43, + 0x52, 0xb6, 0x08, 0xf3, 0xae, 0xbe, 0x19, 0x89, 0x32, 0x26, 0xb0, 0xea, 0x4b, 0x64, 0x84, 0x82, + 0x6b, 0xf5, 0x79, 0xbf, 0x01, 0x5f, 0x75, 0x63, 0x1b, 0x23, 0x3d, 0x68, 0x2a, 0x65, 0xe8, 0x91, + 0xf6, 0xff, 0x13, 0x58, 0xf1, 0x47, 0x0a, 0x7f, 0xc5, 0xa7, 0xe7, 0x61, 0x5a, 0x06, 0x46, 0x44, + 0x42, 0x04, 0xa0, 0xdb, 0x39, 0x86, 0x54, 0xaa, 0x8c, 0x34, 0x21, 0x8b, 0xf8, 0x0c, 0x74, 0x67 + }; + + private static readonly byte[] S3 = new byte[]{ + 0x68, 0x8d, 0xca, 0x4d, 0x73, 0x4b, 0x4e, 0x2a, 0xd4, 0x52, 0x26, 0xb3, 0x54, 0x1e, 0x19, 0x1f, + 0x22, 0x03, 0x46, 0x3d, 0x2d, 0x4a, 0x53, 0x83, 0x13, 0x8a, 0xb7, 0xd5, 0x25, 0x79, 0xf5, 0xbd, + 0x58, 0x2f, 0x0d, 0x02, 0xed, 0x51, 0x9e, 0x11, 0xf2, 0x3e, 0x55, 0x5e, 0xd1, 0x16, 0x3c, 0x66, + 0x70, 0x5d, 0xf3, 0x45, 0x40, 0xcc, 0xe8, 0x94, 0x56, 0x08, 0xce, 0x1a, 0x3a, 0xd2, 0xe1, 0xdf, + 0xb5, 0x38, 0x6e, 0x0e, 0xe5, 0xf4, 0xf9, 0x86, 0xe9, 0x4f, 0xd6, 0x85, 0x23, 0xcf, 0x32, 0x99, + 0x31, 0x14, 0xae, 0xee, 0xc8, 0x48, 0xd3, 0x30, 0xa1, 0x92, 0x41, 0xb1, 0x18, 0xc4, 0x2c, 0x71, + 0x72, 0x44, 0x15, 0xfd, 0x37, 0xbe, 0x5f, 0xaa, 0x9b, 0x88, 0xd8, 0xab, 0x89, 0x9c, 0xfa, 0x60, + 0xea, 0xbc, 0x62, 0x0c, 0x24, 0xa6, 0xa8, 0xec, 0x67, 0x20, 0xdb, 0x7c, 0x28, 0xdd, 0xac, 0x5b, + 0x34, 0x7e, 0x10, 0xf1, 0x7b, 0x8f, 0x63, 0xa0, 0x05, 0x9a, 0x43, 0x77, 0x21, 0xbf, 0x27, 0x09, + 0xc3, 0x9f, 0xb6, 0xd7, 0x29, 0xc2, 0xeb, 0xc0, 0xa4, 0x8b, 0x8c, 0x1d, 0xfb, 0xff, 0xc1, 0xb2, + 0x97, 0x2e, 0xf8, 0x65, 0xf6, 0x75, 0x07, 0x04, 0x49, 0x33, 0xe4, 0xd9, 0xb9, 0xd0, 0x42, 0xc7, + 0x6c, 0x90, 0x00, 0x8e, 0x6f, 0x50, 0x01, 0xc5, 0xda, 0x47, 0x3f, 0xcd, 0x69, 0xa2, 0xe2, 0x7a, + 0xa7, 0xc6, 0x93, 0x0f, 0x0a, 0x06, 0xe6, 0x2b, 0x96, 0xa3, 0x1c, 0xaf, 0x6a, 0x12, 0x84, 0x39, + 0xe7, 0xb0, 0x82, 0xf7, 0xfe, 0x9d, 0x87, 0x5c, 0x81, 0x35, 0xde, 0xb4, 0xa5, 0xfc, 0x80, 0xef, + 0xcb, 0xbb, 0x6b, 0x76, 0xba, 0x5a, 0x7d, 0x78, 0x0b, 0x95, 0xe3, 0xad, 0x74, 0x98, 0x3b, 0x36, + 0x64, 0x6d, 0xdc, 0xf0, 0x59, 0xa9, 0x4c, 0x17, 0x7f, 0x91, 0xb8, 0xc9, 0x57, 0x1b, 0xe0, 0x61 + }; + + private static readonly byte[] T0 = new byte[]{ + 0xa4, 0xa2, 0xa9, 0xc5, 0x4e, 0xc9, 0x03, 0xd9, 0x7e, 0x0f, 0xd2, 0xad, 0xe7, 0xd3, 0x27, 0x5b, + 0xe3, 0xa1, 0xe8, 0xe6, 0x7c, 0x2a, 0x55, 0x0c, 0x86, 0x39, 0xd7, 0x8d, 0xb8, 0x12, 0x6f, 0x28, + 0xcd, 0x8a, 0x70, 0x56, 0x72, 0xf9, 0xbf, 0x4f, 0x73, 0xe9, 0xf7, 0x57, 0x16, 0xac, 0x50, 0xc0, + 0x9d, 0xb7, 0x47, 0x71, 0x60, 0xc4, 0x74, 0x43, 0x6c, 0x1f, 0x93, 0x77, 0xdc, 0xce, 0x20, 0x8c, + 0x99, 0x5f, 0x44, 0x01, 0xf5, 0x1e, 0x87, 0x5e, 0x61, 0x2c, 0x4b, 0x1d, 0x81, 0x15, 0xf4, 0x23, + 0xd6, 0xea, 0xe1, 0x67, 0xf1, 0x7f, 0xfe, 0xda, 0x3c, 0x07, 0x53, 0x6a, 0x84, 0x9c, 0xcb, 0x02, + 0x83, 0x33, 0xdd, 0x35, 0xe2, 0x59, 0x5a, 0x98, 0xa5, 0x92, 0x64, 0x04, 0x06, 0x10, 0x4d, 0x1c, + 0x97, 0x08, 0x31, 0xee, 0xab, 0x05, 0xaf, 0x79, 0xa0, 0x18, 0x46, 0x6d, 0xfc, 0x89, 0xd4, 0xc7, + 0xff, 0xf0, 0xcf, 0x42, 0x91, 0xf8, 0x68, 0x0a, 0x65, 0x8e, 0xb6, 0xfd, 0xc3, 0xef, 0x78, 0x4c, + 0xcc, 0x9e, 0x30, 0x2e, 0xbc, 0x0b, 0x54, 0x1a, 0xa6, 0xbb, 0x26, 0x80, 0x48, 0x94, 0x32, 0x7d, + 0xa7, 0x3f, 0xae, 0x22, 0x3d, 0x66, 0xaa, 0xf6, 0x00, 0x5d, 0xbd, 0x4a, 0xe0, 0x3b, 0xb4, 0x17, + 0x8b, 0x9f, 0x76, 0xb0, 0x24, 0x9a, 0x25, 0x63, 0xdb, 0xeb, 0x7a, 0x3e, 0x5c, 0xb3, 0xb1, 0x29, + 0xf2, 0xca, 0x58, 0x6e, 0xd8, 0xa8, 0x2f, 0x75, 0xdf, 0x14, 0xfb, 0x13, 0x49, 0x88, 0xb2, 0xec, + 0xe4, 0x34, 0x2d, 0x96, 0xc6, 0x3a, 0xed, 0x95, 0x0e, 0xe5, 0x85, 0x6b, 0x40, 0x21, 0x9b, 0x09, + 0x19, 0x2b, 0x52, 0xde, 0x45, 0xa3, 0xfa, 0x51, 0xc2, 0xb5, 0xd1, 0x90, 0xb9, 0xf3, 0x37, 0xc1, + 0x0d, 0xba, 0x41, 0x11, 0x38, 0x7b, 0xbe, 0xd0, 0xd5, 0x69, 0x36, 0xc8, 0x62, 0x1b, 0x82, 0x8f + }; + + private static readonly byte[] T1 = new byte[]{ + 0x83, 0xf2, 0x2a, 0xeb, 0xe9, 0xbf, 0x7b, 0x9c, 0x34, 0x96, 0x8d, 0x98, 0xb9, 0x69, 0x8c, 0x29, + 0x3d, 0x88, 0x68, 0x06, 0x39, 0x11, 0x4c, 0x0e, 0xa0, 0x56, 0x40, 0x92, 0x15, 0xbc, 0xb3, 0xdc, + 0x6f, 0xf8, 0x26, 0xba, 0xbe, 0xbd, 0x31, 0xfb, 0xc3, 0xfe, 0x80, 0x61, 0xe1, 0x7a, 0x32, 0xd2, + 0x70, 0x20, 0xa1, 0x45, 0xec, 0xd9, 0x1a, 0x5d, 0xb4, 0xd8, 0x09, 0xa5, 0x55, 0x8e, 0x37, 0x76, + 0xa9, 0x67, 0x10, 0x17, 0x36, 0x65, 0xb1, 0x95, 0x62, 0x59, 0x74, 0xa3, 0x50, 0x2f, 0x4b, 0xc8, + 0xd0, 0x8f, 0xcd, 0xd4, 0x3c, 0x86, 0x12, 0x1d, 0x23, 0xef, 0xf4, 0x53, 0x19, 0x35, 0xe6, 0x7f, + 0x5e, 0xd6, 0x79, 0x51, 0x22, 0x14, 0xf7, 0x1e, 0x4a, 0x42, 0x9b, 0x41, 0x73, 0x2d, 0xc1, 0x5c, + 0xa6, 0xa2, 0xe0, 0x2e, 0xd3, 0x28, 0xbb, 0xc9, 0xae, 0x6a, 0xd1, 0x5a, 0x30, 0x90, 0x84, 0xf9, + 0xb2, 0x58, 0xcf, 0x7e, 0xc5, 0xcb, 0x97, 0xe4, 0x16, 0x6c, 0xfa, 0xb0, 0x6d, 0x1f, 0x52, 0x99, + 0x0d, 0x4e, 0x03, 0x91, 0xc2, 0x4d, 0x64, 0x77, 0x9f, 0xdd, 0xc4, 0x49, 0x8a, 0x9a, 0x24, 0x38, + 0xa7, 0x57, 0x85, 0xc7, 0x7c, 0x7d, 0xe7, 0xf6, 0xb7, 0xac, 0x27, 0x46, 0xde, 0xdf, 0x3b, 0xd7, + 0x9e, 0x2b, 0x0b, 0xd5, 0x13, 0x75, 0xf0, 0x72, 0xb6, 0x9d, 0x1b, 0x01, 0x3f, 0x44, 0xe5, 0x87, + 0xfd, 0x07, 0xf1, 0xab, 0x94, 0x18, 0xea, 0xfc, 0x3a, 0x82, 0x5f, 0x05, 0x54, 0xdb, 0x00, 0x8b, + 0xe3, 0x48, 0x0c, 0xca, 0x78, 0x89, 0x0a, 0xff, 0x3e, 0x5b, 0x81, 0xee, 0x71, 0xe2, 0xda, 0x2c, + 0xb8, 0xb5, 0xcc, 0x6e, 0xa8, 0x6b, 0xad, 0x60, 0xc6, 0x08, 0x04, 0x02, 0xe8, 0xf5, 0x4f, 0xa4, + 0xf3, 0xc0, 0xce, 0x43, 0x25, 0x1c, 0x21, 0x33, 0x0f, 0xaf, 0x47, 0xed, 0x66, 0x63, 0x93, 0xaa + }; + + private static readonly byte[] T2 = new byte[]{ + 0x45, 0xd4, 0x0b, 0x43, 0xf1, 0x72, 0xed, 0xa4, 0xc2, 0x38, 0xe6, 0x71, 0xfd, 0xb6, 0x3a, 0x95, + 0x50, 0x44, 0x4b, 0xe2, 0x74, 0x6b, 0x1e, 0x11, 0x5a, 0xc6, 0xb4, 0xd8, 0xa5, 0x8a, 0x70, 0xa3, + 0xa8, 0xfa, 0x05, 0xd9, 0x97, 0x40, 0xc9, 0x90, 0x98, 0x8f, 0xdc, 0x12, 0x31, 0x2c, 0x47, 0x6a, + 0x99, 0xae, 0xc8, 0x7f, 0xf9, 0x4f, 0x5d, 0x96, 0x6f, 0xf4, 0xb3, 0x39, 0x21, 0xda, 0x9c, 0x85, + 0x9e, 0x3b, 0xf0, 0xbf, 0xef, 0x06, 0xee, 0xe5, 0x5f, 0x20, 0x10, 0xcc, 0x3c, 0x54, 0x4a, 0x52, + 0x94, 0x0e, 0xc0, 0x28, 0xf6, 0x56, 0x60, 0xa2, 0xe3, 0x0f, 0xec, 0x9d, 0x24, 0x83, 0x7e, 0xd5, + 0x7c, 0xeb, 0x18, 0xd7, 0xcd, 0xdd, 0x78, 0xff, 0xdb, 0xa1, 0x09, 0xd0, 0x76, 0x84, 0x75, 0xbb, + 0x1d, 0x1a, 0x2f, 0xb0, 0xfe, 0xd6, 0x34, 0x63, 0x35, 0xd2, 0x2a, 0x59, 0x6d, 0x4d, 0x77, 0xe7, + 0x8e, 0x61, 0xcf, 0x9f, 0xce, 0x27, 0xf5, 0x80, 0x86, 0xc7, 0xa6, 0xfb, 0xf8, 0x87, 0xab, 0x62, + 0x3f, 0xdf, 0x48, 0x00, 0x14, 0x9a, 0xbd, 0x5b, 0x04, 0x92, 0x02, 0x25, 0x65, 0x4c, 0x53, 0x0c, + 0xf2, 0x29, 0xaf, 0x17, 0x6c, 0x41, 0x30, 0xe9, 0x93, 0x55, 0xf7, 0xac, 0x68, 0x26, 0xc4, 0x7d, + 0xca, 0x7a, 0x3e, 0xa0, 0x37, 0x03, 0xc1, 0x36, 0x69, 0x66, 0x08, 0x16, 0xa7, 0xbc, 0xc5, 0xd3, + 0x22, 0xb7, 0x13, 0x46, 0x32, 0xe8, 0x57, 0x88, 0x2b, 0x81, 0xb2, 0x4e, 0x64, 0x1c, 0xaa, 0x91, + 0x58, 0x2e, 0x9b, 0x5c, 0x1b, 0x51, 0x73, 0x42, 0x23, 0x01, 0x6e, 0xf3, 0x0d, 0xbe, 0x3d, 0x0a, + 0x2d, 0x1f, 0x67, 0x33, 0x19, 0x7b, 0x5e, 0xea, 0xde, 0x8b, 0xcb, 0xa9, 0x8c, 0x8d, 0xad, 0x49, + 0x82, 0xe4, 0xba, 0xc3, 0x15, 0xd1, 0xe0, 0x89, 0xfc, 0xb1, 0xb9, 0xb5, 0x07, 0x79, 0xb8, 0xe1 + }; + + private static readonly byte[] T3 = new byte[]{ + 0xb2, 0xb6, 0x23, 0x11, 0xa7, 0x88, 0xc5, 0xa6, 0x39, 0x8f, 0xc4, 0xe8, 0x73, 0x22, 0x43, 0xc3, + 0x82, 0x27, 0xcd, 0x18, 0x51, 0x62, 0x2d, 0xf7, 0x5c, 0x0e, 0x3b, 0xfd, 0xca, 0x9b, 0x0d, 0x0f, + 0x79, 0x8c, 0x10, 0x4c, 0x74, 0x1c, 0x0a, 0x8e, 0x7c, 0x94, 0x07, 0xc7, 0x5e, 0x14, 0xa1, 0x21, + 0x57, 0x50, 0x4e, 0xa9, 0x80, 0xd9, 0xef, 0x64, 0x41, 0xcf, 0x3c, 0xee, 0x2e, 0x13, 0x29, 0xba, + 0x34, 0x5a, 0xae, 0x8a, 0x61, 0x33, 0x12, 0xb9, 0x55, 0xa8, 0x15, 0x05, 0xf6, 0x03, 0x06, 0x49, + 0xb5, 0x25, 0x09, 0x16, 0x0c, 0x2a, 0x38, 0xfc, 0x20, 0xf4, 0xe5, 0x7f, 0xd7, 0x31, 0x2b, 0x66, + 0x6f, 0xff, 0x72, 0x86, 0xf0, 0xa3, 0x2f, 0x78, 0x00, 0xbc, 0xcc, 0xe2, 0xb0, 0xf1, 0x42, 0xb4, + 0x30, 0x5f, 0x60, 0x04, 0xec, 0xa5, 0xe3, 0x8b, 0xe7, 0x1d, 0xbf, 0x84, 0x7b, 0xe6, 0x81, 0xf8, + 0xde, 0xd8, 0xd2, 0x17, 0xce, 0x4b, 0x47, 0xd6, 0x69, 0x6c, 0x19, 0x99, 0x9a, 0x01, 0xb3, 0x85, + 0xb1, 0xf9, 0x59, 0xc2, 0x37, 0xe9, 0xc8, 0xa0, 0xed, 0x4f, 0x89, 0x68, 0x6d, 0xd5, 0x26, 0x91, + 0x87, 0x58, 0xbd, 0xc9, 0x98, 0xdc, 0x75, 0xc0, 0x76, 0xf5, 0x67, 0x6b, 0x7e, 0xeb, 0x52, 0xcb, + 0xd1, 0x5b, 0x9f, 0x0b, 0xdb, 0x40, 0x92, 0x1a, 0xfa, 0xac, 0xe4, 0xe1, 0x71, 0x1f, 0x65, 0x8d, + 0x97, 0x9e, 0x95, 0x90, 0x5d, 0xb7, 0xc1, 0xaf, 0x54, 0xfb, 0x02, 0xe0, 0x35, 0xbb, 0x3a, 0x4d, + 0xad, 0x2c, 0x3d, 0x56, 0x08, 0x1b, 0x4a, 0x93, 0x6a, 0xab, 0xb8, 0x7a, 0xf2, 0x7d, 0xda, 0x3f, + 0xfe, 0x3e, 0xbe, 0xea, 0xaa, 0x44, 0xc6, 0xd0, 0x36, 0x48, 0x70, 0x96, 0x77, 0x24, 0x53, 0xdf, + 0xf3, 0x83, 0x28, 0x32, 0x45, 0x1e, 0xa4, 0xd3, 0xa2, 0x46, 0x6e, 0x9c, 0xdd, 0x63, 0xd4, 0x9d + }; + +#endregion + + public virtual string AlgorithmName + { + get { return "DSTU7624"; } + } + + public virtual int GetBlockSize() + { + return wordsInBlock << 3; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Dstu7624Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Dstu7624Engine.cs.meta new file mode 100644 index 000000000..0a152daf5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Dstu7624Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b7431fbefc683994a9e9387e00a6f10c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Dstu7624WrapEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Dstu7624WrapEngine.cs new file mode 100644 index 000000000..36d8c08aa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Dstu7624WrapEngine.cs @@ -0,0 +1,220 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + public class Dstu7624WrapEngine + : IWrapper + { + private KeyParameter param; + private Dstu7624Engine engine; + private bool forWrapping; + private int blockSize; + + public Dstu7624WrapEngine(int blockSizeBits) + { + engine = new Dstu7624Engine(blockSizeBits); + param = null; + + blockSize = blockSizeBits / 8; + } + + public string AlgorithmName + { + get { return "Dstu7624WrapEngine"; } + } + + public void Init(bool forWrapping, ICipherParameters parameters) + { + this.forWrapping = forWrapping; + + if (parameters is KeyParameter) + { + this.param = (KeyParameter)parameters; + + engine.Init(forWrapping, param); + } + else + { + throw new ArgumentException("Bad parameters passed to Dstu7624WrapEngine"); + } + } + + public byte[] Wrap(byte[] input, int inOff, int length) + { + if (!forWrapping) + throw new InvalidOperationException("Not set for wrapping"); + + if (length % blockSize != 0) + throw new ArgumentException("Padding not supported"); + + int n = 2 * (1 + length / blockSize); + int V = (n - 1) * 6; + + byte[] buffer = new byte[length + blockSize]; + Array.Copy(input, inOff, buffer, 0, length); + //Console.WriteLine(BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(buffer)); + + byte[] B = new byte[blockSize / 2]; + Array.Copy(buffer, 0, B, 0, blockSize / 2); + //Console.WriteLine("B0: "+ BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(B)); + + var bTemp = new List(); + int bHalfBlocksLen = buffer.Length - blockSize / 2; + int bufOff = blockSize / 2; + while (bHalfBlocksLen != 0) + { + byte[] temp = new byte[blockSize / 2]; + Array.Copy(buffer, bufOff, temp, 0, blockSize / 2); + //Console.WriteLine(BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(buffer)); + //Console.WriteLine(buffer.Length); + //Console.WriteLine("b: " + BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(temp)); + + bTemp.Add(temp); + + bHalfBlocksLen -= blockSize / 2; + bufOff += blockSize / 2; + } + + for (int j = 0; j < V; j++) + { + Array.Copy(B, 0, buffer, 0, blockSize / 2); + Array.Copy(bTemp[0], 0, buffer, blockSize / 2, blockSize / 2); + + engine.ProcessBlock(buffer, 0, buffer, 0); + + byte[] intArray = Pack.UInt32_To_LE((uint)(j + 1)); + for (int byteNum = 0; byteNum < intArray.Length; byteNum++) + { + buffer[byteNum + blockSize / 2] ^= intArray[byteNum]; + } + + Array.Copy(buffer, blockSize / 2, B, 0, blockSize / 2); + + for (int i = 2; i < n; i++) + { + Array.Copy(bTemp[i - 1], 0, bTemp[i - 2], 0, blockSize / 2); + } + + Array.Copy(buffer, 0, bTemp[n - 2], 0, blockSize / 2); + + //Console.WriteLine("B" + j.ToString() + ": " + BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(B)); + //Console.WriteLine("b: " + BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(bTemp[0])); + //Console.WriteLine("b: " + BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(bTemp[1])); + //Console.WriteLine("b: " + BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(bTemp[2])); + + //Console.WriteLine(BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(buffer)); + } + + Array.Copy(B, 0, buffer, 0, blockSize / 2); + bufOff = blockSize / 2; + + for (int i = 0; i < n - 1; i++) + { + Array.Copy((byte[])bTemp[i], 0, buffer, bufOff, blockSize / 2); + bufOff += blockSize / 2; + } + + return buffer; + } + + public byte[] Unwrap(byte[] input, int inOff, int length) + { + if (forWrapping) + throw new InvalidOperationException("not set for unwrapping"); + + if (length % blockSize != 0) + throw new ArgumentException("Padding not supported"); + + int n = 2 * length / blockSize; + int V = (n - 1) * 6; + + byte[] buffer = new byte[length]; + Array.Copy(input, inOff, buffer, 0, length); + + byte[] B = new byte[blockSize / 2]; + Array.Copy(buffer, 0, B, 0, blockSize / 2); + //Console.WriteLine("B18: " + BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(B)); + + var bTemp = new List(); + + int bHalfBlocksLen = buffer.Length - blockSize / 2; + int bufOff = blockSize / 2; + while (bHalfBlocksLen != 0) + { + byte[] temp = new byte[blockSize / 2]; + Array.Copy(buffer, bufOff, temp, 0, blockSize / 2); + //Console.WriteLine(BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(buffer)); + //Console.WriteLine(buffer.Length); + //Console.WriteLine("b: " + BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(temp)); + + bTemp.Add(temp); + + bHalfBlocksLen -= blockSize / 2; + bufOff += blockSize / 2; + } + + for (int j = 0; j < V; j++) + { + Array.Copy(bTemp[n - 2], 0, buffer, 0, blockSize / 2); + Array.Copy(B, 0, buffer, blockSize / 2, blockSize / 2); + + byte[] intArray = Pack.UInt32_To_LE((uint)(V - j)); + for (int byteNum = 0; byteNum < intArray.Length; byteNum++) + { + buffer[byteNum + blockSize / 2] ^= intArray[byteNum]; + } + + //Console.WriteLine(BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(buffer)); + + engine.ProcessBlock(buffer, 0, buffer, 0); + + //Console.WriteLine(BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(buffer)); + + Array.Copy(buffer, 0, B, 0, blockSize / 2); + + for (int i = 2; i < n; i++) + { + Array.Copy(bTemp[n - i - 1], 0, bTemp[n - i], 0, blockSize / 2); + } + + Array.Copy(buffer, blockSize / 2, bTemp[0], 0, blockSize / 2); + + //Console.WriteLine("B" + (V - j - 1).ToString() + ": " + BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(B)); + //Console.WriteLine("b: " + BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(bTemp[0])); + //Console.WriteLine("b: " + BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(bTemp[1])); + //Console.WriteLine("b: " + BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(bTemp[2])); + + //Console.WriteLine(BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders.Hex.ToHexString(buffer)); + } + + Array.Copy(B, 0, buffer, 0, blockSize / 2); + bufOff = blockSize / 2; + + for (int i = 0; i < n - 1; i++) + { + Array.Copy(bTemp[i], 0, buffer, bufOff, blockSize / 2); + bufOff += blockSize / 2; + } + + byte diff = 0; + for (int i = buffer.Length - blockSize; i < buffer.Length; ++i) + { + diff |= buffer[i]; + } + + if (diff != 0) + throw new InvalidCipherTextException("checksum failed"); + + return Arrays.CopyOfRange(buffer, 0, buffer.Length - blockSize); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Dstu7624WrapEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Dstu7624WrapEngine.cs.meta new file mode 100644 index 000000000..a237aaf34 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Dstu7624WrapEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ebfb6e5ada8143143a0e9abc8f253d26 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ElGamalEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ElGamalEngine.cs new file mode 100644 index 000000000..01490dd1c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ElGamalEngine.cs @@ -0,0 +1,174 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * this does your basic ElGamal algorithm. + */ + public class ElGamalEngine + : IAsymmetricBlockCipher + { + private ElGamalKeyParameters key; + private SecureRandom random; + private bool forEncryption; + private int bitSize; + + public virtual string AlgorithmName + { + get { return "ElGamal"; } + } + + /** + * initialise the ElGamal engine. + * + * @param forEncryption true if we are encrypting, false otherwise. + * @param param the necessary ElGamal key parameters. + */ + public virtual void Init(bool forEncryption, ICipherParameters parameters) + { + if (parameters is ParametersWithRandom withRandom) + { + this.key = (ElGamalKeyParameters)withRandom.Parameters; + this.random = withRandom.Random; + } + else + { + this.key = (ElGamalKeyParameters)parameters; + this.random = CryptoServicesRegistrar.GetSecureRandom(); + } + + this.forEncryption = forEncryption; + this.bitSize = key.Parameters.P.BitLength; + + if (forEncryption) + { + if (!(key is ElGamalPublicKeyParameters)) + throw new ArgumentException("ElGamalPublicKeyParameters are required for encryption."); + } + else + { + if (!(key is ElGamalPrivateKeyParameters)) + throw new ArgumentException("ElGamalPrivateKeyParameters are required for decryption."); + } + } + + /** + * Return the maximum size for an input block to this engine. + * For ElGamal this is always one byte less than the size of P on + * encryption, and twice the length as the size of P on decryption. + * + * @return maximum size for an input block. + */ + public virtual int GetInputBlockSize() + { + if (forEncryption) + { + return (bitSize - 1) / 8; + } + + return 2 * ((bitSize + 7) / 8); + } + + /** + * Return the maximum size for an output block to this engine. + * For ElGamal this is always one byte less than the size of P on + * decryption, and twice the length as the size of P on encryption. + * + * @return maximum size for an output block. + */ + public virtual int GetOutputBlockSize() + { + if (forEncryption) + { + return 2 * ((bitSize + 7) / 8); + } + + return (bitSize - 1) / 8; + } + + /** + * Process a single block using the basic ElGamal algorithm. + * + * @param in the input array. + * @param inOff the offset into the input buffer where the data starts. + * @param length the length of the data to be processed. + * @return the result of the ElGamal process. + * @exception DataLengthException the input block is too large. + */ + public virtual byte[] ProcessBlock( + byte[] input, + int inOff, + int length) + { + if (key == null) + throw new InvalidOperationException("ElGamal engine not initialised"); + + int maxLength = forEncryption + ? (bitSize - 1 + 7) / 8 + : GetInputBlockSize(); + + if (length > maxLength) + throw new DataLengthException("input too large for ElGamal cipher.\n"); + + BigInteger p = key.Parameters.P; + + byte[] output; + if (key is ElGamalPrivateKeyParameters) // decryption + { + int halfLength = length / 2; + BigInteger gamma = new BigInteger(1, input, inOff, halfLength); + BigInteger phi = new BigInteger(1, input, inOff + halfLength, halfLength); + + ElGamalPrivateKeyParameters priv = (ElGamalPrivateKeyParameters) key; + + // a shortcut, which generally relies on p being prime amongst other things. + // if a problem with this shows up, check the p and g values! + BigInteger m = gamma.ModPow(p.Subtract(BigInteger.One).Subtract(priv.X), p).Multiply(phi).Mod(p); + + output = m.ToByteArrayUnsigned(); + } + else // encryption + { + BigInteger tmp = new BigInteger(1, input, inOff, length); + + if (tmp.BitLength >= p.BitLength) + throw new DataLengthException("input too large for ElGamal cipher.\n"); + + + ElGamalPublicKeyParameters pub = (ElGamalPublicKeyParameters) key; + + BigInteger pSub2 = p.Subtract(BigInteger.Two); + + // TODO In theory, a series of 'k', 'g.ModPow(k, p)' and 'y.ModPow(k, p)' can be pre-calculated + BigInteger k; + do + { + k = new BigInteger(p.BitLength, random); + } + while (k.SignValue == 0 || k.CompareTo(pSub2) > 0); + + BigInteger g = key.Parameters.G; + BigInteger gamma = g.ModPow(k, p); + BigInteger phi = tmp.Multiply(pub.Y.ModPow(k, p)).Mod(p); + + output = new byte[this.GetOutputBlockSize()]; + + // TODO Add methods to allow writing BigInteger to existing byte array? + byte[] out1 = gamma.ToByteArrayUnsigned(); + byte[] out2 = phi.ToByteArrayUnsigned(); + out1.CopyTo(output, output.Length / 2 - out1.Length); + out2.CopyTo(output, output.Length - out2.Length); + } + + return output; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ElGamalEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ElGamalEngine.cs.meta new file mode 100644 index 000000000..6c78e03cb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ElGamalEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aeba69dc4e3260b439d2c421e50fce8b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/GOST28147Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/GOST28147Engine.cs new file mode 100644 index 000000000..219be7aa9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/GOST28147Engine.cs @@ -0,0 +1,408 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * implementation of GOST 28147-89 + */ + public class Gost28147Engine + : IBlockCipher + { + private const int BlockSize = 8; + private int[] workingKey = null; + private bool forEncryption; + + private byte[] S = Sbox_Default; + + // these are the S-boxes given in Applied Cryptography 2nd Ed., p. 333 + // This is default S-box! + private static readonly byte[] Sbox_Default = { + 0x4,0xA,0x9,0x2,0xD,0x8,0x0,0xE,0x6,0xB,0x1,0xC,0x7,0xF,0x5,0x3, + 0xE,0xB,0x4,0xC,0x6,0xD,0xF,0xA,0x2,0x3,0x8,0x1,0x0,0x7,0x5,0x9, + 0x5,0x8,0x1,0xD,0xA,0x3,0x4,0x2,0xE,0xF,0xC,0x7,0x6,0x0,0x9,0xB, + 0x7,0xD,0xA,0x1,0x0,0x8,0x9,0xF,0xE,0x4,0x6,0xC,0xB,0x2,0x5,0x3, + 0x6,0xC,0x7,0x1,0x5,0xF,0xD,0x8,0x4,0xA,0x9,0xE,0x0,0x3,0xB,0x2, + 0x4,0xB,0xA,0x0,0x7,0x2,0x1,0xD,0x3,0x6,0x8,0x5,0x9,0xC,0xF,0xE, + 0xD,0xB,0x4,0x1,0x3,0xF,0x5,0x9,0x0,0xA,0xE,0x7,0x6,0x8,0x2,0xC, + 0x1,0xF,0xD,0x0,0x5,0x7,0xA,0x4,0x9,0x2,0x3,0xE,0x6,0xB,0x8,0xC + }; + + /* + * class content S-box parameters for encrypting + * getting from, see: http://tools.ietf.org/id/draft-popov-cryptopro-cpalgs-01.txt + * http://tools.ietf.org/id/draft-popov-cryptopro-cpalgs-02.txt + */ + private static readonly byte[] ESbox_Test = { + 0x4,0x2,0xF,0x5,0x9,0x1,0x0,0x8,0xE,0x3,0xB,0xC,0xD,0x7,0xA,0x6, + 0xC,0x9,0xF,0xE,0x8,0x1,0x3,0xA,0x2,0x7,0x4,0xD,0x6,0x0,0xB,0x5, + 0xD,0x8,0xE,0xC,0x7,0x3,0x9,0xA,0x1,0x5,0x2,0x4,0x6,0xF,0x0,0xB, + 0xE,0x9,0xB,0x2,0x5,0xF,0x7,0x1,0x0,0xD,0xC,0x6,0xA,0x4,0x3,0x8, + 0x3,0xE,0x5,0x9,0x6,0x8,0x0,0xD,0xA,0xB,0x7,0xC,0x2,0x1,0xF,0x4, + 0x8,0xF,0x6,0xB,0x1,0x9,0xC,0x5,0xD,0x3,0x7,0xA,0x0,0xE,0x2,0x4, + 0x9,0xB,0xC,0x0,0x3,0x6,0x7,0x5,0x4,0x8,0xE,0xF,0x1,0xA,0x2,0xD, + 0xC,0x6,0x5,0x2,0xB,0x0,0x9,0xD,0x3,0xE,0x7,0xA,0xF,0x4,0x1,0x8 + }; + + private static readonly byte[] ESbox_A = { + 0x9,0x6,0x3,0x2,0x8,0xB,0x1,0x7,0xA,0x4,0xE,0xF,0xC,0x0,0xD,0x5, + 0x3,0x7,0xE,0x9,0x8,0xA,0xF,0x0,0x5,0x2,0x6,0xC,0xB,0x4,0xD,0x1, + 0xE,0x4,0x6,0x2,0xB,0x3,0xD,0x8,0xC,0xF,0x5,0xA,0x0,0x7,0x1,0x9, + 0xE,0x7,0xA,0xC,0xD,0x1,0x3,0x9,0x0,0x2,0xB,0x4,0xF,0x8,0x5,0x6, + 0xB,0x5,0x1,0x9,0x8,0xD,0xF,0x0,0xE,0x4,0x2,0x3,0xC,0x7,0xA,0x6, + 0x3,0xA,0xD,0xC,0x1,0x2,0x0,0xB,0x7,0x5,0x9,0x4,0x8,0xF,0xE,0x6, + 0x1,0xD,0x2,0x9,0x7,0xA,0x6,0x0,0x8,0xC,0x4,0x5,0xF,0x3,0xB,0xE, + 0xB,0xA,0xF,0x5,0x0,0xC,0xE,0x8,0x6,0x2,0x3,0x9,0x1,0x7,0xD,0x4 + }; + + private static readonly byte[] ESbox_B = { + 0x8,0x4,0xB,0x1,0x3,0x5,0x0,0x9,0x2,0xE,0xA,0xC,0xD,0x6,0x7,0xF, + 0x0,0x1,0x2,0xA,0x4,0xD,0x5,0xC,0x9,0x7,0x3,0xF,0xB,0x8,0x6,0xE, + 0xE,0xC,0x0,0xA,0x9,0x2,0xD,0xB,0x7,0x5,0x8,0xF,0x3,0x6,0x1,0x4, + 0x7,0x5,0x0,0xD,0xB,0x6,0x1,0x2,0x3,0xA,0xC,0xF,0x4,0xE,0x9,0x8, + 0x2,0x7,0xC,0xF,0x9,0x5,0xA,0xB,0x1,0x4,0x0,0xD,0x6,0x8,0xE,0x3, + 0x8,0x3,0x2,0x6,0x4,0xD,0xE,0xB,0xC,0x1,0x7,0xF,0xA,0x0,0x9,0x5, + 0x5,0x2,0xA,0xB,0x9,0x1,0xC,0x3,0x7,0x4,0xD,0x0,0x6,0xF,0x8,0xE, + 0x0,0x4,0xB,0xE,0x8,0x3,0x7,0x1,0xA,0x2,0x9,0x6,0xF,0xD,0x5,0xC + }; + + private static readonly byte[] ESbox_C = { + 0x1,0xB,0xC,0x2,0x9,0xD,0x0,0xF,0x4,0x5,0x8,0xE,0xA,0x7,0x6,0x3, + 0x0,0x1,0x7,0xD,0xB,0x4,0x5,0x2,0x8,0xE,0xF,0xC,0x9,0xA,0x6,0x3, + 0x8,0x2,0x5,0x0,0x4,0x9,0xF,0xA,0x3,0x7,0xC,0xD,0x6,0xE,0x1,0xB, + 0x3,0x6,0x0,0x1,0x5,0xD,0xA,0x8,0xB,0x2,0x9,0x7,0xE,0xF,0xC,0x4, + 0x8,0xD,0xB,0x0,0x4,0x5,0x1,0x2,0x9,0x3,0xC,0xE,0x6,0xF,0xA,0x7, + 0xC,0x9,0xB,0x1,0x8,0xE,0x2,0x4,0x7,0x3,0x6,0x5,0xA,0x0,0xF,0xD, + 0xA,0x9,0x6,0x8,0xD,0xE,0x2,0x0,0xF,0x3,0x5,0xB,0x4,0x1,0xC,0x7, + 0x7,0x4,0x0,0x5,0xA,0x2,0xF,0xE,0xC,0x6,0x1,0xB,0xD,0x9,0x3,0x8 + }; + + private static readonly byte[] ESbox_D = { + 0xF,0xC,0x2,0xA,0x6,0x4,0x5,0x0,0x7,0x9,0xE,0xD,0x1,0xB,0x8,0x3, + 0xB,0x6,0x3,0x4,0xC,0xF,0xE,0x2,0x7,0xD,0x8,0x0,0x5,0xA,0x9,0x1, + 0x1,0xC,0xB,0x0,0xF,0xE,0x6,0x5,0xA,0xD,0x4,0x8,0x9,0x3,0x7,0x2, + 0x1,0x5,0xE,0xC,0xA,0x7,0x0,0xD,0x6,0x2,0xB,0x4,0x9,0x3,0xF,0x8, + 0x0,0xC,0x8,0x9,0xD,0x2,0xA,0xB,0x7,0x3,0x6,0x5,0x4,0xE,0xF,0x1, + 0x8,0x0,0xF,0x3,0x2,0x5,0xE,0xB,0x1,0xA,0x4,0x7,0xC,0x9,0xD,0x6, + 0x3,0x0,0x6,0xF,0x1,0xE,0x9,0x2,0xD,0x8,0xC,0x4,0xB,0xA,0x5,0x7, + 0x1,0xA,0x6,0x8,0xF,0xB,0x0,0x4,0xC,0x3,0x5,0x9,0x7,0xD,0x2,0xE + }; + + //S-box for digest + private static readonly byte[] DSbox_Test = { + 0x4,0xA,0x9,0x2,0xD,0x8,0x0,0xE,0x6,0xB,0x1,0xC,0x7,0xF,0x5,0x3, + 0xE,0xB,0x4,0xC,0x6,0xD,0xF,0xA,0x2,0x3,0x8,0x1,0x0,0x7,0x5,0x9, + 0x5,0x8,0x1,0xD,0xA,0x3,0x4,0x2,0xE,0xF,0xC,0x7,0x6,0x0,0x9,0xB, + 0x7,0xD,0xA,0x1,0x0,0x8,0x9,0xF,0xE,0x4,0x6,0xC,0xB,0x2,0x5,0x3, + 0x6,0xC,0x7,0x1,0x5,0xF,0xD,0x8,0x4,0xA,0x9,0xE,0x0,0x3,0xB,0x2, + 0x4,0xB,0xA,0x0,0x7,0x2,0x1,0xD,0x3,0x6,0x8,0x5,0x9,0xC,0xF,0xE, + 0xD,0xB,0x4,0x1,0x3,0xF,0x5,0x9,0x0,0xA,0xE,0x7,0x6,0x8,0x2,0xC, + 0x1,0xF,0xD,0x0,0x5,0x7,0xA,0x4,0x9,0x2,0x3,0xE,0x6,0xB,0x8,0xC + }; + + private static readonly byte[] DSbox_A = { + 0xA,0x4,0x5,0x6,0x8,0x1,0x3,0x7,0xD,0xC,0xE,0x0,0x9,0x2,0xB,0xF, + 0x5,0xF,0x4,0x0,0x2,0xD,0xB,0x9,0x1,0x7,0x6,0x3,0xC,0xE,0xA,0x8, + 0x7,0xF,0xC,0xE,0x9,0x4,0x1,0x0,0x3,0xB,0x5,0x2,0x6,0xA,0x8,0xD, + 0x4,0xA,0x7,0xC,0x0,0xF,0x2,0x8,0xE,0x1,0x6,0x5,0xD,0xB,0x9,0x3, + 0x7,0x6,0x4,0xB,0x9,0xC,0x2,0xA,0x1,0x8,0x0,0xE,0xF,0xD,0x3,0x5, + 0x7,0x6,0x2,0x4,0xD,0x9,0xF,0x0,0xA,0x1,0x5,0xB,0x8,0xE,0xC,0x3, + 0xD,0xE,0x4,0x1,0x7,0x0,0x5,0xA,0x3,0xC,0x8,0xF,0x6,0x2,0x9,0xB, + 0x1,0x3,0xA,0x9,0x5,0xB,0x4,0xF,0x8,0x6,0x7,0xE,0xD,0x0,0x2,0xC + }; + + // + // pre-defined sbox table + // + private static readonly Dictionary m_sBoxes = + new Dictionary(StringComparer.OrdinalIgnoreCase); + + static Gost28147Engine() + { + AddSBox("Default", Sbox_Default); + AddSBox("E-TEST", ESbox_Test); + AddSBox("E-A", ESbox_A); + AddSBox("E-B", ESbox_B); + AddSBox("E-C", ESbox_C); + AddSBox("E-D", ESbox_D); + AddSBox("D-TEST", DSbox_Test); + AddSBox("D-A", DSbox_A); + } + + private static void AddSBox(string sBoxName, byte[] sBox) + { + m_sBoxes.Add(sBoxName, sBox); + } + + /** + * standard constructor. + */ + public Gost28147Engine() + { + } + + /** + * initialise an Gost28147 cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param parameters the parameters required to set up the cipher. + * @exception ArgumentException if the parameters argument is inappropriate. + */ + public virtual void Init(bool forEncryption, ICipherParameters parameters) + { + if (parameters is ParametersWithSBox param) + { + // + // Set the S-Box + // + byte[] sBox = param.GetSBox(); + if (sBox.Length != Sbox_Default.Length) + throw new ArgumentException("invalid S-box passed to GOST28147 init"); + + this.S = Arrays.Clone(sBox); + + // + // set key if there is one + // + if (param.Parameters != null) + { + workingKey = GenerateWorkingKey(forEncryption, ((KeyParameter)param.Parameters).GetKey()); + } + } + else if (parameters is KeyParameter keyParameter) + { + workingKey = GenerateWorkingKey(forEncryption, keyParameter.GetKey()); + } + else if (parameters != null) + { + throw new ArgumentException("invalid parameter passed to Gost28147 init - " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + } + } + + public virtual string AlgorithmName + { + get { return "Gost28147"; } + } + + public virtual int GetBlockSize() + { + return BlockSize; + } + + public virtual int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (workingKey == null) + throw new InvalidOperationException("Gost28147 engine not initialised"); + + Check.DataLength(input, inOff, BlockSize, "input buffer too short"); + Check.OutputLength(output, outOff, BlockSize, "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Gost28147Func(workingKey, input.AsSpan(inOff), output.AsSpan(outOff)); +#else + Gost28147Func(workingKey, input, inOff, output, outOff); +#endif + + return BlockSize; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + if (workingKey == null) + throw new InvalidOperationException("Gost28147 engine not initialised"); + + Check.DataLength(input, BlockSize, "input buffer too short"); + Check.OutputLength(output, BlockSize, "output buffer too short"); + + Gost28147Func(workingKey, input, output); + + return BlockSize; + } +#endif + + private int[] GenerateWorkingKey(bool forEncryption, byte[] userKey) + { + this.forEncryption = forEncryption; + + if (userKey.Length != 32) + throw new ArgumentException("Key length invalid. Key needs to be 32 byte - 256 bit!!!"); + + int[] key = new int[8]; + for(int i=0; i != 8; i++) + { + key[i] = (int)Pack.LE_To_UInt32(userKey, i * 4); + } + + return key; + } + + private int Gost28147_mainStep(int n1, int key) + { + int cm = (key + n1); // CM1 + + // S-box replacing + + int om = S[ 0 + ((cm >> (0 * 4)) & 0xF)] << (0 * 4); + om += S[ 16 + ((cm >> (1 * 4)) & 0xF)] << (1 * 4); + om += S[ 32 + ((cm >> (2 * 4)) & 0xF)] << (2 * 4); + om += S[ 48 + ((cm >> (3 * 4)) & 0xF)] << (3 * 4); + om += S[ 64 + ((cm >> (4 * 4)) & 0xF)] << (4 * 4); + om += S[ 80 + ((cm >> (5 * 4)) & 0xF)] << (5 * 4); + om += S[ 96 + ((cm >> (6 * 4)) & 0xF)] << (6 * 4); + om += S[112 + ((cm >> (7 * 4)) & 0xF)] << (7 * 4); + +// return om << 11 | om >>> (32-11); // 11-leftshift + int omLeft = om << 11; + int omRight = (int)(((uint) om) >> (32 - 11)); // Note: Casts required to get unsigned bit rotation + + return omLeft | omRight; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void Gost28147Func(int[] workingKey, ReadOnlySpan input, Span output) + { + int N1 = (int)Pack.LE_To_UInt32(input); + int N2 = (int)Pack.LE_To_UInt32(input[4..]); + int tmp; //tmp -> for saving N1 + + if (this.forEncryption) + { + for(int k = 0; k < 3; k++) // 1-24 steps + { + for(int j = 0; j < 8; j++) + { + tmp = N1; + int step = Gost28147_mainStep(N1, workingKey[j]); + N1 = N2 ^ step; // CM2 + N2 = tmp; + } + } + for(int j = 7; j > 0; j--) // 25-31 steps + { + tmp = N1; + N1 = N2 ^ Gost28147_mainStep(N1, workingKey[j]); // CM2 + N2 = tmp; + } + } + else //decrypt + { + for(int j = 0; j < 8; j++) // 1-8 steps + { + tmp = N1; + N1 = N2 ^ Gost28147_mainStep(N1, workingKey[j]); // CM2 + N2 = tmp; + } + for(int k = 0; k < 3; k++) //9-31 steps + { + for(int j = 7; j >= 0; j--) + { + if ((k == 2) && (j==0)) + { + break; // break 32 step + } + tmp = N1; + N1 = N2 ^ Gost28147_mainStep(N1, workingKey[j]); // CM2 + N2 = tmp; + } + } + } + + N2 = N2 ^ Gost28147_mainStep(N1, workingKey[0]); // 32 step (N1=N1) + + Pack.UInt32_To_LE((uint)N1, output); + Pack.UInt32_To_LE((uint)N2, output[4..]); + } +#else + private void Gost28147Func(int[] workingKey, byte[] inBytes, int inOff, byte[] outBytes, int outOff) + { + int N1 = (int)Pack.LE_To_UInt32(inBytes, inOff); + int N2 = (int)Pack.LE_To_UInt32(inBytes, inOff + 4); + int tmp; //tmp -> for saving N1 + + if (this.forEncryption) + { + for(int k = 0; k < 3; k++) // 1-24 steps + { + for(int j = 0; j < 8; j++) + { + tmp = N1; + int step = Gost28147_mainStep(N1, workingKey[j]); + N1 = N2 ^ step; // CM2 + N2 = tmp; + } + } + for(int j = 7; j > 0; j--) // 25-31 steps + { + tmp = N1; + N1 = N2 ^ Gost28147_mainStep(N1, workingKey[j]); // CM2 + N2 = tmp; + } + } + else //decrypt + { + for(int j = 0; j < 8; j++) // 1-8 steps + { + tmp = N1; + N1 = N2 ^ Gost28147_mainStep(N1, workingKey[j]); // CM2 + N2 = tmp; + } + for(int k = 0; k < 3; k++) //9-31 steps + { + for(int j = 7; j >= 0; j--) + { + if ((k == 2) && (j==0)) + { + break; // break 32 step + } + tmp = N1; + N1 = N2 ^ Gost28147_mainStep(N1, workingKey[j]); // CM2 + N2 = tmp; + } + } + } + + N2 = N2 ^ Gost28147_mainStep(N1, workingKey[0]); // 32 step (N1=N1) + + Pack.UInt32_To_LE((uint)N1, outBytes, outOff); + Pack.UInt32_To_LE((uint)N2, outBytes, outOff + 4); + } +#endif + + /** + * Return the S-Box associated with SBoxName + * @param sBoxName name of the S-Box + * @return byte array representing the S-Box + */ + public static byte[] GetSBox(string sBoxName) + { + if (!m_sBoxes.TryGetValue(sBoxName, out var sBox)) + { + throw new ArgumentException("Unknown S-Box - possible types: " + + "\"Default\", \"E-Test\", \"E-A\", \"E-B\", \"E-C\", \"E-D\", \"D-Test\", \"D-A\"."); + } + + return Arrays.Clone(sBox); + } + + public static string GetSBoxName(byte[] sBox) + { + foreach (var entry in m_sBoxes) + { + if (Arrays.AreEqual(entry.Value, sBox)) + return entry.Key; + } + + throw new ArgumentException("SBOX provided did not map to a known one"); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/GOST28147Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/GOST28147Engine.cs.meta new file mode 100644 index 000000000..15380ffd4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/GOST28147Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c737f7f68f496f4a860774bee5eb7a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Grain128AEADEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Grain128AEADEngine.cs new file mode 100644 index 000000000..68078f2ca --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Grain128AEADEngine.cs @@ -0,0 +1,568 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + public sealed class Grain128AeadEngine + : IAeadCipher + { + /** + * Constants + */ + private static readonly int STATE_SIZE = 4; + + /** + * Variables to hold the state of the engine during encryption and + * decryption + */ + private byte[] workingKey; + private byte[] workingIV; + private uint[] lfsr; + private uint[] nfsr; + private uint[] authAcc; + private uint[] authSr; + + private bool initialised = false; + private bool aadFinished = false; + private MemoryStream aadData = new MemoryStream(); + + private byte[] mac; + + public string AlgorithmName => "Grain-128AEAD"; + + /** + * Initialize a Grain-128AEAD cipher. + * + * @param forEncryption Whether or not we are for encryption. + * @param param The parameters required to set up the cipher. + * @throws ArgumentException If the params argument is inappropriate. + */ + public void Init(bool forEncryption, ICipherParameters param) + { + /* + * Grain encryption and decryption is completely symmetrical, so the + * 'forEncryption' is irrelevant. + */ + if (!(param is ParametersWithIV ivParams)) + throw new ArgumentException("Grain-128AEAD Init parameters must include an IV"); + + byte[] iv = ivParams.GetIV(); + + if (iv == null || iv.Length != 12) + throw new ArgumentException("Grain-128AEAD requires exactly 12 bytes of IV"); + + if (!(ivParams.Parameters is KeyParameter key)) + throw new ArgumentException("Grain-128AEAD Init parameters must include a key"); + + byte[] keyBytes = key.GetKey(); + if (keyBytes.Length != 16) + throw new ArgumentException("Grain-128AEAD key must be 128 bits long"); + + /* + * Initialize variables. + */ + workingIV = new byte[keyBytes.Length]; + workingKey = keyBytes; + lfsr = new uint[STATE_SIZE]; + nfsr = new uint[STATE_SIZE]; + authAcc = new uint[2]; + authSr = new uint[2]; + + Array.Copy(iv, 0, workingIV, 0, iv.Length); + + Reset(); + } + + /** + * 320 clocks initialization phase. + */ + private void InitGrain() + { + for (int i = 0; i < 320; ++i) + { + uint outputZ = GetOutput(); + nfsr = Shift(nfsr, (GetOutputNFSR() ^ lfsr[0] ^ outputZ) & 1); + lfsr = Shift(lfsr, (GetOutputLFSR() ^ outputZ) & 1); + } + for (int quotient = 0; quotient < 8; ++quotient) + { + for (int remainder = 0; remainder < 8; ++remainder) + { + uint outputZ = GetOutput(); + nfsr = Shift(nfsr, (GetOutputNFSR() ^ lfsr[0] ^ outputZ ^ (uint)((workingKey[quotient]) >> remainder)) & 1); + lfsr = Shift(lfsr, (GetOutputLFSR() ^ outputZ ^ (uint)((workingKey[quotient + 8]) >> remainder)) & 1); + } + } + for (int quotient = 0; quotient < 2; ++quotient) + { + for (int remainder = 0; remainder < 32; ++remainder) + { + uint outputZ = GetOutput(); + nfsr = Shift(nfsr, (GetOutputNFSR() ^ lfsr[0]) & 1); + lfsr = Shift(lfsr, (GetOutputLFSR()) & 1); + authAcc[quotient] |= outputZ << remainder; + } + } + for (int quotient = 0; quotient < 2; ++quotient) + { + for (int remainder = 0; remainder < 32; ++remainder) + { + uint outputZ = GetOutput(); + nfsr = Shift(nfsr, (GetOutputNFSR() ^ lfsr[0]) & 1); + lfsr = Shift(lfsr, (GetOutputLFSR()) & 1); + authSr[quotient] |= outputZ << remainder; + } + } + initialised = true; + } + + /** + * Get output from non-linear function g(x). + * + * @return Output from NFSR. + */ + private uint GetOutputNFSR() + { + uint b0 = nfsr[0]; + uint b3 = nfsr[0] >> 3; + uint b11 = nfsr[0] >> 11; + uint b13 = nfsr[0] >> 13; + uint b17 = nfsr[0] >> 17; + uint b18 = nfsr[0] >> 18; + uint b22 = nfsr[0] >> 22; + uint b24 = nfsr[0] >> 24; + uint b25 = nfsr[0] >> 25; + uint b26 = nfsr[0] >> 26; + uint b27 = nfsr[0] >> 27; + uint b40 = nfsr[1] >> 8; + uint b48 = nfsr[1] >> 16; + uint b56 = nfsr[1] >> 24; + uint b59 = nfsr[1] >> 27; + uint b61 = nfsr[1] >> 29; + uint b65 = nfsr[2] >> 1; + uint b67 = nfsr[2] >> 3; + uint b68 = nfsr[2] >> 4; + uint b70 = nfsr[2] >> 6; + uint b78 = nfsr[2] >> 14; + uint b82 = nfsr[2] >> 18; + uint b84 = nfsr[2] >> 20; + uint b88 = nfsr[2] >> 24; + uint b91 = nfsr[2] >> 27; + uint b92 = nfsr[2] >> 28; + uint b93 = nfsr[2] >> 29; + uint b95 = nfsr[2] >> 31; + uint b96 = nfsr[3]; + + return (b0 ^ b26 ^ b56 ^ b91 ^ b96 ^ b3 & b67 ^ b11 & b13 ^ b17 & b18 + ^ b27 & b59 ^ b40 & b48 ^ b61 & b65 ^ b68 & b84 ^ b22 & b24 & b25 ^ b70 & b78 & b82 ^ b88 & b92 & b93 & b95) & 1; + } + + /** + * Get output from linear function f(x). + * + * @return Output from LFSR. + */ + private uint GetOutputLFSR() + { + uint s0 = lfsr[0]; + uint s7 = lfsr[0] >> 7; + uint s38 = lfsr[1] >> 6; + uint s70 = lfsr[2] >> 6; + uint s81 = lfsr[2] >> 17; + uint s96 = lfsr[3]; + + return (s0 ^ s7 ^ s38 ^ s70 ^ s81 ^ s96) & 1; + } + + /** + * Get output from output function h(x). + * + * @return y_t. + */ + private uint GetOutput() + { + uint b2 = nfsr[0] >> 2; + uint b12 = nfsr[0] >> 12; + uint b15 = nfsr[0] >> 15; + uint b36 = nfsr[1] >> 4; + uint b45 = nfsr[1] >> 13; + uint b64 = nfsr[2]; + uint b73 = nfsr[2] >> 9; + uint b89 = nfsr[2] >> 25; + uint b95 = nfsr[2] >> 31; + uint s8 = lfsr[0] >> 8; + uint s13 = lfsr[0] >> 13; + uint s20 = lfsr[0] >> 20; + uint s42 = lfsr[1] >> 10; + uint s60 = lfsr[1] >> 28; + uint s79 = lfsr[2] >> 15; + uint s93 = lfsr[2] >> 29; + uint s94 = lfsr[2] >> 30; + + return ((b12 & s8) ^ (s13 & s20) ^ (b95 & s42) ^ (s60 & s79) ^ (b12 & b95 & s94) ^ s93 + ^ b2 ^ b15 ^ b36 ^ b45 ^ b64 ^ b73 ^ b89) & 1; + } + + /** + * Shift array 1 bit and add val to index.Length - 1. + * + * @param array The array to shift. + * @param val The value to shift in. + * @return The shifted array with val added to index.Length - 1. + */ + private uint[] Shift(uint[] array, uint val) + { + array[0] = (array[0] >> 1) | (array[1] << 31); + array[1] = (array[1] >> 1) | (array[2] << 31); + array[2] = (array[2] >> 1) | (array[3] << 31); + array[3] = (array[3] >> 1) | (val << 31); + return array; + } + + /** + * Set keys, reset cipher. + * + * @param keyBytes The key. + * @param ivBytes The IV. + */ + private void SetKey(byte[] keyBytes, byte[] ivBytes) + { + ivBytes[12] = 0xFF; + ivBytes[13] = 0xFF; + ivBytes[14] = 0xFF; + ivBytes[15] = 0x7F; + workingKey = keyBytes; + workingIV = ivBytes; + + /* + * Load NFSR and LFSR + */ + Pack.LE_To_UInt32(workingKey, 0, nfsr); + Pack.LE_To_UInt32(workingIV, 0, lfsr); + } + + public int ProcessBytes(byte[] input, int inOff, int len, byte[] output, int outOff) + { + Check.DataLength(input, inOff, len, "input buffer too short"); + Check.OutputLength(output, outOff, len, "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ProcessBytes(input.AsSpan(inOff, len), output.AsSpan(outOff)); +#else + if (!initialised) + throw new ArgumentException(AlgorithmName + " not initialised"); + + if (!aadFinished) + { + DoProcessAADBytes(aadData.GetBuffer(), 0, (int)aadData.Length); + aadFinished = true; + } + + GetKeyStream(input, inOff, len, output, outOff); + return len; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessBytes(ReadOnlySpan input, Span output) + { + Check.OutputLength(output, input.Length, "output buffer too short"); + + if (!initialised) + throw new ArgumentException(AlgorithmName + " not initialised"); + + if (!aadFinished) + { + DoProcessAADBytes(aadData.GetBuffer(), 0, (int)aadData.Length); + aadFinished = true; + } + + GetKeyStream(input, output); + return input.Length; + } +#endif + + public void Reset() + { + Reset(true); + } + + private void Reset(bool clearMac) + { + if (clearMac) + { + this.mac = null; + } + this.aadData.SetLength(0); + this.aadFinished = false; + + SetKey(workingKey, workingIV); + InitGrain(); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void GetKeyStream(ReadOnlySpan input, Span output) + { + int len = input.Length; + for (int i = 0; i < len; ++i) + { + uint cc = 0, input_i = input[i]; + for (int j = 0; j < 8; ++j) + { + uint outputZ = GetOutput(); + nfsr = Shift(nfsr, (GetOutputNFSR() ^ lfsr[0]) & 1); + lfsr = Shift(lfsr, (GetOutputLFSR()) & 1); + + uint input_i_j = (input_i >> j) & 1U; + cc |= (input_i_j ^ outputZ) << j; + + //if (input_i_j != 0) + //{ + // Accumulate(); + //} + uint mask = 0U - input_i_j; + authAcc[0] ^= authSr[0] & mask; + authAcc[1] ^= authSr[1] & mask; + + AuthShift(GetOutput()); + nfsr = Shift(nfsr, (GetOutputNFSR() ^ lfsr[0]) & 1); + lfsr = Shift(lfsr, (GetOutputLFSR()) & 1); + } + output[i] = (byte)cc; + } + } +#else + private void GetKeyStream(byte[] input, int inOff, int len, byte[] ciphertext, int outOff) + { + for (int i = 0; i < len; ++i) + { + uint cc = 0, input_i = input[inOff + i]; + for (int j = 0; j < 8; ++j) + { + uint outputZ = GetOutput(); + nfsr = Shift(nfsr, (GetOutputNFSR() ^ lfsr[0]) & 1); + lfsr = Shift(lfsr, (GetOutputLFSR()) & 1); + + uint input_i_j = (input_i >> j) & 1U; + cc |= (input_i_j ^ outputZ) << j; + + //if (input_i_j != 0) + //{ + // Accumulate(); + //} + uint mask = 0U - input_i_j; + authAcc[0] ^= authSr[0] & mask; + authAcc[1] ^= authSr[1] & mask; + + AuthShift(GetOutput()); + nfsr = Shift(nfsr, (GetOutputNFSR() ^ lfsr[0]) & 1); + lfsr = Shift(lfsr, (GetOutputLFSR()) & 1); + } + ciphertext[outOff + i] = (byte)cc; + } + } +#endif + + public byte ReturnByte(byte input) + { + if (!initialised) + throw new ArgumentException(AlgorithmName + " not initialised"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span plaintext = stackalloc byte[1]{ input }; + Span ciphertext = stackalloc byte[1]; + GetKeyStream(plaintext, ciphertext); + return ciphertext[0]; +#else + byte[] plaintext = new byte[1]{ input }; + byte[] ciphertext = new byte[1]; + GetKeyStream(plaintext, 0, 1, ciphertext, 0); + return ciphertext[0]; +#endif + } + + public void ProcessAadByte(byte input) + { + if (aadFinished) + throw new ArgumentException("associated data must be added before plaintext/ciphertext"); + + aadData.WriteByte(input); + } + + public void ProcessAadBytes(byte[] input, int inOff, int len) + { + if (aadFinished) + throw new ArgumentException("associated data must be added before plaintext/ciphertext"); + + aadData.Write(input, inOff, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void ProcessAadBytes(ReadOnlySpan input) + { + if (aadFinished) + throw new ArgumentException("associated data must be added before plaintext/ciphertext"); + + aadData.Write(input); + } +#endif + + private void Accumulate() + { + authAcc[0] ^= authSr[0]; + authAcc[1] ^= authSr[1]; + } + + private void AuthShift(uint val) + { + authSr[0] = (authSr[0] >> 1) | (authSr[1] << 31); + authSr[1] = (authSr[1] >> 1) | (val << 31); + } + + public int ProcessByte(byte input, byte[] output, int outOff) + { + return ProcessBytes(new byte[]{ input }, 0, 1, output, outOff); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessByte(byte input, Span output) + { + return ProcessBytes(stackalloc byte[1]{ input }, output); + } +#endif + + private void DoProcessAADBytes(byte[] input, int inOff, int len) + { + byte[] ader; + int aderlen; + //encodeDer + if (len < 128) + { + ader = new byte[1 + len]; + ader[0] = (byte)len; + aderlen = 0; + } + else + { + // aderlen is the highest bit position divided by 8 + aderlen = LenLength(len); + ader = new byte[aderlen + 1 + len]; + ader[0] = (byte)(0x80 | (uint)aderlen); + uint tmp = (uint)len; + for (int i = 0; i < aderlen; ++i) + { + ader[1 + i] = (byte)tmp; + tmp >>= 8; + } + } + for (int i = 0; i < len; ++i) + { + ader[1 + aderlen + i] = input[inOff + i]; + } + + for (int i = 0; i < ader.Length; ++i) + { + uint ader_i = ader[i]; + for (int j = 0; j < 8; ++j) + { + nfsr = Shift(nfsr, (GetOutputNFSR() ^ lfsr[0]) & 1); + lfsr = Shift(lfsr, (GetOutputLFSR()) & 1); + + uint ader_i_j = (ader_i >> j) & 1U; + //if (ader_i_j != 0) + //{ + // Accumulate(); + //} + uint mask = 0U - ader_i_j; + authAcc[0] ^= authSr[0] & mask; + authAcc[1] ^= authSr[1] & mask; + + AuthShift(GetOutput()); + nfsr = Shift(nfsr, (GetOutputNFSR() ^ lfsr[0]) & 1); + lfsr = Shift(lfsr, (GetOutputLFSR()) & 1); + } + } + } + + public int DoFinal(byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(output.AsSpan(outOff)); +#else + if (!aadFinished) + { + DoProcessAADBytes(aadData.GetBuffer(), 0, (int)aadData.Length); + aadFinished = true; + } + + Accumulate(); + + this.mac = Pack.UInt32_To_LE(authAcc); + + Array.Copy(mac, 0, output, outOff, mac.Length); + + Reset(false); + + return mac.Length; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + if (!aadFinished) + { + DoProcessAADBytes(aadData.GetBuffer(), 0, (int)aadData.Length); + aadFinished = true; + } + + Accumulate(); + + this.mac = Pack.UInt32_To_LE(authAcc); + + mac.CopyTo(output); + + Reset(false); + + return mac.Length; + } +#endif + + public byte[] GetMac() + { + return mac; + } + + public int GetUpdateOutputSize(int len) + { + return len; + } + + public int GetOutputSize(int len) + { + return len + 8; + } + + private static int LenLength(int v) + { + if ((v & 0xff) == v) + return 1; + + if ((v & 0xffff) == v) + return 2; + + if ((v & 0xffffff) == v) + return 3; + + return 4; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Grain128AEADEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Grain128AEADEngine.cs.meta new file mode 100644 index 000000000..ca9c434ea --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Grain128AEADEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d88344f3dc885a643b132a3fae2adebb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/HC128Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/HC128Engine.cs new file mode 100644 index 000000000..b8ce44a54 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/HC128Engine.cs @@ -0,0 +1,254 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * HC-128 is a software-efficient stream cipher created by Hongjun Wu. It + * generates keystream from a 128-bit secret key and a 128-bit initialization + * vector. + *

+ * http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc128_p3.pdf + *

+ * It is a third phase candidate in the eStream contest, and is patent-free. + * No attacks are known as of today (April 2007). See + * + * http://www.ecrypt.eu.org/stream/hcp3.html + *

+ */ + public class HC128Engine + : IStreamCipher + { + private uint[] p = new uint[512]; + private uint[] q = new uint[512]; + private uint cnt = 0; + + private static uint F1(uint x) + { + return RotateRight(x, 7) ^ RotateRight(x, 18) ^ (x >> 3); + } + + private static uint F2(uint x) + { + return RotateRight(x, 17) ^ RotateRight(x, 19) ^ (x >> 10); + } + + private uint G1(uint x, uint y, uint z) + { + return (RotateRight(x, 10) ^ RotateRight(z, 23)) + RotateRight(y, 8); + } + + private uint G2(uint x, uint y, uint z) + { + return (RotateLeft(x, 10) ^ RotateLeft(z, 23)) + RotateLeft(y, 8); + } + + private static uint RotateLeft(uint x, int bits) + { + return (x << bits) | (x >> -bits); + } + + private static uint RotateRight(uint x, int bits) + { + return (x >> bits) | (x << -bits); + } + + private uint H1(uint x) + { + return q[x & 0xFF] + q[((x >> 16) & 0xFF) + 256]; + } + + private uint H2(uint x) + { + return p[x & 0xFF] + p[((x >> 16) & 0xFF) + 256]; + } + + private static uint Mod1024(uint x) + { + return x & 0x3FF; + } + + private static uint Mod512(uint x) + { + return x & 0x1FF; + } + + private static uint Dim(uint x, uint y) + { + return Mod512(x - y); + } + + private uint Step() + { + uint j = Mod512(cnt); + uint ret; + if (cnt < 512) + { + p[j] += G1(p[Dim(j, 3)], p[Dim(j, 10)], p[Dim(j, 511)]); + ret = H1(p[Dim(j, 12)]) ^ p[j]; + } + else + { + q[j] += G2(q[Dim(j, 3)], q[Dim(j, 10)], q[Dim(j, 511)]); + ret = H2(q[Dim(j, 12)]) ^ q[j]; + } + cnt = Mod1024(cnt + 1); + return ret; + } + + private byte[] key, iv; + private bool initialised; + + private void Init() + { + if (key.Length != 16) + throw new ArgumentException("The key must be 128 bits long"); + + idx = 0; + cnt = 0; + + uint[] w = new uint[1280]; + + for (int i = 0; i < 16; i++) + { + w[i >> 2] |= ((uint)key[i] << (8 * (i & 0x3))); + } + Array.Copy(w, 0, w, 4, 4); + + for (int i = 0; i < iv.Length && i < 16; i++) + { + w[(i >> 2) + 8] |= ((uint)iv[i] << (8 * (i & 0x3))); + } + Array.Copy(w, 8, w, 12, 4); + + for (uint i = 16; i < 1280; i++) + { + w[i] = F2(w[i - 2]) + w[i - 7] + F1(w[i - 15]) + w[i - 16] + i; + } + + Array.Copy(w, 256, p, 0, 512); + Array.Copy(w, 768, q, 0, 512); + + for (int i = 0; i < 512; i++) + { + p[i] = Step(); + } + for (int i = 0; i < 512; i++) + { + q[i] = Step(); + } + + cnt = 0; + } + + public virtual string AlgorithmName + { + get { return "HC-128"; } + } + + /** + * Initialise a HC-128 cipher. + * + * @param forEncryption whether or not we are for encryption. Irrelevant, as + * encryption and decryption are the same. + * @param params the parameters required to set up the cipher. + * @throws ArgumentException if the params argument is + * inappropriate (ie. the key is not 128 bit long). + */ + public virtual void Init( + bool forEncryption, + ICipherParameters parameters) + { + ICipherParameters keyParam = parameters; + + if (parameters is ParametersWithIV) + { + iv = ((ParametersWithIV)parameters).GetIV(); + keyParam = ((ParametersWithIV)parameters).Parameters; + } + else + { + iv = new byte[0]; + } + + if (keyParam is KeyParameter) + { + key = ((KeyParameter)keyParam).GetKey(); + Init(); + } + else + { + throw new ArgumentException( + "Invalid parameter passed to HC128 init - " + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters), + "parameters"); + } + + initialised = true; + } + + private byte[] buf = new byte[4]; + private int idx = 0; + + private byte GetByte() + { + if (idx == 0) + { + Pack.UInt32_To_LE(Step(), buf); + } + byte ret = buf[idx]; + idx = idx + 1 & 0x3; + return ret; + } + + public virtual void ProcessBytes( + byte[] input, + int inOff, + int len, + byte[] output, + int outOff) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.DataLength(input, inOff, len, "input buffer too short"); + Check.OutputLength(output, outOff, len, "output buffer too short"); + + for (int i = 0; i < len; i++) + { + output[outOff + i] = (byte)(input[inOff + i] ^ GetByte()); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void ProcessBytes(ReadOnlySpan input, Span output) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.OutputLength(output, input.Length, "output buffer too short"); + + for (int i = 0; i < input.Length; i++) + { + output[i] = (byte)(input[i] ^ GetByte()); + } + } +#endif + + public virtual void Reset() + { + Init(); + } + + public virtual byte ReturnByte(byte input) + { + return (byte)(input ^ GetByte()); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/HC128Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/HC128Engine.cs.meta new file mode 100644 index 000000000..0bdf95a6c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/HC128Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 181b21bf264bc414aa9f03db25c3431d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/HC256Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/HC256Engine.cs new file mode 100644 index 000000000..65f33afc9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/HC256Engine.cs @@ -0,0 +1,243 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * HC-256 is a software-efficient stream cipher created by Hongjun Wu. It + * generates keystream from a 256-bit secret key and a 256-bit initialization + * vector. + *

+ * http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc256_p3.pdf + *

+ * Its brother, HC-128, is a third phase candidate in the eStream contest. + * The algorithm is patent-free. No attacks are known as of today (April 2007). + * See + * + * http://www.ecrypt.eu.org/stream/hcp3.html + *

+ */ + public class HC256Engine + : IStreamCipher + { + private uint[] p = new uint[1024]; + private uint[] q = new uint[1024]; + private uint cnt = 0; + + private uint Step() + { + uint j = cnt & 0x3FF; + uint ret; + if (cnt < 1024) + { + uint x = p[(j - 3 & 0x3FF)]; + uint y = p[(j - 1023 & 0x3FF)]; + p[j] += p[(j - 10 & 0x3FF)] + + (RotateRight(x, 10) ^ RotateRight(y, 23)) + + q[((x ^ y) & 0x3FF)]; + + x = p[(j - 12 & 0x3FF)]; + ret = (q[x & 0xFF] + q[((x >> 8) & 0xFF) + 256] + + q[((x >> 16) & 0xFF) + 512] + q[((x >> 24) & 0xFF) + 768]) + ^ p[j]; + } + else + { + uint x = q[(j - 3 & 0x3FF)]; + uint y = q[(j - 1023 & 0x3FF)]; + q[j] += q[(j - 10 & 0x3FF)] + + (RotateRight(x, 10) ^ RotateRight(y, 23)) + + p[((x ^ y) & 0x3FF)]; + + x = q[(j - 12 & 0x3FF)]; + ret = (p[x & 0xFF] + p[((x >> 8) & 0xFF) + 256] + + p[((x >> 16) & 0xFF) + 512] + p[((x >> 24) & 0xFF) + 768]) + ^ q[j]; + } + cnt = cnt + 1 & 0x7FF; + return ret; + } + + private byte[] key, iv; + private bool initialised; + + private void Init() + { + if (key.Length != 32 && key.Length != 16) + throw new ArgumentException("The key must be 128/256 bits long"); + + if (iv.Length < 16) + throw new ArgumentException("The IV must be at least 128 bits long"); + + if (key.Length != 32) + { + byte[] k = new byte[32]; + + Array.Copy(key, 0, k, 0, key.Length); + Array.Copy(key, 0, k, 16, key.Length); + + key = k; + } + + if (iv.Length < 32) + { + byte[] newIV = new byte[32]; + + Array.Copy(iv, 0, newIV, 0, iv.Length); + Array.Copy(iv, 0, newIV, iv.Length, newIV.Length - iv.Length); + + iv = newIV; + } + + idx = 0; + cnt = 0; + + uint[] w = new uint[2560]; + + for (int i = 0; i < 32; i++) + { + w[i >> 2] |= ((uint)key[i] << (8 * (i & 0x3))); + } + + for (int i = 0; i < 32; i++) + { + w[(i >> 2) + 8] |= ((uint)iv[i] << (8 * (i & 0x3))); + } + + for (uint i = 16; i < 2560; i++) + { + uint x = w[i - 2]; + uint y = w[i - 15]; + w[i] = (RotateRight(x, 17) ^ RotateRight(x, 19) ^ (x >> 10)) + + w[i - 7] + + (RotateRight(y, 7) ^ RotateRight(y, 18) ^ (y >> 3)) + + w[i - 16] + i; + } + + Array.Copy(w, 512, p, 0, 1024); + Array.Copy(w, 1536, q, 0, 1024); + + for (int i = 0; i < 4096; i++) + { + Step(); + } + + cnt = 0; + } + + public virtual string AlgorithmName + { + get { return "HC-256"; } + } + + /** + * Initialise a HC-256 cipher. + * + * @param forEncryption whether or not we are for encryption. Irrelevant, as + * encryption and decryption are the same. + * @param params the parameters required to set up the cipher. + * @throws ArgumentException if the params argument is + * inappropriate (ie. the key is not 256 bit long). + */ + public virtual void Init( + bool forEncryption, + ICipherParameters parameters) + { + ICipherParameters keyParam = parameters; + + if (parameters is ParametersWithIV) + { + iv = ((ParametersWithIV)parameters).GetIV(); + keyParam = ((ParametersWithIV)parameters).Parameters; + } + else + { + iv = new byte[0]; + } + + if (keyParam is KeyParameter) + { + key = ((KeyParameter)keyParam).GetKey(); + Init(); + } + else + { + throw new ArgumentException( + "Invalid parameter passed to HC256 init - " + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters), + "parameters"); + } + + initialised = true; + } + + private byte[] buf = new byte[4]; + private int idx = 0; + + private byte GetByte() + { + if (idx == 0) + { + Pack.UInt32_To_LE(Step(), buf); + } + byte ret = buf[idx]; + idx = idx + 1 & 0x3; + return ret; + } + + public virtual void ProcessBytes( + byte[] input, + int inOff, + int len, + byte[] output, + int outOff) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.DataLength(input, inOff, len, "input buffer too short"); + Check.OutputLength(output, outOff, len, "output buffer too short"); + + for (int i = 0; i < len; i++) + { + output[outOff + i] = (byte)(input[inOff + i] ^ GetByte()); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void ProcessBytes(ReadOnlySpan input, Span output) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.OutputLength(output, input.Length, "output buffer too short"); + + for (int i = 0; i < input.Length; i++) + { + output[i] = (byte)(input[i] ^ GetByte()); + } + } +#endif + + public virtual void Reset() + { + Init(); + } + + public virtual byte ReturnByte(byte input) + { + return (byte)(input ^ GetByte()); + } + + private static uint RotateRight(uint x, int bits) + { + return (x >> bits) | (x << -bits); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/HC256Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/HC256Engine.cs.meta new file mode 100644 index 000000000..68bee56a7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/HC256Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a97c4e05480602c42b965ee80fd861b8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ISAACEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ISAACEngine.cs new file mode 100644 index 000000000..ff6c56be6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ISAACEngine.cs @@ -0,0 +1,237 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * Implementation of Bob Jenkin's ISAAC (Indirection Shift Accumulate Add and Count). + * see: http://www.burtleburtle.net/bob/rand/isaacafa.html + */ + public class IsaacEngine + : IStreamCipher + { + // Constants + private static readonly int sizeL = 8, + stateArraySize = sizeL<<5; // 256 + + // Cipher's internal state + private uint[] engineState = null, // mm + results = null; // randrsl + private uint a = 0, b = 0, c = 0; + + // Engine state + private int index = 0; + private byte[] keyStream = new byte[stateArraySize<<2], // results expanded into bytes + workingKey = null; + private bool initialised = false; + + /** + * initialise an ISAAC cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param params the parameters required to set up the cipher. + * @exception ArgumentException if the params argument is + * inappropriate. + */ + public virtual void Init( + bool forEncryption, + ICipherParameters parameters) + { + if (!(parameters is KeyParameter)) + throw new ArgumentException( + "invalid parameter passed to ISAAC Init - " + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters), + "parameters"); + + /* + * ISAAC encryption and decryption is completely + * symmetrical, so the 'forEncryption' is + * irrelevant. + */ + KeyParameter p = (KeyParameter) parameters; + setKey(p.GetKey()); + } + + public virtual byte ReturnByte( + byte input) + { + if (index == 0) + { + isaac(); + keyStream = Pack.UInt32_To_BE(results); + } + + byte output = (byte)(keyStream[index]^input); + index = (index + 1) & 1023; + + return output; + } + + public virtual void ProcessBytes( + byte[] input, + int inOff, + int len, + byte[] output, + int outOff) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.DataLength(input, inOff, len, "input buffer too short"); + Check.OutputLength(output, outOff, len, "output buffer too short"); + + for (int i = 0; i < len; i++) + { + if (index == 0) + { + isaac(); + keyStream = Pack.UInt32_To_BE(results); + } + output[i+outOff] = (byte)(keyStream[index]^input[i+inOff]); + index = (index + 1) & 1023; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void ProcessBytes(ReadOnlySpan input, Span output) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.OutputLength(output, input.Length, "output buffer too short"); + + for (int i = 0; i < input.Length; i++) + { + if (index == 0) + { + isaac(); + keyStream = Pack.UInt32_To_BE(results); + } + output[i] = (byte)(keyStream[index++] ^ input[i]); + index &= 1023; + } + } +#endif + + public virtual string AlgorithmName + { + get { return "ISAAC"; } + } + + public virtual void Reset() + { + setKey(workingKey); + } + + // Private implementation + private void setKey( + byte[] keyBytes) + { + workingKey = keyBytes; + + if (engineState == null) + { + engineState = new uint[stateArraySize]; + } + + if (results == null) + { + results = new uint[stateArraySize]; + } + + int i, j, k; + + // Reset state + for (i = 0; i < stateArraySize; i++) + { + engineState[i] = results[i] = 0; + } + a = b = c = 0; + + // Reset index counter for output + index = 0; + + // Convert the key bytes to ints and put them into results[] for initialization + byte[] t = new byte[keyBytes.Length + (keyBytes.Length & 3)]; + Array.Copy(keyBytes, 0, t, 0, keyBytes.Length); + for (i = 0; i < t.Length; i+=4) + { + results[i >> 2] = Pack.LE_To_UInt32(t, i); + } + + // It has begun? + uint[] abcdefgh = new uint[sizeL]; + + for (i = 0; i < sizeL; i++) + { + abcdefgh[i] = 0x9e3779b9; // Phi (golden ratio) + } + + for (i = 0; i < 4; i++) + { + mix(abcdefgh); + } + + for (i = 0; i < 2; i++) + { + for (j = 0; j < stateArraySize; j+=sizeL) + { + for (k = 0; k < sizeL; k++) + { + abcdefgh[k] += (i<1) ? results[j+k] : engineState[j+k]; + } + + mix(abcdefgh); + + for (k = 0; k < sizeL; k++) + { + engineState[j+k] = abcdefgh[k]; + } + } + } + + isaac(); + + initialised = true; + } + + private void isaac() + { + uint x, y; + + b += ++c; + for (int i = 0; i < stateArraySize; i++) + { + x = engineState[i]; + switch (i & 3) + { + case 0: a ^= (a << 13); break; + case 1: a ^= (a >> 6); break; + case 2: a ^= (a << 2); break; + case 3: a ^= (a >> 16); break; + } + a += engineState[(i+128) & 0xFF]; + engineState[i] = y = engineState[(int)((uint)x >> 2) & 0xFF] + a + b; + results[i] = b = engineState[(int)((uint)y >> 10) & 0xFF] + x; + } + } + + private void mix(uint[] x) + { + x[0]^=x[1]<< 11; x[3]+=x[0]; x[1]+=x[2]; + x[1]^=x[2]>> 2; x[4]+=x[1]; x[2]+=x[3]; + x[2]^=x[3]<< 8; x[5]+=x[2]; x[3]+=x[4]; + x[3]^=x[4]>> 16; x[6]+=x[3]; x[4]+=x[5]; + x[4]^=x[5]<< 10; x[7]+=x[4]; x[5]+=x[6]; + x[5]^=x[6]>> 4; x[0]+=x[5]; x[6]+=x[7]; + x[6]^=x[7]<< 8; x[1]+=x[6]; x[7]+=x[0]; + x[7]^=x[0]>> 9; x[2]+=x[7]; x[0]+=x[1]; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ISAACEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ISAACEngine.cs.meta new file mode 100644 index 000000000..4190ef6ba --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ISAACEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7564107a47479e74b800f239f1636fad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/IdeaEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/IdeaEngine.cs new file mode 100644 index 000000000..4ee79077f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/IdeaEngine.cs @@ -0,0 +1,381 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * A class that provides a basic International Data Encryption Algorithm (IDEA) engine. + *

+ * This implementation is based on the "HOWTO: INTERNATIONAL DATA ENCRYPTION ALGORITHM" + * implementation summary by Fauzan Mirza (F.U.Mirza@sheffield.ac.uk). (barring 1 typo at the + * end of the MulInv function!). + *

+ *

+ * It can be found at ftp://ftp.funet.fi/pub/crypt/cryptography/symmetric/idea/ + *

+ *

+ * Note: This algorithm was patented in the USA, Japan and Europe. These patents expired in 2011/2012. + *

+ */ + public class IdeaEngine + : IBlockCipher + { + private const int BLOCK_SIZE = 8; + private int[] workingKey; + /** + * standard constructor. + */ + public IdeaEngine() + { + } + /** + * initialise an IDEA cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param parameters the parameters required to set up the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public virtual void Init( + bool forEncryption, + ICipherParameters parameters) + { + if (!(parameters is KeyParameter)) + throw new ArgumentException("invalid parameter passed to IDEA init - " + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + + workingKey = GenerateWorkingKey(forEncryption, + ((KeyParameter)parameters).GetKey()); + } + + public virtual string AlgorithmName + { + get { return "IDEA"; } + } + + public virtual int GetBlockSize() + { + return BLOCK_SIZE; + } + + public virtual int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (workingKey == null) + throw new InvalidOperationException("IDEA engine not initialised"); + + Check.DataLength(input, inOff, BLOCK_SIZE, "input buffer too short"); + Check.OutputLength(output, outOff, BLOCK_SIZE, "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + IdeaFunc(workingKey, input.AsSpan(inOff), output.AsSpan(outOff)); +#else + IdeaFunc(workingKey, input, inOff, output, outOff); +#endif + return BLOCK_SIZE; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + if (workingKey == null) + throw new InvalidOperationException("IDEA engine not initialised"); + + Check.DataLength(input, BLOCK_SIZE, "input buffer too short"); + Check.OutputLength(output, BLOCK_SIZE, "output buffer too short"); + + IdeaFunc(workingKey, input, output); + return BLOCK_SIZE; + } +#endif + + private static readonly int MASK = 0xffff; + private static readonly int BASE = 0x10001; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int BytesToWord(ReadOnlySpan input) + { + return ((input[0] << 8) & 0xff00) + (input[1] & 0xff); + } + + private void WordToBytes(int word, Span output) + { + output[0] = (byte)((uint)word >> 8); + output[1] = (byte)word; + } +#else + private int BytesToWord(byte[] input, int inOff) + { + return ((input[inOff] << 8) & 0xff00) + (input[inOff + 1] & 0xff); + } + + private void WordToBytes(int word, byte[] outBytes, int outOff) + { + outBytes[outOff] = (byte)((uint) word >> 8); + outBytes[outOff + 1] = (byte)word; + } +#endif + + /** + * return x = x * y where the multiplication is done modulo + * 65537 (0x10001) (as defined in the IDEA specification) and + * a zero input is taken to be 65536 (0x10000). + * + * @param x the x value + * @param y the y value + * @return x = x * y + */ + private int Mul( + int x, + int y) + { + if (x == 0) + { + x = (BASE - y); + } + else if (y == 0) + { + x = (BASE - x); + } + else + { + int p = x * y; + y = p & MASK; + x = (int) ((uint) p >> 16); + x = y - x + ((y < x) ? 1 : 0); + } + return x & MASK; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void IdeaFunc(int[] workingKey, ReadOnlySpan input, Span output) + { + int x0 = BytesToWord(input); + int x1 = BytesToWord(input[2..]); + int x2 = BytesToWord(input[4..]); + int x3 = BytesToWord(input[6..]); + int keyOff = 0, t0, t1; + for (int round = 0; round < 8; round++) + { + x0 = Mul(x0, workingKey[keyOff++]); + x1 += workingKey[keyOff++]; + x1 &= MASK; + x2 += workingKey[keyOff++]; + x2 &= MASK; + x3 = Mul(x3, workingKey[keyOff++]); + t0 = x1; + t1 = x2; + x2 ^= x0; + x1 ^= x3; + x2 = Mul(x2, workingKey[keyOff++]); + x1 += x2; + x1 &= MASK; + x1 = Mul(x1, workingKey[keyOff++]); + x2 += x1; + x2 &= MASK; + x0 ^= x1; + x3 ^= x2; + x1 ^= t1; + x2 ^= t0; + } + WordToBytes(Mul(x0, workingKey[keyOff++]), output); + WordToBytes(x2 + workingKey[keyOff++], output[2..]); /* NB: Order */ + WordToBytes(x1 + workingKey[keyOff++], output[4..]); + WordToBytes(Mul(x3, workingKey[keyOff]), output[6..]); + } +#else + private void IdeaFunc(int[] workingKey, byte[] input, int inOff, byte[] outBytes, int outOff) + { + int x0 = BytesToWord(input, inOff); + int x1 = BytesToWord(input, inOff + 2); + int x2 = BytesToWord(input, inOff + 4); + int x3 = BytesToWord(input, inOff + 6); + int keyOff = 0, t0, t1; + for (int round = 0; round < 8; round++) + { + x0 = Mul(x0, workingKey[keyOff++]); + x1 += workingKey[keyOff++]; + x1 &= MASK; + x2 += workingKey[keyOff++]; + x2 &= MASK; + x3 = Mul(x3, workingKey[keyOff++]); + t0 = x1; + t1 = x2; + x2 ^= x0; + x1 ^= x3; + x2 = Mul(x2, workingKey[keyOff++]); + x1 += x2; + x1 &= MASK; + x1 = Mul(x1, workingKey[keyOff++]); + x2 += x1; + x2 &= MASK; + x0 ^= x1; + x3 ^= x2; + x1 ^= t1; + x2 ^= t0; + } + WordToBytes(Mul(x0, workingKey[keyOff++]), outBytes, outOff); + WordToBytes(x2 + workingKey[keyOff++], outBytes, outOff + 2); /* NB: Order */ + WordToBytes(x1 + workingKey[keyOff++], outBytes, outOff + 4); + WordToBytes(Mul(x3, workingKey[keyOff]), outBytes, outOff + 6); + } +#endif + + /** + * The following function is used to expand the user key to the encryption + * subkey. The first 16 bytes are the user key, and the rest of the subkey + * is calculated by rotating the previous 16 bytes by 25 bits to the left, + * and so on until the subkey is completed. + */ + private int[] ExpandKey(byte[] uKey) + { + int[] key = new int[52]; + if (uKey.Length < 16) + { + byte[] tmp = new byte[16]; + Array.Copy(uKey, 0, tmp, tmp.Length - uKey.Length, uKey.Length); + uKey = tmp; + } + for (int i = 0; i < 8; i++) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + key[i] = BytesToWord(uKey[(i * 2)..]); +#else + key[i] = BytesToWord(uKey, i * 2); +#endif + } + for (int i = 8; i < 52; i++) + { + if ((i & 7) < 6) + { + key[i] = ((key[i - 7] & 127) << 9 | key[i - 6] >> 7) & MASK; + } + else if ((i & 7) == 6) + { + key[i] = ((key[i - 7] & 127) << 9 | key[i - 14] >> 7) & MASK; + } + else + { + key[i] = ((key[i - 15] & 127) << 9 | key[i - 14] >> 7) & MASK; + } + } + return key; + } + /** + * This function computes multiplicative inverse using Euclid's Greatest + * Common Divisor algorithm. Zero and one are self inverse. + *

+ * i.e. x * MulInv(x) == 1 (modulo BASE) + *

+ */ + private int MulInv( + int x) + { + int t0, t1, q, y; + + if (x < 2) + { + return x; + } + t0 = 1; + t1 = BASE / x; + y = BASE % x; + while (y != 1) + { + q = x / y; + x = x % y; + t0 = (t0 + (t1 * q)) & MASK; + if (x == 1) + { + return t0; + } + q = y / x; + y = y % x; + t1 = (t1 + (t0 * q)) & MASK; + } + return (1 - t1) & MASK; + } + /** + * Return the additive inverse of x. + *

+ * i.e. x + AddInv(x) == 0 + *

+ */ + int AddInv( + int x) + { + return (0 - x) & MASK; + } + + /** + * The function to invert the encryption subkey to the decryption subkey. + * It also involves the multiplicative inverse and the additive inverse functions. + */ + private int[] InvertKey( + int[] inKey) + { + int t1, t2, t3, t4; + int p = 52; /* We work backwards */ + int[] key = new int[52]; + int inOff = 0; + + t1 = MulInv(inKey[inOff++]); + t2 = AddInv(inKey[inOff++]); + t3 = AddInv(inKey[inOff++]); + t4 = MulInv(inKey[inOff++]); + key[--p] = t4; + key[--p] = t3; + key[--p] = t2; + key[--p] = t1; + + for (int round = 1; round < 8; round++) + { + t1 = inKey[inOff++]; + t2 = inKey[inOff++]; + key[--p] = t2; + key[--p] = t1; + + t1 = MulInv(inKey[inOff++]); + t2 = AddInv(inKey[inOff++]); + t3 = AddInv(inKey[inOff++]); + t4 = MulInv(inKey[inOff++]); + key[--p] = t4; + key[--p] = t2; /* NB: Order */ + key[--p] = t3; + key[--p] = t1; + } + t1 = inKey[inOff++]; + t2 = inKey[inOff++]; + key[--p] = t2; + key[--p] = t1; + + t1 = MulInv(inKey[inOff++]); + t2 = AddInv(inKey[inOff++]); + t3 = AddInv(inKey[inOff++]); + t4 = MulInv(inKey[inOff]); + key[--p] = t4; + key[--p] = t3; + key[--p] = t2; + key[--p] = t1; + return key; + } + + private int[] GenerateWorkingKey( + bool forEncryption, + byte[] userKey) + { + if (forEncryption) + { + return ExpandKey(userKey); + } + else + { + return InvertKey(ExpandKey(userKey)); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/IdeaEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/IdeaEngine.cs.meta new file mode 100644 index 000000000..0b1f20b86 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/IdeaEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4803aa4dab7fb004db3a42672bcbb85a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/IesEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/IesEngine.cs new file mode 100644 index 000000000..2b4c9045e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/IesEngine.cs @@ -0,0 +1,247 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * support class for constructing intergrated encryption ciphers + * for doing basic message exchanges on top of key agreement ciphers + */ + public class IesEngine + { + private readonly IBasicAgreement agree; + private readonly IDerivationFunction kdf; + private readonly IMac mac; + private readonly BufferedBlockCipher cipher; + private readonly byte[] macBuf; + + private bool forEncryption; + private ICipherParameters privParam, pubParam; + private IesParameters param; + + /** + * set up for use with stream mode, where the key derivation function + * is used to provide a stream of bytes to xor with the message. + * + * @param agree the key agreement used as the basis for the encryption + * @param kdf the key derivation function used for byte generation + * @param mac the message authentication code generator for the message + */ + public IesEngine( + IBasicAgreement agree, + IDerivationFunction kdf, + IMac mac) + { + this.agree = agree; + this.kdf = kdf; + this.mac = mac; + this.macBuf = new byte[mac.GetMacSize()]; +// this.cipher = null; + } + + /** + * set up for use in conjunction with a block cipher to handle the + * message. + * + * @param agree the key agreement used as the basis for the encryption + * @param kdf the key derivation function used for byte generation + * @param mac the message authentication code generator for the message + * @param cipher the cipher to used for encrypting the message + */ + public IesEngine( + IBasicAgreement agree, + IDerivationFunction kdf, + IMac mac, + BufferedBlockCipher cipher) + { + this.agree = agree; + this.kdf = kdf; + this.mac = mac; + this.macBuf = new byte[mac.GetMacSize()]; + this.cipher = cipher; + } + + /** + * Initialise the encryptor. + * + * @param forEncryption whether or not this is encryption/decryption. + * @param privParam our private key parameters + * @param pubParam the recipient's/sender's public key parameters + * @param param encoding and derivation parameters. + */ + public virtual void Init( + bool forEncryption, + ICipherParameters privParameters, + ICipherParameters pubParameters, + ICipherParameters iesParameters) + { + this.forEncryption = forEncryption; + this.privParam = privParameters; + this.pubParam = pubParameters; + this.param = (IesParameters)iesParameters; + } + + private byte[] DecryptBlock( + byte[] in_enc, + int inOff, + int inLen, + byte[] z) + { + byte[] M = null; + KeyParameter macKey = null; + KdfParameters kParam = new KdfParameters(z, param.GetDerivationV()); + int macKeySize = param.MacKeySize; + + kdf.Init(kParam); + + // Ensure that the length of the input is greater than the MAC in bytes + if (inLen < mac.GetMacSize()) + throw new InvalidCipherTextException("Length of input must be greater than the MAC"); + + inLen -= mac.GetMacSize(); + + if (cipher == null) // stream mode + { + byte[] Buffer = GenerateKdfBytes(kParam, inLen + (macKeySize / 8)); + + M = new byte[inLen]; + + for (int i = 0; i != inLen; i++) + { + M[i] = (byte)(in_enc[inOff + i] ^ Buffer[i]); + } + + macKey = new KeyParameter(Buffer, inLen, (macKeySize / 8)); + } + else + { + int cipherKeySize = ((IesWithCipherParameters)param).CipherKeySize; + byte[] Buffer = GenerateKdfBytes(kParam, (cipherKeySize / 8) + (macKeySize / 8)); + + cipher.Init(false, new KeyParameter(Buffer, 0, (cipherKeySize / 8))); + + M = cipher.DoFinal(in_enc, inOff, inLen); + + macKey = new KeyParameter(Buffer, (cipherKeySize / 8), (macKeySize / 8)); + } + + byte[] macIV = param.GetEncodingV(); + + mac.Init(macKey); + mac.BlockUpdate(in_enc, inOff, inLen); + mac.BlockUpdate(macIV, 0, macIV.Length); + mac.DoFinal(macBuf, 0); + + inOff += inLen; + + byte[] T1 = Arrays.CopyOfRange(in_enc, inOff, inOff + macBuf.Length); + + if (!Arrays.ConstantTimeAreEqual(T1, macBuf)) + throw (new InvalidCipherTextException("Invalid MAC.")); + + return M; + } + + private byte[] EncryptBlock( + byte[] input, + int inOff, + int inLen, + byte[] z) + { + byte[] C = null; + KeyParameter macKey = null; + KdfParameters kParam = new KdfParameters(z, param.GetDerivationV()); + int c_text_length = 0; + int macKeySize = param.MacKeySize; + + if (cipher == null) // stream mode + { + byte[] Buffer = GenerateKdfBytes(kParam, inLen + (macKeySize / 8)); + + C = new byte[inLen + mac.GetMacSize()]; + c_text_length = inLen; + + for (int i = 0; i != inLen; i++) + { + C[i] = (byte)(input[inOff + i] ^ Buffer[i]); + } + + macKey = new KeyParameter(Buffer, inLen, (macKeySize / 8)); + } + else + { + int cipherKeySize = ((IesWithCipherParameters)param).CipherKeySize; + byte[] Buffer = GenerateKdfBytes(kParam, (cipherKeySize / 8) + (macKeySize / 8)); + + cipher.Init(true, new KeyParameter(Buffer, 0, (cipherKeySize / 8))); + + c_text_length = cipher.GetOutputSize(inLen); + byte[] tmp = new byte[c_text_length]; + + int len = cipher.ProcessBytes(input, inOff, inLen, tmp, 0); + len += cipher.DoFinal(tmp, len); + + C = new byte[len + mac.GetMacSize()]; + c_text_length = len; + + Array.Copy(tmp, 0, C, 0, len); + + macKey = new KeyParameter(Buffer, (cipherKeySize / 8), (macKeySize / 8)); + } + + byte[] macIV = param.GetEncodingV(); + + mac.Init(macKey); + mac.BlockUpdate(C, 0, c_text_length); + mac.BlockUpdate(macIV, 0, macIV.Length); + // + // return the message and it's MAC + // + mac.DoFinal(C, c_text_length); + return C; + } + + private byte[] GenerateKdfBytes( + KdfParameters kParam, + int length) + { + byte[] buf = new byte[length]; + + kdf.Init(kParam); + + kdf.GenerateBytes(buf, 0, buf.Length); + + return buf; + } + + public virtual byte[] ProcessBlock( + byte[] input, + int inOff, + int inLen) + { + agree.Init(privParam); + + BigInteger z = agree.CalculateAgreement(pubParam); + + byte[] zBytes = BigIntegers.AsUnsignedByteArray(agree.GetFieldSize(), z); + + try + { + return forEncryption + ? EncryptBlock(input, inOff, inLen, zBytes) + : DecryptBlock(input, inOff, inLen, zBytes); + } + finally + { + Array.Clear(zBytes, 0, zBytes.Length); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/IesEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/IesEngine.cs.meta new file mode 100644 index 000000000..5af747d03 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/IesEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7cea1426e4f8131488b05c998910d4ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/NaccacheSternEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/NaccacheSternEngine.cs new file mode 100644 index 000000000..c8d1b5672 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/NaccacheSternEngine.cs @@ -0,0 +1,352 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * NaccacheStern Engine. For details on this cipher, please see + * http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + */ + public class NaccacheSternEngine + : IAsymmetricBlockCipher + { + private bool forEncryption; + + private NaccacheSternKeyParameters key; + + private IList[] lookup = null; + + public string AlgorithmName + { + get { return "NaccacheStern"; } + } + + /** + * Initializes this algorithm. Must be called before all other Functions. + * + * @see org.bouncycastle.crypto.AsymmetricBlockCipher#init(bool, + * org.bouncycastle.crypto.CipherParameters) + */ + public virtual void Init( + bool forEncryption, + ICipherParameters parameters) + { + this.forEncryption = forEncryption; + + if (parameters is ParametersWithRandom) + { + parameters = ((ParametersWithRandom) parameters).Parameters; + } + + key = (NaccacheSternKeyParameters)parameters; + + // construct lookup table for faster decryption if necessary + if (!this.forEncryption) + { + NaccacheSternPrivateKeyParameters priv = (NaccacheSternPrivateKeyParameters)key; + var primes = priv.SmallPrimesList; + lookup = new IList[primes.Count]; + for (int i = 0; i < primes.Count; i++) + { + BigInteger actualPrime = primes[i]; + int actualPrimeValue = actualPrime.IntValue; + + lookup[i] = new List(actualPrimeValue); + lookup[i].Add(BigInteger.One); + + BigInteger accJ = BigInteger.Zero; + for (int j = 1; j < actualPrimeValue; j++) + { + accJ = accJ.Add(priv.PhiN); + BigInteger comp = accJ.Divide(actualPrime); + lookup[i].Add(priv.G.ModPow(comp, priv.Modulus)); + } + } + } + } + + /** + * Returns the input block size of this algorithm. + * + * @see org.bouncycastle.crypto.AsymmetricBlockCipher#GetInputBlockSize() + */ + public virtual int GetInputBlockSize() + { + if (forEncryption) + { + // We can only encrypt values up to lowerSigmaBound + return (key.LowerSigmaBound + 7) / 8 - 1; + } + else + { + // We pad to modulus-size bytes for easier decryption. +// return key.Modulus.ToByteArray().Length; + return key.Modulus.BitLength / 8 + 1; + } + } + + /** + * Returns the output block size of this algorithm. + * + * @see org.bouncycastle.crypto.AsymmetricBlockCipher#GetOutputBlockSize() + */ + public virtual int GetOutputBlockSize() + { + if (forEncryption) + { + // encrypted Data is always padded up to modulus size +// return key.Modulus.ToByteArray().Length; + return key.Modulus.BitLength / 8 + 1; + } + else + { + // decrypted Data has upper limit lowerSigmaBound + return (key.LowerSigmaBound + 7) / 8 - 1; + } + } + + /** + * Process a single Block using the Naccache-Stern algorithm. + * + * @see org.bouncycastle.crypto.AsymmetricBlockCipher#ProcessBlock(byte[], + * int, int) + */ + public virtual byte[] ProcessBlock( + byte[] inBytes, + int inOff, + int length) + { + if (key == null) + throw new InvalidOperationException("NaccacheStern engine not initialised"); + if (length > (GetInputBlockSize() + 1)) + throw new DataLengthException("input too large for Naccache-Stern cipher.\n"); + + if (!forEncryption) + { + // At decryption make sure that we receive padded data blocks + if (length < GetInputBlockSize()) + { + throw new InvalidCipherTextException("BlockLength does not match modulus for Naccache-Stern cipher.\n"); + } + } + + // transform input into BigInteger + BigInteger input = new BigInteger(1, inBytes, inOff, length); + + byte[] output; + if (forEncryption) + { + output = Encrypt(input); + } + else + { + var plain = new List(); + NaccacheSternPrivateKeyParameters priv = (NaccacheSternPrivateKeyParameters)key; + var primes = priv.SmallPrimesList; + // Get Chinese Remainders of CipherText + for (int i = 0; i < primes.Count; i++) + { + BigInteger exp = input.ModPow(priv.PhiN.Divide((BigInteger)primes[i]), priv.Modulus); + var al = lookup[i]; + if (lookup[i].Count != primes[i].IntValue) + { + throw new InvalidCipherTextException("Error in lookup Array for " + + primes[i].IntValue + + ": Size mismatch. Expected ArrayList with length " + + primes[i].IntValue + " but found ArrayList of length " + + lookup[i].Count); + } + int lookedup = al.IndexOf(exp); + + if (lookedup == -1) + throw new InvalidCipherTextException("Lookup failed"); + + plain.Add(BigInteger.ValueOf(lookedup)); + } + BigInteger test = ChineseRemainder(plain, primes); + + // Should not be used as an oracle, so reencrypt output to see + // if it corresponds to input + + // this breaks probabilisic encryption, so disable it. Anyway, we do + // use the first n primes for key generation, so it is pretty easy + // to guess them. But as stated in the paper, this is not a security + // breach. So we can just work with the correct sigma. + + // if ((key.G.ModPow(test, key.Modulus)).Equals(input)) { + // output = test.ToByteArray(); + // } else { + // output = null; + // } + + output = test.ToByteArray(); + } + + return output; + } + + /** + * Encrypts a BigInteger aka Plaintext with the public key. + * + * @param plain + * The BigInteger to encrypt + * @return The byte[] representation of the encrypted BigInteger (i.e. + * crypted.toByteArray()) + */ + public virtual byte[] Encrypt( + BigInteger plain) + { + // Always return modulus size values 0-padded at the beginning + // 0-padding at the beginning is correctly parsed by BigInteger :) +// byte[] output = key.Modulus.ToByteArray(); +// Array.Clear(output, 0, output.Length); + byte[] output = new byte[key.Modulus.BitLength / 8 + 1]; + + byte[] tmp = key.G.ModPow(plain, key.Modulus).ToByteArray(); + Array.Copy(tmp, 0, output, output.Length - tmp.Length, tmp.Length); + return output; + } + + /** + * Adds the contents of two encrypted blocks mod sigma + * + * @param block1 + * the first encrypted block + * @param block2 + * the second encrypted block + * @return encrypt((block1 + block2) mod sigma) + * @throws InvalidCipherTextException + */ + public virtual byte[] AddCryptedBlocks( + byte[] block1, + byte[] block2) + { + // check for correct blocksize + if (forEncryption) + { + if ((block1.Length > GetOutputBlockSize()) + || (block2.Length > GetOutputBlockSize())) + { + throw new InvalidCipherTextException( + "BlockLength too large for simple addition.\n"); + } + } + else + { + if ((block1.Length > GetInputBlockSize()) + || (block2.Length > GetInputBlockSize())) + { + throw new InvalidCipherTextException( + "BlockLength too large for simple addition.\n"); + } + } + + // calculate resulting block + BigInteger m1Crypt = new BigInteger(1, block1); + BigInteger m2Crypt = new BigInteger(1, block2); + BigInteger m1m2Crypt = m1Crypt.Multiply(m2Crypt); + m1m2Crypt = m1m2Crypt.Mod(key.Modulus); + + //byte[] output = key.Modulus.ToByteArray(); + //Array.Clear(output, 0, output.Length); + byte[] output = new byte[key.Modulus.BitLength / 8 + 1]; + + byte[] m1m2CryptBytes = m1m2Crypt.ToByteArray(); + Array.Copy(m1m2CryptBytes, 0, output, + output.Length - m1m2CryptBytes.Length, m1m2CryptBytes.Length); + + return output; + } + + /** + * Convenience Method for data exchange with the cipher. + * + * Determines blocksize and splits data to blocksize. + * + * @param data the data to be processed + * @return the data after it went through the NaccacheSternEngine. + * @throws InvalidCipherTextException + */ + public virtual byte[] ProcessData( + byte[] data) + { + if (data.Length > GetInputBlockSize()) + { + int inBlocksize = GetInputBlockSize(); + int outBlocksize = GetOutputBlockSize(); + int datapos = 0; + int retpos = 0; + byte[] retval = new byte[(data.Length / inBlocksize + 1) * outBlocksize]; + while (datapos < data.Length) + { + byte[] tmp; + if (datapos + inBlocksize < data.Length) + { + tmp = ProcessBlock(data, datapos, inBlocksize); + datapos += inBlocksize; + } + else + { + tmp = ProcessBlock(data, datapos, data.Length - datapos); + datapos += data.Length - datapos; + } + if (tmp != null) + { + tmp.CopyTo(retval, retpos); + retpos += tmp.Length; + } + else + { + throw new InvalidCipherTextException("cipher returned null"); + } + } + byte[] ret = new byte[retpos]; + Array.Copy(retval, 0, ret, 0, retpos); + return ret; + } + else + { + return ProcessBlock(data, 0, data.Length); + } + } + + /** + * Computes the integer x that is expressed through the given primes and the + * congruences with the chinese remainder theorem (CRT). + * + * @param congruences + * the congruences c_i + * @param primes + * the primes p_i + * @return an integer x for that x % p_i == c_i + */ + private static BigInteger ChineseRemainder(IList congruences, IList primes) + { + BigInteger retval = BigInteger.Zero; + BigInteger all = BigInteger.One; + for (int i = 0; i < primes.Count; i++) + { + all = all.Multiply(primes[i]); + } + for (int i = 0; i < primes.Count; i++) + { + BigInteger a = primes[i]; + BigInteger b = all.Divide(a); + BigInteger b2 = b.ModInverse(a); + BigInteger tmp = b.Multiply(b2); + tmp = tmp.Multiply(congruences[i]); + retval = retval.Add(tmp); + } + + return retval.Mod(all); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/NaccacheSternEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/NaccacheSternEngine.cs.meta new file mode 100644 index 000000000..66c1df8be --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/NaccacheSternEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a7ab764450893347acda928f15fa396 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/NoekeonEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/NoekeonEngine.cs new file mode 100644 index 000000000..78fefd63a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/NoekeonEngine.cs @@ -0,0 +1,414 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * A Noekeon engine, using direct-key mode. + */ + public class NoekeonEngine + : IBlockCipher + { + // Block and key size, as well as the amount of rounds. + private const int Size = 16; + + private static readonly byte[] RoundConstants = { 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, + 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4 }; + + private readonly uint[] k = new uint[4]; + + private bool _initialised, _forEncryption; + + /** + * Create an instance of the Noekeon encryption algorithm + * and set some defaults + */ + public NoekeonEngine() + { + _initialised = false; + } + + public virtual string AlgorithmName + { + get { return "Noekeon"; } + } + + public virtual int GetBlockSize() + { + return Size; + } + + /** + * initialise + * + * @param forEncryption whether or not we are for encryption. + * @param params the parameters required to set up the cipher. + * @exception ArgumentException if the params argument is + * inappropriate. + */ + public virtual void Init(bool forEncryption, ICipherParameters parameters) + { + if (!(parameters is KeyParameter)) + throw new ArgumentException("Invalid parameters passed to Noekeon init - " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters), "parameters"); + + KeyParameter p = (KeyParameter) parameters; + byte[] key = p.GetKey(); + if (key.Length != 16) + throw new ArgumentException("Key length not 128 bits."); + + Pack.BE_To_UInt32(key, 0, k, 0, 4); + + if (!forEncryption) + { + // theta(k, new uint[]{ 0x00, 0x00, 0x00, 0x00 }); + { + uint a0 = k[0], a1 = k[1], a2 = k[2], a3 = k[3]; + + uint t02 = a0 ^ a2; + t02 ^= Integers.RotateLeft(t02, 8) ^ Integers.RotateLeft(t02, 24); + + uint t13 = a1 ^ a3; + t13 ^= Integers.RotateLeft(t13, 8) ^ Integers.RotateLeft(t13, 24); + + a0 ^= t13; + a1 ^= t02; + a2 ^= t13; + a3 ^= t02; + + k[0] = a0; k[1] = a1; k[2] = a2; k[3] = a3; + } + } + + this._forEncryption = forEncryption; + this._initialised = true; + } + + public virtual int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (!_initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.DataLength(input, inOff, Size, "input buffer too short"); + Check.OutputLength(output, outOff, Size, "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return _forEncryption + ? EncryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)) + : DecryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); +#else + return _forEncryption + ? EncryptBlock(input, inOff, output, outOff) + : DecryptBlock(input, inOff, output, outOff); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + if (!_initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.DataLength(input, Size, "input buffer too short"); + Check.OutputLength(output, Size, "output buffer too short"); + + return _forEncryption + ? EncryptBlock(input, output) + : DecryptBlock(input, output); + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int EncryptBlock(ReadOnlySpan input, Span output) + { + uint a0 = Pack.BE_To_UInt32(input); + uint a1 = Pack.BE_To_UInt32(input[4..]); + uint a2 = Pack.BE_To_UInt32(input[8..]); + uint a3 = Pack.BE_To_UInt32(input[12..]); + + uint k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; + + int round = 0; + for (;;) + { + a0 ^= RoundConstants[round]; + + // theta(a, k); + { + uint t02 = a0 ^ a2; + t02 ^= Integers.RotateLeft(t02, 8) ^ Integers.RotateLeft(t02, 24); + + a0 ^= k0; + a1 ^= k1; + a2 ^= k2; + a3 ^= k3; + + uint t13 = a1 ^ a3; + t13 ^= Integers.RotateLeft(t13, 8) ^ Integers.RotateLeft(t13, 24); + + a0 ^= t13; + a1 ^= t02; + a2 ^= t13; + a3 ^= t02; + } + + if (++round > Size) + break; + + // pi1(a); + { + a1 = Integers.RotateLeft(a1, 1); + a2 = Integers.RotateLeft(a2, 5); + a3 = Integers.RotateLeft(a3, 2); + } + + // gamma(a); + { + uint t = a3; + a1 ^= a3 | a2; + a3 = a0 ^ (a2 & ~a1); + + a2 = t ^ ~a1 ^ a2 ^ a3; + + a1 ^= a3 | a2; + a0 = t ^ (a2 & a1); + } + + // pi2(a); + { + a1 = Integers.RotateLeft(a1, 31); + a2 = Integers.RotateLeft(a2, 27); + a3 = Integers.RotateLeft(a3, 30); + } + } + + Pack.UInt32_To_BE(a0, output); + Pack.UInt32_To_BE(a1, output[4..]); + Pack.UInt32_To_BE(a2, output[8..]); + Pack.UInt32_To_BE(a3, output[12..]); + + return Size; + } + + private int DecryptBlock(ReadOnlySpan input, Span output) + { + uint a0 = Pack.BE_To_UInt32(input); + uint a1 = Pack.BE_To_UInt32(input[4..]); + uint a2 = Pack.BE_To_UInt32(input[8..]); + uint a3 = Pack.BE_To_UInt32(input[12..]); + + uint k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; + + int round = Size; + for (;;) + { + // theta(a, k); + { + uint t02 = a0 ^ a2; + t02 ^= Integers.RotateLeft(t02, 8) ^ Integers.RotateLeft(t02, 24); + + a0 ^= k0; + a1 ^= k1; + a2 ^= k2; + a3 ^= k3; + + uint t13 = a1 ^ a3; + t13 ^= Integers.RotateLeft(t13, 8) ^ Integers.RotateLeft(t13, 24); + + a0 ^= t13; + a1 ^= t02; + a2 ^= t13; + a3 ^= t02; + } + + a0 ^= RoundConstants[round]; + + if (--round < 0) + break; + + // pi1(a); + { + a1 = Integers.RotateLeft(a1, 1); + a2 = Integers.RotateLeft(a2, 5); + a3 = Integers.RotateLeft(a3, 2); + } + + // gamma(a); + { + uint t = a3; + a1 ^= a3 | a2; + a3 = a0 ^ (a2 & ~a1); + + a2 = t ^ ~a1 ^ a2 ^ a3; + + a1 ^= a3 | a2; + a0 = t ^ (a2 & a1); + } + + // pi2(a); + { + a1 = Integers.RotateLeft(a1, 31); + a2 = Integers.RotateLeft(a2, 27); + a3 = Integers.RotateLeft(a3, 30); + } + } + + Pack.UInt32_To_BE(a0, output); + Pack.UInt32_To_BE(a1, output[4..]); + Pack.UInt32_To_BE(a2, output[8..]); + Pack.UInt32_To_BE(a3, output[12..]); + + return Size; + } +#else + private int EncryptBlock(byte[] input, int inOff, byte[] output, int outOff) + { + uint a0 = Pack.BE_To_UInt32(input, inOff); + uint a1 = Pack.BE_To_UInt32(input, inOff + 4); + uint a2 = Pack.BE_To_UInt32(input, inOff + 8); + uint a3 = Pack.BE_To_UInt32(input, inOff + 12); + + uint k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; + + int round = 0; + for (;;) + { + a0 ^= RoundConstants[round]; + + // theta(a, k); + { + uint t02 = a0 ^ a2; + t02 ^= Integers.RotateLeft(t02, 8) ^ Integers.RotateLeft(t02, 24); + + a0 ^= k0; + a1 ^= k1; + a2 ^= k2; + a3 ^= k3; + + uint t13 = a1 ^ a3; + t13 ^= Integers.RotateLeft(t13, 8) ^ Integers.RotateLeft(t13, 24); + + a0 ^= t13; + a1 ^= t02; + a2 ^= t13; + a3 ^= t02; + } + + if (++round > Size) + break; + + // pi1(a); + { + a1 = Integers.RotateLeft(a1, 1); + a2 = Integers.RotateLeft(a2, 5); + a3 = Integers.RotateLeft(a3, 2); + } + + // gamma(a); + { + uint t = a3; + a1 ^= a3 | a2; + a3 = a0 ^ (a2 & ~a1); + + a2 = t ^ ~a1 ^ a2 ^ a3; + + a1 ^= a3 | a2; + a0 = t ^ (a2 & a1); + } + + // pi2(a); + { + a1 = Integers.RotateLeft(a1, 31); + a2 = Integers.RotateLeft(a2, 27); + a3 = Integers.RotateLeft(a3, 30); + } + } + + Pack.UInt32_To_BE(a0, output, outOff); + Pack.UInt32_To_BE(a1, output, outOff + 4); + Pack.UInt32_To_BE(a2, output, outOff + 8); + Pack.UInt32_To_BE(a3, output, outOff + 12); + + return Size; + } + + private int DecryptBlock(byte[] input, int inOff, byte[] output, int outOff) + { + uint a0 = Pack.BE_To_UInt32(input, inOff); + uint a1 = Pack.BE_To_UInt32(input, inOff + 4); + uint a2 = Pack.BE_To_UInt32(input, inOff + 8); + uint a3 = Pack.BE_To_UInt32(input, inOff + 12); + + uint k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; + + int round = Size; + for (;;) + { + // theta(a, k); + { + uint t02 = a0 ^ a2; + t02 ^= Integers.RotateLeft(t02, 8) ^ Integers.RotateLeft(t02, 24); + + a0 ^= k0; + a1 ^= k1; + a2 ^= k2; + a3 ^= k3; + + uint t13 = a1 ^ a3; + t13 ^= Integers.RotateLeft(t13, 8) ^ Integers.RotateLeft(t13, 24); + + a0 ^= t13; + a1 ^= t02; + a2 ^= t13; + a3 ^= t02; + } + + a0 ^= RoundConstants[round]; + + if (--round < 0) + break; + + // pi1(a); + { + a1 = Integers.RotateLeft(a1, 1); + a2 = Integers.RotateLeft(a2, 5); + a3 = Integers.RotateLeft(a3, 2); + } + + // gamma(a); + { + uint t = a3; + a1 ^= a3 | a2; + a3 = a0 ^ (a2 & ~a1); + + a2 = t ^ ~a1 ^ a2 ^ a3; + + a1 ^= a3 | a2; + a0 = t ^ (a2 & a1); + } + + // pi2(a); + { + a1 = Integers.RotateLeft(a1, 31); + a2 = Integers.RotateLeft(a2, 27); + a3 = Integers.RotateLeft(a3, 30); + } + } + + Pack.UInt32_To_BE(a0, output, outOff); + Pack.UInt32_To_BE(a1, output, outOff + 4); + Pack.UInt32_To_BE(a2, output, outOff + 8); + Pack.UInt32_To_BE(a3, output, outOff + 12); + + return Size; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/NoekeonEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/NoekeonEngine.cs.meta new file mode 100644 index 000000000..b3e41eb6b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/NoekeonEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 89978e6f457d6a546ac5b8c81fa0b9cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/NullEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/NullEngine.cs new file mode 100644 index 000000000..3b1d777ff --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/NullEngine.cs @@ -0,0 +1,2 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/NullEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/NullEngine.cs.meta new file mode 100644 index 000000000..d4f1fa2c0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/NullEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 149fe63ae461c054ea71ccbdac969ac8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC2Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC2Engine.cs new file mode 100644 index 000000000..7095da7db --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC2Engine.cs @@ -0,0 +1,433 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * an implementation of RC2 as described in RFC 2268 + * "A Description of the RC2(r) Encryption Algorithm" R. Rivest. + */ + public class RC2Engine + : IBlockCipher + { + // + // the values we use for key expansion (based on the digits of PI) + // + private static readonly byte[] piTable = + { + (byte)0xd9, (byte)0x78, (byte)0xf9, (byte)0xc4, (byte)0x19, (byte)0xdd, (byte)0xb5, (byte)0xed, + (byte)0x28, (byte)0xe9, (byte)0xfd, (byte)0x79, (byte)0x4a, (byte)0xa0, (byte)0xd8, (byte)0x9d, + (byte)0xc6, (byte)0x7e, (byte)0x37, (byte)0x83, (byte)0x2b, (byte)0x76, (byte)0x53, (byte)0x8e, + (byte)0x62, (byte)0x4c, (byte)0x64, (byte)0x88, (byte)0x44, (byte)0x8b, (byte)0xfb, (byte)0xa2, + (byte)0x17, (byte)0x9a, (byte)0x59, (byte)0xf5, (byte)0x87, (byte)0xb3, (byte)0x4f, (byte)0x13, + (byte)0x61, (byte)0x45, (byte)0x6d, (byte)0x8d, (byte)0x9, (byte)0x81, (byte)0x7d, (byte)0x32, + (byte)0xbd, (byte)0x8f, (byte)0x40, (byte)0xeb, (byte)0x86, (byte)0xb7, (byte)0x7b, (byte)0xb, + (byte)0xf0, (byte)0x95, (byte)0x21, (byte)0x22, (byte)0x5c, (byte)0x6b, (byte)0x4e, (byte)0x82, + (byte)0x54, (byte)0xd6, (byte)0x65, (byte)0x93, (byte)0xce, (byte)0x60, (byte)0xb2, (byte)0x1c, + (byte)0x73, (byte)0x56, (byte)0xc0, (byte)0x14, (byte)0xa7, (byte)0x8c, (byte)0xf1, (byte)0xdc, + (byte)0x12, (byte)0x75, (byte)0xca, (byte)0x1f, (byte)0x3b, (byte)0xbe, (byte)0xe4, (byte)0xd1, + (byte)0x42, (byte)0x3d, (byte)0xd4, (byte)0x30, (byte)0xa3, (byte)0x3c, (byte)0xb6, (byte)0x26, + (byte)0x6f, (byte)0xbf, (byte)0xe, (byte)0xda, (byte)0x46, (byte)0x69, (byte)0x7, (byte)0x57, + (byte)0x27, (byte)0xf2, (byte)0x1d, (byte)0x9b, (byte)0xbc, (byte)0x94, (byte)0x43, (byte)0x3, + (byte)0xf8, (byte)0x11, (byte)0xc7, (byte)0xf6, (byte)0x90, (byte)0xef, (byte)0x3e, (byte)0xe7, + (byte)0x6, (byte)0xc3, (byte)0xd5, (byte)0x2f, (byte)0xc8, (byte)0x66, (byte)0x1e, (byte)0xd7, + (byte)0x8, (byte)0xe8, (byte)0xea, (byte)0xde, (byte)0x80, (byte)0x52, (byte)0xee, (byte)0xf7, + (byte)0x84, (byte)0xaa, (byte)0x72, (byte)0xac, (byte)0x35, (byte)0x4d, (byte)0x6a, (byte)0x2a, + (byte)0x96, (byte)0x1a, (byte)0xd2, (byte)0x71, (byte)0x5a, (byte)0x15, (byte)0x49, (byte)0x74, + (byte)0x4b, (byte)0x9f, (byte)0xd0, (byte)0x5e, (byte)0x4, (byte)0x18, (byte)0xa4, (byte)0xec, + (byte)0xc2, (byte)0xe0, (byte)0x41, (byte)0x6e, (byte)0xf, (byte)0x51, (byte)0xcb, (byte)0xcc, + (byte)0x24, (byte)0x91, (byte)0xaf, (byte)0x50, (byte)0xa1, (byte)0xf4, (byte)0x70, (byte)0x39, + (byte)0x99, (byte)0x7c, (byte)0x3a, (byte)0x85, (byte)0x23, (byte)0xb8, (byte)0xb4, (byte)0x7a, + (byte)0xfc, (byte)0x2, (byte)0x36, (byte)0x5b, (byte)0x25, (byte)0x55, (byte)0x97, (byte)0x31, + (byte)0x2d, (byte)0x5d, (byte)0xfa, (byte)0x98, (byte)0xe3, (byte)0x8a, (byte)0x92, (byte)0xae, + (byte)0x5, (byte)0xdf, (byte)0x29, (byte)0x10, (byte)0x67, (byte)0x6c, (byte)0xba, (byte)0xc9, + (byte)0xd3, (byte)0x0, (byte)0xe6, (byte)0xcf, (byte)0xe1, (byte)0x9e, (byte)0xa8, (byte)0x2c, + (byte)0x63, (byte)0x16, (byte)0x1, (byte)0x3f, (byte)0x58, (byte)0xe2, (byte)0x89, (byte)0xa9, + (byte)0xd, (byte)0x38, (byte)0x34, (byte)0x1b, (byte)0xab, (byte)0x33, (byte)0xff, (byte)0xb0, + (byte)0xbb, (byte)0x48, (byte)0xc, (byte)0x5f, (byte)0xb9, (byte)0xb1, (byte)0xcd, (byte)0x2e, + (byte)0xc5, (byte)0xf3, (byte)0xdb, (byte)0x47, (byte)0xe5, (byte)0xa5, (byte)0x9c, (byte)0x77, + (byte)0xa, (byte)0xa6, (byte)0x20, (byte)0x68, (byte)0xfe, (byte)0x7f, (byte)0xc1, (byte)0xad + }; + + private const int BLOCK_SIZE = 8; + + private int[] workingKey; + private bool encrypting; + + private int[] GenerateWorkingKey( + byte[] key, + int bits) + { + int x; + int[] xKey = new int[128]; + + for (int i = 0; i != key.Length; i++) + { + xKey[i] = key[i] & 0xff; + } + + // Phase 1: Expand input key to 128 bytes + int len = key.Length; + + if (len < 128) + { + int index = 0; + + x = xKey[len - 1]; + + do + { + x = piTable[(x + xKey[index++]) & 255] & 0xff; + xKey[len++] = x; + } + while (len < 128); + } + + // Phase 2 - reduce effective key size to "bits" + len = (bits + 7) >> 3; + x = piTable[xKey[128 - len] & (255 >> (7 & -bits))] & 0xff; + xKey[128 - len] = x; + + for (int i = 128 - len - 1; i >= 0; i--) + { + x = piTable[x ^ xKey[i + len]] & 0xff; + xKey[i] = x; + } + + // Phase 3 - copy to newKey in little-endian order + int[] newKey = new int[64]; + + for (int i = 0; i != newKey.Length; i++) + { + newKey[i] = (xKey[2 * i] + (xKey[2 * i + 1] << 8)); + } + + return newKey; + } + + /** + * initialise a RC2 cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param parameters the parameters required to set up the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public virtual void Init( + bool forEncryption, + ICipherParameters parameters) + { + this.encrypting = forEncryption; + + if (parameters is RC2Parameters) + { + RC2Parameters param = (RC2Parameters) parameters; + + workingKey = GenerateWorkingKey(param.GetKey(), param.EffectiveKeyBits); + } + else if (parameters is KeyParameter) + { + KeyParameter param = (KeyParameter) parameters; + byte[] key = param.GetKey(); + + workingKey = GenerateWorkingKey(key, key.Length * 8); + } + else + { + throw new ArgumentException("invalid parameter passed to RC2 init - " + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + } + } + + public virtual string AlgorithmName + { + get { return "RC2"; } + } + + public virtual int GetBlockSize() + { + return BLOCK_SIZE; + } + + public virtual int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (workingKey == null) + throw new InvalidOperationException("RC2 engine not initialised"); + + Check.DataLength(input, inOff, BLOCK_SIZE, "input buffer too short"); + Check.OutputLength(output, outOff, BLOCK_SIZE, "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + if (encrypting) + { + EncryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); + } + else + { + DecryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); + } +#else + if (encrypting) + { + EncryptBlock(input, inOff, output, outOff); + } + else + { + DecryptBlock(input, inOff, output, outOff); + } +#endif + + return BLOCK_SIZE; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + if (workingKey == null) + throw new InvalidOperationException("RC2 engine not initialised"); + + Check.DataLength(input, BLOCK_SIZE, "input buffer too short"); + Check.OutputLength(output, BLOCK_SIZE, "output buffer too short"); + + if (encrypting) + { + EncryptBlock(input, output); + } + else + { + DecryptBlock(input, output); + } + + return BLOCK_SIZE; + } +#endif + + /** + * return the result rotating the 16 bit number in x left by y + */ + private static int RotateWordLeft(int x, int y) + { + x &= 0xffff; + return (x << y) | (x >> (16 - y)); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void EncryptBlock(ReadOnlySpan input, Span output) + { + int x76, x54, x32, x10; + + x76 = ((input[7] & 0xff) << 8) + (input[6] & 0xff); + x54 = ((input[5] & 0xff) << 8) + (input[4] & 0xff); + x32 = ((input[3] & 0xff) << 8) + (input[2] & 0xff); + x10 = ((input[1] & 0xff) << 8) + (input[0] & 0xff); + + for (int i = 0; i <= 16; i += 4) + { + x10 = RotateWordLeft(x10 + (x32 & ~x76) + (x54 & x76) + workingKey[i], 1); + x32 = RotateWordLeft(x32 + (x54 & ~x10) + (x76 & x10) + workingKey[i + 1], 2); + x54 = RotateWordLeft(x54 + (x76 & ~x32) + (x10 & x32) + workingKey[i + 2], 3); + x76 = RotateWordLeft(x76 + (x10 & ~x54) + (x32 & x54) + workingKey[i + 3], 5); + } + + x10 += workingKey[x76 & 63]; + x32 += workingKey[x10 & 63]; + x54 += workingKey[x32 & 63]; + x76 += workingKey[x54 & 63]; + + for (int i = 20; i <= 40; i += 4) + { + x10 = RotateWordLeft(x10 + (x32 & ~x76) + (x54 & x76) + workingKey[i], 1); + x32 = RotateWordLeft(x32 + (x54 & ~x10) + (x76 & x10) + workingKey[i + 1], 2); + x54 = RotateWordLeft(x54 + (x76 & ~x32) + (x10 & x32) + workingKey[i + 2], 3); + x76 = RotateWordLeft(x76 + (x10 & ~x54) + (x32 & x54) + workingKey[i + 3], 5); + } + + x10 += workingKey[x76 & 63]; + x32 += workingKey[x10 & 63]; + x54 += workingKey[x32 & 63]; + x76 += workingKey[x54 & 63]; + + for (int i = 44; i < 64; i += 4) + { + x10 = RotateWordLeft(x10 + (x32 & ~x76) + (x54 & x76) + workingKey[i], 1); + x32 = RotateWordLeft(x32 + (x54 & ~x10) + (x76 & x10) + workingKey[i + 1], 2); + x54 = RotateWordLeft(x54 + (x76 & ~x32) + (x10 & x32) + workingKey[i + 2], 3); + x76 = RotateWordLeft(x76 + (x10 & ~x54) + (x32 & x54) + workingKey[i + 3], 5); + } + + output[0] = (byte)x10; + output[1] = (byte)(x10 >> 8); + output[2] = (byte)x32; + output[3] = (byte)(x32 >> 8); + output[4] = (byte)x54; + output[5] = (byte)(x54 >> 8); + output[6] = (byte)x76; + output[7] = (byte)(x76 >> 8); + } + + private void DecryptBlock(ReadOnlySpan input, Span output) + { + int x76, x54, x32, x10; + + x76 = ((input[7] & 0xff) << 8) + (input[6] & 0xff); + x54 = ((input[5] & 0xff) << 8) + (input[4] & 0xff); + x32 = ((input[3] & 0xff) << 8) + (input[2] & 0xff); + x10 = ((input[1] & 0xff) << 8) + (input[0] & 0xff); + + for (int i = 60; i >= 44; i -= 4) + { + x76 = RotateWordLeft(x76, 11) - ((x10 & ~x54) + (x32 & x54) + workingKey[i + 3]); + x54 = RotateWordLeft(x54, 13) - ((x76 & ~x32) + (x10 & x32) + workingKey[i + 2]); + x32 = RotateWordLeft(x32, 14) - ((x54 & ~x10) + (x76 & x10) + workingKey[i + 1]); + x10 = RotateWordLeft(x10, 15) - ((x32 & ~x76) + (x54 & x76) + workingKey[i]); + } + + x76 -= workingKey[x54 & 63]; + x54 -= workingKey[x32 & 63]; + x32 -= workingKey[x10 & 63]; + x10 -= workingKey[x76 & 63]; + + for (int i = 40; i >= 20; i -= 4) + { + x76 = RotateWordLeft(x76, 11) - ((x10 & ~x54) + (x32 & x54) + workingKey[i + 3]); + x54 = RotateWordLeft(x54, 13) - ((x76 & ~x32) + (x10 & x32) + workingKey[i + 2]); + x32 = RotateWordLeft(x32, 14) - ((x54 & ~x10) + (x76 & x10) + workingKey[i + 1]); + x10 = RotateWordLeft(x10, 15) - ((x32 & ~x76) + (x54 & x76) + workingKey[i]); + } + + x76 -= workingKey[x54 & 63]; + x54 -= workingKey[x32 & 63]; + x32 -= workingKey[x10 & 63]; + x10 -= workingKey[x76 & 63]; + + for (int i = 16; i >= 0; i -= 4) + { + x76 = RotateWordLeft(x76, 11) - ((x10 & ~x54) + (x32 & x54) + workingKey[i + 3]); + x54 = RotateWordLeft(x54, 13) - ((x76 & ~x32) + (x10 & x32) + workingKey[i + 2]); + x32 = RotateWordLeft(x32, 14) - ((x54 & ~x10) + (x76 & x10) + workingKey[i + 1]); + x10 = RotateWordLeft(x10, 15) - ((x32 & ~x76) + (x54 & x76) + workingKey[i]); + } + + output[0] = (byte)x10; + output[1] = (byte)(x10 >> 8); + output[2] = (byte)x32; + output[3] = (byte)(x32 >> 8); + output[4] = (byte)x54; + output[5] = (byte)(x54 >> 8); + output[6] = (byte)x76; + output[7] = (byte)(x76 >> 8); + } +#else + private void EncryptBlock(byte[] input, int inOff, byte[] outBytes, int outOff) + { + int x76, x54, x32, x10; + + x76 = ((input[inOff + 7] & 0xff) << 8) + (input[inOff + 6] & 0xff); + x54 = ((input[inOff + 5] & 0xff) << 8) + (input[inOff + 4] & 0xff); + x32 = ((input[inOff + 3] & 0xff) << 8) + (input[inOff + 2] & 0xff); + x10 = ((input[inOff + 1] & 0xff) << 8) + (input[inOff + 0] & 0xff); + + for (int i = 0; i <= 16; i += 4) + { + x10 = RotateWordLeft(x10 + (x32 & ~x76) + (x54 & x76) + workingKey[i ], 1); + x32 = RotateWordLeft(x32 + (x54 & ~x10) + (x76 & x10) + workingKey[i+1], 2); + x54 = RotateWordLeft(x54 + (x76 & ~x32) + (x10 & x32) + workingKey[i+2], 3); + x76 = RotateWordLeft(x76 + (x10 & ~x54) + (x32 & x54) + workingKey[i+3], 5); + } + + x10 += workingKey[x76 & 63]; + x32 += workingKey[x10 & 63]; + x54 += workingKey[x32 & 63]; + x76 += workingKey[x54 & 63]; + + for (int i = 20; i <= 40; i += 4) + { + x10 = RotateWordLeft(x10 + (x32 & ~x76) + (x54 & x76) + workingKey[i ], 1); + x32 = RotateWordLeft(x32 + (x54 & ~x10) + (x76 & x10) + workingKey[i+1], 2); + x54 = RotateWordLeft(x54 + (x76 & ~x32) + (x10 & x32) + workingKey[i+2], 3); + x76 = RotateWordLeft(x76 + (x10 & ~x54) + (x32 & x54) + workingKey[i+3], 5); + } + + x10 += workingKey[x76 & 63]; + x32 += workingKey[x10 & 63]; + x54 += workingKey[x32 & 63]; + x76 += workingKey[x54 & 63]; + + for (int i = 44; i < 64; i += 4) + { + x10 = RotateWordLeft(x10 + (x32 & ~x76) + (x54 & x76) + workingKey[i ], 1); + x32 = RotateWordLeft(x32 + (x54 & ~x10) + (x76 & x10) + workingKey[i+1], 2); + x54 = RotateWordLeft(x54 + (x76 & ~x32) + (x10 & x32) + workingKey[i+2], 3); + x76 = RotateWordLeft(x76 + (x10 & ~x54) + (x32 & x54) + workingKey[i+3], 5); + } + + outBytes[outOff + 0] = (byte)x10; + outBytes[outOff + 1] = (byte)(x10 >> 8); + outBytes[outOff + 2] = (byte)x32; + outBytes[outOff + 3] = (byte)(x32 >> 8); + outBytes[outOff + 4] = (byte)x54; + outBytes[outOff + 5] = (byte)(x54 >> 8); + outBytes[outOff + 6] = (byte)x76; + outBytes[outOff + 7] = (byte)(x76 >> 8); + } + + private void DecryptBlock(byte[] input, int inOff, byte[] outBytes, int outOff) + { + int x76, x54, x32, x10; + + x76 = ((input[inOff + 7] & 0xff) << 8) + (input[inOff + 6] & 0xff); + x54 = ((input[inOff + 5] & 0xff) << 8) + (input[inOff + 4] & 0xff); + x32 = ((input[inOff + 3] & 0xff) << 8) + (input[inOff + 2] & 0xff); + x10 = ((input[inOff + 1] & 0xff) << 8) + (input[inOff + 0] & 0xff); + + for (int i = 60; i >= 44; i -= 4) + { + x76 = RotateWordLeft(x76, 11) - ((x10 & ~x54) + (x32 & x54) + workingKey[i+3]); + x54 = RotateWordLeft(x54, 13) - ((x76 & ~x32) + (x10 & x32) + workingKey[i+2]); + x32 = RotateWordLeft(x32, 14) - ((x54 & ~x10) + (x76 & x10) + workingKey[i+1]); + x10 = RotateWordLeft(x10, 15) - ((x32 & ~x76) + (x54 & x76) + workingKey[i ]); + } + + x76 -= workingKey[x54 & 63]; + x54 -= workingKey[x32 & 63]; + x32 -= workingKey[x10 & 63]; + x10 -= workingKey[x76 & 63]; + + for (int i = 40; i >= 20; i -= 4) + { + x76 = RotateWordLeft(x76, 11) - ((x10 & ~x54) + (x32 & x54) + workingKey[i+3]); + x54 = RotateWordLeft(x54, 13) - ((x76 & ~x32) + (x10 & x32) + workingKey[i+2]); + x32 = RotateWordLeft(x32, 14) - ((x54 & ~x10) + (x76 & x10) + workingKey[i+1]); + x10 = RotateWordLeft(x10, 15) - ((x32 & ~x76) + (x54 & x76) + workingKey[i ]); + } + + x76 -= workingKey[x54 & 63]; + x54 -= workingKey[x32 & 63]; + x32 -= workingKey[x10 & 63]; + x10 -= workingKey[x76 & 63]; + + for (int i = 16; i >= 0; i -= 4) + { + x76 = RotateWordLeft(x76, 11) - ((x10 & ~x54) + (x32 & x54) + workingKey[i+3]); + x54 = RotateWordLeft(x54, 13) - ((x76 & ~x32) + (x10 & x32) + workingKey[i+2]); + x32 = RotateWordLeft(x32, 14) - ((x54 & ~x10) + (x76 & x10) + workingKey[i+1]); + x10 = RotateWordLeft(x10, 15) - ((x32 & ~x76) + (x54 & x76) + workingKey[i ]); + } + + outBytes[outOff + 0] = (byte)x10; + outBytes[outOff + 1] = (byte)(x10 >> 8); + outBytes[outOff + 2] = (byte)x32; + outBytes[outOff + 3] = (byte)(x32 >> 8); + outBytes[outOff + 4] = (byte)x54; + outBytes[outOff + 5] = (byte)(x54 >> 8); + outBytes[outOff + 6] = (byte)x76; + outBytes[outOff + 7] = (byte)(x76 >> 8); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC2Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC2Engine.cs.meta new file mode 100644 index 000000000..a5e438173 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC2Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e2908df73e25da4690be4d9c34ba50c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC2WrapEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC2WrapEngine.cs new file mode 100644 index 000000000..1e2770c5c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC2WrapEngine.cs @@ -0,0 +1,371 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * Wrap keys according to RFC 3217 - RC2 mechanism + */ + public class RC2WrapEngine + : IWrapper + { + /** Field engine */ + private CbcBlockCipher engine; + + /** Field param */ + private ICipherParameters parameters; + + /** Field paramPlusIV */ + private ParametersWithIV paramPlusIV; + + /** Field iv */ + private byte[] iv; + + /** Field forWrapping */ + private bool forWrapping; + + private SecureRandom sr; + + /** Field IV2 */ + private static readonly byte[] IV2 = + { + (byte) 0x4a, (byte) 0xdd, (byte) 0xa2, + (byte) 0x2c, (byte) 0x79, (byte) 0xe8, + (byte) 0x21, (byte) 0x05 + }; + + // + // checksum digest + // + private readonly IDigest sha1 = new Sha1Digest(); + private readonly byte[] digest = new byte[20]; + + /** + * Method init + * + * @param forWrapping + * @param param + */ + public virtual void Init(bool forWrapping, ICipherParameters parameters) + { + this.forWrapping = forWrapping; + this.engine = new CbcBlockCipher(new RC2Engine()); + + if (parameters is ParametersWithRandom pWithR) + { + sr = pWithR.Random; + parameters = pWithR.Parameters; + } + else + { + sr = CryptoServicesRegistrar.GetSecureRandom(); + } + + if (parameters is ParametersWithIV) + { + if (!forWrapping) + throw new ArgumentException("You should not supply an IV for unwrapping"); + + this.paramPlusIV = (ParametersWithIV)parameters; + this.iv = this.paramPlusIV.GetIV(); + this.parameters = this.paramPlusIV.Parameters; + + if (this.iv.Length != 8) + throw new ArgumentException("IV is not 8 octets"); + } + else + { + this.parameters = parameters; + + if (this.forWrapping) + { + // Hm, we have no IV but we want to wrap ?!? + // well, then we have to create our own IV. + this.iv = new byte[8]; + sr.NextBytes(iv); + this.paramPlusIV = new ParametersWithIV(this.parameters, this.iv); + } + } + } + + /** + * Method GetAlgorithmName + * + * @return + */ + public virtual string AlgorithmName + { + get { return "RC2"; } + } + + /** + * Method wrap + * + * @param in + * @param inOff + * @param inLen + * @return + */ + public virtual byte[] Wrap( + byte[] input, + int inOff, + int length) + { + if (!forWrapping) + { + throw new InvalidOperationException("Not initialized for wrapping"); + } + + int len = length + 1; + if ((len % 8) != 0) + { + len += 8 - (len % 8); + } + + byte [] keyToBeWrapped = new byte[len]; + + keyToBeWrapped[0] = (byte)length; + Array.Copy(input, inOff, keyToBeWrapped, 1, length); + + byte[] pad = new byte[keyToBeWrapped.Length - length - 1]; + + if (pad.Length > 0) + { + sr.NextBytes(pad); + Array.Copy(pad, 0, keyToBeWrapped, length + 1, pad.Length); + } + + // Compute the CMS Key Checksum, (section 5.6.1), call this CKS. + byte[] CKS = CalculateCmsKeyChecksum(keyToBeWrapped); + + // Let WKCKS = WK || CKS where || is concatenation. + byte[] WKCKS = new byte[keyToBeWrapped.Length + CKS.Length]; + + Array.Copy(keyToBeWrapped, 0, WKCKS, 0, keyToBeWrapped.Length); + Array.Copy(CKS, 0, WKCKS, keyToBeWrapped.Length, CKS.Length); + + // Encrypt WKCKS in CBC mode using KEK as the key and IV as the + // initialization vector. Call the results TEMP1. + byte [] TEMP1 = new byte[WKCKS.Length]; + + Array.Copy(WKCKS, 0, TEMP1, 0, WKCKS.Length); + + int noOfBlocks = WKCKS.Length / engine.GetBlockSize(); + int extraBytes = WKCKS.Length % engine.GetBlockSize(); + + if (extraBytes != 0) + { + throw new InvalidOperationException("Not multiple of block length"); + } + + engine.Init(true, paramPlusIV); + + for (int i = 0; i < noOfBlocks; i++) + { + int currentBytePos = i * engine.GetBlockSize(); + + engine.ProcessBlock(TEMP1, currentBytePos, TEMP1, currentBytePos); + } + + // Left TEMP2 = IV || TEMP1. + byte[] TEMP2 = new byte[this.iv.Length + TEMP1.Length]; + + Array.Copy(this.iv, 0, TEMP2, 0, this.iv.Length); + Array.Copy(TEMP1, 0, TEMP2, this.iv.Length, TEMP1.Length); + + // Reverse the order of the octets in TEMP2 and call the result TEMP3. + byte[] TEMP3 = new byte[TEMP2.Length]; + + for (int i = 0; i < TEMP2.Length; i++) + { + TEMP3[i] = TEMP2[TEMP2.Length - (i + 1)]; + } + + // Encrypt TEMP3 in CBC mode using the KEK and an initialization vector + // of 0x 4a dd a2 2c 79 e8 21 05. The resulting cipher text is the desired + // result. It is 40 octets long if a 168 bit key is being wrapped. + ParametersWithIV param2 = new ParametersWithIV(this.parameters, IV2); + + this.engine.Init(true, param2); + + for (int i = 0; i < noOfBlocks + 1; i++) + { + int currentBytePos = i * engine.GetBlockSize(); + + engine.ProcessBlock(TEMP3, currentBytePos, TEMP3, currentBytePos); + } + + return TEMP3; + } + + /** + * Method unwrap + * + * @param in + * @param inOff + * @param inLen + * @return + * @throws InvalidCipherTextException + */ + public virtual byte[] Unwrap( + byte[] input, + int inOff, + int length) + { + if (forWrapping) + { + throw new InvalidOperationException("Not set for unwrapping"); + } + + if (input == null) + { + throw new InvalidCipherTextException("Null pointer as ciphertext"); + } + + if (length % engine.GetBlockSize() != 0) + { + throw new InvalidCipherTextException("Ciphertext not multiple of " + + engine.GetBlockSize()); + } + + /* + // Check if the length of the cipher text is reasonable given the key + // type. It must be 40 bytes for a 168 bit key and either 32, 40, or + // 48 bytes for a 128, 192, or 256 bit key. If the length is not supported + // or inconsistent with the algorithm for which the key is intended, + // return error. + // + // we do not accept 168 bit keys. it has to be 192 bit. + int lengthA = (estimatedKeyLengthInBit / 8) + 16; + int lengthB = estimatedKeyLengthInBit % 8; + + if ((lengthA != keyToBeUnwrapped.Length) || (lengthB != 0)) { + throw new XMLSecurityException("empty"); + } + */ + + // Decrypt the cipher text with TRIPLedeS in CBC mode using the KEK + // and an initialization vector (IV) of 0x4adda22c79e82105. Call the output TEMP3. + ParametersWithIV param2 = new ParametersWithIV(this.parameters, IV2); + + this.engine.Init(false, param2); + + byte [] TEMP3 = new byte[length]; + + Array.Copy(input, inOff, TEMP3, 0, length); + + for (int i = 0; i < (TEMP3.Length / engine.GetBlockSize()); i++) + { + int currentBytePos = i * engine.GetBlockSize(); + + engine.ProcessBlock(TEMP3, currentBytePos, TEMP3, currentBytePos); + } + + // Reverse the order of the octets in TEMP3 and call the result TEMP2. + byte[] TEMP2 = new byte[TEMP3.Length]; + + for (int i = 0; i < TEMP3.Length; i++) + { + TEMP2[i] = TEMP3[TEMP3.Length - (i + 1)]; + } + + // Decompose TEMP2 into IV, the first 8 octets, and TEMP1, the remaining octets. + this.iv = new byte[8]; + + byte[] TEMP1 = new byte[TEMP2.Length - 8]; + + Array.Copy(TEMP2, 0, this.iv, 0, 8); + Array.Copy(TEMP2, 8, TEMP1, 0, TEMP2.Length - 8); + + // Decrypt TEMP1 using TRIPLedeS in CBC mode using the KEK and the IV + // found in the previous step. Call the result WKCKS. + this.paramPlusIV = new ParametersWithIV(this.parameters, this.iv); + + this.engine.Init(false, this.paramPlusIV); + + byte[] LCEKPADICV = new byte[TEMP1.Length]; + + Array.Copy(TEMP1, 0, LCEKPADICV, 0, TEMP1.Length); + + for (int i = 0; i < (LCEKPADICV.Length / engine.GetBlockSize()); i++) + { + int currentBytePos = i * engine.GetBlockSize(); + + engine.ProcessBlock(LCEKPADICV, currentBytePos, LCEKPADICV, currentBytePos); + } + + // Decompose LCEKPADICV. CKS is the last 8 octets and WK, the wrapped key, are + // those octets before the CKS. + byte[] result = new byte[LCEKPADICV.Length - 8]; + byte[] CKStoBeVerified = new byte[8]; + + Array.Copy(LCEKPADICV, 0, result, 0, LCEKPADICV.Length - 8); + Array.Copy(LCEKPADICV, LCEKPADICV.Length - 8, CKStoBeVerified, 0, 8); + + // Calculate a CMS Key Checksum, (section 5.6.1), over the WK and compare + // with the CKS extracted in the above step. If they are not equal, return error. + if (!CheckCmsKeyChecksum(result, CKStoBeVerified)) + { + throw new InvalidCipherTextException( + "Checksum inside ciphertext is corrupted"); + } + + if ((result.Length - ((result[0] & 0xff) + 1)) > 7) + { + throw new InvalidCipherTextException( + "too many pad bytes (" + (result.Length - ((result[0] & 0xff) + 1)) + ")"); + } + + // CEK is the wrapped key, now extracted for use in data decryption. + byte[] CEK = new byte[result[0]]; + Array.Copy(result, 1, CEK, 0, CEK.Length); + return CEK; + } + + /** + * Some key wrap algorithms make use of the Key Checksum defined + * in CMS [CMS-Algorithms]. This is used to provide an integrity + * check value for the key being wrapped. The algorithm is + * + * - Compute the 20 octet SHA-1 hash on the key being wrapped. + * - Use the first 8 octets of this hash as the checksum value. + * + * @param key + * @return + * @throws Exception + * @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + */ + private byte[] CalculateCmsKeyChecksum( + byte[] key) + { + sha1.BlockUpdate(key, 0, key.Length); + sha1.DoFinal(digest, 0); + + byte[] result = new byte[8]; + Array.Copy(digest, 0, result, 0, 8); + return result; + } + + /** + * @param key + * @param checksum + * @return + * @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + */ + private bool CheckCmsKeyChecksum( + byte[] key, + byte[] checksum) + { + return Arrays.ConstantTimeAreEqual(CalculateCmsKeyChecksum(key), checksum); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC2WrapEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC2WrapEngine.cs.meta new file mode 100644 index 000000000..ece1f929c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC2WrapEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c68dd7b320ee974c9bf521cec0159e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC4Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC4Engine.cs new file mode 100644 index 000000000..665b9d57e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC4Engine.cs @@ -0,0 +1,167 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + public class RC4Engine + : IStreamCipher + { + private readonly static int STATE_LENGTH = 256; + + /* + * variables to hold the state of the RC4 engine + * during encryption and decryption + */ + + private byte[] engineState; + private int x; + private int y; + private byte[] workingKey; + + /** + * initialise a RC4 cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param parameters the parameters required to set up the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public virtual void Init( + bool forEncryption, + ICipherParameters parameters) + { + if (parameters is KeyParameter) + { + /* + * RC4 encryption and decryption is completely + * symmetrical, so the 'forEncryption' is + * irrelevant. + */ + workingKey = ((KeyParameter)parameters).GetKey(); + SetKey(workingKey); + + return; + } + + throw new ArgumentException("invalid parameter passed to RC4 init - " + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + } + + public virtual string AlgorithmName + { + get { return "RC4"; } + } + + public virtual byte ReturnByte( + byte input) + { + x = (x + 1) & 0xff; + y = (engineState[x] + y) & 0xff; + + // swap + byte tmp = engineState[x]; + engineState[x] = engineState[y]; + engineState[y] = tmp; + + // xor + return (byte)(input ^ engineState[(engineState[x] + engineState[y]) & 0xff]); + } + + public virtual void ProcessBytes( + byte[] input, + int inOff, + int length, + byte[] output, + int outOff) + { + Check.DataLength(input, inOff, length, "input buffer too short"); + Check.OutputLength(output, outOff, length, "output buffer too short"); + + for (int i = 0; i < length ; i++) + { + x = (x + 1) & 0xff; + y = (engineState[x] + y) & 0xff; + + byte sx = engineState[x]; + byte sy = engineState[y]; + + // swap + engineState[x] = sy; + engineState[y] = sx; + + // xor + output[i+outOff] = (byte)(input[i + inOff] ^ engineState[(sx + sy) & 0xff]); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void ProcessBytes(ReadOnlySpan input, Span output) + { + Check.OutputLength(output, input.Length, "output buffer too short"); + + for (int i = 0; i < input.Length; i++) + { + x = (x + 1) & 0xff; + y = (engineState[x] + y) & 0xff; + + byte sx = engineState[x]; + byte sy = engineState[y]; + + // swap + engineState[x] = sy; + engineState[y] = sx; + + // xor + output[i] = (byte)(input[i] ^ engineState[(sx + sy) & 0xff]); + } + } +#endif + + public virtual void Reset() + { + SetKey(workingKey); + } + + // Private implementation + + private void SetKey( + byte[] keyBytes) + { + workingKey = keyBytes; + + // System.out.println("the key length is ; "+ workingKey.Length); + + x = 0; + y = 0; + + if (engineState == null) + { + engineState = new byte[STATE_LENGTH]; + } + + // reset the state of the engine + for (int i=0; i < STATE_LENGTH; i++) + { + engineState[i] = (byte)i; + } + + int i1 = 0; + int i2 = 0; + + for (int i=0; i < STATE_LENGTH; i++) + { + i2 = ((keyBytes[i1] & 0xff) + engineState[i] + i2) & 0xff; + // do the byte-swap inline + byte tmp = engineState[i]; + engineState[i] = engineState[i2]; + engineState[i2] = tmp; + i1 = (i1+1) % keyBytes.Length; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC4Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC4Engine.cs.meta new file mode 100644 index 000000000..f09228248 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC4Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 068d5429f72b08f45a6b2ecde0991212 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC532Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC532Engine.cs new file mode 100644 index 000000000..0ed24d745 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC532Engine.cs @@ -0,0 +1,254 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * The specification for RC5 came from the RC5 Encryption Algorithm + * publication in RSA CryptoBytes, Spring of 1995. + * http://www.rsasecurity.com/rsalabs/cryptobytes. + *

+ * This implementation has a word size of 32 bits.

+ */ + public class RC532Engine + : IBlockCipher + { + /* + * the number of rounds to perform + */ + private int _noRounds; + + /* + * the expanded key array of size 2*(rounds + 1) + */ + private int [] _S; + + /* + * our "magic constants" for 32 32 + * + * Pw = Odd((e-2) * 2^wordsize) + * Qw = Odd((o-2) * 2^wordsize) + * + * where e is the base of natural logarithms (2.718281828...) + * and o is the golden ratio (1.61803398...) + */ + private static readonly int P32 = unchecked((int) 0xb7e15163); + private static readonly int Q32 = unchecked((int) 0x9e3779b9); + + private bool forEncryption; + + /** + * Create an instance of the RC5 encryption algorithm + * and set some defaults + */ + public RC532Engine() + { + _noRounds = 12; // the default + } + + public virtual string AlgorithmName + { + get { return "RC5-32"; } + } + + public virtual int GetBlockSize() + { + return 2 * 4; + } + + /** + * initialise a RC5-32 cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param parameters the parameters required to set up the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public virtual void Init(bool forEncryption, ICipherParameters parameters) + { + if (parameters is RC5Parameters rc5Parameters) + { + _noRounds = rc5Parameters.Rounds; + + SetKey(rc5Parameters.GetKey()); + } + else if (parameters is KeyParameter keyParameter) + { + SetKey(keyParameter.GetKey()); + } + else + { + throw new ArgumentException("invalid parameter passed to RC532 init - " + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + } + + this.forEncryption = forEncryption; + } + + public virtual int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return forEncryption + ? EncryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)) + : DecryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); +#else + return forEncryption + ? EncryptBlock(input, inOff, output, outOff) + : DecryptBlock(input, inOff, output, outOff); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + return forEncryption + ? EncryptBlock(input, output) + : DecryptBlock(input, output); + } +#endif + + /** + * Re-key the cipher. + * + * @param key the key to be used + */ + private void SetKey(byte[] key) + { + // + // KEY EXPANSION: + // + // There are 3 phases to the key expansion. + // + // Phase 1: + // Copy the secret key K[0...b-1] into an array L[0..c-1] of + // c = ceil(b/u), where u = 32/8 in little-endian order. + // In other words, we fill up L using u consecutive key bytes + // of K. Any unfilled byte positions in L are zeroed. In the + // case that b = c = 0, set c = 1 and L[0] = 0. + // + int[] L = new int[(key.Length + 3) / 4]; + + for (int i = 0; i != key.Length; i++) + { + L[i / 4] += (key[i] & 0xff) << (8 * (i % 4)); + } + + // + // Phase 2: + // Initialize S to a particular fixed pseudo-random bit pattern + // using an arithmetic progression modulo 2^wordsize determined + // by the magic numbers, Pw & Qw. + // + _S = new int[2*(_noRounds + 1)]; + + _S[0] = P32; + for (int i=1; i < _S.Length; i++) + { + _S[i] = (_S[i-1] + Q32); + } + + // + // Phase 3: + // Mix in the user's secret key in 3 passes over the arrays S & L. + // The max of the arrays sizes is used as the loop control + // + int iter; + + if (L.Length > _S.Length) + { + iter = 3 * L.Length; + } + else + { + iter = 3 * _S.Length; + } + + int A = 0, B = 0; + int ii = 0, jj = 0; + + for (int k = 0; k < iter; k++) + { + A = _S[ii] = Integers.RotateLeft(_S[ii] + A + B, 3); + B = L[jj] = Integers.RotateLeft(L[jj] + A + B, A + B); + ii = (ii+1) % _S.Length; + jj = (jj+1) % L.Length; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int EncryptBlock(ReadOnlySpan input, Span output) + { + int A = (int)Pack.LE_To_UInt32(input) + _S[0]; + int B = (int)Pack.LE_To_UInt32(input[4..]) + _S[1]; + + for (int i = 1; i <= _noRounds; i++) + { + A = Integers.RotateLeft(A ^ B, B) + _S[2*i]; + B = Integers.RotateLeft(B ^ A, A) + _S[2*i+1]; + } + + Pack.UInt32_To_LE((uint)A, output); + Pack.UInt32_To_LE((uint)B, output[4..]); + + return 8; + } + + private int DecryptBlock(ReadOnlySpan input, Span output) + { + int A = (int)Pack.LE_To_UInt32(input); + int B = (int)Pack.LE_To_UInt32(input[4..]); + + for (int i = _noRounds; i >= 1; i--) + { + B = Integers.RotateRight(B - _S[2*i+1], A) ^ A; + A = Integers.RotateRight(A - _S[2*i], B) ^ B; + } + + Pack.UInt32_To_LE((uint)(A - _S[0]), output); + Pack.UInt32_To_LE((uint)(B - _S[1]), output[4..]); + + return 8; + } +#else + private int EncryptBlock(byte[] input, int inOff, byte[] outBytes, int outOff) + { + int A = (int)Pack.LE_To_UInt32(input, inOff) + _S[0]; + int B = (int)Pack.LE_To_UInt32(input, inOff + 4) + _S[1]; + + for (int i = 1; i <= _noRounds; i++) + { + A = Integers.RotateLeft(A ^ B, B) + _S[2*i]; + B = Integers.RotateLeft(B ^ A, A) + _S[2*i+1]; + } + + Pack.UInt32_To_LE((uint)A, outBytes, outOff); + Pack.UInt32_To_LE((uint)B, outBytes, outOff + 4); + + return 8; + } + + private int DecryptBlock(byte[] input, int inOff, byte[] outBytes, int outOff) + { + int A = (int)Pack.LE_To_UInt32(input, inOff); + int B = (int)Pack.LE_To_UInt32(input, inOff + 4); + + for (int i = _noRounds; i >= 1; i--) + { + B = Integers.RotateRight(B - _S[2*i+1], A) ^ A; + A = Integers.RotateRight(A - _S[2*i], B) ^ B; + } + + Pack.UInt32_To_LE((uint)(A - _S[0]), outBytes, outOff); + Pack.UInt32_To_LE((uint)(B - _S[1]), outBytes, outOff + 4); + + return 8; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC532Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC532Engine.cs.meta new file mode 100644 index 000000000..4017d6373 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC532Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 715d03447094f77489e130fd0ae50f48 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC564Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC564Engine.cs new file mode 100644 index 000000000..ac84dab63 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC564Engine.cs @@ -0,0 +1,247 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * The specification for RC5 came from the RC5 Encryption Algorithm + * publication in RSA CryptoBytes, Spring of 1995. + * http://www.rsasecurity.com/rsalabs/cryptobytes. + *

+ * This implementation is set to work with a 64 bit word size.

+ */ + public class RC564Engine + : IBlockCipher + { + /* + * the number of rounds to perform + */ + private int _noRounds; + + /* + * the expanded key array of size 2*(rounds + 1) + */ + private long [] _S; + + /* + * our "magic constants" for wordSize 62 + * + * Pw = Odd((e-2) * 2^wordsize) + * Qw = Odd((o-2) * 2^wordsize) + * + * where e is the base of natural logarithms (2.718281828...) + * and o is the golden ratio (1.61803398...) + */ + private static readonly long P64 = unchecked( (long) 0xb7e151628aed2a6bL); + private static readonly long Q64 = unchecked( (long) 0x9e3779b97f4a7c15L); + + private bool forEncryption; + + /** + * Create an instance of the RC5 encryption algorithm + * and set some defaults + */ + public RC564Engine() + { + _noRounds = 12; +// _S = null; + } + + public virtual string AlgorithmName + { + get { return "RC5-64"; } + } + + public virtual int GetBlockSize() + { + return 16; + } + + /** + * initialise a RC5-64 cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param parameters the parameters required to set up the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public virtual void Init(bool forEncryption, ICipherParameters parameters) + { + if (!(parameters is RC5Parameters rc5Parameters)) + throw new ArgumentException("invalid parameter passed to RC564 init - " + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + + this.forEncryption = forEncryption; + + _noRounds = rc5Parameters.Rounds; + + SetKey(rc5Parameters.GetKey()); + } + + public virtual int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return forEncryption + ? EncryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)) + : DecryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); +#else + return forEncryption + ? EncryptBlock(input, inOff, output, outOff) + : DecryptBlock(input, inOff, output, outOff); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + return forEncryption + ? EncryptBlock(input, output) + : DecryptBlock(input, output); + } +#endif + + /** + * Re-key the cipher. + * + * @param key the key to be used + */ + private void SetKey(byte[] key) + { + // + // KEY EXPANSION: + // + // There are 3 phases to the key expansion. + // + // Phase 1: + // Copy the secret key K[0...b-1] into an array L[0..c-1] of + // c = ceil(b/u), where u = wordSize/8 in little-endian order. + // In other words, we fill up L using u consecutive key bytes + // of K. Any unfilled byte positions in L are zeroed. In the + // case that b = c = 0, set c = 1 and L[0] = 0. + // + long[] L = new long[(key.Length + 7) / 8]; + + for (int i = 0; i != key.Length; i++) + { + L[i / 8] += (long)(key[i] & 0xff) << (8 * (i % 8)); + } + + // + // Phase 2: + // Initialize S to a particular fixed pseudo-random bit pattern + // using an arithmetic progression modulo 2^wordsize determined + // by the magic numbers, Pw & Qw. + // + _S = new long[2*(_noRounds + 1)]; + + _S[0] = P64; + for (int i=1; i < _S.Length; i++) + { + _S[i] = (_S[i-1] + Q64); + } + + // + // Phase 3: + // Mix in the user's secret key in 3 passes over the arrays S & L. + // The max of the arrays sizes is used as the loop control + // + int iter; + + if (L.Length > _S.Length) + { + iter = 3 * L.Length; + } + else + { + iter = 3 * _S.Length; + } + + long A = 0, B = 0; + int ii = 0, jj = 0; + + for (int k = 0; k < iter; k++) + { + A = _S[ii] = Longs.RotateLeft(_S[ii] + A + B, 3); + B = L[jj] = Longs.RotateLeft(L[jj] + A + B, (int)(A + B)); + ii = (ii+1) % _S.Length; + jj = (jj+1) % L.Length; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int EncryptBlock(ReadOnlySpan input, Span output) + { + long A = (long)Pack.LE_To_UInt64(input) + _S[0]; + long B = (long)Pack.LE_To_UInt64(input[8..]) + _S[1]; + + for (int i = 1; i <= _noRounds; i++) + { + A = Longs.RotateLeft(A ^ B, (int)B) + _S[2*i]; + B = Longs.RotateLeft(B ^ A, (int)A) + _S[2*i+1]; + } + + Pack.UInt64_To_LE((ulong)A, output); + Pack.UInt64_To_LE((ulong)B, output[8..]); + + return 16; + } + + private int DecryptBlock(ReadOnlySpan input, Span output) + { + long A = (long)Pack.LE_To_UInt64(input); + long B = (long)Pack.LE_To_UInt64(input[8..]); + + for (int i = _noRounds; i >= 1; i--) + { + B = Longs.RotateRight(B - _S[2*i+1], (int)A) ^ A; + A = Longs.RotateRight(A - _S[2*i], (int)B) ^ B; + } + + Pack.UInt64_To_LE((ulong)(A - _S[0]), output); + Pack.UInt64_To_LE((ulong)(B - _S[1]), output[8..]); + + return 16; + } +#else + private int EncryptBlock(byte[] input, int inOff, byte[] outBytes, int outOff) + { + long A = (long)Pack.LE_To_UInt64(input, inOff) + _S[0]; + long B = (long)Pack.LE_To_UInt64(input, inOff + 8) + _S[1]; + + for (int i = 1; i <= _noRounds; i++) + { + A = Longs.RotateLeft(A ^ B, (int)B) + _S[2*i]; + B = Longs.RotateLeft(B ^ A, (int)A) + _S[2*i+1]; + } + + Pack.UInt64_To_LE((ulong)A, outBytes, outOff); + Pack.UInt64_To_LE((ulong)B, outBytes, outOff + 8); + + return 16; + } + + private int DecryptBlock(byte[] input, int inOff, byte[] outBytes, int outOff) + { + long A = (long)Pack.LE_To_UInt64(input, inOff); + long B = (long)Pack.LE_To_UInt64(input, inOff + 8); + + for (int i = _noRounds; i >= 1; i--) + { + B = Longs.RotateRight(B - _S[2*i+1], (int)A) ^ A; + A = Longs.RotateRight(A - _S[2*i], (int)B) ^ B; + } + + Pack.UInt64_To_LE((ulong)(A - _S[0]), outBytes, outOff); + Pack.UInt64_To_LE((ulong)(B - _S[1]), outBytes, outOff + 8); + + return 16; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC564Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC564Engine.cs.meta new file mode 100644 index 000000000..d106eb925 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC564Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e794bc4a420f67d47924b24a7d3e9fd0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC6Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC6Engine.cs new file mode 100644 index 000000000..d24c30f84 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC6Engine.cs @@ -0,0 +1,399 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * An RC6 engine. + */ + public class RC6Engine + : IBlockCipher + { + /* + * the number of rounds to perform + */ + private static readonly int _noRounds = 20; + + /* + * the expanded key array of size 2*(rounds + 1) + */ + private int [] _S; + + /* + * our "magic constants" for wordSize 32 + * + * Pw = Odd((e-2) * 2^wordsize) + * Qw = Odd((o-2) * 2^wordsize) + * + * where e is the base of natural logarithms (2.718281828...) + * and o is the golden ratio (1.61803398...) + */ + private static readonly int P32 = unchecked((int) 0xb7e15163); + private static readonly int Q32 = unchecked((int) 0x9e3779b9); + + private static readonly int LGW = 5; // log2(32) + + private bool forEncryption; + + /** + * Create an instance of the RC6 encryption algorithm + * and set some defaults + */ + public RC6Engine() + { + } + + public virtual string AlgorithmName + { + get { return "RC6"; } + } + + public virtual int GetBlockSize() + { + return 16; + } + + /** + * initialise a RC5-32 cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param parameters the parameters required to set up the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public virtual void Init(bool forEncryption, ICipherParameters parameters) + { + if (!(parameters is KeyParameter keyParameter)) + throw new ArgumentException("invalid parameter passed to RC6 init - " + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + + this.forEncryption = forEncryption; + + SetKey(keyParameter.GetKey()); + } + + public virtual int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (_S == null) + throw new InvalidOperationException("RC6 engine not initialised"); + + int blockSize = GetBlockSize(); + Check.DataLength(input, inOff, blockSize, "input buffer too short"); + Check.OutputLength(output, outOff, blockSize, "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return forEncryption + ? EncryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)) + : DecryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); +#else + return forEncryption + ? EncryptBlock(input, inOff, output, outOff) + : DecryptBlock(input, inOff, output, outOff); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + if (_S == null) + throw new InvalidOperationException("RC6 engine not initialised"); + + int blockSize = GetBlockSize(); + Check.DataLength(input, blockSize, "input buffer too short"); + Check.OutputLength(output, blockSize, "output buffer too short"); + + return forEncryption + ? EncryptBlock(input, output) + : DecryptBlock(input, output); + } +#endif + + /** + * Re-key the cipher. + * + * @param inKey the key to be used + */ + private void SetKey( + byte[] key) + { + // + // KEY EXPANSION: + // + // There are 3 phases to the key expansion. + // + // Phase 1: + // Copy the secret key K[0...b-1] into an array L[0..c-1] of + // c = ceil(b/u), where u = wordSize/8 in little-endian order. + // In other words, we fill up L using u consecutive key bytes + // of K. Any unfilled byte positions in L are zeroed. In the + // case that b = c = 0, set c = 1 and L[0] = 0. + // + // compute number of dwords + int c = (key.Length + 3) / 4; + if (c == 0) + { + c = 1; + } + int[] L = new int[(key.Length + 3) / 4]; + + // load all key bytes into array of key dwords + for (int i = key.Length - 1; i >= 0; i--) + { + L[i / 4] = (L[i / 4] << 8) + (key[i] & 0xff); + } + + // + // Phase 2: + // Key schedule is placed in a array of 2+2*ROUNDS+2 = 44 dwords. + // Initialize S to a particular fixed pseudo-random bit pattern + // using an arithmetic progression modulo 2^wordsize determined + // by the magic numbers, Pw & Qw. + // + _S = new int[2+2*_noRounds+2]; + + _S[0] = P32; + for (int i=1; i < _S.Length; i++) + { + _S[i] = (_S[i-1] + Q32); + } + + // + // Phase 3: + // Mix in the user's secret key in 3 passes over the arrays S & L. + // The max of the arrays sizes is used as the loop control + // + int iter; + + if (L.Length > _S.Length) + { + iter = 3 * L.Length; + } + else + { + iter = 3 * _S.Length; + } + + int A = 0; + int B = 0; + int ii = 0, jj = 0; + + for (int k = 0; k < iter; k++) + { + A = _S[ii] = Integers.RotateLeft(_S[ii] + A + B, 3); + B = L[jj] = Integers.RotateLeft( L[jj] + A + B, A + B); + ii = (ii+1) % _S.Length; + jj = (jj+1) % L.Length; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int EncryptBlock(ReadOnlySpan input, Span output) + { + // load A,B,C and D registers from in. + int A = (int)Pack.LE_To_UInt32(input); + int B = (int)Pack.LE_To_UInt32(input[4..]); + int C = (int)Pack.LE_To_UInt32(input[8..]); + int D = (int)Pack.LE_To_UInt32(input[12..]); + + // Do pseudo-round #0: pre-whitening of B and D + B += _S[0]; + D += _S[1]; + + // perform round #1,#2 ... #ROUNDS of encryption + for (int i = 1; i <= _noRounds; i++) + { + int t = 0, u = 0; + + t = B * (2 * B + 1); + t = Integers.RotateLeft(t, 5); + + u = D * (2 * D + 1); + u = Integers.RotateLeft(u, 5); + + A ^= t; + A = Integers.RotateLeft(A, u); + A += _S[2 * i]; + + C ^= u; + C = Integers.RotateLeft(C, t); + C += _S[2 * i + 1]; + + int temp = A; + A = B; + B = C; + C = D; + D = temp; + } + + // do pseudo-round #(ROUNDS+1) : post-whitening of A and C + A += _S[2 * _noRounds + 2]; + C += _S[2 * _noRounds + 3]; + + // store A, B, C and D registers to out + Pack.UInt32_To_LE((uint)A, output); + Pack.UInt32_To_LE((uint)B, output[4..]); + Pack.UInt32_To_LE((uint)C, output[8..]); + Pack.UInt32_To_LE((uint)D, output[12..]); + + return 16; + } + + private int DecryptBlock(ReadOnlySpan input, Span output) + { + // load A,B,C and D registers from out. + int A = (int)Pack.LE_To_UInt32(input); + int B = (int)Pack.LE_To_UInt32(input[4..]); + int C = (int)Pack.LE_To_UInt32(input[8..]); + int D = (int)Pack.LE_To_UInt32(input[12..]); + + // Undo pseudo-round #(ROUNDS+1) : post whitening of A and C + C -= _S[2 * _noRounds + 3]; + A -= _S[2 * _noRounds + 2]; + + // Undo round #ROUNDS, .., #2,#1 of encryption + for (int i = _noRounds; i >= 1; i--) + { + int t = 0, u = 0; + + int temp = D; + D = C; + C = B; + B = A; + A = temp; + + t = B * (2 * B + 1); + t = Integers.RotateLeft(t, LGW); + + u = D * (2 * D + 1); + u = Integers.RotateLeft(u, LGW); + + C -= _S[2 * i + 1]; + C = Integers.RotateRight(C, t); + C ^= u; + + A -= _S[2 * i]; + A = Integers.RotateRight(A, u); + A ^= t; + } + + // Undo pseudo-round #0: pre-whitening of B and D + D -= _S[1]; + B -= _S[0]; + + Pack.UInt32_To_LE((uint)A, output); + Pack.UInt32_To_LE((uint)B, output[4..]); + Pack.UInt32_To_LE((uint)C, output[8..]); + Pack.UInt32_To_LE((uint)D, output[12..]); + + return 16; + } +#else + private int EncryptBlock(byte[] input, int inOff, byte[] outBytes, int outOff) + { + // load A,B,C and D registers from in. + int A = (int)Pack.LE_To_UInt32(input, inOff); + int B = (int)Pack.LE_To_UInt32(input, inOff + 4); + int C = (int)Pack.LE_To_UInt32(input, inOff + 8); + int D = (int)Pack.LE_To_UInt32(input, inOff + 12); + + // Do pseudo-round #0: pre-whitening of B and D + B += _S[0]; + D += _S[1]; + + // perform round #1,#2 ... #ROUNDS of encryption + for (int i = 1; i <= _noRounds; i++) + { + int t = 0,u = 0; + + t = B*(2*B+1); + t = Integers.RotateLeft(t,5); + + u = D*(2*D+1); + u = Integers.RotateLeft(u,5); + + A ^= t; + A = Integers.RotateLeft(A,u); + A += _S[2*i]; + + C ^= u; + C = Integers.RotateLeft(C,t); + C += _S[2*i+1]; + + int temp = A; + A = B; + B = C; + C = D; + D = temp; + } + + // do pseudo-round #(ROUNDS+1) : post-whitening of A and C + A += _S[2*_noRounds+2]; + C += _S[2*_noRounds+3]; + + // store A, B, C and D registers to out + Pack.UInt32_To_LE((uint)A, outBytes, outOff); + Pack.UInt32_To_LE((uint)B, outBytes, outOff + 4); + Pack.UInt32_To_LE((uint)C, outBytes, outOff + 8); + Pack.UInt32_To_LE((uint)D, outBytes, outOff + 12); + + return 16; + } + + private int DecryptBlock(byte[] input, int inOff, byte[] outBytes, int outOff) + { + // load A,B,C and D registers from out. + int A = (int)Pack.LE_To_UInt32(input, inOff); + int B = (int)Pack.LE_To_UInt32(input, inOff + 4); + int C = (int)Pack.LE_To_UInt32(input, inOff + 8); + int D = (int)Pack.LE_To_UInt32(input, inOff + 12); + + // Undo pseudo-round #(ROUNDS+1) : post whitening of A and C + C -= _S[2*_noRounds+3]; + A -= _S[2*_noRounds+2]; + + // Undo round #ROUNDS, .., #2,#1 of encryption + for (int i = _noRounds; i >= 1; i--) + { + int t=0,u = 0; + + int temp = D; + D = C; + C = B; + B = A; + A = temp; + + t = B*(2*B+1); + t = Integers.RotateLeft(t, LGW); + + u = D*(2*D+1); + u = Integers.RotateLeft(u, LGW); + + C -= _S[2*i+1]; + C = Integers.RotateRight(C,t); + C ^= u; + + A -= _S[2*i]; + A = Integers.RotateRight(A,u); + A ^= t; + } + + // Undo pseudo-round #0: pre-whitening of B and D + D -= _S[1]; + B -= _S[0]; + + Pack.UInt32_To_LE((uint)A, outBytes, outOff); + Pack.UInt32_To_LE((uint)B, outBytes, outOff + 4); + Pack.UInt32_To_LE((uint)C, outBytes, outOff + 8); + Pack.UInt32_To_LE((uint)D, outBytes, outOff + 12); + + return 16; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC6Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC6Engine.cs.meta new file mode 100644 index 000000000..33490c076 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RC6Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b7585edcc7be3146a7550caa7c8678b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RFC3211WrapEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RFC3211WrapEngine.cs new file mode 100644 index 000000000..7e777ae07 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RFC3211WrapEngine.cs @@ -0,0 +1,179 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * an implementation of the RFC 3211 Key Wrap + * Specification. + */ + public class Rfc3211WrapEngine + : IWrapper + { + private CbcBlockCipher engine; + private ParametersWithIV param; + private bool forWrapping; + private SecureRandom rand; + + public Rfc3211WrapEngine( + IBlockCipher engine) + { + this.engine = new CbcBlockCipher(engine); + } + + public virtual void Init(bool forWrapping, ICipherParameters param) + { + this.forWrapping = forWrapping; + + if (param is ParametersWithRandom withRandom) + { + this.rand = withRandom.Random; + this.param = withRandom.Parameters as ParametersWithIV; + } + else + { + if (forWrapping) + { + rand = CryptoServicesRegistrar.GetSecureRandom(); + } + + this.param = param as ParametersWithIV; + } + + if (null == this.param) + throw new ArgumentException("RFC3211Wrap requires an IV", "param"); + } + + public virtual string AlgorithmName + { + get { return engine.UnderlyingCipher.AlgorithmName + "/RFC3211Wrap"; } + } + + public virtual byte[] Wrap( + byte[] inBytes, + int inOff, + int inLen) + { + if (!forWrapping) + throw new InvalidOperationException("not set for wrapping"); + if (inLen > 255 || inLen < 0) + throw new ArgumentException("input must be from 0 to 255 bytes", "inLen"); + + engine.Init(true, param); + + int blockSize = engine.GetBlockSize(); + byte[] cekBlock; + + if (inLen + 4 < blockSize * 2) + { + cekBlock = new byte[blockSize * 2]; + } + else + { + cekBlock = new byte[(inLen + 4) % blockSize == 0 ? inLen + 4 : ((inLen + 4) / blockSize + 1) * blockSize]; + } + + cekBlock[0] = (byte)inLen; + + Array.Copy(inBytes, inOff, cekBlock, 4, inLen); + + rand.NextBytes(cekBlock, inLen + 4, cekBlock.Length - inLen - 4); + + cekBlock[1] = (byte)~cekBlock[4]; + cekBlock[2] = (byte)~cekBlock[4 + 1]; + cekBlock[3] = (byte)~cekBlock[4 + 2]; + + for (int i = 0; i < cekBlock.Length; i += blockSize) + { + engine.ProcessBlock(cekBlock, i, cekBlock, i); + } + + for (int i = 0; i < cekBlock.Length; i += blockSize) + { + engine.ProcessBlock(cekBlock, i, cekBlock, i); + } + + return cekBlock; + } + + public virtual byte[] Unwrap( + byte[] inBytes, + int inOff, + int inLen) + { + if (forWrapping) + { + throw new InvalidOperationException("not set for unwrapping"); + } + + int blockSize = engine.GetBlockSize(); + + if (inLen < 2 * blockSize) + { + throw new InvalidCipherTextException("input too short"); + } + + byte[] cekBlock = new byte[inLen]; + byte[] iv = new byte[blockSize]; + + Array.Copy(inBytes, inOff, cekBlock, 0, inLen); + Array.Copy(inBytes, inOff, iv, 0, iv.Length); + + engine.Init(false, new ParametersWithIV(param.Parameters, iv)); + + for (int i = blockSize; i < cekBlock.Length; i += blockSize) + { + engine.ProcessBlock(cekBlock, i, cekBlock, i); + } + + Array.Copy(cekBlock, cekBlock.Length - iv.Length, iv, 0, iv.Length); + + engine.Init(false, new ParametersWithIV(param.Parameters, iv)); + + engine.ProcessBlock(cekBlock, 0, cekBlock, 0); + + engine.Init(false, param); + + for (int i = 0; i < cekBlock.Length; i += blockSize) + { + engine.ProcessBlock(cekBlock, i, cekBlock, i); + } + + bool invalidLength = (int)cekBlock[0] > (cekBlock.Length - 4); + + byte[] key; + if (invalidLength) + { + key = new byte[cekBlock.Length - 4]; + } + else + { + key = new byte[cekBlock[0]]; + } + + Array.Copy(cekBlock, 4, key, 0, key.Length); + + // Note: Using constant time comparison + int nonEqual = 0; + for (int i = 0; i != 3; i++) + { + byte check = (byte)~cekBlock[1 + i]; + nonEqual |= (check ^ cekBlock[4 + i]); + } + + Array.Clear(cekBlock, 0, cekBlock.Length); + + if (nonEqual != 0 | invalidLength) + throw new InvalidCipherTextException("wrapped key corrupted"); + + return key; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RFC3211WrapEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RFC3211WrapEngine.cs.meta new file mode 100644 index 000000000..c182dc047 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RFC3211WrapEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e6aba8788322b964490eefbb8c3d6208 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RFC3394WrapEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RFC3394WrapEngine.cs new file mode 100644 index 000000000..34a55448a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RFC3394WrapEngine.cs @@ -0,0 +1,182 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /// + /// An implementation of the AES Key Wrapper from the NIST Key Wrap + /// Specification as described in RFC 3394. + ///

+ /// For further details see: http://www.ietf.org/rfc/rfc3394.txt + /// and http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + /// + public class Rfc3394WrapEngine + : IWrapper + { + private readonly IBlockCipher engine; + + private KeyParameter param; + private bool forWrapping; + + private byte[] iv = + { + 0xa6, 0xa6, 0xa6, 0xa6, + 0xa6, 0xa6, 0xa6, 0xa6 + }; + + public Rfc3394WrapEngine( + IBlockCipher engine) + { + this.engine = engine; + } + + public virtual void Init( + bool forWrapping, + ICipherParameters parameters) + { + this.forWrapping = forWrapping; + + if (parameters is ParametersWithRandom) + { + parameters = ((ParametersWithRandom) parameters).Parameters; + } + + if (parameters is KeyParameter) + { + this.param = (KeyParameter) parameters; + } + else if (parameters is ParametersWithIV) + { + ParametersWithIV pIV = (ParametersWithIV) parameters; + byte[] iv = pIV.GetIV(); + + if (iv.Length != 8) + throw new ArgumentException("IV length not equal to 8", "parameters"); + + this.iv = iv; + this.param = (KeyParameter) pIV.Parameters; + } + else + { + // TODO Throw an exception for bad parameters? + } + } + + public virtual string AlgorithmName + { + get { return engine.AlgorithmName; } + } + + public virtual byte[] Wrap( + byte[] input, + int inOff, + int inLen) + { + if (!forWrapping) + { + throw new InvalidOperationException("not set for wrapping"); + } + + int n = inLen / 8; + + if ((n * 8) != inLen) + { + throw new DataLengthException("wrap data must be a multiple of 8 bytes"); + } + + byte[] block = new byte[inLen + iv.Length]; + byte[] buf = new byte[8 + iv.Length]; + + Array.Copy(iv, 0, block, 0, iv.Length); + Array.Copy(input, inOff, block, iv.Length, inLen); + + engine.Init(true, param); + + for (int j = 0; j != 6; j++) + { + for (int i = 1; i <= n; i++) + { + Array.Copy(block, 0, buf, 0, iv.Length); + Array.Copy(block, 8 * i, buf, iv.Length, 8); + engine.ProcessBlock(buf, 0, buf, 0); + + int t = n * j + i; + for (int k = 1; t != 0; k++) + { + byte v = (byte)t; + + buf[iv.Length - k] ^= v; + t = (int) ((uint)t >> 8); + } + + Array.Copy(buf, 0, block, 0, 8); + Array.Copy(buf, 8, block, 8 * i, 8); + } + } + + return block; + } + + public virtual byte[] Unwrap( + byte[] input, + int inOff, + int inLen) + { + if (forWrapping) + { + throw new InvalidOperationException("not set for unwrapping"); + } + + int n = inLen / 8; + + if ((n * 8) != inLen) + { + throw new InvalidCipherTextException("unwrap data must be a multiple of 8 bytes"); + } + + byte[] block = new byte[inLen - iv.Length]; + byte[] a = new byte[iv.Length]; + byte[] buf = new byte[8 + iv.Length]; + + Array.Copy(input, inOff, a, 0, iv.Length); + Array.Copy(input, inOff + iv.Length, block, 0, inLen - iv.Length); + + engine.Init(false, param); + + n = n - 1; + + for (int j = 5; j >= 0; j--) + { + for (int i = n; i >= 1; i--) + { + Array.Copy(a, 0, buf, 0, iv.Length); + Array.Copy(block, 8 * (i - 1), buf, iv.Length, 8); + + int t = n * j + i; + for (int k = 1; t != 0; k++) + { + byte v = (byte)t; + + buf[iv.Length - k] ^= v; + t = (int) ((uint)t >> 8); + } + + engine.ProcessBlock(buf, 0, buf, 0); + Array.Copy(buf, 0, a, 0, 8); + Array.Copy(buf, 8, block, 8 * (i - 1), 8); + } + } + + if (!Arrays.ConstantTimeAreEqual(a, iv)) + throw new InvalidCipherTextException("checksum failed"); + + return block; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RFC3394WrapEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RFC3394WrapEngine.cs.meta new file mode 100644 index 000000000..b6a42f0ae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RFC3394WrapEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7e321866e73515648bfd4569ca4b8573 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RSABlindedEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RSABlindedEngine.cs new file mode 100644 index 000000000..19a75e8be --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RSABlindedEngine.cs @@ -0,0 +1,155 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * this does your basic RSA algorithm with blinding + */ + public class RsaBlindedEngine + : IAsymmetricBlockCipher + { + private readonly IRsa core; + + private RsaKeyParameters key; + private SecureRandom random; + + public RsaBlindedEngine() + : this(new RsaCoreEngine()) + { + } + + public RsaBlindedEngine(IRsa rsa) + { + this.core = rsa; + } + + public virtual string AlgorithmName + { + get { return "RSA"; } + } + + /** + * initialise the RSA engine. + * + * @param forEncryption true if we are encrypting, false otherwise. + * @param param the necessary RSA key parameters. + */ + public virtual void Init(bool forEncryption, ICipherParameters param) + { + core.Init(forEncryption, param); + + if (param is ParametersWithRandom rParam) + { + this.key = (RsaKeyParameters)rParam.Parameters; + + if (key is RsaPrivateCrtKeyParameters) + { + this.random = rParam.Random; + } + else + { + this.random = null; + } + } + else + { + this.key = (RsaKeyParameters)param; + + if (key is RsaPrivateCrtKeyParameters) + { + this.random = CryptoServicesRegistrar.GetSecureRandom(); + } + else + { + this.random = null; + } + } + } + + /** + * Return the maximum size for an input block to this engine. + * For RSA this is always one byte less than the key size on + * encryption, and the same length as the key size on decryption. + * + * @return maximum size for an input block. + */ + public virtual int GetInputBlockSize() + { + return core.GetInputBlockSize(); + } + + /** + * Return the maximum size for an output block to this engine. + * For RSA this is always one byte less than the key size on + * decryption, and the same length as the key size on encryption. + * + * @return maximum size for an output block. + */ + public virtual int GetOutputBlockSize() + { + return core.GetOutputBlockSize(); + } + + /** + * Process a single block using the basic RSA algorithm. + * + * @param inBuf the input array. + * @param inOff the offset into the input buffer where the data starts. + * @param inLen the length of the data to be processed. + * @return the result of the RSA process. + * @exception DataLengthException the input block is too large. + */ + public virtual byte[] ProcessBlock( + byte[] inBuf, + int inOff, + int inLen) + { + if (key == null) + throw new InvalidOperationException("RSA engine not initialised"); + + BigInteger input = core.ConvertInput(inBuf, inOff, inLen); + + BigInteger result; + if (key is RsaPrivateCrtKeyParameters) + { + RsaPrivateCrtKeyParameters k = (RsaPrivateCrtKeyParameters)key; + BigInteger e = k.PublicExponent; + if (e != null) // can't do blinding without a public exponent + { + BigInteger m = k.Modulus; + BigInteger r = BigIntegers.CreateRandomInRange( + BigInteger.One, m.Subtract(BigInteger.One), random); + + BigInteger blindedInput = r.ModPow(e, m).Multiply(input).Mod(m); + BigInteger blindedResult = core.ProcessBlock(blindedInput); + + BigInteger rInv = BigIntegers.ModOddInverse(m, r); + result = blindedResult.Multiply(rInv).Mod(m); + + // defence against Arjen Lenstra�s CRT attack + if (!input.Equals(result.ModPow(e, m))) + throw new InvalidOperationException("RSA engine faulty decryption/signing detected"); + } + else + { + result = core.ProcessBlock(input); + } + } + else + { + result = core.ProcessBlock(input); + } + + return core.ConvertOutput(result); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RSABlindedEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RSABlindedEngine.cs.meta new file mode 100644 index 000000000..3c7983a7b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RSABlindedEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 85f59d14d3e55564aa1645a62950ed19 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RSABlindingEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RSABlindingEngine.cs new file mode 100644 index 000000000..8ee713ba7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RSABlindingEngine.cs @@ -0,0 +1,154 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * This does your basic RSA Chaum's blinding and unblinding as outlined in + * "Handbook of Applied Cryptography", page 475. You need to use this if you are + * trying to get another party to generate signatures without them being aware + * of the message they are signing. + */ + public class RsaBlindingEngine + : IAsymmetricBlockCipher + { + private readonly IRsa core; + + private RsaKeyParameters key; + private BigInteger blindingFactor; + + private bool forEncryption; + + public RsaBlindingEngine() + : this(new RsaCoreEngine()) + { + } + + public RsaBlindingEngine(IRsa rsa) + { + this.core = rsa; + } + + public virtual string AlgorithmName + { + get { return "RSA"; } + } + + /** + * Initialise the blinding engine. + * + * @param forEncryption true if we are encrypting (blinding), false otherwise. + * @param param the necessary RSA key parameters. + */ + public virtual void Init( + bool forEncryption, + ICipherParameters param) + { + RsaBlindingParameters p; + + if (param is ParametersWithRandom) + { + ParametersWithRandom rParam = (ParametersWithRandom)param; + + p = (RsaBlindingParameters)rParam.Parameters; + } + else + { + p = (RsaBlindingParameters)param; + } + + core.Init(forEncryption, p.PublicKey); + + this.forEncryption = forEncryption; + this.key = p.PublicKey; + this.blindingFactor = p.BlindingFactor; + } + + /** + * Return the maximum size for an input block to this engine. + * For RSA this is always one byte less than the key size on + * encryption, and the same length as the key size on decryption. + * + * @return maximum size for an input block. + */ + public virtual int GetInputBlockSize() + { + return core.GetInputBlockSize(); + } + + /** + * Return the maximum size for an output block to this engine. + * For RSA this is always one byte less than the key size on + * decryption, and the same length as the key size on encryption. + * + * @return maximum size for an output block. + */ + public virtual int GetOutputBlockSize() + { + return core.GetOutputBlockSize(); + } + + /** + * Process a single block using the RSA blinding algorithm. + * + * @param in the input array. + * @param inOff the offset into the input buffer where the data starts. + * @param inLen the length of the data to be processed. + * @return the result of the RSA process. + * @throws DataLengthException the input block is too large. + */ + public virtual byte[] ProcessBlock( + byte[] inBuf, + int inOff, + int inLen) + { + BigInteger msg = core.ConvertInput(inBuf, inOff, inLen); + + if (forEncryption) + { + msg = BlindMessage(msg); + } + else + { + msg = UnblindMessage(msg); + } + + return core.ConvertOutput(msg); + } + + /* + * Blind message with the blind factor. + */ + private BigInteger BlindMessage( + BigInteger msg) + { + BigInteger blindMsg = blindingFactor; + blindMsg = msg.Multiply(blindMsg.ModPow(key.Exponent, key.Modulus)); + blindMsg = blindMsg.Mod(key.Modulus); + + return blindMsg; + } + + /* + * Unblind the message blinded with the blind factor. + */ + private BigInteger UnblindMessage( + BigInteger blindedMsg) + { + BigInteger m = key.Modulus; + BigInteger msg = blindedMsg; + BigInteger blindFactorInverse = BigIntegers.ModOddInverse(m, blindingFactor); + msg = msg.Multiply(blindFactorInverse); + msg = msg.Mod(m); + + return msg; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RSABlindingEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RSABlindingEngine.cs.meta new file mode 100644 index 000000000..316a751c1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RSABlindingEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a223950200657314d88493a524185ba2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RSACoreEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RSACoreEngine.cs new file mode 100644 index 000000000..b1c702428 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RSACoreEngine.cs @@ -0,0 +1,163 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * this does your basic RSA algorithm. + */ + public class RsaCoreEngine + : IRsa + { + private RsaKeyParameters key; + private bool forEncryption; + private int bitSize; + + private void CheckInitialised() + { + if (key == null) + throw new InvalidOperationException("RSA engine not initialised"); + } + + /** + * initialise the RSA engine. + * + * @param forEncryption true if we are encrypting, false otherwise. + * @param param the necessary RSA key parameters. + */ + public virtual void Init( + bool forEncryption, + ICipherParameters parameters) + { + if (parameters is ParametersWithRandom) + { + parameters = ((ParametersWithRandom) parameters).Parameters; + } + + if (!(parameters is RsaKeyParameters)) + throw new InvalidKeyException("Not an RSA key"); + + this.key = (RsaKeyParameters) parameters; + this.forEncryption = forEncryption; + this.bitSize = key.Modulus.BitLength; + } + + /** + * Return the maximum size for an input block to this engine. + * For RSA this is always one byte less than the key size on + * encryption, and the same length as the key size on decryption. + * + * @return maximum size for an input block. + */ + public virtual int GetInputBlockSize() + { + CheckInitialised(); + + if (forEncryption) + { + return (bitSize - 1) / 8; + } + + return (bitSize + 7) / 8; + } + + /** + * Return the maximum size for an output block to this engine. + * For RSA this is always one byte less than the key size on + * decryption, and the same length as the key size on encryption. + * + * @return maximum size for an output block. + */ + public virtual int GetOutputBlockSize() + { + CheckInitialised(); + + if (forEncryption) + { + return (bitSize + 7) / 8; + } + + return (bitSize - 1) / 8; + } + + public virtual BigInteger ConvertInput( + byte[] inBuf, + int inOff, + int inLen) + { + CheckInitialised(); + + int maxLength = (bitSize + 7) / 8; + + if (inLen > maxLength) + throw new DataLengthException("input too large for RSA cipher."); + + BigInteger input = new BigInteger(1, inBuf, inOff, inLen); + + if (input.CompareTo(key.Modulus) >= 0) + throw new DataLengthException("input too large for RSA cipher."); + + return input; + } + + public virtual byte[] ConvertOutput(BigInteger result) + { + CheckInitialised(); + + return forEncryption + ? BigIntegers.AsUnsignedByteArray(GetOutputBlockSize(), result) + : BigIntegers.AsUnsignedByteArray(result); + } + + public virtual BigInteger ProcessBlock( + BigInteger input) + { + CheckInitialised(); + + if (key is RsaPrivateCrtKeyParameters) + { + // + // we have the extra factors, use the Chinese Remainder Theorem - the author + // wishes to express his thanks to Dirk Bonekaemper at rtsffm.com for + // advice regarding the expression of this. + // + RsaPrivateCrtKeyParameters crtKey = (RsaPrivateCrtKeyParameters)key; + + BigInteger p = crtKey.P; + BigInteger q = crtKey.Q; + BigInteger dP = crtKey.DP; + BigInteger dQ = crtKey.DQ; + BigInteger qInv = crtKey.QInv; + + BigInteger mP, mQ, h, m; + + // mP = ((input Mod p) ^ dP)) Mod p + mP = (input.Remainder(p)).ModPow(dP, p); + + // mQ = ((input Mod q) ^ dQ)) Mod q + mQ = (input.Remainder(q)).ModPow(dQ, q); + + // h = qInv * (mP - mQ) Mod p + h = mP.Subtract(mQ); + h = h.Multiply(qInv); + h = h.Mod(p); // Mod (in Java) returns the positive residual + + // m = h * q + mQ + m = h.Multiply(q); + m = m.Add(mQ); + + return m; + } + + return input.ModPow(key.Exponent, key.Modulus); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RSACoreEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RSACoreEngine.cs.meta new file mode 100644 index 000000000..94af5eb80 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RSACoreEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5746cae08e3e594fb68d786851c04ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RijndaelEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RijndaelEngine.cs new file mode 100644 index 000000000..9d303e4da --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RijndaelEngine.cs @@ -0,0 +1,795 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +#if UNITY_WSA && !UNITY_EDITOR && !ENABLE_IL2CPP +using System.TypeFix; +#endif +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * an implementation of Rijndael, based on the documentation and reference implementation + * by Paulo Barreto, Vincent Rijmen, for v2.0 August '99. + *

+ * Note: this implementation is based on information prior to readonly NIST publication. + *

+ */ + public class RijndaelEngine + : IBlockCipher + { + private static readonly int MAXROUNDS = 14; + + private static readonly int MAXKC = (256/4); + + private static readonly byte[] Logtable = + { + 0, 0, 25, 1, 50, 2, 26, 198, + 75, 199, 27, 104, 51, 238, 223, 3, + 100, 4, 224, 14, 52, 141, 129, 239, + 76, 113, 8, 200, 248, 105, 28, 193, + 125, 194, 29, 181, 249, 185, 39, 106, + 77, 228, 166, 114, 154, 201, 9, 120, + 101, 47, 138, 5, 33, 15, 225, 36, + 18, 240, 130, 69, 53, 147, 218, 142, + 150, 143, 219, 189, 54, 208, 206, 148, + 19, 92, 210, 241, 64, 70, 131, 56, + 102, 221, 253, 48, 191, 6, 139, 98, + 179, 37, 226, 152, 34, 136, 145, 16, + 126, 110, 72, 195, 163, 182, 30, 66, + 58, 107, 40, 84, 250, 133, 61, 186, + 43, 121, 10, 21, 155, 159, 94, 202, + 78, 212, 172, 229, 243, 115, 167, 87, + 175, 88, 168, 80, 244, 234, 214, 116, + 79, 174, 233, 213, 231, 230, 173, 232, + 44, 215, 117, 122, 235, 22, 11, 245, + 89, 203, 95, 176, 156, 169, 81, 160, + 127, 12, 246, 111, 23, 196, 73, 236, + 216, 67, 31, 45, 164, 118, 123, 183, + 204, 187, 62, 90, 251, 96, 177, 134, + 59, 82, 161, 108, 170, 85, 41, 157, + 151, 178, 135, 144, 97, 190, 220, 252, + 188, 149, 207, 205, 55, 63, 91, 209, + 83, 57, 132, 60, 65, 162, 109, 71, + 20, 42, 158, 93, 86, 242, 211, 171, + 68, 17, 146, 217, 35, 32, 46, 137, + 180, 124, 184, 38, 119, 153, 227, 165, + 103, 74, 237, 222, 197, 49, 254, 24, + 13, 99, 140, 128, 192, 247, 112, 7 + }; + + private static readonly byte[] Alogtable = + { + 0, 3, 5, 15, 17, 51, 85, 255, 26, 46, 114, 150, 161, 248, 19, 53, + 95, 225, 56, 72, 216, 115, 149, 164, 247, 2, 6, 10, 30, 34, 102, 170, + 229, 52, 92, 228, 55, 89, 235, 38, 106, 190, 217, 112, 144, 171, 230, 49, + 83, 245, 4, 12, 20, 60, 68, 204, 79, 209, 104, 184, 211, 110, 178, 205, + 76, 212, 103, 169, 224, 59, 77, 215, 98, 166, 241, 8, 24, 40, 120, 136, + 131, 158, 185, 208, 107, 189, 220, 127, 129, 152, 179, 206, 73, 219, 118, 154, + 181, 196, 87, 249, 16, 48, 80, 240, 11, 29, 39, 105, 187, 214, 97, 163, + 254, 25, 43, 125, 135, 146, 173, 236, 47, 113, 147, 174, 233, 32, 96, 160, + 251, 22, 58, 78, 210, 109, 183, 194, 93, 231, 50, 86, 250, 21, 63, 65, + 195, 94, 226, 61, 71, 201, 64, 192, 91, 237, 44, 116, 156, 191, 218, 117, + 159, 186, 213, 100, 172, 239, 42, 126, 130, 157, 188, 223, 122, 142, 137, 128, + 155, 182, 193, 88, 232, 35, 101, 175, 234, 37, 111, 177, 200, 67, 197, 84, + 252, 31, 33, 99, 165, 244, 7, 9, 27, 45, 119, 153, 176, 203, 70, 202, + 69, 207, 74, 222, 121, 139, 134, 145, 168, 227, 62, 66, 198, 81, 243, 14, + 18, 54, 90, 238, 41, 123, 141, 140, 143, 138, 133, 148, 167, 242, 13, 23, + 57, 75, 221, 124, 132, 151, 162, 253, 28, 36, 108, 180, 199, 82, 246, 1, + 3, 5, 15, 17, 51, 85, 255, 26, 46, 114, 150, 161, 248, 19, 53, + 95, 225, 56, 72, 216, 115, 149, 164, 247, 2, 6, 10, 30, 34, 102, 170, + 229, 52, 92, 228, 55, 89, 235, 38, 106, 190, 217, 112, 144, 171, 230, 49, + 83, 245, 4, 12, 20, 60, 68, 204, 79, 209, 104, 184, 211, 110, 178, 205, + 76, 212, 103, 169, 224, 59, 77, 215, 98, 166, 241, 8, 24, 40, 120, 136, + 131, 158, 185, 208, 107, 189, 220, 127, 129, 152, 179, 206, 73, 219, 118, 154, + 181, 196, 87, 249, 16, 48, 80, 240, 11, 29, 39, 105, 187, 214, 97, 163, + 254, 25, 43, 125, 135, 146, 173, 236, 47, 113, 147, 174, 233, 32, 96, 160, + 251, 22, 58, 78, 210, 109, 183, 194, 93, 231, 50, 86, 250, 21, 63, 65, + 195, 94, 226, 61, 71, 201, 64, 192, 91, 237, 44, 116, 156, 191, 218, 117, + 159, 186, 213, 100, 172, 239, 42, 126, 130, 157, 188, 223, 122, 142, 137, 128, + 155, 182, 193, 88, 232, 35, 101, 175, 234, 37, 111, 177, 200, 67, 197, 84, + 252, 31, 33, 99, 165, 244, 7, 9, 27, 45, 119, 153, 176, 203, 70, 202, + 69, 207, 74, 222, 121, 139, 134, 145, 168, 227, 62, 66, 198, 81, 243, 14, + 18, 54, 90, 238, 41, 123, 141, 140, 143, 138, 133, 148, 167, 242, 13, 23, + 57, 75, 221, 124, 132, 151, 162, 253, 28, 36, 108, 180, 199, 82, 246, 1, + }; + + private static readonly byte[] S = + { + 99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, + 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192, + 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21, + 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117, + 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, + 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207, + 208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, + 81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210, + 205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115, + 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, + 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, + 231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, + 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, + 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, + 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, + 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22, + }; + + private static readonly byte[] Si = + { + 82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251, + 124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203, + 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78, + 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37, + 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146, + 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132, + 144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6, + 208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107, + 58, 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115, + 150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110, + 71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27, + 252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244, + 31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, + 96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239, + 160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97, + 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125, + }; + + private static readonly byte[] rcon = + { + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, + 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 + }; + + static readonly byte[][] shifts0 = new byte [][] + { + new byte[]{ 0, 8, 16, 24 }, + new byte[]{ 0, 8, 16, 24 }, + new byte[]{ 0, 8, 16, 24 }, + new byte[]{ 0, 8, 16, 32 }, + new byte[]{ 0, 8, 24, 32 } + }; + + static readonly byte[][] shifts1 = + { + new byte[]{ 0, 24, 16, 8 }, + new byte[]{ 0, 32, 24, 16 }, + new byte[]{ 0, 40, 32, 24 }, + new byte[]{ 0, 48, 40, 24 }, + new byte[]{ 0, 56, 40, 32 } + }; + + /** + * multiply two elements of GF(2^m) + * needed for MixColumn and InvMixColumn + */ + private byte Mul0x2( + int b) + { + if (b != 0) + { + return Alogtable[25 + (Logtable[b] & 0xff)]; + } + else + { + return 0; + } + } + + private byte Mul0x3( + int b) + { + if (b != 0) + { + return Alogtable[1 + (Logtable[b] & 0xff)]; + } + else + { + return 0; + } + } + + private byte Mul0x9( + int b) + { + if (b >= 0) + { + return Alogtable[199 + b]; + } + else + { + return 0; + } + } + + private byte Mul0xb( + int b) + { + if (b >= 0) + { + return Alogtable[104 + b]; + } + else + { + return 0; + } + } + + private byte Mul0xd( + int b) + { + if (b >= 0) + { + return Alogtable[238 + b]; + } + else + { + return 0; + } + } + + private byte Mul0xe( + int b) + { + if (b >= 0) + { + return Alogtable[223 + b]; + } + else + { + return 0; + } + } + + /** + * xor corresponding text input and round key input bytes + */ + private void KeyAddition( + long[] rk) + { + A0 ^= rk[0]; + A1 ^= rk[1]; + A2 ^= rk[2]; + A3 ^= rk[3]; + } + + private long Shift( + long r, + int shift) + { + //return (((long)((ulong) r >> shift) | (r << (BC - shift)))) & BC_MASK; + + ulong temp = (ulong) r >> shift; + + // NB: This corrects for Mono Bug #79087 (fixed in 1.1.17) + if (shift > 31) + { + temp &= 0xFFFFFFFFUL; + } + + return ((long) temp | (r << (BC - shift))) & BC_MASK; + } + + /** + * Row 0 remains unchanged + * The other three rows are shifted a variable amount + */ + private void ShiftRow( + byte[] shiftsSC) + { + A1 = Shift(A1, shiftsSC[1]); + A2 = Shift(A2, shiftsSC[2]); + A3 = Shift(A3, shiftsSC[3]); + } + + private long ApplyS( + long r, + byte[] box) + { + long res = 0; + + for (int j = 0; j < BC; j += 8) + { + res |= (long)(box[(int)((r >> j) & 0xff)] & 0xff) << j; + } + + return res; + } + + /** + * Replace every byte of the input by the byte at that place + * in the nonlinear S-box + */ + private void Substitution( + byte[] box) + { + A0 = ApplyS(A0, box); + A1 = ApplyS(A1, box); + A2 = ApplyS(A2, box); + A3 = ApplyS(A3, box); + } + + /** + * Mix the bytes of every column in a linear way + */ + private void MixColumn() + { + long r0, r1, r2, r3; + + r0 = r1 = r2 = r3 = 0; + + for (int j = 0; j < BC; j += 8) + { + int a0 = (int)((A0 >> j) & 0xff); + int a1 = (int)((A1 >> j) & 0xff); + int a2 = (int)((A2 >> j) & 0xff); + int a3 = (int)((A3 >> j) & 0xff); + + r0 |= (long)((Mul0x2(a0) ^ Mul0x3(a1) ^ a2 ^ a3) & 0xff) << j; + + r1 |= (long)((Mul0x2(a1) ^ Mul0x3(a2) ^ a3 ^ a0) & 0xff) << j; + + r2 |= (long)((Mul0x2(a2) ^ Mul0x3(a3) ^ a0 ^ a1) & 0xff) << j; + + r3 |= (long)((Mul0x2(a3) ^ Mul0x3(a0) ^ a1 ^ a2) & 0xff) << j; + } + + A0 = r0; + A1 = r1; + A2 = r2; + A3 = r3; + } + + /** + * Mix the bytes of every column in a linear way + * This is the opposite operation of Mixcolumn + */ + private void InvMixColumn() + { + long r0, r1, r2, r3; + + r0 = r1 = r2 = r3 = 0; + for (int j = 0; j < BC; j += 8) + { + int a0 = (int)((A0 >> j) & 0xff); + int a1 = (int)((A1 >> j) & 0xff); + int a2 = (int)((A2 >> j) & 0xff); + int a3 = (int)((A3 >> j) & 0xff); + + // + // pre-lookup the log table + // + a0 = (a0 != 0) ? (Logtable[a0 & 0xff] & 0xff) : -1; + a1 = (a1 != 0) ? (Logtable[a1 & 0xff] & 0xff) : -1; + a2 = (a2 != 0) ? (Logtable[a2 & 0xff] & 0xff) : -1; + a3 = (a3 != 0) ? (Logtable[a3 & 0xff] & 0xff) : -1; + + r0 |= (long)((Mul0xe(a0) ^ Mul0xb(a1) ^ Mul0xd(a2) ^ Mul0x9(a3)) & 0xff) << j; + + r1 |= (long)((Mul0xe(a1) ^ Mul0xb(a2) ^ Mul0xd(a3) ^ Mul0x9(a0)) & 0xff) << j; + + r2 |= (long)((Mul0xe(a2) ^ Mul0xb(a3) ^ Mul0xd(a0) ^ Mul0x9(a1)) & 0xff) << j; + + r3 |= (long)((Mul0xe(a3) ^ Mul0xb(a0) ^ Mul0xd(a1) ^ Mul0x9(a2)) & 0xff) << j; + } + + A0 = r0; + A1 = r1; + A2 = r2; + A3 = r3; + } + + /** + * Calculate the necessary round keys + * The number of calculations depends on keyBits and blockBits + */ + private long[][] GenerateWorkingKey( + byte[] key) + { + int KC; + int t, rconpointer = 0; + int keyBits = key.Length * 8; + byte[,] tk = new byte[4,MAXKC]; + //long[,] W = new long[MAXROUNDS+1,4]; + long[][] W = new long[MAXROUNDS+1][]; + + for (int i = 0; i < MAXROUNDS+1; i++) W[i] = new long[4]; + + switch (keyBits) + { + case 128: + KC = 4; + break; + case 160: + KC = 5; + break; + case 192: + KC = 6; + break; + case 224: + KC = 7; + break; + case 256: + KC = 8; + break; + default : + throw new ArgumentException("Key length not 128/160/192/224/256 bits."); + } + + if (keyBits >= blockBits) + { + ROUNDS = KC + 6; + } + else + { + ROUNDS = (BC / 8) + 6; + } + + // + // copy the key into the processing area + // + int index = 0; + + for (int i = 0; i < key.Length; i++) + { + tk[i % 4,i / 4] = key[index++]; + } + + t = 0; + + // + // copy values into round key array + // + for (int j = 0; (j < KC) && (t < (ROUNDS+1)*(BC / 8)); j++, t++) + { + for (int i = 0; i < 4; i++) + { + W[t / (BC / 8)][i] |= (long)(tk[i,j] & 0xff) << ((t * 8) % BC); + } + } + + // + // while not enough round key material calculated + // calculate new values + // + while (t < (ROUNDS+1)*(BC/8)) + { + for (int i = 0; i < 4; i++) + { + tk[i,0] ^= S[tk[(i+1)%4,KC-1] & 0xff]; + } + tk[0,0] ^= (byte) rcon[rconpointer++]; + + if (KC <= 6) + { + for (int j = 1; j < KC; j++) + { + for (int i = 0; i < 4; i++) + { + tk[i,j] ^= tk[i,j-1]; + } + } + } + else + { + for (int j = 1; j < 4; j++) + { + for (int i = 0; i < 4; i++) + { + tk[i,j] ^= tk[i,j-1]; + } + } + for (int i = 0; i < 4; i++) + { + tk[i,4] ^= S[tk[i,3] & 0xff]; + } + for (int j = 5; j < KC; j++) + { + for (int i = 0; i < 4; i++) + { + tk[i,j] ^= tk[i,j-1]; + } + } + } + + // + // copy values into round key array + // + for (int j = 0; (j < KC) && (t < (ROUNDS+1)*(BC/8)); j++, t++) + { + for (int i = 0; i < 4; i++) + { + W[t / (BC/8)][i] |= (long)(tk[i,j] & 0xff) << ((t * 8) % (BC)); + } + } + } + return W; + } + + private int BC; + private long BC_MASK; + private int ROUNDS; + private int blockBits; + private long[][] workingKey; + private long A0, A1, A2, A3; + private bool forEncryption; + private byte[] shifts0SC; + private byte[] shifts1SC; + + /** + * default constructor - 128 bit block size. + */ + public RijndaelEngine() : this(128) {} + + /** + * basic constructor - set the cipher up for a given blocksize + * + * @param blocksize the blocksize in bits, must be 128, 192, or 256. + */ + public RijndaelEngine( + int blockBits) + { + switch (blockBits) + { + case 128: + BC = 32; + BC_MASK = 0xffffffffL; + shifts0SC = shifts0[0]; + shifts1SC = shifts1[0]; + break; + case 160: + BC = 40; + BC_MASK = 0xffffffffffL; + shifts0SC = shifts0[1]; + shifts1SC = shifts1[1]; + break; + case 192: + BC = 48; + BC_MASK = 0xffffffffffffL; + shifts0SC = shifts0[2]; + shifts1SC = shifts1[2]; + break; + case 224: + BC = 56; + BC_MASK = 0xffffffffffffffL; + shifts0SC = shifts0[3]; + shifts1SC = shifts1[3]; + break; + case 256: + BC = 64; + BC_MASK = unchecked( (long)0xffffffffffffffffL); + shifts0SC = shifts0[4]; + shifts1SC = shifts1[4]; + break; + default: + throw new ArgumentException("unknown blocksize to Rijndael"); + } + + this.blockBits = blockBits; + } + + /** + * initialise a Rijndael cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param parameters the parameters required to set up the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public virtual void Init( + bool forEncryption, + ICipherParameters parameters) + { + if (typeof(KeyParameter).IsInstanceOfType(parameters)) + { + workingKey = GenerateWorkingKey(((KeyParameter)parameters).GetKey()); + this.forEncryption = forEncryption; + return; + } + + throw new ArgumentException("invalid parameter passed to Rijndael init - " + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + } + + public virtual string AlgorithmName + { + get { return "Rijndael"; } + } + + public virtual int GetBlockSize() + { + return BC / 2; + } + + public virtual int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (workingKey == null) + throw new InvalidOperationException("Rijndael engine not initialised"); + + Check.DataLength(input, inOff, (BC / 2), "input buffer too short"); + Check.OutputLength(output, outOff, (BC / 2), "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + UnPackBlock(input.AsSpan(inOff)); +#else + UnPackBlock(input, inOff); +#endif + + if (forEncryption) + { + EncryptBlock(workingKey); + } + else + { + DecryptBlock(workingKey); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + PackBlock(output.AsSpan(outOff)); +#else + PackBlock(output, outOff); +#endif + + return BC / 2; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + if (workingKey == null) + throw new InvalidOperationException("Rijndael engine not initialised"); + + Check.DataLength(input, (BC / 2), "input buffer too short"); + Check.OutputLength(output, (BC / 2), "output buffer too short"); + + UnPackBlock(input); + + if (forEncryption) + { + EncryptBlock(workingKey); + } + else + { + DecryptBlock(workingKey); + } + + PackBlock(output); + + return BC / 2; + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void UnPackBlock(ReadOnlySpan input) + { + int index = 0; + + A0 = (long)(input[index++] & 0xff); + A1 = (long)(input[index++] & 0xff); + A2 = (long)(input[index++] & 0xff); + A3 = (long)(input[index++] & 0xff); + + for (int j = 8; j != BC; j += 8) + { + A0 |= (long)(input[index++] & 0xff) << j; + A1 |= (long)(input[index++] & 0xff) << j; + A2 |= (long)(input[index++] & 0xff) << j; + A3 |= (long)(input[index++] & 0xff) << j; + } + } + + private void PackBlock(Span output) + { + int index = 0; + + for (int j = 0; j != BC; j += 8) + { + output[index++] = (byte)(A0 >> j); + output[index++] = (byte)(A1 >> j); + output[index++] = (byte)(A2 >> j); + output[index++] = (byte)(A3 >> j); + } + } +#else + private void UnPackBlock(byte[] bytes, int off) + { + int index = off; + + A0 = (long)(bytes[index++] & 0xff); + A1 = (long)(bytes[index++] & 0xff); + A2 = (long)(bytes[index++] & 0xff); + A3 = (long)(bytes[index++] & 0xff); + + for (int j = 8; j != BC; j += 8) + { + A0 |= (long)(bytes[index++] & 0xff) << j; + A1 |= (long)(bytes[index++] & 0xff) << j; + A2 |= (long)(bytes[index++] & 0xff) << j; + A3 |= (long)(bytes[index++] & 0xff) << j; + } + } + + private void PackBlock(byte[] bytes, int off) + { + int index = off; + + for (int j = 0; j != BC; j += 8) + { + bytes[index++] = (byte)(A0 >> j); + bytes[index++] = (byte)(A1 >> j); + bytes[index++] = (byte)(A2 >> j); + bytes[index++] = (byte)(A3 >> j); + } + } +#endif + + private void EncryptBlock( + long[][] rk) + { + int r; + + // + // begin with a key addition + // + KeyAddition(rk[0]); + + // + // ROUNDS-1 ordinary rounds + // + for (r = 1; r < ROUNDS; r++) + { + Substitution(S); + ShiftRow(shifts0SC); + MixColumn(); + KeyAddition(rk[r]); + } + + // + // Last round is special: there is no MixColumn + // + Substitution(S); + ShiftRow(shifts0SC); + KeyAddition(rk[ROUNDS]); + } + + private void DecryptBlock( + long[][] rk) + { + int r; + + // To decrypt: apply the inverse operations of the encrypt routine, + // in opposite order + // + // (KeyAddition is an involution: it 's equal to its inverse) + // (the inverse of Substitution with table S is Substitution with the inverse table of S) + // (the inverse of Shiftrow is Shiftrow over a suitable distance) + // + + // First the special round: + // without InvMixColumn + // with extra KeyAddition + // + KeyAddition(rk[ROUNDS]); + Substitution(Si); + ShiftRow(shifts1SC); + + // + // ROUNDS-1 ordinary rounds + // + for (r = ROUNDS-1; r > 0; r--) + { + KeyAddition(rk[r]); + InvMixColumn(); + Substitution(Si); + ShiftRow(shifts1SC); + } + + // + // End with the extra key addition + // + KeyAddition(rk[0]); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RijndaelEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RijndaelEngine.cs.meta new file mode 100644 index 000000000..671fa6fea --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RijndaelEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a49117f9f15a0794da51511f5e07a5df +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RsaEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RsaEngine.cs new file mode 100644 index 000000000..fcfd221a0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RsaEngine.cs @@ -0,0 +1,90 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * this does your basic RSA algorithm. + */ + public class RsaEngine + : IAsymmetricBlockCipher + { + private readonly IRsa core; + + public RsaEngine() + : this(new RsaCoreEngine()) + { + } + + public RsaEngine(IRsa rsa) + { + this.core = rsa; + } + + public virtual string AlgorithmName + { + get { return "RSA"; } + } + + /** + * initialise the RSA engine. + * + * @param forEncryption true if we are encrypting, false otherwise. + * @param param the necessary RSA key parameters. + */ + public virtual void Init( + bool forEncryption, + ICipherParameters parameters) + { + core.Init(forEncryption, parameters); + } + + /** + * Return the maximum size for an input block to this engine. + * For RSA this is always one byte less than the key size on + * encryption, and the same length as the key size on decryption. + * + * @return maximum size for an input block. + */ + public virtual int GetInputBlockSize() + { + return core.GetInputBlockSize(); + } + + /** + * Return the maximum size for an output block to this engine. + * For RSA this is always one byte less than the key size on + * decryption, and the same length as the key size on encryption. + * + * @return maximum size for an output block. + */ + public virtual int GetOutputBlockSize() + { + return core.GetOutputBlockSize(); + } + + /** + * Process a single block using the basic RSA algorithm. + * + * @param inBuf the input array. + * @param inOff the offset into the input buffer where the data starts. + * @param inLen the length of the data to be processed. + * @return the result of the RSA process. + * @exception DataLengthException the input block is too large. + */ + public virtual byte[] ProcessBlock( + byte[] inBuf, + int inOff, + int inLen) + { + BigInteger input = core.ConvertInput(inBuf, inOff, inLen); + BigInteger output = core.ProcessBlock(input); + return core.ConvertOutput(output); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RsaEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RsaEngine.cs.meta new file mode 100644 index 000000000..161b70fd9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/RsaEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bce75b4767f99964da73d7bd7ba91701 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SEEDEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SEEDEngine.cs new file mode 100644 index 000000000..b099f2d91 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SEEDEngine.cs @@ -0,0 +1,368 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * Implementation of the SEED algorithm as described in RFC 4009 + */ + public class SeedEngine + : IBlockCipher + { + private const int BlockSize = 16; + + private static readonly uint[] SS0 = + { + 0x2989a1a8, 0x05858184, 0x16c6d2d4, 0x13c3d3d0, 0x14445054, 0x1d0d111c, 0x2c8ca0ac, 0x25052124, + 0x1d4d515c, 0x03434340, 0x18081018, 0x1e0e121c, 0x11415150, 0x3cccf0fc, 0x0acac2c8, 0x23436360, + 0x28082028, 0x04444044, 0x20002020, 0x1d8d919c, 0x20c0e0e0, 0x22c2e2e0, 0x08c8c0c8, 0x17071314, + 0x2585a1a4, 0x0f8f838c, 0x03030300, 0x3b4b7378, 0x3b8bb3b8, 0x13031310, 0x12c2d2d0, 0x2ecee2ec, + 0x30407070, 0x0c8c808c, 0x3f0f333c, 0x2888a0a8, 0x32023230, 0x1dcdd1dc, 0x36c6f2f4, 0x34447074, + 0x2ccce0ec, 0x15859194, 0x0b0b0308, 0x17475354, 0x1c4c505c, 0x1b4b5358, 0x3d8db1bc, 0x01010100, + 0x24042024, 0x1c0c101c, 0x33437370, 0x18889098, 0x10001010, 0x0cccc0cc, 0x32c2f2f0, 0x19c9d1d8, + 0x2c0c202c, 0x27c7e3e4, 0x32427270, 0x03838380, 0x1b8b9398, 0x11c1d1d0, 0x06868284, 0x09c9c1c8, + 0x20406060, 0x10405050, 0x2383a3a0, 0x2bcbe3e8, 0x0d0d010c, 0x3686b2b4, 0x1e8e929c, 0x0f4f434c, + 0x3787b3b4, 0x1a4a5258, 0x06c6c2c4, 0x38487078, 0x2686a2a4, 0x12021210, 0x2f8fa3ac, 0x15c5d1d4, + 0x21416160, 0x03c3c3c0, 0x3484b0b4, 0x01414140, 0x12425250, 0x3d4d717c, 0x0d8d818c, 0x08080008, + 0x1f0f131c, 0x19899198, 0x00000000, 0x19091118, 0x04040004, 0x13435350, 0x37c7f3f4, 0x21c1e1e0, + 0x3dcdf1fc, 0x36467274, 0x2f0f232c, 0x27072324, 0x3080b0b0, 0x0b8b8388, 0x0e0e020c, 0x2b8ba3a8, + 0x2282a2a0, 0x2e4e626c, 0x13839390, 0x0d4d414c, 0x29496168, 0x3c4c707c, 0x09090108, 0x0a0a0208, + 0x3f8fb3bc, 0x2fcfe3ec, 0x33c3f3f0, 0x05c5c1c4, 0x07878384, 0x14041014, 0x3ecef2fc, 0x24446064, + 0x1eced2dc, 0x2e0e222c, 0x0b4b4348, 0x1a0a1218, 0x06060204, 0x21012120, 0x2b4b6368, 0x26466264, + 0x02020200, 0x35c5f1f4, 0x12829290, 0x0a8a8288, 0x0c0c000c, 0x3383b3b0, 0x3e4e727c, 0x10c0d0d0, + 0x3a4a7278, 0x07474344, 0x16869294, 0x25c5e1e4, 0x26062224, 0x00808080, 0x2d8da1ac, 0x1fcfd3dc, + 0x2181a1a0, 0x30003030, 0x37073334, 0x2e8ea2ac, 0x36063234, 0x15051114, 0x22022220, 0x38083038, + 0x34c4f0f4, 0x2787a3a4, 0x05454144, 0x0c4c404c, 0x01818180, 0x29c9e1e8, 0x04848084, 0x17879394, + 0x35053134, 0x0bcbc3c8, 0x0ecec2cc, 0x3c0c303c, 0x31417170, 0x11011110, 0x07c7c3c4, 0x09898188, + 0x35457174, 0x3bcbf3f8, 0x1acad2d8, 0x38c8f0f8, 0x14849094, 0x19495158, 0x02828280, 0x04c4c0c4, + 0x3fcff3fc, 0x09494148, 0x39093138, 0x27476364, 0x00c0c0c0, 0x0fcfc3cc, 0x17c7d3d4, 0x3888b0b8, + 0x0f0f030c, 0x0e8e828c, 0x02424240, 0x23032320, 0x11819190, 0x2c4c606c, 0x1bcbd3d8, 0x2484a0a4, + 0x34043034, 0x31c1f1f0, 0x08484048, 0x02c2c2c0, 0x2f4f636c, 0x3d0d313c, 0x2d0d212c, 0x00404040, + 0x3e8eb2bc, 0x3e0e323c, 0x3c8cb0bc, 0x01c1c1c0, 0x2a8aa2a8, 0x3a8ab2b8, 0x0e4e424c, 0x15455154, + 0x3b0b3338, 0x1cccd0dc, 0x28486068, 0x3f4f737c, 0x1c8c909c, 0x18c8d0d8, 0x0a4a4248, 0x16465254, + 0x37477374, 0x2080a0a0, 0x2dcde1ec, 0x06464244, 0x3585b1b4, 0x2b0b2328, 0x25456164, 0x3acaf2f8, + 0x23c3e3e0, 0x3989b1b8, 0x3181b1b0, 0x1f8f939c, 0x1e4e525c, 0x39c9f1f8, 0x26c6e2e4, 0x3282b2b0, + 0x31013130, 0x2acae2e8, 0x2d4d616c, 0x1f4f535c, 0x24c4e0e4, 0x30c0f0f0, 0x0dcdc1cc, 0x08888088, + 0x16061214, 0x3a0a3238, 0x18485058, 0x14c4d0d4, 0x22426260, 0x29092128, 0x07070304, 0x33033330, + 0x28c8e0e8, 0x1b0b1318, 0x05050104, 0x39497178, 0x10809090, 0x2a4a6268, 0x2a0a2228, 0x1a8a9298 + }; + + private static readonly uint[] SS1 = + { + 0x38380830, 0xe828c8e0, 0x2c2d0d21, 0xa42686a2, 0xcc0fcfc3, 0xdc1eced2, 0xb03383b3, 0xb83888b0, + 0xac2f8fa3, 0x60204060, 0x54154551, 0xc407c7c3, 0x44044440, 0x6c2f4f63, 0x682b4b63, 0x581b4b53, + 0xc003c3c3, 0x60224262, 0x30330333, 0xb43585b1, 0x28290921, 0xa02080a0, 0xe022c2e2, 0xa42787a3, + 0xd013c3d3, 0x90118191, 0x10110111, 0x04060602, 0x1c1c0c10, 0xbc3c8cb0, 0x34360632, 0x480b4b43, + 0xec2fcfe3, 0x88088880, 0x6c2c4c60, 0xa82888a0, 0x14170713, 0xc404c4c0, 0x14160612, 0xf434c4f0, + 0xc002c2c2, 0x44054541, 0xe021c1e1, 0xd416c6d2, 0x3c3f0f33, 0x3c3d0d31, 0x8c0e8e82, 0x98188890, + 0x28280820, 0x4c0e4e42, 0xf436c6f2, 0x3c3e0e32, 0xa42585a1, 0xf839c9f1, 0x0c0d0d01, 0xdc1fcfd3, + 0xd818c8d0, 0x282b0b23, 0x64264662, 0x783a4a72, 0x24270723, 0x2c2f0f23, 0xf031c1f1, 0x70324272, + 0x40024242, 0xd414c4d0, 0x40014141, 0xc000c0c0, 0x70334373, 0x64274763, 0xac2c8ca0, 0x880b8b83, + 0xf437c7f3, 0xac2d8da1, 0x80008080, 0x1c1f0f13, 0xc80acac2, 0x2c2c0c20, 0xa82a8aa2, 0x34340430, + 0xd012c2d2, 0x080b0b03, 0xec2ecee2, 0xe829c9e1, 0x5c1d4d51, 0x94148490, 0x18180810, 0xf838c8f0, + 0x54174753, 0xac2e8ea2, 0x08080800, 0xc405c5c1, 0x10130313, 0xcc0dcdc1, 0x84068682, 0xb83989b1, + 0xfc3fcff3, 0x7c3d4d71, 0xc001c1c1, 0x30310131, 0xf435c5f1, 0x880a8a82, 0x682a4a62, 0xb03181b1, + 0xd011c1d1, 0x20200020, 0xd417c7d3, 0x00020202, 0x20220222, 0x04040400, 0x68284860, 0x70314171, + 0x04070703, 0xd81bcbd3, 0x9c1d8d91, 0x98198991, 0x60214161, 0xbc3e8eb2, 0xe426c6e2, 0x58194951, + 0xdc1dcdd1, 0x50114151, 0x90108090, 0xdc1cccd0, 0x981a8a92, 0xa02383a3, 0xa82b8ba3, 0xd010c0d0, + 0x80018181, 0x0c0f0f03, 0x44074743, 0x181a0a12, 0xe023c3e3, 0xec2ccce0, 0x8c0d8d81, 0xbc3f8fb3, + 0x94168692, 0x783b4b73, 0x5c1c4c50, 0xa02282a2, 0xa02181a1, 0x60234363, 0x20230323, 0x4c0d4d41, + 0xc808c8c0, 0x9c1e8e92, 0x9c1c8c90, 0x383a0a32, 0x0c0c0c00, 0x2c2e0e22, 0xb83a8ab2, 0x6c2e4e62, + 0x9c1f8f93, 0x581a4a52, 0xf032c2f2, 0x90128292, 0xf033c3f3, 0x48094941, 0x78384870, 0xcc0cccc0, + 0x14150511, 0xf83bcbf3, 0x70304070, 0x74354571, 0x7c3f4f73, 0x34350531, 0x10100010, 0x00030303, + 0x64244460, 0x6c2d4d61, 0xc406c6c2, 0x74344470, 0xd415c5d1, 0xb43484b0, 0xe82acae2, 0x08090901, + 0x74364672, 0x18190911, 0xfc3ecef2, 0x40004040, 0x10120212, 0xe020c0e0, 0xbc3d8db1, 0x04050501, + 0xf83acaf2, 0x00010101, 0xf030c0f0, 0x282a0a22, 0x5c1e4e52, 0xa82989a1, 0x54164652, 0x40034343, + 0x84058581, 0x14140410, 0x88098981, 0x981b8b93, 0xb03080b0, 0xe425c5e1, 0x48084840, 0x78394971, + 0x94178793, 0xfc3cccf0, 0x1c1e0e12, 0x80028282, 0x20210121, 0x8c0c8c80, 0x181b0b13, 0x5c1f4f53, + 0x74374773, 0x54144450, 0xb03282b2, 0x1c1d0d11, 0x24250521, 0x4c0f4f43, 0x00000000, 0x44064642, + 0xec2dcde1, 0x58184850, 0x50124252, 0xe82bcbe3, 0x7c3e4e72, 0xd81acad2, 0xc809c9c1, 0xfc3dcdf1, + 0x30300030, 0x94158591, 0x64254561, 0x3c3c0c30, 0xb43686b2, 0xe424c4e0, 0xb83b8bb3, 0x7c3c4c70, + 0x0c0e0e02, 0x50104050, 0x38390931, 0x24260622, 0x30320232, 0x84048480, 0x68294961, 0x90138393, + 0x34370733, 0xe427c7e3, 0x24240420, 0xa42484a0, 0xc80bcbc3, 0x50134353, 0x080a0a02, 0x84078783, + 0xd819c9d1, 0x4c0c4c40, 0x80038383, 0x8c0f8f83, 0xcc0ecec2, 0x383b0b33, 0x480a4a42, 0xb43787b3 + }; + + private static readonly uint[] SS2 = + { + + 0xa1a82989, 0x81840585, 0xd2d416c6, 0xd3d013c3, 0x50541444, 0x111c1d0d, 0xa0ac2c8c, 0x21242505, + 0x515c1d4d, 0x43400343, 0x10181808, 0x121c1e0e, 0x51501141, 0xf0fc3ccc, 0xc2c80aca, 0x63602343, + 0x20282808, 0x40440444, 0x20202000, 0x919c1d8d, 0xe0e020c0, 0xe2e022c2, 0xc0c808c8, 0x13141707, + 0xa1a42585, 0x838c0f8f, 0x03000303, 0x73783b4b, 0xb3b83b8b, 0x13101303, 0xd2d012c2, 0xe2ec2ece, + 0x70703040, 0x808c0c8c, 0x333c3f0f, 0xa0a82888, 0x32303202, 0xd1dc1dcd, 0xf2f436c6, 0x70743444, + 0xe0ec2ccc, 0x91941585, 0x03080b0b, 0x53541747, 0x505c1c4c, 0x53581b4b, 0xb1bc3d8d, 0x01000101, + 0x20242404, 0x101c1c0c, 0x73703343, 0x90981888, 0x10101000, 0xc0cc0ccc, 0xf2f032c2, 0xd1d819c9, + 0x202c2c0c, 0xe3e427c7, 0x72703242, 0x83800383, 0x93981b8b, 0xd1d011c1, 0x82840686, 0xc1c809c9, + 0x60602040, 0x50501040, 0xa3a02383, 0xe3e82bcb, 0x010c0d0d, 0xb2b43686, 0x929c1e8e, 0x434c0f4f, + 0xb3b43787, 0x52581a4a, 0xc2c406c6, 0x70783848, 0xa2a42686, 0x12101202, 0xa3ac2f8f, 0xd1d415c5, + 0x61602141, 0xc3c003c3, 0xb0b43484, 0x41400141, 0x52501242, 0x717c3d4d, 0x818c0d8d, 0x00080808, + 0x131c1f0f, 0x91981989, 0x00000000, 0x11181909, 0x00040404, 0x53501343, 0xf3f437c7, 0xe1e021c1, + 0xf1fc3dcd, 0x72743646, 0x232c2f0f, 0x23242707, 0xb0b03080, 0x83880b8b, 0x020c0e0e, 0xa3a82b8b, + 0xa2a02282, 0x626c2e4e, 0x93901383, 0x414c0d4d, 0x61682949, 0x707c3c4c, 0x01080909, 0x02080a0a, + 0xb3bc3f8f, 0xe3ec2fcf, 0xf3f033c3, 0xc1c405c5, 0x83840787, 0x10141404, 0xf2fc3ece, 0x60642444, + 0xd2dc1ece, 0x222c2e0e, 0x43480b4b, 0x12181a0a, 0x02040606, 0x21202101, 0x63682b4b, 0x62642646, + 0x02000202, 0xf1f435c5, 0x92901282, 0x82880a8a, 0x000c0c0c, 0xb3b03383, 0x727c3e4e, 0xd0d010c0, + 0x72783a4a, 0x43440747, 0x92941686, 0xe1e425c5, 0x22242606, 0x80800080, 0xa1ac2d8d, 0xd3dc1fcf, + 0xa1a02181, 0x30303000, 0x33343707, 0xa2ac2e8e, 0x32343606, 0x11141505, 0x22202202, 0x30383808, + 0xf0f434c4, 0xa3a42787, 0x41440545, 0x404c0c4c, 0x81800181, 0xe1e829c9, 0x80840484, 0x93941787, + 0x31343505, 0xc3c80bcb, 0xc2cc0ece, 0x303c3c0c, 0x71703141, 0x11101101, 0xc3c407c7, 0x81880989, + 0x71743545, 0xf3f83bcb, 0xd2d81aca, 0xf0f838c8, 0x90941484, 0x51581949, 0x82800282, 0xc0c404c4, + 0xf3fc3fcf, 0x41480949, 0x31383909, 0x63642747, 0xc0c000c0, 0xc3cc0fcf, 0xd3d417c7, 0xb0b83888, + 0x030c0f0f, 0x828c0e8e, 0x42400242, 0x23202303, 0x91901181, 0x606c2c4c, 0xd3d81bcb, 0xa0a42484, + 0x30343404, 0xf1f031c1, 0x40480848, 0xc2c002c2, 0x636c2f4f, 0x313c3d0d, 0x212c2d0d, 0x40400040, + 0xb2bc3e8e, 0x323c3e0e, 0xb0bc3c8c, 0xc1c001c1, 0xa2a82a8a, 0xb2b83a8a, 0x424c0e4e, 0x51541545, + 0x33383b0b, 0xd0dc1ccc, 0x60682848, 0x737c3f4f, 0x909c1c8c, 0xd0d818c8, 0x42480a4a, 0x52541646, + 0x73743747, 0xa0a02080, 0xe1ec2dcd, 0x42440646, 0xb1b43585, 0x23282b0b, 0x61642545, 0xf2f83aca, + 0xe3e023c3, 0xb1b83989, 0xb1b03181, 0x939c1f8f, 0x525c1e4e, 0xf1f839c9, 0xe2e426c6, 0xb2b03282, + 0x31303101, 0xe2e82aca, 0x616c2d4d, 0x535c1f4f, 0xe0e424c4, 0xf0f030c0, 0xc1cc0dcd, 0x80880888, + 0x12141606, 0x32383a0a, 0x50581848, 0xd0d414c4, 0x62602242, 0x21282909, 0x03040707, 0x33303303, + 0xe0e828c8, 0x13181b0b, 0x01040505, 0x71783949, 0x90901080, 0x62682a4a, 0x22282a0a, 0x92981a8a + }; + + private static readonly uint[] SS3 = + { + + 0x08303838, 0xc8e0e828, 0x0d212c2d, 0x86a2a426, 0xcfc3cc0f, 0xced2dc1e, 0x83b3b033, 0x88b0b838, + 0x8fa3ac2f, 0x40606020, 0x45515415, 0xc7c3c407, 0x44404404, 0x4f636c2f, 0x4b63682b, 0x4b53581b, + 0xc3c3c003, 0x42626022, 0x03333033, 0x85b1b435, 0x09212829, 0x80a0a020, 0xc2e2e022, 0x87a3a427, + 0xc3d3d013, 0x81919011, 0x01111011, 0x06020406, 0x0c101c1c, 0x8cb0bc3c, 0x06323436, 0x4b43480b, + 0xcfe3ec2f, 0x88808808, 0x4c606c2c, 0x88a0a828, 0x07131417, 0xc4c0c404, 0x06121416, 0xc4f0f434, + 0xc2c2c002, 0x45414405, 0xc1e1e021, 0xc6d2d416, 0x0f333c3f, 0x0d313c3d, 0x8e828c0e, 0x88909818, + 0x08202828, 0x4e424c0e, 0xc6f2f436, 0x0e323c3e, 0x85a1a425, 0xc9f1f839, 0x0d010c0d, 0xcfd3dc1f, + 0xc8d0d818, 0x0b23282b, 0x46626426, 0x4a72783a, 0x07232427, 0x0f232c2f, 0xc1f1f031, 0x42727032, + 0x42424002, 0xc4d0d414, 0x41414001, 0xc0c0c000, 0x43737033, 0x47636427, 0x8ca0ac2c, 0x8b83880b, + 0xc7f3f437, 0x8da1ac2d, 0x80808000, 0x0f131c1f, 0xcac2c80a, 0x0c202c2c, 0x8aa2a82a, 0x04303434, + 0xc2d2d012, 0x0b03080b, 0xcee2ec2e, 0xc9e1e829, 0x4d515c1d, 0x84909414, 0x08101818, 0xc8f0f838, + 0x47535417, 0x8ea2ac2e, 0x08000808, 0xc5c1c405, 0x03131013, 0xcdc1cc0d, 0x86828406, 0x89b1b839, + 0xcff3fc3f, 0x4d717c3d, 0xc1c1c001, 0x01313031, 0xc5f1f435, 0x8a82880a, 0x4a62682a, 0x81b1b031, + 0xc1d1d011, 0x00202020, 0xc7d3d417, 0x02020002, 0x02222022, 0x04000404, 0x48606828, 0x41717031, + 0x07030407, 0xcbd3d81b, 0x8d919c1d, 0x89919819, 0x41616021, 0x8eb2bc3e, 0xc6e2e426, 0x49515819, + 0xcdd1dc1d, 0x41515011, 0x80909010, 0xccd0dc1c, 0x8a92981a, 0x83a3a023, 0x8ba3a82b, 0xc0d0d010, + 0x81818001, 0x0f030c0f, 0x47434407, 0x0a12181a, 0xc3e3e023, 0xcce0ec2c, 0x8d818c0d, 0x8fb3bc3f, + 0x86929416, 0x4b73783b, 0x4c505c1c, 0x82a2a022, 0x81a1a021, 0x43636023, 0x03232023, 0x4d414c0d, + 0xc8c0c808, 0x8e929c1e, 0x8c909c1c, 0x0a32383a, 0x0c000c0c, 0x0e222c2e, 0x8ab2b83a, 0x4e626c2e, + 0x8f939c1f, 0x4a52581a, 0xc2f2f032, 0x82929012, 0xc3f3f033, 0x49414809, 0x48707838, 0xccc0cc0c, + 0x05111415, 0xcbf3f83b, 0x40707030, 0x45717435, 0x4f737c3f, 0x05313435, 0x00101010, 0x03030003, + 0x44606424, 0x4d616c2d, 0xc6c2c406, 0x44707434, 0xc5d1d415, 0x84b0b434, 0xcae2e82a, 0x09010809, + 0x46727436, 0x09111819, 0xcef2fc3e, 0x40404000, 0x02121012, 0xc0e0e020, 0x8db1bc3d, 0x05010405, + 0xcaf2f83a, 0x01010001, 0xc0f0f030, 0x0a22282a, 0x4e525c1e, 0x89a1a829, 0x46525416, 0x43434003, + 0x85818405, 0x04101414, 0x89818809, 0x8b93981b, 0x80b0b030, 0xc5e1e425, 0x48404808, 0x49717839, + 0x87939417, 0xccf0fc3c, 0x0e121c1e, 0x82828002, 0x01212021, 0x8c808c0c, 0x0b13181b, 0x4f535c1f, + 0x47737437, 0x44505414, 0x82b2b032, 0x0d111c1d, 0x05212425, 0x4f434c0f, 0x00000000, 0x46424406, + 0xcde1ec2d, 0x48505818, 0x42525012, 0xcbe3e82b, 0x4e727c3e, 0xcad2d81a, 0xc9c1c809, 0xcdf1fc3d, + 0x00303030, 0x85919415, 0x45616425, 0x0c303c3c, 0x86b2b436, 0xc4e0e424, 0x8bb3b83b, 0x4c707c3c, + 0x0e020c0e, 0x40505010, 0x09313839, 0x06222426, 0x02323032, 0x84808404, 0x49616829, 0x83939013, + 0x07333437, 0xc7e3e427, 0x04202424, 0x84a0a424, 0xcbc3c80b, 0x43535013, 0x0a02080a, 0x87838407, + 0xc9d1d819, 0x4c404c0c, 0x83838003, 0x8f838c0f, 0xcec2cc0e, 0x0b33383b, 0x4a42480a, 0x87b3b437 + }; + + private static readonly uint[] KC = + { + 0x9e3779b9, 0x3c6ef373, 0x78dde6e6, 0xf1bbcdcc, + 0xe3779b99, 0xc6ef3733, 0x8dde6e67, 0x1bbcdccf, + 0x3779b99e, 0x6ef3733c, 0xdde6e678, 0xbbcdccf1, + 0x779b99e3, 0xef3733c6, 0xde6e678d, 0xbcdccf1b + }; + + private int[] wKey; + private bool forEncryption; + + public virtual void Init(bool forEncryption, ICipherParameters parameters) + { + this.forEncryption = forEncryption; + wKey = CreateWorkingKey(((KeyParameter)parameters).GetKey()); + } + + public virtual string AlgorithmName + { + get { return "SEED"; } + } + + public virtual int GetBlockSize() + { + return BlockSize; + } + + public virtual int ProcessBlock(byte[] inBuf, int inOff, byte[] outBuf, int outOff) + { + if (wKey == null) + throw new InvalidOperationException("SEED engine not initialised"); + + Check.DataLength(inBuf, inOff, BlockSize, "input buffer too short"); + Check.OutputLength(outBuf, outOff, BlockSize, "output buffer too short"); + + long l = (long)Pack.BE_To_UInt64(inBuf, inOff + 0); + long r = (long)Pack.BE_To_UInt64(inBuf, inOff + 8); + + if (forEncryption) + { + for (int i = 0; i < 16; i++) + { + long nl = r; + + r = l ^ F(wKey[2 * i], wKey[(2 * i) + 1], r); + l = nl; + } + } + else + { + for (int i = 15; i >= 0; i--) + { + long nl = r; + + r = l ^ F(wKey[2 * i], wKey[(2 * i) + 1], r); + l = nl; + } + } + + Pack.UInt64_To_BE((ulong)r, outBuf, outOff + 0); + Pack.UInt64_To_BE((ulong)l, outBuf, outOff + 8); + + return BlockSize; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + if (wKey == null) + throw new InvalidOperationException("SEED engine not initialised"); + + Check.DataLength(input, BlockSize, "input buffer too short"); + Check.OutputLength(output, BlockSize, "output buffer too short"); + + long l = (long)Pack.BE_To_UInt64(input); + long r = (long)Pack.BE_To_UInt64(input[8..]); + + if (forEncryption) + { + for (int i = 0; i < 16; i++) + { + long nl = r; + + r = l ^ F(wKey[2 * i], wKey[(2 * i) + 1], r); + l = nl; + } + } + else + { + for (int i = 15; i >= 0; i--) + { + long nl = r; + + r = l ^ F(wKey[2 * i], wKey[(2 * i) + 1], r); + l = nl; + } + } + + Pack.UInt64_To_BE((ulong)r, output); + Pack.UInt64_To_BE((ulong)l, output[8..]); + + return BlockSize; + } +#endif + + private int[] CreateWorkingKey(byte[] inKey) + { + if (inKey.Length != 16) + throw new ArgumentException("key size must be 128 bits"); + + int[] key = new int[32]; + long lower = (long)Pack.BE_To_UInt64(inKey, 0); + long upper = (long)Pack.BE_To_UInt64(inKey, 8); + + int key0 = extractW0(lower); + int key1 = extractW1(lower); + int key2 = extractW0(upper); + int key3 = extractW1(upper); + + for (int i = 0; i < 16; i++) + { + key[2 * i] = G(key0 + key2 - (int)KC[i]); + key[2 * i + 1] = G(key1 - key3 + (int)KC[i]); + + if (i % 2 == 0) + { + lower = rotateRight8(lower); + key0 = extractW0(lower); + key1 = extractW1(lower); + } + else + { + upper = rotateLeft8(upper); + key2 = extractW0(upper); + key3 = extractW1(upper); + } + } + + return key; + } + + private int extractW1( + long lVal) + { + return (int)lVal; + } + + private int extractW0( + long lVal) + { + return (int)(lVal >> 32); + } + + private long rotateLeft8( + long x) + { + return (x << 8) | ((long)((ulong) x >> 56)); + } + + private long rotateRight8( + long x) + { + return ((long)((ulong) x >> 8)) | (x << 56); + } + + private int G( + int x) + { + return (int)(SS0[x & 0xff] ^ SS1[(x >> 8) & 0xff] ^ SS2[(x >> 16) & 0xff] ^ SS3[(x >> 24) & 0xff]); + } + + private long F( + int ki0, + int ki1, + long r) + { + int r0 = (int)(r >> 32); + int r1 = (int)r; + int rd1 = phaseCalc2(r0, ki0, r1, ki1); + int rd0 = rd1 + phaseCalc1(r0, ki0, r1, ki1); + + return ((long)rd0 << 32) | (rd1 & 0xffffffffL); + } + + private int phaseCalc1( + int r0, + int ki0, + int r1, + int ki1) + { + return G(G((r0 ^ ki0) ^ (r1 ^ ki1)) + (r0 ^ ki0)); + } + + private int phaseCalc2( + int r0, + int ki0, + int r1, + int ki1) + { + return G(phaseCalc1(r0, ki0, r1, ki1) + G((r0 ^ ki0) ^ (r1 ^ ki1))); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SEEDEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SEEDEngine.cs.meta new file mode 100644 index 000000000..9fc7a63a0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SEEDEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2871544d92435c54787622babc99b141 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SEEDWrapEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SEEDWrapEngine.cs new file mode 100644 index 000000000..5a8dec064 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SEEDWrapEngine.cs @@ -0,0 +1,20 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /// + /// An implementation of the SEED key wrapper based on RFC 4010/RFC 3394. + ///

+ /// For further details see: http://www.ietf.org/rfc/rfc4010.txt. + /// + public class SeedWrapEngine + : Rfc3394WrapEngine + { + public SeedWrapEngine() + : base(new SeedEngine()) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SEEDWrapEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SEEDWrapEngine.cs.meta new file mode 100644 index 000000000..e65254a81 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SEEDWrapEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9401520a7aa7c8d41baf502990de084a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SM2Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SM2Engine.cs new file mode 100644 index 000000000..74ad44bec --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SM2Engine.cs @@ -0,0 +1,456 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + ///

+ /// SM2 public key encryption engine - based on https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02. + /// + public class SM2Engine + { + public enum Mode + { + C1C2C3, C1C3C2 + } + + private readonly IDigest mDigest; + private readonly Mode mMode; + + private bool mForEncryption; + private ECKeyParameters mECKey; + private ECDomainParameters mECParams; + private int mCurveLength; + private SecureRandom mRandom; + + public SM2Engine() + : this(new SM3Digest()) + { + } + + public SM2Engine(Mode mode) + : this(new SM3Digest(), mode) + { + } + + public SM2Engine(IDigest digest) + : this(digest, Mode.C1C2C3) + { + } + + public SM2Engine(IDigest digest, Mode mode) + { + mDigest = digest; + mMode = mode; + } + + public virtual void Init(bool forEncryption, ICipherParameters param) + { + this.mForEncryption = forEncryption; + + if (forEncryption) + { + ParametersWithRandom rParam = (ParametersWithRandom)param; + + mECKey = (ECKeyParameters)rParam.Parameters; + mECParams = mECKey.Parameters; + + ECPoint s = ((ECPublicKeyParameters)mECKey).Q.Multiply(mECParams.H); + if (s.IsInfinity) + throw new ArgumentException("invalid key: [h]Q at infinity"); + + mRandom = rParam.Random; + } + else + { + mECKey = (ECKeyParameters)param; + mECParams = mECKey.Parameters; + } + + mCurveLength = (mECParams.Curve.FieldSize + 7) / 8; + } + + public virtual byte[] ProcessBlock(byte[] input, int inOff, int inLen) + { + if ((inOff + inLen) > input.Length || inLen == 0) + throw new DataLengthException("input buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ProcessBlock(input.AsSpan(inOff, inLen)); +#else + if (mForEncryption) + { + return Encrypt(input, inOff, inLen); + } + else + { + return Decrypt(input, inOff, inLen); + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual byte[] ProcessBlock(ReadOnlySpan input) + { + if (input.Length == 0) + throw new DataLengthException("input buffer too short"); + + if (mForEncryption) + { + return Encrypt(input); + } + else + { + return Decrypt(input); + } + } +#endif + + protected virtual ECMultiplier CreateBasePointMultiplier() + { + return new FixedPointCombMultiplier(); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private byte[] Encrypt(ReadOnlySpan input) + { + byte[] c2 = input.ToArray(); + + ECMultiplier multiplier = CreateBasePointMultiplier(); + + BigInteger k; + ECPoint kPB; + do + { + k = NextK(); + kPB = ((ECPublicKeyParameters)mECKey).Q.Multiply(k).Normalize(); + + Kdf(mDigest, kPB, c2); + } + while (NotEncrypted(c2, input)); + + ECPoint c1P = multiplier.Multiply(mECParams.G, k).Normalize(); + + int c1PEncodedLength = c1P.GetEncodedLength(false); + Span c1 = c1PEncodedLength <= 512 + ? stackalloc byte[c1PEncodedLength] + : new byte[c1PEncodedLength]; + c1P.EncodeTo(false, c1); + + AddFieldElement(mDigest, kPB.AffineXCoord); + mDigest.BlockUpdate(input); + AddFieldElement(mDigest, kPB.AffineYCoord); + + int digestSize = mDigest.GetDigestSize(); + Span c3 = digestSize <= 128 + ? stackalloc byte[digestSize] + : new byte[digestSize]; + mDigest.DoFinal(c3); + + switch (mMode) + { + case Mode.C1C3C2: + return Arrays.Concatenate(c1, c3, c2); + default: + return Arrays.Concatenate(c1, c2, c3); + } + } + + private byte[] Decrypt(ReadOnlySpan input) + { + int c1Length = mCurveLength * 2 + 1; + ECPoint c1P = mECParams.Curve.DecodePoint(input[..c1Length]); + + ECPoint s = c1P.Multiply(mECParams.H); + if (s.IsInfinity) + throw new InvalidCipherTextException("[h]C1 at infinity"); + + c1P = c1P.Multiply(((ECPrivateKeyParameters)mECKey).D).Normalize(); + + int digestSize = mDigest.GetDigestSize(); + int c2Length = input.Length - c1Length - digestSize; + byte[] c2 = new byte[c2Length]; + + if (mMode == Mode.C1C3C2) + { + input[(c1Length + digestSize)..].CopyTo(c2); + } + else + { + input[c1Length..(c1Length + c2Length)].CopyTo(c2); + } + + Kdf(mDigest, c1P, c2); + + AddFieldElement(mDigest, c1P.AffineXCoord); + mDigest.BlockUpdate(c2); + AddFieldElement(mDigest, c1P.AffineYCoord); + + Span c3 = digestSize <= 128 + ? stackalloc byte[digestSize] + : new byte[digestSize]; + mDigest.DoFinal(c3); + + int check = 0; + if (mMode == Mode.C1C3C2) + { + for (int i = 0; i != c3.Length; i++) + { + check |= c3[i] ^ input[c1Length + i]; + } + } + else + { + for (int i = 0; i != c3.Length; i++) + { + check |= c3[i] ^ input[c1Length + c2.Length + i]; + } + } + + c3.Fill(0); + + if (check != 0) + { + Arrays.Fill(c2, 0); + throw new InvalidCipherTextException("invalid cipher text"); + } + + return c2; + } + + private bool NotEncrypted(ReadOnlySpan encData, ReadOnlySpan input) + { + for (int i = 0; i != encData.Length; i++) + { + if (encData[i] != input[i]) + return false; + } + + return true; + } +#else + private byte[] Encrypt(byte[] input, int inOff, int inLen) + { + byte[] c2 = new byte[inLen]; + + Array.Copy(input, inOff, c2, 0, c2.Length); + + ECMultiplier multiplier = CreateBasePointMultiplier(); + + BigInteger k; + ECPoint kPB; + do + { + k = NextK(); + kPB = ((ECPublicKeyParameters)mECKey).Q.Multiply(k).Normalize(); + + Kdf(mDigest, kPB, c2); + } + while (NotEncrypted(c2, input, inOff)); + + ECPoint c1P = multiplier.Multiply(mECParams.G, k).Normalize(); + + byte[] c1 = c1P.GetEncoded(false); + + AddFieldElement(mDigest, kPB.AffineXCoord); + mDigest.BlockUpdate(input, inOff, inLen); + AddFieldElement(mDigest, kPB.AffineYCoord); + + byte[] c3 = DigestUtilities.DoFinal(mDigest); + + switch (mMode) + { + case Mode.C1C3C2: + return Arrays.ConcatenateAll(c1, c3, c2); + default: + return Arrays.ConcatenateAll(c1, c2, c3); + } + } + + private byte[] Decrypt(byte[] input, int inOff, int inLen) + { + byte[] c1 = new byte[mCurveLength * 2 + 1]; + + Array.Copy(input, inOff, c1, 0, c1.Length); + + ECPoint c1P = mECParams.Curve.DecodePoint(c1); + + ECPoint s = c1P.Multiply(mECParams.H); + if (s.IsInfinity) + throw new InvalidCipherTextException("[h]C1 at infinity"); + + c1P = c1P.Multiply(((ECPrivateKeyParameters)mECKey).D).Normalize(); + + int digestSize = mDigest.GetDigestSize(); + byte[] c2 = new byte[inLen - c1.Length - digestSize]; + + if (mMode == Mode.C1C3C2) + { + Array.Copy(input, inOff + c1.Length + digestSize, c2, 0, c2.Length); + } + else + { + Array.Copy(input, inOff + c1.Length, c2, 0, c2.Length); + } + + Kdf(mDigest, c1P, c2); + + AddFieldElement(mDigest, c1P.AffineXCoord); + mDigest.BlockUpdate(c2, 0, c2.Length); + AddFieldElement(mDigest, c1P.AffineYCoord); + + byte[] c3 = DigestUtilities.DoFinal(mDigest); + + int check = 0; + if (mMode == Mode.C1C3C2) + { + for (int i = 0; i != c3.Length; i++) + { + check |= c3[i] ^ input[inOff + c1.Length + i]; + } + } + else + { + for (int i = 0; i != c3.Length; i++) + { + check |= c3[i] ^ input[inOff + c1.Length + c2.Length + i]; + } + } + + Arrays.Fill(c1, 0); + Arrays.Fill(c3, 0); + + if (check != 0) + { + Arrays.Fill(c2, 0); + throw new InvalidCipherTextException("invalid cipher text"); + } + + return c2; + } + + private bool NotEncrypted(byte[] encData, byte[] input, int inOff) + { + for (int i = 0; i != encData.Length; i++) + { + if (encData[i] != input[inOff + i]) + return false; + } + + return true; + } +#endif + + private void Kdf(IDigest digest, ECPoint c1, byte[] encData) + { + int digestSize = digest.GetDigestSize(); + int bufSize = System.Math.Max(4, digestSize); +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span buf = bufSize <= 128 + ? stackalloc byte[bufSize] + : new byte[bufSize]; +#else + byte[] buf = new byte[bufSize]; +#endif + int off = 0; + + IMemoable memo = digest as IMemoable; + IMemoable copy = null; + + if (memo != null) + { + AddFieldElement(digest, c1.AffineXCoord); + AddFieldElement(digest, c1.AffineYCoord); + copy = memo.Copy(); + } + + uint ct = 0; + + while (off < encData.Length) + { + if (memo != null) + { + memo.Reset(copy); + } + else + { + AddFieldElement(digest, c1.AffineXCoord); + AddFieldElement(digest, c1.AffineYCoord); + } + + int xorLen = System.Math.Min(digestSize, encData.Length - off); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Pack.UInt32_To_BE(++ct, buf); + digest.BlockUpdate(buf[..4]); + digest.DoFinal(buf); + Xor(encData.AsSpan(off, xorLen), buf); +#else + Pack.UInt32_To_BE(++ct, buf, 0); + digest.BlockUpdate(buf, 0, 4); + digest.DoFinal(buf, 0); + Xor(encData, buf, off, xorLen); +#endif + off += xorLen; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void Xor(Span data, ReadOnlySpan kdfOut) + { + for (int i = 0; i != data.Length; i++) + { + data[i] ^= kdfOut[i]; + } + } +#else + private void Xor(byte[] data, byte[] kdfOut, int dOff, int dRemaining) + { + for (int i = 0; i != dRemaining; i++) + { + data[dOff + i] ^= kdfOut[i]; + } + } +#endif + + private BigInteger NextK() + { + int qBitLength = mECParams.N.BitLength; + + BigInteger k; + do + { + k = new BigInteger(qBitLength, mRandom); + } + while (k.SignValue == 0 || k.CompareTo(mECParams.N) >= 0); + + return k; + } + + private void AddFieldElement(IDigest digest, ECFieldElement v) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int encodedLength = v.GetEncodedLength(); + Span p = encodedLength <= 128 + ? stackalloc byte[encodedLength] + : new byte[encodedLength]; + v.EncodeTo(p); + digest.BlockUpdate(p); +#else + byte[] p = v.GetEncoded(); + digest.BlockUpdate(p, 0, p.Length); +#endif + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SM2Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SM2Engine.cs.meta new file mode 100644 index 000000000..8e8974c3b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SM2Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98ba5c33f3d8bf14499919dce964edae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SM4Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SM4Engine.cs new file mode 100644 index 000000000..0ad8bdf50 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SM4Engine.cs @@ -0,0 +1,215 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /// SM4 Block Cipher - SM4 is a 128 bit block cipher with a 128 bit key. + /// + /// The implementation here is based on the document http://eprint.iacr.org/2008/329.pdf + /// by Whitfield Diffie and George Ledin, which is a translation of Prof. LU Shu-wang's original standard. + /// + public class SM4Engine + : IBlockCipher + { + private const int BlockSize = 16; + + private static readonly byte[] Sbox = + { + 0xd6, 0x90, 0xe9, 0xfe, 0xcc, 0xe1, 0x3d, 0xb7, 0x16, 0xb6, 0x14, 0xc2, 0x28, 0xfb, 0x2c, 0x05, + 0x2b, 0x67, 0x9a, 0x76, 0x2a, 0xbe, 0x04, 0xc3, 0xaa, 0x44, 0x13, 0x26, 0x49, 0x86, 0x06, 0x99, + 0x9c, 0x42, 0x50, 0xf4, 0x91, 0xef, 0x98, 0x7a, 0x33, 0x54, 0x0b, 0x43, 0xed, 0xcf, 0xac, 0x62, + 0xe4, 0xb3, 0x1c, 0xa9, 0xc9, 0x08, 0xe8, 0x95, 0x80, 0xdf, 0x94, 0xfa, 0x75, 0x8f, 0x3f, 0xa6, + 0x47, 0x07, 0xa7, 0xfc, 0xf3, 0x73, 0x17, 0xba, 0x83, 0x59, 0x3c, 0x19, 0xe6, 0x85, 0x4f, 0xa8, + 0x68, 0x6b, 0x81, 0xb2, 0x71, 0x64, 0xda, 0x8b, 0xf8, 0xeb, 0x0f, 0x4b, 0x70, 0x56, 0x9d, 0x35, + 0x1e, 0x24, 0x0e, 0x5e, 0x63, 0x58, 0xd1, 0xa2, 0x25, 0x22, 0x7c, 0x3b, 0x01, 0x21, 0x78, 0x87, + 0xd4, 0x00, 0x46, 0x57, 0x9f, 0xd3, 0x27, 0x52, 0x4c, 0x36, 0x02, 0xe7, 0xa0, 0xc4, 0xc8, 0x9e, + 0xea, 0xbf, 0x8a, 0xd2, 0x40, 0xc7, 0x38, 0xb5, 0xa3, 0xf7, 0xf2, 0xce, 0xf9, 0x61, 0x15, 0xa1, + 0xe0, 0xae, 0x5d, 0xa4, 0x9b, 0x34, 0x1a, 0x55, 0xad, 0x93, 0x32, 0x30, 0xf5, 0x8c, 0xb1, 0xe3, + 0x1d, 0xf6, 0xe2, 0x2e, 0x82, 0x66, 0xca, 0x60, 0xc0, 0x29, 0x23, 0xab, 0x0d, 0x53, 0x4e, 0x6f, + 0xd5, 0xdb, 0x37, 0x45, 0xde, 0xfd, 0x8e, 0x2f, 0x03, 0xff, 0x6a, 0x72, 0x6d, 0x6c, 0x5b, 0x51, + 0x8d, 0x1b, 0xaf, 0x92, 0xbb, 0xdd, 0xbc, 0x7f, 0x11, 0xd9, 0x5c, 0x41, 0x1f, 0x10, 0x5a, 0xd8, + 0x0a, 0xc1, 0x31, 0x88, 0xa5, 0xcd, 0x7b, 0xbd, 0x2d, 0x74, 0xd0, 0x12, 0xb8, 0xe5, 0xb4, 0xb0, + 0x89, 0x69, 0x97, 0x4a, 0x0c, 0x96, 0x77, 0x7e, 0x65, 0xb9, 0xf1, 0x09, 0xc5, 0x6e, 0xc6, 0x84, + 0x18, 0xf0, 0x7d, 0xec, 0x3a, 0xdc, 0x4d, 0x20, 0x79, 0xee, 0x5f, 0x3e, 0xd7, 0xcb, 0x39, 0x48 + }; + + private static readonly uint[] CK = + { + 0x00070e15, 0x1c232a31, 0x383f464d, 0x545b6269, + 0x70777e85, 0x8c939aa1, 0xa8afb6bd, 0xc4cbd2d9, + 0xe0e7eef5, 0xfc030a11, 0x181f262d, 0x343b4249, + 0x50575e65, 0x6c737a81, 0x888f969d, 0xa4abb2b9, + 0xc0c7ced5, 0xdce3eaf1, 0xf8ff060d, 0x141b2229, + 0x30373e45, 0x4c535a61, 0x686f767d, 0x848b9299, + 0xa0a7aeb5, 0xbcc3cad1, 0xd8dfe6ed, 0xf4fb0209, + 0x10171e25, 0x2c333a41, 0x484f565d, 0x646b7279 + }; + + private static readonly uint[] FK = + { + 0xa3b1bac6, 0x56aa3350, 0x677d9197, 0xb27022dc + }; + + private uint[] rk; + + // non-linear substitution tau. + private static uint tau(uint A) + { + uint b0 = Sbox[A >> 24]; + uint b1 = Sbox[(A >> 16) & 0xFF]; + uint b2 = Sbox[(A >> 8) & 0xFF]; + uint b3 = Sbox[A & 0xFF]; + + return (b0 << 24) | (b1 << 16) | (b2 << 8) | b3; + } + + private static uint L_ap(uint B) + { + return B ^ Integers.RotateLeft(B, 13) ^ Integers.RotateLeft(B, 23); + } + + private uint T_ap(uint Z) + { + return L_ap(tau(Z)); + } + + // Key expansion + private void ExpandKey(bool forEncryption, byte[] key) + { + uint K0 = Pack.BE_To_UInt32(key, 0) ^ FK[0]; + uint K1 = Pack.BE_To_UInt32(key, 4) ^ FK[1]; + uint K2 = Pack.BE_To_UInt32(key, 8) ^ FK[2]; + uint K3 = Pack.BE_To_UInt32(key, 12) ^ FK[3]; + + if (forEncryption) + { + rk[0] = K0 ^ T_ap(K1 ^ K2 ^ K3 ^ CK[0]); + rk[1] = K1 ^ T_ap(K2 ^ K3 ^ rk[0] ^ CK[1]); + rk[2] = K2 ^ T_ap(K3 ^ rk[0] ^ rk[1] ^ CK[2]); + rk[3] = K3 ^ T_ap(rk[0] ^ rk[1] ^ rk[2] ^ CK[3]); + for (int i = 4; i < 32; ++i) + { + rk[i] = rk[i - 4] ^ T_ap(rk[i - 3] ^ rk[i - 2] ^ rk[i - 1] ^ CK[i]); + } + } + else + { + rk[31] = K0 ^ T_ap(K1 ^ K2 ^ K3 ^ CK[0]); + rk[30] = K1 ^ T_ap(K2 ^ K3 ^ rk[31] ^ CK[1]); + rk[29] = K2 ^ T_ap(K3 ^ rk[31] ^ rk[30] ^ CK[2]); + rk[28] = K3 ^ T_ap(rk[31] ^ rk[30] ^ rk[29] ^ CK[3]); + for (int i = 27; i >= 0; --i) + { + rk[i] = rk[i + 4] ^ T_ap(rk[i + 3] ^ rk[i + 2] ^ rk[i + 1] ^ CK[31 - i]); + } + } + } + + // Linear substitution L + private static uint L(uint B) + { + return B ^ Integers.RotateLeft(B, 2) ^ Integers.RotateLeft(B, 10) ^ Integers.RotateLeft(B, 18) ^ Integers.RotateLeft(B, 24); + } + + // Mixer-substitution T + private static uint T(uint Z) + { + return L(tau(Z)); + } + + public virtual void Init(bool forEncryption, ICipherParameters parameters) + { + KeyParameter keyParameter = parameters as KeyParameter; + if (null == keyParameter) + throw new ArgumentException("invalid parameter passed to SM4 init - " + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters), "parameters"); + + byte[] key = keyParameter.GetKey(); + if (key.Length != 16) + throw new ArgumentException("SM4 requires a 128 bit key", "parameters"); + + if (null == rk) + { + rk = new uint[32]; + } + + ExpandKey(forEncryption, key); + } + + public virtual string AlgorithmName + { + get { return "SM4"; } + } + + public virtual int GetBlockSize() + { + return BlockSize; + } + + public virtual int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (null == rk) + throw new InvalidOperationException("SM4 not initialised"); + + Check.DataLength(input, inOff, BlockSize, "input buffer too short"); + Check.OutputLength(output, outOff, BlockSize, "output buffer too short"); + + uint X0 = Pack.BE_To_UInt32(input, inOff); + uint X1 = Pack.BE_To_UInt32(input, inOff + 4); + uint X2 = Pack.BE_To_UInt32(input, inOff + 8); + uint X3 = Pack.BE_To_UInt32(input, inOff + 12); + + for (int i = 0; i < 32; i += 4) + { + X0 ^= T(X1 ^ X2 ^ X3 ^ rk[i ]); // F0 + X1 ^= T(X2 ^ X3 ^ X0 ^ rk[i + 1]); // F1 + X2 ^= T(X3 ^ X0 ^ X1 ^ rk[i + 2]); // F2 + X3 ^= T(X0 ^ X1 ^ X2 ^ rk[i + 3]); // F3 + } + + Pack.UInt32_To_BE(X3, output, outOff); + Pack.UInt32_To_BE(X2, output, outOff + 4); + Pack.UInt32_To_BE(X1, output, outOff + 8); + Pack.UInt32_To_BE(X0, output, outOff + 12); + + return BlockSize; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + if (null == rk) + throw new InvalidOperationException("SM4 not initialised"); + + Check.DataLength(input, BlockSize, "input buffer too short"); + Check.OutputLength(output, BlockSize, "output buffer too short"); + + uint X0 = Pack.BE_To_UInt32(input); + uint X1 = Pack.BE_To_UInt32(input[4..]); + uint X2 = Pack.BE_To_UInt32(input[8..]); + uint X3 = Pack.BE_To_UInt32(input[12..]); + + for (int i = 0; i < 32; i += 4) + { + X0 ^= T(X1 ^ X2 ^ X3 ^ rk[i ]); // F0 + X1 ^= T(X2 ^ X3 ^ X0 ^ rk[i + 1]); // F1 + X2 ^= T(X3 ^ X0 ^ X1 ^ rk[i + 2]); // F2 + X3 ^= T(X0 ^ X1 ^ X2 ^ rk[i + 3]); // F3 + } + + Pack.UInt32_To_BE(X3, output); + Pack.UInt32_To_BE(X2, output[4..]); + Pack.UInt32_To_BE(X1, output[8..]); + Pack.UInt32_To_BE(X0, output[12..]); + + return BlockSize; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SM4Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SM4Engine.cs.meta new file mode 100644 index 000000000..8c9c66ee6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SM4Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f458e754a7e6c3c4aa5af54a925ccf12 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Salsa20Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Salsa20Engine.cs new file mode 100644 index 000000000..19fe935bf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Salsa20Engine.cs @@ -0,0 +1,512 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER +using System.Runtime.CompilerServices; +#endif +#if NETCOREAPP3_0_OR_GREATER +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /// + /// Implementation of Daniel J. Bernstein's Salsa20 stream cipher, Snuffle 2005 + /// + public class Salsa20Engine + : IStreamCipher + { + public static readonly int DEFAULT_ROUNDS = 20; + + /** Constants */ + private const int StateSize = 16; // 16, 32 bit ints = 64 bytes + + private readonly static uint[] TAU_SIGMA = Pack.LE_To_UInt32(Strings.ToAsciiByteArray("expand 16-byte k" + "expand 32-byte k"), 0, 8); + + internal void PackTauOrSigma(int keyLength, uint[] state, int stateOffset) + { + int tsOff = (keyLength - 16) / 4; + state[stateOffset] = TAU_SIGMA[tsOff]; + state[stateOffset + 1] = TAU_SIGMA[tsOff + 1]; + state[stateOffset + 2] = TAU_SIGMA[tsOff + 2]; + state[stateOffset + 3] = TAU_SIGMA[tsOff + 3]; + } + + protected int rounds; + + /* + * variables to hold the state of the engine + * during encryption and decryption + */ + internal int index = 0; + internal uint[] engineState = new uint[StateSize]; // state + internal uint[] x = new uint[StateSize]; // internal buffer + internal byte[] keyStream = new byte[StateSize * 4]; // expanded state, 64 bytes + internal bool initialised = false; + + /* + * internal counter + */ + private uint cW0, cW1, cW2; + + /// + /// Creates a 20 round Salsa20 engine. + /// + public Salsa20Engine() + : this(DEFAULT_ROUNDS) + { + } + + /// + /// Creates a Salsa20 engine with a specific number of rounds. + /// + /// the number of rounds (must be an even number). + public Salsa20Engine(int rounds) + { + if (rounds <= 0 || (rounds & 1) != 0) + { + throw new ArgumentException("'rounds' must be a positive, even number"); + } + + this.rounds = rounds; + } + + public virtual void Init( + bool forEncryption, + ICipherParameters parameters) + { + /* + * Salsa20 encryption and decryption is completely + * symmetrical, so the 'forEncryption' is + * irrelevant. (Like 90% of stream ciphers) + */ + + ParametersWithIV ivParams = parameters as ParametersWithIV; + if (ivParams == null) + throw new ArgumentException(AlgorithmName + " Init requires an IV", "parameters"); + + byte[] iv = ivParams.GetIV(); + if (iv == null || iv.Length != NonceSize) + throw new ArgumentException(AlgorithmName + " requires exactly " + NonceSize + " bytes of IV"); + + ICipherParameters keyParam = ivParams.Parameters; + if (keyParam == null) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " KeyParameter can not be null for first initialisation"); + + SetKey(null, iv); + } + else if (keyParam is KeyParameter) + { + SetKey(((KeyParameter)keyParam).GetKey(), iv); + } + else + { + throw new ArgumentException(AlgorithmName + " Init parameters must contain a KeyParameter (or null for re-init)"); + } + + Reset(); + initialised = true; + } + + protected virtual int NonceSize + { + get { return 8; } + } + + public virtual string AlgorithmName + { + get + { + string name = "Salsa20"; + if (rounds != DEFAULT_ROUNDS) + { + name += "/" + rounds; + } + return name; + } + } + + public virtual byte ReturnByte( + byte input) + { + if (LimitExceeded()) + { + throw new MaxBytesExceededException("2^70 byte limit per IV; Change IV"); + } + + if (index == 0) + { + GenerateKeyStream(keyStream); + AdvanceCounter(); + } + + byte output = (byte)(keyStream[index] ^ input); + index = (index + 1) & 63; + + return output; + } + + protected virtual void AdvanceCounter() + { + if (++engineState[8] == 0) + { + ++engineState[9]; + } + } + + public virtual void ProcessBytes( + byte[] inBytes, + int inOff, + int len, + byte[] outBytes, + int outOff) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.DataLength(inBytes, inOff, len, "input buffer too short"); + Check.OutputLength(outBytes, outOff, len, "output buffer too short"); + + if (LimitExceeded((uint)len)) + throw new MaxBytesExceededException("2^70 byte limit per IV would be exceeded; Change IV"); + + for (int i = 0; i < len; i++) + { + if (index == 0) + { + GenerateKeyStream(keyStream); + AdvanceCounter(); + } + outBytes[i+outOff] = (byte)(keyStream[index]^inBytes[i+inOff]); + index = (index + 1) & 63; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void ProcessBytes(ReadOnlySpan input, Span output) + { + if (!initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.OutputLength(output, input.Length, "output buffer too short"); + + if (LimitExceeded((uint)input.Length)) + throw new MaxBytesExceededException("2^70 byte limit per IV would be exceeded; Change IV"); + + for (int i = 0; i < input.Length; i++) + { + if (index == 0) + { + GenerateKeyStream(keyStream); + AdvanceCounter(); + } + output[i] = (byte)(keyStream[index++] ^ input[i]); + index &= 63; + } + } +#endif + + public virtual void Reset() + { + index = 0; + ResetLimitCounter(); + ResetCounter(); + } + + protected virtual void ResetCounter() + { + engineState[8] = engineState[9] = 0; + } + + protected virtual void SetKey(byte[] keyBytes, byte[] ivBytes) + { + if (keyBytes != null) + { + if ((keyBytes.Length != 16) && (keyBytes.Length != 32)) + throw new ArgumentException(AlgorithmName + " requires 128 bit or 256 bit key"); + + int tsOff = (keyBytes.Length - 16) / 4; + engineState[0] = TAU_SIGMA[tsOff]; + engineState[5] = TAU_SIGMA[tsOff + 1]; + engineState[10] = TAU_SIGMA[tsOff + 2]; + engineState[15] = TAU_SIGMA[tsOff + 3]; + + // Key + Pack.LE_To_UInt32(keyBytes, 0, engineState, 1, 4); + Pack.LE_To_UInt32(keyBytes, keyBytes.Length - 16, engineState, 11, 4); + } + + // IV + Pack.LE_To_UInt32(ivBytes, 0, engineState, 6, 2); + } + + protected virtual void GenerateKeyStream(byte[] output) + { + SalsaCore(rounds, engineState, x); + Pack.UInt32_To_LE(x, output, 0); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal static void SalsaCore(int rounds, ReadOnlySpan input, Span output) + { + if (input.Length < 16) + throw new ArgumentException(); + if (output.Length < 16) + throw new ArgumentException(); + if (rounds % 2 != 0) + throw new ArgumentException("Number of rounds must be even"); + +#if NETCOREAPP3_0_OR_GREATER + if (Sse41.IsSupported && BitConverter.IsLittleEndian && Unsafe.SizeOf>() == 16) + { + Vector128 b0, b1, b2, b3; + { + var I = MemoryMarshal.AsBytes(input[..16]); + var t0 = MemoryMarshal.Read>(I[0x00..0x10]); + var t1 = MemoryMarshal.Read>(I[0x10..0x20]); + var t2 = MemoryMarshal.Read>(I[0x20..0x30]); + var t3 = MemoryMarshal.Read>(I[0x30..0x40]); + + var u0 = Sse41.Blend(t0, t2, 0xF0); + var u1 = Sse41.Blend(t1, t3, 0xC3); + var u2 = Sse41.Blend(t0, t2, 0x0F); + var u3 = Sse41.Blend(t1, t3, 0x3C); + + b0 = Sse41.Blend(u0, u1, 0xCC).AsUInt32(); + b1 = Sse41.Blend(u0, u1, 0x33).AsUInt32(); + b2 = Sse41.Blend(u2, u3, 0xCC).AsUInt32(); + b3 = Sse41.Blend(u2, u3, 0x33).AsUInt32(); + } + + var c0 = b0; + var c1 = b1; + var c2 = b2; + var c3 = b3; + + for (int i = rounds; i > 0; i -= 2) + { + QuarterRound_Sse2(ref c0, ref c3, ref c2, ref c1); + QuarterRound_Sse2(ref c0, ref c1, ref c2, ref c3); + } + + b0 = Sse2.Add(b0, c0); + b1 = Sse2.Add(b1, c1); + b2 = Sse2.Add(b2, c2); + b3 = Sse2.Add(b3, c3); + + { + var t0 = b0.AsUInt16(); + var t1 = b1.AsUInt16(); + var t2 = b2.AsUInt16(); + var t3 = b3.AsUInt16(); + + var u0 = Sse41.Blend(t0, t1, 0xCC); + var u1 = Sse41.Blend(t0, t1, 0x33); + var u2 = Sse41.Blend(t2, t3, 0xCC); + var u3 = Sse41.Blend(t2, t3, 0x33); + + var v0 = Sse41.Blend(u0, u2, 0xF0); + var v1 = Sse41.Blend(u1, u3, 0xC3); + var v2 = Sse41.Blend(u0, u2, 0x0F); + var v3 = Sse41.Blend(u1, u3, 0x3C); + + var X = MemoryMarshal.AsBytes(output[..16]); + MemoryMarshal.Write(X[0x00..0x10], ref v0); + MemoryMarshal.Write(X[0x10..0x20], ref v1); + MemoryMarshal.Write(X[0x20..0x30], ref v2); + MemoryMarshal.Write(X[0x30..0x40], ref v3); + } + return; + } +#endif + + uint x00 = input[ 0]; + uint x01 = input[ 1]; + uint x02 = input[ 2]; + uint x03 = input[ 3]; + uint x04 = input[ 4]; + uint x05 = input[ 5]; + uint x06 = input[ 6]; + uint x07 = input[ 7]; + uint x08 = input[ 8]; + uint x09 = input[ 9]; + uint x10 = input[10]; + uint x11 = input[11]; + uint x12 = input[12]; + uint x13 = input[13]; + uint x14 = input[14]; + uint x15 = input[15]; + + for (int i = rounds; i > 0; i -= 2) + { + QuarterRound(ref x00, ref x04, ref x08, ref x12); + QuarterRound(ref x05, ref x09, ref x13, ref x01); + QuarterRound(ref x10, ref x14, ref x02, ref x06); + QuarterRound(ref x15, ref x03, ref x07, ref x11); + + QuarterRound(ref x00, ref x01, ref x02, ref x03); + QuarterRound(ref x05, ref x06, ref x07, ref x04); + QuarterRound(ref x10, ref x11, ref x08, ref x09); + QuarterRound(ref x15, ref x12, ref x13, ref x14); + } + + output[ 0] = x00 + input[ 0]; + output[ 1] = x01 + input[ 1]; + output[ 2] = x02 + input[ 2]; + output[ 3] = x03 + input[ 3]; + output[ 4] = x04 + input[ 4]; + output[ 5] = x05 + input[ 5]; + output[ 6] = x06 + input[ 6]; + output[ 7] = x07 + input[ 7]; + output[ 8] = x08 + input[ 8]; + output[ 9] = x09 + input[ 9]; + output[10] = x10 + input[10]; + output[11] = x11 + input[11]; + output[12] = x12 + input[12]; + output[13] = x13 + input[13]; + output[14] = x14 + input[14]; + output[15] = x15 + input[15]; + } +#else + internal static void SalsaCore(int rounds, uint[] input, uint[] output) + { + if (input.Length < 16) + throw new ArgumentException(); + if (output.Length < 16) + throw new ArgumentException(); + if (rounds % 2 != 0) + throw new ArgumentException("Number of rounds must be even"); + + uint x00 = input[ 0]; + uint x01 = input[ 1]; + uint x02 = input[ 2]; + uint x03 = input[ 3]; + uint x04 = input[ 4]; + uint x05 = input[ 5]; + uint x06 = input[ 6]; + uint x07 = input[ 7]; + uint x08 = input[ 8]; + uint x09 = input[ 9]; + uint x10 = input[10]; + uint x11 = input[11]; + uint x12 = input[12]; + uint x13 = input[13]; + uint x14 = input[14]; + uint x15 = input[15]; + + for (int i = rounds; i > 0; i -= 2) + { + QuarterRound(ref x00, ref x04, ref x08, ref x12); + QuarterRound(ref x05, ref x09, ref x13, ref x01); + QuarterRound(ref x10, ref x14, ref x02, ref x06); + QuarterRound(ref x15, ref x03, ref x07, ref x11); + + QuarterRound(ref x00, ref x01, ref x02, ref x03); + QuarterRound(ref x05, ref x06, ref x07, ref x04); + QuarterRound(ref x10, ref x11, ref x08, ref x09); + QuarterRound(ref x15, ref x12, ref x13, ref x14); + } + + output[ 0] = x00 + input[ 0]; + output[ 1] = x01 + input[ 1]; + output[ 2] = x02 + input[ 2]; + output[ 3] = x03 + input[ 3]; + output[ 4] = x04 + input[ 4]; + output[ 5] = x05 + input[ 5]; + output[ 6] = x06 + input[ 6]; + output[ 7] = x07 + input[ 7]; + output[ 8] = x08 + input[ 8]; + output[ 9] = x09 + input[ 9]; + output[10] = x10 + input[10]; + output[11] = x11 + input[11]; + output[12] = x12 + input[12]; + output[13] = x13 + input[13]; + output[14] = x14 + input[14]; + output[15] = x15 + input[15]; + } +#endif + + internal void ResetLimitCounter() + { + cW0 = 0; + cW1 = 0; + cW2 = 0; + } + + internal bool LimitExceeded() + { + if (++cW0 == 0) + { + if (++cW1 == 0) + { + return (++cW2 & 0x20) != 0; // 2^(32 + 32 + 6) + } + } + + return false; + } + + /* + * this relies on the fact len will always be positive. + */ + internal bool LimitExceeded( + uint len) + { + uint old = cW0; + cW0 += len; + if (cW0 < old) + { + if (++cW1 == 0) + { + return (++cW2 & 0x20) != 0; // 2^(32 + 32 + 6) + } + } + + return false; + } + +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static void QuarterRound(ref uint a, ref uint b, ref uint c, ref uint d) + { + b ^= Integers.RotateLeft(a + d, 7); + c ^= Integers.RotateLeft(b + a, 9); + d ^= Integers.RotateLeft(c + b, 13); + a ^= Integers.RotateLeft(d + c, 18); + } + +#if NETCOREAPP3_0_OR_GREATER + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void QuarterRound_Sse2(ref Vector128 a, ref Vector128 b, ref Vector128 c, + ref Vector128 d) + { + b = Sse2.Xor(b, Rotate_Sse2(Sse2.Add(a, d), 7)); + c = Sse2.Xor(c, Rotate_Sse2(Sse2.Add(b, a), 9)); + d = Sse2.Xor(d, Rotate_Sse2(Sse2.Add(c, b), 13)); + a = Sse2.Xor(a, Rotate_Sse2(Sse2.Add(d, c), 18)); + + b = Sse2.Shuffle(b, 0x93); + c = Sse2.Shuffle(c, 0x4E); + d = Sse2.Shuffle(d, 0x39); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static Vector128 Rotate_Sse2(Vector128 x, byte sl) + { + byte sr = (byte)(32 - sl); + return Sse2.Xor(Sse2.ShiftLeftLogical(x, sl), Sse2.ShiftRightLogical(x, sr)); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Salsa20Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Salsa20Engine.cs.meta new file mode 100644 index 000000000..65228f44b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/Salsa20Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e6638eb0b1fe30e45ada9cdca38690cd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SerpentEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SerpentEngine.cs new file mode 100644 index 000000000..bf62104cc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SerpentEngine.cs @@ -0,0 +1,405 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * Serpent is a 128-bit 32-round block cipher with variable key lengths, + * including 128, 192 and 256 bit keys conjectured to be at least as + * secure as three-key triple-DES. + *

+ * Serpent was designed by Ross Anderson, Eli Biham and Lars Knudsen as a + * candidate algorithm for the NIST AES Quest. + *

+ *

+ * For full details see The Serpent home page + *

+ */ + public sealed class SerpentEngine + : SerpentEngineBase + { + /** + * Expand a user-supplied key material into a session key. + * + * @param key The user-key bytes (multiples of 4) to use. + * @exception ArgumentException + */ + internal override int[] MakeWorkingKey(byte[] key) + { + // + // pad key to 256 bits + // + int[] kPad = new int[16]; + int off = 0; + int length = 0; + + for (off = 0; (off + 4) < key.Length; off += 4) + { + kPad[length++] = (int)Pack.LE_To_UInt32(key, off); + } + + if (off % 4 == 0) + { + kPad[length++] = (int)Pack.LE_To_UInt32(key, off); + if (length < 8) + { + kPad[length] = 1; + } + } + else + { + throw new ArgumentException("key must be a multiple of 4 bytes"); + } + + // + // expand the padded key up to 33 x 128 bits of key material + // + int amount = (ROUNDS + 1) * 4; + int[] w = new int[amount]; + + // + // compute w0 to w7 from w-8 to w-1 + // + for (int i = 8; i < 16; i++) + { + kPad[i] = Integers.RotateLeft(kPad[i - 8] ^ kPad[i - 5] ^ kPad[i - 3] ^ kPad[i - 1] ^ PHI ^ (i - 8), 11); + } + + Array.Copy(kPad, 8, w, 0, 8); + + // + // compute w8 to w136 + // + for (int i = 8; i < amount; i++) + { + w[i] = Integers.RotateLeft(w[i - 8] ^ w[i - 5] ^ w[i - 3] ^ w[i - 1] ^ PHI ^ i, 11); + } + + // + // create the working keys by processing w with the Sbox and IP + // + Sb3(w[0], w[1], w[2], w[3]); + w[0] = X0; w[1] = X1; w[2] = X2; w[3] = X3; + Sb2(w[4], w[5], w[6], w[7]); + w[4] = X0; w[5] = X1; w[6] = X2; w[7] = X3; + Sb1(w[8], w[9], w[10], w[11]); + w[8] = X0; w[9] = X1; w[10] = X2; w[11] = X3; + Sb0(w[12], w[13], w[14], w[15]); + w[12] = X0; w[13] = X1; w[14] = X2; w[15] = X3; + Sb7(w[16], w[17], w[18], w[19]); + w[16] = X0; w[17] = X1; w[18] = X2; w[19] = X3; + Sb6(w[20], w[21], w[22], w[23]); + w[20] = X0; w[21] = X1; w[22] = X2; w[23] = X3; + Sb5(w[24], w[25], w[26], w[27]); + w[24] = X0; w[25] = X1; w[26] = X2; w[27] = X3; + Sb4(w[28], w[29], w[30], w[31]); + w[28] = X0; w[29] = X1; w[30] = X2; w[31] = X3; + Sb3(w[32], w[33], w[34], w[35]); + w[32] = X0; w[33] = X1; w[34] = X2; w[35] = X3; + Sb2(w[36], w[37], w[38], w[39]); + w[36] = X0; w[37] = X1; w[38] = X2; w[39] = X3; + Sb1(w[40], w[41], w[42], w[43]); + w[40] = X0; w[41] = X1; w[42] = X2; w[43] = X3; + Sb0(w[44], w[45], w[46], w[47]); + w[44] = X0; w[45] = X1; w[46] = X2; w[47] = X3; + Sb7(w[48], w[49], w[50], w[51]); + w[48] = X0; w[49] = X1; w[50] = X2; w[51] = X3; + Sb6(w[52], w[53], w[54], w[55]); + w[52] = X0; w[53] = X1; w[54] = X2; w[55] = X3; + Sb5(w[56], w[57], w[58], w[59]); + w[56] = X0; w[57] = X1; w[58] = X2; w[59] = X3; + Sb4(w[60], w[61], w[62], w[63]); + w[60] = X0; w[61] = X1; w[62] = X2; w[63] = X3; + Sb3(w[64], w[65], w[66], w[67]); + w[64] = X0; w[65] = X1; w[66] = X2; w[67] = X3; + Sb2(w[68], w[69], w[70], w[71]); + w[68] = X0; w[69] = X1; w[70] = X2; w[71] = X3; + Sb1(w[72], w[73], w[74], w[75]); + w[72] = X0; w[73] = X1; w[74] = X2; w[75] = X3; + Sb0(w[76], w[77], w[78], w[79]); + w[76] = X0; w[77] = X1; w[78] = X2; w[79] = X3; + Sb7(w[80], w[81], w[82], w[83]); + w[80] = X0; w[81] = X1; w[82] = X2; w[83] = X3; + Sb6(w[84], w[85], w[86], w[87]); + w[84] = X0; w[85] = X1; w[86] = X2; w[87] = X3; + Sb5(w[88], w[89], w[90], w[91]); + w[88] = X0; w[89] = X1; w[90] = X2; w[91] = X3; + Sb4(w[92], w[93], w[94], w[95]); + w[92] = X0; w[93] = X1; w[94] = X2; w[95] = X3; + Sb3(w[96], w[97], w[98], w[99]); + w[96] = X0; w[97] = X1; w[98] = X2; w[99] = X3; + Sb2(w[100], w[101], w[102], w[103]); + w[100] = X0; w[101] = X1; w[102] = X2; w[103] = X3; + Sb1(w[104], w[105], w[106], w[107]); + w[104] = X0; w[105] = X1; w[106] = X2; w[107] = X3; + Sb0(w[108], w[109], w[110], w[111]); + w[108] = X0; w[109] = X1; w[110] = X2; w[111] = X3; + Sb7(w[112], w[113], w[114], w[115]); + w[112] = X0; w[113] = X1; w[114] = X2; w[115] = X3; + Sb6(w[116], w[117], w[118], w[119]); + w[116] = X0; w[117] = X1; w[118] = X2; w[119] = X3; + Sb5(w[120], w[121], w[122], w[123]); + w[120] = X0; w[121] = X1; w[122] = X2; w[123] = X3; + Sb4(w[124], w[125], w[126], w[127]); + w[124] = X0; w[125] = X1; w[126] = X2; w[127] = X3; + Sb3(w[128], w[129], w[130], w[131]); + w[128] = X0; w[129] = X1; w[130] = X2; w[131] = X3; + + return w; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal override void EncryptBlock(ReadOnlySpan input, Span output) + { + X0 = (int)Pack.LE_To_UInt32(input); + X1 = (int)Pack.LE_To_UInt32(input[4..]); + X2 = (int)Pack.LE_To_UInt32(input[8..]); + X3 = (int)Pack.LE_To_UInt32(input[12..]); + + Sb0(wKey[0] ^ X0, wKey[1] ^ X1, wKey[2] ^ X2, wKey[3] ^ X3); LT(); + Sb1(wKey[4] ^ X0, wKey[5] ^ X1, wKey[6] ^ X2, wKey[7] ^ X3); LT(); + Sb2(wKey[8] ^ X0, wKey[9] ^ X1, wKey[10] ^ X2, wKey[11] ^ X3); LT(); + Sb3(wKey[12] ^ X0, wKey[13] ^ X1, wKey[14] ^ X2, wKey[15] ^ X3); LT(); + Sb4(wKey[16] ^ X0, wKey[17] ^ X1, wKey[18] ^ X2, wKey[19] ^ X3); LT(); + Sb5(wKey[20] ^ X0, wKey[21] ^ X1, wKey[22] ^ X2, wKey[23] ^ X3); LT(); + Sb6(wKey[24] ^ X0, wKey[25] ^ X1, wKey[26] ^ X2, wKey[27] ^ X3); LT(); + Sb7(wKey[28] ^ X0, wKey[29] ^ X1, wKey[30] ^ X2, wKey[31] ^ X3); LT(); + Sb0(wKey[32] ^ X0, wKey[33] ^ X1, wKey[34] ^ X2, wKey[35] ^ X3); LT(); + Sb1(wKey[36] ^ X0, wKey[37] ^ X1, wKey[38] ^ X2, wKey[39] ^ X3); LT(); + Sb2(wKey[40] ^ X0, wKey[41] ^ X1, wKey[42] ^ X2, wKey[43] ^ X3); LT(); + Sb3(wKey[44] ^ X0, wKey[45] ^ X1, wKey[46] ^ X2, wKey[47] ^ X3); LT(); + Sb4(wKey[48] ^ X0, wKey[49] ^ X1, wKey[50] ^ X2, wKey[51] ^ X3); LT(); + Sb5(wKey[52] ^ X0, wKey[53] ^ X1, wKey[54] ^ X2, wKey[55] ^ X3); LT(); + Sb6(wKey[56] ^ X0, wKey[57] ^ X1, wKey[58] ^ X2, wKey[59] ^ X3); LT(); + Sb7(wKey[60] ^ X0, wKey[61] ^ X1, wKey[62] ^ X2, wKey[63] ^ X3); LT(); + Sb0(wKey[64] ^ X0, wKey[65] ^ X1, wKey[66] ^ X2, wKey[67] ^ X3); LT(); + Sb1(wKey[68] ^ X0, wKey[69] ^ X1, wKey[70] ^ X2, wKey[71] ^ X3); LT(); + Sb2(wKey[72] ^ X0, wKey[73] ^ X1, wKey[74] ^ X2, wKey[75] ^ X3); LT(); + Sb3(wKey[76] ^ X0, wKey[77] ^ X1, wKey[78] ^ X2, wKey[79] ^ X3); LT(); + Sb4(wKey[80] ^ X0, wKey[81] ^ X1, wKey[82] ^ X2, wKey[83] ^ X3); LT(); + Sb5(wKey[84] ^ X0, wKey[85] ^ X1, wKey[86] ^ X2, wKey[87] ^ X3); LT(); + Sb6(wKey[88] ^ X0, wKey[89] ^ X1, wKey[90] ^ X2, wKey[91] ^ X3); LT(); + Sb7(wKey[92] ^ X0, wKey[93] ^ X1, wKey[94] ^ X2, wKey[95] ^ X3); LT(); + Sb0(wKey[96] ^ X0, wKey[97] ^ X1, wKey[98] ^ X2, wKey[99] ^ X3); LT(); + Sb1(wKey[100] ^ X0, wKey[101] ^ X1, wKey[102] ^ X2, wKey[103] ^ X3); LT(); + Sb2(wKey[104] ^ X0, wKey[105] ^ X1, wKey[106] ^ X2, wKey[107] ^ X3); LT(); + Sb3(wKey[108] ^ X0, wKey[109] ^ X1, wKey[110] ^ X2, wKey[111] ^ X3); LT(); + Sb4(wKey[112] ^ X0, wKey[113] ^ X1, wKey[114] ^ X2, wKey[115] ^ X3); LT(); + Sb5(wKey[116] ^ X0, wKey[117] ^ X1, wKey[118] ^ X2, wKey[119] ^ X3); LT(); + Sb6(wKey[120] ^ X0, wKey[121] ^ X1, wKey[122] ^ X2, wKey[123] ^ X3); LT(); + Sb7(wKey[124] ^ X0, wKey[125] ^ X1, wKey[126] ^ X2, wKey[127] ^ X3); + + Pack.UInt32_To_LE((uint)(wKey[128] ^ X0), output); + Pack.UInt32_To_LE((uint)(wKey[129] ^ X1), output[4..]); + Pack.UInt32_To_LE((uint)(wKey[130] ^ X2), output[8..]); + Pack.UInt32_To_LE((uint)(wKey[131] ^ X3), output[12..]); + } + + internal override void DecryptBlock(ReadOnlySpan input, Span output) + { + X0 = wKey[128] ^ (int)Pack.LE_To_UInt32(input); + X1 = wKey[129] ^ (int)Pack.LE_To_UInt32(input[4..]); + X2 = wKey[130] ^ (int)Pack.LE_To_UInt32(input[8..]); + X3 = wKey[131] ^ (int)Pack.LE_To_UInt32(input[12..]); + + Ib7(X0, X1, X2, X3); + X0 ^= wKey[124]; X1 ^= wKey[125]; X2 ^= wKey[126]; X3 ^= wKey[127]; + InverseLT(); Ib6(X0, X1, X2, X3); + X0 ^= wKey[120]; X1 ^= wKey[121]; X2 ^= wKey[122]; X3 ^= wKey[123]; + InverseLT(); Ib5(X0, X1, X2, X3); + X0 ^= wKey[116]; X1 ^= wKey[117]; X2 ^= wKey[118]; X3 ^= wKey[119]; + InverseLT(); Ib4(X0, X1, X2, X3); + X0 ^= wKey[112]; X1 ^= wKey[113]; X2 ^= wKey[114]; X3 ^= wKey[115]; + InverseLT(); Ib3(X0, X1, X2, X3); + X0 ^= wKey[108]; X1 ^= wKey[109]; X2 ^= wKey[110]; X3 ^= wKey[111]; + InverseLT(); Ib2(X0, X1, X2, X3); + X0 ^= wKey[104]; X1 ^= wKey[105]; X2 ^= wKey[106]; X3 ^= wKey[107]; + InverseLT(); Ib1(X0, X1, X2, X3); + X0 ^= wKey[100]; X1 ^= wKey[101]; X2 ^= wKey[102]; X3 ^= wKey[103]; + InverseLT(); Ib0(X0, X1, X2, X3); + X0 ^= wKey[96]; X1 ^= wKey[97]; X2 ^= wKey[98]; X3 ^= wKey[99]; + InverseLT(); Ib7(X0, X1, X2, X3); + X0 ^= wKey[92]; X1 ^= wKey[93]; X2 ^= wKey[94]; X3 ^= wKey[95]; + InverseLT(); Ib6(X0, X1, X2, X3); + X0 ^= wKey[88]; X1 ^= wKey[89]; X2 ^= wKey[90]; X3 ^= wKey[91]; + InverseLT(); Ib5(X0, X1, X2, X3); + X0 ^= wKey[84]; X1 ^= wKey[85]; X2 ^= wKey[86]; X3 ^= wKey[87]; + InverseLT(); Ib4(X0, X1, X2, X3); + X0 ^= wKey[80]; X1 ^= wKey[81]; X2 ^= wKey[82]; X3 ^= wKey[83]; + InverseLT(); Ib3(X0, X1, X2, X3); + X0 ^= wKey[76]; X1 ^= wKey[77]; X2 ^= wKey[78]; X3 ^= wKey[79]; + InverseLT(); Ib2(X0, X1, X2, X3); + X0 ^= wKey[72]; X1 ^= wKey[73]; X2 ^= wKey[74]; X3 ^= wKey[75]; + InverseLT(); Ib1(X0, X1, X2, X3); + X0 ^= wKey[68]; X1 ^= wKey[69]; X2 ^= wKey[70]; X3 ^= wKey[71]; + InverseLT(); Ib0(X0, X1, X2, X3); + X0 ^= wKey[64]; X1 ^= wKey[65]; X2 ^= wKey[66]; X3 ^= wKey[67]; + InverseLT(); Ib7(X0, X1, X2, X3); + X0 ^= wKey[60]; X1 ^= wKey[61]; X2 ^= wKey[62]; X3 ^= wKey[63]; + InverseLT(); Ib6(X0, X1, X2, X3); + X0 ^= wKey[56]; X1 ^= wKey[57]; X2 ^= wKey[58]; X3 ^= wKey[59]; + InverseLT(); Ib5(X0, X1, X2, X3); + X0 ^= wKey[52]; X1 ^= wKey[53]; X2 ^= wKey[54]; X3 ^= wKey[55]; + InverseLT(); Ib4(X0, X1, X2, X3); + X0 ^= wKey[48]; X1 ^= wKey[49]; X2 ^= wKey[50]; X3 ^= wKey[51]; + InverseLT(); Ib3(X0, X1, X2, X3); + X0 ^= wKey[44]; X1 ^= wKey[45]; X2 ^= wKey[46]; X3 ^= wKey[47]; + InverseLT(); Ib2(X0, X1, X2, X3); + X0 ^= wKey[40]; X1 ^= wKey[41]; X2 ^= wKey[42]; X3 ^= wKey[43]; + InverseLT(); Ib1(X0, X1, X2, X3); + X0 ^= wKey[36]; X1 ^= wKey[37]; X2 ^= wKey[38]; X3 ^= wKey[39]; + InverseLT(); Ib0(X0, X1, X2, X3); + X0 ^= wKey[32]; X1 ^= wKey[33]; X2 ^= wKey[34]; X3 ^= wKey[35]; + InverseLT(); Ib7(X0, X1, X2, X3); + X0 ^= wKey[28]; X1 ^= wKey[29]; X2 ^= wKey[30]; X3 ^= wKey[31]; + InverseLT(); Ib6(X0, X1, X2, X3); + X0 ^= wKey[24]; X1 ^= wKey[25]; X2 ^= wKey[26]; X3 ^= wKey[27]; + InverseLT(); Ib5(X0, X1, X2, X3); + X0 ^= wKey[20]; X1 ^= wKey[21]; X2 ^= wKey[22]; X3 ^= wKey[23]; + InverseLT(); Ib4(X0, X1, X2, X3); + X0 ^= wKey[16]; X1 ^= wKey[17]; X2 ^= wKey[18]; X3 ^= wKey[19]; + InverseLT(); Ib3(X0, X1, X2, X3); + X0 ^= wKey[12]; X1 ^= wKey[13]; X2 ^= wKey[14]; X3 ^= wKey[15]; + InverseLT(); Ib2(X0, X1, X2, X3); + X0 ^= wKey[8]; X1 ^= wKey[9]; X2 ^= wKey[10]; X3 ^= wKey[11]; + InverseLT(); Ib1(X0, X1, X2, X3); + X0 ^= wKey[4]; X1 ^= wKey[5]; X2 ^= wKey[6]; X3 ^= wKey[7]; + InverseLT(); Ib0(X0, X1, X2, X3); + + Pack.UInt32_To_LE((uint)(X0 ^ wKey[0]), output); + Pack.UInt32_To_LE((uint)(X1 ^ wKey[1]), output[4..]); + Pack.UInt32_To_LE((uint)(X2 ^ wKey[2]), output[8..]); + Pack.UInt32_To_LE((uint)(X3 ^ wKey[3]), output[12..]); + } +#else + internal override void EncryptBlock(byte[] input, int inOff, byte[] output, int outOff) + { + X0 = (int)Pack.LE_To_UInt32(input, inOff); + X1 = (int)Pack.LE_To_UInt32(input, inOff + 4); + X2 = (int)Pack.LE_To_UInt32(input, inOff + 8); + X3 = (int)Pack.LE_To_UInt32(input, inOff + 12); + + Sb0(wKey[0] ^ X0, wKey[1] ^ X1, wKey[2] ^ X2, wKey[3] ^ X3); LT(); + Sb1(wKey[4] ^ X0, wKey[5] ^ X1, wKey[6] ^ X2, wKey[7] ^ X3); LT(); + Sb2(wKey[8] ^ X0, wKey[9] ^ X1, wKey[10] ^ X2, wKey[11] ^ X3); LT(); + Sb3(wKey[12] ^ X0, wKey[13] ^ X1, wKey[14] ^ X2, wKey[15] ^ X3); LT(); + Sb4(wKey[16] ^ X0, wKey[17] ^ X1, wKey[18] ^ X2, wKey[19] ^ X3); LT(); + Sb5(wKey[20] ^ X0, wKey[21] ^ X1, wKey[22] ^ X2, wKey[23] ^ X3); LT(); + Sb6(wKey[24] ^ X0, wKey[25] ^ X1, wKey[26] ^ X2, wKey[27] ^ X3); LT(); + Sb7(wKey[28] ^ X0, wKey[29] ^ X1, wKey[30] ^ X2, wKey[31] ^ X3); LT(); + Sb0(wKey[32] ^ X0, wKey[33] ^ X1, wKey[34] ^ X2, wKey[35] ^ X3); LT(); + Sb1(wKey[36] ^ X0, wKey[37] ^ X1, wKey[38] ^ X2, wKey[39] ^ X3); LT(); + Sb2(wKey[40] ^ X0, wKey[41] ^ X1, wKey[42] ^ X2, wKey[43] ^ X3); LT(); + Sb3(wKey[44] ^ X0, wKey[45] ^ X1, wKey[46] ^ X2, wKey[47] ^ X3); LT(); + Sb4(wKey[48] ^ X0, wKey[49] ^ X1, wKey[50] ^ X2, wKey[51] ^ X3); LT(); + Sb5(wKey[52] ^ X0, wKey[53] ^ X1, wKey[54] ^ X2, wKey[55] ^ X3); LT(); + Sb6(wKey[56] ^ X0, wKey[57] ^ X1, wKey[58] ^ X2, wKey[59] ^ X3); LT(); + Sb7(wKey[60] ^ X0, wKey[61] ^ X1, wKey[62] ^ X2, wKey[63] ^ X3); LT(); + Sb0(wKey[64] ^ X0, wKey[65] ^ X1, wKey[66] ^ X2, wKey[67] ^ X3); LT(); + Sb1(wKey[68] ^ X0, wKey[69] ^ X1, wKey[70] ^ X2, wKey[71] ^ X3); LT(); + Sb2(wKey[72] ^ X0, wKey[73] ^ X1, wKey[74] ^ X2, wKey[75] ^ X3); LT(); + Sb3(wKey[76] ^ X0, wKey[77] ^ X1, wKey[78] ^ X2, wKey[79] ^ X3); LT(); + Sb4(wKey[80] ^ X0, wKey[81] ^ X1, wKey[82] ^ X2, wKey[83] ^ X3); LT(); + Sb5(wKey[84] ^ X0, wKey[85] ^ X1, wKey[86] ^ X2, wKey[87] ^ X3); LT(); + Sb6(wKey[88] ^ X0, wKey[89] ^ X1, wKey[90] ^ X2, wKey[91] ^ X3); LT(); + Sb7(wKey[92] ^ X0, wKey[93] ^ X1, wKey[94] ^ X2, wKey[95] ^ X3); LT(); + Sb0(wKey[96] ^ X0, wKey[97] ^ X1, wKey[98] ^ X2, wKey[99] ^ X3); LT(); + Sb1(wKey[100] ^ X0, wKey[101] ^ X1, wKey[102] ^ X2, wKey[103] ^ X3); LT(); + Sb2(wKey[104] ^ X0, wKey[105] ^ X1, wKey[106] ^ X2, wKey[107] ^ X3); LT(); + Sb3(wKey[108] ^ X0, wKey[109] ^ X1, wKey[110] ^ X2, wKey[111] ^ X3); LT(); + Sb4(wKey[112] ^ X0, wKey[113] ^ X1, wKey[114] ^ X2, wKey[115] ^ X3); LT(); + Sb5(wKey[116] ^ X0, wKey[117] ^ X1, wKey[118] ^ X2, wKey[119] ^ X3); LT(); + Sb6(wKey[120] ^ X0, wKey[121] ^ X1, wKey[122] ^ X2, wKey[123] ^ X3); LT(); + Sb7(wKey[124] ^ X0, wKey[125] ^ X1, wKey[126] ^ X2, wKey[127] ^ X3); + + Pack.UInt32_To_LE((uint)(wKey[128] ^ X0), output, outOff); + Pack.UInt32_To_LE((uint)(wKey[129] ^ X1), output, outOff + 4); + Pack.UInt32_To_LE((uint)(wKey[130] ^ X2), output, outOff + 8); + Pack.UInt32_To_LE((uint)(wKey[131] ^ X3), output, outOff + 12); + } + + internal override void DecryptBlock(byte[] input, int inOff, byte[] output, int outOff) + { + X0 = wKey[128] ^ (int)Pack.LE_To_UInt32(input, inOff); + X1 = wKey[129] ^ (int)Pack.LE_To_UInt32(input, inOff + 4); + X2 = wKey[130] ^ (int)Pack.LE_To_UInt32(input, inOff + 8); + X3 = wKey[131] ^ (int)Pack.LE_To_UInt32(input, inOff + 12); + + Ib7(X0, X1, X2, X3); + X0 ^= wKey[124]; X1 ^= wKey[125]; X2 ^= wKey[126]; X3 ^= wKey[127]; + InverseLT(); Ib6(X0, X1, X2, X3); + X0 ^= wKey[120]; X1 ^= wKey[121]; X2 ^= wKey[122]; X3 ^= wKey[123]; + InverseLT(); Ib5(X0, X1, X2, X3); + X0 ^= wKey[116]; X1 ^= wKey[117]; X2 ^= wKey[118]; X3 ^= wKey[119]; + InverseLT(); Ib4(X0, X1, X2, X3); + X0 ^= wKey[112]; X1 ^= wKey[113]; X2 ^= wKey[114]; X3 ^= wKey[115]; + InverseLT(); Ib3(X0, X1, X2, X3); + X0 ^= wKey[108]; X1 ^= wKey[109]; X2 ^= wKey[110]; X3 ^= wKey[111]; + InverseLT(); Ib2(X0, X1, X2, X3); + X0 ^= wKey[104]; X1 ^= wKey[105]; X2 ^= wKey[106]; X3 ^= wKey[107]; + InverseLT(); Ib1(X0, X1, X2, X3); + X0 ^= wKey[100]; X1 ^= wKey[101]; X2 ^= wKey[102]; X3 ^= wKey[103]; + InverseLT(); Ib0(X0, X1, X2, X3); + X0 ^= wKey[96]; X1 ^= wKey[97]; X2 ^= wKey[98]; X3 ^= wKey[99]; + InverseLT(); Ib7(X0, X1, X2, X3); + X0 ^= wKey[92]; X1 ^= wKey[93]; X2 ^= wKey[94]; X3 ^= wKey[95]; + InverseLT(); Ib6(X0, X1, X2, X3); + X0 ^= wKey[88]; X1 ^= wKey[89]; X2 ^= wKey[90]; X3 ^= wKey[91]; + InverseLT(); Ib5(X0, X1, X2, X3); + X0 ^= wKey[84]; X1 ^= wKey[85]; X2 ^= wKey[86]; X3 ^= wKey[87]; + InverseLT(); Ib4(X0, X1, X2, X3); + X0 ^= wKey[80]; X1 ^= wKey[81]; X2 ^= wKey[82]; X3 ^= wKey[83]; + InverseLT(); Ib3(X0, X1, X2, X3); + X0 ^= wKey[76]; X1 ^= wKey[77]; X2 ^= wKey[78]; X3 ^= wKey[79]; + InverseLT(); Ib2(X0, X1, X2, X3); + X0 ^= wKey[72]; X1 ^= wKey[73]; X2 ^= wKey[74]; X3 ^= wKey[75]; + InverseLT(); Ib1(X0, X1, X2, X3); + X0 ^= wKey[68]; X1 ^= wKey[69]; X2 ^= wKey[70]; X3 ^= wKey[71]; + InverseLT(); Ib0(X0, X1, X2, X3); + X0 ^= wKey[64]; X1 ^= wKey[65]; X2 ^= wKey[66]; X3 ^= wKey[67]; + InverseLT(); Ib7(X0, X1, X2, X3); + X0 ^= wKey[60]; X1 ^= wKey[61]; X2 ^= wKey[62]; X3 ^= wKey[63]; + InverseLT(); Ib6(X0, X1, X2, X3); + X0 ^= wKey[56]; X1 ^= wKey[57]; X2 ^= wKey[58]; X3 ^= wKey[59]; + InverseLT(); Ib5(X0, X1, X2, X3); + X0 ^= wKey[52]; X1 ^= wKey[53]; X2 ^= wKey[54]; X3 ^= wKey[55]; + InverseLT(); Ib4(X0, X1, X2, X3); + X0 ^= wKey[48]; X1 ^= wKey[49]; X2 ^= wKey[50]; X3 ^= wKey[51]; + InverseLT(); Ib3(X0, X1, X2, X3); + X0 ^= wKey[44]; X1 ^= wKey[45]; X2 ^= wKey[46]; X3 ^= wKey[47]; + InverseLT(); Ib2(X0, X1, X2, X3); + X0 ^= wKey[40]; X1 ^= wKey[41]; X2 ^= wKey[42]; X3 ^= wKey[43]; + InverseLT(); Ib1(X0, X1, X2, X3); + X0 ^= wKey[36]; X1 ^= wKey[37]; X2 ^= wKey[38]; X3 ^= wKey[39]; + InverseLT(); Ib0(X0, X1, X2, X3); + X0 ^= wKey[32]; X1 ^= wKey[33]; X2 ^= wKey[34]; X3 ^= wKey[35]; + InverseLT(); Ib7(X0, X1, X2, X3); + X0 ^= wKey[28]; X1 ^= wKey[29]; X2 ^= wKey[30]; X3 ^= wKey[31]; + InverseLT(); Ib6(X0, X1, X2, X3); + X0 ^= wKey[24]; X1 ^= wKey[25]; X2 ^= wKey[26]; X3 ^= wKey[27]; + InverseLT(); Ib5(X0, X1, X2, X3); + X0 ^= wKey[20]; X1 ^= wKey[21]; X2 ^= wKey[22]; X3 ^= wKey[23]; + InverseLT(); Ib4(X0, X1, X2, X3); + X0 ^= wKey[16]; X1 ^= wKey[17]; X2 ^= wKey[18]; X3 ^= wKey[19]; + InverseLT(); Ib3(X0, X1, X2, X3); + X0 ^= wKey[12]; X1 ^= wKey[13]; X2 ^= wKey[14]; X3 ^= wKey[15]; + InverseLT(); Ib2(X0, X1, X2, X3); + X0 ^= wKey[8]; X1 ^= wKey[9]; X2 ^= wKey[10]; X3 ^= wKey[11]; + InverseLT(); Ib1(X0, X1, X2, X3); + X0 ^= wKey[4]; X1 ^= wKey[5]; X2 ^= wKey[6]; X3 ^= wKey[7]; + InverseLT(); Ib0(X0, X1, X2, X3); + + Pack.UInt32_To_LE((uint)(X0 ^ wKey[0]), output, outOff); + Pack.UInt32_To_LE((uint)(X1 ^ wKey[1]), output, outOff + 4); + Pack.UInt32_To_LE((uint)(X2 ^ wKey[2]), output, outOff + 8); + Pack.UInt32_To_LE((uint)(X3 ^ wKey[3]), output, outOff + 12); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SerpentEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SerpentEngine.cs.meta new file mode 100644 index 000000000..1fda676ac --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SerpentEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 491e4a3043740fb4aa22329380b4cbe4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SerpentEngineBase.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SerpentEngineBase.cs new file mode 100644 index 000000000..8602a38fa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SerpentEngineBase.cs @@ -0,0 +1,491 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + public abstract class SerpentEngineBase + : IBlockCipher + { + protected static readonly int BlockSize = 16; + + internal const int ROUNDS = 32; + internal const int PHI = unchecked((int)0x9E3779B9); // (sqrt(5) - 1) * 2**31 + + protected bool encrypting; + protected int[] wKey; + + protected int X0, X1, X2, X3; // registers + + internal SerpentEngineBase() + { + } + + /** + * initialise a Serpent cipher. + * + * @param encrypting whether or not we are for encryption. + * @param params the parameters required to set up the cipher. + * @throws IllegalArgumentException if the params argument is + * inappropriate. + */ + public virtual void Init(bool encrypting, ICipherParameters parameters) + { + if (!(parameters is KeyParameter)) + throw new ArgumentException("invalid parameter passed to " + AlgorithmName + " init - " + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + + this.encrypting = encrypting; + this.wKey = MakeWorkingKey(((KeyParameter)parameters).GetKey()); + } + + public virtual string AlgorithmName + { + get { return "Serpent"; } + } + + public virtual int GetBlockSize() + { + return BlockSize; + } + + /** + * Process one block of input from the array in and write it to + * the out array. + * + * @param in the array containing the input data. + * @param inOff offset into the in array the data starts at. + * @param out the array the output data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @return the number of bytes processed and produced. + * @throws DataLengthException if there isn't enough data in in, or + * space in out. + * @throws IllegalStateException if the cipher isn't initialised. + */ + public int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (wKey == null) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.DataLength(input, inOff, BlockSize, "input buffer too short"); + Check.OutputLength(output, outOff, BlockSize, "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + if (encrypting) + { + EncryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); + } + else + { + DecryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); + } +#else + if (encrypting) + { + EncryptBlock(input, inOff, output, outOff); + } + else + { + DecryptBlock(input, inOff, output, outOff); + } +#endif + + return BlockSize; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessBlock(ReadOnlySpan input, Span output) + { + if (wKey == null) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.DataLength(input, BlockSize, "input buffer too short"); + Check.OutputLength(output, BlockSize, "output buffer too short"); + + if (encrypting) + { + EncryptBlock(input, output); + } + else + { + DecryptBlock(input, output); + } + + return BlockSize; + } +#endif + + /* + * The sboxes below are based on the work of Brian Gladman and + * Sam Simpson, whose original notice appears below. + *

+ * For further details see: + * http://fp.gladman.plus.com/cryptography_technology/serpent/ + *

+ */ + + /* Partially optimised Serpent S Box boolean functions derived */ + /* using a recursive descent analyser but without a full search */ + /* of all subtrees. This set of S boxes is the result of work */ + /* by Sam Simpson and Brian Gladman using the spare time on a */ + /* cluster of high capacity servers to search for S boxes with */ + /* this customised search engine. There are now an average of */ + /* 15.375 terms per S box. */ + /* */ + /* Copyright: Dr B. R Gladman (gladman@seven77.demon.co.uk) */ + /* and Sam Simpson (s.simpson@mia.co.uk) */ + /* 17th December 1998 */ + /* */ + /* We hereby give permission for information in this file to be */ + /* used freely subject only to acknowledgement of its origin. */ + + /* + * S0 - { 3, 8,15, 1,10, 6, 5,11,14,13, 4, 2, 7, 0, 9,12 } - 15 terms. + */ + protected void Sb0(int a, int b, int c, int d) + { + int t1 = a ^ d; + int t3 = c ^ t1; + int t4 = b ^ t3; + X3 = (a & d) ^ t4; + int t7 = a ^ (b & t1); + X2 = t4 ^ (c | t7); + int t12 = X3 & (t3 ^ t7); + X1 = (~t3) ^ t12; + X0 = t12 ^ (~t7); + } + + /** + * InvSO - {13, 3,11, 0,10, 6, 5,12, 1,14, 4, 7,15, 9, 8, 2 } - 15 terms. + */ + protected void Ib0(int a, int b, int c, int d) + { + int t1 = ~a; + int t2 = a ^ b; + int t4 = d ^ (t1 | t2); + int t5 = c ^ t4; + X2 = t2 ^ t5; + int t8 = t1 ^ (d & t2); + X1 = t4 ^ (X2 & t8); + X3 = (a & t4) ^ (t5 | X1); + X0 = X3 ^ (t5 ^ t8); + } + + /** + * S1 - {15,12, 2, 7, 9, 0, 5,10, 1,11,14, 8, 6,13, 3, 4 } - 14 terms. + */ + protected void Sb1(int a, int b, int c, int d) + { + int t2 = b ^ (~a); + int t5 = c ^ (a | t2); + X2 = d ^ t5; + int t7 = b ^ (d | t2); + int t8 = t2 ^ X2; + X3 = t8 ^ (t5 & t7); + int t11 = t5 ^ t7; + X1 = X3 ^ t11; + X0 = t5 ^ (t8 & t11); + } + + /** + * InvS1 - { 5, 8, 2,14,15, 6,12, 3,11, 4, 7, 9, 1,13,10, 0 } - 14 steps. + */ + protected void Ib1(int a, int b, int c, int d) + { + int t1 = b ^ d; + int t3 = a ^ (b & t1); + int t4 = t1 ^ t3; + X3 = c ^ t4; + int t7 = b ^ (t1 & t3); + int t8 = X3 | t7; + X1 = t3 ^ t8; + int t10 = ~X1; + int t11 = X3 ^ t7; + X0 = t10 ^ t11; + X2 = t4 ^ (t10 | t11); + } + + /** + * S2 - { 8, 6, 7, 9, 3,12,10,15,13, 1,14, 4, 0,11, 5, 2 } - 16 terms. + */ + protected void Sb2(int a, int b, int c, int d) + { + int t1 = ~a; + int t2 = b ^ d; + int t3 = c & t1; + X0 = t2 ^ t3; + int t5 = c ^ t1; + int t6 = c ^ X0; + int t7 = b & t6; + X3 = t5 ^ t7; + X2 = a ^ ((d | t7) & (X0 | t5)); + X1 = (t2 ^ X3) ^ (X2 ^ (d | t1)); + } + + /** + * InvS2 - {12, 9,15, 4,11,14, 1, 2, 0, 3, 6,13, 5, 8,10, 7 } - 16 steps. + */ + protected void Ib2(int a, int b, int c, int d) + { + int t1 = b ^ d; + int t2 = ~t1; + int t3 = a ^ c; + int t4 = c ^ t1; + int t5 = b & t4; + X0 = t3 ^ t5; + int t7 = a | t2; + int t8 = d ^ t7; + int t9 = t3 | t8; + X3 = t1 ^ t9; + int t11 = ~t4; + int t12 = X0 | X3; + X1 = t11 ^ t12; + X2 = (d & t11) ^ (t3 ^ t12); + } + + /** + * S3 - { 0,15,11, 8,12, 9, 6, 3,13, 1, 2, 4,10, 7, 5,14 } - 16 terms. + */ + protected void Sb3(int a, int b, int c, int d) + { + int t1 = a ^ b; + int t2 = a & c; + int t3 = a | d; + int t4 = c ^ d; + int t5 = t1 & t3; + int t6 = t2 | t5; + X2 = t4 ^ t6; + int t8 = b ^ t3; + int t9 = t6 ^ t8; + int t10 = t4 & t9; + X0 = t1 ^ t10; + int t12 = X2 & X0; + X1 = t9 ^ t12; + X3 = (b | d) ^ (t4 ^ t12); + } + + /** + * InvS3 - { 0, 9,10, 7,11,14, 6,13, 3, 5,12, 2, 4, 8,15, 1 } - 15 terms + */ + protected void Ib3(int a, int b, int c, int d) + { + int t1 = a | b; + int t2 = b ^ c; + int t3 = b & t2; + int t4 = a ^ t3; + int t5 = c ^ t4; + int t6 = d | t4; + X0 = t2 ^ t6; + int t8 = t2 | t6; + int t9 = d ^ t8; + X2 = t5 ^ t9; + int t11 = t1 ^ t9; + int t12 = X0 & t11; + X3 = t4 ^ t12; + X1 = X3 ^ (X0 ^ t11); + } + + /** + * S4 - { 1,15, 8, 3,12, 0,11, 6, 2, 5, 4,10, 9,14, 7,13 } - 15 terms. + */ + protected void Sb4(int a, int b, int c, int d) + { + int t1 = a ^ d; + int t2 = d & t1; + int t3 = c ^ t2; + int t4 = b | t3; + X3 = t1 ^ t4; + int t6 = ~b; + int t7 = t1 | t6; + X0 = t3 ^ t7; + int t9 = a & X0; + int t10 = t1 ^ t6; + int t11 = t4 & t10; + X2 = t9 ^ t11; + X1 = (a ^ t3) ^ (t10 & X2); + } + + /** + * InvS4 - { 5, 0, 8, 3,10, 9, 7,14, 2,12,11, 6, 4,15,13, 1 } - 15 terms. + */ + protected void Ib4(int a, int b, int c, int d) + { + int t1 = c | d; + int t2 = a & t1; + int t3 = b ^ t2; + int t4 = a & t3; + int t5 = c ^ t4; + X1 = d ^ t5; + int t7 = ~a; + int t8 = t5 & X1; + X3 = t3 ^ t8; + int t10 = X1 | t7; + int t11 = d ^ t10; + X0 = X3 ^ t11; + X2 = (t3 & t11) ^ (X1 ^ t7); + } + + /** + * S5 - {15, 5, 2,11, 4,10, 9,12, 0, 3,14, 8,13, 6, 7, 1 } - 16 terms. + */ + protected void Sb5(int a, int b, int c, int d) + { + int t1 = ~a; + int t2 = a ^ b; + int t3 = a ^ d; + int t4 = c ^ t1; + int t5 = t2 | t3; + X0 = t4 ^ t5; + int t7 = d & X0; + int t8 = t2 ^ X0; + X1 = t7 ^ t8; + int t10 = t1 | X0; + int t11 = t2 | t7; + int t12 = t3 ^ t10; + X2 = t11 ^ t12; + X3 = (b ^ t7) ^ (X1 & t12); + } + + /** + * InvS5 - { 8,15, 2, 9, 4, 1,13,14,11, 6, 5, 3, 7,12,10, 0 } - 16 terms. + */ + protected void Ib5(int a, int b, int c, int d) + { + int t1 = ~c; + int t2 = b & t1; + int t3 = d ^ t2; + int t4 = a & t3; + int t5 = b ^ t1; + X3 = t4 ^ t5; + int t7 = b | X3; + int t8 = a & t7; + X1 = t3 ^ t8; + int t10 = a | d; + int t11 = t1 ^ t7; + X0 = t10 ^ t11; + X2 = (b & t10) ^ (t4 | (a ^ c)); + } + + /** + * S6 - { 7, 2,12, 5, 8, 4, 6,11,14, 9, 1,15,13, 3,10, 0 } - 15 terms. + */ + protected void Sb6(int a, int b, int c, int d) + { + int t1 = ~a; + int t2 = a ^ d; + int t3 = b ^ t2; + int t4 = t1 | t2; + int t5 = c ^ t4; + X1 = b ^ t5; + int t7 = t2 | X1; + int t8 = d ^ t7; + int t9 = t5 & t8; + X2 = t3 ^ t9; + int t11 = t5 ^ t8; + X0 = X2 ^ t11; + X3 = (~t5) ^ (t3 & t11); + } + + /** + * InvS6 - {15,10, 1,13, 5, 3, 6, 0, 4, 9,14, 7, 2,12, 8,11 } - 15 terms. + */ + protected void Ib6(int a, int b, int c, int d) + { + int t1 = ~a; + int t2 = a ^ b; + int t3 = c ^ t2; + int t4 = c | t1; + int t5 = d ^ t4; + X1 = t3 ^ t5; + int t7 = t3 & t5; + int t8 = t2 ^ t7; + int t9 = b | t8; + X3 = t5 ^ t9; + int t11 = b | X3; + X0 = t8 ^ t11; + X2 = (d & t1) ^ (t3 ^ t11); + } + + /** + * S7 - { 1,13,15, 0,14, 8, 2,11, 7, 4,12,10, 9, 3, 5, 6 } - 16 terms. + */ + protected void Sb7(int a, int b, int c, int d) + { + int t1 = b ^ c; + int t2 = c & t1; + int t3 = d ^ t2; + int t4 = a ^ t3; + int t5 = d | t1; + int t6 = t4 & t5; + X1 = b ^ t6; + int t8 = t3 | X1; + int t9 = a & t4; + X3 = t1 ^ t9; + int t11 = t4 ^ t8; + int t12 = X3 & t11; + X2 = t3 ^ t12; + X0 = (~t11) ^ (X3 & X2); + } + + /** + * InvS7 - { 3, 0, 6,13, 9,14,15, 8, 5,12,11, 7,10, 1, 4, 2 } - 17 terms. + */ + protected void Ib7(int a, int b, int c, int d) + { + int t3 = c | (a & b); + int t4 = d & (a | b); + X3 = t3 ^ t4; + int t6 = ~d; + int t7 = b ^ t4; + int t9 = t7 | (X3 ^ t6); + X1 = a ^ t9; + X0 = (c ^ t7) ^ (d | X1); + X2 = (t3 ^ X1) ^ (X0 ^ (a & X3)); + } + + /** + * Apply the linear transformation to the register set. + */ + protected void LT() + { + int x0 = Integers.RotateLeft(X0, 13); + int x2 = Integers.RotateLeft(X2, 3); + int x1 = X1 ^ x0 ^ x2; + int x3 = X3 ^ x2 ^ x0 << 3; + + X1 = Integers.RotateLeft(x1, 1); + X3 = Integers.RotateLeft(x3, 7); + X0 = Integers.RotateLeft(x0 ^ X1 ^ X3, 5); + X2 = Integers.RotateLeft(x2 ^ X3 ^ (X1 << 7), 22); + } + + /** + * Apply the inverse of the linear transformation to the register set. + */ + protected void InverseLT() + { + int x2 = Integers.RotateRight(X2, 22) ^ X3 ^ (X1 << 7); + int x0 = Integers.RotateRight(X0, 5) ^ X1 ^ X3; + int x3 = Integers.RotateRight(X3, 7); + int x1 = Integers.RotateRight(X1, 1); + X3 = x3 ^ x2 ^ x0 << 3; + X1 = x1 ^ x0 ^ x2; + X2 = Integers.RotateRight(x2, 3); + X0 = Integers.RotateRight(x0, 13); + } + + internal abstract int[] MakeWorkingKey(byte[] key); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal abstract void EncryptBlock(ReadOnlySpan input, Span output); + internal abstract void DecryptBlock(ReadOnlySpan input, Span output); +#else + internal abstract void EncryptBlock(byte[] input, int inOff, byte[] output, int outOff); + internal abstract void DecryptBlock(byte[] input, int inOff, byte[] output, int outOff); +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SerpentEngineBase.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SerpentEngineBase.cs.meta new file mode 100644 index 000000000..047ea6b71 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SerpentEngineBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f164055e1ead4fa418746f4253a72692 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SkipjackEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SkipjackEngine.cs new file mode 100644 index 000000000..f8e6551b6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SkipjackEngine.cs @@ -0,0 +1,355 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * a class that provides a basic SKIPJACK engine. + */ + public sealed class SkipjackEngine + : IBlockCipher + { + private const int BLOCK_SIZE = 8; + + private static readonly short[] ftable = + { + 0xa3, 0xd7, 0x09, 0x83, 0xf8, 0x48, 0xf6, 0xf4, 0xb3, 0x21, 0x15, 0x78, 0x99, 0xb1, 0xaf, 0xf9, + 0xe7, 0x2d, 0x4d, 0x8a, 0xce, 0x4c, 0xca, 0x2e, 0x52, 0x95, 0xd9, 0x1e, 0x4e, 0x38, 0x44, 0x28, + 0x0a, 0xdf, 0x02, 0xa0, 0x17, 0xf1, 0x60, 0x68, 0x12, 0xb7, 0x7a, 0xc3, 0xe9, 0xfa, 0x3d, 0x53, + 0x96, 0x84, 0x6b, 0xba, 0xf2, 0x63, 0x9a, 0x19, 0x7c, 0xae, 0xe5, 0xf5, 0xf7, 0x16, 0x6a, 0xa2, + 0x39, 0xb6, 0x7b, 0x0f, 0xc1, 0x93, 0x81, 0x1b, 0xee, 0xb4, 0x1a, 0xea, 0xd0, 0x91, 0x2f, 0xb8, + 0x55, 0xb9, 0xda, 0x85, 0x3f, 0x41, 0xbf, 0xe0, 0x5a, 0x58, 0x80, 0x5f, 0x66, 0x0b, 0xd8, 0x90, + 0x35, 0xd5, 0xc0, 0xa7, 0x33, 0x06, 0x65, 0x69, 0x45, 0x00, 0x94, 0x56, 0x6d, 0x98, 0x9b, 0x76, + 0x97, 0xfc, 0xb2, 0xc2, 0xb0, 0xfe, 0xdb, 0x20, 0xe1, 0xeb, 0xd6, 0xe4, 0xdd, 0x47, 0x4a, 0x1d, + 0x42, 0xed, 0x9e, 0x6e, 0x49, 0x3c, 0xcd, 0x43, 0x27, 0xd2, 0x07, 0xd4, 0xde, 0xc7, 0x67, 0x18, + 0x89, 0xcb, 0x30, 0x1f, 0x8d, 0xc6, 0x8f, 0xaa, 0xc8, 0x74, 0xdc, 0xc9, 0x5d, 0x5c, 0x31, 0xa4, + 0x70, 0x88, 0x61, 0x2c, 0x9f, 0x0d, 0x2b, 0x87, 0x50, 0x82, 0x54, 0x64, 0x26, 0x7d, 0x03, 0x40, + 0x34, 0x4b, 0x1c, 0x73, 0xd1, 0xc4, 0xfd, 0x3b, 0xcc, 0xfb, 0x7f, 0xab, 0xe6, 0x3e, 0x5b, 0xa5, + 0xad, 0x04, 0x23, 0x9c, 0x14, 0x51, 0x22, 0xf0, 0x29, 0x79, 0x71, 0x7e, 0xff, 0x8c, 0x0e, 0xe2, + 0x0c, 0xef, 0xbc, 0x72, 0x75, 0x6f, 0x37, 0xa1, 0xec, 0xd3, 0x8e, 0x62, 0x8b, 0x86, 0x10, 0xe8, + 0x08, 0x77, 0x11, 0xbe, 0x92, 0x4f, 0x24, 0xc5, 0x32, 0x36, 0x9d, 0xcf, 0xf3, 0xa6, 0xbb, 0xac, + 0x5e, 0x6c, 0xa9, 0x13, 0x57, 0x25, 0xb5, 0xe3, 0xbd, 0xa8, 0x3a, 0x01, 0x05, 0x59, 0x2a, 0x46 + }; + + private int[] key0, key1, key2, key3; + private bool encrypting; + + /** + * initialise a SKIPJACK cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param parameters the parameters required to set up the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public void Init(bool forEncryption, ICipherParameters parameters) + { + if (!(parameters is KeyParameter keyParameter)) + throw new ArgumentException("invalid parameter passed to SKIPJACK init - " + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + + byte[] keyBytes = keyParameter.GetKey(); + + this.encrypting = forEncryption; + this.key0 = new int[32]; + this.key1 = new int[32]; + this.key2 = new int[32]; + this.key3 = new int[32]; + + // + // expand the key to 128 bytes in 4 parts (saving us a modulo, multiply + // and an addition). + // + for (int i = 0; i < 32; i++) + { + key0[i] = keyBytes[(i * 4 + 0) % 10]; + key1[i] = keyBytes[(i * 4 + 1) % 10]; + key2[i] = keyBytes[(i * 4 + 2) % 10]; + key3[i] = keyBytes[(i * 4 + 3) % 10]; + } + } + + public string AlgorithmName + { + get { return "SKIPJACK"; } + } + + public int GetBlockSize() + { + return BLOCK_SIZE; + } + + public int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (key1 == null) + throw new InvalidOperationException("SKIPJACK engine not initialised"); + + Check.DataLength(input, inOff, BLOCK_SIZE, "input buffer too short"); + Check.OutputLength(output, outOff, BLOCK_SIZE, "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + if (encrypting) + { + EncryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); + } + else + { + DecryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); + } +#else + if (encrypting) + { + EncryptBlock(input, inOff, output, outOff); + } + else + { + DecryptBlock(input, inOff, output, outOff); + } +#endif + + return BLOCK_SIZE; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessBlock(ReadOnlySpan input, Span output) + { + if (key1 == null) + throw new InvalidOperationException("SKIPJACK engine not initialised"); + + Check.DataLength(input, BLOCK_SIZE, "input buffer too short"); + Check.OutputLength(output, BLOCK_SIZE, "output buffer too short"); + + if (encrypting) + { + EncryptBlock(input, output); + } + else + { + DecryptBlock(input, output); + } + + return BLOCK_SIZE; + } +#endif + + /** + * The G permutation + */ + private int G( + int k, + int w) + { + int g1, g2, g3, g4, g5, g6; + + g1 = (w >> 8) & 0xff; + g2 = w & 0xff; + + g3 = ftable[g2 ^ key0[k]] ^ g1; + g4 = ftable[g3 ^ key1[k]] ^ g2; + g5 = ftable[g4 ^ key2[k]] ^ g3; + g6 = ftable[g5 ^ key3[k]] ^ g4; + + return ((g5 << 8) + g6); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int EncryptBlock(ReadOnlySpan input, Span output) + { + int w1 = (input[0] << 8) + (input[1] & 0xff); + int w2 = (input[2] << 8) + (input[3] & 0xff); + int w3 = (input[4] << 8) + (input[5] & 0xff); + int w4 = (input[6] << 8) + (input[7] & 0xff); + + int k = 0; + + for (int t = 0; t < 2; t++) + { + for (int i = 0; i < 8; i++) + { + int tmp = w4; + w4 = w3; + w3 = w2; + w2 = G(k, w1); + w1 = w2 ^ tmp ^ (k + 1); + k++; + } + + for (int i = 0; i < 8; i++) + { + int tmp = w4; + w4 = w3; + w3 = w1 ^ w2 ^ (k + 1); + w2 = G(k, w1); + w1 = tmp; + k++; + } + } + + output[0] = (byte)((w1 >> 8)); + output[1] = (byte)(w1); + output[2] = (byte)((w2 >> 8)); + output[3] = (byte)(w2); + output[4] = (byte)((w3 >> 8)); + output[5] = (byte)(w3); + output[6] = (byte)((w4 >> 8)); + output[7] = (byte)(w4); + + return BLOCK_SIZE; + } + + private int DecryptBlock(ReadOnlySpan input, Span output) + { + int w2 = (input[0] << 8) + (input[1] & 0xff); + int w1 = (input[2] << 8) + (input[3] & 0xff); + int w4 = (input[4] << 8) + (input[5] & 0xff); + int w3 = (input[6] << 8) + (input[7] & 0xff); + + int k = 31; + + for (int t = 0; t < 2; t++) + { + for (int i = 0; i < 8; i++) + { + int tmp = w4; + w4 = w3; + w3 = w2; + w2 = H(k, w1); + w1 = w2 ^ tmp ^ (k + 1); + k--; + } + + for (int i = 0; i < 8; i++) + { + int tmp = w4; + w4 = w3; + w3 = w1 ^ w2 ^ (k + 1); + w2 = H(k, w1); + w1 = tmp; + k--; + } + } + + output[0] = (byte)((w2 >> 8)); + output[1] = (byte)(w2); + output[2] = (byte)((w1 >> 8)); + output[3] = (byte)(w1); + output[4] = (byte)((w4 >> 8)); + output[5] = (byte)(w4); + output[6] = (byte)((w3 >> 8)); + output[7] = (byte)(w3); + + return BLOCK_SIZE; + } + +#else + private int EncryptBlock(byte[] input, int inOff, byte[] outBytes, int outOff) + { + int w1 = (input[inOff + 0] << 8) + (input[inOff + 1] & 0xff); + int w2 = (input[inOff + 2] << 8) + (input[inOff + 3] & 0xff); + int w3 = (input[inOff + 4] << 8) + (input[inOff + 5] & 0xff); + int w4 = (input[inOff + 6] << 8) + (input[inOff + 7] & 0xff); + + int k = 0; + + for (int t = 0; t < 2; t++) + { + for(int i = 0; i < 8; i++) + { + int tmp = w4; + w4 = w3; + w3 = w2; + w2 = G(k, w1); + w1 = w2 ^ tmp ^ (k + 1); + k++; + } + + for(int i = 0; i < 8; i++) + { + int tmp = w4; + w4 = w3; + w3 = w1 ^ w2 ^ (k + 1); + w2 = G(k, w1); + w1 = tmp; + k++; + } + } + + outBytes[outOff + 0] = (byte)((w1 >> 8)); + outBytes[outOff + 1] = (byte)(w1); + outBytes[outOff + 2] = (byte)((w2 >> 8)); + outBytes[outOff + 3] = (byte)(w2); + outBytes[outOff + 4] = (byte)((w3 >> 8)); + outBytes[outOff + 5] = (byte)(w3); + outBytes[outOff + 6] = (byte)((w4 >> 8)); + outBytes[outOff + 7] = (byte)(w4); + + return BLOCK_SIZE; + } + + private int DecryptBlock(byte[] input, int inOff, byte[] outBytes, int outOff) + { + int w2 = (input[inOff + 0] << 8) + (input[inOff + 1] & 0xff); + int w1 = (input[inOff + 2] << 8) + (input[inOff + 3] & 0xff); + int w4 = (input[inOff + 4] << 8) + (input[inOff + 5] & 0xff); + int w3 = (input[inOff + 6] << 8) + (input[inOff + 7] & 0xff); + + int k = 31; + + for (int t = 0; t < 2; t++) + { + for (int i = 0; i < 8; i++) + { + int tmp = w4; + w4 = w3; + w3 = w2; + w2 = H(k, w1); + w1 = w2 ^ tmp ^ (k + 1); + k--; + } + + for (int i = 0; i < 8; i++) + { + int tmp = w4; + w4 = w3; + w3 = w1 ^ w2 ^ (k + 1); + w2 = H(k, w1); + w1 = tmp; + k--; + } + } + + outBytes[outOff + 0] = (byte)((w2 >> 8)); + outBytes[outOff + 1] = (byte)(w2); + outBytes[outOff + 2] = (byte)((w1 >> 8)); + outBytes[outOff + 3] = (byte)(w1); + outBytes[outOff + 4] = (byte)((w4 >> 8)); + outBytes[outOff + 5] = (byte)(w4); + outBytes[outOff + 6] = (byte)((w3 >> 8)); + outBytes[outOff + 7] = (byte)(w3); + + return BLOCK_SIZE; + } +#endif + + /** + * the inverse of the G permutation. + */ + private int H(int k, int w) + { + int h1 = w & 0xff; + int h2 = (w >> 8) & 0xff; + + int h3 = ftable[h2 ^ key3[k]] ^ h1; + int h4 = ftable[h3 ^ key2[k]] ^ h2; + int h5 = ftable[h4 ^ key1[k]] ^ h3; + int h6 = ftable[h5 ^ key0[k]] ^ h4; + + return (h6 << 8) + h5; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SkipjackEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SkipjackEngine.cs.meta new file mode 100644 index 000000000..14ba42369 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/SkipjackEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ee50d237d55d7f9409d3850b96c5a875 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/TEAEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/TEAEngine.cs new file mode 100644 index 000000000..6becb1993 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/TEAEngine.cs @@ -0,0 +1,209 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * An TEA engine. + */ + public class TeaEngine + : IBlockCipher + { + private const int + rounds = 32, + block_size = 8; +// key_size = 16, + + private const uint + delta = 0x9E3779B9, + d_sum = 0xC6EF3720; // sum on decrypt + + /* + * the expanded key array of 4 subkeys + */ + private uint _a, _b, _c, _d; + private bool _initialised; + private bool _forEncryption; + + /** + * Create an instance of the TEA encryption algorithm + * and set some defaults + */ + public TeaEngine() + { + _initialised = false; + } + + public virtual string AlgorithmName + { + get { return "TEA"; } + } + + public virtual int GetBlockSize() + { + return block_size; + } + + /** + * initialise + * + * @param forEncryption whether or not we are for encryption. + * @param params the parameters required to set up the cipher. + * @exception ArgumentException if the params argument is + * inappropriate. + */ + public virtual void Init(bool forEncryption, ICipherParameters parameters) + { + if (!(parameters is KeyParameter keyParameter)) + { + throw new ArgumentException("invalid parameter passed to TEA init - " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + } + + _forEncryption = forEncryption; + _initialised = true; + + SetKey(keyParameter.GetKey()); + } + + public virtual int ProcessBlock(byte[] inBytes, int inOff, byte[] outBytes, int outOff) + { + if (!_initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.DataLength(inBytes, inOff, block_size, "input buffer too short"); + Check.OutputLength(outBytes, outOff, block_size, "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return _forEncryption + ? EncryptBlock(inBytes.AsSpan(inOff), outBytes.AsSpan(outOff)) + : DecryptBlock(inBytes.AsSpan(inOff), outBytes.AsSpan(outOff)); +#else + return _forEncryption + ? EncryptBlock(inBytes, inOff, outBytes, outOff) + : DecryptBlock(inBytes, inOff, outBytes, outOff); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + if (!_initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.DataLength(input, block_size, "input buffer too short"); + Check.OutputLength(output, block_size, "output buffer too short"); + + return _forEncryption + ? EncryptBlock(input, output) + : DecryptBlock(input, output); + } +#endif + + /** + * Re-key the cipher. + * + * @param key the key to be used + */ + private void SetKey(byte[] key) + { + _a = Pack.BE_To_UInt32(key, 0); + _b = Pack.BE_To_UInt32(key, 4); + _c = Pack.BE_To_UInt32(key, 8); + _d = Pack.BE_To_UInt32(key, 12); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int EncryptBlock(ReadOnlySpan input, Span output) + { + // Pack bytes into integers + uint v0 = Pack.BE_To_UInt32(input); + uint v1 = Pack.BE_To_UInt32(input[4..]); + + uint sum = 0; + + for (int i = 0; i != rounds; i++) + { + sum += delta; + v0 += ((v1 << 4) + _a) ^ (v1 + sum) ^ ((v1 >> 5) + _b); + v1 += ((v0 << 4) + _c) ^ (v0 + sum) ^ ((v0 >> 5) + _d); + } + + Pack.UInt32_To_BE(v0, output); + Pack.UInt32_To_BE(v1, output[4..]); + + return block_size; + } + + private int DecryptBlock(ReadOnlySpan input, Span output) + { + // Pack bytes into integers + uint v0 = Pack.BE_To_UInt32(input); + uint v1 = Pack.BE_To_UInt32(input[4..]); + + uint sum = d_sum; + + for (int i = 0; i != rounds; i++) + { + v1 -= ((v0 << 4) + _c) ^ (v0 + sum) ^ ((v0 >> 5) + _d); + v0 -= ((v1 << 4) + _a) ^ (v1 + sum) ^ ((v1 >> 5) + _b); + sum -= delta; + } + + Pack.UInt32_To_BE(v0, output); + Pack.UInt32_To_BE(v1, output[4..]); + + return block_size; + } +#else + private int EncryptBlock(byte[] inBytes, int inOff, byte[] outBytes, int outOff) + { + // Pack bytes into integers + uint v0 = Pack.BE_To_UInt32(inBytes, inOff); + uint v1 = Pack.BE_To_UInt32(inBytes, inOff + 4); + + uint sum = 0; + + for (int i = 0; i != rounds; i++) + { + sum += delta; + v0 += ((v1 << 4) + _a) ^ (v1 + sum) ^ ((v1 >> 5) + _b); + v1 += ((v0 << 4) + _c) ^ (v0 + sum) ^ ((v0 >> 5) + _d); + } + + Pack.UInt32_To_BE(v0, outBytes, outOff); + Pack.UInt32_To_BE(v1, outBytes, outOff + 4); + + return block_size; + } + + private int DecryptBlock(byte[] inBytes, int inOff, byte[] outBytes, int outOff) + { + // Pack bytes into integers + uint v0 = Pack.BE_To_UInt32(inBytes, inOff); + uint v1 = Pack.BE_To_UInt32(inBytes, inOff + 4); + + uint sum = d_sum; + + for (int i = 0; i != rounds; i++) + { + v1 -= ((v0 << 4) + _c) ^ (v0 + sum) ^ ((v0 >> 5) + _d); + v0 -= ((v1 << 4) + _a) ^ (v1 + sum) ^ ((v1 >> 5) + _b); + sum -= delta; + } + + Pack.UInt32_To_BE(v0, outBytes, outOff); + Pack.UInt32_To_BE(v1, outBytes, outOff + 4); + + return block_size; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/TEAEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/TEAEngine.cs.meta new file mode 100644 index 000000000..5f82aab88 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/TEAEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 35dd311c76c77164f9dd915b865c17d6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ThreefishEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ThreefishEngine.cs new file mode 100644 index 000000000..d6d66e782 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ThreefishEngine.cs @@ -0,0 +1,1430 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /// + /// Implementation of the Threefish tweakable large block cipher in 256, 512 and 1024 bit block + /// sizes. + /// + /// + /// This is the 1.3 version of Threefish defined in the Skein hash function submission to the NIST + /// SHA-3 competition in October 2010. + ///

+ /// Threefish was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + /// Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + ///

+ /// This implementation inlines all round functions, unrolls 8 rounds, and uses 1.2k of static tables + /// to speed up key schedule injection.
+ /// 2 x block size state is retained by each cipher instance. + /// + public class ThreefishEngine + : IBlockCipher + { + ///

+ /// 256 bit block size - Threefish-256 + /// + public const int BLOCKSIZE_256 = 256; + /// + /// 512 bit block size - Threefish-512 + /// + public const int BLOCKSIZE_512 = 512; + /// + /// 1024 bit block size - Threefish-1024 + /// + public const int BLOCKSIZE_1024 = 1024; + + /** + * Size of the tweak in bytes (always 128 bit/16 bytes) + */ + private const int TWEAK_SIZE_BYTES = 16; + private const int TWEAK_SIZE_WORDS = TWEAK_SIZE_BYTES / 8; + + /** + * Rounds in Threefish-256 + */ + private const int ROUNDS_256 = 72; + /** + * Rounds in Threefish-512 + */ + private const int ROUNDS_512 = 72; + /** + * Rounds in Threefish-1024 + */ + private const int ROUNDS_1024 = 80; + + /** + * Max rounds of any of the variants + */ + private const int MAX_ROUNDS = ROUNDS_1024; + + /** + * Key schedule parity constant + */ + private const ulong C_240 = 0x1BD11BDAA9FC1A22L; + + /* Pre-calculated modulo arithmetic tables for key schedule lookups */ + private static readonly int[] MOD9 = new int[MAX_ROUNDS]; + private static readonly int[] MOD17 = new int[MOD9.Length]; + private static readonly int[] MOD5 = new int[MOD9.Length]; + private static readonly int[] MOD3 = new int[MOD9.Length]; + + static ThreefishEngine() + { + for (int i = 0; i < MOD9.Length; i++) + { + MOD17[i] = i % 17; + MOD9[i] = i % 9; + MOD5[i] = i % 5; + MOD3[i] = i % 3; + } + } + + /** + * Block size in bytes + */ + private readonly int blocksizeBytes; + + /** + * Block size in 64 bit words + */ + private readonly int blocksizeWords; + + /** + * Buffer for byte oriented processBytes to call internal word API + */ + private readonly ulong[] currentBlock; + + /** + * Tweak bytes (2 byte t1,t2, calculated t3 and repeat of t1,t2 for modulo free lookup + */ + private readonly ulong[] t = new ulong[5]; + + /** + * Key schedule words + */ + private readonly ulong[] kw; + + /** + * The internal cipher implementation (varies by blocksize) + */ + private readonly ThreefishCipher cipher; + + private bool forEncryption; + + /// + /// Constructs a new Threefish cipher, with a specified block size. + /// + /// the block size in bits, one of , , + /// . + public ThreefishEngine(int blocksizeBits) + { + this.blocksizeBytes = (blocksizeBits / 8); + this.blocksizeWords = (this.blocksizeBytes / 8); + this.currentBlock = new ulong[blocksizeWords]; + + /* + * Provide room for original key words, extended key word and repeat of key words for modulo + * free lookup of key schedule words. + */ + this.kw = new ulong[2 * blocksizeWords + 1]; + + switch (blocksizeBits) + { + case BLOCKSIZE_256: + cipher = new Threefish256Cipher(kw, t); + break; + case BLOCKSIZE_512: + cipher = new Threefish512Cipher(kw, t); + break; + case BLOCKSIZE_1024: + cipher = new Threefish1024Cipher(kw, t); + break; + default: + throw new ArgumentException("Invalid blocksize - Threefish is defined with block size of 256, 512, or 1024 bits"); + } + } + + /// + /// Initialise the engine. + /// + /// Initialise for encryption if true, for decryption if false. + /// an instance of or (to + /// use a 0 tweak) + public virtual void Init(bool forEncryption, ICipherParameters parameters) + { + byte[] keyBytes; + byte[] tweakBytes; + + if (parameters is TweakableBlockCipherParameters) + { + TweakableBlockCipherParameters tParams = (TweakableBlockCipherParameters)parameters; + keyBytes = tParams.Key.GetKey(); + tweakBytes = tParams.Tweak; + } + else if (parameters is KeyParameter) + { + keyBytes = ((KeyParameter)parameters).GetKey(); + tweakBytes = null; + } + else + { + throw new ArgumentException("Invalid parameter passed to Threefish init - " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + } + + ulong[] keyWords = null; + ulong[] tweakWords = null; + + if (keyBytes != null) + { + if (keyBytes.Length != this.blocksizeBytes) + { + throw new ArgumentException("Threefish key must be same size as block (" + blocksizeBytes + + " bytes)"); + } + keyWords = new ulong[blocksizeWords]; + Pack.LE_To_UInt64(keyBytes, 0, keyWords); + } + if (tweakBytes != null) + { + if (tweakBytes.Length != TWEAK_SIZE_BYTES) + { + throw new ArgumentException("Threefish tweak must be " + TWEAK_SIZE_BYTES + " bytes"); + } + tweakWords = new ulong[2]; + Pack.LE_To_UInt64(tweakBytes, 0, tweakWords); + } + Init(forEncryption, keyWords, tweakWords); + } + + /// + /// Initialise the engine, specifying the key and tweak directly. + /// + /// the cipher mode. + /// the words of the key, or null to use the current key. + /// the 2 word (128 bit) tweak, or null to use the current tweak. + internal void Init(bool forEncryption, ulong[] key, ulong[] tweak) + { + this.forEncryption = forEncryption; + if (key != null) + { + SetKey(key); + } + if (tweak != null) + { + SetTweak(tweak); + } + } + + private void SetKey(ulong[] key) + { + if (key.Length != this.blocksizeWords) + { + throw new ArgumentException("Threefish key must be same size as block (" + blocksizeWords + + " words)"); + } + + /* + * Full subkey schedule is deferred to execution to avoid per cipher overhead (10k for 512, + * 20k for 1024). + * + * Key and tweak word sequences are repeated, and static MOD17/MOD9/MOD5/MOD3 calculations + * used, to avoid expensive mod computations during cipher operation. + */ + + ulong knw = C_240; + for (int i = 0; i < blocksizeWords; i++) + { + kw[i] = key[i]; + knw = knw ^ kw[i]; + } + kw[blocksizeWords] = knw; + Array.Copy(kw, 0, kw, blocksizeWords + 1, blocksizeWords); + } + + private void SetTweak(ulong[] tweak) + { + if (tweak.Length != TWEAK_SIZE_WORDS) + { + throw new ArgumentException("Tweak must be " + TWEAK_SIZE_WORDS + " words."); + } + + /* + * Tweak schedule partially repeated to avoid mod computations during cipher operation + */ + t[0] = tweak[0]; + t[1] = tweak[1]; + t[2] = t[0] ^ t[1]; + t[3] = t[0]; + t[4] = t[1]; + } + + public virtual string AlgorithmName + { + get { return "Threefish-" + (blocksizeBytes * 8); } + } + + public virtual int GetBlockSize() + { + return blocksizeBytes; + } + + public virtual int ProcessBlock(byte[] inBytes, int inOff, byte[] outBytes, int outOff) + { + Check.DataLength(inBytes, inOff, blocksizeBytes, "input buffer too short"); + Check.OutputLength(outBytes, outOff, blocksizeBytes, "output buffer too short"); + + Pack.LE_To_UInt64(inBytes, inOff, currentBlock); + ProcessBlock(this.currentBlock, this.currentBlock); + Pack.UInt64_To_LE(currentBlock, outBytes, outOff); + return blocksizeBytes; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + Check.DataLength(input, blocksizeBytes, "input buffer too short"); + Check.OutputLength(output, blocksizeBytes, "output buffer too short"); + + Pack.LE_To_UInt64(input, currentBlock); + ProcessBlock(this.currentBlock, this.currentBlock); + Pack.UInt64_To_LE(currentBlock, output); + return blocksizeBytes; + } +#endif + + /// + /// Process a block of data represented as 64 bit words. + /// + /// the number of 8 byte words processed (which will be the same as the block size). + /// a block sized buffer of words to process. + /// a block sized buffer of words to receive the output of the operation. + /// if either the input or output is not block sized + /// if this engine is not initialised + internal int ProcessBlock(ulong[] inWords, ulong[] outWords) + { + if (kw[blocksizeWords] == 0) + { + throw new InvalidOperationException("Threefish engine not initialised"); + } + + if (inWords.Length != blocksizeWords) + throw new DataLengthException("input buffer too short"); + if (outWords.Length != blocksizeWords) + throw new OutputLengthException("output buffer too short"); + + if (forEncryption) + { + cipher.EncryptBlock(inWords, outWords); + } + else + { + cipher.DecryptBlock(inWords, outWords); + } + + return blocksizeWords; + } + + /** + * Rotate left + xor part of the mix operation. + */ + private static ulong RotlXor(ulong x, int n, ulong xor) + { + return ((x << n) | (x >> (64 - n))) ^ xor; + } + + /** + * Rotate xor + rotate right part of the unmix operation. + */ + private static ulong XorRotr(ulong x, int n, ulong xor) + { + ulong xored = x ^ xor; + return (xored >> n) | (xored << (64 - n)); + } + + private abstract class ThreefishCipher + { + /** + * The extended + repeated tweak words + */ + protected readonly ulong[] t; + /** + * The extended + repeated key words + */ + protected readonly ulong[] kw; + + protected ThreefishCipher(ulong[] kw, ulong[] t) + { + this.kw = kw; + this.t = t; + } + + internal abstract void EncryptBlock(ulong[] block, ulong[] outWords); + + internal abstract void DecryptBlock(ulong[] block, ulong[] outWords); + + } + + private sealed class Threefish256Cipher + : ThreefishCipher + { + /** + * Mix rotation constants defined in Skein 1.3 specification + */ + private const int ROTATION_0_0 = 14, ROTATION_0_1 = 16; + private const int ROTATION_1_0 = 52, ROTATION_1_1 = 57; + private const int ROTATION_2_0 = 23, ROTATION_2_1 = 40; + private const int ROTATION_3_0 = 5, ROTATION_3_1 = 37; + + private const int ROTATION_4_0 = 25, ROTATION_4_1 = 33; + private const int ROTATION_5_0 = 46, ROTATION_5_1 = 12; + private const int ROTATION_6_0 = 58, ROTATION_6_1 = 22; + private const int ROTATION_7_0 = 32, ROTATION_7_1 = 32; + + public Threefish256Cipher(ulong[] kw, ulong[] t) + : base(kw, t) + { + } + + internal override void EncryptBlock(ulong[] block, ulong[] outWords) + { + ulong[] kw = this.kw; + ulong[] t = this.t; + int[] mod5 = MOD5; + int[] mod3 = MOD3; + + /* Help the JIT avoid index bounds checks */ + if (kw.Length != 9) + { + throw new ArgumentException(); + } + if (t.Length != 5) + { + throw new ArgumentException(); + } + + /* + * Read 4 words of plaintext data, not using arrays for cipher state + */ + ulong b0 = block[0]; + ulong b1 = block[1]; + ulong b2 = block[2]; + ulong b3 = block[3]; + + /* + * First subkey injection. + */ + b0 += kw[0]; + b1 += kw[1] + t[0]; + b2 += kw[2] + t[1]; + b3 += kw[3]; + + /* + * Rounds loop, unrolled to 8 rounds per iteration. + * + * Unrolling to multiples of 4 avoids the mod 4 check for key injection, and allows + * inlining of the permutations, which cycle every of 2 rounds (avoiding array + * index/lookup). + * + * Unrolling to multiples of 8 avoids the mod 8 rotation constant lookup, and allows + * inlining constant rotation values (avoiding array index/lookup). + */ + + for (int d = 1; d < (ROUNDS_256 / 4); d += 2) + { + int dm5 = mod5[d]; + int dm3 = mod3[d]; + + /* + * 4 rounds of mix and permute. + * + * Permute schedule has a 2 round cycle, so permutes are inlined in the mix + * operations in each 4 round block. + */ + b1 = RotlXor(b1, ROTATION_0_0, b0 += b1); + b3 = RotlXor(b3, ROTATION_0_1, b2 += b3); + + b3 = RotlXor(b3, ROTATION_1_0, b0 += b3); + b1 = RotlXor(b1, ROTATION_1_1, b2 += b1); + + b1 = RotlXor(b1, ROTATION_2_0, b0 += b1); + b3 = RotlXor(b3, ROTATION_2_1, b2 += b3); + + b3 = RotlXor(b3, ROTATION_3_0, b0 += b3); + b1 = RotlXor(b1, ROTATION_3_1, b2 += b1); + + /* + * Subkey injection for first 4 rounds. + */ + b0 += kw[dm5]; + b1 += kw[dm5 + 1] + t[dm3]; + b2 += kw[dm5 + 2] + t[dm3 + 1]; + b3 += kw[dm5 + 3] + (uint)d; + + /* + * 4 more rounds of mix/permute + */ + b1 = RotlXor(b1, ROTATION_4_0, b0 += b1); + b3 = RotlXor(b3, ROTATION_4_1, b2 += b3); + + b3 = RotlXor(b3, ROTATION_5_0, b0 += b3); + b1 = RotlXor(b1, ROTATION_5_1, b2 += b1); + + b1 = RotlXor(b1, ROTATION_6_0, b0 += b1); + b3 = RotlXor(b3, ROTATION_6_1, b2 += b3); + + b3 = RotlXor(b3, ROTATION_7_0, b0 += b3); + b1 = RotlXor(b1, ROTATION_7_1, b2 += b1); + + /* + * Subkey injection for next 4 rounds. + */ + b0 += kw[dm5 + 1]; + b1 += kw[dm5 + 2] + t[dm3 + 1]; + b2 += kw[dm5 + 3] + t[dm3 + 2]; + b3 += kw[dm5 + 4] + (uint)d + 1; + } + + /* + * Output cipher state. + */ + outWords[0] = b0; + outWords[1] = b1; + outWords[2] = b2; + outWords[3] = b3; + } + + internal override void DecryptBlock(ulong[] block, ulong[] state) + { + ulong[] kw = this.kw; + ulong[] t = this.t; + int[] mod5 = MOD5; + int[] mod3 = MOD3; + + /* Help the JIT avoid index bounds checks */ + if (kw.Length != 9) + { + throw new ArgumentException(); + } + if (t.Length != 5) + { + throw new ArgumentException(); + } + + ulong b0 = block[0]; + ulong b1 = block[1]; + ulong b2 = block[2]; + ulong b3 = block[3]; + + for (int d = (ROUNDS_256 / 4) - 1; d >= 1; d -= 2) + { + int dm5 = mod5[d]; + int dm3 = mod3[d]; + + /* Reverse key injection for second 4 rounds */ + b0 -= kw[dm5 + 1]; + b1 -= kw[dm5 + 2] + t[dm3 + 1]; + b2 -= kw[dm5 + 3] + t[dm3 + 2]; + b3 -= kw[dm5 + 4] + (uint)d + 1; + + /* Reverse second 4 mix/permute rounds */ + + b3 = XorRotr(b3, ROTATION_7_0, b0); + b0 -= b3; + b1 = XorRotr(b1, ROTATION_7_1, b2); + b2 -= b1; + + b1 = XorRotr(b1, ROTATION_6_0, b0); + b0 -= b1; + b3 = XorRotr(b3, ROTATION_6_1, b2); + b2 -= b3; + + b3 = XorRotr(b3, ROTATION_5_0, b0); + b0 -= b3; + b1 = XorRotr(b1, ROTATION_5_1, b2); + b2 -= b1; + + b1 = XorRotr(b1, ROTATION_4_0, b0); + b0 -= b1; + b3 = XorRotr(b3, ROTATION_4_1, b2); + b2 -= b3; + + /* Reverse key injection for first 4 rounds */ + b0 -= kw[dm5]; + b1 -= kw[dm5 + 1] + t[dm3]; + b2 -= kw[dm5 + 2] + t[dm3 + 1]; + b3 -= kw[dm5 + 3] + (uint)d; + + /* Reverse first 4 mix/permute rounds */ + b3 = XorRotr(b3, ROTATION_3_0, b0); + b0 -= b3; + b1 = XorRotr(b1, ROTATION_3_1, b2); + b2 -= b1; + + b1 = XorRotr(b1, ROTATION_2_0, b0); + b0 -= b1; + b3 = XorRotr(b3, ROTATION_2_1, b2); + b2 -= b3; + + b3 = XorRotr(b3, ROTATION_1_0, b0); + b0 -= b3; + b1 = XorRotr(b1, ROTATION_1_1, b2); + b2 -= b1; + + b1 = XorRotr(b1, ROTATION_0_0, b0); + b0 -= b1; + b3 = XorRotr(b3, ROTATION_0_1, b2); + b2 -= b3; + } + + /* + * First subkey uninjection. + */ + b0 -= kw[0]; + b1 -= kw[1] + t[0]; + b2 -= kw[2] + t[1]; + b3 -= kw[3]; + + /* + * Output cipher state. + */ + state[0] = b0; + state[1] = b1; + state[2] = b2; + state[3] = b3; + } + + } + + private sealed class Threefish512Cipher + : ThreefishCipher + { + /** + * Mix rotation constants defined in Skein 1.3 specification + */ + private const int ROTATION_0_0 = 46, ROTATION_0_1 = 36, ROTATION_0_2 = 19, ROTATION_0_3 = 37; + private const int ROTATION_1_0 = 33, ROTATION_1_1 = 27, ROTATION_1_2 = 14, ROTATION_1_3 = 42; + private const int ROTATION_2_0 = 17, ROTATION_2_1 = 49, ROTATION_2_2 = 36, ROTATION_2_3 = 39; + private const int ROTATION_3_0 = 44, ROTATION_3_1 = 9, ROTATION_3_2 = 54, ROTATION_3_3 = 56; + + private const int ROTATION_4_0 = 39, ROTATION_4_1 = 30, ROTATION_4_2 = 34, ROTATION_4_3 = 24; + private const int ROTATION_5_0 = 13, ROTATION_5_1 = 50, ROTATION_5_2 = 10, ROTATION_5_3 = 17; + private const int ROTATION_6_0 = 25, ROTATION_6_1 = 29, ROTATION_6_2 = 39, ROTATION_6_3 = 43; + private const int ROTATION_7_0 = 8, ROTATION_7_1 = 35, ROTATION_7_2 = 56, ROTATION_7_3 = 22; + + internal Threefish512Cipher(ulong[] kw, ulong[] t) + : base(kw, t) + { + } + + internal override void EncryptBlock(ulong[] block, ulong[] outWords) + { + ulong[] kw = this.kw; + ulong[] t = this.t; + int[] mod9 = MOD9; + int[] mod3 = MOD3; + + /* Help the JIT avoid index bounds checks */ + if (kw.Length != 17) + { + throw new ArgumentException(); + } + if (t.Length != 5) + { + throw new ArgumentException(); + } + + /* + * Read 8 words of plaintext data, not using arrays for cipher state + */ + ulong b0 = block[0]; + ulong b1 = block[1]; + ulong b2 = block[2]; + ulong b3 = block[3]; + ulong b4 = block[4]; + ulong b5 = block[5]; + ulong b6 = block[6]; + ulong b7 = block[7]; + + /* + * First subkey injection. + */ + b0 += kw[0]; + b1 += kw[1]; + b2 += kw[2]; + b3 += kw[3]; + b4 += kw[4]; + b5 += kw[5] + t[0]; + b6 += kw[6] + t[1]; + b7 += kw[7]; + + /* + * Rounds loop, unrolled to 8 rounds per iteration. + * + * Unrolling to multiples of 4 avoids the mod 4 check for key injection, and allows + * inlining of the permutations, which cycle every of 4 rounds (avoiding array + * index/lookup). + * + * Unrolling to multiples of 8 avoids the mod 8 rotation constant lookup, and allows + * inlining constant rotation values (avoiding array index/lookup). + */ + + for (int d = 1; d < (ROUNDS_512 / 4); d += 2) + { + int dm9 = mod9[d]; + int dm3 = mod3[d]; + + /* + * 4 rounds of mix and permute. + * + * Permute schedule has a 4 round cycle, so permutes are inlined in the mix + * operations in each 4 round block. + */ + b1 = RotlXor(b1, ROTATION_0_0, b0 += b1); + b3 = RotlXor(b3, ROTATION_0_1, b2 += b3); + b5 = RotlXor(b5, ROTATION_0_2, b4 += b5); + b7 = RotlXor(b7, ROTATION_0_3, b6 += b7); + + b1 = RotlXor(b1, ROTATION_1_0, b2 += b1); + b7 = RotlXor(b7, ROTATION_1_1, b4 += b7); + b5 = RotlXor(b5, ROTATION_1_2, b6 += b5); + b3 = RotlXor(b3, ROTATION_1_3, b0 += b3); + + b1 = RotlXor(b1, ROTATION_2_0, b4 += b1); + b3 = RotlXor(b3, ROTATION_2_1, b6 += b3); + b5 = RotlXor(b5, ROTATION_2_2, b0 += b5); + b7 = RotlXor(b7, ROTATION_2_3, b2 += b7); + + b1 = RotlXor(b1, ROTATION_3_0, b6 += b1); + b7 = RotlXor(b7, ROTATION_3_1, b0 += b7); + b5 = RotlXor(b5, ROTATION_3_2, b2 += b5); + b3 = RotlXor(b3, ROTATION_3_3, b4 += b3); + + /* + * Subkey injection for first 4 rounds. + */ + b0 += kw[dm9]; + b1 += kw[dm9 + 1]; + b2 += kw[dm9 + 2]; + b3 += kw[dm9 + 3]; + b4 += kw[dm9 + 4]; + b5 += kw[dm9 + 5] + t[dm3]; + b6 += kw[dm9 + 6] + t[dm3 + 1]; + b7 += kw[dm9 + 7] + (uint)d; + + /* + * 4 more rounds of mix/permute + */ + b1 = RotlXor(b1, ROTATION_4_0, b0 += b1); + b3 = RotlXor(b3, ROTATION_4_1, b2 += b3); + b5 = RotlXor(b5, ROTATION_4_2, b4 += b5); + b7 = RotlXor(b7, ROTATION_4_3, b6 += b7); + + b1 = RotlXor(b1, ROTATION_5_0, b2 += b1); + b7 = RotlXor(b7, ROTATION_5_1, b4 += b7); + b5 = RotlXor(b5, ROTATION_5_2, b6 += b5); + b3 = RotlXor(b3, ROTATION_5_3, b0 += b3); + + b1 = RotlXor(b1, ROTATION_6_0, b4 += b1); + b3 = RotlXor(b3, ROTATION_6_1, b6 += b3); + b5 = RotlXor(b5, ROTATION_6_2, b0 += b5); + b7 = RotlXor(b7, ROTATION_6_3, b2 += b7); + + b1 = RotlXor(b1, ROTATION_7_0, b6 += b1); + b7 = RotlXor(b7, ROTATION_7_1, b0 += b7); + b5 = RotlXor(b5, ROTATION_7_2, b2 += b5); + b3 = RotlXor(b3, ROTATION_7_3, b4 += b3); + + /* + * Subkey injection for next 4 rounds. + */ + b0 += kw[dm9 + 1]; + b1 += kw[dm9 + 2]; + b2 += kw[dm9 + 3]; + b3 += kw[dm9 + 4]; + b4 += kw[dm9 + 5]; + b5 += kw[dm9 + 6] + t[dm3 + 1]; + b6 += kw[dm9 + 7] + t[dm3 + 2]; + b7 += kw[dm9 + 8] + (uint)d + 1; + } + + /* + * Output cipher state. + */ + outWords[0] = b0; + outWords[1] = b1; + outWords[2] = b2; + outWords[3] = b3; + outWords[4] = b4; + outWords[5] = b5; + outWords[6] = b6; + outWords[7] = b7; + } + + internal override void DecryptBlock(ulong[] block, ulong[] state) + { + ulong[] kw = this.kw; + ulong[] t = this.t; + int[] mod9 = MOD9; + int[] mod3 = MOD3; + + /* Help the JIT avoid index bounds checks */ + if (kw.Length != 17) + { + throw new ArgumentException(); + } + if (t.Length != 5) + { + throw new ArgumentException(); + } + + ulong b0 = block[0]; + ulong b1 = block[1]; + ulong b2 = block[2]; + ulong b3 = block[3]; + ulong b4 = block[4]; + ulong b5 = block[5]; + ulong b6 = block[6]; + ulong b7 = block[7]; + + for (int d = (ROUNDS_512 / 4) - 1; d >= 1; d -= 2) + { + int dm9 = mod9[d]; + int dm3 = mod3[d]; + + /* Reverse key injection for second 4 rounds */ + b0 -= kw[dm9 + 1]; + b1 -= kw[dm9 + 2]; + b2 -= kw[dm9 + 3]; + b3 -= kw[dm9 + 4]; + b4 -= kw[dm9 + 5]; + b5 -= kw[dm9 + 6] + t[dm3 + 1]; + b6 -= kw[dm9 + 7] + t[dm3 + 2]; + b7 -= kw[dm9 + 8] + (uint)d + 1; + + /* Reverse second 4 mix/permute rounds */ + + b1 = XorRotr(b1, ROTATION_7_0, b6); + b6 -= b1; + b7 = XorRotr(b7, ROTATION_7_1, b0); + b0 -= b7; + b5 = XorRotr(b5, ROTATION_7_2, b2); + b2 -= b5; + b3 = XorRotr(b3, ROTATION_7_3, b4); + b4 -= b3; + + b1 = XorRotr(b1, ROTATION_6_0, b4); + b4 -= b1; + b3 = XorRotr(b3, ROTATION_6_1, b6); + b6 -= b3; + b5 = XorRotr(b5, ROTATION_6_2, b0); + b0 -= b5; + b7 = XorRotr(b7, ROTATION_6_3, b2); + b2 -= b7; + + b1 = XorRotr(b1, ROTATION_5_0, b2); + b2 -= b1; + b7 = XorRotr(b7, ROTATION_5_1, b4); + b4 -= b7; + b5 = XorRotr(b5, ROTATION_5_2, b6); + b6 -= b5; + b3 = XorRotr(b3, ROTATION_5_3, b0); + b0 -= b3; + + b1 = XorRotr(b1, ROTATION_4_0, b0); + b0 -= b1; + b3 = XorRotr(b3, ROTATION_4_1, b2); + b2 -= b3; + b5 = XorRotr(b5, ROTATION_4_2, b4); + b4 -= b5; + b7 = XorRotr(b7, ROTATION_4_3, b6); + b6 -= b7; + + /* Reverse key injection for first 4 rounds */ + b0 -= kw[dm9]; + b1 -= kw[dm9 + 1]; + b2 -= kw[dm9 + 2]; + b3 -= kw[dm9 + 3]; + b4 -= kw[dm9 + 4]; + b5 -= kw[dm9 + 5] + t[dm3]; + b6 -= kw[dm9 + 6] + t[dm3 + 1]; + b7 -= kw[dm9 + 7] + (uint)d; + + /* Reverse first 4 mix/permute rounds */ + b1 = XorRotr(b1, ROTATION_3_0, b6); + b6 -= b1; + b7 = XorRotr(b7, ROTATION_3_1, b0); + b0 -= b7; + b5 = XorRotr(b5, ROTATION_3_2, b2); + b2 -= b5; + b3 = XorRotr(b3, ROTATION_3_3, b4); + b4 -= b3; + + b1 = XorRotr(b1, ROTATION_2_0, b4); + b4 -= b1; + b3 = XorRotr(b3, ROTATION_2_1, b6); + b6 -= b3; + b5 = XorRotr(b5, ROTATION_2_2, b0); + b0 -= b5; + b7 = XorRotr(b7, ROTATION_2_3, b2); + b2 -= b7; + + b1 = XorRotr(b1, ROTATION_1_0, b2); + b2 -= b1; + b7 = XorRotr(b7, ROTATION_1_1, b4); + b4 -= b7; + b5 = XorRotr(b5, ROTATION_1_2, b6); + b6 -= b5; + b3 = XorRotr(b3, ROTATION_1_3, b0); + b0 -= b3; + + b1 = XorRotr(b1, ROTATION_0_0, b0); + b0 -= b1; + b3 = XorRotr(b3, ROTATION_0_1, b2); + b2 -= b3; + b5 = XorRotr(b5, ROTATION_0_2, b4); + b4 -= b5; + b7 = XorRotr(b7, ROTATION_0_3, b6); + b6 -= b7; + } + + /* + * First subkey uninjection. + */ + b0 -= kw[0]; + b1 -= kw[1]; + b2 -= kw[2]; + b3 -= kw[3]; + b4 -= kw[4]; + b5 -= kw[5] + t[0]; + b6 -= kw[6] + t[1]; + b7 -= kw[7]; + + /* + * Output cipher state. + */ + state[0] = b0; + state[1] = b1; + state[2] = b2; + state[3] = b3; + state[4] = b4; + state[5] = b5; + state[6] = b6; + state[7] = b7; + } + } + + private sealed class Threefish1024Cipher + : ThreefishCipher + { + /** + * Mix rotation constants defined in Skein 1.3 specification + */ + private const int ROTATION_0_0 = 24, ROTATION_0_1 = 13, ROTATION_0_2 = 8, ROTATION_0_3 = 47; + private const int ROTATION_0_4 = 8, ROTATION_0_5 = 17, ROTATION_0_6 = 22, ROTATION_0_7 = 37; + private const int ROTATION_1_0 = 38, ROTATION_1_1 = 19, ROTATION_1_2 = 10, ROTATION_1_3 = 55; + private const int ROTATION_1_4 = 49, ROTATION_1_5 = 18, ROTATION_1_6 = 23, ROTATION_1_7 = 52; + private const int ROTATION_2_0 = 33, ROTATION_2_1 = 4, ROTATION_2_2 = 51, ROTATION_2_3 = 13; + private const int ROTATION_2_4 = 34, ROTATION_2_5 = 41, ROTATION_2_6 = 59, ROTATION_2_7 = 17; + private const int ROTATION_3_0 = 5, ROTATION_3_1 = 20, ROTATION_3_2 = 48, ROTATION_3_3 = 41; + private const int ROTATION_3_4 = 47, ROTATION_3_5 = 28, ROTATION_3_6 = 16, ROTATION_3_7 = 25; + + private const int ROTATION_4_0 = 41, ROTATION_4_1 = 9, ROTATION_4_2 = 37, ROTATION_4_3 = 31; + private const int ROTATION_4_4 = 12, ROTATION_4_5 = 47, ROTATION_4_6 = 44, ROTATION_4_7 = 30; + private const int ROTATION_5_0 = 16, ROTATION_5_1 = 34, ROTATION_5_2 = 56, ROTATION_5_3 = 51; + private const int ROTATION_5_4 = 4, ROTATION_5_5 = 53, ROTATION_5_6 = 42, ROTATION_5_7 = 41; + private const int ROTATION_6_0 = 31, ROTATION_6_1 = 44, ROTATION_6_2 = 47, ROTATION_6_3 = 46; + private const int ROTATION_6_4 = 19, ROTATION_6_5 = 42, ROTATION_6_6 = 44, ROTATION_6_7 = 25; + private const int ROTATION_7_0 = 9, ROTATION_7_1 = 48, ROTATION_7_2 = 35, ROTATION_7_3 = 52; + private const int ROTATION_7_4 = 23, ROTATION_7_5 = 31, ROTATION_7_6 = 37, ROTATION_7_7 = 20; + + public Threefish1024Cipher(ulong[] kw, ulong[] t) + : base(kw, t) + { + } + + internal override void EncryptBlock(ulong[] block, ulong[] outWords) + { + ulong[] kw = this.kw; + ulong[] t = this.t; + int[] mod17 = MOD17; + int[] mod3 = MOD3; + + /* Help the JIT avoid index bounds checks */ + if (kw.Length != 33) + { + throw new ArgumentException(); + } + if (t.Length != 5) + { + throw new ArgumentException(); + } + + /* + * Read 16 words of plaintext data, not using arrays for cipher state + */ + ulong b0 = block[0]; + ulong b1 = block[1]; + ulong b2 = block[2]; + ulong b3 = block[3]; + ulong b4 = block[4]; + ulong b5 = block[5]; + ulong b6 = block[6]; + ulong b7 = block[7]; + ulong b8 = block[8]; + ulong b9 = block[9]; + ulong b10 = block[10]; + ulong b11 = block[11]; + ulong b12 = block[12]; + ulong b13 = block[13]; + ulong b14 = block[14]; + ulong b15 = block[15]; + + /* + * First subkey injection. + */ + b0 += kw[0]; + b1 += kw[1]; + b2 += kw[2]; + b3 += kw[3]; + b4 += kw[4]; + b5 += kw[5]; + b6 += kw[6]; + b7 += kw[7]; + b8 += kw[8]; + b9 += kw[9]; + b10 += kw[10]; + b11 += kw[11]; + b12 += kw[12]; + b13 += kw[13] + t[0]; + b14 += kw[14] + t[1]; + b15 += kw[15]; + + /* + * Rounds loop, unrolled to 8 rounds per iteration. + * + * Unrolling to multiples of 4 avoids the mod 4 check for key injection, and allows + * inlining of the permutations, which cycle every of 4 rounds (avoiding array + * index/lookup). + * + * Unrolling to multiples of 8 avoids the mod 8 rotation constant lookup, and allows + * inlining constant rotation values (avoiding array index/lookup). + */ + + for (int d = 1; d < (ROUNDS_1024 / 4); d += 2) + { + int dm17 = mod17[d]; + int dm3 = mod3[d]; + + /* + * 4 rounds of mix and permute. + * + * Permute schedule has a 4 round cycle, so permutes are inlined in the mix + * operations in each 4 round block. + */ + b1 = RotlXor(b1, ROTATION_0_0, b0 += b1); + b3 = RotlXor(b3, ROTATION_0_1, b2 += b3); + b5 = RotlXor(b5, ROTATION_0_2, b4 += b5); + b7 = RotlXor(b7, ROTATION_0_3, b6 += b7); + b9 = RotlXor(b9, ROTATION_0_4, b8 += b9); + b11 = RotlXor(b11, ROTATION_0_5, b10 += b11); + b13 = RotlXor(b13, ROTATION_0_6, b12 += b13); + b15 = RotlXor(b15, ROTATION_0_7, b14 += b15); + + b9 = RotlXor(b9, ROTATION_1_0, b0 += b9); + b13 = RotlXor(b13, ROTATION_1_1, b2 += b13); + b11 = RotlXor(b11, ROTATION_1_2, b6 += b11); + b15 = RotlXor(b15, ROTATION_1_3, b4 += b15); + b7 = RotlXor(b7, ROTATION_1_4, b10 += b7); + b3 = RotlXor(b3, ROTATION_1_5, b12 += b3); + b5 = RotlXor(b5, ROTATION_1_6, b14 += b5); + b1 = RotlXor(b1, ROTATION_1_7, b8 += b1); + + b7 = RotlXor(b7, ROTATION_2_0, b0 += b7); + b5 = RotlXor(b5, ROTATION_2_1, b2 += b5); + b3 = RotlXor(b3, ROTATION_2_2, b4 += b3); + b1 = RotlXor(b1, ROTATION_2_3, b6 += b1); + b15 = RotlXor(b15, ROTATION_2_4, b12 += b15); + b13 = RotlXor(b13, ROTATION_2_5, b14 += b13); + b11 = RotlXor(b11, ROTATION_2_6, b8 += b11); + b9 = RotlXor(b9, ROTATION_2_7, b10 += b9); + + b15 = RotlXor(b15, ROTATION_3_0, b0 += b15); + b11 = RotlXor(b11, ROTATION_3_1, b2 += b11); + b13 = RotlXor(b13, ROTATION_3_2, b6 += b13); + b9 = RotlXor(b9, ROTATION_3_3, b4 += b9); + b1 = RotlXor(b1, ROTATION_3_4, b14 += b1); + b5 = RotlXor(b5, ROTATION_3_5, b8 += b5); + b3 = RotlXor(b3, ROTATION_3_6, b10 += b3); + b7 = RotlXor(b7, ROTATION_3_7, b12 += b7); + + /* + * Subkey injection for first 4 rounds. + */ + b0 += kw[dm17]; + b1 += kw[dm17 + 1]; + b2 += kw[dm17 + 2]; + b3 += kw[dm17 + 3]; + b4 += kw[dm17 + 4]; + b5 += kw[dm17 + 5]; + b6 += kw[dm17 + 6]; + b7 += kw[dm17 + 7]; + b8 += kw[dm17 + 8]; + b9 += kw[dm17 + 9]; + b10 += kw[dm17 + 10]; + b11 += kw[dm17 + 11]; + b12 += kw[dm17 + 12]; + b13 += kw[dm17 + 13] + t[dm3]; + b14 += kw[dm17 + 14] + t[dm3 + 1]; + b15 += kw[dm17 + 15] + (uint)d; + + /* + * 4 more rounds of mix/permute + */ + b1 = RotlXor(b1, ROTATION_4_0, b0 += b1); + b3 = RotlXor(b3, ROTATION_4_1, b2 += b3); + b5 = RotlXor(b5, ROTATION_4_2, b4 += b5); + b7 = RotlXor(b7, ROTATION_4_3, b6 += b7); + b9 = RotlXor(b9, ROTATION_4_4, b8 += b9); + b11 = RotlXor(b11, ROTATION_4_5, b10 += b11); + b13 = RotlXor(b13, ROTATION_4_6, b12 += b13); + b15 = RotlXor(b15, ROTATION_4_7, b14 += b15); + + b9 = RotlXor(b9, ROTATION_5_0, b0 += b9); + b13 = RotlXor(b13, ROTATION_5_1, b2 += b13); + b11 = RotlXor(b11, ROTATION_5_2, b6 += b11); + b15 = RotlXor(b15, ROTATION_5_3, b4 += b15); + b7 = RotlXor(b7, ROTATION_5_4, b10 += b7); + b3 = RotlXor(b3, ROTATION_5_5, b12 += b3); + b5 = RotlXor(b5, ROTATION_5_6, b14 += b5); + b1 = RotlXor(b1, ROTATION_5_7, b8 += b1); + + b7 = RotlXor(b7, ROTATION_6_0, b0 += b7); + b5 = RotlXor(b5, ROTATION_6_1, b2 += b5); + b3 = RotlXor(b3, ROTATION_6_2, b4 += b3); + b1 = RotlXor(b1, ROTATION_6_3, b6 += b1); + b15 = RotlXor(b15, ROTATION_6_4, b12 += b15); + b13 = RotlXor(b13, ROTATION_6_5, b14 += b13); + b11 = RotlXor(b11, ROTATION_6_6, b8 += b11); + b9 = RotlXor(b9, ROTATION_6_7, b10 += b9); + + b15 = RotlXor(b15, ROTATION_7_0, b0 += b15); + b11 = RotlXor(b11, ROTATION_7_1, b2 += b11); + b13 = RotlXor(b13, ROTATION_7_2, b6 += b13); + b9 = RotlXor(b9, ROTATION_7_3, b4 += b9); + b1 = RotlXor(b1, ROTATION_7_4, b14 += b1); + b5 = RotlXor(b5, ROTATION_7_5, b8 += b5); + b3 = RotlXor(b3, ROTATION_7_6, b10 += b3); + b7 = RotlXor(b7, ROTATION_7_7, b12 += b7); + + /* + * Subkey injection for next 4 rounds. + */ + b0 += kw[dm17 + 1]; + b1 += kw[dm17 + 2]; + b2 += kw[dm17 + 3]; + b3 += kw[dm17 + 4]; + b4 += kw[dm17 + 5]; + b5 += kw[dm17 + 6]; + b6 += kw[dm17 + 7]; + b7 += kw[dm17 + 8]; + b8 += kw[dm17 + 9]; + b9 += kw[dm17 + 10]; + b10 += kw[dm17 + 11]; + b11 += kw[dm17 + 12]; + b12 += kw[dm17 + 13]; + b13 += kw[dm17 + 14] + t[dm3 + 1]; + b14 += kw[dm17 + 15] + t[dm3 + 2]; + b15 += kw[dm17 + 16] + (uint)d + 1; + + } + + /* + * Output cipher state. + */ + outWords[0] = b0; + outWords[1] = b1; + outWords[2] = b2; + outWords[3] = b3; + outWords[4] = b4; + outWords[5] = b5; + outWords[6] = b6; + outWords[7] = b7; + outWords[8] = b8; + outWords[9] = b9; + outWords[10] = b10; + outWords[11] = b11; + outWords[12] = b12; + outWords[13] = b13; + outWords[14] = b14; + outWords[15] = b15; + } + + internal override void DecryptBlock(ulong[] block, ulong[] state) + { + ulong[] kw = this.kw; + ulong[] t = this.t; + int[] mod17 = MOD17; + int[] mod3 = MOD3; + + /* Help the JIT avoid index bounds checks */ + if (kw.Length != 33) + { + throw new ArgumentException(); + } + if (t.Length != 5) + { + throw new ArgumentException(); + } + + ulong b0 = block[0]; + ulong b1 = block[1]; + ulong b2 = block[2]; + ulong b3 = block[3]; + ulong b4 = block[4]; + ulong b5 = block[5]; + ulong b6 = block[6]; + ulong b7 = block[7]; + ulong b8 = block[8]; + ulong b9 = block[9]; + ulong b10 = block[10]; + ulong b11 = block[11]; + ulong b12 = block[12]; + ulong b13 = block[13]; + ulong b14 = block[14]; + ulong b15 = block[15]; + + for (int d = (ROUNDS_1024 / 4) - 1; d >= 1; d -= 2) + { + int dm17 = mod17[d]; + int dm3 = mod3[d]; + + /* Reverse key injection for second 4 rounds */ + b0 -= kw[dm17 + 1]; + b1 -= kw[dm17 + 2]; + b2 -= kw[dm17 + 3]; + b3 -= kw[dm17 + 4]; + b4 -= kw[dm17 + 5]; + b5 -= kw[dm17 + 6]; + b6 -= kw[dm17 + 7]; + b7 -= kw[dm17 + 8]; + b8 -= kw[dm17 + 9]; + b9 -= kw[dm17 + 10]; + b10 -= kw[dm17 + 11]; + b11 -= kw[dm17 + 12]; + b12 -= kw[dm17 + 13]; + b13 -= kw[dm17 + 14] + t[dm3 + 1]; + b14 -= kw[dm17 + 15] + t[dm3 + 2]; + b15 -= kw[dm17 + 16] + (uint)d + 1; + + /* Reverse second 4 mix/permute rounds */ + b15 = XorRotr(b15, ROTATION_7_0, b0); + b0 -= b15; + b11 = XorRotr(b11, ROTATION_7_1, b2); + b2 -= b11; + b13 = XorRotr(b13, ROTATION_7_2, b6); + b6 -= b13; + b9 = XorRotr(b9, ROTATION_7_3, b4); + b4 -= b9; + b1 = XorRotr(b1, ROTATION_7_4, b14); + b14 -= b1; + b5 = XorRotr(b5, ROTATION_7_5, b8); + b8 -= b5; + b3 = XorRotr(b3, ROTATION_7_6, b10); + b10 -= b3; + b7 = XorRotr(b7, ROTATION_7_7, b12); + b12 -= b7; + + b7 = XorRotr(b7, ROTATION_6_0, b0); + b0 -= b7; + b5 = XorRotr(b5, ROTATION_6_1, b2); + b2 -= b5; + b3 = XorRotr(b3, ROTATION_6_2, b4); + b4 -= b3; + b1 = XorRotr(b1, ROTATION_6_3, b6); + b6 -= b1; + b15 = XorRotr(b15, ROTATION_6_4, b12); + b12 -= b15; + b13 = XorRotr(b13, ROTATION_6_5, b14); + b14 -= b13; + b11 = XorRotr(b11, ROTATION_6_6, b8); + b8 -= b11; + b9 = XorRotr(b9, ROTATION_6_7, b10); + b10 -= b9; + + b9 = XorRotr(b9, ROTATION_5_0, b0); + b0 -= b9; + b13 = XorRotr(b13, ROTATION_5_1, b2); + b2 -= b13; + b11 = XorRotr(b11, ROTATION_5_2, b6); + b6 -= b11; + b15 = XorRotr(b15, ROTATION_5_3, b4); + b4 -= b15; + b7 = XorRotr(b7, ROTATION_5_4, b10); + b10 -= b7; + b3 = XorRotr(b3, ROTATION_5_5, b12); + b12 -= b3; + b5 = XorRotr(b5, ROTATION_5_6, b14); + b14 -= b5; + b1 = XorRotr(b1, ROTATION_5_7, b8); + b8 -= b1; + + b1 = XorRotr(b1, ROTATION_4_0, b0); + b0 -= b1; + b3 = XorRotr(b3, ROTATION_4_1, b2); + b2 -= b3; + b5 = XorRotr(b5, ROTATION_4_2, b4); + b4 -= b5; + b7 = XorRotr(b7, ROTATION_4_3, b6); + b6 -= b7; + b9 = XorRotr(b9, ROTATION_4_4, b8); + b8 -= b9; + b11 = XorRotr(b11, ROTATION_4_5, b10); + b10 -= b11; + b13 = XorRotr(b13, ROTATION_4_6, b12); + b12 -= b13; + b15 = XorRotr(b15, ROTATION_4_7, b14); + b14 -= b15; + + /* Reverse key injection for first 4 rounds */ + b0 -= kw[dm17]; + b1 -= kw[dm17 + 1]; + b2 -= kw[dm17 + 2]; + b3 -= kw[dm17 + 3]; + b4 -= kw[dm17 + 4]; + b5 -= kw[dm17 + 5]; + b6 -= kw[dm17 + 6]; + b7 -= kw[dm17 + 7]; + b8 -= kw[dm17 + 8]; + b9 -= kw[dm17 + 9]; + b10 -= kw[dm17 + 10]; + b11 -= kw[dm17 + 11]; + b12 -= kw[dm17 + 12]; + b13 -= kw[dm17 + 13] + t[dm3]; + b14 -= kw[dm17 + 14] + t[dm3 + 1]; + b15 -= kw[dm17 + 15] + (uint)d; + + /* Reverse first 4 mix/permute rounds */ + b15 = XorRotr(b15, ROTATION_3_0, b0); + b0 -= b15; + b11 = XorRotr(b11, ROTATION_3_1, b2); + b2 -= b11; + b13 = XorRotr(b13, ROTATION_3_2, b6); + b6 -= b13; + b9 = XorRotr(b9, ROTATION_3_3, b4); + b4 -= b9; + b1 = XorRotr(b1, ROTATION_3_4, b14); + b14 -= b1; + b5 = XorRotr(b5, ROTATION_3_5, b8); + b8 -= b5; + b3 = XorRotr(b3, ROTATION_3_6, b10); + b10 -= b3; + b7 = XorRotr(b7, ROTATION_3_7, b12); + b12 -= b7; + + b7 = XorRotr(b7, ROTATION_2_0, b0); + b0 -= b7; + b5 = XorRotr(b5, ROTATION_2_1, b2); + b2 -= b5; + b3 = XorRotr(b3, ROTATION_2_2, b4); + b4 -= b3; + b1 = XorRotr(b1, ROTATION_2_3, b6); + b6 -= b1; + b15 = XorRotr(b15, ROTATION_2_4, b12); + b12 -= b15; + b13 = XorRotr(b13, ROTATION_2_5, b14); + b14 -= b13; + b11 = XorRotr(b11, ROTATION_2_6, b8); + b8 -= b11; + b9 = XorRotr(b9, ROTATION_2_7, b10); + b10 -= b9; + + b9 = XorRotr(b9, ROTATION_1_0, b0); + b0 -= b9; + b13 = XorRotr(b13, ROTATION_1_1, b2); + b2 -= b13; + b11 = XorRotr(b11, ROTATION_1_2, b6); + b6 -= b11; + b15 = XorRotr(b15, ROTATION_1_3, b4); + b4 -= b15; + b7 = XorRotr(b7, ROTATION_1_4, b10); + b10 -= b7; + b3 = XorRotr(b3, ROTATION_1_5, b12); + b12 -= b3; + b5 = XorRotr(b5, ROTATION_1_6, b14); + b14 -= b5; + b1 = XorRotr(b1, ROTATION_1_7, b8); + b8 -= b1; + + b1 = XorRotr(b1, ROTATION_0_0, b0); + b0 -= b1; + b3 = XorRotr(b3, ROTATION_0_1, b2); + b2 -= b3; + b5 = XorRotr(b5, ROTATION_0_2, b4); + b4 -= b5; + b7 = XorRotr(b7, ROTATION_0_3, b6); + b6 -= b7; + b9 = XorRotr(b9, ROTATION_0_4, b8); + b8 -= b9; + b11 = XorRotr(b11, ROTATION_0_5, b10); + b10 -= b11; + b13 = XorRotr(b13, ROTATION_0_6, b12); + b12 -= b13; + b15 = XorRotr(b15, ROTATION_0_7, b14); + b14 -= b15; + } + + /* + * First subkey uninjection. + */ + b0 -= kw[0]; + b1 -= kw[1]; + b2 -= kw[2]; + b3 -= kw[3]; + b4 -= kw[4]; + b5 -= kw[5]; + b6 -= kw[6]; + b7 -= kw[7]; + b8 -= kw[8]; + b9 -= kw[9]; + b10 -= kw[10]; + b11 -= kw[11]; + b12 -= kw[12]; + b13 -= kw[13] + t[0]; + b14 -= kw[14] + t[1]; + b15 -= kw[15]; + + /* + * Output cipher state. + */ + state[0] = b0; + state[1] = b1; + state[2] = b2; + state[3] = b3; + state[4] = b4; + state[5] = b5; + state[6] = b6; + state[7] = b7; + state[8] = b8; + state[9] = b9; + state[10] = b10; + state[11] = b11; + state[12] = b12; + state[13] = b13; + state[14] = b14; + state[15] = b15; + } + + } + + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ThreefishEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ThreefishEngine.cs.meta new file mode 100644 index 000000000..9e0d787a5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/ThreefishEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 015b89c9dc51aec49acedc3323aad0b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/TnepresEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/TnepresEngine.cs new file mode 100644 index 000000000..342fe582c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/TnepresEngine.cs @@ -0,0 +1,412 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * Tnepres is a 128-bit 32-round block cipher with variable key lengths, + * including 128, 192 and 256 bit keys conjectured to be at least as + * secure as three-key triple-DES. + *

+ * Tnepres is based on Serpent which was designed by Ross Anderson, Eli Biham and Lars Knudsen as a + * candidate algorithm for the NIST AES Quest. Unfortunately there was an endianness issue + * with test vectors in the AES submission and the resulting confusion lead to the Tnepres cipher + * as well, which is a byte swapped version of Serpent. + *

+ *

+ * For full details see The Serpent home page + *

+ */ + public sealed class TnepresEngine + : SerpentEngineBase + { + public override string AlgorithmName + { + get { return "Tnepres"; } + } + + /** + * Expand a user-supplied key material into a session key. + * + * @param key The user-key bytes (multiples of 4) to use. + * @exception ArgumentException + */ + internal override int[] MakeWorkingKey(byte[] key) + { + // + // pad key to 256 bits + // + int[] kPad = new int[16]; + int off = 0; + int length = 0; + + for (off = key.Length - 4; off > 0; off -= 4) + { + kPad[length++] = (int)Pack.BE_To_UInt32(key, off); + } + + if (off == 0) + { + kPad[length++] = (int)Pack.BE_To_UInt32(key, 0); + if (length < 8) + { + kPad[length] = 1; + } + } + else + { + throw new ArgumentException("key must be a multiple of 4 bytes"); + } + + // + // expand the padded key up to 33 x 128 bits of key material + // + int amount = (ROUNDS + 1) * 4; + int[] w = new int[amount]; + + // + // compute w0 to w7 from w-8 to w-1 + // + for (int i = 8; i < 16; i++) + { + kPad[i] = Integers.RotateLeft(kPad[i - 8] ^ kPad[i - 5] ^ kPad[i - 3] ^ kPad[i - 1] ^ PHI ^ (i - 8), 11); + } + + Array.Copy(kPad, 8, w, 0, 8); + + // + // compute w8 to w136 + // + for (int i = 8; i < amount; i++) + { + w[i] = Integers.RotateLeft(w[i - 8] ^ w[i - 5] ^ w[i - 3] ^ w[i - 1] ^ PHI ^ i, 11); + } + + // + // create the working keys by processing w with the Sbox and IP + // + Sb3(w[0], w[1], w[2], w[3]); + w[0] = X0; w[1] = X1; w[2] = X2; w[3] = X3; + Sb2(w[4], w[5], w[6], w[7]); + w[4] = X0; w[5] = X1; w[6] = X2; w[7] = X3; + Sb1(w[8], w[9], w[10], w[11]); + w[8] = X0; w[9] = X1; w[10] = X2; w[11] = X3; + Sb0(w[12], w[13], w[14], w[15]); + w[12] = X0; w[13] = X1; w[14] = X2; w[15] = X3; + Sb7(w[16], w[17], w[18], w[19]); + w[16] = X0; w[17] = X1; w[18] = X2; w[19] = X3; + Sb6(w[20], w[21], w[22], w[23]); + w[20] = X0; w[21] = X1; w[22] = X2; w[23] = X3; + Sb5(w[24], w[25], w[26], w[27]); + w[24] = X0; w[25] = X1; w[26] = X2; w[27] = X3; + Sb4(w[28], w[29], w[30], w[31]); + w[28] = X0; w[29] = X1; w[30] = X2; w[31] = X3; + Sb3(w[32], w[33], w[34], w[35]); + w[32] = X0; w[33] = X1; w[34] = X2; w[35] = X3; + Sb2(w[36], w[37], w[38], w[39]); + w[36] = X0; w[37] = X1; w[38] = X2; w[39] = X3; + Sb1(w[40], w[41], w[42], w[43]); + w[40] = X0; w[41] = X1; w[42] = X2; w[43] = X3; + Sb0(w[44], w[45], w[46], w[47]); + w[44] = X0; w[45] = X1; w[46] = X2; w[47] = X3; + Sb7(w[48], w[49], w[50], w[51]); + w[48] = X0; w[49] = X1; w[50] = X2; w[51] = X3; + Sb6(w[52], w[53], w[54], w[55]); + w[52] = X0; w[53] = X1; w[54] = X2; w[55] = X3; + Sb5(w[56], w[57], w[58], w[59]); + w[56] = X0; w[57] = X1; w[58] = X2; w[59] = X3; + Sb4(w[60], w[61], w[62], w[63]); + w[60] = X0; w[61] = X1; w[62] = X2; w[63] = X3; + Sb3(w[64], w[65], w[66], w[67]); + w[64] = X0; w[65] = X1; w[66] = X2; w[67] = X3; + Sb2(w[68], w[69], w[70], w[71]); + w[68] = X0; w[69] = X1; w[70] = X2; w[71] = X3; + Sb1(w[72], w[73], w[74], w[75]); + w[72] = X0; w[73] = X1; w[74] = X2; w[75] = X3; + Sb0(w[76], w[77], w[78], w[79]); + w[76] = X0; w[77] = X1; w[78] = X2; w[79] = X3; + Sb7(w[80], w[81], w[82], w[83]); + w[80] = X0; w[81] = X1; w[82] = X2; w[83] = X3; + Sb6(w[84], w[85], w[86], w[87]); + w[84] = X0; w[85] = X1; w[86] = X2; w[87] = X3; + Sb5(w[88], w[89], w[90], w[91]); + w[88] = X0; w[89] = X1; w[90] = X2; w[91] = X3; + Sb4(w[92], w[93], w[94], w[95]); + w[92] = X0; w[93] = X1; w[94] = X2; w[95] = X3; + Sb3(w[96], w[97], w[98], w[99]); + w[96] = X0; w[97] = X1; w[98] = X2; w[99] = X3; + Sb2(w[100], w[101], w[102], w[103]); + w[100] = X0; w[101] = X1; w[102] = X2; w[103] = X3; + Sb1(w[104], w[105], w[106], w[107]); + w[104] = X0; w[105] = X1; w[106] = X2; w[107] = X3; + Sb0(w[108], w[109], w[110], w[111]); + w[108] = X0; w[109] = X1; w[110] = X2; w[111] = X3; + Sb7(w[112], w[113], w[114], w[115]); + w[112] = X0; w[113] = X1; w[114] = X2; w[115] = X3; + Sb6(w[116], w[117], w[118], w[119]); + w[116] = X0; w[117] = X1; w[118] = X2; w[119] = X3; + Sb5(w[120], w[121], w[122], w[123]); + w[120] = X0; w[121] = X1; w[122] = X2; w[123] = X3; + Sb4(w[124], w[125], w[126], w[127]); + w[124] = X0; w[125] = X1; w[126] = X2; w[127] = X3; + Sb3(w[128], w[129], w[130], w[131]); + w[128] = X0; w[129] = X1; w[130] = X2; w[131] = X3; + + return w; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal override void EncryptBlock(ReadOnlySpan input, Span output) + { + X3 = (int)Pack.BE_To_UInt32(input); + X2 = (int)Pack.BE_To_UInt32(input[4..]); + X1 = (int)Pack.BE_To_UInt32(input[8..]); + X0 = (int)Pack.BE_To_UInt32(input[12..]); + + Sb0(wKey[0] ^ X0, wKey[1] ^ X1, wKey[2] ^ X2, wKey[3] ^ X3); LT(); + Sb1(wKey[4] ^ X0, wKey[5] ^ X1, wKey[6] ^ X2, wKey[7] ^ X3); LT(); + Sb2(wKey[8] ^ X0, wKey[9] ^ X1, wKey[10] ^ X2, wKey[11] ^ X3); LT(); + Sb3(wKey[12] ^ X0, wKey[13] ^ X1, wKey[14] ^ X2, wKey[15] ^ X3); LT(); + Sb4(wKey[16] ^ X0, wKey[17] ^ X1, wKey[18] ^ X2, wKey[19] ^ X3); LT(); + Sb5(wKey[20] ^ X0, wKey[21] ^ X1, wKey[22] ^ X2, wKey[23] ^ X3); LT(); + Sb6(wKey[24] ^ X0, wKey[25] ^ X1, wKey[26] ^ X2, wKey[27] ^ X3); LT(); + Sb7(wKey[28] ^ X0, wKey[29] ^ X1, wKey[30] ^ X2, wKey[31] ^ X3); LT(); + Sb0(wKey[32] ^ X0, wKey[33] ^ X1, wKey[34] ^ X2, wKey[35] ^ X3); LT(); + Sb1(wKey[36] ^ X0, wKey[37] ^ X1, wKey[38] ^ X2, wKey[39] ^ X3); LT(); + Sb2(wKey[40] ^ X0, wKey[41] ^ X1, wKey[42] ^ X2, wKey[43] ^ X3); LT(); + Sb3(wKey[44] ^ X0, wKey[45] ^ X1, wKey[46] ^ X2, wKey[47] ^ X3); LT(); + Sb4(wKey[48] ^ X0, wKey[49] ^ X1, wKey[50] ^ X2, wKey[51] ^ X3); LT(); + Sb5(wKey[52] ^ X0, wKey[53] ^ X1, wKey[54] ^ X2, wKey[55] ^ X3); LT(); + Sb6(wKey[56] ^ X0, wKey[57] ^ X1, wKey[58] ^ X2, wKey[59] ^ X3); LT(); + Sb7(wKey[60] ^ X0, wKey[61] ^ X1, wKey[62] ^ X2, wKey[63] ^ X3); LT(); + Sb0(wKey[64] ^ X0, wKey[65] ^ X1, wKey[66] ^ X2, wKey[67] ^ X3); LT(); + Sb1(wKey[68] ^ X0, wKey[69] ^ X1, wKey[70] ^ X2, wKey[71] ^ X3); LT(); + Sb2(wKey[72] ^ X0, wKey[73] ^ X1, wKey[74] ^ X2, wKey[75] ^ X3); LT(); + Sb3(wKey[76] ^ X0, wKey[77] ^ X1, wKey[78] ^ X2, wKey[79] ^ X3); LT(); + Sb4(wKey[80] ^ X0, wKey[81] ^ X1, wKey[82] ^ X2, wKey[83] ^ X3); LT(); + Sb5(wKey[84] ^ X0, wKey[85] ^ X1, wKey[86] ^ X2, wKey[87] ^ X3); LT(); + Sb6(wKey[88] ^ X0, wKey[89] ^ X1, wKey[90] ^ X2, wKey[91] ^ X3); LT(); + Sb7(wKey[92] ^ X0, wKey[93] ^ X1, wKey[94] ^ X2, wKey[95] ^ X3); LT(); + Sb0(wKey[96] ^ X0, wKey[97] ^ X1, wKey[98] ^ X2, wKey[99] ^ X3); LT(); + Sb1(wKey[100] ^ X0, wKey[101] ^ X1, wKey[102] ^ X2, wKey[103] ^ X3); LT(); + Sb2(wKey[104] ^ X0, wKey[105] ^ X1, wKey[106] ^ X2, wKey[107] ^ X3); LT(); + Sb3(wKey[108] ^ X0, wKey[109] ^ X1, wKey[110] ^ X2, wKey[111] ^ X3); LT(); + Sb4(wKey[112] ^ X0, wKey[113] ^ X1, wKey[114] ^ X2, wKey[115] ^ X3); LT(); + Sb5(wKey[116] ^ X0, wKey[117] ^ X1, wKey[118] ^ X2, wKey[119] ^ X3); LT(); + Sb6(wKey[120] ^ X0, wKey[121] ^ X1, wKey[122] ^ X2, wKey[123] ^ X3); LT(); + Sb7(wKey[124] ^ X0, wKey[125] ^ X1, wKey[126] ^ X2, wKey[127] ^ X3); + + Pack.UInt32_To_BE((uint)(wKey[131] ^ X3), output); + Pack.UInt32_To_BE((uint)(wKey[130] ^ X2), output[4..]); + Pack.UInt32_To_BE((uint)(wKey[129] ^ X1), output[8..]); + Pack.UInt32_To_BE((uint)(wKey[128] ^ X0), output[12..]); + } + + internal override void DecryptBlock(ReadOnlySpan input, Span output) + { + X3 = wKey[131] ^ (int)Pack.BE_To_UInt32(input); + X2 = wKey[130] ^ (int)Pack.BE_To_UInt32(input[4..]); + X1 = wKey[129] ^ (int)Pack.BE_To_UInt32(input[8..]); + X0 = wKey[128] ^ (int)Pack.BE_To_UInt32(input[12..]); + + Ib7(X0, X1, X2, X3); + X0 ^= wKey[124]; X1 ^= wKey[125]; X2 ^= wKey[126]; X3 ^= wKey[127]; + InverseLT(); Ib6(X0, X1, X2, X3); + X0 ^= wKey[120]; X1 ^= wKey[121]; X2 ^= wKey[122]; X3 ^= wKey[123]; + InverseLT(); Ib5(X0, X1, X2, X3); + X0 ^= wKey[116]; X1 ^= wKey[117]; X2 ^= wKey[118]; X3 ^= wKey[119]; + InverseLT(); Ib4(X0, X1, X2, X3); + X0 ^= wKey[112]; X1 ^= wKey[113]; X2 ^= wKey[114]; X3 ^= wKey[115]; + InverseLT(); Ib3(X0, X1, X2, X3); + X0 ^= wKey[108]; X1 ^= wKey[109]; X2 ^= wKey[110]; X3 ^= wKey[111]; + InverseLT(); Ib2(X0, X1, X2, X3); + X0 ^= wKey[104]; X1 ^= wKey[105]; X2 ^= wKey[106]; X3 ^= wKey[107]; + InverseLT(); Ib1(X0, X1, X2, X3); + X0 ^= wKey[100]; X1 ^= wKey[101]; X2 ^= wKey[102]; X3 ^= wKey[103]; + InverseLT(); Ib0(X0, X1, X2, X3); + X0 ^= wKey[96]; X1 ^= wKey[97]; X2 ^= wKey[98]; X3 ^= wKey[99]; + InverseLT(); Ib7(X0, X1, X2, X3); + X0 ^= wKey[92]; X1 ^= wKey[93]; X2 ^= wKey[94]; X3 ^= wKey[95]; + InverseLT(); Ib6(X0, X1, X2, X3); + X0 ^= wKey[88]; X1 ^= wKey[89]; X2 ^= wKey[90]; X3 ^= wKey[91]; + InverseLT(); Ib5(X0, X1, X2, X3); + X0 ^= wKey[84]; X1 ^= wKey[85]; X2 ^= wKey[86]; X3 ^= wKey[87]; + InverseLT(); Ib4(X0, X1, X2, X3); + X0 ^= wKey[80]; X1 ^= wKey[81]; X2 ^= wKey[82]; X3 ^= wKey[83]; + InverseLT(); Ib3(X0, X1, X2, X3); + X0 ^= wKey[76]; X1 ^= wKey[77]; X2 ^= wKey[78]; X3 ^= wKey[79]; + InverseLT(); Ib2(X0, X1, X2, X3); + X0 ^= wKey[72]; X1 ^= wKey[73]; X2 ^= wKey[74]; X3 ^= wKey[75]; + InverseLT(); Ib1(X0, X1, X2, X3); + X0 ^= wKey[68]; X1 ^= wKey[69]; X2 ^= wKey[70]; X3 ^= wKey[71]; + InverseLT(); Ib0(X0, X1, X2, X3); + X0 ^= wKey[64]; X1 ^= wKey[65]; X2 ^= wKey[66]; X3 ^= wKey[67]; + InverseLT(); Ib7(X0, X1, X2, X3); + X0 ^= wKey[60]; X1 ^= wKey[61]; X2 ^= wKey[62]; X3 ^= wKey[63]; + InverseLT(); Ib6(X0, X1, X2, X3); + X0 ^= wKey[56]; X1 ^= wKey[57]; X2 ^= wKey[58]; X3 ^= wKey[59]; + InverseLT(); Ib5(X0, X1, X2, X3); + X0 ^= wKey[52]; X1 ^= wKey[53]; X2 ^= wKey[54]; X3 ^= wKey[55]; + InverseLT(); Ib4(X0, X1, X2, X3); + X0 ^= wKey[48]; X1 ^= wKey[49]; X2 ^= wKey[50]; X3 ^= wKey[51]; + InverseLT(); Ib3(X0, X1, X2, X3); + X0 ^= wKey[44]; X1 ^= wKey[45]; X2 ^= wKey[46]; X3 ^= wKey[47]; + InverseLT(); Ib2(X0, X1, X2, X3); + X0 ^= wKey[40]; X1 ^= wKey[41]; X2 ^= wKey[42]; X3 ^= wKey[43]; + InverseLT(); Ib1(X0, X1, X2, X3); + X0 ^= wKey[36]; X1 ^= wKey[37]; X2 ^= wKey[38]; X3 ^= wKey[39]; + InverseLT(); Ib0(X0, X1, X2, X3); + X0 ^= wKey[32]; X1 ^= wKey[33]; X2 ^= wKey[34]; X3 ^= wKey[35]; + InverseLT(); Ib7(X0, X1, X2, X3); + X0 ^= wKey[28]; X1 ^= wKey[29]; X2 ^= wKey[30]; X3 ^= wKey[31]; + InverseLT(); Ib6(X0, X1, X2, X3); + X0 ^= wKey[24]; X1 ^= wKey[25]; X2 ^= wKey[26]; X3 ^= wKey[27]; + InverseLT(); Ib5(X0, X1, X2, X3); + X0 ^= wKey[20]; X1 ^= wKey[21]; X2 ^= wKey[22]; X3 ^= wKey[23]; + InverseLT(); Ib4(X0, X1, X2, X3); + X0 ^= wKey[16]; X1 ^= wKey[17]; X2 ^= wKey[18]; X3 ^= wKey[19]; + InverseLT(); Ib3(X0, X1, X2, X3); + X0 ^= wKey[12]; X1 ^= wKey[13]; X2 ^= wKey[14]; X3 ^= wKey[15]; + InverseLT(); Ib2(X0, X1, X2, X3); + X0 ^= wKey[8]; X1 ^= wKey[9]; X2 ^= wKey[10]; X3 ^= wKey[11]; + InverseLT(); Ib1(X0, X1, X2, X3); + X0 ^= wKey[4]; X1 ^= wKey[5]; X2 ^= wKey[6]; X3 ^= wKey[7]; + InverseLT(); Ib0(X0, X1, X2, X3); + + Pack.UInt32_To_BE((uint)(X3 ^ wKey[3]), output); + Pack.UInt32_To_BE((uint)(X2 ^ wKey[2]), output[4..]); + Pack.UInt32_To_BE((uint)(X1 ^ wKey[1]), output[8..]); + Pack.UInt32_To_BE((uint)(X0 ^ wKey[0]), output[12..]); + } +#else + internal override void EncryptBlock(byte[] input, int inOff, byte[] output, int outOff) + { + X3 = (int)Pack.BE_To_UInt32(input, inOff); + X2 = (int)Pack.BE_To_UInt32(input, inOff + 4); + X1 = (int)Pack.BE_To_UInt32(input, inOff + 8); + X0 = (int)Pack.BE_To_UInt32(input, inOff + 12); + + Sb0(wKey[0] ^ X0, wKey[1] ^ X1, wKey[2] ^ X2, wKey[3] ^ X3); LT(); + Sb1(wKey[4] ^ X0, wKey[5] ^ X1, wKey[6] ^ X2, wKey[7] ^ X3); LT(); + Sb2(wKey[8] ^ X0, wKey[9] ^ X1, wKey[10] ^ X2, wKey[11] ^ X3); LT(); + Sb3(wKey[12] ^ X0, wKey[13] ^ X1, wKey[14] ^ X2, wKey[15] ^ X3); LT(); + Sb4(wKey[16] ^ X0, wKey[17] ^ X1, wKey[18] ^ X2, wKey[19] ^ X3); LT(); + Sb5(wKey[20] ^ X0, wKey[21] ^ X1, wKey[22] ^ X2, wKey[23] ^ X3); LT(); + Sb6(wKey[24] ^ X0, wKey[25] ^ X1, wKey[26] ^ X2, wKey[27] ^ X3); LT(); + Sb7(wKey[28] ^ X0, wKey[29] ^ X1, wKey[30] ^ X2, wKey[31] ^ X3); LT(); + Sb0(wKey[32] ^ X0, wKey[33] ^ X1, wKey[34] ^ X2, wKey[35] ^ X3); LT(); + Sb1(wKey[36] ^ X0, wKey[37] ^ X1, wKey[38] ^ X2, wKey[39] ^ X3); LT(); + Sb2(wKey[40] ^ X0, wKey[41] ^ X1, wKey[42] ^ X2, wKey[43] ^ X3); LT(); + Sb3(wKey[44] ^ X0, wKey[45] ^ X1, wKey[46] ^ X2, wKey[47] ^ X3); LT(); + Sb4(wKey[48] ^ X0, wKey[49] ^ X1, wKey[50] ^ X2, wKey[51] ^ X3); LT(); + Sb5(wKey[52] ^ X0, wKey[53] ^ X1, wKey[54] ^ X2, wKey[55] ^ X3); LT(); + Sb6(wKey[56] ^ X0, wKey[57] ^ X1, wKey[58] ^ X2, wKey[59] ^ X3); LT(); + Sb7(wKey[60] ^ X0, wKey[61] ^ X1, wKey[62] ^ X2, wKey[63] ^ X3); LT(); + Sb0(wKey[64] ^ X0, wKey[65] ^ X1, wKey[66] ^ X2, wKey[67] ^ X3); LT(); + Sb1(wKey[68] ^ X0, wKey[69] ^ X1, wKey[70] ^ X2, wKey[71] ^ X3); LT(); + Sb2(wKey[72] ^ X0, wKey[73] ^ X1, wKey[74] ^ X2, wKey[75] ^ X3); LT(); + Sb3(wKey[76] ^ X0, wKey[77] ^ X1, wKey[78] ^ X2, wKey[79] ^ X3); LT(); + Sb4(wKey[80] ^ X0, wKey[81] ^ X1, wKey[82] ^ X2, wKey[83] ^ X3); LT(); + Sb5(wKey[84] ^ X0, wKey[85] ^ X1, wKey[86] ^ X2, wKey[87] ^ X3); LT(); + Sb6(wKey[88] ^ X0, wKey[89] ^ X1, wKey[90] ^ X2, wKey[91] ^ X3); LT(); + Sb7(wKey[92] ^ X0, wKey[93] ^ X1, wKey[94] ^ X2, wKey[95] ^ X3); LT(); + Sb0(wKey[96] ^ X0, wKey[97] ^ X1, wKey[98] ^ X2, wKey[99] ^ X3); LT(); + Sb1(wKey[100] ^ X0, wKey[101] ^ X1, wKey[102] ^ X2, wKey[103] ^ X3); LT(); + Sb2(wKey[104] ^ X0, wKey[105] ^ X1, wKey[106] ^ X2, wKey[107] ^ X3); LT(); + Sb3(wKey[108] ^ X0, wKey[109] ^ X1, wKey[110] ^ X2, wKey[111] ^ X3); LT(); + Sb4(wKey[112] ^ X0, wKey[113] ^ X1, wKey[114] ^ X2, wKey[115] ^ X3); LT(); + Sb5(wKey[116] ^ X0, wKey[117] ^ X1, wKey[118] ^ X2, wKey[119] ^ X3); LT(); + Sb6(wKey[120] ^ X0, wKey[121] ^ X1, wKey[122] ^ X2, wKey[123] ^ X3); LT(); + Sb7(wKey[124] ^ X0, wKey[125] ^ X1, wKey[126] ^ X2, wKey[127] ^ X3); + + Pack.UInt32_To_BE((uint)(wKey[131] ^ X3), output, outOff); + Pack.UInt32_To_BE((uint)(wKey[130] ^ X2), output, outOff + 4); + Pack.UInt32_To_BE((uint)(wKey[129] ^ X1), output, outOff + 8); + Pack.UInt32_To_BE((uint)(wKey[128] ^ X0), output, outOff + 12); + } + + internal override void DecryptBlock(byte[] input, int inOff, byte[] output, int outOff) + { + X3 = wKey[131] ^ (int)Pack.BE_To_UInt32(input, inOff); + X2 = wKey[130] ^ (int)Pack.BE_To_UInt32(input, inOff + 4); + X1 = wKey[129] ^ (int)Pack.BE_To_UInt32(input, inOff + 8); + X0 = wKey[128] ^ (int)Pack.BE_To_UInt32(input, inOff + 12); + + Ib7(X0, X1, X2, X3); + X0 ^= wKey[124]; X1 ^= wKey[125]; X2 ^= wKey[126]; X3 ^= wKey[127]; + InverseLT(); Ib6(X0, X1, X2, X3); + X0 ^= wKey[120]; X1 ^= wKey[121]; X2 ^= wKey[122]; X3 ^= wKey[123]; + InverseLT(); Ib5(X0, X1, X2, X3); + X0 ^= wKey[116]; X1 ^= wKey[117]; X2 ^= wKey[118]; X3 ^= wKey[119]; + InverseLT(); Ib4(X0, X1, X2, X3); + X0 ^= wKey[112]; X1 ^= wKey[113]; X2 ^= wKey[114]; X3 ^= wKey[115]; + InverseLT(); Ib3(X0, X1, X2, X3); + X0 ^= wKey[108]; X1 ^= wKey[109]; X2 ^= wKey[110]; X3 ^= wKey[111]; + InverseLT(); Ib2(X0, X1, X2, X3); + X0 ^= wKey[104]; X1 ^= wKey[105]; X2 ^= wKey[106]; X3 ^= wKey[107]; + InverseLT(); Ib1(X0, X1, X2, X3); + X0 ^= wKey[100]; X1 ^= wKey[101]; X2 ^= wKey[102]; X3 ^= wKey[103]; + InverseLT(); Ib0(X0, X1, X2, X3); + X0 ^= wKey[96]; X1 ^= wKey[97]; X2 ^= wKey[98]; X3 ^= wKey[99]; + InverseLT(); Ib7(X0, X1, X2, X3); + X0 ^= wKey[92]; X1 ^= wKey[93]; X2 ^= wKey[94]; X3 ^= wKey[95]; + InverseLT(); Ib6(X0, X1, X2, X3); + X0 ^= wKey[88]; X1 ^= wKey[89]; X2 ^= wKey[90]; X3 ^= wKey[91]; + InverseLT(); Ib5(X0, X1, X2, X3); + X0 ^= wKey[84]; X1 ^= wKey[85]; X2 ^= wKey[86]; X3 ^= wKey[87]; + InverseLT(); Ib4(X0, X1, X2, X3); + X0 ^= wKey[80]; X1 ^= wKey[81]; X2 ^= wKey[82]; X3 ^= wKey[83]; + InverseLT(); Ib3(X0, X1, X2, X3); + X0 ^= wKey[76]; X1 ^= wKey[77]; X2 ^= wKey[78]; X3 ^= wKey[79]; + InverseLT(); Ib2(X0, X1, X2, X3); + X0 ^= wKey[72]; X1 ^= wKey[73]; X2 ^= wKey[74]; X3 ^= wKey[75]; + InverseLT(); Ib1(X0, X1, X2, X3); + X0 ^= wKey[68]; X1 ^= wKey[69]; X2 ^= wKey[70]; X3 ^= wKey[71]; + InverseLT(); Ib0(X0, X1, X2, X3); + X0 ^= wKey[64]; X1 ^= wKey[65]; X2 ^= wKey[66]; X3 ^= wKey[67]; + InverseLT(); Ib7(X0, X1, X2, X3); + X0 ^= wKey[60]; X1 ^= wKey[61]; X2 ^= wKey[62]; X3 ^= wKey[63]; + InverseLT(); Ib6(X0, X1, X2, X3); + X0 ^= wKey[56]; X1 ^= wKey[57]; X2 ^= wKey[58]; X3 ^= wKey[59]; + InverseLT(); Ib5(X0, X1, X2, X3); + X0 ^= wKey[52]; X1 ^= wKey[53]; X2 ^= wKey[54]; X3 ^= wKey[55]; + InverseLT(); Ib4(X0, X1, X2, X3); + X0 ^= wKey[48]; X1 ^= wKey[49]; X2 ^= wKey[50]; X3 ^= wKey[51]; + InverseLT(); Ib3(X0, X1, X2, X3); + X0 ^= wKey[44]; X1 ^= wKey[45]; X2 ^= wKey[46]; X3 ^= wKey[47]; + InverseLT(); Ib2(X0, X1, X2, X3); + X0 ^= wKey[40]; X1 ^= wKey[41]; X2 ^= wKey[42]; X3 ^= wKey[43]; + InverseLT(); Ib1(X0, X1, X2, X3); + X0 ^= wKey[36]; X1 ^= wKey[37]; X2 ^= wKey[38]; X3 ^= wKey[39]; + InverseLT(); Ib0(X0, X1, X2, X3); + X0 ^= wKey[32]; X1 ^= wKey[33]; X2 ^= wKey[34]; X3 ^= wKey[35]; + InverseLT(); Ib7(X0, X1, X2, X3); + X0 ^= wKey[28]; X1 ^= wKey[29]; X2 ^= wKey[30]; X3 ^= wKey[31]; + InverseLT(); Ib6(X0, X1, X2, X3); + X0 ^= wKey[24]; X1 ^= wKey[25]; X2 ^= wKey[26]; X3 ^= wKey[27]; + InverseLT(); Ib5(X0, X1, X2, X3); + X0 ^= wKey[20]; X1 ^= wKey[21]; X2 ^= wKey[22]; X3 ^= wKey[23]; + InverseLT(); Ib4(X0, X1, X2, X3); + X0 ^= wKey[16]; X1 ^= wKey[17]; X2 ^= wKey[18]; X3 ^= wKey[19]; + InverseLT(); Ib3(X0, X1, X2, X3); + X0 ^= wKey[12]; X1 ^= wKey[13]; X2 ^= wKey[14]; X3 ^= wKey[15]; + InverseLT(); Ib2(X0, X1, X2, X3); + X0 ^= wKey[8]; X1 ^= wKey[9]; X2 ^= wKey[10]; X3 ^= wKey[11]; + InverseLT(); Ib1(X0, X1, X2, X3); + X0 ^= wKey[4]; X1 ^= wKey[5]; X2 ^= wKey[6]; X3 ^= wKey[7]; + InverseLT(); Ib0(X0, X1, X2, X3); + + Pack.UInt32_To_BE((uint)(X3 ^ wKey[3]), output, outOff); + Pack.UInt32_To_BE((uint)(X2 ^ wKey[2]), output, outOff + 4); + Pack.UInt32_To_BE((uint)(X1 ^ wKey[1]), output, outOff + 8); + Pack.UInt32_To_BE((uint)(X0 ^ wKey[0]), output, outOff + 12); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/TnepresEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/TnepresEngine.cs.meta new file mode 100644 index 000000000..76eb96d66 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/TnepresEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 94414e692bd322540bf0d382fe5770c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/TwofishEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/TwofishEngine.cs new file mode 100644 index 000000000..231fd1f6b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/TwofishEngine.cs @@ -0,0 +1,746 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * A class that provides Twofish encryption operations. + * + * This Java implementation is based on the Java reference + * implementation provided by Bruce Schneier and developed + * by Raif S. Naffah. + */ + public sealed class TwofishEngine + : IBlockCipher + { + private static readonly byte[,] P = { + { // p0 + (byte) 0xA9, (byte) 0x67, (byte) 0xB3, (byte) 0xE8, + (byte) 0x04, (byte) 0xFD, (byte) 0xA3, (byte) 0x76, + (byte) 0x9A, (byte) 0x92, (byte) 0x80, (byte) 0x78, + (byte) 0xE4, (byte) 0xDD, (byte) 0xD1, (byte) 0x38, + (byte) 0x0D, (byte) 0xC6, (byte) 0x35, (byte) 0x98, + (byte) 0x18, (byte) 0xF7, (byte) 0xEC, (byte) 0x6C, + (byte) 0x43, (byte) 0x75, (byte) 0x37, (byte) 0x26, + (byte) 0xFA, (byte) 0x13, (byte) 0x94, (byte) 0x48, + (byte) 0xF2, (byte) 0xD0, (byte) 0x8B, (byte) 0x30, + (byte) 0x84, (byte) 0x54, (byte) 0xDF, (byte) 0x23, + (byte) 0x19, (byte) 0x5B, (byte) 0x3D, (byte) 0x59, + (byte) 0xF3, (byte) 0xAE, (byte) 0xA2, (byte) 0x82, + (byte) 0x63, (byte) 0x01, (byte) 0x83, (byte) 0x2E, + (byte) 0xD9, (byte) 0x51, (byte) 0x9B, (byte) 0x7C, + (byte) 0xA6, (byte) 0xEB, (byte) 0xA5, (byte) 0xBE, + (byte) 0x16, (byte) 0x0C, (byte) 0xE3, (byte) 0x61, + (byte) 0xC0, (byte) 0x8C, (byte) 0x3A, (byte) 0xF5, + (byte) 0x73, (byte) 0x2C, (byte) 0x25, (byte) 0x0B, + (byte) 0xBB, (byte) 0x4E, (byte) 0x89, (byte) 0x6B, + (byte) 0x53, (byte) 0x6A, (byte) 0xB4, (byte) 0xF1, + (byte) 0xE1, (byte) 0xE6, (byte) 0xBD, (byte) 0x45, + (byte) 0xE2, (byte) 0xF4, (byte) 0xB6, (byte) 0x66, + (byte) 0xCC, (byte) 0x95, (byte) 0x03, (byte) 0x56, + (byte) 0xD4, (byte) 0x1C, (byte) 0x1E, (byte) 0xD7, + (byte) 0xFB, (byte) 0xC3, (byte) 0x8E, (byte) 0xB5, + (byte) 0xE9, (byte) 0xCF, (byte) 0xBF, (byte) 0xBA, + (byte) 0xEA, (byte) 0x77, (byte) 0x39, (byte) 0xAF, + (byte) 0x33, (byte) 0xC9, (byte) 0x62, (byte) 0x71, + (byte) 0x81, (byte) 0x79, (byte) 0x09, (byte) 0xAD, + (byte) 0x24, (byte) 0xCD, (byte) 0xF9, (byte) 0xD8, + (byte) 0xE5, (byte) 0xC5, (byte) 0xB9, (byte) 0x4D, + (byte) 0x44, (byte) 0x08, (byte) 0x86, (byte) 0xE7, + (byte) 0xA1, (byte) 0x1D, (byte) 0xAA, (byte) 0xED, + (byte) 0x06, (byte) 0x70, (byte) 0xB2, (byte) 0xD2, + (byte) 0x41, (byte) 0x7B, (byte) 0xA0, (byte) 0x11, + (byte) 0x31, (byte) 0xC2, (byte) 0x27, (byte) 0x90, + (byte) 0x20, (byte) 0xF6, (byte) 0x60, (byte) 0xFF, + (byte) 0x96, (byte) 0x5C, (byte) 0xB1, (byte) 0xAB, + (byte) 0x9E, (byte) 0x9C, (byte) 0x52, (byte) 0x1B, + (byte) 0x5F, (byte) 0x93, (byte) 0x0A, (byte) 0xEF, + (byte) 0x91, (byte) 0x85, (byte) 0x49, (byte) 0xEE, + (byte) 0x2D, (byte) 0x4F, (byte) 0x8F, (byte) 0x3B, + (byte) 0x47, (byte) 0x87, (byte) 0x6D, (byte) 0x46, + (byte) 0xD6, (byte) 0x3E, (byte) 0x69, (byte) 0x64, + (byte) 0x2A, (byte) 0xCE, (byte) 0xCB, (byte) 0x2F, + (byte) 0xFC, (byte) 0x97, (byte) 0x05, (byte) 0x7A, + (byte) 0xAC, (byte) 0x7F, (byte) 0xD5, (byte) 0x1A, + (byte) 0x4B, (byte) 0x0E, (byte) 0xA7, (byte) 0x5A, + (byte) 0x28, (byte) 0x14, (byte) 0x3F, (byte) 0x29, + (byte) 0x88, (byte) 0x3C, (byte) 0x4C, (byte) 0x02, + (byte) 0xB8, (byte) 0xDA, (byte) 0xB0, (byte) 0x17, + (byte) 0x55, (byte) 0x1F, (byte) 0x8A, (byte) 0x7D, + (byte) 0x57, (byte) 0xC7, (byte) 0x8D, (byte) 0x74, + (byte) 0xB7, (byte) 0xC4, (byte) 0x9F, (byte) 0x72, + (byte) 0x7E, (byte) 0x15, (byte) 0x22, (byte) 0x12, + (byte) 0x58, (byte) 0x07, (byte) 0x99, (byte) 0x34, + (byte) 0x6E, (byte) 0x50, (byte) 0xDE, (byte) 0x68, + (byte) 0x65, (byte) 0xBC, (byte) 0xDB, (byte) 0xF8, + (byte) 0xC8, (byte) 0xA8, (byte) 0x2B, (byte) 0x40, + (byte) 0xDC, (byte) 0xFE, (byte) 0x32, (byte) 0xA4, + (byte) 0xCA, (byte) 0x10, (byte) 0x21, (byte) 0xF0, + (byte) 0xD3, (byte) 0x5D, (byte) 0x0F, (byte) 0x00, + (byte) 0x6F, (byte) 0x9D, (byte) 0x36, (byte) 0x42, + (byte) 0x4A, (byte) 0x5E, (byte) 0xC1, (byte) 0xE0 }, + { // p1 + (byte) 0x75, (byte) 0xF3, (byte) 0xC6, (byte) 0xF4, + (byte) 0xDB, (byte) 0x7B, (byte) 0xFB, (byte) 0xC8, + (byte) 0x4A, (byte) 0xD3, (byte) 0xE6, (byte) 0x6B, + (byte) 0x45, (byte) 0x7D, (byte) 0xE8, (byte) 0x4B, + (byte) 0xD6, (byte) 0x32, (byte) 0xD8, (byte) 0xFD, + (byte) 0x37, (byte) 0x71, (byte) 0xF1, (byte) 0xE1, + (byte) 0x30, (byte) 0x0F, (byte) 0xF8, (byte) 0x1B, + (byte) 0x87, (byte) 0xFA, (byte) 0x06, (byte) 0x3F, + (byte) 0x5E, (byte) 0xBA, (byte) 0xAE, (byte) 0x5B, + (byte) 0x8A, (byte) 0x00, (byte) 0xBC, (byte) 0x9D, + (byte) 0x6D, (byte) 0xC1, (byte) 0xB1, (byte) 0x0E, + (byte) 0x80, (byte) 0x5D, (byte) 0xD2, (byte) 0xD5, + (byte) 0xA0, (byte) 0x84, (byte) 0x07, (byte) 0x14, + (byte) 0xB5, (byte) 0x90, (byte) 0x2C, (byte) 0xA3, + (byte) 0xB2, (byte) 0x73, (byte) 0x4C, (byte) 0x54, + (byte) 0x92, (byte) 0x74, (byte) 0x36, (byte) 0x51, + (byte) 0x38, (byte) 0xB0, (byte) 0xBD, (byte) 0x5A, + (byte) 0xFC, (byte) 0x60, (byte) 0x62, (byte) 0x96, + (byte) 0x6C, (byte) 0x42, (byte) 0xF7, (byte) 0x10, + (byte) 0x7C, (byte) 0x28, (byte) 0x27, (byte) 0x8C, + (byte) 0x13, (byte) 0x95, (byte) 0x9C, (byte) 0xC7, + (byte) 0x24, (byte) 0x46, (byte) 0x3B, (byte) 0x70, + (byte) 0xCA, (byte) 0xE3, (byte) 0x85, (byte) 0xCB, + (byte) 0x11, (byte) 0xD0, (byte) 0x93, (byte) 0xB8, + (byte) 0xA6, (byte) 0x83, (byte) 0x20, (byte) 0xFF, + (byte) 0x9F, (byte) 0x77, (byte) 0xC3, (byte) 0xCC, + (byte) 0x03, (byte) 0x6F, (byte) 0x08, (byte) 0xBF, + (byte) 0x40, (byte) 0xE7, (byte) 0x2B, (byte) 0xE2, + (byte) 0x79, (byte) 0x0C, (byte) 0xAA, (byte) 0x82, + (byte) 0x41, (byte) 0x3A, (byte) 0xEA, (byte) 0xB9, + (byte) 0xE4, (byte) 0x9A, (byte) 0xA4, (byte) 0x97, + (byte) 0x7E, (byte) 0xDA, (byte) 0x7A, (byte) 0x17, + (byte) 0x66, (byte) 0x94, (byte) 0xA1, (byte) 0x1D, + (byte) 0x3D, (byte) 0xF0, (byte) 0xDE, (byte) 0xB3, + (byte) 0x0B, (byte) 0x72, (byte) 0xA7, (byte) 0x1C, + (byte) 0xEF, (byte) 0xD1, (byte) 0x53, (byte) 0x3E, + (byte) 0x8F, (byte) 0x33, (byte) 0x26, (byte) 0x5F, + (byte) 0xEC, (byte) 0x76, (byte) 0x2A, (byte) 0x49, + (byte) 0x81, (byte) 0x88, (byte) 0xEE, (byte) 0x21, + (byte) 0xC4, (byte) 0x1A, (byte) 0xEB, (byte) 0xD9, + (byte) 0xC5, (byte) 0x39, (byte) 0x99, (byte) 0xCD, + (byte) 0xAD, (byte) 0x31, (byte) 0x8B, (byte) 0x01, + (byte) 0x18, (byte) 0x23, (byte) 0xDD, (byte) 0x1F, + (byte) 0x4E, (byte) 0x2D, (byte) 0xF9, (byte) 0x48, + (byte) 0x4F, (byte) 0xF2, (byte) 0x65, (byte) 0x8E, + (byte) 0x78, (byte) 0x5C, (byte) 0x58, (byte) 0x19, + (byte) 0x8D, (byte) 0xE5, (byte) 0x98, (byte) 0x57, + (byte) 0x67, (byte) 0x7F, (byte) 0x05, (byte) 0x64, + (byte) 0xAF, (byte) 0x63, (byte) 0xB6, (byte) 0xFE, + (byte) 0xF5, (byte) 0xB7, (byte) 0x3C, (byte) 0xA5, + (byte) 0xCE, (byte) 0xE9, (byte) 0x68, (byte) 0x44, + (byte) 0xE0, (byte) 0x4D, (byte) 0x43, (byte) 0x69, + (byte) 0x29, (byte) 0x2E, (byte) 0xAC, (byte) 0x15, + (byte) 0x59, (byte) 0xA8, (byte) 0x0A, (byte) 0x9E, + (byte) 0x6E, (byte) 0x47, (byte) 0xDF, (byte) 0x34, + (byte) 0x35, (byte) 0x6A, (byte) 0xCF, (byte) 0xDC, + (byte) 0x22, (byte) 0xC9, (byte) 0xC0, (byte) 0x9B, + (byte) 0x89, (byte) 0xD4, (byte) 0xED, (byte) 0xAB, + (byte) 0x12, (byte) 0xA2, (byte) 0x0D, (byte) 0x52, + (byte) 0xBB, (byte) 0x02, (byte) 0x2F, (byte) 0xA9, + (byte) 0xD7, (byte) 0x61, (byte) 0x1E, (byte) 0xB4, + (byte) 0x50, (byte) 0x04, (byte) 0xF6, (byte) 0xC2, + (byte) 0x16, (byte) 0x25, (byte) 0x86, (byte) 0x56, + (byte) 0x55, (byte) 0x09, (byte) 0xBE, (byte) 0x91 } + }; + + /** + * Define the fixed p0/p1 permutations used in keyed S-box lookup. + * By changing the following constant definitions, the S-boxes will + * automatically Get changed in the Twofish engine. + */ + private const int P_00 = 1; + private const int P_01 = 0; + private const int P_02 = 0; + private const int P_03 = P_01 ^ 1; + private const int P_04 = 1; + + private const int P_10 = 0; + private const int P_11 = 0; + private const int P_12 = 1; + private const int P_13 = P_11 ^ 1; + private const int P_14 = 0; + + private const int P_20 = 1; + private const int P_21 = 1; + private const int P_22 = 0; + private const int P_23 = P_21 ^ 1; + private const int P_24 = 0; + + private const int P_30 = 0; + private const int P_31 = 1; + private const int P_32 = 1; + private const int P_33 = P_31 ^ 1; + private const int P_34 = 1; + + /* Primitive polynomial for GF(256) */ + private const int GF256_FDBK = 0x169; + private const int GF256_FDBK_2 = GF256_FDBK / 2; + private const int GF256_FDBK_4 = GF256_FDBK / 4; + + private const int RS_GF_FDBK = 0x14D; // field generator + + //==================================== + // Useful constants + //==================================== + + private const int ROUNDS = 16; + private const int MAX_ROUNDS = 16; // bytes = 128 bits + private const int BLOCK_SIZE = 16; // bytes = 128 bits + private const int MAX_KEY_BITS = 256; + + private const int INPUT_WHITEN=0; + private const int OUTPUT_WHITEN=INPUT_WHITEN+BLOCK_SIZE/4; // 4 + private const int ROUND_SUBKEYS=OUTPUT_WHITEN+BLOCK_SIZE/4;// 8 + + private const int TOTAL_SUBKEYS=ROUND_SUBKEYS+2*MAX_ROUNDS;// 40 + + private const int SK_STEP = 0x02020202; + private const int SK_BUMP = 0x01010101; + private const int SK_ROTL = 9; + + private bool encrypting; + + private int[] gMDS0 = new int[MAX_KEY_BITS]; + private int[] gMDS1 = new int[MAX_KEY_BITS]; + private int[] gMDS2 = new int[MAX_KEY_BITS]; + private int[] gMDS3 = new int[MAX_KEY_BITS]; + + /** + * gSubKeys[] and gSBox[] are eventually used in the + * encryption and decryption methods. + */ + private int[] gSubKeys; + private int[] gSBox; + + private int k64Cnt; + + private byte[] workingKey; + + public TwofishEngine() + { + // calculate the MDS matrix + int[] m1 = new int[2]; + int[] mX = new int[2]; + int[] mY = new int[2]; + int j; + + for (int i=0; i< MAX_KEY_BITS ; i++) + { + j = P[0,i] & 0xff; + m1[0] = j; + mX[0] = Mx_X(j) & 0xff; + mY[0] = Mx_Y(j) & 0xff; + + j = P[1,i] & 0xff; + m1[1] = j; + mX[1] = Mx_X(j) & 0xff; + mY[1] = Mx_Y(j) & 0xff; + + gMDS0[i] = m1[P_00] | mX[P_00] << 8 | + mY[P_00] << 16 | mY[P_00] << 24; + + gMDS1[i] = mY[P_10] | mY[P_10] << 8 | + mX[P_10] << 16 | m1[P_10] << 24; + + gMDS2[i] = mX[P_20] | mY[P_20] << 8 | + m1[P_20] << 16 | mY[P_20] << 24; + + gMDS3[i] = mX[P_30] | m1[P_30] << 8 | + mY[P_30] << 16 | mX[P_30] << 24; + } + } + + /** + * initialise a Twofish cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param parameters the parameters required to set up the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public void Init( + bool forEncryption, + ICipherParameters parameters) + { + if (!(parameters is KeyParameter)) + throw new ArgumentException("invalid parameter passed to Twofish init - " + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + + this.encrypting = forEncryption; + this.workingKey = ((KeyParameter)parameters).GetKey(); + + int keyBits = this.workingKey.Length * 8; + switch (keyBits) + { + case 128: + case 192: + case 256: + break; + default: + throw new ArgumentException("Key length not 128/192/256 bits."); + } + + this.k64Cnt = this.workingKey.Length / 8; + SetKey(this.workingKey); + } + + public string AlgorithmName + { + get { return "Twofish"; } + } + + public int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + if (workingKey == null) + throw new InvalidOperationException("Twofish not initialised"); + + Check.DataLength(input, inOff, BLOCK_SIZE, "input buffer too short"); + Check.OutputLength(output, outOff, BLOCK_SIZE, "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + if (encrypting) + { + EncryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); + } + else + { + DecryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); + } +#else + if (encrypting) + { + EncryptBlock(input, inOff, output, outOff); + } + else + { + DecryptBlock(input, inOff, output, outOff); + } +#endif + + return BLOCK_SIZE; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessBlock(ReadOnlySpan input, Span output) + { + if (workingKey == null) + throw new InvalidOperationException("Twofish not initialised"); + + Check.DataLength(input, BLOCK_SIZE, "input buffer too short"); + Check.OutputLength(output, BLOCK_SIZE, "output buffer too short"); + + if (encrypting) + { + EncryptBlock(input, output); + } + else + { + DecryptBlock(input, output); + } + + return BLOCK_SIZE; + } +#endif + + public int GetBlockSize() + { + return BLOCK_SIZE; + } + + //================================== + // Private Implementation + //================================== + + private void SetKey(byte[] key) + { + int[] k32e = new int[MAX_KEY_BITS/64]; // 4 + int[] k32o = new int[MAX_KEY_BITS/64]; // 4 + + int[] sBoxKeys = new int[MAX_KEY_BITS/64]; // 4 + gSubKeys = new int[TOTAL_SUBKEYS]; + + /* + * k64Cnt is the number of 8 byte blocks (64 chunks) that are in the input key. + * The input key is 16, 24 or 32 bytes, so the range for k64Cnt is 2..4 + */ + for (int i = 0; i < k64Cnt; i++) + { + int p = i * 8; + + k32e[i] = (int)Pack.LE_To_UInt32(key, p); + k32o[i] = (int)Pack.LE_To_UInt32(key, p + 4); + + sBoxKeys[k64Cnt-1-i] = RS_MDS_Encode(k32e[i], k32o[i]); + } + + int q,A,B; + for (int i=0; i < TOTAL_SUBKEYS / 2 ; i++) + { + q = i*SK_STEP; + A = F32(q, k32e); + B = F32(q+SK_BUMP, k32o); + B = Integers.RotateLeft(B, 8); + A += B; + gSubKeys[i*2] = A; + A += B; + gSubKeys[i*2 + 1] = Integers.RotateLeft(A, SK_ROTL); + } + + /* + * fully expand the table for speed + */ + int k0 = sBoxKeys[0]; + int k1 = sBoxKeys[1]; + int k2 = sBoxKeys[2]; + int k3 = sBoxKeys[3]; + int b0, b1, b2, b3; + gSBox = new int[4*MAX_KEY_BITS]; + for (int i=0; i input, Span output) + { + int x0 = (int)Pack.LE_To_UInt32(input) ^ gSubKeys[INPUT_WHITEN]; + int x1 = (int)Pack.LE_To_UInt32(input[4..]) ^ gSubKeys[INPUT_WHITEN + 1]; + int x2 = (int)Pack.LE_To_UInt32(input[8..]) ^ gSubKeys[INPUT_WHITEN + 2]; + int x3 = (int)Pack.LE_To_UInt32(input[12..]) ^ gSubKeys[INPUT_WHITEN + 3]; + + int k = ROUND_SUBKEYS; + int t0, t1; + for (int r = 0; r < ROUNDS; r +=2) + { + t0 = Fe32_0(x0); + t1 = Fe32_3(x1); + x2 ^= t0 + t1 + gSubKeys[k++]; + x2 = Integers.RotateRight(x2, 1); + x3 = Integers.RotateLeft(x3, 1) ^ (t0 + 2*t1 + gSubKeys[k++]); + + t0 = Fe32_0(x2); + t1 = Fe32_3(x3); + x0 ^= t0 + t1 + gSubKeys[k++]; + x0 = Integers.RotateRight(x0, 1); + x1 = Integers.RotateLeft(x1, 1) ^ (t0 + 2*t1 + gSubKeys[k++]); + } + + Pack.UInt32_To_LE((uint)(x2 ^ gSubKeys[OUTPUT_WHITEN]), output); + Pack.UInt32_To_LE((uint)(x3 ^ gSubKeys[OUTPUT_WHITEN + 1]), output[4..]); + Pack.UInt32_To_LE((uint)(x0 ^ gSubKeys[OUTPUT_WHITEN + 2]), output[8..]); + Pack.UInt32_To_LE((uint)(x1 ^ gSubKeys[OUTPUT_WHITEN + 3]), output[12..]); + } + + /** + * Decrypt the given input starting at the given offset and place + * the result in the provided buffer starting at the given offset. + * The input will be an exact multiple of our blocksize. + */ + private void DecryptBlock(ReadOnlySpan input, Span output) + { + int x2 = (int)Pack.LE_To_UInt32(input) ^ gSubKeys[OUTPUT_WHITEN]; + int x3 = (int)Pack.LE_To_UInt32(input[4..]) ^ gSubKeys[OUTPUT_WHITEN + 1]; + int x0 = (int)Pack.LE_To_UInt32(input[8..]) ^ gSubKeys[OUTPUT_WHITEN + 2]; + int x1 = (int)Pack.LE_To_UInt32(input[12..]) ^ gSubKeys[OUTPUT_WHITEN + 3]; + + int k = ROUND_SUBKEYS + 2 * ROUNDS -1 ; + int t0, t1; + for (int r = 0; r< ROUNDS ; r +=2) + { + t0 = Fe32_0(x2); + t1 = Fe32_3(x3); + x1 ^= t0 + 2*t1 + gSubKeys[k--]; + x0 = Integers.RotateLeft(x0, 1) ^ (t0 + t1 + gSubKeys[k--]); + x1 = Integers.RotateRight(x1, 1); + + t0 = Fe32_0(x0); + t1 = Fe32_3(x1); + x3 ^= t0 + 2*t1 + gSubKeys[k--]; + x2 = Integers.RotateLeft(x2, 1) ^ (t0 + t1 + gSubKeys[k--]); + x3 = Integers.RotateRight(x3, 1); + } + + Pack.UInt32_To_LE((uint)(x0 ^ gSubKeys[INPUT_WHITEN]), output); + Pack.UInt32_To_LE((uint)(x1 ^ gSubKeys[INPUT_WHITEN + 1]), output[4..]); + Pack.UInt32_To_LE((uint)(x2 ^ gSubKeys[INPUT_WHITEN + 2]), output[8..]); + Pack.UInt32_To_LE((uint)(x3 ^ gSubKeys[INPUT_WHITEN + 3]), output[12..]); + } +#else + /** + * Encrypt the given input starting at the given offset and place + * the result in the provided buffer starting at the given offset. + * The input will be an exact multiple of our blocksize. + * + * encryptBlock uses the pre-calculated gSBox[] and subKey[] + * arrays. + */ + private void EncryptBlock(byte[] src, int srcIndex, byte[] dst, int dstIndex) + { + int x0 = (int)Pack.LE_To_UInt32(src, srcIndex) ^ gSubKeys[INPUT_WHITEN]; + int x1 = (int)Pack.LE_To_UInt32(src, srcIndex + 4) ^ gSubKeys[INPUT_WHITEN + 1]; + int x2 = (int)Pack.LE_To_UInt32(src, srcIndex + 8) ^ gSubKeys[INPUT_WHITEN + 2]; + int x3 = (int)Pack.LE_To_UInt32(src, srcIndex + 12) ^ gSubKeys[INPUT_WHITEN + 3]; + + int k = ROUND_SUBKEYS; + int t0, t1; + for (int r = 0; r < ROUNDS; r +=2) + { + t0 = Fe32_0(x0); + t1 = Fe32_3(x1); + x2 ^= t0 + t1 + gSubKeys[k++]; + x2 = Integers.RotateRight(x2, 1); + x3 = Integers.RotateLeft(x3, 1) ^ (t0 + 2*t1 + gSubKeys[k++]); + + t0 = Fe32_0(x2); + t1 = Fe32_3(x3); + x0 ^= t0 + t1 + gSubKeys[k++]; + x0 = Integers.RotateRight(x0, 1); + x1 = Integers.RotateLeft(x1, 1) ^ (t0 + 2*t1 + gSubKeys[k++]); + } + + Pack.UInt32_To_LE((uint)(x2 ^ gSubKeys[OUTPUT_WHITEN]), dst, dstIndex); + Pack.UInt32_To_LE((uint)(x3 ^ gSubKeys[OUTPUT_WHITEN + 1]), dst, dstIndex + 4); + Pack.UInt32_To_LE((uint)(x0 ^ gSubKeys[OUTPUT_WHITEN + 2]), dst, dstIndex + 8); + Pack.UInt32_To_LE((uint)(x1 ^ gSubKeys[OUTPUT_WHITEN + 3]), dst, dstIndex + 12); + } + + /** + * Decrypt the given input starting at the given offset and place + * the result in the provided buffer starting at the given offset. + * The input will be an exact multiple of our blocksize. + */ + private void DecryptBlock(byte[] src, int srcIndex, byte[] dst, int dstIndex) + { + int x2 = (int)Pack.LE_To_UInt32(src, srcIndex) ^ gSubKeys[OUTPUT_WHITEN]; + int x3 = (int)Pack.LE_To_UInt32(src, srcIndex + 4) ^ gSubKeys[OUTPUT_WHITEN + 1]; + int x0 = (int)Pack.LE_To_UInt32(src, srcIndex + 8) ^ gSubKeys[OUTPUT_WHITEN + 2]; + int x1 = (int)Pack.LE_To_UInt32(src, srcIndex + 12) ^ gSubKeys[OUTPUT_WHITEN + 3]; + + int k = ROUND_SUBKEYS + 2 * ROUNDS -1 ; + int t0, t1; + for (int r = 0; r < ROUNDS ; r += 2) + { + t0 = Fe32_0(x2); + t1 = Fe32_3(x3); + x1 ^= t0 + 2*t1 + gSubKeys[k--]; + x0 = Integers.RotateLeft(x0, 1) ^ (t0 + t1 + gSubKeys[k--]); + x1 = Integers.RotateRight(x1, 1); + + t0 = Fe32_0(x0); + t1 = Fe32_3(x1); + x3 ^= t0 + 2*t1 + gSubKeys[k--]; + x2 = Integers.RotateLeft(x2, 1) ^ (t0 + t1 + gSubKeys[k--]); + x3 = Integers.RotateRight(x3, 1); + } + + Pack.UInt32_To_LE((uint)(x0 ^ gSubKeys[INPUT_WHITEN]), dst, dstIndex); + Pack.UInt32_To_LE((uint)(x1 ^ gSubKeys[INPUT_WHITEN + 1]), dst, dstIndex + 4); + Pack.UInt32_To_LE((uint)(x2 ^ gSubKeys[INPUT_WHITEN + 2]), dst, dstIndex + 8); + Pack.UInt32_To_LE((uint)(x3 ^ gSubKeys[INPUT_WHITEN + 3]), dst, dstIndex + 12); + } +#endif + + /* + * TODO: This can be optimised and made cleaner by combining + * the functionality in this function and applying it appropriately + * to the creation of the subkeys during key setup. + */ + private int F32(int x, int[] k32) + { + int b0 = M_b0(x); + int b1 = M_b1(x); + int b2 = M_b2(x); + int b3 = M_b3(x); + int k0 = k32[0]; + int k1 = k32[1]; + int k2 = k32[2]; + int k3 = k32[3]; + + int result = 0; + switch (k64Cnt & 3) + { + case 1: + result = gMDS0[(P[P_01,b0] & 0xff) ^ M_b0(k0)] ^ + gMDS1[(P[P_11,b1] & 0xff) ^ M_b1(k0)] ^ + gMDS2[(P[P_21,b2] & 0xff) ^ M_b2(k0)] ^ + gMDS3[(P[P_31,b3] & 0xff) ^ M_b3(k0)]; + break; + case 0: /* 256 bits of key */ + b0 = (P[P_04,b0] & 0xff) ^ M_b0(k3); + b1 = (P[P_14,b1] & 0xff) ^ M_b1(k3); + b2 = (P[P_24,b2] & 0xff) ^ M_b2(k3); + b3 = (P[P_34,b3] & 0xff) ^ M_b3(k3); + goto case 3; + case 3: + b0 = (P[P_03,b0] & 0xff) ^ M_b0(k2); + b1 = (P[P_13,b1] & 0xff) ^ M_b1(k2); + b2 = (P[P_23,b2] & 0xff) ^ M_b2(k2); + b3 = (P[P_33,b3] & 0xff) ^ M_b3(k2); + goto case 2; + case 2: + result = + gMDS0[(P[P_01,(P[P_02,b0]&0xff)^M_b0(k1)]&0xff)^M_b0(k0)] ^ + gMDS1[(P[P_11,(P[P_12,b1]&0xff)^M_b1(k1)]&0xff)^M_b1(k0)] ^ + gMDS2[(P[P_21,(P[P_22,b2]&0xff)^M_b2(k1)]&0xff)^M_b2(k0)] ^ + gMDS3[(P[P_31,(P[P_32,b3]&0xff)^M_b3(k1)]&0xff)^M_b3(k0)]; + break; + } + return result; + } + + /** + * Use (12, 8) Reed-Solomon code over GF(256) to produce + * a key S-box 32-bit entity from 2 key material 32-bit + * entities. + * + * @param k0 first 32-bit entity + * @param k1 second 32-bit entity + * @return Remainder polynomial Generated using RS code + */ + private int RS_MDS_Encode(int k0, int k1) + { + int r = k1; + for (int i = 0 ; i < 4 ; i++) // shift 1 byte at a time + { + r = RS_rem(r); + } + r ^= k0; + for (int i=0 ; i < 4 ; i++) + { + r = RS_rem(r); + } + + return r; + } + + /** + * Reed-Solomon code parameters: (12,8) reversible code: + *

+ *

+        * G(x) = x^4 + (a+1/a)x^3 + ax^2 + (a+1/a)x + 1
+        * 
+ * where a = primitive root of field generator 0x14D + *

+ */ + private int RS_rem(int x) + { + int b = (int) (((uint)x >> 24) & 0xff); + int g2 = ((b << 1) ^ + ((b & 0x80) != 0 ? RS_GF_FDBK : 0)) & 0xff; + int g3 = ( (int)((uint)b >> 1) ^ + ((b & 0x01) != 0 ? (int)((uint)RS_GF_FDBK >> 1) : 0)) ^ g2 ; + return ((x << 8) ^ (g3 << 24) ^ (g2 << 16) ^ (g3 << 8) ^ b); + } + + private int LFSR1(int x) + { + return (x >> 1) ^ + (((x & 0x01) != 0) ? GF256_FDBK_2 : 0); + } + + private int LFSR2(int x) + { + return (x >> 2) ^ + (((x & 0x02) != 0) ? GF256_FDBK_2 : 0) ^ + (((x & 0x01) != 0) ? GF256_FDBK_4 : 0); + } + + private int Mx_X(int x) + { + return x ^ LFSR2(x); + } // 5B + + private int Mx_Y(int x) + { + return x ^ LFSR1(x) ^ LFSR2(x); + } // EF + + private int M_b0(int x) + { + return x & 0xff; + } + + private int M_b1(int x) + { + return (int)((uint)x >> 8) & 0xff; + } + + private int M_b2(int x) + { + return (int)((uint)x >> 16) & 0xff; + } + + private int M_b3(int x) + { + return (int)((uint)x >> 24) & 0xff; + } + + private int Fe32_0(int x) + { + return gSBox[ 0x000 + 2*(x & 0xff) ] ^ + gSBox[ 0x001 + 2*((int)((uint)x >> 8) & 0xff) ] ^ + gSBox[ 0x200 + 2*((int)((uint)x >> 16) & 0xff) ] ^ + gSBox[ 0x201 + 2*((int)((uint)x >> 24) & 0xff) ]; + } + + private int Fe32_3(int x) + { + return gSBox[ 0x000 + 2*((int)((uint)x >> 24) & 0xff) ] ^ + gSBox[ 0x001 + 2*(x & 0xff) ] ^ + gSBox[ 0x200 + 2*((int)((uint)x >> 8) & 0xff) ] ^ + gSBox[ 0x201 + 2*((int)((uint)x >> 16) & 0xff) ]; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/TwofishEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/TwofishEngine.cs.meta new file mode 100644 index 000000000..eab3ab822 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/TwofishEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 55bc155aecc561841af464c77f3a4cf9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/VMPCEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/VMPCEngine.cs new file mode 100644 index 000000000..ecb20df30 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/VMPCEngine.cs @@ -0,0 +1,160 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + public class VmpcEngine + : IStreamCipher + { + /* + * variables to hold the state of the VMPC engine during encryption and + * decryption + */ + protected byte n = 0; + protected byte[] P = null; + protected byte s = 0; + + protected byte[] workingIV; + protected byte[] workingKey; + + public virtual string AlgorithmName + { + get { return "VMPC"; } + } + + /** + * initialise a VMPC cipher. + * + * @param forEncryption + * whether or not we are for encryption. + * @param params + * the parameters required to set up the cipher. + * @exception ArgumentException + * if the params argument is inappropriate. + */ + public virtual void Init( + bool forEncryption, + ICipherParameters parameters) + { + if (!(parameters is ParametersWithIV)) + throw new ArgumentException("VMPC Init parameters must include an IV"); + + ParametersWithIV ivParams = (ParametersWithIV) parameters; + + if (!(ivParams.Parameters is KeyParameter)) + throw new ArgumentException("VMPC Init parameters must include a key"); + + KeyParameter key = (KeyParameter)ivParams.Parameters; + + this.workingIV = ivParams.GetIV(); + + if (workingIV == null || workingIV.Length < 1 || workingIV.Length > 768) + throw new ArgumentException("VMPC requires 1 to 768 bytes of IV"); + + this.workingKey = key.GetKey(); + + InitKey(this.workingKey, this.workingIV); + } + + protected virtual void InitKey( + byte[] keyBytes, + byte[] ivBytes) + { + s = 0; + P = new byte[256]; + for (int i = 0; i < 256; i++) + { + P[i] = (byte) i; + } + + for (int m = 0; m < 768; m++) + { + s = P[(s + P[m & 0xff] + keyBytes[m % keyBytes.Length]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + for (int m = 0; m < 768; m++) + { + s = P[(s + P[m & 0xff] + ivBytes[m % ivBytes.Length]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + n = 0; + } + + public virtual void ProcessBytes( + byte[] input, + int inOff, + int len, + byte[] output, + int outOff) + { + Check.DataLength(input, inOff, len, "input buffer too short"); + Check.OutputLength(output, outOff, len, "output buffer too short"); + + for (int i = 0; i < len; i++) + { + byte pn = P[n]; + s = P[(s + pn) & 0xff]; + byte ps = P[s]; + byte z = P[(P[ps] + 1) & 0xff]; + // encryption + P[n] = ps; + P[s] = pn; + n = (byte)(n + 1); + + // xor + output[i + outOff] = (byte)(input[i + inOff] ^ z); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void ProcessBytes(ReadOnlySpan input, Span output) + { + Check.OutputLength(output, input.Length, "output buffer too short"); + + for (int i = 0; i < input.Length; i++) + { + byte pn = P[n]; + s = P[(s + pn) & 0xff]; + byte ps = P[s]; + byte z = P[(P[ps] + 1) & 0xff]; + // encryption + P[n] = ps; + P[s] = pn; + n = (byte)(n + 1); + + // xor + output[i] = (byte)(input[i] ^ z); + } + } +#endif + + public virtual void Reset() + { + InitKey(this.workingKey, this.workingIV); + } + + public virtual byte ReturnByte( + byte input) + { + s = P[(s + P[n & 0xff]) & 0xff]; + byte z = P[(P[(P[s & 0xff]) & 0xff] + 1) & 0xff]; + // encryption + byte temp = P[n & 0xff]; + P[n & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + n = (byte) ((n + 1) & 0xff); + + // xor + return (byte) (input ^ z); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/VMPCEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/VMPCEngine.cs.meta new file mode 100644 index 000000000..97e927eca --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/VMPCEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c29feaad92e27d4a8e258e0856100ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/VMPCKSA3Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/VMPCKSA3Engine.cs new file mode 100644 index 000000000..ed7b6c0de --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/VMPCKSA3Engine.cs @@ -0,0 +1,55 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + public class VmpcKsa3Engine + : VmpcEngine + { + public override string AlgorithmName + { + get { return "VMPC-KSA3"; } + } + + protected override void InitKey( + byte[] keyBytes, + byte[] ivBytes) + { + s = 0; + P = new byte[256]; + for (int i = 0; i < 256; i++) + { + P[i] = (byte) i; + } + + for (int m = 0; m < 768; m++) + { + s = P[(s + P[m & 0xff] + keyBytes[m % keyBytes.Length]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + + for (int m = 0; m < 768; m++) + { + s = P[(s + P[m & 0xff] + ivBytes[m % ivBytes.Length]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + + for (int m = 0; m < 768; m++) + { + s = P[(s + P[m & 0xff] + keyBytes[m % keyBytes.Length]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + + n = 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/VMPCKSA3Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/VMPCKSA3Engine.cs.meta new file mode 100644 index 000000000..21fe52d87 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/VMPCKSA3Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 05ccf3686014dfd48981280c5cc5b3b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/XSalsa20Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/XSalsa20Engine.cs new file mode 100644 index 000000000..efcaf3919 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/XSalsa20Engine.cs @@ -0,0 +1,68 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /// + /// Implementation of Daniel J. Bernstein's XSalsa20 stream cipher - Salsa20 with an extended nonce. + /// + /// + /// XSalsa20 requires a 256 bit key, and a 192 bit nonce. + /// + public class XSalsa20Engine + : Salsa20Engine + { + public override string AlgorithmName + { + get { return "XSalsa20"; } + } + + protected override int NonceSize + { + get { return 24; } + } + + /// + /// XSalsa20 key generation: process 256 bit input key and 128 bits of the input nonce + /// using a core Salsa20 function without input addition to produce 256 bit working key + /// and use that with the remaining 64 bits of nonce to initialize a standard Salsa20 engine state. + /// + protected override void SetKey(byte[] keyBytes, byte[] ivBytes) + { + if (keyBytes == null) + throw new ArgumentException(AlgorithmName + " doesn't support re-init with null key"); + + if (keyBytes.Length != 32) + throw new ArgumentException(AlgorithmName + " requires a 256 bit key"); + + // Set key for HSalsa20 + base.SetKey(keyBytes, ivBytes); + + // Pack next 64 bits of IV into engine state instead of counter + Pack.LE_To_UInt32(ivBytes, 8, engineState, 8, 2); + + // Process engine state to generate Salsa20 key + uint[] hsalsa20Out = new uint[engineState.Length]; + SalsaCore(20, engineState, hsalsa20Out); + + // Set new key, removing addition in last round of salsaCore + engineState[1] = hsalsa20Out[0] - engineState[0]; + engineState[2] = hsalsa20Out[5] - engineState[5]; + engineState[3] = hsalsa20Out[10] - engineState[10]; + engineState[4] = hsalsa20Out[15] - engineState[15]; + + engineState[11] = hsalsa20Out[6] - engineState[6]; + engineState[12] = hsalsa20Out[7] - engineState[7]; + engineState[13] = hsalsa20Out[8] - engineState[8]; + engineState[14] = hsalsa20Out[9] - engineState[9]; + + // Last 64 bits of input IV + Pack.LE_To_UInt32(ivBytes, 16, engineState, 6, 2); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/XSalsa20Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/XSalsa20Engine.cs.meta new file mode 100644 index 000000000..d35fc4241 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/XSalsa20Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2496ed6753462e243b7d54834823fc34 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/XTEAEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/XTEAEngine.cs new file mode 100644 index 000000000..b6b73714e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/XTEAEngine.cs @@ -0,0 +1,207 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines +{ + /** + * An XTEA engine. + */ + public class XteaEngine + : IBlockCipher + { + private const int + rounds = 32, + block_size = 8, +// key_size = 16, + delta = unchecked((int) 0x9E3779B9); + + /* + * the expanded key array of 4 subkeys + */ + private uint[] _S = new uint[4], + _sum0 = new uint[32], + _sum1 = new uint[32]; + private bool _initialised, _forEncryption; + + /** + * Create an instance of the TEA encryption algorithm + * and set some defaults + */ + public XteaEngine() + { + _initialised = false; + } + + public virtual string AlgorithmName + { + get { return "XTEA"; } + } + + public virtual int GetBlockSize() + { + return block_size; + } + + /** + * initialise + * + * @param forEncryption whether or not we are for encryption. + * @param params the parameters required to set up the cipher. + * @exception ArgumentException if the params argument is + * inappropriate. + */ + public virtual void Init( + bool forEncryption, + ICipherParameters parameters) + { + if (!(parameters is KeyParameter)) + { + throw new ArgumentException("invalid parameter passed to TEA init - " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + } + + _forEncryption = forEncryption; + _initialised = true; + + KeyParameter p = (KeyParameter) parameters; + + setKey(p.GetKey()); + } + + public virtual int ProcessBlock(byte[] inBytes, int inOff, byte[] outBytes, int outOff) + { + if (!_initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.DataLength(inBytes, inOff, block_size, "input buffer too short"); + Check.OutputLength(outBytes, outOff, block_size, "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return _forEncryption + ? EncryptBlock(inBytes.AsSpan(inOff), outBytes.AsSpan(outOff)) + : DecryptBlock(inBytes.AsSpan(inOff), outBytes.AsSpan(outOff)); +#else + return _forEncryption + ? EncryptBlock(inBytes, inOff, outBytes, outOff) + : DecryptBlock(inBytes, inOff, outBytes, outOff); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + if (!_initialised) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.DataLength(input, block_size, "input buffer too short"); + Check.OutputLength(output, block_size, "output buffer too short"); + + return _forEncryption + ? EncryptBlock(input, output) + : DecryptBlock(input, output); + } +#endif + + /** + * Re-key the cipher. + * + * @param key the key to be used + */ + private void setKey( + byte[] key) + { + int i, j; + for (i = j = 0; i < 4; i++,j+=4) + { + _S[i] = Pack.BE_To_UInt32(key, j); + } + + for (i = j = 0; i < rounds; i++) + { + _sum0[i] = ((uint)j + _S[j & 3]); + j += delta; + _sum1[i] = ((uint)j + _S[j >> 11 & 3]); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int EncryptBlock(ReadOnlySpan input, Span output) + { + // Pack bytes into integers + uint v0 = Pack.BE_To_UInt32(input); + uint v1 = Pack.BE_To_UInt32(input[4..]); + + for (int i = 0; i < rounds; i++) + { + v0 += ((v1 << 4 ^ v1 >> 5) + v1) ^ _sum0[i]; + v1 += ((v0 << 4 ^ v0 >> 5) + v0) ^ _sum1[i]; + } + + Pack.UInt32_To_BE(v0, output); + Pack.UInt32_To_BE(v1, output[4..]); + + return block_size; + } + + private int DecryptBlock(ReadOnlySpan input, Span output) + { + // Pack bytes into integers + uint v0 = Pack.BE_To_UInt32(input); + uint v1 = Pack.BE_To_UInt32(input[4..]); + + for (int i = rounds - 1; i >= 0; i--) + { + v1 -= ((v0 << 4 ^ v0 >> 5) + v0) ^ _sum1[i]; + v0 -= ((v1 << 4 ^ v1 >> 5) + v1) ^ _sum0[i]; + } + + Pack.UInt32_To_BE(v0, output); + Pack.UInt32_To_BE(v1, output[4..]); + + return block_size; + } +#else + private int EncryptBlock(byte[] inBytes, int inOff, byte[] outBytes, int outOff) + { + uint v0 = Pack.BE_To_UInt32(inBytes, inOff); + uint v1 = Pack.BE_To_UInt32(inBytes, inOff + 4); + + for (int i = 0; i < rounds; i++) + { + v0 += ((v1 << 4 ^ v1 >> 5) + v1) ^ _sum0[i]; + v1 += ((v0 << 4 ^ v0 >> 5) + v0) ^ _sum1[i]; + } + + Pack.UInt32_To_BE(v0, outBytes, outOff); + Pack.UInt32_To_BE(v1, outBytes, outOff + 4); + + return block_size; + } + + private int DecryptBlock(byte[] inBytes, int inOff, byte[] outBytes, int outOff) + { + // Pack bytes into integers + uint v0 = Pack.BE_To_UInt32(inBytes, inOff); + uint v1 = Pack.BE_To_UInt32(inBytes, inOff + 4); + + for (int i = rounds-1; i >= 0; i--) + { + v1 -= ((v0 << 4 ^ v0 >> 5) + v0) ^ _sum1[i]; + v0 -= ((v1 << 4 ^ v1 >> 5) + v1) ^ _sum0[i]; + } + + Pack.UInt32_To_BE(v0, outBytes, outOff); + Pack.UInt32_To_BE(v1, outBytes, outOff + 4); + + return block_size; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/XTEAEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/XTEAEngine.cs.meta new file mode 100644 index 000000000..bfccba881 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/engines/XTEAEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6051826ba9ea2a74bbbc2efd92b5d977 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe.meta new file mode 100644 index 000000000..5b8ed8c5d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6d6b5364b25302a4e856affff7876835 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/FpeEngine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/FpeEngine.cs new file mode 100644 index 000000000..b5a5b29b1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/FpeEngine.cs @@ -0,0 +1,77 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Fpe +{ + /// Base class for format-preserving encryption. + public abstract class FpeEngine + { + protected readonly IBlockCipher baseCipher; + + protected bool forEncryption; + protected FpeParameters fpeParameters; + + protected FpeEngine(IBlockCipher baseCipher) + { + this.baseCipher = baseCipher; + } + + /// + /// Process length bytes from inBuf, writing the output to outBuf. + /// + /// number of bytes output. + /// input data. + /// offset in input data to start at. + /// number of bytes to process. + /// destination buffer. + /// offset to start writing at in destination buffer. + public virtual int ProcessBlock(byte[] inBuf, int inOff, int length, byte[] outBuf, int outOff) + { + if (fpeParameters == null) + throw new InvalidOperationException("FPE engine not initialized"); + if (length < 0) + throw new ArgumentException("cannot be negative", "length"); + if (inBuf == null) + throw new ArgumentNullException("inBuf"); + if (outBuf == null) + throw new ArgumentNullException("outBuf"); + + Check.DataLength(inBuf, inOff, length, "input buffer too short"); + Check.OutputLength(outBuf, outOff, length, "output buffer too short"); + + if (forEncryption) + { + return EncryptBlock(inBuf, inOff, length, outBuf, outOff); + } + else + { + return DecryptBlock(inBuf, inOff, length, outBuf, outOff); + } + } + + protected static bool IsOverrideSet(string propName) + { + string propValue = Org.BouncyCastle.Utilities.Platform.GetEnvironmentVariable(propName); + + return propValue != null && Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase("true", propValue); + } + + /// + /// Initialize the FPE engine for encryption/decryption. + /// + /// number of bytes output. + /// true if initialising for encryption, false otherwise. + /// the key and other parameters to use to set the engine up. + public abstract void Init(bool forEncryption, ICipherParameters parameters); + + protected abstract int EncryptBlock(byte[] inBuf, int inOff, int length, byte[] outBuf, int outOff); + + protected abstract int DecryptBlock(byte[] inBuf, int inOff, int length, byte[] outBuf, int outOff); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/FpeEngine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/FpeEngine.cs.meta new file mode 100644 index 000000000..f8106fd2b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/FpeEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 953f130711a85f24bb8454d0f19b6c56 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/FpeFf1Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/FpeFf1Engine.cs new file mode 100644 index 000000000..4592e8d7b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/FpeFf1Engine.cs @@ -0,0 +1,86 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Fpe +{ + public class FpeFf1Engine + : FpeEngine + { + public FpeFf1Engine() + : this(AesUtilities.CreateEngine()) + { + } + + public FpeFf1Engine(IBlockCipher baseCipher) + : base(baseCipher) + { + if (IsOverrideSet(SP80038G.FPE_DISABLED) || + IsOverrideSet(SP80038G.FF1_DISABLED)) + { + throw new InvalidOperationException("FF1 encryption disabled"); + } + } + + public override void Init(bool forEncryption, ICipherParameters parameters) + { + this.forEncryption = forEncryption; + this.fpeParameters = (FpeParameters)parameters; + + baseCipher.Init(!fpeParameters.UseInverseFunction, fpeParameters.Key); + } + + protected override int EncryptBlock(byte[] inBuf, int inOff, int length, byte[] outBuf, int outOff) + { + byte[] enc; + + if (fpeParameters.Radix > 256) + { + if ((length & 1) != 0) + throw new ArgumentException("input must be an even number of bytes for a wide radix"); + + ushort[] u16In = Pack.BE_To_UInt16(inBuf, inOff, length); + ushort[] u16Out = SP80038G.EncryptFF1w(baseCipher, fpeParameters.Radix, fpeParameters.GetTweak(), + u16In, 0, u16In.Length); + enc = Pack.UInt16_To_BE(u16Out, 0, u16Out.Length); + } + else + { + enc = SP80038G.EncryptFF1(baseCipher, fpeParameters.Radix, fpeParameters.GetTweak(), inBuf, inOff, length); + } + + Array.Copy(enc, 0, outBuf, outOff, length); + + return length; + } + + protected override int DecryptBlock(byte[] inBuf, int inOff, int length, byte[] outBuf, int outOff) + { + byte[] dec; + + if (fpeParameters.Radix > 256) + { + if ((length & 1) != 0) + throw new ArgumentException("input must be an even number of bytes for a wide radix"); + + ushort[] u16In = Pack.BE_To_UInt16(inBuf, inOff, length); + ushort[] u16Out = SP80038G.DecryptFF1w(baseCipher, fpeParameters.Radix, fpeParameters.GetTweak(), + u16In, 0, u16In.Length); + dec = Pack.UInt16_To_BE(u16Out, 0, u16Out.Length); + } + else + { + dec = SP80038G.DecryptFF1(baseCipher, fpeParameters.Radix, fpeParameters.GetTweak(), inBuf, inOff, length); + } + + Array.Copy(dec, 0, outBuf, outOff, length); + + return length; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/FpeFf1Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/FpeFf1Engine.cs.meta new file mode 100644 index 000000000..1b2406f02 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/FpeFf1Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: da6abe2cfc07556448a8a7974a3aac8e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/FpeFf3_1Engine.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/FpeFf3_1Engine.cs new file mode 100644 index 000000000..d1e678854 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/FpeFf3_1Engine.cs @@ -0,0 +1,90 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Fpe +{ + public class FpeFf3_1Engine + : FpeEngine + { + public FpeFf3_1Engine() + : this(AesUtilities.CreateEngine()) + { + } + + public FpeFf3_1Engine(IBlockCipher baseCipher) + : base(baseCipher) + { + if (IsOverrideSet(SP80038G.FPE_DISABLED)) + { + throw new InvalidOperationException("FPE disabled"); + } + } + + public override void Init(bool forEncryption, ICipherParameters parameters) + { + this.forEncryption = forEncryption; + this.fpeParameters = (FpeParameters)parameters; + + baseCipher.Init(!fpeParameters.UseInverseFunction, new KeyParameter(Arrays.Reverse(fpeParameters.Key.GetKey()))); + + if (fpeParameters.GetTweak().Length != 7) + throw new ArgumentException("tweak should be 56 bits"); + } + + protected override int EncryptBlock(byte[] inBuf, int inOff, int length, byte[] outBuf, int outOff) + { + byte[] enc; + + if (fpeParameters.Radix > 256) + { + if ((length & 1) != 0) + throw new ArgumentException("input must be an even number of bytes for a wide radix"); + + ushort[] u16In = Pack.BE_To_UInt16(inBuf, inOff, length); + ushort[] u16Out = SP80038G.EncryptFF3_1w(baseCipher, fpeParameters.Radix, fpeParameters.GetTweak(), + u16In, 0, u16In.Length); + enc = Pack.UInt16_To_BE(u16Out, 0, u16Out.Length); + } + else + { + enc = SP80038G.EncryptFF3_1(baseCipher, fpeParameters.Radix, fpeParameters.GetTweak(), inBuf, inOff, length); + } + + Array.Copy(enc, 0, outBuf, outOff, length); + + return length; + } + + protected override int DecryptBlock(byte[] inBuf, int inOff, int length, byte[] outBuf, int outOff) + { + byte[] dec; + + if (fpeParameters.Radix > 256) + { + if ((length & 1) != 0) + throw new ArgumentException("input must be an even number of bytes for a wide radix"); + + ushort[] u16In = Pack.BE_To_UInt16(inBuf, inOff, length); + ushort[] u16Out = SP80038G.DecryptFF3_1w(baseCipher, fpeParameters.Radix, fpeParameters.GetTweak(), + u16In, 0, u16In.Length); + dec = Pack.UInt16_To_BE(u16Out, 0, u16Out.Length); + } + else + { + dec = SP80038G.DecryptFF3_1(baseCipher, fpeParameters.Radix, fpeParameters.GetTweak(), inBuf, inOff, length); + } + + Array.Copy(dec, 0, outBuf, outOff, length); + + return length; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/FpeFf3_1Engine.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/FpeFf3_1Engine.cs.meta new file mode 100644 index 000000000..265c55531 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/FpeFf3_1Engine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2370a5b944558b142b312e088bed00f1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/SP80038G.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/SP80038G.cs new file mode 100644 index 000000000..bf71662d8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/SP80038G.cs @@ -0,0 +1,653 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Fpe +{ + /* + * SP800-38G Format-Preserving Encryption + * + * TODOs + * - Initialize the cipher internally or externally? + * 1. Algs 7-10 don't appear to require forward vs. inverse transform, although sample data is forward. + * 2. Algs 9-10 specify reversal of the cipher key! + * - Separate construction/initialization stage for "prerequisites" + */ + internal class SP80038G + { + internal static readonly string FPE_DISABLED = "BestHTTP.SecureProtocol.Org.BouncyCastle.Fpe.Disable"; + internal static readonly string FF1_DISABLED = "BestHTTP.SecureProtocol.Org.BouncyCastle.Fpe.Disable_Ff1"; + + protected static readonly int BLOCK_SIZE = 16; + protected static readonly double LOG2 = System.Math.Log(2.0); + protected static readonly double TWO_TO_96 = System.Math.Pow(2, 96); + + public static byte[] DecryptFF1(IBlockCipher cipher, int radix, byte[] tweak, byte[] buf, int off, int len) + { + checkArgs(cipher, true, radix, buf, off, len); + + // Algorithm 8 + int n = len; + int u = n / 2, v = n - u; + + ushort[] A = toShort(buf, off, u); + ushort[] B = toShort(buf, off + u, v); + + ushort[] rv = decFF1(cipher, radix, tweak, n, u, v, A, B); + + return toByte(rv); + } + + public static ushort[] DecryptFF1w(IBlockCipher cipher, int radix, byte[] tweak, ushort[] buf, int off, int len) + { + checkArgs(cipher, true, radix, buf, off, len); + + // Algorithm 8 + int n = len; + int u = n / 2, v = n - u; + + ushort[] A = new ushort[u]; + ushort[] B = new ushort[v]; + + Array.Copy(buf, off, A, 0, u); + Array.Copy(buf, off + u, B, 0, v); + + return decFF1(cipher, radix, tweak, n, u, v, A, B); + } + + private static ushort[] decFF1(IBlockCipher cipher, int radix, byte[] T, int n, int u, int v, ushort[] A, ushort[] B) + { + int t = T.Length; + int b = ((int)Ceil(System.Math.Log((double)radix) * (double)v / LOG2) + 7) / 8; + int d = (((b + 3) / 4) * 4) + 4; + + byte[] P = calculateP_FF1(radix, (byte)u, n, t); + + BigInteger bigRadix = BigInteger.ValueOf(radix); + BigInteger[] modUV = calculateModUV(bigRadix, u, v); + + int m = u; + + for (int i = 9; i >= 0; --i) + { + // i. - iv. + BigInteger y = calculateY_FF1(cipher, bigRadix, T, b, d, i, P, A); + + // v. + m = n - m; + BigInteger modulus = modUV[i & 1]; + + // vi. + BigInteger c = num(bigRadix, B).Subtract(y).Mod(modulus); + + // vii. - ix. + ushort[] C = B; + B = A; + A = C; + str(bigRadix, c, m, C, 0); + } + + return Arrays.Concatenate(A, B); + } + + public static byte[] DecryptFF3(IBlockCipher cipher, int radix, byte[] tweak64, byte[] buf, int off, int len) + { + checkArgs(cipher, false, radix, buf, off, len); + + if (tweak64.Length != 8) + { + throw new ArgumentException(); + } + + return implDecryptFF3(cipher, radix, tweak64, buf, off, len); + } + + public static byte[] DecryptFF3_1(IBlockCipher cipher, int radix, byte[] tweak56, byte[] buf, int off, int len) + { + checkArgs(cipher, false, radix, buf, off, len); + + if (tweak56.Length != 7) + { + throw new ArgumentException("tweak should be 56 bits"); + } + + byte[] tweak64 = calculateTweak64_FF3_1(tweak56); + + return implDecryptFF3(cipher, radix, tweak64, buf, off, len); + } + + public static ushort[] DecryptFF3_1w(IBlockCipher cipher, int radix, byte[] tweak56, ushort[] buf, int off, int len) + { + checkArgs(cipher, false, radix, buf, off, len); + + if (tweak56.Length != 7) + { + throw new ArgumentException("tweak should be 56 bits"); + } + + byte[] tweak64 = calculateTweak64_FF3_1(tweak56); + + return implDecryptFF3w(cipher, radix, tweak64, buf, off, len); + } + + public static byte[] EncryptFF1(IBlockCipher cipher, int radix, byte[] tweak, byte[] buf, int off, int len) + { + checkArgs(cipher, true, radix, buf, off, len); + + // Algorithm 7 + int n = len; + int u = n / 2, v = n - u; + + ushort[] A = toShort(buf, off, u); + ushort[] B = toShort(buf, off + u, v); + + return toByte(encFF1(cipher, radix, tweak, n, u, v, A, B)); + } + + public static ushort[] EncryptFF1w(IBlockCipher cipher, int radix, byte[] tweak, ushort[] buf, int off, int len) + { + checkArgs(cipher, true, radix, buf, off, len); + + // Algorithm 7 + int n = len; + int u = n / 2, v = n - u; + + ushort[] A = new ushort[u]; + ushort[] B = new ushort[v]; + + Array.Copy(buf, off, A, 0, u); + Array.Copy(buf, off + u, B, 0, v); + + return encFF1(cipher, radix, tweak, n, u, v, A, B); + } + + private static ushort[] encFF1(IBlockCipher cipher, int radix, byte[] T, int n, int u, int v, ushort[] A, ushort[] B) + { + int t = T.Length; + + int b = ((int)Ceil(System.Math.Log((double)radix) * (double)v / LOG2) + 7) / 8; + int d = (((b + 3) / 4) * 4) + 4; + + byte[] P = calculateP_FF1(radix, (byte)u, n, t); + + BigInteger bigRadix = BigInteger.ValueOf(radix); + BigInteger[] modUV = calculateModUV(bigRadix, u, v); + + int m = v; + + for (int i = 0; i < 10; ++i) + { + // i. - iv. + BigInteger y = calculateY_FF1(cipher, bigRadix, T, b, d, i, P, B); + + // v. + m = n - m; + BigInteger modulus = modUV[i & 1]; + + // vi. + BigInteger c = num(bigRadix, A).Add(y).Mod(modulus); + + // vii. - ix. + ushort[] C = A; + A = B; + B = C; + str(bigRadix, c, m, C, 0); + } + + return Arrays.Concatenate(A, B); + } + + public static byte[] EncryptFF3(IBlockCipher cipher, int radix, byte[] tweak64, byte[] buf, int off, int len) + { + checkArgs(cipher, false, radix, buf, off, len); + + if (tweak64.Length != 8) + { + throw new ArgumentException(); + } + + return implEncryptFF3(cipher, radix, tweak64, buf, off, len); + } + + public static ushort[] EncryptFF3w(IBlockCipher cipher, int radix, byte[] tweak64, ushort[] buf, int off, int len) + { + checkArgs(cipher, false, radix, buf, off, len); + + if (tweak64.Length != 8) + { + throw new ArgumentException(); + } + + return implEncryptFF3w(cipher, radix, tweak64, buf, off, len); + } + + public static ushort[] EncryptFF3_1w(IBlockCipher cipher, int radix, byte[] tweak56, ushort[] buf, int off, int len) + { + checkArgs(cipher, false, radix, buf, off, len); + + if (tweak56.Length != 7) + { + throw new ArgumentException("tweak should be 56 bits"); + } + byte[] tweak64 = calculateTweak64_FF3_1(tweak56); + + return EncryptFF3w(cipher, radix, tweak64, buf, off, len); + } + + public static byte[] EncryptFF3_1(IBlockCipher cipher, int radix, byte[] tweak56, byte[] buf, int off, int len) + { + checkArgs(cipher, false, radix, buf, off, len); + + if (tweak56.Length != 7) + { + throw new ArgumentException("tweak should be 56 bits"); + } + + byte[] tweak64 = calculateTweak64_FF3_1(tweak56); + + return EncryptFF3(cipher, radix, tweak64, buf, off, len); + } + + protected static BigInteger[] calculateModUV(BigInteger bigRadix, int u, int v) + { + BigInteger[] modUV = new BigInteger[2]; + modUV[0] = bigRadix.Pow(u); + modUV[1] = modUV[0]; + if (v != u) + { + modUV[1] = modUV[1].Multiply(bigRadix); + } + return modUV; + } + + protected static byte[] calculateP_FF1(int radix, byte uLow, int n, int t) + { + byte[] P = new byte[BLOCK_SIZE]; + P[0] = 1; + P[1] = 2; + P[2] = 1; + + // Radix + P[3] = 0; + P[4] = (byte)(radix >> 8); + P[5] = (byte)radix; + + P[6] = 10; + P[7] = uLow; + Pack.UInt32_To_BE((uint)n, P, 8); + Pack.UInt32_To_BE((uint)t, P, 12); + return P; + } + + protected static byte[] calculateTweak64_FF3_1(byte[] tweak56) + { + byte[] tweak64 = new byte[8]; + tweak64[0] = tweak56[0]; + tweak64[1] = tweak56[1]; + tweak64[2] = tweak56[2]; + tweak64[3] = (byte)(tweak56[3] & 0xF0); + tweak64[4] = tweak56[4]; + tweak64[5] = tweak56[5]; + tweak64[6] = tweak56[6]; + tweak64[7] = (byte)(tweak56[3] << 4); + + return tweak64; + } + + protected static BigInteger calculateY_FF1(IBlockCipher cipher, BigInteger bigRadix, byte[] T, int b, int d, int round, byte[] P, ushort[] AB) + { + int t = T.Length; + + // i. + int zeroes = -(t + b + 1) & 15; + byte[] Q = new byte[t + zeroes + 1 + b]; + Array.Copy(T, 0, Q, 0, t); + Q[t + zeroes] = (byte)round; + + BigInteger numAB = num(bigRadix, AB); + BigIntegers.AsUnsignedByteArray(numAB, Q, Q.Length - b, b); + + // ii. + byte[] R = prf(cipher, Arrays.Concatenate(P, Q)); + + // iii. + byte[] sBlocks = R; + if (d > BLOCK_SIZE) + { + int sBlocksLen = (d + BLOCK_SIZE - 1) / BLOCK_SIZE; + sBlocks = new byte[sBlocksLen * BLOCK_SIZE]; + + uint j0 = Pack.BE_To_UInt32(R, BLOCK_SIZE - 4); + Array.Copy(R, 0, sBlocks, 0, BLOCK_SIZE); + + for (uint j = 1; j < sBlocksLen; ++j) + { + int sOff = (int)(j * BLOCK_SIZE); + + Array.Copy(R, 0, sBlocks, sOff, BLOCK_SIZE - 4); + Pack.UInt32_To_BE(j0 ^ j, sBlocks, sOff + BLOCK_SIZE - 4); + + cipher.ProcessBlock(sBlocks, sOff, sBlocks, sOff); + } + } + + // iv. + return new BigInteger(1, sBlocks, 0, d); + } + + protected static BigInteger calculateY_FF3(IBlockCipher cipher, BigInteger bigRadix, byte[] T, int wOff, + uint round, ushort[] AB) + { + // ii. + byte[] P = new byte[BLOCK_SIZE]; + Pack.UInt32_To_BE(Pack.BE_To_UInt32(T, wOff) ^ round, P, 0); + + BigInteger numAB = num(bigRadix, AB); + BigIntegers.AsUnsignedByteArray(numAB, P, 4, BLOCK_SIZE - 4); + + // iii. + Array.Reverse(P); + cipher.ProcessBlock(P, 0, P, 0); + Array.Reverse(P); + byte[] S = P; + + // iv. + return new BigInteger(1, S); + } + + protected static void checkArgs(IBlockCipher cipher, bool isFF1, int radix, ushort[] buf, int off, int len) + { + checkCipher(cipher); + if (radix < 2 || radix > (1 << 16)) + { + throw new ArgumentException(); + } + checkData(isFF1, radix, buf, off, len); + } + + protected static void checkArgs(IBlockCipher cipher, bool isFF1, int radix, byte[] buf, int off, int len) + { + checkCipher(cipher); + if (radix < 2 || radix > (1 << 8)) + { + throw new ArgumentException(); + } + checkData(isFF1, radix, buf, off, len); + } + + protected static void checkCipher(IBlockCipher cipher) + { + if (BLOCK_SIZE != cipher.GetBlockSize()) + { + throw new ArgumentException(); + } + } + + protected static void checkData(bool isFF1, int radix, ushort[] buf, int off, int len) + { + checkLength(isFF1, radix, len); + for (int i = 0; i < len; ++i) + { + int b = buf[off + i] & 0xFFFF; + if (b >= radix) + { + throw new ArgumentException("input data outside of radix"); + } + } + } + + protected static void checkData(bool isFF1, int radix, byte[] buf, int off, int len) + { + checkLength(isFF1, radix, len); + for (int i = 0; i < len; ++i) + { + int b = buf[off + i] & 0xFF; + if (b >= radix) + { + throw new ArgumentException("input data outside of radix"); + } + } + } + + private static void checkLength(bool isFF1, int radix, int len) + { + if (len < 2 || System.Math.Pow(radix, len) < 1000000) + { + throw new ArgumentException("input too short"); + } + if (!isFF1) + { + int maxLen = 2 * (int)(System.Math.Floor(System.Math.Log(TWO_TO_96) / System.Math.Log(radix))); + if (len > maxLen) + { + throw new ArgumentException("maximum input length is " + maxLen); + } + } + } + + protected static byte[] implDecryptFF3(IBlockCipher cipher, int radix, byte[] tweak64, byte[] buf, int off, int len) + { + // Algorithm 10 + byte[] T = tweak64; + int n = len; + int v = n / 2, u = n - v; + + ushort[] A = toShort(buf, off, u); + ushort[] B = toShort(buf, off + u, v); + + ushort[] rv = decFF3_1(cipher, radix, T, n, v, u, A, B); + + return toByte(rv); + } + + protected static ushort[] implDecryptFF3w(IBlockCipher cipher, int radix, byte[] tweak64, ushort[] buf, int off, int len) + { + // Algorithm 10 + byte[] T = tweak64; + int n = len; + int v = n / 2, u = n - v; + + ushort[] A = new ushort[u]; + ushort[] B = new ushort[v]; + + Array.Copy(buf, off, A, 0, u); + Array.Copy(buf, off + u, B, 0, v); + + return decFF3_1(cipher, radix, T, n, v, u, A, B); + } + + private static ushort[] decFF3_1(IBlockCipher cipher, int radix, byte[] T, int n, int v, int u, ushort[] A, ushort[] B) + { + BigInteger bigRadix = BigInteger.ValueOf(radix); + BigInteger[] modVU = calculateModUV(bigRadix, v, u); + + int m = u; + + // Note we keep A, B in reverse order throughout + Array.Reverse(A); + Array.Reverse(B); + + for (int i = 7; i >= 0; --i) + { + // i. + m = n - m; + BigInteger modulus = modVU[1 - (i & 1)]; + int wOff = 4 - ((i & 1) * 4); + + // ii. - iv. + BigInteger y = calculateY_FF3(cipher, bigRadix, T, wOff, (uint)i, A); + + // v. + BigInteger c = num(bigRadix, B).Subtract(y).Mod(modulus); + + // vi. - viii. + ushort[] C = B; + B = A; + A = C; + str(bigRadix, c, m, C, 0); + } + + Array.Reverse(A); + Array.Reverse(B); + + return Arrays.Concatenate(A, B); + } + + protected static byte[] implEncryptFF3(IBlockCipher cipher, int radix, byte[] tweak64, byte[] buf, int off, int len) + { + // Algorithm 9 + byte[] T = tweak64; + int n = len; + int v = n / 2, u = n - v; + + ushort[] A = toShort(buf, off, u); + ushort[] B = toShort(buf, off + u, v); + + ushort[] rv = encFF3_1(cipher, radix, T, n, v, u, A, B); + + return toByte(rv); + } + + protected static ushort[] implEncryptFF3w(IBlockCipher cipher, int radix, byte[] tweak64, ushort[] buf, int off, int len) + { + // Algorithm 9 + byte[] T = tweak64; + int n = len; + int v = n / 2, u = n - v; + + ushort[] A = new ushort[u]; + ushort[] B = new ushort[v]; + + Array.Copy(buf, off, A, 0, u); + Array.Copy(buf, off + u, B, 0, v); + + return encFF3_1(cipher, radix, T, n, v, u, A, B); + } + + private static ushort[] encFF3_1(IBlockCipher cipher, int radix, byte[] t, int n, int v, int u, ushort[] a, ushort[] b) + { + BigInteger bigRadix = BigInteger.ValueOf(radix); + BigInteger[] modVU = calculateModUV(bigRadix, v, u); + + int m = v; + + // Note we keep A, B in reverse order throughout + Array.Reverse(a); + Array.Reverse(b); + + for (uint i = 0; i < 8; ++i) + { + // i. + m = n - m; + BigInteger modulus = modVU[1 - (i & 1)]; + int wOff = 4 - (int)((i & 1) * 4); + + // ii. - iv. + BigInteger y = calculateY_FF3(cipher, bigRadix, t, wOff, i, b); + + // v. + BigInteger c = num(bigRadix, a).Add(y).Mod(modulus); + + // vi. - viii. + ushort[] C = a; + a = b; + b = C; + str(bigRadix, c, m, C, 0); + } + + Array.Reverse(a); + Array.Reverse(b); + + return Arrays.Concatenate(a, b); + } + + protected static BigInteger num(BigInteger R, ushort[] x) + { + BigInteger result = BigInteger.Zero; + for (int i = 0; i < x.Length; ++i) + { + result = result.Multiply(R).Add(BigInteger.ValueOf(x[i] & 0xFFFF)); + } + return result; + } + + protected static byte[] prf(IBlockCipher c, byte[] x) + { + if ((x.Length % BLOCK_SIZE) != 0) + throw new ArgumentException(); + + int m = x.Length / BLOCK_SIZE; + byte[] y = new byte[BLOCK_SIZE]; + + for (int i = 0; i < m; ++i) + { + xor(x, i * BLOCK_SIZE, y, 0, BLOCK_SIZE); + c.ProcessBlock(y, 0, y, 0); + } + + return y; + } + + protected static void str(BigInteger R, BigInteger x, int m, ushort[] output, int off) + { + if (x.SignValue < 0) + throw new ArgumentException(); + + for (int i = 1; i <= m; ++i) + { + BigInteger[] qr = x.DivideAndRemainder(R); + output[off + m - i] = (ushort)qr[1].IntValue; + x = qr[0]; + } + if (x.SignValue != 0) + throw new ArgumentException(); + } + + protected static void xor(byte[] x, int xOff, byte[] y, int yOff, int len) + { + for (int i = 0; i < len; ++i) + { + y[yOff + i] ^= x[xOff + i]; + } + } + + private static byte[] toByte(ushort[] buf) + { + byte[] s = new byte[buf.Length]; + + for (int i = 0; i != s.Length; i++) + { + s[i] = (byte)buf[i]; + } + + return s; + } + + private static ushort[] toShort(byte[] buf, int off, int len) + { + ushort[] s = new ushort[len]; + + for (int i = 0; i != s.Length; i++) + { + s[i] = (ushort)(buf[off + i] & 0xFF); + } + + return s; + } + + private static int Ceil(double v) + { + int rv = (int)v; + if ((double)rv < v) + return rv + 1; + + return rv; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/SP80038G.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/SP80038G.cs.meta new file mode 100644 index 000000000..87188461e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/fpe/SP80038G.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 536ba63e2d24a3842a7ddfac57ee228d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators.meta new file mode 100644 index 000000000..4fee965a4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a0959102436299e4eba93aa086cc6f46 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/BCrypt.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/BCrypt.cs new file mode 100644 index 000000000..c8a176f3b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/BCrypt.cs @@ -0,0 +1,632 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /** + * Core of password hashing scheme Bcrypt, + * designed by Niels Provos and David Mazières, + * corresponds to the C reference implementation. + *

+ * This implementation does not correspondent to the 1999 published paper + * "A Future-Adaptable Password Scheme" of Niels Provos and David Mazières, + * see: https://www.usenix.org/legacy/events/usenix99/provos/provos_html/node1.html. + * In contrast to the paper, the order of key setup and salt setup is reversed: + * state <- ExpandKey(state, 0, key) + * state %lt;- ExpandKey(state, 0, salt) + * This corresponds to the OpenBSD reference implementation of Bcrypt. + *

+ * Note: + * There is no successful cryptanalysis (status 2015), but + * the amount of memory and the band width of Bcrypt + * may be insufficient to effectively prevent attacks + * with custom hardware like FPGAs, ASICs + *

+ * This implementation uses some parts of Bouncy Castle's BlowfishEngine. + *

+ */ + public sealed class BCrypt + { + // magic String "OrpheanBeholderScryDoubt" is used as clear text for encryption + private static readonly uint[] MAGIC_STRING = + { + 0x4F727068, 0x65616E42, 0x65686F6C, + 0x64657253, 0x63727944, 0x6F756274 + }; + + internal const int MAGIC_STRING_LENGTH = 6; + + private static readonly uint[] + KP = { + 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, + 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89, + 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C, + 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917, + 0x9216D5D9, 0x8979FB1B + }, + + KS0 = { + 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, + 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99, + 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16, + 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E, + 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE, + 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013, + 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF, + 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E, + 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60, + 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, + 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE, + 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A, + 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, + 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677, + 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193, + 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032, + 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88, + 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239, + 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, + 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0, + 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3, + 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, + 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88, + 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE, + 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6, + 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D, + 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B, + 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7, + 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA, + 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463, + 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, + 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09, + 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3, + 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB, + 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279, + 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8, + 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, + 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82, + 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB, + 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573, + 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0, + 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B, + 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790, + 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8, + 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4, + 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, + 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7, + 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C, + 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, + 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1, + 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299, + 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9, + 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477, + 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF, + 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, + 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF, + 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA, + 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, + 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41, + 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915, + 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400, + 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915, + 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664, + 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A + }, + + KS1 = { + 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, + 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266, + 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1, + 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E, + 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6, + 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1, + 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E, + 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1, + 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737, + 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, + 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF, + 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD, + 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, + 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7, + 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41, + 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331, + 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF, + 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF, + 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, + 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87, + 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C, + 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, + 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16, + 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD, + 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B, + 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509, + 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E, + 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3, + 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F, + 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A, + 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, + 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960, + 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66, + 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28, + 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802, + 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84, + 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, + 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF, + 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14, + 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E, + 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50, + 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7, + 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8, + 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281, + 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99, + 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, + 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128, + 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73, + 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, + 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0, + 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105, + 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250, + 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3, + 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285, + 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, + 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061, + 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB, + 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, + 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735, + 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC, + 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9, + 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340, + 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20, + 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 + }, + + KS2 = { + 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, + 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068, + 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF, + 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840, + 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45, + 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504, + 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A, + 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB, + 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE, + 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, + 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42, + 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B, + 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, + 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB, + 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527, + 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B, + 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33, + 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C, + 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, + 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC, + 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17, + 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, + 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B, + 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115, + 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922, + 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728, + 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0, + 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E, + 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37, + 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D, + 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, + 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B, + 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3, + 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB, + 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D, + 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C, + 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, + 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9, + 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A, + 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE, + 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D, + 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC, + 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F, + 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61, + 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2, + 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, + 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2, + 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C, + 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, + 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633, + 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10, + 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169, + 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52, + 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027, + 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, + 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62, + 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634, + 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, + 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24, + 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC, + 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4, + 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C, + 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837, + 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 + }, + + KS3 = { + 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, + 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE, + 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B, + 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4, + 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8, + 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6, + 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304, + 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22, + 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4, + 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, + 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9, + 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59, + 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, + 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51, + 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28, + 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C, + 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B, + 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28, + 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, + 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD, + 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A, + 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, + 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB, + 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F, + 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991, + 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32, + 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680, + 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166, + 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE, + 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB, + 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, + 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47, + 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370, + 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D, + 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84, + 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048, + 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, + 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD, + 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9, + 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7, + 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38, + 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F, + 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C, + 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525, + 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1, + 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, + 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964, + 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E, + 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, + 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D, + 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F, + 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299, + 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02, + 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC, + 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, + 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A, + 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6, + 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, + 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0, + 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060, + 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E, + 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9, + 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F, + 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 + }; + + //==================================== + // Useful constants + //==================================== + + private const int ROUNDS = 16; + private const int SBOX_SK = 256; + private const int SBOX_SK2 = SBOX_SK * 2; + private const int SBOX_SK3 = SBOX_SK * 3; + private const int P_SZ = ROUNDS + 2; + + private readonly uint[] S; // the s-boxes + private readonly uint[] P; // the p-array + + private BCrypt() + { + S = new uint[SBOX_SK * 4]; + P = new uint[P_SZ]; + } + + //================================== + // Private Implementation + //================================== + + private uint F(uint x) + { + return (((S[(x >> 24)] + S[SBOX_SK + ((x >> 16) & 0xff)]) + ^ S[SBOX_SK2 + ((x >> 8) & 0xff)]) + S[SBOX_SK3 + (x & 0xff)]); + } + + /* + * apply the encryption cycle to each value pair in the table. + */ + private void ProcessTable(uint xl, uint xr, uint[] table) + { + int size = table.Length; + + for (int s = 0; s < size; s += 2) + { + xl ^= P[0]; + + for (int i = 1; i < ROUNDS; i += 2) + { + xr ^= F(xl) ^ P[i]; + xl ^= F(xr) ^ P[i + 1]; + } + + xr ^= P[ROUNDS + 1]; + + table[s] = xr; + table[s + 1] = xl; + + xr = xl; // end of cycle swap + xl = table[s]; + } + } + + /* + * Initialize the S-boxes and the P-array, with a fixed string + * This string contains the hexadecimal digits of pi (3.141...) + */ + private void InitState() + { + Array.Copy(KS0, 0, S, 0, SBOX_SK); + Array.Copy(KS1, 0, S, SBOX_SK, SBOX_SK); + Array.Copy(KS2, 0, S, SBOX_SK2, SBOX_SK); + Array.Copy(KS3, 0, S, SBOX_SK3, SBOX_SK); + + Array.Copy(KP, 0, P, 0, P_SZ); + } + + /* + * XOR P with key cyclic. + * This is the first part of ExpandKey function + */ + private void CyclicXorKey(byte[] key) + { + int keyLength = key.Length; + int keyIndex = 0; + + for (int i = 0; i < P_SZ; i++) + { + // get the 32 bits of the key, in 4 * 8 bit chunks + uint data = 0x0000000; + for (int j = 0; j < 4; j++) + { + // create a 32 bit block + data = (data << 8) | key[keyIndex]; + + // wrap when we get to the end of the key + if (++keyIndex >= keyLength) + { + keyIndex = 0; + } + } + // XOR the newly created 32 bit chunk onto the P-array + P[i] ^= data; + } + } + + + /* + * encrypt magic String 64 times in ECB + */ + private byte[] EncryptMagicString() + { + uint[] text = { + MAGIC_STRING[0], MAGIC_STRING[1], + MAGIC_STRING[2], MAGIC_STRING[3], + MAGIC_STRING[4], MAGIC_STRING[5] + }; + for (int i = 0; i < 64; i++) + { + for (int j = 0; j < MAGIC_STRING_LENGTH; j += 2) + { + uint left = text[j]; + uint right = text[j + 1]; + + left ^= P[0]; + for (int k = 1; k < ROUNDS; k += 2) + { + right ^= F(left) ^ P[k]; + left ^= F(right) ^ P[k + 1]; + } + right ^= P[ROUNDS + 1]; + // swap values: + text[j] = right; + text[j + 1] = left; + } + } + byte[] result = new byte[24]; // holds 192 bit key + Pack.UInt32_To_BE(text, result, 0); + Array.Clear(text, 0, text.Length); + Array.Clear(P, 0, P.Length); + Array.Clear(S, 0, S.Length); + + return result; + } + + /* + * This is a part of Eksblowfish function + * + * @param table: sub-keys or working key + * @param salt32Bit: a 16 byte salt as two 32 bit words + * @param iv1: value from last proceeded table + * @param iv2: value from last proceeded table + */ + private void ProcessTableWithSalt(uint[] table, uint[] salt32Bit, uint iv1, uint iv2) + { + uint xl = iv1 ^ salt32Bit[0]; + uint xr = iv2 ^ salt32Bit[1]; + + uint yl; + uint yr; + int size = table.Length; + + for (int s = 0; s < size; s += 4) + { + xl ^= P[0]; + for (int i = 1; i < ROUNDS; i += 2) + { + xr ^= F(xl) ^ P[i]; + xl ^= F(xr) ^ P[i + 1]; + } + xr ^= P[ROUNDS + 1]; + + table[s] = xr; + table[s + 1] = xl; + + yl = salt32Bit[2] ^ xr; + yr = salt32Bit[3] ^ xl; + + if (s + 2 >= size) // P holds 18 values + { + break; + } + + yl ^= P[0]; + for (int i = 1; i < ROUNDS; i += 2) + { + yr ^= F(yl) ^ P[i]; + yl ^= F(yr) ^ P[i + 1]; + } + yr ^= P[ROUNDS + 1]; + + table[s + 2] = yr; + table[s + 3] = yl; + + xl = salt32Bit[0] ^ yr; + xr = salt32Bit[1] ^ yl; + } + } + + /** + * Derives a raw 192 bit Bcrypt key + * + * @param cost the cost factor, treated as an exponent of 2 + * @param salt a 16 byte salt + * @param psw the password + * @return a 192 bit key + */ + private byte[] DeriveRawKey(int cost, byte[] salt, byte[] psw) + { + if (salt.Length != 16) + throw new DataLengthException("Invalid salt size: 16 bytes expected."); + if (cost < 4 || cost > 31) + throw new ArgumentException("Illegal cost factor: 4 - 31 expected.", "cost"); + + if (psw.Length == 0) + { + psw = new byte[4]; + } + + // state <- InitState() + InitState(); + + uint[] salt32Bit = new uint[4]; // holds 16 byte salt + Pack.BE_To_UInt32(salt, 0, salt32Bit); + + uint[] salt32Bit2 = new uint[salt.Length]; // swapped values + salt32Bit2[0] = salt32Bit[2]; + salt32Bit2[1] = salt32Bit[3]; + salt32Bit2[2] = salt32Bit[0]; + salt32Bit2[3] = salt32Bit[1]; + + // ExpandKey( state, salt, key): + CyclicXorKey(psw); + ProcessTableWithSalt(P, salt32Bit, 0, 0); + Array.Clear(salt32Bit, 0, salt32Bit.Length); + ProcessTableWithSalt(S, salt32Bit2, P[P.Length - 2], P[P.Length - 1]); + Array.Clear(salt32Bit2, 0, salt32Bit2.Length); + + int rounds = 1 << cost; + for (int i = 0; i != rounds; i++) // rounds may be negative if cost is 31 + { + // state <- ExpandKey(state, 0, key); + CyclicXorKey(psw); + ProcessTable(0, 0, P); + ProcessTable(P[P_SZ - 2], P[P_SZ - 1], S); + + // state <- ExpandKey(state, 0, salt); + CyclicXorKey(salt); + ProcessTable(0, 0, P); + ProcessTable(P[P_SZ - 2], P[P_SZ - 1], S); + } + + // encrypt magicString 64 times + return EncryptMagicString(); + } + + /** + * Size of the salt parameter in bytes + */ + internal const int SALT_SIZE_BYTES = 16; + + /** + * Minimum value of cost parameter, equal to log2(bytes of salt) + */ + internal const int MIN_COST = 4; + + /** + * Maximum value of cost parameter (31 == 2,147,483,648) + */ + internal const int MAX_COST = 31; + + /** + * Maximum size of password == max (unrestricted) size of Blowfish key + */ + // Blowfish spec limits keys to 448bit/56 bytes to ensure all bits of key affect all ciphertext + // bits, but technically algorithm handles 72 byte keys and most implementations support this. + internal const int MAX_PASSWORD_BYTES = 72; + + /** + * Converts a character password to bytes incorporating the required trailing zero byte. + * + * @param password the password to be encoded. + * @return a byte representation of the password in UTF8 + trailing zero. + */ + public static byte[] PasswordToByteArray(char[] password) + { + return Arrays.Append(Strings.ToUtf8ByteArray(password), 0); + } + + /** + * Calculates the bcrypt hash of a password. + *

+ * This implements the raw bcrypt function as defined in the bcrypt specification, not + * the crypt encoded version implemented in OpenBSD. + *

+ * @param password the password bytes (up to 72 bytes) to use for this invocation. + * @param salt the 128 bit salt to use for this invocation. + * @param cost the bcrypt cost parameter. The cost of the bcrypt function grows as + * 2^cost. Legal values are 4..31 inclusive. + * @return the output of the raw bcrypt operation: a 192 bit (24 byte) hash. + */ + public static byte[] Generate(byte[] password, byte[] salt, int cost) + { + if (password == null) + throw new ArgumentNullException("password"); + if (password.Length > MAX_PASSWORD_BYTES) + throw new ArgumentException("BCrypt password must be <= 72 bytes", "password"); + if (salt == null) + throw new ArgumentNullException("salt"); + if (salt.Length != SALT_SIZE_BYTES) + throw new ArgumentException("BCrypt salt must be 128 bits", "salt"); + if (cost < MIN_COST || cost > MAX_COST) + throw new ArgumentException("BCrypt cost must be from 4..31", "cost"); + + return new BCrypt().DeriveRawKey(cost, salt, password); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/BCrypt.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/BCrypt.cs.meta new file mode 100644 index 000000000..4a26076f9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/BCrypt.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b99a1fd27e8d8940acf6dc195270f8f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/BaseKdfBytesGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/BaseKdfBytesGenerator.cs new file mode 100644 index 000000000..1a34a9a1f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/BaseKdfBytesGenerator.cs @@ -0,0 +1,194 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /** + * Basic KDF generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 + *
+ * This implementation is based on ISO 18033/P1363a. + */ + public abstract class BaseKdfBytesGenerator + : IDerivationFunction + { + private int counterStart; + private IDigest digest; + private byte[] shared; + private byte[] iv; + + /** + * Construct a KDF Parameters generator. + * + * @param counterStart value of counter. + * @param digest the digest to be used as the source of derived keys. + */ + protected BaseKdfBytesGenerator(int counterStart, IDigest digest) + { + this.counterStart = counterStart; + this.digest = digest; + } + + public void Init(IDerivationParameters parameters) + { + if (parameters is KdfParameters kdfParameters) + { + shared = kdfParameters.GetSharedSecret(); + iv = kdfParameters.GetIV(); + } + else if (parameters is Iso18033KdfParameters iso18033KdfParameters) + { + shared = iso18033KdfParameters.GetSeed(); + iv = null; + } + else + { + throw new ArgumentException("KDF parameters required for KDF Generator"); + } + } + + /** + * return the underlying digest. + */ + public IDigest Digest => digest; + + /** + * fill len bytes of the output buffer with bytes generated from + * the derivation function. + * + * @throws ArgumentException if the size of the request will cause an overflow. + * @throws DataLengthException if the out buffer is too small. + */ + public int GenerateBytes(byte[] output, int outOff, int length) + { + Check.OutputLength(output, outOff, length, "output buffer too small"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return GenerateBytes(output.AsSpan(outOff, length)); +#else + long oBytes = length; + int digestSize = digest.GetDigestSize(); + + // + // this is at odds with the standard implementation, the + // maximum value should be hBits * (2^32 - 1) where hBits + // is the digest output size in bits. We can't have an + // array with a long index at the moment... + // + if (oBytes > ((2L << 32) - 1)) + throw new ArgumentException("Output length too large"); + + int cThreshold = (int)((oBytes + digestSize - 1) / digestSize); + + byte[] dig = new byte[digestSize]; + + byte[] C = new byte[4]; + Pack.UInt32_To_BE((uint)counterStart, C, 0); + + uint counterBase = (uint)(counterStart & ~0xFF); + + for (int i = 0; i < cThreshold; i++) + { + digest.BlockUpdate(shared, 0, shared.Length); + digest.BlockUpdate(C, 0, 4); + + if (iv != null) + { + digest.BlockUpdate(iv, 0, iv.Length); + } + + digest.DoFinal(dig, 0); + + if (length > digestSize) + { + Array.Copy(dig, 0, output, outOff, digestSize); + outOff += digestSize; + length -= digestSize; + } + else + { + Array.Copy(dig, 0, output, outOff, length); + } + + if (++C[3] == 0) + { + counterBase += 0x100; + Pack.UInt32_To_BE(counterBase, C, 0); + } + } + + digest.Reset(); + + return (int)oBytes; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int GenerateBytes(Span output) + { + long oBytes = output.Length; + int digestSize = digest.GetDigestSize(); + + // + // this is at odds with the standard implementation, the + // maximum value should be hBits * (2^32 - 1) where hBits + // is the digest output size in bits. We can't have an + // array with a long index at the moment... + // + if (oBytes > ((2L << 32) - 1)) + throw new ArgumentException("Output length too large"); + + int cThreshold = (int)((oBytes + digestSize - 1) / digestSize); + + Span dig = digestSize <= 128 + ? stackalloc byte[digestSize] + : new byte[digestSize]; + + Span C = stackalloc byte[4]; + Pack.UInt32_To_BE((uint)counterStart, C); + + uint counterBase = (uint)(counterStart & ~0xFF); + + for (int i = 0; i < cThreshold; i++) + { + digest.BlockUpdate(shared); + digest.BlockUpdate(C); + + if (iv != null) + { + digest.BlockUpdate(iv); + } + + digest.DoFinal(dig); + + int remaining = output.Length; + if (remaining > digestSize) + { + dig.CopyTo(output); + output = output[digestSize..]; + } + else + { + dig[..remaining].CopyTo(output); + } + + if (++C[3] == 0) + { + counterBase += 0x100; + Pack.UInt32_To_BE(counterBase, C); + } + } + + digest.Reset(); + + return (int)oBytes; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/BaseKdfBytesGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/BaseKdfBytesGenerator.cs.meta new file mode 100644 index 000000000..db27dec0c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/BaseKdfBytesGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 529254d7f00c94c4eb4a87e22e280ee0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHBasicKeyPairGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHBasicKeyPairGenerator.cs new file mode 100644 index 000000000..9455d84c7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHBasicKeyPairGenerator.cs @@ -0,0 +1,42 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /** + * a basic Diffie-Hellman key pair generator. + * + * This generates keys consistent for use with the basic algorithm for + * Diffie-Hellman. + */ + public class DHBasicKeyPairGenerator + : IAsymmetricCipherKeyPairGenerator + { + private DHKeyGenerationParameters param; + + public virtual void Init( + KeyGenerationParameters parameters) + { + this.param = (DHKeyGenerationParameters)parameters; + } + + public virtual AsymmetricCipherKeyPair GenerateKeyPair() + { + DHKeyGeneratorHelper helper = DHKeyGeneratorHelper.Instance; + DHParameters dhp = param.Parameters; + + BigInteger x = helper.CalculatePrivate(dhp, param.Random); + BigInteger y = helper.CalculatePublic(dhp, x); + + return new AsymmetricCipherKeyPair( + new DHPublicKeyParameters(y, dhp), + new DHPrivateKeyParameters(x, dhp)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHBasicKeyPairGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHBasicKeyPairGenerator.cs.meta new file mode 100644 index 000000000..de4668986 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHBasicKeyPairGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b7a4dfca0f6e38241991e7bc666269d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHKeyGeneratorHelper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHKeyGeneratorHelper.cs new file mode 100644 index 000000000..3c4cba5be --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHKeyGeneratorHelper.cs @@ -0,0 +1,76 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + class DHKeyGeneratorHelper + { + internal static readonly DHKeyGeneratorHelper Instance = new DHKeyGeneratorHelper(); + + private DHKeyGeneratorHelper() + { + } + + internal BigInteger CalculatePrivate( + DHParameters dhParams, + SecureRandom random) + { + int limit = dhParams.L; + + if (limit != 0) + { + int minWeight = limit >> 2; + for (;;) + { + BigInteger x = new BigInteger(limit, random).SetBit(limit - 1); + if (WNafUtilities.GetNafWeight(x) >= minWeight) + { + return x; + } + } + } + + BigInteger min = BigInteger.Two; + int m = dhParams.M; + if (m != 0) + { + min = BigInteger.One.ShiftLeft(m - 1); + } + + BigInteger q = dhParams.Q; + if (q == null) + { + q = dhParams.P; + } + BigInteger max = q.Subtract(BigInteger.Two); + + { + int minWeight = max.BitLength >> 2; + for (;;) + { + BigInteger x = BigIntegers.CreateRandomInRange(min, max, random); + if (WNafUtilities.GetNafWeight(x) >= minWeight) + { + return x; + } + } + } + } + + internal BigInteger CalculatePublic( + DHParameters dhParams, + BigInteger x) + { + return dhParams.G.ModPow(x, dhParams.P); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHKeyGeneratorHelper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHKeyGeneratorHelper.cs.meta new file mode 100644 index 000000000..709d116e2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHKeyGeneratorHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98272963180479a45b4495273799bb5c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHKeyPairGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHKeyPairGenerator.cs new file mode 100644 index 000000000..a9eba6e80 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHKeyPairGenerator.cs @@ -0,0 +1,42 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /** + * a Diffie-Hellman key pair generator. + * + * This generates keys consistent for use in the MTI/A0 key agreement protocol + * as described in "Handbook of Applied Cryptography", Pages 516-519. + */ + public class DHKeyPairGenerator + : IAsymmetricCipherKeyPairGenerator + { + private DHKeyGenerationParameters param; + + public virtual void Init( + KeyGenerationParameters parameters) + { + this.param = (DHKeyGenerationParameters)parameters; + } + + public virtual AsymmetricCipherKeyPair GenerateKeyPair() + { + DHKeyGeneratorHelper helper = DHKeyGeneratorHelper.Instance; + DHParameters dhp = param.Parameters; + + BigInteger x = helper.CalculatePrivate(dhp, param.Random); + BigInteger y = helper.CalculatePublic(dhp, x); + + return new AsymmetricCipherKeyPair( + new DHPublicKeyParameters(y, dhp), + new DHPrivateKeyParameters(x, dhp)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHKeyPairGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHKeyPairGenerator.cs.meta new file mode 100644 index 000000000..82b4e2fa5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHKeyPairGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c6dd5179b7382f74dbd970c11817e3b8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHParametersGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHParametersGenerator.cs new file mode 100644 index 000000000..9013d0bfa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHParametersGenerator.cs @@ -0,0 +1,49 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + public class DHParametersGenerator + { + private int size; + private int certainty; + private SecureRandom random; + + public virtual void Init( + int size, + int certainty, + SecureRandom random) + { + this.size = size; + this.certainty = certainty; + this.random = random; + } + + /** + * which Generates the p and g values from the given parameters, + * returning the DHParameters object. + *

+ * Note: can take a while...

+ */ + public virtual DHParameters GenerateParameters() + { + // + // find a safe prime p where p = 2*q + 1, where p and q are prime. + // + BigInteger[] safePrimes = DHParametersHelper.GenerateSafePrimes(size, certainty, random); + + BigInteger p = safePrimes[0]; + BigInteger q = safePrimes[1]; + BigInteger g = DHParametersHelper.SelectGenerator(p, q, random); + + return new DHParameters(p, g, q, BigInteger.Two, null); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHParametersGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHParametersGenerator.cs.meta new file mode 100644 index 000000000..fd27cd09f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHParametersGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fae909793a7d5c40b20696050343040 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHParametersHelper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHParametersHelper.cs new file mode 100644 index 000000000..77cafb645 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHParametersHelper.cs @@ -0,0 +1,160 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + internal class DHParametersHelper + { + private static readonly BigInteger Six = BigInteger.ValueOf(6); + + private static readonly int[][] primeLists = BigInteger.primeLists; + private static readonly int[] primeProducts = BigInteger.primeProducts; + private static readonly BigInteger[] BigPrimeProducts = ConstructBigPrimeProducts(primeProducts); + + private static BigInteger[] ConstructBigPrimeProducts(int[] primeProducts) + { + BigInteger[] bpp = new BigInteger[primeProducts.Length]; + for (int i = 0; i < bpp.Length; ++i) + { + bpp[i] = BigInteger.ValueOf(primeProducts[i]); + } + return bpp; + } + + /* + * Finds a pair of prime BigInteger's {p, q: p = 2q + 1} + * + * (see: Handbook of Applied Cryptography 4.86) + */ + internal static BigInteger[] GenerateSafePrimes(int size, int certainty, SecureRandom random) + { + BigInteger p, q; + int qLength = size - 1; + int minWeight = size >> 2; + + if (size <= 32) + { + for (;;) + { + q = new BigInteger(qLength, 2, random); + + p = q.ShiftLeft(1).Add(BigInteger.One); + + if (!p.IsProbablePrime(certainty, true)) + continue; + + if (certainty > 2 && !q.IsProbablePrime(certainty, true)) + continue; + + break; + } + } + else + { + // Note: Modified from Java version for speed + for (;;) + { + q = new BigInteger(qLength, 0, random); + + retry: + for (int i = 0; i < primeLists.Length; ++i) + { + int test = q.Remainder(BigPrimeProducts[i]).IntValue; + + if (i == 0) + { + int rem3 = test % 3; + if (rem3 != 2) + { + int diff = 2 * rem3 + 2; + q = q.Add(BigInteger.ValueOf(diff)); + test = (test + diff) % primeProducts[i]; + } + } + + int[] primeList = primeLists[i]; + for (int j = 0; j < primeList.Length; ++j) + { + int prime = primeList[j]; + int qRem = test % prime; + if (qRem == 0 || qRem == (prime >> 1)) + { + q = q.Add(Six); + goto retry; + } + } + } + + if (q.BitLength != qLength) + continue; + + if (!q.RabinMillerTest(2, random, true)) + continue; + + p = q.ShiftLeft(1).Add(BigInteger.One); + + if (!p.RabinMillerTest(certainty, random, true)) + continue; + + if (certainty > 2 && !q.RabinMillerTest(certainty - 2, random, true)) + continue; + + /* + * Require a minimum weight of the NAF representation, since low-weight primes may be + * weak against a version of the number-field-sieve for the discrete-logarithm-problem. + * + * See "The number field sieve for integers of low weight", Oliver Schirokauer. + */ + if (WNafUtilities.GetNafWeight(p) < minWeight) + continue; + + break; + } + } + + return new BigInteger[] { p, q }; + } + + /* + * Select a high order element of the multiplicative group Zp* + * + * p and q must be s.t. p = 2*q + 1, where p and q are prime (see generateSafePrimes) + */ + internal static BigInteger SelectGenerator(BigInteger p, BigInteger q, SecureRandom random) + { + BigInteger pMinusTwo = p.Subtract(BigInteger.Two); + BigInteger g; + + /* + * (see: Handbook of Applied Cryptography 4.80) + */ +// do +// { +// g = BigIntegers.CreateRandomInRange(BigInteger.Two, pMinusTwo, random); +// } +// while (g.ModPow(BigInteger.Two, p).Equals(BigInteger.One) +// || g.ModPow(q, p).Equals(BigInteger.One)); + + /* + * RFC 2631 2.2.1.2 (and see: Handbook of Applied Cryptography 4.81) + */ + do + { + BigInteger h = BigIntegers.CreateRandomInRange(BigInteger.Two, pMinusTwo, random); + + g = h.ModPow(BigInteger.Two, p); + } + while (g.Equals(BigInteger.One)); + + return g; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHParametersHelper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHParametersHelper.cs.meta new file mode 100644 index 000000000..4ac84dcdb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DHParametersHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d4fdec6c91ff77e41add37910a845fa0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DesEdeKeyGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DesEdeKeyGenerator.cs new file mode 100644 index 000000000..b8f411f24 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DesEdeKeyGenerator.cs @@ -0,0 +1,70 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + public class DesEdeKeyGenerator + : DesKeyGenerator + { + public DesEdeKeyGenerator() + { + } + + internal DesEdeKeyGenerator( + int defaultStrength) + : base(defaultStrength) + { + } + + /** + * initialise the key generator - if strength is set to zero + * the key Generated will be 192 bits in size, otherwise + * strength can be 128 or 192 (or 112 or 168 if you don't count + * parity bits), depending on whether you wish to do 2-key or 3-key + * triple DES. + * + * @param param the parameters to be used for key generation + */ + protected override void EngineInit(KeyGenerationParameters parameters) + { + this.random = parameters.Random; + this.strength = (parameters.Strength + 7) / 8; + + if (strength == 0 || strength == (168 / 8)) + { + strength = DesEdeParameters.DesEdeKeyLength; + } + else if (strength == (112 / 8)) + { + strength = 2 * DesEdeParameters.DesKeyLength; + } + else if (strength != DesEdeParameters.DesEdeKeyLength + && strength != (2 * DesEdeParameters.DesKeyLength)) + { + throw new ArgumentException("DESede key must be " + + (DesEdeParameters.DesEdeKeyLength * 8) + " or " + + (2 * 8 * DesEdeParameters.DesKeyLength) + + " bits long."); + } + } + + protected override byte[] EngineGenerateKey() + { + byte[] newKey = new byte[strength]; + + do + { + random.NextBytes(newKey); + DesEdeParameters.SetOddParity(newKey); + } + while (DesEdeParameters.IsWeakKey(newKey, 0, newKey.Length) || !DesEdeParameters.IsRealEdeKey(newKey, 0)); + + return newKey; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DesEdeKeyGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DesEdeKeyGenerator.cs.meta new file mode 100644 index 000000000..4488aa9e0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DesEdeKeyGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2aaa0fb6f892b1f46a0b89ffe9d98654 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DesKeyGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DesKeyGenerator.cs new file mode 100644 index 000000000..a37fef631 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DesKeyGenerator.cs @@ -0,0 +1,60 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + public class DesKeyGenerator + : CipherKeyGenerator + { + public DesKeyGenerator() + { + } + + internal DesKeyGenerator( + int defaultStrength) + : base(defaultStrength) + { + } + + /** + * initialise the key generator - if strength is set to zero + * the key generated will be 64 bits in size, otherwise + * strength can be 64 or 56 bits (if you don't count the parity bits). + * + * @param param the parameters to be used for key generation + */ + protected override void EngineInit(KeyGenerationParameters parameters) + { + base.EngineInit(parameters); + + if (strength == 0 || strength == (56 / 8)) + { + strength = DesParameters.DesKeyLength; + } + else if (strength != DesParameters.DesKeyLength) + { + throw new ArgumentException( + "DES key must be " + (DesParameters.DesKeyLength * 8) + " bits long."); + } + } + + protected override byte[] EngineGenerateKey() + { + byte[] newKey = new byte[DesParameters.DesKeyLength]; + + do + { + random.NextBytes(newKey); + DesParameters.SetOddParity(newKey); + } + while (DesParameters.IsWeakKey(newKey, 0)); + + return newKey; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DesKeyGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DesKeyGenerator.cs.meta new file mode 100644 index 000000000..6f8f53252 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DesKeyGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2f5d7742609933942bd3204450aabe4e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DsaKeyPairGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DsaKeyPairGenerator.cs new file mode 100644 index 000000000..58dec1b5a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DsaKeyPairGenerator.cs @@ -0,0 +1,76 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /** + * a DSA key pair generator. + * + * This Generates DSA keys in line with the method described + * in FIPS 186-3 B.1 FFC Key Pair Generation. + */ + public class DsaKeyPairGenerator + : IAsymmetricCipherKeyPairGenerator + { + private static readonly BigInteger One = BigInteger.One; + + private DsaKeyGenerationParameters param; + + public void Init( + KeyGenerationParameters parameters) + { + if (parameters == null) + throw new ArgumentNullException("parameters"); + + // Note: If we start accepting instances of KeyGenerationParameters, + // must apply constraint checking on strength (see DsaParametersGenerator.Init) + + this.param = (DsaKeyGenerationParameters) parameters; + } + + public AsymmetricCipherKeyPair GenerateKeyPair() + { + DsaParameters dsaParams = param.Parameters; + + BigInteger x = GeneratePrivateKey(dsaParams.Q, param.Random); + BigInteger y = CalculatePublicKey(dsaParams.P, dsaParams.G, x); + + return new AsymmetricCipherKeyPair( + new DsaPublicKeyParameters(y, dsaParams), + new DsaPrivateKeyParameters(x, dsaParams)); + } + + private static BigInteger GeneratePrivateKey(BigInteger q, SecureRandom random) + { + // B.1.2 Key Pair Generation by Testing Candidates + int minWeight = q.BitLength >> 2; + for (;;) + { + // TODO Prefer this method? (change test cases that used fixed random) + // B.1.1 Key Pair Generation Using Extra Random Bits + //BigInteger x = new BigInteger(q.BitLength + 64, random).Mod(q.Subtract(One)).Add(One); + + BigInteger x = BigIntegers.CreateRandomInRange(One, q.Subtract(One), random); + if (WNafUtilities.GetNafWeight(x) >= minWeight) + { + return x; + } + } + } + + private static BigInteger CalculatePublicKey(BigInteger p, BigInteger g, BigInteger x) + { + return g.ModPow(x, p); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DsaKeyPairGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DsaKeyPairGenerator.cs.meta new file mode 100644 index 000000000..0c06ea315 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DsaKeyPairGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 81ed675e8e1609d468d4e8957e891e0e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DsaParametersGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DsaParametersGenerator.cs new file mode 100644 index 000000000..24907ff56 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DsaParametersGenerator.cs @@ -0,0 +1,359 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /** + * Generate suitable parameters for DSA, in line with FIPS 186-2, or FIPS 186-3. + */ + public class DsaParametersGenerator + { + private IDigest digest; + private int L, N; + private int certainty; + private SecureRandom random; + private bool use186_3; + private int usageIndex; + + public DsaParametersGenerator() + : this(new Sha1Digest()) + { + } + + public DsaParametersGenerator(IDigest digest) + { + this.digest = digest; + } + + /// Initialise the generator + /// This form can only be used for older DSA (pre-DSA2) parameters + /// the size of keys in bits (from 512 up to 1024, and a multiple of 64) + /// measure of robustness of primes (at least 80 for FIPS 186-2 compliance) + /// the source of randomness to use + public virtual void Init( + int size, + int certainty, + SecureRandom random) + { + if (!IsValidDsaStrength(size)) + throw new ArgumentException("size must be from 512 - 1024 and a multiple of 64", "size"); + + this.use186_3 = false; + this.L = size; + this.N = GetDefaultN(size); + this.certainty = certainty; + this.random = random; + } + + /// Initialise the generator for DSA 2 + /// You must use this Init method if you need to generate parameters for DSA 2 keys + /// An instance of DsaParameterGenerationParameters used to configure this generator + public virtual void Init(DsaParameterGenerationParameters parameters) + { + // TODO Should we enforce the minimum 'certainty' values as per C.3 Table C.1? + this.use186_3 = true; + this.L = parameters.L; + this.N = parameters.N; + this.certainty = parameters.Certainty; + this.random = parameters.Random; + this.usageIndex = parameters.UsageIndex; + + if ((L < 1024 || L > 3072) || L % 1024 != 0) + throw new ArgumentException("Values must be between 1024 and 3072 and a multiple of 1024", "L"); + if (L == 1024 && N != 160) + throw new ArgumentException("N must be 160 for L = 1024"); + if (L == 2048 && (N != 224 && N != 256)) + throw new ArgumentException("N must be 224 or 256 for L = 2048"); + if (L == 3072 && N != 256) + throw new ArgumentException("N must be 256 for L = 3072"); + + if (digest.GetDigestSize() * 8 < N) + throw new InvalidOperationException("Digest output size too small for value of N"); + } + + /// Generates a set of DsaParameters + /// Can take a while... + public virtual DsaParameters GenerateParameters() + { + return use186_3 + ? GenerateParameters_FIPS186_3() + : GenerateParameters_FIPS186_2(); + } + + protected virtual DsaParameters GenerateParameters_FIPS186_2() + { + byte[] seed = new byte[20]; + byte[] part1 = new byte[20]; + byte[] part2 = new byte[20]; + byte[] u = new byte[20]; + int n = (L - 1) / 160; + byte[] w = new byte[L / 8]; + + if (!(digest is Sha1Digest)) + throw new InvalidOperationException("can only use SHA-1 for generating FIPS 186-2 parameters"); + + for (;;) + { + random.NextBytes(seed); + + Hash(digest, seed, part1); + Array.Copy(seed, 0, part2, 0, seed.Length); + Inc(part2); + Hash(digest, part2, part2); + + for (int i = 0; i != u.Length; i++) + { + u[i] = (byte)(part1[i] ^ part2[i]); + } + + u[0] |= (byte)0x80; + u[19] |= (byte)0x01; + + BigInteger q = new BigInteger(1, u); + + if (!q.IsProbablePrime(certainty)) + continue; + + byte[] offset = Arrays.Clone(seed); + Inc(offset); + + for (int counter = 0; counter < 4096; ++counter) + { + for (int k = 0; k < n; k++) + { + Inc(offset); + Hash(digest, offset, part1); + Array.Copy(part1, 0, w, w.Length - (k + 1) * part1.Length, part1.Length); + } + + Inc(offset); + Hash(digest, offset, part1); + Array.Copy(part1, part1.Length - ((w.Length - (n) * part1.Length)), w, 0, w.Length - n * part1.Length); + + w[0] |= (byte)0x80; + + BigInteger x = new BigInteger(1, w); + + BigInteger c = x.Mod(q.ShiftLeft(1)); + + BigInteger p = x.Subtract(c.Subtract(BigInteger.One)); + + if (p.BitLength != L) + continue; + + if (p.IsProbablePrime(certainty)) + { + BigInteger g = CalculateGenerator_FIPS186_2(p, q, random); + + return new DsaParameters(p, q, g, new DsaValidationParameters(seed, counter)); + } + } + } + } + + protected virtual BigInteger CalculateGenerator_FIPS186_2(BigInteger p, BigInteger q, SecureRandom r) + { + BigInteger e = p.Subtract(BigInteger.One).Divide(q); + BigInteger pSub2 = p.Subtract(BigInteger.Two); + + for (;;) + { + BigInteger h = BigIntegers.CreateRandomInRange(BigInteger.Two, pSub2, r); + BigInteger g = h.ModPow(e, p); + + if (g.BitLength > 1) + return g; + } + } + + /** + * generate suitable parameters for DSA, in line with + * FIPS 186-3 A.1 Generation of the FFC Primes p and q. + */ + protected virtual DsaParameters GenerateParameters_FIPS186_3() + { +// A.1.1.2 Generation of the Probable Primes p and q Using an Approved Hash Function + IDigest d = digest; + int outlen = d.GetDigestSize() * 8; + +// 1. Check that the (L, N) pair is in the list of acceptable (L, N pairs) (see Section 4.2). If +// the pair is not in the list, then return INVALID. + // Note: checked at initialisation + +// 2. If (seedlen < N), then return INVALID. + // FIXME This should be configurable (must be >= N) + int seedlen = N; + byte[] seed = new byte[seedlen / 8]; + +// 3. n = ceiling(L ⁄ outlen) – 1. + int n = (L - 1) / outlen; + +// 4. b = L – 1 – (n ∗ outlen). + int b = (L - 1) % outlen; + + byte[] output = new byte[d.GetDigestSize()]; + for (;;) + { +// 5. Get an arbitrary sequence of seedlen bits as the domain_parameter_seed. + random.NextBytes(seed); + +// 6. U = Hash (domain_parameter_seed) mod 2^(N–1). + Hash(d, seed, output); + BigInteger U = new BigInteger(1, output).Mod(BigInteger.One.ShiftLeft(N - 1)); + +// 7. q = 2^(N–1) + U + 1 – ( U mod 2). + BigInteger q = U.SetBit(0).SetBit(N - 1); + +// 8. Test whether or not q is prime as specified in Appendix C.3. + // TODO Review C.3 for primality checking + if (!q.IsProbablePrime(certainty)) + { +// 9. If q is not a prime, then go to step 5. + continue; + } + +// 10. offset = 1. + // Note: 'offset' value managed incrementally + byte[] offset = Arrays.Clone(seed); + +// 11. For counter = 0 to (4L – 1) do + int counterLimit = 4 * L; + for (int counter = 0; counter < counterLimit; ++counter) + { +// 11.1 For j = 0 to n do +// Vj = Hash ((domain_parameter_seed + offset + j) mod 2^seedlen). +// 11.2 W = V0 + (V1 ∗ 2^outlen) + ... + (V^(n–1) ∗ 2^((n–1) ∗ outlen)) + ((Vn mod 2^b) ∗ 2^(n ∗ outlen)). + // TODO Assemble w as a byte array + BigInteger W = BigInteger.Zero; + for (int j = 0, exp = 0; j <= n; ++j, exp += outlen) + { + Inc(offset); + Hash(d, offset, output); + + BigInteger Vj = new BigInteger(1, output); + if (j == n) + { + Vj = Vj.Mod(BigInteger.One.ShiftLeft(b)); + } + + W = W.Add(Vj.ShiftLeft(exp)); + } + +// 11.3 X = W + 2^(L–1). Comment: 0 ≤ W < 2L–1; hence, 2L–1 ≤ X < 2L. + BigInteger X = W.Add(BigInteger.One.ShiftLeft(L - 1)); + +// 11.4 c = X mod 2q. + BigInteger c = X.Mod(q.ShiftLeft(1)); + +// 11.5 p = X - (c - 1). Comment: p ≡ 1 (mod 2q). + BigInteger p = X.Subtract(c.Subtract(BigInteger.One)); + + // 11.6 If (p < 2^(L - 1)), then go to step 11.9 + if (p.BitLength != L) + continue; + +// 11.7 Test whether or not p is prime as specified in Appendix C.3. + // TODO Review C.3 for primality checking + if (p.IsProbablePrime(certainty)) + { +// 11.8 If p is determined to be prime, then return VALID and the values of p, q and +// (optionally) the values of domain_parameter_seed and counter. + // TODO Make configurable (8-bit unsigned)? + + if (usageIndex >= 0) + { + BigInteger g = CalculateGenerator_FIPS186_3_Verifiable(d, p, q, seed, usageIndex); + if (g != null) + return new DsaParameters(p, q, g, new DsaValidationParameters(seed, counter, usageIndex)); + } + + { + BigInteger g = CalculateGenerator_FIPS186_3_Unverifiable(p, q, random); + + return new DsaParameters(p, q, g, new DsaValidationParameters(seed, counter)); + } + } + +// 11.9 offset = offset + n + 1. Comment: Increment offset; then, as part of +// the loop in step 11, increment counter; if +// counter < 4L, repeat steps 11.1 through 11.8. + // Note: 'offset' value already incremented in inner loop + } +// 12. Go to step 5. + } + } + + protected virtual BigInteger CalculateGenerator_FIPS186_3_Unverifiable(BigInteger p, BigInteger q, + SecureRandom r) + { + return CalculateGenerator_FIPS186_2(p, q, r); + } + + protected virtual BigInteger CalculateGenerator_FIPS186_3_Verifiable(IDigest d, BigInteger p, BigInteger q, + byte[] seed, int index) + { + // A.2.3 Verifiable Canonical Generation of the Generator g + BigInteger e = p.Subtract(BigInteger.One).Divide(q); + byte[] ggen = Hex.DecodeStrict("6767656E"); + + // 7. U = domain_parameter_seed || "ggen" || index || count. + byte[] U = new byte[seed.Length + ggen.Length + 1 + 2]; + Array.Copy(seed, 0, U, 0, seed.Length); + Array.Copy(ggen, 0, U, seed.Length, ggen.Length); + U[U.Length - 3] = (byte)index; + + byte[] w = new byte[d.GetDigestSize()]; + for (int count = 1; count < (1 << 16); ++count) + { + Inc(U); + Hash(d, U, w); + BigInteger W = new BigInteger(1, w); + BigInteger g = W.ModPow(e, p); + + if (g.CompareTo(BigInteger.Two) >= 0) + return g; + } + + return null; + } + + private static bool IsValidDsaStrength( + int strength) + { + return strength >= 512 && strength <= 1024 && strength % 64 == 0; + } + + protected static void Hash(IDigest d, byte[] input, byte[] output) + { + d.BlockUpdate(input, 0, input.Length); + d.DoFinal(output, 0); + } + + private static int GetDefaultN(int L) + { + return L > 1024 ? 256 : 160; + } + + protected static void Inc(byte[] buf) + { + for (int i = buf.Length - 1; i >= 0; --i) + { + byte b = (byte)(buf[i] + 1); + buf[i] = b; + + if (b != 0) + break; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DsaParametersGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DsaParametersGenerator.cs.meta new file mode 100644 index 000000000..fb0a7bf71 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/DsaParametersGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d1e4f356c022fc448e391006e5ad3ff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/ECKeyPairGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/ECKeyPairGenerator.cs new file mode 100644 index 000000000..9aa47194d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/ECKeyPairGenerator.cs @@ -0,0 +1,190 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Sec; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + public class ECKeyPairGenerator + : IAsymmetricCipherKeyPairGenerator + { + private readonly string algorithm; + + private ECDomainParameters parameters; + private DerObjectIdentifier publicKeyParamSet; + private SecureRandom random; + + public ECKeyPairGenerator() + : this("EC") + { + } + + public ECKeyPairGenerator( + string algorithm) + { + if (algorithm == null) + throw new ArgumentNullException("algorithm"); + + this.algorithm = ECKeyParameters.VerifyAlgorithmName(algorithm); + } + + public void Init( + KeyGenerationParameters parameters) + { + if (parameters is ECKeyGenerationParameters) + { + ECKeyGenerationParameters ecP = (ECKeyGenerationParameters) parameters; + + this.publicKeyParamSet = ecP.PublicKeyParamSet; + this.parameters = ecP.DomainParameters; + } + else + { + DerObjectIdentifier oid; + switch (parameters.Strength) + { + case 192: + oid = X9ObjectIdentifiers.Prime192v1; + break; + case 224: + oid = SecObjectIdentifiers.SecP224r1; + break; + case 239: + oid = X9ObjectIdentifiers.Prime239v1; + break; + case 256: + oid = X9ObjectIdentifiers.Prime256v1; + break; + case 384: + oid = SecObjectIdentifiers.SecP384r1; + break; + case 521: + oid = SecObjectIdentifiers.SecP521r1; + break; + default: + throw new InvalidParameterException("unknown key size."); + } + + X9ECParameters ecps = FindECCurveByOid(oid); + + this.publicKeyParamSet = oid; + this.parameters = new ECDomainParameters( + ecps.Curve, ecps.G, ecps.N, ecps.H, ecps.GetSeed()); + } + + this.random = parameters.Random; + + if (this.random == null) + { + this.random = CryptoServicesRegistrar.GetSecureRandom(); + } + } + + /** + * Given the domain parameters this routine generates an EC key + * pair in accordance with X9.62 section 5.2.1 pages 26, 27. + */ + public AsymmetricCipherKeyPair GenerateKeyPair() + { + BigInteger n = parameters.N; + BigInteger d; + int minWeight = n.BitLength >> 2; + + for (;;) + { + d = new BigInteger(n.BitLength, random); + + if (d.CompareTo(BigInteger.One) < 0 || d.CompareTo(n) >= 0) + continue; + + if (WNafUtilities.GetNafWeight(d) < minWeight) + continue; + + break; + } + + ECPoint q = CreateBasePointMultiplier().Multiply(parameters.G, d); + + if (publicKeyParamSet != null) + { + return new AsymmetricCipherKeyPair( + new ECPublicKeyParameters(algorithm, q, publicKeyParamSet), + new ECPrivateKeyParameters(algorithm, d, publicKeyParamSet)); + } + + return new AsymmetricCipherKeyPair( + new ECPublicKeyParameters(algorithm, q, parameters), + new ECPrivateKeyParameters(algorithm, d, parameters)); + } + + protected virtual ECMultiplier CreateBasePointMultiplier() + { + return new FixedPointCombMultiplier(); + } + + internal static X9ECParameters FindECCurveByName(string name) + { + X9ECParameters ecP = CustomNamedCurves.GetByName(name); + if (ecP == null) + { + ecP = ECNamedCurveTable.GetByName(name); + } + return ecP; + } + + internal static X9ECParametersHolder FindECCurveByNameLazy(string name) + { + X9ECParametersHolder holder = CustomNamedCurves.GetByNameLazy(name); + if (holder == null) + { + holder = ECNamedCurveTable.GetByNameLazy(name); + } + return holder; + } + + internal static X9ECParameters FindECCurveByOid(DerObjectIdentifier oid) + { + X9ECParameters ecP = CustomNamedCurves.GetByOid(oid); + if (ecP == null) + { + ecP = ECNamedCurveTable.GetByOid(oid); + } + return ecP; + } + + internal static X9ECParametersHolder FindECCurveByOidLazy(DerObjectIdentifier oid) + { + X9ECParametersHolder holder = CustomNamedCurves.GetByOidLazy(oid); + if (holder == null) + { + holder = ECNamedCurveTable.GetByOidLazy(oid); + } + return holder; + } + + internal static ECPublicKeyParameters GetCorrespondingPublicKey( + ECPrivateKeyParameters privKey) + { + ECDomainParameters ec = privKey.Parameters; + ECPoint q = new FixedPointCombMultiplier().Multiply(ec.G, privKey.D); + + if (privKey.PublicKeyParamSet != null) + { + return new ECPublicKeyParameters(privKey.AlgorithmName, q, privKey.PublicKeyParamSet); + } + + return new ECPublicKeyParameters(privKey.AlgorithmName, q, ec); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/ECKeyPairGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/ECKeyPairGenerator.cs.meta new file mode 100644 index 000000000..f483b84f5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/ECKeyPairGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd6193d5b658f3549963a15501652b67 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Ed25519KeyPairGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Ed25519KeyPairGenerator.cs new file mode 100644 index 000000000..12907cf0b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Ed25519KeyPairGenerator.cs @@ -0,0 +1,29 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + public class Ed25519KeyPairGenerator + : IAsymmetricCipherKeyPairGenerator + { + private SecureRandom random; + + public virtual void Init(KeyGenerationParameters parameters) + { + this.random = parameters.Random; + } + + public virtual AsymmetricCipherKeyPair GenerateKeyPair() + { + Ed25519PrivateKeyParameters privateKey = new Ed25519PrivateKeyParameters(random); + Ed25519PublicKeyParameters publicKey = privateKey.GeneratePublicKey(); + return new AsymmetricCipherKeyPair(publicKey, privateKey); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Ed25519KeyPairGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Ed25519KeyPairGenerator.cs.meta new file mode 100644 index 000000000..b5889e72b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Ed25519KeyPairGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e2a3de68bed278f408115696520ae15f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Ed448KeyPairGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Ed448KeyPairGenerator.cs new file mode 100644 index 000000000..d86183d70 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Ed448KeyPairGenerator.cs @@ -0,0 +1,29 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + public class Ed448KeyPairGenerator + : IAsymmetricCipherKeyPairGenerator + { + private SecureRandom random; + + public virtual void Init(KeyGenerationParameters parameters) + { + this.random = parameters.Random; + } + + public virtual AsymmetricCipherKeyPair GenerateKeyPair() + { + Ed448PrivateKeyParameters privateKey = new Ed448PrivateKeyParameters(random); + Ed448PublicKeyParameters publicKey = privateKey.GeneratePublicKey(); + return new AsymmetricCipherKeyPair(publicKey, privateKey); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Ed448KeyPairGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Ed448KeyPairGenerator.cs.meta new file mode 100644 index 000000000..26fcf3f78 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Ed448KeyPairGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 56076fa04e5259c439c2b244cf9b73c8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/ElGamalKeyPairGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/ElGamalKeyPairGenerator.cs new file mode 100644 index 000000000..b9fef7d91 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/ElGamalKeyPairGenerator.cs @@ -0,0 +1,44 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /** + * a ElGamal key pair generator. + *

+ * This Generates keys consistent for use with ElGamal as described in + * page 164 of "Handbook of Applied Cryptography".

+ */ + public class ElGamalKeyPairGenerator + : IAsymmetricCipherKeyPairGenerator + { + private ElGamalKeyGenerationParameters param; + + public void Init( + KeyGenerationParameters parameters) + { + this.param = (ElGamalKeyGenerationParameters) parameters; + } + + public AsymmetricCipherKeyPair GenerateKeyPair() + { + DHKeyGeneratorHelper helper = DHKeyGeneratorHelper.Instance; + ElGamalParameters egp = param.Parameters; + DHParameters dhp = new DHParameters(egp.P, egp.G, null, 0, egp.L); + + BigInteger x = helper.CalculatePrivate(dhp, param.Random); + BigInteger y = helper.CalculatePublic(dhp, x); + + return new AsymmetricCipherKeyPair( + new ElGamalPublicKeyParameters(y, egp), + new ElGamalPrivateKeyParameters(x, egp)); + } + } + +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/ElGamalKeyPairGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/ElGamalKeyPairGenerator.cs.meta new file mode 100644 index 000000000..972fe84d7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/ElGamalKeyPairGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d3c646aa86666e4ca77bdb7f900d2df +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/ElGamalParametersGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/ElGamalParametersGenerator.cs new file mode 100644 index 000000000..234d6f649 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/ElGamalParametersGenerator.cs @@ -0,0 +1,50 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + public class ElGamalParametersGenerator + { + private int size; + private int certainty; + private SecureRandom random; + + public void Init( + int size, + int certainty, + SecureRandom random) + { + this.size = size; + this.certainty = certainty; + this.random = random; + } + + /** + * which Generates the p and g values from the given parameters, + * returning the ElGamalParameters object. + *

+ * Note: can take a while... + *

+ */ + public ElGamalParameters GenerateParameters() + { + // + // find a safe prime p where p = 2*q + 1, where p and q are prime. + // + BigInteger[] safePrimes = DHParametersHelper.GenerateSafePrimes(size, certainty, random); + + BigInteger p = safePrimes[0]; + BigInteger q = safePrimes[1]; + BigInteger g = DHParametersHelper.SelectGenerator(p, q, random); + + return new ElGamalParameters(p, g); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/ElGamalParametersGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/ElGamalParametersGenerator.cs.meta new file mode 100644 index 000000000..ec9f323ad --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/ElGamalParametersGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0463e1119f1f8b94182ba9a9cdf26312 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/GOST3410KeyPairGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/GOST3410KeyPairGenerator.cs new file mode 100644 index 000000000..eff645bed --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/GOST3410KeyPairGenerator.cs @@ -0,0 +1,86 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /** + * a GOST3410 key pair generator. + * This generates GOST3410 keys in line with the method described + * in GOST R 34.10-94. + */ + public class Gost3410KeyPairGenerator + : IAsymmetricCipherKeyPairGenerator + { + private Gost3410KeyGenerationParameters param; + + public void Init( + KeyGenerationParameters parameters) + { + if (parameters is Gost3410KeyGenerationParameters) + { + this.param = (Gost3410KeyGenerationParameters) parameters; + } + else + { + Gost3410KeyGenerationParameters kgp = new Gost3410KeyGenerationParameters( + parameters.Random, + CryptoProObjectIdentifiers.GostR3410x94CryptoProA); + + if (parameters.Strength != kgp.Parameters.P.BitLength - 1) + { + // TODO Should we complain? + } + + this.param = kgp; + } + } + + public AsymmetricCipherKeyPair GenerateKeyPair() + { + SecureRandom random = param.Random; + Gost3410Parameters gost3410Params = param.Parameters; + + BigInteger q = gost3410Params.Q, x; + + int minWeight = 64; + for (;;) + { + x = new BigInteger(256, random); + + if (x.SignValue < 1 || x.CompareTo(q) >= 0) + continue; + + if (WNafUtilities.GetNafWeight(x) < minWeight) + continue; + + break; + } + + BigInteger p = gost3410Params.P; + BigInteger a = gost3410Params.A; + + // calculate the public key. + BigInteger y = a.ModPow(x, p); + + if (param.PublicKeyParamSet != null) + { + return new AsymmetricCipherKeyPair( + new Gost3410PublicKeyParameters(y, param.PublicKeyParamSet), + new Gost3410PrivateKeyParameters(x, param.PublicKeyParamSet)); + } + + return new AsymmetricCipherKeyPair( + new Gost3410PublicKeyParameters(y, gost3410Params), + new Gost3410PrivateKeyParameters(x, gost3410Params)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/GOST3410KeyPairGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/GOST3410KeyPairGenerator.cs.meta new file mode 100644 index 000000000..98223ab37 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/GOST3410KeyPairGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9f3d826c975554e4a92fe8058998f65a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/GOST3410ParametersGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/GOST3410ParametersGenerator.cs new file mode 100644 index 000000000..cdb80f08a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/GOST3410ParametersGenerator.cs @@ -0,0 +1,534 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /** + * generate suitable parameters for GOST3410. + */ + public class Gost3410ParametersGenerator + { + private int size; + private int typeproc; + private SecureRandom init_random; + + /** + * initialise the key generator. + * + * @param size size of the key + * @param typeProcedure type procedure A,B = 1; A',B' - else + * @param random random byte source. + */ + public void Init( + int size, + int typeProcedure, + SecureRandom random) + { + this.size = size; + this.typeproc = typeProcedure; + this.init_random = random; + } + + //Procedure A + private int procedure_A(int x0, int c, BigInteger[] pq, int size) + { + //Verify and perform condition: 065536) + { + x0 = init_random.NextInt()/32768; + } + + while((c<0 || c>65536) || (c/2==0)) + { + c = init_random.NextInt()/32768 + 1; + } + + BigInteger C = BigInteger.ValueOf(c); + BigInteger constA16 = BigInteger.ValueOf(19381); + + //step1 + BigInteger[] y = new BigInteger[1]; // begin length = 1 + y[0] = BigInteger.ValueOf(x0); + + //step 2 + int[] t = new int[1]; // t - orders; begin length = 1 + t[0] = size; + int s = 0; + for (int i=0; t[i]>=17; i++) + { + // extension array t + int[] tmp_t = new int[t.Length + 1]; /////////////// + Array.Copy(t,0,tmp_t,0,t.Length); // extension + t = new int[tmp_t.Length]; // array t + Array.Copy(tmp_t, 0, t, 0, tmp_t.Length); /////////////// + + t[i+1] = t[i]/2; + s = i+1; + } + + //step3 + BigInteger[] p = new BigInteger[s+1]; + p[s] = new BigInteger("8003",16); //set min prime number length 16 bit + + int m = s-1; //step4 + + for (int i=0; i t[m]) + { + goto step6; //step 12 + } + + p[m] = NByLastP.Add(BigInteger.One); + + //step13 + if (BigInteger.Two.ModPow(NByLastP, p[m]).CompareTo(BigInteger.One) == 0 + && BigInteger.Two.ModPow(N, p[m]).CompareTo(BigInteger.One) != 0) + { + break; + } + + N = N.Add(BigInteger.Two); + } + + if (--m < 0) + { + pq[0] = p[0]; + pq[1] = p[1]; + return y[0].IntValue; //return for procedure B step 2 + } + + break; //step 14 + } + } + return y[0].IntValue; + } + + //Procedure A' + private long procedure_Aa(long x0, long c, BigInteger[] pq, int size) + { + //Verify and perform condition: 04294967296L) + { + x0 = init_random.NextInt()*2; + } + + while((c<0 || c>4294967296L) || (c/2==0)) + { + c = init_random.NextInt()*2+1; + } + + BigInteger C = BigInteger.ValueOf(c); + BigInteger constA32 = BigInteger.ValueOf(97781173); + + //step1 + BigInteger[] y = new BigInteger[1]; // begin length = 1 + y[0] = BigInteger.ValueOf(x0); + + //step 2 + int[] t = new int[1]; // t - orders; begin length = 1 + t[0] = size; + int s = 0; + for (int i=0; t[i]>=33; i++) + { + // extension array t + int[] tmp_t = new int[t.Length + 1]; /////////////// + Array.Copy(t,0,tmp_t,0,t.Length); // extension + t = new int[tmp_t.Length]; // array t + Array.Copy(tmp_t, 0, t, 0, tmp_t.Length); /////////////// + + t[i+1] = t[i]/2; + s = i+1; + } + + //step3 + BigInteger[] p = new BigInteger[s+1]; + p[s] = new BigInteger("8000000B",16); //set min prime number length 32 bit + + int m = s-1; //step4 + + for (int i=0; i t[m]) + { + goto step6; //step 12 + } + + p[m] = NByLastP.Add(BigInteger.One); + + //step13 + if (BigInteger.Two.ModPow(NByLastP, p[m]).CompareTo(BigInteger.One) == 0 + && BigInteger.Two.ModPow(N, p[m]).CompareTo(BigInteger.One) != 0) + { + break; + } + + N = N.Add(BigInteger.Two); + } + + if (--m < 0) + { + pq[0] = p[0]; + pq[1] = p[1]; + return y[0].LongValue; //return for procedure B' step 2 + } + + break; //step 14 + } + } + return y[0].LongValue; + } + + //Procedure B + private void procedure_B(int x0, int c, BigInteger[] pq) + { + //Verify and perform condition: 065536) + { + x0 = init_random.NextInt()/32768; + } + + while((c<0 || c>65536) || (c/2==0)) + { + c = init_random.NextInt()/32768 + 1; + } + + BigInteger [] qp = new BigInteger[2]; + BigInteger q = null, Q = null, p = null; + BigInteger C = BigInteger.ValueOf(c); + BigInteger constA16 = BigInteger.ValueOf(19381); + + //step1 + x0 = procedure_A(x0, c, qp, 256); + q = qp[0]; + + //step2 + x0 = procedure_A(x0, c, qp, 512); + Q = qp[0]; + + BigInteger[] y = new BigInteger[65]; + y[0] = BigInteger.ValueOf(x0); + + const int tp = 1024; + + BigInteger qQ = q.Multiply(Q); + +step3: + for(;;) + { + //step 3 + for (int j=0; j<64; j++) + { + y[j+1] = (y[j].Multiply(constA16).Add(C)).Mod(BigInteger.Two.Pow(16)); + } + + //step 4 + BigInteger Y = BigInteger.Zero; + + for (int j=0; j<64; j++) + { + Y = Y.Add(y[j].ShiftLeft(16*j)); + } + + y[0] = y[64]; //step 5 + + //step 6 + BigInteger N = BigInteger.One.ShiftLeft(tp-1).Divide(qQ).Add( + Y.ShiftLeft(tp-1).Divide(qQ.ShiftLeft(1024))); + + if (N.TestBit(0)) + { + N = N.Add(BigInteger.One); + } + + //step 7 + + for(;;) + { + //step 11 + BigInteger qQN = qQ.Multiply(N); + + if (qQN.BitLength > tp) + { + goto step3; //step 9 + } + + p = qQN.Add(BigInteger.One); + + //step10 + if (BigInteger.Two.ModPow(qQN, p).CompareTo(BigInteger.One) == 0 + && BigInteger.Two.ModPow(q.Multiply(N), p).CompareTo(BigInteger.One) != 0) + { + pq[0] = p; + pq[1] = q; + return; + } + + N = N.Add(BigInteger.Two); + } + } + } + + //Procedure B' + private void procedure_Bb(long x0, long c, BigInteger[] pq) + { + //Verify and perform condition: 04294967296L) + { + x0 = init_random.NextInt()*2; + } + + while((c<0 || c>4294967296L) || (c/2==0)) + { + c = init_random.NextInt()*2+1; + } + + BigInteger [] qp = new BigInteger[2]; + BigInteger q = null, Q = null, p = null; + BigInteger C = BigInteger.ValueOf(c); + BigInteger constA32 = BigInteger.ValueOf(97781173); + + //step1 + x0 = procedure_Aa(x0, c, qp, 256); + q = qp[0]; + + //step2 + x0 = procedure_Aa(x0, c, qp, 512); + Q = qp[0]; + + BigInteger[] y = new BigInteger[33]; + y[0] = BigInteger.ValueOf(x0); + + const int tp = 1024; + + BigInteger qQ = q.Multiply(Q); + +step3: + for(;;) + { + //step 3 + for (int j=0; j<32; j++) + { + y[j+1] = (y[j].Multiply(constA32).Add(C)).Mod(BigInteger.Two.Pow(32)); + } + + //step 4 + BigInteger Y = BigInteger.Zero; + for (int j=0; j<32; j++) + { + Y = Y.Add(y[j].ShiftLeft(32*j)); + } + + y[0] = y[32]; //step 5 + + //step 6 + BigInteger N = BigInteger.One.ShiftLeft(tp-1).Divide(qQ).Add( + Y.ShiftLeft(tp-1).Divide(qQ.ShiftLeft(1024))); + + if (N.TestBit(0)) + { + N = N.Add(BigInteger.One); + } + + //step 7 + + for(;;) + { + //step 11 + BigInteger qQN = qQ.Multiply(N); + + if (qQN.BitLength > tp) + { + goto step3; //step 9 + } + + p = qQN.Add(BigInteger.One); + + //step10 + if (BigInteger.Two.ModPow(qQN, p).CompareTo(BigInteger.One) == 0 + && BigInteger.Two.ModPow(q.Multiply(N), p).CompareTo(BigInteger.One) != 0) + { + pq[0] = p; + pq[1] = q; + return; + } + + N = N.Add(BigInteger.Two); + } + } + } + + + /** + * Procedure C + * procedure generates the a value from the given p,q, + * returning the a value. + */ + private BigInteger procedure_C(BigInteger p, BigInteger q) + { + BigInteger pSub1 = p.Subtract(BigInteger.One); + BigInteger pSub1Divq = pSub1.Divide(q); + + for(;;) + { + BigInteger d = new BigInteger(p.BitLength, init_random); + + // 1 < d < p-1 + if (d.CompareTo(BigInteger.One) > 0 && d.CompareTo(pSub1) < 0) + { + BigInteger a = d.ModPow(pSub1Divq, p); + + if (a.CompareTo(BigInteger.One) != 0) + { + return a; + } + } + } + } + + /** + * which generates the p , q and a values from the given parameters, + * returning the Gost3410Parameters object. + */ + public Gost3410Parameters GenerateParameters() + { + BigInteger [] pq = new BigInteger[2]; + BigInteger q = null, p = null, a = null; + + int x0, c; + long x0L, cL; + + if (typeproc==1) + { + x0 = init_random.NextInt(); + c = init_random.NextInt(); + + switch(size) + { + case 512: + procedure_A(x0, c, pq, 512); + break; + case 1024: + procedure_B(x0, c, pq); + break; + default: + throw new ArgumentException("Ooops! key size 512 or 1024 bit."); + } + p = pq[0]; q = pq[1]; + a = procedure_C(p, q); + //System.out.println("p:"+p.toString(16)+"\n"+"q:"+q.toString(16)+"\n"+"a:"+a.toString(16)); + //System.out.println("p:"+p+"\n"+"q:"+q+"\n"+"a:"+a); + return new Gost3410Parameters(p, q, a, new Gost3410ValidationParameters(x0, c)); + } + else + { + x0L = init_random.NextLong(); + cL = init_random.NextLong(); + + switch(size) + { + case 512: + procedure_Aa(x0L, cL, pq, 512); + break; + case 1024: + procedure_Bb(x0L, cL, pq); + break; + default: + throw new InvalidOperationException("Ooops! key size 512 or 1024 bit."); + } + p = pq[0]; q = pq[1]; + a = procedure_C(p, q); + //System.out.println("p:"+p.toString(16)+"\n"+"q:"+q.toString(16)+"\n"+"a:"+a.toString(16)); + //System.out.println("p:"+p+"\n"+"q:"+q+"\n"+"a:"+a); + return new Gost3410Parameters(p, q, a, new Gost3410ValidationParameters(x0L, cL)); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/GOST3410ParametersGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/GOST3410ParametersGenerator.cs.meta new file mode 100644 index 000000000..e47ad0c09 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/GOST3410ParametersGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 55c0c063ba32c654d988998faa5cebbf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/HKDFBytesGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/HKDFBytesGenerator.cs new file mode 100644 index 000000000..eb14aff6f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/HKDFBytesGenerator.cs @@ -0,0 +1,180 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /** + * HMAC-based Extract-and-Expand Key Derivation Function (HKDF) implemented + * according to IETF RFC 5869, May 2010 as specified by H. Krawczyk, IBM + * Research & P. Eronen, Nokia. It uses a HMac internally to compute de OKM + * (output keying material) and is likely to have better security properties + * than KDF's based on just a hash function. + */ + public sealed class HkdfBytesGenerator + : IDerivationFunction + { + private HMac hMacHash; + private int hashLen; + + private byte[] info; + private byte[] currentT; + + private int generatedBytes; + + /** + * Creates a HKDFBytesGenerator based on the given hash function. + * + * @param hash the digest to be used as the source of generatedBytes bytes + */ + public HkdfBytesGenerator(IDigest hash) + { + this.hMacHash = new HMac(hash); + this.hashLen = hash.GetDigestSize(); + } + + public void Init(IDerivationParameters parameters) + { + if (!(parameters is HkdfParameters hkdfParameters)) + throw new ArgumentException("HKDF parameters required for HkdfBytesGenerator", "parameters"); + + if (hkdfParameters.SkipExtract) + { + // use IKM directly as PRK + hMacHash.Init(new KeyParameter(hkdfParameters.GetIkm())); + } + else + { + hMacHash.Init(Extract(hkdfParameters.GetSalt(), hkdfParameters.GetIkm())); + } + + info = hkdfParameters.GetInfo(); + + generatedBytes = 0; + currentT = new byte[hashLen]; + } + + /** + * Performs the extract part of the key derivation function. + * + * @param salt the salt to use + * @param ikm the input keying material + * @return the PRK as KeyParameter + */ + private KeyParameter Extract(byte[] salt, byte[] ikm) + { + if (salt == null) + { + // TODO check if hashLen is indeed same as HMAC size + hMacHash.Init(new KeyParameter(new byte[hashLen])); + } + else + { + hMacHash.Init(new KeyParameter(salt)); + } + + hMacHash.BlockUpdate(ikm, 0, ikm.Length); + + byte[] prk = new byte[hashLen]; + hMacHash.DoFinal(prk, 0); + return new KeyParameter(prk); + } + + /** + * Performs the expand part of the key derivation function, using currentT + * as input and output buffer. + * + * @throws DataLengthException if the total number of bytes generated is larger than the one + * specified by RFC 5869 (255 * HashLen) + */ + private void ExpandNext() + { + int n = generatedBytes / hashLen + 1; + if (n >= 256) + { + throw new DataLengthException( + "HKDF cannot generate more than 255 blocks of HashLen size"); + } + // special case for T(0): T(0) is empty, so no update + if (generatedBytes != 0) + { + hMacHash.BlockUpdate(currentT, 0, hashLen); + } + hMacHash.BlockUpdate(info, 0, info.Length); + hMacHash.Update((byte)n); + hMacHash.DoFinal(currentT, 0); + } + + public IDigest Digest => hMacHash.GetUnderlyingDigest(); + + public int GenerateBytes(byte[] output, int outOff, int length) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return GenerateBytes(output.AsSpan(outOff, length)); +#else + if (generatedBytes > 255 * hashLen - length) + throw new DataLengthException("HKDF may only be used for 255 * HashLen bytes of output"); + + int toGenerate = length; + int posInT = generatedBytes % hashLen; + if (posInT != 0) + { + // copy what is left in the currentT (1..hash + int toCopy = System.Math.Min(hashLen - posInT, toGenerate); + Array.Copy(currentT, posInT, output, outOff, toCopy); + generatedBytes += toCopy; + toGenerate -= toCopy; + outOff += toCopy; + } + + while (toGenerate > 0) + { + ExpandNext(); + int toCopy = System.Math.Min(hashLen, toGenerate); + Array.Copy(currentT, 0, output, outOff, toCopy); + generatedBytes += toCopy; + toGenerate -= toCopy; + outOff += toCopy; + } + + return length; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int GenerateBytes(Span output) + { + int length = output.Length; + if (generatedBytes > 255 * hashLen - length) + throw new DataLengthException("HKDF may only be used for 255 * HashLen bytes of output"); + + int posInT = generatedBytes % hashLen; + if (posInT != 0) + { + // copy what is left in the currentT (1..hash + int toCopy = System.Math.Min(hashLen - posInT, output.Length); + currentT.AsSpan(posInT, toCopy).CopyTo(output); + generatedBytes += toCopy; + output = output[toCopy..]; + } + + while (!output.IsEmpty) + { + ExpandNext(); + int toCopy = System.Math.Min(hashLen, output.Length); + currentT.AsSpan(0, toCopy).CopyTo(output); + generatedBytes += toCopy; + output = output[toCopy..]; + } + + return length; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/HKDFBytesGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/HKDFBytesGenerator.cs.meta new file mode 100644 index 000000000..5e75b8b3b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/HKDFBytesGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 60c549f57c0a75c4bad2d81891b9016c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/KDFCounterBytesGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/KDFCounterBytesGenerator.cs new file mode 100644 index 000000000..d5e98a29f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/KDFCounterBytesGenerator.cs @@ -0,0 +1,166 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + public sealed class KdfCounterBytesGenerator + : IMacDerivationFunction + { + private readonly IMac prf; + private readonly int h; + + private byte[] fixedInputDataCtrPrefix; + private byte[] fixedInputData_afterCtr; + private int maxSizeExcl; + // ios is i defined as an octet string (the binary representation) + private byte[] ios; + + // operational + private int generatedBytes; + // k is used as buffer for all K(i) values + private byte[] k; + + public KdfCounterBytesGenerator(IMac prf) + { + this.prf = prf; + this.h = prf.GetMacSize(); + this.k = new byte[h]; + } + + public void Init(IDerivationParameters param) + { + if (!(param is KdfCounterParameters kdfParams)) + throw new ArgumentException("Wrong type of arguments given"); + + // --- init mac based PRF --- + + this.prf.Init(new KeyParameter(kdfParams.Ki)); + + // --- set arguments --- + + this.fixedInputDataCtrPrefix = kdfParams.FixedInputDataCounterPrefix; + this.fixedInputData_afterCtr = kdfParams.FixedInputDataCounterSuffix; + + int r = kdfParams.R; + this.ios = new byte[r / 8]; + + BigInteger maxSize = BigInteger.One.ShiftLeft(r).Multiply(BigInteger.ValueOf(h)); + this.maxSizeExcl = maxSize.BitLength > 31 ? int.MaxValue : maxSize.IntValueExact; + + // --- set operational state --- + + generatedBytes = 0; + } + + public IMac Mac => prf; + + public IDigest Digest + { + get { return (prf as HMac)?.GetUnderlyingDigest(); } + } + + public int GenerateBytes(byte[] output, int outOff, int length) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return GenerateBytes(output.AsSpan(outOff, length)); +#else + if (generatedBytes >= maxSizeExcl - length) + throw new DataLengthException("Current KDFCTR may only be used for " + maxSizeExcl + " bytes"); + + int toGenerate = length; + int posInK = generatedBytes % h; + if (posInK != 0) + { + // copy what is left in the currentT (1..hash + int toCopy = System.Math.Min(h - posInK, toGenerate); + Array.Copy(k, posInK, output, outOff, toCopy); + generatedBytes += toCopy; + toGenerate -= toCopy; + outOff += toCopy; + } + + while (toGenerate > 0) + { + GenerateNext(); + int toCopy = System.Math.Min(h, toGenerate); + Array.Copy(k, 0, output, outOff, toCopy); + generatedBytes += toCopy; + toGenerate -= toCopy; + outOff += toCopy; + } + + return length; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int GenerateBytes(Span output) + { + int length = output.Length; + if (generatedBytes >= maxSizeExcl - length) + throw new DataLengthException("Current KDFCTR may only be used for " + maxSizeExcl + " bytes"); + + int posInK = generatedBytes % h; + if (posInK != 0) + { + // copy what is left in the currentT (1..hash + int toCopy = System.Math.Min(h - posInK, output.Length); + k.AsSpan(posInK, toCopy).CopyTo(output); + generatedBytes += toCopy; + output = output[toCopy..]; + } + + while (!output.IsEmpty) + { + GenerateNext(); + int toCopy = System.Math.Min(h, output.Length); + k.AsSpan(0, toCopy).CopyTo(output); + generatedBytes += toCopy; + output = output[toCopy..]; + } + + return length; + } +#endif + + private void GenerateNext() + { + int i = generatedBytes / h + 1; + + // encode i into counter buffer + switch (ios.Length) + { + case 4: + ios[0] = (byte)(i >> 24); + // fall through + goto case 3; + case 3: + ios[ios.Length - 3] = (byte)(i >> 16); + // fall through + goto case 2; + case 2: + ios[ios.Length - 2] = (byte)(i >> 8); + // fall through + goto case 1; + case 1: + ios[ios.Length - 1] = (byte)i; + break; + default: + throw new InvalidOperationException("Unsupported size of counter i"); + } + + // special case for K(0): K(0) is empty, so no update + prf.BlockUpdate(fixedInputDataCtrPrefix, 0, fixedInputDataCtrPrefix.Length); + prf.BlockUpdate(ios, 0, ios.Length); + prf.BlockUpdate(fixedInputData_afterCtr, 0, fixedInputData_afterCtr.Length); + prf.DoFinal(k, 0); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/KDFCounterBytesGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/KDFCounterBytesGenerator.cs.meta new file mode 100644 index 000000000..b656e3192 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/KDFCounterBytesGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2034e44c953afa3438b28bd2c563a3a3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/KDFDoublePipelineIterationBytesGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/KDFDoublePipelineIterationBytesGenerator.cs new file mode 100644 index 000000000..2841d8ac8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/KDFDoublePipelineIterationBytesGenerator.cs @@ -0,0 +1,197 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + public sealed class KdfDoublePipelineIterationBytesGenerator + : IMacDerivationFunction + { + // fields set by the constructor + private readonly IMac prf; + private readonly int h; + + // fields set by init + private byte[] fixedInputData; + private int maxSizeExcl; + // ios is i defined as an octet string (the binary representation) + private byte[] ios; + private bool useCounter; + + // operational + private int generatedBytes; + // k is used as buffer for all K(i) values + private byte[] a; + private byte[] k; + + public KdfDoublePipelineIterationBytesGenerator(IMac prf) + { + this.prf = prf; + this.h = prf.GetMacSize(); + this.a = new byte[h]; + this.k = new byte[h]; + } + + public void Init(IDerivationParameters parameters) + { + if (!(parameters is KdfDoublePipelineIterationParameters dpiParams)) + throw new ArgumentException("Wrong type of arguments given"); + + // --- init mac based PRF --- + + this.prf.Init(new KeyParameter(dpiParams.Ki)); + + // --- set arguments --- + + this.fixedInputData = dpiParams.FixedInputData; + + int r = dpiParams.R; + this.ios = new byte[r / 8]; + + if (dpiParams.UseCounter) + { + // this is more conservative than the spec + BigInteger maxSize = BigInteger.One.ShiftLeft(r).Multiply(BigInteger.ValueOf(h)); + this.maxSizeExcl = maxSize.BitLength > 31 ? int.MaxValue : maxSize.IntValueExact; + } + else + { + this.maxSizeExcl = int.MaxValue; + } + + this.useCounter = dpiParams.UseCounter; + + // --- set operational state --- + + generatedBytes = 0; + } + + private void GenerateNext() + { + if (generatedBytes == 0) + { + // --- step 4 --- + prf.BlockUpdate(fixedInputData, 0, fixedInputData.Length); + prf.DoFinal(a, 0); + } + else + { + // --- step 5a --- + prf.BlockUpdate(a, 0, a.Length); + prf.DoFinal(a, 0); + } + + // --- step 5b --- + prf.BlockUpdate(a, 0, a.Length); + + if (useCounter) + { + int i = generatedBytes / h + 1; + + // encode i into counter buffer + switch (ios.Length) + { + case 4: + ios[0] = (byte)(i >> 24); + // fall through + goto case 3; + case 3: + ios[ios.Length - 3] = (byte)(i >> 16); + // fall through + goto case 2; + case 2: + ios[ios.Length - 2] = (byte)(i >> 8); + // fall through + goto case 1; + case 1: + ios[ios.Length - 1] = (byte)i; + break; + default: + throw new InvalidOperationException("Unsupported size of counter i"); + } + prf.BlockUpdate(ios, 0, ios.Length); + } + + prf.BlockUpdate(fixedInputData, 0, fixedInputData.Length); + prf.DoFinal(k, 0); + } + + public IDigest Digest + { + get { return (prf as HMac)?.GetUnderlyingDigest(); } + } + + public int GenerateBytes(byte[] output, int outOff, int length) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return GenerateBytes(output.AsSpan(outOff, length)); +#else + if (generatedBytes >= maxSizeExcl - length) + throw new DataLengthException("Current KDFCTR may only be used for " + maxSizeExcl + " bytes"); + + int toGenerate = length; + int posInK = generatedBytes % h; + if (posInK != 0) + { + // copy what is left in the currentT (1..hash + int toCopy = System.Math.Min(h - posInK, toGenerate); + Array.Copy(k, posInK, output, outOff, toCopy); + generatedBytes += toCopy; + toGenerate -= toCopy; + outOff += toCopy; + } + + while (toGenerate > 0) + { + GenerateNext(); + int toCopy = System.Math.Min(h, toGenerate); + Array.Copy(k, 0, output, outOff, toCopy); + generatedBytes += toCopy; + toGenerate -= toCopy; + outOff += toCopy; + } + + return length; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int GenerateBytes(Span output) + { + int length = output.Length; + if (generatedBytes >= maxSizeExcl - length) + throw new DataLengthException("Current KDFCTR may only be used for " + maxSizeExcl + " bytes"); + + int posInK = generatedBytes % h; + if (posInK != 0) + { + // copy what is left in the currentT (1..hash + GenerateNext(); + int toCopy = System.Math.Min(h - posInK, output.Length); + k.AsSpan(posInK, toCopy).CopyTo(output); + generatedBytes += toCopy; + output = output[toCopy..]; + } + + while (!output.IsEmpty) + { + GenerateNext(); + int toCopy = System.Math.Min(h, output.Length); + k.AsSpan(0, toCopy).CopyTo(output); + generatedBytes += toCopy; + output = output[toCopy..]; + } + + return length; + } +#endif + + public IMac Mac => prf; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/KDFDoublePipelineIterationBytesGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/KDFDoublePipelineIterationBytesGenerator.cs.meta new file mode 100644 index 000000000..73b65ce5b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/KDFDoublePipelineIterationBytesGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 14be041b331fa9a43b62f3936774bbb2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/KDFFeedbackBytesGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/KDFFeedbackBytesGenerator.cs new file mode 100644 index 000000000..e8580cdb2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/KDFFeedbackBytesGenerator.cs @@ -0,0 +1,193 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + public sealed class KdfFeedbackBytesGenerator + : IMacDerivationFunction + { + // please refer to the standard for the meaning of the variable names + // all field lengths are in bytes, not in bits as specified by the standard + + // fields set by the constructor + private readonly IMac prf; + private readonly int h; + + // fields set by init + private byte[] fixedInputData; + private int maxSizeExcl; + // ios is i defined as an octet string (the binary representation) + private byte[] ios; + private byte[] iv; + private bool useCounter; + + // operational + private int generatedBytes; + // k is used as buffer for all K(i) values + private byte[] k; + + public KdfFeedbackBytesGenerator(IMac prf) + { + this.prf = prf; + this.h = prf.GetMacSize(); + this.k = new byte[h]; + } + + public void Init(IDerivationParameters parameters) + { + if (!(parameters is KdfFeedbackParameters feedbackParams)) + throw new ArgumentException("Wrong type of arguments given"); + + // --- init mac based PRF --- + + this.prf.Init(new KeyParameter(feedbackParams.Ki)); + + // --- set arguments --- + + this.fixedInputData = feedbackParams.FixedInputData; + + int r = feedbackParams.R; + this.ios = new byte[r / 8]; + + if (feedbackParams.UseCounter) + { + // this is more conservative than the spec + BigInteger maxSize = BigInteger.One.ShiftLeft(r).Multiply(BigInteger.ValueOf(h)); + this.maxSizeExcl = maxSize.BitLength > 31 ? int.MaxValue : maxSize.IntValueExact; + } + else + { + this.maxSizeExcl = int.MaxValue; + } + + this.iv = feedbackParams.Iv; + this.useCounter = feedbackParams.UseCounter; + + // --- set operational state --- + + generatedBytes = 0; + } + + public IDigest Digest + { + get { return (prf as HMac)?.GetUnderlyingDigest(); } + } + + public int GenerateBytes(byte[] output, int outOff, int length) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return GenerateBytes(output.AsSpan(outOff, length)); +#else + if (generatedBytes >= maxSizeExcl - length) + throw new DataLengthException("Current KDFCTR may only be used for " + maxSizeExcl + " bytes"); + + int toGenerate = length; + int posInK = generatedBytes % h; + if (posInK != 0) + { + // copy what is left in the currentT (1..hash + int toCopy = System.Math.Min(h - posInK, toGenerate); + Array.Copy(k, posInK, output, outOff, toCopy); + generatedBytes += toCopy; + toGenerate -= toCopy; + outOff += toCopy; + } + + while (toGenerate > 0) + { + GenerateNext(); + int toCopy = System.Math.Min(h, toGenerate); + Array.Copy(k, 0, output, outOff, toCopy); + generatedBytes += toCopy; + toGenerate -= toCopy; + outOff += toCopy; + } + + return length; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int GenerateBytes(Span output) + { + int length = output.Length; + if (generatedBytes >= maxSizeExcl - length) + throw new DataLengthException("Current KDFCTR may only be used for " + maxSizeExcl + " bytes"); + + int posInK = generatedBytes % h; + if (posInK != 0) + { + // copy what is left in the currentT (1..hash + int toCopy = System.Math.Min(h - posInK, output.Length); + k.AsSpan(posInK, toCopy).CopyTo(output); + generatedBytes += toCopy; + output = output[toCopy..]; + } + + while (!output.IsEmpty) + { + GenerateNext(); + int toCopy = System.Math.Min(h, output.Length); + k.AsSpan(0, toCopy).CopyTo(output); + generatedBytes += toCopy; + output = output[toCopy..]; + } + + return length; + } +#endif + + private void GenerateNext() + { + // TODO enable IV + if (generatedBytes == 0) + { + prf.BlockUpdate(iv, 0, iv.Length); + } + else + { + prf.BlockUpdate(k, 0, k.Length); + } + + if (useCounter) + { + int i = generatedBytes / h + 1; + + // encode i into counter buffer + switch (ios.Length) + { + case 4: + ios[0] = (byte)(i >> 24); + // fall through + goto case 3; + case 3: + ios[ios.Length - 3] = (byte)(i >> 16); + // fall through + goto case 2; + case 2: + ios[ios.Length - 2] = (byte)(i >> 8); + // fall through + goto case 1; + case 1: + ios[ios.Length - 1] = (byte)i; + break; + default: + throw new InvalidOperationException("Unsupported size of counter i"); + } + prf.BlockUpdate(ios, 0, ios.Length); + } + + prf.BlockUpdate(fixedInputData, 0, fixedInputData.Length); + prf.DoFinal(k, 0); + } + + public IMac Mac => prf; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/KDFFeedbackBytesGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/KDFFeedbackBytesGenerator.cs.meta new file mode 100644 index 000000000..d3ccc5918 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/KDFFeedbackBytesGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b50d93af2d9f0a94a911b4f9bbca7260 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Kdf1BytesGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Kdf1BytesGenerator.cs new file mode 100644 index 000000000..dbe0ffe80 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Kdf1BytesGenerator.cs @@ -0,0 +1,25 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /** + * KFD1 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 + *
+ * This implementation is based on IEEE P1363/ISO 18033. + */ + public sealed class Kdf1BytesGenerator + : BaseKdfBytesGenerator + { + /** + * Construct a KDF1 byte generator. + * + * @param digest the digest to be used as the source of derived keys. + */ + public Kdf1BytesGenerator(IDigest digest) + : base(0, digest) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Kdf1BytesGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Kdf1BytesGenerator.cs.meta new file mode 100644 index 000000000..84d21c332 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Kdf1BytesGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d7074bad2d3d06438d11b782fef919d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Kdf2BytesGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Kdf2BytesGenerator.cs new file mode 100644 index 000000000..cd80c6385 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Kdf2BytesGenerator.cs @@ -0,0 +1,26 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /** + * KDF2 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 + *
+ * This implementation is based on IEEE P1363/ISO 18033. + */ + public sealed class Kdf2BytesGenerator + : BaseKdfBytesGenerator + { + /** + * Construct a KDF2 bytes generator. Generates key material + * according to IEEE P1363 or ISO 18033 depending on the initialisation. + * + * @param digest the digest to be used as the source of derived keys. + */ + public Kdf2BytesGenerator(IDigest digest) + : base(1, digest) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Kdf2BytesGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Kdf2BytesGenerator.cs.meta new file mode 100644 index 000000000..1dbf11758 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Kdf2BytesGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 28a22366b40aeec43b46ed5e13467239 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Mgf1BytesGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Mgf1BytesGenerator.cs new file mode 100644 index 000000000..2cd9bb348 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Mgf1BytesGenerator.cs @@ -0,0 +1,116 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /// Generator for MGF1 as defined in Pkcs 1v2 + public sealed class Mgf1BytesGenerator + : IDerivationFunction + { + private readonly IDigest m_digest; + private readonly int m_hLen; + + private byte[] m_buffer; + + /// the digest to be used as the source of generated bytes + public Mgf1BytesGenerator(IDigest digest) + { + m_digest = digest; + m_hLen = digest.GetDigestSize(); + } + + public void Init(IDerivationParameters parameters) + { + if (!(parameters is MgfParameters mgfParameters)) + throw new ArgumentException("MGF parameters required for MGF1Generator"); + + m_buffer = new byte[mgfParameters.SeedLength + 4 + m_hLen]; + mgfParameters.GetSeed(m_buffer, 0); + } + + /// the underlying digest. + public IDigest Digest => m_digest; + + /// Fill len bytes of the output buffer with bytes generated from the derivation function. + /// + public int GenerateBytes(byte[] output, int outOff, int length) + { + Check.OutputLength(output, outOff, length, "output buffer too small"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return GenerateBytes(output.AsSpan(outOff, length)); +#else + int hashPos = m_buffer.Length - m_hLen; + int counterPos = hashPos - 4; + uint counter = 0; + + m_digest.Reset(); + + int end = outOff + length; + int limit = end - m_hLen; + + while (outOff <= limit) + { + Pack.UInt32_To_BE(counter++, m_buffer, counterPos); + + m_digest.BlockUpdate(m_buffer, 0, hashPos); + m_digest.DoFinal(output, outOff); + + outOff += m_hLen; + } + + if (outOff < end) + { + Pack.UInt32_To_BE(counter, m_buffer, counterPos); + + m_digest.BlockUpdate(m_buffer, 0, hashPos); + m_digest.DoFinal(m_buffer, hashPos); + + Array.Copy(m_buffer, hashPos, output, outOff, end - outOff); + } + + return length; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int GenerateBytes(Span output) + { + int hashPos = m_buffer.Length - m_hLen; + int counterPos = hashPos - 4; + uint counter = 0; + + m_digest.Reset(); + + int pos = 0, length = output.Length, limit = length - m_hLen; + + while (pos <= limit) + { + Pack.UInt32_To_BE(counter++, m_buffer.AsSpan(counterPos)); + + m_digest.BlockUpdate(m_buffer.AsSpan(0, hashPos)); + m_digest.DoFinal(output[pos..]); + + pos += m_hLen; + } + + if (pos < length) + { + Pack.UInt32_To_BE(counter, m_buffer.AsSpan(counterPos)); + + m_digest.BlockUpdate(m_buffer.AsSpan(0, hashPos)); + m_digest.DoFinal(m_buffer.AsSpan(hashPos)); + m_buffer.AsSpan(hashPos, length - pos).CopyTo(output[pos..]); + } + + return length; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Mgf1BytesGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Mgf1BytesGenerator.cs.meta new file mode 100644 index 000000000..dcf60b3b5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Mgf1BytesGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31a110c2dc0902d479e2a482d25f7212 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/NaccacheSternKeyPairGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/NaccacheSternKeyPairGenerator.cs new file mode 100644 index 000000000..be3b20618 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/NaccacheSternKeyPairGenerator.cs @@ -0,0 +1,263 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /** + * Key generation parameters for NaccacheStern cipher. For details on this cipher, please see + * + * http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + */ + public class NaccacheSternKeyPairGenerator + : IAsymmetricCipherKeyPairGenerator + { + private static readonly int[] smallPrimes = + { + 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, + 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, + 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, + 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, + 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, + 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, + 541, 547, 557 + }; + + private NaccacheSternKeyGenerationParameters param; + + /* + * (non-Javadoc) + * + * @see org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator#init(org.bouncycastle.crypto.KeyGenerationParameters) + */ + public void Init(KeyGenerationParameters parameters) + { + this.param = (NaccacheSternKeyGenerationParameters)parameters; + } + + /* + * (non-Javadoc) + * + * @see org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator#generateKeyPair() + */ + public AsymmetricCipherKeyPair GenerateKeyPair() + { + int strength = param.Strength; + SecureRandom rand = param.Random; + int certainty = param.Certainty; + + var smallPrimes = FindFirstPrimes(param.CountSmallPrimes); + + smallPrimes = PermuteList(smallPrimes, rand); + + BigInteger u = BigInteger.One; + BigInteger v = BigInteger.One; + + for (int i = 0; i < smallPrimes.Count / 2; i++) + { + u = u.Multiply((BigInteger)smallPrimes[i]); + } + for (int i = smallPrimes.Count / 2; i < smallPrimes.Count; i++) + { + v = v.Multiply((BigInteger)smallPrimes[i]); + } + + BigInteger sigma = u.Multiply(v); + + // n = (2 a u _p + 1 ) ( 2 b v _q + 1) + // -> |n| = strength + // |2| = 1 in bits + // -> |a| * |b| = |n| - |u| - |v| - |_p| - |_q| - |2| -|2| + // remainingStrength = strength - sigma.bitLength() - _p.bitLength() - + // _q.bitLength() - 1 -1 + int remainingStrength = strength - sigma.BitLength - 48; + BigInteger a = GeneratePrime(remainingStrength / 2 + 1, certainty, rand); + BigInteger b = GeneratePrime(remainingStrength / 2 + 1, certainty, rand); + + BigInteger _p; + BigInteger _q; + BigInteger p; + BigInteger q; + + long tries = 0; + + BigInteger _2au = a.Multiply(u).ShiftLeft(1); + BigInteger _2bv = b.Multiply(v).ShiftLeft(1); + + for (;;) + { + tries++; + + _p = GeneratePrime(24, certainty, rand); + + p = _p.Multiply(_2au).Add(BigInteger.One); + + if (!p.IsProbablePrime(certainty, true)) + continue; + + for (;;) + { + _q = GeneratePrime(24, certainty, rand); + + if (_p.Equals(_q)) + continue; + + q = _q.Multiply(_2bv).Add(BigInteger.One); + + if (q.IsProbablePrime(certainty, true)) + break; + } + + if (!sigma.Gcd(_p.Multiply(_q)).Equals(BigInteger.One)) + { + //Console.WriteLine("sigma.gcd(_p.mult(_q)) != 1!\n _p: " + _p +"\n _q: "+ _q ); + continue; + } + + if (p.Multiply(q).BitLength < strength) + { + continue; + } + break; + } + + BigInteger n = p.Multiply(q); + BigInteger phi_n = p.Subtract(BigInteger.One).Multiply(q.Subtract(BigInteger.One)); + BigInteger g; + tries = 0; + + for (;;) + { + // TODO After the first loop, just regenerate one randomly-selected gPart each time? + var gParts = new List(); + for (int ind = 0; ind != smallPrimes.Count; ind++) + { + BigInteger i = smallPrimes[ind]; + BigInteger e = phi_n.Divide(i); + + for (;;) + { + tries++; + + g = GeneratePrime(strength, certainty, rand); + + if (!g.ModPow(e, n).Equals(BigInteger.One)) + { + gParts.Add(g); + break; + } + } + } + g = BigInteger.One; + for (int i = 0; i < smallPrimes.Count; i++) + { + BigInteger gPart = (BigInteger) gParts[i]; + BigInteger smallPrime = (BigInteger) smallPrimes[i]; + g = g.Multiply(gPart.ModPow(sigma.Divide(smallPrime), n)).Mod(n); + } + + // make sure that g is not divisible by p_i or q_i + bool divisible = false; + for (int i = 0; i < smallPrimes.Count; i++) + { + if (g.ModPow(phi_n.Divide((BigInteger)smallPrimes[i]), n).Equals(BigInteger.One)) + { + divisible = true; + break; + } + } + + if (divisible) + { + continue; + } + + // make sure that g has order > phi_n/4 + + //if (g.ModPow(phi_n.Divide(BigInteger.ValueOf(4)), n).Equals(BigInteger.One)) + if (g.ModPow(phi_n.ShiftRight(2), n).Equals(BigInteger.One)) + { + continue; + } + + if (g.ModPow(phi_n.Divide(_p), n).Equals(BigInteger.One)) + { + continue; + } + if (g.ModPow(phi_n.Divide(_q), n).Equals(BigInteger.One)) + { + continue; + } + if (g.ModPow(phi_n.Divide(a), n).Equals(BigInteger.One)) + { + continue; + } + if (g.ModPow(phi_n.Divide(b), n).Equals(BigInteger.One)) + { + continue; + } + break; + } + + return new AsymmetricCipherKeyPair(new NaccacheSternKeyParameters(false, g, n, sigma.BitLength), + new NaccacheSternPrivateKeyParameters(g, n, sigma.BitLength, smallPrimes, phi_n)); + } + + private static BigInteger GeneratePrime(int bitLength, int certainty, SecureRandom rand) + { + return new BigInteger(bitLength, certainty, rand); + } + + /** + * Generates a permuted ArrayList from the original one. The original List + * is not modified + * + * @param arr + * the ArrayList to be permuted + * @param rand + * the source of Randomness for permutation + * @return a new IList with the permuted elements. + */ + private static IList PermuteList(IList arr, SecureRandom rand) + { + // TODO Create a utility method for generating permutation of first 'n' integers + + var retval = new List(arr.Count); + + foreach (var element in arr) + { + int index = rand.Next(retval.Count + 1); + retval.Insert(index, element); + } + + return retval; + } + + /** + * Finds the first 'count' primes starting with 3 + * + * @param count + * the number of primes to find + * @return a vector containing the found primes as Integer + */ + private static IList FindFirstPrimes(int count) + { + var primes = new List(count); + + for (int i = 0; i != count; i++) + { + primes.Add(BigInteger.ValueOf(smallPrimes[i])); + } + + return primes; + } + + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/NaccacheSternKeyPairGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/NaccacheSternKeyPairGenerator.cs.meta new file mode 100644 index 000000000..1f71a49c2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/NaccacheSternKeyPairGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 720fd0eb1bd2a4048ba38b891037760b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/OpenBsdBCrypt.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/OpenBsdBCrypt.cs new file mode 100644 index 000000000..8500c7055 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/OpenBsdBCrypt.cs @@ -0,0 +1,305 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /** + * Password hashing scheme BCrypt, + * designed by Niels Provos and David Mazières, using the + * String format and the Base64 encoding + * of the reference implementation on OpenBSD + */ + public class OpenBsdBCrypt + { + private static readonly byte[] EncodingTable = // the Bcrypts encoding table for OpenBSD + { + (byte)'.', (byte)'/', (byte)'A', (byte)'B', (byte)'C', (byte)'D', + (byte)'E', (byte)'F', (byte)'G', (byte)'H', (byte)'I', (byte)'J', + (byte)'K', (byte)'L', (byte)'M', (byte)'N', (byte)'O', (byte)'P', + (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U', (byte)'V', + (byte)'W', (byte)'X', (byte)'Y', (byte)'Z', (byte)'a', (byte)'b', + (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g', (byte)'h', + (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n', + (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', + (byte)'u', (byte)'v', (byte)'w', (byte)'x', (byte)'y', (byte)'z', + (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', + (byte)'6', (byte)'7', (byte)'8', (byte)'9' + }; + + /* + * set up the decoding table. + */ + private static readonly byte[] DecodingTable = new byte[128]; + private static readonly string DefaultVersion = "2y"; + private static readonly HashSet AllowedVersions = new HashSet(); + + static OpenBsdBCrypt() + { + // Presently just the Bcrypt versions. + AllowedVersions.Add("2a"); + AllowedVersions.Add("2y"); + AllowedVersions.Add("2b"); + + for (int i = 0; i < DecodingTable.Length; i++) + { + DecodingTable[i] = (byte)0xff; + } + + for (int i = 0; i < EncodingTable.Length; i++) + { + DecodingTable[EncodingTable[i]] = (byte)i; + } + } + + public OpenBsdBCrypt() + { + } + + /** + * Creates a 60 character Bcrypt String, including + * version, cost factor, salt and hash, separated by '$' + * + * @param version the version, 2y,2b or 2a. (2a is not backwards compatible.) + * @param cost the cost factor, treated as an exponent of 2 + * @param salt a 16 byte salt + * @param password the password + * @return a 60 character Bcrypt String + */ + private static string CreateBcryptString(string version, byte[] password, byte[] salt, int cost) + { + if (!AllowedVersions.Contains(version)) + throw new ArgumentException("Version " + version + " is not accepted by this implementation.", "version"); + + StringBuilder sb = new StringBuilder(60); + sb.Append('$'); + sb.Append(version); + sb.Append('$'); + sb.Append(cost < 10 ? ("0" + cost) : cost.ToString()); + sb.Append('$'); + sb.Append(EncodeData(salt)); + + byte[] key = BCrypt.Generate(password, salt, cost); + + sb.Append(EncodeData(key)); + + return sb.ToString(); + } + + /** + * Creates a 60 character Bcrypt String, including + * version, cost factor, salt and hash, separated by '$' using version + * '2y'. + * + * @param cost the cost factor, treated as an exponent of 2 + * @param salt a 16 byte salt + * @param password the password + * @return a 60 character Bcrypt String + */ + public static string Generate(char[] password, byte[] salt, int cost) + { + return Generate(DefaultVersion, password, salt, cost); + } + + /** + * Creates a 60 character Bcrypt String, including + * version, cost factor, salt and hash, separated by '$' + * + * @param version the version, may be 2b, 2y or 2a. (2a is not backwards compatible.) + * @param cost the cost factor, treated as an exponent of 2 + * @param salt a 16 byte salt + * @param password the password + * @return a 60 character Bcrypt String + */ + public static string Generate(string version, char[] password, byte[] salt, int cost) + { + if (!AllowedVersions.Contains(version)) + throw new ArgumentException("Version " + version + " is not accepted by this implementation.", "version"); + if (password == null) + throw new ArgumentNullException("password"); + if (salt == null) + throw new ArgumentNullException("salt"); + if (salt.Length != 16) + throw new DataLengthException("16 byte salt required: " + salt.Length); + + if (cost < 4 || cost > 31) // Minimum rounds: 16, maximum 2^31 + throw new ArgumentException("Invalid cost factor.", "cost"); + + byte[] psw = Strings.ToUtf8ByteArray(password); + + // 0 termination: + + byte[] tmp = new byte[psw.Length >= 72 ? 72 : psw.Length + 1]; + int copyLen = System.Math.Min(psw.Length, tmp.Length); + Array.Copy(psw, 0, tmp, 0, copyLen); + + Array.Clear(psw, 0, psw.Length); + + string rv = CreateBcryptString(version, tmp, salt, cost); + + Array.Clear(tmp, 0, tmp.Length); + + return rv; + } + + /** + * Checks if a password corresponds to a 60 character Bcrypt String + * + * @param bcryptString a 60 character Bcrypt String, including + * version, cost factor, salt and hash, + * separated by '$' + * @param password the password as an array of chars + * @return true if the password corresponds to the + * Bcrypt String, otherwise false + */ + public static bool CheckPassword(string bcryptString, char[] password) + { + // validate bcryptString: + if (bcryptString.Length != 60) + throw new DataLengthException("Bcrypt String length: " + bcryptString.Length + ", 60 required."); + if (bcryptString[0] != '$' || bcryptString[3] != '$' || bcryptString[6] != '$') + throw new ArgumentException("Invalid Bcrypt String format.", "bcryptString"); + + string version = bcryptString.Substring(1, 2); + if (!AllowedVersions.Contains(version)) + throw new ArgumentException("Bcrypt version '" + version + "' is not supported by this implementation", "bcryptString"); + + int cost; + try + { + cost = int.Parse(bcryptString.Substring(4, 2)); + } + catch (Exception nfe) + { + throw new ArgumentException("Invalid cost factor: " + bcryptString.Substring(4, 2), "bcryptString", nfe); + } + if (cost < 4 || cost > 31) + throw new ArgumentException("Invalid cost factor: " + cost + ", 4 < cost < 31 expected."); + + // check password: + if (password == null) + throw new ArgumentNullException("Missing password."); + + int start = bcryptString.LastIndexOf('$') + 1, end = bcryptString.Length - 31; + byte[] salt = DecodeSaltString(bcryptString.Substring(start, end - start)); + + string newBcryptString = Generate(version, password, salt, cost); + + return bcryptString.Equals(newBcryptString); + } + + /* + * encode the input data producing a Bcrypt base 64 string. + * + * @param a byte representation of the salt or the password + * @return the Bcrypt base64 string + */ + private static string EncodeData(byte[] data) + { + if (data.Length != 24 && data.Length != 16) // 192 bit key or 128 bit salt expected + throw new DataLengthException("Invalid length: " + data.Length + ", 24 for key or 16 for salt expected"); + + bool salt = false; + if (data.Length == 16)//salt + { + salt = true; + byte[] tmp = new byte[18];// zero padding + Array.Copy(data, 0, tmp, 0, data.Length); + data = tmp; + } + else // key + { + data[data.Length - 1] = (byte)0; + } + + MemoryStream mOut = new MemoryStream(); + int len = data.Length; + + uint a1, a2, a3; + int i; + for (i = 0; i < len; i += 3) + { + a1 = data[i]; + a2 = data[i + 1]; + a3 = data[i + 2]; + + mOut.WriteByte(EncodingTable[(a1 >> 2) & 0x3f]); + mOut.WriteByte(EncodingTable[((a1 << 4) | (a2 >> 4)) & 0x3f]); + mOut.WriteByte(EncodingTable[((a2 << 2) | (a3 >> 6)) & 0x3f]); + mOut.WriteByte(EncodingTable[a3 & 0x3f]); + } + + string result = Strings.FromByteArray(mOut.ToArray()); + int resultLen = salt + ? 22 // truncate padding + : result.Length - 1; + + return result.Substring(0, resultLen); + } + + + /* + * decodes the bcrypt base 64 encoded SaltString + * + * @param a 22 character Bcrypt base 64 encoded String + * @return the 16 byte salt + * @exception DataLengthException if the length + * of parameter is not 22 + * @exception InvalidArgumentException if the parameter + * contains a value other than from Bcrypts base 64 encoding table + */ + private static byte[] DecodeSaltString(string saltString) + { + char[] saltChars = saltString.ToCharArray(); + + MemoryStream mOut = new MemoryStream(16); + byte b1, b2, b3, b4; + + if (saltChars.Length != 22)// bcrypt salt must be 22 (16 bytes) + throw new DataLengthException("Invalid base64 salt length: " + saltChars.Length + " , 22 required."); + + // check string for invalid characters: + for (int i = 0; i < saltChars.Length; i++) + { + int value = saltChars[i]; + if (value > 122 || value < 46 || (value > 57 && value < 65)) + throw new ArgumentException("Salt string contains invalid character: " + value, "saltString"); + } + + // Padding: add two '\u0000' + char[] tmp = new char[22 + 2]; + Array.Copy(saltChars, 0, tmp, 0, saltChars.Length); + saltChars = tmp; + + int len = saltChars.Length; + + for (int i = 0; i < len; i += 4) + { + b1 = DecodingTable[saltChars[i]]; + b2 = DecodingTable[saltChars[i + 1]]; + b3 = DecodingTable[saltChars[i + 2]]; + b4 = DecodingTable[saltChars[i + 3]]; + + mOut.WriteByte((byte)((b1 << 2) | (b2 >> 4))); + mOut.WriteByte((byte)((b2 << 4) | (b3 >> 2))); + mOut.WriteByte((byte)((b3 << 6) | b4)); + } + + byte[] saltBytes = mOut.ToArray(); + + // truncate: + byte[] tmpSalt = new byte[16]; + Array.Copy(saltBytes, 0, tmpSalt, 0, tmpSalt.Length); + saltBytes = tmpSalt; + + return saltBytes; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/OpenBsdBCrypt.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/OpenBsdBCrypt.cs.meta new file mode 100644 index 000000000..f72722af6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/OpenBsdBCrypt.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1fec56be41cc0b4f86d231a91f025ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/OpenSSLPBEParametersGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/OpenSSLPBEParametersGenerator.cs new file mode 100644 index 000000000..16a19a377 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/OpenSSLPBEParametersGenerator.cs @@ -0,0 +1,144 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /// + /// Generator for PBE derived keys and IVs as usd by OpenSSL. Originally this scheme was a simple extension of + /// PKCS 5 V2.0 Scheme 1 using MD5 with an iteration count of 1. The default digest was changed to SHA-256 with + /// OpenSSL 1.1.0. This implementation still defaults to MD5, but the digest can now be set. + /// + public class OpenSslPbeParametersGenerator + : PbeParametersGenerator + { + private readonly IDigest digest; + + /// + /// + /// Construct a OpenSSL Parameters generator - digest the original MD5. + /// + /// + public OpenSslPbeParametersGenerator() : this(new MD5Digest()) + { + } + + /// + /// + /// Construct a OpenSSL Parameters generator - digest as specified. + /// + /// the digest to use as the PRF. + /// + public OpenSslPbeParametersGenerator(IDigest digest) + { + this.digest = digest; + } + + public override void Init( + byte[] password, + byte[] salt, + int iterationCount) + { + // Ignore the provided iterationCount + base.Init(password, salt, 1); + } + + /** + * Initialise - note the iteration count for this algorithm is fixed at 1. + * + * @param password password to use. + * @param salt salt to use. + */ + public virtual void Init( + byte[] password, + byte[] salt) + { + base.Init(password, salt, 1); + } + + /** + * the derived key function, the ith hash of the password and the salt. + */ + private byte[] GenerateDerivedKey( + int bytesNeeded) + { + byte[] buf = new byte[digest.GetDigestSize()]; + byte[] key = new byte[bytesNeeded]; + int offset = 0; + + for (;;) + { + digest.BlockUpdate(mPassword, 0, mPassword.Length); + digest.BlockUpdate(mSalt, 0, mSalt.Length); + + digest.DoFinal(buf, 0); + + int len = (bytesNeeded > buf.Length) ? buf.Length : bytesNeeded; + Array.Copy(buf, 0, key, offset, len); + offset += len; + + // check if we need any more + bytesNeeded -= len; + if (bytesNeeded == 0) + { + break; + } + + // do another round + digest.Reset(); + digest.BlockUpdate(buf, 0, buf.Length); + } + + return key; + } + + public override ICipherParameters GenerateDerivedParameters( + string algorithm, + int keySize) + { + keySize /= 8; + + byte[] dKey = GenerateDerivedKey(keySize); + + return ParameterUtilities.CreateKeyParameter(algorithm, dKey, 0, keySize); + } + + public override ICipherParameters GenerateDerivedParameters( + string algorithm, + int keySize, + int ivSize) + { + keySize /= 8; + ivSize /= 8; + + byte[] dKey = GenerateDerivedKey(keySize + ivSize); + KeyParameter key = ParameterUtilities.CreateKeyParameter(algorithm, dKey, 0, keySize); + + return new ParametersWithIV(key, dKey, keySize, ivSize); + } + + /** + * Generate a key parameter for use with a MAC derived from the password, + * salt, and iteration count we are currently initialised with. + * + * @param keySize the size of the key we want (in bits) + * @return a KeyParameter object. + * @exception ArgumentException if the key length larger than the base hash size. + */ + public override ICipherParameters GenerateDerivedMacParameters( + int keySize) + { + keySize = keySize / 8; + + byte[] dKey = GenerateDerivedKey(keySize); + + return new KeyParameter(dKey, 0, keySize); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/OpenSSLPBEParametersGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/OpenSSLPBEParametersGenerator.cs.meta new file mode 100644 index 000000000..2b81f85b6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/OpenSSLPBEParametersGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 227a7f058cce60f4e9f1944112a1e3e9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Pkcs12ParametersGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Pkcs12ParametersGenerator.cs new file mode 100644 index 000000000..19879b9ce --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Pkcs12ParametersGenerator.cs @@ -0,0 +1,207 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /** + * Generator for Pbe derived keys and ivs as defined by Pkcs 12 V1.0. + *

+ * The document this implementation is based on can be found at + * + * RSA's Pkcs12 Page + *

+ */ + public class Pkcs12ParametersGenerator + : PbeParametersGenerator + { + public const int KeyMaterial = 1; + public const int IVMaterial = 2; + public const int MacMaterial = 3; + + private readonly IDigest digest; + + private readonly int u; + private readonly int v; + + /** + * Construct a Pkcs 12 Parameters generator. + * + * @param digest the digest to be used as the source of derived keys. + * @exception ArgumentException if an unknown digest is passed in. + */ + public Pkcs12ParametersGenerator( + IDigest digest) + { + this.digest = digest; + + u = digest.GetDigestSize(); + v = digest.GetByteLength(); + } + + /** + * add a + b + 1, returning the result in a. The a value is treated + * as a BigInteger of length (b.Length * 8) bits. The result is + * modulo 2^b.Length in case of overflow. + */ + private void Adjust( + byte[] a, + int aOff, + byte[] b) + { + int x = (b[b.Length - 1] & 0xff) + (a[aOff + b.Length - 1] & 0xff) + 1; + + a[aOff + b.Length - 1] = (byte)x; + x = (int) ((uint) x >> 8); + + for (int i = b.Length - 2; i >= 0; i--) + { + x += (b[i] & 0xff) + (a[aOff + i] & 0xff); + a[aOff + i] = (byte)x; + x = (int) ((uint) x >> 8); + } + } + + /** + * generation of a derived key ala Pkcs12 V1.0. + */ + private byte[] GenerateDerivedKey( + int idByte, + int n) + { + byte[] D = new byte[v]; + byte[] dKey = new byte[n]; + + for (int i = 0; i != D.Length; i++) + { + D[i] = (byte)idByte; + } + + byte[] S; + + if ((mSalt != null) && (mSalt.Length != 0)) + { + S = new byte[v * ((mSalt.Length + v - 1) / v)]; + + for (int i = 0; i != S.Length; i++) + { + S[i] = mSalt[i % mSalt.Length]; + } + } + else + { + S = new byte[0]; + } + + byte[] P; + + if ((mPassword != null) && (mPassword.Length != 0)) + { + P = new byte[v * ((mPassword.Length + v - 1) / v)]; + + for (int i = 0; i != P.Length; i++) + { + P[i] = mPassword[i % mPassword.Length]; + } + } + else + { + P = new byte[0]; + } + + byte[] I = new byte[S.Length + P.Length]; + + Array.Copy(S, 0, I, 0, S.Length); + Array.Copy(P, 0, I, S.Length, P.Length); + + byte[] B = new byte[v]; + int c = (n + u - 1) / u; + byte[] A = new byte[u]; + + for (int i = 1; i <= c; i++) + { + digest.BlockUpdate(D, 0, D.Length); + digest.BlockUpdate(I, 0, I.Length); + digest.DoFinal(A, 0); + + for (int j = 1; j != mIterationCount; j++) + { + digest.BlockUpdate(A, 0, A.Length); + digest.DoFinal(A, 0); + } + + for (int j = 0; j != B.Length; j++) + { + B[j] = A[j % A.Length]; + } + + for (int j = 0; j != I.Length / v; j++) + { + Adjust(I, j * v, B); + } + + if (i == c) + { + Array.Copy(A, 0, dKey, (i - 1) * u, dKey.Length - ((i - 1) * u)); + } + else + { + Array.Copy(A, 0, dKey, (i - 1) * u, A.Length); + } + } + + return dKey; + } + + public override ICipherParameters GenerateDerivedParameters( + string algorithm, + int keySize) + { + keySize /= 8; + + byte[] dKey = GenerateDerivedKey(KeyMaterial, keySize); + + return ParameterUtilities.CreateKeyParameter(algorithm, dKey, 0, keySize); + } + + public override ICipherParameters GenerateDerivedParameters( + string algorithm, + int keySize, + int ivSize) + { + keySize /= 8; + ivSize /= 8; + + byte[] dKey = GenerateDerivedKey(KeyMaterial, keySize); + KeyParameter key = ParameterUtilities.CreateKeyParameter(algorithm, dKey, 0, keySize); + + byte[] iv = GenerateDerivedKey(IVMaterial, ivSize); + + return new ParametersWithIV(key, iv, 0, ivSize); + } + + /** + * Generate a key parameter for use with a MAC derived from the password, + * salt, and iteration count we are currently initialised with. + * + * @param keySize the size of the key we want (in bits) + * @return a KeyParameter object. + */ + public override ICipherParameters GenerateDerivedMacParameters( + int keySize) + { + keySize /= 8; + + byte[] dKey = GenerateDerivedKey(MacMaterial, keySize); + + return new KeyParameter(dKey, 0, keySize); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Pkcs12ParametersGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Pkcs12ParametersGenerator.cs.meta new file mode 100644 index 000000000..808d72978 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Pkcs12ParametersGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 80f581c321bf56745a81a710ed7fc4c0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Pkcs5S1ParametersGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Pkcs5S1ParametersGenerator.cs new file mode 100644 index 000000000..9421c2be2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Pkcs5S1ParametersGenerator.cs @@ -0,0 +1,122 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /** + * Generator for Pbe derived keys and ivs as defined by Pkcs 5 V2.0 Scheme 1. + * Note this generator is limited to the size of the hash produced by the + * digest used to drive it. + *

+ * The document this implementation is based on can be found at + * + * RSA's Pkcs5 Page + *

+ */ + public class Pkcs5S1ParametersGenerator + : PbeParametersGenerator + { + private readonly IDigest digest; + + /** + * Construct a Pkcs 5 Scheme 1 Parameters generator. + * + * @param digest the digest to be used as the source of derived keys. + */ + public Pkcs5S1ParametersGenerator( + IDigest digest) + { + this.digest = digest; + } + + /** + * the derived key function, the ith hash of the mPassword and the mSalt. + */ + private byte[] GenerateDerivedKey() + { + byte[] digestBytes = new byte[digest.GetDigestSize()]; + + digest.BlockUpdate(mPassword, 0, mPassword.Length); + digest.BlockUpdate(mSalt, 0, mSalt.Length); + + digest.DoFinal(digestBytes, 0); + for (int i = 1; i < mIterationCount; i++) + { + digest.BlockUpdate(digestBytes, 0, digestBytes.Length); + digest.DoFinal(digestBytes, 0); + } + + return digestBytes; + } + + public override ICipherParameters GenerateDerivedParameters( + string algorithm, + int keySize) + { + keySize /= 8; + + if (keySize > digest.GetDigestSize()) + { + throw new ArgumentException( + "Can't Generate a derived key " + keySize + " bytes long."); + } + + byte[] dKey = GenerateDerivedKey(); + + return ParameterUtilities.CreateKeyParameter(algorithm, dKey, 0, keySize); + } + + public override ICipherParameters GenerateDerivedParameters( + string algorithm, + int keySize, + int ivSize) + { + keySize /= 8; + ivSize /= 8; + + if ((keySize + ivSize) > digest.GetDigestSize()) + { + throw new ArgumentException( + "Can't Generate a derived key " + (keySize + ivSize) + " bytes long."); + } + + byte[] dKey = GenerateDerivedKey(); + KeyParameter key = ParameterUtilities.CreateKeyParameter(algorithm, dKey, 0, keySize); + + return new ParametersWithIV(key, dKey, keySize, ivSize); + } + + /** + * Generate a key parameter for use with a MAC derived from the mPassword, + * mSalt, and iteration count we are currently initialised with. + * + * @param keySize the size of the key we want (in bits) + * @return a KeyParameter object. + * @exception ArgumentException if the key length larger than the base hash size. + */ + public override ICipherParameters GenerateDerivedMacParameters( + int keySize) + { + keySize /= 8; + + if (keySize > digest.GetDigestSize()) + { + throw new ArgumentException( + "Can't Generate a derived key " + keySize + " bytes long."); + } + + byte[] dKey = GenerateDerivedKey(); + + return new KeyParameter(dKey, 0, keySize); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Pkcs5S1ParametersGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Pkcs5S1ParametersGenerator.cs.meta new file mode 100644 index 000000000..43f73a704 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Pkcs5S1ParametersGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c288f7bdb27a2b4ebbfe5e2b74e4e30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Pkcs5S2ParametersGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Pkcs5S2ParametersGenerator.cs new file mode 100644 index 000000000..46ca27502 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Pkcs5S2ParametersGenerator.cs @@ -0,0 +1,148 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /** + * Generator for Pbe derived keys and ivs as defined by Pkcs 5 V2.0 Scheme 2. + * This generator uses a SHA-1 HMac as the calculation function. + *

+ * The document this implementation is based on can be found at + * + * RSA's Pkcs5 Page

+ */ + public class Pkcs5S2ParametersGenerator + : PbeParametersGenerator + { + private readonly IMac hMac; + private readonly byte[] state; + + /** + * construct a Pkcs5 Scheme 2 Parameters generator. + */ + public Pkcs5S2ParametersGenerator() + : this(new Sha1Digest()) + { + } + + public Pkcs5S2ParametersGenerator(IDigest digest) + { + this.hMac = new HMac(digest); + this.state = new byte[hMac.GetMacSize()]; + } + + private void F( + byte[] S, + int c, + byte[] iBuf, + byte[] outBytes, + int outOff) + { + if (c == 0) + throw new ArgumentException("iteration count must be at least 1."); + + if (S != null) + { + hMac.BlockUpdate(S, 0, S.Length); + } + + hMac.BlockUpdate(iBuf, 0, iBuf.Length); + hMac.DoFinal(state, 0); + + Array.Copy(state, 0, outBytes, outOff, state.Length); + + for (int count = 1; count < c; ++count) + { + hMac.BlockUpdate(state, 0, state.Length); + hMac.DoFinal(state, 0); + + for (int j = 0; j < state.Length; ++j) + { + outBytes[outOff + j] ^= state[j]; + } + } + } + + private byte[] GenerateDerivedKey( + int dkLen) + { + int hLen = hMac.GetMacSize(); + int l = (dkLen + hLen - 1) / hLen; + byte[] iBuf = new byte[4]; + byte[] outBytes = new byte[l * hLen]; + int outPos = 0; + + ICipherParameters param = new KeyParameter(mPassword); + + hMac.Init(param); + + for (int i = 1; i <= l; i++) + { + // Increment the value in 'iBuf' + int pos = 3; + while (++iBuf[pos] == 0) + { + --pos; + } + + F(mSalt, mIterationCount, iBuf, outBytes, outPos); + outPos += hLen; + } + + return outBytes; + } + + public override ICipherParameters GenerateDerivedParameters( + string algorithm, + int keySize) + { + keySize /= 8; + + byte[] dKey = GenerateDerivedKey(keySize); + + return ParameterUtilities.CreateKeyParameter(algorithm, dKey, 0, keySize); + } + + public override ICipherParameters GenerateDerivedParameters( + string algorithm, + int keySize, + int ivSize) + { + keySize /= 8; + ivSize /= 8; + + byte[] dKey = GenerateDerivedKey(keySize + ivSize); + KeyParameter key = ParameterUtilities.CreateKeyParameter(algorithm, dKey, 0, keySize); + + return new ParametersWithIV(key, dKey, keySize, ivSize); + } + + /** + * Generate a key parameter for use with a MAC derived from the password, + * salt, and iteration count we are currently initialised with. + * + * @param keySize the size of the key we want (in bits) + * @return a KeyParameter object. + */ + public override ICipherParameters GenerateDerivedMacParameters( + int keySize) + { + keySize /= 8; + + byte[] dKey = GenerateDerivedKey(keySize); + + return new KeyParameter(dKey, 0, keySize); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Pkcs5S2ParametersGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Pkcs5S2ParametersGenerator.cs.meta new file mode 100644 index 000000000..b1b7451fa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Pkcs5S2ParametersGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 059cb4d08d9b8cc49b1a842639d86b27 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Poly1305KeyGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Poly1305KeyGenerator.cs new file mode 100644 index 000000000..89c8ee64c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Poly1305KeyGenerator.cs @@ -0,0 +1,120 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /// + /// Generates keys for the Poly1305 MAC. + /// + /// + /// Poly1305 keys are 256 bit keys consisting of a 128 bit secret key used for the underlying block + /// cipher followed by a 128 bit {@code r} value used for the polynomial portion of the Mac.
+ /// The {@code r} value has a specific format with some bits required to be cleared, resulting in an + /// effective 106 bit key.
+ /// A separately generated 256 bit key can be modified to fit the Poly1305 key format by using the + /// {@link #clamp(byte[])} method to clear the required bits. + ///
+ /// + public class Poly1305KeyGenerator + : CipherKeyGenerator + { + private const byte R_MASK_LOW_2 = (byte)0xFC; + private const byte R_MASK_HIGH_4 = (byte)0x0F; + + /// + /// Initialises the key generator. + /// + /// + /// Poly1305 keys are always 256 bits, so the key length in the provided parameters is ignored. + /// + protected override void EngineInit(KeyGenerationParameters param) + { + // Poly1305 keys are always 256 bits + this.random = param.Random; + this.strength = 32; + } + + /// + /// Generates a 256 bit key in the format required for Poly1305 - e.g. + /// k[0] ... k[15], r[0] ... r[15] with the required bits in r cleared + /// as per . + /// + protected override byte[] EngineGenerateKey() + { + byte[] key = base.EngineGenerateKey(); + Clamp(key); + return key; + } + + /// + /// Modifies an existing 32 byte key value to comply with the requirements of the Poly1305 key by + /// clearing required bits in the r (second 16 bytes) portion of the key.
+ /// Specifically: + ///
    + ///
  • r[3], r[7], r[11], r[15] have top four bits clear (i.e., are {0, 1, . . . , 15})
  • + ///
  • r[4], r[8], r[12] have bottom two bits clear (i.e., are in {0, 4, 8, . . . , 252})
  • + ///
+ ///
+ /// a 32 byte key value k[0] ... k[15], r[0] ... r[15] + public static void Clamp(byte[] key) + { + /* + * Key is k[0] ... k[15], r[0] ... r[15] as per poly1305_aes_clamp in ref impl. + */ + if (key.Length != 32) + throw new ArgumentException("Poly1305 key must be 256 bits."); + + /* + * r[3], r[7], r[11], r[15] have top four bits clear (i.e., are {0, 1, . . . , 15}) + */ + key[3] &= R_MASK_HIGH_4; + key[7] &= R_MASK_HIGH_4; + key[11] &= R_MASK_HIGH_4; + key[15] &= R_MASK_HIGH_4; + + /* + * r[4], r[8], r[12] have bottom two bits clear (i.e., are in {0, 4, 8, . . . , 252}). + */ + key[4] &= R_MASK_LOW_2; + key[8] &= R_MASK_LOW_2; + key[12] &= R_MASK_LOW_2; + } + + /// + /// Checks a 32 byte key for compliance with the Poly1305 key requirements, e.g. + /// k[0] ... k[15], r[0] ... r[15] with the required bits in r cleared + /// as per . + /// + /// Key. + /// if the key is of the wrong length, or has invalid bits set + /// in the r portion of the key. + public static void CheckKey(byte[] key) + { + if (key.Length != 32) + throw new ArgumentException("Poly1305 key must be 256 bits."); + + CheckMask(key[3], R_MASK_HIGH_4); + CheckMask(key[7], R_MASK_HIGH_4); + CheckMask(key[11], R_MASK_HIGH_4); + CheckMask(key[15], R_MASK_HIGH_4); + + CheckMask(key[4], R_MASK_LOW_2); + CheckMask(key[8], R_MASK_LOW_2); + CheckMask(key[12], R_MASK_LOW_2); + } + + private static void CheckMask(byte b, byte mask) + { + if ((b & (~mask)) != 0) + throw new ArgumentException("Invalid format for r portion of Poly1305 key."); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Poly1305KeyGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Poly1305KeyGenerator.cs.meta new file mode 100644 index 000000000..5ab35d843 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/Poly1305KeyGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5da95a369948e924eaed42d18e10729a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/RSABlindingFactorGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/RSABlindingFactorGenerator.cs new file mode 100644 index 000000000..5be14e828 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/RSABlindingFactorGenerator.cs @@ -0,0 +1,70 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /** + * Generate a random factor suitable for use with RSA blind signatures + * as outlined in Chaum's blinding and unblinding as outlined in + * "Handbook of Applied Cryptography", page 475. + */ + public class RsaBlindingFactorGenerator + { + private RsaKeyParameters key; + private SecureRandom random; + + /** + * Initialise the factor generator + * + * @param param the necessary RSA key parameters. + */ + public void Init(ICipherParameters param) + { + if (param is ParametersWithRandom rParam) + { + key = (RsaKeyParameters)rParam.Parameters; + random = rParam.Random; + } + else + { + key = (RsaKeyParameters)param; + random = CryptoServicesRegistrar.GetSecureRandom(); + } + + if (key.IsPrivate) + throw new ArgumentException("generator requires RSA public key"); + } + + /** + * Generate a suitable blind factor for the public key the generator was initialised with. + * + * @return a random blind factor + */ + public BigInteger GenerateBlindingFactor() + { + if (key == null) + throw new InvalidOperationException("generator not initialised"); + + BigInteger m = key.Modulus; + int length = m.BitLength - 1; // must be less than m.BitLength + BigInteger factor; + BigInteger gcd; + + do + { + factor = new BigInteger(length, random); + gcd = factor.Gcd(m); + } + while (factor.SignValue == 0 || factor.Equals(BigInteger.One) || !gcd.Equals(BigInteger.One)); + + return factor; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/RSABlindingFactorGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/RSABlindingFactorGenerator.cs.meta new file mode 100644 index 000000000..6e491f7d2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/RSABlindingFactorGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf74dd7003cd2824f9339e01e58b2e7f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/RsaKeyPairGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/RsaKeyPairGenerator.cs new file mode 100644 index 000000000..645ebe587 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/RsaKeyPairGenerator.cs @@ -0,0 +1,167 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /** + * an RSA key pair generator. + */ + public class RsaKeyPairGenerator + : IAsymmetricCipherKeyPairGenerator + { + private static readonly int[] SPECIAL_E_VALUES = new int[]{ 3, 5, 17, 257, 65537 }; + private static readonly int SPECIAL_E_HIGHEST = SPECIAL_E_VALUES[SPECIAL_E_VALUES.Length - 1]; + private static readonly int SPECIAL_E_BITS = BigInteger.ValueOf(SPECIAL_E_HIGHEST).BitLength; + + protected static readonly BigInteger One = BigInteger.One; + protected static readonly BigInteger DefaultPublicExponent = BigInteger.ValueOf(0x10001); + protected const int DefaultTests = 100; + + protected RsaKeyGenerationParameters parameters; + + public virtual void Init( + KeyGenerationParameters parameters) + { + if (parameters is RsaKeyGenerationParameters) + { + this.parameters = (RsaKeyGenerationParameters)parameters; + } + else + { + this.parameters = new RsaKeyGenerationParameters( + DefaultPublicExponent, parameters.Random, parameters.Strength, DefaultTests); + } + } + + public virtual AsymmetricCipherKeyPair GenerateKeyPair() + { + for (;;) + { + // + // p and q values should have a length of half the strength in bits + // + int strength = parameters.Strength; + int pBitlength = (strength + 1) / 2; + int qBitlength = strength - pBitlength; + int mindiffbits = strength / 3; + int minWeight = strength >> 2; + + BigInteger e = parameters.PublicExponent; + + // TODO Consider generating safe primes for p, q (see DHParametersHelper.generateSafePrimes) + // (then p-1 and q-1 will not consist of only small factors - see "Pollard's algorithm") + + BigInteger p = ChooseRandomPrime(pBitlength, e); + BigInteger q, n; + + // + // generate a modulus of the required length + // + for (;;) + { + q = ChooseRandomPrime(qBitlength, e); + + // p and q should not be too close together (or equal!) + BigInteger diff = q.Subtract(p).Abs(); + if (diff.BitLength < mindiffbits) + continue; + + // + // calculate the modulus + // + n = p.Multiply(q); + + if (n.BitLength != strength) + { + // + // if we get here our primes aren't big enough, make the largest + // of the two p and try again + // + p = p.Max(q); + continue; + } + + /* + * Require a minimum weight of the NAF representation, since low-weight composites may + * be weak against a version of the number-field-sieve for factoring. + * + * See "The number field sieve for integers of low weight", Oliver Schirokauer. + */ + if (WNafUtilities.GetNafWeight(n) < minWeight) + { + p = ChooseRandomPrime(pBitlength, e); + continue; + } + + break; + } + + if (p.CompareTo(q) < 0) + { + BigInteger tmp = p; + p = q; + q = tmp; + } + + BigInteger pSub1 = p.Subtract(One); + BigInteger qSub1 = q.Subtract(One); + //BigInteger phi = pSub1.Multiply(qSub1); + BigInteger gcd = pSub1.Gcd(qSub1); + BigInteger lcm = pSub1.Divide(gcd).Multiply(qSub1); + + // + // calculate the private exponent + // + BigInteger d = e.ModInverse(lcm); + + if (d.BitLength <= qBitlength) + continue; + + // + // calculate the CRT factors + // + BigInteger dP = d.Remainder(pSub1); + BigInteger dQ = d.Remainder(qSub1); + BigInteger qInv = BigIntegers.ModOddInverse(p, q); + + return new AsymmetricCipherKeyPair( + new RsaKeyParameters(false, n, e), + new RsaPrivateCrtKeyParameters(n, e, d, p, q, dP, dQ, qInv)); + } + } + + /// Choose a random prime value for use with RSA + /// the bit-length of the returned prime + /// the RSA public exponent + /// a prime p, with (p-1) relatively prime to e + protected virtual BigInteger ChooseRandomPrime(int bitlength, BigInteger e) + { + bool eIsKnownOddPrime = (e.BitLength <= SPECIAL_E_BITS) && Arrays.Contains(SPECIAL_E_VALUES, e.IntValue); + + for (;;) + { + BigInteger p = new BigInteger(bitlength, 1, parameters.Random); + + if (p.Mod(e).Equals(One)) + continue; + + if (!p.IsProbablePrime(parameters.Certainty, true)) + continue; + + if (!eIsKnownOddPrime && !e.Gcd(p.Subtract(One)).Equals(One)) + continue; + + return p; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/RsaKeyPairGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/RsaKeyPairGenerator.cs.meta new file mode 100644 index 000000000..84cef2b6a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/RsaKeyPairGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d11ab5e345ab24647ab0356dc7f92e64 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/SCrypt.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/SCrypt.cs new file mode 100644 index 000000000..5f556115e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/SCrypt.cs @@ -0,0 +1,276 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + /// Implementation of the scrypt a password-based key derivation function. + /// + /// Scrypt was created by Colin Percival and is specified in + /// draft-josefsson-scrypt-kd. + /// + public class SCrypt + { + /// Generate a key using the scrypt key derivation function. + /// the bytes of the pass phrase. + /// the salt to use for this invocation. + /// CPU/Memory cost parameter. Must be larger than 1, a power of 2 and less than + /// 2^(128 * r / 8). + /// the block size, must be >= 1. + /// Parallelization parameter. Must be a positive integer less than or equal to + /// int.MaxValue / (128 * r * 8). + /// the length of the key to generate. + /// the generated key. + public static byte[] Generate(byte[] P, byte[] S, int N, int r, int p, int dkLen) + { + if (P == null) + throw new ArgumentNullException("Passphrase P must be provided."); + if (S == null) + throw new ArgumentNullException("Salt S must be provided."); + if (N <= 1 || !IsPowerOf2(N)) + throw new ArgumentException("Cost parameter N must be > 1 and a power of 2."); + // Only value of r that cost (as an int) could be exceeded for is 1 + if (r == 1 && N >= 65536) + throw new ArgumentException("Cost parameter N must be > 1 and < 65536."); + if (r < 1) + throw new ArgumentException("Block size r must be >= 1."); + int maxParallel = int.MaxValue / (128 * r * 8); + if (p < 1 || p > maxParallel) + { + throw new ArgumentException("Parallelisation parameter p must be >= 1 and <= " + maxParallel + + " (based on block size r of " + r + ")"); + } + if (dkLen < 1) + throw new ArgumentException("Generated key length dkLen must be >= 1."); + + return MFcrypt(P, S, N, r, p, dkLen); + } + + private static byte[] MFcrypt(byte[] P, byte[] S, int N, int r, int p, int dkLen) + { + int MFLenBytes = r * 128; + byte[] bytes = SingleIterationPBKDF2(P, S, p * MFLenBytes); + + uint[] B = null; + + try + { + int BLen = bytes.Length >> 2; + B = new uint[BLen]; + + Pack.LE_To_UInt32(bytes, 0, B); + + /* + * Chunk memory allocations; We choose 'd' so that there will be 2**d chunks, each not + * larger than 32KiB, except that the minimum chunk size is 2 * r * 32. + */ + int d = 0, total = N * r; + while ((N - d) > 2 && total > (1 << 10)) + { + ++d; + total >>= 1; + } + + int MFLenWords = MFLenBytes >> 2; + for (int BOff = 0; BOff < BLen; BOff += MFLenWords) + { + // TODO These can be done in parallel threads + SMix(B, BOff, N, d, r); + } + + Pack.UInt32_To_LE(B, bytes, 0); + + return SingleIterationPBKDF2(P, bytes, dkLen); + } + finally + { + ClearAll(bytes, B); + } + } + + private static byte[] SingleIterationPBKDF2(byte[] P, byte[] S, int dkLen) + { + PbeParametersGenerator pGen = new Pkcs5S2ParametersGenerator(new Sha256Digest()); + pGen.Init(P, S, 1); + KeyParameter key = (KeyParameter)pGen.GenerateDerivedMacParameters(dkLen * 8); + return key.GetKey(); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void SMix(uint[] B, int BOff, int N, int d, int r) + { + int powN = Integers.NumberOfTrailingZeros(N); + int blocksPerChunk = N >> d; + int chunkCount = 1 << d, chunkMask = blocksPerChunk - 1, chunkPow = powN - d; + + int BCount = r * 32; + + uint[] blockY = new uint[BCount]; + + uint[][] VV = new uint[chunkCount][]; + + try + { + var X = B.AsSpan(BOff, BCount); + + for (int c = 0; c < chunkCount; ++c) + { + uint[] V = new uint[blocksPerChunk * BCount]; + VV[c] = V; + + Nat.Copy(BCount, X, V); + int off = 0; + for (int i = 1; i < blocksPerChunk; ++i) + { + BlockMix(V.AsSpan(off, BCount), V.AsSpan(off + BCount)); + off += BCount; + } + BlockMix(V.AsSpan()[^BCount..], X); + } + + uint mask = (uint)N - 1; + for (int i = 0; i < N; ++i) + { + int j = (int)(X[BCount - 16] & mask); + uint[] V = VV[j >> chunkPow]; + int VOff = (j & chunkMask) * BCount; + Nat.Xor(BCount, V.AsSpan(VOff), X, blockY); + BlockMix(blockY, X); + } + } + finally + { + ClearAll(VV); + Clear(blockY); + } + } + + private static void BlockMix(Span B, Span Y) + { + int BCount = B.Length; + int half = BCount >> 1; + var y1 = B[^16..]; + + for (int pos = 0; pos < BCount; pos += 32) + { + var b0 = B[pos..]; + var y0 = Y[(pos >> 1)..]; + Nat512.Xor(y1, b0, y0); + Salsa20Engine.SalsaCore(8, y0, y0); + + var b1 = b0[16..]; + y1 = y0[half..]; + Nat512.Xor(y0, b1, y1); + Salsa20Engine.SalsaCore(8, y1, y1); + } + } +#else + private static void SMix(uint[] B, int BOff, int N, int d, int r) + { + int powN = Integers.NumberOfTrailingZeros(N); + int blocksPerChunk = N >> d; + int chunkCount = 1 << d, chunkMask = blocksPerChunk - 1, chunkPow = powN - d; + + int BCount = r * 32; + + uint[] blockX1 = new uint[16]; + uint[] blockY = new uint[BCount]; + + uint[] X = new uint[BCount]; + uint[][] VV = new uint[chunkCount][]; + + try + { + Array.Copy(B, BOff, X, 0, BCount); + + for (int c = 0; c < chunkCount; ++c) + { + uint[] V = new uint[blocksPerChunk * BCount]; + VV[c] = V; + + int off = 0; + for (int i = 0; i < blocksPerChunk; i += 2) + { + Array.Copy(X, 0, V, off, BCount); + off += BCount; + BlockMix(X, blockX1, blockY, r); + Array.Copy(blockY, 0, V, off, BCount); + off += BCount; + BlockMix(blockY, blockX1, X, r); + } + } + + uint mask = (uint)N - 1; + for (int i = 0; i < N; ++i) + { + int j = (int)(X[BCount - 16] & mask); + uint[] V = VV[j >> chunkPow]; + int VOff = (j & chunkMask) * BCount; + Nat.Xor(BCount, V, VOff, X, 0, blockY, 0); + + BlockMix(blockY, blockX1, X, r); + } + + Array.Copy(X, 0, B, BOff, BCount); + } + finally + { + ClearAll(VV); + ClearAll(X, blockX1, blockY); + } + } + + private static void BlockMix(uint[] B, uint[] X1, uint[] Y, int r) + { + Array.Copy(B, B.Length - 16, X1, 0, 16); + + int BOff = 0, YOff = 0, halfLen = B.Length >> 1; + + for (int i = 2 * r; i > 0; --i) + { + Nat512.XorTo(B, BOff, X1, 0); + + Salsa20Engine.SalsaCore(8, X1, X1); + Array.Copy(X1, 0, Y, YOff, 16); + + YOff = halfLen + BOff - YOff; + BOff += 16; + } + } +#endif + + private static void Clear(Array array) + { + if (array != null) + { + Array.Clear(array, 0, array.Length); + } + } + + private static void ClearAll(params Array[] arrays) + { + foreach (Array array in arrays) + { + Clear(array); + } + } + + // note: we know X is non-zero + private static bool IsPowerOf2(int x) + { + Debug.Assert(x != 0); + + return (x & (x - 1)) == 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/SCrypt.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/SCrypt.cs.meta new file mode 100644 index 000000000..9444d8e89 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/SCrypt.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c8823cf014ab23d449745f5379eb32e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/X25519KeyPairGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/X25519KeyPairGenerator.cs new file mode 100644 index 000000000..8dc6cc993 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/X25519KeyPairGenerator.cs @@ -0,0 +1,29 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + public class X25519KeyPairGenerator + : IAsymmetricCipherKeyPairGenerator + { + private SecureRandom random; + + public virtual void Init(KeyGenerationParameters parameters) + { + this.random = parameters.Random; + } + + public virtual AsymmetricCipherKeyPair GenerateKeyPair() + { + X25519PrivateKeyParameters privateKey = new X25519PrivateKeyParameters(random); + X25519PublicKeyParameters publicKey = privateKey.GeneratePublicKey(); + return new AsymmetricCipherKeyPair(publicKey, privateKey); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/X25519KeyPairGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/X25519KeyPairGenerator.cs.meta new file mode 100644 index 000000000..42ec38da1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/X25519KeyPairGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c6529992521da3f47a1b632f2b203fb1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/X448KeyPairGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/X448KeyPairGenerator.cs new file mode 100644 index 000000000..d2f9b091c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/X448KeyPairGenerator.cs @@ -0,0 +1,29 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators +{ + public class X448KeyPairGenerator + : IAsymmetricCipherKeyPairGenerator + { + private SecureRandom random; + + public virtual void Init(KeyGenerationParameters parameters) + { + this.random = parameters.Random; + } + + public virtual AsymmetricCipherKeyPair GenerateKeyPair() + { + X448PrivateKeyParameters privateKey = new X448PrivateKeyParameters(random); + X448PublicKeyParameters publicKey = privateKey.GeneratePublicKey(); + return new AsymmetricCipherKeyPair(publicKey, privateKey); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/X448KeyPairGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/X448KeyPairGenerator.cs.meta new file mode 100644 index 000000000..fb9f90e44 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/generators/X448KeyPairGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a6f36d86b2007d4ca27dea499f0770a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io.meta new file mode 100644 index 000000000..a861b3eae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0d16b3ea73dbb9648b5c61af890ff3fc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/CipherStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/CipherStream.cs new file mode 100644 index 000000000..faa5f4c78 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/CipherStream.cs @@ -0,0 +1,329 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +#if NETCOREAPP1_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER || UNITY_2021_2_OR_NEWER +using System.Buffers; +#endif +using System.Diagnostics; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO +{ + public sealed class CipherStream + : Stream + { + private readonly Stream m_stream; + private readonly IBufferedCipher m_readCipher, m_writeCipher; + + private byte[] m_readBuf; + private int m_readBufPos; + private bool m_readEnded; + + public CipherStream(Stream stream, IBufferedCipher readCipher, IBufferedCipher writeCipher) + { + m_stream = stream; + + if (readCipher != null) + { + m_readCipher = readCipher; + m_readBuf = null; + } + + if (writeCipher != null) + { + m_writeCipher = writeCipher; + } + } + + public IBufferedCipher ReadCipher => m_readCipher; + + public IBufferedCipher WriteCipher => m_writeCipher; + + public override bool CanRead + { + get { return m_stream.CanRead; } + } + + public sealed override bool CanSeek + { + get { return false; } + } + + public override bool CanWrite + { + get { return m_stream.CanWrite; } + } + +#if NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER || (UNITY_2021_2_OR_NEWER && (NET_STANDARD_2_0 || NET_STANDARD_2_1)) + public override void CopyTo(Stream destination, int bufferSize) + { + if (m_readCipher == null) + { + m_stream.CopyTo(destination, bufferSize); + } + else + { + base.CopyTo(destination, bufferSize); + } + } +#endif + + public override void Flush() + { + m_stream.Flush(); + } + + public sealed override long Length + { + get { throw new NotSupportedException(); } + } + + public sealed override long Position + { + get { throw new NotSupportedException(); } + set { throw new NotSupportedException(); } + } + + public override int Read(byte[] buffer, int offset, int count) + { + if (m_readCipher == null) + return m_stream.Read(buffer, offset, count); + + Streams.ValidateBufferArguments(buffer, offset, count); + + int num = 0; + while (num < count) + { + if (m_readBuf == null || m_readBufPos >= m_readBuf.Length) + { + if (!FillInBuf()) + break; + } + + int numToCopy = System.Math.Min(count - num, m_readBuf.Length - m_readBufPos); + Array.Copy(m_readBuf, m_readBufPos, buffer, offset + num, numToCopy); + m_readBufPos += numToCopy; + num += numToCopy; + } + + return num; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int Read(Span buffer) + { + if (buffer.IsEmpty) + return 0; + + if (m_readCipher == null) + return m_stream.Read(buffer); + + int num = 0; + while (num < buffer.Length) + { + if (m_readBuf == null || m_readBufPos >= m_readBuf.Length) + { + if (!FillInBuf()) + break; + } + + int numToCopy = System.Math.Min(buffer.Length - num, m_readBuf.Length - m_readBufPos); + m_readBuf.AsSpan(m_readBufPos, numToCopy).CopyTo(buffer[num..]); + + m_readBufPos += numToCopy; + num += numToCopy; + } + + return num; + } +#endif + + public override int ReadByte() + { + if (m_readCipher == null) + return m_stream.ReadByte(); + + if (m_readBuf == null || m_readBufPos >= m_readBuf.Length) + { + if (!FillInBuf()) + return -1; + } + + return m_readBuf[m_readBufPos++]; + } + + public sealed override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException(); + } + + public sealed override void SetLength(long length) + { + throw new NotSupportedException(); + } + + public override void Write(byte[] buffer, int offset, int count) + { + if (m_writeCipher == null) + { + m_stream.Write(buffer, offset, count); + return; + } + + Streams.ValidateBufferArguments(buffer, offset, count); + + if (count > 0) + { +#if NETCOREAPP1_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER || UNITY_2021_2_OR_NEWER + int outputSize = m_writeCipher.GetUpdateOutputSize(count); + byte[] output = outputSize > 0 ? ArrayPool.Shared.Rent(outputSize) : null; + try + { + int length = m_writeCipher.ProcessBytes(buffer, offset, count, output, 0); + if (length > 0) + { + m_stream.Write(output, 0, length); + } + } + finally + { + if (output != null) + { + ArrayPool.Shared.Return(output); + } + } +#else + byte[] output = m_writeCipher.ProcessBytes(buffer, offset, count); + if (output != null) + { + m_stream.Write(output, 0, output.Length); + } +#endif + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) + { + if (buffer.IsEmpty) + return; + + if (m_writeCipher == null) + { + m_stream.Write(buffer); + return; + } + + int outputSize = m_writeCipher.GetUpdateOutputSize(buffer.Length); + byte[] output = outputSize > 0 ? ArrayPool.Shared.Rent(outputSize) : null; + try + { + int length = m_writeCipher.ProcessBytes(buffer, Spans.FromNullable(output)); + if (length > 0) + { + m_stream.Write(output[..length]); + } + } + finally + { + if (output != null) + { + ArrayPool.Shared.Return(output); + } + } + } +#endif + + public override void WriteByte(byte value) + { + if (m_writeCipher == null) + { + m_stream.WriteByte(value); + return; + } + + byte[] data = m_writeCipher.ProcessByte(value); + if (data != null) + { + m_stream.Write(data, 0, data.Length); + } + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (m_writeCipher != null) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int outputSize = m_writeCipher.GetOutputSize(0); + Span output = outputSize <= 256 + ? stackalloc byte[outputSize] + : new byte[outputSize]; + int len = m_writeCipher.DoFinal(output); + m_stream.Write(output[..len]); +#else + byte[] data = m_writeCipher.DoFinal(); + m_stream.Write(data, 0, data.Length); +#endif + } + m_stream.Dispose(); + } + base.Dispose(disposing); + } + + private bool FillInBuf() + { + if (m_readEnded) + return false; + + m_readBufPos = 0; + + do + { + m_readBuf = ReadAndProcessBlock(); + } + while (!m_readEnded && m_readBuf == null); + + return m_readBuf != null; + } + + private byte[] ReadAndProcessBlock() + { + int blockSize = m_readCipher.GetBlockSize(); + int readSize = blockSize == 0 ? 256 : blockSize; + + byte[] block = new byte[readSize]; + int numRead = 0; + do + { + int count = m_stream.Read(block, numRead, block.Length - numRead); + if (count < 1) + { + m_readEnded = true; + break; + } + numRead += count; + } + while (numRead < block.Length); + + Debug.Assert(m_readEnded || numRead == block.Length); + + byte[] bytes = m_readEnded + ? m_readCipher.DoFinal(block, 0, numRead) + : m_readCipher.ProcessBytes(block); + + if (bytes != null && bytes.Length == 0) + { + bytes = null; + } + + return bytes; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/CipherStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/CipherStream.cs.meta new file mode 100644 index 000000000..e99f9f7c9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/CipherStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f14ba4986c39a4548a143fe9ea9858a8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/DigestSink.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/DigestSink.cs new file mode 100644 index 000000000..4a325e7aa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/DigestSink.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO +{ + public sealed class DigestSink + : BaseOutputStream + { + private readonly IDigest m_digest; + + public DigestSink(IDigest digest) + { + m_digest = digest; + } + + public IDigest Digest => m_digest; + + public override void Write(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + + if (count > 0) + { + m_digest.BlockUpdate(buffer, offset, count); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) + { + if (!buffer.IsEmpty) + { + m_digest.BlockUpdate(buffer); + } + } +#endif + + public override void WriteByte(byte value) + { + m_digest.Update(value); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/DigestSink.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/DigestSink.cs.meta new file mode 100644 index 000000000..a0e844cb6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/DigestSink.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19c2c27df57824948a6439d7aff3cdaf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/DigestStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/DigestStream.cs new file mode 100644 index 000000000..c69798dc7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/DigestStream.cs @@ -0,0 +1,164 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO +{ + public sealed class DigestStream + : Stream + { + private readonly Stream m_stream; + private readonly IDigest m_readDigest; + private readonly IDigest m_writeDigest; + + public DigestStream(Stream stream, IDigest readDigest, IDigest writeDigest) + { + m_stream = stream; + m_readDigest = readDigest; + m_writeDigest = writeDigest; + } + + public IDigest ReadDigest => m_readDigest; + + public IDigest WriteDigest => m_writeDigest; + + public override bool CanRead + { + get { return m_stream.CanRead; } + } + + public sealed override bool CanSeek + { + get { return false; } + } + + public override bool CanWrite + { + get { return m_stream.CanWrite; } + } + +#if NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER || (UNITY_2021_2_OR_NEWER && (NET_STANDARD_2_0 || NET_STANDARD_2_1)) + public override void CopyTo(Stream destination, int bufferSize) + { + if (m_readDigest == null) + { + m_stream.CopyTo(destination, bufferSize); + } + else + { + base.CopyTo(destination, bufferSize); + } + } +#endif + + public override void Flush() + { + m_stream.Flush(); + } + + public sealed override long Length + { + get { throw new NotSupportedException(); } + } + + public sealed override long Position + { + get { throw new NotSupportedException(); } + set { throw new NotSupportedException(); } + } + + public override int Read(byte[] buffer, int offset, int count) + { + int n = m_stream.Read(buffer, offset, count); + + if (m_readDigest != null && n > 0) + { + m_readDigest.BlockUpdate(buffer, offset, n); + } + + return n; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int Read(Span buffer) + { + int n = m_stream.Read(buffer); + + if (m_readDigest != null && n > 0) + { + m_readDigest.BlockUpdate(buffer[..n]); + } + + return n; + } +#endif + + public override int ReadByte() + { + int b = m_stream.ReadByte(); + + if (m_readDigest != null && b >= 0) + { + m_readDigest.Update((byte)b); + } + + return b; + } + + public sealed override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException(); + } + + public sealed override void SetLength(long length) + { + throw new NotSupportedException(); + } + + public override void Write(byte[] buffer, int offset, int count) + { + m_stream.Write(buffer, offset, count); + + if (m_writeDigest != null && count > 0) + { + m_writeDigest.BlockUpdate(buffer, offset, count); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) + { + m_stream.Write(buffer); + + if (m_writeDigest != null && !buffer.IsEmpty) + { + m_writeDigest.BlockUpdate(buffer); + } + } +#endif + + public override void WriteByte(byte value) + { + m_stream.WriteByte(value); + + if (m_writeDigest != null) + { + m_writeDigest.Update(value); + } + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + m_stream.Dispose(); + } + base.Dispose(disposing); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/DigestStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/DigestStream.cs.meta new file mode 100644 index 000000000..858722a2d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/DigestStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 97329c855262a8c4c96ebe6fb56f4ffb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/MacSink.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/MacSink.cs new file mode 100644 index 000000000..c803e0e1c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/MacSink.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO +{ + public sealed class MacSink + : BaseOutputStream + { + private readonly IMac m_mac; + + public MacSink(IMac mac) + { + m_mac = mac; + } + + public IMac Mac => m_mac; + + public override void Write(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + + if (count > 0) + { + m_mac.BlockUpdate(buffer, offset, count); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) + { + if (!buffer.IsEmpty) + { + m_mac.BlockUpdate(buffer); + } + } +#endif + + public override void WriteByte(byte value) + { + m_mac.Update(value); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/MacSink.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/MacSink.cs.meta new file mode 100644 index 000000000..a30fc66f2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/MacSink.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0411a8b05f7e5e3419bd1ab8a1630319 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/MacStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/MacStream.cs new file mode 100644 index 000000000..e15a1094d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/MacStream.cs @@ -0,0 +1,164 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO +{ + public sealed class MacStream + : Stream + { + private readonly Stream m_stream; + private readonly IMac m_readMac; + private readonly IMac m_writeMac; + + public MacStream(Stream stream, IMac readMac, IMac writeMac) + { + m_stream = stream; + m_readMac = readMac; + m_writeMac = writeMac; + } + + public IMac ReadMac => m_readMac; + + public IMac WriteMac => m_writeMac; + + public override bool CanRead + { + get { return m_stream.CanRead; } + } + + public sealed override bool CanSeek + { + get { return false; } + } + + public override bool CanWrite + { + get { return m_stream.CanWrite; } + } + +#if NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER || (UNITY_2021_2_OR_NEWER && (NET_STANDARD_2_0 || NET_STANDARD_2_1)) + public override void CopyTo(Stream destination, int bufferSize) + { + if (m_readMac == null) + { + m_stream.CopyTo(destination, bufferSize); + } + else + { + base.CopyTo(destination, bufferSize); + } + } +#endif + + public override void Flush() + { + m_stream.Flush(); + } + + public sealed override long Length + { + get { throw new NotSupportedException(); } + } + + public sealed override long Position + { + get { throw new NotSupportedException(); } + set { throw new NotSupportedException(); } + } + + public override int Read(byte[] buffer, int offset, int count) + { + int n = m_stream.Read(buffer, offset, count); + + if (m_readMac != null && n > 0) + { + m_readMac.BlockUpdate(buffer, offset, n); + } + + return n; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int Read(Span buffer) + { + int n = m_stream.Read(buffer); + + if (m_readMac != null && n > 0) + { + m_readMac.BlockUpdate(buffer[..n]); + } + + return n; + } +#endif + + public override int ReadByte() + { + int b = m_stream.ReadByte(); + + if (m_readMac != null && b >= 0) + { + m_readMac.Update((byte)b); + } + + return b; + } + + public sealed override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException(); + } + + public sealed override void SetLength(long length) + { + throw new NotSupportedException(); + } + + public override void Write(byte[] buffer, int offset, int count) + { + m_stream.Write(buffer, offset, count); + + if (m_writeMac != null && count > 0) + { + m_writeMac.BlockUpdate(buffer, offset, count); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) + { + m_stream.Write(buffer); + + if (m_writeMac != null && !buffer.IsEmpty) + { + m_writeMac.BlockUpdate(buffer); + } + } +#endif + + public override void WriteByte(byte value) + { + m_stream.WriteByte(value); + + if (m_writeMac != null) + { + m_writeMac.Update(value); + } + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + m_stream.Dispose(); + } + base.Dispose(disposing); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/MacStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/MacStream.cs.meta new file mode 100644 index 000000000..9ac7a7b94 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/MacStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 89f7b5360e5fde147bf149b2788714da +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/SignerSink.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/SignerSink.cs new file mode 100644 index 000000000..0d43fcf93 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/SignerSink.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO +{ + public sealed class SignerSink + : BaseOutputStream + { + private readonly ISigner m_signer; + + public SignerSink(ISigner signer) + { + m_signer = signer; + } + + public ISigner Signer => m_signer; + + public override void Write(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + + if (count > 0) + { + m_signer.BlockUpdate(buffer, offset, count); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) + { + if (!buffer.IsEmpty) + { + m_signer.BlockUpdate(buffer); + } + } +#endif + + public override void WriteByte(byte value) + { + m_signer.Update(value); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/SignerSink.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/SignerSink.cs.meta new file mode 100644 index 000000000..3f3532984 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/SignerSink.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 23cf4ec0649ecd8418e9723ca65f3bdd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/SignerStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/SignerStream.cs new file mode 100644 index 000000000..a75fb69db --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/SignerStream.cs @@ -0,0 +1,164 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO +{ + public sealed class SignerStream + : Stream + { + private readonly Stream stream; + private readonly ISigner inSigner; + private readonly ISigner outSigner; + + public SignerStream(Stream stream, ISigner readSigner, ISigner writeSigner) + { + this.stream = stream; + this.inSigner = readSigner; + this.outSigner = writeSigner; + } + + public ISigner ReadSigner => inSigner; + + public ISigner WriteSigner => outSigner; + + public override bool CanRead + { + get { return stream.CanRead; } + } + + public sealed override bool CanSeek + { + get { return false; } + } + + public override bool CanWrite + { + get { return stream.CanWrite; } + } + +#if NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER || (UNITY_2021_2_OR_NEWER && (NET_STANDARD_2_0 || NET_STANDARD_2_1)) + public override void CopyTo(Stream destination, int bufferSize) + { + if (inSigner == null) + { + stream.CopyTo(destination, bufferSize); + } + else + { + base.CopyTo(destination, bufferSize); + } + } +#endif + + public override void Flush() + { + stream.Flush(); + } + + public sealed override long Length + { + get { throw new NotSupportedException(); } + } + + public sealed override long Position + { + get { throw new NotSupportedException(); } + set { throw new NotSupportedException(); } + } + + public override int Read(byte[] buffer, int offset, int count) + { + int n = stream.Read(buffer, offset, count); + + if (inSigner != null && n > 0) + { + inSigner.BlockUpdate(buffer, offset, n); + } + + return n; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int Read(Span buffer) + { + int n = stream.Read(buffer); + + if (inSigner != null && n > 0) + { + inSigner.BlockUpdate(buffer[..n]); + } + + return n; + } +#endif + + public override int ReadByte() + { + int b = stream.ReadByte(); + + if (inSigner != null && b >= 0) + { + inSigner.Update((byte)b); + } + + return b; + } + + public sealed override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException(); + } + + public sealed override void SetLength(long length) + { + throw new NotSupportedException(); + } + + public override void Write(byte[] buffer, int offset, int count) + { + stream.Write(buffer, offset, count); + + if (outSigner != null && count > 0) + { + outSigner.BlockUpdate(buffer, offset, count); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) + { + stream.Write(buffer); + + if (outSigner != null && !buffer.IsEmpty) + { + outSigner.BlockUpdate(buffer); + } + } +#endif + + public override void WriteByte(byte value) + { + stream.WriteByte(value); + + if (outSigner != null) + { + outSigner.Update(value); + } + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + stream.Dispose(); + } + base.Dispose(disposing); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/SignerStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/SignerStream.cs.meta new file mode 100644 index 000000000..71b5e1af0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/io/SignerStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e402c2b637c2e546a7ac4336b548998 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs.meta new file mode 100644 index 000000000..f3ebb3bc0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3d929d360f5bba5429128c0fce7c78e9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/CMac.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/CMac.cs new file mode 100644 index 000000000..4607a349e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/CMac.cs @@ -0,0 +1,321 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Paddings; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs +{ + /** + * CMAC - as specified at www.nuee.nagoya-u.ac.jp/labs/tiwata/omac/omac.html + *

+ * CMAC is analogous to OMAC1 - see also en.wikipedia.org/wiki/CMAC + *

+ * CMAC is a NIST recomendation - see + * csrc.nist.gov/CryptoToolkit/modes/800-38_Series_Publications/SP800-38B.pdf + *

+ * CMAC/OMAC1 is a blockcipher-based message authentication code designed and + * analyzed by Tetsu Iwata and Kaoru Kurosawa. + *

+ * CMAC/OMAC1 is a simple variant of the CBC MAC (Cipher Block Chaining Message + * Authentication Code). OMAC stands for One-Key CBC MAC. + *

+ * It supports 128- or 64-bits block ciphers, with any key size, and returns + * a MAC with dimension less or equal to the block size of the underlying + * cipher. + *

+ */ + public class CMac + : IMac + { + private const byte CONSTANT_128 = (byte)0x87; + private const byte CONSTANT_64 = (byte)0x1b; + + private byte[] ZEROES; + + private byte[] mac; + + private byte[] buf; + private int bufOff; + private IBlockCipherMode m_cipherMode; + + private int macSize; + + private byte[] L, Lu, Lu2; + + /** + * create a standard MAC based on a CBC block cipher (64 or 128 bit block). + * This will produce an authentication code the length of the block size + * of the cipher. + * + * @param cipher the cipher to be used as the basis of the MAC generation. + */ + public CMac( + IBlockCipher cipher) + : this(cipher, cipher.GetBlockSize() * 8) + { + } + + /** + * create a standard MAC based on a block cipher with the size of the + * MAC been given in bits. + *

+ * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + * or 16 bits if being used as a data authenticator (FIPS Publication 113), + * and in general should be less than the size of the block cipher as it reduces + * the chance of an exhaustive attack (see Handbook of Applied Cryptography). + * + * @param cipher the cipher to be used as the basis of the MAC generation. + * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8 and @lt;= 128. + */ + public CMac( + IBlockCipher cipher, + int macSizeInBits) + { + if ((macSizeInBits % 8) != 0) + throw new ArgumentException("MAC size must be multiple of 8"); + + if (macSizeInBits > (cipher.GetBlockSize() * 8)) + { + throw new ArgumentException( + "MAC size must be less or equal to " + + (cipher.GetBlockSize() * 8)); + } + + if (cipher.GetBlockSize() != 8 && cipher.GetBlockSize() != 16) + { + throw new ArgumentException( + "Block size must be either 64 or 128 bits"); + } + + m_cipherMode = new CbcBlockCipher(cipher); + this.macSize = macSizeInBits / 8; + + mac = new byte[cipher.GetBlockSize()]; + + buf = new byte[cipher.GetBlockSize()]; + + ZEROES = new byte[cipher.GetBlockSize()]; + + bufOff = 0; + } + + public string AlgorithmName + { + get { return m_cipherMode.AlgorithmName; } + } + + private static int ShiftLeft(byte[] block, byte[] output) + { + int i = block.Length; + uint bit = 0; + while (--i >= 0) + { + uint b = block[i]; + output[i] = (byte)((b << 1) | bit); + bit = (b >> 7) & 1; + } + return (int)bit; + } + + private static byte[] DoubleLu(byte[] input) + { + byte[] ret = new byte[input.Length]; + int carry = ShiftLeft(input, ret); + int xor = input.Length == 16 ? CONSTANT_128 : CONSTANT_64; + + /* + * NOTE: This construction is an attempt at a constant-time implementation. + */ + ret[input.Length - 1] ^= (byte)(xor >> ((1 - carry) << 3)); + + return ret; + } + + public void Init(ICipherParameters parameters) + { + if (parameters is KeyParameter) + { + m_cipherMode.Init(true, parameters); + + //initializes the L, Lu, Lu2 numbers + L = new byte[ZEROES.Length]; + m_cipherMode.ProcessBlock(ZEROES, 0, L, 0); + Lu = DoubleLu(L); + Lu2 = DoubleLu(Lu); + } + else if (parameters != null) + { + // CMAC mode does not permit IV to underlying CBC mode + throw new ArgumentException("CMac mode only permits key to be set.", "parameters"); + } + + Reset(); + } + + public int GetMacSize() + { + return macSize; + } + + public void Update(byte input) + { + if (bufOff == buf.Length) + { + m_cipherMode.ProcessBlock(buf, 0, mac, 0); + bufOff = 0; + } + + buf[bufOff++] = input; + } + + public void BlockUpdate(byte[] inBytes, int inOff, int len) + { + if (len < 0) + throw new ArgumentException("Can't have a negative input length!"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BlockUpdate(inBytes.AsSpan(inOff, len)); +#else + int blockSize = m_cipherMode.GetBlockSize(); + int gapLen = blockSize - bufOff; + + if (len > gapLen) + { + Array.Copy(inBytes, inOff, buf, bufOff, gapLen); + + m_cipherMode.ProcessBlock(buf, 0, mac, 0); + + bufOff = 0; + len -= gapLen; + inOff += gapLen; + + while (len > blockSize) + { + m_cipherMode.ProcessBlock(inBytes, inOff, mac, 0); + + len -= blockSize; + inOff += blockSize; + } + } + + Array.Copy(inBytes, inOff, buf, bufOff, len); + + bufOff += len; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + int blockSize = m_cipherMode.GetBlockSize(); + int gapLen = blockSize - bufOff; + + if (input.Length > gapLen) + { + input[..gapLen].CopyTo(buf.AsSpan(bufOff)); + + m_cipherMode.ProcessBlock(buf, mac); + + bufOff = 0; + input = input[gapLen..]; + + while (input.Length > blockSize) + { + m_cipherMode.ProcessBlock(input, mac); + input = input[blockSize..]; + } + } + + input.CopyTo(buf.AsSpan(bufOff)); + + bufOff += input.Length; + } +#endif + + public int DoFinal(byte[] outBytes, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(outBytes.AsSpan(outOff)); +#else + int blockSize = m_cipherMode.GetBlockSize(); + + byte[] lu; + if (bufOff == blockSize) + { + lu = Lu; + } + else + { + new ISO7816d4Padding().AddPadding(buf, bufOff); + lu = Lu2; + } + + for (int i = 0; i < mac.Length; i++) + { + buf[i] ^= lu[i]; + } + + m_cipherMode.ProcessBlock(buf, 0, mac, 0); + + Array.Copy(mac, 0, outBytes, outOff, macSize); + + Reset(); + + return macSize; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + int blockSize = m_cipherMode.GetBlockSize(); + + byte[] lu; + if (bufOff == blockSize) + { + lu = Lu; + } + else + { + new ISO7816d4Padding().AddPadding(buf, bufOff); + lu = Lu2; + } + + for (int i = 0; i < mac.Length; i++) + { + buf[i] ^= lu[i]; + } + + m_cipherMode.ProcessBlock(buf, mac); + + mac.AsSpan(0, macSize).CopyTo(output); + + Reset(); + + return macSize; + } +#endif + + /** + * Reset the mac generator. + */ + public void Reset() + { + /* + * clean the buffer. + */ + Array.Clear(buf, 0, buf.Length); + bufOff = 0; + + /* + * Reset the underlying cipher. + */ + m_cipherMode.Reset(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/CMac.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/CMac.cs.meta new file mode 100644 index 000000000..7f4f2d558 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/CMac.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 147ba6faf8894394bb4ede3ad60aa6ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/CbcBlockCipherMac.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/CbcBlockCipherMac.cs new file mode 100644 index 000000000..21451494e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/CbcBlockCipherMac.cs @@ -0,0 +1,276 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Paddings; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs +{ + /** + * standard CBC Block Cipher MAC - if no padding is specified the default of + * pad of zeroes is used. + */ + public class CbcBlockCipherMac + : IMac + { + private byte[] buf; + private int bufOff; + private IBlockCipherMode m_cipherMode; + private IBlockCipherPadding padding; + private int macSize; + + /** + * create a standard MAC based on a CBC block cipher. This will produce an + * authentication code half the length of the block size of the cipher. + * + * @param cipher the cipher to be used as the basis of the MAC generation. + */ + public CbcBlockCipherMac( + IBlockCipher cipher) + : this(cipher, (cipher.GetBlockSize() * 8) / 2, null) + { + } + + /** + * create a standard MAC based on a CBC block cipher. This will produce an + * authentication code half the length of the block size of the cipher. + * + * @param cipher the cipher to be used as the basis of the MAC generation. + * @param padding the padding to be used to complete the last block. + */ + public CbcBlockCipherMac( + IBlockCipher cipher, + IBlockCipherPadding padding) + : this(cipher, (cipher.GetBlockSize() * 8) / 2, padding) + { + } + + /** + * create a standard MAC based on a block cipher with the size of the + * MAC been given in bits. This class uses CBC mode as the basis for the + * MAC generation. + *

+ * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + * or 16 bits if being used as a data authenticator (FIPS Publication 113), + * and in general should be less than the size of the block cipher as it reduces + * the chance of an exhaustive attack (see Handbook of Applied Cryptography). + *

+ * @param cipher the cipher to be used as the basis of the MAC generation. + * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. + */ + public CbcBlockCipherMac( + IBlockCipher cipher, + int macSizeInBits) + : this(cipher, macSizeInBits, null) + { + } + + /** + * create a standard MAC based on a block cipher with the size of the + * MAC been given in bits. This class uses CBC mode as the basis for the + * MAC generation. + *

+ * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + * or 16 bits if being used as a data authenticator (FIPS Publication 113), + * and in general should be less than the size of the block cipher as it reduces + * the chance of an exhaustive attack (see Handbook of Applied Cryptography). + *

+ * @param cipher the cipher to be used as the basis of the MAC generation. + * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. + * @param padding the padding to be used to complete the last block. + */ + public CbcBlockCipherMac( + IBlockCipher cipher, + int macSizeInBits, + IBlockCipherPadding padding) + { + if ((macSizeInBits % 8) != 0) + throw new ArgumentException("MAC size must be multiple of 8"); + + this.m_cipherMode = new CbcBlockCipher(cipher); + this.padding = padding; + this.macSize = macSizeInBits / 8; + + buf = new byte[cipher.GetBlockSize()]; + bufOff = 0; + } + + public string AlgorithmName + { + get { return m_cipherMode.AlgorithmName; } + } + + public void Init(ICipherParameters parameters) + { + Reset(); + + m_cipherMode.Init(true, parameters); + } + + public int GetMacSize() + { + return macSize; + } + + public void Update(byte input) + { + if (bufOff == buf.Length) + { + m_cipherMode.ProcessBlock(buf, 0, buf, 0); + bufOff = 0; + } + + buf[bufOff++] = input; + } + + public void BlockUpdate(byte[] input, int inOff, int len) + { + if (len < 0) + throw new ArgumentException("Can't have a negative input length!"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BlockUpdate(input.AsSpan(inOff, len)); +#else + int blockSize = m_cipherMode.GetBlockSize(); + int gapLen = blockSize - bufOff; + + if (len > gapLen) + { + Array.Copy(input, inOff, buf, bufOff, gapLen); + + m_cipherMode.ProcessBlock(buf, 0, buf, 0); + + bufOff = 0; + len -= gapLen; + inOff += gapLen; + + while (len > blockSize) + { + m_cipherMode.ProcessBlock(input, inOff, buf, 0); + + len -= blockSize; + inOff += blockSize; + } + } + + Array.Copy(input, inOff, buf, bufOff, len); + + bufOff += len; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + int blockSize = m_cipherMode.GetBlockSize(); + int gapLen = blockSize - bufOff; + + if (input.Length > gapLen) + { + input[..gapLen].CopyTo(buf.AsSpan(bufOff)); + + m_cipherMode.ProcessBlock(buf, buf); + + bufOff = 0; + input = input[gapLen..]; + + while (input.Length > blockSize) + { + m_cipherMode.ProcessBlock(input, buf); + input = input[blockSize..]; + } + } + + input.CopyTo(buf.AsSpan(bufOff)); + + bufOff += input.Length; + } +#endif + + public int DoFinal(byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(output.AsSpan(outOff)); +#else + int blockSize = m_cipherMode.GetBlockSize(); + + if (padding == null) + { + // pad with zeroes + while (bufOff < blockSize) + { + buf[bufOff++] = 0; + } + } + else + { + if (bufOff == blockSize) + { + m_cipherMode.ProcessBlock(buf, 0, buf, 0); + bufOff = 0; + } + + padding.AddPadding(buf, bufOff); + } + + m_cipherMode.ProcessBlock(buf, 0, buf, 0); + + Array.Copy(buf, 0, output, outOff, macSize); + + Reset(); + + return macSize; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + int blockSize = m_cipherMode.GetBlockSize(); + + if (padding == null) + { + // pad with zeroes + while (bufOff < blockSize) + { + buf[bufOff++] = 0; + } + } + else + { + if (bufOff == blockSize) + { + m_cipherMode.ProcessBlock(buf, buf); + bufOff = 0; + } + + padding.AddPadding(buf, bufOff); + } + + m_cipherMode.ProcessBlock(buf, buf); + + buf.AsSpan(0, macSize).CopyTo(output); + + Reset(); + + return macSize; + } +#endif + + /** + * Reset the mac generator. + */ + public void Reset() + { + // Clear the buffer. + Array.Clear(buf, 0, buf.Length); + bufOff = 0; + + // Reset the underlying cipher. + m_cipherMode.Reset(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/CbcBlockCipherMac.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/CbcBlockCipherMac.cs.meta new file mode 100644 index 000000000..8babb16c2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/CbcBlockCipherMac.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 85bfc6f3c7c846946b5e385bca692356 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/CfbBlockCipherMac.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/CfbBlockCipherMac.cs new file mode 100644 index 000000000..62649e322 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/CfbBlockCipherMac.cs @@ -0,0 +1,434 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Paddings; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs +{ + /** + * implements a Cipher-FeedBack (CFB) mode on top of a simple cipher. + */ + internal class MacCfbBlockCipher + : IBlockCipherMode + { + private byte[] IV; + private byte[] cfbV; + private byte[] cfbOutV; + + private readonly int blockSize; + private readonly IBlockCipher cipher; + + /** + * Basic constructor. + * + * @param cipher the block cipher to be used as the basis of the + * feedback mode. + * @param blockSize the block size in bits (note: a multiple of 8) + */ + public MacCfbBlockCipher( + IBlockCipher cipher, + int bitBlockSize) + { + this.cipher = cipher; + this.blockSize = bitBlockSize / 8; + + this.IV = new byte[cipher.GetBlockSize()]; + this.cfbV = new byte[cipher.GetBlockSize()]; + this.cfbOutV = new byte[cipher.GetBlockSize()]; + } + + /** + * Initialise the cipher and, possibly, the initialisation vector (IV). + * If an IV isn't passed as part of the parameter, the IV will be all zeros. + * An IV which is too short is handled in FIPS compliant fashion. + * + * @param param the key and other data required by the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public void Init(bool forEncryption, ICipherParameters parameters) + { + if (parameters is ParametersWithIV ivParam) + { + byte[] iv = ivParam.GetIV(); + + if (iv.Length < IV.Length) + { + Array.Copy(iv, 0, IV, IV.Length - iv.Length, iv.Length); + } + else + { + Array.Copy(iv, 0, IV, 0, IV.Length); + } + + parameters = ivParam.Parameters; + } + + Reset(); + + cipher.Init(true, parameters); + } + + /** + * return the algorithm name and mode. + * + * @return the name of the underlying algorithm followed by "/CFB" + * and the block size in bits. + */ + public string AlgorithmName + { + get { return cipher.AlgorithmName + "/CFB" + (blockSize * 8); } + } + + public IBlockCipher UnderlyingCipher => cipher; + + public bool IsPartialBlockOkay + { + get { return true; } + } + + /** + * return the block size we are operating at. + * + * @return the block size we are operating at (in bytes). + */ + public int GetBlockSize() + { + return blockSize; + } + + public int ProcessBlock(byte[] input, int inOff, byte[] outBytes, int outOff) + { + Check.DataLength(input, inOff, blockSize, "input buffer too short"); + Check.OutputLength(outBytes, outOff, blockSize, "output buffer too short"); + + cipher.ProcessBlock(cfbV, 0, cfbOutV, 0); + + // + // XOR the cfbV with the plaintext producing the cipher text + // + for (int i = 0; i < blockSize; i++) + { + outBytes[outOff + i] = (byte)(cfbOutV[i] ^ input[inOff + i]); + } + + // + // change over the input block. + // + Array.Copy(cfbV, blockSize, cfbV, 0, cfbV.Length - blockSize); + Array.Copy(outBytes, outOff, cfbV, cfbV.Length - blockSize, blockSize); + + return blockSize; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessBlock(ReadOnlySpan input, Span output) + { + Check.DataLength(input, blockSize, "input buffer too short"); + Check.OutputLength(output, blockSize, "output buffer too short"); + + cipher.ProcessBlock(cfbV, cfbOutV); + + // + // XOR the cfbV with the plaintext producing the cipher text + // + for (int i = 0; i < blockSize; i++) + { + output[i] = (byte)(cfbOutV[i] ^ input[i]); + } + + // + // change over the input block. + // + Array.Copy(cfbV, blockSize, cfbV, 0, cfbV.Length - blockSize); + output[..blockSize].CopyTo(cfbV.AsSpan(cfbV.Length - blockSize)); + + return blockSize; + } +#endif + + /** + * reset the chaining vector back to the IV and reset the underlying + * cipher. + */ + public void Reset() + { + IV.CopyTo(cfbV, 0); + } + + public void GetMacBlock( + byte[] mac) + { + cipher.ProcessBlock(cfbV, 0, mac, 0); + } + } + + public class CfbBlockCipherMac + : IMac + { + private byte[] mac; + private byte[] Buffer; + private int bufOff; + private MacCfbBlockCipher cipher; + private IBlockCipherPadding padding; + private int macSize; + + /** + * create a standard MAC based on a CFB block cipher. This will produce an + * authentication code half the length of the block size of the cipher, with + * the CFB mode set to 8 bits. + * + * @param cipher the cipher to be used as the basis of the MAC generation. + */ + public CfbBlockCipherMac( + IBlockCipher cipher) + : this(cipher, 8, (cipher.GetBlockSize() * 8) / 2, null) + { + } + + /** + * create a standard MAC based on a CFB block cipher. This will produce an + * authentication code half the length of the block size of the cipher, with + * the CFB mode set to 8 bits. + * + * @param cipher the cipher to be used as the basis of the MAC generation. + * @param padding the padding to be used. + */ + public CfbBlockCipherMac( + IBlockCipher cipher, + IBlockCipherPadding padding) + : this(cipher, 8, (cipher.GetBlockSize() * 8) / 2, padding) + { + } + + /** + * create a standard MAC based on a block cipher with the size of the + * MAC been given in bits. This class uses CFB mode as the basis for the + * MAC generation. + *

+ * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + * or 16 bits if being used as a data authenticator (FIPS Publication 113), + * and in general should be less than the size of the block cipher as it reduces + * the chance of an exhaustive attack (see Handbook of Applied Cryptography). + *

+ * @param cipher the cipher to be used as the basis of the MAC generation. + * @param cfbBitSize the size of an output block produced by the CFB mode. + * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. + */ + public CfbBlockCipherMac( + IBlockCipher cipher, + int cfbBitSize, + int macSizeInBits) + : this(cipher, cfbBitSize, macSizeInBits, null) + { + } + + /** + * create a standard MAC based on a block cipher with the size of the + * MAC been given in bits. This class uses CFB mode as the basis for the + * MAC generation. + *

+ * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + * or 16 bits if being used as a data authenticator (FIPS Publication 113), + * and in general should be less than the size of the block cipher as it reduces + * the chance of an exhaustive attack (see Handbook of Applied Cryptography). + *

+ * @param cipher the cipher to be used as the basis of the MAC generation. + * @param cfbBitSize the size of an output block produced by the CFB mode. + * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. + * @param padding a padding to be used. + */ + public CfbBlockCipherMac( + IBlockCipher cipher, + int cfbBitSize, + int macSizeInBits, + IBlockCipherPadding padding) + { + if ((macSizeInBits % 8) != 0) + throw new ArgumentException("MAC size must be multiple of 8"); + + mac = new byte[cipher.GetBlockSize()]; + + this.cipher = new MacCfbBlockCipher(cipher, cfbBitSize); + this.padding = padding; + this.macSize = macSizeInBits / 8; + + Buffer = new byte[this.cipher.GetBlockSize()]; + bufOff = 0; + } + + public string AlgorithmName + { + get { return cipher.AlgorithmName; } + } + + public void Init(ICipherParameters parameters) + { + Reset(); + + cipher.Init(true, parameters); + } + + public int GetMacSize() + { + return macSize; + } + + public void Update(byte input) + { + if (bufOff == Buffer.Length) + { + cipher.ProcessBlock(Buffer, 0, mac, 0); + bufOff = 0; + } + + Buffer[bufOff++] = input; + } + + public void BlockUpdate(byte[] input, int inOff, int len) + { + if (len < 0) + throw new ArgumentException("Can't have a negative input length!"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BlockUpdate(input.AsSpan(inOff, len)); +#else + int blockSize = cipher.GetBlockSize(); + int resultLen = 0; + int gapLen = blockSize - bufOff; + + if (len > gapLen) + { + Array.Copy(input, inOff, Buffer, bufOff, gapLen); + + resultLen += cipher.ProcessBlock(Buffer, 0, mac, 0); + + bufOff = 0; + len -= gapLen; + inOff += gapLen; + + while (len > blockSize) + { + resultLen += cipher.ProcessBlock(input, inOff, mac, 0); + + len -= blockSize; + inOff += blockSize; + } + } + + Array.Copy(input, inOff, Buffer, bufOff, len); + + bufOff += len; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + int blockSize = cipher.GetBlockSize(); + int resultLen = 0; + int gapLen = blockSize - bufOff; + + if (input.Length > gapLen) + { + input[..gapLen].CopyTo(Buffer.AsSpan(bufOff)); + + resultLen += cipher.ProcessBlock(Buffer, mac); + + bufOff = 0; + input = input[gapLen..]; + + while (input.Length > blockSize) + { + resultLen += cipher.ProcessBlock(input, mac); + input = input[blockSize..]; + } + } + + input.CopyTo(Buffer.AsSpan(bufOff)); + + bufOff += input.Length; + } +#endif + + public int DoFinal(byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(output.AsSpan(outOff)); +#else + int blockSize = cipher.GetBlockSize(); + + // pad with zeroes + if (this.padding == null) + { + while (bufOff < blockSize) + { + Buffer[bufOff++] = 0; + } + } + else + { + padding.AddPadding(Buffer, bufOff); + } + + cipher.ProcessBlock(Buffer, 0, mac, 0); + + cipher.GetMacBlock(mac); + + Array.Copy(mac, 0, output, outOff, macSize); + + Reset(); + + return macSize; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + int blockSize = cipher.GetBlockSize(); + + // pad with zeroes + if (this.padding == null) + { + while (bufOff < blockSize) + { + Buffer[bufOff++] = 0; + } + } + else + { + padding.AddPadding(Buffer, bufOff); + } + + cipher.ProcessBlock(Buffer, 0, mac, 0); + + cipher.GetMacBlock(mac); + + mac.AsSpan(0, macSize).CopyTo(output); + + Reset(); + + return macSize; + } +#endif + + /** + * Reset the mac generator. + */ + public void Reset() + { + // Clear the buffer. + Array.Clear(Buffer, 0, Buffer.Length); + bufOff = 0; + + // Reset the underlying cipher. + cipher.Reset(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/CfbBlockCipherMac.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/CfbBlockCipherMac.cs.meta new file mode 100644 index 000000000..3baab4912 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/CfbBlockCipherMac.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3fc42df051ecc104680ab4efa67051c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/DSTU7564Mac.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/DSTU7564Mac.cs new file mode 100644 index 000000000..3e0e6470f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/DSTU7564Mac.cs @@ -0,0 +1,176 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs +{ + /// + /// Implementation of DSTU7564 mac mode + /// + public class Dstu7564Mac + : IMac + { + private Dstu7564Digest engine; + private int macSize; + + private ulong inputLength; + + byte[] paddedKey; + byte[] invertedKey; + + public string AlgorithmName + { + get { return "DSTU7564Mac"; } + } + + public Dstu7564Mac(int macSizeBits) + { + engine = new Dstu7564Digest(macSizeBits); + macSize = macSizeBits / 8; + } + + public void Init(ICipherParameters parameters) + { + if (parameters is KeyParameter) + { + byte[] key = ((KeyParameter)parameters).GetKey(); + + invertedKey = new byte[key.Length]; + + paddedKey = PadKey(key); + + for (int byteIndex = 0; byteIndex < invertedKey.Length; byteIndex++) + { + invertedKey[byteIndex] = (byte)(key[byteIndex] ^ (byte)0xFF); + } + } + else + { + throw new ArgumentException("Bad parameter passed"); + } + + engine.BlockUpdate(paddedKey, 0, paddedKey.Length); + } + + public int GetMacSize() + { + return macSize; + } + + public void BlockUpdate(byte[] input, int inOff, int len) + { + Check.DataLength(input, inOff, len, "input buffer too short"); + + if (paddedKey == null) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + engine.BlockUpdate(input, inOff, len); + inputLength += (ulong)len; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + if (paddedKey == null) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + engine.BlockUpdate(input); + inputLength += (ulong)input.Length; + } +#endif + + public void Update(byte input) + { + engine.Update(input); + inputLength++; + } + + public int DoFinal(byte[] output, int outOff) + { + if (paddedKey == null) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.OutputLength(output, outOff, macSize, "output buffer too short"); + + Pad(); + + engine.BlockUpdate(invertedKey, 0, invertedKey.Length); + + inputLength = 0; + + return engine.DoFinal(output, outOff); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + if (paddedKey == null) + throw new InvalidOperationException(AlgorithmName + " not initialised"); + + Check.OutputLength(output, macSize, "output buffer too short"); + + Pad(); + + engine.BlockUpdate(invertedKey); + + inputLength = 0; + + return engine.DoFinal(output); + } +#endif + + public void Reset() + { + inputLength = 0; + engine.Reset(); + if (paddedKey != null) + { + engine.BlockUpdate(paddedKey, 0, paddedKey.Length); + } + } + + private void Pad() + { + int extra = engine.GetByteLength() - (int)(inputLength % (ulong)engine.GetByteLength()); + if (extra < 13) // terminator byte + 96 bits of length + { + extra += engine.GetByteLength(); + } + + byte[] padded = new byte[extra]; + + padded[0] = (byte)0x80; // Defined in standard; + + // Defined in standard; + Pack.UInt64_To_LE(inputLength * 8, padded, padded.Length - 12); + + engine.BlockUpdate(padded, 0, padded.Length); + } + + private byte[] PadKey(byte[] input) + { + int paddedLen = ((input.Length + engine.GetByteLength() - 1) / engine.GetByteLength()) * engine.GetByteLength(); + + int extra = engine.GetByteLength() - (int)(input.Length % engine.GetByteLength()); + if (extra < 13) // terminator byte + 96 bits of length + { + paddedLen += engine.GetByteLength(); + } + + byte[] padded = new byte[paddedLen]; + + Array.Copy(input, 0, padded, 0, input.Length); + + padded[input.Length] = (byte)0x80; // Defined in standard; + Pack.UInt32_To_LE((uint)(input.Length * 8), padded, padded.Length - 12); // Defined in standard; + + return padded; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/DSTU7564Mac.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/DSTU7564Mac.cs.meta new file mode 100644 index 000000000..11c3be294 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/DSTU7564Mac.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3df87f14e95d97499b6682f752537fd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/DSTU7624Mac.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/DSTU7624Mac.cs new file mode 100644 index 000000000..2e31f3180 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/DSTU7624Mac.cs @@ -0,0 +1,225 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs +{ + /** + * implementation of DSTU 7624 MAC + */ + public class Dstu7624Mac : IMac + { + private int macSize; + + private Dstu7624Engine engine; + private int blockSize; + + private byte[] c, cTemp, kDelta; + private byte[] buf; + private int bufOff; + + public Dstu7624Mac(int blockSizeBits, int q) + { + engine = new Dstu7624Engine(blockSizeBits); + + blockSize = blockSizeBits / 8; + + macSize = q / 8; + + c = new byte[blockSize]; + + cTemp = new byte[blockSize]; + + kDelta = new byte[blockSize]; + buf = new byte[blockSize]; + } + + public void Init(ICipherParameters parameters) + { + if (parameters is KeyParameter) + { + engine.Init(true, (KeyParameter)parameters); + + engine.ProcessBlock(kDelta, 0, kDelta, 0); + } + else + { + throw new ArgumentException("invalid parameter passed to Dstu7624Mac init - " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + } + } + + public string AlgorithmName + { + get { return "Dstu7624Mac"; } + } + + public int GetMacSize() + { + return macSize; + } + + public void Update(byte input) + { + if (bufOff == buf.Length) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ProcessBlock(buf); +#else + ProcessBlock(buf, 0); +#endif + bufOff = 0; + } + + buf[bufOff++] = input; + } + + public void BlockUpdate(byte[] input, int inOff, int len) + { + if (len < 0) + throw new ArgumentException("Can't have a negative input length!"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BlockUpdate(input.AsSpan(inOff, len)); +#else + int blockSize = engine.GetBlockSize(); + int gapLen = blockSize - bufOff; + + if (len > gapLen) + { + Array.Copy(input, inOff, buf, bufOff, gapLen); + + ProcessBlock(buf, 0); + + bufOff = 0; + len -= gapLen; + inOff += gapLen; + + while (len > blockSize) + { + ProcessBlock(input, inOff); + + len -= blockSize; + inOff += blockSize; + } + } + + Array.Copy(input, inOff, buf, bufOff, len); + + bufOff += len; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + int blockSize = engine.GetBlockSize(); + int gapLen = blockSize - bufOff; + + if (input.Length > gapLen) + { + input[..gapLen].CopyTo(buf.AsSpan(bufOff)); + + ProcessBlock(buf); + + bufOff = 0; + input = input[gapLen..]; + + while (input.Length > blockSize) + { + ProcessBlock(input); + input = input[blockSize..]; + } + } + + input.CopyTo(buf.AsSpan(bufOff)); + + bufOff += input.Length; + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void ProcessBlock(ReadOnlySpan input) + { + Xor(c, input, cTemp); + + engine.ProcessBlock(cTemp, c); + } + + private void Xor(ReadOnlySpan c, ReadOnlySpan input, Span xorResult) + { + for (int byteIndex = 0; byteIndex < blockSize; byteIndex++) + { + xorResult[byteIndex] = (byte)(c[byteIndex] ^ input[byteIndex]); + } + } +#else + private void ProcessBlock(byte[] input, int inOff) + { + Xor(c, 0, input, inOff, cTemp); + + engine.ProcessBlock(cTemp, 0, c, 0); + } +#endif + + private void Xor(byte[] c, int cOff, byte[] input, int inOff, byte[] xorResult) + { + for (int byteIndex = 0; byteIndex < blockSize; byteIndex++) + { + xorResult[byteIndex] = (byte)(c[byteIndex + cOff] ^ input[byteIndex + inOff]); + } + } + + public int DoFinal(byte[] output, int outOff) + { + if (bufOff % buf.Length != 0) + throw new DataLengthException("Input must be a multiple of blocksize"); + + Check.OutputLength(output, outOff, macSize, "output buffer too short"); + + //Last block + Xor(c, 0, buf, 0, cTemp); + Xor(cTemp, 0, kDelta, 0, c); + engine.ProcessBlock(c, 0, c, 0); + + Array.Copy(c, 0, output, outOff, macSize); + + return macSize; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + if (bufOff % buf.Length != 0) + throw new DataLengthException("Input must be a multiple of blocksize"); + + Check.OutputLength(output, macSize, "output buffer too short"); + + //Last block + Xor(c, 0, buf, 0, cTemp); + Xor(cTemp, 0, kDelta, 0, c); + engine.ProcessBlock(c, c); + + c.AsSpan(0, macSize).CopyTo(output); + + return macSize; + } +#endif + + public void Reset() + { + Arrays.Fill(c, (byte)0x00); + Arrays.Fill(cTemp, (byte)0x00); + Arrays.Fill(kDelta, (byte)0x00); + Arrays.Fill(buf, (byte)0x00); + engine.ProcessBlock(kDelta, 0, kDelta, 0); + bufOff = 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/DSTU7624Mac.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/DSTU7624Mac.cs.meta new file mode 100644 index 000000000..f5044f25f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/DSTU7624Mac.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ef86dfb559e6e34c97d13a961c01118 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/GMac.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/GMac.cs new file mode 100644 index 000000000..b7371262f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/GMac.cs @@ -0,0 +1,133 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs +{ + /// + /// The GMAC specialisation of Galois/Counter mode (GCM) detailed in NIST Special Publication + /// 800-38D. + /// + /// + /// GMac is an invocation of the GCM mode where no data is encrypted (i.e. all input data to the Mac + /// is processed as additional authenticated data with the underlying GCM block cipher). + /// + public class GMac + : IMac + { + private readonly GcmBlockCipher cipher; + private readonly int macSizeBits; + + /// + /// Creates a GMAC based on the operation of a block cipher in GCM mode. + /// + /// + /// This will produce an authentication code the length of the block size of the cipher. + /// + /// the cipher to be used in GCM mode to generate the MAC. + public GMac(GcmBlockCipher cipher) + : this(cipher, 128) + { + } + + /// + /// Creates a GMAC based on the operation of a 128 bit block cipher in GCM mode. + /// + /// + /// This will produce an authentication code the length of the block size of the cipher. + /// + /// the cipher to be used in GCM mode to generate the MAC. + /// the mac size to generate, in bits. Must be a multiple of 8, between 32 and 128 (inclusive). + /// Sizes less than 96 are not recommended, but are supported for specialized applications. + public GMac(GcmBlockCipher cipher, int macSizeBits) + { + this.cipher = cipher; + this.macSizeBits = macSizeBits; + } + + /// + /// Initialises the GMAC - requires a + /// providing a and a nonce. + /// + public void Init(ICipherParameters parameters) + { + if (parameters is ParametersWithIV param) + { + byte[] iv = param.GetIV(); + KeyParameter keyParam = (KeyParameter)param.Parameters; + + // GCM is always operated in encrypt mode to calculate MAC + cipher.Init(true, new AeadParameters(keyParam, macSizeBits, iv)); + } + else + { + throw new ArgumentException("GMAC requires ParametersWithIV"); + } + } + + public string AlgorithmName + { + get { return cipher.UnderlyingCipher.AlgorithmName + "-GMAC"; } + } + + public int GetMacSize() + { + return macSizeBits / 8; + } + + public void Update(byte input) + { + cipher.ProcessAadByte(input); + } + + public void BlockUpdate(byte[] input, int inOff, int len) + { + cipher.ProcessAadBytes(input, inOff, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + cipher.ProcessAadBytes(input); + } +#endif + + public int DoFinal(byte[] output, int outOff) + { + try + { + return cipher.DoFinal(output, outOff); + } + catch (InvalidCipherTextException e) + { + // Impossible in encrypt mode + throw new InvalidOperationException(e.ToString()); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + try + { + return cipher.DoFinal(output); + } + catch (InvalidCipherTextException e) + { + // Impossible in encrypt mode + throw new InvalidOperationException(e.ToString()); + } + } +#endif + + public void Reset() + { + cipher.Reset(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/GMac.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/GMac.cs.meta new file mode 100644 index 000000000..d9eaa7b9a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/GMac.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff10578c84beafb499d22468085654d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/GOST28147Mac.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/GOST28147Mac.cs new file mode 100644 index 000000000..199ebf48f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/GOST28147Mac.cs @@ -0,0 +1,377 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs +{ + /** + * implementation of GOST 28147-89 MAC + */ + public class Gost28147Mac + : IMac + { + private const int BlockSize = 8; + private const int MacSize = 4; + private int bufOff; + private byte[] buf; + private byte[] mac; + private bool firstStep = true; + private int[] workingKey; + private byte[] macIV = null; + + // + // This is default S-box - E_A. + private byte[] S = + { + 0x9,0x6,0x3,0x2,0x8,0xB,0x1,0x7,0xA,0x4,0xE,0xF,0xC,0x0,0xD,0x5, + 0x3,0x7,0xE,0x9,0x8,0xA,0xF,0x0,0x5,0x2,0x6,0xC,0xB,0x4,0xD,0x1, + 0xE,0x4,0x6,0x2,0xB,0x3,0xD,0x8,0xC,0xF,0x5,0xA,0x0,0x7,0x1,0x9, + 0xE,0x7,0xA,0xC,0xD,0x1,0x3,0x9,0x0,0x2,0xB,0x4,0xF,0x8,0x5,0x6, + 0xB,0x5,0x1,0x9,0x8,0xD,0xF,0x0,0xE,0x4,0x2,0x3,0xC,0x7,0xA,0x6, + 0x3,0xA,0xD,0xC,0x1,0x2,0x0,0xB,0x7,0x5,0x9,0x4,0x8,0xF,0xE,0x6, + 0x1,0xD,0x2,0x9,0x7,0xA,0x6,0x0,0x8,0xC,0x4,0x5,0xF,0x3,0xB,0xE, + 0xB,0xA,0xF,0x5,0x0,0xC,0xE,0x8,0x6,0x2,0x3,0x9,0x1,0x7,0xD,0x4 + }; + + public Gost28147Mac() + { + mac = new byte[BlockSize]; + buf = new byte[BlockSize]; + bufOff = 0; + } + + private static int[] GenerateWorkingKey( + byte[] userKey) + { + if (userKey.Length != 32) + throw new ArgumentException("Key length invalid. Key needs to be 32 byte - 256 bit!!!"); + + int[] key = new int[8]; + for(int i=0; i!=8; i++) + { + key[i] = (int)Pack.LE_To_UInt32(userKey, i * 4); + } + + return key; + } + + public void Init(ICipherParameters parameters) + { + Reset(); + buf = new byte[BlockSize]; + macIV = null; + if (parameters is ParametersWithSBox param) + { + // + // Set the S-Box + // + param.GetSBox().CopyTo(this.S, 0); + + // + // set key if there is one + // + if (param.Parameters != null) + { + workingKey = GenerateWorkingKey(((KeyParameter)param.Parameters).GetKey()); + } + } + else if (parameters is KeyParameter keyParameter) + { + workingKey = GenerateWorkingKey(keyParameter.GetKey()); + } + else if (parameters is ParametersWithIV ivParam) + { + workingKey = GenerateWorkingKey(((KeyParameter)ivParam.Parameters).GetKey()); + macIV = ivParam.GetIV(); // don't skip the initial CM5Func + Array.Copy(macIV, 0, mac, 0, mac.Length); + } + else + { + throw new ArgumentException("invalid parameter passed to Gost28147 init - " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + } + } + + public string AlgorithmName + { + get { return "Gost28147Mac"; } + } + + public int GetMacSize() + { + return MacSize; + } + + private int Gost28147_mainStep(int n1, int key) + { + int cm = (key + n1); // CM1 + + // S-box replacing + + int om = S[ 0 + ((cm >> (0 * 4)) & 0xF)] << (0 * 4); + om += S[ 16 + ((cm >> (1 * 4)) & 0xF)] << (1 * 4); + om += S[ 32 + ((cm >> (2 * 4)) & 0xF)] << (2 * 4); + om += S[ 48 + ((cm >> (3 * 4)) & 0xF)] << (3 * 4); + om += S[ 64 + ((cm >> (4 * 4)) & 0xF)] << (4 * 4); + om += S[ 80 + ((cm >> (5 * 4)) & 0xF)] << (5 * 4); + om += S[ 96 + ((cm >> (6 * 4)) & 0xF)] << (6 * 4); + om += S[112 + ((cm >> (7 * 4)) & 0xF)] << (7 * 4); + +// return om << 11 | om >>> (32-11); // 11-leftshift + int omLeft = om << 11; + int omRight = (int)(((uint) om) >> (32 - 11)); // Note: Casts required to get unsigned bit rotation + + return omLeft | omRight; + } + + private void Gost28147MacFunc( + int[] workingKey, + byte[] input, + int inOff, + byte[] output, + int outOff) + { + int N1 = (int)Pack.LE_To_UInt32(input, inOff); + int N2 = (int)Pack.LE_To_UInt32(input, inOff + 4); + int tmp; //tmp -> for saving N1 + + for (int k = 0; k < 2; k++) // 1-16 steps + { + for (int j = 0; j < 8; j++) + { + tmp = N1; + N1 = N2 ^ Gost28147_mainStep(N1, workingKey[j]); // CM2 + N2 = tmp; + } + } + + Pack.UInt32_To_LE((uint)N1, output, outOff); + Pack.UInt32_To_LE((uint)N2, output, outOff + 4); + } + + public void Update(byte input) + { + if (bufOff == buf.Length) + { + byte[] sum = new byte[buf.Length]; + if (firstStep) + { + firstStep = false; + if (macIV != null) + { + Cm5Func(buf, 0, macIV, sum); + } + else + { + Array.Copy(buf, 0, sum, 0, mac.Length); + } + } + else + { + Cm5Func(buf, 0, mac, sum); + } + + Gost28147MacFunc(workingKey, sum, 0, mac, 0); + bufOff = 0; + } + + buf[bufOff++] = input; + } + + public void BlockUpdate(byte[] input, int inOff, int len) + { + if (len < 0) + throw new ArgumentException("Can't have a negative input length!"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BlockUpdate(input.AsSpan(inOff, len)); +#else + int gapLen = BlockSize - bufOff; + + if (len > gapLen) + { + Array.Copy(input, inOff, buf, bufOff, gapLen); + + byte[] sum = new byte[buf.Length]; + if (firstStep) + { + firstStep = false; + if (macIV != null) + { + Cm5Func(buf, 0, macIV, sum); + } + else + { + Array.Copy(buf, 0, sum, 0, mac.Length); + } + } + else + { + Cm5Func(buf, 0, mac, sum); + } + + Gost28147MacFunc(workingKey, sum, 0, mac, 0); + + bufOff = 0; + len -= gapLen; + inOff += gapLen; + + while (len > BlockSize) + { + Cm5Func(input, inOff, mac, sum); + Gost28147MacFunc(workingKey, sum, 0, mac, 0); + + len -= BlockSize; + inOff += BlockSize; + } + } + + Array.Copy(input, inOff, buf, bufOff, len); + + bufOff += len; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + int gapLen = BlockSize - bufOff; + + if (input.Length > gapLen) + { + input[..gapLen].CopyTo(buf.AsSpan(bufOff)); + + byte[] sum = new byte[buf.Length]; + if (firstStep) + { + firstStep = false; + if (macIV != null) + { + Cm5Func(buf, macIV, sum); + } + else + { + Array.Copy(buf, 0, sum, 0, mac.Length); + } + } + else + { + Cm5Func(buf, mac, sum); + } + + Gost28147MacFunc(workingKey, sum, 0, mac, 0); + + bufOff = 0; + input = input[gapLen..]; + + while (input.Length > BlockSize) + { + Cm5Func(input, mac, sum); + Gost28147MacFunc(workingKey, sum, 0, mac, 0); + + input = input[BlockSize..]; + } + } + + input.CopyTo(buf.AsSpan(bufOff)); + + bufOff += input.Length; + } +#endif + + public int DoFinal(byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(output.AsSpan(outOff)); +#else + //padding with zero + while (bufOff < BlockSize) + { + buf[bufOff++] = 0; + } + + byte[] sum = new byte[buf.Length]; + if (firstStep) + { + firstStep = false; + Array.Copy(buf, 0, sum, 0, mac.Length); + } + else + { + Cm5Func(buf, 0, mac, sum); + } + + Gost28147MacFunc(workingKey, sum, 0, mac, 0); + + Array.Copy(mac, (mac.Length/2)-MacSize, output, outOff, MacSize); + + Reset(); + + return MacSize; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + //padding with zero + while (bufOff < BlockSize) + { + buf[bufOff++] = 0; + } + + byte[] sum = new byte[buf.Length]; + if (firstStep) + { + firstStep = false; + Array.Copy(buf, 0, sum, 0, mac.Length); + } + else + { + Cm5Func(buf, 0, mac, sum); + } + + Gost28147MacFunc(workingKey, sum, 0, mac, 0); + + mac.AsSpan((mac.Length / 2) - MacSize, MacSize).CopyTo(output); + + Reset(); + + return MacSize; + } +#endif + + public void Reset() + { + // Clear the buffer. + Array.Clear(buf, 0, buf.Length); + bufOff = 0; + + firstStep = true; + } + + private static void Cm5Func(byte[] buf, int bufOff, byte[] mac, byte[] sum) + { + for (int i = 0; i < BlockSize; ++i) + { + sum[i] = (byte)(buf[bufOff + i] ^ mac[i]); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void Cm5Func(ReadOnlySpan buffer, ReadOnlySpan mac, Span sum) + { + for (int i = 0; i < BlockSize; ++i) + { + sum[i] = (byte)(buffer[i] ^ mac[i]); + } + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/GOST28147Mac.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/GOST28147Mac.cs.meta new file mode 100644 index 000000000..9d6814cd4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/GOST28147Mac.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a1a6f75281759774dbe9f4409f241a2b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/HMac.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/HMac.cs new file mode 100644 index 000000000..72d11a24c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/HMac.cs @@ -0,0 +1,203 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs +{ + /** + * HMAC implementation based on RFC2104 + * + * H(K XOR opad, H(K XOR ipad, text)) + */ + public class HMac + : IMac + { + private const byte IPAD = (byte)0x36; + private const byte OPAD = (byte)0x5C; + + private readonly IDigest digest; + private readonly int digestSize; + private readonly int blockLength; + private IMemoable ipadState; + private IMemoable opadState; + + private readonly byte[] inputPad; + private readonly byte[] outputBuf; + + public HMac(IDigest digest) + { + this.digest = digest; + this.digestSize = digest.GetDigestSize(); + this.blockLength = digest.GetByteLength(); + this.inputPad = new byte[blockLength]; + this.outputBuf = new byte[blockLength + digestSize]; + } + + public virtual string AlgorithmName + { + get { return digest.AlgorithmName + "/HMAC"; } + } + + public virtual IDigest GetUnderlyingDigest() + { + return digest; + } + + public virtual void Init(ICipherParameters parameters) + { + digest.Reset(); + + byte[] key = ((KeyParameter)parameters).GetKey(); + int keyLength = key.Length; + + if (keyLength > blockLength) + { + digest.BlockUpdate(key, 0, keyLength); + digest.DoFinal(inputPad, 0); + + keyLength = digestSize; + } + else + { + Array.Copy(key, 0, inputPad, 0, keyLength); + } + + Array.Clear(inputPad, keyLength, blockLength - keyLength); + Array.Copy(inputPad, 0, outputBuf, 0, blockLength); + + XorPad(inputPad, blockLength, IPAD); + XorPad(outputBuf, blockLength, OPAD); + + if (digest is IMemoable) + { + opadState = ((IMemoable)digest).Copy(); + + ((IDigest)opadState).BlockUpdate(outputBuf, 0, blockLength); + } + + digest.BlockUpdate(inputPad, 0, inputPad.Length); + + if (digest is IMemoable) + { + ipadState = ((IMemoable)digest).Copy(); + } + } + + public virtual int GetMacSize() + { + return digestSize; + } + + public virtual void Update(byte input) + { + digest.Update(input); + } + + public virtual void BlockUpdate(byte[] input, int inOff, int len) + { + digest.BlockUpdate(input, inOff, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + digest.BlockUpdate(input); + } +#endif + + public virtual int DoFinal(byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(output.AsSpan(outOff)); +#else + digest.DoFinal(outputBuf, blockLength); + + if (opadState != null) + { + ((IMemoable)digest).Reset(opadState); + digest.BlockUpdate(outputBuf, blockLength, digestSize); + } + else + { + digest.BlockUpdate(outputBuf, 0, outputBuf.Length); + } + + int len = digest.DoFinal(output, outOff); + + Array.Clear(outputBuf, blockLength, digestSize); + + if (ipadState != null) + { + ((IMemoable)digest).Reset(ipadState); + } + else + { + digest.BlockUpdate(inputPad, 0, inputPad.Length); + } + + return len; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int DoFinal(Span output) + { + digest.DoFinal(outputBuf.AsSpan(blockLength)); + + if (opadState != null) + { + ((IMemoable)digest).Reset(opadState); + digest.BlockUpdate(outputBuf.AsSpan(blockLength, digestSize)); + } + else + { + digest.BlockUpdate(outputBuf); + } + + int len = digest.DoFinal(output); + + Array.Clear(outputBuf, blockLength, digestSize); + + if (ipadState != null) + { + ((IMemoable)digest).Reset(ipadState); + } + else + { + digest.BlockUpdate(inputPad); + } + + return len; + } +#endif + + /** + * Reset the mac generator. + */ + public virtual void Reset() + { + if (ipadState != null) + { + ((IMemoable)digest).Reset(ipadState); + } + else + { + digest.Reset(); + digest.BlockUpdate(inputPad, 0, inputPad.Length); + } + } + + private static void XorPad(byte[] pad, int len, byte n) + { + for (int i = 0; i < len; ++i) + { + pad[i] ^= n; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/HMac.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/HMac.cs.meta new file mode 100644 index 000000000..78867a2fe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/HMac.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff9c8a587cf6ee843b4bc5fadb67a117 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/ISO9797Alg3Mac.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/ISO9797Alg3Mac.cs new file mode 100644 index 000000000..916c884fe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/ISO9797Alg3Mac.cs @@ -0,0 +1,353 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Paddings; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs +{ + /** + * DES based CBC Block Cipher MAC according to ISO9797, algorithm 3 (ANSI X9.19 Retail MAC) + * + * This could as well be derived from CBCBlockCipherMac, but then the property mac in the base + * class must be changed to protected + */ + public class ISO9797Alg3Mac + : IMac + { + private byte[] mac; + private byte[] buf; + private int bufOff; + private IBlockCipher cipher; + private IBlockCipherPadding padding; + private int macSize; + private KeyParameter lastKey2; + private KeyParameter lastKey3; + + /** + * create a Retail-MAC based on a CBC block cipher. This will produce an + * authentication code of the length of the block size of the cipher. + * + * @param cipher the cipher to be used as the basis of the MAC generation. This must + * be DESEngine. + */ + public ISO9797Alg3Mac( + IBlockCipher cipher) + : this(cipher, cipher.GetBlockSize() * 8, null) + { + } + + /** + * create a Retail-MAC based on a CBC block cipher. This will produce an + * authentication code of the length of the block size of the cipher. + * + * @param cipher the cipher to be used as the basis of the MAC generation. + * @param padding the padding to be used to complete the last block. + */ + public ISO9797Alg3Mac( + IBlockCipher cipher, + IBlockCipherPadding padding) + : this(cipher, cipher.GetBlockSize() * 8, padding) + { + } + + /** + * create a Retail-MAC based on a block cipher with the size of the + * MAC been given in bits. This class uses single DES CBC mode as the basis for the + * MAC generation. + *

+ * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + * or 16 bits if being used as a data authenticator (FIPS Publication 113), + * and in general should be less than the size of the block cipher as it reduces + * the chance of an exhaustive attack (see Handbook of Applied Cryptography). + *

+ * @param cipher the cipher to be used as the basis of the MAC generation. + * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. + */ + public ISO9797Alg3Mac( + IBlockCipher cipher, + int macSizeInBits) + : this(cipher, macSizeInBits, null) + { + } + + /** + * create a standard MAC based on a block cipher with the size of the + * MAC been given in bits. This class uses single DES CBC mode as the basis for the + * MAC generation. The final block is decrypted and then encrypted using the + * middle and right part of the key. + *

+ * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + * or 16 bits if being used as a data authenticator (FIPS Publication 113), + * and in general should be less than the size of the block cipher as it reduces + * the chance of an exhaustive attack (see Handbook of Applied Cryptography). + *

+ * @param cipher the cipher to be used as the basis of the MAC generation. + * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. + * @param padding the padding to be used to complete the last block. + */ + public ISO9797Alg3Mac( + IBlockCipher cipher, + int macSizeInBits, + IBlockCipherPadding padding) + { + if ((macSizeInBits % 8) != 0) + throw new ArgumentException("MAC size must be multiple of 8"); + + if (!(cipher is DesEngine)) + throw new ArgumentException("cipher must be instance of DesEngine"); + + this.cipher = new CbcBlockCipher(cipher); + this.padding = padding; + this.macSize = macSizeInBits / 8; + + mac = new byte[cipher.GetBlockSize()]; + buf = new byte[cipher.GetBlockSize()]; + bufOff = 0; + } + + public string AlgorithmName + { + get { return "ISO9797Alg3"; } + } + + public void Init( + ICipherParameters parameters) + { + Reset(); + + if (!(parameters is KeyParameter || parameters is ParametersWithIV)) + throw new ArgumentException("parameters must be an instance of KeyParameter or ParametersWithIV"); + + // KeyParameter must contain a double or triple length DES key, + // however the underlying cipher is a single DES. The middle and + // right key are used only in the final step. + + KeyParameter kp; + if (parameters is KeyParameter) + { + kp = (KeyParameter)parameters; + } + else + { + kp = (KeyParameter)((ParametersWithIV)parameters).Parameters; + } + + KeyParameter key1; + byte[] keyvalue = kp.GetKey(); + + if (keyvalue.Length == 16) + { // Double length DES key + key1 = new KeyParameter(keyvalue, 0, 8); + this.lastKey2 = new KeyParameter(keyvalue, 8, 8); + this.lastKey3 = key1; + } + else if (keyvalue.Length == 24) + { // Triple length DES key + key1 = new KeyParameter(keyvalue, 0, 8); + this.lastKey2 = new KeyParameter(keyvalue, 8, 8); + this.lastKey3 = new KeyParameter(keyvalue, 16, 8); + } + else + { + throw new ArgumentException("Key must be either 112 or 168 bit long"); + } + + if (parameters is ParametersWithIV) + { + cipher.Init(true, new ParametersWithIV(key1, ((ParametersWithIV)parameters).GetIV())); + } + else + { + cipher.Init(true, key1); + } + } + + public int GetMacSize() + { + return macSize; + } + + public void Update( + byte input) + { + if (bufOff == buf.Length) + { + cipher.ProcessBlock(buf, 0, mac, 0); + bufOff = 0; + } + + buf[bufOff++] = input; + } + + public void BlockUpdate(byte[] input, int inOff, int len) + { + if (len < 0) + throw new ArgumentException("Can't have a negative input length!"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BlockUpdate(input.AsSpan(inOff, len)); +#else + int blockSize = cipher.GetBlockSize(); + int resultLen = 0; + int gapLen = blockSize - bufOff; + + if (len > gapLen) + { + Array.Copy(input, inOff, buf, bufOff, gapLen); + + resultLen += cipher.ProcessBlock(buf, 0, mac, 0); + + bufOff = 0; + len -= gapLen; + inOff += gapLen; + + while (len > blockSize) + { + resultLen += cipher.ProcessBlock(input, inOff, mac, 0); + + len -= blockSize; + inOff += blockSize; + } + } + + Array.Copy(input, inOff, buf, bufOff, len); + + bufOff += len; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + int blockSize = cipher.GetBlockSize(); + int resultLen = 0; + int gapLen = blockSize - bufOff; + + if (input.Length > gapLen) + { + input[..gapLen].CopyTo(buf.AsSpan(bufOff)); + + resultLen += cipher.ProcessBlock(buf, mac); + + bufOff = 0; + input = input[gapLen..]; + + while (input.Length > blockSize) + { + resultLen += cipher.ProcessBlock(input, mac); + input = input[blockSize..]; + } + } + + input.CopyTo(buf.AsSpan(bufOff)); + + bufOff += input.Length; + } +#endif + + public int DoFinal(byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(output.AsSpan(outOff)); +#else + int blockSize = cipher.GetBlockSize(); + + if (padding == null) + { + // pad with zeroes + while (bufOff < blockSize) + { + buf[bufOff++] = 0; + } + } + else + { + if (bufOff == blockSize) + { + cipher.ProcessBlock(buf, 0, mac, 0); + bufOff = 0; + } + + padding.AddPadding(buf, bufOff); + } + + cipher.ProcessBlock(buf, 0, mac, 0); + + // Added to code from base class + DesEngine deseng = new DesEngine(); + + deseng.Init(false, this.lastKey2); + deseng.ProcessBlock(mac, 0, mac, 0); + + deseng.Init(true, this.lastKey3); + deseng.ProcessBlock(mac, 0, mac, 0); + // **** + + Array.Copy(mac, 0, output, outOff, macSize); + + Reset(); + + return macSize; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + int blockSize = cipher.GetBlockSize(); + + if (padding == null) + { + // pad with zeroes + while (bufOff < blockSize) + { + buf[bufOff++] = 0; + } + } + else + { + if (bufOff == blockSize) + { + cipher.ProcessBlock(buf, mac); + bufOff = 0; + } + + padding.AddPadding(buf, bufOff); + } + + cipher.ProcessBlock(buf, mac); + + // Added to code from base class + DesEngine deseng = new DesEngine(); + + deseng.Init(false, this.lastKey2); + deseng.ProcessBlock(mac, mac); + + deseng.Init(true, this.lastKey3); + deseng.ProcessBlock(mac, mac); + // **** + + mac.AsSpan(0, macSize).CopyTo(output); + + Reset(); + + return macSize; + } +#endif + + /** + * Reset the mac generator. + */ + public void Reset() + { + Array.Clear(buf, 0, buf.Length); + bufOff = 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/ISO9797Alg3Mac.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/ISO9797Alg3Mac.cs.meta new file mode 100644 index 000000000..d00aad9d0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/ISO9797Alg3Mac.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ba1bf157d949c9a40b850fc633d073cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/KMac.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/KMac.cs new file mode 100644 index 000000000..679c75a11 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/KMac.cs @@ -0,0 +1,248 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs +{ + public class KMac + : IMac, IXof + { + private static readonly byte[] padding = new byte[100]; + + private readonly CShakeDigest cshake; + private readonly int bitLength; + private readonly int outputLength; + + private byte[] key; + private bool initialised; + private bool firstOutput; + + public KMac(int bitLength, byte[] S) + { + this.cshake = new CShakeDigest(bitLength, Strings.ToAsciiByteArray("KMAC"), S); + this.bitLength = bitLength; + this.outputLength = bitLength * 2 / 8; + } + + public string AlgorithmName + { + get { return "KMAC" + cshake.AlgorithmName.Substring(6); } + } + + public void BlockUpdate(byte[] input, int inOff, int len) + { + if (!initialised) + throw new InvalidOperationException("KMAC not initialized"); + + cshake.BlockUpdate(input, inOff, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + if (!initialised) + throw new InvalidOperationException("KMAC not initialized"); + + cshake.BlockUpdate(input); + } +#endif + + public int DoFinal(byte[] output, int outOff) + { + if (firstOutput) + { + if (!initialised) + throw new InvalidOperationException("KMAC not initialized"); + + byte[] encOut = XofUtilities.RightEncode(GetMacSize() * 8); + + cshake.BlockUpdate(encOut, 0, encOut.Length); + } + + int rv = cshake.OutputFinal(output, outOff, GetMacSize()); + + Reset(); + + return rv; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + if (firstOutput) + { + if (!initialised) + throw new InvalidOperationException("KMAC not initialized"); + + Span lengthEncoding = stackalloc byte[9]; + int count = XofUtilities.RightEncode(GetMacSize() * 8, lengthEncoding); + cshake.BlockUpdate(lengthEncoding[..count]); + } + + int rv = cshake.OutputFinal(output[..GetMacSize()]); + + Reset(); + + return rv; + } +#endif + + public int OutputFinal(byte[] output, int outOff, int outLen) + { + if (firstOutput) + { + if (!initialised) + throw new InvalidOperationException("KMAC not initialized"); + + byte[] encOut = XofUtilities.RightEncode(outLen * 8); + + cshake.BlockUpdate(encOut, 0, encOut.Length); + } + + int rv = cshake.OutputFinal(output, outOff, outLen); + + Reset(); + + return rv; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int OutputFinal(Span output) + { + if (firstOutput) + { + if (!initialised) + throw new InvalidOperationException("KMAC not initialized"); + + Span lengthEncoding = stackalloc byte[9]; + int count = XofUtilities.RightEncode(output.Length * 8, lengthEncoding); + cshake.BlockUpdate(lengthEncoding[..count]); + } + + int rv = cshake.OutputFinal(output); + + Reset(); + + return rv; + } +#endif + + public int Output(byte[] output, int outOff, int outLen) + { + if (firstOutput) + { + if (!initialised) + throw new InvalidOperationException("KMAC not initialized"); + + byte[] encOut = XofUtilities.RightEncode(0); + + cshake.BlockUpdate(encOut, 0, encOut.Length); + + firstOutput = false; + } + + return cshake.Output(output, outOff, outLen); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int Output(Span output) + { + if (firstOutput) + { + if (!initialised) + throw new InvalidOperationException("KMAC not initialized"); + + Span lengthEncoding = stackalloc byte[9]; + int count = XofUtilities.RightEncode(0, lengthEncoding); + cshake.BlockUpdate(lengthEncoding[..count]); + + firstOutput = false; + } + + return cshake.Output(output); + } +#endif + + public int GetByteLength() + { + return cshake.GetByteLength(); + } + + public int GetDigestSize() + { + return outputLength; + } + + public int GetMacSize() + { + return outputLength; + } + + public void Init(ICipherParameters parameters) + { + KeyParameter kParam = (KeyParameter)parameters; + this.key = Arrays.Clone(kParam.GetKey()); + this.initialised = true; + Reset(); + } + + public void Reset() + { + cshake.Reset(); + + if (key != null) + { + if (bitLength == 128) + { + bytePad(key, 168); + } + else + { + bytePad(key, 136); + } + } + + firstOutput = true; + } + + private void bytePad(byte[] X, int w) + { + byte[] bytes = XofUtilities.LeftEncode(w); + BlockUpdate(bytes, 0, bytes.Length); + byte[] encX = encode(X); + BlockUpdate(encX, 0, encX.Length); + + int required = w - ((bytes.Length + encX.Length) % w); + + if (required > 0 && required != w) + { + while (required > padding.Length) + { + BlockUpdate(padding, 0, padding.Length); + required -= padding.Length; + } + + BlockUpdate(padding, 0, required); + } + } + + private static byte[] encode(byte[] X) + { + return Arrays.Concatenate(XofUtilities.LeftEncode(X.Length * 8), X); + } + + public void Update(byte input) + { + if (!initialised) + throw new InvalidOperationException("KMAC not initialized"); + + cshake.Update(input); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/KMac.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/KMac.cs.meta new file mode 100644 index 000000000..f3ed3e011 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/KMac.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c1e81168ac718e54881a82b634d745ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/Poly1305.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/Poly1305.cs new file mode 100644 index 000000000..01aa34839 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/Poly1305.cs @@ -0,0 +1,387 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +#if NETCOREAPP3_0_OR_GREATER +using System.Runtime.CompilerServices; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs +{ + + /// + /// Poly1305 message authentication code, designed by D. J. Bernstein. + /// + /// + /// Poly1305 computes a 128-bit (16 bytes) authenticator, using a 128 bit nonce and a 256 bit key + /// consisting of a 128 bit key applied to an underlying cipher, and a 128 bit key (with 106 + /// effective key bits) used in the authenticator. + /// + /// The polynomial calculation in this implementation is adapted from the public domain poly1305-donna-unrolled C implementation + /// by Andrew M (@floodyberry). + /// + /// + public class Poly1305 + : IMac + { + private const int BlockSize = 16; + + private readonly IBlockCipher cipher; + + // Initialised state + + /** Polynomial key */ + private uint r0, r1, r2, r3, r4; + + /** Precomputed 5 * r[1..4] */ + private uint s1, s2, s3, s4; + + /** Encrypted nonce */ + private uint k0, k1, k2, k3; + + // Accumulating state + + /** Current block of buffered input */ + private byte[] currentBlock = new byte[BlockSize]; + + /** Current offset in input buffer */ + private int currentBlockOffset = 0; + + /** Polynomial accumulator */ + private uint h0, h1, h2, h3, h4; + + /** + * Constructs a Poly1305 MAC, where the key passed to init() will be used directly. + */ + public Poly1305() + { + this.cipher = null; + } + + /** + * Constructs a Poly1305 MAC, using a 128 bit block cipher. + */ + public Poly1305(IBlockCipher cipher) + { + if (cipher.GetBlockSize() != BlockSize) + { + throw new ArgumentException("Poly1305 requires a 128 bit block cipher."); + } + this.cipher = cipher; + } + + /// + /// Initialises the Poly1305 MAC. + /// + /// a {@link ParametersWithIV} containing a 128 bit nonce and a {@link KeyParameter} with + /// a 256 bit key complying to the {@link Poly1305KeyGenerator Poly1305 key format}. + public void Init(ICipherParameters parameters) + { + byte[] nonce = null; + + if (cipher != null) + { + if (!(parameters is ParametersWithIV)) + throw new ArgumentException("Poly1305 requires an IV when used with a block cipher.", "parameters"); + + ParametersWithIV ivParams = (ParametersWithIV)parameters; + nonce = ivParams.GetIV(); + parameters = ivParams.Parameters; + } + + if (!(parameters is KeyParameter)) + throw new ArgumentException("Poly1305 requires a key."); + + KeyParameter keyParams = (KeyParameter)parameters; + + SetKey(keyParams.GetKey(), nonce); + + Reset(); + } + + private void SetKey(byte[] key, byte[] nonce) + { + if (key.Length != 32) + throw new ArgumentException("Poly1305 key must be 256 bits."); + + if (cipher != null && (nonce == null || nonce.Length != BlockSize)) + throw new ArgumentException("Poly1305 requires a 128 bit IV."); + + // Extract r portion of key (and "clamp" the values) + uint t0 = Pack.LE_To_UInt32(key, 0); + uint t1 = Pack.LE_To_UInt32(key, 4); + uint t2 = Pack.LE_To_UInt32(key, 8); + uint t3 = Pack.LE_To_UInt32(key, 12); + + // NOTE: The masks perform the key "clamping" implicitly + r0 = t0 & 0x03FFFFFFU; + r1 = ((t0 >> 26) | (t1 << 6)) & 0x03FFFF03U; + r2 = ((t1 >> 20) | (t2 << 12)) & 0x03FFC0FFU; + r3 = ((t2 >> 14) | (t3 << 18)) & 0x03F03FFFU; + r4 = (t3 >> 8) & 0x000FFFFFU; + + // Precompute multipliers + s1 = r1 * 5; + s2 = r2 * 5; + s3 = r3 * 5; + s4 = r4 * 5; + + byte[] kBytes; + int kOff; + + if (cipher == null) + { + kBytes = key; + kOff = BlockSize; + } + else + { + // Compute encrypted nonce + kBytes = new byte[BlockSize]; + kOff = 0; + + cipher.Init(true, new KeyParameter(key, BlockSize, BlockSize)); + cipher.ProcessBlock(nonce, 0, kBytes, 0); + } + + k0 = Pack.LE_To_UInt32(kBytes, kOff + 0); + k1 = Pack.LE_To_UInt32(kBytes, kOff + 4); + k2 = Pack.LE_To_UInt32(kBytes, kOff + 8); + k3 = Pack.LE_To_UInt32(kBytes, kOff + 12); + } + + public string AlgorithmName + { + get { return cipher == null ? "Poly1305" : "Poly1305-" + cipher.AlgorithmName; } + } + + public int GetMacSize() + { + return BlockSize; + } + + public void Update(byte input) + { + currentBlock[currentBlockOffset++] = input; + if (currentBlockOffset == BlockSize) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ProcessBlock(currentBlock); +#else + ProcessBlock(currentBlock, 0); +#endif + currentBlockOffset = 0; + } + } + + public void BlockUpdate(byte[] input, int inOff, int len) + { + Check.DataLength(input, inOff, len, "input buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BlockUpdate(input.AsSpan(inOff, len)); +#else + int available = BlockSize - currentBlockOffset; + if (len < available) + { + Array.Copy(input, inOff, currentBlock, currentBlockOffset, len); + currentBlockOffset += len; + return; + } + + int pos = 0; + if (currentBlockOffset > 0) + { + Array.Copy(input, inOff, currentBlock, currentBlockOffset, available); + pos = available; + ProcessBlock(currentBlock, 0); + } + + int remaining; + while ((remaining = len - pos) >= BlockSize) + { + ProcessBlock(input, inOff + pos); + pos += BlockSize; + } + + Array.Copy(input, inOff + pos, currentBlock, 0, remaining); + currentBlockOffset = remaining; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + int available = BlockSize - currentBlockOffset; + if (input.Length < available) + { + input.CopyTo(currentBlock.AsSpan(currentBlockOffset)); + currentBlockOffset += input.Length; + return; + } + + int pos = 0; + if (currentBlockOffset > 0) + { + input[..available].CopyTo(currentBlock.AsSpan(currentBlockOffset)); + pos = available; + ProcessBlock(currentBlock); + } + + int remaining; + while ((remaining = input.Length - pos) >= BlockSize) + { + ProcessBlock(input[pos..]); + pos += BlockSize; + } + + input[pos..].CopyTo(currentBlock); + currentBlockOffset = remaining; + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void ProcessBlock(ReadOnlySpan block) + { + uint t0 = Pack.LE_To_UInt32(block); + uint t1 = Pack.LE_To_UInt32(block[4..]); + uint t2 = Pack.LE_To_UInt32(block[8..]); + uint t3 = Pack.LE_To_UInt32(block[12..]); +#else + private void ProcessBlock(byte[] buf, int off) + { + uint t0 = Pack.LE_To_UInt32(buf, off + 0); + uint t1 = Pack.LE_To_UInt32(buf, off + 4); + uint t2 = Pack.LE_To_UInt32(buf, off + 8); + uint t3 = Pack.LE_To_UInt32(buf, off + 12); +#endif + + h0 += t0 & 0x3ffffffU; + h1 += ((t1 << 6) | (t0 >> 26)) & 0x3ffffffU; + h2 += ((t2 << 12) | (t1 >> 20)) & 0x3ffffffU; + h3 += ((t3 << 18) | (t2 >> 14)) & 0x3ffffffU; + h4 += ( 1 << 24) | (t3 >> 8); + + ulong tp0 = (ulong)h0 * r0 + (ulong)h1 * s4 + (ulong)h2 * s3 + (ulong)h3 * s2 + (ulong)h4 * s1; + ulong tp1 = (ulong)h0 * r1 + (ulong)h1 * r0 + (ulong)h2 * s4 + (ulong)h3 * s3 + (ulong)h4 * s2; + ulong tp2 = (ulong)h0 * r2 + (ulong)h1 * r1 + (ulong)h2 * r0 + (ulong)h3 * s4 + (ulong)h4 * s3; + ulong tp3 = (ulong)h0 * r3 + (ulong)h1 * r2 + (ulong)h2 * r1 + (ulong)h3 * r0 + (ulong)h4 * s4; + ulong tp4 = (ulong)h0 * r4 + (ulong)h1 * r3 + (ulong)h2 * r2 + (ulong)h3 * r1 + (ulong)h4 * r0; + + h0 = (uint)tp0 & 0x3ffffff; tp1 += (tp0 >> 26); + h1 = (uint)tp1 & 0x3ffffff; tp2 += (tp1 >> 26); + h2 = (uint)tp2 & 0x3ffffff; tp3 += (tp2 >> 26); + h3 = (uint)tp3 & 0x3ffffff; tp4 += (tp3 >> 26); + h4 = (uint)tp4 & 0x3ffffff; + h0 += (uint)(tp4 >> 26) * 5; + h1 += h0 >> 26; h0 &= 0x3ffffff; + } + + public int DoFinal(byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(output.AsSpan(outOff)); +#else + Check.OutputLength(output, outOff, BlockSize, "output buffer is too short."); + + if (currentBlockOffset > 0) + { + // Process padded block + if (currentBlockOffset < BlockSize) + { + currentBlock[currentBlockOffset++] = 1; + while (currentBlockOffset < BlockSize) + { + currentBlock[currentBlockOffset++] = 0; + } + + h4 -= (1 << 24); + } + + ProcessBlock(currentBlock, 0); + } + + Debug.Assert(h4 >> 26 == 0); + + //h0 += (h4 >> 26) * 5U + 5U; h4 &= 0x3ffffff; + h0 += 5U; + h1 += h0 >> 26; h0 &= 0x3ffffff; + h2 += h1 >> 26; h1 &= 0x3ffffff; + h3 += h2 >> 26; h2 &= 0x3ffffff; + h4 += h3 >> 26; h3 &= 0x3ffffff; + + long c = ((int)(h4 >> 26) - 1) * 5; + c += (long)k0 + ((h0 ) | (h1 << 26)); + Pack.UInt32_To_LE((uint)c, output, outOff ); c >>= 32; + c += (long)k1 + ((h1 >> 6) | (h2 << 20)); + Pack.UInt32_To_LE((uint)c, output, outOff + 4); c >>= 32; + c += (long)k2 + ((h2 >> 12) | (h3 << 14)); + Pack.UInt32_To_LE((uint)c, output, outOff + 8); c >>= 32; + c += (long)k3 + ((h3 >> 18) | (h4 << 8)); + Pack.UInt32_To_LE((uint)c, output, outOff + 12); + + Reset(); + return BlockSize; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + Check.OutputLength(output, BlockSize, "output buffer is too short."); + + if (currentBlockOffset > 0) + { + // Process padded block + if (currentBlockOffset < BlockSize) + { + currentBlock[currentBlockOffset++] = 1; + while (currentBlockOffset < BlockSize) + { + currentBlock[currentBlockOffset++] = 0; + } + + h4 -= (1 << 24); + } + + ProcessBlock(currentBlock); + } + + Debug.Assert(h4 >> 26 == 0); + + //h0 += (h4 >> 26) * 5U + 5U; h4 &= 0x3ffffff; + h0 += 5U; + h1 += h0 >> 26; h0 &= 0x3ffffff; + h2 += h1 >> 26; h1 &= 0x3ffffff; + h3 += h2 >> 26; h2 &= 0x3ffffff; + h4 += h3 >> 26; h3 &= 0x3ffffff; + + long c = ((int)(h4 >> 26) - 1) * 5; + c += (long)k0 + ((h0) | (h1 << 26)); + Pack.UInt32_To_LE((uint)c, output); c >>= 32; + c += (long)k1 + ((h1 >> 6) | (h2 << 20)); + Pack.UInt32_To_LE((uint)c, output[4..]); c >>= 32; + c += (long)k2 + ((h2 >> 12) | (h3 << 14)); + Pack.UInt32_To_LE((uint)c, output[8..]); c >>= 32; + c += (long)k3 + ((h3 >> 18) | (h4 << 8)); + Pack.UInt32_To_LE((uint)c, output[12..]); + + Reset(); + return BlockSize; + } +#endif + + public void Reset() + { + currentBlockOffset = 0; + + h0 = h1 = h2 = h3 = h4 = 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/Poly1305.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/Poly1305.cs.meta new file mode 100644 index 000000000..fd42df6a7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/Poly1305.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 741547bc11f330d47b607e905832b385 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/SipHash.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/SipHash.cs new file mode 100644 index 000000000..844bd9dd2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/SipHash.cs @@ -0,0 +1,258 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs +{ + /// + /// Implementation of SipHash as specified in "SipHash: a fast short-input PRF", by Jean-Philippe + /// Aumasson and Daniel J. Bernstein (https://131002.net/siphash/siphash.pdf). + /// + /// + /// "SipHash is a family of PRFs SipHash-c-d where the integer parameters c and d are the number of + /// compression rounds and the number of finalization rounds. A compression round is identical to a + /// finalization round and this round function is called SipRound. Given a 128-bit key k and a + /// (possibly empty) byte string m, SipHash-c-d returns a 64-bit value..." + /// + public class SipHash + : IMac + { + protected readonly int c, d; + + protected long k0, k1; + protected long v0, v1, v2, v3; + + protected long m = 0; + protected int wordPos = 0; + protected int wordCount = 0; + + /// SipHash-2-4 + public SipHash() + : this(2, 4) + { + } + + /// SipHash-c-d + /// the number of compression rounds + /// the number of finalization rounds + public SipHash(int c, int d) + { + this.c = c; + this.d = d; + } + + public virtual string AlgorithmName + { + get { return "SipHash-" + c + "-" + d; } + } + + public virtual int GetMacSize() + { + return 8; + } + + public virtual void Init(ICipherParameters parameters) + { + KeyParameter keyParameter = parameters as KeyParameter; + if (keyParameter == null) + throw new ArgumentException("must be an instance of KeyParameter", "parameters"); + byte[] key = keyParameter.GetKey(); + if (key.Length != 16) + throw new ArgumentException("must be a 128-bit key", "parameters"); + + this.k0 = (long)Pack.LE_To_UInt64(key, 0); + this.k1 = (long)Pack.LE_To_UInt64(key, 8); + + Reset(); + } + + public virtual void Update(byte input) + { + m = (long)(((ulong)m >> 8) | ((ulong)input << 56)); + + if (++wordPos == 8) + { + ProcessMessageWord(); + wordPos = 0; + } + } + + public virtual void BlockUpdate(byte[] input, int offset, int length) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BlockUpdate(input.AsSpan(offset, length)); +#else + int i = 0, fullWords = length & ~7; + if (wordPos == 0) + { + for (; i < fullWords; i += 8) + { + m = (long)Pack.LE_To_UInt64(input, offset + i); + ProcessMessageWord(); + } + for (; i < length; ++i) + { + m = (long)(((ulong)m >> 8) | ((ulong)input[offset + i] << 56)); + } + wordPos = length - fullWords; + } + else + { + int bits = wordPos << 3; + for (; i < fullWords; i += 8) + { + ulong n = Pack.LE_To_UInt64(input, offset + i); + m = (long)((n << bits) | ((ulong)m >> -bits)); + ProcessMessageWord(); + m = (long)n; + } + for (; i < length; ++i) + { + m = (long)(((ulong)m >> 8) | ((ulong)input[offset + i] << 56)); + + if (++wordPos == 8) + { + ProcessMessageWord(); + wordPos = 0; + } + } + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + int length = input.Length; + int i = 0, fullWords = length & ~7; + if (wordPos == 0) + { + for (; i < fullWords; i += 8) + { + m = (long)Pack.LE_To_UInt64(input[i..]); + ProcessMessageWord(); + } + for (; i < length; ++i) + { + m = (long)(((ulong)m >> 8) | ((ulong)input[i] << 56)); + } + wordPos = length - fullWords; + } + else + { + int bits = wordPos << 3; + for (; i < fullWords; i += 8) + { + ulong n = Pack.LE_To_UInt64(input[i..]); + m = (long)((n << bits) | ((ulong)m >> -bits)); + ProcessMessageWord(); + m = (long)n; + } + for (; i < length; ++i) + { + m = (long)(((ulong)m >> 8) | ((ulong)input[i] << 56)); + + if (++wordPos == 8) + { + ProcessMessageWord(); + wordPos = 0; + } + } + } + } +#endif + + public virtual long DoFinal() + { + // NOTE: 2 distinct shifts to avoid "64-bit shift" when wordPos == 0 + m = (long)((ulong)m >> ((7 - wordPos) << 3)); + m = (long)((ulong)m >> 8); + m = (long)((ulong)m | ((ulong)((wordCount << 3) + wordPos) << 56)); + + ProcessMessageWord(); + + v2 ^= 0xffL; + + ApplySipRounds(d); + + long result = v0 ^ v1 ^ v2 ^ v3; + + Reset(); + + return result; + } + + public virtual int DoFinal(byte[] output, int outOff) + { + long result = DoFinal(); + Pack.UInt64_To_LE((ulong)result, output, outOff); + return 8; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + long result = DoFinal(); + Pack.UInt64_To_LE((ulong)result, output); + return 8; + } +#endif + + public virtual void Reset() + { + v0 = k0 ^ 0x736f6d6570736575L; + v1 = k1 ^ 0x646f72616e646f6dL; + v2 = k0 ^ 0x6c7967656e657261L; + v3 = k1 ^ 0x7465646279746573L; + + m = 0; + wordPos = 0; + wordCount = 0; + } + + protected virtual void ProcessMessageWord() + { + ++wordCount; + v3 ^= m; + ApplySipRounds(c); + v0 ^= m; + } + + protected virtual void ApplySipRounds(int n) + { + long r0 = v0, r1 = v1, r2 = v2, r3 = v3; + + for (int r = 0; r < n; ++r) + { + r0 += r1; + r2 += r3; + r1 = RotateLeft(r1, 13); + r3 = RotateLeft(r3, 16); + r1 ^= r0; + r3 ^= r2; + r0 = RotateLeft(r0, 32); + r2 += r1; + r0 += r3; + r1 = RotateLeft(r1, 17); + r3 = RotateLeft(r3, 21); + r1 ^= r2; + r3 ^= r0; + r2 = RotateLeft(r2, 32); + } + + v0 = r0; v1 = r1; v2 = r2; v3 = r3; + } + + protected static long RotateLeft(long x, int n) + { + ulong ux = (ulong)x; + ux = (ux << n) | (ux >> -n); + return (long)ux; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/SipHash.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/SipHash.cs.meta new file mode 100644 index 000000000..e9857af6b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/SipHash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0bbbba09da03b8439fc20b05469327b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/SkeinMac.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/SkeinMac.cs new file mode 100644 index 000000000..ab8079b76 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/SkeinMac.cs @@ -0,0 +1,135 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs +{ + + /// + /// Implementation of the Skein parameterised MAC function in 256, 512 and 1024 bit block sizes, + /// based on the Threefish tweakable block cipher. + /// + /// + /// This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + /// competition in October 2010. + ///

+ /// Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + /// Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + /// + /// + /// + public class SkeinMac + : IMac + { + ///

+ /// 256 bit block size - Skein-256 + /// + public const int SKEIN_256 = SkeinEngine.SKEIN_256; + /// + /// 512 bit block size - Skein-512 + /// + public const int SKEIN_512 = SkeinEngine.SKEIN_512; + /// + /// 1024 bit block size - Skein-1024 + /// + public const int SKEIN_1024 = SkeinEngine.SKEIN_1024; + + private readonly SkeinEngine engine; + + /// + /// Constructs a Skein MAC with an internal state size and output size. + /// + /// the internal state size in bits - one of or + /// . + /// the output/MAC size to produce in bits, which must be an integral number of + /// bytes. + public SkeinMac(int stateSizeBits, int digestSizeBits) + { + this.engine = new SkeinEngine(stateSizeBits, digestSizeBits); + } + + public SkeinMac(SkeinMac mac) + { + this.engine = new SkeinEngine(mac.engine); + } + + public string AlgorithmName + { + get { return "Skein-MAC-" + (engine.BlockSize * 8) + "-" + (engine.OutputSize * 8); } + } + + /// + /// Optionally initialises the Skein digest with the provided parameters. + /// + /// See for details on the parameterisation of the Skein hash function. + /// the parameters to apply to this engine, or null to use no parameters. + public void Init(ICipherParameters parameters) + { + SkeinParameters skeinParameters; + if (parameters is SkeinParameters) + { + skeinParameters = (SkeinParameters)parameters; + } + else if (parameters is KeyParameter) + { + skeinParameters = new SkeinParameters.Builder().SetKey(((KeyParameter)parameters).GetKey()).Build(); + } + else + { + throw new ArgumentException("Invalid parameter passed to Skein MAC init - " + + Org.BouncyCastle.Utilities.Platform.GetTypeName(parameters)); + } + if (skeinParameters.GetKey() == null) + { + throw new ArgumentException("Skein MAC requires a key parameter."); + } + engine.Init(skeinParameters); + } + + public int GetMacSize() + { + return engine.OutputSize; + } + + public void Reset() + { + engine.Reset(); + } + + public void Update(byte inByte) + { + engine.Update(inByte); + } + + public void BlockUpdate(byte[] input, int inOff, int len) + { + engine.BlockUpdate(input, inOff, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void BlockUpdate(ReadOnlySpan input) + { + engine.BlockUpdate(input); + } +#endif + + public int DoFinal(byte[] output, int outOff) + { + return engine.DoFinal(output, outOff); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + return engine.DoFinal(output); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/SkeinMac.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/SkeinMac.cs.meta new file mode 100644 index 000000000..20755db2c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/SkeinMac.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af48cc87590fd7a4d9bb38522bbd59bc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/VMPCMac.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/VMPCMac.cs new file mode 100644 index 000000000..769cbdda3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/VMPCMac.cs @@ -0,0 +1,242 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs +{ + public class VmpcMac + : IMac + { + private byte g; + + private byte n = 0; + private byte[] P = null; + private byte s = 0; + + private byte[] T; + private byte[] workingIV; + + private byte[] workingKey; + + private byte x1, x2, x3, x4; + + public virtual int DoFinal(byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(output.AsSpan(outOff)); +#else + // Execute the Post-Processing Phase + for (int r = 1; r < 25; r++) + { + s = P[(s + P[n & 0xff]) & 0xff]; + + x4 = P[(x4 + x3 + r) & 0xff]; + x3 = P[(x3 + x2 + r) & 0xff]; + x2 = P[(x2 + x1 + r) & 0xff]; + x1 = P[(x1 + s + r) & 0xff]; + T[g & 0x1f] = (byte) (T[g & 0x1f] ^ x1); + T[(g + 1) & 0x1f] = (byte) (T[(g + 1) & 0x1f] ^ x2); + T[(g + 2) & 0x1f] = (byte) (T[(g + 2) & 0x1f] ^ x3); + T[(g + 3) & 0x1f] = (byte) (T[(g + 3) & 0x1f] ^ x4); + g = (byte) ((g + 4) & 0x1f); + + byte temp = P[n & 0xff]; + P[n & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + n = (byte) ((n + 1) & 0xff); + } + + // Input T to the IV-phase of the VMPC KSA + for (int m = 0; m < 768; m++) + { + s = P[(s + P[m & 0xff] + T[m & 0x1f]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + + // Store 20 new outputs of the VMPC Stream Cipher input table M + byte[] M = new byte[20]; + for (int i = 0; i < 20; i++) + { + s = P[(s + P[i & 0xff]) & 0xff]; + M[i] = P[(P[(P[s & 0xff]) & 0xff] + 1) & 0xff]; + + byte temp = P[i & 0xff]; + P[i & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + + Array.Copy(M, 0, output, outOff, M.Length); + Reset(); + + return M.Length; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int DoFinal(Span output) + { + // Execute the Post-Processing Phase + for (int r = 1; r < 25; r++) + { + s = P[(s + P[n & 0xff]) & 0xff]; + + x4 = P[(x4 + x3 + r) & 0xff]; + x3 = P[(x3 + x2 + r) & 0xff]; + x2 = P[(x2 + x1 + r) & 0xff]; + x1 = P[(x1 + s + r) & 0xff]; + T[g & 0x1f] = (byte)(T[g & 0x1f] ^ x1); + T[(g + 1) & 0x1f] = (byte)(T[(g + 1) & 0x1f] ^ x2); + T[(g + 2) & 0x1f] = (byte)(T[(g + 2) & 0x1f] ^ x3); + T[(g + 3) & 0x1f] = (byte)(T[(g + 3) & 0x1f] ^ x4); + g = (byte)((g + 4) & 0x1f); + + byte temp = P[n & 0xff]; + P[n & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + n = (byte)((n + 1) & 0xff); + } + + // Input T to the IV-phase of the VMPC KSA + for (int m = 0; m < 768; m++) + { + s = P[(s + P[m & 0xff] + T[m & 0x1f]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + + // Store 20 new outputs of the VMPC Stream Cipher input table M + byte[] M = new byte[20]; + for (int i = 0; i < 20; i++) + { + s = P[(s + P[i & 0xff]) & 0xff]; + M[i] = P[(P[(P[s & 0xff]) & 0xff] + 1) & 0xff]; + + byte temp = P[i & 0xff]; + P[i & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + + M.CopyTo(output); + Reset(); + + return M.Length; + } +#endif + + public virtual string AlgorithmName + { + get { return "VMPC-MAC"; } + } + + public virtual int GetMacSize() + { + return 20; + } + + public virtual void Init(ICipherParameters parameters) + { + if (!(parameters is ParametersWithIV)) + throw new ArgumentException("VMPC-MAC Init parameters must include an IV", "parameters"); + + ParametersWithIV ivParams = (ParametersWithIV) parameters; + KeyParameter key = (KeyParameter) ivParams.Parameters; + + if (!(ivParams.Parameters is KeyParameter)) + throw new ArgumentException("VMPC-MAC Init parameters must include a key", "parameters"); + + this.workingIV = ivParams.GetIV(); + + if (workingIV == null || workingIV.Length < 1 || workingIV.Length > 768) + throw new ArgumentException("VMPC-MAC requires 1 to 768 bytes of IV", "parameters"); + + this.workingKey = key.GetKey(); + + Reset(); + + } + + private void initKey(byte[] keyBytes, byte[] ivBytes) + { + s = 0; + P = new byte[256]; + for (int i = 0; i < 256; i++) + { + P[i] = (byte) i; + } + for (int m = 0; m < 768; m++) + { + s = P[(s + P[m & 0xff] + keyBytes[m % keyBytes.Length]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + for (int m = 0; m < 768; m++) + { + s = P[(s + P[m & 0xff] + ivBytes[m % ivBytes.Length]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + n = 0; + } + + public virtual void Reset() + { + initKey(this.workingKey, this.workingIV); + g = x1 = x2 = x3 = x4 = n = 0; + T = new byte[32]; + for (int i = 0; i < 32; i++) + { + T[i] = 0; + } + } + + public virtual void Update(byte input) + { + s = P[(s + P[n & 0xff]) & 0xff]; + byte c = (byte) (input ^ P[(P[(P[s & 0xff]) & 0xff] + 1) & 0xff]); + + x4 = P[(x4 + x3) & 0xff]; + x3 = P[(x3 + x2) & 0xff]; + x2 = P[(x2 + x1) & 0xff]; + x1 = P[(x1 + s + c) & 0xff]; + T[g & 0x1f] = (byte) (T[g & 0x1f] ^ x1); + T[(g + 1) & 0x1f] = (byte) (T[(g + 1) & 0x1f] ^ x2); + T[(g + 2) & 0x1f] = (byte) (T[(g + 2) & 0x1f] ^ x3); + T[(g + 3) & 0x1f] = (byte) (T[(g + 3) & 0x1f] ^ x4); + g = (byte) ((g + 4) & 0x1f); + + byte temp = P[n & 0xff]; + P[n & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + n = (byte) ((n + 1) & 0xff); + } + + public virtual void BlockUpdate(byte[] input, int inOff, int inLen) + { + Check.DataLength(input, inOff, inLen, "input buffer too short"); + + for (int i = 0; i < inLen; i++) + { + Update(input[inOff + i]); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + for (int i = 0; i < input.Length; i++) + { + Update(input[i]); + } + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/VMPCMac.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/VMPCMac.cs.meta new file mode 100644 index 000000000..892d98a56 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/macs/VMPCMac.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4144352b9e83dda43b21e612553bf87c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes.meta new file mode 100644 index 000000000..d65ffab2e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7290ea1bd4b4b8044b8c839a0f6e38e6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CbcBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CbcBlockCipher.cs new file mode 100644 index 000000000..264d30c52 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CbcBlockCipher.cs @@ -0,0 +1,221 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes +{ + /** + * implements Cipher-Block-Chaining (CBC) mode on top of a simple cipher. + */ + public sealed class CbcBlockCipher + : IBlockCipherMode + { + private byte[] IV, cbcV, cbcNextV; + private int blockSize; + private IBlockCipher cipher; + private bool encrypting; + + /** + * Basic constructor. + * + * @param cipher the block cipher to be used as the basis of chaining. + */ + public CbcBlockCipher( + IBlockCipher cipher) + { + this.cipher = cipher; + this.blockSize = cipher.GetBlockSize(); + + this.IV = new byte[blockSize]; + this.cbcV = new byte[blockSize]; + this.cbcNextV = new byte[blockSize]; + } + + /** + * return the underlying block cipher that we are wrapping. + * + * @return the underlying block cipher that we are wrapping. + */ + public IBlockCipher UnderlyingCipher => cipher; + + /** + * Initialise the cipher and, possibly, the initialisation vector (IV). + * If an IV isn't passed as part of the parameter, the IV will be all zeros. + * + * @param forEncryption if true the cipher is initialised for + * encryption, if false for decryption. + * @param param the key and other data required by the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public void Init(bool forEncryption, ICipherParameters parameters) + { + bool oldEncrypting = this.encrypting; + + this.encrypting = forEncryption; + + if (parameters is ParametersWithIV ivParam) + { + byte[] iv = ivParam.GetIV(); + + if (iv.Length != blockSize) + throw new ArgumentException("initialisation vector must be the same length as block size"); + + Array.Copy(iv, 0, IV, 0, iv.Length); + + parameters = ivParam.Parameters; + } + + Reset(); + + // if null it's an IV changed only. + if (parameters != null) + { + cipher.Init(encrypting, parameters); + } + else if (oldEncrypting != encrypting) + { + throw new ArgumentException("cannot change encrypting state without providing key."); + } + } + + /** + * return the algorithm name and mode. + * + * @return the name of the underlying algorithm followed by "/CBC". + */ + public string AlgorithmName + { + get { return cipher.AlgorithmName + "/CBC"; } + } + + public bool IsPartialBlockOkay + { + get { return false; } + } + + /** + * return the block size of the underlying cipher. + * + * @return the block size of the underlying cipher. + */ + public int GetBlockSize() + { + return cipher.GetBlockSize(); + } + + public int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return encrypting + ? EncryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)) + : DecryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); +#else + return encrypting + ? EncryptBlock(input, inOff, output, outOff) + : DecryptBlock(input, inOff, output, outOff); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessBlock(ReadOnlySpan input, Span output) + { + return encrypting + ? EncryptBlock(input, output) + : DecryptBlock(input, output); + } +#endif + + /** + * reset the chaining vector back to the IV and reset the underlying + * cipher. + */ + public void Reset() + { + Array.Copy(IV, 0, cbcV, 0, IV.Length); + Array.Clear(cbcNextV, 0, cbcNextV.Length); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int EncryptBlock(ReadOnlySpan input, Span output) + { + Check.DataLength(input, blockSize, "input buffer too short"); + Check.OutputLength(output, blockSize, "output buffer too short"); + + for (int i = 0; i < blockSize; i++) + { + cbcV[i] ^= input[i]; + } + + int length = cipher.ProcessBlock(cbcV, output); + + output[..blockSize].CopyTo(cbcV); + + return length; + } + + private int DecryptBlock(ReadOnlySpan input, Span output) + { + Check.DataLength(input, blockSize, "input buffer too short"); + Check.OutputLength(output, blockSize, "output buffer too short"); + + input[..blockSize].CopyTo(cbcNextV); + + int length = cipher.ProcessBlock(input, output); + + for (int i = 0; i < blockSize; i++) + { + output[i] ^= cbcV[i]; + } + + byte[] tmp = cbcV; + cbcV = cbcNextV; + cbcNextV = tmp; + + return length; + } +#else + private int EncryptBlock(byte[] input, int inOff, byte[] outBytes, int outOff) + { + Check.DataLength(input, inOff, blockSize, "input buffer too short"); + Check.OutputLength(outBytes, outOff, blockSize, "output buffer too short"); + + for (int i = 0; i < blockSize; i++) + { + cbcV[i] ^= input[inOff + i]; + } + + int length = cipher.ProcessBlock(cbcV, 0, outBytes, outOff); + + Array.Copy(outBytes, outOff, cbcV, 0, cbcV.Length); + + return length; + } + + private int DecryptBlock(byte[] input, int inOff, byte[] outBytes, int outOff) + { + Check.DataLength(input, inOff, blockSize, "input buffer too short"); + Check.OutputLength(outBytes, outOff, blockSize, "output buffer too short"); + + Array.Copy(input, inOff, cbcNextV, 0, blockSize); + + int length = cipher.ProcessBlock(input, inOff, outBytes, outOff); + + for (int i = 0; i < blockSize; i++) + { + outBytes[outOff + i] ^= cbcV[i]; + } + + byte[] tmp = cbcV; + cbcV = cbcNextV; + cbcNextV = tmp; + + return length; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CbcBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CbcBlockCipher.cs.meta new file mode 100644 index 000000000..723b50a66 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CbcBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3831153ecb36bcf4ba6723fbb3b02484 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CcmBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CcmBlockCipher.cs new file mode 100644 index 000000000..ec116c0ea --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CcmBlockCipher.cs @@ -0,0 +1,659 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes +{ + /** + * Implements the Counter with Cipher Block Chaining mode (CCM) detailed in + * NIST Special Publication 800-38C. + *

+ * Note: this mode is a packet mode - it needs all the data up front. + *

+ */ + public class CcmBlockCipher + : IAeadBlockCipher + { + private static readonly int BlockSize = 16; + + private readonly IBlockCipher cipher; + private readonly byte[] macBlock; + private bool forEncryption; + private byte[] nonce; + private byte[] initialAssociatedText; + private int macSize; + private ICipherParameters keyParam; + private readonly MemoryStream associatedText = new MemoryStream(); + private readonly MemoryStream data = new MemoryStream(); + + /** + * Basic constructor. + * + * @param cipher the block cipher to be used. + */ + public CcmBlockCipher( + IBlockCipher cipher) + { + this.cipher = cipher; + this.macBlock = new byte[BlockSize]; + + if (cipher.GetBlockSize() != BlockSize) + throw new ArgumentException("cipher required with a block size of " + BlockSize + "."); + } + + /** + * return the underlying block cipher that we are wrapping. + * + * @return the underlying block cipher that we are wrapping. + */ + public virtual IBlockCipher UnderlyingCipher => cipher; + + public virtual void Init(bool forEncryption, ICipherParameters parameters) + { + this.forEncryption = forEncryption; + + ICipherParameters cipherParameters; + if (parameters is AeadParameters aeadParameters) + { + nonce = aeadParameters.GetNonce(); + initialAssociatedText = aeadParameters.GetAssociatedText(); + macSize = GetMacSize(forEncryption, aeadParameters.MacSize); + cipherParameters = aeadParameters.Key; + } + else if (parameters is ParametersWithIV parametersWithIV) + { + nonce = parametersWithIV.GetIV(); + initialAssociatedText = null; + macSize = GetMacSize(forEncryption, 64); + cipherParameters = parametersWithIV.Parameters; + } + else + { + throw new ArgumentException("invalid parameters passed to CCM"); + } + + // NOTE: Very basic support for key re-use, but no performance gain from it + if (cipherParameters != null) + { + keyParam = cipherParameters; + } + + if (nonce == null || nonce.Length < 7 || nonce.Length > 13) + throw new ArgumentException("nonce must have length from 7 to 13 octets"); + + Reset(); + } + + public virtual string AlgorithmName => cipher.AlgorithmName + "/CCM"; + + public virtual int GetBlockSize() + { + return cipher.GetBlockSize(); + } + + public virtual void ProcessAadByte(byte input) + { + associatedText.WriteByte(input); + } + + public virtual void ProcessAadBytes(byte[] inBytes, int inOff, int len) + { + // TODO: Process AAD online + associatedText.Write(inBytes, inOff, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void ProcessAadBytes(ReadOnlySpan input) + { + // TODO: Process AAD online + associatedText.Write(input); + } +#endif + + public virtual int ProcessByte(byte input, byte[] outBytes, int outOff) + { + data.WriteByte(input); + + return 0; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessByte(byte input, Span output) + { + data.WriteByte(input); + + return 0; + } +#endif + + public virtual int ProcessBytes(byte[] inBytes, int inOff, int inLen, byte[] outBytes, int outOff) + { + Check.DataLength(inBytes, inOff, inLen, "input buffer too short"); + + data.Write(inBytes, inOff, inLen); + + return 0; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBytes(ReadOnlySpan input, Span output) + { + data.Write(input); + + return 0; + } +#endif + + public virtual int DoFinal(byte[] outBytes, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(outBytes.AsSpan(outOff)); +#else + byte[] input = data.GetBuffer(); + int inLen = Convert.ToInt32(data.Length); + + int len = ProcessPacket(input, 0, inLen, outBytes, outOff); + + Reset(); + + return len; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int DoFinal(Span output) + { + byte[] input = data.GetBuffer(); + int inLen = Convert.ToInt32(data.Length); + + int len = ProcessPacket(input.AsSpan(0, inLen), output); + + Reset(); + + return len; + } +#endif + + public virtual void Reset() + { + associatedText.SetLength(0); + data.SetLength(0); + } + + /** + * Returns a byte array containing the mac calculated as part of the + * last encrypt or decrypt operation. + * + * @return the last mac calculated. + */ + public virtual byte[] GetMac() + { + return Arrays.CopyOfRange(macBlock, 0, macSize); + } + + public virtual int GetUpdateOutputSize(int len) + { + return 0; + } + + public virtual int GetOutputSize(int len) + { + int totalData = Convert.ToInt32(data.Length) + len; + + if (forEncryption) + { + return totalData + macSize; + } + + return totalData < macSize ? 0 : totalData - macSize; + } + + /** + * Process a packet of data for either CCM decryption or encryption. + * + * @param in data for processing. + * @param inOff offset at which data starts in the input array. + * @param inLen length of the data in the input array. + * @return a byte array containing the processed input.. + * @throws IllegalStateException if the cipher is not appropriately set up. + * @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + */ + public virtual byte[] ProcessPacket(byte[] input, int inOff, int inLen) + { + byte[] output; + + if (forEncryption) + { + output = new byte[inLen + macSize]; + } + else + { + if (inLen < macSize) + throw new InvalidCipherTextException("data too short"); + + output = new byte[inLen - macSize]; + } + + ProcessPacket(input, inOff, inLen, output, 0); + + return output; + } + + /** + * Process a packet of data for either CCM decryption or encryption. + * + * @param in data for processing. + * @param inOff offset at which data starts in the input array. + * @param inLen length of the data in the input array. + * @param output output array. + * @param outOff offset into output array to start putting processed bytes. + * @return the number of bytes added to output. + * @throws IllegalStateException if the cipher is not appropriately set up. + * @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + * @throws DataLengthException if output buffer too short. + */ + public virtual int ProcessPacket(byte[] input, int inOff, int inLen, byte[] output, int outOff) + { + // TODO: handle null keyParam (e.g. via RepeatedKeySpec) + // Need to keep the CTR and CBC Mac parts around and reset + if (keyParam == null) + throw new InvalidOperationException("CCM cipher unitialized."); + + int n = nonce.Length; + int q = 15 - n; + if (q < 4) + { + int limitLen = 1 << (8 * q); + if (inLen >= limitLen) + throw new InvalidOperationException("CCM packet too large for choice of q."); + } + + byte[] iv = new byte[BlockSize]; + iv[0] = (byte)((q - 1) & 0x7); + nonce.CopyTo(iv, 1); + + IBlockCipher ctrCipher = new SicBlockCipher(cipher); + ctrCipher.Init(forEncryption, new ParametersWithIV(keyParam, iv)); + + int outputLen; + int inIndex = inOff; + int outIndex = outOff; + + if (forEncryption) + { + outputLen = inLen + macSize; + Check.OutputLength(output, outOff, outputLen, "Output buffer too short."); + + CalculateMac(input, inOff, inLen, macBlock); + + byte[] encMac = new byte[BlockSize]; + ctrCipher.ProcessBlock(macBlock, 0, encMac, 0); // S0 + + while (inIndex < (inOff + inLen - BlockSize)) // S1... + { + ctrCipher.ProcessBlock(input, inIndex, output, outIndex); + outIndex += BlockSize; + inIndex += BlockSize; + } + + byte[] block = new byte[BlockSize]; + + Array.Copy(input, inIndex, block, 0, inLen + inOff - inIndex); + + ctrCipher.ProcessBlock(block, 0, block, 0); + + Array.Copy(block, 0, output, outIndex, inLen + inOff - inIndex); + + Array.Copy(encMac, 0, output, outOff + inLen, macSize); + } + else + { + if (inLen < macSize) + throw new InvalidCipherTextException("data too short"); + + outputLen = inLen - macSize; + Check.OutputLength(output, outOff, outputLen, "Output buffer too short."); + + Array.Copy(input, inOff + outputLen, macBlock, 0, macSize); + + ctrCipher.ProcessBlock(macBlock, 0, macBlock, 0); + + for (int i = macSize; i != macBlock.Length; i++) + { + macBlock[i] = 0; + } + + while (inIndex < (inOff + outputLen - BlockSize)) + { + ctrCipher.ProcessBlock(input, inIndex, output, outIndex); + outIndex += BlockSize; + inIndex += BlockSize; + } + + byte[] block = new byte[BlockSize]; + + Array.Copy(input, inIndex, block, 0, outputLen - (inIndex - inOff)); + + ctrCipher.ProcessBlock(block, 0, block, 0); + + Array.Copy(block, 0, output, outIndex, outputLen - (inIndex - inOff)); + + byte[] calculatedMacBlock = new byte[BlockSize]; + + CalculateMac(output, outOff, outputLen, calculatedMacBlock); + + if (!Arrays.ConstantTimeAreEqual(macBlock, calculatedMacBlock)) + throw new InvalidCipherTextException("mac check in CCM failed"); + } + + return outputLen; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessPacket(ReadOnlySpan input, Span output) + { + int inLen = input.Length; + + // TODO: handle null keyParam (e.g. via RepeatedKeySpec) + // Need to keep the CTR and CBC Mac parts around and reset + if (keyParam == null) + throw new InvalidOperationException("CCM cipher unitialized."); + + int n = nonce.Length; + int q = 15 - n; + if (q < 4) + { + int limitLen = 1 << (8 * q); + if (inLen >= limitLen) + throw new InvalidOperationException("CCM packet too large for choice of q."); + } + + byte[] iv = new byte[BlockSize]; + iv[0] = (byte)((q - 1) & 0x7); + nonce.CopyTo(iv, 1); + + IBlockCipher ctrCipher = new SicBlockCipher(cipher); + ctrCipher.Init(forEncryption, new ParametersWithIV(keyParam, iv)); + + int outputLen; + int index = 0; + Span block = stackalloc byte[BlockSize]; + + if (forEncryption) + { + outputLen = inLen + macSize; + Check.OutputLength(output, outputLen, "output buffer too short"); + + CalculateMac(input, macBlock); + + byte[] encMac = new byte[BlockSize]; + ctrCipher.ProcessBlock(macBlock, encMac); // S0 + + while (index < (inLen - BlockSize)) // S1... + { + ctrCipher.ProcessBlock(input[index..], output[index..]); + index += BlockSize; + } + + input[index..].CopyTo(block); + + ctrCipher.ProcessBlock(block, block); + + block[..(inLen - index)].CopyTo(output[index..]); + + encMac.AsSpan(0, macSize).CopyTo(output[inLen..]); + } + else + { + if (inLen < macSize) + throw new InvalidCipherTextException("data too short"); + + outputLen = inLen - macSize; + Check.OutputLength(output, outputLen, "output buffer too short"); + + input[outputLen..].CopyTo(macBlock); + + ctrCipher.ProcessBlock(macBlock, macBlock); + + for (int i = macSize; i != macBlock.Length; i++) + { + macBlock[i] = 0; + } + + while (index < (outputLen - BlockSize)) + { + ctrCipher.ProcessBlock(input[index..], output[index..]); + index += BlockSize; + } + + input[index..outputLen].CopyTo(block); + + ctrCipher.ProcessBlock(block, block); + + block[..(outputLen - index)].CopyTo(output[index..]); + + Span calculatedMacBlock = stackalloc byte[BlockSize]; + + CalculateMac(output[..outputLen], calculatedMacBlock); + + if (!Arrays.ConstantTimeAreEqual(macBlock, calculatedMacBlock)) + throw new InvalidCipherTextException("mac check in CCM failed"); + } + + return outputLen; + } +#endif + + private int CalculateMac(byte[] data, int dataOff, int dataLen, byte[] macBlock) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return CalculateMac(data.AsSpan(dataOff, dataLen), macBlock); +#else + IMac cMac = new CbcBlockCipherMac(cipher, macSize * 8); + + cMac.Init(keyParam); + + // + // build b0 + // + byte[] b0 = new byte[16]; + + if (HasAssociatedText()) + { + b0[0] |= 0x40; + } + + b0[0] |= (byte)((((cMac.GetMacSize() - 2) / 2) & 0x7) << 3); + + b0[0] |= (byte)(((15 - nonce.Length) - 1) & 0x7); + + Array.Copy(nonce, 0, b0, 1, nonce.Length); + + int q = dataLen; + int count = 1; + while (q > 0) + { + b0[b0.Length - count] = (byte)(q & 0xff); + q >>= 8; + count++; + } + + cMac.BlockUpdate(b0, 0, b0.Length); + + // + // process associated text + // + if (HasAssociatedText()) + { + int extra; + + int textLength = GetAssociatedTextLength(); + if (textLength < ((1 << 16) - (1 << 8))) + { + cMac.Update((byte)(textLength >> 8)); + cMac.Update((byte)textLength); + + extra = 2; + } + else // can't go any higher than 2^32 + { + cMac.Update((byte)0xff); + cMac.Update((byte)0xfe); + cMac.Update((byte)(textLength >> 24)); + cMac.Update((byte)(textLength >> 16)); + cMac.Update((byte)(textLength >> 8)); + cMac.Update((byte)textLength); + + extra = 6; + } + + if (initialAssociatedText != null) + { + cMac.BlockUpdate(initialAssociatedText, 0, initialAssociatedText.Length); + } + if (associatedText.Length > 0) + { + byte[] input = associatedText.GetBuffer(); + int len = Convert.ToInt32(associatedText.Length); + + cMac.BlockUpdate(input, 0, len); + } + + extra = (extra + textLength) % 16; + if (extra != 0) + { + for (int i = extra; i < 16; ++i) + { + cMac.Update((byte)0x00); + } + } + } + + // + // add the text + // + cMac.BlockUpdate(data, dataOff, dataLen); + + return cMac.DoFinal(macBlock, 0); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int CalculateMac(ReadOnlySpan data, Span macBlock) + { + IMac cMac = new CbcBlockCipherMac(cipher, macSize * 8); + + cMac.Init(keyParam); + + // + // build b0 + // + byte[] b0 = new byte[16]; + + if (HasAssociatedText()) + { + b0[0] |= 0x40; + } + + b0[0] |= (byte)((((cMac.GetMacSize() - 2) / 2) & 0x7) << 3); + + b0[0] |= (byte)(((15 - nonce.Length) - 1) & 0x7); + + Array.Copy(nonce, 0, b0, 1, nonce.Length); + + int q = data.Length; + int count = 1; + while (q > 0) + { + b0[b0.Length - count] = (byte)(q & 0xff); + q >>= 8; + count++; + } + + cMac.BlockUpdate(b0, 0, b0.Length); + + // + // process associated text + // + if (HasAssociatedText()) + { + int extra; + + int textLength = GetAssociatedTextLength(); + if (textLength < ((1 << 16) - (1 << 8))) + { + cMac.Update((byte)(textLength >> 8)); + cMac.Update((byte)textLength); + + extra = 2; + } + else // can't go any higher than 2^32 + { + cMac.Update((byte)0xff); + cMac.Update((byte)0xfe); + cMac.Update((byte)(textLength >> 24)); + cMac.Update((byte)(textLength >> 16)); + cMac.Update((byte)(textLength >> 8)); + cMac.Update((byte)textLength); + + extra = 6; + } + + if (initialAssociatedText != null) + { + cMac.BlockUpdate(initialAssociatedText, 0, initialAssociatedText.Length); + } + if (associatedText.Length > 0) + { + byte[] input = associatedText.GetBuffer(); + int len = Convert.ToInt32(associatedText.Length); + + cMac.BlockUpdate(input, 0, len); + } + + extra = (extra + textLength) % 16; + if (extra != 0) + { + for (int i = extra; i < 16; ++i) + { + cMac.Update((byte)0x00); + } + } + } + + // + // add the text + // + cMac.BlockUpdate(data); + + return cMac.DoFinal(macBlock); + } +#endif + + private int GetMacSize(bool forEncryption, int requestedMacBits) + { + if (forEncryption && (requestedMacBits < 32 || requestedMacBits > 128 || 0 != (requestedMacBits & 15))) + throw new ArgumentException("tag length in octets must be one of {4,6,8,10,12,14,16}"); + + return requestedMacBits >> 3; + } + + private int GetAssociatedTextLength() + { + return Convert.ToInt32(associatedText.Length) + + (initialAssociatedText == null ? 0 : initialAssociatedText.Length); + } + + private bool HasAssociatedText() + { + return GetAssociatedTextLength() > 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CcmBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CcmBlockCipher.cs.meta new file mode 100644 index 000000000..4f10a308f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CcmBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e209f184af83f8f4494a19e8b869a055 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CfbBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CfbBlockCipher.cs new file mode 100644 index 000000000..abd759f73 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CfbBlockCipher.cs @@ -0,0 +1,230 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes +{ + /** + * implements a Cipher-FeedBack (CFB) mode on top of a simple cipher. + */ + public class CfbBlockCipher + : IBlockCipherMode + { + private byte[] IV; + private byte[] cfbV; + private byte[] cfbOutV; + private bool encrypting; + + private readonly int blockSize; + private readonly IBlockCipher cipher; + + /** + * Basic constructor. + * + * @param cipher the block cipher to be used as the basis of the + * feedback mode. + * @param blockSize the block size in bits (note: a multiple of 8) + */ + public CfbBlockCipher( + IBlockCipher cipher, + int bitBlockSize) + { + if (bitBlockSize < 8 || (bitBlockSize & 7) != 0) + throw new ArgumentException("CFB" + bitBlockSize + " not supported", "bitBlockSize"); + + this.cipher = cipher; + this.blockSize = bitBlockSize / 8; + this.IV = new byte[cipher.GetBlockSize()]; + this.cfbV = new byte[cipher.GetBlockSize()]; + this.cfbOutV = new byte[cipher.GetBlockSize()]; + } + /** + * return the underlying block cipher that we are wrapping. + * + * @return the underlying block cipher that we are wrapping. + */ + public IBlockCipher UnderlyingCipher => cipher; + + /** + * Initialise the cipher and, possibly, the initialisation vector (IV). + * If an IV isn't passed as part of the parameter, the IV will be all zeros. + * An IV which is too short is handled in FIPS compliant fashion. + * + * @param forEncryption if true the cipher is initialised for + * encryption, if false for decryption. + * @param param the key and other data required by the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public void Init( + bool forEncryption, + ICipherParameters parameters) + { + this.encrypting = forEncryption; + if (parameters is ParametersWithIV) + { + ParametersWithIV ivParam = (ParametersWithIV) parameters; + byte[] iv = ivParam.GetIV(); + int diff = IV.Length - iv.Length; + Array.Copy(iv, 0, IV, diff, iv.Length); + Array.Clear(IV, 0, diff); + + parameters = ivParam.Parameters; + } + Reset(); + + // if it's null, key is to be reused. + if (parameters != null) + { + cipher.Init(true, parameters); + } + } + + /** + * return the algorithm name and mode. + * + * @return the name of the underlying algorithm followed by "/CFB" + * and the block size in bits. + */ + public string AlgorithmName + { + get { return cipher.AlgorithmName + "/CFB" + (blockSize * 8); } + } + + public bool IsPartialBlockOkay + { + get { return true; } + } + + /** + * return the block size we are operating at. + * + * @return the block size we are operating at (in bytes). + */ + public int GetBlockSize() + { + return blockSize; + } + + public int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return encrypting + ? EncryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)) + : DecryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); +#else + return encrypting + ? EncryptBlock(input, inOff, output, outOff) + : DecryptBlock(input, inOff, output, outOff); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessBlock(ReadOnlySpan input, Span output) + { + return encrypting + ? EncryptBlock(input, output) + : DecryptBlock(input, output); + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int EncryptBlock(ReadOnlySpan input, Span output) + { + Check.DataLength(input, blockSize, "input buffer too short"); + Check.OutputLength(output, blockSize, "output buffer too short"); + + cipher.ProcessBlock(cfbV, cfbOutV); + // + // XOR the cfbV with the plaintext producing the ciphertext + // + for (int i = 0; i < blockSize; i++) + { + output[i] = (byte)(cfbOutV[i] ^ input[i]); + } + // + // change over the input block. + // + Array.Copy(cfbV, blockSize, cfbV, 0, cfbV.Length - blockSize); + output[..blockSize].CopyTo(cfbV.AsSpan(cfbV.Length - blockSize)); + return blockSize; + } + + private int DecryptBlock(ReadOnlySpan input, Span output) + { + Check.DataLength(input, blockSize, "input buffer too short"); + Check.OutputLength(output, blockSize, "output buffer too short"); + + cipher.ProcessBlock(cfbV, 0, cfbOutV, 0); + // + // change over the input block. + // + Array.Copy(cfbV, blockSize, cfbV, 0, cfbV.Length - blockSize); + input[..blockSize].CopyTo(cfbV.AsSpan(cfbV.Length - blockSize)); + // + // XOR the cfbV with the ciphertext producing the plaintext + // + for (int i = 0; i < blockSize; i++) + { + output[i] = (byte)(cfbOutV[i] ^ input[i]); + } + return blockSize; + } +#else + private int EncryptBlock(byte[] input, int inOff, byte[] outBytes, int outOff) + { + Check.DataLength(input, inOff, blockSize, "input buffer too short"); + Check.OutputLength(outBytes, outOff, blockSize, "output buffer too short"); + + cipher.ProcessBlock(cfbV, 0, cfbOutV, 0); + // + // XOR the cfbV with the plaintext producing the ciphertext + // + for (int i = 0; i < blockSize; i++) + { + outBytes[outOff + i] = (byte)(cfbOutV[i] ^ input[inOff + i]); + } + // + // change over the input block. + // + Array.Copy(cfbV, blockSize, cfbV, 0, cfbV.Length - blockSize); + Array.Copy(outBytes, outOff, cfbV, cfbV.Length - blockSize, blockSize); + return blockSize; + } + + private int DecryptBlock(byte[] input, int inOff, byte[] outBytes, int outOff) + { + Check.DataLength(input, inOff, blockSize, "input buffer too short"); + Check.OutputLength(outBytes, outOff, blockSize, "output buffer too short"); + + cipher.ProcessBlock(cfbV, 0, cfbOutV, 0); + // + // change over the input block. + // + Array.Copy(cfbV, blockSize, cfbV, 0, cfbV.Length - blockSize); + Array.Copy(input, inOff, cfbV, cfbV.Length - blockSize, blockSize); + // + // XOR the cfbV with the ciphertext producing the plaintext + // + for (int i = 0; i < blockSize; i++) + { + outBytes[outOff + i] = (byte)(cfbOutV[i] ^ input[inOff + i]); + } + return blockSize; + } +#endif + + /** + * reset the chaining vector back to the IV and reset the underlying + * cipher. + */ + public void Reset() + { + Array.Copy(IV, 0, cfbV, 0, IV.Length); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CfbBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CfbBlockCipher.cs.meta new file mode 100644 index 000000000..6118b1266 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CfbBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c7ff0cbf4f101654b8f34a6112e42ae3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/ChaCha20Poly1305.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/ChaCha20Poly1305.cs new file mode 100644 index 000000000..7427369be --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/ChaCha20Poly1305.cs @@ -0,0 +1,905 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes +{ + public class ChaCha20Poly1305 + : IAeadCipher + { + private enum State + { + Uninitialized = 0, + EncInit = 1, + EncAad = 2, + EncData = 3, + EncFinal = 4, + DecInit = 5, + DecAad = 6, + DecData = 7, + DecFinal = 8, + } + + private const int BufSize = 64; + private const int KeySize = 32; + private const int NonceSize = 12; + private const int MacSize = 16; + private static readonly byte[] Zeroes = new byte[MacSize - 1]; + + private const ulong AadLimit = ulong.MaxValue; + private const ulong DataLimit = ((1UL << 32) - 1) * 64; + + private readonly ChaCha7539Engine mChacha20; + private readonly IMac mPoly1305; + + private readonly byte[] mKey = new byte[KeySize]; + private readonly byte[] mNonce = new byte[NonceSize]; + private readonly byte[] mBuf = new byte[BufSize + MacSize]; + private readonly byte[] mMac = new byte[MacSize]; + + private byte[] mInitialAad; + + private ulong mAadCount; + private ulong mDataCount; + private State mState = State.Uninitialized; + private int mBufPos; + + public ChaCha20Poly1305() + : this(new Poly1305()) + { + } + + public ChaCha20Poly1305(IMac poly1305) + { + if (null == poly1305) + throw new ArgumentNullException("poly1305"); + if (MacSize != poly1305.GetMacSize()) + throw new ArgumentException("must be a 128-bit MAC", "poly1305"); + + this.mChacha20 = new ChaCha7539Engine(); + this.mPoly1305 = poly1305; + } + + public virtual string AlgorithmName + { + get { return "ChaCha20Poly1305"; } + } + + public virtual void Init(bool forEncryption, ICipherParameters parameters) + { + KeyParameter initKeyParam; + byte[] initNonce; + ICipherParameters chacha20Params; + + if (parameters is AeadParameters) + { + AeadParameters aeadParams = (AeadParameters)parameters; + + int macSizeBits = aeadParams.MacSize; + if ((MacSize * 8) != macSizeBits) + throw new ArgumentException("Invalid value for MAC size: " + macSizeBits); + + initKeyParam = aeadParams.Key; + initNonce = aeadParams.GetNonce(); + chacha20Params = new ParametersWithIV(initKeyParam, initNonce); + + this.mInitialAad = aeadParams.GetAssociatedText(); + } + else if (parameters is ParametersWithIV) + { + ParametersWithIV ivParams = (ParametersWithIV)parameters; + + initKeyParam = (KeyParameter)ivParams.Parameters; + initNonce = ivParams.GetIV(); + chacha20Params = ivParams; + + this.mInitialAad = null; + } + else + { + throw new ArgumentException("invalid parameters passed to ChaCha20Poly1305", "parameters"); + } + + // Validate key + if (null == initKeyParam) + { + if (State.Uninitialized == mState) + throw new ArgumentException("Key must be specified in initial init"); + } + else + { + if (KeySize != initKeyParam.GetKey().Length) + throw new ArgumentException("Key must be 256 bits"); + } + + // Validate nonce + if (null == initNonce || NonceSize != initNonce.Length) + throw new ArgumentException("Nonce must be 96 bits"); + + // Check for encryption with reused nonce + if (State.Uninitialized != mState && forEncryption && Arrays.AreEqual(mNonce, initNonce)) + { + if (null == initKeyParam || Arrays.AreEqual(mKey, initKeyParam.GetKey())) + throw new ArgumentException("cannot reuse nonce for ChaCha20Poly1305 encryption"); + } + + if (null != initKeyParam) + { + Array.Copy(initKeyParam.GetKey(), 0, mKey, 0, KeySize); + } + + Array.Copy(initNonce, 0, mNonce, 0, NonceSize); + + mChacha20.Init(true, chacha20Params); + + this.mState = forEncryption ? State.EncInit : State.DecInit; + + Reset(true, false); + } + + public virtual int GetOutputSize(int len) + { + int total = System.Math.Max(0, len) + mBufPos; + + switch (mState) + { + case State.DecInit: + case State.DecAad: + case State.DecData: + return System.Math.Max(0, total - MacSize); + case State.EncInit: + case State.EncAad: + case State.EncData: + return total + MacSize; + default: + throw new InvalidOperationException(); + } + } + + public virtual int GetUpdateOutputSize(int len) + { + int total = System.Math.Max(0, len) + mBufPos; + + switch (mState) + { + case State.DecInit: + case State.DecAad: + case State.DecData: + total = System.Math.Max(0, total - MacSize); + break; + case State.EncInit: + case State.EncAad: + case State.EncData: + break; + default: + throw new InvalidOperationException(); + } + + return total - (total % BufSize); + } + + public virtual void ProcessAadByte(byte input) + { + CheckAad(); + + this.mAadCount = IncrementCount(mAadCount, 1, AadLimit); + mPoly1305.Update(input); + } + + public virtual void ProcessAadBytes(byte[] inBytes, int inOff, int len) + { + if (null == inBytes) + throw new ArgumentNullException("inBytes"); + if (inOff < 0) + throw new ArgumentException("cannot be negative", "inOff"); + if (len < 0) + throw new ArgumentException("cannot be negative", "len"); + Check.DataLength(inBytes, inOff, len, "input buffer too short"); + + CheckAad(); + + if (len > 0) + { + this.mAadCount = IncrementCount(mAadCount, (uint)len, AadLimit); + mPoly1305.BlockUpdate(inBytes, inOff, len); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void ProcessAadBytes(ReadOnlySpan input) + { + CheckAad(); + + if (!input.IsEmpty) + { + this.mAadCount = IncrementCount(mAadCount, (uint)input.Length, AadLimit); + mPoly1305.BlockUpdate(input); + } + } +#endif + + public virtual int ProcessByte(byte input, byte[] outBytes, int outOff) + { + CheckData(); + + switch (mState) + { + case State.DecData: + { + mBuf[mBufPos] = input; + if (++mBufPos == mBuf.Length) + { + mPoly1305.BlockUpdate(mBuf, 0, BufSize); +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ProcessBlock(mBuf, outBytes.AsSpan(outOff)); +#else + ProcessBlock(mBuf, 0, outBytes, outOff); +#endif + Array.Copy(mBuf, BufSize, mBuf, 0, MacSize); + this.mBufPos = MacSize; + return BufSize; + } + + return 0; + } + case State.EncData: + { + mBuf[mBufPos] = input; + if (++mBufPos == BufSize) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ProcessBlock(mBuf, outBytes.AsSpan(outOff)); +#else + ProcessBlock(mBuf, 0, outBytes, outOff); +#endif + mPoly1305.BlockUpdate(outBytes, outOff, BufSize); + this.mBufPos = 0; + return BufSize; + } + + return 0; + } + default: + throw new InvalidOperationException(); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessByte(byte input, Span output) + { + CheckData(); + + switch (mState) + { + case State.DecData: + { + mBuf[mBufPos] = input; + if (++mBufPos == mBuf.Length) + { + mPoly1305.BlockUpdate(mBuf.AsSpan(0, BufSize)); + ProcessBlock(mBuf, output); + Array.Copy(mBuf, BufSize, mBuf, 0, MacSize); + this.mBufPos = MacSize; + return BufSize; + } + + return 0; + } + case State.EncData: + { + mBuf[mBufPos] = input; + if (++mBufPos == BufSize) + { + ProcessBlock(mBuf, output); + mPoly1305.BlockUpdate(output[..BufSize]); + this.mBufPos = 0; + return BufSize; + } + + return 0; + } + default: + throw new InvalidOperationException(); + } + } +#endif + + public virtual int ProcessBytes(byte[] inBytes, int inOff, int len, byte[] outBytes, int outOff) + { + if (null == inBytes) + throw new ArgumentNullException("inBytes"); + /* + * Following bc-java, we allow null when no output is expected (e.g. based on a + * GetUpdateOutputSize call). + */ + if (null == outBytes) + { + //throw new ArgumentNullException("outBytes"); + } + if (inOff < 0) + throw new ArgumentException("cannot be negative", "inOff"); + if (len < 0) + throw new ArgumentException("cannot be negative", "len"); + Check.DataLength(inBytes, inOff, len, "input buffer too short"); + if (outOff < 0) + throw new ArgumentException("cannot be negative", "outOff"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ProcessBytes(inBytes.AsSpan(inOff, len), Spans.FromNullable(outBytes, outOff)); +#else + CheckData(); + + int resultLen = 0; + + switch (mState) + { + case State.DecData: + { + int available = mBuf.Length - mBufPos; + if (len < available) + { + Array.Copy(inBytes, inOff, mBuf, mBufPos, len); + mBufPos += len; + break; + } + + if (mBufPos >= BufSize) + { + mPoly1305.BlockUpdate(mBuf, 0, BufSize); + ProcessBlock(mBuf, 0, outBytes, outOff); + Array.Copy(mBuf, BufSize, mBuf, 0, mBufPos -= BufSize); + resultLen = BufSize; + + available += BufSize; + if (len < available) + { + Array.Copy(inBytes, inOff, mBuf, mBufPos, len); + mBufPos += len; + break; + } + } + + int inLimit1 = inOff + len - mBuf.Length; + int inLimit2 = inLimit1 - BufSize; + + available = BufSize - mBufPos; + Array.Copy(inBytes, inOff, mBuf, mBufPos, available); + mPoly1305.BlockUpdate(mBuf, 0, BufSize); + ProcessBlock(mBuf, 0, outBytes, outOff + resultLen); + inOff += available; + resultLen += BufSize; + + while (inOff <= inLimit2) + { + mPoly1305.BlockUpdate(inBytes, inOff, BufSize * 2); + ProcessBlocks2(inBytes, inOff, outBytes, outOff + resultLen); + inOff += BufSize * 2; + resultLen += BufSize * 2; + } + + if (inOff <= inLimit1) + { + mPoly1305.BlockUpdate(inBytes, inOff, BufSize); + ProcessBlock(inBytes, inOff, outBytes, outOff + resultLen); + inOff += BufSize; + resultLen += BufSize; + } + + mBufPos = mBuf.Length + inLimit1 - inOff; + Array.Copy(inBytes, inOff, mBuf, 0, mBufPos); + break; + } + case State.EncData: + { + int available = BufSize - mBufPos; + if (len < available) + { + Array.Copy(inBytes, inOff, mBuf, mBufPos, len); + mBufPos += len; + break; + } + + int inLimit1 = inOff + len - BufSize; + int inLimit2 = inLimit1 - BufSize; + + if (mBufPos > 0) + { + Array.Copy(inBytes, inOff, mBuf, mBufPos, available); + ProcessBlock(mBuf, 0, outBytes, outOff); + inOff += available; + resultLen = BufSize; + } + + while (inOff <= inLimit2) + { + ProcessBlocks2(inBytes, inOff, outBytes, outOff + resultLen); + inOff += BufSize * 2; + resultLen += BufSize * 2; + } + + if (inOff <= inLimit1) + { + ProcessBlock(inBytes, inOff, outBytes, outOff + resultLen); + inOff += BufSize; + resultLen += BufSize; + } + + mPoly1305.BlockUpdate(outBytes, outOff, resultLen); + + mBufPos = BufSize + inLimit1 - inOff; + Array.Copy(inBytes, inOff, mBuf, 0, mBufPos); + break; + } + default: + throw new InvalidOperationException(); + } + + return resultLen; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBytes(ReadOnlySpan input, Span output) + { + CheckData(); + + int resultLen = 0; + + switch (mState) + { + case State.DecData: + { + int available = mBuf.Length - mBufPos; + if (input.Length < available) + { + input.CopyTo(mBuf.AsSpan(mBufPos)); + mBufPos += input.Length; + break; + } + + if (mBufPos >= BufSize) + { + mPoly1305.BlockUpdate(mBuf.AsSpan(0, BufSize)); + ProcessBlock(mBuf, output); + Array.Copy(mBuf, BufSize, mBuf, 0, mBufPos -= BufSize); + resultLen = BufSize; + + available += BufSize; + if (input.Length < available) + { + input.CopyTo(mBuf.AsSpan(mBufPos)); + mBufPos += input.Length; + break; + } + } + + int inLimit1 = mBuf.Length; + int inLimit2 = inLimit1 + BufSize; + + available = BufSize - mBufPos; + input[..available].CopyTo(mBuf.AsSpan(mBufPos)); + mPoly1305.BlockUpdate(mBuf.AsSpan(0, BufSize)); + ProcessBlock(mBuf, output[resultLen..]); + input = input[available..]; + resultLen += BufSize; + + while (input.Length >= inLimit2) + { + mPoly1305.BlockUpdate(input[..(BufSize * 2)]); + ProcessBlocks2(input, output[resultLen..]); + input = input[(BufSize * 2)..]; + resultLen += BufSize * 2; + } + + if (input.Length >= inLimit1) + { + mPoly1305.BlockUpdate(input[..BufSize]); + ProcessBlock(input, output[resultLen..]); + input = input[BufSize..]; + resultLen += BufSize; + } + + mBufPos = input.Length; + input.CopyTo(mBuf); + break; + } + case State.EncData: + { + int available = BufSize - mBufPos; + if (input.Length < available) + { + input.CopyTo(mBuf.AsSpan(mBufPos)); + mBufPos += input.Length; + break; + } + + if (mBufPos > 0) + { + input[..available].CopyTo(mBuf.AsSpan(mBufPos)); + ProcessBlock(mBuf, output); + input = input[available..]; + resultLen = BufSize; + } + + while (input.Length >= BufSize * 2) + { + ProcessBlocks2(input, output[resultLen..]); + input = input[(BufSize * 2)..]; + resultLen += BufSize * 2; + } + + if (input.Length >= BufSize) + { + ProcessBlock(input, output[resultLen..]); + input = input[BufSize..]; + resultLen += BufSize; + } + + mPoly1305.BlockUpdate(output[..resultLen]); + + mBufPos = input.Length; + input.CopyTo(mBuf); + break; + } + default: + throw new InvalidOperationException(); + } + + return resultLen; + } +#endif + + public virtual int DoFinal(byte[] outBytes, int outOff) + { + if (null == outBytes) + throw new ArgumentNullException("outBytes"); + if (outOff < 0) + throw new ArgumentException("cannot be negative", "outOff"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(outBytes.AsSpan(outOff)); +#else + CheckData(); + + Array.Clear(mMac, 0, MacSize); + + int resultLen = 0; + + switch (mState) + { + case State.DecData: + { + if (mBufPos < MacSize) + throw new InvalidCipherTextException("data too short"); + + resultLen = mBufPos - MacSize; + + Check.OutputLength(outBytes, outOff, resultLen, "output buffer too short"); + + if (resultLen > 0) + { + mPoly1305.BlockUpdate(mBuf, 0, resultLen); + ProcessData(mBuf, 0, resultLen, outBytes, outOff); + } + + FinishData(State.DecFinal); + + if (!Arrays.ConstantTimeAreEqual(MacSize, mMac, 0, mBuf, resultLen)) + throw new InvalidCipherTextException("mac check in ChaCha20Poly1305 failed"); + + break; + } + case State.EncData: + { + resultLen = mBufPos + MacSize; + + Check.OutputLength(outBytes, outOff, resultLen, "output buffer too short"); + + if (mBufPos > 0) + { + ProcessData(mBuf, 0, mBufPos, outBytes, outOff); + mPoly1305.BlockUpdate(outBytes, outOff, mBufPos); + } + + FinishData(State.EncFinal); + + Array.Copy(mMac, 0, outBytes, outOff + mBufPos, MacSize); + break; + } + default: + throw new InvalidOperationException(); + } + + Reset(false, true); + + return resultLen; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int DoFinal(Span output) + { + CheckData(); + + Array.Clear(mMac, 0, MacSize); + + int resultLen = 0; + + switch (mState) + { + case State.DecData: + { + if (mBufPos < MacSize) + throw new InvalidCipherTextException("data too short"); + + resultLen = mBufPos - MacSize; + + Check.OutputLength(output, resultLen, "output buffer too short"); + + if (resultLen > 0) + { + mPoly1305.BlockUpdate(mBuf, 0, resultLen); + ProcessData(mBuf.AsSpan(0, resultLen), output); + } + + FinishData(State.DecFinal); + + if (!Arrays.ConstantTimeAreEqual(MacSize, mMac, 0, mBuf, resultLen)) + throw new InvalidCipherTextException("mac check in ChaCha20Poly1305 failed"); + + break; + } + case State.EncData: + { + resultLen = mBufPos + MacSize; + + Check.OutputLength(output, resultLen, "output buffer too short"); + + if (mBufPos > 0) + { + ProcessData(mBuf.AsSpan(0, mBufPos), output); + mPoly1305.BlockUpdate(output[..mBufPos]); + } + + FinishData(State.EncFinal); + + mMac.AsSpan(0, MacSize).CopyTo(output[mBufPos..]); + break; + } + default: + throw new InvalidOperationException(); + } + + Reset(false, true); + + return resultLen; + } +#endif + + public virtual byte[] GetMac() + { + return Arrays.Clone(mMac); + } + + public virtual void Reset() + { + Reset(true, true); + } + + private void CheckAad() + { + switch (mState) + { + case State.DecInit: + this.mState = State.DecAad; + break; + case State.EncInit: + this.mState = State.EncAad; + break; + case State.DecAad: + case State.EncAad: + break; + case State.EncFinal: + throw new InvalidOperationException("ChaCha20Poly1305 cannot be reused for encryption"); + default: + throw new InvalidOperationException(); + } + } + + private void CheckData() + { + switch (mState) + { + case State.DecInit: + case State.DecAad: + FinishAad(State.DecData); + break; + case State.EncInit: + case State.EncAad: + FinishAad(State.EncData); + break; + case State.DecData: + case State.EncData: + break; + case State.EncFinal: + throw new InvalidOperationException("ChaCha20Poly1305 cannot be reused for encryption"); + default: + throw new InvalidOperationException(); + } + } + + private void FinishAad(State nextState) + { + PadMac(mAadCount); + + this.mState = nextState; + } + + private void FinishData(State nextState) + { + PadMac(mDataCount); + + byte[] lengths = new byte[16]; + Pack.UInt64_To_LE(mAadCount, lengths, 0); + Pack.UInt64_To_LE(mDataCount, lengths, 8); + mPoly1305.BlockUpdate(lengths, 0, 16); + + mPoly1305.DoFinal(mMac, 0); + + this.mState = nextState; + } + + private ulong IncrementCount(ulong count, uint increment, ulong limit) + { + if (count > (limit - increment)) + throw new InvalidOperationException ("Limit exceeded"); + + return count + increment; + } + + private void InitMac() + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span firstBlock = stackalloc byte[64]; + try + { + mChacha20.ProcessBytes(firstBlock, firstBlock); + mPoly1305.Init(new KeyParameter(firstBlock[..32])); + } + finally + { + firstBlock.Fill(0x00); + } +#else + byte[] firstBlock = new byte[64]; + try + { + mChacha20.ProcessBytes(firstBlock, 0, 64, firstBlock, 0); + mPoly1305.Init(new KeyParameter(firstBlock, 0, 32)); + } + finally + { + Array.Clear(firstBlock, 0, 64); + } +#endif + } + + private void PadMac(ulong count) + { + int partial = (int)count & (MacSize - 1); + if (0 != partial) + { + mPoly1305.BlockUpdate(Zeroes, 0, MacSize - partial); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void ProcessBlock(ReadOnlySpan input, Span output) + { + Check.OutputLength(output, 64, "output buffer too short"); + + mChacha20.ProcessBlock(input, output); + + this.mDataCount = IncrementCount(mDataCount, 64U, DataLimit); + } + + private void ProcessBlocks2(ReadOnlySpan input, Span output) + { + Check.OutputLength(output, 128, "output buffer too short"); + + mChacha20.ProcessBlocks2(input, output); + + this.mDataCount = IncrementCount(mDataCount, 128U, DataLimit); + } + + private void ProcessData(ReadOnlySpan input, Span output) + { + Check.OutputLength(output, input.Length, "output buffer too short"); + + mChacha20.ProcessBytes(input, output); + + this.mDataCount = IncrementCount(mDataCount, (uint)input.Length, DataLimit); + } +#else + private void ProcessBlock(byte[] inBytes, int inOff, byte[] outBytes, int outOff) + { + Check.OutputLength(outBytes, outOff, 64, "output buffer too short"); + + mChacha20.ProcessBlock(inBytes, inOff, outBytes, outOff); + + this.mDataCount = IncrementCount(mDataCount, 64U, DataLimit); + } + + private void ProcessBlocks2(byte[] inBytes, int inOff, byte[] outBytes, int outOff) + { + Check.OutputLength(outBytes, outOff, 128, "output buffer too short"); + + mChacha20.ProcessBlocks2(inBytes, inOff, outBytes, outOff); + + this.mDataCount = IncrementCount(mDataCount, 128U, DataLimit); + } + + private void ProcessData(byte[] inBytes, int inOff, int inLen, byte[] outBytes, int outOff) + { + Check.OutputLength(outBytes, outOff, inLen, "output buffer too short"); + + mChacha20.ProcessBytes(inBytes, inOff, inLen, outBytes, outOff); + + this.mDataCount = IncrementCount(mDataCount, (uint)inLen, DataLimit); + } +#endif + + private void Reset(bool clearMac, bool resetCipher) + { + Array.Clear(mBuf, 0, mBuf.Length); + + if (clearMac) + { + Array.Clear(mMac, 0, mMac.Length); + } + + this.mAadCount = 0UL; + this.mDataCount = 0UL; + this.mBufPos = 0; + + switch (mState) + { + case State.DecInit: + case State.EncInit: + break; + case State.DecAad: + case State.DecData: + case State.DecFinal: + this.mState = State.DecInit; + break; + case State.EncAad: + case State.EncData: + case State.EncFinal: + this.mState = State.EncFinal; + return; + default: + throw new InvalidOperationException(); + } + + if (resetCipher) + { + mChacha20.Reset(); + } + + InitMac(); + + if (null != mInitialAad) + { + ProcessAadBytes(mInitialAad, 0, mInitialAad.Length); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/ChaCha20Poly1305.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/ChaCha20Poly1305.cs.meta new file mode 100644 index 000000000..6ff813adb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/ChaCha20Poly1305.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 3ba6afc9d54963d429c086b1ce19c924 +timeCreated: 1572510028 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CtsBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CtsBlockCipher.cs new file mode 100644 index 000000000..62ede1aec --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CtsBlockCipher.cs @@ -0,0 +1,353 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes +{ + /** + * A Cipher Text Stealing (CTS) mode cipher. CTS allows block ciphers to + * be used to produce cipher text which is the same outLength as the plain text. + */ + public class CtsBlockCipher + : BufferedBlockCipher + { + private readonly int blockSize; + + public CtsBlockCipher(IBlockCipher cipher) + : this(EcbBlockCipher.GetBlockCipherMode(cipher)) + { + } + + /** + * Create a buffered block cipher that uses Cipher Text Stealing + * + * @param cipher the underlying block cipher this buffering object wraps. + */ + public CtsBlockCipher(IBlockCipherMode cipherMode) + { + if (!(cipherMode is CbcBlockCipher || cipherMode is EcbBlockCipher)) + throw new ArgumentException("CtsBlockCipher can only accept ECB, or CBC ciphers"); + + m_cipherMode = cipherMode; + + blockSize = cipherMode.GetBlockSize(); + + buf = new byte[blockSize * 2]; + bufOff = 0; + } + + /** + * return the size of the output buffer required for an update of 'length' bytes. + * + * @param length the outLength of the input. + * @return the space required to accommodate a call to update + * with length bytes of input. + */ + public override int GetUpdateOutputSize( + int length) + { + int total = length + bufOff; + int leftOver = total % buf.Length; + + if (leftOver == 0) + { + return total - buf.Length; + } + + return total - leftOver; + } + + /** + * return the size of the output buffer required for an update plus a + * doFinal with an input of length bytes. + * + * @param length the outLength of the input. + * @return the space required to accommodate a call to update and doFinal + * with length bytes of input. + */ + public override int GetOutputSize( + int length) + { + return length + bufOff; + } + + /** + * process a single byte, producing an output block if necessary. + * + * @param in the input byte. + * @param out the space for any output that might be produced. + * @param outOff the offset from which the output will be copied. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there isn't enough space in out. + * @exception InvalidOperationException if the cipher isn't initialised. + */ + public override int ProcessByte(byte input, byte[] output, int outOff) + { + int resultLen = 0; + + if (bufOff == buf.Length) + { + resultLen = m_cipherMode.ProcessBlock(buf, 0, output, outOff); + Debug.Assert(resultLen == blockSize); + + Array.Copy(buf, blockSize, buf, 0, blockSize); + bufOff = blockSize; + } + + buf[bufOff++] = input; + + return resultLen; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int ProcessByte(byte input, Span output) + { + int resultLen = 0; + + if (bufOff == buf.Length) + { + resultLen = m_cipherMode.ProcessBlock(buf, output); + Debug.Assert(resultLen == blockSize); + + Array.Copy(buf, blockSize, buf, 0, blockSize); + bufOff = blockSize; + } + + buf[bufOff++] = input; + + return resultLen; + } +#endif + + /** + * process an array of bytes, producing output if necessary. + * + * @param in the input byte array. + * @param inOff the offset at which the input data starts. + * @param length the number of bytes to be copied out of the input array. + * @param out the space for any output that might be produced. + * @param outOff the offset from which the output will be copied. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there isn't enough space in out. + * @exception InvalidOperationException if the cipher isn't initialised. + */ + public override int ProcessBytes(byte[] input, int inOff, int length, byte[] output, int outOff) + { + if (length < 0) + throw new ArgumentException("Can't have a negative input length!"); + + int blockSize = GetBlockSize(); + int outLength = GetUpdateOutputSize(length); + + if (outLength > 0) + { + Check.OutputLength(output, outOff, outLength, "output buffer too short"); + } + + int resultLen = 0; + int gapLen = buf.Length - bufOff; + + if (length > gapLen) + { + Array.Copy(input, inOff, buf, bufOff, gapLen); + + resultLen = m_cipherMode.ProcessBlock(buf, 0, output, outOff); + Array.Copy(buf, blockSize, buf, 0, blockSize); + + bufOff = blockSize; + + length -= gapLen; + inOff += gapLen; + + while (length > blockSize) + { + Array.Copy(input, inOff, buf, bufOff, blockSize); + resultLen += m_cipherMode.ProcessBlock(buf, 0, output, outOff + resultLen); + Array.Copy(buf, blockSize, buf, 0, blockSize); + + length -= blockSize; + inOff += blockSize; + } + } + + Array.Copy(input, inOff, buf, bufOff, length); + + bufOff += length; + + return resultLen; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int ProcessBytes(ReadOnlySpan input, Span output) + { + int blockSize = GetBlockSize(); + int outLength = GetUpdateOutputSize(input.Length); + + if (outLength > 0) + { + Check.OutputLength(output, outLength, "output buffer too short"); + } + + int resultLen = 0; + int gapLen = buf.Length - bufOff; + + if (input.Length > gapLen) + { + input[..gapLen].CopyTo(buf.AsSpan(bufOff)); + + resultLen = m_cipherMode.ProcessBlock(buf, output); + Array.Copy(buf, blockSize, buf, 0, blockSize); + + bufOff = blockSize; + + input = input[gapLen..]; + + while (input.Length > blockSize) + { + input[..blockSize].CopyTo(buf.AsSpan(bufOff)); + resultLen += m_cipherMode.ProcessBlock(buf, output[resultLen..]); + Array.Copy(buf, blockSize, buf, 0, blockSize); + + input = input[blockSize..]; + } + } + + input.CopyTo(buf.AsSpan(bufOff)); + + bufOff += input.Length; + + return resultLen; + } +#endif + + /** + * Process the last block in the buffer. + * + * @param out the array the block currently being held is copied into. + * @param outOff the offset at which the copying starts. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there is insufficient space in out for + * the output. + * @exception InvalidOperationException if the underlying cipher is not + * initialised. + * @exception InvalidCipherTextException if cipher text decrypts wrongly (in + * case the exception will never Get thrown). + */ + public override int DoFinal(byte[] output, int outOff) + { + if (bufOff + outOff > output.Length) + throw new DataLengthException("output buffer too small in DoFinal"); + + int blockSize = m_cipherMode.GetBlockSize(); + int length = bufOff - blockSize; + byte[] block = new byte[blockSize]; + + if (forEncryption) + { + m_cipherMode.ProcessBlock(buf, 0, block, 0); + + if (bufOff < blockSize) + throw new DataLengthException("need at least one block of input for CTS"); + + for (int i = bufOff; i != buf.Length; i++) + { + buf[i] = block[i - blockSize]; + } + + for (int i = blockSize; i != bufOff; i++) + { + buf[i] ^= block[i - blockSize]; + } + + m_cipherMode.UnderlyingCipher.ProcessBlock(buf, blockSize, output, outOff); + + Array.Copy(block, 0, output, outOff + blockSize, length); + } + else + { + byte[] lastBlock = new byte[blockSize]; + + m_cipherMode.UnderlyingCipher.ProcessBlock(buf, 0, block, 0); + + for (int i = blockSize; i != bufOff; i++) + { + lastBlock[i - blockSize] = (byte)(block[i - blockSize] ^ buf[i]); + } + + Array.Copy(buf, blockSize, block, 0, length); + + m_cipherMode.ProcessBlock(block, 0, output, outOff); + Array.Copy(lastBlock, 0, output, outOff + blockSize, length); + } + + int offset = bufOff; + + Reset(); + + return offset; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + if (bufOff > output.Length) + throw new DataLengthException("output buffer too small in DoFinal"); + + int blockSize = m_cipherMode.GetBlockSize(); + int length = bufOff - blockSize; + Span block = blockSize <= 64 + ? stackalloc byte[blockSize] + : new byte[blockSize]; + + if (forEncryption) + { + m_cipherMode.ProcessBlock(buf, block); + + if (bufOff < blockSize) + throw new DataLengthException("need at least one block of input for CTS"); + + for (int i = bufOff; i != buf.Length; i++) + { + buf[i] = block[i - blockSize]; + } + + for (int i = blockSize; i != bufOff; i++) + { + buf[i] ^= block[i - blockSize]; + } + + m_cipherMode.UnderlyingCipher.ProcessBlock(buf.AsSpan(blockSize), output); + + block[..length].CopyTo(output[blockSize..]); + } + else + { + Span lastBlock = blockSize <= 64 + ? stackalloc byte[blockSize] + : new byte[blockSize]; + + m_cipherMode.UnderlyingCipher.ProcessBlock(buf, block); + + for (int i = blockSize; i != bufOff; i++) + { + lastBlock[i - blockSize] = (byte)(block[i - blockSize] ^ buf[i]); + } + + buf.AsSpan(blockSize, length).CopyTo(block); + + m_cipherMode.ProcessBlock(block, output); + lastBlock[..length].CopyTo(output[blockSize..]); + } + + int offset = bufOff; + + Reset(); + + return offset; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CtsBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CtsBlockCipher.cs.meta new file mode 100644 index 000000000..282052a23 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/CtsBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d853fe439c7b3cd42be0ebc115faebc1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/EAXBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/EAXBlockCipher.cs new file mode 100644 index 000000000..a8dbd51c4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/EAXBlockCipher.cs @@ -0,0 +1,506 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes +{ + /** + * A Two-Pass Authenticated-Encryption Scheme Optimized for Simplicity and + * Efficiency - by M. Bellare, P. Rogaway, D. Wagner. + * + * http://www.cs.ucdavis.edu/~rogaway/papers/eax.pdf + * + * EAX is an AEAD scheme based on CTR and OMAC1/CMAC, that uses a single block + * cipher to encrypt and authenticate data. It's on-line (the length of a + * message isn't needed to begin processing it), has good performances, it's + * simple and provably secure (provided the underlying block cipher is secure). + * + * Of course, this implementations is NOT thread-safe. + */ + public class EaxBlockCipher + : IAeadBlockCipher + { + private enum Tag : byte { N, H, C }; + + private SicBlockCipher cipher; + + private bool forEncryption; + + private int blockSize; + + private IMac mac; + + private byte[] nonceMac; + private byte[] associatedTextMac; + private byte[] macBlock; + + private int macSize; + private byte[] bufBlock; + private int bufOff; + + private bool cipherInitialized; + private byte[] initialAssociatedText; + + /** + * Constructor that accepts an instance of a block cipher engine. + * + * @param cipher the engine to use + */ + public EaxBlockCipher( + IBlockCipher cipher) + { + blockSize = cipher.GetBlockSize(); + mac = new CMac(cipher); + macBlock = new byte[blockSize]; + associatedTextMac = new byte[mac.GetMacSize()]; + nonceMac = new byte[mac.GetMacSize()]; + this.cipher = new SicBlockCipher(cipher); + } + + public virtual string AlgorithmName => cipher.UnderlyingCipher.AlgorithmName + "/EAX"; + + public virtual IBlockCipher UnderlyingCipher => cipher; + + public virtual int GetBlockSize() + { + return cipher.GetBlockSize(); + } + + public virtual void Init(bool forEncryption, ICipherParameters parameters) + { + this.forEncryption = forEncryption; + + byte[] nonce; + ICipherParameters keyParam; + + if (parameters is AeadParameters aeadParameters) + { + nonce = aeadParameters.GetNonce(); + initialAssociatedText = aeadParameters.GetAssociatedText(); + macSize = aeadParameters.MacSize / 8; + keyParam = aeadParameters.Key; + } + else if (parameters is ParametersWithIV parametersWithIV) + { + nonce = parametersWithIV.GetIV(); + initialAssociatedText = null; + macSize = mac.GetMacSize() / 2; + keyParam = parametersWithIV.Parameters; + } + else + { + throw new ArgumentException("invalid parameters passed to EAX"); + } + + bufBlock = new byte[forEncryption ? blockSize : (blockSize + macSize)]; + + byte[] tag = new byte[blockSize]; + + // Key reuse implemented in CBC mode of underlying CMac + mac.Init(keyParam); + + tag[blockSize - 1] = (byte)Tag.N; + mac.BlockUpdate(tag, 0, blockSize); + mac.BlockUpdate(nonce, 0, nonce.Length); + mac.DoFinal(nonceMac, 0); + + // Same BlockCipher underlies this and the mac, so reuse last key on cipher + cipher.Init(true, new ParametersWithIV(null, nonceMac)); + + Reset(); + } + + private void InitCipher() + { + if (cipherInitialized) + { + return; + } + + cipherInitialized = true; + + mac.DoFinal(associatedTextMac, 0); + + byte[] tag = new byte[blockSize]; + tag[blockSize - 1] = (byte)Tag.C; + mac.BlockUpdate(tag, 0, blockSize); + } + + private void CalculateMac() + { + byte[] outC = new byte[blockSize]; + mac.DoFinal(outC, 0); + + for (int i = 0; i < macBlock.Length; i++) + { + macBlock[i] = (byte)(nonceMac[i] ^ associatedTextMac[i] ^ outC[i]); + } + } + + public virtual void Reset() + { + Reset(true); + } + + private void Reset( + bool clearMac) + { + cipher.Reset(); // TODO Redundant since the mac will reset it? + mac.Reset(); + + bufOff = 0; + Array.Clear(bufBlock, 0, bufBlock.Length); + + if (clearMac) + { + Array.Clear(macBlock, 0, macBlock.Length); + } + + byte[] tag = new byte[blockSize]; + tag[blockSize - 1] = (byte)Tag.H; + mac.BlockUpdate(tag, 0, blockSize); + + cipherInitialized = false; + + if (initialAssociatedText != null) + { + ProcessAadBytes(initialAssociatedText, 0, initialAssociatedText.Length); + } + } + + public virtual void ProcessAadByte(byte input) + { + if (cipherInitialized) + { + throw new InvalidOperationException("AAD data cannot be added after encryption/decryption processing has begun."); + } + mac.Update(input); + } + + public virtual void ProcessAadBytes(byte[] inBytes, int inOff, int len) + { + if (cipherInitialized) + throw new InvalidOperationException("AAD data cannot be added after encryption/decryption processing has begun."); + + mac.BlockUpdate(inBytes, inOff, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void ProcessAadBytes(ReadOnlySpan input) + { + if (cipherInitialized) + throw new InvalidOperationException("AAD data cannot be added after encryption/decryption processing has begun."); + + mac.BlockUpdate(input); + } +#endif + + public virtual int ProcessByte(byte input, byte[] outBytes, int outOff) + { + InitCipher(); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return Process(input, Spans.FromNullable(outBytes, outOff)); +#else + return Process(input, outBytes, outOff); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessByte(byte input, Span output) + { + InitCipher(); + + return Process(input, output); + } +#endif + + public virtual int ProcessBytes(byte[] inBytes, int inOff, int len, byte[] outBytes, int outOff) + { + InitCipher(); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ProcessBytes(inBytes.AsSpan(inOff, len), Spans.FromNullable(outBytes, outOff)); +#else + int resultLen = 0; + + for (int i = 0; i != len; i++) + { + resultLen += Process(inBytes[inOff + i], outBytes, outOff + resultLen); + } + + return resultLen; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBytes(ReadOnlySpan input, Span output) + { + InitCipher(); + + int len = input.Length; + int resultLen = 0; + + for (int i = 0; i != len; i++) + { + resultLen += Process(input[i], output[resultLen..]); + } + + return resultLen; + } +#endif + + public virtual int DoFinal(byte[] outBytes, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(outBytes.AsSpan(outOff)); +#else + InitCipher(); + + int extra = bufOff; + byte[] tmp = new byte[bufBlock.Length]; + + bufOff = 0; + + if (forEncryption) + { + Check.OutputLength(outBytes, outOff, extra + macSize, "output buffer too short"); + + cipher.ProcessBlock(bufBlock, 0, tmp, 0); + + Array.Copy(tmp, 0, outBytes, outOff, extra); + + mac.BlockUpdate(tmp, 0, extra); + + CalculateMac(); + + Array.Copy(macBlock, 0, outBytes, outOff + extra, macSize); + + Reset(false); + + return extra + macSize; + } + else + { + if (extra < macSize) + throw new InvalidCipherTextException("data too short"); + + Check.OutputLength(outBytes, outOff, extra - macSize, "output buffer too short"); + + if (extra > macSize) + { + mac.BlockUpdate(bufBlock, 0, extra - macSize); + + cipher.ProcessBlock(bufBlock, 0, tmp, 0); + + Array.Copy(tmp, 0, outBytes, outOff, extra - macSize); + } + + CalculateMac(); + + if (!VerifyMac(bufBlock, extra - macSize)) + throw new InvalidCipherTextException("mac check in EAX failed"); + + Reset(false); + + return extra - macSize; + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int DoFinal(Span output) + { + InitCipher(); + + int extra = bufOff; + int tmpLength = bufBlock.Length; + + Span tmp = tmpLength <= 128 + ? stackalloc byte[tmpLength] + : new byte[tmpLength]; + + bufOff = 0; + + if (forEncryption) + { + Check.OutputLength(output, extra + macSize, "output buffer too short"); + + cipher.ProcessBlock(bufBlock, tmp); + + tmp[..extra].CopyTo(output); + + mac.BlockUpdate(tmp[..extra]); + + CalculateMac(); + + macBlock.AsSpan(0, macSize).CopyTo(output[extra..]); + + Reset(false); + + return extra + macSize; + } + else + { + if (extra < macSize) + throw new InvalidCipherTextException("data too short"); + + Check.OutputLength(output, extra - macSize, "output buffer too short"); + + if (extra > macSize) + { + mac.BlockUpdate(bufBlock.AsSpan(0, extra - macSize)); + + cipher.ProcessBlock(bufBlock, tmp); + + tmp[..(extra - macSize)].CopyTo(output); + } + + CalculateMac(); + + if (!VerifyMac(bufBlock, extra - macSize)) + throw new InvalidCipherTextException("mac check in EAX failed"); + + Reset(false); + + return extra - macSize; + } + } +#endif + + public virtual byte[] GetMac() + { + byte[] mac = new byte[macSize]; + + Array.Copy(macBlock, 0, mac, 0, macSize); + + return mac; + } + + public virtual int GetUpdateOutputSize( + int len) + { + int totalData = len + bufOff; + if (!forEncryption) + { + if (totalData < macSize) + { + return 0; + } + totalData -= macSize; + } + return totalData - totalData % blockSize; + } + + public virtual int GetOutputSize( + int len) + { + int totalData = len + bufOff; + + if (forEncryption) + { + return totalData + macSize; + } + + return totalData < macSize ? 0 : totalData - macSize; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int Process(byte b, Span output) + { + bufBlock[bufOff++] = b; + + if (bufOff == bufBlock.Length) + { + Check.OutputLength(output, blockSize, "output buffer too short"); + + // TODO Could move the ProcessByte(s) calls to here + //InitCipher(); + + int size; + + if (forEncryption) + { + size = cipher.ProcessBlock(bufBlock, output); + + mac.BlockUpdate(output[..blockSize]); + } + else + { + mac.BlockUpdate(bufBlock.AsSpan(0, blockSize)); + + size = cipher.ProcessBlock(bufBlock, output); + } + + bufOff = 0; + if (!forEncryption) + { + Array.Copy(bufBlock, blockSize, bufBlock, 0, macSize); + bufOff = macSize; + } + + return size; + } + + return 0; + } +#else + private int Process(byte b, byte[] outBytes, int outOff) + { + bufBlock[bufOff++] = b; + + if (bufOff == bufBlock.Length) + { + Check.OutputLength(outBytes, outOff, blockSize, "Output buffer is too short"); + + // TODO Could move the ProcessByte(s) calls to here +// InitCipher(); + + int size; + + if (forEncryption) + { + size = cipher.ProcessBlock(bufBlock, 0, outBytes, outOff); + + mac.BlockUpdate(outBytes, outOff, blockSize); + } + else + { + mac.BlockUpdate(bufBlock, 0, blockSize); + + size = cipher.ProcessBlock(bufBlock, 0, outBytes, outOff); + } + + bufOff = 0; + if (!forEncryption) + { + Array.Copy(bufBlock, blockSize, bufBlock, 0, macSize); + bufOff = macSize; + } + + return size; + } + + return 0; + } +#endif + + private bool VerifyMac(byte[] mac, int off) + { + int nonEqual = 0; + + for (int i = 0; i < macSize; i++) + { + nonEqual |= (macBlock[i] ^ mac[off + i]); + } + + return nonEqual == 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/EAXBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/EAXBlockCipher.cs.meta new file mode 100644 index 000000000..bcc886ad0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/EAXBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 56a798d87f3f7d741b9de7bff3c6622e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/EcbBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/EcbBlockCipher.cs new file mode 100644 index 000000000..467f82eb2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/EcbBlockCipher.cs @@ -0,0 +1,62 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes +{ + public class EcbBlockCipher + : IBlockCipherMode + { + internal static IBlockCipherMode GetBlockCipherMode(IBlockCipher blockCipher) + { + if (blockCipher is IBlockCipherMode blockCipherMode) + return blockCipherMode; + + return new EcbBlockCipher(blockCipher); + } + + private readonly IBlockCipher m_cipher; + + public EcbBlockCipher(IBlockCipher cipher) + { + if (cipher == null) + throw new ArgumentNullException(nameof(cipher)); + + m_cipher = cipher; + } + + public bool IsPartialBlockOkay => false; + + public string AlgorithmName => m_cipher.AlgorithmName + "/ECB"; + + public int GetBlockSize() + { + return m_cipher.GetBlockSize(); + } + + public IBlockCipher UnderlyingCipher => m_cipher; + + public void Init(bool forEncryption, ICipherParameters parameters) + { + m_cipher.Init(forEncryption, parameters); + } + + public int ProcessBlock(byte[] inBuf, int inOff, byte[] outBuf, int outOff) + { + return m_cipher.ProcessBlock(inBuf, inOff, outBuf, outOff); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessBlock(ReadOnlySpan input, Span output) + { + return m_cipher.ProcessBlock(input, output); + } +#endif + + public void Reset() + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/EcbBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/EcbBlockCipher.cs.meta new file mode 100644 index 000000000..ca8303a61 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/EcbBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fa9cffbd193364f42914635a318885f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/GCMBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/GCMBlockCipher.cs new file mode 100644 index 000000000..2fca67fd4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/GCMBlockCipher.cs @@ -0,0 +1,1505 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ +using System.Runtime.CompilerServices; +#endif +#if NETCOREAPP3_0_OR_GREATER +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes.Gcm; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes +{ + /// + /// Implements the Galois/Counter mode (GCM) detailed in NIST Special Publication 800-38D. + /// + public sealed class GcmBlockCipher + : IAeadBlockCipher + { + private static IGcmMultiplier CreateGcmMultiplier() + { +#if NETCOREAPP3_0_OR_GREATER + // TODO Prefer more tightly coupled test + if (Pclmulqdq.IsSupported) + { + return new BasicGcmMultiplier(); + } +#endif + + return new Tables4kGcmMultiplier(); + } + + private const int BlockSize = 16; + byte[] ctrBlock = new byte[BlockSize]; + + private readonly IBlockCipher cipher; + private readonly IGcmMultiplier multiplier; + private IGcmExponentiator exp; + + // These fields are set by Init and not modified by processing + private bool forEncryption; + private bool initialised; + private int macSize; + private byte[] lastKey; + private byte[] nonce; + private byte[] initialAssociatedText; + private byte[] H; + private byte[] J0; + + // These fields are modified during processing + private byte[] bufBlock; + private byte[] macBlock; + private byte[] S, S_at, S_atPre; + private byte[] counter; + private uint counter32; + private uint blocksRemaining; + private int bufOff; + private ulong totalLength; + private byte[] atBlock; + private int atBlockPos; + private ulong atLength; + private ulong atLengthPre; + + public GcmBlockCipher( + IBlockCipher c) + : this(c, null) + { + } + + public GcmBlockCipher( + IBlockCipher c, + IGcmMultiplier m) + { + if (c.GetBlockSize() != BlockSize) + throw new ArgumentException("cipher required with a block size of " + BlockSize + "."); + + if (m == null) + { + m = CreateGcmMultiplier(); + } + + this.cipher = c; + this.multiplier = m; + } + + public string AlgorithmName => cipher.AlgorithmName + "/GCM"; + + public IBlockCipher UnderlyingCipher => cipher; + + public int GetBlockSize() + { + return BlockSize; + } + + /// + /// MAC sizes from 32 bits to 128 bits (must be a multiple of 8) are supported. The default is 128 bits. + /// Sizes less than 96 are not recommended, but are supported for specialized applications. + /// + public void Init(bool forEncryption, ICipherParameters parameters) + { + this.forEncryption = forEncryption; + this.macBlock = null; + this.initialised = true; + + KeyParameter keyParam; + byte[] newNonce; + + if (parameters is AeadParameters) + { + AeadParameters param = (AeadParameters)parameters; + + newNonce = param.GetNonce(); + initialAssociatedText = param.GetAssociatedText(); + + int macSizeBits = param.MacSize; + if (macSizeBits < 32 || macSizeBits > 128 || macSizeBits % 8 != 0) + { + throw new ArgumentException("Invalid value for MAC size: " + macSizeBits); + } + + macSize = macSizeBits / 8; + keyParam = param.Key; + } + else if (parameters is ParametersWithIV) + { + ParametersWithIV param = (ParametersWithIV)parameters; + + newNonce = param.GetIV(); + initialAssociatedText = null; + macSize = 16; + keyParam = (KeyParameter)param.Parameters; + } + else + { + throw new ArgumentException("invalid parameters passed to GCM"); + } + + int bufLength = forEncryption ? BlockSize : (BlockSize + macSize); + this.bufBlock = new byte[bufLength]; + + if (newNonce == null || newNonce.Length < 1) + { + throw new ArgumentException("IV must be at least 1 byte"); + } + + if (forEncryption) + { + if (nonce != null && Arrays.AreEqual(nonce, newNonce)) + { + if (keyParam == null) + { + throw new ArgumentException("cannot reuse nonce for GCM encryption"); + } + if (lastKey != null && Arrays.AreEqual(lastKey, keyParam.GetKey())) + { + throw new ArgumentException("cannot reuse nonce for GCM encryption"); + } + } + } + + nonce = newNonce; + if (keyParam != null) + { + lastKey = keyParam.GetKey(); + } + + // TODO Restrict macSize to 16 if nonce length not 12? + + // Cipher always used in forward mode + // if keyParam is null we're reusing the last key. + if (keyParam != null) + { + cipher.Init(true, keyParam); + + this.H = new byte[BlockSize]; + cipher.ProcessBlock(H, 0, H, 0); + + // if keyParam is null we're reusing the last key and the multiplier doesn't need re-init + multiplier.Init(H); + exp = null; + } + else if (this.H == null) + { + throw new ArgumentException("Key must be specified in initial init"); + } + + this.J0 = new byte[BlockSize]; + + if (nonce.Length == 12) + { + Array.Copy(nonce, 0, J0, 0, nonce.Length); + this.J0[BlockSize - 1] = 0x01; + } + else + { + gHASH(J0, nonce, nonce.Length); + byte[] X = new byte[BlockSize]; + Pack.UInt64_To_BE((ulong)nonce.Length * 8UL, X, 8); + gHASHBlock(J0, X); + } + + this.S = new byte[BlockSize]; + this.S_at = new byte[BlockSize]; + this.S_atPre = new byte[BlockSize]; + this.atBlock = new byte[BlockSize]; + this.atBlockPos = 0; + this.atLength = 0; + this.atLengthPre = 0; + this.counter = Arrays.Clone(J0); + this.counter32 = Pack.BE_To_UInt32(counter, 12); + this.blocksRemaining = uint.MaxValue - 1; // page 8, len(P) <= 2^39 - 256, 1 block used by tag + this.bufOff = 0; + this.totalLength = 0; + + if (initialAssociatedText != null) + { + ProcessAadBytes(initialAssociatedText, 0, initialAssociatedText.Length); + } + } + + public byte[] GetMac() + { + return macBlock == null + ? new byte[macSize] + : Arrays.Clone(macBlock); + } + + public int GetOutputSize(int len) + { + int totalData = len + bufOff; + + if (forEncryption) + { + return totalData + macSize; + } + + return totalData < macSize ? 0 : totalData - macSize; + } + + public int GetUpdateOutputSize(int len) + { + int totalData = len + bufOff; + if (!forEncryption) + { + if (totalData < macSize) + { + return 0; + } + totalData -= macSize; + } + return totalData - totalData % BlockSize; + } + + public void ProcessAadByte(byte input) + { + CheckStatus(); + + atBlock[atBlockPos] = input; + if (++atBlockPos == BlockSize) + { + // Hash each block as it fills + gHASHBlock(S_at, atBlock); + atBlockPos = 0; + atLength += BlockSize; + } + } + + public void ProcessAadBytes(byte[] inBytes, int inOff, int len) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ProcessAadBytes(inBytes.AsSpan(inOff, len)); +#else + CheckStatus(); + + if (atBlockPos > 0) + { + int available = BlockSize - atBlockPos; + if (len < available) + { + Array.Copy(inBytes, inOff, atBlock, atBlockPos, len); + atBlockPos += len; + return; + } + + Array.Copy(inBytes, inOff, atBlock, atBlockPos, available); + gHASHBlock(S_at, atBlock); + atLength += BlockSize; + inOff += available; + len -= available; + //atBlockPos = 0; + } + + int inLimit = inOff + len - BlockSize; + + while (inOff <= inLimit) + { + gHASHBlock(S_at, inBytes, inOff); + atLength += BlockSize; + inOff += BlockSize; + } + + atBlockPos = BlockSize + inLimit - inOff; + Array.Copy(inBytes, inOff, atBlock, 0, atBlockPos); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void ProcessAadBytes(ReadOnlySpan input) + { + CheckStatus(); + + if (atBlockPos > 0) + { + int available = BlockSize - atBlockPos; + if (input.Length < available) + { + input.CopyTo(atBlock.AsSpan(atBlockPos)); + atBlockPos += input.Length; + return; + } + + input[..available].CopyTo(atBlock.AsSpan(atBlockPos)); + gHASHBlock(S_at, atBlock); + atLength += BlockSize; + input = input[available..]; + //atBlockPos = 0; + } + + while (input.Length >= BlockSize) + { + gHASHBlock(S_at, input); + atLength += BlockSize; + input = input[BlockSize..]; + } + + input.CopyTo(atBlock); + atBlockPos = input.Length; + } +#endif + + private void InitCipher() + { + if (atLength > 0) + { + Array.Copy(S_at, 0, S_atPre, 0, BlockSize); + atLengthPre = atLength; + } + + // Finish hash for partial AAD block + if (atBlockPos > 0) + { + gHASHPartial(S_atPre, atBlock, 0, atBlockPos); + atLengthPre += (uint)atBlockPos; + } + + if (atLengthPre > 0) + { + Array.Copy(S_atPre, 0, S, 0, BlockSize); + } + } + + public int ProcessByte(byte input, byte[] output, int outOff) + { + CheckStatus(); + + bufBlock[bufOff] = input; + if (++bufOff == bufBlock.Length) + { + if (forEncryption) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + EncryptBlock(bufBlock, output.AsSpan(outOff)); +#else + EncryptBlock(bufBlock, 0, output, outOff); +#endif + bufOff = 0; + } + else + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + DecryptBlock(bufBlock, output.AsSpan(outOff)); +#else + DecryptBlock(bufBlock, 0, output, outOff); +#endif + Array.Copy(bufBlock, BlockSize, bufBlock, 0, macSize); + bufOff = macSize; + } + return BlockSize; + } + return 0; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessByte(byte input, Span output) + { + CheckStatus(); + + bufBlock[bufOff] = input; + if (++bufOff == bufBlock.Length) + { + if (forEncryption) + { + EncryptBlock(bufBlock, output); + bufOff = 0; + } + else + { + DecryptBlock(bufBlock, output); + Array.Copy(bufBlock, BlockSize, bufBlock, 0, macSize); + bufOff = macSize; + } + return BlockSize; + } + return 0; + } +#endif + + public int ProcessBytes(byte[] input, int inOff, int len, byte[] output, int outOff) + { + CheckStatus(); + + Check.DataLength(input, inOff, len, "input buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ProcessBytes(input.AsSpan(inOff, len), Spans.FromNullable(output, outOff)); +#else + int resultLen = 0; + + if (forEncryption) + { + if (bufOff > 0) + { + int available = BlockSize - bufOff; + if (len < available) + { + Array.Copy(input, inOff, bufBlock, bufOff, len); + bufOff += len; + return 0; + } + + Array.Copy(input, inOff, bufBlock, bufOff, available); + EncryptBlock(bufBlock, 0, output, outOff); + inOff += available; + len -= available; + resultLen = BlockSize; + //bufOff = 0; + } + + int inLimit1 = inOff + len - BlockSize; + int inLimit2 = inLimit1 - BlockSize; + + while (inOff <= inLimit2) + { + EncryptBlocks2(input, inOff, output, outOff + resultLen); + inOff += BlockSize * 2; + resultLen += BlockSize * 2; + } + + if (inOff <= inLimit1) + { + EncryptBlock(input, inOff, output, outOff + resultLen); + inOff += BlockSize; + resultLen += BlockSize; + } + + bufOff = BlockSize + inLimit1 - inOff; + Array.Copy(input, inOff, bufBlock, 0, bufOff); + } + else + { + int available = bufBlock.Length - bufOff; + if (len < available) + { + Array.Copy(input, inOff, bufBlock, bufOff, len); + bufOff += len; + return 0; + } + + if (bufOff >= BlockSize) + { + DecryptBlock(bufBlock, 0, output, outOff); + Array.Copy(bufBlock, BlockSize, bufBlock, 0, bufOff -= BlockSize); + resultLen = BlockSize; + + available += BlockSize; + if (len < available) + { + Array.Copy(input, inOff, bufBlock, bufOff, len); + bufOff += len; + return resultLen; + } + } + + int inLimit1 = inOff + len - bufBlock.Length; + int inLimit2 = inLimit1 - BlockSize; + + available = BlockSize - bufOff; + Array.Copy(input, inOff, bufBlock, bufOff, available); + DecryptBlock(bufBlock, 0, output, outOff + resultLen); + inOff += available; + resultLen += BlockSize; + //bufOff = 0; + + while (inOff <= inLimit2) + { + DecryptBlocks2(input, inOff, output, outOff + resultLen); + inOff += BlockSize * 2; + resultLen += BlockSize * 2; + } + + if (inOff <= inLimit1) + { + DecryptBlock(input, inOff, output, outOff + resultLen); + inOff += BlockSize; + resultLen += BlockSize; + } + + bufOff = bufBlock.Length + inLimit1 - inOff; + Array.Copy(input, inOff, bufBlock, 0, bufOff); + } + + return resultLen; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessBytes(ReadOnlySpan input, Span output) + { + CheckStatus(); + + int resultLen = 0; + + if (forEncryption) + { + if (bufOff > 0) + { + int available = BlockSize - bufOff; + if (input.Length < available) + { + input.CopyTo(bufBlock.AsSpan(bufOff)); + bufOff += input.Length; + return 0; + } + + input[..available].CopyTo(bufBlock.AsSpan(bufOff)); + EncryptBlock(bufBlock, output); + input = input[available..]; + resultLen = BlockSize; + //bufOff = 0; + } + + while (input.Length >= BlockSize * 2) + { + EncryptBlocks2(input, output[resultLen..]); + input = input[(BlockSize * 2)..]; + resultLen += BlockSize * 2; + } + + if (input.Length >= BlockSize) + { + EncryptBlock(input, output[resultLen..]); + input = input[BlockSize..]; + resultLen += BlockSize; + } + + bufOff = input.Length; + input.CopyTo(bufBlock); + } + else + { + int available = bufBlock.Length - bufOff; + if (input.Length < available) + { + input.CopyTo(bufBlock.AsSpan(bufOff)); + bufOff += input.Length; + return 0; + } + + if (bufOff >= BlockSize) + { + DecryptBlock(bufBlock, output); + Array.Copy(bufBlock, BlockSize, bufBlock, 0, bufOff -= BlockSize); + resultLen = BlockSize; + + available += BlockSize; + if (input.Length < available) + { + input.CopyTo(bufBlock.AsSpan(bufOff)); + bufOff += input.Length; + return resultLen; + } + } + + int inLimit1 = bufBlock.Length; + int inLimit2 = inLimit1 + BlockSize; + + available = BlockSize - bufOff; + input[..available].CopyTo(bufBlock.AsSpan(bufOff)); + DecryptBlock(bufBlock, output[resultLen..]); + input = input[available..]; + resultLen += BlockSize; + //bufOff = 0; + + while (input.Length >= inLimit2) + { + DecryptBlocks2(input, output[resultLen..]); + input = input[(BlockSize * 2)..]; + resultLen += BlockSize * 2; + } + + if (input.Length >= inLimit1) + { + DecryptBlock(input, output[resultLen..]); + input = input[BlockSize..]; + resultLen += BlockSize; + } + + bufOff = input.Length; + input.CopyTo(bufBlock); + } + + return resultLen; + } +#endif + + public int DoFinal(byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(output.AsSpan(outOff)); +#else + CheckStatus(); + + if (totalLength == 0) + { + InitCipher(); + } + + int extra = bufOff; + + if (forEncryption) + { + Check.OutputLength(output, outOff, extra + macSize, "output buffer too short"); + } + else + { + if (extra < macSize) + throw new InvalidCipherTextException("data too short"); + + extra -= macSize; + + Check.OutputLength(output, outOff, extra, "output buffer too short"); + } + + if (extra > 0) + { + ProcessPartial(bufBlock, 0, extra, output, outOff); + } + + atLength += (uint)atBlockPos; + + if (atLength > atLengthPre) + { + /* + * Some AAD was sent after the cipher started. We determine the difference b/w the hash value + * we actually used when the cipher started (S_atPre) and the final hash value calculated (S_at). + * Then we carry this difference forward by multiplying by H^c, where c is the number of (full or + * partial) cipher-text blocks produced, and adjust the current hash. + */ + + // Finish hash for partial AAD block + if (atBlockPos > 0) + { + gHASHPartial(S_at, atBlock, 0, atBlockPos); + } + + // Find the difference between the AAD hashes + if (atLengthPre > 0) + { + GcmUtilities.Xor(S_at, S_atPre); + } + + // Number of cipher-text blocks produced + long c = (long)(((totalLength * 8) + 127) >> 7); + + // Calculate the adjustment factor + byte[] H_c = new byte[16]; + if (exp == null) + { + exp = new BasicGcmExponentiator(); + exp.Init(H); + } + exp.ExponentiateX(c, H_c); + + // Carry the difference forward + GcmUtilities.Multiply(S_at, H_c); + + // Adjust the current hash + GcmUtilities.Xor(S, S_at); + } + + // Final gHASH + byte[] X = new byte[BlockSize]; + Pack.UInt64_To_BE(atLength * 8UL, X, 0); + Pack.UInt64_To_BE(totalLength * 8UL, X, 8); + + gHASHBlock(S, X); + + // T = MSBt(GCTRk(J0,S)) + byte[] tag = new byte[BlockSize]; + cipher.ProcessBlock(J0, 0, tag, 0); + GcmUtilities.Xor(tag, S); + + int resultLen = extra; + + // We place into macBlock our calculated value for T + this.macBlock = new byte[macSize]; + Array.Copy(tag, 0, macBlock, 0, macSize); + + if (forEncryption) + { + // Append T to the message + Array.Copy(macBlock, 0, output, outOff + bufOff, macSize); + resultLen += macSize; + } + else + { + // Retrieve the T value from the message and compare to calculated one + byte[] msgMac = new byte[macSize]; + Array.Copy(bufBlock, extra, msgMac, 0, macSize); + if (!Arrays.ConstantTimeAreEqual(this.macBlock, msgMac)) + throw new InvalidCipherTextException("mac check in GCM failed"); + } + + Reset(false); + + return resultLen; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int DoFinal(Span output) + { + CheckStatus(); + + if (totalLength == 0) + { + InitCipher(); + } + + int extra = bufOff; + + if (forEncryption) + { + Check.OutputLength(output, extra + macSize, "output buffer too short"); + } + else + { + if (extra < macSize) + throw new InvalidCipherTextException("data too short"); + + extra -= macSize; + + Check.OutputLength(output, extra, "output buffer too short"); + } + + if (extra > 0) + { + ProcessPartial(bufBlock.AsSpan(0, extra), output); + } + + atLength += (uint)atBlockPos; + + if (atLength > atLengthPre) + { + /* + * Some AAD was sent after the cipher started. We determine the difference b/w the hash value + * we actually used when the cipher started (S_atPre) and the final hash value calculated (S_at). + * Then we carry this difference forward by multiplying by H^c, where c is the number of (full or + * partial) cipher-text blocks produced, and adjust the current hash. + */ + + // Finish hash for partial AAD block + if (atBlockPos > 0) + { + gHASHPartial(S_at, atBlock, 0, atBlockPos); + } + + // Find the difference between the AAD hashes + if (atLengthPre > 0) + { + GcmUtilities.Xor(S_at, S_atPre); + } + + // Number of cipher-text blocks produced + long c = (long)(((totalLength * 8) + 127) >> 7); + + // Calculate the adjustment factor + byte[] H_c = new byte[16]; + if (exp == null) + { + exp = new BasicGcmExponentiator(); + exp.Init(H); + } + exp.ExponentiateX(c, H_c); + + // Carry the difference forward + GcmUtilities.Multiply(S_at, H_c); + + // Adjust the current hash + GcmUtilities.Xor(S, S_at); + } + + // Final gHASH + Span X = stackalloc byte[BlockSize]; + Pack.UInt64_To_BE(atLength * 8UL, X); + Pack.UInt64_To_BE(totalLength * 8UL, X[8..]); + + gHASHBlock(S, X); + + // T = MSBt(GCTRk(J0,S)) + Span tag = stackalloc byte[BlockSize]; + cipher.ProcessBlock(J0, tag); + GcmUtilities.Xor(tag, S); + + int resultLen = extra; + + // We place into macBlock our calculated value for T + this.macBlock = new byte[macSize]; + tag[..macSize].CopyTo(macBlock); + + if (forEncryption) + { + // Append T to the message + macBlock.CopyTo(output[bufOff..]); + resultLen += macSize; + } + else + { + // Retrieve the T value from the message and compare to calculated one + Span msgMac = stackalloc byte[macSize]; + bufBlock.AsSpan(extra, macSize).CopyTo(msgMac); + if (!Arrays.ConstantTimeAreEqual(this.macBlock, msgMac)) + throw new InvalidCipherTextException("mac check in GCM failed"); + } + + Reset(false); + + return resultLen; + } +#endif + + public void Reset() + { + Reset(true); + } + + private void Reset(bool clearMac) + { + // note: we do not reset the nonce. + + S = new byte[BlockSize]; + S_at = new byte[BlockSize]; + S_atPre = new byte[BlockSize]; + atBlock = new byte[BlockSize]; + atBlockPos = 0; + atLength = 0; + atLengthPre = 0; + counter = Arrays.Clone(J0); + counter32 = Pack.BE_To_UInt32(counter, 12); + blocksRemaining = uint.MaxValue - 1; + bufOff = 0; + totalLength = 0; + + if (bufBlock != null) + { + Arrays.Fill(bufBlock, 0); + } + + if (clearMac) + { + macBlock = null; + } + + if (forEncryption) + { + initialised = false; + } + else + { + if (initialAssociatedText != null) + { + ProcessAadBytes(initialAssociatedText, 0, initialAssociatedText.Length); + } + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void DecryptBlock(ReadOnlySpan input, Span output) + { + Check.OutputLength(output, BlockSize, "output buffer too short"); + + if (totalLength == 0) + { + InitCipher(); + } + + Span ctrBlock = stackalloc byte[BlockSize]; + + GetNextCtrBlock(ctrBlock); +#if NETCOREAPP3_0_OR_GREATER + if (Sse2.IsSupported && Unsafe.SizeOf>() == BlockSize) + { + var t0 = MemoryMarshal.Read>(input); + var t1 = MemoryMarshal.Read>(ctrBlock); + var t2 = MemoryMarshal.Read>(S.AsSpan()); + + t1 = Sse2.Xor(t1, t0); + t2 = Sse2.Xor(t2, t0); + + MemoryMarshal.Write(output, ref t1); + MemoryMarshal.Write(S.AsSpan(), ref t2); + } + else +#endif + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = input[i + 0]; + byte c1 = input[i + 1]; + byte c2 = input[i + 2]; + byte c3 = input[i + 3]; + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + output[i + 0] = (byte)(c0 ^ ctrBlock[i + 0]); + output[i + 1] = (byte)(c1 ^ ctrBlock[i + 1]); + output[i + 2] = (byte)(c2 ^ ctrBlock[i + 2]); + output[i + 3] = (byte)(c3 ^ ctrBlock[i + 3]); + } + } + multiplier.MultiplyH(S); + + totalLength += BlockSize; + } + + private void DecryptBlocks2(ReadOnlySpan input, Span output) + { + Check.OutputLength(output, BlockSize * 2, "output buffer too short"); + + if (totalLength == 0) + { + InitCipher(); + } + + Span ctrBlock = stackalloc byte[BlockSize]; + + GetNextCtrBlock(ctrBlock); +#if NETCOREAPP3_0_OR_GREATER + if (Sse2.IsSupported && Unsafe.SizeOf>() == BlockSize) + { + var t0 = MemoryMarshal.Read>(input); + var t1 = MemoryMarshal.Read>(ctrBlock); + var t2 = MemoryMarshal.Read>(S.AsSpan()); + + t1 = Sse2.Xor(t1, t0); + t2 = Sse2.Xor(t2, t0); + + MemoryMarshal.Write(output, ref t1); + MemoryMarshal.Write(S.AsSpan(), ref t2); + } + else +#endif + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = input[i + 0]; + byte c1 = input[i + 1]; + byte c2 = input[i + 2]; + byte c3 = input[i + 3]; + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + output[i + 0] = (byte)(c0 ^ ctrBlock[i + 0]); + output[i + 1] = (byte)(c1 ^ ctrBlock[i + 1]); + output[i + 2] = (byte)(c2 ^ ctrBlock[i + 2]); + output[i + 3] = (byte)(c3 ^ ctrBlock[i + 3]); + } + } + multiplier.MultiplyH(S); + + input = input[BlockSize..]; + output = output[BlockSize..]; + + GetNextCtrBlock(ctrBlock); +#if NETCOREAPP3_0_OR_GREATER + if (Sse2.IsSupported && Unsafe.SizeOf>() == BlockSize) + { + var t0 = MemoryMarshal.Read>(input); + var t1 = MemoryMarshal.Read>(ctrBlock); + var t2 = MemoryMarshal.Read>(S.AsSpan()); + + t1 = Sse2.Xor(t1, t0); + t2 = Sse2.Xor(t2, t0); + + MemoryMarshal.Write(output, ref t1); + MemoryMarshal.Write(S.AsSpan(), ref t2); + } + else +#endif + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = input[i + 0]; + byte c1 = input[i + 1]; + byte c2 = input[i + 2]; + byte c3 = input[i + 3]; + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + output[i + 0] = (byte)(c0 ^ ctrBlock[i + 0]); + output[i + 1] = (byte)(c1 ^ ctrBlock[i + 1]); + output[i + 2] = (byte)(c2 ^ ctrBlock[i + 2]); + output[i + 3] = (byte)(c3 ^ ctrBlock[i + 3]); + } + } + multiplier.MultiplyH(S); + + totalLength += BlockSize * 2; + } + + private void EncryptBlock(ReadOnlySpan input, Span output) + { + Check.OutputLength(output, BlockSize, "output buffer too short"); + + if (totalLength == 0) + { + InitCipher(); + } + + Span ctrBlock = stackalloc byte[BlockSize]; + + GetNextCtrBlock(ctrBlock); +#if NETCOREAPP3_0_OR_GREATER + if (Sse2.IsSupported && Unsafe.SizeOf>() == BlockSize) + { + var t0 = MemoryMarshal.Read>(input); + var t1 = MemoryMarshal.Read>(ctrBlock); + var t2 = MemoryMarshal.Read>(S.AsSpan()); + + t1 = Sse2.Xor(t1, t0); + t2 = Sse2.Xor(t2, t1); + + MemoryMarshal.Write(output, ref t1); + MemoryMarshal.Write(S.AsSpan(), ref t2); + } + else +#endif + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = (byte)(ctrBlock[i + 0] ^ input[i + 0]); + byte c1 = (byte)(ctrBlock[i + 1] ^ input[i + 1]); + byte c2 = (byte)(ctrBlock[i + 2] ^ input[i + 2]); + byte c3 = (byte)(ctrBlock[i + 3] ^ input[i + 3]); + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + output[i + 0] = c0; + output[i + 1] = c1; + output[i + 2] = c2; + output[i + 3] = c3; + } + } + multiplier.MultiplyH(S); + + totalLength += BlockSize; + } + + private void EncryptBlocks2(ReadOnlySpan input, Span output) + { + Check.OutputLength(output, BlockSize * 2, "Output buffer too short"); + + if (totalLength == 0) + { + InitCipher(); + } + + Span ctrBlock = stackalloc byte[BlockSize]; + + GetNextCtrBlock(ctrBlock); +#if NETCOREAPP3_0_OR_GREATER + if (Sse2.IsSupported && Unsafe.SizeOf>() == BlockSize) + { + var t0 = MemoryMarshal.Read>(input); + var t1 = MemoryMarshal.Read>(ctrBlock); + var t2 = MemoryMarshal.Read>(S.AsSpan()); + + t1 = Sse2.Xor(t1, t0); + t2 = Sse2.Xor(t2, t1); + + MemoryMarshal.Write(output, ref t1); + MemoryMarshal.Write(S.AsSpan(), ref t2); + } + else +#endif + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = (byte)(ctrBlock[i + 0] ^ input[i + 0]); + byte c1 = (byte)(ctrBlock[i + 1] ^ input[i + 1]); + byte c2 = (byte)(ctrBlock[i + 2] ^ input[i + 2]); + byte c3 = (byte)(ctrBlock[i + 3] ^ input[i + 3]); + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + output[i + 0] = c0; + output[i + 1] = c1; + output[i + 2] = c2; + output[i + 3] = c3; + } + } + multiplier.MultiplyH(S); + + input = input[BlockSize..]; + output = output[BlockSize..]; + + GetNextCtrBlock(ctrBlock); +#if NETCOREAPP3_0_OR_GREATER + if (Sse2.IsSupported && Unsafe.SizeOf>() == BlockSize) + { + var t0 = MemoryMarshal.Read>(input); + var t1 = MemoryMarshal.Read>(ctrBlock); + var t2 = MemoryMarshal.Read>(S.AsSpan()); + + t1 = Sse2.Xor(t1, t0); + t2 = Sse2.Xor(t2, t1); + + MemoryMarshal.Write(output, ref t1); + MemoryMarshal.Write(S.AsSpan(), ref t2); + } + else +#endif + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = (byte)(ctrBlock[i + 0] ^ input[i + 0]); + byte c1 = (byte)(ctrBlock[i + 1] ^ input[i + 1]); + byte c2 = (byte)(ctrBlock[i + 2] ^ input[i + 2]); + byte c3 = (byte)(ctrBlock[i + 3] ^ input[i + 3]); + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + output[i + 0] = c0; + output[i + 1] = c1; + output[i + 2] = c2; + output[i + 3] = c3; + } + } + multiplier.MultiplyH(S); + + totalLength += BlockSize * 2; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void GetNextCtrBlock(Span block) + { + if (blocksRemaining == 0) + throw new InvalidOperationException("Attempt to process too many blocks"); + + blocksRemaining--; + + Pack.UInt32_To_BE(++counter32, counter, 12); + + cipher.ProcessBlock(counter, block); + } + + private void ProcessPartial(Span partialBlock, Span output) + { + Span ctrBlock = stackalloc byte[BlockSize]; + GetNextCtrBlock(ctrBlock); + + if (forEncryption) + { + GcmUtilities.Xor(partialBlock, ctrBlock, partialBlock.Length); + gHASHPartial(S, partialBlock); + } + else + { + gHASHPartial(S, partialBlock); + GcmUtilities.Xor(partialBlock, ctrBlock, partialBlock.Length); + } + + partialBlock.CopyTo(output); + totalLength += (uint)partialBlock.Length; + } +#else + private void DecryptBlock(byte[] inBuf, int inOff, byte[] outBuf, int outOff) + { + Check.OutputLength(outBuf, outOff, BlockSize, "Output buffer too short"); + + if (totalLength == 0) + { + InitCipher(); + } + + //byte[] ctrBlock = new byte[BlockSize]; + + GetNextCtrBlock(ctrBlock); + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = inBuf[inOff + i + 0]; + byte c1 = inBuf[inOff + i + 1]; + byte c2 = inBuf[inOff + i + 2]; + byte c3 = inBuf[inOff + i + 3]; + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + outBuf[outOff + i + 0] = (byte)(c0 ^ ctrBlock[i + 0]); + outBuf[outOff + i + 1] = (byte)(c1 ^ ctrBlock[i + 1]); + outBuf[outOff + i + 2] = (byte)(c2 ^ ctrBlock[i + 2]); + outBuf[outOff + i + 3] = (byte)(c3 ^ ctrBlock[i + 3]); + } + } + multiplier.MultiplyH(S); + + totalLength += BlockSize; + } + + private void DecryptBlocks2(byte[] inBuf, int inOff, byte[] outBuf, int outOff) + { + Check.OutputLength(outBuf, outOff, BlockSize * 2, "Output buffer too short"); + + if (totalLength == 0) + { + InitCipher(); + } + + //byte[] ctrBlock = new byte[BlockSize]; + + GetNextCtrBlock(ctrBlock); + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = inBuf[inOff + i + 0]; + byte c1 = inBuf[inOff + i + 1]; + byte c2 = inBuf[inOff + i + 2]; + byte c3 = inBuf[inOff + i + 3]; + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + outBuf[outOff + i + 0] = (byte)(c0 ^ ctrBlock[i + 0]); + outBuf[outOff + i + 1] = (byte)(c1 ^ ctrBlock[i + 1]); + outBuf[outOff + i + 2] = (byte)(c2 ^ ctrBlock[i + 2]); + outBuf[outOff + i + 3] = (byte)(c3 ^ ctrBlock[i + 3]); + } + } + multiplier.MultiplyH(S); + + inOff += BlockSize; + outOff += BlockSize; + + GetNextCtrBlock(ctrBlock); + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = inBuf[inOff + i + 0]; + byte c1 = inBuf[inOff + i + 1]; + byte c2 = inBuf[inOff + i + 2]; + byte c3 = inBuf[inOff + i + 3]; + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + outBuf[outOff + i + 0] = (byte)(c0 ^ ctrBlock[i + 0]); + outBuf[outOff + i + 1] = (byte)(c1 ^ ctrBlock[i + 1]); + outBuf[outOff + i + 2] = (byte)(c2 ^ ctrBlock[i + 2]); + outBuf[outOff + i + 3] = (byte)(c3 ^ ctrBlock[i + 3]); + } + } + multiplier.MultiplyH(S); + + totalLength += BlockSize * 2; + } + + private void EncryptBlock(byte[] inBuf, int inOff, byte[] outBuf, int outOff) + { + Check.OutputLength(outBuf, outOff, BlockSize, "Output buffer too short"); + + if (totalLength == 0) + { + InitCipher(); + } + + //byte[] ctrBlock = new byte[BlockSize]; + + GetNextCtrBlock(ctrBlock); + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = (byte)(ctrBlock[i + 0] ^ inBuf[inOff + i + 0]); + byte c1 = (byte)(ctrBlock[i + 1] ^ inBuf[inOff + i + 1]); + byte c2 = (byte)(ctrBlock[i + 2] ^ inBuf[inOff + i + 2]); + byte c3 = (byte)(ctrBlock[i + 3] ^ inBuf[inOff + i + 3]); + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + outBuf[outOff + i + 0] = c0; + outBuf[outOff + i + 1] = c1; + outBuf[outOff + i + 2] = c2; + outBuf[outOff + i + 3] = c3; + } + } + multiplier.MultiplyH(S); + + totalLength += BlockSize; + } + + private void EncryptBlocks2(byte[] inBuf, int inOff, byte[] outBuf, int outOff) + { + Check.OutputLength(outBuf, outOff, BlockSize * 2, "Output buffer too short"); + + if (totalLength == 0) + { + InitCipher(); + } + + //byte[] ctrBlock = new byte[BlockSize]; + + GetNextCtrBlock(ctrBlock); + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = (byte)(ctrBlock[i + 0] ^ inBuf[inOff + i + 0]); + byte c1 = (byte)(ctrBlock[i + 1] ^ inBuf[inOff + i + 1]); + byte c2 = (byte)(ctrBlock[i + 2] ^ inBuf[inOff + i + 2]); + byte c3 = (byte)(ctrBlock[i + 3] ^ inBuf[inOff + i + 3]); + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + outBuf[outOff + i + 0] = c0; + outBuf[outOff + i + 1] = c1; + outBuf[outOff + i + 2] = c2; + outBuf[outOff + i + 3] = c3; + } + } + multiplier.MultiplyH(S); + + inOff += BlockSize; + outOff += BlockSize; + + GetNextCtrBlock(ctrBlock); + { + for (int i = 0; i < BlockSize; i += 4) + { + byte c0 = (byte)(ctrBlock[i + 0] ^ inBuf[inOff + i + 0]); + byte c1 = (byte)(ctrBlock[i + 1] ^ inBuf[inOff + i + 1]); + byte c2 = (byte)(ctrBlock[i + 2] ^ inBuf[inOff + i + 2]); + byte c3 = (byte)(ctrBlock[i + 3] ^ inBuf[inOff + i + 3]); + + S[i + 0] ^= c0; + S[i + 1] ^= c1; + S[i + 2] ^= c2; + S[i + 3] ^= c3; + + outBuf[outOff + i + 0] = c0; + outBuf[outOff + i + 1] = c1; + outBuf[outOff + i + 2] = c2; + outBuf[outOff + i + 3] = c3; + } + } + multiplier.MultiplyH(S); + + totalLength += BlockSize * 2; + } + + private void GetNextCtrBlock(byte[] block) + { + if (blocksRemaining == 0) + throw new InvalidOperationException("Attempt to process too many blocks"); + + blocksRemaining--; + + Pack.UInt32_To_BE(++counter32, counter, 12); + + cipher.ProcessBlock(counter, 0, block, 0); + } + + private void ProcessPartial(byte[] buf, int off, int len, byte[] output, int outOff) + { + //byte[] ctrBlock = new byte[BlockSize]; + GetNextCtrBlock(ctrBlock); + + if (forEncryption) + { + GcmUtilities.Xor(buf, off, ctrBlock, 0, len); + gHASHPartial(S, buf, off, len); + } + else + { + gHASHPartial(S, buf, off, len); + GcmUtilities.Xor(buf, off, ctrBlock, 0, len); + } + + Array.Copy(buf, off, output, outOff, len); + totalLength += (uint)len; + } +#endif + + private void gHASH(byte[] Y, byte[] b, int len) + { + for (int pos = 0; pos < len; pos += BlockSize) + { + int num = System.Math.Min(len - pos, BlockSize); + gHASHPartial(Y, b, pos, num); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void gHASHBlock(byte[] Y, ReadOnlySpan b) + { + GcmUtilities.Xor(Y, b); + multiplier.MultiplyH(Y); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void gHASHPartial(byte[] Y, ReadOnlySpan b) + { + GcmUtilities.Xor(Y, b, b.Length); + multiplier.MultiplyH(Y); + } +#else + private void gHASHBlock(byte[] Y, byte[] b) + { + GcmUtilities.Xor(Y, b); + multiplier.MultiplyH(Y); + } + + private void gHASHBlock(byte[] Y, byte[] b, int off) + { + GcmUtilities.Xor(Y, b, off); + multiplier.MultiplyH(Y); + } +#endif + + private void gHASHPartial(byte[] Y, byte[] b, int off, int len) + { + GcmUtilities.Xor(Y, b, off, len); + multiplier.MultiplyH(Y); + } + + private void CheckStatus() + { + if (!initialised) + { + if (forEncryption) + { + throw new InvalidOperationException("GCM cipher cannot be reused for encryption"); + } + throw new InvalidOperationException("GCM cipher needs to be initialised"); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/GCMBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/GCMBlockCipher.cs.meta new file mode 100644 index 000000000..bad82543f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/GCMBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9e700bc931d48247b4b368d48e44803 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/GOFBBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/GOFBBlockCipher.cs new file mode 100644 index 000000000..04381eea6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/GOFBBlockCipher.cs @@ -0,0 +1,234 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes +{ + /** + * implements the GOST 28147 OFB counter mode (GCTR). + */ + public class GOfbBlockCipher + : IBlockCipherMode + { + private byte[] IV; + private byte[] ofbV; + private byte[] ofbOutV; + + private readonly int blockSize; + private readonly IBlockCipher cipher; + + bool firstStep = true; + int N3; + int N4; + const int C1 = 16843012; //00000001000000010000000100000100 + const int C2 = 16843009; //00000001000000010000000100000001 + + /** + * Basic constructor. + * + * @param cipher the block cipher to be used as the basis of the + * counter mode (must have a 64 bit block size). + */ + public GOfbBlockCipher( + IBlockCipher cipher) + { + this.cipher = cipher; + this.blockSize = cipher.GetBlockSize(); + + if (blockSize != 8) + { + throw new ArgumentException("GCTR only for 64 bit block ciphers"); + } + + this.IV = new byte[cipher.GetBlockSize()]; + this.ofbV = new byte[cipher.GetBlockSize()]; + this.ofbOutV = new byte[cipher.GetBlockSize()]; + } + + /** + * return the underlying block cipher that we are wrapping. + * + * @return the underlying block cipher that we are wrapping. + */ + public IBlockCipher UnderlyingCipher => cipher; + + /** + * Initialise the cipher and, possibly, the initialisation vector (IV). + * If an IV isn't passed as part of the parameter, the IV will be all zeros. + * An IV which is too short is handled in FIPS compliant fashion. + * + * @param encrypting if true the cipher is initialised for + * encryption, if false for decryption. + * @param parameters the key and other data required by the cipher. + * @exception ArgumentException if the parameters argument is inappropriate. + */ + public void Init( + bool forEncryption, //ignored by this CTR mode + ICipherParameters parameters) + { + firstStep = true; + N3 = 0; + N4 = 0; + + if (parameters is ParametersWithIV) + { + ParametersWithIV ivParam = (ParametersWithIV)parameters; + byte[] iv = ivParam.GetIV(); + + if (iv.Length < IV.Length) + { + // prepend the supplied IV with zeros (per FIPS PUB 81) + Array.Copy(iv, 0, IV, IV.Length - iv.Length, iv.Length); + for (int i = 0; i < IV.Length - iv.Length; i++) + { + IV[i] = 0; + } + } + else + { + Array.Copy(iv, 0, IV, 0, IV.Length); + } + + parameters = ivParam.Parameters; + } + + Reset(); + + // if it's null, key is to be reused. + if (parameters != null) + { + cipher.Init(true, parameters); + } + } + + /** + * return the algorithm name and mode. + * + * @return the name of the underlying algorithm followed by "/GCTR" + * and the block size in bits + */ + public string AlgorithmName + { + get { return cipher.AlgorithmName + "/GCTR"; } + } + + public bool IsPartialBlockOkay + { + get { return true; } + } + + /** + * return the block size we are operating at (in bytes). + * + * @return the block size we are operating at (in bytes). + */ + public int GetBlockSize() + { + return blockSize; + } + + public int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + Check.DataLength(input, inOff, blockSize, "input buffer too short"); + Check.OutputLength(output, outOff, blockSize, "output buffer too short"); + + if (firstStep) + { + firstStep = false; + cipher.ProcessBlock(ofbV, 0, ofbOutV, 0); + N3 = (int)Pack.LE_To_UInt32(ofbOutV, 0); + N4 = (int)Pack.LE_To_UInt32(ofbOutV, 4); + } + N3 += C2; + N4 += C1; + if (N4 < C1) // addition is mod (2**32 - 1) + { + if (N4 > 0) + { + N4++; + } + } + Pack.UInt32_To_LE((uint)N3, ofbV, 0); + Pack.UInt32_To_LE((uint)N4, ofbV, 4); + + cipher.ProcessBlock(ofbV, 0, ofbOutV, 0); + + // + // XOR the ofbV with the plaintext producing the cipher text (and + // the next input block). + // + for (int i = 0; i < blockSize; i++) + { + output[outOff + i] = (byte)(ofbOutV[i] ^ input[inOff + i]); + } + + // + // change over the input block. + // + Array.Copy(ofbV, blockSize, ofbV, 0, ofbV.Length - blockSize); + Array.Copy(ofbOutV, 0, ofbV, ofbV.Length - blockSize, blockSize); + + return blockSize; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessBlock(ReadOnlySpan input, Span output) + { + Check.DataLength(input, blockSize, "input buffer too short"); + Check.OutputLength(output, blockSize, "output buffer too short"); + + if (firstStep) + { + firstStep = false; + cipher.ProcessBlock(ofbV, ofbOutV); + N3 = (int)Pack.LE_To_UInt32(ofbOutV, 0); + N4 = (int)Pack.LE_To_UInt32(ofbOutV, 4); + } + N3 += C2; + N4 += C1; + if (N4 < C1) // addition is mod (2**32 - 1) + { + if (N4 > 0) + { + N4++; + } + } + Pack.UInt32_To_LE((uint)N3, ofbV, 0); + Pack.UInt32_To_LE((uint)N4, ofbV, 4); + + cipher.ProcessBlock(ofbV, ofbOutV); + + // + // XOR the ofbV with the plaintext producing the cipher text (and + // the next input block). + // + for (int i = 0; i < blockSize; i++) + { + output[i] = (byte)(ofbOutV[i] ^ input[i]); + } + + // + // change over the input block. + // + Array.Copy(ofbV, blockSize, ofbV, 0, ofbV.Length - blockSize); + Array.Copy(ofbOutV, 0, ofbV, ofbV.Length - blockSize, blockSize); + + return blockSize; + } +#endif + + /** + * reset the feedback vector back to the IV and reset the underlying + * cipher. + */ + public void Reset() + { + Array.Copy(IV, 0, ofbV, 0, IV.Length); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/GOFBBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/GOFBBlockCipher.cs.meta new file mode 100644 index 000000000..f11a40656 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/GOFBBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e3a091d7cad075041a691018998b39de +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/GcmSivBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/GcmSivBlockCipher.cs new file mode 100644 index 000000000..5e5ceccb8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/GcmSivBlockCipher.cs @@ -0,0 +1,1075 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes.Gcm; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes +{ + /** + * GCM-SIV Mode. + *

It should be noted that the specified limit of 236 bytes is not supported. This is because all bytes are + * cached in a ByteArrayOutputStream object (which has a limit of a little less than 231 bytes), + * and are output on the DoFinal() call (which can only process a maximum of 231 bytes).

+ *

The practical limit of 231 - 24 bytes is policed, and attempts to breach the limit will be rejected

+ *

In order to properly support the higher limit, an extended form of ByteArrayOutputStream would be needed + * which would use multiple arrays to store the data. In addition, a new doOutput method would be required (similar + * to that in XOF digests), which would allow the data to be output over multiple calls. Alternatively an extended + * form of ByteArrayInputStream could be used to deliver the data.

+ */ + public class GcmSivBlockCipher + : IAeadBlockCipher + { + /// The buffer length. + private static readonly int BUFLEN = 16; + + /// The halfBuffer length. + private static readonly int HALFBUFLEN = BUFLEN >> 1; + + /// The nonce length. + private static readonly int NONCELEN = 12; + + /** + * The maximum data length (AEAD/PlainText). Due to implementation constraints this is restricted to the maximum + * array length (https://programming.guide/java/array-maximum-length.html) minus the BUFLEN to allow for the MAC + */ + private static readonly int MAX_DATALEN = int.MaxValue - 8 - BUFLEN; + + /** + * The top bit mask. + */ + private static readonly byte MASK = 0x80; + + /** + * The addition constant. + */ + private static readonly byte ADD = 0xE1; + + /** + * The initialisation flag. + */ + private static readonly int INIT = 1; + + /** + * The aeadComplete flag. + */ + private static readonly int AEAD_COMPLETE = 2; + + /** + * The cipher. + */ + private readonly IBlockCipher theCipher; + + /** + * The multiplier. + */ + private readonly IGcmMultiplier theMultiplier; + + /** + * The gHash buffer. + */ + internal readonly byte[] theGHash = new byte[BUFLEN]; + + /** + * The reverse buffer. + */ + internal readonly byte[] theReverse = new byte[BUFLEN]; + + /** + * The aeadHasher. + */ + private readonly GcmSivHasher theAEADHasher; + + /** + * The dataHasher. + */ + private readonly GcmSivHasher theDataHasher; + + /** + * The plainDataStream. + */ + private GcmSivCache thePlain; + + /** + * The encryptedDataStream (decryption only). + */ + private GcmSivCache theEncData; + + /** + * Are we encrypting? + */ + private bool forEncryption; + + /** + * The initialAEAD. + */ + private byte[] theInitialAEAD; + + /** + * The nonce. + */ + private byte[] theNonce; + + /** + * The flags. + */ + private int theFlags; + + /** + * Constructor. + */ + public GcmSivBlockCipher() + : this(AesUtilities.CreateEngine()) + { + } + + /** + * Constructor. + * @param pCipher the underlying cipher + */ + public GcmSivBlockCipher(IBlockCipher pCipher) + : this(pCipher, new Tables4kGcmMultiplier()) + { + } + + /** + * Constructor. + * @param pCipher the underlying cipher + * @param pMultiplier the multiplier + */ + public GcmSivBlockCipher(IBlockCipher pCipher, IGcmMultiplier pMultiplier) + { + /* Ensure that the cipher is the correct size */ + if (pCipher.GetBlockSize() != BUFLEN) + throw new ArgumentException("Cipher required with a block size of " + BUFLEN + "."); + + /* Store parameters */ + theCipher = pCipher; + theMultiplier = pMultiplier; + + /* Create the hashers */ + theAEADHasher = new GcmSivHasher(this); + theDataHasher = new GcmSivHasher(this); + } + + public virtual IBlockCipher UnderlyingCipher => theCipher; + + public virtual int GetBlockSize() + { + return theCipher.GetBlockSize(); + } + + public virtual void Init(bool pEncrypt, ICipherParameters cipherParameters) + { + /* Set defaults */ + byte[] myInitialAEAD = null; + byte[] myNonce; + KeyParameter myKey; + + /* Access parameters */ + if (cipherParameters is AeadParameters) + { + AeadParameters myAEAD = (AeadParameters)cipherParameters; + myInitialAEAD = myAEAD.GetAssociatedText(); + myNonce = myAEAD.GetNonce(); + myKey = myAEAD.Key; + } + else if (cipherParameters is ParametersWithIV) + { + ParametersWithIV myParms = (ParametersWithIV)cipherParameters; + myNonce = myParms.GetIV(); + myKey = (KeyParameter)myParms.Parameters; + } + else + { + throw new ArgumentException("invalid parameters passed to GCM_SIV"); + } + + /* Check nonceSize */ + if (myNonce == null || myNonce.Length != NONCELEN) + { + throw new ArgumentException("Invalid nonce"); + } + + /* Check keysize */ + if (myKey == null) + { + throw new ArgumentException("Invalid key"); + } + + byte[] k = myKey.GetKey(); + + if (k.Length != BUFLEN && k.Length != (BUFLEN << 1)) + { + throw new ArgumentException("Invalid key"); + } + + /* Reset details */ + forEncryption = pEncrypt; + theInitialAEAD = myInitialAEAD; + theNonce = myNonce; + + /* Initialise the keys */ + DeriveKeys(myKey); + ResetStreams(); + } + + public virtual string AlgorithmName => theCipher.AlgorithmName + "-GCM-SIV"; + + /** + * check AEAD status. + * @param pLen the aeadLength + */ + private void CheckAeadStatus(int pLen) + { + /* Check we are initialised */ + if ((theFlags & INIT) == 0) + { + throw new InvalidOperationException("Cipher is not initialised"); + } + + /* Check AAD is allowed */ + if ((theFlags & AEAD_COMPLETE) != 0) + { + throw new InvalidOperationException("AEAD data cannot be processed after ordinary data"); + } + + /* Make sure that we haven't breached AEAD data limit */ + if ((long)theAEADHasher.getBytesProcessed() + long.MinValue > (MAX_DATALEN - pLen) + long.MinValue) + { + throw new InvalidOperationException("AEAD byte count exceeded"); + } + } + + /** + * check status. + * @param pLen the dataLength + */ + private void CheckStatus(int pLen) + { + /* Check we are initialised */ + if ((theFlags & INIT) == 0) + { + throw new InvalidOperationException("Cipher is not initialised"); + } + + /* Complete the AEAD section if this is the first data */ + if ((theFlags & AEAD_COMPLETE) == 0) + { + theAEADHasher.completeHash(); + theFlags |= AEAD_COMPLETE; + } + + /* Make sure that we haven't breached data limit */ + long dataLimit = MAX_DATALEN; + long currBytes = thePlain.Length; + if (!forEncryption) + { + dataLimit += BUFLEN; + currBytes = theEncData.Length; + } + if (currBytes + long.MinValue > (dataLimit - pLen) + long.MinValue) + { + throw new InvalidOperationException("byte count exceeded"); + } + } + + public virtual void ProcessAadByte(byte pByte) + { + /* Check that we can supply AEAD */ + CheckAeadStatus(1); + + /* Process the aead */ + theAEADHasher.UpdateHash(pByte); + } + + public virtual void ProcessAadBytes(byte[] pData, int pOffset, int pLen) + { + Check.DataLength(pData, pOffset, pLen, "input buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ProcessAadBytes(pData.AsSpan(pOffset, pLen)); +#else + /* Check that we can supply AEAD */ + CheckAeadStatus(pLen); + + /* Process the aead */ + theAEADHasher.UpdateHash(pData, pOffset, pLen); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void ProcessAadBytes(ReadOnlySpan input) + { + /* Check that we can supply AEAD */ + CheckAeadStatus(input.Length); + + /* Process the aead */ + theAEADHasher.UpdateHash(input); + } +#endif + + public virtual int ProcessByte(byte pByte, byte[] pOutput, int pOutOffset) + { + /* Check that we have initialised */ + CheckStatus(1); + + /* Store the data */ + if (forEncryption) + { + thePlain.WriteByte(pByte); + theDataHasher.UpdateHash(pByte); + } + else + { + theEncData.WriteByte(pByte); + } + + /* No data returned */ + return 0; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessByte(byte input, Span output) + { + /* Check that we have initialised */ + CheckStatus(1); + + /* Store the data */ + if (forEncryption) + { + thePlain.WriteByte(input); + theDataHasher.UpdateHash(input); + } + else + { + theEncData.WriteByte(input); + } + + /* No data returned */ + return 0; + } +#endif + + public virtual int ProcessBytes(byte[] pData, int pOffset, int pLen, byte[] pOutput, int pOutOffset) + { + Check.DataLength(pData, pOffset, pLen, "input buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ProcessBytes(pData.AsSpan(pOffset, pLen), Spans.FromNullable(pOutput, pOutOffset)); +#else + /* Check that we have initialised */ + CheckStatus(pLen); + + /* Store the data */ + if (forEncryption) + { + thePlain.Write(pData, pOffset, pLen); + theDataHasher.UpdateHash(pData, pOffset, pLen); + } + else + { + theEncData.Write(pData, pOffset, pLen); + } + + /* No data returned */ + return 0; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBytes(ReadOnlySpan input, Span output) + { + /* Check that we have initialised */ + CheckStatus(input.Length); + + /* Store the data */ + if (forEncryption) + { + thePlain.Write(input); + theDataHasher.UpdateHash(input); + } + else + { + theEncData.Write(input); + } + + /* No data returned */ + return 0; + } +#endif + + public virtual int DoFinal(byte[] pOutput, int pOffset) + { + Check.OutputLength(pOutput, pOffset, GetOutputSize(0), "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(pOutput.AsSpan(pOffset)); +#else + /* Check that we have initialised */ + CheckStatus(0); + + /* If we are encrypting */ + if (forEncryption) + { + /* Derive the tag */ + byte[] myTag = CalculateTag(); + + /* encrypt the plain text */ + int myDataLen = BUFLEN + EncryptPlain(myTag, pOutput, pOffset); + + /* Add the tag to the output */ + Array.Copy(myTag, 0, pOutput, pOffset + Convert.ToInt32(thePlain.Length), BUFLEN); + + /* Reset the streams */ + ResetStreams(); + return myDataLen; + + /* else we are decrypting */ + } + else + { + /* decrypt to plain text */ + DecryptPlain(); + + /* Release plain text */ + int myDataLen = Streams.WriteBufTo(thePlain, pOutput, pOffset); + + /* Reset the streams */ + ResetStreams(); + return myDataLen; + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int DoFinal(Span output) + { + /* Check that we have initialised */ + CheckStatus(0); + + Check.OutputLength(output, GetOutputSize(0), "output buffer too short"); + + /* If we are encrypting */ + if (forEncryption) + { + /* Derive the tag */ + byte[] myTag = CalculateTag(); + + /* encrypt the plain text */ + int myDataLen = BUFLEN + EncryptPlain(myTag, output); + + /* Add the tag to the output */ + myTag.AsSpan(0, BUFLEN).CopyTo(output[Convert.ToInt32(thePlain.Length)..]); + + /* Reset the streams */ + ResetStreams(); + return myDataLen; + + /* else we are decrypting */ + } + else + { + /* decrypt to plain text */ + DecryptPlain(); + + /* Release plain text */ + if (!thePlain.TryGetBuffer(out var buffer)) + throw new InvalidOperationException(); + + buffer.AsSpan().CopyTo(output); + int myDataLen = buffer.Count; + + /* Reset the streams */ + ResetStreams(); + return myDataLen; + } + } +#endif + + public virtual byte[] GetMac() + { + throw new InvalidOperationException(); + } + + public virtual int GetUpdateOutputSize(int pLen) + { + return 0; + } + + public virtual int GetOutputSize(int pLen) + { + if (forEncryption) + { + return pLen + Convert.ToInt32(thePlain.Length) + BUFLEN; + } + int myCurr = pLen + Convert.ToInt32(theEncData.Length); + return myCurr > BUFLEN ? myCurr - BUFLEN : 0; + } + + public virtual void Reset() + { + ResetStreams(); + } + + /** + * Reset Streams. + */ + private void ResetStreams() + { + /* Clear the plainText buffer */ + if (thePlain != null) + { + int count = Convert.ToInt32(thePlain.Length); + Array.Clear(thePlain.GetBuffer(), 0, count); + thePlain.SetLength(0); + } + + /* Reset hashers */ + theAEADHasher.Reset(); + theDataHasher.Reset(); + + /* Recreate streams (to release memory) */ + thePlain = new GcmSivCache(); + theEncData = forEncryption ? null : new GcmSivCache(); + + /* Initialise AEAD if required */ + theFlags &= ~AEAD_COMPLETE; + Arrays.Fill(theGHash, (byte)0); + if (theInitialAEAD != null) + { + theAEADHasher.UpdateHash(theInitialAEAD, 0, theInitialAEAD.Length); + } + } + + /** + * Obtain buffer length (allowing for null). + * @param pBuffer the buffere + * @return the length + */ + private static int bufLength(byte[] pBuffer) + { + return pBuffer == null ? 0 : pBuffer.Length; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int EncryptPlain(byte[] pCounter, Span target) + { + byte[] thePlainBuf = thePlain.GetBuffer(); + int thePlainLen = Convert.ToInt32(thePlain.Length); + + byte[] mySrc = thePlainBuf; + byte[] myCounter = Arrays.Clone(pCounter); + myCounter[BUFLEN - 1] |= MASK; + byte[] myMask = new byte[BUFLEN]; + long myRemaining = thePlainLen; + int myOff = 0; + + /* While we have data to process */ + while (myRemaining > 0) + { + /* Generate the next mask */ + theCipher.ProcessBlock(myCounter, 0, myMask, 0); + + /* Xor data into mask */ + int myLen = (int)System.Math.Min(BUFLEN, myRemaining); + xorBlock(myMask, mySrc, myOff, myLen); + + /* Copy encrypted data to output */ + myMask.AsSpan(0, myLen).CopyTo(target[myOff..]); + + /* Adjust counters */ + myRemaining -= myLen; + myOff += myLen; + incrementCounter(myCounter); + } + + /* Return the amount of data processed */ + return thePlainLen; + } +#else + private int EncryptPlain(byte[] pCounter, byte[] pTarget, int pOffset) + { + byte[] thePlainBuf = thePlain.GetBuffer(); + int thePlainLen = Convert.ToInt32(thePlain.Length); + + byte[] mySrc = thePlainBuf; + byte[] myCounter = Arrays.Clone(pCounter); + myCounter[BUFLEN - 1] |= MASK; + byte[] myMask = new byte[BUFLEN]; + long myRemaining = thePlainLen; + int myOff = 0; + + /* While we have data to process */ + while (myRemaining > 0) + { + /* Generate the next mask */ + theCipher.ProcessBlock(myCounter, 0, myMask, 0); + + /* Xor data into mask */ + int myLen = (int)System.Math.Min(BUFLEN, myRemaining); + xorBlock(myMask, mySrc, myOff, myLen); + + /* Copy encrypted data to output */ + Array.Copy(myMask, 0, pTarget, pOffset + myOff, myLen); + + /* Adjust counters */ + myRemaining -= myLen; + myOff += myLen; + incrementCounter(myCounter); + } + + /* Return the amount of data processed */ + return thePlainLen; + } +#endif + + private void DecryptPlain() + { + byte[] theEncDataBuf = theEncData.GetBuffer(); + int theEncDataLen = Convert.ToInt32(theEncData.Length); + + byte[] mySrc = theEncDataBuf; + int myRemaining = theEncDataLen - BUFLEN; + + /* Check for insufficient data */ + if (myRemaining < 0) + { + throw new InvalidCipherTextException("Data too short"); + } + + /* Access counter */ + byte[] myExpected = Arrays.CopyOfRange(mySrc, myRemaining, myRemaining + BUFLEN); + byte[] myCounter = Arrays.Clone(myExpected); + myCounter[BUFLEN - 1] |= MASK; + byte[] myMask = new byte[BUFLEN]; + int myOff = 0; + + /* While we have data to process */ + while (myRemaining > 0) + { + /* Generate the next mask */ + theCipher.ProcessBlock(myCounter, 0, myMask, 0); + + /* Xor data into mask */ + int myLen = System.Math.Min(BUFLEN, myRemaining); + xorBlock(myMask, mySrc, myOff, myLen); + + /* Write data to plain dataStream */ + thePlain.Write(myMask, 0, myLen); + theDataHasher.UpdateHash(myMask, 0, myLen); + + /* Adjust counters */ + myRemaining -= myLen; + myOff += myLen; + incrementCounter(myCounter); + } + + /* Derive and check the tag */ + byte[] myTag = CalculateTag(); + if (!Arrays.ConstantTimeAreEqual(myTag, myExpected)) + { + Reset(); + throw new InvalidCipherTextException("mac check failed"); + } + } + + /** + * calculate tag. + * @return the calculated tag + */ + private byte[] CalculateTag() + { + /* Complete the hash */ + theDataHasher.completeHash(); + byte[] myPolyVal = completePolyVal(); + + /* calculate polyVal */ + byte[] myResult = new byte[BUFLEN]; + + /* Fold in the nonce */ + for (int i = 0; i < NONCELEN; i++) + { + myPolyVal[i] ^= theNonce[i]; + } + + /* Clear top bit */ + myPolyVal[BUFLEN - 1] &= (byte)(MASK - 1); + + /* Calculate tag and return it */ + theCipher.ProcessBlock(myPolyVal, 0, myResult, 0); + return myResult; + } + + /** + * complete polyVAL. + * @return the calculated value + */ + private byte[] completePolyVal() + { + /* Build the polyVal result */ + byte[] myResult = new byte[BUFLEN]; + gHashLengths(); + fillReverse(theGHash, 0, BUFLEN, myResult); + return myResult; + } + + /** + * process lengths. + */ + private void gHashLengths() + { + /* Create reversed bigEndian buffer to keep it simple */ + byte[] myIn = new byte[BUFLEN]; + Pack.UInt64_To_BE((ulong)Bytes.NumBits * theDataHasher.getBytesProcessed(), myIn, 0); + Pack.UInt64_To_BE((ulong)Bytes.NumBits * theAEADHasher.getBytesProcessed(), myIn, Longs.NumBytes); + + /* hash value */ + gHASH(myIn); + } + + /** + * perform the next GHASH step. + * @param pNext the next value + */ + private void gHASH(byte[] pNext) + { + xorBlock(theGHash, pNext); + theMultiplier.MultiplyH(theGHash); + } + + private static void fillReverse(byte[] pInput, int pOffset, int pLength, byte[] pOutput) + { + /* Loop through the buffer */ + for (int i = 0, j = BUFLEN - 1; i < pLength; i++, j--) + { + /* Copy byte */ + pOutput[j] = pInput[pOffset + i]; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void fillReverse(ReadOnlySpan input, Span output) + { + /* Loop through the buffer */ + for (int i = 0, j = BUFLEN - 1; i < input.Length; i++, j--) + { + /* Copy byte */ + output[j] = input[i]; + } + } +#endif + + /** + * xor a full block buffer. + * @param pLeft the left operand and result + * @param pRight the right operand + */ + private static void xorBlock(byte[] pLeft, byte[] pRight) + { + /* Loop through the bytes */ + for (int i = 0; i < BUFLEN; i++) + { + pLeft[i] ^= pRight[i]; + } + } + + /** + * xor a partial block buffer. + * @param pLeft the left operand and result + * @param pRight the right operand + * @param pOffset the offset in the right operand + * @param pLength the length of data in the right operand + */ + private static void xorBlock(byte[] pLeft, byte[] pRight, int pOffset, int pLength) + { + /* Loop through the bytes */ + for (int i = 0; i < pLength; i++) + { + pLeft[i] ^= pRight[i + pOffset]; + } + } + + /** + * increment the counter. + * @param pCounter the counter to increment + */ + private static void incrementCounter(byte[] pCounter) + { + /* Loop through the bytes incrementing counter */ + for (int i = 0; i < Integers.NumBytes; i++) + { + if (++pCounter[i] != 0) + { + break; + } + } + } + + /** + * multiply by X. + * @param pValue the value to adjust + */ + private static void mulX(byte[] pValue) + { + /* Loop through the bytes */ + byte myMask = (byte)0; + for (int i = 0; i < BUFLEN; i++) + { + byte myValue = pValue[i]; + pValue[i] = (byte)(((myValue >> 1) & ~MASK) | myMask); + myMask = (byte)((myValue & 1) == 0 ? (byte)0 : MASK); + } + + /* Xor in addition if last bit was set */ + if (myMask != 0) + { + pValue[0] ^= ADD; + } + } + + /** + * Derive Keys. + * @param pKey the keyGeneration key + */ + private void DeriveKeys(KeyParameter pKey) + { + /* Create the buffers */ + byte[] myIn = new byte[BUFLEN]; + byte[] myOut = new byte[BUFLEN]; + byte[] myResult = new byte[BUFLEN]; + byte[] myEncKey = new byte[pKey.GetKey().Length]; + + /* Prepare for encryption */ + Array.Copy(theNonce, 0, myIn, BUFLEN - NONCELEN, NONCELEN); + theCipher.Init(true, pKey); + + /* Derive authentication key */ + int myOff = 0; + theCipher.ProcessBlock(myIn, 0, myOut, 0); + Array.Copy(myOut, 0, myResult, myOff, HALFBUFLEN); + myIn[0]++; + myOff += HALFBUFLEN; + theCipher.ProcessBlock(myIn, 0, myOut, 0); + Array.Copy(myOut, 0, myResult, myOff, HALFBUFLEN); + + /* Derive encryption key */ + myIn[0]++; + myOff = 0; + theCipher.ProcessBlock(myIn, 0, myOut, 0); + Array.Copy(myOut, 0, myEncKey, myOff, HALFBUFLEN); + myIn[0]++; + myOff += HALFBUFLEN; + theCipher.ProcessBlock(myIn, 0, myOut, 0); + Array.Copy(myOut, 0, myEncKey, myOff, HALFBUFLEN); + + /* If we have a 32byte key */ + if (myEncKey.Length == BUFLEN << 1) + { + /* Derive remainder of encryption key */ + myIn[0]++; + myOff += HALFBUFLEN; + theCipher.ProcessBlock(myIn, 0, myOut, 0); + Array.Copy(myOut, 0, myEncKey, myOff, HALFBUFLEN); + myIn[0]++; + myOff += HALFBUFLEN; + theCipher.ProcessBlock(myIn, 0, myOut, 0); + Array.Copy(myOut, 0, myEncKey, myOff, HALFBUFLEN); + } + + /* Initialise the Cipher */ + theCipher.Init(true, new KeyParameter(myEncKey)); + + /* Initialise the multiplier */ + fillReverse(myResult, 0, BUFLEN, myOut); + mulX(myOut); + theMultiplier.Init(myOut); + theFlags |= INIT; + } + + private class GcmSivCache + : MemoryStream + { + internal GcmSivCache() + { + } + } + + /** + * Hash Control. + */ + private class GcmSivHasher + { + /** + * Cache. + */ + private readonly byte[] theBuffer = new byte[BUFLEN]; + + /** + * Single byte cache. + */ + private readonly byte[] theByte = new byte[1]; + + /** + * Count of active bytes in cache. + */ + private int numActive; + + /** + * Count of hashed bytes. + */ + private ulong numHashed; + + private readonly GcmSivBlockCipher parent; + + internal GcmSivHasher(GcmSivBlockCipher parent) + { + this.parent = parent; + } + + /** + * Obtain the count of bytes hashed. + * @return the count + */ + internal ulong getBytesProcessed() + { + return numHashed; + } + + /** + * Reset the hasher. + */ + internal void Reset() + { + numActive = 0; + numHashed = 0; + } + + /** + * update hash. + * @param pByte the byte + */ + internal void UpdateHash(byte pByte) + { + theByte[0] = pByte; + UpdateHash(theByte, 0, 1); + } + + /** + * update hash. + * @param pBuffer the buffer + * @param pOffset the offset within the buffer + * @param pLen the length of data + */ + internal void UpdateHash(byte[] pBuffer, int pOffset, int pLen) + { + /* If we should process the cache */ + int mySpace = BUFLEN - numActive; + int numProcessed = 0; + int myRemaining = pLen; + if (numActive > 0 && pLen >= mySpace) + { + /* Copy data into the cache and hash it */ + Array.Copy(pBuffer, pOffset, theBuffer, numActive, mySpace); + fillReverse(theBuffer, 0, BUFLEN, parent.theReverse); + parent.gHASH(parent.theReverse); + + /* Adjust counters */ + numProcessed += mySpace; + myRemaining -= mySpace; + numActive = 0; + } + + /* While we have full blocks */ + while (myRemaining >= BUFLEN) + { + /* Access the next data */ + fillReverse(pBuffer, pOffset + numProcessed, BUFLEN, parent.theReverse); + parent.gHASH(parent.theReverse); + + /* Adjust counters */ + numProcessed += BUFLEN; + myRemaining -= BUFLEN; + } + + /* If we have remaining data */ + if (myRemaining > 0) + { + /* Copy data into the cache */ + Array.Copy(pBuffer, pOffset + numProcessed, theBuffer, numActive, myRemaining); + numActive += myRemaining; + } + + /* Adjust the number of bytes processed */ + numHashed += (ulong)pLen; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal void UpdateHash(ReadOnlySpan buffer) + { + int pLen = buffer.Length; + + /* If we should process the cache */ + int mySpace = BUFLEN - numActive; + if (numActive > 0 && buffer.Length >= mySpace) + { + /* Copy data into the cache and hash it */ + buffer[..mySpace].CopyTo(theBuffer.AsSpan(numActive)); + fillReverse(theBuffer, parent.theReverse); + parent.gHASH(parent.theReverse); + + /* Adjust counters */ + buffer = buffer[mySpace..]; + numActive = 0; + } + + /* While we have full blocks */ + while (buffer.Length >= BUFLEN) + { + /* Access the next data */ + fillReverse(buffer[..BUFLEN], parent.theReverse); + parent.gHASH(parent.theReverse); + + /* Adjust counters */ + buffer = buffer[BUFLEN..]; + } + + /* If we have remaining data */ + if (!buffer.IsEmpty) + { + /* Copy data into the cache */ + buffer.CopyTo(theBuffer.AsSpan(numActive)); + numActive += buffer.Length; + } + + /* Adjust the number of bytes processed */ + numHashed += (ulong)pLen; + } +#endif + + /** + * complete hash. + */ + internal void completeHash() + { + /* If we have remaining data */ + if (numActive > 0) + { + /* Access the next data */ + Arrays.Fill(parent.theReverse, (byte)0); + fillReverse(theBuffer, 0, numActive, parent.theReverse); + + /* hash value */ + parent.gHASH(parent.theReverse); + } + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/GcmSivBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/GcmSivBlockCipher.cs.meta new file mode 100644 index 000000000..e0583b855 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/GcmSivBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b5fc7a250a2c50e4c8e2e15489f8e5ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/IAeadBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/IAeadBlockCipher.cs new file mode 100644 index 000000000..f87abec56 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/IAeadBlockCipher.cs @@ -0,0 +1,19 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes +{ + /// An IAeadCipher based on an IBlockCipher. + public interface IAeadBlockCipher + : IAeadCipher + { + /// The block size for this cipher, in bytes. + int GetBlockSize(); + + /// The block cipher underlying this algorithm. + IBlockCipher UnderlyingCipher { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/IAeadBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/IAeadBlockCipher.cs.meta new file mode 100644 index 000000000..b33e62d70 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/IAeadBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 18514e25fcebaa840909a75294f2f1e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/IAeadCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/IAeadCipher.cs new file mode 100644 index 000000000..68b4ebd63 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/IAeadCipher.cs @@ -0,0 +1,134 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes +{ + /// + /// A cipher mode that includes authenticated encryption with a streaming mode and optional + /// associated data. + /// + /// + /// Implementations of this interface may operate in a packet mode (where all input data is + /// buffered and processed during the call to DoFinal, or in a streaming mode (where output + /// data is incrementally produced with each call to ProcessByte or ProcessBytes. This is + /// important to consider during decryption: in a streaming mode, unauthenticated plaintext + /// data may be output prior to the call to DoFinal that results in an authentication failure. + /// The higher level protocol utilising this cipher must ensure the plaintext data is handled + /// appropriately until the end of data is reached and the entire ciphertext is authenticated. + /// + /// + public interface IAeadCipher + { + /// The name of the algorithm this cipher implements. + string AlgorithmName { get; } + + /// Initialise the cipher. + /// Parameter can either be an AeadParameters or a ParametersWithIV object. + /// Initialise for encryption if true, for decryption if false. + /// The key or other data required by the cipher. + void Init(bool forEncryption, ICipherParameters parameters); + + /// Add a single byte to the associated data check. + /// If the implementation supports it, this will be an online operation and will not retain the associated data. + /// The byte to be processed. + void ProcessAadByte(byte input); + + /// Add a sequence of bytes to the associated data check. + /// If the implementation supports it, this will be an online operation and will not retain the associated data. + /// The input byte array. + /// The offset into the input array where the data to be processed starts. + /// The number of bytes to be processed. + void ProcessAadBytes(byte[] inBytes, int inOff, int len); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// Add a span of bytes to the associated data check. + /// If the implementation supports it, this will be an online operation and will not retain the associated data. + /// the span containing the data. + void ProcessAadBytes(ReadOnlySpan input); +#endif + + /** + * Encrypt/decrypt a single byte. + * + * @param input the byte to be processed. + * @param outBytes the output buffer the processed byte goes into. + * @param outOff the offset into the output byte array the processed data starts at. + * @return the number of bytes written to out. + * @exception DataLengthException if the output buffer is too small. + */ + int ProcessByte(byte input, byte[] outBytes, int outOff); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int ProcessByte(byte input, Span output); +#endif + + /** + * Process a block of bytes from in putting the result into out. + * + * @param inBytes the input byte array. + * @param inOff the offset into the in array where the data to be processed starts. + * @param len the number of bytes to be processed. + * @param outBytes the output buffer the processed bytes go into. + * @param outOff the offset into the output byte array the processed data starts at. + * @return the number of bytes written to out. + * @exception DataLengthException if the output buffer is too small. + */ + int ProcessBytes(byte[] inBytes, int inOff, int len, byte[] outBytes, int outOff); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int ProcessBytes(ReadOnlySpan input, Span output); +#endif + + /** + * Finish the operation either appending or verifying the MAC at the end of the data. + * + * @param outBytes space for any resulting output data. + * @param outOff offset into out to start copying the data at. + * @return number of bytes written into out. + * @throws InvalidOperationException if the cipher is in an inappropriate state. + * @throws InvalidCipherTextException if the MAC fails to match. + */ + int DoFinal(byte[] outBytes, int outOff); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int DoFinal(Span output); +#endif + + /** + * Return the value of the MAC associated with the last stream processed. + * + * @return MAC for plaintext data. + */ + byte[] GetMac(); + + /** + * Return the size of the output buffer required for a ProcessBytes + * an input of len bytes. + * + * @param len the length of the input. + * @return the space required to accommodate a call to ProcessBytes + * with len bytes of input. + */ + int GetUpdateOutputSize(int len); + + /** + * Return the size of the output buffer required for a ProcessBytes plus a + * DoFinal with an input of len bytes. + * + * @param len the length of the input. + * @return the space required to accommodate a call to ProcessBytes and DoFinal + * with len bytes of input. + */ + int GetOutputSize(int len); + + /// + /// Reset the cipher to the same state as it was after the last init (if there was one). + /// + void Reset(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/IAeadCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/IAeadCipher.cs.meta new file mode 100644 index 000000000..3d35abc0e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/IAeadCipher.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b54e31e53ba570544b2447df56ca405e +timeCreated: 1572510037 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/IBlockCipherMode.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/IBlockCipherMode.cs new file mode 100644 index 000000000..ba90386ae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/IBlockCipherMode.cs @@ -0,0 +1,23 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes +{ + public interface IBlockCipherMode + : IBlockCipher + { + /// Return the underlying this cipher mode. + IBlockCipher UnderlyingCipher { get; } + + /// Indicates whether this cipher mode can handle partial blocks. + bool IsPartialBlockOkay { get; } + + /// + /// Reset the cipher mode to the same state as it was after the last init (if there was one). + /// + void Reset(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/IBlockCipherMode.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/IBlockCipherMode.cs.meta new file mode 100644 index 000000000..58d562a22 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/IBlockCipherMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cdd6a50d059b6a947b9d90efa82a31ff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/KCcmBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/KCcmBlockCipher.cs new file mode 100644 index 000000000..27c0601fd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/KCcmBlockCipher.cs @@ -0,0 +1,668 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes +{ + public class KCcmBlockCipher + : IAeadBlockCipher + { + private static readonly int BYTES_IN_INT = 4; + private static readonly int BITS_IN_BYTE = 8; + + private static readonly int MAX_MAC_BIT_LENGTH = 512; + private static readonly int MIN_MAC_BIT_LENGTH = 64; + + private IBlockCipher engine; + + private int macSize; + private bool forEncryption; + + private byte[] initialAssociatedText; + private byte[] mac; + private byte[] macBlock; + + private byte[] nonce; + + private byte[] G1; + private byte[] buffer; + + private byte[] s; + private byte[] counter; + + private readonly MemoryStream associatedText = new MemoryStream(); + private readonly MemoryStream data = new MemoryStream(); + + /* + * + * + */ + private int Nb_ = 4; + + private void setNb(int Nb) + { + if (Nb == 4 || Nb == 6 || Nb == 8) + { + Nb_ = Nb; + } + else + { + throw new ArgumentException("Nb = 4 is recommended by DSTU7624 but can be changed to only 6 or 8 in this implementation"); + } + } + + /// + /// Base constructor. Nb value is set to 4. + /// + /// base cipher to use under CCM. + public KCcmBlockCipher(IBlockCipher engine): this(engine, 4) + { + } + + /// + /// Constructor allowing Nb configuration. + /// + /// Nb is a parameter specified in CCM mode of DSTU7624 standard. + /// This parameter specifies maximum possible length of input.It should + /// be calculated as follows: Nb = 1 / 8 * (-3 + log[2]Nmax) + 1, + /// where Nmax - length of input message in bits.For practical reasons + /// Nmax usually less than 4Gb, e.g. for Nmax = 2^32 - 1, Nb = 4. + /// + /// base cipher to use under CCM. + /// Nb value to use. + public KCcmBlockCipher(IBlockCipher engine, int Nb) + { + this.engine = engine; + this.macSize = engine.GetBlockSize(); + this.nonce = new byte[engine.GetBlockSize()]; + this.initialAssociatedText = new byte[engine.GetBlockSize()]; + this.mac = new byte[engine.GetBlockSize()]; + this.macBlock = new byte[engine.GetBlockSize()]; + this.G1 = new byte[engine.GetBlockSize()]; + this.buffer = new byte[engine.GetBlockSize()]; + this.s = new byte[engine.GetBlockSize()]; + this.counter = new byte[engine.GetBlockSize()]; + setNb(Nb); + } + + public virtual void Init(bool forEncryption, ICipherParameters parameters) + { + + ICipherParameters cipherParameters; + if (parameters is AeadParameters) + { + + AeadParameters param = (AeadParameters)parameters; + + if (param.MacSize > MAX_MAC_BIT_LENGTH || param.MacSize < MIN_MAC_BIT_LENGTH || param.MacSize % 8 != 0) + { + throw new ArgumentException("Invalid mac size specified"); + } + + nonce = param.GetNonce(); + macSize = param.MacSize / BITS_IN_BYTE; + initialAssociatedText = param.GetAssociatedText(); + cipherParameters = param.Key; + } + else if (parameters is ParametersWithIV) + { + nonce = ((ParametersWithIV)parameters).GetIV(); + macSize = engine.GetBlockSize(); // use default blockSize for MAC if it is not specified + initialAssociatedText = null; + cipherParameters = ((ParametersWithIV)parameters).Parameters; + } + else + { + throw new ArgumentException("Invalid parameters specified"); + } + + this.mac = new byte[macSize]; + this.forEncryption = forEncryption; + engine.Init(true, cipherParameters); + + counter[0] = 0x01; // defined in standard + + if (initialAssociatedText != null) + { + ProcessAadBytes(initialAssociatedText, 0, initialAssociatedText.Length); + } + } + + public virtual string AlgorithmName => engine.AlgorithmName + "/KCCM"; + + public virtual int GetBlockSize() + { + return engine.GetBlockSize(); + } + + public virtual IBlockCipher UnderlyingCipher => engine; + + public virtual void ProcessAadByte(byte input) + { + associatedText.WriteByte(input); + } + + public virtual void ProcessAadBytes(byte[] input, int inOff, int len) + { + associatedText.Write(input, inOff, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void ProcessAadBytes(ReadOnlySpan input) + { + associatedText.Write(input); + } +#endif + + private void ProcessAAD(byte[] assocText, int assocOff, int assocLen, int dataLen) + { + if (assocLen - assocOff < engine.GetBlockSize()) + { + throw new ArgumentException("authText buffer too short"); + } + if (assocLen % engine.GetBlockSize() != 0) + { + throw new ArgumentException("padding not supported"); + } + + Array.Copy(nonce, 0, G1, 0, nonce.Length - Nb_ - 1); + + intToBytes(dataLen, buffer, 0); // for G1 + + Array.Copy(buffer, 0, G1, nonce.Length - Nb_ - 1, BYTES_IN_INT); + + G1[G1.Length - 1] = getFlag(true, macSize); + + engine.ProcessBlock(G1, 0, macBlock, 0); + + intToBytes(assocLen, buffer, 0); // for G2 + + if (assocLen <= engine.GetBlockSize() - Nb_) + { + for (int byteIndex = 0; byteIndex < assocLen; byteIndex++) + { + buffer[byteIndex + Nb_] ^= assocText[assocOff + byteIndex]; + } + + for (int byteIndex = 0; byteIndex < engine.GetBlockSize(); byteIndex++) + { + macBlock[byteIndex] ^= buffer[byteIndex]; + } + + engine.ProcessBlock(macBlock, 0, macBlock, 0); + + return; + } + + for (int byteIndex = 0; byteIndex < engine.GetBlockSize(); byteIndex++) + { + macBlock[byteIndex] ^= buffer[byteIndex]; + } + + engine.ProcessBlock(macBlock, 0, macBlock, 0); + + int authLen = assocLen; + while (authLen != 0) + { + for (int byteIndex = 0; byteIndex < engine.GetBlockSize(); byteIndex++) + { + macBlock[byteIndex] ^= assocText[byteIndex + assocOff]; + } + + engine.ProcessBlock(macBlock, 0, macBlock, 0); + + assocOff += engine.GetBlockSize(); + authLen -= engine.GetBlockSize(); + } + } + + public virtual int ProcessByte(byte input, byte[] output, int outOff) + { + data.WriteByte(input); + + return 0; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessByte(byte input, Span output) + { + data.WriteByte(input); + + return 0; + } +#endif + + public virtual int ProcessBytes(byte[] input, int inOff, int inLen, byte[] output, int outOff) + { + Check.DataLength(input, inOff, inLen, "input buffer too short"); + + data.Write(input, inOff, inLen); + + return 0; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBytes(ReadOnlySpan input, Span output) + { + data.Write(input); + + return 0; + } +#endif + + public int ProcessPacket(byte[] input, int inOff, int len, byte[] output, int outOff) + { + Check.DataLength(input, inOff, len, "input buffer too short"); + Check.OutputLength(output, outOff, len, "output buffer too short"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ProcessPacket(input.AsSpan(inOff, len), output.AsSpan(outOff)); +#else + if (associatedText.Length > 0) + { + byte[] aad = associatedText.GetBuffer(); + int aadLen = Convert.ToInt32(associatedText.Length); + + int dataLen = Convert.ToInt32(data.Length) - (forEncryption ? 0 : macSize); + + ProcessAAD(aad, 0, aadLen, dataLen); + } + + if (forEncryption) + { + Check.DataLength(len % engine.GetBlockSize() != 0, "partial blocks not supported"); + + CalculateMac(input, inOff, len); + engine.ProcessBlock(nonce, 0, s, 0); + + int totalLength = len; + while (totalLength > 0) + { + ProcessBlock(input, inOff, output, outOff); + totalLength -= engine.GetBlockSize(); + inOff += engine.GetBlockSize(); + outOff += engine.GetBlockSize(); + } + + for (int byteIndex = 0; byteIndex inOff) + { + for (int byteIndex = 0; byteIndex input, Span output) + { + int len = input.Length; + Check.OutputLength(output, len, "output buffer too short"); + + if (associatedText.Length > 0) + { + byte[] aad = associatedText.GetBuffer(); + int aadLen = Convert.ToInt32(associatedText.Length); + + int dataLen = Convert.ToInt32(data.Length) - (forEncryption ? 0 : macSize); + + ProcessAAD(aad, 0, aadLen, dataLen); + } + + int blockSize = engine.GetBlockSize(), index = 0; + if (forEncryption) + { + Check.DataLength(len % blockSize != 0, "partial blocks not supported"); + + CalculateMac(input); + engine.ProcessBlock(nonce, s); + + int totalLength = len; + while (totalLength > 0) + { + ProcessBlock(input[index..], output[index..]); + totalLength -= blockSize; + index += blockSize; + } + + for (int byteIndex = 0; byteIndex < counter.Length; byteIndex++) + { + s[byteIndex] += counter[byteIndex]; + } + + engine.ProcessBlock(s, buffer); + + for (int byteIndex = 0; byteIndex < macSize; byteIndex++) + { + output[index + byteIndex] = (byte)(buffer[byteIndex] ^ macBlock[byteIndex]); + } + + Array.Copy(macBlock, 0, mac, 0, macSize); + + Reset(); + + return len + macSize; + } + else + { + Check.DataLength((len - macSize) % blockSize != 0, "partial blocks not supported"); + + engine.ProcessBlock(nonce, 0, s, 0); + + int blocks = len / engine.GetBlockSize(); + + for (int blockNum = 0; blockNum < blocks; blockNum++) + { + ProcessBlock(input[index..], output[index..]); + index += blockSize; + } + + if (len > index) + { + for (int byteIndex = 0; byteIndex < counter.Length; byteIndex++) + { + s[byteIndex] += counter[byteIndex]; + } + + engine.ProcessBlock(s, buffer); + + for (int byteIndex = 0; byteIndex < macSize; byteIndex++) + { + output[index + byteIndex] = (byte)(buffer[byteIndex] ^ input[index + byteIndex]); + } + index += macSize; + } + + for (int byteIndex = 0; byteIndex < counter.Length; byteIndex++) + { + s[byteIndex] += counter[byteIndex]; + } + + engine.ProcessBlock(s, buffer); + + output[(index - macSize)..index].CopyTo(buffer); + + CalculateMac(output[..(index - macSize)]); + + Array.Copy(macBlock, 0, mac, 0, macSize); + + Span calculatedMac = macSize <= 64 + ? stackalloc byte[macSize] + : new byte[macSize]; + + calculatedMac.CopyFrom(buffer); + + if (!Arrays.ConstantTimeAreEqual(mac.AsSpan(0, macSize), calculatedMac)) + throw new InvalidCipherTextException("mac check failed"); + + Reset(); + + return len - macSize; + } + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void CalculateMac(ReadOnlySpan authText) + { + int blockSize = engine.GetBlockSize(); + + while (!authText.IsEmpty) + { + for (int byteIndex = 0; byteIndex < blockSize; byteIndex++) + { + macBlock[byteIndex] ^= authText[byteIndex]; + } + + engine.ProcessBlock(macBlock, macBlock); + + authText = authText[blockSize..]; + } + } + + private void ProcessBlock(ReadOnlySpan input, Span output) + { + for (int byteIndex = 0; byteIndex < counter.Length; byteIndex++) + { + s[byteIndex] += counter[byteIndex]; + } + + engine.ProcessBlock(s, buffer); + + int blockSize = engine.GetBlockSize(); + for (int byteIndex = 0; byteIndex < blockSize; byteIndex++) + { + output[byteIndex] = (byte)(buffer[byteIndex] ^ input[byteIndex]); + } + } +#else + private void CalculateMac(byte[] authText, int authOff, int len) + { + int blockSize = engine.GetBlockSize(); + int totalLen = len; + while (totalLen > 0) + { + for (int byteIndex = 0; byteIndex < blockSize; byteIndex++) + { + macBlock[byteIndex] ^= authText[authOff + byteIndex]; + } + + engine.ProcessBlock(macBlock, 0, macBlock, 0); + + totalLen -= blockSize; + authOff += blockSize; + } + } + + private void ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + + for (int byteIndex = 0; byteIndex < counter.Length; byteIndex++) + { + s[byteIndex] += counter[byteIndex]; + } + + engine.ProcessBlock(s, 0, buffer, 0); + + for (int byteIndex = 0; byteIndex < engine.GetBlockSize(); byteIndex++) + { + output[outOff + byteIndex] = (byte)(buffer[byteIndex] ^ input[inOff + byteIndex]); + } + } +#endif + + public virtual int DoFinal(byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(output.AsSpan(outOff)); +#else + byte[] buf = data.GetBuffer(); + int bufLen = Convert.ToInt32(data.Length); + + int len = ProcessPacket(buf, 0, bufLen, output, outOff); + + Reset(); + + return len; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int DoFinal(Span output) + { + byte[] buf = data.GetBuffer(); + int bufLen = Convert.ToInt32(data.Length); + + int len = ProcessPacket(buf.AsSpan(0, bufLen), output); + + Reset(); + + return len; + } +#endif + + public virtual byte[] GetMac() + { + return Arrays.Clone(mac); + } + + public virtual int GetUpdateOutputSize(int len) + { + return len; + } + + public virtual int GetOutputSize(int len) + { + return len + macSize; + } + + public virtual void Reset() + { + Arrays.Fill(G1, (byte)0); + Arrays.Fill(buffer, (byte)0); + Arrays.Fill(counter, (byte)0); + Arrays.Fill(macBlock, (byte)0); + + counter[0] = 0x01; + data.SetLength(0); + associatedText.SetLength(0); + + if (initialAssociatedText != null) + { + ProcessAadBytes(initialAssociatedText, 0, initialAssociatedText.Length); + } + } + + private void intToBytes( + int num, + byte[] outBytes, + int outOff) + { + outBytes[outOff + 3] = (byte)(num >> 24); + outBytes[outOff + 2] = (byte)(num >> 16); + outBytes[outOff + 1] = (byte)(num >> 8); + outBytes[outOff] = (byte)num; + } + + private byte getFlag(bool authTextPresents, int macSize) + { + StringBuilder flagByte = new StringBuilder(); + + if (authTextPresents) + { + flagByte.Append("1"); + } + else + { + flagByte.Append("0"); + } + + + switch (macSize) + { + case 8: + flagByte.Append("010"); // binary 2 + break; + case 16: + flagByte.Append("011"); // binary 3 + break; + case 32: + flagByte.Append("100"); // binary 4 + break; + case 48: + flagByte.Append("101"); // binary 5 + break; + case 64: + flagByte.Append("110"); // binary 6 + break; + } + + string binaryNb = Convert.ToString(Nb_ - 1, 2); + while (binaryNb.Length < 4) + { + binaryNb = new StringBuilder(binaryNb).Insert(0, "0").ToString(); + } + + flagByte.Append(binaryNb); + + return (byte)Convert.ToInt32(flagByte.ToString(), 2); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/KCcmBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/KCcmBlockCipher.cs.meta new file mode 100644 index 000000000..1d59104fb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/KCcmBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: afe761e6598d68e4397a8694051cd2f9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/KCtrBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/KCtrBlockCipher.cs new file mode 100644 index 000000000..520638b9c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/KCtrBlockCipher.cs @@ -0,0 +1,250 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes +{ + /** + * Implements a Gamming or Counter (CTR) mode on top of a DSTU 7624 block cipher. + */ + public class KCtrBlockCipher + : IStreamCipher, IBlockCipherMode + { + private byte[] IV; + private byte[] ofbV; + private byte[] ofbOutV; + private bool initialised; + + private int byteCount; + + private readonly int blockSize; + private readonly IBlockCipher cipher; + + /** + * Basic constructor. + * + * @param cipher the block cipher to be used as the basis of the + * feedback mode. + */ + public KCtrBlockCipher(IBlockCipher cipher) + { + this.cipher = cipher; + this.IV = new byte[cipher.GetBlockSize()]; + this.blockSize = cipher.GetBlockSize(); + + this.ofbV = new byte[cipher.GetBlockSize()]; + this.ofbOutV = new byte[cipher.GetBlockSize()]; + } + + /** + * return the underlying block cipher that we are wrapping. + * + * @return the underlying block cipher that we are wrapping. + */ + public IBlockCipher UnderlyingCipher => cipher; + + /** + * Initialise the cipher and, possibly, the initialisation vector (IV). + * If an IV isn't passed as part of the parameter, the IV will be all zeros. + * An IV which is too short is handled in FIPS compliant fashion. + * + * @param forEncryption if true the cipher is initialised for + * encryption, if false for decryption. + * @param param the key and other data required by the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public void Init( + bool forEncryption, + ICipherParameters parameters) + { + this.initialised = true; + if (parameters is ParametersWithIV) + { + ParametersWithIV ivParam = (ParametersWithIV)parameters; + byte[] iv = ivParam.GetIV(); + int diff = IV.Length - iv.Length; + + Array.Clear(IV, 0, IV.Length); + Array.Copy(iv, 0, IV, diff, iv.Length); + + parameters = ivParam.Parameters; + } + else + { + throw new ArgumentException("Invalid parameter passed"); + } + + // if it's null, key is to be reused. + if (parameters != null) + { + cipher.Init(true, parameters); + } + + Reset(); + } + + /** + * return the algorithm name and mode. + * + * @return the name of the underlying algorithm followed by "/KCTR" + * and the block size in bits. + */ + public string AlgorithmName + { + get { return cipher.AlgorithmName + "/KCTR"; } + } + + public bool IsPartialBlockOkay + { + get { return true; } + } + + /** + * return the block size we are operating at. + * + * @return the block size we are operating at (in bytes). + */ + public int GetBlockSize() + { + return cipher.GetBlockSize(); + } + + public byte ReturnByte(byte input) + { + return CalculateByte(input); + } + + public void ProcessBytes(byte[] input, int inOff, int len, byte[] output, int outOff) + { + Check.DataLength(input, inOff, len, "input buffer too small"); + Check.OutputLength(output, outOff, len, "output buffer too short"); + + int inStart = inOff; + int inEnd = inOff + len; + int outStart = outOff; + + while (inStart < inEnd) + { + output[outStart++] = CalculateByte(input[inStart++]); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void ProcessBytes(ReadOnlySpan input, Span output) + { + Check.OutputLength(output, input.Length, "output buffer too short"); + + for (int i = 0; i < input.Length; ++i) + { + output[i] = CalculateByte(input[i]); + } + } +#endif + + protected byte CalculateByte(byte b) + { + if (byteCount == 0) + { + incrementCounterAt(0); + + checkCounter(); + + cipher.ProcessBlock(ofbV, 0, ofbOutV, 0); + + return (byte)(ofbOutV[byteCount++] ^ b); + } + + byte rv = (byte)(ofbOutV[byteCount++] ^ b); + + if (byteCount == ofbV.Length) + { + byteCount = 0; + } + + return rv; + } + + /** + * Process one block of input from the array in and write it to + * the out array. + * + * @param input the array containing the input data. + * @param inOff offset into the in array the data starts at. + * @param output the array the output data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @exception DataLengthException if there isn't enough data in in, or + * space in out. + * @exception InvalidOperationException if the cipher isn't initialised. + * @return the number of bytes processed and produced. + */ + public int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + int blockSize = GetBlockSize(); + Check.DataLength(input, inOff, blockSize, "input buffer too short"); + Check.OutputLength(output, outOff, blockSize, "output buffer too short"); + + ProcessBytes(input, inOff, blockSize, output, outOff); + + return blockSize; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessBlock(ReadOnlySpan input, Span output) + { + int blockSize = GetBlockSize(); + Check.DataLength(input, blockSize, "input buffer too short"); + Check.OutputLength(output, blockSize, "output buffer too short"); + + ProcessBytes(input[..blockSize], output); + + return blockSize; + } +#endif + + /** + * reset the chaining vector back to the IV and reset the underlying + * cipher. + */ + public void Reset() + { + if (initialised) + { + cipher.ProcessBlock(IV, 0, ofbV, 0); + } + byteCount = 0; + } + + private void incrementCounterAt(int pos) + { + int i = pos; + while (i < ofbV.Length) + { + if (++ofbV[i++] != 0) + { + break; + } + } + } + + private void checkCounter() + { + // TODO: + // if the IV is the same as the blocksize we assume the user knows what they are doing + // if (IV.length < ofbV.length) + // { + // for (int i = 0; i != IV.length; i++) + // { + // if (ofbV[i] != IV[i]) + // { + // throw new IllegalStateException("Counter in KCTR mode out of range."); + // } + // } + // } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/KCtrBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/KCtrBlockCipher.cs.meta new file mode 100644 index 000000000..e4cd168f1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/KCtrBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc8bdac4ed8e9064e9ac9b8b4f5af217 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/OCBBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/OCBBlockCipher.cs new file mode 100644 index 000000000..67cdd0dae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/OCBBlockCipher.cs @@ -0,0 +1,734 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes +{ + /// An implementation of RFC 7253 on The OCB + /// Authenticated-Encryption Algorithm. + /// + /// For those still concerned about the original patents around this, please see: + /// https://mailarchive.ietf.org/arch/msg/cfrg/qLTveWOdTJcLn4HP3ev-vrj05Vg/ + /// Text reproduced below: + /// + /// Phillip Rogaway<rogaway@cs.ucdavis.edu> Sat, 27 February 2021 02:46 UTC + /// + /// I can confirm that I have abandoned all OCB patents and placed into the public domain all OCB-related IP of + /// mine. While I have been telling people this for quite some time, I don't think I ever made a proper announcement + /// to the CFRG or on the OCB webpage. Consider that done. + /// + /// + public class OcbBlockCipher + : IAeadBlockCipher + { + private const int BLOCK_SIZE = 16; + + private readonly IBlockCipher hashCipher; + private readonly IBlockCipher mainCipher; + + /* + * CONFIGURATION + */ + private bool forEncryption; + private int macSize; + private byte[] initialAssociatedText; + + /* + * KEY-DEPENDENT + */ + // NOTE: elements are lazily calculated + private IList L; + private byte[] L_Asterisk, L_Dollar; + + /* + * NONCE-DEPENDENT + */ + private byte[] KtopInput = null; + private byte[] Stretch = new byte[24]; + private byte[] OffsetMAIN_0 = new byte[16]; + + /* + * PER-ENCRYPTION/DECRYPTION + */ + private byte[] hashBlock, mainBlock; + private int hashBlockPos, mainBlockPos; + private long hashBlockCount, mainBlockCount; + private byte[] OffsetHASH; + private byte[] Sum; + private byte[] OffsetMAIN = new byte[16]; + private byte[] Checksum; + + // NOTE: The MAC value is preserved after doFinal + private byte[] macBlock; + + public OcbBlockCipher(IBlockCipher hashCipher, IBlockCipher mainCipher) + { + if (hashCipher == null) + throw new ArgumentNullException("hashCipher"); + if (hashCipher.GetBlockSize() != BLOCK_SIZE) + throw new ArgumentException("must have a block size of " + BLOCK_SIZE, "hashCipher"); + if (mainCipher == null) + throw new ArgumentNullException("mainCipher"); + if (mainCipher.GetBlockSize() != BLOCK_SIZE) + throw new ArgumentException("must have a block size of " + BLOCK_SIZE, "mainCipher"); + + if (!hashCipher.AlgorithmName.Equals(mainCipher.AlgorithmName)) + throw new ArgumentException("'hashCipher' and 'mainCipher' must be the same algorithm"); + + this.hashCipher = hashCipher; + this.mainCipher = mainCipher; + } + + public virtual string AlgorithmName => mainCipher.AlgorithmName + "/OCB"; + + public virtual IBlockCipher UnderlyingCipher => mainCipher; + + public virtual void Init(bool forEncryption, ICipherParameters parameters) + { + bool oldForEncryption = this.forEncryption; + this.forEncryption = forEncryption; + this.macBlock = null; + + KeyParameter keyParameter; + + byte[] N; + if (parameters is AeadParameters aeadParameters) + { + N = aeadParameters.GetNonce(); + initialAssociatedText = aeadParameters.GetAssociatedText(); + + int macSizeBits = aeadParameters.MacSize; + if (macSizeBits < 64 || macSizeBits > 128 || macSizeBits % 8 != 0) + throw new ArgumentException("Invalid value for MAC size: " + macSizeBits); + + macSize = macSizeBits / 8; + keyParameter = aeadParameters.Key; + } + else if (parameters is ParametersWithIV parametersWithIV) + { + N = parametersWithIV.GetIV(); + initialAssociatedText = null; + macSize = 16; + keyParameter = (KeyParameter) parametersWithIV.Parameters; + } + else + { + throw new ArgumentException("invalid parameters passed to OCB"); + } + + this.hashBlock = new byte[16]; + this.mainBlock = new byte[forEncryption ? BLOCK_SIZE : (BLOCK_SIZE + macSize)]; + + if (N == null) + { + N = new byte[0]; + } + + if (N.Length > 15) + { + throw new ArgumentException("IV must be no more than 15 bytes"); + } + + /* + * KEY-DEPENDENT INITIALISATION + */ + + if (keyParameter != null) + { + // hashCipher always used in forward mode + hashCipher.Init(true, keyParameter); + mainCipher.Init(forEncryption, keyParameter); + KtopInput = null; + } + else if (oldForEncryption != forEncryption) + { + throw new ArgumentException("cannot change encrypting state without providing key."); + } + + this.L_Asterisk = new byte[16]; + hashCipher.ProcessBlock(L_Asterisk, 0, L_Asterisk, 0); + + this.L_Dollar = OCB_double(L_Asterisk); + + this.L = new List(); + this.L.Add(OCB_double(L_Dollar)); + + /* + * NONCE-DEPENDENT AND PER-ENCRYPTION/DECRYPTION INITIALISATION + */ + + int bottom = ProcessNonce(N); + + int bits = bottom % 8, bytes = bottom / 8; + if (bits == 0) + { + Array.Copy(Stretch, bytes, OffsetMAIN_0, 0, 16); + } + else + { + for (int i = 0; i < 16; ++i) + { + uint b1 = Stretch[bytes]; + uint b2 = Stretch[++bytes]; + this.OffsetMAIN_0[i] = (byte) ((b1 << bits) | (b2 >> (8 - bits))); + } + } + + this.hashBlockPos = 0; + this.mainBlockPos = 0; + + this.hashBlockCount = 0; + this.mainBlockCount = 0; + + this.OffsetHASH = new byte[16]; + this.Sum = new byte[16]; + Array.Copy(OffsetMAIN_0, 0, OffsetMAIN, 0, 16); + this.Checksum = new byte[16]; + + if (initialAssociatedText != null) + { + ProcessAadBytes(initialAssociatedText, 0, initialAssociatedText.Length); + } + } + + protected virtual int ProcessNonce(byte[] N) + { + byte[] nonce = new byte[16]; + Array.Copy(N, 0, nonce, nonce.Length - N.Length, N.Length); + nonce[0] = (byte)(macSize << 4); + nonce[15 - N.Length] |= 1; + + int bottom = nonce[15] & 0x3F; + nonce[15] &= 0xC0; + + /* + * When used with incrementing nonces, the cipher is only applied once every 64 inits. + */ + if (KtopInput == null || !Arrays.AreEqual(nonce, KtopInput)) + { + byte[] Ktop = new byte[16]; + KtopInput = nonce; + hashCipher.ProcessBlock(KtopInput, 0, Ktop, 0); + Array.Copy(Ktop, 0, Stretch, 0, 16); + for (int i = 0; i < 8; ++i) + { + Stretch[16 + i] = (byte)(Ktop[i] ^ Ktop[i + 1]); + } + } + + return bottom; + } + + public virtual int GetBlockSize() + { + return BLOCK_SIZE; + } + + public virtual byte[] GetMac() + { + return macBlock == null + ? new byte[macSize] + : Arrays.Clone(macBlock); + } + + public virtual int GetOutputSize(int len) + { + int totalData = len + mainBlockPos; + if (forEncryption) + { + return totalData + macSize; + } + return totalData < macSize ? 0 : totalData - macSize; + } + + public virtual int GetUpdateOutputSize(int len) + { + int totalData = len + mainBlockPos; + if (!forEncryption) + { + if (totalData < macSize) + { + return 0; + } + totalData -= macSize; + } + return totalData - totalData % BLOCK_SIZE; + } + + public virtual void ProcessAadByte(byte input) + { + hashBlock[hashBlockPos] = input; + if (++hashBlockPos == hashBlock.Length) + { + ProcessHashBlock(); + } + } + + public virtual void ProcessAadBytes(byte[] input, int off, int len) + { + for (int i = 0; i < len; ++i) + { + hashBlock[hashBlockPos] = input[off + i]; + if (++hashBlockPos == hashBlock.Length) + { + ProcessHashBlock(); + } + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void ProcessAadBytes(ReadOnlySpan input) + { + for (int i = 0; i < input.Length; ++i) + { + hashBlock[hashBlockPos] = input[i]; + if (++hashBlockPos == hashBlock.Length) + { + ProcessHashBlock(); + } + } + } +#endif + + public virtual int ProcessByte(byte input, byte[] output, int outOff) + { + mainBlock[mainBlockPos] = input; + if (++mainBlockPos == mainBlock.Length) + { + ProcessMainBlock(output, outOff); + return BLOCK_SIZE; + } + return 0; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessByte(byte input, Span output) + { + mainBlock[mainBlockPos] = input; + if (++mainBlockPos == mainBlock.Length) + { + ProcessMainBlock(output); + return BLOCK_SIZE; + } + return 0; + } +#endif + + public virtual int ProcessBytes(byte[] input, int inOff, int len, byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ProcessBytes(input.AsSpan(inOff, len), Spans.FromNullable(output, outOff)); +#else + int resultLen = 0; + + for (int i = 0; i < len; ++i) + { + mainBlock[mainBlockPos] = input[inOff + i]; + if (++mainBlockPos == mainBlock.Length) + { + ProcessMainBlock(output, outOff + resultLen); + resultLen += BLOCK_SIZE; + } + } + + return resultLen; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBytes(ReadOnlySpan input, Span output) + { + int len = input.Length; + int resultLen = 0; + + for (int i = 0; i < len; ++i) + { + mainBlock[mainBlockPos] = input[i]; + if (++mainBlockPos == mainBlock.Length) + { + ProcessMainBlock(output[resultLen..]); + resultLen += BLOCK_SIZE; + } + } + + return resultLen; + } +#endif + + public virtual int DoFinal(byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DoFinal(output.AsSpan(outOff)); +#else + /* + * For decryption, get the tag from the end of the message + */ + byte[] tag = null; + if (!forEncryption) { + if (mainBlockPos < macSize) + throw new InvalidCipherTextException("data too short"); + + mainBlockPos -= macSize; + tag = new byte[macSize]; + Array.Copy(mainBlock, mainBlockPos, tag, 0, macSize); + } + + /* + * HASH: Process any final partial block; compute final hash value + */ + if (hashBlockPos > 0) + { + OCB_extend(hashBlock, hashBlockPos); + UpdateHASH(L_Asterisk); + } + + /* + * OCB-ENCRYPT/OCB-DECRYPT: Process any final partial block + */ + if (mainBlockPos > 0) + { + if (forEncryption) + { + OCB_extend(mainBlock, mainBlockPos); + Xor(Checksum, mainBlock); + } + + Xor(OffsetMAIN, L_Asterisk); + + byte[] Pad = new byte[16]; + hashCipher.ProcessBlock(OffsetMAIN, 0, Pad, 0); + + Xor(mainBlock, Pad); + + Check.OutputLength(output, outOff, mainBlockPos, "output buffer too short"); + Array.Copy(mainBlock, 0, output, outOff, mainBlockPos); + + if (!forEncryption) + { + OCB_extend(mainBlock, mainBlockPos); + Xor(Checksum, mainBlock); + } + } + + /* + * OCB-ENCRYPT/OCB-DECRYPT: Compute raw tag + */ + Xor(Checksum, OffsetMAIN); + Xor(Checksum, L_Dollar); + hashCipher.ProcessBlock(Checksum, 0, Checksum, 0); + Xor(Checksum, Sum); + + this.macBlock = new byte[macSize]; + Array.Copy(Checksum, 0, macBlock, 0, macSize); + + /* + * Validate or append tag and reset this cipher for the next run + */ + int resultLen = mainBlockPos; + + if (forEncryption) + { + Check.OutputLength(output, outOff, resultLen + macSize, "output buffer too short"); + + // Append tag to the message + Array.Copy(macBlock, 0, output, outOff + resultLen, macSize); + resultLen += macSize; + } + else + { + // Compare the tag from the message with the calculated one + if (!Arrays.ConstantTimeAreEqual(macBlock, tag)) + throw new InvalidCipherTextException("mac check in OCB failed"); + } + + Reset(false); + + return resultLen; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int DoFinal(Span output) + { + /* + * For decryption, get the tag from the end of the message + */ + byte[] tag = null; + if (!forEncryption) + { + if (mainBlockPos < macSize) + throw new InvalidCipherTextException("data too short"); + + mainBlockPos -= macSize; + tag = new byte[macSize]; + Array.Copy(mainBlock, mainBlockPos, tag, 0, macSize); + } + + /* + * HASH: Process any final partial block; compute final hash value + */ + if (hashBlockPos > 0) + { + OCB_extend(hashBlock, hashBlockPos); + UpdateHASH(L_Asterisk); + } + + /* + * OCB-ENCRYPT/OCB-DECRYPT: Process any final partial block + */ + if (mainBlockPos > 0) + { + if (forEncryption) + { + OCB_extend(mainBlock, mainBlockPos); + Xor(Checksum, mainBlock); + } + + Xor(OffsetMAIN, L_Asterisk); + + byte[] Pad = new byte[16]; + hashCipher.ProcessBlock(OffsetMAIN, 0, Pad, 0); + + Xor(mainBlock, Pad); + + Check.OutputLength(output, mainBlockPos, "output buffer too short"); + mainBlock.AsSpan(0, mainBlockPos).CopyTo(output); + + if (!forEncryption) + { + OCB_extend(mainBlock, mainBlockPos); + Xor(Checksum, mainBlock); + } + } + + /* + * OCB-ENCRYPT/OCB-DECRYPT: Compute raw tag + */ + Xor(Checksum, OffsetMAIN); + Xor(Checksum, L_Dollar); + hashCipher.ProcessBlock(Checksum, 0, Checksum, 0); + Xor(Checksum, Sum); + + this.macBlock = new byte[macSize]; + Array.Copy(Checksum, 0, macBlock, 0, macSize); + + /* + * Validate or append tag and reset this cipher for the next run + */ + int resultLen = mainBlockPos; + + if (forEncryption) + { + // Append tag to the message + Check.OutputLength(output, resultLen + macSize, "output buffer too short"); + macBlock.AsSpan(0, macSize).CopyTo(output[resultLen..]); + resultLen += macSize; + } + else + { + // Compare the tag from the message with the calculated one + if (!Arrays.ConstantTimeAreEqual(macBlock, tag)) + throw new InvalidCipherTextException("mac check in OCB failed"); + } + + Reset(false); + + return resultLen; + } +#endif + + public virtual void Reset() + { + Reset(true); + } + + protected virtual void Clear(byte[] bs) + { + if (bs != null) + { + Array.Clear(bs, 0, bs.Length); + } + } + + protected virtual byte[] GetLSub(int n) + { + while (n >= L.Count) + { + L.Add(OCB_double(L[L.Count - 1])); + } + return L[n]; + } + + protected virtual void ProcessHashBlock() + { + /* + * HASH: Process any whole blocks + */ + UpdateHASH(GetLSub(OCB_ntz(++hashBlockCount))); + hashBlockPos = 0; + } + + protected virtual void ProcessMainBlock(byte[] output, int outOff) + { + Check.DataLength(output, outOff, BLOCK_SIZE, "Output buffer too short"); + + /* + * OCB-ENCRYPT/OCB-DECRYPT: Process any whole blocks + */ + + if (forEncryption) + { + Xor(Checksum, mainBlock); + mainBlockPos = 0; + } + + Xor(OffsetMAIN, GetLSub(OCB_ntz(++mainBlockCount))); + + Xor(mainBlock, OffsetMAIN); + mainCipher.ProcessBlock(mainBlock, 0, mainBlock, 0); + Xor(mainBlock, OffsetMAIN); + + Array.Copy(mainBlock, 0, output, outOff, 16); + + if (!forEncryption) + { + Xor(Checksum, mainBlock); + Array.Copy(mainBlock, BLOCK_SIZE, mainBlock, 0, macSize); + mainBlockPos = macSize; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + protected virtual void ProcessMainBlock(Span output) + { + Check.DataLength(output, BLOCK_SIZE, "output buffer too short"); + + /* + * OCB-ENCRYPT/OCB-DECRYPT: Process any whole blocks + */ + + if (forEncryption) + { + Xor(Checksum, mainBlock); + mainBlockPos = 0; + } + + Xor(OffsetMAIN, GetLSub(OCB_ntz(++mainBlockCount))); + + Xor(mainBlock, OffsetMAIN); + mainCipher.ProcessBlock(mainBlock, 0, mainBlock, 0); + Xor(mainBlock, OffsetMAIN); + + mainBlock.AsSpan(0, BLOCK_SIZE).CopyTo(output); + + if (!forEncryption) + { + Xor(Checksum, mainBlock); + Array.Copy(mainBlock, BLOCK_SIZE, mainBlock, 0, macSize); + mainBlockPos = macSize; + } + } +#endif + + protected virtual void Reset(bool clearMac) + { + Clear(hashBlock); + Clear(mainBlock); + + hashBlockPos = 0; + mainBlockPos = 0; + + hashBlockCount = 0; + mainBlockCount = 0; + + Clear(OffsetHASH); + Clear(Sum); + Array.Copy(OffsetMAIN_0, 0, OffsetMAIN, 0, 16); + Clear(Checksum); + + if (clearMac) + { + macBlock = null; + } + + if (initialAssociatedText != null) + { + ProcessAadBytes(initialAssociatedText, 0, initialAssociatedText.Length); + } + } + + protected virtual void UpdateHASH(byte[] LSub) + { + Xor(OffsetHASH, LSub); + Xor(hashBlock, OffsetHASH); + hashCipher.ProcessBlock(hashBlock, 0, hashBlock, 0); + Xor(Sum, hashBlock); + } + + protected static byte[] OCB_double(byte[] block) + { + byte[] result = new byte[16]; + int carry = ShiftLeft(block, result); + + /* + * NOTE: This construction is an attempt at a constant-time implementation. + */ + result[15] ^= (byte)(0x87 >> ((1 - carry) << 3)); + + return result; + } + + protected static void OCB_extend(byte[] block, int pos) + { + block[pos] = (byte) 0x80; + while (++pos < 16) + { + block[pos] = 0; + } + } + + protected static int OCB_ntz(long x) + { + if (x == 0) + { + return 64; + } + + int n = 0; + ulong ux = (ulong)x; + while ((ux & 1UL) == 0UL) + { + ++n; + ux >>= 1; + } + return n; + } + + protected static int ShiftLeft(byte[] block, byte[] output) + { + int i = 16; + uint bit = 0; + while (--i >= 0) + { + uint b = block[i]; + output[i] = (byte) ((b << 1) | bit); + bit = (b >> 7) & 1; + } + return (int)bit; + } + + protected static void Xor(byte[] block, byte[] val) + { + for (int i = 15; i >= 0; --i) + { + block[i] ^= val[i]; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/OCBBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/OCBBlockCipher.cs.meta new file mode 100644 index 000000000..a6a9e5149 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/OCBBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 89052943097a6b3488c0e056459769e9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/OfbBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/OfbBlockCipher.cs new file mode 100644 index 000000000..cb9eeea63 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/OfbBlockCipher.cs @@ -0,0 +1,182 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes +{ + /** + * implements a Output-FeedBack (OFB) mode on top of a simple cipher. + */ + public class OfbBlockCipher + : IBlockCipherMode + { + private byte[] IV; + private byte[] ofbV; + private byte[] ofbOutV; + + private readonly int blockSize; + private readonly IBlockCipher cipher; + + /** + * Basic constructor. + * + * @param cipher the block cipher to be used as the basis of the + * feedback mode. + * @param blockSize the block size in bits (note: a multiple of 8) + */ + public OfbBlockCipher( + IBlockCipher cipher, + int blockSize) + { + this.cipher = cipher; + this.blockSize = blockSize / 8; + + this.IV = new byte[cipher.GetBlockSize()]; + this.ofbV = new byte[cipher.GetBlockSize()]; + this.ofbOutV = new byte[cipher.GetBlockSize()]; + } + + /** + * return the underlying block cipher that we are wrapping. + * + * @return the underlying block cipher that we are wrapping. + */ + public IBlockCipher UnderlyingCipher => cipher; + + /** + * Initialise the cipher and, possibly, the initialisation vector (IV). + * If an IV isn't passed as part of the parameter, the IV will be all zeros. + * An IV which is too short is handled in FIPS compliant fashion. + * + * @param forEncryption if true the cipher is initialised for + * encryption, if false for decryption. + * @param param the key and other data required by the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public void Init( + bool forEncryption, //ignored by this OFB mode + ICipherParameters parameters) + { + if (parameters is ParametersWithIV ivParam) + { + byte[] iv = ivParam.GetIV(); + + if (iv.Length < IV.Length) + { + // prepend the supplied IV with zeros (per FIPS PUB 81) + Array.Copy(iv, 0, IV, IV.Length - iv.Length, iv.Length); + for (int i = 0; i < IV.Length - iv.Length; i++) + { + IV[i] = 0; + } + } + else + { + Array.Copy(iv, 0, IV, 0, IV.Length); + } + + parameters = ivParam.Parameters; + } + + Reset(); + + // if it's null, key is to be reused. + if (parameters != null) + { + cipher.Init(true, parameters); + } + } + + /** + * return the algorithm name and mode. + * + * @return the name of the underlying algorithm followed by "/OFB" + * and the block size in bits + */ + public string AlgorithmName + { + get { return cipher.AlgorithmName + "/OFB" + (blockSize * 8); } + } + + public bool IsPartialBlockOkay + { + get { return true; } + } + + /** + * return the block size we are operating at (in bytes). + * + * @return the block size we are operating at (in bytes). + */ + public int GetBlockSize() + { + return blockSize; + } + + public int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + Check.DataLength(input, inOff, blockSize, "input buffer too short"); + Check.OutputLength(output, outOff, blockSize, "output buffer too short"); + + cipher.ProcessBlock(ofbV, 0, ofbOutV, 0); + + // + // XOR the ofbV with the plaintext producing the cipher text (and + // the next input block). + // + for (int i = 0; i < blockSize; i++) + { + output[outOff + i] = (byte)(ofbOutV[i] ^ input[inOff + i]); + } + + // + // change over the input block. + // + Array.Copy(ofbV, blockSize, ofbV, 0, ofbV.Length - blockSize); + Array.Copy(ofbOutV, 0, ofbV, ofbV.Length - blockSize, blockSize); + + return blockSize; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessBlock(ReadOnlySpan input, Span output) + { + Check.DataLength(input, blockSize, "input buffer too short"); + Check.OutputLength(output, blockSize, "output buffer too short"); + + cipher.ProcessBlock(ofbV, ofbOutV); + + // + // XOR the ofbV with the plaintext producing the cipher text (and + // the next input block). + // + for (int i = 0; i < blockSize; i++) + { + output[i] = (byte)(ofbOutV[i] ^ input[i]); + } + + // + // change over the input block. + // + Array.Copy(ofbV, blockSize, ofbV, 0, ofbV.Length - blockSize); + Array.Copy(ofbOutV, 0, ofbV, ofbV.Length - blockSize, blockSize); + + return blockSize; + } +#endif + + /** + * reset the feedback vector back to the IV and reset the underlying + * cipher. + */ + public void Reset() + { + Array.Copy(IV, 0, ofbV, 0, IV.Length); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/OfbBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/OfbBlockCipher.cs.meta new file mode 100644 index 000000000..06ef7cb8a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/OfbBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71bc36ce7925c074aa3654b21bda3a7f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/OpenPgpCfbBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/OpenPgpCfbBlockCipher.cs new file mode 100644 index 000000000..24ff92f85 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/OpenPgpCfbBlockCipher.cs @@ -0,0 +1,409 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes +{ + /** + * Implements OpenPGP's rather strange version of Cipher-FeedBack (CFB) mode + * on top of a simple cipher. This class assumes the IV has been prepended + * to the data stream already, and just accomodates the reset after + * (blockSize + 2) bytes have been read. + *

+ * For further info see RFC 2440. + *

+ */ + public class OpenPgpCfbBlockCipher + : IBlockCipherMode + { + private byte[] IV; + private byte[] FR; + private byte[] FRE; + + private readonly IBlockCipher cipher; + private readonly int blockSize; + + private int count; + private bool forEncryption; + + /** + * Basic constructor. + * + * @param cipher the block cipher to be used as the basis of the + * feedback mode. + */ + public OpenPgpCfbBlockCipher( + IBlockCipher cipher) + { + this.cipher = cipher; + + this.blockSize = cipher.GetBlockSize(); + this.IV = new byte[blockSize]; + this.FR = new byte[blockSize]; + this.FRE = new byte[blockSize]; + } + + /** + * return the underlying block cipher that we are wrapping. + * + * @return the underlying block cipher that we are wrapping. + */ + public IBlockCipher UnderlyingCipher => cipher; + + /** + * return the algorithm name and mode. + * + * @return the name of the underlying algorithm followed by "/PGPCFB" + * and the block size in bits. + */ + public string AlgorithmName + { + get { return cipher.AlgorithmName + "/OpenPGPCFB"; } + } + + public bool IsPartialBlockOkay + { + get { return true; } + } + + /** + * return the block size we are operating at. + * + * @return the block size we are operating at (in bytes). + */ + public int GetBlockSize() + { + return cipher.GetBlockSize(); + } + + public int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return forEncryption + ? EncryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)) + : DecryptBlock(input.AsSpan(inOff), output.AsSpan(outOff)); +#else + return forEncryption + ? EncryptBlock(input, inOff, output, outOff) + : DecryptBlock(input, inOff, output, outOff); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int ProcessBlock(ReadOnlySpan input, Span output) + { + return forEncryption + ? EncryptBlock(input, output) + : DecryptBlock(input, output); + } +#endif + + /** + * reset the chaining vector back to the IV and reset the underlying + * cipher. + */ + public void Reset() + { + count = 0; + + Array.Copy(IV, 0, FR, 0, FR.Length); + } + + /** + * Initialise the cipher and, possibly, the initialisation vector (IV). + * If an IV isn't passed as part of the parameter, the IV will be all zeros. + * An IV which is too short is handled in FIPS compliant fashion. + * + * @param forEncryption if true the cipher is initialised for + * encryption, if false for decryption. + * @param parameters the key and other data required by the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public void Init(bool forEncryption, ICipherParameters parameters) + { + this.forEncryption = forEncryption; + + if (parameters is ParametersWithIV ivParam) + { + byte[] iv = ivParam.GetIV(); + + if (iv.Length < IV.Length) + { + // prepend the supplied IV with zeros (per FIPS PUB 81) + Array.Copy(iv, 0, IV, IV.Length - iv.Length, iv.Length); + for (int i = 0; i < IV.Length - iv.Length; i++) + { + IV[i] = 0; + } + } + else + { + Array.Copy(iv, 0, IV, 0, IV.Length); + } + + parameters = ivParam.Parameters; + } + + Reset(); + + cipher.Init(true, parameters); + } + + /** + * Encrypt one byte of data according to CFB mode. + * @param data the byte to encrypt + * @param blockOff offset in the current block + * @returns the encrypted byte + */ + private byte EncryptByte(byte data, int blockOff) + { + return (byte)(FRE[blockOff] ^ data); + } + + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int EncryptBlock(ReadOnlySpan input, Span output) + { + Check.DataLength(input, blockSize, "input buffer too short"); + Check.OutputLength(output, blockSize, "output buffer too short"); + + if (count > blockSize) + { + FR[blockSize - 2] = output[0] = EncryptByte(input[0], blockSize - 2); + FR[blockSize - 1] = output[1] = EncryptByte(input[1], blockSize - 1); + + cipher.ProcessBlock(FR, FRE); + + for (int n = 2; n < blockSize; n++) + { + FR[n - 2] = output[n] = EncryptByte(input[n], n - 2); + } + } + else if (count == 0) + { + cipher.ProcessBlock(FR, FRE); + + for (int n = 0; n < blockSize; n++) + { + FR[n] = output[n] = EncryptByte(input[n], n); + } + + count += blockSize; + } + else if (count == blockSize) + { + cipher.ProcessBlock(FR, FRE); + + output[0] = EncryptByte(input[0], 0); + output[1] = EncryptByte(input[1], 1); + + // + // do reset + // + Array.Copy(FR, 2, FR, 0, blockSize - 2); + output[..2].CopyTo(FR.AsSpan(blockSize - 2)); + + cipher.ProcessBlock(FR, FRE); + + for (int n = 2; n < blockSize; n++) + { + FR[n - 2] = output[n] = EncryptByte(input[n], n - 2); + } + + count += blockSize; + } + + return blockSize; + } + + private int DecryptBlock(ReadOnlySpan input, Span output) + { + Check.DataLength(input, blockSize, "input buffer too short"); + Check.OutputLength(output, blockSize, "output buffer too short"); + + if (count > blockSize) + { + byte inVal = input[0]; + FR[blockSize - 2] = inVal; + output[0] = EncryptByte(inVal, blockSize - 2); + + inVal = input[1]; + FR[blockSize - 1] = inVal; + output[1] = EncryptByte(inVal, blockSize - 1); + + cipher.ProcessBlock(FR, FRE); + + for (int n = 2; n < blockSize; n++) + { + inVal = input[n]; + FR[n - 2] = inVal; + output[n] = EncryptByte(inVal, n - 2); + } + } + else if (count == 0) + { + cipher.ProcessBlock(FR, FRE); + + for (int n = 0; n < blockSize; n++) + { + FR[n] = input[n]; + output[n] = EncryptByte(input[n], n); + } + + count += blockSize; + } + else if (count == blockSize) + { + cipher.ProcessBlock(FR, 0, FRE, 0); + + byte inVal1 = input[0]; + byte inVal2 = input[1]; + output[0] = EncryptByte(inVal1, 0); + output[1] = EncryptByte(inVal2, 1); + + Array.Copy(FR, 2, FR, 0, blockSize - 2); + + FR[blockSize - 2] = inVal1; + FR[blockSize - 1] = inVal2; + + cipher.ProcessBlock(FR, 0, FRE, 0); + + for (int n = 2; n < blockSize; n++) + { + byte inVal = input[n]; + FR[n - 2] = inVal; + output[n] = EncryptByte(inVal, n - 2); + } + + count += blockSize; + } + + return blockSize; + } +#else + private int EncryptBlock(byte[] input, int inOff, byte[] outBytes, int outOff) + { + Check.DataLength(input, inOff, blockSize, "input buffer too short"); + Check.OutputLength(outBytes, outOff, blockSize, "output buffer too short"); + + if (count > blockSize) + { + FR[blockSize - 2] = outBytes[outOff] = EncryptByte(input[inOff], blockSize - 2); + FR[blockSize - 1] = outBytes[outOff + 1] = EncryptByte(input[inOff + 1], blockSize - 1); + + cipher.ProcessBlock(FR, 0, FRE, 0); + + for (int n = 2; n < blockSize; n++) + { + FR[n - 2] = outBytes[outOff + n] = EncryptByte(input[inOff + n], n - 2); + } + } + else if (count == 0) + { + cipher.ProcessBlock(FR, 0, FRE, 0); + + for (int n = 0; n < blockSize; n++) + { + FR[n] = outBytes[outOff + n] = EncryptByte(input[inOff + n], n); + } + + count += blockSize; + } + else if (count == blockSize) + { + cipher.ProcessBlock(FR, 0, FRE, 0); + + outBytes[outOff] = EncryptByte(input[inOff], 0); + outBytes[outOff + 1] = EncryptByte(input[inOff + 1], 1); + + // + // do reset + // + Array.Copy(FR, 2, FR, 0, blockSize - 2); + Array.Copy(outBytes, outOff, FR, blockSize - 2, 2); + + cipher.ProcessBlock(FR, 0, FRE, 0); + + for (int n = 2; n < blockSize; n++) + { + FR[n - 2] = outBytes[outOff + n] = EncryptByte(input[inOff + n], n - 2); + } + + count += blockSize; + } + + return blockSize; + } + + private int DecryptBlock(byte[] input, int inOff, byte[] outBytes, int outOff) + { + Check.DataLength(input, inOff, blockSize, "input buffer too short"); + Check.OutputLength(outBytes, outOff, blockSize, "output buffer too short"); + + if (count > blockSize) + { + byte inVal = input[inOff]; + FR[blockSize - 2] = inVal; + outBytes[outOff] = EncryptByte(inVal, blockSize - 2); + + inVal = input[inOff + 1]; + FR[blockSize - 1] = inVal; + outBytes[outOff + 1] = EncryptByte(inVal, blockSize - 1); + + cipher.ProcessBlock(FR, 0, FRE, 0); + + for (int n = 2; n < blockSize; n++) + { + inVal = input[inOff + n]; + FR[n - 2] = inVal; + outBytes[outOff + n] = EncryptByte(inVal, n - 2); + } + } + else if (count == 0) + { + cipher.ProcessBlock(FR, 0, FRE, 0); + + for (int n = 0; n < blockSize; n++) + { + FR[n] = input[inOff + n]; + outBytes[outOff + n] = EncryptByte(input[inOff + n], n); + } + + count += blockSize; + } + else if (count == blockSize) + { + cipher.ProcessBlock(FR, 0, FRE, 0); + + byte inVal1 = input[inOff]; + byte inVal2 = input[inOff + 1]; + outBytes[outOff ] = EncryptByte(inVal1, 0); + outBytes[outOff + 1] = EncryptByte(inVal2, 1); + + Array.Copy(FR, 2, FR, 0, blockSize - 2); + + FR[blockSize - 2] = inVal1; + FR[blockSize - 1] = inVal2; + + cipher.ProcessBlock(FR, 0, FRE, 0); + + for (int n = 2; n < blockSize; n++) + { + byte inVal = input[inOff + n]; + FR[n - 2] = inVal; + outBytes[outOff + n] = EncryptByte(inVal, n - 2); + } + + count += blockSize; + } + + return blockSize; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/OpenPgpCfbBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/OpenPgpCfbBlockCipher.cs.meta new file mode 100644 index 000000000..10974c92a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/OpenPgpCfbBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b1ada4d10e1ce0546a797441077dd7a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/SicBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/SicBlockCipher.cs new file mode 100644 index 000000000..a556c23db --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/SicBlockCipher.cs @@ -0,0 +1,139 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes +{ + /** + * Implements the Segmented Integer Counter (SIC) mode on top of a simple + * block cipher. + */ + public class SicBlockCipher + : IBlockCipherMode + { + private readonly IBlockCipher cipher; + private readonly int blockSize; + private readonly byte[] counter; + private readonly byte[] counterOut; + private byte[] IV; + + /** + * Basic constructor. + * + * @param c the block cipher to be used. + */ + public SicBlockCipher(IBlockCipher cipher) + { + this.cipher = cipher; + this.blockSize = cipher.GetBlockSize(); + this.counter = new byte[blockSize]; + this.counterOut = new byte[blockSize]; + this.IV = new byte[blockSize]; + } + + /** + * return the underlying block cipher that we are wrapping. + * + * @return the underlying block cipher that we are wrapping. + */ + public IBlockCipher UnderlyingCipher => cipher; + + public virtual void Init( + bool forEncryption, //ignored by this CTR mode + ICipherParameters parameters) + { + ParametersWithIV ivParam = parameters as ParametersWithIV; + if (ivParam == null) + throw new ArgumentException("CTR/SIC mode requires ParametersWithIV", "parameters"); + + this.IV = Arrays.Clone(ivParam.GetIV()); + + if (blockSize < IV.Length) + throw new ArgumentException("CTR/SIC mode requires IV no greater than: " + blockSize + " bytes."); + + int maxCounterSize = System.Math.Min(8, blockSize / 2); + if (blockSize - IV.Length > maxCounterSize) + throw new ArgumentException("CTR/SIC mode requires IV of at least: " + (blockSize - maxCounterSize) + " bytes."); + + // if null it's an IV changed only. + if (ivParam.Parameters != null) + { + cipher.Init(true, ivParam.Parameters); + } + + Reset(); + } + + public virtual string AlgorithmName + { + get { return cipher.AlgorithmName + "/SIC"; } + } + + public virtual bool IsPartialBlockOkay + { + get { return true; } + } + + public virtual int GetBlockSize() + { + return cipher.GetBlockSize(); + } + + public virtual int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff) + { + cipher.ProcessBlock(counter, 0, counterOut, 0); + + // + // XOR the counterOut with the plaintext producing the cipher text + // + for (int i = 0; i < counterOut.Length; i++) + { + output[outOff + i] = (byte)(counterOut[i] ^ input[inOff + i]); + } + + // Increment the counter + int j = counter.Length; + while (--j >= 0 && ++counter[j] == 0) + { + } + + return counter.Length; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ProcessBlock(ReadOnlySpan input, Span output) + { + cipher.ProcessBlock(counter, 0, counterOut, 0); + + // + // XOR the counterOut with the plaintext producing the cipher text + // + for (int i = 0; i < counterOut.Length; i++) + { + output[i] = (byte)(counterOut[i] ^ input[i]); + } + + // Increment the counter + int j = counter.Length; + while (--j >= 0 && ++counter[j] == 0) + { + } + + return counter.Length; + } +#endif + + public virtual void Reset() + { + Arrays.Fill(counter, (byte)0); + Array.Copy(IV, 0, counter, 0, IV.Length); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/SicBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/SicBlockCipher.cs.meta new file mode 100644 index 000000000..26d929584 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/SicBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2296184ee476c384393555a8260b697e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm.meta new file mode 100644 index 000000000..789a26064 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 25332b96083d377489f73df4e40c17c8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/BasicGcmExponentiator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/BasicGcmExponentiator.cs new file mode 100644 index 000000000..4f4694179 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/BasicGcmExponentiator.cs @@ -0,0 +1,42 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes.Gcm +{ + public class BasicGcmExponentiator + : IGcmExponentiator + { + private GcmUtilities.FieldElement x; + + public void Init(byte[] x) + { + GcmUtilities.AsFieldElement(x, out this.x); + } + + public void ExponentiateX(long pow, byte[] output) + { + GcmUtilities.FieldElement y; + GcmUtilities.One(out y); + + if (pow > 0) + { + GcmUtilities.FieldElement powX = x; + do + { + if ((pow & 1L) != 0) + { + GcmUtilities.Multiply(ref y, ref powX); + } + GcmUtilities.Square(ref powX); + pow >>= 1; + } + while (pow > 0); + } + + GcmUtilities.AsBytes(ref y, output); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/BasicGcmExponentiator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/BasicGcmExponentiator.cs.meta new file mode 100644 index 000000000..f0ad3d541 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/BasicGcmExponentiator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a079161b52b48be48a3b061183d2342a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/BasicGcmMultiplier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/BasicGcmMultiplier.cs new file mode 100644 index 000000000..3370fd0eb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/BasicGcmMultiplier.cs @@ -0,0 +1,26 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes.Gcm +{ + public class BasicGcmMultiplier + : IGcmMultiplier + { + private GcmUtilities.FieldElement H; + + public void Init(byte[] H) + { + GcmUtilities.AsFieldElement(H, out this.H); + } + + public void MultiplyH(byte[] x) + { + GcmUtilities.AsFieldElement(x, out var T); + GcmUtilities.Multiply(ref T, ref H); + GcmUtilities.AsBytes(ref T, x); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/BasicGcmMultiplier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/BasicGcmMultiplier.cs.meta new file mode 100644 index 000000000..ae9b801e2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/BasicGcmMultiplier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 21667055c0a779443a148941e7c64ee1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/GcmUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/GcmUtilities.cs new file mode 100644 index 000000000..8452cdc6c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/GcmUtilities.cs @@ -0,0 +1,302 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER +using System.Runtime.CompilerServices; +#endif +#if NETCOREAPP3_0_OR_GREATER +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes.Gcm +{ + internal abstract class GcmUtilities + { + internal struct FieldElement + { + internal ulong n0, n1; + } + + private const uint E1 = 0xe1000000; + private const ulong E1UL = (ulong)E1 << 32; + + internal static void One(out FieldElement x) + { + x.n0 = 1UL << 63; + x.n1 = 0UL; + } + +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + internal static void AsBytes(ulong x0, ulong x1, byte[] z) + { + Pack.UInt64_To_BE(x0, z, 0); + Pack.UInt64_To_BE(x1, z, 8); + } + +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + internal static void AsBytes(ref FieldElement x, byte[] z) + { + AsBytes(x.n0, x.n1, z); + } + +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + internal static void AsFieldElement(byte[] x, out FieldElement z) + { + z.n0 = Pack.BE_To_UInt64(x, 0); + z.n1 = Pack.BE_To_UInt64(x, 8); + } + + internal static void DivideP(ref FieldElement x, out FieldElement z) + { + ulong x0 = x.n0, x1 = x.n1; + ulong m = (ulong)((long)x0 >> 63); + x0 ^= (m & E1UL); + z.n0 = (x0 << 1) | (x1 >> 63); + z.n1 = (x1 << 1) | (ulong)(-(long)m); + } + + internal static void Multiply(byte[] x, byte[] y) + { + AsFieldElement(x, out FieldElement X); + AsFieldElement(y, out FieldElement Y); + Multiply(ref X, ref Y); + AsBytes(ref X, x); + } + + internal static void Multiply(ref FieldElement x, ref FieldElement y) + { + ulong z0, z1, z2, z3; + +#if NETCOREAPP3_0_OR_GREATER + if (Pclmulqdq.IsSupported) + { + var X = Vector128.Create(x.n1, x.n0); + var Y = Vector128.Create(y.n1, y.n0); + + var Z0 = Pclmulqdq.CarrylessMultiply(X, Y, 0x00); + var Z1 = Sse2.Xor( + Pclmulqdq.CarrylessMultiply(X, Y, 0x01), + Pclmulqdq.CarrylessMultiply(X, Y, 0x10)); + var Z2 = Pclmulqdq.CarrylessMultiply(X, Y, 0x11); + + ulong t3 = Z0.GetElement(0); + ulong t2 = Z0.GetElement(1) ^ Z1.GetElement(0); + ulong t1 = Z2.GetElement(0) ^ Z1.GetElement(1); + ulong t0 = Z2.GetElement(1); + + z0 = (t0 << 1) | (t1 >> 63); + z1 = (t1 << 1) | (t2 >> 63); + z2 = (t2 << 1) | (t3 >> 63); + z3 = (t3 << 1); + } + else +#endif + { + /* + * "Three-way recursion" as described in "Batch binary Edwards", Daniel J. Bernstein. + * + * Without access to the high part of a 64x64 product x * y, we use a bit reversal to calculate it: + * rev(x) * rev(y) == rev((x * y) << 1) + */ + + ulong x0 = x.n0, x1 = x.n1; + ulong y0 = y.n0, y1 = y.n1; + ulong x0r = Longs.Reverse(x0), x1r = Longs.Reverse(x1); + ulong y0r = Longs.Reverse(y0), y1r = Longs.Reverse(y1); + + ulong h0 = Longs.Reverse(ImplMul64(x0r, y0r)); + ulong h1 = ImplMul64(x0, y0) << 1; + ulong h2 = Longs.Reverse(ImplMul64(x1r, y1r)); + ulong h3 = ImplMul64(x1, y1) << 1; + ulong h4 = Longs.Reverse(ImplMul64(x0r ^ x1r, y0r ^ y1r)); + ulong h5 = ImplMul64(x0 ^ x1, y0 ^ y1) << 1; + + z0 = h0; + z1 = h1 ^ h0 ^ h2 ^ h4; + z2 = h2 ^ h1 ^ h3 ^ h5; + z3 = h3; + } + + Debug.Assert(z3 << 63 == 0); + + z1 ^= z3 ^ (z3 >> 1) ^ (z3 >> 2) ^ (z3 >> 7); +// z2 ^= (z3 << 63) ^ (z3 << 62) ^ (z3 << 57); + z2 ^= (z3 << 62) ^ (z3 << 57); + + z0 ^= z2 ^ (z2 >> 1) ^ (z2 >> 2) ^ (z2 >> 7); + z1 ^= (z2 << 63) ^ (z2 << 62) ^ (z2 << 57); + + x.n0 = z0; + x.n1 = z1; + } + + internal static void MultiplyP7(ref FieldElement x) + { + ulong x0 = x.n0, x1 = x.n1; + ulong c = x1 << 57; + x.n0 = (x0 >> 7) ^ c ^ (c >> 1) ^ (c >> 2) ^ (c >> 7); + x.n1 = (x1 >> 7) | (x0 << 57); + } + + internal static void MultiplyP8(ref FieldElement x) + { + ulong x0 = x.n0, x1 = x.n1; + ulong c = x1 << 56; + x.n0 = (x0 >> 8) ^ c ^ (c >> 1) ^ (c >> 2) ^ (c >> 7); + x.n1 = (x1 >> 8) | (x0 << 56); + } + + internal static void MultiplyP8(ref FieldElement x, out FieldElement y) + { + ulong x0 = x.n0, x1 = x.n1; + ulong c = x1 << 56; + y.n0 = (x0 >> 8) ^ c ^ (c >> 1) ^ (c >> 2) ^ (c >> 7); + y.n1 = (x1 >> 8) | (x0 << 56); + } + + internal static void MultiplyP16(ref FieldElement x) + { + ulong x0 = x.n0, x1 = x.n1; + ulong c = x1 << 48; + x.n0 = (x0 >> 16) ^ c ^ (c >> 1) ^ (c >> 2) ^ (c >> 7); + x.n1 = (x1 >> 16) | (x0 << 48); + } + + internal static void Square(ref FieldElement x) + { + ulong z1 = Interleave.Expand64To128Rev(x.n0, out ulong z0); + ulong z3 = Interleave.Expand64To128Rev(x.n1, out ulong z2); + + Debug.Assert(z3 << 63 == 0); + + z1 ^= z3 ^ (z3 >> 1) ^ (z3 >> 2) ^ (z3 >> 7); +// z2 ^= (z3 << 63) ^ (z3 << 62) ^ (z3 << 57); + z2 ^= (z3 << 62) ^ (z3 << 57); + + Debug.Assert(z2 << 63 == 0); + + z0 ^= z2 ^ (z2 >> 1) ^ (z2 >> 2) ^ (z2 >> 7); +// z1 ^= (z2 << 63) ^ (z2 << 62) ^ (z2 << 57); + z1 ^= (z2 << 62) ^ (z2 << 57); + + x.n0 = z0; + x.n1 = z1; + } + + internal static void Xor(byte[] x, byte[] y) + { + int i = 0; + do + { + x[i] ^= y[i]; ++i; + x[i] ^= y[i]; ++i; + x[i] ^= y[i]; ++i; + x[i] ^= y[i]; ++i; + } + while (i < 16); + } + + internal static void Xor(byte[] x, byte[] y, int yOff) + { + int i = 0; + do + { + x[i] ^= y[yOff + i]; ++i; + x[i] ^= y[yOff + i]; ++i; + x[i] ^= y[yOff + i]; ++i; + x[i] ^= y[yOff + i]; ++i; + } + while (i < 16); + } + + internal static void Xor(byte[] x, byte[] y, int yOff, int yLen) + { + while (--yLen >= 0) + { + x[yLen] ^= y[yOff + yLen]; + } + } + + internal static void Xor(byte[] x, int xOff, byte[] y, int yOff, int len) + { + while (--len >= 0) + { + x[xOff + len] ^= y[yOff + len]; + } + } + + internal static void Xor(ref FieldElement x, ref FieldElement y) + { + x.n0 ^= y.n0; + x.n1 ^= y.n1; + } + + internal static void Xor(ref FieldElement x, ref FieldElement y, out FieldElement z) + { + z.n0 = x.n0 ^ y.n0; + z.n1 = x.n1 ^ y.n1; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal static void Xor(Span x, ReadOnlySpan y) + { + int i = 0; + do + { + x[i] ^= y[i]; ++i; + x[i] ^= y[i]; ++i; + x[i] ^= y[i]; ++i; + x[i] ^= y[i]; ++i; + } + while (i < 16); + } + + internal static void Xor(Span x, ReadOnlySpan y, int len) + { + for (int i = 0; i < len; ++i) + { + x[i] ^= y[i]; + } + } +#endif + + private static ulong ImplMul64(ulong x, ulong y) + { + ulong x0 = x & 0x1111111111111111UL; + ulong x1 = x & 0x2222222222222222UL; + ulong x2 = x & 0x4444444444444444UL; + ulong x3 = x & 0x8888888888888888UL; + + ulong y0 = y & 0x1111111111111111UL; + ulong y1 = y & 0x2222222222222222UL; + ulong y2 = y & 0x4444444444444444UL; + ulong y3 = y & 0x8888888888888888UL; + + ulong z0 = (x0 * y0) ^ (x1 * y3) ^ (x2 * y2) ^ (x3 * y1); + ulong z1 = (x0 * y1) ^ (x1 * y0) ^ (x2 * y3) ^ (x3 * y2); + ulong z2 = (x0 * y2) ^ (x1 * y1) ^ (x2 * y0) ^ (x3 * y3); + ulong z3 = (x0 * y3) ^ (x1 * y2) ^ (x2 * y1) ^ (x3 * y0); + + z0 &= 0x1111111111111111UL; + z1 &= 0x2222222222222222UL; + z2 &= 0x4444444444444444UL; + z3 &= 0x8888888888888888UL; + + return z0 | z1 | z2 | z3; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/GcmUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/GcmUtilities.cs.meta new file mode 100644 index 000000000..3cbe35614 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/GcmUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a537b491bcdd0934aac526f2ac481e5e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/IGcmExponentiator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/IGcmExponentiator.cs new file mode 100644 index 000000000..09bc16323 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/IGcmExponentiator.cs @@ -0,0 +1,14 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes.Gcm +{ + public interface IGcmExponentiator + { + void Init(byte[] x); + void ExponentiateX(long pow, byte[] output); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/IGcmExponentiator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/IGcmExponentiator.cs.meta new file mode 100644 index 000000000..9caa76f6e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/IGcmExponentiator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b9360b15af87e1479595647271315ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/IGcmMultiplier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/IGcmMultiplier.cs new file mode 100644 index 000000000..966c02c65 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/IGcmMultiplier.cs @@ -0,0 +1,14 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes.Gcm +{ + public interface IGcmMultiplier + { + void Init(byte[] H); + void MultiplyH(byte[] x); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/IGcmMultiplier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/IGcmMultiplier.cs.meta new file mode 100644 index 000000000..da3d384cd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/IGcmMultiplier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c18943b1cef80dd40b832574fd4e810e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables1kGcmExponentiator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables1kGcmExponentiator.cs new file mode 100644 index 000000000..540e81475 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables1kGcmExponentiator.cs @@ -0,0 +1,63 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes.Gcm +{ + public class Tables1kGcmExponentiator + : IGcmExponentiator + { + // A lookup table of the power-of-two powers of 'x' + // - lookupPowX2[i] = x^(2^i) + private IList lookupPowX2; + + public void Init(byte[] x) + { + GcmUtilities.FieldElement y; + GcmUtilities.AsFieldElement(x, out y); + if (lookupPowX2 != null && y.Equals(lookupPowX2[0])) + return; + + lookupPowX2 = new List(8); + lookupPowX2.Add(y); + } + + public void ExponentiateX(long pow, byte[] output) + { + GcmUtilities.FieldElement y; + GcmUtilities.One(out y); + int bit = 0; + while (pow > 0) + { + if ((pow & 1L) != 0) + { + EnsureAvailable(bit); + GcmUtilities.FieldElement powX2 = (GcmUtilities.FieldElement)lookupPowX2[bit]; + GcmUtilities.Multiply(ref y, ref powX2); + } + ++bit; + pow >>= 1; + } + + GcmUtilities.AsBytes(ref y, output); + } + + private void EnsureAvailable(int bit) + { + int count = lookupPowX2.Count; + if (count <= bit) + { + GcmUtilities.FieldElement powX2 = (GcmUtilities.FieldElement)lookupPowX2[count - 1]; + do + { + GcmUtilities.Square(ref powX2); + lookupPowX2.Add(powX2); + } + while (++count <= bit); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables1kGcmExponentiator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables1kGcmExponentiator.cs.meta new file mode 100644 index 000000000..87abe9a6b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables1kGcmExponentiator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb76a60bca7933e4fa45510eada87774 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables4kGcmMultiplier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables4kGcmMultiplier.cs new file mode 100644 index 000000000..10b611ef9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables4kGcmMultiplier.cs @@ -0,0 +1,72 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes.Gcm +{ + public class Tables4kGcmMultiplier + : IGcmMultiplier + { + private byte[] H; + private GcmUtilities.FieldElement[] T; + + public void Init(byte[] H) + { + if (T == null) + { + T = new GcmUtilities.FieldElement[256]; + } + else if (Arrays.AreEqual(this.H, H)) + { + return; + } + + this.H = Arrays.Clone(H); + + // T[0] = 0 + + // T[1] = H.p^7 + GcmUtilities.AsFieldElement(this.H, out T[1]); + GcmUtilities.MultiplyP7(ref T[1]); + + for (int n = 1; n < 128; ++n) + { + // T[2.n] = T[n].p^-1 + GcmUtilities.DivideP(ref T[n], out T[n << 1]); + + // T[2.n + 1] = T[2.n] + T[1] + GcmUtilities.Xor(ref T[n << 1], ref T[1], out T[(n << 1) + 1]); + } + } + + public void MultiplyH(byte[] x) + { + //GcmUtilities.FieldElement z = T[x[15]]; + //for (int i = 14; i >= 0; --i) + //{ + // GcmUtilities.MultiplyP8(ref z); + // GcmUtilities.Xor(ref z, ref T[x[i]]); + //} + //GcmUtilities.AsBytes(ref z, x); + + int pos = x[15]; + ulong z0 = T[pos].n0, z1 = T[pos].n1; + + for (int i = 14; i >= 0; --i) + { + pos = x[i]; + + ulong c = z1 << 56; + z1 = T[pos].n1 ^ ((z1 >> 8) | (z0 << 56)); + z0 = T[pos].n0 ^ (z0 >> 8) ^ c ^ (c >> 1) ^ (c >> 2) ^ (c >> 7); + } + + GcmUtilities.AsBytes(z0, z1, x); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables4kGcmMultiplier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables4kGcmMultiplier.cs.meta new file mode 100644 index 000000000..a877ce465 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables4kGcmMultiplier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58f99fb76937eca4e852c868e01e0d14 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables64kGcmMultiplier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables64kGcmMultiplier.cs new file mode 100644 index 000000000..f1d5dc9de --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables64kGcmMultiplier.cs @@ -0,0 +1,84 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes.Gcm +{ + public class Tables64kGcmMultiplier + : IGcmMultiplier + { + private byte[] H; + private GcmUtilities.FieldElement[][] T; + + public void Init(byte[] H) + { + if (T == null) + { + T = new GcmUtilities.FieldElement[16][]; + } + else if (Arrays.AreEqual(this.H, H)) + { + return; + } + + this.H = Arrays.Clone(H); + + for (int i = 0; i < 16; ++i) + { + GcmUtilities.FieldElement[] t = T[i] = new GcmUtilities.FieldElement[256]; + + // t[0] = 0 + + if (i == 0) + { + // t[1] = H.p^7 + GcmUtilities.AsFieldElement(this.H, out t[1]); + GcmUtilities.MultiplyP7(ref t[1]); + } + else + { + // t[1] = T[i-1][1].p^8 + GcmUtilities.MultiplyP8(ref T[i - 1][1], out t[1]); + } + + for (int n = 1; n < 128; ++n) + { + // t[2.n] = t[n].p^-1 + GcmUtilities.DivideP(ref t[n], out t[n << 1]); + + // t[2.n + 1] = t[2.n] + t[1] + GcmUtilities.Xor(ref t[n << 1], ref t[1], out t[(n << 1) + 1]); + } + } + } + + public void MultiplyH(byte[] x) + { + //GcmUtilities.FieldElement z = T[15][x[15]]; + //for (int i = 14; i >= 0; --i) + //{ + // GcmUtilities.Xor(ref z, ref T[i][x[i]]); + //} + //GcmUtilities.AsBytes(ref z, x); + + GcmUtilities.FieldElement[] t = T[15]; + int tPos = x[15]; + ulong z0 = t[tPos].n0, z1 = t[tPos].n1; + + for (int i = 14; i >= 0; --i) + { + t = T[i]; + tPos = x[i]; + z0 ^= t[tPos].n0; + z1 ^= t[tPos].n1; + } + + GcmUtilities.AsBytes(z0, z1, x); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables64kGcmMultiplier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables64kGcmMultiplier.cs.meta new file mode 100644 index 000000000..10e5681dc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables64kGcmMultiplier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11e15117f8c61854a8ed870e37ef1af8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables8kGcmMultiplier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables8kGcmMultiplier.cs new file mode 100644 index 000000000..d05c62981 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables8kGcmMultiplier.cs @@ -0,0 +1,93 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes.Gcm +{ + public sealed class Tables8kGcmMultiplier + : IGcmMultiplier + { + private byte[] H; + private GcmUtilities.FieldElement[][] T; + + public void Init(byte[] H) + { + if (T == null) + { + T = new GcmUtilities.FieldElement[2][]; + } + else if (Arrays.AreEqual(this.H, H)) + { + return; + } + + this.H = Arrays.Clone(H); + + for (int i = 0; i < 2; ++i) + { + GcmUtilities.FieldElement[] t = T[i] = new GcmUtilities.FieldElement[256]; + + // t[0] = 0 + + if (i == 0) + { + // t[1] = H.p^7 + GcmUtilities.AsFieldElement(this.H, out t[1]); + GcmUtilities.MultiplyP7(ref t[1]); + } + else + { + // t[1] = T[i-1][1].p^8 + GcmUtilities.MultiplyP8(ref T[i - 1][1], out t[1]); + } + + for (int n = 1; n < 128; ++n) + { + // t[2.n] = t[n].p^-1 + GcmUtilities.DivideP(ref t[n], out t[n << 1]); + + // t[2.n + 1] = t[2.n] + t[1] + GcmUtilities.Xor(ref t[n << 1], ref t[1], out t[(n << 1) + 1]); + } + } + } + uint[] z = new uint[4]; + + public void MultiplyH(byte[] x) + { + GcmUtilities.FieldElement[] T0 = T[0], T1 = T[1]; + + //GcmUtilities.FieldElement z; + //GcmUtilities.Xor(ref T0[x[14]], ref T1[x[15]], out z); + //for (int i = 12; i >= 0; i -= 2) + //{ + // GcmUtilities.MultiplyP16(ref z); + // GcmUtilities.Xor(ref z, ref T0[x[i]]); + // GcmUtilities.Xor(ref z, ref T1[x[i + 1]]); + //} + //GcmUtilities.AsBytes(ref z, x); + + int vPos = x[15]; + int uPos = x[14]; + ulong z1 = T0[uPos].n1 ^ T1[vPos].n1; + ulong z0 = T0[uPos].n0 ^ T1[vPos].n0; + + for (int i = 12; i >= 0; i -= 2) + { + vPos = x[i + 1]; + uPos = x[i]; + + ulong c = z1 << 48; + z1 = T0[uPos].n1 ^ T1[vPos].n1 ^ ((z1 >> 16) | (z0 << 48)); + z0 = T0[uPos].n0 ^ T1[vPos].n0 ^ (z0 >> 16) ^ c ^ (c >> 1) ^ (c >> 2) ^ (c >> 7); + } + + GcmUtilities.AsBytes(z0, z1, x); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables8kGcmMultiplier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables8kGcmMultiplier.cs.meta new file mode 100644 index 000000000..117d34515 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/modes/gcm/Tables8kGcmMultiplier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d0ed8793a414fb442ad8987957e3d03f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators.meta new file mode 100644 index 000000000..4643ca42d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 68a42d586834bc5489474f303f2686c1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1CipherBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1CipherBuilder.cs new file mode 100644 index 000000000..93cef2e19 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1CipherBuilder.cs @@ -0,0 +1,97 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators +{ + public class Asn1CipherBuilderWithKey : ICipherBuilderWithKey + { + private readonly KeyParameter encKey; + private AlgorithmIdentifier algorithmIdentifier; + + public Asn1CipherBuilderWithKey(DerObjectIdentifier encryptionOID, int keySize, SecureRandom random) + { + random = CryptoServicesRegistrar.GetSecureRandom(random); + + CipherKeyGenerator keyGen = CipherKeyGeneratorFactory.CreateKeyGenerator(encryptionOID, random); + + encKey = new KeyParameter(keyGen.GenerateKey()); + algorithmIdentifier = AlgorithmIdentifierFactory.GenerateEncryptionAlgID(encryptionOID, encKey.GetKey().Length * 8, random); + } + + public object AlgorithmDetails + { + get { return algorithmIdentifier; } + } + + public int GetMaxOutputSize(int inputLen) + { + throw new NotImplementedException(); + } + + public ICipher BuildCipher(Stream stream) + { + object cipher = EnvelopedDataHelper.CreateContentCipher(true, encKey, algorithmIdentifier); + + // + // BufferedBlockCipher + // IStreamCipher + // + + if (cipher is IStreamCipher) + { + cipher = new BufferedStreamCipher((IStreamCipher)cipher); + } + + if (stream == null) + { + stream = new MemoryStream(); + } + + return new BufferedCipherWrapper((IBufferedCipher)cipher, stream); + } + + public ICipherParameters Key + { + get { return encKey; } + } + } + + public class BufferedCipherWrapper : ICipher + { + private readonly IBufferedCipher bufferedCipher; + private readonly CipherStream stream; + + public BufferedCipherWrapper(IBufferedCipher bufferedCipher, Stream source) + { + this.bufferedCipher = bufferedCipher; + stream = new CipherStream(source, bufferedCipher, bufferedCipher); + } + + public int GetMaxOutputSize(int inputLen) + { + return bufferedCipher.GetOutputSize(inputLen); + } + + public int GetUpdateOutputSize(int inputLen) + { + return bufferedCipher.GetUpdateOutputSize(inputLen); + } + + public Stream Stream + { + get { return stream; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1CipherBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1CipherBuilder.cs.meta new file mode 100644 index 000000000..bc6f55d87 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1CipherBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dbd8710a1e5d6c74d97f5021140f46cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1DigestFactory.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1DigestFactory.cs new file mode 100644 index 000000000..dec880428 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1DigestFactory.cs @@ -0,0 +1,76 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators +{ + public class Asn1DigestFactory + : IDigestFactory + { + public static Asn1DigestFactory Get(DerObjectIdentifier oid) + { + return new Asn1DigestFactory(DigestUtilities.GetDigest(oid), oid); + } + + public static Asn1DigestFactory Get(string mechanism) + { + DerObjectIdentifier oid = DigestUtilities.GetObjectIdentifier(mechanism); + return new Asn1DigestFactory(DigestUtilities.GetDigest(oid), oid); + } + + private readonly IDigest mDigest; + private readonly DerObjectIdentifier mOid; + + public Asn1DigestFactory(IDigest digest, DerObjectIdentifier oid) + { + this.mDigest = digest; + this.mOid = oid; + } + + public virtual object AlgorithmDetails + { + get { return new AlgorithmIdentifier(mOid); } + } + + public virtual int DigestLength + { + get { return mDigest.GetDigestSize(); } + } + + public virtual IStreamCalculator CreateCalculator() + { + return new DfDigestStream(mDigest); + } + } + + internal class DfDigestStream + : IStreamCalculator + { + private readonly DigestSink mStream; + + public DfDigestStream(IDigest digest) + { + this.mStream = new DigestSink(digest); + } + + public Stream Stream + { + get { return mStream; } + } + + public SimpleBlockResult GetResult() + { + byte[] result = new byte[mStream.Digest.GetDigestSize()]; + mStream.Digest.DoFinal(result, 0); + return new SimpleBlockResult(result); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1DigestFactory.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1DigestFactory.cs.meta new file mode 100644 index 000000000..4c9991c77 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1DigestFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50154de3397f3a24cbd185a65e6114f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1KeyWrapper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1KeyWrapper.cs new file mode 100644 index 000000000..a336f001c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1KeyWrapper.cs @@ -0,0 +1,318 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Encodings; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators +{ + public class Asn1KeyWrapper + : IKeyWrapper + { + private string algorithm; + private IKeyWrapper wrapper; + + public Asn1KeyWrapper(string algorithm, X509Certificate cert) + { + this.algorithm = algorithm; + wrapper = KeyWrapperUtil.WrapperForName(algorithm, cert.GetPublicKey()); + } + + public Asn1KeyWrapper(DerObjectIdentifier algorithm, X509Certificate cert) + : this(algorithm, cert.GetPublicKey()) + { + } + + public Asn1KeyWrapper(DerObjectIdentifier algorithm, ICipherParameters key) + : this(algorithm, null, key) + { + } + + public Asn1KeyWrapper(DerObjectIdentifier algorithm, Asn1Encodable parameters, X509Certificate cert) + :this(algorithm, parameters, cert.GetPublicKey()) + { + } + + public Asn1KeyWrapper(DerObjectIdentifier algorithm, Asn1Encodable parameters, ICipherParameters key) + { + this.algorithm = algorithm.Id; + if (algorithm.Equals(PkcsObjectIdentifiers.IdRsaesOaep)) + { + RsaesOaepParameters oaepParams = RsaesOaepParameters.GetInstance(parameters); + WrapperProvider provider; + if (oaepParams.MaskGenAlgorithm.Algorithm.Equals(PkcsObjectIdentifiers.IdMgf1)) + { + AlgorithmIdentifier digAlg = AlgorithmIdentifier.GetInstance(oaepParams.MaskGenAlgorithm.Parameters); + + provider = new RsaOaepWrapperProvider(oaepParams.HashAlgorithm.Algorithm, digAlg.Algorithm); + } + else + { + provider = new RsaOaepWrapperProvider(oaepParams.HashAlgorithm.Algorithm, oaepParams.MaskGenAlgorithm.Algorithm); + } + wrapper = (IKeyWrapper)provider.CreateWrapper(true, key); + } + else if (algorithm.Equals(PkcsObjectIdentifiers.RsaEncryption)) + { + wrapper = (IKeyWrapper)new RsaPkcs1Wrapper(true, key); + } + else + { + throw new ArgumentException("unknown algorithm: " + algorithm.Id); + } + } + + public object AlgorithmDetails + { + get { return wrapper.AlgorithmDetails; } + } + + public IBlockResult Wrap(byte[] keyData) + { + return wrapper.Wrap(keyData); + } + } + + public class Asn1KeyUnwrapper + : IKeyUnwrapper + { + private string algorithm; + private IKeyUnwrapper wrapper; + + public Asn1KeyUnwrapper(string algorithm, ICipherParameters key) + { + this.algorithm = algorithm; + wrapper = KeyWrapperUtil.UnwrapperForName(algorithm, key); + } + + public Asn1KeyUnwrapper(DerObjectIdentifier algorithm, ICipherParameters key) + : this(algorithm, null, key) + { + } + + public Asn1KeyUnwrapper(DerObjectIdentifier algorithm, Asn1Encodable parameters, ICipherParameters key) + { + this.algorithm = algorithm.Id; + if (algorithm.Equals(PkcsObjectIdentifiers.IdRsaesOaep)) + { + RsaesOaepParameters oaepParams = RsaesOaepParameters.GetInstance(parameters); + WrapperProvider provider; + if (oaepParams.MaskGenAlgorithm.Algorithm.Equals(PkcsObjectIdentifiers.IdMgf1)) + { + AlgorithmIdentifier digAlg = AlgorithmIdentifier.GetInstance(oaepParams.MaskGenAlgorithm.Parameters); + + provider = new RsaOaepWrapperProvider(oaepParams.HashAlgorithm.Algorithm, digAlg.Algorithm); + } + else + { + provider = new RsaOaepWrapperProvider(oaepParams.HashAlgorithm.Algorithm, oaepParams.MaskGenAlgorithm.Algorithm); + } + wrapper = (IKeyUnwrapper)provider.CreateWrapper(false, key); + } + else if (algorithm.Equals(PkcsObjectIdentifiers.RsaEncryption)) + { + RsaesOaepParameters oaepParams = RsaesOaepParameters.GetInstance(parameters); + WrapperProvider provider; + if (oaepParams.MaskGenAlgorithm.Algorithm.Equals(PkcsObjectIdentifiers.IdMgf1)) + { + AlgorithmIdentifier digAlg = AlgorithmIdentifier.GetInstance(oaepParams.MaskGenAlgorithm.Parameters); + + provider = new RsaOaepWrapperProvider(oaepParams.HashAlgorithm.Algorithm, digAlg.Algorithm); + } + else + { + provider = new RsaOaepWrapperProvider(oaepParams.HashAlgorithm.Algorithm, oaepParams.MaskGenAlgorithm.Algorithm); + } + wrapper = (IKeyUnwrapper)new RsaPkcs1Wrapper(false, key); + } + else + { + throw new ArgumentException("unknown algorithm: " + algorithm.Id); + } + } + + public object AlgorithmDetails + { + get { return wrapper.AlgorithmDetails; } + } + + public IBlockResult Unwrap(byte[] keyData, int offSet, int length) + { + return wrapper.Unwrap(keyData, offSet, length); + } + } + + internal class KeyWrapperUtil + { + // + // Provider + // + private static readonly Dictionary m_providerMap = + new Dictionary(StringComparer.OrdinalIgnoreCase); + + static KeyWrapperUtil() + { + m_providerMap.Add("RSA/ECB/PKCS1PADDING", new RsaOaepWrapperProvider(OiwObjectIdentifiers.IdSha1)); + m_providerMap.Add("RSA/NONE/PKCS1PADDING", new RsaOaepWrapperProvider(OiwObjectIdentifiers.IdSha1)); + m_providerMap.Add("RSA/NONE/OAEPWITHSHA1ANDMGF1PADDING", new RsaOaepWrapperProvider(OiwObjectIdentifiers.IdSha1)); + m_providerMap.Add("RSA/NONE/OAEPWITHSHA224ANDMGF1PADDING", new RsaOaepWrapperProvider(NistObjectIdentifiers.IdSha224)); + m_providerMap.Add("RSA/NONE/OAEPWITHSHA256ANDMGF1PADDING", new RsaOaepWrapperProvider(NistObjectIdentifiers.IdSha256)); + m_providerMap.Add("RSA/NONE/OAEPWITHSHA384ANDMGF1PADDING", new RsaOaepWrapperProvider(NistObjectIdentifiers.IdSha384)); + m_providerMap.Add("RSA/NONE/OAEPWITHSHA512ANDMGF1PADDING", new RsaOaepWrapperProvider(NistObjectIdentifiers.IdSha512)); + m_providerMap.Add("RSA/NONE/OAEPWITHSHA256ANDMGF1WITHSHA1PADDING", new RsaOaepWrapperProvider(NistObjectIdentifiers.IdSha256, OiwObjectIdentifiers.IdSha1)); + } + + public static IKeyWrapper WrapperForName(string algorithm, ICipherParameters parameters) + { + if (!m_providerMap.TryGetValue(algorithm, out var provider)) + throw new ArgumentException("could not resolve " + algorithm + " to a KeyWrapper"); + + return (IKeyWrapper)provider.CreateWrapper(true, parameters); + } + + public static IKeyUnwrapper UnwrapperForName(string algorithm, ICipherParameters parameters) + { + if (!m_providerMap.TryGetValue(algorithm, out var provider)) + throw new ArgumentException("could not resolve " + algorithm + " to a KeyUnwrapper"); + + return (IKeyUnwrapper)provider.CreateWrapper(false, parameters); + } + } + + internal interface WrapperProvider + { + object CreateWrapper(bool forWrapping, ICipherParameters parameters); + } + + internal class RsaPkcs1Wrapper : IKeyWrapper, IKeyUnwrapper + { + private readonly AlgorithmIdentifier algId; + private readonly IAsymmetricBlockCipher engine; + + public RsaPkcs1Wrapper(bool forWrapping, ICipherParameters parameters) + { + this.algId = new AlgorithmIdentifier( + PkcsObjectIdentifiers.RsaEncryption, + DerNull.Instance); + + this.engine = new Pkcs1Encoding(new RsaBlindedEngine()); + this.engine.Init(forWrapping, parameters); + } + + public object AlgorithmDetails + { + get { return algId; } + } + + public IBlockResult Unwrap(byte[] cipherText, int offset, int length) + { + return new SimpleBlockResult(engine.ProcessBlock(cipherText, offset, length)); + } + + public IBlockResult Wrap(byte[] keyData) + { + return new SimpleBlockResult(engine.ProcessBlock(keyData, 0, keyData.Length)); + } + } + + internal class RsaPkcs1WrapperProvider + : WrapperProvider + { + internal RsaPkcs1WrapperProvider() + { + } + + object WrapperProvider.CreateWrapper(bool forWrapping, ICipherParameters parameters) + { + return new RsaPkcs1Wrapper(forWrapping, parameters); + } + } + + internal class RsaOaepWrapper : IKeyWrapper, IKeyUnwrapper + { + private readonly AlgorithmIdentifier algId; + private readonly IAsymmetricBlockCipher engine; + + public RsaOaepWrapper(bool forWrapping, ICipherParameters parameters, DerObjectIdentifier digestOid) + : this(forWrapping, parameters, digestOid, digestOid) + { + } + + public RsaOaepWrapper(bool forWrapping, ICipherParameters parameters, DerObjectIdentifier digestOid, DerObjectIdentifier mgfOid) + { + AlgorithmIdentifier digestAlgId = new AlgorithmIdentifier(digestOid, DerNull.Instance); + + if (mgfOid.Equals(NistObjectIdentifiers.IdShake128) || mgfOid.Equals(NistObjectIdentifiers.IdShake256)) + { + this.algId = new AlgorithmIdentifier( + PkcsObjectIdentifiers.IdRsaesOaep, + new RsaesOaepParameters( + digestAlgId, + new AlgorithmIdentifier(mgfOid), + RsaesOaepParameters.DefaultPSourceAlgorithm)); + } + else + { + this.algId = new AlgorithmIdentifier( + PkcsObjectIdentifiers.IdRsaesOaep, + new RsaesOaepParameters( + digestAlgId, + new AlgorithmIdentifier(PkcsObjectIdentifiers.IdMgf1, new AlgorithmIdentifier(mgfOid, DerNull.Instance)), + RsaesOaepParameters.DefaultPSourceAlgorithm)); + } + + this.engine = new OaepEncoding(new RsaBlindedEngine(), DigestUtilities.GetDigest(digestOid), DigestUtilities.GetDigest(mgfOid), null); + this.engine.Init(forWrapping, parameters); + } + + public object AlgorithmDetails + { + get { return algId; } + } + + public IBlockResult Unwrap(byte[] cipherText, int offset, int length) + { + return new SimpleBlockResult(engine.ProcessBlock(cipherText, offset, length)); + } + + public IBlockResult Wrap(byte[] keyData) + { + return new SimpleBlockResult(engine.ProcessBlock(keyData, 0, keyData.Length)); + } + } + + internal class RsaOaepWrapperProvider + : WrapperProvider + { + private readonly DerObjectIdentifier digestOid; + private readonly DerObjectIdentifier mgfOid; + + internal RsaOaepWrapperProvider(DerObjectIdentifier digestOid) + { + this.digestOid = digestOid; + this.mgfOid = digestOid; + } + + internal RsaOaepWrapperProvider(DerObjectIdentifier digestOid, DerObjectIdentifier mgfOid) + { + this.digestOid = digestOid; + this.mgfOid = mgfOid; + } + + object WrapperProvider.CreateWrapper(bool forWrapping, ICipherParameters parameters) + { + return new RsaOaepWrapper(forWrapping, parameters, digestOid, mgfOid); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1KeyWrapper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1KeyWrapper.cs.meta new file mode 100644 index 000000000..9a576544d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1KeyWrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a5bc49bfdea936428ad463e6829361d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1Signature.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1Signature.cs new file mode 100644 index 000000000..244d01bff --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1Signature.cs @@ -0,0 +1,421 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Rosstandart; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.TeleTrust; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators +{ + internal class X509Utilities + { + private static readonly IDictionary m_algorithms = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly IDictionary m_exParams = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly HashSet noParams = new HashSet(); + + static X509Utilities() + { + m_algorithms.Add("MD2WITHRSAENCRYPTION", PkcsObjectIdentifiers.MD2WithRsaEncryption); + m_algorithms.Add("MD2WITHRSA", PkcsObjectIdentifiers.MD2WithRsaEncryption); + m_algorithms.Add("MD5WITHRSAENCRYPTION", PkcsObjectIdentifiers.MD5WithRsaEncryption); + m_algorithms.Add("MD5WITHRSA", PkcsObjectIdentifiers.MD5WithRsaEncryption); + m_algorithms.Add("SHA1WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha1WithRsaEncryption); + m_algorithms.Add("SHA-1WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha1WithRsaEncryption); + m_algorithms.Add("SHA1WITHRSA", PkcsObjectIdentifiers.Sha1WithRsaEncryption); + m_algorithms.Add("SHA-1WITHRSA", PkcsObjectIdentifiers.Sha1WithRsaEncryption); + m_algorithms.Add("SHA224WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha224WithRsaEncryption); + m_algorithms.Add("SHA-224WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha224WithRsaEncryption); + m_algorithms.Add("SHA224WITHRSA", PkcsObjectIdentifiers.Sha224WithRsaEncryption); + m_algorithms.Add("SHA-224WITHRSA", PkcsObjectIdentifiers.Sha224WithRsaEncryption); + m_algorithms.Add("SHA256WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha256WithRsaEncryption); + m_algorithms.Add("SHA-256WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha256WithRsaEncryption); + m_algorithms.Add("SHA256WITHRSA", PkcsObjectIdentifiers.Sha256WithRsaEncryption); + m_algorithms.Add("SHA-256WITHRSA", PkcsObjectIdentifiers.Sha256WithRsaEncryption); + m_algorithms.Add("SHA384WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha384WithRsaEncryption); + m_algorithms.Add("SHA-384WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha384WithRsaEncryption); + m_algorithms.Add("SHA384WITHRSA", PkcsObjectIdentifiers.Sha384WithRsaEncryption); + m_algorithms.Add("SHA-384WITHRSA", PkcsObjectIdentifiers.Sha384WithRsaEncryption); + m_algorithms.Add("SHA512WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512WithRsaEncryption); + m_algorithms.Add("SHA-512WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512WithRsaEncryption); + m_algorithms.Add("SHA512WITHRSA", PkcsObjectIdentifiers.Sha512WithRsaEncryption); + m_algorithms.Add("SHA-512WITHRSA", PkcsObjectIdentifiers.Sha512WithRsaEncryption); + m_algorithms.Add("SHA512(224)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption); + m_algorithms.Add("SHA-512(224)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption); + m_algorithms.Add("SHA512(224)WITHRSA", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption); + m_algorithms.Add("SHA-512(224)WITHRSA", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption); + m_algorithms.Add("SHA512(256)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption); + m_algorithms.Add("SHA-512(256)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption); + m_algorithms.Add("SHA512(256)WITHRSA", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption); + m_algorithms.Add("SHA-512(256)WITHRSA", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption); + m_algorithms.Add("SHA3-224WITHRSAENCRYPTION", NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_224); + m_algorithms.Add("SHA3-256WITHRSAENCRYPTION", NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_256); + m_algorithms.Add("SHA3-384WITHRSAENCRYPTION", NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_384); + m_algorithms.Add("SHA3-512WITHRSAENCRYPTION", NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_512); + m_algorithms.Add("SHA3-224WITHRSA", NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_224); + m_algorithms.Add("SHA3-256WITHRSA", NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_256); + m_algorithms.Add("SHA3-384WITHRSA", NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_384); + m_algorithms.Add("SHA3-512WITHRSA", NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_512); + m_algorithms.Add("SHA1WITHRSAANDMGF1", PkcsObjectIdentifiers.IdRsassaPss); + m_algorithms.Add("SHA224WITHRSAANDMGF1", PkcsObjectIdentifiers.IdRsassaPss); + m_algorithms.Add("SHA256WITHRSAANDMGF1", PkcsObjectIdentifiers.IdRsassaPss); + m_algorithms.Add("SHA384WITHRSAANDMGF1", PkcsObjectIdentifiers.IdRsassaPss); + m_algorithms.Add("SHA512WITHRSAANDMGF1", PkcsObjectIdentifiers.IdRsassaPss); + m_algorithms.Add("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD160); + m_algorithms.Add("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD160); + m_algorithms.Add("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD128); + m_algorithms.Add("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD128); + m_algorithms.Add("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD256); + m_algorithms.Add("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD256); + m_algorithms.Add("SHA1WITHDSA", X9ObjectIdentifiers.IdDsaWithSha1); + m_algorithms.Add("DSAWITHSHA1", X9ObjectIdentifiers.IdDsaWithSha1); + m_algorithms.Add("SHA224WITHDSA", NistObjectIdentifiers.DsaWithSha224); + m_algorithms.Add("SHA256WITHDSA", NistObjectIdentifiers.DsaWithSha256); + m_algorithms.Add("SHA384WITHDSA", NistObjectIdentifiers.DsaWithSha384); + m_algorithms.Add("SHA512WITHDSA", NistObjectIdentifiers.DsaWithSha512); + m_algorithms.Add("SHA1WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha1); + m_algorithms.Add("ECDSAWITHSHA1", X9ObjectIdentifiers.ECDsaWithSha1); + m_algorithms.Add("SHA224WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha224); + m_algorithms.Add("SHA256WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha256); + m_algorithms.Add("SHA384WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha384); + m_algorithms.Add("SHA512WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha512); + m_algorithms.Add("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94); + m_algorithms.Add("GOST3411WITHGOST3410-94", CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94); + m_algorithms.Add("GOST3411WITHECGOST3410", CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001); + m_algorithms.Add("GOST3411WITHECGOST3410-2001", CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001); + m_algorithms.Add("GOST3411WITHGOST3410-2001", CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001); + m_algorithms.Add("GOST3411-2012-256WITHECGOST3410", RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_256); + m_algorithms.Add("GOST3411-2012-256WITHECGOST3410-2012-256", RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_256); + m_algorithms.Add("GOST3411-2012-512WITHECGOST3410", RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_512); + m_algorithms.Add("GOST3411-2012-512WITHECGOST3410-2012-512", RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_512); + + // + // According to RFC 3279, the ASN.1 encoding SHALL (id-dsa-with-sha1) or MUST (ecdsa-with-SHA*) omit the parameters field. + // The parameters field SHALL be NULL for RSA based signature algorithms. + // + noParams.Add(X9ObjectIdentifiers.ECDsaWithSha1); + noParams.Add(X9ObjectIdentifiers.ECDsaWithSha224); + noParams.Add(X9ObjectIdentifiers.ECDsaWithSha256); + noParams.Add(X9ObjectIdentifiers.ECDsaWithSha384); + noParams.Add(X9ObjectIdentifiers.ECDsaWithSha512); + noParams.Add(X9ObjectIdentifiers.IdDsaWithSha1); + noParams.Add(OiwObjectIdentifiers.DsaWithSha1); + noParams.Add(NistObjectIdentifiers.DsaWithSha224); + noParams.Add(NistObjectIdentifiers.DsaWithSha256); + noParams.Add(NistObjectIdentifiers.DsaWithSha384); + noParams.Add(NistObjectIdentifiers.DsaWithSha512); + + // + // RFC 4491 + // + noParams.Add(CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94); + noParams.Add(CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001); + + // + // explicit params + // + AlgorithmIdentifier sha1AlgId = new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1, DerNull.Instance); + m_exParams.Add("SHA1WITHRSAANDMGF1", CreatePssParams(sha1AlgId, 20)); + + AlgorithmIdentifier sha224AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha224, DerNull.Instance); + m_exParams.Add("SHA224WITHRSAANDMGF1", CreatePssParams(sha224AlgId, 28)); + + AlgorithmIdentifier sha256AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha256, DerNull.Instance); + m_exParams.Add("SHA256WITHRSAANDMGF1", CreatePssParams(sha256AlgId, 32)); + + AlgorithmIdentifier sha384AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha384, DerNull.Instance); + m_exParams.Add("SHA384WITHRSAANDMGF1", CreatePssParams(sha384AlgId, 48)); + + AlgorithmIdentifier sha512AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha512, DerNull.Instance); + m_exParams.Add("SHA512WITHRSAANDMGF1", CreatePssParams(sha512AlgId, 64)); + } + + /** + * Return the digest algorithm using one of the standard JCA string + * representations rather than the algorithm identifier (if possible). + */ + private static string GetDigestAlgName( + DerObjectIdentifier digestAlgOID) + { + if (PkcsObjectIdentifiers.MD5.Equals(digestAlgOID)) + { + return "MD5"; + } + else if (OiwObjectIdentifiers.IdSha1.Equals(digestAlgOID)) + { + return "SHA1"; + } + else if (NistObjectIdentifiers.IdSha224.Equals(digestAlgOID)) + { + return "SHA224"; + } + else if (NistObjectIdentifiers.IdSha256.Equals(digestAlgOID)) + { + return "SHA256"; + } + else if (NistObjectIdentifiers.IdSha384.Equals(digestAlgOID)) + { + return "SHA384"; + } + else if (NistObjectIdentifiers.IdSha512.Equals(digestAlgOID)) + { + return "SHA512"; + } + else if (NistObjectIdentifiers.IdSha512_224.Equals(digestAlgOID)) + { + return "SHA512(224)"; + } + else if (NistObjectIdentifiers.IdSha512_256.Equals(digestAlgOID)) + { + return "SHA512(256)"; + } + else if (TeleTrusTObjectIdentifiers.RipeMD128.Equals(digestAlgOID)) + { + return "RIPEMD128"; + } + else if (TeleTrusTObjectIdentifiers.RipeMD160.Equals(digestAlgOID)) + { + return "RIPEMD160"; + } + else if (TeleTrusTObjectIdentifiers.RipeMD256.Equals(digestAlgOID)) + { + return "RIPEMD256"; + } + else if (CryptoProObjectIdentifiers.GostR3411.Equals(digestAlgOID)) + { + return "GOST3411"; + } + else if (RosstandartObjectIdentifiers.id_tc26_gost_3411_12_256.Equals(digestAlgOID)) + { + return "GOST3411-2012-256"; + } + else if (RosstandartObjectIdentifiers.id_tc26_gost_3411_12_512.Equals(digestAlgOID)) + { + return "GOST3411-2012-512"; + } + else + { + return digestAlgOID.Id; + } + } + + internal static string GetSignatureName(AlgorithmIdentifier sigAlgId) + { + Asn1Encodable parameters = sigAlgId.Parameters; + + if (parameters != null && !DerNull.Instance.Equals(parameters)) + { + if (sigAlgId.Algorithm.Equals(PkcsObjectIdentifiers.IdRsassaPss)) + { + RsassaPssParameters rsaParams = RsassaPssParameters.GetInstance(parameters); + + return GetDigestAlgName(rsaParams.HashAlgorithm.Algorithm) + "withRSAandMGF1"; + } + if (sigAlgId.Algorithm.Equals(X9ObjectIdentifiers.ECDsaWithSha2)) + { + Asn1Sequence ecDsaParams = Asn1Sequence.GetInstance(parameters); + + return GetDigestAlgName((DerObjectIdentifier)ecDsaParams[0]) + "withECDSA"; + } + } + + return sigAlgId.Algorithm.Id; + } + + private static RsassaPssParameters CreatePssParams( + AlgorithmIdentifier hashAlgId, + int saltSize) + { + return new RsassaPssParameters( + hashAlgId, + new AlgorithmIdentifier(PkcsObjectIdentifiers.IdMgf1, hashAlgId), + new DerInteger(saltSize), + new DerInteger(1)); + } + + internal static DerObjectIdentifier GetAlgorithmOid(string algorithmName) + { + if (m_algorithms.TryGetValue(algorithmName, out var oid)) + return oid; + + return new DerObjectIdentifier(algorithmName); + } + + internal static AlgorithmIdentifier GetSigAlgID(DerObjectIdentifier sigOid, string algorithmName) + { + if (noParams.Contains(sigOid)) + return new AlgorithmIdentifier(sigOid); + + if (m_exParams.TryGetValue(algorithmName, out var explicitParameters)) + return new AlgorithmIdentifier(sigOid, explicitParameters); + + return new AlgorithmIdentifier(sigOid, DerNull.Instance); + } + + internal static IEnumerable GetAlgNames() + { + return CollectionUtilities.Proxy(m_algorithms.Keys); + } + } + + + + /// + /// Calculator factory class for signature generation in ASN.1 based profiles that use an AlgorithmIdentifier to preserve + /// signature algorithm details. + /// + public class Asn1SignatureFactory + : ISignatureFactory + { + private readonly AlgorithmIdentifier algID; + private readonly string algorithm; + private readonly AsymmetricKeyParameter privateKey; + private readonly SecureRandom random; + + /// + /// Base constructor. + /// + /// The name of the signature algorithm to use. + /// The private key to be used in the signing operation. + public Asn1SignatureFactory (string algorithm, AsymmetricKeyParameter privateKey) + : this(algorithm, privateKey, null) + { + } + + /// + /// Constructor which also specifies a source of randomness to be used if one is required. + /// + /// The name of the signature algorithm to use. + /// The private key to be used in the signing operation. + /// The source of randomness to be used in signature calculation. + public Asn1SignatureFactory(string algorithm, AsymmetricKeyParameter privateKey, SecureRandom random) + { + if (algorithm == null) + throw new ArgumentNullException("algorithm"); + if (privateKey == null) + throw new ArgumentNullException("privateKey"); + if (!privateKey.IsPrivate) + throw new ArgumentException("Key for signing must be private", "privateKey"); + + DerObjectIdentifier sigOid = X509Utilities.GetAlgorithmOid(algorithm); + + this.algorithm = algorithm; + this.privateKey = privateKey; + this.random = random; + this.algID = X509Utilities.GetSigAlgID(sigOid, algorithm); + } + + public object AlgorithmDetails + { + get { return this.algID; } + } + + public IStreamCalculator CreateCalculator() + { + ISigner signer = SignerUtilities.InitSigner(algorithm, true, privateKey, random); + + return new DefaultSignatureCalculator(signer); + } + + /// + /// Allows enumeration of the signature names supported by the verifier provider. + /// + public static IEnumerable SignatureAlgNames + { + get { return X509Utilities.GetAlgNames(); } + } + } + + /// + /// Verifier class for signature verification in ASN.1 based profiles that use an AlgorithmIdentifier to preserve + /// signature algorithm details. + /// + public class Asn1VerifierFactory + : IVerifierFactory + { + private readonly AlgorithmIdentifier algID; + private readonly AsymmetricKeyParameter publicKey; + + /// + /// Base constructor. + /// + /// The name of the signature algorithm to use. + /// The public key to be used in the verification operation. + public Asn1VerifierFactory(string algorithm, AsymmetricKeyParameter publicKey) + { + if (algorithm == null) + throw new ArgumentNullException("algorithm"); + if (publicKey == null) + throw new ArgumentNullException("publicKey"); + if (publicKey.IsPrivate) + throw new ArgumentException("Key for verifying must be public", "publicKey"); + + DerObjectIdentifier sigOid = X509Utilities.GetAlgorithmOid(algorithm); + + this.publicKey = publicKey; + this.algID = X509Utilities.GetSigAlgID(sigOid, algorithm); + } + + public Asn1VerifierFactory(AlgorithmIdentifier algorithm, AsymmetricKeyParameter publicKey) + { + this.publicKey = publicKey; + this.algID = algorithm; + } + + public object AlgorithmDetails + { + get { return this.algID; } + } + + public IStreamCalculator CreateCalculator() + { + ISigner verifier = SignerUtilities.InitSigner(X509Utilities.GetSignatureName(algID), false, publicKey, null); + + return new DefaultVerifierCalculator(verifier); + } + } + + /// + /// Provider class which supports dynamic creation of signature verifiers. + /// + public class Asn1VerifierFactoryProvider: IVerifierFactoryProvider + { + private readonly AsymmetricKeyParameter publicKey; + + /// + /// Base constructor - specify the public key to be used in verification. + /// + /// The public key to be used in creating verifiers provided by this object. + public Asn1VerifierFactoryProvider(AsymmetricKeyParameter publicKey) + { + this.publicKey = publicKey; + } + + public IVerifierFactory CreateVerifierFactory(object algorithmDetails) + { + return new Asn1VerifierFactory((AlgorithmIdentifier)algorithmDetails, publicKey); + } + + /// + /// Allows enumeration of the signature names supported by the verifier provider. + /// + public IEnumerable SignatureAlgNames + { + get { return X509Utilities.GetAlgNames(); } + } + } +} + +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1Signature.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1Signature.cs.meta new file mode 100644 index 000000000..8ab4abdd6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/Asn1Signature.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3cfa37c567c69d64e94a320d53944aff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/CmsContentEncryptorBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/CmsContentEncryptorBuilder.cs new file mode 100644 index 000000000..013269dc1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/CmsContentEncryptorBuilder.cs @@ -0,0 +1,61 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ntt; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Operators +{ + public class CmsContentEncryptorBuilder + { + private static readonly IDictionary KeySizes = + new Dictionary(); + + static CmsContentEncryptorBuilder() + { + KeySizes[NistObjectIdentifiers.IdAes128Cbc] = 128; + KeySizes[NistObjectIdentifiers.IdAes192Cbc] = 192; + KeySizes[NistObjectIdentifiers.IdAes256Cbc] = 256; + + KeySizes[NttObjectIdentifiers.IdCamellia128Cbc] = 128; + KeySizes[NttObjectIdentifiers.IdCamellia192Cbc] = 192; + KeySizes[NttObjectIdentifiers.IdCamellia256Cbc] = 256; + } + + private static int GetKeySize(DerObjectIdentifier oid) + { + return KeySizes.TryGetValue(oid, out var keySize) ? keySize : -1; + } + + private readonly DerObjectIdentifier encryptionOID; + private readonly int keySize; + + private readonly EnvelopedDataHelper helper = new EnvelopedDataHelper(); + //private SecureRandom random; + + public CmsContentEncryptorBuilder(DerObjectIdentifier encryptionOID) + : this(encryptionOID, GetKeySize(encryptionOID)) + { + } + + public CmsContentEncryptorBuilder(DerObjectIdentifier encryptionOID, int keySize) + { + this.encryptionOID = encryptionOID; + this.keySize = keySize; + } + + public ICipherBuilderWithKey Build() + { + //return new Asn1CipherBuilderWithKey(encryptionOID, keySize, random); + return new Asn1CipherBuilderWithKey(encryptionOID, keySize, null); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/CmsContentEncryptorBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/CmsContentEncryptorBuilder.cs.meta new file mode 100644 index 000000000..92b7e7fbe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/CmsContentEncryptorBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f1801d0412d82845ad2464c331d5aae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/CmsKeyTransRecipientInfoGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/CmsKeyTransRecipientInfoGenerator.cs new file mode 100644 index 000000000..0de7a80d5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/CmsKeyTransRecipientInfoGenerator.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Operators +{ + /// Use KeyTransRecipientInfoGenerator + public class CmsKeyTransRecipientInfoGenerator + : KeyTransRecipientInfoGenerator + { + public CmsKeyTransRecipientInfoGenerator(X509Certificate recipCert, IKeyWrapper keyWrapper) + : base(new Asn1.Cms.IssuerAndSerialNumber(recipCert.IssuerDN, new DerInteger(recipCert.SerialNumber)), keyWrapper) + { + } + + public CmsKeyTransRecipientInfoGenerator(IssuerAndSerialNumber issuerAndSerial, IKeyWrapper keyWrapper) + : base(issuerAndSerial, keyWrapper) + { + } + + public CmsKeyTransRecipientInfoGenerator(byte[] subjectKeyID, IKeyWrapper keyWrapper) : base(subjectKeyID, keyWrapper) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/CmsKeyTransRecipientInfoGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/CmsKeyTransRecipientInfoGenerator.cs.meta new file mode 100644 index 000000000..24b0b01f0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/CmsKeyTransRecipientInfoGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 32541846c32ba2b4091b3be215d7c0fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultSignatureCalculator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultSignatureCalculator.cs new file mode 100644 index 000000000..9eb113b0c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultSignatureCalculator.cs @@ -0,0 +1,32 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators +{ + public class DefaultSignatureCalculator + : IStreamCalculator + { + private readonly SignerSink mSignerSink; + + public DefaultSignatureCalculator(ISigner signer) + { + this.mSignerSink = new SignerSink(signer); + } + + public Stream Stream + { + get { return mSignerSink; } + } + + public IBlockResult GetResult() + { + return new DefaultSignatureResult(mSignerSink.Signer); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultSignatureCalculator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultSignatureCalculator.cs.meta new file mode 100644 index 000000000..891ce0e75 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultSignatureCalculator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd95bd10d03dd5c43a84352032191028 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultSignatureResult.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultSignatureResult.cs new file mode 100644 index 000000000..07e77e237 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultSignatureResult.cs @@ -0,0 +1,40 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators +{ + public class DefaultSignatureResult + : IBlockResult + { + private readonly ISigner mSigner; + + public DefaultSignatureResult(ISigner signer) + { + this.mSigner = signer; + } + + public byte[] Collect() + { + return mSigner.GenerateSignature(); + } + + public int Collect(byte[] sig, int sigOff) + { + byte[] signature = Collect(); + signature.CopyTo(sig, sigOff); + return signature.Length; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int Collect(Span destination) + { + byte[] result = Collect(); + result.CopyTo(destination); + return result.Length; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultSignatureResult.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultSignatureResult.cs.meta new file mode 100644 index 000000000..60485fe5b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultSignatureResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8713fbe707f798c41802405bcdf53ae3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultVerifierCalculator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultVerifierCalculator.cs new file mode 100644 index 000000000..34675ebcb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultVerifierCalculator.cs @@ -0,0 +1,32 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators +{ + public class DefaultVerifierCalculator + : IStreamCalculator + { + private readonly SignerSink mSignerSink; + + public DefaultVerifierCalculator(ISigner signer) + { + this.mSignerSink = new SignerSink(signer); + } + + public Stream Stream + { + get { return mSignerSink; } + } + + public IVerifier GetResult() + { + return new DefaultVerifierResult(mSignerSink.Signer); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultVerifierCalculator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultVerifierCalculator.cs.meta new file mode 100644 index 000000000..a1ba22191 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultVerifierCalculator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 17f76450775ae0d458726adec8a5ad4c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultVerifierResult.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultVerifierResult.cs new file mode 100644 index 000000000..1f25d4b42 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultVerifierResult.cs @@ -0,0 +1,33 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators +{ + public class DefaultVerifierResult + : IVerifier + { + private readonly ISigner mSigner; + + public DefaultVerifierResult(ISigner signer) + { + this.mSigner = signer; + } + + public bool IsVerified(byte[] signature) + { + return mSigner.VerifySignature(signature); + } + + public bool IsVerified(byte[] sig, int sigOff, int sigLen) + { + byte[] signature = Arrays.CopyOfRange(sig, sigOff, sigOff + sigLen); + + return IsVerified(signature); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultVerifierResult.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultVerifierResult.cs.meta new file mode 100644 index 000000000..87f2fe8b2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/DefaultVerifierResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c49a906488d90c4dbe543d0d477d26d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/GenericKey.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/GenericKey.cs new file mode 100644 index 000000000..35e207623 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/GenericKey.cs @@ -0,0 +1,44 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators +{ + public class GenericKey + { + private readonly AlgorithmIdentifier algorithmIdentifier; + private readonly object representation; + + public GenericKey(object representation) + { + this.algorithmIdentifier = null; + this.representation = representation; + } + + public GenericKey(AlgorithmIdentifier algorithmIdentifier, byte[] representation) + { + this.algorithmIdentifier = algorithmIdentifier; + this.representation = representation; + } + + public GenericKey(AlgorithmIdentifier algorithmIdentifier, object representation) + { + this.algorithmIdentifier = algorithmIdentifier; + this.representation = representation; + } + + public AlgorithmIdentifier AlgorithmIdentifier + { + get { return algorithmIdentifier; } + } + + public object Representation + { + get { return representation; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/GenericKey.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/GenericKey.cs.meta new file mode 100644 index 000000000..10d5aeea1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/operators/GenericKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df067fc4a3311b14e94c1add7a41cc85 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings.meta new file mode 100644 index 000000000..d6c9e47dc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c60458b835ab8c54ba3ae600588beeeb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/BlockCipherPadding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/BlockCipherPadding.cs new file mode 100644 index 000000000..0454b349a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/BlockCipherPadding.cs @@ -0,0 +1,3 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/BlockCipherPadding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/BlockCipherPadding.cs.meta new file mode 100644 index 000000000..2179569ec --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/BlockCipherPadding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1991c05f84991634492c5a5943316444 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/IBlockCipherPadding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/IBlockCipherPadding.cs new file mode 100644 index 000000000..bf6dc9c22 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/IBlockCipherPadding.cs @@ -0,0 +1,47 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Paddings +{ + /// Block cipher padders are expected to conform to this interface. + public interface IBlockCipherPadding + { + /// Initialise the padder. + /// A source of randomness, if any required. + void Init(SecureRandom random); + + /// The name of the algorithm this padder implements. + string PaddingName { get; } + + /// Add padding to the passed in block. + /// the block to add padding to. + /// the offset into the block the padding is to start at. + /// the number of bytes of padding added. + int AddPadding(byte[] input, int inOff); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// Add padding to the passed in block. + /// the block to add padding to. + /// the offset into the block the padding is to start at. + /// the number of bytes of padding added. + int AddPadding(Span block, int position); +#endif + + /// Determine the length of padding present in the passed in block. + /// the block to check padding for. + /// the number of bytes of padding present. + int PadCount(byte[] input); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// Determine the length of padding present in the passed in block. + /// the block to check padding for. + /// the number of bytes of padding present. + int PadCount(ReadOnlySpan block); +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/IBlockCipherPadding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/IBlockCipherPadding.cs.meta new file mode 100644 index 000000000..64c1e3a95 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/IBlockCipherPadding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: caf3bb6373773f848a9296be6ae067d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/ISO10126d2Padding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/ISO10126d2Padding.cs new file mode 100644 index 000000000..314be343f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/ISO10126d2Padding.cs @@ -0,0 +1,93 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Paddings +{ + + /** + * A padder that adds ISO10126-2 padding to a block. + */ + public class ISO10126d2Padding: IBlockCipherPadding + { + private SecureRandom random; + + /** + * Initialise the padder. + * + * @param random a SecureRandom if available. + */ + public void Init( + SecureRandom random) + //throws ArgumentException + { + this.random = CryptoServicesRegistrar.GetSecureRandom(random); + } + + /** + * Return the name of the algorithm the cipher implements. + * + * @return the name of the algorithm the cipher implements. + */ + public string PaddingName + { + get { return "ISO10126-2"; } + } + + public int AddPadding(byte[] input, int inOff) + { + int count = input.Length - inOff; + if (count > 1) + { + random.NextBytes(input, inOff, count - 1); + } + input[input.Length - 1] = (byte)count; + + return count; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int AddPadding(Span block, int position) + { + int count = block.Length - position; + if (count > 1) + { + random.NextBytes(block[position..(block.Length - 1)]); + } + block[block.Length - 1] = (byte)count; + + return count; + } +#endif + + public int PadCount(byte[] input) + { + int count = input[input.Length -1]; + int position = input.Length - count; + + int failed = (position | (count - 1)) >> 31; + if (failed != 0) + throw new InvalidCipherTextException("pad block corrupted"); + + return count; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int PadCount(ReadOnlySpan block) + { + int count = block[block.Length - 1]; + int position = block.Length - count; + + int failed = (position | (count - 1)) >> 31; + if (failed != 0) + throw new InvalidCipherTextException("pad block corrupted"); + + return count; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/ISO10126d2Padding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/ISO10126d2Padding.cs.meta new file mode 100644 index 000000000..44806757a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/ISO10126d2Padding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 81e4c7d79b217c44da9b2dc55d48fb3d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/ISO7816d4Padding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/ISO7816d4Padding.cs new file mode 100644 index 000000000..22805a38a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/ISO7816d4Padding.cs @@ -0,0 +1,101 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Paddings +{ + /** + * A padder that adds the padding according to the scheme referenced in + * ISO 7814-4 - scheme 2 from ISO 9797-1. The first byte is 0x80, rest is 0x00 + */ + public class ISO7816d4Padding + : IBlockCipherPadding + { + /** + * Initialise the padder. + * + * @param random - a SecureRandom if available. + */ + public void Init( + SecureRandom random) + { + // nothing to do. + } + + /** + * Return the name of the algorithm the padder implements. + * + * @return the name of the algorithm the padder implements. + */ + public string PaddingName + { + get { return "ISO7816-4"; } + } + + public int AddPadding(byte[] input, int inOff) + { + int count = input.Length - inOff; + + input[inOff]= 0x80; + while (++inOff < input.Length) + { + input[inOff] = 0x00; + } + + return count; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int AddPadding(Span block, int position) + { + int count = block.Length - position; + block[position++] = 0x80; + block[position..].Fill(0x00); + return count; + } +#endif + + public int PadCount(byte[] input) + { + int position = -1, still00Mask = -1; + int i = input.Length; + while (--i >= 0) + { + int next = input[i]; + int match00Mask = ((next ^ 0x00) - 1) >> 31; + int match80Mask = ((next ^ 0x80) - 1) >> 31; + position ^= (i ^ position) & still00Mask & match80Mask; + still00Mask &= match00Mask; + } + if (position < 0) + throw new InvalidCipherTextException("pad block corrupted"); + + return input.Length - position; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int PadCount(ReadOnlySpan block) + { + int position = -1, still00Mask = -1; + int i = block.Length; + while (--i >= 0) + { + int next = block[i]; + int match00Mask = ((next ^ 0x00) - 1) >> 31; + int match80Mask = ((next ^ 0x80) - 1) >> 31; + position ^= (i ^ position) & still00Mask & match80Mask; + still00Mask &= match00Mask; + } + if (position < 0) + throw new InvalidCipherTextException("pad block corrupted"); + + return block.Length - position; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/ISO7816d4Padding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/ISO7816d4Padding.cs.meta new file mode 100644 index 000000000..6ee221781 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/ISO7816d4Padding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 26e9e3006aa8e5b49939429f343fbea4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/PaddedBufferedBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/PaddedBufferedBlockCipher.cs new file mode 100644 index 000000000..f5d86bab5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/PaddedBufferedBlockCipher.cs @@ -0,0 +1,388 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Paddings +{ + /** + * A wrapper class that allows block ciphers to be used to process data in + * a piecemeal fashion with padding. The PaddedBufferedBlockCipher + * outputs a block only when the buffer is full and more data is being added, + * or on a doFinal (unless the current block in the buffer is a pad block). + * The default padding mechanism used is the one outlined in Pkcs5/Pkcs7. + */ + public class PaddedBufferedBlockCipher + : BufferedBlockCipher + { + private readonly IBlockCipherPadding padding; + + public PaddedBufferedBlockCipher(IBlockCipher cipher, IBlockCipherPadding padding) + : this(EcbBlockCipher.GetBlockCipherMode(cipher), padding) + { + } + + /** + * Create a buffered block cipher with the desired padding. + * + * @param cipher the underlying block cipher this buffering object wraps. + * @param padding the padding type. + */ + public PaddedBufferedBlockCipher(IBlockCipherMode cipherMode, IBlockCipherPadding padding) + { + m_cipherMode = cipherMode; + this.padding = padding; + + buf = new byte[m_cipherMode.GetBlockSize()]; + bufOff = 0; + } + + /** + * Create a buffered block cipher Pkcs7 padding + * + * @param cipher the underlying block cipher this buffering object wraps. + */ + public PaddedBufferedBlockCipher(IBlockCipherMode cipherMode) + : this(cipherMode, new Pkcs7Padding()) + { + } + + /** + * initialise the cipher. + * + * @param forEncryption if true the cipher is initialised for + * encryption, if false for decryption. + * @param param the key and other data required by the cipher. + * @exception ArgumentException if the parameters argument is + * inappropriate. + */ + public override void Init(bool forEncryption, ICipherParameters parameters) + { + this.forEncryption = forEncryption; + + SecureRandom initRandom = null; + if (parameters is ParametersWithRandom withRandom) + { + initRandom = withRandom.Random; + parameters = withRandom.Parameters; + } + + Reset(); + padding.Init(initRandom); + m_cipherMode.Init(forEncryption, parameters); + } + + /** + * return the minimum size of the output buffer required for an update + * plus a doFinal with an input of len bytes. + * + * @param len the length of the input. + * @return the space required to accommodate a call to update and doFinal + * with len bytes of input. + */ + public override int GetOutputSize( + int length) + { + int total = length + bufOff; + int leftOver = total % buf.Length; + + if (leftOver == 0) + { + if (forEncryption) + { + return total + buf.Length; + } + + return total; + } + + return total - leftOver + buf.Length; + } + + /** + * return the size of the output buffer required for an update + * an input of len bytes. + * + * @param len the length of the input. + * @return the space required to accommodate a call to update + * with len bytes of input. + */ + public override int GetUpdateOutputSize( + int length) + { + int total = length + bufOff; + int leftOver = total % buf.Length; + + if (leftOver == 0) + { + return total - buf.Length; + } + + return total - leftOver; + } + + /** + * process a single byte, producing an output block if necessary. + * + * @param in the input byte. + * @param out the space for any output that might be produced. + * @param outOff the offset from which the output will be copied. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there isn't enough space in out. + * @exception InvalidOperationException if the cipher isn't initialised. + */ + public override int ProcessByte(byte input, byte[] output, int outOff) + { + int resultLen = 0; + + if (bufOff == buf.Length) + { + resultLen = m_cipherMode.ProcessBlock(buf, 0, output, outOff); + bufOff = 0; + } + + buf[bufOff++] = input; + + return resultLen; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int ProcessByte(byte input, Span output) + { + int resultLen = 0; + + if (bufOff == buf.Length) + { + resultLen = m_cipherMode.ProcessBlock(buf, output); + bufOff = 0; + } + + buf[bufOff++] = input; + + return resultLen; + } +#endif + + /** + * process an array of bytes, producing output if necessary. + * + * @param in the input byte array. + * @param inOff the offset at which the input data starts. + * @param len the number of bytes to be copied out of the input array. + * @param out the space for any output that might be produced. + * @param outOff the offset from which the output will be copied. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there isn't enough space in out. + * @exception InvalidOperationException if the cipher isn't initialised. + */ + public override int ProcessBytes(byte[] input, int inOff, int length, byte[] output, int outOff) + { + if (length < 0) + throw new ArgumentException("Can't have a negative input length!"); + + int blockSize = GetBlockSize(); + int outLength = GetUpdateOutputSize(length); + + if (outLength > 0) + { + Check.OutputLength(output, outOff, outLength, "output buffer too short"); + } + + int resultLen = 0; + int gapLen = buf.Length - bufOff; + + if (length > gapLen) + { + Array.Copy(input, inOff, buf, bufOff, gapLen); + + resultLen = m_cipherMode.ProcessBlock(buf, 0, output, outOff); + + bufOff = 0; + length -= gapLen; + inOff += gapLen; + + while (length > buf.Length) + { + resultLen += m_cipherMode.ProcessBlock(input, inOff, output, outOff + resultLen); + + length -= blockSize; + inOff += blockSize; + } + } + + Array.Copy(input, inOff, buf, bufOff, length); + + bufOff += length; + + return resultLen; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int ProcessBytes(ReadOnlySpan input, Span output) + { + int blockSize = GetBlockSize(); + int outLength = GetUpdateOutputSize(input.Length); + + if (outLength > 0) + { + Check.OutputLength(output, outLength, "output buffer too short"); + } + + int resultLen = 0; + int gapLen = buf.Length - bufOff; + + if (input.Length > gapLen) + { + input[..gapLen].CopyTo(buf.AsSpan(bufOff)); + + resultLen = m_cipherMode.ProcessBlock(buf, output); + + bufOff = 0; + input = input[gapLen..]; + + while (input.Length > buf.Length) + { + resultLen += m_cipherMode.ProcessBlock(input, output[resultLen..]); + + input = input[blockSize..]; + } + } + + input.CopyTo(buf.AsSpan(bufOff)); + + bufOff += input.Length; + + return resultLen; + } +#endif + + /** + * Process the last block in the buffer. If the buffer is currently + * full and padding needs to be added a call to doFinal will produce + * 2 * GetBlockSize() bytes. + * + * @param out the array the block currently being held is copied into. + * @param outOff the offset at which the copying starts. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there is insufficient space in out for + * the output or we are decrypting and the input is not block size aligned. + * @exception InvalidOperationException if the underlying cipher is not + * initialised. + * @exception InvalidCipherTextException if padding is expected and not found. + */ + public override int DoFinal(byte[] output, int outOff) + { + int blockSize = m_cipherMode.GetBlockSize(); + int resultLen = 0; + + if (forEncryption) + { + if (bufOff == blockSize) + { + if ((outOff + 2 * blockSize) > output.Length) + { + Reset(); + + throw new OutputLengthException("output buffer too short"); + } + + resultLen = m_cipherMode.ProcessBlock(buf, 0, output, outOff); + bufOff = 0; + } + + padding.AddPadding(buf, bufOff); + + resultLen += m_cipherMode.ProcessBlock(buf, 0, output, outOff + resultLen); + + Reset(); + } + else + { + if (bufOff == blockSize) + { + resultLen = m_cipherMode.ProcessBlock(buf, 0, buf, 0); + bufOff = 0; + } + else + { + Reset(); + + throw new DataLengthException("last block incomplete in decryption"); + } + + try + { + resultLen -= padding.PadCount(buf); + + Array.Copy(buf, 0, output, outOff, resultLen); + } + finally + { + Reset(); + } + } + + return resultLen; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int DoFinal(Span output) + { + int blockSize = m_cipherMode.GetBlockSize(); + int resultLen = 0; + + if (forEncryption) + { + if (bufOff == blockSize) + { + if ((2 * blockSize) > output.Length) + { + Reset(); + + throw new OutputLengthException("output buffer too short"); + } + + resultLen = m_cipherMode.ProcessBlock(buf, output); + bufOff = 0; + } + + padding.AddPadding(buf, bufOff); + + resultLen += m_cipherMode.ProcessBlock(buf, output[resultLen..]); + + Reset(); + } + else + { + if (bufOff != blockSize) + { + Reset(); + + throw new DataLengthException("last block incomplete in decryption"); + } + + resultLen = m_cipherMode.ProcessBlock(buf, buf); + bufOff = 0; + + try + { + resultLen -= padding.PadCount(buf); + + buf.AsSpan(0, resultLen).CopyTo(output); + } + finally + { + Reset(); + } + } + + return resultLen; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/PaddedBufferedBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/PaddedBufferedBlockCipher.cs.meta new file mode 100644 index 000000000..5f7930aaf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/PaddedBufferedBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 65e1994a7e4976f4aa5b7844d08da1d2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/Pkcs7Padding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/Pkcs7Padding.cs new file mode 100644 index 000000000..0eeee52f5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/Pkcs7Padding.cs @@ -0,0 +1,98 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Paddings +{ + /** + * A padder that adds Pkcs7/Pkcs5 padding to a block. + */ + public class Pkcs7Padding + : IBlockCipherPadding + { + /** + * Initialise the padder. + * + * @param random - a SecureRandom if available. + */ + public void Init( + SecureRandom random) + { + // nothing to do. + } + + /** + * Return the name of the algorithm the cipher implements. + * + * @return the name of the algorithm the cipher implements. + */ + public string PaddingName + { + get { return "PKCS7"; } + } + + public int AddPadding(byte[] input, int inOff) + { + int count = input.Length - inOff; + byte padValue = (byte)count; + + while (inOff < input.Length) + { + input[inOff++] = padValue; + } + + return count; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int AddPadding(Span block, int position) + { + int count = block.Length - position; + byte padValue = (byte)count; + block[position..].Fill(padValue); + return count; + } +#endif + + public int PadCount(byte[] input) + { + byte padValue = input[input.Length - 1]; + int count = padValue; + int position = input.Length - count; + + int failed = (position | (count - 1)) >> 31; + for (int i = 0; i < input.Length; ++i) + { + failed |= (input[i] ^ padValue) & ~((i - position) >> 31); + } + if (failed != 0) + throw new InvalidCipherTextException("pad block corrupted"); + + return count; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int PadCount(ReadOnlySpan block) + { + byte padValue = block[block.Length - 1]; + int count = padValue; + int position = block.Length - count; + + int failed = (position | (count - 1)) >> 31; + for (int i = 0; i < block.Length; ++i) + { + failed |= (block[i] ^ padValue) & ~((i - position) >> 31); + } + if (failed != 0) + throw new InvalidCipherTextException("pad block corrupted"); + + return count; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/Pkcs7Padding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/Pkcs7Padding.cs.meta new file mode 100644 index 000000000..5334f056f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/Pkcs7Padding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a987dc3355949814fa1b788c5ba932d6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/TbcPadding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/TbcPadding.cs new file mode 100644 index 000000000..04491bebd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/TbcPadding.cs @@ -0,0 +1,105 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Paddings +{ + + /// A padder that adds Trailing-Bit-Compliment padding to a block. + ///

+ /// This padding pads the block out compliment of the last bit + /// of the plain text. + ///

+ ///
+ public class TbcPadding + : IBlockCipherPadding + { + /// Return the name of the algorithm the cipher implements. + /// the name of the algorithm the cipher implements. + /// + public string PaddingName + { + get { return "TBC"; } + } + + /// Initialise the padder. + /// - a SecureRandom if available. + /// + public virtual void Init(SecureRandom random) + { + // nothing to do. + } + + /// add the pad bytes to the passed in block, returning the number of bytes added. + /// + /// This assumes that the last block of plain text is always passed to it inside . + /// i.e. if is zero, indicating the padding will fill the entire block,the value of + /// should be the same as the last block of plain text. + /// + public virtual int AddPadding(byte[] input, int inOff) + { + int count = input.Length - inOff; + byte lastByte = inOff > 0 ? input[inOff - 1] : input[input.Length - 1]; + byte padValue = (byte)((lastByte & 1) - 1); + + while (inOff < input.Length) + { + input[inOff++] = padValue; + } + + return count; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// add the pad bytes to the passed in block, returning the number of bytes added. + /// + /// This assumes that the last block of plain text is always passed to it inside . + /// i.e. if is zero, indicating the padding will fill the entire block,the value of + /// should be the same as the last block of plain text. + /// + public virtual int AddPadding(Span block, int position) + { + byte lastByte = position > 0 ? block[position - 1] : block[block.Length - 1]; + byte padValue = (byte)((lastByte & 1) - 1); + + var padding = block[position..]; + padding.Fill(padValue); + return padding.Length; + } +#endif + + public virtual int PadCount(byte[] input) + { + int i = input.Length; + int code = input[--i], count = 1, countingMask = -1; + while (--i >= 0) + { + int next = input[i]; + int matchMask = ((next ^ code) - 1) >> 31; + countingMask &= matchMask; + count -= countingMask; + } + return count; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int PadCount(ReadOnlySpan block) + { + int i = block.Length; + int code = block[--i], count = 1, countingMask = -1; + while (--i >= 0) + { + int next = block[i]; + int matchMask = ((next ^ code) - 1) >> 31; + countingMask &= matchMask; + count -= countingMask; + } + return count; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/TbcPadding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/TbcPadding.cs.meta new file mode 100644 index 000000000..53ee546b7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/TbcPadding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ee3e7e57e20d50c41b6f9cc4f31b6b69 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/X923Padding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/X923Padding.cs new file mode 100644 index 000000000..843d79091 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/X923Padding.cs @@ -0,0 +1,107 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Paddings +{ + /** + * A padder that adds X9.23 padding to a block - if a SecureRandom is + * passed in random padding is assumed, otherwise padding with zeros is used. + */ + public class X923Padding + : IBlockCipherPadding + { + private SecureRandom random; + + /** + * Initialise the padder. + * + * @param random a SecureRandom if one is available. + */ + public void Init( + SecureRandom random) + { + this.random = random; + } + + /** + * Return the name of the algorithm the cipher implements. + * + * @return the name of the algorithm the cipher implements. + */ + public string PaddingName + { + get { return "X9.23"; } + } + + public int AddPadding(byte[] input, int inOff) + { + int count = input.Length - inOff; + if (count > 1) + { + if (random == null) + { + Arrays.Fill(input, inOff, input.Length - 1, 0x00); + } + else + { + random.NextBytes(input, inOff, count - 1); + } + } + input[input.Length - 1] = (byte)count; + return count; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int AddPadding(Span block, int position) + { + int count = block.Length - position; + if (count > 1) + { + var body = block[position..(block.Length - 1)]; + if (random == null) + { + body.Fill(0x00); + } + else + { + random.NextBytes(body); + } + } + block[block.Length - 1] = (byte)count; + return count; + } +#endif + + public int PadCount(byte[] input) + { + int count = input[input.Length - 1]; + int position = input.Length - count; + + int failed = (position | (count - 1)) >> 31; + if (failed != 0) + throw new InvalidCipherTextException("pad block corrupted"); + + return count; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int PadCount(ReadOnlySpan block) + { + int count = block[block.Length - 1]; + int position = block.Length - count; + + int failed = (position | (count - 1)) >> 31; + if (failed != 0) + throw new InvalidCipherTextException("pad block corrupted"); + + return count; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/X923Padding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/X923Padding.cs.meta new file mode 100644 index 000000000..7b01661aa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/X923Padding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7c0da47832981c243887ec0245c7c943 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/ZeroBytePadding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/ZeroBytePadding.cs new file mode 100644 index 000000000..352ba3f34 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/ZeroBytePadding.cs @@ -0,0 +1,86 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Paddings +{ + + /// A padder that adds Null byte padding to a block. + public class ZeroBytePadding : IBlockCipherPadding + { + /// Return the name of the algorithm the cipher implements. + /// + /// + /// the name of the algorithm the cipher implements. + /// + public string PaddingName + { + get { return "ZeroBytePadding"; } + } + + /// Initialise the padder. + /// + /// + /// - a SecureRandom if available. + /// + public void Init(SecureRandom random) + { + // nothing to do. + } + + public int AddPadding(byte[] input, int inOff) + { + int added = input.Length - inOff; + + while (inOff < input.Length) + { + input[inOff++] = 0x00; + } + + return added; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int AddPadding(Span block, int position) + { + int count = block.Length - position; + block[position..].Fill(0x00); + return count; + } +#endif + + public int PadCount(byte[] input) + { + int count = 0, still00Mask = -1; + int i = input.Length; + while (--i >= 0) + { + int next = input[i]; + int match00Mask = ((next ^ 0x00) - 1) >> 31; + still00Mask &= match00Mask; + count -= still00Mask; + } + return count; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int PadCount(ReadOnlySpan block) + { + int count = 0, still00Mask = -1; + int i = block.Length; + while (--i >= 0) + { + int next = block[i]; + int match00Mask = ((next ^ 0x00) - 1) >> 31; + still00Mask &= match00Mask; + count -= still00Mask; + } + return count; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/ZeroBytePadding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/ZeroBytePadding.cs.meta new file mode 100644 index 000000000..5962f1e8d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/paddings/ZeroBytePadding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: efef1293185559b4e9313cbecabb9d7c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters.meta new file mode 100644 index 000000000..882a1c860 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e16c007b18245954f945dea9b529da6f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/AEADParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/AEADParameters.cs new file mode 100644 index 000000000..f401add38 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/AEADParameters.cs @@ -0,0 +1,69 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class AeadParameters + : ICipherParameters + { + private readonly byte[] associatedText; + private readonly byte[] nonce; + private readonly KeyParameter key; + private readonly int macSize; + + /** + * Base constructor. + * + * @param key key to be used by underlying cipher + * @param macSize macSize in bits + * @param nonce nonce to be used + */ + public AeadParameters(KeyParameter key, int macSize, byte[] nonce) + : this(key, macSize, nonce, null) + { + } + + /** + * Base constructor. + * + * @param key key to be used by underlying cipher + * @param macSize macSize in bits + * @param nonce nonce to be used + * @param associatedText associated text, if any + */ + public AeadParameters( + KeyParameter key, + int macSize, + byte[] nonce, + byte[] associatedText) + { + this.key = key; + this.nonce = nonce; + this.macSize = macSize; + this.associatedText = associatedText; + } + + public virtual KeyParameter Key + { + get { return key; } + } + + public virtual int MacSize + { + get { return macSize; } + } + + public virtual byte[] GetAssociatedText() + { + return associatedText; + } + + public virtual byte[] GetNonce() + { + return nonce; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/AEADParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/AEADParameters.cs.meta new file mode 100644 index 000000000..1587c9070 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/AEADParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2ab1e4d400f1fe643a1fc969f83989a6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Blake3Parameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Blake3Parameters.cs new file mode 100644 index 000000000..ebb096d2b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Blake3Parameters.cs @@ -0,0 +1,62 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + /// Blake3 Parameters. + public sealed class Blake3Parameters + : ICipherParameters + { + private const int KeyLen = 32; + + private byte[] m_theKey; + private byte[] m_theContext; + + /// Create a key parameter. + /// the context + /// the parameter + public static Blake3Parameters Context(byte[] pContext) + { + if (pContext == null) + throw new ArgumentNullException(nameof(pContext)); + + Blake3Parameters myParams = new Blake3Parameters(); + myParams.m_theContext = Arrays.Clone(pContext); + return myParams; + } + + /// Create a key parameter. + /// the key + /// the parameter + public static Blake3Parameters Key(byte[] pKey) + { + if (pKey == null) + throw new ArgumentNullException(nameof(pKey)); + if (pKey.Length != KeyLen) + throw new ArgumentException("Invalid key length", nameof(pKey)); + + Blake3Parameters myParams = new Blake3Parameters(); + myParams.m_theKey = Arrays.Clone(pKey); + return myParams; + } + + /// Obtain the key. + /// the key + public byte[] GetKey() => Arrays.Clone(m_theKey); + + /// Clear the key bytes. + public void ClearKey() + { + Arrays.Fill(m_theKey, 0); + } + + /// Obtain the salt. + /// the salt + public byte[] GetContext() => Arrays.Clone(m_theContext); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Blake3Parameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Blake3Parameters.cs.meta new file mode 100644 index 000000000..d6717052a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Blake3Parameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 60dacbbec400ae741a9e2ee85cc11106 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHKeyGenerationParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHKeyGenerationParameters.cs new file mode 100644 index 000000000..8076b692d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHKeyGenerationParameters.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class DHKeyGenerationParameters + : KeyGenerationParameters + { + private readonly DHParameters parameters; + + public DHKeyGenerationParameters( + SecureRandom random, + DHParameters parameters) + : base(random, GetStrength(parameters)) + { + this.parameters = parameters; + } + + public DHParameters Parameters + { + get { return parameters; } + } + + internal static int GetStrength( + DHParameters parameters) + { + return parameters.L != 0 ? parameters.L : parameters.P.BitLength; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHKeyGenerationParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHKeyGenerationParameters.cs.meta new file mode 100644 index 000000000..c4d214ea1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHKeyGenerationParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e3543cbf42d2468469b628ec9921121f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHKeyParameters.cs new file mode 100644 index 000000000..8dc70ac39 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHKeyParameters.cs @@ -0,0 +1,80 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class DHKeyParameters + : AsymmetricKeyParameter + { + private readonly DHParameters parameters; + private readonly DerObjectIdentifier algorithmOid; + + protected DHKeyParameters( + bool isPrivate, + DHParameters parameters) + : this(isPrivate, parameters, PkcsObjectIdentifiers.DhKeyAgreement) + { + } + + protected DHKeyParameters( + bool isPrivate, + DHParameters parameters, + DerObjectIdentifier algorithmOid) + : base(isPrivate) + { + // TODO Should we allow parameters to be null? + this.parameters = parameters; + this.algorithmOid = algorithmOid; + } + + public DHParameters Parameters + { + get { return parameters; } + } + + public DerObjectIdentifier AlgorithmOid + { + get { return algorithmOid; } + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + DHKeyParameters other = obj as DHKeyParameters; + + if (other == null) + return false; + + return Equals(other); + } + + protected bool Equals( + DHKeyParameters other) + { + return Org.BouncyCastle.Utilities.Platform.Equals(parameters, other.parameters) + && base.Equals(other); + } + + public override int GetHashCode() + { + int hc = base.GetHashCode(); + + if (parameters != null) + { + hc ^= parameters.GetHashCode(); + } + + return hc; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHKeyParameters.cs.meta new file mode 100644 index 000000000..33d586157 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b184706d42c626541b7a830e2f1eb396 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHParameters.cs new file mode 100644 index 000000000..b064e6da2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHParameters.cs @@ -0,0 +1,189 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class DHParameters + : ICipherParameters + { + private const int DefaultMinimumLength = 160; + + private readonly BigInteger p, g, q, j; + private readonly int m, l; + private readonly DHValidationParameters validation; + + private static int GetDefaultMParam( + int lParam) + { + if (lParam == 0) + return DefaultMinimumLength; + + return System.Math.Min(lParam, DefaultMinimumLength); + } + + public DHParameters( + BigInteger p, + BigInteger g) + : this(p, g, null, 0) + { + } + + public DHParameters( + BigInteger p, + BigInteger g, + BigInteger q) + : this(p, g, q, 0) + { + } + + public DHParameters( + BigInteger p, + BigInteger g, + BigInteger q, + int l) + : this(p, g, q, GetDefaultMParam(l), l, null, null) + { + } + + public DHParameters( + BigInteger p, + BigInteger g, + BigInteger q, + int m, + int l) + : this(p, g, q, m, l, null, null) + { + } + + public DHParameters( + BigInteger p, + BigInteger g, + BigInteger q, + BigInteger j, + DHValidationParameters validation) + : this(p, g, q, DefaultMinimumLength, 0, j, validation) + { + } + + public DHParameters( + BigInteger p, + BigInteger g, + BigInteger q, + int m, + int l, + BigInteger j, + DHValidationParameters validation) + { + if (p == null) + throw new ArgumentNullException("p"); + if (g == null) + throw new ArgumentNullException("g"); + if (!p.TestBit(0)) + throw new ArgumentException("field must be an odd prime", "p"); + if (g.CompareTo(BigInteger.Two) < 0 + || g.CompareTo(p.Subtract(BigInteger.Two)) > 0) + throw new ArgumentException("generator must in the range [2, p - 2]", "g"); + if (q != null && q.BitLength >= p.BitLength) + throw new ArgumentException("q too big to be a factor of (p-1)", "q"); + if (m >= p.BitLength) + throw new ArgumentException("m value must be < bitlength of p", "m"); + if (l != 0) + { + // TODO Check this against the Java version, which has 'l > p.BitLength' here + if (l >= p.BitLength) + throw new ArgumentException("when l value specified, it must be less than bitlength(p)", "l"); + if (l < m) + throw new ArgumentException("when l value specified, it may not be less than m value", "l"); + } + if (j != null && j.CompareTo(BigInteger.Two) < 0) + throw new ArgumentException("subgroup factor must be >= 2", "j"); + + // TODO If q, j both provided, validate p = jq + 1 ? + + this.p = p; + this.g = g; + this.q = q; + this.m = m; + this.l = l; + this.j = j; + this.validation = validation; + } + + public BigInteger P + { + get { return p; } + } + + public BigInteger G + { + get { return g; } + } + + public BigInteger Q + { + get { return q; } + } + + public BigInteger J + { + get { return j; } + } + + /// The minimum bitlength of the private value. + public int M + { + get { return m; } + } + + /// The bitlength of the private value. + public int L + { + get { return l; } + } + + public DHValidationParameters ValidationParameters + { + get { return validation; } + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + DHParameters other = obj as DHParameters; + + if (other == null) + return false; + + return Equals(other); + } + + protected virtual bool Equals( + DHParameters other) + { + return p.Equals(other.p) + && g.Equals(other.g) + && Org.BouncyCastle.Utilities.Platform.Equals(q, other.q); + } + + public override int GetHashCode() + { + int hc = p.GetHashCode() ^ g.GetHashCode(); + + if (q != null) + { + hc ^= q.GetHashCode(); + } + + return hc; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHParameters.cs.meta new file mode 100644 index 000000000..d4d697464 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf264f19a21f3204cb815a491eaf7891 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHPrivateKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHPrivateKeyParameters.cs new file mode 100644 index 000000000..6aeaaf225 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHPrivateKeyParameters.cs @@ -0,0 +1,64 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class DHPrivateKeyParameters + : DHKeyParameters + { + private readonly BigInteger x; + + public DHPrivateKeyParameters( + BigInteger x, + DHParameters parameters) + : base(true, parameters) + { + this.x = x; + } + + public DHPrivateKeyParameters( + BigInteger x, + DHParameters parameters, + DerObjectIdentifier algorithmOid) + : base(true, parameters, algorithmOid) + { + this.x = x; + } + + public BigInteger X + { + get { return x; } + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + DHPrivateKeyParameters other = obj as DHPrivateKeyParameters; + + if (other == null) + return false; + + return Equals(other); + } + + protected bool Equals( + DHPrivateKeyParameters other) + { + return x.Equals(other.x) && base.Equals(other); + } + + public override int GetHashCode() + { + return x.GetHashCode() ^ base.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHPrivateKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHPrivateKeyParameters.cs.meta new file mode 100644 index 000000000..ae6b43387 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHPrivateKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fdd4d67cf6500a4bb5dfe324c483f9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHPublicKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHPublicKeyParameters.cs new file mode 100644 index 000000000..1dfa0d088 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHPublicKeyParameters.cs @@ -0,0 +1,171 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class DHPublicKeyParameters + : DHKeyParameters + { + private static BigInteger Validate(BigInteger y, DHParameters dhParams) + { + if (y == null) + throw new ArgumentNullException("y"); + + BigInteger p = dhParams.P; + + // TLS check + if (y.CompareTo(BigInteger.Two) < 0 || y.CompareTo(p.Subtract(BigInteger.Two)) > 0) + throw new ArgumentException("invalid DH public key", "y"); + + BigInteger q = dhParams.Q; + + // We can't validate without Q. + if (q == null) + return y; + + if (p.TestBit(0) + && p.BitLength - 1 == q.BitLength + && p.ShiftRight(1).Equals(q)) + { + // Safe prime case + if (1 == Legendre(y, p)) + return y; + } + else + { + if (BigInteger.One.Equals(y.ModPow(q, p))) + return y; + } + + throw new ArgumentException("value does not appear to be in correct group", "y"); + } + + private readonly BigInteger y; + + public DHPublicKeyParameters( + BigInteger y, + DHParameters parameters) + : base(false, parameters) + { + this.y = Validate(y, parameters); + } + + public DHPublicKeyParameters( + BigInteger y, + DHParameters parameters, + DerObjectIdentifier algorithmOid) + : base(false, parameters, algorithmOid) + { + this.y = Validate(y, parameters); + } + + public virtual BigInteger Y + { + get { return y; } + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + DHPublicKeyParameters other = obj as DHPublicKeyParameters; + + if (other == null) + return false; + + return Equals(other); + } + + protected bool Equals( + DHPublicKeyParameters other) + { + return y.Equals(other.y) && base.Equals(other); + } + + public override int GetHashCode() + { + return y.GetHashCode() ^ base.GetHashCode(); + } + + private static int Legendre(BigInteger a, BigInteger b) + { + //int r = 0, bits = b.IntValue; + + //for (;;) + //{ + // int lowestSetBit = a.GetLowestSetBit(); + // a = a.ShiftRight(lowestSetBit); + // r ^= (bits ^ (bits >> 1)) & (lowestSetBit << 1); + + // int cmp = a.CompareTo(b); + // if (cmp == 0) + // break; + + // if (cmp < 0) + // { + // BigInteger t = a; a = b; b = t; + + // int oldBits = bits; + // bits = b.IntValue; + // r ^= oldBits & bits; + // } + + // a = a.Subtract(b); + //} + + //return BigInteger.One.Equals(b) ? (1 - (r & 2)) : 0; + + int bitLength = b.BitLength; + uint[] A = Nat.FromBigInteger(bitLength, a); + uint[] B = Nat.FromBigInteger(bitLength, b); + + int r = 0; + + int len = B.Length; + for (;;) + { + while (A[0] == 0) + { + Nat.ShiftDownWord(len, A, 0); + } + + int shift = Integers.NumberOfTrailingZeros((int)A[0]); + if (shift > 0) + { + Nat.ShiftDownBits(len, A, shift, 0); + int bits = (int)B[0]; + r ^= (bits ^ (bits >> 1)) & (shift << 1); + } + + int cmp = Nat.Compare(len, A, B); + if (cmp == 0) + break; + + if (cmp < 0) + { + r ^= (int)(A[0] & B[0]); + uint[] t = A; A = B; B = t; + } + + while (A[len - 1] == 0) + { + len = len - 1; + } + + Nat.Sub(len, A, B, A); + } + + return Nat.IsOne(len, B) ? (1 - (r & 2)) : 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHPublicKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHPublicKeyParameters.cs.meta new file mode 100644 index 000000000..d11fcd3f2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHPublicKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dcdcc5dd36103a347803778660e62bac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHValidationParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHValidationParameters.cs new file mode 100644 index 000000000..35f12007c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHValidationParameters.cs @@ -0,0 +1,63 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class DHValidationParameters + { + private readonly byte[] seed; + private readonly int counter; + + public DHValidationParameters( + byte[] seed, + int counter) + { + if (seed == null) + throw new ArgumentNullException("seed"); + + this.seed = (byte[]) seed.Clone(); + this.counter = counter; + } + + public byte[] GetSeed() + { + return (byte[]) seed.Clone(); + } + + public int Counter + { + get { return counter; } + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + DHValidationParameters other = obj as DHValidationParameters; + + if (other == null) + return false; + + return Equals(other); + } + + protected bool Equals( + DHValidationParameters other) + { + return counter == other.counter + && Arrays.AreEqual(this.seed, other.seed); + } + + public override int GetHashCode() + { + return counter.GetHashCode() ^ Arrays.GetHashCode(seed); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHValidationParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHValidationParameters.cs.meta new file mode 100644 index 000000000..3b59ad5b7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DHValidationParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bcfe09e6364f2824ea27955a589ae4b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DSAParameterGenerationParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DSAParameterGenerationParameters.cs new file mode 100644 index 000000000..97bd2db93 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DSAParameterGenerationParameters.cs @@ -0,0 +1,78 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class DsaParameterGenerationParameters + { + public const int DigitalSignatureUsage = 1; + public const int KeyEstablishmentUsage = 2; + + private readonly int l; + private readonly int n; + private readonly int certainty; + private readonly SecureRandom random; + private readonly int usageIndex; + + /** + * Construct without a usage index, this will do a random construction of G. + * + * @param L desired length of prime P in bits (the effective key size). + * @param N desired length of prime Q in bits. + * @param certainty certainty level for prime number generation. + * @param random the source of randomness to use. + */ + public DsaParameterGenerationParameters(int L, int N, int certainty, SecureRandom random) + : this(L, N, certainty, random, -1) + { + } + + /** + * Construct for a specific usage index - this has the effect of using verifiable canonical generation of G. + * + * @param L desired length of prime P in bits (the effective key size). + * @param N desired length of prime Q in bits. + * @param certainty certainty level for prime number generation. + * @param random the source of randomness to use. + * @param usageIndex a valid usage index. + */ + public DsaParameterGenerationParameters(int L, int N, int certainty, SecureRandom random, int usageIndex) + { + this.l = L; + this.n = N; + this.certainty = certainty; + this.random = random; + this.usageIndex = usageIndex; + } + + public virtual int L + { + get { return l; } + } + + public virtual int N + { + get { return n; } + } + + public virtual int UsageIndex + { + get { return usageIndex; } + } + + public virtual int Certainty + { + get { return certainty; } + } + + public virtual SecureRandom Random + { + get { return random; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DSAParameterGenerationParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DSAParameterGenerationParameters.cs.meta new file mode 100644 index 000000000..41a2240f1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DSAParameterGenerationParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5bae2087e40f1ca4497d9a252aff83c8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DesEdeParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DesEdeParameters.cs new file mode 100644 index 000000000..cc3eafc0c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DesEdeParameters.cs @@ -0,0 +1,144 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class DesEdeParameters + : DesParameters + { + /* + * DES-EDE Key length in bytes. + */ + public const int DesEdeKeyLength = 24; + + private static byte[] FixKey( + byte[] key, + int keyOff, + int keyLen) + { + byte[] tmp = new byte[24]; + + switch (keyLen) + { + case 16: + Array.Copy(key, keyOff, tmp, 0, 16); + Array.Copy(key, keyOff, tmp, 16, 8); + break; + case 24: + Array.Copy(key, keyOff, tmp, 0, 24); + break; + default: + throw new ArgumentException("Bad length for DESede key: " + keyLen, "keyLen"); + } + + if (IsWeakKey(tmp)) + throw new ArgumentException("attempt to create weak DESede key"); + + return tmp; + } + + public DesEdeParameters( + byte[] key) + : base(FixKey(key, 0, key.Length)) + { + } + + public DesEdeParameters( + byte[] key, + int keyOff, + int keyLen) + : base(FixKey(key, keyOff, keyLen)) + { + } + + /** + * return true if the passed in key is a DES-EDE weak key. + * + * @param key bytes making up the key + * @param offset offset into the byte array the key starts at + * @param length number of bytes making up the key + */ + public static bool IsWeakKey( + byte[] key, + int offset, + int length) + { + for (int i = offset; i < length; i += DesKeyLength) + { + if (DesParameters.IsWeakKey(key, i)) + { + return true; + } + } + + return false; + } + + /** + * return true if the passed in key is a DES-EDE weak key. + * + * @param key bytes making up the key + * @param offset offset into the byte array the key starts at + */ + public static new bool IsWeakKey( + byte[] key, + int offset) + { + return IsWeakKey(key, offset, key.Length - offset); + } + + public static new bool IsWeakKey( + byte[] key) + { + return IsWeakKey(key, 0, key.Length); + } + + /** + * return true if the passed in key is a real 2/3 part DES-EDE key. + * + * @param key bytes making up the key + * @param offset offset into the byte array the key starts at + */ + public static bool IsRealEdeKey(byte[] key, int offset) + { + return key.Length == 16 ? IsReal2Key(key, offset) : IsReal3Key(key, offset); + } + + /** + * return true if the passed in key is a real 2 part DES-EDE key. + * + * @param key bytes making up the key + * @param offset offset into the byte array the key starts at + */ + public static bool IsReal2Key(byte[] key, int offset) + { + bool isValid = false; + for (int i = offset; i != offset + 8; i++) + { + isValid |= (key[i] != key[i + 8]); + } + return isValid; + } + + /** + * return true if the passed in key is a real 3 part DES-EDE key. + * + * @param key bytes making up the key + * @param offset offset into the byte array the key starts at + */ + public static bool IsReal3Key(byte[] key, int offset) + { + bool diff12 = false, diff13 = false, diff23 = false; + for (int i = offset; i != offset + 8; i++) + { + diff12 |= (key[i] != key[i + 8]); + diff13 |= (key[i] != key[i + 16]); + diff23 |= (key[i + 8] != key[i + 16]); + } + return diff12 && diff13 && diff23; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DesEdeParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DesEdeParameters.cs.meta new file mode 100644 index 000000000..10eb11a94 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DesEdeParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4749e39c2006221438acbd5317e3f77c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DesParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DesParameters.cs new file mode 100644 index 000000000..07cb5ab66 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DesParameters.cs @@ -0,0 +1,153 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class DesParameters + : KeyParameter + { + public DesParameters( + byte[] key) + : base(key) + { + if (IsWeakKey(key)) + throw new ArgumentException("attempt to create weak DES key"); + } + + public DesParameters( + byte[] key, + int keyOff, + int keyLen) + : base(key, keyOff, keyLen) + { + if (IsWeakKey(key, keyOff)) + throw new ArgumentException("attempt to create weak DES key"); + } + + /* + * DES Key Length in bytes. + */ + public const int DesKeyLength = 8; + + /* + * Table of weak and semi-weak keys taken from Schneier pp281 + */ + private const int N_DES_WEAK_KEYS = 16; + + private static readonly byte[] DES_weak_keys = + { + /* weak keys */ + (byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01, (byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01, + (byte)0x1f,(byte)0x1f,(byte)0x1f,(byte)0x1f, (byte)0x0e,(byte)0x0e,(byte)0x0e,(byte)0x0e, + (byte)0xe0,(byte)0xe0,(byte)0xe0,(byte)0xe0, (byte)0xf1,(byte)0xf1,(byte)0xf1,(byte)0xf1, + (byte)0xfe,(byte)0xfe,(byte)0xfe,(byte)0xfe, (byte)0xfe,(byte)0xfe,(byte)0xfe,(byte)0xfe, + + /* semi-weak keys */ + (byte)0x01,(byte)0xfe,(byte)0x01,(byte)0xfe, (byte)0x01,(byte)0xfe,(byte)0x01,(byte)0xfe, + (byte)0x1f,(byte)0xe0,(byte)0x1f,(byte)0xe0, (byte)0x0e,(byte)0xf1,(byte)0x0e,(byte)0xf1, + (byte)0x01,(byte)0xe0,(byte)0x01,(byte)0xe0, (byte)0x01,(byte)0xf1,(byte)0x01,(byte)0xf1, + (byte)0x1f,(byte)0xfe,(byte)0x1f,(byte)0xfe, (byte)0x0e,(byte)0xfe,(byte)0x0e,(byte)0xfe, + (byte)0x01,(byte)0x1f,(byte)0x01,(byte)0x1f, (byte)0x01,(byte)0x0e,(byte)0x01,(byte)0x0e, + (byte)0xe0,(byte)0xfe,(byte)0xe0,(byte)0xfe, (byte)0xf1,(byte)0xfe,(byte)0xf1,(byte)0xfe, + (byte)0xfe,(byte)0x01,(byte)0xfe,(byte)0x01, (byte)0xfe,(byte)0x01,(byte)0xfe,(byte)0x01, + (byte)0xe0,(byte)0x1f,(byte)0xe0,(byte)0x1f, (byte)0xf1,(byte)0x0e,(byte)0xf1,(byte)0x0e, + (byte)0xe0,(byte)0x01,(byte)0xe0,(byte)0x01, (byte)0xf1,(byte)0x01,(byte)0xf1,(byte)0x01, + (byte)0xfe,(byte)0x1f,(byte)0xfe,(byte)0x1f, (byte)0xfe,(byte)0x0e,(byte)0xfe,(byte)0x0e, + (byte)0x1f,(byte)0x01,(byte)0x1f,(byte)0x01, (byte)0x0e,(byte)0x01,(byte)0x0e,(byte)0x01, + (byte)0xfe,(byte)0xe0,(byte)0xfe,(byte)0xe0, (byte)0xfe,(byte)0xf1,(byte)0xfe,(byte)0xf1 + }; + + /** + * DES has 16 weak keys. This method will check + * if the given DES key material is weak or semi-weak. + * Key material that is too short is regarded as weak. + *

+ * See "Applied + * Cryptography" by Bruce Schneier for more information. + *

+ * @return true if the given DES key material is weak or semi-weak, + * false otherwise. + */ + public static bool IsWeakKey( + byte[] key, + int offset) + { + if (key.Length - offset < DesKeyLength) + throw new ArgumentException("key material too short."); + + //nextkey: + for (int i = 0; i < N_DES_WEAK_KEYS; i++) + { + bool unmatch = false; + for (int j = 0; j < DesKeyLength; j++) + { + if (key[j + offset] != DES_weak_keys[i * DesKeyLength + j]) + { + //continue nextkey; + unmatch = true; + break; + } + } + + if (!unmatch) + { + return true; + } + } + + return false; + } + + public static bool IsWeakKey( + byte[] key) + { + return IsWeakKey(key, 0); + } + + public static byte SetOddParity(byte b) + { + uint parity = b ^ 1U; + parity ^= (parity >> 4); + parity ^= (parity >> 2); + parity ^= (parity >> 1); + parity &= 1U; + + return (byte)(b ^ parity); + } + + /** + * DES Keys use the LSB as the odd parity bit. This can + * be used to check for corrupt keys. + * + * @param bytes the byte array to set the parity on. + */ + public static void SetOddParity(byte[] bytes) + { + for (int i = 0; i < bytes.Length; i++) + { + bytes[i] = SetOddParity(bytes[i]); + } + } + + public static void SetOddParity(byte[] bytes, int off, int len) + { + for (int i = 0; i < len; i++) + { + bytes[off + i] = SetOddParity(bytes[off + i]); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void SetOddParity(Span bytes) + { + for (int i = 0; i < bytes.Length; i++) + { + bytes[i] = SetOddParity(bytes[i]); + } + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DesParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DesParameters.cs.meta new file mode 100644 index 000000000..08c231d17 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DesParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b00a12c88d7bcc248b4ca2f26e3aa06d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaKeyGenerationParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaKeyGenerationParameters.cs new file mode 100644 index 000000000..d94c2edb9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaKeyGenerationParameters.cs @@ -0,0 +1,30 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class DsaKeyGenerationParameters + : KeyGenerationParameters + { + private readonly DsaParameters parameters; + + public DsaKeyGenerationParameters( + SecureRandom random, + DsaParameters parameters) + : base(random, parameters.P.BitLength - 1) + { + this.parameters = parameters; + } + + public DsaParameters Parameters + { + get { return parameters; } + } + } + +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaKeyGenerationParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaKeyGenerationParameters.cs.meta new file mode 100644 index 000000000..52c08ac38 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaKeyGenerationParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 276581811002f3e4c9cb17ec0a51d092 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaKeyParameters.cs new file mode 100644 index 000000000..a4c723644 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaKeyParameters.cs @@ -0,0 +1,63 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public abstract class DsaKeyParameters + : AsymmetricKeyParameter + { + private readonly DsaParameters parameters; + + protected DsaKeyParameters( + bool isPrivate, + DsaParameters parameters) + : base(isPrivate) + { + // Note: parameters may be null + this.parameters = parameters; + } + + public DsaParameters Parameters + { + get { return parameters; } + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + DsaKeyParameters other = obj as DsaKeyParameters; + + if (other == null) + return false; + + return Equals(other); + } + + protected bool Equals( + DsaKeyParameters other) + { + return Org.BouncyCastle.Utilities.Platform.Equals(parameters, other.parameters) + && base.Equals(other); + } + + public override int GetHashCode() + { + int hc = base.GetHashCode(); + + if (parameters != null) + { + hc ^= parameters.GetHashCode(); + } + + return hc; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaKeyParameters.cs.meta new file mode 100644 index 000000000..89884033f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f1017d8a70458545aa4e27a696f2df5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaParameters.cs new file mode 100644 index 000000000..6006e6912 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaParameters.cs @@ -0,0 +1,89 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class DsaParameters + : ICipherParameters + { + private readonly BigInteger p, q , g; + private readonly DsaValidationParameters validation; + + public DsaParameters( + BigInteger p, + BigInteger q, + BigInteger g) + : this(p, q, g, null) + { + } + + public DsaParameters( + BigInteger p, + BigInteger q, + BigInteger g, + DsaValidationParameters parameters) + { + if (p == null) + throw new ArgumentNullException("p"); + if (q == null) + throw new ArgumentNullException("q"); + if (g == null) + throw new ArgumentNullException("g"); + + this.p = p; + this.q = q; + this.g = g; + this.validation = parameters; + } + + public BigInteger P + { + get { return p; } + } + + public BigInteger Q + { + get { return q; } + } + + public BigInteger G + { + get { return g; } + } + + public DsaValidationParameters ValidationParameters + { + get { return validation; } + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + DsaParameters other = obj as DsaParameters; + + if (other == null) + return false; + + return Equals(other); + } + + protected bool Equals( + DsaParameters other) + { + return p.Equals(other.p) && q.Equals(other.q) && g.Equals(other.g); + } + + public override int GetHashCode() + { + return p.GetHashCode() ^ q.GetHashCode() ^ g.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaParameters.cs.meta new file mode 100644 index 000000000..da0fc5dd6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ee680943739e3ab4abee72f41f4cb6e3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaPrivateKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaPrivateKeyParameters.cs new file mode 100644 index 000000000..b7e91eeba --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaPrivateKeyParameters.cs @@ -0,0 +1,57 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class DsaPrivateKeyParameters + : DsaKeyParameters + { + private readonly BigInteger x; + + public DsaPrivateKeyParameters( + BigInteger x, + DsaParameters parameters) + : base(true, parameters) + { + if (x == null) + throw new ArgumentNullException("x"); + + this.x = x; + } + + public BigInteger X + { + get { return x; } + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + DsaPrivateKeyParameters other = obj as DsaPrivateKeyParameters; + + if (other == null) + return false; + + return Equals(other); + } + + protected bool Equals( + DsaPrivateKeyParameters other) + { + return x.Equals(other.x) && base.Equals(other); + } + + public override int GetHashCode() + { + return x.GetHashCode() ^ base.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaPrivateKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaPrivateKeyParameters.cs.meta new file mode 100644 index 000000000..7a083fa0e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaPrivateKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d4f0cb0e77323ee4b94fdb6249c169d1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaPublicKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaPublicKeyParameters.cs new file mode 100644 index 000000000..308ab13cf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaPublicKeyParameters.cs @@ -0,0 +1,72 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class DsaPublicKeyParameters + : DsaKeyParameters + { + private static BigInteger Validate(BigInteger y, DsaParameters parameters) + { + // we can't validate without params, fortunately we can't use the key either... + if (parameters != null) + { + if (y.CompareTo(BigInteger.Two) < 0 + || y.CompareTo(parameters.P.Subtract(BigInteger.Two)) > 0 + || !y.ModPow(parameters.Q, parameters.P).Equals(BigInteger.One)) + { + throw new ArgumentException("y value does not appear to be in correct group"); + } + } + + return y; + } + + private readonly BigInteger y; + + public DsaPublicKeyParameters( + BigInteger y, + DsaParameters parameters) + : base(false, parameters) + { + if (y == null) + throw new ArgumentNullException("y"); + + this.y = Validate(y, parameters); + } + + public BigInteger Y + { + get { return y; } + } + + public override bool Equals(object obj) + { + if (obj == this) + return true; + + DsaPublicKeyParameters other = obj as DsaPublicKeyParameters; + + if (other == null) + return false; + + return Equals(other); + } + + protected bool Equals( + DsaPublicKeyParameters other) + { + return y.Equals(other.y) && base.Equals(other); + } + + public override int GetHashCode() + { + return y.GetHashCode() ^ base.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaPublicKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaPublicKeyParameters.cs.meta new file mode 100644 index 000000000..8ff9118e4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaPublicKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1afe3462c21af6a4ca12ef6e3169445f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaValidationParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaValidationParameters.cs new file mode 100644 index 000000000..a4bc0e307 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaValidationParameters.cs @@ -0,0 +1,76 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class DsaValidationParameters + { + private readonly byte[] seed; + private readonly int counter; + private readonly int usageIndex; + + public DsaValidationParameters(byte[] seed, int counter) + : this(seed, counter, -1) + { + } + + public DsaValidationParameters( + byte[] seed, + int counter, + int usageIndex) + { + if (seed == null) + throw new ArgumentNullException("seed"); + + this.seed = (byte[]) seed.Clone(); + this.counter = counter; + this.usageIndex = usageIndex; + } + + public virtual byte[] GetSeed() + { + return (byte[]) seed.Clone(); + } + + public virtual int Counter + { + get { return counter; } + } + + public virtual int UsageIndex + { + get { return usageIndex; } + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + DsaValidationParameters other = obj as DsaValidationParameters; + + if (other == null) + return false; + + return Equals(other); + } + + protected virtual bool Equals( + DsaValidationParameters other) + { + return counter == other.counter + && Arrays.AreEqual(seed, other.seed); + } + + public override int GetHashCode() + { + return counter.GetHashCode() ^ Arrays.GetHashCode(seed); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaValidationParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaValidationParameters.cs.meta new file mode 100644 index 000000000..d7d330a6b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/DsaValidationParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 66dbc197d770cc74da7061f3a853ea1d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECDomainParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECDomainParameters.cs new file mode 100644 index 000000000..a09004f55 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECDomainParameters.cs @@ -0,0 +1,175 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class ECDomainParameters + { + private readonly ECCurve curve; + private readonly byte[] seed; + private readonly ECPoint g; + private readonly BigInteger n; + private readonly BigInteger h; + + private BigInteger hInv; + + public ECDomainParameters(X9ECParameters x9) + : this(x9.Curve, x9.G, x9.N, x9.H, x9.GetSeed()) + { + } + + public ECDomainParameters( + ECCurve curve, + ECPoint g, + BigInteger n) + : this(curve, g, n, BigInteger.One, null) + { + } + + public ECDomainParameters( + ECCurve curve, + ECPoint g, + BigInteger n, + BigInteger h) + : this(curve, g, n, h, null) + { + } + + public ECDomainParameters( + ECCurve curve, + ECPoint g, + BigInteger n, + BigInteger h, + byte[] seed) + { + if (curve == null) + throw new ArgumentNullException("curve"); + if (g == null) + throw new ArgumentNullException("g"); + if (n == null) + throw new ArgumentNullException("n"); + // we can't check for h == null here as h is optional in X9.62 as it is not required for ECDSA + + this.curve = curve; + this.g = ValidatePublicPoint(curve, g); + this.n = n; + this.h = h; + this.seed = Arrays.Clone(seed); + } + + public ECCurve Curve + { + get { return curve; } + } + + public ECPoint G + { + get { return g; } + } + + public BigInteger N + { + get { return n; } + } + + public BigInteger H + { + get { return h; } + } + + public BigInteger HInv + { + get + { + lock (this) + { + if (hInv == null) + { + hInv = BigIntegers.ModOddInverseVar(n, h); + } + return hInv; + } + } + } + + public byte[] GetSeed() + { + return Arrays.Clone(seed); + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + ECDomainParameters other = obj as ECDomainParameters; + + if (other == null) + return false; + + return Equals(other); + } + + protected virtual bool Equals( + ECDomainParameters other) + { + return curve.Equals(other.curve) + && g.Equals(other.g) + && n.Equals(other.n); + } + + public override int GetHashCode() + { + //return Arrays.GetHashCode(new object[]{ curve, g, n }); + int hc = 4; + hc *= 257; + hc ^= curve.GetHashCode(); + hc *= 257; + hc ^= g.GetHashCode(); + hc *= 257; + hc ^= n.GetHashCode(); + return hc; + } + + public BigInteger ValidatePrivateScalar(BigInteger d) + { + if (null == d) + throw new ArgumentNullException("d", "Scalar cannot be null"); + + if (d.CompareTo(BigInteger.One) < 0 || (d.CompareTo(N) >= 0)) + throw new ArgumentException("Scalar is not in the interval [1, n - 1]", "d"); + + return d; + } + + public ECPoint ValidatePublicPoint(ECPoint q) + { + return ValidatePublicPoint(Curve, q); + } + + internal static ECPoint ValidatePublicPoint(ECCurve c, ECPoint q) + { + if (null == q) + throw new ArgumentNullException("q", "Point cannot be null"); + + q = ECAlgorithms.ImportPoint(c, q).Normalize(); + + if (q.IsInfinity) + throw new ArgumentException("Point at infinity", "q"); + + if (!q.IsValid()) + throw new ArgumentException("Point not on curve", "q"); + + return q; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECDomainParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECDomainParameters.cs.meta new file mode 100644 index 000000000..9ae6fef6d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECDomainParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3beb4f5cf7c45294aae379ff966dee7f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECGOST3410Parameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECGOST3410Parameters.cs new file mode 100644 index 000000000..87e2e70f1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECGOST3410Parameters.cs @@ -0,0 +1,57 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class ECGost3410Parameters + : ECNamedDomainParameters + { + private readonly DerObjectIdentifier _publicKeyParamSet; + private readonly DerObjectIdentifier _digestParamSet; + private readonly DerObjectIdentifier _encryptionParamSet; + + public DerObjectIdentifier PublicKeyParamSet + { + get { return _publicKeyParamSet; } + } + + public DerObjectIdentifier DigestParamSet + { + get { return _digestParamSet; } + } + + public DerObjectIdentifier EncryptionParamSet + { + get { return _encryptionParamSet; } + } + + public ECGost3410Parameters( + ECNamedDomainParameters dp, + DerObjectIdentifier publicKeyParamSet, + DerObjectIdentifier digestParamSet, + DerObjectIdentifier encryptionParamSet) + : base(dp.Name, dp.Curve, dp.G, dp.N, dp.H, dp.GetSeed()) + { + this._publicKeyParamSet = publicKeyParamSet; + this._digestParamSet = digestParamSet; + this._encryptionParamSet = encryptionParamSet; + } + + public ECGost3410Parameters(ECDomainParameters dp, DerObjectIdentifier publicKeyParamSet, + DerObjectIdentifier digestParamSet, + DerObjectIdentifier encryptionParamSet) + : base(publicKeyParamSet, dp.Curve, dp.G, dp.N, dp.H, dp.GetSeed()) + { + this._publicKeyParamSet = publicKeyParamSet; + this._digestParamSet = digestParamSet; + this._encryptionParamSet = encryptionParamSet; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECGOST3410Parameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECGOST3410Parameters.cs.meta new file mode 100644 index 000000000..c1c597a36 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECGOST3410Parameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 70d4ce6b6c1aec94685c4491fe7a5265 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECKeyGenerationParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECKeyGenerationParameters.cs new file mode 100644 index 000000000..7c95b7d02 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECKeyGenerationParameters.cs @@ -0,0 +1,45 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class ECKeyGenerationParameters + : KeyGenerationParameters + { + private readonly ECDomainParameters domainParams; + private readonly DerObjectIdentifier publicKeyParamSet; + + public ECKeyGenerationParameters( + ECDomainParameters domainParameters, + SecureRandom random) + : base(random, domainParameters.N.BitLength) + { + this.domainParams = domainParameters; + } + + public ECKeyGenerationParameters( + DerObjectIdentifier publicKeyParamSet, + SecureRandom random) + : this(ECKeyParameters.LookupParameters(publicKeyParamSet), random) + { + this.publicKeyParamSet = publicKeyParamSet; + } + + public ECDomainParameters DomainParameters + { + get { return domainParams; } + } + + public DerObjectIdentifier PublicKeyParamSet + { + get { return publicKeyParamSet; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECKeyGenerationParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECKeyGenerationParameters.cs.meta new file mode 100644 index 000000000..759341001 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECKeyGenerationParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ab3ecd7ab43e33a458ea35a383957a07 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECKeyParameters.cs new file mode 100644 index 000000000..9c8112c5f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECKeyParameters.cs @@ -0,0 +1,138 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public abstract class ECKeyParameters + : AsymmetricKeyParameter + { + // NB: Use a Dictionary so we can lookup the upper case version + private static readonly Dictionary Algorithms = + new Dictionary(StringComparer.OrdinalIgnoreCase) + { + { "EC", "EC" }, + { "ECDSA", "ECDSA" }, + { "ECDH", "ECDH" }, + { "ECDHC", "ECDHC" }, + { "ECGOST3410", "ECGOST3410" }, + { "ECMQV", "ECMQV" }, + }; + + private readonly string algorithm; + private readonly ECDomainParameters parameters; + private readonly DerObjectIdentifier publicKeyParamSet; + + protected ECKeyParameters( + string algorithm, + bool isPrivate, + ECDomainParameters parameters) + : base(isPrivate) + { + if (algorithm == null) + throw new ArgumentNullException("algorithm"); + if (parameters == null) + throw new ArgumentNullException("parameters"); + + this.algorithm = VerifyAlgorithmName(algorithm); + this.parameters = parameters; + } + + protected ECKeyParameters( + string algorithm, + bool isPrivate, + DerObjectIdentifier publicKeyParamSet) + : base(isPrivate) + { + if (algorithm == null) + throw new ArgumentNullException("algorithm"); + if (publicKeyParamSet == null) + throw new ArgumentNullException("publicKeyParamSet"); + + this.algorithm = VerifyAlgorithmName(algorithm); + this.parameters = LookupParameters(publicKeyParamSet); + this.publicKeyParamSet = publicKeyParamSet; + } + + public string AlgorithmName + { + get { return algorithm; } + } + + public ECDomainParameters Parameters + { + get { return parameters; } + } + + public DerObjectIdentifier PublicKeyParamSet + { + get { return publicKeyParamSet; } + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + ECDomainParameters other = obj as ECDomainParameters; + + if (other == null) + return false; + + return Equals(other); + } + + protected bool Equals( + ECKeyParameters other) + { + return parameters.Equals(other.parameters) && base.Equals(other); + } + + public override int GetHashCode() + { + return parameters.GetHashCode() ^ base.GetHashCode(); + } + + internal ECKeyGenerationParameters CreateKeyGenerationParameters( + SecureRandom random) + { + if (publicKeyParamSet != null) + { + return new ECKeyGenerationParameters(publicKeyParamSet, random); + } + + return new ECKeyGenerationParameters(parameters, random); + } + + internal static string VerifyAlgorithmName(string algorithm) + { + if (!Algorithms.TryGetValue(algorithm, out var upper)) + throw new ArgumentException("unrecognised algorithm: " + algorithm, nameof(algorithm)); + + return upper; + } + + internal static ECDomainParameters LookupParameters( + DerObjectIdentifier publicKeyParamSet) + { + if (publicKeyParamSet == null) + throw new ArgumentNullException("publicKeyParamSet"); + + X9ECParameters x9 = ECKeyPairGenerator.FindECCurveByOid(publicKeyParamSet); + + if (x9 == null) + throw new ArgumentException("OID is not a valid public key parameter set", "publicKeyParamSet"); + + return new ECDomainParameters(x9); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECKeyParameters.cs.meta new file mode 100644 index 000000000..3bb8bb839 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7082d8fbbed75824585e4b8956c19af4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECNamedDomainParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECNamedDomainParameters.cs new file mode 100644 index 000000000..236f660e7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECNamedDomainParameters.cs @@ -0,0 +1,53 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class ECNamedDomainParameters + : ECDomainParameters + { + private readonly DerObjectIdentifier name; + + public DerObjectIdentifier Name + { + get { return name; } + } + + public ECNamedDomainParameters(DerObjectIdentifier name, ECDomainParameters dp) + : this(name, dp.Curve, dp.G, dp.N, dp.H, dp.GetSeed()) + { + } + + public ECNamedDomainParameters(DerObjectIdentifier name, X9ECParameters x9) + : base(x9) + { + this.name = name; + } + + public ECNamedDomainParameters(DerObjectIdentifier name, ECCurve curve, ECPoint g, BigInteger n) + : base(curve, g, n) + { + this.name = name; + } + + public ECNamedDomainParameters(DerObjectIdentifier name, ECCurve curve, ECPoint g, BigInteger n, BigInteger h) + : base(curve, g, n, h) + { + this.name = name; + } + + public ECNamedDomainParameters(DerObjectIdentifier name, ECCurve curve, ECPoint g, BigInteger n, BigInteger h, byte[] seed) + : base(curve, g, n, h, seed) + { + this.name = name; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECNamedDomainParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECNamedDomainParameters.cs.meta new file mode 100644 index 000000000..8c03c3e0e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECNamedDomainParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9cadf9d9862b96f49807e878f6b9bbf2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECPrivateKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECPrivateKeyParameters.cs new file mode 100644 index 000000000..d4788420f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECPrivateKeyParameters.cs @@ -0,0 +1,73 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Globalization; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class ECPrivateKeyParameters + : ECKeyParameters + { + private readonly BigInteger d; + + public ECPrivateKeyParameters( + BigInteger d, + ECDomainParameters parameters) + : this("EC", d, parameters) + { + } + + public ECPrivateKeyParameters( + string algorithm, + BigInteger d, + ECDomainParameters parameters) + : base(algorithm, true, parameters) + { + this.d = Parameters.ValidatePrivateScalar(d); + } + + public ECPrivateKeyParameters( + string algorithm, + BigInteger d, + DerObjectIdentifier publicKeyParamSet) + : base(algorithm, true, publicKeyParamSet) + { + this.d = Parameters.ValidatePrivateScalar(d); + } + + public BigInteger D + { + get { return d; } + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + ECPrivateKeyParameters other = obj as ECPrivateKeyParameters; + + if (other == null) + return false; + + return Equals(other); + } + + protected bool Equals( + ECPrivateKeyParameters other) + { + return d.Equals(other.d) && base.Equals(other); + } + + public override int GetHashCode() + { + return d.GetHashCode() ^ base.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECPrivateKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECPrivateKeyParameters.cs.meta new file mode 100644 index 000000000..876b4c07a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECPrivateKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f9d84f447cca6e4080ff2469a3642d2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECPublicKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECPublicKeyParameters.cs new file mode 100644 index 000000000..cb2f77406 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECPublicKeyParameters.cs @@ -0,0 +1,72 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Globalization; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class ECPublicKeyParameters + : ECKeyParameters + { + private readonly ECPoint q; + + public ECPublicKeyParameters( + ECPoint q, + ECDomainParameters parameters) + : this("EC", q, parameters) + { + } + + public ECPublicKeyParameters( + string algorithm, + ECPoint q, + ECDomainParameters parameters) + : base(algorithm, false, parameters) + { + this.q = ECDomainParameters.ValidatePublicPoint(Parameters.Curve, q); + } + + public ECPublicKeyParameters( + string algorithm, + ECPoint q, + DerObjectIdentifier publicKeyParamSet) + : base(algorithm, false, publicKeyParamSet) + { + this.q = ECDomainParameters.ValidatePublicPoint(Parameters.Curve, q); + } + + public ECPoint Q + { + get { return q; } + } + + public override bool Equals(object obj) + { + if (obj == this) + return true; + + ECPublicKeyParameters other = obj as ECPublicKeyParameters; + + if (other == null) + return false; + + return Equals(other); + } + + protected bool Equals( + ECPublicKeyParameters other) + { + return q.Equals(other.q) && base.Equals(other); + } + + public override int GetHashCode() + { + return q.GetHashCode() ^ base.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECPublicKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECPublicKeyParameters.cs.meta new file mode 100644 index 000000000..d73a5c613 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ECPublicKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 03c066cb5e3c19d4eb02383352313fd5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed25519KeyGenerationParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed25519KeyGenerationParameters.cs new file mode 100644 index 000000000..a1a056e54 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed25519KeyGenerationParameters.cs @@ -0,0 +1,19 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class Ed25519KeyGenerationParameters + : KeyGenerationParameters + { + public Ed25519KeyGenerationParameters(SecureRandom random) + : base(random, 256) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed25519KeyGenerationParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed25519KeyGenerationParameters.cs.meta new file mode 100644 index 000000000..33bb6d179 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed25519KeyGenerationParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9b1b969ec9bb03545b94b55e5a159259 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed25519PrivateKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed25519PrivateKeyParameters.cs new file mode 100644 index 000000000..3e284bb35 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed25519PrivateKeyParameters.cs @@ -0,0 +1,144 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc8032; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public sealed class Ed25519PrivateKeyParameters + : AsymmetricKeyParameter + { + public static readonly int KeySize = Ed25519.SecretKeySize; + public static readonly int SignatureSize = Ed25519.SignatureSize; + + private readonly byte[] data = new byte[KeySize]; + + private Ed25519PublicKeyParameters cachedPublicKey; + + public Ed25519PrivateKeyParameters(SecureRandom random) + : base(true) + { + Ed25519.GeneratePrivateKey(random, data); + } + + public Ed25519PrivateKeyParameters(byte[] buf) + : this(Validate(buf), 0) + { + } + + public Ed25519PrivateKeyParameters(byte[] buf, int off) + : base(true) + { + Array.Copy(buf, off, data, 0, KeySize); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public Ed25519PrivateKeyParameters(ReadOnlySpan buf) + : base(true) + { + if (buf.Length != KeySize) + throw new ArgumentException("must have length " + KeySize, nameof(buf)); + + buf.CopyTo(data); + } +#endif + + public Ed25519PrivateKeyParameters(Stream input) + : base(true) + { + if (KeySize != Streams.ReadFully(input, data)) + throw new EndOfStreamException("EOF encountered in middle of Ed25519 private key"); + } + + public void Encode(byte[] buf, int off) + { + Array.Copy(data, 0, buf, off, KeySize); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Encode(Span buf) + { + data.CopyTo(buf); + } +#endif + + public byte[] GetEncoded() + { + return Arrays.Clone(data); + } + + public Ed25519PublicKeyParameters GeneratePublicKey() + { + lock (data) + { + if (null == cachedPublicKey) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span publicKey = stackalloc byte[Ed25519.PublicKeySize]; + Ed25519.GeneratePublicKey(data, publicKey); + cachedPublicKey = new Ed25519PublicKeyParameters(publicKey); +#else + byte[] publicKey = new byte[Ed25519.PublicKeySize]; + Ed25519.GeneratePublicKey(data, 0, publicKey, 0); + cachedPublicKey = new Ed25519PublicKeyParameters(publicKey, 0); +#endif + } + + return cachedPublicKey; + } + } + + public void Sign(Ed25519.Algorithm algorithm, byte[] ctx, byte[] msg, int msgOff, int msgLen, + byte[] sig, int sigOff) + { + Ed25519PublicKeyParameters publicKey = GeneratePublicKey(); + + byte[] pk = new byte[Ed25519.PublicKeySize]; + publicKey.Encode(pk, 0); + + switch (algorithm) + { + case Ed25519.Algorithm.Ed25519: + { + if (null != ctx) + throw new ArgumentException("ctx"); + + Ed25519.Sign(data, 0, pk, 0, msg, msgOff, msgLen, sig, sigOff); + break; + } + case Ed25519.Algorithm.Ed25519ctx: + { + Ed25519.Sign(data, 0, pk, 0, ctx, msg, msgOff, msgLen, sig, sigOff); + break; + } + case Ed25519.Algorithm.Ed25519ph: + { + if (Ed25519.PrehashSize != msgLen) + throw new ArgumentException("msgLen"); + + Ed25519.SignPrehash(data, 0, pk, 0, ctx, msg, msgOff, sig, sigOff); + break; + } + default: + { + throw new ArgumentException("algorithm"); + } + } + } + + private static byte[] Validate(byte[] buf) + { + if (buf.Length != KeySize) + throw new ArgumentException("must have length " + KeySize, nameof(buf)); + + return buf; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed25519PrivateKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed25519PrivateKeyParameters.cs.meta new file mode 100644 index 000000000..ff197afa4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed25519PrivateKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 60049b51ce5e74c47b9f0a552eab4608 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed25519PublicKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed25519PublicKeyParameters.cs new file mode 100644 index 000000000..45dc1f85b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed25519PublicKeyParameters.cs @@ -0,0 +1,75 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc8032; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public sealed class Ed25519PublicKeyParameters + : AsymmetricKeyParameter + { + public static readonly int KeySize = Ed25519.PublicKeySize; + + private readonly byte[] data = new byte[KeySize]; + + public Ed25519PublicKeyParameters(byte[] buf) + : this(Validate(buf), 0) + { + } + + public Ed25519PublicKeyParameters(byte[] buf, int off) + : base(false) + { + Array.Copy(buf, off, data, 0, KeySize); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public Ed25519PublicKeyParameters(ReadOnlySpan buf) + : base(false) + { + if (buf.Length != KeySize) + throw new ArgumentException("must have length " + KeySize, nameof(buf)); + + buf.CopyTo(data); + } +#endif + + public Ed25519PublicKeyParameters(Stream input) + : base(false) + { + if (KeySize != Streams.ReadFully(input, data)) + throw new EndOfStreamException("EOF encountered in middle of Ed25519 public key"); + } + + public void Encode(byte[] buf, int off) + { + Array.Copy(data, 0, buf, off, KeySize); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Encode(Span buf) + { + data.CopyTo(buf); + } +#endif + + public byte[] GetEncoded() + { + return Arrays.Clone(data); + } + + private static byte[] Validate(byte[] buf) + { + if (buf.Length != KeySize) + throw new ArgumentException("must have length " + KeySize, nameof(buf)); + + return buf; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed25519PublicKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed25519PublicKeyParameters.cs.meta new file mode 100644 index 000000000..007d4f967 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed25519PublicKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d246edc11614ac4eac1f7f7f2fec905 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed448KeyGenerationParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed448KeyGenerationParameters.cs new file mode 100644 index 000000000..e07c07924 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed448KeyGenerationParameters.cs @@ -0,0 +1,19 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class Ed448KeyGenerationParameters + : KeyGenerationParameters + { + public Ed448KeyGenerationParameters(SecureRandom random) + : base(random, 448) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed448KeyGenerationParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed448KeyGenerationParameters.cs.meta new file mode 100644 index 000000000..6d85173e8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed448KeyGenerationParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e70fb91643687874f855792db265a440 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed448PrivateKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed448PrivateKeyParameters.cs new file mode 100644 index 000000000..a9376cb48 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed448PrivateKeyParameters.cs @@ -0,0 +1,136 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc8032; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public sealed class Ed448PrivateKeyParameters + : AsymmetricKeyParameter + { + public static readonly int KeySize = Ed448.SecretKeySize; + public static readonly int SignatureSize = Ed448.SignatureSize; + + private readonly byte[] data = new byte[KeySize]; + + private Ed448PublicKeyParameters cachedPublicKey; + + public Ed448PrivateKeyParameters(SecureRandom random) + : base(true) + { + Ed448.GeneratePrivateKey(random, data); + } + + public Ed448PrivateKeyParameters(byte[] buf) + : this(Validate(buf), 0) + { + } + + public Ed448PrivateKeyParameters(byte[] buf, int off) + : base(true) + { + Array.Copy(buf, off, data, 0, KeySize); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public Ed448PrivateKeyParameters(ReadOnlySpan buf) + : base(true) + { + if (buf.Length != KeySize) + throw new ArgumentException("must have length " + KeySize, nameof(buf)); + + buf.CopyTo(data); + } +#endif + + public Ed448PrivateKeyParameters(Stream input) + : base(true) + { + if (KeySize != Streams.ReadFully(input, data)) + throw new EndOfStreamException("EOF encountered in middle of Ed448 private key"); + } + + public void Encode(byte[] buf, int off) + { + Array.Copy(data, 0, buf, off, KeySize); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Encode(Span buf) + { + data.CopyTo(buf); + } +#endif + + public byte[] GetEncoded() + { + return Arrays.Clone(data); + } + + public Ed448PublicKeyParameters GeneratePublicKey() + { + lock (data) + { + if (null == cachedPublicKey) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span publicKey = stackalloc byte[Ed448.PublicKeySize]; + Ed448.GeneratePublicKey(data, publicKey); + cachedPublicKey = new Ed448PublicKeyParameters(publicKey); +#else + byte[] publicKey = new byte[Ed448.PublicKeySize]; + Ed448.GeneratePublicKey(data, 0, publicKey, 0); + cachedPublicKey = new Ed448PublicKeyParameters(publicKey, 0); +#endif + } + + return cachedPublicKey; + } + } + + public void Sign(Ed448.Algorithm algorithm, byte[] ctx, byte[] msg, int msgOff, int msgLen, + byte[] sig, int sigOff) + { + Ed448PublicKeyParameters publicKey = GeneratePublicKey(); + + byte[] pk = new byte[Ed448.PublicKeySize]; + publicKey.Encode(pk, 0); + + switch (algorithm) + { + case Ed448.Algorithm.Ed448: + { + Ed448.Sign(data, 0, pk, 0, ctx, msg, msgOff, msgLen, sig, sigOff); + break; + } + case Ed448.Algorithm.Ed448ph: + { + if (Ed448.PrehashSize != msgLen) + throw new ArgumentException("msgLen"); + + Ed448.SignPrehash(data, 0, pk, 0, ctx, msg, msgOff, sig, sigOff); + break; + } + default: + { + throw new ArgumentException("algorithm"); + } + } + } + + private static byte[] Validate(byte[] buf) + { + if (buf.Length != KeySize) + throw new ArgumentException("must have length " + KeySize, nameof(buf)); + + return buf; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed448PrivateKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed448PrivateKeyParameters.cs.meta new file mode 100644 index 000000000..802b44f67 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed448PrivateKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b4c976aa9828651448913498d4f1418c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed448PublicKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed448PublicKeyParameters.cs new file mode 100644 index 000000000..0acd59eec --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed448PublicKeyParameters.cs @@ -0,0 +1,75 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc8032; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public sealed class Ed448PublicKeyParameters + : AsymmetricKeyParameter + { + public static readonly int KeySize = Ed448.PublicKeySize; + + private readonly byte[] data = new byte[KeySize]; + + public Ed448PublicKeyParameters(byte[] buf) + : this(Validate(buf), 0) + { + } + + public Ed448PublicKeyParameters(byte[] buf, int off) + : base(false) + { + Array.Copy(buf, off, data, 0, KeySize); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public Ed448PublicKeyParameters(ReadOnlySpan buf) + : base(false) + { + if (buf.Length != KeySize) + throw new ArgumentException("must have length " + KeySize, nameof(buf)); + + buf.CopyTo(data); + } +#endif + + public Ed448PublicKeyParameters(Stream input) + : base(false) + { + if (KeySize != Streams.ReadFully(input, data)) + throw new EndOfStreamException("EOF encountered in middle of Ed448 public key"); + } + + public void Encode(byte[] buf, int off) + { + Array.Copy(data, 0, buf, off, KeySize); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Encode(Span buf) + { + data.CopyTo(buf); + } +#endif + + public byte[] GetEncoded() + { + return Arrays.Clone(data); + } + + private static byte[] Validate(byte[] buf) + { + if (buf.Length != KeySize) + throw new ArgumentException("must have length " + KeySize, nameof(buf)); + + return buf; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed448PublicKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed448PublicKeyParameters.cs.meta new file mode 100644 index 000000000..b7e372e77 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Ed448PublicKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f94469426783edb40b4a167fe5bfaea7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalKeyGenerationParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalKeyGenerationParameters.cs new file mode 100644 index 000000000..e0b918c42 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalKeyGenerationParameters.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class ElGamalKeyGenerationParameters + : KeyGenerationParameters + { + private readonly ElGamalParameters parameters; + + public ElGamalKeyGenerationParameters( + SecureRandom random, + ElGamalParameters parameters) + : base(random, GetStrength(parameters)) + { + this.parameters = parameters; + } + + public ElGamalParameters Parameters + { + get { return parameters; } + } + + internal static int GetStrength( + ElGamalParameters parameters) + { + return parameters.L != 0 ? parameters.L : parameters.P.BitLength; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalKeyGenerationParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalKeyGenerationParameters.cs.meta new file mode 100644 index 000000000..89a4daea9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalKeyGenerationParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 605fe530d358a834b87bd5618b3592eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalKeyParameters.cs new file mode 100644 index 000000000..8536724c9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalKeyParameters.cs @@ -0,0 +1,63 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class ElGamalKeyParameters + : AsymmetricKeyParameter + { + private readonly ElGamalParameters parameters; + + protected ElGamalKeyParameters( + bool isPrivate, + ElGamalParameters parameters) + : base(isPrivate) + { + // TODO Should we allow 'parameters' to be null? + this.parameters = parameters; + } + + public ElGamalParameters Parameters + { + get { return parameters; } + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + ElGamalKeyParameters other = obj as ElGamalKeyParameters; + + if (other == null) + return false; + + return Equals(other); + } + + protected bool Equals( + ElGamalKeyParameters other) + { + return Org.BouncyCastle.Utilities.Platform.Equals(parameters, other.parameters) + && base.Equals(other); + } + + public override int GetHashCode() + { + int hc = base.GetHashCode(); + + if (parameters != null) + { + hc ^= parameters.GetHashCode(); + } + + return hc; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalKeyParameters.cs.meta new file mode 100644 index 000000000..4263fd108 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7cf4458861963154489ccdb128696971 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalParameters.cs new file mode 100644 index 000000000..bc59ce916 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalParameters.cs @@ -0,0 +1,85 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class ElGamalParameters + : ICipherParameters + { + private readonly BigInteger p, g; + private readonly int l; + + public ElGamalParameters( + BigInteger p, + BigInteger g) + : this(p, g, 0) + { + } + + public ElGamalParameters( + BigInteger p, + BigInteger g, + int l) + { + if (p == null) + throw new ArgumentNullException("p"); + if (g == null) + throw new ArgumentNullException("g"); + + this.p = p; + this.g = g; + this.l = l; + } + + public BigInteger P + { + get { return p; } + } + + /** + * return the generator - g + */ + public BigInteger G + { + get { return g; } + } + + /** + * return private value limit - l + */ + public int L + { + get { return l; } + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + ElGamalParameters other = obj as ElGamalParameters; + + if (other == null) + return false; + + return Equals(other); + } + + protected bool Equals( + ElGamalParameters other) + { + return p.Equals(other.p) && g.Equals(other.g) && l == other.l; + } + + public override int GetHashCode() + { + return p.GetHashCode() ^ g.GetHashCode() ^ l; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalParameters.cs.meta new file mode 100644 index 000000000..8cf37eeda --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3e46c9305cb7e5e49a27049f3f2018ae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalPrivateKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalPrivateKeyParameters.cs new file mode 100644 index 000000000..c28b94d1f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalPrivateKeyParameters.cs @@ -0,0 +1,57 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class ElGamalPrivateKeyParameters + : ElGamalKeyParameters + { + private readonly BigInteger x; + + public ElGamalPrivateKeyParameters( + BigInteger x, + ElGamalParameters parameters) + : base(true, parameters) + { + if (x == null) + throw new ArgumentNullException("x"); + + this.x = x; + } + + public BigInteger X + { + get { return x; } + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + ElGamalPrivateKeyParameters other = obj as ElGamalPrivateKeyParameters; + + if (other == null) + return false; + + return Equals(other); + } + + protected bool Equals( + ElGamalPrivateKeyParameters other) + { + return other.x.Equals(x) && base.Equals(other); + } + + public override int GetHashCode() + { + return x.GetHashCode() ^ base.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalPrivateKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalPrivateKeyParameters.cs.meta new file mode 100644 index 000000000..4ca414ee8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalPrivateKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 334db63a79120bd4a8c4f2fa512f5b35 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalPublicKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalPublicKeyParameters.cs new file mode 100644 index 000000000..71fe9c56f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalPublicKeyParameters.cs @@ -0,0 +1,57 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class ElGamalPublicKeyParameters + : ElGamalKeyParameters + { + private readonly BigInteger y; + + public ElGamalPublicKeyParameters( + BigInteger y, + ElGamalParameters parameters) + : base(false, parameters) + { + if (y == null) + throw new ArgumentNullException("y"); + + this.y = y; + } + + public BigInteger Y + { + get { return y; } + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + ElGamalPublicKeyParameters other = obj as ElGamalPublicKeyParameters; + + if (other == null) + return false; + + return Equals(other); + } + + protected bool Equals( + ElGamalPublicKeyParameters other) + { + return y.Equals(other.y) && base.Equals(other); + } + + public override int GetHashCode() + { + return y.GetHashCode() ^ base.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalPublicKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalPublicKeyParameters.cs.meta new file mode 100644 index 000000000..8837bf5fd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ElGamalPublicKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 66e505fdb6b021e4f826fcdbac27d43f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/FpeParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/FpeParameters.cs new file mode 100644 index 000000000..a6783d784 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/FpeParameters.cs @@ -0,0 +1,53 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ +public sealed class FpeParameters + : ICipherParameters +{ + private readonly KeyParameter key; + private readonly int radix; + private readonly byte[] tweak; + private readonly bool useInverse; + + public FpeParameters(KeyParameter key, int radix, byte[] tweak): this(key, radix, tweak, false) + { + + } + + public FpeParameters(KeyParameter key, int radix, byte[] tweak, bool useInverse) + { + this.key = key; + this.radix = radix; + this.tweak = Arrays.Clone(tweak); + this.useInverse = useInverse; + } + + public KeyParameter Key + { + get { return key; } + } + + public int Radix + { + get { return radix; } + } + + public bool UseInverseFunction + { + get { return useInverse; } + } + + public byte[] GetTweak() + { + return Arrays.Clone(tweak); + } +} +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/FpeParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/FpeParameters.cs.meta new file mode 100644 index 000000000..9613d60a4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/FpeParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7e64bea3158f8644c954ec2bf1e95d8b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410KeyGenerationParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410KeyGenerationParameters.cs new file mode 100644 index 000000000..1861da5b3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410KeyGenerationParameters.cs @@ -0,0 +1,59 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class Gost3410KeyGenerationParameters + : KeyGenerationParameters + { + private readonly Gost3410Parameters parameters; + private readonly DerObjectIdentifier publicKeyParamSet; + + public Gost3410KeyGenerationParameters( + SecureRandom random, + Gost3410Parameters parameters) + : base(random, parameters.P.BitLength - 1) + { + this.parameters = parameters; + } + + public Gost3410KeyGenerationParameters( + SecureRandom random, + DerObjectIdentifier publicKeyParamSet) + : this(random, LookupParameters(publicKeyParamSet)) + { + this.publicKeyParamSet = publicKeyParamSet; + } + + public Gost3410Parameters Parameters + { + get { return parameters; } + } + + public DerObjectIdentifier PublicKeyParamSet + { + get { return publicKeyParamSet; } + } + + private static Gost3410Parameters LookupParameters( + DerObjectIdentifier publicKeyParamSet) + { + if (publicKeyParamSet == null) + throw new ArgumentNullException("publicKeyParamSet"); + + Gost3410ParamSetParameters p = Gost3410NamedParameters.GetByOid(publicKeyParamSet); + + if (p == null) + throw new ArgumentException("OID is not a valid CryptoPro public key parameter set", "publicKeyParamSet"); + + return new Gost3410Parameters(p.P, p.Q, p.A); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410KeyGenerationParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410KeyGenerationParameters.cs.meta new file mode 100644 index 000000000..a6d585c9d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410KeyGenerationParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1d2b36972901f8645b70cec28ad5541b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410KeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410KeyParameters.cs new file mode 100644 index 000000000..f4958a784 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410KeyParameters.cs @@ -0,0 +1,62 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public abstract class Gost3410KeyParameters + : AsymmetricKeyParameter + { + private readonly Gost3410Parameters parameters; + private readonly DerObjectIdentifier publicKeyParamSet; + + protected Gost3410KeyParameters( + bool isPrivate, + Gost3410Parameters parameters) + : base(isPrivate) + { + this.parameters = parameters; + } + + protected Gost3410KeyParameters( + bool isPrivate, + DerObjectIdentifier publicKeyParamSet) + : base(isPrivate) + { + this.parameters = LookupParameters(publicKeyParamSet); + this.publicKeyParamSet = publicKeyParamSet; + } + + public Gost3410Parameters Parameters + { + get { return parameters; } + } + + public DerObjectIdentifier PublicKeyParamSet + { + get { return publicKeyParamSet; } + } + + // TODO Implement Equals/GetHashCode + + private static Gost3410Parameters LookupParameters( + DerObjectIdentifier publicKeyParamSet) + { + if (publicKeyParamSet == null) + throw new ArgumentNullException("publicKeyParamSet"); + + Gost3410ParamSetParameters p = Gost3410NamedParameters.GetByOid(publicKeyParamSet); + + if (p == null) + throw new ArgumentException("OID is not a valid CryptoPro public key parameter set", "publicKeyParamSet"); + + return new Gost3410Parameters(p.P, p.Q, p.A); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410KeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410KeyParameters.cs.meta new file mode 100644 index 000000000..703d58c7b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410KeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1dc6988914e81bd46905d8ebc7b82e2a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410Parameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410Parameters.cs new file mode 100644 index 000000000..19fe07ef2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410Parameters.cs @@ -0,0 +1,90 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class Gost3410Parameters + : ICipherParameters + { + private readonly BigInteger p, q, a; + private readonly Gost3410ValidationParameters validation; + + public Gost3410Parameters( + BigInteger p, + BigInteger q, + BigInteger a) + : this(p, q, a, null) + { + } + + public Gost3410Parameters( + BigInteger p, + BigInteger q, + BigInteger a, + Gost3410ValidationParameters validation) + { + if (p == null) + throw new ArgumentNullException("p"); + if (q == null) + throw new ArgumentNullException("q"); + if (a == null) + throw new ArgumentNullException("a"); + + this.p = p; + this.q = q; + this.a = a; + this.validation = validation; + } + + public BigInteger P + { + get { return p; } + } + + public BigInteger Q + { + get { return q; } + } + + public BigInteger A + { + get { return a; } + } + + public Gost3410ValidationParameters ValidationParameters + { + get { return validation; } + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + Gost3410Parameters other = obj as Gost3410Parameters; + + if (other == null) + return false; + + return Equals(other); + } + + protected bool Equals( + Gost3410Parameters other) + { + return p.Equals(other.p) && q.Equals(other.q) && a.Equals(other.a); + } + + public override int GetHashCode() + { + return p.GetHashCode() ^ q.GetHashCode() ^ a.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410Parameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410Parameters.cs.meta new file mode 100644 index 000000000..955555803 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410Parameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5dbdc652c3f5f944f87efef0cff09e1e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410PrivateKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410PrivateKeyParameters.cs new file mode 100644 index 000000000..8ca4f5543 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410PrivateKeyParameters.cs @@ -0,0 +1,45 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class Gost3410PrivateKeyParameters + : Gost3410KeyParameters + { + private readonly BigInteger x; + + public Gost3410PrivateKeyParameters( + BigInteger x, + Gost3410Parameters parameters) + : base(true, parameters) + { + if (x.SignValue < 1 || x.BitLength > 256 || x.CompareTo(Parameters.Q) >= 0) + throw new ArgumentException("Invalid x for GOST3410 private key", "x"); + + this.x = x; + } + + public Gost3410PrivateKeyParameters( + BigInteger x, + DerObjectIdentifier publicKeyParamSet) + : base(true, publicKeyParamSet) + { + if (x.SignValue < 1 || x.BitLength > 256 || x.CompareTo(Parameters.Q) >= 0) + throw new ArgumentException("Invalid x for GOST3410 private key", "x"); + + this.x = x; + } + + public BigInteger X + { + get { return x; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410PrivateKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410PrivateKeyParameters.cs.meta new file mode 100644 index 000000000..4e475ad06 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410PrivateKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6711979a24300844aa8670163e40905 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410PublicKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410PublicKeyParameters.cs new file mode 100644 index 000000000..31f70538a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410PublicKeyParameters.cs @@ -0,0 +1,44 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class Gost3410PublicKeyParameters + : Gost3410KeyParameters + { + private readonly BigInteger y; + + public Gost3410PublicKeyParameters( + BigInteger y, + Gost3410Parameters parameters) + : base(false, parameters) + { + if (y.SignValue < 1 || y.CompareTo(Parameters.P) >= 0) + throw new ArgumentException("Invalid y for GOST3410 public key", "y"); + + this.y = y; + } + + public Gost3410PublicKeyParameters( + BigInteger y, + DerObjectIdentifier publicKeyParamSet) + : base(false, publicKeyParamSet) + { + if (y.SignValue < 1 || y.CompareTo(Parameters.P) >= 0) + throw new ArgumentException("Invalid y for GOST3410 public key", "y"); + + this.y = y; + } + + public BigInteger Y + { + get { return y; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410PublicKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410PublicKeyParameters.cs.meta new file mode 100644 index 000000000..3117dfd4b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410PublicKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d46ac587d55b6046a73f3d32ed2c8a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410ValidationParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410ValidationParameters.cs new file mode 100644 index 000000000..71dd73a6c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410ValidationParameters.cs @@ -0,0 +1,55 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class Gost3410ValidationParameters + { + private int x0; + private int c; + private long x0L; + private long cL; + + public Gost3410ValidationParameters( + int x0, + int c) + { + this.x0 = x0; + this.c = c; + } + + public Gost3410ValidationParameters( + long x0L, + long cL) + { + this.x0L = x0L; + this.cL = cL; + } + + public int C { get { return c; } } + public int X0 { get { return x0; } } + public long CL { get { return cL; } } + public long X0L { get { return x0L; } } + + public override bool Equals( + object obj) + { + Gost3410ValidationParameters other = obj as Gost3410ValidationParameters; + + return other != null + && other.c == this.c + && other.x0 == this.x0 + && other.cL == this.cL + && other.x0L == this.x0L; + } + + public override int GetHashCode() + { + return c.GetHashCode() ^ x0.GetHashCode() ^ cL.GetHashCode() ^ x0L.GetHashCode(); + } + + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410ValidationParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410ValidationParameters.cs.meta new file mode 100644 index 000000000..3e32abc2a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/GOST3410ValidationParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c64f65e9276e6e4785c41edb30a4d8b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/HKDFParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/HKDFParameters.cs new file mode 100644 index 000000000..b83bd63b2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/HKDFParameters.cs @@ -0,0 +1,123 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + /** + * Parameter class for the HkdfBytesGenerator class. + */ + public class HkdfParameters + : IDerivationParameters + { + private readonly byte[] ikm; + private readonly bool skipExpand; + private readonly byte[] salt; + private readonly byte[] info; + + private HkdfParameters(byte[] ikm, bool skip, byte[] salt, byte[] info) + { + if (ikm == null) + throw new ArgumentNullException("ikm"); + + this.ikm = Arrays.Clone(ikm); + this.skipExpand = skip; + + if (salt == null || salt.Length == 0) + { + this.salt = null; + } + else + { + this.salt = Arrays.Clone(salt); + } + + if (info == null) + { + this.info = new byte[0]; + } + else + { + this.info = Arrays.Clone(info); + } + } + + /** + * Generates parameters for HKDF, specifying both the optional salt and + * optional info. Step 1: Extract won't be skipped. + * + * @param ikm the input keying material or seed + * @param salt the salt to use, may be null for a salt for hashLen zeros + * @param info the info to use, may be null for an info field of zero bytes + */ + public HkdfParameters(byte[] ikm, byte[] salt, byte[] info) + : this(ikm, false, salt, info) + { + } + + /** + * Factory method that makes the HKDF skip the extract part of the key + * derivation function. + * + * @param ikm the input keying material or seed, directly used for step 2: + * Expand + * @param info the info to use, may be null for an info field of zero bytes + * @return HKDFParameters that makes the implementation skip step 1 + */ + public static HkdfParameters SkipExtractParameters(byte[] ikm, byte[] info) + { + return new HkdfParameters(ikm, true, null, info); + } + + public static HkdfParameters DefaultParameters(byte[] ikm) + { + return new HkdfParameters(ikm, false, null, null); + } + + /** + * Returns the input keying material or seed. + * + * @return the keying material + */ + public virtual byte[] GetIkm() + { + return Arrays.Clone(ikm); + } + + /** + * Returns if step 1: extract has to be skipped or not + * + * @return true for skipping, false for no skipping of step 1 + */ + public virtual bool SkipExtract + { + get { return skipExpand; } + } + + /** + * Returns the salt, or null if the salt should be generated as a byte array + * of HashLen zeros. + * + * @return the salt, or null + */ + public virtual byte[] GetSalt() + { + return Arrays.Clone(salt); + } + + /** + * Returns the info field, which may be empty (null is converted to empty). + * + * @return the info field, never null + */ + public virtual byte[] GetInfo() + { + return Arrays.Clone(info); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/HKDFParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/HKDFParameters.cs.meta new file mode 100644 index 000000000..429b3e1ef --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/HKDFParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 293360ebd6a248a49be4e61a3bb9a636 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ISO18033KDFParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ISO18033KDFParameters.cs new file mode 100644 index 000000000..c5a868634 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ISO18033KDFParameters.cs @@ -0,0 +1,29 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + /** + * parameters for Key derivation functions for ISO-18033 + */ + public class Iso18033KdfParameters + : IDerivationParameters + { + byte[] seed; + + public Iso18033KdfParameters( + byte[] seed) + { + this.seed = seed; + } + + public byte[] GetSeed() + { + return seed; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ISO18033KDFParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ISO18033KDFParameters.cs.meta new file mode 100644 index 000000000..a0c897713 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ISO18033KDFParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1841ab6676510b84a9a6154b0c8c6004 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/IesParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/IesParameters.cs new file mode 100644 index 000000000..53b4cfa4e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/IesParameters.cs @@ -0,0 +1,53 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + /** + * parameters for using an integrated cipher in stream mode. + */ + public class IesParameters : ICipherParameters + { + private byte[] derivation; + private byte[] encoding; + private int macKeySize; + + /** + * @param derivation the derivation parameter for the KDF function. + * @param encoding the encoding parameter for the KDF function. + * @param macKeySize the size of the MAC key (in bits). + */ + public IesParameters( + byte[] derivation, + byte[] encoding, + int macKeySize) + { + this.derivation = derivation; + this.encoding = encoding; + this.macKeySize = macKeySize; + } + + public byte[] GetDerivationV() + { + return derivation; + } + + public byte[] GetEncodingV() + { + return encoding; + } + + public int MacKeySize + { + get + { + return macKeySize; + } + } + } + +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/IesParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/IesParameters.cs.meta new file mode 100644 index 000000000..09c63ac57 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/IesParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7c03aa52286eafd459b8fc92fa4177e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/IesWithCipherParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/IesWithCipherParameters.cs new file mode 100644 index 000000000..dc3c220e8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/IesWithCipherParameters.cs @@ -0,0 +1,37 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class IesWithCipherParameters : IesParameters + { + private int cipherKeySize; + + /** + * @param derivation the derivation parameter for the KDF function. + * @param encoding the encoding parameter for the KDF function. + * @param macKeySize the size of the MAC key (in bits). + * @param cipherKeySize the size of the associated Cipher key (in bits). + */ + public IesWithCipherParameters( + byte[] derivation, + byte[] encoding, + int macKeySize, + int cipherKeySize) : base(derivation, encoding, macKeySize) + { + this.cipherKeySize = cipherKeySize; + } + + public int CipherKeySize + { + get + { + return cipherKeySize; + } + } + } + +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/IesWithCipherParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/IesWithCipherParameters.cs.meta new file mode 100644 index 000000000..73334ffb4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/IesWithCipherParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3413d4030dee0b47a112e722521d66c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KDFCounterParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KDFCounterParameters.cs new file mode 100644 index 000000000..d5f63b52d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KDFCounterParameters.cs @@ -0,0 +1,96 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class KdfCounterParameters : IDerivationParameters + { + private byte[] ki; + private byte[] fixedInputDataCounterPrefix; + private byte[] fixedInputDataCounterSuffix; + private int r; + + /// + /// Base constructor - suffix fixed input data only. + /// + /// the KDF seed + /// fixed input data to follow counter. + /// length of the counter in bits + public KdfCounterParameters(byte[] ki, byte[] fixedInputDataCounterSuffix, int r) : this(ki, null, fixedInputDataCounterSuffix, r) + { + } + + + + /// + /// Base constructor - prefix and suffix fixed input data. + /// + /// the KDF seed + /// fixed input data to precede counter + /// fixed input data to follow counter. + /// length of the counter in bits. + public KdfCounterParameters(byte[] ki, byte[] fixedInputDataCounterPrefix, byte[] fixedInputDataCounterSuffix, int r) + { + if (ki == null) + { + throw new ArgumentException("A KDF requires Ki (a seed) as input"); + } + this.ki = Arrays.Clone(ki); + + if (fixedInputDataCounterPrefix == null) + { + this.fixedInputDataCounterPrefix = new byte[0]; + } + else + { + this.fixedInputDataCounterPrefix = Arrays.Clone(fixedInputDataCounterPrefix); + } + + if (fixedInputDataCounterSuffix == null) + { + this.fixedInputDataCounterSuffix = new byte[0]; + } + else + { + this.fixedInputDataCounterSuffix = Arrays.Clone(fixedInputDataCounterSuffix); + } + + if (r != 8 && r != 16 && r != 24 && r != 32) + { + throw new ArgumentException("Length of counter should be 8, 16, 24 or 32"); + } + this.r = r; + } + + public byte[] Ki + { + get { return ki; } + } + + public byte[] FixedInputData + { + get { return Arrays.Clone(fixedInputDataCounterSuffix); } + } + + public byte[] FixedInputDataCounterPrefix + { + get { return Arrays.Clone(fixedInputDataCounterPrefix); } + + } + + public byte[] FixedInputDataCounterSuffix + { + get { return Arrays.Clone(fixedInputDataCounterSuffix); } + } + + public int R + { + get { return r; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KDFCounterParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KDFCounterParameters.cs.meta new file mode 100644 index 000000000..9ee91d5c8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KDFCounterParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 79378302c515f4a4fb7c33cf13faffbf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KDFDoublePipelineIterationParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KDFDoublePipelineIterationParameters.cs new file mode 100644 index 000000000..f328a5530 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KDFDoublePipelineIterationParameters.cs @@ -0,0 +1,81 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class KdfDoublePipelineIterationParameters : IDerivationParameters + { + // could be any valid value, using 32, don't know why + private static readonly int UNUSED_R = 32; + + private readonly byte[] ki; + private readonly bool useCounter; + private readonly int r; + private readonly byte[] fixedInputData; + + private KdfDoublePipelineIterationParameters(byte[] ki, byte[] fixedInputData, int r, bool useCounter) + { + if (ki == null) + { + throw new ArgumentException("A KDF requires Ki (a seed) as input"); + } + + this.ki = Arrays.Clone(ki); + + if (fixedInputData == null) + { + this.fixedInputData = new byte[0]; + } + else + { + this.fixedInputData = Arrays.Clone(fixedInputData); + } + + if (r != 8 && r != 16 && r != 24 && r != 32) + { + throw new ArgumentException("Length of counter should be 8, 16, 24 or 32"); + } + + this.r = r; + + this.useCounter = useCounter; + } + + public static KdfDoublePipelineIterationParameters CreateWithCounter( + byte[] ki, byte[] fixedInputData, int r) + { + return new KdfDoublePipelineIterationParameters(ki, fixedInputData, r, true); + } + + public static KdfDoublePipelineIterationParameters CreateWithoutCounter( + byte[] ki, byte[] fixedInputData) + { + return new KdfDoublePipelineIterationParameters(ki, fixedInputData, UNUSED_R, false); + } + + public byte[] Ki + { + get { return Arrays.Clone(ki); } + } + + public bool UseCounter + { + get { return useCounter; } + } + + public int R + { + get { return r; } + } + + public byte[] FixedInputData + { + get { return Arrays.Clone(fixedInputData); } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KDFDoublePipelineIterationParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KDFDoublePipelineIterationParameters.cs.meta new file mode 100644 index 000000000..6f9b9bb7f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KDFDoublePipelineIterationParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b4f824341e6aa844bb36ef7b6975563c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KDFFeedbackParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KDFFeedbackParameters.cs new file mode 100644 index 000000000..21a0547b7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KDFFeedbackParameters.cs @@ -0,0 +1,96 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class KdfFeedbackParameters : IDerivationParameters + { + // could be any valid value, using 32, don't know why + private static readonly int UNUSED_R = -1; + + private readonly byte[] ki; + private readonly byte[] iv; + private readonly bool useCounter; + private readonly int r; + private readonly byte[] fixedInputData; + + private KdfFeedbackParameters(byte[] ki, byte[] iv, byte[] fixedInputData, int r, bool useCounter) + { + if (ki == null) + { + throw new ArgumentException("A KDF requires Ki (a seed) as input"); + } + + this.ki = Arrays.Clone(ki); + + if (fixedInputData == null) + { + this.fixedInputData = new byte[0]; + } + else + { + this.fixedInputData = Arrays.Clone(fixedInputData); + } + + this.r = r; + + if (iv == null) + { + this.iv = new byte[0]; + } + else + { + this.iv = Arrays.Clone(iv); + } + + this.useCounter = useCounter; + } + + public static KdfFeedbackParameters CreateWithCounter( + byte[] ki, byte[] iv, byte[] fixedInputData, int r) + { + if (r != 8 && r != 16 && r != 24 && r != 32) + { + throw new ArgumentException("Length of counter should be 8, 16, 24 or 32"); + } + + return new KdfFeedbackParameters(ki, iv, fixedInputData, r, true); + } + + public static KdfFeedbackParameters CreateWithoutCounter( + byte[] ki, byte[] iv, byte[] fixedInputData) + { + return new KdfFeedbackParameters(ki, iv, fixedInputData, UNUSED_R, false); + } + + public byte[] Ki + { + get { return Arrays.Clone(ki); } + } + + public byte[] Iv + { + get { return Arrays.Clone(iv); } + } + + public bool UseCounter + { + get { return useCounter; } + } + + public int R + { + get { return r; } + } + + public byte[] FixedInputData + { + get { return Arrays.Clone(fixedInputData); } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KDFFeedbackParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KDFFeedbackParameters.cs.meta new file mode 100644 index 000000000..f51b2e712 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KDFFeedbackParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3db4953a9cb0b0d43913b88f370f6329 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KdfParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KdfParameters.cs new file mode 100644 index 000000000..5c65a86e2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KdfParameters.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + /** + * parameters for Key derivation functions for IEEE P1363a + */ + public class KdfParameters + : IDerivationParameters + { + private readonly byte[] m_iv; + private readonly byte[] m_shared; + + public KdfParameters(byte[] shared, byte[] iv) + { + m_shared = shared; + m_iv = iv; + } + + public byte[] GetSharedSecret() + { + return m_shared; + } + + public byte[] GetIV() + { + return m_iv; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KdfParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KdfParameters.cs.meta new file mode 100644 index 000000000..0371bc4c5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KdfParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 26a35bd34dbec4c4c8291c90a9e688d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KeyParameter.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KeyParameter.cs new file mode 100644 index 000000000..8182b4c59 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KeyParameter.cs @@ -0,0 +1,49 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class KeyParameter + : ICipherParameters + { + private readonly byte[] m_key; + + public KeyParameter(byte[] key) + { + if (key == null) + throw new ArgumentNullException(nameof(key)); + + m_key = (byte[])key.Clone(); + } + + public KeyParameter(byte[] key, int keyOff, int keyLen) + { + if (key == null) + throw new ArgumentNullException(nameof(key)); + if (keyOff < 0 || keyOff > key.Length) + throw new ArgumentOutOfRangeException(nameof(keyOff)); + if (keyLen < 0 || keyLen > (key.Length - keyOff)) + throw new ArgumentOutOfRangeException(nameof(keyLen)); + + m_key = new byte[keyLen]; + Array.Copy(key, keyOff, m_key, 0, keyLen); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public KeyParameter(ReadOnlySpan key) + { + m_key = key.ToArray(); + } +#endif + + public byte[] GetKey() + { + return (byte[])m_key.Clone(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KeyParameter.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KeyParameter.cs.meta new file mode 100644 index 000000000..f508c5559 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/KeyParameter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fd79ff15a5360d745bdc45b2083e2958 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/MgfParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/MgfParameters.cs new file mode 100644 index 000000000..1d4e38b5c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/MgfParameters.cs @@ -0,0 +1,46 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + /// Parameters for mask derivation functions. + public sealed class MgfParameters + : IDerivationParameters + { + private readonly byte[] m_seed; + + public MgfParameters(byte[] seed) + : this(seed, 0, seed.Length) + { + } + + public MgfParameters(byte[] seed, int off, int len) + { + m_seed = Arrays.CopyOfRange(seed, off, len); + } + + public byte[] GetSeed() + { + return (byte[])m_seed.Clone(); + } + + public void GetSeed(byte[] buffer, int offset) + { + m_seed.CopyTo(buffer, offset); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void GetSeed(Span output) + { + m_seed.CopyTo(output); + } +#endif + + public int SeedLength => m_seed.Length; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/MgfParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/MgfParameters.cs.meta new file mode 100644 index 000000000..d792a5260 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/MgfParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 75c55f2fe09e5404eac96fe38d1d0a40 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/MqvPrivateParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/MqvPrivateParameters.cs new file mode 100644 index 000000000..af5e3f2c0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/MqvPrivateParameters.cs @@ -0,0 +1,71 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class MqvPrivateParameters + : ICipherParameters + { + private readonly ECPrivateKeyParameters staticPrivateKey; + private readonly ECPrivateKeyParameters ephemeralPrivateKey; + private readonly ECPublicKeyParameters ephemeralPublicKey; + + public MqvPrivateParameters( + ECPrivateKeyParameters staticPrivateKey, + ECPrivateKeyParameters ephemeralPrivateKey) + : this(staticPrivateKey, ephemeralPrivateKey, null) + { + } + + public MqvPrivateParameters( + ECPrivateKeyParameters staticPrivateKey, + ECPrivateKeyParameters ephemeralPrivateKey, + ECPublicKeyParameters ephemeralPublicKey) + { + if (staticPrivateKey == null) + throw new ArgumentNullException("staticPrivateKey"); + if (ephemeralPrivateKey == null) + throw new ArgumentNullException("ephemeralPrivateKey"); + + ECDomainParameters parameters = staticPrivateKey.Parameters; + if (!parameters.Equals(ephemeralPrivateKey.Parameters)) + throw new ArgumentException("Static and ephemeral private keys have different domain parameters"); + + if (ephemeralPublicKey == null) + { + ECPoint q = new FixedPointCombMultiplier().Multiply(parameters.G, ephemeralPrivateKey.D); + + ephemeralPublicKey = new ECPublicKeyParameters(q, parameters); + } + else if (!parameters.Equals(ephemeralPublicKey.Parameters)) + { + throw new ArgumentException("Ephemeral public key has different domain parameters"); + } + + this.staticPrivateKey = staticPrivateKey; + this.ephemeralPrivateKey = ephemeralPrivateKey; + this.ephemeralPublicKey = ephemeralPublicKey; + } + + public virtual ECPrivateKeyParameters StaticPrivateKey + { + get { return staticPrivateKey; } + } + + public virtual ECPrivateKeyParameters EphemeralPrivateKey + { + get { return ephemeralPrivateKey; } + } + + public virtual ECPublicKeyParameters EphemeralPublicKey + { + get { return ephemeralPublicKey; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/MqvPrivateParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/MqvPrivateParameters.cs.meta new file mode 100644 index 000000000..ceb57df81 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/MqvPrivateParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 48e1468458832e9438b4568785726d43 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/MqvPublicParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/MqvPublicParameters.cs new file mode 100644 index 000000000..2cf2c9439 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/MqvPublicParameters.cs @@ -0,0 +1,40 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class MqvPublicParameters + : ICipherParameters + { + private readonly ECPublicKeyParameters staticPublicKey; + private readonly ECPublicKeyParameters ephemeralPublicKey; + + public MqvPublicParameters( + ECPublicKeyParameters staticPublicKey, + ECPublicKeyParameters ephemeralPublicKey) + { + if (staticPublicKey == null) + throw new ArgumentNullException("staticPublicKey"); + if (ephemeralPublicKey == null) + throw new ArgumentNullException("ephemeralPublicKey"); + if (!staticPublicKey.Parameters.Equals(ephemeralPublicKey.Parameters)) + throw new ArgumentException("Static and ephemeral public keys have different domain parameters"); + + this.staticPublicKey = staticPublicKey; + this.ephemeralPublicKey = ephemeralPublicKey; + } + + public virtual ECPublicKeyParameters StaticPublicKey + { + get { return staticPublicKey; } + } + + public virtual ECPublicKeyParameters EphemeralPublicKey + { + get { return ephemeralPublicKey; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/MqvPublicParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/MqvPublicParameters.cs.meta new file mode 100644 index 000000000..dfa86a67c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/MqvPublicParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e50ff85b1ca76d8428cde7f72e9d9d34 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/NaccacheSternKeyGenerationParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/NaccacheSternKeyGenerationParameters.cs new file mode 100644 index 000000000..95170355e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/NaccacheSternKeyGenerationParameters.cs @@ -0,0 +1,70 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + /** + * Parameters for NaccacheStern public private key generation. For details on + * this cipher, please see + * + * http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + */ + public class NaccacheSternKeyGenerationParameters : KeyGenerationParameters + { + // private BigInteger publicExponent; + private readonly int certainty; + private readonly int countSmallPrimes; + + /** + * Parameters for generating a NaccacheStern KeyPair. + * + * @param random + * The source of randomness + * @param strength + * The desired strength of the Key in Bits + * @param certainty + * the probability that the generated primes are not really prime + * as integer: 2^(-certainty) is then the probability + * @param countSmallPrimes + * How many small key factors are desired + */ + public NaccacheSternKeyGenerationParameters( + SecureRandom random, + int strength, + int certainty, + int countSmallPrimes) + : base(random, strength) + { + if (countSmallPrimes % 2 == 1) + throw new ArgumentException("countSmallPrimes must be a multiple of 2"); + if (countSmallPrimes < 30) + throw new ArgumentException("countSmallPrimes must be >= 30 for security reasons"); + + this.certainty = certainty; + this.countSmallPrimes = countSmallPrimes; + } + + /** + * @return Returns the certainty. + */ + public int Certainty + { + get { return certainty; } + } + + /** + * @return Returns the countSmallPrimes. + */ + public int CountSmallPrimes + { + get { return countSmallPrimes; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/NaccacheSternKeyGenerationParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/NaccacheSternKeyGenerationParameters.cs.meta new file mode 100644 index 000000000..91605a694 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/NaccacheSternKeyGenerationParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ee6bf0ab7004704a8e12912a0b65335 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/NaccacheSternKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/NaccacheSternKeyParameters.cs new file mode 100644 index 000000000..a88c6d543 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/NaccacheSternKeyParameters.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + /** + * Public key parameters for NaccacheStern cipher. For details on this cipher, + * please see + * + * http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + */ + public class NaccacheSternKeyParameters : AsymmetricKeyParameter + { + private readonly BigInteger g, n; + private readonly int lowerSigmaBound; + + /** + * @param privateKey + */ + public NaccacheSternKeyParameters(bool privateKey, BigInteger g, BigInteger n, int lowerSigmaBound) + : base(privateKey) + { + this.g = g; + this.n = n; + this.lowerSigmaBound = lowerSigmaBound; + } + + /** + * @return Returns the g. + */ + public BigInteger G { get { return g; } } + + /** + * @return Returns the lowerSigmaBound. + */ + public int LowerSigmaBound { get { return lowerSigmaBound; } } + + /** + * @return Returns the n. + */ + public BigInteger Modulus { get { return n; } } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/NaccacheSternKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/NaccacheSternKeyParameters.cs.meta new file mode 100644 index 000000000..b4c99db78 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/NaccacheSternKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c608e6e37c22c2c45bae901d561cf8ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/NaccacheSternPrivateKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/NaccacheSternPrivateKeyParameters.cs new file mode 100644 index 000000000..84b089a94 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/NaccacheSternPrivateKeyParameters.cs @@ -0,0 +1,60 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + /** + * Private key parameters for NaccacheStern cipher. For details on this cipher, + * please see + * + * http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + */ + public class NaccacheSternPrivateKeyParameters : NaccacheSternKeyParameters + { + private readonly BigInteger phiN; + private readonly IList smallPrimes; + + /** + * Constructs a NaccacheSternPrivateKey + * + * @param g + * the public enryption parameter g + * @param n + * the public modulus n = p*q + * @param lowerSigmaBound + * the public lower sigma bound up to which data can be encrypted + * @param smallPrimes + * the small primes, of which sigma is constructed in the right + * order + * @param phi_n + * the private modulus phi(n) = (p-1)(q-1) + */ + public NaccacheSternPrivateKeyParameters( + BigInteger g, + BigInteger n, + int lowerSigmaBound, + IList smallPrimes, + BigInteger phiN) + : base(true, g, n, lowerSigmaBound) + { + this.smallPrimes = smallPrimes; + this.phiN = phiN; + } + + public BigInteger PhiN + { + get { return phiN; } + } + + public IList SmallPrimesList + { + get { return smallPrimes; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/NaccacheSternPrivateKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/NaccacheSternPrivateKeyParameters.cs.meta new file mode 100644 index 000000000..52e0cab9f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/NaccacheSternPrivateKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf5a274ff3cb7634f810983e35f3bfde +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithID.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithID.cs new file mode 100644 index 000000000..f9c90ea3e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithID.cs @@ -0,0 +1,43 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class ParametersWithID + : ICipherParameters + { + private readonly ICipherParameters m_parameters; + private readonly byte[] m_id; + + public ParametersWithID(ICipherParameters parameters, byte[] id) + : this(parameters, id, 0, id.Length) + { + } + + public ParametersWithID(ICipherParameters parameters, byte[] id, int idOff, int idLen) + { + m_parameters = parameters; + m_id = Arrays.CopyOfRange(id, idOff, idOff + idLen); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public ParametersWithID(ICipherParameters parameters, ReadOnlySpan id) + { + m_parameters = parameters; + m_id = id.ToArray(); + } +#endif + + public byte[] GetID() + { + return m_id; + } + + public ICipherParameters Parameters => m_parameters; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithID.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithID.cs.meta new file mode 100644 index 000000000..a5ab6226a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithID.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c0f143d4cda38054f897e6d8a00c3491 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithIV.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithIV.cs new file mode 100644 index 000000000..e46d3ce2c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithIV.cs @@ -0,0 +1,43 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class ParametersWithIV + : ICipherParameters + { + private readonly ICipherParameters m_parameters; + private readonly byte[] m_iv; + + public ParametersWithIV(ICipherParameters parameters, byte[] iv) + : this(parameters, iv, 0, iv.Length) + { + } + + public ParametersWithIV(ICipherParameters parameters, byte[] iv, int ivOff, int ivLen) + { + m_parameters = parameters; + m_iv = Arrays.CopyOfRange(iv, ivOff, ivOff + ivLen); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public ParametersWithIV(ICipherParameters parameters, ReadOnlySpan iv) + { + m_parameters = parameters; + m_iv = iv.ToArray(); + } +#endif + + public byte[] GetIV() + { + return (byte[])m_iv.Clone(); + } + + public ICipherParameters Parameters => m_parameters; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithIV.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithIV.cs.meta new file mode 100644 index 000000000..2e8332a3c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithIV.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68fc549489833994d859f97f7f947591 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithRandom.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithRandom.cs new file mode 100644 index 000000000..1bc36ce4f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithRandom.cs @@ -0,0 +1,37 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class ParametersWithRandom + : ICipherParameters + { + private readonly ICipherParameters m_parameters; + private readonly SecureRandom m_random; + + public ParametersWithRandom(ICipherParameters parameters) + : this(parameters, CryptoServicesRegistrar.GetSecureRandom()) + { + } + + public ParametersWithRandom(ICipherParameters parameters, SecureRandom random) + { + if (parameters == null) + throw new ArgumentNullException(nameof(parameters)); + if (random == null) + throw new ArgumentNullException(nameof(random)); + + m_parameters = parameters; + m_random = random; + } + + public ICipherParameters Parameters => m_parameters; + + public SecureRandom Random => m_random; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithRandom.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithRandom.cs.meta new file mode 100644 index 000000000..854caeebb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithRandom.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9ce4f2340d8a7d944a7ea4678b7c69ff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithSBox.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithSBox.cs new file mode 100644 index 000000000..5ac998509 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithSBox.cs @@ -0,0 +1,28 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class ParametersWithSBox : ICipherParameters + { + private ICipherParameters parameters; + private byte[] sBox; + + public ParametersWithSBox( + ICipherParameters parameters, + byte[] sBox) + { + this.parameters = parameters; + this.sBox = sBox; + } + + public byte[] GetSBox() { return sBox; } + + public ICipherParameters Parameters { get { return parameters; } } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithSBox.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithSBox.cs.meta new file mode 100644 index 000000000..af279fb47 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithSBox.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 638195a3abd1d6a46b904b329c8245af +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithSalt.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithSalt.cs new file mode 100644 index 000000000..a4fd7b0bb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithSalt.cs @@ -0,0 +1,46 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + + /// Cipher parameters with a fixed salt value associated with them. + public class ParametersWithSalt + : ICipherParameters + { + private readonly ICipherParameters m_parameters; + private readonly byte[] m_salt; + + public ParametersWithSalt(ICipherParameters parameters, byte[] salt) + : this(parameters, salt, 0, salt.Length) + { + } + + public ParametersWithSalt(ICipherParameters parameters, byte[] salt, int saltOff, int saltLen) + { + m_parameters = parameters; + m_salt = Arrays.CopyOfRange(salt, saltOff, saltOff + saltLen); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public ParametersWithSalt(ICipherParameters parameters, ReadOnlySpan salt) + { + m_parameters = parameters; + m_salt = salt.ToArray(); + } +#endif + + public byte[] GetSalt() + { + return m_salt; + } + + public ICipherParameters Parameters => m_parameters; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithSalt.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithSalt.cs.meta new file mode 100644 index 000000000..b1f4c65cb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/ParametersWithSalt.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 46fe3e74d88b9a94892a247fbc85f040 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RC2Parameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RC2Parameters.cs new file mode 100644 index 000000000..64064ee41 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RC2Parameters.cs @@ -0,0 +1,51 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class RC2Parameters + : KeyParameter + { + private readonly int bits; + + public RC2Parameters( + byte[] key) + : this(key, (key.Length > 128) ? 1024 : (key.Length * 8)) + { + } + + public RC2Parameters( + byte[] key, + int keyOff, + int keyLen) + : this(key, keyOff, keyLen, (keyLen > 128) ? 1024 : (keyLen * 8)) + { + } + + public RC2Parameters( + byte[] key, + int bits) + : base(key) + { + this.bits = bits; + } + + public RC2Parameters( + byte[] key, + int keyOff, + int keyLen, + int bits) + : base(key, keyOff, keyLen) + { + this.bits = bits; + } + + public int EffectiveKeyBits + { + get { return bits; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RC2Parameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RC2Parameters.cs.meta new file mode 100644 index 000000000..3a73b743c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RC2Parameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 383dd2f6afb5c064e937be5dd2cb7ec8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RC5Parameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RC5Parameters.cs new file mode 100644 index 000000000..40137181c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RC5Parameters.cs @@ -0,0 +1,31 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class RC5Parameters + : KeyParameter + { + private readonly int rounds; + + public RC5Parameters( + byte[] key, + int rounds) + : base(key) + { + if (key.Length > 255) + throw new ArgumentException("RC5 key length can be no greater than 255"); + + this.rounds = rounds; + } + + public int Rounds + { + get { return rounds; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RC5Parameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RC5Parameters.cs.meta new file mode 100644 index 000000000..98206a19c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RC5Parameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71a86e01a87befa429932b5ce00b9fa6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RSABlindingParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RSABlindingParameters.cs new file mode 100644 index 000000000..52a8fe20f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RSABlindingParameters.cs @@ -0,0 +1,38 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class RsaBlindingParameters + : ICipherParameters + { + private readonly RsaKeyParameters publicKey; + private readonly BigInteger blindingFactor; + + public RsaBlindingParameters( + RsaKeyParameters publicKey, + BigInteger blindingFactor) + { + if (publicKey.IsPrivate) + throw new ArgumentException("RSA parameters should be for a public key"); + + this.publicKey = publicKey; + this.blindingFactor = blindingFactor; + } + + public RsaKeyParameters PublicKey + { + get { return publicKey; } + } + + public BigInteger BlindingFactor + { + get { return blindingFactor; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RSABlindingParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RSABlindingParameters.cs.meta new file mode 100644 index 000000000..c573abc17 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RSABlindingParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 64139b13faf91484d84de884824f3b4f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RsaKeyGenerationParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RsaKeyGenerationParameters.cs new file mode 100644 index 000000000..9c4cfcc60 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RsaKeyGenerationParameters.cs @@ -0,0 +1,59 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class RsaKeyGenerationParameters + : KeyGenerationParameters + { + private readonly BigInteger publicExponent; + private readonly int certainty; + + public RsaKeyGenerationParameters( + BigInteger publicExponent, + SecureRandom random, + int strength, + int certainty) + : base(random, strength) + { + this.publicExponent = publicExponent; + this.certainty = certainty; + } + + public BigInteger PublicExponent + { + get { return publicExponent; } + } + + public int Certainty + { + get { return certainty; } + } + + public override bool Equals( + object obj) + { + RsaKeyGenerationParameters other = obj as RsaKeyGenerationParameters; + + if (other == null) + { + return false; + } + + return certainty == other.certainty + && publicExponent.Equals(other.publicExponent); + } + + public override int GetHashCode() + { + return certainty.GetHashCode() ^ publicExponent.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RsaKeyGenerationParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RsaKeyGenerationParameters.cs.meta new file mode 100644 index 000000000..fb8472c8c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RsaKeyGenerationParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2dfb8ecda9194534ebe72fd378a0a6ba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RsaKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RsaKeyParameters.cs new file mode 100644 index 000000000..57f89665b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RsaKeyParameters.cs @@ -0,0 +1,110 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class RsaKeyParameters + : AsymmetricKeyParameter + { + // Hexadecimal value of the product of the 131 smallest odd primes from 3 to 743 + private static readonly BigInteger SmallPrimesProduct = new BigInteger( + "8138e8a0fcf3a4e84a771d40fd305d7f4aa59306d7251de54d98af8fe95729a1f" + + "73d893fa424cd2edc8636a6c3285e022b0e3866a565ae8108eed8591cd4fe8d2" + + "ce86165a978d719ebf647f362d33fca29cd179fb42401cbaf3df0c614056f9c8" + + "f3cfd51e474afb6bc6974f78db8aba8e9e517fded658591ab7502bd41849462f", + 16); + + private static BigInteger Validate(BigInteger modulus) + { + if ((modulus.IntValue & 1) == 0) + throw new ArgumentException("RSA modulus is even", "modulus"); + if (!modulus.Gcd(SmallPrimesProduct).Equals(BigInteger.One)) + throw new ArgumentException("RSA modulus has a small prime factor"); + + int maxBitLength = AsInteger("BestHTTP.SecureProtocol.Org.BouncyCastle.Rsa.MaxSize", 15360); + + int modBitLength = modulus.BitLength; + if (maxBitLength < modBitLength) + { + throw new ArgumentException("modulus value out of range"); + } + + // TODO: add additional primePower/Composite test - expensive!! + + return modulus; + } + + private readonly BigInteger modulus; + private readonly BigInteger exponent; + + public RsaKeyParameters( + bool isPrivate, + BigInteger modulus, + BigInteger exponent) + : base(isPrivate) + { + if (modulus == null) + throw new ArgumentNullException("modulus"); + if (exponent == null) + throw new ArgumentNullException("exponent"); + if (modulus.SignValue <= 0) + throw new ArgumentException("Not a valid RSA modulus", "modulus"); + if (exponent.SignValue <= 0) + throw new ArgumentException("Not a valid RSA exponent", "exponent"); + if (!isPrivate && (exponent.IntValue & 1) == 0) + throw new ArgumentException("RSA publicExponent is even", "exponent"); + + this.modulus = Validate(modulus); + this.exponent = exponent; + } + + public BigInteger Modulus + { + get { return modulus; } + } + + public BigInteger Exponent + { + get { return exponent; } + } + + public override bool Equals( + object obj) + { + RsaKeyParameters kp = obj as RsaKeyParameters; + + if (kp == null) + { + return false; + } + + return kp.IsPrivate == this.IsPrivate + && kp.Modulus.Equals(this.modulus) + && kp.Exponent.Equals(this.exponent); + } + + public override int GetHashCode() + { + return modulus.GetHashCode() ^ exponent.GetHashCode() ^ IsPrivate.GetHashCode(); + } + + internal static int AsInteger(string envVariable, int defaultValue) + { + string v = Org.BouncyCastle.Utilities.Platform.GetEnvironmentVariable(envVariable); + + if (v == null) + { + return defaultValue; + } + + return int.Parse(v); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RsaKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RsaKeyParameters.cs.meta new file mode 100644 index 000000000..964050829 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RsaKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8fbdd0c93dcb1ea49b65b46b26c2d1db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RsaPrivateCrtKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RsaPrivateCrtKeyParameters.cs new file mode 100644 index 000000000..85e028a95 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RsaPrivateCrtKeyParameters.cs @@ -0,0 +1,122 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class RsaPrivateCrtKeyParameters + : RsaKeyParameters + { + private readonly BigInteger e, p, q, dP, dQ, qInv; + + public RsaPrivateCrtKeyParameters( + BigInteger modulus, + BigInteger publicExponent, + BigInteger privateExponent, + BigInteger p, + BigInteger q, + BigInteger dP, + BigInteger dQ, + BigInteger qInv) + : base(true, modulus, privateExponent) + { + ValidateValue(publicExponent, "publicExponent", "exponent"); + ValidateValue(p, "p", "P value"); + ValidateValue(q, "q", "Q value"); + ValidateValue(dP, "dP", "DP value"); + ValidateValue(dQ, "dQ", "DQ value"); + ValidateValue(qInv, "qInv", "InverseQ value"); + + this.e = publicExponent; + this.p = p; + this.q = q; + this.dP = dP; + this.dQ = dQ; + this.qInv = qInv; + } + + public RsaPrivateCrtKeyParameters(RsaPrivateKeyStructure rsaPrivateKey) + : this( + rsaPrivateKey.Modulus, + rsaPrivateKey.PublicExponent, + rsaPrivateKey.PrivateExponent, + rsaPrivateKey.Prime1, + rsaPrivateKey.Prime2, + rsaPrivateKey.Exponent1, + rsaPrivateKey.Exponent2, + rsaPrivateKey.Coefficient) + { + } + + public BigInteger PublicExponent + { + get { return e; } + } + + public BigInteger P + { + get { return p; } + } + + public BigInteger Q + { + get { return q; } + } + + public BigInteger DP + { + get { return dP; } + } + + public BigInteger DQ + { + get { return dQ; } + } + + public BigInteger QInv + { + get { return qInv; } + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + RsaPrivateCrtKeyParameters kp = obj as RsaPrivateCrtKeyParameters; + + if (kp == null) + return false; + + return kp.DP.Equals(dP) + && kp.DQ.Equals(dQ) + && kp.Exponent.Equals(this.Exponent) + && kp.Modulus.Equals(this.Modulus) + && kp.P.Equals(p) + && kp.Q.Equals(q) + && kp.PublicExponent.Equals(e) + && kp.QInv.Equals(qInv); + } + + public override int GetHashCode() + { + return DP.GetHashCode() ^ DQ.GetHashCode() ^ Exponent.GetHashCode() ^ Modulus.GetHashCode() + ^ P.GetHashCode() ^ Q.GetHashCode() ^ PublicExponent.GetHashCode() ^ QInv.GetHashCode(); + } + + private static void ValidateValue(BigInteger x, string name, string desc) + { + if (x == null) + throw new ArgumentNullException(name); + if (x.SignValue <= 0) + throw new ArgumentException("Not a valid RSA " + desc, name); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RsaPrivateCrtKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RsaPrivateCrtKeyParameters.cs.meta new file mode 100644 index 000000000..03893cab2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/RsaPrivateCrtKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b78b91bb256c288459bcb8c8aeb11f63 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/SM2KeyExchangePrivateParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/SM2KeyExchangePrivateParameters.cs new file mode 100644 index 000000000..8a601cb40 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/SM2KeyExchangePrivateParameters.cs @@ -0,0 +1,71 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + /// Private parameters for an SM2 key exchange. + /// The ephemeralPrivateKey is used to calculate the random point used in the algorithm. + public class SM2KeyExchangePrivateParameters + : ICipherParameters + { + private readonly bool mInitiator; + private readonly ECPrivateKeyParameters mStaticPrivateKey; + private readonly ECPoint mStaticPublicPoint; + private readonly ECPrivateKeyParameters mEphemeralPrivateKey; + private readonly ECPoint mEphemeralPublicPoint; + + public SM2KeyExchangePrivateParameters( + bool initiator, + ECPrivateKeyParameters staticPrivateKey, + ECPrivateKeyParameters ephemeralPrivateKey) + { + if (staticPrivateKey == null) + throw new ArgumentNullException("staticPrivateKey"); + if (ephemeralPrivateKey == null) + throw new ArgumentNullException("ephemeralPrivateKey"); + + ECDomainParameters parameters = staticPrivateKey.Parameters; + if (!parameters.Equals(ephemeralPrivateKey.Parameters)) + throw new ArgumentException("Static and ephemeral private keys have different domain parameters"); + + ECMultiplier m = new FixedPointCombMultiplier(); + + this.mInitiator = initiator; + this.mStaticPrivateKey = staticPrivateKey; + this.mStaticPublicPoint = m.Multiply(parameters.G, staticPrivateKey.D).Normalize(); + this.mEphemeralPrivateKey = ephemeralPrivateKey; + this.mEphemeralPublicPoint = m.Multiply(parameters.G, ephemeralPrivateKey.D).Normalize(); + } + + public virtual bool IsInitiator + { + get { return mInitiator; } + } + + public virtual ECPrivateKeyParameters StaticPrivateKey + { + get { return mStaticPrivateKey; } + } + + public virtual ECPoint StaticPublicPoint + { + get { return mStaticPublicPoint; } + } + + public virtual ECPrivateKeyParameters EphemeralPrivateKey + { + get { return mEphemeralPrivateKey; } + } + + public virtual ECPoint EphemeralPublicPoint + { + get { return mEphemeralPublicPoint; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/SM2KeyExchangePrivateParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/SM2KeyExchangePrivateParameters.cs.meta new file mode 100644 index 000000000..c8bf417de --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/SM2KeyExchangePrivateParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8b2b11f2864c51499f5b2c0cad414b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/SM2KeyExchangePublicParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/SM2KeyExchangePublicParameters.cs new file mode 100644 index 000000000..f39eb3806 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/SM2KeyExchangePublicParameters.cs @@ -0,0 +1,44 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + /// Public parameters for an SM2 key exchange. + /// In this case the ephemeralPublicKey provides the random point used in the algorithm. + public class SM2KeyExchangePublicParameters + : ICipherParameters + { + private readonly ECPublicKeyParameters mStaticPublicKey; + private readonly ECPublicKeyParameters mEphemeralPublicKey; + + public SM2KeyExchangePublicParameters( + ECPublicKeyParameters staticPublicKey, + ECPublicKeyParameters ephemeralPublicKey) + { + if (staticPublicKey == null) + throw new ArgumentNullException("staticPublicKey"); + if (ephemeralPublicKey == null) + throw new ArgumentNullException("ephemeralPublicKey"); + if (!staticPublicKey.Parameters.Equals(ephemeralPublicKey.Parameters)) + throw new ArgumentException("Static and ephemeral public keys have different domain parameters"); + + this.mStaticPublicKey = staticPublicKey; + this.mEphemeralPublicKey = ephemeralPublicKey; + } + + public virtual ECPublicKeyParameters StaticPublicKey + { + get { return mStaticPublicKey; } + } + + public virtual ECPublicKeyParameters EphemeralPublicKey + { + get { return mEphemeralPublicKey; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/SM2KeyExchangePublicParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/SM2KeyExchangePublicParameters.cs.meta new file mode 100644 index 000000000..71a3933cd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/SM2KeyExchangePublicParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 64f9f4869ef3631459fffa7cffcff1cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/SkeinParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/SkeinParameters.cs new file mode 100644 index 000000000..b689ef590 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/SkeinParameters.cs @@ -0,0 +1,282 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + + /// + /// Parameters for the Skein hash function - a series of byte[] strings identified by integer tags. + /// + /// + /// Parameterised Skein can be used for: + ///
    + ///
  • MAC generation, by providing a key.
  • + ///
  • Randomised hashing, by providing a nonce.
  • + ///
  • A hash function for digital signatures, associating a + /// public key with the message digest.
  • + ///
  • A key derivation function, by providing a + /// key identifier.
  • + ///
  • Personalised hashing, by providing a + /// recommended format or + /// arbitrary personalisation string.
  • + ///
+ ///
+ /// + /// + /// + public class SkeinParameters + : ICipherParameters + { + /// + /// The parameter type for a secret key, supporting MAC or KDF functions: 0 + /// + public const int PARAM_TYPE_KEY = 0; + + /// + /// The parameter type for the Skein configuration block: 4 + /// + public const int PARAM_TYPE_CONFIG = 4; + + /// + /// The parameter type for a personalisation string: 8 + /// + public const int PARAM_TYPE_PERSONALISATION = 8; + + /// + /// The parameter type for a public key: 12 + /// + public const int PARAM_TYPE_PUBLIC_KEY = 12; + + /// + /// The parameter type for a key identifier string: 16 + /// + public const int PARAM_TYPE_KEY_IDENTIFIER = 16; + + /// + /// The parameter type for a nonce: 20 + /// + public const int PARAM_TYPE_NONCE = 20; + + /// + /// The parameter type for the message: 48 + /// + public const int PARAM_TYPE_MESSAGE = 48; + + /// + /// The parameter type for the output transformation: 63 + /// + public const int PARAM_TYPE_OUTPUT = 63; + + private IDictionary m_parameters; + + public SkeinParameters() + : this(new Dictionary()) + { + } + + private SkeinParameters(IDictionary parameters) + { + this.m_parameters = parameters; + } + + /// + /// Obtains a map of type (int) to value (byte[]) for the parameters tracked in this object. + /// + public IDictionary GetParameters() + { + return m_parameters; + } + + /// + /// Obtains the value of the key parameter, or null if not + /// set. + /// + /// The key. + public byte[] GetKey() + { + return CollectionUtilities.GetValueOrNull(m_parameters, PARAM_TYPE_KEY); + } + + /// + /// Obtains the value of the personalisation parameter, or + /// null if not set. + /// + public byte[] GetPersonalisation() + { + return CollectionUtilities.GetValueOrNull(m_parameters, PARAM_TYPE_PERSONALISATION); + } + + /// + /// Obtains the value of the public key parameter, or + /// null if not set. + /// + public byte[] GetPublicKey() + { + return CollectionUtilities.GetValueOrNull(m_parameters, PARAM_TYPE_PUBLIC_KEY); + } + + /// + /// Obtains the value of the key identifier parameter, or + /// null if not set. + /// + public byte[] GetKeyIdentifier() + { + return CollectionUtilities.GetValueOrNull(m_parameters, PARAM_TYPE_KEY_IDENTIFIER); + } + + /// + /// Obtains the value of the nonce parameter, or null if + /// not set. + /// + public byte[] GetNonce() + { + return CollectionUtilities.GetValueOrNull(m_parameters, PARAM_TYPE_NONCE); + } + + /// + /// A builder for . + /// + public class Builder + { + private Dictionary m_parameters; + + public Builder() + { + m_parameters = new Dictionary(); + } + + public Builder(IDictionary paramsMap) + { + m_parameters = new Dictionary(paramsMap); + } + + public Builder(SkeinParameters parameters) + : this(parameters.m_parameters) + { + } + + /// + /// Sets a parameters to apply to the Skein hash function. + /// + /// + /// Parameter types must be in the range 0,5..62, and cannot use the value 48 + /// (reserved for message body). + ///

+ /// Parameters with type < 48 are processed before + /// the message content, parameters with type > 48 + /// are processed after the message and prior to output. + /// + /// the type of the parameter, in the range 5..62. + /// the byte sequence of the parameter. + public Builder Set(int type, byte[] value) + { + if (value == null) + { + throw new ArgumentException("Parameter value must not be null."); + } + if ((type != PARAM_TYPE_KEY) + && (type <= PARAM_TYPE_CONFIG || type >= PARAM_TYPE_OUTPUT || type == PARAM_TYPE_MESSAGE)) + { + throw new ArgumentException("Parameter types must be in the range 0,5..47,49..62."); + } + if (type == PARAM_TYPE_CONFIG) + { + throw new ArgumentException("Parameter type " + PARAM_TYPE_CONFIG + + " is reserved for internal use."); + } + m_parameters.Add(type, value); + return this; + } + + ///

+ /// Sets the parameter. + /// + public Builder SetKey(byte[] key) + { + return Set(PARAM_TYPE_KEY, key); + } + + /// + /// Sets the parameter. + /// + public Builder SetPersonalisation(byte[] personalisation) + { + return Set(PARAM_TYPE_PERSONALISATION, personalisation); + } + + /// + /// Implements the recommended personalisation format for Skein defined in Section 4.11 of + /// the Skein 1.3 specification. + /// + /// + /// The format is YYYYMMDD email@address distinguisher, encoded to a byte + /// sequence using UTF-8 encoding. + /// + /// the date the personalised application of the Skein was defined. + /// the email address of the creation of the personalised application. + /// an arbitrary personalisation string distinguishing the application. + public Builder SetPersonalisation(DateTime date, string emailAddress, string distinguisher) + { + try + { + MemoryStream bout = new MemoryStream(); + using (var outBytes = new StreamWriter(bout, System.Text.Encoding.UTF8)) + { + outBytes.Write(date.ToString("YYYYMMDD", CultureInfo.InvariantCulture)); + outBytes.Write(" "); + outBytes.Write(emailAddress); + outBytes.Write(" "); + outBytes.Write(distinguisher); + } + return Set(PARAM_TYPE_PERSONALISATION, bout.ToArray()); + } + catch (IOException e) + { + throw new InvalidOperationException("Byte I/O failed.", e); + } + } + + /// + /// Sets the parameter. + /// + public Builder SetPublicKey(byte[] publicKey) + { + return Set(PARAM_TYPE_PUBLIC_KEY, publicKey); + } + + /// + /// Sets the parameter. + /// + public Builder SetKeyIdentifier(byte[] keyIdentifier) + { + return Set(PARAM_TYPE_KEY_IDENTIFIER, keyIdentifier); + } + + /// + /// Sets the parameter. + /// + public Builder SetNonce(byte[] nonce) + { + return Set(PARAM_TYPE_NONCE, nonce); + } + + /// + /// Constructs a new instance with the parameters provided to this + /// builder. + /// + public SkeinParameters Build() + { + return new SkeinParameters(m_parameters); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/SkeinParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/SkeinParameters.cs.meta new file mode 100644 index 000000000..258bb2a5e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/SkeinParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04b73b990c8ab224b97961b1dd1fb4f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Srp6GroupParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Srp6GroupParameters.cs new file mode 100644 index 000000000..f37abe61d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Srp6GroupParameters.cs @@ -0,0 +1,31 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public sealed class Srp6GroupParameters + { + private readonly BigInteger n, g; + + public Srp6GroupParameters(BigInteger N, BigInteger g) + { + this.n = N; + this.g = g; + } + + public BigInteger G + { + get { return g; } + } + + public BigInteger N + { + get { return n; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Srp6GroupParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Srp6GroupParameters.cs.meta new file mode 100644 index 000000000..345ab156b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/Srp6GroupParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04d30757713732143b4d9cc5087b8682 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/TweakableBlockCipherParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/TweakableBlockCipherParameters.cs new file mode 100644 index 000000000..53f0308c0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/TweakableBlockCipherParameters.cs @@ -0,0 +1,44 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + + /// + /// Parameters for tweakable block ciphers. + /// + public class TweakableBlockCipherParameters + : ICipherParameters + { + private readonly byte[] tweak; + private readonly KeyParameter key; + + public TweakableBlockCipherParameters(KeyParameter key, byte[] tweak) + { + this.key = key; + this.tweak = Arrays.Clone(tweak); + } + + /// + /// Gets the key. + /// + /// the key to use, or null to use the current key. + public KeyParameter Key + { + get { return key; } + } + + /// + /// Gets the tweak value. + /// + /// The tweak to use, or null to use the current tweak. + public byte[] Tweak + { + get { return tweak; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/TweakableBlockCipherParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/TweakableBlockCipherParameters.cs.meta new file mode 100644 index 000000000..5ea901ac2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/TweakableBlockCipherParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8535be3fd9fd37f4387792c8e64eb4b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X25519KeyGenerationParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X25519KeyGenerationParameters.cs new file mode 100644 index 000000000..718d57a19 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X25519KeyGenerationParameters.cs @@ -0,0 +1,19 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class X25519KeyGenerationParameters + : KeyGenerationParameters + { + public X25519KeyGenerationParameters(SecureRandom random) + : base(random, 255) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X25519KeyGenerationParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X25519KeyGenerationParameters.cs.meta new file mode 100644 index 000000000..fbae2b1a8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X25519KeyGenerationParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34b65ca852361294a88bedf107bfbb97 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X25519PrivateKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X25519PrivateKeyParameters.cs new file mode 100644 index 000000000..7d3edf339 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X25519PrivateKeyParameters.cs @@ -0,0 +1,118 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc7748; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public sealed class X25519PrivateKeyParameters + : AsymmetricKeyParameter + { + public static readonly int KeySize = X25519.ScalarSize; + public static readonly int SecretSize = X25519.PointSize; + + private readonly byte[] data = new byte[KeySize]; + + public X25519PrivateKeyParameters(SecureRandom random) + : base(true) + { + X25519.GeneratePrivateKey(random, data); + } + + public X25519PrivateKeyParameters(byte[] buf) + : this(Validate(buf), 0) + { + } + + public X25519PrivateKeyParameters(byte[] buf, int off) + : base(true) + { + Array.Copy(buf, off, data, 0, KeySize); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public X25519PrivateKeyParameters(ReadOnlySpan buf) + : base(true) + { + if (buf.Length != KeySize) + throw new ArgumentException("must have length " + KeySize, nameof(buf)); + + buf.CopyTo(data); + } +#endif + + public X25519PrivateKeyParameters(Stream input) + : base(true) + { + if (KeySize != Streams.ReadFully(input, data)) + throw new EndOfStreamException("EOF encountered in middle of X25519 private key"); + } + + public void Encode(byte[] buf, int off) + { + Array.Copy(data, 0, buf, off, KeySize); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Encode(Span buf) + { + data.CopyTo(buf); + } +#endif + + public byte[] GetEncoded() + { + return Arrays.Clone(data); + } + + public X25519PublicKeyParameters GeneratePublicKey() + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span publicKey = stackalloc byte[X25519.PointSize]; + X25519.GeneratePublicKey(data, publicKey); + return new X25519PublicKeyParameters(publicKey); +#else + byte[] publicKey = new byte[X25519.PointSize]; + X25519.GeneratePublicKey(data, 0, publicKey, 0); + return new X25519PublicKeyParameters(publicKey, 0); +#endif + } + + public void GenerateSecret(X25519PublicKeyParameters publicKey, byte[] buf, int off) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + GenerateSecret(publicKey, buf.AsSpan(off)); +#else + byte[] encoded = new byte[X25519.PointSize]; + publicKey.Encode(encoded, 0); + if (!X25519.CalculateAgreement(data, 0, encoded, 0, buf, off)) + throw new InvalidOperationException("X25519 agreement failed"); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void GenerateSecret(X25519PublicKeyParameters publicKey, Span buf) + { + Span encoded = stackalloc byte[X25519.PointSize]; + publicKey.Encode(encoded); + if (!X25519.CalculateAgreement(data, encoded, buf)) + throw new InvalidOperationException("X25519 agreement failed"); + } +#endif + + private static byte[] Validate(byte[] buf) + { + if (buf.Length != KeySize) + throw new ArgumentException("must have length " + KeySize, nameof(buf)); + + return buf; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X25519PrivateKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X25519PrivateKeyParameters.cs.meta new file mode 100644 index 000000000..c907832f3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X25519PrivateKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a01dc8b4999799642ba9fc316dccb701 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X25519PublicKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X25519PublicKeyParameters.cs new file mode 100644 index 000000000..21ffbc88e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X25519PublicKeyParameters.cs @@ -0,0 +1,75 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc7748; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public sealed class X25519PublicKeyParameters + : AsymmetricKeyParameter + { + public static readonly int KeySize = X25519.PointSize; + + private readonly byte[] data = new byte[KeySize]; + + public X25519PublicKeyParameters(byte[] buf) + : this(Validate(buf), 0) + { + } + + public X25519PublicKeyParameters(byte[] buf, int off) + : base(false) + { + Array.Copy(buf, off, data, 0, KeySize); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public X25519PublicKeyParameters(ReadOnlySpan buf) + : base(false) + { + if (buf.Length != KeySize) + throw new ArgumentException("must have length " + KeySize, nameof(buf)); + + buf.CopyTo(data); + } +#endif + + public X25519PublicKeyParameters(Stream input) + : base(false) + { + if (KeySize != Streams.ReadFully(input, data)) + throw new EndOfStreamException("EOF encountered in middle of X25519 public key"); + } + + public void Encode(byte[] buf, int off) + { + Array.Copy(data, 0, buf, off, KeySize); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Encode(Span buf) + { + data.CopyTo(buf); + } +#endif + + public byte[] GetEncoded() + { + return Arrays.Clone(data); + } + + private static byte[] Validate(byte[] buf) + { + if (buf.Length != KeySize) + throw new ArgumentException("must have length " + KeySize, nameof(buf)); + + return buf; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X25519PublicKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X25519PublicKeyParameters.cs.meta new file mode 100644 index 000000000..4e952bff6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X25519PublicKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: adb017b96c708f947bdfd05e8ed09197 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X448KeyGenerationParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X448KeyGenerationParameters.cs new file mode 100644 index 000000000..87749fa83 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X448KeyGenerationParameters.cs @@ -0,0 +1,19 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public class X448KeyGenerationParameters + : KeyGenerationParameters + { + public X448KeyGenerationParameters(SecureRandom random) + : base(random, 448) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X448KeyGenerationParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X448KeyGenerationParameters.cs.meta new file mode 100644 index 000000000..67b6f3b8d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X448KeyGenerationParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 28e1826bc7c435c4c90c3a42d42b3641 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X448PrivateKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X448PrivateKeyParameters.cs new file mode 100644 index 000000000..e63977e5c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X448PrivateKeyParameters.cs @@ -0,0 +1,118 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc7748; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public sealed class X448PrivateKeyParameters + : AsymmetricKeyParameter + { + public static readonly int KeySize = X448.ScalarSize; + public static readonly int SecretSize = X448.PointSize; + + private readonly byte[] data = new byte[KeySize]; + + public X448PrivateKeyParameters(SecureRandom random) + : base(true) + { + X448.GeneratePrivateKey(random, data); + } + + public X448PrivateKeyParameters(byte[] buf) + : this(Validate(buf), 0) + { + } + + public X448PrivateKeyParameters(byte[] buf, int off) + : base(true) + { + Array.Copy(buf, off, data, 0, KeySize); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public X448PrivateKeyParameters(ReadOnlySpan buf) + : base(true) + { + if (buf.Length != KeySize) + throw new ArgumentException("must have length " + KeySize, nameof(buf)); + + buf.CopyTo(data); + } +#endif + + public X448PrivateKeyParameters(Stream input) + : base(true) + { + if (KeySize != Streams.ReadFully(input, data)) + throw new EndOfStreamException("EOF encountered in middle of X448 private key"); + } + + public void Encode(byte[] buf, int off) + { + Array.Copy(data, 0, buf, off, KeySize); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Encode(Span buf) + { + data.CopyTo(buf); + } +#endif + + public byte[] GetEncoded() + { + return Arrays.Clone(data); + } + + public X448PublicKeyParameters GeneratePublicKey() + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span publicKey = stackalloc byte[X448.PointSize]; + X448.GeneratePublicKey(data, publicKey); + return new X448PublicKeyParameters(publicKey); +#else + byte[] publicKey = new byte[X448.PointSize]; + X448.GeneratePublicKey(data, 0, publicKey, 0); + return new X448PublicKeyParameters(publicKey, 0); +#endif + } + + public void GenerateSecret(X448PublicKeyParameters publicKey, byte[] buf, int off) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + GenerateSecret(publicKey, buf.AsSpan(off)); +#else + byte[] encoded = new byte[X448.PointSize]; + publicKey.Encode(encoded, 0); + if (!X448.CalculateAgreement(data, 0, encoded, 0, buf, off)) + throw new InvalidOperationException("X448 agreement failed"); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void GenerateSecret(X448PublicKeyParameters publicKey, Span buf) + { + Span encoded = stackalloc byte[X448.PointSize]; + publicKey.Encode(encoded); + if (!X448.CalculateAgreement(data, encoded, buf)) + throw new InvalidOperationException("X448 agreement failed"); + } +#endif + + private static byte[] Validate(byte[] buf) + { + if (buf.Length != KeySize) + throw new ArgumentException("must have length " + KeySize, nameof(buf)); + + return buf; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X448PrivateKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X448PrivateKeyParameters.cs.meta new file mode 100644 index 000000000..ffd26a69c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X448PrivateKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9bfb9abfbe5e9144192249ae8d52c553 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X448PublicKeyParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X448PublicKeyParameters.cs new file mode 100644 index 000000000..c2e40146f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X448PublicKeyParameters.cs @@ -0,0 +1,75 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc7748; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters +{ + public sealed class X448PublicKeyParameters + : AsymmetricKeyParameter + { + public static readonly int KeySize = X448.PointSize; + + private readonly byte[] data = new byte[KeySize]; + + public X448PublicKeyParameters(byte[] buf) + : this(Validate(buf), 0) + { + } + + public X448PublicKeyParameters(byte[] buf, int off) + : base(false) + { + Array.Copy(buf, off, data, 0, KeySize); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public X448PublicKeyParameters(ReadOnlySpan buf) + : base(false) + { + if (buf.Length != KeySize) + throw new ArgumentException("must have length " + KeySize, nameof(buf)); + + buf.CopyTo(data); + } +#endif + + public X448PublicKeyParameters(Stream input) + : base(false) + { + if (KeySize != Streams.ReadFully(input, data)) + throw new EndOfStreamException("EOF encountered in middle of X448 public key"); + } + + public void Encode(byte[] buf, int off) + { + Array.Copy(data, 0, buf, off, KeySize); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Encode(Span buf) + { + data.CopyTo(buf); + } +#endif + + public byte[] GetEncoded() + { + return Arrays.Clone(data); + } + + private static byte[] Validate(byte[] buf) + { + if (buf.Length != KeySize) + throw new ArgumentException("must have length " + KeySize, nameof(buf)); + + return buf; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X448PublicKeyParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X448PublicKeyParameters.cs.meta new file mode 100644 index 000000000..3e0f9144e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/parameters/X448PublicKeyParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2f1678e519b7aad4bb9fa3e9eadd39c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng.meta new file mode 100644 index 000000000..90986746c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0a4df581a93a3a246848f91de3e20edf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/BasicEntropySourceProvider.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/BasicEntropySourceProvider.cs new file mode 100644 index 000000000..d5f79bccd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/BasicEntropySourceProvider.cs @@ -0,0 +1,90 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng +{ + /** + * An EntropySourceProvider where entropy generation is based on a SecureRandom output using SecureRandom.generateSeed(). + */ + public class BasicEntropySourceProvider + : IEntropySourceProvider + { + private readonly SecureRandom mSecureRandom; + private readonly bool mPredictionResistant; + + /** + * Create a entropy source provider based on the passed in SecureRandom. + * + * @param secureRandom the SecureRandom to base EntropySource construction on. + * @param isPredictionResistant boolean indicating if the SecureRandom is based on prediction resistant entropy or not (true if it is). + */ + public BasicEntropySourceProvider(SecureRandom secureRandom, bool isPredictionResistant) + { + if (secureRandom == null) + throw new ArgumentNullException(nameof(secureRandom)); + + mSecureRandom = secureRandom; + mPredictionResistant = isPredictionResistant; + } + + /** + * Return an entropy source that will create bitsRequired bits of entropy on + * each invocation of getEntropy(). + * + * @param bitsRequired size (in bits) of entropy to be created by the provided source. + * @return an EntropySource that generates bitsRequired bits of entropy on each call to its getEntropy() method. + */ + public IEntropySource Get(int bitsRequired) + { + return new BasicEntropySource(mSecureRandom, mPredictionResistant, bitsRequired); + } + + private class BasicEntropySource + : IEntropySource + { + private readonly SecureRandom mSecureRandom; + private readonly bool mPredictionResistant; + private readonly int mEntropySize; + + internal BasicEntropySource(SecureRandom secureRandom, bool predictionResistant, int entropySize) + { + if (secureRandom == null) + throw new ArgumentNullException(nameof(secureRandom)); + + this.mSecureRandom = secureRandom; + this.mPredictionResistant = predictionResistant; + this.mEntropySize = entropySize; + } + + bool IEntropySource.IsPredictionResistant + { + get { return mPredictionResistant; } + } + + byte[] IEntropySource.GetEntropy() + { + // TODO[FIPS] Not all SecureRandom implementations are considered valid entropy sources + return SecureRandom.GetNextBytes(mSecureRandom, (mEntropySize + 7) / 8); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int IEntropySource.GetEntropy(Span output) + { + int length = (mEntropySize + 7) / 8; + mSecureRandom.NextBytes(output[..length]); + return length; + } +#endif + + int IEntropySource.EntropySize + { + get { return mEntropySize; } + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/BasicEntropySourceProvider.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/BasicEntropySourceProvider.cs.meta new file mode 100644 index 000000000..94715764e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/BasicEntropySourceProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f55c9b6e8b6c844ca193d3ee8949628 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/CryptoApiEntropySourceProvider.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/CryptoApiEntropySourceProvider.cs new file mode 100644 index 000000000..a8350d3f9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/CryptoApiEntropySourceProvider.cs @@ -0,0 +1,80 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Security.Cryptography; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng +{ + public class CryptoApiEntropySourceProvider + : IEntropySourceProvider + { + private readonly RandomNumberGenerator mRng; + private readonly bool mPredictionResistant; + + public CryptoApiEntropySourceProvider() + : this(RandomNumberGenerator.Create(), true) + { + } + + public CryptoApiEntropySourceProvider(RandomNumberGenerator rng, bool isPredictionResistant) + { + if (rng == null) + throw new ArgumentNullException("rng"); + + mRng = rng; + mPredictionResistant = isPredictionResistant; + } + + public IEntropySource Get(int bitsRequired) + { + return new CryptoApiEntropySource(mRng, mPredictionResistant, bitsRequired); + } + + private class CryptoApiEntropySource + : IEntropySource + { + private readonly RandomNumberGenerator mRng; + private readonly bool mPredictionResistant; + private readonly int mEntropySize; + + internal CryptoApiEntropySource(RandomNumberGenerator rng, bool predictionResistant, int entropySize) + { + this.mRng = rng; + this.mPredictionResistant = predictionResistant; + this.mEntropySize = entropySize; + } + + #region IEntropySource Members + + bool IEntropySource.IsPredictionResistant + { + get { return mPredictionResistant; } + } + + byte[] IEntropySource.GetEntropy() + { + byte[] result = new byte[(mEntropySize + 7) / 8]; + mRng.GetBytes(result); + return result; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int IEntropySource.GetEntropy(Span output) + { + int length = (mEntropySize + 7) / 8; + mRng.GetBytes(output[..length]); + return length; + } +#endif + + int IEntropySource.EntropySize + { + get { return mEntropySize; } + } + + #endregion + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/CryptoApiEntropySourceProvider.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/CryptoApiEntropySourceProvider.cs.meta new file mode 100644 index 000000000..785dec232 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/CryptoApiEntropySourceProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 25ec2a0632ecc8449b1d88c41c111fe2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/CryptoApiRandomGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/CryptoApiRandomGenerator.cs new file mode 100644 index 000000000..c2816a08f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/CryptoApiRandomGenerator.cs @@ -0,0 +1,94 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Security.Cryptography; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng +{ + /// + /// Uses RandomNumberGenerator.Create() to get randomness generator + /// + public sealed class CryptoApiRandomGenerator + : IRandomGenerator, IDisposable + { + private readonly RandomNumberGenerator m_randomNumberGenerator; + + public CryptoApiRandomGenerator() + : this(RandomNumberGenerator.Create()) + { + } + + public CryptoApiRandomGenerator(RandomNumberGenerator randomNumberGenerator) + { + m_randomNumberGenerator = randomNumberGenerator ?? + throw new ArgumentNullException(nameof(randomNumberGenerator)); + } + + #region IRandomGenerator Members + + public void AddSeedMaterial(byte[] seed) + { + // We don't care about the seed + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void AddSeedMaterial(ReadOnlySpan inSeed) + { + // We don't care about the seed + } +#endif + + public void AddSeedMaterial(long seed) + { + // We don't care about the seed + } + + public void NextBytes(byte[] bytes) + { + m_randomNumberGenerator.GetBytes(bytes); + } + + public void NextBytes(byte[] bytes, int start, int len) + { +#if NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_0_OR_GREATER + m_randomNumberGenerator.GetBytes(bytes, start, len); +#else + if (start < 0) + throw new ArgumentException("Start offset cannot be negative", "start"); + if (bytes.Length < (start + len)) + throw new ArgumentException("Byte array too small for requested offset and length"); + + if (bytes.Length == len && start == 0) + { + NextBytes(bytes); + } + else + { + byte[] tmpBuf = new byte[len]; + NextBytes(tmpBuf); + Array.Copy(tmpBuf, 0, bytes, start, len); + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void NextBytes(Span bytes) + { + m_randomNumberGenerator.GetBytes(bytes); + } +#endif + + #endregion + + #region IDisposable Members + + public void Dispose() + { + m_randomNumberGenerator.Dispose(); + } + + #endregion + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/CryptoApiRandomGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/CryptoApiRandomGenerator.cs.meta new file mode 100644 index 000000000..74923c7c8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/CryptoApiRandomGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ccbe3ba15c23a8a4d94f9d684f23a748 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/DigestRandomGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/DigestRandomGenerator.cs new file mode 100644 index 000000000..adf57d362 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/DigestRandomGenerator.cs @@ -0,0 +1,187 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng +{ + /** + * Random generation based on the digest with counter. Calling AddSeedMaterial will + * always increase the entropy of the hash. + *

+ * Internal access to the digest is synchronized so a single one of these can be shared. + *

+ */ + public sealed class DigestRandomGenerator + : IRandomGenerator + { + private const long CYCLE_COUNT = 10; + + private long stateCounter; + private long seedCounter; + private IDigest digest; + private byte[] state; + private byte[] seed; + + public DigestRandomGenerator(IDigest digest) + { + this.digest = digest; + + this.seed = new byte[digest.GetDigestSize()]; + this.seedCounter = 1; + + this.state = new byte[digest.GetDigestSize()]; + this.stateCounter = 1; + } + + public void AddSeedMaterial(byte[] inSeed) + { + lock (this) + { + if (!Arrays.IsNullOrEmpty(inSeed)) + { + DigestUpdate(inSeed); + } + DigestUpdate(seed); + DigestDoFinal(seed); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void AddSeedMaterial(ReadOnlySpan inSeed) + { + lock (this) + { + if (!inSeed.IsEmpty) + { + DigestUpdate(inSeed); + } + DigestUpdate(seed); + DigestDoFinal(seed); + } + } +#endif + + public void AddSeedMaterial(long rSeed) + { + lock (this) + { + DigestAddCounter(rSeed); + DigestUpdate(seed); + DigestDoFinal(seed); + } + } + + public void NextBytes(byte[] bytes) + { + NextBytes(bytes, 0, bytes.Length); + } + + public void NextBytes(byte[] bytes, int start, int len) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + NextBytes(bytes.AsSpan(start, len)); +#else + lock (this) + { + int stateOff = 0; + + GenerateState(); + + int end = start + len; + for (int i = start; i < end; ++i) + { + if (stateOff == state.Length) + { + GenerateState(); + stateOff = 0; + } + bytes[i] = state[stateOff++]; + } + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void NextBytes(Span bytes) + { + lock (this) + { + int stateOff = 0; + + GenerateState(); + + for (int i = 0; i < bytes.Length; ++i) + { + if (stateOff == state.Length) + { + GenerateState(); + stateOff = 0; + } + bytes[i] = state[stateOff++]; + } + } + } +#endif + + private void CycleSeed() + { + DigestUpdate(seed); + DigestAddCounter(seedCounter++); + DigestDoFinal(seed); + } + + private void GenerateState() + { + DigestAddCounter(stateCounter++); + DigestUpdate(state); + DigestUpdate(seed); + DigestDoFinal(state); + + if ((stateCounter % CYCLE_COUNT) == 0) + { + CycleSeed(); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void DigestAddCounter(long seedVal) + { + Span bytes = stackalloc byte[8]; + Pack.UInt64_To_LE((ulong)seedVal, bytes); + digest.BlockUpdate(bytes); + } + + private void DigestUpdate(ReadOnlySpan inSeed) + { + digest.BlockUpdate(inSeed); + } + + private void DigestDoFinal(Span result) + { + digest.DoFinal(result); + } +#else + private void DigestAddCounter(long seedVal) + { + byte[] bytes = new byte[8]; + Pack.UInt64_To_LE((ulong)seedVal, bytes); + digest.BlockUpdate(bytes, 0, bytes.Length); + } + + private void DigestUpdate(byte[] inSeed) + { + digest.BlockUpdate(inSeed, 0, inSeed.Length); + } + + private void DigestDoFinal(byte[] result) + { + digest.DoFinal(result, 0); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/DigestRandomGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/DigestRandomGenerator.cs.meta new file mode 100644 index 000000000..416998620 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/DigestRandomGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7979612bf0f2722478158ecadb846f1d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/EntropyUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/EntropyUtilities.cs new file mode 100644 index 000000000..a0818027b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/EntropyUtilities.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng +{ + public abstract class EntropyUtilities + { + /** + * Generate numBytes worth of entropy from the passed in entropy source. + * + * @param entropySource the entropy source to request the data from. + * @param numBytes the number of bytes of entropy requested. + * @return a byte array populated with the random data. + */ + public static byte[] GenerateSeed(IEntropySource entropySource, int numBytes) + { + byte[] bytes = new byte[numBytes]; + int count = 0; + while (count < numBytes) + { + byte[] entropy = entropySource.GetEntropy(); + int toCopy = System.Math.Min(bytes.Length, numBytes - count); + Array.Copy(entropy, 0, bytes, count, toCopy); + count += toCopy; + } + return bytes; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/EntropyUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/EntropyUtilities.cs.meta new file mode 100644 index 000000000..862ddfdcf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/EntropyUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49e236d42630bab4fa9185520ecc86be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/IDrbgProvider.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/IDrbgProvider.cs new file mode 100644 index 000000000..1f05d88c9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/IDrbgProvider.cs @@ -0,0 +1,15 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng.Drbg; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng +{ + internal interface IDrbgProvider + { + ISP80090Drbg Get(IEntropySource entropySource); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/IDrbgProvider.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/IDrbgProvider.cs.meta new file mode 100644 index 000000000..0f39ba86b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/IDrbgProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d4a6b6d841dbe6e4d9b5e05bbb356b42 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/IRandomGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/IRandomGenerator.cs new file mode 100644 index 000000000..35f40874d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/IRandomGenerator.cs @@ -0,0 +1,38 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng +{ + /// Generic interface for objects generating random bytes. + public interface IRandomGenerator + { + /// Add more seed material to the generator. + /// A byte array to be mixed into the generator's state. + void AddSeedMaterial(byte[] seed); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + void AddSeedMaterial(ReadOnlySpan seed); +#endif + + /// Add more seed material to the generator. + /// A long value to be mixed into the generator's state. + void AddSeedMaterial(long seed); + + /// Fill byte array with random values. + /// Array to be filled. + void NextBytes(byte[] bytes); + + /// Fill byte array with random values. + /// Array to receive bytes. + /// Index to start filling at. + /// Length of segment to fill. + void NextBytes(byte[] bytes, int start, int len); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + void NextBytes(Span bytes); +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/IRandomGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/IRandomGenerator.cs.meta new file mode 100644 index 000000000..49efec883 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/IRandomGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4455377f4c3b6cf4fb000aca48c08ab8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/ReversedWindowGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/ReversedWindowGenerator.cs new file mode 100644 index 000000000..3b1d777ff --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/ReversedWindowGenerator.cs @@ -0,0 +1,2 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/ReversedWindowGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/ReversedWindowGenerator.cs.meta new file mode 100644 index 000000000..e1f780f57 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/ReversedWindowGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d7aa93dd4975eb04d9800c845c274927 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/SP800SecureRandom.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/SP800SecureRandom.cs new file mode 100644 index 000000000..2a1336dca --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/SP800SecureRandom.cs @@ -0,0 +1,135 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng.Drbg; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng +{ + public class SP800SecureRandom + : SecureRandom + { + private readonly IDrbgProvider mDrbgProvider; + private readonly bool mPredictionResistant; + private readonly SecureRandom mRandomSource; + private readonly IEntropySource mEntropySource; + + private ISP80090Drbg mDrbg; + + internal SP800SecureRandom(SecureRandom randomSource, IEntropySource entropySource, IDrbgProvider drbgProvider, + bool predictionResistant) + : base(null) + { + this.mRandomSource = randomSource; + this.mEntropySource = entropySource; + this.mDrbgProvider = drbgProvider; + this.mPredictionResistant = predictionResistant; + } + + public override void SetSeed(byte[] seed) + { + lock (this) + { + if (mRandomSource != null) + { + this.mRandomSource.SetSeed(seed); + } + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void SetSeed(Span seed) + { + lock (this) + { + if (mRandomSource != null) + { + this.mRandomSource.SetSeed(seed); + } + } + } +#endif + + public override void SetSeed(long seed) + { + lock (this) + { + // this will happen when SecureRandom() is created + if (mRandomSource != null) + { + this.mRandomSource.SetSeed(seed); + } + } + } + + public override void NextBytes(byte[] bytes) + { + NextBytes(bytes, 0, bytes.Length); + } + + public override void NextBytes(byte[] buf, int off, int len) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + NextBytes(buf.AsSpan(off, len)); +#else + lock (this) + { + if (mDrbg == null) + { + mDrbg = mDrbgProvider.Get(mEntropySource); + } + + // check if a reseed is required... + if (mDrbg.Generate(buf, off, len, null, mPredictionResistant) < 0) + { + mDrbg.Reseed(null); + mDrbg.Generate(buf, off, len, null, mPredictionResistant); + } + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void NextBytes(Span buffer) + { + lock (this) + { + if (mDrbg == null) + { + mDrbg = mDrbgProvider.Get(mEntropySource); + } + + // check if a reseed is required... + if (mDrbg.Generate(buffer, mPredictionResistant) < 0) + { + mDrbg.Reseed(ReadOnlySpan.Empty); + mDrbg.Generate(buffer, mPredictionResistant); + } + } + } +#endif + + public override byte[] GenerateSeed(int numBytes) + { + return EntropyUtilities.GenerateSeed(mEntropySource, numBytes); + } + + /// Force a reseed of the DRBG. + /// optional additional input + public virtual void Reseed(byte[] additionalInput) + { + lock (this) + { + if (mDrbg == null) + { + mDrbg = mDrbgProvider.Get(mEntropySource); + } + + mDrbg.Reseed(additionalInput); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/SP800SecureRandom.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/SP800SecureRandom.cs.meta new file mode 100644 index 000000000..c0ad78a78 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/SP800SecureRandom.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 065a9c94a09b9e14faf04e78e06d355c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/SP800SecureRandomBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/SP800SecureRandomBuilder.cs new file mode 100644 index 000000000..e6a8be1d0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/SP800SecureRandomBuilder.cs @@ -0,0 +1,215 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng.Drbg; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng +{ + /** + * Builder class for making SecureRandom objects based on SP 800-90A Deterministic Random Bit Generators (DRBG). + */ + public class SP800SecureRandomBuilder + { + private readonly SecureRandom mRandom; + private readonly IEntropySourceProvider mEntropySourceProvider; + + private byte[] mPersonalizationString = null; + private int mSecurityStrength = 256; + private int mEntropyBitsRequired = 256; + + /** + * Basic constructor, creates a builder using an EntropySourceProvider based on the default SecureRandom with + * predictionResistant set to false. + *

+ * Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + * the default SecureRandom does for its generateSeed() call. + *

+ */ + public SP800SecureRandomBuilder() + : this(CryptoServicesRegistrar.GetSecureRandom(), false) + { + } + + /** + * Construct a builder with an EntropySourceProvider based on the passed in SecureRandom and the passed in value + * for prediction resistance. + *

+ * Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + * the passed in SecureRandom does for its generateSeed() call. + *

+ * @param entropySource + * @param predictionResistant + */ + public SP800SecureRandomBuilder(SecureRandom entropySource, bool predictionResistant) + { + if (entropySource == null) + throw new ArgumentNullException(nameof(entropySource)); + + this.mRandom = entropySource; + this.mEntropySourceProvider = new BasicEntropySourceProvider(entropySource, predictionResistant); + } + + /** + * Create a builder which makes creates the SecureRandom objects from a specified entropy source provider. + *

+ * Note: If this constructor is used any calls to setSeed() in the resulting SecureRandom will be ignored. + *

+ * @param entropySourceProvider a provider of EntropySource objects. + */ + public SP800SecureRandomBuilder(IEntropySourceProvider entropySourceProvider) + { + this.mRandom = null; + this.mEntropySourceProvider = entropySourceProvider; + } + + /** + * Set the personalization string for DRBG SecureRandoms created by this builder + * @param personalizationString the personalisation string for the underlying DRBG. + * @return the current builder. + */ + public SP800SecureRandomBuilder SetPersonalizationString(byte[] personalizationString) + { + this.mPersonalizationString = personalizationString; + return this; + } + + /** + * Set the security strength required for DRBGs used in building SecureRandom objects. + * + * @param securityStrength the security strength (in bits) + * @return the current builder. + */ + public SP800SecureRandomBuilder SetSecurityStrength(int securityStrength) + { + this.mSecurityStrength = securityStrength; + return this; + } + + /** + * Set the amount of entropy bits required for seeding and reseeding DRBGs used in building SecureRandom objects. + * + * @param entropyBitsRequired the number of bits of entropy to be requested from the entropy source on each seed/reseed. + * @return the current builder. + */ + public SP800SecureRandomBuilder SetEntropyBitsRequired(int entropyBitsRequired) + { + this.mEntropyBitsRequired = entropyBitsRequired; + return this; + } + + /** + * Build a SecureRandom based on a SP 800-90A Hash DRBG. + * + * @param digest digest algorithm to use in the DRBG underneath the SecureRandom. + * @param nonce nonce value to use in DRBG construction. + * @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + * @return a SecureRandom supported by a Hash DRBG. + */ + public SP800SecureRandom BuildHash(IDigest digest, byte[] nonce, bool predictionResistant) + { + return new SP800SecureRandom(mRandom, mEntropySourceProvider.Get(mEntropyBitsRequired), + new HashDrbgProvider(digest, nonce, mPersonalizationString, mSecurityStrength), predictionResistant); + } + + /** + * Build a SecureRandom based on a SP 800-90A CTR DRBG. + * + * @param cipher the block cipher to base the DRBG on. + * @param keySizeInBits key size in bits to be used with the block cipher. + * @param nonce nonce value to use in DRBG construction. + * @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + * @return a SecureRandom supported by a CTR DRBG. + */ + public SP800SecureRandom BuildCtr(IBlockCipher cipher, int keySizeInBits, byte[] nonce, bool predictionResistant) + { + return new SP800SecureRandom(mRandom, mEntropySourceProvider.Get(mEntropyBitsRequired), + new CtrDrbgProvider(cipher, keySizeInBits, nonce, mPersonalizationString, mSecurityStrength), predictionResistant); + } + + /** + * Build a SecureRandom based on a SP 800-90A HMAC DRBG. + * + * @param hMac HMAC algorithm to use in the DRBG underneath the SecureRandom. + * @param nonce nonce value to use in DRBG construction. + * @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + * @return a SecureRandom supported by a HMAC DRBG. + */ + public SP800SecureRandom BuildHMac(IMac hMac, byte[] nonce, bool predictionResistant) + { + return new SP800SecureRandom(mRandom, mEntropySourceProvider.Get(mEntropyBitsRequired), + new HMacDrbgProvider(hMac, nonce, mPersonalizationString, mSecurityStrength), predictionResistant); + } + + private class HashDrbgProvider + : IDrbgProvider + { + private readonly IDigest mDigest; + private readonly byte[] mNonce; + private readonly byte[] mPersonalizationString; + private readonly int mSecurityStrength; + + public HashDrbgProvider(IDigest digest, byte[] nonce, byte[] personalizationString, int securityStrength) + { + this.mDigest = digest; + this.mNonce = nonce; + this.mPersonalizationString = personalizationString; + this.mSecurityStrength = securityStrength; + } + + public ISP80090Drbg Get(IEntropySource entropySource) + { + return new HashSP800Drbg(mDigest, mSecurityStrength, entropySource, mPersonalizationString, mNonce); + } + } + + private class HMacDrbgProvider + : IDrbgProvider + { + private readonly IMac mHMac; + private readonly byte[] mNonce; + private readonly byte[] mPersonalizationString; + private readonly int mSecurityStrength; + + public HMacDrbgProvider(IMac hMac, byte[] nonce, byte[] personalizationString, int securityStrength) + { + this.mHMac = hMac; + this.mNonce = nonce; + this.mPersonalizationString = personalizationString; + this.mSecurityStrength = securityStrength; + } + + public ISP80090Drbg Get(IEntropySource entropySource) + { + return new HMacSP800Drbg(mHMac, mSecurityStrength, entropySource, mPersonalizationString, mNonce); + } + } + + private class CtrDrbgProvider + : IDrbgProvider + { + private readonly IBlockCipher mBlockCipher; + private readonly int mKeySizeInBits; + private readonly byte[] mNonce; + private readonly byte[] mPersonalizationString; + private readonly int mSecurityStrength; + + public CtrDrbgProvider(IBlockCipher blockCipher, int keySizeInBits, byte[] nonce, byte[] personalizationString, int securityStrength) + { + this.mBlockCipher = blockCipher; + this.mKeySizeInBits = keySizeInBits; + this.mNonce = nonce; + this.mPersonalizationString = personalizationString; + this.mSecurityStrength = securityStrength; + } + + public ISP80090Drbg Get(IEntropySource entropySource) + { + return new CtrSP800Drbg(mBlockCipher, mKeySizeInBits, mSecurityStrength, entropySource, mPersonalizationString, mNonce); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/SP800SecureRandomBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/SP800SecureRandomBuilder.cs.meta new file mode 100644 index 000000000..708e82b57 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/SP800SecureRandomBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c0226b1743b2ec34a8fdaf4c0c3017eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/VMPCRandomGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/VMPCRandomGenerator.cs new file mode 100644 index 000000000..fad4d0029 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/VMPCRandomGenerator.cs @@ -0,0 +1,144 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng +{ + public sealed class VmpcRandomGenerator + : IRandomGenerator + { + /// + /// Permutation generated by code: + /// + /// // First 1850 fractional digit of Pi number. + /// byte[] key = new BigInteger("14159265358979323846...5068006422512520511").ToByteArray(); + /// s = 0; + /// P = new byte[256]; + /// for (int i = 0; i < 256; i++) + /// { + /// P[i] = (byte) i; + /// } + /// for (int m = 0; m < 768; m++) + /// { + /// s = P[(s + P[m & 0xff] + key[m % key.length]) & 0xff]; + /// byte temp = P[m & 0xff]; + /// P[m & 0xff] = P[s & 0xff]; + /// P[s & 0xff] = temp; + /// } + /// + private readonly byte[] P = + { + 0xbb, 0x2c, 0x62, 0x7f, 0xb5, 0xaa, 0xd4, 0x0d, 0x81, 0xfe, 0xb2, 0x82, 0xcb, 0xa0, 0xa1, 0x08, + 0x18, 0x71, 0x56, 0xe8, 0x49, 0x02, 0x10, 0xc4, 0xde, 0x35, 0xa5, 0xec, 0x80, 0x12, 0xb8, 0x69, + 0xda, 0x2f, 0x75, 0xcc, 0xa2, 0x09, 0x36, 0x03, 0x61, 0x2d, 0xfd, 0xe0, 0xdd, 0x05, 0x43, 0x90, + 0xad, 0xc8, 0xe1, 0xaf, 0x57, 0x9b, 0x4c, 0xd8, 0x51, 0xae, 0x50, 0x85, 0x3c, 0x0a, 0xe4, 0xf3, + 0x9c, 0x26, 0x23, 0x53, 0xc9, 0x83, 0x97, 0x46, 0xb1, 0x99, 0x64, 0x31, 0x77, 0xd5, 0x1d, 0xd6, + 0x78, 0xbd, 0x5e, 0xb0, 0x8a, 0x22, 0x38, 0xf8, 0x68, 0x2b, 0x2a, 0xc5, 0xd3, 0xf7, 0xbc, 0x6f, + 0xdf, 0x04, 0xe5, 0x95, 0x3e, 0x25, 0x86, 0xa6, 0x0b, 0x8f, 0xf1, 0x24, 0x0e, 0xd7, 0x40, 0xb3, + 0xcf, 0x7e, 0x06, 0x15, 0x9a, 0x4d, 0x1c, 0xa3, 0xdb, 0x32, 0x92, 0x58, 0x11, 0x27, 0xf4, 0x59, + 0xd0, 0x4e, 0x6a, 0x17, 0x5b, 0xac, 0xff, 0x07, 0xc0, 0x65, 0x79, 0xfc, 0xc7, 0xcd, 0x76, 0x42, + 0x5d, 0xe7, 0x3a, 0x34, 0x7a, 0x30, 0x28, 0x0f, 0x73, 0x01, 0xf9, 0xd1, 0xd2, 0x19, 0xe9, 0x91, + 0xb9, 0x5a, 0xed, 0x41, 0x6d, 0xb4, 0xc3, 0x9e, 0xbf, 0x63, 0xfa, 0x1f, 0x33, 0x60, 0x47, 0x89, + 0xf0, 0x96, 0x1a, 0x5f, 0x93, 0x3d, 0x37, 0x4b, 0xd9, 0xa8, 0xc1, 0x1b, 0xf6, 0x39, 0x8b, 0xb7, + 0x0c, 0x20, 0xce, 0x88, 0x6e, 0xb6, 0x74, 0x8e, 0x8d, 0x16, 0x29, 0xf2, 0x87, 0xf5, 0xeb, 0x70, + 0xe3, 0xfb, 0x55, 0x9f, 0xc6, 0x44, 0x4a, 0x45, 0x7d, 0xe2, 0x6b, 0x5c, 0x6c, 0x66, 0xa9, 0x8c, + 0xee, 0x84, 0x13, 0xa7, 0x1e, 0x9d, 0xdc, 0x67, 0x48, 0xba, 0x2e, 0xe6, 0xa4, 0xab, 0x7c, 0x94, + 0x00, 0x21, 0xef, 0xea, 0xbe, 0xca, 0x72, 0x4f, 0x52, 0x98, 0x3f, 0xc2, 0x14, 0x7b, 0x3b, 0x54, + }; + + /// Value generated in the same way as P. + private byte s = 0xbe; + private byte n = 0; + + public VmpcRandomGenerator() + { + } + + public void AddSeedMaterial(byte[] seed) + { + for (int m = 0; m < seed.Length; m++) + { + byte pn = P[n]; + s = P[(s + pn + seed[m]) & 0xff]; + P[n] = P[s]; + P[s] = pn; + n = (byte)(n + 1); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void AddSeedMaterial(ReadOnlySpan seed) + { + for (int m = 0; m < seed.Length; m++) + { + byte pn = P[n]; + s = P[(s + pn + seed[m]) & 0xff]; + P[n] = P[s]; + P[s] = pn; + n = (byte)(n + 1); + } + } +#endif + + public void AddSeedMaterial(long seed) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span bytes = stackalloc byte[8]; + Pack.UInt64_To_BE((ulong)seed, bytes); + AddSeedMaterial(bytes); +#else + AddSeedMaterial(Pack.UInt64_To_BE((ulong)seed)); +#endif + } + + public void NextBytes(byte[] bytes) + { + NextBytes(bytes, 0, bytes.Length); + } + + public void NextBytes(byte[] bytes, int start, int len) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + NextBytes(bytes.AsSpan(start, len)); +#else + lock (P) + { + int end = start + len; + for (int i = start; i != end; i++) + { + byte pn = P[n]; + s = P[(s + pn) & 0xFF]; + byte ps = P[s]; + bytes[i] = P[(P[ps] + 1) & 0xFF]; + P[s] = pn; + P[n] = ps; + n = (byte)(n + 1); + } + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void NextBytes(Span bytes) + { + lock (P) + { + for (int i = 0; i < bytes.Length; ++i) + { + byte pn = P[n]; + s = P[(s + pn) & 0xFF]; + byte ps = P[s]; + bytes[i] = P[(P[ps] + 1) & 0xFF]; + P[s] = pn; + P[n] = ps; + n = (byte)(n + 1); + } + } + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/VMPCRandomGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/VMPCRandomGenerator.cs.meta new file mode 100644 index 000000000..62f83f4ae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/VMPCRandomGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 80462596f7a610e42b2868a2e799caa5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/X931Rng.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/X931Rng.cs new file mode 100644 index 000000000..07115d704 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/X931Rng.cs @@ -0,0 +1,206 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng +{ + internal class X931Rng + { + private const long BLOCK64_RESEED_MAX = 1L << (16 - 1); + private const long BLOCK128_RESEED_MAX = 1L << (24 - 1); + private const int BLOCK64_MAX_BITS_REQUEST = 1 << (13 - 1); + private const int BLOCK128_MAX_BITS_REQUEST = 1 << (19 - 1); + + private readonly IBlockCipher mEngine; + private readonly IEntropySource mEntropySource; + + private readonly byte[] mDT; + private readonly byte[] mI; + private readonly byte[] mR; + + private byte[] mV; + + private long mReseedCounter = 1; + + /** + * + * @param engine + * @param entropySource + */ + internal X931Rng(IBlockCipher engine, byte[] dateTimeVector, IEntropySource entropySource) + { + this.mEngine = engine; + this.mEntropySource = entropySource; + + this.mDT = new byte[engine.GetBlockSize()]; + + Array.Copy(dateTimeVector, 0, mDT, 0, mDT.Length); + + this.mI = new byte[engine.GetBlockSize()]; + this.mR = new byte[engine.GetBlockSize()]; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal int Generate(Span output, bool predictionResistant) + { + int outputLen = output.Length; + + if (mR.Length == 8) // 64 bit block size + { + if (mReseedCounter > BLOCK64_RESEED_MAX) + return -1; + + if (outputLen > BLOCK64_MAX_BITS_REQUEST / 8) + throw new ArgumentException("Number of bits per request limited to " + BLOCK64_MAX_BITS_REQUEST, "output"); + } + else + { + if (mReseedCounter > BLOCK128_RESEED_MAX) + return -1; + + if (outputLen > BLOCK128_MAX_BITS_REQUEST / 8) + throw new ArgumentException("Number of bits per request limited to " + BLOCK128_MAX_BITS_REQUEST, "output"); + } + + if (predictionResistant || mV == null) + { + mV = mEntropySource.GetEntropy(); + if (mV.Length != mEngine.GetBlockSize()) + throw new InvalidOperationException("Insufficient entropy returned"); + } + + int m = outputLen / mR.Length; + + for (int i = 0; i < m; i++) + { + mEngine.ProcessBlock(mDT, mI); + Process(mR, mI, mV); + Process(mV, mR, mI); + + mR.CopyTo(output[(i * mR.Length)..]); + + Increment(mDT); + } + + int bytesToCopy = outputLen - m * mR.Length; + + if (bytesToCopy > 0) + { + mEngine.ProcessBlock(mDT, mI); + Process(mR, mI, mV); + Process(mV, mR, mI); + + mR.AsSpan(0, bytesToCopy).CopyTo(output[(m * mR.Length)..]); + + Increment(mDT); + } + + mReseedCounter++; + + return outputLen * 8; + } +#else + /** + * Populate a passed in array with random data. + * + * @param output output array for generated bits. + * @param predictionResistant true if a reseed should be forced, false otherwise. + * + * @return number of bits generated, -1 if a reseed required. + */ + internal int Generate(byte[] output, int outputOff, int outputLen, bool predictionResistant) + { + if (mR.Length == 8) // 64 bit block size + { + if (mReseedCounter > BLOCK64_RESEED_MAX) + return -1; + + if (outputLen > BLOCK64_MAX_BITS_REQUEST / 8) + throw new ArgumentException("Number of bits per request limited to " + BLOCK64_MAX_BITS_REQUEST, "output"); + } + else + { + if (mReseedCounter > BLOCK128_RESEED_MAX) + return -1; + + if (outputLen > BLOCK128_MAX_BITS_REQUEST / 8) + throw new ArgumentException("Number of bits per request limited to " + BLOCK128_MAX_BITS_REQUEST, "output"); + } + + if (predictionResistant || mV == null) + { + mV = mEntropySource.GetEntropy(); + if (mV.Length != mEngine.GetBlockSize()) + throw new InvalidOperationException("Insufficient entropy returned"); + } + + int m = outputLen / mR.Length; + + for (int i = 0; i < m; i++) + { + mEngine.ProcessBlock(mDT, 0, mI, 0); + Process(mR, mI, mV); + Process(mV, mR, mI); + + Array.Copy(mR, 0, output, outputOff + i * mR.Length, mR.Length); + + Increment(mDT); + } + + int bytesToCopy = outputLen - m * mR.Length; + + if (bytesToCopy > 0) + { + mEngine.ProcessBlock(mDT, 0, mI, 0); + Process(mR, mI, mV); + Process(mV, mR, mI); + + Array.Copy(mR, 0, output, outputOff + m * mR.Length, bytesToCopy); + + Increment(mDT); + } + + mReseedCounter++; + + return outputLen * 8; + } +#endif + + /** + * Reseed the RNG. + */ + internal void Reseed() + { + mV = mEntropySource.GetEntropy(); + if (mV.Length != mEngine.GetBlockSize()) + throw new InvalidOperationException("Insufficient entropy returned"); + mReseedCounter = 1; + } + + internal IEntropySource EntropySource + { + get { return mEntropySource; } + } + + private void Process(byte[] res, byte[] a, byte[] b) + { + for (int i = 0; i != res.Length; i++) + { + res[i] = (byte)(a[i] ^ b[i]); + } + + mEngine.ProcessBlock(res, 0, res, 0); + } + + private void Increment(byte[] val) + { + for (int i = val.Length - 1; i >= 0; i--) + { + if (++val[i] != 0) + break; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/X931Rng.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/X931Rng.cs.meta new file mode 100644 index 000000000..0a0b9a275 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/X931Rng.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 16e904d5b0e43f2438f909a96c2c1a5f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/X931SecureRandom.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/X931SecureRandom.cs new file mode 100644 index 000000000..41666d67f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/X931SecureRandom.cs @@ -0,0 +1,104 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng +{ + public class X931SecureRandom + : SecureRandom + { + private readonly bool mPredictionResistant; + private readonly SecureRandom mRandomSource; + private readonly X931Rng mDrbg; + + internal X931SecureRandom(SecureRandom randomSource, X931Rng drbg, bool predictionResistant) + : base(null) + { + this.mRandomSource = randomSource; + this.mDrbg = drbg; + this.mPredictionResistant = predictionResistant; + } + + public override void SetSeed(byte[] seed) + { + lock (this) + { + if (mRandomSource != null) + { + this.mRandomSource.SetSeed(seed); + } + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void SetSeed(Span seed) + { + lock (this) + { + if (mRandomSource != null) + { + this.mRandomSource.SetSeed(seed); + } + } + } +#endif + + public override void SetSeed(long seed) + { + lock (this) + { + // this will happen when SecureRandom() is created + if (mRandomSource != null) + { + this.mRandomSource.SetSeed(seed); + } + } + } + + public override void NextBytes(byte[] bytes) + { + NextBytes(bytes, 0, bytes.Length); + } + + public override void NextBytes(byte[] buf, int off, int len) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + NextBytes(buf.AsSpan(off, len)); +#else + lock (this) + { + // check if a reseed is required... + if (mDrbg.Generate(buf, off, len, mPredictionResistant) < 0) + { + mDrbg.Reseed(); + mDrbg.Generate(buf, off, len, mPredictionResistant); + } + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void NextBytes(Span buffer) + { + lock (this) + { + // check if a reseed is required... + if (mDrbg.Generate(buffer, mPredictionResistant) < 0) + { + mDrbg.Reseed(); + mDrbg.Generate(buffer, mPredictionResistant); + } + } + } +#endif + + public override byte[] GenerateSeed(int numBytes) + { + return EntropyUtilities.GenerateSeed(mDrbg.EntropySource, numBytes); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/X931SecureRandom.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/X931SecureRandom.cs.meta new file mode 100644 index 000000000..85e66042b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/X931SecureRandom.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e0bc46819b51a0049afe9e3486eb35c8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/X931SecureRandomBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/X931SecureRandomBuilder.cs new file mode 100644 index 000000000..6842a74af --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/X931SecureRandomBuilder.cs @@ -0,0 +1,94 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Date; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng +{ + public class X931SecureRandomBuilder + { + private readonly SecureRandom mRandom; // JDK 1.1 complains on final. + + private IEntropySourceProvider mEntropySourceProvider; + private byte[] mDateTimeVector; + + /** + * Basic constructor, creates a builder using an EntropySourceProvider based on the default SecureRandom with + * predictionResistant set to false. + *

+ * Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + * the default SecureRandom does for its generateSeed() call. + *

+ */ + public X931SecureRandomBuilder() + : this(CryptoServicesRegistrar.GetSecureRandom(), false) + { + } + + /** + * Construct a builder with an EntropySourceProvider based on the passed in SecureRandom and the passed in value + * for prediction resistance. + *

+ * Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + * the passed in SecureRandom does for its generateSeed() call. + *

+ * @param entropySource + * @param predictionResistant + */ + public X931SecureRandomBuilder(SecureRandom entropySource, bool predictionResistant) + { + if (entropySource == null) + throw new ArgumentNullException(nameof(entropySource)); + + this.mRandom = entropySource; + this.mEntropySourceProvider = new BasicEntropySourceProvider(mRandom, predictionResistant); + } + + /** + * Create a builder which makes creates the SecureRandom objects from a specified entropy source provider. + *

+ * Note: If this constructor is used any calls to setSeed() in the resulting SecureRandom will be ignored. + *

+ * @param entropySourceProvider a provider of EntropySource objects. + */ + public X931SecureRandomBuilder(IEntropySourceProvider entropySourceProvider) + { + this.mRandom = null; + this.mEntropySourceProvider = entropySourceProvider; + } + + public X931SecureRandomBuilder SetDateTimeVector(byte[] dateTimeVector) + { + this.mDateTimeVector = dateTimeVector; + return this; + } + + /** + * Construct a X9.31 secure random generator using the passed in engine and key. If predictionResistant is true the + * generator will be reseeded on each request. + * + * @param engine a block cipher to use as the operator. + * @param key the block cipher key to initialise engine with. + * @param predictionResistant true if engine to be reseeded on each use, false otherwise. + * @return a SecureRandom. + */ + public X931SecureRandom Build(IBlockCipher engine, KeyParameter key, bool predictionResistant) + { + if (mDateTimeVector == null) + { + mDateTimeVector = new byte[engine.GetBlockSize()]; + Pack.UInt64_To_BE((ulong)DateTimeUtilities.CurrentUnixMs(), mDateTimeVector, 0); + } + + engine.Init(true, key); + + return new X931SecureRandom(mRandom, new X931Rng(engine, mDateTimeVector, mEntropySourceProvider.Get(engine.GetBlockSize() * 8)), predictionResistant); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/X931SecureRandomBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/X931SecureRandomBuilder.cs.meta new file mode 100644 index 000000000..6fcb782b0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/X931SecureRandomBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fa412f39ca843ca4db9e5b10bc4a12d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg.meta new file mode 100644 index 000000000..ff40ee10b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: af63aec738a072a448eee5c48d43e9f8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/CtrSP800Drbg.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/CtrSP800Drbg.cs new file mode 100644 index 000000000..c2736dd22 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/CtrSP800Drbg.cs @@ -0,0 +1,775 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng.Drbg +{ + /** + * A SP800-90A CTR DRBG. + */ + public sealed class CtrSP800Drbg + : ISP80090Drbg + { + private static readonly long TDEA_RESEED_MAX = 1L << (32 - 1); + private static readonly long AES_RESEED_MAX = 1L << (48 - 1); + private static readonly int TDEA_MAX_BITS_REQUEST = 1 << (13 - 1); + private static readonly int AES_MAX_BITS_REQUEST = 1 << (19 - 1); + + private readonly IEntropySource mEntropySource; + private readonly IBlockCipher mEngine; + private readonly int mKeySizeInBits; + private readonly int mSeedLength; + private readonly int mSecurityStrength; + + // internal state + private byte[] mKey; + private byte[] mV; + private long mReseedCounter = 0; + private bool mIsTdea = false; + + /** + * Construct a SP800-90A CTR DRBG. + *

+ * Minimum entropy requirement is the security strength requested. + *

+ * @param engine underlying block cipher to use to support DRBG + * @param keySizeInBits size of the key to use with the block cipher. + * @param securityStrength security strength required (in bits) + * @param entropySource source of entropy to use for seeding/reseeding. + * @param personalizationString personalization string to distinguish this DRBG (may be null). + * @param nonce nonce to further distinguish this DRBG (may be null). + */ + public CtrSP800Drbg(IBlockCipher engine, int keySizeInBits, int securityStrength, IEntropySource entropySource, + byte[] personalizationString, byte[] nonce) + { + if (securityStrength > 256) + throw new ArgumentException("Requested security strength is not supported by the derivation function"); + if (GetMaxSecurityStrength(engine, keySizeInBits) < securityStrength) + throw new ArgumentException("Requested security strength is not supported by block cipher and key size"); + if (entropySource.EntropySize < securityStrength) + throw new ArgumentException("Not enough entropy for security strength required"); + + mEntropySource = entropySource; + mEngine = engine; + + mKeySizeInBits = keySizeInBits; + mSecurityStrength = securityStrength; + mSeedLength = keySizeInBits + engine.GetBlockSize() * 8; + mIsTdea = IsTdea(engine); + + CTR_DRBG_Instantiate_algorithm(nonce, personalizationString); + } + + private void CTR_DRBG_Instantiate_algorithm(byte[] nonce, byte[] personalisationString) + { + byte[] entropy = GetEntropy(); // Get_entropy_input + byte[] seedMaterial = Arrays.ConcatenateAll(entropy, nonce, personalisationString); + byte[] seed = BlockCipherDF(seedMaterial, mSeedLength / 8); + + int blockSize = mEngine.GetBlockSize(); + + mKey = new byte[(mKeySizeInBits + 7) / 8]; + mV = new byte[blockSize]; + + // mKey & mV are modified by this call + CTR_DRBG_Update(seed, mKey, mV); + + mReseedCounter = 1; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void CTR_DRBG_Update(ReadOnlySpan seed, Span key, Span v) + { + int seedLength = seed.Length; + Span temp = seedLength <= 256 + ? stackalloc byte[seedLength] + : new byte[seedLength]; + + int blockSize = mEngine.GetBlockSize(); + Span block = blockSize <= 64 + ? stackalloc byte[blockSize] + : new byte[blockSize]; + + mEngine.Init(true, ExpandToKeyParameter(key)); + for (int i = 0; i * blockSize < seed.Length; ++i) + { + AddOneTo(v); + mEngine.ProcessBlock(v, block); + + int bytesToCopy = System.Math.Min(blockSize, temp.Length - i * blockSize); + block[..bytesToCopy].CopyTo(temp[(i * blockSize)..]); + } + + XorWith(seed, temp); + + key.CopyFrom(temp); + v.CopyFrom(temp[key.Length..]); + } +#else + private void CTR_DRBG_Update(byte[] seed, byte[] key, byte[] v) + { + byte[] temp = new byte[seed.Length]; + byte[] outputBlock = new byte[mEngine.GetBlockSize()]; + + int i = 0; + int outLen = mEngine.GetBlockSize(); + + mEngine.Init(true, ExpandToKeyParameter(key)); + while (i * outLen < seed.Length) + { + AddOneTo(v); + mEngine.ProcessBlock(v, 0, outputBlock, 0); + + int bytesToCopy = System.Math.Min(outLen, temp.Length - i * outLen); + Array.Copy(outputBlock, 0, temp, i * outLen, bytesToCopy); + ++i; + } + + Xor(temp, seed, temp, 0); + + Array.Copy(temp, 0, key, 0, key.Length); + Array.Copy(temp, key.Length, v, 0, v.Length); + } +#endif + + private void CTR_DRBG_Reseed_algorithm(byte[] additionalInput) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + CTR_DRBG_Reseed_algorithm(Spans.FromNullableReadOnly(additionalInput)); +#else + byte[] seedMaterial = Arrays.Concatenate(GetEntropy(), additionalInput); + + seedMaterial = BlockCipherDF(seedMaterial, mSeedLength / 8); + + CTR_DRBG_Update(seedMaterial, mKey, mV); + + mReseedCounter = 1; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void CTR_DRBG_Reseed_algorithm(ReadOnlySpan additionalInput) + { + int entropyLength = GetEntropyLength(); + int seedLength = entropyLength + additionalInput.Length; + + Span seedMaterial = seedLength <= 256 + ? stackalloc byte[seedLength] + : new byte[seedLength]; + + GetEntropy(seedMaterial[..entropyLength]); + additionalInput.CopyTo(seedMaterial[entropyLength..]); + + seedMaterial = BlockCipherDF(seedMaterial, mSeedLength / 8); + + CTR_DRBG_Update(seedMaterial, mKey, mV); + + mReseedCounter = 1; + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void Xor(ReadOnlySpan x, ReadOnlySpan y, Span z) + { + for (int i = 0; i < z.Length; ++i) + { + z[i] = (byte)(x[i] ^ y[i]); + } + } + + private void XorWith(ReadOnlySpan x, Span z) + { + for (int i = 0; i < z.Length; ++i) + { + z[i] ^= x[i]; + } + } +#else + private void Xor(byte[] output, byte[] a, byte[] b, int bOff) + { + for (int i = 0; i < output.Length; i++) + { + output[i] = (byte)(a[i] ^ b[bOff + i]); + } + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void AddOneTo(Span longer) +#else + private void AddOneTo(byte[] longer) +#endif + { + uint carry = 1; + int i = longer.Length; + while (--i >= 0) + { + carry += longer[i]; + longer[i] = (byte)carry; + carry >>= 8; + } + } + + private byte[] GetEntropy() + { + byte[] entropy = mEntropySource.GetEntropy(); + if (entropy.Length < (mSecurityStrength + 7) / 8) + throw new InvalidOperationException("Insufficient entropy provided by entropy source"); + return entropy; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int GetEntropy(Span output) + { + int length = mEntropySource.GetEntropy(output); + if (length < (mSecurityStrength + 7) / 8) + throw new InvalidOperationException("Insufficient entropy provided by entropy source"); + return length; + } + + private int GetEntropyLength() + { + return (mEntropySource.EntropySize + 7) / 8; + } +#endif + + // -- Internal state migration --- + + private static readonly byte[] K_BITS = Hex.DecodeStrict( + "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F"); + + // 1. If (number_of_bits_to_return > max_number_of_bits), then return an + // ERROR_FLAG. + // 2. L = len (input_string)/8. + // 3. N = number_of_bits_to_return/8. + // Comment: L is the bitstring represention of + // the integer resulting from len (input_string)/8. + // L shall be represented as a 32-bit integer. + // + // Comment : N is the bitstring represention of + // the integer resulting from + // number_of_bits_to_return/8. N shall be + // represented as a 32-bit integer. + // + // 4. S = L || N || input_string || 0x80. + // 5. While (len (S) mod outlen) + // Comment : Pad S with zeros, if necessary. + // 0, S = S || 0x00. + // + // Comment : Compute the starting value. + // 6. temp = the Null string. + // 7. i = 0. + // 8. K = Leftmost keylen bits of 0x00010203...1D1E1F. + // 9. While len (temp) < keylen + outlen, do + // + // IV = i || 0outlen - len (i). + // + // 9.1 + // + // temp = temp || BCC (K, (IV || S)). + // + // 9.2 + // + // i = i + 1. + // + // 9.3 + // + // Comment : i shall be represented as a 32-bit + // integer, i.e., len (i) = 32. + // + // Comment: The 32-bit integer represenation of + // i is padded with zeros to outlen bits. + // + // Comment: Compute the requested number of + // bits. + // + // 10. K = Leftmost keylen bits of temp. + // + // 11. X = Next outlen bits of temp. + // + // 12. temp = the Null string. + // + // 13. While len (temp) < number_of_bits_to_return, do + // + // 13.1 X = Block_Encrypt (K, X). + // + // 13.2 temp = temp || X. + // + // 14. requested_bits = Leftmost number_of_bits_to_return of temp. + // + // 15. Return SUCCESS and requested_bits. + private byte[] BlockCipherDF(byte[] input, int N) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return BlockCipherDF(input.AsSpan(), N); +#else + int outLen = mEngine.GetBlockSize(); + int L = input.Length; // already in bytes + // 4 S = L || N || input || 0x80 + int sLen = 4 + 4 + L + 1; + int blockLen = ((sLen + outLen - 1) / outLen) * outLen; + byte[] S = new byte[blockLen]; + Pack.UInt32_To_BE((uint)L, S, 0); + Pack.UInt32_To_BE((uint)N, S, 4); + Array.Copy(input, 0, S, 8, L); + S[8 + L] = 0x80; + // S already padded with zeros + + byte[] temp = new byte[mKeySizeInBits / 8 + outLen]; + byte[] bccOut = new byte[outLen]; + + byte[] IV = new byte[outLen]; + + int i = 0; + byte[] K = new byte[mKeySizeInBits / 8]; + Array.Copy(K_BITS, 0, K, 0, K.Length); + var K1 = ExpandToKeyParameter(K); + mEngine.Init(true, K1); + + while (i*outLen*8 < mKeySizeInBits + outLen *8) + { + Pack.UInt32_To_BE((uint)i, IV, 0); + BCC(bccOut, IV, S); + + int bytesToCopy = System.Math.Min(outLen, temp.Length - i * outLen); + Array.Copy(bccOut, 0, temp, i * outLen, bytesToCopy); + ++i; + } + + byte[] X = new byte[outLen]; + Array.Copy(temp, 0, K, 0, K.Length); + Array.Copy(temp, K.Length, X, 0, X.Length); + + temp = new byte[N]; + + i = 0; + mEngine.Init(true, ExpandToKeyParameter(K)); + + while (i * outLen < temp.Length) + { + mEngine.ProcessBlock(X, 0, X, 0); + + int bytesToCopy = System.Math.Min(outLen, temp.Length - i * outLen); + Array.Copy(X, 0, temp, i * outLen, bytesToCopy); + i++; + } + + return temp; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private byte[] BlockCipherDF(ReadOnlySpan input, int N) + { + int blockSize = mEngine.GetBlockSize(); + int L = input.Length; // already in bytes + // 4 S = L || N || input || 0x80 + int sLen = 4 + 4 + L + 1; + int blockLen = ((sLen + blockSize - 1) / blockSize) * blockSize; + Span S = blockLen <= 256 + ? stackalloc byte[blockLen] + : new byte[blockLen]; + Pack.UInt32_To_BE((uint)L, S); + Pack.UInt32_To_BE((uint)N, S[4..]); + input.CopyTo(S[8..]); + S[8 + L] = 0x80; + // S already padded with zeros + + int keySize = mKeySizeInBits / 8; + int tempSize = keySize + blockSize; + Span temp = tempSize <= 128 + ? stackalloc byte[tempSize] + : new byte[tempSize]; + + Span bccOut = blockSize <= 64 + ? stackalloc byte[blockSize] + : new byte[blockSize]; + + Span IV = blockSize <= 64 + ? stackalloc byte[blockSize] + : new byte[blockSize]; + + var K1 = ExpandToKeyParameter(K_BITS.AsSpan(0, keySize)); + mEngine.Init(true, K1); + + for (int i = 0; i * blockSize < tempSize; ++i) + { + Pack.UInt32_To_BE((uint)i, IV); + BCC(bccOut, IV, S); + + int bytesToCopy = System.Math.Min(blockSize, tempSize - i * blockSize); + bccOut[..bytesToCopy].CopyTo(temp[(i * blockSize)..]); + } + + var K2 = ExpandToKeyParameter(temp[..keySize]); + mEngine.Init(true, K2); + var X = temp[keySize..]; + + byte[] result = new byte[N]; + for (int i = 0; i * blockSize < result.Length; ++i) + { + mEngine.ProcessBlock(X, X); + + int bytesToCopy = System.Math.Min(blockSize, result.Length - i * blockSize); + X[..bytesToCopy].CopyTo(result.AsSpan(i * blockSize)); + } + return result; + } +#endif + + /* + * 1. chaining_value = 0^outlen + * . Comment: Set the first chaining value to outlen zeros. + * 2. n = len (data)/outlen. + * 3. Starting with the leftmost bits of data, split the data into n blocks of outlen bits + * each, forming block(1) to block(n). + * 4. For i = 1 to n do + * 4.1 input_block = chaining_value ^ block(i) . + * 4.2 chaining_value = Block_Encrypt (Key, input_block). + * 5. output_block = chaining_value. + * 6. Return output_block. + */ +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void BCC(Span bccOut, ReadOnlySpan iV, ReadOnlySpan data) + { + int blockSize = mEngine.GetBlockSize(); + + Span chainingValue = blockSize <= 64 + ? stackalloc byte[blockSize] + : new byte[blockSize]; + Span inputBlock = blockSize <= 64 + ? stackalloc byte[blockSize] + : new byte[blockSize]; + + mEngine.ProcessBlock(iV, chainingValue); + + int n = data.Length / blockSize; + for (int i = 0; i < n; i++) + { + Xor(chainingValue, data[(i * blockSize)..], inputBlock); + mEngine.ProcessBlock(inputBlock, chainingValue); + } + + bccOut.CopyFrom(chainingValue); + } +#else + private void BCC(byte[] bccOut, byte[] iV, byte[] data) + { + int outlen = mEngine.GetBlockSize(); + byte[] chainingValue = new byte[outlen]; // initial values = 0 + int n = data.Length / outlen; + + byte[] inputBlock = new byte[outlen]; + + mEngine.ProcessBlock(iV, 0, chainingValue, 0); + + for (int i = 0; i < n; i++) + { + Xor(inputBlock, chainingValue, data, i*outlen); + mEngine.ProcessBlock(inputBlock, 0, chainingValue, 0); + } + + Array.Copy(chainingValue, 0, bccOut, 0, bccOut.Length); + } +#endif + + /** + * Return the block size (in bits) of the DRBG. + * + * @return the number of bits produced on each internal round of the DRBG. + */ + public int BlockSize + { + get { return mV.Length * 8; } + } + + /** + * Populate a passed in array with random data. + * + * @param output output array for generated bits. + * @param additionalInput additional input to be added to the DRBG in this step. + * @param predictionResistant true if a reseed should be forced, false otherwise. + * + * @return number of bits generated, -1 if a reseed required. + */ + public int Generate(byte[] output, int outputOff, int outputLen, byte[] additionalInput, + bool predictionResistant) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return additionalInput == null + ? Generate(output.AsSpan(outputOff, outputLen), predictionResistant) + : GenerateWithInput(output.AsSpan(outputOff, outputLen), additionalInput.AsSpan(), predictionResistant); +#else + if (mIsTdea) + { + if (mReseedCounter > TDEA_RESEED_MAX) + return -1; + + if (outputLen > TDEA_MAX_BITS_REQUEST / 8) + throw new ArgumentException("Number of bits per request limited to " + TDEA_MAX_BITS_REQUEST, "output"); + } + else + { + if (mReseedCounter > AES_RESEED_MAX) + return -1; + + if (outputLen > AES_MAX_BITS_REQUEST / 8) + throw new ArgumentException("Number of bits per request limited to " + AES_MAX_BITS_REQUEST, "output"); + } + + if (predictionResistant) + { + CTR_DRBG_Reseed_algorithm(additionalInput); + additionalInput = null; + } + + if (additionalInput != null) + { + additionalInput = BlockCipherDF(additionalInput, mSeedLength / 8); + CTR_DRBG_Update(additionalInput, mKey, mV); + } + else + { + additionalInput = new byte[mSeedLength]; + } + + byte[] tmp = new byte[mV.Length]; + + mEngine.Init(true, ExpandToKeyParameter(mKey)); + + for (int i = 0, limit = outputLen / tmp.Length; i <= limit; i++) + { + int bytesToCopy = System.Math.Min(tmp.Length, outputLen - i * tmp.Length); + + if (bytesToCopy != 0) + { + AddOneTo(mV); + + mEngine.ProcessBlock(mV, 0, tmp, 0); + + Array.Copy(tmp, 0, output, outputOff + i * tmp.Length, bytesToCopy); + } + } + + CTR_DRBG_Update(additionalInput, mKey, mV); + + mReseedCounter++; + + return outputLen * 8; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int Generate(Span output, bool predictionResistant) + { + int outputLen = output.Length; + if (mIsTdea) + { + if (mReseedCounter > TDEA_RESEED_MAX) + return -1; + + if (outputLen > TDEA_MAX_BITS_REQUEST / 8) + throw new ArgumentException("Number of bits per request limited to " + TDEA_MAX_BITS_REQUEST, "output"); + } + else + { + if (mReseedCounter > AES_RESEED_MAX) + return -1; + + if (outputLen > AES_MAX_BITS_REQUEST / 8) + throw new ArgumentException("Number of bits per request limited to " + AES_MAX_BITS_REQUEST, "output"); + } + + if (predictionResistant) + { + CTR_DRBG_Reseed_algorithm(ReadOnlySpan.Empty); + } + + byte[] seed = new byte[mSeedLength / 8]; + + return ImplGenerate(seed, output); + } + + public int GenerateWithInput(Span output, ReadOnlySpan additionalInput, bool predictionResistant) + { + int outputLen = output.Length; + if (mIsTdea) + { + if (mReseedCounter > TDEA_RESEED_MAX) + return -1; + + if (outputLen > TDEA_MAX_BITS_REQUEST / 8) + throw new ArgumentException("Number of bits per request limited to " + TDEA_MAX_BITS_REQUEST, "output"); + } + else + { + if (mReseedCounter > AES_RESEED_MAX) + return -1; + + if (outputLen > AES_MAX_BITS_REQUEST / 8) + throw new ArgumentException("Number of bits per request limited to " + AES_MAX_BITS_REQUEST, "output"); + } + + int seedLength = mSeedLength / 8; + byte[] seed; + if (predictionResistant) + { + CTR_DRBG_Reseed_algorithm(additionalInput); + seed = new byte[seedLength]; + } + else + { + seed = BlockCipherDF(additionalInput, seedLength); + CTR_DRBG_Update(seed, mKey, mV); + } + + return ImplGenerate(seed, output); + } + + private int ImplGenerate(ReadOnlySpan seed, Span output) + { + byte[] tmp = new byte[mV.Length]; + + mEngine.Init(true, ExpandToKeyParameter(mKey)); + + int outputLen = output.Length; + for (int i = 0, limit = outputLen / tmp.Length; i <= limit; i++) + { + int bytesToCopy = System.Math.Min(tmp.Length, outputLen - i * tmp.Length); + + if (bytesToCopy != 0) + { + AddOneTo(mV); + + mEngine.ProcessBlock(mV, 0, tmp, 0); + + tmp[..bytesToCopy].CopyTo(output[(i * tmp.Length)..]); + } + } + + CTR_DRBG_Update(seed, mKey, mV); + + mReseedCounter++; + + return outputLen * 8; + } +#endif + + /** + * Reseed the DRBG. + * + * @param additionalInput additional input to be added to the DRBG in this step. + */ + public void Reseed(byte[] additionalInput) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Reseed(Spans.FromNullableReadOnly(additionalInput)); +#else + CTR_DRBG_Reseed_algorithm(additionalInput); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Reseed(ReadOnlySpan additionalInput) + { + CTR_DRBG_Reseed_algorithm(additionalInput); + } +#endif + + private bool IsTdea(IBlockCipher cipher) + { + return cipher.AlgorithmName.Equals("DESede") || cipher.AlgorithmName.Equals("TDEA"); + } + + private int GetMaxSecurityStrength(IBlockCipher cipher, int keySizeInBits) + { + if (IsTdea(cipher) && keySizeInBits == 168) + { + return 112; + } + if (cipher.AlgorithmName.Equals("AES")) + { + return keySizeInBits; + } + + return -1; + } + + private KeyParameter ExpandToKeyParameter(byte[] key) + { + if (!mIsTdea) + return new KeyParameter(key); + + // expand key to 192 bits. + byte[] tmp = new byte[24]; + + PadKey(key, 0, tmp, 0); + PadKey(key, 7, tmp, 8); + PadKey(key, 14, tmp, 16); + + return new KeyParameter(tmp); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private KeyParameter ExpandToKeyParameter(ReadOnlySpan key) + { + if (!mIsTdea) + return new KeyParameter(key); + + // expand key to 192 bits. + Span tmp = stackalloc byte[24]; + + PadKey(key, tmp); + PadKey(key[7..], tmp[8..]); + PadKey(key[14..], tmp[16..]); + + return new KeyParameter(tmp); + } +#endif + + /** + * Pad out a key for TDEA, setting odd parity for each byte. + * + * @param keyMaster + * @param keyOff + * @param tmp + * @param tmpOff + */ + private void PadKey(byte[] keyMaster, int keyOff, byte[] tmp, int tmpOff) + { + tmp[tmpOff + 0] = (byte)(keyMaster[keyOff + 0] & 0xfe); + tmp[tmpOff + 1] = (byte)((keyMaster[keyOff + 0] << 7) | ((keyMaster[keyOff + 1] & 0xfc) >> 1)); + tmp[tmpOff + 2] = (byte)((keyMaster[keyOff + 1] << 6) | ((keyMaster[keyOff + 2] & 0xf8) >> 2)); + tmp[tmpOff + 3] = (byte)((keyMaster[keyOff + 2] << 5) | ((keyMaster[keyOff + 3] & 0xf0) >> 3)); + tmp[tmpOff + 4] = (byte)((keyMaster[keyOff + 3] << 4) | ((keyMaster[keyOff + 4] & 0xe0) >> 4)); + tmp[tmpOff + 5] = (byte)((keyMaster[keyOff + 4] << 3) | ((keyMaster[keyOff + 5] & 0xc0) >> 5)); + tmp[tmpOff + 6] = (byte)((keyMaster[keyOff + 5] << 2) | ((keyMaster[keyOff + 6] & 0x80) >> 6)); + tmp[tmpOff + 7] = (byte)(keyMaster[keyOff + 6] << 1); + + DesParameters.SetOddParity(tmp, tmpOff, 8); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void PadKey(ReadOnlySpan keyMaster, Span tmp) + { + tmp[0] = (byte)(keyMaster[0] & 0xFE); + tmp[1] = (byte)((keyMaster[0] << 7) | ((keyMaster[1] & 0xfc) >> 1)); + tmp[2] = (byte)((keyMaster[1] << 6) | ((keyMaster[2] & 0xf8) >> 2)); + tmp[3] = (byte)((keyMaster[2] << 5) | ((keyMaster[3] & 0xf0) >> 3)); + tmp[4] = (byte)((keyMaster[3] << 4) | ((keyMaster[4] & 0xe0) >> 4)); + tmp[5] = (byte)((keyMaster[4] << 3) | ((keyMaster[5] & 0xc0) >> 5)); + tmp[6] = (byte)((keyMaster[5] << 2) | ((keyMaster[6] & 0x80) >> 6)); + tmp[7] = (byte)(keyMaster[6] << 1); + + DesParameters.SetOddParity(tmp[..8]); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/CtrSP800Drbg.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/CtrSP800Drbg.cs.meta new file mode 100644 index 000000000..55b695152 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/CtrSP800Drbg.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: edfb0cb793332c04897bd15f6ba5d7dd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/DrbgUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/DrbgUtilities.cs new file mode 100644 index 000000000..90c29ae7f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/DrbgUtilities.cs @@ -0,0 +1,115 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng.Drbg +{ + internal class DrbgUtilities + { + private static readonly IDictionary MaxSecurityStrengths = + new Dictionary(StringComparer.OrdinalIgnoreCase); + + static DrbgUtilities() + { + MaxSecurityStrengths.Add("SHA-1", 128); + + MaxSecurityStrengths.Add("SHA-224", 192); + MaxSecurityStrengths.Add("SHA-256", 256); + MaxSecurityStrengths.Add("SHA-384", 256); + MaxSecurityStrengths.Add("SHA-512", 256); + + MaxSecurityStrengths.Add("SHA-512/224", 192); + MaxSecurityStrengths.Add("SHA-512/256", 256); + } + + internal static int GetMaxSecurityStrength(IDigest d) + { + return MaxSecurityStrengths[d.AlgorithmName]; + } + + internal static int GetMaxSecurityStrength(IMac m) + { + string name = m.AlgorithmName; + + return MaxSecurityStrengths[name.Substring(0, name.IndexOf("/"))]; + } + + /** + * Used by both Dual EC and Hash. + */ +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal static void HashDF(IDigest digest, ReadOnlySpan seedMaterial, int seedLength, Span output) +#else + internal static void HashDF(IDigest digest, byte[] seedMaterial, int seedLength, byte[] output) +#endif + { + // 1. temp = the Null string. + // 2. . + // 3. counter = an 8-bit binary value representing the integer "1". + // 4. For i = 1 to len do + // Comment : In step 4.1, no_of_bits_to_return + // is used as a 32-bit string. + // 4.1 temp = temp || Hash (counter || no_of_bits_to_return || + // input_string). + // 4.2 counter = counter + 1. + // 5. requested_bits = Leftmost (no_of_bits_to_return) of temp. + // 6. Return SUCCESS and requested_bits. + int outputLength = (seedLength + 7) / 8; + + int digestSize = digest.GetDigestSize(); + int len = outputLength / digestSize; + int counter = 1; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span dig = digestSize <= 128 + ? stackalloc byte[digestSize] + : new byte[digestSize]; + Span header = stackalloc byte[5]; + Pack.UInt32_To_BE((uint)seedLength, header[1..]); +#else + byte[] dig = new byte[digestSize]; + byte[] header = new byte[5]; + Pack.UInt32_To_BE((uint)seedLength, header, 1); +#endif + + for (int i = 0; i <= len; i++, counter++) + { + header[0] = (byte)counter; +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + digest.BlockUpdate(header); + digest.BlockUpdate(seedMaterial); + digest.DoFinal(dig); + + int bytesToCopy = System.Math.Min(digestSize, outputLength - i * digestSize); + dig[..bytesToCopy].CopyTo(output[(i * digestSize)..]); +#else + digest.BlockUpdate(header, 0, header.Length); + digest.BlockUpdate(seedMaterial, 0, seedMaterial.Length); + digest.DoFinal(dig, 0); + + int bytesToCopy = System.Math.Min(digestSize, outputLength - i * digestSize); + Array.Copy(dig, 0, output, i * digestSize, bytesToCopy); +#endif + } + + // do a left shift to get rid of excess bits. + if (seedLength % 8 != 0) + { + int shift = 8 - (seedLength % 8); + uint carry = 0; + + for (int i = 0; i != outputLength; i++) + { + uint b = output[i]; + output[i] = (byte)((b >> shift) | (carry << (8 - shift))); + carry = b; + } + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/DrbgUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/DrbgUtilities.cs.meta new file mode 100644 index 000000000..d248fc176 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/DrbgUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b7d5029db1ebd4d488a8e6d442ba71e9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/HMacSP800Drbg.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/HMacSP800Drbg.cs new file mode 100644 index 000000000..a4367d00b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/HMacSP800Drbg.cs @@ -0,0 +1,351 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng.Drbg +{ + /** + * A SP800-90A HMAC DRBG. + */ + public sealed class HMacSP800Drbg + : ISP80090Drbg + { + private readonly static long RESEED_MAX = 1L << (48 - 1); + private readonly static int MAX_BITS_REQUEST = 1 << (19 - 1); + + private readonly byte[] mK; + private readonly byte[] mV; + private readonly IEntropySource mEntropySource; + private readonly IMac mHMac; + private readonly int mSecurityStrength; + + private long mReseedCounter; + + /** + * Construct a SP800-90A Hash DRBG. + *

+ * Minimum entropy requirement is the security strength requested. + *

+ * @param hMac Hash MAC to base the DRBG on. + * @param securityStrength security strength required (in bits) + * @param entropySource source of entropy to use for seeding/reseeding. + * @param personalizationString personalization string to distinguish this DRBG (may be null). + * @param nonce nonce to further distinguish this DRBG (may be null). + */ + public HMacSP800Drbg(IMac hMac, int securityStrength, IEntropySource entropySource, + byte[] personalizationString, byte[] nonce) + { + if (securityStrength > DrbgUtilities.GetMaxSecurityStrength(hMac)) + throw new ArgumentException("Requested security strength is not supported by the derivation function"); + if (entropySource.EntropySize < securityStrength) + throw new ArgumentException("Not enough entropy for security strength required"); + + mHMac = hMac; + mSecurityStrength = securityStrength; + mEntropySource = entropySource; + + byte[] entropy = GetEntropy(); + byte[] seedMaterial = Arrays.ConcatenateAll(entropy, nonce, personalizationString); + + mK = new byte[hMac.GetMacSize()]; + mV = new byte[mK.Length]; + Arrays.Fill(mV, (byte)1); + + hmac_DRBG_Update(seedMaterial); + + mReseedCounter = 1; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void hmac_DRBG_Update() + { + hmac_DRBG_Update_Func(ReadOnlySpan.Empty, 0x00); + } + + private void hmac_DRBG_Update(ReadOnlySpan seedMaterial) + { + hmac_DRBG_Update_Func(seedMaterial, 0x00); + hmac_DRBG_Update_Func(seedMaterial, 0x01); + } + + private void hmac_DRBG_Update_Func(ReadOnlySpan seedMaterial, byte vValue) + { + mHMac.Init(new KeyParameter(mK)); + + mHMac.BlockUpdate(mV); + mHMac.Update(vValue); + if (!seedMaterial.IsEmpty) + { + mHMac.BlockUpdate(seedMaterial); + } + mHMac.DoFinal(mK); + + mHMac.Init(new KeyParameter(mK)); + mHMac.BlockUpdate(mV); + mHMac.DoFinal(mV); + } +#else + private void hmac_DRBG_Update(byte[] seedMaterial) + { + hmac_DRBG_Update_Func(seedMaterial, 0x00); + if (seedMaterial != null) + { + hmac_DRBG_Update_Func(seedMaterial, 0x01); + } + } + + private void hmac_DRBG_Update_Func(byte[] seedMaterial, byte vValue) + { + mHMac.Init(new KeyParameter(mK)); + + mHMac.BlockUpdate(mV, 0, mV.Length); + mHMac.Update(vValue); + + if (seedMaterial != null) + { + mHMac.BlockUpdate(seedMaterial, 0, seedMaterial.Length); + } + + mHMac.DoFinal(mK, 0); + + mHMac.Init(new KeyParameter(mK)); + mHMac.BlockUpdate(mV, 0, mV.Length); + + mHMac.DoFinal(mV, 0); + } +#endif + + /** + * Return the block size (in bits) of the DRBG. + * + * @return the number of bits produced on each round of the DRBG. + */ + public int BlockSize + { + get { return mV.Length * 8; } + } + + /** + * Populate a passed in array with random data. + * + * @param output output array for generated bits. + * @param additionalInput additional input to be added to the DRBG in this step. + * @param predictionResistant true if a reseed should be forced, false otherwise. + * + * @return number of bits generated, -1 if a reseed required. + */ + public int Generate(byte[] output, int outputOff, int outputLen, byte[] additionalInput, + bool predictionResistant) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return additionalInput == null + ? Generate(output.AsSpan(outputOff, outputLen), predictionResistant) + : GenerateWithInput(output.AsSpan(outputOff, outputLen), additionalInput.AsSpan(), predictionResistant); +#else + int numberOfBits = outputLen * 8; + + if (numberOfBits > MAX_BITS_REQUEST) + throw new ArgumentException("Number of bits per request limited to " + MAX_BITS_REQUEST, "output"); + + if (mReseedCounter > RESEED_MAX) + return -1; + + if (predictionResistant) + { + Reseed(additionalInput); + additionalInput = null; + } + + // 2. + if (additionalInput != null) + { + hmac_DRBG_Update(additionalInput); + } + + // 3. + byte[] rv = new byte[outputLen]; + + int m = outputLen / mV.Length; + + mHMac.Init(new KeyParameter(mK)); + + for (int i = 0; i < m; i++) + { + mHMac.BlockUpdate(mV, 0, mV.Length); + mHMac.DoFinal(mV, 0); + + Array.Copy(mV, 0, rv, i * mV.Length, mV.Length); + } + + if (m * mV.Length < rv.Length) + { + mHMac.BlockUpdate(mV, 0, mV.Length); + mHMac.DoFinal(mV, 0); + + Array.Copy(mV, 0, rv, m * mV.Length, rv.Length - (m * mV.Length)); + } + + hmac_DRBG_Update(additionalInput); + + mReseedCounter++; + + Array.Copy(rv, 0, output, outputOff, outputLen); + + return numberOfBits; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int Generate(Span output, bool predictionResistant) + { + int numberOfBits = output.Length * 8; + + if (numberOfBits > MAX_BITS_REQUEST) + throw new ArgumentException("Number of bits per request limited to " + MAX_BITS_REQUEST, "output"); + + if (mReseedCounter > RESEED_MAX) + return -1; + + if (predictionResistant) + { + Reseed(ReadOnlySpan.Empty); + } + + // 3. + ImplGenerate(output); + + hmac_DRBG_Update(); + + mReseedCounter++; + + return numberOfBits; + } + + public int GenerateWithInput(Span output, ReadOnlySpan additionalInput, bool predictionResistant) + { + int numberOfBits = output.Length * 8; + + if (numberOfBits > MAX_BITS_REQUEST) + throw new ArgumentException("Number of bits per request limited to " + MAX_BITS_REQUEST, "output"); + + if (mReseedCounter > RESEED_MAX) + return -1; + + if (predictionResistant) + { + Reseed(additionalInput); + } + else + { + // 2. + hmac_DRBG_Update(additionalInput); + } + + // 3. + ImplGenerate(output); + + if (predictionResistant) + { + hmac_DRBG_Update(); + } + else + { + hmac_DRBG_Update(additionalInput); + } + + mReseedCounter++; + + return numberOfBits; + } + + private void ImplGenerate(Span output) + { + int outputLen = output.Length; + int m = outputLen / mV.Length; + + mHMac.Init(new KeyParameter(mK)); + + for (int i = 0; i < m; i++) + { + mHMac.BlockUpdate(mV); + mHMac.DoFinal(mV); + + mV.CopyTo(output[(i * mV.Length)..]); + } + + int remaining = outputLen - m * mV.Length; + if (remaining > 0) + { + mHMac.BlockUpdate(mV); + mHMac.DoFinal(mV); + + mV[..remaining].CopyTo(output[(m * mV.Length)..]); + } + } +#endif + + /** + * Reseed the DRBG. + * + * @param additionalInput additional input to be added to the DRBG in this step. + */ + public void Reseed(byte[] additionalInput) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Reseed(Spans.FromNullableReadOnly(additionalInput)); +#else + byte[] entropy = GetEntropy(); + byte[] seedMaterial = Arrays.Concatenate(entropy, additionalInput); + + hmac_DRBG_Update(seedMaterial); + + mReseedCounter = 1; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Reseed(ReadOnlySpan additionalInput) + { + int entropyLength = GetEntropyLength(); + int seedMaterialLength = entropyLength + additionalInput.Length; + Span seedMaterial = seedMaterialLength <= 256 + ? stackalloc byte[seedMaterialLength] + : new byte[seedMaterialLength]; + GetEntropy(seedMaterial); + additionalInput.CopyTo(seedMaterial[entropyLength..]); + + hmac_DRBG_Update(seedMaterial); + + mReseedCounter = 1; + } +#endif + + private byte[] GetEntropy() + { + byte[] entropy = mEntropySource.GetEntropy(); + if (entropy.Length < (mSecurityStrength + 7) / 8) + throw new InvalidOperationException("Insufficient entropy provided by entropy source"); + return entropy; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int GetEntropy(Span output) + { + int length = mEntropySource.GetEntropy(output); + if (length < (mSecurityStrength + 7) / 8) + throw new InvalidOperationException("Insufficient entropy provided by entropy source"); + return length; + } + + private int GetEntropyLength() + { + return (mEntropySource.EntropySize + 7) / 8; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/HMacSP800Drbg.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/HMacSP800Drbg.cs.meta new file mode 100644 index 000000000..82d3de0f3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/HMacSP800Drbg.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0531f450ee87c1344976250270fa8568 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/HashSP800Drbg.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/HashSP800Drbg.cs new file mode 100644 index 000000000..aabb22746 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/HashSP800Drbg.cs @@ -0,0 +1,502 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng.Drbg +{ + /** + * A SP800-90A Hash DRBG. + */ + public sealed class HashSP800Drbg + : ISP80090Drbg + { + private readonly static byte[] ONE = { 0x01 }; + + private readonly static long RESEED_MAX = 1L << (48 - 1); + private readonly static int MAX_BITS_REQUEST = 1 << (19 - 1); + + private static readonly IDictionary SeedLens = + new Dictionary(StringComparer.OrdinalIgnoreCase); + + static HashSP800Drbg() + { + SeedLens.Add("SHA-1", 440); + SeedLens.Add("SHA-224", 440); + SeedLens.Add("SHA-256", 440); + SeedLens.Add("SHA-512/256", 440); + SeedLens.Add("SHA-512/224", 440); + SeedLens.Add("SHA-384", 888); + SeedLens.Add("SHA-512", 888); + } + + private readonly IDigest mDigest; + private readonly IEntropySource mEntropySource; + private readonly int mSecurityStrength; + private readonly int mSeedLength; + + private byte[] mV; + private byte[] mC; + private long mReseedCounter; + + /** + * Construct a SP800-90A Hash DRBG. + *

+ * Minimum entropy requirement is the security strength requested. + *

+ * @param digest source digest to use for DRB stream. + * @param securityStrength security strength required (in bits) + * @param entropySource source of entropy to use for seeding/reseeding. + * @param personalizationString personalization string to distinguish this DRBG (may be null). + * @param nonce nonce to further distinguish this DRBG (may be null). + */ + public HashSP800Drbg(IDigest digest, int securityStrength, IEntropySource entropySource, byte[] personalizationString, byte[] nonce) + { + if (securityStrength > DrbgUtilities.GetMaxSecurityStrength(digest)) + throw new ArgumentException("Requested security strength is not supported by the derivation function"); + if (entropySource.EntropySize < securityStrength) + throw new ArgumentException("Not enough entropy for security strength required"); + + mDigest = digest; + mEntropySource = entropySource; + mSecurityStrength = securityStrength; + mSeedLength = SeedLens[digest.AlgorithmName]; + + // 1. seed_material = entropy_input || nonce || personalization_string. + // 2. seed = Hash_df (seed_material, seedlen). + // 3. V = seed. + // 4. C = Hash_df ((0x00 || V), seedlen). Comment: Preceed V with a byte + // of zeros. + // 5. reseed_counter = 1. + // 6. Return V, C, and reseed_counter as the initial_working_state + + byte[] entropy = GetEntropy(); + byte[] seedMaterial = Arrays.ConcatenateAll(entropy, nonce, personalizationString); + mV = new byte[(mSeedLength + 7) / 8]; + DrbgUtilities.HashDF(mDigest, seedMaterial, mSeedLength, mV); + + byte[] subV = new byte[mV.Length + 1]; + Array.Copy(mV, 0, subV, 1, mV.Length); + mC = new byte[(mSeedLength + 7) / 8]; + DrbgUtilities.HashDF(mDigest, subV, mSeedLength, mC); + + mReseedCounter = 1; + } + + /** + * Return the block size (in bits) of the DRBG. + * + * @return the number of bits produced on each internal round of the DRBG. + */ + public int BlockSize + { + get { return mDigest.GetDigestSize() * 8; } + } + + /** + * Populate a passed in array with random data. + * + * @param output output array for generated bits. + * @param additionalInput additional input to be added to the DRBG in this step. + * @param predictionResistant true if a reseed should be forced, false otherwise. + * + * @return number of bits generated, -1 if a reseed required. + */ + public int Generate(byte[] output, int outputOff, int outputLen, byte[] additionalInput, + bool predictionResistant) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return additionalInput == null + ? Generate(output.AsSpan(outputOff, outputLen), predictionResistant) + : GenerateWithInput(output.AsSpan(outputOff, outputLen), additionalInput.AsSpan(), predictionResistant); +#else + // 1. If reseed_counter > reseed_interval, then return an indication that a + // reseed is required. + // 2. If (additional_input != Null), then do + // 2.1 w = Hash (0x02 || V || additional_input). + // 2.2 V = (V + w) mod 2^seedlen + // . + // 3. (returned_bits) = Hashgen (requested_number_of_bits, V). + // 4. H = Hash (0x03 || V). + // 5. V = (V + H + C + reseed_counter) mod 2^seedlen + // . + // 6. reseed_counter = reseed_counter + 1. + // 7. Return SUCCESS, returned_bits, and the new values of V, C, and + // reseed_counter for the new_working_state. + int numberOfBits = outputLen * 8; + + if (numberOfBits > MAX_BITS_REQUEST) + throw new ArgumentException("Number of bits per request limited to " + MAX_BITS_REQUEST, "output"); + + if (mReseedCounter > RESEED_MAX) + return -1; + + if (predictionResistant) + { + Reseed(additionalInput); + additionalInput = null; + } + + // 2. + if (additionalInput != null) + { + byte[] newInput = new byte[1 + mV.Length + additionalInput.Length]; + newInput[0] = 0x02; + Array.Copy(mV, 0, newInput, 1, mV.Length); + Array.Copy(additionalInput, 0, newInput, 1 + mV.Length, additionalInput.Length); + byte[] w = Hash(newInput); + + AddTo(mV, w); + } + + // 3. + byte[] rv = Hashgen(mV, outputLen); + + // 4. + byte[] subH = new byte[mV.Length + 1]; + Array.Copy(mV, 0, subH, 1, mV.Length); + subH[0] = 0x03; + + byte[] H = Hash(subH); + + // 5. + AddTo(mV, H); + AddTo(mV, mC); + + byte[] c = new byte[4]; + Pack.UInt32_To_BE((uint)mReseedCounter, c); + + AddTo(mV, c); + + mReseedCounter++; + + Array.Copy(rv, 0, output, outputOff, outputLen); + + return numberOfBits; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int Generate(Span output, bool predictionResistant) + { + // 1. If reseed_counter > reseed_interval, then return an indication that a + // reseed is required. + // 2. If (additional_input != Null), then do + // 2.1 w = Hash (0x02 || V || additional_input). + // 2.2 V = (V + w) mod 2^seedlen + // . + // 3. (returned_bits) = Hashgen (requested_number_of_bits, V). + // 4. H = Hash (0x03 || V). + // 5. V = (V + H + C + reseed_counter) mod 2^seedlen + // . + // 6. reseed_counter = reseed_counter + 1. + // 7. Return SUCCESS, returned_bits, and the new values of V, C, and + // reseed_counter for the new_working_state. + int numberOfBits = output.Length * 8; + + if (numberOfBits > MAX_BITS_REQUEST) + throw new ArgumentException("Number of bits per request limited to " + MAX_BITS_REQUEST, "output"); + + if (mReseedCounter > RESEED_MAX) + return -1; + + if (predictionResistant) + { + Reseed(ReadOnlySpan.Empty); + } + + return ImplGenerate(output); + } + + public int GenerateWithInput(Span output, ReadOnlySpan additionalInput, bool predictionResistant) + { + // 1. If reseed_counter > reseed_interval, then return an indication that a + // reseed is required. + // 2. If (additional_input != Null), then do + // 2.1 w = Hash (0x02 || V || additional_input). + // 2.2 V = (V + w) mod 2^seedlen + // . + // 3. (returned_bits) = Hashgen (requested_number_of_bits, V). + // 4. H = Hash (0x03 || V). + // 5. V = (V + H + C + reseed_counter) mod 2^seedlen + // . + // 6. reseed_counter = reseed_counter + 1. + // 7. Return SUCCESS, returned_bits, and the new values of V, C, and + // reseed_counter for the new_working_state. + int numberOfBits = output.Length * 8; + + if (numberOfBits > MAX_BITS_REQUEST) + throw new ArgumentException("Number of bits per request limited to " + MAX_BITS_REQUEST, "output"); + + if (mReseedCounter > RESEED_MAX) + return -1; + + if (predictionResistant) + { + Reseed(additionalInput); + } + else + { + // 2. + mDigest.Update(0x02); + mDigest.BlockUpdate(mV); + mDigest.BlockUpdate(additionalInput); + + int digestSize = mDigest.GetDigestSize(); + Span w = digestSize <= 128 + ? stackalloc byte[digestSize] + : new byte[digestSize]; + mDigest.DoFinal(w); + + AddTo(mV, w); + } + + return ImplGenerate(output); + } + + private int ImplGenerate(Span output) + { + // 3. + Hashgen(mV, output); + + // 4. + mDigest.Update(0x03); + mDigest.BlockUpdate(mV); + + int digestSize = mDigest.GetDigestSize(); + Span H = digestSize <= 128 + ? stackalloc byte[digestSize] + : new byte[digestSize]; + mDigest.DoFinal(H); + + // 5. + AddTo(mV, H); + AddTo(mV, mC); + + Span c = stackalloc byte[4]; + Pack.UInt32_To_BE((uint)mReseedCounter, c); + + AddTo(mV, c); + + mReseedCounter++; + + return output.Length * 8; + } +#endif + + private byte[] GetEntropy() + { + byte[] entropy = mEntropySource.GetEntropy(); + if (entropy.Length < (mSecurityStrength + 7) / 8) + throw new InvalidOperationException("Insufficient entropy provided by entropy source"); + return entropy; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int GetEntropy(Span output) + { + int length = mEntropySource.GetEntropy(output); + if (length < (mSecurityStrength + 7) / 8) + throw new InvalidOperationException("Insufficient entropy provided by entropy source"); + return length; + } + + private int GetEntropyLength() + { + return (mEntropySource.EntropySize + 7) / 8; + } +#endif + + // this will always add the shorter length byte array mathematically to the + // longer length byte array. + // be careful.... +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void AddTo(Span longer, ReadOnlySpan shorter) +#else + private void AddTo(byte[] longer, byte[] shorter) +#endif + { + int off = longer.Length - shorter.Length; + + uint carry = 0; + int i = shorter.Length; + while (--i >= 0) + { + carry += (uint)longer[off + i] + shorter[i]; + longer[off + i] = (byte)carry; + carry >>= 8; + } + + i = off; + while (--i >= 0) + { + carry += longer[i]; + longer[i] = (byte)carry; + carry >>= 8; + } + } + + /** + * Reseed the DRBG. + * + * @param additionalInput additional input to be added to the DRBG in this step. + */ + public void Reseed(byte[] additionalInput) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Reseed(Spans.FromNullableReadOnly(additionalInput)); +#else + // 1. seed_material = 0x01 || V || entropy_input || additional_input. + // + // 2. seed = Hash_df (seed_material, seedlen). + // + // 3. V = seed. + // + // 4. C = Hash_df ((0x00 || V), seedlen). + // + // 5. reseed_counter = 1. + // + // 6. Return V, C, and reseed_counter for the new_working_state. + // + // Comment: Precede with a byte of all zeros. + byte[] entropy = GetEntropy(); + byte[] seedMaterial = Arrays.ConcatenateAll(ONE, mV, entropy, additionalInput); + DrbgUtilities.HashDF(mDigest, seedMaterial, mSeedLength, mV); + + byte[] subV = new byte[mV.Length + 1]; + subV[0] = 0x00; + Array.Copy(mV, 0, subV, 1, mV.Length); + DrbgUtilities.HashDF(mDigest, subV, mSeedLength, mC); + + mReseedCounter = 1; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Reseed(ReadOnlySpan additionalInput) + { + // 1. seed_material = 0x01 || V || entropy_input || additional_input. + // + // 2. seed = Hash_df (seed_material, seedlen). + // + // 3. V = seed. + // + // 4. C = Hash_df ((0x00 || V), seedlen). + // + // 5. reseed_counter = 1. + // + // 6. Return V, C, and reseed_counter for the new_working_state. + // + // Comment: Precede with a byte of all zeros. + int entropyLength = GetEntropyLength(); + + int seedMaterialLength = 1 + mV.Length + entropyLength + additionalInput.Length; + Span seedMaterial = seedMaterialLength <= 256 + ? stackalloc byte[seedMaterialLength] + : new byte[seedMaterialLength]; + + seedMaterial[0] = 0x01; + mV.CopyTo(seedMaterial[1..]); + GetEntropy(seedMaterial[(1 + mV.Length)..]); + additionalInput.CopyTo(seedMaterial[(1 + mV.Length + entropyLength)..]); + + DrbgUtilities.HashDF(mDigest, seedMaterial, mSeedLength, mV); + + int subVLength = 1 + mV.Length; + Span subV = subVLength <= 128 + ? stackalloc byte[subVLength] + : new byte[subVLength]; + subV[0] = 0x00; + mV.CopyTo(subV[1..]); + + DrbgUtilities.HashDF(mDigest, subV, mSeedLength, mC); + + mReseedCounter = 1; + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void DoHash(ReadOnlySpan input, Span output) + { + mDigest.BlockUpdate(input); + mDigest.DoFinal(output); + } +#else + private void DoHash(byte[] input, byte[] output) + { + mDigest.BlockUpdate(input, 0, input.Length); + mDigest.DoFinal(output, 0); + } + + private byte[] Hash(byte[] input) + { + byte[] hash = new byte[mDigest.GetDigestSize()]; + DoHash(input, hash); + return hash; + } +#endif + + // 1. m = [requested_number_of_bits / outlen] + // 2. data = V. + // 3. W = the Null string. + // 4. For i = 1 to m + // 4.1 wi = Hash (data). + // 4.2 W = W || wi. + // 4.3 data = (data + 1) mod 2^seedlen + // . + // 5. returned_bits = Leftmost (requested_no_of_bits) bits of W. +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void Hashgen(ReadOnlySpan input, Span output) + { + int digestSize = mDigest.GetDigestSize(); + int m = output.Length / digestSize; + + int dataSize = input.Length; + Span data = dataSize <= 256 + ? stackalloc byte[input.Length] + : new byte[input.Length]; + input.CopyTo(data); + + Span dig = digestSize <= 128 + ? stackalloc byte[digestSize] + : new byte[digestSize]; + + for (int i = 0; i <= m; i++) + { + DoHash(data, dig); + + int bytesToCopy = System.Math.Min(digestSize, output.Length - i * digestSize); + dig[..bytesToCopy].CopyTo(output[(i * digestSize)..]); + AddTo(data, ONE); + } + } +#else + private byte[] Hashgen(byte[] input, int length) + { + int digestSize = mDigest.GetDigestSize(); + int m = length / digestSize; + + byte[] data = (byte[])input.Clone(); + byte[] W = new byte[length]; + + byte[] dig = new byte[digestSize]; + for (int i = 0; i <= m; i++) + { + DoHash(data, dig); + + int bytesToCopy = System.Math.Min(digestSize, length - i * digestSize); + Array.Copy(dig, 0, W, i * digestSize, bytesToCopy); + + AddTo(data, ONE); + } + + return W; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/HashSP800Drbg.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/HashSP800Drbg.cs.meta new file mode 100644 index 000000000..e5705360e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/HashSP800Drbg.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a85748f6547ed6342a29b17c5d5fc6eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/ISP80090Drbg.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/ISP80090Drbg.cs new file mode 100644 index 000000000..a6f9493af --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/ISP80090Drbg.cs @@ -0,0 +1,49 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng.Drbg +{ + /** + * Interface to SP800-90A deterministic random bit generators. + */ + public interface ISP80090Drbg + { + /** + * Return the block size of the DRBG. + * + * @return the block size (in bits) produced by each round of the DRBG. + */ + int BlockSize { get; } + + /** + * Populate a passed in array with random data. + * + * @param output output array for generated bits. + * @param additionalInput additional input to be added to the DRBG in this step. + * @param predictionResistant true if a reseed should be forced, false otherwise. + * + * @return number of bits generated, -1 if a reseed required. + */ + int Generate(byte[] output, int outputOff, int outputLen, byte[] additionalInput, bool predictionResistant); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int Generate(Span output, bool predictionResistant); + + int GenerateWithInput(Span output, ReadOnlySpan additionalInput, bool predictionResistant); +#endif + + /** + * Reseed the DRBG. + * + * @param additionalInput additional input to be added to the DRBG in this step. + */ + void Reseed(byte[] additionalInput); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + void Reseed(ReadOnlySpan additionalInput); +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/ISP80090Drbg.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/ISP80090Drbg.cs.meta new file mode 100644 index 000000000..a30836d97 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/prng/drbg/ISP80090Drbg.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b5c19a9bd75eab245b6a2d472950fd2d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers.meta new file mode 100644 index 000000000..09316afaf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 962655b8d2a40294bad978e6d458a24e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/DsaDigestSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/DsaDigestSigner.cs new file mode 100644 index 000000000..7d66f3f0d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/DsaDigestSigner.cs @@ -0,0 +1,130 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + public class DsaDigestSigner + : ISigner + { + private readonly IDsa dsa; + private readonly IDigest digest; + private readonly IDsaEncoding encoding; + private bool forSigning; + + public DsaDigestSigner(IDsa dsa, IDigest digest) + : this(dsa, digest, StandardDsaEncoding.Instance) + { + } + + public DsaDigestSigner(IDsa dsa, IDigest digest, IDsaEncoding encoding) + { + this.dsa = dsa; + this.digest = digest; + this.encoding = encoding; + } + + public virtual string AlgorithmName + { + get { return digest.AlgorithmName + "with" + dsa.AlgorithmName; } + } + + public virtual void Init(bool forSigning, ICipherParameters parameters) + { + this.forSigning = forSigning; + + AsymmetricKeyParameter k; + if (parameters is ParametersWithRandom withRandom) + { + k = (AsymmetricKeyParameter)withRandom.Parameters; + } + else + { + k = (AsymmetricKeyParameter)parameters; + } + + if (forSigning && !k.IsPrivate) + throw new InvalidKeyException("Signing Requires Private Key."); + + if (!forSigning && k.IsPrivate) + throw new InvalidKeyException("Verification Requires Public Key."); + + Reset(); + + dsa.Init(forSigning, parameters); + } + + public virtual void Update(byte input) + { + digest.Update(input); + } + + public virtual void BlockUpdate(byte[] input, int inOff, int inLen) + { + digest.BlockUpdate(input, inOff, inLen); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + digest.BlockUpdate(input); + } +#endif + + public virtual byte[] GenerateSignature() + { + if (!forSigning) + throw new InvalidOperationException("DSADigestSigner not initialised for signature generation."); + + byte[] hash = new byte[digest.GetDigestSize()]; + digest.DoFinal(hash, 0); + + BigInteger[] sig = dsa.GenerateSignature(hash); + + try + { + return encoding.Encode(GetOrder(), sig[0], sig[1]); + } + catch (Exception) + { + throw new InvalidOperationException("unable to encode signature"); + } + } + + public virtual bool VerifySignature(byte[] signature) + { + if (forSigning) + throw new InvalidOperationException("DSADigestSigner not initialised for verification"); + + byte[] hash = new byte[digest.GetDigestSize()]; + digest.DoFinal(hash, 0); + + try + { + BigInteger[] sig = encoding.Decode(GetOrder(), signature); + + return dsa.VerifySignature(hash, sig[0], sig[1]); + } + catch (Exception) + { + return false; + } + } + + public virtual void Reset() + { + digest.Reset(); + } + + protected virtual BigInteger GetOrder() + { + return dsa.Order; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/DsaDigestSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/DsaDigestSigner.cs.meta new file mode 100644 index 000000000..645f76406 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/DsaDigestSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c9905792014e74d4f8a532ab18084ac5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/DsaSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/DsaSigner.cs new file mode 100644 index 000000000..dff1c6ec8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/DsaSigner.cs @@ -0,0 +1,165 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + /** + * The Digital Signature Algorithm - as described in "Handbook of Applied + * Cryptography", pages 452 - 453. + */ + public class DsaSigner + : IDsa + { + protected readonly IDsaKCalculator kCalculator; + + protected DsaKeyParameters key = null; + protected SecureRandom random = null; + + /** + * Default configuration, random K values. + */ + public DsaSigner() + { + this.kCalculator = new RandomDsaKCalculator(); + } + + /** + * Configuration with an alternate, possibly deterministic calculator of K. + * + * @param kCalculator a K value calculator. + */ + public DsaSigner(IDsaKCalculator kCalculator) + { + this.kCalculator = kCalculator; + } + + public virtual string AlgorithmName + { + get { return "DSA"; } + } + + public virtual void Init(bool forSigning, ICipherParameters parameters) + { + SecureRandom providedRandom = null; + + if (forSigning) + { + if (parameters is ParametersWithRandom) + { + ParametersWithRandom rParam = (ParametersWithRandom)parameters; + + providedRandom = rParam.Random; + parameters = rParam.Parameters; + } + + if (!(parameters is DsaPrivateKeyParameters)) + throw new InvalidKeyException("DSA private key required for signing"); + + this.key = (DsaPrivateKeyParameters)parameters; + } + else + { + if (!(parameters is DsaPublicKeyParameters)) + throw new InvalidKeyException("DSA public key required for verification"); + + this.key = (DsaPublicKeyParameters)parameters; + } + + this.random = InitSecureRandom(forSigning && !kCalculator.IsDeterministic, providedRandom); + } + + public virtual BigInteger Order + { + get { return key.Parameters.Q; } + } + + /** + * Generate a signature for the given message using the key we were + * initialised with. For conventional DSA the message should be a SHA-1 + * hash of the message of interest. + * + * @param message the message that will be verified later. + */ + public virtual BigInteger[] GenerateSignature(byte[] message) + { + DsaParameters parameters = key.Parameters; + BigInteger q = parameters.Q; + BigInteger m = CalculateE(q, message); + BigInteger x = ((DsaPrivateKeyParameters)key).X; + + if (kCalculator.IsDeterministic) + { + kCalculator.Init(q, x, message); + } + else + { + kCalculator.Init(q, random); + } + + BigInteger k = kCalculator.NextK(); + + BigInteger r = parameters.G.ModPow(k, parameters.P).Mod(q); + + k = BigIntegers.ModOddInverse(q, k).Multiply(m.Add(x.Multiply(r))); + + BigInteger s = k.Mod(q); + + return new BigInteger[]{ r, s }; + } + + /** + * return true if the value r and s represent a DSA signature for + * the passed in message for standard DSA the message should be a + * SHA-1 hash of the real message to be verified. + */ + public virtual bool VerifySignature(byte[] message, BigInteger r, BigInteger s) + { + DsaParameters parameters = key.Parameters; + BigInteger q = parameters.Q; + BigInteger m = CalculateE(q, message); + + if (r.SignValue <= 0 || q.CompareTo(r) <= 0) + { + return false; + } + + if (s.SignValue <= 0 || q.CompareTo(s) <= 0) + { + return false; + } + + BigInteger w = BigIntegers.ModOddInverseVar(q, s); + + BigInteger u1 = m.Multiply(w).Mod(q); + BigInteger u2 = r.Multiply(w).Mod(q); + + BigInteger p = parameters.P; + u1 = parameters.G.ModPow(u1, p); + u2 = ((DsaPublicKeyParameters)key).Y.ModPow(u2, p); + + BigInteger v = u1.Multiply(u2).Mod(p).Mod(q); + + return v.Equals(r); + } + + protected virtual BigInteger CalculateE(BigInteger n, byte[] message) + { + int length = System.Math.Min(message.Length, n.BitLength / 8); + + return new BigInteger(1, message, 0, length); + } + + protected virtual SecureRandom InitSecureRandom(bool needed, SecureRandom provided) + { + return !needed ? null : CryptoServicesRegistrar.GetSecureRandom(provided); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/DsaSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/DsaSigner.cs.meta new file mode 100644 index 000000000..f2b98a822 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/DsaSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5b22a4699dfabe048aca470ec8820c46 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/ECDsaSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/ECDsaSigner.cs new file mode 100644 index 000000000..4f1f4244d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/ECDsaSigner.cs @@ -0,0 +1,249 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + /** + * EC-DSA as described in X9.62 + */ + public class ECDsaSigner + : IDsa + { + private static readonly BigInteger Eight = BigInteger.ValueOf(8); + + protected readonly IDsaKCalculator kCalculator; + + protected ECKeyParameters key = null; + protected SecureRandom random = null; + + /** + * Default configuration, random K values. + */ + public ECDsaSigner() + { + this.kCalculator = new RandomDsaKCalculator(); + } + + /** + * Configuration with an alternate, possibly deterministic calculator of K. + * + * @param kCalculator a K value calculator. + */ + public ECDsaSigner(IDsaKCalculator kCalculator) + { + this.kCalculator = kCalculator; + } + + public virtual string AlgorithmName + { + get { return "ECDSA"; } + } + + public virtual void Init(bool forSigning, ICipherParameters parameters) + { + SecureRandom providedRandom = null; + + if (forSigning) + { + if (parameters is ParametersWithRandom) + { + ParametersWithRandom rParam = (ParametersWithRandom)parameters; + + providedRandom = rParam.Random; + parameters = rParam.Parameters; + } + + if (!(parameters is ECPrivateKeyParameters)) + throw new InvalidKeyException("EC private key required for signing"); + + this.key = (ECPrivateKeyParameters)parameters; + } + else + { + if (!(parameters is ECPublicKeyParameters)) + throw new InvalidKeyException("EC public key required for verification"); + + this.key = (ECPublicKeyParameters)parameters; + } + + this.random = InitSecureRandom(forSigning && !kCalculator.IsDeterministic, providedRandom); + } + + public virtual BigInteger Order + { + get { return key.Parameters.N; } + } + + // 5.3 pg 28 + /** + * Generate a signature for the given message using the key we were + * initialised with. For conventional DSA the message should be a SHA-1 + * hash of the message of interest. + * + * @param message the message that will be verified later. + */ + public virtual BigInteger[] GenerateSignature(byte[] message) + { + ECDomainParameters ec = key.Parameters; + BigInteger n = ec.N; + BigInteger e = CalculateE(n, message); + BigInteger d = ((ECPrivateKeyParameters)key).D; + + if (kCalculator.IsDeterministic) + { + kCalculator.Init(n, d, message); + } + else + { + kCalculator.Init(n, random); + } + + BigInteger r, s; + + ECMultiplier basePointMultiplier = CreateBasePointMultiplier(); + + // 5.3.2 + do // Generate s + { + BigInteger k; + do // Generate r + { + k = kCalculator.NextK(); + + ECPoint p = basePointMultiplier.Multiply(ec.G, k).Normalize(); + + // 5.3.3 + r = p.AffineXCoord.ToBigInteger().Mod(n); + } + while (r.SignValue == 0); + + s = BigIntegers.ModOddInverse(n, k).Multiply(e.Add(d.Multiply(r))).Mod(n); + } + while (s.SignValue == 0); + + return new BigInteger[]{ r, s }; + } + + // 5.4 pg 29 + /** + * return true if the value r and s represent a DSA signature for + * the passed in message (for standard DSA the message should be + * a SHA-1 hash of the real message to be verified). + */ + public virtual bool VerifySignature(byte[] message, BigInteger r, BigInteger s) + { + BigInteger n = key.Parameters.N; + + // r and s should both in the range [1,n-1] + if (r.SignValue < 1 || s.SignValue < 1 + || r.CompareTo(n) >= 0 || s.CompareTo(n) >= 0) + { + return false; + } + + BigInteger e = CalculateE(n, message); + BigInteger c = BigIntegers.ModOddInverseVar(n, s); + + BigInteger u1 = e.Multiply(c).Mod(n); + BigInteger u2 = r.Multiply(c).Mod(n); + + ECPoint G = key.Parameters.G; + ECPoint Q = ((ECPublicKeyParameters) key).Q; + + ECPoint point = ECAlgorithms.SumOfTwoMultiplies(G, u1, Q, u2); + + if (point.IsInfinity) + return false; + + /* + * If possible, avoid normalizing the point (to save a modular inversion in the curve field). + * + * There are ~cofactor elements of the curve field that reduce (modulo the group order) to 'r'. + * If the cofactor is known and small, we generate those possible field values and project each + * of them to the same "denominator" (depending on the particular projective coordinates in use) + * as the calculated point.X. If any of the projected values matches point.X, then we have: + * (point.X / Denominator mod p) mod n == r + * as required, and verification succeeds. + * + * Based on an original idea by Gregory Maxwell (https://github.com/gmaxwell), as implemented in + * the libsecp256k1 project (https://github.com/bitcoin/secp256k1). + */ + ECCurve curve = point.Curve; + if (curve != null) + { + BigInteger cofactor = curve.Cofactor; + if (cofactor != null && cofactor.CompareTo(Eight) <= 0) + { + ECFieldElement D = GetDenominator(curve.CoordinateSystem, point); + if (D != null && !D.IsZero) + { + ECFieldElement X = point.XCoord; + while (curve.IsValidFieldElement(r)) + { + ECFieldElement R = curve.FromBigInteger(r).Multiply(D); + if (R.Equals(X)) + { + return true; + } + r = r.Add(n); + } + return false; + } + } + } + + BigInteger v = point.Normalize().AffineXCoord.ToBigInteger().Mod(n); + return v.Equals(r); + } + + protected virtual BigInteger CalculateE(BigInteger n, byte[] message) + { + int messageBitLength = message.Length * 8; + BigInteger trunc = new BigInteger(1, message); + + if (n.BitLength < messageBitLength) + { + trunc = trunc.ShiftRight(messageBitLength - n.BitLength); + } + + return trunc; + } + + protected virtual ECMultiplier CreateBasePointMultiplier() + { + return new FixedPointCombMultiplier(); + } + + protected virtual ECFieldElement GetDenominator(int coordinateSystem, ECPoint p) + { + switch (coordinateSystem) + { + case ECCurve.COORD_HOMOGENEOUS: + case ECCurve.COORD_LAMBDA_PROJECTIVE: + case ECCurve.COORD_SKEWED: + return p.GetZCoord(0); + case ECCurve.COORD_JACOBIAN: + case ECCurve.COORD_JACOBIAN_CHUDNOVSKY: + case ECCurve.COORD_JACOBIAN_MODIFIED: + return p.GetZCoord(0).Square(); + default: + return null; + } + } + + protected virtual SecureRandom InitSecureRandom(bool needed, SecureRandom provided) + { + return !needed ? null : CryptoServicesRegistrar.GetSecureRandom(provided); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/ECDsaSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/ECDsaSigner.cs.meta new file mode 100644 index 000000000..3bf6ef68b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/ECDsaSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2aeec19b82b60784b857139153cf8807 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/ECGOST3410Signer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/ECGOST3410Signer.cs new file mode 100644 index 000000000..4f5bd9997 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/ECGOST3410Signer.cs @@ -0,0 +1,155 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + /** + * GOST R 34.10-2001 Signature Algorithm + */ + public class ECGost3410Signer + : IDsa + { + private ECKeyParameters key; + private SecureRandom random; + private bool forSigning; + + public virtual string AlgorithmName + { + get { return key.AlgorithmName; } + } + + public virtual void Init(bool forSigning, ICipherParameters parameters) + { + this.forSigning = forSigning; + + if (forSigning) + { + if (parameters is ParametersWithRandom rParam) + { + this.random = rParam.Random; + parameters = rParam.Parameters; + } + else + { + this.random = CryptoServicesRegistrar.GetSecureRandom(); + } + + if (!(parameters is ECPrivateKeyParameters ecPrivateKeyParameters)) + throw new InvalidKeyException("EC private key required for signing"); + + this.key = ecPrivateKeyParameters; + } + else + { + if (!(parameters is ECPublicKeyParameters ecPublicKeyParameters)) + throw new InvalidKeyException("EC public key required for verification"); + + this.key = ecPublicKeyParameters; + } + } + + public virtual BigInteger Order => key.Parameters.N; + + /** + * generate a signature for the given message using the key we were + * initialised with. For conventional GOST3410 the message should be a GOST3411 + * hash of the message of interest. + * + * @param message the message that will be verified later. + */ + public virtual BigInteger[] GenerateSignature(byte[] message) + { + if (!forSigning) + throw new InvalidOperationException("not initialized for signing"); + + byte[] mRev = Arrays.Reverse(message); // conversion is little-endian + BigInteger e = new BigInteger(1, mRev); + + ECDomainParameters ec = key.Parameters; + BigInteger n = ec.N; + BigInteger d = ((ECPrivateKeyParameters)key).D; + + BigInteger r, s; + + ECMultiplier basePointMultiplier = CreateBasePointMultiplier(); + + do // generate s + { + BigInteger k; + do // generate r + { + do + { + k = BigIntegers.CreateRandomBigInteger(n.BitLength, random); + } + while (k.SignValue == 0); + + ECPoint p = basePointMultiplier.Multiply(ec.G, k).Normalize(); + + r = p.AffineXCoord.ToBigInteger().Mod(n); + } + while (r.SignValue == 0); + + s = k.Multiply(e).Add(d.Multiply(r)).Mod(n); + } + while (s.SignValue == 0); + + return new BigInteger[]{ r, s }; + } + + /** + * return true if the value r and s represent a GOST3410 signature for + * the passed in message (for standard GOST3410 the message should be + * a GOST3411 hash of the real message to be verified). + */ + public virtual bool VerifySignature(byte[] message, BigInteger r, BigInteger s) + { + if (forSigning) + throw new InvalidOperationException("not initialized for verification"); + + byte[] mRev = Arrays.Reverse(message); // conversion is little-endian + BigInteger e = new BigInteger(1, mRev); + BigInteger n = key.Parameters.N; + + // r in the range [1,n-1] + if (r.CompareTo(BigInteger.One) < 0 || r.CompareTo(n) >= 0) + return false; + + // s in the range [1,n-1] + if (s.CompareTo(BigInteger.One) < 0 || s.CompareTo(n) >= 0) + return false; + + BigInteger v = BigIntegers.ModOddInverseVar(n, e); + + BigInteger z1 = s.Multiply(v).Mod(n); + BigInteger z2 = n.Subtract(r).Multiply(v).Mod(n); + + ECPoint G = key.Parameters.G; // P + ECPoint Q = ((ECPublicKeyParameters)key).Q; + + ECPoint point = ECAlgorithms.SumOfTwoMultiplies(G, z1, Q, z2).Normalize(); + + if (point.IsInfinity) + return false; + + BigInteger R = point.AffineXCoord.ToBigInteger().Mod(n); + + return R.Equals(r); + } + + protected virtual ECMultiplier CreateBasePointMultiplier() + { + return new FixedPointCombMultiplier(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/ECGOST3410Signer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/ECGOST3410Signer.cs.meta new file mode 100644 index 000000000..62116d197 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/ECGOST3410Signer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c0fa6c431f2efb54c89b5784adc45bd7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/ECNRSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/ECNRSigner.cs new file mode 100644 index 000000000..dbbfdb67a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/ECNRSigner.cs @@ -0,0 +1,193 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + /** + * EC-NR as described in IEEE 1363-2000 + */ + public class ECNRSigner + : IDsa + { + private bool forSigning; + private ECKeyParameters key; + private SecureRandom random; + + public virtual string AlgorithmName + { + get { return "ECNR"; } + } + + public virtual void Init(bool forSigning, ICipherParameters parameters) + { + this.forSigning = forSigning; + + if (forSigning) + { + if (parameters is ParametersWithRandom rParam) + { + this.random = rParam.Random; + parameters = rParam.Parameters; + } + else + { + this.random = CryptoServicesRegistrar.GetSecureRandom(); + } + + if (!(parameters is ECPrivateKeyParameters)) + throw new InvalidKeyException("EC private key required for signing"); + + this.key = (ECPrivateKeyParameters) parameters; + } + else + { + if (!(parameters is ECPublicKeyParameters)) + throw new InvalidKeyException("EC public key required for verification"); + + this.key = (ECPublicKeyParameters) parameters; + } + } + + public virtual BigInteger Order + { + get { return key.Parameters.N; } + } + + // Section 7.2.5 ECSP-NR, pg 34 + /** + * generate a signature for the given message using the key we were + * initialised with. Generally, the order of the curve should be at + * least as long as the hash of the message of interest, and with + * ECNR it *must* be at least as long. + * + * @param digest the digest to be signed. + * @exception DataLengthException if the digest is longer than the key allows + */ + public virtual BigInteger[] GenerateSignature( + byte[] message) + { + if (!this.forSigning) + { + // not properly initilaized... deal with it + throw new InvalidOperationException("not initialised for signing"); + } + + BigInteger n = Order; + int nBitLength = n.BitLength; + + BigInteger e = new BigInteger(1, message); + int eBitLength = e.BitLength; + + ECPrivateKeyParameters privKey = (ECPrivateKeyParameters)key; + + if (eBitLength > nBitLength) + { + throw new DataLengthException("input too large for ECNR key."); + } + + BigInteger r = null; + BigInteger s = null; + + AsymmetricCipherKeyPair tempPair; + do // generate r + { + // generate another, but very temporary, key pair using + // the same EC parameters + ECKeyPairGenerator keyGen = new ECKeyPairGenerator(); + + keyGen.Init(new ECKeyGenerationParameters(privKey.Parameters, this.random)); + + tempPair = keyGen.GenerateKeyPair(); + + // BigInteger Vx = tempPair.getPublic().getW().getAffineX(); + ECPublicKeyParameters V = (ECPublicKeyParameters) tempPair.Public; // get temp's public key + BigInteger Vx = V.Q.AffineXCoord.ToBigInteger(); // get the point's x coordinate + + r = Vx.Add(e).Mod(n); + } + while (r.SignValue == 0); + + // generate s + BigInteger x = privKey.D; // private key value + BigInteger u = ((ECPrivateKeyParameters) tempPair.Private).D; // temp's private key value + s = u.Subtract(r.Multiply(x)).Mod(n); + + return new BigInteger[]{ r, s }; + } + + // Section 7.2.6 ECVP-NR, pg 35 + /** + * return true if the value r and s represent a signature for the + * message passed in. Generally, the order of the curve should be at + * least as long as the hash of the message of interest, and with + * ECNR, it *must* be at least as long. But just in case the signer + * applied mod(n) to the longer digest, this implementation will + * apply mod(n) during verification. + * + * @param digest the digest to be verified. + * @param r the r value of the signature. + * @param s the s value of the signature. + * @exception DataLengthException if the digest is longer than the key allows + */ + public virtual bool VerifySignature( + byte[] message, + BigInteger r, + BigInteger s) + { + if (this.forSigning) + { + // not properly initilaized... deal with it + throw new InvalidOperationException("not initialised for verifying"); + } + + ECPublicKeyParameters pubKey = (ECPublicKeyParameters)key; + BigInteger n = pubKey.Parameters.N; + int nBitLength = n.BitLength; + + BigInteger e = new BigInteger(1, message); + int eBitLength = e.BitLength; + + if (eBitLength > nBitLength) + { + throw new DataLengthException("input too large for ECNR key."); + } + + // r in the range [1,n-1] + if (r.CompareTo(BigInteger.One) < 0 || r.CompareTo(n) >= 0) + { + return false; + } + + // s in the range [0,n-1] NB: ECNR spec says 0 + if (s.CompareTo(BigInteger.Zero) < 0 || s.CompareTo(n) >= 0) + { + return false; + } + + // compute P = sG + rW + + ECPoint G = pubKey.Parameters.G; + ECPoint W = pubKey.Q; + // calculate P using Bouncy math + ECPoint P = ECAlgorithms.SumOfTwoMultiplies(G, s, W, r).Normalize(); + + if (P.IsInfinity) + return false; + + BigInteger x = P.AffineXCoord.ToBigInteger(); + BigInteger t = r.Subtract(x).Mod(n); + + return t.Equals(e); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/ECNRSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/ECNRSigner.cs.meta new file mode 100644 index 000000000..7e5ffc36d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/ECNRSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7b65a3f5dbbb4a340bbc3407aa2a1316 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed25519Signer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed25519Signer.cs new file mode 100644 index 000000000..71516bf87 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed25519Signer.cs @@ -0,0 +1,134 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc8032; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + public class Ed25519Signer + : ISigner + { + private readonly Buffer buffer = new Buffer(); + + private bool forSigning; + private Ed25519PrivateKeyParameters privateKey; + private Ed25519PublicKeyParameters publicKey; + + public Ed25519Signer() + { + } + + public virtual string AlgorithmName + { + get { return "Ed25519"; } + } + + public virtual void Init(bool forSigning, ICipherParameters parameters) + { + this.forSigning = forSigning; + + if (forSigning) + { + this.privateKey = (Ed25519PrivateKeyParameters)parameters; + this.publicKey = null; + } + else + { + this.privateKey = null; + this.publicKey = (Ed25519PublicKeyParameters)parameters; + } + + Reset(); + } + + public virtual void Update(byte b) + { + buffer.WriteByte(b); + } + + public virtual void BlockUpdate(byte[] buf, int off, int len) + { + buffer.Write(buf, off, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + buffer.Write(input); + } +#endif + + public virtual byte[] GenerateSignature() + { + if (!forSigning || null == privateKey) + throw new InvalidOperationException("Ed25519Signer not initialised for signature generation."); + + return buffer.GenerateSignature(privateKey); + } + + public virtual bool VerifySignature(byte[] signature) + { + if (forSigning || null == publicKey) + throw new InvalidOperationException("Ed25519Signer not initialised for verification"); + + return buffer.VerifySignature(publicKey, signature); + } + + public virtual void Reset() + { + buffer.Reset(); + } + + private class Buffer : MemoryStream + { + internal byte[] GenerateSignature(Ed25519PrivateKeyParameters privateKey) + { + lock (this) + { + byte[] buf = GetBuffer(); + int count = Convert.ToInt32(Length); + + byte[] signature = new byte[Ed25519PrivateKeyParameters.SignatureSize]; + privateKey.Sign(Ed25519.Algorithm.Ed25519, null, buf, 0, count, signature, 0); + Reset(); + return signature; + } + } + + internal bool VerifySignature(Ed25519PublicKeyParameters publicKey, byte[] signature) + { + if (Ed25519.SignatureSize != signature.Length) + { + Reset(); + return false; + } + + lock (this) + { + byte[] buf = GetBuffer(); + int count = Convert.ToInt32(Length); + + byte[] pk = publicKey.GetEncoded(); + bool result = Ed25519.Verify(signature, 0, pk, 0, buf, 0, count); + Reset(); + return result; + } + } + + internal void Reset() + { + lock (this) + { + int count = Convert.ToInt32(Length); + Array.Clear(GetBuffer(), 0, count); + SetLength(0); + } + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed25519Signer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed25519Signer.cs.meta new file mode 100644 index 000000000..b5498a354 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed25519Signer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c4be6eb199857ba4fbc1658655705be2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed25519ctxSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed25519ctxSigner.cs new file mode 100644 index 000000000..a23a063e7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed25519ctxSigner.cs @@ -0,0 +1,137 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc8032; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + public class Ed25519ctxSigner + : ISigner + { + private readonly Buffer buffer = new Buffer(); + private readonly byte[] context; + + private bool forSigning; + private Ed25519PrivateKeyParameters privateKey; + private Ed25519PublicKeyParameters publicKey; + + public Ed25519ctxSigner(byte[] context) + { + this.context = Arrays.Clone(context); + } + + public virtual string AlgorithmName + { + get { return "Ed25519ctx"; } + } + + public virtual void Init(bool forSigning, ICipherParameters parameters) + { + this.forSigning = forSigning; + + if (forSigning) + { + this.privateKey = (Ed25519PrivateKeyParameters)parameters; + this.publicKey = null; + } + else + { + this.privateKey = null; + this.publicKey = (Ed25519PublicKeyParameters)parameters; + } + + Reset(); + } + + public virtual void Update(byte b) + { + buffer.WriteByte(b); + } + + public virtual void BlockUpdate(byte[] buf, int off, int len) + { + buffer.Write(buf, off, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + buffer.Write(input); + } +#endif + + public virtual byte[] GenerateSignature() + { + if (!forSigning || null == privateKey) + throw new InvalidOperationException("Ed25519ctxSigner not initialised for signature generation."); + + return buffer.GenerateSignature(privateKey, context); + } + + public virtual bool VerifySignature(byte[] signature) + { + if (forSigning || null == publicKey) + throw new InvalidOperationException("Ed25519ctxSigner not initialised for verification"); + + return buffer.VerifySignature(publicKey, context, signature); + } + + public virtual void Reset() + { + buffer.Reset(); + } + + private class Buffer : MemoryStream + { + internal byte[] GenerateSignature(Ed25519PrivateKeyParameters privateKey, byte[] ctx) + { + lock (this) + { + byte[] buf = GetBuffer(); + int count = Convert.ToInt32(Length); + + byte[] signature = new byte[Ed25519PrivateKeyParameters.SignatureSize]; + privateKey.Sign(Ed25519.Algorithm.Ed25519ctx, ctx, buf, 0, count, signature, 0); + Reset(); + return signature; + } + } + + internal bool VerifySignature(Ed25519PublicKeyParameters publicKey, byte[] ctx, byte[] signature) + { + if (Ed25519.SignatureSize != signature.Length) + { + Reset(); + return false; + } + + lock (this) + { + byte[] buf = GetBuffer(); + int count = Convert.ToInt32(Length); + + byte[] pk = publicKey.GetEncoded(); + bool result = Ed25519.Verify(signature, 0, pk, 0, ctx, buf, 0, count); + Reset(); + return result; + } + } + + internal void Reset() + { + lock (this) + { + int count = Convert.ToInt32(Length); + Array.Clear(GetBuffer(), 0, count); + SetLength(0); + } + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed25519ctxSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed25519ctxSigner.cs.meta new file mode 100644 index 000000000..8be00c052 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed25519ctxSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6a1d3e7080838824a9ba890b627de089 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed25519phSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed25519phSigner.cs new file mode 100644 index 000000000..f7e3849e9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed25519phSigner.cs @@ -0,0 +1,102 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc8032; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + public class Ed25519phSigner + : ISigner + { + private readonly IDigest prehash = Ed25519.CreatePrehash(); + private readonly byte[] context; + + private bool forSigning; + private Ed25519PrivateKeyParameters privateKey; + private Ed25519PublicKeyParameters publicKey; + + public Ed25519phSigner(byte[] context) + { + this.context = Arrays.Clone(context); + } + + public virtual string AlgorithmName + { + get { return "Ed25519ph"; } + } + + public virtual void Init(bool forSigning, ICipherParameters parameters) + { + this.forSigning = forSigning; + + if (forSigning) + { + this.privateKey = (Ed25519PrivateKeyParameters)parameters; + this.publicKey = null; + } + else + { + this.privateKey = null; + this.publicKey = (Ed25519PublicKeyParameters)parameters; + } + + Reset(); + } + + public virtual void Update(byte b) + { + prehash.Update(b); + } + + public virtual void BlockUpdate(byte[] buf, int off, int len) + { + prehash.BlockUpdate(buf, off, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + prehash.BlockUpdate(input); + } +#endif + + public virtual byte[] GenerateSignature() + { + if (!forSigning || null == privateKey) + throw new InvalidOperationException("Ed25519phSigner not initialised for signature generation."); + + byte[] msg = new byte[Ed25519.PrehashSize]; + if (Ed25519.PrehashSize != prehash.DoFinal(msg, 0)) + throw new InvalidOperationException("Prehash digest failed"); + + byte[] signature = new byte[Ed25519PrivateKeyParameters.SignatureSize]; + privateKey.Sign(Ed25519.Algorithm.Ed25519ph, context, msg, 0, Ed25519.PrehashSize, signature, 0); + return signature; + } + + public virtual bool VerifySignature(byte[] signature) + { + if (forSigning || null == publicKey) + throw new InvalidOperationException("Ed25519phSigner not initialised for verification"); + if (Ed25519.SignatureSize != signature.Length) + { + prehash.Reset(); + return false; + } + + byte[] pk = publicKey.GetEncoded(); + return Ed25519.VerifyPrehash(signature, 0, pk, 0, context, prehash); + } + + public void Reset() + { + prehash.Reset(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed25519phSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed25519phSigner.cs.meta new file mode 100644 index 000000000..32d696485 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed25519phSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4cb55a2ed90089e49bf2f4a650bd0b75 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed448Signer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed448Signer.cs new file mode 100644 index 000000000..ff4d0fa85 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed448Signer.cs @@ -0,0 +1,137 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc8032; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + public class Ed448Signer + : ISigner + { + private readonly Buffer buffer = new Buffer(); + private readonly byte[] context; + + private bool forSigning; + private Ed448PrivateKeyParameters privateKey; + private Ed448PublicKeyParameters publicKey; + + public Ed448Signer(byte[] context) + { + this.context = Arrays.Clone(context); + } + + public virtual string AlgorithmName + { + get { return "Ed448"; } + } + + public virtual void Init(bool forSigning, ICipherParameters parameters) + { + this.forSigning = forSigning; + + if (forSigning) + { + this.privateKey = (Ed448PrivateKeyParameters)parameters; + this.publicKey = null; + } + else + { + this.privateKey = null; + this.publicKey = (Ed448PublicKeyParameters)parameters; + } + + Reset(); + } + + public virtual void Update(byte b) + { + buffer.WriteByte(b); + } + + public virtual void BlockUpdate(byte[] buf, int off, int len) + { + buffer.Write(buf, off, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + buffer.Write(input); + } +#endif + + public virtual byte[] GenerateSignature() + { + if (!forSigning || null == privateKey) + throw new InvalidOperationException("Ed448Signer not initialised for signature generation."); + + return buffer.GenerateSignature(privateKey, context); + } + + public virtual bool VerifySignature(byte[] signature) + { + if (forSigning || null == publicKey) + throw new InvalidOperationException("Ed448Signer not initialised for verification"); + + return buffer.VerifySignature(publicKey, context, signature); + } + + public virtual void Reset() + { + buffer.Reset(); + } + + private class Buffer : MemoryStream + { + internal byte[] GenerateSignature(Ed448PrivateKeyParameters privateKey, byte[] ctx) + { + lock (this) + { + byte[] buf = GetBuffer(); + int count = Convert.ToInt32(Length); + + byte[] signature = new byte[Ed448PrivateKeyParameters.SignatureSize]; + privateKey.Sign(Ed448.Algorithm.Ed448, ctx, buf, 0, count, signature, 0); + Reset(); + return signature; + } + } + + internal bool VerifySignature(Ed448PublicKeyParameters publicKey, byte[] ctx, byte[] signature) + { + if (Ed448.SignatureSize != signature.Length) + { + Reset(); + return false; + } + + lock (this) + { + byte[] buf = GetBuffer(); + int count = Convert.ToInt32(Length); + + byte[] pk = publicKey.GetEncoded(); + bool result = Ed448.Verify(signature, 0, pk, 0, ctx, buf, 0, count); + Reset(); + return result; + } + } + + internal void Reset() + { + lock (this) + { + int count = Convert.ToInt32(Length); + Array.Clear(GetBuffer(), 0, count); + SetLength(0); + } + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed448Signer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed448Signer.cs.meta new file mode 100644 index 000000000..9f1f36e93 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed448Signer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f9d2c4cec709344a955e7ee6be9ef75 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed448phSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed448phSigner.cs new file mode 100644 index 000000000..ca5a427cf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed448phSigner.cs @@ -0,0 +1,102 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc8032; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + public class Ed448phSigner + : ISigner + { + private readonly IXof prehash = Ed448.CreatePrehash(); + private readonly byte[] context; + + private bool forSigning; + private Ed448PrivateKeyParameters privateKey; + private Ed448PublicKeyParameters publicKey; + + public Ed448phSigner(byte[] context) + { + this.context = Arrays.Clone(context); + } + + public virtual string AlgorithmName + { + get { return "Ed448ph"; } + } + + public virtual void Init(bool forSigning, ICipherParameters parameters) + { + this.forSigning = forSigning; + + if (forSigning) + { + this.privateKey = (Ed448PrivateKeyParameters)parameters; + this.publicKey = null; + } + else + { + this.privateKey = null; + this.publicKey = (Ed448PublicKeyParameters)parameters; + } + + Reset(); + } + + public virtual void Update(byte b) + { + prehash.Update(b); + } + + public virtual void BlockUpdate(byte[] buf, int off, int len) + { + prehash.BlockUpdate(buf, off, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + prehash.BlockUpdate(input); + } +#endif + + public virtual byte[] GenerateSignature() + { + if (!forSigning || null == privateKey) + throw new InvalidOperationException("Ed448phSigner not initialised for signature generation."); + + byte[] msg = new byte[Ed448.PrehashSize]; + if (Ed448.PrehashSize != prehash.OutputFinal(msg, 0, Ed448.PrehashSize)) + throw new InvalidOperationException("Prehash digest failed"); + + byte[] signature = new byte[Ed448PrivateKeyParameters.SignatureSize]; + privateKey.Sign(Ed448.Algorithm.Ed448ph, context, msg, 0, Ed448.PrehashSize, signature, 0); + return signature; + } + + public virtual bool VerifySignature(byte[] signature) + { + if (forSigning || null == publicKey) + throw new InvalidOperationException("Ed448phSigner not initialised for verification"); + if (Ed448.SignatureSize != signature.Length) + { + prehash.Reset(); + return false; + } + + byte[] pk = publicKey.GetEncoded(); + return Ed448.VerifyPrehash(signature, 0, pk, 0, context, prehash); + } + + public void Reset() + { + prehash.Reset(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed448phSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed448phSigner.cs.meta new file mode 100644 index 000000000..cd684f89f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Ed448phSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d482c3f30a338e84eac18dc552d6f14f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/GOST3410DigestSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/GOST3410DigestSigner.cs new file mode 100644 index 000000000..dcdb74a4c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/GOST3410DigestSigner.cs @@ -0,0 +1,137 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + public class Gost3410DigestSigner + : ISigner + { + private readonly IDigest digest; + private readonly IDsa dsaSigner; + private readonly int size; + private int halfSize; + private bool forSigning; + + public Gost3410DigestSigner(IDsa signer, IDigest digest) + { + this.dsaSigner = signer; + this.digest = digest; + + halfSize = digest.GetDigestSize(); + this.size = halfSize * 2; + + } + + public virtual string AlgorithmName + { + get { return digest.AlgorithmName + "with" + dsaSigner.AlgorithmName; } + } + + public virtual void Init(bool forSigning, ICipherParameters parameters) + { + this.forSigning = forSigning; + + AsymmetricKeyParameter k; + if (parameters is ParametersWithRandom) + { + k = (AsymmetricKeyParameter)((ParametersWithRandom)parameters).Parameters; + } + else + { + k = (AsymmetricKeyParameter)parameters; + } + + if (forSigning && !k.IsPrivate) + { + throw new InvalidKeyException("Signing Requires Private Key."); + } + + if (!forSigning && k.IsPrivate) + { + throw new InvalidKeyException("Verification Requires Public Key."); + } + + + Reset(); + + dsaSigner.Init(forSigning, parameters); + } + + public virtual void Update(byte input) + { + digest.Update(input); + } + + public virtual void BlockUpdate(byte[] input, int inOff, int inLen) + { + digest.BlockUpdate(input, inOff, inLen); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + digest.BlockUpdate(input); + } +#endif + + public virtual byte[] GenerateSignature() + { + if (!forSigning) + throw new InvalidOperationException("GOST3410DigestSigner not initialised for signature generation."); + + byte[] hash = new byte[digest.GetDigestSize()]; + digest.DoFinal(hash, 0); + + try + { + BigInteger[] sig = dsaSigner.GenerateSignature(hash); + byte[] sigBytes = new byte[size]; + + // TODO Add methods to allow writing BigInteger to existing byte array? + byte[] r = sig[0].ToByteArrayUnsigned(); + byte[] s = sig[1].ToByteArrayUnsigned(); + s.CopyTo(sigBytes, halfSize - s.Length); + r.CopyTo(sigBytes, size - r.Length); + return sigBytes; + } + catch (Exception e) + { + throw new SignatureException(e.Message, e); + } + } + + public virtual bool VerifySignature(byte[] signature) + { + if (forSigning) + throw new InvalidOperationException("DSADigestSigner not initialised for verification"); + + byte[] hash = new byte[digest.GetDigestSize()]; + digest.DoFinal(hash, 0); + + BigInteger R, S; + try + { + R = new BigInteger(1, signature, halfSize, halfSize); + S = new BigInteger(1, signature, 0, halfSize); + } + catch (Exception e) + { + throw new SignatureException("error decoding signature bytes.", e); + } + + return dsaSigner.VerifySignature(hash, R, S); + } + + public virtual void Reset() + { + digest.Reset(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/GOST3410DigestSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/GOST3410DigestSigner.cs.meta new file mode 100644 index 000000000..313b6beb9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/GOST3410DigestSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e49e35369e72fe545b2a1fddbaa3603a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/GOST3410Signer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/GOST3410Signer.cs new file mode 100644 index 000000000..36655e8df --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/GOST3410Signer.cs @@ -0,0 +1,128 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + /** + * Gost R 34.10-94 Signature Algorithm + */ + public class Gost3410Signer + : IDsa + { + private Gost3410KeyParameters key; + private SecureRandom random; + + public virtual string AlgorithmName + { + get { return "GOST3410"; } + } + + public virtual void Init(bool forSigning, ICipherParameters parameters) + { + if (forSigning) + { + if (parameters is ParametersWithRandom rParam) + { + this.random = rParam.Random; + parameters = rParam.Parameters; + } + else + { + this.random = CryptoServicesRegistrar.GetSecureRandom(); + } + + if (!(parameters is Gost3410PrivateKeyParameters)) + throw new InvalidKeyException("GOST3410 private key required for signing"); + + this.key = (Gost3410PrivateKeyParameters) parameters; + } + else + { + if (!(parameters is Gost3410PublicKeyParameters)) + throw new InvalidKeyException("GOST3410 public key required for signing"); + + this.key = (Gost3410PublicKeyParameters) parameters; + } + } + + public virtual BigInteger Order + { + get { return key.Parameters.Q; } + } + + /** + * generate a signature for the given message using the key we were + * initialised with. For conventional Gost3410 the message should be a Gost3411 + * hash of the message of interest. + * + * @param message the message that will be verified later. + */ + public virtual BigInteger[] GenerateSignature( + byte[] message) + { + byte[] mRev = Arrays.Reverse(message); // conversion is little-endian + BigInteger m = new BigInteger(1, mRev); + Gost3410Parameters parameters = key.Parameters; + BigInteger k; + + do + { + k = new BigInteger(parameters.Q.BitLength, random); + } + while (k.CompareTo(parameters.Q) >= 0); + + BigInteger r = parameters.A.ModPow(k, parameters.P).Mod(parameters.Q); + + BigInteger s = k.Multiply(m). + Add(((Gost3410PrivateKeyParameters)key).X.Multiply(r)). + Mod(parameters.Q); + + return new BigInteger[]{ r, s }; + } + + /** + * return true if the value r and s represent a Gost3410 signature for + * the passed in message for standard Gost3410 the message should be a + * Gost3411 hash of the real message to be verified. + */ + public virtual bool VerifySignature( + byte[] message, + BigInteger r, + BigInteger s) + { + byte[] mRev = Arrays.Reverse(message); // conversion is little-endian + BigInteger m = new BigInteger(1, mRev); + Gost3410Parameters parameters = key.Parameters; + + if (r.SignValue < 0 || parameters.Q.CompareTo(r) <= 0) + { + return false; + } + + if (s.SignValue < 0 || parameters.Q.CompareTo(s) <= 0) + { + return false; + } + + BigInteger v = m.ModPow(parameters.Q.Subtract(BigInteger.Two), parameters.Q); + + BigInteger z1 = s.Multiply(v).Mod(parameters.Q); + BigInteger z2 = (parameters.Q.Subtract(r)).Multiply(v).Mod(parameters.Q); + + z1 = parameters.A.ModPow(z1, parameters.P); + z2 = ((Gost3410PublicKeyParameters)key).Y.ModPow(z2, parameters.P); + + BigInteger u = z1.Multiply(z2).Mod(parameters.P).Mod(parameters.Q); + + return u.Equals(r); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/GOST3410Signer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/GOST3410Signer.cs.meta new file mode 100644 index 000000000..ec61a12e9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/GOST3410Signer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 675f660b7066e3842bfd94bc6c5ea723 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/GenericSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/GenericSigner.cs new file mode 100644 index 000000000..372c61aaf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/GenericSigner.cs @@ -0,0 +1,127 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + public class GenericSigner + : ISigner + { + private readonly IAsymmetricBlockCipher engine; + private readonly IDigest digest; + private bool forSigning; + + public GenericSigner( + IAsymmetricBlockCipher engine, + IDigest digest) + { + this.engine = engine; + this.digest = digest; + } + + public virtual string AlgorithmName + { + get { return "Generic(" + engine.AlgorithmName + "/" + digest.AlgorithmName + ")"; } + } + + /** + * initialise the signer for signing or verification. + * + * @param forSigning + * true if for signing, false otherwise + * @param parameters + * necessary parameters. + */ + public virtual void Init(bool forSigning, ICipherParameters parameters) + { + this.forSigning = forSigning; + + AsymmetricKeyParameter k; + if (parameters is ParametersWithRandom) + { + k = (AsymmetricKeyParameter)((ParametersWithRandom)parameters).Parameters; + } + else + { + k = (AsymmetricKeyParameter)parameters; + } + + if (forSigning && !k.IsPrivate) + throw new InvalidKeyException("Signing requires private key."); + + if (!forSigning && k.IsPrivate) + throw new InvalidKeyException("Verification requires public key."); + + Reset(); + + engine.Init(forSigning, parameters); + } + + public virtual void Update(byte input) + { + digest.Update(input); + } + + public virtual void BlockUpdate(byte[] input, int inOff, int inLen) + { + digest.BlockUpdate(input, inOff, inLen); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + digest.BlockUpdate(input); + } +#endif + + public virtual byte[] GenerateSignature() + { + if (!forSigning) + throw new InvalidOperationException("GenericSigner not initialised for signature generation."); + + byte[] hash = new byte[digest.GetDigestSize()]; + digest.DoFinal(hash, 0); + + return engine.ProcessBlock(hash, 0, hash.Length); + } + + public virtual bool VerifySignature(byte[] signature) + { + if (forSigning) + throw new InvalidOperationException("GenericSigner not initialised for verification"); + + byte[] hash = new byte[digest.GetDigestSize()]; + digest.DoFinal(hash, 0); + + try + { + byte[] sig = engine.ProcessBlock(signature, 0, signature.Length); + + // Extend with leading zeroes to match the digest size, if necessary. + if (sig.Length < hash.Length) + { + byte[] tmp = new byte[hash.Length]; + Array.Copy(sig, 0, tmp, tmp.Length - sig.Length, sig.Length); + sig = tmp; + } + + return Arrays.ConstantTimeAreEqual(sig, hash); + } + catch (Exception) + { + return false; + } + } + + public virtual void Reset() + { + digest.Reset(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/GenericSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/GenericSigner.cs.meta new file mode 100644 index 000000000..554fceec0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/GenericSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c33281fcbe5fc2448a481ded39da05c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/HMacDsaKCalculator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/HMacDsaKCalculator.cs new file mode 100644 index 000000000..12cec18e6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/HMacDsaKCalculator.cs @@ -0,0 +1,169 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + /** + * A deterministic K calculator based on the algorithm in section 3.2 of RFC 6979. + */ + public class HMacDsaKCalculator + : IDsaKCalculator + { + private readonly HMac hMac; + private readonly byte[] K; + private readonly byte[] V; + + private BigInteger n; + + /** + * Base constructor. + * + * @param digest digest to build the HMAC on. + */ + public HMacDsaKCalculator(IDigest digest) + { + this.hMac = new HMac(digest); + this.V = new byte[hMac.GetMacSize()]; + this.K = new byte[hMac.GetMacSize()]; + } + + public virtual bool IsDeterministic + { + get { return true; } + } + + public virtual void Init(BigInteger n, SecureRandom random) + { + throw new InvalidOperationException("Operation not supported"); + } + + public void Init(BigInteger n, BigInteger d, byte[] message) + { + this.n = n; + + Arrays.Fill(V, 0x01); + Arrays.Fill(K, 0); + + BigInteger mInt = BitsToInt(message); + if (mInt.CompareTo(n) >= 0) + { + mInt = mInt.Subtract(n); + } + + int size = BigIntegers.GetUnsignedByteLength(n); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int xmSize = size * 2; + Span xm = xmSize <= 512 + ? stackalloc byte[xmSize] + : new byte[xmSize]; + BigIntegers.AsUnsignedByteArray(d, xm[..size]); + BigIntegers.AsUnsignedByteArray(mInt, xm[size..]); +#else + byte[] x = BigIntegers.AsUnsignedByteArray(size, d); + byte[] m = BigIntegers.AsUnsignedByteArray(size, mInt); +#endif + + hMac.Init(new KeyParameter(K)); + + hMac.BlockUpdate(V, 0, V.Length); + hMac.Update(0x00); +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + hMac.BlockUpdate(xm); +#else + hMac.BlockUpdate(x, 0, x.Length); + hMac.BlockUpdate(m, 0, m.Length); +#endif + InitAdditionalInput0(hMac); + hMac.DoFinal(K, 0); + + hMac.Init(new KeyParameter(K)); + hMac.BlockUpdate(V, 0, V.Length); + hMac.DoFinal(V, 0); + + hMac.BlockUpdate(V, 0, V.Length); + hMac.Update(0x01); +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + hMac.BlockUpdate(xm); +#else + hMac.BlockUpdate(x, 0, x.Length); + hMac.BlockUpdate(m, 0, m.Length); +#endif + hMac.DoFinal(K, 0); + + hMac.Init(new KeyParameter(K)); + hMac.BlockUpdate(V, 0, V.Length); + hMac.DoFinal(V, 0); + } + + public virtual BigInteger NextK() + { + byte[] t = new byte[BigIntegers.GetUnsignedByteLength(n)]; + + for (;;) + { + int tOff = 0; + + while (tOff < t.Length) + { + hMac.BlockUpdate(V, 0, V.Length); + hMac.DoFinal(V, 0); + + int len = System.Math.Min(t.Length - tOff, V.Length); + Array.Copy(V, 0, t, tOff, len); + tOff += len; + } + + BigInteger k = BitsToInt(t); + + if (k.SignValue > 0 && k.CompareTo(n) < 0) + return k; + + hMac.BlockUpdate(V, 0, V.Length); + hMac.Update(0x00); + hMac.DoFinal(K, 0); + + hMac.Init(new KeyParameter(K)); + hMac.BlockUpdate(V, 0, V.Length); + hMac.DoFinal(V, 0); + } + } + + /// Supports use of additional input. + /// + /// RFC 6979 3.6. Additional data may be added to the input of HMAC [..]. A use case may be a protocol that + /// requires a non-deterministic signature algorithm on a system that does not have access to a high-quality + /// random source. It suffices that the additional data[..] is non-repeating(e.g., a signature counter or a + /// monotonic clock) to ensure "random-looking" signatures are indistinguishable, in a cryptographic way, from + /// plain (EC)DSA signatures. + /// + /// By default there is no additional input. Override this method to supply additional input, bearing in mind + /// that this calculator may be used for many signatures. + /// + /// The to which the additional input should be added. + protected virtual void InitAdditionalInput0(HMac hmac0) + { + } + + private BigInteger BitsToInt(byte[] t) + { + BigInteger v = new BigInteger(1, t); + + if (t.Length * 8 > n.BitLength) + { + v = v.ShiftRight(t.Length * 8 - n.BitLength); + } + + return v; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/HMacDsaKCalculator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/HMacDsaKCalculator.cs.meta new file mode 100644 index 000000000..a805ca9d5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/HMacDsaKCalculator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 78e1027b4769aa54ba1097aeccbdf881 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/IDsaEncoding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/IDsaEncoding.cs new file mode 100644 index 000000000..c921dcb35 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/IDsaEncoding.cs @@ -0,0 +1,29 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + /// + /// An interface for different encoding formats for DSA signatures. + /// + public interface IDsaEncoding + { + /// Decode the (r, s) pair of a DSA signature. + /// The order of the group that r, s belong to. + /// An encoding of the (r, s) pair of a DSA signature. + /// The (r, s) of a DSA signature, stored in an array of exactly two elements, r followed by s. + BigInteger[] Decode(BigInteger n, byte[] encoding); + + /// Encode the (r, s) pair of a DSA signature. + /// The order of the group that r, s belong to. + /// The r value of a DSA signature. + /// The s value of a DSA signature. + /// An encoding of the DSA signature given by the provided (r, s) pair. + byte[] Encode(BigInteger n, BigInteger r, BigInteger s); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/IDsaEncoding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/IDsaEncoding.cs.meta new file mode 100644 index 000000000..f11da5004 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/IDsaEncoding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b15d467750338ac4a8b50bf23145b743 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/IDsaKCalculator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/IDsaKCalculator.cs new file mode 100644 index 000000000..08a40c456 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/IDsaKCalculator.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + /** + * Interface define calculators of K values for DSA/ECDSA. + */ + public interface IDsaKCalculator + { + /** + * Return true if this calculator is deterministic, false otherwise. + * + * @return true if deterministic, otherwise false. + */ + bool IsDeterministic { get; } + + /** + * Non-deterministic initialiser. + * + * @param n the order of the DSA group. + * @param random a source of randomness. + */ + void Init(BigInteger n, SecureRandom random); + + /** + * Deterministic initialiser. + * + * @param n the order of the DSA group. + * @param d the DSA private value. + * @param message the message being signed. + */ + void Init(BigInteger n, BigInteger d, byte[] message); + + /** + * Return the next valid value of K. + * + * @return a K value. + */ + BigInteger NextK(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/IDsaKCalculator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/IDsaKCalculator.cs.meta new file mode 100644 index 000000000..c6a65e1e9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/IDsaKCalculator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b6b2ca8e130099946a1565068a5b5929 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Iso9796d2PssSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Iso9796d2PssSigner.cs new file mode 100644 index 000000000..ca6cd24e7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Iso9796d2PssSigner.cs @@ -0,0 +1,617 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + /// ISO9796-2 - mechanism using a hash function with recovery (scheme 2 and 3). + ///

+ /// Note: the usual length for the salt is the length of the hash + /// function used in bytes.

+ ///
+ public class Iso9796d2PssSigner + : ISignerWithRecovery + { + /// + /// Return a reference to the recoveredMessage message. + /// + /// The full/partial recoveredMessage message. + /// + public byte[] GetRecoveredMessage() + { + return recoveredMessage; + } + + private IDigest digest; + private IAsymmetricBlockCipher cipher; + + private SecureRandom random; + private byte[] standardSalt; + + private int hLen; + private int trailer; + private int keyBits; + private byte[] block; + private byte[] mBuf; + private int messageLength; + private readonly int saltLength; + private bool fullMessage; + private byte[] recoveredMessage; + + private byte[] preSig; + private byte[] preBlock; + private int preMStart; + private int preTLength; + + /// + /// Generate a signer with either implicit or explicit trailers for ISO9796-2, scheme 2 or 3. + /// + /// base cipher to use for signature creation/verification + /// digest to use. + /// length of salt in bytes. + /// whether or not the trailer is implicit or gives the hash. + public Iso9796d2PssSigner( + IAsymmetricBlockCipher cipher, + IDigest digest, + int saltLength, + bool isImplicit) + { + this.cipher = cipher; + this.digest = digest; + this.hLen = digest.GetDigestSize(); + this.saltLength = saltLength; + + if (isImplicit) + { + trailer = IsoTrailers.TRAILER_IMPLICIT; + } + else if (IsoTrailers.NoTrailerAvailable(digest)) + { + throw new ArgumentException("no valid trailer", "digest"); + } + else + { + trailer = IsoTrailers.GetTrailer(digest); + } + } + + /// Constructor for a signer with an explicit digest trailer. + /// + /// + /// cipher to use. + /// + /// digest to sign with. + /// + /// length of salt in bytes. + /// + public Iso9796d2PssSigner( + IAsymmetricBlockCipher cipher, + IDigest digest, + int saltLength) + : this(cipher, digest, saltLength, false) + { + } + + public virtual string AlgorithmName + { + get { return digest.AlgorithmName + "with" + "ISO9796-2S2"; } + } + + /// Initialise the signer. + /// true if for signing, false if for verification. + /// parameters for signature generation/verification. If the + /// parameters are for generation they should be a ParametersWithRandom, + /// a ParametersWithSalt, or just an RsaKeyParameters object. If RsaKeyParameters + /// are passed in a SecureRandom will be created. + /// + /// if wrong parameter type or a fixed + /// salt is passed in which is the wrong length. + /// + public virtual void Init(bool forSigning, ICipherParameters parameters) + { + RsaKeyParameters kParam; + if (parameters is ParametersWithRandom withRandom) + { + kParam = (RsaKeyParameters)withRandom.Parameters; + + if (forSigning) + { + random = withRandom.Random; + } + } + else if (parameters is ParametersWithSalt withSalt) + { + if (!forSigning) + throw new ArgumentException("ParametersWithSalt only valid for signing", nameof(parameters)); + + kParam = (RsaKeyParameters)withSalt.Parameters; + standardSalt = withSalt.GetSalt(); + + if (standardSalt.Length != saltLength) + throw new ArgumentException("Fixed salt is of wrong length"); + } + else + { + kParam = (RsaKeyParameters)parameters; + + if (forSigning) + { + random = CryptoServicesRegistrar.GetSecureRandom(); + } + } + + cipher.Init(forSigning, kParam); + + keyBits = kParam.Modulus.BitLength; + + block = new byte[(keyBits + 7) / 8]; + + if (trailer == IsoTrailers.TRAILER_IMPLICIT) + { + mBuf = new byte[block.Length - digest.GetDigestSize() - saltLength - 1 - 1]; + } + else + { + mBuf = new byte[block.Length - digest.GetDigestSize() - saltLength - 1 - 2]; + } + + Reset(); + } + + /// compare two byte arrays - constant time. + private bool IsSameAs(byte[] a, byte[] b) + { + if (messageLength != b.Length) + { + return false; + } + + bool isOkay = true; + + for (int i = 0; i != b.Length; i++) + { + if (a[i] != b[i]) + { + isOkay = false; + } + } + + return isOkay; + } + + /// clear possible sensitive data + private void ClearBlock( + byte[] block) + { + Array.Clear(block, 0, block.Length); + } + + public virtual void UpdateWithRecoveredMessage( + byte[] signature) + { + byte[] block = cipher.ProcessBlock(signature, 0, signature.Length); + + // + // adjust block size for leading zeroes if necessary + // + if (block.Length < (keyBits + 7) / 8) + { + byte[] tmp = new byte[(keyBits + 7) / 8]; + + Array.Copy(block, 0, tmp, tmp.Length - block.Length, block.Length); + ClearBlock(block); + block = tmp; + } + + int tLength; + + if (((block[block.Length - 1] & 0xFF) ^ 0xBC) == 0) + { + tLength = 1; + } + else + { + int sigTrail = ((block[block.Length - 2] & 0xFF) << 8) | (block[block.Length - 1] & 0xFF); + + if (IsoTrailers.NoTrailerAvailable(digest)) + throw new ArgumentException("unrecognised hash in signature"); + + if (sigTrail != IsoTrailers.GetTrailer(digest)) + throw new InvalidOperationException("signer initialised with wrong digest for trailer " + sigTrail); + + tLength = 2; + } + + // + // calculate H(m2) + // + byte[] m2Hash = new byte[hLen]; + digest.DoFinal(m2Hash, 0); + + // + // remove the mask + // + byte[] dbMask = MaskGeneratorFunction1(block, block.Length - hLen - tLength, hLen, block.Length - hLen - tLength); + for (int i = 0; i != dbMask.Length; i++) + { + block[i] ^= dbMask[i]; + } + + block[0] &= 0x7f; + + // + // find out how much padding we've got + // + int mStart = 0; + + while (mStart < block.Length) + { + if (block[mStart++] == 0x01) + break; + } + + if (mStart >= block.Length) + { + ClearBlock(block); + } + + fullMessage = (mStart > 1); + + recoveredMessage = new byte[dbMask.Length - mStart - saltLength]; + + Array.Copy(block, mStart, recoveredMessage, 0, recoveredMessage.Length); + recoveredMessage.CopyTo(mBuf, 0); + + preSig = signature; + preBlock = block; + preMStart = mStart; + preTLength = tLength; + } + + /// update the internal digest with the byte b + public virtual void Update( + byte input) + { + if (preSig == null && messageLength < mBuf.Length) + { + mBuf[messageLength++] = input; + } + else + { + digest.Update(input); + } + } + + public virtual void BlockUpdate(byte[] input, int inOff, int inLen) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BlockUpdate(input.AsSpan(inOff, inLen)); +#else + if (preSig == null) + { + while (inLen > 0 && messageLength < mBuf.Length) + { + this.Update(input[inOff]); + inOff++; + inLen--; + } + } + + if (inLen > 0) + { + digest.BlockUpdate(input, inOff, inLen); + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + if (preSig == null) + { + while (!input.IsEmpty && messageLength < mBuf.Length) + { + this.Update(input[0]); + input = input[1..]; + } + } + + if (!input.IsEmpty) + { + digest.BlockUpdate(input); + } + } +#endif + + /// reset the internal state + public virtual void Reset() + { + digest.Reset(); + messageLength = 0; + if (mBuf != null) + { + ClearBlock(mBuf); + } + if (recoveredMessage != null) + { + ClearBlock(recoveredMessage); + recoveredMessage = null; + } + fullMessage = false; + if (preSig != null) + { + preSig = null; + ClearBlock(preBlock); + preBlock = null; + } + } + + /// Generate a signature for the loaded message using the key we were + /// initialised with. + /// + public virtual byte[] GenerateSignature() + { + int digSize = digest.GetDigestSize(); + byte[] m2Hash = new byte[digSize]; + digest.DoFinal(m2Hash, 0); + + byte[] C = new byte[8]; + LtoOSP(messageLength * 8, C); + + digest.BlockUpdate(C, 0, C.Length); + digest.BlockUpdate(mBuf, 0, messageLength); + digest.BlockUpdate(m2Hash, 0, m2Hash.Length); + + byte[] salt; + if (standardSalt != null) + { + salt = standardSalt; + } + else + { + salt = new byte[saltLength]; + random.NextBytes(salt); + } + + digest.BlockUpdate(salt, 0, salt.Length); + + byte[] hash = new byte[digest.GetDigestSize()]; + digest.DoFinal(hash, 0); + + int tLength = 2; + if (trailer == IsoTrailers.TRAILER_IMPLICIT) + { + tLength = 1; + } + + int off = block.Length - messageLength - salt.Length - hLen - tLength - 1; + + block[off] = (byte) (0x01); + + Array.Copy(mBuf, 0, block, off + 1, messageLength); + Array.Copy(salt, 0, block, off + 1 + messageLength, salt.Length); + + byte[] dbMask = MaskGeneratorFunction1(hash, 0, hash.Length, block.Length - hLen - tLength); + for (int i = 0; i != dbMask.Length; i++) + { + block[i] ^= dbMask[i]; + } + + Array.Copy(hash, 0, block, block.Length - hLen - tLength, hLen); + + if (trailer == IsoTrailers.TRAILER_IMPLICIT) + { + block[block.Length - 1] = (byte)IsoTrailers.TRAILER_IMPLICIT; + } + else + { + block[block.Length - 2] = (byte) ((uint)trailer >> 8); + block[block.Length - 1] = (byte) trailer; + } + + block[0] &= (byte) (0x7f); + + byte[] b = cipher.ProcessBlock(block, 0, block.Length); + + ClearBlock(mBuf); + ClearBlock(block); + messageLength = 0; + + return b; + } + + /// return true if the signature represents a ISO9796-2 signature + /// for the passed in message. + /// + public virtual bool VerifySignature( + byte[] signature) + { + // + // calculate H(m2) + // + byte[] m2Hash = new byte[hLen]; + digest.DoFinal(m2Hash, 0); + + byte[] block; + int tLength; + int mStart = 0; + + if (preSig == null) + { + try + { + UpdateWithRecoveredMessage(signature); + } + catch (Exception) + { + return false; + } + } + else + { + if (!Arrays.AreEqual(preSig, signature)) + { + throw new InvalidOperationException("UpdateWithRecoveredMessage called on different signature"); + } + } + + block = preBlock; + mStart = preMStart; + tLength = preTLength; + + preSig = null; + preBlock = null; + + // + // check the hashes + // + byte[] C = new byte[8]; + LtoOSP(recoveredMessage.Length * 8, C); + + digest.BlockUpdate(C, 0, C.Length); + + if (recoveredMessage.Length != 0) + { + digest.BlockUpdate(recoveredMessage, 0, recoveredMessage.Length); + } + + digest.BlockUpdate(m2Hash, 0, m2Hash.Length); + + // Update for the salt + if (standardSalt != null) + { + digest.BlockUpdate(standardSalt, 0, standardSalt.Length); + } + else + { + digest.BlockUpdate(block, mStart + recoveredMessage.Length, saltLength); + } + + byte[] hash = new byte[digest.GetDigestSize()]; + digest.DoFinal(hash, 0); + + int off = block.Length - tLength - hash.Length; + + bool isOkay = true; + + for (int i = 0; i != hash.Length; i++) + { + if (hash[i] != block[off + i]) + { + isOkay = false; + } + } + + ClearBlock(block); + ClearBlock(hash); + + if (!isOkay) + { + fullMessage = false; + messageLength = 0; + ClearBlock(recoveredMessage); + return false; + } + + // + // if they've input a message check what we've recovered against + // what was input. + // + if (messageLength != 0) + { + if (!IsSameAs(mBuf, recoveredMessage)) + { + messageLength = 0; + ClearBlock(mBuf); + return false; + } + } + + messageLength = 0; + + ClearBlock(mBuf); + return true; + } + + /// + /// Return true if the full message was recoveredMessage. + /// + /// true on full message recovery, false otherwise, or if not sure. + /// + public virtual bool HasFullMessage() + { + return fullMessage; + } + + /// int to octet string. + /// int to octet string. + private void ItoOSP( + int i, + byte[] sp) + { + sp[0] = (byte)((uint)i >> 24); + sp[1] = (byte)((uint)i >> 16); + sp[2] = (byte)((uint)i >> 8); + sp[3] = (byte)((uint)i >> 0); + } + + /// long to octet string. + private void LtoOSP(long l, byte[] sp) + { + sp[0] = (byte)((ulong)l >> 56); + sp[1] = (byte)((ulong)l >> 48); + sp[2] = (byte)((ulong)l >> 40); + sp[3] = (byte)((ulong)l >> 32); + sp[4] = (byte)((ulong)l >> 24); + sp[5] = (byte)((ulong)l >> 16); + sp[6] = (byte)((ulong)l >> 8); + sp[7] = (byte)((ulong)l >> 0); + } + + /// mask generator function, as described in Pkcs1v2. + private byte[] MaskGeneratorFunction1( + byte[] Z, + int zOff, + int zLen, + int length) + { + byte[] mask = new byte[length]; + byte[] hashBuf = new byte[hLen]; + byte[] C = new byte[4]; + int counter = 0; + + digest.Reset(); + + do + { + ItoOSP(counter, C); + + digest.BlockUpdate(Z, zOff, zLen); + digest.BlockUpdate(C, 0, C.Length); + digest.DoFinal(hashBuf, 0); + + Array.Copy(hashBuf, 0, mask, counter * hLen, hLen); + } + while (++counter < (length / hLen)); + + if ((counter * hLen) < length) + { + ItoOSP(counter, C); + + digest.BlockUpdate(Z, zOff, zLen); + digest.BlockUpdate(C, 0, C.Length); + digest.DoFinal(hashBuf, 0); + + Array.Copy(hashBuf, 0, mask, counter * hLen, mask.Length - (counter * hLen)); + } + + return mask; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Iso9796d2PssSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Iso9796d2PssSigner.cs.meta new file mode 100644 index 000000000..c323cdb03 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Iso9796d2PssSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d99002462363d2048b142db69714f6ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Iso9796d2Signer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Iso9796d2Signer.cs new file mode 100644 index 000000000..3ad22beea --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Iso9796d2Signer.cs @@ -0,0 +1,554 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + /// ISO9796-2 - mechanism using a hash function with recovery (scheme 1) + public class Iso9796d2Signer : ISignerWithRecovery + { + /// + /// Return a reference to the recoveredMessage message. + /// + /// The full/partial recoveredMessage message. + /// + public byte[] GetRecoveredMessage() + { + return recoveredMessage; + } + + private IDigest digest; + private IAsymmetricBlockCipher cipher; + + private int trailer; + private int keyBits; + private byte[] block; + private byte[] mBuf; + private int messageLength; + private bool fullMessage; + private byte[] recoveredMessage; + + private byte[] preSig; + private byte[] preBlock; + + /// + /// Generate a signer with either implicit or explicit trailers for ISO9796-2. + /// + /// base cipher to use for signature creation/verification + /// digest to use. + /// whether or not the trailer is implicit or gives the hash. + public Iso9796d2Signer( + IAsymmetricBlockCipher cipher, + IDigest digest, + bool isImplicit) + { + this.cipher = cipher; + this.digest = digest; + + if (isImplicit) + { + trailer = IsoTrailers.TRAILER_IMPLICIT; + } + else if (IsoTrailers.NoTrailerAvailable(digest)) + { + throw new ArgumentException("no valid trailer", "digest"); + } + else + { + trailer = IsoTrailers.GetTrailer(digest); + } + } + + /// Constructor for a signer with an explicit digest trailer. + /// + /// + /// cipher to use. + /// + /// digest to sign with. + /// + public Iso9796d2Signer(IAsymmetricBlockCipher cipher, IDigest digest) + : this(cipher, digest, false) + { + } + + public virtual string AlgorithmName + { + get { return digest.AlgorithmName + "with" + "ISO9796-2S1"; } + } + + public virtual void Init(bool forSigning, ICipherParameters parameters) + { + RsaKeyParameters kParam = (RsaKeyParameters) parameters; + + cipher.Init(forSigning, kParam); + + keyBits = kParam.Modulus.BitLength; + + block = new byte[(keyBits + 7) / 8]; + if (trailer == IsoTrailers.TRAILER_IMPLICIT) + { + mBuf = new byte[block.Length - digest.GetDigestSize() - 2]; + } + else + { + mBuf = new byte[block.Length - digest.GetDigestSize() - 3]; + } + + Reset(); + } + + /// compare two byte arrays - constant time. + private bool IsSameAs(byte[] a, byte[] b) + { + int checkLen; + if (messageLength > mBuf.Length) + { + if (mBuf.Length > b.Length) + { + return false; + } + + checkLen = mBuf.Length; + } + else + { + if (messageLength != b.Length) + { + return false; + } + + checkLen = b.Length; + } + + bool isOkay = true; + + for (int i = 0; i != checkLen; i++) + { + if (a[i] != b[i]) + { + isOkay = false; + } + } + + return isOkay; + } + + /// clear possible sensitive data + private void ClearBlock( + byte[] block) + { + Array.Clear(block, 0, block.Length); + } + + public virtual void UpdateWithRecoveredMessage( + byte[] signature) + { + byte[] block = cipher.ProcessBlock(signature, 0, signature.Length); + + if (((block[0] & 0xC0) ^ 0x40) != 0) + throw new InvalidCipherTextException("malformed signature"); + + if (((block[block.Length - 1] & 0xF) ^ 0xC) != 0) + throw new InvalidCipherTextException("malformed signature"); + + int delta = 0; + + if (((block[block.Length - 1] & 0xFF) ^ 0xBC) == 0) + { + delta = 1; + } + else + { + int sigTrail = ((block[block.Length - 2] & 0xFF) << 8) | (block[block.Length - 1] & 0xFF); + + if (IsoTrailers.NoTrailerAvailable(digest)) + throw new ArgumentException("unrecognised hash in signature"); + + if (sigTrail != IsoTrailers.GetTrailer(digest)) + throw new InvalidOperationException("signer initialised with wrong digest for trailer " + sigTrail); + + delta = 2; + } + + // + // find out how much padding we've got + // + int mStart = 0; + + for (mStart = 0; mStart != block.Length; mStart++) + { + if (((block[mStart] & 0x0f) ^ 0x0a) == 0) + break; + } + + mStart++; + + int off = block.Length - delta - digest.GetDigestSize(); + + // + // there must be at least one byte of message string + // + if ((off - mStart) <= 0) + throw new InvalidCipherTextException("malformed block"); + + // + // if we contain the whole message as well, check the hash of that. + // + if ((block[0] & 0x20) == 0) + { + fullMessage = true; + + recoveredMessage = new byte[off - mStart]; + Array.Copy(block, mStart, recoveredMessage, 0, recoveredMessage.Length); + } + else + { + fullMessage = false; + + recoveredMessage = new byte[off - mStart]; + Array.Copy(block, mStart, recoveredMessage, 0, recoveredMessage.Length); + } + + preSig = signature; + preBlock = block; + + digest.BlockUpdate(recoveredMessage, 0, recoveredMessage.Length); + messageLength = recoveredMessage.Length; + recoveredMessage.CopyTo(mBuf, 0); + } + + public virtual void Update(byte input) + { + digest.Update(input); + + if (messageLength < mBuf.Length) + { + mBuf[messageLength] = input; + } + + messageLength++; + } + + public virtual void BlockUpdate(byte[] input, int inOff, int inLen) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BlockUpdate(input.AsSpan(inOff, inLen)); +#else + while (inLen > 0 && messageLength < mBuf.Length) + { + this.Update(input[inOff]); + inOff++; + inLen--; + } + + if (inLen > 0) + { + digest.BlockUpdate(input, inOff, inLen); + messageLength += inLen; + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + while (!input.IsEmpty && messageLength < mBuf.Length) + { + this.Update(input[0]); + input = input[1..]; + } + + if (!input.IsEmpty) + { + digest.BlockUpdate(input); + messageLength += input.Length; + } + } +#endif + + /// reset the internal state + public virtual void Reset() + { + digest.Reset(); + messageLength = 0; + ClearBlock(mBuf); + + if (recoveredMessage != null) + { + ClearBlock(recoveredMessage); + } + + recoveredMessage = null; + fullMessage = false; + + if (preSig != null) + { + preSig = null; + ClearBlock(preBlock); + preBlock = null; + } + } + + /// Generate a signature for the loaded message using the key we were + /// initialised with. + /// + public virtual byte[] GenerateSignature() + { + int digSize = digest.GetDigestSize(); + + int t = 0; + int delta = 0; + + if (trailer == IsoTrailers.TRAILER_IMPLICIT) + { + t = 8; + delta = block.Length - digSize - 1; + digest.DoFinal(block, delta); + block[block.Length - 1] = (byte)IsoTrailers.TRAILER_IMPLICIT; + } + else + { + t = 16; + delta = block.Length - digSize - 2; + digest.DoFinal(block, delta); + block[block.Length - 2] = (byte) ((uint)trailer >> 8); + block[block.Length - 1] = (byte) trailer; + } + + byte header = 0; + int x = (digSize + messageLength) * 8 + t + 4 - keyBits; + + if (x > 0) + { + int mR = messageLength - ((x + 7) / 8); + header = (byte) (0x60); + + delta -= mR; + + Array.Copy(mBuf, 0, block, delta, mR); + } + else + { + header = (byte) (0x40); + delta -= messageLength; + + Array.Copy(mBuf, 0, block, delta, messageLength); + } + + if ((delta - 1) > 0) + { + for (int i = delta - 1; i != 0; i--) + { + block[i] = (byte) 0xbb; + } + block[delta - 1] ^= (byte) 0x01; + block[0] = (byte) 0x0b; + block[0] |= header; + } + else + { + block[0] = (byte) 0x0a; + block[0] |= header; + } + + byte[] b = cipher.ProcessBlock(block, 0, block.Length); + + messageLength = 0; + + ClearBlock(mBuf); + ClearBlock(block); + + return b; + } + + /// return true if the signature represents a ISO9796-2 signature + /// for the passed in message. + /// + public virtual bool VerifySignature(byte[] signature) + { + byte[] block; + + if (preSig == null) + { + try + { + block = cipher.ProcessBlock(signature, 0, signature.Length); + } + catch (Exception) + { + return false; + } + } + else + { + if (!Arrays.AreEqual(preSig, signature)) + throw new InvalidOperationException("updateWithRecoveredMessage called on different signature"); + + block = preBlock; + + preSig = null; + preBlock = null; + } + + if (((block[0] & 0xC0) ^ 0x40) != 0) + return ReturnFalse(block); + + if (((block[block.Length - 1] & 0xF) ^ 0xC) != 0) + return ReturnFalse(block); + + int delta = 0; + + if (((block[block.Length - 1] & 0xFF) ^ 0xBC) == 0) + { + delta = 1; + } + else + { + int sigTrail = ((block[block.Length - 2] & 0xFF) << 8) | (block[block.Length - 1] & 0xFF); + + if (IsoTrailers.NoTrailerAvailable(digest)) + throw new ArgumentException("unrecognised hash in signature"); + + if (sigTrail != IsoTrailers.GetTrailer(digest)) + throw new InvalidOperationException("signer initialised with wrong digest for trailer " + sigTrail); + + delta = 2; + } + + // + // find out how much padding we've got + // + int mStart = 0; + for (; mStart != block.Length; mStart++) + { + if (((block[mStart] & 0x0f) ^ 0x0a) == 0) + { + break; + } + } + + mStart++; + + // + // check the hashes + // + byte[] hash = new byte[digest.GetDigestSize()]; + + int off = block.Length - delta - hash.Length; + + // + // there must be at least one byte of message string + // + if ((off - mStart) <= 0) + { + return ReturnFalse(block); + } + + // + // if we contain the whole message as well, check the hash of that. + // + if ((block[0] & 0x20) == 0) + { + fullMessage = true; + + // check right number of bytes passed in. + if (messageLength > off - mStart) + { + return ReturnFalse(block); + } + + digest.Reset(); + digest.BlockUpdate(block, mStart, off - mStart); + digest.DoFinal(hash, 0); + + bool isOkay = true; + + for (int i = 0; i != hash.Length; i++) + { + block[off + i] ^= hash[i]; + if (block[off + i] != 0) + { + isOkay = false; + } + } + + if (!isOkay) + { + return ReturnFalse(block); + } + + recoveredMessage = new byte[off - mStart]; + Array.Copy(block, mStart, recoveredMessage, 0, recoveredMessage.Length); + } + else + { + fullMessage = false; + + digest.DoFinal(hash, 0); + + bool isOkay = true; + + for (int i = 0; i != hash.Length; i++) + { + block[off + i] ^= hash[i]; + if (block[off + i] != 0) + { + isOkay = false; + } + } + + if (!isOkay) + { + return ReturnFalse(block); + } + + recoveredMessage = new byte[off - mStart]; + Array.Copy(block, mStart, recoveredMessage, 0, recoveredMessage.Length); + } + + // + // if they've input a message check what we've recovered against + // what was input. + // + if (messageLength != 0) + { + if (!IsSameAs(mBuf, recoveredMessage)) + { + return ReturnFalse(block); + } + } + + ClearBlock(mBuf); + ClearBlock(block); + + messageLength = 0; + + return true; + } + + private bool ReturnFalse(byte[] block) + { + messageLength = 0; + + ClearBlock(mBuf); + ClearBlock(block); + + return false; + } + + /// + /// Return true if the full message was recoveredMessage. + /// + /// true on full message recovery, false otherwise. + /// + public virtual bool HasFullMessage() + { + return fullMessage; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Iso9796d2Signer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Iso9796d2Signer.cs.meta new file mode 100644 index 000000000..bebac84ed --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/Iso9796d2Signer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 87ac94cff478bb34ba55e541d2971b29 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/IsoTrailers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/IsoTrailers.cs new file mode 100644 index 000000000..c54451bff --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/IsoTrailers.cs @@ -0,0 +1,57 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + public class IsoTrailers + { + public const int TRAILER_IMPLICIT = 0xBC; + public const int TRAILER_RIPEMD160 = 0x31CC; + public const int TRAILER_RIPEMD128 = 0x32CC; + public const int TRAILER_SHA1 = 0x33CC; + public const int TRAILER_SHA256 = 0x34CC; + public const int TRAILER_SHA512 = 0x35CC; + public const int TRAILER_SHA384 = 0x36CC; + public const int TRAILER_WHIRLPOOL = 0x37CC; + public const int TRAILER_SHA224 = 0x38CC; + public const int TRAILER_SHA512_224 = 0x39CC; + public const int TRAILER_SHA512_256 = 0x40CC; + + private static IDictionary CreateTrailerMap() + { + var trailers = new Dictionary(StringComparer.OrdinalIgnoreCase); + + trailers.Add("RIPEMD128", TRAILER_RIPEMD128); + trailers.Add("RIPEMD160", TRAILER_RIPEMD160); + + trailers.Add("SHA-1", TRAILER_SHA1); + trailers.Add("SHA-224", TRAILER_SHA224); + trailers.Add("SHA-256", TRAILER_SHA256); + trailers.Add("SHA-384", TRAILER_SHA384); + trailers.Add("SHA-512", TRAILER_SHA512); + trailers.Add("SHA-512/224", TRAILER_SHA512_224); + trailers.Add("SHA-512/256", TRAILER_SHA512_256); + + trailers.Add("Whirlpool", TRAILER_WHIRLPOOL); + + return trailers; + } + + // IDictionary is (string -> Int32) + private static readonly IDictionary TrailerMap = CreateTrailerMap(); + + public static int GetTrailer(IDigest digest) + { + return TrailerMap[digest.AlgorithmName]; + } + + public static bool NoTrailerAvailable(IDigest digest) + { + return !TrailerMap.ContainsKey(digest.AlgorithmName); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/IsoTrailers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/IsoTrailers.cs.meta new file mode 100644 index 000000000..89eb253fc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/IsoTrailers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a5fd009acb42ef44a8b900072b16221b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/PlainDsaEncoding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/PlainDsaEncoding.cs new file mode 100644 index 000000000..7264d050b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/PlainDsaEncoding.cs @@ -0,0 +1,62 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + public class PlainDsaEncoding + : IDsaEncoding + { + public static readonly PlainDsaEncoding Instance = new PlainDsaEncoding(); + + public virtual BigInteger[] Decode(BigInteger n, byte[] encoding) + { + int valueLength = BigIntegers.GetUnsignedByteLength(n); + if (encoding.Length != valueLength * 2) + throw new ArgumentException("Encoding has incorrect length", "encoding"); + + return new BigInteger[] { + DecodeValue(n, encoding, 0, valueLength), + DecodeValue(n, encoding, valueLength, valueLength), + }; + } + + public virtual byte[] Encode(BigInteger n, BigInteger r, BigInteger s) + { + int valueLength = BigIntegers.GetUnsignedByteLength(n); + byte[] result = new byte[valueLength * 2]; + EncodeValue(n, r, result, 0, valueLength); + EncodeValue(n, s, result, valueLength, valueLength); + return result; + } + + protected virtual BigInteger CheckValue(BigInteger n, BigInteger x) + { + if (x.SignValue < 0 || x.CompareTo(n) >= 0) + throw new ArgumentException("Value out of range", "x"); + + return x; + } + + protected virtual BigInteger DecodeValue(BigInteger n, byte[] buf, int off, int len) + { + return CheckValue(n, new BigInteger(1, buf, off, len)); + } + + protected virtual void EncodeValue(BigInteger n, BigInteger x, byte[] buf, int off, int len) + { + byte[] bs = CheckValue(n, x).ToByteArrayUnsigned(); + int bsOff = System.Math.Max(0, bs.Length - len); + int bsLen = bs.Length - bsOff; + + int pos = len - bsLen; + Arrays.Fill(buf, off, off + pos, 0); + Array.Copy(bs, bsOff, buf, off + pos, bsLen); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/PlainDsaEncoding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/PlainDsaEncoding.cs.meta new file mode 100644 index 000000000..604749fc6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/PlainDsaEncoding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aec988137075c7942a73a6b10ffef83f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/PssSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/PssSigner.cs new file mode 100644 index 000000000..8f088d4ec --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/PssSigner.cs @@ -0,0 +1,411 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + /// RSA-PSS as described in Pkcs# 1 v 2.1. + ///

+ /// Note: the usual value for the salt length is the number of + /// bytes in the hash function.

+ ///
+ public class PssSigner + : ISigner + { + public const byte TrailerImplicit = 0xBC; + + private readonly IDigest contentDigest1, contentDigest2; + private readonly IDigest mgfDigest; + private readonly IAsymmetricBlockCipher cipher; + + private SecureRandom random; + + private int hLen; + private int mgfhLen; + private int sLen; + private bool sSet; + private int emBits; + private byte[] salt; + private byte[] mDash; + private byte[] block; + private byte trailer; + + public static PssSigner CreateRawSigner(IAsymmetricBlockCipher cipher, IDigest digest) + { + return new PssSigner(cipher, new NullDigest(), digest, digest, digest.GetDigestSize(), null, TrailerImplicit); + } + + public static PssSigner CreateRawSigner(IAsymmetricBlockCipher cipher, IDigest contentDigest, IDigest mgfDigest, + int saltLen, byte trailer) + { + return new PssSigner(cipher, new NullDigest(), contentDigest, mgfDigest, saltLen, null, trailer); + } + + public static PssSigner CreateRawSigner(IAsymmetricBlockCipher cipher, IDigest contentDigest, IDigest mgfDigest, + byte[] salt, byte trailer) + { + return new PssSigner(cipher, new NullDigest(), contentDigest, mgfDigest, salt.Length, salt, trailer); + } + + public PssSigner( + IAsymmetricBlockCipher cipher, + IDigest digest) + : this(cipher, digest, digest.GetDigestSize()) + { + } + + /// Basic constructor + /// the asymmetric cipher to use. + /// the digest to use. + /// the length of the salt to use (in bytes). + public PssSigner( + IAsymmetricBlockCipher cipher, + IDigest digest, + int saltLen) + : this(cipher, digest, saltLen, TrailerImplicit) + { + } + + /// Basic constructor + /// the asymmetric cipher to use. + /// the digest to use. + /// the fixed salt to be used. + public PssSigner( + IAsymmetricBlockCipher cipher, + IDigest digest, + byte[] salt) + : this(cipher, digest, digest, digest, salt.Length, salt, TrailerImplicit) + { + } + + public PssSigner( + IAsymmetricBlockCipher cipher, + IDigest contentDigest, + IDigest mgfDigest, + int saltLen) + : this(cipher, contentDigest, mgfDigest, saltLen, TrailerImplicit) + { + } + + public PssSigner( + IAsymmetricBlockCipher cipher, + IDigest contentDigest, + IDigest mgfDigest, + byte[] salt) + : this(cipher, contentDigest, contentDigest, mgfDigest, salt.Length, salt, TrailerImplicit) + { + } + + public PssSigner( + IAsymmetricBlockCipher cipher, + IDigest digest, + int saltLen, + byte trailer) + : this(cipher, digest, digest, saltLen, trailer) + { + } + + public PssSigner( + IAsymmetricBlockCipher cipher, + IDigest contentDigest, + IDigest mgfDigest, + int saltLen, + byte trailer) + : this(cipher, contentDigest, contentDigest, mgfDigest, saltLen, null, trailer) + { + } + + private PssSigner( + IAsymmetricBlockCipher cipher, + IDigest contentDigest1, + IDigest contentDigest2, + IDigest mgfDigest, + int saltLen, + byte[] salt, + byte trailer) + { + this.cipher = cipher; + this.contentDigest1 = contentDigest1; + this.contentDigest2 = contentDigest2; + this.mgfDigest = mgfDigest; + this.hLen = contentDigest2.GetDigestSize(); + this.mgfhLen = mgfDigest.GetDigestSize(); + this.sLen = saltLen; + this.sSet = salt != null; + if (sSet) + { + this.salt = salt; + } + else + { + this.salt = new byte[saltLen]; + } + this.mDash = new byte[8 + saltLen + hLen]; + this.trailer = trailer; + } + + public virtual string AlgorithmName + { + get { return mgfDigest.AlgorithmName + "withRSAandMGF1"; } + } + + public virtual void Init(bool forSigning, ICipherParameters parameters) + { + if (parameters is ParametersWithRandom withRandom) + { + parameters = withRandom.Parameters; + random = withRandom.Random; + } + else + { + if (forSigning) + { + random = CryptoServicesRegistrar.GetSecureRandom(); + } + } + + cipher.Init(forSigning, parameters); + + RsaKeyParameters kParam; + if (parameters is RsaBlindingParameters) + { + kParam = ((RsaBlindingParameters)parameters).PublicKey; + } + else + { + kParam = (RsaKeyParameters)parameters; + } + + emBits = kParam.Modulus.BitLength - 1; + + if (emBits < (8 * hLen + 8 * sLen + 9)) + throw new ArgumentException("key too small for specified hash and salt lengths"); + + block = new byte[(emBits + 7) / 8]; + } + + /// clear possible sensitive data + private void ClearBlock( + byte[] block) + { + Array.Clear(block, 0, block.Length); + } + + public virtual void Update(byte input) + { + contentDigest1.Update(input); + } + + public virtual void BlockUpdate(byte[] input, int inOff, int inLen) + { + contentDigest1.BlockUpdate(input, inOff, inLen); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + contentDigest1.BlockUpdate(input); + } +#endif + + public virtual void Reset() + { + contentDigest1.Reset(); + } + + public virtual byte[] GenerateSignature() + { + if (contentDigest1.GetDigestSize() != hLen) + throw new InvalidOperationException(); + + contentDigest1.DoFinal(mDash, mDash.Length - hLen - sLen); + + if (sLen != 0) + { + if (!sSet) + { + random.NextBytes(salt); + } + salt.CopyTo(mDash, mDash.Length - sLen); + } + + byte[] h = new byte[hLen]; + + contentDigest2.BlockUpdate(mDash, 0, mDash.Length); + + contentDigest2.DoFinal(h, 0); + + block[block.Length - sLen - 1 - hLen - 1] = (byte) (0x01); + salt.CopyTo(block, block.Length - sLen - hLen - 1); + + byte[] dbMask = MaskGeneratorFunction(h, 0, h.Length, block.Length - hLen - 1); + for (int i = 0; i != dbMask.Length; i++) + { + block[i] ^= dbMask[i]; + } + + h.CopyTo(block, block.Length - hLen - 1); + + uint firstByteMask = 0xFFU >> ((block.Length * 8) - emBits); + + block[0] &= (byte)firstByteMask; + block[block.Length - 1] = trailer; + + byte[] b = cipher.ProcessBlock(block, 0, block.Length); + + ClearBlock(block); + + return b; + } + + public virtual bool VerifySignature(byte[] signature) + { + if (contentDigest1.GetDigestSize() != hLen) + throw new InvalidOperationException(); + + contentDigest1.DoFinal(mDash, mDash.Length - hLen - sLen); + + byte[] b = cipher.ProcessBlock(signature, 0, signature.Length); + Arrays.Fill(block, 0, block.Length - b.Length, 0); + b.CopyTo(block, block.Length - b.Length); + + uint firstByteMask = 0xFFU >> ((block.Length * 8) - emBits); + + if (block[0] != (byte)(block[0] & firstByteMask) + || block[block.Length - 1] != trailer) + { + ClearBlock(block); + return false; + } + + byte[] dbMask = MaskGeneratorFunction(block, block.Length - hLen - 1, hLen, block.Length - hLen - 1); + + for (int i = 0; i != dbMask.Length; i++) + { + block[i] ^= dbMask[i]; + } + + block[0] &= (byte)firstByteMask; + + for (int i = 0; i != block.Length - hLen - sLen - 2; i++) + { + if (block[i] != 0) + { + ClearBlock(block); + return false; + } + } + + if (block[block.Length - hLen - sLen - 2] != 0x01) + { + ClearBlock(block); + return false; + } + + if (sSet) + { + Array.Copy(salt, 0, mDash, mDash.Length - sLen, sLen); + } + else + { + Array.Copy(block, block.Length - sLen - hLen - 1, mDash, mDash.Length - sLen, sLen); + } + + contentDigest2.BlockUpdate(mDash, 0, mDash.Length); + contentDigest2.DoFinal(mDash, mDash.Length - hLen); + + for (int i = block.Length - hLen - 1, j = mDash.Length - hLen; j != mDash.Length; i++, j++) + { + if ((block[i] ^ mDash[j]) != 0) + { + ClearBlock(mDash); + ClearBlock(block); + return false; + } + } + + ClearBlock(mDash); + ClearBlock(block); + + return true; + } + + /// int to octet string. + private void ItoOSP( + int i, + byte[] sp) + { + sp[0] = (byte)((uint) i >> 24); + sp[1] = (byte)((uint) i >> 16); + sp[2] = (byte)((uint) i >> 8); + sp[3] = (byte)((uint) i >> 0); + } + + private byte[] MaskGeneratorFunction( + byte[] Z, + int zOff, + int zLen, + int length) + { + if (mgfDigest is IXof) + { + byte[] mask = new byte[length]; + mgfDigest.BlockUpdate(Z, zOff, zLen); + ((IXof)mgfDigest).OutputFinal(mask, 0, mask.Length); + + return mask; + } + else + { + return MaskGeneratorFunction1(Z, zOff, zLen, length); + } + } + + /// mask generator function, as described in Pkcs1v2. + private byte[] MaskGeneratorFunction1( + byte[] Z, + int zOff, + int zLen, + int length) + { + byte[] mask = new byte[length]; + byte[] hashBuf = new byte[mgfhLen]; + byte[] C = new byte[4]; + int counter = 0; + + mgfDigest.Reset(); + + while (counter < (length / mgfhLen)) + { + ItoOSP(counter, C); + + mgfDigest.BlockUpdate(Z, zOff, zLen); + mgfDigest.BlockUpdate(C, 0, C.Length); + mgfDigest.DoFinal(hashBuf, 0); + + hashBuf.CopyTo(mask, counter * mgfhLen); + ++counter; + } + + if ((counter * mgfhLen) < length) + { + ItoOSP(counter, C); + + mgfDigest.BlockUpdate(Z, zOff, zLen); + mgfDigest.BlockUpdate(C, 0, C.Length); + mgfDigest.DoFinal(hashBuf, 0); + + Array.Copy(hashBuf, 0, mask, counter * mgfhLen, mask.Length - (counter * mgfhLen)); + } + + return mask; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/PssSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/PssSigner.cs.meta new file mode 100644 index 000000000..4ccfb407d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/PssSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 29735d3087c8c97469fcd65a9be64767 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/RandomDsaKCalculator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/RandomDsaKCalculator.cs new file mode 100644 index 000000000..2597b1b29 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/RandomDsaKCalculator.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + public class RandomDsaKCalculator + : IDsaKCalculator + { + private BigInteger q; + private SecureRandom random; + + public virtual bool IsDeterministic + { + get { return false; } + } + + public virtual void Init(BigInteger n, SecureRandom random) + { + this.q = n; + this.random = random; + } + + public virtual void Init(BigInteger n, BigInteger d, byte[] message) + { + throw new InvalidOperationException("Operation not supported"); + } + + public virtual BigInteger NextK() + { + int qBitLength = q.BitLength; + + BigInteger k; + do + { + k = new BigInteger(qBitLength, random); + } + while (k.SignValue < 1 || k.CompareTo(q) >= 0); + + return k; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/RandomDsaKCalculator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/RandomDsaKCalculator.cs.meta new file mode 100644 index 000000000..3d80dd41f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/RandomDsaKCalculator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c1bb646c95a66c04787462b6a62bd3cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/RsaDigestSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/RsaDigestSigner.cs new file mode 100644 index 000000000..251b7e32f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/RsaDigestSigner.cs @@ -0,0 +1,229 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.TeleTrust; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Encodings; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + public class RsaDigestSigner + : ISigner + { + private readonly IAsymmetricBlockCipher rsaEngine; + private readonly AlgorithmIdentifier algId; + private readonly IDigest digest; + private bool forSigning; + + private static readonly IDictionary OidMap = + new Dictionary(StringComparer.OrdinalIgnoreCase); + + /// + /// Load oid table. + /// + static RsaDigestSigner() + { + OidMap["RIPEMD128"] = TeleTrusTObjectIdentifiers.RipeMD128; + OidMap["RIPEMD160"] = TeleTrusTObjectIdentifiers.RipeMD160; + OidMap["RIPEMD256"] = TeleTrusTObjectIdentifiers.RipeMD256; + + OidMap["SHA-1"] = X509ObjectIdentifiers.IdSha1; + OidMap["SHA-224"] = NistObjectIdentifiers.IdSha224; + OidMap["SHA-256"] = NistObjectIdentifiers.IdSha256; + OidMap["SHA-384"] = NistObjectIdentifiers.IdSha384; + OidMap["SHA-512"] = NistObjectIdentifiers.IdSha512; + OidMap["SHA-512/224"] = NistObjectIdentifiers.IdSha512_224; + OidMap["SHA-512/256"] = NistObjectIdentifiers.IdSha512_256; + OidMap["SHA3-224"] = NistObjectIdentifiers.IdSha3_224; + OidMap["SHA3-256"] = NistObjectIdentifiers.IdSha3_256; + OidMap["SHA3-384"] = NistObjectIdentifiers.IdSha3_384; + OidMap["SHA3-512"] = NistObjectIdentifiers.IdSha3_512; + + OidMap["MD2"] = PkcsObjectIdentifiers.MD2; + OidMap["MD4"] = PkcsObjectIdentifiers.MD4; + OidMap["MD5"] = PkcsObjectIdentifiers.MD5; + } + + public RsaDigestSigner(IDigest digest) + : this(digest, CollectionUtilities.GetValueOrNull(OidMap, digest.AlgorithmName)) + { + } + + public RsaDigestSigner(IDigest digest, DerObjectIdentifier digestOid) + : this(digest, new AlgorithmIdentifier(digestOid, DerNull.Instance)) + { + } + + public RsaDigestSigner(IDigest digest, AlgorithmIdentifier algId) + : this(new RsaCoreEngine(), digest, algId) + { + } + + public RsaDigestSigner(IRsa rsa, IDigest digest, DerObjectIdentifier digestOid) + : this(rsa, digest, new AlgorithmIdentifier(digestOid, DerNull.Instance)) + { + } + + public RsaDigestSigner(IRsa rsa, IDigest digest, AlgorithmIdentifier algId) + : this(new RsaBlindedEngine(rsa), digest, algId) + { + } + + public RsaDigestSigner(IAsymmetricBlockCipher rsaEngine, IDigest digest, AlgorithmIdentifier algId) + { + this.rsaEngine = new Pkcs1Encoding(rsaEngine); + this.digest = digest; + this.algId = algId; + } + + public virtual string AlgorithmName + { + get { return digest.AlgorithmName + "withRSA"; } + } + + /** + * Initialise the signer for signing or verification. + * + * @param forSigning true if for signing, false otherwise + * @param param necessary parameters. + */ + public virtual void Init( + bool forSigning, + ICipherParameters parameters) + { + this.forSigning = forSigning; + AsymmetricKeyParameter k; + + if (parameters is ParametersWithRandom) + { + k = (AsymmetricKeyParameter)((ParametersWithRandom)parameters).Parameters; + } + else + { + k = (AsymmetricKeyParameter)parameters; + } + + if (forSigning && !k.IsPrivate) + throw new InvalidKeyException("Signing requires private key."); + + if (!forSigning && k.IsPrivate) + throw new InvalidKeyException("Verification requires public key."); + + Reset(); + + rsaEngine.Init(forSigning, parameters); + } + + public virtual void Update(byte input) + { + digest.Update(input); + } + + public virtual void BlockUpdate(byte[] input, int inOff, int inLen) + { + digest.BlockUpdate(input, inOff, inLen); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + digest.BlockUpdate(input); + } +#endif + + public virtual byte[] GenerateSignature() + { + if (!forSigning) + throw new InvalidOperationException("RsaDigestSigner not initialised for signature generation."); + + byte[] hash = new byte[digest.GetDigestSize()]; + digest.DoFinal(hash, 0); + + byte[] data = DerEncode(hash); + return rsaEngine.ProcessBlock(data, 0, data.Length); + } + + public virtual bool VerifySignature(byte[] signature) + { + if (forSigning) + throw new InvalidOperationException("RsaDigestSigner not initialised for verification"); + + byte[] hash = new byte[digest.GetDigestSize()]; + digest.DoFinal(hash, 0); + + byte[] sig; + byte[] expected; + + try + { + sig = rsaEngine.ProcessBlock(signature, 0, signature.Length); + expected = DerEncode(hash); + } + catch (Exception) + { + return false; + } + + if (sig.Length == expected.Length) + { + return Arrays.ConstantTimeAreEqual(sig, expected); + } + else if (sig.Length == expected.Length - 2) // NULL left out + { + int sigOffset = sig.Length - hash.Length - 2; + int expectedOffset = expected.Length - hash.Length - 2; + + expected[1] -= 2; // adjust lengths + expected[3] -= 2; + + int nonEqual = 0; + + for (int i = 0; i < hash.Length; i++) + { + nonEqual |= (sig[sigOffset + i] ^ expected[expectedOffset + i]); + } + + for (int i = 0; i < sigOffset; i++) + { + nonEqual |= (sig[i] ^ expected[i]); // check header less NULL + } + + return nonEqual == 0; + } + else + { + return false; + } + } + + public virtual void Reset() + { + digest.Reset(); + } + + private byte[] DerEncode(byte[] hash) + { + if (algId == null) + { + // For raw RSA, the DigestInfo must be prepared externally + return hash; + } + + DigestInfo dInfo = new DigestInfo(algId, hash); + + return dInfo.GetDerEncoded(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/RsaDigestSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/RsaDigestSigner.cs.meta new file mode 100644 index 000000000..21e2861ba --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/RsaDigestSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0a1d2191580cc304e9dd7fb6a78629ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/SM2Signer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/SM2Signer.cs new file mode 100644 index 000000000..015003834 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/SM2Signer.cs @@ -0,0 +1,268 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + /// The SM2 Digital Signature algorithm. + public class SM2Signer + : ISigner + { + private readonly IDsaKCalculator kCalculator = new RandomDsaKCalculator(); + private readonly IDigest digest; + private readonly IDsaEncoding encoding; + + private ECDomainParameters ecParams; + private ECPoint pubPoint; + private ECKeyParameters ecKey; + private byte[] z; + + public SM2Signer() + : this(StandardDsaEncoding.Instance, new SM3Digest()) + { + } + + public SM2Signer(IDigest digest) + : this(StandardDsaEncoding.Instance, digest) + { + } + + public SM2Signer(IDsaEncoding encoding) + : this(encoding, new SM3Digest()) + { + } + + public SM2Signer(IDsaEncoding encoding, IDigest digest) + { + this.encoding = encoding; + this.digest = digest; + } + + public virtual string AlgorithmName + { + get { return "SM2Sign"; } + } + + public virtual void Init(bool forSigning, ICipherParameters parameters) + { + ICipherParameters baseParam; + byte[] userID; + + if (parameters is ParametersWithID) + { + baseParam = ((ParametersWithID)parameters).Parameters; + userID = ((ParametersWithID)parameters).GetID(); + + if (userID.Length >= 8192) + throw new ArgumentException("SM2 user ID must be less than 2^16 bits long"); + } + else + { + baseParam = parameters; + // the default value, string value is "1234567812345678" + userID = Hex.DecodeStrict("31323334353637383132333435363738"); + } + + if (forSigning) + { + if (baseParam is ParametersWithRandom rParam) + { + ecKey = (ECKeyParameters)rParam.Parameters; + ecParams = ecKey.Parameters; + kCalculator.Init(ecParams.N, rParam.Random); + } + else + { + ecKey = (ECKeyParameters)baseParam; + ecParams = ecKey.Parameters; + kCalculator.Init(ecParams.N, CryptoServicesRegistrar.GetSecureRandom()); + } + pubPoint = CreateBasePointMultiplier().Multiply(ecParams.G, ((ECPrivateKeyParameters)ecKey).D).Normalize(); + } + else + { + ecKey = (ECKeyParameters)baseParam; + ecParams = ecKey.Parameters; + pubPoint = ((ECPublicKeyParameters)ecKey).Q; + } + + digest.Reset(); + z = GetZ(userID); + + digest.BlockUpdate(z, 0, z.Length); + } + + public virtual void Update(byte b) + { + digest.Update(b); + } + + public virtual void BlockUpdate(byte[] input, int inOff, int inLen) + { + digest.BlockUpdate(input, inOff, inLen); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + digest.BlockUpdate(input); + } +#endif + + public virtual bool VerifySignature(byte[] signature) + { + try + { + BigInteger[] rs = encoding.Decode(ecParams.N, signature); + + return VerifySignature(rs[0], rs[1]); + } + catch (Exception) + { + } + + return false; + } + + public virtual void Reset() + { + if (z != null) + { + digest.Reset(); + digest.BlockUpdate(z, 0, z.Length); + } + } + + public virtual byte[] GenerateSignature() + { + byte[] eHash = DigestUtilities.DoFinal(digest); + + BigInteger n = ecParams.N; + BigInteger e = CalculateE(n, eHash); + BigInteger d = ((ECPrivateKeyParameters)ecKey).D; + + BigInteger r, s; + + ECMultiplier basePointMultiplier = CreateBasePointMultiplier(); + + // 5.2.1 Draft RFC: SM2 Public Key Algorithms + do // generate s + { + BigInteger k; + do // generate r + { + // A3 + k = kCalculator.NextK(); + + // A4 + ECPoint p = basePointMultiplier.Multiply(ecParams.G, k).Normalize(); + + // A5 + r = e.Add(p.AffineXCoord.ToBigInteger()).Mod(n); + } + while (r.SignValue == 0 || r.Add(k).Equals(n)); + + // A6 + BigInteger dPlus1ModN = BigIntegers.ModOddInverse(n, d.Add(BigIntegers.One)); + + s = k.Subtract(r.Multiply(d)).Mod(n); + s = dPlus1ModN.Multiply(s).Mod(n); + } + while (s.SignValue == 0); + + // A7 + try + { + return encoding.Encode(ecParams.N, r, s); + } + catch (Exception ex) + { + throw new CryptoException("unable to encode signature: " + ex.Message, ex); + } + } + + private bool VerifySignature(BigInteger r, BigInteger s) + { + BigInteger n = ecParams.N; + + // 5.3.1 Draft RFC: SM2 Public Key Algorithms + // B1 + if (r.CompareTo(BigInteger.One) < 0 || r.CompareTo(n) >= 0) + return false; + + // B2 + if (s.CompareTo(BigInteger.One) < 0 || s.CompareTo(n) >= 0) + return false; + + // B3 + byte[] eHash = DigestUtilities.DoFinal(digest); + + // B4 + BigInteger e = CalculateE(n, eHash); + + // B5 + BigInteger t = r.Add(s).Mod(n); + if (t.SignValue == 0) + return false; + + // B6 + ECPoint q = ((ECPublicKeyParameters)ecKey).Q; + ECPoint x1y1 = ECAlgorithms.SumOfTwoMultiplies(ecParams.G, s, q, t).Normalize(); + if (x1y1.IsInfinity) + return false; + + // B7 + return r.Equals(e.Add(x1y1.AffineXCoord.ToBigInteger()).Mod(n)); + } + + private byte[] GetZ(byte[] userID) + { + AddUserID(digest, userID); + + AddFieldElement(digest, ecParams.Curve.A); + AddFieldElement(digest, ecParams.Curve.B); + AddFieldElement(digest, ecParams.G.AffineXCoord); + AddFieldElement(digest, ecParams.G.AffineYCoord); + AddFieldElement(digest, pubPoint.AffineXCoord); + AddFieldElement(digest, pubPoint.AffineYCoord); + + return DigestUtilities.DoFinal(digest); + } + + private void AddUserID(IDigest digest, byte[] userID) + { + int len = userID.Length * 8; + digest.Update((byte)(len >> 8)); + digest.Update((byte)len); + digest.BlockUpdate(userID, 0, userID.Length); + } + + private void AddFieldElement(IDigest digest, ECFieldElement v) + { + byte[] p = v.GetEncoded(); + digest.BlockUpdate(p, 0, p.Length); + } + + protected virtual BigInteger CalculateE(BigInteger n, byte[] message) + { + // TODO Should hashes larger than the order be truncated as with ECDSA? + return new BigInteger(1, message); + } + + protected virtual ECMultiplier CreateBasePointMultiplier() + { + return new FixedPointCombMultiplier(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/SM2Signer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/SM2Signer.cs.meta new file mode 100644 index 000000000..9faddeddd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/SM2Signer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68f56593743e64f4faf9b45065c5894a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/StandardDsaEncoding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/StandardDsaEncoding.cs new file mode 100644 index 000000000..ba76d0335 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/StandardDsaEncoding.cs @@ -0,0 +1,60 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + public class StandardDsaEncoding + : IDsaEncoding + { + public static readonly StandardDsaEncoding Instance = new StandardDsaEncoding(); + + public virtual BigInteger[] Decode(BigInteger n, byte[] encoding) + { + Asn1Sequence seq = (Asn1Sequence)Asn1Object.FromByteArray(encoding); + if (seq.Count == 2) + { + BigInteger r = DecodeValue(n, seq, 0); + BigInteger s = DecodeValue(n, seq, 1); + + byte[] expectedEncoding = Encode(n, r, s); + if (Arrays.AreEqual(expectedEncoding, encoding)) + return new BigInteger[]{ r, s }; + } + + throw new ArgumentException("Malformed signature", "encoding"); + } + + public virtual byte[] Encode(BigInteger n, BigInteger r, BigInteger s) + { + return new DerSequence( + EncodeValue(n, r), + EncodeValue(n, s) + ).GetEncoded(Asn1Encodable.Der); + } + + protected virtual BigInteger CheckValue(BigInteger n, BigInteger x) + { + if (x.SignValue < 0 || (null != n && x.CompareTo(n) >= 0)) + throw new ArgumentException("Value out of range", "x"); + + return x; + } + + protected virtual BigInteger DecodeValue(BigInteger n, Asn1Sequence s, int pos) + { + return CheckValue(n, ((DerInteger)s[pos]).Value); + } + + protected virtual DerInteger EncodeValue(BigInteger n, BigInteger x) + { + return new DerInteger(CheckValue(n, x)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/StandardDsaEncoding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/StandardDsaEncoding.cs.meta new file mode 100644 index 000000000..38fa27598 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/StandardDsaEncoding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a964647027be2f14db0b63d2fb74479a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/X931Signer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/X931Signer.cs new file mode 100644 index 000000000..c631768a9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/X931Signer.cs @@ -0,0 +1,203 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Zlib; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers +{ + /** + * X9.31-1998 - signing using a hash. + *

+ * The message digest hash, H, is encapsulated to form a byte string as follows + *

+ *
+     * EB = 06 || PS || 0xBA || H || TRAILER
+     * 
+ * where PS is a string of bytes all of value 0xBB of length such that |EB|=|n|, and TRAILER is the ISO/IEC 10118 part number† for the digest. The byte string, EB, is converted to an integer value, the message representative, f. + */ + public class X931Signer + : ISigner + { + private IDigest digest; + private IAsymmetricBlockCipher cipher; + private RsaKeyParameters kParam; + + private int trailer; + private int keyBits; + private byte[] block; + + /** + * Generate a signer with either implicit or explicit trailers for X9.31. + * + * @param cipher base cipher to use for signature creation/verification + * @param digest digest to use. + * @param implicit whether or not the trailer is implicit or gives the hash. + */ + public X931Signer(IAsymmetricBlockCipher cipher, IDigest digest, bool isImplicit) + { + this.cipher = cipher; + this.digest = digest; + + if (isImplicit) + { + trailer = IsoTrailers.TRAILER_IMPLICIT; + } + else if (IsoTrailers.NoTrailerAvailable(digest)) + { + throw new ArgumentException("no valid trailer", "digest"); + } + else + { + trailer = IsoTrailers.GetTrailer(digest); + } + } + + public virtual string AlgorithmName + { + get { return digest.AlgorithmName + "with" + cipher.AlgorithmName + "/X9.31"; } + } + + /** + * Constructor for a signer with an explicit digest trailer. + * + * @param cipher cipher to use. + * @param digest digest to sign with. + */ + public X931Signer(IAsymmetricBlockCipher cipher, IDigest digest) + : this(cipher, digest, false) + { + } + + public virtual void Init(bool forSigning, ICipherParameters parameters) + { + kParam = (RsaKeyParameters)parameters; + + cipher.Init(forSigning, kParam); + + keyBits = kParam.Modulus.BitLength; + + block = new byte[(keyBits + 7) / 8]; + + Reset(); + } + + public virtual void Update(byte b) + { + digest.Update(b); + } + + public virtual void BlockUpdate(byte[] input, int inOff, int inLen) + { + digest.BlockUpdate(input, inOff, inLen); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void BlockUpdate(ReadOnlySpan input) + { + digest.BlockUpdate(input); + } +#endif + + public virtual void Reset() + { + digest.Reset(); + } + + public virtual byte[] GenerateSignature() + { + CreateSignatureBlock(); + + BigInteger t = new BigInteger(1, cipher.ProcessBlock(block, 0, block.Length)); + Arrays.Fill(block, 0x00); + + t = t.Min(kParam.Modulus.Subtract(t)); + + int size = BigIntegers.GetUnsignedByteLength(kParam.Modulus); + return BigIntegers.AsUnsignedByteArray(size, t); + } + + private void CreateSignatureBlock() + { + int digSize = digest.GetDigestSize(); + + int delta; + if (trailer == IsoTrailers.TRAILER_IMPLICIT) + { + delta = block.Length - digSize - 1; + digest.DoFinal(block, delta); + block[block.Length - 1] = (byte)IsoTrailers.TRAILER_IMPLICIT; + } + else + { + delta = block.Length - digSize - 2; + digest.DoFinal(block, delta); + block[block.Length - 2] = (byte)(trailer >> 8); + block[block.Length - 1] = (byte)trailer; + } + + block[0] = 0x6b; + for (int i = delta - 2; i != 0; i--) + { + block[i] = (byte)0xbb; + } + block[delta - 1] = (byte)0xba; + } + + public virtual bool VerifySignature(byte[] signature) + { + try + { + block = cipher.ProcessBlock(signature, 0, signature.Length); + } + catch (Exception) + { + return false; + } + + BigInteger t = new BigInteger(1, block); + BigInteger f; + + if ((t.IntValue & 15) == 12) + { + f = t; + } + else + { + t = kParam.Modulus.Subtract(t); + if ((t.IntValue & 15) == 12) + { + f = t; + } + else + { + return false; + } + } + + CreateSignatureBlock(); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int fBlockSize = block.Length; + Span fBlock = fBlockSize <= 512 + ? stackalloc byte[fBlockSize] + : new byte[fBlockSize]; + BigIntegers.AsUnsignedByteArray(f, fBlock); +#else + byte[] fBlock = BigIntegers.AsUnsignedByteArray(block.Length, f); +#endif + + bool rv = Arrays.ConstantTimeAreEqual(block, fBlock); + + Arrays.Fill(block, 0x00); + Arrays.Fill(fBlock, 0x00); + + return rv; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/X931Signer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/X931Signer.cs.meta new file mode 100644 index 000000000..9b00b1f5e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/signers/X931Signer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a4d003e3a33c78049a002e2b2f4da98d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util.meta new file mode 100644 index 000000000..ac7559fd8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e9c7f1f65018a6b489b3d3892004d352 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/AlgorithmIdentifierFactory.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/AlgorithmIdentifierFactory.cs new file mode 100644 index 000000000..59c85c722 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/AlgorithmIdentifierFactory.cs @@ -0,0 +1,110 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Kisa; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Misc; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ntt; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities +{ + public class AlgorithmIdentifierFactory + { + public static readonly DerObjectIdentifier IDEA_CBC = new DerObjectIdentifier("1.3.6.1.4.1.188.7.1.1.2"); + public static readonly DerObjectIdentifier CAST5_CBC = new DerObjectIdentifier("1.2.840.113533.7.66.10"); + + private static readonly short[] rc2Table = { + 0xbd, 0x56, 0xea, 0xf2, 0xa2, 0xf1, 0xac, 0x2a, 0xb0, 0x93, 0xd1, 0x9c, 0x1b, 0x33, 0xfd, 0xd0, + 0x30, 0x04, 0xb6, 0xdc, 0x7d, 0xdf, 0x32, 0x4b, 0xf7, 0xcb, 0x45, 0x9b, 0x31, 0xbb, 0x21, 0x5a, + 0x41, 0x9f, 0xe1, 0xd9, 0x4a, 0x4d, 0x9e, 0xda, 0xa0, 0x68, 0x2c, 0xc3, 0x27, 0x5f, 0x80, 0x36, + 0x3e, 0xee, 0xfb, 0x95, 0x1a, 0xfe, 0xce, 0xa8, 0x34, 0xa9, 0x13, 0xf0, 0xa6, 0x3f, 0xd8, 0x0c, + 0x78, 0x24, 0xaf, 0x23, 0x52, 0xc1, 0x67, 0x17, 0xf5, 0x66, 0x90, 0xe7, 0xe8, 0x07, 0xb8, 0x60, + 0x48, 0xe6, 0x1e, 0x53, 0xf3, 0x92, 0xa4, 0x72, 0x8c, 0x08, 0x15, 0x6e, 0x86, 0x00, 0x84, 0xfa, + 0xf4, 0x7f, 0x8a, 0x42, 0x19, 0xf6, 0xdb, 0xcd, 0x14, 0x8d, 0x50, 0x12, 0xba, 0x3c, 0x06, 0x4e, + 0xec, 0xb3, 0x35, 0x11, 0xa1, 0x88, 0x8e, 0x2b, 0x94, 0x99, 0xb7, 0x71, 0x74, 0xd3, 0xe4, 0xbf, + 0x3a, 0xde, 0x96, 0x0e, 0xbc, 0x0a, 0xed, 0x77, 0xfc, 0x37, 0x6b, 0x03, 0x79, 0x89, 0x62, 0xc6, + 0xd7, 0xc0, 0xd2, 0x7c, 0x6a, 0x8b, 0x22, 0xa3, 0x5b, 0x05, 0x5d, 0x02, 0x75, 0xd5, 0x61, 0xe3, + 0x18, 0x8f, 0x55, 0x51, 0xad, 0x1f, 0x0b, 0x5e, 0x85, 0xe5, 0xc2, 0x57, 0x63, 0xca, 0x3d, 0x6c, + 0xb4, 0xc5, 0xcc, 0x70, 0xb2, 0x91, 0x59, 0x0d, 0x47, 0x20, 0xc8, 0x4f, 0x58, 0xe0, 0x01, 0xe2, + 0x16, 0x38, 0xc4, 0x6f, 0x3b, 0x0f, 0x65, 0x46, 0xbe, 0x7e, 0x2d, 0x7b, 0x82, 0xf9, 0x40, 0xb5, + 0x1d, 0x73, 0xf8, 0xeb, 0x26, 0xc7, 0x87, 0x97, 0x25, 0x54, 0xb1, 0x28, 0xaa, 0x98, 0x9d, 0xa5, + 0x64, 0x6d, 0x7a, 0xd4, 0x10, 0x81, 0x44, 0xef, 0x49, 0xd6, 0xae, 0x2e, 0xdd, 0x76, 0x5c, 0x2f, + 0xa7, 0x1c, 0xc9, 0x09, 0x69, 0x9a, 0x83, 0xcf, 0x29, 0x39, 0xb9, 0xe9, 0x4c, 0xff, 0x43, 0xab + }; + + + /** + * Create an AlgorithmIdentifier for the passed in encryption algorithm. + * + * @param encryptionOID OID for the encryption algorithm + * @param keySize key size in bits (-1 if unknown) + * @param random SecureRandom to use for parameter generation. + * @return a full AlgorithmIdentifier including parameters + * @throws IllegalArgumentException if encryptionOID cannot be matched + */ + public static AlgorithmIdentifier GenerateEncryptionAlgID(DerObjectIdentifier encryptionOID, int keySize, SecureRandom random) + + { + if (encryptionOID.Equals(NistObjectIdentifiers.IdAes128Cbc) + || encryptionOID.Equals(NistObjectIdentifiers.IdAes192Cbc) + || encryptionOID.Equals(NistObjectIdentifiers.IdAes256Cbc) + || encryptionOID.Equals(NttObjectIdentifiers.IdCamellia128Cbc) + || encryptionOID.Equals(NttObjectIdentifiers.IdCamellia192Cbc) + || encryptionOID.Equals(NttObjectIdentifiers.IdCamellia256Cbc) + || encryptionOID.Equals(KisaObjectIdentifiers.IdSeedCbc)) + { + byte[] iv = new byte[16]; + + random.NextBytes(iv); + + return new AlgorithmIdentifier(encryptionOID, new DerOctetString(iv)); + } + else if (encryptionOID.Equals(PkcsObjectIdentifiers.DesEde3Cbc) + || encryptionOID.Equals(IDEA_CBC) + || encryptionOID.Equals(OiwObjectIdentifiers.DesCbc)) + { + byte[] iv = new byte[8]; + + random.NextBytes(iv); + + return new AlgorithmIdentifier(encryptionOID, new DerOctetString(iv)); + } + else if (encryptionOID.Equals(CAST5_CBC)) + { + byte[] iv = new byte[8]; + + random.NextBytes(iv); + + Cast5CbcParameters cbcParams = new Cast5CbcParameters(iv, keySize); + + return new AlgorithmIdentifier(encryptionOID, cbcParams); + } + else if (encryptionOID.Equals(PkcsObjectIdentifiers.rc4)) + { + return new AlgorithmIdentifier(encryptionOID, DerNull.Instance); + } + else if (encryptionOID.Equals(PkcsObjectIdentifiers.RC2Cbc)) + { + byte[] iv = new byte[8]; + + random.NextBytes(iv); + + RC2CbcParameter cbcParams = new RC2CbcParameter(rc2Table[128], iv); + + return new AlgorithmIdentifier(encryptionOID, cbcParams); + } + else + { + throw new InvalidOperationException("unable to match algorithm"); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/AlgorithmIdentifierFactory.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/AlgorithmIdentifierFactory.cs.meta new file mode 100644 index 000000000..706860d98 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/AlgorithmIdentifierFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 32387582d78b7dd4f8ea0504229c2a94 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/BasicAlphabetMapper.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/BasicAlphabetMapper.cs new file mode 100644 index 000000000..8fbbbe1e4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/BasicAlphabetMapper.cs @@ -0,0 +1,112 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities +{ + /** + * A basic alphabet mapper that just creates a mapper based on the + * passed in array of characters. + */ + public class BasicAlphabetMapper + : IAlphabetMapper + { + private readonly IDictionary m_indexMap = new Dictionary(); + private readonly IList m_charMap = new List(); + + /** + * Base constructor. + * + * @param alphabet a string of characters making up the alphabet. + */ + public BasicAlphabetMapper(string alphabet) : + this(alphabet.ToCharArray()) + { + } + + /** + * Base constructor. + * + * @param alphabet an array of characters making up the alphabet. + */ + public BasicAlphabetMapper(char[] alphabet) + { + for (int i = 0; i != alphabet.Length; i++) + { + if (m_indexMap.ContainsKey(alphabet[i])) + throw new ArgumentException("duplicate key detected in alphabet: " + alphabet[i]); + + m_indexMap.Add(alphabet[i], i); + m_charMap.Add(alphabet[i]); + } + } + + public int Radix + { + get { return m_charMap.Count; } + } + + public byte[] ConvertToIndexes(char[] input) + { + byte[] outBuf; + + if (m_charMap.Count <= 256) + { + outBuf = new byte[input.Length]; + for (int i = 0; i != input.Length; i++) + { + if (!m_indexMap.TryGetValue(input[i], out var idx)) + throw new InvalidOperationException(); + + outBuf[i] = (byte)idx; + } + } + else + { + outBuf = new byte[input.Length * 2]; + for (int i = 0; i != input.Length; i++) + { + if (!m_indexMap.TryGetValue(input[i], out var idx)) + throw new InvalidOperationException(); + + outBuf[i * 2 + 0] = (byte)(idx >> 8); + outBuf[i * 2 + 1] = (byte)idx; + } + } + + return outBuf; + } + + public char[] ConvertToChars(byte[] input) + { + char[] outBuf; + + if (m_charMap.Count <= 256) + { + outBuf = new char[input.Length]; + for (int i = 0; i != input.Length; i++) + { + outBuf[i] = m_charMap[input[i]]; + } + } + else + { + if ((input.Length & 0x1) != 0) + { + throw new ArgumentException("two byte radix and input string odd.Length"); + } + + outBuf = new char[input.Length / 2]; + for (int i = 0; i != input.Length; i += 2) + { + outBuf[i / 2] = m_charMap[(input[i] << 8) | input[i + 1]]; + } + } + + return outBuf; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/BasicAlphabetMapper.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/BasicAlphabetMapper.cs.meta new file mode 100644 index 000000000..0dbed799a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/BasicAlphabetMapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9583f6cac3009fa45953a3c8fb1f0113 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/CipherFactory.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/CipherFactory.cs new file mode 100644 index 000000000..019968948 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/CipherFactory.cs @@ -0,0 +1,149 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Kisa; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Misc; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ntt; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Paddings; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities +{ + public class CipherFactory + { + private CipherFactory() + { + } + + private static readonly short[] rc2Ekb = + { + 0x5d, 0xbe, 0x9b, 0x8b, 0x11, 0x99, 0x6e, 0x4d, 0x59, 0xf3, 0x85, 0xa6, 0x3f, 0xb7, 0x83, 0xc5, + 0xe4, 0x73, 0x6b, 0x3a, 0x68, 0x5a, 0xc0, 0x47, 0xa0, 0x64, 0x34, 0x0c, 0xf1, 0xd0, 0x52, 0xa5, + 0xb9, 0x1e, 0x96, 0x43, 0x41, 0xd8, 0xd4, 0x2c, 0xdb, 0xf8, 0x07, 0x77, 0x2a, 0xca, 0xeb, 0xef, + 0x10, 0x1c, 0x16, 0x0d, 0x38, 0x72, 0x2f, 0x89, 0xc1, 0xf9, 0x80, 0xc4, 0x6d, 0xae, 0x30, 0x3d, + 0xce, 0x20, 0x63, 0xfe, 0xe6, 0x1a, 0xc7, 0xb8, 0x50, 0xe8, 0x24, 0x17, 0xfc, 0x25, 0x6f, 0xbb, + 0x6a, 0xa3, 0x44, 0x53, 0xd9, 0xa2, 0x01, 0xab, 0xbc, 0xb6, 0x1f, 0x98, 0xee, 0x9a, 0xa7, 0x2d, + 0x4f, 0x9e, 0x8e, 0xac, 0xe0, 0xc6, 0x49, 0x46, 0x29, 0xf4, 0x94, 0x8a, 0xaf, 0xe1, 0x5b, 0xc3, + 0xb3, 0x7b, 0x57, 0xd1, 0x7c, 0x9c, 0xed, 0x87, 0x40, 0x8c, 0xe2, 0xcb, 0x93, 0x14, 0xc9, 0x61, + 0x2e, 0xe5, 0xcc, 0xf6, 0x5e, 0xa8, 0x5c, 0xd6, 0x75, 0x8d, 0x62, 0x95, 0x58, 0x69, 0x76, 0xa1, + 0x4a, 0xb5, 0x55, 0x09, 0x78, 0x33, 0x82, 0xd7, 0xdd, 0x79, 0xf5, 0x1b, 0x0b, 0xde, 0x26, 0x21, + 0x28, 0x74, 0x04, 0x97, 0x56, 0xdf, 0x3c, 0xf0, 0x37, 0x39, 0xdc, 0xff, 0x06, 0xa4, 0xea, 0x42, + 0x08, 0xda, 0xb4, 0x71, 0xb0, 0xcf, 0x12, 0x7a, 0x4e, 0xfa, 0x6c, 0x1d, 0x84, 0x00, 0xc8, 0x7f, + 0x91, 0x45, 0xaa, 0x2b, 0xc2, 0xb1, 0x8f, 0xd5, 0xba, 0xf2, 0xad, 0x19, 0xb2, 0x67, 0x36, 0xf7, + 0x0f, 0x0a, 0x92, 0x7d, 0xe3, 0x9d, 0xe9, 0x90, 0x3e, 0x23, 0x27, 0x66, 0x13, 0xec, 0x81, 0x15, + 0xbd, 0x22, 0xbf, 0x9f, 0x7e, 0xa9, 0x51, 0x4b, 0x4c, 0xfb, 0x02, 0xd3, 0x70, 0x86, 0x31, 0xe7, + 0x3b, 0x05, 0x03, 0x54, 0x60, 0x48, 0x65, 0x18, 0xd2, 0xcd, 0x5f, 0x32, 0x88, 0x0e, 0x35, 0xfd + }; + + public static object CreateContentCipher(bool forEncryption, ICipherParameters encKey, + AlgorithmIdentifier encryptionAlgID) + { + DerObjectIdentifier encAlg = encryptionAlgID.Algorithm; + + if (encAlg.Equals(PkcsObjectIdentifiers.rc4)) + { + IStreamCipher cipher = new RC4Engine(); + cipher.Init(forEncryption, encKey); + return cipher; + } + else + { + BufferedBlockCipher cipher = CreateCipher(encryptionAlgID.Algorithm); + Asn1Object sParams = encryptionAlgID.Parameters.ToAsn1Object(); + + if (sParams != null && !(sParams is DerNull)) + { + if (encAlg.Equals(PkcsObjectIdentifiers.DesEde3Cbc) + || encAlg.Equals(AlgorithmIdentifierFactory.IDEA_CBC) + || encAlg.Equals(NistObjectIdentifiers.IdAes128Cbc) + || encAlg.Equals(NistObjectIdentifiers.IdAes192Cbc) + || encAlg.Equals(NistObjectIdentifiers.IdAes256Cbc) + || encAlg.Equals(NttObjectIdentifiers.IdCamellia128Cbc) + || encAlg.Equals(NttObjectIdentifiers.IdCamellia192Cbc) + || encAlg.Equals(NttObjectIdentifiers.IdCamellia256Cbc) + || encAlg.Equals(KisaObjectIdentifiers.IdSeedCbc) + || encAlg.Equals(OiwObjectIdentifiers.DesCbc)) + { + cipher.Init(forEncryption, new ParametersWithIV(encKey, + Asn1OctetString.GetInstance(sParams).GetOctets())); + } + else if (encAlg.Equals(AlgorithmIdentifierFactory.CAST5_CBC)) + { + Cast5CbcParameters cbcParams = Cast5CbcParameters.GetInstance(sParams); + + cipher.Init(forEncryption, new ParametersWithIV(encKey, cbcParams.GetIV())); + } + else if (encAlg.Equals(PkcsObjectIdentifiers.RC2Cbc)) + { + RC2CbcParameter cbcParams = RC2CbcParameter.GetInstance(sParams); + + cipher.Init(forEncryption, new ParametersWithIV(new RC2Parameters(((KeyParameter)encKey).GetKey(), rc2Ekb[cbcParams.RC2ParameterVersion.IntValue]), cbcParams.GetIV())); + } + else + { + throw new InvalidOperationException("cannot match parameters"); + } + } + else + { + if (encAlg.Equals(PkcsObjectIdentifiers.DesEde3Cbc) + || encAlg.Equals(AlgorithmIdentifierFactory.IDEA_CBC) + || encAlg.Equals(AlgorithmIdentifierFactory.CAST5_CBC)) + { + cipher.Init(forEncryption, new ParametersWithIV(encKey, new byte[8])); + } + else + { + cipher.Init(forEncryption, encKey); + } + } + + return cipher; + } + } + + private static BufferedBlockCipher CreateCipher(DerObjectIdentifier algorithm) + { + IBlockCipherMode cipher; + + if (NistObjectIdentifiers.IdAes128Cbc.Equals(algorithm) + || NistObjectIdentifiers.IdAes192Cbc.Equals(algorithm) + || NistObjectIdentifiers.IdAes256Cbc.Equals(algorithm)) + { + cipher = new CbcBlockCipher(AesUtilities.CreateEngine()); + } + else if (PkcsObjectIdentifiers.DesEde3Cbc.Equals(algorithm)) + { + cipher = new CbcBlockCipher(new DesEdeEngine()); + } + else if (OiwObjectIdentifiers.DesCbc.Equals(algorithm)) + { + cipher = new CbcBlockCipher(new DesEngine()); + } + else if (PkcsObjectIdentifiers.RC2Cbc.Equals(algorithm)) + { + cipher = new CbcBlockCipher(new RC2Engine()); + } + else if (MiscObjectIdentifiers.cast5CBC.Equals(algorithm)) + { + cipher = new CbcBlockCipher(new Cast5Engine()); + } + else + { + throw new InvalidOperationException("cannot recognise cipher: " + algorithm); + } + + return new PaddedBufferedBlockCipher(cipher, new Pkcs7Padding()); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/CipherFactory.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/CipherFactory.cs.meta new file mode 100644 index 000000000..81abb7e88 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/CipherFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eff741d9dad74b541b1522a976ca8479 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/CipherKeyGeneratorFactory.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/CipherKeyGeneratorFactory.cs new file mode 100644 index 000000000..6b9802182 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/CipherKeyGeneratorFactory.cs @@ -0,0 +1,95 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Kisa; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ntt; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities +{ + public static class CipherKeyGeneratorFactory + { + /** + * Create a key generator for the passed in Object Identifier. + * + * @param algorithm the Object Identifier indicating the algorithn the generator is for. + * @param random a source of random to initialise the generator with. + * @return an initialised CipherKeyGenerator. + * @throws IllegalArgumentException if the algorithm cannot be identified. + */ + public static CipherKeyGenerator CreateKeyGenerator(DerObjectIdentifier algorithm, SecureRandom random) + { + if (NistObjectIdentifiers.IdAes128Cbc.Equals(algorithm)) + { + return CreateCipherKeyGenerator(random, 128); + } + else if (NistObjectIdentifiers.IdAes192Cbc.Equals(algorithm)) + { + return CreateCipherKeyGenerator(random, 192); + } + else if (NistObjectIdentifiers.IdAes256Cbc.Equals(algorithm)) + { + return CreateCipherKeyGenerator(random, 256); + } + else if (PkcsObjectIdentifiers.DesEde3Cbc.Equals(algorithm)) + { + DesEdeKeyGenerator keyGen = new DesEdeKeyGenerator(); + keyGen.Init(new KeyGenerationParameters(random, 192)); + return keyGen; + } + else if (NttObjectIdentifiers.IdCamellia128Cbc.Equals(algorithm)) + { + return CreateCipherKeyGenerator(random, 128); + } + else if (NttObjectIdentifiers.IdCamellia192Cbc.Equals(algorithm)) + { + return CreateCipherKeyGenerator(random, 192); + } + else if (NttObjectIdentifiers.IdCamellia256Cbc.Equals(algorithm)) + { + return CreateCipherKeyGenerator(random, 256); + } + else if (KisaObjectIdentifiers.IdSeedCbc.Equals(algorithm)) + { + return CreateCipherKeyGenerator(random, 128); + } + else if (AlgorithmIdentifierFactory.CAST5_CBC.Equals(algorithm)) + { + return CreateCipherKeyGenerator(random, 128); + } + else if (OiwObjectIdentifiers.DesCbc.Equals(algorithm)) + { + DesKeyGenerator keyGen = new DesKeyGenerator(); + keyGen.Init(new KeyGenerationParameters(random, 64)); + return keyGen; + } + else if (PkcsObjectIdentifiers.rc4.Equals(algorithm)) + { + return CreateCipherKeyGenerator(random, 128); + } + else if (PkcsObjectIdentifiers.RC2Cbc.Equals(algorithm)) + { + return CreateCipherKeyGenerator(random, 128); + } + else + { + throw new InvalidOperationException("cannot recognise cipher: " + algorithm); + } + } + + private static CipherKeyGenerator CreateCipherKeyGenerator(SecureRandom random, int keySize) + { + CipherKeyGenerator keyGen = new CipherKeyGenerator(); + keyGen.Init(new KeyGenerationParameters(random, keySize)); + return keyGen; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/CipherKeyGeneratorFactory.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/CipherKeyGeneratorFactory.cs.meta new file mode 100644 index 000000000..325149d31 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/CipherKeyGeneratorFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d847b628950c21a42b21edb4b3304598 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/Pack.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/Pack.cs new file mode 100644 index 000000000..60e6c1908 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/Pack.cs @@ -0,0 +1,760 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ +using System.Buffers.Binary; +#endif +using System.Diagnostics; +using System.Runtime.CompilerServices; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities +{ + internal static class Pack + { + internal static void UInt16_To_BE(ushort n, byte[] bs) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BinaryPrimitives.WriteUInt16BigEndian(bs, n); +#else + bs[0] = (byte)(n >> 8); + bs[1] = (byte)n; +#endif + } + + internal static void UInt16_To_BE(ushort n, byte[] bs, int off) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BinaryPrimitives.WriteUInt16BigEndian(bs.AsSpan(off), n); +#else + bs[off] = (byte)(n >> 8); + bs[off + 1] = (byte)n; +#endif + } + + internal static void UInt16_To_BE(ushort[] ns, byte[] bs, int off) + { + for (int i = 0; i < ns.Length; ++i) + { + UInt16_To_BE(ns[i], bs, off); + off += 2; + } + } + + internal static void UInt16_To_BE(ushort[] ns, int nsOff, int nsLen, byte[] bs, int bsOff) + { + for (int i = 0; i < nsLen; ++i) + { + UInt16_To_BE(ns[nsOff + i], bs, bsOff); + bsOff += 2; + } + } + + internal static byte[] UInt16_To_BE(ushort n) + { + byte[] bs = new byte[2]; + UInt16_To_BE(n, bs, 0); + return bs; + } + + internal static byte[] UInt16_To_BE(ushort[] ns) + { + return UInt16_To_BE(ns, 0, ns.Length); + } + + internal static byte[] UInt16_To_BE(ushort[] ns, int nsOff, int nsLen) + { + byte[] bs = new byte[2 * nsLen]; + UInt16_To_BE(ns, nsOff, nsLen, bs, 0); + return bs; + } + + internal static ushort BE_To_UInt16(byte[] bs, int off) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return BinaryPrimitives.ReadUInt16BigEndian(bs.AsSpan(off)); +#else + uint n = (uint)bs[off] << 8 + | bs[off + 1]; + return (ushort)n; +#endif + } + + internal static void BE_To_UInt16(byte[] bs, int bsOff, ushort[] ns, int nsOff) + { + ns[nsOff] = BE_To_UInt16(bs, bsOff); + } + + internal static ushort[] BE_To_UInt16(byte[] bs) + { + return BE_To_UInt16(bs, 0, bs.Length); + } + + internal static ushort[] BE_To_UInt16(byte[] bs, int off, int len) + { + if ((len & 1) != 0) + throw new ArgumentException("must be a multiple of 2", "len"); + + ushort[] ns = new ushort[len / 2]; + for (int i = 0; i < len; i += 2) + { + BE_To_UInt16(bs, off + i, ns, i >> 1); + } + return ns; + } + + internal static void UInt32_To_BE(uint n, byte[] bs) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BinaryPrimitives.WriteUInt32BigEndian(bs, n); +#else + bs[0] = (byte)(n >> 24); + bs[1] = (byte)(n >> 16); + bs[2] = (byte)(n >> 8); + bs[3] = (byte)n; +#endif + } + + internal static void UInt32_To_BE(uint n, byte[] bs, int off) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BinaryPrimitives.WriteUInt32BigEndian(bs.AsSpan(off), n); +#else + bs[off] = (byte)(n >> 24); + bs[off + 1] = (byte)(n >> 16); + bs[off + 2] = (byte)(n >> 8); + bs[off + 3] = (byte)n; +#endif + } + + internal static void UInt32_To_BE(uint[] ns, byte[] bs, int off) + { + for (int i = 0; i < ns.Length; ++i) + { + UInt32_To_BE(ns[i], bs, off); + off += 4; + } + } + + internal static void UInt32_To_BE(uint[] ns, int nsOff, int nsLen, byte[] bs, int bsOff) + { + for (int i = 0; i < nsLen; ++i) + { + UInt32_To_BE(ns[nsOff + i], bs, bsOff); + bsOff += 4; + } + } + + internal static byte[] UInt32_To_BE(uint n) + { + byte[] bs = new byte[4]; + UInt32_To_BE(n, bs, 0); + return bs; + } + + internal static byte[] UInt32_To_BE(uint[] ns) + { + byte[] bs = new byte[4 * ns.Length]; + UInt32_To_BE(ns, bs, 0); + return bs; + } + + internal static uint BE_To_UInt32(byte[] bs) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return BinaryPrimitives.ReadUInt32BigEndian(bs); +#else + return (uint)bs[0] << 24 + | (uint)bs[1] << 16 + | (uint)bs[2] << 8 + | bs[3]; +#endif + } + + internal static uint BE_To_UInt32(byte[] bs, int off) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return BinaryPrimitives.ReadUInt32BigEndian(bs.AsSpan(off)); +#else + return (uint)bs[off] << 24 + | (uint)bs[off + 1] << 16 + | (uint)bs[off + 2] << 8 + | bs[off + 3]; +#endif + } + + internal static uint BE_To_UInt32_Partial(byte[] bs, int off, int len) + { + Debug.Assert(1 <= len && len <= 4); + + uint result = bs[off]; + for (int i = 1; i < len; ++i) + { + result <<= 8; + result |= bs[off + i]; + } + return result; + } + + internal static void BE_To_UInt32(byte[] bs, int off, uint[] ns) + { + for (int i = 0; i < ns.Length; ++i) + { + ns[i] = BE_To_UInt32(bs, off); + off += 4; + } + } + + internal static void BE_To_UInt32(byte[] bs, int bsOff, uint[] ns, int nsOff, int nsLen) + { + for (int i = 0; i < nsLen; ++i) + { + ns[nsOff + i] = BE_To_UInt32(bs, bsOff); + bsOff += 4; + } + } + + internal static byte[] UInt64_To_BE(ulong n) + { + byte[] bs = new byte[8]; + UInt64_To_BE(n, bs, 0); + return bs; + } + + internal static void UInt64_To_BE(ulong n, byte[] bs) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BinaryPrimitives.WriteUInt64BigEndian(bs, n); +#else + UInt32_To_BE((uint)(n >> 32), bs); + UInt32_To_BE((uint)n, bs, 4); +#endif + } + + internal static void UInt64_To_BE(ulong n, byte[] bs, int off) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BinaryPrimitives.WriteUInt64BigEndian(bs.AsSpan(off), n); +#else + UInt32_To_BE((uint)(n >> 32), bs, off); + UInt32_To_BE((uint)n, bs, off + 4); +#endif + } + + internal static byte[] UInt64_To_BE(ulong[] ns) + { + byte[] bs = new byte[8 * ns.Length]; + UInt64_To_BE(ns, bs, 0); + return bs; + } + + internal static void UInt64_To_BE(ulong[] ns, byte[] bs, int off) + { + for (int i = 0; i < ns.Length; ++i) + { + UInt64_To_BE(ns[i], bs, off); + off += 8; + } + } + + internal static void UInt64_To_BE(ulong[] ns, int nsOff, int nsLen, byte[] bs, int bsOff) + { + for (int i = 0; i < nsLen; ++i) + { + UInt64_To_BE(ns[nsOff + i], bs, bsOff); + bsOff += 8; + } + } + + internal static ulong BE_To_UInt64(byte[] bs) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return BinaryPrimitives.ReadUInt64BigEndian(bs); +#else + uint hi = BE_To_UInt32(bs); + uint lo = BE_To_UInt32(bs, 4); + return ((ulong)hi << 32) | (ulong)lo; +#endif + } + + internal static ulong BE_To_UInt64(byte[] bs, int off) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return BinaryPrimitives.ReadUInt64BigEndian(bs.AsSpan(off)); +#else + uint hi = BE_To_UInt32(bs, off); + uint lo = BE_To_UInt32(bs, off + 4); + return ((ulong)hi << 32) | (ulong)lo; +#endif + } + + internal static ulong BE_To_UInt64_Partial(byte[] bs, int off, int len) + { + Debug.Assert(1 <= len && len <= 8); + + ulong result = bs[off]; + for (int i = 1; i < len; ++i) + { + result <<= 8; + result |= bs[off + i]; + } + return result; + } + + internal static void BE_To_UInt64(byte[] bs, int off, ulong[] ns) + { + for (int i = 0; i < ns.Length; ++i) + { + ns[i] = BE_To_UInt64(bs, off); + off += 8; + } + } + + internal static void BE_To_UInt64(byte[] bs, int bsOff, ulong[] ns, int nsOff, int nsLen) + { + for (int i = 0; i < nsLen; ++i) + { + ns[nsOff + i] = BE_To_UInt64(bs, bsOff); + bsOff += 8; + } + } + + internal static void UInt16_To_LE(ushort n, byte[] bs) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BinaryPrimitives.WriteUInt16LittleEndian(bs, n); +#else + bs[0] = (byte)n; + bs[1] = (byte)(n >> 8); +#endif + } + + internal static void UInt16_To_LE(ushort n, byte[] bs, int off) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BinaryPrimitives.WriteUInt16LittleEndian(bs.AsSpan(off), n); +#else + bs[off] = (byte)n; + bs[off + 1] = (byte)(n >> 8); +#endif + } + + internal static byte[] UInt16_To_LE(ushort n) + { + byte[] bs = new byte[2]; + UInt16_To_LE(n, bs, 0); + return bs; + } + + internal static ushort LE_To_UInt16(byte[] bs) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return BinaryPrimitives.ReadUInt16LittleEndian(bs); +#else + uint n = bs[0] + | (uint)bs[1] << 8; + return (ushort)n; +#endif + } + + internal static ushort LE_To_UInt16(byte[] bs, int off) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return BinaryPrimitives.ReadUInt16LittleEndian(bs.AsSpan(off)); +#else + uint n = bs[off] + | (uint)bs[off + 1] << 8; + return (ushort)n; +#endif + } + + internal static byte[] UInt32_To_LE(uint n) + { + byte[] bs = new byte[4]; + UInt32_To_LE(n, bs, 0); + return bs; + } + + internal static void UInt32_To_LE(uint n, byte[] bs) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BinaryPrimitives.WriteUInt32LittleEndian(bs, n); +#else + bs[0] = (byte)n; + bs[1] = (byte)(n >> 8); + bs[2] = (byte)(n >> 16); + bs[3] = (byte)(n >> 24); +#endif + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void UInt32_To_LE(uint n, byte[] bs, int off) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BinaryPrimitives.WriteUInt32LittleEndian(bs.AsSpan(off), n); +#else + bs[off] = (byte)n; + bs[off + 1] = (byte)(n >> 8); + bs[off + 2] = (byte)(n >> 16); + bs[off + 3] = (byte)(n >> 24); +#endif + } + + internal static byte[] UInt32_To_LE(uint[] ns) + { + byte[] bs = new byte[4 * ns.Length]; + UInt32_To_LE(ns, bs, 0); + return bs; + } + + internal static void UInt32_To_LE(uint[] ns, byte[] bs, int off) + { + for (int i = 0; i < ns.Length; ++i) + { + UInt32_To_LE(ns[i], bs, off); + off += 4; + } + } + + internal static void UInt32_To_LE(uint[] ns, int nsOff, int nsLen, byte[] bs, int bsOff) + { + for (int i = 0; i < nsLen; ++i) + { + UInt32_To_LE(ns[nsOff + i], bs, bsOff); + bsOff += 4; + } + } + + internal static uint LE_To_UInt24(byte[] bs, int off) + { + return bs[off] + | (uint)bs[off + 1] << 8 + | (uint)bs[off + 2] << 16; + } + + internal static uint LE_To_UInt32(byte[] bs) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return BinaryPrimitives.ReadUInt32LittleEndian(bs); +#else + return bs[0] + | (uint)bs[1] << 8 + | (uint)bs[2] << 16 + | (uint)bs[3] << 24; +#endif + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static uint LE_To_UInt32(byte[] bs, int off) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return BinaryPrimitives.ReadUInt32LittleEndian(bs.AsSpan(off)); +#else + return bs[off] + | (uint)bs[off + 1] << 8 + | (uint)bs[off + 2] << 16 + | (uint)bs[off + 3] << 24; +#endif + } + + internal static void LE_To_UInt32(byte[] bs, int off, uint[] ns) + { + for (int i = 0; i < ns.Length; ++i) + { + ns[i] = LE_To_UInt32(bs, off); + off += 4; + } + } + + internal static void LE_To_UInt32(byte[] bs, int bOff, uint[] ns, int nOff, int count) + { + for (int i = 0; i < count; ++i) + { + ns[nOff + i] = LE_To_UInt32(bs, bOff); + bOff += 4; + } + } + + internal static uint[] LE_To_UInt32(byte[] bs, int off, int count) + { + uint[] ns = new uint[count]; + for (int i = 0; i < ns.Length; ++i) + { + ns[i] = LE_To_UInt32(bs, off); + off += 4; + } + return ns; + } + + internal static byte[] UInt64_To_LE(ulong n) + { + byte[] bs = new byte[8]; + UInt64_To_LE(n, bs, 0); + return bs; + } + + internal static void UInt64_To_LE(ulong n, byte[] bs) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BinaryPrimitives.WriteUInt64LittleEndian(bs, n); +#else + UInt32_To_LE((uint)n, bs); + UInt32_To_LE((uint)(n >> 32), bs, 4); +#endif + } + + internal static void UInt64_To_LE(ulong n, byte[] bs, int off) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + BinaryPrimitives.WriteUInt64LittleEndian(bs.AsSpan(off), n); +#else + UInt32_To_LE((uint)n, bs, off); + UInt32_To_LE((uint)(n >> 32), bs, off + 4); +#endif + } + + internal static byte[] UInt64_To_LE(ulong[] ns) + { + byte[] bs = new byte[8 * ns.Length]; + UInt64_To_LE(ns, bs, 0); + return bs; + } + + internal static void UInt64_To_LE(ulong[] ns, byte[] bs, int off) + { + for (int i = 0; i < ns.Length; ++i) + { + UInt64_To_LE(ns[i], bs, off); + off += 8; + } + } + + internal static void UInt64_To_LE(ulong[] ns, int nsOff, int nsLen, byte[] bs, int bsOff) + { + for (int i = 0; i < nsLen; ++i) + { + UInt64_To_LE(ns[nsOff + i], bs, bsOff); + bsOff += 8; + } + } + + internal static ulong LE_To_UInt64(byte[] bs) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return BinaryPrimitives.ReadUInt64LittleEndian(bs); +#else + uint lo = LE_To_UInt32(bs); + uint hi = LE_To_UInt32(bs, 4); + return ((ulong)hi << 32) | (ulong)lo; +#endif + } + + internal static ulong LE_To_UInt64(byte[] bs, int off) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return BinaryPrimitives.ReadUInt64LittleEndian(bs.AsSpan(off)); +#else + uint lo = LE_To_UInt32(bs, off); + uint hi = LE_To_UInt32(bs, off + 4); + return ((ulong)hi << 32) | (ulong)lo; +#endif + } + + internal static void LE_To_UInt64(byte[] bs, int off, ulong[] ns) + { + for (int i = 0; i < ns.Length; ++i) + { + ns[i] = LE_To_UInt64(bs, off); + off += 8; + } + } + + internal static void LE_To_UInt64(byte[] bs, int bsOff, ulong[] ns, int nsOff, int nsLen) + { + for (int i = 0; i < nsLen; ++i) + { + ns[nsOff + i] = LE_To_UInt64(bs, bsOff); + bsOff += 8; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static uint BE_To_UInt32(ReadOnlySpan bs) + { + return BinaryPrimitives.ReadUInt32BigEndian(bs); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void BE_To_UInt32(ReadOnlySpan bs, Span ns) + { + for (int i = 0; i < ns.Length; ++i) + { + ns[i] = BE_To_UInt32(bs); + bs = bs[4..]; + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static uint BE_To_UInt32_Partial(ReadOnlySpan bs) + { + int len = bs.Length; + Debug.Assert(1 <= len && len <= 4); + + uint result = bs[0]; + for (int i = 1; i < len; ++i) + { + result <<= 8; + result |= bs[i]; + } + return result; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static ulong BE_To_UInt64(ReadOnlySpan bs) + { + return BinaryPrimitives.ReadUInt64BigEndian(bs); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void BE_To_UInt64(ReadOnlySpan bs, Span ns) + { + for (int i = 0; i < ns.Length; ++i) + { + ns[i] = BE_To_UInt64(bs); + bs = bs[8..]; + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static ulong BE_To_UInt64_Partial(ReadOnlySpan bs) + { + int len = bs.Length; + Debug.Assert(1 <= len && len <= 8); + + ulong result = bs[0]; + for (int i = 1; i < len; ++i) + { + result <<= 8; + result |= bs[i]; + } + return result; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static ushort LE_To_UInt16(ReadOnlySpan bs) + { + return BinaryPrimitives.ReadUInt16LittleEndian(bs); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static uint LE_To_UInt32(ReadOnlySpan bs) + { + return BinaryPrimitives.ReadUInt32LittleEndian(bs); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void LE_To_UInt32(ReadOnlySpan bs, Span ns) + { + for (int i = 0; i < ns.Length; ++i) + { + ns[i] = LE_To_UInt32(bs); + bs = bs[4..]; + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static ulong LE_To_UInt64(ReadOnlySpan bs) + { + return BinaryPrimitives.ReadUInt64LittleEndian(bs); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void LE_To_UInt64(ReadOnlySpan bs, Span ns) + { + for (int i = 0; i < ns.Length; ++i) + { + ns[i] = LE_To_UInt64(bs); + bs = bs[8..]; + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void UInt16_To_BE(ushort n, Span bs) + { + BinaryPrimitives.WriteUInt16BigEndian(bs, n); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void UInt16_To_LE(ushort n, Span bs) + { + BinaryPrimitives.WriteUInt16LittleEndian(bs, n); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void UInt32_To_BE(uint n, Span bs) + { + BinaryPrimitives.WriteUInt32BigEndian(bs, n); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void UInt32_To_BE(ReadOnlySpan ns, Span bs) + { + for (int i = 0; i < ns.Length; ++i) + { + UInt32_To_BE(ns[i], bs); + bs = bs[4..]; + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void UInt32_To_LE(uint n, Span bs) + { + BinaryPrimitives.WriteUInt32LittleEndian(bs, n); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void UInt32_To_LE(ReadOnlySpan ns, Span bs) + { + for (int i = 0; i < ns.Length; ++i) + { + UInt32_To_LE(ns[i], bs); + bs = bs[4..]; + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void UInt64_To_BE(ulong n, Span bs) + { + BinaryPrimitives.WriteUInt64BigEndian(bs, n); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void UInt64_To_BE(ReadOnlySpan ns, Span bs) + { + for (int i = 0; i < ns.Length; ++i) + { + UInt64_To_BE(ns[i], bs); + bs = bs[8..]; + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void UInt64_To_LE(ulong n, Span bs) + { + BinaryPrimitives.WriteUInt64LittleEndian(bs, n); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void UInt64_To_LE(ReadOnlySpan ns, Span bs) + { + for (int i = 0; i < ns.Length; ++i) + { + UInt64_To_LE(ns[i], bs); + bs = bs[8..]; + } + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/Pack.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/Pack.cs.meta new file mode 100644 index 000000000..d25c5b7ef --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/crypto/util/Pack.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1d5c1783497718141a4efcd23f5d22a5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math.meta new file mode 100644 index 000000000..1571104d2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5701df17f62065143b8cf179ae96e414 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/BigInteger.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/BigInteger.cs new file mode 100644 index 000000000..6e292aa8c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/BigInteger.cs @@ -0,0 +1,3803 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +#if NETCOREAPP3_0_OR_GREATER +using System.Numerics; +#endif +using System.Runtime.Serialization; +using System.Text; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math +{ + [Serializable] + public sealed class BigInteger + : IComparable, IEquatable + { + // The first few odd primes + /* + 3 5 7 11 13 17 19 23 29 + 31 37 41 43 47 53 59 61 67 71 + 73 79 83 89 97 101 103 107 109 113 + 127 131 137 139 149 151 157 163 167 173 + 179 181 191 193 197 199 211 223 227 229 + 233 239 241 251 257 263 269 271 277 281 + 283 293 307 311 313 317 331 337 347 349 + 353 359 367 373 379 383 389 397 401 409 + 419 421 431 433 439 443 449 457 461 463 + 467 479 487 491 499 503 509 521 523 541 + 547 557 563 569 571 577 587 593 599 601 + 607 613 617 619 631 641 643 647 653 659 + 661 673 677 683 691 701 709 719 727 733 + 739 743 751 757 761 769 773 787 797 809 + 811 821 823 827 829 839 853 857 859 863 + 877 881 883 887 907 911 919 929 937 941 + 947 953 967 971 977 983 991 997 1009 + 1013 1019 1021 1031 1033 1039 1049 1051 + 1061 1063 1069 1087 1091 1093 1097 1103 + 1109 1117 1123 1129 1151 1153 1163 1171 + 1181 1187 1193 1201 1213 1217 1223 1229 + 1231 1237 1249 1259 1277 1279 1283 1289 + */ + + // Each list has a product < 2^31 + internal static readonly int[][] primeLists = new int[][] + { + new int[]{ 3, 5, 7, 11, 13, 17, 19, 23 }, + new int[]{ 29, 31, 37, 41, 43 }, + new int[]{ 47, 53, 59, 61, 67 }, + new int[]{ 71, 73, 79, 83 }, + new int[]{ 89, 97, 101, 103 }, + + new int[]{ 107, 109, 113, 127 }, + new int[]{ 131, 137, 139, 149 }, + new int[]{ 151, 157, 163, 167 }, + new int[]{ 173, 179, 181, 191 }, + new int[]{ 193, 197, 199, 211 }, + + new int[]{ 223, 227, 229 }, + new int[]{ 233, 239, 241 }, + new int[]{ 251, 257, 263 }, + new int[]{ 269, 271, 277 }, + new int[]{ 281, 283, 293 }, + + new int[]{ 307, 311, 313 }, + new int[]{ 317, 331, 337 }, + new int[]{ 347, 349, 353 }, + new int[]{ 359, 367, 373 }, + new int[]{ 379, 383, 389 }, + + new int[]{ 397, 401, 409 }, + new int[]{ 419, 421, 431 }, + new int[]{ 433, 439, 443 }, + new int[]{ 449, 457, 461 }, + new int[]{ 463, 467, 479 }, + + new int[]{ 487, 491, 499 }, + new int[]{ 503, 509, 521 }, + new int[]{ 523, 541, 547 }, + new int[]{ 557, 563, 569 }, + new int[]{ 571, 577, 587 }, + + new int[]{ 593, 599, 601 }, + new int[]{ 607, 613, 617 }, + new int[]{ 619, 631, 641 }, + new int[]{ 643, 647, 653 }, + new int[]{ 659, 661, 673 }, + + new int[]{ 677, 683, 691 }, + new int[]{ 701, 709, 719 }, + new int[]{ 727, 733, 739 }, + new int[]{ 743, 751, 757 }, + new int[]{ 761, 769, 773 }, + + new int[]{ 787, 797, 809 }, + new int[]{ 811, 821, 823 }, + new int[]{ 827, 829, 839 }, + new int[]{ 853, 857, 859 }, + new int[]{ 863, 877, 881 }, + + new int[]{ 883, 887, 907 }, + new int[]{ 911, 919, 929 }, + new int[]{ 937, 941, 947 }, + new int[]{ 953, 967, 971 }, + new int[]{ 977, 983, 991 }, + + new int[]{ 997, 1009, 1013 }, + new int[]{ 1019, 1021, 1031 }, + new int[]{ 1033, 1039, 1049 }, + new int[]{ 1051, 1061, 1063 }, + new int[]{ 1069, 1087, 1091 }, + + new int[]{ 1093, 1097, 1103 }, + new int[]{ 1109, 1117, 1123 }, + new int[]{ 1129, 1151, 1153 }, + new int[]{ 1163, 1171, 1181 }, + new int[]{ 1187, 1193, 1201 }, + + new int[]{ 1213, 1217, 1223 }, + new int[]{ 1229, 1231, 1237 }, + new int[]{ 1249, 1259, 1277 }, + new int[]{ 1279, 1283, 1289 }, + }; + + internal static readonly int[] primeProducts; + + private const long IMASK = 0xFFFFFFFFL; + private const ulong UIMASK = 0xFFFFFFFFUL; + + private static readonly int[] ZeroMagnitude = new int[0]; + private static readonly byte[] ZeroEncoding = new byte[0]; + + private static readonly BigInteger[] SMALL_CONSTANTS = new BigInteger[17]; + public static readonly BigInteger Zero; + public static readonly BigInteger One; + public static readonly BigInteger Two; + public static readonly BigInteger Three; + public static readonly BigInteger Four; + public static readonly BigInteger Ten; + +#if !NETCOREAPP3_0_OR_GREATER + private readonly static byte[] BitLengthTable = + { + 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 + }; +#endif + + // TODO Parse radix-2 64 bits at a time and radix-8 63 bits at a time + private const int chunk2 = 1, chunk8 = 1, chunk10 = 19, chunk16 = 16; + private static readonly BigInteger radix2, radix2E, radix8, radix8E, radix10, radix10E, radix16, radix16E; + + /* + * These are the threshold bit-lengths (of an exponent) where we increase the window size. + * They are calculated according to the expected savings in multiplications. + * Some squares will also be saved on average, but we offset these against the extra storage costs. + */ + private static readonly int[] ExpWindowThresholds = { 7, 25, 81, 241, 673, 1793, 4609, int.MaxValue }; + + private const int BitsPerByte = 8; + private const int BitsPerInt = 32; + private const int BytesPerInt = 4; + + static BigInteger() + { + Zero = new BigInteger(0, ZeroMagnitude, false); + Zero.nBits = 0; Zero.nBitLength = 0; + + SMALL_CONSTANTS[0] = Zero; + for (uint i = 1; i < SMALL_CONSTANTS.Length; ++i) + { + SMALL_CONSTANTS[i] = CreateUValueOf(i); + } + + One = SMALL_CONSTANTS[1]; + Two = SMALL_CONSTANTS[2]; + Three = SMALL_CONSTANTS[3]; + Four = SMALL_CONSTANTS[4]; + Ten = SMALL_CONSTANTS[10]; + + radix2 = ValueOf(2); + radix2E = radix2.Pow(chunk2); + + radix8 = ValueOf(8); + radix8E = radix8.Pow(chunk8); + + radix10 = ValueOf(10); + radix10E = radix10.Pow(chunk10); + + radix16 = ValueOf(16); + radix16E = radix16.Pow(chunk16); + + primeProducts = new int[primeLists.Length]; + + for (int i = 0; i < primeLists.Length; ++i) + { + int[] primeList = primeLists[i]; + int product = primeList[0]; + for (int j = 1; j < primeList.Length; ++j) + { + product *= primeList[j]; + } + primeProducts[i] = product; + } + } + + private int[] magnitude; // array of ints with [0] being the most significant + private int sign; // -1 means -ve; +1 means +ve; 0 means 0; + + [NonSerialized] + private int nBits = -1; // cache BitCount() value + [NonSerialized] + private int nBitLength = -1; // cache BitLength() value + + [OnDeserialized] + private void OnDeserialized(StreamingContext context) + { + this.nBits = -1; + this.nBitLength = -1; + } + + private static int GetByteLength(int nBits) + { + return (nBits + BitsPerByte - 1) / BitsPerByte; + } + + public static BigInteger Arbitrary(int sizeInBits) + { + return new BigInteger(sizeInBits, SecureRandom.ArbitraryRandom); + } + + private BigInteger( + int signum, + int[] mag, + bool checkMag) + { + if (checkMag) + { + int i = 0; + while (i < mag.Length && mag[i] == 0) + { + ++i; + } + + if (i == mag.Length) + { + this.sign = 0; + this.magnitude = ZeroMagnitude; + } + else + { + this.sign = signum; + + if (i == 0) + { + this.magnitude = mag; + } + else + { + // strip leading 0 words + this.magnitude = new int[mag.Length - i]; + Array.Copy(mag, i, this.magnitude, 0, this.magnitude.Length); + } + } + } + else + { + this.sign = signum; + this.magnitude = mag; + } + } + + public BigInteger( + string value) + : this(value, 10) + { + } + + public BigInteger( + string str, + int radix) + { + if (str.Length == 0) + throw new FormatException("Zero length BigInteger"); + + NumberStyles style; + int chunk; + BigInteger r; + BigInteger rE; + + switch (radix) + { + case 2: + // Is there anyway to restrict to binary digits? + style = NumberStyles.Integer; + chunk = chunk2; + r = radix2; + rE = radix2E; + break; + case 8: + // Is there anyway to restrict to octal digits? + style = NumberStyles.Integer; + chunk = chunk8; + r = radix8; + rE = radix8E; + break; + case 10: + // This style seems to handle spaces and minus sign already (our processing redundant?) + style = NumberStyles.Integer; + chunk = chunk10; + r = radix10; + rE = radix10E; + break; + case 16: + // TODO Should this be HexNumber? + style = NumberStyles.AllowHexSpecifier; + chunk = chunk16; + r = radix16; + rE = radix16E; + break; + default: + throw new FormatException("Only bases 2, 8, 10, or 16 allowed"); + } + + + int index = 0; + sign = 1; + + if (str[0] == '-') + { + if (str.Length == 1) + throw new FormatException("Zero length BigInteger"); + + sign = -1; + index = 1; + } + + // strip leading zeros from the string str + while (index < str.Length && int.Parse(str[index].ToString(), style) == 0) + { + index++; + } + + if (index >= str.Length) + { + // zero value - we're done + sign = 0; + magnitude = ZeroMagnitude; + return; + } + + ////// + // could we work out the max number of ints required to store + // str.Length digits in the given base, then allocate that + // storage in one hit?, then Generate the magnitude in one hit too? + ////// + + BigInteger b = Zero; + + + int next = index + chunk; + + if (next <= str.Length) + { + do + { + string s = str.Substring(index, chunk); + ulong i = ulong.Parse(s, style); + BigInteger bi = CreateUValueOf(i); + + switch (radix) + { + case 2: + // TODO Need this because we are parsing in radix 10 above + if (i >= 2) + throw new FormatException("Bad character in radix 2 string: " + s); + + // TODO Parse 64 bits at a time + b = b.ShiftLeft(1); + break; + case 8: + // TODO Need this because we are parsing in radix 10 above + if (i >= 8) + throw new FormatException("Bad character in radix 8 string: " + s); + + // TODO Parse 63 bits at a time + b = b.ShiftLeft(3); + break; + case 16: + b = b.ShiftLeft(64); + break; + default: + b = b.Multiply(rE); + break; + } + + b = b.Add(bi); + + index = next; + next += chunk; + } + while (next <= str.Length); + } + + if (index < str.Length) + { + string s = str.Substring(index); + ulong i = ulong.Parse(s, style); + BigInteger bi = CreateUValueOf(i); + + if (b.sign > 0) + { + if (radix == 2) + { + // NB: Can't reach here since we are parsing one char at a time + Debug.Assert(false); + + // TODO Parse all bits at once +// b = b.ShiftLeft(s.Length); + } + else if (radix == 8) + { + // NB: Can't reach here since we are parsing one char at a time + Debug.Assert(false); + + // TODO Parse all bits at once +// b = b.ShiftLeft(s.Length * 3); + } + else if (radix == 16) + { + b = b.ShiftLeft(s.Length << 2); + } + else + { + b = b.Multiply(r.Pow(s.Length)); + } + + b = b.Add(bi); + } + else + { + b = bi; + } + } + + // Note: This is the previous (slower) algorithm +// while (index < value.Length) +// { +// char c = value[index]; +// string s = c.ToString(); +// int i = int.Parse(s, style); +// +// b = b.Multiply(r).Add(ValueOf(i)); +// index++; +// } + + magnitude = b.magnitude; + } + + public BigInteger( + byte[] bytes) + : this(bytes, 0, bytes.Length) + { + } + + public BigInteger( + byte[] bytes, + int offset, + int length) + { + if (length == 0) + throw new FormatException("Zero length BigInteger"); + + // TODO Move this processing into MakeMagnitude (provide sign argument) + if ((sbyte)bytes[offset] < 0) + { + this.sign = -1; + + int end = offset + length; + + int iBval; + // strip leading sign bytes + for (iBval = offset; iBval < end && ((sbyte)bytes[iBval] == -1); iBval++) + { + } + + if (iBval >= end) + { + this.magnitude = One.magnitude; + } + else + { + int numBytes = end - iBval; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span inverse = numBytes <= 512 + ? stackalloc byte[numBytes] + : new byte[numBytes]; +#else + byte[] inverse = new byte[numBytes]; +#endif + + int index = 0; + while (index < numBytes) + { + inverse[index++] = (byte)~bytes[iBval++]; + } + + Debug.Assert(iBval == end); + + while (inverse[--index] == byte.MaxValue) + { + inverse[index] = byte.MinValue; + } + + inverse[index]++; + + this.magnitude = MakeMagnitude(inverse); + } + } + else + { + // strip leading zero bytes and return magnitude bytes + this.magnitude = MakeMagnitude(bytes, offset, length); + this.sign = this.magnitude.Length > 0 ? 1 : 0; + } + } + + private static int[] MakeMagnitude(byte[] bytes) + { + return MakeMagnitude(bytes, 0, bytes.Length); + } + + private static int[] MakeMagnitude(byte[] bytes, int offset, int length) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return MakeMagnitude(bytes.AsSpan(offset, length)); +#else + int end = offset + length; + + // strip leading zeros + int firstSignificant; + for (firstSignificant = offset; firstSignificant < end && bytes[firstSignificant] == 0; firstSignificant++) + { + } + + if (firstSignificant >= end) + return ZeroMagnitude; + + int nInts = (end - firstSignificant + 3) / BytesPerInt; + int bCount = (end - firstSignificant) % BytesPerInt; + if (bCount == 0) + { + bCount = BytesPerInt; + } + + if (nInts < 1) + return ZeroMagnitude; + + int[] mag = new int[nInts]; + + int v = 0; + int magnitudeIndex = 0; + for (int i = firstSignificant; i < end; ++i) + { + v <<= 8; + v |= bytes[i] & 0xff; + bCount--; + if (bCount <= 0) + { + mag[magnitudeIndex] = v; + magnitudeIndex++; + bCount = BytesPerInt; + v = 0; + } + } + + if (magnitudeIndex < mag.Length) + { + mag[magnitudeIndex] = v; + } + + return mag; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static int[] MakeMagnitude(ReadOnlySpan bytes) + { + int end = bytes.Length; + + // strip leading zeros + int firstSignificant; + for (firstSignificant = 0; firstSignificant < end && bytes[firstSignificant] == 0; firstSignificant++) + { + } + + if (firstSignificant >= end) + return ZeroMagnitude; + + int nInts = (end - firstSignificant + 3) / BytesPerInt; + int bCount = (end - firstSignificant) % BytesPerInt; + if (bCount == 0) + { + bCount = BytesPerInt; + } + + if (nInts < 1) + return ZeroMagnitude; + + int[] mag = new int[nInts]; + + int v = 0; + int magnitudeIndex = 0; + for (int i = firstSignificant; i < end; ++i) + { + v <<= 8; + v |= bytes[i] & 0xff; + bCount--; + if (bCount <= 0) + { + mag[magnitudeIndex] = v; + magnitudeIndex++; + bCount = BytesPerInt; + v = 0; + } + } + + if (magnitudeIndex < mag.Length) + { + mag[magnitudeIndex] = v; + } + + return mag; + } +#endif + + public BigInteger(int sign, byte[] bytes) + : this(sign, bytes, 0, bytes.Length) + { + } + + public BigInteger(int sign, byte[] bytes, int offset, int length) + { + if (sign < -1 || sign > 1) + throw new FormatException("Invalid sign value"); + + if (sign == 0) + { + this.sign = 0; + this.magnitude = ZeroMagnitude; + } + else + { + // copy bytes + this.magnitude = MakeMagnitude(bytes, offset, length); + this.sign = this.magnitude.Length < 1 ? 0 : sign; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public BigInteger(int sign, ReadOnlySpan bytes) + { + if (sign < -1 || sign > 1) + throw new FormatException("Invalid sign value"); + + if (sign == 0) + { + this.sign = 0; + this.magnitude = ZeroMagnitude; + } + else + { + // copy bytes + this.magnitude = MakeMagnitude(bytes); + this.sign = this.magnitude.Length < 1 ? 0 : sign; + } + } +#endif + + public BigInteger( + int sizeInBits, + Random random) + { + if (sizeInBits < 0) + throw new ArgumentException("sizeInBits must be non-negative"); + + this.nBits = -1; + this.nBitLength = -1; + + if (sizeInBits == 0) + { + this.sign = 0; + this.magnitude = ZeroMagnitude; + return; + } + + int nBytes = GetByteLength(sizeInBits); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span b = nBytes <= 512 + ? stackalloc byte[nBytes] + : new byte[nBytes]; +#else + byte[] b = new byte[nBytes]; +#endif + random.NextBytes(b); + + // strip off any excess bits in the MSB + int xBits = BitsPerByte * nBytes - sizeInBits; + b[0] &= (byte)(255U >> xBits); + + this.magnitude = MakeMagnitude(b); + this.sign = this.magnitude.Length < 1 ? 0 : 1; + } + + public BigInteger( + int bitLength, + int certainty, + Random random) + { + if (bitLength < 2) + throw new ArithmeticException("bitLength < 2"); + + this.sign = 1; + this.nBitLength = bitLength; + + if (bitLength == 2) + { + this.magnitude = random.Next(2) == 0 + ? Two.magnitude + : Three.magnitude; + return; + } + + int nBytes = GetByteLength(bitLength); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span b = nBytes <= 512 + ? stackalloc byte[nBytes] + : new byte[nBytes]; +#else + byte[] b = new byte[nBytes]; +#endif + + int xBits = BitsPerByte * nBytes - bitLength; + byte mask = (byte)(255U >> xBits); + byte lead = (byte)(1 << (7 - xBits)); + + for (;;) + { + random.NextBytes(b); + + // strip off any excess bits in the MSB + b[0] &= mask; + + // ensure the leading bit is 1 (to meet the strength requirement) + b[0] |= lead; + + // ensure the trailing bit is 1 (i.e. must be odd) + b[nBytes - 1] |= 1; + + this.magnitude = MakeMagnitude(b); + this.nBits = -1; + + if (certainty < 1) + break; + + if (CheckProbablePrime(certainty, random, true)) + break; + + for (int j = 1; j < (magnitude.Length - 1); ++j) + { + this.magnitude[j] ^= random.Next(); + + if (CheckProbablePrime(certainty, random, true)) + return; + } + } + } + + public BigInteger Abs() + { + return sign >= 0 ? this : Negate(); + } + + /** + * return a = a + b - b preserved. + */ + private static int[] AddMagnitudes( + int[] a, + int[] b) + { + int tI = a.Length - 1; + int vI = b.Length - 1; + long m = 0; + + while (vI >= 0) + { + m += ((long)(uint)a[tI] + (long)(uint)b[vI--]); + a[tI--] = (int)m; + m = (long)((ulong)m >> 32); + } + + if (m != 0) + { + while (tI >= 0 && ++a[tI--] == 0) + { + } + } + + return a; + } + + public BigInteger Add( + BigInteger value) + { + if (this.sign == 0) + return value; + + if (this.sign != value.sign) + { + if (value.sign == 0) + return this; + + if (value.sign < 0) + return Subtract(value.Negate()); + + return value.Subtract(Negate()); + } + + return AddToMagnitude(value.magnitude); + } + + private BigInteger AddToMagnitude( + int[] magToAdd) + { + int[] big, small; + if (this.magnitude.Length < magToAdd.Length) + { + big = magToAdd; + small = this.magnitude; + } + else + { + big = this.magnitude; + small = magToAdd; + } + + // Conservatively avoid over-allocation when no overflow possible + uint limit = uint.MaxValue; + if (big.Length == small.Length) + limit -= (uint) small[0]; + + bool possibleOverflow = (uint) big[0] >= limit; + + int[] bigCopy; + if (possibleOverflow) + { + bigCopy = new int[big.Length + 1]; + big.CopyTo(bigCopy, 1); + } + else + { + bigCopy = (int[]) big.Clone(); + } + + bigCopy = AddMagnitudes(bigCopy, small); + + return new BigInteger(this.sign, bigCopy, possibleOverflow); + } + + public BigInteger And( + BigInteger value) + { + if (this.sign == 0 || value.sign == 0) + { + return Zero; + } + + int[] aMag = this.sign > 0 + ? this.magnitude + : Add(One).magnitude; + + int[] bMag = value.sign > 0 + ? value.magnitude + : value.Add(One).magnitude; + + bool resultNeg = sign < 0 && value.sign < 0; + int resultLength = System.Math.Max(aMag.Length, bMag.Length); + int[] resultMag = new int[resultLength]; + + int aStart = resultMag.Length - aMag.Length; + int bStart = resultMag.Length - bMag.Length; + + for (int i = 0; i < resultMag.Length; ++i) + { + int aWord = i >= aStart ? aMag[i - aStart] : 0; + int bWord = i >= bStart ? bMag[i - bStart] : 0; + + if (this.sign < 0) + { + aWord = ~aWord; + } + + if (value.sign < 0) + { + bWord = ~bWord; + } + + resultMag[i] = aWord & bWord; + + if (resultNeg) + { + resultMag[i] = ~resultMag[i]; + } + } + + BigInteger result = new BigInteger(1, resultMag, true); + + // TODO Optimise this case + if (resultNeg) + { + result = result.Not(); + } + + return result; + } + + public BigInteger AndNot( + BigInteger val) + { + return And(val.Not()); + } + + public int BitCount + { + get + { + if (nBits == -1) + { + if (sign < 0) + { + // TODO Optimise this case + nBits = Not().BitCount; + } + else + { + int sum = 0; + for (int i = 0; i < magnitude.Length; ++i) + { + sum += BitCnt(magnitude[i]); + } + nBits = sum; + } + } + + return nBits; + } + } + + public static int BitCnt(int i) + { +#if NETCOREAPP3_0_OR_GREATER + return BitOperations.PopCount((uint)i); +#else + uint u = (uint)i; + u = u - ((u >> 1) & 0x55555555); + u = (u & 0x33333333) + ((u >> 2) & 0x33333333); + u = (u + (u >> 4)) & 0x0f0f0f0f; + u += (u >> 8); + u += (u >> 16); + u &= 0x3f; + return (int)u; +#endif + } + + private static int CalcBitLength(int sign, int indx, int[] mag) + { + for (;;) + { + if (indx >= mag.Length) + return 0; + + if (mag[indx] != 0) + break; + + ++indx; + } + + // bit length for everything after the first int + int bitLength = 32 * ((mag.Length - indx) - 1); + + // and determine bitlength of first int + int firstMag = mag[indx]; + bitLength += BitLen(firstMag); + + // Check for negative powers of two + if (sign < 0 && ((firstMag & -firstMag) == firstMag)) + { + do + { + if (++indx >= mag.Length) + { + --bitLength; + break; + } + } + while (mag[indx] == 0); + } + + return bitLength; + } + + public int BitLength + { + get + { + if (nBitLength == -1) + { + nBitLength = sign == 0 + ? 0 + : CalcBitLength(sign, 0, magnitude); + } + + return nBitLength; + } + } + + private static int BitLen(byte b) + { +#if NETCOREAPP3_0_OR_GREATER + return 32 - BitOperations.LeadingZeroCount((uint)b); +#else + return BitLengthTable[b]; +#endif + } + + private static int BitLen(int w) + { +#if NETCOREAPP3_0_OR_GREATER + return 32 - BitOperations.LeadingZeroCount((uint)w); +#else + uint v = (uint)w; + uint t = v >> 24; + if (t != 0) + return 24 + BitLengthTable[t]; + t = v >> 16; + if (t != 0) + return 16 + BitLengthTable[t]; + t = v >> 8; + if (t != 0) + return 8 + BitLengthTable[t]; + return BitLengthTable[v]; +#endif + } + + private bool QuickPow2Check() + { + return sign > 0 && nBits == 1; + } + + public int CompareTo(BigInteger other) + { + if (other == null) + return 1; + + return sign < other.sign + ? -1 + : sign > other.sign + ? 1 + : sign == 0 + ? 0 + : sign * CompareNoLeadingZeroes(0, magnitude, 0, other.magnitude); + } + + /** + * unsigned comparison on two arrays - note the arrays may + * start with leading zeros. + */ + private static int CompareTo( + int xIndx, + int[] x, + int yIndx, + int[] y) + { + while (xIndx != x.Length && x[xIndx] == 0) + { + xIndx++; + } + + while (yIndx != y.Length && y[yIndx] == 0) + { + yIndx++; + } + + return CompareNoLeadingZeroes(xIndx, x, yIndx, y); + } + + private static int CompareNoLeadingZeroes( + int xIndx, + int[] x, + int yIndx, + int[] y) + { + int diff = (x.Length - y.Length) - (xIndx - yIndx); + + if (diff != 0) + { + return diff < 0 ? -1 : 1; + } + + // lengths of magnitudes the same, test the magnitude values + + while (xIndx < x.Length) + { + uint v1 = (uint)x[xIndx++]; + uint v2 = (uint)y[yIndx++]; + + if (v1 != v2) + return v1 < v2 ? -1 : 1; + } + + return 0; + } + + /** + * return z = x / y - done in place (z value preserved, x contains the + * remainder) + */ + private int[] Divide( + int[] x, + int[] y) + { + int xStart = 0; + while (xStart < x.Length && x[xStart] == 0) + { + ++xStart; + } + + int yStart = 0; + while (yStart < y.Length && y[yStart] == 0) + { + ++yStart; + } + + Debug.Assert(yStart < y.Length); + + int xyCmp = CompareNoLeadingZeroes(xStart, x, yStart, y); + int[] count; + + if (xyCmp > 0) + { + int yBitLength = CalcBitLength(1, yStart, y); + int xBitLength = CalcBitLength(1, xStart, x); + int shift = xBitLength - yBitLength; + + int[] iCount; + int iCountStart = 0; + + int[] c; + int cStart = 0; + int cBitLength = yBitLength; + if (shift > 0) + { +// iCount = ShiftLeft(One.magnitude, shift); + iCount = new int[(shift >> 5) + 1]; + iCount[0] = 1 << (shift % 32); + + c = ShiftLeft(y, shift); + cBitLength += shift; + } + else + { + iCount = new int[] { 1 }; + + int len = y.Length - yStart; + c = new int[len]; + Array.Copy(y, yStart, c, 0, len); + } + + count = new int[iCount.Length]; + + for (;;) + { + if (cBitLength < xBitLength + || CompareNoLeadingZeroes(xStart, x, cStart, c) >= 0) + { + Subtract(xStart, x, cStart, c); + AddMagnitudes(count, iCount); + + while (x[xStart] == 0) + { + if (++xStart == x.Length) + return count; + } + + //xBitLength = CalcBitLength(xStart, x); + xBitLength = 32 * (x.Length - xStart - 1) + BitLen(x[xStart]); + + if (xBitLength <= yBitLength) + { + if (xBitLength < yBitLength) + return count; + + xyCmp = CompareNoLeadingZeroes(xStart, x, yStart, y); + + if (xyCmp <= 0) + break; + } + } + + shift = cBitLength - xBitLength; + + // NB: The case where c[cStart] is 1-bit is harmless + if (shift == 1) + { + uint firstC = (uint) c[cStart] >> 1; + uint firstX = (uint) x[xStart]; + if (firstC > firstX) + ++shift; + } + + if (shift < 2) + { + ShiftRightOneInPlace(cStart, c); + --cBitLength; + ShiftRightOneInPlace(iCountStart, iCount); + } + else + { + ShiftRightInPlace(cStart, c, shift); + cBitLength -= shift; + ShiftRightInPlace(iCountStart, iCount, shift); + } + + //cStart = c.Length - ((cBitLength + 31) / 32); + while (c[cStart] == 0) + { + ++cStart; + } + + while (iCount[iCountStart] == 0) + { + ++iCountStart; + } + } + } + else + { + count = new int[1]; + } + + if (xyCmp == 0) + { + AddMagnitudes(count, One.magnitude); + Array.Clear(x, xStart, x.Length - xStart); + } + + return count; + } + + public BigInteger Divide( + BigInteger val) + { + if (val.sign == 0) + throw new ArithmeticException("Division by zero error"); + + if (sign == 0) + return Zero; + + if (val.QuickPow2Check()) // val is power of two + { + BigInteger result = this.Abs().ShiftRight(val.Abs().BitLength - 1); + return val.sign == this.sign ? result : result.Negate(); + } + + int[] mag = (int[]) this.magnitude.Clone(); + + return new BigInteger(this.sign * val.sign, Divide(mag, val.magnitude), true); + } + + public BigInteger[] DivideAndRemainder( + BigInteger val) + { + if (val.sign == 0) + throw new ArithmeticException("Division by zero error"); + + BigInteger[] biggies = new BigInteger[2]; + + if (sign == 0) + { + biggies[0] = Zero; + biggies[1] = Zero; + } + else if (val.QuickPow2Check()) // val is power of two + { + int e = val.Abs().BitLength - 1; + BigInteger quotient = this.Abs().ShiftRight(e); + int[] remainder = this.LastNBits(e); + + biggies[0] = val.sign == this.sign ? quotient : quotient.Negate(); + biggies[1] = new BigInteger(this.sign, remainder, true); + } + else + { + int[] remainder = (int[]) this.magnitude.Clone(); + int[] quotient = Divide(remainder, val.magnitude); + + biggies[0] = new BigInteger(this.sign * val.sign, quotient, true); + biggies[1] = new BigInteger(this.sign, remainder, true); + } + + return biggies; + } + + public override bool Equals(object obj) + { + if (obj == this) + return true; + if (!(obj is BigInteger biggie)) + return false; + + return sign == biggie.sign && IsEqualMagnitude(biggie); + } + + public bool Equals(BigInteger other) + { + if (other == this) + return true; + if (other == null) + return false; + + return sign == other.sign && IsEqualMagnitude(other); + } + + private bool IsEqualMagnitude(BigInteger x) + { + int[] xMag = x.magnitude; + if (magnitude.Length != x.magnitude.Length) + return false; + for (int i = 0; i < magnitude.Length; i++) + { + if (magnitude[i] != x.magnitude[i]) + return false; + } + return true; + } + + public BigInteger Gcd( + BigInteger value) + { + if (value.sign == 0) + return Abs(); + + if (sign == 0) + return value.Abs(); + + BigInteger r; + BigInteger u = this; + BigInteger v = value; + + while (v.sign != 0) + { + r = u.Mod(v); + u = v; + v = r; + } + + return u; + } + + public override int GetHashCode() + { + int hc = magnitude.Length; + if (magnitude.Length > 0) + { + hc ^= magnitude[0]; + + if (magnitude.Length > 1) + { + hc ^= magnitude[magnitude.Length - 1]; + } + } + + return sign < 0 ? ~hc : hc; + } + + // TODO Make public? + private BigInteger Inc() + { + if (this.sign == 0) + return One; + + if (this.sign < 0) + return new BigInteger(-1, doSubBigLil(this.magnitude, One.magnitude), true); + + return AddToMagnitude(One.magnitude); + } + + public int IntValue + { + get + { + if (sign == 0) + return 0; + + int n = magnitude.Length; + + int v = magnitude[n - 1]; + + return sign < 0 ? -v : v; + } + } + + public int IntValueExact + { + get + { + if (BitLength > 31) + throw new ArithmeticException("BigInteger out of int range"); + + return IntValue; + } + } + + /** + * return whether or not a BigInteger is probably prime with a + * probability of 1 - (1/2)**certainty. + *

From Knuth Vol 2, pg 395.

+ */ + public bool IsProbablePrime(int certainty) + { + return IsProbablePrime(certainty, false); + } + + internal bool IsProbablePrime(int certainty, bool randomlySelected) + { + if (certainty <= 0) + return true; + + BigInteger n = Abs(); + + if (!n.TestBit(0)) + return n.Equals(Two); + + if (n.Equals(One)) + return false; + + return n.CheckProbablePrime(certainty, SecureRandom.ArbitraryRandom, randomlySelected); + } + + private bool CheckProbablePrime(int certainty, Random random, bool randomlySelected) + { + Debug.Assert(certainty > 0); + Debug.Assert(CompareTo(Two) > 0); + Debug.Assert(TestBit(0)); + + + // Try to reduce the penalty for really small numbers + int numLists = System.Math.Min(BitLength - 1, primeLists.Length); + + for (int i = 0; i < numLists; ++i) + { + int test = Remainder(primeProducts[i]); + + int[] primeList = primeLists[i]; + for (int j = 0; j < primeList.Length; ++j) + { + int prime = primeList[j]; + int qRem = test % prime; + if (qRem == 0) + { + // We may find small numbers in the list + return BitLength < 16 && IntValue == prime; + } + } + } + + + // TODO Special case for < 10^16 (RabinMiller fixed list) +// if (BitLength < 30) +// { +// RabinMiller against 2, 3, 5, 7, 11, 13, 23 is sufficient +// } + + + // TODO Is it worth trying to create a hybrid of these two? + return RabinMillerTest(certainty, random, randomlySelected); +// return SolovayStrassenTest(certainty, random); + +// bool rbTest = RabinMillerTest(certainty, random); +// bool ssTest = SolovayStrassenTest(certainty, random); +// +// Debug.Assert(rbTest == ssTest); +// +// return rbTest; + } + + public bool RabinMillerTest(int certainty, Random random) + { + return RabinMillerTest(certainty, random, false); + } + + internal bool RabinMillerTest(int certainty, Random random, bool randomlySelected) + { + int bits = BitLength; + + Debug.Assert(certainty > 0); + Debug.Assert(bits > 2); + Debug.Assert(TestBit(0)); + + int iterations = ((certainty - 1) / 2) + 1; + if (randomlySelected) + { + int itersFor100Cert = bits >= 1024 ? 4 + : bits >= 512 ? 8 + : bits >= 256 ? 16 + : 50; + + if (certainty < 100) + { + iterations = System.Math.Min(itersFor100Cert, iterations); + } + else + { + iterations -= 50; + iterations += itersFor100Cert; + } + } + + // let n = 1 + d . 2^s + BigInteger n = this; + int s = n.GetLowestSetBitMaskFirst(-1 << 1); + Debug.Assert(s >= 1); + BigInteger r = n.ShiftRight(s); + + // NOTE: Avoid conversion to/from Montgomery form and check for R/-R as result instead + + BigInteger montRadix = One.ShiftLeft(32 * n.magnitude.Length).Remainder(n); + BigInteger minusMontRadix = n.Subtract(montRadix); + + do + { + BigInteger a; + do + { + a = new BigInteger(n.BitLength, random); + } + while (a.sign == 0 || a.CompareTo(n) >= 0 + || a.IsEqualMagnitude(montRadix) || a.IsEqualMagnitude(minusMontRadix)); + + BigInteger y = ModPowMonty(a, r, n, false); + + if (!y.Equals(montRadix)) + { + int j = 0; + while (!y.Equals(minusMontRadix)) + { + if (++j == s) + return false; + + y = ModPowMonty(y, Two, n, false); + + if (y.Equals(montRadix)) + return false; + } + } + } + while (--iterations > 0); + + return true; + } + +// private bool SolovayStrassenTest( +// int certainty, +// Random random) +// { +// Debug.Assert(certainty > 0); +// Debug.Assert(CompareTo(Two) > 0); +// Debug.Assert(TestBit(0)); +// +// BigInteger n = this; +// BigInteger nMinusOne = n.Subtract(One); +// BigInteger e = nMinusOne.ShiftRight(1); +// +// do +// { +// BigInteger a; +// do +// { +// a = new BigInteger(nBitLength, random); +// } +// // NB: Spec says 0 < x < n, but 1 is trivial +// while (a.CompareTo(One) <= 0 || a.CompareTo(n) >= 0); +// +// +// // TODO Check this is redundant given the way Jacobi() works? +//// if (!a.Gcd(n).Equals(One)) +//// return false; +// +// int x = Jacobi(a, n); +// +// if (x == 0) +// return false; +// +// BigInteger check = a.ModPow(e, n); +// +// if (x == 1 && !check.Equals(One)) +// return false; +// +// if (x == -1 && !check.Equals(nMinusOne)) +// return false; +// +// --certainty; +// } +// while (certainty > 0); +// +// return true; +// } +// +// private static int Jacobi( +// BigInteger a, +// BigInteger b) +// { +// Debug.Assert(a.sign >= 0); +// Debug.Assert(b.sign > 0); +// Debug.Assert(b.TestBit(0)); +// Debug.Assert(a.CompareTo(b) < 0); +// +// int totalS = 1; +// for (;;) +// { +// if (a.sign == 0) +// return 0; +// +// if (a.Equals(One)) +// break; +// +// int e = a.GetLowestSetBit(); +// +// int bLsw = b.magnitude[b.magnitude.Length - 1]; +// if ((e & 1) != 0 && ((bLsw & 7) == 3 || (bLsw & 7) == 5)) +// totalS = -totalS; +// +// // TODO Confirm this is faster than later a1.Equals(One) test +// if (a.BitLength == e + 1) +// break; +// BigInteger a1 = a.ShiftRight(e); +//// if (a1.Equals(One)) +//// break; +// +// int a1Lsw = a1.magnitude[a1.magnitude.Length - 1]; +// if ((bLsw & 3) == 3 && (a1Lsw & 3) == 3) +// totalS = -totalS; +// +//// a = b.Mod(a1); +// a = b.Remainder(a1); +// b = a1; +// } +// return totalS; +// } + + public long LongValue + { + get + { + if (sign == 0) + return 0; + + int n = magnitude.Length; + + long v = magnitude[n - 1] & IMASK; + if (n > 1) + { + v |= (magnitude[n - 2] & IMASK) << 32; + } + + return sign < 0 ? -v : v; + } + } + + public long LongValueExact + { + get + { + if (BitLength > 63) + throw new ArithmeticException("BigInteger out of long range"); + + return LongValue; + } + } + + public BigInteger Max( + BigInteger value) + { + return CompareTo(value) > 0 ? this : value; + } + + public BigInteger Min( + BigInteger value) + { + return CompareTo(value) < 0 ? this : value; + } + + public BigInteger Mod( + BigInteger m) + { + if (m.sign < 1) + throw new ArithmeticException("Modulus must be positive"); + + BigInteger biggie = Remainder(m); + + return (biggie.sign >= 0 ? biggie : biggie.Add(m)); + } + + public BigInteger ModInverse( + BigInteger m) + { + if (m.sign < 1) + throw new ArithmeticException("Modulus must be positive"); + + // TODO Too slow at the moment +// // "Fast Key Exchange with Elliptic Curve Systems" R.Schoeppel +// if (m.TestBit(0)) +// { +// //The Almost Inverse Algorithm +// int k = 0; +// BigInteger B = One, C = Zero, F = this, G = m, tmp; +// +// for (;;) +// { +// // While F is even, do F=F/u, C=C*u, k=k+1. +// int zeroes = F.GetLowestSetBit(); +// if (zeroes > 0) +// { +// F = F.ShiftRight(zeroes); +// C = C.ShiftLeft(zeroes); +// k += zeroes; +// } +// +// // If F = 1, then return B,k. +// if (F.Equals(One)) +// { +// BigInteger half = m.Add(One).ShiftRight(1); +// BigInteger halfK = half.ModPow(ValueOf(k), m); +// return B.Multiply(halfK).Mod(m); +// } +// +// if (F.CompareTo(G) < 0) +// { +// tmp = G; G = F; F = tmp; +// tmp = B; B = C; C = tmp; +// } +// +// F = F.Add(G); +// B = B.Add(C); +// } +// } + + if (m.QuickPow2Check()) + { + return ModInversePow2(m); + } + + BigInteger d = this.Remainder(m); + BigInteger x; + BigInteger gcd = ExtEuclid(d, m, out x); + + if (!gcd.Equals(One)) + throw new ArithmeticException("Numbers not relatively prime."); + + if (x.sign < 0) + { + x = x.Add(m); + } + + return x; + } + + private BigInteger ModInversePow2(BigInteger m) + { + Debug.Assert(m.SignValue > 0); + Debug.Assert(m.BitCount == 1); + + if (!TestBit(0)) + { + throw new ArithmeticException("Numbers not relatively prime."); + } + + int pow = m.BitLength - 1; + + long inv64 = (long)Raw.Mod.Inverse64((ulong)LongValue); + if (pow < 64) + { + inv64 &= ((1L << pow) - 1); + } + + BigInteger x = ValueOf(inv64); + + if (pow > 64) + { + BigInteger d = this.Remainder(m); + int bitsCorrect = 64; + + do + { + BigInteger t = x.Multiply(d).Remainder(m); + x = x.Multiply(Two.Subtract(t)).Remainder(m); + bitsCorrect <<= 1; + } + while (bitsCorrect < pow); + } + + if (x.sign < 0) + { + x = x.Add(m); + } + + return x; + } + + /** + * Calculate the numbers u1, u2, and u3 such that: + * + * u1 * a + u2 * b = u3 + * + * where u3 is the greatest common divider of a and b. + * a and b using the extended Euclid algorithm (refer p. 323 + * of The Art of Computer Programming vol 2, 2nd ed). + * This also seems to have the side effect of calculating + * some form of multiplicative inverse. + * + * @param a First number to calculate gcd for + * @param b Second number to calculate gcd for + * @param u1Out the return object for the u1 value + * @return The greatest common divisor of a and b + */ + private static BigInteger ExtEuclid(BigInteger a, BigInteger b, out BigInteger u1Out) + { + BigInteger u1 = One, v1 = Zero; + BigInteger u3 = a, v3 = b; + + if (v3.sign > 0) + { + for (;;) + { + BigInteger[] q = u3.DivideAndRemainder(v3); + u3 = v3; + v3 = q[1]; + + BigInteger oldU1 = u1; + u1 = v1; + + if (v3.sign <= 0) + break; + + v1 = oldU1.Subtract(v1.Multiply(q[0])); + } + } + + u1Out = u1; + + return u3; + } + + private static void ZeroOut( + int[] x) + { + Array.Clear(x, 0, x.Length); + } + + public BigInteger ModPow(BigInteger e, BigInteger m) + { + if (m.sign < 1) + throw new ArithmeticException("Modulus must be positive"); + + if (m.Equals(One)) + return Zero; + + if (e.sign == 0) + return One; + + if (sign == 0) + return Zero; + + bool negExp = e.sign < 0; + if (negExp) + e = e.Negate(); + + BigInteger result = this.Mod(m); + if (!e.Equals(One)) + { + if ((m.magnitude[m.magnitude.Length - 1] & 1) == 0) + { + result = ModPowBarrett(result, e, m); + } + else + { + result = ModPowMonty(result, e, m, true); + } + } + + if (negExp) + result = result.ModInverse(m); + + return result; + } + + private static BigInteger ModPowBarrett(BigInteger b, BigInteger e, BigInteger m) + { + int k = m.magnitude.Length; + BigInteger mr = One.ShiftLeft((k + 1) << 5); + BigInteger yu = One.ShiftLeft(k << 6).Divide(m); + + // Sliding window from MSW to LSW + int extraBits = 0, expLength = e.BitLength; + while (expLength > ExpWindowThresholds[extraBits]) + { + ++extraBits; + } + + int numPowers = 1 << extraBits; + BigInteger[] oddPowers = new BigInteger[numPowers]; + oddPowers[0] = b; + + BigInteger b2 = ReduceBarrett(b.Square(), m, mr, yu); + + for (int i = 1; i < numPowers; ++i) + { + oddPowers[i] = ReduceBarrett(oddPowers[i - 1].Multiply(b2), m, mr, yu); + } + + int[] windowList = GetWindowList(e.magnitude, extraBits); + Debug.Assert(windowList.Length > 0); + + int window = windowList[0]; + int mult = window & 0xFF, lastZeroes = window >> 8; + + BigInteger y; + if (mult == 1) + { + y = b2; + --lastZeroes; + } + else + { + y = oddPowers[mult >> 1]; + } + + int windowPos = 1; + while ((window = windowList[windowPos++]) != -1) + { + mult = window & 0xFF; + + int bits = lastZeroes + BitLen((byte)mult); + for (int j = 0; j < bits; ++j) + { + y = ReduceBarrett(y.Square(), m, mr, yu); + } + + y = ReduceBarrett(y.Multiply(oddPowers[mult >> 1]), m, mr, yu); + + lastZeroes = window >> 8; + } + + for (int i = 0; i < lastZeroes; ++i) + { + y = ReduceBarrett(y.Square(), m, mr, yu); + } + + return y; + } + + private static BigInteger ReduceBarrett(BigInteger x, BigInteger m, BigInteger mr, BigInteger yu) + { + int xLen = x.BitLength, mLen = m.BitLength; + if (xLen < mLen) + return x; + + if (xLen - mLen > 1) + { + int k = m.magnitude.Length; + + BigInteger q1 = x.DivideWords(k - 1); + BigInteger q2 = q1.Multiply(yu); // TODO Only need partial multiplication here + BigInteger q3 = q2.DivideWords(k + 1); + + BigInteger r1 = x.RemainderWords(k + 1); + BigInteger r2 = q3.Multiply(m); // TODO Only need partial multiplication here + BigInteger r3 = r2.RemainderWords(k + 1); + + x = r1.Subtract(r3); + if (x.sign < 0) + { + x = x.Add(mr); + } + } + + while (x.CompareTo(m) >= 0) + { + x = x.Subtract(m); + } + + return x; + } + + private static BigInteger ModPowMonty(BigInteger b, BigInteger e, BigInteger m, bool convert) + { + int n = m.magnitude.Length; + int powR = 32 * n; + bool smallMontyModulus = m.BitLength + 2 <= powR; + uint mDash = (uint)m.GetMQuote(); + + // tmp = this * R mod m + if (convert) + { + b = b.ShiftLeft(powR).Remainder(m); + } + + int[] yAccum = new int[n + 1]; + + int[] zVal = b.magnitude; + Debug.Assert(zVal.Length <= n); + if (zVal.Length < n) + { + int[] tmp = new int[n]; + zVal.CopyTo(tmp, n - zVal.Length); + zVal = tmp; + } + + // Sliding window from MSW to LSW + + int extraBits = 0; + + // Filter the common case of small RSA exponents with few bits set + if (e.magnitude.Length > 1 || e.BitCount > 2) + { + int expLength = e.BitLength; + while (expLength > ExpWindowThresholds[extraBits]) + { + ++extraBits; + } + } + + int numPowers = 1 << extraBits; + int[][] oddPowers = new int[numPowers][]; + oddPowers[0] = zVal; + + int[] zSquared = Arrays.Clone(zVal); + SquareMonty(yAccum, zSquared, m.magnitude, mDash, smallMontyModulus); + + for (int i = 1; i < numPowers; ++i) + { + oddPowers[i] = Arrays.Clone(oddPowers[i - 1]); + MultiplyMonty(yAccum, oddPowers[i], zSquared, m.magnitude, mDash, smallMontyModulus); + } + + int[] windowList = GetWindowList(e.magnitude, extraBits); + Debug.Assert(windowList.Length > 1); + + int window = windowList[0]; + int mult = window & 0xFF, lastZeroes = window >> 8; + + int[] yVal; + if (mult == 1) + { + yVal = zSquared; + --lastZeroes; + } + else + { + yVal = Arrays.Clone(oddPowers[mult >> 1]); + } + + int windowPos = 1; + while ((window = windowList[windowPos++]) != -1) + { + mult = window & 0xFF; + + int bits = lastZeroes + BitLen((byte)mult); + for (int j = 0; j < bits; ++j) + { + SquareMonty(yAccum, yVal, m.magnitude, mDash, smallMontyModulus); + } + + MultiplyMonty(yAccum, yVal, oddPowers[mult >> 1], m.magnitude, mDash, smallMontyModulus); + + lastZeroes = window >> 8; + } + + for (int i = 0; i < lastZeroes; ++i) + { + SquareMonty(yAccum, yVal, m.magnitude, mDash, smallMontyModulus); + } + + if (convert) + { + // Return y * R^(-1) mod m + MontgomeryReduce(yVal, m.magnitude, mDash); + } + else if (smallMontyModulus && CompareTo(0, yVal, 0, m.magnitude) >= 0) + { + Subtract(0, yVal, 0, m.magnitude); + } + + return new BigInteger(1, yVal, true); + } + + private static int[] GetWindowList(int[] mag, int extraBits) + { + int v = mag[0]; + Debug.Assert(v != 0); + + int leadingBits = BitLen(v); + + int resultSize = (((mag.Length - 1) << 5) + leadingBits) / (1 + extraBits) + 2; + int[] result = new int[resultSize]; + int resultPos = 0; + + int bitPos = 33 - leadingBits; + v <<= bitPos; + + int mult = 1, multLimit = 1 << extraBits; + int zeroes = 0; + + int i = 0; + for (; ; ) + { + for (; bitPos < 32; ++bitPos) + { + if (mult < multLimit) + { + mult = (mult << 1) | (int)((uint)v >> 31); + } + else if (v < 0) + { + result[resultPos++] = CreateWindowEntry(mult, zeroes); + mult = 1; + zeroes = 0; + } + else + { + ++zeroes; + } + + v <<= 1; + } + + if (++i == mag.Length) + { + result[resultPos++] = CreateWindowEntry(mult, zeroes); + break; + } + + v = mag[i]; + bitPos = 0; + } + + result[resultPos] = -1; + return result; + } + + private static int CreateWindowEntry(int mult, int zeroes) + { + Debug.Assert(mult > 0); + +#if NETCOREAPP3_0_OR_GREATER + int tz = BitOperations.TrailingZeroCount(mult); + mult >>= tz; + zeroes += tz; +#else + while ((mult & 1) == 0) + { + mult >>= 1; + ++zeroes; + } +#endif + + return mult | (zeroes << 8); + } + + /** + * return w with w = x * x - w is assumed to have enough space. + */ + private static int[] Square( + int[] w, + int[] x) + { + // Note: this method allows w to be only (2 * x.Length - 1) words if result will fit +// if (w.Length != 2 * x.Length) +// throw new ArgumentException("no I don't think so..."); + + ulong c; + + int wBase = w.Length - 1; + + for (int i = x.Length - 1; i > 0; --i) + { + ulong v = (uint)x[i]; + + c = v * v + (uint)w[wBase]; + w[wBase] = (int)c; + c >>= 32; + + for (int j = i - 1; j >= 0; --j) + { + ulong prod = v * (uint)x[j]; + + c += ((uint)w[--wBase] & UIMASK) + ((uint)prod << 1); + w[wBase] = (int)c; + c = (c >> 32) + (prod >> 31); + } + + c += (uint)w[--wBase]; + w[wBase] = (int)c; + + if (--wBase >= 0) + { + w[wBase] = (int)(c >> 32); + } + else + { + Debug.Assert((c >> 32) == 0); + } + + wBase += i; + } + + c = (uint)x[0]; + + c = c * c + (uint)w[wBase]; + w[wBase] = (int)c; + + if (--wBase >= 0) + { + w[wBase] += (int)(c >> 32); + } + else + { + Debug.Assert((c >> 32) == 0); + } + + return w; + } + + /** + * return x with x = y * z - x is assumed to have enough space. + */ + private static int[] Multiply(int[] x, int[] y, int[] z) + { + int i = z.Length; + + if (i < 1) + return x; + + int xBase = x.Length - y.Length; + + do + { + long a = z[--i] & IMASK; + long val = 0; + + if (a != 0) + { + for (int j = y.Length - 1; j >= 0; j--) + { + val += a * (y[j] & IMASK) + (x[xBase + j] & IMASK); + + x[xBase + j] = (int)val; + + val = (long)((ulong)val >> 32); + } + } + + --xBase; + + if (xBase >= 0) + { + x[xBase] = (int)val; + } + else + { + Debug.Assert(val == 0); + } + } + while (i > 0); + + return x; + } + + /** + * Calculate mQuote = -m^(-1) mod b with b = 2^32 (32 = word size) + */ + private int GetMQuote() + { + Debug.Assert(this.sign > 0); + + int d = -magnitude[magnitude.Length - 1]; + + Debug.Assert((d & 1) != 0); + + return (int)Raw.Mod.Inverse32((uint)d); + } + + private static void MontgomeryReduce(int[] x, int[] m, uint mDash) // mDash = -m^(-1) mod b + { + // NOTE: Not a general purpose reduction (which would allow x up to twice the bitlength of m) + Debug.Assert(x.Length == m.Length); + + int n = m.Length; + + for (int i = n - 1; i >= 0; --i) + { + uint x0 = (uint)x[n - 1]; + ulong t = x0 * mDash; + + ulong carry = t * (uint)m[n - 1] + x0; + Debug.Assert((uint)carry == 0); + carry >>= 32; + + for (int j = n - 2; j >= 0; --j) + { + carry += t * (uint)m[j] + (uint)x[j]; + x[j + 1] = (int)carry; + carry >>= 32; + } + + x[0] = (int)carry; + Debug.Assert(carry >> 32 == 0); + } + + if (CompareTo(0, x, 0, m) >= 0) + { + Subtract(0, x, 0, m); + } + } + + /** + * Montgomery multiplication: a = x * y * R^(-1) mod m + *
+ * Based algorithm 14.36 of Handbook of Applied Cryptography. + *
+ *
  • m, x, y should have length n
  • + *
  • a should have length (n + 1)
  • + *
  • b = 2^32, R = b^n
  • + *
    + * The result is put in x + *
    + * NOTE: the indices of x, y, m, a different in HAC and in Java + */ + private static void MultiplyMonty(int[] a, int[] x, int[] y, int[] m, uint mDash, bool smallMontyModulus) + // mDash = -m^(-1) mod b + { + int n = m.Length; + + if (n == 1) + { + x[0] = (int)MultiplyMontyNIsOne((uint)x[0], (uint)y[0], (uint)m[0], mDash); + return; + } + + uint y0 = (uint)y[n - 1]; + int aMax; + + { + ulong xi = (uint)x[n - 1]; + + ulong carry = xi * y0; + ulong t = (uint)carry * mDash; + + ulong prod2 = t * (uint)m[n - 1]; + carry += (uint)prod2; + Debug.Assert((uint)carry == 0); + carry = (carry >> 32) + (prod2 >> 32); + + for (int j = n - 2; j >= 0; --j) + { + ulong prod1 = xi * (uint)y[j]; + prod2 = t * (uint)m[j]; + + carry += (prod1 & UIMASK) + (uint)prod2; + a[j + 2] = (int)carry; + carry = (carry >> 32) + (prod1 >> 32) + (prod2 >> 32); + } + + a[1] = (int)carry; + aMax = (int)(carry >> 32); + } + + for (int i = n - 2; i >= 0; --i) + { + uint a0 = (uint)a[n]; + ulong xi = (uint)x[i]; + + ulong prod1 = xi * y0; + ulong carry = (prod1 & UIMASK) + a0; + ulong t = (uint)carry * mDash; + + ulong prod2 = t * (uint)m[n - 1]; + carry += (uint)prod2; + Debug.Assert((uint)carry == 0); + carry = (carry >> 32) + (prod1 >> 32) + (prod2 >> 32); + + for (int j = n - 2; j >= 0; --j) + { + prod1 = xi * (uint)y[j]; + prod2 = t * (uint)m[j]; + + carry += (prod1 & UIMASK) + (uint)prod2 + (uint)a[j + 1]; + a[j + 2] = (int)carry; + carry = (carry >> 32) + (prod1 >> 32) + (prod2 >> 32); + } + + carry += (uint)aMax; + a[1] = (int)carry; + aMax = (int)(carry >> 32); + } + + a[0] = aMax; + + if (!smallMontyModulus && CompareTo(0, a, 0, m) >= 0) + { + Subtract(0, a, 0, m); + } + + Array.Copy(a, 1, x, 0, n); + } + + private static void SquareMonty(int[] a, int[] x, int[] m, uint mDash, bool smallMontyModulus) + // mDash = -m^(-1) mod b + { + int n = m.Length; + + if (n == 1) + { + uint xVal = (uint)x[0]; + x[0] = (int)MultiplyMontyNIsOne(xVal, xVal, (uint)m[0], mDash); + return; + } + + ulong x0 = (uint)x[n - 1]; + int aMax; + + { + ulong carry = x0 * x0; + ulong t = (uint)carry * mDash; + + ulong prod2 = t * (uint)m[n - 1]; + carry += (uint)prod2; + Debug.Assert((uint)carry == 0); + carry = (carry >> 32) + (prod2 >> 32); + + for (int j = n - 2; j >= 0; --j) + { + ulong prod1 = x0 * (uint)x[j]; + prod2 = t * (uint)m[j]; + + carry += (prod2 & UIMASK) + ((uint)prod1 << 1); + a[j + 2] = (int)carry; + carry = (carry >> 32) + (prod1 >> 31) + (prod2 >> 32); + } + + a[1] = (int)carry; + aMax = (int)(carry >> 32); + } + + for (int i = n - 2; i >= 0; --i) + { + uint a0 = (uint)a[n]; + ulong t = a0 * mDash; + + ulong carry = t * (uint)m[n - 1] + a0; + Debug.Assert((uint)carry == 0); + carry >>= 32; + + for (int j = n - 2; j > i; --j) + { + carry += t * (uint)m[j] + (uint)a[j + 1]; + a[j + 2] = (int)carry; + carry >>= 32; + } + + ulong xi = (uint)x[i]; + + { + ulong prod1 = xi * xi; + ulong prod2 = t * (uint)m[i]; + + carry += (prod1 & UIMASK) + (uint)prod2 + (uint)a[i + 1]; + a[i + 2] = (int)carry; + carry = (carry >> 32) + (prod1 >> 32) + (prod2 >> 32); + } + + for (int j = i - 1; j >= 0; --j) + { + ulong prod1 = xi * (uint)x[j]; + ulong prod2 = t * (uint)m[j]; + + carry += (prod2 & UIMASK) + ((uint)prod1 << 1) + (uint)a[j + 1]; + a[j + 2] = (int)carry; + carry = (carry >> 32) + (prod1 >> 31) + (prod2 >> 32); + } + + carry += (uint)aMax; + a[1] = (int)carry; + aMax = (int)(carry >> 32); + } + + a[0] = aMax; + + if (!smallMontyModulus && CompareTo(0, a, 0, m) >= 0) + { + Subtract(0, a, 0, m); + } + + Array.Copy(a, 1, x, 0, n); + } + + private static uint MultiplyMontyNIsOne(uint x, uint y, uint m, uint mDash) + { + ulong carry = (ulong)x * y; + uint t = (uint)carry * mDash; + ulong um = m; + ulong prod2 = um * t; + carry += (uint)prod2; + Debug.Assert((uint)carry == 0); + carry = (carry >> 32) + (prod2 >> 32); + if (carry > um) + { + carry -= um; + } + Debug.Assert(carry < um); + return (uint)carry; + } + + public BigInteger Multiply( + BigInteger val) + { + if (val == this) + return Square(); + + if ((sign & val.sign) == 0) + return Zero; + + if (val.QuickPow2Check()) // val is power of two + { + BigInteger result = this.ShiftLeft(val.Abs().BitLength - 1); + return val.sign > 0 ? result : result.Negate(); + } + + if (this.QuickPow2Check()) // this is power of two + { + BigInteger result = val.ShiftLeft(this.Abs().BitLength - 1); + return this.sign > 0 ? result : result.Negate(); + } + + int resLength = magnitude.Length + val.magnitude.Length; + int[] res = new int[resLength]; + + Multiply(res, this.magnitude, val.magnitude); + + int resSign = sign ^ val.sign ^ 1; + return new BigInteger(resSign, res, true); + } + + public BigInteger Square() + { + if (sign == 0) + return Zero; + if (this.QuickPow2Check()) + return ShiftLeft(Abs().BitLength - 1); + int resLength = magnitude.Length << 1; + if ((uint)magnitude[0] >> 16 == 0) + --resLength; + int[] res = new int[resLength]; + Square(res, magnitude); + return new BigInteger(1, res, false); + } + + public BigInteger Negate() + { + if (sign == 0) + return this; + + return new BigInteger(-sign, magnitude, false); + } + + public BigInteger NextProbablePrime() + { + if (sign < 0) + throw new ArithmeticException("Cannot be called on value < 0"); + + if (CompareTo(Two) < 0) + return Two; + + BigInteger n = Inc().SetBit(0); + + while (!n.CheckProbablePrime(100, SecureRandom.ArbitraryRandom, false)) + { + n = n.Add(Two); + } + + return n; + } + + public BigInteger Not() + { + return Inc().Negate(); + } + + public BigInteger Pow(int exp) + { + if (exp <= 0) + { + if (exp < 0) + throw new ArithmeticException("Negative exponent"); + + return One; + } + + if (sign == 0) + { + return this; + } + + if (QuickPow2Check()) + { + long powOf2 = (long)exp * (BitLength - 1); + if (powOf2 > int.MaxValue) + { + throw new ArithmeticException("Result too large"); + } + return One.ShiftLeft((int)powOf2); + } + + BigInteger y = One; + BigInteger z = this; + + for (;;) + { + if ((exp & 0x1) == 1) + { + y = y.Multiply(z); + } + exp >>= 1; + if (exp == 0) break; + z = z.Multiply(z); + } + + return y; + } + + public static BigInteger ProbablePrime( + int bitLength, + Random random) + { + return new BigInteger(bitLength, 100, random); + } + + private int Remainder( + int m) + { + Debug.Assert(m > 0); + + long acc = 0; + for (int pos = 0; pos < magnitude.Length; ++pos) + { + long posVal = (uint) magnitude[pos]; + acc = (acc << 32 | posVal) % m; + } + + return (int) acc; + } + + /** + * return x = x % y - done in place (y value preserved) + */ + private static int[] Remainder( + int[] x, + int[] y) + { + int xStart = 0; + while (xStart < x.Length && x[xStart] == 0) + { + ++xStart; + } + + int yStart = 0; + while (yStart < y.Length && y[yStart] == 0) + { + ++yStart; + } + + Debug.Assert(yStart < y.Length); + + int xyCmp = CompareNoLeadingZeroes(xStart, x, yStart, y); + + if (xyCmp > 0) + { + int yBitLength = CalcBitLength(1, yStart, y); + int xBitLength = CalcBitLength(1, xStart, x); + int shift = xBitLength - yBitLength; + + int[] c; + int cStart = 0; + int cBitLength = yBitLength; + if (shift > 0) + { + c = ShiftLeft(y, shift); + cBitLength += shift; + Debug.Assert(c[0] != 0); + } + else + { + int len = y.Length - yStart; + c = new int[len]; + Array.Copy(y, yStart, c, 0, len); + } + + for (;;) + { + if (cBitLength < xBitLength + || CompareNoLeadingZeroes(xStart, x, cStart, c) >= 0) + { + Subtract(xStart, x, cStart, c); + + while (x[xStart] == 0) + { + if (++xStart == x.Length) + return x; + } + + //xBitLength = CalcBitLength(xStart, x); + xBitLength = 32 * (x.Length - xStart - 1) + BitLen(x[xStart]); + + if (xBitLength <= yBitLength) + { + if (xBitLength < yBitLength) + return x; + + xyCmp = CompareNoLeadingZeroes(xStart, x, yStart, y); + + if (xyCmp <= 0) + break; + } + } + + shift = cBitLength - xBitLength; + + // NB: The case where c[cStart] is 1-bit is harmless + if (shift == 1) + { + uint firstC = (uint) c[cStart] >> 1; + uint firstX = (uint) x[xStart]; + if (firstC > firstX) + ++shift; + } + + if (shift < 2) + { + ShiftRightOneInPlace(cStart, c); + --cBitLength; + } + else + { + ShiftRightInPlace(cStart, c, shift); + cBitLength -= shift; + } + + //cStart = c.Length - ((cBitLength + 31) / 32); + while (c[cStart] == 0) + { + ++cStart; + } + } + } + + if (xyCmp == 0) + { + Array.Clear(x, xStart, x.Length - xStart); + } + + return x; + } + + public BigInteger Remainder( + BigInteger n) + { + if (n.sign == 0) + throw new ArithmeticException("Division by zero error"); + + if (this.sign == 0) + return Zero; + + // For small values, use fast remainder method + if (n.magnitude.Length == 1) + { + int val = n.magnitude[0]; + + if (val > 0) + { + if (val == 1) + return Zero; + + // TODO Make this func work on uint, and handle val == 1? + int rem = Remainder(val); + + return rem == 0 + ? Zero + : new BigInteger(sign, new int[]{ rem }, false); + } + } + + if (CompareNoLeadingZeroes(0, magnitude, 0, n.magnitude) < 0) + return this; + + int[] result; + if (n.QuickPow2Check()) // n is power of two + { + // TODO Move before small values branch above? + result = LastNBits(n.Abs().BitLength - 1); + } + else + { + result = (int[]) this.magnitude.Clone(); + result = Remainder(result, n.magnitude); + } + + return new BigInteger(sign, result, true); + } + + private int[] LastNBits( + int n) + { + if (n < 1) + return ZeroMagnitude; + + int numWords = (n + BitsPerInt - 1) / BitsPerInt; + numWords = System.Math.Min(numWords, this.magnitude.Length); + int[] result = new int[numWords]; + + Array.Copy(this.magnitude, this.magnitude.Length - numWords, result, 0, numWords); + + int excessBits = (numWords << 5) - n; + if (excessBits > 0) + { + result[0] &= (int)(uint.MaxValue >> excessBits); + } + + return result; + } + + private BigInteger DivideWords(int w) + { + Debug.Assert(w >= 0); + int n = magnitude.Length; + if (w >= n) + return Zero; + int[] mag = new int[n - w]; + Array.Copy(magnitude, 0, mag, 0, n - w); + return new BigInteger(sign, mag, false); + } + + private BigInteger RemainderWords(int w) + { + Debug.Assert(w >= 0); + int n = magnitude.Length; + if (w >= n) + return this; + int[] mag = new int[w]; + Array.Copy(magnitude, n - w, mag, 0, w); + return new BigInteger(sign, mag, false); + } + + /** + * do a left shift - this returns a new array. + */ + private static int[] ShiftLeft( + int[] mag, + int n) + { + int nInts = (int)((uint)n >> 5); + int nBits = n & 0x1f; + int magLen = mag.Length; + int[] newMag; + + if (nBits == 0) + { + newMag = new int[magLen + nInts]; + mag.CopyTo(newMag, 0); + } + else + { + int i = 0; + int nBits2 = 32 - nBits; + int highBits = (int)((uint)mag[0] >> nBits2); + + if (highBits != 0) + { + newMag = new int[magLen + nInts + 1]; + newMag[i++] = highBits; + } + else + { + newMag = new int[magLen + nInts]; + } + + int m = mag[0]; + for (int j = 0; j < magLen - 1; j++) + { + int next = mag[j + 1]; + + newMag[i++] = (m << nBits) | (int)((uint)next >> nBits2); + m = next; + } + + newMag[i] = mag[magLen - 1] << nBits; + } + + return newMag; + } + + private static int ShiftLeftOneInPlace(int[] x, int carry) + { + Debug.Assert(carry == 0 || carry == 1); + int pos = x.Length; + while (--pos >= 0) + { + uint val = (uint)x[pos]; + x[pos] = (int)(val << 1) | carry; + carry = (int)(val >> 31); + } + return carry; + } + + public BigInteger ShiftLeft( + int n) + { + if (sign == 0 || magnitude.Length == 0) + return Zero; + + if (n == 0) + return this; + + if (n < 0) + return ShiftRight(-n); + + BigInteger result = new BigInteger(sign, ShiftLeft(magnitude, n), true); + + if (this.nBits != -1) + { + result.nBits = sign > 0 + ? this.nBits + : this.nBits + n; + } + + if (this.nBitLength != -1) + { + result.nBitLength = this.nBitLength + n; + } + + return result; + } + + /** + * do a right shift - this does it in place. + */ + private static void ShiftRightInPlace( + int start, + int[] mag, + int n) + { + int nInts = (int)((uint)n >> 5) + start; + int nBits = n & 0x1f; + int magEnd = mag.Length - 1; + + if (nInts != start) + { + int delta = (nInts - start); + + for (int i = magEnd; i >= nInts; i--) + { + mag[i] = mag[i - delta]; + } + for (int i = nInts - 1; i >= start; i--) + { + mag[i] = 0; + } + } + + if (nBits != 0) + { + int nBits2 = 32 - nBits; + int m = mag[magEnd]; + + for (int i = magEnd; i > nInts; --i) + { + int next = mag[i - 1]; + + mag[i] = (int)((uint)m >> nBits) | (next << nBits2); + m = next; + } + + mag[nInts] = (int)((uint)mag[nInts] >> nBits); + } + } + + /** + * do a right shift by one - this does it in place. + */ + private static void ShiftRightOneInPlace( + int start, + int[] mag) + { + int i = mag.Length; + int m = mag[i - 1]; + + while (--i > start) + { + int next = mag[i - 1]; + mag[i] = ((int)((uint)m >> 1)) | (next << 31); + m = next; + } + + mag[start] = (int)((uint)mag[start] >> 1); + } + + public BigInteger ShiftRight( + int n) + { + if (n == 0) + return this; + + if (n < 0) + return ShiftLeft(-n); + + if (n >= BitLength) + return (this.sign < 0 ? One.Negate() : Zero); + +// int[] res = (int[]) this.magnitude.Clone(); +// +// ShiftRightInPlace(0, res, n); +// +// return new BigInteger(this.sign, res, true); + + int resultLength = (BitLength - n + 31) >> 5; + int[] res = new int[resultLength]; + + int numInts = n >> 5; + int numBits = n & 31; + + if (numBits == 0) + { + Array.Copy(this.magnitude, 0, res, 0, res.Length); + } + else + { + int numBits2 = 32 - numBits; + + int magPos = this.magnitude.Length - 1 - numInts; + for (int i = resultLength - 1; i >= 0; --i) + { + res[i] = (int)((uint) this.magnitude[magPos--] >> numBits); + + if (magPos >= 0) + { + res[i] |= this.magnitude[magPos] << numBits2; + } + } + } + + Debug.Assert(res[0] != 0); + + return new BigInteger(this.sign, res, false); + } + + public int SignValue + { + get { return sign; } + } + + /** + * returns x = x - y - we assume x is >= y + */ + private static int[] Subtract( + int xStart, + int[] x, + int yStart, + int[] y) + { + Debug.Assert(yStart < y.Length); + Debug.Assert(x.Length - xStart >= y.Length - yStart); + + int iT = x.Length; + int iV = y.Length; + long m; + int borrow = 0; + + do + { + m = (x[--iT] & IMASK) - (y[--iV] & IMASK) + borrow; + x[iT] = (int) m; + +// borrow = (m < 0) ? -1 : 0; + borrow = (int)(m >> 63); + } + while (iV > yStart); + + if (borrow != 0) + { + while (--x[--iT] == -1) + { + } + } + + return x; + } + + public BigInteger Subtract( + BigInteger n) + { + if (n.sign == 0) + return this; + + if (this.sign == 0) + return n.Negate(); + + if (this.sign != n.sign) + return Add(n.Negate()); + + int compare = CompareNoLeadingZeroes(0, magnitude, 0, n.magnitude); + if (compare == 0) + return Zero; + + BigInteger bigun, lilun; + if (compare < 0) + { + bigun = n; + lilun = this; + } + else + { + bigun = this; + lilun = n; + } + + return new BigInteger(this.sign * compare, doSubBigLil(bigun.magnitude, lilun.magnitude), true); + } + + private static int[] doSubBigLil( + int[] bigMag, + int[] lilMag) + { + int[] res = (int[]) bigMag.Clone(); + + return Subtract(0, res, 0, lilMag); + } + + public int GetLengthofByteArray() + { + return GetByteLength(BitLength + 1); + } + + public int GetLengthofByteArrayUnsigned() + { + return GetByteLength(sign < 0 ? BitLength + 1 : BitLength); + } + + public byte[] ToByteArray() + { + return ToByteArray(false); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void ToByteArray(Span output) + { + ToByteArray(false, output); + } +#endif + + public byte[] ToByteArrayUnsigned() + { + return ToByteArray(true); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void ToByteArrayUnsigned(Span output) + { + ToByteArray(true, output); + } +#endif + + private byte[] ToByteArray(bool unsigned) + { + if (sign == 0) + return unsigned ? ZeroEncoding : new byte[1]; + + int nBits = (unsigned && sign > 0) + ? BitLength + : BitLength + 1; + + int nBytes = GetByteLength(nBits); + byte[] bytes = new byte[nBytes]; + + int magIndex = magnitude.Length; + int bytesIndex = bytes.Length; + + if (sign > 0) + { + while (magIndex > 1) + { + uint mag = (uint) magnitude[--magIndex]; + bytesIndex -= 4; + Pack.UInt32_To_BE(mag, bytes, bytesIndex); + } + + uint lastMag = (uint) magnitude[0]; + while (lastMag > byte.MaxValue) + { + bytes[--bytesIndex] = (byte) lastMag; + lastMag >>= 8; + } + + bytes[--bytesIndex] = (byte) lastMag; + } + else // sign < 0 + { + bool carry = true; + + while (magIndex > 1) + { + uint mag = ~((uint) magnitude[--magIndex]); + + if (carry) + { + carry = (++mag == uint.MinValue); + } + + bytesIndex -= 4; + Pack.UInt32_To_BE(mag, bytes, bytesIndex); + } + + uint lastMag = (uint) magnitude[0]; + + if (carry) + { + // Never wraps because magnitude[0] != 0 + --lastMag; + } + + while (lastMag > byte.MaxValue) + { + bytes[--bytesIndex] = (byte) ~lastMag; + lastMag >>= 8; + } + + bytes[--bytesIndex] = (byte) ~lastMag; + + if (bytesIndex > 0) + { + bytes[--bytesIndex] = byte.MaxValue; + } + } + + return bytes; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void ToByteArray(bool unsigned, Span output) + { + if (sign == 0) + { + if (!unsigned) + { + output[0] = 0; + } + return; + } + + int nBits = (unsigned && sign > 0) ? BitLength : BitLength + 1; + + int nBytes = GetByteLength(nBits); + if (nBytes > output.Length) + throw new ArgumentException("insufficient space", nameof(output)); + + int magIndex = magnitude.Length; + int bytesIndex = nBytes; + + if (sign > 0) + { + while (magIndex > 1) + { + uint mag = (uint) magnitude[--magIndex]; + bytesIndex -= 4; + Pack.UInt32_To_BE(mag, output[bytesIndex..]); + } + + uint lastMag = (uint)magnitude[0]; + while (lastMag > byte.MaxValue) + { + output[--bytesIndex] = (byte)lastMag; + lastMag >>= 8; + } + + output[--bytesIndex] = (byte)lastMag; + } + else // sign < 0 + { + bool carry = true; + + while (magIndex > 1) + { + uint mag = ~((uint)magnitude[--magIndex]); + + if (carry) + { + carry = (++mag == uint.MinValue); + } + + bytesIndex -= 4; + Pack.UInt32_To_BE(mag, output[bytesIndex..]); + } + + uint lastMag = (uint)magnitude[0]; + + if (carry) + { + // Never wraps because magnitude[0] != 0 + --lastMag; + } + + while (lastMag > byte.MaxValue) + { + output[--bytesIndex] = (byte)~lastMag; + lastMag >>= 8; + } + + output[--bytesIndex] = (byte)~lastMag; + + if (bytesIndex > 0) + { + output[--bytesIndex] = byte.MaxValue; + } + } + } +#endif + + public override string ToString() + { + return ToString(10); + } + + public string ToString(int radix) + { + // TODO Make this method work for other radices (ideally 2 <= radix <= 36 as in Java) + + switch (radix) + { + case 2: + case 8: + case 10: + case 16: + break; + default: + throw new FormatException("Only bases 2, 8, 10, 16 are allowed"); + } + + // NB: Can only happen to internally managed instances + if (magnitude == null) + return "null"; + + if (sign == 0) + return "0"; + + + // NOTE: This *should* be unnecessary, since the magnitude *should* never have leading zero digits + int firstNonZero = 0; + while (firstNonZero < magnitude.Length) + { + if (magnitude[firstNonZero] != 0) + { + break; + } + ++firstNonZero; + } + + if (firstNonZero == magnitude.Length) + { + return "0"; + } + + + StringBuilder sb = new StringBuilder(); + if (sign == -1) + { + sb.Append('-'); + } + + switch (radix) + { + case 2: + { + int pos = firstNonZero; + sb.Append(Convert.ToString(magnitude[pos], 2)); + while (++pos < magnitude.Length) + { + AppendZeroExtendedString(sb, Convert.ToString(magnitude[pos], 2), 32); + } + break; + } + case 8: + { + int mask = (1 << 30) - 1; + BigInteger u = this.Abs(); + int bits = u.BitLength; + var S = new List(); + while (bits > 30) + { + S.Add(Convert.ToString(u.IntValue & mask, 8)); + u = u.ShiftRight(30); + bits -= 30; + } + sb.Append(Convert.ToString(u.IntValue, 8)); + for (int i = S.Count - 1; i >= 0; --i) + { + AppendZeroExtendedString(sb, S[i], 10); + } + break; + } + case 16: + { + int pos = firstNonZero; + sb.Append(Convert.ToString(magnitude[pos], 16)); + while (++pos < magnitude.Length) + { + AppendZeroExtendedString(sb, Convert.ToString(magnitude[pos], 16), 8); + } + break; + } + // TODO This could work for other radices if there is an alternative to Convert.ToString method + //default: + case 10: + { + BigInteger q = this.Abs(); + if (q.BitLength < 64) + { + sb.Append(Convert.ToString(q.LongValue, radix)); + break; + } + + // TODO Could cache the moduli for each radix (soft reference?) + var moduli = new List(); + BigInteger R = ValueOf(radix); + while (R.CompareTo(q) <= 0) + { + moduli.Add(R); + R = R.Square(); + } + + int scale = moduli.Count; + sb.EnsureCapacity(sb.Length + (1 << scale)); + + ToString(sb, radix, moduli, scale, q); + + break; + } + } + + return sb.ToString(); + } + + private static void ToString(StringBuilder sb, int radix, IList moduli, int scale, BigInteger pos) + { + if (pos.BitLength < 64) + { + string s = Convert.ToString(pos.LongValue, radix); + if (sb.Length > 1 || (sb.Length == 1 && sb[0] != '-')) + { + AppendZeroExtendedString(sb, s, 1 << scale); + } + else if (pos.SignValue != 0) + { + sb.Append(s); + } + return; + } + + BigInteger[] qr = pos.DivideAndRemainder(moduli[--scale]); + + ToString(sb, radix, moduli, scale, qr[0]); + ToString(sb, radix, moduli, scale, qr[1]); + } + + private static void AppendZeroExtendedString(StringBuilder sb, string s, int minLength) + { + for (int len = s.Length; len < minLength; ++len) + { + sb.Append('0'); + } + sb.Append(s); + } + + private static BigInteger CreateUValueOf( + ulong value) + { + int msw = (int)(value >> 32); + int lsw = (int)value; + + if (msw != 0) + return new BigInteger(1, new int[] { msw, lsw }, false); + + if (lsw != 0) + { + BigInteger n = new BigInteger(1, new int[] { lsw }, false); + // Check for a power of two + if ((lsw & -lsw) == lsw) + { + n.nBits = 1; + } + return n; + } + + return Zero; + } + + private static BigInteger CreateValueOf( + long value) + { + if (value < 0) + { + if (value == long.MinValue) + return CreateValueOf(~value).Not(); + + return CreateValueOf(-value).Negate(); + } + + return CreateUValueOf((ulong)value); + } + + public static BigInteger ValueOf( + long value) + { + if (value >= 0 && value < SMALL_CONSTANTS.Length) + { + return SMALL_CONSTANTS[value]; + } + + return CreateValueOf(value); + } + + public int GetLowestSetBit() + { + if (this.sign == 0) + return -1; + + return GetLowestSetBitMaskFirst(-1); + } + + private int GetLowestSetBitMaskFirst(int firstWordMask) + { + int w = magnitude.Length, offset = 0; + + uint word = (uint)(magnitude[--w] & firstWordMask); + Debug.Assert(magnitude[0] != 0); + + while (word == 0) + { + word = (uint)magnitude[--w]; + offset += 32; + } + +#if NETCOREAPP3_0_OR_GREATER + offset += BitOperations.TrailingZeroCount(word); +#else + while ((word & 0xFF) == 0) + { + word >>= 8; + offset += 8; + } + + while ((word & 1) == 0) + { + word >>= 1; + ++offset; + } + +#endif + return offset; + } + + public bool TestBit( + int n) + { + if (n < 0) + throw new ArithmeticException("Bit position must not be negative"); + + if (sign < 0) + return !Not().TestBit(n); + + int wordNum = n / 32; + if (wordNum >= magnitude.Length) + return false; + + int word = magnitude[magnitude.Length - 1 - wordNum]; + return ((word >> (n % 32)) & 1) > 0; + } + + public BigInteger Or( + BigInteger value) + { + if (this.sign == 0) + return value; + + if (value.sign == 0) + return this; + + int[] aMag = this.sign > 0 + ? this.magnitude + : Add(One).magnitude; + + int[] bMag = value.sign > 0 + ? value.magnitude + : value.Add(One).magnitude; + + bool resultNeg = sign < 0 || value.sign < 0; + int resultLength = System.Math.Max(aMag.Length, bMag.Length); + int[] resultMag = new int[resultLength]; + + int aStart = resultMag.Length - aMag.Length; + int bStart = resultMag.Length - bMag.Length; + + for (int i = 0; i < resultMag.Length; ++i) + { + int aWord = i >= aStart ? aMag[i - aStart] : 0; + int bWord = i >= bStart ? bMag[i - bStart] : 0; + + if (this.sign < 0) + { + aWord = ~aWord; + } + + if (value.sign < 0) + { + bWord = ~bWord; + } + + resultMag[i] = aWord | bWord; + + if (resultNeg) + { + resultMag[i] = ~resultMag[i]; + } + } + + BigInteger result = new BigInteger(1, resultMag, true); + + // TODO Optimise this case + if (resultNeg) + { + result = result.Not(); + } + + return result; + } + + public BigInteger Xor( + BigInteger value) + { + if (this.sign == 0) + return value; + + if (value.sign == 0) + return this; + + int[] aMag = this.sign > 0 + ? this.magnitude + : Add(One).magnitude; + + int[] bMag = value.sign > 0 + ? value.magnitude + : value.Add(One).magnitude; + + // TODO Can just replace with sign != value.sign? + bool resultNeg = (sign < 0 && value.sign >= 0) || (sign >= 0 && value.sign < 0); + int resultLength = System.Math.Max(aMag.Length, bMag.Length); + int[] resultMag = new int[resultLength]; + + int aStart = resultMag.Length - aMag.Length; + int bStart = resultMag.Length - bMag.Length; + + for (int i = 0; i < resultMag.Length; ++i) + { + int aWord = i >= aStart ? aMag[i - aStart] : 0; + int bWord = i >= bStart ? bMag[i - bStart] : 0; + + if (this.sign < 0) + { + aWord = ~aWord; + } + + if (value.sign < 0) + { + bWord = ~bWord; + } + + resultMag[i] = aWord ^ bWord; + + if (resultNeg) + { + resultMag[i] = ~resultMag[i]; + } + } + + BigInteger result = new BigInteger(1, resultMag, true); + + // TODO Optimise this case + if (resultNeg) + { + result = result.Not(); + } + + return result; + } + + public BigInteger SetBit( + int n) + { + if (n < 0) + throw new ArithmeticException("Bit address less than zero"); + + if (TestBit(n)) + return this; + + // TODO Handle negative values and zero + if (sign > 0 && n < (BitLength - 1)) + return FlipExistingBit(n); + + return Or(One.ShiftLeft(n)); + } + + public BigInteger ClearBit( + int n) + { + if (n < 0) + throw new ArithmeticException("Bit address less than zero"); + + if (!TestBit(n)) + return this; + + // TODO Handle negative values + if (sign > 0 && n < (BitLength - 1)) + return FlipExistingBit(n); + + return AndNot(One.ShiftLeft(n)); + } + + public BigInteger FlipBit( + int n) + { + if (n < 0) + throw new ArithmeticException("Bit address less than zero"); + + // TODO Handle negative values and zero + if (sign > 0 && n < (BitLength - 1)) + return FlipExistingBit(n); + + return Xor(One.ShiftLeft(n)); + } + + private BigInteger FlipExistingBit( + int n) + { + Debug.Assert(sign > 0); + Debug.Assert(n >= 0); + Debug.Assert(n < BitLength - 1); + + int[] mag = (int[]) this.magnitude.Clone(); + mag[mag.Length - 1 - (n >> 5)] ^= (1 << (n & 31)); // Flip bit + return new BigInteger(this.sign, mag, false); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/BigInteger.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/BigInteger.cs.meta new file mode 100644 index 000000000..64bea156b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/BigInteger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 192ce040c8f883047926a9f104e89219 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/Primes.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/Primes.cs new file mode 100644 index 000000000..efe9038e9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/Primes.cs @@ -0,0 +1,548 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math +{ + /// Utility methods for generating primes and testing for primality. + public static class Primes + { + public static readonly int SmallFactorLimit = 211; + + private static readonly BigInteger One = BigInteger.One; + private static readonly BigInteger Two = BigInteger.Two; + private static readonly BigInteger Three = BigInteger.Three; + + /// Used to return the output from the + /// + /// Enhanced Miller-Rabin Probabilistic Primality Test + public sealed class MROutput + { + internal static MROutput ProbablyPrime() + { + return new MROutput(false, null); + } + + internal static MROutput ProvablyCompositeWithFactor(BigInteger factor) + { + return new MROutput(true, factor); + } + + internal static MROutput ProvablyCompositeNotPrimePower() + { + return new MROutput(true, null); + } + + private readonly bool m_provablyComposite; + private readonly BigInteger m_factor; + + private MROutput(bool provablyComposite, BigInteger factor) + { + m_provablyComposite = provablyComposite; + m_factor = factor; + } + + public BigInteger Factor => m_factor; + + public bool IsProvablyComposite => m_provablyComposite; + + public bool IsNotPrimePower => m_provablyComposite && m_factor == null; + } + + /// Used to return the output from the + /// Shawe-Taylor Random_Prime Routine + public sealed class STOutput + { + private readonly BigInteger m_prime; + private readonly byte[] m_primeSeed; + private readonly int m_primeGenCounter; + + internal STOutput(BigInteger prime, byte[] primeSeed, int primeGenCounter) + { + m_prime = prime; + m_primeSeed = primeSeed; + m_primeGenCounter = primeGenCounter; + } + + public BigInteger Prime => m_prime; + + public byte[] PrimeSeed => m_primeSeed; + + public int PrimeGenCounter => m_primeGenCounter; + } + + /// FIPS 186-4 C.6 Shawe-Taylor Random_Prime Routine. + /// Construct a provable prime number using a hash function. + /// The instance to use (as "Hash()"). Cannot be null. + /// The length (in bits) of the prime to be generated. Must be at least 2. + /// The seed to be used for the generation of the requested prime. Cannot be null or + /// empty. + /// An instance containing the requested prime. + public static STOutput GenerateSTRandomPrime(IDigest hash, int length, byte[] inputSeed) + { + if (hash == null) + throw new ArgumentNullException(nameof(hash)); + if (length < 2) + throw new ArgumentException("must be >= 2", nameof(length)); + if (inputSeed == null) + throw new ArgumentNullException(nameof(inputSeed)); + if (inputSeed.Length == 0) + throw new ArgumentException("cannot be empty", nameof(inputSeed)); + + return ImplSTRandomPrime(hash, length, Arrays.Clone(inputSeed)); + } + + /// FIPS 186-4 C.3.2 Enhanced Miller-Rabin Probabilistic Primality Test. + /// + /// Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases. This is an alternative to + /// that provides more information about a + /// composite candidate, which may be useful when generating or validating RSA moduli. + /// + /// The instance to test for primality. + /// The source of randomness to use to choose bases. + /// The number of randomly-chosen bases to perform the test for. + /// An instance that can be further queried for details. + public static MROutput EnhancedMRProbablePrimeTest(BigInteger candidate, SecureRandom random, int iterations) + { + CheckCandidate(candidate, nameof(candidate)); + + if (random == null) + throw new ArgumentNullException(nameof(random)); + if (iterations < 1) + throw new ArgumentException("must be > 0", nameof(iterations)); + + if (candidate.BitLength == 2) + return MROutput.ProbablyPrime(); + + if (!candidate.TestBit(0)) + return MROutput.ProvablyCompositeWithFactor(Two); + + BigInteger w = candidate; + BigInteger wSubOne = candidate.Subtract(One); + BigInteger wSubTwo = candidate.Subtract(Two); + + int a = wSubOne.GetLowestSetBit(); + BigInteger m = wSubOne.ShiftRight(a); + + for (int i = 0; i < iterations; ++i) + { + BigInteger b = BigIntegers.CreateRandomInRange(Two, wSubTwo, random); + BigInteger g = b.Gcd(w); + + if (g.CompareTo(One) > 0) + return MROutput.ProvablyCompositeWithFactor(g); + + BigInteger z = b.ModPow(m, w); + + if (z.Equals(One) || z.Equals(wSubOne)) + continue; + + bool primeToBase = false; + + BigInteger x = z; + for (int j = 1; j < a; ++j) + { + z = z.Square().Mod(w); + + if (z.Equals(wSubOne)) + { + primeToBase = true; + break; + } + + if (z.Equals(One)) + break; + + x = z; + } + + if (!primeToBase) + { + if (!z.Equals(One)) + { + x = z; + z = z.Square().Mod(w); + + if (!z.Equals(One)) + { + x = z; + } + } + + g = x.Subtract(One).Gcd(w); + + if (g.CompareTo(One) > 0) + return MROutput.ProvablyCompositeWithFactor(g); + + return MROutput.ProvablyCompositeNotPrimePower(); + } + } + + return MROutput.ProbablyPrime(); + } + + /// A fast check for small divisors, up to some implementation-specific limit. + /// The instance to test for division by small factors. + /// true if the candidate is found to have any small factors, false otherwise. + public static bool HasAnySmallFactors(BigInteger candidate) + { + CheckCandidate(candidate, nameof(candidate)); + + return ImplHasAnySmallFactors(candidate); + } + + /// FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test. + /// Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases. + /// The instance to test for primality. + /// The source of randomness to use to choose bases. + /// The number of randomly-chosen bases to perform the test for. + /// + /// false if any witness to compositeness is found amongst the chosen bases (so + /// is definitely NOT prime), or else true (indicating primality with some + /// probability dependent on the number of iterations that were performed). + /// + public static bool IsMRProbablePrime(BigInteger candidate, SecureRandom random, int iterations) + { + CheckCandidate(candidate, nameof(candidate)); + + if (random == null) + throw new ArgumentException("cannot be null", nameof(random)); + if (iterations < 1) + throw new ArgumentException("must be > 0", nameof(iterations)); + + if (candidate.BitLength == 2) + return true; + if (!candidate.TestBit(0)) + return false; + + BigInteger w = candidate; + BigInteger wSubOne = candidate.Subtract(One); + BigInteger wSubTwo = candidate.Subtract(Two); + + int a = wSubOne.GetLowestSetBit(); + BigInteger m = wSubOne.ShiftRight(a); + + for (int i = 0; i < iterations; ++i) + { + BigInteger b = BigIntegers.CreateRandomInRange(Two, wSubTwo, random); + + if (!ImplMRProbablePrimeToBase(w, wSubOne, m, a, b)) + return false; + } + + return true; + } + + /// FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test (to a fixed base). + /// Run a single iteration of the Miller-Rabin algorithm against the specified base. + /// The instance to test for primality. + /// The base value to use for this iteration. + /// false if is a witness to compositeness (so + /// is definitely NOT prime), or else true. + public static bool IsMRProbablePrimeToBase(BigInteger candidate, BigInteger baseValue) + { + CheckCandidate(candidate, nameof(candidate)); + CheckCandidate(baseValue, nameof(baseValue)); + + if (baseValue.CompareTo(candidate.Subtract(One)) >= 0) + throw new ArgumentException("must be < ('candidate' - 1)", nameof(baseValue)); + + if (candidate.BitLength == 2) + return true; + + BigInteger w = candidate; + BigInteger wSubOne = candidate.Subtract(One); + + int a = wSubOne.GetLowestSetBit(); + BigInteger m = wSubOne.ShiftRight(a); + + return ImplMRProbablePrimeToBase(w, wSubOne, m, a, baseValue); + } + + private static void CheckCandidate(BigInteger n, string name) + { + if (n == null || n.SignValue < 1 || n.BitLength < 2) + throw new ArgumentException("must be non-null and >= 2", name); + } + + private static bool ImplHasAnySmallFactors(BigInteger x) + { + /* + * Bundle trial divisors into ~32-bit moduli then use fast tests on the ~32-bit remainders. + */ + int m = 2 * 3 * 5 * 7 * 11 * 13 * 17 * 19 * 23; + int r = x.Mod(BigInteger.ValueOf(m)).IntValue; + if ((r % 2) == 0 || (r % 3) == 0 || (r % 5) == 0 || (r % 7) == 0 || (r % 11) == 0 || (r % 13) == 0 + || (r % 17) == 0 || (r % 19) == 0 || (r % 23) == 0) + { + return true; + } + + m = 29 * 31 * 37 * 41 * 43; + r = x.Mod(BigInteger.ValueOf(m)).IntValue; + if ((r % 29) == 0 || (r % 31) == 0 || (r % 37) == 0 || (r % 41) == 0 || (r % 43) == 0) + { + return true; + } + + m = 47 * 53 * 59 * 61 * 67; + r = x.Mod(BigInteger.ValueOf(m)).IntValue; + if ((r % 47) == 0 || (r % 53) == 0 || (r % 59) == 0 || (r % 61) == 0 || (r % 67) == 0) + { + return true; + } + + m = 71 * 73 * 79 * 83; + r = x.Mod(BigInteger.ValueOf(m)).IntValue; + if ((r % 71) == 0 || (r % 73) == 0 || (r % 79) == 0 || (r % 83) == 0) + { + return true; + } + + m = 89 * 97 * 101 * 103; + r = x.Mod(BigInteger.ValueOf(m)).IntValue; + if ((r % 89) == 0 || (r % 97) == 0 || (r % 101) == 0 || (r % 103) == 0) + { + return true; + } + + m = 107 * 109 * 113 * 127; + r = x.Mod(BigInteger.ValueOf(m)).IntValue; + if ((r % 107) == 0 || (r % 109) == 0 || (r % 113) == 0 || (r % 127) == 0) + { + return true; + } + + m = 131 * 137 * 139 * 149; + r = x.Mod(BigInteger.ValueOf(m)).IntValue; + if ((r % 131) == 0 || (r % 137) == 0 || (r % 139) == 0 || (r % 149) == 0) + { + return true; + } + + m = 151 * 157 * 163 * 167; + r = x.Mod(BigInteger.ValueOf(m)).IntValue; + if ((r % 151) == 0 || (r % 157) == 0 || (r % 163) == 0 || (r % 167) == 0) + { + return true; + } + + m = 173 * 179 * 181 * 191; + r = x.Mod(BigInteger.ValueOf(m)).IntValue; + if ((r % 173) == 0 || (r % 179) == 0 || (r % 181) == 0 || (r % 191) == 0) + { + return true; + } + + m = 193 * 197 * 199 * 211; + r = x.Mod(BigInteger.ValueOf(m)).IntValue; + if ((r % 193) == 0 || (r % 197) == 0 || (r % 199) == 0 || (r % 211) == 0) + { + return true; + } + + /* + * NOTE: Unit tests depend on SMALL_FACTOR_LIMIT matching the + * highest small factor tested here. + */ + return false; + } + + private static bool ImplMRProbablePrimeToBase(BigInteger w, BigInteger wSubOne, BigInteger m, int a, BigInteger b) + { + BigInteger z = b.ModPow(m, w); + + if (z.Equals(One) || z.Equals(wSubOne)) + return true; + + for (int j = 1; j < a; ++j) + { + z = z.Square().Mod(w); + + if (z.Equals(wSubOne)) + return true; + + if (z.Equals(One)) + return false; + } + + return false; + } + + private static STOutput ImplSTRandomPrime(IDigest d, int length, byte[] primeSeed) + { + int dLen = d.GetDigestSize(); + int cLen = System.Math.Max(4, dLen); + + if (length < 33) + { + int primeGenCounter = 0; + + byte[] c0 = new byte[cLen]; + byte[] c1 = new byte[cLen]; + + for (;;) + { + Hash(d, primeSeed, c0, cLen - dLen); + Inc(primeSeed, 1); + + Hash(d, primeSeed, c1, cLen - dLen); + Inc(primeSeed, 1); + + uint c = Pack.BE_To_UInt32(c0, cLen - 4) + ^ Pack.BE_To_UInt32(c1, cLen - 4); + c &= uint.MaxValue >> (32 - length); + c |= (1U << (length - 1)) | 1U; + + ++primeGenCounter; + + if (IsPrime32(c)) + return new STOutput(BigInteger.ValueOf(c), primeSeed, primeGenCounter); + + if (primeGenCounter > (4 * length)) + throw new InvalidOperationException("Too many iterations in Shawe-Taylor Random_Prime Routine"); + } + } + + STOutput rec = ImplSTRandomPrime(d, (length + 3)/2, primeSeed); + + { + BigInteger c0 = rec.Prime; + primeSeed = rec.PrimeSeed; + int primeGenCounter = rec.PrimeGenCounter; + + int outlen = 8 * dLen; + int iterations = (length - 1)/outlen; + + int oldCounter = primeGenCounter; + + BigInteger x = HashGen(d, primeSeed, iterations + 1); + x = x.Mod(One.ShiftLeft(length - 1)).SetBit(length - 1); + + BigInteger c0x2 = c0.ShiftLeft(1); + BigInteger tx2 = x.Subtract(One).Divide(c0x2).Add(One).ShiftLeft(1); + int dt = 0; + + BigInteger c = tx2.Multiply(c0).Add(One); + + /* + * TODO Since the candidate primes are generated by constant steps ('c0x2'), + * sieving could be used here in place of the 'HasAnySmallFactors' approach. + */ + for (;;) + { + if (c.BitLength > length) + { + tx2 = One.ShiftLeft(length - 1).Subtract(One).Divide(c0x2).Add(One).ShiftLeft(1); + c = tx2.Multiply(c0).Add(One); + } + + ++primeGenCounter; + + /* + * This is an optimization of the original algorithm, using trial division to screen out + * many non-primes quickly. + * + * NOTE: 'primeSeed' is still incremented as if we performed the full check! + */ + if (ImplHasAnySmallFactors(c)) + { + Inc(primeSeed, iterations + 1); + } + else + { + BigInteger a = HashGen(d, primeSeed, iterations + 1); + a = a.Mod(c.Subtract(Three)).Add(Two); + + tx2 = tx2.Add(BigInteger.ValueOf(dt)); + dt = 0; + + BigInteger z = a.ModPow(tx2, c); + + if (c.Gcd(z.Subtract(One)).Equals(One) && z.ModPow(c0, c).Equals(One)) + return new STOutput(c, primeSeed, primeGenCounter); + } + + if (primeGenCounter >= ((4 * length) + oldCounter)) + throw new InvalidOperationException("Too many iterations in Shawe-Taylor Random_Prime Routine"); + + dt += 2; + c = c.Add(c0x2); + } + } + } + + private static void Hash(IDigest d, byte[] input, byte[] output, int outPos) + { + d.BlockUpdate(input, 0, input.Length); + d.DoFinal(output, outPos); + } + + private static BigInteger HashGen(IDigest d, byte[] seed, int count) + { + int dLen = d.GetDigestSize(); + int pos = count * dLen; + byte[] buf = new byte[pos]; + for (int i = 0; i < count; ++i) + { + pos -= dLen; + Hash(d, seed, buf, pos); + Inc(seed, 1); + } + return new BigInteger(1, buf); + } + + private static void Inc(byte[] seed, int c) + { + int pos = seed.Length; + while (c > 0 && --pos >= 0) + { + c += seed[pos]; + seed[pos] = (byte)c; + c >>= 8; + } + } + + private static bool IsPrime32(uint x) + { + /* + * Use wheel factorization with 2, 3, 5 to select trial divisors. + */ + + if (x < 32) + return ((1 << (int)x) & 0b0010_0000_1000_1010_0010_1000_1010_1100) != 0; + + if (((1 << (int)(x % 30U)) & 0b1010_0000_1000_1010_0010_1000_1000_0010U) == 0) + return false; + + uint[] ds = new uint[]{ 1, 7, 11, 13, 17, 19, 23, 29 }; + uint b = 0; + for (int pos = 1;; pos = 0) + { + /* + * Trial division by wheel-selected divisors + */ + while (pos < ds.Length) + { + uint d = b + ds[pos]; + if (x % d == 0) + return false; + + ++pos; + } + + b += 30; + + if ((b >> 16 != 0) || (b * b >= x)) + return true; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/Primes.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/Primes.cs.meta new file mode 100644 index 000000000..7b9365cd0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/Primes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f7607b79d7fda4b4fb7452bd465e4f1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec.meta new file mode 100644 index 000000000..dda245b43 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1d60220356cda474badfff94d625ad9d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/AbstractECLookupTable.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/AbstractECLookupTable.cs new file mode 100644 index 000000000..10f5fe5fb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/AbstractECLookupTable.cs @@ -0,0 +1,20 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC +{ + public abstract class AbstractECLookupTable + : ECLookupTable + { + public abstract ECPoint Lookup(int index); + public abstract int Size { get; } + + public virtual ECPoint LookupVar(int index) + { + return Lookup(index); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/AbstractECLookupTable.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/AbstractECLookupTable.cs.meta new file mode 100644 index 000000000..29efd49c6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/AbstractECLookupTable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 50418ef6492b4ea4eaa2c772913ae160 +timeCreated: 1572510030 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECAlgorithms.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECAlgorithms.cs new file mode 100644 index 000000000..566ed33a1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECAlgorithms.cs @@ -0,0 +1,614 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Endo; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Field; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC +{ + public class ECAlgorithms + { + public static bool IsF2mCurve(ECCurve c) + { + return IsF2mField(c.Field); + } + + public static bool IsF2mField(IFiniteField field) + { + return field.Dimension > 1 && field.Characteristic.Equals(BigInteger.Two) + && field is IPolynomialExtensionField; + } + + public static bool IsFpCurve(ECCurve c) + { + return IsFpField(c.Field); + } + + public static bool IsFpField(IFiniteField field) + { + return field.Dimension == 1; + } + + public static ECPoint SumOfMultiplies(ECPoint[] ps, BigInteger[] ks) + { + if (ps == null || ks == null || ps.Length != ks.Length || ps.Length < 1) + throw new ArgumentException("point and scalar arrays should be non-null, and of equal, non-zero, length"); + + int count = ps.Length; + switch (count) + { + case 1: + return ps[0].Multiply(ks[0]); + case 2: + return SumOfTwoMultiplies(ps[0], ks[0], ps[1], ks[1]); + default: + break; + } + + ECPoint p = ps[0]; + ECCurve c = p.Curve; + + ECPoint[] imported = new ECPoint[count]; + imported[0] = p; + for (int i = 1; i < count; ++i) + { + imported[i] = ImportPoint(c, ps[i]); + } + + GlvEndomorphism glvEndomorphism = c.GetEndomorphism() as GlvEndomorphism; + if (glvEndomorphism != null) + { + return ImplCheckResult(ImplSumOfMultipliesGlv(imported, ks, glvEndomorphism)); + } + + return ImplCheckResult(ImplSumOfMultiplies(imported, ks)); + } + + public static ECPoint SumOfTwoMultiplies(ECPoint P, BigInteger a, ECPoint Q, BigInteger b) + { + ECCurve cp = P.Curve; + Q = ImportPoint(cp, Q); + + // Point multiplication for Koblitz curves (using WTNAF) beats Shamir's trick + { + AbstractF2mCurve f2mCurve = cp as AbstractF2mCurve; + if (f2mCurve != null && f2mCurve.IsKoblitz) + { + return ImplCheckResult(P.Multiply(a).Add(Q.Multiply(b))); + } + } + + GlvEndomorphism glvEndomorphism = cp.GetEndomorphism() as GlvEndomorphism; + if (glvEndomorphism != null) + { + return ImplCheckResult( + ImplSumOfMultipliesGlv(new ECPoint[] { P, Q }, new BigInteger[] { a, b }, glvEndomorphism)); + } + + return ImplCheckResult(ImplShamirsTrickWNaf(P, a, Q, b)); + } + + /* + * "Shamir's Trick", originally due to E. G. Straus + * (Addition chains of vectors. American Mathematical Monthly, + * 71(7):806-808, Aug./Sept. 1964) + * + * Input: The points P, Q, scalar k = (km?, ... , k1, k0) + * and scalar l = (lm?, ... , l1, l0). + * Output: R = k * P + l * Q. + * 1: Z <- P + Q + * 2: R <- O + * 3: for i from m-1 down to 0 do + * 4: R <- R + R {point doubling} + * 5: if (ki = 1) and (li = 0) then R <- R + P end if + * 6: if (ki = 0) and (li = 1) then R <- R + Q end if + * 7: if (ki = 1) and (li = 1) then R <- R + Z end if + * 8: end for + * 9: return R + */ + public static ECPoint ShamirsTrick(ECPoint P, BigInteger k, ECPoint Q, BigInteger l) + { + ECCurve cp = P.Curve; + Q = ImportPoint(cp, Q); + + return ImplCheckResult(ImplShamirsTrickJsf(P, k, Q, l)); + } + + public static ECPoint ImportPoint(ECCurve c, ECPoint p) + { + ECCurve cp = p.Curve; + if (!c.Equals(cp)) + throw new ArgumentException("Point must be on the same curve"); + + return c.ImportPoint(p); + } + + public static void MontgomeryTrick(ECFieldElement[] zs, int off, int len) + { + MontgomeryTrick(zs, off, len, null); + } + + public static void MontgomeryTrick(ECFieldElement[] zs, int off, int len, ECFieldElement scale) + { + /* + * Uses the "Montgomery Trick" to invert many field elements, with only a single actual + * field inversion. See e.g. the paper: + * "Fast Multi-scalar Multiplication Methods on Elliptic Curves with Precomputation Strategy Using Montgomery Trick" + * by Katsuyuki Okeya, Kouichi Sakurai. + */ + + ECFieldElement[] c = new ECFieldElement[len]; + c[0] = zs[off]; + + int i = 0; + while (++i < len) + { + c[i] = c[i - 1].Multiply(zs[off + i]); + } + + --i; + + if (scale != null) + { + c[i] = c[i].Multiply(scale); + } + + ECFieldElement u = c[i].Invert(); + + while (i > 0) + { + int j = off + i--; + ECFieldElement tmp = zs[j]; + zs[j] = c[i].Multiply(u); + u = u.Multiply(tmp); + } + + zs[off] = u; + } + + /** + * Simple shift-and-add multiplication. Serves as reference implementation to verify (possibly + * faster) implementations, and for very small scalars. CAUTION: This implementation is NOT + * constant-time in any way. It is only intended to be used for diagnostics. + * + * @param p + * The point to multiply. + * @param k + * The multiplier. + * @return The result of the point multiplication kP. + */ + public static ECPoint ReferenceMultiply(ECPoint p, BigInteger k) + { + BigInteger x = k.Abs(); + ECPoint q = p.Curve.Infinity; + int t = x.BitLength; + if (t > 0) + { + if (x.TestBit(0)) + { + q = p; + } + for (int i = 1; i < t; i++) + { + p = p.Twice(); + if (x.TestBit(i)) + { + q = q.Add(p); + } + } + } + return k.SignValue < 0 ? q.Negate() : q; + } + + public static ECPoint ValidatePoint(ECPoint p) + { + if (!p.IsValid()) + throw new InvalidOperationException("Invalid point"); + + return p; + } + + public static ECPoint CleanPoint(ECCurve c, ECPoint p) + { + ECCurve cp = p.Curve; + if (!c.Equals(cp)) + throw new ArgumentException("Point must be on the same curve", nameof(p)); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int encodedLength = p.GetEncodedLength(false); + Span encoding = encodedLength <= 512 + ? stackalloc byte[encodedLength] + : new byte[encodedLength]; + p.EncodeTo(false, encoding); + return c.DecodePoint(encoding); +#else + return c.DecodePoint(p.GetEncoded(false)); +#endif + } + + internal static ECPoint ImplCheckResult(ECPoint p) + { + if (!p.IsValidPartial()) + throw new InvalidOperationException("Invalid result"); + + return p; + } + + internal static ECPoint ImplShamirsTrickJsf(ECPoint P, BigInteger k, ECPoint Q, BigInteger l) + { + ECCurve curve = P.Curve; + ECPoint infinity = curve.Infinity; + + // TODO conjugate co-Z addition (ZADDC) can return both of these + ECPoint PaddQ = P.Add(Q); + ECPoint PsubQ = P.Subtract(Q); + + ECPoint[] points = new ECPoint[] { Q, PsubQ, P, PaddQ }; + curve.NormalizeAll(points); + + ECPoint[] table = new ECPoint[] { + points[3].Negate(), points[2].Negate(), points[1].Negate(), + points[0].Negate(), infinity, points[0], + points[1], points[2], points[3] }; + + byte[] jsf = WNafUtilities.GenerateJsf(k, l); + + ECPoint R = infinity; + + int i = jsf.Length; + while (--i >= 0) + { + int jsfi = jsf[i]; + + // NOTE: The shifting ensures the sign is extended correctly + int kDigit = ((jsfi << 24) >> 28), lDigit = ((jsfi << 28) >> 28); + + int index = 4 + (kDigit * 3) + lDigit; + R = R.TwicePlus(table[index]); + } + + return R; + } + + internal static ECPoint ImplShamirsTrickWNaf(ECPoint P, BigInteger k, + ECPoint Q, BigInteger l) + { + bool negK = k.SignValue < 0, negL = l.SignValue < 0; + + BigInteger kAbs = k.Abs(), lAbs = l.Abs(); + + int minWidthP = WNafUtilities.GetWindowSize(kAbs.BitLength, 8); + int minWidthQ = WNafUtilities.GetWindowSize(lAbs.BitLength, 8); + + WNafPreCompInfo infoP = WNafUtilities.Precompute(P, minWidthP, true); + WNafPreCompInfo infoQ = WNafUtilities.Precompute(Q, minWidthQ, true); + + // When P, Q are 'promoted' (i.e. reused several times), switch to fixed-point algorithm + { + ECCurve c = P.Curve; + int combSize = FixedPointUtilities.GetCombSize(c); + if (!negK && !negL + && k.BitLength <= combSize && l.BitLength <= combSize + && infoP.IsPromoted && infoQ.IsPromoted) + { + return ImplShamirsTrickFixedPoint(P, k, Q, l); + } + } + + int widthP = System.Math.Min(8, infoP.Width); + int widthQ = System.Math.Min(8, infoQ.Width); + + ECPoint[] preCompP = negK ? infoP.PreCompNeg : infoP.PreComp; + ECPoint[] preCompQ = negL ? infoQ.PreCompNeg : infoQ.PreComp; + ECPoint[] preCompNegP = negK ? infoP.PreComp : infoP.PreCompNeg; + ECPoint[] preCompNegQ = negL ? infoQ.PreComp : infoQ.PreCompNeg; + + byte[] wnafP = WNafUtilities.GenerateWindowNaf(widthP, kAbs); + byte[] wnafQ = WNafUtilities.GenerateWindowNaf(widthQ, lAbs); + + return ImplShamirsTrickWNaf(preCompP, preCompNegP, wnafP, preCompQ, preCompNegQ, wnafQ); + } + + internal static ECPoint ImplShamirsTrickWNaf(ECEndomorphism endomorphism, ECPoint P, BigInteger k, BigInteger l) + { + bool negK = k.SignValue < 0, negL = l.SignValue < 0; + + k = k.Abs(); + l = l.Abs(); + + int minWidth = WNafUtilities.GetWindowSize(System.Math.Max(k.BitLength, l.BitLength), 8); + + WNafPreCompInfo infoP = WNafUtilities.Precompute(P, minWidth, true); + ECPoint Q = EndoUtilities.MapPoint(endomorphism, P); + WNafPreCompInfo infoQ = WNafUtilities.PrecomputeWithPointMap(Q, endomorphism.PointMap, infoP, true); + + int widthP = System.Math.Min(8, infoP.Width); + int widthQ = System.Math.Min(8, infoQ.Width); + + ECPoint[] preCompP = negK ? infoP.PreCompNeg : infoP.PreComp; + ECPoint[] preCompQ = negL ? infoQ.PreCompNeg : infoQ.PreComp; + ECPoint[] preCompNegP = negK ? infoP.PreComp : infoP.PreCompNeg; + ECPoint[] preCompNegQ = negL ? infoQ.PreComp : infoQ.PreCompNeg; + + byte[] wnafP = WNafUtilities.GenerateWindowNaf(widthP, k); + byte[] wnafQ = WNafUtilities.GenerateWindowNaf(widthQ, l); + + return ImplShamirsTrickWNaf(preCompP, preCompNegP, wnafP, preCompQ, preCompNegQ, wnafQ); + } + + private static ECPoint ImplShamirsTrickWNaf(ECPoint[] preCompP, ECPoint[] preCompNegP, byte[] wnafP, + ECPoint[] preCompQ, ECPoint[] preCompNegQ, byte[] wnafQ) + { + int len = System.Math.Max(wnafP.Length, wnafQ.Length); + + ECCurve curve = preCompP[0].Curve; + ECPoint infinity = curve.Infinity; + + ECPoint R = infinity; + int zeroes = 0; + + for (int i = len - 1; i >= 0; --i) + { + int wiP = i < wnafP.Length ? (int)(sbyte)wnafP[i] : 0; + int wiQ = i < wnafQ.Length ? (int)(sbyte)wnafQ[i] : 0; + + if ((wiP | wiQ) == 0) + { + ++zeroes; + continue; + } + + ECPoint r = infinity; + if (wiP != 0) + { + int nP = System.Math.Abs(wiP); + ECPoint[] tableP = wiP < 0 ? preCompNegP : preCompP; + r = r.Add(tableP[nP >> 1]); + } + if (wiQ != 0) + { + int nQ = System.Math.Abs(wiQ); + ECPoint[] tableQ = wiQ < 0 ? preCompNegQ : preCompQ; + r = r.Add(tableQ[nQ >> 1]); + } + + if (zeroes > 0) + { + R = R.TimesPow2(zeroes); + zeroes = 0; + } + + R = R.TwicePlus(r); + } + + if (zeroes > 0) + { + R = R.TimesPow2(zeroes); + } + + return R; + } + + internal static ECPoint ImplSumOfMultiplies(ECPoint[] ps, BigInteger[] ks) + { + int count = ps.Length; + bool[] negs = new bool[count]; + WNafPreCompInfo[] infos = new WNafPreCompInfo[count]; + byte[][] wnafs = new byte[count][]; + + for (int i = 0; i < count; ++i) + { + BigInteger ki = ks[i]; negs[i] = ki.SignValue < 0; ki = ki.Abs(); + + int minWidth = WNafUtilities.GetWindowSize(ki.BitLength, 8); + WNafPreCompInfo info = WNafUtilities.Precompute(ps[i], minWidth, true); + + int width = System.Math.Min(8, info.Width); + + infos[i] = info; + wnafs[i] = WNafUtilities.GenerateWindowNaf(width, ki); + } + + return ImplSumOfMultiplies(negs, infos, wnafs); + } + + internal static ECPoint ImplSumOfMultipliesGlv(ECPoint[] ps, BigInteger[] ks, GlvEndomorphism glvEndomorphism) + { + BigInteger n = ps[0].Curve.Order; + + int len = ps.Length; + + BigInteger[] abs = new BigInteger[len << 1]; + for (int i = 0, j = 0; i < len; ++i) + { + BigInteger[] ab = glvEndomorphism.DecomposeScalar(ks[i].Mod(n)); + abs[j++] = ab[0]; + abs[j++] = ab[1]; + } + + if (glvEndomorphism.HasEfficientPointMap) + { + return ImplSumOfMultiplies(glvEndomorphism, ps, abs); + } + + ECPoint[] pqs = new ECPoint[len << 1]; + for (int i = 0, j = 0; i < len; ++i) + { + ECPoint p = ps[i]; + ECPoint q = EndoUtilities.MapPoint(glvEndomorphism, p); + pqs[j++] = p; + pqs[j++] = q; + } + + return ImplSumOfMultiplies(pqs, abs); + } + + internal static ECPoint ImplSumOfMultiplies(ECEndomorphism endomorphism, ECPoint[] ps, BigInteger[] ks) + { + int halfCount = ps.Length, fullCount = halfCount << 1; + + bool[] negs = new bool[fullCount]; + WNafPreCompInfo[] infos = new WNafPreCompInfo[fullCount]; + byte[][] wnafs = new byte[fullCount][]; + + ECPointMap pointMap = endomorphism.PointMap; + + for (int i = 0; i < halfCount; ++i) + { + int j0 = i << 1, j1 = j0 + 1; + + BigInteger kj0 = ks[j0]; negs[j0] = kj0.SignValue < 0; kj0 = kj0.Abs(); + BigInteger kj1 = ks[j1]; negs[j1] = kj1.SignValue < 0; kj1 = kj1.Abs(); + + int minWidth = WNafUtilities.GetWindowSize(System.Math.Max(kj0.BitLength, kj1.BitLength), 8); + + ECPoint P = ps[i]; + WNafPreCompInfo infoP = WNafUtilities.Precompute(P, minWidth, true); + ECPoint Q = EndoUtilities.MapPoint(endomorphism, P); + WNafPreCompInfo infoQ = WNafUtilities.PrecomputeWithPointMap(Q, pointMap, infoP, true); + + int widthP = System.Math.Min(8, infoP.Width); + int widthQ = System.Math.Min(8, infoQ.Width); + + infos[j0] = infoP; + infos[j1] = infoQ; + wnafs[j0] = WNafUtilities.GenerateWindowNaf(widthP, kj0); + wnafs[j1] = WNafUtilities.GenerateWindowNaf(widthQ, kj1); + } + + return ImplSumOfMultiplies(negs, infos, wnafs); + } + + private static ECPoint ImplSumOfMultiplies(bool[] negs, WNafPreCompInfo[] infos, byte[][] wnafs) + { + int len = 0, count = wnafs.Length; + for (int i = 0; i < count; ++i) + { + len = System.Math.Max(len, wnafs[i].Length); + } + + ECCurve curve = infos[0].PreComp[0].Curve; + ECPoint infinity = curve.Infinity; + + ECPoint R = infinity; + int zeroes = 0; + + for (int i = len - 1; i >= 0; --i) + { + ECPoint r = infinity; + + for (int j = 0; j < count; ++j) + { + byte[] wnaf = wnafs[j]; + int wi = i < wnaf.Length ? (int)(sbyte)wnaf[i] : 0; + if (wi != 0) + { + int n = System.Math.Abs(wi); + WNafPreCompInfo info = infos[j]; + ECPoint[] table = (wi < 0 == negs[j]) ? info.PreComp : info.PreCompNeg; + r = r.Add(table[n >> 1]); + } + } + + if (r == infinity) + { + ++zeroes; + continue; + } + + if (zeroes > 0) + { + R = R.TimesPow2(zeroes); + zeroes = 0; + } + + R = R.TwicePlus(r); + } + + if (zeroes > 0) + { + R = R.TimesPow2(zeroes); + } + + return R; + } + + private static ECPoint ImplShamirsTrickFixedPoint(ECPoint p, BigInteger k, ECPoint q, BigInteger l) + { + ECCurve c = p.Curve; + int combSize = FixedPointUtilities.GetCombSize(c); + + if (k.BitLength > combSize || l.BitLength > combSize) + { + /* + * TODO The comb works best when the scalars are less than the (possibly unknown) order. + * Still, if we want to handle larger scalars, we could allow customization of the comb + * size, or alternatively we could deal with the 'extra' bits either by running the comb + * multiple times as necessary, or by using an alternative multiplier as prelude. + */ + throw new InvalidOperationException("fixed-point comb doesn't support scalars larger than the curve order"); + } + + FixedPointPreCompInfo infoP = FixedPointUtilities.Precompute(p); + FixedPointPreCompInfo infoQ = FixedPointUtilities.Precompute(q); + + ECLookupTable lookupTableP = infoP.LookupTable; + ECLookupTable lookupTableQ = infoQ.LookupTable; + + int widthP = infoP.Width; + int widthQ = infoQ.Width; + + // TODO This shouldn't normally happen, but a better "solution" is desirable anyway + if (widthP != widthQ) + { + FixedPointCombMultiplier m = new FixedPointCombMultiplier(); + ECPoint r1 = m.Multiply(p, k); + ECPoint r2 = m.Multiply(q, l); + return r1.Add(r2); + } + + int width = widthP; + + int d = (combSize + width - 1) / width; + + ECPoint R = c.Infinity; + + int fullComb = d * width; + uint[] K = Nat.FromBigInteger(fullComb, k); + uint[] L = Nat.FromBigInteger(fullComb, l); + + int top = fullComb - 1; + for (int i = 0; i < d; ++i) + { + uint secretIndexK = 0, secretIndexL = 0; + + for (int j = top - i; j >= 0; j -= d) + { + uint secretBitK = K[j >> 5] >> (j & 0x1F); + secretIndexK ^= secretBitK >> 1; + secretIndexK <<= 1; + secretIndexK ^= secretBitK; + + uint secretBitL = L[j >> 5] >> (j & 0x1F); + secretIndexL ^= secretBitL >> 1; + secretIndexL <<= 1; + secretIndexL ^= secretBitL; + } + + ECPoint addP = lookupTableP.LookupVar((int)secretIndexK); + ECPoint addQ = lookupTableQ.LookupVar((int)secretIndexL); + + ECPoint T = addP.Add(addQ); + + R = R.TwicePlus(T); + } + + return R.Add(infoP.Offset).Add(infoQ.Offset); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECAlgorithms.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECAlgorithms.cs.meta new file mode 100644 index 000000000..d7bb90e7a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECAlgorithms.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d5f3620d97ee7c342a95b5b57c924d90 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECCurve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECCurve.cs new file mode 100644 index 000000000..42ebf6e4c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECCurve.cs @@ -0,0 +1,1518 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Abc; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Endo; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Field; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC +{ + /// Base class for an elliptic curve. + public abstract class ECCurve + { + public const int COORD_AFFINE = 0; + public const int COORD_HOMOGENEOUS = 1; + public const int COORD_JACOBIAN = 2; + public const int COORD_JACOBIAN_CHUDNOVSKY = 3; + public const int COORD_JACOBIAN_MODIFIED = 4; + public const int COORD_LAMBDA_AFFINE = 5; + public const int COORD_LAMBDA_PROJECTIVE = 6; + public const int COORD_SKEWED = 7; + + public static int[] GetAllCoordinateSystems() + { + return new int[]{ COORD_AFFINE, COORD_HOMOGENEOUS, COORD_JACOBIAN, COORD_JACOBIAN_CHUDNOVSKY, + COORD_JACOBIAN_MODIFIED, COORD_LAMBDA_AFFINE, COORD_LAMBDA_PROJECTIVE, COORD_SKEWED }; + } + + public class Config + { + protected ECCurve outer; + protected int coord; + protected ECEndomorphism endomorphism; + protected ECMultiplier multiplier; + + internal Config(ECCurve outer, int coord, ECEndomorphism endomorphism, ECMultiplier multiplier) + { + this.outer = outer; + this.coord = coord; + this.endomorphism = endomorphism; + this.multiplier = multiplier; + } + + public Config SetCoordinateSystem(int coord) + { + this.coord = coord; + return this; + } + + public Config SetEndomorphism(ECEndomorphism endomorphism) + { + this.endomorphism = endomorphism; + return this; + } + + public Config SetMultiplier(ECMultiplier multiplier) + { + this.multiplier = multiplier; + return this; + } + + public ECCurve Create() + { + if (!outer.SupportsCoordinateSystem(coord)) + { + throw new InvalidOperationException("unsupported coordinate system"); + } + + ECCurve c = outer.CloneCurve(); + if (c == outer) + { + throw new InvalidOperationException("implementation returned current curve"); + } + + c.m_coord = coord; + c.m_endomorphism = endomorphism; + c.m_multiplier = multiplier; + + return c; + } + } + + protected readonly IFiniteField m_field; + protected ECFieldElement m_a, m_b; + protected BigInteger m_order, m_cofactor; + + protected int m_coord = COORD_AFFINE; + protected ECEndomorphism m_endomorphism = null; + protected ECMultiplier m_multiplier = null; + + protected ECCurve(IFiniteField field) + { + this.m_field = field; + } + + public abstract int FieldSize { get; } + public abstract ECFieldElement FromBigInteger(BigInteger x); + public abstract bool IsValidFieldElement(BigInteger x); + + public abstract ECFieldElement RandomFieldElement(SecureRandom r); + + public abstract ECFieldElement RandomFieldElementMult(SecureRandom r); + + public virtual Config Configure() + { + return new Config(this, this.m_coord, this.m_endomorphism, this.m_multiplier); + } + + public virtual ECPoint ValidatePoint(BigInteger x, BigInteger y) + { + ECPoint p = CreatePoint(x, y); + if (!p.IsValid()) + throw new ArgumentException("Invalid point coordinates"); + + return p; + } + + public virtual ECPoint CreatePoint(BigInteger x, BigInteger y) + { + return CreateRawPoint(FromBigInteger(x), FromBigInteger(y)); + } + + protected abstract ECCurve CloneCurve(); + + protected internal abstract ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y); + + protected internal abstract ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs); + + protected virtual ECMultiplier CreateDefaultMultiplier() + { + GlvEndomorphism glvEndomorphism = m_endomorphism as GlvEndomorphism; + if (glvEndomorphism != null) + { + return new GlvMultiplier(this, glvEndomorphism); + } + + return new WNafL2RMultiplier(); + } + + public virtual bool SupportsCoordinateSystem(int coord) + { + return coord == COORD_AFFINE; + } + + public virtual PreCompInfo GetPreCompInfo(ECPoint point, string name) + { + CheckPoint(point); + + IDictionary table; + lock (point) + { + table = point.m_preCompTable; + } + + if (null == table) + return null; + + lock (table) + { + return table.TryGetValue(name, out var preCompInfo) ? preCompInfo : null; + } + } + + /** + * Compute a PreCompInfo for a point on this curve, under a given name. Used by + * ECMultipliers to save the precomputation for this ECPoint for use + * by subsequent multiplication. + * + * @param point + * The ECPoint to store precomputations for. + * @param name + * A String used to index precomputations of different types. + * @param callback + * Called to calculate the PreCompInfo. + */ + public virtual PreCompInfo Precompute(ECPoint point, string name, IPreCompCallback callback) + { + CheckPoint(point); + + IDictionary table; + lock (point) + { + table = point.m_preCompTable; + if (null == table) + { + point.m_preCompTable = table = new Dictionary(); + } + } + + lock (table) + { + PreCompInfo existing = table.TryGetValue(name, out var preCompInfo) ? preCompInfo : null; + PreCompInfo result = callback.Precompute(existing); + + if (result != existing) + { + table[name] = result; + } + + return result; + } + } + + public virtual ECPoint ImportPoint(ECPoint p) + { + if (this == p.Curve) + { + return p; + } + if (p.IsInfinity) + { + return Infinity; + } + + // TODO Default behaviour could be improved if the two curves have the same coordinate system by copying any Z coordinates. + p = p.Normalize(); + + return CreatePoint(p.XCoord.ToBigInteger(), p.YCoord.ToBigInteger()); + } + + /** + * Normalization ensures that any projective coordinate is 1, and therefore that the x, y + * coordinates reflect those of the equivalent point in an affine coordinate system. Where more + * than one point is to be normalized, this method will generally be more efficient than + * normalizing each point separately. + * + * @param points + * An array of points that will be updated in place with their normalized versions, + * where necessary + */ + public virtual void NormalizeAll(ECPoint[] points) + { + NormalizeAll(points, 0, points.Length, null); + } + + /** + * Normalization ensures that any projective coordinate is 1, and therefore that the x, y + * coordinates reflect those of the equivalent point in an affine coordinate system. Where more + * than one point is to be normalized, this method will generally be more efficient than + * normalizing each point separately. An (optional) z-scaling factor can be applied; effectively + * each z coordinate is scaled by this value prior to normalization (but only one + * actual multiplication is needed). + * + * @param points + * An array of points that will be updated in place with their normalized versions, + * where necessary + * @param off + * The start of the range of points to normalize + * @param len + * The length of the range of points to normalize + * @param iso + * The (optional) z-scaling factor - can be null + */ + public virtual void NormalizeAll(ECPoint[] points, int off, int len, ECFieldElement iso) + { + CheckPoints(points, off, len); + + switch (this.CoordinateSystem) + { + case ECCurve.COORD_AFFINE: + case ECCurve.COORD_LAMBDA_AFFINE: + { + if (iso != null) + throw new ArgumentException("not valid for affine coordinates", "iso"); + + return; + } + } + + /* + * Figure out which of the points actually need to be normalized + */ + ECFieldElement[] zs = new ECFieldElement[len]; + int[] indices = new int[len]; + int count = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + if (null != p && (iso != null || !p.IsNormalized())) + { + zs[count] = p.GetZCoord(0); + indices[count++] = off + i; + } + } + + if (count == 0) + { + return; + } + + ECAlgorithms.MontgomeryTrick(zs, 0, count, iso); + + for (int j = 0; j < count; ++j) + { + int index = indices[j]; + points[index] = points[index].Normalize(zs[j]); + } + } + + public abstract ECPoint Infinity { get; } + + public virtual IFiniteField Field + { + get { return m_field; } + } + + public virtual ECFieldElement A + { + get { return m_a; } + } + + public virtual ECFieldElement B + { + get { return m_b; } + } + + public virtual BigInteger Order + { + get { return m_order; } + } + + public virtual BigInteger Cofactor + { + get { return m_cofactor; } + } + + public virtual int CoordinateSystem + { + get { return m_coord; } + } + + /** + * Create a cache-safe lookup table for the specified sequence of points. All the points MUST + * belong to this ECCurve instance, and MUST already be normalized. + */ + public virtual ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + int FE_BYTES = (FieldSize + 7) / 8; + byte[] table = new byte[len * FE_BYTES * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + byte[] px = p.RawXCoord.ToBigInteger().ToByteArray(); + byte[] py = p.RawYCoord.ToBigInteger().ToByteArray(); + + int pxStart = px.Length > FE_BYTES ? 1 : 0, pxLen = px.Length - pxStart; + int pyStart = py.Length > FE_BYTES ? 1 : 0, pyLen = py.Length - pyStart; + + Array.Copy(px, pxStart, table, pos + FE_BYTES - pxLen, pxLen); pos += FE_BYTES; + Array.Copy(py, pyStart, table, pos + FE_BYTES - pyLen, pyLen); pos += FE_BYTES; + } + } + + return new DefaultLookupTable(this, table, len); + } + + protected virtual void CheckPoint(ECPoint point) + { + if (null == point || (this != point.Curve)) + throw new ArgumentException("must be non-null and on this curve", "point"); + } + + protected virtual void CheckPoints(ECPoint[] points) + { + CheckPoints(points, 0, points.Length); + } + + protected virtual void CheckPoints(ECPoint[] points, int off, int len) + { + if (points == null) + throw new ArgumentNullException("points"); + if (off < 0 || len < 0 || (off > (points.Length - len))) + throw new ArgumentException("invalid range specified", "points"); + + for (int i = 0; i < len; ++i) + { + ECPoint point = points[off + i]; + if (null != point && this != point.Curve) + throw new ArgumentException("entries must be null or on this curve", "points"); + } + } + + public virtual bool Equals(ECCurve other) + { + if (this == other) + return true; + if (null == other) + return false; + return Field.Equals(other.Field) + && A.ToBigInteger().Equals(other.A.ToBigInteger()) + && B.ToBigInteger().Equals(other.B.ToBigInteger()); + } + + public override bool Equals(object obj) + { + return Equals(obj as ECCurve); + } + + public override int GetHashCode() + { + return Field.GetHashCode() + ^ Integers.RotateLeft(A.ToBigInteger().GetHashCode(), 8) + ^ Integers.RotateLeft(B.ToBigInteger().GetHashCode(), 16); + } + + protected abstract ECPoint DecompressPoint(int yTilde, BigInteger X1); + + public virtual ECEndomorphism GetEndomorphism() + { + return m_endomorphism; + } + + /** + * Sets the default ECMultiplier, unless already set. + * + * We avoid locking for performance reasons, so there is no uniqueness guarantee. + */ + public virtual ECMultiplier GetMultiplier() + { + if (this.m_multiplier == null) + { + this.m_multiplier = CreateDefaultMultiplier(); + } + return this.m_multiplier; + } + + /** + * Decode a point on this curve from its ASN.1 encoding. The different + * encodings are taken account of, including point compression for + * Fp (X9.62 s 4.2.1 pg 17). + * @return The decoded point. + */ + public virtual ECPoint DecodePoint(byte[] encoded) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return DecodePoint(encoded.AsSpan()); +#else + ECPoint p; + int expectedLength = (FieldSize + 7) / 8; + + byte type = encoded[0]; + switch (type) + { + case 0x00: // infinity + { + if (encoded.Length != 1) + throw new ArgumentException("Incorrect length for infinity encoding", "encoded"); + + p = Infinity; + break; + } + + case 0x02: // compressed + case 0x03: // compressed + { + if (encoded.Length != (expectedLength + 1)) + throw new ArgumentException("Incorrect length for compressed encoding", "encoded"); + + int yTilde = type & 1; + BigInteger X = new BigInteger(1, encoded, 1, expectedLength); + + p = DecompressPoint(yTilde, X); + if (!p.ImplIsValid(true, true)) + throw new ArgumentException("Invalid point"); + + break; + } + + case 0x04: // uncompressed + { + if (encoded.Length != (2 * expectedLength + 1)) + throw new ArgumentException("Incorrect length for uncompressed encoding", "encoded"); + + BigInteger X = new BigInteger(1, encoded, 1, expectedLength); + BigInteger Y = new BigInteger(1, encoded, 1 + expectedLength, expectedLength); + + p = ValidatePoint(X, Y); + break; + } + + case 0x06: // hybrid + case 0x07: // hybrid + { + if (encoded.Length != (2 * expectedLength + 1)) + throw new ArgumentException("Incorrect length for hybrid encoding", "encoded"); + + BigInteger X = new BigInteger(1, encoded, 1, expectedLength); + BigInteger Y = new BigInteger(1, encoded, 1 + expectedLength, expectedLength); + + if (Y.TestBit(0) != (type == 0x07)) + throw new ArgumentException("Inconsistent Y coordinate in hybrid encoding", "encoded"); + + p = ValidatePoint(X, Y); + break; + } + + default: + throw new FormatException("Invalid point encoding " + type); + } + + if (type != 0x00 && p.IsInfinity) + throw new ArgumentException("Invalid infinity encoding", "encoded"); + + return p; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual ECPoint DecodePoint(ReadOnlySpan encoded) + { + ECPoint p; + int expectedLength = (FieldSize + 7) / 8; + + byte type = encoded[0]; + switch (type) + { + case 0x00: // infinity + { + if (encoded.Length != 1) + throw new ArgumentException("Incorrect length for infinity encoding", "encoded"); + + p = Infinity; + break; + } + + case 0x02: // compressed + case 0x03: // compressed + { + if (encoded.Length != (expectedLength + 1)) + throw new ArgumentException("Incorrect length for compressed encoding", "encoded"); + + int yTilde = type & 1; + BigInteger X = new BigInteger(1, encoded[1..]); + + p = DecompressPoint(yTilde, X); + if (!p.ImplIsValid(true, true)) + throw new ArgumentException("Invalid point"); + + break; + } + + case 0x04: // uncompressed + { + if (encoded.Length != (2 * expectedLength + 1)) + throw new ArgumentException("Incorrect length for uncompressed encoding", "encoded"); + + BigInteger X = new BigInteger(1, encoded[1..(1 + expectedLength)]); + BigInteger Y = new BigInteger(1, encoded[(1 + expectedLength)..]); + + p = ValidatePoint(X, Y); + break; + } + + case 0x06: // hybrid + case 0x07: // hybrid + { + if (encoded.Length != (2 * expectedLength + 1)) + throw new ArgumentException("Incorrect length for hybrid encoding", "encoded"); + + BigInteger X = new BigInteger(1, encoded[1..(1 + expectedLength)]); + BigInteger Y = new BigInteger(1, encoded[(1 + expectedLength)..]); + + if (Y.TestBit(0) != (type == 0x07)) + throw new ArgumentException("Inconsistent Y coordinate in hybrid encoding", "encoded"); + + p = ValidatePoint(X, Y); + break; + } + + default: + throw new FormatException("Invalid point encoding " + type); + } + + if (type != 0x00 && p.IsInfinity) + throw new ArgumentException("Invalid infinity encoding", "encoded"); + + return p; + } +#endif + + private class DefaultLookupTable + : AbstractECLookupTable + { + private readonly ECCurve m_outer; + private readonly byte[] m_table; + private readonly int m_size; + + internal DefaultLookupTable(ECCurve outer, byte[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + int FE_BYTES = (m_outer.FieldSize + 7) / 8; + byte[] x = new byte[FE_BYTES], y = new byte[FE_BYTES]; + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + byte MASK = (byte)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < FE_BYTES; ++j) + { + x[j] ^= (byte)(m_table[pos + j] & MASK); + y[j] ^= (byte)(m_table[pos + FE_BYTES + j] & MASK); + } + + pos += (FE_BYTES * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + int FE_BYTES = (m_outer.FieldSize + 7) / 8; + byte[] x = new byte[FE_BYTES], y = new byte[FE_BYTES]; + int pos = index * FE_BYTES * 2; + + for (int j = 0; j < FE_BYTES; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + FE_BYTES + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(byte[] x, byte[] y) + { + ECFieldElement X = m_outer.FromBigInteger(new BigInteger(1, x)); + ECFieldElement Y = m_outer.FromBigInteger(new BigInteger(1, y)); + return m_outer.CreateRawPoint(X, Y); + } + } + } + + public abstract class AbstractFpCurve + : ECCurve + { + protected AbstractFpCurve(BigInteger q) + : base(FiniteFields.GetPrimeField(q)) + { + } + + public override bool IsValidFieldElement(BigInteger x) + { + return x != null && x.SignValue >= 0 && x.CompareTo(Field.Characteristic) < 0; + } + + public override ECFieldElement RandomFieldElement(SecureRandom r) + { + /* + * NOTE: BigInteger comparisons in the rejection sampling are not constant-time, so we + * use the product of two independent elements to mitigate side-channels. + */ + BigInteger p = Field.Characteristic; + ECFieldElement fe1 = FromBigInteger(ImplRandomFieldElement(r, p)); + ECFieldElement fe2 = FromBigInteger(ImplRandomFieldElement(r, p)); + return fe1.Multiply(fe2); + } + + public override ECFieldElement RandomFieldElementMult(SecureRandom r) + { + /* + * NOTE: BigInteger comparisons in the rejection sampling are not constant-time, so we + * use the product of two independent elements to mitigate side-channels. + */ + BigInteger p = Field.Characteristic; + ECFieldElement fe1 = FromBigInteger(ImplRandomFieldElementMult(r, p)); + ECFieldElement fe2 = FromBigInteger(ImplRandomFieldElementMult(r, p)); + return fe1.Multiply(fe2); + } + + protected override ECPoint DecompressPoint(int yTilde, BigInteger X1) + { + ECFieldElement x = FromBigInteger(X1); + ECFieldElement rhs = x.Square().Add(A).Multiply(x).Add(B); + ECFieldElement y = rhs.Sqrt(); + + /* + * If y is not a square, then we haven't got a point on the curve + */ + if (y == null) + throw new ArgumentException("Invalid point compression"); + + if (y.TestBitZero() != (yTilde == 1)) + { + // Use the other root + y = y.Negate(); + } + + return CreateRawPoint(x, y); + } + + private static BigInteger ImplRandomFieldElement(SecureRandom r, BigInteger p) + { + BigInteger x; + do + { + x = BigIntegers.CreateRandomBigInteger(p.BitLength, r); + } + while (x.CompareTo(p) >= 0); + return x; + } + + private static BigInteger ImplRandomFieldElementMult(SecureRandom r, BigInteger p) + { + BigInteger x; + do + { + x = BigIntegers.CreateRandomBigInteger(p.BitLength, r); + } + while (x.SignValue <= 0 || x.CompareTo(p) >= 0); + return x; + } + } + + /** + * Elliptic curve over Fp + */ + public class FpCurve + : AbstractFpCurve + { + private const int FP_DEFAULT_COORDS = COORD_JACOBIAN_MODIFIED; + + private static readonly HashSet KnownQs = new HashSet(); + + protected readonly BigInteger m_q, m_r; + protected readonly FpPoint m_infinity; + + + public FpCurve(BigInteger q, BigInteger a, BigInteger b) + : this(q, a, b, null, null) + { + } + + public FpCurve(BigInteger q, BigInteger a, BigInteger b, BigInteger order, BigInteger cofactor) + : this(q, a, b, order, cofactor, false) + { + } + + internal FpCurve(BigInteger q, BigInteger a, BigInteger b, BigInteger order, BigInteger cofactor, bool isInternal) + : base(q) + { + if (!isInternal) + { + bool unknownQ; + lock (KnownQs) unknownQ = !KnownQs.Contains(q); + + if (unknownQ) + { + int maxBitLength = AsInteger("BestHTTP.SecureProtocol.Org.BouncyCastle.EC.Fp_MaxSize", 1042); // 2 * 521 + int certainty = AsInteger("BestHTTP.SecureProtocol.Org.BouncyCastle.EC.Fp_Certainty", 100); + + int qBitLength = q.BitLength; + if (maxBitLength < qBitLength) + throw new ArgumentException("Fp q value out of range"); + + if (Primes.HasAnySmallFactors(q) || + !Primes.IsMRProbablePrime(q, SecureRandom.ArbitraryRandom, + GetNumberOfIterations(qBitLength, certainty))) + { + throw new ArgumentException("Fp q value not prime"); + } + } + } + + lock (KnownQs) KnownQs.Add(q); + this.m_q = q; + + this.m_r = FpFieldElement.CalculateResidue(q); + this.m_infinity = new FpPoint(this, null, null); + + this.m_a = FromBigInteger(a); + this.m_b = FromBigInteger(b); + this.m_order = order; + this.m_cofactor = cofactor; + this.m_coord = FP_DEFAULT_COORDS; + } + + internal FpCurve(BigInteger q, BigInteger r, ECFieldElement a, ECFieldElement b, BigInteger order, + BigInteger cofactor) + : base(q) + { + this.m_q = q; + this.m_r = r; + this.m_infinity = new FpPoint(this, null, null); + + this.m_a = a; + this.m_b = b; + this.m_order = order; + this.m_cofactor = cofactor; + this.m_coord = FP_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new FpCurve(m_q, m_r, m_a, m_b, m_order, m_cofactor); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_AFFINE: + case COORD_HOMOGENEOUS: + case COORD_JACOBIAN: + case COORD_JACOBIAN_MODIFIED: + return true; + default: + return false; + } + } + + public virtual BigInteger Q + { + get { return m_q; } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return m_q.BitLength; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.CompareTo(m_q) >= 0) + throw new ArgumentException("value invalid for Fp field element", "x"); + + return new FpFieldElement(this.m_q, this.m_r, x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new FpPoint(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new FpPoint(this, x, y, zs); + } + + public override ECPoint ImportPoint(ECPoint p) + { + if (this != p.Curve && this.CoordinateSystem == COORD_JACOBIAN && !p.IsInfinity) + { + switch (p.Curve.CoordinateSystem) + { + case COORD_JACOBIAN: + case COORD_JACOBIAN_CHUDNOVSKY: + case COORD_JACOBIAN_MODIFIED: + return new FpPoint(this, + FromBigInteger(p.RawXCoord.ToBigInteger()), + FromBigInteger(p.RawYCoord.ToBigInteger()), + new ECFieldElement[] { FromBigInteger(p.GetZCoord(0).ToBigInteger()) }); + default: + break; + } + } + + return base.ImportPoint(p); + } + + private int GetNumberOfIterations(int bits, int certainty) + { + /* + * NOTE: We enforce a minimum 'certainty' of 100 for bits >= 1024 (else 80). Where the + * certainty is higher than the FIPS 186-4 tables (C.2/C.3) cater to, extra iterations + * are added at the "worst case rate" for the excess. + */ + if (bits >= 1536) + { + return certainty <= 100 ? 3 + : certainty <= 128 ? 4 + : 4 + (certainty - 128 + 1) / 2; + } + else if (bits >= 1024) + { + return certainty <= 100 ? 4 + : certainty <= 112 ? 5 + : 5 + (certainty - 112 + 1) / 2; + } + else if (bits >= 512) + { + return certainty <= 80 ? 5 + : certainty <= 100 ? 7 + : 7 + (certainty - 100 + 1) / 2; + } + else + { + return certainty <= 80 ? 40 + : 40 + (certainty - 80 + 1) / 2; + } + } + + int AsInteger(string envVariable, int defaultValue) + { + string v = Org.BouncyCastle.Utilities.Platform.GetEnvironmentVariable(envVariable); + + if (v == null) + { + return defaultValue; + } + + return int.Parse(v); + } + } + + public abstract class AbstractF2mCurve + : ECCurve + { + public static BigInteger Inverse(int m, int[] ks, BigInteger x) + { + return new LongArray(x).ModInverse(m, ks).ToBigInteger(); + } + + /** + * The auxiliary values s0 and + * s1 used for partial modular reduction for + * Koblitz curves. + */ + private BigInteger[] si = null; + + private static IFiniteField BuildField(int m, int k1, int k2, int k3) + { + int[] exponents = (k2 | k3) == 0 + ? new int[]{ 0, k1, m } + : new int[]{ 0, k1, k2, k3, m }; + + return FiniteFields.GetBinaryExtensionField(exponents); + } + + protected AbstractF2mCurve(int m, int k1, int k2, int k3) + : base(BuildField(m, k1, k2, k3)) + { + } + + public override ECPoint CreatePoint(BigInteger x, BigInteger y) + { + ECFieldElement X = FromBigInteger(x), Y = FromBigInteger(y); + + switch (this.CoordinateSystem) + { + case COORD_LAMBDA_AFFINE: + case COORD_LAMBDA_PROJECTIVE: + { + if (X.IsZero) + { + if (!Y.Square().Equals(B)) + throw new ArgumentException(); + } + else + { + // Y becomes Lambda (X + Y/X) here + Y = Y.Divide(X).Add(X); + } + break; + } + default: + { + break; + } + } + + return CreateRawPoint(X, Y); + } + + public override bool IsValidFieldElement(BigInteger x) + { + return x != null && x.SignValue >= 0 && x.BitLength <= FieldSize; + } + + public override ECFieldElement RandomFieldElement(SecureRandom r) + { + int m = FieldSize; + return FromBigInteger(BigIntegers.CreateRandomBigInteger(m, r)); + } + + public override ECFieldElement RandomFieldElementMult(SecureRandom r) + { + /* + * NOTE: BigInteger comparisons in the rejection sampling are not constant-time, so we + * use the product of two independent elements to mitigate side-channels. + */ + int m = FieldSize; + ECFieldElement fe1 = FromBigInteger(ImplRandomFieldElementMult(r, m)); + ECFieldElement fe2 = FromBigInteger(ImplRandomFieldElementMult(r, m)); + return fe1.Multiply(fe2); + } + + protected override ECPoint DecompressPoint(int yTilde, BigInteger X1) + { + ECFieldElement xp = FromBigInteger(X1), yp = null; + if (xp.IsZero) + { + yp = B.Sqrt(); + } + else + { + ECFieldElement beta = xp.Square().Invert().Multiply(B).Add(A).Add(xp); + ECFieldElement z = SolveQuadraticEquation(beta); + + if (z != null) + { + if (z.TestBitZero() != (yTilde == 1)) + { + z = z.AddOne(); + } + + switch (this.CoordinateSystem) + { + case COORD_LAMBDA_AFFINE: + case COORD_LAMBDA_PROJECTIVE: + { + yp = z.Add(xp); + break; + } + default: + { + yp = z.Multiply(xp); + break; + } + } + } + } + + if (yp == null) + throw new ArgumentException("Invalid point compression"); + + return CreateRawPoint(xp, yp); + } + + /** + * Solves a quadratic equation z2 + z = beta(X9.62 + * D.1.6) The other solution is z + 1. + * + * @param beta + * The value to solve the quadratic equation for. + * @return the solution for z2 + z = beta or + * null if no solution exists. + */ + internal ECFieldElement SolveQuadraticEquation(ECFieldElement beta) + { + AbstractF2mFieldElement betaF2m = (AbstractF2mFieldElement)beta; + + bool fastTrace = betaF2m.HasFastTrace; + if (fastTrace && 0 != betaF2m.Trace()) + return null; + + int m = FieldSize; + + // For odd m, use the half-trace + if (0 != (m & 1)) + { + ECFieldElement r = betaF2m.HalfTrace(); + if (fastTrace || r.Square().Add(r).Add(beta).IsZero) + return r; + + return null; + } + + if (beta.IsZero) + return beta; + + ECFieldElement gamma, z, zeroElement = FromBigInteger(BigInteger.Zero); + + do + { + ECFieldElement t = FromBigInteger(BigInteger.Arbitrary(m)); + z = zeroElement; + ECFieldElement w = beta; + for (int i = 1; i < m; i++) + { + ECFieldElement w2 = w.Square(); + z = z.Square().Add(w2.Multiply(t)); + w = w2.Add(beta); + } + if (!w.IsZero) + { + return null; + } + gamma = z.Square().Add(z); + } + while (gamma.IsZero); + + return z; + } + + /** + * @return the auxiliary values s0 and + * s1 used for partial modular reduction for + * Koblitz curves. + */ + internal virtual BigInteger[] GetSi() + { + if (si == null) + { + lock (this) + { + if (si == null) + { + si = Tnaf.GetSi(this); + } + } + } + return si; + } + + /** + * Returns true if this is a Koblitz curve (ABC curve). + * @return true if this is a Koblitz curve (ABC curve), false otherwise + */ + public virtual bool IsKoblitz + { + get + { + return m_order != null && m_cofactor != null && m_b.IsOne && (m_a.IsZero || m_a.IsOne); + } + } + + private static BigInteger ImplRandomFieldElementMult(SecureRandom r, int m) + { + BigInteger x; + do + { + x = BigIntegers.CreateRandomBigInteger(m, r); + } + while (x.SignValue <= 0); + return x; + } + } + + /** + * Elliptic curves over F2m. The Weierstrass equation is given by + * y2 + xy = x3 + ax2 + b. + */ + public class F2mCurve + : AbstractF2mCurve + { + private const int F2M_DEFAULT_COORDS = COORD_LAMBDA_PROJECTIVE; + + /** + * The exponent m of F2m. + */ + private readonly int m; + + /** + * TPB: The integer k where xm + + * xk + 1 represents the reduction polynomial + * f(z).
    + * PPB: The integer k1 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z).
    + */ + private readonly int k1; + + /** + * TPB: Always set to 0
    + * PPB: The integer k2 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z).
    + */ + private readonly int k2; + + /** + * TPB: Always set to 0
    + * PPB: The integer k3 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z).
    + */ + private readonly int k3; + + /** + * The point at infinity on this curve. + */ + protected readonly F2mPoint m_infinity; + + /** + * Constructor for Trinomial Polynomial Basis (TPB). + * @param m The exponent m of + * F2m. + * @param k The integer k where xm + + * xk + 1 represents the reduction + * polynomial f(z). + * @param a The coefficient a in the Weierstrass equation + * for non-supersingular elliptic curves over + * F2m. + * @param b The coefficient b in the Weierstrass equation + * for non-supersingular elliptic curves over + * F2m. + */ + + public F2mCurve( + int m, + int k, + BigInteger a, + BigInteger b) + : this(m, k, 0, 0, a, b, null, null) + { + } + + /** + * Constructor for Trinomial Polynomial Basis (TPB). + * @param m The exponent m of + * F2m. + * @param k The integer k where xm + + * xk + 1 represents the reduction + * polynomial f(z). + * @param a The coefficient a in the Weierstrass equation + * for non-supersingular elliptic curves over + * F2m. + * @param b The coefficient b in the Weierstrass equation + * for non-supersingular elliptic curves over + * F2m. + * @param order The order of the main subgroup of the elliptic curve. + * @param cofactor The cofactor of the elliptic curve, i.e. + * #Ea(F2m) = h * n. + */ + public F2mCurve( + int m, + int k, + BigInteger a, + BigInteger b, + BigInteger order, + BigInteger cofactor) + : this(m, k, 0, 0, a, b, order, cofactor) + { + } + + /** + * Constructor for Pentanomial Polynomial Basis (PPB). + * @param m The exponent m of + * F2m. + * @param k1 The integer k1 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z). + * @param k2 The integer k2 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z). + * @param k3 The integer k3 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z). + * @param a The coefficient a in the Weierstrass equation + * for non-supersingular elliptic curves over + * F2m. + * @param b The coefficient b in the Weierstrass equation + * for non-supersingular elliptic curves over + * F2m. + */ + + public F2mCurve( + int m, + int k1, + int k2, + int k3, + BigInteger a, + BigInteger b) + : this(m, k1, k2, k3, a, b, null, null) + { + } + + /** + * Constructor for Pentanomial Polynomial Basis (PPB). + * @param m The exponent m of + * F2m. + * @param k1 The integer k1 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z). + * @param k2 The integer k2 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z). + * @param k3 The integer k3 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z). + * @param a The coefficient a in the Weierstrass equation + * for non-supersingular elliptic curves over + * F2m. + * @param b The coefficient b in the Weierstrass equation + * for non-supersingular elliptic curves over + * F2m. + * @param order The order of the main subgroup of the elliptic curve. + * @param cofactor The cofactor of the elliptic curve, i.e. + * #Ea(F2m) = h * n. + */ + public F2mCurve(int m, int k1, int k2, int k3, BigInteger a, BigInteger b, BigInteger order, + BigInteger cofactor) + : base(m, k1, k2, k3) + { + this.m = m; + this.k1 = k1; + this.k2 = k2; + this.k3 = k3; + this.m_order = order; + this.m_cofactor = cofactor; + this.m_infinity = new F2mPoint(this, null, null); + + this.m_a = FromBigInteger(a); + this.m_b = FromBigInteger(b); + this.m_coord = F2M_DEFAULT_COORDS; + } + + internal F2mCurve(int m, int k1, int k2, int k3, ECFieldElement a, ECFieldElement b, BigInteger order, + BigInteger cofactor) + : base(m, k1, k2, k3) + { + this.m = m; + this.k1 = k1; + this.k2 = k2; + this.k3 = k3; + this.m_order = order; + this.m_cofactor = cofactor; + this.m_infinity = new F2mPoint(this, null, null); + + this.m_a = a; + this.m_b = b; + this.m_coord = F2M_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new F2mCurve(m, k1, k2, k3, m_a, m_b, m_order, m_cofactor); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_AFFINE: + case COORD_HOMOGENEOUS: + case COORD_LAMBDA_PROJECTIVE: + return true; + default: + return false; + } + } + + protected override ECMultiplier CreateDefaultMultiplier() + { + if (IsKoblitz) + { + return new WTauNafMultiplier(); + } + + return base.CreateDefaultMultiplier(); + } + + public override int FieldSize + { + get { return m; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.BitLength > m) + throw new ArgumentException("value invalid for F2m field element", "x"); + + int[] ks = (k2 | k3) == 0 + ? new int[]{ k1 } + : new int[]{ k1, k2, k3 }; + + return new F2mFieldElement(m, ks, new LongArray(x)); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new F2mPoint(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new F2mPoint(this, x, y, zs); + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public int M + { + get { return m; } + } + + /** + * Return true if curve uses a Trinomial basis. + * + * @return true if curve Trinomial, false otherwise. + */ + public bool IsTrinomial() + { + return k2 == 0 && k3 == 0; + } + + public int K1 + { + get { return k1; } + } + + public int K2 + { + get { return k2; } + } + + public int K3 + { + get { return k3; } + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + int FE_LONGS = (m + 63) / 64; + + ulong[] table = new ulong[len * FE_LONGS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + ((F2mFieldElement)p.RawXCoord).x.CopyTo(table, pos); pos += FE_LONGS; + ((F2mFieldElement)p.RawYCoord).x.CopyTo(table, pos); pos += FE_LONGS; + } + } + + return new DefaultF2mLookupTable(this, table, len); + } + + private class DefaultF2mLookupTable + : AbstractECLookupTable + { + private readonly F2mCurve m_outer; + private readonly ulong[] m_table; + private readonly int m_size; + + internal DefaultF2mLookupTable(F2mCurve outer, ulong[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + int FE_LONGS = (m_outer.m + 63) / 64; + ulong[] x = new ulong[FE_LONGS], y = new ulong[FE_LONGS]; + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < FE_LONGS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + FE_LONGS + j] & MASK; + } + + pos += (FE_LONGS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + int FE_LONGS = (m_outer.m + 63) / 64; + ulong[] x = new ulong[FE_LONGS], y = new ulong[FE_LONGS]; + int pos = index * FE_LONGS * 2; + + for (int j = 0; j < FE_LONGS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + FE_LONGS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(ulong[] x, ulong[] y) + { + int m = m_outer.m; + int[] ks = m_outer.IsTrinomial() + ? new int[]{ m_outer.k1 } + : new int[]{ m_outer.k1, m_outer.k2, m_outer.k3 }; + + ECFieldElement X = new F2mFieldElement(m, ks, new LongArray(x)); + ECFieldElement Y = new F2mFieldElement(m, ks, new LongArray(y)); + return m_outer.CreateRawPoint(X, Y); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECCurve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECCurve.cs.meta new file mode 100644 index 000000000..16fa51141 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECCurve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2ba3b2a3c2430914fbced44c7df90596 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECFieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECFieldElement.cs new file mode 100644 index 000000000..9688ac10c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECFieldElement.cs @@ -0,0 +1,945 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC +{ + public abstract class ECFieldElement + { + public abstract BigInteger ToBigInteger(); + public abstract string FieldName { get; } + public abstract int FieldSize { get; } + public abstract ECFieldElement Add(ECFieldElement b); + public abstract ECFieldElement AddOne(); + public abstract ECFieldElement Subtract(ECFieldElement b); + public abstract ECFieldElement Multiply(ECFieldElement b); + public abstract ECFieldElement Divide(ECFieldElement b); + public abstract ECFieldElement Negate(); + public abstract ECFieldElement Square(); + public abstract ECFieldElement Invert(); + public abstract ECFieldElement Sqrt(); + + public virtual int BitLength + { + get { return ToBigInteger().BitLength; } + } + + public virtual bool IsOne + { + get { return BitLength == 1; } + } + + public virtual bool IsZero + { + get { return 0 == ToBigInteger().SignValue; } + } + + public virtual ECFieldElement MultiplyMinusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + return Multiply(b).Subtract(x.Multiply(y)); + } + + public virtual ECFieldElement MultiplyPlusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + return Multiply(b).Add(x.Multiply(y)); + } + + public virtual ECFieldElement SquareMinusProduct(ECFieldElement x, ECFieldElement y) + { + return Square().Subtract(x.Multiply(y)); + } + + public virtual ECFieldElement SquarePlusProduct(ECFieldElement x, ECFieldElement y) + { + return Square().Add(x.Multiply(y)); + } + + public virtual ECFieldElement SquarePow(int pow) + { + ECFieldElement r = this; + for (int i = 0; i < pow; ++i) + { + r = r.Square(); + } + return r; + } + + public virtual bool TestBitZero() + { + return ToBigInteger().TestBit(0); + } + + public override bool Equals(object obj) + { + return Equals(obj as ECFieldElement); + } + + public virtual bool Equals(ECFieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return ToBigInteger().Equals(other.ToBigInteger()); + } + + public override int GetHashCode() + { + return ToBigInteger().GetHashCode(); + } + + public override string ToString() + { + return this.ToBigInteger().ToString(16); + } + + public virtual byte[] GetEncoded() + { + return BigIntegers.AsUnsignedByteArray(GetEncodedLength(), ToBigInteger()); + } + + public virtual int GetEncodedLength() + { + return (FieldSize + 7) / 8; + } + + public virtual void EncodeTo(byte[] buf, int off) + { + BigIntegers.AsUnsignedByteArray(ToBigInteger(), buf, off, GetEncodedLength()); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void EncodeTo(Span buf) + { + BigIntegers.AsUnsignedByteArray(ToBigInteger(), buf[..GetEncodedLength()]); + } +#endif + } + + public abstract class AbstractFpFieldElement + : ECFieldElement + { + } + + public class FpFieldElement + : AbstractFpFieldElement + { + private readonly BigInteger q, r, x; + + internal static BigInteger CalculateResidue(BigInteger p) + { + int bitLength = p.BitLength; + if (bitLength >= 96) + { + BigInteger firstWord = p.ShiftRight(bitLength - 64); + if (firstWord.LongValue == -1L) + { + return BigInteger.One.ShiftLeft(bitLength).Subtract(p); + } + if ((bitLength & 7) == 0) + { + return BigInteger.One.ShiftLeft(bitLength << 1).Divide(p).Negate(); + } + } + return null; + } + + internal FpFieldElement(BigInteger q, BigInteger r, BigInteger x) + { + this.q = q; + this.r = r; + this.x = x; + } + + public override BigInteger ToBigInteger() + { + return x; + } + + /** + * return the field name for this field. + * + * @return the string "Fp". + */ + public override string FieldName + { + get { return "Fp"; } + } + + public override int FieldSize + { + get { return q.BitLength; } + } + + public BigInteger Q + { + get { return q; } + } + + public override ECFieldElement Add( + ECFieldElement b) + { + return new FpFieldElement(q, r, ModAdd(x, b.ToBigInteger())); + } + + public override ECFieldElement AddOne() + { + BigInteger x2 = x.Add(BigInteger.One); + if (x2.CompareTo(q) == 0) + { + x2 = BigInteger.Zero; + } + return new FpFieldElement(q, r, x2); + } + + public override ECFieldElement Subtract( + ECFieldElement b) + { + return new FpFieldElement(q, r, ModSubtract(x, b.ToBigInteger())); + } + + public override ECFieldElement Multiply( + ECFieldElement b) + { + return new FpFieldElement(q, r, ModMult(x, b.ToBigInteger())); + } + + public override ECFieldElement MultiplyMinusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + BigInteger ax = this.x, bx = b.ToBigInteger(), xx = x.ToBigInteger(), yx = y.ToBigInteger(); + BigInteger ab = ax.Multiply(bx); + BigInteger xy = xx.Multiply(yx); + return new FpFieldElement(q, r, ModReduce(ab.Subtract(xy))); + } + + public override ECFieldElement MultiplyPlusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + BigInteger ax = this.x, bx = b.ToBigInteger(), xx = x.ToBigInteger(), yx = y.ToBigInteger(); + BigInteger ab = ax.Multiply(bx); + BigInteger xy = xx.Multiply(yx); + BigInteger sum = ab.Add(xy); + if (r != null && r.SignValue < 0 && sum.BitLength > (q.BitLength << 1)) + { + sum = sum.Subtract(q.ShiftLeft(q.BitLength)); + } + return new FpFieldElement(q, r, ModReduce(sum)); + } + + public override ECFieldElement Divide( + ECFieldElement b) + { + return new FpFieldElement(q, r, ModMult(x, ModInverse(b.ToBigInteger()))); + } + + public override ECFieldElement Negate() + { + return x.SignValue == 0 ? this : new FpFieldElement(q, r, q.Subtract(x)); + } + + public override ECFieldElement Square() + { + return new FpFieldElement(q, r, ModMult(x, x)); + } + + public override ECFieldElement SquareMinusProduct(ECFieldElement x, ECFieldElement y) + { + BigInteger ax = this.x, xx = x.ToBigInteger(), yx = y.ToBigInteger(); + BigInteger aa = ax.Multiply(ax); + BigInteger xy = xx.Multiply(yx); + return new FpFieldElement(q, r, ModReduce(aa.Subtract(xy))); + } + + public override ECFieldElement SquarePlusProduct(ECFieldElement x, ECFieldElement y) + { + BigInteger ax = this.x, xx = x.ToBigInteger(), yx = y.ToBigInteger(); + BigInteger aa = ax.Multiply(ax); + BigInteger xy = xx.Multiply(yx); + BigInteger sum = aa.Add(xy); + if (r != null && r.SignValue < 0 && sum.BitLength > (q.BitLength << 1)) + { + sum = sum.Subtract(q.ShiftLeft(q.BitLength)); + } + return new FpFieldElement(q, r, ModReduce(sum)); + } + + public override ECFieldElement Invert() + { + // TODO Modular inversion can be faster for a (Generalized) Mersenne Prime. + return new FpFieldElement(q, r, ModInverse(x)); + } + + /** + * return a sqrt root - the routine verifies that the calculation + * returns the right value - if none exists it returns null. + */ + public override ECFieldElement Sqrt() + { + if (IsZero || IsOne) + return this; + + if (!q.TestBit(0)) + throw new NotImplementedException("even value of q"); + + if (q.TestBit(1)) // q == 4m + 3 + { + BigInteger e = q.ShiftRight(2).Add(BigInteger.One); + return CheckSqrt(new FpFieldElement(q, r, x.ModPow(e, q))); + } + + if (q.TestBit(2)) // q == 8m + 5 + { + BigInteger t1 = x.ModPow(q.ShiftRight(3), q); + BigInteger t2 = ModMult(t1, x); + BigInteger t3 = ModMult(t2, t1); + + if (t3.Equals(BigInteger.One)) + { + return CheckSqrt(new FpFieldElement(q, r, t2)); + } + + // TODO This is constant and could be precomputed + BigInteger t4 = BigInteger.Two.ModPow(q.ShiftRight(2), q); + + BigInteger y = ModMult(t2, t4); + + return CheckSqrt(new FpFieldElement(q, r, y)); + } + + // q == 8m + 1 + + BigInteger legendreExponent = q.ShiftRight(1); + if (!(x.ModPow(legendreExponent, q).Equals(BigInteger.One))) + return null; + + BigInteger X = this.x; + BigInteger fourX = ModDouble(ModDouble(X)); ; + + BigInteger k = legendreExponent.Add(BigInteger.One), qMinusOne = q.Subtract(BigInteger.One); + + BigInteger U, V; + do + { + BigInteger P; + do + { + P = BigInteger.Arbitrary(q.BitLength); + } + while (P.CompareTo(q) >= 0 + || !ModReduce(P.Multiply(P).Subtract(fourX)).ModPow(legendreExponent, q).Equals(qMinusOne)); + + BigInteger[] result = LucasSequence(P, X, k); + U = result[0]; + V = result[1]; + + if (ModMult(V, V).Equals(fourX)) + { + return new FpFieldElement(q, r, ModHalfAbs(V)); + } + } + while (U.Equals(BigInteger.One) || U.Equals(qMinusOne)); + + return null; + } + + private ECFieldElement CheckSqrt(ECFieldElement z) + { + return z.Square().Equals(this) ? z : null; + } + + private BigInteger[] LucasSequence( + BigInteger P, + BigInteger Q, + BigInteger k) + { + // TODO Research and apply "common-multiplicand multiplication here" + + int n = k.BitLength; + int s = k.GetLowestSetBit(); + + Debug.Assert(k.TestBit(s)); + + BigInteger Uh = BigInteger.One; + BigInteger Vl = BigInteger.Two; + BigInteger Vh = P; + BigInteger Ql = BigInteger.One; + BigInteger Qh = BigInteger.One; + + for (int j = n - 1; j >= s + 1; --j) + { + Ql = ModMult(Ql, Qh); + + if (k.TestBit(j)) + { + Qh = ModMult(Ql, Q); + Uh = ModMult(Uh, Vh); + Vl = ModReduce(Vh.Multiply(Vl).Subtract(P.Multiply(Ql))); + Vh = ModReduce(Vh.Multiply(Vh).Subtract(Qh.ShiftLeft(1))); + } + else + { + Qh = Ql; + Uh = ModReduce(Uh.Multiply(Vl).Subtract(Ql)); + Vh = ModReduce(Vh.Multiply(Vl).Subtract(P.Multiply(Ql))); + Vl = ModReduce(Vl.Multiply(Vl).Subtract(Ql.ShiftLeft(1))); + } + } + + Ql = ModMult(Ql, Qh); + Qh = ModMult(Ql, Q); + Uh = ModReduce(Uh.Multiply(Vl).Subtract(Ql)); + Vl = ModReduce(Vh.Multiply(Vl).Subtract(P.Multiply(Ql))); + Ql = ModMult(Ql, Qh); + + for (int j = 1; j <= s; ++j) + { + Uh = ModMult(Uh, Vl); + Vl = ModReduce(Vl.Multiply(Vl).Subtract(Ql.ShiftLeft(1))); + Ql = ModMult(Ql, Ql); + } + + return new BigInteger[] { Uh, Vl }; + } + + protected virtual BigInteger ModAdd(BigInteger x1, BigInteger x2) + { + BigInteger x3 = x1.Add(x2); + if (x3.CompareTo(q) >= 0) + { + x3 = x3.Subtract(q); + } + return x3; + } + + protected virtual BigInteger ModDouble(BigInteger x) + { + BigInteger _2x = x.ShiftLeft(1); + if (_2x.CompareTo(q) >= 0) + { + _2x = _2x.Subtract(q); + } + return _2x; + } + + protected virtual BigInteger ModHalf(BigInteger x) + { + if (x.TestBit(0)) + { + x = q.Add(x); + } + return x.ShiftRight(1); + } + + protected virtual BigInteger ModHalfAbs(BigInteger x) + { + if (x.TestBit(0)) + { + x = q.Subtract(x); + } + return x.ShiftRight(1); + } + + protected virtual BigInteger ModInverse(BigInteger x) + { + return BigIntegers.ModOddInverse(q, x); + } + + protected virtual BigInteger ModMult(BigInteger x1, BigInteger x2) + { + return ModReduce(x1.Multiply(x2)); + } + + protected virtual BigInteger ModReduce(BigInteger x) + { + if (r == null) + { + x = x.Mod(q); + } + else + { + bool negative = x.SignValue < 0; + if (negative) + { + x = x.Abs(); + } + int qLen = q.BitLength; + if (r.SignValue > 0) + { + BigInteger qMod = BigInteger.One.ShiftLeft(qLen); + bool rIsOne = r.Equals(BigInteger.One); + while (x.BitLength > (qLen + 1)) + { + BigInteger u = x.ShiftRight(qLen); + BigInteger v = x.Remainder(qMod); + if (!rIsOne) + { + u = u.Multiply(r); + } + x = u.Add(v); + } + } + else + { + int d = ((qLen - 1) & 31) + 1; + BigInteger mu = r.Negate(); + BigInteger u = mu.Multiply(x.ShiftRight(qLen - d)); + BigInteger quot = u.ShiftRight(qLen + d); + BigInteger v = quot.Multiply(q); + BigInteger bk1 = BigInteger.One.ShiftLeft(qLen + d); + v = v.Remainder(bk1); + x = x.Remainder(bk1); + x = x.Subtract(v); + if (x.SignValue < 0) + { + x = x.Add(bk1); + } + } + while (x.CompareTo(q) >= 0) + { + x = x.Subtract(q); + } + if (negative && x.SignValue != 0) + { + x = q.Subtract(x); + } + } + return x; + } + + protected virtual BigInteger ModSubtract(BigInteger x1, BigInteger x2) + { + BigInteger x3 = x1.Subtract(x2); + if (x3.SignValue < 0) + { + x3 = x3.Add(q); + } + return x3; + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + FpFieldElement other = obj as FpFieldElement; + + if (other == null) + return false; + + return Equals(other); + } + + public virtual bool Equals( + FpFieldElement other) + { + return q.Equals(other.q) && base.Equals(other); + } + + public override int GetHashCode() + { + return q.GetHashCode() ^ base.GetHashCode(); + } + } + + public abstract class AbstractF2mFieldElement + : ECFieldElement + { + public virtual ECFieldElement HalfTrace() + { + int m = FieldSize; + if ((m & 1) == 0) + throw new InvalidOperationException("Half-trace only defined for odd m"); + + //ECFieldElement ht = this; + //for (int i = 1; i < m; i += 2) + //{ + // ht = ht.SquarePow(2).Add(this); + //} + + int n = (m + 1) >> 1; + int k = 31 - Integers.NumberOfLeadingZeros(n); + int nk = 1; + + ECFieldElement ht = this; + while (k > 0) + { + ht = ht.SquarePow(nk << 1).Add(ht); + nk = n >> --k; + if (0 != (nk & 1)) + { + ht = ht.SquarePow(2).Add(this); + } + } + + return ht; + } + + public virtual bool HasFastTrace + { + get { return false; } + } + + public virtual int Trace() + { + int m = FieldSize; + + //ECFieldElement tr = this; + //for (int i = 1; i < m; ++i) + //{ + // tr = tr.Square().Add(this); + //} + + int k = 31 - Integers.NumberOfLeadingZeros(m); + int mk = 1; + + ECFieldElement tr = this; + while (k > 0) + { + tr = tr.SquarePow(mk).Add(tr); + mk = m >> --k; + if (0 != (mk & 1)) + { + tr = tr.Square().Add(this); + } + } + + if (tr.IsZero) + return 0; + if (tr.IsOne) + return 1; + throw new InvalidOperationException("Internal error in trace calculation"); + } + } + + /** + * Class representing the Elements of the finite field + * F2m in polynomial basis (PB) + * representation. Both trinomial (Tpb) and pentanomial (Ppb) polynomial + * basis representations are supported. Gaussian normal basis (GNB) + * representation is not supported. + */ + public class F2mFieldElement + : AbstractF2mFieldElement + { + /** + * Indicates gaussian normal basis representation (GNB). Number chosen + * according to X9.62. GNB is not implemented at present. + */ + public const int Gnb = 1; + + /** + * Indicates trinomial basis representation (Tpb). Number chosen + * according to X9.62. + */ + public const int Tpb = 2; + + /** + * Indicates pentanomial basis representation (Ppb). Number chosen + * according to X9.62. + */ + public const int Ppb = 3; + + /** + * Tpb or Ppb. + */ + private int representation; + + /** + * The exponent m of F2m. + */ + private int m; + + private int[] ks; + + /** + * The LongArray holding the bits. + */ + internal LongArray x; + + internal F2mFieldElement(int m, int[] ks, LongArray x) + { + this.m = m; + this.representation = (ks.Length == 1) ? Tpb : Ppb; + this.ks = ks; + this.x = x; + } + + public override int BitLength + { + get { return x.Degree(); } + } + + public override bool IsOne + { + get { return x.IsOne(); } + } + + public override bool IsZero + { + get { return x.IsZero(); } + } + + public override bool TestBitZero() + { + return x.TestBitZero(); + } + + public override BigInteger ToBigInteger() + { + return x.ToBigInteger(); + } + + public override string FieldName + { + get { return "F2m"; } + } + + public override int FieldSize + { + get { return m; } + } + + /** + * Checks, if the ECFieldElements a and b + * are elements of the same field F2m + * (having the same representation). + * @param a field element. + * @param b field element to be compared. + * @throws ArgumentException if a and b + * are not elements of the same field + * F2m (having the same + * representation). + */ + public static void CheckFieldElements( + ECFieldElement a, + ECFieldElement b) + { + if (!(a is F2mFieldElement) || !(b is F2mFieldElement)) + { + throw new ArgumentException("Field elements are not " + + "both instances of F2mFieldElement"); + } + + F2mFieldElement aF2m = (F2mFieldElement)a; + F2mFieldElement bF2m = (F2mFieldElement)b; + + if (aF2m.representation != bF2m.representation) + { + // Should never occur + throw new ArgumentException("One of the F2m field elements has incorrect representation"); + } + + if ((aF2m.m != bF2m.m) || !Arrays.AreEqual(aF2m.ks, bF2m.ks)) + { + throw new ArgumentException("Field elements are not elements of the same field F2m"); + } + } + + public override ECFieldElement Add( + ECFieldElement b) + { + // No check performed here for performance reasons. Instead the + // elements involved are checked in ECPoint.F2m + // checkFieldElements(this, b); + LongArray iarrClone = this.x.Copy(); + F2mFieldElement bF2m = (F2mFieldElement)b; + iarrClone.AddShiftedByWords(bF2m.x, 0); + return new F2mFieldElement(m, ks, iarrClone); + } + + public override ECFieldElement AddOne() + { + return new F2mFieldElement(m, ks, x.AddOne()); + } + + public override ECFieldElement Subtract( + ECFieldElement b) + { + // Addition and subtraction are the same in F2m + return Add(b); + } + + public override ECFieldElement Multiply( + ECFieldElement b) + { + // Right-to-left comb multiplication in the LongArray + // Input: Binary polynomials a(z) and b(z) of degree at most m-1 + // Output: c(z) = a(z) * b(z) mod f(z) + + // No check performed here for performance reasons. Instead the + // elements involved are checked in ECPoint.F2m + // checkFieldElements(this, b); + return new F2mFieldElement(m, ks, x.ModMultiply(((F2mFieldElement)b).x, m, ks)); + } + + public override ECFieldElement MultiplyMinusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + return MultiplyPlusProduct(b, x, y); + } + + public override ECFieldElement MultiplyPlusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + LongArray ax = this.x, bx = ((F2mFieldElement)b).x, xx = ((F2mFieldElement)x).x, yx = ((F2mFieldElement)y).x; + + LongArray ab = ax.Multiply(bx, m, ks); + LongArray xy = xx.Multiply(yx, m, ks); + + if (LongArray.AreAliased(ref ab, ref ax) || LongArray.AreAliased(ref ab, ref bx)) + { + ab = ab.Copy(); + } + + ab.AddShiftedByWords(xy, 0); + ab.Reduce(m, ks); + + return new F2mFieldElement(m, ks, ab); + } + + public override ECFieldElement Divide( + ECFieldElement b) + { + // There may be more efficient implementations + ECFieldElement bInv = b.Invert(); + return Multiply(bInv); + } + + public override ECFieldElement Negate() + { + // -x == x holds for all x in F2m + return this; + } + + public override ECFieldElement Square() + { + return new F2mFieldElement(m, ks, x.ModSquare(m, ks)); + } + + public override ECFieldElement SquareMinusProduct(ECFieldElement x, ECFieldElement y) + { + return SquarePlusProduct(x, y); + } + + public override ECFieldElement SquarePlusProduct(ECFieldElement x, ECFieldElement y) + { + LongArray ax = this.x, xx = ((F2mFieldElement)x).x, yx = ((F2mFieldElement)y).x; + + LongArray aa = ax.Square(m, ks); + LongArray xy = xx.Multiply(yx, m, ks); + + if (LongArray.AreAliased(ref aa, ref ax)) + { + aa = aa.Copy(); + } + + aa.AddShiftedByWords(xy, 0); + aa.Reduce(m, ks); + + return new F2mFieldElement(m, ks, aa); + } + + public override ECFieldElement SquarePow(int pow) + { + return pow < 1 ? this : new F2mFieldElement(m, ks, x.ModSquareN(pow, m, ks)); + } + + public override ECFieldElement Invert() + { + return new F2mFieldElement(this.m, this.ks, this.x.ModInverse(m, ks)); + } + + public override ECFieldElement Sqrt() + { + return (x.IsZero() || x.IsOne()) ? this : SquarePow(m - 1); + } + + /** + * @return the representation of the field + * F2m, either of + * {@link F2mFieldElement.Tpb} (trinomial + * basis representation) or + * {@link F2mFieldElement.Ppb} (pentanomial + * basis representation). + */ + public int Representation + { + get { return this.representation; } + } + + /** + * @return the degree m of the reduction polynomial + * f(z). + */ + public int M + { + get { return this.m; } + } + + /** + * @return Tpb: The integer k where xm + + * xk + 1 represents the reduction polynomial + * f(z).
    + * Ppb: The integer k1 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z).
    + */ + public int K1 + { + get { return this.ks[0]; } + } + + /** + * @return Tpb: Always returns 0
    + * Ppb: The integer k2 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z).
    + */ + public int K2 + { + get { return this.ks.Length >= 2 ? this.ks[1] : 0; } + } + + /** + * @return Tpb: Always set to 0
    + * Ppb: The integer k3 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z).
    + */ + public int K3 + { + get { return this.ks.Length >= 3 ? this.ks[2] : 0; } + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + F2mFieldElement other = obj as F2mFieldElement; + + if (other == null) + return false; + + return Equals(other); + } + + public virtual bool Equals( + F2mFieldElement other) + { + return ((this.m == other.m) + && (this.representation == other.representation) + && Arrays.AreEqual(this.ks, other.ks) + && (this.x.Equals(other.x))); + } + + public override int GetHashCode() + { + return x.GetHashCode() ^ m ^ Arrays.GetHashCode(ks); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECFieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECFieldElement.cs.meta new file mode 100644 index 000000000..3db10d0b5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECFieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c83e7d57be27b5d428630a56b05d18a1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECLookupTable.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECLookupTable.cs new file mode 100644 index 000000000..e3cba969b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECLookupTable.cs @@ -0,0 +1,15 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC +{ + public interface ECLookupTable + { + int Size { get; } + ECPoint Lookup(int index); + ECPoint LookupVar(int index); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECLookupTable.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECLookupTable.cs.meta new file mode 100644 index 000000000..87384ec42 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECLookupTable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6bf6a19f32e54374cbf2f2354aedc71e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECPoint.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECPoint.cs new file mode 100644 index 000000000..feec82283 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECPoint.cs @@ -0,0 +1,2187 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC +{ + /** + * base class for points on elliptic curves. + */ + public abstract class ECPoint + { + protected static ECFieldElement[] EMPTY_ZS = new ECFieldElement[0]; + + protected static ECFieldElement[] GetInitialZCoords(ECCurve curve) + { + // Cope with null curve, most commonly used by implicitlyCa + int coord = null == curve ? ECCurve.COORD_AFFINE : curve.CoordinateSystem; + + switch (coord) + { + case ECCurve.COORD_AFFINE: + case ECCurve.COORD_LAMBDA_AFFINE: + return EMPTY_ZS; + default: + break; + } + + ECFieldElement one = curve.FromBigInteger(BigInteger.One); + + switch (coord) + { + case ECCurve.COORD_HOMOGENEOUS: + case ECCurve.COORD_JACOBIAN: + case ECCurve.COORD_LAMBDA_PROJECTIVE: + return new ECFieldElement[] { one }; + case ECCurve.COORD_JACOBIAN_CHUDNOVSKY: + return new ECFieldElement[] { one, one, one }; + case ECCurve.COORD_JACOBIAN_MODIFIED: + return new ECFieldElement[] { one, curve.A }; + default: + throw new ArgumentException("unknown coordinate system"); + } + } + + protected internal readonly ECCurve m_curve; + protected internal readonly ECFieldElement m_x, m_y; + protected internal readonly ECFieldElement[] m_zs; + + protected internal IDictionary m_preCompTable = null; + + protected ECPoint(ECCurve curve, ECFieldElement x, ECFieldElement y) + : this(curve, x, y, GetInitialZCoords(curve)) + { + } + + internal ECPoint(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + this.m_curve = curve; + this.m_x = x; + this.m_y = y; + this.m_zs = zs; + } + + protected abstract bool SatisfiesCurveEquation(); + + protected virtual bool SatisfiesOrder() + { + if (BigInteger.One.Equals(Curve.Cofactor)) + return true; + + BigInteger n = Curve.Order; + + // TODO Require order to be available for all curves + + return n == null || ECAlgorithms.ReferenceMultiply(this, n).IsInfinity; + } + + public ECPoint GetDetachedPoint() + { + return Normalize().Detach(); + } + + public virtual ECCurve Curve + { + get { return m_curve; } + } + + protected abstract ECPoint Detach(); + + protected virtual int CurveCoordinateSystem + { + get + { + // Cope with null curve, most commonly used by implicitlyCa + return null == m_curve ? ECCurve.COORD_AFFINE : m_curve.CoordinateSystem; + } + } + + /** + * Returns the affine x-coordinate after checking that this point is normalized. + * + * @return The affine x-coordinate of this point + * @throws IllegalStateException if the point is not normalized + */ + public virtual ECFieldElement AffineXCoord + { + get + { + CheckNormalized(); + return XCoord; + } + } + + /** + * Returns the affine y-coordinate after checking that this point is normalized + * + * @return The affine y-coordinate of this point + * @throws IllegalStateException if the point is not normalized + */ + public virtual ECFieldElement AffineYCoord + { + get + { + CheckNormalized(); + return YCoord; + } + } + + /** + * Returns the x-coordinate. + * + * Caution: depending on the curve's coordinate system, this may not be the same value as in an + * affine coordinate system; use Normalize() to get a point where the coordinates have their + * affine values, or use AffineXCoord if you expect the point to already have been normalized. + * + * @return the x-coordinate of this point + */ + public virtual ECFieldElement XCoord + { + get { return m_x; } + } + + /** + * Returns the y-coordinate. + * + * Caution: depending on the curve's coordinate system, this may not be the same value as in an + * affine coordinate system; use Normalize() to get a point where the coordinates have their + * affine values, or use AffineYCoord if you expect the point to already have been normalized. + * + * @return the y-coordinate of this point + */ + public virtual ECFieldElement YCoord + { + get { return m_y; } + } + + public virtual ECFieldElement GetZCoord(int index) + { + return (index < 0 || index >= m_zs.Length) ? null : m_zs[index]; + } + + public virtual ECFieldElement[] GetZCoords() + { + int zsLen = m_zs.Length; + if (zsLen == 0) + { + return m_zs; + } + ECFieldElement[] copy = new ECFieldElement[zsLen]; + Array.Copy(m_zs, 0, copy, 0, zsLen); + return copy; + } + + protected internal ECFieldElement RawXCoord + { + get { return m_x; } + } + + protected internal ECFieldElement RawYCoord + { + get { return m_y; } + } + + protected internal ECFieldElement[] RawZCoords + { + get { return m_zs; } + } + + protected virtual void CheckNormalized() + { + if (!IsNormalized()) + throw new InvalidOperationException("point not in normal form"); + } + + public virtual bool IsNormalized() + { + int coord = this.CurveCoordinateSystem; + + return coord == ECCurve.COORD_AFFINE + || coord == ECCurve.COORD_LAMBDA_AFFINE + || IsInfinity + || RawZCoords[0].IsOne; + } + + /** + * Normalization ensures that any projective coordinate is 1, and therefore that the x, y + * coordinates reflect those of the equivalent point in an affine coordinate system. + * + * @return a new ECPoint instance representing the same point, but with normalized coordinates + */ + public virtual ECPoint Normalize() + { + if (this.IsInfinity) + { + return this; + } + + switch (this.CurveCoordinateSystem) + { + case ECCurve.COORD_AFFINE: + case ECCurve.COORD_LAMBDA_AFFINE: + { + return this; + } + default: + { + ECFieldElement z = RawZCoords[0]; + if (z.IsOne) + return this; + + if (null == m_curve) + throw new InvalidOperationException("Detached points must be in affine coordinates"); + + /* + * Use blinding to avoid the side-channel leak identified and analyzed in the paper + * "Yet another GCD based inversion side-channel affecting ECC implementations" by Nir + * Drucker and Shay Gueron. + * + * To blind the calculation of z^-1, choose a multiplicative (i.e. non-zero) field + * element 'b' uniformly at random, then calculate the result instead as (z * b)^-1 * b. + * Any side-channel in the implementation of 'inverse' now only leaks information about + * the value (z * b), and no longer reveals information about 'z' itself. + */ + ECFieldElement b = m_curve.RandomFieldElementMult(SecureRandom.ArbitraryRandom); + ECFieldElement zInv = z.Multiply(b).Invert().Multiply(b); + return Normalize(zInv); + } + } + } + + internal virtual ECPoint Normalize(ECFieldElement zInv) + { + switch (this.CurveCoordinateSystem) + { + case ECCurve.COORD_HOMOGENEOUS: + case ECCurve.COORD_LAMBDA_PROJECTIVE: + { + return CreateScaledPoint(zInv, zInv); + } + case ECCurve.COORD_JACOBIAN: + case ECCurve.COORD_JACOBIAN_CHUDNOVSKY: + case ECCurve.COORD_JACOBIAN_MODIFIED: + { + ECFieldElement zInv2 = zInv.Square(), zInv3 = zInv2.Multiply(zInv); + return CreateScaledPoint(zInv2, zInv3); + } + default: + { + throw new InvalidOperationException("not a projective coordinate system"); + } + } + } + + protected virtual ECPoint CreateScaledPoint(ECFieldElement sx, ECFieldElement sy) + { + return Curve.CreateRawPoint(RawXCoord.Multiply(sx), RawYCoord.Multiply(sy)); + } + + public bool IsInfinity + { + get { return m_x == null && m_y == null; } + } + + public bool IsValid() + { + return ImplIsValid(false, true); + } + + internal bool IsValidPartial() + { + return ImplIsValid(false, false); + } + + internal bool ImplIsValid(bool decompressed, bool checkOrder) + { + if (IsInfinity) + return true; + + ValidityCallback callback = new ValidityCallback(this, decompressed, checkOrder); + ValidityPreCompInfo validity = (ValidityPreCompInfo)Curve.Precompute(this, ValidityPreCompInfo.PRECOMP_NAME, callback); + return !validity.HasFailed(); + } + + public virtual ECPoint ScaleX(ECFieldElement scale) + { + return IsInfinity + ? this + : Curve.CreateRawPoint(RawXCoord.Multiply(scale), RawYCoord, RawZCoords); + } + + public virtual ECPoint ScaleXNegateY(ECFieldElement scale) + { + return IsInfinity + ? this + : Curve.CreateRawPoint(RawXCoord.Multiply(scale), RawYCoord.Negate(), RawZCoords); + } + + public virtual ECPoint ScaleY(ECFieldElement scale) + { + return IsInfinity + ? this + : Curve.CreateRawPoint(RawXCoord, RawYCoord.Multiply(scale), RawZCoords); + } + + public virtual ECPoint ScaleYNegateX(ECFieldElement scale) + { + return IsInfinity + ? this + : Curve.CreateRawPoint(RawXCoord.Negate(), RawYCoord.Multiply(scale), RawZCoords); + } + + public override bool Equals(object obj) + { + return Equals(obj as ECPoint); + } + + public virtual bool Equals(ECPoint other) + { + if (this == other) + return true; + if (null == other) + return false; + + ECCurve c1 = this.Curve, c2 = other.Curve; + bool n1 = (null == c1), n2 = (null == c2); + bool i1 = IsInfinity, i2 = other.IsInfinity; + + if (i1 || i2) + { + return (i1 && i2) && (n1 || n2 || c1.Equals(c2)); + } + + ECPoint p1 = this, p2 = other; + if (n1 && n2) + { + // Points with null curve are in affine form, so already normalized + } + else if (n1) + { + p2 = p2.Normalize(); + } + else if (n2) + { + p1 = p1.Normalize(); + } + else if (!c1.Equals(c2)) + { + return false; + } + else + { + // TODO Consider just requiring already normalized, to avoid silent performance degradation + + ECPoint[] points = new ECPoint[] { this, c1.ImportPoint(p2) }; + + // TODO This is a little strong, really only requires coZNormalizeAll to get Zs equal + c1.NormalizeAll(points); + + p1 = points[0]; + p2 = points[1]; + } + + return p1.XCoord.Equals(p2.XCoord) && p1.YCoord.Equals(p2.YCoord); + } + + public override int GetHashCode() + { + ECCurve c = this.Curve; + int hc = (null == c) ? 0 : ~c.GetHashCode(); + + if (!this.IsInfinity) + { + // TODO Consider just requiring already normalized, to avoid silent performance degradation + + ECPoint p = Normalize(); + + hc ^= p.XCoord.GetHashCode() * 17; + hc ^= p.YCoord.GetHashCode() * 257; + } + + return hc; + } + + public override string ToString() + { + if (this.IsInfinity) + { + return "INF"; + } + + StringBuilder sb = new StringBuilder(); + sb.Append('('); + sb.Append(RawXCoord); + sb.Append(','); + sb.Append(RawYCoord); + for (int i = 0; i < m_zs.Length; ++i) + { + sb.Append(','); + sb.Append(m_zs[i]); + } + sb.Append(')'); + return sb.ToString(); + } + + public virtual byte[] GetEncoded() + { + return GetEncoded(false); + } + + public abstract byte[] GetEncoded(bool compressed); + + public abstract int GetEncodedLength(bool compressed); + + public abstract void EncodeTo(bool compressed, byte[] buf, int off); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public abstract void EncodeTo(bool compressed, Span buf); +#endif + + protected internal abstract bool CompressionYTilde { get; } + + public abstract ECPoint Add(ECPoint b); + public abstract ECPoint Subtract(ECPoint b); + public abstract ECPoint Negate(); + + public virtual ECPoint TimesPow2(int e) + { + if (e < 0) + throw new ArgumentException("cannot be negative", "e"); + + ECPoint p = this; + while (--e >= 0) + { + p = p.Twice(); + } + return p; + } + + public abstract ECPoint Twice(); + public abstract ECPoint Multiply(BigInteger b); + + public virtual ECPoint TwicePlus(ECPoint b) + { + return Twice().Add(b); + } + + public virtual ECPoint ThreeTimes() + { + return TwicePlus(this); + } + + private class ValidityCallback + : IPreCompCallback + { + private readonly ECPoint m_outer; + private readonly bool m_decompressed, m_checkOrder; + + internal ValidityCallback(ECPoint outer, bool decompressed, bool checkOrder) + { + this.m_outer = outer; + this.m_decompressed = decompressed; + this.m_checkOrder = checkOrder; + } + + public PreCompInfo Precompute(PreCompInfo existing) + { + ValidityPreCompInfo info = existing as ValidityPreCompInfo; + if (info == null) + { + info = new ValidityPreCompInfo(); + } + + if (info.HasFailed()) + return info; + + if (!info.HasCurveEquationPassed()) + { + if (!m_decompressed && !m_outer.SatisfiesCurveEquation()) + { + info.ReportFailed(); + return info; + } + info.ReportCurveEquationPassed(); + } + if (m_checkOrder && !info.HasOrderPassed()) + { + if (!m_outer.SatisfiesOrder()) + { + info.ReportFailed(); + return info; + } + info.ReportOrderPassed(); + } + return info; + } + } + } + + public abstract class ECPointBase + : ECPoint + { + protected internal ECPointBase(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + protected internal ECPointBase(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + /** + * return the field element encoded with point compression. (S 4.3.6) + */ + public override byte[] GetEncoded(bool compressed) + { + if (this.IsInfinity) + return new byte[1]; + + ECPoint normed = Normalize(); + + byte[] X = normed.XCoord.GetEncoded(); + + if (compressed) + { + byte[] PO = new byte[X.Length + 1]; + PO[0] = (byte)(normed.CompressionYTilde ? 0x03 : 0x02); + Array.Copy(X, 0, PO, 1, X.Length); + return PO; + } + + byte[] Y = normed.YCoord.GetEncoded(); + + { + byte[] PO = new byte[X.Length + Y.Length + 1]; + PO[0] = 0x04; + Array.Copy(X, 0, PO, 1, X.Length); + Array.Copy(Y, 0, PO, X.Length + 1, Y.Length); + return PO; + } + } + + public override int GetEncodedLength(bool compressed) + { + if (IsInfinity) + return 1; + + if (compressed) + return 1 + XCoord.GetEncodedLength(); + + return 1 + XCoord.GetEncodedLength() + YCoord.GetEncodedLength(); + } + + public override void EncodeTo(bool compressed, byte[] buf, int off) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + EncodeTo(compressed, buf.AsSpan(off)); +#else + if (IsInfinity) + { + buf[off] = 0x00; + return; + } + + ECPoint normed = Normalize(); + ECFieldElement X = normed.XCoord, Y = normed.YCoord; + + if (compressed) + { + buf[off] = (byte)(normed.CompressionYTilde ? 0x03 : 0x02); + X.EncodeTo(buf, off + 1); + return; + } + + buf[off] = 0x04; + X.EncodeTo(buf, off + 1); + Y.EncodeTo(buf, off + 1 + X.GetEncodedLength()); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void EncodeTo(bool compressed, Span buf) + { + if (IsInfinity) + { + buf[0] = 0x00; + return; + } + + ECPoint normed = Normalize(); + ECFieldElement X = normed.XCoord, Y = normed.YCoord; + + if (compressed) + { + buf[0] = (byte)(normed.CompressionYTilde ? 0x03 : 0x02); + X.EncodeTo(buf[1..]); + return; + } + + buf[0] = 0x04; + X.EncodeTo(buf[1..]); + Y.EncodeTo(buf[(1 + X.GetEncodedLength())..]); + } +#endif + + /** + * Multiplies this ECPoint by the given number. + * @param k The multiplicator. + * @return k * this. + */ + public override ECPoint Multiply(BigInteger k) + { + return this.Curve.GetMultiplier().Multiply(this, k); + } + } + + public abstract class AbstractFpPoint + : ECPointBase + { + protected AbstractFpPoint(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + protected AbstractFpPoint(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected internal override bool CompressionYTilde + { + get { return this.AffineYCoord.TestBitZero(); } + } + + protected override bool SatisfiesCurveEquation() + { + ECFieldElement X = this.RawXCoord, Y = this.RawYCoord, A = Curve.A, B = Curve.B; + ECFieldElement lhs = Y.Square(); + + switch (CurveCoordinateSystem) + { + case ECCurve.COORD_AFFINE: + break; + case ECCurve.COORD_HOMOGENEOUS: + { + ECFieldElement Z = this.RawZCoords[0]; + if (!Z.IsOne) + { + ECFieldElement Z2 = Z.Square(), Z3 = Z.Multiply(Z2); + lhs = lhs.Multiply(Z); + A = A.Multiply(Z2); + B = B.Multiply(Z3); + } + break; + } + case ECCurve.COORD_JACOBIAN: + case ECCurve.COORD_JACOBIAN_CHUDNOVSKY: + case ECCurve.COORD_JACOBIAN_MODIFIED: + { + ECFieldElement Z = this.RawZCoords[0]; + if (!Z.IsOne) + { + ECFieldElement Z2 = Z.Square(), Z4 = Z2.Square(), Z6 = Z2.Multiply(Z4); + A = A.Multiply(Z4); + B = B.Multiply(Z6); + } + break; + } + default: + throw new InvalidOperationException("unsupported coordinate system"); + } + + ECFieldElement rhs = X.Square().Add(A).Multiply(X).Add(B); + return lhs.Equals(rhs); + } + + public override ECPoint Subtract(ECPoint b) + { + if (b.IsInfinity) + return this; + + // Add -b + return Add(b.Negate()); + } + } + + /** + * Elliptic curve points over Fp + */ + public class FpPoint + : AbstractFpPoint + { + internal FpPoint(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + if ((x == null) != (y == null)) + throw new ArgumentException("Exactly one of the field elements is null"); + } + + internal FpPoint(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new FpPoint(null, AffineXCoord, AffineYCoord); + } + + public override ECFieldElement GetZCoord(int index) + { + if (index == 1 && ECCurve.COORD_JACOBIAN_MODIFIED == this.CurveCoordinateSystem) + { + return GetJacobianModifiedW(); + } + + return base.GetZCoord(index); + } + + // B.3 pg 62 + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + if (this == b) + return Twice(); + + ECCurve curve = this.Curve; + int coord = curve.CoordinateSystem; + + ECFieldElement X1 = this.RawXCoord, Y1 = this.RawYCoord; + ECFieldElement X2 = b.RawXCoord, Y2 = b.RawYCoord; + + switch (coord) + { + case ECCurve.COORD_AFFINE: + { + ECFieldElement dx = X2.Subtract(X1), dy = Y2.Subtract(Y1); + + if (dx.IsZero) + { + if (dy.IsZero) + { + // this == b, i.e. this must be doubled + return Twice(); + } + + // this == -b, i.e. the result is the point at infinity + return Curve.Infinity; + } + + ECFieldElement gamma = dy.Divide(dx); + ECFieldElement X3 = gamma.Square().Subtract(X1).Subtract(X2); + ECFieldElement Y3 = gamma.Multiply(X1.Subtract(X3)).Subtract(Y1); + + return new FpPoint(Curve, X3, Y3); + } + + case ECCurve.COORD_HOMOGENEOUS: + { + ECFieldElement Z1 = this.RawZCoords[0]; + ECFieldElement Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + bool Z2IsOne = Z2.IsOne; + + ECFieldElement u1 = Z1IsOne ? Y2 : Y2.Multiply(Z1); + ECFieldElement u2 = Z2IsOne ? Y1 : Y1.Multiply(Z2); + ECFieldElement u = u1.Subtract(u2); + ECFieldElement v1 = Z1IsOne ? X2 : X2.Multiply(Z1); + ECFieldElement v2 = Z2IsOne ? X1 : X1.Multiply(Z2); + ECFieldElement v = v1.Subtract(v2); + + // Check if b == this or b == -this + if (v.IsZero) + { + if (u.IsZero) + { + // this == b, i.e. this must be doubled + return this.Twice(); + } + + // this == -b, i.e. the result is the point at infinity + return curve.Infinity; + } + + // TODO Optimize for when w == 1 + ECFieldElement w = Z1IsOne ? Z2 : Z2IsOne ? Z1 : Z1.Multiply(Z2); + ECFieldElement vSquared = v.Square(); + ECFieldElement vCubed = vSquared.Multiply(v); + ECFieldElement vSquaredV2 = vSquared.Multiply(v2); + ECFieldElement A = u.Square().Multiply(w).Subtract(vCubed).Subtract(Two(vSquaredV2)); + + ECFieldElement X3 = v.Multiply(A); + ECFieldElement Y3 = vSquaredV2.Subtract(A).MultiplyMinusProduct(u, u2, vCubed); + ECFieldElement Z3 = vCubed.Multiply(w); + + return new FpPoint(curve, X3, Y3, new ECFieldElement[] { Z3 }); + } + + case ECCurve.COORD_JACOBIAN: + case ECCurve.COORD_JACOBIAN_MODIFIED: + { + ECFieldElement Z1 = this.RawZCoords[0]; + ECFieldElement Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + + ECFieldElement X3, Y3, Z3, Z3Squared = null; + + if (!Z1IsOne && Z1.Equals(Z2)) + { + // TODO Make this available as public method coZAdd? + + ECFieldElement dx = X1.Subtract(X2), dy = Y1.Subtract(Y2); + if (dx.IsZero) + { + if (dy.IsZero) + { + return Twice(); + } + return curve.Infinity; + } + + ECFieldElement C = dx.Square(); + ECFieldElement W1 = X1.Multiply(C), W2 = X2.Multiply(C); + ECFieldElement A1 = W1.Subtract(W2).Multiply(Y1); + + X3 = dy.Square().Subtract(W1).Subtract(W2); + Y3 = W1.Subtract(X3).Multiply(dy).Subtract(A1); + Z3 = dx; + + if (Z1IsOne) + { + Z3Squared = C; + } + else + { + Z3 = Z3.Multiply(Z1); + } + } + else + { + ECFieldElement Z1Squared, U2, S2; + if (Z1IsOne) + { + Z1Squared = Z1; U2 = X2; S2 = Y2; + } + else + { + Z1Squared = Z1.Square(); + U2 = Z1Squared.Multiply(X2); + ECFieldElement Z1Cubed = Z1Squared.Multiply(Z1); + S2 = Z1Cubed.Multiply(Y2); + } + + bool Z2IsOne = Z2.IsOne; + ECFieldElement Z2Squared, U1, S1; + if (Z2IsOne) + { + Z2Squared = Z2; U1 = X1; S1 = Y1; + } + else + { + Z2Squared = Z2.Square(); + U1 = Z2Squared.Multiply(X1); + ECFieldElement Z2Cubed = Z2Squared.Multiply(Z2); + S1 = Z2Cubed.Multiply(Y1); + } + + ECFieldElement H = U1.Subtract(U2); + ECFieldElement R = S1.Subtract(S2); + + // Check if b == this or b == -this + if (H.IsZero) + { + if (R.IsZero) + { + // this == b, i.e. this must be doubled + return this.Twice(); + } + + // this == -b, i.e. the result is the point at infinity + return curve.Infinity; + } + + ECFieldElement HSquared = H.Square(); + ECFieldElement G = HSquared.Multiply(H); + ECFieldElement V = HSquared.Multiply(U1); + + X3 = R.Square().Add(G).Subtract(Two(V)); + Y3 = V.Subtract(X3).MultiplyMinusProduct(R, G, S1); + + Z3 = H; + if (!Z1IsOne) + { + Z3 = Z3.Multiply(Z1); + } + if (!Z2IsOne) + { + Z3 = Z3.Multiply(Z2); + } + + // Alternative calculation of Z3 using fast square + //X3 = four(X3); + //Y3 = eight(Y3); + //Z3 = doubleProductFromSquares(Z1, Z2, Z1Squared, Z2Squared).Multiply(H); + + if (Z3 == H) + { + Z3Squared = HSquared; + } + } + + ECFieldElement[] zs; + if (coord == ECCurve.COORD_JACOBIAN_MODIFIED) + { + // TODO If the result will only be used in a subsequent addition, we don't need W3 + ECFieldElement W3 = CalculateJacobianModifiedW(Z3, Z3Squared); + + zs = new ECFieldElement[] { Z3, W3 }; + } + else + { + zs = new ECFieldElement[] { Z3 }; + } + + return new FpPoint(curve, X3, Y3, zs); + } + + default: + { + throw new InvalidOperationException("unsupported coordinate system"); + } + } + } + + // B.3 pg 62 + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement Y1 = this.RawYCoord; + if (Y1.IsZero) + return curve.Infinity; + + int coord = curve.CoordinateSystem; + + ECFieldElement X1 = this.RawXCoord; + + switch (coord) + { + case ECCurve.COORD_AFFINE: + { + ECFieldElement X1Squared = X1.Square(); + ECFieldElement gamma = Three(X1Squared).Add(this.Curve.A).Divide(Two(Y1)); + ECFieldElement X3 = gamma.Square().Subtract(Two(X1)); + ECFieldElement Y3 = gamma.Multiply(X1.Subtract(X3)).Subtract(Y1); + + return new FpPoint(Curve, X3, Y3); + } + + case ECCurve.COORD_HOMOGENEOUS: + { + ECFieldElement Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + + // TODO Optimize for small negative a4 and -3 + ECFieldElement w = curve.A; + if (!w.IsZero && !Z1IsOne) + { + w = w.Multiply(Z1.Square()); + } + w = w.Add(Three(X1.Square())); + + ECFieldElement s = Z1IsOne ? Y1 : Y1.Multiply(Z1); + ECFieldElement t = Z1IsOne ? Y1.Square() : s.Multiply(Y1); + ECFieldElement B = X1.Multiply(t); + ECFieldElement _4B = Four(B); + ECFieldElement h = w.Square().Subtract(Two(_4B)); + + ECFieldElement _2s = Two(s); + ECFieldElement X3 = h.Multiply(_2s); + ECFieldElement _2t = Two(t); + ECFieldElement Y3 = _4B.Subtract(h).Multiply(w).Subtract(Two(_2t.Square())); + ECFieldElement _4sSquared = Z1IsOne ? Two(_2t) : _2s.Square(); + ECFieldElement Z3 = Two(_4sSquared).Multiply(s); + + return new FpPoint(curve, X3, Y3, new ECFieldElement[] { Z3 }); + } + + case ECCurve.COORD_JACOBIAN: + { + ECFieldElement Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + + ECFieldElement Y1Squared = Y1.Square(); + ECFieldElement T = Y1Squared.Square(); + + ECFieldElement a4 = curve.A; + ECFieldElement a4Neg = a4.Negate(); + + ECFieldElement M, S; + if (a4Neg.ToBigInteger().Equals(BigInteger.ValueOf(3))) + { + ECFieldElement Z1Squared = Z1IsOne ? Z1 : Z1.Square(); + M = Three(X1.Add(Z1Squared).Multiply(X1.Subtract(Z1Squared))); + S = Four(Y1Squared.Multiply(X1)); + } + else + { + ECFieldElement X1Squared = X1.Square(); + M = Three(X1Squared); + if (Z1IsOne) + { + M = M.Add(a4); + } + else if (!a4.IsZero) + { + ECFieldElement Z1Squared = Z1IsOne ? Z1 : Z1.Square(); + ECFieldElement Z1Pow4 = Z1Squared.Square(); + if (a4Neg.BitLength < a4.BitLength) + { + M = M.Subtract(Z1Pow4.Multiply(a4Neg)); + } + else + { + M = M.Add(Z1Pow4.Multiply(a4)); + } + } + //S = two(doubleProductFromSquares(X1, Y1Squared, X1Squared, T)); + S = Four(X1.Multiply(Y1Squared)); + } + + ECFieldElement X3 = M.Square().Subtract(Two(S)); + ECFieldElement Y3 = S.Subtract(X3).Multiply(M).Subtract(Eight(T)); + + ECFieldElement Z3 = Two(Y1); + if (!Z1IsOne) + { + Z3 = Z3.Multiply(Z1); + } + + // Alternative calculation of Z3 using fast square + //ECFieldElement Z3 = doubleProductFromSquares(Y1, Z1, Y1Squared, Z1Squared); + + return new FpPoint(curve, X3, Y3, new ECFieldElement[] { Z3 }); + } + + case ECCurve.COORD_JACOBIAN_MODIFIED: + { + return TwiceJacobianModified(true); + } + + default: + { + throw new InvalidOperationException("unsupported coordinate system"); + } + } + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this == b) + return ThreeTimes(); + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECFieldElement Y1 = this.RawYCoord; + if (Y1.IsZero) + return b; + + ECCurve curve = this.Curve; + int coord = curve.CoordinateSystem; + + switch (coord) + { + case ECCurve.COORD_AFFINE: + { + ECFieldElement X1 = this.RawXCoord; + ECFieldElement X2 = b.RawXCoord, Y2 = b.RawYCoord; + + ECFieldElement dx = X2.Subtract(X1), dy = Y2.Subtract(Y1); + + if (dx.IsZero) + { + if (dy.IsZero) + { + // this == b i.e. the result is 3P + return ThreeTimes(); + } + + // this == -b, i.e. the result is P + return this; + } + + /* + * Optimized calculation of 2P + Q, as described in "Trading Inversions for + * Multiplications in Elliptic Curve Cryptography", by Ciet, Joye, Lauter, Montgomery. + */ + + ECFieldElement X = dx.Square(), Y = dy.Square(); + ECFieldElement d = X.Multiply(Two(X1).Add(X2)).Subtract(Y); + if (d.IsZero) + { + return Curve.Infinity; + } + + ECFieldElement D = d.Multiply(dx); + ECFieldElement I = D.Invert(); + ECFieldElement L1 = d.Multiply(I).Multiply(dy); + ECFieldElement L2 = Two(Y1).Multiply(X).Multiply(dx).Multiply(I).Subtract(L1); + ECFieldElement X4 = (L2.Subtract(L1)).Multiply(L1.Add(L2)).Add(X2); + ECFieldElement Y4 = (X1.Subtract(X4)).Multiply(L2).Subtract(Y1); + + return new FpPoint(Curve, X4, Y4); + } + case ECCurve.COORD_JACOBIAN_MODIFIED: + { + return TwiceJacobianModified(false).Add(b); + } + default: + { + return Twice().Add(b); + } + } + } + + public override ECPoint ThreeTimes() + { + if (this.IsInfinity) + return this; + + ECFieldElement Y1 = this.RawYCoord; + if (Y1.IsZero) + return this; + + ECCurve curve = this.Curve; + int coord = curve.CoordinateSystem; + + switch (coord) + { + case ECCurve.COORD_AFFINE: + { + ECFieldElement X1 = this.RawXCoord; + + ECFieldElement _2Y1 = Two(Y1); + ECFieldElement X = _2Y1.Square(); + ECFieldElement Z = Three(X1.Square()).Add(Curve.A); + ECFieldElement Y = Z.Square(); + + ECFieldElement d = Three(X1).Multiply(X).Subtract(Y); + if (d.IsZero) + { + return Curve.Infinity; + } + + ECFieldElement D = d.Multiply(_2Y1); + ECFieldElement I = D.Invert(); + ECFieldElement L1 = d.Multiply(I).Multiply(Z); + ECFieldElement L2 = X.Square().Multiply(I).Subtract(L1); + + ECFieldElement X4 = (L2.Subtract(L1)).Multiply(L1.Add(L2)).Add(X1); + ECFieldElement Y4 = (X1.Subtract(X4)).Multiply(L2).Subtract(Y1); + return new FpPoint(Curve, X4, Y4); + } + case ECCurve.COORD_JACOBIAN_MODIFIED: + { + return TwiceJacobianModified(false).Add(this); + } + default: + { + // NOTE: Be careful about recursions between TwicePlus and ThreeTimes + return Twice().Add(this); + } + } + } + + public override ECPoint TimesPow2(int e) + { + if (e < 0) + throw new ArgumentException("cannot be negative", "e"); + if (e == 0 || this.IsInfinity) + return this; + if (e == 1) + return Twice(); + + ECCurve curve = this.Curve; + + ECFieldElement Y1 = this.RawYCoord; + if (Y1.IsZero) + return curve.Infinity; + + int coord = curve.CoordinateSystem; + + ECFieldElement W1 = curve.A; + ECFieldElement X1 = this.RawXCoord; + ECFieldElement Z1 = this.RawZCoords.Length < 1 ? curve.FromBigInteger(BigInteger.One) : this.RawZCoords[0]; + + if (!Z1.IsOne) + { + switch (coord) + { + case ECCurve.COORD_HOMOGENEOUS: + ECFieldElement Z1Sq = Z1.Square(); + X1 = X1.Multiply(Z1); + Y1 = Y1.Multiply(Z1Sq); + W1 = CalculateJacobianModifiedW(Z1, Z1Sq); + break; + case ECCurve.COORD_JACOBIAN: + W1 = CalculateJacobianModifiedW(Z1, null); + break; + case ECCurve.COORD_JACOBIAN_MODIFIED: + W1 = GetJacobianModifiedW(); + break; + } + } + + for (int i = 0; i < e; ++i) + { + if (Y1.IsZero) + return curve.Infinity; + + ECFieldElement X1Squared = X1.Square(); + ECFieldElement M = Three(X1Squared); + ECFieldElement _2Y1 = Two(Y1); + ECFieldElement _2Y1Squared = _2Y1.Multiply(Y1); + ECFieldElement S = Two(X1.Multiply(_2Y1Squared)); + ECFieldElement _4T = _2Y1Squared.Square(); + ECFieldElement _8T = Two(_4T); + + if (!W1.IsZero) + { + M = M.Add(W1); + W1 = Two(_8T.Multiply(W1)); + } + + X1 = M.Square().Subtract(Two(S)); + Y1 = M.Multiply(S.Subtract(X1)).Subtract(_8T); + Z1 = Z1.IsOne ? _2Y1 : _2Y1.Multiply(Z1); + } + + switch (coord) + { + case ECCurve.COORD_AFFINE: + ECFieldElement zInv = Z1.Invert(), zInv2 = zInv.Square(), zInv3 = zInv2.Multiply(zInv); + return new FpPoint(curve, X1.Multiply(zInv2), Y1.Multiply(zInv3)); + case ECCurve.COORD_HOMOGENEOUS: + X1 = X1.Multiply(Z1); + Z1 = Z1.Multiply(Z1.Square()); + return new FpPoint(curve, X1, Y1, new ECFieldElement[] { Z1 }); + case ECCurve.COORD_JACOBIAN: + return new FpPoint(curve, X1, Y1, new ECFieldElement[] { Z1 }); + case ECCurve.COORD_JACOBIAN_MODIFIED: + return new FpPoint(curve, X1, Y1, new ECFieldElement[] { Z1, W1 }); + default: + throw new InvalidOperationException("unsupported coordinate system"); + } + } + + protected virtual ECFieldElement Two(ECFieldElement x) + { + return x.Add(x); + } + + protected virtual ECFieldElement Three(ECFieldElement x) + { + return Two(x).Add(x); + } + + protected virtual ECFieldElement Four(ECFieldElement x) + { + return Two(Two(x)); + } + + protected virtual ECFieldElement Eight(ECFieldElement x) + { + return Four(Two(x)); + } + + protected virtual ECFieldElement DoubleProductFromSquares(ECFieldElement a, ECFieldElement b, + ECFieldElement aSquared, ECFieldElement bSquared) + { + /* + * NOTE: If squaring in the field is faster than multiplication, then this is a quicker + * way to calculate 2.A.B, if A^2 and B^2 are already known. + */ + return a.Add(b).Square().Subtract(aSquared).Subtract(bSquared); + } + + public override ECPoint Negate() + { + if (IsInfinity) + return this; + + ECCurve curve = Curve; + int coord = curve.CoordinateSystem; + + if (ECCurve.COORD_AFFINE != coord) + { + return new FpPoint(curve, RawXCoord, RawYCoord.Negate(), RawZCoords); + } + + return new FpPoint(curve, RawXCoord, RawYCoord.Negate()); + } + + protected virtual ECFieldElement CalculateJacobianModifiedW(ECFieldElement Z, ECFieldElement ZSquared) + { + ECFieldElement a4 = this.Curve.A; + if (a4.IsZero || Z.IsOne) + return a4; + + if (ZSquared == null) + { + ZSquared = Z.Square(); + } + + ECFieldElement W = ZSquared.Square(); + ECFieldElement a4Neg = a4.Negate(); + if (a4Neg.BitLength < a4.BitLength) + { + W = W.Multiply(a4Neg).Negate(); + } + else + { + W = W.Multiply(a4); + } + return W; + } + + protected virtual ECFieldElement GetJacobianModifiedW() + { + ECFieldElement[] ZZ = this.RawZCoords; + ECFieldElement W = ZZ[1]; + if (W == null) + { + // NOTE: Rarely, TwicePlus will result in the need for a lazy W1 calculation here + ZZ[1] = W = CalculateJacobianModifiedW(ZZ[0], null); + } + return W; + } + + protected virtual FpPoint TwiceJacobianModified(bool calculateW) + { + ECFieldElement X1 = this.RawXCoord, Y1 = this.RawYCoord, Z1 = this.RawZCoords[0], W1 = GetJacobianModifiedW(); + + ECFieldElement X1Squared = X1.Square(); + ECFieldElement M = Three(X1Squared).Add(W1); + ECFieldElement _2Y1 = Two(Y1); + ECFieldElement _2Y1Squared = _2Y1.Multiply(Y1); + ECFieldElement S = Two(X1.Multiply(_2Y1Squared)); + ECFieldElement X3 = M.Square().Subtract(Two(S)); + ECFieldElement _4T = _2Y1Squared.Square(); + ECFieldElement _8T = Two(_4T); + ECFieldElement Y3 = M.Multiply(S.Subtract(X3)).Subtract(_8T); + ECFieldElement W3 = calculateW ? Two(_8T.Multiply(W1)) : null; + ECFieldElement Z3 = Z1.IsOne ? _2Y1 : _2Y1.Multiply(Z1); + + return new FpPoint(this.Curve, X3, Y3, new ECFieldElement[] { Z3, W3 }); + } + } + + public abstract class AbstractF2mPoint + : ECPointBase + { + protected AbstractF2mPoint(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + protected AbstractF2mPoint(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override bool SatisfiesCurveEquation() + { + ECCurve curve = Curve; + ECFieldElement X = this.RawXCoord, Y = this.RawYCoord, A = curve.A, B = curve.B; + ECFieldElement lhs, rhs; + + int coord = curve.CoordinateSystem; + if (coord == ECCurve.COORD_LAMBDA_PROJECTIVE) + { + ECFieldElement Z = this.RawZCoords[0]; + bool ZIsOne = Z.IsOne; + + if (X.IsZero) + { + // NOTE: For x == 0, we expect the affine-y instead of the lambda-y + lhs = Y.Square(); + rhs = B; + if (!ZIsOne) + { + ECFieldElement Z2 = Z.Square(); + rhs = rhs.Multiply(Z2); + } + } + else + { + ECFieldElement L = Y, X2 = X.Square(); + if (ZIsOne) + { + lhs = L.Square().Add(L).Add(A); + rhs = X2.Square().Add(B); + } + else + { + ECFieldElement Z2 = Z.Square(), Z4 = Z2.Square(); + lhs = L.Add(Z).MultiplyPlusProduct(L, A, Z2); + // TODO If sqrt(b) is precomputed this can be simplified to a single square + rhs = X2.SquarePlusProduct(B, Z4); + } + lhs = lhs.Multiply(X2); + } + } + else + { + lhs = Y.Add(X).Multiply(Y); + + switch (coord) + { + case ECCurve.COORD_AFFINE: + break; + case ECCurve.COORD_HOMOGENEOUS: + { + ECFieldElement Z = this.RawZCoords[0]; + if (!Z.IsOne) + { + ECFieldElement Z2 = Z.Square(), Z3 = Z.Multiply(Z2); + lhs = lhs.Multiply(Z); + A = A.Multiply(Z); + B = B.Multiply(Z3); + } + break; + } + default: + throw new InvalidOperationException("unsupported coordinate system"); + } + + rhs = X.Add(A).Multiply(X.Square()).Add(B); + } + + return lhs.Equals(rhs); + } + + protected override bool SatisfiesOrder() + { + ECCurve curve = Curve; + BigInteger cofactor = curve.Cofactor; + if (BigInteger.Two.Equals(cofactor)) + { + /* + * Check that 0 == Tr(X + A); then there exists a solution to L^2 + L = X + A, and + * so a halving is possible, so this point is the double of another. + * + * Note: Tr(A) == 1 for cofactor 2 curves. + */ + ECPoint N = this.Normalize(); + ECFieldElement X = N.AffineXCoord; + return 0 != ((AbstractF2mFieldElement)X).Trace(); + } + if (BigInteger.ValueOf(4).Equals(cofactor)) + { + /* + * Solve L^2 + L = X + A to find the half of this point, if it exists (fail if not). + * + * Note: Tr(A) == 0 for cofactor 4 curves. + */ + ECPoint N = this.Normalize(); + ECFieldElement X = N.AffineXCoord; + ECFieldElement L = ((AbstractF2mCurve)curve).SolveQuadraticEquation(X.Add(curve.A)); + if (null == L) + return false; + + /* + * A solution exists, therefore 0 == Tr(X + A) == Tr(X). + */ + ECFieldElement Y = N.AffineYCoord; + ECFieldElement T = X.Multiply(L).Add(Y); + + /* + * Either T or (T + X) is the square of a half-point's x coordinate (hx). In either + * case, the half-point can be halved again when 0 == Tr(hx + A). + * + * Note: Tr(hx + A) == Tr(hx) == Tr(hx^2) == Tr(T) == Tr(T + X) + * + * Check that 0 == Tr(T); then there exists a solution to L^2 + L = hx + A, and so a + * second halving is possible and this point is four times some other. + */ + return 0 == ((AbstractF2mFieldElement)T).Trace(); + } + + return base.SatisfiesOrder(); + } + + public override ECPoint ScaleX(ECFieldElement scale) + { + if (this.IsInfinity) + return this; + + switch (CurveCoordinateSystem) + { + case ECCurve.COORD_LAMBDA_AFFINE: + { + // Y is actually Lambda (X + Y/X) here + ECFieldElement X = RawXCoord, L = RawYCoord; + + ECFieldElement X2 = X.Multiply(scale); + ECFieldElement L2 = L.Add(X).Divide(scale).Add(X2); + + return Curve.CreateRawPoint(X, L2, RawZCoords); + } + case ECCurve.COORD_LAMBDA_PROJECTIVE: + { + // Y is actually Lambda (X + Y/X) here + ECFieldElement X = RawXCoord, L = RawYCoord, Z = RawZCoords[0]; + + // We scale the Z coordinate also, to avoid an inversion + ECFieldElement X2 = X.Multiply(scale.Square()); + ECFieldElement L2 = L.Add(X).Add(X2); + ECFieldElement Z2 = Z.Multiply(scale); + + return Curve.CreateRawPoint(X, L2, new ECFieldElement[] { Z2 }); + } + default: + { + return base.ScaleX(scale); + } + } + } + + public override ECPoint ScaleXNegateY(ECFieldElement scale) + { + return ScaleX(scale); + } + + public override ECPoint ScaleY(ECFieldElement scale) + { + if (this.IsInfinity) + return this; + + switch (CurveCoordinateSystem) + { + case ECCurve.COORD_LAMBDA_AFFINE: + case ECCurve.COORD_LAMBDA_PROJECTIVE: + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + // Y is actually Lambda (X + Y/X) here + ECFieldElement L2 = L.Add(X).Multiply(scale).Add(X); + + return Curve.CreateRawPoint(X, L2, RawZCoords); + } + default: + { + return base.ScaleY(scale); + } + } + } + + public override ECPoint ScaleYNegateX(ECFieldElement scale) + { + return ScaleY(scale); + } + + public override ECPoint Subtract(ECPoint b) + { + if (b.IsInfinity) + return this; + + // Add -b + return Add(b.Negate()); + } + + public virtual AbstractF2mPoint Tau() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + int coord = curve.CoordinateSystem; + + ECFieldElement X1 = this.RawXCoord; + + switch (coord) + { + case ECCurve.COORD_AFFINE: + case ECCurve.COORD_LAMBDA_AFFINE: + { + ECFieldElement Y1 = this.RawYCoord; + return (AbstractF2mPoint)curve.CreateRawPoint(X1.Square(), Y1.Square()); + } + case ECCurve.COORD_HOMOGENEOUS: + case ECCurve.COORD_LAMBDA_PROJECTIVE: + { + ECFieldElement Y1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + return (AbstractF2mPoint)curve.CreateRawPoint(X1.Square(), Y1.Square(), + new ECFieldElement[] { Z1.Square() }); + } + default: + { + throw new InvalidOperationException("unsupported coordinate system"); + } + } + } + + public virtual AbstractF2mPoint TauPow(int pow) + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + int coord = curve.CoordinateSystem; + + ECFieldElement X1 = this.RawXCoord; + + switch (coord) + { + case ECCurve.COORD_AFFINE: + case ECCurve.COORD_LAMBDA_AFFINE: + { + ECFieldElement Y1 = this.RawYCoord; + return (AbstractF2mPoint)curve.CreateRawPoint(X1.SquarePow(pow), Y1.SquarePow(pow)); + } + case ECCurve.COORD_HOMOGENEOUS: + case ECCurve.COORD_LAMBDA_PROJECTIVE: + { + ECFieldElement Y1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + return (AbstractF2mPoint)curve.CreateRawPoint(X1.SquarePow(pow), Y1.SquarePow(pow), + new ECFieldElement[] { Z1.SquarePow(pow) }); + } + default: + { + throw new InvalidOperationException("unsupported coordinate system"); + } + } + } + } + + /** + * Elliptic curve points over F2m + */ + public class F2mPoint + : AbstractF2mPoint + { + internal F2mPoint(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + if ((x == null) != (y == null)) + { + throw new ArgumentException("Exactly one of the field elements is null"); + } + + if (x != null) + { + // Check if x and y are elements of the same field + F2mFieldElement.CheckFieldElements(x, y); + + // Check if x and a are elements of the same field + if (curve != null) + { + F2mFieldElement.CheckFieldElements(x, curve.A); + } + } + } + + internal F2mPoint(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new F2mPoint(null, AffineXCoord, AffineYCoord); + } + + public override ECFieldElement YCoord + { + get + { + int coord = this.CurveCoordinateSystem; + + switch (coord) + { + case ECCurve.COORD_LAMBDA_AFFINE: + case ECCurve.COORD_LAMBDA_PROJECTIVE: + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + if (this.IsInfinity || X.IsZero) + return L; + + // Y is actually Lambda (X + Y/X) here; convert to affine value on the fly + ECFieldElement Y = L.Add(X).Multiply(X); + if (ECCurve.COORD_LAMBDA_PROJECTIVE == coord) + { + ECFieldElement Z = RawZCoords[0]; + if (!Z.IsOne) + { + Y = Y.Divide(Z); + } + } + return Y; + } + default: + { + return RawYCoord; + } + } + } + } + + protected internal override bool CompressionYTilde + { + get + { + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + { + return false; + } + + ECFieldElement Y = this.RawYCoord; + + switch (this.CurveCoordinateSystem) + { + case ECCurve.COORD_LAMBDA_AFFINE: + case ECCurve.COORD_LAMBDA_PROJECTIVE: + { + // Y is actually Lambda (X + Y/X) here + return Y.TestBitZero() != X.TestBitZero(); + } + default: + { + return Y.Divide(X).TestBitZero(); + } + } + } + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + + ECCurve curve = this.Curve; + int coord = curve.CoordinateSystem; + + ECFieldElement X1 = this.RawXCoord; + ECFieldElement X2 = b.RawXCoord; + + switch (coord) + { + case ECCurve.COORD_AFFINE: + { + ECFieldElement Y1 = this.RawYCoord; + ECFieldElement Y2 = b.RawYCoord; + + ECFieldElement dx = X1.Add(X2), dy = Y1.Add(Y2); + if (dx.IsZero) + { + if (dy.IsZero) + { + return Twice(); + } + + return curve.Infinity; + } + + ECFieldElement L = dy.Divide(dx); + + ECFieldElement X3 = L.Square().Add(L).Add(dx).Add(curve.A); + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + + return new F2mPoint(curve, X3, Y3); + } + case ECCurve.COORD_HOMOGENEOUS: + { + ECFieldElement Y1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement Y2 = b.RawYCoord, Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement U1 = Y2, V1 = X2; + if (!Z1IsOne) + { + U1 = U1.Multiply(Z1); + V1 = V1.Multiply(Z1); + } + + bool Z2IsOne = Z2.IsOne; + ECFieldElement U2 = Y1, V2 = X1; + if (!Z2IsOne) + { + U2 = U2.Multiply(Z2); + V2 = V2.Multiply(Z2); + } + + ECFieldElement U = U1.Add(U2); + ECFieldElement V = V1.Add(V2); + + if (V.IsZero) + { + if (U.IsZero) + { + return Twice(); + } + + return curve.Infinity; + } + + ECFieldElement VSq = V.Square(); + ECFieldElement VCu = VSq.Multiply(V); + ECFieldElement W = Z1IsOne ? Z2 : Z2IsOne ? Z1 : Z1.Multiply(Z2); + ECFieldElement uv = U.Add(V); + ECFieldElement A = uv.MultiplyPlusProduct(U, VSq, curve.A).Multiply(W).Add(VCu); + + ECFieldElement X3 = V.Multiply(A); + ECFieldElement VSqZ2 = Z2IsOne ? VSq : VSq.Multiply(Z2); + ECFieldElement Y3 = U.MultiplyPlusProduct(X1, V, Y1).MultiplyPlusProduct(VSqZ2, uv, A); + ECFieldElement Z3 = VCu.Multiply(W); + + return new F2mPoint(curve, X3, Y3, new ECFieldElement[] { Z3 }); + } + case ECCurve.COORD_LAMBDA_PROJECTIVE: + { + if (X1.IsZero) + { + if (X2.IsZero) + return curve.Infinity; + + return b.Add(this); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord, Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement U2 = X2, S2 = L2; + if (!Z1IsOne) + { + U2 = U2.Multiply(Z1); + S2 = S2.Multiply(Z1); + } + + bool Z2IsOne = Z2.IsOne; + ECFieldElement U1 = X1, S1 = L1; + if (!Z2IsOne) + { + U1 = U1.Multiply(Z2); + S1 = S1.Multiply(Z2); + } + + ECFieldElement A = S1.Add(S2); + ECFieldElement B = U1.Add(U2); + + if (B.IsZero) + { + if (A.IsZero) + { + return Twice(); + } + + return curve.Infinity; + } + + ECFieldElement X3, L3, Z3; + if (X2.IsZero) + { + // TODO This can probably be optimized quite a bit + ECPoint p = this.Normalize(); + X1 = p.RawXCoord; + ECFieldElement Y1 = p.YCoord; + + ECFieldElement Y2 = L2; + ECFieldElement L = Y1.Add(Y2).Divide(X1); + + X3 = L.Square().Add(L).Add(X1).Add(curve.A); + if (X3.IsZero) + { + return new F2mPoint(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + L3 = Y3.Divide(X3).Add(X3); + Z3 = curve.FromBigInteger(BigInteger.One); + } + else + { + B = B.Square(); + + ECFieldElement AU1 = A.Multiply(U1); + ECFieldElement AU2 = A.Multiply(U2); + + X3 = AU1.Multiply(AU2); + if (X3.IsZero) + { + return new F2mPoint(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement ABZ2 = A.Multiply(B); + if (!Z2IsOne) + { + ABZ2 = ABZ2.Multiply(Z2); + } + + L3 = AU2.Add(B).SquarePlusProduct(ABZ2, L1.Add(Z1)); + + Z3 = ABZ2; + if (!Z1IsOne) + { + Z3 = Z3.Multiply(Z1); + } + } + + return new F2mPoint(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + default: + { + throw new InvalidOperationException("unsupported coordinate system"); + } + } + } + + /* (non-Javadoc) + * @see BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.ECPoint#twice() + */ + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return curve.Infinity; + } + + int coord = curve.CoordinateSystem; + + switch (coord) + { + case ECCurve.COORD_AFFINE: + { + ECFieldElement Y1 = this.RawYCoord; + + ECFieldElement L1 = Y1.Divide(X1).Add(X1); + + ECFieldElement X3 = L1.Square().Add(L1).Add(curve.A); + ECFieldElement Y3 = X1.SquarePlusProduct(X3, L1.AddOne()); + + return new F2mPoint(curve, X3, Y3); + } + case ECCurve.COORD_HOMOGENEOUS: + { + ECFieldElement Y1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement X1Z1 = Z1IsOne ? X1 : X1.Multiply(Z1); + ECFieldElement Y1Z1 = Z1IsOne ? Y1 : Y1.Multiply(Z1); + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement S = X1Sq.Add(Y1Z1); + ECFieldElement V = X1Z1; + ECFieldElement vSquared = V.Square(); + ECFieldElement sv = S.Add(V); + ECFieldElement h = sv.MultiplyPlusProduct(S, vSquared, curve.A); + + ECFieldElement X3 = V.Multiply(h); + ECFieldElement Y3 = X1Sq.Square().MultiplyPlusProduct(V, h, sv); + ECFieldElement Z3 = V.Multiply(vSquared); + + return new F2mPoint(curve, X3, Y3, new ECFieldElement[] { Z3 }); + } + case ECCurve.COORD_LAMBDA_PROJECTIVE: + { + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement L1Z1 = Z1IsOne ? L1 : L1.Multiply(Z1); + ECFieldElement Z1Sq = Z1IsOne ? Z1 : Z1.Square(); + ECFieldElement a = curve.A; + ECFieldElement aZ1Sq = Z1IsOne ? a : a.Multiply(Z1Sq); + ECFieldElement T = L1.Square().Add(L1Z1).Add(aZ1Sq); + if (T.IsZero) + { + return new F2mPoint(curve, T, curve.B.Sqrt()); + } + + ECFieldElement X3 = T.Square(); + ECFieldElement Z3 = Z1IsOne ? T : T.Multiply(Z1Sq); + + ECFieldElement b = curve.B; + ECFieldElement L3; + if (b.BitLength < (curve.FieldSize >> 1)) + { + ECFieldElement t1 = L1.Add(X1).Square(); + ECFieldElement t2; + if (b.IsOne) + { + t2 = aZ1Sq.Add(Z1Sq).Square(); + } + else + { + // TODO Can be calculated with one square if we pre-compute sqrt(b) + t2 = aZ1Sq.SquarePlusProduct(b, Z1Sq.Square()); + } + L3 = t1.Add(T).Add(Z1Sq).Multiply(t1).Add(t2).Add(X3); + if (a.IsZero) + { + L3 = L3.Add(Z3); + } + else if (!a.IsOne) + { + L3 = L3.Add(a.AddOne().Multiply(Z3)); + } + } + else + { + ECFieldElement X1Z1 = Z1IsOne ? X1 : X1.Multiply(Z1); + L3 = X1Z1.SquarePlusProduct(T, L1Z1).Add(X3).Add(Z3); + } + + return new F2mPoint(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + default: + { + throw new InvalidOperationException("unsupported coordinate system"); + } + } + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return b; + } + + int coord = curve.CoordinateSystem; + + switch (coord) + { + case ECCurve.COORD_LAMBDA_PROJECTIVE: + { + // NOTE: twicePlus() only optimized for lambda-affine argument + ECFieldElement X2 = b.RawXCoord, Z2 = b.RawZCoords[0]; + if (X2.IsZero || !Z2.IsOne) + { + return Twice().Add(b); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord; + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement L1Sq = L1.Square(); + ECFieldElement Z1Sq = Z1.Square(); + ECFieldElement L1Z1 = L1.Multiply(Z1); + + ECFieldElement T = curve.A.Multiply(Z1Sq).Add(L1Sq).Add(L1Z1); + ECFieldElement L2plus1 = L2.AddOne(); + ECFieldElement A = curve.A.Add(L2plus1).Multiply(Z1Sq).Add(L1Sq).MultiplyPlusProduct(T, X1Sq, Z1Sq); + ECFieldElement X2Z1Sq = X2.Multiply(Z1Sq); + ECFieldElement B = X2Z1Sq.Add(T).Square(); + + if (B.IsZero) + { + if (A.IsZero) + { + return b.Twice(); + } + + return curve.Infinity; + } + + if (A.IsZero) + { + return new F2mPoint(curve, A, curve.B.Sqrt()); + } + + ECFieldElement X3 = A.Square().Multiply(X2Z1Sq); + ECFieldElement Z3 = A.Multiply(B).Multiply(Z1Sq); + ECFieldElement L3 = A.Add(B).Square().MultiplyPlusProduct(T, L2plus1, Z3); + + return new F2mPoint(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + default: + { + return Twice().Add(b); + } + } + } + + public override ECPoint Negate() + { + if (this.IsInfinity) + return this; + + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return this; + + ECCurve curve = this.Curve; + int coord = curve.CoordinateSystem; + + switch (coord) + { + case ECCurve.COORD_AFFINE: + { + ECFieldElement Y = this.RawYCoord; + return new F2mPoint(curve, X, Y.Add(X)); + } + case ECCurve.COORD_HOMOGENEOUS: + { + ECFieldElement Y = this.RawYCoord, Z = this.RawZCoords[0]; + return new F2mPoint(curve, X, Y.Add(X), new ECFieldElement[] { Z }); + } + case ECCurve.COORD_LAMBDA_AFFINE: + { + ECFieldElement L = this.RawYCoord; + return new F2mPoint(curve, X, L.AddOne()); + } + case ECCurve.COORD_LAMBDA_PROJECTIVE: + { + // L is actually Lambda (X + Y/X) here + ECFieldElement L = this.RawYCoord, Z = this.RawZCoords[0]; + return new F2mPoint(curve, X, L.Add(Z), new ECFieldElement[] { Z }); + } + default: + { + throw new InvalidOperationException("unsupported coordinate system"); + } + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECPoint.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECPoint.cs.meta new file mode 100644 index 000000000..f4a2258ad --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECPoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0708bb98a46600e47b0eee7ea6b0d44d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECPointMap.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECPointMap.cs new file mode 100644 index 000000000..7df57bca5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECPointMap.cs @@ -0,0 +1,13 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC +{ + public interface ECPointMap + { + ECPoint Map(ECPoint p); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECPointMap.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECPointMap.cs.meta new file mode 100644 index 000000000..1394667d6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ECPointMap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b16b78238477b4749b0ad4ff2a2bcf28 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/LongArray.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/LongArray.cs new file mode 100644 index 000000000..afdc3e09e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/LongArray.cs @@ -0,0 +1,1295 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC +{ + internal struct LongArray + { + internal static bool AreAliased(ref LongArray a, ref LongArray b) + { + return a.m_data == b.m_data; + } + + // TODO make m fixed for the LongArray, and hence compute T once and for all + + private ulong[] m_data; + + internal LongArray(int intLen) + { + m_data = new ulong[intLen]; + } + + internal LongArray(ulong[] data) + { + m_data = data; + } + + internal LongArray(ulong[] data, int off, int len) + { + if (off == 0 && len == data.Length) + { + m_data = data; + } + else + { + m_data = new ulong[len]; + Array.Copy(data, off, m_data, 0, len); + } + } + + internal LongArray(BigInteger bigInt) + { + if (bigInt == null || bigInt.SignValue < 0) + throw new ArgumentException("invalid F2m field value", nameof(bigInt)); + + if (bigInt.SignValue == 0) + { + m_data = new ulong[1]{ 0UL }; + return; + } + + byte[] barr = bigInt.ToByteArray(); + int barrLen = barr.Length; + int barrStart = 0; + if (barr[0] == 0) + { + // First byte is 0 to enforce highest (=sign) bit is zero. + // In this case ignore barr[0]. + barrLen--; + barrStart = 1; + } + int intLen = (barrLen + 7) / 8; + m_data = new ulong[intLen]; + + int iarrJ = intLen - 1; + int rem = barrLen % 8 + barrStart; + ulong temp = 0; + int barrI = barrStart; + if (barrStart < rem) + { + for (; barrI < rem; barrI++) + { + temp <<= 8; + uint barrBarrI = barr[barrI]; + temp |= barrBarrI; + } + m_data[iarrJ--] = temp; + } + + for (; iarrJ >= 0; iarrJ--) + { + temp = 0; + for (int i = 0; i < 8; i++) + { + temp <<= 8; + uint barrBarrI = barr[barrI++]; + temp |= barrBarrI; + } + m_data[iarrJ] = temp; + } + } + + internal void CopyTo(ulong[] z, int zOff) + { + Array.Copy(m_data, 0, z, zOff, m_data.Length); + } + + internal bool IsOne() + { + ulong[] a = m_data; + int aLen = a.Length; + if (aLen < 1 || a[0] != 1UL) + return false; + + for (int i = 1; i < aLen; ++i) + { + if (a[i] != 0UL) + return false; + } + return true; + } + + internal bool IsZero() + { + ulong[] a = m_data; + for (int i = 0; i < a.Length; ++i) + { + if (a[i] != 0UL) + return false; + } + return true; + } + + internal int GetUsedLength() + { + return GetUsedLengthFrom(m_data.Length); + } + + internal int GetUsedLengthFrom(int from) + { + ulong[] a = m_data; + from = System.Math.Min(from, a.Length); + + if (from < 1) + return 0; + + // Check if first element will act as sentinel + if (a[0] != 0UL) + { + while (a[--from] == 0UL) + { + } + return from + 1; + } + + do + { + if (a[--from] != 0UL) + { + return from + 1; + } + } + while (from > 0); + + return 0; + } + + internal int Degree() + { + int i = m_data.Length; + ulong w; + do + { + if (i == 0) + return 0; + + w = m_data[--i]; + } + while (w == 0UL); + + return (i << 6) + BitLength(w); + } + + private int DegreeFrom(int limit) + { + int i = (int)(((uint)limit + 62) >> 6); + ulong w; + do + { + if (i == 0) + return 0; + + w = m_data[--i]; + } + while (w == 0); + + return (i << 6) + BitLength(w); + } + + private static int BitLength(ulong w) + { + return 64 - Longs.NumberOfLeadingZeros((long)w); + } + + private ulong[] ResizedData(int newLen) + { + ulong[] newInts = new ulong[newLen]; + Array.Copy(m_data, 0, newInts, 0, System.Math.Min(m_data.Length, newLen)); + return newInts; + } + + internal BigInteger ToBigInteger() + { + int usedLen = GetUsedLength(); + if (usedLen == 0) + return BigInteger.Zero; + + ulong highestInt = m_data[usedLen - 1]; + byte[] temp = new byte[8]; + int barrI = 0; + bool trailingZeroBytesDone = false; + for (int j = 7; j >= 0; j--) + { + byte thisByte = (byte)(highestInt >> (8 * j)); + if (trailingZeroBytesDone || (thisByte != 0)) + { + trailingZeroBytesDone = true; + temp[barrI++] = thisByte; + } + } + + int barrLen = 8 * (usedLen - 1) + barrI; + byte[] barr = new byte[barrLen]; + for (int j = 0; j < barrI; j++) + { + barr[j] = temp[j]; + } + // Highest value int is done now + + for (int iarrJ = usedLen - 2; iarrJ >= 0; iarrJ--) + { + ulong mi = m_data[iarrJ]; + for (int j = 7; j >= 0; j--) + { + barr[barrI++] = (byte)(mi >> (8 * j)); + } + } + return new BigInteger(1, barr); + } + + private static ulong ShiftUp(ulong[] x, int xOff, int count, int shift) + { + int shiftInv = 64 - shift; + ulong prev = 0UL; + for (int i = 0; i < count; ++i) + { + ulong next = x[xOff + i]; + x[xOff + i] = (next << shift) | prev; + prev = next >> shiftInv; + } + return prev; + } + + private static ulong ShiftUp(ulong[] x, int xOff, ulong[] z, int zOff, int count, int shift) + { + int shiftInv = 64 - shift; + ulong prev = 0UL; + for (int i = 0; i < count; ++i) + { + ulong next = x[xOff + i]; + z[zOff + i] = (next << shift) | prev; + prev = next >> shiftInv; + } + return prev; + } + + internal LongArray AddOne() + { + if (m_data.Length == 0) + return new LongArray(new ulong[1]{ 1UL }); + + int resultLen = System.Math.Max(1, GetUsedLength()); + ulong[] data = ResizedData(resultLen); + data[0] ^= 1UL; + return new LongArray(data); + } + + private void AddShiftedByBitsSafe(LongArray other, int otherDegree, int bits) + { + int otherLen = (int)((uint)(otherDegree + 63) >> 6); + + int words = (int)((uint)bits >> 6); + int shift = bits & 0x3F; + + if (shift == 0) + { + Add(m_data, words, other.m_data, 0, otherLen); + return; + } + + ulong carry = AddShiftedUp(m_data, words, other.m_data, 0, otherLen, shift); + if (carry != 0UL) + { + m_data[otherLen + words] ^= carry; + } + } + + private static ulong AddShiftedUp(ulong[] x, int xOff, ulong[] y, int yOff, int count, int shift) + { + int shiftInv = 64 - shift; + ulong prev = 0; + for (int i = 0; i < count; ++i) + { + ulong next = y[yOff + i]; + x[xOff + i] ^= (next << shift) | prev; + prev = next >> shiftInv; + } + return prev; + } + + private static ulong AddShiftedDown(ulong[] x, int xOff, ulong[] y, int yOff, int count, int shift) + { + int shiftInv = 64 - shift; + ulong prev = 0; + int i = count; + while (--i >= 0) + { + ulong next = y[yOff + i]; + x[xOff + i] ^= (next >> shift) | prev; + prev = next << shiftInv; + } + return prev; + } + + internal void AddShiftedByWords(LongArray other, int words) + { + int otherUsedLen = other.GetUsedLength(); + if (otherUsedLen == 0) + return; + + int minLen = otherUsedLen + words; + if (minLen > m_data.Length) + { + m_data = ResizedData(minLen); + } + + Add(m_data, words, other.m_data, 0, otherUsedLen); + } + + private static void Add(ulong[] x, int xOff, ulong[] y, int yOff, int count) + { + Nat.XorTo64(count, y, yOff, x, xOff); + } + + private static void Add(ulong[] x, int xOff, ulong[] y, int yOff, ulong[] z, int zOff, int count) + { + Nat.Xor64(count, x, xOff, y, yOff, z, zOff); + } + + private static void AddBoth(ulong[] x, int xOff, ulong[] y1, int y1Off, ulong[] y2, int y2Off, int count) + { + for (int i = 0; i < count; ++i) + { + x[xOff + i] ^= y1[y1Off + i] ^ y2[y2Off + i]; + } + } + + private static void FlipWord(ulong[] buf, int off, int bit, ulong word) + { + int n = off + (int)((uint)bit >> 6); + int shift = bit & 0x3F; + if (shift == 0) + { + buf[n] ^= word; + } + else + { + buf[n] ^= word << shift; + word = word >> (64 - shift); + if (word != 0) + { + buf[++n] ^= word; + } + } + } + + internal bool TestBitZero() + { + return m_data.Length > 0 && (m_data[0] & 1UL) != 0; + } + + private static bool TestBit(ulong[] buf, int off, int n) + { + // theInt = n / 64 + int theInt = (int)((uint)n >> 6); + // theBit = n % 64 + int theBit = n & 0x3F; + ulong tester = 1UL << theBit; + return (buf[off + theInt] & tester) != 0UL; + } + + private static void FlipBit(ulong[] buf, int off, int n) + { + // theInt = n / 64 + int theInt = (int)((uint)n >> 6); + // theBit = n % 64 + int theBit = n & 0x3F; + ulong flipper = 1UL << theBit; + buf[off + theInt] ^= flipper; + } + + private static void MultiplyWord(ulong a, ulong[] b, int bLen, ulong[] c, int cOff) + { + if ((a & 1UL) != 0UL) + { + Add(c, cOff, b, 0, bLen); + } + int k = 1; + while ((a >>= 1) != 0UL) + { + if ((a & 1UL) != 0UL) + { + ulong carry = AddShiftedUp(c, cOff, b, 0, bLen, k); + if (carry != 0UL) + { + c[cOff + bLen] ^= carry; + } + } + ++k; + } + } + + internal LongArray ModMultiplyLD(LongArray other, int m, int[] ks) + { + /* + * Find out the degree of each argument and handle the zero cases + */ + int aDeg = Degree(); + if (aDeg == 0) + return this; + + int bDeg = other.Degree(); + if (bDeg == 0) + return other; + + /* + * Swap if necessary so that A is the smaller argument + */ + LongArray A = this, B = other; + if (aDeg > bDeg) + { + A = other; B = this; + int tmp = aDeg; aDeg = bDeg; bDeg = tmp; + } + + /* + * Establish the word lengths of the arguments and result + */ + int aLen = (int)((uint)(aDeg + 63) >> 6); + int bLen = (int)((uint)(bDeg + 63) >> 6); + int cLen = (int)((uint)(aDeg + bDeg + 62) >> 6); + + if (aLen == 1) + { + ulong a0 = A.m_data[0]; + if (a0 == 1UL) + return B; + + /* + * Fast path for small A, with performance dependent only on the number of set bits + */ + ulong[] c0 = new ulong[cLen]; + MultiplyWord(a0, B.m_data, bLen, c0, 0); + + /* + * Reduce the raw answer against the reduction coefficients + */ + return ReduceResult(c0, 0, cLen, m, ks); + } + + /* + * Determine if B will get bigger during shifting + */ + int bMax = (int)((uint)(bDeg + 7 + 63) >> 6); + + /* + * Lookup table for the offset of each B in the tables + */ + int[] ti = new int[16]; + + /* + * Precompute table of all 4-bit products of B + */ + ulong[] T0 = new ulong[bMax << 4]; + int tOff = bMax; + ti[1] = tOff; + Array.Copy(B.m_data, 0, T0, tOff, bLen); + for (int i = 2; i < 16; ++i) + { + ti[i] = (tOff += bMax); + if ((i & 1) == 0) + { + ShiftUp(T0, (int)((uint)tOff >> 1), T0, tOff, bMax, 1); + } + else + { + Add(T0, bMax, T0, tOff - bMax, T0, tOff, bMax); + } + } + + /* + * Second table with all 4-bit products of B shifted 4 bits + */ + ulong[] T1 = new ulong[T0.Length]; + ShiftUp(T0, 0, T1, 0, T0.Length, 4); + // shiftUp(T0, bMax, T1, bMax, tOff, 4); + + ulong[] a = A.m_data; + ulong[] c = new ulong[cLen]; + + uint MASK = 0xF; + + /* + * Lopez-Dahab algorithm + */ + + for (int k = 56; k >= 0; k -= 8) + { + for (int j = 1; j < aLen; j += 2) + { + uint aVal = (uint)(a[j] >> k); + uint u = aVal & MASK; + uint v = (aVal >> 4) & MASK; + AddBoth(c, j - 1, T0, ti[u], T1, ti[v], bMax); + } + ShiftUp(c, 0, cLen, 8); + } + + for (int k = 56; k >= 0; k -= 8) + { + for (int j = 0; j < aLen; j += 2) + { + uint aVal = (uint)(a[j] >> k); + uint u = aVal & MASK; + uint v = (aVal >> 4) & MASK; + AddBoth(c, j, T0, ti[u], T1, ti[v], bMax); + } + if (k > 0) + { + ShiftUp(c, 0, cLen, 8); + } + } + + /* + * Finally the raw answer is collected, reduce it against the reduction coefficients + */ + return ReduceResult(c, 0, cLen, m, ks); + } + + internal LongArray ModMultiply(LongArray other, int m, int[] ks) + { + /* + * Find out the degree of each argument and handle the zero cases + */ + int aDeg = Degree(); + if (aDeg == 0) + return this; + + int bDeg = other.Degree(); + if (bDeg == 0) + return other; + + /* + * Swap if necessary so that A is the smaller argument + */ + LongArray A = this, B = other; + if (aDeg > bDeg) + { + A = other; B = this; + int tmp = aDeg; aDeg = bDeg; bDeg = tmp; + } + + /* + * Establish the word lengths of the arguments and result + */ + int aLen = (int)((uint)(aDeg + 63) >> 6); + int bLen = (int)((uint)(bDeg + 63) >> 6); + int cLen = (int)((uint)(aDeg + bDeg + 62) >> 6); + + if (aLen == 1) + { + ulong a0 = A.m_data[0]; + if (a0 == 1UL) + return B; + + /* + * Fast path for small A, with performance dependent only on the number of set bits + */ + ulong[] c0 = new ulong[cLen]; + MultiplyWord(a0, B.m_data, bLen, c0, 0); + + /* + * Reduce the raw answer against the reduction coefficients + */ + return ReduceResult(c0, 0, cLen, m, ks); + } + + /* + * Determine if B will get bigger during shifting + */ + int bMax = (int)((uint)(bDeg + 7 + 63) >> 6); + + /* + * Lookup table for the offset of each B in the tables + */ + int[] ti = new int[16]; + + /* + * Precompute table of all 4-bit products of B + */ + ulong[] T0 = new ulong[bMax << 4]; + int tOff = bMax; + ti[1] = tOff; + Array.Copy(B.m_data, 0, T0, tOff, bLen); + for (int i = 2; i < 16; ++i) + { + tOff += bMax; + ti[i] = tOff; + if ((i & 1) == 0) + { + ShiftUp(T0, (int)((uint)tOff >> 1), T0, tOff, bMax, 1); + } + else + { + Add(T0, bMax, T0, tOff - bMax, T0, tOff, bMax); + } + } + + /* + * Second table with all 4-bit products of B shifted 4 bits + */ + ulong[] T1 = new ulong[T0.Length]; + ShiftUp(T0, 0, T1, 0, T0.Length, 4); + // ShiftUp(T0, bMax, T1, bMax, tOff, 4); + + ulong[] a = A.m_data; + ulong[] c = new ulong[cLen << 3]; + + uint MASK = 0xF; + + /* + * Lopez-Dahab (Modified) algorithm + */ + + for (int aPos = 0; aPos < aLen; ++aPos) + { + ulong aVal = a[aPos]; + int cOff = aPos; + for (;;) + { + uint u = (uint)aVal & MASK; aVal >>= 4; + uint v = (uint)aVal & MASK; aVal >>= 4; + AddBoth(c, cOff, T0, ti[u], T1, ti[v], bMax); + if (aVal == 0UL) + break; + + cOff += cLen; + } + } + + { + int cOff = c.Length; + while ((cOff -= cLen) != 0) + { + AddShiftedUp(c, cOff - cLen, c, cOff, cLen, 8); + } + } + + /* + * Finally the raw answer is collected, reduce it against the reduction coefficients + */ + return ReduceResult(c, 0, cLen, m, ks); + } + + //internal LongArray ModReduce(int m, int[] ks) + //{ + // ulong[] buf = Arrays.Clone(m_data); + // int rLen = ReduceInPlace(buf, 0, buf.Length, m, ks); + // return new LongArray(buf, 0, rLen); + //} + + internal LongArray Multiply(LongArray other, int m, int[] ks) + { + /* + * Find out the degree of each argument and handle the zero cases + */ + int aDeg = Degree(); + if (aDeg == 0) + return this; + + int bDeg = other.Degree(); + if (bDeg == 0) + return other; + + /* + * Swap if necessary so that A is the smaller argument + */ + LongArray A = this, B = other; + if (aDeg > bDeg) + { + A = other; B = this; + int tmp = aDeg; aDeg = bDeg; bDeg = tmp; + } + + /* + * Establish the word lengths of the arguments and result + */ + int aLen = (int)((uint)(aDeg + 63) >> 6); + int bLen = (int)((uint)(bDeg + 63) >> 6); + int cLen = (int)((uint)(aDeg + bDeg + 62) >> 6); + + if (aLen == 1) + { + ulong a0 = A.m_data[0]; + if (a0 == 1UL) + return B; + + /* + * Fast path for small A, with performance dependent only on the number of set bits + */ + ulong[] c0 = new ulong[cLen]; + MultiplyWord(a0, B.m_data, bLen, c0, 0); + + /* + * Reduce the raw answer against the reduction coefficients + */ + //return ReduceResult(c0, 0, cLen, m, ks); + return new LongArray(c0, 0, cLen); + } + + /* + * Determine if B will get bigger during shifting + */ + int bMax = (int)((uint)(bDeg + 7 + 63) >> 6); + + /* + * Lookup table for the offset of each B in the tables + */ + int[] ti = new int[16]; + + /* + * Precompute table of all 4-bit products of B + */ + ulong[] T0 = new ulong[bMax << 4]; + int tOff = bMax; + ti[1] = tOff; + Array.Copy(B.m_data, 0, T0, tOff, bLen); + for (int i = 2; i < 16; ++i) + { + tOff += bMax; + ti[i] = tOff; + if ((i & 1) == 0) + { + ShiftUp(T0, (int)((uint)tOff >> 1), T0, tOff, bMax, 1); + } + else + { + Add(T0, bMax, T0, tOff - bMax, T0, tOff, bMax); + } + } + + /* + * Second table with all 4-bit products of B shifted 4 bits + */ + ulong[] T1 = new ulong[T0.Length]; + ShiftUp(T0, 0, T1, 0, T0.Length, 4); + //ShiftUp(T0, bMax, T1, bMax, tOff, 4); + + ulong[] a = A.m_data; + ulong[] c = new ulong[cLen << 3]; + + uint MASK = 0xF; + + /* + * Lopez-Dahab (Modified) algorithm + */ + + for (int aPos = 0; aPos < aLen; ++aPos) + { + ulong aVal = a[aPos]; + int cOff = aPos; + for (; ; ) + { + uint u = (uint)aVal & MASK; aVal >>= 4; + uint v = (uint)aVal & MASK; aVal >>= 4; + AddBoth(c, cOff, T0, ti[u], T1, ti[v], bMax); + if (aVal == 0UL) + break; + + cOff += cLen; + } + } + + { + int cOff = c.Length; + while ((cOff -= cLen) != 0) + { + AddShiftedUp(c, cOff - cLen, c, cOff, cLen, 8); + } + } + + /* + * Finally the raw answer is collected, reduce it against the reduction coefficients + */ + //return ReduceResult(c, 0, cLen, m, ks); + return new LongArray(c, 0, cLen); + } + + internal void Reduce(int m, int[] ks) + { + ulong[] buf = m_data; + int rLen = ReduceInPlace(buf, 0, buf.Length, m, ks); + if (rLen < buf.Length) + { + m_data = new ulong[rLen]; + Array.Copy(buf, 0, m_data, 0, rLen); + } + } + + private static LongArray ReduceResult(ulong[] buf, int off, int len, int m, int[] ks) + { + int rLen = ReduceInPlace(buf, off, len, m, ks); + return new LongArray(buf, off, rLen); + } + + private static int ReduceInPlace(ulong[] buf, int off, int len, int m, int[] ks) + { + int mLen = (m + 63) >> 6; + if (len < mLen) + return len; + + int numBits = System.Math.Min(len << 6, (m << 1) - 1); // TODO use actual degree? + int excessBits = (len << 6) - numBits; + while (excessBits >= 64) + { + --len; + excessBits -= 64; + } + + int kLen = ks.Length, kMax = ks[kLen - 1], kNext = kLen > 1 ? ks[kLen - 2] : 0; + int wordWiseLimit = System.Math.Max(m, kMax + 64); + int vectorableWords = (excessBits + System.Math.Min(numBits - wordWiseLimit, m - kNext)) >> 6; + if (vectorableWords > 1) + { + int vectorWiseWords = len - vectorableWords; + ReduceVectorWise(buf, off, len, vectorWiseWords, m, ks); + while (len > vectorWiseWords) + { + buf[off + --len] = 0L; + } + numBits = vectorWiseWords << 6; + } + + if (numBits > wordWiseLimit) + { + ReduceWordWise(buf, off, len, wordWiseLimit, m, ks); + numBits = wordWiseLimit; + } + + if (numBits > m) + { + ReduceBitWise(buf, off, numBits, m, ks); + } + + return mLen; + } + + private static void ReduceBitWise(ulong[] buf, int off, int BitLength, int m, int[] ks) + { + while (--BitLength >= m) + { + if (TestBit(buf, off, BitLength)) + { + ReduceBit(buf, off, BitLength, m, ks); + } + } + } + + private static void ReduceBit(ulong[] buf, int off, int bit, int m, int[] ks) + { + FlipBit(buf, off, bit); + int n = bit - m; + int j = ks.Length; + while (--j >= 0) + { + FlipBit(buf, off, ks[j] + n); + } + FlipBit(buf, off, n); + } + + private static void ReduceWordWise(ulong[] buf, int off, int len, int toBit, int m, int[] ks) + { + int toPos = (int)((uint)toBit >> 6); + + while (--len > toPos) + { + ulong word = buf[off + len]; + if (word != 0) + { + buf[off + len] = 0UL; + ReduceWord(buf, off, (len << 6), word, m, ks); + } + } + + { + int partial = toBit & 0x3F; + ulong word = buf[off + toPos] >> partial; + if (word != 0) + { + buf[off + toPos] ^= word << partial; + ReduceWord(buf, off, toBit, word, m, ks); + } + } + } + + private static void ReduceWord(ulong[] buf, int off, int bit, ulong word, int m, int[] ks) + { + int offset = bit - m; + int j = ks.Length; + while (--j >= 0) + { + FlipWord(buf, off, offset + ks[j], word); + } + FlipWord(buf, off, offset, word); + } + + private static void ReduceVectorWise(ulong[] buf, int off, int len, int words, int m, int[] ks) + { + /* + * NOTE: It's important we go from highest coefficient to lowest, because for the highest + * one (only) we allow the ranges to partially overlap, and therefore any changes must take + * effect for the subsequent lower coefficients. + */ + int baseBit = (words << 6) - m; + int j = ks.Length; + while (--j >= 0) + { + FlipVector(buf, off, buf, off + words, len - words, baseBit + ks[j]); + } + FlipVector(buf, off, buf, off + words, len - words, baseBit); + } + + private static void FlipVector(ulong[] x, int xOff, ulong[] y, int yOff, int yLen, int bits) + { + xOff += (int)((uint)bits >> 6); + bits &= 0x3F; + + if (bits == 0) + { + Add(x, xOff, y, yOff, yLen); + } + else + { + ulong carry = AddShiftedDown(x, xOff + 1, y, yOff, yLen, 64 - bits); + x[xOff] ^= carry; + } + } + + internal LongArray ModSquare(int m, int[] ks) + { + int len = GetUsedLength(); + if (len == 0) + return this; + + ulong[] r = new ulong[len << 1]; + Interleave.Expand64To128(m_data, 0, len, r, 0); + + return new LongArray(r, 0, ReduceInPlace(r, 0, r.Length, m, ks)); + } + + internal LongArray ModSquareN(int n, int m, int[] ks) + { + int len = GetUsedLength(); + if (len == 0) + return this; + + int mLen = (m + 63) >> 6; + ulong[] r = new ulong[mLen << 1]; + Array.Copy(m_data, 0, r, 0, len); + + while (--n >= 0) + { + Interleave.Expand64To128(r, 0, len, r, 0); + len = ReduceInPlace(r, 0, r.Length, m, ks); + } + + return new LongArray(r, 0, len); + } + + internal LongArray Square(int m, int[] ks) + { + int len = GetUsedLength(); + if (len == 0) + return this; + + ulong[] r = new ulong[len << 1]; + Interleave.Expand64To128(m_data, 0, len, r, 0); + + return new LongArray(r, 0, r.Length); + } + + // private static LongArray ExpItohTsujii2(LongArray B, int n, int m, int[] ks) + // { + // LongArray t1 = B, t3 = new LongArray(new long[]{ 1L }); + // int scale = 1; + // + // int numTerms = n; + // while (numTerms > 1) + // { + // if ((numTerms & 1) != 0) + // { + // t3 = t3.ModMultiply(t1, m, ks); + // t1 = t1.modSquareN(scale, m, ks); + // } + // + // LongArray t2 = t1.modSquareN(scale, m, ks); + // t1 = t1.ModMultiply(t2, m, ks); + // numTerms >>>= 1; scale <<= 1; + // } + // + // return t3.ModMultiply(t1, m, ks); + // } + // + // private static LongArray ExpItohTsujii23(LongArray B, int n, int m, int[] ks) + // { + // LongArray t1 = B, t3 = new LongArray(new long[]{ 1L }); + // int scale = 1; + // + // int numTerms = n; + // while (numTerms > 1) + // { + // bool m03 = numTerms % 3 == 0; + // bool m14 = !m03 && (numTerms & 1) != 0; + // + // if (m14) + // { + // t3 = t3.ModMultiply(t1, m, ks); + // t1 = t1.modSquareN(scale, m, ks); + // } + // + // LongArray t2 = t1.modSquareN(scale, m, ks); + // t1 = t1.ModMultiply(t2, m, ks); + // + // if (m03) + // { + // t2 = t2.modSquareN(scale, m, ks); + // t1 = t1.ModMultiply(t2, m, ks); + // numTerms /= 3; scale *= 3; + // } + // else + // { + // numTerms >>>= 1; scale <<= 1; + // } + // } + // + // return t3.ModMultiply(t1, m, ks); + // } + // + // private static LongArray ExpItohTsujii235(LongArray B, int n, int m, int[] ks) + // { + // LongArray t1 = B, t4 = new LongArray(new long[]{ 1L }); + // int scale = 1; + // + // int numTerms = n; + // while (numTerms > 1) + // { + // if (numTerms % 5 == 0) + // { + //// t1 = ExpItohTsujii23(t1, 5, m, ks); + // + // LongArray t3 = t1; + // t1 = t1.modSquareN(scale, m, ks); + // + // LongArray t2 = t1.modSquareN(scale, m, ks); + // t1 = t1.ModMultiply(t2, m, ks); + // t2 = t1.modSquareN(scale << 1, m, ks); + // t1 = t1.ModMultiply(t2, m, ks); + // + // t1 = t1.ModMultiply(t3, m, ks); + // + // numTerms /= 5; scale *= 5; + // continue; + // } + // + // bool m03 = numTerms % 3 == 0; + // bool m14 = !m03 && (numTerms & 1) != 0; + // + // if (m14) + // { + // t4 = t4.ModMultiply(t1, m, ks); + // t1 = t1.modSquareN(scale, m, ks); + // } + // + // LongArray t2 = t1.modSquareN(scale, m, ks); + // t1 = t1.ModMultiply(t2, m, ks); + // + // if (m03) + // { + // t2 = t2.modSquareN(scale, m, ks); + // t1 = t1.ModMultiply(t2, m, ks); + // numTerms /= 3; scale *= 3; + // } + // else + // { + // numTerms >>>= 1; scale <<= 1; + // } + // } + // + // return t4.ModMultiply(t1, m, ks); + // } + + internal LongArray ModInverse(int m, int[] ks) + { + /* + * Fermat's Little Theorem + */ + // LongArray A = this; + // LongArray B = A.modSquare(m, ks); + // LongArray R0 = B, R1 = B; + // for (int i = 2; i < m; ++i) + // { + // R1 = R1.modSquare(m, ks); + // R0 = R0.ModMultiply(R1, m, ks); + // } + // + // return R0; + + /* + * Itoh-Tsujii + */ + // LongArray B = modSquare(m, ks); + // switch (m) + // { + // case 409: + // return ExpItohTsujii23(B, m - 1, m, ks); + // case 571: + // return ExpItohTsujii235(B, m - 1, m, ks); + // case 163: + // case 233: + // case 283: + // default: + // return ExpItohTsujii2(B, m - 1, m, ks); + // } + + /* + * Inversion in F2m using the extended Euclidean algorithm + * + * Input: A nonzero polynomial a(z) of degree at most m-1 + * Output: a(z)^(-1) mod f(z) + */ + int uzDegree = Degree(); + if (uzDegree == 0) + throw new InvalidOperationException(); + + if (uzDegree == 1) + return this; + + // u(z) := a(z) + LongArray uz = Copy(); + + int t = (m + 63) >> 6; + + // v(z) := f(z) + LongArray vz = new LongArray(t); + ReduceBit(vz.m_data, 0, m, m, ks); + + // g1(z) := 1, g2(z) := 0 + LongArray g1z = new LongArray(t); + g1z.m_data[0] = 1UL; + LongArray g2z = new LongArray(t); + + int[] uvDeg = new int[]{ uzDegree, m + 1 }; + LongArray[] uv = new LongArray[]{ uz, vz }; + + int[] ggDeg = new int[]{ 1, 0 }; + LongArray[] gg = new LongArray[]{ g1z, g2z }; + + int b = 1; + int duv1 = uvDeg[b]; + int dgg1 = ggDeg[b]; + int j = duv1 - uvDeg[1 - b]; + + for (;;) + { + if (j < 0) + { + j = -j; + uvDeg[b] = duv1; + ggDeg[b] = dgg1; + b = 1 - b; + duv1 = uvDeg[b]; + dgg1 = ggDeg[b]; + } + + uv[b].AddShiftedByBitsSafe(uv[1 - b], uvDeg[1 - b], j); + + int duv2 = uv[b].DegreeFrom(duv1); + if (duv2 == 0) + return gg[1 - b]; + + { + int dgg2 = ggDeg[1 - b]; + gg[b].AddShiftedByBitsSafe(gg[1 - b], dgg2, j); + dgg2 += j; + + if (dgg2 > dgg1) + { + dgg1 = dgg2; + } + else if (dgg2 == dgg1) + { + dgg1 = gg[b].DegreeFrom(dgg1); + } + } + + j += (duv2 - duv1); + duv1 = duv2; + } + } + + public override bool Equals(object obj) + { + if (obj is LongArray longArray) + return Equals(ref longArray); + + return false; + } + + internal bool Equals(ref LongArray other) + { + if (AreAliased(ref this, ref other)) + return true; + + int usedLen = GetUsedLength(); + if (other.GetUsedLength() != usedLen) + return false; + + for (int i = 0; i < usedLen; i++) + { + if (m_data[i] != other.m_data[i]) + return false; + } + return true; + } + + public override int GetHashCode() + { + int usedLen = GetUsedLength(); + int hash = 1; + for (int i = 0; i < usedLen; i++) + { + ulong mi = m_data[i]; + hash *= 31; + hash ^= (int)mi; + hash *= 31; + hash ^= (int)(mi >> 32); + } + return hash; + } + + public LongArray Copy() + { + return new LongArray(Arrays.Clone(m_data)); + } + + public override string ToString() + { + int i = GetUsedLength(); + if (i == 0) + return "0"; + + StringBuilder sb = new StringBuilder(i * 64); + sb.Append(Convert.ToString((long)m_data[--i], 2)); + while (--i >= 0) + { + string s = Convert.ToString((long)m_data[i], 2); + + // Add leading zeroes, except for highest significant word + int len = s.Length; + if (len < 64) + { + sb.Append('0', 64 - len); + } + + sb.Append(s); + } + return sb.ToString(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/LongArray.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/LongArray.cs.meta new file mode 100644 index 000000000..d50df6c02 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/LongArray.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c64005ee201237e4fb747b16625d3307 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleXNegateYPointMap.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleXNegateYPointMap.cs new file mode 100644 index 000000000..42517a5c3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleXNegateYPointMap.cs @@ -0,0 +1,24 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC +{ + public class ScaleXNegateYPointMap + : ECPointMap + { + protected readonly ECFieldElement scale; + + public ScaleXNegateYPointMap(ECFieldElement scale) + { + this.scale = scale; + } + + public virtual ECPoint Map(ECPoint p) + { + return p.ScaleXNegateY(scale); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleXNegateYPointMap.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleXNegateYPointMap.cs.meta new file mode 100644 index 000000000..f4f1a9453 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleXNegateYPointMap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7aaf91c41b94fe94abe7ac7eb28506c3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleXPointMap.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleXPointMap.cs new file mode 100644 index 000000000..eb97b9649 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleXPointMap.cs @@ -0,0 +1,24 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC +{ + public class ScaleXPointMap + : ECPointMap + { + protected readonly ECFieldElement scale; + + public ScaleXPointMap(ECFieldElement scale) + { + this.scale = scale; + } + + public virtual ECPoint Map(ECPoint p) + { + return p.ScaleX(scale); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleXPointMap.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleXPointMap.cs.meta new file mode 100644 index 000000000..579c20c28 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleXPointMap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9dfd9f72fc2d48e42b878a2169f7e4d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleYNegateXPointMap.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleYNegateXPointMap.cs new file mode 100644 index 000000000..cfc83acb0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleYNegateXPointMap.cs @@ -0,0 +1,24 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC +{ + public class ScaleYNegateXPointMap + : ECPointMap + { + protected readonly ECFieldElement scale; + + public ScaleYNegateXPointMap(ECFieldElement scale) + { + this.scale = scale; + } + + public virtual ECPoint Map(ECPoint p) + { + return p.ScaleYNegateX(scale); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleYNegateXPointMap.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleYNegateXPointMap.cs.meta new file mode 100644 index 000000000..d6f475ff9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleYNegateXPointMap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6dba7a7d14e9d61449311c3d6c5af9a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleYPointMap.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleYPointMap.cs new file mode 100644 index 000000000..a1e7dc6fb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleYPointMap.cs @@ -0,0 +1,24 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC +{ + public class ScaleYPointMap + : ECPointMap + { + protected readonly ECFieldElement scale; + + public ScaleYPointMap(ECFieldElement scale) + { + this.scale = scale; + } + + public virtual ECPoint Map(ECPoint p) + { + return p.ScaleY(scale); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleYPointMap.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleYPointMap.cs.meta new file mode 100644 index 000000000..f25444056 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/ScaleYPointMap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c0012fa428aef224e95dfcbacde294a1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/SimpleLookupTable.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/SimpleLookupTable.cs new file mode 100644 index 000000000..035e3f63a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/SimpleLookupTable.cs @@ -0,0 +1,44 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC +{ + public class SimpleLookupTable + : AbstractECLookupTable + { + private static ECPoint[] Copy(ECPoint[] points, int off, int len) + { + ECPoint[] result = new ECPoint[len]; + for (int i = 0; i < len; ++i) + { + result[i] = points[off + i]; + } + return result; + } + + private readonly ECPoint[] points; + + public SimpleLookupTable(ECPoint[] points, int off, int len) + { + this.points = Copy(points, off, len); + } + + public override int Size + { + get { return points.Length; } + } + + public override ECPoint Lookup(int index) + { + throw new NotSupportedException("Constant-time lookup not supported"); + } + + public override ECPoint LookupVar(int index) + { + return points[index]; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/SimpleLookupTable.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/SimpleLookupTable.cs.meta new file mode 100644 index 000000000..cea49226a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/SimpleLookupTable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31b37f390092cbf49912e6eec081a533 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc.meta new file mode 100644 index 000000000..e2159c420 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 40e69c1e558a62e4cb5a52d30eb8fdfd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc/SimpleBigDecimal.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc/SimpleBigDecimal.cs new file mode 100644 index 000000000..2cf3ec90c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc/SimpleBigDecimal.cs @@ -0,0 +1,245 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Abc +{ + /** + * Class representing a simple version of a big decimal. A + * SimpleBigDecimal is basically a + * {@link java.math.BigInteger BigInteger} with a few digits on the right of + * the decimal point. The number of (binary) digits on the right of the decimal + * point is called the scale of the SimpleBigDecimal. + * Unlike in {@link java.math.BigDecimal BigDecimal}, the scale is not adjusted + * automatically, but must be set manually. All SimpleBigDecimals + * taking part in the same arithmetic operation must have equal scale. The + * result of a multiplication of two SimpleBigDecimals returns a + * SimpleBigDecimal with double scale. + */ + internal class SimpleBigDecimal + // : Number + { + // private static final long serialVersionUID = 1L; + + private readonly BigInteger bigInt; + private readonly int scale; + + /** + * Returns a SimpleBigDecimal representing the same numerical + * value as value. + * @param value The value of the SimpleBigDecimal to be + * created. + * @param scale The scale of the SimpleBigDecimal to be + * created. + * @return The such created SimpleBigDecimal. + */ + public static SimpleBigDecimal GetInstance(BigInteger val, int scale) + { + return new SimpleBigDecimal(val.ShiftLeft(scale), scale); + } + + /** + * Constructor for SimpleBigDecimal. The value of the + * constructed SimpleBigDecimal Equals bigInt / + * 2scale. + * @param bigInt The bigInt value parameter. + * @param scale The scale of the constructed SimpleBigDecimal. + */ + public SimpleBigDecimal(BigInteger bigInt, int scale) + { + if (scale < 0) + throw new ArgumentException("scale may not be negative"); + + this.bigInt = bigInt; + this.scale = scale; + } + + private SimpleBigDecimal(SimpleBigDecimal limBigDec) + { + bigInt = limBigDec.bigInt; + scale = limBigDec.scale; + } + + private void CheckScale(SimpleBigDecimal b) + { + if (scale != b.scale) + throw new ArgumentException("Only SimpleBigDecimal of same scale allowed in arithmetic operations"); + } + + public SimpleBigDecimal AdjustScale(int newScale) + { + if (newScale < 0) + throw new ArgumentException("scale may not be negative"); + + if (newScale == scale) + return this; + + return new SimpleBigDecimal(bigInt.ShiftLeft(newScale - scale), newScale); + } + + public SimpleBigDecimal Add(SimpleBigDecimal b) + { + CheckScale(b); + return new SimpleBigDecimal(bigInt.Add(b.bigInt), scale); + } + + public SimpleBigDecimal Add(BigInteger b) + { + return new SimpleBigDecimal(bigInt.Add(b.ShiftLeft(scale)), scale); + } + + public SimpleBigDecimal Negate() + { + return new SimpleBigDecimal(bigInt.Negate(), scale); + } + + public SimpleBigDecimal Subtract(SimpleBigDecimal b) + { + return Add(b.Negate()); + } + + public SimpleBigDecimal Subtract(BigInteger b) + { + return new SimpleBigDecimal(bigInt.Subtract(b.ShiftLeft(scale)), scale); + } + + public SimpleBigDecimal Multiply(SimpleBigDecimal b) + { + CheckScale(b); + return new SimpleBigDecimal(bigInt.Multiply(b.bigInt), scale + scale); + } + + public SimpleBigDecimal Multiply(BigInteger b) + { + return new SimpleBigDecimal(bigInt.Multiply(b), scale); + } + + public SimpleBigDecimal Divide(SimpleBigDecimal b) + { + CheckScale(b); + BigInteger dividend = bigInt.ShiftLeft(scale); + return new SimpleBigDecimal(dividend.Divide(b.bigInt), scale); + } + + public SimpleBigDecimal Divide(BigInteger b) + { + return new SimpleBigDecimal(bigInt.Divide(b), scale); + } + + public SimpleBigDecimal ShiftLeft(int n) + { + return new SimpleBigDecimal(bigInt.ShiftLeft(n), scale); + } + + public int CompareTo(SimpleBigDecimal val) + { + CheckScale(val); + return bigInt.CompareTo(val.bigInt); + } + + public int CompareTo(BigInteger val) + { + return bigInt.CompareTo(val.ShiftLeft(scale)); + } + + public BigInteger Floor() + { + return bigInt.ShiftRight(scale); + } + + public BigInteger Round() + { + SimpleBigDecimal oneHalf = new SimpleBigDecimal(BigInteger.One, 1); + return Add(oneHalf.AdjustScale(scale)).Floor(); + } + + public int IntValue + { + get { return Floor().IntValue; } + } + + public long LongValue + { + get { return Floor().LongValue; } + } + +// public double doubleValue() +// { +// return new Double(ToString()).doubleValue(); +// } +// +// public float floatValue() +// { +// return new Float(ToString()).floatValue(); +// } + + public int Scale + { + get { return scale; } + } + + public override string ToString() + { + if (scale == 0) + return bigInt.ToString(); + + BigInteger floorBigInt = Floor(); + + BigInteger fract = bigInt.Subtract(floorBigInt.ShiftLeft(scale)); + if (bigInt.SignValue < 0) + { + fract = BigInteger.One.ShiftLeft(scale).Subtract(fract); + } + + if ((floorBigInt.SignValue == -1) && (!(fract.Equals(BigInteger.Zero)))) + { + floorBigInt = floorBigInt.Add(BigInteger.One); + } + string leftOfPoint = floorBigInt.ToString(); + + char[] fractCharArr = new char[scale]; + string fractStr = fract.ToString(2); + int fractLen = fractStr.Length; + int zeroes = scale - fractLen; + for (int i = 0; i < zeroes; i++) + { + fractCharArr[i] = '0'; + } + for (int j = 0; j < fractLen; j++) + { + fractCharArr[zeroes + j] = fractStr[j]; + } + string rightOfPoint = new string(fractCharArr); + + StringBuilder sb = new StringBuilder(leftOfPoint); + sb.Append("."); + sb.Append(rightOfPoint); + + return sb.ToString(); + } + + public override bool Equals( + object obj) + { + if (this == obj) + return true; + + SimpleBigDecimal other = obj as SimpleBigDecimal; + + if (other == null) + return false; + + return bigInt.Equals(other.bigInt) + && scale == other.scale; + } + + public override int GetHashCode() + { + return bigInt.GetHashCode() ^ scale; + } + + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc/SimpleBigDecimal.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc/SimpleBigDecimal.cs.meta new file mode 100644 index 000000000..83973ab0b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc/SimpleBigDecimal.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 90b2a6bdef50756439d9f47423252e4b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc/Tnaf.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc/Tnaf.cs new file mode 100644 index 000000000..95aaefd18 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc/Tnaf.cs @@ -0,0 +1,849 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Abc +{ + /** + * Class holding methods for point multiplication based on the window + * τ-adic nonadjacent form (WTNAF). The algorithms are based on the + * paper "Improved Algorithms for Arithmetic on Anomalous Binary Curves" + * by Jerome A. Solinas. The paper first appeared in the Proceedings of + * Crypto 1997. + */ + internal class Tnaf + { + private static readonly BigInteger MinusOne = BigInteger.One.Negate(); + private static readonly BigInteger MinusTwo = BigInteger.Two.Negate(); + private static readonly BigInteger MinusThree = BigInteger.Three.Negate(); + private static readonly BigInteger Four = BigInteger.ValueOf(4); + + /** + * The window width of WTNAF. The standard value of 4 is slightly less + * than optimal for running time, but keeps space requirements for + * precomputation low. For typical curves, a value of 5 or 6 results in + * a better running time. When changing this value, the + * αu's must be computed differently, see + * e.g. "Guide to Elliptic Curve Cryptography", Darrel Hankerson, + * Alfred Menezes, Scott Vanstone, Springer-Verlag New York Inc., 2004, + * p. 121-122 + */ + public const sbyte Width = 4; + + /** + * 24 + */ + public const sbyte Pow2Width = 16; + + /** + * The αu's for a=0 as an array + * of ZTauElements. + */ + public static readonly ZTauElement[] Alpha0 = + { + null, + new ZTauElement(BigInteger.One, BigInteger.Zero), null, + new ZTauElement(MinusThree, MinusOne), null, + new ZTauElement(MinusOne, MinusOne), null, + new ZTauElement(BigInteger.One, MinusOne), null + }; + + /** + * The αu's for a=0 as an array + * of TNAFs. + */ + public static readonly sbyte[][] Alpha0Tnaf = + { + null, new sbyte[]{1}, null, new sbyte[]{-1, 0, 1}, null, new sbyte[]{1, 0, 1}, null, new sbyte[]{-1, 0, 0, 1} + }; + + /** + * The αu's for a=1 as an array + * of ZTauElements. + */ + public static readonly ZTauElement[] Alpha1 = + { + null, + new ZTauElement(BigInteger.One, BigInteger.Zero), null, + new ZTauElement(MinusThree, BigInteger.One), null, + new ZTauElement(MinusOne, BigInteger.One), null, + new ZTauElement(BigInteger.One, BigInteger.One), null + }; + + /** + * The αu's for a=1 as an array + * of TNAFs. + */ + public static readonly sbyte[][] Alpha1Tnaf = + { + null, new sbyte[]{1}, null, new sbyte[]{-1, 0, 1}, null, new sbyte[]{1, 0, 1}, null, new sbyte[]{-1, 0, 0, -1} + }; + + /** + * Computes the norm of an element λ of + * Z[τ]. + * @param mu The parameter μ of the elliptic curve. + * @param lambda The element λ of + * Z[τ]. + * @return The norm of λ. + */ + public static BigInteger Norm(sbyte mu, ZTauElement lambda) + { + BigInteger norm; + + // s1 = u^2 + BigInteger s1 = lambda.u.Multiply(lambda.u); + + // s2 = u * v + BigInteger s2 = lambda.u.Multiply(lambda.v); + + // s3 = 2 * v^2 + BigInteger s3 = lambda.v.Multiply(lambda.v).ShiftLeft(1); + + if (mu == 1) + { + norm = s1.Add(s2).Add(s3); + } + else if (mu == -1) + { + norm = s1.Subtract(s2).Add(s3); + } + else + { + throw new ArgumentException("mu must be 1 or -1"); + } + + return norm; + } + + /** + * Computes the norm of an element λ of + * R[τ], where λ = u + vτ + * and u and u are real numbers (elements of + * R). + * @param mu The parameter μ of the elliptic curve. + * @param u The real part of the element λ of + * R[τ]. + * @param v The τ-adic part of the element + * λ of R[τ]. + * @return The norm of λ. + */ + public static SimpleBigDecimal Norm(sbyte mu, SimpleBigDecimal u, SimpleBigDecimal v) + { + SimpleBigDecimal norm; + + // s1 = u^2 + SimpleBigDecimal s1 = u.Multiply(u); + + // s2 = u * v + SimpleBigDecimal s2 = u.Multiply(v); + + // s3 = 2 * v^2 + SimpleBigDecimal s3 = v.Multiply(v).ShiftLeft(1); + + if (mu == 1) + { + norm = s1.Add(s2).Add(s3); + } + else if (mu == -1) + { + norm = s1.Subtract(s2).Add(s3); + } + else + { + throw new ArgumentException("mu must be 1 or -1"); + } + + return norm; + } + + /** + * Rounds an element λ of R[τ] + * to an element of Z[τ], such that their difference + * has minimal norm. λ is given as + * λ = λ0 + λ1τ. + * @param lambda0 The component λ0. + * @param lambda1 The component λ1. + * @param mu The parameter μ of the elliptic curve. Must + * equal 1 or -1. + * @return The rounded element of Z[τ]. + * @throws ArgumentException if lambda0 and + * lambda1 do not have same scale. + */ + public static ZTauElement Round(SimpleBigDecimal lambda0, + SimpleBigDecimal lambda1, sbyte mu) + { + int scale = lambda0.Scale; + if (lambda1.Scale != scale) + throw new ArgumentException("lambda0 and lambda1 do not have same scale"); + + if (!((mu == 1) || (mu == -1))) + throw new ArgumentException("mu must be 1 or -1"); + + BigInteger f0 = lambda0.Round(); + BigInteger f1 = lambda1.Round(); + + SimpleBigDecimal eta0 = lambda0.Subtract(f0); + SimpleBigDecimal eta1 = lambda1.Subtract(f1); + + // eta = 2*eta0 + mu*eta1 + SimpleBigDecimal eta = eta0.Add(eta0); + if (mu == 1) + { + eta = eta.Add(eta1); + } + else + { + // mu == -1 + eta = eta.Subtract(eta1); + } + + // check1 = eta0 - 3*mu*eta1 + // check2 = eta0 + 4*mu*eta1 + SimpleBigDecimal threeEta1 = eta1.Add(eta1).Add(eta1); + SimpleBigDecimal fourEta1 = threeEta1.Add(eta1); + SimpleBigDecimal check1; + SimpleBigDecimal check2; + if (mu == 1) + { + check1 = eta0.Subtract(threeEta1); + check2 = eta0.Add(fourEta1); + } + else + { + // mu == -1 + check1 = eta0.Add(threeEta1); + check2 = eta0.Subtract(fourEta1); + } + + sbyte h0 = 0; + sbyte h1 = 0; + + // if eta >= 1 + if (eta.CompareTo(BigInteger.One) >= 0) + { + if (check1.CompareTo(MinusOne) < 0) + { + h1 = mu; + } + else + { + h0 = 1; + } + } + else + { + // eta < 1 + if (check2.CompareTo(BigInteger.Two) >= 0) + { + h1 = mu; + } + } + + // if eta < -1 + if (eta.CompareTo(MinusOne) < 0) + { + if (check1.CompareTo(BigInteger.One) >= 0) + { + h1 = (sbyte)-mu; + } + else + { + h0 = -1; + } + } + else + { + // eta >= -1 + if (check2.CompareTo(MinusTwo) < 0) + { + h1 = (sbyte)-mu; + } + } + + BigInteger q0 = f0.Add(BigInteger.ValueOf(h0)); + BigInteger q1 = f1.Add(BigInteger.ValueOf(h1)); + return new ZTauElement(q0, q1); + } + + /** + * Approximate division by n. For an integer + * k, the value λ = s k / n is + * computed to c bits of accuracy. + * @param k The parameter k. + * @param s The curve parameter s0 or + * s1. + * @param vm The Lucas Sequence element Vm. + * @param a The parameter a of the elliptic curve. + * @param m The bit length of the finite field + * Fm. + * @param c The number of bits of accuracy, i.e. the scale of the returned + * SimpleBigDecimal. + * @return The value λ = s k / n computed to + * c bits of accuracy. + */ + public static SimpleBigDecimal ApproximateDivisionByN(BigInteger k, + BigInteger s, BigInteger vm, sbyte a, int m, int c) + { + int _k = (m + 5)/2 + c; + BigInteger ns = k.ShiftRight(m - _k - 2 + a); + + BigInteger gs = s.Multiply(ns); + + BigInteger hs = gs.ShiftRight(m); + + BigInteger js = vm.Multiply(hs); + + BigInteger gsPlusJs = gs.Add(js); + BigInteger ls = gsPlusJs.ShiftRight(_k-c); + if (gsPlusJs.TestBit(_k-c-1)) + { + // round up + ls = ls.Add(BigInteger.One); + } + + return new SimpleBigDecimal(ls, c); + } + + /** + * Computes the τ-adic NAF (non-adjacent form) of an + * element λ of Z[τ]. + * @param mu The parameter μ of the elliptic curve. + * @param lambda The element λ of + * Z[τ]. + * @return The τ-adic NAF of λ. + */ + public static sbyte[] TauAdicNaf(sbyte mu, ZTauElement lambda) + { + if (!((mu == 1) || (mu == -1))) + throw new ArgumentException("mu must be 1 or -1"); + + BigInteger norm = Norm(mu, lambda); + + // Ceiling of log2 of the norm + int log2Norm = norm.BitLength; + + // If length(TNAF) > 30, then length(TNAF) < log2Norm + 3.52 + int maxLength = log2Norm > 30 ? log2Norm + 4 : 34; + + // The array holding the TNAF + sbyte[] u = new sbyte[maxLength]; + int i = 0; + + // The actual length of the TNAF + int length = 0; + + BigInteger r0 = lambda.u; + BigInteger r1 = lambda.v; + + while(!((r0.Equals(BigInteger.Zero)) && (r1.Equals(BigInteger.Zero)))) + { + // If r0 is odd + if (r0.TestBit(0)) + { + u[i] = (sbyte) BigInteger.Two.Subtract((r0.Subtract(r1.ShiftLeft(1))).Mod(Four)).IntValue; + + // r0 = r0 - u[i] + if (u[i] == 1) + { + r0 = r0.ClearBit(0); + } + else + { + // u[i] == -1 + r0 = r0.Add(BigInteger.One); + } + length = i; + } + else + { + u[i] = 0; + } + + BigInteger t = r0; + BigInteger s = r0.ShiftRight(1); + if (mu == 1) + { + r0 = r1.Add(s); + } + else + { + // mu == -1 + r0 = r1.Subtract(s); + } + + r1 = t.ShiftRight(1).Negate(); + i++; + } + + length++; + + // Reduce the TNAF array to its actual length + sbyte[] tnaf = new sbyte[length]; + Array.Copy(u, 0, tnaf, 0, length); + return tnaf; + } + + /** + * Applies the operation τ() to an + * AbstractF2mPoint. + * @param p The AbstractF2mPoint to which τ() is applied. + * @return τ(p) + */ + public static AbstractF2mPoint Tau(AbstractF2mPoint p) + { + return p.Tau(); + } + + /** + * Returns the parameter μ of the elliptic curve. + * @param curve The elliptic curve from which to obtain μ. + * The curve must be a Koblitz curve, i.e. a Equals + * 0 or 1 and b Equals + * 1. + * @return μ of the elliptic curve. + * @throws ArgumentException if the given ECCurve is not a Koblitz + * curve. + */ + public static sbyte GetMu(AbstractF2mCurve curve) + { + BigInteger a = curve.A.ToBigInteger(); + + sbyte mu; + if (a.SignValue == 0) + { + mu = -1; + } + else if (a.Equals(BigInteger.One)) + { + mu = 1; + } + else + { + throw new ArgumentException("No Koblitz curve (ABC), TNAF multiplication not possible"); + } + return mu; + } + + public static sbyte GetMu(ECFieldElement curveA) + { + return (sbyte)(curveA.IsZero ? -1 : 1); + } + + public static sbyte GetMu(int curveA) + { + return (sbyte)(curveA == 0 ? -1 : 1); + } + + /** + * Calculates the Lucas Sequence elements Uk-1 and + * Uk or Vk-1 and + * Vk. + * @param mu The parameter μ of the elliptic curve. + * @param k The index of the second element of the Lucas Sequence to be + * returned. + * @param doV If set to true, computes Vk-1 and + * Vk, otherwise Uk-1 and + * Uk. + * @return An array with 2 elements, containing Uk-1 + * and Uk or Vk-1 + * and Vk. + */ + public static BigInteger[] GetLucas(sbyte mu, int k, bool doV) + { + if (!(mu == 1 || mu == -1)) + throw new ArgumentException("mu must be 1 or -1"); + + BigInteger u0; + BigInteger u1; + BigInteger u2; + + if (doV) + { + u0 = BigInteger.Two; + u1 = BigInteger.ValueOf(mu); + } + else + { + u0 = BigInteger.Zero; + u1 = BigInteger.One; + } + + for (int i = 1; i < k; i++) + { + // u2 = mu*u1 - 2*u0; + BigInteger s = null; + if (mu == 1) + { + s = u1; + } + else + { + // mu == -1 + s = u1.Negate(); + } + + u2 = s.Subtract(u0.ShiftLeft(1)); + u0 = u1; + u1 = u2; + // System.out.println(i + ": " + u2); + // System.out.println(); + } + + BigInteger[] retVal = {u0, u1}; + return retVal; + } + + /** + * Computes the auxiliary value tw. If the width is + * 4, then for mu = 1, tw = 6 and for + * mu = -1, tw = 10 + * @param mu The parameter μ of the elliptic curve. + * @param w The window width of the WTNAF. + * @return the auxiliary value tw + */ + public static BigInteger GetTw(sbyte mu, int w) + { + if (w == 4) + { + if (mu == 1) + { + return BigInteger.ValueOf(6); + } + else + { + // mu == -1 + return BigInteger.ValueOf(10); + } + } + else + { + // For w <> 4, the values must be computed + BigInteger[] us = GetLucas(mu, w, false); + BigInteger twoToW = BigInteger.Zero.SetBit(w); + BigInteger u1invert = us[1].ModInverse(twoToW); + BigInteger tw; + tw = BigInteger.Two.Multiply(us[0]).Multiply(u1invert).Mod(twoToW); + //System.out.println("mu = " + mu); + //System.out.println("tw = " + tw); + return tw; + } + } + + /** + * Computes the auxiliary values s0 and + * s1 used for partial modular reduction. + * @param curve The elliptic curve for which to compute + * s0 and s1. + * @throws ArgumentException if curve is not a + * Koblitz curve (Anomalous Binary Curve, ABC). + */ + public static BigInteger[] GetSi(AbstractF2mCurve curve) + { + if (!curve.IsKoblitz) + throw new ArgumentException("si is defined for Koblitz curves only"); + + int m = curve.FieldSize; + int a = curve.A.ToBigInteger().IntValue; + sbyte mu = GetMu(a); + int shifts = GetShiftsForCofactor(curve.Cofactor); + int index = m + 3 - a; + BigInteger[] ui = GetLucas(mu, index, false); + + if (mu == 1) + { + ui[0] = ui[0].Negate(); + ui[1] = ui[1].Negate(); + } + + BigInteger dividend0 = BigInteger.One.Add(ui[1]).ShiftRight(shifts); + BigInteger dividend1 = BigInteger.One.Add(ui[0]).ShiftRight(shifts).Negate(); + + return new BigInteger[] { dividend0, dividend1 }; + } + + public static BigInteger[] GetSi(int fieldSize, int curveA, BigInteger cofactor) + { + sbyte mu = GetMu(curveA); + int shifts = GetShiftsForCofactor(cofactor); + int index = fieldSize + 3 - curveA; + BigInteger[] ui = GetLucas(mu, index, false); + if (mu == 1) + { + ui[0] = ui[0].Negate(); + ui[1] = ui[1].Negate(); + } + + BigInteger dividend0 = BigInteger.One.Add(ui[1]).ShiftRight(shifts); + BigInteger dividend1 = BigInteger.One.Add(ui[0]).ShiftRight(shifts).Negate(); + + return new BigInteger[] { dividend0, dividend1 }; + } + + protected static int GetShiftsForCofactor(BigInteger h) + { + if (h != null && h.BitLength < 4) + { + int hi = h.IntValue; + if (hi == 2) + return 1; + if (hi == 4) + return 2; + } + + throw new ArgumentException("h (Cofactor) must be 2 or 4"); + } + + /** + * Partial modular reduction modulo + * m - 1)/(τ - 1). + * @param k The integer to be reduced. + * @param m The bitlength of the underlying finite field. + * @param a The parameter a of the elliptic curve. + * @param s The auxiliary values s0 and + * s1. + * @param mu The parameter μ of the elliptic curve. + * @param c The precision (number of bits of accuracy) of the partial + * modular reduction. + * @return ρ := k partmod (τm - 1)/(τ - 1) + */ + public static ZTauElement PartModReduction(BigInteger k, int m, sbyte a, + BigInteger[] s, sbyte mu, sbyte c) + { + // d0 = s[0] + mu*s[1]; mu is either 1 or -1 + BigInteger d0; + if (mu == 1) + { + d0 = s[0].Add(s[1]); + } + else + { + d0 = s[0].Subtract(s[1]); + } + + BigInteger[] v = GetLucas(mu, m, true); + BigInteger vm = v[1]; + + SimpleBigDecimal lambda0 = ApproximateDivisionByN( + k, s[0], vm, a, m, c); + + SimpleBigDecimal lambda1 = ApproximateDivisionByN( + k, s[1], vm, a, m, c); + + ZTauElement q = Round(lambda0, lambda1, mu); + + // r0 = n - d0*q0 - 2*s1*q1 + BigInteger r0 = k.Subtract(d0.Multiply(q.u)).Subtract( + BigInteger.ValueOf(2).Multiply(s[1]).Multiply(q.v)); + + // r1 = s1*q0 - s0*q1 + BigInteger r1 = s[1].Multiply(q.u).Subtract(s[0].Multiply(q.v)); + + return new ZTauElement(r0, r1); + } + + /** + * Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + * by a BigInteger using the reduced τ-adic + * NAF (RTNAF) method. + * @param p The AbstractF2mPoint to Multiply. + * @param k The BigInteger by which to Multiply p. + * @return k * p + */ + public static AbstractF2mPoint MultiplyRTnaf(AbstractF2mPoint p, BigInteger k) + { + AbstractF2mCurve curve = (AbstractF2mCurve)p.Curve; + int m = curve.FieldSize; + int a = curve.A.ToBigInteger().IntValue; + sbyte mu = GetMu(a); + BigInteger[] s = curve.GetSi(); + ZTauElement rho = PartModReduction(k, m, (sbyte)a, s, mu, (sbyte)10); + + return MultiplyTnaf(p, rho); + } + + /** + * Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + * by an element λ of Z[τ] + * using the τ-adic NAF (TNAF) method. + * @param p The AbstractF2mPoint to Multiply. + * @param lambda The element λ of + * Z[τ]. + * @return λ * p + */ + public static AbstractF2mPoint MultiplyTnaf(AbstractF2mPoint p, ZTauElement lambda) + { + AbstractF2mCurve curve = (AbstractF2mCurve)p.Curve; + sbyte mu = GetMu(curve.A); + sbyte[] u = TauAdicNaf(mu, lambda); + + AbstractF2mPoint q = MultiplyFromTnaf(p, u); + + return q; + } + + /** + * Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + * by an element λ of Z[τ] + * using the τ-adic NAF (TNAF) method, given the TNAF + * of λ. + * @param p The AbstractF2mPoint to Multiply. + * @param u The the TNAF of λ.. + * @return λ * p + */ + public static AbstractF2mPoint MultiplyFromTnaf(AbstractF2mPoint p, sbyte[] u) + { + ECCurve curve = p.Curve; + AbstractF2mPoint q = (AbstractF2mPoint)curve.Infinity; + AbstractF2mPoint pNeg = (AbstractF2mPoint)p.Negate(); + int tauCount = 0; + for (int i = u.Length - 1; i >= 0; i--) + { + ++tauCount; + sbyte ui = u[i]; + if (ui != 0) + { + q = q.TauPow(tauCount); + tauCount = 0; + + ECPoint x = ui > 0 ? p : pNeg; + q = (AbstractF2mPoint)q.Add(x); + } + } + if (tauCount > 0) + { + q = q.TauPow(tauCount); + } + return q; + } + + /** + * Computes the [τ]-adic window NAF of an element + * λ of Z[τ]. + * @param mu The parameter μ of the elliptic curve. + * @param lambda The element λ of + * Z[τ] of which to compute the + * [τ]-adic NAF. + * @param width The window width of the resulting WNAF. + * @param pow2w 2width. + * @param tw The auxiliary value tw. + * @param alpha The αu's for the window width. + * @return The [τ]-adic window NAF of + * λ. + */ + public static sbyte[] TauAdicWNaf(sbyte mu, ZTauElement lambda, + sbyte width, BigInteger pow2w, BigInteger tw, ZTauElement[] alpha) + { + if (!((mu == 1) || (mu == -1))) + throw new ArgumentException("mu must be 1 or -1"); + + BigInteger norm = Norm(mu, lambda); + + // Ceiling of log2 of the norm + int log2Norm = norm.BitLength; + + // If length(TNAF) > 30, then length(TNAF) < log2Norm + 3.52 + int maxLength = log2Norm > 30 ? log2Norm + 4 + width : 34 + width; + + // The array holding the TNAF + sbyte[] u = new sbyte[maxLength]; + + // 2^(width - 1) + BigInteger pow2wMin1 = pow2w.ShiftRight(1); + + // Split lambda into two BigIntegers to simplify calculations + BigInteger r0 = lambda.u; + BigInteger r1 = lambda.v; + int i = 0; + + // while lambda <> (0, 0) + while (!((r0.Equals(BigInteger.Zero))&&(r1.Equals(BigInteger.Zero)))) + { + // if r0 is odd + if (r0.TestBit(0)) + { + // uUnMod = r0 + r1*tw Mod 2^width + BigInteger uUnMod + = r0.Add(r1.Multiply(tw)).Mod(pow2w); + + sbyte uLocal; + // if uUnMod >= 2^(width - 1) + if (uUnMod.CompareTo(pow2wMin1) >= 0) + { + uLocal = (sbyte) uUnMod.Subtract(pow2w).IntValue; + } + else + { + uLocal = (sbyte) uUnMod.IntValue; + } + // uLocal is now in [-2^(width-1), 2^(width-1)-1] + + u[i] = uLocal; + bool s = true; + if (uLocal < 0) + { + s = false; + uLocal = (sbyte)-uLocal; + } + // uLocal is now >= 0 + + if (s) + { + r0 = r0.Subtract(alpha[uLocal].u); + r1 = r1.Subtract(alpha[uLocal].v); + } + else + { + r0 = r0.Add(alpha[uLocal].u); + r1 = r1.Add(alpha[uLocal].v); + } + } + else + { + u[i] = 0; + } + + BigInteger t = r0; + + if (mu == 1) + { + r0 = r1.Add(r0.ShiftRight(1)); + } + else + { + // mu == -1 + r0 = r1.Subtract(r0.ShiftRight(1)); + } + r1 = t.ShiftRight(1).Negate(); + i++; + } + return u; + } + + /** + * Does the precomputation for WTNAF multiplication. + * @param p The ECPoint for which to do the precomputation. + * @param a The parameter a of the elliptic curve. + * @return The precomputation array for p. + */ + public static AbstractF2mPoint[] GetPreComp(AbstractF2mPoint p, sbyte a) + { + sbyte[][] alphaTnaf = (a == 0) ? Tnaf.Alpha0Tnaf : Tnaf.Alpha1Tnaf; + + AbstractF2mPoint[] pu = new AbstractF2mPoint[(uint)(alphaTnaf.Length + 1) >> 1]; + pu[0] = p; + + uint precompLen = (uint)alphaTnaf.Length; + for (uint i = 3; i < precompLen; i += 2) + { + pu[i >> 1] = Tnaf.MultiplyFromTnaf(p, alphaTnaf[i]); + } + + p.Curve.NormalizeAll(pu); + + return pu; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc/Tnaf.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc/Tnaf.cs.meta new file mode 100644 index 000000000..e5f80c096 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc/Tnaf.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c350a1fcb33886749ad8b6d264d92746 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc/ZTauElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc/ZTauElement.cs new file mode 100644 index 000000000..720141ec2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc/ZTauElement.cs @@ -0,0 +1,40 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Abc +{ + /** + * Class representing an element of Z[τ]. Let + * λ be an element of Z[τ]. Then + * λ is given as λ = u + vτ. The + * components u and v may be used directly, there + * are no accessor methods. + * Immutable class. + */ + internal class ZTauElement + { + /** + * The "real" part of λ. + */ + public readonly BigInteger u; + + /** + * The "τ-adic" part of λ. + */ + public readonly BigInteger v; + + /** + * Constructor for an element λ of + * Z[τ]. + * @param u The "real" part of λ. + * @param v The "τ-adic" part of + * λ. + */ + public ZTauElement(BigInteger u, BigInteger v) + { + this.u = u; + this.v = v; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc/ZTauElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc/ZTauElement.cs.meta new file mode 100644 index 000000000..291026d6e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/abc/ZTauElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 06f1426762adf7a4a814250bf4084ce7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom.meta new file mode 100644 index 000000000..c3cb22faa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f13f8a0df1a5e424796c38a3c077a81c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/djb.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/djb.meta new file mode 100644 index 000000000..ba745c970 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/djb.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a38ef3f332029e945bb971d37bccd8a4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/djb/Curve25519.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/djb/Curve25519.cs new file mode 100644 index 000000000..0454b349a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/djb/Curve25519.cs @@ -0,0 +1,3 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/djb/Curve25519.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/djb/Curve25519.cs.meta new file mode 100644 index 000000000..d979f50eb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/djb/Curve25519.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fd030ecdc7871c74ca192e7bf4c31075 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/djb/Curve25519Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/djb/Curve25519Point.cs new file mode 100644 index 000000000..0454b349a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/djb/Curve25519Point.cs @@ -0,0 +1,3 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/djb/Curve25519Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/djb/Curve25519Point.cs.meta new file mode 100644 index 000000000..96c36082f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/djb/Curve25519Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2bc45dc149a92fe4d934ea8137fa7174 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm.meta new file mode 100644 index 000000000..154cf3d84 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 055f8fc08106e0646a52547e1a32b372 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1Curve.cs new file mode 100644 index 000000000..df68ed295 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1Curve.cs @@ -0,0 +1,174 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.GM +{ + internal class SM2P256V1Curve + : AbstractFpCurve + { + public static readonly BigInteger q = SM2P256V1FieldElement.Q; + + private const int SM2P256V1_DEFAULT_COORDS = COORD_JACOBIAN; + private const int SM2P256V1_FE_INTS = 8; + private static readonly ECFieldElement[] SM2P256V1_AFFINE_ZS = new ECFieldElement[] { new SM2P256V1FieldElement(BigInteger.One) }; + + protected readonly SM2P256V1Point m_infinity; + + public SM2P256V1Curve() + : base(q) + { + this.m_infinity = new SM2P256V1Point(this, null, null); + + this.m_a = FromBigInteger(new BigInteger(1, + Hex.DecodeStrict("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC"))); + this.m_b = FromBigInteger(new BigInteger(1, + Hex.DecodeStrict("28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123")); + this.m_cofactor = BigInteger.One; + this.m_coord = SM2P256V1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SM2P256V1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_JACOBIAN: + return true; + default: + return false; + } + } + + public virtual BigInteger Q + { + get { return q; } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return q.BitLength; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SM2P256V1FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SM2P256V1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SM2P256V1Point(this, x, y, zs); + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + uint[] table = new uint[len * SM2P256V1_FE_INTS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat256.Copy(((SM2P256V1FieldElement)p.RawXCoord).x, 0, table, pos); pos += SM2P256V1_FE_INTS; + Nat256.Copy(((SM2P256V1FieldElement)p.RawYCoord).x, 0, table, pos); pos += SM2P256V1_FE_INTS; + } + } + + return new SM2P256V1LookupTable(this, table, len); + } + + public override ECFieldElement RandomFieldElement(SecureRandom r) + { + uint[] x = Nat256.Create(); + SM2P256V1Field.Random(r, x); + return new SM2P256V1FieldElement(x); + } + + public override ECFieldElement RandomFieldElementMult(SecureRandom r) + { + uint[] x = Nat256.Create(); + SM2P256V1Field.RandomMult(r, x); + return new SM2P256V1FieldElement(x); + } + + private class SM2P256V1LookupTable + : AbstractECLookupTable + { + private readonly SM2P256V1Curve m_outer; + private readonly uint[] m_table; + private readonly int m_size; + + internal SM2P256V1LookupTable(SM2P256V1Curve outer, uint[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + uint[] x = Nat256.Create(), y = Nat256.Create(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + uint MASK = (uint)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SM2P256V1_FE_INTS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SM2P256V1_FE_INTS + j] & MASK; + } + + pos += (SM2P256V1_FE_INTS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + uint[] x = Nat256.Create(), y = Nat256.Create(); + int pos = index * SM2P256V1_FE_INTS * 2; + + for (int j = 0; j < SM2P256V1_FE_INTS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SM2P256V1_FE_INTS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(uint[] x, uint[] y) + { + return m_outer.CreateRawPoint(new SM2P256V1FieldElement(x), new SM2P256V1FieldElement(y), SM2P256V1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1Curve.cs.meta new file mode 100644 index 000000000..895a40a12 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: acbfba639c7e65d4093f380a4ba84523 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1Field.cs new file mode 100644 index 000000000..ed9513d17 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1Field.cs @@ -0,0 +1,349 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.GM +{ + internal class SM2P256V1Field + { + // 2^256 - 2^224 - 2^96 + 2^64 - 1 + internal static readonly uint[] P = new uint[]{ 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE }; + private static readonly uint[] PExt = new uint[]{ 00000001, 0x00000000, 0xFFFFFFFE, 0x00000001, 0x00000001, + 0xFFFFFFFE, 0x00000000, 0x00000002, 0xFFFFFFFE, 0xFFFFFFFD, 0x00000003, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0xFFFFFFFE }; + private const uint P7 = 0xFFFFFFFE; + private const uint PExt15 = 0xFFFFFFFE; + + public static void Add(uint[] x, uint[] y, uint[] z) + { + uint c = Nat256.Add(x, y, z); + if (c != 0 || (z[7] >= P7 && Nat256.Gte(z, P))) + { + AddPInvTo(z); + } + } + + public static void AddExt(uint[] xx, uint[] yy, uint[] zz) + { + uint c = Nat.Add(16, xx, yy, zz); + if (c != 0 || (zz[15] >= PExt15 && Nat.Gte(16, zz, PExt))) + { + Nat.SubFrom(16, PExt, zz); + } + } + + public static void AddOne(uint[] x, uint[] z) + { + uint c = Nat.Inc(8, x, z); + if (c != 0 || (z[7] >= P7 && Nat256.Gte(z, P))) + { + AddPInvTo(z); + } + } + + public static uint[] FromBigInteger(BigInteger x) + { + uint[] z = Nat.FromBigInteger(256, x); + if (z[7] >= P7 && Nat256.Gte(z, P)) + { + Nat256.SubFrom(P, z); + } + return z; + } + + public static void Inv(uint[] x, uint[] z) + { + Mod.CheckedModOddInverse(P, x, z); + } + + public static void Half(uint[] x, uint[] z) + { + if ((x[0] & 1) == 0) + { + Nat.ShiftDownBit(8, x, 0, z); + } + else + { + uint c = Nat256.Add(x, P, z); + Nat.ShiftDownBit(8, z, c); + } + } + + public static int IsZero(uint[] x) + { + uint d = 0; + for (int i = 0; i < 8; ++i) + { + d |= x[i]; + } + d = (d >> 1) | (d & 1); + return ((int)d - 1) >> 31; + } + + public static void Multiply(uint[] x, uint[] y, uint[] z) + { + uint[] tt = Nat256.CreateExt(); + Nat256.Mul(x, y, tt); + Reduce(tt, z); + } + + public static void MultiplyAddToExt(uint[] x, uint[] y, uint[] zz) + { + uint c = Nat256.MulAddTo(x, y, zz); + if (c != 0 || (zz[15] >= PExt15 && Nat.Gte(16, zz, PExt))) + { + Nat.SubFrom(16, PExt, zz); + } + } + + public static void Negate(uint[] x, uint[] z) + { + if (0 != IsZero(x)) + { + Nat256.Sub(P, P, z); + } + else + { + Nat256.Sub(P, x, z); + } + } + + public static void Random(SecureRandom r, uint[] z) + { + byte[] bb = new byte[8 * 4]; + do + { + r.NextBytes(bb); + Pack.LE_To_UInt32(bb, 0, z, 0, 8); + } + while (0 == Nat.LessThan(8, z, P)); + } + + public static void RandomMult(SecureRandom r, uint[] z) + { + do + { + Random(r, z); + } + while (0 != IsZero(z)); + } + + public static void Reduce(uint[] xx, uint[] z) + { + long xx08 = xx[8], xx09 = xx[9], xx10 = xx[10], xx11 = xx[11]; + long xx12 = xx[12], xx13 = xx[13], xx14 = xx[14], xx15 = xx[15]; + + long t0 = xx08 + xx09; + long t1 = xx10 + xx11; + long t2 = xx12 + xx15; + long t3 = xx13 + xx14; + long t4 = t3 + (xx15 << 1); + + long ts = t0 + t3; + long tt = t1 + t2 + ts; + + long cc = 0; + cc += (long)xx[0] + tt + xx13 + xx14 + xx15; + z[0] = (uint)cc; + cc >>= 32; + cc += (long)xx[1] + tt - xx08 + xx14 + xx15; + z[1] = (uint)cc; + cc >>= 32; + cc += (long)xx[2] - ts; + z[2] = (uint)cc; + cc >>= 32; + cc += (long)xx[3] + tt - xx09 - xx10 + xx13; + z[3] = (uint)cc; + cc >>= 32; + cc += (long)xx[4] + tt - t1 - xx08 + xx14; + z[4] = (uint)cc; + cc >>= 32; + cc += (long)xx[5] + t4 + xx10; + z[5] = (uint)cc; + cc >>= 32; + cc += (long)xx[6] + xx11 + xx14 + xx15; + z[6] = (uint)cc; + cc >>= 32; + cc += (long)xx[7] + tt + t4 + xx12; + z[7] = (uint)cc; + cc >>= 32; + + Debug.Assert(cc >= 0); + + Reduce32((uint)cc, z); + } + + public static void Reduce32(uint x, uint[] z) + { + long cc = 0; + + if (x != 0) + { + long xx08 = x; + + cc += (long)z[0] + xx08; + z[0] = (uint)cc; + cc >>= 32; + if (cc != 0) + { + cc += (long)z[1]; + z[1] = (uint)cc; + cc >>= 32; + } + cc += (long)z[2] - xx08; + z[2] = (uint)cc; + cc >>= 32; + cc += (long)z[3] + xx08; + z[3] = (uint)cc; + cc >>= 32; + if (cc != 0) + { + cc += (long)z[4]; + z[4] = (uint)cc; + cc >>= 32; + cc += (long)z[5]; + z[5] = (uint)cc; + cc >>= 32; + cc += (long)z[6]; + z[6] = (uint)cc; + cc >>= 32; + } + cc += (long)z[7] + xx08; + z[7] = (uint)cc; + cc >>= 32; + + Debug.Assert(cc == 0 || cc == 1); + } + + if (cc != 0 || (z[7] >= P7 && Nat256.Gte(z, P))) + { + AddPInvTo(z); + } + } + + public static void Square(uint[] x, uint[] z) + { + uint[] tt = Nat256.CreateExt(); + Nat256.Square(x, tt); + Reduce(tt, z); + } + + public static void SquareN(uint[] x, int n, uint[] z) + { + Debug.Assert(n > 0); + + uint[] tt = Nat256.CreateExt(); + Nat256.Square(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + Nat256.Square(z, tt); + Reduce(tt, z); + } + } + + public static void Subtract(uint[] x, uint[] y, uint[] z) + { + int c = Nat256.Sub(x, y, z); + if (c != 0) + { + SubPInvFrom(z); + } + } + + public static void SubtractExt(uint[] xx, uint[] yy, uint[] zz) + { + int c = Nat.Sub(16, xx, yy, zz); + if (c != 0) + { + Nat.AddTo(16, PExt, zz); + } + } + + public static void Twice(uint[] x, uint[] z) + { + uint c = Nat.ShiftUpBit(8, x, 0, z); + if (c != 0 || (z[7] >= P7 && Nat256.Gte(z, P))) + { + AddPInvTo(z); + } + } + + private static void AddPInvTo(uint[] z) + { + long c = (long)z[0] + 1; + z[0] = (uint)c; + c >>= 32; + if (c != 0) + { + c += (long)z[1]; + z[1] = (uint)c; + c >>= 32; + } + c += (long)z[2] - 1; + z[2] = (uint)c; + c >>= 32; + c += (long)z[3] + 1; + z[3] = (uint)c; + c >>= 32; + if (c != 0) + { + c += (long)z[4]; + z[4] = (uint)c; + c >>= 32; + c += (long)z[5]; + z[5] = (uint)c; + c >>= 32; + c += (long)z[6]; + z[6] = (uint)c; + c >>= 32; + } + c += (long)z[7] + 1; + z[7] = (uint)c; + //c >>= 32; + } + + private static void SubPInvFrom(uint[] z) + { + long c = (long)z[0] - 1; + z[0] = (uint)c; + c >>= 32; + if (c != 0) + { + c += (long)z[1]; + z[1] = (uint)c; + c >>= 32; + } + c += (long)z[2] + 1; + z[2] = (uint)c; + c >>= 32; + c += (long)z[3] - 1; + z[3] = (uint)c; + c >>= 32; + if (c != 0) + { + c += (long)z[4]; + z[4] = (uint)c; + c >>= 32; + c += (long)z[5]; + z[5] = (uint)c; + c >>= 32; + c += (long)z[6]; + z[6] = (uint)c; + c >>= 32; + } + c += (long)z[7] - 1; + z[7] = (uint)c; + //c >>= 32; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1Field.cs.meta new file mode 100644 index 000000000..b5743fc23 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b192a254f279cb545b0e25c31042094e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1FieldElement.cs new file mode 100644 index 000000000..2ddffffc0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1FieldElement.cs @@ -0,0 +1,216 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.GM +{ + internal class SM2P256V1FieldElement + : AbstractFpFieldElement + { + public static readonly BigInteger Q = new BigInteger(1, + Hex.DecodeStrict("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF")); + + protected internal readonly uint[] x; + + public SM2P256V1FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.CompareTo(Q) >= 0) + throw new ArgumentException("value invalid for SM2P256V1FieldElement", "x"); + + this.x = SM2P256V1Field.FromBigInteger(x); + } + + public SM2P256V1FieldElement() + { + this.x = Nat256.Create(); + } + + protected internal SM2P256V1FieldElement(uint[] x) + { + this.x = x; + } + + public override bool IsZero + { + get { return Nat256.IsZero(x); } + } + + public override bool IsOne + { + get { return Nat256.IsOne(x); } + } + + public override bool TestBitZero() + { + return Nat256.GetBit(x, 0) == 1; + } + + public override BigInteger ToBigInteger() + { + return Nat256.ToBigInteger(x); + } + + public override string FieldName + { + get { return "SM2P256V1Field"; } + } + + public override int FieldSize + { + get { return Q.BitLength; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + uint[] z = Nat256.Create(); + SM2P256V1Field.Add(x, ((SM2P256V1FieldElement)b).x, z); + return new SM2P256V1FieldElement(z); + } + + public override ECFieldElement AddOne() + { + uint[] z = Nat256.Create(); + SM2P256V1Field.AddOne(x, z); + return new SM2P256V1FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + uint[] z = Nat256.Create(); + SM2P256V1Field.Subtract(x, ((SM2P256V1FieldElement)b).x, z); + return new SM2P256V1FieldElement(z); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + uint[] z = Nat256.Create(); + SM2P256V1Field.Multiply(x, ((SM2P256V1FieldElement)b).x, z); + return new SM2P256V1FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + //return Multiply(b.Invert()); + uint[] z = Nat256.Create(); + SM2P256V1Field.Inv(((SM2P256V1FieldElement)b).x, z); + SM2P256V1Field.Multiply(z, x, z); + return new SM2P256V1FieldElement(z); + } + + public override ECFieldElement Negate() + { + uint[] z = Nat256.Create(); + SM2P256V1Field.Negate(x, z); + return new SM2P256V1FieldElement(z); + } + + public override ECFieldElement Square() + { + uint[] z = Nat256.Create(); + SM2P256V1Field.Square(x, z); + return new SM2P256V1FieldElement(z); + } + + public override ECFieldElement Invert() + { + uint[] z = Nat256.Create(); + SM2P256V1Field.Inv(x, z); + return new SM2P256V1FieldElement(z); + } + + /** + * return a sqrt root - the routine verifies that the calculation returns the right value - if + * none exists it returns null. + */ + public override ECFieldElement Sqrt() + { + /* + * Raise this element to the exponent 2^254 - 2^222 - 2^94 + 2^62 + * + * Breaking up the exponent's binary representation into "repunits", we get: + * { 31 1s } { 1 0s } { 128 1s } { 31 0s } { 1 1s } { 62 0s } + * + * We use an addition chain for the beginning: [1], 2, 3, 6, 12, [24], 30, [31] + */ + + uint[] x1 = this.x; + if (Nat256.IsZero(x1) || Nat256.IsOne(x1)) + { + return this; + } + + uint[] x2 = Nat256.Create(); + SM2P256V1Field.Square(x1, x2); + SM2P256V1Field.Multiply(x2, x1, x2); + uint[] x4 = Nat256.Create(); + SM2P256V1Field.SquareN(x2, 2, x4); + SM2P256V1Field.Multiply(x4, x2, x4); + uint[] x6 = Nat256.Create(); + SM2P256V1Field.SquareN(x4, 2, x6); + SM2P256V1Field.Multiply(x6, x2, x6); + uint[] x12 = x2; + SM2P256V1Field.SquareN(x6, 6, x12); + SM2P256V1Field.Multiply(x12, x6, x12); + uint[] x24 = Nat256.Create(); + SM2P256V1Field.SquareN(x12, 12, x24); + SM2P256V1Field.Multiply(x24, x12, x24); + uint[] x30 = x12; + SM2P256V1Field.SquareN(x24, 6, x30); + SM2P256V1Field.Multiply(x30, x6, x30); + uint[] x31 = x6; + SM2P256V1Field.Square(x30, x31); + SM2P256V1Field.Multiply(x31, x1, x31); + + uint[] t1 = x24; + SM2P256V1Field.SquareN(x31, 31, t1); + + uint[] x62 = x30; + SM2P256V1Field.Multiply(t1, x31, x62); + + SM2P256V1Field.SquareN(t1, 32, t1); + SM2P256V1Field.Multiply(t1, x62, t1); + SM2P256V1Field.SquareN(t1, 62, t1); + SM2P256V1Field.Multiply(t1, x62, t1); + SM2P256V1Field.SquareN(t1, 4, t1); + SM2P256V1Field.Multiply(t1, x4, t1); + SM2P256V1Field.SquareN(t1, 32, t1); + SM2P256V1Field.Multiply(t1, x1, t1); + SM2P256V1Field.SquareN(t1, 62, t1); + + uint[] t2 = x4; + SM2P256V1Field.Square(t1, t2); + + return Nat256.Eq(x1, t2) ? new SM2P256V1FieldElement(t1) : null; + } + + public override bool Equals(object obj) + { + return Equals(obj as SM2P256V1FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SM2P256V1FieldElement); + } + + public virtual bool Equals(SM2P256V1FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat256.Eq(x, other.x); + } + + public override int GetHashCode() + { + return Q.GetHashCode() ^ Arrays.GetHashCode(x, 0, 8); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1FieldElement.cs.meta new file mode 100644 index 000000000..00c07eed7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 73006e3eaec93cb44a4d004d03e84862 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1Point.cs new file mode 100644 index 000000000..a92e7b384 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1Point.cs @@ -0,0 +1,249 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.GM +{ + internal class SM2P256V1Point + : AbstractFpPoint + { + internal SM2P256V1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SM2P256V1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SM2P256V1Point(null, AffineXCoord, AffineYCoord); + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + if (this == b) + return Twice(); + + ECCurve curve = this.Curve; + + SM2P256V1FieldElement X1 = (SM2P256V1FieldElement)this.RawXCoord, Y1 = (SM2P256V1FieldElement)this.RawYCoord; + SM2P256V1FieldElement X2 = (SM2P256V1FieldElement)b.RawXCoord, Y2 = (SM2P256V1FieldElement)b.RawYCoord; + + SM2P256V1FieldElement Z1 = (SM2P256V1FieldElement)this.RawZCoords[0]; + SM2P256V1FieldElement Z2 = (SM2P256V1FieldElement)b.RawZCoords[0]; + + uint c; + uint[] tt1 = Nat256.CreateExt(); + uint[] t2 = Nat256.Create(); + uint[] t3 = Nat256.Create(); + uint[] t4 = Nat256.Create(); + + bool Z1IsOne = Z1.IsOne; + uint[] U2, S2; + if (Z1IsOne) + { + U2 = X2.x; + S2 = Y2.x; + } + else + { + S2 = t3; + SM2P256V1Field.Square(Z1.x, S2); + + U2 = t2; + SM2P256V1Field.Multiply(S2, X2.x, U2); + + SM2P256V1Field.Multiply(S2, Z1.x, S2); + SM2P256V1Field.Multiply(S2, Y2.x, S2); + } + + bool Z2IsOne = Z2.IsOne; + uint[] U1, S1; + if (Z2IsOne) + { + U1 = X1.x; + S1 = Y1.x; + } + else + { + S1 = t4; + SM2P256V1Field.Square(Z2.x, S1); + + U1 = tt1; + SM2P256V1Field.Multiply(S1, X1.x, U1); + + SM2P256V1Field.Multiply(S1, Z2.x, S1); + SM2P256V1Field.Multiply(S1, Y1.x, S1); + } + + uint[] H = Nat256.Create(); + SM2P256V1Field.Subtract(U1, U2, H); + + uint[] R = t2; + SM2P256V1Field.Subtract(S1, S2, R); + + // Check if b == this or b == -this + if (Nat256.IsZero(H)) + { + if (Nat256.IsZero(R)) + { + // this == b, i.e. this must be doubled + return this.Twice(); + } + + // this == -b, i.e. the result is the point at infinity + return curve.Infinity; + } + + uint[] HSquared = t3; + SM2P256V1Field.Square(H, HSquared); + + uint[] G = Nat256.Create(); + SM2P256V1Field.Multiply(HSquared, H, G); + + uint[] V = t3; + SM2P256V1Field.Multiply(HSquared, U1, V); + + SM2P256V1Field.Negate(G, G); + Nat256.Mul(S1, G, tt1); + + c = Nat256.AddBothTo(V, V, G); + SM2P256V1Field.Reduce32(c, G); + + SM2P256V1FieldElement X3 = new SM2P256V1FieldElement(t4); + SM2P256V1Field.Square(R, X3.x); + SM2P256V1Field.Subtract(X3.x, G, X3.x); + + SM2P256V1FieldElement Y3 = new SM2P256V1FieldElement(G); + SM2P256V1Field.Subtract(V, X3.x, Y3.x); + SM2P256V1Field.MultiplyAddToExt(Y3.x, R, tt1); + SM2P256V1Field.Reduce(tt1, Y3.x); + + SM2P256V1FieldElement Z3 = new SM2P256V1FieldElement(H); + if (!Z1IsOne) + { + SM2P256V1Field.Multiply(Z3.x, Z1.x, Z3.x); + } + if (!Z2IsOne) + { + SM2P256V1Field.Multiply(Z3.x, Z2.x, Z3.x); + } + + ECFieldElement[] zs = new ECFieldElement[]{ Z3 }; + + return new SM2P256V1Point(curve, X3, Y3, zs); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + SM2P256V1FieldElement Y1 = (SM2P256V1FieldElement)this.RawYCoord; + if (Y1.IsZero) + return curve.Infinity; + + SM2P256V1FieldElement X1 = (SM2P256V1FieldElement)this.RawXCoord, Z1 = (SM2P256V1FieldElement)this.RawZCoords[0]; + + uint c; + uint[] t1 = Nat256.Create(); + uint[] t2 = Nat256.Create(); + + uint[] Y1Squared = Nat256.Create(); + SM2P256V1Field.Square(Y1.x, Y1Squared); + + uint[] T = Nat256.Create(); + SM2P256V1Field.Square(Y1Squared, T); + + bool Z1IsOne = Z1.IsOne; + + uint[] Z1Squared = Z1.x; + if (!Z1IsOne) + { + Z1Squared = t2; + SM2P256V1Field.Square(Z1.x, Z1Squared); + } + + SM2P256V1Field.Subtract(X1.x, Z1Squared, t1); + + uint[] M = t2; + SM2P256V1Field.Add(X1.x, Z1Squared, M); + SM2P256V1Field.Multiply(M, t1, M); + c = Nat256.AddBothTo(M, M, M); + SM2P256V1Field.Reduce32(c, M); + + uint[] S = Y1Squared; + SM2P256V1Field.Multiply(Y1Squared, X1.x, S); + c = Nat.ShiftUpBits(8, S, 2, 0); + SM2P256V1Field.Reduce32(c, S); + + c = Nat.ShiftUpBits(8, T, 3, 0, t1); + SM2P256V1Field.Reduce32(c, t1); + + SM2P256V1FieldElement X3 = new SM2P256V1FieldElement(T); + SM2P256V1Field.Square(M, X3.x); + SM2P256V1Field.Subtract(X3.x, S, X3.x); + SM2P256V1Field.Subtract(X3.x, S, X3.x); + + SM2P256V1FieldElement Y3 = new SM2P256V1FieldElement(S); + SM2P256V1Field.Subtract(S, X3.x, Y3.x); + SM2P256V1Field.Multiply(Y3.x, M, Y3.x); + SM2P256V1Field.Subtract(Y3.x, t1, Y3.x); + + SM2P256V1FieldElement Z3 = new SM2P256V1FieldElement(M); + SM2P256V1Field.Twice(Y1.x, Z3.x); + if (!Z1IsOne) + { + SM2P256V1Field.Multiply(Z3.x, Z1.x, Z3.x); + } + + return new SM2P256V1Point(curve, X3, Y3, new ECFieldElement[]{ Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this == b) + return ThreeTimes(); + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECFieldElement Y1 = this.RawYCoord; + if (Y1.IsZero) + return b; + + return Twice().Add(b); + } + + public override ECPoint ThreeTimes() + { + if (this.IsInfinity || this.RawYCoord.IsZero) + return this; + + // NOTE: Be careful about recursions between TwicePlus and ThreeTimes + return Twice().Add(this); + } + + public override ECPoint Negate() + { + if (IsInfinity) + return this; + + return new SM2P256V1Point(Curve, RawXCoord, RawYCoord.Negate(), RawZCoords); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1Point.cs.meta new file mode 100644 index 000000000..e079cf5c7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/gm/SM2P256V1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7c6a52fc113d5c74a839cb2861ce100d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec.meta new file mode 100644 index 000000000..21d4c1eea --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: edf4874c4cb236144b35b46e9a8037ad +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1Curve.cs new file mode 100644 index 000000000..3da9217f2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1Curve.cs @@ -0,0 +1,175 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP128R1Curve + : AbstractFpCurve + { + public static readonly BigInteger q = SecP128R1FieldElement.Q; + + private const int SECP128R1_DEFAULT_COORDS = COORD_JACOBIAN; + private const int SECP128R1_FE_INTS = 4; + private static readonly ECFieldElement[] SECP128R1_AFFINE_ZS = new ECFieldElement[] { new SecP128R1FieldElement(BigInteger.One) }; + + protected readonly SecP128R1Point m_infinity; + + public SecP128R1Curve() + : base(q) + { + this.m_infinity = new SecP128R1Point(this, null, null); + + this.m_a = FromBigInteger(new BigInteger(1, + Hex.DecodeStrict("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC"))); + this.m_b = FromBigInteger(new BigInteger(1, + Hex.DecodeStrict("E87579C11079F43DD824993C2CEE5ED3"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("FFFFFFFE0000000075A30D1B9038A115")); + this.m_cofactor = BigInteger.One; + + this.m_coord = SECP128R1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecP128R1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_JACOBIAN: + return true; + default: + return false; + } + } + + public virtual BigInteger Q + { + get { return q; } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return q.BitLength; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecP128R1FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecP128R1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecP128R1Point(this, x, y, zs); + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + uint[] table = new uint[len * SECP128R1_FE_INTS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat128.Copy(((SecP128R1FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECP128R1_FE_INTS; + Nat128.Copy(((SecP128R1FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECP128R1_FE_INTS; + } + } + + return new SecP128R1LookupTable(this, table, len); + } + + public override ECFieldElement RandomFieldElement(SecureRandom r) + { + uint[] x = Nat128.Create(); + SecP128R1Field.Random(r, x); + return new SecP128R1FieldElement(x); + } + + public override ECFieldElement RandomFieldElementMult(SecureRandom r) + { + uint[] x = Nat128.Create(); + SecP128R1Field.RandomMult(r, x); + return new SecP128R1FieldElement(x); + } + + private class SecP128R1LookupTable + : AbstractECLookupTable + { + private readonly SecP128R1Curve m_outer; + private readonly uint[] m_table; + private readonly int m_size; + + internal SecP128R1LookupTable(SecP128R1Curve outer, uint[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + uint[] x = Nat128.Create(), y = Nat128.Create(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + uint MASK = (uint)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECP128R1_FE_INTS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECP128R1_FE_INTS + j] & MASK; + } + + pos += (SECP128R1_FE_INTS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + uint[] x = Nat128.Create(), y = Nat128.Create(); + int pos = index * SECP128R1_FE_INTS * 2; + + for (int j = 0; j < SECP128R1_FE_INTS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECP128R1_FE_INTS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(uint[] x, uint[] y) + { + return m_outer.CreateRawPoint(new SecP128R1FieldElement(x), new SecP128R1FieldElement(y), SECP128R1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1Curve.cs.meta new file mode 100644 index 000000000..5952f1dc1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 07d11740bf1c5f949b70c6663eb822ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1Field.cs new file mode 100644 index 000000000..aaf15da9a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1Field.cs @@ -0,0 +1,265 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP128R1Field + { + // 2^128 - 2^97 - 1 + internal static readonly uint[] P = new uint[]{ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFD }; + private static readonly uint[] PExt = new uint[]{ 0x00000001, 0x00000000, 0x00000000, 0x00000004, 0xFFFFFFFE, + 0xFFFFFFFF, 0x00000003, 0xFFFFFFFC }; + private static readonly uint[] PExtInv = new uint[]{ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFB, + 0x00000001, 0x00000000, 0xFFFFFFFC, 0x00000003 }; + private const uint P3 = 0xFFFFFFFD; + private const uint PExt7 = 0xFFFFFFFC; + + public static void Add(uint[] x, uint[] y, uint[] z) + { + uint c = Nat128.Add(x, y, z); + if (c != 0 || (z[3] >= P3 && Nat128.Gte(z, P))) + { + AddPInvTo(z); + } + } + + public static void AddExt(uint[] xx, uint[] yy, uint[] zz) + { + uint c = Nat256.Add(xx, yy, zz); + if (c != 0 || (zz[7] >= PExt7 && Nat256.Gte(zz, PExt))) + { + Nat.AddTo(PExtInv.Length, PExtInv, zz); + } + } + + public static void AddOne(uint[] x, uint[] z) + { + uint c = Nat.Inc(4, x, z); + if (c != 0 || (z[3] >= P3 && Nat128.Gte(z, P))) + { + AddPInvTo(z); + } + } + + public static uint[] FromBigInteger(BigInteger x) + { + uint[] z = Nat.FromBigInteger(128, x); + if (z[3] >= P3 && Nat128.Gte(z, P)) + { + Nat128.SubFrom(P, z); + } + return z; + } + + public static void Half(uint[] x, uint[] z) + { + if ((x[0] & 1) == 0) + { + Nat.ShiftDownBit(4, x, 0, z); + } + else + { + uint c = Nat128.Add(x, P, z); + Nat.ShiftDownBit(4, z, c); + } + } + + public static void Inv(uint[] x, uint[] z) + { + Mod.CheckedModOddInverse(P, x, z); + } + + public static int IsZero(uint[] x) + { + uint d = 0; + for (int i = 0; i < 4; ++i) + { + d |= x[i]; + } + d = (d >> 1) | (d & 1); + return ((int)d - 1) >> 31; + } + + public static void Multiply(uint[] x, uint[] y, uint[] z) + { + uint[] tt = Nat128.CreateExt(); + Nat128.Mul(x, y, tt); + Reduce(tt, z); + } + + public static void MultiplyAddToExt(uint[] x, uint[] y, uint[] zz) + { + uint c = Nat128.MulAddTo(x, y, zz); + if (c != 0 || (zz[7] >= PExt7 && Nat256.Gte(zz, PExt))) + { + Nat.AddTo(PExtInv.Length, PExtInv, zz); + } + } + + public static void Negate(uint[] x, uint[] z) + { + if (0 != IsZero(x)) + { + Nat128.Sub(P, P, z); + } + else + { + Nat128.Sub(P, x, z); + } + } + + public static void Random(SecureRandom r, uint[] z) + { + byte[] bb = new byte[4 * 4]; + do + { + r.NextBytes(bb); + Pack.LE_To_UInt32(bb, 0, z, 0, 4); + } + while (0 == Nat.LessThan(4, z, P)); + } + + public static void RandomMult(SecureRandom r, uint[] z) + { + do + { + Random(r, z); + } + while (0 != IsZero(z)); + } + + public static void Reduce(uint[] xx, uint[] z) + { + ulong x0 = xx[0], x1 = xx[1], x2 = xx[2], x3 = xx[3]; + ulong x4 = xx[4], x5 = xx[5], x6 = xx[6], x7 = xx[7]; + + x3 += x7; x6 += (x7 << 1); + x2 += x6; x5 += (x6 << 1); + x1 += x5; x4 += (x5 << 1); + x0 += x4; x3 += (x4 << 1); + + z[0] = (uint)x0; x1 += (x0 >> 32); + z[1] = (uint)x1; x2 += (x1 >> 32); + z[2] = (uint)x2; x3 += (x2 >> 32); + z[3] = (uint)x3; + + Reduce32((uint)(x3 >> 32), z); + } + + public static void Reduce32(uint x, uint[] z) + { + while (x != 0) + { + ulong c, x4 = x; + + c = (ulong)z[0] + x4; + z[0] = (uint)c; c >>= 32; + if (c != 0) + { + c += (ulong)z[1]; + z[1] = (uint)c; c >>= 32; + c += (ulong)z[2]; + z[2] = (uint)c; c >>= 32; + } + c += (ulong)z[3] + (x4 << 1); + z[3] = (uint)c; c >>= 32; + + Debug.Assert(c >= 0 && c <= 2); + + x = (uint)c; + } + + if (z[3] >= P3 && Nat128.Gte(z, P)) + { + AddPInvTo(z); + } + } + + public static void Square(uint[] x, uint[] z) + { + uint[] tt = Nat128.CreateExt(); + Nat128.Square(x, tt); + Reduce(tt, z); + } + + public static void SquareN(uint[] x, int n, uint[] z) + { + Debug.Assert(n > 0); + + uint[] tt = Nat128.CreateExt(); + Nat128.Square(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + Nat128.Square(z, tt); + Reduce(tt, z); + } + } + + public static void Subtract(uint[] x, uint[] y, uint[] z) + { + int c = Nat128.Sub(x, y, z); + if (c != 0) + { + SubPInvFrom(z); + } + } + + public static void SubtractExt(uint[] xx, uint[] yy, uint[] zz) + { + int c = Nat.Sub(10, xx, yy, zz); + if (c != 0) + { + Nat.SubFrom(PExtInv.Length, PExtInv, zz); + } + } + + public static void Twice(uint[] x, uint[] z) + { + uint c = Nat.ShiftUpBit(4, x, 0, z); + if (c != 0 || (z[3] >= P3 && Nat128.Gte(z, P))) + { + AddPInvTo(z); + } + } + + private static void AddPInvTo(uint[] z) + { + long c = (long)z[0] + 1; + z[0] = (uint)c; c >>= 32; + if (c != 0) + { + c += (long)z[1]; + z[1] = (uint)c; c >>= 32; + c += (long)z[2]; + z[2] = (uint)c; c >>= 32; + } + c += (long)z[3] + 2; + z[3] = (uint)c; + } + + private static void SubPInvFrom(uint[] z) + { + long c = (long)z[0] - 1; + z[0] = (uint)c; c >>= 32; + if (c != 0) + { + c += (long)z[1]; + z[1] = (uint)c; c >>= 32; + c += (long)z[2]; + z[2] = (uint)c; c >>= 32; + } + c += (long)z[3] - 2; + z[3] = (uint)c; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1Field.cs.meta new file mode 100644 index 000000000..e7c0f71f4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9d092c55e0cd03418fa2b044ec88ff3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1FieldElement.cs new file mode 100644 index 000000000..dfb0e15b3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1FieldElement.cs @@ -0,0 +1,203 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP128R1FieldElement + : AbstractFpFieldElement + { + public static readonly BigInteger Q = new BigInteger(1, + Hex.DecodeStrict("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF")); + + protected internal readonly uint[] x; + + public SecP128R1FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.CompareTo(Q) >= 0) + throw new ArgumentException("value invalid for SecP128R1FieldElement", "x"); + + this.x = SecP128R1Field.FromBigInteger(x); + } + + public SecP128R1FieldElement() + { + this.x = Nat128.Create(); + } + + protected internal SecP128R1FieldElement(uint[] x) + { + this.x = x; + } + + public override bool IsZero + { + get { return Nat128.IsZero(x); } + } + + public override bool IsOne + { + get { return Nat128.IsOne(x); } + } + + public override bool TestBitZero() + { + return Nat128.GetBit(x, 0) == 1; + } + + public override BigInteger ToBigInteger() + { + return Nat128.ToBigInteger(x); + } + + public override string FieldName + { + get { return "SecP128R1Field"; } + } + + public override int FieldSize + { + get { return Q.BitLength; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + uint[] z = Nat128.Create(); + SecP128R1Field.Add(x, ((SecP128R1FieldElement)b).x, z); + return new SecP128R1FieldElement(z); + } + + public override ECFieldElement AddOne() + { + uint[] z = Nat128.Create(); + SecP128R1Field.AddOne(x, z); + return new SecP128R1FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + uint[] z = Nat128.Create(); + SecP128R1Field.Subtract(x, ((SecP128R1FieldElement)b).x, z); + return new SecP128R1FieldElement(z); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + uint[] z = Nat128.Create(); + SecP128R1Field.Multiply(x, ((SecP128R1FieldElement)b).x, z); + return new SecP128R1FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + // return multiply(b.invert()); + uint[] z = Nat128.Create(); + SecP128R1Field.Inv(((SecP128R1FieldElement)b).x, z); + SecP128R1Field.Multiply(z, x, z); + return new SecP128R1FieldElement(z); + } + + public override ECFieldElement Negate() + { + uint[] z = Nat128.Create(); + SecP128R1Field.Negate(x, z); + return new SecP128R1FieldElement(z); + } + + public override ECFieldElement Square() + { + uint[] z = Nat128.Create(); + SecP128R1Field.Square(x, z); + return new SecP128R1FieldElement(z); + } + + public override ECFieldElement Invert() + { + uint[] z = Nat128.Create(); + SecP128R1Field.Inv(x, z); + return new SecP128R1FieldElement(z); + } + + // D.1.4 91 + /** + * return a sqrt root - the routine verifies that the calculation returns the right value - if + * none exists it returns null. + */ + public override ECFieldElement Sqrt() + { + /* + * Raise this element to the exponent 2^126 - 2^95 + * + * Breaking up the exponent's binary representation into "repunits", we get: + * { 31 1s } { 95 0s } + * + * Therefore we need an addition chain containing 31 (the length of the repunit) We use: + * 1, 2, 4, 8, 10, 20, 30, [31] + */ + + uint[] x1 = this.x; + if (Nat128.IsZero(x1) || Nat128.IsOne(x1)) + return this; + + uint[] x2 = Nat128.Create(); + SecP128R1Field.Square(x1, x2); + SecP128R1Field.Multiply(x2, x1, x2); + uint[] x4 = Nat128.Create(); + SecP128R1Field.SquareN(x2, 2, x4); + SecP128R1Field.Multiply(x4, x2, x4); + uint[] x8 = Nat128.Create(); + SecP128R1Field.SquareN(x4, 4, x8); + SecP128R1Field.Multiply(x8, x4, x8); + uint[] x10 = x4; + SecP128R1Field.SquareN(x8, 2, x10); + SecP128R1Field.Multiply(x10, x2, x10); + uint[] x20 = x2; + SecP128R1Field.SquareN(x10, 10, x20); + SecP128R1Field.Multiply(x20, x10, x20); + uint[] x30 = x8; + SecP128R1Field.SquareN(x20, 10, x30); + SecP128R1Field.Multiply(x30, x10, x30); + uint[] x31 = x10; + SecP128R1Field.Square(x30, x31); + SecP128R1Field.Multiply(x31, x1, x31); + + uint[] t1 = x31; + SecP128R1Field.SquareN(t1, 95, t1); + + uint[] t2 = x30; + SecP128R1Field.Square(t1, t2); + + return Nat128.Eq(x1, t2) ? new SecP128R1FieldElement(t1) : null; + } + + public override bool Equals(object obj) + { + return Equals(obj as SecP128R1FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecP128R1FieldElement); + } + + public virtual bool Equals(SecP128R1FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat128.Eq(x, other.x); + } + + public override int GetHashCode() + { + return Q.GetHashCode() ^ Arrays.GetHashCode(x, 0, 4); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1FieldElement.cs.meta new file mode 100644 index 000000000..abd571afa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f1b6f52fadd8950438dcf90df281b600 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1Point.cs new file mode 100644 index 000000000..7efdae44f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1Point.cs @@ -0,0 +1,249 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP128R1Point + : AbstractFpPoint + { + internal SecP128R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecP128R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecP128R1Point(null, AffineXCoord, AffineYCoord); + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + if (this == b) + return Twice(); + + ECCurve curve = this.Curve; + + SecP128R1FieldElement X1 = (SecP128R1FieldElement)this.RawXCoord, Y1 = (SecP128R1FieldElement)this.RawYCoord; + SecP128R1FieldElement X2 = (SecP128R1FieldElement)b.RawXCoord, Y2 = (SecP128R1FieldElement)b.RawYCoord; + + SecP128R1FieldElement Z1 = (SecP128R1FieldElement)this.RawZCoords[0]; + SecP128R1FieldElement Z2 = (SecP128R1FieldElement)b.RawZCoords[0]; + + uint c; + uint[] tt1 = Nat128.CreateExt(); + uint[] t2 = Nat128.Create(); + uint[] t3 = Nat128.Create(); + uint[] t4 = Nat128.Create(); + + bool Z1IsOne = Z1.IsOne; + uint[] U2, S2; + if (Z1IsOne) + { + U2 = X2.x; + S2 = Y2.x; + } + else + { + S2 = t3; + SecP128R1Field.Square(Z1.x, S2); + + U2 = t2; + SecP128R1Field.Multiply(S2, X2.x, U2); + + SecP128R1Field.Multiply(S2, Z1.x, S2); + SecP128R1Field.Multiply(S2, Y2.x, S2); + } + + bool Z2IsOne = Z2.IsOne; + uint[] U1, S1; + if (Z2IsOne) + { + U1 = X1.x; + S1 = Y1.x; + } + else + { + S1 = t4; + SecP128R1Field.Square(Z2.x, S1); + + U1 = tt1; + SecP128R1Field.Multiply(S1, X1.x, U1); + + SecP128R1Field.Multiply(S1, Z2.x, S1); + SecP128R1Field.Multiply(S1, Y1.x, S1); + } + + uint[] H = Nat128.Create(); + SecP128R1Field.Subtract(U1, U2, H); + + uint[] R = t2; + SecP128R1Field.Subtract(S1, S2, R); + + // Check if b == this or b == -this + if (Nat128.IsZero(H)) + { + if (Nat128.IsZero(R)) + { + // this == b, i.e. this must be doubled + return this.Twice(); + } + + // this == -b, i.e. the result is the point at infinity + return curve.Infinity; + } + + uint[] HSquared = t3; + SecP128R1Field.Square(H, HSquared); + + uint[] G = Nat128.Create(); + SecP128R1Field.Multiply(HSquared, H, G); + + uint[] V = t3; + SecP128R1Field.Multiply(HSquared, U1, V); + + SecP128R1Field.Negate(G, G); + Nat128.Mul(S1, G, tt1); + + c = Nat128.AddBothTo(V, V, G); + SecP128R1Field.Reduce32(c, G); + + SecP128R1FieldElement X3 = new SecP128R1FieldElement(t4); + SecP128R1Field.Square(R, X3.x); + SecP128R1Field.Subtract(X3.x, G, X3.x); + + SecP128R1FieldElement Y3 = new SecP128R1FieldElement(G); + SecP128R1Field.Subtract(V, X3.x, Y3.x); + SecP128R1Field.MultiplyAddToExt(Y3.x, R, tt1); + SecP128R1Field.Reduce(tt1, Y3.x); + + SecP128R1FieldElement Z3 = new SecP128R1FieldElement(H); + if (!Z1IsOne) + { + SecP128R1Field.Multiply(Z3.x, Z1.x, Z3.x); + } + if (!Z2IsOne) + { + SecP128R1Field.Multiply(Z3.x, Z2.x, Z3.x); + } + + ECFieldElement[] zs = new ECFieldElement[]{ Z3 }; + + return new SecP128R1Point(curve, X3, Y3, zs); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + SecP128R1FieldElement Y1 = (SecP128R1FieldElement)this.RawYCoord; + if (Y1.IsZero) + return curve.Infinity; + + SecP128R1FieldElement X1 = (SecP128R1FieldElement)this.RawXCoord, Z1 = (SecP128R1FieldElement)this.RawZCoords[0]; + + uint c; + uint[] t1 = Nat128.Create(); + uint[] t2 = Nat128.Create(); + + uint[] Y1Squared = Nat128.Create(); + SecP128R1Field.Square(Y1.x, Y1Squared); + + uint[] T = Nat128.Create(); + SecP128R1Field.Square(Y1Squared, T); + + bool Z1IsOne = Z1.IsOne; + + uint[] Z1Squared = Z1.x; + if (!Z1IsOne) + { + Z1Squared = t2; + SecP128R1Field.Square(Z1.x, Z1Squared); + } + + SecP128R1Field.Subtract(X1.x, Z1Squared, t1); + + uint[] M = t2; + SecP128R1Field.Add(X1.x, Z1Squared, M); + SecP128R1Field.Multiply(M, t1, M); + c = Nat128.AddBothTo(M, M, M); + SecP128R1Field.Reduce32(c, M); + + uint[] S = Y1Squared; + SecP128R1Field.Multiply(Y1Squared, X1.x, S); + c = Nat.ShiftUpBits(4, S, 2, 0); + SecP128R1Field.Reduce32(c, S); + + c = Nat.ShiftUpBits(4, T, 3, 0, t1); + SecP128R1Field.Reduce32(c, t1); + + SecP128R1FieldElement X3 = new SecP128R1FieldElement(T); + SecP128R1Field.Square(M, X3.x); + SecP128R1Field.Subtract(X3.x, S, X3.x); + SecP128R1Field.Subtract(X3.x, S, X3.x); + + SecP128R1FieldElement Y3 = new SecP128R1FieldElement(S); + SecP128R1Field.Subtract(S, X3.x, Y3.x); + SecP128R1Field.Multiply(Y3.x, M, Y3.x); + SecP128R1Field.Subtract(Y3.x, t1, Y3.x); + + SecP128R1FieldElement Z3 = new SecP128R1FieldElement(M); + SecP128R1Field.Twice(Y1.x, Z3.x); + if (!Z1IsOne) + { + SecP128R1Field.Multiply(Z3.x, Z1.x, Z3.x); + } + + return new SecP128R1Point(curve, X3, Y3, new ECFieldElement[]{ Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this == b) + return ThreeTimes(); + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECFieldElement Y1 = this.RawYCoord; + if (Y1.IsZero) + return b; + + return Twice().Add(b); + } + + public override ECPoint ThreeTimes() + { + if (this.IsInfinity || this.RawYCoord.IsZero) + return this; + + // NOTE: Be careful about recursions between twicePlus and threeTimes + return Twice().Add(this); + } + + public override ECPoint Negate() + { + if (IsInfinity) + return this; + + return new SecP128R1Point(Curve, RawXCoord, RawYCoord.Negate(), RawZCoords); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1Point.cs.meta new file mode 100644 index 000000000..18a7bf896 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP128R1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b719fcfaca4697a499481a1ec81e4e74 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160K1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160K1Curve.cs new file mode 100644 index 000000000..81d947c14 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160K1Curve.cs @@ -0,0 +1,172 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP160K1Curve + : AbstractFpCurve + { + public static readonly BigInteger q = SecP160R2FieldElement.Q; + + private const int SECP160K1_DEFAULT_COORDS = COORD_JACOBIAN; + private const int SECP160K1_FE_INTS = 5; + private static readonly ECFieldElement[] SECP160K1_AFFINE_ZS = new ECFieldElement[] { new SecP160R2FieldElement(BigInteger.One) }; + + protected readonly SecP160K1Point m_infinity; + + public SecP160K1Curve() + : base(q) + { + this.m_infinity = new SecP160K1Point(this, null, null); + + this.m_a = FromBigInteger(BigInteger.Zero); + this.m_b = FromBigInteger(BigInteger.ValueOf(7)); + this.m_order = new BigInteger(1, Hex.DecodeStrict("0100000000000000000001B8FA16DFAB9ACA16B6B3")); + this.m_cofactor = BigInteger.One; + this.m_coord = SECP160K1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecP160K1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_JACOBIAN: + return true; + default: + return false; + } + } + + public virtual BigInteger Q + { + get { return q; } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return q.BitLength; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecP160R2FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecP160K1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecP160K1Point(this, x, y, zs); + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + uint[] table = new uint[len * SECP160K1_FE_INTS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat160.Copy(((SecP160R2FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECP160K1_FE_INTS; + Nat160.Copy(((SecP160R2FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECP160K1_FE_INTS; + } + } + + return new SecP160K1LookupTable(this, table, len); + } + + public override ECFieldElement RandomFieldElement(SecureRandom r) + { + uint[] x = Nat160.Create(); + SecP160R2Field.Random(r, x); + return new SecP160R2FieldElement(x); + } + + public override ECFieldElement RandomFieldElementMult(SecureRandom r) + { + uint[] x = Nat160.Create(); + SecP160R2Field.RandomMult(r, x); + return new SecP160R2FieldElement(x); + } + + private class SecP160K1LookupTable + : AbstractECLookupTable + { + private readonly SecP160K1Curve m_outer; + private readonly uint[] m_table; + private readonly int m_size; + + internal SecP160K1LookupTable(SecP160K1Curve outer, uint[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + uint[] x = Nat256.Create(), y = Nat256.Create(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + uint MASK = (uint)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECP160K1_FE_INTS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECP160K1_FE_INTS + j] & MASK; + } + + pos += (SECP160K1_FE_INTS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + uint[] x = Nat256.Create(), y = Nat256.Create(); + int pos = index * SECP160K1_FE_INTS * 2; + + for (int j = 0; j < SECP160K1_FE_INTS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECP160K1_FE_INTS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(uint[] x, uint[] y) + { + return m_outer.CreateRawPoint(new SecP160R2FieldElement(x), new SecP160R2FieldElement(y), SECP160K1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160K1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160K1Curve.cs.meta new file mode 100644 index 000000000..4e94332ff --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160K1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1150199688daf104cb227e8776202137 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160K1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160K1Point.cs new file mode 100644 index 000000000..a3162fa1f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160K1Point.cs @@ -0,0 +1,238 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP160K1Point + : AbstractFpPoint + { + internal SecP160K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecP160K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecP160K1Point(null, AffineXCoord, AffineYCoord); + } + + // B.3 pg 62 + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + if (this == b) + return Twice(); + + ECCurve curve = this.Curve; + + SecP160R2FieldElement X1 = (SecP160R2FieldElement)this.RawXCoord, Y1 = (SecP160R2FieldElement)this.RawYCoord; + SecP160R2FieldElement X2 = (SecP160R2FieldElement)b.RawXCoord, Y2 = (SecP160R2FieldElement)b.RawYCoord; + + SecP160R2FieldElement Z1 = (SecP160R2FieldElement)this.RawZCoords[0]; + SecP160R2FieldElement Z2 = (SecP160R2FieldElement)b.RawZCoords[0]; + + uint c; + uint[] tt1 = Nat160.CreateExt(); + uint[] t2 = Nat160.Create(); + uint[] t3 = Nat160.Create(); + uint[] t4 = Nat160.Create(); + + bool Z1IsOne = Z1.IsOne; + uint[] U2, S2; + if (Z1IsOne) + { + U2 = X2.x; + S2 = Y2.x; + } + else + { + S2 = t3; + SecP160R2Field.Square(Z1.x, S2); + + U2 = t2; + SecP160R2Field.Multiply(S2, X2.x, U2); + + SecP160R2Field.Multiply(S2, Z1.x, S2); + SecP160R2Field.Multiply(S2, Y2.x, S2); + } + + bool Z2IsOne = Z2.IsOne; + uint[] U1, S1; + if (Z2IsOne) + { + U1 = X1.x; + S1 = Y1.x; + } + else + { + S1 = t4; + SecP160R2Field.Square(Z2.x, S1); + + U1 = tt1; + SecP160R2Field.Multiply(S1, X1.x, U1); + + SecP160R2Field.Multiply(S1, Z2.x, S1); + SecP160R2Field.Multiply(S1, Y1.x, S1); + } + + uint[] H = Nat160.Create(); + SecP160R2Field.Subtract(U1, U2, H); + + uint[] R = t2; + SecP160R2Field.Subtract(S1, S2, R); + + // Check if b == this or b == -this + if (Nat160.IsZero(H)) + { + if (Nat160.IsZero(R)) + { + // this == b, i.e. this must be doubled + return this.Twice(); + } + + // this == -b, i.e. the result is the point at infinity + return curve.Infinity; + } + + uint[] HSquared = t3; + SecP160R2Field.Square(H, HSquared); + + uint[] G = Nat160.Create(); + SecP160R2Field.Multiply(HSquared, H, G); + + uint[] V = t3; + SecP160R2Field.Multiply(HSquared, U1, V); + + SecP160R2Field.Negate(G, G); + Nat160.Mul(S1, G, tt1); + + c = Nat160.AddBothTo(V, V, G); + SecP160R2Field.Reduce32(c, G); + + SecP160R2FieldElement X3 = new SecP160R2FieldElement(t4); + SecP160R2Field.Square(R, X3.x); + SecP160R2Field.Subtract(X3.x, G, X3.x); + + SecP160R2FieldElement Y3 = new SecP160R2FieldElement(G); + SecP160R2Field.Subtract(V, X3.x, Y3.x); + SecP160R2Field.MultiplyAddToExt(Y3.x, R, tt1); + SecP160R2Field.Reduce(tt1, Y3.x); + + SecP160R2FieldElement Z3 = new SecP160R2FieldElement(H); + if (!Z1IsOne) + { + SecP160R2Field.Multiply(Z3.x, Z1.x, Z3.x); + } + if (!Z2IsOne) + { + SecP160R2Field.Multiply(Z3.x, Z2.x, Z3.x); + } + + ECFieldElement[] zs = new ECFieldElement[] { Z3 }; + + return new SecP160K1Point(curve, X3, Y3, zs); + } + + // B.3 pg 62 + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + SecP160R2FieldElement Y1 = (SecP160R2FieldElement)this.RawYCoord; + if (Y1.IsZero) + return curve.Infinity; + + SecP160R2FieldElement X1 = (SecP160R2FieldElement)this.RawXCoord, Z1 = (SecP160R2FieldElement)this.RawZCoords[0]; + + uint c; + + uint[] Y1Squared = Nat160.Create(); + SecP160R2Field.Square(Y1.x, Y1Squared); + + uint[] T = Nat160.Create(); + SecP160R2Field.Square(Y1Squared, T); + + uint[] M = Nat160.Create(); + SecP160R2Field.Square(X1.x, M); + c = Nat160.AddBothTo(M, M, M); + SecP160R2Field.Reduce32(c, M); + + uint[] S = Y1Squared; + SecP160R2Field.Multiply(Y1Squared, X1.x, S); + c = Nat.ShiftUpBits(5, S, 2, 0); + SecP160R2Field.Reduce32(c, S); + + uint[] t1 = Nat160.Create(); + c = Nat.ShiftUpBits(5, T, 3, 0, t1); + SecP160R2Field.Reduce32(c, t1); + + SecP160R2FieldElement X3 = new SecP160R2FieldElement(T); + SecP160R2Field.Square(M, X3.x); + SecP160R2Field.Subtract(X3.x, S, X3.x); + SecP160R2Field.Subtract(X3.x, S, X3.x); + + SecP160R2FieldElement Y3 = new SecP160R2FieldElement(S); + SecP160R2Field.Subtract(S, X3.x, Y3.x); + SecP160R2Field.Multiply(Y3.x, M, Y3.x); + SecP160R2Field.Subtract(Y3.x, t1, Y3.x); + + SecP160R2FieldElement Z3 = new SecP160R2FieldElement(M); + SecP160R2Field.Twice(Y1.x, Z3.x); + if (!Z1.IsOne) + { + SecP160R2Field.Multiply(Z3.x, Z1.x, Z3.x); + } + + return new SecP160K1Point(curve, X3, Y3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this == b) + return ThreeTimes(); + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECFieldElement Y1 = this.RawYCoord; + if (Y1.IsZero) + return b; + + return Twice().Add(b); + } + + public override ECPoint ThreeTimes() + { + if (this.IsInfinity || this.RawYCoord.IsZero) + return this; + + // NOTE: Be careful about recursions between TwicePlus and threeTimes + return Twice().Add(this); + } + + public override ECPoint Negate() + { + if (IsInfinity) + return this; + + return new SecP160K1Point(Curve, this.RawXCoord, this.RawYCoord.Negate(), this.RawZCoords); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160K1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160K1Point.cs.meta new file mode 100644 index 000000000..724446b21 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160K1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5e8be84848d57df40bf9d4558a98c6e7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1Curve.cs new file mode 100644 index 000000000..811e105ea --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1Curve.cs @@ -0,0 +1,175 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP160R1Curve + : AbstractFpCurve + { + public static readonly BigInteger q = SecP160R1FieldElement.Q; + + private const int SECP160R1_DEFAULT_COORDS = COORD_JACOBIAN; + private const int SECP160R1_FE_INTS = 5; + private static readonly ECFieldElement[] SECP160R1_AFFINE_ZS = new ECFieldElement[] { new SecP160R1FieldElement(BigInteger.One) }; + + protected readonly SecP160R1Point m_infinity; + + public SecP160R1Curve() + : base(q) + { + this.m_infinity = new SecP160R1Point(this, null, null); + + this.m_a = FromBigInteger(new BigInteger(1, + Hex.DecodeStrict("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC"))); + this.m_b = FromBigInteger(new BigInteger(1, + Hex.DecodeStrict("1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("0100000000000000000001F4C8F927AED3CA752257")); + this.m_cofactor = BigInteger.One; + + this.m_coord = SECP160R1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecP160R1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_JACOBIAN: + return true; + default: + return false; + } + } + + public virtual BigInteger Q + { + get { return q; } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return q.BitLength; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecP160R1FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecP160R1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecP160R1Point(this, x, y, zs); + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + uint[] table = new uint[len * SECP160R1_FE_INTS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat160.Copy(((SecP160R1FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECP160R1_FE_INTS; + Nat160.Copy(((SecP160R1FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECP160R1_FE_INTS; + } + } + + return new SecP160R1LookupTable(this, table, len); + } + + public override ECFieldElement RandomFieldElement(SecureRandom r) + { + uint[] x = Nat160.Create(); + SecP160R1Field.Random(r, x); + return new SecP160R1FieldElement(x); + } + + public override ECFieldElement RandomFieldElementMult(SecureRandom r) + { + uint[] x = Nat160.Create(); + SecP160R1Field.RandomMult(r, x); + return new SecP160R1FieldElement(x); + } + + private class SecP160R1LookupTable + : AbstractECLookupTable + { + private readonly SecP160R1Curve m_outer; + private readonly uint[] m_table; + private readonly int m_size; + + internal SecP160R1LookupTable(SecP160R1Curve outer, uint[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + uint[] x = Nat160.Create(), y = Nat160.Create(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + uint MASK = (uint)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECP160R1_FE_INTS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECP160R1_FE_INTS + j] & MASK; + } + + pos += (SECP160R1_FE_INTS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + uint[] x = Nat160.Create(), y = Nat160.Create(); + int pos = index * SECP160R1_FE_INTS * 2; + + for (int j = 0; j < SECP160R1_FE_INTS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECP160R1_FE_INTS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(uint[] x, uint[] y) + { + return m_outer.CreateRawPoint(new SecP160R1FieldElement(x), new SecP160R1FieldElement(y), SECP160R1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1Curve.cs.meta new file mode 100644 index 000000000..02c3c690d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ab70ddacc717f914998f8131af159ac2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1Field.cs new file mode 100644 index 000000000..98c2e7fb1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1Field.cs @@ -0,0 +1,228 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP160R1Field + { + // 2^160 - 2^31 - 1 + internal static readonly uint[] P = new uint[]{ 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; + private static readonly uint[] PExt = new uint[]{ 0x00000001, 0x40000001, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFE, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; + private static readonly uint[] PExtInv = new uint[]{ 0xFFFFFFFF, 0xBFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x00000001, 0x00000001 }; + private const uint P4 = 0xFFFFFFFF; + private const uint PExt9 = 0xFFFFFFFF; + private const uint PInv = 0x80000001; + + public static void Add(uint[] x, uint[] y, uint[] z) + { + uint c = Nat160.Add(x, y, z); + if (c != 0 || (z[4] == P4 && Nat160.Gte(z, P))) + { + Nat.AddWordTo(5, PInv, z); + } + } + + public static void AddExt(uint[] xx, uint[] yy, uint[] zz) + { + uint c = Nat.Add(10, xx, yy, zz); + if (c != 0 || (zz[9] == PExt9 && Nat.Gte(10, zz, PExt))) + { + if (Nat.AddTo(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.IncAt(10, zz, PExtInv.Length); + } + } + } + + public static void AddOne(uint[] x, uint[] z) + { + uint c = Nat.Inc(5, x, z); + if (c != 0 || (z[4] == P4 && Nat160.Gte(z, P))) + { + Nat.AddWordTo(5, PInv, z); + } + } + + public static uint[] FromBigInteger(BigInteger x) + { + uint[] z = Nat.FromBigInteger(160, x); + if (z[4] == P4 && Nat160.Gte(z, P)) + { + Nat160.SubFrom(P, z); + } + return z; + } + + public static void Half(uint[] x, uint[] z) + { + if ((x[0] & 1) == 0) + { + Nat.ShiftDownBit(5, x, 0, z); + } + else + { + uint c = Nat160.Add(x, P, z); + Nat.ShiftDownBit(5, z, c); + } + } + + public static void Inv(uint[] x, uint[] z) + { + Mod.CheckedModOddInverse(P, x, z); + } + + public static int IsZero(uint[] x) + { + uint d = 0; + for (int i = 0; i < 5; ++i) + { + d |= x[i]; + } + d = (d >> 1) | (d & 1); + return ((int)d - 1) >> 31; + } + + public static void Multiply(uint[] x, uint[] y, uint[] z) + { + uint[] tt = Nat160.CreateExt(); + Nat160.Mul(x, y, tt); + Reduce(tt, z); + } + + public static void MultiplyAddToExt(uint[] x, uint[] y, uint[] zz) + { + uint c = Nat160.MulAddTo(x, y, zz); + if (c != 0 || (zz[9] == PExt9 && Nat.Gte(10, zz, PExt))) + { + if (Nat.AddTo(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.IncAt(10, zz, PExtInv.Length); + } + } + } + + public static void Negate(uint[] x, uint[] z) + { + if (0 != IsZero(x)) + { + Nat160.Sub(P, P, z); + } + else + { + Nat160.Sub(P, x, z); + } + } + + public static void Random(SecureRandom r, uint[] z) + { + byte[] bb = new byte[5 * 4]; + do + { + r.NextBytes(bb); + Pack.LE_To_UInt32(bb, 0, z, 0, 5); + } + while (0 == Nat.LessThan(5, z, P)); + } + + public static void RandomMult(SecureRandom r, uint[] z) + { + do + { + Random(r, z); + } + while (0 != IsZero(z)); + } + + public static void Reduce(uint[] xx, uint[] z) + { + ulong x5 = xx[5], x6 = xx[6], x7 = xx[7], x8 = xx[8], x9 = xx[9]; + + ulong c = 0; + c += (ulong)xx[0] + x5 + (x5 << 31); + z[0] = (uint)c; c >>= 32; + c += (ulong)xx[1] + x6 + (x6 << 31); + z[1] = (uint)c; c >>= 32; + c += (ulong)xx[2] + x7 + (x7 << 31); + z[2] = (uint)c; c >>= 32; + c += (ulong)xx[3] + x8 + (x8 << 31); + z[3] = (uint)c; c >>= 32; + c += (ulong)xx[4] + x9 + (x9 << 31); + z[4] = (uint)c; c >>= 32; + + Debug.Assert(c >> 32 == 0); + + Reduce32((uint)c, z); + } + + public static void Reduce32(uint x, uint[] z) + { + if ((x != 0 && Nat160.MulWordsAdd(PInv, x, z, 0) != 0) + || (z[4] == P4 && Nat160.Gte(z, P))) + { + Nat.AddWordTo(5, PInv, z); + } + } + + public static void Square(uint[] x, uint[] z) + { + uint[] tt = Nat160.CreateExt(); + Nat160.Square(x, tt); + Reduce(tt, z); + } + + public static void SquareN(uint[] x, int n, uint[] z) + { + Debug.Assert(n > 0); + + uint[] tt = Nat160.CreateExt(); + Nat160.Square(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + Nat160.Square(z, tt); + Reduce(tt, z); + } + } + + public static void Subtract(uint[] x, uint[] y, uint[] z) + { + int c = Nat160.Sub(x, y, z); + if (c != 0) + { + Nat.SubWordFrom(5, PInv, z); + } + } + + public static void SubtractExt(uint[] xx, uint[] yy, uint[] zz) + { + int c = Nat.Sub(10, xx, yy, zz); + if (c != 0) + { + if (Nat.SubFrom(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.DecAt(10, zz, PExtInv.Length); + } + } + } + + public static void Twice(uint[] x, uint[] z) + { + uint c = Nat.ShiftUpBit(5, x, 0, z); + if (c != 0 || (z[4] == P4 && Nat160.Gte(z, P))) + { + Nat.AddWordTo(5, PInv, z); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1Field.cs.meta new file mode 100644 index 000000000..1e2ff5124 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d444683aade1525409d6f03a80cd747c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1FieldElement.cs new file mode 100644 index 000000000..c70dfe979 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1FieldElement.cs @@ -0,0 +1,208 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP160R1FieldElement + : AbstractFpFieldElement + { + public static readonly BigInteger Q = new BigInteger(1, + Hex.DecodeStrict("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF")); + + protected internal readonly uint[] x; + + public SecP160R1FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.CompareTo(Q) >= 0) + throw new ArgumentException("value invalid for SecP160R1FieldElement", "x"); + + this.x = SecP160R1Field.FromBigInteger(x); + } + + public SecP160R1FieldElement() + { + this.x = Nat160.Create(); + } + + protected internal SecP160R1FieldElement(uint[] x) + { + this.x = x; + } + + public override bool IsZero + { + get { return Nat160.IsZero(x); } + } + + public override bool IsOne + { + get { return Nat160.IsOne(x); } + } + + public override bool TestBitZero() + { + return Nat160.GetBit(x, 0) == 1; + } + + public override BigInteger ToBigInteger() + { + return Nat160.ToBigInteger(x); + } + + public override string FieldName + { + get { return "SecP160R1Field"; } + } + + public override int FieldSize + { + get { return Q.BitLength; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + uint[] z = Nat160.Create(); + SecP160R1Field.Add(x, ((SecP160R1FieldElement)b).x, z); + return new SecP160R1FieldElement(z); + } + + public override ECFieldElement AddOne() + { + uint[] z = Nat160.Create(); + SecP160R1Field.AddOne(x, z); + return new SecP160R1FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + uint[] z = Nat160.Create(); + SecP160R1Field.Subtract(x, ((SecP160R1FieldElement)b).x, z); + return new SecP160R1FieldElement(z); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + uint[] z = Nat160.Create(); + SecP160R1Field.Multiply(x, ((SecP160R1FieldElement)b).x, z); + return new SecP160R1FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + // return multiply(b.invert()); + uint[] z = Nat160.Create(); + SecP160R1Field.Inv(((SecP160R1FieldElement)b).x, z); + SecP160R1Field.Multiply(z, x, z); + return new SecP160R1FieldElement(z); + } + + public override ECFieldElement Negate() + { + uint[] z = Nat160.Create(); + SecP160R1Field.Negate(x, z); + return new SecP160R1FieldElement(z); + } + + public override ECFieldElement Square() + { + uint[] z = Nat160.Create(); + SecP160R1Field.Square(x, z); + return new SecP160R1FieldElement(z); + } + + public override ECFieldElement Invert() + { + uint[] z = Nat160.Create(); + SecP160R1Field.Inv(x, z); + return new SecP160R1FieldElement(z); + } + + // D.1.4 91 + /** + * return a sqrt root - the routine verifies that the calculation returns the right value - if + * none exists it returns null. + */ + public override ECFieldElement Sqrt() + { + /* + * Raise this element to the exponent 2^158 - 2^29 + * + * Breaking up the exponent's binary representation into "repunits", we get: + * { 129 1s } { 29 0s } + * + * Therefore we need an addition chain containing 129 (the length of the repunit) We use: + * 1, 2, 4, 8, 16, 32, 64, 128, [129] + */ + + uint[] x1 = this.x; + if (Nat160.IsZero(x1) || Nat160.IsOne(x1)) + { + return this; + } + + uint[] x2 = Nat160.Create(); + SecP160R1Field.Square(x1, x2); + SecP160R1Field.Multiply(x2, x1, x2); + uint[] x4 = Nat160.Create(); + SecP160R1Field.SquareN(x2, 2, x4); + SecP160R1Field.Multiply(x4, x2, x4); + uint[] x8 = x2; + SecP160R1Field.SquareN(x4, 4, x8); + SecP160R1Field.Multiply(x8, x4, x8); + uint[] x16 = x4; + SecP160R1Field.SquareN(x8, 8, x16); + SecP160R1Field.Multiply(x16, x8, x16); + uint[] x32 = x8; + SecP160R1Field.SquareN(x16, 16, x32); + SecP160R1Field.Multiply(x32, x16, x32); + uint[] x64 = x16; + SecP160R1Field.SquareN(x32, 32, x64); + SecP160R1Field.Multiply(x64, x32, x64); + uint[] x128 = x32; + SecP160R1Field.SquareN(x64, 64, x128); + SecP160R1Field.Multiply(x128, x64, x128); + uint[] x129 = x64; + SecP160R1Field.Square(x128, x129); + SecP160R1Field.Multiply(x129, x1, x129); + + uint[] t1 = x129; + SecP160R1Field.SquareN(t1, 29, t1); + + uint[] t2 = x128; + SecP160R1Field.Square(t1, t2); + + return Nat160.Eq(x1, t2) ? new SecP160R1FieldElement(t1) : null; + } + + public override bool Equals(object obj) + { + return Equals(obj as SecP160R1FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecP160R1FieldElement); + } + + public virtual bool Equals(SecP160R1FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat160.Eq(x, other.x); + } + + public override int GetHashCode() + { + return Q.GetHashCode() ^ Arrays.GetHashCode(x, 0, 5); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1FieldElement.cs.meta new file mode 100644 index 000000000..a44741f96 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 07c4fed00202a584c88533f83236ec32 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1Point.cs new file mode 100644 index 000000000..083587811 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1Point.cs @@ -0,0 +1,249 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP160R1Point + : AbstractFpPoint + { + internal SecP160R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecP160R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecP160R1Point(null, AffineXCoord, AffineYCoord); + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + if (this == b) + return Twice(); + + ECCurve curve = this.Curve; + + SecP160R1FieldElement X1 = (SecP160R1FieldElement)this.RawXCoord, Y1 = (SecP160R1FieldElement)this.RawYCoord; + SecP160R1FieldElement X2 = (SecP160R1FieldElement)b.RawXCoord, Y2 = (SecP160R1FieldElement)b.RawYCoord; + + SecP160R1FieldElement Z1 = (SecP160R1FieldElement)this.RawZCoords[0]; + SecP160R1FieldElement Z2 = (SecP160R1FieldElement)b.RawZCoords[0]; + + uint c; + uint[] tt1 = Nat160.CreateExt(); + uint[] t2 = Nat160.Create(); + uint[] t3 = Nat160.Create(); + uint[] t4 = Nat160.Create(); + + bool Z1IsOne = Z1.IsOne; + uint[] U2, S2; + if (Z1IsOne) + { + U2 = X2.x; + S2 = Y2.x; + } + else + { + S2 = t3; + SecP160R1Field.Square(Z1.x, S2); + + U2 = t2; + SecP160R1Field.Multiply(S2, X2.x, U2); + + SecP160R1Field.Multiply(S2, Z1.x, S2); + SecP160R1Field.Multiply(S2, Y2.x, S2); + } + + bool Z2IsOne = Z2.IsOne; + uint[] U1, S1; + if (Z2IsOne) + { + U1 = X1.x; + S1 = Y1.x; + } + else + { + S1 = t4; + SecP160R1Field.Square(Z2.x, S1); + + U1 = tt1; + SecP160R1Field.Multiply(S1, X1.x, U1); + + SecP160R1Field.Multiply(S1, Z2.x, S1); + SecP160R1Field.Multiply(S1, Y1.x, S1); + } + + uint[] H = Nat160.Create(); + SecP160R1Field.Subtract(U1, U2, H); + + uint[] R = t2; + SecP160R1Field.Subtract(S1, S2, R); + + // Check if b == this or b == -this + if (Nat160.IsZero(H)) + { + if (Nat160.IsZero(R)) + { + // this == b, i.e. this must be doubled + return this.Twice(); + } + + // this == -b, i.e. the result is the point at infinity + return curve.Infinity; + } + + uint[] HSquared = t3; + SecP160R1Field.Square(H, HSquared); + + uint[] G = Nat160.Create(); + SecP160R1Field.Multiply(HSquared, H, G); + + uint[] V = t3; + SecP160R1Field.Multiply(HSquared, U1, V); + + SecP160R1Field.Negate(G, G); + Nat160.Mul(S1, G, tt1); + + c = Nat160.AddBothTo(V, V, G); + SecP160R1Field.Reduce32(c, G); + + SecP160R1FieldElement X3 = new SecP160R1FieldElement(t4); + SecP160R1Field.Square(R, X3.x); + SecP160R1Field.Subtract(X3.x, G, X3.x); + + SecP160R1FieldElement Y3 = new SecP160R1FieldElement(G); + SecP160R1Field.Subtract(V, X3.x, Y3.x); + SecP160R1Field.MultiplyAddToExt(Y3.x, R, tt1); + SecP160R1Field.Reduce(tt1, Y3.x); + + SecP160R1FieldElement Z3 = new SecP160R1FieldElement(H); + if (!Z1IsOne) + { + SecP160R1Field.Multiply(Z3.x, Z1.x, Z3.x); + } + if (!Z2IsOne) + { + SecP160R1Field.Multiply(Z3.x, Z2.x, Z3.x); + } + + ECFieldElement[] zs = new ECFieldElement[]{ Z3 }; + + return new SecP160R1Point(curve, X3, Y3, zs); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + SecP160R1FieldElement Y1 = (SecP160R1FieldElement)this.RawYCoord; + if (Y1.IsZero) + return curve.Infinity; + + SecP160R1FieldElement X1 = (SecP160R1FieldElement)this.RawXCoord, Z1 = (SecP160R1FieldElement)this.RawZCoords[0]; + + uint c; + uint[] t1 = Nat160.Create(); + uint[] t2 = Nat160.Create(); + + uint[] Y1Squared = Nat160.Create(); + SecP160R1Field.Square(Y1.x, Y1Squared); + + uint[] T = Nat160.Create(); + SecP160R1Field.Square(Y1Squared, T); + + bool Z1IsOne = Z1.IsOne; + + uint[] Z1Squared = Z1.x; + if (!Z1IsOne) + { + Z1Squared = t2; + SecP160R1Field.Square(Z1.x, Z1Squared); + } + + SecP160R1Field.Subtract(X1.x, Z1Squared, t1); + + uint[] M = t2; + SecP160R1Field.Add(X1.x, Z1Squared, M); + SecP160R1Field.Multiply(M, t1, M); + c = Nat160.AddBothTo(M, M, M); + SecP160R1Field.Reduce32(c, M); + + uint[] S = Y1Squared; + SecP160R1Field.Multiply(Y1Squared, X1.x, S); + c = Nat.ShiftUpBits(5, S, 2, 0); + SecP160R1Field.Reduce32(c, S); + + c = Nat.ShiftUpBits(5, T, 3, 0, t1); + SecP160R1Field.Reduce32(c, t1); + + SecP160R1FieldElement X3 = new SecP160R1FieldElement(T); + SecP160R1Field.Square(M, X3.x); + SecP160R1Field.Subtract(X3.x, S, X3.x); + SecP160R1Field.Subtract(X3.x, S, X3.x); + + SecP160R1FieldElement Y3 = new SecP160R1FieldElement(S); + SecP160R1Field.Subtract(S, X3.x, Y3.x); + SecP160R1Field.Multiply(Y3.x, M, Y3.x); + SecP160R1Field.Subtract(Y3.x, t1, Y3.x); + + SecP160R1FieldElement Z3 = new SecP160R1FieldElement(M); + SecP160R1Field.Twice(Y1.x, Z3.x); + if (!Z1IsOne) + { + SecP160R1Field.Multiply(Z3.x, Z1.x, Z3.x); + } + + return new SecP160R1Point(curve, X3, Y3, new ECFieldElement[]{ Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this == b) + return ThreeTimes(); + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECFieldElement Y1 = this.RawYCoord; + if (Y1.IsZero) + return b; + + return Twice().Add(b); + } + + public override ECPoint ThreeTimes() + { + if (this.IsInfinity || this.RawYCoord.IsZero) + return this; + + // NOTE: Be careful about recursions between TwicePlus and ThreeTimes + return Twice().Add(this); + } + + public override ECPoint Negate() + { + if (IsInfinity) + return this; + + return new SecP160R1Point(Curve, RawXCoord, RawYCoord.Negate(), RawZCoords); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1Point.cs.meta new file mode 100644 index 000000000..dcfbeffba --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 48035112039046c41b2a437840a8014d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2Curve.cs new file mode 100644 index 000000000..25f74e7f3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2Curve.cs @@ -0,0 +1,175 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP160R2Curve + : AbstractFpCurve + { + public static readonly BigInteger q = SecP160R2FieldElement.Q; + + private const int SECP160R2_DEFAULT_COORDS = COORD_JACOBIAN; + private const int SECP160R2_FE_INTS = 5; + private static readonly ECFieldElement[] SECP160R2_AFFINE_ZS = new ECFieldElement[] { new SecP160R2FieldElement(BigInteger.One) }; + + protected readonly SecP160R2Point m_infinity; + + public SecP160R2Curve() + : base(q) + { + this.m_infinity = new SecP160R2Point(this, null, null); + + this.m_a = FromBigInteger(new BigInteger(1, + Hex.DecodeStrict("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC70"))); + this.m_b = FromBigInteger(new BigInteger(1, + Hex.DecodeStrict("B4E134D3FB59EB8BAB57274904664D5AF50388BA"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("0100000000000000000000351EE786A818F3A1A16B")); + this.m_cofactor = BigInteger.One; + + this.m_coord = SECP160R2_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecP160R2Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_JACOBIAN: + return true; + default: + return false; + } + } + + public virtual BigInteger Q + { + get { return q; } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return q.BitLength; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecP160R2FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecP160R2Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecP160R2Point(this, x, y, zs); + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + uint[] table = new uint[len * SECP160R2_FE_INTS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat160.Copy(((SecP160R2FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECP160R2_FE_INTS; + Nat160.Copy(((SecP160R2FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECP160R2_FE_INTS; + } + } + + return new SecP160R2LookupTable(this, table, len); + } + + public override ECFieldElement RandomFieldElement(SecureRandom r) + { + uint[] x = Nat160.Create(); + SecP160R2Field.Random(r, x); + return new SecP160R2FieldElement(x); + } + + public override ECFieldElement RandomFieldElementMult(SecureRandom r) + { + uint[] x = Nat160.Create(); + SecP160R2Field.RandomMult(r, x); + return new SecP160R2FieldElement(x); + } + + private class SecP160R2LookupTable + : AbstractECLookupTable + { + private readonly SecP160R2Curve m_outer; + private readonly uint[] m_table; + private readonly int m_size; + + internal SecP160R2LookupTable(SecP160R2Curve outer, uint[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + uint[] x = Nat160.Create(), y = Nat160.Create(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + uint MASK = (uint)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECP160R2_FE_INTS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECP160R2_FE_INTS + j] & MASK; + } + + pos += (SECP160R2_FE_INTS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + uint[] x = Nat160.Create(), y = Nat160.Create(); + int pos = index * SECP160R2_FE_INTS * 2; + + for (int j = 0; j < SECP160R2_FE_INTS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECP160R2_FE_INTS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(uint[] x, uint[] y) + { + return m_outer.CreateRawPoint(new SecP160R2FieldElement(x), new SecP160R2FieldElement(y), SECP160R2_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2Curve.cs.meta new file mode 100644 index 000000000..9710d0cd1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d36a6056a9fa51946b70dd3977edfb28 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2Field.cs new file mode 100644 index 000000000..548db457f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2Field.cs @@ -0,0 +1,220 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP160R2Field + { + // 2^160 - 2^32 - 2^14 - 2^12 - 2^9 - 2^8 - 2^7 - 2^3 - 2^2 - 1 + internal static readonly uint[] P = new uint[]{ 0xFFFFAC73, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; + private static readonly uint[] PExt = new uint[]{ 0x1B44BBA9, 0x0000A71A, 0x00000001, 0x00000000, 0x00000000, + 0xFFFF58E6, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; + private static readonly uint[] PExtInv = new uint[]{ 0xE4BB4457, 0xFFFF58E5, 0xFFFFFFFE, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0000A719, 0x00000002 }; + private const uint P4 = 0xFFFFFFFF; + private const uint PExt9 = 0xFFFFFFFF; + private const uint PInv33 = 0x538D; + + public static void Add(uint[] x, uint[] y, uint[] z) + { + uint c = Nat160.Add(x, y, z); + if (c != 0 || (z[4] == P4 && Nat160.Gte(z, P))) + { + Nat.Add33To(5, PInv33, z); + } + } + + public static void AddExt(uint[] xx, uint[] yy, uint[] zz) + { + uint c = Nat.Add(10, xx, yy, zz); + if (c != 0 || (zz[9] == PExt9 && Nat.Gte(10, zz, PExt))) + { + if (Nat.AddTo(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.IncAt(10, zz, PExtInv.Length); + } + } + } + + public static void AddOne(uint[] x, uint[] z) + { + uint c = Nat.Inc(5, x, z); + if (c != 0 || (z[4] == P4 && Nat160.Gte(z, P))) + { + Nat.Add33To(5, PInv33, z); + } + } + + public static uint[] FromBigInteger(BigInteger x) + { + uint[] z = Nat.FromBigInteger(160, x); + if (z[4] == P4 && Nat160.Gte(z, P)) + { + Nat160.SubFrom(P, z); + } + return z; + } + + public static void Half(uint[] x, uint[] z) + { + if ((x[0] & 1) == 0) + { + Nat.ShiftDownBit(5, x, 0, z); + } + else + { + uint c = Nat160.Add(x, P, z); + Nat.ShiftDownBit(5, z, c); + } + } + + public static void Inv(uint[] x, uint[] z) + { + Mod.CheckedModOddInverse(P, x, z); + } + + public static int IsZero(uint[] x) + { + uint d = 0; + for (int i = 0; i < 5; ++i) + { + d |= x[i]; + } + d = (d >> 1) | (d & 1); + return ((int)d - 1) >> 31; + } + + public static void Multiply(uint[] x, uint[] y, uint[] z) + { + uint[] tt = Nat160.CreateExt(); + Nat160.Mul(x, y, tt); + Reduce(tt, z); + } + + public static void MultiplyAddToExt(uint[] x, uint[] y, uint[] zz) + { + uint c = Nat160.MulAddTo(x, y, zz); + if (c != 0 || (zz[9] == PExt9 && Nat.Gte(10, zz, PExt))) + { + if (Nat.AddTo(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.IncAt(10, zz, PExtInv.Length); + } + } + } + + public static void Negate(uint[] x, uint[] z) + { + if (0 != IsZero(x)) + { + Nat160.Sub(P, P, z); + } + else + { + Nat160.Sub(P, x, z); + } + } + + public static void Random(SecureRandom r, uint[] z) + { + byte[] bb = new byte[5 * 4]; + do + { + r.NextBytes(bb); + Pack.LE_To_UInt32(bb, 0, z, 0, 5); + } + while (0 == Nat.LessThan(5, z, P)); + } + + public static void RandomMult(SecureRandom r, uint[] z) + { + do + { + Random(r, z); + } + while (0 != IsZero(z)); + } + + public static void Reduce(uint[] xx, uint[] z) + { + ulong cc = Nat160.Mul33Add(PInv33, xx, 5, xx, 0, z, 0); + uint c = Nat160.Mul33DWordAdd(PInv33, cc, z, 0); + + Debug.Assert(c == 0 || c == 1); + + if (c != 0 || (z[4] == P4 && Nat160.Gte(z, P))) + { + Nat.Add33To(5, PInv33, z); + } + } + + public static void Reduce32(uint x, uint[] z) + { + if ((x != 0 && Nat160.Mul33WordAdd(PInv33, x, z, 0) != 0) + || (z[4] == P4 && Nat160.Gte(z, P))) + { + Nat.Add33To(5, PInv33, z); + } + } + + public static void Square(uint[] x, uint[] z) + { + uint[] tt = Nat160.CreateExt(); + Nat160.Square(x, tt); + Reduce(tt, z); + } + + public static void SquareN(uint[] x, int n, uint[] z) + { + Debug.Assert(n > 0); + + uint[] tt = Nat160.CreateExt(); + Nat160.Square(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + Nat160.Square(z, tt); + Reduce(tt, z); + } + } + + public static void Subtract(uint[] x, uint[] y, uint[] z) + { + int c = Nat160.Sub(x, y, z); + if (c != 0) + { + Nat.Sub33From(5, PInv33, z); + } + } + + public static void SubtractExt(uint[] xx, uint[] yy, uint[] zz) + { + int c = Nat.Sub(10, xx, yy, zz); + if (c != 0) + { + if (Nat.SubFrom(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.DecAt(10, zz, PExtInv.Length); + } + } + } + + public static void Twice(uint[] x, uint[] z) + { + uint c = Nat.ShiftUpBit(5, x, 0, z); + if (c != 0 || (z[4] == P4 && Nat160.Gte(z, P))) + { + Nat.Add33To(5, PInv33, z); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2Field.cs.meta new file mode 100644 index 000000000..344bf7ce2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e351f45b5e75bb149baf02e11f068f33 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2FieldElement.cs new file mode 100644 index 000000000..2f3df1768 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2FieldElement.cs @@ -0,0 +1,223 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP160R2FieldElement + : AbstractFpFieldElement + { + public static readonly BigInteger Q = new BigInteger(1, + Hex.DecodeStrict("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73")); + + protected internal readonly uint[] x; + + public SecP160R2FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.CompareTo(Q) >= 0) + throw new ArgumentException("value invalid for SecP160R2FieldElement", "x"); + + this.x = SecP160R2Field.FromBigInteger(x); + } + + public SecP160R2FieldElement() + { + this.x = Nat160.Create(); + } + + protected internal SecP160R2FieldElement(uint[] x) + { + this.x = x; + } + + public override bool IsZero + { + get { return Nat160.IsZero(x); } + } + + public override bool IsOne + { + get { return Nat160.IsOne(x); } + } + + public override bool TestBitZero() + { + return Nat160.GetBit(x, 0) == 1; + } + + public override BigInteger ToBigInteger() + { + return Nat160.ToBigInteger(x); + } + + public override string FieldName + { + get { return "SecP160R2Field"; } + } + + public override int FieldSize + { + get { return Q.BitLength; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + uint[] z = Nat160.Create(); + SecP160R2Field.Add(x, ((SecP160R2FieldElement)b).x, z); + return new SecP160R2FieldElement(z); + } + + public override ECFieldElement AddOne() + { + uint[] z = Nat160.Create(); + SecP160R2Field.AddOne(x, z); + return new SecP160R2FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + uint[] z = Nat160.Create(); + SecP160R2Field.Subtract(x, ((SecP160R2FieldElement)b).x, z); + return new SecP160R2FieldElement(z); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + uint[] z = Nat160.Create(); + SecP160R2Field.Multiply(x, ((SecP160R2FieldElement)b).x, z); + return new SecP160R2FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + // return Multiply(b.invert()); + uint[] z = Nat160.Create(); + SecP160R2Field.Inv(((SecP160R2FieldElement)b).x, z); + SecP160R2Field.Multiply(z, x, z); + return new SecP160R2FieldElement(z); + } + + public override ECFieldElement Negate() + { + uint[] z = Nat160.Create(); + SecP160R2Field.Negate(x, z); + return new SecP160R2FieldElement(z); + } + + public override ECFieldElement Square() + { + uint[] z = Nat160.Create(); + SecP160R2Field.Square(x, z); + return new SecP160R2FieldElement(z); + } + + public override ECFieldElement Invert() + { + uint[] z = Nat160.Create(); + SecP160R2Field.Inv(x, z); + return new SecP160R2FieldElement(z); + } + + // D.1.4 91 + /** + * return a sqrt root - the routine verifies that the calculation returns the right value - if + * none exists it returns null. + */ + public override ECFieldElement Sqrt() + { + /* + * Raise this element to the exponent 2^158 - 2^30 - 2^12 - 2^10 - 2^7 - 2^6 - 2^5 - 2^1 - 2^0 + * + * Breaking up the exponent's binary representation into "repunits", we get: { 127 1s } { 1 + * 0s } { 17 1s } { 1 0s } { 1 1s } { 1 0s } { 2 1s } { 3 0s } { 3 1s } { 1 0s } { 1 1s } + * + * Therefore we need an Addition chain containing 1, 2, 3, 17, 127 (the lengths of the repunits) + * We use: [1], [2], [3], 4, 7, 14, [17], 31, 62, 124, [127] + */ + + uint[] x1 = this.x; + if (Nat160.IsZero(x1) || Nat160.IsOne(x1)) + { + return this; + } + + uint[] x2 = Nat160.Create(); + SecP160R2Field.Square(x1, x2); + SecP160R2Field.Multiply(x2, x1, x2); + uint[] x3 = Nat160.Create(); + SecP160R2Field.Square(x2, x3); + SecP160R2Field.Multiply(x3, x1, x3); + uint[] x4 = Nat160.Create(); + SecP160R2Field.Square(x3, x4); + SecP160R2Field.Multiply(x4, x1, x4); + uint[] x7 = Nat160.Create(); + SecP160R2Field.SquareN(x4, 3, x7); + SecP160R2Field.Multiply(x7, x3, x7); + uint[] x14 = x4; + SecP160R2Field.SquareN(x7, 7, x14); + SecP160R2Field.Multiply(x14, x7, x14); + uint[] x17 = x7; + SecP160R2Field.SquareN(x14, 3, x17); + SecP160R2Field.Multiply(x17, x3, x17); + uint[] x31 = Nat160.Create(); + SecP160R2Field.SquareN(x17, 14, x31); + SecP160R2Field.Multiply(x31, x14, x31); + uint[] x62 = x14; + SecP160R2Field.SquareN(x31, 31, x62); + SecP160R2Field.Multiply(x62, x31, x62); + uint[] x124 = x31; + SecP160R2Field.SquareN(x62, 62, x124); + SecP160R2Field.Multiply(x124, x62, x124); + uint[] x127 = x62; + SecP160R2Field.SquareN(x124, 3, x127); + SecP160R2Field.Multiply(x127, x3, x127); + + uint[] t1 = x127; + SecP160R2Field.SquareN(t1, 18, t1); + SecP160R2Field.Multiply(t1, x17, t1); + SecP160R2Field.SquareN(t1, 2, t1); + SecP160R2Field.Multiply(t1, x1, t1); + SecP160R2Field.SquareN(t1, 3, t1); + SecP160R2Field.Multiply(t1, x2, t1); + SecP160R2Field.SquareN(t1, 6, t1); + SecP160R2Field.Multiply(t1, x3, t1); + SecP160R2Field.SquareN(t1, 2, t1); + SecP160R2Field.Multiply(t1, x1, t1); + + uint[] t2 = x2; + SecP160R2Field.Square(t1, t2); + + return Nat160.Eq(x1, t2) ? new SecP160R2FieldElement(t1) : null; + } + + public override bool Equals(object obj) + { + return Equals(obj as SecP160R2FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecP160R2FieldElement); + } + + public virtual bool Equals(SecP160R2FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat160.Eq(x, other.x); + } + + public override int GetHashCode() + { + return Q.GetHashCode() ^ Arrays.GetHashCode(x, 0, 5); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2FieldElement.cs.meta new file mode 100644 index 000000000..2091211f7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aae5056faf4a481479fc7b296b811965 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2Point.cs new file mode 100644 index 000000000..4a24328b7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2Point.cs @@ -0,0 +1,249 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP160R2Point + : AbstractFpPoint + { + internal SecP160R2Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecP160R2Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecP160R2Point(null, AffineXCoord, AffineYCoord); + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + if (this == b) + return Twice(); + + ECCurve curve = this.Curve; + + SecP160R2FieldElement X1 = (SecP160R2FieldElement)this.RawXCoord, Y1 = (SecP160R2FieldElement)this.RawYCoord; + SecP160R2FieldElement X2 = (SecP160R2FieldElement)b.RawXCoord, Y2 = (SecP160R2FieldElement)b.RawYCoord; + + SecP160R2FieldElement Z1 = (SecP160R2FieldElement)this.RawZCoords[0]; + SecP160R2FieldElement Z2 = (SecP160R2FieldElement)b.RawZCoords[0]; + + uint c; + uint[] tt1 = Nat160.CreateExt(); + uint[] t2 = Nat160.Create(); + uint[] t3 = Nat160.Create(); + uint[] t4 = Nat160.Create(); + + bool Z1IsOne = Z1.IsOne; + uint[] U2, S2; + if (Z1IsOne) + { + U2 = X2.x; + S2 = Y2.x; + } + else + { + S2 = t3; + SecP160R2Field.Square(Z1.x, S2); + + U2 = t2; + SecP160R2Field.Multiply(S2, X2.x, U2); + + SecP160R2Field.Multiply(S2, Z1.x, S2); + SecP160R2Field.Multiply(S2, Y2.x, S2); + } + + bool Z2IsOne = Z2.IsOne; + uint[] U1, S1; + if (Z2IsOne) + { + U1 = X1.x; + S1 = Y1.x; + } + else + { + S1 = t4; + SecP160R2Field.Square(Z2.x, S1); + + U1 = tt1; + SecP160R2Field.Multiply(S1, X1.x, U1); + + SecP160R2Field.Multiply(S1, Z2.x, S1); + SecP160R2Field.Multiply(S1, Y1.x, S1); + } + + uint[] H = Nat160.Create(); + SecP160R2Field.Subtract(U1, U2, H); + + uint[] R = t2; + SecP160R2Field.Subtract(S1, S2, R); + + // Check if b == this or b == -this + if (Nat160.IsZero(H)) + { + if (Nat160.IsZero(R)) + { + // this == b, i.e. this must be doubled + return this.Twice(); + } + + // this == -b, i.e. the result is the point at infinity + return curve.Infinity; + } + + uint[] HSquared = t3; + SecP160R2Field.Square(H, HSquared); + + uint[] G = Nat160.Create(); + SecP160R2Field.Multiply(HSquared, H, G); + + uint[] V = t3; + SecP160R2Field.Multiply(HSquared, U1, V); + + SecP160R2Field.Negate(G, G); + Nat160.Mul(S1, G, tt1); + + c = Nat160.AddBothTo(V, V, G); + SecP160R2Field.Reduce32(c, G); + + SecP160R2FieldElement X3 = new SecP160R2FieldElement(t4); + SecP160R2Field.Square(R, X3.x); + SecP160R2Field.Subtract(X3.x, G, X3.x); + + SecP160R2FieldElement Y3 = new SecP160R2FieldElement(G); + SecP160R2Field.Subtract(V, X3.x, Y3.x); + SecP160R2Field.MultiplyAddToExt(Y3.x, R, tt1); + SecP160R2Field.Reduce(tt1, Y3.x); + + SecP160R2FieldElement Z3 = new SecP160R2FieldElement(H); + if (!Z1IsOne) + { + SecP160R2Field.Multiply(Z3.x, Z1.x, Z3.x); + } + if (!Z2IsOne) + { + SecP160R2Field.Multiply(Z3.x, Z2.x, Z3.x); + } + + ECFieldElement[] zs = new ECFieldElement[]{ Z3 }; + + return new SecP160R2Point(curve, X3, Y3, zs); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + SecP160R2FieldElement Y1 = (SecP160R2FieldElement)this.RawYCoord; + if (Y1.IsZero) + return curve.Infinity; + + SecP160R2FieldElement X1 = (SecP160R2FieldElement)this.RawXCoord, Z1 = (SecP160R2FieldElement)this.RawZCoords[0]; + + uint c; + uint[] t1 = Nat160.Create(); + uint[] t2 = Nat160.Create(); + + uint[] Y1Squared = Nat160.Create(); + SecP160R2Field.Square(Y1.x, Y1Squared); + + uint[] T = Nat160.Create(); + SecP160R2Field.Square(Y1Squared, T); + + bool Z1IsOne = Z1.IsOne; + + uint[] Z1Squared = Z1.x; + if (!Z1IsOne) + { + Z1Squared = t2; + SecP160R2Field.Square(Z1.x, Z1Squared); + } + + SecP160R2Field.Subtract(X1.x, Z1Squared, t1); + + uint[] M = t2; + SecP160R2Field.Add(X1.x, Z1Squared, M); + SecP160R2Field.Multiply(M, t1, M); + c = Nat160.AddBothTo(M, M, M); + SecP160R2Field.Reduce32(c, M); + + uint[] S = Y1Squared; + SecP160R2Field.Multiply(Y1Squared, X1.x, S); + c = Nat.ShiftUpBits(5, S, 2, 0); + SecP160R2Field.Reduce32(c, S); + + c = Nat.ShiftUpBits(5, T, 3, 0, t1); + SecP160R2Field.Reduce32(c, t1); + + SecP160R2FieldElement X3 = new SecP160R2FieldElement(T); + SecP160R2Field.Square(M, X3.x); + SecP160R2Field.Subtract(X3.x, S, X3.x); + SecP160R2Field.Subtract(X3.x, S, X3.x); + + SecP160R2FieldElement Y3 = new SecP160R2FieldElement(S); + SecP160R2Field.Subtract(S, X3.x, Y3.x); + SecP160R2Field.Multiply(Y3.x, M, Y3.x); + SecP160R2Field.Subtract(Y3.x, t1, Y3.x); + + SecP160R2FieldElement Z3 = new SecP160R2FieldElement(M); + SecP160R2Field.Twice(Y1.x, Z3.x); + if (!Z1IsOne) + { + SecP160R2Field.Multiply(Z3.x, Z1.x, Z3.x); + } + + return new SecP160R2Point(curve, X3, Y3, new ECFieldElement[]{ Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this == b) + return ThreeTimes(); + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECFieldElement Y1 = this.RawYCoord; + if (Y1.IsZero) + return b; + + return Twice().Add(b); + } + + public override ECPoint ThreeTimes() + { + if (this.IsInfinity || this.RawYCoord.IsZero) + return this; + + // NOTE: Be careful about recursions between TwicePlus and ThreeTimes + return Twice().Add(this); + } + + public override ECPoint Negate() + { + if (IsInfinity) + return this; + + return new SecP160R2Point(Curve, this.RawXCoord, this.RawYCoord.Negate(), this.RawZCoords); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2Point.cs.meta new file mode 100644 index 000000000..e147aa3b9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP160R2Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 052ed3284b9686047ad51492201a07e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1Curve.cs new file mode 100644 index 000000000..56afb382c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1Curve.cs @@ -0,0 +1,172 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP192K1Curve + : AbstractFpCurve + { + public static readonly BigInteger q = SecP192K1FieldElement.Q; + + private const int SECP192K1_DEFAULT_COORDS = COORD_JACOBIAN; + private const int SECP192K1_FE_INTS = 6; + private static readonly ECFieldElement[] SECP192K1_AFFINE_ZS = new ECFieldElement[] { new SecP192K1FieldElement(BigInteger.One) }; + + protected readonly SecP192K1Point m_infinity; + + public SecP192K1Curve() + : base(q) + { + this.m_infinity = new SecP192K1Point(this, null, null); + + this.m_a = FromBigInteger(BigInteger.Zero); + this.m_b = FromBigInteger(BigInteger.ValueOf(3)); + this.m_order = new BigInteger(1, Hex.DecodeStrict("FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D")); + this.m_cofactor = BigInteger.One; + this.m_coord = SECP192K1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecP192K1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_JACOBIAN: + return true; + default: + return false; + } + } + + public virtual BigInteger Q + { + get { return q; } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return q.BitLength; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecP192K1FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecP192K1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecP192K1Point(this, x, y, zs); + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + uint[] table = new uint[len * SECP192K1_FE_INTS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat192.Copy(((SecP192K1FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECP192K1_FE_INTS; + Nat192.Copy(((SecP192K1FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECP192K1_FE_INTS; + } + } + + return new SecP192K1LookupTable(this, table, len); + } + + public override ECFieldElement RandomFieldElement(SecureRandom r) + { + uint[] x = Nat192.Create(); + SecP192K1Field.Random(r, x); + return new SecP192K1FieldElement(x); + } + + public override ECFieldElement RandomFieldElementMult(SecureRandom r) + { + uint[] x = Nat192.Create(); + SecP192K1Field.RandomMult(r, x); + return new SecP192K1FieldElement(x); + } + + private class SecP192K1LookupTable + : AbstractECLookupTable + { + private readonly SecP192K1Curve m_outer; + private readonly uint[] m_table; + private readonly int m_size; + + internal SecP192K1LookupTable(SecP192K1Curve outer, uint[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + uint[] x = Nat192.Create(), y = Nat192.Create(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + uint MASK = (uint)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECP192K1_FE_INTS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECP192K1_FE_INTS + j] & MASK; + } + + pos += (SECP192K1_FE_INTS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + uint[] x = Nat192.Create(), y = Nat192.Create(); + int pos = index * SECP192K1_FE_INTS * 2; + + for (int j = 0; j < SECP192K1_FE_INTS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECP192K1_FE_INTS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(uint[] x, uint[] y) + { + return m_outer.CreateRawPoint(new SecP192K1FieldElement(x), new SecP192K1FieldElement(y), SECP192K1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1Curve.cs.meta new file mode 100644 index 000000000..9b08ab02d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c57242857a693945805fab06e8b8816 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1Field.cs new file mode 100644 index 000000000..c1d4ac0a2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1Field.cs @@ -0,0 +1,221 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP192K1Field + { + // 2^192 - 2^32 - 2^12 - 2^8 - 2^7 - 2^6 - 2^3 - 1 + internal static readonly uint[] P = new uint[]{ 0xFFFFEE37, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF }; + private static readonly uint[] PExt = new uint[]{ 0x013C4FD1, 0x00002392, 0x00000001, 0x00000000, 0x00000000, + 0x00000000, 0xFFFFDC6E, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; + private static readonly uint[] PExtInv = new uint[]{ 0xFEC3B02F, 0xFFFFDC6D, 0xFFFFFFFE, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00002391, 0x00000002 }; + private const uint P5 = 0xFFFFFFFF; + private const uint PExt11 = 0xFFFFFFFF; + private const uint PInv33 = 0x11C9; + + public static void Add(uint[] x, uint[] y, uint[] z) + { + uint c = Nat192.Add(x, y, z); + if (c != 0 || (z[5] == P5 && Nat192.Gte(z, P))) + { + Nat.Add33To(6, PInv33, z); + } + } + + public static void AddExt(uint[] xx, uint[] yy, uint[] zz) + { + uint c = Nat.Add(12, xx, yy, zz); + if (c != 0 || (zz[11] == PExt11 && Nat.Gte(12, zz, PExt))) + { + if (Nat.AddTo(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.IncAt(12, zz, PExtInv.Length); + } + } + } + + public static void AddOne(uint[] x, uint[] z) + { + uint c = Nat.Inc(6, x, z); + if (c != 0 || (z[5] == P5 && Nat192.Gte(z, P))) + { + Nat.Add33To(6, PInv33, z); + } + } + + public static uint[] FromBigInteger(BigInteger x) + { + uint[] z = Nat.FromBigInteger(192, x); + if (z[5] == P5 && Nat192.Gte(z, P)) + { + Nat192.SubFrom(P, z); + } + return z; + } + + public static void Half(uint[] x, uint[] z) + { + if ((x[0] & 1) == 0) + { + Nat.ShiftDownBit(6, x, 0, z); + } + else + { + uint c = Nat192.Add(x, P, z); + Nat.ShiftDownBit(6, z, c); + } + } + + public static void Inv(uint[] x, uint[] z) + { + Mod.CheckedModOddInverse(P, x, z); + } + + public static int IsZero(uint[] x) + { + uint d = 0; + for (int i = 0; i < 6; ++i) + { + d |= x[i]; + } + d = (d >> 1) | (d & 1); + return ((int)d - 1) >> 31; + } + + public static void Multiply(uint[] x, uint[] y, uint[] z) + { + uint[] tt = Nat192.CreateExt(); + Nat192.Mul(x, y, tt); + Reduce(tt, z); + } + + public static void MultiplyAddToExt(uint[] x, uint[] y, uint[] zz) + { + uint c = Nat192.MulAddTo(x, y, zz); + if (c != 0 || (zz[11] == PExt11 && Nat.Gte(12, zz, PExt))) + { + if (Nat.AddTo(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.IncAt(12, zz, PExtInv.Length); + } + } + } + + public static void Negate(uint[] x, uint[] z) + { + if (0 != IsZero(x)) + { + Nat192.Sub(P, P, z); + } + else + { + Nat192.Sub(P, x, z); + } + } + + public static void Random(SecureRandom r, uint[] z) + { + byte[] bb = new byte[6 * 4]; + do + { + r.NextBytes(bb); + Pack.LE_To_UInt32(bb, 0, z, 0, 6); + } + while (0 == Nat.LessThan(6, z, P)); + } + + public static void RandomMult(SecureRandom r, uint[] z) + { + do + { + Random(r, z); + } + while (0 != IsZero(z)); + } + + public static void Reduce(uint[] xx, uint[] z) + { + ulong cc = Nat192.Mul33Add(PInv33, xx, 6, xx, 0, z, 0); + uint c = Nat192.Mul33DWordAdd(PInv33, cc, z, 0); + + Debug.Assert(c == 0 || c == 1); + + if (c != 0 || (z[5] == P5 && Nat192.Gte(z, P))) + { + Nat.Add33To(6, PInv33, z); + } + } + + public static void Reduce32(uint x, uint[] z) + { + if ((x != 0 && Nat192.Mul33WordAdd(PInv33, x, z, 0) != 0) + || (z[5] == P5 && Nat192.Gte(z, P))) + { + Nat.Add33To(6, PInv33, z); + } + } + + public static void Square(uint[] x, uint[] z) + { + uint[] tt = Nat192.CreateExt(); + Nat192.Square(x, tt); + Reduce(tt, z); + } + + public static void SquareN(uint[] x, int n, uint[] z) + { + Debug.Assert(n > 0); + + uint[] tt = Nat192.CreateExt(); + Nat192.Square(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + Nat192.Square(z, tt); + Reduce(tt, z); + } + } + + public static void Subtract(uint[] x, uint[] y, uint[] z) + { + int c = Nat192.Sub(x, y, z); + if (c != 0) + { + Nat.Sub33From(6, PInv33, z); + } + } + + public static void SubtractExt(uint[] xx, uint[] yy, uint[] zz) + { + int c = Nat.Sub(12, xx, yy, zz); + if (c != 0) + { + if (Nat.SubFrom(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.DecAt(12, zz, PExtInv.Length); + } + } + } + + public static void Twice(uint[] x, uint[] z) + { + uint c = Nat.ShiftUpBit(6, x, 0, z); + if (c != 0 || (z[5] == P5 && Nat192.Gte(z, P))) + { + Nat.Add33To(6, PInv33, z); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1Field.cs.meta new file mode 100644 index 000000000..022860692 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 218f3d42a4e59cf4a953af9121236128 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1FieldElement.cs new file mode 100644 index 000000000..a7c7662dd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1FieldElement.cs @@ -0,0 +1,218 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP192K1FieldElement + : AbstractFpFieldElement + { + public static readonly BigInteger Q = new BigInteger(1, + Hex.DecodeStrict("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37")); + + protected internal readonly uint[] x; + + public SecP192K1FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.CompareTo(Q) >= 0) + throw new ArgumentException("value invalid for SecP192K1FieldElement", "x"); + + this.x = SecP192K1Field.FromBigInteger(x); + } + + public SecP192K1FieldElement() + { + this.x = Nat192.Create(); + } + + protected internal SecP192K1FieldElement(uint[] x) + { + this.x = x; + } + + public override bool IsZero + { + get { return Nat192.IsZero(x); } + } + + public override bool IsOne + { + get { return Nat192.IsOne(x); } + } + + public override bool TestBitZero() + { + return Nat192.GetBit(x, 0) == 1; + } + + public override BigInteger ToBigInteger() + { + return Nat192.ToBigInteger(x); + } + + public override string FieldName + { + get { return "SecP192K1Field"; } + } + + public override int FieldSize + { + get { return Q.BitLength; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + uint[] z = Nat192.Create(); + SecP192K1Field.Add(x, ((SecP192K1FieldElement)b).x, z); + return new SecP192K1FieldElement(z); + } + + public override ECFieldElement AddOne() + { + uint[] z = Nat192.Create(); + SecP192K1Field.AddOne(x, z); + return new SecP192K1FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + uint[] z = Nat192.Create(); + SecP192K1Field.Subtract(x, ((SecP192K1FieldElement)b).x, z); + return new SecP192K1FieldElement(z); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + uint[] z = Nat192.Create(); + SecP192K1Field.Multiply(x, ((SecP192K1FieldElement)b).x, z); + return new SecP192K1FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + //return Multiply(b.Invert()); + uint[] z = Nat192.Create(); + SecP192K1Field.Inv(((SecP192K1FieldElement)b).x, z); + SecP192K1Field.Multiply(z, x, z); + return new SecP192K1FieldElement(z); + } + + public override ECFieldElement Negate() + { + uint[] z = Nat192.Create(); + SecP192K1Field.Negate(x, z); + return new SecP192K1FieldElement(z); + } + + public override ECFieldElement Square() + { + uint[] z = Nat192.Create(); + SecP192K1Field.Square(x, z); + return new SecP192K1FieldElement(z); + } + + public override ECFieldElement Invert() + { + uint[] z = Nat192.Create(); + SecP192K1Field.Inv(x, z); + return new SecP192K1FieldElement(z); + } + + /** + * return a sqrt root - the routine verifies that the calculation returns the right value - if + * none exists it returns null. + */ + public override ECFieldElement Sqrt() + { + /* + * Raise this element to the exponent 2^190 - 2^30 - 2^10 - 2^6 - 2^5 - 2^4 - 2^1 + * + * Breaking up the exponent's binary representation into "repunits", we get: + * { 159 1s } { 1 0s } { 19 1s } { 1 0s } { 3 1s } { 3 0s } { 3 1s } { 1 0s } + * + * Therefore we need an addition chain containing 3, 19, 159 (the lengths of the repunits) + * We use: 1, 2, [3], 6, 8, 16, [19], 35, 70, 140, [159] + */ + + uint[] x1 = this.x; + if (Nat192.IsZero(x1) || Nat192.IsOne(x1)) + return this; + + uint[] x2 = Nat192.Create(); + SecP192K1Field.Square(x1, x2); + SecP192K1Field.Multiply(x2, x1, x2); + uint[] x3 = Nat192.Create(); + SecP192K1Field.Square(x2, x3); + SecP192K1Field.Multiply(x3, x1, x3); + uint[] x6 = Nat192.Create(); + SecP192K1Field.SquareN(x3, 3, x6); + SecP192K1Field.Multiply(x6, x3, x6); + uint[] x8 = x6; + SecP192K1Field.SquareN(x6, 2, x8); + SecP192K1Field.Multiply(x8, x2, x8); + uint[] x16 = x2; + SecP192K1Field.SquareN(x8, 8, x16); + SecP192K1Field.Multiply(x16, x8, x16); + uint[] x19 = x8; + SecP192K1Field.SquareN(x16, 3, x19); + SecP192K1Field.Multiply(x19, x3, x19); + uint[] x35 = Nat192.Create(); + SecP192K1Field.SquareN(x19, 16, x35); + SecP192K1Field.Multiply(x35, x16, x35); + uint[] x70 = x16; + SecP192K1Field.SquareN(x35, 35, x70); + SecP192K1Field.Multiply(x70, x35, x70); + uint[] x140 = x35; + SecP192K1Field.SquareN(x70, 70, x140); + SecP192K1Field.Multiply(x140, x70, x140); + uint[] x159 = x70; + SecP192K1Field.SquareN(x140, 19, x159); + SecP192K1Field.Multiply(x159, x19, x159); + + uint[] t1 = x159; + SecP192K1Field.SquareN(t1, 20, t1); + SecP192K1Field.Multiply(t1, x19, t1); + SecP192K1Field.SquareN(t1, 4, t1); + SecP192K1Field.Multiply(t1, x3, t1); + SecP192K1Field.SquareN(t1, 6, t1); + SecP192K1Field.Multiply(t1, x3, t1); + SecP192K1Field.Square(t1, t1); + + uint[] t2 = x3; + SecP192K1Field.Square(t1, t2); + + return Nat192.Eq(x1, t2) ? new SecP192K1FieldElement(t1) : null; + } + + public override bool Equals(object obj) + { + return Equals(obj as SecP192K1FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecP192K1FieldElement); + } + + public virtual bool Equals(SecP192K1FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat192.Eq(x, other.x); + } + + public override int GetHashCode() + { + return Q.GetHashCode() ^ Arrays.GetHashCode(x, 0, 6); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1FieldElement.cs.meta new file mode 100644 index 000000000..fa52cbd6a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d5a7a619c061cd24cafd0a7cdbb3a432 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1Point.cs new file mode 100644 index 000000000..cf1670109 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1Point.cs @@ -0,0 +1,236 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP192K1Point + : AbstractFpPoint + { + internal SecP192K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecP192K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecP192K1Point(null, AffineXCoord, AffineYCoord); + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + if (this == b) + return Twice(); + + ECCurve curve = this.Curve; + + SecP192K1FieldElement X1 = (SecP192K1FieldElement)this.RawXCoord, Y1 = (SecP192K1FieldElement)this.RawYCoord; + SecP192K1FieldElement X2 = (SecP192K1FieldElement)b.RawXCoord, Y2 = (SecP192K1FieldElement)b.RawYCoord; + + SecP192K1FieldElement Z1 = (SecP192K1FieldElement)this.RawZCoords[0]; + SecP192K1FieldElement Z2 = (SecP192K1FieldElement)b.RawZCoords[0]; + + uint c; + uint[] tt1 = Nat192.CreateExt(); + uint[] t2 = Nat192.Create(); + uint[] t3 = Nat192.Create(); + uint[] t4 = Nat192.Create(); + + bool Z1IsOne = Z1.IsOne; + uint[] U2, S2; + if (Z1IsOne) + { + U2 = X2.x; + S2 = Y2.x; + } + else + { + S2 = t3; + SecP192K1Field.Square(Z1.x, S2); + + U2 = t2; + SecP192K1Field.Multiply(S2, X2.x, U2); + + SecP192K1Field.Multiply(S2, Z1.x, S2); + SecP192K1Field.Multiply(S2, Y2.x, S2); + } + + bool Z2IsOne = Z2.IsOne; + uint[] U1, S1; + if (Z2IsOne) + { + U1 = X1.x; + S1 = Y1.x; + } + else + { + S1 = t4; + SecP192K1Field.Square(Z2.x, S1); + + U1 = tt1; + SecP192K1Field.Multiply(S1, X1.x, U1); + + SecP192K1Field.Multiply(S1, Z2.x, S1); + SecP192K1Field.Multiply(S1, Y1.x, S1); + } + + uint[] H = Nat192.Create(); + SecP192K1Field.Subtract(U1, U2, H); + + uint[] R = t2; + SecP192K1Field.Subtract(S1, S2, R); + + // Check if b == this or b == -this + if (Nat192.IsZero(H)) + { + if (Nat192.IsZero(R)) + { + // this == b, i.e. this must be doubled + return this.Twice(); + } + + // this == -b, i.e. the result is the point at infinity + return curve.Infinity; + } + + uint[] HSquared = t3; + SecP192K1Field.Square(H, HSquared); + + uint[] G = Nat192.Create(); + SecP192K1Field.Multiply(HSquared, H, G); + + uint[] V = t3; + SecP192K1Field.Multiply(HSquared, U1, V); + + SecP192K1Field.Negate(G, G); + Nat192.Mul(S1, G, tt1); + + c = Nat192.AddBothTo(V, V, G); + SecP192K1Field.Reduce32(c, G); + + SecP192K1FieldElement X3 = new SecP192K1FieldElement(t4); + SecP192K1Field.Square(R, X3.x); + SecP192K1Field.Subtract(X3.x, G, X3.x); + + SecP192K1FieldElement Y3 = new SecP192K1FieldElement(G); + SecP192K1Field.Subtract(V, X3.x, Y3.x); + SecP192K1Field.MultiplyAddToExt(Y3.x, R, tt1); + SecP192K1Field.Reduce(tt1, Y3.x); + + SecP192K1FieldElement Z3 = new SecP192K1FieldElement(H); + if (!Z1IsOne) + { + SecP192K1Field.Multiply(Z3.x, Z1.x, Z3.x); + } + if (!Z2IsOne) + { + SecP192K1Field.Multiply(Z3.x, Z2.x, Z3.x); + } + + ECFieldElement[] zs = new ECFieldElement[] { Z3 }; + + return new SecP192K1Point(curve, X3, Y3, zs); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + SecP192K1FieldElement Y1 = (SecP192K1FieldElement)this.RawYCoord; + if (Y1.IsZero) + return curve.Infinity; + + SecP192K1FieldElement X1 = (SecP192K1FieldElement)this.RawXCoord, Z1 = (SecP192K1FieldElement)this.RawZCoords[0]; + + uint c; + + uint[] Y1Squared = Nat192.Create(); + SecP192K1Field.Square(Y1.x, Y1Squared); + + uint[] T = Nat192.Create(); + SecP192K1Field.Square(Y1Squared, T); + + uint[] M = Nat192.Create(); + SecP192K1Field.Square(X1.x, M); + c = Nat192.AddBothTo(M, M, M); + SecP192K1Field.Reduce32(c, M); + + uint[] S = Y1Squared; + SecP192K1Field.Multiply(Y1Squared, X1.x, S); + c = Nat.ShiftUpBits(6, S, 2, 0); + SecP192K1Field.Reduce32(c, S); + + uint[] t1 = Nat192.Create(); + c = Nat.ShiftUpBits(6, T, 3, 0, t1); + SecP192K1Field.Reduce32(c, t1); + + SecP192K1FieldElement X3 = new SecP192K1FieldElement(T); + SecP192K1Field.Square(M, X3.x); + SecP192K1Field.Subtract(X3.x, S, X3.x); + SecP192K1Field.Subtract(X3.x, S, X3.x); + + SecP192K1FieldElement Y3 = new SecP192K1FieldElement(S); + SecP192K1Field.Subtract(S, X3.x, Y3.x); + SecP192K1Field.Multiply(Y3.x, M, Y3.x); + SecP192K1Field.Subtract(Y3.x, t1, Y3.x); + + SecP192K1FieldElement Z3 = new SecP192K1FieldElement(M); + SecP192K1Field.Twice(Y1.x, Z3.x); + if (!Z1.IsOne) + { + SecP192K1Field.Multiply(Z3.x, Z1.x, Z3.x); + } + + return new SecP192K1Point(curve, X3, Y3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this == b) + return ThreeTimes(); + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECFieldElement Y1 = this.RawYCoord; + if (Y1.IsZero) + return b; + + return Twice().Add(b); + } + + public override ECPoint ThreeTimes() + { + if (this.IsInfinity || this.RawYCoord.IsZero) + return this; + + // NOTE: Be careful about recursions between TwicePlus and ThreeTimes + return Twice().Add(this); + } + + public override ECPoint Negate() + { + if (IsInfinity) + return this; + + return new SecP192K1Point(Curve, RawXCoord, RawYCoord.Negate(), RawZCoords); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1Point.cs.meta new file mode 100644 index 000000000..e564406e3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192K1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d94a23a9df7487e4b8647bb414b5c412 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1Curve.cs new file mode 100644 index 000000000..bca595f71 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1Curve.cs @@ -0,0 +1,175 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP192R1Curve + : AbstractFpCurve + { + public static readonly BigInteger q = SecP192R1FieldElement.Q; + + private const int SECP192R1_DEFAULT_COORDS = COORD_JACOBIAN; + private const int SECP192R1_FE_INTS = 6; + private static readonly ECFieldElement[] SECP192R1_AFFINE_ZS = new ECFieldElement[] { new SecP192R1FieldElement(BigInteger.One) }; + + protected readonly SecP192R1Point m_infinity; + + public SecP192R1Curve() + : base(q) + { + this.m_infinity = new SecP192R1Point(this, null, null); + + this.m_a = FromBigInteger(new BigInteger(1, + Hex.DecodeStrict("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC"))); + this.m_b = FromBigInteger(new BigInteger(1, + Hex.DecodeStrict("64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831")); + this.m_cofactor = BigInteger.One; + + this.m_coord = SECP192R1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecP192R1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_JACOBIAN: + return true; + default: + return false; + } + } + + public virtual BigInteger Q + { + get { return q; } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return q.BitLength; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecP192R1FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecP192R1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecP192R1Point(this, x, y, zs); + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + uint[] table = new uint[len * SECP192R1_FE_INTS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat192.Copy(((SecP192R1FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECP192R1_FE_INTS; + Nat192.Copy(((SecP192R1FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECP192R1_FE_INTS; + } + } + + return new SecP192R1LookupTable(this, table, len); + } + + public override ECFieldElement RandomFieldElement(SecureRandom r) + { + uint[] x = Nat192.Create(); + SecP192R1Field.Random(r, x); + return new SecP192R1FieldElement(x); + } + + public override ECFieldElement RandomFieldElementMult(SecureRandom r) + { + uint[] x = Nat192.Create(); + SecP192R1Field.RandomMult(r, x); + return new SecP192R1FieldElement(x); + } + + private class SecP192R1LookupTable + : AbstractECLookupTable + { + private readonly SecP192R1Curve m_outer; + private readonly uint[] m_table; + private readonly int m_size; + + internal SecP192R1LookupTable(SecP192R1Curve outer, uint[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + uint[] x = Nat192.Create(), y = Nat192.Create(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + uint MASK = (uint)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECP192R1_FE_INTS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECP192R1_FE_INTS + j] & MASK; + } + + pos += (SECP192R1_FE_INTS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + uint[] x = Nat192.Create(), y = Nat192.Create(); + int pos = index * SECP192R1_FE_INTS * 2; + + for (int j = 0; j < SECP192R1_FE_INTS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECP192R1_FE_INTS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(uint[] x, uint[] y) + { + return m_outer.CreateRawPoint(new SecP192R1FieldElement(x), new SecP192R1FieldElement(y), SECP192R1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1Curve.cs.meta new file mode 100644 index 000000000..0f04485ea --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9051396fd403a4143a8049754bd784c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1Field.cs new file mode 100644 index 000000000..47185c36b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1Field.cs @@ -0,0 +1,326 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP192R1Field + { + // 2^192 - 2^64 - 1 + internal static readonly uint[] P = new uint[]{ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF }; + private static readonly uint[] PExt = new uint[]{ 0x00000001, 0x00000000, 0x00000002, 0x00000000, 0x00000001, + 0x00000000, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; + private static readonly uint[] PExtInv = new uint[]{ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFD, 0xFFFFFFFF, + 0xFFFFFFFE, 0xFFFFFFFF, 0x00000001, 0x00000000, 0x00000002 }; + private const uint P5 = 0xFFFFFFFF; + private const uint PExt11 = 0xFFFFFFFF; + + public static void Add(uint[] x, uint[] y, uint[] z) + { + uint c = Nat192.Add(x, y, z); + if (c != 0 || (z[5] == P5 && Nat192.Gte(z, P))) + { + AddPInvTo(z); + } + } + + public static void AddExt(uint[] xx, uint[] yy, uint[] zz) + { + uint c = Nat.Add(12, xx, yy, zz); + if (c != 0 || (zz[11] == PExt11 && Nat.Gte(12, zz, PExt))) + { + if (Nat.AddTo(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.IncAt(12, zz, PExtInv.Length); + } + } + } + + public static void AddOne(uint[] x, uint[] z) + { + uint c = Nat.Inc(6, x, z); + if (c != 0 || (z[5] == P5 && Nat192.Gte(z, P))) + { + AddPInvTo(z); + } + } + + public static uint[] FromBigInteger(BigInteger x) + { + uint[] z = Nat.FromBigInteger(192, x); + if (z[5] == P5 && Nat192.Gte(z, P)) + { + Nat192.SubFrom(P, z); + } + return z; + } + + public static void Half(uint[] x, uint[] z) + { + if ((x[0] & 1) == 0) + { + Nat.ShiftDownBit(6, x, 0, z); + } + else + { + uint c = Nat192.Add(x, P, z); + Nat.ShiftDownBit(6, z, c); + } + } + + public static void Inv(uint[] x, uint[] z) + { + Mod.CheckedModOddInverse(P, x, z); + } + + public static int IsZero(uint[] x) + { + uint d = 0; + for (int i = 0; i < 6; ++i) + { + d |= x[i]; + } + d = (d >> 1) | (d & 1); + return ((int)d - 1) >> 31; + } + + public static void Multiply(uint[] x, uint[] y, uint[] z) + { + uint[] tt = Nat192.CreateExt(); + Nat192.Mul(x, y, tt); + Reduce(tt, z); + } + + public static void MultiplyAddToExt(uint[] x, uint[] y, uint[] zz) + { + uint c = Nat192.MulAddTo(x, y, zz); + if (c != 0 || (zz[11] == PExt11 && Nat.Gte(12, zz, PExt))) + { + if (Nat.AddTo(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.IncAt(12, zz, PExtInv.Length); + } + } + } + + public static void Negate(uint[] x, uint[] z) + { + if (0 != IsZero(x)) + { + Nat192.Sub(P, P, z); + } + else + { + Nat192.Sub(P, x, z); + } + } + + public static void Random(SecureRandom r, uint[] z) + { + byte[] bb = new byte[6 * 4]; + do + { + r.NextBytes(bb); + Pack.LE_To_UInt32(bb, 0, z, 0, 6); + } + while (0 == Nat.LessThan(6, z, P)); + } + + public static void RandomMult(SecureRandom r, uint[] z) + { + do + { + Random(r, z); + } + while (0 != IsZero(z)); + } + + public static void Reduce(uint[] xx, uint[] z) + { + ulong xx06 = xx[6], xx07 = xx[7], xx08 = xx[8]; + ulong xx09 = xx[9], xx10 = xx[10], xx11 = xx[11]; + + ulong t0 = xx06 + xx10; + ulong t1 = xx07 + xx11; + + ulong cc = 0; + cc += (ulong)xx[0] + t0; + uint z0 = (uint)cc; + cc >>= 32; + cc += (ulong)xx[1] + t1; + z[1] = (uint)cc; + cc >>= 32; + + t0 += xx08; + t1 += xx09; + + cc += (ulong)xx[2] + t0; + ulong z2 = (uint)cc; + cc >>= 32; + cc += (ulong)xx[3] + t1; + z[3] = (uint)cc; + cc >>= 32; + + t0 -= xx06; + t1 -= xx07; + + cc += (ulong)xx[4] + t0; + z[4] = (uint)cc; + cc >>= 32; + cc += (ulong)xx[5] + t1; + z[5] = (uint)cc; + cc >>= 32; + + z2 += cc; + + cc += z0; + z[0] = (uint)cc; + cc >>= 32; + if (cc != 0) + { + cc += z[1]; + z[1] = (uint)cc; + z2 += cc >> 32; + } + z[2] = (uint)z2; + cc = z2 >> 32; + + Debug.Assert(cc == 0 || cc == 1); + + if ((cc != 0 && Nat.IncAt(6, z, 3) != 0) + || (z[5] == P5 && Nat192.Gte(z, P))) + { + AddPInvTo(z); + } + } + + public static void Reduce32(uint x, uint[] z) + { + ulong cc = 0; + + if (x != 0) + { + cc += (ulong)z[0] + x; + z[0] = (uint)cc; + cc >>= 32; + if (cc != 0) + { + cc += (ulong)z[1]; + z[1] = (uint)cc; + cc >>= 32; + } + cc += (ulong)z[2] + x; + z[2] = (uint)cc; + cc >>= 32; + + Debug.Assert(cc == 0 || cc == 1); + } + + if ((cc != 0 && Nat.IncAt(6, z, 3) != 0) + || (z[5] == P5 && Nat192.Gte(z, P))) + { + AddPInvTo(z); + } + } + + public static void Square(uint[] x, uint[] z) + { + uint[] tt = Nat192.CreateExt(); + Nat192.Square(x, tt); + Reduce(tt, z); + } + + public static void SquareN(uint[] x, int n, uint[] z) + { + Debug.Assert(n > 0); + + uint[] tt = Nat192.CreateExt(); + Nat192.Square(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + Nat192.Square(z, tt); + Reduce(tt, z); + } + } + + public static void Subtract(uint[] x, uint[] y, uint[] z) + { + int c = Nat192.Sub(x, y, z); + if (c != 0) + { + SubPInvFrom(z); + } + } + + public static void SubtractExt(uint[] xx, uint[] yy, uint[] zz) + { + int c = Nat.Sub(12, xx, yy, zz); + if (c != 0) + { + if (Nat.SubFrom(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.DecAt(12, zz, PExtInv.Length); + } + } + } + + public static void Twice(uint[] x, uint[] z) + { + uint c = Nat.ShiftUpBit(6, x, 0, z); + if (c != 0 || (z[5] == P5 && Nat192.Gte(z, P))) + { + AddPInvTo(z); + } + } + + private static void AddPInvTo(uint[] z) + { + long c = (long)z[0] + 1; + z[0] = (uint)c; + c >>= 32; + if (c != 0) + { + c += (long)z[1]; + z[1] = (uint)c; + c >>= 32; + } + c += (long)z[2] + 1; + z[2] = (uint)c; + c >>= 32; + if (c != 0) + { + Nat.IncAt(6, z, 3); + } + } + + private static void SubPInvFrom(uint[] z) + { + long c = (long)z[0] - 1; + z[0] = (uint)c; + c >>= 32; + if (c != 0) + { + c += (long)z[1]; + z[1] = (uint)c; + c >>= 32; + } + c += (long)z[2] - 1; + z[2] = (uint)c; + c >>= 32; + if (c != 0) + { + Nat.DecAt(6, z, 3); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1Field.cs.meta new file mode 100644 index 000000000..2863b5729 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 44fb8f1c5ae47e64caf48325ec0b3902 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1FieldElement.cs new file mode 100644 index 000000000..6083ae6f0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1FieldElement.cs @@ -0,0 +1,193 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP192R1FieldElement + : AbstractFpFieldElement + { + public static readonly BigInteger Q = new BigInteger(1, + Hex.DecodeStrict("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF")); + + protected internal readonly uint[] x; + + public SecP192R1FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.CompareTo(Q) >= 0) + throw new ArgumentException("value invalid for SecP192R1FieldElement", "x"); + + this.x = SecP192R1Field.FromBigInteger(x); + } + + public SecP192R1FieldElement() + { + this.x = Nat192.Create(); + } + + protected internal SecP192R1FieldElement(uint[] x) + { + this.x = x; + } + + public override bool IsZero + { + get { return Nat192.IsZero(x); } + } + + public override bool IsOne + { + get { return Nat192.IsOne(x); } + } + + public override bool TestBitZero() + { + return Nat192.GetBit(x, 0) == 1; + } + + public override BigInteger ToBigInteger() + { + return Nat192.ToBigInteger(x); + } + + public override string FieldName + { + get { return "SecP192R1Field"; } + } + + public override int FieldSize + { + get { return Q.BitLength; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + uint[] z = Nat192.Create(); + SecP192R1Field.Add(x, ((SecP192R1FieldElement)b).x, z); + return new SecP192R1FieldElement(z); + } + + public override ECFieldElement AddOne() + { + uint[] z = Nat192.Create(); + SecP192R1Field.AddOne(x, z); + return new SecP192R1FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + uint[] z = Nat192.Create(); + SecP192R1Field.Subtract(x, ((SecP192R1FieldElement)b).x, z); + return new SecP192R1FieldElement(z); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + uint[] z = Nat192.Create(); + SecP192R1Field.Multiply(x, ((SecP192R1FieldElement)b).x, z); + return new SecP192R1FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + //return Multiply(b.Invert()); + uint[] z = Nat192.Create(); + SecP192R1Field.Inv(((SecP192R1FieldElement)b).x, z); + SecP192R1Field.Multiply(z, x, z); + return new SecP192R1FieldElement(z); + } + + public override ECFieldElement Negate() + { + uint[] z = Nat192.Create(); + SecP192R1Field.Negate(x, z); + return new SecP192R1FieldElement(z); + } + + public override ECFieldElement Square() + { + uint[] z = Nat192.Create(); + SecP192R1Field.Square(x, z); + return new SecP192R1FieldElement(z); + } + + public override ECFieldElement Invert() + { + uint[] z = Nat192.Create(); + SecP192R1Field.Inv(x, z); + return new SecP192R1FieldElement(z); + } + + /** + * return a sqrt root - the routine verifies that the calculation returns the right value - if + * none exists it returns null. + */ + public override ECFieldElement Sqrt() + { + // Raise this element to the exponent 2^190 - 2^62 + + uint[] x1 = this.x; + if (Nat192.IsZero(x1) || Nat192.IsOne(x1)) + return this; + + uint[] t1 = Nat192.Create(); + uint[] t2 = Nat192.Create(); + + SecP192R1Field.Square(x1, t1); + SecP192R1Field.Multiply(t1, x1, t1); + + SecP192R1Field.SquareN(t1, 2, t2); + SecP192R1Field.Multiply(t2, t1, t2); + + SecP192R1Field.SquareN(t2, 4, t1); + SecP192R1Field.Multiply(t1, t2, t1); + + SecP192R1Field.SquareN(t1, 8, t2); + SecP192R1Field.Multiply(t2, t1, t2); + + SecP192R1Field.SquareN(t2, 16, t1); + SecP192R1Field.Multiply(t1, t2, t1); + + SecP192R1Field.SquareN(t1, 32, t2); + SecP192R1Field.Multiply(t2, t1, t2); + + SecP192R1Field.SquareN(t2, 64, t1); + SecP192R1Field.Multiply(t1, t2, t1); + + SecP192R1Field.SquareN(t1, 62, t1); + SecP192R1Field.Square(t1, t2); + + return Nat192.Eq(x1, t2) ? new SecP192R1FieldElement(t1) : null; + } + + public override bool Equals(object obj) + { + return Equals(obj as SecP192R1FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecP192R1FieldElement); + } + + public virtual bool Equals(SecP192R1FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat192.Eq(x, other.x); + } + + public override int GetHashCode() + { + return Q.GetHashCode() ^ Arrays.GetHashCode(x, 0, 6); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1FieldElement.cs.meta new file mode 100644 index 000000000..a5495afc0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1a07149a2b0efd429eb787280af3bc0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1Point.cs new file mode 100644 index 000000000..3ccbc2355 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1Point.cs @@ -0,0 +1,249 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP192R1Point + : AbstractFpPoint + { + internal SecP192R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecP192R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecP192R1Point(null, AffineXCoord, AffineYCoord); + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + if (this == b) + return Twice(); + + ECCurve curve = this.Curve; + + SecP192R1FieldElement X1 = (SecP192R1FieldElement)this.RawXCoord, Y1 = (SecP192R1FieldElement)this.RawYCoord; + SecP192R1FieldElement X2 = (SecP192R1FieldElement)b.RawXCoord, Y2 = (SecP192R1FieldElement)b.RawYCoord; + + SecP192R1FieldElement Z1 = (SecP192R1FieldElement)this.RawZCoords[0]; + SecP192R1FieldElement Z2 = (SecP192R1FieldElement)b.RawZCoords[0]; + + uint c; + uint[] tt1 = Nat192.CreateExt(); + uint[] t2 = Nat192.Create(); + uint[] t3 = Nat192.Create(); + uint[] t4 = Nat192.Create(); + + bool Z1IsOne = Z1.IsOne; + uint[] U2, S2; + if (Z1IsOne) + { + U2 = X2.x; + S2 = Y2.x; + } + else + { + S2 = t3; + SecP192R1Field.Square(Z1.x, S2); + + U2 = t2; + SecP192R1Field.Multiply(S2, X2.x, U2); + + SecP192R1Field.Multiply(S2, Z1.x, S2); + SecP192R1Field.Multiply(S2, Y2.x, S2); + } + + bool Z2IsOne = Z2.IsOne; + uint[] U1, S1; + if (Z2IsOne) + { + U1 = X1.x; + S1 = Y1.x; + } + else + { + S1 = t4; + SecP192R1Field.Square(Z2.x, S1); + + U1 = tt1; + SecP192R1Field.Multiply(S1, X1.x, U1); + + SecP192R1Field.Multiply(S1, Z2.x, S1); + SecP192R1Field.Multiply(S1, Y1.x, S1); + } + + uint[] H = Nat192.Create(); + SecP192R1Field.Subtract(U1, U2, H); + + uint[] R = t2; + SecP192R1Field.Subtract(S1, S2, R); + + // Check if b == this or b == -this + if (Nat192.IsZero(H)) + { + if (Nat192.IsZero(R)) + { + // this == b, i.e. this must be doubled + return this.Twice(); + } + + // this == -b, i.e. the result is the point at infinity + return curve.Infinity; + } + + uint[] HSquared = t3; + SecP192R1Field.Square(H, HSquared); + + uint[] G = Nat192.Create(); + SecP192R1Field.Multiply(HSquared, H, G); + + uint[] V = t3; + SecP192R1Field.Multiply(HSquared, U1, V); + + SecP192R1Field.Negate(G, G); + Nat192.Mul(S1, G, tt1); + + c = Nat192.AddBothTo(V, V, G); + SecP192R1Field.Reduce32(c, G); + + SecP192R1FieldElement X3 = new SecP192R1FieldElement(t4); + SecP192R1Field.Square(R, X3.x); + SecP192R1Field.Subtract(X3.x, G, X3.x); + + SecP192R1FieldElement Y3 = new SecP192R1FieldElement(G); + SecP192R1Field.Subtract(V, X3.x, Y3.x); + SecP192R1Field.MultiplyAddToExt(Y3.x, R, tt1); + SecP192R1Field.Reduce(tt1, Y3.x); + + SecP192R1FieldElement Z3 = new SecP192R1FieldElement(H); + if (!Z1IsOne) + { + SecP192R1Field.Multiply(Z3.x, Z1.x, Z3.x); + } + if (!Z2IsOne) + { + SecP192R1Field.Multiply(Z3.x, Z2.x, Z3.x); + } + + ECFieldElement[] zs = new ECFieldElement[] { Z3 }; + + return new SecP192R1Point(curve, X3, Y3, zs); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + SecP192R1FieldElement Y1 = (SecP192R1FieldElement)this.RawYCoord; + if (Y1.IsZero) + return curve.Infinity; + + SecP192R1FieldElement X1 = (SecP192R1FieldElement)this.RawXCoord, Z1 = (SecP192R1FieldElement)this.RawZCoords[0]; + + uint c; + uint[] t1 = Nat192.Create(); + uint[] t2 = Nat192.Create(); + + uint[] Y1Squared = Nat192.Create(); + SecP192R1Field.Square(Y1.x, Y1Squared); + + uint[] T = Nat192.Create(); + SecP192R1Field.Square(Y1Squared, T); + + bool Z1IsOne = Z1.IsOne; + + uint[] Z1Squared = Z1.x; + if (!Z1IsOne) + { + Z1Squared = t2; + SecP192R1Field.Square(Z1.x, Z1Squared); + } + + SecP192R1Field.Subtract(X1.x, Z1Squared, t1); + + uint[] M = t2; + SecP192R1Field.Add(X1.x, Z1Squared, M); + SecP192R1Field.Multiply(M, t1, M); + c = Nat192.AddBothTo(M, M, M); + SecP192R1Field.Reduce32(c, M); + + uint[] S = Y1Squared; + SecP192R1Field.Multiply(Y1Squared, X1.x, S); + c = Nat.ShiftUpBits(6, S, 2, 0); + SecP192R1Field.Reduce32(c, S); + + c = Nat.ShiftUpBits(6, T, 3, 0, t1); + SecP192R1Field.Reduce32(c, t1); + + SecP192R1FieldElement X3 = new SecP192R1FieldElement(T); + SecP192R1Field.Square(M, X3.x); + SecP192R1Field.Subtract(X3.x, S, X3.x); + SecP192R1Field.Subtract(X3.x, S, X3.x); + + SecP192R1FieldElement Y3 = new SecP192R1FieldElement(S); + SecP192R1Field.Subtract(S, X3.x, Y3.x); + SecP192R1Field.Multiply(Y3.x, M, Y3.x); + SecP192R1Field.Subtract(Y3.x, t1, Y3.x); + + SecP192R1FieldElement Z3 = new SecP192R1FieldElement(M); + SecP192R1Field.Twice(Y1.x, Z3.x); + if (!Z1IsOne) + { + SecP192R1Field.Multiply(Z3.x, Z1.x, Z3.x); + } + + return new SecP192R1Point(curve, X3, Y3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this == b) + return ThreeTimes(); + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECFieldElement Y1 = this.RawYCoord; + if (Y1.IsZero) + return b; + + return Twice().Add(b); + } + + public override ECPoint ThreeTimes() + { + if (this.IsInfinity || this.RawYCoord.IsZero) + return this; + + // NOTE: Be careful about recursions between TwicePlus and ThreeTimes + return Twice().Add(this); + } + + public override ECPoint Negate() + { + if (IsInfinity) + return this; + + return new SecP192R1Point(Curve, RawXCoord, RawYCoord.Negate(), RawZCoords); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1Point.cs.meta new file mode 100644 index 000000000..ee80bb78b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP192R1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5084e06d37760694d9392014cb72ba23 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1Curve.cs new file mode 100644 index 000000000..988ee9761 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1Curve.cs @@ -0,0 +1,172 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP224K1Curve + : AbstractFpCurve + { + public static readonly BigInteger q = SecP224K1FieldElement.Q; + + private const int SECP224K1_DEFAULT_COORDS = COORD_JACOBIAN; + private const int SECP224K1_FE_INTS = 7; + private static readonly ECFieldElement[] SECP224K1_AFFINE_ZS = new ECFieldElement[] { new SecP224K1FieldElement(BigInteger.One) }; + + protected readonly SecP224K1Point m_infinity; + + public SecP224K1Curve() + : base(q) + { + this.m_infinity = new SecP224K1Point(this, null, null); + + this.m_a = FromBigInteger(BigInteger.Zero); + this.m_b = FromBigInteger(BigInteger.ValueOf(5)); + this.m_order = new BigInteger(1, Hex.DecodeStrict("010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7")); + this.m_cofactor = BigInteger.One; + this.m_coord = SECP224K1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecP224K1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_JACOBIAN: + return true; + default: + return false; + } + } + + public virtual BigInteger Q + { + get { return q; } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return q.BitLength; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecP224K1FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecP224K1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecP224K1Point(this, x, y, zs); + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + uint[] table = new uint[len * SECP224K1_FE_INTS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat224.Copy(((SecP224K1FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECP224K1_FE_INTS; + Nat224.Copy(((SecP224K1FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECP224K1_FE_INTS; + } + } + + return new SecP224K1LookupTable(this, table, len); + } + + public override ECFieldElement RandomFieldElement(SecureRandom r) + { + uint[] x = Nat224.Create(); + SecP224K1Field.Random(r, x); + return new SecP224K1FieldElement(x); + } + + public override ECFieldElement RandomFieldElementMult(SecureRandom r) + { + uint[] x = Nat224.Create(); + SecP224K1Field.RandomMult(r, x); + return new SecP224K1FieldElement(x); + } + + private class SecP224K1LookupTable + : AbstractECLookupTable + { + private readonly SecP224K1Curve m_outer; + private readonly uint[] m_table; + private readonly int m_size; + + internal SecP224K1LookupTable(SecP224K1Curve outer, uint[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + uint[] x = Nat224.Create(), y = Nat224.Create(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + uint MASK = (uint)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECP224K1_FE_INTS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECP224K1_FE_INTS + j] & MASK; + } + + pos += (SECP224K1_FE_INTS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + uint[] x = Nat224.Create(), y = Nat224.Create(); + int pos = index * SECP224K1_FE_INTS * 2; + + for (int j = 0; j < SECP224K1_FE_INTS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECP224K1_FE_INTS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(uint[] x, uint[] y) + { + return m_outer.CreateRawPoint(new SecP224K1FieldElement(x), new SecP224K1FieldElement(y), SECP224K1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1Curve.cs.meta new file mode 100644 index 000000000..6f1a155fa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e1233e0816ad5b44f9f27e6b791d2e97 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1Field.cs new file mode 100644 index 000000000..00c99dc09 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1Field.cs @@ -0,0 +1,222 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP224K1Field + { + // 2^224 - 2^32 - 2^12 - 2^11 - 2^9 - 2^7 - 2^4 - 2 - 1 + internal static readonly uint[] P = new uint[]{ 0xFFFFE56D, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF }; + private static readonly uint[] PExt = new uint[]{ 0x02C23069, 0x00003526, 0x00000001, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFCADA, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF + }; + private static readonly uint[] PExtInv = new uint[]{ 0xFD3DCF97, 0xFFFFCAD9, 0xFFFFFFFE, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00003525, 0x00000002 }; + private const uint P6 = 0xFFFFFFFF; + private const uint PExt13 = 0xFFFFFFFF; + private const uint PInv33 = 0x1A93; + + public static void Add(uint[] x, uint[] y, uint[] z) + { + uint c = Nat224.Add(x, y, z); + if (c != 0 || (z[6] == P6 && Nat224.Gte(z, P))) + { + Nat.Add33To(7, PInv33, z); + } + } + + public static void AddExt(uint[] xx, uint[] yy, uint[] zz) + { + uint c = Nat.Add(14, xx, yy, zz); + if (c != 0 || (zz[13] == PExt13 && Nat.Gte(14, zz, PExt))) + { + if (Nat.AddTo(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.IncAt(14, zz, PExtInv.Length); + } + } + } + + public static void AddOne(uint[] x, uint[] z) + { + uint c = Nat.Inc(7, x, z); + if (c != 0 || (z[6] == P6 && Nat224.Gte(z, P))) + { + Nat.Add33To(7, PInv33, z); + } + } + + public static uint[] FromBigInteger(BigInteger x) + { + uint[] z = Nat.FromBigInteger(224, x); + if (z[6] == P6 && Nat224.Gte(z, P)) + { + Nat224.SubFrom(P, z); + } + return z; + } + + public static void Half(uint[] x, uint[] z) + { + if ((x[0] & 1) == 0) + { + Nat.ShiftDownBit(7, x, 0, z); + } + else + { + uint c = Nat224.Add(x, P, z); + Nat.ShiftDownBit(7, z, c); + } + } + + public static void Inv(uint[] x, uint[] z) + { + Mod.CheckedModOddInverse(P, x, z); + } + + public static int IsZero(uint[] x) + { + uint d = 0; + for (int i = 0; i < 7; ++i) + { + d |= x[i]; + } + d = (d >> 1) | (d & 1); + return ((int)d - 1) >> 31; + } + + public static void Multiply(uint[] x, uint[] y, uint[] z) + { + uint[] tt = Nat224.CreateExt(); + Nat224.Mul(x, y, tt); + Reduce(tt, z); + } + + public static void MultiplyAddToExt(uint[] x, uint[] y, uint[] zz) + { + uint c = Nat224.MulAddTo(x, y, zz); + if (c != 0 || (zz[13] == PExt13 && Nat.Gte(14, zz, PExt))) + { + if (Nat.AddTo(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.IncAt(14, zz, PExtInv.Length); + } + } + } + + public static void Negate(uint[] x, uint[] z) + { + if (0 != IsZero(x)) + { + Nat224.Sub(P, P, z); + } + else + { + Nat224.Sub(P, x, z); + } + } + + public static void Random(SecureRandom r, uint[] z) + { + byte[] bb = new byte[7 * 4]; + do + { + r.NextBytes(bb); + Pack.LE_To_UInt32(bb, 0, z, 0, 7); + } + while (0 == Nat.LessThan(7, z, P)); + } + + public static void RandomMult(SecureRandom r, uint[] z) + { + do + { + Random(r, z); + } + while (0 != IsZero(z)); + } + + public static void Reduce(uint[] xx, uint[] z) + { + ulong cc = Nat224.Mul33Add(PInv33, xx, 7, xx, 0, z, 0); + uint c = Nat224.Mul33DWordAdd(PInv33, cc, z, 0); + + Debug.Assert(c == 0 || c == 1); + + if (c != 0 || (z[6] == P6 && Nat224.Gte(z, P))) + { + Nat.Add33To(7, PInv33, z); + } + } + + public static void Reduce32(uint x, uint[] z) + { + if ((x != 0 && Nat224.Mul33WordAdd(PInv33, x, z, 0) != 0) + || (z[6] == P6 && Nat224.Gte(z, P))) + { + Nat.Add33To(7, PInv33, z); + } + } + + public static void Square(uint[] x, uint[] z) + { + uint[] tt = Nat224.CreateExt(); + Nat224.Square(x, tt); + Reduce(tt, z); + } + + public static void SquareN(uint[] x, int n, uint[] z) + { + Debug.Assert(n > 0); + + uint[] tt = Nat224.CreateExt(); + Nat224.Square(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + Nat224.Square(z, tt); + Reduce(tt, z); + } + } + + public static void Subtract(uint[] x, uint[] y, uint[] z) + { + int c = Nat224.Sub(x, y, z); + if (c != 0) + { + Nat.Sub33From(7, PInv33, z); + } + } + + public static void SubtractExt(uint[] xx, uint[] yy, uint[] zz) + { + int c = Nat.Sub(14, xx, yy, zz); + if (c != 0) + { + if (Nat.SubFrom(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.DecAt(14, zz, PExtInv.Length); + } + } + } + + public static void Twice(uint[] x, uint[] z) + { + uint c = Nat.ShiftUpBit(7, x, 0, z); + if (c != 0 || (z[6] == P6 && Nat224.Gte(z, P))) + { + Nat.Add33To(7, PInv33, z); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1Field.cs.meta new file mode 100644 index 000000000..967cc9d27 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 13c0c039f6103dd4abcd6e56bfe8f54e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1FieldElement.cs new file mode 100644 index 000000000..377e5b393 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1FieldElement.cs @@ -0,0 +1,247 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP224K1FieldElement + : AbstractFpFieldElement + { + public static readonly BigInteger Q = new BigInteger(1, + Hex.DecodeStrict("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D")); + + // Calculated as BigInteger.Two.ModPow(Q.ShiftRight(2), Q) + private static readonly uint[] PRECOMP_POW2 = new uint[]{ 0x33bfd202, 0xdcfad133, 0x2287624a, 0xc3811ba8, + 0xa85558fc, 0x1eaef5d7, 0x8edf154c }; + + protected internal readonly uint[] x; + + public SecP224K1FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.CompareTo(Q) >= 0) + throw new ArgumentException("value invalid for SecP224K1FieldElement", "x"); + + this.x = SecP224K1Field.FromBigInteger(x); + } + + public SecP224K1FieldElement() + { + this.x = Nat224.Create(); + } + + protected internal SecP224K1FieldElement(uint[] x) + { + this.x = x; + } + + public override bool IsZero + { + get { return Nat224.IsZero(x); } + } + + public override bool IsOne + { + get { return Nat224.IsOne(x); } + } + + public override bool TestBitZero() + { + return Nat224.GetBit(x, 0) == 1; + } + + public override BigInteger ToBigInteger() + { + return Nat224.ToBigInteger(x); + } + + public override string FieldName + { + get { return "SecP224K1Field"; } + } + + public override int FieldSize + { + get { return Q.BitLength; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + uint[] z = Nat224.Create(); + SecP224K1Field.Add(x, ((SecP224K1FieldElement)b).x, z); + return new SecP224K1FieldElement(z); + } + + public override ECFieldElement AddOne() + { + uint[] z = Nat224.Create(); + SecP224K1Field.AddOne(x, z); + return new SecP224K1FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + uint[] z = Nat224.Create(); + SecP224K1Field.Subtract(x, ((SecP224K1FieldElement)b).x, z); + return new SecP224K1FieldElement(z); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + uint[] z = Nat224.Create(); + SecP224K1Field.Multiply(x, ((SecP224K1FieldElement)b).x, z); + return new SecP224K1FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + //return Multiply(b.Invert()); + uint[] z = Nat224.Create(); + SecP224K1Field.Inv(((SecP224K1FieldElement)b).x, z); + SecP224K1Field.Multiply(z, x, z); + return new SecP224K1FieldElement(z); + } + + public override ECFieldElement Negate() + { + uint[] z = Nat224.Create(); + SecP224K1Field.Negate(x, z); + return new SecP224K1FieldElement(z); + } + + public override ECFieldElement Square() + { + uint[] z = Nat224.Create(); + SecP224K1Field.Square(x, z); + return new SecP224K1FieldElement(z); + } + + public override ECFieldElement Invert() + { + uint[] z = Nat224.Create(); + SecP224K1Field.Inv(x, z); + return new SecP224K1FieldElement(z); + } + + /** + * return a sqrt root - the routine verifies that the calculation returns the right value - if + * none exists it returns null. + */ + public override ECFieldElement Sqrt() + { + /* + * Q == 8m + 5, so we use Pocklington's method for this case. + * + * First, raise this element to the exponent 2^221 - 2^29 - 2^9 - 2^8 - 2^6 - 2^4 - 2^1 (i.e. m + 1) + * + * Breaking up the exponent's binary representation into "repunits", we get: + * { 191 1s } { 1 0s } { 19 1s } { 2 0s } { 1 1s } { 1 0s } { 1 1s } { 1 0s } { 3 1s } { 1 0s } + * + * Therefore we need an addition chain containing 1, 3, 19, 191 (the lengths of the repunits) + * We use: [1], 2, [3], 4, 8, 11, [19], 23, 42, 84, 107, [191] + */ + + uint[] x1 = this.x; + if (Nat224.IsZero(x1) || Nat224.IsOne(x1)) + return this; + + uint[] x2 = Nat224.Create(); + SecP224K1Field.Square(x1, x2); + SecP224K1Field.Multiply(x2, x1, x2); + uint[] x3 = x2; + SecP224K1Field.Square(x2, x3); + SecP224K1Field.Multiply(x3, x1, x3); + uint[] x4 = Nat224.Create(); + SecP224K1Field.Square(x3, x4); + SecP224K1Field.Multiply(x4, x1, x4); + uint[] x8 = Nat224.Create(); + SecP224K1Field.SquareN(x4, 4, x8); + SecP224K1Field.Multiply(x8, x4, x8); + uint[] x11 = Nat224.Create(); + SecP224K1Field.SquareN(x8, 3, x11); + SecP224K1Field.Multiply(x11, x3, x11); + uint[] x19 = x11; + SecP224K1Field.SquareN(x11, 8, x19); + SecP224K1Field.Multiply(x19, x8, x19); + uint[] x23 = x8; + SecP224K1Field.SquareN(x19, 4, x23); + SecP224K1Field.Multiply(x23, x4, x23); + uint[] x42 = x4; + SecP224K1Field.SquareN(x23, 19, x42); + SecP224K1Field.Multiply(x42, x19, x42); + uint[] x84 = Nat224.Create(); + SecP224K1Field.SquareN(x42, 42, x84); + SecP224K1Field.Multiply(x84, x42, x84); + uint[] x107 = x42; + SecP224K1Field.SquareN(x84, 23, x107); + SecP224K1Field.Multiply(x107, x23, x107); + uint[] x191 = x23; + SecP224K1Field.SquareN(x107, 84, x191); + SecP224K1Field.Multiply(x191, x84, x191); + + uint[] t1 = x191; + SecP224K1Field.SquareN(t1, 20, t1); + SecP224K1Field.Multiply(t1, x19, t1); + SecP224K1Field.SquareN(t1, 3, t1); + SecP224K1Field.Multiply(t1, x1, t1); + SecP224K1Field.SquareN(t1, 2, t1); + SecP224K1Field.Multiply(t1, x1, t1); + SecP224K1Field.SquareN(t1, 4, t1); + SecP224K1Field.Multiply(t1, x3, t1); + SecP224K1Field.Square(t1, t1); + + uint[] t2 = x84; + SecP224K1Field.Square(t1, t2); + + if (Nat224.Eq(x1, t2)) + { + return new SecP224K1FieldElement(t1); + } + + /* + * If the first guess is incorrect, we multiply by a precomputed power of 2 to get the second guess, + * which is ((4x)^(m + 1))/2 mod Q + */ + SecP224K1Field.Multiply(t1, PRECOMP_POW2, t1); + + SecP224K1Field.Square(t1, t2); + + if (Nat224.Eq(x1, t2)) + { + return new SecP224K1FieldElement(t1); + } + + return null; + } + + public override bool Equals(object obj) + { + return Equals(obj as SecP224K1FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecP224K1FieldElement); + } + + public virtual bool Equals(SecP224K1FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat224.Eq(x, other.x); + } + + public override int GetHashCode() + { + return Q.GetHashCode() ^ Arrays.GetHashCode(x, 0, 7); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1FieldElement.cs.meta new file mode 100644 index 000000000..ca493e0ec --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50f96618b2586c142b195292b3fa8f95 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1Point.cs new file mode 100644 index 000000000..cc189cf09 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1Point.cs @@ -0,0 +1,236 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP224K1Point + : AbstractFpPoint + { + internal SecP224K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecP224K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecP224K1Point(null, AffineXCoord, AffineYCoord); + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + if (this == b) + return Twice(); + + ECCurve curve = this.Curve; + + SecP224K1FieldElement X1 = (SecP224K1FieldElement)this.RawXCoord, Y1 = (SecP224K1FieldElement)this.RawYCoord; + SecP224K1FieldElement X2 = (SecP224K1FieldElement)b.RawXCoord, Y2 = (SecP224K1FieldElement)b.RawYCoord; + + SecP224K1FieldElement Z1 = (SecP224K1FieldElement)this.RawZCoords[0]; + SecP224K1FieldElement Z2 = (SecP224K1FieldElement)b.RawZCoords[0]; + + uint c; + uint[] tt1 = Nat224.CreateExt(); + uint[] t2 = Nat224.Create(); + uint[] t3 = Nat224.Create(); + uint[] t4 = Nat224.Create(); + + bool Z1IsOne = Z1.IsOne; + uint[] U2, S2; + if (Z1IsOne) + { + U2 = X2.x; + S2 = Y2.x; + } + else + { + S2 = t3; + SecP224K1Field.Square(Z1.x, S2); + + U2 = t2; + SecP224K1Field.Multiply(S2, X2.x, U2); + + SecP224K1Field.Multiply(S2, Z1.x, S2); + SecP224K1Field.Multiply(S2, Y2.x, S2); + } + + bool Z2IsOne = Z2.IsOne; + uint[] U1, S1; + if (Z2IsOne) + { + U1 = X1.x; + S1 = Y1.x; + } + else + { + S1 = t4; + SecP224K1Field.Square(Z2.x, S1); + + U1 = tt1; + SecP224K1Field.Multiply(S1, X1.x, U1); + + SecP224K1Field.Multiply(S1, Z2.x, S1); + SecP224K1Field.Multiply(S1, Y1.x, S1); + } + + uint[] H = Nat224.Create(); + SecP224K1Field.Subtract(U1, U2, H); + + uint[] R = t2; + SecP224K1Field.Subtract(S1, S2, R); + + // Check if b == this or b == -this + if (Nat224.IsZero(H)) + { + if (Nat224.IsZero(R)) + { + // this == b, i.e. this must be doubled + return this.Twice(); + } + + // this == -b, i.e. the result is the point at infinity + return curve.Infinity; + } + + uint[] HSquared = t3; + SecP224K1Field.Square(H, HSquared); + + uint[] G = Nat224.Create(); + SecP224K1Field.Multiply(HSquared, H, G); + + uint[] V = t3; + SecP224K1Field.Multiply(HSquared, U1, V); + + SecP224K1Field.Negate(G, G); + Nat224.Mul(S1, G, tt1); + + c = Nat224.AddBothTo(V, V, G); + SecP224K1Field.Reduce32(c, G); + + SecP224K1FieldElement X3 = new SecP224K1FieldElement(t4); + SecP224K1Field.Square(R, X3.x); + SecP224K1Field.Subtract(X3.x, G, X3.x); + + SecP224K1FieldElement Y3 = new SecP224K1FieldElement(G); + SecP224K1Field.Subtract(V, X3.x, Y3.x); + SecP224K1Field.MultiplyAddToExt(Y3.x, R, tt1); + SecP224K1Field.Reduce(tt1, Y3.x); + + SecP224K1FieldElement Z3 = new SecP224K1FieldElement(H); + if (!Z1IsOne) + { + SecP224K1Field.Multiply(Z3.x, Z1.x, Z3.x); + } + if (!Z2IsOne) + { + SecP224K1Field.Multiply(Z3.x, Z2.x, Z3.x); + } + + ECFieldElement[] zs = new ECFieldElement[] { Z3 }; + + return new SecP224K1Point(curve, X3, Y3, zs); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + SecP224K1FieldElement Y1 = (SecP224K1FieldElement)this.RawYCoord; + if (Y1.IsZero) + return curve.Infinity; + + SecP224K1FieldElement X1 = (SecP224K1FieldElement)this.RawXCoord, Z1 = (SecP224K1FieldElement)this.RawZCoords[0]; + + uint c; + + uint[] Y1Squared = Nat224.Create(); + SecP224K1Field.Square(Y1.x, Y1Squared); + + uint[] T = Nat224.Create(); + SecP224K1Field.Square(Y1Squared, T); + + uint[] M = Nat224.Create(); + SecP224K1Field.Square(X1.x, M); + c = Nat224.AddBothTo(M, M, M); + SecP224K1Field.Reduce32(c, M); + + uint[] S = Y1Squared; + SecP224K1Field.Multiply(Y1Squared, X1.x, S); + c = Nat.ShiftUpBits(7, S, 2, 0); + SecP224K1Field.Reduce32(c, S); + + uint[] t1 = Nat224.Create(); + c = Nat.ShiftUpBits(7, T, 3, 0, t1); + SecP224K1Field.Reduce32(c, t1); + + SecP224K1FieldElement X3 = new SecP224K1FieldElement(T); + SecP224K1Field.Square(M, X3.x); + SecP224K1Field.Subtract(X3.x, S, X3.x); + SecP224K1Field.Subtract(X3.x, S, X3.x); + + SecP224K1FieldElement Y3 = new SecP224K1FieldElement(S); + SecP224K1Field.Subtract(S, X3.x, Y3.x); + SecP224K1Field.Multiply(Y3.x, M, Y3.x); + SecP224K1Field.Subtract(Y3.x, t1, Y3.x); + + SecP224K1FieldElement Z3 = new SecP224K1FieldElement(M); + SecP224K1Field.Twice(Y1.x, Z3.x); + if (!Z1.IsOne) + { + SecP224K1Field.Multiply(Z3.x, Z1.x, Z3.x); + } + + return new SecP224K1Point(curve, X3, Y3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this == b) + return ThreeTimes(); + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECFieldElement Y1 = this.RawYCoord; + if (Y1.IsZero) + return b; + + return Twice().Add(b); + } + + public override ECPoint ThreeTimes() + { + if (this.IsInfinity || this.RawYCoord.IsZero) + return this; + + // NOTE: Be careful about recursions between TwicePlus and ThreeTimes + return Twice().Add(this); + } + + public override ECPoint Negate() + { + if (IsInfinity) + return this; + + return new SecP224K1Point(Curve, RawXCoord, RawYCoord.Negate(), RawZCoords); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1Point.cs.meta new file mode 100644 index 000000000..59e3f9ff2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224K1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e6dc58928b3a6b349a413bceb4eda1f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1Curve.cs new file mode 100644 index 000000000..2b00bcfd8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1Curve.cs @@ -0,0 +1,175 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP224R1Curve + : AbstractFpCurve + { + public static readonly BigInteger q = SecP224R1FieldElement.Q; + + private const int SECP224R1_DEFAULT_COORDS = COORD_JACOBIAN; + private const int SECP224R1_FE_INTS = 7; + private static readonly ECFieldElement[] SECP224R1_AFFINE_ZS = new ECFieldElement[] { new SecP224R1FieldElement(BigInteger.One) }; + + protected readonly SecP224R1Point m_infinity; + + public SecP224R1Curve() + : base(q) + { + this.m_infinity = new SecP224R1Point(this, null, null); + + this.m_a = FromBigInteger(new BigInteger(1, + Hex.DecodeStrict("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE"))); + this.m_b = FromBigInteger(new BigInteger(1, + Hex.DecodeStrict("B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D")); + this.m_cofactor = BigInteger.One; + + this.m_coord = SECP224R1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecP224R1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_JACOBIAN: + return true; + default: + return false; + } + } + + public virtual BigInteger Q + { + get { return q; } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return q.BitLength; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecP224R1FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecP224R1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecP224R1Point(this, x, y, zs); + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + uint[] table = new uint[len * SECP224R1_FE_INTS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat224.Copy(((SecP224R1FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECP224R1_FE_INTS; + Nat224.Copy(((SecP224R1FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECP224R1_FE_INTS; + } + } + + return new SecP224R1LookupTable(this, table, len); + } + + public override ECFieldElement RandomFieldElement(SecureRandom r) + { + uint[] x = Nat224.Create(); + SecP224R1Field.Random(r, x); + return new SecP224R1FieldElement(x); + } + + public override ECFieldElement RandomFieldElementMult(SecureRandom r) + { + uint[] x = Nat224.Create(); + SecP224R1Field.RandomMult(r, x); + return new SecP224R1FieldElement(x); + } + + private class SecP224R1LookupTable + : AbstractECLookupTable + { + private readonly SecP224R1Curve m_outer; + private readonly uint[] m_table; + private readonly int m_size; + + internal SecP224R1LookupTable(SecP224R1Curve outer, uint[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + uint[] x = Nat224.Create(), y = Nat224.Create(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + uint MASK = (uint)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECP224R1_FE_INTS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECP224R1_FE_INTS + j] & MASK; + } + + pos += (SECP224R1_FE_INTS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + uint[] x = Nat224.Create(), y = Nat224.Create(); + int pos = index * SECP224R1_FE_INTS * 2; + + for (int j = 0; j < SECP224R1_FE_INTS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECP224R1_FE_INTS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(uint[] x, uint[] y) + { + return m_outer.CreateRawPoint(new SecP224R1FieldElement(x), new SecP224R1FieldElement(y), SECP224R1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1Curve.cs.meta new file mode 100644 index 000000000..de76047b5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb8ec695468ca8a468dc59c7ef35e719 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1Field.cs new file mode 100644 index 000000000..74f598897 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1Field.cs @@ -0,0 +1,341 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP224R1Field + { + // 2^224 - 2^96 + 1 + internal static readonly uint[] P = new uint[]{ 0x00000001, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF }; + private static readonly uint[] PExt = new uint[]{ 0x00000001, 0x00000000, 0x00000000, 0xFFFFFFFE, 0xFFFFFFFF, + 0xFFFFFFFF, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF + }; + private static readonly uint[] PExtInv = new uint[]{ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000001, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000001 }; + private const uint P6 = 0xFFFFFFFF; + private const uint PExt13 = 0xFFFFFFFF; + + public static void Add(uint[] x, uint[] y, uint[] z) + { + uint c = Nat224.Add(x, y, z); + if (c != 0 || (z[6] == P6 && Nat224.Gte(z, P))) + { + AddPInvTo(z); + } + } + + public static void AddExt(uint[] xx, uint[] yy, uint[] zz) + { + uint c = Nat.Add(14, xx, yy, zz); + if (c != 0 || (zz[13] == PExt13 && Nat.Gte(14, zz, PExt))) + { + if (Nat.AddTo(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.IncAt(14, zz, PExtInv.Length); + } + } + } + + public static void AddOne(uint[] x, uint[] z) + { + uint c = Nat.Inc(7, x, z); + if (c != 0 || (z[6] == P6 && Nat224.Gte(z, P))) + { + AddPInvTo(z); + } + } + + public static uint[] FromBigInteger(BigInteger x) + { + uint[] z = Nat.FromBigInteger(224, x); + if (z[6] == P6 && Nat224.Gte(z, P)) + { + Nat224.SubFrom(P, z); + } + return z; + } + + public static void Half(uint[] x, uint[] z) + { + if ((x[0] & 1) == 0) + { + Nat.ShiftDownBit(7, x, 0, z); + } + else + { + uint c = Nat224.Add(x, P, z); + Nat.ShiftDownBit(7, z, c); + } + } + + public static void Inv(uint[] x, uint[] z) + { + Mod.CheckedModOddInverse(P, x, z); + } + + public static int IsZero(uint[] x) + { + uint d = 0; + for (int i = 0; i < 7; ++i) + { + d |= x[i]; + } + d = (d >> 1) | (d & 1); + return ((int)d - 1) >> 31; + } + + public static void Multiply(uint[] x, uint[] y, uint[] z) + { + uint[] tt = Nat224.CreateExt(); + Nat224.Mul(x, y, tt); + Reduce(tt, z); + } + + public static void MultiplyAddToExt(uint[] x, uint[] y, uint[] zz) + { + uint c = Nat224.MulAddTo(x, y, zz); + if (c != 0 || (zz[13] == PExt13 && Nat.Gte(14, zz, PExt))) + { + if (Nat.AddTo(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.IncAt(14, zz, PExtInv.Length); + } + } + } + + public static void Negate(uint[] x, uint[] z) + { + if (0 != IsZero(x)) + { + Nat224.Sub(P, P, z); + } + else + { + Nat224.Sub(P, x, z); + } + } + + public static void Random(SecureRandom r, uint[] z) + { + byte[] bb = new byte[7 * 4]; + do + { + r.NextBytes(bb); + Pack.LE_To_UInt32(bb, 0, z, 0, 7); + } + while (0 == Nat.LessThan(7, z, P)); + } + + public static void RandomMult(SecureRandom r, uint[] z) + { + do + { + Random(r, z); + } + while (0 != IsZero(z)); + } + + public static void Reduce(uint[] xx, uint[] z) + { + long xx10 = xx[10], xx11 = xx[11], xx12 = xx[12], xx13 = xx[13]; + + const long n = 1; + + long t0 = (long)xx[7] + xx11 - n; + long t1 = (long)xx[8] + xx12; + long t2 = (long)xx[9] + xx13; + + long cc = 0; + cc += (long)xx[0] - t0; + long z0 = (uint)cc; + cc >>= 32; + cc += (long)xx[1] - t1; + z[1] = (uint)cc; + cc >>= 32; + cc += (long)xx[2] - t2; + z[2] = (uint)cc; + cc >>= 32; + cc += (long)xx[3] + t0 - xx10; + long z3 = (uint)cc; + cc >>= 32; + cc += (long)xx[4] + t1 - xx11; + z[4] = (uint)cc; + cc >>= 32; + cc += (long)xx[5] + t2 - xx12; + z[5] = (uint)cc; + cc >>= 32; + cc += (long)xx[6] + xx10 - xx13; + z[6] = (uint)cc; + cc >>= 32; + cc += n; + + Debug.Assert(cc >= 0); + + z3 += cc; + + z0 -= cc; + z[0] = (uint)z0; + cc = z0 >> 32; + if (cc != 0) + { + cc += (long)z[1]; + z[1] = (uint)cc; + cc >>= 32; + cc += (long)z[2]; + z[2] = (uint)cc; + z3 += cc >> 32; + } + z[3] = (uint)z3; + cc = z3 >> 32; + + Debug.Assert(cc == 0 || cc == 1); + + if ((cc != 0 && Nat.IncAt(7, z, 4) != 0) + || (z[6] == P6 && Nat224.Gte(z, P))) + { + AddPInvTo(z); + } + } + + public static void Reduce32(uint x, uint[] z) + { + long cc = 0; + + if (x != 0) + { + long xx07 = x; + + cc += (long)z[0] - xx07; + z[0] = (uint)cc; + cc >>= 32; + if (cc != 0) + { + cc += (long)z[1]; + z[1] = (uint)cc; + cc >>= 32; + cc += (long)z[2]; + z[2] = (uint)cc; + cc >>= 32; + } + cc += (long)z[3] + xx07; + z[3] = (uint)cc; + cc >>= 32; + + Debug.Assert(cc == 0 || cc == 1); + } + + if ((cc != 0 && Nat.IncAt(7, z, 4) != 0) + || (z[6] == P6 && Nat224.Gte(z, P))) + { + AddPInvTo(z); + } + } + + public static void Square(uint[] x, uint[] z) + { + uint[] tt = Nat224.CreateExt(); + Nat224.Square(x, tt); + Reduce(tt, z); + } + + public static void SquareN(uint[] x, int n, uint[] z) + { + Debug.Assert(n > 0); + + uint[] tt = Nat224.CreateExt(); + Nat224.Square(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + Nat224.Square(z, tt); + Reduce(tt, z); + } + } + + public static void Subtract(uint[] x, uint[] y, uint[] z) + { + int c = Nat224.Sub(x, y, z); + if (c != 0) + { + SubPInvFrom(z); + } + } + + public static void SubtractExt(uint[] xx, uint[] yy, uint[] zz) + { + int c = Nat.Sub(14, xx, yy, zz); + if (c != 0) + { + if (Nat.SubFrom(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.DecAt(14, zz, PExtInv.Length); + } + } + } + + public static void Twice(uint[] x, uint[] z) + { + uint c = Nat.ShiftUpBit(7, x, 0, z); + if (c != 0 || (z[6] == P6 && Nat224.Gte(z, P))) + { + AddPInvTo(z); + } + } + + private static void AddPInvTo(uint[] z) + { + long c = (long)z[0] - 1; + z[0] = (uint)c; + c >>= 32; + if (c != 0) + { + c += (long)z[1]; + z[1] = (uint)c; + c >>= 32; + c += (long)z[2]; + z[2] = (uint)c; + c >>= 32; + } + c += (long)z[3] + 1; + z[3] = (uint)c; + c >>= 32; + if (c != 0) + { + Nat.IncAt(7, z, 4); + } + } + + private static void SubPInvFrom(uint[] z) + { + long c = (long)z[0] + 1; + z[0] = (uint)c; + c >>= 32; + if (c != 0) + { + c += (long)z[1]; + z[1] = (uint)c; + c >>= 32; + c += (long)z[2]; + z[2] = (uint)c; + c >>= 32; + } + c += (long)z[3] - 1; + z[3] = (uint)c; + c >>= 32; + if (c != 0) + { + Nat.DecAt(7, z, 4); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1Field.cs.meta new file mode 100644 index 000000000..a1f4d2914 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: abf1e8ca92f9be6419daf86a48e31c77 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1FieldElement.cs new file mode 100644 index 000000000..2c5bf4395 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1FieldElement.cs @@ -0,0 +1,275 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP224R1FieldElement + : AbstractFpFieldElement + { + public static readonly BigInteger Q = new BigInteger(1, + Hex.DecodeStrict("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001")); + + protected internal readonly uint[] x; + + public SecP224R1FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.CompareTo(Q) >= 0) + throw new ArgumentException("value invalid for SecP224R1FieldElement", "x"); + + this.x = SecP224R1Field.FromBigInteger(x); + } + + public SecP224R1FieldElement() + { + this.x = Nat224.Create(); + } + + protected internal SecP224R1FieldElement(uint[] x) + { + this.x = x; + } + + public override bool IsZero + { + get { return Nat224.IsZero(x); } + } + + public override bool IsOne + { + get { return Nat224.IsOne(x); } + } + + public override bool TestBitZero() + { + return Nat224.GetBit(x, 0) == 1; + } + + public override BigInteger ToBigInteger() + { + return Nat224.ToBigInteger(x); + } + + public override string FieldName + { + get { return "SecP224R1Field"; } + } + + public override int FieldSize + { + get { return Q.BitLength; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + uint[] z = Nat224.Create(); + SecP224R1Field.Add(x, ((SecP224R1FieldElement)b).x, z); + return new SecP224R1FieldElement(z); + } + + public override ECFieldElement AddOne() + { + uint[] z = Nat224.Create(); + SecP224R1Field.AddOne(x, z); + return new SecP224R1FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + uint[] z = Nat224.Create(); + SecP224R1Field.Subtract(x, ((SecP224R1FieldElement)b).x, z); + return new SecP224R1FieldElement(z); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + uint[] z = Nat224.Create(); + SecP224R1Field.Multiply(x, ((SecP224R1FieldElement)b).x, z); + return new SecP224R1FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + //return Multiply(b.Invert()); + uint[] z = Nat224.Create(); + SecP224R1Field.Inv(((SecP224R1FieldElement)b).x, z); + SecP224R1Field.Multiply(z, x, z); + return new SecP224R1FieldElement(z); + } + + public override ECFieldElement Negate() + { + uint[] z = Nat224.Create(); + SecP224R1Field.Negate(x, z); + return new SecP224R1FieldElement(z); + } + + public override ECFieldElement Square() + { + uint[] z = Nat224.Create(); + SecP224R1Field.Square(x, z); + return new SecP224R1FieldElement(z); + } + + public override ECFieldElement Invert() + { + uint[] z = Nat224.Create(); + SecP224R1Field.Inv(x, z); + return new SecP224R1FieldElement(z); + } + + /** + * return a sqrt root - the routine verifies that the calculation returns the right value - if + * none exists it returns null. + */ + public override ECFieldElement Sqrt() + { + uint[] c = this.x; + if (Nat224.IsZero(c) || Nat224.IsOne(c)) + return this; + + uint[] nc = Nat224.Create(); + SecP224R1Field.Negate(c, nc); + + uint[] r = Mod.Random(SecureRandom.ArbitraryRandom, SecP224R1Field.P); + uint[] t = Nat224.Create(); + + if (!IsSquare(c)) + return null; + + while (!TrySqrt(nc, r, t)) + { + SecP224R1Field.AddOne(r, r); + } + + SecP224R1Field.Square(t, r); + + return Nat224.Eq(c, r) ? new SecP224R1FieldElement(t) : null; + } + + public override bool Equals(object obj) + { + return Equals(obj as SecP224R1FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecP224R1FieldElement); + } + + public virtual bool Equals(SecP224R1FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat224.Eq(x, other.x); + } + + public override int GetHashCode() + { + return Q.GetHashCode() ^ Arrays.GetHashCode(x, 0, 7); + } + + private static bool IsSquare(uint[] x) + { + uint[] t1 = Nat224.Create(); + uint[] t2 = Nat224.Create(); + Nat224.Copy(x, t1); + + for (int i = 0; i < 7; ++i) + { + Nat224.Copy(t1, t2); + SecP224R1Field.SquareN(t1, 1 << i, t1); + SecP224R1Field.Multiply(t1, t2, t1); + } + + SecP224R1Field.SquareN(t1, 95, t1); + return Nat224.IsOne(t1); + } + + private static void RM(uint[] nc, uint[] d0, uint[] e0, uint[] d1, uint[] e1, uint[] f1, uint[] t) + { + SecP224R1Field.Multiply(e1, e0, t); + SecP224R1Field.Multiply(t, nc, t); + SecP224R1Field.Multiply(d1, d0, f1); + SecP224R1Field.Add(f1, t, f1); + SecP224R1Field.Multiply(d1, e0, t); + Nat224.Copy(f1, d1); + SecP224R1Field.Multiply(e1, d0, e1); + SecP224R1Field.Add(e1, t, e1); + SecP224R1Field.Square(e1, f1); + SecP224R1Field.Multiply(f1, nc, f1); + } + + private static void RP(uint[] nc, uint[] d1, uint[] e1, uint[] f1, uint[] t) + { + Nat224.Copy(nc, f1); + + uint[] d0 = Nat224.Create(); + uint[] e0 = Nat224.Create(); + + for (int i = 0; i < 7; ++i) + { + Nat224.Copy(d1, d0); + Nat224.Copy(e1, e0); + + int j = 1 << i; + while (--j >= 0) + { + RS(d1, e1, f1, t); + } + + RM(nc, d0, e0, d1, e1, f1, t); + } + } + + private static void RS(uint[] d, uint[] e, uint[] f, uint[] t) + { + SecP224R1Field.Multiply(e, d, e); + SecP224R1Field.Twice(e, e); + SecP224R1Field.Square(d, t); + SecP224R1Field.Add(f, t, d); + SecP224R1Field.Multiply(f, t, f); + uint c = Nat.ShiftUpBits(7, f, 2, 0); + SecP224R1Field.Reduce32(c, f); + } + + private static bool TrySqrt(uint[] nc, uint[] r, uint[] t) + { + uint[] d1 = Nat224.Create(); + Nat224.Copy(r, d1); + uint[] e1 = Nat224.Create(); + e1[0] = 1; + uint[] f1 = Nat224.Create(); + RP(nc, d1, e1, f1, t); + + uint[] d0 = Nat224.Create(); + uint[] e0 = Nat224.Create(); + + for (int k = 1; k < 96; ++k) + { + Nat224.Copy(d1, d0); + Nat224.Copy(e1, e0); + + RS(d1, e1, f1, t); + + if (Nat224.IsZero(d1)) + { + SecP224R1Field.Inv(e0, t); + SecP224R1Field.Multiply(t, d0, t); + return true; + } + } + + return false; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1FieldElement.cs.meta new file mode 100644 index 000000000..5d58bf2e6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ef2e59a1deebf7d429a3167b9ff6fed8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1Point.cs new file mode 100644 index 000000000..caff5cd1f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1Point.cs @@ -0,0 +1,249 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP224R1Point + : AbstractFpPoint + { + internal SecP224R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecP224R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecP224R1Point(null, AffineXCoord, AffineYCoord); + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + if (this == b) + return Twice(); + + ECCurve curve = this.Curve; + + SecP224R1FieldElement X1 = (SecP224R1FieldElement)this.RawXCoord, Y1 = (SecP224R1FieldElement)this.RawYCoord; + SecP224R1FieldElement X2 = (SecP224R1FieldElement)b.RawXCoord, Y2 = (SecP224R1FieldElement)b.RawYCoord; + + SecP224R1FieldElement Z1 = (SecP224R1FieldElement)this.RawZCoords[0]; + SecP224R1FieldElement Z2 = (SecP224R1FieldElement)b.RawZCoords[0]; + + uint c; + uint[] tt1 = Nat224.CreateExt(); + uint[] t2 = Nat224.Create(); + uint[] t3 = Nat224.Create(); + uint[] t4 = Nat224.Create(); + + bool Z1IsOne = Z1.IsOne; + uint[] U2, S2; + if (Z1IsOne) + { + U2 = X2.x; + S2 = Y2.x; + } + else + { + S2 = t3; + SecP224R1Field.Square(Z1.x, S2); + + U2 = t2; + SecP224R1Field.Multiply(S2, X2.x, U2); + + SecP224R1Field.Multiply(S2, Z1.x, S2); + SecP224R1Field.Multiply(S2, Y2.x, S2); + } + + bool Z2IsOne = Z2.IsOne; + uint[] U1, S1; + if (Z2IsOne) + { + U1 = X1.x; + S1 = Y1.x; + } + else + { + S1 = t4; + SecP224R1Field.Square(Z2.x, S1); + + U1 = tt1; + SecP224R1Field.Multiply(S1, X1.x, U1); + + SecP224R1Field.Multiply(S1, Z2.x, S1); + SecP224R1Field.Multiply(S1, Y1.x, S1); + } + + uint[] H = Nat224.Create(); + SecP224R1Field.Subtract(U1, U2, H); + + uint[] R = t2; + SecP224R1Field.Subtract(S1, S2, R); + + // Check if b == this or b == -this + if (Nat224.IsZero(H)) + { + if (Nat224.IsZero(R)) + { + // this == b, i.e. this must be doubled + return this.Twice(); + } + + // this == -b, i.e. the result is the point at infinity + return curve.Infinity; + } + + uint[] HSquared = t3; + SecP224R1Field.Square(H, HSquared); + + uint[] G = Nat224.Create(); + SecP224R1Field.Multiply(HSquared, H, G); + + uint[] V = t3; + SecP224R1Field.Multiply(HSquared, U1, V); + + SecP224R1Field.Negate(G, G); + Nat224.Mul(S1, G, tt1); + + c = Nat224.AddBothTo(V, V, G); + SecP224R1Field.Reduce32(c, G); + + SecP224R1FieldElement X3 = new SecP224R1FieldElement(t4); + SecP224R1Field.Square(R, X3.x); + SecP224R1Field.Subtract(X3.x, G, X3.x); + + SecP224R1FieldElement Y3 = new SecP224R1FieldElement(G); + SecP224R1Field.Subtract(V, X3.x, Y3.x); + SecP224R1Field.MultiplyAddToExt(Y3.x, R, tt1); + SecP224R1Field.Reduce(tt1, Y3.x); + + SecP224R1FieldElement Z3 = new SecP224R1FieldElement(H); + if (!Z1IsOne) + { + SecP224R1Field.Multiply(Z3.x, Z1.x, Z3.x); + } + if (!Z2IsOne) + { + SecP224R1Field.Multiply(Z3.x, Z2.x, Z3.x); + } + + ECFieldElement[] zs = new ECFieldElement[] { Z3 }; + + return new SecP224R1Point(curve, X3, Y3, zs); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + SecP224R1FieldElement Y1 = (SecP224R1FieldElement)this.RawYCoord; + if (Y1.IsZero) + return curve.Infinity; + + SecP224R1FieldElement X1 = (SecP224R1FieldElement)this.RawXCoord, Z1 = (SecP224R1FieldElement)this.RawZCoords[0]; + + uint c; + uint[] t1 = Nat224.Create(); + uint[] t2 = Nat224.Create(); + + uint[] Y1Squared = Nat224.Create(); + SecP224R1Field.Square(Y1.x, Y1Squared); + + uint[] T = Nat224.Create(); + SecP224R1Field.Square(Y1Squared, T); + + bool Z1IsOne = Z1.IsOne; + + uint[] Z1Squared = Z1.x; + if (!Z1IsOne) + { + Z1Squared = t2; + SecP224R1Field.Square(Z1.x, Z1Squared); + } + + SecP224R1Field.Subtract(X1.x, Z1Squared, t1); + + uint[] M = t2; + SecP224R1Field.Add(X1.x, Z1Squared, M); + SecP224R1Field.Multiply(M, t1, M); + c = Nat224.AddBothTo(M, M, M); + SecP224R1Field.Reduce32(c, M); + + uint[] S = Y1Squared; + SecP224R1Field.Multiply(Y1Squared, X1.x, S); + c = Nat.ShiftUpBits(7, S, 2, 0); + SecP224R1Field.Reduce32(c, S); + + c = Nat.ShiftUpBits(7, T, 3, 0, t1); + SecP224R1Field.Reduce32(c, t1); + + SecP224R1FieldElement X3 = new SecP224R1FieldElement(T); + SecP224R1Field.Square(M, X3.x); + SecP224R1Field.Subtract(X3.x, S, X3.x); + SecP224R1Field.Subtract(X3.x, S, X3.x); + + SecP224R1FieldElement Y3 = new SecP224R1FieldElement(S); + SecP224R1Field.Subtract(S, X3.x, Y3.x); + SecP224R1Field.Multiply(Y3.x, M, Y3.x); + SecP224R1Field.Subtract(Y3.x, t1, Y3.x); + + SecP224R1FieldElement Z3 = new SecP224R1FieldElement(M); + SecP224R1Field.Twice(Y1.x, Z3.x); + if (!Z1IsOne) + { + SecP224R1Field.Multiply(Z3.x, Z1.x, Z3.x); + } + + return new SecP224R1Point(curve, X3, Y3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this == b) + return ThreeTimes(); + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECFieldElement Y1 = this.RawYCoord; + if (Y1.IsZero) + return b; + + return Twice().Add(b); + } + + public override ECPoint ThreeTimes() + { + if (this.IsInfinity || this.RawYCoord.IsZero) + return this; + + // NOTE: Be careful about recursions between TwicePlus and ThreeTimes + return Twice().Add(this); + } + + public override ECPoint Negate() + { + if (IsInfinity) + return this; + + return new SecP224R1Point(Curve, RawXCoord, RawYCoord.Negate(), RawZCoords); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1Point.cs.meta new file mode 100644 index 000000000..5eedfa28e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP224R1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df4725d3321a1f446b488fceaefa3b0d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1Curve.cs new file mode 100644 index 000000000..7d5d7e455 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1Curve.cs @@ -0,0 +1,172 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP256K1Curve + : AbstractFpCurve + { + public static readonly BigInteger q = SecP256K1FieldElement.Q; + + private const int SECP256K1_DEFAULT_COORDS = COORD_JACOBIAN; + private const int SECP256K1_FE_INTS = 8; + private static readonly ECFieldElement[] SECP256K1_AFFINE_ZS = new ECFieldElement[] { new SecP256K1FieldElement(BigInteger.One) }; + + protected readonly SecP256K1Point m_infinity; + + public SecP256K1Curve() + : base(q) + { + this.m_infinity = new SecP256K1Point(this, null, null); + + this.m_a = FromBigInteger(BigInteger.Zero); + this.m_b = FromBigInteger(BigInteger.ValueOf(7)); + this.m_order = new BigInteger(1, Hex.DecodeStrict("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141")); + this.m_cofactor = BigInteger.One; + this.m_coord = SECP256K1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecP256K1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_JACOBIAN: + return true; + default: + return false; + } + } + + public virtual BigInteger Q + { + get { return q; } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return q.BitLength; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecP256K1FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecP256K1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecP256K1Point(this, x, y, zs); + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + uint[] table = new uint[len * SECP256K1_FE_INTS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat256.Copy(((SecP256K1FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECP256K1_FE_INTS; + Nat256.Copy(((SecP256K1FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECP256K1_FE_INTS; + } + } + + return new SecP256K1LookupTable(this, table, len); + } + + public override ECFieldElement RandomFieldElement(SecureRandom r) + { + uint[] x = Nat256.Create(); + SecP256K1Field.Random(r, x); + return new SecP256K1FieldElement(x); + } + + public override ECFieldElement RandomFieldElementMult(SecureRandom r) + { + uint[] x = Nat256.Create(); + SecP256K1Field.RandomMult(r, x); + return new SecP256K1FieldElement(x); + } + + private class SecP256K1LookupTable + : AbstractECLookupTable + { + private readonly SecP256K1Curve m_outer; + private readonly uint[] m_table; + private readonly int m_size; + + internal SecP256K1LookupTable(SecP256K1Curve outer, uint[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + uint[] x = Nat256.Create(), y = Nat256.Create(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + uint MASK = (uint)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECP256K1_FE_INTS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECP256K1_FE_INTS + j] & MASK; + } + + pos += (SECP256K1_FE_INTS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + uint[] x = Nat256.Create(), y = Nat256.Create(); + int pos = index * SECP256K1_FE_INTS * 2; + + for (int j = 0; j < SECP256K1_FE_INTS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECP256K1_FE_INTS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(uint[] x, uint[] y) + { + return m_outer.CreateRawPoint(new SecP256K1FieldElement(x), new SecP256K1FieldElement(y), SECP256K1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1Curve.cs.meta new file mode 100644 index 000000000..6907cd017 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3137bda46ccd4c4bb49936df865386e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1Field.cs new file mode 100644 index 000000000..8202db8a7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1Field.cs @@ -0,0 +1,248 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP256K1Field + { + // 2^256 - 2^32 - 2^9 - 2^8 - 2^7 - 2^6 - 2^4 - 1 + internal static readonly uint[] P = new uint[]{ 0xFFFFFC2F, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; + private static readonly uint[] PExt = new uint[]{ 0x000E90A1, 0x000007A2, 0x00000001, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFF85E, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF }; + private static readonly uint[] PExtInv = new uint[]{ 0xFFF16F5F, 0xFFFFF85D, 0xFFFFFFFE, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000007A1, 0x00000002 }; + private const uint P7 = 0xFFFFFFFF; + private const uint PExt15 = 0xFFFFFFFF; + private const uint PInv33 = 0x3D1; + + public static void Add(uint[] x, uint[] y, uint[] z) + { + uint c = Nat256.Add(x, y, z); + if (c != 0 || (z[7] == P7 && Nat256.Gte(z, P))) + { + Nat.Add33To(8, PInv33, z); + } + } + + public static void AddExt(uint[] xx, uint[] yy, uint[] zz) + { + uint c = Nat.Add(16, xx, yy, zz); + if (c != 0 || (zz[15] == PExt15 && Nat.Gte(16, zz, PExt))) + { + if (Nat.AddTo(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.IncAt(16, zz, PExtInv.Length); + } + } + } + + public static void AddOne(uint[] x, uint[] z) + { + uint c = Nat.Inc(8, x, z); + if (c != 0 || (z[7] == P7 && Nat256.Gte(z, P))) + { + Nat.Add33To(8, PInv33, z); + } + } + + public static uint[] FromBigInteger(BigInteger x) + { + uint[] z = Nat.FromBigInteger(256, x); + if (z[7] == P7 && Nat256.Gte(z, P)) + { + Nat256.SubFrom(P, z); + } + return z; + } + + public static void Half(uint[] x, uint[] z) + { + if ((x[0] & 1) == 0) + { + Nat.ShiftDownBit(8, x, 0, z); + } + else + { + uint c = Nat256.Add(x, P, z); + Nat.ShiftDownBit(8, z, c); + } + } + + public static void Inv(uint[] x, uint[] z) + { + Mod.CheckedModOddInverse(P, x, z); + } + + public static int IsZero(uint[] x) + { + uint d = 0; + for (int i = 0; i < 8; ++i) + { + d |= x[i]; + } + d = (d >> 1) | (d & 1); + return ((int)d - 1) >> 31; + } + + public static void Multiply(uint[] x, uint[] y, uint[] z) + { + uint[] tt = Nat256.CreateExt(); + Nat256.Mul(x, y, tt); + Reduce(tt, z); + } + + public static void Multiply(uint[] x, uint[] y, uint[] z, uint[] tt) + { + Nat256.Mul(x, y, tt); + Reduce(tt, z); + } + + public static void MultiplyAddToExt(uint[] x, uint[] y, uint[] zz) + { + uint c = Nat256.MulAddTo(x, y, zz); + if (c != 0 || (zz[15] == PExt15 && Nat.Gte(16, zz, PExt))) + { + if (Nat.AddTo(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.IncAt(16, zz, PExtInv.Length); + } + } + } + + public static void Negate(uint[] x, uint[] z) + { + if (0 != IsZero(x)) + { + Nat256.Sub(P, P, z); + } + else + { + Nat256.Sub(P, x, z); + } + } + + public static void Random(SecureRandom r, uint[] z) + { + byte[] bb = new byte[8 * 4]; + do + { + r.NextBytes(bb); + Pack.LE_To_UInt32(bb, 0, z, 0, 8); + } + while (0 == Nat.LessThan(8, z, P)); + } + + public static void RandomMult(SecureRandom r, uint[] z) + { + do + { + Random(r, z); + } + while (0 != IsZero(z)); + } + + public static void Reduce(uint[] xx, uint[] z) + { + ulong cc = Nat256.Mul33Add(PInv33, xx, 8, xx, 0, z, 0); + uint c = Nat256.Mul33DWordAdd(PInv33, cc, z, 0); + + Debug.Assert(c == 0 || c == 1); + + if (c != 0 || (z[7] == P7 && Nat256.Gte(z, P))) + { + Nat.Add33To(8, PInv33, z); + } + } + + public static void Reduce32(uint x, uint[] z) + { + if ((x != 0 && Nat256.Mul33WordAdd(PInv33, x, z, 0) != 0) + || (z[7] == P7 && Nat256.Gte(z, P))) + { + Nat.Add33To(8, PInv33, z); + } + } + + public static void Square(uint[] x, uint[] z) + { + uint[] tt = Nat256.CreateExt(); + Nat256.Square(x, tt); + Reduce(tt, z); + } + + public static void Square(uint[] x, uint[] z, uint[] tt) + { + Nat256.Square(x, tt); + Reduce(tt, z); + } + + public static void SquareN(uint[] x, int n, uint[] z) + { + Debug.Assert(n > 0); + + uint[] tt = Nat256.CreateExt(); + Nat256.Square(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + Nat256.Square(z, tt); + Reduce(tt, z); + } + } + + public static void SquareN(uint[] x, int n, uint[] z, uint[] tt) + { + Debug.Assert(n > 0); + + Nat256.Square(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + Nat256.Square(z, tt); + Reduce(tt, z); + } + } + + public static void Subtract(uint[] x, uint[] y, uint[] z) + { + int c = Nat256.Sub(x, y, z); + if (c != 0) + { + Nat.Sub33From(8, PInv33, z); + } + } + + public static void SubtractExt(uint[] xx, uint[] yy, uint[] zz) + { + int c = Nat.Sub(16, xx, yy, zz); + if (c != 0) + { + if (Nat.SubFrom(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.DecAt(16, zz, PExtInv.Length); + } + } + } + + public static void Twice(uint[] x, uint[] z) + { + uint c = Nat.ShiftUpBit(8, x, 0, z); + if (c != 0 || (z[7] == P7 && Nat256.Gte(z, P))) + { + Nat.Add33To(8, PInv33, z); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1Field.cs.meta new file mode 100644 index 000000000..4e1047c4d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5ed5c34ec10613418e2f1623a468b12 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1FieldElement.cs new file mode 100644 index 000000000..89cac693b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1FieldElement.cs @@ -0,0 +1,220 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP256K1FieldElement + : AbstractFpFieldElement + { + public static readonly BigInteger Q = new BigInteger(1, + Hex.DecodeStrict("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F")); + + protected internal readonly uint[] x; + + public SecP256K1FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.CompareTo(Q) >= 0) + throw new ArgumentException("value invalid for SecP256K1FieldElement", "x"); + + this.x = SecP256K1Field.FromBigInteger(x); + } + + public SecP256K1FieldElement() + { + this.x = Nat256.Create(); + } + + protected internal SecP256K1FieldElement(uint[] x) + { + this.x = x; + } + + public override bool IsZero + { + get { return Nat256.IsZero(x); } + } + + public override bool IsOne + { + get { return Nat256.IsOne(x); } + } + + public override bool TestBitZero() + { + return Nat256.GetBit(x, 0) == 1; + } + + public override BigInteger ToBigInteger() + { + return Nat256.ToBigInteger(x); + } + + public override string FieldName + { + get { return "SecP256K1Field"; } + } + + public override int FieldSize + { + get { return Q.BitLength; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + uint[] z = Nat256.Create(); + SecP256K1Field.Add(x, ((SecP256K1FieldElement)b).x, z); + return new SecP256K1FieldElement(z); + } + + public override ECFieldElement AddOne() + { + uint[] z = Nat256.Create(); + SecP256K1Field.AddOne(x, z); + return new SecP256K1FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + uint[] z = Nat256.Create(); + SecP256K1Field.Subtract(x, ((SecP256K1FieldElement)b).x, z); + return new SecP256K1FieldElement(z); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + uint[] z = Nat256.Create(); + SecP256K1Field.Multiply(x, ((SecP256K1FieldElement)b).x, z); + return new SecP256K1FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + //return Multiply(b.Invert()); + uint[] z = Nat256.Create(); + SecP256K1Field.Inv(((SecP256K1FieldElement)b).x, z); + SecP256K1Field.Multiply(z, x, z); + return new SecP256K1FieldElement(z); + } + + public override ECFieldElement Negate() + { + uint[] z = Nat256.Create(); + SecP256K1Field.Negate(x, z); + return new SecP256K1FieldElement(z); + } + + public override ECFieldElement Square() + { + uint[] z = Nat256.Create(); + SecP256K1Field.Square(x, z); + return new SecP256K1FieldElement(z); + } + + public override ECFieldElement Invert() + { + uint[] z = Nat256.Create(); + SecP256K1Field.Inv(x, z); + return new SecP256K1FieldElement(z); + } + + /** + * return a sqrt root - the routine verifies that the calculation returns the right value - if + * none exists it returns null. + */ + public override ECFieldElement Sqrt() + { + /* + * Raise this element to the exponent 2^254 - 2^30 - 2^7 - 2^6 - 2^5 - 2^4 - 2^2 + * + * Breaking up the exponent's binary representation into "repunits", we get: + * { 223 1s } { 1 0s } { 22 1s } { 4 0s } { 2 1s } { 2 0s} + * + * Therefore we need an addition chain containing 2, 22, 223 (the lengths of the repunits) + * We use: 1, [2], 3, 6, 9, 11, [22], 44, 88, 176, 220, [223] + */ + + uint[] x1 = this.x; + if (Nat256.IsZero(x1) || Nat256.IsOne(x1)) + return this; + + uint[] tt0 = Nat256.CreateExt(); + + uint[] x2 = Nat256.Create(); + SecP256K1Field.Square(x1, x2, tt0); + SecP256K1Field.Multiply(x2, x1, x2, tt0); + uint[] x3 = Nat256.Create(); + SecP256K1Field.Square(x2, x3, tt0); + SecP256K1Field.Multiply(x3, x1, x3, tt0); + uint[] x6 = Nat256.Create(); + SecP256K1Field.SquareN(x3, 3, x6, tt0); + SecP256K1Field.Multiply(x6, x3, x6, tt0); + uint[] x9 = x6; + SecP256K1Field.SquareN(x6, 3, x9, tt0); + SecP256K1Field.Multiply(x9, x3, x9, tt0); + uint[] x11 = x9; + SecP256K1Field.SquareN(x9, 2, x11, tt0); + SecP256K1Field.Multiply(x11, x2, x11, tt0); + uint[] x22 = Nat256.Create(); + SecP256K1Field.SquareN(x11, 11, x22, tt0); + SecP256K1Field.Multiply(x22, x11, x22, tt0); + uint[] x44 = x11; + SecP256K1Field.SquareN(x22, 22, x44, tt0); + SecP256K1Field.Multiply(x44, x22, x44, tt0); + uint[] x88 = Nat256.Create(); + SecP256K1Field.SquareN(x44, 44, x88, tt0); + SecP256K1Field.Multiply(x88, x44, x88, tt0); + uint[] x176 = Nat256.Create(); + SecP256K1Field.SquareN(x88, 88, x176, tt0); + SecP256K1Field.Multiply(x176, x88, x176, tt0); + uint[] x220 = x88; + SecP256K1Field.SquareN(x176, 44, x220, tt0); + SecP256K1Field.Multiply(x220, x44, x220, tt0); + uint[] x223 = x44; + SecP256K1Field.SquareN(x220, 3, x223, tt0); + SecP256K1Field.Multiply(x223, x3, x223, tt0); + + uint[] t1 = x223; + SecP256K1Field.SquareN(t1, 23, t1, tt0); + SecP256K1Field.Multiply(t1, x22, t1, tt0); + SecP256K1Field.SquareN(t1, 6, t1, tt0); + SecP256K1Field.Multiply(t1, x2, t1, tt0); + SecP256K1Field.SquareN(t1, 2, t1, tt0); + + uint[] t2 = x2; + SecP256K1Field.Square(t1, t2, tt0); + + return Nat256.Eq(x1, t2) ? new SecP256K1FieldElement(t1) : null; + } + + public override bool Equals(object obj) + { + return Equals(obj as SecP256K1FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecP256K1FieldElement); + } + + public virtual bool Equals(SecP256K1FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat256.Eq(x, other.x); + } + + public override int GetHashCode() + { + return Q.GetHashCode() ^ Arrays.GetHashCode(x, 0, 8); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1FieldElement.cs.meta new file mode 100644 index 000000000..a0858a90a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f8852f71d5b64f439a369f3df96cd2c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1Point.cs new file mode 100644 index 000000000..f2aa6d281 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1Point.cs @@ -0,0 +1,238 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP256K1Point + : AbstractFpPoint + { + internal SecP256K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecP256K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecP256K1Point(null, AffineXCoord, AffineYCoord); + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + if (this == b) + return Twice(); + + ECCurve curve = this.Curve; + + SecP256K1FieldElement X1 = (SecP256K1FieldElement)this.RawXCoord, Y1 = (SecP256K1FieldElement)this.RawYCoord; + SecP256K1FieldElement X2 = (SecP256K1FieldElement)b.RawXCoord, Y2 = (SecP256K1FieldElement)b.RawYCoord; + + SecP256K1FieldElement Z1 = (SecP256K1FieldElement)this.RawZCoords[0]; + SecP256K1FieldElement Z2 = (SecP256K1FieldElement)b.RawZCoords[0]; + + uint c; + uint[] tt0 = Nat256.CreateExt(); + uint[] tt1 = Nat256.CreateExt(); + uint[] t2 = Nat256.Create(); + uint[] t3 = Nat256.Create(); + uint[] t4 = Nat256.Create(); + + bool Z1IsOne = Z1.IsOne; + uint[] U2, S2; + if (Z1IsOne) + { + U2 = X2.x; + S2 = Y2.x; + } + else + { + S2 = t3; + SecP256K1Field.Square(Z1.x, S2, tt0); + + U2 = t2; + SecP256K1Field.Multiply(S2, X2.x, U2, tt0); + + SecP256K1Field.Multiply(S2, Z1.x, S2, tt0); + SecP256K1Field.Multiply(S2, Y2.x, S2, tt0); + } + + bool Z2IsOne = Z2.IsOne; + uint[] U1, S1; + if (Z2IsOne) + { + U1 = X1.x; + S1 = Y1.x; + } + else + { + S1 = t4; + SecP256K1Field.Square(Z2.x, S1, tt0); + + U1 = tt1; + SecP256K1Field.Multiply(S1, X1.x, U1, tt0); + + SecP256K1Field.Multiply(S1, Z2.x, S1, tt0); + SecP256K1Field.Multiply(S1, Y1.x, S1, tt0); + } + + uint[] H = Nat256.Create(); + SecP256K1Field.Subtract(U1, U2, H); + + uint[] R = t2; + SecP256K1Field.Subtract(S1, S2, R); + + // Check if b == this or b == -this + if (Nat256.IsZero(H)) + { + if (Nat256.IsZero(R)) + { + // this == b, i.e. this must be doubled + return this.Twice(); + } + + // this == -b, i.e. the result is the point at infinity + return curve.Infinity; + } + + uint[] HSquared = t3; + SecP256K1Field.Square(H, HSquared, tt0); + + uint[] G = Nat256.Create(); + SecP256K1Field.Multiply(HSquared, H, G, tt0); + + uint[] V = t3; + SecP256K1Field.Multiply(HSquared, U1, V, tt0); + + SecP256K1Field.Negate(G, G); + Nat256.Mul(S1, G, tt1); + + c = Nat256.AddBothTo(V, V, G); + SecP256K1Field.Reduce32(c, G); + + SecP256K1FieldElement X3 = new SecP256K1FieldElement(t4); + SecP256K1Field.Square(R, X3.x, tt0); + SecP256K1Field.Subtract(X3.x, G, X3.x); + + SecP256K1FieldElement Y3 = new SecP256K1FieldElement(G); + SecP256K1Field.Subtract(V, X3.x, Y3.x); + SecP256K1Field.MultiplyAddToExt(Y3.x, R, tt1); + SecP256K1Field.Reduce(tt1, Y3.x); + + SecP256K1FieldElement Z3 = new SecP256K1FieldElement(H); + if (!Z1IsOne) + { + SecP256K1Field.Multiply(Z3.x, Z1.x, Z3.x, tt0); + } + if (!Z2IsOne) + { + SecP256K1Field.Multiply(Z3.x, Z2.x, Z3.x, tt0); + } + + ECFieldElement[] zs = new ECFieldElement[] { Z3 }; + + return new SecP256K1Point(curve, X3, Y3, zs); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + SecP256K1FieldElement Y1 = (SecP256K1FieldElement)this.RawYCoord; + if (Y1.IsZero) + return curve.Infinity; + + SecP256K1FieldElement X1 = (SecP256K1FieldElement)this.RawXCoord, Z1 = (SecP256K1FieldElement)this.RawZCoords[0]; + + uint c; + uint[] tt0 = Nat256.CreateExt(); + + uint[] Y1Squared = Nat256.Create(); + SecP256K1Field.Square(Y1.x, Y1Squared, tt0); + + uint[] T = Nat256.Create(); + SecP256K1Field.Square(Y1Squared, T, tt0); + + uint[] M = Nat256.Create(); + SecP256K1Field.Square(X1.x, M, tt0); + c = Nat256.AddBothTo(M, M, M); + SecP256K1Field.Reduce32(c, M); + + uint[] S = Y1Squared; + SecP256K1Field.Multiply(Y1Squared, X1.x, S, tt0); + c = Nat.ShiftUpBits(8, S, 2, 0); + SecP256K1Field.Reduce32(c, S); + + uint[] t1 = Nat256.Create(); + c = Nat.ShiftUpBits(8, T, 3, 0, t1); + SecP256K1Field.Reduce32(c, t1); + + SecP256K1FieldElement X3 = new SecP256K1FieldElement(T); + SecP256K1Field.Square(M, X3.x, tt0); + SecP256K1Field.Subtract(X3.x, S, X3.x); + SecP256K1Field.Subtract(X3.x, S, X3.x); + + SecP256K1FieldElement Y3 = new SecP256K1FieldElement(S); + SecP256K1Field.Subtract(S, X3.x, Y3.x); + SecP256K1Field.Multiply(Y3.x, M, Y3.x, tt0); + SecP256K1Field.Subtract(Y3.x, t1, Y3.x); + + SecP256K1FieldElement Z3 = new SecP256K1FieldElement(M); + SecP256K1Field.Twice(Y1.x, Z3.x); + if (!Z1.IsOne) + { + SecP256K1Field.Multiply(Z3.x, Z1.x, Z3.x, tt0); + } + + return new SecP256K1Point(curve, X3, Y3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this == b) + return ThreeTimes(); + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECFieldElement Y1 = this.RawYCoord; + if (Y1.IsZero) + return b; + + return Twice().Add(b); + } + + public override ECPoint ThreeTimes() + { + if (this.IsInfinity || this.RawYCoord.IsZero) + return this; + + // NOTE: Be careful about recursions between TwicePlus and ThreeTimes + return Twice().Add(this); + } + + public override ECPoint Negate() + { + if (IsInfinity) + return this; + + return new SecP256K1Point(Curve, RawXCoord, RawYCoord.Negate(), RawZCoords); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1Point.cs.meta new file mode 100644 index 000000000..571c01a1a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256K1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ee1f2beef4a01324fa3a7977b6e572cd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1Curve.cs new file mode 100644 index 000000000..cea7048e1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1Curve.cs @@ -0,0 +1,174 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP256R1Curve + : AbstractFpCurve + { + public static readonly BigInteger q = SecP256R1FieldElement.Q; + + private const int SECP256R1_DEFAULT_COORDS = COORD_JACOBIAN; + private const int SECP256R1_FE_INTS = 8; + private static readonly ECFieldElement[] SECP256R1_AFFINE_ZS = new ECFieldElement[] { new SecP256R1FieldElement(BigInteger.One) }; + + protected readonly SecP256R1Point m_infinity; + + public SecP256R1Curve() + : base(q) + { + this.m_infinity = new SecP256R1Point(this, null, null); + + this.m_a = FromBigInteger(new BigInteger(1, + Hex.DecodeStrict("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC"))); + this.m_b = FromBigInteger(new BigInteger(1, + Hex.DecodeStrict("5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551")); + this.m_cofactor = BigInteger.One; + this.m_coord = SECP256R1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecP256R1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_JACOBIAN: + return true; + default: + return false; + } + } + + public virtual BigInteger Q + { + get { return q; } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return q.BitLength; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecP256R1FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecP256R1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecP256R1Point(this, x, y, zs); + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + uint[] table = new uint[len * SECP256R1_FE_INTS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat256.Copy(((SecP256R1FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECP256R1_FE_INTS; + Nat256.Copy(((SecP256R1FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECP256R1_FE_INTS; + } + } + + return new SecP256R1LookupTable(this, table, len); + } + + public override ECFieldElement RandomFieldElement(SecureRandom r) + { + uint[] x = Nat256.Create(); + SecP256R1Field.Random(r, x); + return new SecP256R1FieldElement(x); + } + + public override ECFieldElement RandomFieldElementMult(SecureRandom r) + { + uint[] x = Nat256.Create(); + SecP256R1Field.RandomMult(r, x); + return new SecP256R1FieldElement(x); + } + + private class SecP256R1LookupTable + : AbstractECLookupTable + { + private readonly SecP256R1Curve m_outer; + private readonly uint[] m_table; + private readonly int m_size; + + internal SecP256R1LookupTable(SecP256R1Curve outer, uint[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + uint[] x = Nat256.Create(), y = Nat256.Create(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + uint MASK = (uint)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECP256R1_FE_INTS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECP256R1_FE_INTS + j] & MASK; + } + + pos += (SECP256R1_FE_INTS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + uint[] x = Nat256.Create(), y = Nat256.Create(); + int pos = index * SECP256R1_FE_INTS * 2; + + for (int j = 0; j < SECP256R1_FE_INTS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECP256R1_FE_INTS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(uint[] x, uint[] y) + { + return m_outer.CreateRawPoint(new SecP256R1FieldElement(x), new SecP256R1FieldElement(y), SECP256R1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1Curve.cs.meta new file mode 100644 index 000000000..bc730b17a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 082371a7f8084154d966a0083ae04fd7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1Field.cs new file mode 100644 index 000000000..9ddbe5f72 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1Field.cs @@ -0,0 +1,380 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP256R1Field + { + // 2^256 - 2^224 + 2^192 + 2^96 - 1 + internal static readonly uint[] P = new uint[]{ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000001, 0xFFFFFFFF }; + private static readonly uint[] PExt = new uint[]{ 0x00000001, 0x00000000, 0x00000000, 0xFFFFFFFE, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFE, 0x00000001, 0xFFFFFFFE, 0x00000001, 0xFFFFFFFE, 0x00000001, 0x00000001, 0xFFFFFFFE, + 0x00000002, 0xFFFFFFFE }; + private const uint P7 = 0xFFFFFFFF; + private const uint PExt15 = 0xFFFFFFFE; + + public static void Add(uint[] x, uint[] y, uint[] z) + { + uint c = Nat256.Add(x, y, z); + if (c != 0 || (z[7] == P7 && Nat256.Gte(z, P))) + { + AddPInvTo(z); + } + } + + public static void AddExt(uint[] xx, uint[] yy, uint[] zz) + { + uint c = Nat.Add(16, xx, yy, zz); + if (c != 0 || (zz[15] >= PExt15 && Nat.Gte(16, zz, PExt))) + { + Nat.SubFrom(16, PExt, zz); + } + } + + public static void AddOne(uint[] x, uint[] z) + { + uint c = Nat.Inc(8, x, z); + if (c != 0 || (z[7] == P7 && Nat256.Gte(z, P))) + { + AddPInvTo(z); + } + } + + public static uint[] FromBigInteger(BigInteger x) + { + uint[] z = Nat.FromBigInteger(256, x); + if (z[7] == P7 && Nat256.Gte(z, P)) + { + Nat256.SubFrom(P, z); + } + return z; + } + + public static void Half(uint[] x, uint[] z) + { + if ((x[0] & 1) == 0) + { + Nat.ShiftDownBit(8, x, 0, z); + } + else + { + uint c = Nat256.Add(x, P, z); + Nat.ShiftDownBit(8, z, c); + } + } + + public static void Inv(uint[] x, uint[] z) + { + Mod.CheckedModOddInverse(P, x, z); + } + + public static int IsZero(uint[] x) + { + uint d = 0; + for (int i = 0; i < 8; ++i) + { + d |= x[i]; + } + d = (d >> 1) | (d & 1); + return ((int)d - 1) >> 31; + } + + public static void Multiply(uint[] x, uint[] y, uint[] z) + { + uint[] tt = Nat256.CreateExt(); + Nat256.Mul(x, y, tt); + Reduce(tt, z); + } + + public static void Multiply(uint[] x, uint[] y, uint[] z, uint[] tt) + { + Nat256.Mul(x, y, tt); + Reduce(tt, z); + } + + public static void MultiplyAddToExt(uint[] x, uint[] y, uint[] zz) + { + uint c = Nat256.MulAddTo(x, y, zz); + if (c != 0 || (zz[15] >= PExt15 && Nat.Gte(16, zz, PExt))) + { + Nat.SubFrom(16, PExt, zz); + } + } + + public static void Negate(uint[] x, uint[] z) + { + if (0 != IsZero(x)) + { + Nat256.Sub(P, P, z); + } + else + { + Nat256.Sub(P, x, z); + } + } + + public static void Random(SecureRandom r, uint[] z) + { + byte[] bb = new byte[8 * 4]; + do + { + r.NextBytes(bb); + Pack.LE_To_UInt32(bb, 0, z, 0, 8); + } + while (0 == Nat.LessThan(8, z, P)); + } + + public static void RandomMult(SecureRandom r, uint[] z) + { + do + { + Random(r, z); + } + while (0 != IsZero(z)); + } + + public static void Reduce(uint[] xx, uint[] z) + { + long xx08 = xx[8], xx09 = xx[9], xx10 = xx[10], xx11 = xx[11]; + long xx12 = xx[12], xx13 = xx[13], xx14 = xx[14], xx15 = xx[15]; + + const long n = 6; + + xx08 -= n; + + long t0 = xx08 + xx09; + long t1 = xx09 + xx10; + long t2 = xx10 + xx11 - xx15; + long t3 = xx11 + xx12; + long t4 = xx12 + xx13; + long t5 = xx13 + xx14; + long t6 = xx14 + xx15; + long t7 = t5 - t0; + + long cc = 0; + cc += (long)xx[0] - t3 - t7; + z[0] = (uint)cc; + cc >>= 32; + cc += (long)xx[1] + t1 - t4 - t6; + z[1] = (uint)cc; + cc >>= 32; + cc += (long)xx[2] + t2 - t5; + z[2] = (uint)cc; + cc >>= 32; + cc += (long)xx[3] + (t3 << 1) + t7 - t6; + z[3] = (uint)cc; + cc >>= 32; + cc += (long)xx[4] + (t4 << 1) + xx14 - t1; + z[4] = (uint)cc; + cc >>= 32; + cc += (long)xx[5] + (t5 << 1) - t2; + z[5] = (uint)cc; + cc >>= 32; + cc += (long)xx[6] + (t6 << 1) + t7; + z[6] = (uint)cc; + cc >>= 32; + cc += (long)xx[7] + (xx15 << 1) + xx08 - t2 - t4; + z[7] = (uint)cc; + cc >>= 32; + cc += n; + + Debug.Assert(cc >= 0); + + Reduce32((uint)cc, z); + } + + public static void Reduce32(uint x, uint[] z) + { + long cc = 0; + + if (x != 0) + { + long xx08 = x; + + cc += (long)z[0] + xx08; + z[0] = (uint)cc; + cc >>= 32; + if (cc != 0) + { + cc += (long)z[1]; + z[1] = (uint)cc; + cc >>= 32; + cc += (long)z[2]; + z[2] = (uint)cc; + cc >>= 32; + } + cc += (long)z[3] - xx08; + z[3] = (uint)cc; + cc >>= 32; + if (cc != 0) + { + cc += (long)z[4]; + z[4] = (uint)cc; + cc >>= 32; + cc += (long)z[5]; + z[5] = (uint)cc; + cc >>= 32; + } + cc += (long)z[6] - xx08; + z[6] = (uint)cc; + cc >>= 32; + cc += (long)z[7] + xx08; + z[7] = (uint)cc; + cc >>= 32; + + Debug.Assert(cc == 0 || cc == 1); + } + + if (cc != 0 || (z[7] == P7 && Nat256.Gte(z, P))) + { + AddPInvTo(z); + } + } + + public static void Square(uint[] x, uint[] z) + { + uint[] tt = Nat256.CreateExt(); + Nat256.Square(x, tt); + Reduce(tt, z); + } + + public static void Square(uint[] x, uint[] z, uint[] tt) + { + Nat256.Square(x, tt); + Reduce(tt, z); + } + + public static void SquareN(uint[] x, int n, uint[] z) + { + Debug.Assert(n > 0); + + uint[] tt = Nat256.CreateExt(); + Nat256.Square(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + Nat256.Square(z, tt); + Reduce(tt, z); + } + } + + public static void SquareN(uint[] x, int n, uint[] z, uint[] tt) + { + Debug.Assert(n > 0); + + Nat256.Square(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + Nat256.Square(z, tt); + Reduce(tt, z); + } + } + + public static void Subtract(uint[] x, uint[] y, uint[] z) + { + int c = Nat256.Sub(x, y, z); + if (c != 0) + { + SubPInvFrom(z); + } + } + + public static void SubtractExt(uint[] xx, uint[] yy, uint[] zz) + { + int c = Nat.Sub(16, xx, yy, zz); + if (c != 0) + { + Nat.AddTo(16, PExt, zz); + } + } + + public static void Twice(uint[] x, uint[] z) + { + uint c = Nat.ShiftUpBit(8, x, 0, z); + if (c != 0 || (z[7] == P7 && Nat256.Gte(z, P))) + { + AddPInvTo(z); + } + } + + private static void AddPInvTo(uint[] z) + { + long c = (long)z[0] + 1; + z[0] = (uint)c; + c >>= 32; + if (c != 0) + { + c += (long)z[1]; + z[1] = (uint)c; + c >>= 32; + c += (long)z[2]; + z[2] = (uint)c; + c >>= 32; + } + c += (long)z[3] - 1; + z[3] = (uint)c; + c >>= 32; + if (c != 0) + { + c += (long)z[4]; + z[4] = (uint)c; + c >>= 32; + c += (long)z[5]; + z[5] = (uint)c; + c >>= 32; + } + c += (long)z[6] - 1; + z[6] = (uint)c; + c >>= 32; + c += (long)z[7] + 1; + z[7] = (uint)c; + //c >>= 32; + } + + private static void SubPInvFrom(uint[] z) + { + long c = (long)z[0] - 1; + z[0] = (uint)c; + c >>= 32; + if (c != 0) + { + c += (long)z[1]; + z[1] = (uint)c; + c >>= 32; + c += (long)z[2]; + z[2] = (uint)c; + c >>= 32; + } + c += (long)z[3] + 1; + z[3] = (uint)c; + c >>= 32; + if (c != 0) + { + c += (long)z[4]; + z[4] = (uint)c; + c >>= 32; + c += (long)z[5]; + z[5] = (uint)c; + c >>= 32; + } + c += (long)z[6] + 1; + z[6] = (uint)c; + c >>= 32; + c += (long)z[7] - 1; + z[7] = (uint)c; + //c >>= 32; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1Field.cs.meta new file mode 100644 index 000000000..c5965b7dc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 47c20e25c05835646935a6ff01c312d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1FieldElement.cs new file mode 100644 index 000000000..a3f3f5e64 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1FieldElement.cs @@ -0,0 +1,194 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP256R1FieldElement + : AbstractFpFieldElement + { + public static readonly BigInteger Q = new BigInteger(1, + Hex.DecodeStrict("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF")); + + protected internal readonly uint[] x; + + public SecP256R1FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.CompareTo(Q) >= 0) + throw new ArgumentException("value invalid for SecP256R1FieldElement", "x"); + + this.x = SecP256R1Field.FromBigInteger(x); + } + + public SecP256R1FieldElement() + { + this.x = Nat256.Create(); + } + + protected internal SecP256R1FieldElement(uint[] x) + { + this.x = x; + } + + public override bool IsZero + { + get { return Nat256.IsZero(x); } + } + + public override bool IsOne + { + get { return Nat256.IsOne(x); } + } + + public override bool TestBitZero() + { + return Nat256.GetBit(x, 0) == 1; + } + + public override BigInteger ToBigInteger() + { + return Nat256.ToBigInteger(x); + } + + public override string FieldName + { + get { return "SecP256R1Field"; } + } + + public override int FieldSize + { + get { return Q.BitLength; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + uint[] z = Nat256.Create(); + SecP256R1Field.Add(x, ((SecP256R1FieldElement)b).x, z); + return new SecP256R1FieldElement(z); + } + + public override ECFieldElement AddOne() + { + uint[] z = Nat256.Create(); + SecP256R1Field.AddOne(x, z); + return new SecP256R1FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + uint[] z = Nat256.Create(); + SecP256R1Field.Subtract(x, ((SecP256R1FieldElement)b).x, z); + return new SecP256R1FieldElement(z); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + uint[] z = Nat256.Create(); + SecP256R1Field.Multiply(x, ((SecP256R1FieldElement)b).x, z); + return new SecP256R1FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + //return Multiply(b.Invert()); + uint[] z = Nat256.Create(); + SecP256R1Field.Inv(((SecP256R1FieldElement)b).x, z); + SecP256R1Field.Multiply(z, x, z); + return new SecP256R1FieldElement(z); + } + + public override ECFieldElement Negate() + { + uint[] z = Nat256.Create(); + SecP256R1Field.Negate(x, z); + return new SecP256R1FieldElement(z); + } + + public override ECFieldElement Square() + { + uint[] z = Nat256.Create(); + SecP256R1Field.Square(x, z); + return new SecP256R1FieldElement(z); + } + + public override ECFieldElement Invert() + { + uint[] z = Nat256.Create(); + SecP256R1Field.Inv(x, z); + return new SecP256R1FieldElement(z); + } + + /** + * return a sqrt root - the routine verifies that the calculation returns the right value - if + * none exists it returns null. + */ + public override ECFieldElement Sqrt() + { + // Raise this element to the exponent 2^254 - 2^222 + 2^190 + 2^94 + + uint[] x1 = this.x; + if (Nat256.IsZero(x1) || Nat256.IsOne(x1)) + return this; + + uint[] tt0 = Nat256.CreateExt(); + uint[] t1 = Nat256.Create(); + uint[] t2 = Nat256.Create(); + + SecP256R1Field.Square(x1, t1, tt0); + SecP256R1Field.Multiply(t1, x1, t1, tt0); + + SecP256R1Field.SquareN(t1, 2, t2, tt0); + SecP256R1Field.Multiply(t2, t1, t2, tt0); + + SecP256R1Field.SquareN(t2, 4, t1, tt0); + SecP256R1Field.Multiply(t1, t2, t1, tt0); + + SecP256R1Field.SquareN(t1, 8, t2, tt0); + SecP256R1Field.Multiply(t2, t1, t2, tt0); + + SecP256R1Field.SquareN(t2, 16, t1, tt0); + SecP256R1Field.Multiply(t1, t2, t1, tt0); + + SecP256R1Field.SquareN(t1, 32, t1, tt0); + SecP256R1Field.Multiply(t1, x1, t1, tt0); + + SecP256R1Field.SquareN(t1, 96, t1, tt0); + SecP256R1Field.Multiply(t1, x1, t1, tt0); + + SecP256R1Field.SquareN(t1, 94, t1, tt0); + SecP256R1Field.Multiply(t1, t1, t2, tt0); + + return Nat256.Eq(x1, t2) ? new SecP256R1FieldElement(t1) : null; + } + + public override bool Equals(object obj) + { + return Equals(obj as SecP256R1FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecP256R1FieldElement); + } + + public virtual bool Equals(SecP256R1FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat256.Eq(x, other.x); + } + + public override int GetHashCode() + { + return Q.GetHashCode() ^ Arrays.GetHashCode(x, 0, 8); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1FieldElement.cs.meta new file mode 100644 index 000000000..5a3cff577 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3674fc76d2fd5954ead730124f209893 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1Point.cs new file mode 100644 index 000000000..ac2e4dbb7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1Point.cs @@ -0,0 +1,251 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP256R1Point + : AbstractFpPoint + { + internal SecP256R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecP256R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecP256R1Point(null, AffineXCoord, AffineYCoord); + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + if (this == b) + return Twice(); + + ECCurve curve = this.Curve; + + SecP256R1FieldElement X1 = (SecP256R1FieldElement)this.RawXCoord, Y1 = (SecP256R1FieldElement)this.RawYCoord; + SecP256R1FieldElement X2 = (SecP256R1FieldElement)b.RawXCoord, Y2 = (SecP256R1FieldElement)b.RawYCoord; + + SecP256R1FieldElement Z1 = (SecP256R1FieldElement)this.RawZCoords[0]; + SecP256R1FieldElement Z2 = (SecP256R1FieldElement)b.RawZCoords[0]; + + uint c; + uint[] tt0 = Nat256.CreateExt(); + uint[] tt1 = Nat256.CreateExt(); + uint[] t2 = Nat256.Create(); + uint[] t3 = Nat256.Create(); + uint[] t4 = Nat256.Create(); + + bool Z1IsOne = Z1.IsOne; + uint[] U2, S2; + if (Z1IsOne) + { + U2 = X2.x; + S2 = Y2.x; + } + else + { + S2 = t3; + SecP256R1Field.Square(Z1.x, S2, tt0); + + U2 = t2; + SecP256R1Field.Multiply(S2, X2.x, U2, tt0); + + SecP256R1Field.Multiply(S2, Z1.x, S2, tt0); + SecP256R1Field.Multiply(S2, Y2.x, S2, tt0); + } + + bool Z2IsOne = Z2.IsOne; + uint[] U1, S1; + if (Z2IsOne) + { + U1 = X1.x; + S1 = Y1.x; + } + else + { + S1 = t4; + SecP256R1Field.Square(Z2.x, S1, tt0); + + U1 = tt1; + SecP256R1Field.Multiply(S1, X1.x, U1, tt0); + + SecP256R1Field.Multiply(S1, Z2.x, S1, tt0); + SecP256R1Field.Multiply(S1, Y1.x, S1, tt0); + } + + uint[] H = Nat256.Create(); + SecP256R1Field.Subtract(U1, U2, H); + + uint[] R = t2; + SecP256R1Field.Subtract(S1, S2, R); + + // Check if b == this or b == -this + if (Nat256.IsZero(H)) + { + if (Nat256.IsZero(R)) + { + // this == b, i.e. this must be doubled + return this.Twice(); + } + + // this == -b, i.e. the result is the point at infinity + return curve.Infinity; + } + + uint[] HSquared = t3; + SecP256R1Field.Square(H, HSquared, tt0); + + uint[] G = Nat256.Create(); + SecP256R1Field.Multiply(HSquared, H, G, tt0); + + uint[] V = t3; + SecP256R1Field.Multiply(HSquared, U1, V, tt0); + + SecP256R1Field.Negate(G, G); + Nat256.Mul(S1, G, tt1); + + c = Nat256.AddBothTo(V, V, G); + SecP256R1Field.Reduce32(c, G); + + SecP256R1FieldElement X3 = new SecP256R1FieldElement(t4); + SecP256R1Field.Square(R, X3.x, tt0); + SecP256R1Field.Subtract(X3.x, G, X3.x); + + SecP256R1FieldElement Y3 = new SecP256R1FieldElement(G); + SecP256R1Field.Subtract(V, X3.x, Y3.x); + SecP256R1Field.MultiplyAddToExt(Y3.x, R, tt1); + SecP256R1Field.Reduce(tt1, Y3.x); + + SecP256R1FieldElement Z3 = new SecP256R1FieldElement(H); + if (!Z1IsOne) + { + SecP256R1Field.Multiply(Z3.x, Z1.x, Z3.x, tt0); + } + if (!Z2IsOne) + { + SecP256R1Field.Multiply(Z3.x, Z2.x, Z3.x, tt0); + } + + ECFieldElement[] zs = new ECFieldElement[]{ Z3 }; + + return new SecP256R1Point(curve, X3, Y3, zs); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + SecP256R1FieldElement Y1 = (SecP256R1FieldElement)this.RawYCoord; + if (Y1.IsZero) + return curve.Infinity; + + SecP256R1FieldElement X1 = (SecP256R1FieldElement)this.RawXCoord, Z1 = (SecP256R1FieldElement)this.RawZCoords[0]; + + uint c; + uint[] tt0 = Nat256.CreateExt(); + uint[] t1 = Nat256.Create(); + uint[] t2 = Nat256.Create(); + + uint[] Y1Squared = Nat256.Create(); + SecP256R1Field.Square(Y1.x, Y1Squared, tt0); + + uint[] T = Nat256.Create(); + SecP256R1Field.Square(Y1Squared, T, tt0); + + bool Z1IsOne = Z1.IsOne; + + uint[] Z1Squared = Z1.x; + if (!Z1IsOne) + { + Z1Squared = t2; + SecP256R1Field.Square(Z1.x, Z1Squared, tt0); + } + + SecP256R1Field.Subtract(X1.x, Z1Squared, t1); + + uint[] M = t2; + SecP256R1Field.Add(X1.x, Z1Squared, M); + SecP256R1Field.Multiply(M, t1, M, tt0); + c = Nat256.AddBothTo(M, M, M); + SecP256R1Field.Reduce32(c, M); + + uint[] S = Y1Squared; + SecP256R1Field.Multiply(Y1Squared, X1.x, S, tt0); + c = Nat.ShiftUpBits(8, S, 2, 0); + SecP256R1Field.Reduce32(c, S); + + c = Nat.ShiftUpBits(8, T, 3, 0, t1); + SecP256R1Field.Reduce32(c, t1); + + SecP256R1FieldElement X3 = new SecP256R1FieldElement(T); + SecP256R1Field.Square(M, X3.x, tt0); + SecP256R1Field.Subtract(X3.x, S, X3.x); + SecP256R1Field.Subtract(X3.x, S, X3.x); + + SecP256R1FieldElement Y3 = new SecP256R1FieldElement(S); + SecP256R1Field.Subtract(S, X3.x, Y3.x); + SecP256R1Field.Multiply(Y3.x, M, Y3.x, tt0); + SecP256R1Field.Subtract(Y3.x, t1, Y3.x); + + SecP256R1FieldElement Z3 = new SecP256R1FieldElement(M); + SecP256R1Field.Twice(Y1.x, Z3.x); + if (!Z1IsOne) + { + SecP256R1Field.Multiply(Z3.x, Z1.x, Z3.x, tt0); + } + + return new SecP256R1Point(curve, X3, Y3, new ECFieldElement[]{ Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this == b) + return ThreeTimes(); + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECFieldElement Y1 = this.RawYCoord; + if (Y1.IsZero) + return b; + + return Twice().Add(b); + } + + public override ECPoint ThreeTimes() + { + if (this.IsInfinity || this.RawYCoord.IsZero) + return this; + + // NOTE: Be careful about recursions between TwicePlus and ThreeTimes + return Twice().Add(this); + } + + public override ECPoint Negate() + { + if (IsInfinity) + return this; + + return new SecP256R1Point(Curve, RawXCoord, RawYCoord.Negate(), RawZCoords); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1Point.cs.meta new file mode 100644 index 000000000..2eb8b0648 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP256R1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 499c5c0285ffb474d88685f7bfadfcd9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1Curve.cs new file mode 100644 index 000000000..47af02e68 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1Curve.cs @@ -0,0 +1,174 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP384R1Curve + : AbstractFpCurve + { + public static readonly BigInteger q = SecP384R1FieldElement.Q; + + private const int SECP384R1_DEFAULT_COORDS = COORD_JACOBIAN; + private const int SECP384R1_FE_INTS = 12; + private static readonly ECFieldElement[] SECP384R1_AFFINE_ZS = new ECFieldElement[] { new SecP384R1FieldElement(BigInteger.One) }; + + protected readonly SecP384R1Point m_infinity; + + public SecP384R1Curve() + : base(q) + { + this.m_infinity = new SecP384R1Point(this, null, null); + + this.m_a = FromBigInteger(new BigInteger(1, + Hex.DecodeStrict("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC"))); + this.m_b = FromBigInteger(new BigInteger(1, + Hex.DecodeStrict("B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973")); + this.m_cofactor = BigInteger.One; + this.m_coord = SECP384R1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecP384R1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_JACOBIAN: + return true; + default: + return false; + } + } + + public virtual BigInteger Q + { + get { return q; } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return q.BitLength; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecP384R1FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecP384R1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecP384R1Point(this, x, y, zs); + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + uint[] table = new uint[len * SECP384R1_FE_INTS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat.Copy(SECP384R1_FE_INTS, ((SecP384R1FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECP384R1_FE_INTS; + Nat.Copy(SECP384R1_FE_INTS, ((SecP384R1FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECP384R1_FE_INTS; + } + } + + return new SecP384R1LookupTable(this, table, len); + } + + public override ECFieldElement RandomFieldElement(SecureRandom r) + { + uint[] x = Nat.Create(12); + SecP384R1Field.Random(r, x); + return new SecP384R1FieldElement(x); + } + + public override ECFieldElement RandomFieldElementMult(SecureRandom r) + { + uint[] x = Nat.Create(12); + SecP384R1Field.RandomMult(r, x); + return new SecP384R1FieldElement(x); + } + + private class SecP384R1LookupTable + : AbstractECLookupTable + { + private readonly SecP384R1Curve m_outer; + private readonly uint[] m_table; + private readonly int m_size; + + internal SecP384R1LookupTable(SecP384R1Curve outer, uint[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + uint[] x = Nat.Create(SECP384R1_FE_INTS), y = Nat.Create(SECP384R1_FE_INTS); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + uint MASK = (uint)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECP384R1_FE_INTS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECP384R1_FE_INTS + j] & MASK; + } + + pos += (SECP384R1_FE_INTS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + uint[] x = Nat.Create(SECP384R1_FE_INTS), y = Nat.Create(SECP384R1_FE_INTS); + int pos = index * SECP384R1_FE_INTS * 2; + + for (int j = 0; j < SECP384R1_FE_INTS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECP384R1_FE_INTS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(uint[] x, uint[] y) + { + return m_outer.CreateRawPoint(new SecP384R1FieldElement(x), new SecP384R1FieldElement(y), SECP384R1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1Curve.cs.meta new file mode 100644 index 000000000..cda338129 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 75aff1f4132681d428a0d2eb9daaddfe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1Field.cs new file mode 100644 index 000000000..f5033a91b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1Field.cs @@ -0,0 +1,364 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP384R1Field + { + // 2^384 - 2^128 - 2^96 + 2^32 - 1 + internal static readonly uint[] P = new uint[]{ 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFE, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; + private static readonly uint[] PExt = new uint[]{ 0x00000001, 0xFFFFFFFE, 0x00000000, 0x00000002, 0x00000000, + 0xFFFFFFFE, 0x00000000, 0x00000002, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFE, 0x00000001, + 0x00000000, 0xFFFFFFFE, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF }; + private static readonly uint[] PExtInv = new uint[]{ 0xFFFFFFFF, 0x00000001, 0xFFFFFFFF, 0xFFFFFFFD, + 0xFFFFFFFF, 0x00000001, 0xFFFFFFFF, 0xFFFFFFFD, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000001, + 0xFFFFFFFE, 0xFFFFFFFF, 0x00000001, 0x00000002 }; + private const uint P11 = 0xFFFFFFFF; + private const uint PExt23 = 0xFFFFFFFF; + + public static void Add(uint[] x, uint[] y, uint[] z) + { + uint c = Nat.Add(12, x, y, z); + if (c != 0 || (z[11] == P11 && Nat.Gte(12, z, P))) + { + AddPInvTo(z); + } + } + + public static void AddExt(uint[] xx, uint[] yy, uint[] zz) + { + uint c = Nat.Add(24, xx, yy, zz); + if (c != 0 || (zz[23] == PExt23 && Nat.Gte(24, zz, PExt))) + { + if (Nat.AddTo(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.IncAt(24, zz, PExtInv.Length); + } + } + } + + public static void AddOne(uint[] x, uint[] z) + { + uint c = Nat.Inc(12, x, z); + if (c != 0 || (z[11] == P11 && Nat.Gte(12, z, P))) + { + AddPInvTo(z); + } + } + + public static uint[] FromBigInteger(BigInteger x) + { + uint[] z = Nat.FromBigInteger(384, x); + if (z[11] == P11 && Nat.Gte(12, z, P)) + { + Nat.SubFrom(12, P, z); + } + return z; + } + + public static void Half(uint[] x, uint[] z) + { + if ((x[0] & 1) == 0) + { + Nat.ShiftDownBit(12, x, 0, z); + } + else + { + uint c = Nat.Add(12, x, P, z); + Nat.ShiftDownBit(12, z, c); + } + } + + public static void Inv(uint[] x, uint[] z) + { + Mod.CheckedModOddInverse(P, x, z); + } + + public static int IsZero(uint[] x) + { + uint d = 0; + for (int i = 0; i < 12; ++i) + { + d |= x[i]; + } + d = (d >> 1) | (d & 1); + return ((int)d - 1) >> 31; + } + + public static void Multiply(uint[] x, uint[] y, uint[] z) + { + uint[] tt = Nat.Create(24); + Nat384.Mul(x, y, tt); + Reduce(tt, z); + } + + public static void Multiply(uint[] x, uint[] y, uint[] z, uint[] tt) + { + Nat384.Mul(x, y, tt); + Reduce(tt, z); + } + + public static void Negate(uint[] x, uint[] z) + { + if (0 != IsZero(x)) + { + Nat.Sub(12, P, P, z); + } + else + { + Nat.Sub(12, P, x, z); + } + } + + public static void Random(SecureRandom r, uint[] z) + { + byte[] bb = new byte[12 * 4]; + do + { + r.NextBytes(bb); + Pack.LE_To_UInt32(bb, 0, z, 0, 12); + } + while (0 == Nat.LessThan(12, z, P)); + } + + public static void RandomMult(SecureRandom r, uint[] z) + { + do + { + Random(r, z); + } + while (0 != IsZero(z)); + } + + public static void Reduce(uint[] xx, uint[] z) + { + long xx16 = xx[16], xx17 = xx[17], xx18 = xx[18], xx19 = xx[19]; + long xx20 = xx[20], xx21 = xx[21], xx22 = xx[22], xx23 = xx[23]; + + const long n = 1; + + long t0 = (long)xx[12] + xx20 - n; + long t1 = (long)xx[13] + xx22; + long t2 = (long)xx[14] + xx22 + xx23; + long t3 = (long)xx[15] + xx23; + long t4 = xx17 + xx21; + long t5 = xx21 - xx23; + long t6 = xx22 - xx23; + long t7 = t0 + t5; + + long cc = 0; + cc += (long)xx[0] + t7; + z[0] = (uint)cc; + cc >>= 32; + cc += (long)xx[1] + xx23 - t0 + t1; + z[1] = (uint)cc; + cc >>= 32; + cc += (long)xx[2] - xx21 - t1 + t2; + z[2] = (uint)cc; + cc >>= 32; + cc += (long)xx[3] - t2 + t3 + t7; + z[3] = (uint)cc; + cc >>= 32; + cc += (long)xx[4] + xx16 + xx21 + t1 - t3 + t7; + z[4] = (uint)cc; + cc >>= 32; + cc += (long)xx[5] - xx16 + t1 + t2 + t4; + z[5] = (uint)cc; + cc >>= 32; + cc += (long)xx[6] + xx18 - xx17 + t2 + t3; + z[6] = (uint)cc; + cc >>= 32; + cc += (long)xx[7] + xx16 + xx19 - xx18 + t3; + z[7] = (uint)cc; + cc >>= 32; + cc += (long)xx[8] + xx16 + xx17 + xx20 - xx19; + z[8] = (uint)cc; + cc >>= 32; + cc += (long)xx[9] + xx18 - xx20 + t4; + z[9] = (uint)cc; + cc >>= 32; + cc += (long)xx[10] + xx18 + xx19 - t5 + t6; + z[10] = (uint)cc; + cc >>= 32; + cc += (long)xx[11] + xx19 + xx20 - t6; + z[11] = (uint)cc; + cc >>= 32; + cc += n; + + Debug.Assert(cc >= 0); + + Reduce32((uint)cc, z); + } + + public static void Reduce32(uint x, uint[] z) + { + long cc = 0; + + if (x != 0) + { + long xx12 = x; + + cc += (long)z[0] + xx12; + z[0] = (uint)cc; + cc >>= 32; + cc += (long)z[1] - xx12; + z[1] = (uint)cc; + cc >>= 32; + if (cc != 0) + { + cc += (long)z[2]; + z[2] = (uint)cc; + cc >>= 32; + } + cc += (long)z[3] + xx12; + z[3] = (uint)cc; + cc >>= 32; + cc += (long)z[4] + xx12; + z[4] = (uint)cc; + cc >>= 32; + + Debug.Assert(cc == 0 || cc == 1); + } + + if ((cc != 0 && Nat.IncAt(12, z, 5) != 0) + || (z[11] == P11 && Nat.Gte(12, z, P))) + { + AddPInvTo(z); + } + } + + public static void Square(uint[] x, uint[] z) + { + uint[] tt = Nat.Create(24); + Nat384.Square(x, tt); + Reduce(tt, z); + } + + public static void Square(uint[] x, uint[] z, uint[] tt) + { + Nat384.Square(x, tt); + Reduce(tt, z); + } + + public static void SquareN(uint[] x, int n, uint[] z) + { + Debug.Assert(n > 0); + + uint[] tt = Nat.Create(24); + Nat384.Square(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + Nat384.Square(z, tt); + Reduce(tt, z); + } + } + + public static void SquareN(uint[] x, int n, uint[] z, uint[] tt) + { + Debug.Assert(n > 0); + + Nat384.Square(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + Nat384.Square(z, tt); + Reduce(tt, z); + } + } + + public static void Subtract(uint[] x, uint[] y, uint[] z) + { + int c = Nat.Sub(12, x, y, z); + if (c != 0) + { + SubPInvFrom(z); + } + } + + public static void SubtractExt(uint[] xx, uint[] yy, uint[] zz) + { + int c = Nat.Sub(24, xx, yy, zz); + if (c != 0) + { + if (Nat.SubFrom(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.DecAt(24, zz, PExtInv.Length); + } + } + } + + public static void Twice(uint[] x, uint[] z) + { + uint c = Nat.ShiftUpBit(12, x, 0, z); + if (c != 0 || (z[11] == P11 && Nat.Gte(12, z, P))) + { + AddPInvTo(z); + } + } + + private static void AddPInvTo(uint[] z) + { + long c = (long)z[0] + 1; + z[0] = (uint)c; + c >>= 32; + c += (long)z[1] - 1; + z[1] = (uint)c; + c >>= 32; + if (c != 0) + { + c += (long)z[2]; + z[2] = (uint)c; + c >>= 32; + } + c += (long)z[3] + 1; + z[3] = (uint)c; + c >>= 32; + c += (long)z[4] + 1; + z[4] = (uint)c; + c >>= 32; + if (c != 0) + { + Nat.IncAt(12, z, 5); + } + } + + private static void SubPInvFrom(uint[] z) + { + long c = (long)z[0] - 1; + z[0] = (uint)c; + c >>= 32; + c += (long)z[1] + 1; + z[1] = (uint)c; + c >>= 32; + if (c != 0) + { + c += (long)z[2]; + z[2] = (uint)c; + c >>= 32; + } + c += (long)z[3] - 1; + z[3] = (uint)c; + c >>= 32; + c += (long)z[4] - 1; + z[4] = (uint)c; + c >>= 32; + if (c != 0) + { + Nat.DecAt(12, z, 5); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1Field.cs.meta new file mode 100644 index 000000000..886f0adf9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b7cb7a5d5e0a1544bce29407d194008 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1FieldElement.cs new file mode 100644 index 000000000..85ad5b5cd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1FieldElement.cs @@ -0,0 +1,216 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP384R1FieldElement + : AbstractFpFieldElement + { + public static readonly BigInteger Q = new BigInteger(1, + Hex.DecodeStrict("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF")); + + protected internal readonly uint[] x; + + public SecP384R1FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.CompareTo(Q) >= 0) + throw new ArgumentException("value invalid for SecP384R1FieldElement", "x"); + + this.x = SecP384R1Field.FromBigInteger(x); + } + + public SecP384R1FieldElement() + { + this.x = Nat.Create(12); + } + + protected internal SecP384R1FieldElement(uint[] x) + { + this.x = x; + } + + public override bool IsZero + { + get { return Nat.IsZero(12, x); } + } + + public override bool IsOne + { + get { return Nat.IsOne(12, x); } + } + + public override bool TestBitZero() + { + return Nat.GetBit(x, 0) == 1; + } + + public override BigInteger ToBigInteger() + { + return Nat.ToBigInteger(12, x); + } + + public override string FieldName + { + get { return "SecP384R1Field"; } + } + + public override int FieldSize + { + get { return Q.BitLength; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + uint[] z = Nat.Create(12); + SecP384R1Field.Add(x, ((SecP384R1FieldElement)b).x, z); + return new SecP384R1FieldElement(z); + } + + public override ECFieldElement AddOne() + { + uint[] z = Nat.Create(12); + SecP384R1Field.AddOne(x, z); + return new SecP384R1FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + uint[] z = Nat.Create(12); + SecP384R1Field.Subtract(x, ((SecP384R1FieldElement)b).x, z); + return new SecP384R1FieldElement(z); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + uint[] z = Nat.Create(12); + SecP384R1Field.Multiply(x, ((SecP384R1FieldElement)b).x, z); + return new SecP384R1FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + //return Multiply(b.Invert()); + uint[] z = Nat.Create(12); + SecP384R1Field.Inv(((SecP384R1FieldElement)b).x, z); + SecP384R1Field.Multiply(z, x, z); + return new SecP384R1FieldElement(z); + } + + public override ECFieldElement Negate() + { + uint[] z = Nat.Create(12); + SecP384R1Field.Negate(x, z); + return new SecP384R1FieldElement(z); + } + + public override ECFieldElement Square() + { + uint[] z = Nat.Create(12); + SecP384R1Field.Square(x, z); + return new SecP384R1FieldElement(z); + } + + public override ECFieldElement Invert() + { + uint[] z = Nat.Create(12); + SecP384R1Field.Inv(x, z); + return new SecP384R1FieldElement(z); + } + + /** + * return a sqrt root - the routine verifies that the calculation returns the right value - if + * none exists it returns null. + */ + public override ECFieldElement Sqrt() + { + // Raise this element to the exponent 2^382 - 2^126 - 2^94 + 2^30 + + uint[] x1 = this.x; + if (Nat.IsZero(12, x1) || Nat.IsOne(12, x1)) + return this; + + uint[] tt0 = Nat.Create(24); + uint[] t1 = Nat.Create(12); + uint[] t2 = Nat.Create(12); + uint[] t3 = Nat.Create(12); + uint[] t4 = Nat.Create(12); + + SecP384R1Field.Square(x1, t1, tt0); + SecP384R1Field.Multiply(t1, x1, t1, tt0); + + SecP384R1Field.SquareN(t1, 2, t2, tt0); + SecP384R1Field.Multiply(t2, t1, t2, tt0); + + SecP384R1Field.Square(t2, t2, tt0); + SecP384R1Field.Multiply(t2, x1, t2, tt0); + + SecP384R1Field.SquareN(t2, 5, t3, tt0); + SecP384R1Field.Multiply(t3, t2, t3, tt0); + + SecP384R1Field.SquareN(t3, 5, t4, tt0); + SecP384R1Field.Multiply(t4, t2, t4, tt0); + + SecP384R1Field.SquareN(t4, 15, t2, tt0); + SecP384R1Field.Multiply(t2, t4, t2, tt0); + + SecP384R1Field.SquareN(t2, 2, t3, tt0); + SecP384R1Field.Multiply(t1, t3, t1, tt0); + + SecP384R1Field.SquareN(t3, 28, t3, tt0); + SecP384R1Field.Multiply(t2, t3, t2, tt0); + + SecP384R1Field.SquareN(t2, 60, t3, tt0); + SecP384R1Field.Multiply(t3, t2, t3, tt0); + + uint[] r = t2; + + SecP384R1Field.SquareN(t3, 120, r, tt0); + SecP384R1Field.Multiply(r, t3, r, tt0); + + SecP384R1Field.SquareN(r, 15, r, tt0); + SecP384R1Field.Multiply(r, t4, r, tt0); + + SecP384R1Field.SquareN(r, 33, r, tt0); + SecP384R1Field.Multiply(r, t1, r, tt0); + + SecP384R1Field.SquareN(r, 64, r, tt0); + SecP384R1Field.Multiply(r, x1, r, tt0); + + SecP384R1Field.SquareN(r, 30, t1, tt0); + SecP384R1Field.Square(t1, t2, tt0); + + return Nat.Eq(12, x1, t2) ? new SecP384R1FieldElement(t1) : null; + } + + public override bool Equals(object obj) + { + return Equals(obj as SecP384R1FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecP384R1FieldElement); + } + + public virtual bool Equals(SecP384R1FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat.Eq(12, x, other.x); + } + + public override int GetHashCode() + { + return Q.GetHashCode() ^ Arrays.GetHashCode(x, 0, 12); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1FieldElement.cs.meta new file mode 100644 index 000000000..9eee5699b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c177ec57fed4194f86bc4bc12fd3100 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1Point.cs new file mode 100644 index 000000000..346441549 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1Point.cs @@ -0,0 +1,252 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP384R1Point + : AbstractFpPoint + { + internal SecP384R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecP384R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecP384R1Point(null, AffineXCoord, AffineYCoord); + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + if (this == b) + return Twice(); + + ECCurve curve = this.Curve; + + SecP384R1FieldElement X1 = (SecP384R1FieldElement)this.RawXCoord, Y1 = (SecP384R1FieldElement)this.RawYCoord; + SecP384R1FieldElement X2 = (SecP384R1FieldElement)b.RawXCoord, Y2 = (SecP384R1FieldElement)b.RawYCoord; + + SecP384R1FieldElement Z1 = (SecP384R1FieldElement)this.RawZCoords[0]; + SecP384R1FieldElement Z2 = (SecP384R1FieldElement)b.RawZCoords[0]; + + uint c; + uint[] tt0 = Nat.Create(24); + uint[] tt1 = Nat.Create(24); + uint[] tt2 = Nat.Create(24); + uint[] t3 = Nat.Create(12); + uint[] t4 = Nat.Create(12); + + bool Z1IsOne = Z1.IsOne; + uint[] U2, S2; + if (Z1IsOne) + { + U2 = X2.x; + S2 = Y2.x; + } + else + { + S2 = t3; + SecP384R1Field.Square(Z1.x, S2, tt0); + + U2 = tt2; + SecP384R1Field.Multiply(S2, X2.x, U2, tt0); + + SecP384R1Field.Multiply(S2, Z1.x, S2, tt0); + SecP384R1Field.Multiply(S2, Y2.x, S2, tt0); + } + + bool Z2IsOne = Z2.IsOne; + uint[] U1, S1; + if (Z2IsOne) + { + U1 = X1.x; + S1 = Y1.x; + } + else + { + S1 = t4; + SecP384R1Field.Square(Z2.x, S1, tt0); + + U1 = tt1; + SecP384R1Field.Multiply(S1, X1.x, U1, tt0); + + SecP384R1Field.Multiply(S1, Z2.x, S1, tt0); + SecP384R1Field.Multiply(S1, Y1.x, S1, tt0); + } + + uint[] H = Nat.Create(12); + SecP384R1Field.Subtract(U1, U2, H); + + uint[] R = Nat.Create(12); + SecP384R1Field.Subtract(S1, S2, R); + + // Check if b == this or b == -this + if (Nat.IsZero(12, H)) + { + if (Nat.IsZero(12, R)) + { + // this == b, i.e. this must be doubled + return this.Twice(); + } + + // this == -b, i.e. the result is the point at infinity + return curve.Infinity; + } + + uint[] HSquared = t3; + SecP384R1Field.Square(H, HSquared, tt0); + + uint[] G = Nat.Create(12); + SecP384R1Field.Multiply(HSquared, H, G, tt0); + + uint[] V = t3; + SecP384R1Field.Multiply(HSquared, U1, V, tt0); + + SecP384R1Field.Negate(G, G); + Nat384.Mul(S1, G, tt1); + + c = Nat.AddBothTo(12, V, V, G); + SecP384R1Field.Reduce32(c, G); + + SecP384R1FieldElement X3 = new SecP384R1FieldElement(t4); + SecP384R1Field.Square(R, X3.x, tt0); + SecP384R1Field.Subtract(X3.x, G, X3.x); + + SecP384R1FieldElement Y3 = new SecP384R1FieldElement(G); + SecP384R1Field.Subtract(V, X3.x, Y3.x); + Nat384.Mul(Y3.x, R, tt2); + SecP384R1Field.AddExt(tt1, tt2, tt1); + SecP384R1Field.Reduce(tt1, Y3.x); + + SecP384R1FieldElement Z3 = new SecP384R1FieldElement(H); + if (!Z1IsOne) + { + SecP384R1Field.Multiply(Z3.x, Z1.x, Z3.x, tt0); + } + if (!Z2IsOne) + { + SecP384R1Field.Multiply(Z3.x, Z2.x, Z3.x, tt0); + } + + ECFieldElement[] zs = new ECFieldElement[] { Z3 }; + + return new SecP384R1Point(curve, X3, Y3, zs); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + SecP384R1FieldElement Y1 = (SecP384R1FieldElement)this.RawYCoord; + if (Y1.IsZero) + return curve.Infinity; + + SecP384R1FieldElement X1 = (SecP384R1FieldElement)this.RawXCoord, Z1 = (SecP384R1FieldElement)this.RawZCoords[0]; + + uint c; + uint[] tt0 = Nat.Create(24); + uint[] t1 = Nat.Create(12); + uint[] t2 = Nat.Create(12); + + uint[] Y1Squared = Nat.Create(12); + SecP384R1Field.Square(Y1.x, Y1Squared, tt0); + + uint[] T = Nat.Create(12); + SecP384R1Field.Square(Y1Squared, T, tt0); + + bool Z1IsOne = Z1.IsOne; + + uint[] Z1Squared = Z1.x; + if (!Z1IsOne) + { + Z1Squared = t2; + SecP384R1Field.Square(Z1.x, Z1Squared, tt0); + } + + SecP384R1Field.Subtract(X1.x, Z1Squared, t1); + + uint[] M = t2; + SecP384R1Field.Add(X1.x, Z1Squared, M); + SecP384R1Field.Multiply(M, t1, M, tt0); + c = Nat.AddBothTo(12, M, M, M); + SecP384R1Field.Reduce32(c, M); + + uint[] S = Y1Squared; + SecP384R1Field.Multiply(Y1Squared, X1.x, S, tt0); + c = Nat.ShiftUpBits(12, S, 2, 0); + SecP384R1Field.Reduce32(c, S); + + c = Nat.ShiftUpBits(12, T, 3, 0, t1); + SecP384R1Field.Reduce32(c, t1); + + SecP384R1FieldElement X3 = new SecP384R1FieldElement(T); + SecP384R1Field.Square(M, X3.x, tt0); + SecP384R1Field.Subtract(X3.x, S, X3.x); + SecP384R1Field.Subtract(X3.x, S, X3.x); + + SecP384R1FieldElement Y3 = new SecP384R1FieldElement(S); + SecP384R1Field.Subtract(S, X3.x, Y3.x); + SecP384R1Field.Multiply(Y3.x, M, Y3.x, tt0); + SecP384R1Field.Subtract(Y3.x, t1, Y3.x); + + SecP384R1FieldElement Z3 = new SecP384R1FieldElement(M); + SecP384R1Field.Twice(Y1.x, Z3.x); + if (!Z1IsOne) + { + SecP384R1Field.Multiply(Z3.x, Z1.x, Z3.x, tt0); + } + + return new SecP384R1Point(curve, X3, Y3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this == b) + return ThreeTimes(); + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECFieldElement Y1 = this.RawYCoord; + if (Y1.IsZero) + return b; + + return Twice().Add(b); + } + + public override ECPoint ThreeTimes() + { + if (this.IsInfinity || this.RawYCoord.IsZero) + return this; + + // NOTE: Be careful about recursions between TwicePlus and ThreeTimes + return Twice().Add(this); + } + + public override ECPoint Negate() + { + if (IsInfinity) + return this; + + return new SecP384R1Point(Curve, RawXCoord, RawYCoord.Negate(), RawZCoords); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1Point.cs.meta new file mode 100644 index 000000000..e8698a2d4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP384R1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 533f4a923a033e342854675195b3f0df +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1Curve.cs new file mode 100644 index 000000000..158b4d8a4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1Curve.cs @@ -0,0 +1,174 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP521R1Curve + : AbstractFpCurve + { + public static readonly BigInteger q = SecP521R1FieldElement.Q; + + private const int SECP521R1_DEFAULT_COORDS = COORD_JACOBIAN; + private const int SECP521R1_FE_INTS = 17; + private static readonly ECFieldElement[] SECP521R1_AFFINE_ZS = new ECFieldElement[] { new SecP521R1FieldElement(BigInteger.One) }; + + protected readonly SecP521R1Point m_infinity; + + public SecP521R1Curve() + : base(q) + { + this.m_infinity = new SecP521R1Point(this, null, null); + + this.m_a = FromBigInteger(new BigInteger(1, + Hex.DecodeStrict("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC"))); + this.m_b = FromBigInteger(new BigInteger(1, + Hex.DecodeStrict("0051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409")); + this.m_cofactor = BigInteger.One; + this.m_coord = SECP521R1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecP521R1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_JACOBIAN: + return true; + default: + return false; + } + } + + public virtual BigInteger Q + { + get { return q; } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return q.BitLength; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecP521R1FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecP521R1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecP521R1Point(this, x, y, zs); + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + uint[] table = new uint[len * SECP521R1_FE_INTS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat.Copy(SECP521R1_FE_INTS, ((SecP521R1FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECP521R1_FE_INTS; + Nat.Copy(SECP521R1_FE_INTS, ((SecP521R1FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECP521R1_FE_INTS; + } + } + + return new SecP521R1LookupTable(this, table, len); + } + + public override ECFieldElement RandomFieldElement(SecureRandom r) + { + uint[] x = Nat.Create(17); + SecP521R1Field.Random(r, x); + return new SecP521R1FieldElement(x); + } + + public override ECFieldElement RandomFieldElementMult(SecureRandom r) + { + uint[] x = Nat.Create(17); + SecP521R1Field.RandomMult(r, x); + return new SecP521R1FieldElement(x); + } + + private class SecP521R1LookupTable + : AbstractECLookupTable + { + private readonly SecP521R1Curve m_outer; + private readonly uint[] m_table; + private readonly int m_size; + + internal SecP521R1LookupTable(SecP521R1Curve outer, uint[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + uint[] x = Nat.Create(SECP521R1_FE_INTS), y = Nat.Create(SECP521R1_FE_INTS); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + uint MASK = (uint)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECP521R1_FE_INTS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECP521R1_FE_INTS + j] & MASK; + } + + pos += (SECP521R1_FE_INTS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + uint[] x = Nat.Create(SECP521R1_FE_INTS), y = Nat.Create(SECP521R1_FE_INTS); + int pos = index * SECP521R1_FE_INTS * 2; + + for (int j = 0; j < SECP521R1_FE_INTS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECP521R1_FE_INTS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(uint[] x, uint[] y) + { + return m_outer.CreateRawPoint(new SecP521R1FieldElement(x), new SecP521R1FieldElement(y), SECP521R1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1Curve.cs.meta new file mode 100644 index 000000000..92a380b3d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d65d118e58b9f114c9b15094148d033a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1Field.cs new file mode 100644 index 000000000..399fdd770 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1Field.cs @@ -0,0 +1,226 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP521R1Field + { + // 2^521 - 1 + internal static readonly uint[] P = new uint[]{ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x1FF }; + private const uint P16 = 0x1FFU; + + public static void Add(uint[] x, uint[] y, uint[] z) + { + uint c = Nat.Add(16, x, y, z) + x[16] + y[16]; + if (c > P16 || (c == P16 && Nat.Eq(16, z, P))) + { + c += Nat.Inc(16, z); + c &= P16; + } + z[16] = c; + } + + public static void AddOne(uint[] x, uint[] z) + { + uint c = Nat.Inc(16, x, z) + x[16]; + if (c > P16 || (c == P16 && Nat.Eq(16, z, P))) + { + c += Nat.Inc(16, z); + c &= P16; + } + z[16] = c; + } + + public static uint[] FromBigInteger(BigInteger x) + { + uint[] z = Nat.FromBigInteger(521, x); + if (Nat.Eq(17, z, P)) + { + Nat.Zero(17, z); + } + return z; + } + + public static void Half(uint[] x, uint[] z) + { + uint x16 = x[16]; + uint c = Nat.ShiftDownBit(16, x, x16, z); + z[16] = (x16 >> 1) | (c >> 23); + } + + public static void Inv(uint[] x, uint[] z) + { + Mod.CheckedModOddInverse(P, x, z); + } + + public static int IsZero(uint[] x) + { + uint d = 0; + for (int i = 0; i < 17; ++i) + { + d |= x[i]; + } + d = (d >> 1) | (d & 1); + return ((int)d - 1) >> 31; + } + + public static void Multiply(uint[] x, uint[] y, uint[] z) + { + uint[] tt = Nat.Create(33); + ImplMultiply(x, y, tt); + Reduce(tt, z); + } + + public static void Multiply(uint[] x, uint[] y, uint[] z, uint[] tt) + { + ImplMultiply(x, y, tt); + Reduce(tt, z); + } + + public static void Negate(uint[] x, uint[] z) + { + if (0 != IsZero(x)) + { + Nat.Sub(17, P, P, z); + } + else + { + Nat.Sub(17, P, x, z); + } + } + + public static void Random(SecureRandom r, uint[] z) + { + byte[] bb = new byte[17 * 4]; + do + { + r.NextBytes(bb); + Pack.LE_To_UInt32(bb, 0, z, 0, 17); + z[16] &= P16; + } + while (0 == Nat.LessThan(17, z, P)); + } + + public static void RandomMult(SecureRandom r, uint[] z) + { + do + { + Random(r, z); + } + while (0 != IsZero(z)); + } + + public static void Reduce(uint[] xx, uint[] z) + { + Debug.Assert(xx[32] >> 18 == 0); + uint xx32 = xx[32]; + uint c = Nat.ShiftDownBits(16, xx, 16, 9, xx32, z, 0) >> 23; + c += xx32 >> 9; + c += Nat.AddTo(16, xx, z); + if (c > P16 || (c == P16 && Nat.Eq(16, z, P))) + { + c += Nat.Inc(16, z); + c &= P16; + } + z[16] = c; + } + + public static void Reduce23(uint[] z) + { + uint z16 = z[16]; + uint c = Nat.AddWordTo(16, z16 >> 9, z) + (z16 & P16); + if (c > P16 || (c == P16 && Nat.Eq(16, z, P))) + { + c += Nat.Inc(16, z); + c &= P16; + } + z[16] = c; + } + + public static void Square(uint[] x, uint[] z) + { + uint[] tt = Nat.Create(33); + ImplSquare(x, tt); + Reduce(tt, z); + } + + public static void Square(uint[] x, uint[] z, uint[] tt) + { + ImplSquare(x, tt); + Reduce(tt, z); + } + + public static void SquareN(uint[] x, int n, uint[] z) + { + Debug.Assert(n > 0); + + uint[] tt = Nat.Create(33); + ImplSquare(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + ImplSquare(z, tt); + Reduce(tt, z); + } + } + + public static void SquareN(uint[] x, int n, uint[] z, uint[] tt) + { + Debug.Assert(n > 0); + + ImplSquare(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + ImplSquare(z, tt); + Reduce(tt, z); + } + } + + public static void Subtract(uint[] x, uint[] y, uint[] z) + { + int c = Nat.Sub(16, x, y, z) + (int)(x[16] - y[16]); + if (c < 0) + { + c += Nat.Dec(16, z); + c &= (int)P16; + } + z[16] = (uint)c; + } + + public static void Twice(uint[] x, uint[] z) + { + uint x16 = x[16]; + uint c = Nat.ShiftUpBit(16, x, x16 << 23, z) | (x16 << 1); + z[16] = c & P16; + } + + protected static void ImplMultiply(uint[] x, uint[] y, uint[] zz) + { + Nat512.Mul(x, y, zz); + + uint x16 = x[16], y16 = y[16]; + zz[32] = Nat.Mul31BothAdd(16, x16, y, y16, x, zz, 16) + (x16 * y16); + } + + protected static void ImplSquare(uint[] x, uint[] zz) + { + Nat512.Square(x, zz); + + uint x16 = x[16]; + zz[32] = Nat.MulWordAddTo(16, x16 << 1, x, 0, zz, 16) + (x16 * x16); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1Field.cs.meta new file mode 100644 index 000000000..87b74cabd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 825661e6afc41554080a475cc6af4dba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1FieldElement.cs new file mode 100644 index 000000000..caf6a7bc6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1FieldElement.cs @@ -0,0 +1,173 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP521R1FieldElement + : AbstractFpFieldElement + { + public static readonly BigInteger Q = new BigInteger(1, + Hex.DecodeStrict("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")); + + protected internal readonly uint[] x; + + public SecP521R1FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.CompareTo(Q) >= 0) + throw new ArgumentException("value invalid for SecP521R1FieldElement", "x"); + + this.x = SecP521R1Field.FromBigInteger(x); + } + + public SecP521R1FieldElement() + { + this.x = Nat.Create(17); + } + + protected internal SecP521R1FieldElement(uint[] x) + { + this.x = x; + } + + public override bool IsZero + { + get { return Nat.IsZero(17, x); } + } + + public override bool IsOne + { + get { return Nat.IsOne(17, x); } + } + + public override bool TestBitZero() + { + return Nat.GetBit(x, 0) == 1; + } + + public override BigInteger ToBigInteger() + { + return Nat.ToBigInteger(17, x); + } + + public override string FieldName + { + get { return "SecP521R1Field"; } + } + + public override int FieldSize + { + get { return Q.BitLength; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + uint[] z = Nat.Create(17); + SecP521R1Field.Add(x, ((SecP521R1FieldElement)b).x, z); + return new SecP521R1FieldElement(z); + } + + public override ECFieldElement AddOne() + { + uint[] z = Nat.Create(17); + SecP521R1Field.AddOne(x, z); + return new SecP521R1FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + uint[] z = Nat.Create(17); + SecP521R1Field.Subtract(x, ((SecP521R1FieldElement)b).x, z); + return new SecP521R1FieldElement(z); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + uint[] z = Nat.Create(17); + SecP521R1Field.Multiply(x, ((SecP521R1FieldElement)b).x, z); + return new SecP521R1FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + //return Multiply(b.Invert()); + uint[] z = Nat.Create(17); + SecP521R1Field.Inv(((SecP521R1FieldElement)b).x, z); + SecP521R1Field.Multiply(z, x, z); + return new SecP521R1FieldElement(z); + } + + public override ECFieldElement Negate() + { + uint[] z = Nat.Create(17); + SecP521R1Field.Negate(x, z); + return new SecP521R1FieldElement(z); + } + + public override ECFieldElement Square() + { + uint[] z = Nat.Create(17); + SecP521R1Field.Square(x, z); + return new SecP521R1FieldElement(z); + } + + public override ECFieldElement Invert() + { + uint[] z = Nat.Create(17); + SecP521R1Field.Inv(x, z); + return new SecP521R1FieldElement(z); + } + + /** + * return a sqrt root - the routine verifies that the calculation returns the right value - if + * none exists it returns null. + */ + public override ECFieldElement Sqrt() + { + // Raise this element to the exponent 2^519 + + uint[] x1 = this.x; + if (Nat.IsZero(17, x1) || Nat.IsOne(17, x1)) + return this; + + uint[] tt0 = Nat.Create(33); + uint[] t1 = Nat.Create(17); + uint[] t2 = Nat.Create(17); + + SecP521R1Field.SquareN(x1, 519, t1, tt0); + SecP521R1Field.Square(t1, t2, tt0); + + return Nat.Eq(17, x1, t2) ? new SecP521R1FieldElement(t1) : null; + } + + public override bool Equals(object obj) + { + return Equals(obj as SecP521R1FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecP521R1FieldElement); + } + + public virtual bool Equals(SecP521R1FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat.Eq(17, x, other.x); + } + + public override int GetHashCode() + { + return Q.GetHashCode() ^ Arrays.GetHashCode(x, 0, 17); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1FieldElement.cs.meta new file mode 100644 index 000000000..6483af39c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5c7adc09b4e3b0e459b5fc6a13d4d040 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1Point.cs new file mode 100644 index 000000000..9bf07c88f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1Point.cs @@ -0,0 +1,247 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecP521R1Point + : AbstractFpPoint + { + internal SecP521R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecP521R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecP521R1Point(null, AffineXCoord, AffineYCoord); + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + if (this == b) + return Twice(); + + ECCurve curve = this.Curve; + + SecP521R1FieldElement X1 = (SecP521R1FieldElement)this.RawXCoord, Y1 = (SecP521R1FieldElement)this.RawYCoord; + SecP521R1FieldElement X2 = (SecP521R1FieldElement)b.RawXCoord, Y2 = (SecP521R1FieldElement)b.RawYCoord; + + SecP521R1FieldElement Z1 = (SecP521R1FieldElement)this.RawZCoords[0]; + SecP521R1FieldElement Z2 = (SecP521R1FieldElement)b.RawZCoords[0]; + + uint[] tt0 = Nat.Create(33); + uint[] t1 = Nat.Create(17); + uint[] t2 = Nat.Create(17); + uint[] t3 = Nat.Create(17); + uint[] t4 = Nat.Create(17); + + bool Z1IsOne = Z1.IsOne; + uint[] U2, S2; + if (Z1IsOne) + { + U2 = X2.x; + S2 = Y2.x; + } + else + { + S2 = t3; + SecP521R1Field.Square(Z1.x, S2, tt0); + + U2 = t2; + SecP521R1Field.Multiply(S2, X2.x, U2, tt0); + + SecP521R1Field.Multiply(S2, Z1.x, S2, tt0); + SecP521R1Field.Multiply(S2, Y2.x, S2, tt0); + } + + bool Z2IsOne = Z2.IsOne; + uint[] U1, S1; + if (Z2IsOne) + { + U1 = X1.x; + S1 = Y1.x; + } + else + { + S1 = t4; + SecP521R1Field.Square(Z2.x, S1, tt0); + + U1 = t1; + SecP521R1Field.Multiply(S1, X1.x, U1, tt0); + + SecP521R1Field.Multiply(S1, Z2.x, S1, tt0); + SecP521R1Field.Multiply(S1, Y1.x, S1, tt0); + } + + uint[] H = Nat.Create(17); + SecP521R1Field.Subtract(U1, U2, H); + + uint[] R = t2; + SecP521R1Field.Subtract(S1, S2, R); + + // Check if b == this or b == -this + if (Nat.IsZero(17, H)) + { + if (Nat.IsZero(17, R)) + { + // this == b, i.e. this must be doubled + return this.Twice(); + } + + // this == -b, i.e. the result is the point at infinity + return curve.Infinity; + } + + uint[] HSquared = t3; + SecP521R1Field.Square(H, HSquared, tt0); + + uint[] G = Nat.Create(17); + SecP521R1Field.Multiply(HSquared, H, G, tt0); + + uint[] V = t3; + SecP521R1Field.Multiply(HSquared, U1, V, tt0); + + SecP521R1Field.Multiply(S1, G, t1, tt0); + + SecP521R1FieldElement X3 = new SecP521R1FieldElement(t4); + SecP521R1Field.Square(R, X3.x, tt0); + SecP521R1Field.Add(X3.x, G, X3.x); + SecP521R1Field.Subtract(X3.x, V, X3.x); + SecP521R1Field.Subtract(X3.x, V, X3.x); + + SecP521R1FieldElement Y3 = new SecP521R1FieldElement(G); + SecP521R1Field.Subtract(V, X3.x, Y3.x); + SecP521R1Field.Multiply(Y3.x, R, t2, tt0); + SecP521R1Field.Subtract(t2, t1, Y3.x); + + SecP521R1FieldElement Z3 = new SecP521R1FieldElement(H); + if (!Z1IsOne) + { + SecP521R1Field.Multiply(Z3.x, Z1.x, Z3.x, tt0); + } + if (!Z2IsOne) + { + SecP521R1Field.Multiply(Z3.x, Z2.x, Z3.x, tt0); + } + + ECFieldElement[] zs = new ECFieldElement[] { Z3 }; + + return new SecP521R1Point(curve, X3, Y3, zs); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + SecP521R1FieldElement Y1 = (SecP521R1FieldElement)this.RawYCoord; + if (Y1.IsZero) + return curve.Infinity; + + SecP521R1FieldElement X1 = (SecP521R1FieldElement)this.RawXCoord, Z1 = (SecP521R1FieldElement)this.RawZCoords[0]; + + uint[] tt0 = Nat.Create(33); + uint[] t1 = Nat.Create(17); + uint[] t2 = Nat.Create(17); + + uint[] Y1Squared = Nat.Create(17); + SecP521R1Field.Square(Y1.x, Y1Squared, tt0); + + uint[] T = Nat.Create(17); + SecP521R1Field.Square(Y1Squared, T, tt0); + + bool Z1IsOne = Z1.IsOne; + + uint[] Z1Squared = Z1.x; + if (!Z1IsOne) + { + Z1Squared = t2; + SecP521R1Field.Square(Z1.x, Z1Squared, tt0); + } + + SecP521R1Field.Subtract(X1.x, Z1Squared, t1); + + uint[] M = t2; + SecP521R1Field.Add(X1.x, Z1Squared, M); + SecP521R1Field.Multiply(M, t1, M, tt0); + Nat.AddBothTo(17, M, M, M); + SecP521R1Field.Reduce23(M); + + uint[] S = Y1Squared; + SecP521R1Field.Multiply(Y1Squared, X1.x, S, tt0); + Nat.ShiftUpBits(17, S, 2, 0); + SecP521R1Field.Reduce23(S); + + Nat.ShiftUpBits(17, T, 3, 0, t1); + SecP521R1Field.Reduce23(t1); + + SecP521R1FieldElement X3 = new SecP521R1FieldElement(T); + SecP521R1Field.Square(M, X3.x, tt0); + SecP521R1Field.Subtract(X3.x, S, X3.x); + SecP521R1Field.Subtract(X3.x, S, X3.x); + + SecP521R1FieldElement Y3 = new SecP521R1FieldElement(S); + SecP521R1Field.Subtract(S, X3.x, Y3.x); + SecP521R1Field.Multiply(Y3.x, M, Y3.x, tt0); + SecP521R1Field.Subtract(Y3.x, t1, Y3.x); + + SecP521R1FieldElement Z3 = new SecP521R1FieldElement(M); + SecP521R1Field.Twice(Y1.x, Z3.x); + if (!Z1IsOne) + { + SecP521R1Field.Multiply(Z3.x, Z1.x, Z3.x, tt0); + } + + return new SecP521R1Point(curve, X3, Y3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this == b) + return ThreeTimes(); + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECFieldElement Y1 = this.RawYCoord; + if (Y1.IsZero) + return b; + + return Twice().Add(b); + } + + public override ECPoint ThreeTimes() + { + if (this.IsInfinity || this.RawYCoord.IsZero) + return this; + + // NOTE: Be careful about recursions between TwicePlus and ThreeTimes + return Twice().Add(this); + } + + public override ECPoint Negate() + { + if (IsInfinity) + return this; + + return new SecP521R1Point(Curve, RawXCoord, RawYCoord.Negate(), RawZCoords); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1Point.cs.meta new file mode 100644 index 000000000..520fac68e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecP521R1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b600c3d896b3dd8488f61361cf3363a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113Field.cs new file mode 100644 index 000000000..1ca09ad45 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113Field.cs @@ -0,0 +1,268 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +#if NETCOREAPP3_0_OR_GREATER +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT113Field + { + private const ulong M49 = ulong.MaxValue >> 15; + private const ulong M57 = ulong.MaxValue >> 7; + + public static void Add(ulong[] x, ulong[] y, ulong[] z) + { + z[0] = x[0] ^ y[0]; + z[1] = x[1] ^ y[1]; + } + + public static void AddExt(ulong[] xx, ulong[] yy, ulong[] zz) + { + zz[0] = xx[0] ^ yy[0]; + zz[1] = xx[1] ^ yy[1]; + zz[2] = xx[2] ^ yy[2]; + zz[3] = xx[3] ^ yy[3]; + } + + public static void AddOne(ulong[] x, ulong[] z) + { + z[0] = x[0] ^ 1UL; + z[1] = x[1]; + } + + private static void AddTo(ulong[] x, ulong[] z) + { + z[0] ^= x[0]; + z[1] ^= x[1]; + } + + public static ulong[] FromBigInteger(BigInteger x) + { + return Nat.FromBigInteger64(113, x); + } + + public static void HalfTrace(ulong[] x, ulong[] z) + { + ulong[] tt = Nat128.CreateExt64(); + + Nat128.Copy64(x, z); + for (int i = 1; i < 113; i += 2) + { + ImplSquare(z, tt); + Reduce(tt, z); + ImplSquare(z, tt); + Reduce(tt, z); + AddTo(x, z); + } + } + + public static void Invert(ulong[] x, ulong[] z) + { + if (Nat128.IsZero64(x)) + throw new InvalidOperationException(); + + // Itoh-Tsujii inversion + + ulong[] t0 = Nat128.Create64(); + ulong[] t1 = Nat128.Create64(); + + Square(x, t0); + Multiply(t0, x, t0); + Square(t0, t0); + Multiply(t0, x, t0); + SquareN(t0, 3, t1); + Multiply(t1, t0, t1); + Square(t1, t1); + Multiply(t1, x, t1); + SquareN(t1, 7, t0); + Multiply(t0, t1, t0); + SquareN(t0, 14, t1); + Multiply(t1, t0, t1); + SquareN(t1, 28, t0); + Multiply(t0, t1, t0); + SquareN(t0, 56, t1); + Multiply(t1, t0, t1); + Square(t1, z); + } + + public static void Multiply(ulong[] x, ulong[] y, ulong[] z) + { + ulong[] tt = new ulong[8]; + ImplMultiply(x, y, tt); + Reduce(tt, z); + } + + public static void MultiplyAddToExt(ulong[] x, ulong[] y, ulong[] zz) + { + ulong[] tt = new ulong[8]; + ImplMultiply(x, y, tt); + AddExt(zz, tt, zz); + } + + public static void Reduce(ulong[] xx, ulong[] z) + { + ulong x0 = xx[0], x1 = xx[1], x2 = xx[2], x3 = xx[3]; + + x1 ^= (x3 << 15) ^ (x3 << 24); + x2 ^= (x3 >> 49) ^ (x3 >> 40); + + x0 ^= (x2 << 15) ^ (x2 << 24); + x1 ^= (x2 >> 49) ^ (x2 >> 40); + + ulong t = x1 >> 49; + z[0] = x0 ^ t ^ (t << 9); + z[1] = x1 & M49; + } + + public static void Reduce15(ulong[] z, int zOff) + { + ulong z1 = z[zOff + 1], t = z1 >> 49; + z[zOff ] ^= t ^ (t << 9); + z[zOff + 1] = z1 & M49; + } + + public static void Sqrt(ulong[] x, ulong[] z) + { + ulong c0 = Interleave.Unshuffle(x[0], x[1], out ulong e0); + + z[0] = e0 ^ (c0 << 57) ^ (c0 << 5); + z[1] = (c0 >> 7) ^ (c0 >> 59); + } + + public static void Square(ulong[] x, ulong[] z) + { + ulong[] tt = Nat128.CreateExt64(); + ImplSquare(x, tt); + Reduce(tt, z); + } + + public static void SquareAddToExt(ulong[] x, ulong[] zz) + { + ulong[] tt = Nat128.CreateExt64(); + ImplSquare(x, tt); + AddExt(zz, tt, zz); + } + + public static void SquareN(ulong[] x, int n, ulong[] z) + { + Debug.Assert(n > 0); + + ulong[] tt = Nat128.CreateExt64(); + ImplSquare(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + ImplSquare(z, tt); + Reduce(tt, z); + } + } + + public static uint Trace(ulong[] x) + { + // Non-zero-trace bits: 0 + return (uint)(x[0]) & 1U; + } + + protected static void ImplMultiply(ulong[] x, ulong[] y, ulong[] zz) + { +#if NETCOREAPP3_0_OR_GREATER + if (Pclmulqdq.IsSupported) + { + var X01 = Vector128.Create(x[0], x[1]); + var Y01 = Vector128.Create(y[0], y[1]); + + var Z01 = Pclmulqdq.CarrylessMultiply(X01, Y01, 0x00); + var Z12 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y01, 0x01), + Pclmulqdq.CarrylessMultiply(X01, Y01, 0x10)); + var Z23 = Pclmulqdq.CarrylessMultiply(X01, Y01, 0x11); + + zz[0] = Z01.GetElement(0); + zz[1] = Z01.GetElement(1) ^ Z12.GetElement(0); + zz[2] = Z23.GetElement(0) ^ Z12.GetElement(1); + zz[3] = Z23.GetElement(1); + return; + } +#endif + + /* + * "Three-way recursion" as described in "Batch binary Edwards", Daniel J. Bernstein. + */ + + ulong f0 = x[0], f1 = x[1]; + f1 = ((f0 >> 57) ^ (f1 << 7)) & M57; + f0 &= M57; + + ulong g0 = y[0], g1 = y[1]; + g1 = ((g0 >> 57) ^ (g1 << 7)) & M57; + g0 &= M57; + + ulong[] u = zz; + ulong[] H = new ulong[6]; + + ImplMulw(u, f0, g0, H, 0); // H(0) 57/56 bits + ImplMulw(u, f1, g1, H, 2); // H(INF) 57/54 bits + ImplMulw(u, f0 ^ f1, g0 ^ g1, H, 4); // H(1) 57/56 bits + + ulong r = H[1] ^ H[2]; + ulong z0 = H[0], + z3 = H[3], + z1 = H[4] ^ z0 ^ r, + z2 = H[5] ^ z3 ^ r; + + zz[0] = z0 ^ (z1 << 57); + zz[1] = (z1 >> 7) ^ (z2 << 50); + zz[2] = (z2 >> 14) ^ (z3 << 43); + zz[3] = (z3 >> 21); + } + + protected static void ImplMulw(ulong[] u, ulong x, ulong y, ulong[] z, int zOff) + { + Debug.Assert(x >> 57 == 0); + Debug.Assert(y >> 57 == 0); + + //u[0] = 0; + u[1] = y; + u[2] = u[1] << 1; + u[3] = u[2] ^ y; + u[4] = u[2] << 1; + u[5] = u[4] ^ y; + u[6] = u[3] << 1; + u[7] = u[6] ^ y; + + uint j = (uint)x; + ulong g, h = 0, l = u[j & 7]; + int k = 48; + do + { + j = (uint)(x >> k); + g = u[j & 7] + ^ u[(j >> 3) & 7] << 3 + ^ u[(j >> 6) & 7] << 6; + l ^= (g << k); + h ^= (g >> -k); + } + while ((k -= 9) > 0); + + h ^= ((x & 0x0100804020100800UL) & (ulong)(((long)y << 7) >> 63)) >> 8; + + Debug.Assert(h >> 49 == 0); + + z[zOff ] = l & M57; + z[zOff + 1] = (l >> 57) ^ (h << 7); + } + + protected static void ImplSquare(ulong[] x, ulong[] zz) + { + Interleave.Expand64To128(x, 0, 2, zz, 0); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113Field.cs.meta new file mode 100644 index 000000000..5f574fb84 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11da1b9450f57644fa56b5c007984298 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113FieldElement.cs new file mode 100644 index 000000000..96ff2277e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113FieldElement.cs @@ -0,0 +1,237 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT113FieldElement + : AbstractF2mFieldElement + { + protected internal readonly ulong[] x; + + public SecT113FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.BitLength > 113) + throw new ArgumentException("value invalid for SecT113FieldElement", "x"); + + this.x = SecT113Field.FromBigInteger(x); + } + + public SecT113FieldElement() + { + this.x = Nat128.Create64(); + } + + protected internal SecT113FieldElement(ulong[] x) + { + this.x = x; + } + + public override bool IsOne + { + get { return Nat128.IsOne64(x); } + } + + public override bool IsZero + { + get { return Nat128.IsZero64(x); } + } + + public override bool TestBitZero() + { + return (x[0] & 1L) != 0L; + } + + public override BigInteger ToBigInteger() + { + return Nat128.ToBigInteger64(x); + } + + public override string FieldName + { + get { return "SecT113Field"; } + } + + public override int FieldSize + { + get { return 113; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + ulong[] z = Nat128.Create64(); + SecT113Field.Add(x, ((SecT113FieldElement)b).x, z); + return new SecT113FieldElement(z); + } + + public override ECFieldElement AddOne() + { + ulong[] z = Nat128.Create64(); + SecT113Field.AddOne(x, z); + return new SecT113FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + // Addition and Subtraction are the same in F2m + return Add(b); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + ulong[] z = Nat128.Create64(); + SecT113Field.Multiply(x, ((SecT113FieldElement)b).x, z); + return new SecT113FieldElement(z); + } + + public override ECFieldElement MultiplyMinusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + return MultiplyPlusProduct(b, x, y); + } + + public override ECFieldElement MultiplyPlusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + ulong[] ax = this.x, bx = ((SecT113FieldElement)b).x; + ulong[] xx = ((SecT113FieldElement)x).x, yx = ((SecT113FieldElement)y).x; + + ulong[] tt = Nat128.CreateExt64(); + SecT113Field.MultiplyAddToExt(ax, bx, tt); + SecT113Field.MultiplyAddToExt(xx, yx, tt); + + ulong[] z = Nat128.Create64(); + SecT113Field.Reduce(tt, z); + return new SecT113FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + return Multiply(b.Invert()); + } + + public override ECFieldElement Negate() + { + return this; + } + + public override ECFieldElement Square() + { + ulong[] z = Nat128.Create64(); + SecT113Field.Square(x, z); + return new SecT113FieldElement(z); + } + + public override ECFieldElement SquareMinusProduct(ECFieldElement x, ECFieldElement y) + { + return SquarePlusProduct(x, y); + } + + public override ECFieldElement SquarePlusProduct(ECFieldElement x, ECFieldElement y) + { + ulong[] ax = this.x; + ulong[] xx = ((SecT113FieldElement)x).x, yx = ((SecT113FieldElement)y).x; + + ulong[] tt = Nat128.CreateExt64(); + SecT113Field.SquareAddToExt(ax, tt); + SecT113Field.MultiplyAddToExt(xx, yx, tt); + + ulong[] z = Nat128.Create64(); + SecT113Field.Reduce(tt, z); + return new SecT113FieldElement(z); + } + + public override ECFieldElement SquarePow(int pow) + { + if (pow < 1) + return this; + + ulong[] z = Nat128.Create64(); + SecT113Field.SquareN(x, pow, z); + return new SecT113FieldElement(z); + } + + public override ECFieldElement HalfTrace() + { + ulong[] z = Nat128.Create64(); + SecT113Field.HalfTrace(x, z); + return new SecT113FieldElement(z); + } + + public override bool HasFastTrace + { + get { return true; } + } + + public override int Trace() + { + return (int)SecT113Field.Trace(x); + } + + public override ECFieldElement Invert() + { + ulong[] z = Nat128.Create64(); + SecT113Field.Invert(x, z); + return new SecT113FieldElement(z); + } + + public override ECFieldElement Sqrt() + { + ulong[] z = Nat128.Create64(); + SecT113Field.Sqrt(x, z); + return new SecT113FieldElement(z); + } + + public virtual int Representation + { + get { return F2mFieldElement.Tpb; } + } + + public virtual int M + { + get { return 113; } + } + + public virtual int K1 + { + get { return 9; } + } + + public virtual int K2 + { + get { return 0; } + } + + public virtual int K3 + { + get { return 0; } + } + + public override bool Equals(object obj) + { + return Equals(obj as SecT113FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecT113FieldElement); + } + + public virtual bool Equals(SecT113FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat128.Eq64(x, other.x); + } + + public override int GetHashCode() + { + return 113009 ^ Arrays.GetHashCode(x, 0, 2); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113FieldElement.cs.meta new file mode 100644 index 000000000..b03b61cce --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2163552ee3494464490a708ac4a51d7f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R1Curve.cs new file mode 100644 index 000000000..cf20a3b47 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R1Curve.cs @@ -0,0 +1,181 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT113R1Curve + : AbstractF2mCurve + { + private const int SECT113R1_DEFAULT_COORDS = COORD_LAMBDA_PROJECTIVE; + private const int SECT113R1_FE_LONGS = 2; + private static readonly ECFieldElement[] SECT113R1_AFFINE_ZS = new ECFieldElement[] { new SecT113FieldElement(BigInteger.One) }; + + protected readonly SecT113R1Point m_infinity; + + public SecT113R1Curve() + : base(113, 9, 0, 0) + { + this.m_infinity = new SecT113R1Point(this, null, null); + + this.m_a = FromBigInteger(new BigInteger(1, Hex.DecodeStrict("003088250CA6E7C7FE649CE85820F7"))); + this.m_b = FromBigInteger(new BigInteger(1, Hex.DecodeStrict("00E8BEE4D3E2260744188BE0E9C723"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("0100000000000000D9CCEC8A39E56F")); + this.m_cofactor = BigInteger.Two; + + this.m_coord = SECT113R1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecT113R1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_LAMBDA_PROJECTIVE: + return true; + default: + return false; + } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return 113; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecT113FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecT113R1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecT113R1Point(this, x, y, zs); + } + + public override bool IsKoblitz + { + get { return false; } + } + + public virtual int M + { + get { return 113; } + } + + public virtual bool IsTrinomial + { + get { return true; } + } + + public virtual int K1 + { + get { return 9; } + } + + public virtual int K2 + { + get { return 0; } + } + + public virtual int K3 + { + get { return 0; } + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + ulong[] table = new ulong[len * SECT113R1_FE_LONGS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat128.Copy64(((SecT113FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECT113R1_FE_LONGS; + Nat128.Copy64(((SecT113FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECT113R1_FE_LONGS; + } + } + + return new SecT113R1LookupTable(this, table, len); + } + + private class SecT113R1LookupTable + : AbstractECLookupTable + { + private readonly SecT113R1Curve m_outer; + private readonly ulong[] m_table; + private readonly int m_size; + + internal SecT113R1LookupTable(SecT113R1Curve outer, ulong[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + ulong[] x = Nat128.Create64(), y = Nat128.Create64(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECT113R1_FE_LONGS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECT113R1_FE_LONGS + j] & MASK; + } + + pos += (SECT113R1_FE_LONGS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + ulong[] x = Nat128.Create64(), y = Nat128.Create64(); + int pos = index * SECT113R1_FE_LONGS * 2; + + for (int j = 0; j < SECT113R1_FE_LONGS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECT113R1_FE_LONGS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(ulong[] x, ulong[] y) + { + return m_outer.CreateRawPoint(new SecT113FieldElement(x), new SecT113FieldElement(y), SECT113R1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R1Curve.cs.meta new file mode 100644 index 000000000..3534cc627 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fc69e7fac16cabc41ba1012d78e95f33 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R1Point.cs new file mode 100644 index 000000000..652bc0af0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R1Point.cs @@ -0,0 +1,272 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT113R1Point + : AbstractF2mPoint + { + internal SecT113R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecT113R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecT113R1Point(null, AffineXCoord, AffineYCoord); + } + + public override ECFieldElement YCoord + { + get + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + if (this.IsInfinity || X.IsZero) + return L; + + // Y is actually Lambda (X + Y/X) here; convert to affine value on the fly + ECFieldElement Y = L.Add(X).Multiply(X); + + ECFieldElement Z = RawZCoords[0]; + if (!Z.IsOne) + { + Y = Y.Divide(Z); + } + + return Y; + } + } + + protected internal override bool CompressionYTilde + { + get + { + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return false; + + ECFieldElement Y = this.RawYCoord; + + // Y is actually Lambda (X + Y/X) here + return Y.TestBitZero() != X.TestBitZero(); + } + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + ECFieldElement X2 = b.RawXCoord; + + if (X1.IsZero) + { + if (X2.IsZero) + return curve.Infinity; + + return b.Add(this); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord, Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement U2 = X2, S2 = L2; + if (!Z1IsOne) + { + U2 = U2.Multiply(Z1); + S2 = S2.Multiply(Z1); + } + + bool Z2IsOne = Z2.IsOne; + ECFieldElement U1 = X1, S1 = L1; + if (!Z2IsOne) + { + U1 = U1.Multiply(Z2); + S1 = S1.Multiply(Z2); + } + + ECFieldElement A = S1.Add(S2); + ECFieldElement B = U1.Add(U2); + + if (B.IsZero) + { + if (A.IsZero) + return Twice(); + + return curve.Infinity; + } + + ECFieldElement X3, L3, Z3; + if (X2.IsZero) + { + // TODO This can probably be optimized quite a bit + ECPoint p = this.Normalize(); + X1 = p.XCoord; + ECFieldElement Y1 = p.YCoord; + + ECFieldElement Y2 = L2; + ECFieldElement L = Y1.Add(Y2).Divide(X1); + + X3 = L.Square().Add(L).Add(X1).Add(curve.A); + if (X3.IsZero) + { + return new SecT113R1Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + L3 = Y3.Divide(X3).Add(X3); + Z3 = curve.FromBigInteger(BigInteger.One); + } + else + { + B = B.Square(); + + ECFieldElement AU1 = A.Multiply(U1); + ECFieldElement AU2 = A.Multiply(U2); + + X3 = AU1.Multiply(AU2); + if (X3.IsZero) + { + return new SecT113R1Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement ABZ2 = A.Multiply(B); + if (!Z2IsOne) + { + ABZ2 = ABZ2.Multiply(Z2); + } + + L3 = AU2.Add(B).SquarePlusProduct(ABZ2, L1.Add(Z1)); + + Z3 = ABZ2; + if (!Z1IsOne) + { + Z3 = Z3.Multiply(Z1); + } + } + + return new SecT113R1Point(curve, X3, L3, new ECFieldElement[]{ Z3 }); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return curve.Infinity; + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement L1Z1 = Z1IsOne ? L1 : L1.Multiply(Z1); + ECFieldElement Z1Sq = Z1IsOne ? Z1 : Z1.Square(); + ECFieldElement a = curve.A; + ECFieldElement aZ1Sq = Z1IsOne ? a : a.Multiply(Z1Sq); + ECFieldElement T = L1.Square().Add(L1Z1).Add(aZ1Sq); + if (T.IsZero) + { + return new SecT113R1Point(curve, T, curve.B.Sqrt()); + } + + ECFieldElement X3 = T.Square(); + ECFieldElement Z3 = Z1IsOne ? T : T.Multiply(Z1Sq); + + ECFieldElement X1Z1 = Z1IsOne ? X1 : X1.Multiply(Z1); + ECFieldElement L3 = X1Z1.SquarePlusProduct(T, L1Z1).Add(X3).Add(Z3); + + return new SecT113R1Point(curve, X3, L3, new ECFieldElement[]{ Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return b; + } + + ECFieldElement X2 = b.RawXCoord, Z2 = b.RawZCoords[0]; + if (X2.IsZero || !Z2.IsOne) + { + return Twice().Add(b); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord; + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement L1Sq = L1.Square(); + ECFieldElement Z1Sq = Z1.Square(); + ECFieldElement L1Z1 = L1.Multiply(Z1); + + ECFieldElement T = curve.A.Multiply(Z1Sq).Add(L1Sq).Add(L1Z1); + ECFieldElement L2plus1 = L2.AddOne(); + ECFieldElement A = curve.A.Add(L2plus1).Multiply(Z1Sq).Add(L1Sq).MultiplyPlusProduct(T, X1Sq, Z1Sq); + ECFieldElement X2Z1Sq = X2.Multiply(Z1Sq); + ECFieldElement B = X2Z1Sq.Add(T).Square(); + + if (B.IsZero) + { + if (A.IsZero) + return b.Twice(); + + return curve.Infinity; + } + + if (A.IsZero) + { + return new SecT113R1Point(curve, A, curve.B.Sqrt()); + } + + ECFieldElement X3 = A.Square().Multiply(X2Z1Sq); + ECFieldElement Z3 = A.Multiply(B).Multiply(Z1Sq); + ECFieldElement L3 = A.Add(B).Square().MultiplyPlusProduct(T, L2plus1, Z3); + + return new SecT113R1Point(curve, X3, L3, new ECFieldElement[]{ Z3 }); + } + + public override ECPoint Negate() + { + if (IsInfinity) + return this; + + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return this; + + // L is actually Lambda (X + Y/X) here + ECFieldElement L = this.RawYCoord, Z = this.RawZCoords[0]; + return new SecT113R1Point(Curve, X, L.Add(Z), new ECFieldElement[]{ Z }); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R1Point.cs.meta new file mode 100644 index 000000000..57ebe8236 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a8336d94ed396554ea8064dc7cfddf76 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R2Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R2Curve.cs new file mode 100644 index 000000000..02dce235c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R2Curve.cs @@ -0,0 +1,181 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT113R2Curve + : AbstractF2mCurve + { + private const int SECT113R2_DEFAULT_COORDS = COORD_LAMBDA_PROJECTIVE; + private const int SECT113R2_FE_LONGS = 2; + private static readonly ECFieldElement[] SECT113R2_AFFINE_ZS = new ECFieldElement[] { new SecT113FieldElement(BigInteger.One) }; + + protected readonly SecT113R2Point m_infinity; + + public SecT113R2Curve() + : base(113, 9, 0, 0) + { + this.m_infinity = new SecT113R2Point(this, null, null); + + this.m_a = FromBigInteger(new BigInteger(1, Hex.DecodeStrict("00689918DBEC7E5A0DD6DFC0AA55C7"))); + this.m_b = FromBigInteger(new BigInteger(1, Hex.DecodeStrict("0095E9A9EC9B297BD4BF36E059184F"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("010000000000000108789B2496AF93")); + this.m_cofactor = BigInteger.Two; + + this.m_coord = SECT113R2_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecT113R2Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_LAMBDA_PROJECTIVE: + return true; + default: + return false; + } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return 113; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecT113FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecT113R2Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecT113R2Point(this, x, y, zs); + } + + public override bool IsKoblitz + { + get { return false; } + } + + public virtual int M + { + get { return 113; } + } + + public virtual bool IsTrinomial + { + get { return true; } + } + + public virtual int K1 + { + get { return 9; } + } + + public virtual int K2 + { + get { return 0; } + } + + public virtual int K3 + { + get { return 0; } + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + ulong[] table = new ulong[len * SECT113R2_FE_LONGS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat128.Copy64(((SecT113FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECT113R2_FE_LONGS; + Nat128.Copy64(((SecT113FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECT113R2_FE_LONGS; + } + } + + return new SecT113R2LookupTable(this, table, len); + } + + private class SecT113R2LookupTable + : AbstractECLookupTable + { + private readonly SecT113R2Curve m_outer; + private readonly ulong[] m_table; + private readonly int m_size; + + internal SecT113R2LookupTable(SecT113R2Curve outer, ulong[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + ulong[] x = Nat128.Create64(), y = Nat128.Create64(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECT113R2_FE_LONGS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECT113R2_FE_LONGS + j] & MASK; + } + + pos += (SECT113R2_FE_LONGS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + ulong[] x = Nat128.Create64(), y = Nat128.Create64(); + int pos = index * SECT113R2_FE_LONGS * 2; + + for (int j = 0; j < SECT113R2_FE_LONGS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECT113R2_FE_LONGS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(ulong[] x, ulong[] y) + { + return m_outer.CreateRawPoint(new SecT113FieldElement(x), new SecT113FieldElement(y), SECT113R2_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R2Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R2Curve.cs.meta new file mode 100644 index 000000000..39c5cd0e6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R2Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8a90d133b57e6e747b05545dad95da40 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R2Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R2Point.cs new file mode 100644 index 000000000..b5d11ee5c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R2Point.cs @@ -0,0 +1,282 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT113R2Point + : AbstractF2mPoint + { + internal SecT113R2Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecT113R2Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecT113R2Point(null, AffineXCoord, AffineYCoord); + } + + public override ECFieldElement YCoord + { + get + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + if (this.IsInfinity || X.IsZero) + return L; + + // Y is actually Lambda (X + Y/X) here; convert to affine value on the fly + ECFieldElement Y = L.Add(X).Multiply(X); + + ECFieldElement Z = RawZCoords[0]; + if (!Z.IsOne) + { + Y = Y.Divide(Z); + } + + return Y; + } + } + + protected internal override bool CompressionYTilde + { + get + { + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return false; + + ECFieldElement Y = this.RawYCoord; + + // Y is actually Lambda (X + Y/X) here + return Y.TestBitZero() != X.TestBitZero(); + } + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + { + return b; + } + if (b.IsInfinity) + { + return this; + } + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + ECFieldElement X2 = b.RawXCoord; + + if (X1.IsZero) + { + if (X2.IsZero) + return curve.Infinity; + + return b.Add(this); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord, Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement U2 = X2, S2 = L2; + if (!Z1IsOne) + { + U2 = U2.Multiply(Z1); + S2 = S2.Multiply(Z1); + } + + bool Z2IsOne = Z2.IsOne; + ECFieldElement U1 = X1, S1 = L1; + if (!Z2IsOne) + { + U1 = U1.Multiply(Z2); + S1 = S1.Multiply(Z2); + } + + ECFieldElement A = S1.Add(S2); + ECFieldElement B = U1.Add(U2); + + if (B.IsZero) + { + if (A.IsZero) + return Twice(); + + return curve.Infinity; + } + + ECFieldElement X3, L3, Z3; + if (X2.IsZero) + { + // TODO This can probably be optimized quite a bit + ECPoint p = this.Normalize(); + X1 = p.XCoord; + ECFieldElement Y1 = p.YCoord; + + ECFieldElement Y2 = L2; + ECFieldElement L = Y1.Add(Y2).Divide(X1); + + X3 = L.Square().Add(L).Add(X1).Add(curve.A); + if (X3.IsZero) + { + return new SecT113R2Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + L3 = Y3.Divide(X3).Add(X3); + Z3 = curve.FromBigInteger(BigInteger.One); + } + else + { + B = B.Square(); + + ECFieldElement AU1 = A.Multiply(U1); + ECFieldElement AU2 = A.Multiply(U2); + + X3 = AU1.Multiply(AU2); + if (X3.IsZero) + { + return new SecT113R2Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement ABZ2 = A.Multiply(B); + if (!Z2IsOne) + { + ABZ2 = ABZ2.Multiply(Z2); + } + + L3 = AU2.Add(B).SquarePlusProduct(ABZ2, L1.Add(Z1)); + + Z3 = ABZ2; + if (!Z1IsOne) + { + Z3 = Z3.Multiply(Z1); + } + } + + return new SecT113R2Point(curve, X3, L3, new ECFieldElement[]{ Z3 }); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + { + return this; + } + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return curve.Infinity; + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement L1Z1 = Z1IsOne ? L1 : L1.Multiply(Z1); + ECFieldElement Z1Sq = Z1IsOne ? Z1 : Z1.Square(); + ECFieldElement a = curve.A; + ECFieldElement aZ1Sq = Z1IsOne ? a : a.Multiply(Z1Sq); + ECFieldElement T = L1.Square().Add(L1Z1).Add(aZ1Sq); + if (T.IsZero) + { + return new SecT113R2Point(curve, T, curve.B.Sqrt()); + } + + ECFieldElement X3 = T.Square(); + ECFieldElement Z3 = Z1IsOne ? T : T.Multiply(Z1Sq); + + ECFieldElement X1Z1 = Z1IsOne ? X1 : X1.Multiply(Z1); + ECFieldElement L3 = X1Z1.SquarePlusProduct(T, L1Z1).Add(X3).Add(Z3); + + return new SecT113R2Point(curve, X3, L3, new ECFieldElement[]{ Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this.IsInfinity) + { + return b; + } + if (b.IsInfinity) + { + return Twice(); + } + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return b; + } + + ECFieldElement X2 = b.RawXCoord, Z2 = b.RawZCoords[0]; + if (X2.IsZero || !Z2.IsOne) + { + return Twice().Add(b); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord; + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement L1Sq = L1.Square(); + ECFieldElement Z1Sq = Z1.Square(); + ECFieldElement L1Z1 = L1.Multiply(Z1); + + ECFieldElement T = curve.A.Multiply(Z1Sq).Add(L1Sq).Add(L1Z1); + ECFieldElement L2plus1 = L2.AddOne(); + ECFieldElement A = curve.A.Add(L2plus1).Multiply(Z1Sq).Add(L1Sq).MultiplyPlusProduct(T, X1Sq, Z1Sq); + ECFieldElement X2Z1Sq = X2.Multiply(Z1Sq); + ECFieldElement B = X2Z1Sq.Add(T).Square(); + + if (B.IsZero) + { + if (A.IsZero) + return b.Twice(); + + return curve.Infinity; + } + + if (A.IsZero) + { + return new SecT113R2Point(curve, A, curve.B.Sqrt()); + } + + ECFieldElement X3 = A.Square().Multiply(X2Z1Sq); + ECFieldElement Z3 = A.Multiply(B).Multiply(Z1Sq); + ECFieldElement L3 = A.Add(B).Square().MultiplyPlusProduct(T, L2plus1, Z3); + + return new SecT113R2Point(curve, X3, L3, new ECFieldElement[]{ Z3 }); + } + + public override ECPoint Negate() + { + if (IsInfinity) + return this; + + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return this; + + // L is actually Lambda (X + Y/X) here + ECFieldElement L = this.RawYCoord, Z = this.RawZCoords[0]; + return new SecT113R2Point(Curve, X, L.Add(Z), new ECFieldElement[]{ Z }); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R2Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R2Point.cs.meta new file mode 100644 index 000000000..d30e75492 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT113R2Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 28953e22bdd1e22418f49b57246b6536 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131Field.cs new file mode 100644 index 000000000..2292d52a8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131Field.cs @@ -0,0 +1,380 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +#if NETCOREAPP3_0_OR_GREATER +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT131Field + { + private const ulong M03 = ulong.MaxValue >> 61; + private const ulong M44 = ulong.MaxValue >> 20; + + private static readonly ulong[] ROOT_Z = new ulong[]{ 0x26BC4D789AF13523UL, 0x26BC4D789AF135E2UL, 0x6UL }; + + public static void Add(ulong[] x, ulong[] y, ulong[] z) + { + z[0] = x[0] ^ y[0]; + z[1] = x[1] ^ y[1]; + z[2] = x[2] ^ y[2]; + } + + public static void AddExt(ulong[] xx, ulong[] yy, ulong[] zz) + { + zz[0] = xx[0] ^ yy[0]; + zz[1] = xx[1] ^ yy[1]; + zz[2] = xx[2] ^ yy[2]; + zz[3] = xx[3] ^ yy[3]; + zz[4] = xx[4] ^ yy[4]; + } + + public static void AddOne(ulong[] x, ulong[] z) + { + z[0] = x[0] ^ 1UL; + z[1] = x[1]; + z[2] = x[2]; + } + + private static void AddTo(ulong[] x, ulong[] z) + { + z[0] ^= x[0]; + z[1] ^= x[1]; + z[2] ^= x[2]; + } + + public static ulong[] FromBigInteger(BigInteger x) + { + return Nat.FromBigInteger64(131, x); + } + + public static void HalfTrace(ulong[] x, ulong[] z) + { + ulong[] tt = Nat.Create64(5); + + Nat192.Copy64(x, z); + for (int i = 1; i < 131; i += 2) + { + ImplSquare(z, tt); + Reduce(tt, z); + ImplSquare(z, tt); + Reduce(tt, z); + AddTo(x, z); + } + } + + public static void Invert(ulong[] x, ulong[] z) + { + if (Nat192.IsZero64(x)) + throw new InvalidOperationException(); + + // Itoh-Tsujii inversion + + ulong[] t0 = Nat192.Create64(); + ulong[] t1 = Nat192.Create64(); + + Square(x, t0); + Multiply(t0, x, t0); + SquareN(t0, 2, t1); + Multiply(t1, t0, t1); + SquareN(t1, 4, t0); + Multiply(t0, t1, t0); + SquareN(t0, 8, t1); + Multiply(t1, t0, t1); + SquareN(t1, 16, t0); + Multiply(t0, t1, t0); + SquareN(t0, 32, t1); + Multiply(t1, t0, t1); + Square(t1, t1); + Multiply(t1, x, t1); + SquareN(t1, 65, t0); + Multiply(t0, t1, t0); + Square(t0, z); + } + + public static void Multiply(ulong[] x, ulong[] y, ulong[] z) + { + ulong[] tt = new ulong[8]; + ImplMultiply(x, y, tt); + Reduce(tt, z); + } + + public static void MultiplyAddToExt(ulong[] x, ulong[] y, ulong[] zz) + { + ulong[] tt = new ulong[8]; + ImplMultiply(x, y, tt); + AddExt(zz, tt, zz); + } + + public static void Reduce(ulong[] xx, ulong[] z) + { + ulong x0 = xx[0], x1 = xx[1], x2 = xx[2], x3 = xx[3], x4 = xx[4]; + + x1 ^= (x4 << 61) ^ (x4 << 63); + x2 ^= (x4 >> 3) ^ (x4 >> 1) ^ x4 ^ (x4 << 5); + x3 ^= (x4 >> 59); + + x0 ^= (x3 << 61) ^ (x3 << 63); + x1 ^= (x3 >> 3) ^ (x3 >> 1) ^ x3 ^ (x3 << 5); + x2 ^= (x3 >> 59); + + ulong t = x2 >> 3; + z[0] = x0 ^ t ^ (t << 2) ^ (t << 3) ^ (t << 8); + z[1] = x1 ^ (t >> 56); + z[2] = x2 & M03; + } + + public static void Reduce61(ulong[] z, int zOff) + { + ulong z2 = z[zOff + 2], t = z2 >> 3; + z[zOff ] ^= t ^ (t << 2) ^ (t << 3) ^ (t << 8); + z[zOff + 1] ^= (t >> 56); + z[zOff + 2] = z2 & M03; + } + + public static void Sqrt(ulong[] x, ulong[] z) + { + ulong[] odd = Nat192.Create64(); + + odd[0] = Interleave.Unshuffle(x[0], x[1], out ulong e0); + odd[1] = Interleave.Unshuffle(x[2] , out ulong e1); + + Multiply(odd, ROOT_Z, z); + + z[0] ^= e0; + z[1] ^= e1; + } + + public static void Square(ulong[] x, ulong[] z) + { + ulong[] tt = Nat.Create64(5); + ImplSquare(x, tt); + Reduce(tt, z); + } + + public static void SquareAddToExt(ulong[] x, ulong[] zz) + { + ulong[] tt = Nat.Create64(5); + ImplSquare(x, tt); + AddExt(zz, tt, zz); + } + + public static void SquareN(ulong[] x, int n, ulong[] z) + { + Debug.Assert(n > 0); + + ulong[] tt = Nat.Create64(5); + ImplSquare(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + ImplSquare(z, tt); + Reduce(tt, z); + } + } + + public static uint Trace(ulong[] x) + { + // Non-zero-trace bits: 0, 123, 129 + return (uint)(x[0] ^ (x[1] >> 59) ^ (x[2] >> 1)) & 1U; + } + + protected static void ImplCompactExt(ulong[] zz) + { + ulong z0 = zz[0], z1 = zz[1], z2 = zz[2], z3 = zz[3], z4 = zz[4], z5 = zz[5]; + zz[0] = z0 ^ (z1 << 44); + zz[1] = (z1 >> 20) ^ (z2 << 24); + zz[2] = (z2 >> 40) ^ (z3 << 4) + ^ (z4 << 48); + zz[3] = (z3 >> 60) ^ (z5 << 28) + ^ (z4 >> 16); + zz[4] = (z5 >> 36); + zz[5] = 0; + } + + protected static void ImplMultiply(ulong[] x, ulong[] y, ulong[] zz) + { +#if NETCOREAPP3_0_OR_GREATER + if (Pclmulqdq.IsSupported) + { + var X01 = Vector128.Create(x[0], x[1]); + var X2_ = Vector128.CreateScalar(x[2]); + var Y01 = Vector128.Create(y[0], y[1]); + var Y2_ = Vector128.CreateScalar(y[2]); + + var Z01 = Pclmulqdq.CarrylessMultiply(X01, Y01, 0x00); + var Z12 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y01, 0x01), + Pclmulqdq.CarrylessMultiply(X01, Y01, 0x10)); + var Z23 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y2_, 0x00), + Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y01, 0x11), + Pclmulqdq.CarrylessMultiply(X2_, Y01, 0x00))); + var Z34 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y2_, 0x01), + Pclmulqdq.CarrylessMultiply(X2_, Y01, 0x10)); + var Z4_ = Pclmulqdq.CarrylessMultiply(X2_, Y2_, 0x00); + + zz[0] = Z01.GetElement(0); + zz[1] = Z01.GetElement(1) ^ Z12.GetElement(0); + zz[2] = Z23.GetElement(0) ^ Z12.GetElement(1); + zz[3] = Z23.GetElement(1) ^ Z34.GetElement(0); + zz[4] = Z4_.GetElement(0) ^ Z34.GetElement(1); + return; + } +#endif + + /* + * "Five-way recursion" as described in "Batch binary Edwards", Daniel J. Bernstein. + */ + + ulong f0 = x[0], f1 = x[1], f2 = x[2]; + f2 = ((f1 >> 24) ^ (f2 << 40)) & M44; + f1 = ((f0 >> 44) ^ (f1 << 20)) & M44; + f0 &= M44; + + ulong g0 = y[0], g1 = y[1], g2 = y[2]; + g2 = ((g1 >> 24) ^ (g2 << 40)) & M44; + g1 = ((g0 >> 44) ^ (g1 << 20)) & M44; + g0 &= M44; + + ulong[] u = zz; + ulong[] H = new ulong[10]; + + ImplMulw(u, f0, g0, H, 0); // H(0) 44/43 bits + ImplMulw(u, f2, g2, H, 2); // H(INF) 44/41 bits + + ulong t0 = f0 ^ f1 ^ f2; + ulong t1 = g0 ^ g1 ^ g2; + + ImplMulw(u, t0, t1, H, 4); // H(1) 44/43 bits + + ulong t2 = (f1 << 1) ^ (f2 << 2); + ulong t3 = (g1 << 1) ^ (g2 << 2); + + ImplMulw(u, f0 ^ t2, g0 ^ t3, H, 6); // H(t) 44/45 bits + ImplMulw(u, t0 ^ t2, t1 ^ t3, H, 8); // H(t + 1) 44/45 bits + + ulong t4 = H[6] ^ H[8]; + ulong t5 = H[7] ^ H[9]; + + Debug.Assert(t5 >> 44 == 0); + + // Calculate V + ulong v0 = (t4 << 1) ^ H[6]; + ulong v1 = t4 ^ (t5 << 1) ^ H[7]; + ulong v2 = t5; + + // Calculate U + ulong u0 = H[0]; + ulong u1 = H[1] ^ H[0] ^ H[4]; + ulong u2 = H[1] ^ H[5]; + + // Calculate W + ulong w0 = u0 ^ v0 ^ (H[2] << 4) ^ (H[2] << 1); + ulong w1 = u1 ^ v1 ^ (H[3] << 4) ^ (H[3] << 1); + ulong w2 = u2 ^ v2; + + // Propagate carries + w1 ^= (w0 >> 44); w0 &= M44; + w2 ^= (w1 >> 44); w1 &= M44; + + Debug.Assert((w0 & 1UL) == 0); + + // Divide W by t + + w0 = (w0 >> 1) ^ ((w1 & 1UL) << 43); + w1 = (w1 >> 1) ^ ((w2 & 1UL) << 43); + w2 = (w2 >> 1); + + // Divide W by (t + 1) + + w0 ^= (w0 << 1); + w0 ^= (w0 << 2); + w0 ^= (w0 << 4); + w0 ^= (w0 << 8); + w0 ^= (w0 << 16); + w0 ^= (w0 << 32); + + w0 &= M44; w1 ^= (w0 >> 43); + + w1 ^= (w1 << 1); + w1 ^= (w1 << 2); + w1 ^= (w1 << 4); + w1 ^= (w1 << 8); + w1 ^= (w1 << 16); + w1 ^= (w1 << 32); + + w1 &= M44; w2 ^= (w1 >> 43); + + w2 ^= (w2 << 1); + w2 ^= (w2 << 2); + w2 ^= (w2 << 4); + w2 ^= (w2 << 8); + w2 ^= (w2 << 16); + w2 ^= (w2 << 32); + + Debug.Assert(w2 >> 42 == 0); + + zz[0] = u0; + zz[1] = u1 ^ w0 ^ H[2]; + zz[2] = u2 ^ w1 ^ w0 ^ H[3]; + zz[3] = w2 ^ w1; + zz[4] = w2 ^ H[2]; + zz[5] = H[3]; + + ImplCompactExt(zz); + } + + protected static void ImplMulw(ulong[] u, ulong x, ulong y, ulong[] z, int zOff) + { + Debug.Assert(x >> 45 == 0); + Debug.Assert(y >> 45 == 0); + + //u[0] = 0; + u[1] = y; + u[2] = u[1] << 1; + u[3] = u[2] ^ y; + u[4] = u[2] << 1; + u[5] = u[4] ^ y; + u[6] = u[3] << 1; + u[7] = u[6] ^ y; + + uint j = (uint)x; + ulong g, h = 0, l = u[j & 7] + ^ u[(j >> 3) & 7] << 3 + ^ u[(j >> 6) & 7] << 6 + ^ u[(j >> 9) & 7] << 9 + ^ u[(j >> 12) & 7] << 12; + int k = 30; + do + { + j = (uint)(x >> k); + g = u[j & 7] + ^ u[(j >> 3) & 7] << 3 + ^ u[(j >> 6) & 7] << 6 + ^ u[(j >> 9) & 7] << 9 + ^ u[(j >> 12) & 7] << 12; + l ^= (g << k); + h ^= (g >> -k); + } + while ((k -= 15) > 0); + + Debug.Assert(h >> 25 == 0); + + z[zOff ] = l & M44; + z[zOff + 1] = (l >> 44) ^ (h << 20); + } + + protected static void ImplSquare(ulong[] x, ulong[] zz) + { + Interleave.Expand64To128(x, 0, 2, zz, 0); + zz[4] = Interleave.Expand8to16((uint)x[2]); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131Field.cs.meta new file mode 100644 index 000000000..5280dd93a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 527c1d05582060249ab62c9119ba6f62 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131FieldElement.cs new file mode 100644 index 000000000..81be57248 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131FieldElement.cs @@ -0,0 +1,237 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT131FieldElement + : AbstractF2mFieldElement + { + protected internal readonly ulong[] x; + + public SecT131FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.BitLength > 131) + throw new ArgumentException("value invalid for SecT131FieldElement", "x"); + + this.x = SecT131Field.FromBigInteger(x); + } + + public SecT131FieldElement() + { + this.x = Nat192.Create64(); + } + + protected internal SecT131FieldElement(ulong[] x) + { + this.x = x; + } + + public override bool IsOne + { + get { return Nat192.IsOne64(x); } + } + + public override bool IsZero + { + get { return Nat192.IsZero64(x); } + } + + public override bool TestBitZero() + { + return (x[0] & 1UL) != 0UL; + } + + public override BigInteger ToBigInteger() + { + return Nat192.ToBigInteger64(x); + } + + public override string FieldName + { + get { return "SecT131Field"; } + } + + public override int FieldSize + { + get { return 131; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + ulong[] z = Nat192.Create64(); + SecT131Field.Add(x, ((SecT131FieldElement)b).x, z); + return new SecT131FieldElement(z); + } + + public override ECFieldElement AddOne() + { + ulong[] z = Nat192.Create64(); + SecT131Field.AddOne(x, z); + return new SecT131FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + // Addition and Subtraction are the same in F2m + return Add(b); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + ulong[] z = Nat192.Create64(); + SecT131Field.Multiply(x, ((SecT131FieldElement)b).x, z); + return new SecT131FieldElement(z); + } + + public override ECFieldElement MultiplyMinusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + return MultiplyPlusProduct(b, x, y); + } + + public override ECFieldElement MultiplyPlusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + ulong[] ax = this.x, bx = ((SecT131FieldElement)b).x; + ulong[] xx = ((SecT131FieldElement)x).x, yx = ((SecT131FieldElement)y).x; + + ulong[] tt = Nat.Create64(5); + SecT131Field.MultiplyAddToExt(ax, bx, tt); + SecT131Field.MultiplyAddToExt(xx, yx, tt); + + ulong[] z = Nat192.Create64(); + SecT131Field.Reduce(tt, z); + return new SecT131FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + return Multiply(b.Invert()); + } + + public override ECFieldElement Negate() + { + return this; + } + + public override ECFieldElement Square() + { + ulong[] z = Nat192.Create64(); + SecT131Field.Square(x, z); + return new SecT131FieldElement(z); + } + + public override ECFieldElement SquareMinusProduct(ECFieldElement x, ECFieldElement y) + { + return SquarePlusProduct(x, y); + } + + public override ECFieldElement SquarePlusProduct(ECFieldElement x, ECFieldElement y) + { + ulong[] ax = this.x; + ulong[] xx = ((SecT131FieldElement)x).x, yx = ((SecT131FieldElement)y).x; + + ulong[] tt = Nat.Create64(5); + SecT131Field.SquareAddToExt(ax, tt); + SecT131Field.MultiplyAddToExt(xx, yx, tt); + + ulong[] z = Nat192.Create64(); + SecT131Field.Reduce(tt, z); + return new SecT131FieldElement(z); + } + + public override ECFieldElement SquarePow(int pow) + { + if (pow < 1) + return this; + + ulong[] z = Nat192.Create64(); + SecT131Field.SquareN(x, pow, z); + return new SecT131FieldElement(z); + } + + public override ECFieldElement HalfTrace() + { + ulong[] z = Nat192.Create64(); + SecT131Field.HalfTrace(x, z); + return new SecT131FieldElement(z); + } + + public override bool HasFastTrace + { + get { return true; } + } + + public override int Trace() + { + return (int)SecT131Field.Trace(x); + } + + public override ECFieldElement Invert() + { + ulong[] z = Nat192.Create64(); + SecT131Field.Invert(x, z); + return new SecT131FieldElement(z); + } + + public override ECFieldElement Sqrt() + { + ulong[] z = Nat192.Create64(); + SecT131Field.Sqrt(x, z); + return new SecT131FieldElement(z); + } + + public virtual int Representation + { + get { return F2mFieldElement.Ppb; } + } + + public virtual int M + { + get { return 131; } + } + + public virtual int K1 + { + get { return 2; } + } + + public virtual int K2 + { + get { return 3; } + } + + public virtual int K3 + { + get { return 8; } + } + + public override bool Equals(object obj) + { + return Equals(obj as SecT131FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecT131FieldElement); + } + + public virtual bool Equals(SecT131FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat192.Eq64(x, other.x); + } + + public override int GetHashCode() + { + return 131832 ^ Arrays.GetHashCode(x, 0, 3); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131FieldElement.cs.meta new file mode 100644 index 000000000..cd0aceeb3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 72de0413a2e13924c819e108bbdaa5e9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R1Curve.cs new file mode 100644 index 000000000..07751796f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R1Curve.cs @@ -0,0 +1,181 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT131R1Curve + : AbstractF2mCurve + { + private const int SECT131R1_DEFAULT_COORDS = COORD_LAMBDA_PROJECTIVE; + private const int SECT131R1_FE_LONGS = 3; + private static readonly ECFieldElement[] SECT131R1_AFFINE_ZS = new ECFieldElement[] { new SecT131FieldElement(BigInteger.One) }; + + protected readonly SecT131R1Point m_infinity; + + public SecT131R1Curve() + : base(131, 2, 3, 8) + { + this.m_infinity = new SecT131R1Point(this, null, null); + + this.m_a = FromBigInteger(new BigInteger(1, Hex.DecodeStrict("07A11B09A76B562144418FF3FF8C2570B8"))); + this.m_b = FromBigInteger(new BigInteger(1, Hex.DecodeStrict("0217C05610884B63B9C6C7291678F9D341"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("0400000000000000023123953A9464B54D")); + this.m_cofactor = BigInteger.Two; + + this.m_coord = SECT131R1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecT131R1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_LAMBDA_PROJECTIVE: + return true; + default: + return false; + } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return 131; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecT131FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecT131R1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecT131R1Point(this, x, y, zs); + } + + public override bool IsKoblitz + { + get { return false; } + } + + public virtual int M + { + get { return 131; } + } + + public virtual bool IsTrinomial + { + get { return false; } + } + + public virtual int K1 + { + get { return 2; } + } + + public virtual int K2 + { + get { return 3; } + } + + public virtual int K3 + { + get { return 8; } + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + ulong[] table = new ulong[len * SECT131R1_FE_LONGS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat192.Copy64(((SecT131FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECT131R1_FE_LONGS; + Nat192.Copy64(((SecT131FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECT131R1_FE_LONGS; + } + } + + return new SecT131R1LookupTable(this, table, len); + } + + private class SecT131R1LookupTable + : AbstractECLookupTable + { + private readonly SecT131R1Curve m_outer; + private readonly ulong[] m_table; + private readonly int m_size; + + internal SecT131R1LookupTable(SecT131R1Curve outer, ulong[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + ulong[] x = Nat192.Create64(), y = Nat192.Create64(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECT131R1_FE_LONGS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECT131R1_FE_LONGS + j] & MASK; + } + + pos += (SECT131R1_FE_LONGS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + ulong[] x = Nat192.Create64(), y = Nat192.Create64(); + int pos = index * SECT131R1_FE_LONGS * 2; + + for (int j = 0; j < SECT131R1_FE_LONGS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECT131R1_FE_LONGS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(ulong[] x, ulong[] y) + { + return m_outer.CreateRawPoint(new SecT131FieldElement(x), new SecT131FieldElement(y), SECT131R1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R1Curve.cs.meta new file mode 100644 index 000000000..628cdb61f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d0261827bffcf40469797c5940ecde2a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R1Point.cs new file mode 100644 index 000000000..f434d3061 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R1Point.cs @@ -0,0 +1,278 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT131R1Point + : AbstractF2mPoint + { + internal SecT131R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecT131R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecT131R1Point(null, AffineXCoord, AffineYCoord); + } + + public override ECFieldElement YCoord + { + get + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + if (this.IsInfinity || X.IsZero) + return L; + + // Y is actually Lambda (X + Y/X) here; convert to affine value on the fly + ECFieldElement Y = L.Add(X).Multiply(X); + + ECFieldElement Z = RawZCoords[0]; + if (!Z.IsOne) + { + Y = Y.Divide(Z); + } + + return Y; + } + } + + protected internal override bool CompressionYTilde + { + get + { + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return false; + + ECFieldElement Y = this.RawYCoord; + + // Y is actually Lambda (X + Y/X) here + return Y.TestBitZero() != X.TestBitZero(); + } + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + ECFieldElement X2 = b.RawXCoord; + + if (X1.IsZero) + { + if (X2.IsZero) + return curve.Infinity; + + return b.Add(this); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord, Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement U2 = X2, S2 = L2; + if (!Z1IsOne) + { + U2 = U2.Multiply(Z1); + S2 = S2.Multiply(Z1); + } + + bool Z2IsOne = Z2.IsOne; + ECFieldElement U1 = X1, S1 = L1; + if (!Z2IsOne) + { + U1 = U1.Multiply(Z2); + S1 = S1.Multiply(Z2); + } + + ECFieldElement A = S1.Add(S2); + ECFieldElement B = U1.Add(U2); + + if (B.IsZero) + { + if (A.IsZero) + return Twice(); + + return curve.Infinity; + } + + ECFieldElement X3, L3, Z3; + if (X2.IsZero) + { + // TODO This can probably be optimized quite a bit + ECPoint p = this.Normalize(); + X1 = p.XCoord; + ECFieldElement Y1 = p.YCoord; + + ECFieldElement Y2 = L2; + ECFieldElement L = Y1.Add(Y2).Divide(X1); + + X3 = L.Square().Add(L).Add(X1).Add(curve.A); + if (X3.IsZero) + { + return new SecT131R1Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + L3 = Y3.Divide(X3).Add(X3); + Z3 = curve.FromBigInteger(BigInteger.One); + } + else + { + B = B.Square(); + + ECFieldElement AU1 = A.Multiply(U1); + ECFieldElement AU2 = A.Multiply(U2); + + X3 = AU1.Multiply(AU2); + if (X3.IsZero) + { + return new SecT131R1Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement ABZ2 = A.Multiply(B); + if (!Z2IsOne) + { + ABZ2 = ABZ2.Multiply(Z2); + } + + L3 = AU2.Add(B).SquarePlusProduct(ABZ2, L1.Add(Z1)); + + Z3 = ABZ2; + if (!Z1IsOne) + { + Z3 = Z3.Multiply(Z1); + } + } + + return new SecT131R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + { + return this; + } + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return curve.Infinity; + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement L1Z1 = Z1IsOne ? L1 : L1.Multiply(Z1); + ECFieldElement Z1Sq = Z1IsOne ? Z1 : Z1.Square(); + ECFieldElement a = curve.A; + ECFieldElement aZ1Sq = Z1IsOne ? a : a.Multiply(Z1Sq); + ECFieldElement T = L1.Square().Add(L1Z1).Add(aZ1Sq); + if (T.IsZero) + { + return new SecT131R1Point(curve, T, curve.B.Sqrt()); + } + + ECFieldElement X3 = T.Square(); + ECFieldElement Z3 = Z1IsOne ? T : T.Multiply(Z1Sq); + + ECFieldElement X1Z1 = Z1IsOne ? X1 : X1.Multiply(Z1); + ECFieldElement L3 = X1Z1.SquarePlusProduct(T, L1Z1).Add(X3).Add(Z3); + + return new SecT131R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this.IsInfinity) + { + return b; + } + if (b.IsInfinity) + { + return Twice(); + } + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return b; + } + + ECFieldElement X2 = b.RawXCoord, Z2 = b.RawZCoords[0]; + if (X2.IsZero || !Z2.IsOne) + { + return Twice().Add(b); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord; + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement L1Sq = L1.Square(); + ECFieldElement Z1Sq = Z1.Square(); + ECFieldElement L1Z1 = L1.Multiply(Z1); + + ECFieldElement T = curve.A.Multiply(Z1Sq).Add(L1Sq).Add(L1Z1); + ECFieldElement L2plus1 = L2.AddOne(); + ECFieldElement A = curve.A.Add(L2plus1).Multiply(Z1Sq).Add(L1Sq).MultiplyPlusProduct(T, X1Sq, Z1Sq); + ECFieldElement X2Z1Sq = X2.Multiply(Z1Sq); + ECFieldElement B = X2Z1Sq.Add(T).Square(); + + if (B.IsZero) + { + if (A.IsZero) + return b.Twice(); + + return curve.Infinity; + } + + if (A.IsZero) + { + return new SecT131R1Point(curve, A, curve.B.Sqrt()); + } + + ECFieldElement X3 = A.Square().Multiply(X2Z1Sq); + ECFieldElement Z3 = A.Multiply(B).Multiply(Z1Sq); + ECFieldElement L3 = A.Add(B).Square().MultiplyPlusProduct(T, L2plus1, Z3); + + return new SecT131R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Negate() + { + if (IsInfinity) + return this; + + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return this; + + // L is actually Lambda (X + Y/X) here + ECFieldElement L = this.RawYCoord, Z = this.RawZCoords[0]; + return new SecT131R1Point(Curve, X, L.Add(Z), new ECFieldElement[] { Z }); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R1Point.cs.meta new file mode 100644 index 000000000..c483c15cf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b724cdc187d68a14ab82743561c8172c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R2Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R2Curve.cs new file mode 100644 index 000000000..a41c07cf1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R2Curve.cs @@ -0,0 +1,181 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT131R2Curve + : AbstractF2mCurve + { + private const int SECT131R2_DEFAULT_COORDS = COORD_LAMBDA_PROJECTIVE; + private const int SECT131R2_FE_LONGS = 3; + private static readonly ECFieldElement[] SECT131R2_AFFINE_ZS = new ECFieldElement[] { new SecT131FieldElement(BigInteger.One) }; + + protected readonly SecT131R2Point m_infinity; + + public SecT131R2Curve() + : base(131, 2, 3, 8) + { + this.m_infinity = new SecT131R2Point(this, null, null); + + this.m_a = FromBigInteger(new BigInteger(1, Hex.DecodeStrict("03E5A88919D7CAFCBF415F07C2176573B2"))); + this.m_b = FromBigInteger(new BigInteger(1, Hex.DecodeStrict("04B8266A46C55657AC734CE38F018F2192"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("0400000000000000016954A233049BA98F")); + this.m_cofactor = BigInteger.Two; + + this.m_coord = SECT131R2_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecT131R2Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_LAMBDA_PROJECTIVE: + return true; + default: + return false; + } + } + + public override int FieldSize + { + get { return 131; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecT131FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecT131R2Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecT131R2Point(this, x, y, zs); + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override bool IsKoblitz + { + get { return false; } + } + + public virtual int M + { + get { return 131; } + } + + public virtual bool IsTrinomial + { + get { return false; } + } + + public virtual int K1 + { + get { return 2; } + } + + public virtual int K2 + { + get { return 3; } + } + + public virtual int K3 + { + get { return 8; } + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + ulong[] table = new ulong[len * SECT131R2_FE_LONGS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat192.Copy64(((SecT131FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECT131R2_FE_LONGS; + Nat192.Copy64(((SecT131FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECT131R2_FE_LONGS; + } + } + + return new SecT131R2LookupTable(this, table, len); + } + + private class SecT131R2LookupTable + : AbstractECLookupTable + { + private readonly SecT131R2Curve m_outer; + private readonly ulong[] m_table; + private readonly int m_size; + + internal SecT131R2LookupTable(SecT131R2Curve outer, ulong[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + ulong[] x = Nat192.Create64(), y = Nat192.Create64(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECT131R2_FE_LONGS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECT131R2_FE_LONGS + j] & MASK; + } + + pos += (SECT131R2_FE_LONGS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + ulong[] x = Nat192.Create64(), y = Nat192.Create64(); + int pos = index * SECT131R2_FE_LONGS * 2; + + for (int j = 0; j < SECT131R2_FE_LONGS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECT131R2_FE_LONGS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(ulong[] x, ulong[] y) + { + return m_outer.CreateRawPoint(new SecT131FieldElement(x), new SecT131FieldElement(y), SECT131R2_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R2Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R2Curve.cs.meta new file mode 100644 index 000000000..a165c59cf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R2Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4921b9560f77c9747861717d70d2afdb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R2Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R2Point.cs new file mode 100644 index 000000000..cd644db06 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R2Point.cs @@ -0,0 +1,274 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT131R2Point + : AbstractF2mPoint + { + internal SecT131R2Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecT131R2Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecT131R2Point(null, AffineXCoord, AffineYCoord); + } + + public override ECFieldElement YCoord + { + get + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + if (this.IsInfinity || X.IsZero) + return L; + + // Y is actually Lambda (X + Y/X) here; convert to affine value on the fly + ECFieldElement Y = L.Add(X).Multiply(X); + + ECFieldElement Z = RawZCoords[0]; + if (!Z.IsOne) + { + Y = Y.Divide(Z); + } + + return Y; + } + } + + protected internal override bool CompressionYTilde + { + get + { + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return false; + + ECFieldElement Y = this.RawYCoord; + + // Y is actually Lambda (X + Y/X) here + return Y.TestBitZero() != X.TestBitZero(); + } + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + ECFieldElement X2 = b.RawXCoord; + + if (X1.IsZero) + { + if (X2.IsZero) + return curve.Infinity; + + return b.Add(this); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord, Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement U2 = X2, S2 = L2; + if (!Z1IsOne) + { + U2 = U2.Multiply(Z1); + S2 = S2.Multiply(Z1); + } + + bool Z2IsOne = Z2.IsOne; + ECFieldElement U1 = X1, S1 = L1; + if (!Z2IsOne) + { + U1 = U1.Multiply(Z2); + S1 = S1.Multiply(Z2); + } + + ECFieldElement A = S1.Add(S2); + ECFieldElement B = U1.Add(U2); + + if (B.IsZero) + { + if (A.IsZero) + return Twice(); + + return curve.Infinity; + } + + ECFieldElement X3, L3, Z3; + if (X2.IsZero) + { + // TODO This can probably be optimized quite a bit + ECPoint p = this.Normalize(); + X1 = p.XCoord; + ECFieldElement Y1 = p.YCoord; + + ECFieldElement Y2 = L2; + ECFieldElement L = Y1.Add(Y2).Divide(X1); + + X3 = L.Square().Add(L).Add(X1).Add(curve.A); + if (X3.IsZero) + { + return new SecT131R2Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + L3 = Y3.Divide(X3).Add(X3); + Z3 = curve.FromBigInteger(BigInteger.One); + } + else + { + B = B.Square(); + + ECFieldElement AU1 = A.Multiply(U1); + ECFieldElement AU2 = A.Multiply(U2); + + X3 = AU1.Multiply(AU2); + if (X3.IsZero) + { + return new SecT131R2Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement ABZ2 = A.Multiply(B); + if (!Z2IsOne) + { + ABZ2 = ABZ2.Multiply(Z2); + } + + L3 = AU2.Add(B).SquarePlusProduct(ABZ2, L1.Add(Z1)); + + Z3 = ABZ2; + if (!Z1IsOne) + { + Z3 = Z3.Multiply(Z1); + } + } + + return new SecT131R2Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + { + return this; + } + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return curve.Infinity; + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement L1Z1 = Z1IsOne ? L1 : L1.Multiply(Z1); + ECFieldElement Z1Sq = Z1IsOne ? Z1 : Z1.Square(); + ECFieldElement a = curve.A; + ECFieldElement aZ1Sq = Z1IsOne ? a : a.Multiply(Z1Sq); + ECFieldElement T = L1.Square().Add(L1Z1).Add(aZ1Sq); + if (T.IsZero) + { + return new SecT131R2Point(curve, T, curve.B.Sqrt()); + } + + ECFieldElement X3 = T.Square(); + ECFieldElement Z3 = Z1IsOne ? T : T.Multiply(Z1Sq); + + ECFieldElement X1Z1 = Z1IsOne ? X1 : X1.Multiply(Z1); + ECFieldElement L3 = X1Z1.SquarePlusProduct(T, L1Z1).Add(X3).Add(Z3); + + return new SecT131R2Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return b; + } + + ECFieldElement X2 = b.RawXCoord, Z2 = b.RawZCoords[0]; + if (X2.IsZero || !Z2.IsOne) + { + return Twice().Add(b); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord; + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement L1Sq = L1.Square(); + ECFieldElement Z1Sq = Z1.Square(); + ECFieldElement L1Z1 = L1.Multiply(Z1); + + ECFieldElement T = curve.A.Multiply(Z1Sq).Add(L1Sq).Add(L1Z1); + ECFieldElement L2plus1 = L2.AddOne(); + ECFieldElement A = curve.A.Add(L2plus1).Multiply(Z1Sq).Add(L1Sq).MultiplyPlusProduct(T, X1Sq, Z1Sq); + ECFieldElement X2Z1Sq = X2.Multiply(Z1Sq); + ECFieldElement B = X2Z1Sq.Add(T).Square(); + + if (B.IsZero) + { + if (A.IsZero) + return b.Twice(); + + return curve.Infinity; + } + + if (A.IsZero) + { + return new SecT131R2Point(curve, A, curve.B.Sqrt()); + } + + ECFieldElement X3 = A.Square().Multiply(X2Z1Sq); + ECFieldElement Z3 = A.Multiply(B).Multiply(Z1Sq); + ECFieldElement L3 = A.Add(B).Square().MultiplyPlusProduct(T, L2plus1, Z3); + + return new SecT131R2Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Negate() + { + if (IsInfinity) + return this; + + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return this; + + // L is actually Lambda (X + Y/X) here + ECFieldElement L = this.RawYCoord, Z = this.RawZCoords[0]; + return new SecT131R2Point(Curve, X, L.Add(Z), new ECFieldElement[] { Z }); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R2Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R2Point.cs.meta new file mode 100644 index 000000000..c53f8cbd6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT131R2Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8cd012eab4ae35f43bc77cf7ee5311e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163Field.cs new file mode 100644 index 000000000..fa683ae60 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163Field.cs @@ -0,0 +1,385 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +#if NETCOREAPP3_0_OR_GREATER +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT163Field + { + private const ulong M35 = ulong.MaxValue >> 29; + private const ulong M55 = ulong.MaxValue >> 9; + + private static readonly ulong[] ROOT_Z = new ulong[]{ 0xB6DB6DB6DB6DB6B0UL, 0x492492492492DB6DUL, 0x492492492UL }; + + public static void Add(ulong[] x, ulong[] y, ulong[] z) + { + z[0] = x[0] ^ y[0]; + z[1] = x[1] ^ y[1]; + z[2] = x[2] ^ y[2]; + } + + public static void AddExt(ulong[] xx, ulong[] yy, ulong[] zz) + { + zz[0] = xx[0] ^ yy[0]; + zz[1] = xx[1] ^ yy[1]; + zz[2] = xx[2] ^ yy[2]; + zz[3] = xx[3] ^ yy[3]; + zz[4] = xx[4] ^ yy[4]; + zz[5] = xx[5] ^ yy[5]; + } + + public static void AddOne(ulong[] x, ulong[] z) + { + z[0] = x[0] ^ 1UL; + z[1] = x[1]; + z[2] = x[2]; + } + + private static void AddTo(ulong[] x, ulong[] z) + { + z[0] ^= x[0]; + z[1] ^= x[1]; + z[2] ^= x[2]; + } + + public static ulong[] FromBigInteger(BigInteger x) + { + return Nat.FromBigInteger64(163, x); + } + + public static void HalfTrace(ulong[] x, ulong[] z) + { + ulong[] tt = Nat192.CreateExt64(); + + Nat192.Copy64(x, z); + for (int i = 1; i < 163; i += 2) + { + ImplSquare(z, tt); + Reduce(tt, z); + ImplSquare(z, tt); + Reduce(tt, z); + AddTo(x, z); + } + } + + public static void Invert(ulong[] x, ulong[] z) + { + if (Nat192.IsZero64(x)) + throw new InvalidOperationException(); + + // Itoh-Tsujii inversion with bases { 2, 3 } + + ulong[] t0 = Nat192.Create64(); + ulong[] t1 = Nat192.Create64(); + + Square(x, t0); + + // 3 | 162 + SquareN(t0, 1, t1); + Multiply(t0, t1, t0); + SquareN(t1, 1, t1); + Multiply(t0, t1, t0); + + // 3 | 54 + SquareN(t0, 3, t1); + Multiply(t0, t1, t0); + SquareN(t1, 3, t1); + Multiply(t0, t1, t0); + + // 3 | 18 + SquareN(t0, 9, t1); + Multiply(t0, t1, t0); + SquareN(t1, 9, t1); + Multiply(t0, t1, t0); + + // 3 | 6 + SquareN(t0, 27, t1); + Multiply(t0, t1, t0); + SquareN(t1, 27, t1); + Multiply(t0, t1, t0); + + // 2 | 2 + SquareN(t0, 81, t1); + Multiply(t0, t1, z); + } + + public static void Multiply(ulong[] x, ulong[] y, ulong[] z) + { + ulong[] tt = new ulong[8]; + ImplMultiply(x, y, tt); + Reduce(tt, z); + } + + public static void MultiplyAddToExt(ulong[] x, ulong[] y, ulong[] zz) + { + ulong[] tt = new ulong[8]; + ImplMultiply(x, y, tt); + AddExt(zz, tt, zz); + } + + public static void Reduce(ulong[] xx, ulong[] z) + { + ulong x0 = xx[0], x1 = xx[1], x2 = xx[2], x3 = xx[3], x4 = xx[4], x5 = xx[5]; + + x2 ^= (x5 << 29) ^ (x5 << 32) ^ (x5 << 35) ^ (x5 << 36); + x3 ^= (x5 >> 35) ^ (x5 >> 32) ^ (x5 >> 29) ^ (x5 >> 28); + + x1 ^= (x4 << 29) ^ (x4 << 32) ^ (x4 << 35) ^ (x4 << 36); + x2 ^= (x4 >> 35) ^ (x4 >> 32) ^ (x4 >> 29) ^ (x4 >> 28); + + x0 ^= (x3 << 29) ^ (x3 << 32) ^ (x3 << 35) ^ (x3 << 36); + x1 ^= (x3 >> 35) ^ (x3 >> 32) ^ (x3 >> 29) ^ (x3 >> 28); + + ulong t = x2 >> 35; + z[0] = x0 ^ t ^ (t << 3) ^ (t << 6) ^ (t << 7); + z[1] = x1; + z[2] = x2 & M35; + } + + public static void Reduce29(ulong[] z, int zOff) + { + ulong z2 = z[zOff + 2], t = z2 >> 35; + z[zOff ] ^= t ^ (t << 3) ^ (t << 6) ^ (t << 7); + z[zOff + 2] = z2 & M35; + } + + public static void Sqrt(ulong[] x, ulong[] z) + { + ulong[] odd = Nat192.Create64(); + + odd[0] = Interleave.Unshuffle(x[0], x[1], out ulong e0); + odd[1] = Interleave.Unshuffle(x[2] , out ulong e1); + + Multiply(odd, ROOT_Z, z); + + z[0] ^= e0; + z[1] ^= e1; + } + + public static void Square(ulong[] x, ulong[] z) + { + ulong[] tt = Nat192.CreateExt64(); + ImplSquare(x, tt); + Reduce(tt, z); + } + + public static void SquareAddToExt(ulong[] x, ulong[] zz) + { + ulong[] tt = Nat192.CreateExt64(); + ImplSquare(x, tt); + AddExt(zz, tt, zz); + } + + public static void SquareN(ulong[] x, int n, ulong[] z) + { + Debug.Assert(n > 0); + + ulong[] tt = Nat192.CreateExt64(); + ImplSquare(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + ImplSquare(z, tt); + Reduce(tt, z); + } + } + + public static uint Trace(ulong[] x) + { + // Non-zero-trace bits: 0, 157 + return (uint)(x[0] ^ (x[2] >> 29)) & 1U; + } + + protected static void ImplCompactExt(ulong[] zz) + { + ulong z0 = zz[0], z1 = zz[1], z2 = zz[2], z3 = zz[3], z4 = zz[4], z5 = zz[5]; + zz[0] = z0 ^ (z1 << 55); + zz[1] = (z1 >> 9) ^ (z2 << 46); + zz[2] = (z2 >> 18) ^ (z3 << 37); + zz[3] = (z3 >> 27) ^ (z4 << 28); + zz[4] = (z4 >> 36) ^ (z5 << 19); + zz[5] = (z5 >> 45); + } + + protected static void ImplMultiply(ulong[] x, ulong[] y, ulong[] zz) + { +#if NETCOREAPP3_0_OR_GREATER + if (Pclmulqdq.IsSupported) + { + var X01 = Vector128.Create(x[0], x[1]); + var X2_ = Vector128.CreateScalar(x[2]); + var Y01 = Vector128.Create(y[0], y[1]); + var Y2_ = Vector128.CreateScalar(y[2]); + + var Z01 = Pclmulqdq.CarrylessMultiply(X01, Y01, 0x00); + var Z12 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y01, 0x01), + Pclmulqdq.CarrylessMultiply(X01, Y01, 0x10)); + var Z23 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y2_, 0x00), + Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y01, 0x11), + Pclmulqdq.CarrylessMultiply(X2_, Y01, 0x00))); + var Z34 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y2_, 0x01), + Pclmulqdq.CarrylessMultiply(X2_, Y01, 0x10)); + var Z45 = Pclmulqdq.CarrylessMultiply(X2_, Y2_, 0x00); + + zz[0] = Z01.GetElement(0); + zz[1] = Z01.GetElement(1) ^ Z12.GetElement(0); + zz[2] = Z23.GetElement(0) ^ Z12.GetElement(1); + zz[3] = Z23.GetElement(1) ^ Z34.GetElement(0); + zz[4] = Z45.GetElement(0) ^ Z34.GetElement(1); + zz[5] = Z45.GetElement(1); + return; + } +#endif + + /* + * "Five-way recursion" as described in "Batch binary Edwards", Daniel J. Bernstein. + */ + + ulong f0 = x[0], f1 = x[1], f2 = x[2]; + f2 = ((f1 >> 46) ^ (f2 << 18)); + f1 = ((f0 >> 55) ^ (f1 << 9)) & M55; + f0 &= M55; + + ulong g0 = y[0], g1 = y[1], g2 = y[2]; + g2 = ((g1 >> 46) ^ (g2 << 18)); + g1 = ((g0 >> 55) ^ (g1 << 9)) & M55; + g0 &= M55; + + ulong[] u = zz; + ulong[] H = new ulong[10]; + + ImplMulw(u, f0, g0, H, 0); // H(0) 55/54 bits + ImplMulw(u, f2, g2, H, 2); // H(INF) 55/50 bits + + ulong t0 = f0 ^ f1 ^ f2; + ulong t1 = g0 ^ g1 ^ g2; + + ImplMulw(u, t0, t1, H, 4); // H(1) 55/54 bits + + ulong t2 = (f1 << 1) ^ (f2 << 2); + ulong t3 = (g1 << 1) ^ (g2 << 2); + + ImplMulw(u, f0 ^ t2, g0 ^ t3, H, 6); // H(t) 55/56 bits + ImplMulw(u, t0 ^ t2, t1 ^ t3, H, 8); // H(t + 1) 55/56 bits + + ulong t4 = H[6] ^ H[8]; + ulong t5 = H[7] ^ H[9]; + + Debug.Assert(t5 >> 55 == 0); + + // Calculate V + ulong v0 = (t4 << 1) ^ H[6]; + ulong v1 = t4 ^ (t5 << 1) ^ H[7]; + ulong v2 = t5; + + // Calculate U + ulong u0 = H[0]; + ulong u1 = H[1] ^ H[0] ^ H[4]; + ulong u2 = H[1] ^ H[5]; + + // Calculate W + ulong w0 = u0 ^ v0 ^ (H[2] << 4) ^ (H[2] << 1); + ulong w1 = u1 ^ v1 ^ (H[3] << 4) ^ (H[3] << 1); + ulong w2 = u2 ^ v2; + + // Propagate carries + w1 ^= (w0 >> 55); w0 &= M55; + w2 ^= (w1 >> 55); w1 &= M55; + + Debug.Assert((w0 & 1UL) == 0UL); + + // Divide W by t + + w0 = (w0 >> 1) ^ ((w1 & 1UL) << 54); + w1 = (w1 >> 1) ^ ((w2 & 1UL) << 54); + w2 = (w2 >> 1); + + // Divide W by (t + 1) + + w0 ^= (w0 << 1); + w0 ^= (w0 << 2); + w0 ^= (w0 << 4); + w0 ^= (w0 << 8); + w0 ^= (w0 << 16); + w0 ^= (w0 << 32); + + w0 &= M55; w1 ^= (w0 >> 54); + + w1 ^= (w1 << 1); + w1 ^= (w1 << 2); + w1 ^= (w1 << 4); + w1 ^= (w1 << 8); + w1 ^= (w1 << 16); + w1 ^= (w1 << 32); + + w1 &= M55; w2 ^= (w1 >> 54); + + w2 ^= (w2 << 1); + w2 ^= (w2 << 2); + w2 ^= (w2 << 4); + w2 ^= (w2 << 8); + w2 ^= (w2 << 16); + w2 ^= (w2 << 32); + + Debug.Assert(w2 >> 52 == 0); + + zz[0] = u0; + zz[1] = u1 ^ w0 ^ H[2]; + zz[2] = u2 ^ w1 ^ w0 ^ H[3]; + zz[3] = w2 ^ w1; + zz[4] = w2 ^ H[2]; + zz[5] = H[3]; + + ImplCompactExt(zz); + } + + protected static void ImplMulw(ulong[] u, ulong x, ulong y, ulong[] z, int zOff) + { + Debug.Assert(x >> 56 == 0); + Debug.Assert(y >> 56 == 0); + + //u[0] = 0; + u[1] = y; + u[2] = u[1] << 1; + u[3] = u[2] ^ y; + u[4] = u[2] << 1; + u[5] = u[4] ^ y; + u[6] = u[3] << 1; + u[7] = u[6] ^ y; + + uint j = (uint)x; + ulong g, h = 0, l = u[j & 3]; + int k = 47; + do + { + j = (uint)(x >> k); + g = u[j & 7] + ^ u[(j >> 3) & 7] << 3 + ^ u[(j >> 6) & 7] << 6; + l ^= (g << k); + h ^= (g >> -k); + } + while ((k -= 9) > 0); + + Debug.Assert(h >> 47 == 0); + + z[zOff ] = l & M55; + z[zOff + 1] = (l >> 55) ^ (h << 9); + } + + protected static void ImplSquare(ulong[] x, ulong[] zz) + { + Interleave.Expand64To128(x, 0, 3, zz, 0); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163Field.cs.meta new file mode 100644 index 000000000..ea47ce07d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0b55cdcb57a2bab44be2fb7cc83e0236 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163FieldElement.cs new file mode 100644 index 000000000..6ef47192b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163FieldElement.cs @@ -0,0 +1,237 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT163FieldElement + : AbstractF2mFieldElement + { + protected internal readonly ulong[] x; + + public SecT163FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.BitLength > 163) + throw new ArgumentException("value invalid for SecT163FieldElement", "x"); + + this.x = SecT163Field.FromBigInteger(x); + } + + public SecT163FieldElement() + { + this.x = Nat192.Create64(); + } + + protected internal SecT163FieldElement(ulong[] x) + { + this.x = x; + } + + public override bool IsOne + { + get { return Nat192.IsOne64(x); } + } + + public override bool IsZero + { + get { return Nat192.IsZero64(x); } + } + + public override bool TestBitZero() + { + return (x[0] & 1L) != 0L; + } + + public override BigInteger ToBigInteger() + { + return Nat192.ToBigInteger64(x); + } + + public override string FieldName + { + get { return "SecT163Field"; } + } + + public override int FieldSize + { + get { return 163; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + ulong[] z = Nat192.Create64(); + SecT163Field.Add(x, ((SecT163FieldElement)b).x, z); + return new SecT163FieldElement(z); + } + + public override ECFieldElement AddOne() + { + ulong[] z = Nat192.Create64(); + SecT163Field.AddOne(x, z); + return new SecT163FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + // Addition and subtraction are the same in F2m + return Add(b); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + ulong[] z = Nat192.Create64(); + SecT163Field.Multiply(x, ((SecT163FieldElement)b).x, z); + return new SecT163FieldElement(z); + } + + public override ECFieldElement MultiplyMinusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + return MultiplyPlusProduct(b, x, y); + } + + public override ECFieldElement MultiplyPlusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + ulong[] ax = this.x, bx = ((SecT163FieldElement)b).x; + ulong[] xx = ((SecT163FieldElement)x).x, yx = ((SecT163FieldElement)y).x; + + ulong[] tt = Nat192.CreateExt64(); + SecT163Field.MultiplyAddToExt(ax, bx, tt); + SecT163Field.MultiplyAddToExt(xx, yx, tt); + + ulong[] z = Nat192.Create64(); + SecT163Field.Reduce(tt, z); + return new SecT163FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + return Multiply(b.Invert()); + } + + public override ECFieldElement Negate() + { + return this; + } + + public override ECFieldElement Square() + { + ulong[] z = Nat192.Create64(); + SecT163Field.Square(x, z); + return new SecT163FieldElement(z); + } + + public override ECFieldElement SquareMinusProduct(ECFieldElement x, ECFieldElement y) + { + return SquarePlusProduct(x, y); + } + + public override ECFieldElement SquarePlusProduct(ECFieldElement x, ECFieldElement y) + { + ulong[] ax = this.x; + ulong[] xx = ((SecT163FieldElement)x).x, yx = ((SecT163FieldElement)y).x; + + ulong[] tt = Nat192.CreateExt64(); + SecT163Field.SquareAddToExt(ax, tt); + SecT163Field.MultiplyAddToExt(xx, yx, tt); + + ulong[] z = Nat192.Create64(); + SecT163Field.Reduce(tt, z); + return new SecT163FieldElement(z); + } + + public override ECFieldElement SquarePow(int pow) + { + if (pow < 1) + return this; + + ulong[] z = Nat192.Create64(); + SecT163Field.SquareN(x, pow, z); + return new SecT163FieldElement(z); + } + + public override ECFieldElement HalfTrace() + { + ulong[] z = Nat192.Create64(); + SecT163Field.HalfTrace(x, z); + return new SecT163FieldElement(z); + } + + public override bool HasFastTrace + { + get { return true; } + } + + public override int Trace() + { + return (int)SecT163Field.Trace(x); + } + + public override ECFieldElement Invert() + { + ulong[] z = Nat192.Create64(); + SecT163Field.Invert(x, z); + return new SecT163FieldElement(z); + } + + public override ECFieldElement Sqrt() + { + ulong[] z = Nat192.Create64(); + SecT163Field.Sqrt(x, z); + return new SecT163FieldElement(z); + } + + public virtual int Representation + { + get { return F2mFieldElement.Ppb; } + } + + public virtual int M + { + get { return 163; } + } + + public virtual int K1 + { + get { return 3; } + } + + public virtual int K2 + { + get { return 6; } + } + + public virtual int K3 + { + get { return 7; } + } + + public override bool Equals(object obj) + { + return Equals(obj as SecT163FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecT163FieldElement); + } + + public virtual bool Equals(SecT163FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat192.Eq64(x, other.x); + } + + public override int GetHashCode() + { + return 163763 ^ Arrays.GetHashCode(x, 0, 3); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163FieldElement.cs.meta new file mode 100644 index 000000000..0cae076c4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08f568b7d3a3b794fb15d90d7d9cf56e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163K1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163K1Curve.cs new file mode 100644 index 000000000..0bc01e8f6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163K1Curve.cs @@ -0,0 +1,187 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT163K1Curve + : AbstractF2mCurve + { + private const int SECT163K1_DEFAULT_COORDS = COORD_LAMBDA_PROJECTIVE; + private const int SECT163K1_FE_LONGS = 3; + private static readonly ECFieldElement[] SECT163K1_AFFINE_ZS = new ECFieldElement[] { new SecT163FieldElement(BigInteger.One) }; + + protected readonly SecT163K1Point m_infinity; + + public SecT163K1Curve() + : base(163, 3, 6, 7) + { + this.m_infinity = new SecT163K1Point(this, null, null); + + this.m_a = FromBigInteger(BigInteger.One); + this.m_b = this.m_a; + this.m_order = new BigInteger(1, Hex.DecodeStrict("04000000000000000000020108A2E0CC0D99F8A5EF")); + this.m_cofactor = BigInteger.Two; + + this.m_coord = SECT163K1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecT163K1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_LAMBDA_PROJECTIVE: + return true; + default: + return false; + } + } + + protected override ECMultiplier CreateDefaultMultiplier() + { + return new WTauNafMultiplier(); + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return 163; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecT163FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecT163K1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecT163K1Point(this, x, y, zs); + } + + public override bool IsKoblitz + { + get { return true; } + } + + public virtual int M + { + get { return 163; } + } + + public virtual bool IsTrinomial + { + get { return false; } + } + + public virtual int K1 + { + get { return 3; } + } + + public virtual int K2 + { + get { return 6; } + } + + public virtual int K3 + { + get { return 7; } + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + ulong[] table = new ulong[len * SECT163K1_FE_LONGS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat192.Copy64(((SecT163FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECT163K1_FE_LONGS; + Nat192.Copy64(((SecT163FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECT163K1_FE_LONGS; + } + } + + return new SecT163K1LookupTable(this, table, len); + } + + private class SecT163K1LookupTable + : AbstractECLookupTable + { + private readonly SecT163K1Curve m_outer; + private readonly ulong[] m_table; + private readonly int m_size; + + internal SecT163K1LookupTable(SecT163K1Curve outer, ulong[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + ulong[] x = Nat192.Create64(), y = Nat192.Create64(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECT163K1_FE_LONGS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECT163K1_FE_LONGS + j] & MASK; + } + + pos += (SECT163K1_FE_LONGS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + ulong[] x = Nat192.Create64(), y = Nat192.Create64(); + int pos = index * SECT163K1_FE_LONGS * 2; + + for (int j = 0; j < SECT163K1_FE_LONGS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECT163K1_FE_LONGS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(ulong[] x, ulong[] y) + { + return m_outer.CreateRawPoint(new SecT163FieldElement(x), new SecT163FieldElement(y), SECT163K1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163K1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163K1Curve.cs.meta new file mode 100644 index 000000000..19e334657 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163K1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 976cb761a30ff1a4e80fb9334c6f7175 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163K1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163K1Point.cs new file mode 100644 index 000000000..c0d83736c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163K1Point.cs @@ -0,0 +1,272 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT163K1Point + : AbstractF2mPoint + { + internal SecT163K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecT163K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecT163K1Point(null, this.AffineXCoord, this.AffineYCoord); + } + + public override ECFieldElement YCoord + { + get + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + if (this.IsInfinity || X.IsZero) + return L; + + // Y is actually Lambda (X + Y/X) here; convert to affine value on the fly + ECFieldElement Y = L.Add(X).Multiply(X); + + ECFieldElement Z = RawZCoords[0]; + if (!Z.IsOne) + { + Y = Y.Divide(Z); + } + + return Y; + } + } + + protected internal override bool CompressionYTilde + { + get + { + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return false; + + ECFieldElement Y = this.RawYCoord; + + // Y is actually Lambda (X + Y/X) here + return Y.TestBitZero() != X.TestBitZero(); + } + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + ECFieldElement X2 = b.RawXCoord; + + if (X1.IsZero) + { + if (X2.IsZero) + return curve.Infinity; + + return b.Add(this); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord, Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement U2 = X2, S2 = L2; + if (!Z1IsOne) + { + U2 = U2.Multiply(Z1); + S2 = S2.Multiply(Z1); + } + + bool Z2IsOne = Z2.IsOne; + ECFieldElement U1 = X1, S1 = L1; + if (!Z2IsOne) + { + U1 = U1.Multiply(Z2); + S1 = S1.Multiply(Z2); + } + + ECFieldElement A = S1.Add(S2); + ECFieldElement B = U1.Add(U2); + + if (B.IsZero) + { + if (A.IsZero) + return Twice(); + + return curve.Infinity; + } + + ECFieldElement X3, L3, Z3; + if (X2.IsZero) + { + // TODO This can probably be optimized quite a bit + ECPoint p = this.Normalize(); + X1 = p.XCoord; + ECFieldElement Y1 = p.YCoord; + + ECFieldElement Y2 = L2; + ECFieldElement L = Y1.Add(Y2).Divide(X1); + + X3 = L.Square().Add(L).Add(X1).AddOne(); + if (X3.IsZero) + { + return new SecT163K1Point(curve, X3, curve.B); + } + + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + L3 = Y3.Divide(X3).Add(X3); + Z3 = curve.FromBigInteger(BigInteger.One); + } + else + { + B = B.Square(); + + ECFieldElement AU1 = A.Multiply(U1); + ECFieldElement AU2 = A.Multiply(U2); + + X3 = AU1.Multiply(AU2); + if (X3.IsZero) + { + return new SecT163K1Point(curve, X3, curve.B); + } + + ECFieldElement ABZ2 = A.Multiply(B); + if (!Z2IsOne) + { + ABZ2 = ABZ2.Multiply(Z2); + } + + L3 = AU2.Add(B).SquarePlusProduct(ABZ2, L1.Add(Z1)); + + Z3 = ABZ2; + if (!Z1IsOne) + { + Z3 = Z3.Multiply(Z1); + } + } + + return new SecT163K1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + { + return this; + } + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return curve.Infinity; + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement L1Z1 = Z1IsOne ? L1 : L1.Multiply(Z1); + ECFieldElement Z1Sq = Z1IsOne ? Z1 : Z1.Square(); + ECFieldElement T = L1.Square().Add(L1Z1).Add(Z1Sq); + if (T.IsZero) + { + return new SecT163K1Point(curve, T, curve.B); + } + + ECFieldElement X3 = T.Square(); + ECFieldElement Z3 = Z1IsOne ? T : T.Multiply(Z1Sq); + + ECFieldElement t1 = L1.Add(X1).Square(); + ECFieldElement L3 = t1.Add(T).Add(Z1Sq).Multiply(t1).Add(X3); + + return new SecT163K1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return b; + } + + // NOTE: TwicePlus() only optimized for lambda-affine argument + ECFieldElement X2 = b.RawXCoord, Z2 = b.RawZCoords[0]; + if (X2.IsZero || !Z2.IsOne) + { + return Twice().Add(b); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord; + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement L1Sq = L1.Square(); + ECFieldElement Z1Sq = Z1.Square(); + ECFieldElement L1Z1 = L1.Multiply(Z1); + + ECFieldElement T = Z1Sq.Add(L1Sq).Add(L1Z1); + ECFieldElement A = L2.Multiply(Z1Sq).Add(L1Sq).MultiplyPlusProduct(T, X1Sq, Z1Sq); + ECFieldElement X2Z1Sq = X2.Multiply(Z1Sq); + ECFieldElement B = X2Z1Sq.Add(T).Square(); + + if (B.IsZero) + { + if (A.IsZero) + return b.Twice(); + + return curve.Infinity; + } + + if (A.IsZero) + { + return new SecT163K1Point(curve, A, curve.B); + } + + ECFieldElement X3 = A.Square().Multiply(X2Z1Sq); + ECFieldElement Z3 = A.Multiply(B).Multiply(Z1Sq); + ECFieldElement L3 = A.Add(B).Square().MultiplyPlusProduct(T, L2.AddOne(), Z3); + + return new SecT163K1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Negate() + { + if (this.IsInfinity) + return this; + + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return this; + + // L is actually Lambda (X + Y/X) here + ECFieldElement L = this.RawYCoord, Z = this.RawZCoords[0]; + return new SecT163K1Point(Curve, X, L.Add(Z), new ECFieldElement[] { Z }); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163K1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163K1Point.cs.meta new file mode 100644 index 000000000..72a6d219e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163K1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4644b5025fe7953469fe1de6e795d40e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R1Curve.cs new file mode 100644 index 000000000..5dff8200c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R1Curve.cs @@ -0,0 +1,181 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT163R1Curve + : AbstractF2mCurve + { + private const int SECT163R1_DEFAULT_COORDS = COORD_LAMBDA_PROJECTIVE; + private const int SECT163R1_FE_LONGS = 3; + private static readonly ECFieldElement[] SECT163R1_AFFINE_ZS = new ECFieldElement[] { new SecT163FieldElement(BigInteger.One) }; + + protected readonly SecT163R1Point m_infinity; + + public SecT163R1Curve() + : base(163, 3, 6, 7) + { + this.m_infinity = new SecT163R1Point(this, null, null); + + this.m_a = FromBigInteger(new BigInteger(1, Hex.DecodeStrict("07B6882CAAEFA84F9554FF8428BD88E246D2782AE2"))); + this.m_b = FromBigInteger(new BigInteger(1, Hex.DecodeStrict("0713612DCDDCB40AAB946BDA29CA91F73AF958AFD9"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("03FFFFFFFFFFFFFFFFFFFF48AAB689C29CA710279B")); + this.m_cofactor = BigInteger.Two; + + this.m_coord = SECT163R1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecT163R1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_LAMBDA_PROJECTIVE: + return true; + default: + return false; + } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return 163; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecT163FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecT163R1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecT163R1Point(this, x, y, zs); + } + + public override bool IsKoblitz + { + get { return false; } + } + + public virtual int M + { + get { return 163; } + } + + public virtual bool IsTrinomial + { + get { return false; } + } + + public virtual int K1 + { + get { return 3; } + } + + public virtual int K2 + { + get { return 6; } + } + + public virtual int K3 + { + get { return 7; } + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + ulong[] table = new ulong[len * SECT163R1_FE_LONGS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat192.Copy64(((SecT163FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECT163R1_FE_LONGS; + Nat192.Copy64(((SecT163FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECT163R1_FE_LONGS; + } + } + + return new SecT163R1LookupTable(this, table, len); + } + + private class SecT163R1LookupTable + : AbstractECLookupTable + { + private readonly SecT163R1Curve m_outer; + private readonly ulong[] m_table; + private readonly int m_size; + + internal SecT163R1LookupTable(SecT163R1Curve outer, ulong[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + ulong[] x = Nat192.Create64(), y = Nat192.Create64(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECT163R1_FE_LONGS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECT163R1_FE_LONGS + j] & MASK; + } + + pos += (SECT163R1_FE_LONGS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + ulong[] x = Nat192.Create64(), y = Nat192.Create64(); + int pos = index * SECT163R1_FE_LONGS * 2; + + for (int j = 0; j < SECT163R1_FE_LONGS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECT163R1_FE_LONGS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(ulong[] x, ulong[] y) + { + return m_outer.CreateRawPoint(new SecT163FieldElement(x), new SecT163FieldElement(y), SECT163R1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R1Curve.cs.meta new file mode 100644 index 000000000..b10aba878 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ee61fe945074bfa4c8dc05181ba609d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R1Point.cs new file mode 100644 index 000000000..ec59f1f7f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R1Point.cs @@ -0,0 +1,274 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT163R1Point + : AbstractF2mPoint + { + internal SecT163R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecT163R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecT163R1Point(null, AffineXCoord, AffineYCoord); + } + + public override ECFieldElement YCoord + { + get + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + if (this.IsInfinity || X.IsZero) + return L; + + // Y is actually Lambda (X + Y/X) here; convert to affine value on the fly + ECFieldElement Y = L.Add(X).Multiply(X); + + ECFieldElement Z = RawZCoords[0]; + if (!Z.IsOne) + { + Y = Y.Divide(Z); + } + + return Y; + } + } + + protected internal override bool CompressionYTilde + { + get + { + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return false; + + ECFieldElement Y = this.RawYCoord; + + // Y is actually Lambda (X + Y/X) here + return Y.TestBitZero() != X.TestBitZero(); + } + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + ECFieldElement X2 = b.RawXCoord; + + if (X1.IsZero) + { + if (X2.IsZero) + return curve.Infinity; + + return b.Add(this); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord, Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement U2 = X2, S2 = L2; + if (!Z1IsOne) + { + U2 = U2.Multiply(Z1); + S2 = S2.Multiply(Z1); + } + + bool Z2IsOne = Z2.IsOne; + ECFieldElement U1 = X1, S1 = L1; + if (!Z2IsOne) + { + U1 = U1.Multiply(Z2); + S1 = S1.Multiply(Z2); + } + + ECFieldElement A = S1.Add(S2); + ECFieldElement B = U1.Add(U2); + + if (B.IsZero) + { + if (A.IsZero) + return Twice(); + + return curve.Infinity; + } + + ECFieldElement X3, L3, Z3; + if (X2.IsZero) + { + // TODO This can probably be optimized quite a bit + ECPoint p = this.Normalize(); + X1 = p.XCoord; + ECFieldElement Y1 = p.YCoord; + + ECFieldElement Y2 = L2; + ECFieldElement L = Y1.Add(Y2).Divide(X1); + + X3 = L.Square().Add(L).Add(X1).Add(curve.A); + if (X3.IsZero) + { + return new SecT163R1Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + L3 = Y3.Divide(X3).Add(X3); + Z3 = curve.FromBigInteger(BigInteger.One); + } + else + { + B = B.Square(); + + ECFieldElement AU1 = A.Multiply(U1); + ECFieldElement AU2 = A.Multiply(U2); + + X3 = AU1.Multiply(AU2); + if (X3.IsZero) + { + return new SecT163R1Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement ABZ2 = A.Multiply(B); + if (!Z2IsOne) + { + ABZ2 = ABZ2.Multiply(Z2); + } + + L3 = AU2.Add(B).SquarePlusProduct(ABZ2, L1.Add(Z1)); + + Z3 = ABZ2; + if (!Z1IsOne) + { + Z3 = Z3.Multiply(Z1); + } + } + + return new SecT163R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + { + return this; + } + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return curve.Infinity; + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement L1Z1 = Z1IsOne ? L1 : L1.Multiply(Z1); + ECFieldElement Z1Sq = Z1IsOne ? Z1 : Z1.Square(); + ECFieldElement a = curve.A; + ECFieldElement aZ1Sq = Z1IsOne ? a : a.Multiply(Z1Sq); + ECFieldElement T = L1.Square().Add(L1Z1).Add(aZ1Sq); + if (T.IsZero) + { + return new SecT163R1Point(curve, T, curve.B.Sqrt()); + } + + ECFieldElement X3 = T.Square(); + ECFieldElement Z3 = Z1IsOne ? T : T.Multiply(Z1Sq); + + ECFieldElement X1Z1 = Z1IsOne ? X1 : X1.Multiply(Z1); + ECFieldElement L3 = X1Z1.SquarePlusProduct(T, L1Z1).Add(X3).Add(Z3); + + return new SecT163R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return b; + } + + ECFieldElement X2 = b.RawXCoord, Z2 = b.RawZCoords[0]; + if (X2.IsZero || !Z2.IsOne) + { + return Twice().Add(b); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord; + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement L1Sq = L1.Square(); + ECFieldElement Z1Sq = Z1.Square(); + ECFieldElement L1Z1 = L1.Multiply(Z1); + + ECFieldElement T = curve.A.Multiply(Z1Sq).Add(L1Sq).Add(L1Z1); + ECFieldElement L2plus1 = L2.AddOne(); + ECFieldElement A = curve.A.Add(L2plus1).Multiply(Z1Sq).Add(L1Sq).MultiplyPlusProduct(T, X1Sq, Z1Sq); + ECFieldElement X2Z1Sq = X2.Multiply(Z1Sq); + ECFieldElement B = X2Z1Sq.Add(T).Square(); + + if (B.IsZero) + { + if (A.IsZero) + return b.Twice(); + + return curve.Infinity; + } + + if (A.IsZero) + { + return new SecT163R1Point(curve, A, curve.B.Sqrt()); + } + + ECFieldElement X3 = A.Square().Multiply(X2Z1Sq); + ECFieldElement Z3 = A.Multiply(B).Multiply(Z1Sq); + ECFieldElement L3 = A.Add(B).Square().MultiplyPlusProduct(T, L2plus1, Z3); + + return new SecT163R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Negate() + { + if (this.IsInfinity) + return this; + + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return this; + + // L is actually Lambda (X + Y/X) here + ECFieldElement L = this.RawYCoord, Z = this.RawZCoords[0]; + return new SecT163R1Point(Curve, X, L.Add(Z), new ECFieldElement[] { Z }); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R1Point.cs.meta new file mode 100644 index 000000000..b324cfac4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fe4ab3e2a058412428aca19b765ca554 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R2Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R2Curve.cs new file mode 100644 index 000000000..504bb3127 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R2Curve.cs @@ -0,0 +1,181 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT163R2Curve + : AbstractF2mCurve + { + private const int SECT163R2_DEFAULT_COORDS = COORD_LAMBDA_PROJECTIVE; + private const int SECT163R2_FE_LONGS = 3; + private static readonly ECFieldElement[] SECT163R2_AFFINE_ZS = new ECFieldElement[] { new SecT163FieldElement(BigInteger.One) }; + + protected readonly SecT163R2Point m_infinity; + + public SecT163R2Curve() + : base(163, 3, 6, 7) + { + this.m_infinity = new SecT163R2Point(this, null, null); + + this.m_a = FromBigInteger(BigInteger.One); + this.m_b = FromBigInteger(new BigInteger(1, Hex.DecodeStrict("020A601907B8C953CA1481EB10512F78744A3205FD"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("040000000000000000000292FE77E70C12A4234C33")); + this.m_cofactor = BigInteger.Two; + + this.m_coord = SECT163R2_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecT163R2Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_LAMBDA_PROJECTIVE: + return true; + default: + return false; + } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return 163; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecT163FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecT163R2Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecT163R2Point(this, x, y, zs); + } + + public override bool IsKoblitz + { + get { return false; } + } + + public virtual int M + { + get { return 163; } + } + + public virtual bool IsTrinomial + { + get { return false; } + } + + public virtual int K1 + { + get { return 3; } + } + + public virtual int K2 + { + get { return 6; } + } + + public virtual int K3 + { + get { return 7; } + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + ulong[] table = new ulong[len * SECT163R2_FE_LONGS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat192.Copy64(((SecT163FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECT163R2_FE_LONGS; + Nat192.Copy64(((SecT163FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECT163R2_FE_LONGS; + } + } + + return new SecT163R2LookupTable(this, table, len); + } + + private class SecT163R2LookupTable + : AbstractECLookupTable + { + private readonly SecT163R2Curve m_outer; + private readonly ulong[] m_table; + private readonly int m_size; + + internal SecT163R2LookupTable(SecT163R2Curve outer, ulong[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + ulong[] x = Nat192.Create64(), y = Nat192.Create64(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECT163R2_FE_LONGS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECT163R2_FE_LONGS + j] & MASK; + } + + pos += (SECT163R2_FE_LONGS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + ulong[] x = Nat192.Create64(), y = Nat192.Create64(); + int pos = index * SECT163R2_FE_LONGS * 2; + + for (int j = 0; j < SECT163R2_FE_LONGS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECT163R2_FE_LONGS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(ulong[] x, ulong[] y) + { + return m_outer.CreateRawPoint(new SecT163FieldElement(x), new SecT163FieldElement(y), SECT163R2_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R2Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R2Curve.cs.meta new file mode 100644 index 000000000..01fa31a41 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R2Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f69c9a732e5e17244b151ca873d7d6e9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R2Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R2Point.cs new file mode 100644 index 000000000..4a0150058 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R2Point.cs @@ -0,0 +1,277 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT163R2Point + : AbstractF2mPoint + { + internal SecT163R2Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecT163R2Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecT163R2Point(null, AffineXCoord, AffineYCoord); + } + + public override ECFieldElement YCoord + { + get + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + if (this.IsInfinity || X.IsZero) + return L; + + // Y is actually Lambda (X + Y/X) here; convert to affine value on the fly + ECFieldElement Y = L.Add(X).Multiply(X); + + ECFieldElement Z = RawZCoords[0]; + if (!Z.IsOne) + { + Y = Y.Divide(Z); + } + + return Y; + } + } + + protected internal override bool CompressionYTilde + { + get + { + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return false; + + ECFieldElement Y = this.RawYCoord; + + // Y is actually Lambda (X + Y/X) here + return Y.TestBitZero() != X.TestBitZero(); + } + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + ECFieldElement X2 = b.RawXCoord; + + if (X1.IsZero) + { + if (X2.IsZero) + return curve.Infinity; + + return b.Add(this); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord, Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement U2 = X2, S2 = L2; + if (!Z1IsOne) + { + U2 = U2.Multiply(Z1); + S2 = S2.Multiply(Z1); + } + + bool Z2IsOne = Z2.IsOne; + ECFieldElement U1 = X1, S1 = L1; + if (!Z2IsOne) + { + U1 = U1.Multiply(Z2); + S1 = S1.Multiply(Z2); + } + + ECFieldElement A = S1.Add(S2); + ECFieldElement B = U1.Add(U2); + + if (B.IsZero) + { + if (A.IsZero) + { + return Twice(); + } + + return curve.Infinity; + } + + ECFieldElement X3, L3, Z3; + if (X2.IsZero) + { + // TODO This can probably be optimized quite a bit + ECPoint p = this.Normalize(); + X1 = p.XCoord; + ECFieldElement Y1 = p.YCoord; + + ECFieldElement Y2 = L2; + ECFieldElement L = Y1.Add(Y2).Divide(X1); + + X3 = L.Square().Add(L).Add(X1).AddOne(); + if (X3.IsZero) + { + return new SecT163R2Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + L3 = Y3.Divide(X3).Add(X3); + Z3 = curve.FromBigInteger(BigInteger.One); + } + else + { + B = B.Square(); + + ECFieldElement AU1 = A.Multiply(U1); + ECFieldElement AU2 = A.Multiply(U2); + + X3 = AU1.Multiply(AU2); + if (X3.IsZero) + { + return new SecT163R2Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement ABZ2 = A.Multiply(B); + if (!Z2IsOne) + { + ABZ2 = ABZ2.Multiply(Z2); + } + + L3 = AU2.Add(B).SquarePlusProduct(ABZ2, L1.Add(Z1)); + + Z3 = ABZ2; + if (!Z1IsOne) + { + Z3 = Z3.Multiply(Z1); + } + } + + return new SecT163R2Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + { + return this; + } + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return curve.Infinity; + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement L1Z1 = Z1IsOne ? L1 : L1.Multiply(Z1); + ECFieldElement Z1Sq = Z1IsOne ? Z1 : Z1.Square(); + ECFieldElement T = L1.Square().Add(L1Z1).Add(Z1Sq); + if (T.IsZero) + { + return new SecT163R2Point(curve, T, curve.B.Sqrt()); + } + + ECFieldElement X3 = T.Square(); + ECFieldElement Z3 = Z1IsOne ? T : T.Multiply(Z1Sq); + + ECFieldElement X1Z1 = Z1IsOne ? X1 : X1.Multiply(Z1); + ECFieldElement L3 = X1Z1.SquarePlusProduct(T, L1Z1).Add(X3).Add(Z3); + + return new SecT163R2Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this.IsInfinity) + { + return b; + } + if (b.IsInfinity) + { + return Twice(); + } + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return b; + } + + ECFieldElement X2 = b.RawXCoord, Z2 = b.RawZCoords[0]; + if (X2.IsZero || !Z2.IsOne) + { + return Twice().Add(b); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord; + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement L1Sq = L1.Square(); + ECFieldElement Z1Sq = Z1.Square(); + ECFieldElement L1Z1 = L1.Multiply(Z1); + + ECFieldElement T = Z1Sq.Add(L1Sq).Add(L1Z1); + ECFieldElement A = L2.Multiply(Z1Sq).Add(L1Sq).MultiplyPlusProduct(T, X1Sq, Z1Sq); + ECFieldElement X2Z1Sq = X2.Multiply(Z1Sq); + ECFieldElement B = X2Z1Sq.Add(T).Square(); + + if (B.IsZero) + { + if (A.IsZero) + return b.Twice(); + + return curve.Infinity; + } + + if (A.IsZero) + { + return new SecT163R2Point(curve, A, curve.B.Sqrt()); + } + + ECFieldElement X3 = A.Square().Multiply(X2Z1Sq); + ECFieldElement Z3 = A.Multiply(B).Multiply(Z1Sq); + ECFieldElement L3 = A.Add(B).Square().MultiplyPlusProduct(T, L2.AddOne(), Z3); + + return new SecT163R2Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Negate() + { + if (this.IsInfinity) + return this; + + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return this; + + // L is actually Lambda (X + Y/X) here + ECFieldElement L = this.RawYCoord, Z = this.RawZCoords[0]; + return new SecT163R2Point(Curve, X, L.Add(Z), new ECFieldElement[] { Z }); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R2Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R2Point.cs.meta new file mode 100644 index 000000000..8d3886577 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT163R2Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2962527dcabd980428bc4751bd5097b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193Field.cs new file mode 100644 index 000000000..a76731b1e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193Field.cs @@ -0,0 +1,360 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +#if NETCOREAPP3_0_OR_GREATER +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT193Field + { + private const ulong M01 = 1UL; + private const ulong M49 = ulong.MaxValue >> 15; + + public static void Add(ulong[] x, ulong[] y, ulong[] z) + { + z[0] = x[0] ^ y[0]; + z[1] = x[1] ^ y[1]; + z[2] = x[2] ^ y[2]; + z[3] = x[3] ^ y[3]; + } + + public static void AddExt(ulong[] xx, ulong[] yy, ulong[] zz) + { + zz[0] = xx[0] ^ yy[0]; + zz[1] = xx[1] ^ yy[1]; + zz[2] = xx[2] ^ yy[2]; + zz[3] = xx[3] ^ yy[3]; + zz[4] = xx[4] ^ yy[4]; + zz[5] = xx[5] ^ yy[5]; + zz[6] = xx[6] ^ yy[6]; + } + + public static void AddOne(ulong[] x, ulong[] z) + { + z[0] = x[0] ^ 1UL; + z[1] = x[1]; + z[2] = x[2]; + z[3] = x[3]; + } + + private static void AddTo(ulong[] x, ulong[] z) + { + z[0] ^= x[0]; + z[1] ^= x[1]; + z[2] ^= x[2]; + z[3] ^= x[3]; + } + + public static ulong[] FromBigInteger(BigInteger x) + { + return Nat.FromBigInteger64(193, x); + } + + public static void HalfTrace(ulong[] x, ulong[] z) + { + ulong[] tt = Nat256.CreateExt64(); + + Nat256.Copy64(x, z); + for (int i = 1; i < 193; i += 2) + { + ImplSquare(z, tt); + Reduce(tt, z); + ImplSquare(z, tt); + Reduce(tt, z); + AddTo(x, z); + } + } + + public static void Invert(ulong[] x, ulong[] z) + { + if (Nat256.IsZero64(x)) + throw new InvalidOperationException(); + + // Itoh-Tsujii inversion with bases { 2, 3 } + + ulong[] t0 = Nat256.Create64(); + ulong[] t1 = Nat256.Create64(); + + Square(x, t0); + + // 3 | 192 + SquareN(t0, 1, t1); + Multiply(t0, t1, t0); + SquareN(t1, 1, t1); + Multiply(t0, t1, t0); + + // 2 | 64 + SquareN(t0, 3, t1); + Multiply(t0, t1, t0); + + // 2 | 32 + SquareN(t0, 6, t1); + Multiply(t0, t1, t0); + + // 2 | 16 + SquareN(t0, 12, t1); + Multiply(t0, t1, t0); + + // 2 | 8 + SquareN(t0, 24, t1); + Multiply(t0, t1, t0); + + // 2 | 4 + SquareN(t0, 48, t1); + Multiply(t0, t1, t0); + + // 2 | 2 + SquareN(t0, 96, t1); + Multiply(t0, t1, z); + } + + public static void Multiply(ulong[] x, ulong[] y, ulong[] z) + { + ulong[] tt = Nat256.CreateExt64(); + ImplMultiply(x, y, tt); + Reduce(tt, z); + } + + public static void MultiplyAddToExt(ulong[] x, ulong[] y, ulong[] zz) + { + ulong[] tt = Nat256.CreateExt64(); + ImplMultiply(x, y, tt); + AddExt(zz, tt, zz); + } + + public static void Reduce(ulong[] xx, ulong[] z) + { + ulong x0 = xx[0], x1 = xx[1], x2 = xx[2], x3 = xx[3], x4 = xx[4], x5 = xx[5], x6 = xx[6]; + + x2 ^= (x6 << 63); + x3 ^= (x6 >> 1) ^ (x6 << 14); + x4 ^= (x6 >> 50); + + x1 ^= (x5 << 63); + x2 ^= (x5 >> 1) ^ (x5 << 14); + x3 ^= (x5 >> 50); + + x0 ^= (x4 << 63); + x1 ^= (x4 >> 1) ^ (x4 << 14); + x2 ^= (x4 >> 50); + + ulong t = x3 >> 1; + z[0] = x0 ^ t ^ (t << 15); + z[1] = x1 ^ (t >> 49); + z[2] = x2; + z[3] = x3 & M01; + } + + public static void Reduce63(ulong[] z, int zOff) + { + ulong z3 = z[zOff + 3], t = z3 >> 1; + z[zOff ] ^= t ^ (t << 15); + z[zOff + 1] ^= (t >> 49); + z[zOff + 3] = z3 & M01; + } + + public static void Sqrt(ulong[] x, ulong[] z) + { + ulong c0 = Interleave.Unshuffle(x[0], x[1], out ulong e0); + ulong c1 = Interleave.Unshuffle(x[2] , out ulong e1); + e1 ^= x[3] << 32; + + z[0] = e0 ^ (c0 << 8); + z[1] = e1 ^ (c1 << 8) ^ (c0 >> 56) ^ (c0 << 33); + z[2] = (c1 >> 56) ^ (c1 << 33) ^ (c0 >> 31); + z[3] = (c1 >> 31); + } + + public static void Square(ulong[] x, ulong[] z) + { + ulong[] tt = Nat256.CreateExt64(); + ImplSquare(x, tt); + Reduce(tt, z); + } + + public static void SquareAddToExt(ulong[] x, ulong[] zz) + { + ulong[] tt = Nat256.CreateExt64(); + ImplSquare(x, tt); + AddExt(zz, tt, zz); + } + + public static void SquareN(ulong[] x, int n, ulong[] z) + { + Debug.Assert(n > 0); + + ulong[] tt = Nat256.CreateExt64(); + ImplSquare(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + ImplSquare(z, tt); + Reduce(tt, z); + } + } + + public static uint Trace(ulong[] x) + { + // Non-zero-trace bits: 0 + return (uint)(x[0]) & 1U; + } + + protected static void ImplCompactExt(ulong[] zz) + { + ulong z0 = zz[0], z1 = zz[1], z2 = zz[2], z3 = zz[3], z4 = zz[4], z5 = zz[5], z6 = zz[6], z7 = zz[7]; + zz[0] = z0 ^ (z1 << 49); + zz[1] = (z1 >> 15) ^ (z2 << 34); + zz[2] = (z2 >> 30) ^ (z3 << 19); + zz[3] = (z3 >> 45) ^ (z4 << 4) + ^ (z5 << 53); + zz[4] = (z4 >> 60) ^ (z6 << 38) + ^ (z5 >> 11); + zz[5] = (z6 >> 26) ^ (z7 << 23); + zz[6] = (z7 >> 41); + zz[7] = 0; + } + + protected static void ImplExpand(ulong[] x, ulong[] z) + { + ulong x0 = x[0], x1 = x[1], x2 = x[2], x3 = x[3]; + z[0] = x0 & M49; + z[1] = ((x0 >> 49) ^ (x1 << 15)) & M49; + z[2] = ((x1 >> 34) ^ (x2 << 30)) & M49; + z[3] = ((x2 >> 19) ^ (x3 << 45)); + } + + protected static void ImplMultiply(ulong[] x, ulong[] y, ulong[] zz) + { +#if NETCOREAPP3_0_OR_GREATER + if (Pclmulqdq.IsSupported) + { + var X01 = Vector128.Create(x[0], x[1]); + var X2_ = Vector128.CreateScalar(x[2]); + var Y01 = Vector128.Create(y[0], y[1]); + var Y2_ = Vector128.CreateScalar(y[2]); + + var Z01 = Pclmulqdq.CarrylessMultiply(X01, Y01, 0x00); + var Z12 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y01, 0x01), + Pclmulqdq.CarrylessMultiply(X01, Y01, 0x10)); + var Z23 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y2_, 0x00), + Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y01, 0x11), + Pclmulqdq.CarrylessMultiply(X2_, Y01, 0x00))); + var Z34 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y2_, 0x01), + Pclmulqdq.CarrylessMultiply(X2_, Y01, 0x10)); + var Z45 = Pclmulqdq.CarrylessMultiply(X2_, Y2_, 0x00); + + ulong X3M = 0UL - x[3]; + ulong Y3M = 0UL - y[3]; + + zz[0] = Z01.GetElement(0); + zz[1] = Z01.GetElement(1) ^ Z12.GetElement(0); + zz[2] = Z23.GetElement(0) ^ Z12.GetElement(1); + zz[3] = Z23.GetElement(1) ^ Z34.GetElement(0) ^ (X3M & y[0]) ^ (x[0] & Y3M); + zz[4] = Z45.GetElement(0) ^ Z34.GetElement(1) ^ (X3M & y[1]) ^ (x[1] & Y3M); + zz[5] = Z45.GetElement(1) ^ (X3M & y[2]) ^ (x[2] & Y3M); + zz[6] = X3M & y[3]; + return; + } +#endif + + /* + * "Two-level seven-way recursion" as described in "Batch binary Edwards", Daniel J. Bernstein. + */ + + ulong[] f = new ulong[4], g = new ulong[4]; + ImplExpand(x, f); + ImplExpand(y, g); + + ulong[] u = new ulong[8]; + + ImplMulwAcc(u, f[0], g[0], zz, 0); + ImplMulwAcc(u, f[1], g[1], zz, 1); + ImplMulwAcc(u, f[2], g[2], zz, 2); + ImplMulwAcc(u, f[3], g[3], zz, 3); + + // U *= (1 - t^n) + for (int i = 5; i > 0; --i) + { + zz[i] ^= zz[i - 1]; + } + + ImplMulwAcc(u, f[0] ^ f[1], g[0] ^ g[1], zz, 1); + ImplMulwAcc(u, f[2] ^ f[3], g[2] ^ g[3], zz, 3); + + // V *= (1 - t^2n) + for (int i = 7; i > 1; --i) + { + zz[i] ^= zz[i - 2]; + } + + // Double-length recursion + { + ulong c0 = f[0] ^ f[2], c1 = f[1] ^ f[3]; + ulong d0 = g[0] ^ g[2], d1 = g[1] ^ g[3]; + ImplMulwAcc(u, c0 ^ c1, d0 ^ d1, zz, 3); + ulong[] t = new ulong[3]; + ImplMulwAcc(u, c0, d0, t, 0); + ImplMulwAcc(u, c1, d1, t, 1); + ulong t0 = t[0], t1 = t[1], t2 = t[2]; + zz[2] ^= t0; + zz[3] ^= t0 ^ t1; + zz[4] ^= t2 ^ t1; + zz[5] ^= t2; + } + + ImplCompactExt(zz); + } + + protected static void ImplMulwAcc(ulong[] u, ulong x, ulong y, ulong[] z, int zOff) + { + Debug.Assert(x >> 49 == 0); + Debug.Assert(y >> 49 == 0); + + //u[0] = 0; + u[1] = y; + u[2] = u[1] << 1; + u[3] = u[2] ^ y; + u[4] = u[2] << 1; + u[5] = u[4] ^ y; + u[6] = u[3] << 1; + u[7] = u[6] ^ y; + + uint j = (uint)x; + ulong g, h = 0, l = u[j & 7] + ^ (u[(j >> 3) & 7] << 3); + int k = 36; + do + { + j = (uint)(x >> k); + g = u[j & 7] + ^ u[(j >> 3) & 7] << 3 + ^ u[(j >> 6) & 7] << 6 + ^ u[(j >> 9) & 7] << 9 + ^ u[(j >> 12) & 7] << 12; + l ^= (g << k); + h ^= (g >> -k); + } + while ((k -= 15) > 0); + + Debug.Assert(h >> 33 == 0); + + z[zOff ] ^= l & M49; + z[zOff + 1] ^= (l >> 49) ^ (h << 15); + } + + protected static void ImplSquare(ulong[] x, ulong[] zz) + { + Interleave.Expand64To128(x, 0, 3, zz, 0); + zz[6] = (x[3] & M01); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193Field.cs.meta new file mode 100644 index 000000000..1090288af --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 94e9d639b53e63640920b428ab252952 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193FieldElement.cs new file mode 100644 index 000000000..11ee63452 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193FieldElement.cs @@ -0,0 +1,237 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT193FieldElement + : AbstractF2mFieldElement + { + protected internal readonly ulong[] x; + + public SecT193FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.BitLength > 193) + throw new ArgumentException("value invalid for SecT193FieldElement", "x"); + + this.x = SecT193Field.FromBigInteger(x); + } + + public SecT193FieldElement() + { + this.x = Nat256.Create64(); + } + + protected internal SecT193FieldElement(ulong[] x) + { + this.x = x; + } + + public override bool IsOne + { + get { return Nat256.IsOne64(x); } + } + + public override bool IsZero + { + get { return Nat256.IsZero64(x); } + } + + public override bool TestBitZero() + { + return (x[0] & 1UL) != 0UL; + } + + public override BigInteger ToBigInteger() + { + return Nat256.ToBigInteger64(x); + } + + public override string FieldName + { + get { return "SecT193Field"; } + } + + public override int FieldSize + { + get { return 193; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + ulong[] z = Nat256.Create64(); + SecT193Field.Add(x, ((SecT193FieldElement)b).x, z); + return new SecT193FieldElement(z); + } + + public override ECFieldElement AddOne() + { + ulong[] z = Nat256.Create64(); + SecT193Field.AddOne(x, z); + return new SecT193FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + // Addition and Subtraction are the same in F2m + return Add(b); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + ulong[] z = Nat256.Create64(); + SecT193Field.Multiply(x, ((SecT193FieldElement)b).x, z); + return new SecT193FieldElement(z); + } + + public override ECFieldElement MultiplyMinusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + return MultiplyPlusProduct(b, x, y); + } + + public override ECFieldElement MultiplyPlusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + ulong[] ax = this.x, bx = ((SecT193FieldElement)b).x; + ulong[] xx = ((SecT193FieldElement)x).x, yx = ((SecT193FieldElement)y).x; + + ulong[] tt = Nat256.CreateExt64(); + SecT193Field.MultiplyAddToExt(ax, bx, tt); + SecT193Field.MultiplyAddToExt(xx, yx, tt); + + ulong[] z = Nat256.Create64(); + SecT193Field.Reduce(tt, z); + return new SecT193FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + return Multiply(b.Invert()); + } + + public override ECFieldElement Negate() + { + return this; + } + + public override ECFieldElement Square() + { + ulong[] z = Nat256.Create64(); + SecT193Field.Square(x, z); + return new SecT193FieldElement(z); + } + + public override ECFieldElement SquareMinusProduct(ECFieldElement x, ECFieldElement y) + { + return SquarePlusProduct(x, y); + } + + public override ECFieldElement SquarePlusProduct(ECFieldElement x, ECFieldElement y) + { + ulong[] ax = this.x; + ulong[] xx = ((SecT193FieldElement)x).x, yx = ((SecT193FieldElement)y).x; + + ulong[] tt = Nat256.CreateExt64(); + SecT193Field.SquareAddToExt(ax, tt); + SecT193Field.MultiplyAddToExt(xx, yx, tt); + + ulong[] z = Nat256.Create64(); + SecT193Field.Reduce(tt, z); + return new SecT193FieldElement(z); + } + + public override ECFieldElement SquarePow(int pow) + { + if (pow < 1) + return this; + + ulong[] z = Nat256.Create64(); + SecT193Field.SquareN(x, pow, z); + return new SecT193FieldElement(z); + } + + public override ECFieldElement HalfTrace() + { + ulong[] z = Nat256.Create64(); + SecT193Field.HalfTrace(x, z); + return new SecT193FieldElement(z); + } + + public override bool HasFastTrace + { + get { return true; } + } + + public override int Trace() + { + return (int)SecT193Field.Trace(x); + } + + public override ECFieldElement Invert() + { + ulong[] z = Nat256.Create64(); + SecT193Field.Invert(x, z); + return new SecT193FieldElement(z); + } + + public override ECFieldElement Sqrt() + { + ulong[] z = Nat256.Create64(); + SecT193Field.Sqrt(x, z); + return new SecT193FieldElement(z); + } + + public virtual int Representation + { + get { return F2mFieldElement.Tpb; } + } + + public virtual int M + { + get { return 193; } + } + + public virtual int K1 + { + get { return 15; } + } + + public virtual int K2 + { + get { return 0; } + } + + public virtual int K3 + { + get { return 0; } + } + + public override bool Equals(object obj) + { + return Equals(obj as SecT193FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecT193FieldElement); + } + + public virtual bool Equals(SecT193FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat256.Eq64(x, other.x); + } + + public override int GetHashCode() + { + return 1930015 ^ Arrays.GetHashCode(x, 0, 4); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193FieldElement.cs.meta new file mode 100644 index 000000000..cee3baaa6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed86b58b8064a6c448038ebcda1c1b6a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R1Curve.cs new file mode 100644 index 000000000..db7c1360a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R1Curve.cs @@ -0,0 +1,181 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT193R1Curve + : AbstractF2mCurve + { + private const int SECT193R1_DEFAULT_COORDS = COORD_LAMBDA_PROJECTIVE; + private const int SECT193R1_FE_LONGS = 4; + private static readonly ECFieldElement[] SECT193R1_AFFINE_ZS = new ECFieldElement[] { new SecT193FieldElement(BigInteger.One) }; + + protected readonly SecT193R1Point m_infinity; + + public SecT193R1Curve() + : base(193, 15, 0, 0) + { + this.m_infinity = new SecT193R1Point(this, null, null); + + this.m_a = FromBigInteger(new BigInteger(1, Hex.DecodeStrict("0017858FEB7A98975169E171F77B4087DE098AC8A911DF7B01"))); + this.m_b = FromBigInteger(new BigInteger(1, Hex.DecodeStrict("00FDFB49BFE6C3A89FACADAA7A1E5BBC7CC1C2E5D831478814"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("01000000000000000000000000C7F34A778F443ACC920EBA49")); + this.m_cofactor = BigInteger.Two; + + this.m_coord = SECT193R1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecT193R1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_LAMBDA_PROJECTIVE: + return true; + default: + return false; + } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return 193; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecT193FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecT193R1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecT193R1Point(this, x, y, zs); + } + + public override bool IsKoblitz + { + get { return false; } + } + + public virtual int M + { + get { return 193; } + } + + public virtual bool IsTrinomial + { + get { return true; } + } + + public virtual int K1 + { + get { return 15; } + } + + public virtual int K2 + { + get { return 0; } + } + + public virtual int K3 + { + get { return 0; } + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + ulong[] table = new ulong[len * SECT193R1_FE_LONGS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat256.Copy64(((SecT193FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECT193R1_FE_LONGS; + Nat256.Copy64(((SecT193FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECT193R1_FE_LONGS; + } + } + + return new SecT193R1LookupTable(this, table, len); + } + + private class SecT193R1LookupTable + : AbstractECLookupTable + { + private readonly SecT193R1Curve m_outer; + private readonly ulong[] m_table; + private readonly int m_size; + + internal SecT193R1LookupTable(SecT193R1Curve outer, ulong[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + ulong[] x = Nat256.Create64(), y = Nat256.Create64(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECT193R1_FE_LONGS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECT193R1_FE_LONGS + j] & MASK; + } + + pos += (SECT193R1_FE_LONGS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + ulong[] x = Nat256.Create64(), y = Nat256.Create64(); + int pos = index * SECT193R1_FE_LONGS * 2; + + for (int j = 0; j < SECT193R1_FE_LONGS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECT193R1_FE_LONGS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(ulong[] x, ulong[] y) + { + return m_outer.CreateRawPoint(new SecT193FieldElement(x), new SecT193FieldElement(y), SECT193R1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R1Curve.cs.meta new file mode 100644 index 000000000..4e26fdf1c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24847eeab11476b4ba3244a99c0beb7a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R1Point.cs new file mode 100644 index 000000000..30d414e4b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R1Point.cs @@ -0,0 +1,274 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT193R1Point + : AbstractF2mPoint + { + internal SecT193R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecT193R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecT193R1Point(null, AffineXCoord, AffineYCoord); + } + + public override ECFieldElement YCoord + { + get + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + if (this.IsInfinity || X.IsZero) + return L; + + // Y is actually Lambda (X + Y/X) here; convert to affine value on the fly + ECFieldElement Y = L.Add(X).Multiply(X); + + ECFieldElement Z = RawZCoords[0]; + if (!Z.IsOne) + { + Y = Y.Divide(Z); + } + + return Y; + } + } + + protected internal override bool CompressionYTilde + { + get + { + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return false; + + ECFieldElement Y = this.RawYCoord; + + // Y is actually Lambda (X + Y/X) here + return Y.TestBitZero() != X.TestBitZero(); + } + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + ECFieldElement X2 = b.RawXCoord; + + if (X1.IsZero) + { + if (X2.IsZero) + return curve.Infinity; + + return b.Add(this); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord, Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement U2 = X2, S2 = L2; + if (!Z1IsOne) + { + U2 = U2.Multiply(Z1); + S2 = S2.Multiply(Z1); + } + + bool Z2IsOne = Z2.IsOne; + ECFieldElement U1 = X1, S1 = L1; + if (!Z2IsOne) + { + U1 = U1.Multiply(Z2); + S1 = S1.Multiply(Z2); + } + + ECFieldElement A = S1.Add(S2); + ECFieldElement B = U1.Add(U2); + + if (B.IsZero) + { + if (A.IsZero) + return Twice(); + + return curve.Infinity; + } + + ECFieldElement X3, L3, Z3; + if (X2.IsZero) + { + // TODO This can probably be optimized quite a bit + ECPoint p = this.Normalize(); + X1 = p.XCoord; + ECFieldElement Y1 = p.YCoord; + + ECFieldElement Y2 = L2; + ECFieldElement L = Y1.Add(Y2).Divide(X1); + + X3 = L.Square().Add(L).Add(X1).Add(curve.A); + if (X3.IsZero) + { + return new SecT193R1Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + L3 = Y3.Divide(X3).Add(X3); + Z3 = curve.FromBigInteger(BigInteger.One); + } + else + { + B = B.Square(); + + ECFieldElement AU1 = A.Multiply(U1); + ECFieldElement AU2 = A.Multiply(U2); + + X3 = AU1.Multiply(AU2); + if (X3.IsZero) + { + return new SecT193R1Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement ABZ2 = A.Multiply(B); + if (!Z2IsOne) + { + ABZ2 = ABZ2.Multiply(Z2); + } + + L3 = AU2.Add(B).SquarePlusProduct(ABZ2, L1.Add(Z1)); + + Z3 = ABZ2; + if (!Z1IsOne) + { + Z3 = Z3.Multiply(Z1); + } + } + + return new SecT193R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + { + return this; + } + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return curve.Infinity; + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement L1Z1 = Z1IsOne ? L1 : L1.Multiply(Z1); + ECFieldElement Z1Sq = Z1IsOne ? Z1 : Z1.Square(); + ECFieldElement a = curve.A; + ECFieldElement aZ1Sq = Z1IsOne ? a : a.Multiply(Z1Sq); + ECFieldElement T = L1.Square().Add(L1Z1).Add(aZ1Sq); + if (T.IsZero) + { + return new SecT193R1Point(curve, T, curve.B.Sqrt()); + } + + ECFieldElement X3 = T.Square(); + ECFieldElement Z3 = Z1IsOne ? T : T.Multiply(Z1Sq); + + ECFieldElement X1Z1 = Z1IsOne ? X1 : X1.Multiply(Z1); + ECFieldElement L3 = X1Z1.SquarePlusProduct(T, L1Z1).Add(X3).Add(Z3); + + return new SecT193R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return b; + } + + ECFieldElement X2 = b.RawXCoord, Z2 = b.RawZCoords[0]; + if (X2.IsZero || !Z2.IsOne) + { + return Twice().Add(b); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord; + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement L1Sq = L1.Square(); + ECFieldElement Z1Sq = Z1.Square(); + ECFieldElement L1Z1 = L1.Multiply(Z1); + + ECFieldElement T = curve.A.Multiply(Z1Sq).Add(L1Sq).Add(L1Z1); + ECFieldElement L2plus1 = L2.AddOne(); + ECFieldElement A = curve.A.Add(L2plus1).Multiply(Z1Sq).Add(L1Sq).MultiplyPlusProduct(T, X1Sq, Z1Sq); + ECFieldElement X2Z1Sq = X2.Multiply(Z1Sq); + ECFieldElement B = X2Z1Sq.Add(T).Square(); + + if (B.IsZero) + { + if (A.IsZero) + return b.Twice(); + + return curve.Infinity; + } + + if (A.IsZero) + { + return new SecT193R1Point(curve, A, curve.B.Sqrt()); + } + + ECFieldElement X3 = A.Square().Multiply(X2Z1Sq); + ECFieldElement Z3 = A.Multiply(B).Multiply(Z1Sq); + ECFieldElement L3 = A.Add(B).Square().MultiplyPlusProduct(T, L2plus1, Z3); + + return new SecT193R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Negate() + { + if (this.IsInfinity) + return this; + + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return this; + + // L is actually Lambda (X + Y/X) here + ECFieldElement L = this.RawYCoord, Z = this.RawZCoords[0]; + return new SecT193R1Point(Curve, X, L.Add(Z), new ECFieldElement[] { Z }); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R1Point.cs.meta new file mode 100644 index 000000000..ca202a647 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6a02a055b55d3a44dbf3364748e26b65 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R2Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R2Curve.cs new file mode 100644 index 000000000..10b970d06 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R2Curve.cs @@ -0,0 +1,181 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT193R2Curve + : AbstractF2mCurve + { + private const int SECT193R2_DEFAULT_COORDS = COORD_LAMBDA_PROJECTIVE; + private const int SECT193R2_FE_LONGS = 4; + private static readonly ECFieldElement[] SECT193R2_AFFINE_ZS = new ECFieldElement[] { new SecT193FieldElement(BigInteger.One) }; + + protected readonly SecT193R2Point m_infinity; + + public SecT193R2Curve() + : base(193, 15, 0, 0) + { + this.m_infinity = new SecT193R2Point(this, null, null); + + this.m_a = FromBigInteger(new BigInteger(1, Hex.DecodeStrict("0163F35A5137C2CE3EA6ED8667190B0BC43ECD69977702709B"))); + this.m_b = FromBigInteger(new BigInteger(1, Hex.DecodeStrict("00C9BB9E8927D4D64C377E2AB2856A5B16E3EFB7F61D4316AE"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("010000000000000000000000015AAB561B005413CCD4EE99D5")); + this.m_cofactor = BigInteger.Two; + + this.m_coord = SECT193R2_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecT193R2Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_LAMBDA_PROJECTIVE: + return true; + default: + return false; + } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return 193; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecT193FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecT193R2Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecT193R2Point(this, x, y, zs); + } + + public override bool IsKoblitz + { + get { return false; } + } + + public virtual int M + { + get { return 193; } + } + + public virtual bool IsTrinomial + { + get { return true; } + } + + public virtual int K1 + { + get { return 15; } + } + + public virtual int K2 + { + get { return 0; } + } + + public virtual int K3 + { + get { return 0; } + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + ulong[] table = new ulong[len * SECT193R2_FE_LONGS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat256.Copy64(((SecT193FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECT193R2_FE_LONGS; + Nat256.Copy64(((SecT193FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECT193R2_FE_LONGS; + } + } + + return new SecT193R2LookupTable(this, table, len); + } + + private class SecT193R2LookupTable + : AbstractECLookupTable + { + private readonly SecT193R2Curve m_outer; + private readonly ulong[] m_table; + private readonly int m_size; + + internal SecT193R2LookupTable(SecT193R2Curve outer, ulong[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + ulong[] x = Nat256.Create64(), y = Nat256.Create64(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECT193R2_FE_LONGS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECT193R2_FE_LONGS + j] & MASK; + } + + pos += (SECT193R2_FE_LONGS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + ulong[] x = Nat256.Create64(), y = Nat256.Create64(); + int pos = index * SECT193R2_FE_LONGS * 2; + + for (int j = 0; j < SECT193R2_FE_LONGS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECT193R2_FE_LONGS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(ulong[] x, ulong[] y) + { + return m_outer.CreateRawPoint(new SecT193FieldElement(x), new SecT193FieldElement(y), SECT193R2_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R2Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R2Curve.cs.meta new file mode 100644 index 000000000..a071a527b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R2Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d2f3ea3cc4118b84db48818f0e79c25a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R2Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R2Point.cs new file mode 100644 index 000000000..e5b8132cf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R2Point.cs @@ -0,0 +1,274 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT193R2Point + : AbstractF2mPoint + { + internal SecT193R2Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecT193R2Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecT193R2Point(null, AffineXCoord, AffineYCoord); + } + + public override ECFieldElement YCoord + { + get + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + if (this.IsInfinity || X.IsZero) + return L; + + // Y is actually Lambda (X + Y/X) here; convert to affine value on the fly + ECFieldElement Y = L.Add(X).Multiply(X); + + ECFieldElement Z = RawZCoords[0]; + if (!Z.IsOne) + { + Y = Y.Divide(Z); + } + + return Y; + } + } + + protected internal override bool CompressionYTilde + { + get + { + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return false; + + ECFieldElement Y = this.RawYCoord; + + // Y is actually Lambda (X + Y/X) here + return Y.TestBitZero() != X.TestBitZero(); + } + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + ECFieldElement X2 = b.RawXCoord; + + if (X1.IsZero) + { + if (X2.IsZero) + return curve.Infinity; + + return b.Add(this); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord, Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement U2 = X2, S2 = L2; + if (!Z1IsOne) + { + U2 = U2.Multiply(Z1); + S2 = S2.Multiply(Z1); + } + + bool Z2IsOne = Z2.IsOne; + ECFieldElement U1 = X1, S1 = L1; + if (!Z2IsOne) + { + U1 = U1.Multiply(Z2); + S1 = S1.Multiply(Z2); + } + + ECFieldElement A = S1.Add(S2); + ECFieldElement B = U1.Add(U2); + + if (B.IsZero) + { + if (A.IsZero) + return Twice(); + + return curve.Infinity; + } + + ECFieldElement X3, L3, Z3; + if (X2.IsZero) + { + // TODO This can probably be optimized quite a bit + ECPoint p = this.Normalize(); + X1 = p.XCoord; + ECFieldElement Y1 = p.YCoord; + + ECFieldElement Y2 = L2; + ECFieldElement L = Y1.Add(Y2).Divide(X1); + + X3 = L.Square().Add(L).Add(X1).Add(curve.A); + if (X3.IsZero) + { + return new SecT193R2Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + L3 = Y3.Divide(X3).Add(X3); + Z3 = curve.FromBigInteger(BigInteger.One); + } + else + { + B = B.Square(); + + ECFieldElement AU1 = A.Multiply(U1); + ECFieldElement AU2 = A.Multiply(U2); + + X3 = AU1.Multiply(AU2); + if (X3.IsZero) + { + return new SecT193R2Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement ABZ2 = A.Multiply(B); + if (!Z2IsOne) + { + ABZ2 = ABZ2.Multiply(Z2); + } + + L3 = AU2.Add(B).SquarePlusProduct(ABZ2, L1.Add(Z1)); + + Z3 = ABZ2; + if (!Z1IsOne) + { + Z3 = Z3.Multiply(Z1); + } + } + + return new SecT193R2Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + { + return this; + } + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return curve.Infinity; + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement L1Z1 = Z1IsOne ? L1 : L1.Multiply(Z1); + ECFieldElement Z1Sq = Z1IsOne ? Z1 : Z1.Square(); + ECFieldElement a = curve.A; + ECFieldElement aZ1Sq = Z1IsOne ? a : a.Multiply(Z1Sq); + ECFieldElement T = L1.Square().Add(L1Z1).Add(aZ1Sq); + if (T.IsZero) + { + return new SecT193R2Point(curve, T, curve.B.Sqrt()); + } + + ECFieldElement X3 = T.Square(); + ECFieldElement Z3 = Z1IsOne ? T : T.Multiply(Z1Sq); + + ECFieldElement X1Z1 = Z1IsOne ? X1 : X1.Multiply(Z1); + ECFieldElement L3 = X1Z1.SquarePlusProduct(T, L1Z1).Add(X3).Add(Z3); + + return new SecT193R2Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return b; + } + + ECFieldElement X2 = b.RawXCoord, Z2 = b.RawZCoords[0]; + if (X2.IsZero || !Z2.IsOne) + { + return Twice().Add(b); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord; + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement L1Sq = L1.Square(); + ECFieldElement Z1Sq = Z1.Square(); + ECFieldElement L1Z1 = L1.Multiply(Z1); + + ECFieldElement T = curve.A.Multiply(Z1Sq).Add(L1Sq).Add(L1Z1); + ECFieldElement L2plus1 = L2.AddOne(); + ECFieldElement A = curve.A.Add(L2plus1).Multiply(Z1Sq).Add(L1Sq).MultiplyPlusProduct(T, X1Sq, Z1Sq); + ECFieldElement X2Z1Sq = X2.Multiply(Z1Sq); + ECFieldElement B = X2Z1Sq.Add(T).Square(); + + if (B.IsZero) + { + if (A.IsZero) + return b.Twice(); + + return curve.Infinity; + } + + if (A.IsZero) + { + return new SecT193R2Point(curve, A, curve.B.Sqrt()); + } + + ECFieldElement X3 = A.Square().Multiply(X2Z1Sq); + ECFieldElement Z3 = A.Multiply(B).Multiply(Z1Sq); + ECFieldElement L3 = A.Add(B).Square().MultiplyPlusProduct(T, L2plus1, Z3); + + return new SecT193R2Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Negate() + { + if (this.IsInfinity) + return this; + + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return this; + + // L is actually Lambda (X + Y/X) here + ECFieldElement L = this.RawYCoord, Z = this.RawZCoords[0]; + return new SecT193R2Point(Curve, X, L.Add(Z), new ECFieldElement[] { Z }); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R2Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R2Point.cs.meta new file mode 100644 index 000000000..5291c9740 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT193R2Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b7ab89d88e018047bca78933a467e6d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233Field.cs new file mode 100644 index 000000000..12913f22b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233Field.cs @@ -0,0 +1,383 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +#if NETCOREAPP3_0_OR_GREATER +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT233Field + { + private const ulong M41 = ulong.MaxValue >> 23; + private const ulong M59 = ulong.MaxValue >> 5; + + public static void Add(ulong[] x, ulong[] y, ulong[] z) + { + z[0] = x[0] ^ y[0]; + z[1] = x[1] ^ y[1]; + z[2] = x[2] ^ y[2]; + z[3] = x[3] ^ y[3]; + } + + public static void AddExt(ulong[] xx, ulong[] yy, ulong[] zz) + { + zz[0] = xx[0] ^ yy[0]; + zz[1] = xx[1] ^ yy[1]; + zz[2] = xx[2] ^ yy[2]; + zz[3] = xx[3] ^ yy[3]; + zz[4] = xx[4] ^ yy[4]; + zz[5] = xx[5] ^ yy[5]; + zz[6] = xx[6] ^ yy[6]; + zz[7] = xx[7] ^ yy[7]; + } + + public static void AddOne(ulong[] x, ulong[] z) + { + z[0] = x[0] ^ 1UL; + z[1] = x[1]; + z[2] = x[2]; + z[3] = x[3]; + } + + private static void AddTo(ulong[] x, ulong[] z) + { + z[0] ^= x[0]; + z[1] ^= x[1]; + z[2] ^= x[2]; + z[3] ^= x[3]; + } + + public static ulong[] FromBigInteger(BigInteger x) + { + return Nat.FromBigInteger64(233, x); + } + + public static void HalfTrace(ulong[] x, ulong[] z) + { + ulong[] tt = Nat256.CreateExt64(); + + Nat256.Copy64(x, z); + for (int i = 1; i < 233; i += 2) + { + ImplSquare(z, tt); + Reduce(tt, z); + ImplSquare(z, tt); + Reduce(tt, z); + AddTo(x, z); + } + } + + public static void Invert(ulong[] x, ulong[] z) + { + if (Nat256.IsZero64(x)) + throw new InvalidOperationException(); + + // Itoh-Tsujii inversion + + ulong[] t0 = Nat256.Create64(); + ulong[] t1 = Nat256.Create64(); + + Square(x, t0); + Multiply(t0, x, t0); + Square(t0, t0); + Multiply(t0, x, t0); + SquareN(t0, 3, t1); + Multiply(t1, t0, t1); + Square(t1, t1); + Multiply(t1, x, t1); + SquareN(t1, 7, t0); + Multiply(t0, t1, t0); + SquareN(t0, 14, t1); + Multiply(t1, t0, t1); + Square(t1, t1); + Multiply(t1, x, t1); + SquareN(t1, 29, t0); + Multiply(t0, t1, t0); + SquareN(t0, 58, t1); + Multiply(t1, t0, t1); + SquareN(t1, 116, t0); + Multiply(t0, t1, t0); + Square(t0, z); + } + + public static void Multiply(ulong[] x, ulong[] y, ulong[] z) + { + ulong[] tt = Nat256.CreateExt64(); + ImplMultiply(x, y, tt); + Reduce(tt, z); + } + + public static void MultiplyAddToExt(ulong[] x, ulong[] y, ulong[] zz) + { + ulong[] tt = Nat256.CreateExt64(); + ImplMultiply(x, y, tt); + AddExt(zz, tt, zz); + } + + public static void Reduce(ulong[] xx, ulong[] z) + { + ulong x0 = xx[0], x1 = xx[1], x2 = xx[2], x3 = xx[3]; + ulong x4 = xx[4], x5 = xx[5], x6 = xx[6], x7 = xx[7]; + + x3 ^= (x7 << 23); + x4 ^= (x7 >> 41) ^ (x7 << 33); + x5 ^= (x7 >> 31); + + x2 ^= (x6 << 23); + x3 ^= (x6 >> 41) ^ (x6 << 33); + x4 ^= (x6 >> 31); + + x1 ^= (x5 << 23); + x2 ^= (x5 >> 41) ^ (x5 << 33); + x3 ^= (x5 >> 31); + + x0 ^= (x4 << 23); + x1 ^= (x4 >> 41) ^ (x4 << 33); + x2 ^= (x4 >> 31); + + ulong t = x3 >> 41; + z[0] = x0 ^ t; + z[1] = x1 ^ (t << 10); + z[2] = x2; + z[3] = x3 & M41; + } + + public static void Reduce23(ulong[] z, int zOff) + { + ulong z3 = z[zOff + 3], t = z3 >> 41; + z[zOff ] ^= t; + z[zOff + 1] ^= (t << 10); + z[zOff + 3] = z3 & M41; + } + + public static void Sqrt(ulong[] x, ulong[] z) + { + ulong c0 = Interleave.Unshuffle(x[0], x[1], out ulong e0); + ulong c1 = Interleave.Unshuffle(x[2], x[3], out ulong e1); + + ulong c2; + c2 = (c1 >> 27); + c1 ^= (c0 >> 27) | (c1 << 37); + c0 ^= (c0 << 37); + + ulong[] tt = Nat256.CreateExt64(); + + int[] shifts = { 32, 117, 191 }; + for (int i = 0; i < shifts.Length; ++i) + { + int w = shifts[i] >> 6, s = shifts[i] & 63; + Debug.Assert(s != 0); + tt[w ] ^= (c0 << s); + tt[w + 1] ^= (c1 << s) | (c0 >> -s); + tt[w + 2] ^= (c2 << s) | (c1 >> -s); + tt[w + 3] ^= (c2 >> -s); + } + + Reduce(tt, z); + + z[0] ^= e0; + z[1] ^= e1; + } + + public static void Square(ulong[] x, ulong[] z) + { + ulong[] tt = Nat256.CreateExt64(); + ImplSquare(x, tt); + Reduce(tt, z); + } + + public static void SquareAddToExt(ulong[] x, ulong[] zz) + { + ulong[] tt = Nat256.CreateExt64(); + ImplSquare(x, tt); + AddExt(zz, tt, zz); + } + + public static void SquareN(ulong[] x, int n, ulong[] z) + { + Debug.Assert(n > 0); + + ulong[] tt = Nat256.CreateExt64(); + ImplSquare(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + ImplSquare(z, tt); + Reduce(tt, z); + } + } + + public static uint Trace(ulong[] x) + { + // Non-zero-trace bits: 0, 159 + return (uint)(x[0] ^ (x[2] >> 31)) & 1U; + } + + protected static void ImplCompactExt(ulong[] zz) + { + ulong z0 = zz[0], z1 = zz[1], z2 = zz[2], z3 = zz[3], z4 = zz[4], z5 = zz[5], z6 = zz[6], z7 = zz[7]; + zz[0] = z0 ^ (z1 << 59); + zz[1] = (z1 >> 5) ^ (z2 << 54); + zz[2] = (z2 >> 10) ^ (z3 << 49); + zz[3] = (z3 >> 15) ^ (z4 << 44); + zz[4] = (z4 >> 20) ^ (z5 << 39); + zz[5] = (z5 >> 25) ^ (z6 << 34); + zz[6] = (z6 >> 30) ^ (z7 << 29); + zz[7] = (z7 >> 35); + } + + protected static void ImplExpand(ulong[] x, ulong[] z) + { + ulong x0 = x[0], x1 = x[1], x2 = x[2], x3 = x[3]; + z[0] = x0 & M59; + z[1] = ((x0 >> 59) ^ (x1 << 5)) & M59; + z[2] = ((x1 >> 54) ^ (x2 << 10)) & M59; + z[3] = ((x2 >> 49) ^ (x3 << 15)); + } + + protected static void ImplMultiply(ulong[] x, ulong[] y, ulong[] zz) + { +#if NETCOREAPP3_0_OR_GREATER + if (Pclmulqdq.IsSupported) + { + var X01 = Vector128.Create(x[0], x[1]); + var X23 = Vector128.Create(x[2], x[3]); + var Y01 = Vector128.Create(y[0], y[1]); + var Y23 = Vector128.Create(y[2], y[3]); + var X03 = Sse2.Xor(X01, X23); + var Y03 = Sse2.Xor(Y01, Y23); + + var Z01 = Pclmulqdq.CarrylessMultiply(X01, Y01, 0x00); + var Z12 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y01, 0x01), + Pclmulqdq.CarrylessMultiply(X01, Y01, 0x10)); + var Z23 = Pclmulqdq.CarrylessMultiply(X01, Y01, 0x11); + + var Z45 = Pclmulqdq.CarrylessMultiply(X23, Y23, 0x00); + var Z56 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X23, Y23, 0x01), + Pclmulqdq.CarrylessMultiply(X23, Y23, 0x10)); + var Z67 = Pclmulqdq.CarrylessMultiply(X23, Y23, 0x11); + + var K01 = Pclmulqdq.CarrylessMultiply(X03, Y03, 0x00); + var K12 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X03, Y03, 0x01), + Pclmulqdq.CarrylessMultiply(X03, Y03, 0x10)); + var K23 = Pclmulqdq.CarrylessMultiply(X03, Y03, 0x11); + + K01 = Sse2.Xor(K01, Z01); + K12 = Sse2.Xor(K12, Z12); + K23 = Sse2.Xor(K23, Z23); + + K01 = Sse2.Xor(K01, Z45); + K12 = Sse2.Xor(K12, Z56); + K23 = Sse2.Xor(K23, Z67); + + Z23 = Sse2.Xor(Z23, K01); + Z45 = Sse2.Xor(Z45, K23); + + zz[0] = Z01.GetElement(0); + zz[1] = Z01.GetElement(1) ^ Z12.GetElement(0); + zz[2] = Z23.GetElement(0) ^ Z12.GetElement(1); + zz[3] = Z23.GetElement(1) ^ K12.GetElement(0); + zz[4] = Z45.GetElement(0) ^ K12.GetElement(1); + zz[5] = Z45.GetElement(1) ^ Z56.GetElement(0); + zz[6] = Z67.GetElement(0) ^ Z56.GetElement(1); + zz[7] = Z67.GetElement(1); + return; + } +#endif + + /* + * "Two-level seven-way recursion" as described in "Batch binary Edwards", Daniel J. Bernstein. + */ + + ulong[] f = new ulong[4], g = new ulong[4]; + ImplExpand(x, f); + ImplExpand(y, g); + + ulong[] u = new ulong[8]; + + ImplMulwAcc(u, f[0], g[0], zz, 0); + ImplMulwAcc(u, f[1], g[1], zz, 1); + ImplMulwAcc(u, f[2], g[2], zz, 2); + ImplMulwAcc(u, f[3], g[3], zz, 3); + + // U *= (1 - t^n) + for (int i = 5; i > 0; --i) + { + zz[i] ^= zz[i - 1]; + } + + ImplMulwAcc(u, f[0] ^ f[1], g[0] ^ g[1], zz, 1); + ImplMulwAcc(u, f[2] ^ f[3], g[2] ^ g[3], zz, 3); + + // V *= (1 - t^2n) + for (int i = 7; i > 1; --i) + { + zz[i] ^= zz[i - 2]; + } + + // Double-length recursion + { + ulong c0 = f[0] ^ f[2], c1 = f[1] ^ f[3]; + ulong d0 = g[0] ^ g[2], d1 = g[1] ^ g[3]; + ImplMulwAcc(u, c0 ^ c1, d0 ^ d1, zz, 3); + ulong[] t = new ulong[3]; + ImplMulwAcc(u, c0, d0, t, 0); + ImplMulwAcc(u, c1, d1, t, 1); + ulong t0 = t[0], t1 = t[1], t2 = t[2]; + zz[2] ^= t0; + zz[3] ^= t0 ^ t1; + zz[4] ^= t2 ^ t1; + zz[5] ^= t2; + } + + ImplCompactExt(zz); + } + + protected static void ImplMulwAcc(ulong[] u, ulong x, ulong y, ulong[] z, int zOff) + { + Debug.Assert(x >> 59 == 0); + Debug.Assert(y >> 59 == 0); + + //u[0] = 0; + u[1] = y; + u[2] = u[1] << 1; + u[3] = u[2] ^ y; + u[4] = u[2] << 1; + u[5] = u[4] ^ y; + u[6] = u[3] << 1; + u[7] = u[6] ^ y; + + uint j = (uint)x; + ulong g, h = 0, l = u[j & 7] + ^ (u[(j >> 3) & 7] << 3); + int k = 54; + do + { + j = (uint)(x >> k); + g = u[j & 7] + ^ u[(j >> 3) & 7] << 3; + l ^= (g << k); + h ^= (g >> -k); + } + while ((k -= 6) > 0); + + Debug.Assert(h >> 53 == 0); + + z[zOff ] ^= l & M59; + z[zOff + 1] ^= (l >> 59) ^ (h << 5); + } + + protected static void ImplSquare(ulong[] x, ulong[] zz) + { + Interleave.Expand64To128(x, 0, 4, zz, 0); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233Field.cs.meta new file mode 100644 index 000000000..639f23513 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3383a8a7710727f4991e6f2ab078edfa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233FieldElement.cs new file mode 100644 index 000000000..c3e03762c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233FieldElement.cs @@ -0,0 +1,237 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT233FieldElement + : AbstractF2mFieldElement + { + protected internal readonly ulong[] x; + + public SecT233FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.BitLength > 233) + throw new ArgumentException("value invalid for SecT233FieldElement", "x"); + + this.x = SecT233Field.FromBigInteger(x); + } + + public SecT233FieldElement() + { + this.x = Nat256.Create64(); + } + + protected internal SecT233FieldElement(ulong[] x) + { + this.x = x; + } + + public override bool IsOne + { + get { return Nat256.IsOne64(x); } + } + + public override bool IsZero + { + get { return Nat256.IsZero64(x); } + } + + public override bool TestBitZero() + { + return (x[0] & 1UL) != 0UL; + } + + public override BigInteger ToBigInteger() + { + return Nat256.ToBigInteger64(x); + } + + public override string FieldName + { + get { return "SecT233Field"; } + } + + public override int FieldSize + { + get { return 233; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + ulong[] z = Nat256.Create64(); + SecT233Field.Add(x, ((SecT233FieldElement)b).x, z); + return new SecT233FieldElement(z); + } + + public override ECFieldElement AddOne() + { + ulong[] z = Nat256.Create64(); + SecT233Field.AddOne(x, z); + return new SecT233FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + // Addition and Subtraction are the same in F2m + return Add(b); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + ulong[] z = Nat256.Create64(); + SecT233Field.Multiply(x, ((SecT233FieldElement)b).x, z); + return new SecT233FieldElement(z); + } + + public override ECFieldElement MultiplyMinusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + return MultiplyPlusProduct(b, x, y); + } + + public override ECFieldElement MultiplyPlusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + ulong[] ax = this.x, bx = ((SecT233FieldElement)b).x; + ulong[] xx = ((SecT233FieldElement)x).x, yx = ((SecT233FieldElement)y).x; + + ulong[] tt = Nat256.CreateExt64(); + SecT233Field.MultiplyAddToExt(ax, bx, tt); + SecT233Field.MultiplyAddToExt(xx, yx, tt); + + ulong[] z = Nat256.Create64(); + SecT233Field.Reduce(tt, z); + return new SecT233FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + return Multiply(b.Invert()); + } + + public override ECFieldElement Negate() + { + return this; + } + + public override ECFieldElement Square() + { + ulong[] z = Nat256.Create64(); + SecT233Field.Square(x, z); + return new SecT233FieldElement(z); + } + + public override ECFieldElement SquareMinusProduct(ECFieldElement x, ECFieldElement y) + { + return SquarePlusProduct(x, y); + } + + public override ECFieldElement SquarePlusProduct(ECFieldElement x, ECFieldElement y) + { + ulong[] ax = this.x; + ulong[] xx = ((SecT233FieldElement)x).x, yx = ((SecT233FieldElement)y).x; + + ulong[] tt = Nat256.CreateExt64(); + SecT233Field.SquareAddToExt(ax, tt); + SecT233Field.MultiplyAddToExt(xx, yx, tt); + + ulong[] z = Nat256.Create64(); + SecT233Field.Reduce(tt, z); + return new SecT233FieldElement(z); + } + + public override ECFieldElement SquarePow(int pow) + { + if (pow < 1) + return this; + + ulong[] z = Nat256.Create64(); + SecT233Field.SquareN(x, pow, z); + return new SecT233FieldElement(z); + } + + public override ECFieldElement HalfTrace() + { + ulong[] z = Nat256.Create64(); + SecT233Field.HalfTrace(x, z); + return new SecT233FieldElement(z); + } + + public override bool HasFastTrace + { + get { return true; } + } + + public override int Trace() + { + return (int)SecT233Field.Trace(x); + } + + public override ECFieldElement Invert() + { + ulong[] z = Nat256.Create64(); + SecT233Field.Invert(x, z); + return new SecT233FieldElement(z); + } + + public override ECFieldElement Sqrt() + { + ulong[] z = Nat256.Create64(); + SecT233Field.Sqrt(x, z); + return new SecT233FieldElement(z); + } + + public virtual int Representation + { + get { return F2mFieldElement.Tpb; } + } + + public virtual int M + { + get { return 233; } + } + + public virtual int K1 + { + get { return 74; } + } + + public virtual int K2 + { + get { return 0; } + } + + public virtual int K3 + { + get { return 0; } + } + + public override bool Equals(object obj) + { + return Equals(obj as SecT233FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecT233FieldElement); + } + + public virtual bool Equals(SecT233FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat256.Eq64(x, other.x); + } + + public override int GetHashCode() + { + return 2330074 ^ Arrays.GetHashCode(x, 0, 4); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233FieldElement.cs.meta new file mode 100644 index 000000000..6b13cdcdb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8eb22946dd4169543b83ef9f11743f5b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233K1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233K1Curve.cs new file mode 100644 index 000000000..aa6d452f3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233K1Curve.cs @@ -0,0 +1,187 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT233K1Curve + : AbstractF2mCurve + { + private const int SECT233K1_DEFAULT_COORDS = COORD_LAMBDA_PROJECTIVE; + private const int SECT233K1_FE_LONGS = 4; + private static readonly ECFieldElement[] SECT233K1_AFFINE_ZS = new ECFieldElement[] { new SecT233FieldElement(BigInteger.One) }; + + protected readonly SecT233K1Point m_infinity; + + public SecT233K1Curve() + : base(233, 74, 0, 0) + { + this.m_infinity = new SecT233K1Point(this, null, null); + + this.m_a = FromBigInteger(BigInteger.Zero); + this.m_b = FromBigInteger(BigInteger.One); + this.m_order = new BigInteger(1, Hex.DecodeStrict("8000000000000000000000000000069D5BB915BCD46EFB1AD5F173ABDF")); + this.m_cofactor = BigInteger.ValueOf(4); + + this.m_coord = SECT233K1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecT233K1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_LAMBDA_PROJECTIVE: + return true; + default: + return false; + } + } + + protected override ECMultiplier CreateDefaultMultiplier() + { + return new WTauNafMultiplier(); + } + + public override int FieldSize + { + get { return 233; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecT233FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecT233K1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecT233K1Point(this, x, y, zs); + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override bool IsKoblitz + { + get { return true; } + } + + public virtual int M + { + get { return 233; } + } + + public virtual bool IsTrinomial + { + get { return true; } + } + + public virtual int K1 + { + get { return 74; } + } + + public virtual int K2 + { + get { return 0; } + } + + public virtual int K3 + { + get { return 0; } + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + ulong[] table = new ulong[len * SECT233K1_FE_LONGS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat256.Copy64(((SecT233FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECT233K1_FE_LONGS; + Nat256.Copy64(((SecT233FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECT233K1_FE_LONGS; + } + } + + return new SecT233K1LookupTable(this, table, len); + } + + private class SecT233K1LookupTable + : AbstractECLookupTable + { + private readonly SecT233K1Curve m_outer; + private readonly ulong[] m_table; + private readonly int m_size; + + internal SecT233K1LookupTable(SecT233K1Curve outer, ulong[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + ulong[] x = Nat256.Create64(), y = Nat256.Create64(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECT233K1_FE_LONGS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECT233K1_FE_LONGS + j] & MASK; + } + + pos += (SECT233K1_FE_LONGS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + ulong[] x = Nat256.Create64(), y = Nat256.Create64(); + int pos = index * SECT233K1_FE_LONGS * 2; + + for (int j = 0; j < SECT233K1_FE_LONGS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECT233K1_FE_LONGS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(ulong[] x, ulong[] y) + { + return m_outer.CreateRawPoint(new SecT233FieldElement(x), new SecT233FieldElement(y), SECT233K1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233K1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233K1Curve.cs.meta new file mode 100644 index 000000000..d16d652fd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233K1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de272d7a6f28ae24f98d3e5a96c7a23e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233K1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233K1Point.cs new file mode 100644 index 000000000..66d270f83 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233K1Point.cs @@ -0,0 +1,286 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT233K1Point + : AbstractF2mPoint + { + internal SecT233K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecT233K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecT233K1Point(null, this.AffineXCoord, this.AffineYCoord); + } + + public override ECFieldElement YCoord + { + get + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + if (this.IsInfinity || X.IsZero) + return L; + + // Y is actually Lambda (X + Y/X) here; convert to affine value on the fly + ECFieldElement Y = L.Add(X).Multiply(X); + + ECFieldElement Z = RawZCoords[0]; + if (!Z.IsOne) + { + Y = Y.Divide(Z); + } + + return Y; + } + } + + protected internal override bool CompressionYTilde + { + get + { + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return false; + + ECFieldElement Y = this.RawYCoord; + + // Y is actually Lambda (X + Y/X) here + return Y.TestBitZero() != X.TestBitZero(); + } + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + ECFieldElement X2 = b.RawXCoord; + + if (X1.IsZero) + { + if (X2.IsZero) + { + return curve.Infinity; + } + + return b.Add(this); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord, Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement U2 = X2, S2 = L2; + if (!Z1IsOne) + { + U2 = U2.Multiply(Z1); + S2 = S2.Multiply(Z1); + } + + bool Z2IsOne = Z2.IsOne; + ECFieldElement U1 = X1, S1 = L1; + if (!Z2IsOne) + { + U1 = U1.Multiply(Z2); + S1 = S1.Multiply(Z2); + } + + ECFieldElement A = S1.Add(S2); + ECFieldElement B = U1.Add(U2); + + if (B.IsZero) + { + if (A.IsZero) + return Twice(); + + return curve.Infinity; + } + + ECFieldElement X3, L3, Z3; + if (X2.IsZero) + { + // TODO This can probably be optimized quite a bit + ECPoint p = this.Normalize(); + X1 = p.XCoord; + ECFieldElement Y1 = p.YCoord; + + ECFieldElement Y2 = L2; + ECFieldElement L = Y1.Add(Y2).Divide(X1); + + X3 = L.Square().Add(L).Add(X1); + if (X3.IsZero) + { + return new SecT233K1Point(curve, X3, curve.B); + } + + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + L3 = Y3.Divide(X3).Add(X3); + Z3 = curve.FromBigInteger(BigInteger.One); + } + else + { + B = B.Square(); + + ECFieldElement AU1 = A.Multiply(U1); + ECFieldElement AU2 = A.Multiply(U2); + + X3 = AU1.Multiply(AU2); + if (X3.IsZero) + { + return new SecT233K1Point(curve, X3, curve.B); + } + + ECFieldElement ABZ2 = A.Multiply(B); + if (!Z2IsOne) + { + ABZ2 = ABZ2.Multiply(Z2); + } + + L3 = AU2.Add(B).SquarePlusProduct(ABZ2, L1.Add(Z1)); + + Z3 = ABZ2; + if (!Z1IsOne) + { + Z3 = Z3.Multiply(Z1); + } + } + + return new SecT233K1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + { + return this; + } + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return curve.Infinity; + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement Z1Sq = Z1IsOne ? Z1 : Z1.Square(); + ECFieldElement T; + if (Z1IsOne) + { + T = L1.Square().Add(L1); + } + else + { + T = L1.Add(Z1).Multiply(L1); + } + + if (T.IsZero) + { + return new SecT233K1Point(curve, T, curve.B); + } + + ECFieldElement X3 = T.Square(); + ECFieldElement Z3 = Z1IsOne ? T : T.Multiply(Z1Sq); + + ECFieldElement t1 = L1.Add(X1).Square(); + ECFieldElement t2 = Z1IsOne ? Z1 : Z1Sq.Square(); + ECFieldElement L3 = t1.Add(T).Add(Z1Sq).Multiply(t1).Add(t2).Add(X3).Add(Z3); + + return new SecT233K1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return b; + } + + // NOTE: TwicePlus() only optimized for lambda-affine argument + ECFieldElement X2 = b.RawXCoord, Z2 = b.RawZCoords[0]; + if (X2.IsZero || !Z2.IsOne) + { + return Twice().Add(b); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord; + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement L1Sq = L1.Square(); + ECFieldElement Z1Sq = Z1.Square(); + ECFieldElement L1Z1 = L1.Multiply(Z1); + + ECFieldElement T = L1Sq.Add(L1Z1); + ECFieldElement L2plus1 = L2.AddOne(); + ECFieldElement A = L2plus1.Multiply(Z1Sq).Add(L1Sq).MultiplyPlusProduct(T, X1Sq, Z1Sq); + ECFieldElement X2Z1Sq = X2.Multiply(Z1Sq); + ECFieldElement B = X2Z1Sq.Add(T).Square(); + + if (B.IsZero) + { + if (A.IsZero) + { + return b.Twice(); + } + + return curve.Infinity; + } + + if (A.IsZero) + { + return new SecT233K1Point(curve, A, curve.B); + } + + ECFieldElement X3 = A.Square().Multiply(X2Z1Sq); + ECFieldElement Z3 = A.Multiply(B).Multiply(Z1Sq); + ECFieldElement L3 = A.Add(B).Square().MultiplyPlusProduct(T, L2plus1, Z3); + + return new SecT233K1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Negate() + { + if (this.IsInfinity) + return this; + + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return this; + + // L is actually Lambda (X + Y/X) here + ECFieldElement L = this.RawYCoord, Z = this.RawZCoords[0]; + return new SecT233K1Point(Curve, X, L.Add(Z), new ECFieldElement[] { Z }); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233K1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233K1Point.cs.meta new file mode 100644 index 000000000..b2c7aac05 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233K1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d28b86257b8af904e8f2390a9b777469 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233R1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233R1Curve.cs new file mode 100644 index 000000000..44ab98b06 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233R1Curve.cs @@ -0,0 +1,181 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT233R1Curve + : AbstractF2mCurve + { + private const int SECT233R1_DEFAULT_COORDS = COORD_LAMBDA_PROJECTIVE; + private const int SECT233R1_FE_LONGS = 4; + private static readonly ECFieldElement[] SECT233R1_AFFINE_ZS = new ECFieldElement[] { new SecT233FieldElement(BigInteger.One) }; + + protected readonly SecT233R1Point m_infinity; + + public SecT233R1Curve() + : base(233, 74, 0, 0) + { + this.m_infinity = new SecT233R1Point(this, null, null); + + this.m_a = FromBigInteger(BigInteger.One); + this.m_b = FromBigInteger(new BigInteger(1, Hex.DecodeStrict("0066647EDE6C332C7F8C0923BB58213B333B20E9CE4281FE115F7D8F90AD"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("01000000000000000000000000000013E974E72F8A6922031D2603CFE0D7")); + this.m_cofactor = BigInteger.Two; + + this.m_coord = SECT233R1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecT233R1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_LAMBDA_PROJECTIVE: + return true; + default: + return false; + } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return 233; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecT233FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecT233R1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecT233R1Point(this, x, y, zs); + } + + public override bool IsKoblitz + { + get { return false; } + } + + public virtual int M + { + get { return 233; } + } + + public virtual bool IsTrinomial + { + get { return true; } + } + + public virtual int K1 + { + get { return 74; } + } + + public virtual int K2 + { + get { return 0; } + } + + public virtual int K3 + { + get { return 0; } + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + ulong[] table = new ulong[len * SECT233R1_FE_LONGS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat256.Copy64(((SecT233FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECT233R1_FE_LONGS; + Nat256.Copy64(((SecT233FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECT233R1_FE_LONGS; + } + } + + return new SecT233R1LookupTable(this, table, len); + } + + private class SecT233R1LookupTable + : AbstractECLookupTable + { + private readonly SecT233R1Curve m_outer; + private readonly ulong[] m_table; + private readonly int m_size; + + internal SecT233R1LookupTable(SecT233R1Curve outer, ulong[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + ulong[] x = Nat256.Create64(), y = Nat256.Create64(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECT233R1_FE_LONGS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECT233R1_FE_LONGS + j] & MASK; + } + + pos += (SECT233R1_FE_LONGS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + ulong[] x = Nat256.Create64(), y = Nat256.Create64(); + int pos = index * SECT233R1_FE_LONGS * 2; + + for (int j = 0; j < SECT233R1_FE_LONGS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECT233R1_FE_LONGS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(ulong[] x, ulong[] y) + { + return m_outer.CreateRawPoint(new SecT233FieldElement(x), new SecT233FieldElement(y), SECT233R1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233R1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233R1Curve.cs.meta new file mode 100644 index 000000000..497957a69 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233R1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 39fcb8d8fd481b744a4edf0d4452c93d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233R1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233R1Point.cs new file mode 100644 index 000000000..f35013a82 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233R1Point.cs @@ -0,0 +1,269 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT233R1Point + : AbstractF2mPoint + { + internal SecT233R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecT233R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecT233R1Point(null, AffineXCoord, AffineYCoord); + } + + public override ECFieldElement YCoord + { + get + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + if (this.IsInfinity || X.IsZero) + return L; + + // Y is actually Lambda (X + Y/X) here; convert to affine value on the fly + ECFieldElement Y = L.Add(X).Multiply(X); + + ECFieldElement Z = RawZCoords[0]; + if (!Z.IsOne) + { + Y = Y.Divide(Z); + } + + return Y; + } + } + + protected internal override bool CompressionYTilde + { + get + { + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return false; + + ECFieldElement Y = this.RawYCoord; + + // Y is actually Lambda (X + Y/X) here + return Y.TestBitZero() != X.TestBitZero(); + } + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + ECFieldElement X2 = b.RawXCoord; + + if (X1.IsZero) + { + if (X2.IsZero) + return curve.Infinity; + + return b.Add(this); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord, Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement U2 = X2, S2 = L2; + if (!Z1IsOne) + { + U2 = U2.Multiply(Z1); + S2 = S2.Multiply(Z1); + } + + bool Z2IsOne = Z2.IsOne; + ECFieldElement U1 = X1, S1 = L1; + if (!Z2IsOne) + { + U1 = U1.Multiply(Z2); + S1 = S1.Multiply(Z2); + } + + ECFieldElement A = S1.Add(S2); + ECFieldElement B = U1.Add(U2); + + if (B.IsZero) + { + if (A.IsZero) + return Twice(); + + return curve.Infinity; + } + + ECFieldElement X3, L3, Z3; + if (X2.IsZero) + { + // TODO This can probably be optimized quite a bit + ECPoint p = this.Normalize(); + X1 = p.XCoord; + ECFieldElement Y1 = p.YCoord; + + ECFieldElement Y2 = L2; + ECFieldElement L = Y1.Add(Y2).Divide(X1); + + X3 = L.Square().Add(L).Add(X1).AddOne(); + if (X3.IsZero) + { + return new SecT233R1Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + L3 = Y3.Divide(X3).Add(X3); + Z3 = curve.FromBigInteger(BigInteger.One); + } + else + { + B = B.Square(); + + ECFieldElement AU1 = A.Multiply(U1); + ECFieldElement AU2 = A.Multiply(U2); + + X3 = AU1.Multiply(AU2); + if (X3.IsZero) + { + return new SecT233R1Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement ABZ2 = A.Multiply(B); + if (!Z2IsOne) + { + ABZ2 = ABZ2.Multiply(Z2); + } + + L3 = AU2.Add(B).SquarePlusProduct(ABZ2, L1.Add(Z1)); + + Z3 = ABZ2; + if (!Z1IsOne) + { + Z3 = Z3.Multiply(Z1); + } + } + + return new SecT233R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return curve.Infinity; + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement L1Z1 = Z1IsOne ? L1 : L1.Multiply(Z1); + ECFieldElement Z1Sq = Z1IsOne ? Z1 : Z1.Square(); + ECFieldElement T = L1.Square().Add(L1Z1).Add(Z1Sq); + if (T.IsZero) + { + return new SecT233R1Point(curve, T, curve.B.Sqrt()); + } + + ECFieldElement X3 = T.Square(); + ECFieldElement Z3 = Z1IsOne ? T : T.Multiply(Z1Sq); + + ECFieldElement X1Z1 = Z1IsOne ? X1 : X1.Multiply(Z1); + ECFieldElement L3 = X1Z1.SquarePlusProduct(T, L1Z1).Add(X3).Add(Z3); + + return new SecT233R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return b; + } + + ECFieldElement X2 = b.RawXCoord, Z2 = b.RawZCoords[0]; + if (X2.IsZero || !Z2.IsOne) + { + return Twice().Add(b); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord; + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement L1Sq = L1.Square(); + ECFieldElement Z1Sq = Z1.Square(); + ECFieldElement L1Z1 = L1.Multiply(Z1); + + ECFieldElement T = Z1Sq.Add(L1Sq).Add(L1Z1); + ECFieldElement A = L2.Multiply(Z1Sq).Add(L1Sq).MultiplyPlusProduct(T, X1Sq, Z1Sq); + ECFieldElement X2Z1Sq = X2.Multiply(Z1Sq); + ECFieldElement B = X2Z1Sq.Add(T).Square(); + + if (B.IsZero) + { + if (A.IsZero) + return b.Twice(); + + return curve.Infinity; + } + + if (A.IsZero) + { + return new SecT233R1Point(curve, A, curve.B.Sqrt()); + } + + ECFieldElement X3 = A.Square().Multiply(X2Z1Sq); + ECFieldElement Z3 = A.Multiply(B).Multiply(Z1Sq); + ECFieldElement L3 = A.Add(B).Square().MultiplyPlusProduct(T, L2.AddOne(), Z3); + + return new SecT233R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Negate() + { + if (this.IsInfinity) + return this; + + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return this; + + // L is actually Lambda (X + Y/X) here + ECFieldElement L = this.RawYCoord, Z = this.RawZCoords[0]; + return new SecT233R1Point(Curve, X, L.Add(Z), new ECFieldElement[] { Z }); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233R1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233R1Point.cs.meta new file mode 100644 index 000000000..c6585be0a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT233R1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8bf5c80ccef6464da43af257433fbb2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239Field.cs new file mode 100644 index 000000000..022768be4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239Field.cs @@ -0,0 +1,394 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +#if NETCOREAPP3_0_OR_GREATER +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT239Field + { + private const ulong M47 = ulong.MaxValue >> 17; + private const ulong M60 = ulong.MaxValue >> 4; + + public static void Add(ulong[] x, ulong[] y, ulong[] z) + { + z[0] = x[0] ^ y[0]; + z[1] = x[1] ^ y[1]; + z[2] = x[2] ^ y[2]; + z[3] = x[3] ^ y[3]; + } + + public static void AddExt(ulong[] xx, ulong[] yy, ulong[] zz) + { + zz[0] = xx[0] ^ yy[0]; + zz[1] = xx[1] ^ yy[1]; + zz[2] = xx[2] ^ yy[2]; + zz[3] = xx[3] ^ yy[3]; + zz[4] = xx[4] ^ yy[4]; + zz[5] = xx[5] ^ yy[5]; + zz[6] = xx[6] ^ yy[6]; + zz[7] = xx[7] ^ yy[7]; + } + + public static void AddOne(ulong[] x, ulong[] z) + { + z[0] = x[0] ^ 1UL; + z[1] = x[1]; + z[2] = x[2]; + z[3] = x[3]; + } + + private static void AddTo(ulong[] x, ulong[] z) + { + z[0] ^= x[0]; + z[1] ^= x[1]; + z[2] ^= x[2]; + z[3] ^= x[3]; + } + + public static ulong[] FromBigInteger(BigInteger x) + { + return Nat.FromBigInteger64(239, x); + } + + public static void HalfTrace(ulong[] x, ulong[] z) + { + ulong[] tt = Nat256.CreateExt64(); + + Nat256.Copy64(x, z); + for (int i = 1; i < 239; i += 2) + { + ImplSquare(z, tt); + Reduce(tt, z); + ImplSquare(z, tt); + Reduce(tt, z); + AddTo(x, z); + } + } + + public static void Invert(ulong[] x, ulong[] z) + { + if (Nat256.IsZero64(x)) + throw new InvalidOperationException(); + + // Itoh-Tsujii inversion + + ulong[] t0 = Nat256.Create64(); + ulong[] t1 = Nat256.Create64(); + + Square(x, t0); + Multiply(t0, x, t0); + Square(t0, t0); + Multiply(t0, x, t0); + SquareN(t0, 3, t1); + Multiply(t1, t0, t1); + Square(t1, t1); + Multiply(t1, x, t1); + SquareN(t1, 7, t0); + Multiply(t0, t1, t0); + SquareN(t0, 14, t1); + Multiply(t1, t0, t1); + Square(t1, t1); + Multiply(t1, x, t1); + SquareN(t1, 29, t0); + Multiply(t0, t1, t0); + Square(t0, t0); + Multiply(t0, x, t0); + SquareN(t0, 59, t1); + Multiply(t1, t0, t1); + Square(t1, t1); + Multiply(t1, x, t1); + SquareN(t1, 119, t0); + Multiply(t0, t1, t0); + Square(t0, z); + } + + public static void Multiply(ulong[] x, ulong[] y, ulong[] z) + { + ulong[] tt = Nat256.CreateExt64(); + ImplMultiply(x, y, tt); + Reduce(tt, z); + } + + public static void MultiplyAddToExt(ulong[] x, ulong[] y, ulong[] zz) + { + ulong[] tt = Nat256.CreateExt64(); + ImplMultiply(x, y, tt); + AddExt(zz, tt, zz); + } + + public static void Reduce(ulong[] xx, ulong[] z) + { + ulong x0 = xx[0], x1 = xx[1], x2 = xx[2], x3 = xx[3]; + ulong x4 = xx[4], x5 = xx[5], x6 = xx[6], x7 = xx[7]; + + x3 ^= (x7 << 17); + x4 ^= (x7 >> 47); + x5 ^= (x7 << 47); + x6 ^= (x7 >> 17); + + x2 ^= (x6 << 17); + x3 ^= (x6 >> 47); + x4 ^= (x6 << 47); + x5 ^= (x6 >> 17); + + x1 ^= (x5 << 17); + x2 ^= (x5 >> 47); + x3 ^= (x5 << 47); + x4 ^= (x5 >> 17); + + x0 ^= (x4 << 17); + x1 ^= (x4 >> 47); + x2 ^= (x4 << 47); + x3 ^= (x4 >> 17); + + ulong t = x3 >> 47; + z[0] = x0 ^ t; + z[1] = x1; + z[2] = x2 ^ (t << 30); + z[3] = x3 & M47; + } + + public static void Reduce17(ulong[] z, int zOff) + { + ulong z3 = z[zOff + 3], t = z3 >> 47; + z[zOff ] ^= t; + z[zOff + 2] ^= (t << 30); + z[zOff + 3] = z3 & M47; + } + + public static void Sqrt(ulong[] x, ulong[] z) + { + ulong c0 = Interleave.Unshuffle(x[0], x[1], out ulong e0); + ulong c1 = Interleave.Unshuffle(x[2], x[3], out ulong e1); + + ulong c2, c3; + c3 = (c1 >> 49); + c2 = (c0 >> 49) | (c1 << 15); + c1 ^= (c0 << 15); + + ulong[] tt = Nat256.CreateExt64(); + + int[] shifts = { 39, 120 }; + for (int i = 0; i < shifts.Length; ++i) + { + int w = shifts[i] >> 6, s = shifts[i] & 63; + Debug.Assert(s != 0); + tt[w ] ^= (c0 << s); + tt[w + 1] ^= (c1 << s) | (c0 >> -s); + tt[w + 2] ^= (c2 << s) | (c1 >> -s); + tt[w + 3] ^= (c3 << s) | (c2 >> -s); + tt[w + 4] ^= (c3 >> -s); + } + + Reduce(tt, z); + + z[0] ^= e0; + z[1] ^= e1; + } + + public static void Square(ulong[] x, ulong[] z) + { + ulong[] tt = Nat256.CreateExt64(); + ImplSquare(x, tt); + Reduce(tt, z); + } + + public static void SquareAddToExt(ulong[] x, ulong[] zz) + { + ulong[] tt = Nat256.CreateExt64(); + ImplSquare(x, tt); + AddExt(zz, tt, zz); + } + + public static void SquareN(ulong[] x, int n, ulong[] z) + { + Debug.Assert(n > 0); + + ulong[] tt = Nat256.CreateExt64(); + ImplSquare(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + ImplSquare(z, tt); + Reduce(tt, z); + } + } + + public static uint Trace(ulong[] x) + { + // Non-zero-trace bits: 0, 81, 162 + return (uint)(x[0] ^ (x[1] >> 17) ^ (x[2] >> 34)) & 1U; + } + + protected static void ImplCompactExt(ulong[] zz) + { + ulong z0 = zz[0], z1 = zz[1], z2 = zz[2], z3 = zz[3], z4 = zz[4], z5 = zz[5], z6 = zz[6], z7 = zz[7]; + zz[0] = z0 ^ (z1 << 60); + zz[1] = (z1 >> 4) ^ (z2 << 56); + zz[2] = (z2 >> 8) ^ (z3 << 52); + zz[3] = (z3 >> 12) ^ (z4 << 48); + zz[4] = (z4 >> 16) ^ (z5 << 44); + zz[5] = (z5 >> 20) ^ (z6 << 40); + zz[6] = (z6 >> 24) ^ (z7 << 36); + zz[7] = (z7 >> 28); + } + + protected static void ImplExpand(ulong[] x, ulong[] z) + { + ulong x0 = x[0], x1 = x[1], x2 = x[2], x3 = x[3]; + z[0] = x0 & M60; + z[1] = ((x0 >> 60) ^ (x1 << 4)) & M60; + z[2] = ((x1 >> 56) ^ (x2 << 8)) & M60; + z[3] = ((x2 >> 52) ^ (x3 << 12)); + } + + protected static void ImplMultiply(ulong[] x, ulong[] y, ulong[] zz) + { +#if NETCOREAPP3_0_OR_GREATER + if (Pclmulqdq.IsSupported) + { + var X01 = Vector128.Create(x[0], x[1]); + var X23 = Vector128.Create(x[2], x[3]); + var Y01 = Vector128.Create(y[0], y[1]); + var Y23 = Vector128.Create(y[2], y[3]); + var X03 = Sse2.Xor(X01, X23); + var Y03 = Sse2.Xor(Y01, Y23); + + var Z01 = Pclmulqdq.CarrylessMultiply(X01, Y01, 0x00); + var Z12 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y01, 0x01), + Pclmulqdq.CarrylessMultiply(X01, Y01, 0x10)); + var Z23 = Pclmulqdq.CarrylessMultiply(X01, Y01, 0x11); + + var Z45 = Pclmulqdq.CarrylessMultiply(X23, Y23, 0x00); + var Z56 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X23, Y23, 0x01), + Pclmulqdq.CarrylessMultiply(X23, Y23, 0x10)); + var Z67 = Pclmulqdq.CarrylessMultiply(X23, Y23, 0x11); + + var K01 = Pclmulqdq.CarrylessMultiply(X03, Y03, 0x00); + var K12 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X03, Y03, 0x01), + Pclmulqdq.CarrylessMultiply(X03, Y03, 0x10)); + var K23 = Pclmulqdq.CarrylessMultiply(X03, Y03, 0x11); + + K01 = Sse2.Xor(K01, Z01); + K12 = Sse2.Xor(K12, Z12); + K23 = Sse2.Xor(K23, Z23); + + K01 = Sse2.Xor(K01, Z45); + K12 = Sse2.Xor(K12, Z56); + K23 = Sse2.Xor(K23, Z67); + + Z23 = Sse2.Xor(Z23, K01); + Z45 = Sse2.Xor(Z45, K23); + + zz[0] = Z01.GetElement(0); + zz[1] = Z01.GetElement(1) ^ Z12.GetElement(0); + zz[2] = Z23.GetElement(0) ^ Z12.GetElement(1); + zz[3] = Z23.GetElement(1) ^ K12.GetElement(0); + zz[4] = Z45.GetElement(0) ^ K12.GetElement(1); + zz[5] = Z45.GetElement(1) ^ Z56.GetElement(0); + zz[6] = Z67.GetElement(0) ^ Z56.GetElement(1); + zz[7] = Z67.GetElement(1); + return; + } +#endif + + /* + * "Two-level seven-way recursion" as described in "Batch binary Edwards", Daniel J. Bernstein. + */ + + ulong[] f = new ulong[4], g = new ulong[4]; + ImplExpand(x, f); + ImplExpand(y, g); + + ulong[] u = new ulong[8]; + + ImplMulwAcc(u, f[0], g[0], zz, 0); + ImplMulwAcc(u, f[1], g[1], zz, 1); + ImplMulwAcc(u, f[2], g[2], zz, 2); + ImplMulwAcc(u, f[3], g[3], zz, 3); + + // U *= (1 - t^n) + for (int i = 5; i > 0; --i) + { + zz[i] ^= zz[i - 1]; + } + + ImplMulwAcc(u, f[0] ^ f[1], g[0] ^ g[1], zz, 1); + ImplMulwAcc(u, f[2] ^ f[3], g[2] ^ g[3], zz, 3); + + // V *= (1 - t^2n) + for (int i = 7; i > 1; --i) + { + zz[i] ^= zz[i - 2]; + } + + // Double-length recursion + { + ulong c0 = f[0] ^ f[2], c1 = f[1] ^ f[3]; + ulong d0 = g[0] ^ g[2], d1 = g[1] ^ g[3]; + ImplMulwAcc(u, c0 ^ c1, d0 ^ d1, zz, 3); + ulong[] t = new ulong[3]; + ImplMulwAcc(u, c0, d0, t, 0); + ImplMulwAcc(u, c1, d1, t, 1); + ulong t0 = t[0], t1 = t[1], t2 = t[2]; + zz[2] ^= t0; + zz[3] ^= t0 ^ t1; + zz[4] ^= t2 ^ t1; + zz[5] ^= t2; + } + + ImplCompactExt(zz); + } + + protected static void ImplMulwAcc(ulong[] u, ulong x, ulong y, ulong[] z, int zOff) + { + Debug.Assert(x >> 60 == 0); + Debug.Assert(y >> 60 == 0); + + //u[0] = 0; + u[1] = y; + u[2] = u[1] << 1; + u[3] = u[2] ^ y; + u[4] = u[2] << 1; + u[5] = u[4] ^ y; + u[6] = u[3] << 1; + u[7] = u[6] ^ y; + + uint j = (uint)x; + ulong g, h = 0, l = u[j & 7] + ^ (u[(j >> 3) & 7] << 3); + int k = 54; + do + { + j = (uint)(x >> k); + g = u[j & 7] + ^ u[(j >> 3) & 7] << 3; + l ^= (g << k); + h ^= (g >> -k); + } + while ((k -= 6) > 0); + + h ^= ((x & 0x0820820820820820L) & (ulong)(((long)y << 4) >> 63)) >> 5; + + Debug.Assert(h >> 55 == 0); + + z[zOff ] ^= l & M60; + z[zOff + 1] ^= (l >> 60) ^ (h << 4); + } + + protected static void ImplSquare(ulong[] x, ulong[] zz) + { + Interleave.Expand64To128(x, 0, 4, zz, 0); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239Field.cs.meta new file mode 100644 index 000000000..4938c5158 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7ed9c9a4301e3b3459b6f2d4e1bb4c82 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239FieldElement.cs new file mode 100644 index 000000000..aea8888a9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239FieldElement.cs @@ -0,0 +1,237 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT239FieldElement + : AbstractF2mFieldElement + { + protected internal readonly ulong[] x; + + public SecT239FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.BitLength > 239) + throw new ArgumentException("value invalid for SecT239FieldElement", "x"); + + this.x = SecT239Field.FromBigInteger(x); + } + + public SecT239FieldElement() + { + this.x = Nat256.Create64(); + } + + protected internal SecT239FieldElement(ulong[] x) + { + this.x = x; + } + + public override bool IsOne + { + get { return Nat256.IsOne64(x); } + } + + public override bool IsZero + { + get { return Nat256.IsZero64(x); } + } + + public override bool TestBitZero() + { + return (x[0] & 1L) != 0L; + } + + public override BigInteger ToBigInteger() + { + return Nat256.ToBigInteger64(x); + } + + public override string FieldName + { + get { return "SecT239Field"; } + } + + public override int FieldSize + { + get { return 239; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + ulong[] z = Nat256.Create64(); + SecT239Field.Add(x, ((SecT239FieldElement)b).x, z); + return new SecT239FieldElement(z); + } + + public override ECFieldElement AddOne() + { + ulong[] z = Nat256.Create64(); + SecT239Field.AddOne(x, z); + return new SecT239FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + // Addition and Subtraction are the same in F2m + return Add(b); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + ulong[] z = Nat256.Create64(); + SecT239Field.Multiply(x, ((SecT239FieldElement)b).x, z); + return new SecT239FieldElement(z); + } + + public override ECFieldElement MultiplyMinusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + return MultiplyPlusProduct(b, x, y); + } + + public override ECFieldElement MultiplyPlusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + ulong[] ax = this.x, bx = ((SecT239FieldElement)b).x; + ulong[] xx = ((SecT239FieldElement)x).x, yx = ((SecT239FieldElement)y).x; + + ulong[] tt = Nat256.CreateExt64(); + SecT239Field.MultiplyAddToExt(ax, bx, tt); + SecT239Field.MultiplyAddToExt(xx, yx, tt); + + ulong[] z = Nat256.Create64(); + SecT239Field.Reduce(tt, z); + return new SecT239FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + return Multiply(b.Invert()); + } + + public override ECFieldElement Negate() + { + return this; + } + + public override ECFieldElement Square() + { + ulong[] z = Nat256.Create64(); + SecT239Field.Square(x, z); + return new SecT239FieldElement(z); + } + + public override ECFieldElement SquareMinusProduct(ECFieldElement x, ECFieldElement y) + { + return SquarePlusProduct(x, y); + } + + public override ECFieldElement SquarePlusProduct(ECFieldElement x, ECFieldElement y) + { + ulong[] ax = this.x; + ulong[] xx = ((SecT239FieldElement)x).x, yx = ((SecT239FieldElement)y).x; + + ulong[] tt = Nat256.CreateExt64(); + SecT239Field.SquareAddToExt(ax, tt); + SecT239Field.MultiplyAddToExt(xx, yx, tt); + + ulong[] z = Nat256.Create64(); + SecT239Field.Reduce(tt, z); + return new SecT239FieldElement(z); + } + + public override ECFieldElement SquarePow(int pow) + { + if (pow < 1) + return this; + + ulong[] z = Nat256.Create64(); + SecT239Field.SquareN(x, pow, z); + return new SecT239FieldElement(z); + } + + public override ECFieldElement HalfTrace() + { + ulong[] z = Nat256.Create64(); + SecT239Field.HalfTrace(x, z); + return new SecT239FieldElement(z); + } + + public override bool HasFastTrace + { + get { return true; } + } + + public override int Trace() + { + return (int)SecT239Field.Trace(x); + } + + public override ECFieldElement Invert() + { + ulong[] z = Nat256.Create64(); + SecT239Field.Invert(x, z); + return new SecT239FieldElement(z); + } + + public override ECFieldElement Sqrt() + { + ulong[] z = Nat256.Create64(); + SecT239Field.Sqrt(x, z); + return new SecT239FieldElement(z); + } + + public virtual int Representation + { + get { return F2mFieldElement.Tpb; } + } + + public virtual int M + { + get { return 239; } + } + + public virtual int K1 + { + get { return 158; } + } + + public virtual int K2 + { + get { return 0; } + } + + public virtual int K3 + { + get { return 0; } + } + + public override bool Equals(object obj) + { + return Equals(obj as SecT239FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecT239FieldElement); + } + + public virtual bool Equals(SecT239FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat256.Eq64(x, other.x); + } + + public override int GetHashCode() + { + return 23900158 ^ Arrays.GetHashCode(x, 0, 4); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239FieldElement.cs.meta new file mode 100644 index 000000000..95c8bc307 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d3b2dc73110a51949be2327a20bbd675 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239K1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239K1Curve.cs new file mode 100644 index 000000000..39f76873b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239K1Curve.cs @@ -0,0 +1,187 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT239K1Curve + : AbstractF2mCurve + { + private const int SECT239K1_DEFAULT_COORDS = COORD_LAMBDA_PROJECTIVE; + private const int SECT239K1_FE_LONGS = 4; + private static readonly ECFieldElement[] SECT239K1_AFFINE_ZS = new ECFieldElement[] { new SecT239FieldElement(BigInteger.One) }; + + protected readonly SecT239K1Point m_infinity; + + public SecT239K1Curve() + : base(239, 158, 0, 0) + { + this.m_infinity = new SecT239K1Point(this, null, null); + + this.m_a = FromBigInteger(BigInteger.Zero); + this.m_b = FromBigInteger(BigInteger.One); + this.m_order = new BigInteger(1, Hex.DecodeStrict("2000000000000000000000000000005A79FEC67CB6E91F1C1DA800E478A5")); + this.m_cofactor = BigInteger.ValueOf(4); + + this.m_coord = SECT239K1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecT239K1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_LAMBDA_PROJECTIVE: + return true; + default: + return false; + } + } + + protected override ECMultiplier CreateDefaultMultiplier() + { + return new WTauNafMultiplier(); + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return 239; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecT239FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecT239K1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecT239K1Point(this, x, y, zs); + } + + public override bool IsKoblitz + { + get { return true; } + } + + public virtual int M + { + get { return 239; } + } + + public virtual bool IsTrinomial + { + get { return true; } + } + + public virtual int K1 + { + get { return 158; } + } + + public virtual int K2 + { + get { return 0; } + } + + public virtual int K3 + { + get { return 0; } + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + ulong[] table = new ulong[len * SECT239K1_FE_LONGS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat256.Copy64(((SecT239FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECT239K1_FE_LONGS; + Nat256.Copy64(((SecT239FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECT239K1_FE_LONGS; + } + } + + return new SecT239K1LookupTable(this, table, len); + } + + private class SecT239K1LookupTable + : AbstractECLookupTable + { + private readonly SecT239K1Curve m_outer; + private readonly ulong[] m_table; + private readonly int m_size; + + internal SecT239K1LookupTable(SecT239K1Curve outer, ulong[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + ulong[] x = Nat256.Create64(), y = Nat256.Create64(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECT239K1_FE_LONGS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECT239K1_FE_LONGS + j] & MASK; + } + + pos += (SECT239K1_FE_LONGS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + ulong[] x = Nat256.Create64(), y = Nat256.Create64(); + int pos = index * SECT239K1_FE_LONGS * 2; + + for (int j = 0; j < SECT239K1_FE_LONGS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECT239K1_FE_LONGS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(ulong[] x, ulong[] y) + { + return m_outer.CreateRawPoint(new SecT239FieldElement(x), new SecT239FieldElement(y), SECT239K1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239K1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239K1Curve.cs.meta new file mode 100644 index 000000000..19680c87c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239K1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 48ebb53c6d3e12e4b8383944559a18c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239K1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239K1Point.cs new file mode 100644 index 000000000..81ead2f6d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239K1Point.cs @@ -0,0 +1,281 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT239K1Point + : AbstractF2mPoint + { + internal SecT239K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecT239K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecT239K1Point(null, this.AffineXCoord, this.AffineYCoord); + } + + public override ECFieldElement YCoord + { + get + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + if (this.IsInfinity || X.IsZero) + return L; + + // Y is actually Lambda (X + Y/X) here; convert to affine value on the fly + ECFieldElement Y = L.Add(X).Multiply(X); + + ECFieldElement Z = RawZCoords[0]; + if (!Z.IsOne) + { + Y = Y.Divide(Z); + } + + return Y; + } + } + + protected internal override bool CompressionYTilde + { + get + { + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return false; + + ECFieldElement Y = this.RawYCoord; + + // Y is actually Lambda (X + Y/X) here + return Y.TestBitZero() != X.TestBitZero(); + } + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + ECFieldElement X2 = b.RawXCoord; + + if (X1.IsZero) + { + if (X2.IsZero) + return curve.Infinity; + + return b.Add(this); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord, Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement U2 = X2, S2 = L2; + if (!Z1IsOne) + { + U2 = U2.Multiply(Z1); + S2 = S2.Multiply(Z1); + } + + bool Z2IsOne = Z2.IsOne; + ECFieldElement U1 = X1, S1 = L1; + if (!Z2IsOne) + { + U1 = U1.Multiply(Z2); + S1 = S1.Multiply(Z2); + } + + ECFieldElement A = S1.Add(S2); + ECFieldElement B = U1.Add(U2); + + if (B.IsZero) + { + if (A.IsZero) + return Twice(); + + return curve.Infinity; + } + + ECFieldElement X3, L3, Z3; + if (X2.IsZero) + { + // TODO This can probably be optimized quite a bit + ECPoint p = this.Normalize(); + X1 = p.XCoord; + ECFieldElement Y1 = p.YCoord; + + ECFieldElement Y2 = L2; + ECFieldElement L = Y1.Add(Y2).Divide(X1); + + X3 = L.Square().Add(L).Add(X1); + if (X3.IsZero) + { + return new SecT239K1Point(curve, X3, curve.B); + } + + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + L3 = Y3.Divide(X3).Add(X3); + Z3 = curve.FromBigInteger(BigInteger.One); + } + else + { + B = B.Square(); + + ECFieldElement AU1 = A.Multiply(U1); + ECFieldElement AU2 = A.Multiply(U2); + + X3 = AU1.Multiply(AU2); + if (X3.IsZero) + { + return new SecT239K1Point(curve, X3, curve.B); + } + + ECFieldElement ABZ2 = A.Multiply(B); + if (!Z2IsOne) + { + ABZ2 = ABZ2.Multiply(Z2); + } + + L3 = AU2.Add(B).SquarePlusProduct(ABZ2, L1.Add(Z1)); + + Z3 = ABZ2; + if (!Z1IsOne) + { + Z3 = Z3.Multiply(Z1); + } + } + + return new SecT239K1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return curve.Infinity; + } + + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement Z1Sq = Z1IsOne ? Z1 : Z1.Square(); + ECFieldElement T; + if (Z1IsOne) + { + T = L1.Square().Add(L1); + } + else + { + T = L1.Add(Z1).Multiply(L1); + } + + if (T.IsZero) + { + return new SecT239K1Point(curve, T, curve.B); + } + + ECFieldElement X3 = T.Square(); + ECFieldElement Z3 = Z1IsOne ? T : T.Multiply(Z1Sq); + + ECFieldElement t1 = L1.Add(X1).Square(); + ECFieldElement t2 = Z1IsOne ? Z1 : Z1Sq.Square(); + ECFieldElement L3 = t1.Add(T).Add(Z1Sq).Multiply(t1).Add(t2).Add(X3).Add(Z3); + + return new SecT239K1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return b; + } + + // NOTE: TwicePlus() only optimized for lambda-affine argument + ECFieldElement X2 = b.RawXCoord, Z2 = b.RawZCoords[0]; + if (X2.IsZero || !Z2.IsOne) + { + return Twice().Add(b); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord; + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement L1Sq = L1.Square(); + ECFieldElement Z1Sq = Z1.Square(); + ECFieldElement L1Z1 = L1.Multiply(Z1); + + ECFieldElement T = L1Sq.Add(L1Z1); + ECFieldElement L2plus1 = L2.AddOne(); + ECFieldElement A = L2plus1.Multiply(Z1Sq).Add(L1Sq).MultiplyPlusProduct(T, X1Sq, Z1Sq); + ECFieldElement X2Z1Sq = X2.Multiply(Z1Sq); + ECFieldElement B = X2Z1Sq.Add(T).Square(); + + if (B.IsZero) + { + if (A.IsZero) + return b.Twice(); + + return curve.Infinity; + } + + if (A.IsZero) + { + return new SecT239K1Point(curve, A, curve.B); + } + + ECFieldElement X3 = A.Square().Multiply(X2Z1Sq); + ECFieldElement Z3 = A.Multiply(B).Multiply(Z1Sq); + ECFieldElement L3 = A.Add(B).Square().MultiplyPlusProduct(T, L2plus1, Z3); + + return new SecT239K1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Negate() + { + if (this.IsInfinity) + return this; + + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return this; + + // L is actually Lambda (X + Y/X) here + ECFieldElement L = this.RawYCoord, Z = this.RawZCoords[0]; + return new SecT239K1Point(Curve, X, L.Add(Z), new ECFieldElement[] { Z }); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239K1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239K1Point.cs.meta new file mode 100644 index 000000000..7d3f34a24 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT239K1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d824fd9c896dd549b3a2bded614ddb7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283Field.cs new file mode 100644 index 000000000..944dde8ea --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283Field.cs @@ -0,0 +1,471 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +#if NETCOREAPP3_0_OR_GREATER +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT283Field + { + private const ulong M27 = ulong.MaxValue >> 37; + private const ulong M57 = ulong.MaxValue >> 7; + + private static readonly ulong[] ROOT_Z = new ulong[]{ 0x0C30C30C30C30808UL, 0x30C30C30C30C30C3UL, + 0x820820820820830CUL, 0x0820820820820820UL, 0x2082082UL }; + + public static void Add(ulong[] x, ulong[] y, ulong[] z) + { + z[0] = x[0] ^ y[0]; + z[1] = x[1] ^ y[1]; + z[2] = x[2] ^ y[2]; + z[3] = x[3] ^ y[3]; + z[4] = x[4] ^ y[4]; + } + + public static void AddExt(ulong[] xx, ulong[] yy, ulong[] zz) + { + zz[0] = xx[0] ^ yy[0]; + zz[1] = xx[1] ^ yy[1]; + zz[2] = xx[2] ^ yy[2]; + zz[3] = xx[3] ^ yy[3]; + zz[4] = xx[4] ^ yy[4]; + zz[5] = xx[5] ^ yy[5]; + zz[6] = xx[6] ^ yy[6]; + zz[7] = xx[7] ^ yy[7]; + zz[8] = xx[8] ^ yy[8]; + } + + public static void AddOne(ulong[] x, ulong[] z) + { + z[0] = x[0] ^ 1UL; + z[1] = x[1]; + z[2] = x[2]; + z[3] = x[3]; + z[4] = x[4]; + } + + private static void AddTo(ulong[] x, ulong[] z) + { + z[0] ^= x[0]; + z[1] ^= x[1]; + z[2] ^= x[2]; + z[3] ^= x[3]; + z[4] ^= x[4]; + } + + public static ulong[] FromBigInteger(BigInteger x) + { + return Nat.FromBigInteger64(283, x); + } + + public static void HalfTrace(ulong[] x, ulong[] z) + { + ulong[] tt = Nat.Create64(9); + + Nat320.Copy64(x, z); + for (int i = 1; i < 283; i += 2) + { + ImplSquare(z, tt); + Reduce(tt, z); + ImplSquare(z, tt); + Reduce(tt, z); + AddTo(x, z); + } + } + + public static void Invert(ulong[] x, ulong[] z) + { + if (Nat320.IsZero64(x)) + throw new InvalidOperationException(); + + // Itoh-Tsujii inversion + + ulong[] t0 = Nat320.Create64(); + ulong[] t1 = Nat320.Create64(); + + Square(x, t0); + Multiply(t0, x, t0); + SquareN(t0, 2, t1); + Multiply(t1, t0, t1); + SquareN(t1, 4, t0); + Multiply(t0, t1, t0); + SquareN(t0, 8, t1); + Multiply(t1, t0, t1); + Square(t1, t1); + Multiply(t1, x, t1); + SquareN(t1, 17, t0); + Multiply(t0, t1, t0); + Square(t0, t0); + Multiply(t0, x, t0); + SquareN(t0, 35, t1); + Multiply(t1, t0, t1); + SquareN(t1, 70, t0); + Multiply(t0, t1, t0); + Square(t0, t0); + Multiply(t0, x, t0); + SquareN(t0, 141, t1); + Multiply(t1, t0, t1); + Square(t1, z); + } + + public static void Multiply(ulong[] x, ulong[] y, ulong[] z) + { + ulong[] tt = Nat320.CreateExt64(); + ImplMultiply(x, y, tt); + Reduce(tt, z); + } + + public static void MultiplyAddToExt(ulong[] x, ulong[] y, ulong[] zz) + { + ulong[] tt = Nat320.CreateExt64(); + ImplMultiply(x, y, tt); + AddExt(zz, tt, zz); + } + + public static void Reduce(ulong[] xx, ulong[] z) + { + ulong x0 = xx[0], x1 = xx[1], x2 = xx[2], x3 = xx[3], x4 = xx[4]; + ulong x5 = xx[5], x6 = xx[6], x7 = xx[7], x8 = xx[8]; + + x3 ^= (x8 << 37) ^ (x8 << 42) ^ (x8 << 44) ^ (x8 << 49); + x4 ^= (x8 >> 27) ^ (x8 >> 22) ^ (x8 >> 20) ^ (x8 >> 15); + + x2 ^= (x7 << 37) ^ (x7 << 42) ^ (x7 << 44) ^ (x7 << 49); + x3 ^= (x7 >> 27) ^ (x7 >> 22) ^ (x7 >> 20) ^ (x7 >> 15); + + x1 ^= (x6 << 37) ^ (x6 << 42) ^ (x6 << 44) ^ (x6 << 49); + x2 ^= (x6 >> 27) ^ (x6 >> 22) ^ (x6 >> 20) ^ (x6 >> 15); + + x0 ^= (x5 << 37) ^ (x5 << 42) ^ (x5 << 44) ^ (x5 << 49); + x1 ^= (x5 >> 27) ^ (x5 >> 22) ^ (x5 >> 20) ^ (x5 >> 15); + + ulong t = x4 >> 27; + z[0] = x0 ^ t ^ (t << 5) ^ (t << 7) ^ (t << 12); + z[1] = x1; + z[2] = x2; + z[3] = x3; + z[4] = x4 & M27; + } + + public static void Reduce37(ulong[] z, int zOff) + { + ulong z4 = z[zOff + 4], t = z4 >> 27; + z[zOff ] ^= t ^ (t << 5) ^ (t << 7) ^ (t << 12); + z[zOff + 4] = z4 & M27; + } + + public static void Sqrt(ulong[] x, ulong[] z) + { + ulong[] odd = Nat320.Create64(); + + odd[0] = Interleave.Unshuffle(x[0], x[1], out ulong e0); + odd[1] = Interleave.Unshuffle(x[2], x[3], out ulong e1); + odd[2] = Interleave.Unshuffle(x[4] , out ulong e2); + + Multiply(odd, ROOT_Z, z); + + z[0] ^= e0; + z[1] ^= e1; + z[2] ^= e2; + } + + public static void Square(ulong[] x, ulong[] z) + { + ulong[] tt = Nat.Create64(9); + ImplSquare(x, tt); + Reduce(tt, z); + } + + public static void SquareAddToExt(ulong[] x, ulong[] zz) + { + ulong[] tt = Nat.Create64(9); + ImplSquare(x, tt); + AddExt(zz, tt, zz); + } + + public static void SquareN(ulong[] x, int n, ulong[] z) + { + Debug.Assert(n > 0); + + ulong[] tt = Nat.Create64(9); + ImplSquare(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + ImplSquare(z, tt); + Reduce(tt, z); + } + } + + public static uint Trace(ulong[] x) + { + // Non-zero-trace bits: 0, 271 + return (uint)(x[0] ^ (x[4] >> 15)) & 1U; + } + + protected static void ImplCompactExt(ulong[] zz) + { + ulong z0 = zz[0], z1 = zz[1], z2 = zz[2], z3 = zz[3], z4 = zz[4]; + ulong z5 = zz[5], z6 = zz[6], z7 = zz[7], z8 = zz[8], z9 = zz[9]; + zz[0] = z0 ^ (z1 << 57); + zz[1] = (z1 >> 7) ^ (z2 << 50); + zz[2] = (z2 >> 14) ^ (z3 << 43); + zz[3] = (z3 >> 21) ^ (z4 << 36); + zz[4] = (z4 >> 28) ^ (z5 << 29); + zz[5] = (z5 >> 35) ^ (z6 << 22); + zz[6] = (z6 >> 42) ^ (z7 << 15); + zz[7] = (z7 >> 49) ^ (z8 << 8); + zz[8] = (z8 >> 56) ^ (z9 << 1); + zz[9] = (z9 >> 63); // Zero! + } + + protected static void ImplExpand(ulong[] x, ulong[] z) + { + ulong x0 = x[0], x1 = x[1], x2 = x[2], x3 = x[3], x4 = x[4]; + z[0] = x0 & M57; + z[1] = ((x0 >> 57) ^ (x1 << 7)) & M57; + z[2] = ((x1 >> 50) ^ (x2 << 14)) & M57; + z[3] = ((x2 >> 43) ^ (x3 << 21)) & M57; + z[4] = ((x3 >> 36) ^ (x4 << 28)); + } + + //protected static void AddMs(ulong[] zz, int zOff, ulong[] p, params int[] ms) + //{ + // ulong t0 = 0, t1 = 0; + // foreach (int m in ms) + // { + // int i = (m - 1) << 1; + // t0 ^= p[i ]; + // t1 ^= p[i + 1]; + // } + // zz[zOff ] ^= t0; + // zz[zOff + 1] ^= t1; + //} + + protected static void ImplMultiply(ulong[] x, ulong[] y, ulong[] zz) + { +#if NETCOREAPP3_0_OR_GREATER + if (Pclmulqdq.IsSupported) + { + var X01 = Vector128.Create(x[0], x[1]); + var X23 = Vector128.Create(x[2], x[3]); + var X4_ = Vector128.CreateScalar(x[4]); + var Y01 = Vector128.Create(y[0], y[1]); + var Y23 = Vector128.Create(y[2], y[3]); + var Y4_ = Vector128.CreateScalar(y[4]); + + var Z01 = Pclmulqdq.CarrylessMultiply(X01, Y01, 0x00); + var Z12 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y01, 0x01), + Pclmulqdq.CarrylessMultiply(X01, Y01, 0x10)); + var Z23 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y23, 0x00), + Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y01, 0x11), + Pclmulqdq.CarrylessMultiply(X23, Y01, 0x00))); + var Z34 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y23, 0x01), + Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y23, 0x10), + Sse2.Xor(Pclmulqdq.CarrylessMultiply(X23, Y01, 0x01), + Pclmulqdq.CarrylessMultiply(X23, Y01, 0x10)))); + var Z45 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y4_, 0x00), + Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y23, 0x11), + Sse2.Xor(Pclmulqdq.CarrylessMultiply(X23, Y23, 0x00), + Sse2.Xor(Pclmulqdq.CarrylessMultiply(X23, Y01, 0x11), + Pclmulqdq.CarrylessMultiply(X4_, Y01, 0x00))))); + var Z56 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X01, Y4_, 0x01), + Sse2.Xor(Pclmulqdq.CarrylessMultiply(X23, Y23, 0x01), + Sse2.Xor(Pclmulqdq.CarrylessMultiply(X23, Y23, 0x10), + Pclmulqdq.CarrylessMultiply(X4_, Y01, 0x10)))); + var Z67 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X23, Y4_, 0x00), + Sse2.Xor(Pclmulqdq.CarrylessMultiply(X23, Y23, 0x11), + Pclmulqdq.CarrylessMultiply(X4_, Y23, 0x00))); + var Z78 = Sse2.Xor(Pclmulqdq.CarrylessMultiply(X23, Y4_, 0x01), + Pclmulqdq.CarrylessMultiply(X4_, Y23, 0x10)); + var Z89 = Pclmulqdq.CarrylessMultiply(X4_, Y4_, 0x00); + + zz[0] = Z01.GetElement(0); + zz[1] = Z01.GetElement(1) ^ Z12.GetElement(0); + zz[2] = Z23.GetElement(0) ^ Z12.GetElement(1); + zz[3] = Z23.GetElement(1) ^ Z34.GetElement(0); + zz[4] = Z45.GetElement(0) ^ Z34.GetElement(1); + zz[5] = Z45.GetElement(1) ^ Z56.GetElement(0); + zz[6] = Z67.GetElement(0) ^ Z56.GetElement(1); + zz[7] = Z67.GetElement(1) ^ Z78.GetElement(0); + zz[8] = Z89.GetElement(0) ^ Z78.GetElement(1); + zz[9] = Z89.GetElement(1); + return; + } +#endif + + /* + * Formula (17) from "Some New Results on Binary Polynomial Multiplication", + * Murat Cenk and M. Anwar Hasan. + * + * The formula as given contained an error in the term t25, as noted below + */ + ulong[] a = new ulong[5], b = new ulong[5]; + ImplExpand(x, a); + ImplExpand(y, b); + + ulong[] u = zz; + ulong[] p = new ulong[26]; + + ImplMulw(u, a[0], b[0], p, 0); // m1 + ImplMulw(u, a[1], b[1], p, 2); // m2 + ImplMulw(u, a[2], b[2], p, 4); // m3 + ImplMulw(u, a[3], b[3], p, 6); // m4 + ImplMulw(u, a[4], b[4], p, 8); // m5 + + ulong u0 = a[0] ^ a[1], v0 = b[0] ^ b[1]; + ulong u1 = a[0] ^ a[2], v1 = b[0] ^ b[2]; + ulong u2 = a[2] ^ a[4], v2 = b[2] ^ b[4]; + ulong u3 = a[3] ^ a[4], v3 = b[3] ^ b[4]; + + ImplMulw(u, u1 ^ a[3], v1 ^ b[3], p, 18); // m10 + ImplMulw(u, u2 ^ a[1], v2 ^ b[1], p, 20); // m11 + + ulong A4 = u0 ^ u3 , B4 = v0 ^ v3; + ulong A5 = A4 ^ a[2], B5 = B4 ^ b[2]; + + ImplMulw(u, A4, B4, p, 22); // m12 + ImplMulw(u, A5, B5, p, 24); // m13 + + ImplMulw(u, u0, v0, p, 10); // m6 + ImplMulw(u, u1, v1, p, 12); // m7 + ImplMulw(u, u2, v2, p, 14); // m8 + ImplMulw(u, u3, v3, p, 16); // m9 + + + // Original method, corresponding to formula (16) + //AddMs(zz, 0, p, 1); + //AddMs(zz, 1, p, 1, 2, 6); + //AddMs(zz, 2, p, 1, 2, 3, 7); + //AddMs(zz, 3, p, 1, 3, 4, 5, 8, 10, 12, 13); + //AddMs(zz, 4, p, 1, 2, 4, 5, 6, 9, 10, 11, 13); + //AddMs(zz, 5, p, 1, 2, 3, 5, 7, 11, 12, 13); + //AddMs(zz, 6, p, 3, 4, 5, 8); + //AddMs(zz, 7, p, 4, 5, 9); + //AddMs(zz, 8, p, 5); + + // Improved method factors out common single-word terms + // NOTE: p1,...,p26 in the paper maps to p[0],...,p[25] here + + zz[0] = p[ 0]; + zz[9] = p[ 9]; + + ulong t1 = p[ 0] ^ p[ 1]; + ulong t2 = t1 ^ p[ 2]; + ulong t3 = t2 ^ p[10]; + + zz[1] = t3; + + ulong t4 = p[ 3] ^ p[ 4]; + ulong t5 = p[11] ^ p[12]; + ulong t6 = t4 ^ t5; + ulong t7 = t2 ^ t6; + + zz[2] = t7; + + ulong t8 = t1 ^ t4; + ulong t9 = p[ 5] ^ p[ 6]; + ulong t10 = t8 ^ t9; + ulong t11 = t10 ^ p[ 8]; + ulong t12 = p[13] ^ p[14]; + ulong t13 = t11 ^ t12; + ulong t14 = p[18] ^ p[22]; + ulong t15 = t14 ^ p[24]; + ulong t16 = t13 ^ t15; + + zz[3] = t16; + + ulong t17 = p[ 7] ^ p[ 8]; + ulong t18 = t17 ^ p[ 9]; + ulong t19 = t18 ^ p[17]; + + zz[8] = t19; + + ulong t20 = t18 ^ t9; + ulong t21 = p[15] ^ p[16]; + ulong t22 = t20 ^ t21; + + zz[7] = t22; + + ulong t23 = t22 ^ t3; + ulong t24 = p[19] ^ p[20]; + // ulong t25 = p[23] ^ p[24]; + ulong t25 = p[25] ^ p[24]; // Fixes an error in the paper: p[23] -> p{25] + ulong t26 = p[18] ^ p[23]; + ulong t27 = t24 ^ t25; + ulong t28 = t27 ^ t26; + ulong t29 = t28 ^ t23; + + zz[4] = t29; + + ulong t30 = t7 ^ t19; + ulong t31 = t27 ^ t30; + ulong t32 = p[21] ^ p[22]; + ulong t33 = t31 ^ t32; + + zz[5] = t33; + + ulong t34 = t11 ^ p[0]; + ulong t35 = t34 ^ p[9]; + ulong t36 = t35 ^ t12; + ulong t37 = t36 ^ p[21]; + ulong t38 = t37 ^ p[23]; + ulong t39 = t38 ^ p[25]; + + zz[6] = t39; + + ImplCompactExt(zz); + } + + protected static void ImplMulw(ulong[] u, ulong x, ulong y, ulong[] z, int zOff) + { + Debug.Assert(x >> 57 == 0); + Debug.Assert(y >> 57 == 0); + + //u[0] = 0; + u[1] = y; + u[2] = u[1] << 1; + u[3] = u[2] ^ y; + u[4] = u[2] << 1; + u[5] = u[4] ^ y; + u[6] = u[3] << 1; + u[7] = u[6] ^ y; + + uint j = (uint)x; + ulong g, h = 0, l = u[j & 7]; + int k = 48; + do + { + j = (uint)(x >> k); + g = u[j & 7] + ^ u[(j >> 3) & 7] << 3 + ^ u[(j >> 6) & 7] << 6; + l ^= (g << k); + h ^= (g >> -k); + } + while ((k -= 9) > 0); + + h ^= ((x & 0x0100804020100800L) & (ulong)(((long)y << 7) >> 63)) >> 8; + + Debug.Assert(h >> 49 == 0); + + z[zOff ] = l & M57; + z[zOff + 1] = (l >> 57) ^ (h << 7); + } + + protected static void ImplSquare(ulong[] x, ulong[] zz) + { + Interleave.Expand64To128(x, 0, 4, zz, 0); + zz[8] = Interleave.Expand32to64((uint)x[4]); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283Field.cs.meta new file mode 100644 index 000000000..5daeb4fe2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c626a931419b48a45ad8a5ea5f11d47e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283FieldElement.cs new file mode 100644 index 000000000..112423581 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283FieldElement.cs @@ -0,0 +1,237 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT283FieldElement + : AbstractF2mFieldElement + { + protected internal readonly ulong[] x; + + public SecT283FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.BitLength > 283) + throw new ArgumentException("value invalid for SecT283FieldElement", "x"); + + this.x = SecT283Field.FromBigInteger(x); + } + + public SecT283FieldElement() + { + this.x = Nat320.Create64(); + } + + protected internal SecT283FieldElement(ulong[] x) + { + this.x = x; + } + + public override bool IsOne + { + get { return Nat320.IsOne64(x); } + } + + public override bool IsZero + { + get { return Nat320.IsZero64(x); } + } + + public override bool TestBitZero() + { + return (x[0] & 1UL) != 0UL; + } + + public override BigInteger ToBigInteger() + { + return Nat320.ToBigInteger64(x); + } + + public override string FieldName + { + get { return "SecT283Field"; } + } + + public override int FieldSize + { + get { return 283; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + ulong[] z = Nat320.Create64(); + SecT283Field.Add(x, ((SecT283FieldElement)b).x, z); + return new SecT283FieldElement(z); + } + + public override ECFieldElement AddOne() + { + ulong[] z = Nat320.Create64(); + SecT283Field.AddOne(x, z); + return new SecT283FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + // Addition and subtraction are the same in F2m + return Add(b); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + ulong[] z = Nat320.Create64(); + SecT283Field.Multiply(x, ((SecT283FieldElement)b).x, z); + return new SecT283FieldElement(z); + } + + public override ECFieldElement MultiplyMinusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + return MultiplyPlusProduct(b, x, y); + } + + public override ECFieldElement MultiplyPlusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + ulong[] ax = this.x, bx = ((SecT283FieldElement)b).x; + ulong[] xx = ((SecT283FieldElement)x).x, yx = ((SecT283FieldElement)y).x; + + ulong[] tt = Nat.Create64(9); + SecT283Field.MultiplyAddToExt(ax, bx, tt); + SecT283Field.MultiplyAddToExt(xx, yx, tt); + + ulong[] z = Nat320.Create64(); + SecT283Field.Reduce(tt, z); + return new SecT283FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + return Multiply(b.Invert()); + } + + public override ECFieldElement Negate() + { + return this; + } + + public override ECFieldElement Square() + { + ulong[] z = Nat320.Create64(); + SecT283Field.Square(x, z); + return new SecT283FieldElement(z); + } + + public override ECFieldElement SquareMinusProduct(ECFieldElement x, ECFieldElement y) + { + return SquarePlusProduct(x, y); + } + + public override ECFieldElement SquarePlusProduct(ECFieldElement x, ECFieldElement y) + { + ulong[] ax = this.x; + ulong[] xx = ((SecT283FieldElement)x).x, yx = ((SecT283FieldElement)y).x; + + ulong[] tt = Nat.Create64(9); + SecT283Field.SquareAddToExt(ax, tt); + SecT283Field.MultiplyAddToExt(xx, yx, tt); + + ulong[] z = Nat320.Create64(); + SecT283Field.Reduce(tt, z); + return new SecT283FieldElement(z); + } + + public override ECFieldElement SquarePow(int pow) + { + if (pow < 1) + return this; + + ulong[] z = Nat320.Create64(); + SecT283Field.SquareN(x, pow, z); + return new SecT283FieldElement(z); + } + + public override ECFieldElement HalfTrace() + { + ulong[] z = Nat320.Create64(); + SecT283Field.HalfTrace(x, z); + return new SecT283FieldElement(z); + } + + public override bool HasFastTrace + { + get { return true; } + } + + public override int Trace() + { + return (int)SecT283Field.Trace(x); + } + + public override ECFieldElement Invert() + { + ulong[] z = Nat320.Create64(); + SecT283Field.Invert(x, z); + return new SecT283FieldElement(z); + } + + public override ECFieldElement Sqrt() + { + ulong[] z = Nat320.Create64(); + SecT283Field.Sqrt(x, z); + return new SecT283FieldElement(z); + } + + public virtual int Representation + { + get { return F2mFieldElement.Ppb; } + } + + public virtual int M + { + get { return 283; } + } + + public virtual int K1 + { + get { return 5; } + } + + public virtual int K2 + { + get { return 7; } + } + + public virtual int K3 + { + get { return 12; } + } + + public override bool Equals(object obj) + { + return Equals(obj as SecT283FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecT283FieldElement); + } + + public virtual bool Equals(SecT283FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat320.Eq64(x, other.x); + } + + public override int GetHashCode() + { + return 2831275 ^ Arrays.GetHashCode(x, 0, 5); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283FieldElement.cs.meta new file mode 100644 index 000000000..d4782a41b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 67822c9ac801be245a30abda22a44f29 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283K1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283K1Curve.cs new file mode 100644 index 000000000..54dbabd18 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283K1Curve.cs @@ -0,0 +1,187 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT283K1Curve + : AbstractF2mCurve + { + private const int SECT283K1_DEFAULT_COORDS = COORD_LAMBDA_PROJECTIVE; + private const int SECT283K1_FE_LONGS = 5; + private static readonly ECFieldElement[] SECT283K1_AFFINE_ZS = new ECFieldElement[] { new SecT283FieldElement(BigInteger.One) }; + + protected readonly SecT283K1Point m_infinity; + + public SecT283K1Curve() + : base(283, 5, 7, 12) + { + this.m_infinity = new SecT283K1Point(this, null, null); + + this.m_a = FromBigInteger(BigInteger.Zero); + this.m_b = FromBigInteger(BigInteger.One); + this.m_order = new BigInteger(1, Hex.DecodeStrict("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9AE2ED07577265DFF7F94451E061E163C61")); + this.m_cofactor = BigInteger.ValueOf(4); + + this.m_coord = SECT283K1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecT283K1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_LAMBDA_PROJECTIVE: + return true; + default: + return false; + } + } + + protected override ECMultiplier CreateDefaultMultiplier() + { + return new WTauNafMultiplier(); + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return 283; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecT283FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecT283K1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecT283K1Point(this, x, y, zs); + } + + public override bool IsKoblitz + { + get { return true; } + } + + public virtual int M + { + get { return 283; } + } + + public virtual bool IsTrinomial + { + get { return false; } + } + + public virtual int K1 + { + get { return 5; } + } + + public virtual int K2 + { + get { return 7; } + } + + public virtual int K3 + { + get { return 12; } + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + ulong[] table = new ulong[len * SECT283K1_FE_LONGS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat320.Copy64(((SecT283FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECT283K1_FE_LONGS; + Nat320.Copy64(((SecT283FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECT283K1_FE_LONGS; + } + } + + return new SecT283K1LookupTable(this, table, len); + } + + private class SecT283K1LookupTable + : AbstractECLookupTable + { + private readonly SecT283K1Curve m_outer; + private readonly ulong[] m_table; + private readonly int m_size; + + internal SecT283K1LookupTable(SecT283K1Curve outer, ulong[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + ulong[] x = Nat320.Create64(), y = Nat320.Create64(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECT283K1_FE_LONGS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECT283K1_FE_LONGS + j] & MASK; + } + + pos += (SECT283K1_FE_LONGS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + ulong[] x = Nat320.Create64(), y = Nat320.Create64(); + int pos = index * SECT283K1_FE_LONGS * 2; + + for (int j = 0; j < SECT283K1_FE_LONGS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECT283K1_FE_LONGS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(ulong[] x, ulong[] y) + { + return m_outer.CreateRawPoint(new SecT283FieldElement(x), new SecT283FieldElement(y), SECT283K1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283K1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283K1Curve.cs.meta new file mode 100644 index 000000000..243dcbd1f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283K1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 39307d0f60b169f4a81f23cd2faa883a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283K1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283K1Point.cs new file mode 100644 index 000000000..25de02721 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283K1Point.cs @@ -0,0 +1,280 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT283K1Point + : AbstractF2mPoint + { + internal SecT283K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecT283K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecT283K1Point(null, this.AffineXCoord, this.AffineYCoord); + } + + public override ECFieldElement YCoord + { + get + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + if (this.IsInfinity || X.IsZero) + return L; + + // Y is actually Lambda (X + Y/X) here; convert to affine value on the fly + ECFieldElement Y = L.Add(X).Multiply(X); + + ECFieldElement Z = RawZCoords[0]; + if (!Z.IsOne) + { + Y = Y.Divide(Z); + } + + return Y; + } + } + + protected internal override bool CompressionYTilde + { + get + { + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return false; + + ECFieldElement Y = this.RawYCoord; + + // Y is actually Lambda (X + Y/X) here + return Y.TestBitZero() != X.TestBitZero(); + } + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + ECFieldElement X2 = b.RawXCoord; + + if (X1.IsZero) + { + if (X2.IsZero) + return curve.Infinity; + + return b.Add(this); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord, Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement U2 = X2, S2 = L2; + if (!Z1IsOne) + { + U2 = U2.Multiply(Z1); + S2 = S2.Multiply(Z1); + } + + bool Z2IsOne = Z2.IsOne; + ECFieldElement U1 = X1, S1 = L1; + if (!Z2IsOne) + { + U1 = U1.Multiply(Z2); + S1 = S1.Multiply(Z2); + } + + ECFieldElement A = S1.Add(S2); + ECFieldElement B = U1.Add(U2); + + if (B.IsZero) + { + if (A.IsZero) + return Twice(); + + return curve.Infinity; + } + + ECFieldElement X3, L3, Z3; + if (X2.IsZero) + { + // TODO This can probably be optimized quite a bit + ECPoint p = this.Normalize(); + X1 = p.XCoord; + ECFieldElement Y1 = p.YCoord; + + ECFieldElement Y2 = L2; + ECFieldElement L = Y1.Add(Y2).Divide(X1); + + X3 = L.Square().Add(L).Add(X1); + if (X3.IsZero) + { + return new SecT283K1Point(curve, X3, curve.B); + } + + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + L3 = Y3.Divide(X3).Add(X3); + Z3 = curve.FromBigInteger(BigInteger.One); + } + else + { + B = B.Square(); + + ECFieldElement AU1 = A.Multiply(U1); + ECFieldElement AU2 = A.Multiply(U2); + + X3 = AU1.Multiply(AU2); + if (X3.IsZero) + { + return new SecT283K1Point(curve, X3, curve.B); + } + + ECFieldElement ABZ2 = A.Multiply(B); + if (!Z2IsOne) + { + ABZ2 = ABZ2.Multiply(Z2); + } + + L3 = AU2.Add(B).SquarePlusProduct(ABZ2, L1.Add(Z1)); + + Z3 = ABZ2; + if (!Z1IsOne) + { + Z3 = Z3.Multiply(Z1); + } + } + + return new SecT283K1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return curve.Infinity; + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement Z1Sq = Z1IsOne ? Z1 : Z1.Square(); + ECFieldElement T; + if (Z1IsOne) + { + T = L1.Square().Add(L1); + } + else + { + T = L1.Add(Z1).Multiply(L1); + } + + if (T.IsZero) + { + return new SecT283K1Point(curve, T, curve.B); + } + + ECFieldElement X3 = T.Square(); + ECFieldElement Z3 = Z1IsOne ? T : T.Multiply(Z1Sq); + + ECFieldElement t1 = L1.Add(X1).Square(); + ECFieldElement t2 = Z1IsOne ? Z1 : Z1Sq.Square(); + ECFieldElement L3 = t1.Add(T).Add(Z1Sq).Multiply(t1).Add(t2).Add(X3).Add(Z3); + + return new SecT283K1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return b; + } + + // NOTE: TwicePlus() only optimized for lambda-affine argument + ECFieldElement X2 = b.RawXCoord, Z2 = b.RawZCoords[0]; + if (X2.IsZero || !Z2.IsOne) + { + return Twice().Add(b); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord; + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement L1Sq = L1.Square(); + ECFieldElement Z1Sq = Z1.Square(); + ECFieldElement L1Z1 = L1.Multiply(Z1); + + ECFieldElement T = L1Sq.Add(L1Z1); + ECFieldElement L2plus1 = L2.AddOne(); + ECFieldElement A = L2plus1.Multiply(Z1Sq).Add(L1Sq).MultiplyPlusProduct(T, X1Sq, Z1Sq); + ECFieldElement X2Z1Sq = X2.Multiply(Z1Sq); + ECFieldElement B = X2Z1Sq.Add(T).Square(); + + if (B.IsZero) + { + if (A.IsZero) + return b.Twice(); + + return curve.Infinity; + } + + if (A.IsZero) + { + return new SecT283K1Point(curve, A, curve.B); + } + + ECFieldElement X3 = A.Square().Multiply(X2Z1Sq); + ECFieldElement Z3 = A.Multiply(B).Multiply(Z1Sq); + ECFieldElement L3 = A.Add(B).Square().MultiplyPlusProduct(T, L2plus1, Z3); + + return new SecT283K1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Negate() + { + if (this.IsInfinity) + return this; + + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return this; + + // L is actually Lambda (X + Y/X) here + ECFieldElement L = this.RawYCoord, Z = this.RawZCoords[0]; + return new SecT283K1Point(Curve, X, L.Add(Z), new ECFieldElement[] { Z }); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283K1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283K1Point.cs.meta new file mode 100644 index 000000000..7a091d029 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283K1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 158b153a676c1544985041b1aafbb620 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283R1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283R1Curve.cs new file mode 100644 index 000000000..6743ef51e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283R1Curve.cs @@ -0,0 +1,181 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT283R1Curve + : AbstractF2mCurve + { + private const int SECT283R1_DEFAULT_COORDS = COORD_LAMBDA_PROJECTIVE; + private const int SECT283R1_FE_LONGS = 5; + private static readonly ECFieldElement[] SECT283R1_AFFINE_ZS = new ECFieldElement[] { new SecT283FieldElement(BigInteger.One) }; + + protected readonly SecT283R1Point m_infinity; + + public SecT283R1Curve() + : base(283, 5, 7, 12) + { + this.m_infinity = new SecT283R1Point(this, null, null); + + this.m_a = FromBigInteger(BigInteger.One); + this.m_b = FromBigInteger(new BigInteger(1, Hex.DecodeStrict("027B680AC8B8596DA5A4AF8A19A0303FCA97FD7645309FA2A581485AF6263E313B79A2F5"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF90399660FC938A90165B042A7CEFADB307")); + this.m_cofactor = BigInteger.Two; + + this.m_coord = SECT283R1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecT283R1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_LAMBDA_PROJECTIVE: + return true; + default: + return false; + } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return 283; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecT283FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecT283R1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecT283R1Point(this, x, y, zs); + } + + public override bool IsKoblitz + { + get { return false; } + } + + public virtual int M + { + get { return 283; } + } + + public virtual bool IsTrinomial + { + get { return false; } + } + + public virtual int K1 + { + get { return 5; } + } + + public virtual int K2 + { + get { return 7; } + } + + public virtual int K3 + { + get { return 12; } + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + ulong[] table = new ulong[len * SECT283R1_FE_LONGS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat320.Copy64(((SecT283FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECT283R1_FE_LONGS; + Nat320.Copy64(((SecT283FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECT283R1_FE_LONGS; + } + } + + return new SecT283R1LookupTable(this, table, len); + } + + private class SecT283R1LookupTable + : AbstractECLookupTable + { + private readonly SecT283R1Curve m_outer; + private readonly ulong[] m_table; + private readonly int m_size; + + internal SecT283R1LookupTable(SecT283R1Curve outer, ulong[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + ulong[] x = Nat320.Create64(), y = Nat320.Create64(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECT283R1_FE_LONGS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECT283R1_FE_LONGS + j] & MASK; + } + + pos += (SECT283R1_FE_LONGS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + ulong[] x = Nat320.Create64(), y = Nat320.Create64(); + int pos = index * SECT283R1_FE_LONGS * 2; + + for (int j = 0; j < SECT283R1_FE_LONGS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECT283R1_FE_LONGS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(ulong[] x, ulong[] y) + { + return m_outer.CreateRawPoint(new SecT283FieldElement(x), new SecT283FieldElement(y), SECT283R1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283R1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283R1Curve.cs.meta new file mode 100644 index 000000000..cce813dca --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283R1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3e40474bbba5c647866e91e6a75ba77 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283R1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283R1Point.cs new file mode 100644 index 000000000..87e2cb211 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283R1Point.cs @@ -0,0 +1,269 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT283R1Point + : AbstractF2mPoint + { + internal SecT283R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecT283R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecT283R1Point(null, AffineXCoord, AffineYCoord); + } + + public override ECFieldElement YCoord + { + get + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + if (this.IsInfinity || X.IsZero) + return L; + + // Y is actually Lambda (X + Y/X) here; convert to affine value on the fly + ECFieldElement Y = L.Add(X).Multiply(X); + + ECFieldElement Z = RawZCoords[0]; + if (!Z.IsOne) + { + Y = Y.Divide(Z); + } + + return Y; + } + } + + protected internal override bool CompressionYTilde + { + get + { + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return false; + + ECFieldElement Y = this.RawYCoord; + + // Y is actually Lambda (X + Y/X) here + return Y.TestBitZero() != X.TestBitZero(); + } + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + ECFieldElement X2 = b.RawXCoord; + + if (X1.IsZero) + { + if (X2.IsZero) + return curve.Infinity; + + return b.Add(this); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord, Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement U2 = X2, S2 = L2; + if (!Z1IsOne) + { + U2 = U2.Multiply(Z1); + S2 = S2.Multiply(Z1); + } + + bool Z2IsOne = Z2.IsOne; + ECFieldElement U1 = X1, S1 = L1; + if (!Z2IsOne) + { + U1 = U1.Multiply(Z2); + S1 = S1.Multiply(Z2); + } + + ECFieldElement A = S1.Add(S2); + ECFieldElement B = U1.Add(U2); + + if (B.IsZero) + { + if (A.IsZero) + return Twice(); + + return curve.Infinity; + } + + ECFieldElement X3, L3, Z3; + if (X2.IsZero) + { + // TODO This can probably be optimized quite a bit + ECPoint p = this.Normalize(); + X1 = p.XCoord; + ECFieldElement Y1 = p.YCoord; + + ECFieldElement Y2 = L2; + ECFieldElement L = Y1.Add(Y2).Divide(X1); + + X3 = L.Square().Add(L).Add(X1).AddOne(); + if (X3.IsZero) + { + return new SecT283R1Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + L3 = Y3.Divide(X3).Add(X3); + Z3 = curve.FromBigInteger(BigInteger.One); + } + else + { + B = B.Square(); + + ECFieldElement AU1 = A.Multiply(U1); + ECFieldElement AU2 = A.Multiply(U2); + + X3 = AU1.Multiply(AU2); + if (X3.IsZero) + { + return new SecT283R1Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement ABZ2 = A.Multiply(B); + if (!Z2IsOne) + { + ABZ2 = ABZ2.Multiply(Z2); + } + + L3 = AU2.Add(B).SquarePlusProduct(ABZ2, L1.Add(Z1)); + + Z3 = ABZ2; + if (!Z1IsOne) + { + Z3 = Z3.Multiply(Z1); + } + } + + return new SecT283R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return curve.Infinity; + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement L1Z1 = Z1IsOne ? L1 : L1.Multiply(Z1); + ECFieldElement Z1Sq = Z1IsOne ? Z1 : Z1.Square(); + ECFieldElement T = L1.Square().Add(L1Z1).Add(Z1Sq); + if (T.IsZero) + { + return new SecT283R1Point(curve, T, curve.B.Sqrt()); + } + + ECFieldElement X3 = T.Square(); + ECFieldElement Z3 = Z1IsOne ? T : T.Multiply(Z1Sq); + + ECFieldElement X1Z1 = Z1IsOne ? X1 : X1.Multiply(Z1); + ECFieldElement L3 = X1Z1.SquarePlusProduct(T, L1Z1).Add(X3).Add(Z3); + + return new SecT283R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return b; + } + + ECFieldElement X2 = b.RawXCoord, Z2 = b.RawZCoords[0]; + if (X2.IsZero || !Z2.IsOne) + { + return Twice().Add(b); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord; + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement L1Sq = L1.Square(); + ECFieldElement Z1Sq = Z1.Square(); + ECFieldElement L1Z1 = L1.Multiply(Z1); + + ECFieldElement T = Z1Sq.Add(L1Sq).Add(L1Z1); + ECFieldElement A = L2.Multiply(Z1Sq).Add(L1Sq).MultiplyPlusProduct(T, X1Sq, Z1Sq); + ECFieldElement X2Z1Sq = X2.Multiply(Z1Sq); + ECFieldElement B = X2Z1Sq.Add(T).Square(); + + if (B.IsZero) + { + if (A.IsZero) + return b.Twice(); + + return curve.Infinity; + } + + if (A.IsZero) + { + return new SecT283R1Point(curve, A, curve.B.Sqrt()); + } + + ECFieldElement X3 = A.Square().Multiply(X2Z1Sq); + ECFieldElement Z3 = A.Multiply(B).Multiply(Z1Sq); + ECFieldElement L3 = A.Add(B).Square().MultiplyPlusProduct(T, L2.AddOne(), Z3); + + return new SecT283R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Negate() + { + if (this.IsInfinity) + return this; + + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return this; + + // L is actually Lambda (X + Y/X) here + ECFieldElement L = this.RawYCoord, Z = this.RawZCoords[0]; + return new SecT283R1Point(Curve, X, L.Add(Z), new ECFieldElement[] { Z }); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283R1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283R1Point.cs.meta new file mode 100644 index 000000000..9518705b6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT283R1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c42d0860fab3384cb023920e765d0a3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409Field.cs new file mode 100644 index 000000000..6de0b5880 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409Field.cs @@ -0,0 +1,404 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +#if NETCOREAPP3_0_OR_GREATER +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT409Field + { + private const ulong M25 = ulong.MaxValue >> 39; + private const ulong M59 = ulong.MaxValue >> 5; + + public static void Add(ulong[] x, ulong[] y, ulong[] z) + { + z[0] = x[0] ^ y[0]; + z[1] = x[1] ^ y[1]; + z[2] = x[2] ^ y[2]; + z[3] = x[3] ^ y[3]; + z[4] = x[4] ^ y[4]; + z[5] = x[5] ^ y[5]; + z[6] = x[6] ^ y[6]; + } + + public static void AddExt(ulong[] xx, ulong[] yy, ulong[] zz) + { + for (int i = 0; i < 13; ++i) + { + zz[i] = xx[i] ^ yy[i]; + } + } + + public static void AddOne(ulong[] x, ulong[] z) + { + z[0] = x[0] ^ 1UL; + z[1] = x[1]; + z[2] = x[2]; + z[3] = x[3]; + z[4] = x[4]; + z[5] = x[5]; + z[6] = x[6]; + } + + private static void AddTo(ulong[] x, ulong[] z) + { + z[0] ^= x[0]; + z[1] ^= x[1]; + z[2] ^= x[2]; + z[3] ^= x[3]; + z[4] ^= x[4]; + z[5] ^= x[5]; + z[6] ^= x[6]; + } + + public static ulong[] FromBigInteger(BigInteger x) + { + return Nat.FromBigInteger64(409, x); + } + + public static void HalfTrace(ulong[] x, ulong[] z) + { + ulong[] tt = Nat.Create64(13); + + Nat448.Copy64(x, z); + for (int i = 1; i < 409; i += 2) + { + ImplSquare(z, tt); + Reduce(tt, z); + ImplSquare(z, tt); + Reduce(tt, z); + AddTo(x, z); + } + } + + public static void Invert(ulong[] x, ulong[] z) + { + if (Nat448.IsZero64(x)) + throw new InvalidOperationException(); + + // Itoh-Tsujii inversion with bases { 2, 3 } + + ulong[] t0 = Nat448.Create64(); + ulong[] t1 = Nat448.Create64(); + ulong[] t2 = Nat448.Create64(); + + Square(x, t0); + + // 3 | 408 + SquareN(t0, 1, t1); + Multiply(t0, t1, t0); + SquareN(t1, 1, t1); + Multiply(t0, t1, t0); + + // 2 | 136 + SquareN(t0, 3, t1); + Multiply(t0, t1, t0); + + // 2 | 68 + SquareN(t0, 6, t1); + Multiply(t0, t1, t0); + + // 2 | 34 + SquareN(t0, 12, t1); + Multiply(t0, t1, t2); + + // ! {2,3} | 17 + SquareN(t2, 24, t0); + SquareN(t0, 24, t1); + Multiply(t0, t1, t0); + + // 2 | 8 + SquareN(t0, 48, t1); + Multiply(t0, t1, t0); + + // 2 | 4 + SquareN(t0, 96, t1); + Multiply(t0, t1, t0); + + // 2 | 2 + SquareN(t0, 192, t1); + Multiply(t0, t1, t0); + + Multiply(t0, t2, z); + } + + public static void Multiply(ulong[] x, ulong[] y, ulong[] z) + { + ulong[] tt = Nat448.CreateExt64(); + ImplMultiply(x, y, tt); + Reduce(tt, z); + } + + public static void MultiplyAddToExt(ulong[] x, ulong[] y, ulong[] zz) + { + ulong[] tt = Nat448.CreateExt64(); + ImplMultiply(x, y, tt); + AddExt(zz, tt, zz); + } + + public static void Reduce(ulong[] xx, ulong[] z) + { + ulong x00 = xx[0], x01 = xx[1], x02 = xx[2], x03 = xx[3]; + ulong x04 = xx[4], x05 = xx[5], x06 = xx[6], x07 = xx[7]; + + ulong u = xx[12]; + x05 ^= (u << 39); + x06 ^= (u >> 25) ^ (u << 62); + x07 ^= (u >> 2); + + u = xx[11]; + x04 ^= (u << 39); + x05 ^= (u >> 25) ^ (u << 62); + x06 ^= (u >> 2); + + u = xx[10]; + x03 ^= (u << 39); + x04 ^= (u >> 25) ^ (u << 62); + x05 ^= (u >> 2); + + u = xx[9]; + x02 ^= (u << 39); + x03 ^= (u >> 25) ^ (u << 62); + x04 ^= (u >> 2); + + u = xx[8]; + x01 ^= (u << 39); + x02 ^= (u >> 25) ^ (u << 62); + x03 ^= (u >> 2); + + u = x07; + x00 ^= (u << 39); + x01 ^= (u >> 25) ^ (u << 62); + x02 ^= (u >> 2); + + ulong t = x06 >> 25; + z[0] = x00 ^ t; + z[1] = x01 ^ (t << 23); + z[2] = x02; + z[3] = x03; + z[4] = x04; + z[5] = x05; + z[6] = x06 & M25; + } + + public static void Reduce39(ulong[] z, int zOff) + { + ulong z6 = z[zOff + 6], t = z6 >> 25; + z[zOff ] ^= t; + z[zOff + 1] ^= (t << 23); + z[zOff + 6] = z6 & M25; + } + + public static void Sqrt(ulong[] x, ulong[] z) + { + ulong c0 = Interleave.Unshuffle(x[0], x[1], out ulong e0); + ulong c1 = Interleave.Unshuffle(x[2], x[3], out ulong e1); + ulong c2 = Interleave.Unshuffle(x[4], x[5], out ulong e2); + ulong c3 = Interleave.Unshuffle(x[6] , out ulong e3); + + z[0] = e0 ^ (c0 << 44); + z[1] = e1 ^ (c1 << 44) ^ (c0 >> 20); + z[2] = e2 ^ (c2 << 44) ^ (c1 >> 20); + z[3] = e3 ^ (c3 << 44) ^ (c2 >> 20) ^ (c0 << 13); + z[4] = (c3 >> 20) ^ (c1 << 13) ^ (c0 >> 51); + z[5] = (c2 << 13) ^ (c1 >> 51); + z[6] = (c3 << 13) ^ (c2 >> 51); + + Debug.Assert((c3 >> 51) == 0); + } + + public static void Square(ulong[] x, ulong[] z) + { + ulong[] tt = Nat.Create64(13); + ImplSquare(x, tt); + Reduce(tt, z); + } + + public static void SquareAddToExt(ulong[] x, ulong[] zz) + { + ulong[] tt = Nat.Create64(13); + ImplSquare(x, tt); + AddExt(zz, tt, zz); + } + + public static void SquareN(ulong[] x, int n, ulong[] z) + { + Debug.Assert(n > 0); + + ulong[] tt = Nat.Create64(13); + ImplSquare(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + ImplSquare(z, tt); + Reduce(tt, z); + } + } + + public static uint Trace(ulong[] x) + { + // Non-zero-trace bits: 0 + return (uint)(x[0]) & 1U; + } + + protected static void ImplCompactExt(ulong[] zz) + { + ulong z00 = zz[ 0], z01 = zz[ 1], z02 = zz[ 2], z03 = zz[ 3], z04 = zz[ 4], z05 = zz[ 5], z06 = zz[ 6]; + ulong z07 = zz[ 7], z08 = zz[ 8], z09 = zz[ 9], z10 = zz[10], z11 = zz[11], z12 = zz[12], z13 = zz[13]; + zz[ 0] = z00 ^ (z01 << 59); + zz[ 1] = (z01 >> 5) ^ (z02 << 54); + zz[ 2] = (z02 >> 10) ^ (z03 << 49); + zz[ 3] = (z03 >> 15) ^ (z04 << 44); + zz[ 4] = (z04 >> 20) ^ (z05 << 39); + zz[ 5] = (z05 >> 25) ^ (z06 << 34); + zz[ 6] = (z06 >> 30) ^ (z07 << 29); + zz[ 7] = (z07 >> 35) ^ (z08 << 24); + zz[ 8] = (z08 >> 40) ^ (z09 << 19); + zz[ 9] = (z09 >> 45) ^ (z10 << 14); + zz[10] = (z10 >> 50) ^ (z11 << 9); + zz[11] = (z11 >> 55) ^ (z12 << 4) + ^ (z13 << 63); + zz[12] = (z13 >> 1); + //zz[13] = 0; + } + + protected static void ImplExpand(ulong[] x, ulong[] z) + { + ulong x0 = x[0], x1 = x[1], x2 = x[2], x3 = x[3], x4 = x[4], x5 = x[5], x6 = x[6]; + z[0] = x0 & M59; + z[1] = ((x0 >> 59) ^ (x1 << 5)) & M59; + z[2] = ((x1 >> 54) ^ (x2 << 10)) & M59; + z[3] = ((x2 >> 49) ^ (x3 << 15)) & M59; + z[4] = ((x3 >> 44) ^ (x4 << 20)) & M59; + z[5] = ((x4 >> 39) ^ (x5 << 25)) & M59; + z[6] = ((x5 >> 34) ^ (x6 << 30)); + } + + protected static void ImplMultiply(ulong[] x, ulong[] y, ulong[] zz) + { + ulong[] a = new ulong[7], b = new ulong[7]; + ImplExpand(x, a); + ImplExpand(y, b); + + ulong[] u = new ulong[8]; + for (int i = 0; i < 7; ++i) + { + ImplMulwAcc(u, a[i], b[i], zz, i << 1); + } + + ulong v0 = zz[0], v1 = zz[1]; + v0 ^= zz[ 2]; zz[1] = v0 ^ v1; v1 ^= zz[ 3]; + v0 ^= zz[ 4]; zz[2] = v0 ^ v1; v1 ^= zz[ 5]; + v0 ^= zz[ 6]; zz[3] = v0 ^ v1; v1 ^= zz[ 7]; + v0 ^= zz[ 8]; zz[4] = v0 ^ v1; v1 ^= zz[ 9]; + v0 ^= zz[10]; zz[5] = v0 ^ v1; v1 ^= zz[11]; + v0 ^= zz[12]; zz[6] = v0 ^ v1; v1 ^= zz[13]; + + ulong w = v0 ^ v1; + zz[ 7] = zz[0] ^ w; + zz[ 8] = zz[1] ^ w; + zz[ 9] = zz[2] ^ w; + zz[10] = zz[3] ^ w; + zz[11] = zz[4] ^ w; + zz[12] = zz[5] ^ w; + zz[13] = zz[6] ^ w; + + ImplMulwAcc(u, a[0] ^ a[1], b[0] ^ b[1], zz, 1); + + ImplMulwAcc(u, a[0] ^ a[2], b[0] ^ b[2], zz, 2); + + ImplMulwAcc(u, a[0] ^ a[3], b[0] ^ b[3], zz, 3); + ImplMulwAcc(u, a[1] ^ a[2], b[1] ^ b[2], zz, 3); + + ImplMulwAcc(u, a[0] ^ a[4], b[0] ^ b[4], zz, 4); + ImplMulwAcc(u, a[1] ^ a[3], b[1] ^ b[3], zz, 4); + + ImplMulwAcc(u, a[0] ^ a[5], b[0] ^ b[5], zz, 5); + ImplMulwAcc(u, a[1] ^ a[4], b[1] ^ b[4], zz, 5); + ImplMulwAcc(u, a[2] ^ a[3], b[2] ^ b[3], zz, 5); + + ImplMulwAcc(u, a[0] ^ a[6], b[0] ^ b[6], zz, 6); + ImplMulwAcc(u, a[1] ^ a[5], b[1] ^ b[5], zz, 6); + ImplMulwAcc(u, a[2] ^ a[4], b[2] ^ b[4], zz, 6); + + ImplMulwAcc(u, a[1] ^ a[6], b[1] ^ b[6], zz, 7); + ImplMulwAcc(u, a[2] ^ a[5], b[2] ^ b[5], zz, 7); + ImplMulwAcc(u, a[3] ^ a[4], b[3] ^ b[4], zz, 7); + + ImplMulwAcc(u, a[2] ^ a[6], b[2] ^ b[6], zz, 8); + ImplMulwAcc(u, a[3] ^ a[5], b[3] ^ b[5], zz, 8); + + ImplMulwAcc(u, a[3] ^ a[6], b[3] ^ b[6], zz, 9); + ImplMulwAcc(u, a[4] ^ a[5], b[4] ^ b[5], zz, 9); + + ImplMulwAcc(u, a[4] ^ a[6], b[4] ^ b[6], zz, 10); + + ImplMulwAcc(u, a[5] ^ a[6], b[5] ^ b[6], zz, 11); + + ImplCompactExt(zz); + } + + protected static void ImplMulwAcc(ulong[] u, ulong x, ulong y, ulong[] z, int zOff) + { + Debug.Assert(x >> 59 == 0); + Debug.Assert(y >> 59 == 0); + +#if NETCOREAPP3_0_OR_GREATER + if (Pclmulqdq.IsSupported) + { + var X = Vector128.CreateScalar(x); + var Y = Vector128.CreateScalar(y); + var Z = Pclmulqdq.CarrylessMultiply(X, Y, 0x00); + ulong z0 = Z.GetElement(0); + ulong z1 = Z.GetElement(1); + z[zOff ] ^= z0 & M59; + z[zOff + 1] ^= (z0 >> 59) ^ (z1 << 5); + return; + } +#endif + + //u[0] = 0; + u[1] = y; + u[2] = u[1] << 1; + u[3] = u[2] ^ y; + u[4] = u[2] << 1; + u[5] = u[4] ^ y; + u[6] = u[3] << 1; + u[7] = u[6] ^ y; + + uint j = (uint)x; + ulong g, h = 0, l = u[j & 7] + ^ (u[(j >> 3) & 7] << 3); + int k = 54; + do + { + j = (uint)(x >> k); + g = u[j & 7] + ^ u[(j >> 3) & 7] << 3; + l ^= (g << k); + h ^= (g >> -k); + } + while ((k -= 6) > 0); + + Debug.Assert(h >> 53 == 0); + + z[zOff ] ^= l & M59; + z[zOff + 1] ^= (l >> 59) ^ (h << 5); + } + + protected static void ImplSquare(ulong[] x, ulong[] zz) + { + Interleave.Expand64To128(x, 0, 6, zz, 0); + zz[12] = Interleave.Expand32to64((uint)x[6]); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409Field.cs.meta new file mode 100644 index 000000000..8b579412b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9678e96cfd9602a4287cdda4c732d8f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409FieldElement.cs new file mode 100644 index 000000000..0b926360b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409FieldElement.cs @@ -0,0 +1,237 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT409FieldElement + : AbstractF2mFieldElement + { + protected internal readonly ulong[] x; + + public SecT409FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.BitLength > 409) + throw new ArgumentException("value invalid for SecT409FieldElement", "x"); + + this.x = SecT409Field.FromBigInteger(x); + } + + public SecT409FieldElement() + { + this.x = Nat448.Create64(); + } + + protected internal SecT409FieldElement(ulong[] x) + { + this.x = x; + } + + public override bool IsOne + { + get { return Nat448.IsOne64(x); } + } + + public override bool IsZero + { + get { return Nat448.IsZero64(x); } + } + + public override bool TestBitZero() + { + return (x[0] & 1UL) != 0UL; + } + + public override BigInteger ToBigInteger() + { + return Nat448.ToBigInteger64(x); + } + + public override string FieldName + { + get { return "SecT409Field"; } + } + + public override int FieldSize + { + get { return 409; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + ulong[] z = Nat448.Create64(); + SecT409Field.Add(x, ((SecT409FieldElement)b).x, z); + return new SecT409FieldElement(z); + } + + public override ECFieldElement AddOne() + { + ulong[] z = Nat448.Create64(); + SecT409Field.AddOne(x, z); + return new SecT409FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + // Addition and subtraction are the same in F2m + return Add(b); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + ulong[] z = Nat448.Create64(); + SecT409Field.Multiply(x, ((SecT409FieldElement)b).x, z); + return new SecT409FieldElement(z); + } + + public override ECFieldElement MultiplyMinusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + return MultiplyPlusProduct(b, x, y); + } + + public override ECFieldElement MultiplyPlusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + ulong[] ax = this.x, bx = ((SecT409FieldElement)b).x; + ulong[] xx = ((SecT409FieldElement)x).x, yx = ((SecT409FieldElement)y).x; + + ulong[] tt = Nat.Create64(13); + SecT409Field.MultiplyAddToExt(ax, bx, tt); + SecT409Field.MultiplyAddToExt(xx, yx, tt); + + ulong[] z = Nat448.Create64(); + SecT409Field.Reduce(tt, z); + return new SecT409FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + return Multiply(b.Invert()); + } + + public override ECFieldElement Negate() + { + return this; + } + + public override ECFieldElement Square() + { + ulong[] z = Nat448.Create64(); + SecT409Field.Square(x, z); + return new SecT409FieldElement(z); + } + + public override ECFieldElement SquareMinusProduct(ECFieldElement x, ECFieldElement y) + { + return SquarePlusProduct(x, y); + } + + public override ECFieldElement SquarePlusProduct(ECFieldElement x, ECFieldElement y) + { + ulong[] ax = this.x; + ulong[] xx = ((SecT409FieldElement)x).x, yx = ((SecT409FieldElement)y).x; + + ulong[] tt = Nat.Create64(13); + SecT409Field.SquareAddToExt(ax, tt); + SecT409Field.MultiplyAddToExt(xx, yx, tt); + + ulong[] z = Nat448.Create64(); + SecT409Field.Reduce(tt, z); + return new SecT409FieldElement(z); + } + + public override ECFieldElement SquarePow(int pow) + { + if (pow < 1) + return this; + + ulong[] z = Nat448.Create64(); + SecT409Field.SquareN(x, pow, z); + return new SecT409FieldElement(z); + } + + public override ECFieldElement HalfTrace() + { + ulong[] z = Nat448.Create64(); + SecT409Field.HalfTrace(x, z); + return new SecT409FieldElement(z); + } + + public override bool HasFastTrace + { + get { return true; } + } + + public override int Trace() + { + return (int)SecT409Field.Trace(x); + } + + public override ECFieldElement Invert() + { + ulong[] z = Nat448.Create64(); + SecT409Field.Invert(x, z); + return new SecT409FieldElement(z); + } + + public override ECFieldElement Sqrt() + { + ulong[] z = Nat448.Create64(); + SecT409Field.Sqrt(x, z); + return new SecT409FieldElement(z); + } + + public virtual int Representation + { + get { return F2mFieldElement.Tpb; } + } + + public virtual int M + { + get { return 409; } + } + + public virtual int K1 + { + get { return 87; } + } + + public virtual int K2 + { + get { return 0; } + } + + public virtual int K3 + { + get { return 0; } + } + + public override bool Equals(object obj) + { + return Equals(obj as SecT409FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecT409FieldElement); + } + + public virtual bool Equals(SecT409FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat448.Eq64(x, other.x); + } + + public override int GetHashCode() + { + return 4090087 ^ Arrays.GetHashCode(x, 0, 7); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409FieldElement.cs.meta new file mode 100644 index 000000000..7e21d22c1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e5e0f341731bb140baa0eb9ad0b6ed6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409K1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409K1Curve.cs new file mode 100644 index 000000000..3d7f3e2c1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409K1Curve.cs @@ -0,0 +1,187 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT409K1Curve + : AbstractF2mCurve + { + private const int SECT409K1_DEFAULT_COORDS = COORD_LAMBDA_PROJECTIVE; + private const int SECT409K1_FE_LONGS = 7; + private static readonly ECFieldElement[] SECT409K1_AFFINE_ZS = new ECFieldElement[] { new SecT409FieldElement(BigInteger.One) }; + + protected readonly SecT409K1Point m_infinity; + + public SecT409K1Curve() + : base(409, 87, 0, 0) + { + this.m_infinity = new SecT409K1Point(this, null, null); + + this.m_a = FromBigInteger(BigInteger.Zero); + this.m_b = FromBigInteger(BigInteger.One); + this.m_order = new BigInteger(1, Hex.DecodeStrict("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5F83B2D4EA20400EC4557D5ED3E3E7CA5B4B5C83B8E01E5FCF")); + this.m_cofactor = BigInteger.ValueOf(4); + + this.m_coord = SECT409K1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecT409K1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_LAMBDA_PROJECTIVE: + return true; + default: + return false; + } + } + + protected override ECMultiplier CreateDefaultMultiplier() + { + return new WTauNafMultiplier(); + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return 409; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecT409FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecT409K1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecT409K1Point(this, x, y, zs); + } + + public override bool IsKoblitz + { + get { return true; } + } + + public virtual int M + { + get { return 409; } + } + + public virtual bool IsTrinomial + { + get { return true; } + } + + public virtual int K1 + { + get { return 87; } + } + + public virtual int K2 + { + get { return 0; } + } + + public virtual int K3 + { + get { return 0; } + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + ulong[] table = new ulong[len * SECT409K1_FE_LONGS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat448.Copy64(((SecT409FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECT409K1_FE_LONGS; + Nat448.Copy64(((SecT409FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECT409K1_FE_LONGS; + } + } + + return new SecT409K1LookupTable(this, table, len); + } + + private class SecT409K1LookupTable + : AbstractECLookupTable + { + private readonly SecT409K1Curve m_outer; + private readonly ulong[] m_table; + private readonly int m_size; + + internal SecT409K1LookupTable(SecT409K1Curve outer, ulong[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + ulong[] x = Nat448.Create64(), y = Nat448.Create64(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECT409K1_FE_LONGS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECT409K1_FE_LONGS + j] & MASK; + } + + pos += (SECT409K1_FE_LONGS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + ulong[] x = Nat448.Create64(), y = Nat448.Create64(); + int pos = index * SECT409K1_FE_LONGS * 2; + + for (int j = 0; j < SECT409K1_FE_LONGS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECT409K1_FE_LONGS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(ulong[] x, ulong[] y) + { + return m_outer.CreateRawPoint(new SecT409FieldElement(x), new SecT409FieldElement(y), SECT409K1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409K1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409K1Curve.cs.meta new file mode 100644 index 000000000..70bb66469 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409K1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cf4755077296bd8448cd4e30aefef694 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409K1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409K1Point.cs new file mode 100644 index 000000000..c6310523f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409K1Point.cs @@ -0,0 +1,280 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT409K1Point + : AbstractF2mPoint + { + internal SecT409K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecT409K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecT409K1Point(null, this.AffineXCoord, this.AffineYCoord); + } + + public override ECFieldElement YCoord + { + get + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + if (this.IsInfinity || X.IsZero) + return L; + + // Y is actually Lambda (X + Y/X) here; convert to affine value on the fly + ECFieldElement Y = L.Add(X).Multiply(X); + + ECFieldElement Z = RawZCoords[0]; + if (!Z.IsOne) + { + Y = Y.Divide(Z); + } + + return Y; + } + } + + protected internal override bool CompressionYTilde + { + get + { + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return false; + + ECFieldElement Y = this.RawYCoord; + + // Y is actually Lambda (X + Y/X) here + return Y.TestBitZero() != X.TestBitZero(); + } + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + ECFieldElement X2 = b.RawXCoord; + + if (X1.IsZero) + { + if (X2.IsZero) + return curve.Infinity; + + return b.Add(this); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord, Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement U2 = X2, S2 = L2; + if (!Z1IsOne) + { + U2 = U2.Multiply(Z1); + S2 = S2.Multiply(Z1); + } + + bool Z2IsOne = Z2.IsOne; + ECFieldElement U1 = X1, S1 = L1; + if (!Z2IsOne) + { + U1 = U1.Multiply(Z2); + S1 = S1.Multiply(Z2); + } + + ECFieldElement A = S1.Add(S2); + ECFieldElement B = U1.Add(U2); + + if (B.IsZero) + { + if (A.IsZero) + return Twice(); + + return curve.Infinity; + } + + ECFieldElement X3, L3, Z3; + if (X2.IsZero) + { + // TODO This can probably be optimized quite a bit + ECPoint p = this.Normalize(); + X1 = p.XCoord; + ECFieldElement Y1 = p.YCoord; + + ECFieldElement Y2 = L2; + ECFieldElement L = Y1.Add(Y2).Divide(X1); + + X3 = L.Square().Add(L).Add(X1); + if (X3.IsZero) + { + return new SecT409K1Point(curve, X3, curve.B); + } + + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + L3 = Y3.Divide(X3).Add(X3); + Z3 = curve.FromBigInteger(BigInteger.One); + } + else + { + B = B.Square(); + + ECFieldElement AU1 = A.Multiply(U1); + ECFieldElement AU2 = A.Multiply(U2); + + X3 = AU1.Multiply(AU2); + if (X3.IsZero) + { + return new SecT409K1Point(curve, X3, curve.B); + } + + ECFieldElement ABZ2 = A.Multiply(B); + if (!Z2IsOne) + { + ABZ2 = ABZ2.Multiply(Z2); + } + + L3 = AU2.Add(B).SquarePlusProduct(ABZ2, L1.Add(Z1)); + + Z3 = ABZ2; + if (!Z1IsOne) + { + Z3 = Z3.Multiply(Z1); + } + } + + return new SecT409K1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return curve.Infinity; + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement Z1Sq = Z1IsOne ? Z1 : Z1.Square(); + ECFieldElement T; + if (Z1IsOne) + { + T = L1.Square().Add(L1); + } + else + { + T = L1.Add(Z1).Multiply(L1); + } + + if (T.IsZero) + { + return new SecT409K1Point(curve, T, curve.B); + } + + ECFieldElement X3 = T.Square(); + ECFieldElement Z3 = Z1IsOne ? T : T.Multiply(Z1Sq); + + ECFieldElement t1 = L1.Add(X1).Square(); + ECFieldElement t2 = Z1IsOne ? Z1 : Z1Sq.Square(); + ECFieldElement L3 = t1.Add(T).Add(Z1Sq).Multiply(t1).Add(t2).Add(X3).Add(Z3); + + return new SecT409K1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return b; + } + + // NOTE: TwicePlus() only optimized for lambda-affine argument + ECFieldElement X2 = b.RawXCoord, Z2 = b.RawZCoords[0]; + if (X2.IsZero || !Z2.IsOne) + { + return Twice().Add(b); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord; + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement L1Sq = L1.Square(); + ECFieldElement Z1Sq = Z1.Square(); + ECFieldElement L1Z1 = L1.Multiply(Z1); + + ECFieldElement T = L1Sq.Add(L1Z1); + ECFieldElement L2plus1 = L2.AddOne(); + ECFieldElement A = L2plus1.Multiply(Z1Sq).Add(L1Sq).MultiplyPlusProduct(T, X1Sq, Z1Sq); + ECFieldElement X2Z1Sq = X2.Multiply(Z1Sq); + ECFieldElement B = X2Z1Sq.Add(T).Square(); + + if (B.IsZero) + { + if (A.IsZero) + return b.Twice(); + + return curve.Infinity; + } + + if (A.IsZero) + { + return new SecT409K1Point(curve, A, curve.B); + } + + ECFieldElement X3 = A.Square().Multiply(X2Z1Sq); + ECFieldElement Z3 = A.Multiply(B).Multiply(Z1Sq); + ECFieldElement L3 = A.Add(B).Square().MultiplyPlusProduct(T, L2plus1, Z3); + + return new SecT409K1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Negate() + { + if (this.IsInfinity) + return this; + + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return this; + + // L is actually Lambda (X + Y/X) here + ECFieldElement L = this.RawYCoord, Z = this.RawZCoords[0]; + return new SecT409K1Point(Curve, X, L.Add(Z), new ECFieldElement[] { Z }); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409K1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409K1Point.cs.meta new file mode 100644 index 000000000..d66d49150 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409K1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dca960a8b177f5041af3ff0e3781a17e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409R1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409R1Curve.cs new file mode 100644 index 000000000..570f6fb6e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409R1Curve.cs @@ -0,0 +1,181 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT409R1Curve + : AbstractF2mCurve + { + private const int SECT409R1_DEFAULT_COORDS = COORD_LAMBDA_PROJECTIVE; + private const int SECT409R1_FE_LONGS = 7; + private static readonly ECFieldElement[] SECT409R1_AFFINE_ZS = new ECFieldElement[] { new SecT409FieldElement(BigInteger.One) }; + + protected readonly SecT409R1Point m_infinity; + + public SecT409R1Curve() + : base(409, 87, 0, 0) + { + this.m_infinity = new SecT409R1Point(this, null, null); + + this.m_a = FromBigInteger(BigInteger.One); + this.m_b = FromBigInteger(new BigInteger(1, Hex.DecodeStrict("0021A5C2C8EE9FEB5C4B9A753B7B476B7FD6422EF1F3DD674761FA99D6AC27C8A9A197B272822F6CD57A55AA4F50AE317B13545F"))); + this.m_order = new BigInteger(1, Hex.DecodeStrict("010000000000000000000000000000000000000000000000000001E2AAD6A612F33307BE5FA47C3C9E052F838164CD37D9A21173")); + this.m_cofactor = BigInteger.Two; + + this.m_coord = SECT409R1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecT409R1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_LAMBDA_PROJECTIVE: + return true; + default: + return false; + } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return 409; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecT409FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecT409R1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecT409R1Point(this, x, y, zs); + } + + public override bool IsKoblitz + { + get { return false; } + } + + public virtual int M + { + get { return 409; } + } + + public virtual bool IsTrinomial + { + get { return true; } + } + + public virtual int K1 + { + get { return 87; } + } + + public virtual int K2 + { + get { return 0; } + } + + public virtual int K3 + { + get { return 0; } + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + ulong[] table = new ulong[len * SECT409R1_FE_LONGS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat448.Copy64(((SecT409FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECT409R1_FE_LONGS; + Nat448.Copy64(((SecT409FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECT409R1_FE_LONGS; + } + } + + return new SecT409R1LookupTable(this, table, len); + } + + private class SecT409R1LookupTable + : AbstractECLookupTable + { + private readonly SecT409R1Curve m_outer; + private readonly ulong[] m_table; + private readonly int m_size; + + internal SecT409R1LookupTable(SecT409R1Curve outer, ulong[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + ulong[] x = Nat448.Create64(), y = Nat448.Create64(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECT409R1_FE_LONGS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECT409R1_FE_LONGS + j] & MASK; + } + + pos += (SECT409R1_FE_LONGS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + ulong[] x = Nat448.Create64(), y = Nat448.Create64(); + int pos = index * SECT409R1_FE_LONGS * 2; + + for (int j = 0; j < SECT409R1_FE_LONGS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECT409R1_FE_LONGS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(ulong[] x, ulong[] y) + { + return m_outer.CreateRawPoint(new SecT409FieldElement(x), new SecT409FieldElement(y), SECT409R1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409R1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409R1Curve.cs.meta new file mode 100644 index 000000000..77296a463 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409R1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1dd1b0669a789ac449e87e655d8b9b78 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409R1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409R1Point.cs new file mode 100644 index 000000000..49c17da69 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409R1Point.cs @@ -0,0 +1,269 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT409R1Point + : AbstractF2mPoint + { + internal SecT409R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecT409R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecT409R1Point(null, AffineXCoord, AffineYCoord); + } + + public override ECFieldElement YCoord + { + get + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + if (this.IsInfinity || X.IsZero) + return L; + + // Y is actually Lambda (X + Y/X) here; convert to affine value on the fly + ECFieldElement Y = L.Add(X).Multiply(X); + + ECFieldElement Z = RawZCoords[0]; + if (!Z.IsOne) + { + Y = Y.Divide(Z); + } + + return Y; + } + } + + protected internal override bool CompressionYTilde + { + get + { + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return false; + + ECFieldElement Y = this.RawYCoord; + + // Y is actually Lambda (X + Y/X) here + return Y.TestBitZero() != X.TestBitZero(); + } + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + ECFieldElement X2 = b.RawXCoord; + + if (X1.IsZero) + { + if (X2.IsZero) + return curve.Infinity; + + return b.Add(this); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord, Z2 = b.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement U2 = X2, S2 = L2; + if (!Z1IsOne) + { + U2 = U2.Multiply(Z1); + S2 = S2.Multiply(Z1); + } + + bool Z2IsOne = Z2.IsOne; + ECFieldElement U1 = X1, S1 = L1; + if (!Z2IsOne) + { + U1 = U1.Multiply(Z2); + S1 = S1.Multiply(Z2); + } + + ECFieldElement A = S1.Add(S2); + ECFieldElement B = U1.Add(U2); + + if (B.IsZero) + { + if (A.IsZero) + return Twice(); + + return curve.Infinity; + } + + ECFieldElement X3, L3, Z3; + if (X2.IsZero) + { + // TODO This can probably be optimized quite a bit + ECPoint p = this.Normalize(); + X1 = p.XCoord; + ECFieldElement Y1 = p.YCoord; + + ECFieldElement Y2 = L2; + ECFieldElement L = Y1.Add(Y2).Divide(X1); + + X3 = L.Square().Add(L).Add(X1).AddOne(); + if (X3.IsZero) + { + return new SecT409R1Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + L3 = Y3.Divide(X3).Add(X3); + Z3 = curve.FromBigInteger(BigInteger.One); + } + else + { + B = B.Square(); + + ECFieldElement AU1 = A.Multiply(U1); + ECFieldElement AU2 = A.Multiply(U2); + + X3 = AU1.Multiply(AU2); + if (X3.IsZero) + { + return new SecT409R1Point(curve, X3, curve.B.Sqrt()); + } + + ECFieldElement ABZ2 = A.Multiply(B); + if (!Z2IsOne) + { + ABZ2 = ABZ2.Multiply(Z2); + } + + L3 = AU2.Add(B).SquarePlusProduct(ABZ2, L1.Add(Z1)); + + Z3 = ABZ2; + if (!Z1IsOne) + { + Z3 = Z3.Multiply(Z1); + } + } + + return new SecT409R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return curve.Infinity; + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement L1Z1 = Z1IsOne ? L1 : L1.Multiply(Z1); + ECFieldElement Z1Sq = Z1IsOne ? Z1 : Z1.Square(); + ECFieldElement T = L1.Square().Add(L1Z1).Add(Z1Sq); + if (T.IsZero) + { + return new SecT409R1Point(curve, T, curve.B.Sqrt()); + } + + ECFieldElement X3 = T.Square(); + ECFieldElement Z3 = Z1IsOne ? T : T.Multiply(Z1Sq); + + ECFieldElement X1Z1 = Z1IsOne ? X1 : X1.Multiply(Z1); + ECFieldElement L3 = X1Z1.SquarePlusProduct(T, L1Z1).Add(X3).Add(Z3); + + return new SecT409R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return b; + } + + ECFieldElement X2 = b.RawXCoord, Z2 = b.RawZCoords[0]; + if (X2.IsZero || !Z2.IsOne) + { + return Twice().Add(b); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord; + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement L1Sq = L1.Square(); + ECFieldElement Z1Sq = Z1.Square(); + ECFieldElement L1Z1 = L1.Multiply(Z1); + + ECFieldElement T = Z1Sq.Add(L1Sq).Add(L1Z1); + ECFieldElement A = L2.Multiply(Z1Sq).Add(L1Sq).MultiplyPlusProduct(T, X1Sq, Z1Sq); + ECFieldElement X2Z1Sq = X2.Multiply(Z1Sq); + ECFieldElement B = X2Z1Sq.Add(T).Square(); + + if (B.IsZero) + { + if (A.IsZero) + return b.Twice(); + + return curve.Infinity; + } + + if (A.IsZero) + { + return new SecT409R1Point(curve, A, curve.B.Sqrt()); + } + + ECFieldElement X3 = A.Square().Multiply(X2Z1Sq); + ECFieldElement Z3 = A.Multiply(B).Multiply(Z1Sq); + ECFieldElement L3 = A.Add(B).Square().MultiplyPlusProduct(T, L2.AddOne(), Z3); + + return new SecT409R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Negate() + { + if (this.IsInfinity) + return this; + + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return this; + + // L is actually Lambda (X + Y/X) here + ECFieldElement L = this.RawYCoord, Z = this.RawZCoords[0]; + return new SecT409R1Point(Curve, X, L.Add(Z), new ECFieldElement[] { Z }); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409R1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409R1Point.cs.meta new file mode 100644 index 000000000..7ea2324ff --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT409R1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9a5dada0af7a6434487b13aa553ebcbd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571Field.cs new file mode 100644 index 000000000..6c4eaf6fe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571Field.cs @@ -0,0 +1,459 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +#if NETCOREAPP3_0_OR_GREATER +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT571Field + { + private const ulong M59 = ulong.MaxValue >> 5; + + private static readonly ulong[] ROOT_Z = new ulong[]{ 0x2BE1195F08CAFB99UL, 0x95F08CAF84657C23UL, + 0xCAF84657C232BE11UL, 0x657C232BE1195F08UL, 0xF84657C2308CAF84UL, 0x7C232BE1195F08CAUL, + 0xBE1195F08CAF8465UL, 0x5F08CAF84657C232UL, 0x784657C232BE119UL }; + + public static void Add(ulong[] x, ulong[] y, ulong[] z) + { + Nat.Xor64(9, x, y, z); + } + + private static void Add(ulong[] x, int xOff, ulong[] y, int yOff, ulong[] z, int zOff) + { + Nat.Xor64(9, x, xOff, y, yOff, z, zOff); + } + + public static void AddBothTo(ulong[] x, ulong[] y, ulong[] z) + { + for (int i = 0; i < 9; ++i) + { + z[i] ^= x[i] ^ y[i]; + } + } + + private static void AddBothTo(ulong[] x, int xOff, ulong[] y, int yOff, ulong[] z, int zOff) + { + for (int i = 0; i < 9; ++i) + { + z[zOff + i] ^= x[xOff + i] ^ y[yOff + i]; + } + } + + public static void AddExt(ulong[] xx, ulong[] yy, ulong[] zz) + { + Nat.Xor64(18, xx, yy, zz); + } + + public static void AddOne(ulong[] x, ulong[] z) + { + z[0] = x[0] ^ 1UL; + for (int i = 1; i < 9; ++i) + { + z[i] = x[i]; + } + } + + private static void AddTo(ulong[] x, ulong[] z) + { + Nat.XorTo64(9, x, z); + } + + public static ulong[] FromBigInteger(BigInteger x) + { + return Nat.FromBigInteger64(571, x); + } + + public static void HalfTrace(ulong[] x, ulong[] z) + { + ulong[] tt = Nat576.CreateExt64(); + + Nat576.Copy64(x, z); + for (int i = 1; i < 571; i += 2) + { + ImplSquare(z, tt); + Reduce(tt, z); + ImplSquare(z, tt); + Reduce(tt, z); + AddTo(x, z); + } + } + + public static void Invert(ulong[] x, ulong[] z) + { + if (Nat576.IsZero64(x)) + throw new InvalidOperationException(); + + // Itoh-Tsujii inversion with bases { 2, 3, 5 } + + ulong[] t0 = Nat576.Create64(); + ulong[] t1 = Nat576.Create64(); + ulong[] t2 = Nat576.Create64(); + + Square(x, t2); + + // 5 | 570 + Square(t2, t0); + Square(t0, t1); + Multiply(t0, t1, t0); + SquareN(t0, 2, t1); + Multiply(t0, t1, t0); + Multiply(t0, t2, t0); + + // 3 | 114 + SquareN(t0, 5, t1); + Multiply(t0, t1, t0); + SquareN(t1, 5, t1); + Multiply(t0, t1, t0); + + // 2 | 38 + SquareN(t0, 15, t1); + Multiply(t0, t1, t2); + + // ! {2,3,5} | 19 + SquareN(t2, 30, t0); + SquareN(t0, 30, t1); + Multiply(t0, t1, t0); + + // 3 | 9 + SquareN(t0, 60, t1); + Multiply(t0, t1, t0); + SquareN(t1, 60, t1); + Multiply(t0, t1, t0); + + // 3 | 3 + SquareN(t0, 180, t1); + Multiply(t0, t1, t0); + SquareN(t1, 180, t1); + Multiply(t0, t1, t0); + + Multiply(t0, t2, z); + } + + public static void Multiply(ulong[] x, ulong[] y, ulong[] z) + { + ulong[] tt = Nat576.CreateExt64(); + ImplMultiply(x, y, tt); + Reduce(tt, z); + } + + public static void MultiplyAddToExt(ulong[] x, ulong[] y, ulong[] zz) + { + ulong[] tt = Nat576.CreateExt64(); + ImplMultiply(x, y, tt); + AddExt(zz, tt, zz); + } + + public static void MultiplyPrecomp(ulong[] x, ulong[] precomp, ulong[] z) + { + ulong[] tt = Nat576.CreateExt64(); + ImplMultiplyPrecomp(x, precomp, tt); + Reduce(tt, z); + } + + public static void MultiplyPrecompAddToExt(ulong[] x, ulong[] precomp, ulong[] zz) + { + ulong[] tt = Nat576.CreateExt64(); + ImplMultiplyPrecomp(x, precomp, tt); + AddExt(zz, tt, zz); + } + + public static ulong[] PrecompMultiplicand(ulong[] x) + { +#if NETCOREAPP3_0_OR_GREATER + ulong[] z = Nat576.Create64(); + Nat576.Copy64(x, z); + return z; +#else + /* + * Precompute table of all 4-bit products of x (first section) + */ + int len = 9 << 4; + ulong[] t = new ulong[len << 1]; + Array.Copy(x, 0, t, 9, 9); + //Reduce5(t, 9); + int tOff = 0; + for (int i = 7; i > 0; --i) + { + tOff += 18; + Nat.ShiftUpBit64(9, t, tOff >> 1, 0UL, t, tOff); + Reduce5(t, tOff); + Add(t, 9, t, tOff, t, tOff + 9); + } + + /* + * Second section with all 4-bit products of x shifted 4 bits + */ + Nat.ShiftUpBits64(len, t, 0, 4, 0UL, t, len); + + return t; +#endif + } + + public static void Reduce(ulong[] xx, ulong[] z) + { + ulong xx09 = xx[9]; + ulong u = xx[17], v = xx09; + + xx09 = v ^ (u >> 59) ^ (u >> 57) ^ (u >> 54) ^ (u >> 49); + v = xx[8] ^ (u << 5) ^ (u << 7) ^ (u << 10) ^ (u << 15); + + for (int i = 16; i >= 10; --i) + { + u = xx[i]; + z[i - 8] = v ^ (u >> 59) ^ (u >> 57) ^ (u >> 54) ^ (u >> 49); + v = xx[i - 9] ^ (u << 5) ^ (u << 7) ^ (u << 10) ^ (u << 15); + } + + u = xx09; + z[1] = v ^ (u >> 59) ^ (u >> 57) ^ (u >> 54) ^ (u >> 49); + v = xx[0] ^ (u << 5) ^ (u << 7) ^ (u << 10) ^ (u << 15); + + ulong x08 = z[8]; + ulong t = x08 >> 59; + z[0] = v ^ t ^ (t << 2) ^ (t << 5) ^ (t << 10); + z[8] = x08 & M59; + } + + public static void Reduce5(ulong[] z, int zOff) + { + ulong z8 = z[zOff + 8], t = z8 >> 59; + z[zOff ] ^= t ^ (t << 2) ^ (t << 5) ^ (t << 10); + z[zOff + 8] = z8 & M59; + } + + public static void Sqrt(ulong[] x, ulong[] z) + { + ulong[] evn = Nat576.Create64(), odd = Nat576.Create64(); + + odd[0] = Interleave.Unshuffle(x[0], x[1], out evn[0]); + odd[1] = Interleave.Unshuffle(x[2], x[3], out evn[1]); + odd[2] = Interleave.Unshuffle(x[4], x[5], out evn[2]); + odd[3] = Interleave.Unshuffle(x[6], x[7], out evn[3]); + odd[4] = Interleave.Unshuffle(x[8] , out evn[4]); + + Multiply(odd, ROOT_Z, z); + Add(z, evn, z); + } + + public static void Square(ulong[] x, ulong[] z) + { + ulong[] tt = Nat576.CreateExt64(); + ImplSquare(x, tt); + Reduce(tt, z); + } + + public static void SquareAddToExt(ulong[] x, ulong[] zz) + { + ulong[] tt = Nat576.CreateExt64(); + ImplSquare(x, tt); + AddExt(zz, tt, zz); + } + + public static void SquareN(ulong[] x, int n, ulong[] z) + { + Debug.Assert(n > 0); + + ulong[] tt = Nat576.CreateExt64(); + ImplSquare(x, tt); + Reduce(tt, z); + + while (--n > 0) + { + ImplSquare(z, tt); + Reduce(tt, z); + } + } + + public static uint Trace(ulong[] x) + { + // Non-zero-trace bits: 0, 561, 569 + return (uint)(x[0] ^ (x[8] >> 49) ^ (x[8] >> 57)) & 1U; + } + + protected static void ImplMultiply(ulong[] x, ulong[] y, ulong[] zz) + { + //ulong[] precomp = PrecompMultiplicand(y); + + //ImplMultiplyPrecomp(x, precomp, zz); + + ulong[] u = new ulong[16]; + for (int i = 0; i < 9; ++i) + { + ImplMulwAcc(u, x[i], y[i], zz, i << 1); + } + + ulong v0 = zz[0], v1 = zz[1]; + v0 ^= zz[ 2]; zz[1] = v0 ^ v1; v1 ^= zz[ 3]; + v0 ^= zz[ 4]; zz[2] = v0 ^ v1; v1 ^= zz[ 5]; + v0 ^= zz[ 6]; zz[3] = v0 ^ v1; v1 ^= zz[ 7]; + v0 ^= zz[ 8]; zz[4] = v0 ^ v1; v1 ^= zz[ 9]; + v0 ^= zz[10]; zz[5] = v0 ^ v1; v1 ^= zz[11]; + v0 ^= zz[12]; zz[6] = v0 ^ v1; v1 ^= zz[13]; + v0 ^= zz[14]; zz[7] = v0 ^ v1; v1 ^= zz[15]; + v0 ^= zz[16]; zz[8] = v0 ^ v1; v1 ^= zz[17]; + + ulong w = v0 ^ v1; + zz[ 9] = zz[0] ^ w; + zz[10] = zz[1] ^ w; + zz[11] = zz[2] ^ w; + zz[12] = zz[3] ^ w; + zz[13] = zz[4] ^ w; + zz[14] = zz[5] ^ w; + zz[15] = zz[6] ^ w; + zz[16] = zz[7] ^ w; + zz[17] = zz[8] ^ w; + + ImplMulwAcc(u, x[0] ^ x[1], y[0] ^ y[1], zz, 1); + + ImplMulwAcc(u, x[0] ^ x[2], y[0] ^ y[2], zz, 2); + + ImplMulwAcc(u, x[0] ^ x[3], y[0] ^ y[3], zz, 3); + ImplMulwAcc(u, x[1] ^ x[2], y[1] ^ y[2], zz, 3); + + ImplMulwAcc(u, x[0] ^ x[4], y[0] ^ y[4], zz, 4); + ImplMulwAcc(u, x[1] ^ x[3], y[1] ^ y[3], zz, 4); + + ImplMulwAcc(u, x[0] ^ x[5], y[0] ^ y[5], zz, 5); + ImplMulwAcc(u, x[1] ^ x[4], y[1] ^ y[4], zz, 5); + ImplMulwAcc(u, x[2] ^ x[3], y[2] ^ y[3], zz, 5); + + ImplMulwAcc(u, x[0] ^ x[6], y[0] ^ y[6], zz, 6); + ImplMulwAcc(u, x[1] ^ x[5], y[1] ^ y[5], zz, 6); + ImplMulwAcc(u, x[2] ^ x[4], y[2] ^ y[4], zz, 6); + + ImplMulwAcc(u, x[0] ^ x[7], y[0] ^ y[7], zz, 7); + ImplMulwAcc(u, x[1] ^ x[6], y[1] ^ y[6], zz, 7); + ImplMulwAcc(u, x[2] ^ x[5], y[2] ^ y[5], zz, 7); + ImplMulwAcc(u, x[3] ^ x[4], y[3] ^ y[4], zz, 7); + + ImplMulwAcc(u, x[0] ^ x[8], y[0] ^ y[8], zz, 8); + ImplMulwAcc(u, x[1] ^ x[7], y[1] ^ y[7], zz, 8); + ImplMulwAcc(u, x[2] ^ x[6], y[2] ^ y[6], zz, 8); + ImplMulwAcc(u, x[3] ^ x[5], y[3] ^ y[5], zz, 8); + + ImplMulwAcc(u, x[1] ^ x[8], y[1] ^ y[8], zz, 9); + ImplMulwAcc(u, x[2] ^ x[7], y[2] ^ y[7], zz, 9); + ImplMulwAcc(u, x[3] ^ x[6], y[3] ^ y[6], zz, 9); + ImplMulwAcc(u, x[4] ^ x[5], y[4] ^ y[5], zz, 9); + + ImplMulwAcc(u, x[2] ^ x[8], y[2] ^ y[8], zz, 10); + ImplMulwAcc(u, x[3] ^ x[7], y[3] ^ y[7], zz, 10); + ImplMulwAcc(u, x[4] ^ x[6], y[4] ^ y[6], zz, 10); + + ImplMulwAcc(u, x[3] ^ x[8], y[3] ^ y[8], zz, 11); + ImplMulwAcc(u, x[4] ^ x[7], y[4] ^ y[7], zz, 11); + ImplMulwAcc(u, x[5] ^ x[6], y[5] ^ y[6], zz, 11); + + ImplMulwAcc(u, x[4] ^ x[8], y[4] ^ y[8], zz, 12); + ImplMulwAcc(u, x[5] ^ x[7], y[5] ^ y[7], zz, 12); + + ImplMulwAcc(u, x[5] ^ x[8], y[5] ^ y[8], zz, 13); + ImplMulwAcc(u, x[6] ^ x[7], y[6] ^ y[7], zz, 13); + + ImplMulwAcc(u, x[6] ^ x[8], y[6] ^ y[8], zz, 14); + + ImplMulwAcc(u, x[7] ^ x[8], y[7] ^ y[8], zz, 15); + } + + protected static void ImplMultiplyPrecomp(ulong[] x, ulong[] precomp, ulong[] zz) + { +#if NETCOREAPP3_0_OR_GREATER + ImplMultiply(x, precomp, zz); +#else + uint MASK = 0xF; + + /* + * Lopez-Dahab algorithm + */ + + for (int k = 56; k >= 0; k -= 8) + { + for (int j = 1; j < 9; j += 2) + { + uint aVal = (uint)(x[j] >> k); + uint u = aVal & MASK; + uint v = (aVal >> 4) & MASK; + AddBothTo(precomp, (int)(9 * u), precomp, (int)(9 * (v + 16)), zz, j - 1); + } + Nat.ShiftUpBits64(16, zz, 0, 8, 0UL); + } + + for (int k = 56; k >= 0; k -= 8) + { + for (int j = 0; j < 9; j += 2) + { + uint aVal = (uint)(x[j] >> k); + uint u = aVal & MASK; + uint v = (aVal >> 4) & MASK; + AddBothTo(precomp, (int)(9 * u), precomp, (int)(9 * (v + 16)), zz, j); + } + if (k > 0) + { + Nat.ShiftUpBits64(18, zz, 0, 8, 0UL); + } + } +#endif + } + + protected static void ImplMulwAcc(ulong[] u, ulong x, ulong y, ulong[] z, int zOff) + { +#if NETCOREAPP3_0_OR_GREATER + if (Pclmulqdq.IsSupported) + { + var X = Vector128.CreateScalar(x); + var Y = Vector128.CreateScalar(y); + var Z = Pclmulqdq.CarrylessMultiply(X, Y, 0x00); + z[zOff ] ^= Z.GetElement(0); + z[zOff + 1] ^= Z.GetElement(1); + return; + } +#endif + + //u[0] = 0; + u[1] = y; + for (int i = 2; i < 16; i += 2) + { + u[i ] = u[i >> 1] << 1; + u[i + 1] = u[i ] ^ y; + } + + uint j = (uint)x; + ulong g, h = 0, l = u[j & 15] + ^ u[(j >> 4) & 15] << 4; + int k = 56; + do + { + j = (uint)(x >> k); + g = u[j & 15] + ^ u[(j >> 4) & 15] << 4; + l ^= (g << k); + h ^= (g >> -k); + } + while ((k -= 8) > 0); + + for (int p = 0; p < 7; ++p) + { + x = (x & 0xFEFEFEFEFEFEFEFEUL) >> 1; + h ^= x & (ulong)((long)(y << p) >> 63); + } + + Debug.Assert(h >> 63 == 0); + + z[zOff ] ^= l; + z[zOff + 1] ^= h; + } + + protected static void ImplSquare(ulong[] x, ulong[] zz) + { + Interleave.Expand64To128(x, 0, 9, zz, 0); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571Field.cs.meta new file mode 100644 index 000000000..66f61b6c6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5102c10449efb5a4a85657c5d25f39bc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571FieldElement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571FieldElement.cs new file mode 100644 index 000000000..b54787783 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571FieldElement.cs @@ -0,0 +1,237 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT571FieldElement + : AbstractF2mFieldElement + { + protected internal readonly ulong[] x; + + public SecT571FieldElement(BigInteger x) + { + if (x == null || x.SignValue < 0 || x.BitLength > 571) + throw new ArgumentException("value invalid for SecT571FieldElement", "x"); + + this.x = SecT571Field.FromBigInteger(x); + } + + public SecT571FieldElement() + { + this.x = Nat576.Create64(); + } + + protected internal SecT571FieldElement(ulong[] x) + { + this.x = x; + } + + public override bool IsOne + { + get { return Nat576.IsOne64(x); } + } + + public override bool IsZero + { + get { return Nat576.IsZero64(x); } + } + + public override bool TestBitZero() + { + return (x[0] & 1UL) != 0UL; + } + + public override BigInteger ToBigInteger() + { + return Nat576.ToBigInteger64(x); + } + + public override string FieldName + { + get { return "SecT571Field"; } + } + + public override int FieldSize + { + get { return 571; } + } + + public override ECFieldElement Add(ECFieldElement b) + { + ulong[] z = Nat576.Create64(); + SecT571Field.Add(x, ((SecT571FieldElement)b).x, z); + return new SecT571FieldElement(z); + } + + public override ECFieldElement AddOne() + { + ulong[] z = Nat576.Create64(); + SecT571Field.AddOne(x, z); + return new SecT571FieldElement(z); + } + + public override ECFieldElement Subtract(ECFieldElement b) + { + // Addition and subtraction are the same in F2m + return Add(b); + } + + public override ECFieldElement Multiply(ECFieldElement b) + { + ulong[] z = Nat576.Create64(); + SecT571Field.Multiply(x, ((SecT571FieldElement)b).x, z); + return new SecT571FieldElement(z); + } + + public override ECFieldElement MultiplyMinusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + return MultiplyPlusProduct(b, x, y); + } + + public override ECFieldElement MultiplyPlusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) + { + ulong[] ax = this.x, bx = ((SecT571FieldElement)b).x; + ulong[] xx = ((SecT571FieldElement)x).x, yx = ((SecT571FieldElement)y).x; + + ulong[] tt = Nat576.CreateExt64(); + SecT571Field.MultiplyAddToExt(ax, bx, tt); + SecT571Field.MultiplyAddToExt(xx, yx, tt); + + ulong[] z = Nat576.Create64(); + SecT571Field.Reduce(tt, z); + return new SecT571FieldElement(z); + } + + public override ECFieldElement Divide(ECFieldElement b) + { + return Multiply(b.Invert()); + } + + public override ECFieldElement Negate() + { + return this; + } + + public override ECFieldElement Square() + { + ulong[] z = Nat576.Create64(); + SecT571Field.Square(x, z); + return new SecT571FieldElement(z); + } + + public override ECFieldElement SquareMinusProduct(ECFieldElement x, ECFieldElement y) + { + return SquarePlusProduct(x, y); + } + + public override ECFieldElement SquarePlusProduct(ECFieldElement x, ECFieldElement y) + { + ulong[] ax = this.x; + ulong[] xx = ((SecT571FieldElement)x).x, yx = ((SecT571FieldElement)y).x; + + ulong[] tt = Nat576.CreateExt64(); + SecT571Field.SquareAddToExt(ax, tt); + SecT571Field.MultiplyAddToExt(xx, yx, tt); + + ulong[] z = Nat576.Create64(); + SecT571Field.Reduce(tt, z); + return new SecT571FieldElement(z); + } + + public override ECFieldElement SquarePow(int pow) + { + if (pow < 1) + return this; + + ulong[] z = Nat576.Create64(); + SecT571Field.SquareN(x, pow, z); + return new SecT571FieldElement(z); + } + + public override ECFieldElement HalfTrace() + { + ulong[] z = Nat576.Create64(); + SecT571Field.HalfTrace(x, z); + return new SecT571FieldElement(z); + } + + public override bool HasFastTrace + { + get { return true; } + } + + public override int Trace() + { + return (int)SecT571Field.Trace(x); + } + + public override ECFieldElement Invert() + { + ulong[] z = Nat576.Create64(); + SecT571Field.Invert(x, z); + return new SecT571FieldElement(z); + } + + public override ECFieldElement Sqrt() + { + ulong[] z = Nat576.Create64(); + SecT571Field.Sqrt(x, z); + return new SecT571FieldElement(z); + } + + public virtual int Representation + { + get { return F2mFieldElement.Ppb; } + } + + public virtual int M + { + get { return 571; } + } + + public virtual int K1 + { + get { return 2; } + } + + public virtual int K2 + { + get { return 5; } + } + + public virtual int K3 + { + get { return 10; } + } + + public override bool Equals(object obj) + { + return Equals(obj as SecT571FieldElement); + } + + public override bool Equals(ECFieldElement other) + { + return Equals(other as SecT571FieldElement); + } + + public virtual bool Equals(SecT571FieldElement other) + { + if (this == other) + return true; + if (null == other) + return false; + return Nat576.Eq64(x, other.x); + } + + public override int GetHashCode() + { + return 5711052 ^ Arrays.GetHashCode(x, 0, 9); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571FieldElement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571FieldElement.cs.meta new file mode 100644 index 000000000..5b8db2895 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571FieldElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d2a199651f1f154d8ed8d08c7f52f15 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571K1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571K1Curve.cs new file mode 100644 index 000000000..b3e504178 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571K1Curve.cs @@ -0,0 +1,187 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT571K1Curve + : AbstractF2mCurve + { + private const int SECT571K1_DEFAULT_COORDS = COORD_LAMBDA_PROJECTIVE; + private const int SECT571K1_FE_LONGS = 9; + private static readonly ECFieldElement[] SECT571K1_AFFINE_ZS = new ECFieldElement[] { new SecT571FieldElement(BigInteger.One) }; + + protected readonly SecT571K1Point m_infinity; + + public SecT571K1Curve() + : base(571, 2, 5, 10) + { + this.m_infinity = new SecT571K1Point(this, null, null); + + this.m_a = FromBigInteger(BigInteger.Zero); + this.m_b = FromBigInteger(BigInteger.One); + this.m_order = new BigInteger(1, Hex.DecodeStrict("020000000000000000000000000000000000000000000000000000000000000000000000131850E1F19A63E4B391A8DB917F4138B630D84BE5D639381E91DEB45CFE778F637C1001")); + this.m_cofactor = BigInteger.ValueOf(4); + + this.m_coord = SECT571K1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecT571K1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_LAMBDA_PROJECTIVE: + return true; + default: + return false; + } + } + + protected override ECMultiplier CreateDefaultMultiplier() + { + return new WTauNafMultiplier(); + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return 571; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecT571FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecT571K1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecT571K1Point(this, x, y, zs); + } + + public override bool IsKoblitz + { + get { return true; } + } + + public virtual int M + { + get { return 571; } + } + + public virtual bool IsTrinomial + { + get { return false; } + } + + public virtual int K1 + { + get { return 2; } + } + + public virtual int K2 + { + get { return 5; } + } + + public virtual int K3 + { + get { return 10; } + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + ulong[] table = new ulong[len * SECT571K1_FE_LONGS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat576.Copy64(((SecT571FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECT571K1_FE_LONGS; + Nat576.Copy64(((SecT571FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECT571K1_FE_LONGS; + } + } + + return new SecT571K1LookupTable(this, table, len); + } + + private class SecT571K1LookupTable + : AbstractECLookupTable + { + private readonly SecT571K1Curve m_outer; + private readonly ulong[] m_table; + private readonly int m_size; + + internal SecT571K1LookupTable(SecT571K1Curve outer, ulong[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + ulong[] x = Nat576.Create64(), y = Nat576.Create64(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECT571K1_FE_LONGS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECT571K1_FE_LONGS + j] & MASK; + } + + pos += (SECT571K1_FE_LONGS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + ulong[] x = Nat576.Create64(), y = Nat576.Create64(); + int pos = index * SECT571K1_FE_LONGS * 2; + + for (int j = 0; j < SECT571K1_FE_LONGS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECT571K1_FE_LONGS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(ulong[] x, ulong[] y) + { + return m_outer.CreateRawPoint(new SecT571FieldElement(x), new SecT571FieldElement(y), SECT571K1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571K1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571K1Curve.cs.meta new file mode 100644 index 000000000..0a8488429 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571K1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 376e118668ede6543b1a007c453d52a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571K1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571K1Point.cs new file mode 100644 index 000000000..842ad4a9a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571K1Point.cs @@ -0,0 +1,318 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT571K1Point + : AbstractF2mPoint + { + internal SecT571K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecT571K1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecT571K1Point(null, this.AffineXCoord, this.AffineYCoord); + } + + public override ECFieldElement YCoord + { + get + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + if (this.IsInfinity || X.IsZero) + return L; + + // Y is actually Lambda (X + Y/X) here; convert to affine value on the fly + ECFieldElement Y = L.Add(X).Multiply(X); + + ECFieldElement Z = RawZCoords[0]; + if (!Z.IsOne) + { + Y = Y.Divide(Z); + } + + return Y; + } + } + + protected internal override bool CompressionYTilde + { + get + { + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return false; + + ECFieldElement Y = this.RawYCoord; + + // Y is actually Lambda (X + Y/X) here + return Y.TestBitZero() != X.TestBitZero(); + } + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + SecT571FieldElement X1 = (SecT571FieldElement)this.RawXCoord; + SecT571FieldElement X2 = (SecT571FieldElement)b.RawXCoord; + + if (X1.IsZero) + { + if (X2.IsZero) + return curve.Infinity; + + return b.Add(this); + } + + SecT571FieldElement L1 = (SecT571FieldElement)this.RawYCoord, Z1 = (SecT571FieldElement)this.RawZCoords[0]; + SecT571FieldElement L2 = (SecT571FieldElement)b.RawYCoord, Z2 = (SecT571FieldElement)b.RawZCoords[0]; + + ulong[] t1 = Nat576.Create64(); + ulong[] t2 = Nat576.Create64(); + ulong[] t3 = Nat576.Create64(); + ulong[] t4 = Nat576.Create64(); + + ulong[] Z1Precomp = Z1.IsOne ? null : SecT571Field.PrecompMultiplicand(Z1.x); + ulong[] U2, S2; + if (Z1Precomp == null) + { + U2 = X2.x; + S2 = L2.x; + } + else + { + SecT571Field.MultiplyPrecomp(X2.x, Z1Precomp, U2 = t2); + SecT571Field.MultiplyPrecomp(L2.x, Z1Precomp, S2 = t4); + } + + ulong[] Z2Precomp = Z2.IsOne ? null : SecT571Field.PrecompMultiplicand(Z2.x); + ulong[] U1, S1; + if (Z2Precomp == null) + { + U1 = X1.x; + S1 = L1.x; + } + else + { + SecT571Field.MultiplyPrecomp(X1.x, Z2Precomp, U1 = t1); + SecT571Field.MultiplyPrecomp(L1.x, Z2Precomp, S1 = t3); + } + + ulong[] A = t3; + SecT571Field.Add(S1, S2, A); + + ulong[] B = t4; + SecT571Field.Add(U1, U2, B); + + if (Nat576.IsZero64(B)) + { + if (Nat576.IsZero64(A)) + return Twice(); + + return curve.Infinity; + } + + SecT571FieldElement X3, L3, Z3; + if (X2.IsZero) + { + // TODO This can probably be optimized quite a bit + ECPoint p = this.Normalize(); + X1 = (SecT571FieldElement)p.XCoord; + ECFieldElement Y1 = p.YCoord; + + ECFieldElement Y2 = L2; + ECFieldElement L = Y1.Add(Y2).Divide(X1); + + X3 = (SecT571FieldElement)L.Square().Add(L).Add(X1); + if (X3.IsZero) + { + return new SecT571K1Point(curve, X3, curve.B); + } + + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + L3 = (SecT571FieldElement)Y3.Divide(X3).Add(X3); + Z3 = (SecT571FieldElement)curve.FromBigInteger(BigInteger.One); + } + else + { + SecT571Field.Square(B, B); + + ulong[] APrecomp = SecT571Field.PrecompMultiplicand(A); + + ulong[] AU1 = t1; + ulong[] AU2 = t2; + + SecT571Field.MultiplyPrecomp(U1, APrecomp, AU1); + SecT571Field.MultiplyPrecomp(U2, APrecomp, AU2); + + X3 = new SecT571FieldElement(t1); + SecT571Field.Multiply(AU1, AU2, X3.x); + + if (X3.IsZero) + { + return new SecT571K1Point(curve, X3, curve.B); + } + + Z3 = new SecT571FieldElement(t3); + SecT571Field.MultiplyPrecomp(B, APrecomp, Z3.x); + + if (Z2Precomp != null) + { + SecT571Field.MultiplyPrecomp(Z3.x, Z2Precomp, Z3.x); + } + + //L3 = AU2.Add(B).SquarePlusProduct(ABZ2, L1.Add(Z1)); + ulong[] tt = Nat576.CreateExt64(); + + SecT571Field.Add(AU2, B, t4); + SecT571Field.SquareAddToExt(t4, tt); + + SecT571Field.Add(L1.x, Z1.x, t4); + SecT571Field.MultiplyAddToExt(t4, Z3.x, tt); + + L3 = new SecT571FieldElement(t4); + SecT571Field.Reduce(tt, L3.x); + + if (Z1Precomp != null) + { + SecT571Field.MultiplyPrecomp(Z3.x, Z1Precomp, Z3.x); + } + } + + return new SecT571K1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return curve.Infinity; + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + + bool Z1IsOne = Z1.IsOne; + ECFieldElement Z1Sq = Z1IsOne ? Z1 : Z1.Square(); + ECFieldElement T; + if (Z1IsOne) + { + T = L1.Square().Add(L1); + } + else + { + T = L1.Add(Z1).Multiply(L1); + } + + if (T.IsZero) + { + return new SecT571K1Point(curve, T, curve.B); + } + + ECFieldElement X3 = T.Square(); + ECFieldElement Z3 = Z1IsOne ? T : T.Multiply(Z1Sq); + + ECFieldElement t1 = L1.Add(X1).Square(); + ECFieldElement t2 = Z1IsOne ? Z1 : Z1Sq.Square(); + ECFieldElement L3 = t1.Add(T).Add(Z1Sq).Multiply(t1).Add(t2).Add(X3).Add(Z3); + + return new SecT571K1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return b; + } + + // NOTE: TwicePlus() only optimized for lambda-affine argument + ECFieldElement X2 = b.RawXCoord, Z2 = b.RawZCoords[0]; + if (X2.IsZero || !Z2.IsOne) + { + return Twice().Add(b); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord; + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement L1Sq = L1.Square(); + ECFieldElement Z1Sq = Z1.Square(); + ECFieldElement L1Z1 = L1.Multiply(Z1); + + ECFieldElement T = L1Sq.Add(L1Z1); + ECFieldElement L2plus1 = L2.AddOne(); + ECFieldElement A = L2plus1.Multiply(Z1Sq).Add(L1Sq).MultiplyPlusProduct(T, X1Sq, Z1Sq); + ECFieldElement X2Z1Sq = X2.Multiply(Z1Sq); + ECFieldElement B = X2Z1Sq.Add(T).Square(); + + if (B.IsZero) + { + if (A.IsZero) + return b.Twice(); + + return curve.Infinity; + } + + if (A.IsZero) + { + return new SecT571K1Point(curve, A, curve.B); + } + + ECFieldElement X3 = A.Square().Multiply(X2Z1Sq); + ECFieldElement Z3 = A.Multiply(B).Multiply(Z1Sq); + ECFieldElement L3 = A.Add(B).Square().MultiplyPlusProduct(T, L2plus1, Z3); + + return new SecT571K1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Negate() + { + if (this.IsInfinity) + return this; + + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return this; + + // L is actually Lambda (X + Y/X) here + ECFieldElement L = this.RawYCoord, Z = this.RawZCoords[0]; + return new SecT571K1Point(Curve, X, L.Add(Z), new ECFieldElement[] { Z }); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571K1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571K1Point.cs.meta new file mode 100644 index 000000000..835f77b92 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571K1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fa7660666cc38b449992eb301ca16b69 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571R1Curve.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571R1Curve.cs new file mode 100644 index 000000000..7600c98bc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571R1Curve.cs @@ -0,0 +1,185 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT571R1Curve + : AbstractF2mCurve + { + private const int SECT571R1_DEFAULT_COORDS = COORD_LAMBDA_PROJECTIVE; + private const int SECT571R1_FE_LONGS = 9; + private static readonly ECFieldElement[] SECT571R1_AFFINE_ZS = new ECFieldElement[] { new SecT571FieldElement(BigInteger.One) }; + + protected readonly SecT571R1Point m_infinity; + + internal static readonly SecT571FieldElement SecT571R1_B = new SecT571FieldElement( + new BigInteger(1, Hex.DecodeStrict("02F40E7E2221F295DE297117B7F3D62F5C6A97FFCB8CEFF1CD6BA8CE4A9A18AD84FFABBD8EFA59332BE7AD6756A66E294AFD185A78FF12AA520E4DE739BACA0C7FFEFF7F2955727A"))); + internal static readonly SecT571FieldElement SecT571R1_B_SQRT = (SecT571FieldElement)SecT571R1_B.Sqrt(); + + public SecT571R1Curve() + : base(571, 2, 5, 10) + { + this.m_infinity = new SecT571R1Point(this, null, null); + + this.m_a = FromBigInteger(BigInteger.One); + this.m_b = SecT571R1_B; + this.m_order = new BigInteger(1, Hex.DecodeStrict("03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE661CE18FF55987308059B186823851EC7DD9CA1161DE93D5174D66E8382E9BB2FE84E47")); + this.m_cofactor = BigInteger.Two; + + this.m_coord = SECT571R1_DEFAULT_COORDS; + } + + protected override ECCurve CloneCurve() + { + return new SecT571R1Curve(); + } + + public override bool SupportsCoordinateSystem(int coord) + { + switch (coord) + { + case COORD_LAMBDA_PROJECTIVE: + return true; + default: + return false; + } + } + + public override ECPoint Infinity + { + get { return m_infinity; } + } + + public override int FieldSize + { + get { return 571; } + } + + public override ECFieldElement FromBigInteger(BigInteger x) + { + return new SecT571FieldElement(x); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y) + { + return new SecT571R1Point(this, x, y); + } + + protected internal override ECPoint CreateRawPoint(ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + { + return new SecT571R1Point(this, x, y, zs); + } + + public override bool IsKoblitz + { + get { return false; } + } + + public virtual int M + { + get { return 571; } + } + + public virtual bool IsTrinomial + { + get { return false; } + } + + public virtual int K1 + { + get { return 2; } + } + + public virtual int K2 + { + get { return 5; } + } + + public virtual int K3 + { + get { return 10; } + } + + public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) + { + ulong[] table = new ulong[len * SECT571R1_FE_LONGS * 2]; + { + int pos = 0; + for (int i = 0; i < len; ++i) + { + ECPoint p = points[off + i]; + Nat576.Copy64(((SecT571FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECT571R1_FE_LONGS; + Nat576.Copy64(((SecT571FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECT571R1_FE_LONGS; + } + } + + return new SecT571R1LookupTable(this, table, len); + } + + private class SecT571R1LookupTable + : AbstractECLookupTable + { + private readonly SecT571R1Curve m_outer; + private readonly ulong[] m_table; + private readonly int m_size; + + internal SecT571R1LookupTable(SecT571R1Curve outer, ulong[] table, int size) + { + this.m_outer = outer; + this.m_table = table; + this.m_size = size; + } + + public override int Size + { + get { return m_size; } + } + + public override ECPoint Lookup(int index) + { + ulong[] x = Nat576.Create64(), y = Nat576.Create64(); + int pos = 0; + + for (int i = 0; i < m_size; ++i) + { + ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31); + + for (int j = 0; j < SECT571R1_FE_LONGS; ++j) + { + x[j] ^= m_table[pos + j] & MASK; + y[j] ^= m_table[pos + SECT571R1_FE_LONGS + j] & MASK; + } + + pos += (SECT571R1_FE_LONGS * 2); + } + + return CreatePoint(x, y); + } + + public override ECPoint LookupVar(int index) + { + ulong[] x = Nat576.Create64(), y = Nat576.Create64(); + int pos = index * SECT571R1_FE_LONGS * 2; + + for (int j = 0; j < SECT571R1_FE_LONGS; ++j) + { + x[j] = m_table[pos + j]; + y[j] = m_table[pos + SECT571R1_FE_LONGS + j]; + } + + return CreatePoint(x, y); + } + + private ECPoint CreatePoint(ulong[] x, ulong[] y) + { + return m_outer.CreateRawPoint(new SecT571FieldElement(x), new SecT571FieldElement(y), SECT571R1_AFFINE_ZS); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571R1Curve.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571R1Curve.cs.meta new file mode 100644 index 000000000..90f92d389 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571R1Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 287691cba348f94419cbfe05b04d46f5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571R1Point.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571R1Point.cs new file mode 100644 index 000000000..95eb0e34d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571R1Point.cs @@ -0,0 +1,343 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Custom.Sec +{ + internal class SecT571R1Point + : AbstractF2mPoint + { + internal SecT571R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y) + : base(curve, x, y) + { + } + + internal SecT571R1Point(ECCurve curve, ECFieldElement x, ECFieldElement y, ECFieldElement[] zs) + : base(curve, x, y, zs) + { + } + + protected override ECPoint Detach() + { + return new SecT571R1Point(null, AffineXCoord, AffineYCoord); + } + + public override ECFieldElement YCoord + { + get + { + ECFieldElement X = RawXCoord, L = RawYCoord; + + if (this.IsInfinity || X.IsZero) + return L; + + // Y is actually Lambda (X + Y/X) here; convert to affine value on the fly + ECFieldElement Y = L.Add(X).Multiply(X); + + ECFieldElement Z = RawZCoords[0]; + if (!Z.IsOne) + { + Y = Y.Divide(Z); + } + + return Y; + } + } + + protected internal override bool CompressionYTilde + { + get + { + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return false; + + ECFieldElement Y = this.RawYCoord; + + // Y is actually Lambda (X + Y/X) here + return Y.TestBitZero() != X.TestBitZero(); + } + } + + public override ECPoint Add(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + SecT571FieldElement X1 = (SecT571FieldElement)this.RawXCoord; + SecT571FieldElement X2 = (SecT571FieldElement)b.RawXCoord; + + if (X1.IsZero) + { + if (X2.IsZero) + return curve.Infinity; + + return b.Add(this); + } + + SecT571FieldElement L1 = (SecT571FieldElement)this.RawYCoord, Z1 = (SecT571FieldElement)this.RawZCoords[0]; + SecT571FieldElement L2 = (SecT571FieldElement)b.RawYCoord, Z2 = (SecT571FieldElement)b.RawZCoords[0]; + + ulong[] t1 = Nat576.Create64(); + ulong[] t2 = Nat576.Create64(); + ulong[] t3 = Nat576.Create64(); + ulong[] t4 = Nat576.Create64(); + + ulong[] Z1Precomp = Z1.IsOne ? null : SecT571Field.PrecompMultiplicand(Z1.x); + ulong[] U2, S2; + if (Z1Precomp == null) + { + U2 = X2.x; + S2 = L2.x; + } + else + { + SecT571Field.MultiplyPrecomp(X2.x, Z1Precomp, U2 = t2); + SecT571Field.MultiplyPrecomp(L2.x, Z1Precomp, S2 = t4); + } + + ulong[] Z2Precomp = Z2.IsOne ? null : SecT571Field.PrecompMultiplicand(Z2.x); + ulong[] U1, S1; + if (Z2Precomp == null) + { + U1 = X1.x; + S1 = L1.x; + } + else + { + SecT571Field.MultiplyPrecomp(X1.x, Z2Precomp, U1 = t1); + SecT571Field.MultiplyPrecomp(L1.x, Z2Precomp, S1 = t3); + } + + ulong[] A = t3; + SecT571Field.Add(S1, S2, A); + + ulong[] B = t4; + SecT571Field.Add(U1, U2, B); + + if (Nat576.IsZero64(B)) + { + if (Nat576.IsZero64(A)) + return Twice(); + + return curve.Infinity; + } + + SecT571FieldElement X3, L3, Z3; + if (X2.IsZero) + { + // TODO This can probably be optimized quite a bit + ECPoint p = this.Normalize(); + X1 = (SecT571FieldElement)p.XCoord; + ECFieldElement Y1 = p.YCoord; + + ECFieldElement Y2 = L2; + ECFieldElement L = Y1.Add(Y2).Divide(X1); + + X3 = (SecT571FieldElement)L.Square().Add(L).Add(X1).AddOne(); + if (X3.IsZero) + { + return new SecT571R1Point(curve, X3, SecT571R1Curve.SecT571R1_B_SQRT); + } + + ECFieldElement Y3 = L.Multiply(X1.Add(X3)).Add(X3).Add(Y1); + L3 = (SecT571FieldElement)Y3.Divide(X3).Add(X3); + Z3 = (SecT571FieldElement)curve.FromBigInteger(BigInteger.One); + } + else + { + SecT571Field.Square(B, B); + + ulong[] APrecomp = SecT571Field.PrecompMultiplicand(A); + + ulong[] AU1 = t1; + ulong[] AU2 = t2; + + SecT571Field.MultiplyPrecomp(U1, APrecomp, AU1); + SecT571Field.MultiplyPrecomp(U2, APrecomp, AU2); + + X3 = new SecT571FieldElement(t1); + SecT571Field.Multiply(AU1, AU2, X3.x); + + if (X3.IsZero) + { + return new SecT571R1Point(curve, X3, SecT571R1Curve.SecT571R1_B_SQRT); + } + + Z3 = new SecT571FieldElement(t3); + SecT571Field.MultiplyPrecomp(B, APrecomp, Z3.x); + + if (Z2Precomp != null) + { + SecT571Field.MultiplyPrecomp(Z3.x, Z2Precomp, Z3.x); + } + + ulong[] tt = Nat576.CreateExt64(); + + SecT571Field.Add(AU2, B, t4); + SecT571Field.SquareAddToExt(t4, tt); + + SecT571Field.Add(L1.x, Z1.x, t4); + SecT571Field.MultiplyAddToExt(t4, Z3.x, tt); + + L3 = new SecT571FieldElement(t4); + SecT571Field.Reduce(tt, L3.x); + + if (Z1Precomp != null) + { + SecT571Field.MultiplyPrecomp(Z3.x, Z1Precomp, Z3.x); + } + } + + return new SecT571R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Twice() + { + if (this.IsInfinity) + return this; + + ECCurve curve = this.Curve; + + SecT571FieldElement X1 = (SecT571FieldElement)this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return curve.Infinity; + } + + SecT571FieldElement L1 = (SecT571FieldElement)this.RawYCoord, Z1 = (SecT571FieldElement)this.RawZCoords[0]; + + ulong[] t1 = Nat576.Create64(); + ulong[] t2 = Nat576.Create64(); + + ulong[] Z1Precomp = Z1.IsOne ? null : SecT571Field.PrecompMultiplicand(Z1.x); + ulong[] L1Z1, Z1Sq; + if (Z1Precomp == null) + { + L1Z1 = L1.x; + Z1Sq = Z1.x; + } + else + { + SecT571Field.MultiplyPrecomp(L1.x, Z1Precomp, L1Z1 = t1); + SecT571Field.Square(Z1.x, Z1Sq = t2); + } + + ulong[] T = Nat576.Create64(); + SecT571Field.Square(L1.x, T); + SecT571Field.AddBothTo(L1Z1, Z1Sq, T); + + if (Nat576.IsZero64(T)) + { + return new SecT571R1Point(curve, new SecT571FieldElement(T), SecT571R1Curve.SecT571R1_B_SQRT); + } + + ulong[] tt = Nat576.CreateExt64(); + SecT571Field.MultiplyAddToExt(T, L1Z1, tt); + + SecT571FieldElement X3 = new SecT571FieldElement(t1); + SecT571Field.Square(T, X3.x); + + SecT571FieldElement Z3 = new SecT571FieldElement(T); + if (Z1Precomp != null) + { + SecT571Field.Multiply(Z3.x, Z1Sq, Z3.x); + } + + ulong[] X1Z1; + if (Z1Precomp == null) + { + X1Z1 = X1.x; + } + else + { + SecT571Field.MultiplyPrecomp(X1.x, Z1Precomp, X1Z1 = t2); + } + + SecT571Field.SquareAddToExt(X1Z1, tt); + SecT571Field.Reduce(tt, t2); + SecT571Field.AddBothTo(X3.x, Z3.x, t2); + SecT571FieldElement L3 = new SecT571FieldElement(t2); + + return new SecT571R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint TwicePlus(ECPoint b) + { + if (this.IsInfinity) + return b; + if (b.IsInfinity) + return Twice(); + + ECCurve curve = this.Curve; + + ECFieldElement X1 = this.RawXCoord; + if (X1.IsZero) + { + // A point with X == 0 is its own additive inverse + return b; + } + + ECFieldElement X2 = b.RawXCoord, Z2 = b.RawZCoords[0]; + if (X2.IsZero || !Z2.IsOne) + { + return Twice().Add(b); + } + + ECFieldElement L1 = this.RawYCoord, Z1 = this.RawZCoords[0]; + ECFieldElement L2 = b.RawYCoord; + + ECFieldElement X1Sq = X1.Square(); + ECFieldElement L1Sq = L1.Square(); + ECFieldElement Z1Sq = Z1.Square(); + ECFieldElement L1Z1 = L1.Multiply(Z1); + + ECFieldElement T = Z1Sq.Add(L1Sq).Add(L1Z1); + ECFieldElement A = L2.Multiply(Z1Sq).Add(L1Sq).MultiplyPlusProduct(T, X1Sq, Z1Sq); + ECFieldElement X2Z1Sq = X2.Multiply(Z1Sq); + ECFieldElement B = X2Z1Sq.Add(T).Square(); + + if (B.IsZero) + { + if (A.IsZero) + return b.Twice(); + + return curve.Infinity; + } + + if (A.IsZero) + { + return new SecT571R1Point(curve, A, SecT571R1Curve.SecT571R1_B_SQRT); + } + + ECFieldElement X3 = A.Square().Multiply(X2Z1Sq); + ECFieldElement Z3 = A.Multiply(B).Multiply(Z1Sq); + ECFieldElement L3 = A.Add(B).Square().MultiplyPlusProduct(T, L2.AddOne(), Z3); + + return new SecT571R1Point(curve, X3, L3, new ECFieldElement[] { Z3 }); + } + + public override ECPoint Negate() + { + if (this.IsInfinity) + return this; + + ECFieldElement X = this.RawXCoord; + if (X.IsZero) + return this; + + // L is actually Lambda (X + Y/X) here + ECFieldElement L = this.RawYCoord, Z = this.RawZCoords[0]; + return new SecT571R1Point(Curve, X, L.Add(Z), new ECFieldElement[] { Z }); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571R1Point.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571R1Point.cs.meta new file mode 100644 index 000000000..3b54b1c35 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/custom/sec/SecT571R1Point.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a4d049a4596e1c44199a6558ef1880ab +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo.meta new file mode 100644 index 000000000..133a2db25 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ea3bf8e1c91bc00418e4ba58fef48e8d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/ECEndomorphism.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/ECEndomorphism.cs new file mode 100644 index 000000000..c3815ed1d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/ECEndomorphism.cs @@ -0,0 +1,15 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Endo +{ + public interface ECEndomorphism + { + ECPointMap PointMap { get; } + + bool HasEfficientPointMap { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/ECEndomorphism.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/ECEndomorphism.cs.meta new file mode 100644 index 000000000..63d280196 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/ECEndomorphism.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3e5470dddbaf9448addcb073ff9da26 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/EndoPreCompInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/EndoPreCompInfo.cs new file mode 100644 index 000000000..945cdb34b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/EndoPreCompInfo.cs @@ -0,0 +1,30 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Endo +{ + public class EndoPreCompInfo + : PreCompInfo + { + protected ECEndomorphism m_endomorphism; + + protected ECPoint m_mappedPoint; + + public virtual ECEndomorphism Endomorphism + { + get { return m_endomorphism; } + set { this.m_endomorphism = value; } + } + + public virtual ECPoint MappedPoint + { + get { return m_mappedPoint; } + set { this.m_mappedPoint = value; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/EndoPreCompInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/EndoPreCompInfo.cs.meta new file mode 100644 index 000000000..8b1155e38 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/EndoPreCompInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fd03e560110505e4881f8b64cc837402 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/EndoUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/EndoUtilities.cs new file mode 100644 index 000000000..e82682f18 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/EndoUtilities.cs @@ -0,0 +1,83 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Endo +{ + public abstract class EndoUtilities + { + public static readonly string PRECOMP_NAME = "bc_endo"; + + public static BigInteger[] DecomposeScalar(ScalarSplitParameters p, BigInteger k) + { + int bits = p.Bits; + BigInteger b1 = CalculateB(k, p.G1, bits); + BigInteger b2 = CalculateB(k, p.G2, bits); + + BigInteger a = k.Subtract((b1.Multiply(p.V1A)).Add(b2.Multiply(p.V2A))); + BigInteger b = (b1.Multiply(p.V1B)).Add(b2.Multiply(p.V2B)).Negate(); + + return new BigInteger[]{ a, b }; + } + + public static ECPoint MapPoint(ECEndomorphism endomorphism, ECPoint p) + { + EndoPreCompInfo precomp = (EndoPreCompInfo)p.Curve.Precompute(p, PRECOMP_NAME, + new MapPointCallback(endomorphism, p)); + return precomp.MappedPoint; + } + + private static BigInteger CalculateB(BigInteger k, BigInteger g, int t) + { + bool negative = (g.SignValue < 0); + BigInteger b = k.Multiply(g.Abs()); + bool extra = b.TestBit(t - 1); + b = b.ShiftRight(t); + if (extra) + { + b = b.Add(BigInteger.One); + } + return negative ? b.Negate() : b; + } + + private class MapPointCallback + : IPreCompCallback + { + private readonly ECEndomorphism m_endomorphism; + private readonly ECPoint m_point; + + internal MapPointCallback(ECEndomorphism endomorphism, ECPoint point) + { + this.m_endomorphism = endomorphism; + this.m_point = point; + } + + public PreCompInfo Precompute(PreCompInfo existing) + { + EndoPreCompInfo existingEndo = existing as EndoPreCompInfo; + + if (CheckExisting(existingEndo, m_endomorphism)) + return existingEndo; + + ECPoint mappedPoint = m_endomorphism.PointMap.Map(m_point); + + EndoPreCompInfo result = new EndoPreCompInfo(); + result.Endomorphism = m_endomorphism; + result.MappedPoint = mappedPoint; + return result; + } + + private bool CheckExisting(EndoPreCompInfo existingEndo, ECEndomorphism endomorphism) + { + return null != existingEndo + && existingEndo.Endomorphism == endomorphism + && existingEndo.MappedPoint != null; + } + + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/EndoUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/EndoUtilities.cs.meta new file mode 100644 index 000000000..f775bb93a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/EndoUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 92b691b0d8c7e0f46911ffbd78089d0c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvEndomorphism.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvEndomorphism.cs new file mode 100644 index 000000000..078bbe072 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvEndomorphism.cs @@ -0,0 +1,14 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Endo +{ + public interface GlvEndomorphism + : ECEndomorphism + { + BigInteger[] DecomposeScalar(BigInteger k); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvEndomorphism.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvEndomorphism.cs.meta new file mode 100644 index 000000000..2c4040797 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvEndomorphism.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ef17475fe8bc0ff46ac3012a1bc5a09a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeAEndomorphism.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeAEndomorphism.cs new file mode 100644 index 000000000..7aee3e015 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeAEndomorphism.cs @@ -0,0 +1,42 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Endo +{ + public class GlvTypeAEndomorphism + : GlvEndomorphism + { + protected readonly GlvTypeAParameters m_parameters; + protected readonly ECPointMap m_pointMap; + + public GlvTypeAEndomorphism(ECCurve curve, GlvTypeAParameters parameters) + { + /* + * NOTE: 'curve' MUST only be used to create a suitable ECFieldElement. Due to the way + * ECCurve configuration works, 'curve' will not be the actual instance of ECCurve that the + * endomorphism is being used with. + */ + + this.m_parameters = parameters; + this.m_pointMap = new ScaleYNegateXPointMap(curve.FromBigInteger(parameters.I)); + } + + public virtual BigInteger[] DecomposeScalar(BigInteger k) + { + return EndoUtilities.DecomposeScalar(m_parameters.SplitParams, k); + } + + public virtual ECPointMap PointMap + { + get { return m_pointMap; } + } + + public virtual bool HasEfficientPointMap + { + get { return true; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeAEndomorphism.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeAEndomorphism.cs.meta new file mode 100644 index 000000000..f3e5e157d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeAEndomorphism.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce05e2e0fa25d6743b75f7f0bed3796d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeAParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeAParameters.cs new file mode 100644 index 000000000..9cb94cc93 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeAParameters.cs @@ -0,0 +1,36 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Endo +{ + public class GlvTypeAParameters + { + protected readonly BigInteger m_i, m_lambda; + protected readonly ScalarSplitParameters m_splitParams; + + public GlvTypeAParameters(BigInteger i, BigInteger lambda, ScalarSplitParameters splitParams) + { + this.m_i = i; + this.m_lambda = lambda; + this.m_splitParams = splitParams; + } + + public virtual BigInteger I + { + get { return m_i; } + } + + public virtual BigInteger Lambda + { + get { return m_lambda; } + } + + public virtual ScalarSplitParameters SplitParams + { + get { return m_splitParams; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeAParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeAParameters.cs.meta new file mode 100644 index 000000000..612d90a87 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeAParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38e3c58c48c481547b9d12e24415610e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeBEndomorphism.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeBEndomorphism.cs new file mode 100644 index 000000000..4644d2d24 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeBEndomorphism.cs @@ -0,0 +1,42 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Endo +{ + public class GlvTypeBEndomorphism + : GlvEndomorphism + { + protected readonly GlvTypeBParameters m_parameters; + protected readonly ECPointMap m_pointMap; + + public GlvTypeBEndomorphism(ECCurve curve, GlvTypeBParameters parameters) + { + /* + * NOTE: 'curve' MUST only be used to create a suitable ECFieldElement. Due to the way + * ECCurve configuration works, 'curve' will not be the actual instance of ECCurve that the + * endomorphism is being used with. + */ + + this.m_parameters = parameters; + this.m_pointMap = new ScaleXPointMap(curve.FromBigInteger(parameters.Beta)); + } + + public virtual BigInteger[] DecomposeScalar(BigInteger k) + { + return EndoUtilities.DecomposeScalar(m_parameters.SplitParams, k); + } + + public virtual ECPointMap PointMap + { + get { return m_pointMap; } + } + + public virtual bool HasEfficientPointMap + { + get { return true; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeBEndomorphism.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeBEndomorphism.cs.meta new file mode 100644 index 000000000..5e4ccf81c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeBEndomorphism.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d704deeea20becd4daf099cc997710ff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeBParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeBParameters.cs new file mode 100644 index 000000000..ddcaad98f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeBParameters.cs @@ -0,0 +1,36 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Endo +{ + public class GlvTypeBParameters + { + protected readonly BigInteger m_beta, m_lambda; + protected readonly ScalarSplitParameters m_splitParams; + + public GlvTypeBParameters(BigInteger beta, BigInteger lambda, ScalarSplitParameters splitParams) + { + this.m_beta = beta; + this.m_lambda = lambda; + this.m_splitParams = splitParams; + } + + public virtual BigInteger Beta + { + get { return m_beta; } + } + + public virtual BigInteger Lambda + { + get { return m_lambda; } + } + + public virtual ScalarSplitParameters SplitParams + { + get { return m_splitParams; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeBParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeBParameters.cs.meta new file mode 100644 index 000000000..1d3d83a4a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/GlvTypeBParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43a554c9ef493c94592277d57233a060 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/ScalarSplitParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/ScalarSplitParameters.cs new file mode 100644 index 000000000..72ab7b9e2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/ScalarSplitParameters.cs @@ -0,0 +1,73 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Endo +{ + public class ScalarSplitParameters + { + private static void CheckVector(BigInteger[] v, string name) + { + if (v == null || v.Length != 2 || v[0] == null || v[1] == null) + throw new ArgumentException("Must consist of exactly 2 (non-null) values", name); + } + + protected readonly BigInteger m_v1A, m_v1B, m_v2A, m_v2B; + protected readonly BigInteger m_g1, m_g2; + protected readonly int m_bits; + + public ScalarSplitParameters(BigInteger[] v1, BigInteger[] v2, BigInteger g1, + BigInteger g2, int bits) + { + CheckVector(v1, "v1"); + CheckVector(v2, "v2"); + + this.m_v1A = v1[0]; + this.m_v1B = v1[1]; + this.m_v2A = v2[0]; + this.m_v2B = v2[1]; + this.m_g1 = g1; + this.m_g2 = g2; + this.m_bits = bits; + } + + public virtual BigInteger V1A + { + get { return m_v1A; } + } + + public virtual BigInteger V1B + { + get { return m_v1B; } + } + + public virtual BigInteger V2A + { + get { return m_v2A; } + } + + public virtual BigInteger V2B + { + get { return m_v2B; } + } + + public virtual BigInteger G1 + { + get { return m_g1; } + } + + public virtual BigInteger G2 + { + get { return m_g2; } + } + + public virtual int Bits + { + get { return m_bits; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/ScalarSplitParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/ScalarSplitParameters.cs.meta new file mode 100644 index 000000000..f4e355e0c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/endo/ScalarSplitParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 40eb35acb717edc4ebbaf6867195347e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier.meta new file mode 100644 index 000000000..20d742f1a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a53de973421193c4cbf33dbbaec90811 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/AbstractECMultiplier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/AbstractECMultiplier.cs new file mode 100644 index 000000000..bbea5d8d2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/AbstractECMultiplier.cs @@ -0,0 +1,33 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier +{ + public abstract class AbstractECMultiplier + : ECMultiplier + { + public virtual ECPoint Multiply(ECPoint p, BigInteger k) + { + int sign = k.SignValue; + if (sign == 0 || p.IsInfinity) + return p.Curve.Infinity; + + ECPoint positive = MultiplyPositive(p, k.Abs()); + ECPoint result = sign > 0 ? positive : positive.Negate(); + + /* + * Although the various multipliers ought not to produce invalid output under normal + * circumstances, a final check here is advised to guard against fault attacks. + */ + return CheckResult(result); + } + + protected abstract ECPoint MultiplyPositive(ECPoint p, BigInteger k); + + protected virtual ECPoint CheckResult(ECPoint p) + { + return ECAlgorithms.ImplCheckResult(p); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/AbstractECMultiplier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/AbstractECMultiplier.cs.meta new file mode 100644 index 000000000..7b441198b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/AbstractECMultiplier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b90b097e4fcebb64a9055665b2062092 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/ECMultiplier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/ECMultiplier.cs new file mode 100644 index 000000000..67f579bde --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/ECMultiplier.cs @@ -0,0 +1,22 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier +{ + /** + * Interface for classes encapsulating a point multiplication algorithm + * for ECPoints. + */ + public interface ECMultiplier + { + /** + * Multiplies the ECPoint p by k, i.e. + * p is added k times to itself. + * @param p The ECPoint to be multiplied. + * @param k The factor by which p is multiplied. + * @return p multiplied by k. + */ + ECPoint Multiply(ECPoint p, BigInteger k); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/ECMultiplier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/ECMultiplier.cs.meta new file mode 100644 index 000000000..43516e743 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/ECMultiplier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0af0eecaaa213474cb001933d00e041e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/FixedPointCombMultiplier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/FixedPointCombMultiplier.cs new file mode 100644 index 000000000..d999eae2d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/FixedPointCombMultiplier.cs @@ -0,0 +1,69 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier +{ + public class FixedPointCombMultiplier + : AbstractECMultiplier + { + protected override ECPoint MultiplyPositive(ECPoint p, BigInteger k) + { + ECCurve c = p.Curve; + int size = FixedPointUtilities.GetCombSize(c); + + if (k.BitLength > size) + { + /* + * TODO The comb works best when the scalars are less than the (possibly unknown) order. + * Still, if we want to handle larger scalars, we could allow customization of the comb + * size, or alternatively we could deal with the 'extra' bits either by running the comb + * multiple times as necessary, or by using an alternative multiplier as prelude. + */ + throw new InvalidOperationException("fixed-point comb doesn't support scalars larger than the curve order"); + } + + FixedPointPreCompInfo info = FixedPointUtilities.Precompute(p); + ECLookupTable lookupTable = info.LookupTable; + int width = info.Width; + + int d = (size + width - 1) / width; + int fullComb = d * width; + + ECPoint R = c.Infinity; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int KLen = Nat.GetLengthForBits(fullComb); + Span K = KLen <= 32 + ? stackalloc uint[KLen] + : new uint[KLen]; + Nat.FromBigInteger(fullComb, k, K); +#else + uint[] K = Nat.FromBigInteger(fullComb, k); +#endif + + for (int i = 1; i <= d; ++i) + { + uint secretIndex = 0; + + for (int j = fullComb - i; j >= 0; j -= d) + { + uint secretBit = K[j >> 5] >> (j & 0x1F); + secretIndex ^= secretBit >> 1; + secretIndex <<= 1; + secretIndex ^= secretBit; + } + + ECPoint add = lookupTable.Lookup((int)secretIndex); + + R = R.TwicePlus(add); + } + + return R.Add(info.Offset); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/FixedPointCombMultiplier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/FixedPointCombMultiplier.cs.meta new file mode 100644 index 000000000..c38865f67 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/FixedPointCombMultiplier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 063e8c85432309347a8cee70efde8e72 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/FixedPointPreCompInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/FixedPointPreCompInfo.cs new file mode 100644 index 000000000..b04f673fd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/FixedPointPreCompInfo.cs @@ -0,0 +1,47 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier +{ + /** + * Class holding precomputation data for fixed-point multiplications. + */ + public class FixedPointPreCompInfo + : PreCompInfo + { + protected ECPoint m_offset = null; + + /** + * Lookup table for the precomputed ECPoints used for a fixed point multiplication. + */ + protected ECLookupTable m_lookupTable = null; + + /** + * The width used for the precomputation. If a larger width precomputation + * is already available this may be larger than was requested, so calling + * code should refer to the actual width. + */ + protected int m_width = -1; + + public virtual ECLookupTable LookupTable + { + get { return m_lookupTable; } + set { this.m_lookupTable = value; } + } + + public virtual ECPoint Offset + { + get { return m_offset; } + set { this.m_offset = value; } + } + + public virtual int Width + { + get { return m_width; } + set { this.m_width = value; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/FixedPointPreCompInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/FixedPointPreCompInfo.cs.meta new file mode 100644 index 000000000..db862c5c6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/FixedPointPreCompInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5269ffcee0d3b4f459619e7351ac2e2f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/FixedPointUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/FixedPointUtilities.cs new file mode 100644 index 000000000..7398a5049 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/FixedPointUtilities.cs @@ -0,0 +1,99 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier +{ + public class FixedPointUtilities + { + public static readonly string PRECOMP_NAME = "bc_fixed_point"; + + public static int GetCombSize(ECCurve c) + { + BigInteger order = c.Order; + return order == null ? c.FieldSize + 1 : order.BitLength; + } + + public static FixedPointPreCompInfo GetFixedPointPreCompInfo(PreCompInfo preCompInfo) + { + return preCompInfo as FixedPointPreCompInfo; + } + + public static FixedPointPreCompInfo Precompute(ECPoint p) + { + return (FixedPointPreCompInfo)p.Curve.Precompute(p, PRECOMP_NAME, new FixedPointCallback(p)); + } + + private class FixedPointCallback + : IPreCompCallback + { + private readonly ECPoint m_p; + + internal FixedPointCallback(ECPoint p) + { + this.m_p = p; + } + + public PreCompInfo Precompute(PreCompInfo existing) + { + FixedPointPreCompInfo existingFP = existing as FixedPointPreCompInfo; + + ECCurve c = m_p.Curve; + int bits = FixedPointUtilities.GetCombSize(c); + int minWidth = bits > 250 ? 6 : 5; + int n = 1 << minWidth; + + if (CheckExisting(existingFP, n)) + return existingFP; + + int d = (bits + minWidth - 1) / minWidth; + + ECPoint[] pow2Table = new ECPoint[minWidth + 1]; + pow2Table[0] = m_p; + for (int i = 1; i < minWidth; ++i) + { + pow2Table[i] = pow2Table[i - 1].TimesPow2(d); + } + + // This will be the 'offset' value + pow2Table[minWidth] = pow2Table[0].Subtract(pow2Table[1]); + + c.NormalizeAll(pow2Table); + + ECPoint[] lookupTable = new ECPoint[n]; + lookupTable[0] = pow2Table[0]; + + for (int bit = minWidth - 1; bit >= 0; --bit) + { + ECPoint pow2 = pow2Table[bit]; + + int step = 1 << bit; + for (int i = step; i < n; i += (step << 1)) + { + lookupTable[i] = lookupTable[i - step].Add(pow2); + } + } + + c.NormalizeAll(lookupTable); + + FixedPointPreCompInfo result = new FixedPointPreCompInfo(); + result.LookupTable = c.CreateCacheSafeLookupTable(lookupTable, 0, lookupTable.Length); + result.Offset = pow2Table[minWidth]; + result.Width = minWidth; + return result; + } + + private bool CheckExisting(FixedPointPreCompInfo existingFP, int n) + { + return existingFP != null && CheckTable(existingFP.LookupTable, n); + } + + private bool CheckTable(ECLookupTable table, int n) + { + return table != null && table.Size >= n; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/FixedPointUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/FixedPointUtilities.cs.meta new file mode 100644 index 000000000..25f58a5a1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/FixedPointUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 508ed3f5d1e1c934eb8ee7da23677718 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/GlvMultiplier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/GlvMultiplier.cs new file mode 100644 index 000000000..ca9d1eb69 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/GlvMultiplier.cs @@ -0,0 +1,45 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Endo; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier +{ + public class GlvMultiplier + : AbstractECMultiplier + { + protected readonly ECCurve curve; + protected readonly GlvEndomorphism glvEndomorphism; + + public GlvMultiplier(ECCurve curve, GlvEndomorphism glvEndomorphism) + { + if (curve == null || curve.Order == null) + throw new ArgumentException("Need curve with known group order", "curve"); + + this.curve = curve; + this.glvEndomorphism = glvEndomorphism; + } + + protected override ECPoint MultiplyPositive(ECPoint p, BigInteger k) + { + if (!curve.Equals(p.Curve)) + throw new InvalidOperationException(); + + BigInteger n = p.Curve.Order; + BigInteger[] ab = glvEndomorphism.DecomposeScalar(k.Mod(n)); + BigInteger a = ab[0], b = ab[1]; + + if (glvEndomorphism.HasEfficientPointMap) + { + return ECAlgorithms.ImplShamirsTrickWNaf(glvEndomorphism, p, a, b); + } + + ECPoint q = EndoUtilities.MapPoint(glvEndomorphism, p); + + return ECAlgorithms.ImplShamirsTrickWNaf(p, a, q, b); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/GlvMultiplier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/GlvMultiplier.cs.meta new file mode 100644 index 000000000..3fe3a7709 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/GlvMultiplier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fecaa205dd70b694396480bbad11c16d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/IPreCompCallback.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/IPreCompCallback.cs new file mode 100644 index 000000000..7026f76f5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/IPreCompCallback.cs @@ -0,0 +1,13 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier +{ + public interface IPreCompCallback + { + PreCompInfo Precompute(PreCompInfo existing); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/IPreCompCallback.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/IPreCompCallback.cs.meta new file mode 100644 index 000000000..fd21eae4b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/IPreCompCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c4b23d148bccccc4dac614961ec7fe2d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/PreCompInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/PreCompInfo.cs new file mode 100644 index 000000000..56166a692 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/PreCompInfo.cs @@ -0,0 +1,15 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier +{ + /** + * Interface for classes storing precomputation data for multiplication + * algorithms. Used as a Memento (see GOF patterns) for + * WNafMultiplier. + */ + public interface PreCompInfo + { + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/PreCompInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/PreCompInfo.cs.meta new file mode 100644 index 000000000..e54f29483 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/PreCompInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7a90a54c7ae87ab48977a5a3aadc1d7c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/ValidityPreCompInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/ValidityPreCompInfo.cs new file mode 100644 index 000000000..50e4c544d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/ValidityPreCompInfo.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier +{ + internal class ValidityPreCompInfo + : PreCompInfo + { + internal static readonly string PRECOMP_NAME = "bc_validity"; + + private bool failed = false; + private bool curveEquationPassed = false; + private bool orderPassed = false; + + internal bool HasFailed() + { + return failed; + } + + internal void ReportFailed() + { + failed = true; + } + + internal bool HasCurveEquationPassed() + { + return curveEquationPassed; + } + + internal void ReportCurveEquationPassed() + { + curveEquationPassed = true; + } + + internal bool HasOrderPassed() + { + return orderPassed; + } + + internal void ReportOrderPassed() + { + orderPassed = true; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/ValidityPreCompInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/ValidityPreCompInfo.cs.meta new file mode 100644 index 000000000..b7ba0633f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/ValidityPreCompInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6849bd2beb67e854496f5d40924e901c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WNafL2RMultiplier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WNafL2RMultiplier.cs new file mode 100644 index 000000000..5d2040bf9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WNafL2RMultiplier.cs @@ -0,0 +1,93 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier +{ + /** + * Class implementing the WNAF (Window Non-Adjacent Form) multiplication + * algorithm. + */ + public class WNafL2RMultiplier + : AbstractECMultiplier + { + /** + * Multiplies this by an integer k using the + * Window NAF method. + * @param k The integer by which this is multiplied. + * @return A new ECPoint which equals this + * multiplied by k. + */ + protected override ECPoint MultiplyPositive(ECPoint p, BigInteger k) + { + int minWidth = WNafUtilities.GetWindowSize(k.BitLength); + + WNafPreCompInfo info = WNafUtilities.Precompute(p, minWidth, true); + ECPoint[] preComp = info.PreComp; + ECPoint[] preCompNeg = info.PreCompNeg; + int width = info.Width; + + int[] wnaf = WNafUtilities.GenerateCompactWindowNaf(width, k); + + ECPoint R = p.Curve.Infinity; + + int i = wnaf.Length; + + /* + * NOTE: We try to optimize the first window using the precomputed points to substitute an + * addition for 2 or more doublings. + */ + if (i > 1) + { + int wi = wnaf[--i]; + int digit = wi >> 16, zeroes = wi & 0xFFFF; + + int n = System.Math.Abs(digit); + ECPoint[] table = digit < 0 ? preCompNeg : preComp; + + // Optimization can only be used for values in the lower half of the table + if ((n << 2) < (1 << width)) + { + int highest = 32 - Integers.NumberOfLeadingZeros(n); + + // TODO Get addition/doubling cost ratio from curve and compare to 'scale' to see if worth substituting? + int scale = width - highest; + int lowBits = n ^ (1 << (highest - 1)); + + int i1 = ((1 << (width - 1)) - 1); + int i2 = (lowBits << scale) + 1; + R = table[i1 >> 1].Add(table[i2 >> 1]); + + zeroes -= scale; + + //Console.WriteLine("Optimized: 2^" + scale + " * " + n + " = " + i1 + " + " + i2); + } + else + { + R = table[n >> 1]; + } + + R = R.TimesPow2(zeroes); + } + + while (i > 0) + { + int wi = wnaf[--i]; + int digit = wi >> 16, zeroes = wi & 0xFFFF; + + int n = System.Math.Abs(digit); + ECPoint[] table = digit < 0 ? preCompNeg : preComp; + ECPoint r = table[n >> 1]; + + R = R.TwicePlus(r); + R = R.TimesPow2(zeroes); + } + + return R; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WNafL2RMultiplier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WNafL2RMultiplier.cs.meta new file mode 100644 index 000000000..1698d174d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WNafL2RMultiplier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e211e4a6b86d3f94fbf2b5ac9c113ad8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WNafPreCompInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WNafPreCompInfo.cs new file mode 100644 index 000000000..d5cafb9e2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WNafPreCompInfo.cs @@ -0,0 +1,89 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier +{ + /** + * Class holding precomputation data for the WNAF (Window Non-Adjacent Form) + * algorithm. + */ + public class WNafPreCompInfo + : PreCompInfo + { + internal volatile int m_promotionCountdown = 4; + + protected int m_confWidth = -1; + + /** + * Array holding the precomputed ECPoints used for a Window + * NAF multiplication. + */ + protected ECPoint[] m_preComp = null; + + /** + * Array holding the negations of the precomputed ECPoints used + * for a Window NAF multiplication. + */ + protected ECPoint[] m_preCompNeg = null; + + /** + * Holds an ECPoint representing Twice(this). Used for the + * Window NAF multiplication to create or extend the precomputed values. + */ + protected ECPoint m_twice = null; + + protected int m_width = -1; + + internal int DecrementPromotionCountdown() + { + int t = m_promotionCountdown; + if (t > 0) + { + m_promotionCountdown = --t; + } + return t; + } + + internal int PromotionCountdown + { + get { return m_promotionCountdown; } + set { this.m_promotionCountdown = value; } + } + + public virtual bool IsPromoted + { + get { return m_promotionCountdown <= 0; } + } + + public virtual int ConfWidth + { + get { return m_confWidth; } + set { this.m_confWidth = value; } + } + + public virtual ECPoint[] PreComp + { + get { return m_preComp; } + set { this.m_preComp = value; } + } + + public virtual ECPoint[] PreCompNeg + { + get { return m_preCompNeg; } + set { this.m_preCompNeg = value; } + } + + public virtual ECPoint Twice + { + get { return m_twice; } + set { this.m_twice = value; } + } + + public virtual int Width + { + get { return m_width; } + set { this.m_width = value; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WNafPreCompInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WNafPreCompInfo.cs.meta new file mode 100644 index 000000000..529c62d4d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WNafPreCompInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c08f3ff220a86c0449f3d1d62cdfb47c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WNafUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WNafUtilities.cs new file mode 100644 index 000000000..c99a8edf5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WNafUtilities.cs @@ -0,0 +1,759 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier +{ + public abstract class WNafUtilities + { + public static readonly string PRECOMP_NAME = "bc_wnaf"; + + private static readonly int[] DEFAULT_WINDOW_SIZE_CUTOFFS = new int[]{ 13, 41, 121, 337, 897, 2305 }; + private static readonly int MAX_WIDTH = 16; + + private static readonly ECPoint[] EMPTY_POINTS = new ECPoint[0]; + + public static void ConfigureBasepoint(ECPoint p) + { + ECCurve c = p.Curve; + if (null == c) + return; + + BigInteger n = c.Order; + int bits = (null == n) ? c.FieldSize + 1 : n.BitLength; + int confWidth = System.Math.Min(MAX_WIDTH, GetWindowSize(bits) + 3); + + c.Precompute(p, PRECOMP_NAME, new ConfigureBasepointCallback(c, confWidth)); + } + + public static int[] GenerateCompactNaf(BigInteger k) + { + if ((k.BitLength >> 16) != 0) + throw new ArgumentException("must have bitlength < 2^16", "k"); + if (k.SignValue == 0) + return Arrays.EmptyInts; + + BigInteger _3k = k.ShiftLeft(1).Add(k); + + int bits = _3k.BitLength; + int[] naf = new int[bits >> 1]; + + BigInteger diff = _3k.Xor(k); + + int highBit = bits - 1, length = 0, zeroes = 0; + for (int i = 1; i < highBit; ++i) + { + if (!diff.TestBit(i)) + { + ++zeroes; + continue; + } + + int digit = k.TestBit(i) ? -1 : 1; + naf[length++] = (digit << 16) | zeroes; + zeroes = 1; + ++i; + } + + naf[length++] = (1 << 16) | zeroes; + + if (naf.Length > length) + { + naf = Trim(naf, length); + } + + return naf; + } + + public static int[] GenerateCompactWindowNaf(int width, BigInteger k) + { + if (width == 2) + { + return GenerateCompactNaf(k); + } + + if (width < 2 || width > 16) + throw new ArgumentException("must be in the range [2, 16]", "width"); + if ((k.BitLength >> 16) != 0) + throw new ArgumentException("must have bitlength < 2^16", "k"); + if (k.SignValue == 0) + return Arrays.EmptyInts; + + int[] wnaf = new int[k.BitLength / width + 1]; + + // 2^width and a mask and sign bit set accordingly + int pow2 = 1 << width; + int mask = pow2 - 1; + int sign = pow2 >> 1; + + bool carry = false; + int length = 0, pos = 0; + + while (pos <= k.BitLength) + { + if (k.TestBit(pos) == carry) + { + ++pos; + continue; + } + + k = k.ShiftRight(pos); + + int digit = k.IntValue & mask; + if (carry) + { + ++digit; + } + + carry = (digit & sign) != 0; + if (carry) + { + digit -= pow2; + } + + int zeroes = length > 0 ? pos - 1 : pos; + wnaf[length++] = (digit << 16) | zeroes; + pos = width; + } + + // Reduce the WNAF array to its actual length + if (wnaf.Length > length) + { + wnaf = Trim(wnaf, length); + } + + return wnaf; + } + + public static byte[] GenerateJsf(BigInteger g, BigInteger h) + { + int digits = System.Math.Max(g.BitLength, h.BitLength) + 1; + byte[] jsf = new byte[digits]; + + BigInteger k0 = g, k1 = h; + int j = 0, d0 = 0, d1 = 0; + + int offset = 0; + while ((d0 | d1) != 0 || k0.BitLength > offset || k1.BitLength > offset) + { + int n0 = ((int)((uint)k0.IntValue >> offset) + d0) & 7; + int n1 = ((int)((uint)k1.IntValue >> offset) + d1) & 7; + + int u0 = n0 & 1; + if (u0 != 0) + { + u0 -= (n0 & 2); + if ((n0 + u0) == 4 && (n1 & 3) == 2) + { + u0 = -u0; + } + } + + int u1 = n1 & 1; + if (u1 != 0) + { + u1 -= (n1 & 2); + if ((n1 + u1) == 4 && (n0 & 3) == 2) + { + u1 = -u1; + } + } + + if ((d0 << 1) == 1 + u0) + { + d0 ^= 1; + } + if ((d1 << 1) == 1 + u1) + { + d1 ^= 1; + } + + if (++offset == 30) + { + offset = 0; + k0 = k0.ShiftRight(30); + k1 = k1.ShiftRight(30); + } + + jsf[j++] = (byte)((u0 << 4) | (u1 & 0xF)); + } + + // Reduce the JSF array to its actual length + if (jsf.Length > j) + { + jsf = Trim(jsf, j); + } + + return jsf; + } + + public static byte[] GenerateNaf(BigInteger k) + { + if (k.SignValue == 0) + return Arrays.EmptyBytes; + + BigInteger _3k = k.ShiftLeft(1).Add(k); + + int digits = _3k.BitLength - 1; + byte[] naf = new byte[digits]; + + BigInteger diff = _3k.Xor(k); + + for (int i = 1; i < digits; ++i) + { + if (diff.TestBit(i)) + { + naf[i - 1] = (byte)(k.TestBit(i) ? -1 : 1); + ++i; + } + } + + naf[digits - 1] = 1; + + return naf; + } + + /** + * Computes the Window NAF (non-adjacent Form) of an integer. + * @param width The width w of the Window NAF. The width is + * defined as the minimal number w, such that for any + * w consecutive digits in the resulting representation, at + * most one is non-zero. + * @param k The integer of which the Window NAF is computed. + * @return The Window NAF of the given width, such that the following holds: + * k = &sum;i=0l-1 ki2i + * , where the ki denote the elements of the + * returned byte[]. + */ + public static byte[] GenerateWindowNaf(int width, BigInteger k) + { + if (width == 2) + { + return GenerateNaf(k); + } + + if (width < 2 || width > 8) + throw new ArgumentException("must be in the range [2, 8]", "width"); + if (k.SignValue == 0) + return Arrays.EmptyBytes; + + byte[] wnaf = new byte[k.BitLength + 1]; + + // 2^width and a mask and sign bit set accordingly + int pow2 = 1 << width; + int mask = pow2 - 1; + int sign = pow2 >> 1; + + bool carry = false; + int length = 0, pos = 0; + + while (pos <= k.BitLength) + { + if (k.TestBit(pos) == carry) + { + ++pos; + continue; + } + + k = k.ShiftRight(pos); + + int digit = k.IntValue & mask; + if (carry) + { + ++digit; + } + + carry = (digit & sign) != 0; + if (carry) + { + digit -= pow2; + } + + length += (length > 0) ? pos - 1 : pos; + wnaf[length++] = (byte)digit; + pos = width; + } + + // Reduce the WNAF array to its actual length + if (wnaf.Length > length) + { + wnaf = Trim(wnaf, length); + } + + return wnaf; + } + + public static int GetNafWeight(BigInteger k) + { + if (k.SignValue == 0) + return 0; + + BigInteger _3k = k.ShiftLeft(1).Add(k); + BigInteger diff = _3k.Xor(k); + + return diff.BitCount; + } + + public static WNafPreCompInfo GetWNafPreCompInfo(ECPoint p) + { + return GetWNafPreCompInfo(p.Curve.GetPreCompInfo(p, PRECOMP_NAME)); + } + + public static WNafPreCompInfo GetWNafPreCompInfo(PreCompInfo preCompInfo) + { + return preCompInfo as WNafPreCompInfo; + } + + /** + * Determine window width to use for a scalar multiplication of the given size. + * + * @param bits the bit-length of the scalar to multiply by + * @return the window size to use + */ + public static int GetWindowSize(int bits) + { + return GetWindowSize(bits, DEFAULT_WINDOW_SIZE_CUTOFFS, MAX_WIDTH); + } + + /** + * Determine window width to use for a scalar multiplication of the given size. + * + * @param bits the bit-length of the scalar to multiply by + * @param maxWidth the maximum window width to return + * @return the window size to use + */ + public static int GetWindowSize(int bits, int maxWidth) + { + return GetWindowSize(bits, DEFAULT_WINDOW_SIZE_CUTOFFS, maxWidth); + } + + /** + * Determine window width to use for a scalar multiplication of the given size. + * + * @param bits the bit-length of the scalar to multiply by + * @param windowSizeCutoffs a monotonically increasing list of bit sizes at which to increment the window width + * @return the window size to use + */ + public static int GetWindowSize(int bits, int[] windowSizeCutoffs) + { + return GetWindowSize(bits, windowSizeCutoffs, MAX_WIDTH); + } + + /** + * Determine window width to use for a scalar multiplication of the given size. + * + * @param bits the bit-length of the scalar to multiply by + * @param windowSizeCutoffs a monotonically increasing list of bit sizes at which to increment the window width + * @param maxWidth the maximum window width to return + * @return the window size to use + */ + public static int GetWindowSize(int bits, int[] windowSizeCutoffs, int maxWidth) + { + int w = 0; + for (; w < windowSizeCutoffs.Length; ++w) + { + if (bits < windowSizeCutoffs[w]) + { + break; + } + } + + return System.Math.Max(2, System.Math.Min(maxWidth, w + 2)); + } + + public static WNafPreCompInfo Precompute(ECPoint p, int minWidth, bool includeNegated) + { + return (WNafPreCompInfo)p.Curve.Precompute(p, PRECOMP_NAME, + new PrecomputeCallback(p, minWidth, includeNegated)); + } + + public static WNafPreCompInfo PrecomputeWithPointMap(ECPoint p, ECPointMap pointMap, WNafPreCompInfo fromWNaf, + bool includeNegated) + { + return (WNafPreCompInfo)p.Curve.Precompute(p, PRECOMP_NAME, + new PrecomputeWithPointMapCallback(p, pointMap, fromWNaf, includeNegated)); + } + + private static byte[] Trim(byte[] a, int length) + { + byte[] result = new byte[length]; + Array.Copy(a, 0, result, 0, result.Length); + return result; + } + + private static int[] Trim(int[] a, int length) + { + int[] result = new int[length]; + Array.Copy(a, 0, result, 0, result.Length); + return result; + } + + private static ECPoint[] ResizeTable(ECPoint[] a, int length) + { + ECPoint[] result = new ECPoint[length]; + Array.Copy(a, 0, result, 0, a.Length); + return result; + } + + private class ConfigureBasepointCallback + : IPreCompCallback + { + private readonly ECCurve m_curve; + private readonly int m_confWidth; + + internal ConfigureBasepointCallback(ECCurve curve, int confWidth) + { + this.m_curve = curve; + this.m_confWidth = confWidth; + } + + public PreCompInfo Precompute(PreCompInfo existing) + { + WNafPreCompInfo existingWNaf = existing as WNafPreCompInfo; + + if (null != existingWNaf && existingWNaf.ConfWidth == m_confWidth) + { + existingWNaf.PromotionCountdown = 0; + return existingWNaf; + } + + WNafPreCompInfo result = new WNafPreCompInfo(); + + result.PromotionCountdown = 0; + result.ConfWidth = m_confWidth; + + if (null != existingWNaf) + { + result.PreComp = existingWNaf.PreComp; + result.PreCompNeg = existingWNaf.PreCompNeg; + result.Twice = existingWNaf.Twice; + result.Width = existingWNaf.Width; + } + + return result; + } + } + + private class MapPointCallback + : IPreCompCallback + { + private readonly WNafPreCompInfo m_infoP; + private readonly bool m_includeNegated; + private readonly ECPointMap m_pointMap; + + internal MapPointCallback(WNafPreCompInfo infoP, bool includeNegated, ECPointMap pointMap) + { + this.m_infoP = infoP; + this.m_includeNegated = includeNegated; + this.m_pointMap = pointMap; + } + + public PreCompInfo Precompute(PreCompInfo existing) + { + WNafPreCompInfo result = new WNafPreCompInfo(); + + result.ConfWidth = m_infoP.ConfWidth; + + ECPoint twiceP = m_infoP.Twice; + if (null != twiceP) + { + ECPoint twiceQ = m_pointMap.Map(twiceP); + result.Twice = twiceQ; + } + + ECPoint[] preCompP = m_infoP.PreComp; + ECPoint[] preCompQ = new ECPoint[preCompP.Length]; + for (int i = 0; i < preCompP.Length; ++i) + { + preCompQ[i] = m_pointMap.Map(preCompP[i]); + } + result.PreComp = preCompQ; + result.Width = m_infoP.Width; + + if (m_includeNegated) + { + ECPoint[] preCompNegQ = new ECPoint[preCompQ.Length]; + for (int i = 0; i < preCompNegQ.Length; ++i) + { + preCompNegQ[i] = preCompQ[i].Negate(); + } + result.PreCompNeg = preCompNegQ; + } + + return result; + } + } + + private class PrecomputeCallback + : IPreCompCallback + { + private readonly ECPoint m_p; + private readonly int m_minWidth; + private readonly bool m_includeNegated; + + internal PrecomputeCallback(ECPoint p, int minWidth, bool includeNegated) + { + this.m_p = p; + this.m_minWidth = minWidth; + this.m_includeNegated = includeNegated; + } + + public PreCompInfo Precompute(PreCompInfo existing) + { + WNafPreCompInfo existingWNaf = existing as WNafPreCompInfo; + + int width = System.Math.Max(2, System.Math.Min(MAX_WIDTH, m_minWidth)); + int reqPreCompLen = 1 << (width - 2); + + if (CheckExisting(existingWNaf, width, reqPreCompLen, m_includeNegated)) + { + existingWNaf.DecrementPromotionCountdown(); + return existingWNaf; + } + + WNafPreCompInfo result = new WNafPreCompInfo(); + + ECCurve c = m_p.Curve; + ECPoint[] preComp = null, preCompNeg = null; + ECPoint twiceP = null; + + if (null != existingWNaf) + { + int promotionCountdown = existingWNaf.DecrementPromotionCountdown(); + result.PromotionCountdown = promotionCountdown; + + int confWidth = existingWNaf.ConfWidth; + result.ConfWidth = confWidth; + + preComp = existingWNaf.PreComp; + preCompNeg = existingWNaf.PreCompNeg; + twiceP = existingWNaf.Twice; + } + + width = System.Math.Min(MAX_WIDTH, System.Math.Max(result.ConfWidth, width)); + reqPreCompLen = 1 << (width - 2); + + int iniPreCompLen = 0; + if (null == preComp) + { + preComp = EMPTY_POINTS; + } + else + { + iniPreCompLen = preComp.Length; + } + + if (iniPreCompLen < reqPreCompLen) + { + preComp = WNafUtilities.ResizeTable(preComp, reqPreCompLen); + + if (reqPreCompLen == 1) + { + preComp[0] = m_p.Normalize(); + } + else + { + int curPreCompLen = iniPreCompLen; + if (curPreCompLen == 0) + { + preComp[0] = m_p; + curPreCompLen = 1; + } + + ECFieldElement iso = null; + + if (reqPreCompLen == 2) + { + preComp[1] = m_p.ThreeTimes(); + } + else + { + ECPoint isoTwiceP = twiceP, last = preComp[curPreCompLen - 1]; + if (null == isoTwiceP) + { + isoTwiceP = preComp[0].Twice(); + twiceP = isoTwiceP; + + /* + * For Fp curves with Jacobian projective coordinates, use a (quasi-)isomorphism + * where 'twiceP' is "affine", so that the subsequent additions are cheaper. This + * also requires scaling the initial point's X, Y coordinates, and reversing the + * isomorphism as part of the subsequent normalization. + * + * NOTE: The correctness of this optimization depends on: + * 1) additions do not use the curve's A, B coefficients. + * 2) no special cases (i.e. Q +/- Q) when calculating 1P, 3P, 5P, ... + */ + if (!twiceP.IsInfinity && ECAlgorithms.IsFpCurve(c) && c.FieldSize >= 64) + { + switch (c.CoordinateSystem) + { + case ECCurve.COORD_JACOBIAN: + case ECCurve.COORD_JACOBIAN_CHUDNOVSKY: + case ECCurve.COORD_JACOBIAN_MODIFIED: + { + iso = twiceP.GetZCoord(0); + isoTwiceP = c.CreatePoint(twiceP.XCoord.ToBigInteger(), + twiceP.YCoord.ToBigInteger()); + + ECFieldElement iso2 = iso.Square(), iso3 = iso2.Multiply(iso); + last = last.ScaleX(iso2).ScaleY(iso3); + + if (iniPreCompLen == 0) + { + preComp[0] = last; + } + break; + } + } + } + } + + while (curPreCompLen < reqPreCompLen) + { + /* + * Compute the new ECPoints for the precomputation array. The values 1, 3, + * 5, ..., 2^(width-1)-1 times p are computed + */ + preComp[curPreCompLen++] = last = last.Add(isoTwiceP); + } + } + + /* + * Having oft-used operands in affine form makes operations faster. + */ + c.NormalizeAll(preComp, iniPreCompLen, reqPreCompLen - iniPreCompLen, iso); + } + } + + if (m_includeNegated) + { + int pos; + if (null == preCompNeg) + { + pos = 0; + preCompNeg = new ECPoint[reqPreCompLen]; + } + else + { + pos = preCompNeg.Length; + if (pos < reqPreCompLen) + { + preCompNeg = WNafUtilities.ResizeTable(preCompNeg, reqPreCompLen); + } + } + + while (pos < reqPreCompLen) + { + preCompNeg[pos] = preComp[pos].Negate(); + ++pos; + } + } + + result.PreComp = preComp; + result.PreCompNeg = preCompNeg; + result.Twice = twiceP; + result.Width = width; + return result; + } + + private bool CheckExisting(WNafPreCompInfo existingWNaf, int width, int reqPreCompLen, bool includeNegated) + { + return null != existingWNaf + && existingWNaf.Width >= System.Math.Max(existingWNaf.ConfWidth, width) + && CheckTable(existingWNaf.PreComp, reqPreCompLen) + && (!includeNegated || CheckTable(existingWNaf.PreCompNeg, reqPreCompLen)); + } + + private bool CheckTable(ECPoint[] table, int reqLen) + { + return null != table && table.Length >= reqLen; + } + } + + private class PrecomputeWithPointMapCallback + : IPreCompCallback + { + private readonly ECPoint m_point; + private readonly ECPointMap m_pointMap; + private readonly WNafPreCompInfo m_fromWNaf; + private readonly bool m_includeNegated; + + internal PrecomputeWithPointMapCallback(ECPoint point, ECPointMap pointMap, WNafPreCompInfo fromWNaf, + bool includeNegated) + { + this.m_point = point; + this.m_pointMap = pointMap; + this.m_fromWNaf = fromWNaf; + this.m_includeNegated = includeNegated; + } + + public PreCompInfo Precompute(PreCompInfo existing) + { + WNafPreCompInfo existingWNaf = existing as WNafPreCompInfo; + + int width = m_fromWNaf.Width; + int reqPreCompLen = m_fromWNaf.PreComp.Length; + + if (CheckExisting(existingWNaf, width, reqPreCompLen, m_includeNegated)) + { + existingWNaf.DecrementPromotionCountdown(); + return existingWNaf; + } + + /* + * TODO Ideally this method would support incremental calculation, but given the + * existing use-cases it would be of little-to-no benefit. + */ + WNafPreCompInfo result = new WNafPreCompInfo(); + + result.PromotionCountdown = m_fromWNaf.PromotionCountdown; + + ECPoint twiceFrom = m_fromWNaf.Twice; + if (null != twiceFrom) + { + ECPoint twice = m_pointMap.Map(twiceFrom); + result.Twice = twice; + } + + ECPoint[] preCompFrom = m_fromWNaf.PreComp; + ECPoint[] preComp = new ECPoint[preCompFrom.Length]; + for (int i = 0; i < preCompFrom.Length; ++i) + { + preComp[i] = m_pointMap.Map(preCompFrom[i]); + } + result.PreComp = preComp; + result.Width = width; + + if (m_includeNegated) + { + ECPoint[] preCompNeg = new ECPoint[preComp.Length]; + for (int i = 0; i < preCompNeg.Length; ++i) + { + preCompNeg[i] = preComp[i].Negate(); + } + result.PreCompNeg = preCompNeg; + } + + return result; + } + + private bool CheckExisting(WNafPreCompInfo existingWNaf, int width, int reqPreCompLen, bool includeNegated) + { + return null != existingWNaf + && existingWNaf.Width >= width + && CheckTable(existingWNaf.PreComp, reqPreCompLen) + && (!includeNegated || CheckTable(existingWNaf.PreCompNeg, reqPreCompLen)); + } + + private bool CheckTable(ECPoint[] table, int reqLen) + { + return null != table && table.Length >= reqLen; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WNafUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WNafUtilities.cs.meta new file mode 100644 index 000000000..8a572abc1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WNafUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3572ce73eb041d6429dc80a09390f1e9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WTauNafMultiplier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WTauNafMultiplier.cs new file mode 100644 index 000000000..d14130fc3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WTauNafMultiplier.cs @@ -0,0 +1,142 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Abc; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier +{ + /** + * Class implementing the WTNAF (Window + * τ-adic Non-Adjacent Form) algorithm. + */ + public class WTauNafMultiplier + : AbstractECMultiplier + { + // TODO Create WTauNafUtilities class and move various functionality into it + internal static readonly string PRECOMP_NAME = "bc_wtnaf"; + + /** + * Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + * by k using the reduced τ-adic NAF (RTNAF) + * method. + * @param p The AbstractF2mPoint to multiply. + * @param k The integer by which to multiply k. + * @return p multiplied by k. + */ + protected override ECPoint MultiplyPositive(ECPoint point, BigInteger k) + { + AbstractF2mPoint p = point as AbstractF2mPoint; + if (p == null) + throw new ArgumentException("Only AbstractF2mPoint can be used in WTauNafMultiplier"); + + AbstractF2mCurve curve = (AbstractF2mCurve)p.Curve; + int m = curve.FieldSize; + sbyte a = (sbyte)curve.A.ToBigInteger().IntValue; + sbyte mu = Tnaf.GetMu(a); + BigInteger[] s = curve.GetSi(); + + ZTauElement rho = Tnaf.PartModReduction(k, m, a, s, mu, (sbyte)10); + + return MultiplyWTnaf(p, rho, a, mu); + } + + /** + * Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + * by an element λ of Z[τ] using + * the τ-adic NAF (TNAF) method. + * @param p The AbstractF2mPoint to multiply. + * @param lambda The element λ of + * Z[τ] of which to compute the + * [τ]-adic NAF. + * @return p multiplied by λ. + */ + private AbstractF2mPoint MultiplyWTnaf(AbstractF2mPoint p, ZTauElement lambda, + sbyte a, sbyte mu) + { + ZTauElement[] alpha = (a == 0) ? Tnaf.Alpha0 : Tnaf.Alpha1; + + BigInteger tw = Tnaf.GetTw(mu, Tnaf.Width); + + sbyte[]u = Tnaf.TauAdicWNaf(mu, lambda, Tnaf.Width, + BigInteger.ValueOf(Tnaf.Pow2Width), tw, alpha); + + return MultiplyFromWTnaf(p, u); + } + + /** + * Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + * by an element λ of Z[τ] + * using the window τ-adic NAF (TNAF) method, given the + * WTNAF of λ. + * @param p The AbstractF2mPoint to multiply. + * @param u The the WTNAF of λ.. + * @return λ * p + */ + private static AbstractF2mPoint MultiplyFromWTnaf(AbstractF2mPoint p, sbyte[] u) + { + AbstractF2mCurve curve = (AbstractF2mCurve)p.Curve; + sbyte a = (sbyte)curve.A.ToBigInteger().IntValue; + + WTauNafCallback callback = new WTauNafCallback(p, a); + WTauNafPreCompInfo preCompInfo = (WTauNafPreCompInfo)curve.Precompute(p, PRECOMP_NAME, callback); + AbstractF2mPoint[] pu = preCompInfo.PreComp; + + // TODO Include negations in precomp (optionally) and use from here + AbstractF2mPoint[] puNeg = new AbstractF2mPoint[pu.Length]; + for (int i = 0; i < pu.Length; ++i) + { + puNeg[i] = (AbstractF2mPoint)pu[i].Negate(); + } + + + // q = infinity + AbstractF2mPoint q = (AbstractF2mPoint) p.Curve.Infinity; + + int tauCount = 0; + for (int i = u.Length - 1; i >= 0; i--) + { + ++tauCount; + int ui = u[i]; + if (ui != 0) + { + q = q.TauPow(tauCount); + tauCount = 0; + + ECPoint x = ui > 0 ? pu[ui >> 1] : puNeg[(-ui) >> 1]; + q = (AbstractF2mPoint)q.Add(x); + } + } + if (tauCount > 0) + { + q = q.TauPow(tauCount); + } + return q; + } + + private class WTauNafCallback + : IPreCompCallback + { + private readonly AbstractF2mPoint m_p; + private readonly sbyte m_a; + + internal WTauNafCallback(AbstractF2mPoint p, sbyte a) + { + this.m_p = p; + this.m_a = a; + } + + public PreCompInfo Precompute(PreCompInfo existing) + { + if (existing is WTauNafPreCompInfo) + return existing; + + WTauNafPreCompInfo result = new WTauNafPreCompInfo(); + result.PreComp = Tnaf.GetPreComp(m_p, m_a); + return result; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WTauNafMultiplier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WTauNafMultiplier.cs.meta new file mode 100644 index 000000000..0c8241fa8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WTauNafMultiplier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2139991248cc7e04980d36d65b1284b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WTauNafPreCompInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WTauNafPreCompInfo.cs new file mode 100644 index 000000000..1a4541195 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WTauNafPreCompInfo.cs @@ -0,0 +1,28 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier +{ + /** + * Class holding precomputation data for the WTNAF (Window + * τ-adic Non-Adjacent Form) algorithm. + */ + public class WTauNafPreCompInfo + : PreCompInfo + { + /** + * Array holding the precomputed AbstractF2mPoints used for the + * WTNAF multiplication in + * {@link org.bouncycastle.math.ec.multiplier.WTauNafMultiplier.multiply() + * WTauNafMultiplier.multiply()}. + */ + protected AbstractF2mPoint[] m_preComp; + + public virtual AbstractF2mPoint[] PreComp + { + get { return m_preComp; } + set { this.m_preComp = value; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WTauNafPreCompInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WTauNafPreCompInfo.cs.meta new file mode 100644 index 000000000..69e713014 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/multiplier/WTauNafPreCompInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6adae98f46df50549b03088b3c22b378 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748.meta new file mode 100644 index 000000000..8d2d68141 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 16749723e84b3bd4ca4ba38c35399291 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X25519.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X25519.cs new file mode 100644 index 000000000..0fe85377a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X25519.cs @@ -0,0 +1,309 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc8032; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc7748 +{ + using F = X25519Field; + + public static class X25519 + { + public const int PointSize = 32; + public const int ScalarSize = 32; + + private const int C_A = 486662; + private const int C_A24 = (C_A + 2)/4; + + //private static readonly int[] SqrtNeg486664 = { 0x03457E06, 0x03812ABF, 0x01A82CC6, 0x028A5BE8, 0x018B43A7, + // 0x03FC4F7E, 0x02C23700, 0x006BBD27, 0x03A30500, 0x001E4DDB }; + + public static bool CalculateAgreement(byte[] k, int kOff, byte[] u, int uOff, byte[] r, int rOff) + { + ScalarMult(k, kOff, u, uOff, r, rOff); + return !Arrays.AreAllZeroes(r, rOff, PointSize); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static bool CalculateAgreement(ReadOnlySpan k, ReadOnlySpan u, Span r) + { + ScalarMult(k, u, r); + return !Arrays.AreAllZeroes(r[..PointSize]); + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static uint Decode32(ReadOnlySpan bs) + { + uint n = bs[0]; + n |= (uint)bs[1] << 8; + n |= (uint)bs[2] << 16; + n |= (uint)bs[3] << 24; + return n; + } + + private static void DecodeScalar(ReadOnlySpan k, Span n) + { + for (int i = 0; i < 8; ++i) + { + n[i] = Decode32(k[(i * 4)..]); + } + + n[0] &= 0xFFFFFFF8U; + n[7] &= 0x7FFFFFFFU; + n[7] |= 0x40000000U; + } +#else + private static uint Decode32(byte[] bs, int off) + { + uint n = bs[off]; + n |= (uint)bs[++off] << 8; + n |= (uint)bs[++off] << 16; + n |= (uint)bs[++off] << 24; + return n; + } + + private static void DecodeScalar(byte[] k, int kOff, uint[] n) + { + for (int i = 0; i < 8; ++i) + { + n[i] = Decode32(k, kOff + i * 4); + } + + n[0] &= 0xFFFFFFF8U; + n[7] &= 0x7FFFFFFFU; + n[7] |= 0x40000000U; + } +#endif + + public static void GeneratePrivateKey(SecureRandom random, byte[] k) + { + if (k.Length != ScalarSize) + throw new ArgumentException(nameof(k)); + + random.NextBytes(k); + + k[0] &= 0xF8; + k[ScalarSize - 1] &= 0x7F; + k[ScalarSize - 1] |= 0x40; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void GeneratePrivateKey(SecureRandom random, Span k) + { + if (k.Length != ScalarSize) + throw new ArgumentException(nameof(k)); + + random.NextBytes(k); + + k[0] &= 0xF8; + k[ScalarSize - 1] &= 0x7F; + k[ScalarSize - 1] |= 0x40; + } +#endif + + public static void GeneratePublicKey(byte[] k, int kOff, byte[] r, int rOff) + { + ScalarMultBase(k, kOff, r, rOff); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void GeneratePublicKey(ReadOnlySpan k, Span r) + { + ScalarMultBase(k, r); + } +#endif + + private static void PointDouble(int[] x, int[] z) + { + int[] a = F.Create(); + int[] b = F.Create(); + + F.Apm(x, z, a, b); + F.Sqr(a, a); + F.Sqr(b, b); + F.Mul(a, b, x); + F.Sub(a, b, a); + F.Mul(a, C_A24, z); + F.Add(z, b, z); + F.Mul(z, a, z); + } + + public static void Precompute() + { + Ed25519.Precompute(); + } + + public static void ScalarMult(byte[] k, int kOff, byte[] u, int uOff, byte[] r, int rOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ScalarMult(k.AsSpan(kOff), u.AsSpan(uOff), r.AsSpan(rOff)); +#else + uint[] n = new uint[8]; DecodeScalar(k, kOff, n); + + int[] x1 = F.Create(); F.Decode(u, uOff, x1); + int[] x2 = F.Create(); F.Copy(x1, 0, x2, 0); + int[] z2 = F.Create(); z2[0] = 1; + int[] x3 = F.Create(); x3[0] = 1; + int[] z3 = F.Create(); + + int[] t1 = F.Create(); + int[] t2 = F.Create(); + + Debug.Assert(n[7] >> 30 == 1U); + + int bit = 254, swap = 1; + do + { + F.Apm(x3, z3, t1, x3); + F.Apm(x2, z2, z3, x2); + F.Mul(t1, x2, t1); + F.Mul(x3, z3, x3); + F.Sqr(z3, z3); + F.Sqr(x2, x2); + + F.Sub(z3, x2, t2); + F.Mul(t2, C_A24, z2); + F.Add(z2, x2, z2); + F.Mul(z2, t2, z2); + F.Mul(x2, z3, x2); + + F.Apm(t1, x3, x3, z3); + F.Sqr(x3, x3); + F.Sqr(z3, z3); + F.Mul(z3, x1, z3); + + --bit; + + int word = bit >> 5, shift = bit & 0x1F; + int kt = (int)(n[word] >> shift) & 1; + swap ^= kt; + F.CSwap(swap, x2, x3); + F.CSwap(swap, z2, z3); + swap = kt; + } + while (bit >= 3); + + Debug.Assert(swap == 0); + + for (int i = 0; i < 3; ++i) + { + PointDouble(x2, z2); + } + + F.Inv(z2, z2); + F.Mul(x2, z2, x2); + + F.Normalize(x2); + F.Encode(x2, r, rOff); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void ScalarMult(ReadOnlySpan k, ReadOnlySpan u, Span r) + { + uint[] n = new uint[8]; DecodeScalar(k, n); + + int[] x1 = F.Create(); F.Decode(u, x1); + int[] x2 = F.Create(); F.Copy(x1, 0, x2, 0); + int[] z2 = F.Create(); z2[0] = 1; + int[] x3 = F.Create(); x3[0] = 1; + int[] z3 = F.Create(); + + int[] t1 = F.Create(); + int[] t2 = F.Create(); + + Debug.Assert(n[7] >> 30 == 1U); + + int bit = 254, swap = 1; + do + { + F.Apm(x3, z3, t1, x3); + F.Apm(x2, z2, z3, x2); + F.Mul(t1, x2, t1); + F.Mul(x3, z3, x3); + F.Sqr(z3, z3); + F.Sqr(x2, x2); + + F.Sub(z3, x2, t2); + F.Mul(t2, C_A24, z2); + F.Add(z2, x2, z2); + F.Mul(z2, t2, z2); + F.Mul(x2, z3, x2); + + F.Apm(t1, x3, x3, z3); + F.Sqr(x3, x3); + F.Sqr(z3, z3); + F.Mul(z3, x1, z3); + + --bit; + + int word = bit >> 5, shift = bit & 0x1F; + int kt = (int)(n[word] >> shift) & 1; + swap ^= kt; + F.CSwap(swap, x2, x3); + F.CSwap(swap, z2, z3); + swap = kt; + } + while (bit >= 3); + + Debug.Assert(swap == 0); + + for (int i = 0; i < 3; ++i) + { + PointDouble(x2, z2); + } + + F.Inv(z2, z2); + F.Mul(x2, z2, x2); + + F.Normalize(x2); + F.Encode(x2, r); + } +#endif + + public static void ScalarMultBase(byte[] k, int kOff, byte[] r, int rOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ScalarMultBase(k.AsSpan(kOff), r.AsSpan(rOff)); +#else + int[] y = F.Create(); + int[] z = F.Create(); + + Ed25519.ScalarMultBaseYZ(k, kOff, y, z); + + F.Apm(z, y, y, z); + + F.Inv(z, z); + F.Mul(y, z, y); + + F.Normalize(y); + F.Encode(y, r, rOff); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void ScalarMultBase(ReadOnlySpan k, Span r) + { + int[] y = F.Create(); + int[] z = F.Create(); + + Ed25519.ScalarMultBaseYZ(k, y, z); + + F.Apm(z, y, y, z); + + F.Inv(z, z); + F.Mul(y, z, y); + + F.Normalize(y); + F.Encode(y, r); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X25519.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X25519.cs.meta new file mode 100644 index 000000000..0ad0252d9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X25519.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dcc98f9e9116df14b8c728485a48fd94 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X25519Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X25519Field.cs new file mode 100644 index 000000000..a46fc6df7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X25519Field.cs @@ -0,0 +1,963 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc7748 +{ + public static class X25519Field + { + public const int Size = 10; + + private const int M24 = 0x00FFFFFF; + private const int M25 = 0x01FFFFFF; + private const int M26 = 0x03FFFFFF; + + private static readonly uint[] P32 = new uint[]{ 0xFFFFFFEDU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU }; + private static readonly int[] RootNegOne = { 0x020EA0B0, 0x0386C9D2, 0x00478C4E, 0x0035697F, 0x005E8630, + 0x01FBD7A7, 0x0340264F, 0x01F0B2B4, 0x00027E0E, 0x00570649 }; + + public static void Add(int[] x, int[] y, int[] z) + { + for (int i = 0; i < Size; ++i) + { + z[i] = x[i] + y[i]; + } + } + + public static void AddOne(int[] z) + { + z[0] += 1; + } + + public static void AddOne(int[] z, int zOff) + { + z[zOff] += 1; + } + + public static void Apm(int[] x, int[] y, int[] zp, int[] zm) + { + for (int i = 0; i < Size; ++i) + { + int xi = x[i], yi = y[i]; + zp[i] = xi + yi; + zm[i] = xi - yi; + } + } + + public static int AreEqual(int[] x, int[] y) + { + int d = 0; + for (int i = 0; i < Size; ++i) + { + d |= x[i] ^ y[i]; + } + d |= d >> 16; + d &= 0xFFFF; + return (d - 1) >> 31; + } + + public static bool AreEqualVar(int[] x, int[] y) + { + return 0 != AreEqual(x, y); + } + + public static void Carry(int[] z) + { + int z0 = z[0], z1 = z[1], z2 = z[2], z3 = z[3], z4 = z[4]; + int z5 = z[5], z6 = z[6], z7 = z[7], z8 = z[8], z9 = z[9]; + + z2 += (z1 >> 26); z1 &= M26; + z4 += (z3 >> 26); z3 &= M26; + z7 += (z6 >> 26); z6 &= M26; + z9 += (z8 >> 26); z8 &= M26; + + z3 += (z2 >> 25); z2 &= M25; + z5 += (z4 >> 25); z4 &= M25; + z8 += (z7 >> 25); z7 &= M25; + //z0 += (z9 >> 24) * 19; z9 &= M24; + z0 += (z9 >> 25) * 38; z9 &= M25; + + z1 += (z0 >> 26); z0 &= M26; + z6 += (z5 >> 26); z5 &= M26; + + z2 += (z1 >> 26); z1 &= M26; + z4 += (z3 >> 26); z3 &= M26; + z7 += (z6 >> 26); z6 &= M26; + z9 += (z8 >> 26); z8 &= M26; + + z[0] = z0; z[1] = z1; z[2] = z2; z[3] = z3; z[4] = z4; + z[5] = z5; z[6] = z6; z[7] = z7; z[8] = z8; z[9] = z9; + } + + public static void CMov(int cond, int[] x, int xOff, int[] z, int zOff) + { + Debug.Assert(0 == cond || -1 == cond); + + for (int i = 0; i < Size; ++i) + { + int z_i = z[zOff + i], diff = z_i ^ x[xOff + i]; + z_i ^= (diff & cond); + z[zOff + i] = z_i; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void CMov(int cond, ReadOnlySpan x, Span z) + { + Debug.Assert(0 == cond || -1 == cond); + + for (int i = 0; i < Size; ++i) + { + int z_i = z[i], diff = z_i ^ x[i]; + z_i ^= (diff & cond); + z[i] = z_i; + } + } +#endif + + public static void CNegate(int negate, int[] z) + { + Debug.Assert(negate >> 1 == 0); + + int mask = 0 - negate; + for (int i = 0; i < Size; ++i) + { + z[i] = (z[i] ^ mask) - mask; + } + } + + public static void Copy(int[] x, int xOff, int[] z, int zOff) + { + for (int i = 0; i < Size; ++i) + { + z[zOff + i] = x[xOff + i]; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Copy(ReadOnlySpan x, Span z) + { + x[..Size].CopyTo(z); + } +#endif + + public static int[] Create() + { + return new int[Size]; + } + + public static int[] CreateTable(int n) + { + return new int[Size * n]; + } + + public static void CSwap(int swap, int[] a, int[] b) + { + Debug.Assert(swap >> 1 == 0); + Debug.Assert(a != b); + + int mask = 0 - swap; + for (int i = 0; i < Size; ++i) + { + int ai = a[i], bi = b[i]; + int dummy = mask & (ai ^ bi); + a[i] = ai ^ dummy; + b[i] = bi ^ dummy; + } + } + + [CLSCompliant(false)] + public static void Decode(uint[] x, int xOff, int[] z) + { + Decode128(x, xOff, z, 0); + Decode128(x, xOff + 4, z, 5); + z[9] &= M24; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + [CLSCompliant(false)] + public static void Decode(ReadOnlySpan x, Span z) + { + Decode128(x, z); + Decode128(x[4..], z[5..]); + z[9] &= M24; + } +#endif + + public static void Decode(byte[] x, int xOff, int[] z) + { + Decode128(x, xOff, z, 0); + Decode128(x, xOff + 16, z, 5); + z[9] &= M24; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Decode(ReadOnlySpan x, Span z) + { + Decode128(x, z); + Decode128(x[16..], z[5..]); + z[9] &= M24; + } +#endif + + private static void Decode128(uint[] x, int xOff, int[] z, int zOff) + { + uint t0 = x[xOff + 0], t1 = x[xOff + 1], t2 = x[xOff + 2], t3 = x[xOff + 3]; + + z[zOff + 0] = (int)t0 & M26; + z[zOff + 1] = (int)((t1 << 6) | (t0 >> 26)) & M26; + z[zOff + 2] = (int)((t2 << 12) | (t1 >> 20)) & M25; + z[zOff + 3] = (int)((t3 << 19) | (t2 >> 13)) & M26; + z[zOff + 4] = (int)(t3 >> 7); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void Decode128(ReadOnlySpan x, Span z) + { + uint t0 = x[0], t1 = x[1], t2 = x[2], t3 = x[3]; + + z[0] = (int)t0 & M26; + z[1] = (int)((t1 << 6) | (t0 >> 26)) & M26; + z[2] = (int)((t2 << 12) | (t1 >> 20)) & M25; + z[3] = (int)((t3 << 19) | (t2 >> 13)) & M26; + z[4] = (int)(t3 >> 7); + } +#endif + + private static void Decode128(byte[] bs, int off, int[] z, int zOff) + { + uint t0 = Decode32(bs, off + 0); + uint t1 = Decode32(bs, off + 4); + uint t2 = Decode32(bs, off + 8); + uint t3 = Decode32(bs, off + 12); + + z[zOff + 0] = (int)t0 & M26; + z[zOff + 1] = (int)((t1 << 6) | (t0 >> 26)) & M26; + z[zOff + 2] = (int)((t2 << 12) | (t1 >> 20)) & M25; + z[zOff + 3] = (int)((t3 << 19) | (t2 >> 13)) & M26; + z[zOff + 4] = (int)(t3 >> 7); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void Decode128(ReadOnlySpan bs, Span z) + { + uint t0 = Decode32(bs); + uint t1 = Decode32(bs[4..]); + uint t2 = Decode32(bs[8..]); + uint t3 = Decode32(bs[12..]); + + z[0] = (int)t0 & M26; + z[1] = (int)((t1 << 6) | (t0 >> 26)) & M26; + z[2] = (int)((t2 << 12) | (t1 >> 20)) & M25; + z[3] = (int)((t3 << 19) | (t2 >> 13)) & M26; + z[4] = (int)(t3 >> 7); + } +#endif + + private static uint Decode32(byte[] bs, int off) + { + uint n = bs[off]; + n |= (uint)bs[++off] << 8; + n |= (uint)bs[++off] << 16; + n |= (uint)bs[++off] << 24; + return n; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static uint Decode32(ReadOnlySpan bs) + { + uint n = bs[0]; + n |= (uint)bs[1] << 8; + n |= (uint)bs[2] << 16; + n |= (uint)bs[3] << 24; + return n; + } +#endif + + [CLSCompliant(false)] + public static void Encode(int[] x, uint[] z, int zOff) + { + Encode128(x, 0, z, zOff); + Encode128(x, 5, z, zOff + 4); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + [CLSCompliant(false)] + public static void Encode(ReadOnlySpan x, Span z) + { + Encode128(x, z); + Encode128(x[5..], z[4..]); + } +#endif + + public static void Encode(int[] x, byte[] z, int zOff) + { + Encode128(x, 0, z, zOff); + Encode128(x, 5, z, zOff + 16); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Encode(ReadOnlySpan x, Span z) + { + Encode128(x, z); + Encode128(x[5..], z[16..]); + } +#endif + + private static void Encode128(int[] x, int xOff, uint[] z, int zOff) + { + uint x0 = (uint)x[xOff + 0], x1 = (uint)x[xOff + 1], x2 = (uint)x[xOff + 2], x3 = (uint)x[xOff + 3], + x4 = (uint)x[xOff + 4]; + + z[zOff + 0] = x0 | (x1 << 26); + z[zOff + 1] = (x1 >> 6) | (x2 << 20); + z[zOff + 2] = (x2 >> 12) | (x3 << 13); + z[zOff + 3] = (x3 >> 19) | (x4 << 7); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void Encode128(ReadOnlySpan x, Span z) + { + uint x0 = (uint)x[0], x1 = (uint)x[1], x2 = (uint)x[2], x3 = (uint)x[3], x4 = (uint)x[4]; + + z[0] = x0 | (x1 << 26); + z[1] = (x1 >> 6) | (x2 << 20); + z[2] = (x2 >> 12) | (x3 << 13); + z[3] = (x3 >> 19) | (x4 << 7); + } +#endif + + private static void Encode128(int[] x, int xOff, byte[] bs, int off) + { + uint x0 = (uint)x[xOff + 0], x1 = (uint)x[xOff + 1], x2 = (uint)x[xOff + 2]; + uint x3 = (uint)x[xOff + 3], x4 = (uint)x[xOff + 4]; + + uint t0 = x0 | (x1 << 26); Encode32(t0, bs, off + 0); + uint t1 = (x1 >> 6) | (x2 << 20); Encode32(t1, bs, off + 4); + uint t2 = (x2 >> 12) | (x3 << 13); Encode32(t2, bs, off + 8); + uint t3 = (x3 >> 19) | (x4 << 7); Encode32(t3, bs, off + 12); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void Encode128(ReadOnlySpan x, Span bs) + { + uint x0 = (uint)x[0], x1 = (uint)x[1], x2 = (uint)x[2]; + uint x3 = (uint)x[3], x4 = (uint)x[4]; + + uint t0 = x0 | (x1 << 26); Encode32(t0, bs); + uint t1 = (x1 >> 6) | (x2 << 20); Encode32(t1, bs[4..]); + uint t2 = (x2 >> 12) | (x3 << 13); Encode32(t2, bs[8..]); + uint t3 = (x3 >> 19) | (x4 << 7); Encode32(t3, bs[12..]); + } +#endif + + private static void Encode32(uint n, byte[] bs, int off) + { + bs[ off] = (byte)(n ); + bs[++off] = (byte)(n >> 8); + bs[++off] = (byte)(n >> 16); + bs[++off] = (byte)(n >> 24); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void Encode32(uint n, Span bs) + { + bs[0] = (byte)(n ); + bs[1] = (byte)(n >> 8); + bs[2] = (byte)(n >> 16); + bs[3] = (byte)(n >> 24); + } +#endif + + public static void Inv(int[] x, int[] z) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Inv(x.AsSpan(), z.AsSpan()); +#else + //int[] x2 = Create(); + //int[] t = Create(); + //PowPm5d8(x, x2, t); + //Sqr(t, 3, t); + //Mul(t, x2, z); + + int[] t = Create(); + uint[] u = new uint[8]; + + Copy(x, 0, t, 0); + Normalize(t); + Encode(t, u, 0); + + Mod.ModOddInverse(P32, u, u); + + Decode(u, 0, z); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Inv(ReadOnlySpan x, Span z) + { + Span t = stackalloc int[Size]; + Span u = stackalloc uint[8]; + + Copy(x, t); + Normalize(t); + Encode(t, u); + + Mod.ModOddInverse(P32, u, u); + + Decode(u, z); + } +#endif + + public static void InvVar(int[] x, int[] z) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + InvVar(x.AsSpan(), z.AsSpan()); +#else + int[] t = Create(); + uint[] u = new uint[8]; + + Copy(x, 0, t, 0); + Normalize(t); + Encode(t, u, 0); + + Mod.ModOddInverseVar(P32, u, u); + + Decode(u, 0, z); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void InvVar(ReadOnlySpan x, Span z) + { + Span t = stackalloc int[Size]; + Span u = stackalloc uint[8]; + + Copy(x, t); + Normalize(t); + Encode(t, u); + + Mod.ModOddInverseVar(P32, u, u); + + Decode(u, z); + } +#endif + + public static int IsOne(int[] x) + { + int d = x[0] ^ 1; + for (int i = 1; i < Size; ++i) + { + d |= x[i]; + } + d |= d >> 16; + d &= 0xFFFF; + return (d - 1) >> 31; + } + + public static bool IsOneVar(int[] x) + { + return 0 != IsOne(x); + } + + public static int IsZero(int[] x) + { + int d = 0; + for (int i = 0; i < Size; ++i) + { + d |= x[i]; + } + d |= d >> 16; + d &= 0xFFFF; + return (d - 1) >> 31; + } + + public static bool IsZeroVar(int[] x) + { + return 0 != IsZero(x); + } + + public static void Mul(int[] x, int y, int[] z) + { + int x0 = x[0], x1 = x[1], x2 = x[2], x3 = x[3], x4 = x[4]; + int x5 = x[5], x6 = x[6], x7 = x[7], x8 = x[8], x9 = x[9]; + long c0, c1, c2, c3; + + c0 = (long)x2 * y; x2 = (int)c0 & M25; c0 >>= 25; + c1 = (long)x4 * y; x4 = (int)c1 & M25; c1 >>= 25; + c2 = (long)x7 * y; x7 = (int)c2 & M25; c2 >>= 25; + //c3 = (long)x9 * y; x9 = (int)c3 & M24; c3 >>= 24; + //c3 *= 19; + c3 = (long)x9 * y; x9 = (int)c3 & M25; c3 >>= 25; + c3 *= 38; + + c3 += (long)x0 * y; z[0] = (int)c3 & M26; c3 >>= 26; + c1 += (long)x5 * y; z[5] = (int)c1 & M26; c1 >>= 26; + + c3 += (long)x1 * y; z[1] = (int)c3 & M26; c3 >>= 26; + c0 += (long)x3 * y; z[3] = (int)c0 & M26; c0 >>= 26; + c1 += (long)x6 * y; z[6] = (int)c1 & M26; c1 >>= 26; + c2 += (long)x8 * y; z[8] = (int)c2 & M26; c2 >>= 26; + + z[2] = x2 + (int)c3; + z[4] = x4 + (int)c0; + z[7] = x7 + (int)c1; + z[9] = x9 + (int)c2; + } + + public static void Mul(int[] x, int[] y, int[] z) + { + int x0 = x[0], y0 = y[0]; + int x1 = x[1], y1 = y[1]; + int x2 = x[2], y2 = y[2]; + int x3 = x[3], y3 = y[3]; + int x4 = x[4], y4 = y[4]; + + int u0 = x[5], v0 = y[5]; + int u1 = x[6], v1 = y[6]; + int u2 = x[7], v2 = y[7]; + int u3 = x[8], v3 = y[8]; + int u4 = x[9], v4 = y[9]; + + long a0 = (long)x0 * y0; + long a1 = (long)x0 * y1 + + (long)x1 * y0; + long a2 = (long)x0 * y2 + + (long)x1 * y1 + + (long)x2 * y0; + long a3 = (long)x1 * y2 + + (long)x2 * y1; + a3 <<= 1; + a3 += (long)x0 * y3 + + (long)x3 * y0; + long a4 = (long)x2 * y2; + a4 <<= 1; + a4 += (long)x0 * y4 + + (long)x1 * y3 + + (long)x3 * y1 + + (long)x4 * y0; + long a5 = (long)x1 * y4 + + (long)x2 * y3 + + (long)x3 * y2 + + (long)x4 * y1; + a5 <<= 1; + long a6 = (long)x2 * y4 + + (long)x4 * y2; + a6 <<= 1; + a6 += (long)x3 * y3; + long a7 = (long)x3 * y4 + + (long)x4 * y3; + long a8 = (long)x4 * y4; + a8 <<= 1; + + long b0 = (long)u0 * v0; + long b1 = (long)u0 * v1 + + (long)u1 * v0; + long b2 = (long)u0 * v2 + + (long)u1 * v1 + + (long)u2 * v0; + long b3 = (long)u1 * v2 + + (long)u2 * v1; + b3 <<= 1; + b3 += (long)u0 * v3 + + (long)u3 * v0; + long b4 = (long)u2 * v2; + b4 <<= 1; + b4 += (long)u0 * v4 + + (long)u1 * v3 + + (long)u3 * v1 + + (long)u4 * v0; + long b5 = (long)u1 * v4 + + (long)u2 * v3 + + (long)u3 * v2 + + (long)u4 * v1; + //b5 <<= 1; + long b6 = (long)u2 * v4 + + (long)u4 * v2; + b6 <<= 1; + b6 += (long)u3 * v3; + long b7 = (long)u3 * v4 + + (long)u4 * v3; + long b8 = (long)u4 * v4; + //b8 <<= 1; + + a0 -= b5 * 76; + a1 -= b6 * 38; + a2 -= b7 * 38; + a3 -= b8 * 76; + + a5 -= b0; + a6 -= b1; + a7 -= b2; + a8 -= b3; + //long a9 = -b4; + + x0 += u0; y0 += v0; + x1 += u1; y1 += v1; + x2 += u2; y2 += v2; + x3 += u3; y3 += v3; + x4 += u4; y4 += v4; + + long c0 = (long)x0 * y0; + long c1 = (long)x0 * y1 + + (long)x1 * y0; + long c2 = (long)x0 * y2 + + (long)x1 * y1 + + (long)x2 * y0; + long c3 = (long)x1 * y2 + + (long)x2 * y1; + c3 <<= 1; + c3 += (long)x0 * y3 + + (long)x3 * y0; + long c4 = (long)x2 * y2; + c4 <<= 1; + c4 += (long)x0 * y4 + + (long)x1 * y3 + + (long)x3 * y1 + + (long)x4 * y0; + long c5 = (long)x1 * y4 + + (long)x2 * y3 + + (long)x3 * y2 + + (long)x4 * y1; + c5 <<= 1; + long c6 = (long)x2 * y4 + + (long)x4 * y2; + c6 <<= 1; + c6 += (long)x3 * y3; + long c7 = (long)x3 * y4 + + (long)x4 * y3; + long c8 = (long)x4 * y4; + c8 <<= 1; + + int z8, z9; + long t; + + t = a8 + (c3 - a3); + z8 = (int)t & M26; t >>= 26; + //t += a9 + (c4 - a4); + t += (c4 - a4) - b4; + //z9 = (int)t & M24; t >>= 24; + //t = a0 + (t + ((c5 - a5) << 1)) * 19; + z9 = (int)t & M25; t >>= 25; + t = a0 + (t + c5 - a5) * 38; + z[0] = (int)t & M26; t >>= 26; + t += a1 + (c6 - a6) * 38; + z[1] = (int)t & M26; t >>= 26; + t += a2 + (c7 - a7) * 38; + z[2] = (int)t & M25; t >>= 25; + t += a3 + (c8 - a8) * 38; + z[3] = (int)t & M26; t >>= 26; + //t += a4 - a9 * 38; + t += a4 + b4 * 38; + z[4] = (int)t & M25; t >>= 25; + t += a5 + (c0 - a0); + z[5] = (int)t & M26; t >>= 26; + t += a6 + (c1 - a1); + z[6] = (int)t & M26; t >>= 26; + t += a7 + (c2 - a2); + z[7] = (int)t & M25; t >>= 25; + t += z8; + z[8] = (int)t & M26; t >>= 26; + z[9] = z9 + (int)t; + } + + public static void Negate(int[] x, int[] z) + { + for (int i = 0; i < Size; ++i) + { + z[i] = -x[i]; + } + } + + public static void Normalize(int[] z) + { + int x = (z[9] >> 23) & 1; + Reduce(z, x); + Reduce(z, -x); + Debug.Assert(z[9] >> 24 == 0); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Normalize(Span z) + { + int x = (z[9] >> 23) & 1; + Reduce(z, x); + Reduce(z, -x); + Debug.Assert(z[9] >> 24 == 0); + } +#endif + + public static void One(int[] z) + { + z[0] = 1; + for (int i = 1; i < Size; ++i) + { + z[i] = 0; + } + } + + private static void PowPm5d8(int[] x, int[] rx2, int[] rz) + { + // z = x^((p-5)/8) = x^FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD + // (250 1s) (1 0s) (1 1s) + // Addition chain: [1] 2 3 5 10 15 25 50 75 125 [250] + + int[] x2 = rx2; Sqr(x, x2); Mul(x, x2, x2); + int[] x3 = Create(); Sqr(x2, x3); Mul(x, x3, x3); + int[] x5 = x3; Sqr(x3, 2, x5); Mul(x2, x5, x5); + int[] x10 = Create(); Sqr(x5, 5, x10); Mul(x5, x10, x10); + int[] x15 = Create(); Sqr(x10, 5, x15); Mul(x5, x15, x15); + int[] x25 = x5; Sqr(x15, 10, x25); Mul(x10, x25, x25); + int[] x50 = x10; Sqr(x25, 25, x50); Mul(x25, x50, x50); + int[] x75 = x15; Sqr(x50, 25, x75); Mul(x25, x75, x75); + int[] x125 = x25; Sqr(x75, 50, x125); Mul(x50, x125, x125); + int[] x250 = x50; Sqr(x125, 125, x250); Mul(x125, x250, x250); + + int[] t = x125; + Sqr(x250, 2, t); + Mul(t, x, rz); + } + + private static void Reduce(int[] z, int x) + { + int t = z[9], z9 = t & M24; + t = (t >> 24) + x; + + long cc = t * 19; + cc += z[0]; z[0] = (int)cc & M26; cc >>= 26; + cc += z[1]; z[1] = (int)cc & M26; cc >>= 26; + cc += z[2]; z[2] = (int)cc & M25; cc >>= 25; + cc += z[3]; z[3] = (int)cc & M26; cc >>= 26; + cc += z[4]; z[4] = (int)cc & M25; cc >>= 25; + cc += z[5]; z[5] = (int)cc & M26; cc >>= 26; + cc += z[6]; z[6] = (int)cc & M26; cc >>= 26; + cc += z[7]; z[7] = (int)cc & M25; cc >>= 25; + cc += z[8]; z[8] = (int)cc & M26; cc >>= 26; + z[9] = z9 + (int)cc; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void Reduce(Span z, int x) + { + int t = z[9], z9 = t & M24; + t = (t >> 24) + x; + + long cc = t * 19; + cc += z[0]; z[0] = (int)cc & M26; cc >>= 26; + cc += z[1]; z[1] = (int)cc & M26; cc >>= 26; + cc += z[2]; z[2] = (int)cc & M25; cc >>= 25; + cc += z[3]; z[3] = (int)cc & M26; cc >>= 26; + cc += z[4]; z[4] = (int)cc & M25; cc >>= 25; + cc += z[5]; z[5] = (int)cc & M26; cc >>= 26; + cc += z[6]; z[6] = (int)cc & M26; cc >>= 26; + cc += z[7]; z[7] = (int)cc & M25; cc >>= 25; + cc += z[8]; z[8] = (int)cc & M26; cc >>= 26; + z[9] = z9 + (int)cc; + } +#endif + + public static void Sqr(int[] x, int[] z) + { + int x0 = x[0]; + int x1 = x[1]; + int x2 = x[2]; + int x3 = x[3]; + int x4 = x[4]; + + int u0 = x[5]; + int u1 = x[6]; + int u2 = x[7]; + int u3 = x[8]; + int u4 = x[9]; + + int x1_2 = x1 * 2; + int x2_2 = x2 * 2; + int x3_2 = x3 * 2; + int x4_2 = x4 * 2; + + long a0 = (long)x0 * x0; + long a1 = (long)x0 * x1_2; + long a2 = (long)x0 * x2_2 + + (long)x1 * x1; + long a3 = (long)x1_2 * x2_2 + + (long)x0 * x3_2; + long a4 = (long)x2 * x2_2 + + (long)x0 * x4_2 + + (long)x1 * x3_2; + long a5 = (long)x1_2 * x4_2 + + (long)x2_2 * x3_2; + long a6 = (long)x2_2 * x4_2 + + (long)x3 * x3; + long a7 = (long)x3 * x4_2; + long a8 = (long)x4 * x4_2; + + int u1_2 = u1 * 2; + int u2_2 = u2 * 2; + int u3_2 = u3 * 2; + int u4_2 = u4 * 2; + + long b0 = (long)u0 * u0; + long b1 = (long)u0 * u1_2; + long b2 = (long)u0 * u2_2 + + (long)u1 * u1; + long b3 = (long)u1_2 * u2_2 + + (long)u0 * u3_2; + long b4 = (long)u2 * u2_2 + + (long)u0 * u4_2 + + (long)u1 * u3_2; + long b5 = (long)u1_2 * u4_2 + + (long)u2_2 * u3_2; + long b6 = (long)u2_2 * u4_2 + + (long)u3 * u3; + long b7 = (long)u3 * u4_2; + long b8 = (long)u4 * u4_2; + + a0 -= b5 * 38; + a1 -= b6 * 38; + a2 -= b7 * 38; + a3 -= b8 * 38; + + a5 -= b0; + a6 -= b1; + a7 -= b2; + a8 -= b3; + //long a9 = -b4; + + x0 += u0; + x1 += u1; + x2 += u2; + x3 += u3; + x4 += u4; + + x1_2 = x1 * 2; + x2_2 = x2 * 2; + x3_2 = x3 * 2; + x4_2 = x4 * 2; + + long c0 = (long)x0 * x0; + long c1 = (long)x0 * x1_2; + long c2 = (long)x0 * x2_2 + + (long)x1 * x1; + long c3 = (long)x1_2 * x2_2 + + (long)x0 * x3_2; + long c4 = (long)x2 * x2_2 + + (long)x0 * x4_2 + + (long)x1 * x3_2; + long c5 = (long)x1_2 * x4_2 + + (long)x2_2 * x3_2; + long c6 = (long)x2_2 * x4_2 + + (long)x3 * x3; + long c7 = (long)x3 * x4_2; + long c8 = (long)x4 * x4_2; + + int z8, z9; + long t; + + t = a8 + (c3 - a3); + z8 = (int)t & M26; t >>= 26; + //t += a9 + (c4 - a4); + t += (c4 - a4) - b4; + //z9 = (int)t & M24; t >>= 24; + //t = a0 + (t + ((c5 - a5) << 1)) * 19; + z9 = (int)t & M25; t >>= 25; + t = a0 + (t + c5 - a5) * 38; + z[0] = (int)t & M26; t >>= 26; + t += a1 + (c6 - a6) * 38; + z[1] = (int)t & M26; t >>= 26; + t += a2 + (c7 - a7) * 38; + z[2] = (int)t & M25; t >>= 25; + t += a3 + (c8 - a8) * 38; + z[3] = (int)t & M26; t >>= 26; + //t += a4 - a9 * 38; + t += a4 + b4 * 38; + z[4] = (int)t & M25; t >>= 25; + t += a5 + (c0 - a0); + z[5] = (int)t & M26; t >>= 26; + t += a6 + (c1 - a1); + z[6] = (int)t & M26; t >>= 26; + t += a7 + (c2 - a2); + z[7] = (int)t & M25; t >>= 25; + t += z8; + z[8] = (int)t & M26; t >>= 26; + z[9] = z9 + (int)t; + } + + public static void Sqr(int[] x, int n, int[] z) + { + Debug.Assert(n > 0); + + Sqr(x, z); + + while (--n > 0) + { + Sqr(z, z); + } + } + + public static bool SqrtRatioVar(int[] u, int[] v, int[] z) + { + int[] uv3 = Create(); + int[] uv7 = Create(); + + Mul(u, v, uv3); + Sqr(v, uv7); + Mul(uv3, uv7, uv3); + Sqr(uv7, uv7); + Mul(uv7, uv3, uv7); + + int[] t = Create(); + int[] x = Create(); + PowPm5d8(uv7, t, x); + Mul(x, uv3, x); + + int[] vx2 = Create(); + Sqr(x, vx2); + Mul(vx2, v, vx2); + + Sub(vx2, u, t); + Normalize(t); + if (IsZeroVar(t)) + { + Copy(x, 0, z, 0); + return true; + } + + Add(vx2, u, t); + Normalize(t); + if (IsZeroVar(t)) + { + Mul(x, RootNegOne, z); + return true; + } + + return false; + } + + public static void Sub(int[] x, int[] y, int[] z) + { + for (int i = 0; i < Size; ++i) + { + z[i] = x[i] - y[i]; + } + } + + public static void SubOne(int[] z) + { + z[0] -= 1; + } + + public static void Zero(int[] z) + { + for (int i = 0; i < Size; ++i) + { + z[i] = 0; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X25519Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X25519Field.cs.meta new file mode 100644 index 000000000..ee727a5e3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X25519Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 768a1c272feadb543a7275f3b5adfefa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X448.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X448.cs new file mode 100644 index 000000000..ffdf26a44 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X448.cs @@ -0,0 +1,320 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc8032; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc7748 +{ + using F = X448Field; + + public static class X448 + { + public const int PointSize = 56; + public const int ScalarSize = 56; + + private const uint C_A = 156326; + private const uint C_A24 = (C_A + 2)/4; + + //private static readonly uint[] Sqrt156324 = { 0x0551B193U, 0x07A21E17U, 0x0E635AD3U, 0x00812ABBU, 0x025B3F99U, 0x01605224U, + // 0x0AF8CB32U, 0x0D2E7D68U, 0x06BA50FDU, 0x08E55693U, 0x0CB08EB4U, 0x02ABEBC1U, 0x051BA0BBU, 0x02F8812EU, 0x0829B611U, + // 0x0BA4D3A0U }; + + public static bool CalculateAgreement(byte[] k, int kOff, byte[] u, int uOff, byte[] r, int rOff) + { + ScalarMult(k, kOff, u, uOff, r, rOff); + return !Arrays.AreAllZeroes(r, rOff, PointSize); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static bool CalculateAgreement(ReadOnlySpan k, ReadOnlySpan u, Span r) + { + ScalarMult(k, u, r); + return !Arrays.AreAllZeroes(r[..PointSize]); + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static uint Decode32(ReadOnlySpan bs) + { + uint n = bs[0]; + n |= (uint)bs[1] << 8; + n |= (uint)bs[2] << 16; + n |= (uint)bs[3] << 24; + return n; + } + + private static void DecodeScalar(ReadOnlySpan k, uint[] n) + { + for (int i = 0; i < 14; ++i) + { + n[i] = Decode32(k[(i * 4)..]); + } + + n[ 0] &= 0xFFFFFFFCU; + n[13] |= 0x80000000U; + } +#else + private static uint Decode32(byte[] bs, int off) + { + uint n = bs[off]; + n |= (uint)bs[++off] << 8; + n |= (uint)bs[++off] << 16; + n |= (uint)bs[++off] << 24; + return n; + } + + private static void DecodeScalar(byte[] k, int kOff, uint[] n) + { + for (int i = 0; i < 14; ++i) + { + n[i] = Decode32(k, kOff + i * 4); + } + + n[ 0] &= 0xFFFFFFFCU; + n[13] |= 0x80000000U; + } +#endif + + public static void GeneratePrivateKey(SecureRandom random, byte[] k) + { + if (k.Length != ScalarSize) + throw new ArgumentException(nameof(k)); + + random.NextBytes(k); + + k[0] &= 0xFC; + k[ScalarSize - 1] |= 0x80; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void GeneratePrivateKey(SecureRandom random, Span k) + { + if (k.Length != ScalarSize) + throw new ArgumentException(nameof(k)); + + random.NextBytes(k); + + k[0] &= 0xFC; + k[ScalarSize - 1] |= 0x80; + } +#endif + + public static void GeneratePublicKey(byte[] k, int kOff, byte[] r, int rOff) + { + ScalarMultBase(k, kOff, r, rOff); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void GeneratePublicKey(ReadOnlySpan k, Span r) + { + ScalarMultBase(k, r); + } +#endif + + private static void PointDouble(uint[] x, uint[] z) + { + uint[] a = F.Create(); + uint[] b = F.Create(); + + //F.Apm(x, z, a, b); + F.Add(x, z, a); + F.Sub(x, z, b); + F.Sqr(a, a); + F.Sqr(b, b); + F.Mul(a, b, x); + F.Sub(a, b, a); + F.Mul(a, C_A24, z); + F.Add(z, b, z); + F.Mul(z, a, z); + } + + public static void Precompute() + { + Ed448.Precompute(); + } + + public static void ScalarMult(byte[] k, int kOff, byte[] u, int uOff, byte[] r, int rOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ScalarMult(k.AsSpan(kOff), u.AsSpan(uOff), r.AsSpan(rOff)); +#else + uint[] n = new uint[14]; DecodeScalar(k, kOff, n); + + uint[] x1 = F.Create(); F.Decode(u, uOff, x1); + uint[] x2 = F.Create(); F.Copy(x1, 0, x2, 0); + uint[] z2 = F.Create(); z2[0] = 1; + uint[] x3 = F.Create(); x3[0] = 1; + uint[] z3 = F.Create(); + + uint[] t1 = F.Create(); + uint[] t2 = F.Create(); + + Debug.Assert(n[13] >> 31 == 1U); + + int bit = 447, swap = 1; + do + { + //F.Apm(x3, z3, t1, x3); + F.Add(x3, z3, t1); + F.Sub(x3, z3, x3); + //F.Apm(x2, z2, z3, x2); + F.Add(x2, z2, z3); + F.Sub(x2, z2, x2); + + F.Mul(t1, x2, t1); + F.Mul(x3, z3, x3); + F.Sqr(z3, z3); + F.Sqr(x2, x2); + + F.Sub(z3, x2, t2); + F.Mul(t2, C_A24, z2); + F.Add(z2, x2, z2); + F.Mul(z2, t2, z2); + F.Mul(x2, z3, x2); + + //F.Apm(t1, x3, x3, z3); + F.Sub(t1, x3, z3); + F.Add(t1, x3, x3); + F.Sqr(x3, x3); + F.Sqr(z3, z3); + F.Mul(z3, x1, z3); + + --bit; + + int word = bit >> 5, shift = bit & 0x1F; + int kt = (int)(n[word] >> shift) & 1; + swap ^= kt; + F.CSwap(swap, x2, x3); + F.CSwap(swap, z2, z3); + swap = kt; + } + while (bit >= 2); + + Debug.Assert(swap == 0); + + for (int i = 0; i < 2; ++i) + { + PointDouble(x2, z2); + } + + F.Inv(z2, z2); + F.Mul(x2, z2, x2); + + F.Normalize(x2); + F.Encode(x2, r, rOff); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void ScalarMult(ReadOnlySpan k, ReadOnlySpan u, Span r) + { + uint[] n = new uint[14]; DecodeScalar(k, n); + + uint[] x1 = F.Create(); F.Decode(u, x1); + uint[] x2 = F.Create(); F.Copy(x1, 0, x2, 0); + uint[] z2 = F.Create(); z2[0] = 1; + uint[] x3 = F.Create(); x3[0] = 1; + uint[] z3 = F.Create(); + + uint[] t1 = F.Create(); + uint[] t2 = F.Create(); + + Debug.Assert(n[13] >> 31 == 1U); + + int bit = 447, swap = 1; + do + { + //F.Apm(x3, z3, t1, x3); + F.Add(x3, z3, t1); + F.Sub(x3, z3, x3); + //F.Apm(x2, z2, z3, x2); + F.Add(x2, z2, z3); + F.Sub(x2, z2, x2); + + F.Mul(t1, x2, t1); + F.Mul(x3, z3, x3); + F.Sqr(z3, z3); + F.Sqr(x2, x2); + + F.Sub(z3, x2, t2); + F.Mul(t2, C_A24, z2); + F.Add(z2, x2, z2); + F.Mul(z2, t2, z2); + F.Mul(x2, z3, x2); + + //F.Apm(t1, x3, x3, z3); + F.Sub(t1, x3, z3); + F.Add(t1, x3, x3); + F.Sqr(x3, x3); + F.Sqr(z3, z3); + F.Mul(z3, x1, z3); + + --bit; + + int word = bit >> 5, shift = bit & 0x1F; + int kt = (int)(n[word] >> shift) & 1; + swap ^= kt; + F.CSwap(swap, x2, x3); + F.CSwap(swap, z2, z3); + swap = kt; + } + while (bit >= 2); + + Debug.Assert(swap == 0); + + for (int i = 0; i < 2; ++i) + { + PointDouble(x2, z2); + } + + F.Inv(z2, z2); + F.Mul(x2, z2, x2); + + F.Normalize(x2); + F.Encode(x2, r); + } +#endif + + public static void ScalarMultBase(byte[] k, int kOff, byte[] r, int rOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ScalarMultBase(k.AsSpan(kOff), r.AsSpan(rOff)); +#else + uint[] x = F.Create(); + uint[] y = F.Create(); + + Ed448.ScalarMultBaseXY(k, kOff, x, y); + + F.Inv(x, x); + F.Mul(x, y, x); + F.Sqr(x, x); + + F.Normalize(x); + F.Encode(x, r, rOff); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void ScalarMultBase(ReadOnlySpan k, Span r) + { + uint[] x = F.Create(); + uint[] y = F.Create(); + + Ed448.ScalarMultBaseXY(k, x, y); + + F.Inv(x, x); + F.Mul(x, y, x); + F.Sqr(x, x); + + F.Normalize(x); + F.Encode(x, r); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X448.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X448.cs.meta new file mode 100644 index 000000000..8e5b7ebae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X448.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cf09e42a7b7c71a4e8e71aabfee1856f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X448Field.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X448Field.cs new file mode 100644 index 000000000..f95982e04 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X448Field.cs @@ -0,0 +1,1375 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc7748 +{ + [CLSCompliant(false)] + public static class X448Field + { + public const int Size = 16; + + private const uint M28 = 0x0FFFFFFFU; + + private static readonly uint[] P32 = new uint[]{ 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU }; + + public static void Add(uint[] x, uint[] y, uint[] z) + { + for (int i = 0; i < Size; ++i) + { + z[i] = x[i] + y[i]; + } + } + + public static void AddOne(uint[] z) + { + z[0] += 1; + } + + public static void AddOne(uint[] z, int zOff) + { + z[zOff] += 1; + } + + //public static void Apm(int[] x, int[] y, int[] zp, int[] zm) + //{ + // for (int i = 0; i < Size; ++i) + // { + // int xi = x[i], yi = y[i]; + // zp[i] = xi + yi; + // zm[i] = xi - yi; + // } + //} + + public static int AreEqual(uint[] x, uint[] y) + { + uint d = 0; + for (int i = 0; i < Size; ++i) + { + d |= x[i] ^ y[i]; + } + d |= d >> 16; + d &= 0xFFFF; + return ((int)d - 1) >> 31; + } + + public static bool AreEqualVar(uint[] x, uint[] y) + { + return 0 != AreEqual(x, y); + } + + public static void Carry(uint[] z) + { + uint z0 = z[0], z1 = z[1], z2 = z[2], z3 = z[3], z4 = z[4], z5 = z[5], z6 = z[6], z7 = z[7]; + uint z8 = z[8], z9 = z[9], z10 = z[10], z11 = z[11], z12 = z[12], z13 = z[13], z14 = z[14], z15 = z[15]; + + z1 += (z0 >> 28); z0 &= M28; + z5 += (z4 >> 28); z4 &= M28; + z9 += (z8 >> 28); z8 &= M28; + z13 += (z12 >> 28); z12 &= M28; + + z2 += (z1 >> 28); z1 &= M28; + z6 += (z5 >> 28); z5 &= M28; + z10 += (z9 >> 28); z9 &= M28; + z14 += (z13 >> 28); z13 &= M28; + + z3 += (z2 >> 28); z2 &= M28; + z7 += (z6 >> 28); z6 &= M28; + z11 += (z10 >> 28); z10 &= M28; + z15 += (z14 >> 28); z14 &= M28; + + uint t = z15 >> 28; z15 &= M28; + z0 += t; + z8 += t; + + z4 += (z3 >> 28); z3 &= M28; + z8 += (z7 >> 28); z7 &= M28; + z12 += (z11 >> 28); z11 &= M28; + + z1 += (z0 >> 28); z0 &= M28; + z5 += (z4 >> 28); z4 &= M28; + z9 += (z8 >> 28); z8 &= M28; + z13 += (z12 >> 28); z12 &= M28; + + z[0] = z0; z[1] = z1; z[2] = z2; z[3] = z3; z[4] = z4; z[5] = z5; z[6] = z6; z[7] = z7; + z[8] = z8; z[9] = z9; z[10] = z10; z[11] = z11; z[12] = z12; z[13] = z13; z[14] = z14; z[15] = z15; + } + + public static void CMov(int cond, uint[] x, int xOff, uint[] z, int zOff) + { + Debug.Assert(0 == cond || -1 == cond); + + uint MASK = (uint)cond; + + for (int i = 0; i < Size; ++i) + { + uint z_i = z[zOff + i], diff = z_i ^ x[xOff + i]; + z_i ^= (diff & MASK); + z[zOff + i] = z_i; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void CMov(int cond, ReadOnlySpan x, Span z) + { + Debug.Assert(0 == cond || -1 == cond); + + uint MASK = (uint)cond; + + for (int i = 0; i < Size; ++i) + { + uint z_i = z[i], diff = z_i ^ x[i]; + z_i ^= (diff & MASK); + z[i] = z_i; + } + } +#endif + + public static void CNegate(int negate, uint[] z) + { + Debug.Assert(negate >> 1 == 0); + + uint[] t = Create(); + Sub(t, z, t); + + CMov(-negate, t, 0, z, 0); + } + + public static void Copy(uint[] x, int xOff, uint[] z, int zOff) + { + for (int i = 0; i < Size; ++i) + { + z[zOff + i] = x[xOff + i]; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Copy(ReadOnlySpan x, Span z) + { + x[..Size].CopyTo(z); + } +#endif + + public static uint[] Create() + { + return new uint[Size]; + } + + public static uint[] CreateTable(int n) + { + return new uint[Size * n]; + } + + public static void CSwap(int swap, uint[] a, uint[] b) + { + Debug.Assert(swap >> 1 == 0); + Debug.Assert(a != b); + + uint mask = (uint)(0 - swap); + for (int i = 0; i < Size; ++i) + { + uint ai = a[i], bi = b[i]; + uint dummy = mask & (ai ^ bi); + a[i] = ai ^ dummy; + b[i] = bi ^ dummy; + } + } + + public static void Decode(uint[] x, int xOff, uint[] z) + { + Decode224(x, xOff, z, 0); + Decode224(x, xOff + 7, z, 8); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Decode(ReadOnlySpan x, Span z) + { + Decode224(x, z); + Decode224(x[7..], z[8..]); + } +#endif + + public static void Decode(byte[] x, int xOff, uint[] z) + { + Decode56(x, xOff, z, 0); + Decode56(x, xOff + 7, z, 2); + Decode56(x, xOff + 14, z, 4); + Decode56(x, xOff + 21, z, 6); + Decode56(x, xOff + 28, z, 8); + Decode56(x, xOff + 35, z, 10); + Decode56(x, xOff + 42, z, 12); + Decode56(x, xOff + 49, z, 14); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Decode(ReadOnlySpan x, Span z) + { + Decode56(x, z); + Decode56(x[7..], z[2..]); + Decode56(x[14..], z[4..]); + Decode56(x[21..], z[6..]); + Decode56(x[28..], z[8..]); + Decode56(x[35..], z[10..]); + Decode56(x[42..], z[12..]); + Decode56(x[49..], z[14..]); + } +#endif + + private static void Decode224(uint[] x, int xOff, uint[] z, int zOff) + { + uint x0 = x[xOff + 0], x1 = x[xOff + 1], x2 = x[xOff + 2], x3 = x[xOff + 3]; + uint x4 = x[xOff + 4], x5 = x[xOff + 5], x6 = x[xOff + 6]; + + z[zOff + 0] = x0 & M28; + z[zOff + 1] = (x0 >> 28 | x1 << 4) & M28; + z[zOff + 2] = (x1 >> 24 | x2 << 8) & M28; + z[zOff + 3] = (x2 >> 20 | x3 << 12) & M28; + z[zOff + 4] = (x3 >> 16 | x4 << 16) & M28; + z[zOff + 5] = (x4 >> 12 | x5 << 20) & M28; + z[zOff + 6] = (x5 >> 8 | x6 << 24) & M28; + z[zOff + 7] = x6 >> 4; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void Decode224(ReadOnlySpan x, Span z) + { + uint x0 = x[0], x1 = x[1], x2 = x[2], x3 = x[3]; + uint x4 = x[4], x5 = x[5], x6 = x[6]; + + z[0] = x0 & M28; + z[1] = (x0 >> 28 | x1 << 4) & M28; + z[2] = (x1 >> 24 | x2 << 8) & M28; + z[3] = (x2 >> 20 | x3 << 12) & M28; + z[4] = (x3 >> 16 | x4 << 16) & M28; + z[5] = (x4 >> 12 | x5 << 20) & M28; + z[6] = (x5 >> 8 | x6 << 24) & M28; + z[7] = x6 >> 4; + } +#endif + + private static uint Decode24(byte[] bs, int off) + { + uint n = bs[off]; + n |= (uint)bs[++off] << 8; + n |= (uint)bs[++off] << 16; + return n; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static uint Decode24(ReadOnlySpan bs) + { + uint n = bs[0]; + n |= (uint)bs[1] << 8; + n |= (uint)bs[2] << 16; + return n; + } +#endif + + private static uint Decode32(byte[] bs, int off) + { + uint n = bs[off]; + n |= (uint)bs[++off] << 8; + n |= (uint)bs[++off] << 16; + n |= (uint)bs[++off] << 24; + return n; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static uint Decode32(ReadOnlySpan bs) + { + uint n = bs[0]; + n |= (uint)bs[1] << 8; + n |= (uint)bs[2] << 16; + n |= (uint)bs[3] << 24; + return n; + } +#endif + + private static void Decode56(byte[] bs, int off, uint[] z, int zOff) + { + uint lo = Decode32(bs, off); + uint hi = Decode24(bs, off + 4); + z[zOff] = lo & M28; + z[zOff + 1] = (lo >> 28) | (hi << 4); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void Decode56(ReadOnlySpan bs, Span z) + { + uint lo = Decode32(bs); + uint hi = Decode24(bs[4..]); + z[0] = lo & M28; + z[1] = (lo >> 28) | (hi << 4); + } +#endif + + public static void Encode(uint[] x, uint[] z, int zOff) + { + Encode224(x, 0, z, zOff); + Encode224(x, 8, z, zOff + 7); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Encode(ReadOnlySpan x, Span z) + { + Encode224(x, z); + Encode224(x[8..], z[7..]); + } +#endif + + public static void Encode(uint[] x, byte[] z, int zOff) + { + Encode56(x, 0, z, zOff); + Encode56(x, 2, z, zOff + 7); + Encode56(x, 4, z, zOff + 14); + Encode56(x, 6, z, zOff + 21); + Encode56(x, 8, z, zOff + 28); + Encode56(x, 10, z, zOff + 35); + Encode56(x, 12, z, zOff + 42); + Encode56(x, 14, z, zOff + 49); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Encode(ReadOnlySpan x, Span z) + { + Encode56(x, z); + Encode56(x[2..], z[7..]); + Encode56(x[4..], z[14..]); + Encode56(x[6..], z[21..]); + Encode56(x[8..], z[28..]); + Encode56(x[10..], z[35..]); + Encode56(x[12..], z[42..]); + Encode56(x[14..], z[49..]); + } +#endif + + private static void Encode224(uint[] x, int xOff, uint[] z, int zOff) + { + uint x0 = x[xOff + 0], x1 = x[xOff + 1], x2 = x[xOff + 2], x3 = x[xOff + 3]; + uint x4 = x[xOff + 4], x5 = x[xOff + 5], x6 = x[xOff + 6], x7 = x[xOff + 7]; + + z[zOff + 0] = x0 | (x1 << 28); + z[zOff + 1] = (x1 >> 4) | (x2 << 24); + z[zOff + 2] = (x2 >> 8) | (x3 << 20); + z[zOff + 3] = (x3 >> 12) | (x4 << 16); + z[zOff + 4] = (x4 >> 16) | (x5 << 12); + z[zOff + 5] = (x5 >> 20) | (x6 << 8); + z[zOff + 6] = (x6 >> 24) | (x7 << 4); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void Encode224(ReadOnlySpan x, Span z) + { + uint x0 = x[0], x1 = x[1], x2 = x[2], x3 = x[3]; + uint x4 = x[4], x5 = x[5], x6 = x[6], x7 = x[7]; + + z[0] = x0 | (x1 << 28); + z[1] = (x1 >> 4) | (x2 << 24); + z[2] = (x2 >> 8) | (x3 << 20); + z[3] = (x3 >> 12) | (x4 << 16); + z[4] = (x4 >> 16) | (x5 << 12); + z[5] = (x5 >> 20) | (x6 << 8); + z[6] = (x6 >> 24) | (x7 << 4); + } +#endif + + private static void Encode24(uint n, byte[] bs, int off) + { + bs[ off] = (byte)(n ); + bs[++off] = (byte)(n >> 8); + bs[++off] = (byte)(n >> 16); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void Encode24(uint n, Span bs) + { + bs[0] = (byte)(n ); + bs[1] = (byte)(n >> 8); + bs[2] = (byte)(n >> 16); + } +#endif + + private static void Encode32(uint n, byte[] bs, int off) + { + bs[ off] = (byte)(n ); + bs[++off] = (byte)(n >> 8); + bs[++off] = (byte)(n >> 16); + bs[++off] = (byte)(n >> 24); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void Encode32(uint n, Span bs) + { + bs[0] = (byte)(n ); + bs[1] = (byte)(n >> 8); + bs[2] = (byte)(n >> 16); + bs[3] = (byte)(n >> 24); + } +#endif + + private static void Encode56(uint[] x, int xOff, byte[] bs, int off) + { + uint lo = x[xOff], hi = x[xOff + 1]; + Encode32(lo | (hi << 28), bs, off); + Encode24(hi >> 4, bs, off + 4); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void Encode56(ReadOnlySpan x, Span bs) + { + uint lo = x[0], hi = x[1]; + Encode32(lo | (hi << 28), bs); + Encode24(hi >> 4, bs[4..]); + } +#endif + + public static void Inv(uint[] x, uint[] z) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Inv(x.AsSpan(), z.AsSpan()); +#else + //uint[] t = Create(); + //PowPm3d4(x, t); + //Sqr(t, 2, t); + //Mul(t, x, z); + + uint[] t = Create(); + uint[] u = new uint[14]; + + Copy(x, 0, t, 0); + Normalize(t); + Encode(t, u, 0); + + Mod.ModOddInverse(P32, u, u); + + Decode(u, 0, z); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Inv(ReadOnlySpan x, Span z) + { + Span t = stackalloc uint[Size]; + Span u = stackalloc uint[14]; + + Copy(x, t); + Normalize(t); + Encode(t, u); + + Mod.ModOddInverse(P32, u, u); + + Decode(u, z); + } +#endif + + public static void InvVar(uint[] x, uint[] z) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + InvVar(x.AsSpan(), z.AsSpan()); +#else + uint[] t = Create(); + uint[] u = new uint[14]; + + Copy(x, 0, t, 0); + Normalize(t); + Encode(t, u, 0); + + Mod.ModOddInverseVar(P32, u, u); + + Decode(u, 0, z); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void InvVar(ReadOnlySpan x, Span z) + { + Span t = stackalloc uint[Size]; + Span u = stackalloc uint[14]; + + Copy(x, t); + Normalize(t); + Encode(t, u); + + Mod.ModOddInverseVar(P32, u, u); + + Decode(u, z); + } +#endif + + public static int IsOne(uint[] x) + { + uint d = x[0] ^ 1; + for (int i = 1; i < Size; ++i) + { + d |= x[i]; + } + d |= d >> 16; + d &= 0xFFFF; + return ((int)d - 1) >> 31; + } + + public static bool IsOneVar(uint[] x) + { + return 0 != IsOne(x); + } + + public static int IsZero(uint[] x) + { + uint d = 0; + for (int i = 0; i < Size; ++i) + { + d |= x[i]; + } + d |= d >> 16; + d &= 0xFFFF; + return ((int)d - 1) >> 31; + } + + public static bool IsZeroVar(uint[] x) + { + return 0U != IsZero(x); + } + + public static void Mul(uint[] x, uint y, uint[] z) + { + uint x0 = x[0], x1 = x[1], x2 = x[2], x3 = x[3], x4 = x[4], x5 = x[5], x6 = x[6], x7 = x[7]; + uint x8 = x[8], x9 = x[9], x10 = x[10], x11 = x[11], x12 = x[12], x13 = x[13], x14 = x[14], x15 = x[15]; + + uint z1, z5, z9, z13; + ulong c, d, e, f; + + c = (ulong)x1 * y; + z1 = (uint)c & M28; c >>= 28; + d = (ulong)x5 * y; + z5 = (uint)d & M28; d >>= 28; + e = (ulong)x9 * y; + z9 = (uint)e & M28; e >>= 28; + f = (ulong)x13 * y; + z13 = (uint)f & M28; f >>= 28; + + c += (ulong)x2 * y; + z[2] = (uint)c & M28; c >>= 28; + d += (ulong)x6 * y; + z[6] = (uint)d & M28; d >>= 28; + e += (ulong)x10 * y; + z[10] = (uint)e & M28; e >>= 28; + f += (ulong)x14 * y; + z[14] = (uint)f & M28; f >>= 28; + + c += (ulong)x3 * y; + z[3] = (uint)c & M28; c >>= 28; + d += (ulong)x7 * y; + z[7] = (uint)d & M28; d >>= 28; + e += (ulong)x11 * y; + z[11] = (uint)e & M28; e >>= 28; + f += (ulong)x15 * y; + z[15] = (uint)f & M28; f >>= 28; + + d += f; + + c += (ulong)x4 * y; + z[4] = (uint)c & M28; c >>= 28; + d += (ulong)x8 * y; + z[8] = (uint)d & M28; d >>= 28; + e += (ulong)x12 * y; + z[12] = (uint)e & M28; e >>= 28; + f += (ulong)x0 * y; + z[0] = (uint)f & M28; f >>= 28; + + z[1] = z1 + (uint)f; + z[5] = z5 + (uint)c; + z[9] = z9 + (uint)d; + z[13] = z13 + (uint)e; + } + + public static void Mul(uint[] x, uint[] y, uint[] z) + { + uint x0 = x[0]; + uint x1 = x[1]; + uint x2 = x[2]; + uint x3 = x[3]; + uint x4 = x[4]; + uint x5 = x[5]; + uint x6 = x[6]; + uint x7 = x[7]; + + uint u0 = x[8]; + uint u1 = x[9]; + uint u2 = x[10]; + uint u3 = x[11]; + uint u4 = x[12]; + uint u5 = x[13]; + uint u6 = x[14]; + uint u7 = x[15]; + + uint y0 = y[0]; + uint y1 = y[1]; + uint y2 = y[2]; + uint y3 = y[3]; + uint y4 = y[4]; + uint y5 = y[5]; + uint y6 = y[6]; + uint y7 = y[7]; + + uint v0 = y[8]; + uint v1 = y[9]; + uint v2 = y[10]; + uint v3 = y[11]; + uint v4 = y[12]; + uint v5 = y[13]; + uint v6 = y[14]; + uint v7 = y[15]; + + uint s0 = x0 + u0; + uint s1 = x1 + u1; + uint s2 = x2 + u2; + uint s3 = x3 + u3; + uint s4 = x4 + u4; + uint s5 = x5 + u5; + uint s6 = x6 + u6; + uint s7 = x7 + u7; + + uint t0 = y0 + v0; + uint t1 = y1 + v1; + uint t2 = y2 + v2; + uint t3 = y3 + v3; + uint t4 = y4 + v4; + uint t5 = y5 + v5; + uint t6 = y6 + v6; + uint t7 = y7 + v7; + + uint z0, z1, z2, z3, z4, z5, z6, z7, z8, z9, z10, z11, z12, z13, z14, z15; + ulong c, d; + + ulong f0 = (ulong)x0 * y0; + ulong f8 = (ulong)x7 * y1 + + (ulong)x6 * y2 + + (ulong)x5 * y3 + + (ulong)x4 * y4 + + (ulong)x3 * y5 + + (ulong)x2 * y6 + + (ulong)x1 * y7; + ulong g0 = (ulong)u0 * v0; + ulong g8 = (ulong)u7 * v1 + + (ulong)u6 * v2 + + (ulong)u5 * v3 + + (ulong)u4 * v4 + + (ulong)u3 * v5 + + (ulong)u2 * v6 + + (ulong)u1 * v7; + ulong h0 = (ulong)s0 * t0; + ulong h8 = (ulong)s7 * t1 + + (ulong)s6 * t2 + + (ulong)s5 * t3 + + (ulong)s4 * t4 + + (ulong)s3 * t5 + + (ulong)s2 * t6 + + (ulong)s1 * t7; + + c = f0 + g0 + h8 - f8; + z0 = (uint)c & M28; c >>= 28; + d = g8 + h0 - f0 + h8; + z8 = (uint)d & M28; d >>= 28; + + ulong f1 = (ulong)x1 * y0 + + (ulong)x0 * y1; + ulong f9 = (ulong)x7 * y2 + + (ulong)x6 * y3 + + (ulong)x5 * y4 + + (ulong)x4 * y5 + + (ulong)x3 * y6 + + (ulong)x2 * y7; + ulong g1 = (ulong)u1 * v0 + + (ulong)u0 * v1; + ulong g9 = (ulong)u7 * v2 + + (ulong)u6 * v3 + + (ulong)u5 * v4 + + (ulong)u4 * v5 + + (ulong)u3 * v6 + + (ulong)u2 * v7; + ulong h1 = (ulong)s1 * t0 + + (ulong)s0 * t1; + ulong h9 = (ulong)s7 * t2 + + (ulong)s6 * t3 + + (ulong)s5 * t4 + + (ulong)s4 * t5 + + (ulong)s3 * t6 + + (ulong)s2 * t7; + + c += f1 + g1 + h9 - f9; + z1 = (uint)c & M28; c >>= 28; + d += g9 + h1 - f1 + h9; + z9 = (uint)d & M28; d >>= 28; + + ulong f2 = (ulong)x2 * y0 + + (ulong)x1 * y1 + + (ulong)x0 * y2; + ulong f10 = (ulong)x7 * y3 + + (ulong)x6 * y4 + + (ulong)x5 * y5 + + (ulong)x4 * y6 + + (ulong)x3 * y7; + ulong g2 = (ulong)u2 * v0 + + (ulong)u1 * v1 + + (ulong)u0 * v2; + ulong g10 = (ulong)u7 * v3 + + (ulong)u6 * v4 + + (ulong)u5 * v5 + + (ulong)u4 * v6 + + (ulong)u3 * v7; + ulong h2 = (ulong)s2 * t0 + + (ulong)s1 * t1 + + (ulong)s0 * t2; + ulong h10 = (ulong)s7 * t3 + + (ulong)s6 * t4 + + (ulong)s5 * t5 + + (ulong)s4 * t6 + + (ulong)s3 * t7; + + c += f2 + g2 + h10 - f10; + z2 = (uint)c & M28; c >>= 28; + d += g10 + h2 - f2 + h10; + z10 = (uint)d & M28; d >>= 28; + + ulong f3 = (ulong)x3 * y0 + + (ulong)x2 * y1 + + (ulong)x1 * y2 + + (ulong)x0 * y3; + ulong f11 = (ulong)x7 * y4 + + (ulong)x6 * y5 + + (ulong)x5 * y6 + + (ulong)x4 * y7; + ulong g3 = (ulong)u3 * v0 + + (ulong)u2 * v1 + + (ulong)u1 * v2 + + (ulong)u0 * v3; + ulong g11 = (ulong)u7 * v4 + + (ulong)u6 * v5 + + (ulong)u5 * v6 + + (ulong)u4 * v7; + ulong h3 = (ulong)s3 * t0 + + (ulong)s2 * t1 + + (ulong)s1 * t2 + + (ulong)s0 * t3; + ulong h11 = (ulong)s7 * t4 + + (ulong)s6 * t5 + + (ulong)s5 * t6 + + (ulong)s4 * t7; + + c += f3 + g3 + h11 - f11; + z3 = (uint)c & M28; c >>= 28; + d += g11 + h3 - f3 + h11; + z11 = (uint)d & M28; d >>= 28; + + ulong f4 = (ulong)x4 * y0 + + (ulong)x3 * y1 + + (ulong)x2 * y2 + + (ulong)x1 * y3 + + (ulong)x0 * y4; + ulong f12 = (ulong)x7 * y5 + + (ulong)x6 * y6 + + (ulong)x5 * y7; + ulong g4 = (ulong)u4 * v0 + + (ulong)u3 * v1 + + (ulong)u2 * v2 + + (ulong)u1 * v3 + + (ulong)u0 * v4; + ulong g12 = (ulong)u7 * v5 + + (ulong)u6 * v6 + + (ulong)u5 * v7; + ulong h4 = (ulong)s4 * t0 + + (ulong)s3 * t1 + + (ulong)s2 * t2 + + (ulong)s1 * t3 + + (ulong)s0 * t4; + ulong h12 = (ulong)s7 * t5 + + (ulong)s6 * t6 + + (ulong)s5 * t7; + + c += f4 + g4 + h12 - f12; + z4 = (uint)c & M28; c >>= 28; + d += g12 + h4 - f4 + h12; + z12 = (uint)d & M28; d >>= 28; + + ulong f5 = (ulong)x5 * y0 + + (ulong)x4 * y1 + + (ulong)x3 * y2 + + (ulong)x2 * y3 + + (ulong)x1 * y4 + + (ulong)x0 * y5; + ulong f13 = (ulong)x7 * y6 + + (ulong)x6 * y7; + ulong g5 = (ulong)u5 * v0 + + (ulong)u4 * v1 + + (ulong)u3 * v2 + + (ulong)u2 * v3 + + (ulong)u1 * v4 + + (ulong)u0 * v5; + ulong g13 = (ulong)u7 * v6 + + (ulong)u6 * v7; + ulong h5 = (ulong)s5 * t0 + + (ulong)s4 * t1 + + (ulong)s3 * t2 + + (ulong)s2 * t3 + + (ulong)s1 * t4 + + (ulong)s0 * t5; + ulong h13 = (ulong)s7 * t6 + + (ulong)s6 * t7; + + c += f5 + g5 + h13 - f13; + z5 = (uint)c & M28; c >>= 28; + d += g13 + h5 - f5 + h13; + z13 = (uint)d & M28; d >>= 28; + + ulong f6 = (ulong)x6 * y0 + + (ulong)x5 * y1 + + (ulong)x4 * y2 + + (ulong)x3 * y3 + + (ulong)x2 * y4 + + (ulong)x1 * y5 + + (ulong)x0 * y6; + ulong f14 = (ulong)x7 * y7; + ulong g6 = (ulong)u6 * v0 + + (ulong)u5 * v1 + + (ulong)u4 * v2 + + (ulong)u3 * v3 + + (ulong)u2 * v4 + + (ulong)u1 * v5 + + (ulong)u0 * v6; + ulong g14 = (ulong)u7 * v7; + ulong h6 = (ulong)s6 * t0 + + (ulong)s5 * t1 + + (ulong)s4 * t2 + + (ulong)s3 * t3 + + (ulong)s2 * t4 + + (ulong)s1 * t5 + + (ulong)s0 * t6; + ulong h14 = (ulong)s7 * t7; + + c += f6 + g6 + h14 - f14; + z6 = (uint)c & M28; c >>= 28; + d += g14 + h6 - f6 + h14; + z14 = (uint)d & M28; d >>= 28; + + ulong f7 = (ulong)x7 * y0 + + (ulong)x6 * y1 + + (ulong)x5 * y2 + + (ulong)x4 * y3 + + (ulong)x3 * y4 + + (ulong)x2 * y5 + + (ulong)x1 * y6 + + (ulong)x0 * y7; + ulong g7 = (ulong)u7 * v0 + + (ulong)u6 * v1 + + (ulong)u5 * v2 + + (ulong)u4 * v3 + + (ulong)u3 * v4 + + (ulong)u2 * v5 + + (ulong)u1 * v6 + + (ulong)u0 * v7; + ulong h7 = (ulong)s7 * t0 + + (ulong)s6 * t1 + + (ulong)s5 * t2 + + (ulong)s4 * t3 + + (ulong)s3 * t4 + + (ulong)s2 * t5 + + (ulong)s1 * t6 + + (ulong)s0 * t7; + + c += f7 + g7; + z7 = (uint)c & M28; c >>= 28; + d += h7 - f7; + z15 = (uint)d & M28; d >>= 28; + + c += d; + + c += z8; + z8 = (uint)c & M28; c >>= 28; + d += z0; + z0 = (uint)d & M28; d >>= 28; + z9 += (uint)c; + z1 += (uint)d; + + z[0] = z0; + z[1] = z1; + z[2] = z2; + z[3] = z3; + z[4] = z4; + z[5] = z5; + z[6] = z6; + z[7] = z7; + z[8] = z8; + z[9] = z9; + z[10] = z10; + z[11] = z11; + z[12] = z12; + z[13] = z13; + z[14] = z14; + z[15] = z15; + } + + public static void Negate(uint[] x, uint[] z) + { + uint[] zero = Create(); + Sub(zero, x, z); + } + + public static void Normalize(uint[] z) + { + //int x = (z[15] >> (28 - 1)) & 1; + Reduce(z, 1); + Reduce(z, -1); + Debug.Assert(z[15] >> 28 == 0U); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Normalize(Span z) + { + //int x = (z[15] >> (28 - 1)) & 1; + Reduce(z, 1); + Reduce(z, -1); + Debug.Assert(z[15] >> 28 == 0U); + } +#endif + + public static void One(uint[] z) + { + z[0] = 1U; + for (int i = 1; i < Size; ++i) + { + z[i] = 0; + } + } + + private static void PowPm3d4(uint[] x, uint[] z) + { + // z = x^((p-3)/4) = x^(2^446 - 2^222 - 1) + // (223 1s) (1 0s) (222 1s) + // Addition chain: 1 2 3 6 9 18 19 37 74 111 [222] [223] + uint[] x2 = Create(); Sqr(x, x2); Mul(x, x2, x2); + uint[] x3 = Create(); Sqr(x2, x3); Mul(x, x3, x3); + uint[] x6 = Create(); Sqr(x3, 3, x6); Mul(x3, x6, x6); + uint[] x9 = Create(); Sqr(x6, 3, x9); Mul(x3, x9, x9); + uint[] x18 = Create(); Sqr(x9, 9, x18); Mul(x9, x18, x18); + uint[] x19 = Create(); Sqr(x18, x19); Mul(x, x19, x19); + uint[] x37 = Create(); Sqr(x19, 18, x37); Mul(x18, x37, x37); + uint[] x74 = Create(); Sqr(x37, 37, x74); Mul(x37, x74, x74); + uint[] x111 = Create(); Sqr(x74, 37, x111); Mul(x37, x111, x111); + uint[] x222 = Create(); Sqr(x111, 111, x222); Mul(x111, x222, x222); + uint[] x223 = Create(); Sqr(x222, x223); Mul(x, x223, x223); + + uint[] t = Create(); + Sqr(x223, 223, t); + Mul(t, x222, z); + } + + private static void Reduce(uint[] z, int x) + { + uint u = z[15], z15 = u & M28; + int t = (int)(u >> 28) + x; + + long cc = t; + for (int i = 0; i < 8; ++i) + { + cc += z[i]; z[i] = (uint)cc & M28; cc >>= 28; + } + cc += t; + for (int i = 8; i < 15; ++i) + { + cc += z[i]; z[i] = (uint)cc & M28; cc >>= 28; + } + z[15] = z15 + (uint)cc; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void Reduce(Span z, int x) + { + uint u = z[15], z15 = u & M28; + int t = (int)(u >> 28) + x; + + long cc = t; + for (int i = 0; i < 8; ++i) + { + cc += z[i]; z[i] = (uint)cc & M28; cc >>= 28; + } + cc += t; + for (int i = 8; i < 15; ++i) + { + cc += z[i]; z[i] = (uint)cc & M28; cc >>= 28; + } + z[15] = z15 + (uint)cc; + } +#endif + + public static void Sqr(uint[] x, uint[] z) + { + uint x0 = x[0]; + uint x1 = x[1]; + uint x2 = x[2]; + uint x3 = x[3]; + uint x4 = x[4]; + uint x5 = x[5]; + uint x6 = x[6]; + uint x7 = x[7]; + + uint u0 = x[8]; + uint u1 = x[9]; + uint u2 = x[10]; + uint u3 = x[11]; + uint u4 = x[12]; + uint u5 = x[13]; + uint u6 = x[14]; + uint u7 = x[15]; + + uint x0_2 = x0 * 2; + uint x1_2 = x1 * 2; + uint x2_2 = x2 * 2; + uint x3_2 = x3 * 2; + uint x4_2 = x4 * 2; + uint x5_2 = x5 * 2; + uint x6_2 = x6 * 2; + + uint u0_2 = u0 * 2; + uint u1_2 = u1 * 2; + uint u2_2 = u2 * 2; + uint u3_2 = u3 * 2; + uint u4_2 = u4 * 2; + uint u5_2 = u5 * 2; + uint u6_2 = u6 * 2; + + uint s0 = x0 + u0; + uint s1 = x1 + u1; + uint s2 = x2 + u2; + uint s3 = x3 + u3; + uint s4 = x4 + u4; + uint s5 = x5 + u5; + uint s6 = x6 + u6; + uint s7 = x7 + u7; + + uint s0_2 = s0 * 2; + uint s1_2 = s1 * 2; + uint s2_2 = s2 * 2; + uint s3_2 = s3 * 2; + uint s4_2 = s4 * 2; + uint s5_2 = s5 * 2; + uint s6_2 = s6 * 2; + + uint z0, z1, z2, z3, z4, z5, z6, z7, z8, z9, z10, z11, z12, z13, z14, z15; + ulong c, d; + + ulong f0 = (ulong)x0 * x0; + ulong f8 = (ulong)x7 * x1_2 + + (ulong)x6 * x2_2 + + (ulong)x5 * x3_2 + + (ulong)x4 * x4; + ulong g0 = (ulong)u0 * u0; + ulong g8 = (ulong)u7 * u1_2 + + (ulong)u6 * u2_2 + + (ulong)u5 * u3_2 + + (ulong)u4 * u4; + ulong h0 = (ulong)s0 * s0; + ulong h8 = (ulong)s7 * s1_2 + + (ulong)s6 * s2_2 + + (ulong)s5 * s3_2 + + (ulong)s4 * s4; + + c = f0 + g0 + h8 - f8; + z0 = (uint)c & M28; c >>= 28; + d = g8 + h0 - f0 + h8; + z8 = (uint)d & M28; d >>= 28; + + ulong f1 = (ulong)x1 * x0_2; + ulong f9 = (ulong)x7 * x2_2 + + (ulong)x6 * x3_2 + + (ulong)x5 * x4_2; + ulong g1 = (ulong)u1 * u0_2; + ulong g9 = (ulong)u7 * u2_2 + + (ulong)u6 * u3_2 + + (ulong)u5 * u4_2; + ulong h1 = (ulong)s1 * s0_2; + ulong h9 = (ulong)s7 * s2_2 + + (ulong)s6 * s3_2 + + (ulong)s5 * s4_2; + + c += f1 + g1 + h9 - f9; + z1 = (uint)c & M28; c >>= 28; + d += g9 + h1 - f1 + h9; + z9 = (uint)d & M28; d >>= 28; + + ulong f2 = (ulong)x2 * x0_2 + + (ulong)x1 * x1; + ulong f10 = (ulong)x7 * x3_2 + + (ulong)x6 * x4_2 + + (ulong)x5 * x5; + ulong g2 = (ulong)u2 * u0_2 + + (ulong)u1 * u1; + ulong g10 = (ulong)u7 * u3_2 + + (ulong)u6 * u4_2 + + (ulong)u5 * u5; + ulong h2 = (ulong)s2 * s0_2 + + (ulong)s1 * s1; + ulong h10 = (ulong)s7 * s3_2 + + (ulong)s6 * s4_2 + + (ulong)s5 * s5; + + c += f2 + g2 + h10 - f10; + z2 = (uint)c & M28; c >>= 28; + d += g10 + h2 - f2 + h10; + z10 = (uint)d & M28; d >>= 28; + + ulong f3 = (ulong)x3 * x0_2 + + (ulong)x2 * x1_2; + ulong f11 = (ulong)x7 * x4_2 + + (ulong)x6 * x5_2; + ulong g3 = (ulong)u3 * u0_2 + + (ulong)u2 * u1_2; + ulong g11 = (ulong)u7 * u4_2 + + (ulong)u6 * u5_2; + ulong h3 = (ulong)s3 * s0_2 + + (ulong)s2 * s1_2; + ulong h11 = (ulong)s7 * s4_2 + + (ulong)s6 * s5_2; + + c += f3 + g3 + h11 - f11; + z3 = (uint)c & M28; c >>= 28; + d += g11 + h3 - f3 + h11; + z11 = (uint)d & M28; d >>= 28; + + ulong f4 = (ulong)x4 * x0_2 + + (ulong)x3 * x1_2 + + (ulong)x2 * x2; + ulong f12 = (ulong)x7 * x5_2 + + (ulong)x6 * x6; + ulong g4 = (ulong)u4 * u0_2 + + (ulong)u3 * u1_2 + + (ulong)u2 * u2; + ulong g12 = (ulong)u7 * u5_2 + + (ulong)u6 * u6; + ulong h4 = (ulong)s4 * s0_2 + + (ulong)s3 * s1_2 + + (ulong)s2 * s2; + ulong h12 = (ulong)s7 * s5_2 + + (ulong)s6 * s6; + + c += f4 + g4 + h12 - f12; + z4 = (uint)c & M28; c >>= 28; + d += g12 + h4 - f4 + h12; + z12 = (uint)d & M28; d >>= 28; + + ulong f5 = (ulong)x5 * x0_2 + + (ulong)x4 * x1_2 + + (ulong)x3 * x2_2; + ulong f13 = (ulong)x7 * x6_2; + ulong g5 = (ulong)u5 * u0_2 + + (ulong)u4 * u1_2 + + (ulong)u3 * u2_2; + ulong g13 = (ulong)u7 * u6_2; + ulong h5 = (ulong)s5 * s0_2 + + (ulong)s4 * s1_2 + + (ulong)s3 * s2_2; + ulong h13 = (ulong)s7 * s6_2; + + c += f5 + g5 + h13 - f13; + z5 = (uint)c & M28; c >>= 28; + d += g13 + h5 - f5 + h13; + z13 = (uint)d & M28; d >>= 28; + + ulong f6 = (ulong)x6 * x0_2 + + (ulong)x5 * x1_2 + + (ulong)x4 * x2_2 + + (ulong)x3 * x3; + ulong f14 = (ulong)x7 * x7; + ulong g6 = (ulong)u6 * u0_2 + + (ulong)u5 * u1_2 + + (ulong)u4 * u2_2 + + (ulong)u3 * u3; + ulong g14 = (ulong)u7 * u7; + ulong h6 = (ulong)s6 * s0_2 + + (ulong)s5 * s1_2 + + (ulong)s4 * s2_2 + + (ulong)s3 * s3; + ulong h14 = (ulong)s7 * s7; + + c += f6 + g6 + h14 - f14; + z6 = (uint)c & M28; c >>= 28; + d += g14 + h6 - f6 + h14; + z14 = (uint)d & M28; d >>= 28; + + ulong f7 = (ulong)x7 * x0_2 + + (ulong)x6 * x1_2 + + (ulong)x5 * x2_2 + + (ulong)x4 * x3_2; + ulong g7 = (ulong)u7 * u0_2 + + (ulong)u6 * u1_2 + + (ulong)u5 * u2_2 + + (ulong)u4 * u3_2; + ulong h7 = (ulong)s7 * s0_2 + + (ulong)s6 * s1_2 + + (ulong)s5 * s2_2 + + (ulong)s4 * s3_2; + + c += f7 + g7; + z7 = (uint)c & M28; c >>= 28; + d += h7 - f7; + z15 = (uint)d & M28; d >>= 28; + + c += d; + + c += z8; + z8 = (uint)c & M28; c >>= 28; + d += z0; + z0 = (uint)d & M28; d >>= 28; + z9 += (uint)c; + z1 += (uint)d; + + z[0] = z0; + z[1] = z1; + z[2] = z2; + z[3] = z3; + z[4] = z4; + z[5] = z5; + z[6] = z6; + z[7] = z7; + z[8] = z8; + z[9] = z9; + z[10] = z10; + z[11] = z11; + z[12] = z12; + z[13] = z13; + z[14] = z14; + z[15] = z15; + } + + public static void Sqr(uint[] x, int n, uint[] z) + { + Debug.Assert(n > 0); + + Sqr(x, z); + + while (--n > 0) + { + Sqr(z, z); + } + } + + public static bool SqrtRatioVar(uint[] u, uint[] v, uint[] z) + { + uint[] u3v = Create(); + uint[] u5v3 = Create(); + + Sqr(u, u3v); + Mul(u3v, v, u3v); + Sqr(u3v, u5v3); + Mul(u3v, u, u3v); + Mul(u5v3, u, u5v3); + Mul(u5v3, v, u5v3); + + uint[] x = Create(); + PowPm3d4(u5v3, x); + Mul(x, u3v, x); + + uint[] t = Create(); + Sqr(x, t); + Mul(t, v, t); + + Sub(u, t, t); + Normalize(t); + + if (IsZeroVar(t)) + { + Copy(x, 0, z, 0); + return true; + } + + return false; + } + + public static void Sub(uint[] x, uint[] y, uint[] z) + { + uint x0 = x[0], x1 = x[1], x2 = x[2], x3 = x[3], x4 = x[4], x5 = x[5], x6 = x[6], x7 = x[7]; + uint x8 = x[8], x9 = x[9], x10 = x[10], x11 = x[11], x12 = x[12], x13 = x[13], x14 = x[14], x15 = x[15]; + uint y0 = y[0], y1 = y[1], y2 = y[2], y3 = y[3], y4 = y[4], y5 = y[5], y6 = y[6], y7 = y[7]; + uint y8 = y[8], y9 = y[9], y10 = y[10], y11 = y[11], y12 = y[12], y13 = y[13], y14 = y[14], y15 = y[15]; + + uint z0 = x0 + 0x1FFFFFFEU - y0; + uint z1 = x1 + 0x1FFFFFFEU - y1; + uint z2 = x2 + 0x1FFFFFFEU - y2; + uint z3 = x3 + 0x1FFFFFFEU - y3; + uint z4 = x4 + 0x1FFFFFFEU - y4; + uint z5 = x5 + 0x1FFFFFFEU - y5; + uint z6 = x6 + 0x1FFFFFFEU - y6; + uint z7 = x7 + 0x1FFFFFFEU - y7; + uint z8 = x8 + 0x1FFFFFFCU - y8; + uint z9 = x9 + 0x1FFFFFFEU - y9; + uint z10 = x10 + 0x1FFFFFFEU - y10; + uint z11 = x11 + 0x1FFFFFFEU - y11; + uint z12 = x12 + 0x1FFFFFFEU - y12; + uint z13 = x13 + 0x1FFFFFFEU - y13; + uint z14 = x14 + 0x1FFFFFFEU - y14; + uint z15 = x15 + 0x1FFFFFFEU - y15; + + z2 += z1 >> 28; z1 &= M28; + z6 += z5 >> 28; z5 &= M28; + z10 += z9 >> 28; z9 &= M28; + z14 += z13 >> 28; z13 &= M28; + + z3 += z2 >> 28; z2 &= M28; + z7 += z6 >> 28; z6 &= M28; + z11 += z10 >> 28; z10 &= M28; + z15 += z14 >> 28; z14 &= M28; + + uint t = z15 >> 28; z15 &= M28; + z0 += t; + z8 += t; + + z4 += z3 >> 28; z3 &= M28; + z8 += z7 >> 28; z7 &= M28; + z12 += z11 >> 28; z11 &= M28; + + z1 += z0 >> 28; z0 &= M28; + z5 += z4 >> 28; z4 &= M28; + z9 += z8 >> 28; z8 &= M28; + z13 += z12 >> 28; z12 &= M28; + + z[0] = z0; + z[1] = z1; + z[2] = z2; + z[3] = z3; + z[4] = z4; + z[5] = z5; + z[6] = z6; + z[7] = z7; + z[8] = z8; + z[9] = z9; + z[10] = z10; + z[11] = z11; + z[12] = z12; + z[13] = z13; + z[14] = z14; + z[15] = z15; + } + + public static void SubOne(uint[] z) + { + uint[] one = Create(); + one[0] = 1U; + + Sub(z, one, z); + } + + public static void Zero(uint[] z) + { + for (int i = 0; i < Size; ++i) + { + z[i] = 0; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X448Field.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X448Field.cs.meta new file mode 100644 index 000000000..b7a28167f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc7748/X448Field.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6a985ce314f54be41b07d60dce032343 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc8032.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc8032.meta new file mode 100644 index 000000000..5d992fedf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc8032.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d199307194a54b9468b969b271f9b7f0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc8032/Ed25519.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc8032/Ed25519.cs new file mode 100644 index 000000000..b8565c42a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc8032/Ed25519.cs @@ -0,0 +1,1807 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc8032 +{ + using F = Rfc7748.X25519Field; + + /// + /// A low-level implementation of the Ed25519, Ed25519ctx, and Ed25519ph instantiations of the Edwards-Curve Digital + /// Signature Algorithm specified in RFC 8032. + /// + /// + /// The implementation strategy is mostly drawn from + /// Mike Hamburg, "Fast and compact elliptic-curve cryptography", notably the "signed multi-comb" algorithm (for + /// scalar multiplication by a fixed point), the "half Niels coordinates" (for precomputed points), and the + /// "extensible coordinates" (for accumulators). Standard + /// extended coordinates are used during + /// precomputations, needing only a single extra point addition formula. + /// + public static class Ed25519 + { + // -x^2 + y^2 == 1 + 0x52036CEE2B6FFE738CC740797779E89800700A4D4141D8AB75EB4DCA135978A3 * x^2 * y^2 + + public enum Algorithm + { + Ed25519 = 0, + Ed25519ctx = 1, + Ed25519ph = 2, + } + + private const long M08L = 0x000000FFL; + private const long M28L = 0x0FFFFFFFL; + private const long M32L = 0xFFFFFFFFL; + + private const int CoordUints = 8; + private const int PointBytes = CoordUints * 4; + private const int ScalarUints = 8; + private const int ScalarBytes = ScalarUints * 4; + + public static readonly int PrehashSize = 64; + public static readonly int PublicKeySize = PointBytes; + public static readonly int SecretKeySize = 32; + public static readonly int SignatureSize = PointBytes + ScalarBytes; + + // "SigEd25519 no Ed25519 collisions" + private static readonly byte[] Dom2Prefix = new byte[]{ 0x53, 0x69, 0x67, 0x45, 0x64, 0x32, 0x35, 0x35, 0x31, + 0x39, 0x20, 0x6e, 0x6f, 0x20, 0x45, 0x64, 0x32, 0x35, 0x35, 0x31, 0x39, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x73 }; + + private static readonly uint[] P = { 0xFFFFFFEDU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU }; + private static readonly uint[] L = { 0x5CF5D3EDU, 0x5812631AU, 0xA2F79CD6U, 0x14DEF9DEU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x10000000U }; + + private const int L0 = -0x030A2C13; // L0:26/-- + private const int L1 = 0x012631A6; // L1:24/22 + private const int L2 = 0x079CD658; // L2:27/-- + private const int L3 = -0x006215D1; // L3:23/-- + private const int L4 = 0x000014DF; // L4:12/11 + + private static readonly int[] B_x = { 0x0325D51A, 0x018B5823, 0x007B2C95, 0x0304A92D, 0x00D2598E, 0x01D6DC5C, + 0x01388C7F, 0x013FEC0A, 0x029E6B72, 0x0042D26D }; + private static readonly int[] B_y = { 0x02666658, 0x01999999, 0x00666666, 0x03333333, 0x00CCCCCC, 0x02666666, + 0x01999999, 0x00666666, 0x03333333, 0x00CCCCCC, }; + + // Note that d == -121665/121666 + private static readonly int[] C_d = { 0x035978A3, 0x02D37284, 0x018AB75E, 0x026A0A0E, 0x0000E014, 0x0379E898, + 0x01D01E5D, 0x01E738CC, 0x03715B7F, 0x00A406D9 }; + private static readonly int[] C_d2 = { 0x02B2F159, 0x01A6E509, 0x01156EBD, 0x00D4141D, 0x0001C029, 0x02F3D130, + 0x03A03CBB, 0x01CE7198, 0x02E2B6FF, 0x00480DB3 }; + private static readonly int[] C_d4 = { 0x0165E2B2, 0x034DCA13, 0x002ADD7A, 0x01A8283B, 0x00038052, 0x01E7A260, + 0x03407977, 0x019CE331, 0x01C56DFF, 0x00901B67 }; + + private const int WnafWidth = 5; + private const int WnafWidthBase = 7; + + // ScalarMultBase is hard-coded for these values of blocks, teeth, spacing so they can't be freely changed + private const int PrecompBlocks = 8; + private const int PrecompTeeth = 4; + private const int PrecompSpacing = 8; + //private const int PrecompRange = PrecompBlocks * PrecompTeeth * PrecompSpacing; // range == 256 + private const int PrecompPoints = 1 << (PrecompTeeth - 1); + private const int PrecompMask = PrecompPoints - 1; + + private static readonly object PrecompLock = new object(); + private static PointPrecomp[] PrecompBaseWnaf = null; + private static int[] PrecompBaseComb = null; + + private struct PointAccum + { + internal int[] x, y, z, u, v; + } + + private struct PointAffine + { + internal int[] x, y; + } + + private struct PointExtended + { + internal int[] x, y, z, t; + } + + private struct PointPrecomp + { + internal int[] ymx_h; // (y - x)/2 + internal int[] ypx_h; // (y + x)/2 + internal int[] xyd; // x.y.d + } + + private struct PointPrecompZ + { + internal int[] ymx_h; // (y - x)/2 + internal int[] ypx_h; // (y + x)/2 + internal int[] xyd; // x.y.d + internal int[] z; + } + + // Temp space to avoid allocations in point formulae. + private struct PointTemp + { + internal int[] r0, r1; + } + + private static byte[] CalculateS(byte[] r, byte[] k, byte[] s) + { + uint[] t = new uint[ScalarUints * 2]; DecodeScalar(r, 0, t); + uint[] u = new uint[ScalarUints]; DecodeScalar(k, 0, u); + uint[] v = new uint[ScalarUints]; DecodeScalar(s, 0, v); + + Nat256.MulAddTo(u, v, t); + + byte[] result = new byte[ScalarBytes * 2]; + for (int i = 0; i < t.Length; ++i) + { + Encode32(t[i], result, i * 4); + } + return ReduceScalar(result); + } + + private static bool CheckContextVar(byte[] ctx, byte phflag) + { + return ctx == null && phflag == 0x00 + || ctx != null && ctx.Length < 256; + } + + private static int CheckPoint(int[] x, int[] y) + { + int[] t = F.Create(); + int[] u = F.Create(); + int[] v = F.Create(); + + F.Sqr(x, u); + F.Sqr(y, v); + F.Mul(u, v, t); + F.Sub(v, u, v); + F.Mul(t, C_d, t); + F.AddOne(t); + F.Sub(t, v, t); + F.Normalize(t); + + return F.IsZero(t); + } + + private static int CheckPoint(int[] x, int[] y, int[] z) + { + int[] t = F.Create(); + int[] u = F.Create(); + int[] v = F.Create(); + int[] w = F.Create(); + + F.Sqr(x, u); + F.Sqr(y, v); + F.Sqr(z, w); + F.Mul(u, v, t); + F.Sub(v, u, v); + F.Mul(v, w, v); + F.Sqr(w, w); + F.Mul(t, C_d, t); + F.Add(t, w, t); + F.Sub(t, v, t); + F.Normalize(t); + + return F.IsZero(t); + } + + private static bool CheckPointVar(byte[] p) + { + uint[] t = new uint[CoordUints]; + Decode32(p, 0, t, 0, CoordUints); + t[CoordUints - 1] &= 0x7FFFFFFFU; + return !Nat256.Gte(t, P); + } + + private static bool CheckScalarVar(byte[] s, uint[] n) + { + DecodeScalar(s, 0, n); + return !Nat256.Gte(n, L); + } + + private static byte[] Copy(byte[] buf, int off, int len) + { + byte[] result = new byte[len]; + Array.Copy(buf, off, result, 0, len); + return result; + } + + private static IDigest CreateDigest() + { + return new Sha512Digest(); + } + + public static IDigest CreatePrehash() + { + return CreateDigest(); + } + + private static uint Decode24(byte[] bs, int off) + { + uint n = bs[off]; + n |= (uint)bs[++off] << 8; + n |= (uint)bs[++off] << 16; + return n; + } + + private static uint Decode32(byte[] bs, int off) + { + uint n = bs[off]; + n |= (uint)bs[++off] << 8; + n |= (uint)bs[++off] << 16; + n |= (uint)bs[++off] << 24; + return n; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static uint Decode32(ReadOnlySpan bs) + { + uint n = bs[0]; + n |= (uint)bs[1] << 8; + n |= (uint)bs[2] << 16; + n |= (uint)bs[3] << 24; + return n; + } +#endif + + private static void Decode32(byte[] bs, int bsOff, uint[] n, int nOff, int nLen) + { + for (int i = 0; i < nLen; ++i) + { + n[nOff + i] = Decode32(bs, bsOff + i * 4); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void Decode32(ReadOnlySpan bs, Span n) + { + for (int i = 0; i < n.Length; ++i) + { + n[i] = Decode32(bs[(i * 4)..]); + } + } +#endif + + private static bool DecodePointVar(byte[] p, int pOff, bool negate, ref PointAffine r) + { + byte[] py = Copy(p, pOff, PointBytes); + if (!CheckPointVar(py)) + return false; + + int x_0 = (py[PointBytes - 1] & 0x80) >> 7; + py[PointBytes - 1] &= 0x7F; + + F.Decode(py, 0, r.y); + + int[] u = F.Create(); + int[] v = F.Create(); + + F.Sqr(r.y, u); + F.Mul(C_d, u, v); + F.SubOne(u); + F.AddOne(v); + + if (!F.SqrtRatioVar(u, v, r.x)) + return false; + + F.Normalize(r.x); + if (x_0 == 1 && F.IsZeroVar(r.x)) + return false; + + if (negate ^ (x_0 != (r.x[0] & 1))) + { + F.Negate(r.x, r.x); + } + + return true; + } + + private static void DecodeScalar(byte[] k, int kOff, uint[] n) + { + Decode32(k, kOff, n, 0, ScalarUints); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void DecodeScalar(ReadOnlySpan k, Span n) + { + Decode32(k, n[..ScalarUints]); + } +#endif + + private static void Dom2(IDigest d, byte phflag, byte[] ctx) + { + if (ctx != null) + { + int n = Dom2Prefix.Length; + byte[] t = new byte[n + 2 + ctx.Length]; + Dom2Prefix.CopyTo(t, 0); + t[n] = phflag; + t[n + 1] = (byte)ctx.Length; + ctx.CopyTo(t, n + 2); + + d.BlockUpdate(t, 0, t.Length); + } + } + + private static void Encode24(uint n, byte[] bs, int off) + { + bs[off] = (byte)(n); + bs[++off] = (byte)(n >> 8); + bs[++off] = (byte)(n >> 16); + } + + private static void Encode32(uint n, byte[] bs, int off) + { + bs[off] = (byte)(n); + bs[++off] = (byte)(n >> 8); + bs[++off] = (byte)(n >> 16); + bs[++off] = (byte)(n >> 24); + } + + private static void Encode56(ulong n, byte[] bs, int off) + { + Encode32((uint)n, bs, off); + Encode24((uint)(n >> 32), bs, off + 4); + } + + private static int EncodePoint(ref PointAccum p, byte[] r, int rOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return EncodePoint(ref p, r.AsSpan(rOff)); +#else + int[] x = F.Create(); + int[] y = F.Create(); + + F.Inv(p.z, y); + F.Mul(p.x, y, x); + F.Mul(p.y, y, y); + F.Normalize(x); + F.Normalize(y); + + int result = CheckPoint(x, y); + + F.Encode(y, r, rOff); + r[rOff + PointBytes - 1] |= (byte)((x[0] & 1) << 7); + + return result; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static int EncodePoint(ref PointAccum p, Span r) + { + int[] x = F.Create(); + int[] y = F.Create(); + + F.Inv(p.z, y); + F.Mul(p.x, y, x); + F.Mul(p.y, y, y); + F.Normalize(x); + F.Normalize(y); + + int result = CheckPoint(x, y); + + F.Encode(y, r); + r[PointBytes - 1] |= (byte)((x[0] & 1) << 7); + + return result; + } +#endif + + public static void GeneratePrivateKey(SecureRandom random, byte[] k) + { + if (k.Length != SecretKeySize) + throw new ArgumentException(nameof(k)); + + random.NextBytes(k); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void GeneratePrivateKey(SecureRandom random, Span k) + { + if (k.Length != SecretKeySize) + throw new ArgumentException(nameof(k)); + + random.NextBytes(k); + } +#endif + + public static void GeneratePublicKey(byte[] sk, int skOff, byte[] pk, int pkOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + GeneratePublicKey(sk.AsSpan(skOff), pk.AsSpan(pkOff)); +#else + IDigest d = CreateDigest(); + byte[] h = new byte[d.GetDigestSize()]; + + d.BlockUpdate(sk, skOff, SecretKeySize); + d.DoFinal(h, 0); + + byte[] s = new byte[ScalarBytes]; + PruneScalar(h, 0, s); + + ScalarMultBaseEncoded(s, pk, pkOff); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void GeneratePublicKey(ReadOnlySpan sk, Span pk) + { + IDigest d = CreateDigest(); + int digestSize = d.GetDigestSize(); + Span h = digestSize <= 128 + ? stackalloc byte[digestSize] + : new byte[digestSize]; + + d.BlockUpdate(sk[..SecretKeySize]); + d.DoFinal(h); + + Span s = stackalloc byte[ScalarBytes]; + PruneScalar(h, s); + + ScalarMultBaseEncoded(s, pk); + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static uint GetWindow4(ReadOnlySpan x, int n) +#else + private static uint GetWindow4(uint[] x, int n) +#endif + { + int w = (int)((uint)n >> 3), b = (n & 7) << 2; + return (x[w] >> b) & 15U; + } + + private static sbyte[] GetWnafVar(uint[] n, int width) + { + Debug.Assert(n[ScalarUints - 1] <= L[ScalarUints - 1]); + Debug.Assert(2 <= width && width <= 8); + + uint[] t = new uint[ScalarUints * 2]; + { + uint c = 0; + int tPos = t.Length, i = ScalarUints; + while (--i >= 0) + { + uint next = n[i]; + t[--tPos] = (next >> 16) | (c << 16); + t[--tPos] = c = next; + } + } + + sbyte[] ws = new sbyte[253]; + + int lead = 32 - width; + + uint carry = 0U; + int j = 0; + for (int i = 0; i < t.Length; ++i, j -= 16) + { + uint word = t[i]; + while (j < 16) + { + uint word16 = word >> j; + uint bit = word16 & 1U; + + if (bit == carry) + { + ++j; + continue; + } + + uint digit = (word16 | 1U) << lead; + carry = digit >> 31; + + ws[(i << 4) + j] = (sbyte)((int)digit >> lead); + + j += width; + } + } + + Debug.Assert(carry == 0); + + return ws; + } + + private static void ImplSign(IDigest d, byte[] h, byte[] s, byte[] pk, int pkOff, byte[] ctx, byte phflag, + byte[] m, int mOff, int mLen, byte[] sig, int sigOff) + { + Dom2(d, phflag, ctx); + d.BlockUpdate(h, ScalarBytes, ScalarBytes); + d.BlockUpdate(m, mOff, mLen); + d.DoFinal(h, 0); + + byte[] r = ReduceScalar(h); + byte[] R = new byte[PointBytes]; + ScalarMultBaseEncoded(r, R, 0); + + Dom2(d, phflag, ctx); + d.BlockUpdate(R, 0, PointBytes); + d.BlockUpdate(pk, pkOff, PointBytes); + d.BlockUpdate(m, mOff, mLen); + d.DoFinal(h, 0); + + byte[] k = ReduceScalar(h); + byte[] S = CalculateS(r, k, s); + + Array.Copy(R, 0, sig, sigOff, PointBytes); + Array.Copy(S, 0, sig, sigOff + PointBytes, ScalarBytes); + } + + private static void ImplSign(byte[] sk, int skOff, byte[] ctx, byte phflag, byte[] m, int mOff, int mLen, + byte[] sig, int sigOff) + { + if (!CheckContextVar(ctx, phflag)) + throw new ArgumentException("ctx"); + + IDigest d = CreateDigest(); + byte[] h = new byte[d.GetDigestSize()]; + + d.BlockUpdate(sk, skOff, SecretKeySize); + d.DoFinal(h, 0); + + byte[] s = new byte[ScalarBytes]; + PruneScalar(h, 0, s); + + byte[] pk = new byte[PointBytes]; + ScalarMultBaseEncoded(s, pk, 0); + + ImplSign(d, h, s, pk, 0, ctx, phflag, m, mOff, mLen, sig, sigOff); + } + + private static void ImplSign(byte[] sk, int skOff, byte[] pk, int pkOff, byte[] ctx, byte phflag, byte[] m, + int mOff, int mLen, byte[] sig, int sigOff) + { + if (!CheckContextVar(ctx, phflag)) + throw new ArgumentException("ctx"); + + IDigest d = CreateDigest(); + byte[] h = new byte[d.GetDigestSize()]; + + d.BlockUpdate(sk, skOff, SecretKeySize); + d.DoFinal(h, 0); + + byte[] s = new byte[ScalarBytes]; + PruneScalar(h, 0, s); + + ImplSign(d, h, s, pk, pkOff, ctx, phflag, m, mOff, mLen, sig, sigOff); + } + + private static bool ImplVerify(byte[] sig, int sigOff, byte[] pk, int pkOff, byte[] ctx, byte phflag, byte[] m, + int mOff, int mLen) + { + if (!CheckContextVar(ctx, phflag)) + throw new ArgumentException("ctx"); + + byte[] R = Copy(sig, sigOff, PointBytes); + byte[] S = Copy(sig, sigOff + PointBytes, ScalarBytes); + + if (!CheckPointVar(R)) + return false; + + uint[] nS = new uint[ScalarUints]; + if (!CheckScalarVar(S, nS)) + return false; + + Init(out PointAffine pA); + if (!DecodePointVar(pk, pkOff, true, ref pA)) + return false; + + IDigest d = CreateDigest(); + byte[] h = new byte[d.GetDigestSize()]; + + Dom2(d, phflag, ctx); + d.BlockUpdate(R, 0, PointBytes); + d.BlockUpdate(pk, pkOff, PointBytes); + d.BlockUpdate(m, mOff, mLen); + d.DoFinal(h, 0); + + byte[] k = ReduceScalar(h); + + uint[] nA = new uint[ScalarUints]; + DecodeScalar(k, 0, nA); + + Init(out PointAccum pR); + ScalarMultStrausVar(nS, nA, ref pA, ref pR); + + byte[] check = new byte[PointBytes]; + return 0 != EncodePoint(ref pR, check, 0) && Arrays.AreEqual(check, R); + } + + private static void Init(out PointAccum r) + { + r.x = F.Create(); + r.y = F.Create(); + r.z = F.Create(); + r.u = F.Create(); + r.v = F.Create(); + } + + private static void Init(out PointAffine r) + { + r.x = F.Create(); + r.y = F.Create(); + } + + private static void Init(out PointExtended r) + { + r.x = F.Create(); + r.y = F.Create(); + r.z = F.Create(); + r.t = F.Create(); + } + + private static void Init(out PointPrecomp r) + { + r.ymx_h = F.Create(); + r.ypx_h = F.Create(); + r.xyd = F.Create(); + } + + private static void Init(out PointPrecompZ r) + { + r.ymx_h = F.Create(); + r.ypx_h = F.Create(); + r.xyd = F.Create(); + r.z = F.Create(); + } + + private static void Init(out PointTemp r) + { + r.r0 = F.Create(); + r.r1 = F.Create(); + } + + private static void InvertDoubleZs(PointExtended[] points) + { + int count = points.Length; + int[] cs = F.CreateTable(count); + + int[] u = F.Create(); + F.Copy(points[0].z, 0, u, 0); + F.Copy(u, 0, cs, 0); + + int i = 0; + while (++i < count) + { + F.Mul(u, points[i].z, u); + F.Copy(u, 0, cs, i * F.Size); + } + + F.Add(u, u, u); + F.InvVar(u, u); + --i; + + int[] t = F.Create(); + + while (i > 0) + { + int j = i--; + F.Copy(cs, i * F.Size, t, 0); + F.Mul(t, u, t); + F.Mul(u, points[j].z, u); + F.Copy(t, 0, points[j].z, 0); + } + + F.Copy(u, 0, points[0].z, 0); + } + + private static bool IsNeutralElementVar(int[] x, int[] y) + { + return F.IsZeroVar(x) && F.IsOneVar(y); + } + + private static bool IsNeutralElementVar(int[] x, int[] y, int[] z) + { + return F.IsZeroVar(x) && F.AreEqualVar(y, z); + } + + private static void PointAdd(ref PointExtended p, ref PointExtended q, ref PointExtended r, ref PointTemp t) + { + // p may ref the same point as r (or q), but q may not ref the same point as r. + Debug.Assert(q.x != r.x & q.y != r.y && q.z != r.z && q.t != r.t); + + int[] a = r.x; + int[] b = r.y; + int[] c = t.r0; + int[] d = t.r1; + int[] e = a; + int[] f = c; + int[] g = d; + int[] h = b; + + F.Apm(p.y, p.x, b, a); + F.Apm(q.y, q.x, d, c); + F.Mul(a, c, a); + F.Mul(b, d, b); + F.Mul(p.t, q.t, c); + F.Mul(c, C_d2, c); + F.Add(p.z, p.z, d); + F.Mul(d, q.z, d); + F.Apm(b, a, h, e); + F.Apm(d, c, g, f); + F.Mul(e, h, r.t); + F.Mul(f, g, r.z); + F.Mul(e, f, r.x); + F.Mul(h, g, r.y); + } + + private static void PointAdd(ref PointPrecomp p, ref PointAccum r, ref PointTemp t) + { + int[] a = r.x; + int[] b = r.y; + int[] c = t.r0; + int[] e = r.u; + int[] f = a; + int[] g = b; + int[] h = r.v; + + F.Apm(r.y, r.x, b, a); + F.Mul(a, p.ymx_h, a); + F.Mul(b, p.ypx_h, b); + F.Mul(r.u, r.v, c); + F.Mul(c, p.xyd, c); + F.Apm(b, a, h, e); + F.Apm(r.z, c, g, f); + F.Mul(f, g, r.z); + F.Mul(f, e, r.x); + F.Mul(g, h, r.y); + } + + private static void PointAdd(ref PointPrecompZ p, ref PointAccum r, ref PointTemp t) + { + int[] a = r.x; + int[] b = r.y; + int[] c = t.r0; + int[] d = r.z; + int[] e = r.u; + int[] f = a; + int[] g = b; + int[] h = r.v; + + F.Apm(r.y, r.x, b, a); + F.Mul(a, p.ymx_h, a); + F.Mul(b, p.ypx_h, b); + F.Mul(r.u, r.v, c); + F.Mul(c, p.xyd, c); + F.Mul(r.z, p.z, d); + F.Apm(b, a, h, e); + F.Apm(d, c, g, f); + F.Mul(f, g, r.z); + F.Mul(f, e, r.x); + F.Mul(g, h, r.y); + } + + private static void PointAddVar(bool negate, ref PointPrecomp p, ref PointAccum r, ref PointTemp t) + { + int[] a = r.x; + int[] b = r.y; + int[] c = t.r0; + int[] e = r.u; + int[] f = a; + int[] g = b; + int[] h = r.v; + + int[] na, nb; + if (negate) + { + na = b; nb = a; + } + else + { + na = a; nb = b; + } + int[] nf = na, ng = nb; + + F.Apm(r.y, r.x, b, a); + F.Mul(na, p.ymx_h, na); + F.Mul(nb, p.ypx_h, nb); + F.Mul(r.u, r.v, c); + F.Mul(c, p.xyd, c); + F.Apm(b, a, h, e); + F.Apm(r.z, c, ng, nf); + F.Mul(f, g, r.z); + F.Mul(f, e, r.x); + F.Mul(g, h, r.y); + } + + private static void PointAddVar(bool negate, ref PointPrecompZ p, ref PointAccum r, ref PointTemp t) + { + int[] a = r.x; + int[] b = r.y; + int[] c = t.r0; + int[] d = r.z; + int[] e = r.u; + int[] f = a; + int[] g = b; + int[] h = r.v; + + int[] na, nb; + if (negate) + { + na = b; nb = a; + } + else + { + na = a; nb = b; + } + int[] nf = na, ng = nb; + + F.Apm(r.y, r.x, b, a); + F.Mul(na, p.ymx_h, na); + F.Mul(nb, p.ypx_h, nb); + F.Mul(r.u, r.v, c); + F.Mul(c, p.xyd, c); + F.Mul(r.z, p.z, d); + F.Apm(b, a, h, e); + F.Apm(d, c, ng, nf); + F.Mul(f, g, r.z); + F.Mul(f, e, r.x); + F.Mul(g, h, r.y); + } + + private static void PointCopy(ref PointAccum p, ref PointExtended r) + { + F.Copy(p.x, 0, r.x, 0); + F.Copy(p.y, 0, r.y, 0); + F.Copy(p.z, 0, r.z, 0); + F.Mul(p.u, p.v, r.t); + } + + private static void PointCopy(ref PointAffine p, ref PointExtended r) + { + F.Copy(p.x, 0, r.x, 0); + F.Copy(p.y, 0, r.y, 0); + F.One(r.z); + F.Mul(p.x, p.y, r.t); + } + + private static void PointCopy(ref PointExtended p, ref PointPrecompZ r) + { + // To avoid halving x and y, we double t and z instead. + F.Apm(p.y, p.x, r.ypx_h, r.ymx_h); + F.Mul(p.t, C_d2, r.xyd); + F.Add(p.z, p.z, r.z); + } + + private static void PointDouble(ref PointAccum r) + { + int[] a = r.x; + int[] b = r.y; + int[] c = r.z; + int[] e = r.u; + int[] f = a; + int[] g = b; + int[] h = r.v; + + F.Add(r.x, r.y, e); + F.Sqr(r.x, a); + F.Sqr(r.y, b); + F.Sqr(r.z, c); + F.Add(c, c, c); + F.Apm(a, b, h, g); + F.Sqr(e, e); + F.Sub(h, e, e); + F.Add(c, g, f); + F.Carry(f); // Probably unnecessary, but keep until better bounds analysis available + F.Mul(f, g, r.z); + F.Mul(f, e, r.x); + F.Mul(g, h, r.y); + } + + private static void PointLookup(int block, int index, ref PointPrecomp p) + { + Debug.Assert(0 <= block && block < PrecompBlocks); + Debug.Assert(0 <= index && index < PrecompPoints); + + int off = block * PrecompPoints * 3 * F.Size; + + for (int i = 0; i < PrecompPoints; ++i) + { + int cond = ((i ^ index) - 1) >> 31; + F.CMov(cond, PrecompBaseComb, off, p.ymx_h, 0); off += F.Size; + F.CMov(cond, PrecompBaseComb, off, p.ypx_h, 0); off += F.Size; + F.CMov(cond, PrecompBaseComb, off, p.xyd , 0); off += F.Size; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void PointLookupZ(ReadOnlySpan x, int n, ReadOnlySpan table, ref PointPrecompZ r) + { + // TODO This method is currently hard-coded to 4-bit windows and 8 precomputed points + + uint w = GetWindow4(x, n); + + int sign = (int)(w >> (4 - 1)) ^ 1; + int abs = ((int)w ^ -sign) & 7; + + Debug.Assert(sign == 0 || sign == 1); + Debug.Assert(0 <= abs && abs < 8); + + for (int i = 0; i < 8; ++i) + { + int cond = ((i ^ abs) - 1) >> 31; + F.CMov(cond, table, r.ymx_h); table = table[F.Size..]; + F.CMov(cond, table, r.ypx_h); table = table[F.Size..]; + F.CMov(cond, table, r.xyd); table = table[F.Size..]; + F.CMov(cond, table, r.z); table = table[F.Size..]; + } + + F.CSwap(sign, r.ymx_h, r.ypx_h); + F.CNegate(sign, r.xyd); + } +#else + private static void PointLookupZ(uint[] x, int n, int[] table, ref PointPrecompZ r) + { + // TODO This method is currently hard-coded to 4-bit windows and 8 precomputed points + + uint w = GetWindow4(x, n); + + int sign = (int)(w >> (4 - 1)) ^ 1; + int abs = ((int)w ^ -sign) & 7; + + Debug.Assert(sign == 0 || sign == 1); + Debug.Assert(0 <= abs && abs < 8); + + for (int i = 0, off = 0; i < 8; ++i) + { + int cond = ((i ^ abs) - 1) >> 31; + F.CMov(cond, table, off, r.ymx_h, 0); off += F.Size; + F.CMov(cond, table, off, r.ypx_h, 0); off += F.Size; + F.CMov(cond, table, off, r.xyd , 0); off += F.Size; + F.CMov(cond, table, off, r.z , 0); off += F.Size; + } + + F.CSwap(sign, r.ymx_h, r.ypx_h); + F.CNegate(sign, r.xyd); + } +#endif + + private static void PointPrecompute(ref PointAffine p, PointExtended[] points, int count, ref PointTemp t) + { + Debug.Assert(count > 0); + + Init(out points[0]); + PointCopy(ref p, ref points[0]); + + Init(out PointExtended d); + PointAdd(ref points[0], ref points[0], ref d, ref t); + + for (int i = 1; i < count; ++i) + { + Init(out points[i]); + PointAdd(ref points[i - 1], ref d, ref points[i], ref t); + } + } + + private static int[] PointPrecomputeZ(ref PointAffine p, int count, ref PointTemp t) + { + Debug.Assert(count > 0); + + Init(out PointExtended q); + PointCopy(ref p, ref q); + + Init(out PointExtended d); + PointAdd(ref q, ref q, ref d, ref t); + + Init(out PointPrecompZ r); + int[] table = F.CreateTable(count * 4); + int off = 0; + + int i = 0; + for (;;) + { + PointCopy(ref q, ref r); + + F.Copy(r.ymx_h, 0, table, off); off += F.Size; + F.Copy(r.ypx_h, 0, table, off); off += F.Size; + F.Copy(r.xyd , 0, table, off); off += F.Size; + F.Copy(r.z , 0, table, off); off += F.Size; + + if (++i == count) + break; + + PointAdd(ref q, ref d, ref q, ref t); + } + + return table; + } + + private static void PointPrecomputeZ(ref PointAffine p, PointPrecompZ[] points, int count, ref PointTemp t) + { + Debug.Assert(count > 0); + + Init(out PointExtended q); + PointCopy(ref p, ref q); + + Init(out PointExtended d); + PointAdd(ref q, ref q, ref d, ref t); + + int i = 0; + for (;;) + { + ref PointPrecompZ r = ref points[i]; + Init(out r); + PointCopy(ref q, ref r); + + if (++i == count) + break; + + PointAdd(ref q, ref d, ref q, ref t); + } + } + + private static void PointSetNeutral(ref PointAccum p) + { + F.Zero(p.x); + F.One(p.y); + F.One(p.z); + F.Zero(p.u); + F.One(p.v); + } + + public static void Precompute() + { + lock (PrecompLock) + { + if (PrecompBaseWnaf != null && PrecompBaseComb != null) + return; + + int wnafPoints = 1 << (WnafWidthBase - 2); + int combPoints = PrecompBlocks * PrecompPoints; + int totalPoints = wnafPoints + combPoints; + + PointExtended[] points = new PointExtended[totalPoints]; + Init(out PointTemp t); + + Init(out PointAffine b); + F.Copy(B_x, 0, b.x, 0); + F.Copy(B_y, 0, b.y, 0); + + PointPrecompute(ref b, points, wnafPoints, ref t); + + Init(out PointAccum p); + F.Copy(B_x, 0, p.x, 0); + F.Copy(B_y, 0, p.y, 0); + F.One(p.z); + F.Copy(B_x, 0, p.u, 0); + F.Copy(B_y, 0, p.v, 0); + + int pointsIndex = wnafPoints; + PointExtended[] toothPowers = new PointExtended[PrecompTeeth]; + for (int tooth = 0; tooth < PrecompTeeth; ++tooth) + { + Init(out toothPowers[tooth]); + } + Init(out PointExtended u); + for (int block = 0; block < PrecompBlocks; ++block) + { + ref PointExtended sum = ref points[pointsIndex++]; + Init(out sum); + + for (int tooth = 0; tooth < PrecompTeeth; ++tooth) + { + if (tooth == 0) + { + PointCopy(ref p, ref sum); + } + else + { + PointCopy(ref p, ref u); + PointAdd(ref sum, ref u, ref sum, ref t); + } + + PointDouble(ref p); + PointCopy(ref p, ref toothPowers[tooth]); + + if (block + tooth != PrecompBlocks + PrecompTeeth - 2) + { + for (int spacing = 1; spacing < PrecompSpacing; ++spacing) + { + PointDouble(ref p); + } + } + } + + F.Negate(sum.x, sum.x); + F.Negate(sum.t, sum.t); + + for (int tooth = 0; tooth < (PrecompTeeth - 1); ++tooth) + { + int size = 1 << tooth; + for (int j = 0; j < size; ++j, ++pointsIndex) + { + Init(out points[pointsIndex]); + PointAdd(ref points[pointsIndex - size], ref toothPowers[tooth], ref points[pointsIndex], + ref t); + } + } + } + Debug.Assert(pointsIndex == totalPoints); + + // Set each z coordinate to 1/(2.z) to avoid calculating halves of x, y in the following code + InvertDoubleZs(points); + + PrecompBaseWnaf = new PointPrecomp[wnafPoints]; + for (int i = 0; i < wnafPoints; ++i) + { + ref PointExtended q = ref points[i]; + ref PointPrecomp r = ref PrecompBaseWnaf[i]; + Init(out r); + + // Calculate x/2 and y/2 (because the z value holds half the inverse; see above). + F.Mul(q.x, q.z, q.x); + F.Mul(q.y, q.z, q.y); + + // y/2 +/- x/2 + F.Apm(q.y, q.x, r.ypx_h, r.ymx_h); + + // x/2 * y/2 * (4.d) == x.y.d + F.Mul(q.x, q.y, r.xyd); + F.Mul(r.xyd, C_d4, r.xyd); + + F.Normalize(r.ymx_h); + F.Normalize(r.ypx_h); + F.Normalize(r.xyd); + } + + PrecompBaseComb = F.CreateTable(combPoints * 3); + Init(out PointPrecomp s); + int off = 0; + for (int i = wnafPoints; i < totalPoints; ++i) + { + ref PointExtended q = ref points[i]; + + // Calculate x/2 and y/2 (because the z value holds half the inverse; see above). + F.Mul(q.x, q.z, q.x); + F.Mul(q.y, q.z, q.y); + + // y/2 +/- x/2 + F.Apm(q.y, q.x, s.ypx_h, s.ymx_h); + + // x/2 * y/2 * (4.d) == x.y.d + F.Mul(q.x, q.y, s.xyd); + F.Mul(s.xyd, C_d4, s.xyd); + + F.Normalize(s.ymx_h); + F.Normalize(s.ypx_h); + F.Normalize(s.xyd); + + F.Copy(s.ymx_h, 0, PrecompBaseComb, off); off += F.Size; + F.Copy(s.ypx_h, 0, PrecompBaseComb, off); off += F.Size; + F.Copy(s.xyd , 0, PrecompBaseComb, off); off += F.Size; + } + Debug.Assert(off == PrecompBaseComb.Length); + } + } + + private static void PruneScalar(byte[] n, int nOff, byte[] r) + { + Array.Copy(n, nOff, r, 0, ScalarBytes); + + r[0] &= 0xF8; + r[ScalarBytes - 1] &= 0x7F; + r[ScalarBytes - 1] |= 0x40; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void PruneScalar(ReadOnlySpan n, Span r) + { + n[..ScalarBytes].CopyTo(r); + + r[0] &= 0xF8; + r[ScalarBytes - 1] &= 0x7F; + r[ScalarBytes - 1] |= 0x40; + } +#endif + + private static byte[] ReduceScalar(byte[] n) + { + long x00 = Decode32(n, 0) & M32L; // x00:32/-- + long x01 = (Decode24(n, 4) << 4) & M32L; // x01:28/-- + long x02 = Decode32(n, 7) & M32L; // x02:32/-- + long x03 = (Decode24(n, 11) << 4) & M32L; // x03:28/-- + long x04 = Decode32(n, 14) & M32L; // x04:32/-- + long x05 = (Decode24(n, 18) << 4) & M32L; // x05:28/-- + long x06 = Decode32(n, 21) & M32L; // x06:32/-- + long x07 = (Decode24(n, 25) << 4) & M32L; // x07:28/-- + long x08 = Decode32(n, 28) & M32L; // x08:32/-- + long x09 = (Decode24(n, 32) << 4) & M32L; // x09:28/-- + long x10 = Decode32(n, 35) & M32L; // x10:32/-- + long x11 = (Decode24(n, 39) << 4) & M32L; // x11:28/-- + long x12 = Decode32(n, 42) & M32L; // x12:32/-- + long x13 = (Decode24(n, 46) << 4) & M32L; // x13:28/-- + long x14 = Decode32(n, 49) & M32L; // x14:32/-- + long x15 = (Decode24(n, 53) << 4) & M32L; // x15:28/-- + long x16 = Decode32(n, 56) & M32L; // x16:32/-- + long x17 = (Decode24(n, 60) << 4) & M32L; // x17:28/-- + long x18 = n[63] & M08L; // x18:08/-- + long t; + + //x18 += (x17 >> 28); x17 &= M28L; + x09 -= x18 * L0; // x09:34/28 + x10 -= x18 * L1; // x10:33/30 + x11 -= x18 * L2; // x11:35/28 + x12 -= x18 * L3; // x12:32/31 + x13 -= x18 * L4; // x13:28/21 + + x17 += (x16 >> 28); x16 &= M28L; // x17:28/--, x16:28/-- + x08 -= x17 * L0; // x08:54/32 + x09 -= x17 * L1; // x09:52/51 + x10 -= x17 * L2; // x10:55/34 + x11 -= x17 * L3; // x11:51/36 + x12 -= x17 * L4; // x12:41/-- + + //x16 += (x15 >> 28); x15 &= M28L; + x07 -= x16 * L0; // x07:54/28 + x08 -= x16 * L1; // x08:54/53 + x09 -= x16 * L2; // x09:55/53 + x10 -= x16 * L3; // x10:55/52 + x11 -= x16 * L4; // x11:51/41 + + x15 += (x14 >> 28); x14 &= M28L; // x15:28/--, x14:28/-- + x06 -= x15 * L0; // x06:54/32 + x07 -= x15 * L1; // x07:54/53 + x08 -= x15 * L2; // x08:56/-- + x09 -= x15 * L3; // x09:55/54 + x10 -= x15 * L4; // x10:55/53 + + //x14 += (x13 >> 28); x13 &= M28L; + x05 -= x14 * L0; // x05:54/28 + x06 -= x14 * L1; // x06:54/53 + x07 -= x14 * L2; // x07:56/-- + x08 -= x14 * L3; // x08:56/51 + x09 -= x14 * L4; // x09:56/-- + + x13 += (x12 >> 28); x12 &= M28L; // x13:28/22, x12:28/-- + x04 -= x13 * L0; // x04:54/49 + x05 -= x13 * L1; // x05:54/53 + x06 -= x13 * L2; // x06:56/-- + x07 -= x13 * L3; // x07:56/52 + x08 -= x13 * L4; // x08:56/52 + + x12 += (x11 >> 28); x11 &= M28L; // x12:28/24, x11:28/-- + x03 -= x12 * L0; // x03:54/49 + x04 -= x12 * L1; // x04:54/51 + x05 -= x12 * L2; // x05:56/-- + x06 -= x12 * L3; // x06:56/52 + x07 -= x12 * L4; // x07:56/53 + + x11 += (x10 >> 28); x10 &= M28L; // x11:29/--, x10:28/-- + x02 -= x11 * L0; // x02:55/32 + x03 -= x11 * L1; // x03:55/-- + x04 -= x11 * L2; // x04:56/55 + x05 -= x11 * L3; // x05:56/52 + x06 -= x11 * L4; // x06:56/53 + + x10 += (x09 >> 28); x09 &= M28L; // x10:29/--, x09:28/-- + x01 -= x10 * L0; // x01:55/28 + x02 -= x10 * L1; // x02:55/54 + x03 -= x10 * L2; // x03:56/55 + x04 -= x10 * L3; // x04:57/-- + x05 -= x10 * L4; // x05:56/53 + + x08 += (x07 >> 28); x07 &= M28L; // x08:56/53, x07:28/-- + x09 += (x08 >> 28); x08 &= M28L; // x09:29/25, x08:28/-- + + t = (x08 >> 27) & 1L; + x09 += t; // x09:29/26 + + x00 -= x09 * L0; // x00:55/53 + x01 -= x09 * L1; // x01:55/54 + x02 -= x09 * L2; // x02:57/-- + x03 -= x09 * L3; // x03:57/-- + x04 -= x09 * L4; // x04:57/42 + + x01 += (x00 >> 28); x00 &= M28L; + x02 += (x01 >> 28); x01 &= M28L; + x03 += (x02 >> 28); x02 &= M28L; + x04 += (x03 >> 28); x03 &= M28L; + x05 += (x04 >> 28); x04 &= M28L; + x06 += (x05 >> 28); x05 &= M28L; + x07 += (x06 >> 28); x06 &= M28L; + x08 += (x07 >> 28); x07 &= M28L; + x09 = (x08 >> 28); x08 &= M28L; + + x09 -= t; + + Debug.Assert(x09 == 0L || x09 == -1L); + + x00 += x09 & L0; + x01 += x09 & L1; + x02 += x09 & L2; + x03 += x09 & L3; + x04 += x09 & L4; + + x01 += (x00 >> 28); x00 &= M28L; + x02 += (x01 >> 28); x01 &= M28L; + x03 += (x02 >> 28); x02 &= M28L; + x04 += (x03 >> 28); x03 &= M28L; + x05 += (x04 >> 28); x04 &= M28L; + x06 += (x05 >> 28); x05 &= M28L; + x07 += (x06 >> 28); x06 &= M28L; + x08 += (x07 >> 28); x07 &= M28L; + + byte[] r = new byte[ScalarBytes]; + Encode56((ulong)(x00 | (x01 << 28)), r, 0); + Encode56((ulong)(x02 | (x03 << 28)), r, 7); + Encode56((ulong)(x04 | (x05 << 28)), r, 14); + Encode56((ulong)(x06 | (x07 << 28)), r, 21); + Encode32((uint)x08, r, 28); + return r; + } + + private static void ScalarMult(byte[] k, ref PointAffine p, ref PointAccum r) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ScalarMult(k.AsSpan(), ref p, ref r); +#else + uint[] n = new uint[ScalarUints]; + DecodeScalar(k, 0, n); + + // Recode the scalar into signed-digit form + { + uint c1 = Nat.CAdd(ScalarUints, ~(int)n[0] & 1, n, L, n); Debug.Assert(c1 == 0U); + uint c2 = Nat.ShiftDownBit(ScalarUints, n, 1U); Debug.Assert(c2 == (1U << 31)); + } + + Init(out PointPrecompZ q); + Init(out PointTemp t); + int[] table = PointPrecomputeZ(ref p, 8, ref t); + + PointSetNeutral(ref r); + + int w = 63; + for (;;) + { + PointLookupZ(n, w, table, ref q); + PointAdd(ref q, ref r, ref t); + + if (--w < 0) + break; + + for (int i = 0; i < 4; ++i) + { + PointDouble(ref r); + } + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void ScalarMult(ReadOnlySpan k, ref PointAffine p, ref PointAccum r) + { + Span n = stackalloc uint[ScalarUints]; + DecodeScalar(k, n); + + // Recode the scalar into signed-digit form + { + uint c1 = Nat.CAdd(ScalarUints, ~(int)n[0] & 1, n, L, n); Debug.Assert(c1 == 0U); + uint c2 = Nat.ShiftDownBit(ScalarUints, n, 1U); Debug.Assert(c2 == (1U << 31)); + } + + Init(out PointPrecompZ q); + Init(out PointTemp t); + int[] table = PointPrecomputeZ(ref p, 8, ref t); + + PointSetNeutral(ref r); + + int w = 63; + for (;;) + { + PointLookupZ(n, w, table, ref q); + PointAdd(ref q, ref r, ref t); + + if (--w < 0) + break; + + for (int i = 0; i < 4; ++i) + { + PointDouble(ref r); + } + } + } +#endif + + private static void ScalarMultBase(byte[] k, ref PointAccum r) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ScalarMultBase(k.AsSpan(), ref r); +#else + // Equivalent (but much slower) + //Init(out PointAffine p); + //F.Copy(B_x, 0, p.x, 0); + //F.Copy(B_y, 0, p.y, 0); + //ScalarMult(k, ref p, ref r); + + Precompute(); + + uint[] n = new uint[ScalarUints]; + DecodeScalar(k, 0, n); + + // Recode the scalar into signed-digit form, then group comb bits in each block + { + uint c1 = Nat.CAdd(ScalarUints, ~(int)n[0] & 1, n, L, n); Debug.Assert(c1 == 0U); + uint c2 = Nat.ShiftDownBit(ScalarUints, n, 1U); Debug.Assert(c2 == (1U << 31)); + + /* + * Because we are using 4 teeth and 8 spacing, each limb of n corresponds to one of the 8 blocks. + * Therefore we can efficiently group the bits for each comb position using a (double) shuffle. + */ + for (int i = 0; i < ScalarUints; ++i) + { + n[i] = Interleave.Shuffle2(n[i]); + } + } + + Init(out PointPrecomp p); + Init(out PointTemp t); + + PointSetNeutral(ref r); + int resultSign = 0; + + int cOff = (PrecompSpacing - 1) * PrecompTeeth; + for (;;) + { + for (int b = 0; b < PrecompBlocks; ++b) + { + uint w = n[b] >> cOff; + int sign = (int)(w >> (PrecompTeeth - 1)) & 1; + int abs = ((int)w ^ -sign) & PrecompMask; + + Debug.Assert(sign == 0 || sign == 1); + Debug.Assert(0 <= abs && abs < PrecompPoints); + + PointLookup(b, abs, ref p); + + F.CNegate(resultSign ^ sign, r.x); + F.CNegate(resultSign ^ sign, r.u); + resultSign = sign; + + PointAdd(ref p, ref r, ref t); + } + + if ((cOff -= PrecompTeeth) < 0) + break; + + PointDouble(ref r); + } + + F.CNegate(resultSign, r.x); + F.CNegate(resultSign, r.u); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void ScalarMultBase(ReadOnlySpan k, ref PointAccum r) + { + // Equivalent (but much slower) + //Init(out PointAffine p); + //F.Copy(B_x, 0, p.x, 0); + //F.Copy(B_y, 0, p.y, 0); + //ScalarMult(k, ref p, ref r); + + Precompute(); + + Span n = stackalloc uint[ScalarUints]; + DecodeScalar(k, n); + + // Recode the scalar into signed-digit form, then group comb bits in each block + { + uint c1 = Nat.CAdd(ScalarUints, ~(int)n[0] & 1, n, L, n); Debug.Assert(c1 == 0U); + uint c2 = Nat.ShiftDownBit(ScalarUints, n, 1U); Debug.Assert(c2 == (1U << 31)); + + /* + * Because we are using 4 teeth and 8 spacing, each limb of n corresponds to one of the 8 blocks. + * Therefore we can efficiently group the bits for each comb position using a (double) shuffle. + */ + for (int i = 0; i < ScalarUints; ++i) + { + n[i] = Interleave.Shuffle2(n[i]); + } + } + + Init(out PointPrecomp p); + Init(out PointTemp t); + + PointSetNeutral(ref r); + int resultSign = 0; + + int cOff = (PrecompSpacing - 1) * PrecompTeeth; + for (;;) + { + for (int b = 0; b < PrecompBlocks; ++b) + { + uint w = n[b] >> cOff; + int sign = (int)(w >> (PrecompTeeth - 1)) & 1; + int abs = ((int)w ^ -sign) & PrecompMask; + + Debug.Assert(sign == 0 || sign == 1); + Debug.Assert(0 <= abs && abs < PrecompPoints); + + PointLookup(b, abs, ref p); + + F.CNegate(resultSign ^ sign, r.x); + F.CNegate(resultSign ^ sign, r.u); + resultSign = sign; + + PointAdd(ref p, ref r, ref t); + } + + if ((cOff -= PrecompTeeth) < 0) + break; + + PointDouble(ref r); + } + + F.CNegate(resultSign, r.x); + F.CNegate(resultSign, r.u); + } +#endif + + private static void ScalarMultBaseEncoded(byte[] k, byte[] r, int rOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ScalarMultBaseEncoded(k.AsSpan(), r.AsSpan(rOff)); +#else + Init(out PointAccum p); + ScalarMultBase(k, ref p); + if (0 == EncodePoint(ref p, r, rOff)) + throw new InvalidOperationException(); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void ScalarMultBaseEncoded(ReadOnlySpan k, Span r) + { + Init(out PointAccum p); + ScalarMultBase(k, ref p); + if (0 == EncodePoint(ref p, r)) + throw new InvalidOperationException(); + } +#endif + + internal static void ScalarMultBaseYZ(byte[] k, int kOff, int[] y, int[] z) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ScalarMultBaseYZ(k.AsSpan(kOff), y.AsSpan(), z.AsSpan()); +#else + byte[] n = new byte[ScalarBytes]; + PruneScalar(k, kOff, n); + + Init(out PointAccum p); + ScalarMultBase(n, ref p); + + if (0 == CheckPoint(p.x, p.y, p.z)) + throw new InvalidOperationException(); + + F.Copy(p.y, 0, y, 0); + F.Copy(p.z, 0, z, 0); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal static void ScalarMultBaseYZ(ReadOnlySpan k, Span y, Span z) + { + Span n = stackalloc byte[ScalarBytes]; + PruneScalar(k, n); + + Init(out PointAccum p); + ScalarMultBase(n, ref p); + + if (0 == CheckPoint(p.x, p.y, p.z)) + throw new InvalidOperationException(); + + F.Copy(p.y, y); + F.Copy(p.z, z); + } +#endif + + private static void ScalarMultOrderVar(ref PointAffine p, ref PointAccum r) + { + sbyte[] ws_p = GetWnafVar(L, WnafWidth); + + int count = 1 << (WnafWidth - 2); + PointPrecompZ[] tp = new PointPrecompZ[count]; + Init(out PointTemp t); + PointPrecomputeZ(ref p, tp, count, ref t); + + PointSetNeutral(ref r); + + for (int bit = 252;;) + { + int wp = ws_p[bit]; + if (wp != 0) + { + int sign = wp >> 31; + int index = (wp ^ sign) >> 1; + + PointAddVar(sign != 0, ref tp[index], ref r, ref t); + } + + if (--bit < 0) + break; + + PointDouble(ref r); + } + } + + private static void ScalarMultStrausVar(uint[] nb, uint[] np, ref PointAffine p, ref PointAccum r) + { + Precompute(); + + sbyte[] ws_b = GetWnafVar(nb, WnafWidthBase); + sbyte[] ws_p = GetWnafVar(np, WnafWidth); + + int count = 1 << (WnafWidth - 2); + PointPrecompZ[] tp = new PointPrecompZ[count]; + Init(out PointTemp t); + PointPrecomputeZ(ref p, tp, count, ref t); + + PointSetNeutral(ref r); + + for (int bit = 252;;) + { + int wb = ws_b[bit]; + if (wb != 0) + { + int sign = wb >> 31; + int index = (wb ^ sign) >> 1; + + PointAddVar(sign != 0, ref PrecompBaseWnaf[index], ref r, ref t); + } + + int wp = ws_p[bit]; + if (wp != 0) + { + int sign = wp >> 31; + int index = (wp ^ sign) >> 1; + + PointAddVar(sign != 0, ref tp[index], ref r, ref t); + } + + if (--bit < 0) + break; + + PointDouble(ref r); + } + } + + public static void Sign(byte[] sk, int skOff, byte[] m, int mOff, int mLen, byte[] sig, int sigOff) + { + byte[] ctx = null; + byte phflag = 0x00; + + ImplSign(sk, skOff, ctx, phflag, m, mOff, mLen, sig, sigOff); + } + + public static void Sign(byte[] sk, int skOff, byte[] pk, int pkOff, byte[] m, int mOff, int mLen, byte[] sig, int sigOff) + { + byte[] ctx = null; + byte phflag = 0x00; + + ImplSign(sk, skOff, pk, pkOff, ctx, phflag, m, mOff, mLen, sig, sigOff); + } + + public static void Sign(byte[] sk, int skOff, byte[] ctx, byte[] m, int mOff, int mLen, byte[] sig, int sigOff) + { + byte phflag = 0x00; + + ImplSign(sk, skOff, ctx, phflag, m, mOff, mLen, sig, sigOff); + } + + public static void Sign(byte[] sk, int skOff, byte[] pk, int pkOff, byte[] ctx, byte[] m, int mOff, int mLen, byte[] sig, int sigOff) + { + byte phflag = 0x00; + + ImplSign(sk, skOff, pk, pkOff, ctx, phflag, m, mOff, mLen, sig, sigOff); + } + + public static void SignPrehash(byte[] sk, int skOff, byte[] ctx, byte[] ph, int phOff, byte[] sig, int sigOff) + { + byte phflag = 0x01; + + ImplSign(sk, skOff, ctx, phflag, ph, phOff, PrehashSize, sig, sigOff); + } + + public static void SignPrehash(byte[] sk, int skOff, byte[] pk, int pkOff, byte[] ctx, byte[] ph, int phOff, byte[] sig, int sigOff) + { + byte phflag = 0x01; + + ImplSign(sk, skOff, pk, pkOff, ctx, phflag, ph, phOff, PrehashSize, sig, sigOff); + } + + public static void SignPrehash(byte[] sk, int skOff, byte[] ctx, IDigest ph, byte[] sig, int sigOff) + { + byte[] m = new byte[PrehashSize]; + if (PrehashSize != ph.DoFinal(m, 0)) + throw new ArgumentException("ph"); + + byte phflag = 0x01; + + ImplSign(sk, skOff, ctx, phflag, m, 0, m.Length, sig, sigOff); + } + + public static void SignPrehash(byte[] sk, int skOff, byte[] pk, int pkOff, byte[] ctx, IDigest ph, byte[] sig, int sigOff) + { + byte[] m = new byte[PrehashSize]; + if (PrehashSize != ph.DoFinal(m, 0)) + throw new ArgumentException("ph"); + + byte phflag = 0x01; + + ImplSign(sk, skOff, pk, pkOff, ctx, phflag, m, 0, m.Length, sig, sigOff); + } + + public static bool ValidatePublicKeyFull(byte[] pk, int pkOff) + { + Init(out PointAffine p); + if (!DecodePointVar(pk, pkOff, false, ref p)) + return false; + + F.Normalize(p.x); + F.Normalize(p.y); + + if (IsNeutralElementVar(p.x, p.y)) + return false; + + Init(out PointAccum r); + ScalarMultOrderVar(ref p, ref r); + + F.Normalize(r.x); + F.Normalize(r.y); + F.Normalize(r.z); + + return IsNeutralElementVar(r.x, r.y, r.z); + } + + public static bool ValidatePublicKeyPartial(byte[] pk, int pkOff) + { + Init(out PointAffine p); + return DecodePointVar(pk, pkOff, false, ref p); + } + + public static bool Verify(byte[] sig, int sigOff, byte[] pk, int pkOff, byte[] m, int mOff, int mLen) + { + byte[] ctx = null; + byte phflag = 0x00; + + return ImplVerify(sig, sigOff, pk, pkOff, ctx, phflag, m, mOff, mLen); + } + + public static bool Verify(byte[] sig, int sigOff, byte[] pk, int pkOff, byte[] ctx, byte[] m, int mOff, int mLen) + { + byte phflag = 0x00; + + return ImplVerify(sig, sigOff, pk, pkOff, ctx, phflag, m, mOff, mLen); + } + + public static bool VerifyPrehash(byte[] sig, int sigOff, byte[] pk, int pkOff, byte[] ctx, byte[] ph, int phOff) + { + byte phflag = 0x01; + + return ImplVerify(sig, sigOff, pk, pkOff, ctx, phflag, ph, phOff, PrehashSize); + } + + public static bool VerifyPrehash(byte[] sig, int sigOff, byte[] pk, int pkOff, byte[] ctx, IDigest ph) + { + byte[] m = new byte[PrehashSize]; + if (PrehashSize != ph.DoFinal(m, 0)) + throw new ArgumentException("ph"); + + byte phflag = 0x01; + + return ImplVerify(sig, sigOff, pk, pkOff, ctx, phflag, m, 0, m.Length); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc8032/Ed25519.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc8032/Ed25519.cs.meta new file mode 100644 index 000000000..0d10e44b5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc8032/Ed25519.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3713f23ee528ab4449a9c50481c6fd2b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc8032/Ed448.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc8032/Ed448.cs new file mode 100644 index 000000000..9f0348984 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc8032/Ed448.cs @@ -0,0 +1,1806 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc8032 +{ + using F = Rfc7748.X448Field; + + /// + /// A low-level implementation of the Ed448 and Ed448ph instantiations of the Edwards-Curve Digital Signature + /// Algorithm specified in RFC 8032. + /// + /// + /// The implementation uses the "signed mult-comb" algorithm (for scalar multiplication by a fixed point) from + /// Mike Hamburg, "Fast and compact elliptic-curve cryptography". Standard + /// projective coordinates are used + /// for most point arithmetic. + /// + public static class Ed448 + { + // x^2 + y^2 == 1 - 39081 * x^2 * y^2 + + public enum Algorithm + { + Ed448 = 0, + Ed448ph = 1, + } + + private const ulong M26UL = 0x03FFFFFFUL; + private const ulong M28UL = 0x0FFFFFFFUL; + + private const int CoordUints = 14; + private const int PointBytes = CoordUints * 4 + 1; + private const int ScalarUints = 14; + private const int ScalarBytes = ScalarUints * 4 + 1; + + public static readonly int PrehashSize = 64; + public static readonly int PublicKeySize = PointBytes; + public static readonly int SecretKeySize = 57; + public static readonly int SignatureSize = PointBytes + ScalarBytes; + + // "SigEd448" + private static readonly byte[] Dom4Prefix = new byte[]{ 0x53, 0x69, 0x67, 0x45, 0x64, 0x34, 0x34, 0x38 }; + + private static readonly uint[] P = { 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU }; + private static readonly uint[] L = { 0xAB5844F3U, 0x2378C292U, 0x8DC58F55U, 0x216CC272U, 0xAED63690U, 0xC44EDB49U, 0x7CCA23E9U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU }; + + private const int L_0 = 0x04A7BB0D; // L_0:26/24 + private const int L_1 = 0x0873D6D5; // L_1:27/23 + private const int L_2 = 0x0A70AADC; // L_2:27/26 + private const int L_3 = 0x03D8D723; // L_3:26/-- + private const int L_4 = 0x096FDE93; // L_4:27/25 + private const int L_5 = 0x0B65129C; // L_5:27/26 + private const int L_6 = 0x063BB124; // L_6:27/-- + private const int L_7 = 0x08335DC1; // L_7:27/22 + + private const int L4_0 = 0x029EEC34; // L4_0:25/24 + private const int L4_1 = 0x01CF5B55; // L4_1:25/-- + private const int L4_2 = 0x09C2AB72; // L4_2:27/25 + private const int L4_3 = 0x0F635C8E; // L4_3:28/-- + private const int L4_4 = 0x05BF7A4C; // L4_4:26/25 + private const int L4_5 = 0x0D944A72; // L4_5:28/-- + private const int L4_6 = 0x08EEC492; // L4_6:27/24 + private const int L4_7 = 0x20CD7705; // L4_7:29/24 + + private static readonly uint[] B_x = { 0x070CC05EU, 0x026A82BCU, 0x00938E26U, 0x080E18B0U, 0x0511433BU, 0x0F72AB66U, 0x0412AE1AU, + 0x0A3D3A46U, 0x0A6DE324U, 0x00F1767EU, 0x04657047U, 0x036DA9E1U, 0x05A622BFU, 0x0ED221D1U, 0x066BED0DU, 0x04F1970CU }; + private static readonly uint[] B_y = { 0x0230FA14U, 0x008795BFU, 0x07C8AD98U, 0x0132C4EDU, 0x09C4FDBDU, 0x01CE67C3U, 0x073AD3FFU, + 0x005A0C2DU, 0x07789C1EU, 0x0A398408U, 0x0A73736CU, 0x0C7624BEU, 0x003756C9U, 0x02488762U, 0x016EB6BCU, 0x0693F467U }; + private const int C_d = -39081; + + private const int WnafWidth = 5; + private const int WnafWidthBase = 7; + + // ScalarMultBase supports varying blocks, teeth, spacing so long as their product is in range [449, 479] + private const int PrecompBlocks = 5; + private const int PrecompTeeth = 5; + private const int PrecompSpacing = 18; + private const int PrecompRange = PrecompBlocks * PrecompTeeth * PrecompSpacing; // 448 < range < 480 + private const int PrecompPoints = 1 << (PrecompTeeth - 1); + private const int PrecompMask = PrecompPoints - 1; + + private static readonly object PrecompLock = new object(); + private static PointAffine[] PrecompBaseWnaf = null; + private static uint[] PrecompBaseComb = null; + + private struct PointAffine + { + internal uint[] x, y; + } + + private struct PointProjective + { + internal uint[] x, y, z; + } + + private static byte[] CalculateS(byte[] r, byte[] k, byte[] s) + { + uint[] t = new uint[ScalarUints * 2]; DecodeScalar(r, 0, t); + uint[] u = new uint[ScalarUints]; DecodeScalar(k, 0, u); + uint[] v = new uint[ScalarUints]; DecodeScalar(s, 0, v); + + Nat.MulAddTo(ScalarUints, u, v, t); + + byte[] result = new byte[ScalarBytes * 2]; + for (int i = 0; i < t.Length; ++i) + { + Encode32(t[i], result, i * 4); + } + return ReduceScalar(result); + } + + private static bool CheckContextVar(byte[] ctx) + { + return ctx != null && ctx.Length < 256; + } + + private static int CheckPoint(uint[] x, uint[] y) + { + uint[] t = F.Create(); + uint[] u = F.Create(); + uint[] v = F.Create(); + + F.Sqr(x, u); + F.Sqr(y, v); + F.Mul(u, v, t); + F.Add(u, v, u); + F.Mul(t, -C_d, t); + F.SubOne(t); + F.Add(t, u, t); + F.Normalize(t); + + return F.IsZero(t); + } + + private static int CheckPoint(uint[] x, uint[] y, uint[] z) + { + uint[] t = F.Create(); + uint[] u = F.Create(); + uint[] v = F.Create(); + uint[] w = F.Create(); + + F.Sqr(x, u); + F.Sqr(y, v); + F.Sqr(z, w); + F.Mul(u, v, t); + F.Add(u, v, u); + F.Mul(u, w, u); + F.Sqr(w, w); + F.Mul(t, -C_d, t); + F.Sub(t, w, t); + F.Add(t, u, t); + F.Normalize(t); + + return F.IsZero(t); + } + + private static bool CheckPointVar(byte[] p) + { + if ((p[PointBytes - 1] & 0x7F) != 0x00) + return false; + + uint[] t = new uint[CoordUints]; + Decode32(p, 0, t, 0, CoordUints); + return !Nat.Gte(CoordUints, t, P); + } + + private static bool CheckScalarVar(byte[] s, uint[] n) + { + if (s[ScalarBytes - 1] != 0x00) + return false; + + DecodeScalar(s, 0, n); + return !Nat.Gte(ScalarUints, n, L); + } + + private static byte[] Copy(byte[] buf, int off, int len) + { + byte[] result = new byte[len]; + Array.Copy(buf, off, result, 0, len); + return result; + } + + public static IXof CreatePrehash() + { + return CreateXof(); + } + + private static IXof CreateXof() + { + return new ShakeDigest(256); + } + + private static uint Decode16(byte[] bs, int off) + { + uint n = bs[off]; + n |= (uint)bs[++off] << 8; + return n; + } + + private static uint Decode24(byte[] bs, int off) + { + uint n = bs[off]; + n |= (uint)bs[++off] << 8; + n |= (uint)bs[++off] << 16; + return n; + } + + private static uint Decode32(byte[] bs, int off) + { + uint n = bs[off]; + n |= (uint)bs[++off] << 8; + n |= (uint)bs[++off] << 16; + n |= (uint)bs[++off] << 24; + return n; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static uint Decode32(ReadOnlySpan bs) + { + uint n = bs[0]; + n |= (uint)bs[1] << 8; + n |= (uint)bs[2] << 16; + n |= (uint)bs[3] << 24; + return n; + } +#endif + + private static void Decode32(byte[] bs, int bsOff, uint[] n, int nOff, int nLen) + { + for (int i = 0; i < nLen; ++i) + { + n[nOff + i] = Decode32(bs, bsOff + i * 4); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void Decode32(ReadOnlySpan bs, Span n) + { + for (int i = 0; i < n.Length; ++i) + { + n[i] = Decode32(bs[(i * 4)..]); + } + } +#endif + + private static bool DecodePointVar(byte[] p, int pOff, bool negate, ref PointProjective r) + { + byte[] py = Copy(p, pOff, PointBytes); + if (!CheckPointVar(py)) + return false; + + int x_0 = (py[PointBytes - 1] & 0x80) >> 7; + py[PointBytes - 1] &= 0x7F; + + F.Decode(py, 0, r.y); + + uint[] u = F.Create(); + uint[] v = F.Create(); + + F.Sqr(r.y, u); + F.Mul(u, (uint)-C_d, v); + F.Negate(u, u); + F.AddOne(u); + F.AddOne(v); + + if (!F.SqrtRatioVar(u, v, r.x)) + return false; + + F.Normalize(r.x); + if (x_0 == 1 && F.IsZeroVar(r.x)) + return false; + + if (negate ^ (x_0 != (r.x[0] & 1))) + { + F.Negate(r.x, r.x); + } + + F.One(r.z); + return true; + } + + private static void DecodeScalar(byte[] k, int kOff, uint[] n) + { + Debug.Assert(k[kOff + ScalarBytes - 1] == 0x00); + + Decode32(k, kOff, n, 0, ScalarUints); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void DecodeScalar(ReadOnlySpan k, Span n) + { + Debug.Assert(k[ScalarBytes - 1] == 0x00); + + Decode32(k, n[..ScalarUints]); + } +#endif + + private static void Dom4(IXof d, byte phflag, byte[] ctx) + { + int n = Dom4Prefix.Length; + byte[] t = new byte[n + 2 + ctx.Length]; + Dom4Prefix.CopyTo(t, 0); + t[n] = phflag; + t[n + 1] = (byte)ctx.Length; + ctx.CopyTo(t, n + 2); + + d.BlockUpdate(t, 0, t.Length); + } + + private static void Encode24(uint n, byte[] bs, int off) + { + bs[off] = (byte)(n); + bs[++off] = (byte)(n >> 8); + bs[++off] = (byte)(n >> 16); + } + + private static void Encode32(uint n, byte[] bs, int off) + { + bs[off] = (byte)(n); + bs[++off] = (byte)(n >> 8); + bs[++off] = (byte)(n >> 16); + bs[++off] = (byte)(n >> 24); + } + + private static void Encode56(ulong n, byte[] bs, int off) + { + Encode32((uint)n, bs, off); + Encode24((uint)(n >> 32), bs, off + 4); + } + + private static int EncodePoint(ref PointProjective p, byte[] r, int rOff) + { + uint[] x = F.Create(); + uint[] y = F.Create(); + + F.Inv(p.z, y); + F.Mul(p.x, y, x); + F.Mul(p.y, y, y); + F.Normalize(x); + F.Normalize(y); + + int result = CheckPoint(x, y); + + F.Encode(y, r, rOff); + r[rOff + PointBytes - 1] = (byte)((x[0] & 1) << 7); + + return result; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static int EncodePoint(ref PointProjective p, Span r) + { + uint[] x = F.Create(); + uint[] y = F.Create(); + + F.Inv(p.z, y); + F.Mul(p.x, y, x); + F.Mul(p.y, y, y); + F.Normalize(x); + F.Normalize(y); + + int result = CheckPoint(x, y); + + F.Encode(y, r); + r[PointBytes - 1] = (byte)((x[0] & 1) << 7); + + return result; + } +#endif + + public static void GeneratePrivateKey(SecureRandom random, byte[] k) + { + if (k.Length != SecretKeySize) + throw new ArgumentException(nameof(k)); + + random.NextBytes(k); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void GeneratePrivateKey(SecureRandom random, Span k) + { + if (k.Length != SecretKeySize) + throw new ArgumentException(nameof(k)); + + random.NextBytes(k); + } +#endif + + public static void GeneratePublicKey(byte[] sk, int skOff, byte[] pk, int pkOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + GeneratePublicKey(sk.AsSpan(skOff), pk.AsSpan(pkOff)); +#else + IXof d = CreateXof(); + byte[] h = new byte[ScalarBytes * 2]; + + d.BlockUpdate(sk, skOff, SecretKeySize); + d.OutputFinal(h, 0, h.Length); + + byte[] s = new byte[ScalarBytes]; + PruneScalar(h, 0, s); + + ScalarMultBaseEncoded(s, pk, pkOff); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void GeneratePublicKey(ReadOnlySpan sk, Span pk) + { + IXof d = CreateXof(); + Span h = stackalloc byte[ScalarBytes * 2]; + + d.BlockUpdate(sk[..SecretKeySize]); + d.OutputFinal(h); + + Span s = stackalloc byte[ScalarBytes]; + PruneScalar(h, s); + + ScalarMultBaseEncoded(s, pk); + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static uint GetWindow4(ReadOnlySpan x, int n) +#else + private static uint GetWindow4(uint[] x, int n) +#endif + { + int w = (int)((uint)n >> 3), b = (n & 7) << 2; + return (x[w] >> b) & 15U; + } + + private static sbyte[] GetWnafVar(uint[] n, int width) + { + Debug.Assert(n[ScalarUints - 1] <= L[ScalarUints - 1]); + Debug.Assert(2 <= width && width <= 8); + + uint[] t = new uint[ScalarUints * 2]; + { + uint c = 0; + int tPos = t.Length, i = ScalarUints; + while (--i >= 0) + { + uint next = n[i]; + t[--tPos] = (next >> 16) | (c << 16); + t[--tPos] = c = next; + } + } + + sbyte[] ws = new sbyte[447]; + + int lead = 32 - width; + + uint carry = 0U; + int j = 0; + for (int i = 0; i < t.Length; ++i, j -= 16) + { + uint word = t[i]; + while (j < 16) + { + uint word16 = word >> j; + uint bit = word16 & 1U; + + if (bit == carry) + { + ++j; + continue; + } + + uint digit = (word16 | 1U) << lead; + carry = digit >> 31; + + ws[(i << 4) + j] = (sbyte)((int)digit >> lead); + + j += width; + } + } + + Debug.Assert(carry == 0); + + return ws; + } + + private static void ImplSign(IXof d, byte[] h, byte[] s, byte[] pk, int pkOff, byte[] ctx, byte phflag, + byte[] m, int mOff, int mLen, byte[] sig, int sigOff) + { + Dom4(d, phflag, ctx); + d.BlockUpdate(h, ScalarBytes, ScalarBytes); + d.BlockUpdate(m, mOff, mLen); + d.OutputFinal(h, 0, h.Length); + + byte[] r = ReduceScalar(h); + byte[] R = new byte[PointBytes]; + ScalarMultBaseEncoded(r, R, 0); + + Dom4(d, phflag, ctx); + d.BlockUpdate(R, 0, PointBytes); + d.BlockUpdate(pk, pkOff, PointBytes); + d.BlockUpdate(m, mOff, mLen); + d.OutputFinal(h, 0, h.Length); + + byte[] k = ReduceScalar(h); + byte[] S = CalculateS(r, k, s); + + Array.Copy(R, 0, sig, sigOff, PointBytes); + Array.Copy(S, 0, sig, sigOff + PointBytes, ScalarBytes); + } + + private static void ImplSign(byte[] sk, int skOff, byte[] ctx, byte phflag, byte[] m, int mOff, int mLen, + byte[] sig, int sigOff) + { + if (!CheckContextVar(ctx)) + throw new ArgumentException("ctx"); + + IXof d = CreateXof(); + byte[] h = new byte[ScalarBytes * 2]; + + d.BlockUpdate(sk, skOff, SecretKeySize); + d.OutputFinal(h, 0, h.Length); + + byte[] s = new byte[ScalarBytes]; + PruneScalar(h, 0, s); + + byte[] pk = new byte[PointBytes]; + ScalarMultBaseEncoded(s, pk, 0); + + ImplSign(d, h, s, pk, 0, ctx, phflag, m, mOff, mLen, sig, sigOff); + } + + private static void ImplSign(byte[] sk, int skOff, byte[] pk, int pkOff, byte[] ctx, byte phflag, + byte[] m, int mOff, int mLen, byte[] sig, int sigOff) + { + if (!CheckContextVar(ctx)) + throw new ArgumentException("ctx"); + + IXof d = CreateXof(); + byte[] h = new byte[ScalarBytes * 2]; + + d.BlockUpdate(sk, skOff, SecretKeySize); + d.OutputFinal(h, 0, h.Length); + + byte[] s = new byte[ScalarBytes]; + PruneScalar(h, 0, s); + + ImplSign(d, h, s, pk, pkOff, ctx, phflag, m, mOff, mLen, sig, sigOff); + } + + private static bool ImplVerify(byte[] sig, int sigOff, byte[] pk, int pkOff, byte[] ctx, byte phflag, + byte[] m, int mOff, int mLen) + { + if (!CheckContextVar(ctx)) + throw new ArgumentException("ctx"); + + byte[] R = Copy(sig, sigOff, PointBytes); + byte[] S = Copy(sig, sigOff + PointBytes, ScalarBytes); + + if (!CheckPointVar(R)) + return false; + + uint[] nS = new uint[ScalarUints]; + if (!CheckScalarVar(S, nS)) + return false; + + Init(out PointProjective pA); + if (!DecodePointVar(pk, pkOff, true, ref pA)) + return false; + + IXof d = CreateXof(); + byte[] h = new byte[ScalarBytes * 2]; + + Dom4(d, phflag, ctx); + d.BlockUpdate(R, 0, PointBytes); + d.BlockUpdate(pk, pkOff, PointBytes); + d.BlockUpdate(m, mOff, mLen); + d.OutputFinal(h, 0, h.Length); + + byte[] k = ReduceScalar(h); + + uint[] nA = new uint[ScalarUints]; + DecodeScalar(k, 0, nA); + + Init(out PointProjective pR); + ScalarMultStrausVar(nS, nA, ref pA, ref pR); + + byte[] check = new byte[PointBytes]; + return 0 != EncodePoint(ref pR, check, 0) && Arrays.AreEqual(check, R); + } + + private static void Init(out PointAffine r) + { + r.x = F.Create(); + r.y = F.Create(); + } + + private static void Init(out PointProjective r) + { + r.x = F.Create(); + r.y = F.Create(); + r.z = F.Create(); + } + + private static void InvertZs(PointProjective[] points) + { + int count = points.Length; + uint[] cs = F.CreateTable(count); + + uint[] u = F.Create(); + F.Copy(points[0].z, 0, u, 0); + F.Copy(u, 0, cs, 0); + + int i = 0; + while (++i < count) + { + F.Mul(u, points[i].z, u); + F.Copy(u, 0, cs, i * F.Size); + } + + F.InvVar(u, u); + --i; + + uint[] t = F.Create(); + + while (i > 0) + { + int j = i--; + F.Copy(cs, i * F.Size, t, 0); + F.Mul(t, u, t); + F.Mul(u, points[j].z, u); + F.Copy(t, 0, points[j].z, 0); + } + + F.Copy(u, 0, points[0].z, 0); + } + + private static bool IsNeutralElementVar(uint[] x, uint[] y, uint[] z) + { + return F.IsZeroVar(x) && F.AreEqualVar(y, z); + } + + private static void PointAdd(ref PointAffine p, ref PointProjective r) + { + uint[] b = F.Create(); + uint[] c = F.Create(); + uint[] d = F.Create(); + uint[] e = F.Create(); + uint[] f = F.Create(); + uint[] g = F.Create(); + uint[] h = F.Create(); + + F.Sqr(r.z, b); + F.Mul(p.x, r.x, c); + F.Mul(p.y, r.y, d); + F.Mul(c, d, e); + F.Mul(e, -C_d, e); + //F.Apm(b, e, f, g); + F.Add(b, e, f); + F.Sub(b, e, g); + F.Add(p.y, p.x, h); + F.Add(r.y, r.x, e); + F.Mul(h, e, h); + //F.Apm(d, c, b, e); + F.Add(d, c, b); + F.Sub(d, c, e); + F.Carry(b); + F.Sub(h, b, h); + F.Mul(h, r.z, h); + F.Mul(e, r.z, e); + F.Mul(f, h, r.x); + F.Mul(e, g, r.y); + F.Mul(f, g, r.z); + } + + private static void PointAdd(ref PointProjective p, ref PointProjective r) + { + uint[] a = F.Create(); + uint[] b = F.Create(); + uint[] c = F.Create(); + uint[] d = F.Create(); + uint[] e = F.Create(); + uint[] f = F.Create(); + uint[] g = F.Create(); + uint[] h = F.Create(); + + F.Mul(p.z, r.z, a); + F.Sqr(a, b); + F.Mul(p.x, r.x, c); + F.Mul(p.y, r.y, d); + F.Mul(c, d, e); + F.Mul(e, -C_d, e); + //F.Apm(b, e, f, g); + F.Add(b, e, f); + F.Sub(b, e, g); + F.Add(p.y, p.x, h); + F.Add(r.y, r.x, e); + F.Mul(h, e, h); + //F.Apm(d, c, b, e); + F.Add(d, c, b); + F.Sub(d, c, e); + F.Carry(b); + F.Sub(h, b, h); + F.Mul(h, a, h); + F.Mul(e, a, e); + F.Mul(f, h, r.x); + F.Mul(e, g, r.y); + F.Mul(f, g, r.z); + } + + private static void PointAddVar(bool negate, ref PointAffine p, ref PointProjective r) + { + uint[] b = F.Create(); + uint[] c = F.Create(); + uint[] d = F.Create(); + uint[] e = F.Create(); + uint[] f = F.Create(); + uint[] g = F.Create(); + uint[] h = F.Create(); + + uint[] nb, ne, nf, ng; + if (negate) + { + nb = e; ne = b; nf = g; ng = f; + F.Sub(p.y, p.x, h); + } + else + { + nb = b; ne = e; nf = f; ng = g; + F.Add(p.y, p.x, h); + } + + F.Sqr(r.z, b); + F.Mul(p.x, r.x, c); + F.Mul(p.y, r.y, d); + F.Mul(c, d, e); + F.Mul(e, -C_d, e); + //F.Apm(b, e, nf, ng); + F.Add(b, e, nf); + F.Sub(b, e, ng); + F.Add(r.y, r.x, e); + F.Mul(h, e, h); + //F.Apm(d, c, nb, ne); + F.Add(d, c, nb); + F.Sub(d, c, ne); + F.Carry(nb); + F.Sub(h, b, h); + F.Mul(h, r.z, h); + F.Mul(e, r.z, e); + F.Mul(f, h, r.x); + F.Mul(e, g, r.y); + F.Mul(f, g, r.z); + } + + private static void PointAddVar(bool negate, ref PointProjective p, ref PointProjective r) + { + uint[] a = F.Create(); + uint[] b = F.Create(); + uint[] c = F.Create(); + uint[] d = F.Create(); + uint[] e = F.Create(); + uint[] f = F.Create(); + uint[] g = F.Create(); + uint[] h = F.Create(); + + uint[] nb, ne, nf, ng; + if (negate) + { + nb = e; ne = b; nf = g; ng = f; + F.Sub(p.y, p.x, h); + } + else + { + nb = b; ne = e; nf = f; ng = g; + F.Add(p.y, p.x, h); + } + + F.Mul(p.z, r.z, a); + F.Sqr(a, b); + F.Mul(p.x, r.x, c); + F.Mul(p.y, r.y, d); + F.Mul(c, d, e); + F.Mul(e, -C_d, e); + //F.Apm(b, e, nf, ng); + F.Add(b, e, nf); + F.Sub(b, e, ng); + F.Add(r.y, r.x, e); + F.Mul(h, e, h); + //F.Apm(d, c, nb, ne); + F.Add(d, c, nb); + F.Sub(d, c, ne); + F.Carry(nb); + F.Sub(h, b, h); + F.Mul(h, a, h); + F.Mul(e, a, e); + F.Mul(f, h, r.x); + F.Mul(e, g, r.y); + F.Mul(f, g, r.z); + } + + private static void PointCopy(ref PointProjective p, ref PointProjective r) + { + F.Copy(p.x, 0, r.x, 0); + F.Copy(p.y, 0, r.y, 0); + F.Copy(p.z, 0, r.z, 0); + } + + private static void PointDouble(ref PointProjective r) + { + uint[] b = F.Create(); + uint[] c = F.Create(); + uint[] d = F.Create(); + uint[] e = F.Create(); + uint[] h = F.Create(); + uint[] j = F.Create(); + + F.Add(r.x, r.y, b); + F.Sqr(b, b); + F.Sqr(r.x, c); + F.Sqr(r.y, d); + F.Add(c, d, e); + F.Carry(e); + F.Sqr(r.z, h); + F.Add(h, h, h); + F.Carry(h); + F.Sub(e, h, j); + F.Sub(b, e, b); + F.Sub(c, d, c); + F.Mul(b, j, r.x); + F.Mul(e, c, r.y); + F.Mul(e, j, r.z); + } + + private static void PointLookup(int block, int index, ref PointAffine p) + { + Debug.Assert(0 <= block && block < PrecompBlocks); + Debug.Assert(0 <= index && index < PrecompPoints); + + int off = block * PrecompPoints * 2 * F.Size; + + for (int i = 0; i < PrecompPoints; ++i) + { + int cond = ((i ^ index) - 1) >> 31; + F.CMov(cond, PrecompBaseComb, off, p.x, 0); off += F.Size; + F.CMov(cond, PrecompBaseComb, off, p.y, 0); off += F.Size; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void PointLookup(ReadOnlySpan x, int n, ReadOnlySpan table, ref PointProjective r) + { + // TODO This method is currently hardcoded to 4-bit windows and 8 precomputed points + + uint w = GetWindow4(x, n); + + int sign = (int)(w >> (4 - 1)) ^ 1; + int abs = ((int)w ^ -sign) & 7; + + Debug.Assert(sign == 0 || sign == 1); + Debug.Assert(0 <= abs && abs < 8); + + for (int i = 0; i < 8; ++i) + { + int cond = ((i ^ abs) - 1) >> 31; + F.CMov(cond, table, r.x); table = table[F.Size..]; + F.CMov(cond, table, r.y); table = table[F.Size..]; + F.CMov(cond, table, r.z); table = table[F.Size..]; + } + + F.CNegate(sign, r.x); + } +#else + private static void PointLookup(uint[] x, int n, uint[] table, ref PointProjective r) + { + // TODO This method is currently hardcoded to 4-bit windows and 8 precomputed points + + uint w = GetWindow4(x, n); + + int sign = (int)(w >> (4 - 1)) ^ 1; + int abs = ((int)w ^ -sign) & 7; + + Debug.Assert(sign == 0 || sign == 1); + Debug.Assert(0 <= abs && abs < 8); + + for (int i = 0, off = 0; i < 8; ++i) + { + int cond = ((i ^ abs) - 1) >> 31; + F.CMov(cond, table, off, r.x, 0); off += F.Size; + F.CMov(cond, table, off, r.y, 0); off += F.Size; + F.CMov(cond, table, off, r.z, 0); off += F.Size; + } + + F.CNegate(sign, r.x); + } +#endif + + private static void PointLookup15(uint[] table, ref PointProjective r) + { + int off = F.Size * 3 * 7; + + F.Copy(table, off, r.x, 0); off += F.Size; + F.Copy(table, off, r.y, 0); off += F.Size; + F.Copy(table, off, r.z, 0); + } + + private static uint[] PointPrecompute(ref PointProjective p, int count) + { + Debug.Assert(count > 0); + + Init(out PointProjective q); + PointCopy(ref p, ref q); + + Init(out PointProjective d); + PointCopy(ref q, ref d); + PointDouble(ref d); + + uint[] table = F.CreateTable(count * 3); + int off = 0; + + int i = 0; + for (;;) + { + F.Copy(q.x, 0, table, off); off += F.Size; + F.Copy(q.y, 0, table, off); off += F.Size; + F.Copy(q.z, 0, table, off); off += F.Size; + + if (++i == count) + break; + + PointAdd(ref d, ref q); + } + + return table; + } + + private static void PointPrecomputeVar(ref PointProjective p, PointProjective[] points, int count) + { + Debug.Assert(count > 0); + + Init(out PointProjective d); + PointCopy(ref p, ref d); + PointDouble(ref d); + + Init(out points[0]); + PointCopy(ref p, ref points[0]); + for (int i = 1; i < count; ++i) + { + Init(out points[i]); + PointCopy(ref points[i - 1], ref points[i]); + PointAdd(ref d, ref points[i]); + } + } + + private static void PointSetNeutral(ref PointProjective p) + { + F.Zero(p.x); + F.One(p.y); + F.One(p.z); + } + + public static void Precompute() + { + lock (PrecompLock) + { + if (PrecompBaseWnaf != null && PrecompBaseComb != null) + return; + + Debug.Assert(PrecompRange > 448); + Debug.Assert(PrecompRange < 480); + + int wnafPoints = 1 << (WnafWidthBase - 2); + int combPoints = PrecompBlocks * PrecompPoints; + int totalPoints = wnafPoints + combPoints; + + PointProjective[] points = new PointProjective[totalPoints]; + + Init(out PointProjective p); + F.Copy(B_x, 0, p.x, 0); + F.Copy(B_y, 0, p.y, 0); + F.One(p.z); + + PointPrecomputeVar(ref p, points, wnafPoints); + + int pointsIndex = wnafPoints; + PointProjective[] toothPowers = new PointProjective[PrecompTeeth]; + for (int tooth = 0; tooth < PrecompTeeth; ++tooth) + { + Init(out toothPowers[tooth]); + } + for (int block = 0; block < PrecompBlocks; ++block) + { + ref PointProjective sum = ref points[pointsIndex++]; + Init(out sum); + + for (int tooth = 0; tooth < PrecompTeeth; ++tooth) + { + if (tooth == 0) + { + PointCopy(ref p, ref sum); + } + else + { + PointAdd(ref p, ref sum); + } + + PointDouble(ref p); + PointCopy(ref p, ref toothPowers[tooth]); + + if (block + tooth != PrecompBlocks + PrecompTeeth - 2) + { + for (int spacing = 1; spacing < PrecompSpacing; ++spacing) + { + PointDouble(ref p); + } + } + } + + F.Negate(sum.x, sum.x); + + for (int tooth = 0; tooth < (PrecompTeeth - 1); ++tooth) + { + int size = 1 << tooth; + for (int j = 0; j < size; ++j, ++pointsIndex) + { + Init(out points[pointsIndex]); + PointCopy(ref points[pointsIndex - size], ref points[pointsIndex]); + PointAdd(ref toothPowers[tooth], ref points[pointsIndex]); + } + } + } + Debug.Assert(pointsIndex == totalPoints); + + InvertZs(points); + + PrecompBaseWnaf = new PointAffine[wnafPoints]; + for (int i = 0; i < wnafPoints; ++i) + { + ref PointProjective q = ref points[i]; + ref PointAffine r = ref PrecompBaseWnaf[i]; + Init(out r); + + F.Mul(q.x, q.z, r.x); F.Normalize(r.x); + F.Mul(q.y, q.z, r.y); F.Normalize(r.y); + } + + PrecompBaseComb = F.CreateTable(combPoints * 2); + int off = 0; + for (int i = wnafPoints; i < totalPoints; ++i) + { + ref PointProjective q = ref points[i]; + + F.Mul(q.x, q.z, q.x); F.Normalize(q.x); + F.Mul(q.y, q.z, q.y); F.Normalize(q.y); + + F.Copy(q.x, 0, PrecompBaseComb, off); off += F.Size; + F.Copy(q.y, 0, PrecompBaseComb, off); off += F.Size; + } + Debug.Assert(off == PrecompBaseComb.Length); + } + } + + private static void PruneScalar(byte[] n, int nOff, byte[] r) + { + Array.Copy(n, nOff, r, 0, ScalarBytes - 1); + + r[0] &= 0xFC; + r[ScalarBytes - 2] |= 0x80; + r[ScalarBytes - 1] = 0x00; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void PruneScalar(ReadOnlySpan n, Span r) + { + n[..(ScalarBytes - 1)].CopyTo(r); + + r[0] &= 0xFC; + r[ScalarBytes - 2] |= 0x80; + r[ScalarBytes - 1] = 0x00; + } +#endif + + private static byte[] ReduceScalar(byte[] n) + { + ulong x00 = Decode32(n, 0); // x00:32/-- + ulong x01 = (Decode24(n, 4) << 4); // x01:28/-- + ulong x02 = Decode32(n, 7); // x02:32/-- + ulong x03 = (Decode24(n, 11) << 4); // x03:28/-- + ulong x04 = Decode32(n, 14); // x04:32/-- + ulong x05 = (Decode24(n, 18) << 4); // x05:28/-- + ulong x06 = Decode32(n, 21); // x06:32/-- + ulong x07 = (Decode24(n, 25) << 4); // x07:28/-- + ulong x08 = Decode32(n, 28); // x08:32/-- + ulong x09 = (Decode24(n, 32) << 4); // x09:28/-- + ulong x10 = Decode32(n, 35); // x10:32/-- + ulong x11 = (Decode24(n, 39) << 4); // x11:28/-- + ulong x12 = Decode32(n, 42); // x12:32/-- + ulong x13 = (Decode24(n, 46) << 4); // x13:28/-- + ulong x14 = Decode32(n, 49); // x14:32/-- + ulong x15 = (Decode24(n, 53) << 4); // x15:28/-- + ulong x16 = Decode32(n, 56); // x16:32/-- + ulong x17 = (Decode24(n, 60) << 4); // x17:28/-- + ulong x18 = Decode32(n, 63); // x18:32/-- + ulong x19 = (Decode24(n, 67) << 4); // x19:28/-- + ulong x20 = Decode32(n, 70); // x20:32/-- + ulong x21 = (Decode24(n, 74) << 4); // x21:28/-- + ulong x22 = Decode32(n, 77); // x22:32/-- + ulong x23 = (Decode24(n, 81) << 4); // x23:28/-- + ulong x24 = Decode32(n, 84); // x24:32/-- + ulong x25 = (Decode24(n, 88) << 4); // x25:28/-- + ulong x26 = Decode32(n, 91); // x26:32/-- + ulong x27 = (Decode24(n, 95) << 4); // x27:28/-- + ulong x28 = Decode32(n, 98); // x28:32/-- + ulong x29 = (Decode24(n, 102) << 4); // x29:28/-- + ulong x30 = Decode32(n, 105); // x30:32/-- + ulong x31 = (Decode24(n, 109) << 4); // x31:28/-- + ulong x32 = Decode16(n, 112); // x32:16/-- + + // x32 += (x31 >> 28); x31 &= M28UL; + x16 += x32 * L4_0; // x16:42/-- + x17 += x32 * L4_1; // x17:41/28 + x18 += x32 * L4_2; // x18:43/42 + x19 += x32 * L4_3; // x19:44/28 + x20 += x32 * L4_4; // x20:43/-- + x21 += x32 * L4_5; // x21:44/28 + x22 += x32 * L4_6; // x22:43/41 + x23 += x32 * L4_7; // x23:45/41 + + x31 += (x30 >> 28); x30 &= M28UL; // x31:28/--, x30:28/-- + x15 += x31 * L4_0; // x15:54/-- + x16 += x31 * L4_1; // x16:53/42 + x17 += x31 * L4_2; // x17:55/54 + x18 += x31 * L4_3; // x18:56/44 + x19 += x31 * L4_4; // x19:55/-- + x20 += x31 * L4_5; // x20:56/43 + x21 += x31 * L4_6; // x21:55/53 + x22 += x31 * L4_7; // x22:57/53 + + //x30 += (x29 >> 28); x29 &= M28UL; + x14 += x30 * L4_0; // x14:54/-- + x15 += x30 * L4_1; // x15:54/53 + x16 += x30 * L4_2; // x16:56/-- + x17 += x30 * L4_3; // x17:57/-- + x18 += x30 * L4_4; // x18:56/55 + x19 += x30 * L4_5; // x19:56/55 + x20 += x30 * L4_6; // x20:57/-- + x21 += x30 * L4_7; // x21:57/56 + + x29 += (x28 >> 28); x28 &= M28UL; // x29:28/--, x28:28/-- + x13 += x29 * L4_0; // x13:54/-- + x14 += x29 * L4_1; // x14:54/53 + x15 += x29 * L4_2; // x15:56/-- + x16 += x29 * L4_3; // x16:57/-- + x17 += x29 * L4_4; // x17:57/55 + x18 += x29 * L4_5; // x18:57/55 + x19 += x29 * L4_6; // x19:57/52 + x20 += x29 * L4_7; // x20:58/52 + + //x28 += (x27 >> 28); x27 &= M28UL; + x12 += x28 * L4_0; // x12:54/-- + x13 += x28 * L4_1; // x13:54/53 + x14 += x28 * L4_2; // x14:56/-- + x15 += x28 * L4_3; // x15:57/-- + x16 += x28 * L4_4; // x16:57/55 + x17 += x28 * L4_5; // x17:58/-- + x18 += x28 * L4_6; // x18:58/-- + x19 += x28 * L4_7; // x19:58/53 + + x27 += (x26 >> 28); x26 &= M28UL; // x27:28/--, x26:28/-- + x11 += x27 * L4_0; // x11:54/-- + x12 += x27 * L4_1; // x12:54/53 + x13 += x27 * L4_2; // x13:56/-- + x14 += x27 * L4_3; // x14:57/-- + x15 += x27 * L4_4; // x15:57/55 + x16 += x27 * L4_5; // x16:58/-- + x17 += x27 * L4_6; // x17:58/56 + x18 += x27 * L4_7; // x18:59/-- + + //x26 += (x25 >> 28); x25 &= M28UL; + x10 += x26 * L4_0; // x10:54/-- + x11 += x26 * L4_1; // x11:54/53 + x12 += x26 * L4_2; // x12:56/-- + x13 += x26 * L4_3; // x13:57/-- + x14 += x26 * L4_4; // x14:57/55 + x15 += x26 * L4_5; // x15:58/-- + x16 += x26 * L4_6; // x16:58/56 + x17 += x26 * L4_7; // x17:59/-- + + x25 += (x24 >> 28); x24 &= M28UL; // x25:28/--, x24:28/-- + x09 += x25 * L4_0; // x09:54/-- + x10 += x25 * L4_1; // x10:54/53 + x11 += x25 * L4_2; // x11:56/-- + x12 += x25 * L4_3; // x12:57/-- + x13 += x25 * L4_4; // x13:57/55 + x14 += x25 * L4_5; // x14:58/-- + x15 += x25 * L4_6; // x15:58/56 + x16 += x25 * L4_7; // x16:59/-- + + x21 += (x20 >> 28); x20 &= M28UL; // x21:58/--, x20:28/-- + x22 += (x21 >> 28); x21 &= M28UL; // x22:57/54, x21:28/-- + x23 += (x22 >> 28); x22 &= M28UL; // x23:45/42, x22:28/-- + x24 += (x23 >> 28); x23 &= M28UL; // x24:28/18, x23:28/-- + + x08 += x24 * L4_0; // x08:54/-- + x09 += x24 * L4_1; // x09:55/-- + x10 += x24 * L4_2; // x10:56/46 + x11 += x24 * L4_3; // x11:57/46 + x12 += x24 * L4_4; // x12:57/55 + x13 += x24 * L4_5; // x13:58/-- + x14 += x24 * L4_6; // x14:58/56 + x15 += x24 * L4_7; // x15:59/-- + + x07 += x23 * L4_0; // x07:54/-- + x08 += x23 * L4_1; // x08:54/53 + x09 += x23 * L4_2; // x09:56/53 + x10 += x23 * L4_3; // x10:57/46 + x11 += x23 * L4_4; // x11:57/55 + x12 += x23 * L4_5; // x12:58/-- + x13 += x23 * L4_6; // x13:58/56 + x14 += x23 * L4_7; // x14:59/-- + + x06 += x22 * L4_0; // x06:54/-- + x07 += x22 * L4_1; // x07:54/53 + x08 += x22 * L4_2; // x08:56/-- + x09 += x22 * L4_3; // x09:57/53 + x10 += x22 * L4_4; // x10:57/55 + x11 += x22 * L4_5; // x11:58/-- + x12 += x22 * L4_6; // x12:58/56 + x13 += x22 * L4_7; // x13:59/-- + + x18 += (x17 >> 28); x17 &= M28UL; // x18:59/31, x17:28/-- + x19 += (x18 >> 28); x18 &= M28UL; // x19:58/54, x18:28/-- + x20 += (x19 >> 28); x19 &= M28UL; // x20:30/29, x19:28/-- + x21 += (x20 >> 28); x20 &= M28UL; // x21:28/03, x20:28/-- + + x05 += x21 * L4_0; // x05:54/-- + x06 += x21 * L4_1; // x06:55/-- + x07 += x21 * L4_2; // x07:56/31 + x08 += x21 * L4_3; // x08:57/31 + x09 += x21 * L4_4; // x09:57/56 + x10 += x21 * L4_5; // x10:58/-- + x11 += x21 * L4_6; // x11:58/56 + x12 += x21 * L4_7; // x12:59/-- + + x04 += x20 * L4_0; // x04:54/-- + x05 += x20 * L4_1; // x05:54/53 + x06 += x20 * L4_2; // x06:56/53 + x07 += x20 * L4_3; // x07:57/31 + x08 += x20 * L4_4; // x08:57/55 + x09 += x20 * L4_5; // x09:58/-- + x10 += x20 * L4_6; // x10:58/56 + x11 += x20 * L4_7; // x11:59/-- + + x03 += x19 * L4_0; // x03:54/-- + x04 += x19 * L4_1; // x04:54/53 + x05 += x19 * L4_2; // x05:56/-- + x06 += x19 * L4_3; // x06:57/53 + x07 += x19 * L4_4; // x07:57/55 + x08 += x19 * L4_5; // x08:58/-- + x09 += x19 * L4_6; // x09:58/56 + x10 += x19 * L4_7; // x10:59/-- + + x15 += (x14 >> 28); x14 &= M28UL; // x15:59/31, x14:28/-- + x16 += (x15 >> 28); x15 &= M28UL; // x16:59/32, x15:28/-- + x17 += (x16 >> 28); x16 &= M28UL; // x17:31/29, x16:28/-- + x18 += (x17 >> 28); x17 &= M28UL; // x18:28/04, x17:28/-- + + x02 += x18 * L4_0; // x02:54/-- + x03 += x18 * L4_1; // x03:55/-- + x04 += x18 * L4_2; // x04:56/32 + x05 += x18 * L4_3; // x05:57/32 + x06 += x18 * L4_4; // x06:57/56 + x07 += x18 * L4_5; // x07:58/-- + x08 += x18 * L4_6; // x08:58/56 + x09 += x18 * L4_7; // x09:59/-- + + x01 += x17 * L4_0; // x01:54/-- + x02 += x17 * L4_1; // x02:54/53 + x03 += x17 * L4_2; // x03:56/53 + x04 += x17 * L4_3; // x04:57/32 + x05 += x17 * L4_4; // x05:57/55 + x06 += x17 * L4_5; // x06:58/-- + x07 += x17 * L4_6; // x07:58/56 + x08 += x17 * L4_7; // x08:59/-- + + x16 *= 4; + x16 += (x15 >> 26); x15 &= M26UL; + x16 += 1; // x16:30/01 + + x00 += x16 * L_0; + x01 += x16 * L_1; + x02 += x16 * L_2; + x03 += x16 * L_3; + x04 += x16 * L_4; + x05 += x16 * L_5; + x06 += x16 * L_6; + x07 += x16 * L_7; + + x01 += (x00 >> 28); x00 &= M28UL; + x02 += (x01 >> 28); x01 &= M28UL; + x03 += (x02 >> 28); x02 &= M28UL; + x04 += (x03 >> 28); x03 &= M28UL; + x05 += (x04 >> 28); x04 &= M28UL; + x06 += (x05 >> 28); x05 &= M28UL; + x07 += (x06 >> 28); x06 &= M28UL; + x08 += (x07 >> 28); x07 &= M28UL; + x09 += (x08 >> 28); x08 &= M28UL; + x10 += (x09 >> 28); x09 &= M28UL; + x11 += (x10 >> 28); x10 &= M28UL; + x12 += (x11 >> 28); x11 &= M28UL; + x13 += (x12 >> 28); x12 &= M28UL; + x14 += (x13 >> 28); x13 &= M28UL; + x15 += (x14 >> 28); x14 &= M28UL; + x16 = (x15 >> 26); x15 &= M26UL; + + x16 -= 1; + + Debug.Assert(x16 == 0UL || x16 == ulong.MaxValue); + + x00 -= x16 & L_0; + x01 -= x16 & L_1; + x02 -= x16 & L_2; + x03 -= x16 & L_3; + x04 -= x16 & L_4; + x05 -= x16 & L_5; + x06 -= x16 & L_6; + x07 -= x16 & L_7; + + x01 += (ulong)((long)x00 >> 28); x00 &= M28UL; + x02 += (ulong)((long)x01 >> 28); x01 &= M28UL; + x03 += (ulong)((long)x02 >> 28); x02 &= M28UL; + x04 += (ulong)((long)x03 >> 28); x03 &= M28UL; + x05 += (ulong)((long)x04 >> 28); x04 &= M28UL; + x06 += (ulong)((long)x05 >> 28); x05 &= M28UL; + x07 += (ulong)((long)x06 >> 28); x06 &= M28UL; + x08 += (ulong)((long)x07 >> 28); x07 &= M28UL; + x09 += (ulong)((long)x08 >> 28); x08 &= M28UL; + x10 += (ulong)((long)x09 >> 28); x09 &= M28UL; + x11 += (ulong)((long)x10 >> 28); x10 &= M28UL; + x12 += (ulong)((long)x11 >> 28); x11 &= M28UL; + x13 += (ulong)((long)x12 >> 28); x12 &= M28UL; + x14 += (ulong)((long)x13 >> 28); x13 &= M28UL; + x15 += (ulong)((long)x14 >> 28); x14 &= M28UL; + + Debug.Assert(x15 >> 26 == 0UL); + + byte[] r = new byte[ScalarBytes]; + Encode56(x00 | (x01 << 28), r, 0); + Encode56(x02 | (x03 << 28), r, 7); + Encode56(x04 | (x05 << 28), r, 14); + Encode56(x06 | (x07 << 28), r, 21); + Encode56(x08 | (x09 << 28), r, 28); + Encode56(x10 | (x11 << 28), r, 35); + Encode56(x12 | (x13 << 28), r, 42); + Encode56(x14 | (x15 << 28), r, 49); + //r[ScalarBytes - 1] = 0; + return r; + } + + private static void ScalarMult(byte[] k, ref PointProjective p, ref PointProjective r) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ScalarMult(k.AsSpan(), ref p, ref r); +#else + uint[] n = new uint[ScalarUints]; + DecodeScalar(k, 0, n); + + // Recode the scalar into signed-digit form + { + uint c1 = Nat.CAdd(ScalarUints, ~(int)n[0] & 1, n, L, n); + uint c2 = Nat.ShiftDownBit(ScalarUints, n, c1); Debug.Assert(c2 == (1U << 31)); + + // NOTE: Bit 448 is implicitly set after the signed-digit recoding + } + + uint[] table = PointPrecompute(ref p, 8); + Init(out PointProjective q); + + // Replace first 4 doublings (2^4 * P) with 1 addition (P + 15 * P) + PointLookup15(table, ref r); + PointAdd(ref p, ref r); + + int w = 111; + for (;;) + { + PointLookup(n, w, table, ref q); + PointAdd(ref q, ref r); + + if (--w < 0) + break; + + for (int i = 0; i < 4; ++i) + { + PointDouble(ref r); + } + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void ScalarMult(ReadOnlySpan k, ref PointProjective p, ref PointProjective r) + { + Span n = stackalloc uint[ScalarUints]; + DecodeScalar(k, n); + + // Recode the scalar into signed-digit form + { + uint c1 = Nat.CAdd(ScalarUints, ~(int)n[0] & 1, n, L, n); + uint c2 = Nat.ShiftDownBit(ScalarUints, n, c1); Debug.Assert(c2 == (1U << 31)); + + // NOTE: Bit 448 is implicitly set after the signed-digit recoding + } + + uint[] table = PointPrecompute(ref p, 8); + Init(out PointProjective q); + + // Replace first 4 doublings (2^4 * P) with 1 addition (P + 15 * P) + PointLookup15(table, ref r); + PointAdd(ref p, ref r); + + int w = 111; + for (;;) + { + PointLookup(n, w, table, ref q); + PointAdd(ref q, ref r); + + if (--w < 0) + break; + + for (int i = 0; i < 4; ++i) + { + PointDouble(ref r); + } + } + } +#endif + + private static void ScalarMultBase(byte[] k, ref PointProjective r) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ScalarMultBase(k.AsSpan(), ref r); +#else + // Equivalent (but much slower) + //Init(out PointProjective p); + //F.Copy(B_x, 0, p.x, 0); + //F.Copy(B_y, 0, p.y, 0); + //F.One(p.z); + //ScalarMult(k, ref p, ref r); + + Precompute(); + + uint[] n = new uint[ScalarUints + 1]; + DecodeScalar(k, 0, n); + + // Recode the scalar into signed-digit form + { + n[ScalarUints] = (1U << (PrecompRange - 448)) + + Nat.CAdd(ScalarUints, ~(int)n[0] & 1, n, L, n); + uint c = Nat.ShiftDownBit(n.Length, n, 0); + Debug.Assert(c == (1U << 31)); + } + + Init(out PointAffine p); + + PointSetNeutral(ref r); + + int cOff = PrecompSpacing - 1; + for (;;) + { + int tPos = cOff; + + for (int b = 0; b < PrecompBlocks; ++b) + { + uint w = 0; + for (int t = 0; t < PrecompTeeth; ++t) + { + uint tBit = n[tPos >> 5] >> (tPos & 0x1F); + w &= ~(1U << t); + w ^= (tBit << t); + tPos += PrecompSpacing; + } + + int sign = (int)(w >> (PrecompTeeth - 1)) & 1; + int abs = ((int)w ^ -sign) & PrecompMask; + + Debug.Assert(sign == 0 || sign == 1); + Debug.Assert(0 <= abs && abs < PrecompPoints); + + PointLookup(b, abs, ref p); + + F.CNegate(sign, p.x); + + PointAdd(ref p, ref r); + } + + if (--cOff < 0) + break; + + PointDouble(ref r); + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void ScalarMultBase(ReadOnlySpan k, ref PointProjective r) + { + // Equivalent (but much slower) + //Init(out PointProjective p); + //F.Copy(B_x, 0, p.x, 0); + //F.Copy(B_y, 0, p.y, 0); + //F.One(p.z); + //ScalarMult(k, ref p, ref r); + + Precompute(); + + Span n = stackalloc uint[ScalarUints + 1]; + DecodeScalar(k, n); + + // Recode the scalar into signed-digit form + { + n[ScalarUints] = (1U << (PrecompRange - 448)) + + Nat.CAdd(ScalarUints, ~(int)n[0] & 1, n, L, n); + uint c = Nat.ShiftDownBit(n.Length, n, 0); + Debug.Assert(c == (1U << 31)); + } + + Init(out PointAffine p); + + PointSetNeutral(ref r); + + int cOff = PrecompSpacing - 1; + for (;;) + { + int tPos = cOff; + + for (int b = 0; b < PrecompBlocks; ++b) + { + uint w = 0; + for (int t = 0; t < PrecompTeeth; ++t) + { + uint tBit = n[tPos >> 5] >> (tPos & 0x1F); + w &= ~(1U << t); + w ^= (tBit << t); + tPos += PrecompSpacing; + } + + int sign = (int)(w >> (PrecompTeeth - 1)) & 1; + int abs = ((int)w ^ -sign) & PrecompMask; + + Debug.Assert(sign == 0 || sign == 1); + Debug.Assert(0 <= abs && abs < PrecompPoints); + + PointLookup(b, abs, ref p); + + F.CNegate(sign, p.x); + + PointAdd(ref p, ref r); + } + + if (--cOff < 0) + break; + + PointDouble(ref r); + } + } +#endif + + private static void ScalarMultBaseEncoded(byte[] k, byte[] r, int rOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ScalarMultBaseEncoded(k.AsSpan(), r.AsSpan(rOff)); +#else + Init(out PointProjective p); + ScalarMultBase(k, ref p); + if (0 == EncodePoint(ref p, r, rOff)) + throw new InvalidOperationException(); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void ScalarMultBaseEncoded(ReadOnlySpan k, Span r) + { + Init(out PointProjective p); + ScalarMultBase(k, ref p); + if (0 == EncodePoint(ref p, r)) + throw new InvalidOperationException(); + } +#endif + + internal static void ScalarMultBaseXY(byte[] k, int kOff, uint[] x, uint[] y) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ScalarMultBaseXY(k.AsSpan(kOff), x.AsSpan(), y.AsSpan()); +#else + byte[] n = new byte[ScalarBytes]; + PruneScalar(k, kOff, n); + + Init(out PointProjective p); + ScalarMultBase(n, ref p); + + if (0 == CheckPoint(p.x, p.y, p.z)) + throw new InvalidOperationException(); + + F.Copy(p.x, 0, x, 0); + F.Copy(p.y, 0, y, 0); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal static void ScalarMultBaseXY(ReadOnlySpan k, Span x, Span y) + { + Span n = stackalloc byte[ScalarBytes]; + PruneScalar(k, n); + + Init(out PointProjective p); + ScalarMultBase(n, ref p); + + if (0 == CheckPoint(p.x, p.y, p.z)) + throw new InvalidOperationException(); + + F.Copy(p.x, x); + F.Copy(p.y, y); + } +#endif + + private static void ScalarMultOrderVar(ref PointProjective p, ref PointProjective r) + { + sbyte[] ws_p = GetWnafVar(L, WnafWidth); + + int count = 1 << (WnafWidth - 2); + PointProjective[] tp = new PointProjective[count]; + PointPrecomputeVar(ref p, tp, count); + + PointSetNeutral(ref r); + + for (int bit = 446;;) + { + int wp = ws_p[bit]; + if (wp != 0) + { + int sign = wp >> 31; + int index = (wp ^ sign) >> 1; + + PointAddVar(sign != 0, ref tp[index], ref r); + } + + if (--bit < 0) + break; + + PointDouble(ref r); + } + } + + private static void ScalarMultStrausVar(uint[] nb, uint[] np, ref PointProjective p, ref PointProjective r) + { + Precompute(); + + sbyte[] ws_b = GetWnafVar(nb, WnafWidthBase); + sbyte[] ws_p = GetWnafVar(np, WnafWidth); + + int count = 1 << (WnafWidth - 2); + PointProjective[] tp = new PointProjective[count]; + PointPrecomputeVar(ref p, tp, count); + + PointSetNeutral(ref r); + + for (int bit = 446;;) + { + int wb = ws_b[bit]; + if (wb != 0) + { + int sign = wb >> 31; + int index = (wb ^ sign) >> 1; + + PointAddVar(sign != 0, ref PrecompBaseWnaf[index], ref r); + } + + int wp = ws_p[bit]; + if (wp != 0) + { + int sign = wp >> 31; + int index = (wp ^ sign) >> 1; + + PointAddVar(sign != 0, ref tp[index], ref r); + } + + if (--bit < 0) + break; + + PointDouble(ref r); + } + } + + public static void Sign(byte[] sk, int skOff, byte[] ctx, byte[] m, int mOff, int mLen, byte[] sig, int sigOff) + { + byte phflag = 0x00; + + ImplSign(sk, skOff, ctx, phflag, m, mOff, mLen, sig, sigOff); + } + + public static void Sign(byte[] sk, int skOff, byte[] pk, int pkOff, byte[] ctx, byte[] m, int mOff, int mLen, byte[] sig, int sigOff) + { + byte phflag = 0x00; + + ImplSign(sk, skOff, pk, pkOff, ctx, phflag, m, mOff, mLen, sig, sigOff); + } + + public static void SignPrehash(byte[] sk, int skOff, byte[] ctx, byte[] ph, int phOff, byte[] sig, int sigOff) + { + byte phflag = 0x01; + + ImplSign(sk, skOff, ctx, phflag, ph, phOff, PrehashSize, sig, sigOff); + } + + public static void SignPrehash(byte[] sk, int skOff, byte[] pk, int pkOff, byte[] ctx, byte[] ph, int phOff, byte[] sig, int sigOff) + { + byte phflag = 0x01; + + ImplSign(sk, skOff, pk, pkOff, ctx, phflag, ph, phOff, PrehashSize, sig, sigOff); + } + + public static void SignPrehash(byte[] sk, int skOff, byte[] ctx, IXof ph, byte[] sig, int sigOff) + { + byte[] m = new byte[PrehashSize]; + if (PrehashSize != ph.OutputFinal(m, 0, PrehashSize)) + throw new ArgumentException("ph"); + + byte phflag = 0x01; + + ImplSign(sk, skOff, ctx, phflag, m, 0, m.Length, sig, sigOff); + } + + public static void SignPrehash(byte[] sk, int skOff, byte[] pk, int pkOff, byte[] ctx, IXof ph, byte[] sig, int sigOff) + { + byte[] m = new byte[PrehashSize]; + if (PrehashSize != ph.OutputFinal(m, 0, PrehashSize)) + throw new ArgumentException("ph"); + + byte phflag = 0x01; + + ImplSign(sk, skOff, pk, pkOff, ctx, phflag, m, 0, m.Length, sig, sigOff); + } + + public static bool ValidatePublicKeyFull(byte[] pk, int pkOff) + { + Init(out PointProjective p); + if (!DecodePointVar(pk, pkOff, false, ref p)) + return false; + + F.Normalize(p.x); + F.Normalize(p.y); + F.Normalize(p.z); + + if (IsNeutralElementVar(p.x, p.y, p.z)) + return false; + + Init(out PointProjective r); + ScalarMultOrderVar(ref p, ref r); + + F.Normalize(r.x); + F.Normalize(r.y); + F.Normalize(r.z); + + return IsNeutralElementVar(r.x, r.y, r.z); + } + + public static bool ValidatePublicKeyPartial(byte[] pk, int pkOff) + { + Init(out PointProjective p); + return DecodePointVar(pk, pkOff, false, ref p); + } + + public static bool Verify(byte[] sig, int sigOff, byte[] pk, int pkOff, byte[] ctx, byte[] m, int mOff, int mLen) + { + byte phflag = 0x00; + + return ImplVerify(sig, sigOff, pk, pkOff, ctx, phflag, m, mOff, mLen); + } + + public static bool VerifyPrehash(byte[] sig, int sigOff, byte[] pk, int pkOff, byte[] ctx, byte[] ph, int phOff) + { + byte phflag = 0x01; + + return ImplVerify(sig, sigOff, pk, pkOff, ctx, phflag, ph, phOff, PrehashSize); + } + + public static bool VerifyPrehash(byte[] sig, int sigOff, byte[] pk, int pkOff, byte[] ctx, IXof ph) + { + byte[] m = new byte[PrehashSize]; + if (PrehashSize != ph.OutputFinal(m, 0, PrehashSize)) + throw new ArgumentException("ph"); + + byte phflag = 0x01; + + return ImplVerify(sig, sigOff, pk, pkOff, ctx, phflag, m, 0, m.Length); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc8032/Ed448.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc8032/Ed448.cs.meta new file mode 100644 index 000000000..4b7df1a2f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/ec/rfc8032/Ed448.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c64dbb57202f6ea4d9bb61c1bf7a39b1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field.meta new file mode 100644 index 000000000..735d8ed58 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8e4af59d5da39324490dcbe72fd54f35 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/FiniteFields.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/FiniteFields.cs new file mode 100644 index 000000000..f011b341f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/FiniteFields.cs @@ -0,0 +1,58 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Field +{ + public abstract class FiniteFields + { + internal static readonly IFiniteField GF_2 = new PrimeField(BigInteger.ValueOf(2)); + internal static readonly IFiniteField GF_3 = new PrimeField(BigInteger.ValueOf(3)); + + public static IPolynomialExtensionField GetBinaryExtensionField(int[] exponents) + { + if (exponents[0] != 0) + { + throw new ArgumentException("Irreducible polynomials in GF(2) must have constant term", "exponents"); + } + for (int i = 1; i < exponents.Length; ++i) + { + if (exponents[i] <= exponents[i - 1]) + { + throw new ArgumentException("Polynomial exponents must be monotonically increasing", "exponents"); + } + } + + return new GenericPolynomialExtensionField(GF_2, new GF2Polynomial(exponents)); + } + + // public static IPolynomialExtensionField GetTernaryExtensionField(Term[] terms) + // { + // return new GenericPolynomialExtensionField(GF_3, new GF3Polynomial(terms)); + // } + + public static IFiniteField GetPrimeField(BigInteger characteristic) + { + int bitLength = characteristic.BitLength; + if (characteristic.SignValue <= 0 || bitLength < 2) + { + throw new ArgumentException("Must be >= 2", "characteristic"); + } + + if (bitLength < 3) + { + switch (characteristic.IntValue) + { + case 2: + return GF_2; + case 3: + return GF_3; + } + } + + return new PrimeField(characteristic); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/FiniteFields.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/FiniteFields.cs.meta new file mode 100644 index 000000000..4a4ed74de --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/FiniteFields.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 92b0c0982de25d14ab60b59bec46e670 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/GF2Polynomial.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/GF2Polynomial.cs new file mode 100644 index 000000000..c1e34b4a0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/GF2Polynomial.cs @@ -0,0 +1,50 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Field +{ + internal class GF2Polynomial + : IPolynomial + { + protected readonly int[] exponents; + + internal GF2Polynomial(int[] exponents) + { + this.exponents = Arrays.Clone(exponents); + } + + public virtual int Degree + { + get { return exponents[exponents.Length - 1]; } + } + + public virtual int[] GetExponentsPresent() + { + return Arrays.Clone(exponents); + } + + public override bool Equals(object obj) + { + if (this == obj) + { + return true; + } + GF2Polynomial other = obj as GF2Polynomial; + if (null == other) + { + return false; + } + return Arrays.AreEqual(exponents, other.exponents); + } + + public override int GetHashCode() + { + return Arrays.GetHashCode(exponents); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/GF2Polynomial.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/GF2Polynomial.cs.meta new file mode 100644 index 000000000..bbd88a3d0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/GF2Polynomial.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1f60cfed9db54b1439f939b3bb13603f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/GenericPolynomialExtensionField.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/GenericPolynomialExtensionField.cs new file mode 100644 index 000000000..bf9a42adb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/GenericPolynomialExtensionField.cs @@ -0,0 +1,67 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Field +{ + internal class GenericPolynomialExtensionField + : IPolynomialExtensionField + { + protected readonly IFiniteField subfield; + protected readonly IPolynomial minimalPolynomial; + + internal GenericPolynomialExtensionField(IFiniteField subfield, IPolynomial polynomial) + { + this.subfield = subfield; + this.minimalPolynomial = polynomial; + } + + public virtual BigInteger Characteristic + { + get { return subfield.Characteristic; } + } + + public virtual int Dimension + { + get { return subfield.Dimension * minimalPolynomial.Degree; } + } + + public virtual IFiniteField Subfield + { + get { return subfield; } + } + + public virtual int Degree + { + get { return minimalPolynomial.Degree; } + } + + public virtual IPolynomial MinimalPolynomial + { + get { return minimalPolynomial; } + } + + public override bool Equals(object obj) + { + if (this == obj) + { + return true; + } + GenericPolynomialExtensionField other = obj as GenericPolynomialExtensionField; + if (null == other) + { + return false; + } + return subfield.Equals(other.subfield) && minimalPolynomial.Equals(other.minimalPolynomial); + } + + public override int GetHashCode() + { + return subfield.GetHashCode() ^ Integers.RotateLeft(minimalPolynomial.GetHashCode(), 16); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/GenericPolynomialExtensionField.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/GenericPolynomialExtensionField.cs.meta new file mode 100644 index 000000000..e128156eb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/GenericPolynomialExtensionField.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 707d2ae0e23b0474db27c4d8028a82be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IExtensionField.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IExtensionField.cs new file mode 100644 index 000000000..7f902de94 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IExtensionField.cs @@ -0,0 +1,16 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Field +{ + public interface IExtensionField + : IFiniteField + { + IFiniteField Subfield { get; } + + int Degree { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IExtensionField.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IExtensionField.cs.meta new file mode 100644 index 000000000..83e401be2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IExtensionField.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 46600326fc07cab4fb303ad15b653ce8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IFiniteField.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IFiniteField.cs new file mode 100644 index 000000000..b1c66739e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IFiniteField.cs @@ -0,0 +1,15 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Field +{ + public interface IFiniteField + { + BigInteger Characteristic { get; } + + int Dimension { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IFiniteField.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IFiniteField.cs.meta new file mode 100644 index 000000000..8a5839478 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IFiniteField.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b8081bcebd92cff45a40e33456292c5e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IPolynomial.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IPolynomial.cs new file mode 100644 index 000000000..8acc560bf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IPolynomial.cs @@ -0,0 +1,19 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Field +{ + public interface IPolynomial + { + int Degree { get; } + + //BigInteger[] GetCoefficients(); + + int[] GetExponentsPresent(); + + //Term[] GetNonZeroTerms(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IPolynomial.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IPolynomial.cs.meta new file mode 100644 index 000000000..8eef28800 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IPolynomial.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 877adb45e13476048948e8911ea91d8a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IPolynomialExtensionField.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IPolynomialExtensionField.cs new file mode 100644 index 000000000..eec86fb11 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IPolynomialExtensionField.cs @@ -0,0 +1,14 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Field +{ + public interface IPolynomialExtensionField + : IExtensionField + { + IPolynomial MinimalPolynomial { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IPolynomialExtensionField.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IPolynomialExtensionField.cs.meta new file mode 100644 index 000000000..a0de513f7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/IPolynomialExtensionField.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d3680e5f8fa00c4fb4365940d546aca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/PrimeField.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/PrimeField.cs new file mode 100644 index 000000000..ce5a1621d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/PrimeField.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Field +{ + internal class PrimeField + : IFiniteField + { + protected readonly BigInteger characteristic; + + internal PrimeField(BigInteger characteristic) + { + this.characteristic = characteristic; + } + + public virtual BigInteger Characteristic + { + get { return characteristic; } + } + + public virtual int Dimension + { + get { return 1; } + } + + public override bool Equals(object obj) + { + if (this == obj) + { + return true; + } + PrimeField other = obj as PrimeField; + if (null == other) + { + return false; + } + return characteristic.Equals(other.characteristic); + } + + public override int GetHashCode() + { + return characteristic.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/PrimeField.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/PrimeField.cs.meta new file mode 100644 index 000000000..a23538d6c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/field/PrimeField.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f446b15eeb02a1458d209b9439c3265 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw.meta new file mode 100644 index 000000000..b4539d459 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fee958d1244f2734fa72979d647c8b50 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Bits.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Bits.cs new file mode 100644 index 000000000..0bc62caaa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Bits.cs @@ -0,0 +1,90 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.Diagnostics; +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER +using System.Runtime.CompilerServices; +#endif + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw +{ + internal static class Bits + { +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + internal static uint BitPermuteStep(uint x, uint m, int s) + { + Debug.Assert((m & (m << s)) == 0U); + Debug.Assert((m << s) >> s == m); + + uint t = (x ^ (x >> s)) & m; + return t ^ (t << s) ^ x; + } + +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + internal static ulong BitPermuteStep(ulong x, ulong m, int s) + { + Debug.Assert((m & (m << s)) == 0UL); + Debug.Assert((m << s) >> s == m); + + ulong t = (x ^ (x >> s)) & m; + return t ^ (t << s) ^ x; + } + +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + internal static void BitPermuteStep2(ref uint hi, ref uint lo, uint m, int s) + { +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP1_1_OR_GREATER || UNITY_2021_2_OR_NEWER + //Debug.Assert(!Unsafe.AreSame(ref hi, ref lo) || (m & (m << s)) == 0U); +#endif + Debug.Assert((m << s) >> s == m); + + uint t = ((lo >> s) ^ hi) & m; + lo ^= t << s; + hi ^= t; + } + +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + internal static void BitPermuteStep2(ref ulong hi, ref ulong lo, ulong m, int s) + { +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP1_1_OR_GREATER || UNITY_2021_2_OR_NEWER + //Debug.Assert(!Unsafe.AreSame(ref hi, ref lo) || (m & (m << s)) == 0UL); +#endif + Debug.Assert((m << s) >> s == m); + + ulong t = ((lo >> s) ^ hi) & m; + lo ^= t << s; + hi ^= t; + } + +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + internal static uint BitPermuteStepSimple(uint x, uint m, int s) + { + Debug.Assert((m & (m << s)) == 0U); + Debug.Assert((m << s) >> s == m); + + return ((x & m) << s) | ((x >> s) & m); + } + +#if NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || UNITY_2021_2_OR_NEWER + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + internal static ulong BitPermuteStepSimple(ulong x, ulong m, int s) + { + Debug.Assert((m & (m << s)) == 0UL); + Debug.Assert((m << s) >> s == m); + + return ((x & m) << s) | ((x >> s) & m); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Bits.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Bits.cs.meta new file mode 100644 index 000000000..f16f2875a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Bits.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c4f90705edf4cfd4098dc67ae378f9c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Interleave.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Interleave.cs new file mode 100644 index 000000000..8f6006bb0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Interleave.cs @@ -0,0 +1,250 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +#if NETCOREAPP3_0_OR_GREATER +using System.Runtime.Intrinsics.X86; +#endif + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw +{ + internal abstract class Interleave + { + private const ulong M32 = 0x55555555UL; + private const ulong M64 = 0x5555555555555555UL; + private const ulong M64R = 0xAAAAAAAAAAAAAAAAUL; + + internal static uint Expand8to16(uint x) + { + x &= 0xFFU; + x = (x | (x << 4)) & 0x0F0FU; + x = (x | (x << 2)) & 0x3333U; + x = (x | (x << 1)) & 0x5555U; + return x; + } + + internal static uint Expand16to32(uint x) + { + x &= 0xFFFFU; + x = (x | (x << 8)) & 0x00FF00FFU; + x = (x | (x << 4)) & 0x0F0F0F0FU; + x = (x | (x << 2)) & 0x33333333U; + x = (x | (x << 1)) & 0x55555555U; + return x; + } + + internal static ulong Expand32to64(uint x) + { +#if NETCOREAPP3_0_OR_GREATER + if (Bmi2.IsSupported) + { + return (ulong)Bmi2.ParallelBitDeposit(x >> 16, 0x55555555U) << 32 + | Bmi2.ParallelBitDeposit(x , 0x55555555U); + } +#endif + + // "shuffle" low half to even bits and high half to odd bits + x = Bits.BitPermuteStep(x, 0x0000FF00U, 8); + x = Bits.BitPermuteStep(x, 0x00F000F0U, 4); + x = Bits.BitPermuteStep(x, 0x0C0C0C0CU, 2); + x = Bits.BitPermuteStep(x, 0x22222222U, 1); + + return ((x >> 1) & M32) << 32 | (x & M32); + } + + internal static void Expand64To128(ulong x, ulong[] z, int zOff) + { +#if NETCOREAPP3_0_OR_GREATER + if (Bmi2.X64.IsSupported) + { + z[zOff ] = Bmi2.X64.ParallelBitDeposit(x , 0x5555555555555555UL); + z[zOff + 1] = Bmi2.X64.ParallelBitDeposit(x >> 32, 0x5555555555555555UL); + return; + } +#endif + + // "shuffle" low half to even bits and high half to odd bits + x = Bits.BitPermuteStep(x, 0x00000000FFFF0000UL, 16); + x = Bits.BitPermuteStep(x, 0x0000FF000000FF00UL, 8); + x = Bits.BitPermuteStep(x, 0x00F000F000F000F0UL, 4); + x = Bits.BitPermuteStep(x, 0x0C0C0C0C0C0C0C0CUL, 2); + x = Bits.BitPermuteStep(x, 0x2222222222222222UL, 1); + + z[zOff ] = (x ) & M64; + z[zOff + 1] = (x >> 1) & M64; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal static void Expand64To128(ulong x, Span z) + { +#if NETCOREAPP3_0_OR_GREATER + if (Bmi2.X64.IsSupported) + { + z[0] = Bmi2.X64.ParallelBitDeposit(x , 0x5555555555555555UL); + z[1] = Bmi2.X64.ParallelBitDeposit(x >> 32, 0x5555555555555555UL); + return; + } +#endif + + // "shuffle" low half to even bits and high half to odd bits + x = Bits.BitPermuteStep(x, 0x00000000FFFF0000UL, 16); + x = Bits.BitPermuteStep(x, 0x0000FF000000FF00UL, 8); + x = Bits.BitPermuteStep(x, 0x00F000F000F000F0UL, 4); + x = Bits.BitPermuteStep(x, 0x0C0C0C0C0C0C0C0CUL, 2); + x = Bits.BitPermuteStep(x, 0x2222222222222222UL, 1); + + z[0] = (x ) & M64; + z[1] = (x >> 1) & M64; + } +#endif + + internal static void Expand64To128(ulong[] xs, int xsOff, int xsLen, ulong[] zs, int zsOff) + { + int xsPos = xsLen, zsPos = zsOff + (xsLen << 1); + while (--xsPos >= 0) + { + zsPos -= 2; + Expand64To128(xs[xsOff + xsPos], zs, zsPos); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + internal static void Expand64To128(ReadOnlySpan xs, Span zs) + { + int xsPos = xs.Length, zsPos = xs.Length << 1; + Debug.Assert(!zs[xsPos..zsPos].Overlaps(xs)); + while (--xsPos >= 0) + { + zsPos -= 2; + Expand64To128(xs[xsPos], zs[zsPos..]); + } + } +#endif + + internal static ulong Expand64To128Rev(ulong x, out ulong low) + { +#if NETCOREAPP3_0_OR_GREATER + if (Bmi2.X64.IsSupported) + { + low = Bmi2.X64.ParallelBitDeposit(x >> 32, 0xAAAAAAAAAAAAAAAAUL); + return Bmi2.X64.ParallelBitDeposit(x , 0xAAAAAAAAAAAAAAAAUL); + } +#endif + + // "shuffle" low half to even bits and high half to odd bits + x = Bits.BitPermuteStep(x, 0x00000000FFFF0000UL, 16); + x = Bits.BitPermuteStep(x, 0x0000FF000000FF00UL, 8); + x = Bits.BitPermuteStep(x, 0x00F000F000F000F0UL, 4); + x = Bits.BitPermuteStep(x, 0x0C0C0C0C0C0C0C0CUL, 2); + x = Bits.BitPermuteStep(x, 0x2222222222222222UL, 1); + + low = (x ) & M64R; + return (x << 1) & M64R; + } + + internal static uint Shuffle(uint x) + { + // "shuffle" low half to even bits and high half to odd bits + x = Bits.BitPermuteStep(x, 0x0000FF00U, 8); + x = Bits.BitPermuteStep(x, 0x00F000F0U, 4); + x = Bits.BitPermuteStep(x, 0x0C0C0C0CU, 2); + x = Bits.BitPermuteStep(x, 0x22222222U, 1); + return x; + } + + internal static ulong Shuffle(ulong x) + { + // "shuffle" low half to even bits and high half to odd bits + x = Bits.BitPermuteStep(x, 0x00000000FFFF0000UL, 16); + x = Bits.BitPermuteStep(x, 0x0000FF000000FF00UL, 8); + x = Bits.BitPermuteStep(x, 0x00F000F000F000F0UL, 4); + x = Bits.BitPermuteStep(x, 0x0C0C0C0C0C0C0C0CUL, 2); + x = Bits.BitPermuteStep(x, 0x2222222222222222UL, 1); + return x; + } + + internal static uint Shuffle2(uint x) + { + // "shuffle" (twice) low half to even bits and high half to odd bits + x = Bits.BitPermuteStep(x, 0x00AA00AAU, 7); + x = Bits.BitPermuteStep(x, 0x0000CCCCU, 14); + x = Bits.BitPermuteStep(x, 0x00F000F0U, 4); + x = Bits.BitPermuteStep(x, 0x0000FF00U, 8); + return x; + } + + internal static uint Unshuffle(uint x) + { + // "unshuffle" even bits to low half and odd bits to high half + x = Bits.BitPermuteStep(x, 0x22222222U, 1); + x = Bits.BitPermuteStep(x, 0x0C0C0C0CU, 2); + x = Bits.BitPermuteStep(x, 0x00F000F0U, 4); + x = Bits.BitPermuteStep(x, 0x0000FF00U, 8); + return x; + } + + internal static ulong Unshuffle(ulong x) + { +#if NETCOREAPP3_0_OR_GREATER + if (Bmi2.X64.IsSupported) + { + return Bmi2.X64.ParallelBitExtract(x, 0xAAAAAAAAAAAAAAAAUL) << 32 + | Bmi2.X64.ParallelBitExtract(x, 0x5555555555555555UL); + } +#endif + + // "unshuffle" even bits to low half and odd bits to high half + x = Bits.BitPermuteStep(x, 0x2222222222222222UL, 1); + x = Bits.BitPermuteStep(x, 0x0C0C0C0C0C0C0C0CUL, 2); + x = Bits.BitPermuteStep(x, 0x00F000F000F000F0UL, 4); + x = Bits.BitPermuteStep(x, 0x0000FF000000FF00UL, 8); + x = Bits.BitPermuteStep(x, 0x00000000FFFF0000UL, 16); + return x; + } + + internal static ulong Unshuffle(ulong x, out ulong even) + { +#if NETCOREAPP3_0_OR_GREATER + if (Bmi2.X64.IsSupported) + { + even = Bmi2.X64.ParallelBitExtract(x, 0x5555555555555555UL); + return Bmi2.X64.ParallelBitExtract(x, 0xAAAAAAAAAAAAAAAAUL); + } +#endif + + ulong u0 = Unshuffle(x); + even = u0 & 0x00000000FFFFFFFFUL; + return u0 >> 32; + } + + internal static ulong Unshuffle(ulong x0, ulong x1, out ulong even) + { +#if NETCOREAPP3_0_OR_GREATER + if (Bmi2.X64.IsSupported) + { + even = Bmi2.X64.ParallelBitExtract(x0, 0x5555555555555555UL) + | Bmi2.X64.ParallelBitExtract(x1, 0x5555555555555555UL) << 32; + return Bmi2.X64.ParallelBitExtract(x0, 0xAAAAAAAAAAAAAAAAUL) + | Bmi2.X64.ParallelBitExtract(x1, 0xAAAAAAAAAAAAAAAAUL) << 32; + } +#endif + + ulong u0 = Unshuffle(x0); + ulong u1 = Unshuffle(x1); + even = (u1 << 32) | (u0 & 0x00000000FFFFFFFFUL); + return (u0 >> 32) | (u1 & 0xFFFFFFFF00000000UL); + } + + internal static uint Unshuffle2(uint x) + { + // "unshuffle" (twice) even bits to low half and odd bits to high half + x = Bits.BitPermuteStep(x, 0x0000FF00U, 8); + x = Bits.BitPermuteStep(x, 0x00F000F0U, 4); + x = Bits.BitPermuteStep(x, 0x0000CCCCU, 14); + x = Bits.BitPermuteStep(x, 0x00AA00AAU, 7); + return x; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Interleave.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Interleave.cs.meta new file mode 100644 index 000000000..6495c8b34 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Interleave.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b27f92aaead537f4faa3a35281664181 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Mod.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Mod.cs new file mode 100644 index 000000000..6fb0842f9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Mod.cs @@ -0,0 +1,914 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw +{ + /* + * Modular inversion as implemented in this class is based on the paper "Fast constant-time gcd + * computation and modular inversion" by Daniel J. Bernstein and Bo-Yin Yang. + */ + + internal static class Mod + { + private const int M30 = 0x3FFFFFFF; + private const ulong M32UL = 0xFFFFFFFFUL; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void CheckedModOddInverse(ReadOnlySpan m, ReadOnlySpan x, Span z) +#else + public static void CheckedModOddInverse(uint[] m, uint[] x, uint[] z) +#endif + { + if (0 == ModOddInverse(m, x, z)) + throw new ArithmeticException("Inverse does not exist."); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void CheckedModOddInverseVar(ReadOnlySpan m, ReadOnlySpan x, Span z) +#else + public static void CheckedModOddInverseVar(uint[] m, uint[] x, uint[] z) +#endif + { + if (!ModOddInverseVar(m, x, z)) + throw new ArithmeticException("Inverse does not exist."); + } + + public static uint Inverse32(uint d) + { + Debug.Assert((d & 1U) == 1U); + + //int x = d + (((d + 1) & 4) << 1); // d.x == 1 mod 2**4 + uint x = d; // d.x == 1 mod 2**3 + x *= 2 - d * x; // d.x == 1 mod 2**6 + x *= 2 - d * x; // d.x == 1 mod 2**12 + x *= 2 - d * x; // d.x == 1 mod 2**24 + x *= 2 - d * x; // d.x == 1 mod 2**48 + Debug.Assert(d * x == 1U); + return x; + } + + public static ulong Inverse64(ulong d) + { + Debug.Assert((d & 1UL) == 1UL); + + //ulong x = d + (((d + 1) & 4) << 1); // d.x == 1 mod 2**4 + ulong x = d; // d.x == 1 mod 2**3 + x *= 2 - d * x; // d.x == 1 mod 2**6 + x *= 2 - d * x; // d.x == 1 mod 2**12 + x *= 2 - d * x; // d.x == 1 mod 2**24 + x *= 2 - d * x; // d.x == 1 mod 2**48 + x *= 2 - d * x; // d.x == 1 mod 2**96 + Debug.Assert(d * x == 1UL); + return x; + } + + public static uint ModOddInverse(uint[] m, uint[] x, uint[] z) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ModOddInverse(m.AsSpan(), x.AsSpan(), z.AsSpan()); +#else + int len32 = m.Length; + Debug.Assert(len32 > 0); + Debug.Assert((m[0] & 1) != 0); + Debug.Assert(m[len32 - 1] != 0); + + int bits = (len32 << 5) - Integers.NumberOfLeadingZeros((int)m[len32 - 1]); + int len30 = (bits + 29) / 30; + + int[] t = new int[4]; + int[] D = new int[len30]; + int[] E = new int[len30]; + int[] F = new int[len30]; + int[] G = new int[len30]; + int[] M = new int[len30]; + + E[0] = 1; + Encode30(bits, x, 0, G, 0); + Encode30(bits, m, 0, M, 0); + Array.Copy(M, 0, F, 0, len30); + + int delta = 0; + int m0Inv32 = (int)Inverse32((uint)M[0]); + int maxDivsteps = GetMaximumDivsteps(bits); + + for (int divSteps = 0; divSteps < maxDivsteps; divSteps += 30) + { + delta = Divsteps30(delta, F[0], G[0], t); + UpdateDE30(len30, D, E, t, m0Inv32, M); + UpdateFG30(len30, F, G, t); + } + + int signF = F[len30 - 1] >> 31; + CNegate30(len30, signF, F); + + /* + * D is in the range (-2.M, M). First, conditionally add M if D is negative, to bring it + * into the range (-M, M). Then normalize by conditionally negating (according to signF) + * and/or then adding M, to bring it into the range [0, M). + */ + CNormalize30(len30, signF, D, M); + + Decode30(bits, D, 0, z, 0); + Debug.Assert(0 != Nat.LessThan(m.Length, z, m)); + + return (uint)(EqualTo(len30, F, 1) & EqualToZero(len30, G)); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint ModOddInverse(ReadOnlySpan m, ReadOnlySpan x, Span z) + { + int len32 = m.Length; + Debug.Assert(len32 > 0); + Debug.Assert((m[0] & 1) != 0); + Debug.Assert(m[len32 - 1] != 0); + + int bits = (len32 << 5) - Integers.NumberOfLeadingZeros((int)m[len32 - 1]); + int len30 = (bits + 29) / 30; + + Span alloc = len30 <= 50 + ? stackalloc int[len30 * 5] + : new int[len30 * 5]; + + Span t = stackalloc int[4]; + Span D = alloc[..len30]; alloc = alloc[len30..]; + Span E = alloc[..len30]; alloc = alloc[len30..]; + Span F = alloc[..len30]; alloc = alloc[len30..]; + Span G = alloc[..len30]; alloc = alloc[len30..]; + Span M = alloc[..len30]; + + E[0] = 1; + Encode30(bits, x, G); + Encode30(bits, m, M); + M.CopyTo(F); + + int delta = 0; + int m0Inv32 = (int)Inverse32((uint)M[0]); + int maxDivsteps = GetMaximumDivsteps(bits); + + for (int divSteps = 0; divSteps < maxDivsteps; divSteps += 30) + { + delta = Divsteps30(delta, F[0], G[0], t); + UpdateDE30(len30, D, E, t, m0Inv32, M); + UpdateFG30(len30, F, G, t); + } + + int signF = F[len30 - 1] >> 31; + CNegate30(len30, signF, F); + + /* + * D is in the range (-2.M, M). First, conditionally add M if D is negative, to bring it + * into the range (-M, M). Then normalize by conditionally negating (according to signF) + * and/or then adding M, to bring it into the range [0, M). + */ + CNormalize30(len30, signF, D, M); + + Decode30(bits, D, z); + Debug.Assert(0 != Nat.LessThan(m.Length, z, m)); + + return (uint)(EqualTo(len30, F, 1) & EqualToZero(len30, G)); + } +#endif + + public static bool ModOddInverseVar(uint[] m, uint[] x, uint[] z) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ModOddInverseVar(m.AsSpan(), x.AsSpan(), z.AsSpan()); +#else + int len32 = m.Length; + Debug.Assert(len32 > 0); + Debug.Assert((m[0] & 1) != 0); + Debug.Assert(m[len32 - 1] != 0); + + int bits = (len32 << 5) - Integers.NumberOfLeadingZeros((int)m[len32 - 1]); + int len30 = (bits + 29) / 30; + + int[] t = new int[4]; + int[] D = new int[len30]; + int[] E = new int[len30]; + int[] F = new int[len30]; + int[] G = new int[len30]; + int[] M = new int[len30]; + + E[0] = 1; + Encode30(bits, x, 0, G, 0); + Encode30(bits, m, 0, M, 0); + Array.Copy(M, 0, F, 0, len30); + + int clzG = Integers.NumberOfLeadingZeros(G[len30 - 1] | 1) - (len30 * 30 + 2 - bits); + int eta = -1 - clzG; + int lenDE = len30, lenFG = len30; + int m0Inv32 = (int)Inverse32((uint)M[0]); + int maxDivsteps = GetMaximumDivsteps(bits); + + int divsteps = 0; + while (!IsZero(lenFG, G)) + { + if (divsteps >= maxDivsteps) + return false; + + divsteps += 30; + + eta = Divsteps30Var(eta, F[0], G[0], t); + UpdateDE30(lenDE, D, E, t, m0Inv32, M); + UpdateFG30(lenFG, F, G, t); + + int fn = F[lenFG - 1]; + int gn = G[lenFG - 1]; + + int cond = (lenFG - 2) >> 31; + cond |= fn ^ (fn >> 31); + cond |= gn ^ (gn >> 31); + + if (cond == 0) + { + F[lenFG - 2] |= fn << 30; + G[lenFG - 2] |= gn << 30; + --lenFG; + } + } + + int signF = F[lenFG - 1] >> 31; + + /* + * D is in the range (-2.M, M). First, conditionally add M if D is negative, to bring it + * into the range (-M, M). Then normalize by conditionally negating (according to signF) + * and/or then adding M, to bring it into the range [0, M). + */ + int signD = D[lenDE - 1] >> 31; + if (signD < 0) + { + signD = Add30(lenDE, D, M); + } + if (signF < 0) + { + signD = Negate30(lenDE, D); + signF = Negate30(lenFG, F); + } + Debug.Assert(0 == signF); + + if (!IsOne(lenFG, F)) + return false; + + if (signD < 0) + { + signD = Add30(lenDE, D, M); + } + Debug.Assert(0 == signD); + + Decode30(bits, D, 0, z, 0); + Debug.Assert(!Nat.Gte(m.Length, z, m)); + + return true; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static bool ModOddInverseVar(ReadOnlySpan m, ReadOnlySpan x, Span z) + { + int len32 = m.Length; + Debug.Assert(len32 > 0); + Debug.Assert((m[0] & 1) != 0); + Debug.Assert(m[len32 - 1] != 0); + + int bits = (len32 << 5) - Integers.NumberOfLeadingZeros((int)m[len32 - 1]); + int len30 = (bits + 29) / 30; + + Span alloc = len30 <= 50 + ? stackalloc int[len30 * 5] + : new int[len30 * 5]; + + Span t = stackalloc int[4]; + Span D = alloc[..len30]; alloc = alloc[len30..]; + Span E = alloc[..len30]; alloc = alloc[len30..]; + Span F = alloc[..len30]; alloc = alloc[len30..]; + Span G = alloc[..len30]; alloc = alloc[len30..]; + Span M = alloc[..len30]; + + E[0] = 1; + Encode30(bits, x, G); + Encode30(bits, m, M); + M.CopyTo(F); + + int clzG = Integers.NumberOfLeadingZeros(G[len30 - 1] | 1) - (len30 * 30 + 2 - bits); + int eta = -1 - clzG; + int lenDE = len30, lenFG = len30; + int m0Inv32 = (int)Inverse32((uint)M[0]); + int maxDivsteps = GetMaximumDivsteps(bits); + + int divsteps = 0; + while (!IsZero(lenFG, G)) + { + if (divsteps >= maxDivsteps) + return false; + + divsteps += 30; + + eta = Divsteps30Var(eta, F[0], G[0], t); + UpdateDE30(lenDE, D, E, t, m0Inv32, M); + UpdateFG30(lenFG, F, G, t); + + int fn = F[lenFG - 1]; + int gn = G[lenFG - 1]; + + int cond = (lenFG - 2) >> 31; + cond |= fn ^ (fn >> 31); + cond |= gn ^ (gn >> 31); + + if (cond == 0) + { + F[lenFG - 2] |= fn << 30; + G[lenFG - 2] |= gn << 30; + --lenFG; + } + } + + int signF = F[lenFG - 1] >> 31; + + /* + * D is in the range (-2.M, M). First, conditionally add M if D is negative, to bring it + * into the range (-M, M). Then normalize by conditionally negating (according to signF) + * and/or then adding M, to bring it into the range [0, M). + */ + int signD = D[lenDE - 1] >> 31; + if (signD < 0) + { + signD = Add30(lenDE, D, M); + } + if (signF < 0) + { + signD = Negate30(lenDE, D); + signF = Negate30(lenFG, F); + } + Debug.Assert(0 == signF); + + if (!IsOne(lenFG, F)) + return false; + + if (signD < 0) + { + signD = Add30(lenDE, D, M); + } + Debug.Assert(0 == signD); + + Decode30(bits, D, z); + Debug.Assert(!Nat.Gte(m.Length, z, m)); + + return true; + } +#endif + + public static uint[] Random(SecureRandom random, uint[] p) + { + int len = p.Length; + uint[] s = Nat.Create(len); + + uint m = p[len - 1]; + m |= m >> 1; + m |= m >> 2; + m |= m >> 4; + m |= m >> 8; + m |= m >> 16; + + byte[] bytes = new byte[len << 2]; + do + { + random.NextBytes(bytes); + Pack.BE_To_UInt32(bytes, 0, s); + s[len - 1] &= m; + } + while (Nat.Gte(len, s, p)); + + return s; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Random(SecureRandom random, ReadOnlySpan p, Span z) + { + int len = p.Length; + if (z.Length < len) + throw new ArgumentException("insufficient space", nameof(z)); + + var s = z[..len]; + + uint m = p[len - 1]; + m |= m >> 1; + m |= m >> 2; + m |= m >> 4; + m |= m >> 8; + m |= m >> 16; + + Span bytes = len <= 256 + ? stackalloc byte[len << 2] + : new byte[len << 2]; + + do + { + random.NextBytes(bytes); + Pack.BE_To_UInt32(bytes, s); + s[len - 1] &= m; + } + while (Nat.Gte(len, s, p)); + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static int Add30(int len30, Span D, ReadOnlySpan M) +#else + private static int Add30(int len30, int[] D, int[] M) +#endif + { + Debug.Assert(len30 > 0); + Debug.Assert(D.Length >= len30); + Debug.Assert(M.Length >= len30); + + int c = 0, last = len30 - 1; + for (int i = 0; i < last; ++i) + { + c += D[i] + M[i]; + D[i] = c & M30; c >>= 30; + } + c += D[last] + M[last]; + D[last] = c; c >>= 30; + return c; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void CNegate30(int len30, int cond, Span D) +#else + private static void CNegate30(int len30, int cond, int[] D) +#endif + { + Debug.Assert(len30 > 0); + Debug.Assert(D.Length >= len30); + + int c = 0, last = len30 - 1; + for (int i = 0; i < last; ++i) + { + c += (D[i] ^ cond) - cond; + D[i] = c & M30; c >>= 30; + } + c += (D[last] ^ cond) - cond; + D[last] = c; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void CNormalize30(int len30, int condNegate, Span D, ReadOnlySpan M) +#else + private static void CNormalize30(int len30, int condNegate, int[] D, int[] M) +#endif + { + Debug.Assert(len30 > 0); + Debug.Assert(D.Length >= len30); + Debug.Assert(M.Length >= len30); + + int last = len30 - 1; + + { + int c = 0, condAdd = D[last] >> 31; + for (int i = 0; i < last; ++i) + { + int di = D[i] + (M[i] & condAdd); + di = (di ^ condNegate) - condNegate; + c += di; D[i] = c & M30; c >>= 30; + } + { + int di = D[last] + (M[last] & condAdd); + di = (di ^ condNegate) - condNegate; + c += di; D[last] = c; + } + } + + { + int c = 0, condAdd = D[last] >> 31; + for (int i = 0; i < last; ++i) + { + int di = D[i] + (M[i] & condAdd); + c += di; D[i] = c & M30; c >>= 30; + } + { + int di = D[last] + (M[last] & condAdd); + c += di; D[last] = c; + } + Debug.Assert(c >> 30 == 0); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void Decode30(int bits, ReadOnlySpan x, Span z) + { + Debug.Assert(bits > 0); + + int avail = 0; + ulong data = 0L; + + int xOff = 0, zOff = 0; + while (bits > 0) + { + while (avail < System.Math.Min(32, bits)) + { + data |= (ulong)x[xOff++] << avail; + avail += 30; + } + + z[zOff++] = (uint)data; data >>= 32; + avail -= 32; + bits -= 32; + } + } +#else + private static void Decode30(int bits, int[] x, int xOff, uint[] z, int zOff) + { + Debug.Assert(bits > 0); + + int avail = 0; + ulong data = 0L; + + while (bits > 0) + { + while (avail < System.Math.Min(32, bits)) + { + data |= (ulong)x[xOff++] << avail; + avail += 30; + } + + z[zOff++] = (uint)data; data >>= 32; + avail -= 32; + bits -= 32; + } + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static int Divsteps30(int delta, int f0, int g0, Span t) +#else + private static int Divsteps30(int delta, int f0, int g0, int[] t) +#endif + { + int u = 1 << 30, v = 0, q = 0, r = 1 << 30; + int f = f0, g = g0; + + for (int i = 0; i < 30; ++i) + { + Debug.Assert((f & 1) == 1); + Debug.Assert(((u >> (30 - i)) * f0 + (v >> (30 - i)) * g0) == f << i); + Debug.Assert(((q >> (30 - i)) * f0 + (r >> (30 - i)) * g0) == g << i); + + int c1 = delta >> 31; + int c2 = -(g & 1); + + int x = f ^ c1; + int y = u ^ c1; + int z = v ^ c1; + + g -= x & c2; + q -= y & c2; + r -= z & c2; + + c2 &= ~c1; + delta = (delta ^ c2) - (c2 - 1); + + f += g & c2; + u += q & c2; + v += r & c2; + + g >>= 1; + q >>= 1; + r >>= 1; + } + + t[0] = u; + t[1] = v; + t[2] = q; + t[3] = r; + + return delta; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static int Divsteps30Var(int eta, int f0, int g0, Span t) +#else + private static int Divsteps30Var(int eta, int f0, int g0, int[] t) +#endif + { + int u = 1, v = 0, q = 0, r = 1; + int f = f0, g = g0, m, w, x, y, z; + int i = 30, limit, zeros; + + for (; ; ) + { + // Use a sentinel bit to count zeros only up to i. + zeros = Integers.NumberOfTrailingZeros(g | (-1 << i)); + + g >>= zeros; + u <<= zeros; + v <<= zeros; + eta -= zeros; + i -= zeros; + + if (i <= 0) + break; + + Debug.Assert((f & 1) == 1); + Debug.Assert((g & 1) == 1); + Debug.Assert((u * f0 + v * g0) == f << (30 - i)); + Debug.Assert((q * f0 + r * g0) == g << (30 - i)); + + if (eta < 0) + { + eta = -eta; + x = f; f = g; g = -x; + y = u; u = q; q = -y; + z = v; v = r; r = -z; + + // Handle up to 6 divsteps at once, subject to eta and i. + limit = (eta + 1) > i ? i : (eta + 1); + m = (int)((uint.MaxValue >> (32 - limit)) & 63U); + + w = (f * g * (f * f - 2)) & m; + } + else + { + // Handle up to 4 divsteps at once, subject to eta and i. + limit = (eta + 1) > i ? i : (eta + 1); + m = (int)((uint.MaxValue >> (32 - limit)) & 15U); + + w = f + (((f + 1) & 4) << 1); + w = (-w * g) & m; + } + + g += f * w; + q += u * w; + r += v * w; + + Debug.Assert((g & m) == 0); + } + + t[0] = u; + t[1] = v; + t[2] = q; + t[3] = r; + + return eta; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void Encode30(int bits, ReadOnlySpan x, Span z) + { + Debug.Assert(bits > 0); + + int avail = 0; + ulong data = 0UL; + + int xOff = 0, zOff = 0; + while (bits > 0) + { + if (avail < System.Math.Min(30, bits)) + { + data |= (x[xOff++] & M32UL) << avail; + avail += 32; + } + + z[zOff++] = (int)data & M30; data >>= 30; + avail -= 30; + bits -= 30; + } + } +#else + private static void Encode30(int bits, uint[] x, int xOff, int[] z, int zOff) + { + Debug.Assert(bits > 0); + + int avail = 0; + ulong data = 0UL; + + while (bits > 0) + { + if (avail < System.Math.Min(30, bits)) + { + data |= (x[xOff++] & M32UL) << avail; + avail += 32; + } + + z[zOff++] = (int)data & M30; data >>= 30; + avail -= 30; + bits -= 30; + } + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static int EqualTo(int len, ReadOnlySpan x, int y) +#else + private static int EqualTo(int len, int[] x, int y) +#endif + { + int d = x[0] ^ y; + for (int i = 1; i < len; ++i) + { + d |= x[i]; + } + d = (int)((uint)d >> 1) | (d & 1); + return (d - 1) >> 31; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static int EqualToZero(int len, ReadOnlySpan x) +#else + private static int EqualToZero(int len, int[] x) +#endif + { + int d = 0; + for (int i = 0; i < len; ++i) + { + d |= x[i]; + } + d = (int)((uint)d >> 1) | (d & 1); + return (d - 1) >> 31; + } + + private static int GetMaximumDivsteps(int bits) + { + return (49 * bits + (bits < 46 ? 80 : 47)) / 17; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static bool IsOne(int len, ReadOnlySpan x) +#else + private static bool IsOne(int len, int[] x) +#endif + { + if (x[0] != 1) + { + return false; + } + for (int i = 1; i < len; ++i) + { + if (x[i] != 0) + { + return false; + } + } + return true; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static bool IsZero(int len, ReadOnlySpan x) +#else + private static bool IsZero(int len, int[] x) +#endif + { + if (x[0] != 0) + { + return false; + } + for (int i = 1; i < len; ++i) + { + if (x[i] != 0) + { + return false; + } + } + return true; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static int Negate30(int len30, Span D) +#else + private static int Negate30(int len30, int[] D) +#endif + { + Debug.Assert(len30 > 0); + Debug.Assert(D.Length >= len30); + + int c = 0, last = len30 - 1; + for (int i = 0; i < last; ++i) + { + c -= D[i]; + D[i] = c & M30; c >>= 30; + } + c -= D[last]; + D[last] = c; c >>= 30; + return c; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void UpdateDE30(int len30, Span D, Span E, ReadOnlySpan t, int m0Inv32, + ReadOnlySpan M) +#else + private static void UpdateDE30(int len30, int[] D, int[] E, int[] t, int m0Inv32, int[] M) +#endif + { + Debug.Assert(len30 > 0); + Debug.Assert(D.Length >= len30); + Debug.Assert(E.Length >= len30); + Debug.Assert(M.Length >= len30); + Debug.Assert(m0Inv32 * M[0] == 1); + + int u = t[0], v = t[1], q = t[2], r = t[3]; + int di, ei, i, md, me, mi, sd, se; + long cd, ce; + + /* + * We accept D (E) in the range (-2.M, M) and conceptually add the modulus to the input + * value if it is initially negative. Instead of adding it explicitly, we add u and/or v (q + * and/or r) to md (me). + */ + sd = D[len30 - 1] >> 31; + se = E[len30 - 1] >> 31; + + md = (u & sd) + (v & se); + me = (q & sd) + (r & se); + + mi = M[0]; + di = D[0]; + ei = E[0]; + + cd = (long)u * di + (long)v * ei; + ce = (long)q * di + (long)r * ei; + + /* + * Subtract from md/me an extra term in the range [0, 2^30) such that the low 30 bits of the + * intermediate D/E values will be 0, allowing clean division by 2^30. The final D/E are + * thus in the range (-2.M, M), consistent with the input constraint. + */ + md -= (m0Inv32 * (int)cd + md) & M30; + me -= (m0Inv32 * (int)ce + me) & M30; + + cd += (long)mi * md; + ce += (long)mi * me; + + Debug.Assert(((int)cd & M30) == 0); + Debug.Assert(((int)ce & M30) == 0); + + cd >>= 30; + ce >>= 30; + + for (i = 1; i < len30; ++i) + { + mi = M[i]; + di = D[i]; + ei = E[i]; + + cd += (long)u * di + (long)v * ei + (long)mi * md; + ce += (long)q * di + (long)r * ei + (long)mi * me; + + D[i - 1] = (int)cd & M30; cd >>= 30; + E[i - 1] = (int)ce & M30; ce >>= 30; + } + + D[len30 - 1] = (int)cd; + E[len30 - 1] = (int)ce; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private static void UpdateFG30(int len30, Span F, Span G, ReadOnlySpan t) +#else + private static void UpdateFG30(int len30, int[] F, int[] G, int[] t) +#endif + { + Debug.Assert(len30 > 0); + Debug.Assert(F.Length >= len30); + Debug.Assert(G.Length >= len30); + + int u = t[0], v = t[1], q = t[2], r = t[3]; + int fi, gi, i; + long cf, cg; + + fi = F[0]; + gi = G[0]; + + cf = (long)u * fi + (long)v * gi; + cg = (long)q * fi + (long)r * gi; + + Debug.Assert(((int)cf & M30) == 0); + Debug.Assert(((int)cg & M30) == 0); + + cf >>= 30; + cg >>= 30; + + for (i = 1; i < len30; ++i) + { + fi = F[i]; + gi = G[i]; + + cf += (long)u * fi + (long)v * gi; + cg += (long)q * fi + (long)r * gi; + + F[i - 1] = (int)cf & M30; cf >>= 30; + G[i - 1] = (int)cg & M30; cg >>= 30; + } + + F[len30 - 1] = (int)cf; + G[len30 - 1] = (int)cg; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Mod.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Mod.cs.meta new file mode 100644 index 000000000..087b805a8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Mod.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 100ea3391c7eed94c8c1715df12ca0d9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat.cs new file mode 100644 index 000000000..54d4b5a00 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat.cs @@ -0,0 +1,2905 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw +{ + internal abstract class Nat + { + private const ulong M = 0xFFFFFFFFUL; + + public static uint Add(int len, uint[] x, uint[] y, uint[] z) + { + ulong c = 0; + for (int i = 0; i < len; ++i) + { + c += (ulong)x[i] + y[i]; + z[i] = (uint)c; + c >>= 32; + } + return (uint)c; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint Add(int len, ReadOnlySpan x, ReadOnlySpan y, Span z) + { + ulong c = 0; + for (int i = 0; i < len; ++i) + { + c += (ulong)x[i] + y[i]; + z[i] = (uint)c; + c >>= 32; + } + return (uint)c; + } +#endif + + public static uint Add33At(int len, uint x, uint[] z, int zPos) + { + Debug.Assert(zPos <= (len - 2)); + ulong c = (ulong)z[zPos + 0] + x; + z[zPos + 0] = (uint)c; + c >>= 32; + c += (ulong)z[zPos + 1] + 1; + z[zPos + 1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, zPos + 2); + } + + public static uint Add33At(int len, uint x, uint[] z, int zOff, int zPos) + { + Debug.Assert(zPos <= (len - 2)); + ulong c = (ulong)z[zOff + zPos] + x; + z[zOff + zPos] = (uint)c; + c >>= 32; + c += (ulong)z[zOff + zPos + 1] + 1; + z[zOff + zPos + 1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, zOff, zPos + 2); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint Add33At(int len, uint x, Span z, int zPos) + { + Debug.Assert(zPos <= (len - 2)); + ulong c = (ulong)z[zPos + 0] + x; + z[zPos + 0] = (uint)c; + c >>= 32; + c += (ulong)z[zPos + 1] + 1; + z[zPos + 1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, zPos + 2); + } +#endif + + public static uint Add33To(int len, uint x, uint[] z) + { + ulong c = (ulong)z[0] + x; + z[0] = (uint)c; + c >>= 32; + c += (ulong)z[1] + 1; + z[1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, 2); + } + + public static uint Add33To(int len, uint x, uint[] z, int zOff) + { + ulong c = (ulong)z[zOff + 0] + x; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (ulong)z[zOff + 1] + 1; + z[zOff + 1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, zOff, 2); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint Add33To(int len, uint x, Span z) + { + ulong c = (ulong)z[0] + x; + z[0] = (uint)c; + c >>= 32; + c += (ulong)z[1] + 1; + z[1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, 2); + } +#endif + + public static uint AddBothTo(int len, uint[] x, uint[] y, uint[] z) + { + ulong c = 0; + for (int i = 0; i < len; ++i) + { + c += (ulong)x[i] + y[i] + z[i]; + z[i] = (uint)c; + c >>= 32; + } + return (uint)c; + } + + public static uint AddBothTo(int len, uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + ulong c = 0; + for (int i = 0; i < len; ++i) + { + c += (ulong)x[xOff + i] + y[yOff + i] + z[zOff + i]; + z[zOff + i] = (uint)c; + c >>= 32; + } + return (uint)c; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint AddBothTo(int len, ReadOnlySpan x, ReadOnlySpan y, Span z) + { + ulong c = 0; + for (int i = 0; i < len; ++i) + { + c += (ulong)x[i] + y[i] + z[i]; + z[i] = (uint)c; + c >>= 32; + } + return (uint)c; + } +#endif + + public static uint AddDWordAt(int len, ulong x, uint[] z, int zPos) + { + Debug.Assert(zPos <= (len - 2)); + ulong c = z[zPos + 0] + (x & M); + z[zPos + 0] = (uint)c; + c >>= 32; + c += z[zPos + 1] + (x >> 32); + z[zPos + 1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, zPos + 2); + } + + public static uint AddDWordAt(int len, ulong x, uint[] z, int zOff, int zPos) + { + Debug.Assert(zPos <= (len - 2)); + ulong c = z[zOff + zPos] + (x & M); + z[zOff + zPos] = (uint)c; + c >>= 32; + c += z[zOff + zPos + 1] + (x >> 32); + z[zOff + zPos + 1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, zOff, zPos + 2); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint AddDWordAt(int len, ulong x, Span z, int zPos) + { + Debug.Assert(zPos <= (len - 2)); + ulong c = z[zPos + 0] + (x & M); + z[zPos + 0] = (uint)c; + c >>= 32; + c += z[zPos + 1] + (x >> 32); + z[zPos + 1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, zPos + 2); + } +#endif + + public static uint AddDWordTo(int len, ulong x, uint[] z) + { + ulong c = (ulong)z[0] + (x & M); + z[0] = (uint)c; + c >>= 32; + c += (ulong)z[1] + (x >> 32); + z[1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, 2); + } + + public static uint AddDWordTo(int len, ulong x, uint[] z, int zOff) + { + ulong c = (ulong)z[zOff + 0] + (x & M); + z[zOff + 0] = (uint)c; + c >>= 32; + c += (ulong)z[zOff + 1] + (x >> 32); + z[zOff + 1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, zOff, 2); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint AddDWordTo(int len, ulong x, Span z) + { + ulong c = z[0] + (x & M); + z[0] = (uint)c; + c >>= 32; + c += z[1] + (x >> 32); + z[1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, 2); + } +#endif + + public static uint AddTo(int len, uint[] x, uint[] z) + { + ulong c = 0; + for (int i = 0; i < len; ++i) + { + c += (ulong)x[i] + z[i]; + z[i] = (uint)c; + c >>= 32; + } + return (uint)c; + } + + public static uint AddTo(int len, uint[] x, int xOff, uint[] z, int zOff) + { + ulong c = 0; + for (int i = 0; i < len; ++i) + { + c += (ulong)x[xOff + i] + z[zOff + i]; + z[zOff + i] = (uint)c; + c >>= 32; + } + return (uint)c; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint AddTo(int len, ReadOnlySpan x, Span z) + { + ulong c = 0; + for (int i = 0; i < len; ++i) + { + c += (ulong)x[i] + z[i]; + z[i] = (uint)c; + c >>= 32; + } + return (uint)c; + } +#endif + + public static uint AddTo(int len, uint[] x, int xOff, uint[] z, int zOff, uint cIn) + { + ulong c = cIn; + for (int i = 0; i < len; ++i) + { + c += (ulong)x[xOff + i] + z[zOff + i]; + z[zOff + i] = (uint)c; + c >>= 32; + } + return (uint)c; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint AddTo(int len, ReadOnlySpan x, Span z, uint cIn) + { + ulong c = cIn; + for (int i = 0; i < len; ++i) + { + c += (ulong)x[i] + z[i]; + z[i] = (uint)c; + c >>= 32; + } + return (uint)c; + } +#endif + + public static uint AddToEachOther(int len, uint[] u, int uOff, uint[] v, int vOff) + { + ulong c = 0; + for (int i = 0; i < len; ++i) + { + c += (ulong)u[uOff + i] + v[vOff + i]; + u[uOff + i] = (uint)c; + v[vOff + i] = (uint)c; + c >>= 32; + } + return (uint)c; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint AddToEachOther(int len, Span u, Span v) + { + ulong c = 0; + for (int i = 0; i < len; ++i) + { + c += (ulong)u[i] + v[i]; + u[i] = (uint)c; + v[i] = (uint)c; + c >>= 32; + } + return (uint)c; + } +#endif + + public static uint AddWordAt(int len, uint x, uint[] z, int zPos) + { + Debug.Assert(zPos <= (len - 1)); + ulong c = (ulong)x + z[zPos]; + z[zPos] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, zPos + 1); + } + + public static uint AddWordAt(int len, uint x, uint[] z, int zOff, int zPos) + { + Debug.Assert(zPos <= (len - 1)); + ulong c = (ulong)x + z[zOff + zPos]; + z[zOff + zPos] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, zOff, zPos + 1); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint AddWordAt(int len, uint x, Span z, int zPos) + { + Debug.Assert(zPos <= (len - 1)); + ulong c = (ulong)x + z[zPos]; + z[zPos] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, zPos + 1); + } +#endif + + public static uint AddWordTo(int len, uint x, uint[] z) + { + ulong c = (ulong)x + z[0]; + z[0] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, 1); + } + + public static uint AddWordTo(int len, uint x, uint[] z, int zOff) + { + ulong c = (ulong)x + z[zOff]; + z[zOff] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, zOff, 1); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint AddWordTo(int len, uint x, Span z) + { + ulong c = (ulong)x + z[0]; + z[0] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, 1); + } +#endif + + public static uint CAdd(int len, int mask, uint[] x, uint[] y, uint[] z) + { + uint MASK = (uint)-(mask & 1); + + ulong c = 0; + for (int i = 0; i < len; ++i) + { + c += (ulong)x[i] + (y[i] & MASK); + z[i] = (uint)c; + c >>= 32; + } + return (uint)c; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint CAdd(int len, int mask, ReadOnlySpan x, ReadOnlySpan y, Span z) + { + uint MASK = (uint)-(mask & 1); + + ulong c = 0; + for (int i = 0; i < len; ++i) + { + c += (ulong)x[i] + (y[i] & MASK); + z[i] = (uint)c; + c >>= 32; + } + return (uint)c; + } +#endif + + public static void CMov(int len, int mask, uint[] x, int xOff, uint[] z, int zOff) + { + uint MASK = (uint)-(mask & 1); + + for (int i = 0; i < len; ++i) + { + uint z_i = z[zOff + i], diff = z_i ^ x[xOff + i]; + z_i ^= diff & MASK; + z[zOff + i] = z_i; + } + + //uint half = 0x55555555U, rest = half << (-(int)MASK); + + //for (int i = 0; i < len; ++i) + //{ + // uint z_i = z[zOff + i], diff = z_i ^ x[xOff + i]; + // z_i ^= (diff & half); + // z_i ^= (diff & rest); + // z[zOff + i] = z_i; + //} + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void CMov(int len, int mask, ReadOnlySpan x, Span z) + { + uint MASK = (uint)-(mask & 1); + + for (int i = 0; i < len; ++i) + { + uint z_i = z[i], diff = z_i ^ x[i]; + z_i ^= diff & MASK; + z[i] = z_i; + } + + //uint half = 0x55555555U, rest = half << (-(int)MASK); + + //for (int i = 0; i < len; ++i) + //{ + // uint z_i = z[i], diff = z_i ^ x[i]; + // z_i ^= (diff & half); + // z_i ^= (diff & rest); + // z[i] = z_i; + //} + } +#endif + + public static int Compare(int len, uint[] x, uint[] y) + { + for (int i = len - 1; i >= 0; --i) + { + uint x_i = x[i]; + uint y_i = y[i]; + if (x_i < y_i) + return -1; + if (x_i > y_i) + return 1; + } + return 0; + } + + public static int Compare(int len, uint[] x, int xOff, uint[] y, int yOff) + { + for (int i = len - 1; i >= 0; --i) + { + uint x_i = x[xOff + i]; + uint y_i = y[yOff + i]; + if (x_i < y_i) + return -1; + if (x_i > y_i) + return 1; + } + return 0; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static int Compare(int len, ReadOnlySpan x, ReadOnlySpan y) + { + for (int i = len - 1; i >= 0; --i) + { + uint x_i = x[i]; + uint y_i = y[i]; + if (x_i < y_i) + return -1; + if (x_i > y_i) + return 1; + } + return 0; + } +#endif + + public static uint[] Copy(int len, uint[] x) + { + uint[] z = new uint[len]; + Array.Copy(x, 0, z, 0, len); + return z; + } + + public static void Copy(int len, uint[] x, uint[] z) + { + Array.Copy(x, 0, z, 0, len); + } + + public static void Copy(int len, uint[] x, int xOff, uint[] z, int zOff) + { + Array.Copy(x, xOff, z, zOff, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Copy(int len, ReadOnlySpan x, Span z) + { + x[..len].CopyTo(z); + } +#endif + + public static ulong[] Copy64(int len, ulong[] x) + { + ulong[] z = new ulong[len]; + Array.Copy(x, 0, z, 0, len); + return z; + } + + public static void Copy64(int len, ulong[] x, ulong[] z) + { + Array.Copy(x, 0, z, 0, len); + } + + public static void Copy64(int len, ulong[] x, int xOff, ulong[] z, int zOff) + { + Array.Copy(x, xOff, z, zOff, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Copy64(int len, ReadOnlySpan x, Span z) + { + x[..len].CopyTo(z); + } +#endif + + public static uint[] Create(int len) + { + return new uint[len]; + } + + public static ulong[] Create64(int len) + { + return new ulong[len]; + } + + public static int CSub(int len, int mask, uint[] x, uint[] y, uint[] z) + { + long MASK = (uint)-(mask & 1); + long c = 0; + for (int i = 0; i < len; ++i) + { + c += x[i] - (y[i] & MASK); + z[i] = (uint)c; + c >>= 32; + } + return (int)c; + } + + public static int CSub(int len, int mask, uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + long MASK = (uint)-(mask & 1); + long c = 0; + for (int i = 0; i < len; ++i) + { + c += x[xOff + i] - (y[yOff + i] & MASK); + z[zOff + i] = (uint)c; + c >>= 32; + } + return (int)c; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static int CSub(int len, int mask, ReadOnlySpan x, ReadOnlySpan y, Span z) + { + long MASK = (uint)-(mask & 1); + long c = 0; + for (int i = 0; i < len; ++i) + { + c += x[i] - (y[i] & MASK); + z[i] = (uint)c; + c >>= 32; + } + return (int)c; + } +#endif + + public static int Dec(int len, uint[] z) + { + for (int i = 0; i < len; ++i) + { + if (--z[i] != uint.MaxValue) + return 0; + } + return -1; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static int Dec(int len, Span z) + { + for (int i = 0; i < len; ++i) + { + if (--z[i] != uint.MaxValue) + return 0; + } + return -1; + } +#endif + + public static int Dec(int len, uint[] x, uint[] z) + { + int i = 0; + while (i < len) + { + uint c = x[i] - 1; + z[i] = c; + ++i; + if (c != uint.MaxValue) + { + while (i < len) + { + z[i] = x[i]; + ++i; + } + return 0; + } + } + return -1; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static int Dec(int len, ReadOnlySpan x, Span z) + { + int i = 0; + while (i < len) + { + uint c = x[i] - 1; + z[i] = c; + ++i; + if (c != uint.MaxValue) + { + while (i < len) + { + z[i] = x[i]; + ++i; + } + return 0; + } + } + return -1; + } +#endif + + public static int DecAt(int len, uint[] z, int zPos) + { + Debug.Assert(zPos <= len); + for (int i = zPos; i < len; ++i) + { + if (--z[i] != uint.MaxValue) + return 0; + } + return -1; + } + + public static int DecAt(int len, uint[] z, int zOff, int zPos) + { + Debug.Assert(zPos <= len); + for (int i = zPos; i < len; ++i) + { + if (--z[zOff + i] != uint.MaxValue) + return 0; + } + return -1; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static int DecAt(int len, Span z, int zPos) + { + Debug.Assert(zPos <= len); + for (int i = zPos; i < len; ++i) + { + if (--z[i] != uint.MaxValue) + return 0; + } + return -1; + } +#endif + + public static bool Eq(int len, uint[] x, uint[] y) + { + for (int i = len - 1; i >= 0; --i) + { + if (x[i] != y[i]) + return false; + } + return true; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static bool Eq(int len, ReadOnlySpan x, ReadOnlySpan y) + { + for (int i = len - 1; i >= 0; --i) + { + if (x[i] != y[i]) + return false; + } + return true; + } +#endif + + public static uint EqualTo(int len, uint[] x, uint y) + { + uint d = x[0] ^ y; + for (int i = 1; i < len; ++i) + { + d |= x[i]; + } + d = (d >> 1) | (d & 1); + return (uint)(((int)d - 1) >> 31); + } + + public static uint EqualTo(int len, uint[] x, int xOff, uint y) + { + uint d = x[xOff] ^ y; + for (int i = 1; i < len; ++i) + { + d |= x[xOff + i]; + } + d = (d >> 1) | (d & 1); + return (uint)(((int)d - 1) >> 31); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint EqualTo(int len, ReadOnlySpan x, uint y) + { + uint d = x[0] ^ y; + for (int i = 1; i < len; ++i) + { + d |= x[i]; + } + d = (d >> 1) | (d & 1); + return (uint)(((int)d - 1) >> 31); + } +#endif + + public static uint EqualTo(int len, uint[] x, uint[] y) + { + uint d = 0; + for (int i = 0; i < len; ++i) + { + d |= x[i] ^ y[i]; + } + d = (d >> 1) | (d & 1); + return (uint)(((int)d - 1) >> 31); + } + + public static uint EqualTo(int len, uint[] x, int xOff, uint[] y, int yOff) + { + uint d = 0; + for (int i = 0; i < len; ++i) + { + d |= x[xOff + i] ^ y[yOff + i]; + } + d = (d >> 1) | (d & 1); + return (uint)(((int)d - 1) >> 31); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint EqualTo(int len, ReadOnlySpan x, ReadOnlySpan y) + { + uint d = 0; + for (int i = 0; i < len; ++i) + { + d |= x[i] ^ y[i]; + } + d = (d >> 1) | (d & 1); + return (uint)(((int)d - 1) >> 31); + } +#endif + + public static uint EqualToZero(int len, uint[] x) + { + uint d = 0; + for (int i = 0; i < len; ++i) + { + d |= x[i]; + } + d = (d >> 1) | (d & 1); + return (uint)(((int)d - 1) >> 31); + } + + public static uint EqualToZero(int len, uint[] x, int xOff) + { + uint d = 0; + for (int i = 0; i < len; ++i) + { + d |= x[xOff + i]; + } + d = (d >> 1) | (d & 1); + return (uint)(((int)d - 1) >> 31); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint EqualToZero(int len, ReadOnlySpan x) + { + uint d = 0; + for (int i = 0; i < len; ++i) + { + d |= x[i]; + } + d = (d >> 1) | (d & 1); + return (uint)(((int)d - 1) >> 31); + } +#endif + + public static uint[] FromBigInteger(int bits, BigInteger x) + { + int len = GetLengthForBits(bits); + + if (x.SignValue < 0 || x.BitLength > bits) + throw new ArgumentException(); + + uint[] z = Create(len); + + // NOTE: Use a fixed number of loop iterations + z[0] = (uint)x.IntValue; + for (int i = 1; i < len; ++i) + { + x = x.ShiftRight(32); + z[i] = (uint)x.IntValue; + } + return z; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void FromBigInteger(int bits, BigInteger x, Span z) + { + int len = GetLengthForBits(bits); + + if (x.SignValue < 0 || x.BitLength > bits) + throw new ArgumentException(); + if (z.Length < len) + throw new ArgumentException(); + + // NOTE: Use a fixed number of loop iterations + z[0] = (uint)x.IntValue; + for (int i = 1; i < len; ++i) + { + x = x.ShiftRight(32); + z[i] = (uint)x.IntValue; + } + } +#endif + + public static ulong[] FromBigInteger64(int bits, BigInteger x) + { + int len = GetLengthForBits64(bits); + + if (x.SignValue < 0 || x.BitLength > bits) + throw new ArgumentException(); + + ulong[] z = Create64(len); + + // NOTE: Use a fixed number of loop iterations + z[0] = (ulong)x.LongValue; + for (int i = 1; i < len; ++i) + { + x = x.ShiftRight(64); + z[i] = (ulong)x.LongValue; + } + return z; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void FromBigInteger64(int bits, BigInteger x, Span z) + { + int len = GetLengthForBits64(bits); + + if (x.SignValue < 0 || x.BitLength > bits) + throw new ArgumentException(); + if (z.Length < len) + throw new ArgumentException(); + + // NOTE: Use a fixed number of loop iterations + z[0] = (ulong)x.LongValue; + for (int i = 1; i < len; ++i) + { + x = x.ShiftRight(64); + z[i] = (ulong)x.LongValue; + } + } +#endif + + public static uint GetBit(uint[] x, int bit) + { + if (bit == 0) + return x[0] & 1; + + int w = bit >> 5; + if (w < 0 || w >= x.Length) + return 0; + + int b = bit & 31; + return (x[w] >> b) & 1; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint GetBit(ReadOnlySpan x, int bit) + { + if (bit == 0) + return x[0] & 1; + + int w = bit >> 5; + if (w < 0 || w >= x.Length) + return 0; + + int b = bit & 31; + return (x[w] >> b) & 1; + } +#endif + + public static int GetLengthForBits(int bits) + { + if (bits < 1) + throw new ArgumentException(); + + return (int)(((uint)bits + 31) >> 5); + } + + public static int GetLengthForBits64(int bits) + { + if (bits < 1) + throw new ArgumentException(); + + return (int)(((uint)bits + 63) >> 6); + } + + public static bool Gte(int len, uint[] x, uint[] y) + { + for (int i = len - 1; i >= 0; --i) + { + uint x_i = x[i], y_i = y[i]; + if (x_i < y_i) + return false; + if (x_i > y_i) + return true; + } + return true; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static bool Gte(int len, ReadOnlySpan x, ReadOnlySpan y) + { + for (int i = len - 1; i >= 0; --i) + { + uint x_i = x[i], y_i = y[i]; + if (x_i < y_i) + return false; + if (x_i > y_i) + return true; + } + return true; + } +#endif + + public static uint Inc(int len, uint[] z) + { + for (int i = 0; i < len; ++i) + { + if (++z[i] != uint.MinValue) + return 0; + } + return 1; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint Inc(int len, Span z) + { + for (int i = 0; i < len; ++i) + { + if (++z[i] != uint.MinValue) + return 0; + } + return 1; + } +#endif + + public static uint Inc(int len, uint[] x, uint[] z) + { + int i = 0; + while (i < len) + { + uint c = x[i] + 1; + z[i] = c; + ++i; + if (c != 0) + { + while (i < len) + { + z[i] = x[i]; + ++i; + } + return 0; + } + } + return 1; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint Inc(int len, ReadOnlySpan x, Span z) + { + int i = 0; + while (i < len) + { + uint c = x[i] + 1; + z[i] = c; + ++i; + if (c != 0) + { + while (i < len) + { + z[i] = x[i]; + ++i; + } + return 0; + } + } + return 1; + } +#endif + + public static uint IncAt(int len, uint[] z, int zPos) + { + Debug.Assert(zPos <= len); + for (int i = zPos; i < len; ++i) + { + if (++z[i] != uint.MinValue) + return 0; + } + return 1; + } + + public static uint IncAt(int len, uint[] z, int zOff, int zPos) + { + Debug.Assert(zPos <= len); + for (int i = zPos; i < len; ++i) + { + if (++z[zOff + i] != uint.MinValue) + return 0; + } + return 1; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint IncAt(int len, Span z, int zPos) + { + Debug.Assert(zPos <= len); + for (int i = zPos; i < len; ++i) + { + if (++z[i] != uint.MinValue) + return 0; + } + return 1; + } +#endif + + public static bool IsOne(int len, uint[] x) + { + if (x[0] != 1) + return false; + + for (int i = 1; i < len; ++i) + { + if (x[i] != 0) + return false; + } + return true; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static bool IsOne(int len, ReadOnlySpan x) + { + if (x[0] != 1) + return false; + + for (int i = 1; i < len; ++i) + { + if (x[i] != 0) + return false; + } + return true; + } +#endif + + public static bool IsZero(int len, uint[] x) + { + if (x[0] != 0) + return false; + + for (int i = 1; i < len; ++i) + { + if (x[i] != 0) + return false; + } + return true; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static bool IsZero(int len, ReadOnlySpan x) + { + if (x[0] != 0) + return false; + + for (int i = 1; i < len; ++i) + { + if (x[i] != 0) + return false; + } + return true; + } +#endif + + public static int LessThan(int len, uint[] x, uint[] y) + { + long c = 0; + for (int i = 0; i < len; ++i) + { + c += (long)x[i] - y[i]; + c >>= 32; + } + Debug.Assert(c == 0L || c == -1L); + return (int)c; + } + + public static int LessThan(int len, uint[] x, int xOff, uint[] y, int yOff) + { + long c = 0; + for (int i = 0; i < len; ++i) + { + c += (long)x[xOff + i] - y[yOff + i]; + c >>= 32; + } + Debug.Assert(c == 0L || c == -1L); + return (int)c; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static int LessThan(int len, ReadOnlySpan x, ReadOnlySpan y) + { + long c = 0; + for (int i = 0; i < len; ++i) + { + c += (long)x[i] - y[i]; + c >>= 32; + } + Debug.Assert(c == 0L || c == -1L); + return (int)c; + } +#endif + + public static void Mul(int len, uint[] x, uint[] y, uint[] zz) + { + zz[len] = MulWord(len, x[0], y, zz); + + for (int i = 1; i < len; ++i) + { + zz[i + len] = MulWordAddTo(len, x[i], y, 0, zz, i); + } + } + + public static void Mul(int len, uint[] x, int xOff, uint[] y, int yOff, uint[] zz, int zzOff) + { + zz[zzOff + len] = MulWord(len, x[xOff], y, yOff, zz, zzOff); + + for (int i = 1; i < len; ++i) + { + zz[zzOff + i + len] = MulWordAddTo(len, x[xOff + i], y, yOff, zz, zzOff + i); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Mul(int len, ReadOnlySpan x, ReadOnlySpan y, Span zz) + { + zz[len] = MulWord(len, x[0], y, zz); + + for (int i = 1; i < len; ++i) + { + zz[i + len] = MulWordAddTo(len, x[i], y, zz[i..]); + } + } +#endif + + public static void Mul(uint[] x, int xOff, int xLen, uint[] y, int yOff, int yLen, uint[] zz, int zzOff) + { + zz[zzOff + yLen] = MulWord(yLen, x[xOff], y, yOff, zz, zzOff); + + for (int i = 1; i < xLen; ++i) + { + zz[zzOff + i + yLen] = MulWordAddTo(yLen, x[xOff + i], y, yOff, zz, zzOff + i); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Mul(ReadOnlySpan x, ReadOnlySpan y, Span zz) + { + int xLen = x.Length, yLen = y.Length; + zz[yLen] = MulWord(yLen, x[0], y, zz); + + for (int i = 1; i < xLen; ++i) + { + zz[i + yLen] = MulWordAddTo(yLen, x[i], y, zz[i..]); + } + } +#endif + + public static uint MulAddTo(int len, uint[] x, uint[] y, uint[] zz) + { + ulong zc = 0; + for (int i = 0; i < len; ++i) + { + zc += MulWordAddTo(len, x[i], y, 0, zz, i) & M; + zc += zz[i + len] & M; + zz[i + len] = (uint)zc; + zc >>= 32; + } + return (uint)zc; + } + + public static uint MulAddTo(int len, uint[] x, int xOff, uint[] y, int yOff, uint[] zz, int zzOff) + { + ulong zc = 0; + for (int i = 0; i < len; ++i) + { + zc += MulWordAddTo(len, x[xOff + i], y, yOff, zz, zzOff) & M; + zc += zz[zzOff + len] & M; + zz[zzOff + len] = (uint)zc; + zc >>= 32; + ++zzOff; + } + return (uint)zc; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint MulAddTo(int len, ReadOnlySpan x, ReadOnlySpan y, Span zz) + { + ulong zc = 0; + for (int i = 0; i < len; ++i) + { + zc += MulWordAddTo(len, x[i], y, zz[i..]) & M; + zc += zz[i + len] & M; + zz[i + len] = (uint)zc; + zc >>= 32; + } + return (uint)zc; + } +#endif + + public static uint Mul31BothAdd(int len, uint a, uint[] x, uint b, uint[] y, uint[] z, int zOff) + { + ulong c = 0, aVal = a, bVal = b; + int i = 0; + do + { + c += aVal * x[i] + bVal * y[i] + z[zOff + i]; + z[zOff + i] = (uint)c; + c >>= 32; + } + while (++i < len); + return (uint)c; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint Mul31BothAdd(int len, uint a, ReadOnlySpan x, uint b, ReadOnlySpan y, + Span z) + { + ulong c = 0, aVal = a, bVal = b; + int i = 0; + do + { + c += aVal * x[i] + bVal * y[i] + z[i]; + z[i] = (uint)c; + c >>= 32; + } + while (++i < len); + return (uint)c; + } +#endif + + public static uint MulWord(int len, uint x, uint[] y, uint[] z) + { + ulong c = 0, xVal = x; + int i = 0; + do + { + c += xVal * y[i]; + z[i] = (uint)c; + c >>= 32; + } + while (++i < len); + return (uint)c; + } + + public static uint MulWord(int len, uint x, uint[] y, int yOff, uint[] z, int zOff) + { + ulong c = 0, xVal = x; + int i = 0; + do + { + c += xVal * y[yOff + i]; + z[zOff + i] = (uint)c; + c >>= 32; + } + while (++i < len); + return (uint)c; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint MulWord(int len, uint x, ReadOnlySpan y, Span z) + { + ulong c = 0, xVal = x; + int i = 0; + do + { + c += xVal * y[i]; + z[i] = (uint)c; + c >>= 32; + } + while (++i < len); + return (uint)c; + } +#endif + + public static uint MulWordAddTo(int len, uint x, uint[] y, int yOff, uint[] z, int zOff) + { + ulong c = 0, xVal = x; + int i = 0; + do + { + c += xVal * y[yOff + i] + z[zOff + i]; + z[zOff + i] = (uint)c; + c >>= 32; + } + while (++i < len); + return (uint)c; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint MulWordAddTo(int len, uint x, ReadOnlySpan y, Span z) + { + ulong c = 0, xVal = x; + int i = 0; + do + { + c += xVal * y[i] + z[i]; + z[i] = (uint)c; + c >>= 32; + } + while (++i < len); + return (uint)c; + } +#endif + + public static uint MulWordDwordAddAt(int len, uint x, ulong y, uint[] z, int zPos) + { + Debug.Assert(zPos <= (len - 3)); + ulong c = 0, xVal = x; + c += xVal * (uint)y + z[zPos + 0]; + z[zPos + 0] = (uint)c; + c >>= 32; + c += xVal * (y >> 32) + z[zPos + 1]; + z[zPos + 1] = (uint)c; + c >>= 32; + c += z[zPos + 2]; + z[zPos + 2] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, zPos + 3); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint MulWordDwordAddAt(int len, uint x, ulong y, Span z, int zPos) + { + Debug.Assert(zPos <= (len - 3)); + ulong c = 0, xVal = x; + c += xVal * (uint)y + z[zPos + 0]; + z[zPos + 0] = (uint)c; + c >>= 32; + c += xVal * (y >> 32) + z[zPos + 1]; + z[zPos + 1] = (uint)c; + c >>= 32; + c += z[zPos + 2]; + z[zPos + 2] = (uint)c; + c >>= 32; + return c == 0 ? 0 : IncAt(len, z, zPos + 3); + } +#endif + + public static uint ShiftDownBit(int len, uint[] z, uint c) + { + int i = len; + while (--i >= 0) + { + uint next = z[i]; + z[i] = (next >> 1) | (c << 31); + c = next; + } + return c << 31; + } + + public static uint ShiftDownBit(int len, uint[] z, int zOff, uint c) + { + int i = len; + while (--i >= 0) + { + uint next = z[zOff + i]; + z[zOff + i] = (next >> 1) | (c << 31); + c = next; + } + return c << 31; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint ShiftDownBit(int len, Span z, uint c) + { + int i = len; + while (--i >= 0) + { + uint next = z[i]; + z[i] = (next >> 1) | (c << 31); + c = next; + } + return c << 31; + } +#endif + + public static uint ShiftDownBit(int len, uint[] x, uint c, uint[] z) + { + int i = len; + while (--i >= 0) + { + uint next = x[i]; + z[i] = (next >> 1) | (c << 31); + c = next; + } + return c << 31; + } + + public static uint ShiftDownBit(int len, uint[] x, int xOff, uint c, uint[] z, int zOff) + { + int i = len; + while (--i >= 0) + { + uint next = x[xOff + i]; + z[zOff + i] = (next >> 1) | (c << 31); + c = next; + } + return c << 31; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint ShiftDownBit(int len, ReadOnlySpan x, uint c, Span z) + { + int i = len; + while (--i >= 0) + { + uint next = x[i]; + z[i] = (next >> 1) | (c << 31); + c = next; + } + return c << 31; + } +#endif + + public static uint ShiftDownBits(int len, uint[] z, int bits, uint c) + { + Debug.Assert(bits > 0 && bits < 32); + int i = len; + while (--i >= 0) + { + uint next = z[i]; + z[i] = (next >> bits) | (c << -bits); + c = next; + } + return c << -bits; + } + + public static uint ShiftDownBits(int len, uint[] z, int zOff, int bits, uint c) + { + Debug.Assert(bits > 0 && bits < 32); + int i = len; + while (--i >= 0) + { + uint next = z[zOff + i]; + z[zOff + i] = (next >> bits) | (c << -bits); + c = next; + } + return c << -bits; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint ShiftDownBits(int len, Span z, int bits, uint c) + { + Debug.Assert(bits > 0 && bits < 32); + int i = len; + while (--i >= 0) + { + uint next = z[i]; + z[i] = (next >> bits) | (c << -bits); + c = next; + } + return c << -bits; + } +#endif + + public static uint ShiftDownBits(int len, uint[] x, int bits, uint c, uint[] z) + { + Debug.Assert(bits > 0 && bits < 32); + int i = len; + while (--i >= 0) + { + uint next = x[i]; + z[i] = (next >> bits) | (c << -bits); + c = next; + } + return c << -bits; + } + + public static uint ShiftDownBits(int len, uint[] x, int xOff, int bits, uint c, uint[] z, int zOff) + { + Debug.Assert(bits > 0 && bits < 32); + int i = len; + while (--i >= 0) + { + uint next = x[xOff + i]; + z[zOff + i] = (next >> bits) | (c << -bits); + c = next; + } + return c << -bits; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint ShiftDownBits(int len, ReadOnlySpan x, int bits, uint c, Span z) + { + Debug.Assert(bits > 0 && bits < 32); + int i = len; + while (--i >= 0) + { + uint next = x[i]; + z[i] = (next >> bits) | (c << -bits); + c = next; + } + return c << -bits; + } +#endif + + public static uint ShiftDownWord(int len, uint[] z, uint c) + { + int i = len; + while (--i >= 0) + { + uint next = z[i]; + z[i] = c; + c = next; + } + return c; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint ShiftDownWord(int len, Span z, uint c) + { + int i = len; + while (--i >= 0) + { + uint next = z[i]; + z[i] = c; + c = next; + } + return c; + } +#endif + + public static uint ShiftUpBit(int len, uint[] z, uint c) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ShiftUpBit(len, z.AsSpan(0, len), c); +#else + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + uint next0 = z[i + 0]; + uint next1 = z[i + 1]; + uint next2 = z[i + 2]; + uint next3 = z[i + 3]; + z[i + 0] = (next0 << 1) | (c >> 31); + z[i + 1] = (next1 << 1) | (next0 >> 31); + z[i + 2] = (next2 << 1) | (next1 >> 31); + z[i + 3] = (next3 << 1) | (next2 >> 31); + c = next3; + i += 4; + } + while (i < len) + { + uint next = z[i]; + z[i] = (next << 1) | (c >> 31); + c = next; + ++i; + } + return c >> 31; +#endif + } + + public static uint ShiftUpBit(int len, uint[] z, int zOff, uint c) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ShiftUpBit(len, z.AsSpan(zOff, len), c); +#else + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + uint next0 = z[zOff + i + 0]; + uint next1 = z[zOff + i + 1]; + uint next2 = z[zOff + i + 2]; + uint next3 = z[zOff + i + 3]; + z[zOff + i + 0] = (next0 << 1) | (c >> 31); + z[zOff + i + 1] = (next1 << 1) | (next0 >> 31); + z[zOff + i + 2] = (next2 << 1) | (next1 >> 31); + z[zOff + i + 3] = (next3 << 1) | (next2 >> 31); + c = next3; + i += 4; + } + while (i < len) + { + uint next = z[zOff + i]; + z[zOff + i] = (next << 1) | (c >> 31); + c = next; + ++i; + } + return c >> 31; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint ShiftUpBit(int len, Span z, uint c) + { + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + uint next0 = z[i + 0]; + uint next1 = z[i + 1]; + uint next2 = z[i + 2]; + uint next3 = z[i + 3]; + z[i + 0] = (next0 << 1) | (c >> 31); + z[i + 1] = (next1 << 1) | (next0 >> 31); + z[i + 2] = (next2 << 1) | (next1 >> 31); + z[i + 3] = (next3 << 1) | (next2 >> 31); + c = next3; + i += 4; + } + while (i < len) + { + uint next = z[i]; + z[i] = (next << 1) | (c >> 31); + c = next; + ++i; + } + return c >> 31; + } +#endif + + public static uint ShiftUpBit(int len, uint[] x, uint c, uint[] z) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ShiftUpBit(len, x.AsSpan(0, len), c, z.AsSpan(0, len)); +#else + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + uint next0 = x[i + 0]; + uint next1 = x[i + 1]; + uint next2 = x[i + 2]; + uint next3 = x[i + 3]; + z[i + 0] = (next0 << 1) | (c >> 31); + z[i + 1] = (next1 << 1) | (next0 >> 31); + z[i + 2] = (next2 << 1) | (next1 >> 31); + z[i + 3] = (next3 << 1) | (next2 >> 31); + c = next3; + i += 4; + } + while (i < len) + { + uint next = x[i]; + z[i] = (next << 1) | (c >> 31); + c = next; + ++i; + } + return c >> 31; +#endif + } + + public static uint ShiftUpBit(int len, uint[] x, int xOff, uint c, uint[] z, int zOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ShiftUpBit(len, x.AsSpan(xOff, len), c, z.AsSpan(zOff, len)); +#else + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + uint next0 = x[xOff + i + 0]; + uint next1 = x[xOff + i + 1]; + uint next2 = x[xOff + i + 2]; + uint next3 = x[xOff + i + 3]; + z[zOff + i + 0] = (next0 << 1) | (c >> 31); + z[zOff + i + 1] = (next1 << 1) | (next0 >> 31); + z[zOff + i + 2] = (next2 << 1) | (next1 >> 31); + z[zOff + i + 3] = (next3 << 1) | (next2 >> 31); + c = next3; + i += 4; + } + while (i < len) + { + uint next = x[xOff + i]; + z[zOff + i] = (next << 1) | (c >> 31); + c = next; + ++i; + } + return c >> 31; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint ShiftUpBit(int len, ReadOnlySpan x, uint c, Span z) + { + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + uint next0 = x[i + 0]; + uint next1 = x[i + 1]; + uint next2 = x[i + 2]; + uint next3 = x[i + 3]; + z[i + 0] = (next0 << 1) | (c >> 31); + z[i + 1] = (next1 << 1) | (next0 >> 31); + z[i + 2] = (next2 << 1) | (next1 >> 31); + z[i + 3] = (next3 << 1) | (next2 >> 31); + c = next3; + i += 4; + } + while (i < len) + { + uint next = x[i]; + z[i] = (next << 1) | (c >> 31); + c = next; + ++i; + } + return c >> 31; + } +#endif + + public static ulong ShiftUpBit64(int len, ulong[] x, ulong c, ulong[] z) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ShiftUpBit64(len, x.AsSpan(0, len), c, z.AsSpan(0, len)); +#else + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + ulong next0 = x[i + 0]; + ulong next1 = x[i + 1]; + ulong next2 = x[i + 2]; + ulong next3 = x[i + 3]; + z[i + 0] = (next0 << 1) | (c >> 63); + z[i + 1] = (next1 << 1) | (next0 >> 63); + z[i + 2] = (next2 << 1) | (next1 >> 63); + z[i + 3] = (next3 << 1) | (next2 >> 63); + c = next3; + i += 4; + } + while (i < len) + { + ulong next = x[i]; + z[i] = (next << 1) | (c >> 63); + c = next; + ++i; + } + return c >> 63; +#endif + } + + public static ulong ShiftUpBit64(int len, ulong[] x, int xOff, ulong c, ulong[] z, int zOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ShiftUpBit64(len, x.AsSpan(xOff, len), c, z.AsSpan(zOff, len)); +#else + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + ulong next0 = x[xOff + i + 0]; + ulong next1 = x[xOff + i + 1]; + ulong next2 = x[xOff + i + 2]; + ulong next3 = x[xOff + i + 3]; + z[zOff + i + 0] = (next0 << 1) | (c >> 63); + z[zOff + i + 1] = (next1 << 1) | (next0 >> 63); + z[zOff + i + 2] = (next2 << 1) | (next1 >> 63); + z[zOff + i + 3] = (next3 << 1) | (next2 >> 63); + c = next3; + i += 4; + } + while (i < len) + { + ulong next = x[xOff + i]; + z[zOff + i] = (next << 1) | (c >> 63); + c = next; + ++i; + } + return c >> 63; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static ulong ShiftUpBit64(int len, ReadOnlySpan x, ulong c, Span z) + { + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + ulong next0 = x[i + 0]; + ulong next1 = x[i + 1]; + ulong next2 = x[i + 2]; + ulong next3 = x[i + 3]; + z[i + 0] = (next0 << 1) | (c >> 63); + z[i + 1] = (next1 << 1) | (next0 >> 63); + z[i + 2] = (next2 << 1) | (next1 >> 63); + z[i + 3] = (next3 << 1) | (next2 >> 63); + c = next3; + i += 4; + } + while (i < len) + { + ulong next = x[i]; + z[i] = (next << 1) | (c >> 63); + c = next; + ++i; + } + return c >> 63; + } +#endif + + public static uint ShiftUpBits(int len, uint[] z, int bits, uint c) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ShiftUpBits(len, z.AsSpan(0, len), bits, c); +#else + Debug.Assert(bits > 0 && bits < 32); + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + uint next0 = z[i + 0]; + uint next1 = z[i + 1]; + uint next2 = z[i + 2]; + uint next3 = z[i + 3]; + z[i + 0] = (next0 << bits) | (c >> -bits); + z[i + 1] = (next1 << bits) | (next0 >> -bits); + z[i + 2] = (next2 << bits) | (next1 >> -bits); + z[i + 3] = (next3 << bits) | (next2 >> -bits); + c = next3; + i += 4; + } + while (i < len) + { + uint next = z[i]; + z[i] = (next << bits) | (c >> -bits); + c = next; + ++i; + } + return c >> -bits; +#endif + } + + public static uint ShiftUpBits(int len, uint[] z, int zOff, int bits, uint c) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ShiftUpBits(len, z.AsSpan(zOff, len), bits, c); +#else + Debug.Assert(bits > 0 && bits < 32); + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + uint next0 = z[zOff + i + 0]; + uint next1 = z[zOff + i + 1]; + uint next2 = z[zOff + i + 2]; + uint next3 = z[zOff + i + 3]; + z[zOff + i + 0] = (next0 << bits) | (c >> -bits); + z[zOff + i + 1] = (next1 << bits) | (next0 >> -bits); + z[zOff + i + 2] = (next2 << bits) | (next1 >> -bits); + z[zOff + i + 3] = (next3 << bits) | (next2 >> -bits); + c = next3; + i += 4; + } + while (i < len) + { + uint next = z[zOff + i]; + z[zOff + i] = (next << bits) | (c >> -bits); + c = next; + ++i; + } + return c >> -bits; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint ShiftUpBits(int len, Span z, int bits, uint c) + { + Debug.Assert(bits > 0 && bits < 32); + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + uint next0 = z[i + 0]; + uint next1 = z[i + 1]; + uint next2 = z[i + 2]; + uint next3 = z[i + 3]; + z[i + 0] = (next0 << bits) | (c >> -bits); + z[i + 1] = (next1 << bits) | (next0 >> -bits); + z[i + 2] = (next2 << bits) | (next1 >> -bits); + z[i + 3] = (next3 << bits) | (next2 >> -bits); + c = next3; + i += 4; + } + while (i < len) + { + uint next = z[i]; + z[i] = (next << bits) | (c >> -bits); + c = next; + ++i; + } + return c >> -bits; + } +#endif + + public static uint ShiftUpBits(int len, uint[] x, int bits, uint c, uint[] z) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ShiftUpBits(len, x.AsSpan(0, len), bits, c, z.AsSpan(0, len)); +#else + Debug.Assert(bits > 0 && bits < 32); + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + uint next0 = x[i + 0]; + uint next1 = x[i + 1]; + uint next2 = x[i + 2]; + uint next3 = x[i + 3]; + z[i + 0] = (next0 << bits) | (c >> -bits); + z[i + 1] = (next1 << bits) | (next0 >> -bits); + z[i + 2] = (next2 << bits) | (next1 >> -bits); + z[i + 3] = (next3 << bits) | (next2 >> -bits); + c = next3; + i += 4; + } + while (i < len) + { + uint next = x[i]; + z[i] = (next << bits) | (c >> -bits); + c = next; + ++i; + } + return c >> -bits; +#endif + } + + public static uint ShiftUpBits(int len, uint[] x, int xOff, int bits, uint c, uint[] z, int zOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ShiftUpBits(len, x.AsSpan(xOff, len), bits, c, z.AsSpan(zOff, len)); +#else + Debug.Assert(bits > 0 && bits < 32); + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + uint next0 = x[xOff + i + 0]; + uint next1 = x[xOff + i + 1]; + uint next2 = x[xOff + i + 2]; + uint next3 = x[xOff + i + 3]; + z[zOff + i + 0] = (next0 << bits) | (c >> -bits); + z[zOff + i + 1] = (next1 << bits) | (next0 >> -bits); + z[zOff + i + 2] = (next2 << bits) | (next1 >> -bits); + z[zOff + i + 3] = (next3 << bits) | (next2 >> -bits); + c = next3; + i += 4; + } + while (i < len) + { + uint next = x[xOff + i]; + z[zOff + i] = (next << bits) | (c >> -bits); + c = next; + ++i; + } + return c >> -bits; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint ShiftUpBits(int len, ReadOnlySpan x, int bits, uint c, Span z) + { + Debug.Assert(bits > 0 && bits < 32); + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + uint next0 = x[i + 0]; + uint next1 = x[i + 1]; + uint next2 = x[i + 2]; + uint next3 = x[i + 3]; + z[i + 0] = (next0 << bits) | (c >> -bits); + z[i + 1] = (next1 << bits) | (next0 >> -bits); + z[i + 2] = (next2 << bits) | (next1 >> -bits); + z[i + 3] = (next3 << bits) | (next2 >> -bits); + c = next3; + i += 4; + } + while (i < len) + { + uint next = x[i]; + z[i] = (next << bits) | (c >> -bits); + c = next; + ++i; + } + return c >> -bits; + } +#endif + + public static ulong ShiftUpBits64(int len, ulong[] z, int bits, ulong c) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ShiftUpBits64(len, z.AsSpan(0, len), bits, c); +#else + Debug.Assert(bits > 0 && bits < 64); + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + ulong next0 = z[i + 0]; + ulong next1 = z[i + 1]; + ulong next2 = z[i + 2]; + ulong next3 = z[i + 3]; + z[i + 0] = (next0 << bits) | (c >> -bits); + z[i + 1] = (next1 << bits) | (next0 >> -bits); + z[i + 2] = (next2 << bits) | (next1 >> -bits); + z[i + 3] = (next3 << bits) | (next2 >> -bits); + c = next3; + i += 4; + } + while (i < len) + { + ulong next = z[i]; + z[i] = (next << bits) | (c >> -bits); + c = next; + ++i; + } + return c >> -bits; +#endif + } + + public static ulong ShiftUpBits64(int len, ulong[] z, int zOff, int bits, ulong c) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ShiftUpBits64(len, z.AsSpan(zOff, len), bits, c); +#else + Debug.Assert(bits > 0 && bits < 64); + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + ulong next0 = z[zOff + i + 0]; + ulong next1 = z[zOff + i + 1]; + ulong next2 = z[zOff + i + 2]; + ulong next3 = z[zOff + i + 3]; + z[zOff + i + 0] = (next0 << bits) | (c >> -bits); + z[zOff + i + 1] = (next1 << bits) | (next0 >> -bits); + z[zOff + i + 2] = (next2 << bits) | (next1 >> -bits); + z[zOff + i + 3] = (next3 << bits) | (next2 >> -bits); + c = next3; + i += 4; + } + while (i < len) + { + ulong next = z[zOff + i]; + z[zOff + i] = (next << bits) | (c >> -bits); + c = next; + ++i; + } + return c >> -bits; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static ulong ShiftUpBits64(int len, Span z, int bits, ulong c) + { + Debug.Assert(bits > 0 && bits < 64); + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + ulong next0 = z[i + 0]; + ulong next1 = z[i + 1]; + ulong next2 = z[i + 2]; + ulong next3 = z[i + 3]; + z[i + 0] = (next0 << bits) | (c >> -bits); + z[i + 1] = (next1 << bits) | (next0 >> -bits); + z[i + 2] = (next2 << bits) | (next1 >> -bits); + z[i + 3] = (next3 << bits) | (next2 >> -bits); + c = next3; + i += 4; + } + while (i < len) + { + ulong next = z[i]; + z[i] = (next << bits) | (c >> -bits); + c = next; + ++i; + } + return c >> -bits; + } +#endif + + public static ulong ShiftUpBits64(int len, ulong[] x, int bits, ulong c, ulong[] z) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ShiftUpBits64(len, x.AsSpan(0, len), bits, c, z.AsSpan(0, len)); +#else + Debug.Assert(bits > 0 && bits < 64); + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + ulong next0 = x[i + 0]; + ulong next1 = x[i + 1]; + ulong next2 = x[i + 2]; + ulong next3 = x[i + 3]; + z[i + 0] = (next0 << bits) | (c >> -bits); + z[i + 1] = (next1 << bits) | (next0 >> -bits); + z[i + 2] = (next2 << bits) | (next1 >> -bits); + z[i + 3] = (next3 << bits) | (next2 >> -bits); + c = next3; + i += 4; + } + while (i < len) + { + ulong next = x[i]; + z[i] = (next << bits) | (c >> -bits); + c = next; + ++i; + } + return c >> -bits; +#endif + } + + public static ulong ShiftUpBits64(int len, ulong[] x, int xOff, int bits, ulong c, ulong[] z, int zOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ShiftUpBits64(len, x.AsSpan(xOff, len), bits, c, z.AsSpan(zOff, len)); +#else + Debug.Assert(bits > 0 && bits < 64); + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + ulong next0 = x[xOff + i + 0]; + ulong next1 = x[xOff + i + 1]; + ulong next2 = x[xOff + i + 2]; + ulong next3 = x[xOff + i + 3]; + z[zOff + i + 0] = (next0 << bits) | (c >> -bits); + z[zOff + i + 1] = (next1 << bits) | (next0 >> -bits); + z[zOff + i + 2] = (next2 << bits) | (next1 >> -bits); + z[zOff + i + 3] = (next3 << bits) | (next2 >> -bits); + c = next3; + i += 4; + } + while (i < len) + { + ulong next = x[xOff + i]; + z[zOff + i] = (next << bits) | (c >> -bits); + c = next; + ++i; + } + return c >> -bits; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static ulong ShiftUpBits64(int len, ReadOnlySpan x, int bits, ulong c, Span z) + { + Debug.Assert(bits > 0 && bits < 64); + int i = 0, limit4 = len - 4; + while (i <= limit4) + { + ulong next0 = x[i + 0]; + ulong next1 = x[i + 1]; + ulong next2 = x[i + 2]; + ulong next3 = x[i + 3]; + z[i + 0] = (next0 << bits) | (c >> -bits); + z[i + 1] = (next1 << bits) | (next0 >> -bits); + z[i + 2] = (next2 << bits) | (next1 >> -bits); + z[i + 3] = (next3 << bits) | (next2 >> -bits); + c = next3; + i += 4; + } + while (i < len) + { + ulong next = x[i]; + z[i] = (next << bits) | (c >> -bits); + c = next; + ++i; + } + return c >> -bits; + } +#endif + + public static void Square(int len, uint[] x, uint[] zz) + { + int extLen = len << 1; + uint c = 0; + int j = len, k = extLen; + do + { + ulong xVal = (ulong)x[--j]; + ulong p = xVal * xVal; + zz[--k] = (c << 31) | (uint)(p >> 33); + zz[--k] = (uint)(p >> 1); + c = (uint)p; + } + while (j > 0); + + ulong d = 0UL; + int zzPos = 2; + + for (int i = 1; i < len; ++i) + { + d += SquareWordAddTo(x, i, zz); + d += zz[zzPos]; + zz[zzPos++] = (uint)d; d >>= 32; + d += zz[zzPos]; + zz[zzPos++] = (uint)d; d >>= 32; + } + Debug.Assert(0UL == d); + + ShiftUpBit(extLen, zz, x[0] << 31); + } + + public static void Square(int len, uint[] x, int xOff, uint[] zz, int zzOff) + { + int extLen = len << 1; + uint c = 0; + int j = len, k = extLen; + do + { + ulong xVal = (ulong)x[xOff + --j]; + ulong p = xVal * xVal; + zz[zzOff + --k] = (c << 31) | (uint)(p >> 33); + zz[zzOff + --k] = (uint)(p >> 1); + c = (uint)p; + } + while (j > 0); + + ulong d = 0UL; + int zzPos = zzOff + 2; + + for (int i = 1; i < len; ++i) + { + d += SquareWordAddTo(x, xOff, i, zz, zzOff); + d += zz[zzPos]; + zz[zzPos++] = (uint)d; d >>= 32; + d += zz[zzPos]; + zz[zzPos++] = (uint)d; d >>= 32; + } + Debug.Assert(0UL == d); + + ShiftUpBit(extLen, zz, zzOff, x[xOff] << 31); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Square(int len, ReadOnlySpan x, Span zz) + { + int extLen = len << 1; + uint c = 0; + int j = len, k = extLen; + do + { + ulong xVal = (ulong)x[--j]; + ulong p = xVal * xVal; + zz[--k] = (c << 31) | (uint)(p >> 33); + zz[--k] = (uint)(p >> 1); + c = (uint)p; + } + while (j > 0); + + ulong d = 0UL; + int zzPos = 2; + + for (int i = 1; i < len; ++i) + { + d += SquareWordAddTo(x, i, zz); + d += zz[zzPos]; + zz[zzPos++] = (uint)d; d >>= 32; + d += zz[zzPos]; + zz[zzPos++] = (uint)d; d >>= 32; + } + Debug.Assert(0UL == d); + + ShiftUpBit(extLen, zz, x[0] << 31); + } +#endif + + public static uint SquareWordAddTo(uint[] x, int xPos, uint[] z) + { + ulong c = 0, xVal = (ulong)x[xPos]; + int i = 0; + do + { + c += xVal * x[i] + z[xPos + i]; + z[xPos + i] = (uint)c; + c >>= 32; + } + while (++i < xPos); + return (uint)c; + } + + public static uint SquareWordAddTo(uint[] x, int xOff, int xPos, uint[] z, int zOff) + { + ulong c = 0, xVal = (ulong)x[xOff + xPos]; + int i = 0; + do + { + c += xVal * (x[xOff + i] & M) + (z[xPos + zOff] & M); + z[xPos + zOff] = (uint)c; + c >>= 32; + ++zOff; + } + while (++i < xPos); + return (uint)c; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static uint SquareWordAddTo(ReadOnlySpan x, int xPos, Span z) + { + ulong c = 0, xVal = x[xPos]; + int i = 0; + do + { + c += xVal * x[i] + z[xPos + i]; + z[xPos + i] = (uint)c; + c >>= 32; + } + while (++i < xPos); + return (uint)c; + } +#endif + + public static int Sub(int len, uint[] x, uint[] y, uint[] z) + { + long c = 0; + for (int i = 0; i < len; ++i) + { + c += (long)x[i] - y[i]; + z[i] = (uint)c; + c >>= 32; + } + return (int)c; + } + + public static int Sub(int len, uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + long c = 0; + for (int i = 0; i < len; ++i) + { + c += (long)x[xOff + i] - y[yOff + i]; + z[zOff + i] = (uint)c; + c >>= 32; + } + return (int)c; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static int Sub(int len, ReadOnlySpan x, ReadOnlySpan y, Span z) + { + long c = 0; + for (int i = 0; i < len; ++i) + { + c += (long)x[i] - y[i]; + z[i] = (uint)c; + c >>= 32; + } + return (int)c; + } +#endif + + public static int Sub33At(int len, uint x, uint[] z, int zPos) + { + Debug.Assert(zPos <= (len - 2)); + long c = (long)z[zPos + 0] - x; + z[zPos + 0] = (uint)c; + c >>= 32; + c += (long)z[zPos + 1] - 1; + z[zPos + 1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : DecAt(len, z, zPos + 2); + } + + public static int Sub33At(int len, uint x, uint[] z, int zOff, int zPos) + { + Debug.Assert(zPos <= (len - 2)); + long c = (long)z[zOff + zPos] - x; + z[zOff + zPos] = (uint)c; + c >>= 32; + c += (long)z[zOff + zPos + 1] - 1; + z[zOff + zPos + 1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : DecAt(len, z, zOff, zPos + 2); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static int Sub33At(int len, uint x, Span z, int zPos) + { + Debug.Assert(zPos <= (len - 2)); + long c = (long)z[zPos + 0] - x; + z[zPos + 0] = (uint)c; + c >>= 32; + c += (long)z[zPos + 1] - 1; + z[zPos + 1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : DecAt(len, z, zPos + 2); + } +#endif + + public static int Sub33From(int len, uint x, uint[] z) + { + long c = (long)z[0] - x; + z[0] = (uint)c; + c >>= 32; + c += (long)z[1] - 1; + z[1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : DecAt(len, z, 2); + } + + public static int Sub33From(int len, uint x, uint[] z, int zOff) + { + long c = (long)z[zOff + 0] - x; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (long)z[zOff + 1] - 1; + z[zOff + 1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : DecAt(len, z, zOff, 2); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static int Sub33From(int len, uint x, Span z) + { + long c = (long)z[0] - x; + z[0] = (uint)c; + c >>= 32; + c += (long)z[1] - 1; + z[1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : DecAt(len, z, 2); + } +#endif + + public static int SubBothFrom(int len, uint[] x, uint[] y, uint[] z) + { + long c = 0; + for (int i = 0; i < len; ++i) + { + c += (long)z[i] - x[i] - y[i]; + z[i] = (uint)c; + c >>= 32; + } + return (int)c; + } + + public static int SubBothFrom(int len, uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + long c = 0; + for (int i = 0; i < len; ++i) + { + c += (long)z[zOff + i] - x[xOff + i] - y[yOff + i]; + z[zOff + i] = (uint)c; + c >>= 32; + } + return (int)c; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static int SubBothFrom(int len, ReadOnlySpan x, ReadOnlySpan y, Span z) + { + long c = 0; + for (int i = 0; i < len; ++i) + { + c += (long)z[i] - x[i] - y[i]; + z[i] = (uint)c; + c >>= 32; + } + return (int)c; + } +#endif + + public static int SubDWordAt(int len, ulong x, uint[] z, int zPos) + { + Debug.Assert(zPos <= (len - 2)); + long c = z[zPos + 0] - (long)(x & M); + z[zPos + 0] = (uint)c; + c >>= 32; + c += z[zPos + 1] - (long)(x >> 32); + z[zPos + 1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : DecAt(len, z, zPos + 2); + } + + public static int SubDWordAt(int len, ulong x, uint[] z, int zOff, int zPos) + { + Debug.Assert(zPos <= (len - 2)); + long c = z[zOff + zPos] - (long)(x & M); + z[zOff + zPos] = (uint)c; + c >>= 32; + c += z[zOff + zPos + 1] - (long)(x >> 32); + z[zOff + zPos + 1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : DecAt(len, z, zOff, zPos + 2); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static int SubDWordAt(int len, ulong x, Span z, int zPos) + { + Debug.Assert(zPos <= (len - 2)); + long c = z[zPos + 0] - (long)(x & M); + z[zPos + 0] = (uint)c; + c >>= 32; + c += z[zPos + 1] - (long)(x >> 32); + z[zPos + 1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : DecAt(len, z, zPos + 2); + } +#endif + + public static int SubDWordFrom(int len, ulong x, uint[] z) + { + long c = z[0] - (long)(x & M); + z[0] = (uint)c; + c >>= 32; + c += z[1] - (long)(x >> 32); + z[1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : DecAt(len, z, 2); + } + + public static int SubDWordFrom(int len, ulong x, uint[] z, int zOff) + { + long c = z[zOff + 0] - (long)(x & M); + z[zOff + 0] = (uint)c; + c >>= 32; + c += z[zOff + 1] - (long)(x >> 32); + z[zOff + 1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : DecAt(len, z, zOff, 2); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static int SubDWordFrom(int len, ulong x, Span z) + { + long c = z[0] - (long)(x & M); + z[0] = (uint)c; + c >>= 32; + c += z[1] - (long)(x >> 32); + z[1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : DecAt(len, z, 2); + } +#endif + + public static int SubFrom(int len, uint[] x, uint[] z) + { + long c = 0; + for (int i = 0; i < len; ++i) + { + c += (long)z[i] - x[i]; + z[i] = (uint)c; + c >>= 32; + } + return (int)c; + } + + public static int SubFrom(int len, uint[] x, int xOff, uint[] z, int zOff) + { + long c = 0; + for (int i = 0; i < len; ++i) + { + c += (long)z[zOff + i] - x[xOff + i]; + z[zOff + i] = (uint)c; + c >>= 32; + } + return (int)c; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static int SubFrom(int len, ReadOnlySpan x, Span z) + { + long c = 0; + for (int i = 0; i < len; ++i) + { + c += (long)z[i] - x[i]; + z[i] = (uint)c; + c >>= 32; + } + return (int)c; + } +#endif + + public static int SubWordAt(int len, uint x, uint[] z, int zPos) + { + Debug.Assert(zPos <= (len - 1)); + long c = (long)z[zPos] - x; + z[zPos] = (uint)c; + c >>= 32; + return c == 0 ? 0 : DecAt(len, z, zPos + 1); + } + + public static int SubWordAt(int len, uint x, uint[] z, int zOff, int zPos) + { + Debug.Assert(zPos <= (len - 1)); + long c = (long)z[zOff + zPos] - x; + z[zOff + zPos] = (uint)c; + c >>= 32; + return c == 0 ? 0 : DecAt(len, z, zOff, zPos + 1); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static int SubWordAt(int len, uint x, Span z, int zPos) + { + Debug.Assert(zPos <= (len - 1)); + long c = (long)z[zPos] - x; + z[zPos] = (uint)c; + c >>= 32; + return c == 0 ? 0 : DecAt(len, z, zPos + 1); + } +#endif + + public static int SubWordFrom(int len, uint x, uint[] z) + { + long c = (long)z[0] - x; + z[0] = (uint)c; + c >>= 32; + return c == 0 ? 0 : DecAt(len, z, 1); + } + + public static int SubWordFrom(int len, uint x, uint[] z, int zOff) + { + long c = (long)z[zOff + 0] - x; + z[zOff + 0] = (uint)c; + c >>= 32; + return c == 0 ? 0 : DecAt(len, z, zOff, 1); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static int SubWordFrom(int len, uint x, Span z) + { + long c = (long)z[0] - x; + z[0] = (uint)c; + c >>= 32; + return c == 0 ? 0 : DecAt(len, z, 1); + } +#endif + + public static BigInteger ToBigInteger(int len, uint[] x) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ToBigInteger(len, x.AsSpan()); +#else + byte[] bs = new byte[len << 2]; + int xPos = len, bsPos = 0; + while (--xPos >= 0) + { + Pack.UInt32_To_BE(x[xPos], bs, bsPos); + bsPos += 4; + } + return new BigInteger(1, bs); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static BigInteger ToBigInteger(int len, ReadOnlySpan x) + { + int bsLen = len << 2; + Span bs = bsLen <= 512 + ? stackalloc byte[bsLen] + : new byte[bsLen]; + + int xPos = len; + Span t = bs; + while (--xPos >= 0) + { + Pack.UInt32_To_BE(x[xPos], t); + t = t[4..]; + } + return new BigInteger(1, bs); + } +#endif + + public static void Xor(int len, uint[] x, uint[] y, uint[] z) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Xor(len, x.AsSpan(0, len), y.AsSpan(0, len), z.AsSpan(0, len)); +#else + for (int i = 0; i < len; ++i) + { + z[i] = x[i] ^ y[i]; + } +#endif + } + + public static void Xor(int len, uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Xor(len, x.AsSpan(xOff, len), y.AsSpan(yOff, len), z.AsSpan(zOff, len)); +#else + for (int i = 0; i < len; ++i) + { + z[zOff + i] = x[xOff + i] ^ y[yOff + i]; + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Xor(int len, ReadOnlySpan x, ReadOnlySpan y, Span z) + { + int i = 0, limit16 = len - 16; + while (i <= limit16) + { + Nat512.Xor(x[i..], y[i..], z[i..]); + i += 16; + } + while (i < len) + { + z[i] = x[i] ^ y[i]; + ++i; + } + } +#endif + + public static void Xor64(int len, ulong[] x, ulong[] y, ulong[] z) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Xor64(len, x.AsSpan(0, len), y.AsSpan(0, len), z.AsSpan(0, len)); +#else + for (int i = 0; i < len; ++i) + { + z[i] = x[i] ^ y[i]; + } +#endif + } + + public static void Xor64(int len, ulong[] x, int xOff, ulong[] y, int yOff, ulong[] z, int zOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Xor64(len, x.AsSpan(xOff, len), y.AsSpan(yOff, len), z.AsSpan(zOff, len)); +#else + for (int i = 0; i < len; ++i) + { + z[zOff + i] = x[xOff + i] ^ y[yOff + i]; + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Xor64(int len, ReadOnlySpan x, ReadOnlySpan y, Span z) + { + int i = 0, limit8 = len - 8; + while (i <= limit8) + { + Nat512.Xor64(x[i..], y[i..], z[i..]); + i += 8; + } + while (i < len) + { + z[i] = x[i] ^ y[i]; + ++i; + } + } +#endif + + public static void XorTo(int len, uint[] x, uint[] z) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + XorTo(len, x.AsSpan(0, len), z.AsSpan(0, len)); +#else + for (int i = 0; i < len; ++i) + { + z[i] ^= x[i]; + } +#endif + } + + public static void XorTo(int len, uint[] x, int xOff, uint[] z, int zOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + XorTo(len, x.AsSpan(xOff, len), z.AsSpan(zOff, len)); +#else + for (int i = 0; i < len; ++i) + { + z[zOff + i] ^= x[xOff + i]; + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void XorTo(int len, ReadOnlySpan x, Span z) + { + int i = 0, limit16 = len - 16; + while (i <= limit16) + { + Nat512.XorTo(x[i..], z[i..]); + i += 16; + } + while (i < len) + { + z[i] ^= x[i]; + ++i; + } + } +#endif + + public static void XorTo64(int len, ulong[] x, ulong[] z) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + XorTo64(len, x.AsSpan(0, len), z.AsSpan(0, len)); +#else + for (int i = 0; i < len; ++i) + { + z[i] ^= x[i]; + } +#endif + } + + public static void XorTo64(int len, ulong[] x, int xOff, ulong[] z, int zOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + XorTo64(len, x.AsSpan(xOff, len), z.AsSpan(zOff, len)); +#else + for (int i = 0; i < len; ++i) + { + z[zOff + i] ^= x[xOff + i]; + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void XorTo64(int len, ReadOnlySpan x, Span z) + { + int i = 0, limit8 = len - 8; + while (i <= limit8) + { + Nat512.XorTo64(x[i..], z[i..]); + i += 8; + } + while (i < len) + { + z[i] ^= x[i]; + ++i; + } + } +#endif + + public static void Zero(int len, uint[] z) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + z.AsSpan(0, len).Fill(0U); +#else + for (int i = 0; i < len; ++i) + { + z[i] = 0U; + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Zero(int len, Span z) + { + z[..len].Fill(0U); + } +#endif + + public static void Zero64(int len, ulong[] z) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + z.AsSpan(0, len).Fill(0UL); +#else + for (int i = 0; i < len; ++i) + { + z[i] = 0UL; + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Zero64(int len, Span z) + { + z[..len].Fill(0UL); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat.cs.meta new file mode 100644 index 000000000..ea2258818 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 67f25ce049bdd324f876627a914e4063 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat128.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat128.cs new file mode 100644 index 000000000..e205df2fd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat128.cs @@ -0,0 +1,846 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw +{ + internal abstract class Nat128 + { + private const ulong M = 0xFFFFFFFFUL; + + public static uint Add(uint[] x, uint[] y, uint[] z) + { + ulong c = 0; + c += (ulong)x[0] + y[0]; + z[0] = (uint)c; + c >>= 32; + c += (ulong)x[1] + y[1]; + z[1] = (uint)c; + c >>= 32; + c += (ulong)x[2] + y[2]; + z[2] = (uint)c; + c >>= 32; + c += (ulong)x[3] + y[3]; + z[3] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddBothTo(uint[] x, uint[] y, uint[] z) + { + ulong c = 0; + c += (ulong)x[0] + y[0] + z[0]; + z[0] = (uint)c; + c >>= 32; + c += (ulong)x[1] + y[1] + z[1]; + z[1] = (uint)c; + c >>= 32; + c += (ulong)x[2] + y[2] + z[2]; + z[2] = (uint)c; + c >>= 32; + c += (ulong)x[3] + y[3] + z[3]; + z[3] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddTo(uint[] x, uint[] z) + { + ulong c = 0; + c += (ulong)x[0] + z[0]; + z[0] = (uint)c; + c >>= 32; + c += (ulong)x[1] + z[1]; + z[1] = (uint)c; + c >>= 32; + c += (ulong)x[2] + z[2]; + z[2] = (uint)c; + c >>= 32; + c += (ulong)x[3] + z[3]; + z[3] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddTo(uint[] x, int xOff, uint[] z, int zOff, uint cIn) + { + ulong c = cIn; + c += (ulong)x[xOff + 0] + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 1] + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 2] + z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 3] + z[zOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddToEachOther(uint[] u, int uOff, uint[] v, int vOff) + { + ulong c = 0; + c += (ulong)u[uOff + 0] + v[vOff + 0]; + u[uOff + 0] = (uint)c; + v[vOff + 0] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 1] + v[vOff + 1]; + u[uOff + 1] = (uint)c; + v[vOff + 1] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 2] + v[vOff + 2]; + u[uOff + 2] = (uint)c; + v[vOff + 2] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 3] + v[vOff + 3]; + u[uOff + 3] = (uint)c; + v[vOff + 3] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static void Copy(uint[] x, uint[] z) + { + z[0] = x[0]; + z[1] = x[1]; + z[2] = x[2]; + z[3] = x[3]; + } + + public static void Copy(uint[] x, int xOff, uint[] z, int zOff) + { + z[zOff + 0] = x[xOff + 0]; + z[zOff + 1] = x[xOff + 1]; + z[zOff + 2] = x[xOff + 2]; + z[zOff + 3] = x[xOff + 3]; + } + + public static void Copy64(ulong[] x, ulong[] z) + { + z[0] = x[0]; + z[1] = x[1]; + } + + public static void Copy64(ulong[] x, int xOff, ulong[] z, int zOff) + { + z[zOff + 0] = x[xOff + 0]; + z[zOff + 1] = x[xOff + 1]; + } + + public static uint[] Create() + { + return new uint[4]; + } + + public static ulong[] Create64() + { + return new ulong[2]; + } + + public static uint[] CreateExt() + { + return new uint[8]; + } + + public static ulong[] CreateExt64() + { + return new ulong[4]; + } + + public static bool Diff(uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + bool pos = Gte(x, xOff, y, yOff); + if (pos) + { + Sub(x, xOff, y, yOff, z, zOff); + } + else + { + Sub(y, yOff, x, xOff, z, zOff); + } + return pos; + } + + public static bool Eq(uint[] x, uint[] y) + { + for (int i = 3; i >= 0; --i) + { + if (x[i] != y[i]) + return false; + } + return true; + } + + public static bool Eq64(ulong[] x, ulong[] y) + { + for (int i = 1; i >= 0; --i) + { + if (x[i] != y[i]) + return false; + } + return true; + } + + public static uint GetBit(uint[] x, int bit) + { + if (bit == 0) + { + return x[0] & 1; + } + if ((bit & 127) != bit) + { + return 0; + } + int w = bit >> 5; + int b = bit & 31; + return (x[w] >> b) & 1; + } + + public static bool Gte(uint[] x, uint[] y) + { + for (int i = 3; i >= 0; --i) + { + uint x_i = x[i], y_i = y[i]; + if (x_i < y_i) + return false; + if (x_i > y_i) + return true; + } + return true; + } + + public static bool Gte(uint[] x, int xOff, uint[] y, int yOff) + { + for (int i = 3; i >= 0; --i) + { + uint x_i = x[xOff + i], y_i = y[yOff + i]; + if (x_i < y_i) + return false; + if (x_i > y_i) + return true; + } + return true; + } + + public static bool IsOne(uint[] x) + { + if (x[0] != 1) + { + return false; + } + for (int i = 1; i < 4; ++i) + { + if (x[i] != 0) + { + return false; + } + } + return true; + } + + public static bool IsOne64(ulong[] x) + { + if (x[0] != 1UL) + { + return false; + } + for (int i = 1; i < 2; ++i) + { + if (x[i] != 0UL) + { + return false; + } + } + return true; + } + + public static bool IsZero(uint[] x) + { + for (int i = 0; i < 4; ++i) + { + if (x[i] != 0) + { + return false; + } + } + return true; + } + + public static bool IsZero64(ulong[] x) + { + for (int i = 0; i < 2; ++i) + { + if (x[i] != 0UL) + { + return false; + } + } + return true; + } + + public static void Mul(uint[] x, uint[] y, uint[] zz) + { + ulong y_0 = y[0]; + ulong y_1 = y[1]; + ulong y_2 = y[2]; + ulong y_3 = y[3]; + + { + ulong c = 0, x_0 = x[0]; + c += x_0 * y_0; + zz[0] = (uint)c; + c >>= 32; + c += x_0 * y_1; + zz[1] = (uint)c; + c >>= 32; + c += x_0 * y_2; + zz[2] = (uint)c; + c >>= 32; + c += x_0 * y_3; + zz[3] = (uint)c; + c >>= 32; + zz[4] = (uint)c; + } + + for (int i = 1; i < 4; ++i) + { + ulong c = 0, x_i = x[i]; + c += x_i * y_0 + zz[i + 0]; + zz[i + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[i + 1]; + zz[i + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[i + 2]; + zz[i + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[i + 3]; + zz[i + 3] = (uint)c; + c >>= 32; + zz[i + 4] = (uint)c; + } + } + + public static void Mul(uint[] x, int xOff, uint[] y, int yOff, uint[] zz, int zzOff) + { + ulong y_0 = y[yOff + 0]; + ulong y_1 = y[yOff + 1]; + ulong y_2 = y[yOff + 2]; + ulong y_3 = y[yOff + 3]; + + { + ulong c = 0, x_0 = x[xOff + 0]; + c += x_0 * y_0; + zz[zzOff + 0] = (uint)c; + c >>= 32; + c += x_0 * y_1; + zz[zzOff + 1] = (uint)c; + c >>= 32; + c += x_0 * y_2; + zz[zzOff + 2] = (uint)c; + c >>= 32; + c += x_0 * y_3; + zz[zzOff + 3] = (uint)c; + c >>= 32; + zz[zzOff + 4] = (uint)c; + } + + for (int i = 1; i < 4; ++i) + { + ++zzOff; + ulong c = 0, x_i = x[xOff + i]; + c += x_i * y_0 + zz[zzOff + 0]; + zz[zzOff + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[zzOff + 1]; + zz[zzOff + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[zzOff + 2]; + zz[zzOff + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[zzOff + 3]; + zz[zzOff + 3] = (uint)c; + c >>= 32; + zz[zzOff + 4] = (uint)c; + } + } + + public static uint MulAddTo(uint[] x, uint[] y, uint[] zz) + { + ulong y_0 = y[0]; + ulong y_1 = y[1]; + ulong y_2 = y[2]; + ulong y_3 = y[3]; + + ulong zc = 0; + for (int i = 0; i < 4; ++i) + { + ulong c = 0, x_i = x[i]; + c += x_i * y_0 + zz[i + 0]; + zz[i + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[i + 1]; + zz[i + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[i + 2]; + zz[i + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[i + 3]; + zz[i + 3] = (uint)c; + c >>= 32; + + zc += c + zz[i + 4]; + zz[i + 4] = (uint)zc; + zc >>= 32; + } + return (uint)zc; + } + + public static uint MulAddTo(uint[] x, int xOff, uint[] y, int yOff, uint[] zz, int zzOff) + { + ulong y_0 = y[yOff + 0]; + ulong y_1 = y[yOff + 1]; + ulong y_2 = y[yOff + 2]; + ulong y_3 = y[yOff + 3]; + + ulong zc = 0; + for (int i = 0; i < 4; ++i) + { + ulong c = 0, x_i = x[xOff + i]; + c += x_i * y_0 + zz[zzOff + 0]; + zz[zzOff + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[zzOff + 1]; + zz[zzOff + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[zzOff + 2]; + zz[zzOff + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[zzOff + 3]; + zz[zzOff + 3] = (uint)c; + c >>= 32; + + zc += c + zz[zzOff + 4]; + zz[zzOff + 4] = (uint)zc; + zc >>= 32; + ++zzOff; + } + return (uint)zc; + } + + public static ulong Mul33Add(uint w, uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + Debug.Assert(w >> 31 == 0); + + ulong c = 0, wVal = w; + ulong x0 = x[xOff + 0]; + c += wVal * x0 + y[yOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + ulong x1 = x[xOff + 1]; + c += wVal * x1 + x0 + y[yOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + ulong x2 = x[xOff + 2]; + c += wVal * x2 + x1 + y[yOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + ulong x3 = x[xOff + 3]; + c += wVal * x3 + x2 + y[yOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + c += x3; + return c; + } + + public static uint MulWordAddExt(uint x, uint[] yy, int yyOff, uint[] zz, int zzOff) + { + Debug.Assert(yyOff <= 4); + Debug.Assert(zzOff <= 4); + + ulong c = 0, xVal = x; + c += xVal * yy[yyOff + 0] + zz[zzOff + 0]; + zz[zzOff + 0] = (uint)c; + c >>= 32; + c += xVal * yy[yyOff + 1] + zz[zzOff + 1]; + zz[zzOff + 1] = (uint)c; + c >>= 32; + c += xVal * yy[yyOff + 2] + zz[zzOff + 2]; + zz[zzOff + 2] = (uint)c; + c >>= 32; + c += xVal * yy[yyOff + 3] + zz[zzOff + 3]; + zz[zzOff + 3] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint Mul33DWordAdd(uint x, ulong y, uint[] z, int zOff) + { + Debug.Assert(x >> 31 == 0); + Debug.Assert(zOff <= 0); + ulong c = 0, xVal = x; + ulong y00 = y & M; + c += xVal * y00 + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + ulong y01 = y >> 32; + c += xVal * y01 + y00 + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += y01 + z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += z[zOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint Mul33WordAdd(uint x, uint y, uint[] z, int zOff) + { + Debug.Assert(x >> 31 == 0); + Debug.Assert(zOff <= 1); + ulong c = 0, yVal = y; + c += yVal * x + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += yVal + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + return c == 0 ? 0 : Nat.IncAt(4, z, zOff, 3); + } + + public static uint MulWordDwordAdd(uint x, ulong y, uint[] z, int zOff) + { + Debug.Assert(zOff <= 1); + ulong c = 0, xVal = x; + c += xVal * y + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += xVal * (y >> 32) + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + return c == 0 ? 0 : Nat.IncAt(4, z, zOff, 3); + } + + public static uint MulWordsAdd(uint x, uint y, uint[] z, int zOff) + { + Debug.Assert(zOff <= 2); + + ulong c = 0, xVal = x, yVal = y; + c += yVal * xVal + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : Nat.IncAt(4, z, zOff, 2); + } + + public static uint MulWord(uint x, uint[] y, uint[] z, int zOff) + { + ulong c = 0, xVal = x; + int i = 0; + do + { + c += xVal * y[i]; + z[zOff + i] = (uint)c; + c >>= 32; + } + while (++i < 4); + return (uint)c; + } + + public static void Square(uint[] x, uint[] zz) + { + ulong x_0 = x[0]; + ulong zz_1; + + uint c = 0, w; + { + int i = 3, j = 8; + do + { + ulong xVal = x[i--]; + ulong p = xVal * xVal; + zz[--j] = (c << 31) | (uint)(p >> 33); + zz[--j] = (uint)(p >> 1); + c = (uint)p; + } + while (i > 0); + + { + ulong p = x_0 * x_0; + zz_1 = (ulong)(c << 31) | (p >> 33); + zz[0] = (uint)p; + c = (uint)(p >> 32) & 1; + } + } + + ulong x_1 = x[1]; + ulong zz_2 = zz[2]; + + { + zz_1 += x_1 * x_0; + w = (uint)zz_1; + zz[1] = (w << 1) | c; + c = w >> 31; + zz_2 += zz_1 >> 32; + } + + ulong x_2 = x[2]; + ulong zz_3 = zz[3]; + ulong zz_4 = zz[4]; + { + zz_2 += x_2 * x_0; + w = (uint)zz_2; + zz[2] = (w << 1) | c; + c = w >> 31; + zz_3 += (zz_2 >> 32) + x_2 * x_1; + zz_4 += zz_3 >> 32; + zz_3 &= M; + } + + ulong x_3 = x[3]; + ulong zz_5 = zz[5] + (zz_4 >> 32); zz_4 &= M; + ulong zz_6 = zz[6] + (zz_5 >> 32); zz_5 &= M; + { + zz_3 += x_3 * x_0; + w = (uint)zz_3; + zz[3] = (w << 1) | c; + c = w >> 31; + zz_4 += (zz_3 >> 32) + x_3 * x_1; + zz_5 += (zz_4 >> 32) + x_3 * x_2; + zz_6 += zz_5 >> 32; + } + + w = (uint)zz_4; + zz[4] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_5; + zz[5] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_6; + zz[6] = (w << 1) | c; + c = w >> 31; + w = zz[7] + (uint)(zz_6 >> 32); + zz[7] = (w << 1) | c; + } + + public static void Square(uint[] x, int xOff, uint[] zz, int zzOff) + { + ulong x_0 = x[xOff + 0]; + ulong zz_1; + + uint c = 0, w; + { + int i = 3, j = 8; + do + { + ulong xVal = x[xOff + i--]; + ulong p = xVal * xVal; + zz[zzOff + --j] = (c << 31) | (uint)(p >> 33); + zz[zzOff + --j] = (uint)(p >> 1); + c = (uint)p; + } + while (i > 0); + + { + ulong p = x_0 * x_0; + zz_1 = (ulong)(c << 31) | (p >> 33); + zz[zzOff + 0] = (uint)p; + c = (uint)(p >> 32) & 1; + } + } + + ulong x_1 = x[xOff + 1]; + ulong zz_2 = zz[zzOff + 2]; + + { + zz_1 += x_1 * x_0; + w = (uint)zz_1; + zz[zzOff + 1] = (w << 1) | c; + c = w >> 31; + zz_2 += zz_1 >> 32; + } + + ulong x_2 = x[xOff + 2]; + ulong zz_3 = zz[zzOff + 3]; + ulong zz_4 = zz[zzOff + 4]; + { + zz_2 += x_2 * x_0; + w = (uint)zz_2; + zz[zzOff + 2] = (w << 1) | c; + c = w >> 31; + zz_3 += (zz_2 >> 32) + x_2 * x_1; + zz_4 += zz_3 >> 32; + zz_3 &= M; + } + + ulong x_3 = x[xOff + 3]; + ulong zz_5 = zz[zzOff + 5] + (zz_4 >> 32); zz_4 &= M; + ulong zz_6 = zz[zzOff + 6] + (zz_5 >> 32); zz_5 &= M; + { + zz_3 += x_3 * x_0; + w = (uint)zz_3; + zz[zzOff + 3] = (w << 1) | c; + c = w >> 31; + zz_4 += (zz_3 >> 32) + x_3 * x_1; + zz_5 += (zz_4 >> 32) + x_3 * x_2; + zz_6 += zz_5 >> 32; + } + + w = (uint)zz_4; + zz[zzOff + 4] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_5; + zz[zzOff + 5] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_6; + zz[zzOff + 6] = (w << 1) | c; + c = w >> 31; + w = zz[zzOff + 7] + (uint)(zz_6 >> 32); + zz[zzOff + 7] = (w << 1) | c; + } + + public static int Sub(uint[] x, uint[] y, uint[] z) + { + long c = 0; + c += (long)x[0] - y[0]; + z[0] = (uint)c; + c >>= 32; + c += (long)x[1] - y[1]; + z[1] = (uint)c; + c >>= 32; + c += (long)x[2] - y[2]; + z[2] = (uint)c; + c >>= 32; + c += (long)x[3] - y[3]; + z[3] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int Sub(uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + long c = 0; + c += (long)x[xOff + 0] - y[yOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (long)x[xOff + 1] - y[yOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += (long)x[xOff + 2] - y[yOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += (long)x[xOff + 3] - y[yOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int SubBothFrom(uint[] x, uint[] y, uint[] z) + { + long c = 0; + c += (long)z[0] - x[0] - y[0]; + z[0] = (uint)c; + c >>= 32; + c += (long)z[1] - x[1] - y[1]; + z[1] = (uint)c; + c >>= 32; + c += (long)z[2] - x[2] - y[2]; + z[2] = (uint)c; + c >>= 32; + c += (long)z[3] - x[3] - y[3]; + z[3] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int SubFrom(uint[] x, uint[] z) + { + long c = 0; + c += (long)z[0] - x[0]; + z[0] = (uint)c; + c >>= 32; + c += (long)z[1] - x[1]; + z[1] = (uint)c; + c >>= 32; + c += (long)z[2] - x[2]; + z[2] = (uint)c; + c >>= 32; + c += (long)z[3] - x[3]; + z[3] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int SubFrom(uint[] x, int xOff, uint[] z, int zOff) + { + long c = 0; + c += (long)z[zOff + 0] - x[xOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (long)z[zOff + 1] - x[xOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += (long)z[zOff + 2] - x[xOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += (long)z[zOff + 3] - x[xOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + return (int)c; + } + + public static BigInteger ToBigInteger(uint[] x) + { + byte[] bs = new byte[16]; + for (int i = 0; i < 4; ++i) + { + uint x_i = x[i]; + if (x_i != 0) + { + Pack.UInt32_To_BE(x_i, bs, (3 - i) << 2); + } + } + return new BigInteger(1, bs); + } + + public static BigInteger ToBigInteger64(ulong[] x) + { + byte[] bs = new byte[16]; + for (int i = 0; i < 2; ++i) + { + ulong x_i = x[i]; + if (x_i != 0UL) + { + Pack.UInt64_To_BE(x_i, bs, (1 - i) << 3); + } + } + return new BigInteger(1, bs); + } + + public static void Zero(uint[] z) + { + z[0] = 0; + z[1] = 0; + z[2] = 0; + z[3] = 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat128.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat128.cs.meta new file mode 100644 index 000000000..5a994d4d2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat128.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 139465f650dc3ff47be85e4d1be06c78 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat160.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat160.cs new file mode 100644 index 000000000..85a7fcf99 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat160.cs @@ -0,0 +1,874 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw +{ + internal abstract class Nat160 + { + private const ulong M = 0xFFFFFFFFUL; + + public static uint Add(uint[] x, uint[] y, uint[] z) + { + ulong c = 0; + c += (ulong)x[0] + y[0]; + z[0] = (uint)c; + c >>= 32; + c += (ulong)x[1] + y[1]; + z[1] = (uint)c; + c >>= 32; + c += (ulong)x[2] + y[2]; + z[2] = (uint)c; + c >>= 32; + c += (ulong)x[3] + y[3]; + z[3] = (uint)c; + c >>= 32; + c += (ulong)x[4] + y[4]; + z[4] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddBothTo(uint[] x, uint[] y, uint[] z) + { + ulong c = 0; + c += (ulong)x[0] + y[0] + z[0]; + z[0] = (uint)c; + c >>= 32; + c += (ulong)x[1] + y[1] + z[1]; + z[1] = (uint)c; + c >>= 32; + c += (ulong)x[2] + y[2] + z[2]; + z[2] = (uint)c; + c >>= 32; + c += (ulong)x[3] + y[3] + z[3]; + z[3] = (uint)c; + c >>= 32; + c += (ulong)x[4] + y[4] + z[4]; + z[4] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddTo(uint[] x, uint[] z) + { + ulong c = 0; + c += (ulong)x[0] + z[0]; + z[0] = (uint)c; + c >>= 32; + c += (ulong)x[1] + z[1]; + z[1] = (uint)c; + c >>= 32; + c += (ulong)x[2] + z[2]; + z[2] = (uint)c; + c >>= 32; + c += (ulong)x[3] + z[3]; + z[3] = (uint)c; + c >>= 32; + c += (ulong)x[4] + z[4]; + z[4] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddTo(uint[] x, int xOff, uint[] z, int zOff, uint cIn) + { + ulong c = cIn; + c += (ulong)x[xOff + 0] + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 1] + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 2] + z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 3] + z[zOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 4] + z[zOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 5] + z[zOff + 5]; + return (uint)c; + } + + public static uint AddToEachOther(uint[] u, int uOff, uint[] v, int vOff) + { + ulong c = 0; + c += (ulong)u[uOff + 0] + v[vOff + 0]; + u[uOff + 0] = (uint)c; + v[vOff + 0] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 1] + v[vOff + 1]; + u[uOff + 1] = (uint)c; + v[vOff + 1] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 2] + v[vOff + 2]; + u[uOff + 2] = (uint)c; + v[vOff + 2] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 3] + v[vOff + 3]; + u[uOff + 3] = (uint)c; + v[vOff + 3] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 4] + v[vOff + 4]; + u[uOff + 4] = (uint)c; + v[vOff + 4] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static void Copy(uint[] x, uint[] z) + { + z[0] = x[0]; + z[1] = x[1]; + z[2] = x[2]; + z[3] = x[3]; + z[4] = x[4]; + } + + public static void Copy(uint[] x, int xOff, uint[] z, int zOff) + { + z[zOff + 0] = x[xOff + 0]; + z[zOff + 1] = x[xOff + 1]; + z[zOff + 2] = x[xOff + 2]; + z[zOff + 3] = x[xOff + 3]; + z[zOff + 4] = x[xOff + 4]; + } + + public static uint[] Create() + { + return new uint[5]; + } + + public static uint[] CreateExt() + { + return new uint[10]; + } + + public static bool Diff(uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + bool pos = Gte(x, xOff, y, yOff); + if (pos) + { + Sub(x, xOff, y, yOff, z, zOff); + } + else + { + Sub(y, yOff, x, xOff, z, zOff); + } + return pos; + } + + public static bool Eq(uint[] x, uint[] y) + { + for (int i = 4; i >= 0; --i) + { + if (x[i] != y[i]) + return false; + } + return true; + } + + public static uint GetBit(uint[] x, int bit) + { + if (bit == 0) + { + return x[0] & 1; + } + int w = bit >> 5; + if (w < 0 || w >= 5) + { + return 0; + } + int b = bit & 31; + return (x[w] >> b) & 1; + } + + public static bool Gte(uint[] x, uint[] y) + { + for (int i = 4; i >= 0; --i) + { + uint x_i = x[i], y_i = y[i]; + if (x_i < y_i) + return false; + if (x_i > y_i) + return true; + } + return true; + } + + public static bool Gte(uint[] x, int xOff, uint[] y, int yOff) + { + for (int i = 4; i >= 0; --i) + { + uint x_i = x[xOff + i], y_i = y[yOff + i]; + if (x_i < y_i) + return false; + if (x_i > y_i) + return true; + } + return true; + } + + public static bool IsOne(uint[] x) + { + if (x[0] != 1) + { + return false; + } + for (int i = 1; i < 5; ++i) + { + if (x[i] != 0) + { + return false; + } + } + return true; + } + + public static bool IsZero(uint[] x) + { + for (int i = 0; i < 5; ++i) + { + if (x[i] != 0) + { + return false; + } + } + return true; + } + + public static void Mul(uint[] x, uint[] y, uint[] zz) + { + ulong y_0 = y[0]; + ulong y_1 = y[1]; + ulong y_2 = y[2]; + ulong y_3 = y[3]; + ulong y_4 = y[4]; + + { + ulong c = 0, x_0 = x[0]; + c += x_0 * y_0; + zz[0] = (uint)c; + c >>= 32; + c += x_0 * y_1; + zz[1] = (uint)c; + c >>= 32; + c += x_0 * y_2; + zz[2] = (uint)c; + c >>= 32; + c += x_0 * y_3; + zz[3] = (uint)c; + c >>= 32; + c += x_0 * y_4; + zz[4] = (uint)c; + c >>= 32; + zz[5] = (uint)c; + } + + for (int i = 1; i < 5; ++i) + { + ulong c = 0, x_i = x[i]; + c += x_i * y_0 + zz[i + 0]; + zz[i + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[i + 1]; + zz[i + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[i + 2]; + zz[i + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[i + 3]; + zz[i + 3] = (uint)c; + c >>= 32; + c += x_i * y_4 + zz[i + 4]; + zz[i + 4] = (uint)c; + c >>= 32; + zz[i + 5] = (uint)c; + } + } + + public static void Mul(uint[] x, int xOff, uint[] y, int yOff, uint[] zz, int zzOff) + { + ulong y_0 = y[yOff + 0]; + ulong y_1 = y[yOff + 1]; + ulong y_2 = y[yOff + 2]; + ulong y_3 = y[yOff + 3]; + ulong y_4 = y[yOff + 4]; + + { + ulong c = 0, x_0 = x[xOff + 0]; + c += x_0 * y_0; + zz[zzOff + 0] = (uint)c; + c >>= 32; + c += x_0 * y_1; + zz[zzOff + 1] = (uint)c; + c >>= 32; + c += x_0 * y_2; + zz[zzOff + 2] = (uint)c; + c >>= 32; + c += x_0 * y_3; + zz[zzOff + 3] = (uint)c; + c >>= 32; + c += x_0 * y_4; + zz[zzOff + 4] = (uint)c; + c >>= 32; + zz[zzOff + 5] = (uint)c; + } + + for (int i = 1; i < 5; ++i) + { + ++zzOff; + ulong c = 0, x_i = x[xOff + i]; + c += x_i * y_0 + zz[zzOff + 0]; + zz[zzOff + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[zzOff + 1]; + zz[zzOff + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[zzOff + 2]; + zz[zzOff + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[zzOff + 3]; + zz[zzOff + 3] = (uint)c; + c >>= 32; + c += x_i * y_4 + zz[zzOff + 4]; + zz[zzOff + 4] = (uint)c; + c >>= 32; + zz[zzOff + 5] = (uint)c; + } + } + + public static uint MulAddTo(uint[] x, uint[] y, uint[] zz) + { + ulong y_0 = y[0]; + ulong y_1 = y[1]; + ulong y_2 = y[2]; + ulong y_3 = y[3]; + ulong y_4 = y[4]; + + ulong zc = 0; + for (int i = 0; i < 5; ++i) + { + ulong c = 0, x_i = x[i]; + c += x_i * y_0 + zz[i + 0]; + zz[i + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[i + 1]; + zz[i + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[i + 2]; + zz[i + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[i + 3]; + zz[i + 3] = (uint)c; + c >>= 32; + c += x_i * y_4 + zz[i + 4]; + zz[i + 4] = (uint)c; + c >>= 32; + + zc += c + zz[i + 5]; + zz[i + 5] = (uint)zc; + zc >>= 32; + } + return (uint)zc; + } + + public static uint MulAddTo(uint[] x, int xOff, uint[] y, int yOff, uint[] zz, int zzOff) + { + ulong y_0 = y[yOff + 0]; + ulong y_1 = y[yOff + 1]; + ulong y_2 = y[yOff + 2]; + ulong y_3 = y[yOff + 3]; + ulong y_4 = y[yOff + 4]; + + ulong zc = 0; + for (int i = 0; i < 5; ++i) + { + ulong c = 0, x_i = x[xOff + i]; + c += x_i * y_0 + zz[zzOff + 0]; + zz[zzOff + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[zzOff + 1]; + zz[zzOff + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[zzOff + 2]; + zz[zzOff + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[zzOff + 3]; + zz[zzOff + 3] = (uint)c; + c >>= 32; + c += x_i * y_4 + zz[zzOff + 4]; + zz[zzOff + 4] = (uint)c; + c >>= 32; + + zc += c + zz[zzOff + 5]; + zz[zzOff + 5] = (uint)zc; + zc >>= 32; + ++zzOff; + } + return (uint)zc; + } + + public static ulong Mul33Add(uint w, uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + Debug.Assert(w >> 31 == 0); + + ulong c = 0, wVal = w; + ulong x0 = x[xOff + 0]; + c += wVal * x0 + y[yOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + ulong x1 = x[xOff + 1]; + c += wVal * x1 + x0 + y[yOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + ulong x2 = x[xOff + 2]; + c += wVal * x2 + x1 + y[yOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + ulong x3 = x[xOff + 3]; + c += wVal * x3 + x2 + y[yOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + ulong x4 = x[xOff + 4]; + c += wVal * x4 + x3 + y[yOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + c += x4; + return c; + } + + public static uint MulWordAddExt(uint x, uint[] yy, int yyOff, uint[] zz, int zzOff) + { + Debug.Assert(yyOff <= 5); + Debug.Assert(zzOff <= 5); + + ulong c = 0, xVal = x; + c += xVal * yy[yyOff + 0] + zz[zzOff + 0]; + zz[zzOff + 0] = (uint)c; + c >>= 32; + c += xVal * yy[yyOff + 1] + zz[zzOff + 1]; + zz[zzOff + 1] = (uint)c; + c >>= 32; + c += xVal * yy[yyOff + 2] + zz[zzOff + 2]; + zz[zzOff + 2] = (uint)c; + c >>= 32; + c += xVal * yy[yyOff + 3] + zz[zzOff + 3]; + zz[zzOff + 3] = (uint)c; + c >>= 32; + c += xVal * yy[yyOff + 4] + zz[zzOff + 4]; + zz[zzOff + 4] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint Mul33DWordAdd(uint x, ulong y, uint[] z, int zOff) + { + Debug.Assert(x >> 31 == 0); + Debug.Assert(zOff <= 1); + ulong c = 0, xVal = x; + ulong y00 = y & M; + c += xVal * y00 + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + ulong y01 = y >> 32; + c += xVal * y01 + y00 + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += y01 + z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += z[zOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + return c == 0 ? 0 : Nat.IncAt(5, z, zOff, 4); + } + + public static uint Mul33WordAdd(uint x, uint y, uint[] z, int zOff) + { + Debug.Assert(x >> 31 == 0); + Debug.Assert(zOff <= 2); + ulong c = 0, yVal = y; + c += yVal * x + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += yVal + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + return c == 0 ? 0 : Nat.IncAt(5, z, zOff, 3); + } + + public static uint MulWordDwordAdd(uint x, ulong y, uint[] z, int zOff) + { + Debug.Assert(zOff <= 2); + ulong c = 0, xVal = x; + c += xVal * y + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += xVal * (y >> 32) + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + return c == 0 ? 0 : Nat.IncAt(5, z, zOff, 3); + } + + public static uint MulWordsAdd(uint x, uint y, uint[] z, int zOff) + { + Debug.Assert(zOff <= 3); + + ulong c = 0, xVal = x, yVal = y; + c += yVal * xVal + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + return c == 0 ? 0 : Nat.IncAt(5, z, zOff, 2); + } + + public static uint MulWord(uint x, uint[] y, uint[] z, int zOff) + { + ulong c = 0, xVal = x; + int i = 0; + do + { + c += xVal * y[i]; + z[zOff + i] = (uint)c; + c >>= 32; + } + while (++i < 5); + return (uint)c; + } + + public static void Square(uint[] x, uint[] zz) + { + ulong x_0 = x[0]; + ulong zz_1; + + uint c = 0, w; + { + int i = 4, j = 10; + do + { + ulong xVal = x[i--]; + ulong p = xVal * xVal; + zz[--j] = (c << 31) | (uint)(p >> 33); + zz[--j] = (uint)(p >> 1); + c = (uint)p; + } + while (i > 0); + + { + ulong p = x_0 * x_0; + zz_1 = (ulong)(c << 31) | (p >> 33); + zz[0] = (uint)p; + c = (uint)(p >> 32) & 1; + } + } + + ulong x_1 = x[1]; + ulong zz_2 = zz[2]; + + { + zz_1 += x_1 * x_0; + w = (uint)zz_1; + zz[1] = (w << 1) | c; + c = w >> 31; + zz_2 += zz_1 >> 32; + } + + ulong x_2 = x[2]; + ulong zz_3 = zz[3]; + ulong zz_4 = zz[4]; + { + zz_2 += x_2 * x_0; + w = (uint)zz_2; + zz[2] = (w << 1) | c; + c = w >> 31; + zz_3 += (zz_2 >> 32) + x_2 * x_1; + zz_4 += zz_3 >> 32; + zz_3 &= M; + } + + ulong x_3 = x[3]; + ulong zz_5 = zz[5] + (zz_4 >> 32); zz_4 &= M; + ulong zz_6 = zz[6] + (zz_5 >> 32); zz_5 &= M; + { + zz_3 += x_3 * x_0; + w = (uint)zz_3; + zz[3] = (w << 1) | c; + c = w >> 31; + zz_4 += (zz_3 >> 32) + x_3 * x_1; + zz_5 += (zz_4 >> 32) + x_3 * x_2; + zz_4 &= M; + zz_6 += zz_5 >> 32; + zz_5 &= M; + } + + ulong x_4 = x[4]; + ulong zz_7 = zz[7] + (zz_6 >> 32); zz_6 &= M; + ulong zz_8 = zz[8] + (zz_7 >> 32); zz_7 &= M; + { + zz_4 += x_4 * x_0; + w = (uint)zz_4; + zz[4] = (w << 1) | c; + c = w >> 31; + zz_5 += (zz_4 >> 32) + x_4 * x_1; + zz_6 += (zz_5 >> 32) + x_4 * x_2; + zz_7 += (zz_6 >> 32) + x_4 * x_3; + zz_8 += zz_7 >> 32; + } + + w = (uint)zz_5; + zz[5] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_6; + zz[6] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_7; + zz[7] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_8; + zz[8] = (w << 1) | c; + c = w >> 31; + w = zz[9] + (uint)(zz_8 >> 32); + zz[9] = (w << 1) | c; + } + + public static void Square(uint[] x, int xOff, uint[] zz, int zzOff) + { + ulong x_0 = x[xOff + 0]; + ulong zz_1; + + uint c = 0, w; + { + int i = 4, j = 10; + do + { + ulong xVal = x[xOff + i--]; + ulong p = xVal * xVal; + zz[zzOff + --j] = (c << 31) | (uint)(p >> 33); + zz[zzOff + --j] = (uint)(p >> 1); + c = (uint)p; + } + while (i > 0); + + { + ulong p = x_0 * x_0; + zz_1 = (ulong)(c << 31) | (p >> 33); + zz[zzOff + 0] = (uint)p; + c = (uint)(p >> 32) & 1; + } + } + + ulong x_1 = x[xOff + 1]; + ulong zz_2 = zz[zzOff + 2]; + + { + zz_1 += x_1 * x_0; + w = (uint)zz_1; + zz[zzOff + 1] = (w << 1) | c; + c = w >> 31; + zz_2 += zz_1 >> 32; + } + + ulong x_2 = x[xOff + 2]; + ulong zz_3 = zz[zzOff + 3]; + ulong zz_4 = zz[zzOff + 4]; + { + zz_2 += x_2 * x_0; + w = (uint)zz_2; + zz[zzOff + 2] = (w << 1) | c; + c = w >> 31; + zz_3 += (zz_2 >> 32) + x_2 * x_1; + zz_4 += zz_3 >> 32; + zz_3 &= M; + } + + ulong x_3 = x[xOff + 3]; + ulong zz_5 = zz[zzOff + 5] + (zz_4 >> 32); zz_4 &= M; + ulong zz_6 = zz[zzOff + 6] + (zz_5 >> 32); zz_5 &= M; + { + zz_3 += x_3 * x_0; + w = (uint)zz_3; + zz[zzOff + 3] = (w << 1) | c; + c = w >> 31; + zz_4 += (zz_3 >> 32) + x_3 * x_1; + zz_5 += (zz_4 >> 32) + x_3 * x_2; + zz_4 &= M; + zz_6 += zz_5 >> 32; + zz_5 &= M; + } + + ulong x_4 = x[xOff + 4]; + ulong zz_7 = zz[zzOff + 7] + (zz_6 >> 32); zz_6 &= M; + ulong zz_8 = zz[zzOff + 8] + (zz_7 >> 32); zz_7 &= M; + { + zz_4 += x_4 * x_0; + w = (uint)zz_4; + zz[zzOff + 4] = (w << 1) | c; + c = w >> 31; + zz_5 += (zz_4 >> 32) + x_4 * x_1; + zz_6 += (zz_5 >> 32) + x_4 * x_2; + zz_7 += (zz_6 >> 32) + x_4 * x_3; + zz_8 += zz_7 >> 32; + } + + w = (uint)zz_5; + zz[zzOff + 5] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_6; + zz[zzOff + 6] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_7; + zz[zzOff + 7] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_8; + zz[zzOff + 8] = (w << 1) | c; + c = w >> 31; + w = zz[zzOff + 9] + (uint)(zz_8 >> 32); + zz[zzOff + 9] = (w << 1) | c; + } + + public static int Sub(uint[] x, uint[] y, uint[] z) + { + long c = 0; + c += (long)x[0] - y[0]; + z[0] = (uint)c; + c >>= 32; + c += (long)x[1] - y[1]; + z[1] = (uint)c; + c >>= 32; + c += (long)x[2] - y[2]; + z[2] = (uint)c; + c >>= 32; + c += (long)x[3] - y[3]; + z[3] = (uint)c; + c >>= 32; + c += (long)x[4] - y[4]; + z[4] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int Sub(uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + long c = 0; + c += (long)x[xOff + 0] - y[yOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (long)x[xOff + 1] - y[yOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += (long)x[xOff + 2] - y[yOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += (long)x[xOff + 3] - y[yOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + c += (long)x[xOff + 4] - y[yOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int SubBothFrom(uint[] x, uint[] y, uint[] z) + { + long c = 0; + c += (long)z[0] - x[0] - y[0]; + z[0] = (uint)c; + c >>= 32; + c += (long)z[1] - x[1] - y[1]; + z[1] = (uint)c; + c >>= 32; + c += (long)z[2] - x[2] - y[2]; + z[2] = (uint)c; + c >>= 32; + c += (long)z[3] - x[3] - y[3]; + z[3] = (uint)c; + c >>= 32; + c += (long)z[4] - x[4] - y[4]; + z[4] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int SubFrom(uint[] x, uint[] z) + { + long c = 0; + c += (long)z[0] - x[0]; + z[0] = (uint)c; + c >>= 32; + c += (long)z[1] - x[1]; + z[1] = (uint)c; + c >>= 32; + c += (long)z[2] - x[2]; + z[2] = (uint)c; + c >>= 32; + c += (long)z[3] - x[3]; + z[3] = (uint)c; + c >>= 32; + c += (long)z[4] - x[4]; + z[4] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int SubFrom(uint[] x, int xOff, uint[] z, int zOff) + { + long c = 0; + c += (long)z[zOff + 0] - x[xOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (long)z[zOff + 1] - x[xOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += (long)z[zOff + 2] - x[xOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += (long)z[zOff + 3] - x[xOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + c += (long)z[zOff + 4] - x[xOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + return (int)c; + } + + public static BigInteger ToBigInteger(uint[] x) + { + byte[] bs = new byte[20]; + for (int i = 0; i < 5; ++i) + { + uint x_i = x[i]; + if (x_i != 0) + { + Pack.UInt32_To_BE(x_i, bs, (4 - i) << 2); + } + } + return new BigInteger(1, bs); + } + + public static void Zero(uint[] z) + { + z[0] = 0; + z[1] = 0; + z[2] = 0; + z[3] = 0; + z[4] = 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat160.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat160.cs.meta new file mode 100644 index 000000000..536f5b568 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat160.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5863c232c0b5d464485955e74011d938 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat192.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat192.cs new file mode 100644 index 000000000..09dcf6516 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat192.cs @@ -0,0 +1,1041 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw +{ + internal abstract class Nat192 + { + private const ulong M = 0xFFFFFFFFUL; + + public static uint Add(uint[] x, uint[] y, uint[] z) + { + ulong c = 0; + c += (ulong)x[0] + y[0]; + z[0] = (uint)c; + c >>= 32; + c += (ulong)x[1] + y[1]; + z[1] = (uint)c; + c >>= 32; + c += (ulong)x[2] + y[2]; + z[2] = (uint)c; + c >>= 32; + c += (ulong)x[3] + y[3]; + z[3] = (uint)c; + c >>= 32; + c += (ulong)x[4] + y[4]; + z[4] = (uint)c; + c >>= 32; + c += (ulong)x[5] + y[5]; + z[5] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddBothTo(uint[] x, uint[] y, uint[] z) + { + ulong c = 0; + c += (ulong)x[0] + y[0] + z[0]; + z[0] = (uint)c; + c >>= 32; + c += (ulong)x[1] + y[1] + z[1]; + z[1] = (uint)c; + c >>= 32; + c += (ulong)x[2] + y[2] + z[2]; + z[2] = (uint)c; + c >>= 32; + c += (ulong)x[3] + y[3] + z[3]; + z[3] = (uint)c; + c >>= 32; + c += (ulong)x[4] + y[4] + z[4]; + z[4] = (uint)c; + c >>= 32; + c += (ulong)x[5] + y[5] + z[5]; + z[5] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddTo(uint[] x, uint[] z) + { + ulong c = 0; + c += (ulong)x[0] + z[0]; + z[0] = (uint)c; + c >>= 32; + c += (ulong)x[1] + z[1]; + z[1] = (uint)c; + c >>= 32; + c += (ulong)x[2] + z[2]; + z[2] = (uint)c; + c >>= 32; + c += (ulong)x[3] + z[3]; + z[3] = (uint)c; + c >>= 32; + c += (ulong)x[4] + z[4]; + z[4] = (uint)c; + c >>= 32; + c += (ulong)x[5] + z[5]; + z[5] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddTo(uint[] x, int xOff, uint[] z, int zOff, uint cIn) + { + ulong c = cIn; + c += (ulong)x[xOff + 0] + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 1] + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 2] + z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 3] + z[zOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 4] + z[zOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 5] + z[zOff + 5]; + z[zOff + 5] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddToEachOther(uint[] u, int uOff, uint[] v, int vOff) + { + ulong c = 0; + c += (ulong)u[uOff + 0] + v[vOff + 0]; + u[uOff + 0] = (uint)c; + v[vOff + 0] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 1] + v[vOff + 1]; + u[uOff + 1] = (uint)c; + v[vOff + 1] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 2] + v[vOff + 2]; + u[uOff + 2] = (uint)c; + v[vOff + 2] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 3] + v[vOff + 3]; + u[uOff + 3] = (uint)c; + v[vOff + 3] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 4] + v[vOff + 4]; + u[uOff + 4] = (uint)c; + v[vOff + 4] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 5] + v[vOff + 5]; + u[uOff + 5] = (uint)c; + v[vOff + 5] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static void Copy(uint[] x, uint[] z) + { + z[0] = x[0]; + z[1] = x[1]; + z[2] = x[2]; + z[3] = x[3]; + z[4] = x[4]; + z[5] = x[5]; + } + + public static void Copy(uint[] x, int xOff, uint[] z, int zOff) + { + z[zOff + 0] = x[xOff + 0]; + z[zOff + 1] = x[xOff + 1]; + z[zOff + 2] = x[xOff + 2]; + z[zOff + 3] = x[xOff + 3]; + z[zOff + 4] = x[xOff + 4]; + z[zOff + 5] = x[xOff + 5]; + } + + public static void Copy64(ulong[] x, ulong[] z) + { + z[0] = x[0]; + z[1] = x[1]; + z[2] = x[2]; + } + + public static void Copy64(ulong[] x, int xOff, ulong[] z, int zOff) + { + z[zOff + 0] = x[xOff + 0]; + z[zOff + 1] = x[xOff + 1]; + z[zOff + 2] = x[xOff + 2]; + } + + public static uint[] Create() + { + return new uint[6]; + } + + public static ulong[] Create64() + { + return new ulong[3]; + } + + public static uint[] CreateExt() + { + return new uint[12]; + } + + public static ulong[] CreateExt64() + { + return new ulong[6]; + } + + public static bool Diff(uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + bool pos = Gte(x, xOff, y, yOff); + if (pos) + { + Sub(x, xOff, y, yOff, z, zOff); + } + else + { + Sub(y, yOff, x, xOff, z, zOff); + } + return pos; + } + + public static bool Eq(uint[] x, uint[] y) + { + for (int i = 5; i >= 0; --i) + { + if (x[i] != y[i]) + return false; + } + return true; + } + + public static bool Eq64(ulong[] x, ulong[] y) + { + for (int i = 2; i >= 0; --i) + { + if (x[i] != y[i]) + { + return false; + } + } + return true; + } + + public static uint GetBit(uint[] x, int bit) + { + if (bit == 0) + { + return x[0] & 1; + } + int w = bit >> 5; + if (w < 0 || w >= 6) + { + return 0; + } + int b = bit & 31; + return (x[w] >> b) & 1; + } + + public static bool Gte(uint[] x, uint[] y) + { + for (int i = 5; i >= 0; --i) + { + uint x_i = x[i], y_i = y[i]; + if (x_i < y_i) + return false; + if (x_i > y_i) + return true; + } + return true; + } + + public static bool Gte(uint[] x, int xOff, uint[] y, int yOff) + { + for (int i = 5; i >= 0; --i) + { + uint x_i = x[xOff + i], y_i = y[yOff + i]; + if (x_i < y_i) + return false; + if (x_i > y_i) + return true; + } + return true; + } + + public static bool IsOne(uint[] x) + { + if (x[0] != 1) + { + return false; + } + for (int i = 1; i < 6; ++i) + { + if (x[i] != 0) + { + return false; + } + } + return true; + } + + public static bool IsOne64(ulong[] x) + { + if (x[0] != 1UL) + { + return false; + } + for (int i = 1; i < 3; ++i) + { + if (x[i] != 0UL) + { + return false; + } + } + return true; + } + + public static bool IsZero(uint[] x) + { + for (int i = 0; i < 6; ++i) + { + if (x[i] != 0) + { + return false; + } + } + return true; + } + + public static bool IsZero64(ulong[] x) + { + for (int i = 0; i < 3; ++i) + { + if (x[i] != 0UL) + { + return false; + } + } + return true; + } + + public static void Mul(uint[] x, uint[] y, uint[] zz) + { + ulong y_0 = y[0]; + ulong y_1 = y[1]; + ulong y_2 = y[2]; + ulong y_3 = y[3]; + ulong y_4 = y[4]; + ulong y_5 = y[5]; + + { + ulong c = 0, x_0 = x[0]; + c += x_0 * y_0; + zz[0] = (uint)c; + c >>= 32; + c += x_0 * y_1; + zz[1] = (uint)c; + c >>= 32; + c += x_0 * y_2; + zz[2] = (uint)c; + c >>= 32; + c += x_0 * y_3; + zz[3] = (uint)c; + c >>= 32; + c += x_0 * y_4; + zz[4] = (uint)c; + c >>= 32; + c += x_0 * y_5; + zz[5] = (uint)c; + c >>= 32; + zz[6] = (uint)c; + } + + for (int i = 1; i < 6; ++i) + { + ulong c = 0, x_i = x[i]; + c += x_i * y_0 + zz[i + 0]; + zz[i + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[i + 1]; + zz[i + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[i + 2]; + zz[i + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[i + 3]; + zz[i + 3] = (uint)c; + c >>= 32; + c += x_i * y_4 + zz[i + 4]; + zz[i + 4] = (uint)c; + c >>= 32; + c += x_i * y_5 + zz[i + 5]; + zz[i + 5] = (uint)c; + c >>= 32; + zz[i + 6] = (uint)c; + } + } + + public static void Mul(uint[] x, int xOff, uint[] y, int yOff, uint[] zz, int zzOff) + { + ulong y_0 = y[yOff + 0]; + ulong y_1 = y[yOff + 1]; + ulong y_2 = y[yOff + 2]; + ulong y_3 = y[yOff + 3]; + ulong y_4 = y[yOff + 4]; + ulong y_5 = y[yOff + 5]; + + { + ulong c = 0, x_0 = x[xOff + 0]; + c += x_0 * y_0; + zz[zzOff + 0] = (uint)c; + c >>= 32; + c += x_0 * y_1; + zz[zzOff + 1] = (uint)c; + c >>= 32; + c += x_0 * y_2; + zz[zzOff + 2] = (uint)c; + c >>= 32; + c += x_0 * y_3; + zz[zzOff + 3] = (uint)c; + c >>= 32; + c += x_0 * y_4; + zz[zzOff + 4] = (uint)c; + c >>= 32; + c += x_0 * y_5; + zz[zzOff + 5] = (uint)c; + c >>= 32; + zz[zzOff + 6] = (uint)c; + } + + for (int i = 1; i < 6; ++i) + { + ++zzOff; + ulong c = 0, x_i = x[xOff + i]; + c += x_i * y_0 + zz[zzOff + 0]; + zz[zzOff + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[zzOff + 1]; + zz[zzOff + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[zzOff + 2]; + zz[zzOff + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[zzOff + 3]; + zz[zzOff + 3] = (uint)c; + c >>= 32; + c += x_i * y_4 + zz[zzOff + 4]; + zz[zzOff + 4] = (uint)c; + c >>= 32; + c += x_i * y_5 + zz[zzOff + 5]; + zz[zzOff + 5] = (uint)c; + c >>= 32; + zz[zzOff + 6] = (uint)c; + } + } + + public static uint MulAddTo(uint[] x, uint[] y, uint[] zz) + { + ulong y_0 = y[0]; + ulong y_1 = y[1]; + ulong y_2 = y[2]; + ulong y_3 = y[3]; + ulong y_4 = y[4]; + ulong y_5 = y[5]; + + ulong zc = 0; + for (int i = 0; i < 6; ++i) + { + ulong c = 0, x_i = x[i]; + c += x_i * y_0 + zz[i + 0]; + zz[i + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[i + 1]; + zz[i + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[i + 2]; + zz[i + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[i + 3]; + zz[i + 3] = (uint)c; + c >>= 32; + c += x_i * y_4 + zz[i + 4]; + zz[i + 4] = (uint)c; + c >>= 32; + c += x_i * y_5 + zz[i + 5]; + zz[i + 5] = (uint)c; + c >>= 32; + + zc += c + zz[i + 6]; + zz[i + 6] = (uint)zc; + zc >>= 32; + } + return (uint)zc; + } + + public static uint MulAddTo(uint[] x, int xOff, uint[] y, int yOff, uint[] zz, int zzOff) + { + ulong y_0 = y[yOff + 0]; + ulong y_1 = y[yOff + 1]; + ulong y_2 = y[yOff + 2]; + ulong y_3 = y[yOff + 3]; + ulong y_4 = y[yOff + 4]; + ulong y_5 = y[yOff + 5]; + + ulong zc = 0; + for (int i = 0; i < 6; ++i) + { + ulong c = 0, x_i = x[xOff + i]; + c += x_i * y_0 + zz[zzOff + 0]; + zz[zzOff + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[zzOff + 1]; + zz[zzOff + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[zzOff + 2]; + zz[zzOff + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[zzOff + 3]; + zz[zzOff + 3] = (uint)c; + c >>= 32; + c += x_i * y_4 + zz[zzOff + 4]; + zz[zzOff + 4] = (uint)c; + c >>= 32; + c += x_i * y_5 + zz[zzOff + 5]; + zz[zzOff + 5] = (uint)c; + c >>= 32; + + zc += c + zz[zzOff + 6]; + zz[zzOff + 6] = (uint)zc; + zc >>= 32; + ++zzOff; + } + return (uint)zc; + } + + public static ulong Mul33Add(uint w, uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + Debug.Assert(w >> 31 == 0); + + ulong c = 0, wVal = w; + ulong x0 = x[xOff + 0]; + c += wVal * x0 + y[yOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + ulong x1 = x[xOff + 1]; + c += wVal * x1 + x0 + y[yOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + ulong x2 = x[xOff + 2]; + c += wVal * x2 + x1 + y[yOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + ulong x3 = x[xOff + 3]; + c += wVal * x3 + x2 + y[yOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + ulong x4 = x[xOff + 4]; + c += wVal * x4 + x3 + y[yOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + ulong x5 = x[xOff + 5]; + c += wVal * x5 + x4 + y[yOff + 5]; + z[zOff + 5] = (uint)c; + c >>= 32; + c += x5; + return c; + } + + public static uint MulWordAddExt(uint x, uint[] yy, int yyOff, uint[] zz, int zzOff) + { + Debug.Assert(yyOff <= 6); + Debug.Assert(zzOff <= 6); + ulong c = 0, xVal = x; + c += xVal * yy[yyOff + 0] + zz[zzOff + 0]; + zz[zzOff + 0] = (uint)c; + c >>= 32; + c += xVal * yy[yyOff + 1] + zz[zzOff + 1]; + zz[zzOff + 1] = (uint)c; + c >>= 32; + c += xVal * yy[yyOff + 2] + zz[zzOff + 2]; + zz[zzOff + 2] = (uint)c; + c >>= 32; + c += xVal * yy[yyOff + 3] + zz[zzOff + 3]; + zz[zzOff + 3] = (uint)c; + c >>= 32; + c += xVal * yy[yyOff + 4] + zz[zzOff + 4]; + zz[zzOff + 4] = (uint)c; + c >>= 32; + c += xVal * yy[yyOff + 5] + zz[zzOff + 5]; + zz[zzOff + 5] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint Mul33DWordAdd(uint x, ulong y, uint[] z, int zOff) + { + Debug.Assert(x >> 31 == 0); + Debug.Assert(zOff <= 2); + ulong c = 0, xVal = x; + ulong y00 = y & M; + c += xVal * y00 + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + ulong y01 = y >> 32; + c += xVal * y01 + y00 + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += y01 + z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += z[zOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + return c == 0 ? 0 : Nat.IncAt(6, z, zOff, 4); + } + + public static uint Mul33WordAdd(uint x, uint y, uint[] z, int zOff) + { + Debug.Assert(x >> 31 == 0); + Debug.Assert(zOff <=3); + ulong c = 0, yVal = y; + c += yVal * x + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += yVal + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + return c == 0 ? 0 : Nat.IncAt(6, z, zOff, 3); + } + + public static uint MulWordDwordAdd(uint x, ulong y, uint[] z, int zOff) + { + Debug.Assert(zOff <= 3); + ulong c = 0, xVal = x; + c += xVal * y + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += xVal * (y >> 32) + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + return c == 0 ? 0 : Nat.IncAt(6, z, zOff, 3); + } + + public static uint MulWord(uint x, uint[] y, uint[] z, int zOff) + { + ulong c = 0, xVal = x; + int i = 0; + do + { + c += xVal * y[i]; + z[zOff + i] = (uint)c; + c >>= 32; + } + while (++i < 6); + return (uint)c; + } + + public static void Square(uint[] x, uint[] zz) + { + ulong x_0 = x[0]; + ulong zz_1; + + uint c = 0, w; + { + int i = 5, j = 12; + do + { + ulong xVal = x[i--]; + ulong p = xVal * xVal; + zz[--j] = (c << 31) | (uint)(p >> 33); + zz[--j] = (uint)(p >> 1); + c = (uint)p; + } + while (i > 0); + + { + ulong p = x_0 * x_0; + zz_1 = (ulong)(c << 31) | (p >> 33); + zz[0] = (uint)p; + c = (uint)(p >> 32) & 1; + } + } + + ulong x_1 = x[1]; + ulong zz_2 = zz[2]; + + { + zz_1 += x_1 * x_0; + w = (uint)zz_1; + zz[1] = (w << 1) | c; + c = w >> 31; + zz_2 += zz_1 >> 32; + } + + ulong x_2 = x[2]; + ulong zz_3 = zz[3]; + ulong zz_4 = zz[4]; + { + zz_2 += x_2 * x_0; + w = (uint)zz_2; + zz[2] = (w << 1) | c; + c = w >> 31; + zz_3 += (zz_2 >> 32) + x_2 * x_1; + zz_4 += zz_3 >> 32; + zz_3 &= M; + } + + ulong x_3 = x[3]; + ulong zz_5 = zz[5] + (zz_4 >> 32); zz_4 &= M; + ulong zz_6 = zz[6] + (zz_5 >> 32); zz_5 &= M; + { + zz_3 += x_3 * x_0; + w = (uint)zz_3; + zz[3] = (w << 1) | c; + c = w >> 31; + zz_4 += (zz_3 >> 32) + x_3 * x_1; + zz_5 += (zz_4 >> 32) + x_3 * x_2; + zz_4 &= M; + zz_6 += zz_5 >> 32; + zz_5 &= M; + } + + ulong x_4 = x[4]; + ulong zz_7 = zz[7] + (zz_6 >> 32); zz_6 &= M; + ulong zz_8 = zz[8] + (zz_7 >> 32); zz_7 &= M; + { + zz_4 += x_4 * x_0; + w = (uint)zz_4; + zz[4] = (w << 1) | c; + c = w >> 31; + zz_5 += (zz_4 >> 32) + x_4 * x_1; + zz_6 += (zz_5 >> 32) + x_4 * x_2; + zz_5 &= M; + zz_7 += (zz_6 >> 32) + x_4 * x_3; + zz_6 &= M; + zz_8 += zz_7 >> 32; + zz_7 &= M; + } + + ulong x_5 = x[5]; + ulong zz_9 = zz[9] + (zz_8 >> 32); zz_8 &= M; + ulong zz_10 = zz[10] + (zz_9 >> 32); zz_9 &= M; + { + zz_5 += x_5 * x_0; + w = (uint)zz_5; + zz[5] = (w << 1) | c; + c = w >> 31; + zz_6 += (zz_5 >> 32) + x_5 * x_1; + zz_7 += (zz_6 >> 32) + x_5 * x_2; + zz_8 += (zz_7 >> 32) + x_5 * x_3; + zz_9 += (zz_8 >> 32) + x_5 * x_4; + zz_10 += zz_9 >> 32; + } + + w = (uint)zz_6; + zz[6] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_7; + zz[7] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_8; + zz[8] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_9; + zz[9] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_10; + zz[10] = (w << 1) | c; + c = w >> 31; + w = zz[11] + (uint)(zz_10 >> 32); + zz[11] = (w << 1) | c; + } + + public static void Square(uint[] x, int xOff, uint[] zz, int zzOff) + { + ulong x_0 = x[xOff + 0]; + ulong zz_1; + + uint c = 0, w; + { + int i = 5, j = 12; + do + { + ulong xVal = x[xOff + i--]; + ulong p = xVal * xVal; + zz[zzOff + --j] = (c << 31) | (uint)(p >> 33); + zz[zzOff + --j] = (uint)(p >> 1); + c = (uint)p; + } + while (i > 0); + + { + ulong p = x_0 * x_0; + zz_1 = (ulong)(c << 31) | (p >> 33); + zz[zzOff + 0] = (uint)p; + c = (uint)(p >> 32) & 1; + } + } + + ulong x_1 = x[xOff + 1]; + ulong zz_2 = zz[zzOff + 2]; + + { + zz_1 += x_1 * x_0; + w = (uint)zz_1; + zz[zzOff + 1] = (w << 1) | c; + c = w >> 31; + zz_2 += zz_1 >> 32; + } + + ulong x_2 = x[xOff + 2]; + ulong zz_3 = zz[zzOff + 3]; + ulong zz_4 = zz[zzOff + 4]; + { + zz_2 += x_2 * x_0; + w = (uint)zz_2; + zz[zzOff + 2] = (w << 1) | c; + c = w >> 31; + zz_3 += (zz_2 >> 32) + x_2 * x_1; + zz_4 += zz_3 >> 32; + zz_3 &= M; + } + + ulong x_3 = x[xOff + 3]; + ulong zz_5 = zz[zzOff + 5] + (zz_4 >> 32); zz_4 &= M; + ulong zz_6 = zz[zzOff + 6] + (zz_5 >> 32); zz_5 &= M; + { + zz_3 += x_3 * x_0; + w = (uint)zz_3; + zz[zzOff + 3] = (w << 1) | c; + c = w >> 31; + zz_4 += (zz_3 >> 32) + x_3 * x_1; + zz_5 += (zz_4 >> 32) + x_3 * x_2; + zz_4 &= M; + zz_6 += zz_5 >> 32; + zz_5 &= M; + } + + ulong x_4 = x[xOff + 4]; + ulong zz_7 = zz[zzOff + 7] + (zz_6 >> 32); zz_6 &= M; + ulong zz_8 = zz[zzOff + 8] + (zz_7 >> 32); zz_7 &= M; + { + zz_4 += x_4 * x_0; + w = (uint)zz_4; + zz[zzOff + 4] = (w << 1) | c; + c = w >> 31; + zz_5 += (zz_4 >> 32) + x_4 * x_1; + zz_6 += (zz_5 >> 32) + x_4 * x_2; + zz_5 &= M; + zz_7 += (zz_6 >> 32) + x_4 * x_3; + zz_6 &= M; + zz_8 += zz_7 >> 32; + zz_7 &= M; + } + + ulong x_5 = x[xOff + 5]; + ulong zz_9 = zz[zzOff + 9] + (zz_8 >> 32); zz_8 &= M; + ulong zz_10 = zz[zzOff + 10] + (zz_9 >> 32); zz_9 &= M; + { + zz_5 += x_5 * x_0; + w = (uint)zz_5; + zz[zzOff + 5] = (w << 1) | c; + c = w >> 31; + zz_6 += (zz_5 >> 32) + x_5 * x_1; + zz_7 += (zz_6 >> 32) + x_5 * x_2; + zz_8 += (zz_7 >> 32) + x_5 * x_3; + zz_9 += (zz_8 >> 32) + x_5 * x_4; + zz_10 += zz_9 >> 32; + } + + w = (uint)zz_6; + zz[zzOff + 6] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_7; + zz[zzOff + 7] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_8; + zz[zzOff + 8] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_9; + zz[zzOff + 9] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_10; + zz[zzOff + 10] = (w << 1) | c; + c = w >> 31; + w = zz[zzOff + 11] + (uint)(zz_10 >> 32); + zz[zzOff + 11] = (w << 1) | c; + } + + public static int Sub(uint[] x, uint[] y, uint[] z) + { + long c = 0; + c += (long)x[0] - y[0]; + z[0] = (uint)c; + c >>= 32; + c += (long)x[1] - y[1]; + z[1] = (uint)c; + c >>= 32; + c += (long)x[2] - y[2]; + z[2] = (uint)c; + c >>= 32; + c += (long)x[3] - y[3]; + z[3] = (uint)c; + c >>= 32; + c += (long)x[4] - y[4]; + z[4] = (uint)c; + c >>= 32; + c += (long)x[5] - y[5]; + z[5] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int Sub(uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + long c = 0; + c += (long)x[xOff + 0] - y[yOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (long)x[xOff + 1] - y[yOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += (long)x[xOff + 2] - y[yOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += (long)x[xOff + 3] - y[yOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + c += (long)x[xOff + 4] - y[yOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + c += (long)x[xOff + 5] - y[yOff + 5]; + z[zOff + 5] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int SubBothFrom(uint[] x, uint[] y, uint[] z) + { + long c = 0; + c += (long)z[0] - x[0] - y[0]; + z[0] = (uint)c; + c >>= 32; + c += (long)z[1] - x[1] - y[1]; + z[1] = (uint)c; + c >>= 32; + c += (long)z[2] - x[2] - y[2]; + z[2] = (uint)c; + c >>= 32; + c += (long)z[3] - x[3] - y[3]; + z[3] = (uint)c; + c >>= 32; + c += (long)z[4] - x[4] - y[4]; + z[4] = (uint)c; + c >>= 32; + c += (long)z[5] - x[5] - y[5]; + z[5] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int SubFrom(uint[] x, uint[] z) + { + long c = 0; + c += (long)z[0] - x[0]; + z[0] = (uint)c; + c >>= 32; + c += (long)z[1] - x[1]; + z[1] = (uint)c; + c >>= 32; + c += (long)z[2] - x[2]; + z[2] = (uint)c; + c >>= 32; + c += (long)z[3] - x[3]; + z[3] = (uint)c; + c >>= 32; + c += (long)z[4] - x[4]; + z[4] = (uint)c; + c >>= 32; + c += (long)z[5] - x[5]; + z[5] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int SubFrom(uint[] x, int xOff, uint[] z, int zOff) + { + long c = 0; + c += (long)z[zOff + 0] - x[xOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (long)z[zOff + 1] - x[xOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += (long)z[zOff + 2] - x[xOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += (long)z[zOff + 3] - x[xOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + c += (long)z[zOff + 4] - x[xOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + c += (long)z[zOff + 5] - x[xOff + 5]; + z[zOff + 5] = (uint)c; + c >>= 32; + return (int)c; + } + + public static BigInteger ToBigInteger(uint[] x) + { + byte[] bs = new byte[24]; + for (int i = 0; i < 6; ++i) + { + uint x_i = x[i]; + if (x_i != 0) + { + Pack.UInt32_To_BE(x_i, bs, (5 - i) << 2); + } + } + return new BigInteger(1, bs); + } + + public static BigInteger ToBigInteger64(ulong[] x) + { + byte[] bs = new byte[24]; + for (int i = 0; i < 3; ++i) + { + ulong x_i = x[i]; + if (x_i != 0L) + { + Pack.UInt64_To_BE(x_i, bs, (2 - i) << 3); + } + } + return new BigInteger(1, bs); + } + + public static void Zero(uint[] z) + { + z[0] = 0; + z[1] = 0; + z[2] = 0; + z[3] = 0; + z[4] = 0; + z[5] = 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat192.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat192.cs.meta new file mode 100644 index 000000000..9f1d17a15 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat192.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5068ae0f638a4594eb28d3804c58cb91 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat224.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat224.cs new file mode 100644 index 000000000..b57f569cb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat224.cs @@ -0,0 +1,1178 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw +{ + internal abstract class Nat224 + { + private const ulong M = 0xFFFFFFFFUL; + + public static uint Add(uint[] x, uint[] y, uint[] z) + { + ulong c = 0; + c += (ulong)x[0] + y[0]; + z[0] = (uint)c; + c >>= 32; + c += (ulong)x[1] + y[1]; + z[1] = (uint)c; + c >>= 32; + c += (ulong)x[2] + y[2]; + z[2] = (uint)c; + c >>= 32; + c += (ulong)x[3] + y[3]; + z[3] = (uint)c; + c >>= 32; + c += (ulong)x[4] + y[4]; + z[4] = (uint)c; + c >>= 32; + c += (ulong)x[5] + y[5]; + z[5] = (uint)c; + c >>= 32; + c += (ulong)x[6] + y[6]; + z[6] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint Add(uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + ulong c = 0; + c += (ulong)x[xOff + 0] + y[yOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 1] + y[yOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 2] + y[yOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 3] + y[yOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 4] + y[yOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 5] + y[yOff + 5]; + z[zOff + 5] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 6] + y[yOff + 6]; + z[zOff + 6] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddBothTo(uint[] x, uint[] y, uint[] z) + { + ulong c = 0; + c += (ulong)x[0] + y[0] + z[0]; + z[0] = (uint)c; + c >>= 32; + c += (ulong)x[1] + y[1] + z[1]; + z[1] = (uint)c; + c >>= 32; + c += (ulong)x[2] + y[2] + z[2]; + z[2] = (uint)c; + c >>= 32; + c += (ulong)x[3] + y[3] + z[3]; + z[3] = (uint)c; + c >>= 32; + c += (ulong)x[4] + y[4] + z[4]; + z[4] = (uint)c; + c >>= 32; + c += (ulong)x[5] + y[5] + z[5]; + z[5] = (uint)c; + c >>= 32; + c += (ulong)x[6] + y[6] + z[6]; + z[6] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddBothTo(uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + ulong c = 0; + c += (ulong)x[xOff + 0] + y[yOff + 0] + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 1] + y[yOff + 1] + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 2] + y[yOff + 2] + z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 3] + y[yOff + 3] + z[zOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 4] + y[yOff + 4] + z[zOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 5] + y[yOff + 5] + z[zOff + 5]; + z[zOff + 5] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 6] + y[yOff + 6] + z[zOff + 6]; + z[zOff + 6] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddTo(uint[] x, uint[] z) + { + ulong c = 0; + c += (ulong)x[0] + z[0]; + z[0] = (uint)c; + c >>= 32; + c += (ulong)x[1] + z[1]; + z[1] = (uint)c; + c >>= 32; + c += (ulong)x[2] + z[2]; + z[2] = (uint)c; + c >>= 32; + c += (ulong)x[3] + z[3]; + z[3] = (uint)c; + c >>= 32; + c += (ulong)x[4] + z[4]; + z[4] = (uint)c; + c >>= 32; + c += (ulong)x[5] + z[5]; + z[5] = (uint)c; + c >>= 32; + c += (ulong)x[6] + z[6]; + z[6] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddTo(uint[] x, int xOff, uint[] z, int zOff, uint cIn) + { + ulong c = cIn; + c += (ulong)x[xOff + 0] + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 1] + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 2] + z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 3] + z[zOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 4] + z[zOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 5] + z[zOff + 5]; + z[zOff + 5] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 6] + z[zOff + 6]; + z[zOff + 6] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddToEachOther(uint[] u, int uOff, uint[] v, int vOff) + { + ulong c = 0; + c += (ulong)u[uOff + 0] + v[vOff + 0]; + u[uOff + 0] = (uint)c; + v[vOff + 0] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 1] + v[vOff + 1]; + u[uOff + 1] = (uint)c; + v[vOff + 1] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 2] + v[vOff + 2]; + u[uOff + 2] = (uint)c; + v[vOff + 2] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 3] + v[vOff + 3]; + u[uOff + 3] = (uint)c; + v[vOff + 3] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 4] + v[vOff + 4]; + u[uOff + 4] = (uint)c; + v[vOff + 4] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 5] + v[vOff + 5]; + u[uOff + 5] = (uint)c; + v[vOff + 5] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 6] + v[vOff + 6]; + u[uOff + 6] = (uint)c; + v[vOff + 6] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static void Copy(uint[] x, uint[] z) + { + z[0] = x[0]; + z[1] = x[1]; + z[2] = x[2]; + z[3] = x[3]; + z[4] = x[4]; + z[5] = x[5]; + z[6] = x[6]; + } + + public static void Copy(uint[] x, int xOff, uint[] z, int zOff) + { + z[zOff + 0] = x[xOff + 0]; + z[zOff + 1] = x[xOff + 1]; + z[zOff + 2] = x[xOff + 2]; + z[zOff + 3] = x[xOff + 3]; + z[zOff + 4] = x[xOff + 4]; + z[zOff + 5] = x[xOff + 5]; + z[zOff + 6] = x[xOff + 6]; + } + + public static uint[] Create() + { + return new uint[7]; + } + + public static uint[] CreateExt() + { + return new uint[14]; + } + + public static bool Diff(uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + bool pos = Gte(x, xOff, y, yOff); + if (pos) + { + Sub(x, xOff, y, yOff, z, zOff); + } + else + { + Sub(y, yOff, x, xOff, z, zOff); + } + return pos; + } + + public static bool Eq(uint[] x, uint[] y) + { + for (int i = 6; i >= 0; --i) + { + if (x[i] != y[i]) + return false; + } + return true; + } + + public static uint GetBit(uint[] x, int bit) + { + if (bit == 0) + { + return x[0] & 1; + } + int w = bit >> 5; + if (w < 0 || w >= 7) + { + return 0; + } + int b = bit & 31; + return (x[w] >> b) & 1; + } + + public static bool Gte(uint[] x, uint[] y) + { + for (int i = 6; i >= 0; --i) + { + uint x_i = x[i], y_i = y[i]; + if (x_i < y_i) + return false; + if (x_i > y_i) + return true; + } + return true; + } + + public static bool Gte(uint[] x, int xOff, uint[] y, int yOff) + { + for (int i = 6; i >= 0; --i) + { + uint x_i = x[xOff + i], y_i = y[yOff + i]; + if (x_i < y_i) + return false; + if (x_i > y_i) + return true; + } + return true; + } + + public static bool IsOne(uint[] x) + { + if (x[0] != 1) + { + return false; + } + for (int i = 1; i < 7; ++i) + { + if (x[i] != 0) + { + return false; + } + } + return true; + } + + public static bool IsZero(uint[] x) + { + for (int i = 0; i < 7; ++i) + { + if (x[i] != 0) + { + return false; + } + } + return true; + } + + public static void Mul(uint[] x, uint[] y, uint[] zz) + { + ulong y_0 = y[0]; + ulong y_1 = y[1]; + ulong y_2 = y[2]; + ulong y_3 = y[3]; + ulong y_4 = y[4]; + ulong y_5 = y[5]; + ulong y_6 = y[6]; + + { + ulong c = 0, x_0 = x[0]; + c += x_0 * y_0; + zz[0] = (uint)c; + c >>= 32; + c += x_0 * y_1; + zz[1] = (uint)c; + c >>= 32; + c += x_0 * y_2; + zz[2] = (uint)c; + c >>= 32; + c += x_0 * y_3; + zz[3] = (uint)c; + c >>= 32; + c += x_0 * y_4; + zz[4] = (uint)c; + c >>= 32; + c += x_0 * y_5; + zz[5] = (uint)c; + c >>= 32; + c += x_0 * y_6; + zz[6] = (uint)c; + c >>= 32; + zz[7] = (uint)c; + } + + for (int i = 1; i < 7; ++i) + { + ulong c = 0, x_i = x[i]; + c += x_i * y_0 + zz[i + 0]; + zz[i + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[i + 1]; + zz[i + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[i + 2]; + zz[i + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[i + 3]; + zz[i + 3] = (uint)c; + c >>= 32; + c += x_i * y_4 + zz[i + 4]; + zz[i + 4] = (uint)c; + c >>= 32; + c += x_i * y_5 + zz[i + 5]; + zz[i + 5] = (uint)c; + c >>= 32; + c += x_i * y_6 + zz[i + 6]; + zz[i + 6] = (uint)c; + c >>= 32; + zz[i + 7] = (uint)c; + } + } + + public static void Mul(uint[] x, int xOff, uint[] y, int yOff, uint[] zz, int zzOff) + { + ulong y_0 = y[yOff + 0]; + ulong y_1 = y[yOff + 1]; + ulong y_2 = y[yOff + 2]; + ulong y_3 = y[yOff + 3]; + ulong y_4 = y[yOff + 4]; + ulong y_5 = y[yOff + 5]; + ulong y_6 = y[yOff + 6]; + + { + ulong c = 0, x_0 = x[xOff + 0]; + c += x_0 * y_0; + zz[zzOff + 0] = (uint)c; + c >>= 32; + c += x_0 * y_1; + zz[zzOff + 1] = (uint)c; + c >>= 32; + c += x_0 * y_2; + zz[zzOff + 2] = (uint)c; + c >>= 32; + c += x_0 * y_3; + zz[zzOff + 3] = (uint)c; + c >>= 32; + c += x_0 * y_4; + zz[zzOff + 4] = (uint)c; + c >>= 32; + c += x_0 * y_5; + zz[zzOff + 5] = (uint)c; + c >>= 32; + c += x_0 * y_6; + zz[zzOff + 6] = (uint)c; + c >>= 32; + zz[zzOff + 7] = (uint)c; + } + + for (int i = 1; i < 7; ++i) + { + ++zzOff; + ulong c = 0, x_i = x[xOff + i]; + c += x_i * y_0 + zz[zzOff + 0]; + zz[zzOff + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[zzOff + 1]; + zz[zzOff + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[zzOff + 2]; + zz[zzOff + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[zzOff + 3]; + zz[zzOff + 3] = (uint)c; + c >>= 32; + c += x_i * y_4 + zz[zzOff + 4]; + zz[zzOff + 4] = (uint)c; + c >>= 32; + c += x_i * y_5 + zz[zzOff + 5]; + zz[zzOff + 5] = (uint)c; + c >>= 32; + c += x_i * y_6 + zz[zzOff + 6]; + zz[zzOff + 6] = (uint)c; + c >>= 32; + zz[zzOff + 7] = (uint)c; + } + } + + public static uint MulAddTo(uint[] x, uint[] y, uint[] zz) + { + ulong y_0 = y[0]; + ulong y_1 = y[1]; + ulong y_2 = y[2]; + ulong y_3 = y[3]; + ulong y_4 = y[4]; + ulong y_5 = y[5]; + ulong y_6 = y[6]; + + ulong zc = 0; + for (int i = 0; i < 7; ++i) + { + ulong c = 0, x_i = x[i]; + c += x_i * y_0 + zz[i + 0]; + zz[i + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[i + 1]; + zz[i + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[i + 2]; + zz[i + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[i + 3]; + zz[i + 3] = (uint)c; + c >>= 32; + c += x_i * y_4 + zz[i + 4]; + zz[i + 4] = (uint)c; + c >>= 32; + c += x_i * y_5 + zz[i + 5]; + zz[i + 5] = (uint)c; + c >>= 32; + c += x_i * y_6 + zz[i + 6]; + zz[i + 6] = (uint)c; + c >>= 32; + + zc += c + zz[i + 7]; + zz[i + 7] = (uint)zc; + zc >>= 32; + } + return (uint)zc; + } + + public static uint MulAddTo(uint[] x, int xOff, uint[] y, int yOff, uint[] zz, int zzOff) + { + ulong y_0 = y[yOff + 0]; + ulong y_1 = y[yOff + 1]; + ulong y_2 = y[yOff + 2]; + ulong y_3 = y[yOff + 3]; + ulong y_4 = y[yOff + 4]; + ulong y_5 = y[yOff + 5]; + ulong y_6 = y[yOff + 6]; + + ulong zc = 0; + for (int i = 0; i < 7; ++i) + { + ulong c = 0, x_i = x[xOff + i]; + c += x_i * y_0 + zz[zzOff + 0]; + zz[zzOff + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[zzOff + 1]; + zz[zzOff + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[zzOff + 2]; + zz[zzOff + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[zzOff + 3]; + zz[zzOff + 3] = (uint)c; + c >>= 32; + c += x_i * y_4 + zz[zzOff + 4]; + zz[zzOff + 4] = (uint)c; + c >>= 32; + c += x_i * y_5 + zz[zzOff + 5]; + zz[zzOff + 5] = (uint)c; + c >>= 32; + c += x_i * y_6 + zz[zzOff + 6]; + zz[zzOff + 6] = (uint)c; + c >>= 32; + + zc += c + zz[zzOff + 7]; + zz[zzOff + 7] = (uint)zc; + zc >>= 32; + ++zzOff; + } + return (uint)zc; + } + + public static ulong Mul33Add(uint w, uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + Debug.Assert(w >> 31 == 0); + + ulong c = 0, wVal = w; + ulong x0 = x[xOff + 0]; + c += wVal * x0 + y[yOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + ulong x1 = x[xOff + 1]; + c += wVal * x1 + x0 + y[yOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + ulong x2 = x[xOff + 2]; + c += wVal * x2 + x1 + y[yOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + ulong x3 = x[xOff + 3]; + c += wVal * x3 + x2 + y[yOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + ulong x4 = x[xOff + 4]; + c += wVal * x4 + x3 + y[yOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + ulong x5 = x[xOff + 5]; + c += wVal * x5 + x4 + y[yOff + 5]; + z[zOff + 5] = (uint)c; + c >>= 32; + ulong x6 = x[xOff + 6]; + c += wVal * x6 + x5 + y[yOff + 6]; + z[zOff + 6] = (uint)c; + c >>= 32; + c += x6; + return c; + } + + public static uint MulByWord(uint x, uint[] z) + { + ulong c = 0, xVal = x; + c += xVal * (ulong)z[0]; + z[0] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[1]; + z[1] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[2]; + z[2] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[3]; + z[3] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[4]; + z[4] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[5]; + z[5] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[6]; + z[6] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint MulByWordAddTo(uint x, uint[] y, uint[] z) + { + ulong c = 0, xVal = x; + c += xVal * (ulong)z[0] + y[0]; + z[0] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[1] + y[1]; + z[1] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[2] + y[2]; + z[2] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[3] + y[3]; + z[3] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[4] + y[4]; + z[4] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[5] + y[5]; + z[5] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[6] + y[6]; + z[6] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint MulWordAddTo(uint x, uint[] y, int yOff, uint[] z, int zOff) + { + ulong c = 0, xVal = x; + c += xVal * y[yOff + 0] + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += xVal * y[yOff + 1] + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += xVal * y[yOff + 2] + z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += xVal * y[yOff + 3] + z[zOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + c += xVal * y[yOff + 4] + z[zOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + c += xVal * y[yOff + 5] + z[zOff + 5]; + z[zOff + 5] = (uint)c; + c >>= 32; + c += xVal * y[yOff + 6] + z[zOff + 6]; + z[zOff + 6] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint Mul33DWordAdd(uint x, ulong y, uint[] z, int zOff) + { + Debug.Assert(x >> 31 == 0); + Debug.Assert(zOff <= 3); + ulong c = 0, xVal = x; + ulong y00 = y & M; + c += xVal * y00 + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + ulong y01 = y >> 32; + c += xVal * y01 + y00 + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += y01 + z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += z[zOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + return c == 0 ? 0 : Nat.IncAt(7, z, zOff, 4); + } + + public static uint Mul33WordAdd(uint x, uint y, uint[] z, int zOff) + { + Debug.Assert(x >> 31 == 0); + Debug.Assert(zOff <= 4); + ulong c = 0, yVal = y; + c += yVal * x + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += yVal + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + return c == 0 ? 0 : Nat.IncAt(7, z, zOff, 3); + } + + public static uint MulWordDwordAdd(uint x, ulong y, uint[] z, int zOff) + { + Debug.Assert(zOff <= 4); + ulong c = 0, xVal = x; + c += xVal * y + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += xVal * (y >> 32) + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + return c == 0 ? 0 : Nat.IncAt(7, z, zOff, 3); + } + + public static uint MulWord(uint x, uint[] y, uint[] z, int zOff) + { + ulong c = 0, xVal = x; + int i = 0; + do + { + c += xVal * y[i]; + z[zOff + i] = (uint)c; + c >>= 32; + } + while (++i < 7); + return (uint)c; + } + + public static void Square(uint[] x, uint[] zz) + { + ulong x_0 = x[0]; + ulong zz_1; + + uint c = 0, w; + { + int i = 6, j = 14; + do + { + ulong xVal = x[i--]; + ulong p = xVal * xVal; + zz[--j] = (c << 31) | (uint)(p >> 33); + zz[--j] = (uint)(p >> 1); + c = (uint)p; + } + while (i > 0); + + { + ulong p = x_0 * x_0; + zz_1 = (ulong)(c << 31) | (p >> 33); + zz[0] = (uint)p; + c = (uint)(p >> 32) & 1; + } + } + + ulong x_1 = x[1]; + ulong zz_2 = zz[2]; + + { + zz_1 += x_1 * x_0; + w = (uint)zz_1; + zz[1] = (w << 1) | c; + c = w >> 31; + zz_2 += zz_1 >> 32; + } + + ulong x_2 = x[2]; + ulong zz_3 = zz[3]; + ulong zz_4 = zz[4]; + { + zz_2 += x_2 * x_0; + w = (uint)zz_2; + zz[2] = (w << 1) | c; + c = w >> 31; + zz_3 += (zz_2 >> 32) + x_2 * x_1; + zz_4 += zz_3 >> 32; + zz_3 &= M; + } + + ulong x_3 = x[3]; + ulong zz_5 = zz[5] + (zz_4 >> 32); zz_4 &= M; + ulong zz_6 = zz[6] + (zz_5 >> 32); zz_5 &= M; + { + zz_3 += x_3 * x_0; + w = (uint)zz_3; + zz[3] = (w << 1) | c; + c = w >> 31; + zz_4 += (zz_3 >> 32) + x_3 * x_1; + zz_5 += (zz_4 >> 32) + x_3 * x_2; + zz_4 &= M; + zz_6 += zz_5 >> 32; + zz_5 &= M; + } + + ulong x_4 = x[4]; + ulong zz_7 = zz[7] + (zz_6 >> 32); zz_6 &= M; + ulong zz_8 = zz[8] + (zz_7 >> 32); zz_7 &= M; + { + zz_4 += x_4 * x_0; + w = (uint)zz_4; + zz[4] = (w << 1) | c; + c = w >> 31; + zz_5 += (zz_4 >> 32) + x_4 * x_1; + zz_6 += (zz_5 >> 32) + x_4 * x_2; + zz_5 &= M; + zz_7 += (zz_6 >> 32) + x_4 * x_3; + zz_6 &= M; + zz_8 += zz_7 >> 32; + zz_7 &= M; + } + + ulong x_5 = x[5]; + ulong zz_9 = zz[9] + (zz_8 >> 32); zz_8 &= M; + ulong zz_10 = zz[10] + (zz_9 >> 32); zz_9 &= M; + { + zz_5 += x_5 * x_0; + w = (uint)zz_5; + zz[5] = (w << 1) | c; + c = w >> 31; + zz_6 += (zz_5 >> 32) + x_5 * x_1; + zz_7 += (zz_6 >> 32) + x_5 * x_2; + zz_6 &= M; + zz_8 += (zz_7 >> 32) + x_5 * x_3; + zz_7 &= M; + zz_9 += (zz_8 >> 32) + x_5 * x_4; + zz_8 &= M; + zz_10 += zz_9 >> 32; + zz_9 &= M; + } + + ulong x_6 = x[6]; + ulong zz_11 = zz[11] + (zz_10 >> 32); zz_10 &= M; + ulong zz_12 = zz[12] + (zz_11 >> 32); zz_11 &= M; + { + zz_6 += x_6 * x_0; + w = (uint)zz_6; + zz[6] = (w << 1) | c; + c = w >> 31; + zz_7 += (zz_6 >> 32) + x_6 * x_1; + zz_8 += (zz_7 >> 32) + x_6 * x_2; + zz_9 += (zz_8 >> 32) + x_6 * x_3; + zz_10 += (zz_9 >> 32) + x_6 * x_4; + zz_11 += (zz_10 >> 32) + x_6 * x_5; + zz_12 += zz_11 >> 32; + } + + w = (uint)zz_7; + zz[7] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_8; + zz[8] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_9; + zz[9] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_10; + zz[10] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_11; + zz[11] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_12; + zz[12] = (w << 1) | c; + c = w >> 31; + w = zz[13] + (uint)(zz_12 >> 32); + zz[13] = (w << 1) | c; + } + + public static void Square(uint[] x, int xOff, uint[] zz, int zzOff) + { + ulong x_0 = x[xOff + 0]; + ulong zz_1; + + uint c = 0, w; + { + int i = 6, j = 14; + do + { + ulong xVal = x[xOff + i--]; + ulong p = xVal * xVal; + zz[zzOff + --j] = (c << 31) | (uint)(p >> 33); + zz[zzOff + --j] = (uint)(p >> 1); + c = (uint)p; + } + while (i > 0); + + { + ulong p = x_0 * x_0; + zz_1 = (ulong)(c << 31) | (p >> 33); + zz[zzOff + 0] = (uint)p; + c = (uint)(p >> 32) & 1; + } + } + + ulong x_1 = x[xOff + 1]; + ulong zz_2 = zz[zzOff + 2]; + + { + zz_1 += x_1 * x_0; + w = (uint)zz_1; + zz[zzOff + 1] = (w << 1) | c; + c = w >> 31; + zz_2 += zz_1 >> 32; + } + + ulong x_2 = x[xOff + 2]; + ulong zz_3 = zz[zzOff + 3]; + ulong zz_4 = zz[zzOff + 4]; + { + zz_2 += x_2 * x_0; + w = (uint)zz_2; + zz[zzOff + 2] = (w << 1) | c; + c = w >> 31; + zz_3 += (zz_2 >> 32) + x_2 * x_1; + zz_4 += zz_3 >> 32; + zz_3 &= M; + } + + ulong x_3 = x[xOff + 3]; + ulong zz_5 = zz[zzOff + 5] + (zz_4 >> 32); zz_4 &= M; + ulong zz_6 = zz[zzOff + 6] + (zz_5 >> 32); zz_5 &= M; + { + zz_3 += x_3 * x_0; + w = (uint)zz_3; + zz[zzOff + 3] = (w << 1) | c; + c = w >> 31; + zz_4 += (zz_3 >> 32) + x_3 * x_1; + zz_5 += (zz_4 >> 32) + x_3 * x_2; + zz_4 &= M; + zz_6 += zz_5 >> 32; + zz_5 &= M; + } + + ulong x_4 = x[xOff + 4]; + ulong zz_7 = zz[zzOff + 7] + (zz_6 >> 32); zz_6 &= M; + ulong zz_8 = zz[zzOff + 8] + (zz_7 >> 32); zz_7 &= M; + { + zz_4 += x_4 * x_0; + w = (uint)zz_4; + zz[zzOff + 4] = (w << 1) | c; + c = w >> 31; + zz_5 += (zz_4 >> 32) + x_4 * x_1; + zz_6 += (zz_5 >> 32) + x_4 * x_2; + zz_5 &= M; + zz_7 += (zz_6 >> 32) + x_4 * x_3; + zz_6 &= M; + zz_8 += zz_7 >> 32; + zz_7 &= M; + } + + ulong x_5 = x[xOff + 5]; + ulong zz_9 = zz[zzOff + 9] + (zz_8 >> 32); zz_8 &= M; + ulong zz_10 = zz[zzOff + 10] + (zz_9 >> 32); zz_9 &= M; + { + zz_5 += x_5 * x_0; + w = (uint)zz_5; + zz[zzOff + 5] = (w << 1) | c; + c = w >> 31; + zz_6 += (zz_5 >> 32) + x_5 * x_1; + zz_7 += (zz_6 >> 32) + x_5 * x_2; + zz_6 &= M; + zz_8 += (zz_7 >> 32) + x_5 * x_3; + zz_7 &= M; + zz_9 += (zz_8 >> 32) + x_5 * x_4; + zz_8 &= M; + zz_10 += zz_9 >> 32; + zz_9 &= M; + } + + ulong x_6 = x[xOff + 6]; + ulong zz_11 = zz[zzOff + 11] + (zz_10 >> 32); zz_10 &= M; + ulong zz_12 = zz[zzOff + 12] + (zz_11 >> 32); zz_11 &= M; + { + zz_6 += x_6 * x_0; + w = (uint)zz_6; + zz[zzOff + 6] = (w << 1) | c; + c = w >> 31; + zz_7 += (zz_6 >> 32) + x_6 * x_1; + zz_8 += (zz_7 >> 32) + x_6 * x_2; + zz_9 += (zz_8 >> 32) + x_6 * x_3; + zz_10 += (zz_9 >> 32) + x_6 * x_4; + zz_11 += (zz_10 >> 32) + x_6 * x_5; + zz_12 += zz_11 >> 32; + } + + w = (uint)zz_7; + zz[zzOff + 7] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_8; + zz[zzOff + 8] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_9; + zz[zzOff + 9] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_10; + zz[zzOff + 10] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_11; + zz[zzOff + 11] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_12; + zz[zzOff + 12] = (w << 1) | c; + c = w >> 31; + w = zz[zzOff + 13] + (uint)(zz_12 >> 32); + zz[zzOff + 13] = (w << 1) | c; + } + + public static int Sub(uint[] x, uint[] y, uint[] z) + { + long c = 0; + c += (long)x[0] - y[0]; + z[0] = (uint)c; + c >>= 32; + c += (long)x[1] - y[1]; + z[1] = (uint)c; + c >>= 32; + c += (long)x[2] - y[2]; + z[2] = (uint)c; + c >>= 32; + c += (long)x[3] - y[3]; + z[3] = (uint)c; + c >>= 32; + c += (long)x[4] - y[4]; + z[4] = (uint)c; + c >>= 32; + c += (long)x[5] - y[5]; + z[5] = (uint)c; + c >>= 32; + c += (long)x[6] - y[6]; + z[6] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int Sub(uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + long c = 0; + c += (long)x[xOff + 0] - y[yOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (long)x[xOff + 1] - y[yOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += (long)x[xOff + 2] - y[yOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += (long)x[xOff + 3] - y[yOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + c += (long)x[xOff + 4] - y[yOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + c += (long)x[xOff + 5] - y[yOff + 5]; + z[zOff + 5] = (uint)c; + c >>= 32; + c += (long)x[xOff + 6] - y[yOff + 6]; + z[zOff + 6] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int SubBothFrom(uint[] x, uint[] y, uint[] z) + { + long c = 0; + c += (long)z[0] - x[0] - y[0]; + z[0] = (uint)c; + c >>= 32; + c += (long)z[1] - x[1] - y[1]; + z[1] = (uint)c; + c >>= 32; + c += (long)z[2] - x[2] - y[2]; + z[2] = (uint)c; + c >>= 32; + c += (long)z[3] - x[3] - y[3]; + z[3] = (uint)c; + c >>= 32; + c += (long)z[4] - x[4] - y[4]; + z[4] = (uint)c; + c >>= 32; + c += (long)z[5] - x[5] - y[5]; + z[5] = (uint)c; + c >>= 32; + c += (long)z[6] - x[6] - y[6]; + z[6] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int SubFrom(uint[] x, uint[] z) + { + long c = 0; + c += (long)z[0] - x[0]; + z[0] = (uint)c; + c >>= 32; + c += (long)z[1] - x[1]; + z[1] = (uint)c; + c >>= 32; + c += (long)z[2] - x[2]; + z[2] = (uint)c; + c >>= 32; + c += (long)z[3] - x[3]; + z[3] = (uint)c; + c >>= 32; + c += (long)z[4] - x[4]; + z[4] = (uint)c; + c >>= 32; + c += (long)z[5] - x[5]; + z[5] = (uint)c; + c >>= 32; + c += (long)z[6] - x[6]; + z[6] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int SubFrom(uint[] x, int xOff, uint[] z, int zOff) + { + long c = 0; + c += (long)z[zOff + 0] - x[xOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (long)z[zOff + 1] - x[xOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += (long)z[zOff + 2] - x[xOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += (long)z[zOff + 3] - x[xOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + c += (long)z[zOff + 4] - x[xOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + c += (long)z[zOff + 5] - x[xOff + 5]; + z[zOff + 5] = (uint)c; + c >>= 32; + c += (long)z[zOff + 6] - x[xOff + 6]; + z[zOff + 6] = (uint)c; + c >>= 32; + return (int)c; + } + + public static BigInteger ToBigInteger(uint[] x) + { + byte[] bs = new byte[28]; + for (int i = 0; i < 7; ++i) + { + uint x_i = x[i]; + if (x_i != 0) + { + Pack.UInt32_To_BE(x_i, bs, (6 - i) << 2); + } + } + return new BigInteger(1, bs); + } + + public static void Zero(uint[] z) + { + z[0] = 0; + z[1] = 0; + z[2] = 0; + z[3] = 0; + z[4] = 0; + z[5] = 0; + z[6] = 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat224.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat224.cs.meta new file mode 100644 index 000000000..c38095269 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat224.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c67e923674f4df84f992e06eecec940e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat256.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat256.cs new file mode 100644 index 000000000..8576bd9c0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat256.cs @@ -0,0 +1,1454 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +#if NETCOREAPP3_0_OR_GREATER +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw +{ + internal abstract class Nat256 + { + private const ulong M = 0xFFFFFFFFUL; + + public static uint Add(uint[] x, uint[] y, uint[] z) + { + ulong c = 0; + c += (ulong)x[0] + y[0]; + z[0] = (uint)c; + c >>= 32; + c += (ulong)x[1] + y[1]; + z[1] = (uint)c; + c >>= 32; + c += (ulong)x[2] + y[2]; + z[2] = (uint)c; + c >>= 32; + c += (ulong)x[3] + y[3]; + z[3] = (uint)c; + c >>= 32; + c += (ulong)x[4] + y[4]; + z[4] = (uint)c; + c >>= 32; + c += (ulong)x[5] + y[5]; + z[5] = (uint)c; + c >>= 32; + c += (ulong)x[6] + y[6]; + z[6] = (uint)c; + c >>= 32; + c += (ulong)x[7] + y[7]; + z[7] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint Add(uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + ulong c = 0; + c += (ulong)x[xOff + 0] + y[yOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 1] + y[yOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 2] + y[yOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 3] + y[yOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 4] + y[yOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 5] + y[yOff + 5]; + z[zOff + 5] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 6] + y[yOff + 6]; + z[zOff + 6] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 7] + y[yOff + 7]; + z[zOff + 7] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddBothTo(uint[] x, uint[] y, uint[] z) + { + ulong c = 0; + c += (ulong)x[0] + y[0] + z[0]; + z[0] = (uint)c; + c >>= 32; + c += (ulong)x[1] + y[1] + z[1]; + z[1] = (uint)c; + c >>= 32; + c += (ulong)x[2] + y[2] + z[2]; + z[2] = (uint)c; + c >>= 32; + c += (ulong)x[3] + y[3] + z[3]; + z[3] = (uint)c; + c >>= 32; + c += (ulong)x[4] + y[4] + z[4]; + z[4] = (uint)c; + c >>= 32; + c += (ulong)x[5] + y[5] + z[5]; + z[5] = (uint)c; + c >>= 32; + c += (ulong)x[6] + y[6] + z[6]; + z[6] = (uint)c; + c >>= 32; + c += (ulong)x[7] + y[7] + z[7]; + z[7] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddBothTo(uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + ulong c = 0; + c += (ulong)x[xOff + 0] + y[yOff + 0] + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 1] + y[yOff + 1] + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 2] + y[yOff + 2] + z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 3] + y[yOff + 3] + z[zOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 4] + y[yOff + 4] + z[zOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 5] + y[yOff + 5] + z[zOff + 5]; + z[zOff + 5] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 6] + y[yOff + 6] + z[zOff + 6]; + z[zOff + 6] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 7] + y[yOff + 7] + z[zOff + 7]; + z[zOff + 7] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddTo(uint[] x, uint[] z) + { + ulong c = 0; + c += (ulong)x[0] + z[0]; + z[0] = (uint)c; + c >>= 32; + c += (ulong)x[1] + z[1]; + z[1] = (uint)c; + c >>= 32; + c += (ulong)x[2] + z[2]; + z[2] = (uint)c; + c >>= 32; + c += (ulong)x[3] + z[3]; + z[3] = (uint)c; + c >>= 32; + c += (ulong)x[4] + z[4]; + z[4] = (uint)c; + c >>= 32; + c += (ulong)x[5] + z[5]; + z[5] = (uint)c; + c >>= 32; + c += (ulong)x[6] + z[6]; + z[6] = (uint)c; + c >>= 32; + c += (ulong)x[7] + z[7]; + z[7] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddTo(uint[] x, int xOff, uint[] z, int zOff, uint cIn) + { + ulong c = cIn; + c += (ulong)x[xOff + 0] + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 1] + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 2] + z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 3] + z[zOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 4] + z[zOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 5] + z[zOff + 5]; + z[zOff + 5] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 6] + z[zOff + 6]; + z[zOff + 6] = (uint)c; + c >>= 32; + c += (ulong)x[xOff + 7] + z[zOff + 7]; + z[zOff + 7] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint AddToEachOther(uint[] u, int uOff, uint[] v, int vOff) + { + ulong c = 0; + c += (ulong)u[uOff + 0] + v[vOff + 0]; + u[uOff + 0] = (uint)c; + v[vOff + 0] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 1] + v[vOff + 1]; + u[uOff + 1] = (uint)c; + v[vOff + 1] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 2] + v[vOff + 2]; + u[uOff + 2] = (uint)c; + v[vOff + 2] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 3] + v[vOff + 3]; + u[uOff + 3] = (uint)c; + v[vOff + 3] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 4] + v[vOff + 4]; + u[uOff + 4] = (uint)c; + v[vOff + 4] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 5] + v[vOff + 5]; + u[uOff + 5] = (uint)c; + v[vOff + 5] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 6] + v[vOff + 6]; + u[uOff + 6] = (uint)c; + v[vOff + 6] = (uint)c; + c >>= 32; + c += (ulong)u[uOff + 7] + v[vOff + 7]; + u[uOff + 7] = (uint)c; + v[vOff + 7] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static void Copy(uint[] x, uint[] z) + { + z[0] = x[0]; + z[1] = x[1]; + z[2] = x[2]; + z[3] = x[3]; + z[4] = x[4]; + z[5] = x[5]; + z[6] = x[6]; + z[7] = x[7]; + } + + public static void Copy(uint[] x, int xOff, uint[] z, int zOff) + { + z[zOff + 0] = x[xOff + 0]; + z[zOff + 1] = x[xOff + 1]; + z[zOff + 2] = x[xOff + 2]; + z[zOff + 3] = x[xOff + 3]; + z[zOff + 4] = x[xOff + 4]; + z[zOff + 5] = x[xOff + 5]; + z[zOff + 6] = x[xOff + 6]; + z[zOff + 7] = x[xOff + 7]; + } + + public static void Copy64(ulong[] x, ulong[] z) + { + z[0] = x[0]; + z[1] = x[1]; + z[2] = x[2]; + z[3] = x[3]; + } + + public static void Copy64(ulong[] x, int xOff, ulong[] z, int zOff) + { + z[zOff + 0] = x[xOff + 0]; + z[zOff + 1] = x[xOff + 1]; + z[zOff + 2] = x[xOff + 2]; + z[zOff + 3] = x[xOff + 3]; + } + + public static uint[] Create() + { + return new uint[8]; + } + + public static ulong[] Create64() + { + return new ulong[4]; + } + + public static uint[] CreateExt() + { + return new uint[16]; + } + + public static ulong[] CreateExt64() + { + return new ulong[8]; + } + + public static bool Diff(uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + bool pos = Gte(x, xOff, y, yOff); + if (pos) + { + Sub(x, xOff, y, yOff, z, zOff); + } + else + { + Sub(y, yOff, x, xOff, z, zOff); + } + return pos; + } + + public static bool Eq(uint[] x, uint[] y) + { + for (int i = 7; i >= 0; --i) + { + if (x[i] != y[i]) + return false; + } + return true; + } + + public static bool Eq64(ulong[] x, ulong[] y) + { + for (int i = 3; i >= 0; --i) + { + if (x[i] != y[i]) + { + return false; + } + } + return true; + } + + public static uint GetBit(uint[] x, int bit) + { + if (bit == 0) + { + return x[0] & 1; + } + if ((bit & 255) != bit) + { + return 0; + } + int w = bit >> 5; + int b = bit & 31; + return (x[w] >> b) & 1; + } + + public static bool Gte(uint[] x, uint[] y) + { + for (int i = 7; i >= 0; --i) + { + uint x_i = x[i], y_i = y[i]; + if (x_i < y_i) + return false; + if (x_i > y_i) + return true; + } + return true; + } + + public static bool Gte(uint[] x, int xOff, uint[] y, int yOff) + { + for (int i = 7; i >= 0; --i) + { + uint x_i = x[xOff + i], y_i = y[yOff + i]; + if (x_i < y_i) + return false; + if (x_i > y_i) + return true; + } + return true; + } + + public static bool IsOne(uint[] x) + { + if (x[0] != 1) + { + return false; + } + for (int i = 1; i < 8; ++i) + { + if (x[i] != 0) + { + return false; + } + } + return true; + } + + public static bool IsOne64(ulong[] x) + { + if (x[0] != 1UL) + { + return false; + } + for (int i = 1; i < 4; ++i) + { + if (x[i] != 0UL) + { + return false; + } + } + return true; + } + + public static bool IsZero(uint[] x) + { + for (int i = 0; i < 8; ++i) + { + if (x[i] != 0) + { + return false; + } + } + return true; + } + + public static bool IsZero64(ulong[] x) + { + for (int i = 0; i < 4; ++i) + { + if (x[i] != 0UL) + { + return false; + } + } + return true; + } + + public static void Mul(uint[] x, uint[] y, uint[] zz) + { + ulong y_0 = y[0]; + ulong y_1 = y[1]; + ulong y_2 = y[2]; + ulong y_3 = y[3]; + ulong y_4 = y[4]; + ulong y_5 = y[5]; + ulong y_6 = y[6]; + ulong y_7 = y[7]; + + { + ulong c = 0, x_0 = x[0]; + c += x_0 * y_0; + zz[0] = (uint)c; + c >>= 32; + c += x_0 * y_1; + zz[1] = (uint)c; + c >>= 32; + c += x_0 * y_2; + zz[2] = (uint)c; + c >>= 32; + c += x_0 * y_3; + zz[3] = (uint)c; + c >>= 32; + c += x_0 * y_4; + zz[4] = (uint)c; + c >>= 32; + c += x_0 * y_5; + zz[5] = (uint)c; + c >>= 32; + c += x_0 * y_6; + zz[6] = (uint)c; + c >>= 32; + c += x_0 * y_7; + zz[7] = (uint)c; + c >>= 32; + zz[8] = (uint)c; + } + + for (int i = 1; i < 8; ++i) + { + ulong c = 0, x_i = x[i]; + c += x_i * y_0 + zz[i + 0]; + zz[i + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[i + 1]; + zz[i + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[i + 2]; + zz[i + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[i + 3]; + zz[i + 3] = (uint)c; + c >>= 32; + c += x_i * y_4 + zz[i + 4]; + zz[i + 4] = (uint)c; + c >>= 32; + c += x_i * y_5 + zz[i + 5]; + zz[i + 5] = (uint)c; + c >>= 32; + c += x_i * y_6 + zz[i + 6]; + zz[i + 6] = (uint)c; + c >>= 32; + c += x_i * y_7 + zz[i + 7]; + zz[i + 7] = (uint)c; + c >>= 32; + zz[i + 8] = (uint)c; + } + } + + public static void Mul(uint[] x, int xOff, uint[] y, int yOff, uint[] zz, int zzOff) + { + ulong y_0 = y[yOff + 0]; + ulong y_1 = y[yOff + 1]; + ulong y_2 = y[yOff + 2]; + ulong y_3 = y[yOff + 3]; + ulong y_4 = y[yOff + 4]; + ulong y_5 = y[yOff + 5]; + ulong y_6 = y[yOff + 6]; + ulong y_7 = y[yOff + 7]; + + { + ulong c = 0, x_0 = x[xOff + 0]; + c += x_0 * y_0; + zz[zzOff + 0] = (uint)c; + c >>= 32; + c += x_0 * y_1; + zz[zzOff + 1] = (uint)c; + c >>= 32; + c += x_0 * y_2; + zz[zzOff + 2] = (uint)c; + c >>= 32; + c += x_0 * y_3; + zz[zzOff + 3] = (uint)c; + c >>= 32; + c += x_0 * y_4; + zz[zzOff + 4] = (uint)c; + c >>= 32; + c += x_0 * y_5; + zz[zzOff + 5] = (uint)c; + c >>= 32; + c += x_0 * y_6; + zz[zzOff + 6] = (uint)c; + c >>= 32; + c += x_0 * y_7; + zz[zzOff + 7] = (uint)c; + c >>= 32; + zz[zzOff + 8] = (uint)c; + } + + for (int i = 1; i < 8; ++i) + { + ++zzOff; + ulong c = 0, x_i = x[xOff + i]; + c += x_i * y_0 + zz[zzOff + 0]; + zz[zzOff + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[zzOff + 1]; + zz[zzOff + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[zzOff + 2]; + zz[zzOff + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[zzOff + 3]; + zz[zzOff + 3] = (uint)c; + c >>= 32; + c += x_i * y_4 + zz[zzOff + 4]; + zz[zzOff + 4] = (uint)c; + c >>= 32; + c += x_i * y_5 + zz[zzOff + 5]; + zz[zzOff + 5] = (uint)c; + c >>= 32; + c += x_i * y_6 + zz[zzOff + 6]; + zz[zzOff + 6] = (uint)c; + c >>= 32; + c += x_i * y_7 + zz[zzOff + 7]; + zz[zzOff + 7] = (uint)c; + c >>= 32; + zz[zzOff + 8] = (uint)c; + } + } + + public static uint MulAddTo(uint[] x, uint[] y, uint[] zz) + { + ulong y_0 = y[0]; + ulong y_1 = y[1]; + ulong y_2 = y[2]; + ulong y_3 = y[3]; + ulong y_4 = y[4]; + ulong y_5 = y[5]; + ulong y_6 = y[6]; + ulong y_7 = y[7]; + + ulong zc = 0; + for (int i = 0; i < 8; ++i) + { + ulong c = 0, x_i = x[i]; + c += x_i * y_0 + zz[i + 0]; + zz[i + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[i + 1]; + zz[i + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[i + 2]; + zz[i + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[i + 3]; + zz[i + 3] = (uint)c; + c >>= 32; + c += x_i * y_4 + zz[i + 4]; + zz[i + 4] = (uint)c; + c >>= 32; + c += x_i * y_5 + zz[i + 5]; + zz[i + 5] = (uint)c; + c >>= 32; + c += x_i * y_6 + zz[i + 6]; + zz[i + 6] = (uint)c; + c >>= 32; + c += x_i * y_7 + zz[i + 7]; + zz[i + 7] = (uint)c; + c >>= 32; + + zc += c + zz[i + 8]; + zz[i + 8] = (uint)zc; + zc >>= 32; + } + return (uint)zc; + } + + public static uint MulAddTo(uint[] x, int xOff, uint[] y, int yOff, uint[] zz, int zzOff) + { + ulong y_0 = y[yOff + 0]; + ulong y_1 = y[yOff + 1]; + ulong y_2 = y[yOff + 2]; + ulong y_3 = y[yOff + 3]; + ulong y_4 = y[yOff + 4]; + ulong y_5 = y[yOff + 5]; + ulong y_6 = y[yOff + 6]; + ulong y_7 = y[yOff + 7]; + + ulong zc = 0; + for (int i = 0; i < 8; ++i) + { + ulong c = 0, x_i = x[xOff + i]; + c += x_i * y_0 + zz[zzOff + 0]; + zz[zzOff + 0] = (uint)c; + c >>= 32; + c += x_i * y_1 + zz[zzOff + 1]; + zz[zzOff + 1] = (uint)c; + c >>= 32; + c += x_i * y_2 + zz[zzOff + 2]; + zz[zzOff + 2] = (uint)c; + c >>= 32; + c += x_i * y_3 + zz[zzOff + 3]; + zz[zzOff + 3] = (uint)c; + c >>= 32; + c += x_i * y_4 + zz[zzOff + 4]; + zz[zzOff + 4] = (uint)c; + c >>= 32; + c += x_i * y_5 + zz[zzOff + 5]; + zz[zzOff + 5] = (uint)c; + c >>= 32; + c += x_i * y_6 + zz[zzOff + 6]; + zz[zzOff + 6] = (uint)c; + c >>= 32; + c += x_i * y_7 + zz[zzOff + 7]; + zz[zzOff + 7] = (uint)c; + c >>= 32; + + zc += c + zz[zzOff + 8]; + zz[zzOff + 8] = (uint)zc; + zc >>= 32; + ++zzOff; + } + return (uint)zc; + } + + public static ulong Mul33Add(uint w, uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + Debug.Assert(w >> 31 == 0); + + ulong c = 0, wVal = w; + ulong x0 = x[xOff + 0]; + c += wVal * x0 + y[yOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + ulong x1 = x[xOff + 1]; + c += wVal * x1 + x0 + y[yOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + ulong x2 = x[xOff + 2]; + c += wVal * x2 + x1 + y[yOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + ulong x3 = x[xOff + 3]; + c += wVal * x3 + x2 + y[yOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + ulong x4 = x[xOff + 4]; + c += wVal * x4 + x3 + y[yOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + ulong x5 = x[xOff + 5]; + c += wVal * x5 + x4 + y[yOff + 5]; + z[zOff + 5] = (uint)c; + c >>= 32; + ulong x6 = x[xOff + 6]; + c += wVal * x6 + x5 + y[yOff + 6]; + z[zOff + 6] = (uint)c; + c >>= 32; + ulong x7 = x[xOff + 7]; + c += wVal * x7 + x6 + y[yOff + 7]; + z[zOff + 7] = (uint)c; + c >>= 32; + c += x7; + return c; + } + + public static uint MulByWord(uint x, uint[] z) + { + ulong c = 0, xVal = x; + c += xVal * (ulong)z[0]; + z[0] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[1]; + z[1] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[2]; + z[2] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[3]; + z[3] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[4]; + z[4] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[5]; + z[5] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[6]; + z[6] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[7]; + z[7] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint MulByWordAddTo(uint x, uint[] y, uint[] z) + { + ulong c = 0, xVal = x; + c += xVal * (ulong)z[0] + y[0]; + z[0] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[1] + y[1]; + z[1] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[2] + y[2]; + z[2] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[3] + y[3]; + z[3] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[4] + y[4]; + z[4] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[5] + y[5]; + z[5] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[6] + y[6]; + z[6] = (uint)c; + c >>= 32; + c += xVal * (ulong)z[7] + y[7]; + z[7] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint MulWordAddTo(uint x, uint[] y, int yOff, uint[] z, int zOff) + { + ulong c = 0, xVal = x; + c += xVal * y[yOff + 0] + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += xVal * y[yOff + 1] + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += xVal * y[yOff + 2] + z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += xVal * y[yOff + 3] + z[zOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + c += xVal * y[yOff + 4] + z[zOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + c += xVal * y[yOff + 5] + z[zOff + 5]; + z[zOff + 5] = (uint)c; + c >>= 32; + c += xVal * y[yOff + 6] + z[zOff + 6]; + z[zOff + 6] = (uint)c; + c >>= 32; + c += xVal * y[yOff + 7] + z[zOff + 7]; + z[zOff + 7] = (uint)c; + c >>= 32; + return (uint)c; + } + + public static uint Mul33DWordAdd(uint x, ulong y, uint[] z, int zOff) + { + Debug.Assert(x >> 31 == 0); + Debug.Assert(zOff <= 4); + ulong c = 0, xVal = x; + ulong y00 = y & M; + c += xVal * y00 + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + ulong y01 = y >> 32; + c += xVal * y01 + y00 + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += y01 + z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += z[zOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + return c == 0 ? 0 : Nat.IncAt(8, z, zOff, 4); + } + + public static uint Mul33WordAdd(uint x, uint y, uint[] z, int zOff) + { + Debug.Assert(x >> 31 == 0); + Debug.Assert(zOff <= 5); + ulong c = 0, yVal = y; + c += yVal * x + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += yVal + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + return c == 0 ? 0 : Nat.IncAt(8, z, zOff, 3); + } + + public static uint MulWordDwordAdd(uint x, ulong y, uint[] z, int zOff) + { + Debug.Assert(zOff <= 5); + ulong c = 0, xVal = x; + c += xVal * y + z[zOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += xVal * (y >> 32) + z[zOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += z[zOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + return c == 0 ? 0 : Nat.IncAt(8, z, zOff, 3); + } + + public static uint MulWord(uint x, uint[] y, uint[] z, int zOff) + { + ulong c = 0, xVal = x; + int i = 0; + do + { + c += xVal * y[i]; + z[zOff + i] = (uint)c; + c >>= 32; + } + while (++i < 8); + return (uint)c; + } + + public static void Square(uint[] x, uint[] zz) + { + ulong x_0 = x[0]; + ulong zz_1; + + uint c = 0, w; + { + int i = 7, j = 16; + do + { + ulong xVal = x[i--]; + ulong p = xVal * xVal; + zz[--j] = (c << 31) | (uint)(p >> 33); + zz[--j] = (uint)(p >> 1); + c = (uint)p; + } + while (i > 0); + + { + ulong p = x_0 * x_0; + zz_1 = (ulong)(c << 31) | (p >> 33); + zz[0] = (uint)p; + c = (uint)(p >> 32) & 1; + } + } + + ulong x_1 = x[1]; + ulong zz_2 = zz[2]; + + { + zz_1 += x_1 * x_0; + w = (uint)zz_1; + zz[1] = (w << 1) | c; + c = w >> 31; + zz_2 += zz_1 >> 32; + } + + ulong x_2 = x[2]; + ulong zz_3 = zz[3]; + ulong zz_4 = zz[4]; + { + zz_2 += x_2 * x_0; + w = (uint)zz_2; + zz[2] = (w << 1) | c; + c = w >> 31; + zz_3 += (zz_2 >> 32) + x_2 * x_1; + zz_4 += zz_3 >> 32; + zz_3 &= M; + } + + ulong x_3 = x[3]; + ulong zz_5 = zz[5] + (zz_4 >> 32); zz_4 &= M; + ulong zz_6 = zz[6] + (zz_5 >> 32); zz_5 &= M; + { + zz_3 += x_3 * x_0; + w = (uint)zz_3; + zz[3] = (w << 1) | c; + c = w >> 31; + zz_4 += (zz_3 >> 32) + x_3 * x_1; + zz_5 += (zz_4 >> 32) + x_3 * x_2; + zz_4 &= M; + zz_6 += zz_5 >> 32; + zz_5 &= M; + } + + ulong x_4 = x[4]; + ulong zz_7 = zz[7] + (zz_6 >> 32); zz_6 &= M; + ulong zz_8 = zz[8] + (zz_7 >> 32); zz_7 &= M; + { + zz_4 += x_4 * x_0; + w = (uint)zz_4; + zz[4] = (w << 1) | c; + c = w >> 31; + zz_5 += (zz_4 >> 32) + x_4 * x_1; + zz_6 += (zz_5 >> 32) + x_4 * x_2; + zz_5 &= M; + zz_7 += (zz_6 >> 32) + x_4 * x_3; + zz_6 &= M; + zz_8 += zz_7 >> 32; + zz_7 &= M; + } + + ulong x_5 = x[5]; + ulong zz_9 = zz[9] + (zz_8 >> 32); zz_8 &= M; + ulong zz_10 = zz[10] + (zz_9 >> 32); zz_9 &= M; + { + zz_5 += x_5 * x_0; + w = (uint)zz_5; + zz[5] = (w << 1) | c; + c = w >> 31; + zz_6 += (zz_5 >> 32) + x_5 * x_1; + zz_7 += (zz_6 >> 32) + x_5 * x_2; + zz_6 &= M; + zz_8 += (zz_7 >> 32) + x_5 * x_3; + zz_7 &= M; + zz_9 += (zz_8 >> 32) + x_5 * x_4; + zz_8 &= M; + zz_10 += zz_9 >> 32; + zz_9 &= M; + } + + ulong x_6 = x[6]; + ulong zz_11 = zz[11] + (zz_10 >> 32); zz_10 &= M; + ulong zz_12 = zz[12] + (zz_11 >> 32); zz_11 &= M; + { + zz_6 += x_6 * x_0; + w = (uint)zz_6; + zz[6] = (w << 1) | c; + c = w >> 31; + zz_7 += (zz_6 >> 32) + x_6 * x_1; + zz_8 += (zz_7 >> 32) + x_6 * x_2; + zz_7 &= M; + zz_9 += (zz_8 >> 32) + x_6 * x_3; + zz_8 &= M; + zz_10 += (zz_9 >> 32) + x_6 * x_4; + zz_9 &= M; + zz_11 += (zz_10 >> 32) + x_6 * x_5; + zz_10 &= M; + zz_12 += zz_11 >> 32; + zz_11 &= M; + } + + ulong x_7 = x[7]; + ulong zz_13 = zz[13] + (zz_12 >> 32); zz_12 &= M; + ulong zz_14 = zz[14] + (zz_13 >> 32); zz_13 &= M; + { + zz_7 += x_7 * x_0; + w = (uint)zz_7; + zz[7] = (w << 1) | c; + c = w >> 31; + zz_8 += (zz_7 >> 32) + x_7 * x_1; + zz_9 += (zz_8 >> 32) + x_7 * x_2; + zz_10 += (zz_9 >> 32) + x_7 * x_3; + zz_11 += (zz_10 >> 32) + x_7 * x_4; + zz_12 += (zz_11 >> 32) + x_7 * x_5; + zz_13 += (zz_12 >> 32) + x_7 * x_6; + zz_14 += zz_13 >> 32; + } + + w = (uint)zz_8; + zz[8] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_9; + zz[9] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_10; + zz[10] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_11; + zz[11] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_12; + zz[12] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_13; + zz[13] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_14; + zz[14] = (w << 1) | c; + c = w >> 31; + w = zz[15] + (uint)(zz_14 >> 32); + zz[15] = (w << 1) | c; + } + + public static void Square(uint[] x, int xOff, uint[] zz, int zzOff) + { + ulong x_0 = x[xOff + 0]; + ulong zz_1; + + uint c = 0, w; + { + int i = 7, j = 16; + do + { + ulong xVal = x[xOff + i--]; + ulong p = xVal * xVal; + zz[zzOff + --j] = (c << 31) | (uint)(p >> 33); + zz[zzOff + --j] = (uint)(p >> 1); + c = (uint)p; + } + while (i > 0); + + { + ulong p = x_0 * x_0; + zz_1 = (ulong)(c << 31) | (p >> 33); + zz[zzOff + 0] = (uint)p; + c = (uint)(p >> 32) & 1; + } + } + + ulong x_1 = x[xOff + 1]; + ulong zz_2 = zz[zzOff + 2]; + + { + zz_1 += x_1 * x_0; + w = (uint)zz_1; + zz[zzOff + 1] = (w << 1) | c; + c = w >> 31; + zz_2 += zz_1 >> 32; + } + + ulong x_2 = x[xOff + 2]; + ulong zz_3 = zz[zzOff + 3]; + ulong zz_4 = zz[zzOff + 4]; + { + zz_2 += x_2 * x_0; + w = (uint)zz_2; + zz[zzOff + 2] = (w << 1) | c; + c = w >> 31; + zz_3 += (zz_2 >> 32) + x_2 * x_1; + zz_4 += zz_3 >> 32; + zz_3 &= M; + } + + ulong x_3 = x[xOff + 3]; + ulong zz_5 = zz[zzOff + 5] + (zz_4 >> 32); zz_4 &= M; + ulong zz_6 = zz[zzOff + 6] + (zz_5 >> 32); zz_5 &= M; + { + zz_3 += x_3 * x_0; + w = (uint)zz_3; + zz[zzOff + 3] = (w << 1) | c; + c = w >> 31; + zz_4 += (zz_3 >> 32) + x_3 * x_1; + zz_5 += (zz_4 >> 32) + x_3 * x_2; + zz_4 &= M; + zz_6 += zz_5 >> 32; + zz_5 &= M; + } + + ulong x_4 = x[xOff + 4]; + ulong zz_7 = zz[zzOff + 7] + (zz_6 >> 32); zz_6 &= M; + ulong zz_8 = zz[zzOff + 8] + (zz_7 >> 32); zz_7 &= M; + { + zz_4 += x_4 * x_0; + w = (uint)zz_4; + zz[zzOff + 4] = (w << 1) | c; + c = w >> 31; + zz_5 += (zz_4 >> 32) + x_4 * x_1; + zz_6 += (zz_5 >> 32) + x_4 * x_2; + zz_5 &= M; + zz_7 += (zz_6 >> 32) + x_4 * x_3; + zz_6 &= M; + zz_8 += zz_7 >> 32; + zz_7 &= M; + } + + ulong x_5 = x[xOff + 5]; + ulong zz_9 = zz[zzOff + 9] + (zz_8 >> 32); zz_8 &= M; + ulong zz_10 = zz[zzOff + 10] + (zz_9 >> 32); zz_9 &= M; + { + zz_5 += x_5 * x_0; + w = (uint)zz_5; + zz[zzOff + 5] = (w << 1) | c; + c = w >> 31; + zz_6 += (zz_5 >> 32) + x_5 * x_1; + zz_7 += (zz_6 >> 32) + x_5 * x_2; + zz_6 &= M; + zz_8 += (zz_7 >> 32) + x_5 * x_3; + zz_7 &= M; + zz_9 += (zz_8 >> 32) + x_5 * x_4; + zz_8 &= M; + zz_10 += zz_9 >> 32; + zz_9 &= M; + } + + ulong x_6 = x[xOff + 6]; + ulong zz_11 = zz[zzOff + 11] + (zz_10 >> 32); zz_10 &= M; + ulong zz_12 = zz[zzOff + 12] + (zz_11 >> 32); zz_11 &= M; + { + zz_6 += x_6 * x_0; + w = (uint)zz_6; + zz[zzOff + 6] = (w << 1) | c; + c = w >> 31; + zz_7 += (zz_6 >> 32) + x_6 * x_1; + zz_8 += (zz_7 >> 32) + x_6 * x_2; + zz_7 &= M; + zz_9 += (zz_8 >> 32) + x_6 * x_3; + zz_8 &= M; + zz_10 += (zz_9 >> 32) + x_6 * x_4; + zz_9 &= M; + zz_11 += (zz_10 >> 32) + x_6 * x_5; + zz_10 &= M; + zz_12 += zz_11 >> 32; + zz_11 &= M; + } + + ulong x_7 = x[xOff + 7]; + ulong zz_13 = zz[zzOff + 13] + (zz_12 >> 32); zz_12 &= M; + ulong zz_14 = zz[zzOff + 14] + (zz_13 >> 32); zz_13 &= M; + { + zz_7 += x_7 * x_0; + w = (uint)zz_7; + zz[zzOff + 7] = (w << 1) | c; + c = w >> 31; + zz_8 += (zz_7 >> 32) + x_7 * x_1; + zz_9 += (zz_8 >> 32) + x_7 * x_2; + zz_10 += (zz_9 >> 32) + x_7 * x_3; + zz_11 += (zz_10 >> 32) + x_7 * x_4; + zz_12 += (zz_11 >> 32) + x_7 * x_5; + zz_13 += (zz_12 >> 32) + x_7 * x_6; + zz_14 += zz_13 >> 32; + } + + w = (uint)zz_8; + zz[zzOff + 8] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_9; + zz[zzOff + 9] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_10; + zz[zzOff + 10] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_11; + zz[zzOff + 11] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_12; + zz[zzOff + 12] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_13; + zz[zzOff + 13] = (w << 1) | c; + c = w >> 31; + w = (uint)zz_14; + zz[zzOff + 14] = (w << 1) | c; + c = w >> 31; + w = zz[zzOff + 15] + (uint)(zz_14 >> 32); + zz[zzOff + 15] = (w << 1) | c; + } + + public static int Sub(uint[] x, uint[] y, uint[] z) + { + long c = 0; + c += (long)x[0] - y[0]; + z[0] = (uint)c; + c >>= 32; + c += (long)x[1] - y[1]; + z[1] = (uint)c; + c >>= 32; + c += (long)x[2] - y[2]; + z[2] = (uint)c; + c >>= 32; + c += (long)x[3] - y[3]; + z[3] = (uint)c; + c >>= 32; + c += (long)x[4] - y[4]; + z[4] = (uint)c; + c >>= 32; + c += (long)x[5] - y[5]; + z[5] = (uint)c; + c >>= 32; + c += (long)x[6] - y[6]; + z[6] = (uint)c; + c >>= 32; + c += (long)x[7] - y[7]; + z[7] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int Sub(uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { + long c = 0; + c += (long)x[xOff + 0] - y[yOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (long)x[xOff + 1] - y[yOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += (long)x[xOff + 2] - y[yOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += (long)x[xOff + 3] - y[yOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + c += (long)x[xOff + 4] - y[yOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + c += (long)x[xOff + 5] - y[yOff + 5]; + z[zOff + 5] = (uint)c; + c >>= 32; + c += (long)x[xOff + 6] - y[yOff + 6]; + z[zOff + 6] = (uint)c; + c >>= 32; + c += (long)x[xOff + 7] - y[yOff + 7]; + z[zOff + 7] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int SubBothFrom(uint[] x, uint[] y, uint[] z) + { + long c = 0; + c += (long)z[0] - x[0] - y[0]; + z[0] = (uint)c; + c >>= 32; + c += (long)z[1] - x[1] - y[1]; + z[1] = (uint)c; + c >>= 32; + c += (long)z[2] - x[2] - y[2]; + z[2] = (uint)c; + c >>= 32; + c += (long)z[3] - x[3] - y[3]; + z[3] = (uint)c; + c >>= 32; + c += (long)z[4] - x[4] - y[4]; + z[4] = (uint)c; + c >>= 32; + c += (long)z[5] - x[5] - y[5]; + z[5] = (uint)c; + c >>= 32; + c += (long)z[6] - x[6] - y[6]; + z[6] = (uint)c; + c >>= 32; + c += (long)z[7] - x[7] - y[7]; + z[7] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int SubFrom(uint[] x, uint[] z) + { + long c = 0; + c += (long)z[0] - x[0]; + z[0] = (uint)c; + c >>= 32; + c += (long)z[1] - x[1]; + z[1] = (uint)c; + c >>= 32; + c += (long)z[2] - x[2]; + z[2] = (uint)c; + c >>= 32; + c += (long)z[3] - x[3]; + z[3] = (uint)c; + c >>= 32; + c += (long)z[4] - x[4]; + z[4] = (uint)c; + c >>= 32; + c += (long)z[5] - x[5]; + z[5] = (uint)c; + c >>= 32; + c += (long)z[6] - x[6]; + z[6] = (uint)c; + c >>= 32; + c += (long)z[7] - x[7]; + z[7] = (uint)c; + c >>= 32; + return (int)c; + } + + public static int SubFrom(uint[] x, int xOff, uint[] z, int zOff) + { + long c = 0; + c += (long)z[zOff + 0] - x[xOff + 0]; + z[zOff + 0] = (uint)c; + c >>= 32; + c += (long)z[zOff + 1] - x[xOff + 1]; + z[zOff + 1] = (uint)c; + c >>= 32; + c += (long)z[zOff + 2] - x[xOff + 2]; + z[zOff + 2] = (uint)c; + c >>= 32; + c += (long)z[zOff + 3] - x[xOff + 3]; + z[zOff + 3] = (uint)c; + c >>= 32; + c += (long)z[zOff + 4] - x[xOff + 4]; + z[zOff + 4] = (uint)c; + c >>= 32; + c += (long)z[zOff + 5] - x[xOff + 5]; + z[zOff + 5] = (uint)c; + c >>= 32; + c += (long)z[zOff + 6] - x[xOff + 6]; + z[zOff + 6] = (uint)c; + c >>= 32; + c += (long)z[zOff + 7] - x[xOff + 7]; + z[zOff + 7] = (uint)c; + c >>= 32; + return (int)c; + } + + public static BigInteger ToBigInteger(uint[] x) + { + byte[] bs = new byte[32]; + for (int i = 0; i < 8; ++i) + { + uint x_i = x[i]; + if (x_i != 0) + { + Pack.UInt32_To_BE(x_i, bs, (7 - i) << 2); + } + } + return new BigInteger(1, bs); + } + + public static BigInteger ToBigInteger64(ulong[] x) + { + byte[] bs = new byte[32]; + for (int i = 0; i < 4; ++i) + { + ulong x_i = x[i]; + if (x_i != 0L) + { + Pack.UInt64_To_BE(x_i, bs, (3 - i) << 3); + } + } + return new BigInteger(1, bs); + } + + public static void Xor(uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Xor(x.AsSpan(xOff), y.AsSpan(yOff), z.AsSpan(zOff)); +#else + for (int i = 0; i < 8; i += 4) + { + z[zOff + i + 0] = x[xOff + i + 0] ^ y[yOff + i + 0]; + z[zOff + i + 1] = x[xOff + i + 1] ^ y[yOff + i + 1]; + z[zOff + i + 2] = x[xOff + i + 2] ^ y[yOff + i + 2]; + z[zOff + i + 3] = x[xOff + i + 3] ^ y[yOff + i + 3]; + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Xor(ReadOnlySpan x, ReadOnlySpan y, Span z) + { +#if NETCOREAPP3_0_OR_GREATER + if (Avx2.IsSupported && Unsafe.SizeOf>() == 32) + { + var X = MemoryMarshal.AsBytes(x[..8]); + var Y = MemoryMarshal.AsBytes(y[..8]); + var Z = MemoryMarshal.AsBytes(z[..8]); + + var X0 = MemoryMarshal.Read>(X[0x00..0x20]); + var Y0 = MemoryMarshal.Read>(Y[0x00..0x20]); + + var Z0 = Avx2.Xor(X0, Y0); + + MemoryMarshal.Write(Z[0x00..0x20], ref Z0); + return; + } + + if (Sse2.IsSupported && Unsafe.SizeOf>() == 16) + { + var X = MemoryMarshal.AsBytes(x[..8]); + var Y = MemoryMarshal.AsBytes(y[..8]); + var Z = MemoryMarshal.AsBytes(z[..8]); + + var X0 = MemoryMarshal.Read>(X[0x00..0x10]); + var X1 = MemoryMarshal.Read>(X[0x10..0x20]); + + var Y0 = MemoryMarshal.Read>(Y[0x00..0x10]); + var Y1 = MemoryMarshal.Read>(Y[0x10..0x20]); + + var Z0 = Sse2.Xor(X0, Y0); + var Z1 = Sse2.Xor(X1, Y1); + + MemoryMarshal.Write(Z[0x00..0x10], ref Z0); + MemoryMarshal.Write(Z[0x10..0x20], ref Z1); + return; + } +#endif + + for (int i = 0; i < 8; i += 4) + { + z[i + 0] = x[i + 0] ^ y[i + 0]; + z[i + 1] = x[i + 1] ^ y[i + 1]; + z[i + 2] = x[i + 2] ^ y[i + 2]; + z[i + 3] = x[i + 3] ^ y[i + 3]; + } + } +#endif + + public static void Zero(uint[] z) + { + z[0] = 0; + z[1] = 0; + z[2] = 0; + z[3] = 0; + z[4] = 0; + z[5] = 0; + z[6] = 0; + z[7] = 0; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat256.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat256.cs.meta new file mode 100644 index 000000000..fc839cf72 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat256.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1d5edac25abdc924b9ca63eb7dd99f1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat320.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat320.cs new file mode 100644 index 000000000..d099d1427 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat320.cs @@ -0,0 +1,96 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw +{ + internal abstract class Nat320 + { + public static void Copy64(ulong[] x, ulong[] z) + { + z[0] = x[0]; + z[1] = x[1]; + z[2] = x[2]; + z[3] = x[3]; + z[4] = x[4]; + } + + public static void Copy64(ulong[] x, int xOff, ulong[] z, int zOff) + { + z[zOff + 0] = x[xOff + 0]; + z[zOff + 1] = x[xOff + 1]; + z[zOff + 2] = x[xOff + 2]; + z[zOff + 3] = x[xOff + 3]; + z[zOff + 4] = x[xOff + 4]; + } + + public static ulong[] Create64() + { + return new ulong[5]; + } + + public static ulong[] CreateExt64() + { + return new ulong[10]; + } + + public static bool Eq64(ulong[] x, ulong[] y) + { + for (int i = 4; i >= 0; --i) + { + if (x[i] != y[i]) + { + return false; + } + } + return true; + } + + public static bool IsOne64(ulong[] x) + { + if (x[0] != 1UL) + { + return false; + } + for (int i = 1; i < 5; ++i) + { + if (x[i] != 0UL) + { + return false; + } + } + return true; + } + + public static bool IsZero64(ulong[] x) + { + for (int i = 0; i < 5; ++i) + { + if (x[i] != 0UL) + { + return false; + } + } + return true; + } + + public static BigInteger ToBigInteger64(ulong[] x) + { + byte[] bs = new byte[40]; + for (int i = 0; i < 5; ++i) + { + ulong x_i = x[i]; + if (x_i != 0L) + { + Pack.UInt64_To_BE(x_i, bs, (4 - i) << 3); + } + } + return new BigInteger(1, bs); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat320.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat320.cs.meta new file mode 100644 index 000000000..28e147c4f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat320.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c94e76ab2033ce647ac530c37169bad0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat384.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat384.cs new file mode 100644 index 000000000..319059c9e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat384.cs @@ -0,0 +1,50 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw +{ + internal abstract class Nat384 + { + public static void Mul(uint[] x, uint[] y, uint[] zz) + { + Nat192.Mul(x, y, zz); + Nat192.Mul(x, 6, y, 6, zz, 12); + + uint c18 = Nat192.AddToEachOther(zz, 6, zz, 12); + uint c12 = c18 + Nat192.AddTo(zz, 0, zz, 6, 0); + c18 += Nat192.AddTo(zz, 18, zz, 12, c12); + + uint[] dx = Nat192.Create(), dy = Nat192.Create(); + bool neg = Nat192.Diff(x, 6, x, 0, dx, 0) != Nat192.Diff(y, 6, y, 0, dy, 0); + + uint[] tt = Nat192.CreateExt(); + Nat192.Mul(dx, dy, tt); + + c18 += neg ? Nat.AddTo(12, tt, 0, zz, 6) : (uint)Nat.SubFrom(12, tt, 0, zz, 6); + Nat.AddWordAt(24, c18, zz, 18); + } + + public static void Square(uint[] x, uint[] zz) + { + Nat192.Square(x, zz); + Nat192.Square(x, 6, zz, 12); + + uint c18 = Nat192.AddToEachOther(zz, 6, zz, 12); + uint c12 = c18 + Nat192.AddTo(zz, 0, zz, 6, 0); + c18 += Nat192.AddTo(zz, 18, zz, 12, c12); + + uint[] dx = Nat192.Create(); + Nat192.Diff(x, 6, x, 0, dx, 0); + + uint[] m = Nat192.CreateExt(); + Nat192.Square(dx, m); + + c18 += (uint)Nat.SubFrom(12, m, 0, zz, 6); + Nat.AddWordAt(24, c18, zz, 18); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat384.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat384.cs.meta new file mode 100644 index 000000000..066387358 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat384.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b8f208f66da7aca4cb1f81fb6372a923 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat448.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat448.cs new file mode 100644 index 000000000..a3ca61e5a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat448.cs @@ -0,0 +1,138 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw +{ + internal abstract class Nat448 + { + public static void Copy64(ulong[] x, ulong[] z) + { + z[0] = x[0]; + z[1] = x[1]; + z[2] = x[2]; + z[3] = x[3]; + z[4] = x[4]; + z[5] = x[5]; + z[6] = x[6]; + } + + public static void Copy64(ulong[] x, int xOff, ulong[] z, int zOff) + { + z[zOff + 0] = x[xOff + 0]; + z[zOff + 1] = x[xOff + 1]; + z[zOff + 2] = x[xOff + 2]; + z[zOff + 3] = x[xOff + 3]; + z[zOff + 4] = x[xOff + 4]; + z[zOff + 5] = x[xOff + 5]; + z[zOff + 6] = x[xOff + 6]; + } + + public static ulong[] Create64() + { + return new ulong[7]; + } + + public static ulong[] CreateExt64() + { + return new ulong[14]; + } + + public static bool Eq64(ulong[] x, ulong[] y) + { + for (int i = 6; i >= 0; --i) + { + if (x[i] != y[i]) + { + return false; + } + } + return true; + } + + public static bool IsOne64(ulong[] x) + { + if (x[0] != 1UL) + { + return false; + } + for (int i = 1; i < 7; ++i) + { + if (x[i] != 0UL) + { + return false; + } + } + return true; + } + + public static bool IsZero64(ulong[] x) + { + for (int i = 0; i < 7; ++i) + { + if (x[i] != 0UL) + { + return false; + } + } + return true; + } + + public static void Mul(uint[] x, uint[] y, uint[] zz) + { + Nat224.Mul(x, y, zz); + Nat224.Mul(x, 7, y, 7, zz, 14); + + uint c21 = Nat224.AddToEachOther(zz, 7, zz, 14); + uint c14 = c21 + Nat224.AddTo(zz, 0, zz, 7, 0); + c21 += Nat224.AddTo(zz, 21, zz, 14, c14); + + uint[] dx = Nat224.Create(), dy = Nat224.Create(); + bool neg = Nat224.Diff(x, 7, x, 0, dx, 0) != Nat224.Diff(y, 7, y, 0, dy, 0); + + uint[] tt = Nat224.CreateExt(); + Nat224.Mul(dx, dy, tt); + + c21 += neg ? Nat.AddTo(14, tt, 0, zz, 7) : (uint)Nat.SubFrom(14, tt, 0, zz, 7); + Nat.AddWordAt(28, c21, zz, 21); + } + + public static void Square(uint[] x, uint[] zz) + { + Nat224.Square(x, zz); + Nat224.Square(x, 7, zz, 14); + + uint c21 = Nat224.AddToEachOther(zz, 7, zz, 14); + uint c14 = c21 + Nat224.AddTo(zz, 0, zz, 7, 0); + c21 += Nat224.AddTo(zz, 21, zz, 14, c14); + + uint[] dx = Nat224.Create(); + Nat224.Diff(x, 7, x, 0, dx, 0); + + uint[] tt = Nat224.CreateExt(); + Nat224.Square(dx, tt); + + c21 += (uint)Nat.SubFrom(14, tt, 0, zz, 7); + Nat.AddWordAt(28, c21, zz, 21); + } + + public static BigInteger ToBigInteger64(ulong[] x) + { + byte[] bs = new byte[56]; + for (int i = 0; i < 7; ++i) + { + ulong x_i = x[i]; + if (x_i != 0L) + { + Pack.UInt64_To_BE(x_i, bs, (6 - i) << 3); + } + } + return new BigInteger(1, bs); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat448.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat448.cs.meta new file mode 100644 index 000000000..7df657364 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat448.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 231f62a2e5d95c64fb1438455bacbe41 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat512.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat512.cs new file mode 100644 index 000000000..c8258971c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat512.cs @@ -0,0 +1,363 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +#if NETCOREAPP3_0_OR_GREATER +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw +{ + internal abstract class Nat512 + { + public static void Mul(uint[] x, uint[] y, uint[] zz) + { + Nat256.Mul(x, y, zz); + Nat256.Mul(x, 8, y, 8, zz, 16); + + uint c24 = Nat256.AddToEachOther(zz, 8, zz, 16); + uint c16 = c24 + Nat256.AddTo(zz, 0, zz, 8, 0); + c24 += Nat256.AddTo(zz, 24, zz, 16, c16); + + uint[] dx = Nat256.Create(), dy = Nat256.Create(); + bool neg = Nat256.Diff(x, 8, x, 0, dx, 0) != Nat256.Diff(y, 8, y, 0, dy, 0); + + uint[] tt = Nat256.CreateExt(); + Nat256.Mul(dx, dy, tt); + + c24 += neg ? Nat.AddTo(16, tt, 0, zz, 8) : (uint)Nat.SubFrom(16, tt, 0, zz, 8); + Nat.AddWordAt(32, c24, zz, 24); + } + + public static void Square(uint[] x, uint[] zz) + { + Nat256.Square(x, zz); + Nat256.Square(x, 8, zz, 16); + + uint c24 = Nat256.AddToEachOther(zz, 8, zz, 16); + uint c16 = c24 + Nat256.AddTo(zz, 0, zz, 8, 0); + c24 += Nat256.AddTo(zz, 24, zz, 16, c16); + + uint[] dx = Nat256.Create(); + Nat256.Diff(x, 8, x, 0, dx, 0); + + uint[] m = Nat256.CreateExt(); + Nat256.Square(dx, m); + + c24 += (uint)Nat.SubFrom(16, m, 0, zz, 8); + Nat.AddWordAt(32, c24, zz, 24); + } + + public static void Xor(uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Xor(x.AsSpan(xOff), y.AsSpan(yOff), z.AsSpan(zOff)); +#else + for (int i = 0; i < 16; i += 4) + { + z[zOff + i + 0] = x[xOff + i + 0] ^ y[yOff + i + 0]; + z[zOff + i + 1] = x[xOff + i + 1] ^ y[yOff + i + 1]; + z[zOff + i + 2] = x[xOff + i + 2] ^ y[yOff + i + 2]; + z[zOff + i + 3] = x[xOff + i + 3] ^ y[yOff + i + 3]; + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Xor(ReadOnlySpan x, ReadOnlySpan y, Span z) + { +#if NETCOREAPP3_0_OR_GREATER + if (Avx2.IsSupported && Unsafe.SizeOf>() == 32) + { + var X = MemoryMarshal.AsBytes(x[..16]); + var Y = MemoryMarshal.AsBytes(y[..16]); + var Z = MemoryMarshal.AsBytes(z[..16]); + + var X0 = MemoryMarshal.Read>(X[0x00..0x20]); + var X1 = MemoryMarshal.Read>(X[0x20..0x40]); + + var Y0 = MemoryMarshal.Read>(Y[0x00..0x20]); + var Y1 = MemoryMarshal.Read>(Y[0x20..0x40]); + + var Z0 = Avx2.Xor(X0, Y0); + var Z1 = Avx2.Xor(X1, Y1); + + MemoryMarshal.Write(Z[0x00..0x20], ref Z0); + MemoryMarshal.Write(Z[0x20..0x40], ref Z1); + return; + } + + if (Sse2.IsSupported && Unsafe.SizeOf>() == 16) + { + var X = MemoryMarshal.AsBytes(x[..16]); + var Y = MemoryMarshal.AsBytes(y[..16]); + var Z = MemoryMarshal.AsBytes(z[..16]); + + var X0 = MemoryMarshal.Read>(X[0x00..0x10]); + var X1 = MemoryMarshal.Read>(X[0x10..0x20]); + var X2 = MemoryMarshal.Read>(X[0x20..0x30]); + var X3 = MemoryMarshal.Read>(X[0x30..0x40]); + + var Y0 = MemoryMarshal.Read>(Y[0x00..0x10]); + var Y1 = MemoryMarshal.Read>(Y[0x10..0x20]); + var Y2 = MemoryMarshal.Read>(Y[0x20..0x30]); + var Y3 = MemoryMarshal.Read>(Y[0x30..0x40]); + + var Z0 = Sse2.Xor(X0, Y0); + var Z1 = Sse2.Xor(X1, Y1); + var Z2 = Sse2.Xor(X2, Y2); + var Z3 = Sse2.Xor(X3, Y3); + + MemoryMarshal.Write(Z[0x00..0x10], ref Z0); + MemoryMarshal.Write(Z[0x10..0x20], ref Z1); + MemoryMarshal.Write(Z[0x20..0x30], ref Z2); + MemoryMarshal.Write(Z[0x30..0x40], ref Z3); + return; + } +#endif + + for (int i = 0; i < 16; i += 4) + { + z[i + 0] = x[i + 0] ^ y[i + 0]; + z[i + 1] = x[i + 1] ^ y[i + 1]; + z[i + 2] = x[i + 2] ^ y[i + 2]; + z[i + 3] = x[i + 3] ^ y[i + 3]; + } + } +#endif + + public static void XorTo(uint[] x, int xOff, uint[] z, int zOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + XorTo(x.AsSpan(xOff), z.AsSpan(zOff)); +#else + for (int i = 0; i < 16; i += 4) + { + z[zOff + i + 0] ^= x[xOff + i + 0]; + z[zOff + i + 1] ^= x[xOff + i + 1]; + z[zOff + i + 2] ^= x[xOff + i + 2]; + z[zOff + i + 3] ^= x[xOff + i + 3]; + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void XorTo(ReadOnlySpan x, Span z) + { +#if NETCOREAPP3_0_OR_GREATER + if (Avx2.IsSupported && Unsafe.SizeOf>() == 32) + { + var X = MemoryMarshal.AsBytes(x[..16]); + var Z = MemoryMarshal.AsBytes(z[..16]); + + var X0 = MemoryMarshal.Read>(X[0x00..0x20]); + var X1 = MemoryMarshal.Read>(X[0x20..0x40]); + + var Y0 = MemoryMarshal.Read>(Z[0x00..0x20]); + var Y1 = MemoryMarshal.Read>(Z[0x20..0x40]); + + var Z0 = Avx2.Xor(X0, Y0); + var Z1 = Avx2.Xor(X1, Y1); + + MemoryMarshal.Write(Z[0x00..0x20], ref Z0); + MemoryMarshal.Write(Z[0x20..0x40], ref Z1); + return; + } + + if (Sse2.IsSupported && Unsafe.SizeOf>() == 16) + { + var X = MemoryMarshal.AsBytes(x[..16]); + var Z = MemoryMarshal.AsBytes(z[..16]); + + var X0 = MemoryMarshal.Read>(X[0x00..0x10]); + var X1 = MemoryMarshal.Read>(X[0x10..0x20]); + var X2 = MemoryMarshal.Read>(X[0x20..0x30]); + var X3 = MemoryMarshal.Read>(X[0x30..0x40]); + + var Y0 = MemoryMarshal.Read>(Z[0x00..0x10]); + var Y1 = MemoryMarshal.Read>(Z[0x10..0x20]); + var Y2 = MemoryMarshal.Read>(Z[0x20..0x30]); + var Y3 = MemoryMarshal.Read>(Z[0x30..0x40]); + + var Z0 = Sse2.Xor(X0, Y0); + var Z1 = Sse2.Xor(X1, Y1); + var Z2 = Sse2.Xor(X2, Y2); + var Z3 = Sse2.Xor(X3, Y3); + + MemoryMarshal.Write(Z[0x00..0x10], ref Z0); + MemoryMarshal.Write(Z[0x10..0x20], ref Z1); + MemoryMarshal.Write(Z[0x20..0x30], ref Z2); + MemoryMarshal.Write(Z[0x30..0x40], ref Z3); + return; + } +#endif + + for (int i = 0; i < 16; i += 4) + { + z[i + 0] ^= x[i + 0]; + z[i + 1] ^= x[i + 1]; + z[i + 2] ^= x[i + 2]; + z[i + 3] ^= x[i + 3]; + } + } +#endif + + public static void Xor64(ulong[] x, int xOff, ulong[] y, int yOff, ulong[] z, int zOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Xor64(x.AsSpan(xOff), y.AsSpan(yOff), z.AsSpan(zOff)); +#else + for (int i = 0; i < 8; i += 4) + { + z[zOff + i + 0] = x[xOff + i + 0] ^ y[yOff + i + 0]; + z[zOff + i + 1] = x[xOff + i + 1] ^ y[yOff + i + 1]; + z[zOff + i + 2] = x[xOff + i + 2] ^ y[yOff + i + 2]; + z[zOff + i + 3] = x[xOff + i + 3] ^ y[yOff + i + 3]; + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Xor64(ReadOnlySpan x, ReadOnlySpan y, Span z) + { +#if NETCOREAPP3_0_OR_GREATER + if (Avx2.IsSupported && Unsafe.SizeOf>() == 32) + { + var X = MemoryMarshal.AsBytes(x[..8]); + var Y = MemoryMarshal.AsBytes(y[..8]); + var Z = MemoryMarshal.AsBytes(z[..8]); + + var X0 = MemoryMarshal.Read>(X[0x00..0x20]); + var X1 = MemoryMarshal.Read>(X[0x20..0x40]); + + var Y0 = MemoryMarshal.Read>(Y[0x00..0x20]); + var Y1 = MemoryMarshal.Read>(Y[0x20..0x40]); + + var Z0 = Avx2.Xor(X0, Y0); + var Z1 = Avx2.Xor(X1, Y1); + + MemoryMarshal.Write(Z[0x00..0x20], ref Z0); + MemoryMarshal.Write(Z[0x20..0x40], ref Z1); + return; + } + + if (Sse2.IsSupported && Unsafe.SizeOf>() == 16) + { + var X = MemoryMarshal.AsBytes(x[..8]); + var Y = MemoryMarshal.AsBytes(y[..8]); + var Z = MemoryMarshal.AsBytes(z[..8]); + + var X0 = MemoryMarshal.Read>(X[0x00..0x10]); + var X1 = MemoryMarshal.Read>(X[0x10..0x20]); + var X2 = MemoryMarshal.Read>(X[0x20..0x30]); + var X3 = MemoryMarshal.Read>(X[0x30..0x40]); + + var Y0 = MemoryMarshal.Read>(Y[0x00..0x10]); + var Y1 = MemoryMarshal.Read>(Y[0x10..0x20]); + var Y2 = MemoryMarshal.Read>(Y[0x20..0x30]); + var Y3 = MemoryMarshal.Read>(Y[0x30..0x40]); + + var Z0 = Sse2.Xor(X0, Y0); + var Z1 = Sse2.Xor(X1, Y1); + var Z2 = Sse2.Xor(X2, Y2); + var Z3 = Sse2.Xor(X3, Y3); + + MemoryMarshal.Write(Z[0x00..0x10], ref Z0); + MemoryMarshal.Write(Z[0x10..0x20], ref Z1); + MemoryMarshal.Write(Z[0x20..0x30], ref Z2); + MemoryMarshal.Write(Z[0x30..0x40], ref Z3); + return; + } +#endif + + for (int i = 0; i < 8; i += 4) + { + z[i + 0] = x[i + 0] ^ y[i + 0]; + z[i + 1] = x[i + 1] ^ y[i + 1]; + z[i + 2] = x[i + 2] ^ y[i + 2]; + z[i + 3] = x[i + 3] ^ y[i + 3]; + } + } +#endif + + public static void XorTo64(ulong[] x, int xOff, ulong[] z, int zOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + XorTo64(x.AsSpan(xOff), z.AsSpan(zOff)); +#else + for (int i = 0; i < 8; i += 4) + { + z[zOff + i + 0] ^= x[xOff + i + 0]; + z[zOff + i + 1] ^= x[xOff + i + 1]; + z[zOff + i + 2] ^= x[xOff + i + 2]; + z[zOff + i + 3] ^= x[xOff + i + 3]; + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void XorTo64(ReadOnlySpan x, Span z) + { +#if NETCOREAPP3_0_OR_GREATER + if (Avx2.IsSupported && Unsafe.SizeOf>() == 32) + { + var X = MemoryMarshal.AsBytes(x[..8]); + var Z = MemoryMarshal.AsBytes(z[..8]); + + var X0 = MemoryMarshal.Read>(X[0x00..0x20]); + var X1 = MemoryMarshal.Read>(X[0x20..0x40]); + + var Y0 = MemoryMarshal.Read>(Z[0x00..0x20]); + var Y1 = MemoryMarshal.Read>(Z[0x20..0x40]); + + var Z0 = Avx2.Xor(X0, Y0); + var Z1 = Avx2.Xor(X1, Y1); + + MemoryMarshal.Write(Z[0x00..0x20], ref Z0); + MemoryMarshal.Write(Z[0x20..0x40], ref Z1); + return; + } + + if (Sse2.IsSupported && Unsafe.SizeOf>() == 16) + { + var X = MemoryMarshal.AsBytes(x[..8]); + var Z = MemoryMarshal.AsBytes(z[..8]); + + var X0 = MemoryMarshal.Read>(X[0x00..0x10]); + var X1 = MemoryMarshal.Read>(X[0x10..0x20]); + var X2 = MemoryMarshal.Read>(X[0x20..0x30]); + var X3 = MemoryMarshal.Read>(X[0x30..0x40]); + + var Y0 = MemoryMarshal.Read>(Z[0x00..0x10]); + var Y1 = MemoryMarshal.Read>(Z[0x10..0x20]); + var Y2 = MemoryMarshal.Read>(Z[0x20..0x30]); + var Y3 = MemoryMarshal.Read>(Z[0x30..0x40]); + + var Z0 = Sse2.Xor(X0, Y0); + var Z1 = Sse2.Xor(X1, Y1); + var Z2 = Sse2.Xor(X2, Y2); + var Z3 = Sse2.Xor(X3, Y3); + + MemoryMarshal.Write(Z[0x00..0x10], ref Z0); + MemoryMarshal.Write(Z[0x10..0x20], ref Z1); + MemoryMarshal.Write(Z[0x20..0x30], ref Z2); + MemoryMarshal.Write(Z[0x30..0x40], ref Z3); + return; + } +#endif + + for (int i = 0; i < 8; i += 4) + { + z[i + 0] ^= x[i + 0]; + z[i + 1] ^= x[i + 1]; + z[i + 2] ^= x[i + 2]; + z[i + 3] ^= x[i + 3]; + } + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat512.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat512.cs.meta new file mode 100644 index 000000000..3fafba959 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat512.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd7393016f16a6e429e8e32080996fb4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat576.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat576.cs new file mode 100644 index 000000000..762febab2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat576.cs @@ -0,0 +1,104 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw +{ + internal abstract class Nat576 + { + public static void Copy64(ulong[] x, ulong[] z) + { + z[0] = x[0]; + z[1] = x[1]; + z[2] = x[2]; + z[3] = x[3]; + z[4] = x[4]; + z[5] = x[5]; + z[6] = x[6]; + z[7] = x[7]; + z[8] = x[8]; + } + + public static void Copy64(ulong[] x, int xOff, ulong[] z, int zOff) + { + z[zOff + 0] = x[xOff + 0]; + z[zOff + 1] = x[xOff + 1]; + z[zOff + 2] = x[xOff + 2]; + z[zOff + 3] = x[xOff + 3]; + z[zOff + 4] = x[xOff + 4]; + z[zOff + 5] = x[xOff + 5]; + z[zOff + 6] = x[xOff + 6]; + z[zOff + 7] = x[xOff + 7]; + z[zOff + 8] = x[xOff + 8]; + } + + public static ulong[] Create64() + { + return new ulong[9]; + } + + public static ulong[] CreateExt64() + { + return new ulong[18]; + } + + public static bool Eq64(ulong[] x, ulong[] y) + { + for (int i = 8; i >= 0; --i) + { + if (x[i] != y[i]) + { + return false; + } + } + return true; + } + + public static bool IsOne64(ulong[] x) + { + if (x[0] != 1UL) + { + return false; + } + for (int i = 1; i < 9; ++i) + { + if (x[i] != 0UL) + { + return false; + } + } + return true; + } + + public static bool IsZero64(ulong[] x) + { + for (int i = 0; i < 9; ++i) + { + if (x[i] != 0UL) + { + return false; + } + } + return true; + } + + public static BigInteger ToBigInteger64(ulong[] x) + { + byte[] bs = new byte[72]; + for (int i = 0; i < 9; ++i) + { + ulong x_i = x[i]; + if (x_i != 0L) + { + Pack.UInt64_To_BE(x_i, bs, (8 - i) << 3); + } + } + return new BigInteger(1, bs); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat576.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat576.cs.meta new file mode 100644 index 000000000..b9cbe873c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/math/raw/Nat576.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac3cde8a54f23264c80a50850766fe5a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp.meta new file mode 100644 index 000000000..29ed67eda --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 516c3f05851fb4f418aae5d21a088d67 +folderAsset: yes +timeCreated: 1547039641 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/BasicOCSPResp.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/BasicOCSPResp.cs new file mode 100644 index 000000000..ea92eef4c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/BasicOCSPResp.cs @@ -0,0 +1,192 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp +{ + /// + /// + /// BasicOcspResponse ::= SEQUENCE { + /// tbsResponseData ResponseData, + /// signatureAlgorithm AlgorithmIdentifier, + /// signature BIT STRING, + /// certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL + /// } + /// + /// + public class BasicOcspResp + : X509ExtensionBase + { + private readonly BasicOcspResponse resp; + private readonly ResponseData data; +// private readonly X509Certificate[] chain; + + public BasicOcspResp( + BasicOcspResponse resp) + { + this.resp = resp; + this.data = resp.TbsResponseData; + } + + /// The DER encoding of the tbsResponseData field. + /// In the event of an encoding error. + public byte[] GetTbsResponseData() + { + try + { + return data.GetDerEncoded(); + } + catch (IOException e) + { + throw new OcspException("problem encoding tbsResponseData", e); + } + } + + public int Version + { + get { return data.Version.IntValueExact + 1; } + } + + public RespID ResponderId + { + get { return new RespID(data.ResponderID); } + } + + public DateTime ProducedAt + { + get { return data.ProducedAt.ToDateTime(); } + } + + public SingleResp[] Responses + { + get + { + Asn1Sequence s = data.Responses; + SingleResp[] rs = new SingleResp[s.Count]; + + for (int i = 0; i != rs.Length; i++) + { + rs[i] = new SingleResp(SingleResponse.GetInstance(s[i])); + } + + return rs; + } + } + + public X509Extensions ResponseExtensions + { + get { return data.ResponseExtensions; } + } + + protected override X509Extensions GetX509Extensions() + { + return ResponseExtensions; + } + + public string SignatureAlgName + { + get { return OcspUtilities.GetAlgorithmName(resp.SignatureAlgorithm.Algorithm); } + } + + public string SignatureAlgOid + { + get { return resp.SignatureAlgorithm.Algorithm.Id; } + } + + public byte[] GetSignature() + { + return resp.GetSignatureOctets(); + } + + private List GetCertList() + { + // load the certificates if we have any + + var result = new List(); + + Asn1Sequence certs = resp.Certs; + if (certs != null) + { + foreach (Asn1Encodable ae in certs) + { + if (ae != null && ae.ToAsn1Object() is Asn1Sequence s) + { + result.Add(new X509Certificate(X509CertificateStructure.GetInstance(s))); + } + } + } + + return result; + } + + public X509Certificate[] GetCerts() + { + return GetCertList().ToArray(); + } + + /// The certificates, if any, associated with the response. + /// In the event of an encoding error. + public IStore GetCertificates() + { + return CollectionUtilities.CreateStore(this.GetCertList()); + } + + /// + /// Verify the signature against the tbsResponseData object we contain. + /// + public bool Verify( + AsymmetricKeyParameter publicKey) + { + try + { + ISigner signature = SignerUtilities.GetSigner(this.SignatureAlgName); + signature.Init(false, publicKey); + byte[] bs = data.GetDerEncoded(); + signature.BlockUpdate(bs, 0, bs.Length); + + return signature.VerifySignature(this.GetSignature()); + } + catch (Exception e) + { + throw new OcspException("exception processing sig: " + e, e); + } + } + + /// The ASN.1 encoded representation of this object. + public byte[] GetEncoded() + { + return resp.GetEncoded(); + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + BasicOcspResp other = obj as BasicOcspResp; + + if (other == null) + return false; + + return resp.Equals(other.resp); + } + + public override int GetHashCode() + { + return resp.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/BasicOCSPResp.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/BasicOCSPResp.cs.meta new file mode 100644 index 000000000..adbbf58ae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/BasicOCSPResp.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2617f7006c85dd44d864e1c11fe6ca73 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/BasicOCSPRespGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/BasicOCSPRespGenerator.cs new file mode 100644 index 000000000..635fdbc5d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/BasicOCSPRespGenerator.cs @@ -0,0 +1,294 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp +{ + /** + * Generator for basic OCSP response objects. + */ + public class BasicOcspRespGenerator + { + private readonly List list = new List(); + + private X509Extensions responseExtensions; + private RespID responderID; + + private class ResponseObject + { + internal CertificateID certId; + internal CertStatus certStatus; + internal Asn1GeneralizedTime thisUpdate; + internal Asn1GeneralizedTime nextUpdate; + internal X509Extensions extensions; + + internal ResponseObject( + CertificateID certId, + CertificateStatus certStatus, + DateTime thisUpdate, + DateTime? nextUpdate, + X509Extensions extensions) + { + this.certId = certId; + + if (certStatus == null) + { + this.certStatus = new CertStatus(); + } + else if (certStatus is UnknownStatus) + { + this.certStatus = new CertStatus(2, DerNull.Instance); + } + else + { + RevokedStatus rs = (RevokedStatus) certStatus; + CrlReason revocationReason = rs.HasRevocationReason + ? new CrlReason(rs.RevocationReason) + : null; + + this.certStatus = new CertStatus( + new RevokedInfo(new Asn1GeneralizedTime(rs.RevocationTime), revocationReason)); + } + + this.thisUpdate = new DerGeneralizedTime(thisUpdate); + this.nextUpdate = nextUpdate.HasValue ? new DerGeneralizedTime(nextUpdate.Value) : null; + + this.extensions = extensions; + } + + public SingleResponse ToResponse() + { + return new SingleResponse(certId.ToAsn1Object(), certStatus, thisUpdate, nextUpdate, extensions); + } + } + + /** + * basic constructor + */ + public BasicOcspRespGenerator( + RespID responderID) + { + this.responderID = responderID; + } + + /** + * construct with the responderID to be the SHA-1 keyHash of the passed in public key. + */ + public BasicOcspRespGenerator( + AsymmetricKeyParameter publicKey) + { + this.responderID = new RespID(publicKey); + } + + /** + * Add a response for a particular Certificate ID. + * + * @param certID certificate ID details + * @param certStatus status of the certificate - null if okay + */ + public void AddResponse( + CertificateID certID, + CertificateStatus certStatus) + { + list.Add(new ResponseObject(certID, certStatus, DateTime.UtcNow, null, null)); + } + + /** + * Add a response for a particular Certificate ID. + * + * @param certID certificate ID details + * @param certStatus status of the certificate - null if okay + * @param singleExtensions optional extensions + */ + public void AddResponse( + CertificateID certID, + CertificateStatus certStatus, + X509Extensions singleExtensions) + { + list.Add(new ResponseObject(certID, certStatus, DateTime.UtcNow, null, singleExtensions)); + } + + /** + * Add a response for a particular Certificate ID. + * + * @param certID certificate ID details + * @param nextUpdate date when next update should be requested + * @param certStatus status of the certificate - null if okay + * @param singleExtensions optional extensions + */ + public void AddResponse( + CertificateID certID, + CertificateStatus certStatus, + DateTime? nextUpdate, + X509Extensions singleExtensions) + { + list.Add(new ResponseObject(certID, certStatus, DateTime.UtcNow, nextUpdate, singleExtensions)); + } + + /** + * Add a response for a particular Certificate ID. + * + * @param certID certificate ID details + * @param thisUpdate date this response was valid on + * @param nextUpdate date when next update should be requested + * @param certStatus status of the certificate - null if okay + * @param singleExtensions optional extensions + */ + public void AddResponse( + CertificateID certID, + CertificateStatus certStatus, + DateTime thisUpdate, + DateTime? nextUpdate, + X509Extensions singleExtensions) + { + list.Add(new ResponseObject(certID, certStatus, thisUpdate, nextUpdate, singleExtensions)); + } + + /** + * Set the extensions for the response. + * + * @param responseExtensions the extension object to carry. + */ + public void SetResponseExtensions( + X509Extensions responseExtensions) + { + this.responseExtensions = responseExtensions; + } + + private BasicOcspResp GenerateResponse( + ISignatureFactory signatureCalculator, + X509Certificate[] chain, + DateTime producedAt) + { + AlgorithmIdentifier signingAlgID = (AlgorithmIdentifier)signatureCalculator.AlgorithmDetails; + DerObjectIdentifier signingAlgorithm = signingAlgID.Algorithm; + + Asn1EncodableVector responses = new Asn1EncodableVector(); + + foreach (ResponseObject respObj in list) + { + try + { + responses.Add(respObj.ToResponse()); + } + catch (Exception e) + { + throw new OcspException("exception creating Request", e); + } + } + + ResponseData tbsResp = new ResponseData(responderID.ToAsn1Object(), new Asn1GeneralizedTime(producedAt), + new DerSequence(responses), responseExtensions); + DerBitString bitSig; + + try + { + IStreamCalculator streamCalculator = signatureCalculator.CreateCalculator(); + using (Stream sigStream = streamCalculator.Stream) + { + tbsResp.EncodeTo(sigStream, Asn1Encodable.Der); + } + + bitSig = new DerBitString(streamCalculator.GetResult().Collect()); + } + catch (Exception e) + { + throw new OcspException("exception processing TBSRequest: " + e, e); + } + + AlgorithmIdentifier sigAlgId = OcspUtilities.GetSigAlgID(signingAlgorithm); + + DerSequence chainSeq = null; + if (chain != null && chain.Length > 0) + { + Asn1EncodableVector v = new Asn1EncodableVector(chain.Length); + try + { + for (int i = 0; i != chain.Length; i++) + { + v.Add(chain[i].CertificateStructure); + } + } + catch (IOException e) + { + throw new OcspException("error processing certs", e); + } + catch (CertificateEncodingException e) + { + throw new OcspException("error encoding certs", e); + } + + chainSeq = new DerSequence(v); + } + + return new BasicOcspResp(new BasicOcspResponse(tbsResp, sigAlgId, bitSig, chainSeq)); + } + + public BasicOcspResp Generate( + string signingAlgorithm, + AsymmetricKeyParameter privateKey, + X509Certificate[] chain, + DateTime thisUpdate) + { + return Generate(signingAlgorithm, privateKey, chain, thisUpdate, null); + } + + public BasicOcspResp Generate( + string signingAlgorithm, + AsymmetricKeyParameter privateKey, + X509Certificate[] chain, + DateTime producedAt, + SecureRandom random) + { + if (signingAlgorithm == null) + { + throw new ArgumentException("no signing algorithm specified"); + } + + return GenerateResponse(new Asn1SignatureFactory(signingAlgorithm, privateKey, random), chain, producedAt); + } + + /// + /// Generate the signed response using the passed in signature calculator. + /// + /// Implementation of signing calculator factory. + /// The certificate chain associated with the response signer. + /// "produced at" date. + /// + public BasicOcspResp Generate( + ISignatureFactory signatureCalculatorFactory, + X509Certificate[] chain, + DateTime producedAt) + { + if (signatureCalculatorFactory == null) + { + throw new ArgumentException("no signature calculator specified"); + } + + return GenerateResponse(signatureCalculatorFactory, chain, producedAt); + } + + /** + * Return an IEnumerable of the signature names supported by the generator. + * + * @return an IEnumerable containing recognised names. + */ + public IEnumerable SignatureAlgNames + { + get { return OcspUtilities.AlgNames; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/BasicOCSPRespGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/BasicOCSPRespGenerator.cs.meta new file mode 100644 index 000000000..e09f77cd6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/BasicOCSPRespGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a4a4f1ab3630e2c4d84a48f911528701 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/CertificateID.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/CertificateID.cs new file mode 100644 index 000000000..850ceb922 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/CertificateID.cs @@ -0,0 +1,145 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp +{ + public class CertificateID + { + public const string HashSha1 = "1.3.14.3.2.26"; + + private readonly CertID id; + + public CertificateID( + CertID id) + { + if (id == null) + throw new ArgumentNullException("id"); + + this.id = id; + } + + /** + * create from an issuer certificate and the serial number of the + * certificate it signed. + * @exception OcspException if any problems occur creating the id fields. + */ + public CertificateID( + string hashAlgorithm, + X509Certificate issuerCert, + BigInteger serialNumber) + { + AlgorithmIdentifier hashAlg = new AlgorithmIdentifier( + new DerObjectIdentifier(hashAlgorithm), DerNull.Instance); + + this.id = CreateCertID(hashAlg, issuerCert, new DerInteger(serialNumber)); + } + + public string HashAlgOid + { + get { return id.HashAlgorithm.Algorithm.Id; } + } + + public byte[] GetIssuerNameHash() + { + return id.IssuerNameHash.GetOctets(); + } + + public byte[] GetIssuerKeyHash() + { + return id.IssuerKeyHash.GetOctets(); + } + + /** + * return the serial number for the certificate associated + * with this request. + */ + public BigInteger SerialNumber + { + get { return id.SerialNumber.Value; } + } + + public bool MatchesIssuer( + X509Certificate issuerCert) + { + return CreateCertID(id.HashAlgorithm, issuerCert, id.SerialNumber).Equals(id); + } + + public CertID ToAsn1Object() + { + return id; + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + CertificateID other = obj as CertificateID; + + if (other == null) + return false; + + return id.ToAsn1Object().Equals(other.id.ToAsn1Object()); + } + + public override int GetHashCode() + { + return id.ToAsn1Object().GetHashCode(); + } + + + /** + * Create a new CertificateID for a new serial number derived from a previous one + * calculated for the same CA certificate. + * + * @param original the previously calculated CertificateID for the CA. + * @param newSerialNumber the serial number for the new certificate of interest. + * + * @return a new CertificateID for newSerialNumber + */ + public static CertificateID DeriveCertificateID(CertificateID original, BigInteger newSerialNumber) + { + return new CertificateID(new CertID(original.id.HashAlgorithm, original.id.IssuerNameHash, + original.id.IssuerKeyHash, new DerInteger(newSerialNumber))); + } + + private static CertID CreateCertID( + AlgorithmIdentifier hashAlg, + X509Certificate issuerCert, + DerInteger serialNumber) + { + try + { + string hashAlgorithm = hashAlg.Algorithm.Id; + + X509Name issuerName = PrincipalUtilities.GetSubjectX509Principal(issuerCert); + byte[] issuerNameHash = DigestUtilities.CalculateDigest( + hashAlgorithm, issuerName.GetEncoded()); + + AsymmetricKeyParameter issuerKey = issuerCert.GetPublicKey(); + SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(issuerKey); + byte[] issuerKeyHash = DigestUtilities.CalculateDigest( + hashAlgorithm, info.PublicKeyData.GetBytes()); + + return new CertID(hashAlg, new DerOctetString(issuerNameHash), + new DerOctetString(issuerKeyHash), serialNumber); + } + catch (Exception e) + { + throw new OcspException("problem creating ID: " + e, e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/CertificateID.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/CertificateID.cs.meta new file mode 100644 index 000000000..8511a6b5c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/CertificateID.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a898aa4304e51464a8070aa0e95b80fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/CertificateStatus.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/CertificateStatus.cs new file mode 100644 index 000000000..0cc6753e2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/CertificateStatus.cs @@ -0,0 +1,13 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp +{ + public abstract class CertificateStatus + { + public static readonly CertificateStatus Good = null; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/CertificateStatus.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/CertificateStatus.cs.meta new file mode 100644 index 000000000..eb63f6f06 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/CertificateStatus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 32c0717bda040f94a96b47918ac8e69b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPException.cs new file mode 100644 index 000000000..c77acb3ee --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp +{ + [Serializable] + public class OcspException + : Exception + { + public OcspException() + : base() + { + } + + public OcspException(string message) + : base(message) + { + } + + public OcspException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected OcspException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPException.cs.meta new file mode 100644 index 000000000..d97f16f9b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7666ba2ef3fc4e44b94423593baebf5e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPReq.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPReq.cs new file mode 100644 index 000000000..2b76681d6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPReq.cs @@ -0,0 +1,250 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp +{ + /** + *
    +	 * OcspRequest     ::=     SEQUENCE {
    +	 *       tbsRequest                  TBSRequest,
    +	 *       optionalSignature   [0]     EXPLICIT Signature OPTIONAL }
    +	 *
    +	 *   TBSRequest      ::=     SEQUENCE {
    +	 *       version             [0]     EXPLICIT Version DEFAULT v1,
    +	 *       requestorName       [1]     EXPLICIT GeneralName OPTIONAL,
    +	 *       requestList                 SEQUENCE OF Request,
    +	 *       requestExtensions   [2]     EXPLICIT Extensions OPTIONAL }
    +	 *
    +	 *   Signature       ::=     SEQUENCE {
    +	 *       signatureAlgorithm      AlgorithmIdentifier,
    +	 *       signature               BIT STRING,
    +	 *       certs               [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL}
    +	 *
    +	 *   Version         ::=             INTEGER  {  v1(0) }
    +	 *
    +	 *   Request         ::=     SEQUENCE {
    +	 *       reqCert                     CertID,
    +	 *       singleRequestExtensions     [0] EXPLICIT Extensions OPTIONAL }
    +	 *
    +	 *   CertID          ::=     SEQUENCE {
    +	 *       hashAlgorithm       AlgorithmIdentifier,
    +	 *       issuerNameHash      OCTET STRING, -- Hash of Issuer's DN
    +	 *       issuerKeyHash       OCTET STRING, -- Hash of Issuers public key
    +	 *       serialNumber        CertificateSerialNumber }
    +	 * 
    + */ + public class OcspReq + : X509ExtensionBase + { + private OcspRequest req; + + public OcspReq( + OcspRequest req) + { + this.req = req; + } + + public OcspReq( + byte[] req) + : this(new Asn1InputStream(req)) + { + } + + public OcspReq( + Stream inStr) + : this(new Asn1InputStream(inStr)) + { + } + + private OcspReq( + Asn1InputStream aIn) + { + try + { + this.req = OcspRequest.GetInstance(aIn.ReadObject()); + } + catch (ArgumentException e) + { + throw new IOException("malformed request: " + e.Message); + } + catch (InvalidCastException e) + { + throw new IOException("malformed request: " + e.Message); + } + } + + /** + * Return the DER encoding of the tbsRequest field. + * @return DER encoding of tbsRequest + * @throws OcspException in the event of an encoding error. + */ + public byte[] GetTbsRequest() + { + try + { + return req.TbsRequest.GetEncoded(); + } + catch (IOException e) + { + throw new OcspException("problem encoding tbsRequest", e); + } + } + + public int Version + { + get { return req.TbsRequest.Version.IntValueExact + 1; } + } + + public GeneralName RequestorName + { + get { return GeneralName.GetInstance(req.TbsRequest.RequestorName); } + } + + public Req[] GetRequestList() + { + Asn1Sequence seq = req.TbsRequest.RequestList; + Req[] requests = new Req[seq.Count]; + + for (int i = 0; i != requests.Length; i++) + { + requests[i] = new Req(Request.GetInstance(seq[i])); + } + + return requests; + } + + public X509Extensions RequestExtensions + { + get { return X509Extensions.GetInstance(req.TbsRequest.RequestExtensions); } + } + + protected override X509Extensions GetX509Extensions() + { + return RequestExtensions; + } + + /** + * return the object identifier representing the signature algorithm + */ + public string SignatureAlgOid + { + get + { + if (!this.IsSigned) + return null; + + return req.OptionalSignature.SignatureAlgorithm.Algorithm.Id; + } + } + + public byte[] GetSignature() + { + if (!this.IsSigned) + return null; + + return req.OptionalSignature.GetSignatureOctets(); + } + + private List GetCertList() + { + // load the certificates if we have any + + var result = new List(); + + Asn1Sequence certs = req.OptionalSignature.Certs; + if (certs != null) + { + foreach (Asn1Encodable ae in certs) + { + if (ae != null && ae.ToAsn1Object() is Asn1Sequence s) + { + result.Add(new X509Certificate(X509CertificateStructure.GetInstance(s))); + } + } + } + + return result; + } + + public X509Certificate[] GetCerts() + { + if (!this.IsSigned) + return null; + + return this.GetCertList().ToArray(); + } + + /** + * If the request is signed return a possibly empty CertStore containing the certificates in the + * request. If the request is not signed the method returns null. + * + * @return null if not signed, a CertStore otherwise + * @throws OcspException + */ + public IStore GetCertificates() + { + if (!this.IsSigned) + return null; + + return CollectionUtilities.CreateStore(this.GetCertList()); + } + + /** + * Return whether or not this request is signed. + * + * @return true if signed false otherwise. + */ + public bool IsSigned + { + get { return req.OptionalSignature != null; } + } + + /** + * Verify the signature against the TBSRequest object we contain. + */ + public bool Verify( + AsymmetricKeyParameter publicKey) + { + if (!this.IsSigned) + throw new OcspException("attempt to Verify signature on unsigned object"); + + try + { + ISigner signature = SignerUtilities.GetSigner(this.SignatureAlgOid); + + signature.Init(false, publicKey); + + byte[] encoded = req.TbsRequest.GetEncoded(); + + signature.BlockUpdate(encoded, 0, encoded.Length); + + return signature.VerifySignature(this.GetSignature()); + } + catch (Exception e) + { + throw new OcspException("exception processing sig: " + e, e); + } + } + + /** + * return the ASN.1 encoded representation of this object. + */ + public byte[] GetEncoded() + { + return req.GetEncoded(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPReq.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPReq.cs.meta new file mode 100644 index 000000000..4210b99a1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPReq.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f95b7ecb00c00241947e9d20299129b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPReqGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPReqGenerator.cs new file mode 100644 index 000000000..5a60924c5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPReqGenerator.cs @@ -0,0 +1,245 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp +{ + public class OcspReqGenerator + { + private List list = new List(); + private GeneralName requestorName = null; + private X509Extensions requestExtensions = null; + + private class RequestObject + { + internal CertificateID certId; + internal X509Extensions extensions; + + public RequestObject( + CertificateID certId, + X509Extensions extensions) + { + this.certId = certId; + this.extensions = extensions; + } + + public Request ToRequest() + { + return new Request(certId.ToAsn1Object(), extensions); + } + } + + /** + * Add a request for the given CertificateID. + * + * @param certId certificate ID of interest + */ + public void AddRequest( + CertificateID certId) + { + list.Add(new RequestObject(certId, null)); + } + + /** + * Add a request with extensions + * + * @param certId certificate ID of interest + * @param singleRequestExtensions the extensions to attach to the request + */ + public void AddRequest( + CertificateID certId, + X509Extensions singleRequestExtensions) + { + list.Add(new RequestObject(certId, singleRequestExtensions)); + } + + /** + * Set the requestor name to the passed in X509Principal + * + * @param requestorName a X509Principal representing the requestor name. + */ + public void SetRequestorName( + X509Name requestorName) + { + try + { + this.requestorName = new GeneralName(GeneralName.DirectoryName, requestorName); + } + catch (Exception e) + { + throw new ArgumentException("cannot encode principal", e); + } + } + + public void SetRequestorName( + GeneralName requestorName) + { + this.requestorName = requestorName; + } + + public void SetRequestExtensions( + X509Extensions requestExtensions) + { + this.requestExtensions = requestExtensions; + } + + private OcspReq GenerateRequest( + DerObjectIdentifier signingAlgorithm, + AsymmetricKeyParameter privateKey, + X509Certificate[] chain, + SecureRandom random) + { + Asn1EncodableVector requests = new Asn1EncodableVector(); + + foreach (RequestObject reqObj in list) + { + try + { + requests.Add(reqObj.ToRequest()); + } + catch (Exception e) + { + throw new OcspException("exception creating Request", e); + } + } + + TbsRequest tbsReq = new TbsRequest(requestorName, new DerSequence(requests), requestExtensions); + + ISigner sig = null; + Signature signature = null; + + if (signingAlgorithm != null) + { + if (requestorName == null) + { + throw new OcspException("requestorName must be specified if request is signed."); + } + + try + { + sig = SignerUtilities.GetSigner(signingAlgorithm.Id); + if (random != null) + { + sig.Init(true, new ParametersWithRandom(privateKey, random)); + } + else + { + sig.Init(true, privateKey); + } + } + catch (Exception e) + { + throw new OcspException("exception creating signature: " + e, e); + } + + DerBitString bitSig = null; + + try + { + byte[] encoded = tbsReq.GetEncoded(); + sig.BlockUpdate(encoded, 0, encoded.Length); + + bitSig = new DerBitString(sig.GenerateSignature()); + } + catch (Exception e) + { + throw new OcspException("exception processing TBSRequest: " + e, e); + } + + AlgorithmIdentifier sigAlgId = new AlgorithmIdentifier(signingAlgorithm, DerNull.Instance); + + if (chain != null && chain.Length > 0) + { + Asn1EncodableVector v = new Asn1EncodableVector(); + try + { + for (int i = 0; i != chain.Length; i++) + { + v.Add(chain[i].CertificateStructure); + } + } + catch (IOException e) + { + throw new OcspException("error processing certs", e); + } + catch (CertificateEncodingException e) + { + throw new OcspException("error encoding certs", e); + } + + signature = new Signature(sigAlgId, bitSig, new DerSequence(v)); + } + else + { + signature = new Signature(sigAlgId, bitSig); + } + } + + return new OcspReq(new OcspRequest(tbsReq, signature)); + } + + /** + * Generate an unsigned request + * + * @return the OcspReq + * @throws OcspException + */ + public OcspReq Generate() + { + return GenerateRequest(null, null, null, null); + } + + public OcspReq Generate( + string signingAlgorithm, + AsymmetricKeyParameter privateKey, + X509Certificate[] chain) + { + return Generate(signingAlgorithm, privateKey, chain, null); + } + + public OcspReq Generate( + string signingAlgorithm, + AsymmetricKeyParameter privateKey, + X509Certificate[] chain, + SecureRandom random) + { + if (signingAlgorithm == null) + throw new ArgumentException("no signing algorithm specified"); + + try + { + DerObjectIdentifier oid = OcspUtilities.GetAlgorithmOid(signingAlgorithm); + + return GenerateRequest(oid, privateKey, chain, random); + } + catch (ArgumentException) + { + throw new ArgumentException("unknown signing algorithm specified: " + signingAlgorithm); + } + } + + /** + * Return an IEnumerable of the signature names supported by the generator. + * + * @return an IEnumerable containing recognised names. + */ + public IEnumerable SignatureAlgNames + { + get { return OcspUtilities.AlgNames; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPReqGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPReqGenerator.cs.meta new file mode 100644 index 000000000..baf3f18c7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPReqGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 69f137c4a9de5b640b7e294ab4400582 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPResp.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPResp.cs new file mode 100644 index 000000000..96071a5e7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPResp.cs @@ -0,0 +1,104 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp +{ + public class OcspResp + { + private OcspResponse resp; + + public OcspResp( + OcspResponse resp) + { + this.resp = resp; + } + + public OcspResp( + byte[] resp) + : this(new Asn1InputStream(resp)) + { + } + + public OcspResp( + Stream inStr) + : this(new Asn1InputStream(inStr)) + { + } + + private OcspResp( + Asn1InputStream aIn) + { + try + { + this.resp = OcspResponse.GetInstance(aIn.ReadObject()); + } + catch (Exception e) + { + throw new IOException("malformed response: " + e.Message, e); + } + } + + public int Status + { + get { return this.resp.ResponseStatus.IntValueExact; } + } + + public object GetResponseObject() + { + ResponseBytes rb = this.resp.ResponseBytes; + + if (rb == null) + return null; + + if (rb.ResponseType.Equals(OcspObjectIdentifiers.PkixOcspBasic)) + { + try + { + return new BasicOcspResp( + BasicOcspResponse.GetInstance( + Asn1Object.FromByteArray(rb.Response.GetOctets()))); + } + catch (Exception e) + { + throw new OcspException("problem decoding object: " + e, e); + } + } + + return rb.Response; + } + + /** + * return the ASN.1 encoded representation of this object. + */ + public byte[] GetEncoded() + { + return resp.GetEncoded(); + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + OcspResp other = obj as OcspResp; + + if (other == null) + return false; + + return resp.Equals(other.resp); + } + + public override int GetHashCode() + { + return resp.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPResp.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPResp.cs.meta new file mode 100644 index 000000000..138e43dd9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPResp.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19a37ebb18c778947808bd6a45e1a6ed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPRespGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPRespGenerator.cs new file mode 100644 index 000000000..5e5e2aa05 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPRespGenerator.cs @@ -0,0 +1,58 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp +{ + /** + * base generator for an OCSP response - at the moment this only supports the + * generation of responses containing BasicOCSP responses. + */ + public class OCSPRespGenerator + { + public const int Successful = 0; // Response has valid confirmations + public const int MalformedRequest = 1; // Illegal confirmation request + public const int InternalError = 2; // Internal error in issuer + public const int TryLater = 3; // Try again later + // (4) is not used + public const int SigRequired = 5; // Must sign the request + public const int Unauthorized = 6; // Request unauthorized + + public OcspResp Generate( + int status, + object response) + { + if (response == null) + { + return new OcspResp(new OcspResponse(new OcspResponseStatus(status),null)); + } + if (response is BasicOcspResp) + { + BasicOcspResp r = (BasicOcspResp)response; + Asn1OctetString octs; + + try + { + octs = new DerOctetString(r.GetEncoded()); + } + catch (Exception e) + { + throw new OcspException("can't encode object.", e); + } + + ResponseBytes rb = new ResponseBytes( + OcspObjectIdentifiers.PkixOcspBasic, octs); + + return new OcspResp(new OcspResponse( + new OcspResponseStatus(status), rb)); + } + + throw new OcspException("unknown response object"); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPRespGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPRespGenerator.cs.meta new file mode 100644 index 000000000..2b463be89 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPRespGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 304a4d91bffb95a489fc47ab2d2a3fb1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPRespStatus.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPRespStatus.cs new file mode 100644 index 000000000..3dd0206bc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPRespStatus.cs @@ -0,0 +1,21 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp +{ + public abstract class OcspRespStatus + { + /** + * note 4 is not used. + */ + public const int Successful = 0; // --Response has valid confirmations + public const int MalformedRequest = 1; // --Illegal confirmation request + public const int InternalError = 2; // --Internal error in issuer + public const int TryLater = 3; // --Try again later + public const int SigRequired = 5; // --Must sign the request + public const int Unauthorized = 6; // --Request unauthorized + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPRespStatus.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPRespStatus.cs.meta new file mode 100644 index 000000000..e5f33571f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPRespStatus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 18a92b5f029fd6645be84f8f25950a0f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPUtil.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPUtil.cs new file mode 100644 index 000000000..4323a1392 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPUtil.cs @@ -0,0 +1,150 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.TeleTrust; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp +{ + internal class OcspUtilities + { + private static readonly Dictionary Algorithms = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly Dictionary Oids = + new Dictionary(); + private static readonly HashSet NoParams = new HashSet(); + + static OcspUtilities() + { + Algorithms.Add("MD2WITHRSAENCRYPTION", PkcsObjectIdentifiers.MD2WithRsaEncryption); + Algorithms.Add("MD2WITHRSA", PkcsObjectIdentifiers.MD2WithRsaEncryption); + Algorithms.Add("MD5WITHRSAENCRYPTION", PkcsObjectIdentifiers.MD5WithRsaEncryption); + Algorithms.Add("MD5WITHRSA", PkcsObjectIdentifiers.MD5WithRsaEncryption); + Algorithms.Add("SHA1WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha1WithRsaEncryption); + Algorithms.Add("SHA-1WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha1WithRsaEncryption); + Algorithms.Add("SHA1WITHRSA", PkcsObjectIdentifiers.Sha1WithRsaEncryption); + Algorithms.Add("SHA-1WITHRSA", PkcsObjectIdentifiers.Sha1WithRsaEncryption); + Algorithms.Add("SHA224WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha224WithRsaEncryption); + Algorithms.Add("SHA-224WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha224WithRsaEncryption); + Algorithms.Add("SHA224WITHRSA", PkcsObjectIdentifiers.Sha224WithRsaEncryption); + Algorithms.Add("SHA-224WITHRSA", PkcsObjectIdentifiers.Sha224WithRsaEncryption); + Algorithms.Add("SHA256WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha256WithRsaEncryption); + Algorithms.Add("SHA-256WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha256WithRsaEncryption); + Algorithms.Add("SHA256WITHRSA", PkcsObjectIdentifiers.Sha256WithRsaEncryption); + Algorithms.Add("SHA-256WITHRSA", PkcsObjectIdentifiers.Sha256WithRsaEncryption); + Algorithms.Add("SHA384WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha384WithRsaEncryption); + Algorithms.Add("SHA-384WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha384WithRsaEncryption); + Algorithms.Add("SHA384WITHRSA", PkcsObjectIdentifiers.Sha384WithRsaEncryption); + Algorithms.Add("SHA-384WITHRSA", PkcsObjectIdentifiers.Sha384WithRsaEncryption); + Algorithms.Add("SHA512WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512WithRsaEncryption); + Algorithms.Add("SHA-512WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512WithRsaEncryption); + Algorithms.Add("SHA512WITHRSA", PkcsObjectIdentifiers.Sha512WithRsaEncryption); + Algorithms.Add("SHA-512WITHRSA", PkcsObjectIdentifiers.Sha512WithRsaEncryption); + Algorithms.Add("SHA512(224)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption); + Algorithms.Add("SHA-512(224)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption); + Algorithms.Add("SHA512(224)WITHRSA", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption); + Algorithms.Add("SHA-512(224)WITHRSA", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption); + Algorithms.Add("SHA512(256)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption); + Algorithms.Add("SHA-512(256)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption); + Algorithms.Add("SHA512(256)WITHRSA", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption); + Algorithms.Add("SHA-512(256)WITHRSA", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption); + Algorithms.Add("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD160); + Algorithms.Add("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD160); + Algorithms.Add("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD128); + Algorithms.Add("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD128); + Algorithms.Add("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD256); + Algorithms.Add("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD256); + Algorithms.Add("SHA1WITHDSA", X9ObjectIdentifiers.IdDsaWithSha1); + Algorithms.Add("DSAWITHSHA1", X9ObjectIdentifiers.IdDsaWithSha1); + Algorithms.Add("SHA224WITHDSA", NistObjectIdentifiers.DsaWithSha224); + Algorithms.Add("SHA256WITHDSA", NistObjectIdentifiers.DsaWithSha256); + Algorithms.Add("SHA1WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha1); + Algorithms.Add("ECDSAWITHSHA1", X9ObjectIdentifiers.ECDsaWithSha1); + Algorithms.Add("SHA224WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha224); + Algorithms.Add("SHA256WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha256); + Algorithms.Add("SHA384WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha384); + Algorithms.Add("SHA512WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha512); + Algorithms.Add("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94); + Algorithms.Add("GOST3411WITHGOST3410-94", CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94); + + Oids.Add(PkcsObjectIdentifiers.MD2WithRsaEncryption, "MD2WITHRSA"); + Oids.Add(PkcsObjectIdentifiers.MD5WithRsaEncryption, "MD5WITHRSA"); + Oids.Add(PkcsObjectIdentifiers.Sha1WithRsaEncryption, "SHA1WITHRSA"); + Oids.Add(PkcsObjectIdentifiers.Sha224WithRsaEncryption, "SHA224WITHRSA"); + Oids.Add(PkcsObjectIdentifiers.Sha256WithRsaEncryption, "SHA256WITHRSA"); + Oids.Add(PkcsObjectIdentifiers.Sha384WithRsaEncryption, "SHA384WITHRSA"); + Oids.Add(PkcsObjectIdentifiers.Sha512WithRsaEncryption, "SHA512WITHRSA"); + Oids.Add(PkcsObjectIdentifiers.Sha512_224WithRSAEncryption, "SHA512(224)WITHRSA"); + Oids.Add(PkcsObjectIdentifiers.Sha512_256WithRSAEncryption, "SHA512(256)WITHRSA"); + Oids.Add(TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD160, "RIPEMD160WITHRSA"); + Oids.Add(TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD128, "RIPEMD128WITHRSA"); + Oids.Add(TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD256, "RIPEMD256WITHRSA"); + Oids.Add(X9ObjectIdentifiers.IdDsaWithSha1, "SHA1WITHDSA"); + Oids.Add(NistObjectIdentifiers.DsaWithSha224, "SHA224WITHDSA"); + Oids.Add(NistObjectIdentifiers.DsaWithSha256, "SHA256WITHDSA"); + Oids.Add(X9ObjectIdentifiers.ECDsaWithSha1, "SHA1WITHECDSA"); + Oids.Add(X9ObjectIdentifiers.ECDsaWithSha224, "SHA224WITHECDSA"); + Oids.Add(X9ObjectIdentifiers.ECDsaWithSha256, "SHA256WITHECDSA"); + Oids.Add(X9ObjectIdentifiers.ECDsaWithSha384, "SHA384WITHECDSA"); + Oids.Add(X9ObjectIdentifiers.ECDsaWithSha512, "SHA512WITHECDSA"); + Oids.Add(CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94, "GOST3411WITHGOST3410"); + Oids.Add(OiwObjectIdentifiers.MD5WithRsa, "MD5WITHRSA"); + Oids.Add(OiwObjectIdentifiers.Sha1WithRsa, "SHA1WITHRSA"); + Oids.Add(OiwObjectIdentifiers.DsaWithSha1, "SHA1WITHDSA"); + + // + // According to RFC 3279, the ASN.1 encoding SHALL (id-dsa-with-sha1) or MUST (ecdsa-with-SHA*) omit the parameters field. + // The parameters field SHALL be NULL for RSA based signature algorithms. + // + NoParams.Add(X9ObjectIdentifiers.ECDsaWithSha1); + NoParams.Add(X9ObjectIdentifiers.ECDsaWithSha224); + NoParams.Add(X9ObjectIdentifiers.ECDsaWithSha256); + NoParams.Add(X9ObjectIdentifiers.ECDsaWithSha384); + NoParams.Add(X9ObjectIdentifiers.ECDsaWithSha512); + NoParams.Add(X9ObjectIdentifiers.IdDsaWithSha1); + NoParams.Add(OiwObjectIdentifiers.DsaWithSha1); + NoParams.Add(NistObjectIdentifiers.DsaWithSha224); + NoParams.Add(NistObjectIdentifiers.DsaWithSha256); + } + + internal static DerObjectIdentifier GetAlgorithmOid(string algorithmName) + { + if (Algorithms.TryGetValue(algorithmName, out var oid)) + return oid; + + return new DerObjectIdentifier(algorithmName); + } + + internal static string GetAlgorithmName(DerObjectIdentifier oid) + { + if (Oids.TryGetValue(oid, out var algorithmName)) + return algorithmName; + + return oid.Id; + } + + internal static AlgorithmIdentifier GetSigAlgID(DerObjectIdentifier sigOid) + { + if (NoParams.Contains(sigOid)) + return new AlgorithmIdentifier(sigOid); + + return new AlgorithmIdentifier(sigOid, DerNull.Instance); + } + + internal static IEnumerable AlgNames + { + get { return CollectionUtilities.Proxy(Algorithms.Keys); } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPUtil.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPUtil.cs.meta new file mode 100644 index 000000000..ca9d1938f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/OCSPUtil.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df2daa91f25e00345abf4eea8f4fcb89 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/Req.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/Req.cs new file mode 100644 index 000000000..b4912b9fe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/Req.cs @@ -0,0 +1,39 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp +{ + public class Req + : X509ExtensionBase + { + private Request req; + + public Req( + Request req) + { + this.req = req; + } + + public CertificateID GetCertID() + { + return new CertificateID(req.ReqCert); + } + + public X509Extensions SingleRequestExtensions + { + get { return req.SingleRequestExtensions; } + } + + protected override X509Extensions GetX509Extensions() + { + return SingleRequestExtensions; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/Req.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/Req.cs.meta new file mode 100644 index 000000000..9e20ed440 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/Req.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f5fbac749d65af408d1b69a21018425 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/RespData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/RespData.cs new file mode 100644 index 000000000..f02752a75 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/RespData.cs @@ -0,0 +1,63 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp +{ + public class RespData + : X509ExtensionBase + { + internal readonly ResponseData data; + + public RespData( + ResponseData data) + { + this.data = data; + } + + public int Version + { + get { return data.Version.IntValueExact + 1; } + } + + public RespID GetResponderId() + { + return new RespID(data.ResponderID); + } + + public DateTime ProducedAt + { + get { return data.ProducedAt.ToDateTime(); } + } + + public SingleResp[] GetResponses() + { + Asn1Sequence s = data.Responses; + SingleResp[] rs = new SingleResp[s.Count]; + + for (int i = 0; i != rs.Length; i++) + { + rs[i] = new SingleResp(SingleResponse.GetInstance(s[i])); + } + + return rs; + } + + public X509Extensions ResponseExtensions + { + get { return data.ResponseExtensions; } + } + + protected override X509Extensions GetX509Extensions() + { + return ResponseExtensions; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/RespData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/RespData.cs.meta new file mode 100644 index 000000000..184558599 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/RespData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8ad49440b0bfa564096d37219b93ff9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/RespID.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/RespID.cs new file mode 100644 index 000000000..8a33b8121 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/RespID.cs @@ -0,0 +1,76 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp +{ + /** + * Carrier for a ResponderID. + */ + public class RespID + { + internal readonly ResponderID id; + + public RespID( + ResponderID id) + { + this.id = id; + } + + public RespID( + X509Name name) + { + this.id = new ResponderID(name); + } + + public RespID( + AsymmetricKeyParameter publicKey) + { + try + { + SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(publicKey); + + byte[] keyHash = DigestUtilities.CalculateDigest("SHA1", info.PublicKeyData.GetBytes()); + + this.id = new ResponderID(new DerOctetString(keyHash)); + } + catch (Exception e) + { + throw new OcspException("problem creating ID: " + e, e); + } + } + + public ResponderID ToAsn1Object() + { + return id; + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + RespID other = obj as RespID; + + if (other == null) + return false; + + return id.Equals(other.id); + } + + public override int GetHashCode() + { + return id.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/RespID.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/RespID.cs.meta new file mode 100644 index 000000000..fb0943b21 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/RespID.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 13f651178027dd544b220f45d0a9235a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/RevokedStatus.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/RevokedStatus.cs new file mode 100644 index 000000000..a32062145 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/RevokedStatus.cs @@ -0,0 +1,59 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp +{ + /// Wrapper for the RevokedInfo object + public class RevokedStatus + : CertificateStatus + { + private readonly RevokedInfo m_revokedInfo; + + public RevokedStatus(RevokedInfo revokedInfo) + { + m_revokedInfo = revokedInfo; + } + + public RevokedStatus(DateTime revocationDate) + { + m_revokedInfo = new RevokedInfo(new Asn1GeneralizedTime(revocationDate)); + } + + public RevokedStatus(DateTime revocationDate, int reason) + { + m_revokedInfo = new RevokedInfo(new Asn1GeneralizedTime(revocationDate), new CrlReason(reason)); + } + + public DateTime RevocationTime + { + get { return m_revokedInfo.RevocationTime.ToDateTime(); } + } + + public bool HasRevocationReason + { + get { return m_revokedInfo.RevocationReason != null; } + } + + /// Return the revocation reason, if there is one. + /// This field is optional; test for it with first. + /// The revocation reason, if available. + /// If no revocation reason is available. + public int RevocationReason + { + get + { + if (m_revokedInfo.RevocationReason == null) + throw new InvalidOperationException("attempt to get a reason where none is available"); + + return m_revokedInfo.RevocationReason.IntValueExact; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/RevokedStatus.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/RevokedStatus.cs.meta new file mode 100644 index 000000000..d433c9180 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/RevokedStatus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 942d978af399500418044db4ab073932 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/SingleResp.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/SingleResp.cs new file mode 100644 index 000000000..c9412f127 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/SingleResp.cs @@ -0,0 +1,74 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp +{ + public class SingleResp + : X509ExtensionBase + { + internal readonly SingleResponse resp; + + public SingleResp( + SingleResponse resp) + { + this.resp = resp; + } + + public CertificateID GetCertID() + { + return new CertificateID(resp.CertId); + } + + /** + * Return the status object for the response - null indicates good. + * + * @return the status object for the response, null if it is good. + */ + public object GetCertStatus() + { + CertStatus s = resp.CertStatus; + + if (s.TagNo == 0) + { + return null; // good + } + + if (s.TagNo == 1) + { + return new RevokedStatus(RevokedInfo.GetInstance(s.Status)); + } + + return new UnknownStatus(); + } + + public DateTime ThisUpdate + { + get { return resp.ThisUpdate.ToDateTime(); } + } + + /** + * return the NextUpdate value - note: this is an optional field so may + * be returned as null. + * + * @return nextUpdate, or null if not present. + */ + public DateTime? NextUpdate => resp.NextUpdate?.ToDateTime(); + + public X509Extensions SingleExtensions + { + get { return resp.SingleExtensions; } + } + + protected override X509Extensions GetX509Extensions() + { + return SingleExtensions; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/SingleResp.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/SingleResp.cs.meta new file mode 100644 index 000000000..a97875b58 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/SingleResp.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 91706998de8e56c4082a6a753a1aeeab +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/UnknownStatus.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/UnknownStatus.cs new file mode 100644 index 000000000..e44c005e9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/UnknownStatus.cs @@ -0,0 +1,19 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp +{ + /** + * wrapper for the UnknownInfo object + */ + public class UnknownStatus + : CertificateStatus + { + public UnknownStatus() + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/UnknownStatus.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/UnknownStatus.cs.meta new file mode 100644 index 000000000..2aa8bc51b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/ocsp/UnknownStatus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f278a1680d992a45a352e630ce3ad55 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl.meta new file mode 100644 index 000000000..6c8c19cd0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d9b0429922c0a544c993b4880e0172a0 +folderAsset: yes +timeCreated: 1547039641 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/EncryptionException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/EncryptionException.cs new file mode 100644 index 000000000..acb1038bd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/EncryptionException.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + [Serializable] + public class EncryptionException + : IOException + { + public EncryptionException() + : base() + { + } + + public EncryptionException(string message) + : base(message) + { + } + + public EncryptionException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected EncryptionException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/EncryptionException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/EncryptionException.cs.meta new file mode 100644 index 000000000..07a737a69 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/EncryptionException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a424bf92daf4a94da4bbe8b216162ed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/IPasswordFinder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/IPasswordFinder.cs new file mode 100644 index 000000000..887edf430 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/IPasswordFinder.cs @@ -0,0 +1,13 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.OpenSsl +{ + public interface IPasswordFinder + { + char[] GetPassword(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/IPasswordFinder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/IPasswordFinder.cs.meta new file mode 100644 index 000000000..2e4d5323a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/IPasswordFinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd93d5ed8706db84582edeff6a96a3d6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/MiscPemGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/MiscPemGenerator.cs new file mode 100644 index 000000000..12f2bdda1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/MiscPemGenerator.cs @@ -0,0 +1,274 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO.Pem; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.OpenSsl +{ + /** + * PEM generator for the original set of PEM objects used in Open SSL. + */ + public class MiscPemGenerator + : PemObjectGenerator + { + private readonly object obj; + private readonly string algorithm; + private readonly char[] password; + private readonly SecureRandom random; + + public MiscPemGenerator(object obj) + { + this.obj = obj; + } + + public MiscPemGenerator( + object obj, + string algorithm, + char[] password, + SecureRandom random) + { + this.obj = obj; + this.algorithm = algorithm; + this.password = password; + this.random = random; + } + + private static PemObject CreatePemObject(object obj) + { + if (obj == null) + throw new ArgumentNullException("obj"); + + if (obj is AsymmetricCipherKeyPair keyPair) + { + return CreatePemObject(keyPair.Private); + } + + string type; + byte[] encoding; + + if (obj is PemObject pemObject) + return pemObject; + + if (obj is PemObjectGenerator pemObjectGenerator) + return pemObjectGenerator.Generate(); + + if (obj is X509Certificate certificate) + { + // TODO Should we prefer "X509 CERTIFICATE" here? + type = "CERTIFICATE"; + try + { + encoding = certificate.GetEncoded(); + } + catch (CertificateEncodingException e) + { + throw new IOException("Cannot Encode object: " + e.ToString()); + } + } + else if (obj is X509Crl crl) + { + type = "X509 CRL"; + try + { + encoding = crl.GetEncoded(); + } + catch (CrlException e) + { + throw new IOException("Cannot Encode object: " + e.ToString()); + } + } + else if (obj is AsymmetricKeyParameter akp) + { + if (akp.IsPrivate) + { + encoding = EncodePrivateKey(akp, out type); + } + else + { + type = "PUBLIC KEY"; + + encoding = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(akp).GetDerEncoded(); + } + } + else if (obj is X509V2AttributeCertificate attrCert) + { + type = "ATTRIBUTE CERTIFICATE"; + encoding = attrCert.GetEncoded(); + } + else if (obj is Pkcs10CertificationRequest certReq) + { + type = "CERTIFICATE REQUEST"; + encoding = certReq.GetEncoded(); + } + else if (obj is Asn1.Cms.ContentInfo contentInfo) + { + type = "PKCS7"; + encoding = contentInfo.GetEncoded(); + } + else + { + throw new PemGenerationException("Object type not supported: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + return new PemObject(type, encoding); + } + +// private string GetHexEncoded(byte[] bytes) +// { +// bytes = Hex.Encode(bytes); +// +// char[] chars = new char[bytes.Length]; +// +// for (int i = 0; i != bytes.Length; i++) +// { +// chars[i] = (char)bytes[i]; +// } +// +// return new string(chars); +// } + + private static PemObject CreatePemObject( + object obj, + string algorithm, + char[] password, + SecureRandom random) + { + if (obj == null) + throw new ArgumentNullException("obj"); + if (algorithm == null) + throw new ArgumentNullException("algorithm"); + if (password == null) + throw new ArgumentNullException("password"); + if (random == null) + throw new ArgumentNullException("random"); + + if (obj is AsymmetricCipherKeyPair keyPair) + { + return CreatePemObject(keyPair.Private, algorithm, password, random); + } + + string type = null; + byte[] keyData = null; + + if (obj is AsymmetricKeyParameter akp) + { + if (akp.IsPrivate) + { + keyData = EncodePrivateKey(akp, out type); + } + } + + if (type == null || keyData == null) + { + // TODO Support other types? + throw new PemGenerationException("Object type not supported: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj)); + } + + + string dekAlgName = algorithm.ToUpperInvariant(); + + // Note: For backward compatibility + if (dekAlgName == "DESEDE") + { + dekAlgName = "DES-EDE3-CBC"; + } + + int ivLength = Org.BouncyCastle.Utilities.Platform.StartsWith(dekAlgName, "AES-") ? 16 : 8; + + byte[] iv = new byte[ivLength]; + random.NextBytes(iv); + + byte[] encData = PemUtilities.Crypt(true, keyData, password, dekAlgName, iv); + + var headers = new List(2); + headers.Add(new PemHeader("Proc-Type", "4,ENCRYPTED")); + headers.Add(new PemHeader("DEK-Info", dekAlgName + "," + Hex.ToHexString(iv).ToUpperInvariant())); + + return new PemObject(type, headers, encData); + } + + private static byte[] EncodePrivateKey( + AsymmetricKeyParameter akp, + out string keyType) + { + PrivateKeyInfo info = PrivateKeyInfoFactory.CreatePrivateKeyInfo(akp); + AlgorithmIdentifier algID = info.PrivateKeyAlgorithm; + DerObjectIdentifier oid = algID.Algorithm; + + if (oid.Equals(X9ObjectIdentifiers.IdDsa)) + { + keyType = "DSA PRIVATE KEY"; + + DsaParameter p = DsaParameter.GetInstance(algID.Parameters); + + BigInteger x = ((DsaPrivateKeyParameters) akp).X; + BigInteger y = p.G.ModPow(x, p.P); + + // TODO Create an ASN1 object somewhere for this? + return new DerSequence( + new DerInteger(0), + new DerInteger(p.P), + new DerInteger(p.Q), + new DerInteger(p.G), + new DerInteger(y), + new DerInteger(x)).GetEncoded(); + } + + if (oid.Equals(PkcsObjectIdentifiers.RsaEncryption)) + { + keyType = "RSA PRIVATE KEY"; + + return info.ParsePrivateKey().GetEncoded(); + } + else if (oid.Equals(CryptoProObjectIdentifiers.GostR3410x2001) + || oid.Equals(X9ObjectIdentifiers.IdECPublicKey)) + { + keyType = "EC PRIVATE KEY"; + + return info.ParsePrivateKey().GetEncoded(); + } + else + { + keyType = "PRIVATE KEY"; + + return info.GetEncoded(); + } + } + + public PemObject Generate() + { + try + { + if (algorithm != null) + { + return CreatePemObject(obj, algorithm, password, random); + } + + return CreatePemObject(obj); + } + catch (IOException e) + { + throw new PemGenerationException("encoding exception", e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/MiscPemGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/MiscPemGenerator.cs.meta new file mode 100644 index 000000000..2f44a9b7e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/MiscPemGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c0d8a624220f0fc41b80f7f2549e984a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMException.cs new file mode 100644 index 000000000..93a9ade2e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMException.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.OpenSsl +{ + [Serializable] + public class PemException + : IOException + { + public PemException() + : base() + { + } + + public PemException(string message) + : base(message) + { + } + + public PemException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected PemException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMException.cs.meta new file mode 100644 index 000000000..d2f949a96 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 02930c4db3958684397dcfe7708b464b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMReader.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMReader.cs new file mode 100644 index 000000000..ee8d54ca5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMReader.cs @@ -0,0 +1,393 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Sec; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO.Pem; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.OpenSsl +{ + /** + * Class for reading OpenSSL PEM encoded streams containing + * X509 certificates, PKCS8 encoded keys and PKCS7 objects. + *

    + * In the case of PKCS7 objects the reader will return a CMS ContentInfo object. Keys and + * Certificates will be returned using the appropriate java.security type.

    + */ + public class PemReader + : Utilities.IO.Pem.PemReader + { + //private static readonly Dictionary Parsers = new Dictionary(); + + static PemReader() + { +// Parsers.Add("CERTIFICATE REQUEST", new PKCS10CertificationRequestParser()); +// Parsers.Add("NEW CERTIFICATE REQUEST", new PKCS10CertificationRequestParser()); +// Parsers.Add("CERTIFICATE", new X509CertificateParser(provider)); +// Parsers.Add("X509 CERTIFICATE", new X509CertificateParser(provider)); +// Parsers.Add("X509 CRL", new X509CRLParser(provider)); +// Parsers.Add("PKCS7", new PKCS7Parser()); +// Parsers.Add("ATTRIBUTE CERTIFICATE", new X509AttributeCertificateParser()); +// Parsers.Add("EC PARAMETERS", new ECNamedCurveSpecParser()); +// Parsers.Add("PUBLIC KEY", new PublicKeyParser(provider)); +// Parsers.Add("RSA PUBLIC KEY", new RSAPublicKeyParser(provider)); +// Parsers.Add("RSA PRIVATE KEY", new RSAKeyPairParser(provider)); +// Parsers.Add("DSA PRIVATE KEY", new DSAKeyPairParser(provider)); +// Parsers.Add("EC PRIVATE KEY", new ECDSAKeyPairParser(provider)); +// Parsers.Add("ENCRYPTED PRIVATE KEY", new EncryptedPrivateKeyParser(provider)); +// Parsers.Add("PRIVATE KEY", new PrivateKeyParser(provider)); + } + + private readonly IPasswordFinder pFinder; + + /** + * Create a new PemReader + * + * @param reader the Reader + */ + public PemReader( + TextReader reader) + : this(reader, null) + { + } + + /** + * Create a new PemReader with a password finder + * + * @param reader the Reader + * @param pFinder the password finder + */ + public PemReader( + TextReader reader, + IPasswordFinder pFinder) + : base(reader) + { + this.pFinder = pFinder; + } + + public object ReadObject() + { + PemObject obj = ReadPemObject(); + + if (obj == null) + return null; + + // TODO Follow Java build and map to parser objects? +// if (parsers.Contains(obj.Type)) +// return ((PemObjectParser)parsers[obj.Type]).ParseObject(obj); + + if (Org.BouncyCastle.Utilities.Platform.EndsWith(obj.Type, "PRIVATE KEY")) + return ReadPrivateKey(obj); + + switch (obj.Type) + { + case "PUBLIC KEY": + return ReadPublicKey(obj); + case "RSA PUBLIC KEY": + return ReadRsaPublicKey(obj); + case "CERTIFICATE REQUEST": + case "NEW CERTIFICATE REQUEST": + return ReadCertificateRequest(obj); + case "CERTIFICATE": + case "X509 CERTIFICATE": + return ReadCertificate(obj); + case "PKCS7": + case "CMS": + return ReadPkcs7(obj); + case "X509 CRL": + return ReadCrl(obj); + case "ATTRIBUTE CERTIFICATE": + return ReadAttributeCertificate(obj); + // TODO Add back in when tests done, and return type issue resolved + //case "EC PARAMETERS": + // return ReadECParameters(obj); + default: + throw new IOException("unrecognised object: " + obj.Type); + } + } + + private AsymmetricKeyParameter ReadRsaPublicKey(PemObject pemObject) + { + RsaPublicKeyStructure rsaPubStructure = RsaPublicKeyStructure.GetInstance( + Asn1Object.FromByteArray(pemObject.Content)); + + return new RsaKeyParameters( + false, // not private + rsaPubStructure.Modulus, + rsaPubStructure.PublicExponent); + } + + private AsymmetricKeyParameter ReadPublicKey(PemObject pemObject) + { + return PublicKeyFactory.CreateKey(pemObject.Content); + } + + /** + * Reads in a X509Certificate. + * + * @return the X509Certificate + * @throws IOException if an I/O error occured + */ + private X509Certificate ReadCertificate(PemObject pemObject) + { + try + { + return new X509CertificateParser().ReadCertificate(pemObject.Content); + } + catch (Exception e) + { + throw new PemException("problem parsing cert: " + e.ToString()); + } + } + + /** + * Reads in a X509CRL. + * + * @return the X509Certificate + * @throws IOException if an I/O error occured + */ + private X509Crl ReadCrl(PemObject pemObject) + { + try + { + return new X509CrlParser().ReadCrl(pemObject.Content); + } + catch (Exception e) + { + throw new PemException("problem parsing cert: " + e.ToString()); + } + } + + /** + * Reads in a PKCS10 certification request. + * + * @return the certificate request. + * @throws IOException if an I/O error occured + */ + private Pkcs10CertificationRequest ReadCertificateRequest(PemObject pemObject) + { + try + { + return new Pkcs10CertificationRequest(pemObject.Content); + } + catch (Exception e) + { + throw new PemException("problem parsing cert: " + e.ToString()); + } + } + + /** + * Reads in a X509 Attribute Certificate. + * + * @return the X509 Attribute Certificate + * @throws IOException if an I/O error occured + */ + private X509V2AttributeCertificate ReadAttributeCertificate(PemObject pemObject) + { + return new X509V2AttributeCertificate(pemObject.Content); + } + + /** + * Reads in a PKCS7 object. This returns a ContentInfo object suitable for use with the CMS + * API. + * + * @return the X509Certificate + * @throws IOException if an I/O error occured + */ + // TODO Consider returning Asn1.Pkcs.ContentInfo + private Asn1.Cms.ContentInfo ReadPkcs7(PemObject pemObject) + { + try + { + return Asn1.Cms.ContentInfo.GetInstance( + Asn1Object.FromByteArray(pemObject.Content)); + } + catch (Exception e) + { + throw new PemException("problem parsing PKCS7 object: " + e.ToString()); + } + } + + /** + * Read a Key Pair + */ + private object ReadPrivateKey(PemObject pemObject) + { + // + // extract the key + // + Debug.Assert(Org.BouncyCastle.Utilities.Platform.EndsWith(pemObject.Type, "PRIVATE KEY")); + + string type = pemObject.Type.Substring(0, pemObject.Type.Length - "PRIVATE KEY".Length).Trim(); + byte[] keyBytes = pemObject.Content; + + var fields = new Dictionary(); + foreach (PemHeader header in pemObject.Headers) + { + fields[header.Name] = header.Value; + } + + string procType = CollectionUtilities.GetValueOrNull(fields, "Proc-Type"); + + if (procType == "4,ENCRYPTED") + { + if (pFinder == null) + throw new PasswordException("No password finder specified, but a password is required"); + + char[] password = pFinder.GetPassword(); + if (password == null) + throw new PasswordException("Password is null, but a password is required"); + + if (!fields.TryGetValue("DEK-Info", out var dekInfo)) + throw new PemException("missing DEK-info"); + + string[] tknz = dekInfo.Split(','); + + string dekAlgName = tknz[0].Trim(); + byte[] iv = Hex.Decode(tknz[1].Trim()); + + keyBytes = PemUtilities.Crypt(false, keyBytes, password, dekAlgName, iv); + } + + try + { + AsymmetricKeyParameter pubSpec, privSpec; + Asn1Sequence seq = Asn1Sequence.GetInstance(keyBytes); + + switch (type) + { + case "RSA": + { + if (seq.Count != 9) + throw new PemException("malformed sequence in RSA private key"); + + RsaPrivateKeyStructure rsa = RsaPrivateKeyStructure.GetInstance(seq); + + pubSpec = new RsaKeyParameters(false, rsa.Modulus, rsa.PublicExponent); + privSpec = new RsaPrivateCrtKeyParameters( + rsa.Modulus, rsa.PublicExponent, rsa.PrivateExponent, + rsa.Prime1, rsa.Prime2, rsa.Exponent1, rsa.Exponent2, + rsa.Coefficient); + + break; + } + + case "DSA": + { + if (seq.Count != 6) + throw new PemException("malformed sequence in DSA private key"); + + // TODO Create an ASN1 object somewhere for this? + //DerInteger v = (DerInteger)seq[0]; + DerInteger p = (DerInteger)seq[1]; + DerInteger q = (DerInteger)seq[2]; + DerInteger g = (DerInteger)seq[3]; + DerInteger y = (DerInteger)seq[4]; + DerInteger x = (DerInteger)seq[5]; + + DsaParameters parameters = new DsaParameters(p.Value, q.Value, g.Value); + + privSpec = new DsaPrivateKeyParameters(x.Value, parameters); + pubSpec = new DsaPublicKeyParameters(y.Value, parameters); + + break; + } + + case "EC": + { + ECPrivateKeyStructure pKey = ECPrivateKeyStructure.GetInstance(seq); + AlgorithmIdentifier algId = new AlgorithmIdentifier( + X9ObjectIdentifiers.IdECPublicKey, pKey.GetParameters()); + + PrivateKeyInfo privInfo = new PrivateKeyInfo(algId, pKey.ToAsn1Object()); + + // TODO Are the keys returned here ECDSA, as Java version forces? + privSpec = PrivateKeyFactory.CreateKey(privInfo); + + DerBitString pubKey = pKey.GetPublicKey(); + if (pubKey != null) + { + SubjectPublicKeyInfo pubInfo = new SubjectPublicKeyInfo(algId, pubKey.GetBytes()); + + // TODO Are the keys returned here ECDSA, as Java version forces? + pubSpec = PublicKeyFactory.CreateKey(pubInfo); + } + else + { + pubSpec = ECKeyPairGenerator.GetCorrespondingPublicKey( + (ECPrivateKeyParameters)privSpec); + } + + break; + } + + case "ENCRYPTED": + { + char[] password = pFinder.GetPassword(); + + if (password == null) + throw new PasswordException("Password is null, but a password is required"); + + return PrivateKeyFactory.DecryptKey(password, EncryptedPrivateKeyInfo.GetInstance(seq)); + } + + case "": + { + return PrivateKeyFactory.CreateKey(PrivateKeyInfo.GetInstance(seq)); + } + + default: + throw new ArgumentException("Unknown key type: " + type, "type"); + } + + return new AsymmetricCipherKeyPair(pubSpec, privSpec); + } + catch (IOException e) + { + throw e; + } + catch (Exception e) + { + throw new PemException( + "problem creating " + type + " private key: " + e.ToString()); + } + } + + // TODO Add an equivalent class for ECNamedCurveParameterSpec? + //private ECNamedCurveParameterSpec ReadECParameters( +// private X9ECParameters ReadECParameters(PemObject pemObject) +// { +// DerObjectIdentifier oid = (DerObjectIdentifier)Asn1Object.FromByteArray(pemObject.Content); +// +// //return ECNamedCurveTable.getParameterSpec(oid.Id); +// return GetCurveParameters(oid.Id); +// } + + private static X9ECParameters GetCurveParameters(string name) + { + X9ECParameters ecP = ECKeyPairGenerator.FindECCurveByName(name); + if (ecP == null) + throw new Exception("unknown curve name: " + name); + + return ecP; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMReader.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMReader.cs.meta new file mode 100644 index 000000000..a7724a9b3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMReader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ea2749aedc54590409ca3ca57e7e3a00 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMUtilities.cs new file mode 100644 index 000000000..44d82ee6b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMUtilities.cs @@ -0,0 +1,162 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.OpenSsl +{ + internal sealed class PemUtilities + { + private enum PemBaseAlg { AES_128, AES_192, AES_256, BF, DES, DES_EDE, DES_EDE3, RC2, RC2_40, RC2_64 }; + private enum PemMode { CBC, CFB, ECB, OFB }; + + static PemUtilities() + { + // Signal to obfuscation tools not to change enum constants + Enums.GetArbitraryValue().ToString(); + Enums.GetArbitraryValue().ToString(); + } + + private static void ParseDekAlgName( + string dekAlgName, + out PemBaseAlg baseAlg, + out PemMode mode) + { + try + { + mode = PemMode.ECB; + + if (dekAlgName == "DES-EDE" || dekAlgName == "DES-EDE3") + { + baseAlg = Enums.GetEnumValue(dekAlgName); + return; + } + + int pos = dekAlgName.LastIndexOf('-'); + if (pos >= 0) + { + baseAlg = Enums.GetEnumValue(dekAlgName.Substring(0, pos)); + mode = Enums.GetEnumValue(dekAlgName.Substring(pos + 1)); + return; + } + } + catch (ArgumentException) + { + } + + throw new EncryptionException("Unknown DEK algorithm: " + dekAlgName); + } + + internal static byte[] Crypt( + bool encrypt, + byte[] bytes, + char[] password, + string dekAlgName, + byte[] iv) + { + PemBaseAlg baseAlg; + PemMode mode; + ParseDekAlgName(dekAlgName, out baseAlg, out mode); + + string padding; + switch (mode) + { + case PemMode.CBC: + case PemMode.ECB: + padding = "PKCS5Padding"; + break; + case PemMode.CFB: + case PemMode.OFB: + padding = "NoPadding"; + break; + default: + throw new EncryptionException("Unknown DEK algorithm: " + dekAlgName); + } + + string algorithm; + + byte[] salt = iv; + switch (baseAlg) + { + case PemBaseAlg.AES_128: + case PemBaseAlg.AES_192: + case PemBaseAlg.AES_256: + algorithm = "AES"; + if (salt.Length > 8) + { + salt = new byte[8]; + Array.Copy(iv, 0, salt, 0, salt.Length); + } + break; + case PemBaseAlg.BF: + algorithm = "BLOWFISH"; + break; + case PemBaseAlg.DES: + algorithm = "DES"; + break; + case PemBaseAlg.DES_EDE: + case PemBaseAlg.DES_EDE3: + algorithm = "DESede"; + break; + case PemBaseAlg.RC2: + case PemBaseAlg.RC2_40: + case PemBaseAlg.RC2_64: + algorithm = "RC2"; + break; + default: + throw new EncryptionException("Unknown DEK algorithm: " + dekAlgName); + } + + string cipherName = algorithm + "/" + mode + "/" + padding; + IBufferedCipher cipher = CipherUtilities.GetCipher(cipherName); + + ICipherParameters cParams = GetCipherParameters(password, baseAlg, salt); + + if (mode != PemMode.ECB) + { + cParams = new ParametersWithIV(cParams, iv); + } + + cipher.Init(encrypt, cParams); + + return cipher.DoFinal(bytes); + } + + private static ICipherParameters GetCipherParameters( + char[] password, + PemBaseAlg baseAlg, + byte[] salt) + { + string algorithm; + int keyBits; + switch (baseAlg) + { + case PemBaseAlg.AES_128: keyBits = 128; algorithm = "AES128"; break; + case PemBaseAlg.AES_192: keyBits = 192; algorithm = "AES192"; break; + case PemBaseAlg.AES_256: keyBits = 256; algorithm = "AES256"; break; + case PemBaseAlg.BF: keyBits = 128; algorithm = "BLOWFISH"; break; + case PemBaseAlg.DES: keyBits = 64; algorithm = "DES"; break; + case PemBaseAlg.DES_EDE: keyBits = 128; algorithm = "DESEDE"; break; + case PemBaseAlg.DES_EDE3: keyBits = 192; algorithm = "DESEDE3"; break; + case PemBaseAlg.RC2: keyBits = 128; algorithm = "RC2"; break; + case PemBaseAlg.RC2_40: keyBits = 40; algorithm = "RC2"; break; + case PemBaseAlg.RC2_64: keyBits = 64; algorithm = "RC2"; break; + default: + return null; + } + + OpenSslPbeParametersGenerator pGen = new OpenSslPbeParametersGenerator(); + + pGen.Init(PbeParametersGenerator.Pkcs5PasswordToBytes(password), salt); + + return pGen.GenerateDerivedParameters(algorithm, keyBits); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMUtilities.cs.meta new file mode 100644 index 000000000..03b1b1b29 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb8051867251512499844467793cdf9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMWriter.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMWriter.cs new file mode 100644 index 000000000..d82e5cf04 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMWriter.cs @@ -0,0 +1,46 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO.Pem; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.OpenSsl +{ + /// General purpose writer for OpenSSL PEM objects. + public class PemWriter + : Utilities.IO.Pem.PemWriter + { + /// The TextWriter object to write the output to. + public PemWriter(TextWriter writer) + : base(writer) + { + } + + public void WriteObject(object obj) + { + try + { + base.WriteObject(new MiscPemGenerator(obj)); + } + catch (PemGenerationException e) + { + if (e.InnerException is IOException inner) + throw inner; + + throw e; + } + } + + public void WriteObject( + object obj, + string algorithm, + char[] password, + SecureRandom random) + { + base.WriteObject(new MiscPemGenerator(obj, algorithm, password, random)); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMWriter.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMWriter.cs.meta new file mode 100644 index 000000000..6e43b9315 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PEMWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 23f95c4b40043494bb615ca11764ba46 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PasswordException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PasswordException.cs new file mode 100644 index 000000000..ab582814e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PasswordException.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + [Serializable] + public class PasswordException + : IOException + { + public PasswordException() + : base() + { + } + + public PasswordException(string message) + : base(message) + { + } + + public PasswordException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected PasswordException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PasswordException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PasswordException.cs.meta new file mode 100644 index 000000000..6835ce53e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/PasswordException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a0af6d81e309f746935cdd3c3287be7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/Pkcs8Generator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/Pkcs8Generator.cs new file mode 100644 index 000000000..bff46ae85 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/Pkcs8Generator.cs @@ -0,0 +1,106 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO.Pem; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.OpenSsl +{ + public class Pkcs8Generator + : PemObjectGenerator + { + // FIXME See PbeUtilities static constructor +// public static readonly string Aes128Cbc = NistObjectIdentifiers.IdAes128Cbc.Id; +// public static readonly string Aes192Cbc = NistObjectIdentifiers.IdAes192Cbc.Id; +// public static readonly string Aes256Cbc = NistObjectIdentifiers.IdAes256Cbc.Id; +// +// public static readonly string Des3Cbc = PkcsObjectIdentifiers.DesEde3Cbc.Id; + + public static readonly string PbeSha1_RC4_128 = PkcsObjectIdentifiers.PbeWithShaAnd128BitRC4.Id; + public static readonly string PbeSha1_RC4_40 = PkcsObjectIdentifiers.PbeWithShaAnd40BitRC4.Id; + public static readonly string PbeSha1_3DES = PkcsObjectIdentifiers.PbeWithShaAnd3KeyTripleDesCbc.Id; + public static readonly string PbeSha1_2DES = PkcsObjectIdentifiers.PbeWithShaAnd2KeyTripleDesCbc.Id; + public static readonly string PbeSha1_RC2_128 = PkcsObjectIdentifiers.PbeWithShaAnd128BitRC2Cbc.Id; + public static readonly string PbeSha1_RC2_40 = PkcsObjectIdentifiers.PbewithShaAnd40BitRC2Cbc.Id; + + private char[] password; + private string algorithm; + private int iterationCount; + private AsymmetricKeyParameter privKey; + private SecureRandom random; + + /** + * Constructor for an unencrypted private key PEM object. + * + * @param key private key to be encoded. + */ + public Pkcs8Generator(AsymmetricKeyParameter privKey) + { + this.privKey = privKey; + } + + /** + * Constructor for an encrypted private key PEM object. + * + * @param key private key to be encoded + * @param algorithm encryption algorithm to use + * @param provider provider to use + * @throws NoSuchAlgorithmException if algorithm/mode cannot be found + */ + public Pkcs8Generator(AsymmetricKeyParameter privKey, string algorithm) + { + // TODO Check privKey.IsPrivate + this.privKey = privKey; + this.algorithm = algorithm; + this.iterationCount = 2048; + } + + public SecureRandom SecureRandom + { + set { this.random = value; } + } + + public char[] Password + { + set { this.password = value; } + } + + public int IterationCount + { + set { this.iterationCount = value; } + } + + public PemObject Generate() + { + if (algorithm == null) + { + PrivateKeyInfo pki = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privKey); + + return new PemObject("PRIVATE KEY", pki.GetEncoded()); + } + + // TODO Theoretically, the amount of salt needed depends on the algorithm + byte[] salt = new byte[20]; + random = CryptoServicesRegistrar.GetSecureRandom(random); + random.NextBytes(salt); + + try + { + EncryptedPrivateKeyInfo epki = EncryptedPrivateKeyInfoFactory.CreateEncryptedPrivateKeyInfo( + algorithm, password, salt, iterationCount, privKey); + + return new PemObject("ENCRYPTED PRIVATE KEY", epki.GetEncoded()); + } + catch (Exception e) + { + throw new PemGenerationException("Couldn't encrypt private key", e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/Pkcs8Generator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/Pkcs8Generator.cs.meta new file mode 100644 index 000000000..01c253d38 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/openssl/Pkcs8Generator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8fd3426c3338f804185fac837f54726a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs.meta new file mode 100644 index 000000000..e9cbd2a89 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c5b7d40a38054774bb2cee59156dd3d3 +folderAsset: yes +timeCreated: 1547039641 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/AsymmetricKeyEntry.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/AsymmetricKeyEntry.cs new file mode 100644 index 000000000..c156d0d25 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/AsymmetricKeyEntry.cs @@ -0,0 +1,50 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs +{ + public class AsymmetricKeyEntry + : Pkcs12Entry + { + private readonly AsymmetricKeyParameter key; + + public AsymmetricKeyEntry(AsymmetricKeyParameter key) + : base(new Dictionary()) + { + this.key = key; + } + + public AsymmetricKeyEntry(AsymmetricKeyParameter key, + IDictionary attributes) + : base(attributes) + { + this.key = key; + } + + public AsymmetricKeyParameter Key + { + get { return this.key; } + } + + public override bool Equals(object obj) + { + AsymmetricKeyEntry other = obj as AsymmetricKeyEntry; + + if (other == null) + return false; + + return key.Equals(other.key); + } + + public override int GetHashCode() + { + return ~key.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/AsymmetricKeyEntry.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/AsymmetricKeyEntry.cs.meta new file mode 100644 index 000000000..8c2605ea1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/AsymmetricKeyEntry.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e0fc1e2e40052dc44899abad8920a4e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/EncryptedPrivateKeyInfoFactory.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/EncryptedPrivateKeyInfoFactory.cs new file mode 100644 index 000000000..b2272fae6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/EncryptedPrivateKeyInfoFactory.cs @@ -0,0 +1,106 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs +{ + public sealed class EncryptedPrivateKeyInfoFactory + { + private EncryptedPrivateKeyInfoFactory() + { + } + + public static EncryptedPrivateKeyInfo CreateEncryptedPrivateKeyInfo( + DerObjectIdentifier algorithm, + char[] passPhrase, + byte[] salt, + int iterationCount, + AsymmetricKeyParameter key) + { + return CreateEncryptedPrivateKeyInfo( + algorithm.Id, passPhrase, salt, iterationCount, + PrivateKeyInfoFactory.CreatePrivateKeyInfo(key)); + } + + public static EncryptedPrivateKeyInfo CreateEncryptedPrivateKeyInfo( + string algorithm, + char[] passPhrase, + byte[] salt, + int iterationCount, + AsymmetricKeyParameter key) + { + return CreateEncryptedPrivateKeyInfo( + algorithm, passPhrase, salt, iterationCount, + PrivateKeyInfoFactory.CreatePrivateKeyInfo(key)); + } + + public static EncryptedPrivateKeyInfo CreateEncryptedPrivateKeyInfo( + string algorithm, + char[] passPhrase, + byte[] salt, + int iterationCount, + PrivateKeyInfo keyInfo) + { + IBufferedCipher cipher = PbeUtilities.CreateEngine(algorithm) as IBufferedCipher; + if (cipher == null) + throw new Exception("Unknown encryption algorithm: " + algorithm); + + Asn1Encodable pbeParameters = PbeUtilities.GenerateAlgorithmParameters( + algorithm, salt, iterationCount); + ICipherParameters cipherParameters = PbeUtilities.GenerateCipherParameters( + algorithm, passPhrase, pbeParameters); + cipher.Init(true, cipherParameters); + byte[] encoding = cipher.DoFinal(keyInfo.GetEncoded()); + + DerObjectIdentifier oid = PbeUtilities.GetObjectIdentifier(algorithm); + AlgorithmIdentifier algID = new AlgorithmIdentifier(oid, pbeParameters); + return new EncryptedPrivateKeyInfo(algID, encoding); + } + + public static EncryptedPrivateKeyInfo CreateEncryptedPrivateKeyInfo( + DerObjectIdentifier cipherAlgorithm, + DerObjectIdentifier prfAlgorithm, + char[] passPhrase, + byte[] salt, + int iterationCount, + SecureRandom random, + AsymmetricKeyParameter key) + { + return CreateEncryptedPrivateKeyInfo( + cipherAlgorithm, prfAlgorithm, passPhrase, salt, iterationCount, random, + PrivateKeyInfoFactory.CreatePrivateKeyInfo(key)); + } + + public static EncryptedPrivateKeyInfo CreateEncryptedPrivateKeyInfo( + DerObjectIdentifier cipherAlgorithm, + DerObjectIdentifier prfAlgorithm, + char[] passPhrase, + byte[] salt, + int iterationCount, + SecureRandom random, + PrivateKeyInfo keyInfo) + { + IBufferedCipher cipher = CipherUtilities.GetCipher(cipherAlgorithm) as IBufferedCipher; + if (cipher == null) + throw new Exception("Unknown encryption algorithm: " + cipherAlgorithm); + + Asn1Encodable pbeParameters = PbeUtilities.GenerateAlgorithmParameters( + cipherAlgorithm, prfAlgorithm, salt, iterationCount, random); + ICipherParameters cipherParameters = PbeUtilities.GenerateCipherParameters( + PkcsObjectIdentifiers.IdPbeS2, passPhrase, pbeParameters); + cipher.Init(true, cipherParameters); + byte[] encoding = cipher.DoFinal(keyInfo.GetEncoded()); + + AlgorithmIdentifier algID = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdPbeS2, pbeParameters); + return new EncryptedPrivateKeyInfo(algID, encoding); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/EncryptedPrivateKeyInfoFactory.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/EncryptedPrivateKeyInfoFactory.cs.meta new file mode 100644 index 000000000..fe457e8ce --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/EncryptedPrivateKeyInfoFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ff4b19a3a083b346a18148d9cd0ba8d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PKCS12StoreBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PKCS12StoreBuilder.cs new file mode 100644 index 000000000..eafbc6699 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PKCS12StoreBuilder.cs @@ -0,0 +1,53 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs +{ + public class Pkcs12StoreBuilder + { + private DerObjectIdentifier keyAlgorithm = PkcsObjectIdentifiers.PbeWithShaAnd3KeyTripleDesCbc; + private DerObjectIdentifier certAlgorithm = PkcsObjectIdentifiers.PbewithShaAnd40BitRC2Cbc; + private DerObjectIdentifier keyPrfAlgorithm = null; + private bool useDerEncoding = false; + + public Pkcs12StoreBuilder() + { + } + + public Pkcs12Store Build() + { + return new Pkcs12Store(keyAlgorithm, keyPrfAlgorithm, certAlgorithm, useDerEncoding); + } + + public Pkcs12StoreBuilder SetCertAlgorithm(DerObjectIdentifier certAlgorithm) + { + this.certAlgorithm = certAlgorithm; + return this; + } + + public Pkcs12StoreBuilder SetKeyAlgorithm(DerObjectIdentifier keyAlgorithm) + { + this.keyAlgorithm = keyAlgorithm; + return this; + } + + // Specify a PKCS#5 Scheme 2 encryption for keys + public Pkcs12StoreBuilder SetKeyAlgorithm(DerObjectIdentifier keyAlgorithm, DerObjectIdentifier keyPrfAlgorithm) + { + this.keyAlgorithm = keyAlgorithm; + this.keyPrfAlgorithm = keyPrfAlgorithm; + return this; + } + public Pkcs12StoreBuilder SetUseDerEncoding(bool useDerEncoding) + { + this.useDerEncoding = useDerEncoding; + return this; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PKCS12StoreBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PKCS12StoreBuilder.cs.meta new file mode 100644 index 000000000..d43a66c20 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PKCS12StoreBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43aa4e117903bc6489e2b003abb2af10 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs10CertificationRequest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs10CertificationRequest.cs new file mode 100644 index 000000000..5f284263c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs10CertificationRequest.cs @@ -0,0 +1,538 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.TeleTrust; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs +{ + /// + /// A class for verifying and creating Pkcs10 Certification requests. + /// + /// + /// CertificationRequest ::= Sequence { + /// certificationRequestInfo CertificationRequestInfo, + /// signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, + /// signature BIT STRING + /// } + /// + /// CertificationRequestInfo ::= Sequence { + /// version Integer { v1(0) } (v1,...), + /// subject Name, + /// subjectPKInfo SubjectPublicKeyInfo{{ PKInfoAlgorithms }}, + /// attributes [0] Attributes{{ CRIAttributes }} + /// } + /// + /// Attributes { ATTRIBUTE:IOSet } ::= Set OF Attr{{ IOSet }} + /// + /// Attr { ATTRIBUTE:IOSet } ::= Sequence { + /// type ATTRIBUTE.&id({IOSet}), + /// values Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type}) + /// } + /// + /// see + public class Pkcs10CertificationRequest + : CertificationRequest + { + internal static readonly Dictionary m_algorithms = + new Dictionary(StringComparer.OrdinalIgnoreCase); + internal static readonly Dictionary m_exParams = + new Dictionary(StringComparer.OrdinalIgnoreCase); + internal static readonly Dictionary m_keyAlgorithms = + new Dictionary(); + internal static readonly Dictionary m_oids = + new Dictionary(); + internal static readonly HashSet m_noParams = new HashSet(); + + static Pkcs10CertificationRequest() + { + m_algorithms.Add("MD2WITHRSAENCRYPTION", PkcsObjectIdentifiers.MD2WithRsaEncryption); + m_algorithms.Add("MD2WITHRSA", PkcsObjectIdentifiers.MD2WithRsaEncryption); + m_algorithms.Add("MD5WITHRSAENCRYPTION", PkcsObjectIdentifiers.MD5WithRsaEncryption); + m_algorithms.Add("MD5WITHRSA", PkcsObjectIdentifiers.MD5WithRsaEncryption); + m_algorithms.Add("RSAWITHMD5", PkcsObjectIdentifiers.MD5WithRsaEncryption); + m_algorithms.Add("SHA1WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha1WithRsaEncryption); + m_algorithms.Add("SHA-1WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha1WithRsaEncryption); + m_algorithms.Add("SHA1WITHRSA", PkcsObjectIdentifiers.Sha1WithRsaEncryption); + m_algorithms.Add("SHA-1WITHRSA", PkcsObjectIdentifiers.Sha1WithRsaEncryption); + m_algorithms.Add("SHA224WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha224WithRsaEncryption); + m_algorithms.Add("SHA-224WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha224WithRsaEncryption); + m_algorithms.Add("SHA224WITHRSA", PkcsObjectIdentifiers.Sha224WithRsaEncryption); + m_algorithms.Add("SHA-224WITHRSA", PkcsObjectIdentifiers.Sha224WithRsaEncryption); + m_algorithms.Add("SHA256WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha256WithRsaEncryption); + m_algorithms.Add("SHA-256WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha256WithRsaEncryption); + m_algorithms.Add("SHA256WITHRSA", PkcsObjectIdentifiers.Sha256WithRsaEncryption); + m_algorithms.Add("SHA-256WITHRSA", PkcsObjectIdentifiers.Sha256WithRsaEncryption); + m_algorithms.Add("SHA384WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha384WithRsaEncryption); + m_algorithms.Add("SHA-384WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha384WithRsaEncryption); + m_algorithms.Add("SHA384WITHRSA", PkcsObjectIdentifiers.Sha384WithRsaEncryption); + m_algorithms.Add("SHA-384WITHRSA", PkcsObjectIdentifiers.Sha384WithRsaEncryption); + m_algorithms.Add("SHA512WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512WithRsaEncryption); + m_algorithms.Add("SHA-512WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512WithRsaEncryption); + m_algorithms.Add("SHA512WITHRSA", PkcsObjectIdentifiers.Sha512WithRsaEncryption); + m_algorithms.Add("SHA-512WITHRSA", PkcsObjectIdentifiers.Sha512WithRsaEncryption); + m_algorithms.Add("SHA512(224)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption); + m_algorithms.Add("SHA-512(224)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption); + m_algorithms.Add("SHA512(224)WITHRSA", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption); + m_algorithms.Add("SHA-512(224)WITHRSA", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption); + m_algorithms.Add("SHA512(256)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption); + m_algorithms.Add("SHA-512(256)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption); + m_algorithms.Add("SHA512(256)WITHRSA", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption); + m_algorithms.Add("SHA-512(256)WITHRSA", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption); + m_algorithms.Add("SHA1WITHRSAANDMGF1", PkcsObjectIdentifiers.IdRsassaPss); + m_algorithms.Add("SHA224WITHRSAANDMGF1", PkcsObjectIdentifiers.IdRsassaPss); + m_algorithms.Add("SHA256WITHRSAANDMGF1", PkcsObjectIdentifiers.IdRsassaPss); + m_algorithms.Add("SHA384WITHRSAANDMGF1", PkcsObjectIdentifiers.IdRsassaPss); + m_algorithms.Add("SHA512WITHRSAANDMGF1", PkcsObjectIdentifiers.IdRsassaPss); + m_algorithms.Add("RSAWITHSHA1", PkcsObjectIdentifiers.Sha1WithRsaEncryption); + m_algorithms.Add("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD128); + m_algorithms.Add("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD128); + m_algorithms.Add("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD160); + m_algorithms.Add("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD160); + m_algorithms.Add("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD256); + m_algorithms.Add("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD256); + m_algorithms.Add("SHA1WITHDSA", X9ObjectIdentifiers.IdDsaWithSha1); + m_algorithms.Add("DSAWITHSHA1", X9ObjectIdentifiers.IdDsaWithSha1); + m_algorithms.Add("SHA224WITHDSA", NistObjectIdentifiers.DsaWithSha224); + m_algorithms.Add("SHA256WITHDSA", NistObjectIdentifiers.DsaWithSha256); + m_algorithms.Add("SHA384WITHDSA", NistObjectIdentifiers.DsaWithSha384); + m_algorithms.Add("SHA512WITHDSA", NistObjectIdentifiers.DsaWithSha512); + m_algorithms.Add("SHA1WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha1); + m_algorithms.Add("SHA224WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha224); + m_algorithms.Add("SHA256WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha256); + m_algorithms.Add("SHA384WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha384); + m_algorithms.Add("SHA512WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha512); + m_algorithms.Add("ECDSAWITHSHA1", X9ObjectIdentifiers.ECDsaWithSha1); + m_algorithms.Add("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94); + m_algorithms.Add("GOST3410WITHGOST3411", CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94); + m_algorithms.Add("GOST3411WITHECGOST3410", CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001); + m_algorithms.Add("GOST3411WITHECGOST3410-2001", CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001); + m_algorithms.Add("GOST3411WITHGOST3410-2001", CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001); + + // + // reverse mappings + // + m_oids.Add(PkcsObjectIdentifiers.Sha1WithRsaEncryption, "SHA1WITHRSA"); + m_oids.Add(PkcsObjectIdentifiers.Sha224WithRsaEncryption, "SHA224WITHRSA"); + m_oids.Add(PkcsObjectIdentifiers.Sha256WithRsaEncryption, "SHA256WITHRSA"); + m_oids.Add(PkcsObjectIdentifiers.Sha384WithRsaEncryption, "SHA384WITHRSA"); + m_oids.Add(PkcsObjectIdentifiers.Sha512WithRsaEncryption, "SHA512WITHRSA"); + m_oids.Add(PkcsObjectIdentifiers.Sha512_224WithRSAEncryption, "SHA512(224)WITHRSA"); + m_oids.Add(PkcsObjectIdentifiers.Sha512_256WithRSAEncryption, "SHA512(256)WITHRSA"); + m_oids.Add(CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94, "GOST3411WITHGOST3410"); + m_oids.Add(CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001, "GOST3411WITHECGOST3410"); + + m_oids.Add(PkcsObjectIdentifiers.MD5WithRsaEncryption, "MD5WITHRSA"); + m_oids.Add(PkcsObjectIdentifiers.MD2WithRsaEncryption, "MD2WITHRSA"); + m_oids.Add(X9ObjectIdentifiers.IdDsaWithSha1, "SHA1WITHDSA"); + m_oids.Add(X9ObjectIdentifiers.ECDsaWithSha1, "SHA1WITHECDSA"); + m_oids.Add(X9ObjectIdentifiers.ECDsaWithSha224, "SHA224WITHECDSA"); + m_oids.Add(X9ObjectIdentifiers.ECDsaWithSha256, "SHA256WITHECDSA"); + m_oids.Add(X9ObjectIdentifiers.ECDsaWithSha384, "SHA384WITHECDSA"); + m_oids.Add(X9ObjectIdentifiers.ECDsaWithSha512, "SHA512WITHECDSA"); + m_oids.Add(OiwObjectIdentifiers.MD5WithRsa, "MD5WITHRSA"); + m_oids.Add(OiwObjectIdentifiers.Sha1WithRsa, "SHA1WITHRSA"); + m_oids.Add(OiwObjectIdentifiers.DsaWithSha1, "SHA1WITHDSA"); + m_oids.Add(NistObjectIdentifiers.DsaWithSha224, "SHA224WITHDSA"); + m_oids.Add(NistObjectIdentifiers.DsaWithSha256, "SHA256WITHDSA"); + + // + // key types + // + m_keyAlgorithms.Add(PkcsObjectIdentifiers.RsaEncryption, "RSA"); + m_keyAlgorithms.Add(X9ObjectIdentifiers.IdDsa, "DSA"); + + // + // According to RFC 3279, the ASN.1 encoding SHALL (id-dsa-with-sha1) or MUST (ecdsa-with-SHA*) omit the parameters field. + // The parameters field SHALL be NULL for RSA based signature algorithms. + // + m_noParams.Add(X9ObjectIdentifiers.ECDsaWithSha1); + m_noParams.Add(X9ObjectIdentifiers.ECDsaWithSha224); + m_noParams.Add(X9ObjectIdentifiers.ECDsaWithSha256); + m_noParams.Add(X9ObjectIdentifiers.ECDsaWithSha384); + m_noParams.Add(X9ObjectIdentifiers.ECDsaWithSha512); + m_noParams.Add(X9ObjectIdentifiers.IdDsaWithSha1); + m_noParams.Add(OiwObjectIdentifiers.DsaWithSha1); + m_noParams.Add(NistObjectIdentifiers.DsaWithSha224); + m_noParams.Add(NistObjectIdentifiers.DsaWithSha256); + + // + // RFC 4491 + // + m_noParams.Add(CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94); + m_noParams.Add(CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001); + + // + // explicit params + // + AlgorithmIdentifier sha1AlgId = new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1, DerNull.Instance); + m_exParams.Add("SHA1WITHRSAANDMGF1", CreatePssParams(sha1AlgId, 20)); + + AlgorithmIdentifier sha224AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha224, DerNull.Instance); + m_exParams.Add("SHA224WITHRSAANDMGF1", CreatePssParams(sha224AlgId, 28)); + + AlgorithmIdentifier sha256AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha256, DerNull.Instance); + m_exParams.Add("SHA256WITHRSAANDMGF1", CreatePssParams(sha256AlgId, 32)); + + AlgorithmIdentifier sha384AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha384, DerNull.Instance); + m_exParams.Add("SHA384WITHRSAANDMGF1", CreatePssParams(sha384AlgId, 48)); + + AlgorithmIdentifier sha512AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha512, DerNull.Instance); + m_exParams.Add("SHA512WITHRSAANDMGF1", CreatePssParams(sha512AlgId, 64)); + } + + private static RsassaPssParameters CreatePssParams( + AlgorithmIdentifier hashAlgId, + int saltSize) + { + return new RsassaPssParameters( + hashAlgId, + new AlgorithmIdentifier(PkcsObjectIdentifiers.IdMgf1, hashAlgId), + new DerInteger(saltSize), + new DerInteger(1)); + } + + protected Pkcs10CertificationRequest() + { + } + + public Pkcs10CertificationRequest( + byte[] encoded) + : base((Asn1Sequence)Asn1Object.FromByteArray(encoded)) + { + } + + public Pkcs10CertificationRequest( + Asn1Sequence seq) + : base(seq) + { + } + + public Pkcs10CertificationRequest( + Stream input) + : base((Asn1Sequence)Asn1Object.FromStream(input)) + { + } + + /// + /// Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + /// + ///Name of Sig Alg. + /// X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + /// Public Key to be included in cert reqest. + /// ASN1Set of Attributes. + /// Matching Private key for nominated (above) public key to be used to sign the request. + public Pkcs10CertificationRequest( + string signatureAlgorithm, + X509Name subject, + AsymmetricKeyParameter publicKey, + Asn1Set attributes, + AsymmetricKeyParameter signingKey) + : this(new Asn1SignatureFactory(signatureAlgorithm, signingKey), subject, publicKey, attributes) + { + } + + /// + /// Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + /// + ///The factory for signature calculators to sign the PKCS#10 request with. + /// X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + /// Public Key to be included in cert reqest. + /// ASN1Set of Attributes. + public Pkcs10CertificationRequest( + ISignatureFactory signatureFactory, + X509Name subject, + AsymmetricKeyParameter publicKey, + Asn1Set attributes) + { + if (signatureFactory == null) + throw new ArgumentNullException("signatureFactory"); + if (subject == null) + throw new ArgumentNullException("subject"); + if (publicKey == null) + throw new ArgumentNullException("publicKey"); + if (publicKey.IsPrivate) + throw new ArgumentException("expected public key", "publicKey"); + + Init(signatureFactory, subject, publicKey, attributes); + } + + private void Init( + ISignatureFactory signatureFactory, + X509Name subject, + AsymmetricKeyParameter publicKey, + Asn1Set attributes) + { + this.sigAlgId = (AlgorithmIdentifier)signatureFactory.AlgorithmDetails; + + SubjectPublicKeyInfo pubInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(publicKey); + + this.reqInfo = new CertificationRequestInfo(subject, pubInfo, attributes); + + IStreamCalculator streamCalculator = signatureFactory.CreateCalculator(); + using (Stream sigStream = streamCalculator.Stream) + { + reqInfo.EncodeTo(sigStream, Der); + } + + // Generate Signature. + sigBits = new DerBitString(streamCalculator.GetResult().Collect()); + } + + // internal Pkcs10CertificationRequest( + // Asn1InputStream seqStream) + // { + // Asn1Sequence seq = (Asn1Sequence) seqStream.ReadObject(); + // try + // { + // this.reqInfo = CertificationRequestInfo.GetInstance(seq[0]); + // this.sigAlgId = AlgorithmIdentifier.GetInstance(seq[1]); + // this.sigBits = (DerBitString) seq[2]; + // } + // catch (Exception ex) + // { + // throw new ArgumentException("Create From Asn1Sequence: " + ex.Message); + // } + // } + + /// + /// Get the public key. + /// + /// The public key. + public AsymmetricKeyParameter GetPublicKey() + { + return PublicKeyFactory.CreateKey(reqInfo.SubjectPublicKeyInfo); + } + + /// + /// Verify Pkcs10 Cert Request is valid. + /// + /// true = valid. + public bool Verify() + { + return Verify(this.GetPublicKey()); + } + + public bool Verify( + AsymmetricKeyParameter publicKey) + { + return Verify(new Asn1VerifierFactoryProvider(publicKey)); + } + + public bool Verify( + IVerifierFactoryProvider verifierProvider) + { + return Verify(verifierProvider.CreateVerifierFactory(sigAlgId)); + } + + public bool Verify( + IVerifierFactory verifier) + { + try + { + byte[] b = reqInfo.GetDerEncoded(); + + IStreamCalculator streamCalculator = verifier.CreateCalculator(); + using (var stream = streamCalculator.Stream) + { + stream.Write(b, 0, b.Length); + } + + return streamCalculator.GetResult().IsVerified(sigBits.GetOctets()); + } + catch (Exception e) + { + throw new SignatureException("exception encoding TBS cert request", e); + } + } + + // /// + // /// Get the Der Encoded Pkcs10 Certification Request. + // /// + // /// A byte array. + // public byte[] GetEncoded() + // { + // return new CertificationRequest(reqInfo, sigAlgId, sigBits).GetDerEncoded(); + // } + + // TODO Figure out how to set parameters on an ISigner + private void SetSignatureParameters( + ISigner signature, + Asn1Encodable asn1Params) + { + if (asn1Params != null && !(asn1Params is Asn1Null)) + { + // AlgorithmParameters sigParams = AlgorithmParameters.GetInstance(signature.getAlgorithm()); + // + // try + // { + // sigParams.init(asn1Params.ToAsn1Object().GetDerEncoded()); + // } + // catch (IOException e) + // { + // throw new SignatureException("IOException decoding parameters: " + e.Message); + // } + + if (Org.BouncyCastle.Utilities.Platform.EndsWith(signature.AlgorithmName, "MGF1")) + { + throw new NotImplementedException("signature algorithm with MGF1"); + + // try + // { + // signature.setParameter(sigParams.getParameterSpec(PSSParameterSpec.class)); + // } + // catch (GeneralSecurityException e) + // { + // throw new SignatureException("Exception extracting parameters: " + e.getMessage()); + // } + } + } + } + + internal static string GetSignatureName( + AlgorithmIdentifier sigAlgId) + { + Asn1Encodable asn1Params = sigAlgId.Parameters; + + if (asn1Params != null && !(asn1Params is Asn1Null)) + { + if (sigAlgId.Algorithm.Equals(PkcsObjectIdentifiers.IdRsassaPss)) + { + RsassaPssParameters rsaParams = RsassaPssParameters.GetInstance(asn1Params); + return GetDigestAlgName(rsaParams.HashAlgorithm.Algorithm) + "withRSAandMGF1"; + } + } + + return sigAlgId.Algorithm.Id; + } + + private static string GetDigestAlgName( + DerObjectIdentifier digestAlgOID) + { + if (PkcsObjectIdentifiers.MD5.Equals(digestAlgOID)) + { + return "MD5"; + } + else if (OiwObjectIdentifiers.IdSha1.Equals(digestAlgOID)) + { + return "SHA1"; + } + else if (NistObjectIdentifiers.IdSha224.Equals(digestAlgOID)) + { + return "SHA224"; + } + else if (NistObjectIdentifiers.IdSha256.Equals(digestAlgOID)) + { + return "SHA256"; + } + else if (NistObjectIdentifiers.IdSha384.Equals(digestAlgOID)) + { + return "SHA384"; + } + else if (NistObjectIdentifiers.IdSha512.Equals(digestAlgOID)) + { + return "SHA512"; + } + else if (NistObjectIdentifiers.IdSha512_224.Equals(digestAlgOID)) + { + return "SHA512(224)"; + } + else if (NistObjectIdentifiers.IdSha512_256.Equals(digestAlgOID)) + { + return "SHA512(256)"; + } + else if (TeleTrusTObjectIdentifiers.RipeMD128.Equals(digestAlgOID)) + { + return "RIPEMD128"; + } + else if (TeleTrusTObjectIdentifiers.RipeMD160.Equals(digestAlgOID)) + { + return "RIPEMD160"; + } + else if (TeleTrusTObjectIdentifiers.RipeMD256.Equals(digestAlgOID)) + { + return "RIPEMD256"; + } + else if (CryptoProObjectIdentifiers.GostR3411.Equals(digestAlgOID)) + { + return "GOST3411"; + } + else + { + return digestAlgOID.Id; + } + } + + /// + /// Returns X509Extensions if the Extensions Request attribute can be found and returns the extensions block. + /// + /// X509Extensions block or null if one cannot be found. + public X509Extensions GetRequestedExtensions() + { + if (reqInfo.Attributes != null) + { + foreach (Asn1Encodable item in reqInfo.Attributes) + { + AttributePkcs attributePkcs; + try + { + attributePkcs = AttributePkcs.GetInstance(item); + + } + catch (ArgumentException ex) + { + throw new ArgumentException("encountered non PKCS attribute in extensions block", ex); + } + + if (attributePkcs.AttrType.Equals(PkcsObjectIdentifiers.Pkcs9AtExtensionRequest)) + { + X509ExtensionsGenerator generator = new X509ExtensionsGenerator(); + + Asn1Sequence extensionSequence = Asn1Sequence.GetInstance(attributePkcs.AttrValues[0]); + + + foreach (Asn1Encodable seqItem in extensionSequence) + { + + Asn1Sequence itemSeq = Asn1Sequence.GetInstance(seqItem); + if (itemSeq.Count == 2) + { + generator.AddExtension(DerObjectIdentifier.GetInstance(itemSeq[0]), false, Asn1OctetString.GetInstance(itemSeq[1]).GetOctets()); + } + else if (itemSeq.Count == 3) + { + generator.AddExtension(DerObjectIdentifier.GetInstance(itemSeq[0]), DerBoolean.GetInstance(itemSeq[1]).IsTrue, Asn1OctetString.GetInstance(itemSeq[2]).GetOctets()); + } + else + { + throw new ArgumentException("incorrect sequence size of X509Extension got " + itemSeq.Count + " expected 2 or 3"); + } + } + + return generator.Generate(); + } + + } + } + + return null; + } + + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs10CertificationRequest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs10CertificationRequest.cs.meta new file mode 100644 index 000000000..7999a1ad4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs10CertificationRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d42133b63178b014eb93bfce9e8655e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs10CertificationRequestDelaySigned.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs10CertificationRequestDelaySigned.cs new file mode 100644 index 000000000..af6e8e630 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs10CertificationRequestDelaySigned.cs @@ -0,0 +1,145 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs +{ + /// + /// A class for creating and verifying Pkcs10 Certification requests (this is an extension on ). + /// The requests are made using delay signing. This is useful for situations where + /// the private key is in another environment and not directly accessible (e.g. HSM) + /// So the first step creates the request, then the signing is done outside this + /// object and the signature is then used to complete the request. + /// + /// + /// CertificationRequest ::= Sequence { + /// certificationRequestInfo CertificationRequestInfo, + /// signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, + /// signature BIT STRING + /// } + /// + /// CertificationRequestInfo ::= Sequence { + /// version Integer { v1(0) } (v1,...), + /// subject Name, + /// subjectPKInfo SubjectPublicKeyInfo{{ PKInfoAlgorithms }}, + /// attributes [0] Attributes{{ CRIAttributes }} + /// } + /// + /// Attributes { ATTRIBUTE:IOSet } ::= Set OF Attr{{ IOSet }} + /// + /// Attr { ATTRIBUTE:IOSet } ::= Sequence { + /// type ATTRIBUTE.&id({IOSet}), + /// values Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type}) + /// } + /// + /// see + public class Pkcs10CertificationRequestDelaySigned : Pkcs10CertificationRequest + { + protected Pkcs10CertificationRequestDelaySigned() + : base() + { + } + public Pkcs10CertificationRequestDelaySigned( + byte[] encoded) + : base(encoded) + { + } + public Pkcs10CertificationRequestDelaySigned( + Asn1Sequence seq) + : base(seq) + { + } + public Pkcs10CertificationRequestDelaySigned( + Stream input) + : base(input) + { + } + public Pkcs10CertificationRequestDelaySigned( + string signatureAlgorithm, + X509Name subject, + AsymmetricKeyParameter publicKey, + Asn1Set attributes, + AsymmetricKeyParameter signingKey) + : base(signatureAlgorithm, subject, publicKey, attributes, signingKey) + { + } + /// + /// Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + /// + /// Name of Sig Alg. + /// X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + /// Public Key to be included in cert reqest. + /// ASN1Set of Attributes. + /// + /// After the object is constructed use the and finally the + /// SignRequest methods to finalize the request. + /// + public Pkcs10CertificationRequestDelaySigned( + string signatureAlgorithm, + X509Name subject, + AsymmetricKeyParameter publicKey, + Asn1Set attributes) + { + if (signatureAlgorithm == null) + throw new ArgumentNullException("signatureAlgorithm"); + if (subject == null) + throw new ArgumentNullException("subject"); + if (publicKey == null) + throw new ArgumentNullException("publicKey"); + if (publicKey.IsPrivate) + throw new ArgumentException("expected public key", "publicKey"); + + DerObjectIdentifier sigOid = CollectionUtilities.GetValueOrNull(m_algorithms, signatureAlgorithm); + if (sigOid == null) + { + try + { + sigOid = new DerObjectIdentifier(signatureAlgorithm); + } + catch (Exception e) + { + throw new ArgumentException("Unknown signature type requested", e); + } + } + if (m_noParams.Contains(sigOid)) + { + this.sigAlgId = new AlgorithmIdentifier(sigOid); + } + else if (m_exParams.TryGetValue(signatureAlgorithm, out var explicitParameters)) + { + this.sigAlgId = new AlgorithmIdentifier(sigOid, explicitParameters); + } + else + { + this.sigAlgId = new AlgorithmIdentifier(sigOid, DerNull.Instance); + } + SubjectPublicKeyInfo pubInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(publicKey); + this.reqInfo = new CertificationRequestInfo(subject, pubInfo, attributes); + } + + public byte[] GetDataToSign() + { + return reqInfo.GetDerEncoded(); + } + public void SignRequest(byte[] signedData) + { + //build the signature from the signed data + sigBits = new DerBitString(signedData); + } + public void SignRequest(DerBitString signedData) + { + //build the signature from the signed data + sigBits = signedData; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs10CertificationRequestDelaySigned.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs10CertificationRequestDelaySigned.cs.meta new file mode 100644 index 000000000..eb0109197 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs10CertificationRequestDelaySigned.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 91787b3601b63654b83ed2aaadde6434 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs12Entry.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs12Entry.cs new file mode 100644 index 000000000..50b3e5594 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs12Entry.cs @@ -0,0 +1,31 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs +{ + public abstract class Pkcs12Entry + { + private readonly IDictionary m_attributes; + + protected internal Pkcs12Entry(IDictionary attributes) + { + m_attributes = attributes; + } + + public Asn1Encodable this[DerObjectIdentifier oid] + { + get { return CollectionUtilities.GetValueOrNull(m_attributes, oid); } + } + + public IEnumerable BagAttributeKeys + { + get { return CollectionUtilities.Proxy(m_attributes.Keys); } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs12Entry.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs12Entry.cs.meta new file mode 100644 index 000000000..5b3f66bc6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs12Entry.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b33d7051f7d07254d99adcf4f11f449f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs12Store.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs12Store.cs new file mode 100644 index 000000000..979e1765d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs12Store.cs @@ -0,0 +1,994 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Misc; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs +{ + public class Pkcs12Store + { + public const string IgnoreUselessPasswordProperty = "BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs12.IgnoreUselessPassword"; + + private readonly Dictionary m_keys = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private readonly Dictionary m_localIds = new Dictionary(); + private readonly Dictionary m_certs = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private readonly Dictionary m_chainCerts = + new Dictionary(); + private readonly Dictionary m_keyCerts = + new Dictionary(); + private readonly DerObjectIdentifier keyAlgorithm; + private readonly DerObjectIdentifier keyPrfAlgorithm; + private readonly DerObjectIdentifier certAlgorithm; + private readonly bool useDerEncoding; + + private AsymmetricKeyEntry unmarkedKeyEntry = null; + + private const int MinIterations = 1024; + private const int SaltSize = 20; + + private static SubjectKeyIdentifier CreateSubjectKeyID(AsymmetricKeyParameter pubKey) + { + return new SubjectKeyIdentifier( + SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pubKey)); + } + + internal class CertId + { + private readonly byte[] id; + + internal CertId( + AsymmetricKeyParameter pubKey) + { + this.id = CreateSubjectKeyID(pubKey).GetKeyIdentifier(); + } + + internal CertId( + byte[] id) + { + this.id = id; + } + + internal byte[] Id + { + get { return id; } + } + + public override int GetHashCode() + { + return Arrays.GetHashCode(id); + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + CertId other = obj as CertId; + + if (other == null) + return false; + + return Arrays.AreEqual(id, other.id); + } + } + + internal Pkcs12Store(DerObjectIdentifier keyAlgorithm, DerObjectIdentifier keyPrfAlgorithm, + DerObjectIdentifier certAlgorithm, bool useDerEncoding) + { + this.keyAlgorithm = keyAlgorithm; + this.keyPrfAlgorithm = keyPrfAlgorithm; + this.certAlgorithm = certAlgorithm; + this.useDerEncoding = useDerEncoding; + } + + protected virtual void LoadKeyBag(PrivateKeyInfo privKeyInfo, Asn1Set bagAttributes) + { + AsymmetricKeyParameter privKey = PrivateKeyFactory.CreateKey(privKeyInfo); + + var attributes = new Dictionary(); + AsymmetricKeyEntry keyEntry = new AsymmetricKeyEntry(privKey, attributes); + + string alias = null; + Asn1OctetString localId = null; + + if (bagAttributes != null) + { + foreach (Asn1Sequence sq in bagAttributes) + { + DerObjectIdentifier aOid = DerObjectIdentifier.GetInstance(sq[0]); + Asn1Set attrSet = Asn1Set.GetInstance(sq[1]); + Asn1Encodable attr = null; + + if (attrSet.Count > 0) + { + // TODO We should be adding all attributes in the set + attr = attrSet[0]; + + // TODO We might want to "merge" attribute sets with + // the same OID - currently, differing values give an error + if (attributes.TryGetValue(aOid, out var attributeValue)) + { + // OK, but the value has to be the same + if (!attributeValue.Equals(attr)) + throw new IOException("attempt to add existing attribute with different value"); + } + else + { + attributes[aOid] = attr; + } + + if (aOid.Equals(PkcsObjectIdentifiers.Pkcs9AtFriendlyName)) + { + alias = ((DerBmpString)attr).GetString(); + // TODO Do these in a separate loop, just collect aliases here + m_keys[alias] = keyEntry; + } + else if (aOid.Equals(PkcsObjectIdentifiers.Pkcs9AtLocalKeyID)) + { + localId = (Asn1OctetString)attr; + } + } + } + } + + if (localId != null) + { + string name = Hex.ToHexString(localId.GetOctets()); + + if (alias == null) + { + m_keys[name] = keyEntry; + } + else + { + // TODO There may have been more than one alias + m_localIds[alias] = name; + } + } + else + { + unmarkedKeyEntry = keyEntry; + } + } + + protected virtual void LoadPkcs8ShroudedKeyBag(EncryptedPrivateKeyInfo encPrivKeyInfo, Asn1Set bagAttributes, + char[] password, bool wrongPkcs12Zero) + { + if (password != null) + { + PrivateKeyInfo privInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo( + password, wrongPkcs12Zero, encPrivKeyInfo); + + LoadKeyBag(privInfo, bagAttributes); + } + } + + public void Load(Stream input, char[] password) + { + if (input == null) + throw new ArgumentNullException("input"); + + Pfx bag = Pfx.GetInstance(Asn1Object.FromStream(input)); + ContentInfo info = bag.AuthSafe; + bool wrongPkcs12Zero = false; + + if (bag.MacData != null) // check the mac code + { + if (password == null) + throw new ArgumentNullException("password", "no password supplied when one expected"); + + MacData mData = bag.MacData; + DigestInfo dInfo = mData.Mac; + AlgorithmIdentifier algId = dInfo.AlgorithmID; + byte[] salt = mData.GetSalt(); + int itCount = mData.IterationCount.IntValue; + + byte[] data = Asn1OctetString.GetInstance(info.Content).GetOctets(); + + byte[] mac = CalculatePbeMac(algId.Algorithm, salt, itCount, password, false, data); + byte[] dig = dInfo.GetDigest(); + + if (!Arrays.ConstantTimeAreEqual(mac, dig)) + { + if (password.Length > 0) + throw new IOException("PKCS12 key store MAC invalid - wrong password or corrupted file."); + + // Try with incorrect zero length password + mac = CalculatePbeMac(algId.Algorithm, salt, itCount, password, true, data); + + if (!Arrays.ConstantTimeAreEqual(mac, dig)) + throw new IOException("PKCS12 key store MAC invalid - wrong password or corrupted file."); + + wrongPkcs12Zero = true; + } + } + else if (password != null) + { + string ignoreProperty = Org.BouncyCastle.Utilities.Platform.GetEnvironmentVariable(IgnoreUselessPasswordProperty); + bool ignore = ignoreProperty != null && Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase("true", ignoreProperty); + + if (!ignore) + { + throw new IOException("password supplied for keystore that does not require one"); + } + } + + m_keys.Clear(); + m_localIds.Clear(); + unmarkedKeyEntry = null; + + var certBags = new List(); + + if (info.ContentType.Equals(PkcsObjectIdentifiers.Data)) + { + Asn1OctetString content = Asn1OctetString.GetInstance(info.Content); + AuthenticatedSafe authSafe = AuthenticatedSafe.GetInstance(content.GetOctets()); + ContentInfo[] cis = authSafe.GetContentInfo(); + + foreach (ContentInfo ci in cis) + { + DerObjectIdentifier oid = ci.ContentType; + + byte[] octets = null; + if (oid.Equals(PkcsObjectIdentifiers.Data)) + { + octets = Asn1OctetString.GetInstance(ci.Content).GetOctets(); + } + else if (oid.Equals(PkcsObjectIdentifiers.EncryptedData)) + { + if (password != null) + { + EncryptedData d = EncryptedData.GetInstance(ci.Content); + octets = CryptPbeData(false, d.EncryptionAlgorithm, + password, wrongPkcs12Zero, d.Content.GetOctets()); + } + } + else + { + // TODO Other data types + } + + if (octets != null) + { + Asn1Sequence seq = Asn1Sequence.GetInstance(octets); + + foreach (Asn1Sequence subSeq in seq) + { + SafeBag b = SafeBag.GetInstance(subSeq); + + if (b.BagID.Equals(PkcsObjectIdentifiers.CertBag)) + { + certBags.Add(b); + } + else if (b.BagID.Equals(PkcsObjectIdentifiers.Pkcs8ShroudedKeyBag)) + { + LoadPkcs8ShroudedKeyBag(EncryptedPrivateKeyInfo.GetInstance(b.BagValue), + b.BagAttributes, password, wrongPkcs12Zero); + } + else if (b.BagID.Equals(PkcsObjectIdentifiers.KeyBag)) + { + LoadKeyBag(PrivateKeyInfo.GetInstance(b.BagValue), b.BagAttributes); + } + else + { + // TODO Other bag types + } + } + } + } + } + + m_certs.Clear(); + m_chainCerts.Clear(); + m_keyCerts.Clear(); + + foreach (SafeBag b in certBags) + { + CertBag certBag = CertBag.GetInstance(b.BagValue); + byte[] octets = ((Asn1OctetString)certBag.CertValue).GetOctets(); + X509Certificate cert = new X509CertificateParser().ReadCertificate(octets); + + // + // set the attributes + // + var attributes = new Dictionary(); + Asn1OctetString localId = null; + string alias = null; + + if (b.BagAttributes != null) + { + foreach (Asn1Sequence sq in b.BagAttributes) + { + DerObjectIdentifier aOid = DerObjectIdentifier.GetInstance(sq[0]); + Asn1Set attrSet = Asn1Set.GetInstance(sq[1]); + + if (attrSet.Count > 0) + { + // TODO We should be adding all attributes in the set + Asn1Encodable attr = attrSet[0]; + + // TODO We might want to "merge" attribute sets with + // the same OID - currently, differing values give an error + if (attributes.TryGetValue(aOid, out var attributeValue)) + { + // we've found more than one - one might be incorrect + if (PkcsObjectIdentifiers.Pkcs9AtLocalKeyID.Equals(aOid)) + { + string id = Hex.ToHexString(Asn1OctetString.GetInstance(attr).GetOctets()); + if (!m_keys.ContainsKey(id) && !m_localIds.ContainsKey(id)) + continue; // ignore this one - it's not valid + } + + // OK, but the value has to be the same + if (!attributeValue.Equals(attr)) + { + throw new IOException("attempt to add existing attribute with different value"); + } + } + else + { + attributes[aOid] = attr; + } + + if (aOid.Equals(PkcsObjectIdentifiers.Pkcs9AtFriendlyName)) + { + alias = ((DerBmpString)attr).GetString(); + } + else if (aOid.Equals(PkcsObjectIdentifiers.Pkcs9AtLocalKeyID)) + { + localId = (Asn1OctetString)attr; + } + } + } + } + + CertId certId = new CertId(cert.GetPublicKey()); + X509CertificateEntry certEntry = new X509CertificateEntry(cert, attributes); + + m_chainCerts[certId] = certEntry; + + if (unmarkedKeyEntry != null) + { + if (m_keyCerts.Count == 0) + { + string name = Hex.ToHexString(certId.Id); + + m_keyCerts[name] = certEntry; + m_keys[name] = unmarkedKeyEntry; + } + else + { + m_keys["unmarked"] = unmarkedKeyEntry; + } + } + else + { + if (localId != null) + { + string name = Hex.ToHexString(localId.GetOctets()); + + m_keyCerts[name] = certEntry; + } + + if (alias != null) + { + // TODO There may have been more than one alias + m_certs[alias] = certEntry; + } + } + } + } + + public AsymmetricKeyEntry GetKey(string alias) + { + if (alias == null) + throw new ArgumentNullException(nameof(alias)); + + return CollectionUtilities.GetValueOrNull(m_keys, alias); + } + + public bool IsCertificateEntry(string alias) + { + if (alias == null) + throw new ArgumentNullException(nameof(alias)); + + return m_certs.ContainsKey(alias) && !m_keys.ContainsKey(alias); + } + + public bool IsKeyEntry(string alias) + { + if (alias == null) + throw new ArgumentNullException(nameof(alias)); + + return m_keys.ContainsKey(alias); + } + + public IEnumerable Aliases + { + get + { + var aliases = new HashSet(m_certs.Keys); + aliases.UnionWith(m_keys.Keys); + return CollectionUtilities.Proxy(aliases); + } + } + + public bool ContainsAlias(string alias) + { + if (alias == null) + throw new ArgumentNullException(nameof(alias)); + + return m_certs.ContainsKey(alias) || m_keys.ContainsKey(alias); + } + + /** + * simply return the cert entry for the private key + */ + public X509CertificateEntry GetCertificate(string alias) + { + if (alias == null) + throw new ArgumentNullException(nameof(alias)); + + if (m_certs.TryGetValue(alias, out var cert)) + return cert; + + var keyCertKey = alias; + if (m_localIds.TryGetValue(alias, out var localId)) + { + keyCertKey = localId; + } + + return CollectionUtilities.GetValueOrNull(m_keyCerts, keyCertKey); + } + + public string GetCertificateAlias(X509Certificate cert) + { + if (cert == null) + throw new ArgumentNullException(nameof(cert)); + + foreach (var entry in m_certs) + { + if (entry.Value.Certificate.Equals(cert)) + return entry.Key; + } + + foreach (var entry in m_keyCerts) + { + if (entry.Value.Certificate.Equals(cert)) + return entry.Key; + } + + return null; + } + + public X509CertificateEntry[] GetCertificateChain(string alias) + { + if (alias == null) + throw new ArgumentNullException(nameof(alias)); + + if (!IsKeyEntry(alias)) + return null; + + X509CertificateEntry c = GetCertificate(alias); + if (c == null) + return null; + + var cs = new List(); + + while (c != null) + { + X509Certificate x509c = c.Certificate; + X509CertificateEntry nextC = null; + + Asn1OctetString akiValue = x509c.GetExtensionValue(X509Extensions.AuthorityKeyIdentifier); + if (akiValue != null) + { + AuthorityKeyIdentifier aki = AuthorityKeyIdentifier.GetInstance(akiValue.GetOctets()); + + byte[] keyID = aki.GetKeyIdentifier(); + if (keyID != null) + { + nextC = CollectionUtilities.GetValueOrNull(m_chainCerts, new CertId(keyID)); + } + } + + if (nextC == null) + { + // + // no authority key id, try the Issuer DN + // + X509Name i = x509c.IssuerDN; + X509Name s = x509c.SubjectDN; + + if (!i.Equivalent(s)) + { + foreach (var entry in m_chainCerts) + { + X509Certificate cert = entry.Value.Certificate; + + if (cert.SubjectDN.Equivalent(i)) + { + try + { + x509c.Verify(cert.GetPublicKey()); + + nextC = entry.Value; + break; + } + catch (InvalidKeyException) + { + // TODO What if it doesn't verify? + } + } + } + } + } + + cs.Add(c); + if (nextC != c) // self signed - end of the chain + { + c = nextC; + } + else + { + c = null; + } + } + + return cs.ToArray(); + } + + public void SetCertificateEntry(string alias, X509CertificateEntry certEntry) + { + if (alias == null) + throw new ArgumentNullException(nameof(alias)); + if (certEntry == null) + throw new ArgumentNullException(nameof(certEntry)); + if (m_keys.ContainsKey(alias)) + throw new ArgumentException("There is a key entry with the name " + alias + "."); + + m_certs[alias] = certEntry; + m_chainCerts[new CertId(certEntry.Certificate.GetPublicKey())] = certEntry; + } + + public void SetKeyEntry(string alias, AsymmetricKeyEntry keyEntry, X509CertificateEntry[] chain) + { + if (alias == null) + throw new ArgumentNullException(nameof(alias)); + if (keyEntry == null) + throw new ArgumentNullException(nameof(keyEntry)); + if (keyEntry.Key.IsPrivate && chain == null) + throw new ArgumentException("No certificate chain for private key"); + + if (m_keys.ContainsKey(alias)) + { + DeleteEntry(alias); + } + + m_keys[alias] = keyEntry; + m_certs[alias] = chain[0]; + + for (int i = 0; i != chain.Length; i++) + { + m_chainCerts[new CertId(chain[i].Certificate.GetPublicKey())] = chain[i]; + } + } + + public void DeleteEntry(string alias) + { + if (alias == null) + throw new ArgumentNullException(nameof(alias)); + + if (CollectionUtilities.Remove(m_certs, alias, out var cert)) + { + m_chainCerts.Remove(new CertId(cert.Certificate.GetPublicKey())); + } + + if (m_keys.Remove(alias)) + { + if (CollectionUtilities.Remove(m_localIds, alias, out var id)) + { + if (CollectionUtilities.Remove(m_keyCerts, id, out var keyCert)) + { + m_chainCerts.Remove(new CertId(keyCert.Certificate.GetPublicKey())); + } + } + } + } + + public bool IsEntryOfType(string alias, Type entryType) + { + if (entryType == typeof(X509CertificateEntry)) + return IsCertificateEntry(alias); + + if (entryType == typeof(AsymmetricKeyEntry)) + return IsKeyEntry(alias) && GetCertificate(alias) != null; + + return false; + } + + public int Count + { + get + { + int count = m_certs.Count; + + foreach (var key in m_keys.Keys) + { + if (!m_certs.ContainsKey(key)) + { + ++count; + } + } + + return count; + } + } + + public void Save(Stream stream, char[] password, SecureRandom random) + { + if (stream == null) + throw new ArgumentNullException(nameof(stream)); + if (random == null) + throw new ArgumentNullException(nameof(random)); + + // + // handle the keys + // + Asn1EncodableVector keyBags = new Asn1EncodableVector(); + foreach (var keyEntry in m_keys) + { + var name = keyEntry.Key; + var privKey = keyEntry.Value; + + byte[] kSalt = new byte[SaltSize]; + random.NextBytes(kSalt); + + DerObjectIdentifier bagOid; + Asn1Encodable bagData; + + if (password == null) + { + bagOid = PkcsObjectIdentifiers.KeyBag; + bagData = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privKey.Key); + } + else + { + bagOid = PkcsObjectIdentifiers.Pkcs8ShroudedKeyBag; + if (keyPrfAlgorithm != null) + { + bagData = EncryptedPrivateKeyInfoFactory.CreateEncryptedPrivateKeyInfo(keyAlgorithm, + keyPrfAlgorithm, password, kSalt, MinIterations, random, privKey.Key); + } + else + { + bagData = EncryptedPrivateKeyInfoFactory.CreateEncryptedPrivateKeyInfo(keyAlgorithm, password, + kSalt, MinIterations, privKey.Key); + } + } + + Asn1EncodableVector kName = new Asn1EncodableVector(); + + foreach (var oid in privKey.BagAttributeKeys) + { + // NB: Ignore any existing FriendlyName + if (!PkcsObjectIdentifiers.Pkcs9AtFriendlyName.Equals(oid)) + { + kName.Add(new DerSequence(oid, new DerSet(privKey[oid]))); + } + } + + // + // make sure we are using the local alias on store + // + // NB: We always set the FriendlyName based on 'name' + //if (privKey[PkcsObjectIdentifiers.Pkcs9AtFriendlyName] == null) + { + kName.Add( + new DerSequence( + PkcsObjectIdentifiers.Pkcs9AtFriendlyName, + new DerSet(new DerBmpString(name)))); + } + + // + // make sure we have a local key-id + // + if (privKey[PkcsObjectIdentifiers.Pkcs9AtLocalKeyID] == null) + { + X509CertificateEntry ct = GetCertificate(name); + AsymmetricKeyParameter pubKey = ct.Certificate.GetPublicKey(); + SubjectKeyIdentifier subjectKeyID = CreateSubjectKeyID(pubKey); + + kName.Add( + new DerSequence( + PkcsObjectIdentifiers.Pkcs9AtLocalKeyID, + new DerSet(subjectKeyID))); + } + + keyBags.Add(new SafeBag(bagOid, bagData.ToAsn1Object(), new DerSet(kName))); + } + + byte[] keyBagsEncoding = new DerSequence(keyBags).GetDerEncoded(); + ContentInfo keysInfo = new ContentInfo(PkcsObjectIdentifiers.Data, new BerOctetString(keyBagsEncoding)); + + // + // certificate processing + // + byte[] cSalt = new byte[SaltSize]; + + random.NextBytes(cSalt); + + Asn1EncodableVector certBags = new Asn1EncodableVector(); + Pkcs12PbeParams cParams = new Pkcs12PbeParams(cSalt, MinIterations); + AlgorithmIdentifier cAlgId = new AlgorithmIdentifier(certAlgorithm, cParams.ToAsn1Object()); + var doneCerts = new HashSet(); + + foreach (string name in m_keys.Keys) + { + X509CertificateEntry certEntry = GetCertificate(name); + CertBag cBag = new CertBag( + PkcsObjectIdentifiers.X509Certificate, + new DerOctetString(certEntry.Certificate.GetEncoded())); + + Asn1EncodableVector fName = new Asn1EncodableVector(); + + foreach (var oid in certEntry.BagAttributeKeys) + { + // NB: Ignore any existing FriendlyName + if (!PkcsObjectIdentifiers.Pkcs9AtFriendlyName.Equals(oid)) + { + fName.Add(new DerSequence(oid, new DerSet(certEntry[oid]))); + } + } + + // + // make sure we are using the local alias on store + // + // NB: We always set the FriendlyName based on 'name' + //if (certEntry[PkcsObjectIdentifiers.Pkcs9AtFriendlyName] == null) + { + fName.Add( + new DerSequence( + PkcsObjectIdentifiers.Pkcs9AtFriendlyName, + new DerSet(new DerBmpString(name)))); + } + + // + // make sure we have a local key-id + // + if (certEntry[PkcsObjectIdentifiers.Pkcs9AtLocalKeyID] == null) + { + AsymmetricKeyParameter pubKey = certEntry.Certificate.GetPublicKey(); + SubjectKeyIdentifier subjectKeyID = CreateSubjectKeyID(pubKey); + + fName.Add( + new DerSequence( + PkcsObjectIdentifiers.Pkcs9AtLocalKeyID, + new DerSet(subjectKeyID))); + } + + certBags.Add(new SafeBag(PkcsObjectIdentifiers.CertBag, cBag.ToAsn1Object(), new DerSet(fName))); + + doneCerts.Add(certEntry.Certificate); + } + + foreach (var certEntry in m_certs) + { + var certId = certEntry.Key; + var cert = certEntry.Value; + + if (m_keys.ContainsKey(certId)) + continue; + + CertBag cBag = new CertBag( + PkcsObjectIdentifiers.X509Certificate, + new DerOctetString(cert.Certificate.GetEncoded())); + + Asn1EncodableVector fName = new Asn1EncodableVector(); + + foreach (var oid in cert.BagAttributeKeys) + { + // a certificate not immediately linked to a key doesn't require + // a localKeyID and will confuse some PKCS12 implementations. + // + // If we find one, we'll prune it out. + if (PkcsObjectIdentifiers.Pkcs9AtLocalKeyID.Equals(oid)) + continue; + + // NB: Ignore any existing FriendlyName + if (!PkcsObjectIdentifiers.Pkcs9AtFriendlyName.Equals(oid)) + { + fName.Add(new DerSequence(oid, new DerSet(cert[oid]))); + } + } + + // + // make sure we are using the local alias on store + // + // NB: We always set the FriendlyName based on 'certId' + //if (cert[PkcsObjectIdentifiers.Pkcs9AtFriendlyName] == null) + { + fName.Add( + new DerSequence( + PkcsObjectIdentifiers.Pkcs9AtFriendlyName, + new DerSet(new DerBmpString(certId)))); + } + + // the Oracle PKCS12 parser looks for a trusted key usage for named certificates as well + if (cert[MiscObjectIdentifiers.id_oracle_pkcs12_trusted_key_usage] == null) + { + Asn1OctetString ext = cert.Certificate.GetExtensionValue(X509Extensions.ExtendedKeyUsage); + + if (ext != null) + { + ExtendedKeyUsage usage = ExtendedKeyUsage.GetInstance(ext.GetOctets()); + Asn1EncodableVector v = new Asn1EncodableVector(); + IList usages = usage.GetAllUsages(); + for (int i = 0; i != usages.Count; i++) + { + v.Add(usages[i]); + } + + fName.Add( + new DerSequence( + MiscObjectIdentifiers.id_oracle_pkcs12_trusted_key_usage, + new DerSet(v))); + } + else + { + fName.Add( + new DerSequence( + MiscObjectIdentifiers.id_oracle_pkcs12_trusted_key_usage, + new DerSet(KeyPurposeID.AnyExtendedKeyUsage))); + } + } + + certBags.Add(new SafeBag(PkcsObjectIdentifiers.CertBag, cBag.ToAsn1Object(), new DerSet(fName))); + + doneCerts.Add(cert.Certificate); + } + + foreach (var chainCertEntry in m_chainCerts) + { + var certId = chainCertEntry.Key; + var cert = chainCertEntry.Value; + + if (doneCerts.Contains(cert.Certificate)) + continue; + + CertBag cBag = new CertBag( + PkcsObjectIdentifiers.X509Certificate, + new DerOctetString(cert.Certificate.GetEncoded())); + + Asn1EncodableVector fName = new Asn1EncodableVector(); + + foreach (var oid in cert.BagAttributeKeys) + { + // a certificate not immediately linked to a key doesn't require + // a localKeyID and will confuse some PKCS12 implementations. + // + // If we find one, we'll prune it out. + if (PkcsObjectIdentifiers.Pkcs9AtLocalKeyID.Equals(oid)) + continue; + + fName.Add(new DerSequence(oid, new DerSet(cert[oid]))); + } + + certBags.Add(new SafeBag(PkcsObjectIdentifiers.CertBag, cBag.ToAsn1Object(), new DerSet(fName))); + } + + byte[] certBagsEncoding = new DerSequence(certBags).GetDerEncoded(); + + ContentInfo certsInfo; + if (password == null || certAlgorithm == null) + { + certsInfo = new ContentInfo(PkcsObjectIdentifiers.Data, new BerOctetString(certBagsEncoding)); + } + else + { + byte[] certBytes = CryptPbeData(true, cAlgId, password, false, certBagsEncoding); + EncryptedData cInfo = new EncryptedData(PkcsObjectIdentifiers.Data, cAlgId, new BerOctetString(certBytes)); + certsInfo = new ContentInfo(PkcsObjectIdentifiers.EncryptedData, cInfo.ToAsn1Object()); + } + + ContentInfo[] info = new ContentInfo[]{ keysInfo, certsInfo }; + + byte[] data = new AuthenticatedSafe(info).GetEncoded( + useDerEncoding ? Asn1Encodable.Der : Asn1Encodable.Ber); + + ContentInfo mainInfo = new ContentInfo(PkcsObjectIdentifiers.Data, new BerOctetString(data)); + + // + // create the mac + // + MacData macData = null; + if (password != null) + { + byte[] mSalt = new byte[20]; + random.NextBytes(mSalt); + + byte[] mac = CalculatePbeMac(OiwObjectIdentifiers.IdSha1, + mSalt, MinIterations, password, false, data); + + AlgorithmIdentifier algId = new AlgorithmIdentifier( + OiwObjectIdentifiers.IdSha1, DerNull.Instance); + DigestInfo dInfo = new DigestInfo(algId, mac); + + macData = new MacData(dInfo, mSalt, MinIterations); + } + + // + // output the Pfx + // + Pfx pfx = new Pfx(mainInfo, macData); + + pfx.EncodeTo(stream, useDerEncoding ? Asn1Encodable.Der : Asn1Encodable.Ber); + } + + internal static byte[] CalculatePbeMac( + DerObjectIdentifier oid, + byte[] salt, + int itCount, + char[] password, + bool wrongPkcs12Zero, + byte[] data) + { + Asn1Encodable asn1Params = PbeUtilities.GenerateAlgorithmParameters( + oid, salt, itCount); + ICipherParameters cipherParams = PbeUtilities.GenerateCipherParameters( + oid, password, wrongPkcs12Zero, asn1Params); + + IMac mac = (IMac) PbeUtilities.CreateEngine(oid); + mac.Init(cipherParams); + return MacUtilities.DoFinal(mac, data); + } + + private static byte[] CryptPbeData( + bool forEncryption, + AlgorithmIdentifier algId, + char[] password, + bool wrongPkcs12Zero, + byte[] data) + { + IBufferedCipher cipher = PbeUtilities.CreateEngine(algId) as IBufferedCipher; + + if (cipher == null) + throw new Exception("Unknown encryption algorithm: " + algId.Algorithm); + + if (algId.Algorithm.Equals(PkcsObjectIdentifiers.IdPbeS2)) + { + PbeS2Parameters pbeParameters = PbeS2Parameters.GetInstance(algId.Parameters); + ICipherParameters cipherParams = PbeUtilities.GenerateCipherParameters( + algId.Algorithm, password, pbeParameters); + cipher.Init(forEncryption, cipherParams); + return cipher.DoFinal(data); + } + else + { + Pkcs12PbeParams pbeParameters = Pkcs12PbeParams.GetInstance(algId.Parameters); + ICipherParameters cipherParams = PbeUtilities.GenerateCipherParameters( + algId.Algorithm, password, wrongPkcs12Zero, pbeParameters); + cipher.Init(forEncryption, cipherParams); + return cipher.DoFinal(data); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs12Store.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs12Store.cs.meta new file mode 100644 index 000000000..480c210d4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs12Store.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 168dce1c98ed30a41b666da9816a25c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs12Utilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs12Utilities.cs new file mode 100644 index 000000000..6eea7254c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs12Utilities.cs @@ -0,0 +1,81 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs +{ + /** + * Utility class for reencoding PKCS#12 files to definite length. + */ + public class Pkcs12Utilities + { + /** + * Just re-encode the outer layer of the PKCS#12 file to definite length encoding. + * + * @param berPKCS12File - original PKCS#12 file + * @return a byte array representing the DER encoding of the PFX structure + * @throws IOException + */ + public static byte[] ConvertToDefiniteLength( + byte[] berPkcs12File) + { + Pfx pfx = Pfx.GetInstance(berPkcs12File); + + return pfx.GetEncoded(Asn1Encodable.Der); + } + + /** + * Re-encode the PKCS#12 structure to definite length encoding at the inner layer + * as well, recomputing the MAC accordingly. + * + * @param berPKCS12File - original PKCS12 file. + * @param provider - provider to use for MAC calculation. + * @return a byte array representing the DER encoding of the PFX structure. + * @throws IOException on parsing, encoding errors. + */ + public static byte[] ConvertToDefiniteLength( + byte[] berPkcs12File, + char[] passwd) + { + Pfx pfx = Pfx.GetInstance(berPkcs12File); + + ContentInfo info = pfx.AuthSafe; + + Asn1OctetString content = Asn1OctetString.GetInstance(info.Content); + Asn1Object obj = Asn1Object.FromByteArray(content.GetOctets()); + + info = new ContentInfo(info.ContentType, new DerOctetString(obj.GetEncoded(Asn1Encodable.Der))); + + MacData mData = pfx.MacData; + + try + { + int itCount = mData.IterationCount.IntValue; + byte[] data = Asn1OctetString.GetInstance(info.Content).GetOctets(); + byte[] res = Pkcs12Store.CalculatePbeMac( + mData.Mac.AlgorithmID.Algorithm, mData.GetSalt(), itCount, passwd, false, data); + + AlgorithmIdentifier algId = new AlgorithmIdentifier( + mData.Mac.AlgorithmID.Algorithm, DerNull.Instance); + DigestInfo dInfo = new DigestInfo(algId, res); + + mData = new MacData(dInfo, mData.GetSalt(), itCount); + } + catch (Exception e) + { + throw new IOException("error constructing MAC: " + e.ToString()); + } + + pfx = new Pfx(info, mData); + + return pfx.GetEncoded(Asn1Encodable.Der); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs12Utilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs12Utilities.cs.meta new file mode 100644 index 000000000..6ebf168e6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs12Utilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 351095fcda1b7be4fa4bc49f38ce24d7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs8EncryptedPrivateKeyInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs8EncryptedPrivateKeyInfo.cs new file mode 100644 index 000000000..9f604cf6d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs8EncryptedPrivateKeyInfo.cs @@ -0,0 +1,112 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs +{ + /// + /// A holding class for a PKCS#8 encrypted private key info object that allows for its decryption. + /// + public class Pkcs8EncryptedPrivateKeyInfo + { + private EncryptedPrivateKeyInfo encryptedPrivateKeyInfo; + + private static EncryptedPrivateKeyInfo parseBytes(byte[] pkcs8Encoding) + { + try + { + return EncryptedPrivateKeyInfo.GetInstance(pkcs8Encoding); + } + + catch (ArgumentException e) + { + throw new PkcsIOException("malformed data: " + e.Message, e); + } + catch (Exception e) + { + throw new PkcsIOException("malformed data: " + e.Message, e); + } + } + + /// + /// Base constructor from a PKCS#8 EncryptedPrivateKeyInfo object. + /// + /// A PKCS#8 EncryptedPrivateKeyInfo object. + public Pkcs8EncryptedPrivateKeyInfo(EncryptedPrivateKeyInfo encryptedPrivateKeyInfo) + { + this.encryptedPrivateKeyInfo = encryptedPrivateKeyInfo; + } + + /// + /// Base constructor from a BER encoding of a PKCS#8 EncryptedPrivateKeyInfo object. + /// + /// A BER encoding of a PKCS#8 EncryptedPrivateKeyInfo objects. + public Pkcs8EncryptedPrivateKeyInfo(byte[] encryptedPrivateKeyInfo) : this(parseBytes(encryptedPrivateKeyInfo)) + { + + } + + /// + /// Returns the underlying ASN.1 structure inside this object. + /// + /// Return the EncryptedPrivateKeyInfo structure in this object. + public EncryptedPrivateKeyInfo ToAsn1Structure() + { + return encryptedPrivateKeyInfo; + } + + /// + /// Returns a copy of the encrypted data in this structure. + /// + /// Return a copy of the encrypted data in this object. + public byte[] GetEncryptedData() + { + return encryptedPrivateKeyInfo.GetEncryptedData(); + } + + /// + /// Return a binary ASN.1 encoding of the EncryptedPrivateKeyInfo structure in this object. + /// + /// A byte array containing the encoded object. + public byte[] GetEncoded() + { + return encryptedPrivateKeyInfo.GetEncoded(); + } + + /// + /// Get a decryptor from the passed in provider and decrypt the encrypted private key info, returning the result. + /// + /// A provider to query for decryptors for the object. + /// The decrypted private key info structure. + public PrivateKeyInfo DecryptPrivateKeyInfo(IDecryptorBuilderProvider inputDecryptorProvider) + { + try + { + ICipherBuilder decryptorBuilder = inputDecryptorProvider.CreateDecryptorBuilder(encryptedPrivateKeyInfo.EncryptionAlgorithm); + + ICipher encIn = decryptorBuilder.BuildCipher(new MemoryInputStream(encryptedPrivateKeyInfo.GetEncryptedData())); + + byte[] data; + using (var strm = encIn.Stream) + { + data = Streams.ReadAll(encIn.Stream); + } + + return PrivateKeyInfo.GetInstance(data); + } + catch (Exception e) + { + throw new PkcsException("unable to read encrypted data: " + e.Message, e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs8EncryptedPrivateKeyInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs8EncryptedPrivateKeyInfo.cs.meta new file mode 100644 index 000000000..004c7d761 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs8EncryptedPrivateKeyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49d3fa588f57c834d96ecd44ba6bad73 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs8EncryptedPrivateKeyInfoBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs8EncryptedPrivateKeyInfoBuilder.cs new file mode 100644 index 000000000..0636f52cb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs8EncryptedPrivateKeyInfoBuilder.cs @@ -0,0 +1,57 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs +{ + public class Pkcs8EncryptedPrivateKeyInfoBuilder + { + private PrivateKeyInfo privateKeyInfo; + + public Pkcs8EncryptedPrivateKeyInfoBuilder(byte[] privateKeyInfo): this(PrivateKeyInfo.GetInstance(privateKeyInfo)) + { + } + + public Pkcs8EncryptedPrivateKeyInfoBuilder(PrivateKeyInfo privateKeyInfo) + { + this.privateKeyInfo = privateKeyInfo; + } + + /// + /// Create the encrypted private key info using the passed in encryptor. + /// + /// The encryptor to use. + /// An encrypted private key info containing the original private key info. + public Pkcs8EncryptedPrivateKeyInfo Build( + ICipherBuilder encryptor) + { + try + { + MemoryStream bOut = new MemoryOutputStream(); + ICipher cOut = encryptor.BuildCipher(bOut); + byte[] keyData = privateKeyInfo.GetEncoded(); + + using (var str = cOut.Stream) + { + str.Write(keyData, 0, keyData.Length); + } + + return new Pkcs8EncryptedPrivateKeyInfo( + new EncryptedPrivateKeyInfo((AlgorithmIdentifier)encryptor.AlgorithmDetails, bOut.ToArray())); + } + catch (IOException) + { + throw new InvalidOperationException("cannot encode privateKeyInfo"); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs8EncryptedPrivateKeyInfoBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs8EncryptedPrivateKeyInfoBuilder.cs.meta new file mode 100644 index 000000000..55e522748 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/Pkcs8EncryptedPrivateKeyInfoBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c340fab1cfc715642815622a28156614 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PkcsException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PkcsException.cs new file mode 100644 index 000000000..364deb94c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PkcsException.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs +{ + /// Base exception for PKCS related issues. + [Serializable] + public class PkcsException + : Exception + { + public PkcsException() + : base() + { + } + + public PkcsException(string message) + : base(message) + { + } + + public PkcsException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected PkcsException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PkcsException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PkcsException.cs.meta new file mode 100644 index 000000000..027697b26 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PkcsException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3c07dfe3ae380e44b0c278374a5f90b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PkcsIOException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PkcsIOException.cs new file mode 100644 index 000000000..d1f1bd1da --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PkcsIOException.cs @@ -0,0 +1,36 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs +{ + /// Base exception for parsing related issues in the PKCS namespace. + [Serializable] + public class PkcsIOException + : IOException + { + public PkcsIOException() + : base() + { + } + + public PkcsIOException(string message) + : base(message) + { + } + + public PkcsIOException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected PkcsIOException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PkcsIOException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PkcsIOException.cs.meta new file mode 100644 index 000000000..c11208240 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PkcsIOException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6a9c22099cc169f41866f0ed58031fd1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PrivateKeyInfoFactory.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PrivateKeyInfoFactory.cs new file mode 100644 index 000000000..df51ab7a2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PrivateKeyInfoFactory.cs @@ -0,0 +1,292 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.EdEC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Rosstandart; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Sec; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs +{ + public static class PrivateKeyInfoFactory + { + public static PrivateKeyInfo CreatePrivateKeyInfo( + AsymmetricKeyParameter privateKey) + { + return CreatePrivateKeyInfo(privateKey, null); + } + + /** + * Create a PrivateKeyInfo representation of a private key with attributes. + * + * @param privateKey the key to be encoded into the info object. + * @param attributes the set of attributes to be included. + * @return the appropriate PrivateKeyInfo + * @throws java.io.IOException on an error encoding the key + */ + public static PrivateKeyInfo CreatePrivateKeyInfo(AsymmetricKeyParameter privateKey, Asn1Set attributes) + { + if (privateKey == null) + throw new ArgumentNullException("privateKey"); + if (!privateKey.IsPrivate) + throw new ArgumentException("Public key passed - private key expected", "privateKey"); + + if (privateKey is ElGamalPrivateKeyParameters) + { + ElGamalPrivateKeyParameters _key = (ElGamalPrivateKeyParameters)privateKey; + ElGamalParameters egp = _key.Parameters; + return new PrivateKeyInfo( + new AlgorithmIdentifier(OiwObjectIdentifiers.ElGamalAlgorithm, new ElGamalParameter(egp.P, egp.G).ToAsn1Object()), + new DerInteger(_key.X), + attributes); + } + + if (privateKey is DsaPrivateKeyParameters) + { + DsaPrivateKeyParameters _key = (DsaPrivateKeyParameters)privateKey; + DsaParameters dp = _key.Parameters; + return new PrivateKeyInfo( + new AlgorithmIdentifier(X9ObjectIdentifiers.IdDsa, new DsaParameter(dp.P, dp.Q, dp.G).ToAsn1Object()), + new DerInteger(_key.X), + attributes); + } + + if (privateKey is DHPrivateKeyParameters) + { + DHPrivateKeyParameters _key = (DHPrivateKeyParameters)privateKey; + + DHParameter p = new DHParameter( + _key.Parameters.P, _key.Parameters.G, _key.Parameters.L); + + return new PrivateKeyInfo( + new AlgorithmIdentifier(_key.AlgorithmOid, p.ToAsn1Object()), + new DerInteger(_key.X), + attributes); + } + + if (privateKey is RsaKeyParameters) + { + AlgorithmIdentifier algID = new AlgorithmIdentifier( + PkcsObjectIdentifiers.RsaEncryption, DerNull.Instance); + + RsaPrivateKeyStructure keyStruct; + if (privateKey is RsaPrivateCrtKeyParameters) + { + RsaPrivateCrtKeyParameters _key = (RsaPrivateCrtKeyParameters)privateKey; + + keyStruct = new RsaPrivateKeyStructure( + _key.Modulus, + _key.PublicExponent, + _key.Exponent, + _key.P, + _key.Q, + _key.DP, + _key.DQ, + _key.QInv); + } + else + { + RsaKeyParameters _key = (RsaKeyParameters) privateKey; + + keyStruct = new RsaPrivateKeyStructure( + _key.Modulus, + BigInteger.Zero, + _key.Exponent, + BigInteger.Zero, + BigInteger.Zero, + BigInteger.Zero, + BigInteger.Zero, + BigInteger.Zero); + } + + return new PrivateKeyInfo(algID, keyStruct.ToAsn1Object(), attributes); + } + + if (privateKey is ECPrivateKeyParameters) + { + ECPrivateKeyParameters priv = (ECPrivateKeyParameters) privateKey; + DerBitString publicKey = new DerBitString(ECKeyPairGenerator.GetCorrespondingPublicKey(priv).Q.GetEncoded(false)); + + ECDomainParameters dp = priv.Parameters; + + // ECGOST3410 + if (dp is ECGost3410Parameters) + { + ECGost3410Parameters domainParameters = (ECGost3410Parameters) dp; + + Gost3410PublicKeyAlgParameters gostParams = new Gost3410PublicKeyAlgParameters( + (domainParameters).PublicKeyParamSet, + (domainParameters).DigestParamSet, + (domainParameters).EncryptionParamSet); + + bool is512 = priv.D.BitLength > 256; + DerObjectIdentifier identifier = (is512) ? + RosstandartObjectIdentifiers.id_tc26_gost_3410_12_512 : + RosstandartObjectIdentifiers.id_tc26_gost_3410_12_256; + int size = (is512) ? 64 : 32; + + byte[] encKey = new byte[size]; + + ExtractBytes(encKey, size, 0, priv.D); + + return new PrivateKeyInfo(new AlgorithmIdentifier(identifier, gostParams), new DerOctetString(encKey)); + } + + + int orderBitLength = dp.N.BitLength; + + AlgorithmIdentifier algID; + ECPrivateKeyStructure ec; + + if (priv.AlgorithmName == "ECGOST3410") + { + if (priv.PublicKeyParamSet == null) + throw new NotImplementedException("Not a CryptoPro parameter set"); + + Gost3410PublicKeyAlgParameters gostParams = new Gost3410PublicKeyAlgParameters( + priv.PublicKeyParamSet, CryptoProObjectIdentifiers.GostR3411x94CryptoProParamSet); + + algID = new AlgorithmIdentifier(CryptoProObjectIdentifiers.GostR3410x2001, gostParams); + + // TODO Do we need to pass any parameters here? + ec = new ECPrivateKeyStructure(orderBitLength, priv.D, publicKey, null); + } + else + { + X962Parameters x962; + if (priv.PublicKeyParamSet == null) + { + X9ECParameters ecP = new X9ECParameters(dp.Curve, new X9ECPoint(dp.G, false), dp.N, dp.H, + dp.GetSeed()); + x962 = new X962Parameters(ecP); + } + else + { + x962 = new X962Parameters(priv.PublicKeyParamSet); + } + + ec = new ECPrivateKeyStructure(orderBitLength, priv.D, publicKey, x962); + + algID = new AlgorithmIdentifier(X9ObjectIdentifiers.IdECPublicKey, x962); + } + + return new PrivateKeyInfo(algID, ec, attributes); + } + + if (privateKey is Gost3410PrivateKeyParameters) + { + Gost3410PrivateKeyParameters _key = (Gost3410PrivateKeyParameters)privateKey; + + if (_key.PublicKeyParamSet == null) + throw new NotImplementedException("Not a CryptoPro parameter set"); + + byte[] keyEnc = _key.X.ToByteArrayUnsigned(); + byte[] keyBytes = new byte[keyEnc.Length]; + + for (int i = 0; i != keyBytes.Length; i++) + { + keyBytes[i] = keyEnc[keyEnc.Length - 1 - i]; // must be little endian + } + + Gost3410PublicKeyAlgParameters algParams = new Gost3410PublicKeyAlgParameters( + _key.PublicKeyParamSet, CryptoProObjectIdentifiers.GostR3411x94CryptoProParamSet, null); + + AlgorithmIdentifier algID = new AlgorithmIdentifier( + CryptoProObjectIdentifiers.GostR3410x94, + algParams.ToAsn1Object()); + + return new PrivateKeyInfo(algID, new DerOctetString(keyBytes), attributes); + } + + if (privateKey is X448PrivateKeyParameters) + { + X448PrivateKeyParameters key = (X448PrivateKeyParameters)privateKey; + + return new PrivateKeyInfo(new AlgorithmIdentifier(EdECObjectIdentifiers.id_X448), + new DerOctetString(key.GetEncoded()), attributes, key.GeneratePublicKey().GetEncoded()); + } + + if (privateKey is X25519PrivateKeyParameters) + { + X25519PrivateKeyParameters key = (X25519PrivateKeyParameters)privateKey; + + return new PrivateKeyInfo(new AlgorithmIdentifier(EdECObjectIdentifiers.id_X25519), + new DerOctetString(key.GetEncoded()), attributes, key.GeneratePublicKey().GetEncoded()); + } + + if (privateKey is Ed448PrivateKeyParameters) + { + Ed448PrivateKeyParameters key = (Ed448PrivateKeyParameters)privateKey; + + return new PrivateKeyInfo(new AlgorithmIdentifier(EdECObjectIdentifiers.id_Ed448), + new DerOctetString(key.GetEncoded()), attributes, key.GeneratePublicKey().GetEncoded()); + } + + if (privateKey is Ed25519PrivateKeyParameters) + { + Ed25519PrivateKeyParameters key = (Ed25519PrivateKeyParameters)privateKey; + + return new PrivateKeyInfo(new AlgorithmIdentifier(EdECObjectIdentifiers.id_Ed25519), + new DerOctetString(key.GetEncoded()), attributes, key.GeneratePublicKey().GetEncoded()); + } + + throw new ArgumentException("Class provided is not convertible: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(privateKey)); + } + + public static PrivateKeyInfo CreatePrivateKeyInfo( + char[] passPhrase, + EncryptedPrivateKeyInfo encInfo) + { + return CreatePrivateKeyInfo(passPhrase, false, encInfo); + } + + public static PrivateKeyInfo CreatePrivateKeyInfo( + char[] passPhrase, + bool wrongPkcs12Zero, + EncryptedPrivateKeyInfo encInfo) + { + AlgorithmIdentifier algID = encInfo.EncryptionAlgorithm; + + IBufferedCipher cipher = PbeUtilities.CreateEngine(algID) as IBufferedCipher; + if (cipher == null) + throw new Exception("Unknown encryption algorithm: " + algID.Algorithm); + + ICipherParameters cipherParameters = PbeUtilities.GenerateCipherParameters( + algID, passPhrase, wrongPkcs12Zero); + cipher.Init(false, cipherParameters); + byte[] keyBytes = cipher.DoFinal(encInfo.GetEncryptedData()); + + return PrivateKeyInfo.GetInstance(keyBytes); + } + + private static void ExtractBytes(byte[] encKey, int size, int offSet, BigInteger bI) + { + byte[] val = bI.ToByteArray(); + if (val.Length < size) + { + byte[] tmp = new byte[size]; + Array.Copy(val, 0, tmp, tmp.Length - val.Length, val.Length); + val = tmp; + } + + for (int i = 0; i != size; i++) + { + encKey[offSet + i] = val[val.Length - 1 - i]; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PrivateKeyInfoFactory.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PrivateKeyInfoFactory.cs.meta new file mode 100644 index 000000000..d12308857 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/PrivateKeyInfoFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: da0b98ec65ab9bd4bae18ff7fbf50ed5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/X509CertificateEntry.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/X509CertificateEntry.cs new file mode 100644 index 000000000..e1d2f99c8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/X509CertificateEntry.cs @@ -0,0 +1,49 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs +{ + public class X509CertificateEntry + : Pkcs12Entry + { + private readonly X509Certificate cert; + + public X509CertificateEntry(X509Certificate cert) + : base(new Dictionary()) + { + this.cert = cert; + } + + public X509CertificateEntry(X509Certificate cert, IDictionary attributes) + : base(attributes) + { + this.cert = cert; + } + + public X509Certificate Certificate + { + get { return this.cert; } + } + + public override bool Equals(object obj) + { + X509CertificateEntry other = obj as X509CertificateEntry; + + if (other == null) + return false; + + return cert.Equals(other.cert); + } + + public override int GetHashCode() + { + return ~cert.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/X509CertificateEntry.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/X509CertificateEntry.cs.meta new file mode 100644 index 000000000..d89466d6c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkcs/X509CertificateEntry.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0cf80bddefc53c47951df6aac435e62 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix.meta new file mode 100644 index 000000000..f949ee789 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a5512fac3c819e1408d5495e0b9d5eb9 +folderAsset: yes +timeCreated: 1547039641 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/CertStatus.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/CertStatus.cs new file mode 100644 index 000000000..4bfdf8a22 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/CertStatus.cs @@ -0,0 +1,37 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + public class CertStatus + { + public const int Unrevoked = 11; + + public const int Undetermined = 12; + + private int status = Unrevoked; + + DateTime? revocationDate = null; + + /// + /// Returns the revocationDate. + /// + public DateTime? RevocationDate + { + get { return revocationDate; } + set { this.revocationDate = value; } + } + + /// + /// Returns the certStatus. + /// + public int Status + { + get { return status; } + set { this.status = value; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/CertStatus.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/CertStatus.cs.meta new file mode 100644 index 000000000..2c2812622 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/CertStatus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12be79f326e3a844f80690ca3213a20a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixAttrCertChecker.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixAttrCertChecker.cs new file mode 100644 index 000000000..ccbf3d62c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixAttrCertChecker.cs @@ -0,0 +1,61 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + public abstract class PkixAttrCertChecker + { + /** + * Returns an immutable Set of X.509 attribute certificate + * extensions that this PkixAttrCertChecker supports or + * null if no extensions are supported. + *

    + * Each element of the set is a String representing the + * Object Identifier (OID) of the X.509 extension that is supported. + *

    + *

    + * All X.509 attribute certificate extensions that a + * PkixAttrCertChecker might possibly be able to process + * should be included in the set. + *

    + * + * @return an immutable Set of X.509 extension OIDs (in + * String format) supported by this + * PkixAttrCertChecker, or null if no + * extensions are supported + */ + public abstract ISet GetSupportedExtensions(); + + /** + * Performs checks on the specified attribute certificate. Every handled + * extension is rmeoved from the unresolvedCritExts + * collection. + * + * @param attrCert The attribute certificate to be checked. + * @param certPath The certificate path which belongs to the attribute + * certificate issuer public key certificate. + * @param holderCertPath The certificate path which belongs to the holder + * certificate. + * @param unresolvedCritExts a Collection of OID strings + * representing the current set of unresolved critical extensions + * @throws CertPathValidatorException if the specified attribute certificate + * does not pass the check. + */ + public abstract void Check(X509V2AttributeCertificate attrCert, PkixCertPath certPath, + PkixCertPath holderCertPath, ICollection unresolvedCritExts); + + /** + * Returns a clone of this object. + * + * @return a copy of this PkixAttrCertChecker + */ + public abstract PkixAttrCertChecker Clone(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixAttrCertChecker.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixAttrCertChecker.cs.meta new file mode 100644 index 000000000..e7b3ae9ac --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixAttrCertChecker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 55a8146ee5b463942b785a1ef6c9b129 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixAttrCertPathBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixAttrCertPathBuilder.cs new file mode 100644 index 000000000..b0dc53b80 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixAttrCertPathBuilder.cs @@ -0,0 +1,228 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Store; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + public class PkixAttrCertPathBuilder + { + /** + * Build and validate a CertPath using the given parameter. + * + * @param params PKIXBuilderParameters object containing all information to + * build the CertPath + */ + public virtual PkixCertPathBuilderResult Build(PkixBuilderParameters pkixParams) + { + // search target certificates + + if (!(pkixParams.GetTargetConstraintsAttrCert() is X509AttrCertStoreSelector attrCertSelector)) + { + throw new PkixCertPathBuilderException( + "TargetConstraints must be an instance of " + + typeof(X509AttrCertStoreSelector).FullName + + " for " + + typeof(PkixAttrCertPathBuilder).FullName + " class."); + } + + HashSet targets; + try + { + targets = FindAttributeCertificates(attrCertSelector, pkixParams.GetStoresAttrCert()); + } + catch (Exception e) + { + throw new PkixCertPathBuilderException("Error finding target attribute certificate.", e); + } + + if (targets.Count == 0) + throw new PkixCertPathBuilderException("No attribute certificate found matching targetConstraints."); + + PkixCertPathBuilderResult result = null; + + // check all potential target certificates + foreach (var target in targets) + { + X509CertStoreSelector certSelector = new X509CertStoreSelector(); + X509Name[] principals = target.Issuer.GetPrincipals(); + var issuers = new HashSet(); + for (int i = 0; i < principals.Length; i++) + { + // TODO Replace loop with a single multiprincipal selector (or don't even use selector) + try + { + certSelector.Subject = principals[i]; + + CollectionUtilities.CollectMatches(issuers, certSelector, pkixParams.GetStoresCert()); + } + catch (Exception e) + { + throw new PkixCertPathBuilderException( + "Public key certificate for attribute certificate cannot be searched.", + e); + } + } + + if (issuers.Count < 1) + throw new PkixCertPathBuilderException("Public key certificate for attribute certificate cannot be found."); + + var certPathList = new List(); + + foreach (X509Certificate issuer in issuers) + { + result = Build(target, issuer, pkixParams, certPathList); + + if (result != null) + break; + } + + if (result != null) + break; + } + + if (result == null && certPathException != null) + throw new PkixCertPathBuilderException("Possible certificate chain could not be validated.", + certPathException); + + if (result == null && certPathException == null) + throw new PkixCertPathBuilderException("Unable to find certificate chain."); + + return result; + } + + private Exception certPathException; + + private PkixCertPathBuilderResult Build( + X509V2AttributeCertificate attrCert, + X509Certificate tbvCert, + PkixBuilderParameters pkixParams, + IList tbvPath) + { + // If tbvCert is readily present in tbvPath, it indicates having run + // into a cycle in the + // PKI graph. + if (tbvPath.Contains(tbvCert)) + return null; + + // step out, the certificate is not allowed to appear in a certification + // chain + if (pkixParams.GetExcludedCerts().Contains(tbvCert)) + return null; + + // test if certificate path exceeds maximum length + if (pkixParams.MaxPathLength != -1) + { + if (tbvPath.Count - 1 > pkixParams.MaxPathLength) + return null; + } + + tbvPath.Add(tbvCert); + + PkixCertPathBuilderResult builderResult = null; + +// X509CertificateParser certParser = new X509CertificateParser(); + PkixAttrCertPathValidator validator = new PkixAttrCertPathValidator(); + + try + { + // check whether the issuer of is a TrustAnchor + if (PkixCertPathValidatorUtilities.IsIssuerTrustAnchor(tbvCert, pkixParams.GetTrustAnchors())) + { + PkixCertPath certPath = new PkixCertPath(tbvPath); + PkixCertPathValidatorResult result; + + try + { + result = validator.Validate(certPath, pkixParams); + } + catch (Exception e) + { + throw new Exception("Certification path could not be validated.", e); + } + + return new PkixCertPathBuilderResult(certPath, result.TrustAnchor, + result.PolicyTree, result.SubjectPublicKey); + } + else + { + // add additional X.509 stores from locations in certificate + try + { + PkixCertPathValidatorUtilities.AddAdditionalStoresFromAltNames(tbvCert, pkixParams); + } + catch (CertificateParsingException e) + { + throw new Exception("No additional X.509 stores can be added from certificate locations.", e); + } + + // try to get the issuer certificate from one of the stores + ISet issuers; + try + { + issuers = PkixCertPathValidatorUtilities.FindIssuerCerts(tbvCert, pkixParams); + } + catch (Exception e) + { + throw new Exception("Cannot find issuer certificate for certificate in certification path.", e); + } + + if (issuers.Count < 1) + throw new Exception("No issuer certificate for certificate in certification path found."); + + foreach (X509Certificate issuer in issuers) + { + // if untrusted self signed certificate continue + if (PkixCertPathValidatorUtilities.IsSelfIssued(issuer)) + continue; + + builderResult = Build(attrCert, issuer, pkixParams, tbvPath); + + if (builderResult != null) + break; + } + } + } + catch (Exception e) + { + certPathException = new Exception("No valid certification path could be build.", e); + } + + if (builderResult == null) + { + tbvPath.Remove(tbvCert); + } + + return builderResult; + } + + internal static HashSet FindAttributeCertificates( + ISelector attrCertSelector, + IList> attrCertStores) + { + var attrCerts = new HashSet(); + + foreach (var attrCertStore in attrCertStores) + { + try + { + attrCerts.UnionWith(attrCertStore.EnumerateMatches(attrCertSelector)); + } + catch (Exception e) + { + throw new Exception("Problem while picking certificates from X.509 store.", e); + } + } + + return attrCerts; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixAttrCertPathBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixAttrCertPathBuilder.cs.meta new file mode 100644 index 000000000..9bcbbb773 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixAttrCertPathBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ecee7bdcfcd47514897052237429c5fa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixAttrCertPathValidator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixAttrCertPathValidator.cs new file mode 100644 index 000000000..62249203f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixAttrCertPathValidator.cs @@ -0,0 +1,77 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Store; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + /** + * CertPathValidatorSpi implementation for X.509 Attribute Certificates la RFC 3281. + * + * @see org.bouncycastle.x509.ExtendedPkixParameters + */ + public class PkixAttrCertPathValidator + // extends CertPathValidatorSpi + { + /** + * Validates an attribute certificate with the given certificate path. + * + *

    + * params must be an instance of + * ExtendedPkixParameters. + *

    + * The target constraints in the params must be an + * X509AttrCertStoreSelector with at least the attribute + * certificate criterion set. Obey that also target informations may be + * necessary to correctly validate this attribute certificate. + *

    + * The attribute certificate issuer must be added to the trusted attribute + * issuers with {@link ExtendedPkixParameters#setTrustedACIssuers(Set)}. + *

    + * @param certPath The certificate path which belongs to the attribute + * certificate issuer public key certificate. + * @param params The PKIX parameters. + * @return A PKIXCertPathValidatorResult of the result of + * validating the certPath. + * @throws InvalidAlgorithmParameterException if params is + * inappropriate for this validator. + * @throws CertPathValidatorException if the verification fails. + */ + public virtual PkixCertPathValidatorResult Validate(PkixCertPath certPath, PkixParameters pkixParams) + { + if (!(pkixParams.GetTargetConstraintsAttrCert() is X509AttrCertStoreSelector attrCertSelector)) + { + throw new ArgumentException( + "TargetConstraints must be an instance of " + typeof(X509AttrCertStoreSelector).FullName, + nameof(pkixParams)); + } + + var attrCert = attrCertSelector.AttributeCert; + PkixCertPath holderCertPath = Rfc3281CertPathUtilities.ProcessAttrCert1(attrCert, pkixParams); + PkixCertPathValidatorResult result = Rfc3281CertPathUtilities.ProcessAttrCert2(certPath, pkixParams); + X509Certificate issuerCert = (X509Certificate)certPath.Certificates[0]; + Rfc3281CertPathUtilities.ProcessAttrCert3(issuerCert, pkixParams); + Rfc3281CertPathUtilities.ProcessAttrCert4(issuerCert, pkixParams); + Rfc3281CertPathUtilities.ProcessAttrCert5(attrCert, pkixParams); + // 6 already done in X509AttrCertStoreSelector + Rfc3281CertPathUtilities.ProcessAttrCert7(attrCert, certPath, holderCertPath, pkixParams); + Rfc3281CertPathUtilities.AdditionalChecks(attrCert, pkixParams); + DateTime date; + try + { + date = PkixCertPathValidatorUtilities.GetValidCertDateFromValidityModel(pkixParams, null, -1); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException( + "Could not get validity date from attribute certificate.", e); + } + Rfc3281CertPathUtilities.CheckCrls(attrCert, pkixParams, issuerCert, date, certPath.Certificates); + return result; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixAttrCertPathValidator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixAttrCertPathValidator.cs.meta new file mode 100644 index 000000000..f59abde08 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixAttrCertPathValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 85b76d91e2248a64191df671fb900d8b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixBuilderParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixBuilderParameters.cs new file mode 100644 index 000000000..45ce656e8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixBuilderParameters.cs @@ -0,0 +1,150 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + /// + /// Summary description for PkixBuilderParameters. + /// + public class PkixBuilderParameters + : PkixParameters + { + private int maxPathLength = 5; + + private ISet excludedCerts = new HashSet(); + + /** + * Returns an instance of PkixBuilderParameters. + *

    + * This method can be used to get a copy from other + * PKIXBuilderParameters, PKIXParameters, + * and ExtendedPKIXParameters instances. + *

    + * + * @param pkixParams The PKIX parameters to create a copy of. + * @return An PkixBuilderParameters instance. + */ + public static PkixBuilderParameters GetInstance( + PkixParameters pkixParams) + { + PkixBuilderParameters parameters = new PkixBuilderParameters( + pkixParams.GetTrustAnchors(), + pkixParams.GetTargetConstraintsCert(), + pkixParams.GetTargetConstraintsAttrCert()); + parameters.SetParams(pkixParams); + return parameters; + } + + public PkixBuilderParameters(ISet trustAnchors, ISelector targetConstraintsCert) + : this(trustAnchors, targetConstraintsCert, null) + { + } + + public PkixBuilderParameters(ISet trustAnchors, ISelector targetConstraintsCert, + ISelector targetConstraintsAttrCert) + : base(trustAnchors) + { + SetTargetConstraintsCert(targetConstraintsCert); + SetTargetConstraintsAttrCert(targetConstraintsAttrCert); + } + + public virtual int MaxPathLength + { + get { return maxPathLength; } + set + { + if (value < -1) + { + throw new InvalidParameterException( + "The maximum path length parameter can not be less than -1."); + } + this.maxPathLength = value; + } + } + + /// + /// Excluded certificates are not used for building a certification path. + /// + /// the excluded certificates. + public virtual ISet GetExcludedCerts() + { + return new HashSet(excludedCerts); + } + + /// + /// Sets the excluded certificates which are not used for building a + /// certification path. If the ISet is null an + /// empty set is assumed. + /// + /// + /// The given set is cloned to protect it against subsequent modifications. + /// + /// The excluded certificates to set. + public virtual void SetExcludedCerts(ISet excludedCerts) + { + if (excludedCerts == null) + { + this.excludedCerts = new HashSet(); + } + else + { + this.excludedCerts = new HashSet(excludedCerts); + } + } + + /** + * Can alse handle ExtendedPKIXBuilderParameters and + * PKIXBuilderParameters. + * + * @param params Parameters to set. + * @see org.bouncycastle.x509.ExtendedPKIXParameters#setParams(java.security.cert.PKIXParameters) + */ + protected override void SetParams(PkixParameters parameters) + { + base.SetParams(parameters); + if (parameters is PkixBuilderParameters _params) + { + maxPathLength = _params.maxPathLength; + excludedCerts = new HashSet(_params.excludedCerts); + } + } + + /** + * Makes a copy of this PKIXParameters object. Changes to the + * copy will not affect the original and vice versa. + * + * @return a copy of this PKIXParameters object + */ + public override object Clone() + { + PkixBuilderParameters parameters = new PkixBuilderParameters( + GetTrustAnchors(), + GetTargetConstraintsCert(), + GetTargetConstraintsAttrCert()); + parameters.SetParams(this); + return parameters; + } + + public override string ToString() + { + StringBuilder s = new StringBuilder(); + s.AppendLine("PkixBuilderParameters ["); + s.Append(base.ToString()); + s.Append(" Maximum Path Length: "); + s.Append(MaxPathLength); + s.AppendLine(); + s.AppendLine("]"); + return s.ToString(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixBuilderParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixBuilderParameters.cs.meta new file mode 100644 index 000000000..6f51b544b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixBuilderParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4976f361ba4e5544681c44a8ec8d928c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPath.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPath.cs new file mode 100644 index 000000000..2283d49e0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPath.cs @@ -0,0 +1,423 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.OpenSsl; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + /** + * An immutable sequence of certificates (a certification path).
    + *
    + * This is an abstract class that defines the methods common to all CertPaths. + * Subclasses can handle different kinds of certificates (X.509, PGP, etc.).
    + *
    + * All CertPath objects have a type, a list of Certificates, and one or more + * supported encodings. Because the CertPath class is immutable, a CertPath + * cannot change in any externally visible way after being constructed. This + * stipulation applies to all public fields and methods of this class and any + * added or overridden by subclasses.
    + *
    + * The type is a string that identifies the type of Certificates in the + * certification path. For each certificate cert in a certification path + * certPath, cert.getType().equals(certPath.getType()) must be true.
    + *
    + * The list of Certificates is an ordered List of zero or more Certificates. + * This List and all of the Certificates contained in it must be immutable.
    + *
    + * Each CertPath object must support one or more encodings so that the object + * can be translated into a byte array for storage or transmission to other + * parties. Preferably, these encodings should be well-documented standards + * (such as PKCS#7). One of the encodings supported by a CertPath is considered + * the default encoding. This encoding is used if no encoding is explicitly + * requested (for the {@link #getEncoded()} method, for instance).
    + *
    + * All CertPath objects are also Serializable. CertPath objects are resolved + * into an alternate {@link CertPathRep} object during serialization. This + * allows a CertPath object to be serialized into an equivalent representation + * regardless of its underlying implementation.
    + *
    + * CertPath objects can be created with a CertificateFactory or they can be + * returned by other classes, such as a CertPathBuilder.
    + *
    + * By convention, X.509 CertPaths (consisting of X509Certificates), are ordered + * starting with the target certificate and ending with a certificate issued by + * the trust anchor. That is, the issuer of one certificate is the subject of + * the following one. The certificate representing the + * {@link TrustAnchor TrustAnchor} should not be included in the certification + * path. Unvalidated X.509 CertPaths may not follow these conventions. PKIX + * CertPathValidators will detect any departure from these conventions that + * cause the certification path to be invalid and throw a + * CertPathValidatorException.
    + *
    + * Concurrent Access
    + *
    + * All CertPath objects must be thread-safe. That is, multiple threads may + * concurrently invoke the methods defined in this class on a single CertPath + * object (or more than one) with no ill effects. This is also true for the List + * returned by CertPath.getCertificates.
    + *
    + * Requiring CertPath objects to be immutable and thread-safe allows them to be + * passed around to various pieces of code without worrying about coordinating + * access. Providing this thread-safety is generally not difficult, since the + * CertPath and List objects in question are immutable. + * + * @see CertificateFactory + * @see CertPathBuilder + */ + /// + /// CertPath implementation for X.509 certificates. + /// + public class PkixCertPath +// : CertPath + { + internal static readonly List m_encodings = new List{ "PkiPath", "PEM", "PKCS7" }; + + private readonly IList m_certificates; + + private static IList SortCerts(IList certs) + { + if (certs.Count < 2) + return certs; + + X509Name issuer = certs[0].IssuerDN; + bool okay = true; + + for (int i = 1; i != certs.Count; i++) + { + X509Certificate cert = certs[i]; + + if (issuer.Equivalent(cert.SubjectDN, true)) + { + issuer = cert.IssuerDN; + } + else + { + okay = false; + break; + } + } + + if (okay) + return certs; + + // find end-entity cert + var retList = new List(certs.Count); + var orig = new List(certs); + + for (int i = 0; i < certs.Count; i++) + { + X509Certificate cert = certs[i]; + bool found = false; + + X509Name subject = cert.SubjectDN; + foreach (X509Certificate c in certs) + { + if (c.IssuerDN.Equivalent(subject, true)) + { + found = true; + break; + } + } + + if (!found) + { + retList.Add(cert); + certs.RemoveAt(i); + } + } + + // can only have one end entity cert - something's wrong, give up. + if (retList.Count > 1) + return orig; + + for (int i = 0; i != retList.Count; i++) + { + issuer = retList[i].IssuerDN; + + for (int j = 0; j < certs.Count; j++) + { + X509Certificate c = certs[j]; + if (issuer.Equivalent(c.SubjectDN, true)) + { + retList.Add(c); + certs.RemoveAt(j); + break; + } + } + } + + // make sure all certificates are accounted for. + if (certs.Count > 0) + return orig; + + return retList; + } + + /** + * Creates a CertPath of the specified type. + * This constructor is protected because most users should use + * a CertificateFactory to create CertPaths. + * @param type the standard name of the type of Certificatesin this path + **/ + public PkixCertPath(IList certificates) + { + m_certificates = SortCerts(new List(certificates)); + } + + public PkixCertPath(Stream inStream) + : this(inStream, "PkiPath") + { + } + + /** + * Creates a CertPath of the specified type. + * This constructor is protected because most users should use + * a CertificateFactory to create CertPaths. + * + * @param type the standard name of the type of Certificatesin this path + **/ + public PkixCertPath(Stream inStream, string encoding) + { + //string upper = Org.BouncyCastle.Utilities.Platform.ToUpperInvariant(encoding); + + IList certs; + try + { + if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase("PkiPath", encoding)) + { + Asn1InputStream derInStream = new Asn1InputStream(inStream); + Asn1Object derObject = derInStream.ReadObject(); + if (!(derObject is Asn1Sequence)) + { + throw new CertificateException( + "input stream does not contain a ASN1 SEQUENCE while reading PkiPath encoded data to load CertPath"); + } + + certs = new List(); + + foreach (Asn1Encodable ae in (Asn1Sequence)derObject) + { + byte[] derBytes = ae.GetEncoded(Asn1Encodable.Der); + Stream certInStream = new MemoryStream(derBytes, false); + + // TODO Is inserting at the front important (list will be sorted later anyway)? + certs.Insert(0, new X509CertificateParser().ReadCertificate(certInStream)); + } + } + else if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase("PEM", encoding) || + Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase("PKCS7", encoding)) + { + certs = new X509CertificateParser().ReadCertificates(inStream); + } + else + { + throw new CertificateException("unsupported encoding: " + encoding); + } + } + catch (IOException ex) + { + throw new CertificateException( + "IOException throw while decoding CertPath:\n" + + ex.ToString()); + } + + m_certificates = SortCerts(certs); + } + + /** + * Returns an iteration of the encodings supported by this + * certification path, with the default encoding + * first. Attempts to modify the returned Iterator via its + * remove method result in an UnsupportedOperationException. + * + * @return an Iterator over the names of the supported encodings (as Strings) + **/ + public virtual IEnumerable Encodings + { + get { return CollectionUtilities.Proxy(m_encodings); } + } + + /** + * Compares this certification path for equality with the specified object. + * Two CertPaths are equal if and only if their types are equal and their + * certificate Lists (and by implication the Certificates in those Lists) + * are equal. A CertPath is never equal to an object that is not a CertPath.
    + *
    + * This algorithm is implemented by this method. If it is overridden, the + * behavior specified here must be maintained. + * + * @param other + * the object to test for equality with this certification path + * + * @return true if the specified object is equal to this certification path, + * false otherwise + * + * @see Object#hashCode() Object.hashCode() + */ + public override bool Equals(object obj) + { + if (this == obj) + return true; + + if (!(obj is PkixCertPath that)) + return false; + + var thisCerts = this.Certificates; + var thatCerts = that.Certificates; + + if (thisCerts.Count != thatCerts.Count) + return false; + + var e1 = thisCerts.GetEnumerator(); + var e2 = thatCerts.GetEnumerator(); + + while (e1.MoveNext()) + { + e2.MoveNext(); + + if (!Equals(e1.Current, e2.Current)) + return false; + } + + return true; + } + + public override int GetHashCode() + { + return m_certificates.GetHashCode(); + } + + /** + * Returns the encoded form of this certification path, using + * the default encoding. + * + * @return the encoded bytes + * @exception CertificateEncodingException if an encoding error occurs + **/ + public virtual byte[] GetEncoded() + { + return GetEncoded(m_encodings[0]); + } + + /** + * Returns the encoded form of this certification path, using + * the specified encoding. + * + * @param encoding the name of the encoding to use + * @return the encoded bytes + * @exception CertificateEncodingException if an encoding error + * occurs or the encoding requested is not supported + * + */ + public virtual byte[] GetEncoded(string encoding) + { + if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(encoding, "PkiPath")) + { + Asn1EncodableVector v = new Asn1EncodableVector(m_certificates.Count); + for (int i = m_certificates.Count - 1; i >= 0; i--) + { + v.Add(ToAsn1Object(m_certificates[i])); + } + + return ToDerEncoded(new DerSequence(v)); + } + else if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(encoding, "PKCS7")) + { + ContentInfo encInfo = new ContentInfo(PkcsObjectIdentifiers.Data, null); + + Asn1EncodableVector v = new Asn1EncodableVector(m_certificates.Count); + foreach (var cert in m_certificates) + { + v.Add(ToAsn1Object(cert)); + } + + SignedData sd = new SignedData( + new DerInteger(1), + new DerSet(), + encInfo, + new DerSet(v), + null, + new DerSet()); + + return ToDerEncoded(new ContentInfo(PkcsObjectIdentifiers.SignedData, sd)); + } + else if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(encoding, "PEM")) + { + MemoryStream bOut = new MemoryStream(); + + try + { + using (var pWrt = new PemWriter(new StreamWriter(bOut))) + { + foreach (var cert in m_certificates) + { + pWrt.WriteObject(cert); + } + } + } + catch (Exception) + { + throw new CertificateEncodingException("can't encode certificate for PEM encoded path"); + } + + return bOut.ToArray(); + } + else + { + throw new CertificateEncodingException("unsupported encoding: " + encoding); + } + } + + /// + /// Returns the list of certificates in this certification + /// path. + /// + public virtual IList Certificates + { + get { return CollectionUtilities.ReadOnly(m_certificates); } + } + + /** + * Return a DERObject containing the encoded certificate. + * + * @param cert the X509Certificate object to be encoded + * + * @return the DERObject + **/ + private Asn1Object ToAsn1Object(X509Certificate cert) + { + try + { + return cert.CertificateStructure.ToAsn1Object(); + } + catch (Exception e) + { + throw new CertificateEncodingException("Exception while encoding certificate", e); + } + } + + private byte[] ToDerEncoded(Asn1Encodable obj) + { + try + { + return obj.GetEncoded(Asn1Encodable.Der); + } + catch (IOException e) + { + throw new CertificateEncodingException("Exception thrown", e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPath.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPath.cs.meta new file mode 100644 index 000000000..324687254 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPath.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 565bdea7eb2a46d40ad29b81bc563819 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathBuilder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathBuilder.cs new file mode 100644 index 000000000..2c6ed9953 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathBuilder.cs @@ -0,0 +1,173 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + /** + * Implements the PKIX CertPathBuilding algorithm for BouncyCastle. + * + * @see CertPathBuilderSpi + */ + public class PkixCertPathBuilder + { + /** + * Build and validate a CertPath using the given parameter. + * + * @param params PKIXBuilderParameters object containing all information to + * build the CertPath + */ + public virtual PkixCertPathBuilderResult Build(PkixBuilderParameters pkixParams) + { + // search target certificates + + var certSelector = pkixParams.GetTargetConstraintsCert(); + + var targets = new HashSet(); + try + { + CollectionUtilities.CollectMatches(targets, certSelector, pkixParams.GetStoresCert()); + } + catch (Exception e) + { + throw new PkixCertPathBuilderException( + "Error finding target certificate.", e); + } + + if (targets.Count < 1) + throw new PkixCertPathBuilderException("No certificate found matching targetConstraints."); + + PkixCertPathBuilderResult result = null; + var certPathList = new List(); + + // check all potential target certificates + foreach (X509Certificate cert in targets) + { + result = Build(cert, pkixParams, certPathList); + + if (result != null) + break; + } + + if (result == null && certPathException != null) + throw new PkixCertPathBuilderException(certPathException.Message, certPathException.InnerException); + + if (result == null && certPathException == null) + throw new PkixCertPathBuilderException("Unable to find certificate chain."); + + return result; + } + + private Exception certPathException; + + protected virtual PkixCertPathBuilderResult Build( + X509Certificate tbvCert, + PkixBuilderParameters pkixParams, + IList tbvPath) + { + // If tbvCert is already present in tbvPath, it indicates having run into a cycle in the PKI graph. + if (tbvPath.Contains(tbvCert)) + return null; + + // step out, the certificate is not allowed to appear in a certification chain. + if (pkixParams.GetExcludedCerts().Contains(tbvCert)) + return null; + + // test if certificate path exceeds maximum length + if (pkixParams.MaxPathLength != -1) + { + if (tbvPath.Count - 1 > pkixParams.MaxPathLength) + return null; + } + + tbvPath.Add(tbvCert); + + PkixCertPathBuilderResult builderResult = null; + PkixCertPathValidator validator = new PkixCertPathValidator(); + + try + { + // check whether the issuer of is a TrustAnchor + if (PkixCertPathValidatorUtilities.IsIssuerTrustAnchor(tbvCert, pkixParams.GetTrustAnchors())) + { + // exception message from possibly later tried certification chains + PkixCertPath certPath; + try + { + certPath = new PkixCertPath(tbvPath); + } + catch (Exception e) + { + throw new Exception("Certification path could not be constructed from certificate list.", e); + } + + PkixCertPathValidatorResult result; + try + { + result = validator.Validate(certPath, pkixParams); + } + catch (Exception e) + { + throw new Exception( + "Certification path could not be validated.", e); + } + + return new PkixCertPathBuilderResult(certPath, result.TrustAnchor, result.PolicyTree, + result.SubjectPublicKey); + } + else + { + // add additional X.509 stores from locations in certificate + try + { + PkixCertPathValidatorUtilities.AddAdditionalStoresFromAltNames(tbvCert, pkixParams); + } + catch (CertificateParsingException e) + { + throw new Exception("No additiontal X.509 stores can be added from certificate locations.", e); + } + + // try to get the issuer certificate from one of the stores + ISet issuers; + try + { + issuers = PkixCertPathValidatorUtilities.FindIssuerCerts(tbvCert, pkixParams); + } + catch (Exception e) + { + throw new Exception("Cannot find issuer certificate for certificate in certification path.", e); + } + + if (issuers.Count < 1) + throw new Exception("No issuer certificate for certificate in certification path found."); + + foreach (X509Certificate issuer in issuers) + { + builderResult = Build(issuer, pkixParams, tbvPath); + + if (builderResult != null) + break; + } + } + } + catch (Exception e) + { + certPathException = e; + } + + if (builderResult == null) + { + tbvPath.Remove(tbvCert); + } + + return builderResult; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathBuilder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathBuilder.cs.meta new file mode 100644 index 000000000..fa3a861af --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b141fdaa90999d4f848152c584ce4e1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathBuilderException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathBuilderException.cs new file mode 100644 index 000000000..ef6c613f3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathBuilderException.cs @@ -0,0 +1,36 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + [Serializable] + public class PkixCertPathBuilderException + : GeneralSecurityException + { + public PkixCertPathBuilderException() + : base() + { + } + + public PkixCertPathBuilderException(string message) + : base(message) + { + } + + public PkixCertPathBuilderException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected PkixCertPathBuilderException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathBuilderException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathBuilderException.cs.meta new file mode 100644 index 000000000..e719ad6a1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathBuilderException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 25a59fe00cb35544dbfaae6c24af2f68 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathBuilderResult.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathBuilderResult.cs new file mode 100644 index 000000000..2abdac61b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathBuilderResult.cs @@ -0,0 +1,49 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + /// + /// Summary description for PkixCertPathBuilderResult. + /// + public class PkixCertPathBuilderResult + : PkixCertPathValidatorResult//, ICertPathBuilderResult + { + private PkixCertPath certPath; + + public PkixCertPathBuilderResult( + PkixCertPath certPath, + TrustAnchor trustAnchor, + PkixPolicyNode policyTree, + AsymmetricKeyParameter subjectPublicKey) + : base(trustAnchor, policyTree, subjectPublicKey) + { + if (certPath == null) + throw new ArgumentNullException("certPath"); + + this.certPath = certPath; + } + + public PkixCertPath CertPath + { + get { return certPath; } + } + + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine("SimplePKIXCertPathBuilderResult: ["); + sb.Append(" Certification Path: ").Append(CertPath).AppendLine(); + sb.Append(" Trust Anchor: ").Append(TrustAnchor.TrustedCert.IssuerDN).AppendLine(); + sb.Append(" Subject Public Key: ").Append(SubjectPublicKey).AppendLine(); + return sb.ToString(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathBuilderResult.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathBuilderResult.cs.meta new file mode 100644 index 000000000..9df5ca331 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathBuilderResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5bb663b8ed6b4c04ead1d50f1b83b3f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathChecker.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathChecker.cs new file mode 100644 index 000000000..7b5d6aa71 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathChecker.cs @@ -0,0 +1,104 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + public abstract class PkixCertPathChecker + { + protected PkixCertPathChecker() + { + } + + /** + * Initializes the internal state of this PKIXCertPathChecker. + *

    + * The forward flag specifies the order that certificates + * will be passed to the {@link #check check} method (forward or reverse). A + * PKIXCertPathChecker must support reverse checking + * and may support forward checking. + *

    + * + * @param forward + * the order that certificates are presented to the + * check method. If true, + * certificates are presented from target to most-trusted CA + * (forward); if false, from most-trusted CA to + * target (reverse). + * @exception CertPathValidatorException + * if this PKIXCertPathChecker is unable to + * check certificates in the specified order; it should never + * be thrown if the forward flag is false since reverse + * checking must be supported + */ + public abstract void Init(bool forward); + //throws CertPathValidatorException; + + /** + * Indicates if forward checking is supported. Forward checking refers to + * the ability of the PKIXCertPathChecker to perform its + * checks when certificates are presented to the check method + * in the forward direction (from target to most-trusted CA). + * + * @return true if forward checking is supported, + * false otherwise + */ + public abstract bool IsForwardCheckingSupported(); + + /** + * Returns an immutable Set of X.509 certificate extensions + * that this PKIXCertPathChecker supports (i.e. recognizes, + * is able to process), or null if no extensions are + * supported. + *

    + * Each element of the set is a String representing the + * Object Identifier (OID) of the X.509 extension that is supported. The OID + * is represented by a set of nonnegative integers separated by periods. + *

    + * All X.509 certificate extensions that a PKIXCertPathChecker + * might possibly be able to process should be included in the set. + *

    + * + * @return an immutable Set of X.509 extension OIDs (in + * String format) supported by this + * PKIXCertPathChecker, or null if no + * extensions are supported + */ + public abstract ISet GetSupportedExtensions(); + + /** + * Performs the check(s) on the specified certificate using its internal + * state and removes any critical extensions that it processes from the + * specified collection of OID strings that represent the unresolved + * critical extensions. The certificates are presented in the order + * specified by the init method. + * + * @param cert + * the Certificate to be checked + * @param unresolvedCritExts + * a Collection of OID strings representing the + * current set of unresolved critical extensions + * @exception CertPathValidatorException + * if the specified certificate does not pass the check + */ + public abstract void Check(X509Certificate cert, ISet unresolvedCritExts); + //throws CertPathValidatorException; + + /** + * Returns a clone of this object. Calls the Object.clone() + * method. All subclasses which maintain state must support and override + * this method, if necessary. + * + * @return a copy of this PKIXCertPathChecker + */ + public virtual object Clone() + { + // TODO Check this + return base.MemberwiseClone(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathChecker.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathChecker.cs.meta new file mode 100644 index 000000000..34f746c59 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathChecker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43f01d4bd4f27a943bb693735147c260 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidator.cs new file mode 100644 index 000000000..d3c10e894 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidator.cs @@ -0,0 +1,442 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + /** + * The Service Provider Interface (SPI) + * for the {@link CertPathValidator CertPathValidator} class. All + * CertPathValidator implementations must include a class (the + * SPI class) that extends this class (CertPathValidatorSpi) + * and implements all of its methods. In general, instances of this class + * should only be accessed through the CertPathValidator class. + * For details, see the Java Cryptography Architecture.
    + *
    + * Concurrent Access
    + *
    + * Instances of this class need not be protected against concurrent + * access from multiple threads. Threads that need to access a single + * CertPathValidatorSpi instance concurrently should synchronize + * amongst themselves and provide the necessary locking before calling the + * wrapping CertPathValidator object.
    + *
    + * However, implementations of CertPathValidatorSpi may still + * encounter concurrency issues, since multiple threads each + * manipulating a different CertPathValidatorSpi instance need not + * synchronize. + */ + /// + /// CertPathValidatorSpi implementation for X.509 Certificate validation a la RFC + /// 3280. + /// + public class PkixCertPathValidator + { + public virtual PkixCertPathValidatorResult Validate(PkixCertPath certPath, PkixParameters paramsPkix) + { + if (paramsPkix.GetTrustAnchors() == null) + { + throw new ArgumentException( + "trustAnchors is null, this is not allowed for certification path validation.", + nameof(paramsPkix)); + } + + // + // 6.1.1 - inputs + // + + // + // (a) + // + var certs = certPath.Certificates; + int n = certs.Count; + + if (n == 0) + throw new PkixCertPathValidatorException("Certification path is empty.", null, 0); + + // + // (b) + // + // DateTime validDate = PkixCertPathValidatorUtilities.GetValidDate(paramsPkix); + + // + // (c) + // + var userInitialPolicySet = paramsPkix.GetInitialPolicies(); + + // + // (d) + // + TrustAnchor trust; + try + { + trust = PkixCertPathValidatorUtilities.FindTrustAnchor(certs[certs.Count - 1], + paramsPkix.GetTrustAnchors()); + + if (trust == null) + throw new PkixCertPathValidatorException("Trust anchor for certification path not found.", null, -1); + + CheckCertificate(trust.TrustedCert); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException(e.Message, e.InnerException, certs.Count - 1); + } + + // + // (e), (f), (g) are part of the paramsPkix object. + // + int index = 0; + int i; + // Certificate for each interation of the validation loop + // Signature information for each iteration of the validation loop + // + // 6.1.2 - setup + // + + // + // (a) + // + var policyNodes = new List[n + 1]; + for (int j = 0; j < policyNodes.Length; j++) + { + policyNodes[j] = new List(); + } + + var policySet = new HashSet(); + + policySet.Add(Rfc3280CertPathUtilities.ANY_POLICY); + + var validPolicyTree = new PkixPolicyNode(new List(), 0, policySet, null, + new HashSet(), Rfc3280CertPathUtilities.ANY_POLICY, false); + + policyNodes[0].Add(validPolicyTree); + + // + // (b) and (c) + // + PkixNameConstraintValidator nameConstraintValidator = new PkixNameConstraintValidator(); + + // (d) + // + int explicitPolicy; + var acceptablePolicies = new HashSet(); + + if (paramsPkix.IsExplicitPolicyRequired) + { + explicitPolicy = 0; + } + else + { + explicitPolicy = n + 1; + } + + // + // (e) + // + int inhibitAnyPolicy; + + if (paramsPkix.IsAnyPolicyInhibited) + { + inhibitAnyPolicy = 0; + } + else + { + inhibitAnyPolicy = n + 1; + } + + // + // (f) + // + int policyMapping; + + if (paramsPkix.IsPolicyMappingInhibited) + { + policyMapping = 0; + } + else + { + policyMapping = n + 1; + } + + // + // (g), (h), (i), (j) + // + AsymmetricKeyParameter workingPublicKey; + X509Name workingIssuerName; + + X509Certificate sign = trust.TrustedCert; + try + { + if (sign != null) + { + workingIssuerName = sign.SubjectDN; + workingPublicKey = sign.GetPublicKey(); + } + else + { + workingIssuerName = new X509Name(trust.CAName); + workingPublicKey = trust.CAPublicKey; + } + } + catch (ArgumentException ex) + { + throw new PkixCertPathValidatorException("Subject of trust anchor could not be (re)encoded.", ex, -1); + } + + AlgorithmIdentifier workingAlgId = null; + try + { + workingAlgId = PkixCertPathValidatorUtilities.GetAlgorithmIdentifier(workingPublicKey); + } + catch (PkixCertPathValidatorException e) + { + throw new PkixCertPathValidatorException( + "Algorithm identifier of public key of trust anchor could not be read.", e, -1); + } + +// DerObjectIdentifier workingPublicKeyAlgorithm = workingAlgId.Algorithm; +// Asn1Encodable workingPublicKeyParameters = workingAlgId.Parameters; + + // + // (k) + // + int maxPathLength = n; + + // + // 6.1.3 + // + + var targetConstraints = paramsPkix.GetTargetConstraintsCert(); + if (targetConstraints != null && !targetConstraints.Match((X509Certificate)certs[0])) + { + throw new PkixCertPathValidatorException( + "Target certificate in certification path does not match targetConstraints.", null, 0); + } + + // + // initialize CertPathChecker's + // + var certPathCheckers = paramsPkix.GetCertPathCheckers(); + foreach (PkixCertPathChecker certPathChecker in certPathCheckers) + { + certPathChecker.Init(false); + } + + X509Certificate cert = null; + + for (index = certs.Count - 1; index >= 0; index--) + { + // try + // { + // + // i as defined in the algorithm description + // + i = n - index; + + // + // set certificate to be checked in this round + // sign and workingPublicKey and workingIssuerName are set + // at the end of the for loop and initialized the + // first time from the TrustAnchor + // + cert = (X509Certificate)certs[index]; + + try + { + CheckCertificate(cert); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException(e.Message, e.InnerException, index); + } + + // + // 6.1.3 + // + + Rfc3280CertPathUtilities.ProcessCertA(certPath, paramsPkix, index, workingPublicKey, + workingIssuerName, sign); + + Rfc3280CertPathUtilities.ProcessCertBC(certPath, index, nameConstraintValidator); + + validPolicyTree = Rfc3280CertPathUtilities.ProcessCertD(certPath, index, + acceptablePolicies, validPolicyTree, policyNodes, inhibitAnyPolicy); + + validPolicyTree = Rfc3280CertPathUtilities.ProcessCertE(certPath, index, validPolicyTree); + + Rfc3280CertPathUtilities.ProcessCertF(certPath, index, validPolicyTree, explicitPolicy); + + // + // 6.1.4 + // + + if (i != n) + { + if (cert != null && cert.Version == 1) + { + // we've found the trust anchor at the top of the path, ignore and keep going + if ((i == 1) && cert.Equals(trust.TrustedCert)) + continue; + + throw new PkixCertPathValidatorException( + "Version 1 certificates can't be used as CA ones.", null, index); + } + + Rfc3280CertPathUtilities.PrepareNextCertA(certPath, index); + + validPolicyTree = Rfc3280CertPathUtilities.PrepareCertB(certPath, index, policyNodes, + validPolicyTree, policyMapping); + + Rfc3280CertPathUtilities.PrepareNextCertG(certPath, index, nameConstraintValidator); + + // (h) + explicitPolicy = Rfc3280CertPathUtilities.PrepareNextCertH1(certPath, index, explicitPolicy); + policyMapping = Rfc3280CertPathUtilities.PrepareNextCertH2(certPath, index, policyMapping); + inhibitAnyPolicy = Rfc3280CertPathUtilities.PrepareNextCertH3(certPath, index, inhibitAnyPolicy); + + // + // (i) + // + explicitPolicy = Rfc3280CertPathUtilities.PrepareNextCertI1(certPath, index, explicitPolicy); + policyMapping = Rfc3280CertPathUtilities.PrepareNextCertI2(certPath, index, policyMapping); + + // (j) + inhibitAnyPolicy = Rfc3280CertPathUtilities.PrepareNextCertJ(certPath, index, inhibitAnyPolicy); + + // (k) + Rfc3280CertPathUtilities.PrepareNextCertK(certPath, index); + + // (l) + maxPathLength = Rfc3280CertPathUtilities.PrepareNextCertL(certPath, index, maxPathLength); + + // (m) + maxPathLength = Rfc3280CertPathUtilities.PrepareNextCertM(certPath, index, maxPathLength); + + // (n) + Rfc3280CertPathUtilities.PrepareNextCertN(certPath, index); + + var criticalExtensions1 = cert.GetCriticalExtensionOids(); + + if (criticalExtensions1 != null) + { + criticalExtensions1 = new HashSet(criticalExtensions1); + + // these extensions are handled by the algorithm + criticalExtensions1.Remove(X509Extensions.KeyUsage.Id); + criticalExtensions1.Remove(X509Extensions.CertificatePolicies.Id); + criticalExtensions1.Remove(X509Extensions.PolicyMappings.Id); + criticalExtensions1.Remove(X509Extensions.InhibitAnyPolicy.Id); + criticalExtensions1.Remove(X509Extensions.IssuingDistributionPoint.Id); + criticalExtensions1.Remove(X509Extensions.DeltaCrlIndicator.Id); + criticalExtensions1.Remove(X509Extensions.PolicyConstraints.Id); + criticalExtensions1.Remove(X509Extensions.BasicConstraints.Id); + criticalExtensions1.Remove(X509Extensions.SubjectAlternativeName.Id); + criticalExtensions1.Remove(X509Extensions.NameConstraints.Id); + } + else + { + criticalExtensions1 = new HashSet(); + } + + // (o) + Rfc3280CertPathUtilities.PrepareNextCertO(certPath, index, criticalExtensions1, certPathCheckers); + + // set signing certificate for next round + sign = cert; + + // (c) + workingIssuerName = sign.SubjectDN; + + // (d) + try + { + workingPublicKey = PkixCertPathValidatorUtilities.GetNextWorkingKey(certPath.Certificates, index); + } + catch (PkixCertPathValidatorException e) + { + throw new PkixCertPathValidatorException("Next working key could not be retrieved.", e, index); + } + + workingAlgId = PkixCertPathValidatorUtilities.GetAlgorithmIdentifier(workingPublicKey); + // (f) +// workingPublicKeyAlgorithm = workingAlgId.Algorithm; + // (e) +// workingPublicKeyParameters = workingAlgId.Parameters; + } + } + + // + // 6.1.5 Wrap-up procedure + // + + explicitPolicy = Rfc3280CertPathUtilities.WrapupCertA(explicitPolicy, cert); + + explicitPolicy = Rfc3280CertPathUtilities.WrapupCertB(certPath, index + 1, explicitPolicy); + + // + // (c) (d) and (e) are already done + // + + // + // (f) + // + var criticalExtensions = cert.GetCriticalExtensionOids(); + + if (criticalExtensions != null) + { + criticalExtensions = new HashSet(criticalExtensions); + + // Requires .Id + // these extensions are handled by the algorithm + criticalExtensions.Remove(X509Extensions.KeyUsage.Id); + criticalExtensions.Remove(X509Extensions.CertificatePolicies.Id); + criticalExtensions.Remove(X509Extensions.PolicyMappings.Id); + criticalExtensions.Remove(X509Extensions.InhibitAnyPolicy.Id); + criticalExtensions.Remove(X509Extensions.IssuingDistributionPoint.Id); + criticalExtensions.Remove(X509Extensions.DeltaCrlIndicator.Id); + criticalExtensions.Remove(X509Extensions.PolicyConstraints.Id); + criticalExtensions.Remove(X509Extensions.BasicConstraints.Id); + criticalExtensions.Remove(X509Extensions.SubjectAlternativeName.Id); + criticalExtensions.Remove(X509Extensions.NameConstraints.Id); + criticalExtensions.Remove(X509Extensions.CrlDistributionPoints.Id); + } + else + { + criticalExtensions = new HashSet(); + } + + Rfc3280CertPathUtilities.WrapupCertF(certPath, index + 1, certPathCheckers, criticalExtensions); + + PkixPolicyNode intersection = Rfc3280CertPathUtilities.WrapupCertG(certPath, paramsPkix, + userInitialPolicySet, index + 1, policyNodes, validPolicyTree, acceptablePolicies); + + if ((explicitPolicy > 0) || (intersection != null)) + { + return new PkixCertPathValidatorResult(trust, intersection, cert.GetPublicKey()); + } + + throw new PkixCertPathValidatorException("Path processing failed on policy.", null, index); + } + + internal static void CheckCertificate(X509Certificate cert) + { + try + { + TbsCertificateStructure.GetInstance(cert.CertificateStructure.TbsCertificate); + } + catch (CertificateEncodingException e) + { + throw new Exception("unable to process TBSCertificate", e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidator.cs.meta new file mode 100644 index 000000000..f4940c1bf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1230039d20abc264894f233518e57548 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidatorException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidatorException.cs new file mode 100644 index 000000000..4aa0d31c3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidatorException.cs @@ -0,0 +1,97 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + /** + * An exception indicating one of a variety of problems encountered when + * validating a certification path.
    + *
    + * A CertPathValidatorException provides support for wrapping + * exceptions. The {@link #getCause getCause} method returns the throwable, + * if any, that caused this exception to be thrown.
    + *
    + * A CertPathValidatorException may also include the + * certification path that was being validated when the exception was thrown + * and the index of the certificate in the certification path that caused the + * exception to be thrown. Use the {@link #getCertPath getCertPath} and + * {@link #getIndex getIndex} methods to retrieve this information.
    + *
    + * Concurrent Access
    + *
    + * Unless otherwise specified, the methods defined in this class are not + * thread-safe. Multiple threads that need to access a single + * object concurrently should synchronize amongst themselves and + * provide the necessary locking. Multiple threads each manipulating + * separate objects need not synchronize. + * + * @see CertPathValidator + **/ + [Serializable] + public class PkixCertPathValidatorException + : GeneralSecurityException + { + protected readonly int m_index = -1; + + public PkixCertPathValidatorException() + : base() + { + } + + public PkixCertPathValidatorException(string message) + : base(message) + { + } + + public PkixCertPathValidatorException(string message, Exception innerException) + : base(message, innerException) + { + } + + /// + /// Creates a PkixCertPathValidatorException with the specified + /// detail message, cause, certification path, and index. + /// + /// the detail message (or null if none) + /// the cause (or null if none) + /// the index of the certificate in the certification path that * + public PkixCertPathValidatorException(string message, Exception innerException, int index) + : base(message, innerException) + { + if (index < -1) + throw new ArgumentException("cannot be < -1", nameof(index)); + + m_index = index; + } + + protected PkixCertPathValidatorException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + m_index = info.GetInt32("index"); + } + + public override void GetObjectData(SerializationInfo info, StreamingContext context) + { + base.GetObjectData(info, context); + info.AddValue("index", m_index); + } + + /// eturns the index of the certificate in the certification path that caused the exception to be + /// thrown. + /// + /// Note that the list of certificates in a is zero based. If no index has been set, + /// -1 is returned. + /// + /// The index that has been set, or -1 if none has been set. + public int Index + { + get { return m_index; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidatorException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidatorException.cs.meta new file mode 100644 index 000000000..b4521bf58 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidatorException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: db2fbbf90588ea041ab1bf5b62f86bea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidatorResult.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidatorResult.cs new file mode 100644 index 000000000..11de44ff0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidatorResult.cs @@ -0,0 +1,66 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + /// + /// Summary description for PkixCertPathValidatorResult. + /// + public class PkixCertPathValidatorResult + //: ICertPathValidatorResult + { + private TrustAnchor trustAnchor; + private PkixPolicyNode policyTree; + private AsymmetricKeyParameter subjectPublicKey; + + public PkixPolicyNode PolicyTree + { + get { return this.policyTree; } + } + + public TrustAnchor TrustAnchor + { + get { return this.trustAnchor; } + } + + public AsymmetricKeyParameter SubjectPublicKey + { + get { return this.subjectPublicKey; } + } + + public PkixCertPathValidatorResult(TrustAnchor trustAnchor, PkixPolicyNode policyTree, + AsymmetricKeyParameter subjectPublicKey) + { + if (trustAnchor == null) + throw new ArgumentNullException(nameof(trustAnchor)); + if (subjectPublicKey == null) + throw new ArgumentNullException(nameof(subjectPublicKey)); + + this.trustAnchor = trustAnchor; + this.policyTree = policyTree; + this.subjectPublicKey = subjectPublicKey; + } + + public object Clone() + { + return new PkixCertPathValidatorResult(this.TrustAnchor, this.PolicyTree, this.SubjectPublicKey); + } + + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine("PKIXCertPathValidatorResult: ["); + sb.Append(" Trust Anchor: ").Append(TrustAnchor).AppendLine(); + sb.Append(" Policy Tree: ").Append(PolicyTree).AppendLine(); + sb.Append(" Subject Public Key: ").Append(SubjectPublicKey).AppendLine(); + return sb.ToString(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidatorResult.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidatorResult.cs.meta new file mode 100644 index 000000000..3bb041cb7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidatorResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f0872050d12dad44abb76c1745b5f870 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidatorUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidatorUtilities.cs new file mode 100644 index 000000000..8e13e3068 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidatorUtilities.cs @@ -0,0 +1,1053 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.IsisMtt; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Extension; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Store; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + /// + /// Summary description for PkixCertPathValidatorUtilities. + /// + internal static class PkixCertPathValidatorUtilities + { + private static readonly PkixCrlUtilities CrlUtilities = new PkixCrlUtilities(); + + internal static readonly string ANY_POLICY = "2.5.29.32.0"; + + internal static readonly string CRL_NUMBER = X509Extensions.CrlNumber.Id; + + /// + /// key usage bits + /// + internal static readonly int KEY_CERT_SIGN = 5; + internal static readonly int CRL_SIGN = 6; + + //internal static readonly string[] crlReasons = new string[] + //{ + // "unspecified", + // "keyCompromise", + // "cACompromise", + // "affiliationChanged", + // "superseded", + // "cessationOfOperation", + // "certificateHold", + // "unknown", + // "removeFromCRL", + // "privilegeWithdrawn", + // "aACompromise" + //}; + + /// + /// Search the given Set of TrustAnchor's for one that is the + /// issuer of the given X509 certificate. + /// + /// the X509 certificate + /// a Set of TrustAnchor's + /// the TrustAnchor object if found or + /// null if not. + /// + /// @exception + internal static TrustAnchor FindTrustAnchor(X509Certificate cert, ISet trustAnchors) + { + var iter = trustAnchors.GetEnumerator(); + TrustAnchor trust = null; + AsymmetricKeyParameter trustPublicKey = null; + Exception invalidKeyEx = null; + + X509CertStoreSelector certSelectX509 = new X509CertStoreSelector(); + + try + { + certSelectX509.Subject = GetIssuerPrincipal(cert); + } + catch (IOException ex) + { + throw new Exception("Cannot set subject search criteria for trust anchor.", ex); + } + + while (iter.MoveNext() && trust == null) + { + trust = iter.Current; + if (trust.TrustedCert != null) + { + if (certSelectX509.Match(trust.TrustedCert)) + { + trustPublicKey = trust.TrustedCert.GetPublicKey(); + } + else + { + trust = null; + } + } + else if (trust.CAName != null && trust.CAPublicKey != null) + { + try + { + X509Name certIssuer = GetIssuerPrincipal(cert); + X509Name caName = new X509Name(trust.CAName); + + if (certIssuer.Equivalent(caName, true)) + { + trustPublicKey = trust.CAPublicKey; + } + else + { + trust = null; + } + } + catch (InvalidParameterException) + { + trust = null; + } + } + else + { + trust = null; + } + + if (trustPublicKey != null) + { + try + { + cert.Verify(trustPublicKey); + } + catch (Exception ex) + { + invalidKeyEx = ex; + trust = null; + } + } + } + + if (trust == null && invalidKeyEx != null) + { + throw new Exception("TrustAnchor found but certificate validation failed.", invalidKeyEx); + } + + return trust; + } + + internal static bool IsIssuerTrustAnchor(X509Certificate cert, ISet trustAnchors) + { + try + { + return FindTrustAnchor(cert, trustAnchors) != null; + } + catch (Exception) + { + return false; + } + } + + internal static void AddAdditionalStoresFromAltNames(X509Certificate cert, PkixParameters pkixParams) + { + // if in the IssuerAltName extension an URI + // is given, add an additinal X.509 store + var issuerAltNames = cert.GetIssuerAlternativeNames(); + if (issuerAltNames != null) + { + foreach (var list in issuerAltNames) + { + // look for URI + if (list.Count >= 2 && list[0].Equals(GeneralName.UniformResourceIdentifier)) + { + string location = (string)list[1]; + AddAdditionalStoreFromLocation(location, pkixParams); + } + } + } + } + + internal static DateTime GetValidDate(PkixParameters paramsPKIX) + { + DateTime? validDate = paramsPKIX.Date; + + if (validDate == null) + return DateTime.UtcNow; + + return validDate.Value; + } + + /// + /// Returns the issuer of an attribute certificate or certificate. + /// + /// The attribute certificate or certificate. + /// The issuer as X500Principal. + internal static X509Name GetIssuerPrincipal(object obj) + { + if (obj is X509Certificate cert) + return cert.IssuerDN; + if (obj is X509V2AttributeCertificate attrCert) + return attrCert.Issuer.GetPrincipals()[0]; + throw new InvalidOperationException(); + } + + internal static X509Name GetIssuerPrincipal(X509V2AttributeCertificate attrCert) + { + return attrCert.Issuer.GetPrincipals()[0]; + } + + internal static X509Name GetIssuerPrincipal(X509Certificate cert) + { + return cert.IssuerDN; + } + + internal static bool IsSelfIssued( + X509Certificate cert) + { + return cert.SubjectDN.Equivalent(cert.IssuerDN, true); + } + + internal static AlgorithmIdentifier GetAlgorithmIdentifier( + AsymmetricKeyParameter key) + { + try + { + SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(key); + + return info.AlgorithmID; + } + catch (Exception e) + { + throw new PkixCertPathValidatorException("Subject public key cannot be decoded.", e); + } + } + + internal static bool IsAnyPolicy(ISet policySet) + { + return policySet == null || policySet.Count < 1 || policySet.Contains(ANY_POLICY); + } + + internal static void AddAdditionalStoreFromLocation( + string location, + PkixParameters pkixParams) + { + if (pkixParams.IsAdditionalLocationsEnabled) + { + try + { + if (Org.BouncyCastle.Utilities.Platform.StartsWith(location, "ldap://")) + { + // ldap://directory.d-trust.net/CN=D-TRUST + // Qualified CA 2003 1:PN,O=D-Trust GmbH,C=DE + // skip "ldap://" + location = location.Substring(7); + // after first / baseDN starts + string url;//, baseDN; + int slashPos = location.IndexOf('/'); + if (slashPos != -1) + { + url = "ldap://" + location.Substring(0, slashPos); +// baseDN = location.Substring(slashPos); + } + else + { + url = "ldap://" + location; +// baseDN = nsull; + } + + throw new NotImplementedException("LDAP cert/CRL stores"); + + // use all purpose parameters + //X509LDAPCertStoreParameters ldapParams = new X509LDAPCertStoreParameters.Builder( + // url, baseDN).build(); + //pkixParams.AddAdditionalStore(X509Store.getInstance( + // "CERTIFICATE/LDAP", ldapParams)); + //pkixParams.AddAdditionalStore(X509Store.getInstance( + // "CRL/LDAP", ldapParams)); + //pkixParams.AddAdditionalStore(X509Store.getInstance( + // "ATTRIBUTECERTIFICATE/LDAP", ldapParams)); + //pkixParams.AddAdditionalStore(X509Store.getInstance( + // "CERTIFICATEPAIR/LDAP", ldapParams)); + } + } + catch (Exception) + { + // cannot happen + throw new Exception("Exception adding X.509 stores."); + } + } + } + + private static BigInteger GetSerialNumber( + object cert) + { + if (cert is X509Certificate) + { + return ((X509Certificate)cert).SerialNumber; + } + else + { + return ((X509V2AttributeCertificate)cert).SerialNumber; + } + } + + // + // policy checking + // + + internal static ISet GetQualifierSet(Asn1Sequence qualifiers) + { + var pq = new HashSet(); + + if (qualifiers != null) + { + foreach (Asn1Encodable ae in qualifiers) + { + try + { + pq.Add(PolicyQualifierInfo.GetInstance(ae.ToAsn1Object())); + } + catch (IOException ex) + { + throw new PkixCertPathValidatorException("Policy qualifier info cannot be decoded.", ex); + } + } + } + + return pq; + } + + internal static PkixPolicyNode RemovePolicyNode(PkixPolicyNode validPolicyTree, + IList[] policyNodes, PkixPolicyNode _node) + { + PkixPolicyNode _parent = _node.Parent; + + if (validPolicyTree == null) + { + return null; + } + + if (_parent == null) + { + for (int j = 0; j < policyNodes.Length; j++) + { + policyNodes[j] = new List(); + } + + return null; + } + else + { + _parent.RemoveChild(_node); + RemovePolicyNodeRecurse(policyNodes, _node); + + return validPolicyTree; + } + } + + private static void RemovePolicyNodeRecurse(IList[] policyNodes, PkixPolicyNode _node) + { + policyNodes[_node.Depth].Remove(_node); + + if (_node.HasChildren) + { + foreach (PkixPolicyNode _child in _node.Children) + { + RemovePolicyNodeRecurse(policyNodes, _child); + } + } + } + + internal static void PrepareNextCertB1(int i, IList[] policyNodes, string id_p, + IDictionary> m_idp, X509Certificate cert) + { + foreach (var node in policyNodes[i]) + { + if (node.ValidPolicy.Equals(id_p)) + { + node.ExpectedPolicies = CollectionUtilities.GetValueOrNull(m_idp, id_p); + return; + } + } + + foreach (var node in policyNodes[i]) + { + if (ANY_POLICY.Equals(node.ValidPolicy)) + { + Asn1Sequence policies; + try + { + policies = Asn1Sequence.GetInstance( + GetExtensionValue(cert, X509Extensions.CertificatePolicies)); + } + catch (Exception e) + { + throw new Exception("Certificate policies cannot be decoded.", e); + } + + ISet pq = null; + + foreach (var policy in policies) + { + PolicyInformation pinfo; + try + { + pinfo = PolicyInformation.GetInstance(policy); + } + catch (Exception ex) + { + throw new Exception("Policy information cannot be decoded.", ex); + } + + if (ANY_POLICY.Equals(pinfo.PolicyIdentifier.Id)) + { + try + { + pq = GetQualifierSet(pinfo.PolicyQualifiers); + } + catch (PkixCertPathValidatorException ex) + { + throw new PkixCertPathValidatorException( + "Policy qualifier info set could not be built.", ex); + } + break; + } + } + + bool ci = false; + var critExtOids = cert.GetCriticalExtensionOids(); + if (critExtOids != null) + { + ci = critExtOids.Contains(X509Extensions.CertificatePolicies.Id); + } + + PkixPolicyNode p_node = node.Parent; + if (ANY_POLICY.Equals(p_node.ValidPolicy)) + { + PkixPolicyNode c_node = new PkixPolicyNode(new List(), i, + CollectionUtilities.GetValueOrNull(m_idp, id_p), p_node, pq, id_p, ci); + p_node.AddChild(c_node); + policyNodes[i].Add(c_node); + } + break; + } + } + } + + internal static PkixPolicyNode PrepareNextCertB2(int i, IList[] policyNodes, string id_p, + PkixPolicyNode validPolicyTree) + { + int pos = 0; + + // Copy to avoid RemoveAt calls interfering with enumeration + foreach (var node in new List(policyNodes[i])) + { + if (!node.ValidPolicy.Equals(id_p)) + { + ++pos; + continue; + } + + node.Parent.RemoveChild(node); + + policyNodes[i].RemoveAt(pos); + + for (int k = i - 1; k >= 0; k--) + { + var nodes = policyNodes[k]; + + for (int l = 0; l < nodes.Count; l++) + { + var node2 = nodes[l]; + if (!node2.HasChildren) + { + validPolicyTree = RemovePolicyNode(validPolicyTree, policyNodes, node2); + if (validPolicyTree == null) + break; + } + } + } + } + return validPolicyTree; + } + + internal static void GetCertStatus( + DateTime validDate, + X509Crl crl, + object cert, + CertStatus certStatus) + { + X509Crl bcCRL; + + try + { + bcCRL = new X509Crl(CertificateList.GetInstance((Asn1Sequence)Asn1Sequence.FromByteArray(crl.GetEncoded()))); + } + catch (Exception exception) + { + throw new Exception("X509Crl could not be created.", exception); + } + + X509CrlEntry crl_entry = (X509CrlEntry)bcCRL.GetRevokedCertificate(GetSerialNumber(cert)); + + if (crl_entry == null) + return; + + X509Name issuer = GetIssuerPrincipal(cert); + + if (!issuer.Equivalent(crl_entry.GetCertificateIssuer(), true) + && !issuer.Equivalent(crl.IssuerDN, true)) + { + return; + } + + int reasonCodeValue = CrlReason.Unspecified; + + if (crl_entry.HasExtensions) + { + try + { + Asn1Object extValue = GetExtensionValue(crl_entry, X509Extensions.ReasonCode); + DerEnumerated reasonCode = DerEnumerated.GetInstance(extValue); + if (null != reasonCode) + { + reasonCodeValue = reasonCode.IntValueExact; + } + } + catch (Exception e) + { + throw new Exception("Reason code CRL entry extension could not be decoded.", e); + } + } + + DateTime revocationDate = crl_entry.RevocationDate; + if (validDate.Ticks < revocationDate.Ticks) + { + switch (reasonCodeValue) + { + case CrlReason.Unspecified: + case CrlReason.KeyCompromise: + case CrlReason.CACompromise: + case CrlReason.AACompromise: + break; + default: + return; + } + } + + // (i) or (j) + certStatus.Status = reasonCodeValue; + certStatus.RevocationDate = revocationDate; + } + + /** + * Return the next working key inheriting DSA parameters if necessary. + *

    + * This methods inherits DSA parameters from the indexed certificate or + * previous certificates in the certificate chain to the returned + * PublicKey. The list is searched upwards, meaning the end + * certificate is at position 0 and previous certificates are following. + *

    + *

    + * If the indexed certificate does not contain a DSA key this method simply + * returns the public key. If the DSA key already contains DSA parameters + * the key is also only returned. + *

    + * + * @param certs The certification path. + * @param index The index of the certificate which contains the public key + * which should be extended with DSA parameters. + * @return The public key of the certificate in list position + * index extended with DSA parameters if applicable. + * @throws Exception if DSA parameters cannot be inherited. + */ + internal static AsymmetricKeyParameter GetNextWorkingKey(IList certs, int index) + { + X509Certificate cert = certs[index]; + + AsymmetricKeyParameter pubKey = cert.GetPublicKey(); + + if (!(pubKey is DsaPublicKeyParameters)) + return pubKey; + + DsaPublicKeyParameters dsaPubKey = (DsaPublicKeyParameters)pubKey; + + if (dsaPubKey.Parameters != null) + return dsaPubKey; + + for (int i = index + 1; i < certs.Count; i++) + { + X509Certificate parentCert = certs[i]; + pubKey = parentCert.GetPublicKey(); + + if (!(pubKey is DsaPublicKeyParameters)) + { + throw new PkixCertPathValidatorException( + "DSA parameters cannot be inherited from previous certificate."); + } + + DsaPublicKeyParameters prevDSAPubKey = (DsaPublicKeyParameters)pubKey; + + if (prevDSAPubKey.Parameters == null) + continue; + + DsaParameters dsaParams = prevDSAPubKey.Parameters; + + try + { + return new DsaPublicKeyParameters(dsaPubKey.Y, dsaParams); + } + catch (Exception exception) + { + throw new Exception(exception.Message); + } + } + + throw new PkixCertPathValidatorException("DSA parameters cannot be inherited from previous certificate."); + } + + internal static DateTime GetValidCertDateFromValidityModel( + PkixParameters paramsPkix, + PkixCertPath certPath, + int index) + { + if (paramsPkix.ValidityModel != PkixParameters.ChainValidityModel) + { + return GetValidDate(paramsPkix); + } + + // if end cert use given signing/encryption/... time + if (index <= 0) + { + return GetValidDate(paramsPkix); + // else use time when previous cert was created + } + + var cert = certPath.Certificates[index - 1]; + + if (index - 1 == 0) + { + Asn1GeneralizedTime dateOfCertgen; + try + { + Asn1OctetString extVal = cert.GetExtensionValue(IsisMttObjectIdentifiers.IdIsisMttATDateOfCertGen); + dateOfCertgen = Asn1GeneralizedTime.GetInstance(extVal); + } + catch (ArgumentException) + { + throw new Exception( + "Date of cert gen extension could not be read."); + } + if (dateOfCertgen != null) + { + try + { + return dateOfCertgen.ToDateTime(); + } + catch (ArgumentException e) + { + throw new Exception( + "Date from date of cert gen extension could not be parsed.", + e); + } + } + } + + return cert.NotBefore; + } + + /** + * Add the CRL issuers from the cRLIssuer field of the distribution point or + * from the certificate if not given to the issuer criterion of the + * selector. + *

    + * The issuerPrincipals are a collection with a single + * X500Principal for X509Certificates. For + * {@link X509AttributeCertificate}s the issuer may contain more than one + * X500Principal. + *

    + * + * @param dp The distribution point. + * @param issuerPrincipals The issuers of the certificate or attribute + * certificate which contains the distribution point. + * @param selector The CRL selector. + * @param pkixParams The PKIX parameters containing the cert stores. + * @throws Exception if an exception occurs while processing. + * @throws ClassCastException if issuerPrincipals does not + * contain only X500Principals. + */ + internal static void GetCrlIssuersFromDistributionPoint( + DistributionPoint dp, + ICollection issuerPrincipals, + X509CrlStoreSelector selector, + PkixParameters pkixParams) + { + var issuers = new List(); + // indirect CRL + if (dp.CrlIssuer != null) + { + GeneralName[] genNames = dp.CrlIssuer.GetNames(); + // look for a DN + for (int j = 0; j < genNames.Length; j++) + { + if (genNames[j].TagNo == GeneralName.DirectoryName) + { + try + { + issuers.Add(X509Name.GetInstance(genNames[j].Name.ToAsn1Object())); + } + catch (IOException e) + { + throw new Exception("CRL issuer information from distribution point cannot be decoded.", e); + } + } + } + } + else + { + /* + * certificate issuer is CRL issuer, distributionPoint field MUST be + * present. + */ + if (dp.DistributionPointName == null) + { + throw new Exception( + "CRL issuer is omitted from distribution point but no distributionPoint field present."); + } + + // add and check issuer principals + issuers.AddRange(issuerPrincipals); + } + // TODO: is not found although this should correctly add the rel name. selector of Sun is buggy here or PKI test case is invalid + // distributionPoint + // if (dp.getDistributionPoint() != null) + // { + // // look for nameRelativeToCRLIssuer + // if (dp.getDistributionPoint().getType() == DistributionPointName.NAME_RELATIVE_TO_CRL_ISSUER) + // { + // // append fragment to issuer, only one + // // issuer can be there, if this is given + // if (issuers.size() != 1) + // { + // throw new AnnotatedException( + // "nameRelativeToCRLIssuer field is given but more than one CRL issuer is given."); + // } + // DEREncodable relName = dp.getDistributionPoint().getName(); + // Iterator it = issuers.iterator(); + // List issuersTemp = new ArrayList(issuers.size()); + // while (it.hasNext()) + // { + // Enumeration e = null; + // try + // { + // e = ASN1Sequence.getInstance( + // new ASN1InputStream(((X500Principal) it.next()) + // .getEncoded()).readObject()).getObjects(); + // } + // catch (IOException ex) + // { + // throw new AnnotatedException( + // "Cannot decode CRL issuer information.", ex); + // } + // ASN1EncodableVector v = new ASN1EncodableVector(); + // while (e.hasMoreElements()) + // { + // v.add((DEREncodable) e.nextElement()); + // } + // v.add(relName); + // issuersTemp.add(new X500Principal(new DERSequence(v) + // .getDEREncoded())); + // } + // issuers.clear(); + // issuers.addAll(issuersTemp); + // } + // } + + selector.Issuers = issuers; + } + + /** + * Fetches complete CRLs according to RFC 3280. + * + * @param dp The distribution point for which the complete CRL + * @param cert The X509Certificate or + * {@link org.bouncycastle.x509.X509AttributeCertificate} for + * which the CRL should be searched. + * @param currentDate The date for which the delta CRLs must be valid. + * @param paramsPKIX The extended PKIX parameters. + * @return A Set of X509CRLs with complete + * CRLs. + * @throws Exception if an exception occurs while picking the CRLs + * or no CRLs are found. + */ + internal static ISet GetCompleteCrls(DistributionPoint dp, object certObj, DateTime currentDate, + PkixParameters paramsPKIX) + { + var certObjIssuer = GetIssuerPrincipal(certObj); + + X509CrlStoreSelector crlselect = new X509CrlStoreSelector(); + try + { + var issuers = new HashSet(); + issuers.Add(certObjIssuer); + + GetCrlIssuersFromDistributionPoint(dp, issuers, crlselect, paramsPKIX); + } + catch (Exception e) + { + throw new Exception("Could not get issuer information from distribution point.", e); + } + + { + if (certObj is X509Certificate cert) + { + crlselect.CertificateChecking = cert; + } + else if (certObj is X509V2AttributeCertificate attrCert) + { + crlselect.AttrCertChecking = attrCert; + } + } + + crlselect.CompleteCrlEnabled = true; + + ISet crls = CrlUtilities.FindCrls(crlselect, paramsPKIX, currentDate); + if (crls.Count < 1) + throw new Exception("No CRLs found for issuer \"" + certObjIssuer + "\""); + + return crls; + } + + /** + * Fetches delta CRLs according to RFC 3280 section 5.2.4. + * + * @param currentDate The date for which the delta CRLs must be valid. + * @param paramsPKIX The extended PKIX parameters. + * @param completeCRL The complete CRL the delta CRL is for. + * @return A Set of X509CRLs with delta CRLs. + * @throws Exception if an exception occurs while picking the delta + * CRLs. + */ + internal static ISet GetDeltaCrls( + DateTime currentDate, + PkixParameters paramsPKIX, + X509Crl completeCRL) + { + X509CrlStoreSelector deltaSelect = new X509CrlStoreSelector(); + + // 5.2.4 (a) + try + { + var deltaSelectIssuer = new List(); + deltaSelectIssuer.Add(completeCRL.IssuerDN); + deltaSelect.Issuers = deltaSelectIssuer; + } + catch (IOException e) + { + throw new Exception("Cannot extract issuer from CRL.", e); + } + + BigInteger completeCRLNumber = null; + try + { + Asn1Object asn1Object = GetExtensionValue(completeCRL, X509Extensions.CrlNumber); + if (asn1Object != null) + { + completeCRLNumber = CrlNumber.GetInstance(asn1Object).PositiveValue; + } + } + catch (Exception e) + { + throw new Exception( + "CRL number extension could not be extracted from CRL.", e); + } + + // 5.2.4 (b) + byte[] idp = null; + + try + { + Asn1Object obj = GetExtensionValue(completeCRL, X509Extensions.IssuingDistributionPoint); + if (obj != null) + { + idp = obj.GetDerEncoded(); + } + } + catch (Exception e) + { + throw new Exception( + "Issuing distribution point extension value could not be read.", + e); + } + + // 5.2.4 (d) + + deltaSelect.MinCrlNumber = (completeCRLNumber == null) + ? null + : completeCRLNumber.Add(BigInteger.One); + + deltaSelect.IssuingDistributionPoint = idp; + deltaSelect.IssuingDistributionPointEnabled = true; + + // 5.2.4 (c) + deltaSelect.MaxBaseCrlNumber = completeCRLNumber; + + // find delta CRLs + ISet temp = CrlUtilities.FindCrls(deltaSelect, paramsPKIX, currentDate); + + var result = new HashSet(); + + foreach (X509Crl crl in temp) + { + if (IsDeltaCrl(crl)) + { + result.Add(crl); + } + } + + return result; + } + + private static bool IsDeltaCrl(X509Crl crl) + { + var critical = crl.GetCriticalExtensionOids(); + + return critical.Contains(X509Extensions.DeltaCrlIndicator.Id); + } + + internal static void AddAdditionalStoresFromCrlDistributionPoint( + CrlDistPoint crldp, + PkixParameters pkixParams) + { + if (crldp != null) + { + DistributionPoint[] dps = null; + try + { + dps = crldp.GetDistributionPoints(); + } + catch (Exception e) + { + throw new Exception( + "Distribution points could not be read.", e); + } + for (int i = 0; i < dps.Length; i++) + { + DistributionPointName dpn = dps[i].DistributionPointName; + // look for URIs in fullName + if (dpn != null) + { + if (dpn.PointType == DistributionPointName.FullName) + { + GeneralName[] genNames = GeneralNames.GetInstance( + dpn.Name).GetNames(); + // look for an URI + for (int j = 0; j < genNames.Length; j++) + { + if (genNames[j].TagNo == GeneralName.UniformResourceIdentifier) + { + string location = DerIA5String.GetInstance(genNames[j].Name).GetString(); + AddAdditionalStoreFromLocation(location, pkixParams); + } + } + } + } + } + } + } + + internal static bool ProcessCertD1i(int index, IList[] policyNodes, DerObjectIdentifier pOid, + ISet pq) + { + foreach (var node in policyNodes[index - 1]) + { + if (node.ExpectedPolicies.Contains(pOid.Id)) + { + var childExpectedPolicies = new HashSet(); + childExpectedPolicies.Add(pOid.Id); + + var child = new PkixPolicyNode(new List(), index, childExpectedPolicies, node, pq, + pOid.Id, false); + node.AddChild(child); + policyNodes[index].Add(child); + + return true; + } + } + + return false; + } + + internal static void ProcessCertD1ii(int index, IList[] policyNodes, + DerObjectIdentifier _poid, ISet _pq) + { + foreach (var _node in policyNodes[index - 1]) + { + if (ANY_POLICY.Equals(_node.ValidPolicy)) + { + var _childExpectedPolicies = new HashSet(); + _childExpectedPolicies.Add(_poid.Id); + + var _child = new PkixPolicyNode(new List(), index, _childExpectedPolicies, _node, + _pq, _poid.Id, false); + _node.AddChild(_child); + policyNodes[index].Add(_child); + + return; + } + } + } + + /** + * Find the issuer certificates of a given certificate. + * + * @param cert + * The certificate for which an issuer should be found. + * @param pkixParams + * @return A Collection object containing the issuer + * X509Certificates. Never null. + * + * @exception Exception + * if an error occurs. + */ + internal static HashSet FindIssuerCerts( + X509Certificate cert, + PkixBuilderParameters pkixParams) + { + X509CertStoreSelector certSelector = new X509CertStoreSelector(); + try + { + certSelector.Subject = cert.IssuerDN; + } + catch (IOException ex) + { + throw new Exception( + "Subject criteria for certificate selector to find issuer certificate could not be set.", ex); + } + + var certs = new HashSet(); + try + { + CollectionUtilities.CollectMatches(certs, certSelector, pkixParams.GetStoresCert()); + } + catch (Exception e) + { + throw new Exception("Issuer certificate cannot be searched.", e); + } + + return certs; + } + + internal static Asn1Object GetExtensionValue(IX509Extension extensions, DerObjectIdentifier oid) + { + return X509ExtensionUtilities.FromExtensionValue(extensions, oid); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidatorUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidatorUtilities.cs.meta new file mode 100644 index 000000000..302b0f9be --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCertPathValidatorUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7825ba3fb6db65f428b313e1641e481b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCrlUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCrlUtilities.cs new file mode 100644 index 000000000..d4b5aa1bd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCrlUtilities.cs @@ -0,0 +1,109 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Store; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + public class PkixCrlUtilities + { + public virtual ISet FindCrls(X509CrlStoreSelector crlSelector, PkixParameters paramsPkix, + DateTime currentDate) + { + HashSet initialSet; + + // get complete CRL(s) + try + { + initialSet = FindCrls(crlSelector, paramsPkix.GetStoresCrl()); + } + catch (Exception e) + { + throw new Exception("Exception obtaining complete CRLs.", e); + } + + var finalSet = new HashSet(); + DateTime validityDate = currentDate; + + if (paramsPkix.Date != null) + { + validityDate = paramsPkix.Date.Value; + } + + // based on RFC 5280 6.3.3 + foreach (X509Crl crl in initialSet) + { + DateTime? nextUpdate = crl.NextUpdate; + + if (null == nextUpdate || nextUpdate.Value.CompareTo(validityDate) > 0) + { + X509Certificate cert = crlSelector.CertificateChecking; + + if (null == cert || crl.ThisUpdate.CompareTo(cert.NotAfter) < 0) + { + finalSet.Add(crl); + } + } + } + + return finalSet; + } + + public virtual ISet FindCrls(X509CrlStoreSelector crlSelector, PkixParameters paramsPkix) + { + // get complete CRL(s) + try + { + return FindCrls(crlSelector, paramsPkix.GetStoresCrl()); + } + catch (Exception e) + { + throw new Exception("Exception obtaining complete CRLs.", e); + } + } + + /// + /// crl checking + /// Return a Collection of all CRLs found in the X509Store's that are + /// matching the crlSelect criteriums. + /// + /// a {@link X509CRLStoreSelector} object that will be used + /// to select the CRLs + /// a List containing only {@link org.bouncycastle.x509.X509Store + /// X509Store} objects. These are used to search for CRLs + /// a Collection of all found {@link X509CRL X509CRL} objects. May be + /// empty but never null. + /// + private HashSet FindCrls(ISelector crlSelector, IList> crlStores) + { + var crls = new HashSet(); + + Exception lastException = null; + bool foundValidStore = false; + + foreach (var crlStore in crlStores) + { + try + { + crls.UnionWith(crlStore.EnumerateMatches(crlSelector)); + foundValidStore = true; + } + catch (Exception e) + { + lastException = new Exception("Exception searching in X.509 CRL store.", e); + } + } + + if (!foundValidStore && lastException != null) + throw lastException; + + return crls; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCrlUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCrlUtilities.cs.meta new file mode 100644 index 000000000..38f64aa74 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixCrlUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7931f13e3f4ffef48a585b19606b249f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixNameConstraintValidator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixNameConstraintValidator.cs new file mode 100644 index 000000000..1172ac5b7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixNameConstraintValidator.cs @@ -0,0 +1,1860 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X500; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X500.Style; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + public class PkixNameConstraintValidator + { + private static readonly DerObjectIdentifier SerialNumberOid = X509Name.SerialNumber; + + private ISet excludedSubtreesDN = new HashSet(); + + private ISet excludedSubtreesDns = new HashSet(); + + private ISet excludedSubtreesEmail = new HashSet(); + + private ISet excludedSubtreesUri = new HashSet(); + + private ISet excludedSubtreesIP = new HashSet(); + + private ISet excludedSubtreesOtherName = new HashSet(); + + private ISet permittedSubtreesDN; + + private ISet permittedSubtreesDns; + + private ISet permittedSubtreesEmail; + + private ISet permittedSubtreesUri; + + private ISet permittedSubtreesIP; + + private ISet permittedSubtreesOtherName; + + public PkixNameConstraintValidator() + { + } + + private static bool WithinDNSubtree( + Asn1Sequence dns, + Asn1Sequence subtree) + { + if (subtree.Count < 1 || subtree.Count > dns.Count) + return false; + + int start = 0; + Rdn subtreeRdnStart = Rdn.GetInstance(subtree[0]); + for (int j = 0; j < dns.Count; j++) + { + start = j; + Rdn dnsRdn = Rdn.GetInstance(dns[j]); + if (IetfUtilities.RdnAreEqual(subtreeRdnStart, dnsRdn)) + break; + } + + if (subtree.Count > dns.Count - start) + return false; + + for (int j = 0; j < subtree.Count; ++j) + { + // both subtree and dns are a ASN.1 Name and the elements are a RDN + Rdn subtreeRdn = Rdn.GetInstance(subtree[j]); + Rdn dnsRdn = Rdn.GetInstance(dns[start + j]); + + // check if types and values of all naming attributes are matching, other types which are not restricted are allowed, see https://tools.ietf.org/html/rfc5280#section-7.1 + + // Two relative distinguished names + // RDN1 and RDN2 match if they have the same number of naming attributes + // and for each naming attribute in RDN1 there is a matching naming attribute in RDN2. + // NOTE: this is checking the attributes in the same order, which might be not necessary, if this is a problem also IETFUtils.rDNAreEqual mus tbe changed. + // use new RFC 5280 comparison, NOTE: this is now different from with RFC 3280, where only binary comparison is used + // obey RFC 5280 7.1 + // special treatment of serialNumber for GSMA SGP.22 RSP specification + if (subtreeRdn.Count == 1 && dnsRdn.Count == 1 + && subtreeRdn.GetFirst().GetType().Equals(SerialNumberOid) + && dnsRdn.GetFirst().GetType().Equals(SerialNumberOid)) + { + if (!Org.BouncyCastle.Utilities.Platform.StartsWith(dnsRdn.GetFirst().Value.ToString(), subtreeRdn.GetFirst().Value.ToString())) + return false; + } + else if (!IetfUtilities.RdnAreEqual(subtreeRdn, dnsRdn)) + { + return false; + } + } + + return true; + } + + public void CheckPermittedDN(Asn1Sequence dn) + { + CheckPermittedDirectory(permittedSubtreesDN, dn); + } + + public void CheckExcludedDN(Asn1Sequence dn) + { + CheckExcludedDirectory(excludedSubtreesDN, dn); + } + + private ISet IntersectDN(ISet permitted, ISet dns) + { + var intersect = new HashSet(); + foreach (GeneralSubtree subtree1 in dns) + { + Asn1Sequence dn1 = Asn1Sequence.GetInstance(subtree1.Base.Name); + if (permitted == null) + { + if (dn1 != null) + { + intersect.Add(dn1); + } + } + else + { + foreach (var dn2 in permitted) + { + if (WithinDNSubtree(dn1, dn2)) + { + intersect.Add(dn1); + } + else if (WithinDNSubtree(dn2, dn1)) + { + intersect.Add(dn2); + } + } + } + } + return intersect; + } + + private ISet UnionDN(ISet excluded, Asn1Sequence dn) + { + if (excluded.Count < 1) + { + if (dn == null) + return excluded; + + excluded.Add(dn); + return excluded; + } + + var union = new HashSet(); + + foreach (var subtree in excluded) + { + if (WithinDNSubtree(dn, subtree)) + { + union.Add(subtree); + } + else if (WithinDNSubtree(subtree, dn)) + { + union.Add(dn); + } + else + { + union.Add(subtree); + union.Add(dn); + } + } + + return union; + } + + private ISet IntersectOtherName(ISet permitted, ISet otherNames) + { + var intersect = new HashSet(); + foreach (GeneralSubtree subtree1 in otherNames) + { + OtherName otherName1 = OtherName.GetInstance(subtree1.Base.Name); + if (otherName1 == null) + continue; + + if (permitted == null) + { + intersect.Add(otherName1); + } + else + { + foreach (OtherName otherName2 in permitted) + { + IntersectOtherName(otherName1, otherName2, intersect); + } + } + } + return intersect; + } + + private void IntersectOtherName(OtherName otherName1, OtherName otherName2, ISet intersect) + { + if (otherName1.Equals(otherName2)) + { + intersect.Add(otherName1); + } + } + + private ISet UnionOtherName(ISet permitted, OtherName otherName) + { + var union = permitted != null ? new HashSet(permitted) : new HashSet(); + union.Add(otherName); + return union; + } + + private ISet IntersectEmail(ISet permitted, ISet emails) + { + var intersect = new HashSet(); + foreach (GeneralSubtree subtree1 in emails) + { + string email = ExtractNameAsString(subtree1.Base); + + if (permitted == null) + { + if (email != null) + { + intersect.Add(email); + } + } + else + { + foreach (string _permitted in permitted) + { + IntersectEmail(email, _permitted, intersect); + } + } + } + return intersect; + } + + private ISet UnionEmail(ISet excluded, string email) + { + if (excluded.Count < 1) + { + if (email == null) + return excluded; + + excluded.Add(email); + return excluded; + } + + var union = new HashSet(); + foreach (string _excluded in excluded) + { + UnionEmail(_excluded, email, union); + } + return union; + } + + /** + * Returns the intersection of the permitted IP ranges in + * permitted with ip. + * + * @param permitted A Set of permitted IP addresses with + * their subnet mask as byte arrays. + * @param ips The IP address with its subnet mask. + * @return The Set of permitted IP ranges intersected with + * ip. + */ + private ISet IntersectIP(ISet permitted, ISet ips) + { + var intersect = new HashSet(); + foreach (GeneralSubtree subtree in ips) + { + byte[] ip = Asn1OctetString.GetInstance(subtree.Base.Name).GetOctets(); + if (permitted == null) + { + if (ip != null) + { + intersect.Add(ip); + } + } + else + { + foreach (byte[] _permitted in permitted) + { + intersect.UnionWith(IntersectIPRange(_permitted, ip)); + } + } + } + return intersect; + } + + /** + * Returns the union of the excluded IP ranges in excluded + * with ip. + * + * @param excluded A Set of excluded IP addresses with their + * subnet mask as byte arrays. + * @param ip The IP address with its subnet mask. + * @return The Set of excluded IP ranges unified with + * ip as byte arrays. + */ + private ISet UnionIP(ISet excluded, byte[] ip) + { + if (excluded.Count < 1) + { + if (ip == null) + return excluded; + + excluded.Add(ip); + return excluded; + } + + var union = new HashSet(); + foreach (byte[] _excluded in excluded) + { + union.UnionWith(UnionIPRange(_excluded, ip)); + } + return union; + } + + /** + * Calculates the union if two IP ranges. + * + * @param ipWithSubmask1 The first IP address with its subnet mask. + * @param ipWithSubmask2 The second IP address with its subnet mask. + * @return A Set with the union of both addresses. + */ + private ISet UnionIPRange(byte[] ipWithSubmask1, byte[] ipWithSubmask2) + { + var set = new HashSet(); + // difficult, adding always all IPs is not wrong + if (Arrays.AreEqual(ipWithSubmask1, ipWithSubmask2)) + { + set.Add(ipWithSubmask1); + } + else + { + set.Add(ipWithSubmask1); + set.Add(ipWithSubmask2); + } + return set; + } + + /** + * Calculates the interesction if two IP ranges. + * + * @param ipWithSubmask1 The first IP address with its subnet mask. + * @param ipWithSubmask2 The second IP address with its subnet mask. + * @return A Set with the single IP address with its subnet + * mask as a byte array or an empty Set. + */ + private ISet IntersectIPRange(byte[] ipWithSubmask1, byte[] ipWithSubmask2) + { + if (ipWithSubmask1.Length != ipWithSubmask2.Length) + { + //Collections.EMPTY_SET; + return new HashSet(); + } + + byte[][] temp = ExtractIPsAndSubnetMasks(ipWithSubmask1, ipWithSubmask2); + byte[] ip1 = temp[0]; + byte[] subnetmask1 = temp[1]; + byte[] ip2 = temp[2]; + byte[] subnetmask2 = temp[3]; + + byte[][] minMax = MinMaxIPs(ip1, subnetmask1, ip2, subnetmask2); + byte[] min; + byte[] max; + max = Min(minMax[1], minMax[3]); + min = Max(minMax[0], minMax[2]); + + // minimum IP address must be bigger than max + if (CompareTo(min, max) == 1) + { + //return Collections.EMPTY_SET; + return new HashSet(); + } + // OR keeps all significant bits + byte[] ip = Or(minMax[0], minMax[2]); + byte[] subnetmask = Or(subnetmask1, subnetmask2); + + //return new HashSet( ICollectionsingleton(IpWithSubnetMask(ip, subnetmask)); + var hs = new HashSet(); + hs.Add(IpWithSubnetMask(ip, subnetmask)); + + return hs; + } + + /** + * Concatenates the IP address with its subnet mask. + * + * @param ip The IP address. + * @param subnetMask Its subnet mask. + * @return The concatenated IP address with its subnet mask. + */ + private byte[] IpWithSubnetMask(byte[] ip, byte[] subnetMask) + { + int ipLength = ip.Length; + byte[] temp = new byte[ipLength * 2]; + Array.Copy(ip, 0, temp, 0, ipLength); + Array.Copy(subnetMask, 0, temp, ipLength, ipLength); + return temp; + } + + /** + * Splits the IP addresses and their subnet mask. + * + * @param ipWithSubmask1 The first IP address with the subnet mask. + * @param ipWithSubmask2 The second IP address with the subnet mask. + * @return An array with two elements. Each element contains the IP address + * and the subnet mask in this order. + */ + private byte[][] ExtractIPsAndSubnetMasks( + byte[] ipWithSubmask1, + byte[] ipWithSubmask2) + { + int ipLength = ipWithSubmask1.Length / 2; + byte[] ip1 = new byte[ipLength]; + byte[] subnetmask1 = new byte[ipLength]; + Array.Copy(ipWithSubmask1, 0, ip1, 0, ipLength); + Array.Copy(ipWithSubmask1, ipLength, subnetmask1, 0, ipLength); + + byte[] ip2 = new byte[ipLength]; + byte[] subnetmask2 = new byte[ipLength]; + Array.Copy(ipWithSubmask2, 0, ip2, 0, ipLength); + Array.Copy(ipWithSubmask2, ipLength, subnetmask2, 0, ipLength); + return new byte[][]{ ip1, subnetmask1, ip2, subnetmask2 }; + } + + /** + * Based on the two IP addresses and their subnet masks the IP range is + * computed for each IP address - subnet mask pair and returned as the + * minimum IP address and the maximum address of the range. + * + * @param ip1 The first IP address. + * @param subnetmask1 The subnet mask of the first IP address. + * @param ip2 The second IP address. + * @param subnetmask2 The subnet mask of the second IP address. + * @return A array with two elements. The first/second element contains the + * min and max IP address of the first/second IP address and its + * subnet mask. + */ + private byte[][] MinMaxIPs( + byte[] ip1, + byte[] subnetmask1, + byte[] ip2, + byte[] subnetmask2) + { + int ipLength = ip1.Length; + byte[] min1 = new byte[ipLength]; + byte[] max1 = new byte[ipLength]; + + byte[] min2 = new byte[ipLength]; + byte[] max2 = new byte[ipLength]; + + for (int i = 0; i < ipLength; i++) + { + min1[i] = (byte)(ip1[i] & subnetmask1[i]); + max1[i] = (byte)(ip1[i] & subnetmask1[i] | ~subnetmask1[i]); + + min2[i] = (byte)(ip2[i] & subnetmask2[i]); + max2[i] = (byte)(ip2[i] & subnetmask2[i] | ~subnetmask2[i]); + } + + return new byte[][]{ min1, max1, min2, max2 }; + } + + private bool IsOtherNameConstrained(OtherName constraint, OtherName otherName) + { + return constraint.Equals(otherName); + } + + private bool IsOtherNameConstrained(ISet constraints, OtherName otherName) + { + foreach (OtherName constraint in constraints) + { + if (IsOtherNameConstrained(constraint, otherName)) + return true; + } + + return false; + } + + private void CheckPermittedOtherName(ISet permitted, OtherName name) + { + if (permitted != null && !IsOtherNameConstrained(permitted, name)) + throw new PkixNameConstraintValidatorException("Subject OtherName is not from a permitted subtree."); + } + + private void CheckExcludedOtherName(ISet excluded, OtherName name) + { + if (IsOtherNameConstrained(excluded, name)) + throw new PkixNameConstraintValidatorException("OtherName is from an excluded subtree."); + } + + private bool IsEmailConstrained(string constraint, string email) + { + string sub = email.Substring(email.IndexOf('@') + 1); + // a particular mailbox + if (constraint.IndexOf('@') != -1) + { + if (string.Equals(email, constraint, StringComparison.OrdinalIgnoreCase)) + return true; + } + // on particular host + else if (constraint[0] != '.') + { + if (string.Equals(sub, constraint, StringComparison.OrdinalIgnoreCase)) + return true; + } + // address in sub domain + else if (WithinDomain(sub, constraint)) + { + return true; + } + return false; + } + + private bool IsEmailConstrained(ISet constraints, string email) + { + foreach (string constraint in constraints) + { + if (IsEmailConstrained(constraint, email)) + return true; + } + + return false; + } + + private void CheckPermittedEmail(ISet permitted, string email) + { + if (permitted != null + && !(email.Length == 0 && permitted.Count < 1) + && !IsEmailConstrained(permitted, email)) + { + throw new PkixNameConstraintValidatorException( + "Subject email address is not from a permitted subtree."); + } + } + + private void CheckExcludedEmail(ISet excluded, string email) + { + if (IsEmailConstrained(excluded, email)) + throw new PkixNameConstraintValidatorException("Email address is from an excluded subtree."); + } + + private bool IsDnsConstrained(string constraint, string dns) + { + return WithinDomain(dns, constraint) || Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(dns, constraint); + } + + private bool IsDnsConstrained(ISet constraints, string dns) + { + foreach (var constraint in constraints) + { + if (IsDnsConstrained(constraint, dns)) + return true; + } + + return false; + } + + private void CheckPermittedDns(ISet permitted, string dns) + { + if (permitted != null + && !(dns.Length == 0 && permitted.Count < 1) + && !IsDnsConstrained(permitted, dns)) + { + throw new PkixNameConstraintValidatorException("DNS is not from a permitted subtree."); + } + } + + private void CheckExcludedDns(ISet excluded, string dns) + { + if (IsDnsConstrained(excluded, dns)) + throw new PkixNameConstraintValidatorException("DNS is from an excluded subtree."); + } + + private bool IsDirectoryConstrained(ISet constraints, Asn1Sequence directory) + { + foreach (var constraint in constraints) + { + if (WithinDNSubtree(directory, constraint)) + return true; + } + + return false; + } + + private void CheckPermittedDirectory(ISet permitted, Asn1Sequence directory) + { + if (permitted != null + && !(directory.Count == 0 && permitted.Count < 1) + && !IsDirectoryConstrained(permitted, directory)) + { + throw new PkixNameConstraintValidatorException( + "Subject distinguished name is not from a permitted subtree"); + } + } + + private void CheckExcludedDirectory(ISet excluded, Asn1Sequence directory) + { + if (IsDirectoryConstrained(excluded, directory)) + { + throw new PkixNameConstraintValidatorException( + "Subject distinguished name is from an excluded subtree"); + } + } + + private bool IsUriConstrained(string constraint, string uri) + { + string host = ExtractHostFromURL(uri); + + if (Org.BouncyCastle.Utilities.Platform.StartsWith(constraint, ".")) + { + // in sub domain or domain + return WithinDomain(host, constraint); + } + + // a host + return Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(host, constraint); + } + + private bool IsUriConstrained(ISet constraints, string uri) + { + foreach (string constraint in constraints) + { + if (IsUriConstrained(constraint, uri)) + return true; + } + + return false; + } + + private void CheckPermittedUri(ISet permitted, string uri) + { + if (permitted != null + && !(uri.Length == 0 && permitted.Count < 1) + && !IsUriConstrained(permitted, uri)) + { + throw new PkixNameConstraintValidatorException("URI is not from a permitted subtree."); + } + } + + private void CheckExcludedUri(ISet excluded, string uri) + { + if (IsUriConstrained(excluded, uri)) + throw new PkixNameConstraintValidatorException("URI is from an excluded subtree."); + } + + /** + * Checks if the IP address ip is constrained by + * constraint. + * + * @param constraint The constraint. This is an IP address concatenated with + * its subnetmask. + * @param ip The IP address. + * @return true if constrained, false + * otherwise. + */ + private bool IsIPConstrained(byte[] constraint, byte[] ip) + { + int ipLength = ip.Length; + if (ipLength != (constraint.Length / 2)) + return false; + + byte[] subnetMask = new byte[ipLength]; + Array.Copy(constraint, ipLength, subnetMask, 0, ipLength); + + byte[] permittedSubnetAddress = new byte[ipLength]; + + byte[] ipSubnetAddress = new byte[ipLength]; + + // the resulting IP address by applying the subnet mask + for (int i = 0; i < ipLength; i++) + { + permittedSubnetAddress[i] = (byte)(constraint[i] & subnetMask[i]); + ipSubnetAddress[i] = (byte)(ip[i] & subnetMask[i]); + } + + return Arrays.AreEqual(permittedSubnetAddress, ipSubnetAddress); + } + + private bool IsIPConstrained(ISet constraints, byte[] ip) + { + foreach (byte[] constraint in constraints) + { + if (IsIPConstrained(constraint, ip)) + return true; + } + + return false; + } + + /** + * Checks if the IP ip is included in the permitted ISet + * permitted. + * + * @param permitted A Set of permitted IP addresses with + * their subnet mask as byte arrays. + * @param ip The IP address. + * @throws PkixNameConstraintValidatorException + * if the IP is not permitted. + */ + private void CheckPermittedIP(ISet permitted, byte[] ip) + { + if (permitted != null + && !(ip.Length == 0 && permitted.Count < 1) + && !IsIPConstrained(permitted, ip)) + { + throw new PkixNameConstraintValidatorException("IP is not from a permitted subtree."); + } + } + + /** + * Checks if the IP ip is included in the excluded ISet + * excluded. + * + * @param excluded A Set of excluded IP addresses with their + * subnet mask as byte arrays. + * @param ip The IP address. + * @throws PkixNameConstraintValidatorException + * if the IP is excluded. + */ + private void CheckExcludedIP(ISet excluded, byte[] ip) + { + if (IsIPConstrained(excluded, ip)) + throw new PkixNameConstraintValidatorException("IP is from an excluded subtree."); + } + + private bool WithinDomain(string testDomain, string domain) + { + string tempDomain = domain; + if (Org.BouncyCastle.Utilities.Platform.StartsWith(tempDomain, ".")) + { + tempDomain = tempDomain.Substring(1); + } + + string[] domainParts = tempDomain.Split('.'); // Strings.split(tempDomain, '.'); + string[] testDomainParts = testDomain.Split('.'); // Strings.split(testDomain, '.'); + + // must have at least one subdomain + if (testDomainParts.Length <= domainParts.Length) + return false; + + int d = testDomainParts.Length - domainParts.Length; + for (int i = -1; i < domainParts.Length; i++) + { + if (i == -1) + { + if (testDomainParts[i + d].Length < 1) + { + return false; + } + } + else if (!Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(testDomainParts[i + d], domainParts[i])) + { + return false; + } + } + return true; + } + + /** + * The common part of email1 and email2 is + * added to the union union. If email1 and + * email2 have nothing in common they are added both. + * + * @param email1 Email address constraint 1. + * @param email2 Email address constraint 2. + * @param union The union. + */ + private void UnionEmail(string email1, string email2, ISet union) + { + // email1 is a particular address + if (email1.IndexOf('@') != -1) + { + string _sub = email1.Substring(email1.IndexOf('@') + 1); + // both are a particular mailbox + if (email2.IndexOf('@') != -1) + { + if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(email1, email2)) + { + union.Add(email1); + } + else + { + union.Add(email1); + union.Add(email2); + } + } + // email2 specifies a domain + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(email2, ".")) + { + if (WithinDomain(_sub, email2)) + { + union.Add(email2); + } + else + { + union.Add(email1); + union.Add(email2); + } + } + // email2 specifies a particular host + else + { + if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(_sub, email2)) + { + union.Add(email2); + } + else + { + union.Add(email1); + union.Add(email2); + } + } + } + // email1 specifies a domain + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(email1, ".")) + { + if (email2.IndexOf('@') != -1) + { + string _sub = email2.Substring(email1.IndexOf('@') + 1); + if (WithinDomain(_sub, email1)) + { + union.Add(email1); + } + else + { + union.Add(email1); + union.Add(email2); + } + } + // email2 specifies a domain + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(email2, ".")) + { + if (WithinDomain(email1, email2) || Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(email1, email2)) + { + union.Add(email2); + } + else if (WithinDomain(email2, email1)) + { + union.Add(email1); + } + else + { + union.Add(email1); + union.Add(email2); + } + } + else + { + if (WithinDomain(email2, email1)) + { + union.Add(email1); + } + else + { + union.Add(email1); + union.Add(email2); + } + } + } + // email specifies a host + else + { + if (email2.IndexOf('@') != -1) + { + string _sub = email2.Substring(email1.IndexOf('@') + 1); + if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(_sub, email1)) + { + union.Add(email1); + } + else + { + union.Add(email1); + union.Add(email2); + } + } + // email2 specifies a domain + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(email2, ".")) + { + if (WithinDomain(email1, email2)) + { + union.Add(email2); + } + else + { + union.Add(email1); + union.Add(email2); + } + } + // email2 specifies a particular host + else + { + if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(email1, email2)) + { + union.Add(email1); + } + else + { + union.Add(email1); + union.Add(email2); + } + } + } + } + + private void UnionUri(string email1, string email2, ISet union) + { + // email1 is a particular address + if (email1.IndexOf('@') != -1) + { + string _sub = email1.Substring(email1.IndexOf('@') + 1); + // both are a particular mailbox + if (email2.IndexOf('@') != -1) + { + if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(email1, email2)) + { + union.Add(email1); + } + else + { + union.Add(email1); + union.Add(email2); + } + } + // email2 specifies a domain + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(email2, ".")) + { + if (WithinDomain(_sub, email2)) + { + union.Add(email2); + } + else + { + union.Add(email1); + union.Add(email2); + } + } + // email2 specifies a particular host + else + { + if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(_sub, email2)) + { + union.Add(email2); + } + else + { + union.Add(email1); + union.Add(email2); + + } + } + } + // email1 specifies a domain + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(email1, ".")) + { + if (email2.IndexOf('@') != -1) + { + string _sub = email2.Substring(email1.IndexOf('@') + 1); + if (WithinDomain(_sub, email1)) + { + union.Add(email1); + } + else + { + union.Add(email1); + union.Add(email2); + } + } + // email2 specifies a domain + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(email2, ".")) + { + if (WithinDomain(email1, email2) || Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(email1, email2)) + { + union.Add(email2); + } + else if (WithinDomain(email2, email1)) + { + union.Add(email1); + } + else + { + union.Add(email1); + union.Add(email2); + } + } + else + { + if (WithinDomain(email2, email1)) + { + union.Add(email1); + } + else + { + union.Add(email1); + union.Add(email2); + } + } + } + // email specifies a host + else + { + if (email2.IndexOf('@') != -1) + { + string _sub = email2.Substring(email1.IndexOf('@') + 1); + if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(_sub, email1)) + { + union.Add(email1); + } + else + { + union.Add(email1); + union.Add(email2); + } + } + // email2 specifies a domain + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(email2, ".")) + { + if (WithinDomain(email1, email2)) + { + union.Add(email2); + } + else + { + union.Add(email1); + union.Add(email2); + } + } + // email2 specifies a particular host + else + { + if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(email1, email2)) + { + union.Add(email1); + } + else + { + union.Add(email1); + union.Add(email2); + } + } + } + } + + private ISet IntersectDns(ISet permitted, ISet dnss) + { + var intersect = new HashSet(); + foreach (GeneralSubtree subtree in dnss) + { + string dns = ExtractNameAsString(subtree.Base); + if (permitted == null) + { + if (dns != null) + { + intersect.Add(dns); + } + } + else + { + foreach (string _permitted in permitted) + { + if (WithinDomain(_permitted, dns)) + { + intersect.Add(_permitted); + } + else if (WithinDomain(dns, _permitted)) + { + intersect.Add(dns); + } + } + } + } + return intersect; + } + + private ISet UnionDns(ISet excluded, string dns) + { + if (excluded.Count < 1) + { + if (dns == null) + return excluded; + + excluded.Add(dns); + return excluded; + } + + var union = new HashSet(); + foreach (string _excluded in excluded) + { + if (WithinDomain(_excluded, dns)) + { + union.Add(dns); + } + else if (WithinDomain(dns, _excluded)) + { + union.Add(_excluded); + } + else + { + union.Add(_excluded); + union.Add(dns); + } + } + return union; + } + + /** + * The most restricting part from email1 and + * email2 is added to the intersection intersect. + * + * @param email1 Email address constraint 1. + * @param email2 Email address constraint 2. + * @param intersect The intersection. + */ + private void IntersectEmail(string email1, string email2, ISet intersect) + { + // email1 is a particular address + if (email1.IndexOf('@') != -1) + { + string _sub = email1.Substring(email1.IndexOf('@') + 1); + // both are a particular mailbox + if (email2.IndexOf('@') != -1) + { + if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(email1, email2)) + { + intersect.Add(email1); + } + } + // email2 specifies a domain + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(email2, ".")) + { + if (WithinDomain(_sub, email2)) + { + intersect.Add(email1); + } + } + // email2 specifies a particular host + else + { + if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(_sub, email2)) + { + intersect.Add(email1); + } + } + } + // email specifies a domain + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(email1, ".")) + { + if (email2.IndexOf('@') != -1) + { + string _sub = email2.Substring(email1.IndexOf('@') + 1); + if (WithinDomain(_sub, email1)) + { + intersect.Add(email2); + } + } + // email2 specifies a domain + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(email2, ".")) + { + if (WithinDomain(email1, email2) || Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(email1, email2)) + { + intersect.Add(email1); + } + else if (WithinDomain(email2, email1)) + { + intersect.Add(email2); + } + } + else + { + if (WithinDomain(email2, email1)) + { + intersect.Add(email2); + } + } + } + // email1 specifies a host + else + { + if (email2.IndexOf('@') != -1) + { + string _sub = email2.Substring(email2.IndexOf('@') + 1); + if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(_sub, email1)) + { + intersect.Add(email2); + } + } + // email2 specifies a domain + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(email2, ".")) + { + if (WithinDomain(email1, email2)) + { + intersect.Add(email1); + } + } + // email2 specifies a particular host + else + { + if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(email1, email2)) + { + intersect.Add(email1); + } + } + } + } + + private ISet IntersectUri(ISet permitted, ISet uris) + { + var intersect = new HashSet(); + foreach (GeneralSubtree subtree in uris) + { + string uri = ExtractNameAsString(subtree.Base); + if (permitted == null) + { + if (uri != null) + { + intersect.Add(uri); + } + } + else + { + foreach (string _permitted in permitted) + { + IntersectUri(_permitted, uri, intersect); + } + } + } + return intersect; + } + + private ISet UnionUri(ISet excluded, string uri) + { + if (excluded.Count < 1) + { + if (uri == null) + return excluded; + + excluded.Add(uri); + return excluded; + } + + var union = new HashSet(); + foreach (string _excluded in excluded) + { + UnionUri(_excluded, uri, union); + } + return union; + } + + private void IntersectUri(string email1, string email2, ISet intersect) + { + // email1 is a particular address + if (email1.IndexOf('@') != -1) + { + string _sub = email1.Substring(email1.IndexOf('@') + 1); + // both are a particular mailbox + if (email2.IndexOf('@') != -1) + { + if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(email1, email2)) + { + intersect.Add(email1); + } + } + // email2 specifies a domain + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(email2, ".")) + { + if (WithinDomain(_sub, email2)) + { + intersect.Add(email1); + } + } + // email2 specifies a particular host + else + { + if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(_sub, email2)) + { + intersect.Add(email1); + } + } + } + // email specifies a domain + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(email1, ".")) + { + if (email2.IndexOf('@') != -1) + { + string _sub = email2.Substring(email1.IndexOf('@') + 1); + if (WithinDomain(_sub, email1)) + { + intersect.Add(email2); + } + } + // email2 specifies a domain + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(email2, ".")) + { + if (WithinDomain(email1, email2) || Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(email1, email2)) + { + intersect.Add(email1); + } + else if (WithinDomain(email2, email1)) + { + intersect.Add(email2); + } + } + else + { + if (WithinDomain(email2, email1)) + { + intersect.Add(email2); + } + } + } + // email1 specifies a host + else + { + if (email2.IndexOf('@') != -1) + { + string _sub = email2.Substring(email2.IndexOf('@') + 1); + if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(_sub, email1)) + { + intersect.Add(email2); + } + } + // email2 specifies a domain + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(email2, ".")) + { + if (WithinDomain(email1, email2)) + { + intersect.Add(email1); + } + } + // email2 specifies a particular host + else + { + if (Org.BouncyCastle.Utilities.Platform.EqualsIgnoreCase(email1, email2)) + { + intersect.Add(email1); + } + } + } + } + + private static string ExtractHostFromURL(string url) + { + // see RFC 1738 + // remove ':' after protocol, e.g. http: + string sub = url.Substring(url.IndexOf(':') + 1); + // extract host from Common Internet Scheme Syntax, e.g. http:// + int idxOfSlashes = Org.BouncyCastle.Utilities.Platform.IndexOf(sub, "//"); + if (idxOfSlashes != -1) + { + sub = sub.Substring(idxOfSlashes + 2); + } + // first remove port, e.g. http://test.com:21 + if (sub.LastIndexOf(':') != -1) + { + sub = sub.Substring(0, sub.LastIndexOf(':')); + } + // remove user and password, e.g. http://john:password@test.com + sub = sub.Substring(sub.IndexOf(':') + 1); + sub = sub.Substring(sub.IndexOf('@') + 1); + // remove local parts, e.g. http://test.com/bla + if (sub.IndexOf('/') != -1) + { + sub = sub.Substring(0, sub.IndexOf('/')); + } + return sub; + } + + /** + * Checks if the given GeneralName is in the permitted ISet. + * + * @param name The GeneralName + * @throws PkixNameConstraintValidatorException + * If the name + */ + public void checkPermitted(GeneralName name) + //throws PkixNameConstraintValidatorException + { + switch (name.TagNo) + { + case GeneralName.OtherName: + CheckPermittedOtherName(permittedSubtreesOtherName, OtherName.GetInstance(name.Name)); + break; + case GeneralName.Rfc822Name: + CheckPermittedEmail(permittedSubtreesEmail, ExtractNameAsString(name)); + break; + case GeneralName.DnsName: + CheckPermittedDns(permittedSubtreesDns, ExtractNameAsString(name)); + break; + case GeneralName.DirectoryName: + CheckPermittedDN(Asn1Sequence.GetInstance(name.Name.ToAsn1Object())); + break; + case GeneralName.UniformResourceIdentifier: + CheckPermittedUri(permittedSubtreesUri, ExtractNameAsString(name)); + break; + case GeneralName.IPAddress: + CheckPermittedIP(permittedSubtreesIP, Asn1OctetString.GetInstance(name.Name).GetOctets()); + break; + } + } + + /** + * Check if the given GeneralName is contained in the excluded ISet. + * + * @param name The GeneralName. + * @throws PkixNameConstraintValidatorException + * If the name is + * excluded. + */ + public void checkExcluded(GeneralName name) + //throws PkixNameConstraintValidatorException + { + switch (name.TagNo) + { + case GeneralName.OtherName: + CheckExcludedOtherName(excludedSubtreesOtherName, OtherName.GetInstance(name.Name)); + break; + case GeneralName.Rfc822Name: + CheckExcludedEmail(excludedSubtreesEmail, ExtractNameAsString(name)); + break; + case GeneralName.DnsName: + CheckExcludedDns(excludedSubtreesDns, ExtractNameAsString(name)); + break; + case GeneralName.DirectoryName: + CheckExcludedDN(Asn1Sequence.GetInstance(name.Name.ToAsn1Object())); + break; + case GeneralName.UniformResourceIdentifier: + CheckExcludedUri(excludedSubtreesUri, ExtractNameAsString(name)); + break; + case GeneralName.IPAddress: + CheckExcludedIP(excludedSubtreesIP, Asn1OctetString.GetInstance(name.Name).GetOctets()); + break; + } + } + + /** + * Updates the permitted ISet of these name constraints with the intersection + * with the given subtree. + * + * @param permitted The permitted subtrees + */ + + public void IntersectPermittedSubtree(Asn1Sequence permitted) + { + var subtreesMap = new Dictionary>(); + + // group in ISets in a map ordered by tag no. + foreach (var element in permitted) + { + GeneralSubtree subtree = GeneralSubtree.GetInstance(element); + + int tagNo = subtree.Base.TagNo; + + ISet subtrees; + if (!subtreesMap.TryGetValue(tagNo, out subtrees)) + { + subtrees = new HashSet(); + subtreesMap[tagNo] = subtrees; + } + + subtrees.Add(subtree); + } + + foreach (var entry in subtreesMap) + { + // go through all subtree groups + switch (entry.Key) + { + case GeneralName.OtherName: + permittedSubtreesOtherName = IntersectOtherName(permittedSubtreesOtherName, entry.Value); + break; + case GeneralName.Rfc822Name: + permittedSubtreesEmail = IntersectEmail(permittedSubtreesEmail, entry.Value); + break; + case GeneralName.DnsName: + permittedSubtreesDns = IntersectDns(permittedSubtreesDns, entry.Value); + break; + case GeneralName.DirectoryName: + permittedSubtreesDN = IntersectDN(permittedSubtreesDN, entry.Value); + break; + case GeneralName.UniformResourceIdentifier: + permittedSubtreesUri = IntersectUri(permittedSubtreesUri, entry.Value); + break; + case GeneralName.IPAddress: + permittedSubtreesIP = IntersectIP(permittedSubtreesIP, entry.Value); + break; + } + } + } + + private string ExtractNameAsString(GeneralName name) + { + return DerIA5String.GetInstance(name.Name).GetString(); + } + + public void IntersectEmptyPermittedSubtree(int nameType) + { + switch (nameType) + { + case GeneralName.OtherName: + permittedSubtreesOtherName = new HashSet(); + break; + case GeneralName.Rfc822Name: + permittedSubtreesEmail = new HashSet(); + break; + case GeneralName.DnsName: + permittedSubtreesDns = new HashSet(); + break; + case GeneralName.DirectoryName: + permittedSubtreesDN = new HashSet(); + break; + case GeneralName.UniformResourceIdentifier: + permittedSubtreesUri = new HashSet(); + break; + case GeneralName.IPAddress: + permittedSubtreesIP = new HashSet(); + break; + } + } + + /** + * Adds a subtree to the excluded ISet of these name constraints. + * + * @param subtree A subtree with an excluded GeneralName. + */ + public void AddExcludedSubtree(GeneralSubtree subtree) + { + GeneralName subTreeBase = subtree.Base; + + switch (subTreeBase.TagNo) + { + case GeneralName.OtherName: + excludedSubtreesOtherName = UnionOtherName(excludedSubtreesOtherName, + OtherName.GetInstance(subTreeBase.Name)); + break; + case GeneralName.Rfc822Name: + excludedSubtreesEmail = UnionEmail(excludedSubtreesEmail, + ExtractNameAsString(subTreeBase)); + break; + case GeneralName.DnsName: + excludedSubtreesDns = UnionDns(excludedSubtreesDns, + ExtractNameAsString(subTreeBase)); + break; + case GeneralName.DirectoryName: + excludedSubtreesDN = UnionDN(excludedSubtreesDN, + (Asn1Sequence)subTreeBase.Name.ToAsn1Object()); + break; + case GeneralName.UniformResourceIdentifier: + excludedSubtreesUri = UnionUri(excludedSubtreesUri, + ExtractNameAsString(subTreeBase)); + break; + case GeneralName.IPAddress: + excludedSubtreesIP = UnionIP(excludedSubtreesIP, + Asn1OctetString.GetInstance(subTreeBase.Name).GetOctets()); + break; + } + } + + /** + * Returns the maximum IP address. + * + * @param ip1 The first IP address. + * @param ip2 The second IP address. + * @return The maximum IP address. + */ + private static byte[] Max(byte[] ip1, byte[] ip2) + { + for (int i = 0; i < ip1.Length; i++) + { + if ((ip1[i] & 0xFFFF) > (ip2[i] & 0xFFFF)) + { + return ip1; + } + } + return ip2; + } + + /** + * Returns the minimum IP address. + * + * @param ip1 The first IP address. + * @param ip2 The second IP address. + * @return The minimum IP address. + */ + private static byte[] Min(byte[] ip1, byte[] ip2) + { + for (int i = 0; i < ip1.Length; i++) + { + if ((ip1[i] & 0xFFFF) < (ip2[i] & 0xFFFF)) + { + return ip1; + } + } + return ip2; + } + + /** + * Compares IP address ip1 with ip2. If ip1 + * is equal to ip2 0 is returned. If ip1 is bigger 1 is returned, -1 + * otherwise. + * + * @param ip1 The first IP address. + * @param ip2 The second IP address. + * @return 0 if ip1 is equal to ip2, 1 if ip1 is bigger, -1 otherwise. + */ + private static int CompareTo(byte[] ip1, byte[] ip2) + { + if (BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Arrays.AreEqual(ip1, ip2)) + { + return 0; + } + if (BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Arrays.AreEqual(Max(ip1, ip2), ip1)) + { + return 1; + } + return -1; + } + + /** + * Returns the logical OR of the IP addresses ip1 and + * ip2. + * + * @param ip1 The first IP address. + * @param ip2 The second IP address. + * @return The OR of ip1 and ip2. + */ + private static byte[] Or(byte[] ip1, byte[] ip2) + { + byte[] temp = new byte[ip1.Length]; + for (int i = 0; i < ip1.Length; i++) + { + temp[i] = (byte)(ip1[i] | ip2[i]); + } + return temp; + } + + public override int GetHashCode() + { + return HashCollection(excludedSubtreesDN) + + HashCollection(excludedSubtreesDns) + + HashCollection(excludedSubtreesEmail) + + HashCollection(excludedSubtreesIP) + + HashCollection(excludedSubtreesUri) + + HashCollection(excludedSubtreesOtherName) + + HashCollection(permittedSubtreesDN) + + HashCollection(permittedSubtreesDns) + + HashCollection(permittedSubtreesEmail) + + HashCollection(permittedSubtreesIP) + + HashCollection(permittedSubtreesUri) + + HashCollection(permittedSubtreesOtherName); + } + + private int HashCollection(IEnumerable c) + { + int hash = 0; + if (c != null) + { + foreach (byte[] o in c) + { + hash += Arrays.GetHashCode(o); + } + } + return hash; + } + + private int HashCollection(IEnumerable c) + { + int hash = 0; + if (c != null) + { + foreach (object o in c) + { + hash += o.GetHashCode(); + } + } + return hash; + } + + public override bool Equals(object o) + { + if (!(o is PkixNameConstraintValidator that)) + return false; + + return AreEqualSets(that.excludedSubtreesDN, excludedSubtreesDN) + && AreEqualSets(that.excludedSubtreesDns, excludedSubtreesDns) + && AreEqualSets(that.excludedSubtreesEmail, excludedSubtreesEmail) + && AreEqualSets(that.excludedSubtreesIP, excludedSubtreesIP) + && AreEqualSets(that.excludedSubtreesUri, excludedSubtreesUri) + && AreEqualSets(that.excludedSubtreesOtherName, excludedSubtreesOtherName) + && AreEqualSets(that.permittedSubtreesDN, permittedSubtreesDN) + && AreEqualSets(that.permittedSubtreesDns, permittedSubtreesDns) + && AreEqualSets(that.permittedSubtreesEmail, permittedSubtreesEmail) + && AreEqualSets(that.permittedSubtreesIP, permittedSubtreesIP) + && AreEqualSets(that.permittedSubtreesUri, permittedSubtreesUri) + && AreEqualSets(that.permittedSubtreesOtherName, permittedSubtreesOtherName); + } + + private bool AreEqualSets(ISet set1, ISet set2) + { + if (set1 == set2) + return true; + if (set1 == null || set2 == null || set1.Count != set2.Count) + return false; + + foreach (byte[] a in set1) + { + bool found = false; + foreach (byte[] b in set2) + { + if (Arrays.AreEqual(a, b)) + { + found = true; + break; + } + } + + if (!found) + return false; + } + return true; + } + + private bool AreEqualSets(ISet set1, ISet set2) + { + if (set1 == set2) + return true; + if (set1 == null || set2 == null || set1.Count != set2.Count) + return false; + + foreach (T a in set1) + { + if (!set2.Contains(a)) + return false; + } + return true; + } + + /** + * Stringifies an IPv4 or v6 address with subnet mask. + * + * @param ip The IP with subnet mask. + * @return The stringified IP address. + */ + private string StringifyIP(byte[] ip) + { + string temp = ""; + for (int i = 0; i < ip.Length / 2; i++) + { + temp += (ip[i] & 0x00FF) + "."; + } + temp = temp.Substring(0, temp.Length - 1); + temp += "/"; + for (int i = ip.Length / 2; i < ip.Length; i++) + { + temp += (ip[i] & 0x00FF) + "."; + } + temp = temp.Substring(0, temp.Length - 1); + return temp; + } + + private string StringifyIPCollection(ISet ips) + { + string temp = ""; + temp += "["; + foreach (byte[] ip in ips) + { + temp += StringifyIP(ip) + ","; + } + if (temp.Length > 1) + { + temp = temp.Substring(0, temp.Length - 1); + } + temp += "]"; + return temp; + } + + private string StringifyOtherNameCollection(ISet otherNames) + { + StringBuilder sb = new StringBuilder('['); + foreach (OtherName name in otherNames) + { + if (sb.Length > 1) + { + sb.Append(','); + } + sb.Append(name.TypeID.Id); + sb.Append(':'); + sb.Append(Hex.ToHexString(name.Value.GetEncoded())); + } + sb.Append(']'); + return sb.ToString(); + } + + public override string ToString() + { + StringBuilder sb = new StringBuilder("permitted:\n"); + if (permittedSubtreesDN != null) + { + Append(sb, "DN", permittedSubtreesDN); + } + if (permittedSubtreesDns != null) + { + Append(sb, "DNS", permittedSubtreesDns); + } + if (permittedSubtreesEmail != null) + { + Append(sb, "Email", permittedSubtreesEmail); + } + if (permittedSubtreesUri != null) + { + Append(sb, "URI", permittedSubtreesUri); + } + if (permittedSubtreesIP != null) + { + Append(sb, "IP", StringifyIPCollection(permittedSubtreesIP)); + } + if (permittedSubtreesOtherName != null) + { + Append(sb, "OtherName", StringifyOtherNameCollection(permittedSubtreesOtherName)); + } + sb.Append("excluded:\n"); + if (excludedSubtreesDN.Count > 0) + { + Append(sb, "DN", excludedSubtreesDN); + } + if (excludedSubtreesDns.Count > 0) + { + Append(sb, "DNS", excludedSubtreesDns); + } + if (excludedSubtreesEmail.Count > 0) + { + Append(sb, "Email", excludedSubtreesEmail); + } + if (excludedSubtreesUri.Count > 0) + { + Append(sb, "URI", excludedSubtreesUri); + } + if (excludedSubtreesIP.Count > 0) + { + Append(sb, "IP", StringifyIPCollection(excludedSubtreesIP)); + } + if (excludedSubtreesOtherName.Count > 0) + { + Append(sb, "OtherName", StringifyOtherNameCollection(excludedSubtreesOtherName)); + } + return sb.ToString(); + } + + private static void Append(StringBuilder sb, string name, object value) + { + sb.Append(name); + sb.AppendLine(":"); + sb.Append(value); + sb.AppendLine(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixNameConstraintValidator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixNameConstraintValidator.cs.meta new file mode 100644 index 000000000..eb5e5c36c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixNameConstraintValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f526512b4e00a18408980528de75bc05 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixNameConstraintValidatorException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixNameConstraintValidatorException.cs new file mode 100644 index 000000000..822aff351 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixNameConstraintValidatorException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + [Serializable] + public class PkixNameConstraintValidatorException + : Exception + { + public PkixNameConstraintValidatorException() + : base() + { + } + + public PkixNameConstraintValidatorException(string message) + : base(message) + { + } + + public PkixNameConstraintValidatorException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected PkixNameConstraintValidatorException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixNameConstraintValidatorException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixNameConstraintValidatorException.cs.meta new file mode 100644 index 000000000..d0dce51b3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixNameConstraintValidatorException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7731ec37d612ebe4998773dbfb370c49 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixParameters.cs new file mode 100644 index 000000000..5956da2a6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixParameters.cs @@ -0,0 +1,794 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + /// + /// Summary description for PkixParameters. + /// + public class PkixParameters + { + /** + * This is the default PKIX validity model. Actually there are two variants + * of this: The PKIX model and the modified PKIX model. The PKIX model + * verifies that all involved certificates must have been valid at the + * current time. The modified PKIX model verifies that all involved + * certificates were valid at the signing time. Both are indirectly choosen + * with the {@link PKIXParameters#setDate(java.util.Date)} method, so this + * methods sets the Date when all certificates must have been + * valid. + */ + public const int PkixValidityModel = 0; + + /** + * This model uses the following validity model. Each certificate must have + * been valid at the moment where is was used. That means the end + * certificate must have been valid at the time the signature was done. The + * CA certificate which signed the end certificate must have been valid, + * when the end certificate was signed. The CA (or Root CA) certificate must + * have been valid, when the CA certificate was signed and so on. So the + * {@link PKIXParameters#setDate(java.util.Date)} method sets the time, when + * the end certificate must have been valid.

    It is used e.g. + * in the German signature law. + */ + public const int ChainValidityModel = 1; + + private HashSet trustAnchors; + private DateTime? date; + private List m_checkers; + private bool revocationEnabled = true; + private HashSet initialPolicies; + //private bool checkOnlyEECertificateCrl = false; + private bool explicitPolicyRequired = false; + private bool anyPolicyInhibited = false; + private bool policyMappingInhibited = false; + private bool policyQualifiersRejected = true; + + private List> m_storesAttrCert; + private List> m_storesCert; + private List> m_storesCrl; + + private ISelector m_targetConstraintsAttrCert; + private ISelector m_targetConstraintsCert; + + private bool additionalLocationsEnabled; + private ISet trustedACIssuers; + private ISet necessaryACAttributes; + private ISet prohibitedACAttributes; + private ISet attrCertCheckers; + private int validityModel = PkixValidityModel; + private bool useDeltas = false; + + /** + * Creates an instance of PKIXParameters with the specified Set of + * most-trusted CAs. Each element of the set is a TrustAnchor.
    + *
    + * Note that the Set is copied to protect against subsequent modifications. + * + * @param trustAnchors + * a Set of TrustAnchors + * + * @exception InvalidAlgorithmParameterException + * if the specified Set is empty + * (trustAnchors.isEmpty() == true) + * @exception NullPointerException + * if the specified Set is null + * @exception ClassCastException + * if any of the elements in the Set are not of type + * java.security.cert.TrustAnchor + */ + public PkixParameters(ISet trustAnchors) + { + SetTrustAnchors(trustAnchors); + + this.initialPolicies = new HashSet(); + this.m_checkers = new List(); + this.m_storesAttrCert = new List>(); + this.m_storesCert = new List>(); + this.m_storesCrl = new List>(); + this.trustedACIssuers = new HashSet(); + this.necessaryACAttributes = new HashSet(); + this.prohibitedACAttributes = new HashSet(); + this.attrCertCheckers = new HashSet(); + } + +// // TODO implement for other keystores (see Java build)? +// /** +// * Creates an instance of PKIXParameters that +// * populates the set of most-trusted CAs from the trusted +// * certificate entries contained in the specified KeyStore. +// * Only keystore entries that contain trusted X509Certificates +// * are considered; all other certificate types are ignored. +// * +// * @param keystore a KeyStore from which the set of +// * most-trusted CAs will be populated +// * @throws KeyStoreException if the keystore has not been initialized +// * @throws InvalidAlgorithmParameterException if the keystore does +// * not contain at least one trusted certificate entry +// * @throws NullPointerException if the keystore is null +// */ +// public PkixParameters( +// Pkcs12Store keystore) +//// throws KeyStoreException, InvalidAlgorithmParameterException +// { +// if (keystore == null) +// throw new ArgumentNullException("keystore"); +// ISet trustAnchors = new HashSet(); +// foreach (string alias in keystore.Aliases) +// { +// if (keystore.IsCertificateEntry(alias)) +// { +// X509CertificateEntry x509Entry = keystore.GetCertificate(alias); +// trustAnchors.Add(new TrustAnchor(x509Entry.Certificate, null)); +// } +// } +// SetTrustAnchors(trustAnchors); +// +// this.initialPolicies = new HashSet(); +// this.certPathCheckers = new ArrayList(); +// this.stores = new ArrayList(); +// this.additionalStores = new ArrayList(); +// this.trustedACIssuers = new HashSet(); +// this.necessaryACAttributes = new HashSet(); +// this.prohibitedACAttributes = new HashSet(); +// this.attrCertCheckers = new HashSet(); +// } + + public virtual bool IsRevocationEnabled + { + get { return revocationEnabled; } + set { revocationEnabled = value; } + } + + public virtual bool IsExplicitPolicyRequired + { + get { return explicitPolicyRequired; } + set { this.explicitPolicyRequired = value; } + } + + public virtual bool IsAnyPolicyInhibited + { + get { return anyPolicyInhibited; } + set { this.anyPolicyInhibited = value; } + } + + public virtual bool IsPolicyMappingInhibited + { + get { return policyMappingInhibited; } + set { this.policyMappingInhibited = value; } + } + + public virtual bool IsPolicyQualifiersRejected + { + get { return policyQualifiersRejected; } + set { this.policyQualifiersRejected = value; } + } + + //public bool IsCheckOnlyEECertificateCrl + //{ + // get { return this.checkOnlyEECertificateCrl; } + // set { this.checkOnlyEECertificateCrl = value; } + //} + + public virtual DateTime? Date + { + get { return this.date; } + set { this.date = value; } + } + + // Returns a Set of the most-trusted CAs. + public virtual ISet GetTrustAnchors() + { + return new HashSet(this.trustAnchors); + } + + // Sets the set of most-trusted CAs. + // Set is copied to protect against subsequent modifications. + public virtual void SetTrustAnchors(ISet tas) + { + if (tas == null) + throw new ArgumentNullException("value"); + if (tas.Count < 1) + throw new ArgumentException("non-empty set required", "value"); + + // Explicit copy to enforce type-safety + this.trustAnchors = new HashSet(); + foreach (TrustAnchor ta in tas) + { + if (ta != null) + { + trustAnchors.Add(ta); + } + } + } + + /** + * Returns the required constraints on the target certificate or attribute + * certificate. The constraints are returned as an instance of + * IX509Selector. If null, no constraints are + * defined. + * + *

    + * The target certificate in a PKIX path may be a certificate or an + * attribute certificate. + *

    + * Note that the IX509Selector returned is cloned to protect + * against subsequent modifications. + *

    + * @return a IX509Selector specifying the constraints on the + * target certificate or attribute certificate (or null) + * @see #setTargetConstraints + * @see X509CertStoreSelector + * @see X509AttributeCertStoreSelector + */ + public virtual ISelector GetTargetConstraintsAttrCert() + { + return (ISelector)m_targetConstraintsAttrCert?.Clone(); + } + + /** + * Sets the required constraints on the target certificate or attribute + * certificate. The constraints are specified as an instance of + * IX509Selector. If null, no constraints are + * defined. + *

    + * The target certificate in a PKIX path may be a certificate or an + * attribute certificate. + *

    + * Note that the IX509Selector specified is cloned to protect + * against subsequent modifications. + *

    + * + * @param selector a IX509Selector specifying the constraints on + * the target certificate or attribute certificate (or + * null) + * @see #getTargetConstraints + * @see X509CertStoreSelector + * @see X509AttributeCertStoreSelector + */ + public virtual void SetTargetConstraintsAttrCert(ISelector targetConstraintsAttrCert) + { + this.m_targetConstraintsAttrCert = (ISelector)targetConstraintsAttrCert?.Clone(); + } + + /** + * Returns the required constraints on the target certificate. The + * constraints are returned as an instance of CertSelector. If + * null, no constraints are defined.
    + *
    + * Note that the CertSelector returned is cloned to protect against + * subsequent modifications. + * + * @return a CertSelector specifying the constraints on the target + * certificate (or null) + * + * @see #setTargetCertConstraints(CertSelector) + */ + public virtual ISelector GetTargetConstraintsCert() + { + return (ISelector)m_targetConstraintsCert?.Clone(); + } + + /** + * Sets the required constraints on the target certificate. The constraints + * are specified as an instance of CertSelector. If null, no constraints are + * defined.
    + *
    + * Note that the CertSelector specified is cloned to protect against + * subsequent modifications. + * + * @param selector + * a CertSelector specifying the constraints on the target + * certificate (or null) + * + * @see #getTargetCertConstraints() + */ + public virtual void SetTargetConstraintsCert(ISelector targetConstraintsCert) + { + m_targetConstraintsCert = (ISelector)targetConstraintsCert?.Clone(); + } + + /** + * Returns an immutable Set of initial policy identifiers (OID strings), + * indicating that any one of these policies would be acceptable to the + * certificate user for the purposes of certification path processing. The + * default return value is an empty Set, which is + * interpreted as meaning that any policy would be acceptable. + * + * @return an immutable Set of initial policy OIDs in String + * format, or an empty Set (implying any policy is + * acceptable). Never returns null. + * + * @see #setInitialPolicies(java.util.Set) + */ + public virtual ISet GetInitialPolicies() + { + // TODO Can it really be null? + if (initialPolicies == null) + return new HashSet(); + + return new HashSet(initialPolicies); + } + + /** + * Sets the Set of initial policy identifiers (OID strings), + * indicating that any one of these policies would be acceptable to the + * certificate user for the purposes of certification path processing. By + * default, any policy is acceptable (i.e. all policies), so a user that + * wants to allow any policy as acceptable does not need to call this + * method, or can call it with an empty Set (or + * null).
    + *
    + * Note that the Set is copied to protect against subsequent modifications.
    + *
    + * + * @param initialPolicies + * a Set of initial policy OIDs in String format (or + * null) + * + * @exception ClassCastException + * if any of the elements in the set are not of type String + * + * @see #getInitialPolicies() + */ + public virtual void SetInitialPolicies(ISet initialPolicies) + { + this.initialPolicies = new HashSet(); + if (initialPolicies != null) + { + foreach (string obj in initialPolicies) + { + if (obj != null) + { + this.initialPolicies.Add(obj); + } + } + } + } + + /** + * Sets a List of additional certification path checkers. If + * the specified List contains an object that is not a PKIXCertPathChecker, + * it is ignored.
    + *
    + * Each PKIXCertPathChecker specified implements additional + * checks on a certificate. Typically, these are checks to process and + * verify private extensions contained in certificates. Each + * PKIXCertPathChecker should be instantiated with any + * initialization parameters needed to execute the check.
    + *
    + * This method allows sophisticated applications to extend a PKIX + * CertPathValidator or CertPathBuilder. Each + * of the specified PKIXCertPathCheckers will be called, in turn, by a PKIX + * CertPathValidator or CertPathBuilder for + * each certificate processed or validated.
    + *
    + * Regardless of whether these additional PKIXCertPathCheckers are set, a + * PKIX CertPathValidator or CertPathBuilder + * must perform all of the required PKIX checks on each certificate. The one + * exception to this rule is if the RevocationEnabled flag is set to false + * (see the {@link #setRevocationEnabled(boolean) setRevocationEnabled} + * method).
    + *
    + * Note that the List supplied here is copied and each PKIXCertPathChecker + * in the list is cloned to protect against subsequent modifications. + * + * @param checkers + * a List of PKIXCertPathCheckers. May be null, in which case no + * additional checkers will be used. + * @exception ClassCastException + * if any of the elements in the list are not of type + * java.security.cert.PKIXCertPathChecker + * @see #getCertPathCheckers() + */ + public virtual void SetCertPathCheckers(IList checkers) + { + m_checkers = new List(); + + if (checkers != null) + { + foreach (var checker in checkers) + { + m_checkers.Add((PkixCertPathChecker)checker.Clone()); + } + } + } + + /** + * Returns the List of certification path checkers. Each PKIXCertPathChecker + * in the returned IList is cloned to protect against subsequent modifications. + * + * @return an immutable List of PKIXCertPathCheckers (may be empty, but not + * null) + * + * @see #setCertPathCheckers(java.util.List) + */ + public virtual IList GetCertPathCheckers() + { + var result = new List(m_checkers.Count); + foreach (var checker in m_checkers) + { + result.Add((PkixCertPathChecker)checker.Clone()); + } + return result; + } + + /** + * Adds a PKIXCertPathChecker to the list of certification + * path checkers. See the {@link #setCertPathCheckers setCertPathCheckers} + * method for more details. + *

    + * Note that the PKIXCertPathChecker is cloned to protect + * against subsequent modifications.

    + * + * @param checker a PKIXCertPathChecker to add to the list of + * checks. If null, the checker is ignored (not added to list). + */ + public virtual void AddCertPathChecker(PkixCertPathChecker checker) + { + if (checker != null) + { + m_checkers.Add((PkixCertPathChecker)checker.Clone()); + } + } + + public virtual object Clone() + { + // FIXME Check this whole method against the Java implementation! + + PkixParameters parameters = new PkixParameters(GetTrustAnchors()); + parameters.SetParams(this); + return parameters; + + +// PkixParameters obj = new PkixParameters(new HashSet()); +//// (PkixParameters) this.MemberwiseClone(); +// obj.x509Stores = new ArrayList(x509Stores); +// obj.certPathCheckers = new ArrayList(certPathCheckers); +// +// //Iterator iter = certPathCheckers.iterator(); +// //obj.certPathCheckers = new ArrayList(); +// //while (iter.hasNext()) +// //{ +// // obj.certPathCheckers.add(((PKIXCertPathChecker)iter.next()) +// // .clone()); +// //} +// //if (initialPolicies != null) +// //{ +// // obj.initialPolicies = new HashSet(initialPolicies); +// //} +//// if (trustAnchors != null) +//// { +//// obj.trustAnchors = new HashSet(trustAnchors); +//// } +//// if (certSelector != null) +//// { +//// obj.certSelector = (X509CertStoreSelector) certSelector.Clone(); +//// } +// return obj; + } + + /** + * Method to support Clone() under J2ME. + * super.Clone() does not exist and fields are not copied. + * + * @param params Parameters to set. If this are + * ExtendedPkixParameters they are copied to. + */ + protected virtual void SetParams(PkixParameters parameters) + { + Date = parameters.Date; + SetCertPathCheckers(parameters.GetCertPathCheckers()); + IsAnyPolicyInhibited = parameters.IsAnyPolicyInhibited; + IsExplicitPolicyRequired = parameters.IsExplicitPolicyRequired; + IsPolicyMappingInhibited = parameters.IsPolicyMappingInhibited; + IsRevocationEnabled = parameters.IsRevocationEnabled; + SetInitialPolicies(parameters.GetInitialPolicies()); + IsPolicyQualifiersRejected = parameters.IsPolicyQualifiersRejected; + SetTrustAnchors(parameters.GetTrustAnchors()); + + m_storesAttrCert = new List>(parameters.m_storesAttrCert); + m_storesCert = new List>(parameters.m_storesCert); + m_storesCrl = new List>(parameters.m_storesCrl); + + SetTargetConstraintsAttrCert(parameters.GetTargetConstraintsAttrCert()); + SetTargetConstraintsCert(parameters.GetTargetConstraintsCert()); + + validityModel = parameters.validityModel; + useDeltas = parameters.useDeltas; + additionalLocationsEnabled = parameters.additionalLocationsEnabled; + trustedACIssuers = new HashSet(parameters.trustedACIssuers); + prohibitedACAttributes = new HashSet(parameters.prohibitedACAttributes); + necessaryACAttributes = new HashSet(parameters.necessaryACAttributes); + attrCertCheckers = new HashSet(parameters.attrCertCheckers); + } + + /** + * Whether delta CRLs should be used for checking the revocation status. + * Defaults to false. + */ + public virtual bool IsUseDeltasEnabled + { + get { return useDeltas; } + set { useDeltas = value; } + } + + /** + * The validity model. + * @see #CHAIN_VALIDITY_MODEL + * @see #PKIX_VALIDITY_MODEL + */ + public virtual int ValidityModel + { + get { return validityModel; } + set { validityModel = value; } + } + + public virtual IList> GetStoresAttrCert() + { + return new List>(m_storesAttrCert); + } + + public virtual IList> GetStoresCert() + { + return new List>(m_storesCert); + } + + public virtual IList> GetStoresCrl() + { + return new List>(m_storesCrl); + } + + public virtual void SetAttrStoresCert(IList> storesAttrCert) + { + if (storesAttrCert == null) + { + m_storesAttrCert = new List>(); + } + else + { + m_storesAttrCert = new List>(storesAttrCert); + } + } + + public virtual void SetStoresCert(IList> storesCert) + { + if (storesCert == null) + { + m_storesCert = new List>(); + } + else + { + m_storesCert = new List>(storesCert); + } + } + + public virtual void SetStoresCrl(IList> storesCrl) + { + if (storesCrl == null) + { + m_storesCrl = new List>(); + } + else + { + m_storesCrl = new List>(storesCrl); + } + } + + public virtual void AddStoreAttrCert(IStore storeAttrCert) + { + if (storeAttrCert != null) + { + m_storesAttrCert.Add(storeAttrCert); + } + } + + public virtual void AddStoreCert(IStore storeCert) + { + if (storeCert != null) + { + m_storesCert.Add(storeCert); + } + } + + public virtual void AddStoreCrl(IStore storeCrl) + { + if (storeCrl != null) + { + m_storesCrl.Add(storeCrl); + } + } + + /** + * Returns if additional {@link X509Store}s for locations like LDAP found + * in certificates or CRLs should be used. + * + * @return Returns true if additional stores are used. + */ + public virtual bool IsAdditionalLocationsEnabled + { + get { return additionalLocationsEnabled; } + } + + /** + * Sets if additional {@link X509Store}s for locations like LDAP found in + * certificates or CRLs should be used. + * + * @param enabled true if additional stores are used. + */ + public virtual void SetAdditionalLocationsEnabled( + bool enabled) + { + additionalLocationsEnabled = enabled; + } + + /** + * Returns the trusted attribute certificate issuers. If attribute + * certificates is verified the trusted AC issuers must be set. + *

    + * The returned ISet consists of TrustAnchors. + *

    + * The returned ISet is immutable. Never null + *

    + * + * @return Returns an immutable set of the trusted AC issuers. + */ + public virtual ISet GetTrustedACIssuers() + { + return new HashSet(trustedACIssuers); + } + + /** + * Sets the trusted attribute certificate issuers. If attribute certificates + * is verified the trusted AC issuers must be set. + *

    + * The trustedACIssuers must be a ISet of + * TrustAnchor + *

    + * The given set is cloned. + *

    + * + * @param trustedACIssuers The trusted AC issuers to set. Is never + * null. + * @throws ClassCastException if an element of stores is not + * a TrustAnchor. + */ + public virtual void SetTrustedACIssuers(ISet trustedACIssuers) + { + if (trustedACIssuers == null) + { + this.trustedACIssuers = new HashSet(); + } + else + { + this.trustedACIssuers = new HashSet(trustedACIssuers); + } + } + + /** + * Returns the necessary attributes which must be contained in an attribute + * certificate. + *

    + * The returned ISet is immutable and contains + * Strings with the OIDs. + *

    + * + * @return Returns the necessary AC attributes. + */ + public virtual ISet GetNecessaryACAttributes() + { + return new HashSet(necessaryACAttributes); + } + + /** + * Sets the necessary which must be contained in an attribute certificate. + *

    + * The ISet must contain Strings with the + * OIDs. + *

    + * The set is cloned. + *

    + * + * @param necessaryACAttributes The necessary AC attributes to set. + * @throws ClassCastException if an element of + * necessaryACAttributes is not a + * String. + */ + public virtual void SetNecessaryACAttributes(ISet necessaryACAttributes) + { + if (necessaryACAttributes == null) + { + this.necessaryACAttributes = new HashSet(); + } + else + { + this.necessaryACAttributes = new HashSet(necessaryACAttributes); + } + } + + /** + * Returns the attribute certificates which are not allowed. + *

    + * The returned ISet is immutable and contains + * Strings with the OIDs. + *

    + * + * @return Returns the prohibited AC attributes. Is never null. + */ + public virtual ISet GetProhibitedACAttributes() + { + return new HashSet(prohibitedACAttributes); + } + + /** + * Sets the attribute certificates which are not allowed. + *

    + * The ISet must contain Strings with the + * OIDs. + *

    + * The set is cloned. + *

    + * + * @param prohibitedACAttributes The prohibited AC attributes to set. + * @throws ClassCastException if an element of + * prohibitedACAttributes is not a + * String. + */ + public virtual void SetProhibitedACAttributes(ISet prohibitedACAttributes) + { + if (prohibitedACAttributes == null) + { + this.prohibitedACAttributes = new HashSet(); + } + else + { + this.prohibitedACAttributes = new HashSet(prohibitedACAttributes); + } + } + + /** + * Returns the attribute certificate checker. The returned set contains + * {@link PKIXAttrCertChecker}s and is immutable. + * + * @return Returns the attribute certificate checker. Is never + * null. + */ + public virtual ISet GetAttrCertCheckers() + { + return new HashSet(attrCertCheckers); + } + + /** + * Sets the attribute certificate checkers. + *

    + * All elements in the ISet must a {@link PKIXAttrCertChecker}. + *

    + *

    + * The given set is cloned. + *

    + * + * @param attrCertCheckers The attribute certificate checkers to set. Is + * never null. + * @throws ClassCastException if an element of attrCertCheckers + * is not a PKIXAttrCertChecker. + */ + public virtual void SetAttrCertCheckers(ISet attrCertCheckers) + { + if (attrCertCheckers == null) + { + this.attrCertCheckers = new HashSet(); + } + else + { + this.attrCertCheckers = new HashSet(attrCertCheckers); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixParameters.cs.meta new file mode 100644 index 000000000..fb4cff4ff --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bddc2e795cf6cd046bbd64b225ce7cdc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixPolicyNode.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixPolicyNode.cs new file mode 100644 index 000000000..f736c181a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixPolicyNode.cs @@ -0,0 +1,160 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + /// + /// Summary description for PkixPolicyNode. + /// + public class PkixPolicyNode +// : IPolicyNode + { + protected IList mChildren; + protected int mDepth; + protected ISet mExpectedPolicies; + protected PkixPolicyNode mParent; + protected ISet mPolicyQualifiers; + protected string mValidPolicy; + protected bool mCritical; + + public virtual int Depth + { + get { return this.mDepth; } + } + + public virtual IEnumerable Children + { + get { return CollectionUtilities.Proxy(mChildren); } + } + + public virtual bool IsCritical + { + get { return this.mCritical; } + set { this.mCritical = value; } + } + + public virtual ISet PolicyQualifiers + { + get { return new HashSet(this.mPolicyQualifiers); } + } + + public virtual string ValidPolicy + { + get { return this.mValidPolicy; } + } + + public virtual bool HasChildren + { + get { return mChildren.Count != 0; } + } + + public virtual ISet ExpectedPolicies + { + get { return new HashSet(this.mExpectedPolicies); } + set { this.mExpectedPolicies = new HashSet(value); } + } + + public virtual PkixPolicyNode Parent + { + get { return this.mParent; } + set { this.mParent = value; } + } + + /// Constructors + public PkixPolicyNode( + IEnumerable children, + int depth, + ISet expectedPolicies, + PkixPolicyNode parent, + ISet policyQualifiers, + string validPolicy, + bool critical) + { + if (children == null) + { + this.mChildren = new List(); + } + else + { + this.mChildren = new List(children); + } + + this.mDepth = depth; + this.mExpectedPolicies = expectedPolicies; + this.mParent = parent; + this.mPolicyQualifiers = policyQualifiers; + this.mValidPolicy = validPolicy; + this.mCritical = critical; + } + + public virtual void AddChild( + PkixPolicyNode child) + { + child.Parent = this; + mChildren.Add(child); + } + + public virtual void RemoveChild( + PkixPolicyNode child) + { + mChildren.Remove(child); + } + + public override string ToString() + { + return ToString(""); + } + + public virtual string ToString(string indent) + { + StringBuilder buf = new StringBuilder(); + buf.Append(indent); + buf.Append(mValidPolicy); + buf.AppendLine(" {"); + + foreach (PkixPolicyNode child in mChildren) + { + buf.Append(child.ToString(indent + " ")); + } + + buf.Append(indent); + buf.AppendLine("}"); + return buf.ToString(); + } + + public virtual object Clone() + { + return Copy(); + } + + public virtual PkixPolicyNode Copy() + { + PkixPolicyNode node = new PkixPolicyNode( + new List(), + mDepth, + new HashSet(mExpectedPolicies), + null, + new HashSet(mPolicyQualifiers), + mValidPolicy, + mCritical); + + foreach (PkixPolicyNode child in mChildren) + { + PkixPolicyNode copy = child.Copy(); + copy.Parent = node; + node.AddChild(copy); + } + + return node; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixPolicyNode.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixPolicyNode.cs.meta new file mode 100644 index 000000000..21f6ba3ee --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/PkixPolicyNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d33024da030accb498009e4aecd51fe9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/ReasonsMask.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/ReasonsMask.cs new file mode 100644 index 000000000..c03f4bbb2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/ReasonsMask.cs @@ -0,0 +1,100 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + /// + /// This class helps to handle CRL revocation reasons mask. Each CRL handles a + /// certain set of revocation reasons. + /// + internal class ReasonsMask + { + private int _reasons; + + /// + /// Constructs are reason mask with the reasons. + /// + /// The reasons. + internal ReasonsMask( + int reasons) + { + _reasons = reasons; + } + + /// + /// A reason mask with no reason. + /// + internal ReasonsMask() + : this(0) + { + } + + /// + /// A mask with all revocation reasons. + /// + internal static readonly ReasonsMask AllReasons = new ReasonsMask( + ReasonFlags.AACompromise | ReasonFlags.AffiliationChanged | ReasonFlags.CACompromise + | ReasonFlags.CertificateHold | ReasonFlags.CessationOfOperation + | ReasonFlags.KeyCompromise | ReasonFlags.PrivilegeWithdrawn | ReasonFlags.Unused + | ReasonFlags.Superseded); + + /** + * Adds all reasons from the reasons mask to this mask. + * + * @param mask The reasons mask to add. + */ + internal void AddReasons( + ReasonsMask mask) + { + _reasons = _reasons | mask.Reasons.IntValue; + } + + /// + /// Returns true if this reasons mask contains all possible + /// reasons. + /// + /// true if this reasons mask contains all possible reasons. + /// + internal bool IsAllReasons + { + get { return _reasons == AllReasons._reasons; } + } + + /// + /// Intersects this mask with the given reasons mask. + /// + /// mask The mask to intersect with. + /// The intersection of this and teh given mask. + internal ReasonsMask Intersect( + ReasonsMask mask) + { + ReasonsMask _mask = new ReasonsMask(); + _mask.AddReasons(new ReasonsMask(_reasons & mask.Reasons.IntValue)); + return _mask; + } + + /// + /// Returns true if the passed reasons mask has new reasons. + /// + /// The reasons mask which should be tested for new reasons. + /// true if the passed reasons mask has new reasons. + internal bool HasNewReasons( + ReasonsMask mask) + { + return ((_reasons | mask.Reasons.IntValue ^ _reasons) != 0); + } + + /// + /// Returns the reasons in this mask. + /// + public ReasonFlags Reasons + { + get { return new ReasonFlags(_reasons); } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/ReasonsMask.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/ReasonsMask.cs.meta new file mode 100644 index 000000000..f79ac275b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/ReasonsMask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 82782c3f371478d4788bfedceeac9754 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/Rfc3280CertPathUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/Rfc3280CertPathUtilities.cs new file mode 100644 index 000000000..190986f56 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/Rfc3280CertPathUtilities.cs @@ -0,0 +1,2323 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Store; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + internal static class Rfc3280CertPathUtilities + { + private static readonly PkixCrlUtilities CrlUtilities = new PkixCrlUtilities(); + + internal static readonly string ANY_POLICY = "2.5.29.32.0"; + + // key usage bits + internal static readonly int KEY_CERT_SIGN = 5; + internal static readonly int CRL_SIGN = 6; + + /** + * If the complete CRL includes an issuing distribution point (IDP) CRL + * extension check the following: + *

    + * (i) If the distribution point name is present in the IDP CRL extension + * and the distribution field is present in the DP, then verify that one of + * the names in the IDP matches one of the names in the DP. If the + * distribution point name is present in the IDP CRL extension and the + * distribution field is omitted from the DP, then verify that one of the + * names in the IDP matches one of the names in the cRLIssuer field of the + * DP. + *

    + *

    + * (ii) If the onlyContainsUserCerts boolean is asserted in the IDP CRL + * extension, verify that the certificate does not include the basic + * constraints extension with the cA boolean asserted. + *

    + *

    + * (iii) If the onlyContainsCACerts boolean is asserted in the IDP CRL + * extension, verify that the certificate includes the basic constraints + * extension with the cA boolean asserted. + *

    + *

    + * (iv) Verify that the onlyContainsAttributeCerts boolean is not asserted. + *

    + * + * @param dp The distribution point. + * @param cert The certificate. + * @param crl The CRL. + * @throws AnnotatedException if one of the conditions is not met or an error occurs. + */ + internal static void ProcessCrlB2(DistributionPoint dp, object cert, X509Crl crl) + { + IssuingDistributionPoint idp; + try + { + idp = IssuingDistributionPoint.GetInstance(PkixCertPathValidatorUtilities.GetExtensionValue(crl, X509Extensions.IssuingDistributionPoint)); + } + catch (Exception e) + { + throw new Exception("0 Issuing distribution point extension could not be decoded.", e); + } + + // (b) (2) (i) + // distribution point name is present + if (idp != null) + { + if (idp.DistributionPoint != null) + { + // make list of names + DistributionPointName dpName = IssuingDistributionPoint.GetInstance(idp).DistributionPoint; + var names = new List(); + + if (dpName.PointType == DistributionPointName.FullName) + { + GeneralName[] genNames = GeneralNames.GetInstance(dpName.Name).GetNames(); + for (int j = 0; j < genNames.Length; j++) + { + names.Add(genNames[j]); + } + } + if (dpName.PointType == DistributionPointName.NameRelativeToCrlIssuer) + { + var seq = Asn1Sequence.GetInstance(crl.IssuerDN.ToAsn1Object()); + + Asn1EncodableVector vec = new Asn1EncodableVector(seq.Count + 1); + foreach (var element in seq) + { + vec.Add(element); + } + vec.Add(dpName.Name); + + names.Add(new GeneralName(X509Name.GetInstance(new DerSequence(vec)))); + } + bool matches = false; + // verify that one of the names in the IDP matches one + // of the names in the DP. + if (dp.DistributionPointName != null) + { + dpName = dp.DistributionPointName; + GeneralName[] genNames = null; + if (dpName.PointType == DistributionPointName.FullName) + { + genNames = GeneralNames.GetInstance(dpName.Name).GetNames(); + } + if (dpName.PointType == DistributionPointName.NameRelativeToCrlIssuer) + { + if (dp.CrlIssuer != null) + { + genNames = dp.CrlIssuer.GetNames(); + } + else + { + genNames = new GeneralName[1]; + try + { + genNames[0] = new GeneralName( + PkixCertPathValidatorUtilities.GetIssuerPrincipal(cert)); + } + catch (IOException e) + { + throw new Exception("Could not read certificate issuer.", e); + } + } + for (int j = 0; j < genNames.Length; j++) + { + var seq = Asn1Sequence.GetInstance(genNames[j].Name.ToAsn1Object()); + + Asn1EncodableVector vec = new Asn1EncodableVector(seq.Count + 1); + foreach (var element in seq) + { + vec.Add(element); + } + vec.Add(dpName.Name); + + genNames[j] = new GeneralName(X509Name.GetInstance(new DerSequence(vec))); + } + } + if (genNames != null) + { + for (int j = 0; j < genNames.Length; j++) + { + if (names.Contains(genNames[j])) + { + matches = true; + break; + } + } + } + if (!matches) + { + throw new Exception( + "No match for certificate CRL issuing distribution point name to cRLIssuer CRL distribution point."); + } + } + // verify that one of the names in + // the IDP matches one of the names in the cRLIssuer field of + // the DP + else + { + if (dp.CrlIssuer == null) + { + throw new Exception("Either the cRLIssuer or the distributionPoint field must " + + "be contained in DistributionPoint."); + } + GeneralName[] genNames = dp.CrlIssuer.GetNames(); + for (int j = 0; j < genNames.Length; j++) + { + if (names.Contains(genNames[j])) + { + matches = true; + break; + } + } + if (!matches) + { + throw new Exception( + "No match for certificate CRL issuing distribution point name to cRLIssuer CRL distribution point."); + } + } + } + BasicConstraints bc = null; + try + { + bc = BasicConstraints.GetInstance(PkixCertPathValidatorUtilities.GetExtensionValue( + (IX509Extension)cert, X509Extensions.BasicConstraints)); + } + catch (Exception e) + { + throw new Exception("Basic constraints extension could not be decoded.", e); + } + + //if (cert is X509Certificate) + { + // (b) (2) (ii) + if (idp.OnlyContainsUserCerts && ((bc != null) && bc.IsCA())) + { + throw new Exception("CA Cert CRL only contains user certificates."); + } + + // (b) (2) (iii) + if (idp.OnlyContainsCACerts && (bc == null || !bc.IsCA())) + { + throw new Exception("End CRL only contains CA certificates."); + } + } + + // (b) (2) (iv) + if (idp.OnlyContainsAttributeCerts) + { + throw new Exception("onlyContainsAttributeCerts boolean is asserted."); + } + } + } + + /// + internal static void ProcessCertBC( + PkixCertPath certPath, + int index, + PkixNameConstraintValidator nameConstraintValidator) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + int n = certs.Count; + // i as defined in the algorithm description + int i = n - index; + // + // (b), (c) permitted and excluded subtree checking. + // + if (!(PkixCertPathValidatorUtilities.IsSelfIssued(cert) && (i < n))) + { + X509Name principal = cert.SubjectDN; + Asn1Sequence dns; + + try + { + dns = Asn1Sequence.GetInstance(principal.GetEncoded()); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException( + "Exception extracting subject name when checking subtrees.", e, index); + } + + try + { + nameConstraintValidator.CheckPermittedDN(dns); + nameConstraintValidator.CheckExcludedDN(dns); + } + catch (PkixNameConstraintValidatorException e) + { + throw new PkixCertPathValidatorException( + "Subtree check for certificate subject failed.", e, index); + } + + GeneralNames altName = null; + try + { + altName = GeneralNames.GetInstance( + PkixCertPathValidatorUtilities.GetExtensionValue(cert, X509Extensions.SubjectAlternativeName)); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException( + "Subject alternative name extension could not be decoded.", e, index); + } + + var emails = X509Name.GetInstance(dns).GetValueList(X509Name.EmailAddress); + foreach (string email in emails) + { + GeneralName emailAsGeneralName = new GeneralName(GeneralName.Rfc822Name, email); + try + { + nameConstraintValidator.checkPermitted(emailAsGeneralName); + nameConstraintValidator.checkExcluded(emailAsGeneralName); + } + catch (PkixNameConstraintValidatorException ex) + { + throw new PkixCertPathValidatorException( + "Subtree check for certificate subject alternative email failed.", ex, index); + } + } + if (altName != null) + { + GeneralName[] genNames = null; + try + { + genNames = altName.GetNames(); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException( + "Subject alternative name contents could not be decoded.", e, index); + } + foreach (GeneralName genName in genNames) + { + try + { + nameConstraintValidator.checkPermitted(genName); + nameConstraintValidator.checkExcluded(genName); + } + catch (PkixNameConstraintValidatorException e) + { + throw new PkixCertPathValidatorException( + "Subtree check for certificate subject alternative name failed.", e, index); + } + } + } + } + } + + /// + internal static void PrepareNextCertA(PkixCertPath certPath, int index) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + // + // + // (a) check the policy mappings + // + Asn1Sequence pm; + try + { + pm = Asn1Sequence.GetInstance( + PkixCertPathValidatorUtilities.GetExtensionValue(cert, X509Extensions.PolicyMappings)); + } + catch (Exception ex) + { + throw new PkixCertPathValidatorException( + "Policy mappings extension could not be decoded.", ex, index); + } + if (pm != null) + { + Asn1Sequence mappings = pm; + + for (int j = 0; j < mappings.Count; j++) + { + DerObjectIdentifier issuerDomainPolicy; + DerObjectIdentifier subjectDomainPolicy; + try + { + Asn1Sequence mapping = Asn1Sequence.GetInstance(mappings[j]); + + issuerDomainPolicy = DerObjectIdentifier.GetInstance(mapping[0]); + subjectDomainPolicy = DerObjectIdentifier.GetInstance(mapping[1]); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException( + "Policy mappings extension contents could not be decoded.", e, index); + } + + if (ANY_POLICY.Equals(issuerDomainPolicy.Id)) + throw new PkixCertPathValidatorException( + "IssuerDomainPolicy is anyPolicy", null, index); + + if (ANY_POLICY.Equals(subjectDomainPolicy.Id)) + throw new PkixCertPathValidatorException( + "SubjectDomainPolicy is anyPolicy,", null, index); + } + } + } + + /// + internal static PkixPolicyNode ProcessCertD(PkixCertPath certPath, int index, ISet acceptablePolicies, + PkixPolicyNode validPolicyTree, IList[] policyNodes, int inhibitAnyPolicy) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + int n = certs.Count; + // i as defined in the algorithm description + int i = n - index; + // + // (d) policy Information checking against initial policy and + // policy mapping + // + Asn1Sequence certPolicies; + try + { + certPolicies = Asn1Sequence.GetInstance( + PkixCertPathValidatorUtilities.GetExtensionValue(cert, X509Extensions.CertificatePolicies)); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException( + "Could not read certificate policies extension from certificate.", e, index); + } + if (certPolicies != null && validPolicyTree != null) + { + // + // (d) (1) + // + var pols = new HashSet(); + + foreach (Asn1Encodable ae in certPolicies) + { + PolicyInformation pInfo = PolicyInformation.GetInstance(ae.ToAsn1Object()); + DerObjectIdentifier pOid = pInfo.PolicyIdentifier; + + pols.Add(pOid.Id); + + if (!ANY_POLICY.Equals(pOid.Id)) + { + ISet pq; + try + { + pq = PkixCertPathValidatorUtilities.GetQualifierSet(pInfo.PolicyQualifiers); + } + catch (PkixCertPathValidatorException ex) + { + throw new PkixCertPathValidatorException( + "Policy qualifier info set could not be build.", ex, index); + } + + bool match = PkixCertPathValidatorUtilities.ProcessCertD1i(i, policyNodes, pOid, pq); + + if (!match) + { + PkixCertPathValidatorUtilities.ProcessCertD1ii(i, policyNodes, pOid, pq); + } + } + } + + if (acceptablePolicies.Count < 1 || acceptablePolicies.Contains(ANY_POLICY)) + { + acceptablePolicies.Clear(); + acceptablePolicies.UnionWith(pols); + } + else + { + var t1 = new HashSet(); + + foreach (var o in acceptablePolicies) + { + if (pols.Contains(o)) + { + t1.Add(o); + } + } + acceptablePolicies.Clear(); + acceptablePolicies.UnionWith(t1); + } + + // + // (d) (2) + // + if ((inhibitAnyPolicy > 0) || ((i < n) && PkixCertPathValidatorUtilities.IsSelfIssued(cert))) + { + foreach (Asn1Encodable ae in certPolicies) + { + PolicyInformation pInfo = PolicyInformation.GetInstance(ae.ToAsn1Object()); + if (ANY_POLICY.Equals(pInfo.PolicyIdentifier.Id)) + { + var _apq = PkixCertPathValidatorUtilities.GetQualifierSet(pInfo.PolicyQualifiers); + + foreach (var _node in policyNodes[i - 1]) + { + foreach (var _policy in _node.ExpectedPolicies) + { + bool _found = false; + + foreach (PkixPolicyNode _child in _node.Children) + { + if (_policy.Equals(_child.ValidPolicy)) + { + _found = true; + break; + } + } + + if (!_found) + { + var _newChildExpectedPolicies = new HashSet(); + _newChildExpectedPolicies.Add(_policy); + + var _newChild = new PkixPolicyNode(new List(), i, + _newChildExpectedPolicies, _node, _apq, _policy, false); + _node.AddChild(_newChild); + policyNodes[i].Add(_newChild); + } + } + } + break; + } + } + } + + PkixPolicyNode _validPolicyTree = validPolicyTree; + // + // (d) (3) + // + for (int j = i - 1; j >= 0; j--) + { + var nodes = policyNodes[j]; + + for (int k = 0; k < nodes.Count; k++) + { + var node = nodes[k]; + if (!node.HasChildren) + { + _validPolicyTree = PkixCertPathValidatorUtilities.RemovePolicyNode(_validPolicyTree, + policyNodes, node); + if (_validPolicyTree == null) + break; + } + } + } + + // + // d (4) + // + var criticalExtensionOids = cert.GetCriticalExtensionOids(); + + if (criticalExtensionOids != null) + { + bool critical = criticalExtensionOids.Contains(X509Extensions.CertificatePolicies.Id); + + foreach (var node in policyNodes[i]) + { + node.IsCritical = critical; + } + } + return _validPolicyTree; + } + return null; + } + + /** + * If the DP includes cRLIssuer, then verify that the issuer field in the + * complete CRL matches cRLIssuer in the DP and that the complete CRL + * contains an + * g distribution point extension with the indirectCRL + * boolean asserted. Otherwise, verify that the CRL issuer matches the + * certificate issuer. + * + * @param dp The distribution point. + * @param cert The certificate ot attribute certificate. + * @param crl The CRL for cert. + * @throws AnnotatedException if one of the above conditions does not apply or an error + * occurs. + */ + internal static void ProcessCrlB1(DistributionPoint dp, object cert, X509Crl crl) + { + Asn1Object idp = PkixCertPathValidatorUtilities.GetExtensionValue( + crl, X509Extensions.IssuingDistributionPoint); + + bool isIndirect = false; + if (idp != null) + { + if (IssuingDistributionPoint.GetInstance(idp).IsIndirectCrl) + { + isIndirect = true; + } + } + + byte[] issuerBytes = crl.IssuerDN.GetEncoded(); + + bool matchIssuer = false; + if (dp.CrlIssuer != null) + { + GeneralName[] genNames = dp.CrlIssuer.GetNames(); + for (int j = 0; j < genNames.Length; j++) + { + if (genNames[j].TagNo == GeneralName.DirectoryName) + { + try + { + if (Arrays.AreEqual(genNames[j].Name.GetEncoded(), issuerBytes)) + { + matchIssuer = true; + } + } + catch (IOException e) + { + throw new Exception( + "CRL issuer information from distribution point cannot be decoded.", e); + } + } + } + if (matchIssuer && !isIndirect) + { + throw new Exception("Distribution point contains cRLIssuer field but CRL is not indirect."); + } + if (!matchIssuer) + { + throw new Exception("CRL issuer of CRL does not match CRL issuer of distribution point."); + } + } + else + { + if (crl.IssuerDN.Equivalent(PkixCertPathValidatorUtilities.GetIssuerPrincipal(cert), true)) + { + matchIssuer = true; + } + } + if (!matchIssuer) + { + throw new Exception("Cannot find matching CRL issuer for certificate."); + } + } + + internal static ReasonsMask ProcessCrlD(X509Crl crl, DistributionPoint dp) + //throws AnnotatedException + { + IssuingDistributionPoint idp; + try + { + idp = IssuingDistributionPoint.GetInstance(PkixCertPathValidatorUtilities.GetExtensionValue(crl, X509Extensions.IssuingDistributionPoint)); + } + catch (Exception e) + { + throw new Exception("issuing distribution point extension could not be decoded.", e); + } + + // (d) (1) + if (idp != null && idp.OnlySomeReasons != null && dp.Reasons != null) + { + return new ReasonsMask(dp.Reasons.IntValue).Intersect(new ReasonsMask(idp.OnlySomeReasons.IntValue)); + } + // (d) (4) + if ((idp == null || idp.OnlySomeReasons == null) && dp.Reasons == null) + { + return ReasonsMask.AllReasons; + } + + // (d) (2) and (d)(3) + + ReasonsMask dpReasons; + if (dp.Reasons == null) + { + dpReasons = ReasonsMask.AllReasons; + } + else + { + dpReasons = new ReasonsMask(dp.Reasons.IntValue); + } + + ReasonsMask idpReasons; + if (idp == null) + { + idpReasons = ReasonsMask.AllReasons; + } + else + { + idpReasons = new ReasonsMask(idp.OnlySomeReasons.IntValue); + } + + return dpReasons.Intersect(idpReasons); + } + + /** + * Obtain and validate the certification path for the complete CRL issuer. + * If a key usage extension is present in the CRL issuer's certificate, + * verify that the cRLSign bit is set. + * + * @param crl CRL which contains revocation information for the certificate + * cert. + * @param cert The attribute certificate or certificate to check if it is + * revoked. + * @param defaultCRLSignCert The issuer certificate of the certificate cert. + * @param defaultCRLSignKey The public key of the issuer certificate + * defaultCRLSignCert. + * @param paramsPKIX paramsPKIX PKIX parameters. + * @param certPathCerts The certificates on the certification path. + * @return A Set with all keys of possible CRL issuer + * certificates. + * @throws AnnotatedException if the CRL is not valid or the status cannot be checked or + * some error occurs. + */ + internal static ISet ProcessCrlF( + X509Crl crl, + object cert, + X509Certificate defaultCRLSignCert, + AsymmetricKeyParameter defaultCRLSignKey, + PkixParameters paramsPKIX, + IList certPathCerts) + { + // (f) + + // get issuer from CRL + X509CertStoreSelector certSelector = new X509CertStoreSelector(); + try + { + certSelector.Subject = crl.IssuerDN; + } + catch (IOException e) + { + throw new Exception( + "Subject criteria for certificate selector to find issuer certificate for CRL could not be set.", e); + } + + // get CRL signing certs + var signingCerts = new HashSet(); + + try + { + CollectionUtilities.CollectMatches(signingCerts, certSelector, paramsPKIX.GetStoresCert()); + } + catch (Exception e) + { + throw new Exception("Issuer certificate for CRL cannot be searched.", e); + } + + signingCerts.Add(defaultCRLSignCert); + + + var validCerts = new List(); + var validKeys = new List(); + + foreach (X509Certificate signingCert in signingCerts) + { + /* + * CA of the certificate, for which this CRL is checked, has also + * signed CRL, so skip the path validation, because is already done + */ + if (signingCert.Equals(defaultCRLSignCert)) + { + validCerts.Add(signingCert); + validKeys.Add(defaultCRLSignKey); + continue; + } + try + { + PkixCertPathBuilder builder = new PkixCertPathBuilder(); + + certSelector = new X509CertStoreSelector(); + certSelector.Certificate = signingCert; + + PkixBuilderParameters parameters = PkixBuilderParameters.GetInstance(paramsPKIX); + parameters.SetTargetConstraintsCert(certSelector); + + /* + * if signingCert is placed not higher on the cert path a + * dependency loop results. CRL for cert is checked, but + * signingCert is needed for checking the CRL which is dependent + * on checking cert because it is higher in the cert path and so + * signing signingCert transitively. so, revocation is disabled, + * forgery attacks of the CRL are detected in this outer loop + * for all other it must be enabled to prevent forgery attacks + */ + if (certPathCerts.Contains(signingCert)) + { + parameters.IsRevocationEnabled = false; + } + else + { + parameters.IsRevocationEnabled = true; + } + var certs = builder.Build(parameters).CertPath.Certificates; + validCerts.Add(signingCert); + validKeys.Add(PkixCertPathValidatorUtilities.GetNextWorkingKey(certs, 0)); + } + catch (PkixCertPathBuilderException e) + { + throw new Exception("CertPath for CRL signer failed to validate.", e); + } + catch (PkixCertPathValidatorException e) + { + throw new Exception("Public key of issuer certificate of CRL could not be retrieved.", e); + } + } + + var checkKeys = new HashSet(); + + Exception lastException = null; + for (int i = 0; i < validCerts.Count; i++) + { + X509Certificate signCert = (X509Certificate)validCerts[i]; + bool[] keyusage = signCert.GetKeyUsage(); + + if (keyusage != null && (keyusage.Length < 7 || !keyusage[CRL_SIGN])) + { + lastException = new Exception( + "Issuer certificate key usage extension does not permit CRL signing."); + } + else + { + checkKeys.Add(validKeys[i]); + } + } + + if ((checkKeys.Count == 0) && lastException == null) + { + throw new Exception("Cannot find a valid issuer certificate."); + } + if ((checkKeys.Count == 0) && lastException != null) + { + throw lastException; + } + + return checkKeys; + } + + internal static AsymmetricKeyParameter ProcessCrlG(X509Crl crl, ISet keys) + { + Exception lastException = null; + foreach (AsymmetricKeyParameter key in keys) + { + try + { + crl.Verify(key); + return key; + } + catch (Exception e) + { + lastException = e; + } + } + throw new Exception("Cannot verify CRL.", lastException); + } + + internal static X509Crl ProcessCrlH(ISet deltaCrls, AsymmetricKeyParameter key) + { + Exception lastException = null; + foreach (X509Crl crl in deltaCrls) + { + try + { + crl.Verify(key); + return crl; + } + catch (Exception e) + { + lastException = e; + } + } + if (lastException != null) + { + throw new Exception("Cannot verify delta CRL.", lastException); + } + return null; + } + + /** + * Checks a distribution point for revocation information for the + * certificate cert. + * + * @param dp The distribution point to consider. + * @param paramsPKIX PKIX parameters. + * @param cert Certificate to check if it is revoked. + * @param validDate The date when the certificate revocation status should be + * checked. + * @param defaultCRLSignCert The issuer certificate of the certificate cert. + * @param defaultCRLSignKey The public key of the issuer certificate + * defaultCRLSignCert. + * @param certStatus The current certificate revocation status. + * @param reasonMask The reasons mask which is already checked. + * @param certPathCerts The certificates of the certification path. + * @throws AnnotatedException if the certificate is revoked or the status cannot be checked + * or some error occurs. + */ + private static void CheckCrl( + DistributionPoint dp, + PkixParameters paramsPKIX, + X509Certificate cert, + DateTime validDate, + X509Certificate defaultCRLSignCert, + AsymmetricKeyParameter defaultCRLSignKey, + CertStatus certStatus, + ReasonsMask reasonMask, + IList certPathCerts) + { + DateTime currentDate = DateTime.UtcNow; + + if (validDate.Ticks > currentDate.Ticks) + { + throw new Exception("Validation time is in future."); + } + + // (a) + /* + * We always get timely valid CRLs, so there is no step (a) (1). + * "locally cached" CRLs are assumed to be in getStore(), additional + * CRLs must be enabled in the ExtendedPKIXParameters and are in + * getAdditionalStore() + */ + + ISet crls = PkixCertPathValidatorUtilities.GetCompleteCrls(dp, cert, currentDate, paramsPKIX); + bool validCrlFound = false; + Exception lastException = null; + + var crl_iter = crls.GetEnumerator(); + + while (crl_iter.MoveNext() && certStatus.Status == CertStatus.Unrevoked && !reasonMask.IsAllReasons) + { + try + { + X509Crl crl = crl_iter.Current; + + // (d) + ReasonsMask interimReasonsMask = ProcessCrlD(crl, dp); + + // (e) + /* + * The reasons mask is updated at the end, so only valid CRLs + * can update it. If this CRL does not contain new reasons it + * must be ignored. + */ + if (!interimReasonsMask.HasNewReasons(reasonMask)) + { + continue; + } + + // (f) + var keys = ProcessCrlF(crl, cert, defaultCRLSignCert, defaultCRLSignKey, paramsPKIX, certPathCerts); + // (g) + AsymmetricKeyParameter key = ProcessCrlG(crl, keys); + + X509Crl deltaCRL = null; + + if (paramsPKIX.IsUseDeltasEnabled) + { + // get delta CRLs + ISet deltaCRLs = PkixCertPathValidatorUtilities.GetDeltaCrls(currentDate, paramsPKIX, crl); + // we only want one valid delta CRL + // (h) + deltaCRL = ProcessCrlH(deltaCRLs, key); + } + + /* + * CRL must be be valid at the current time, not the validation + * time. If a certificate is revoked with reason keyCompromise, + * cACompromise, it can be used for forgery, also for the past. + * This reason may not be contained in older CRLs. + */ + + /* + * in the chain model signatures stay valid also after the + * certificate has been expired, so they do not have to be in + * the CRL validity time + */ + + if (paramsPKIX.ValidityModel != PkixParameters.ChainValidityModel) + { + /* + * if a certificate has expired, but was revoked, it is not + * more in the CRL, so it would be regarded as valid if the + * first check is not done + */ + if (cert.NotAfter.Ticks < crl.ThisUpdate.Ticks) + { + throw new Exception("No valid CRL for current time found."); + } + } + + ProcessCrlB1(dp, cert, crl); + + // (b) (2) + ProcessCrlB2(dp, cert, crl); + + // (c) + ProcessCrlC(deltaCRL, crl, paramsPKIX); + + // (i) + ProcessCrlI(validDate, deltaCRL, cert, certStatus, paramsPKIX); + + // (j) + ProcessCrlJ(validDate, crl, cert, certStatus); + + // (k) + if (certStatus.Status == CrlReason.RemoveFromCrl) + { + certStatus.Status = CertStatus.Unrevoked; + } + + // update reasons mask + reasonMask.AddReasons(interimReasonsMask); + + var criticalExtensions = crl.GetCriticalExtensionOids(); + + if (criticalExtensions != null) + { + criticalExtensions = new HashSet(criticalExtensions); + criticalExtensions.Remove(X509Extensions.IssuingDistributionPoint.Id); + criticalExtensions.Remove(X509Extensions.DeltaCrlIndicator.Id); + + if (criticalExtensions.Count > 0) + throw new Exception("CRL contains unsupported critical extensions."); + } + + if (deltaCRL != null) + { + criticalExtensions = deltaCRL.GetCriticalExtensionOids(); + if (criticalExtensions != null) + { + criticalExtensions = new HashSet(criticalExtensions); + criticalExtensions.Remove(X509Extensions.IssuingDistributionPoint.Id); + criticalExtensions.Remove(X509Extensions.DeltaCrlIndicator.Id); + + if (criticalExtensions.Count > 0) + throw new Exception("Delta CRL contains unsupported critical extension."); + } + } + + validCrlFound = true; + } + catch (Exception e) + { + lastException = e; + } + } + if (!validCrlFound) + { + throw lastException; + } + } + + /** + * Checks a certificate if it is revoked. + * + * @param paramsPKIX PKIX parameters. + * @param cert Certificate to check if it is revoked. + * @param validDate The date when the certificate revocation status should be + * checked. + * @param sign The issuer certificate of the certificate cert. + * @param workingPublicKey The public key of the issuer certificate sign. + * @param certPathCerts The certificates of the certification path. + * @throws AnnotatedException if the certificate is revoked or the status cannot be checked + * or some error occurs. + */ + internal static void CheckCrls( + PkixParameters paramsPKIX, + X509Certificate cert, + DateTime validDate, + X509Certificate sign, + AsymmetricKeyParameter workingPublicKey, + IList certPathCerts) + { + Exception lastException = null; + CrlDistPoint crldp; + + try + { + crldp = CrlDistPoint.GetInstance(PkixCertPathValidatorUtilities.GetExtensionValue(cert, X509Extensions.CrlDistributionPoints)); + } + catch (Exception e) + { + throw new Exception("CRL distribution point extension could not be read.", e); + } + + try + { + PkixCertPathValidatorUtilities.AddAdditionalStoresFromCrlDistributionPoint(crldp, paramsPKIX); + } + catch (Exception e) + { + throw new Exception( + "No additional CRL locations could be decoded from CRL distribution point extension.", e); + } + CertStatus certStatus = new CertStatus(); + ReasonsMask reasonsMask = new ReasonsMask(); + + bool validCrlFound = false; + + // for each distribution point + if (crldp != null) + { + DistributionPoint[] dps; + try + { + dps = crldp.GetDistributionPoints(); + } + catch (Exception e) + { + throw new Exception("Distribution points could not be read.", e); + } + if (dps != null) + { + for (int i = 0; i < dps.Length && certStatus.Status == CertStatus.Unrevoked && !reasonsMask.IsAllReasons; i++) + { + PkixParameters paramsPKIXClone = (PkixParameters)paramsPKIX.Clone(); + try + { + CheckCrl(dps[i], paramsPKIXClone, cert, validDate, sign, workingPublicKey, certStatus, + reasonsMask, certPathCerts); + validCrlFound = true; + } + catch (Exception e) + { + lastException = e; + } + } + } + } + + /* + * If the revocation status has not been determined, repeat the process + * above with any available CRLs not specified in a distribution point + * but issued by the certificate issuer. + */ + + if (certStatus.Status == CertStatus.Unrevoked && !reasonsMask.IsAllReasons) + { + try + { + /* + * assume a DP with both the reasons and the cRLIssuer fields + * omitted and a distribution point name of the certificate + * issuer. + */ + X509Name issuer; + try + { + issuer = X509Name.GetInstance(cert.IssuerDN.GetEncoded()); + } + catch (Exception e) + { + throw new Exception("Issuer from certificate for CRL could not be reencoded.", e); + } + DistributionPoint dp = new DistributionPoint(new DistributionPointName(0, new GeneralNames( + new GeneralName(GeneralName.DirectoryName, issuer))), null, null); + PkixParameters paramsPKIXClone = (PkixParameters)paramsPKIX.Clone(); + + CheckCrl(dp, paramsPKIXClone, cert, validDate, sign, workingPublicKey, certStatus, reasonsMask, + certPathCerts); + + validCrlFound = true; + } + catch (Exception e) + { + lastException = e; + } + } + + if (!validCrlFound) + { + throw lastException; + } + if (certStatus.Status != CertStatus.Unrevoked) + { + // This format is enforced by the NistCertPath tests + string formattedDate = certStatus.RevocationDate.Value.ToString( + "ddd MMM dd HH:mm:ss K yyyy"); + string message = "Certificate revocation after " + formattedDate; + message += ", reason: " + CrlReasons[certStatus.Status]; + throw new Exception(message); + } + + if (!reasonsMask.IsAllReasons && certStatus.Status == CertStatus.Unrevoked) + { + certStatus.Status = CertStatus.Undetermined; + } + + if (certStatus.Status == CertStatus.Undetermined) + { + throw new Exception("Certificate status could not be determined."); + } + } + + /// + internal static PkixPolicyNode PrepareCertB(PkixCertPath certPath, int index, + IList[] policyNodes, PkixPolicyNode validPolicyTree, int policyMapping) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + int n = certs.Count; + // i as defined in the algorithm description + int i = n - index; + // (b) + // + Asn1Sequence pm; + try + { + pm = Asn1Sequence.GetInstance( + PkixCertPathValidatorUtilities.GetExtensionValue(cert, X509Extensions.PolicyMappings)); + } + catch (Exception ex) + { + throw new PkixCertPathValidatorException( + "Policy mappings extension could not be decoded.", ex, index); + } + PkixPolicyNode _validPolicyTree = validPolicyTree; + if (pm != null) + { + Asn1Sequence mappings = pm; + var m_idp = new Dictionary>(); + var s_idp = new HashSet(); + + for (int j = 0; j < mappings.Count; j++) + { + Asn1Sequence mapping = (Asn1Sequence)mappings[j]; + string id_p = ((DerObjectIdentifier)mapping[0]).Id; + string sd_p = ((DerObjectIdentifier)mapping[1]).Id; + + ISet tmp; + if (m_idp.TryGetValue(id_p, out tmp)) + { + tmp.Add(sd_p); + } + else + { + tmp = new HashSet(); + tmp.Add(sd_p); + m_idp[id_p] = tmp; + s_idp.Add(id_p); + } + } + + foreach (var id_p in s_idp) + { + // + // (1) + // + if (policyMapping > 0) + { + bool idp_found = false; + + foreach (PkixPolicyNode node in policyNodes[i]) + { + if (node.ValidPolicy.Equals(id_p)) + { + idp_found = true; + node.ExpectedPolicies = CollectionUtilities.GetValueOrNull(m_idp, id_p); + break; + } + } + + if (!idp_found) + { + foreach (PkixPolicyNode node in policyNodes[i]) + { + if (ANY_POLICY.Equals(node.ValidPolicy)) + { + Asn1Sequence policies = null; + try + { + policies = (Asn1Sequence)PkixCertPathValidatorUtilities.GetExtensionValue(cert, + X509Extensions.CertificatePolicies); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException( + "Certificate policies extension could not be decoded.", e, index); + } + + ISet pq = null; + + foreach (Asn1Encodable ae in policies) + { + PolicyInformation pinfo = null; + try + { + pinfo = PolicyInformation.GetInstance(ae.ToAsn1Object()); + } + catch (Exception ex) + { + throw new PkixCertPathValidatorException( + "Policy information could not be decoded.", ex, index); + } + if (ANY_POLICY.Equals(pinfo.PolicyIdentifier.Id)) + { + try + { + pq = PkixCertPathValidatorUtilities + .GetQualifierSet(pinfo.PolicyQualifiers); + } + catch (PkixCertPathValidatorException ex) + { + throw new PkixCertPathValidatorException( + "Policy qualifier info set could not be decoded.", ex, index); + } + break; + } + } + bool ci = false; + var critExtOids = cert.GetCriticalExtensionOids(); + if (critExtOids != null) + { + ci = critExtOids.Contains(X509Extensions.CertificatePolicies.Id); + } + + PkixPolicyNode p_node = node.Parent; + if (ANY_POLICY.Equals(p_node.ValidPolicy)) + { + var c_node = new PkixPolicyNode(new List(), i, + CollectionUtilities.GetValueOrNull(m_idp, id_p), p_node, pq, id_p, ci); + p_node.AddChild(c_node); + policyNodes[i].Add(c_node); + } + break; + } + } + } + + // + // (2) + // + } + else if (policyMapping <= 0) + { + foreach (var node in new List(policyNodes[i])) + { + if (node.ValidPolicy.Equals(id_p)) + { + node.Parent.RemoveChild(node); + + for (int k = i - 1; k >= 0; k--) + { + foreach (var node2 in new List(policyNodes[k])) + { + if (!node2.HasChildren) + { + _validPolicyTree = PkixCertPathValidatorUtilities.RemovePolicyNode( + _validPolicyTree, policyNodes, node2); + + if (_validPolicyTree == null) + break; + } + } + } + } + } + } + } + } + return _validPolicyTree; + } + + internal static ISet[] ProcessCrlA1ii( + DateTime currentDate, + PkixParameters paramsPKIX, + X509Certificate cert, + X509Crl crl) + { + X509CrlStoreSelector crlselect = new X509CrlStoreSelector(); + crlselect.CertificateChecking = cert; + + try + { + var issuer = new List(); + issuer.Add(crl.IssuerDN); + crlselect.Issuers = issuer; + } + catch (IOException e) + { + throw new Exception("Cannot extract issuer from CRL." + e, e); + } + + crlselect.CompleteCrlEnabled = true; + ISet completeSet = CrlUtilities.FindCrls(crlselect, paramsPKIX, currentDate); + var deltaSet = new HashSet(); + + if (paramsPKIX.IsUseDeltasEnabled) + { + // get delta CRL(s) + try + { + deltaSet.UnionWith(PkixCertPathValidatorUtilities.GetDeltaCrls(currentDate, paramsPKIX, crl)); + } + catch (Exception e) + { + throw new Exception("Exception obtaining delta CRLs.", e); + } + } + + return new []{ completeSet, deltaSet }; + } + + internal static ISet ProcessCrlA1i( + DateTime currentDate, + PkixParameters paramsPKIX, + X509Certificate cert, + X509Crl crl) + { + var deltaSet = new HashSet(); + if (paramsPKIX.IsUseDeltasEnabled) + { + CrlDistPoint freshestCRL; + try + { + freshestCRL = CrlDistPoint.GetInstance( + PkixCertPathValidatorUtilities.GetExtensionValue(cert, X509Extensions.FreshestCrl)); + } + catch (Exception e) + { + throw new Exception("Freshest CRL extension could not be decoded from certificate.", e); + } + + if (freshestCRL == null) + { + try + { + freshestCRL = CrlDistPoint.GetInstance(PkixCertPathValidatorUtilities.GetExtensionValue(crl, + X509Extensions.FreshestCrl)); + } + catch (Exception e) + { + throw new Exception("Freshest CRL extension could not be decoded from CRL.", e); + } + } + if (freshestCRL != null) + { + try + { + PkixCertPathValidatorUtilities.AddAdditionalStoresFromCrlDistributionPoint(freshestCRL, + paramsPKIX); + } + catch (Exception e) + { + throw new Exception( + "No new delta CRL locations could be added from Freshest CRL extension.", e); + } + // get delta CRL(s) + try + { + deltaSet.UnionWith(PkixCertPathValidatorUtilities.GetDeltaCrls(currentDate, paramsPKIX, crl)); + } + catch (Exception e) + { + throw new Exception("Exception obtaining delta CRLs.", e); + } + } + } + return deltaSet; + } + + internal static void ProcessCertF( + PkixCertPath certPath, + int index, + PkixPolicyNode validPolicyTree, + int explicitPolicy) + { + // + // (f) + // + if (explicitPolicy <= 0 && validPolicyTree == null) + { + throw new PkixCertPathValidatorException( + "No valid policy tree found when one expected.", null, index); + } + } + + internal static void ProcessCertA( + PkixCertPath certPath, + PkixParameters paramsPKIX, + int index, + AsymmetricKeyParameter workingPublicKey, + X509Name workingIssuerName, + X509Certificate sign) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + // + // (a) verify + // + try + { + // (a) (1) + // + cert.Verify(workingPublicKey); + } + catch (GeneralSecurityException e) + { + throw new PkixCertPathValidatorException("Could not validate certificate signature.", e, index); + } + + try + { + // (a) (2) + // + cert.CheckValidity(PkixCertPathValidatorUtilities + .GetValidCertDateFromValidityModel(paramsPKIX, certPath, index)); + } + catch (CertificateExpiredException e) + { + throw new PkixCertPathValidatorException("Could not validate certificate: " + e.Message, e, index); + } + catch (CertificateNotYetValidException e) + { + throw new PkixCertPathValidatorException("Could not validate certificate: " + e.Message, e, index); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException("Could not validate time of certificate.", e, index); + } + + // + // (a) (3) + // + if (paramsPKIX.IsRevocationEnabled) + { + try + { + CheckCrls(paramsPKIX, cert, PkixCertPathValidatorUtilities.GetValidCertDateFromValidityModel(paramsPKIX, + certPath, index), sign, workingPublicKey, certs); + } + catch (Exception e) + { + Exception cause = e.InnerException; + if (cause == null) + { + cause = e; + } + throw new PkixCertPathValidatorException(e.Message, cause, index); + } + } + + // + // (a) (4) name chaining + // + X509Name issuer = PkixCertPathValidatorUtilities.GetIssuerPrincipal(cert); + if (!issuer.Equivalent(workingIssuerName, true)) + { + throw new PkixCertPathValidatorException("IssuerName(" + issuer + + ") does not match SubjectName(" + workingIssuerName + ") of signing certificate.", null, index); + } + } + + internal static int PrepareNextCertI1(PkixCertPath certPath, int index, int explicitPolicy) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + // + // (i) + // + Asn1Sequence pc; + try + { + pc = Asn1Sequence.GetInstance( + PkixCertPathValidatorUtilities.GetExtensionValue(cert, X509Extensions.PolicyConstraints)); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException( + "Policy constraints extension cannot be decoded.", e, index); + } + + if (pc != null) + { + foreach (var policyConstraint in pc) + { + try + { + Asn1TaggedObject constraint = Asn1TaggedObject.GetInstance(policyConstraint); + if (constraint.HasContextTag(0)) + { + int tmpInt = DerInteger.GetInstance(constraint, false).IntValueExact; + if (tmpInt < explicitPolicy) + return tmpInt; + + break; + } + } + catch (ArgumentException e) + { + throw new PkixCertPathValidatorException( + "Policy constraints extension contents cannot be decoded.", e, index); + } + } + } + return explicitPolicy; + } + + /// + internal static int PrepareNextCertI2( + PkixCertPath certPath, + int index, + int policyMapping) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + + // + // (i) + // + Asn1Sequence pc = null; + try + { + pc = Asn1Sequence.GetInstance( + PkixCertPathValidatorUtilities.GetExtensionValue(cert, X509Extensions.PolicyConstraints)); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException("Policy constraints extension cannot be decoded.", e, index); + } + + if (pc != null) + { + foreach (var policyConstraint in pc) + { + try + { + Asn1TaggedObject constraint = Asn1TaggedObject.GetInstance(policyConstraint); + if (constraint.HasContextTag(1)) + { + int tmpInt = DerInteger.GetInstance(constraint, false).IntValueExact; + if (tmpInt < policyMapping) + return tmpInt; + + break; + } + } + catch (ArgumentException e) + { + throw new PkixCertPathValidatorException( + "Policy constraints extension contents cannot be decoded.", e, index); + } + } + } + return policyMapping; + } + + /// + internal static void PrepareNextCertG( + PkixCertPath certPath, + int index, + PkixNameConstraintValidator nameConstraintValidator) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + + // + // (g) handle the name constraints extension + // + NameConstraints nc = null; + try + { + Asn1Sequence ncSeq = Asn1Sequence.GetInstance( + PkixCertPathValidatorUtilities.GetExtensionValue(cert, X509Extensions.NameConstraints)); + if (ncSeq != null) + { + nc = new NameConstraints(ncSeq); + } + } + catch (Exception e) + { + throw new PkixCertPathValidatorException( + "Name constraints extension could not be decoded.", e, index); + } + if (nc != null) + { + // + // (g) (1) permitted subtrees + // + Asn1Sequence permitted = nc.PermittedSubtrees; + if (permitted != null) + { + try + { + nameConstraintValidator.IntersectPermittedSubtree(permitted); + } + catch (Exception ex) + { + throw new PkixCertPathValidatorException( + "Permitted subtrees cannot be build from name constraints extension.", ex, index); + } + } + + // + // (g) (2) excluded subtrees + // + Asn1Sequence excluded = nc.ExcludedSubtrees; + if (excluded != null) + { + try + { + foreach (var excludedSubtree in excluded) + { + GeneralSubtree subtree = GeneralSubtree.GetInstance(excludedSubtree); + nameConstraintValidator.AddExcludedSubtree(subtree); + } + } + catch (Exception ex) + { + throw new PkixCertPathValidatorException( + "Excluded subtrees cannot be build from name constraints extension.", ex, index); + } + } + } + } + + /// + internal static int PrepareNextCertJ( + PkixCertPath certPath, + int index, + int inhibitAnyPolicy) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + + // + // (j) + // + DerInteger iap = null; + try + { + iap = DerInteger.GetInstance( + PkixCertPathValidatorUtilities.GetExtensionValue(cert, X509Extensions.InhibitAnyPolicy)); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException("Inhibit any-policy extension cannot be decoded.", e, index); + } + + if (iap != null) + { + int _inhibitAnyPolicy = iap.IntValueExact; + + if (_inhibitAnyPolicy < inhibitAnyPolicy) + return _inhibitAnyPolicy; + } + return inhibitAnyPolicy; + } + + /// + internal static void PrepareNextCertK( + PkixCertPath certPath, + int index) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + // + // (k) + // + BasicConstraints bc; + try + { + bc = BasicConstraints.GetInstance( + PkixCertPathValidatorUtilities.GetExtensionValue(cert, X509Extensions.BasicConstraints)); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException("Basic constraints extension cannot be decoded.", e, index); + } + if (bc != null) + { + if (!(bc.IsCA())) + throw new PkixCertPathValidatorException("Not a CA certificate"); + } + else + { + throw new PkixCertPathValidatorException("Intermediate certificate lacks BasicConstraints"); + } + } + + /// + internal static int PrepareNextCertL( + PkixCertPath certPath, + int index, + int maxPathLength) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + // + // (l) + // + if (!PkixCertPathValidatorUtilities.IsSelfIssued(cert)) + { + if (maxPathLength <= 0) + throw new PkixCertPathValidatorException("Max path length not greater than zero", null, index); + + return maxPathLength - 1; + } + return maxPathLength; + } + + /// + internal static int PrepareNextCertM( + PkixCertPath certPath, + int index, + int maxPathLength) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + + // + // (m) + // + BasicConstraints bc; + try + { + bc = BasicConstraints.GetInstance( + PkixCertPathValidatorUtilities.GetExtensionValue(cert, X509Extensions.BasicConstraints)); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException("Basic constraints extension cannot be decoded.", e, index); + } + if (bc != null) + { + BigInteger _pathLengthConstraint = bc.PathLenConstraint; + + if (_pathLengthConstraint != null) + { + int _plc = _pathLengthConstraint.IntValue; + + if (_plc < maxPathLength) + { + return _plc; + } + } + } + return maxPathLength; + } + + /// + internal static void PrepareNextCertN( + PkixCertPath certPath, + int index) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + + // + // (n) + // + bool[] _usage = cert.GetKeyUsage(); + + if ((_usage != null) && !_usage[KEY_CERT_SIGN]) + { + throw new PkixCertPathValidatorException( + "Issuer certificate keyusage extension is critical and does not permit key signing.", null, index); + } + } + + /// + internal static void PrepareNextCertO(PkixCertPath certPath, int index, ISet criticalExtensions, + IList checkers) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + + // + // (o) + // + foreach (var checker in checkers) + { + try + { + checker.Check(cert, criticalExtensions); + } + catch (PkixCertPathValidatorException e) + { + throw new PkixCertPathValidatorException(e.Message, e.InnerException, index); + } + } + if (criticalExtensions.Count > 0) + { + throw new PkixCertPathValidatorException("Certificate has unsupported critical extension.", null, index); + } + } + + internal static int PrepareNextCertH1( + PkixCertPath certPath, + int index, + int explicitPolicy) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + + // + // (h) + // + if (!PkixCertPathValidatorUtilities.IsSelfIssued(cert)) + { + // + // (1) + // + if (explicitPolicy != 0) + return explicitPolicy - 1; + } + return explicitPolicy; + } + + internal static int PrepareNextCertH2( + PkixCertPath certPath, + int index, + int policyMapping) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + + // + // (h) + // + if (!PkixCertPathValidatorUtilities.IsSelfIssued(cert)) + { + // + // (2) + // + if (policyMapping != 0) + return policyMapping - 1; + } + return policyMapping; + } + + + internal static int PrepareNextCertH3( + PkixCertPath certPath, + int index, + int inhibitAnyPolicy) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + + // + // (h) + // + if (!PkixCertPathValidatorUtilities.IsSelfIssued(cert)) + { + // + // (3) + // + if (inhibitAnyPolicy != 0) + return inhibitAnyPolicy - 1; + } + return inhibitAnyPolicy; + } + + internal static int WrapupCertA( + int explicitPolicy, + X509Certificate cert) + { + // + // (a) + // + if (!PkixCertPathValidatorUtilities.IsSelfIssued(cert) && (explicitPolicy != 0)) + { + explicitPolicy--; + } + return explicitPolicy; + } + + /// + internal static int WrapupCertB( + PkixCertPath certPath, + int index, + int explicitPolicy) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + + // + // (b) + // + Asn1Sequence pc; + try + { + pc = Asn1Sequence.GetInstance( + PkixCertPathValidatorUtilities.GetExtensionValue(cert, X509Extensions.PolicyConstraints)); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException("Policy constraints could not be decoded.", e, index); + } + + if (pc != null) + { + foreach (var policyConstraint in pc) + { + Asn1TaggedObject constraint = Asn1TaggedObject.GetInstance(policyConstraint); + if (constraint.HasContextTag(0)) + { + int tmpInt; + try + { + tmpInt = DerInteger.GetInstance(constraint, false).IntValueExact; + } + catch (Exception e) + { + throw new PkixCertPathValidatorException( + "Policy constraints requireExplicitPolicy field could not be decoded.", e, index); + } + if (tmpInt == 0) + return 0; + + break; + } + } + } + return explicitPolicy; + } + + /// + internal static void WrapupCertF(PkixCertPath certPath, int index, IList checkers, + ISet criticalExtensions) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + + foreach (var checker in checkers) + { + try + { + checker.Check(cert, criticalExtensions); + } + catch (PkixCertPathValidatorException e) + { + throw new PkixCertPathValidatorException("Additional certificate path checker failed.", e, index); + } + } + + if (criticalExtensions.Count > 0) + { + throw new PkixCertPathValidatorException("Certificate has unsupported critical extension", + null, index); + } + } + + internal static PkixPolicyNode WrapupCertG(PkixCertPath certPath, PkixParameters paramsPKIX, + ISet userInitialPolicySet, int index, IList[] policyNodes, + PkixPolicyNode validPolicyTree, ISet acceptablePolicies) + { + int n = certPath.Certificates.Count; + + // + // (g) + // + PkixPolicyNode intersection; + + // + // (g) (i) + // + if (validPolicyTree == null) + { + if (paramsPKIX.IsExplicitPolicyRequired) + { + throw new PkixCertPathValidatorException( + "Explicit policy requested but none available.", null, index); + } + intersection = null; + } + else if (PkixCertPathValidatorUtilities.IsAnyPolicy(userInitialPolicySet)) // (g) (ii) + { + if (paramsPKIX.IsExplicitPolicyRequired) + { + if (acceptablePolicies.Count < 1) + { + throw new PkixCertPathValidatorException( + "Explicit policy requested but none available.", null, index); + } + + var _validPolicyNodeSet = new HashSet(); + + foreach (var _nodeDepth in policyNodes) + { + foreach (var _node in _nodeDepth) + { + if (ANY_POLICY.Equals(_node.ValidPolicy)) + { + foreach (var o in _node.Children) + { + _validPolicyNodeSet.Add(o); + } + } + } + } + + foreach (var _node in _validPolicyNodeSet) + { + if (!acceptablePolicies.Contains(_node.ValidPolicy)) + { + // TODO? + // validPolicyTree = + // removePolicyNode(validPolicyTree, policyNodes, + // _node); + } + } + if (validPolicyTree != null) + { + for (int j = n - 1; j >= 0; j--) + { + var nodes = policyNodes[j]; + + for (int k = 0; k < nodes.Count; k++) + { + var node = nodes[k]; + if (!node.HasChildren) + { + validPolicyTree = PkixCertPathValidatorUtilities.RemovePolicyNode( + validPolicyTree, policyNodes, node); + } + } + } + } + } + + intersection = validPolicyTree; + } + else + { + // + // (g) (iii) + // + // This implementation is not exactly same as the one described in + // RFC3280. + // However, as far as the validation result is concerned, both + // produce + // adequate result. The only difference is whether AnyPolicy is + // remain + // in the policy tree or not. + // + // (g) (iii) 1 + // + var _validPolicyNodeSet = new HashSet(); + + foreach (var _nodeDepth in policyNodes) + { + foreach (var _node in _nodeDepth) + { + if (ANY_POLICY.Equals(_node.ValidPolicy)) + { + foreach (PkixPolicyNode _c_node in _node.Children) + { + if (!ANY_POLICY.Equals(_c_node.ValidPolicy)) + { + _validPolicyNodeSet.Add(_c_node); + } + } + } + } + } + + // + // (g) (iii) 2 + // + foreach (var _node in _validPolicyNodeSet) + { + if (!userInitialPolicySet.Contains(_node.ValidPolicy)) + { + validPolicyTree = PkixCertPathValidatorUtilities.RemovePolicyNode(validPolicyTree, policyNodes, + _node); + } + } + + // + // (g) (iii) 4 + // + if (validPolicyTree != null) + { + for (int j = n - 1; j >= 0; j--) + { + var nodes = policyNodes[j]; + + for (int k = 0; k < nodes.Count; k++) + { + var node = nodes[k]; + if (!node.HasChildren) + { + validPolicyTree = PkixCertPathValidatorUtilities.RemovePolicyNode(validPolicyTree, + policyNodes, node); + } + } + } + } + + intersection = validPolicyTree; + } + return intersection; + } + + /** + * If use-deltas is set, verify the issuer and scope of the delta CRL. + * + * @param deltaCRL The delta CRL. + * @param completeCRL The complete CRL. + * @param pkixParams The PKIX paramaters. + * @throws AnnotatedException if an exception occurs. + */ + internal static void ProcessCrlC( + X509Crl deltaCRL, + X509Crl completeCRL, + PkixParameters pkixParams) + { + if (deltaCRL == null) + return; + + IssuingDistributionPoint completeidp = null; + try + { + completeidp = IssuingDistributionPoint.GetInstance( + PkixCertPathValidatorUtilities.GetExtensionValue(completeCRL, X509Extensions.IssuingDistributionPoint)); + } + catch (Exception e) + { + throw new Exception("000 Issuing distribution point extension could not be decoded.", e); + } + + if (pkixParams.IsUseDeltasEnabled) + { + // (c) (1) + if (!deltaCRL.IssuerDN.Equivalent(completeCRL.IssuerDN, true)) + throw new Exception("Complete CRL issuer does not match delta CRL issuer."); + + // (c) (2) + IssuingDistributionPoint deltaidp = null; + try + { + deltaidp = IssuingDistributionPoint.GetInstance( + PkixCertPathValidatorUtilities.GetExtensionValue(deltaCRL, X509Extensions.IssuingDistributionPoint)); + } + catch (Exception e) + { + throw new Exception( + "Issuing distribution point extension from delta CRL could not be decoded.", e); + } + + if (!Org.BouncyCastle.Utilities.Platform.Equals(completeidp, deltaidp)) + { + throw new Exception( + "Issuing distribution point extension from delta CRL and complete CRL does not match."); + } + + // (c) (3) + Asn1Object completeKeyIdentifier = null; + try + { + completeKeyIdentifier = PkixCertPathValidatorUtilities.GetExtensionValue( + completeCRL, X509Extensions.AuthorityKeyIdentifier); + } + catch (Exception e) + { + throw new Exception( + "Authority key identifier extension could not be extracted from complete CRL.", e); + } + + Asn1Object deltaKeyIdentifier = null; + try + { + deltaKeyIdentifier = PkixCertPathValidatorUtilities.GetExtensionValue( + deltaCRL, X509Extensions.AuthorityKeyIdentifier); + } + catch (Exception e) + { + throw new Exception( + "Authority key identifier extension could not be extracted from delta CRL.", e); + } + + if (completeKeyIdentifier == null) + throw new Exception("CRL authority key identifier is null."); + + if (deltaKeyIdentifier == null) + throw new Exception("Delta CRL authority key identifier is null."); + + if (!completeKeyIdentifier.Equals(deltaKeyIdentifier)) + { + throw new Exception( + "Delta CRL authority key identifier does not match complete CRL authority key identifier."); + } + } + } + + internal static void ProcessCrlI( + DateTime validDate, + X509Crl deltacrl, + object cert, + CertStatus certStatus, + PkixParameters pkixParams) + { + if (pkixParams.IsUseDeltasEnabled && deltacrl != null) + { + PkixCertPathValidatorUtilities.GetCertStatus(validDate, deltacrl, cert, certStatus); + } + } + + internal static void ProcessCrlJ( + DateTime validDate, + X509Crl completecrl, + object cert, + CertStatus certStatus) + { + if (certStatus.Status == CertStatus.Unrevoked) + { + PkixCertPathValidatorUtilities.GetCertStatus(validDate, completecrl, cert, certStatus); + } + } + + internal static PkixPolicyNode ProcessCertE( + PkixCertPath certPath, + int index, + PkixPolicyNode validPolicyTree) + { + var certs = certPath.Certificates; + X509Certificate cert = certs[index]; + + // + // (e) + // + Asn1Sequence certPolicies = null; + try + { + certPolicies = Asn1Sequence.GetInstance( + PkixCertPathValidatorUtilities.GetExtensionValue(cert, X509Extensions.CertificatePolicies)); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException("Could not read certificate policies extension from certificate.", + e, index); + } + if (certPolicies == null) + { + validPolicyTree = null; + } + return validPolicyTree; + } + + internal static readonly string[] CrlReasons = new string[] + { + "unspecified", + "keyCompromise", + "cACompromise", + "affiliationChanged", + "superseded", + "cessationOfOperation", + "certificateHold", + "unknown", + "removeFromCRL", + "privilegeWithdrawn", + "aACompromise" + }; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/Rfc3280CertPathUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/Rfc3280CertPathUtilities.cs.meta new file mode 100644 index 000000000..f55d9c9d1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/Rfc3280CertPathUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b4b0eb500c7b0446b1ae401484cb0ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/Rfc3281CertPathUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/Rfc3281CertPathUtilities.cs new file mode 100644 index 000000000..46c5ae8e1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/Rfc3281CertPathUtilities.cs @@ -0,0 +1,578 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Store; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + internal static class Rfc3281CertPathUtilities + { + internal static void ProcessAttrCert7( + X509V2AttributeCertificate attrCert, + PkixCertPath certPath, + PkixCertPath holderCertPath, + PkixParameters pkixParams) + { + // TODO: + // AA Controls + // Attribute encryption + // Proxy + var critExtOids = attrCert.GetCriticalExtensionOids(); + + // 7.1 + // process extensions + + // target information checked in step 6 / X509AttributeCertStoreSelector + if (critExtOids.Contains(X509Extensions.TargetInformation.Id)) + { + try + { + TargetInformation.GetInstance(PkixCertPathValidatorUtilities + .GetExtensionValue(attrCert, X509Extensions.TargetInformation)); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException( + "Target information extension could not be read.", e); + } + } + critExtOids.Remove(X509Extensions.TargetInformation.Id); + foreach (PkixAttrCertChecker checker in pkixParams.GetAttrCertCheckers()) + { + checker.Check(attrCert, certPath, holderCertPath, critExtOids); + } + if (critExtOids.Count > 0) + { + throw new PkixCertPathValidatorException( + "Attribute certificate contains unsupported critical extensions: " + critExtOids); + } + } + + /** + * Checks if an attribute certificate is revoked. + * + * @param attrCert Attribute certificate to check if it is revoked. + * @param paramsPKIX PKIX parameters. + * @param issuerCert The issuer certificate of the attribute certificate + * attrCert. + * @param validDate The date when the certificate revocation status should + * be checked. + * @param certPathCerts The certificates of the certification path to be + * checked. + * + * @throws CertPathValidatorException if the certificate is revoked or the + * status cannot be checked or some error occurs. + */ + internal static void CheckCrls( + X509V2AttributeCertificate attrCert, + PkixParameters paramsPKIX, + X509Certificate issuerCert, + DateTime validDate, + IList certPathCerts) + { + if (!paramsPKIX.IsRevocationEnabled) + return; + + // check if revocation is available + if (attrCert.GetExtensionValue(X509Extensions.NoRevAvail) != null) + { + if (attrCert.GetExtensionValue(X509Extensions.CrlDistributionPoints) != null || + attrCert.GetExtensionValue(X509Extensions.AuthorityInfoAccess) != null) + { + throw new PkixCertPathValidatorException( + "No rev avail extension is set, but also an AC revocation pointer."); + } + + return; + } + + CrlDistPoint crldp; + try + { + crldp = CrlDistPoint.GetInstance( + PkixCertPathValidatorUtilities.GetExtensionValue(attrCert, X509Extensions.CrlDistributionPoints)); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException("CRL distribution point extension could not be read.", e); + } + + try + { + PkixCertPathValidatorUtilities.AddAdditionalStoresFromCrlDistributionPoint(crldp, paramsPKIX); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException( + "No additional CRL locations could be decoded from CRL distribution point extension.", e); + } + + CertStatus certStatus = new CertStatus(); + ReasonsMask reasonsMask = new ReasonsMask(); + + Exception lastException = null; + bool validCrlFound = false; + // for each distribution point + if (crldp != null) + { + DistributionPoint[] dps; + try + { + dps = crldp.GetDistributionPoints(); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException("Distribution points could not be read.", e); + } + try + { + for (int i = 0; + i < dps.Length && certStatus.Status == CertStatus.Unrevoked && !reasonsMask.IsAllReasons; + i++) + { + PkixParameters paramsPKIXClone = (PkixParameters)paramsPKIX.Clone(); + CheckCrl(dps[i], attrCert, paramsPKIXClone,validDate, issuerCert, certStatus, reasonsMask, + certPathCerts); + validCrlFound = true; + } + } + catch (Exception e) + { + lastException = new Exception("No valid CRL for distribution point found.", e); + } + } + + /* + * If the revocation status has not been determined, repeat the + * process above with any available CRLs not specified in a + * distribution point but issued by the certificate issuer. + */ + + if (certStatus.Status == CertStatus.Unrevoked && !reasonsMask.IsAllReasons) + { + try + { + /* + * assume a DP with both the reasons and the cRLIssuer + * fields omitted and a distribution point name of the + * certificate issuer. + */ + X509Name issuer; + try + { + issuer = X509Name.GetInstance(attrCert.Issuer.GetPrincipals()[0].GetEncoded()); + } + catch (Exception e) + { + throw new Exception("Issuer from certificate for CRL could not be reencoded.", e); + } + DistributionPoint dp = new DistributionPoint( + new DistributionPointName(0, new GeneralNames( + new GeneralName(GeneralName.DirectoryName, issuer))), null, null); + PkixParameters paramsPKIXClone = (PkixParameters) paramsPKIX.Clone(); + CheckCrl(dp, attrCert, paramsPKIXClone, validDate, + issuerCert, certStatus, reasonsMask, certPathCerts); + validCrlFound = true; + } + catch (Exception e) + { + lastException = new Exception("No valid CRL for distribution point found.", e); + } + } + + if (!validCrlFound) + throw new PkixCertPathValidatorException("No valid CRL found.", lastException); + + if (certStatus.Status != CertStatus.Unrevoked) + { + // This format is enforced by the NistCertPath tests + string formattedDate = certStatus.RevocationDate.Value.ToString("ddd MMM dd HH:mm:ss K yyyy"); + string message = "Attribute certificate revocation after " + formattedDate + ", reason: " + + Rfc3280CertPathUtilities.CrlReasons[certStatus.Status]; + throw new PkixCertPathValidatorException(message); + } + if (!reasonsMask.IsAllReasons + && certStatus.Status == CertStatus.Unrevoked) + { + certStatus.Status = CertStatus.Undetermined; + } + if (certStatus.Status == CertStatus.Undetermined) + { + throw new PkixCertPathValidatorException( + "Attribute certificate status could not be determined."); + } + } + + internal static void AdditionalChecks( + X509V2AttributeCertificate attrCert, + PkixParameters pkixParams) + { + // 1 + foreach (string oid in pkixParams.GetProhibitedACAttributes()) + { + if (attrCert.GetAttributes(oid) != null) + { + throw new PkixCertPathValidatorException( + "Attribute certificate contains prohibited attribute: " + + oid + "."); + } + } + foreach (string oid in pkixParams.GetNecessaryACAttributes()) + { + if (attrCert.GetAttributes(oid) == null) + { + throw new PkixCertPathValidatorException( + "Attribute certificate does not contain necessary attribute: " + + oid + "."); + } + } + } + + internal static void ProcessAttrCert5( + X509V2AttributeCertificate attrCert, + PkixParameters pkixParams) + { + try + { + attrCert.CheckValidity(PkixCertPathValidatorUtilities.GetValidDate(pkixParams)); + } + catch (CertificateExpiredException e) + { + throw new PkixCertPathValidatorException( + "Attribute certificate is not valid.", e); + } + catch (CertificateNotYetValidException e) + { + throw new PkixCertPathValidatorException( + "Attribute certificate is not valid.", e); + } + } + + internal static void ProcessAttrCert4( + X509Certificate acIssuerCert, + PkixParameters pkixParams) + { + var set = pkixParams.GetTrustedACIssuers(); + bool trusted = false; + foreach (TrustAnchor anchor in set) + { + var symbols = X509Name.RFC2253Symbols; + if (acIssuerCert.SubjectDN.ToString(false, symbols).Equals(anchor.CAName) + || acIssuerCert.Equals(anchor.TrustedCert)) + { + trusted = true; + } + } + if (!trusted) + { + throw new PkixCertPathValidatorException( + "Attribute certificate issuer is not directly trusted."); + } + } + + internal static void ProcessAttrCert3( + X509Certificate acIssuerCert, + PkixParameters pkixParams) + { + if (acIssuerCert.GetKeyUsage() != null + && (!acIssuerCert.GetKeyUsage()[0] && !acIssuerCert.GetKeyUsage()[1])) + { + throw new PkixCertPathValidatorException( + "Attribute certificate issuer public key cannot be used to validate digital signatures."); + } + if (acIssuerCert.GetBasicConstraints() != -1) + { + throw new PkixCertPathValidatorException( + "Attribute certificate issuer is also a public key certificate issuer."); + } + } + + internal static PkixCertPathValidatorResult ProcessAttrCert2( + PkixCertPath certPath, + PkixParameters pkixParams) + { + PkixCertPathValidator validator = new PkixCertPathValidator(); + + try + { + return validator.Validate(certPath, pkixParams); + } + catch (PkixCertPathValidatorException e) + { + throw new PkixCertPathValidatorException( + "Certification path for issuer certificate of attribute certificate could not be validated.", + e); + } + } + + /** + * Searches for a holder public key certificate and verifies its + * certification path. + * + * @param attrCert the attribute certificate. + * @param pkixParams The PKIX parameters. + * @return The certificate path of the holder certificate. + * @throws Exception if + *
      + *
    • no public key certificate can be found although holder + * information is given by an entity name or a base certificate + * ID
    • + *
    • support classes cannot be created
    • + *
    • no certification path for the public key certificate can + * be built
    • + *
    + */ + internal static PkixCertPath ProcessAttrCert1( + X509V2AttributeCertificate attrCert, + PkixParameters pkixParams) + { + PkixCertPathBuilderResult result = null; + // find holder PKCs + var holderPKCs = new HashSet(); + if (attrCert.Holder.GetIssuer() != null) + { + X509CertStoreSelector selector = new X509CertStoreSelector(); + selector.SerialNumber = attrCert.Holder.SerialNumber; + X509Name[] principals = attrCert.Holder.GetIssuer(); + for (int i = 0; i < principals.Length; i++) + { + // TODO Replace loop with a single multiprincipal selector (or don't even use selector) + try + { + selector.Issuer = principals[i]; + + CollectionUtilities.CollectMatches(holderPKCs, selector, pkixParams.GetStoresCert()); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException( + "Public key certificate for attribute certificate cannot be searched.", + e); + } + } + if (holderPKCs.Count < 1) + { + throw new PkixCertPathValidatorException( + "Public key certificate specified in base certificate ID for attribute certificate cannot be found."); + } + } + if (attrCert.Holder.GetEntityNames() != null) + { + X509CertStoreSelector selector = new X509CertStoreSelector(); + X509Name[] principals = attrCert.Holder.GetEntityNames(); + for (int i = 0; i < principals.Length; i++) + { + // TODO Replace loop with a single multiprincipal selector (or don't even use selector) + try + { + selector.Issuer = principals[i]; + + CollectionUtilities.CollectMatches(holderPKCs, selector, pkixParams.GetStoresCert()); + } + catch (Exception e) + { + throw new PkixCertPathValidatorException( + "Public key certificate for attribute certificate cannot be searched.", + e); + } + } + if (holderPKCs.Count < 1) + { + throw new PkixCertPathValidatorException( + "Public key certificate specified in entity name for attribute certificate cannot be found."); + } + } + + // verify cert paths for PKCs + PkixBuilderParameters parameters = PkixBuilderParameters.GetInstance(pkixParams); + + PkixCertPathValidatorException lastException = null; + foreach (X509Certificate cert in holderPKCs) + { + X509CertStoreSelector certSelector = new X509CertStoreSelector(); + certSelector.Certificate = cert; + + parameters.SetTargetConstraintsCert(certSelector); + + PkixCertPathBuilder builder = new PkixCertPathBuilder(); + + try + { + result = builder.Build(parameters); + } + catch (PkixCertPathBuilderException e) + { + lastException = new PkixCertPathValidatorException( + "Certification path for public key certificate of attribute certificate could not be build.", + e); + } + } + if (lastException != null) + { + throw lastException; + } + return result.CertPath; + } + + /** + * + * Checks a distribution point for revocation information for the + * certificate attrCert. + * + * @param dp The distribution point to consider. + * @param attrCert The attribute certificate which should be checked. + * @param paramsPKIX PKIX parameters. + * @param validDate The date when the certificate revocation status should + * be checked. + * @param issuerCert Certificate to check if it is revoked. + * @param reasonMask The reasons mask which is already checked. + * @param certPathCerts The certificates of the certification path to be + * checked. + * @throws Exception if the certificate is revoked or the status + * cannot be checked or some error occurs. + */ + private static void CheckCrl( + DistributionPoint dp, + X509V2AttributeCertificate attrCert, + PkixParameters paramsPKIX, + DateTime validDate, + X509Certificate issuerCert, + CertStatus certStatus, + ReasonsMask reasonMask, + IList certPathCerts) + { + /* + * 4.3.6 No Revocation Available + * + * The noRevAvail extension, defined in [X.509-2000], allows an AC + * issuer to indicate that no revocation information will be made + * available for this AC. + */ + if (attrCert.GetExtensionValue(X509Extensions.NoRevAvail) != null) + return; + + DateTime currentDate = DateTime.UtcNow; + if (validDate.CompareTo(currentDate) > 0) + throw new Exception("Validation time is in future."); + + // (a) + /* + * We always get timely valid CRLs, so there is no step (a) (1). + * "locally cached" CRLs are assumed to be in getStore(), additional + * CRLs must be enabled in the ExtendedPkixParameters and are in + * getAdditionalStore() + */ + var crls = PkixCertPathValidatorUtilities.GetCompleteCrls(dp, attrCert, currentDate, paramsPKIX); + bool validCrlFound = false; + Exception lastException = null; + + var crl_iter = crls.GetEnumerator(); + + while (crl_iter.MoveNext() + && certStatus.Status == CertStatus.Unrevoked + && !reasonMask.IsAllReasons) + { + try + { + X509Crl crl = crl_iter.Current; + + // (d) + ReasonsMask interimReasonsMask = Rfc3280CertPathUtilities.ProcessCrlD(crl, dp); + + // (e) + /* + * The reasons mask is updated at the end, so only valid CRLs + * can update it. If this CRL does not contain new reasons it + * must be ignored. + */ + if (!interimReasonsMask.HasNewReasons(reasonMask)) + continue; + + // (f) + var keys = Rfc3280CertPathUtilities.ProcessCrlF(crl, attrCert,null, null, paramsPKIX, + certPathCerts); + + // (g) + AsymmetricKeyParameter pubKey = Rfc3280CertPathUtilities.ProcessCrlG(crl, keys); + + X509Crl deltaCRL = null; + + if (paramsPKIX.IsUseDeltasEnabled) + { + // get delta CRLs + var deltaCRLs = PkixCertPathValidatorUtilities.GetDeltaCrls(currentDate, paramsPKIX, crl); + + // we only want one valid delta CRL + // (h) + deltaCRL = Rfc3280CertPathUtilities.ProcessCrlH(deltaCRLs, pubKey); + } + + /* + * CRL must be be valid at the current time, not the validation + * time. If a certificate is revoked with reason keyCompromise, + * cACompromise, it can be used for forgery, also for the past. + * This reason may not be contained in older CRLs. + */ + + /* + * in the chain model signatures stay valid also after the + * certificate has been expired, so they do not have to be in + * the CRL vality time + */ + if (paramsPKIX.ValidityModel != PkixParameters.ChainValidityModel) + { + /* + * if a certificate has expired, but was revoked, it is not + * more in the CRL, so it would be regarded as valid if the + * first check is not done + */ + if (attrCert.NotAfter.CompareTo(crl.ThisUpdate) < 0) + throw new Exception("No valid CRL for current time found."); + } + + Rfc3280CertPathUtilities.ProcessCrlB1(dp, attrCert, crl); + + // (b) (2) + Rfc3280CertPathUtilities.ProcessCrlB2(dp, attrCert, crl); + + // (c) + Rfc3280CertPathUtilities.ProcessCrlC(deltaCRL, crl, paramsPKIX); + + // (i) + Rfc3280CertPathUtilities.ProcessCrlI(validDate, deltaCRL, + attrCert, certStatus, paramsPKIX); + + // (j) + Rfc3280CertPathUtilities.ProcessCrlJ(validDate, crl, attrCert, + certStatus); + + // (k) + if (certStatus.Status == CrlReason.RemoveFromCrl) + { + certStatus.Status = CertStatus.Unrevoked; + } + + // update reasons mask + reasonMask.AddReasons(interimReasonsMask); + validCrlFound = true; + } + catch (Exception e) + { + lastException = e; + } + } + + if (!validCrlFound) + throw lastException; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/Rfc3281CertPathUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/Rfc3281CertPathUtilities.cs.meta new file mode 100644 index 000000000..430c5cf42 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/Rfc3281CertPathUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d710687c541762b48abd98c0e1a2246c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/TrustAnchor.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/TrustAnchor.cs new file mode 100644 index 000000000..66ddfb244 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/TrustAnchor.cs @@ -0,0 +1,261 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Pkix +{ + /// + /// A trust anchor or most-trusted Certification Authority (CA). + /// + /// This class represents a "most-trusted CA", which is used as a trust anchor + /// for validating X.509 certification paths. A most-trusted CA includes the + /// public key of the CA, the CA's name, and any constraints upon the set of + /// paths which may be validated using this key. These parameters can be + /// specified in the form of a trusted X509Certificate or as individual + /// parameters. + /// + public class TrustAnchor + { + private readonly AsymmetricKeyParameter pubKey; + private readonly string caName; + private readonly X509Name caPrincipal; + private readonly X509Certificate trustedCert; + private byte[] ncBytes; + private NameConstraints nc; + + /// + /// Creates an instance of TrustAnchor with the specified X509Certificate and + /// optional name constraints, which are intended to be used as additional + /// constraints when validating an X.509 certification path. + /// The name constraints are specified as a byte array. This byte array + /// should contain the DER encoded form of the name constraints, as they + /// would appear in the NameConstraints structure defined in RFC 2459 and + /// X.509. The ASN.1 definition of this structure appears below. + /// + ///
    +	    ///	NameConstraints ::= SEQUENCE {
    +	    ///		permittedSubtrees       [0]     GeneralSubtrees OPTIONAL,
    +	    ///		excludedSubtrees        [1]     GeneralSubtrees OPTIONAL }
    +	    ///	   
    +        /// GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
    +        /// 
    +        ///		GeneralSubtree ::= SEQUENCE {
    +        ///		base                    GeneralName,
    +        ///		minimum         [0]     BaseDistance DEFAULT 0,
    +        ///		maximum         [1]     BaseDistance OPTIONAL }
    +        ///		
    +        ///		BaseDistance ::= INTEGER (0..MAX)
    +		///
    +		///		GeneralName ::= CHOICE {
    +		///		otherName                       [0]     OtherName,
    +		///		rfc822Name                      [1]     IA5String,
    +		///		dNSName                         [2]     IA5String,
    +		///		x400Address                     [3]     ORAddress,
    +		///		directoryName                   [4]     Name,
    +		///		ediPartyName                    [5]     EDIPartyName,
    +		///		uniformResourceIdentifier       [6]     IA5String,
    +		///		iPAddress                       [7]     OCTET STRING,
    +		///		registeredID                    [8]     OBJECT IDENTIFIER}
    +		///	
    + /// + /// Note that the name constraints byte array supplied is cloned to protect + /// against subsequent modifications. + ///
    + /// a trusted X509Certificate + /// a byte array containing the ASN.1 DER encoding of a + /// NameConstraints extension to be used for checking name + /// constraints. Only the value of the extension is included, not + /// the OID or criticality flag. Specify null to omit the + /// parameter. + /// if the specified X509Certificate is null + public TrustAnchor( + X509Certificate trustedCert, + byte[] nameConstraints) + { + if (trustedCert == null) + throw new ArgumentNullException("trustedCert"); + + this.trustedCert = trustedCert; + this.pubKey = null; + this.caName = null; + this.caPrincipal = null; + setNameConstraints(nameConstraints); + } + + /// + /// Creates an instance of TrustAnchor where the + /// most-trusted CA is specified as an X500Principal and public key. + /// + /// + ///

    + /// Name constraints are an optional parameter, and are intended to be used + /// as additional constraints when validating an X.509 certification path. + ///

    + /// The name constraints are specified as a byte array. This byte array + /// contains the DER encoded form of the name constraints, as they + /// would appear in the NameConstraints structure defined in RFC 2459 + /// and X.509. The ASN.1 notation for this structure is supplied in the + /// documentation for the other constructors. + ///

    + /// Note that the name constraints byte array supplied here is cloned to + /// protect against subsequent modifications. + ///

    + ///
    + /// the name of the most-trusted CA as X509Name + /// the public key of the most-trusted CA + /// + /// a byte array containing the ASN.1 DER encoding of a NameConstraints extension to + /// be used for checking name constraints. Only the value of the extension is included, + /// not the OID or criticality flag. Specify null to omit the parameter. + /// + /// + /// if caPrincipal or pubKey is null + /// + public TrustAnchor( + X509Name caPrincipal, + AsymmetricKeyParameter pubKey, + byte[] nameConstraints) + { + if (caPrincipal == null) + throw new ArgumentNullException("caPrincipal"); + if (pubKey == null) + throw new ArgumentNullException("pubKey"); + + this.trustedCert = null; + this.caPrincipal = caPrincipal; + this.caName = caPrincipal.ToString(); + this.pubKey = pubKey; + setNameConstraints(nameConstraints); + } + + /// + /// Creates an instance of TrustAnchor where the most-trusted + /// CA is specified as a distinguished name and public key. Name constraints + /// are an optional parameter, and are intended to be used as additional + /// constraints when validating an X.509 certification path. + ///
    + /// The name constraints are specified as a byte array. This byte array + /// contains the DER encoded form of the name constraints, as they would + /// appear in the NameConstraints structure defined in RFC 2459 and X.509. + ///
    + /// the X.500 distinguished name of the most-trusted CA in RFC + /// 2253 string format + /// the public key of the most-trusted CA + /// a byte array containing the ASN.1 DER encoding of a + /// NameConstraints extension to be used for checking name + /// constraints. Only the value of the extension is included, not + /// the OID or criticality flag. Specify null to omit the + /// parameter. + /// throws NullPointerException, IllegalArgumentException + public TrustAnchor( + string caName, + AsymmetricKeyParameter pubKey, + byte[] nameConstraints) + { + if (caName == null) + throw new ArgumentNullException("caName"); + if (pubKey == null) + throw new ArgumentNullException("pubKey"); + if (caName.Length == 0) + throw new ArgumentException("caName can not be an empty string"); + + this.caPrincipal = new X509Name(caName); + this.pubKey = pubKey; + this.caName = caName; + this.trustedCert = null; + setNameConstraints(nameConstraints); + } + + /// + /// Returns the most-trusted CA certificate. + /// + public X509Certificate TrustedCert + { + get { return this.trustedCert; } + } + + /// + /// Returns the name of the most-trusted CA as an X509Name. + /// + public X509Name CA + { + get { return this.caPrincipal; } + } + + /// + /// Returns the name of the most-trusted CA in RFC 2253 string format. + /// + public string CAName + { + get { return this.caName; } + } + + /// + /// Returns the public key of the most-trusted CA. + /// + public AsymmetricKeyParameter CAPublicKey + { + get { return this.pubKey; } + } + + /// + /// Decode the name constraints and clone them if not null. + /// + private void setNameConstraints( + byte[] bytes) + { + if (bytes == null) + { + ncBytes = null; + nc = null; + } + else + { + ncBytes = (byte[]) bytes.Clone(); + // validate DER encoding + //nc = new NameConstraintsExtension(Boolean.FALSE, bytes); + nc = NameConstraints.GetInstance(Asn1Object.FromByteArray(bytes)); + } + } + + public byte[] GetNameConstraints + { + get { return Arrays.Clone(ncBytes); } + } + + /// + /// Returns a formatted string describing the TrustAnchor. + /// + /// a formatted string describing the TrustAnchor + public override string ToString() + { + // TODO Some of the sub-objects might not implement ToString() properly + StringBuilder sb = new StringBuilder(); + sb.AppendLine("["); + if (this.pubKey != null) + { + sb.Append(" Trusted CA Public Key: ").Append(this.pubKey).AppendLine(); + sb.Append(" Trusted CA Issuer Name: ").Append(this.caName).AppendLine(); + } + else + { + sb.Append(" Trusted CA cert: ").Append(this.TrustedCert).AppendLine(); + } + if (nc != null) + { + sb.Append(" Name Constraints: ").Append(nc).AppendLine(); + } + return sb.ToString(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/TrustAnchor.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/TrustAnchor.cs.meta new file mode 100644 index 000000000..7d545c99c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/pkix/TrustAnchor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d36de1eed444fb4faa2bdef5ce1d96c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security.meta new file mode 100644 index 000000000..959f2742a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2c421ef18ca1f844c8134a15061c4605 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/AgreementUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/AgreementUtilities.cs new file mode 100644 index 000000000..a24f173b2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/AgreementUtilities.cs @@ -0,0 +1,123 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.EdEC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.Kdf; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + /// + /// Utility class for creating IBasicAgreement objects from their names/Oids + /// + public static class AgreementUtilities + { + private static readonly IDictionary Algorithms = + new Dictionary(StringComparer.OrdinalIgnoreCase); + + static AgreementUtilities() + { + Algorithms[X9ObjectIdentifiers.DHSinglePassCofactorDHSha1KdfScheme.Id] = "ECCDHWITHSHA1KDF"; + Algorithms[X9ObjectIdentifiers.DHSinglePassStdDHSha1KdfScheme.Id] = "ECDHWITHSHA1KDF"; + Algorithms[X9ObjectIdentifiers.MqvSinglePassSha1KdfScheme.Id] = "ECMQVWITHSHA1KDF"; + + Algorithms[EdECObjectIdentifiers.id_X25519.Id] = "X25519"; + Algorithms[EdECObjectIdentifiers.id_X448.Id] = "X448"; + } + + public static IBasicAgreement GetBasicAgreement( + DerObjectIdentifier oid) + { + return GetBasicAgreement(oid.Id); + } + + public static IBasicAgreement GetBasicAgreement( + string algorithm) + { + string mechanism = GetMechanism(algorithm); + + if (mechanism == "DH" || mechanism == "DIFFIEHELLMAN") + return new DHBasicAgreement(); + + if (mechanism == "ECDH") + return new ECDHBasicAgreement(); + + if (mechanism == "ECDHC" || mechanism == "ECCDH") + return new ECDHCBasicAgreement(); + + if (mechanism == "ECMQV") + return new ECMqvBasicAgreement(); + + throw new SecurityUtilityException("Basic Agreement " + algorithm + " not recognised."); + } + + public static IBasicAgreement GetBasicAgreementWithKdf( + DerObjectIdentifier oid, + string wrapAlgorithm) + { + return GetBasicAgreementWithKdf(oid.Id, wrapAlgorithm); + } + + public static IBasicAgreement GetBasicAgreementWithKdf( + string agreeAlgorithm, + string wrapAlgorithm) + { + string mechanism = GetMechanism(agreeAlgorithm); + + // 'DHWITHSHA1KDF' retained for backward compatibility + if (mechanism == "DHWITHSHA1KDF" || mechanism == "ECDHWITHSHA1KDF") + return new ECDHWithKdfBasicAgreement( + wrapAlgorithm, + new ECDHKekGenerator( + new Sha1Digest())); + + if (mechanism == "ECMQVWITHSHA1KDF") + return new ECMqvWithKdfBasicAgreement( + wrapAlgorithm, + new ECDHKekGenerator( + new Sha1Digest())); + + throw new SecurityUtilityException("Basic Agreement (with KDF) " + agreeAlgorithm + " not recognised."); + } + + public static IRawAgreement GetRawAgreement( + DerObjectIdentifier oid) + { + return GetRawAgreement(oid.Id); + } + + public static IRawAgreement GetRawAgreement(string algorithm) + { + string mechanism = GetMechanism(algorithm); + + if (mechanism == "X25519") + return new X25519Agreement(); + + if (mechanism == "X448") + return new X448Agreement(); + + throw new SecurityUtilityException("Raw Agreement " + algorithm + " not recognised."); + } + + public static string GetAlgorithmName(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(Algorithms, oid.Id); + } + + private static string GetMechanism(string algorithm) + { + var mechanism = CollectionUtilities.GetValueOrKey(Algorithms, algorithm); + + return mechanism.ToUpperInvariant(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/AgreementUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/AgreementUtilities.cs.meta new file mode 100644 index 000000000..ef3db30d5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/AgreementUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0cbde65561e82da43be786150b90a32b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/CipherUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/CipherUtilities.cs new file mode 100644 index 000000000..a296bb267 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/CipherUtilities.cs @@ -0,0 +1,804 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Kisa; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nsri; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ntt; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Encodings; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Paddings; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + /// + /// Cipher Utility class contains methods that can not be specifically grouped into other classes. + /// + public static class CipherUtilities + { + private enum CipherAlgorithm { + AES, + ARC4, + ARIA, + BLOWFISH, + CAMELLIA, + CAST5, + CAST6, + CHACHA, + CHACHA20_POLY1305, + CHACHA7539, + DES, + DESEDE, + ELGAMAL, + GOST28147, + HC128, + HC256, + IDEA, + NOEKEON, + PBEWITHSHAAND128BITRC4, + PBEWITHSHAAND40BITRC4, + RC2, + RC5, + RC5_64, + RC6, + RIJNDAEL, + RSA, + SALSA20, + SEED, + SERPENT, + SKIPJACK, + SM4, + TEA, + THREEFISH_256, + THREEFISH_512, + THREEFISH_1024, + TNEPRES, + TWOFISH, + VMPC, + VMPC_KSA3, + XTEA, + }; + + private enum CipherMode { ECB, NONE, CBC, CCM, CFB, CTR, CTS, EAX, GCM, GOFB, OCB, OFB, OPENPGPCFB, SIC }; + private enum CipherPadding + { + NOPADDING, + RAW, + ISO10126PADDING, + ISO10126D2PADDING, + ISO10126_2PADDING, + ISO7816_4PADDING, + ISO9797_1PADDING, + ISO9796_1, + ISO9796_1PADDING, + OAEP, + OAEPPADDING, + OAEPWITHMD5ANDMGF1PADDING, + OAEPWITHSHA1ANDMGF1PADDING, + OAEPWITHSHA_1ANDMGF1PADDING, + OAEPWITHSHA224ANDMGF1PADDING, + OAEPWITHSHA_224ANDMGF1PADDING, + OAEPWITHSHA256ANDMGF1PADDING, + OAEPWITHSHA_256ANDMGF1PADDING, + OAEPWITHSHA256ANDMGF1WITHSHA256PADDING, + OAEPWITHSHA_256ANDMGF1WITHSHA_256PADDING, + OAEPWITHSHA256ANDMGF1WITHSHA1PADDING, + OAEPWITHSHA_256ANDMGF1WITHSHA_1PADDING, + OAEPWITHSHA384ANDMGF1PADDING, + OAEPWITHSHA_384ANDMGF1PADDING, + OAEPWITHSHA512ANDMGF1PADDING, + OAEPWITHSHA_512ANDMGF1PADDING, + PKCS1, + PKCS1PADDING, + PKCS5, + PKCS5PADDING, + PKCS7, + PKCS7PADDING, + TBCPADDING, + WITHCTS, + X923PADDING, + ZEROBYTEPADDING, + }; + + private static readonly Dictionary Algorithms = + new Dictionary(StringComparer.OrdinalIgnoreCase); + + static CipherUtilities() + { + // Signal to obfuscation tools not to change enum constants + Enums.GetArbitraryValue().ToString(); + Enums.GetArbitraryValue().ToString(); + Enums.GetArbitraryValue().ToString(); + + // TODO Flesh out the list of aliases + + Algorithms[NistObjectIdentifiers.IdAes128Cbc.Id] = "AES/CBC/PKCS7PADDING"; + Algorithms[NistObjectIdentifiers.IdAes192Cbc.Id] = "AES/CBC/PKCS7PADDING"; + Algorithms[NistObjectIdentifiers.IdAes256Cbc.Id] = "AES/CBC/PKCS7PADDING"; + + Algorithms[NistObjectIdentifiers.IdAes128Ccm.Id] = "AES/CCM/NOPADDING"; + Algorithms[NistObjectIdentifiers.IdAes192Ccm.Id] = "AES/CCM/NOPADDING"; + Algorithms[NistObjectIdentifiers.IdAes256Ccm.Id] = "AES/CCM/NOPADDING"; + + Algorithms[NistObjectIdentifiers.IdAes128Cfb.Id] = "AES/CFB/NOPADDING"; + Algorithms[NistObjectIdentifiers.IdAes192Cfb.Id] = "AES/CFB/NOPADDING"; + Algorithms[NistObjectIdentifiers.IdAes256Cfb.Id] = "AES/CFB/NOPADDING"; + + Algorithms[NistObjectIdentifiers.IdAes128Ecb.Id] = "AES/ECB/PKCS7PADDING"; + Algorithms[NistObjectIdentifiers.IdAes192Ecb.Id] = "AES/ECB/PKCS7PADDING"; + Algorithms[NistObjectIdentifiers.IdAes256Ecb.Id] = "AES/ECB/PKCS7PADDING"; + Algorithms["AES//PKCS7"] = "AES/ECB/PKCS7PADDING"; + Algorithms["AES//PKCS7PADDING"] = "AES/ECB/PKCS7PADDING"; + Algorithms["AES//PKCS5"] = "AES/ECB/PKCS7PADDING"; + Algorithms["AES//PKCS5PADDING"] = "AES/ECB/PKCS7PADDING"; + + Algorithms[NistObjectIdentifiers.IdAes128Gcm.Id] = "AES/GCM/NOPADDING"; + Algorithms[NistObjectIdentifiers.IdAes192Gcm.Id] = "AES/GCM/NOPADDING"; + Algorithms[NistObjectIdentifiers.IdAes256Gcm.Id] = "AES/GCM/NOPADDING"; + + Algorithms[NistObjectIdentifiers.IdAes128Ofb.Id] = "AES/OFB/NOPADDING"; + Algorithms[NistObjectIdentifiers.IdAes192Ofb.Id] = "AES/OFB/NOPADDING"; + Algorithms[NistObjectIdentifiers.IdAes256Ofb.Id] = "AES/OFB/NOPADDING"; + + Algorithms[NsriObjectIdentifiers.id_aria128_cbc.Id] = "ARIA/CBC/PKCS7PADDING"; + Algorithms[NsriObjectIdentifiers.id_aria192_cbc.Id] = "ARIA/CBC/PKCS7PADDING"; + Algorithms[NsriObjectIdentifiers.id_aria256_cbc.Id] = "ARIA/CBC/PKCS7PADDING"; + + Algorithms[NsriObjectIdentifiers.id_aria128_ccm.Id] = "ARIA/CCM/NOPADDING"; + Algorithms[NsriObjectIdentifiers.id_aria192_ccm.Id] = "ARIA/CCM/NOPADDING"; + Algorithms[NsriObjectIdentifiers.id_aria256_ccm.Id] = "ARIA/CCM/NOPADDING"; + + Algorithms[NsriObjectIdentifiers.id_aria128_cfb.Id] = "ARIA/CFB/NOPADDING"; + Algorithms[NsriObjectIdentifiers.id_aria192_cfb.Id] = "ARIA/CFB/NOPADDING"; + Algorithms[NsriObjectIdentifiers.id_aria256_cfb.Id] = "ARIA/CFB/NOPADDING"; + + Algorithms[NsriObjectIdentifiers.id_aria128_ctr.Id] = "ARIA/CTR/NOPADDING"; + Algorithms[NsriObjectIdentifiers.id_aria192_ctr.Id] = "ARIA/CTR/NOPADDING"; + Algorithms[NsriObjectIdentifiers.id_aria256_ctr.Id] = "ARIA/CTR/NOPADDING"; + + Algorithms[NsriObjectIdentifiers.id_aria128_ecb.Id] = "ARIA/ECB/PKCS7PADDING"; + Algorithms[NsriObjectIdentifiers.id_aria192_ecb.Id] = "ARIA/ECB/PKCS7PADDING"; + Algorithms[NsriObjectIdentifiers.id_aria256_ecb.Id] = "ARIA/ECB/PKCS7PADDING"; + Algorithms["ARIA//PKCS7"] = "ARIA/ECB/PKCS7PADDING"; + Algorithms["ARIA//PKCS7PADDING"] = "ARIA/ECB/PKCS7PADDING"; + Algorithms["ARIA//PKCS5"] = "ARIA/ECB/PKCS7PADDING"; + Algorithms["ARIA//PKCS5PADDING"] = "ARIA/ECB/PKCS7PADDING"; + + Algorithms[NsriObjectIdentifiers.id_aria128_gcm.Id] = "ARIA/GCM/NOPADDING"; + Algorithms[NsriObjectIdentifiers.id_aria192_gcm.Id] = "ARIA/GCM/NOPADDING"; + Algorithms[NsriObjectIdentifiers.id_aria256_gcm.Id] = "ARIA/GCM/NOPADDING"; + + Algorithms[NsriObjectIdentifiers.id_aria128_ofb.Id] = "ARIA/OFB/NOPADDING"; + Algorithms[NsriObjectIdentifiers.id_aria192_ofb.Id] = "ARIA/OFB/NOPADDING"; + Algorithms[NsriObjectIdentifiers.id_aria256_ofb.Id] = "ARIA/OFB/NOPADDING"; + + Algorithms["RSA/ECB/PKCS1"] = "RSA//PKCS1PADDING"; + Algorithms["RSA/ECB/PKCS1PADDING"] = "RSA//PKCS1PADDING"; + Algorithms[PkcsObjectIdentifiers.RsaEncryption.Id] = "RSA//PKCS1PADDING"; + Algorithms[PkcsObjectIdentifiers.IdRsaesOaep.Id] = "RSA//OAEPPADDING"; + + Algorithms[OiwObjectIdentifiers.DesCbc.Id] = "DES/CBC"; + Algorithms[OiwObjectIdentifiers.DesCfb.Id] = "DES/CFB"; + Algorithms[OiwObjectIdentifiers.DesEcb.Id] = "DES/ECB"; + Algorithms[OiwObjectIdentifiers.DesOfb.Id] = "DES/OFB"; + Algorithms[OiwObjectIdentifiers.DesEde.Id] = "DESEDE"; + Algorithms["TDEA"] = "DESEDE"; + Algorithms[PkcsObjectIdentifiers.DesEde3Cbc.Id] = "DESEDE/CBC"; + Algorithms[PkcsObjectIdentifiers.RC2Cbc.Id] = "RC2/CBC"; + Algorithms["1.3.6.1.4.1.188.7.1.1.2"] = "IDEA/CBC"; + Algorithms["1.2.840.113533.7.66.10"] = "CAST5/CBC"; + + Algorithms["RC4"] = "ARC4"; + Algorithms["ARCFOUR"] = "ARC4"; + Algorithms["1.2.840.113549.3.4"] = "ARC4"; + + + + Algorithms["PBEWITHSHA1AND128BITRC4"] = "PBEWITHSHAAND128BITRC4"; + Algorithms[PkcsObjectIdentifiers.PbeWithShaAnd128BitRC4.Id] = "PBEWITHSHAAND128BITRC4"; + Algorithms["PBEWITHSHA1AND40BITRC4"] = "PBEWITHSHAAND40BITRC4"; + Algorithms[PkcsObjectIdentifiers.PbeWithShaAnd40BitRC4.Id] = "PBEWITHSHAAND40BITRC4"; + + Algorithms["PBEWITHSHA1ANDDES"] = "PBEWITHSHA1ANDDES-CBC"; + Algorithms[PkcsObjectIdentifiers.PbeWithSha1AndDesCbc.Id] = "PBEWITHSHA1ANDDES-CBC"; + Algorithms["PBEWITHSHA1ANDRC2"] = "PBEWITHSHA1ANDRC2-CBC"; + Algorithms[PkcsObjectIdentifiers.PbeWithSha1AndRC2Cbc.Id] = "PBEWITHSHA1ANDRC2-CBC"; + + Algorithms["PBEWITHSHA1AND3-KEYTRIPLEDES-CBC"] = "PBEWITHSHAAND3-KEYTRIPLEDES-CBC"; + Algorithms["PBEWITHSHAAND3KEYTRIPLEDES"] = "PBEWITHSHAAND3-KEYTRIPLEDES-CBC"; + Algorithms[PkcsObjectIdentifiers.PbeWithShaAnd3KeyTripleDesCbc.Id] = "PBEWITHSHAAND3-KEYTRIPLEDES-CBC"; + Algorithms["PBEWITHSHA1ANDDESEDE"] = "PBEWITHSHAAND3-KEYTRIPLEDES-CBC"; + + Algorithms["PBEWITHSHA1AND2-KEYTRIPLEDES-CBC"] = "PBEWITHSHAAND2-KEYTRIPLEDES-CBC"; + Algorithms[PkcsObjectIdentifiers.PbeWithShaAnd2KeyTripleDesCbc.Id] = "PBEWITHSHAAND2-KEYTRIPLEDES-CBC"; + + Algorithms["PBEWITHSHA1AND128BITRC2-CBC"] = "PBEWITHSHAAND128BITRC2-CBC"; + Algorithms[PkcsObjectIdentifiers.PbeWithShaAnd128BitRC2Cbc.Id] = "PBEWITHSHAAND128BITRC2-CBC"; + + Algorithms["PBEWITHSHA1AND40BITRC2-CBC"] = "PBEWITHSHAAND40BITRC2-CBC"; + Algorithms[PkcsObjectIdentifiers.PbewithShaAnd40BitRC2Cbc.Id] = "PBEWITHSHAAND40BITRC2-CBC"; + + Algorithms["PBEWITHSHA1AND128BITAES-CBC-BC"] = "PBEWITHSHAAND128BITAES-CBC-BC"; + Algorithms["PBEWITHSHA-1AND128BITAES-CBC-BC"] = "PBEWITHSHAAND128BITAES-CBC-BC"; + + Algorithms["PBEWITHSHA1AND192BITAES-CBC-BC"] = "PBEWITHSHAAND192BITAES-CBC-BC"; + Algorithms["PBEWITHSHA-1AND192BITAES-CBC-BC"] = "PBEWITHSHAAND192BITAES-CBC-BC"; + + Algorithms["PBEWITHSHA1AND256BITAES-CBC-BC"] = "PBEWITHSHAAND256BITAES-CBC-BC"; + Algorithms["PBEWITHSHA-1AND256BITAES-CBC-BC"] = "PBEWITHSHAAND256BITAES-CBC-BC"; + + Algorithms["PBEWITHSHA-256AND128BITAES-CBC-BC"] = "PBEWITHSHA256AND128BITAES-CBC-BC"; + Algorithms["PBEWITHSHA-256AND192BITAES-CBC-BC"] = "PBEWITHSHA256AND192BITAES-CBC-BC"; + Algorithms["PBEWITHSHA-256AND256BITAES-CBC-BC"] = "PBEWITHSHA256AND256BITAES-CBC-BC"; + + + Algorithms["GOST"] = "GOST28147"; + Algorithms["GOST-28147"] = "GOST28147"; + Algorithms[CryptoProObjectIdentifiers.GostR28147Gcfb.Id] = "GOST28147/CBC/PKCS7PADDING"; + + Algorithms["RC5-32"] = "RC5"; + + Algorithms[NttObjectIdentifiers.IdCamellia128Cbc.Id] = "CAMELLIA/CBC/PKCS7PADDING"; + Algorithms[NttObjectIdentifiers.IdCamellia192Cbc.Id] = "CAMELLIA/CBC/PKCS7PADDING"; + Algorithms[NttObjectIdentifiers.IdCamellia256Cbc.Id] = "CAMELLIA/CBC/PKCS7PADDING"; + + Algorithms[KisaObjectIdentifiers.IdSeedCbc.Id] = "SEED/CBC/PKCS7PADDING"; + + Algorithms["1.3.6.1.4.1.3029.1.2"] = "BLOWFISH/CBC"; + + Algorithms["CHACHA20"] = "CHACHA7539"; + Algorithms[PkcsObjectIdentifiers.IdAlgAeadChaCha20Poly1305.Id] = "CHACHA20-POLY1305"; + } + + public static IBufferedCipher GetCipher( + DerObjectIdentifier oid) + { + return GetCipher(oid.Id); + } + + public static IBufferedCipher GetCipher(string algorithm) + { + if (algorithm == null) + throw new ArgumentNullException(nameof(algorithm)); + + algorithm = CollectionUtilities.GetValueOrKey(Algorithms, algorithm).ToUpperInvariant(); + + IBasicAgreement iesAgreement = null; + if (algorithm == "IES") + { + iesAgreement = new DHBasicAgreement(); + } + else if (algorithm == "ECIES") + { + iesAgreement = new ECDHBasicAgreement(); + } + + if (iesAgreement != null) + { + return new BufferedIesCipher( + new IesEngine( + iesAgreement, + new Kdf2BytesGenerator( + new Sha1Digest()), + new HMac( + new Sha1Digest()))); + } + + + + if (Org.BouncyCastle.Utilities.Platform.StartsWith(algorithm, "PBE")) + { + if (Org.BouncyCastle.Utilities.Platform.EndsWith(algorithm, "-CBC")) + { + if (algorithm == "PBEWITHSHA1ANDDES-CBC") + { + return new PaddedBufferedBlockCipher( + new CbcBlockCipher(new DesEngine())); + } + else if (algorithm == "PBEWITHSHA1ANDRC2-CBC") + { + return new PaddedBufferedBlockCipher( + new CbcBlockCipher(new RC2Engine())); + } + else if (Strings.IsOneOf(algorithm, + "PBEWITHSHAAND2-KEYTRIPLEDES-CBC", "PBEWITHSHAAND3-KEYTRIPLEDES-CBC")) + { + return new PaddedBufferedBlockCipher( + new CbcBlockCipher(new DesEdeEngine())); + } + else if (Strings.IsOneOf(algorithm, + "PBEWITHSHAAND128BITRC2-CBC", "PBEWITHSHAAND40BITRC2-CBC")) + { + return new PaddedBufferedBlockCipher( + new CbcBlockCipher(new RC2Engine())); + } + } + else if (Org.BouncyCastle.Utilities.Platform.EndsWith(algorithm, "-BC") || Org.BouncyCastle.Utilities.Platform.EndsWith(algorithm, "-OPENSSL")) + { + if (Strings.IsOneOf(algorithm, + "PBEWITHSHAAND128BITAES-CBC-BC", + "PBEWITHSHAAND192BITAES-CBC-BC", + "PBEWITHSHAAND256BITAES-CBC-BC", + "PBEWITHSHA256AND128BITAES-CBC-BC", + "PBEWITHSHA256AND192BITAES-CBC-BC", + "PBEWITHSHA256AND256BITAES-CBC-BC", + "PBEWITHMD5AND128BITAES-CBC-OPENSSL", + "PBEWITHMD5AND192BITAES-CBC-OPENSSL", + "PBEWITHMD5AND256BITAES-CBC-OPENSSL")) + { + return new PaddedBufferedBlockCipher( + new CbcBlockCipher(AesUtilities.CreateEngine())); + } + } + } + + + + string[] parts = algorithm.Split('/'); + + IAeadCipher aeadCipher = null; + IBlockCipher blockCipher = null; + IAsymmetricBlockCipher asymBlockCipher = null; + IStreamCipher streamCipher = null; + + string algorithmName = CollectionUtilities.GetValueOrKey(Algorithms, parts[0]).ToUpperInvariant(); + + CipherAlgorithm cipherAlgorithm; + try + { + cipherAlgorithm = Enums.GetEnumValue(algorithmName); + } + catch (ArgumentException) + { + throw new SecurityUtilityException("Cipher " + algorithm + " not recognised."); + } + + switch (cipherAlgorithm) + { + case CipherAlgorithm.AES: + blockCipher = AesUtilities.CreateEngine(); + break; + case CipherAlgorithm.ARC4: + streamCipher = new RC4Engine(); + break; + case CipherAlgorithm.ARIA: + blockCipher = new AriaEngine(); + break; + case CipherAlgorithm.BLOWFISH: + blockCipher = new BlowfishEngine(); + break; + case CipherAlgorithm.CAMELLIA: + blockCipher = new CamelliaEngine(); + break; + case CipherAlgorithm.CAST5: + blockCipher = new Cast5Engine(); + break; + case CipherAlgorithm.CAST6: + blockCipher = new Cast6Engine(); + break; + case CipherAlgorithm.CHACHA: + streamCipher = new ChaChaEngine(); + break; + case CipherAlgorithm.CHACHA20_POLY1305: + aeadCipher = new ChaCha20Poly1305(); + break; + case CipherAlgorithm.CHACHA7539: + streamCipher = new ChaCha7539Engine(); + break; + case CipherAlgorithm.DES: + blockCipher = new DesEngine(); + break; + case CipherAlgorithm.DESEDE: + blockCipher = new DesEdeEngine(); + break; + case CipherAlgorithm.ELGAMAL: + asymBlockCipher = new ElGamalEngine(); + break; + case CipherAlgorithm.GOST28147: + blockCipher = new Gost28147Engine(); + break; + case CipherAlgorithm.HC128: + streamCipher = new HC128Engine(); + break; + case CipherAlgorithm.HC256: + streamCipher = new HC256Engine(); + break; + case CipherAlgorithm.IDEA: + blockCipher = new IdeaEngine(); + break; + case CipherAlgorithm.NOEKEON: + blockCipher = new NoekeonEngine(); + break; + case CipherAlgorithm.PBEWITHSHAAND128BITRC4: + case CipherAlgorithm.PBEWITHSHAAND40BITRC4: + streamCipher = new RC4Engine(); + break; + case CipherAlgorithm.RC2: + blockCipher = new RC2Engine(); + break; + case CipherAlgorithm.RC5: + blockCipher = new RC532Engine(); + break; + case CipherAlgorithm.RC5_64: + blockCipher = new RC564Engine(); + break; + case CipherAlgorithm.RC6: + blockCipher = new RC6Engine(); + break; + case CipherAlgorithm.RIJNDAEL: + blockCipher = new RijndaelEngine(); + break; + case CipherAlgorithm.RSA: + asymBlockCipher = new RsaBlindedEngine(); + break; + case CipherAlgorithm.SALSA20: + streamCipher = new Salsa20Engine(); + break; + case CipherAlgorithm.SEED: + blockCipher = new SeedEngine(); + break; + case CipherAlgorithm.SERPENT: + blockCipher = new SerpentEngine(); + break; + case CipherAlgorithm.SKIPJACK: + blockCipher = new SkipjackEngine(); + break; + case CipherAlgorithm.SM4: + blockCipher = new SM4Engine(); + break; + case CipherAlgorithm.TEA: + blockCipher = new TeaEngine(); + break; + case CipherAlgorithm.THREEFISH_256: + blockCipher = new ThreefishEngine(ThreefishEngine.BLOCKSIZE_256); + break; + case CipherAlgorithm.THREEFISH_512: + blockCipher = new ThreefishEngine(ThreefishEngine.BLOCKSIZE_512); + break; + case CipherAlgorithm.THREEFISH_1024: + blockCipher = new ThreefishEngine(ThreefishEngine.BLOCKSIZE_1024); + break; + case CipherAlgorithm.TNEPRES: + blockCipher = new TnepresEngine(); + break; + case CipherAlgorithm.TWOFISH: + blockCipher = new TwofishEngine(); + break; + case CipherAlgorithm.VMPC: + streamCipher = new VmpcEngine(); + break; + case CipherAlgorithm.VMPC_KSA3: + streamCipher = new VmpcKsa3Engine(); + break; + case CipherAlgorithm.XTEA: + blockCipher = new XteaEngine(); + break; + default: + throw new SecurityUtilityException("Cipher " + algorithm + " not recognised."); + } + + if (aeadCipher != null) + { + if (parts.Length > 1) + throw new ArgumentException("Modes and paddings cannot be applied to AEAD ciphers"); + + return new BufferedAeadCipher(aeadCipher); + } + + if (streamCipher != null) + { + if (parts.Length > 1) + throw new ArgumentException("Modes and paddings not used for stream ciphers"); + + return new BufferedStreamCipher(streamCipher); + } + + + bool cts = false; + bool padded = true; + IBlockCipherPadding padding = null; + IAeadBlockCipher aeadBlockCipher = null; + + if (parts.Length > 2) + { + if (streamCipher != null) + throw new ArgumentException("Paddings not used for stream ciphers"); + + string paddingName = parts[2]; + + CipherPadding cipherPadding; + if (paddingName == "") + { + cipherPadding = CipherPadding.RAW; + } + else if (paddingName == "X9.23PADDING") + { + cipherPadding = CipherPadding.X923PADDING; + } + else + { + try + { + cipherPadding = Enums.GetEnumValue(paddingName); + } + catch (ArgumentException) + { + throw new SecurityUtilityException("Cipher " + algorithm + " not recognised."); + } + } + + switch (cipherPadding) + { + case CipherPadding.NOPADDING: + padded = false; + break; + case CipherPadding.RAW: + break; + case CipherPadding.ISO10126PADDING: + case CipherPadding.ISO10126D2PADDING: + case CipherPadding.ISO10126_2PADDING: + padding = new ISO10126d2Padding(); + break; + case CipherPadding.ISO7816_4PADDING: + case CipherPadding.ISO9797_1PADDING: + padding = new ISO7816d4Padding(); + break; + case CipherPadding.ISO9796_1: + case CipherPadding.ISO9796_1PADDING: + asymBlockCipher = new ISO9796d1Encoding(asymBlockCipher); + break; + case CipherPadding.OAEP: + case CipherPadding.OAEPPADDING: + asymBlockCipher = new OaepEncoding(asymBlockCipher); + break; + case CipherPadding.OAEPWITHMD5ANDMGF1PADDING: + asymBlockCipher = new OaepEncoding(asymBlockCipher, new MD5Digest()); + break; + case CipherPadding.OAEPWITHSHA1ANDMGF1PADDING: + case CipherPadding.OAEPWITHSHA_1ANDMGF1PADDING: + asymBlockCipher = new OaepEncoding(asymBlockCipher, new Sha1Digest()); + break; + case CipherPadding.OAEPWITHSHA224ANDMGF1PADDING: + case CipherPadding.OAEPWITHSHA_224ANDMGF1PADDING: + asymBlockCipher = new OaepEncoding(asymBlockCipher, new Sha224Digest()); + break; + case CipherPadding.OAEPWITHSHA256ANDMGF1PADDING: + case CipherPadding.OAEPWITHSHA_256ANDMGF1PADDING: + case CipherPadding.OAEPWITHSHA256ANDMGF1WITHSHA256PADDING: + case CipherPadding.OAEPWITHSHA_256ANDMGF1WITHSHA_256PADDING: + asymBlockCipher = new OaepEncoding(asymBlockCipher, new Sha256Digest()); + break; + case CipherPadding.OAEPWITHSHA256ANDMGF1WITHSHA1PADDING: + case CipherPadding.OAEPWITHSHA_256ANDMGF1WITHSHA_1PADDING: + asymBlockCipher = new OaepEncoding(asymBlockCipher, new Sha256Digest(), new Sha1Digest(), null); + break; + case CipherPadding.OAEPWITHSHA384ANDMGF1PADDING: + case CipherPadding.OAEPWITHSHA_384ANDMGF1PADDING: + asymBlockCipher = new OaepEncoding(asymBlockCipher, new Sha384Digest()); + break; + case CipherPadding.OAEPWITHSHA512ANDMGF1PADDING: + case CipherPadding.OAEPWITHSHA_512ANDMGF1PADDING: + asymBlockCipher = new OaepEncoding(asymBlockCipher, new Sha512Digest()); + break; + case CipherPadding.PKCS1: + case CipherPadding.PKCS1PADDING: + asymBlockCipher = new Pkcs1Encoding(asymBlockCipher); + break; + case CipherPadding.PKCS5: + case CipherPadding.PKCS5PADDING: + case CipherPadding.PKCS7: + case CipherPadding.PKCS7PADDING: + padding = new Pkcs7Padding(); + break; + case CipherPadding.TBCPADDING: + padding = new TbcPadding(); + break; + case CipherPadding.WITHCTS: + cts = true; + break; + case CipherPadding.X923PADDING: + padding = new X923Padding(); + break; + case CipherPadding.ZEROBYTEPADDING: + padding = new ZeroBytePadding(); + break; + default: + throw new SecurityUtilityException("Cipher " + algorithm + " not recognised."); + } + } + + string mode = ""; + IBlockCipherMode blockCipherMode = null; + if (parts.Length > 1) + { + mode = parts[1]; + + int di = GetDigitIndex(mode); + string modeName = di >= 0 ? mode.Substring(0, di) : mode; + + try + { + CipherMode cipherMode = modeName == "" + ? CipherMode.NONE + : Enums.GetEnumValue(modeName); + + switch (cipherMode) + { + case CipherMode.ECB: + case CipherMode.NONE: + break; + case CipherMode.CBC: + blockCipherMode = new CbcBlockCipher(blockCipher); + break; + case CipherMode.CCM: + aeadBlockCipher = new CcmBlockCipher(blockCipher); + break; + case CipherMode.CFB: + { + int bits = (di < 0) + ? 8 * blockCipher.GetBlockSize() + : int.Parse(mode.Substring(di)); + + blockCipherMode = new CfbBlockCipher(blockCipher, bits); + break; + } + case CipherMode.CTR: + blockCipherMode = new SicBlockCipher(blockCipher); + break; + case CipherMode.CTS: + cts = true; + blockCipherMode = new CbcBlockCipher(blockCipher); + break; + case CipherMode.EAX: + aeadBlockCipher = new EaxBlockCipher(blockCipher); + break; + case CipherMode.GCM: + aeadBlockCipher = new GcmBlockCipher(blockCipher); + break; + case CipherMode.GOFB: + blockCipherMode = new GOfbBlockCipher(blockCipher); + break; + case CipherMode.OCB: + aeadBlockCipher = new OcbBlockCipher(blockCipher, CreateBlockCipher(cipherAlgorithm)); + break; + case CipherMode.OFB: + { + int bits = (di < 0) + ? 8 * blockCipher.GetBlockSize() + : int.Parse(mode.Substring(di)); + + blockCipherMode = new OfbBlockCipher(blockCipher, bits); + break; + } + case CipherMode.OPENPGPCFB: + blockCipherMode = new OpenPgpCfbBlockCipher(blockCipher); + break; + case CipherMode.SIC: + if (blockCipher.GetBlockSize() < 16) + { + throw new ArgumentException("Warning: SIC-Mode can become a twotime-pad if the blocksize of the cipher is too small. Use a cipher with a block size of at least 128 bits (e.g. AES)"); + } + blockCipherMode = new SicBlockCipher(blockCipher); + break; + default: + throw new SecurityUtilityException("Cipher " + algorithm + " not recognised."); + } + } + catch (ArgumentException) + { + throw new SecurityUtilityException("Cipher " + algorithm + " not recognised."); + } + } + + if (aeadBlockCipher != null) + { + if (cts) + throw new SecurityUtilityException("CTS mode not valid for AEAD ciphers."); + if (padded && parts.Length > 2 && parts[2] != "") + throw new SecurityUtilityException("Bad padding specified for AEAD cipher."); + + return new BufferedAeadBlockCipher(aeadBlockCipher); + } + + if (blockCipher != null) + { + if (blockCipherMode == null) + { + blockCipherMode = EcbBlockCipher.GetBlockCipherMode(blockCipher); + } + + if (cts) + { + return new CtsBlockCipher(blockCipherMode); + } + + if (padding != null) + { + return new PaddedBufferedBlockCipher(blockCipherMode, padding); + } + + if (!padded || blockCipherMode.IsPartialBlockOkay) + { + return new BufferedBlockCipher(blockCipherMode); + } + + return new PaddedBufferedBlockCipher(blockCipherMode); + } + + if (asymBlockCipher != null) + { + return new BufferedAsymmetricBlockCipher(asymBlockCipher); + } + + throw new SecurityUtilityException("Cipher " + algorithm + " not recognised."); + } + + public static string GetAlgorithmName(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(Algorithms, oid.Id); + } + + private static int GetDigitIndex(string s) + { + for (int i = 0; i < s.Length; ++i) + { + if (char.IsDigit(s[i])) + return i; + } + + return -1; + } + + private static IBlockCipher CreateBlockCipher(CipherAlgorithm cipherAlgorithm) + { + switch (cipherAlgorithm) + { + case CipherAlgorithm.AES: return AesUtilities.CreateEngine(); + case CipherAlgorithm.ARIA: return new AriaEngine(); + case CipherAlgorithm.BLOWFISH: return new BlowfishEngine(); + case CipherAlgorithm.CAMELLIA: return new CamelliaEngine(); + case CipherAlgorithm.CAST5: return new Cast5Engine(); + case CipherAlgorithm.CAST6: return new Cast6Engine(); + case CipherAlgorithm.DES: return new DesEngine(); + case CipherAlgorithm.DESEDE: return new DesEdeEngine(); + case CipherAlgorithm.GOST28147: return new Gost28147Engine(); + case CipherAlgorithm.IDEA: return new IdeaEngine(); + case CipherAlgorithm.NOEKEON: return new NoekeonEngine(); + case CipherAlgorithm.RC2: return new RC2Engine(); + case CipherAlgorithm.RC5: return new RC532Engine(); + case CipherAlgorithm.RC5_64: return new RC564Engine(); + case CipherAlgorithm.RC6: return new RC6Engine(); + case CipherAlgorithm.RIJNDAEL: return new RijndaelEngine(); + case CipherAlgorithm.SEED: return new SeedEngine(); + case CipherAlgorithm.SERPENT: return new SerpentEngine(); + case CipherAlgorithm.SKIPJACK: return new SkipjackEngine(); + case CipherAlgorithm.SM4: return new SM4Engine(); + case CipherAlgorithm.TEA: return new TeaEngine(); + case CipherAlgorithm.THREEFISH_256: return new ThreefishEngine(ThreefishEngine.BLOCKSIZE_256); + case CipherAlgorithm.THREEFISH_512: return new ThreefishEngine(ThreefishEngine.BLOCKSIZE_512); + case CipherAlgorithm.THREEFISH_1024: return new ThreefishEngine(ThreefishEngine.BLOCKSIZE_1024); + case CipherAlgorithm.TNEPRES: return new TnepresEngine(); + case CipherAlgorithm.TWOFISH: return new TwofishEngine(); + case CipherAlgorithm.XTEA: return new XteaEngine(); + default: + throw new SecurityUtilityException("Cipher " + cipherAlgorithm + " not recognised or not a block cipher"); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/CipherUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/CipherUtilities.cs.meta new file mode 100644 index 000000000..8c41f894e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/CipherUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3576aacdad56d6a45a71b7f377ae1fcc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/DigestUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/DigestUtilities.cs new file mode 100644 index 000000000..13e07b0b2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/DigestUtilities.cs @@ -0,0 +1,320 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.GM; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Misc; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Rosstandart; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.TeleTrust; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.UA; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + /// + /// Utility class for creating IDigest objects from their names/Oids + /// + public static class DigestUtilities + { + private enum DigestAlgorithm { + BLAKE2B_160, BLAKE2B_256, BLAKE2B_384, BLAKE2B_512, + BLAKE2S_128, BLAKE2S_160, BLAKE2S_224, BLAKE2S_256, + BLAKE3_256, + DSTU7564_256, DSTU7564_384, DSTU7564_512, + GOST3411, + GOST3411_2012_256, GOST3411_2012_512, + KECCAK_224, KECCAK_256, KECCAK_288, KECCAK_384, KECCAK_512, + MD2, MD4, MD5, + NONE, + RIPEMD128, RIPEMD160, RIPEMD256, RIPEMD320, + SHA_1, SHA_224, SHA_256, SHA_384, SHA_512, + SHA_512_224, SHA_512_256, + SHA3_224, SHA3_256, SHA3_384, SHA3_512, + SHAKE128_256, SHAKE256_512, + SM3, + TIGER, + WHIRLPOOL, + }; + + private static readonly IDictionary Aliases = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly IDictionary Oids = + new Dictionary(StringComparer.OrdinalIgnoreCase); + + static DigestUtilities() + { + // Signal to obfuscation tools not to change enum constants + Enums.GetArbitraryValue().ToString(); + + Aliases[PkcsObjectIdentifiers.MD2.Id] = "MD2"; + Aliases[PkcsObjectIdentifiers.MD4.Id] = "MD4"; + Aliases[PkcsObjectIdentifiers.MD5.Id] = "MD5"; + + Aliases["SHA1"] = "SHA-1"; + Aliases[OiwObjectIdentifiers.IdSha1.Id] = "SHA-1"; + Aliases[PkcsObjectIdentifiers.IdHmacWithSha1.Id] = "SHA-1"; + Aliases[MiscObjectIdentifiers.HMAC_SHA1.Id] = "SHA-1"; + Aliases["SHA224"] = "SHA-224"; + Aliases[NistObjectIdentifiers.IdSha224.Id] = "SHA-224"; + Aliases[PkcsObjectIdentifiers.IdHmacWithSha224.Id] = "SHA-224"; + Aliases["SHA256"] = "SHA-256"; + Aliases[NistObjectIdentifiers.IdSha256.Id] = "SHA-256"; + Aliases[PkcsObjectIdentifiers.IdHmacWithSha256.Id] = "SHA-256"; + Aliases["SHA384"] = "SHA-384"; + Aliases[NistObjectIdentifiers.IdSha384.Id] = "SHA-384"; + Aliases[PkcsObjectIdentifiers.IdHmacWithSha384.Id] = "SHA-384"; + Aliases["SHA512"] = "SHA-512"; + Aliases[NistObjectIdentifiers.IdSha512.Id] = "SHA-512"; + Aliases[PkcsObjectIdentifiers.IdHmacWithSha512.Id] = "SHA-512"; + + Aliases["SHA512/224"] = "SHA-512/224"; + Aliases["SHA512(224)"] = "SHA-512/224"; + Aliases["SHA-512(224)"] = "SHA-512/224"; + Aliases[NistObjectIdentifiers.IdSha512_224.Id] = "SHA-512/224"; + Aliases["SHA512/256"] = "SHA-512/256"; + Aliases["SHA512(256)"] = "SHA-512/256"; + Aliases["SHA-512(256)"] = "SHA-512/256"; + Aliases[NistObjectIdentifiers.IdSha512_256.Id] = "SHA-512/256"; + + Aliases["RIPEMD-128"] = "RIPEMD128"; + Aliases[TeleTrusTObjectIdentifiers.RipeMD128.Id] = "RIPEMD128"; + Aliases["RIPEMD-160"] = "RIPEMD160"; + Aliases[TeleTrusTObjectIdentifiers.RipeMD160.Id] = "RIPEMD160"; + Aliases["RIPEMD-256"] = "RIPEMD256"; + Aliases[TeleTrusTObjectIdentifiers.RipeMD256.Id] = "RIPEMD256"; + Aliases["RIPEMD-320"] = "RIPEMD320"; + //Aliases[TeleTrusTObjectIdentifiers.RipeMD320.Id] = "RIPEMD320"; + + Aliases[CryptoProObjectIdentifiers.GostR3411.Id] = "GOST3411"; + + Aliases["KECCAK224"] = "KECCAK-224"; + Aliases["KECCAK256"] = "KECCAK-256"; + Aliases["KECCAK288"] = "KECCAK-288"; + Aliases["KECCAK384"] = "KECCAK-384"; + Aliases["KECCAK512"] = "KECCAK-512"; + + Aliases[NistObjectIdentifiers.IdSha3_224.Id] = "SHA3-224"; + Aliases[NistObjectIdentifiers.IdHMacWithSha3_224.Id] = "SHA3-224"; + Aliases[NistObjectIdentifiers.IdSha3_256.Id] = "SHA3-256"; + Aliases[NistObjectIdentifiers.IdHMacWithSha3_256.Id] = "SHA3-256"; + Aliases[NistObjectIdentifiers.IdSha3_384.Id] = "SHA3-384"; + Aliases[NistObjectIdentifiers.IdHMacWithSha3_384.Id] = "SHA3-384"; + Aliases[NistObjectIdentifiers.IdSha3_512.Id] = "SHA3-512"; + Aliases[NistObjectIdentifiers.IdHMacWithSha3_512.Id] = "SHA3-512"; + Aliases["SHAKE128"] = "SHAKE128-256"; + Aliases[NistObjectIdentifiers.IdShake128.Id] = "SHAKE128-256"; + Aliases["SHAKE256"] = "SHAKE256-512"; + Aliases[NistObjectIdentifiers.IdShake256.Id] = "SHAKE256-512"; + + Aliases[GMObjectIdentifiers.sm3.Id] = "SM3"; + + Aliases[MiscObjectIdentifiers.id_blake2b160.Id] = "BLAKE2B-160"; + Aliases[MiscObjectIdentifiers.id_blake2b256.Id] = "BLAKE2B-256"; + Aliases[MiscObjectIdentifiers.id_blake2b384.Id] = "BLAKE2B-384"; + Aliases[MiscObjectIdentifiers.id_blake2b512.Id] = "BLAKE2B-512"; + Aliases[MiscObjectIdentifiers.id_blake2s128.Id] = "BLAKE2S-128"; + Aliases[MiscObjectIdentifiers.id_blake2s160.Id] = "BLAKE2S-160"; + Aliases[MiscObjectIdentifiers.id_blake2s224.Id] = "BLAKE2S-224"; + Aliases[MiscObjectIdentifiers.id_blake2s256.Id] = "BLAKE2S-256"; + Aliases[MiscObjectIdentifiers.blake3_256.Id] = "BLAKE3-256"; + + Aliases[RosstandartObjectIdentifiers.id_tc26_gost_3411_12_256.Id] = "GOST3411-2012-256"; + Aliases[RosstandartObjectIdentifiers.id_tc26_gost_3411_12_512.Id] = "GOST3411-2012-512"; + + Aliases[UAObjectIdentifiers.dstu7564digest_256.Id] = "DSTU7564-256"; + Aliases[UAObjectIdentifiers.dstu7564digest_384.Id] = "DSTU7564-384"; + Aliases[UAObjectIdentifiers.dstu7564digest_512.Id] = "DSTU7564-512"; + + Oids["MD2"] = PkcsObjectIdentifiers.MD2; + Oids["MD4"] = PkcsObjectIdentifiers.MD4; + Oids["MD5"] = PkcsObjectIdentifiers.MD5; + Oids["SHA-1"] = OiwObjectIdentifiers.IdSha1; + Oids["SHA-224"] = NistObjectIdentifiers.IdSha224; + Oids["SHA-256"] = NistObjectIdentifiers.IdSha256; + Oids["SHA-384"] = NistObjectIdentifiers.IdSha384; + Oids["SHA-512"] = NistObjectIdentifiers.IdSha512; + Oids["SHA-512/224"] = NistObjectIdentifiers.IdSha512_224; + Oids["SHA-512/256"] = NistObjectIdentifiers.IdSha512_256; + Oids["SHA3-224"] = NistObjectIdentifiers.IdSha3_224; + Oids["SHA3-256"] = NistObjectIdentifiers.IdSha3_256; + Oids["SHA3-384"] = NistObjectIdentifiers.IdSha3_384; + Oids["SHA3-512"] = NistObjectIdentifiers.IdSha3_512; + Oids["SHAKE128-256"] = NistObjectIdentifiers.IdShake128; + Oids["SHAKE256-512"] = NistObjectIdentifiers.IdShake256; + Oids["RIPEMD128"] = TeleTrusTObjectIdentifiers.RipeMD128; + Oids["RIPEMD160"] = TeleTrusTObjectIdentifiers.RipeMD160; + Oids["RIPEMD256"] = TeleTrusTObjectIdentifiers.RipeMD256; + Oids["GOST3411"] = CryptoProObjectIdentifiers.GostR3411; + Oids["SM3"] = GMObjectIdentifiers.sm3; + Oids["BLAKE2B-160"] = MiscObjectIdentifiers.id_blake2b160; + Oids["BLAKE2B-256"] = MiscObjectIdentifiers.id_blake2b256; + Oids["BLAKE2B-384"] = MiscObjectIdentifiers.id_blake2b384; + Oids["BLAKE2B-512"] = MiscObjectIdentifiers.id_blake2b512; + Oids["BLAKE2S-128"] = MiscObjectIdentifiers.id_blake2s128; + Oids["BLAKE2S-160"] = MiscObjectIdentifiers.id_blake2s160; + Oids["BLAKE2S-224"] = MiscObjectIdentifiers.id_blake2s224; + Oids["BLAKE2S-256"] = MiscObjectIdentifiers.id_blake2s256; + Oids["BLAKE3-256"] = MiscObjectIdentifiers.blake3_256; + Oids["GOST3411-2012-256"] = RosstandartObjectIdentifiers.id_tc26_gost_3411_12_256; + Oids["GOST3411-2012-512"] = RosstandartObjectIdentifiers.id_tc26_gost_3411_12_512; + Oids["DSTU7564-256"] = UAObjectIdentifiers.dstu7564digest_256; + Oids["DSTU7564-384"] = UAObjectIdentifiers.dstu7564digest_384; + Oids["DSTU7564-512"] = UAObjectIdentifiers.dstu7564digest_512; + } + + /// + /// Returns a ObjectIdentifier for a given digest mechanism. + /// + /// A string representation of the digest meanism. + /// A DerObjectIdentifier, null if the Oid is not available. + + public static DerObjectIdentifier GetObjectIdentifier(string mechanism) + { + if (mechanism == null) + throw new ArgumentNullException(nameof(mechanism)); + + mechanism = CollectionUtilities.GetValueOrKey(Aliases, mechanism).ToUpperInvariant(); + + return CollectionUtilities.GetValueOrNull(Oids, mechanism); + } + + public static IDigest GetDigest(DerObjectIdentifier id) + { + return GetDigest(id.Id); + } + + public static IDigest GetDigest(string algorithm) + { + if (algorithm == null) + throw new ArgumentNullException(nameof(algorithm)); + + string mechanism = CollectionUtilities.GetValueOrKey(Aliases, algorithm).ToUpperInvariant(); + + try + { + DigestAlgorithm digestAlgorithm = Enums.GetEnumValue(mechanism); + + switch (digestAlgorithm) + { + case DigestAlgorithm.BLAKE2B_160: return new Blake2bDigest(160); + case DigestAlgorithm.BLAKE2B_256: return new Blake2bDigest(256); + case DigestAlgorithm.BLAKE2B_384: return new Blake2bDigest(384); + case DigestAlgorithm.BLAKE2B_512: return new Blake2bDigest(512); + case DigestAlgorithm.BLAKE2S_128: return new Blake2sDigest(128); + case DigestAlgorithm.BLAKE2S_160: return new Blake2sDigest(160); + case DigestAlgorithm.BLAKE2S_224: return new Blake2sDigest(224); + case DigestAlgorithm.BLAKE2S_256: return new Blake2sDigest(256); + case DigestAlgorithm.BLAKE3_256: return new Blake3Digest(256); + case DigestAlgorithm.DSTU7564_256: return new Dstu7564Digest(256); + case DigestAlgorithm.DSTU7564_384: return new Dstu7564Digest(384); + case DigestAlgorithm.DSTU7564_512: return new Dstu7564Digest(512); + case DigestAlgorithm.GOST3411: return new Gost3411Digest(); + case DigestAlgorithm.GOST3411_2012_256: return new Gost3411_2012_256Digest(); + case DigestAlgorithm.GOST3411_2012_512: return new Gost3411_2012_512Digest(); + case DigestAlgorithm.KECCAK_224: return new KeccakDigest(224); + case DigestAlgorithm.KECCAK_256: return new KeccakDigest(256); + case DigestAlgorithm.KECCAK_288: return new KeccakDigest(288); + case DigestAlgorithm.KECCAK_384: return new KeccakDigest(384); + case DigestAlgorithm.KECCAK_512: return new KeccakDigest(512); + case DigestAlgorithm.MD2: return new MD2Digest(); + case DigestAlgorithm.MD4: return new MD4Digest(); + case DigestAlgorithm.MD5: return new MD5Digest(); + case DigestAlgorithm.NONE: return new NullDigest(); + case DigestAlgorithm.RIPEMD128: return new RipeMD128Digest(); + case DigestAlgorithm.RIPEMD160: return new RipeMD160Digest(); + case DigestAlgorithm.RIPEMD256: return new RipeMD256Digest(); + case DigestAlgorithm.RIPEMD320: return new RipeMD320Digest(); + case DigestAlgorithm.SHA_1: return new Sha1Digest(); + case DigestAlgorithm.SHA_224: return new Sha224Digest(); + case DigestAlgorithm.SHA_256: return new Sha256Digest(); + case DigestAlgorithm.SHA_384: return new Sha384Digest(); + case DigestAlgorithm.SHA_512: return new Sha512Digest(); + case DigestAlgorithm.SHA_512_224: return new Sha512tDigest(224); + case DigestAlgorithm.SHA_512_256: return new Sha512tDigest(256); + case DigestAlgorithm.SHA3_224: return new Sha3Digest(224); + case DigestAlgorithm.SHA3_256: return new Sha3Digest(256); + case DigestAlgorithm.SHA3_384: return new Sha3Digest(384); + case DigestAlgorithm.SHA3_512: return new Sha3Digest(512); + case DigestAlgorithm.SHAKE128_256: return new ShakeDigest(128); + case DigestAlgorithm.SHAKE256_512: return new ShakeDigest(256); + case DigestAlgorithm.SM3: return new SM3Digest(); + case DigestAlgorithm.TIGER: return new TigerDigest(); + case DigestAlgorithm.WHIRLPOOL: return new WhirlpoolDigest(); + } + } + catch (ArgumentException) + { + } + + throw new SecurityUtilityException("Digest " + mechanism + " not recognised."); + } + + public static string GetAlgorithmName(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(Aliases, oid.Id); + } + + public static byte[] CalculateDigest(DerObjectIdentifier id, byte[] input) + { + return CalculateDigest(id.Id, input); + } + + public static byte[] CalculateDigest(string algorithm, byte[] input) + { + IDigest digest = GetDigest(algorithm); + return DoFinal(digest, input); + } + + public static byte[] CalculateDigest(string algorithm, byte[] buf, int off, int len) + { + IDigest digest = GetDigest(algorithm); + return DoFinal(digest, buf, off, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static byte[] CalculateDigest(string algorithm, ReadOnlySpan buffer) + { + IDigest digest = GetDigest(algorithm); + return DoFinal(digest, buffer); + } +#endif + + public static byte[] DoFinal(IDigest digest) + { + byte[] b = new byte[digest.GetDigestSize()]; + digest.DoFinal(b, 0); + return b; + } + + public static byte[] DoFinal(IDigest digest, byte[] input) + { + digest.BlockUpdate(input, 0, input.Length); + return DoFinal(digest); + } + + public static byte[] DoFinal(IDigest digest, byte[] buf, int off, int len) + { + digest.BlockUpdate(buf, off, len); + return DoFinal(digest); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static byte[] DoFinal(IDigest digest, ReadOnlySpan buffer) + { + digest.BlockUpdate(buffer); + return DoFinal(digest); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/DigestUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/DigestUtilities.cs.meta new file mode 100644 index 000000000..cb014f723 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/DigestUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e02cda66c755ac94ea2ee882e29a2dfe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/DotNetUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/DotNetUtilities.cs new file mode 100644 index 000000000..25b6461dc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/DotNetUtilities.cs @@ -0,0 +1,325 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +#if NET5_0_OR_GREATER +using System.Runtime.Versioning; +#endif +using System.Security.Cryptography; +using SystemX509 = System.Security.Cryptography.X509Certificates; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + /// + /// A class containing methods to interface the BouncyCastle world to the .NET Crypto world. + /// + public static class DotNetUtilities + { + /// + /// Create an System.Security.Cryptography.X509Certificate from an X509Certificate Structure. + /// + /// + /// A System.Security.Cryptography.X509Certificate. + public static SystemX509.X509Certificate ToX509Certificate( + X509CertificateStructure x509Struct) + { + return new SystemX509.X509Certificate(x509Struct.GetDerEncoded()); + } + + public static SystemX509.X509Certificate ToX509Certificate( + X509Certificate x509Cert) + { + return new SystemX509.X509Certificate(x509Cert.GetEncoded()); + } + + public static X509Certificate FromX509Certificate( + SystemX509.X509Certificate x509Cert) + { + return new X509CertificateParser().ReadCertificate(x509Cert.GetRawCertData()); + } + + public static AsymmetricCipherKeyPair GetDsaKeyPair(DSA dsa) + { + return GetDsaKeyPair(dsa.ExportParameters(true)); + } + + public static AsymmetricCipherKeyPair GetDsaKeyPair(DSAParameters dp) + { + DsaPublicKeyParameters pubKey = GetDsaPublicKey(dp); + + DsaPrivateKeyParameters privKey = new DsaPrivateKeyParameters( + new BigInteger(1, dp.X), + pubKey.Parameters); + + return new AsymmetricCipherKeyPair(pubKey, privKey); + } + + public static DsaPublicKeyParameters GetDsaPublicKey(DSA dsa) + { + return GetDsaPublicKey(dsa.ExportParameters(false)); + } + + public static DsaPublicKeyParameters GetDsaPublicKey(DSAParameters dp) + { + DsaValidationParameters validationParameters = (dp.Seed != null) + ? new DsaValidationParameters(dp.Seed, dp.Counter) + : null; + + DsaParameters parameters = new DsaParameters( + new BigInteger(1, dp.P), + new BigInteger(1, dp.Q), + new BigInteger(1, dp.G), + validationParameters); + + return new DsaPublicKeyParameters( + new BigInteger(1, dp.Y), + parameters); + } + +#if NETCOREAPP1_0_OR_GREATER || NET47_OR_GREATER || NETSTANDARD1_6_OR_GREATER || UNITY_2021_2_OR_NEWER + public static AsymmetricCipherKeyPair GetECDsaKeyPair(ECDsa ecDsa) + { + return GetECKeyPair("ECDSA", ecDsa.ExportParameters(true)); + } + + public static ECPublicKeyParameters GetECDsaPublicKey(ECDsa ecDsa) + { + return GetECPublicKey("ECDSA", ecDsa.ExportParameters(false)); + } + + public static AsymmetricCipherKeyPair GetECKeyPair(string algorithm, ECParameters ec) + { + ECPublicKeyParameters pubKey = GetECPublicKey(algorithm, ec); + + ECPrivateKeyParameters privKey = new ECPrivateKeyParameters( + pubKey.AlgorithmName, + new BigInteger(1, ec.D), + pubKey.Parameters); + + return new AsymmetricCipherKeyPair(pubKey, privKey); + } + + public static ECPublicKeyParameters GetECPublicKey(string algorithm, ECParameters ec) + { + X9ECParameters x9 = GetX9ECParameters(ec.Curve); + if (x9 == null) + throw new NotSupportedException("Unrecognized curve"); + + return new ECPublicKeyParameters( + algorithm, + GetECPoint(x9.Curve, ec.Q), + new ECDomainParameters(x9)); + } + + private static Math.EC.ECPoint GetECPoint(Math.EC.ECCurve curve, ECPoint point) + { + return curve.CreatePoint(new BigInteger(1, point.X), new BigInteger(1, point.Y)); + } + + private static X9ECParameters GetX9ECParameters(ECCurve curve) + { + if (!curve.IsNamed) + throw new NotSupportedException("Only named curves are supported"); + + Oid oid = curve.Oid; + if (oid != null) + { + string oidValue = oid.Value; + if (oidValue != null) + return ECKeyPairGenerator.FindECCurveByOid(new DerObjectIdentifier(oidValue)); + } + return null; + } +#endif + + public static AsymmetricCipherKeyPair GetRsaKeyPair(RSA rsa) + { + return GetRsaKeyPair(rsa.ExportParameters(true)); + } + + public static AsymmetricCipherKeyPair GetRsaKeyPair(RSAParameters rp) + { + RsaKeyParameters pubKey = GetRsaPublicKey(rp); + + RsaPrivateCrtKeyParameters privKey = new RsaPrivateCrtKeyParameters( + pubKey.Modulus, + pubKey.Exponent, + new BigInteger(1, rp.D), + new BigInteger(1, rp.P), + new BigInteger(1, rp.Q), + new BigInteger(1, rp.DP), + new BigInteger(1, rp.DQ), + new BigInteger(1, rp.InverseQ)); + + return new AsymmetricCipherKeyPair(pubKey, privKey); + } + + public static RsaKeyParameters GetRsaPublicKey(RSA rsa) + { + return GetRsaPublicKey(rsa.ExportParameters(false)); + } + + public static RsaKeyParameters GetRsaPublicKey( + RSAParameters rp) + { + return new RsaKeyParameters( + false, + new BigInteger(1, rp.Modulus), + new BigInteger(1, rp.Exponent)); + } + + public static AsymmetricCipherKeyPair GetKeyPair(AsymmetricAlgorithm privateKey) + { + if (privateKey is DSA dsa) + return GetDsaKeyPair(dsa); + +#if NETCOREAPP1_0_OR_GREATER || NET47_OR_GREATER || NETSTANDARD1_6_OR_GREATER || UNITY_2021_2_OR_NEWER + if (privateKey is ECDsa ecDsa) + return GetECDsaKeyPair(ecDsa); +#endif + + if (privateKey is RSA rsa) + return GetRsaKeyPair(rsa); + + throw new ArgumentException("Unsupported algorithm specified", nameof(privateKey)); + } + +#if NET5_0_OR_GREATER + [SupportedOSPlatform("windows")] +#endif + public static RSA ToRSA(RsaKeyParameters rsaKey) + { + // TODO This appears to not work for private keys (when no CRT info) + return CreateRSAProvider(ToRSAParameters(rsaKey)); + } + +#if NET5_0_OR_GREATER + [SupportedOSPlatform("windows")] +#endif + public static RSA ToRSA(RsaKeyParameters rsaKey, CspParameters csp) + { + // TODO This appears to not work for private keys (when no CRT info) + return CreateRSAProvider(ToRSAParameters(rsaKey), csp); + } + +#if NET5_0_OR_GREATER + [SupportedOSPlatform("windows")] +#endif + public static RSA ToRSA(RsaPrivateCrtKeyParameters privKey) + { + return CreateRSAProvider(ToRSAParameters(privKey)); + } + +#if NET5_0_OR_GREATER + [SupportedOSPlatform("windows")] +#endif + public static RSA ToRSA(RsaPrivateCrtKeyParameters privKey, CspParameters csp) + { + return CreateRSAProvider(ToRSAParameters(privKey), csp); + } + +#if NET5_0_OR_GREATER + [SupportedOSPlatform("windows")] +#endif + public static RSA ToRSA(RsaPrivateKeyStructure privKey) + { + return CreateRSAProvider(ToRSAParameters(privKey)); + } + +#if NET5_0_OR_GREATER + [SupportedOSPlatform("windows")] +#endif + public static RSA ToRSA(RsaPrivateKeyStructure privKey, CspParameters csp) + { + return CreateRSAProvider(ToRSAParameters(privKey), csp); + } + + public static RSAParameters ToRSAParameters(RsaKeyParameters rsaKey) + { + RSAParameters rp = new RSAParameters(); + rp.Modulus = rsaKey.Modulus.ToByteArrayUnsigned(); + if (rsaKey.IsPrivate) + rp.D = ConvertRSAParametersField(rsaKey.Exponent, rp.Modulus.Length); + else + rp.Exponent = rsaKey.Exponent.ToByteArrayUnsigned(); + return rp; + } + + public static RSAParameters ToRSAParameters(RsaPrivateCrtKeyParameters privKey) + { + RSAParameters rp = new RSAParameters(); + rp.Modulus = privKey.Modulus.ToByteArrayUnsigned(); + rp.Exponent = privKey.PublicExponent.ToByteArrayUnsigned(); + rp.P = privKey.P.ToByteArrayUnsigned(); + rp.Q = privKey.Q.ToByteArrayUnsigned(); + rp.D = ConvertRSAParametersField(privKey.Exponent, rp.Modulus.Length); + rp.DP = ConvertRSAParametersField(privKey.DP, rp.P.Length); + rp.DQ = ConvertRSAParametersField(privKey.DQ, rp.Q.Length); + rp.InverseQ = ConvertRSAParametersField(privKey.QInv, rp.Q.Length); + return rp; + } + + public static RSAParameters ToRSAParameters(RsaPrivateKeyStructure privKey) + { + RSAParameters rp = new RSAParameters(); + rp.Modulus = privKey.Modulus.ToByteArrayUnsigned(); + rp.Exponent = privKey.PublicExponent.ToByteArrayUnsigned(); + rp.P = privKey.Prime1.ToByteArrayUnsigned(); + rp.Q = privKey.Prime2.ToByteArrayUnsigned(); + rp.D = ConvertRSAParametersField(privKey.PrivateExponent, rp.Modulus.Length); + rp.DP = ConvertRSAParametersField(privKey.Exponent1, rp.P.Length); + rp.DQ = ConvertRSAParametersField(privKey.Exponent2, rp.Q.Length); + rp.InverseQ = ConvertRSAParametersField(privKey.Coefficient, rp.Q.Length); + return rp; + } + + private static byte[] ConvertRSAParametersField(BigInteger n, int size) + { + return BigIntegers.AsUnsignedByteArray(size, n); + } + + // TODO Why do we use CspParameters instead of just RSA.Create in methods below? +// private static RSA CreateRSA(RSAParameters rp) +// { +//#if NETCOREAPP2_0_OR_GREATER || NET472_OR_GREATER || NETSTANDARD2_1_OR_GREATER || UNITY_2021_2_OR_NEWER +// return RSA.Create(rp); +//#else +// var rsa = RSA.Create(); +// rsa.ImportParameters(rp); +// return rsa; +//#endif +// } + +#if NET5_0_OR_GREATER + [SupportedOSPlatform("windows")] +#endif + private static RSACryptoServiceProvider CreateRSAProvider(RSAParameters rp) + { + CspParameters csp = new CspParameters(); + csp.KeyContainerName = string.Format("BouncyCastle-{0}", Guid.NewGuid()); + return CreateRSAProvider(rp, csp); + } + +#if NET5_0_OR_GREATER + [SupportedOSPlatform("windows")] +#endif + private static RSACryptoServiceProvider CreateRSAProvider(RSAParameters rp, CspParameters csp) + { + RSACryptoServiceProvider rsaCsp = new RSACryptoServiceProvider(csp); + rsaCsp.ImportParameters(rp); + return rsaCsp; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/DotNetUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/DotNetUtilities.cs.meta new file mode 100644 index 000000000..f376fde45 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/DotNetUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d8495888a65d924dac5d55806d57007 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/GeneralSecurityException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/GeneralSecurityException.cs new file mode 100644 index 000000000..fff2b549b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/GeneralSecurityException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + [Serializable] + public class GeneralSecurityException + : Exception + { + public GeneralSecurityException() + : base() + { + } + + public GeneralSecurityException(string message) + : base(message) + { + } + + public GeneralSecurityException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected GeneralSecurityException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/GeneralSecurityException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/GeneralSecurityException.cs.meta new file mode 100644 index 000000000..47ce61334 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/GeneralSecurityException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0d8c41189aa7a947b6acbdfbd4f0401 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/GeneratorUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/GeneratorUtilities.cs new file mode 100644 index 000000000..5cb6792ca --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/GeneratorUtilities.cs @@ -0,0 +1,421 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.EdEC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Iana; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Kisa; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nsri; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ntt; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Rosstandart; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + public static class GeneratorUtilities + { + private static readonly IDictionary KgAlgorithms = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly IDictionary KpgAlgorithms = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly IDictionary DefaultKeySizes = + new Dictionary(StringComparer.OrdinalIgnoreCase); + + static GeneratorUtilities() + { + // + // key generators. + // + AddKgAlgorithm("AES", + "AESWRAP"); + AddKgAlgorithm("AES128", + "2.16.840.1.101.3.4.2", + NistObjectIdentifiers.IdAes128Cbc, + NistObjectIdentifiers.IdAes128Ccm, + NistObjectIdentifiers.IdAes128Cfb, + NistObjectIdentifiers.IdAes128Ecb, + NistObjectIdentifiers.IdAes128Gcm, + NistObjectIdentifiers.IdAes128Ofb, + NistObjectIdentifiers.IdAes128Wrap); + AddKgAlgorithm("AES192", + "2.16.840.1.101.3.4.22", + NistObjectIdentifiers.IdAes192Cbc, + NistObjectIdentifiers.IdAes192Ccm, + NistObjectIdentifiers.IdAes192Cfb, + NistObjectIdentifiers.IdAes192Ecb, + NistObjectIdentifiers.IdAes192Gcm, + NistObjectIdentifiers.IdAes192Ofb, + NistObjectIdentifiers.IdAes192Wrap); + AddKgAlgorithm("AES256", + "2.16.840.1.101.3.4.42", + NistObjectIdentifiers.IdAes256Cbc, + NistObjectIdentifiers.IdAes256Ccm, + NistObjectIdentifiers.IdAes256Cfb, + NistObjectIdentifiers.IdAes256Ecb, + NistObjectIdentifiers.IdAes256Gcm, + NistObjectIdentifiers.IdAes256Ofb, + NistObjectIdentifiers.IdAes256Wrap); + AddKgAlgorithm("BLOWFISH", + "1.3.6.1.4.1.3029.1.2"); + AddKgAlgorithm("CAMELLIA", + "CAMELLIAWRAP"); + AddKgAlgorithm("ARIA"); + AddKgAlgorithm("ARIA128", + NsriObjectIdentifiers.id_aria128_cbc, + NsriObjectIdentifiers.id_aria128_ccm, + NsriObjectIdentifiers.id_aria128_cfb, + NsriObjectIdentifiers.id_aria128_ctr, + NsriObjectIdentifiers.id_aria128_ecb, + NsriObjectIdentifiers.id_aria128_gcm, + NsriObjectIdentifiers.id_aria128_ocb2, + NsriObjectIdentifiers.id_aria128_ofb); + AddKgAlgorithm("ARIA192", + NsriObjectIdentifiers.id_aria192_cbc, + NsriObjectIdentifiers.id_aria192_ccm, + NsriObjectIdentifiers.id_aria192_cfb, + NsriObjectIdentifiers.id_aria192_ctr, + NsriObjectIdentifiers.id_aria192_ecb, + NsriObjectIdentifiers.id_aria192_gcm, + NsriObjectIdentifiers.id_aria192_ocb2, + NsriObjectIdentifiers.id_aria192_ofb); + AddKgAlgorithm("ARIA256", + NsriObjectIdentifiers.id_aria256_cbc, + NsriObjectIdentifiers.id_aria256_ccm, + NsriObjectIdentifiers.id_aria256_cfb, + NsriObjectIdentifiers.id_aria256_ctr, + NsriObjectIdentifiers.id_aria256_ecb, + NsriObjectIdentifiers.id_aria256_gcm, + NsriObjectIdentifiers.id_aria256_ocb2, + NsriObjectIdentifiers.id_aria256_ofb); + AddKgAlgorithm("CAMELLIA128", + NttObjectIdentifiers.IdCamellia128Cbc, + NttObjectIdentifiers.IdCamellia128Wrap); + AddKgAlgorithm("CAMELLIA192", + NttObjectIdentifiers.IdCamellia192Cbc, + NttObjectIdentifiers.IdCamellia192Wrap); + AddKgAlgorithm("CAMELLIA256", + NttObjectIdentifiers.IdCamellia256Cbc, + NttObjectIdentifiers.IdCamellia256Wrap); + AddKgAlgorithm("CAST5", + "1.2.840.113533.7.66.10"); + AddKgAlgorithm("CAST6"); + AddKgAlgorithm("CHACHA"); + AddKgAlgorithm("CHACHA7539", + "CHACHA20", + "CHACHA20-POLY1305", + PkcsObjectIdentifiers.IdAlgAeadChaCha20Poly1305); + AddKgAlgorithm("DES", + OiwObjectIdentifiers.DesCbc, + OiwObjectIdentifiers.DesCfb, + OiwObjectIdentifiers.DesEcb, + OiwObjectIdentifiers.DesOfb); + AddKgAlgorithm("DESEDE", + "DESEDEWRAP", + "TDEA", + OiwObjectIdentifiers.DesEde); + AddKgAlgorithm("DESEDE3", + PkcsObjectIdentifiers.DesEde3Cbc, + PkcsObjectIdentifiers.IdAlgCms3DesWrap); + AddKgAlgorithm("GOST28147", + "GOST", + "GOST-28147", + CryptoProObjectIdentifiers.GostR28147Gcfb); + AddKgAlgorithm("HC128"); + AddKgAlgorithm("HC256"); + AddKgAlgorithm("IDEA", + "1.3.6.1.4.1.188.7.1.1.2"); + AddKgAlgorithm("NOEKEON"); + AddKgAlgorithm("RC2", + PkcsObjectIdentifiers.RC2Cbc, + PkcsObjectIdentifiers.IdAlgCmsRC2Wrap); + AddKgAlgorithm("RC4", + "ARC4", + "1.2.840.113549.3.4"); + AddKgAlgorithm("RC5", + "RC5-32"); + AddKgAlgorithm("RC5-64"); + AddKgAlgorithm("RC6"); + AddKgAlgorithm("RIJNDAEL"); + AddKgAlgorithm("SALSA20"); + AddKgAlgorithm("SEED", + KisaObjectIdentifiers.IdNpkiAppCmsSeedWrap, + KisaObjectIdentifiers.IdSeedCbc); + AddKgAlgorithm("SERPENT"); + AddKgAlgorithm("SKIPJACK"); + AddKgAlgorithm("SM4"); + AddKgAlgorithm("TEA"); + AddKgAlgorithm("THREEFISH-256"); + AddKgAlgorithm("THREEFISH-512"); + AddKgAlgorithm("THREEFISH-1024"); + AddKgAlgorithm("TNEPRES"); + AddKgAlgorithm("TWOFISH"); + AddKgAlgorithm("VMPC"); + AddKgAlgorithm("VMPC-KSA3"); + AddKgAlgorithm("XTEA"); + + // + // HMac key generators + // + AddHMacKeyGenerator("MD2"); + AddHMacKeyGenerator("MD4"); + AddHMacKeyGenerator("MD5", + IanaObjectIdentifiers.HmacMD5); + AddHMacKeyGenerator("SHA1", + PkcsObjectIdentifiers.IdHmacWithSha1, + IanaObjectIdentifiers.HmacSha1); + AddHMacKeyGenerator("SHA224", + PkcsObjectIdentifiers.IdHmacWithSha224); + AddHMacKeyGenerator("SHA256", + PkcsObjectIdentifiers.IdHmacWithSha256); + AddHMacKeyGenerator("SHA384", + PkcsObjectIdentifiers.IdHmacWithSha384); + AddHMacKeyGenerator("SHA512", + PkcsObjectIdentifiers.IdHmacWithSha512); + AddHMacKeyGenerator("SHA512/224"); + AddHMacKeyGenerator("SHA512/256"); + AddHMacKeyGenerator("KECCAK224"); + AddHMacKeyGenerator("KECCAK256"); + AddHMacKeyGenerator("KECCAK288"); + AddHMacKeyGenerator("KECCAK384"); + AddHMacKeyGenerator("KECCAK512"); + AddHMacKeyGenerator("SHA3-224", + NistObjectIdentifiers.IdHMacWithSha3_224); + AddHMacKeyGenerator("SHA3-256", + NistObjectIdentifiers.IdHMacWithSha3_256); + AddHMacKeyGenerator("SHA3-384", + NistObjectIdentifiers.IdHMacWithSha3_384); + AddHMacKeyGenerator("SHA3-512", + NistObjectIdentifiers.IdHMacWithSha3_512); + AddHMacKeyGenerator("RIPEMD128"); + AddHMacKeyGenerator("RIPEMD160", + IanaObjectIdentifiers.HmacRipeMD160); + AddHMacKeyGenerator("TIGER", + IanaObjectIdentifiers.HmacTiger); + AddHMacKeyGenerator("GOST3411-2012-256", + RosstandartObjectIdentifiers.id_tc26_hmac_gost_3411_12_256); + AddHMacKeyGenerator("GOST3411-2012-512", + RosstandartObjectIdentifiers.id_tc26_hmac_gost_3411_12_512); + + // + // key pair generators. + // + AddKpgAlgorithm("DH", + "DIFFIEHELLMAN"); + AddKpgAlgorithm("DSA"); + AddKpgAlgorithm("EC", + // TODO Should this be an alias for ECDH? + X9ObjectIdentifiers.DHSinglePassStdDHSha1KdfScheme); + AddKpgAlgorithm("ECDH", + "ECIES"); + AddKpgAlgorithm("ECDHC"); + AddKpgAlgorithm("ECMQV", + X9ObjectIdentifiers.MqvSinglePassSha1KdfScheme); + AddKpgAlgorithm("ECDSA"); + AddKpgAlgorithm("ECGOST3410", + "ECGOST-3410", + "GOST-3410-2001"); + AddKpgAlgorithm("ECGOST3410-2012", + "GOST-3410-2012"); + AddKpgAlgorithm("Ed25519", + "Ed25519ctx", + "Ed25519ph", + EdECObjectIdentifiers.id_Ed25519); + AddKpgAlgorithm("Ed448", + "Ed448ph", + EdECObjectIdentifiers.id_Ed448); + AddKpgAlgorithm("ELGAMAL"); + AddKpgAlgorithm("GOST3410", + "GOST-3410", + "GOST-3410-94"); + AddKpgAlgorithm("RSA", + "1.2.840.113549.1.1.1"); + AddKpgAlgorithm("RSASSA-PSS"); + AddKpgAlgorithm("X25519", + EdECObjectIdentifiers.id_X25519); + AddKpgAlgorithm("X448", + EdECObjectIdentifiers.id_X448); + + AddDefaultKeySizeEntries(64, "DES"); + AddDefaultKeySizeEntries(80, "SKIPJACK"); + AddDefaultKeySizeEntries(128, "AES128", "ARIA128", "BLOWFISH", "CAMELLIA128", "CAST5", "CHACHA", "DESEDE", + "HC128", "HMACMD2", "HMACMD4", "HMACMD5", "HMACRIPEMD128", "IDEA", "NOEKEON", + "RC2", "RC4", "RC5", "SALSA20", "SEED", "SM4", "TEA", "XTEA", "VMPC", "VMPC-KSA3"); + AddDefaultKeySizeEntries(160, "HMACRIPEMD160", "HMACSHA1"); + AddDefaultKeySizeEntries(192, "AES", "AES192", "ARIA192", "CAMELLIA192", "DESEDE3", "HMACTIGER", + "RIJNDAEL", "SERPENT", "TNEPRES"); + AddDefaultKeySizeEntries(224, "HMACSHA3-224", "HMACKECCAK224", "HMACSHA224", "HMACSHA512/224"); + AddDefaultKeySizeEntries(256, "AES256", "ARIA", "ARIA256", "CAMELLIA", "CAMELLIA256", "CAST6", + "CHACHA7539", "GOST28147", "HC256", "HMACGOST3411-2012-256", "HMACSHA3-256", "HMACKECCAK256", + "HMACSHA256", "HMACSHA512/256", "RC5-64", "RC6", "THREEFISH-256", "TWOFISH"); + AddDefaultKeySizeEntries(288, "HMACKECCAK288"); + AddDefaultKeySizeEntries(384, "HMACSHA3-384", "HMACKECCAK384", "HMACSHA384"); + AddDefaultKeySizeEntries(512, "HMACGOST3411-2012-512", "HMACSHA3-512", "HMACKECCAK512", "HMACSHA512", + "THREEFISH-512"); + AddDefaultKeySizeEntries(1024, "THREEFISH-1024"); + } + + private static void AddDefaultKeySizeEntries(int size, params string[] algorithms) + { + foreach (string algorithm in algorithms) + { + DefaultKeySizes.Add(algorithm, size); + } + } + + private static void AddKgAlgorithm(string canonicalName, params object[] aliases) + { + KgAlgorithms[canonicalName] = canonicalName; + + foreach (object alias in aliases) + { + KgAlgorithms[alias.ToString()] = canonicalName; + } + } + + private static void AddKpgAlgorithm(string canonicalName, params object[] aliases) + { + KpgAlgorithms[canonicalName] = canonicalName; + + foreach (object alias in aliases) + { + KpgAlgorithms[alias.ToString()] = canonicalName; + } + } + + private static void AddHMacKeyGenerator(string algorithm, params object[] aliases) + { + string mainName = "HMAC" + algorithm; + + KgAlgorithms[mainName] = mainName; + KgAlgorithms["HMAC-" + algorithm] = mainName; + KgAlgorithms["HMAC/" + algorithm] = mainName; + + foreach (object alias in aliases) + { + KgAlgorithms[alias.ToString()] = mainName; + } + } + + // TODO Consider making this public + internal static string GetCanonicalKeyGeneratorAlgorithm(string algorithm) + { + return CollectionUtilities.GetValueOrNull(KgAlgorithms, algorithm); + } + + // TODO Consider making this public + internal static string GetCanonicalKeyPairGeneratorAlgorithm(string algorithm) + { + return CollectionUtilities.GetValueOrNull(KpgAlgorithms, algorithm); + } + + public static CipherKeyGenerator GetKeyGenerator(DerObjectIdentifier oid) + { + return GetKeyGenerator(oid.Id); + } + + public static CipherKeyGenerator GetKeyGenerator(string algorithm) + { + string canonicalName = GetCanonicalKeyGeneratorAlgorithm(algorithm); + + if (canonicalName == null) + throw new SecurityUtilityException("KeyGenerator " + algorithm + " not recognised."); + + int defaultKeySize = FindDefaultKeySize(canonicalName); + if (defaultKeySize == -1) + throw new SecurityUtilityException("KeyGenerator " + algorithm + + " (" + canonicalName + ") not supported."); + + if (canonicalName == "DES") + return new DesKeyGenerator(defaultKeySize); + + if (canonicalName == "DESEDE" || canonicalName == "DESEDE3") + return new DesEdeKeyGenerator(defaultKeySize); + + return new CipherKeyGenerator(defaultKeySize); + } + + public static IAsymmetricCipherKeyPairGenerator GetKeyPairGenerator(DerObjectIdentifier oid) + { + return GetKeyPairGenerator(oid.Id); + } + + public static IAsymmetricCipherKeyPairGenerator GetKeyPairGenerator(string algorithm) + { + string canonicalName = GetCanonicalKeyPairGeneratorAlgorithm(algorithm); + + if (canonicalName == null) + throw new SecurityUtilityException("KeyPairGenerator " + algorithm + " not recognised."); + + if (canonicalName == "DH") + return new DHKeyPairGenerator(); + + if (canonicalName == "DSA") + return new DsaKeyPairGenerator(); + + // "EC", "ECDH", "ECDHC", "ECDSA", "ECGOST3410", "ECGOST3410-2012", "ECMQV" + if (Org.BouncyCastle.Utilities.Platform.StartsWith(canonicalName, "EC")) + return new ECKeyPairGenerator(canonicalName); + + if (canonicalName == "Ed25519") + return new Ed25519KeyPairGenerator(); + + if (canonicalName == "Ed448") + return new Ed448KeyPairGenerator(); + + if (canonicalName == "ELGAMAL") + return new ElGamalKeyPairGenerator(); + + if (canonicalName == "GOST3410") + return new Gost3410KeyPairGenerator(); + + if (canonicalName == "RSA" || canonicalName == "RSASSA-PSS") + return new RsaKeyPairGenerator(); + + if (canonicalName == "X25519") + return new X25519KeyPairGenerator(); + + if (canonicalName == "X448") + return new X448KeyPairGenerator(); + + throw new SecurityUtilityException("KeyPairGenerator " + algorithm + + " (" + canonicalName + ") not supported."); + } + + internal static int GetDefaultKeySize(DerObjectIdentifier oid) + { + return GetDefaultKeySize(oid.Id); + } + + internal static int GetDefaultKeySize(string algorithm) + { + string canonicalName = GetCanonicalKeyGeneratorAlgorithm(algorithm); + + if (canonicalName == null) + throw new SecurityUtilityException("KeyGenerator " + algorithm + " not recognised."); + + int defaultKeySize = FindDefaultKeySize(canonicalName); + if (defaultKeySize == -1) + throw new SecurityUtilityException("KeyGenerator " + algorithm + + " (" + canonicalName + ") not supported."); + + return defaultKeySize; + } + + private static int FindDefaultKeySize(string canonicalName) + { + return DefaultKeySizes.TryGetValue(canonicalName, out int keySize) ? keySize : -1; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/GeneratorUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/GeneratorUtilities.cs.meta new file mode 100644 index 000000000..ed0b2e29f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/GeneratorUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71114e4af0270f34ba2d802c33a9bd5b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/InvalidKeyException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/InvalidKeyException.cs new file mode 100644 index 000000000..dfeb4a513 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/InvalidKeyException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + [Serializable] + public class InvalidKeyException + : KeyException + { + public InvalidKeyException() + : base() + { + } + + public InvalidKeyException(string message) + : base(message) + { + } + + public InvalidKeyException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected InvalidKeyException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/InvalidKeyException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/InvalidKeyException.cs.meta new file mode 100644 index 000000000..8b9b345de --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/InvalidKeyException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9842e68a8ae8895468c08cc98231c060 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/InvalidParameterException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/InvalidParameterException.cs new file mode 100644 index 000000000..966ef667a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/InvalidParameterException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + [Serializable] + public class InvalidParameterException + : KeyException + { + public InvalidParameterException() + : base() + { + } + + public InvalidParameterException(string message) + : base(message) + { + } + + public InvalidParameterException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected InvalidParameterException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/InvalidParameterException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/InvalidParameterException.cs.meta new file mode 100644 index 000000000..6807bfe2d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/InvalidParameterException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a02c4f553fcf8d749801284afc4da77a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/JksStore.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/JksStore.cs new file mode 100644 index 000000000..8b773ce9b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/JksStore.cs @@ -0,0 +1,600 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Date; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + public class JksStore + { + private static readonly int Magic = unchecked((int)0xFEEDFEED); + + private static readonly AlgorithmIdentifier JksObfuscationAlg = new AlgorithmIdentifier( + new DerObjectIdentifier("1.3.6.1.4.1.42.2.17.1.1"), DerNull.Instance); + + private readonly Dictionary m_certificateEntries = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private readonly Dictionary m_keyEntries = + new Dictionary(StringComparer.OrdinalIgnoreCase); + + public JksStore() + { + } + + /// + public bool Probe(Stream stream) + { + using (var br = new BinaryReader(stream)) + try + { + return Magic == BinaryReaders.ReadInt32BigEndian(br); + } + catch (EndOfStreamException) + { + return false; + } + } + + /// + public AsymmetricKeyParameter GetKey(string alias, char[] password) + { + if (alias == null) + throw new ArgumentNullException(nameof(alias)); + if (password == null) + throw new ArgumentNullException(nameof(password)); + + if (!m_keyEntries.TryGetValue(alias, out JksKeyEntry keyEntry)) + return null; + + if (!JksObfuscationAlg.Equals(keyEntry.keyData.EncryptionAlgorithm)) + throw new IOException("unknown encryption algorithm"); + + byte[] encryptedData = keyEntry.keyData.GetEncryptedData(); + + // key length is encryptedData - salt - checksum + int pkcs8Len = encryptedData.Length - 40; + + IDigest digest = DigestUtilities.GetDigest("SHA-1"); + + // key decryption + byte[] keyStream = CalculateKeyStream(digest, password, encryptedData, pkcs8Len); + byte[] pkcs8Key = new byte[pkcs8Len]; + for (int i = 0; i < pkcs8Len; ++i) + { + pkcs8Key[i] = (byte)(encryptedData[20 + i] ^ keyStream[i]); + } + Array.Clear(keyStream, 0, keyStream.Length); + + // integrity check + byte[] checksum = GetKeyChecksum(digest, password, pkcs8Key); + + if (!Arrays.ConstantTimeAreEqual(20, encryptedData, pkcs8Len + 20, checksum, 0)) + throw new IOException("cannot recover key"); + + return PrivateKeyFactory.CreateKey(pkcs8Key); + } + + private byte[] GetKeyChecksum(IDigest digest, char[] password, byte[] pkcs8Key) + { + AddPassword(digest, password); + + return DigestUtilities.DoFinal(digest, pkcs8Key); + } + + private byte[] CalculateKeyStream(IDigest digest, char[] password, byte[] salt, int count) + { + byte[] keyStream = new byte[count]; + byte[] hash = Arrays.CopyOf(salt, 20); + + int index = 0; + while (index < count) + { + AddPassword(digest, password); + + digest.BlockUpdate(hash, 0, hash.Length); + digest.DoFinal(hash, 0); + + int length = System.Math.Min(hash.Length, keyStream.Length - index); + Array.Copy(hash, 0, keyStream, index, length); + index += length; + } + + return keyStream; + } + + public X509Certificate[] GetCertificateChain(string alias) + { + if (m_keyEntries.TryGetValue(alias, out var keyEntry)) + return CloneChain(keyEntry.chain); + + return null; + } + + public X509Certificate GetCertificate(string alias) + { + if (m_certificateEntries.TryGetValue(alias, out var certEntry)) + return certEntry.cert; + + if (m_keyEntries.TryGetValue(alias, out var keyEntry)) + return keyEntry.chain?[0]; + + return null; + } + + public DateTime? GetCreationDate(string alias) + { + if (m_certificateEntries.TryGetValue(alias, out var certEntry)) + return certEntry.date; + + if (m_keyEntries.TryGetValue(alias, out var keyEntry)) + return keyEntry.date; + + return null; + } + + /// + public void SetKeyEntry(string alias, AsymmetricKeyParameter key, char[] password, X509Certificate[] chain) + { + alias = ConvertAlias(alias); + + if (ContainsAlias(alias)) + throw new IOException("alias [" + alias + "] already in use"); + + byte[] pkcs8Key = PrivateKeyInfoFactory.CreatePrivateKeyInfo(key).GetEncoded(); + byte[] protectedKey = new byte[pkcs8Key.Length + 40]; + + SecureRandom rnd = CryptoServicesRegistrar.GetSecureRandom(); + rnd.NextBytes(protectedKey, 0, 20); + + IDigest digest = DigestUtilities.GetDigest("SHA-1"); + + byte[] checksum = GetKeyChecksum(digest, password, pkcs8Key); + Array.Copy(checksum, 0, protectedKey, 20 + pkcs8Key.Length, 20); + + byte[] keyStream = CalculateKeyStream(digest, password, protectedKey, pkcs8Key.Length); + for (int i = 0; i != keyStream.Length; i++) + { + protectedKey[20 + i] = (byte)(pkcs8Key[i] ^ keyStream[i]); + } + Array.Clear(keyStream, 0, keyStream.Length); + + try + { + var epki = new EncryptedPrivateKeyInfo(JksObfuscationAlg, protectedKey); + m_keyEntries.Add(alias, new JksKeyEntry(DateTime.UtcNow, epki.GetEncoded(), CloneChain(chain))); + } + catch (Exception e) + { + throw new IOException("unable to encode encrypted private key", e); + } + } + + /// + public void SetKeyEntry(string alias, byte[] key, X509Certificate[] chain) + { + alias = ConvertAlias(alias); + + if (ContainsAlias(alias)) + throw new IOException("alias [" + alias + "] already in use"); + + m_keyEntries.Add(alias, new JksKeyEntry(DateTime.UtcNow, key, CloneChain(chain))); + } + + /// + public void SetCertificateEntry(string alias, X509Certificate cert) + { + alias = ConvertAlias(alias); + + if (ContainsAlias(alias)) + throw new IOException("alias [" + alias + "] already in use"); + + m_certificateEntries.Add(alias, new JksTrustedCertEntry(DateTime.UtcNow, cert)); + } + + public void DeleteEntry(string alias) + { + if (!m_keyEntries.Remove(alias)) + { + m_certificateEntries.Remove(alias); + } + } + + public IEnumerable Aliases + { + get + { + var aliases = new HashSet(m_certificateEntries.Keys); + aliases.UnionWith(m_keyEntries.Keys); + return CollectionUtilities.Proxy(aliases); + } + } + + public bool ContainsAlias(string alias) + { + return IsCertificateEntry(alias) || IsKeyEntry(alias); + } + + public int Count + { + get { return m_certificateEntries.Count + m_keyEntries.Count; } + } + + public bool IsKeyEntry(string alias) + { + return m_keyEntries.ContainsKey(alias); + } + + public bool IsCertificateEntry(string alias) + { + return m_certificateEntries.ContainsKey(alias); + } + + public string GetCertificateAlias(X509Certificate cert) + { + foreach (var entry in m_certificateEntries) + { + if (entry.Value.cert.Equals(cert)) + return entry.Key; + } + return null; + } + + /// + public void Save(Stream stream, char[] password) + { + if (stream == null) + throw new ArgumentNullException(nameof(stream)); + if (password == null) + throw new ArgumentNullException(nameof(password)); + + IDigest checksumDigest = CreateChecksumDigest(password); + BinaryWriter bw = new BinaryWriter(new DigestStream(stream, null, checksumDigest)); + + BinaryWriters.WriteInt32BigEndian(bw, Magic); + BinaryWriters.WriteInt32BigEndian(bw, 2); + + BinaryWriters.WriteInt32BigEndian(bw, Count); + + foreach (var entry in m_keyEntries) + { + string alias = entry.Key; + JksKeyEntry keyEntry = entry.Value; + + BinaryWriters.WriteInt32BigEndian(bw, 1); + WriteUtf(bw, alias); + WriteDateTime(bw, keyEntry.date); + WriteBufferWithInt32Length(bw, keyEntry.keyData.GetEncoded()); + + X509Certificate[] chain = keyEntry.chain; + int chainLength = chain == null ? 0 : chain.Length; + BinaryWriters.WriteInt32BigEndian(bw, chainLength); + for (int i = 0; i < chainLength; ++i) + { + WriteTypedCertificate(bw, chain[i]); + } + } + + foreach (var entry in m_certificateEntries) + { + string alias = entry.Key; + JksTrustedCertEntry certEntry = entry.Value; + + BinaryWriters.WriteInt32BigEndian(bw, 2); + WriteUtf(bw, alias); + WriteDateTime(bw, certEntry.date); + WriteTypedCertificate(bw, certEntry.cert); + } + + byte[] checksum = DigestUtilities.DoFinal(checksumDigest); + bw.Write(checksum); + bw.Flush(); + } + + /// + public void Load(Stream stream, char[] password) + { + if (stream == null) + throw new ArgumentNullException(nameof(stream)); + + m_certificateEntries.Clear(); + m_keyEntries.Clear(); + + using (var storeStream = ValidateStream(stream, password)) + { + BinaryReader br = new BinaryReader(storeStream); + + int magic = BinaryReaders.ReadInt32BigEndian(br); + int storeVersion = BinaryReaders.ReadInt32BigEndian(br); + + if (!(magic == Magic && (storeVersion == 1 || storeVersion == 2))) + throw new IOException("Invalid keystore format"); + + int numEntries = BinaryReaders.ReadInt32BigEndian(br); + + for (int t = 0; t < numEntries; t++) + { + int tag = BinaryReaders.ReadInt32BigEndian(br); + + switch (tag) + { + case 1: // keys + { + string alias = ReadUtf(br); + DateTime date = ReadDateTime(br); + + // encrypted key data + byte[] keyData = ReadBufferWithInt32Length(br); + + // certificate chain + int chainLength = BinaryReaders.ReadInt32BigEndian(br); + X509Certificate[] chain = null; + if (chainLength > 0) + { + var certs = new List(System.Math.Min(10, chainLength)); + for (int certNo = 0; certNo != chainLength; certNo++) + { + certs.Add(ReadTypedCertificate(br, storeVersion)); + } + chain = certs.ToArray(); + } + m_keyEntries.Add(alias, new JksKeyEntry(date, keyData, chain)); + break; + } + case 2: // certificate + { + string alias = ReadUtf(br); + DateTime date = ReadDateTime(br); + + X509Certificate cert = ReadTypedCertificate(br, storeVersion); + + m_certificateEntries.Add(alias, new JksTrustedCertEntry(date, cert)); + break; + } + default: + throw new IOException("unable to discern entry type"); + } + } + + if (storeStream.Position != storeStream.Length) + throw new IOException("password incorrect or store tampered with"); + } + } + + /* + * Validate password takes the checksum of the store and will either. + * 1. If password is null, load the store into memory, return the result. + * 2. If password is not null, load the store into memory, test the checksum, and if successful return + * a new input stream instance of the store. + * 3. Fail if there is a password and an invalid checksum. + * + * @param inputStream The input stream. + * @param password the password. + * @return Either the passed in input stream or a new input stream. + */ + /// + private ErasableByteStream ValidateStream(Stream inputStream, char[] password) + { + byte[] rawStore = Streams.ReadAll(inputStream); + int checksumPos = rawStore.Length - 20; + + if (password != null) + { + byte[] checksum = CalculateChecksum(password, rawStore, 0, checksumPos); + + if (!Arrays.ConstantTimeAreEqual(20, checksum, 0, rawStore, checksumPos)) + { + Array.Clear(rawStore, 0, rawStore.Length); + throw new IOException("password incorrect or store tampered with"); + } + } + + return new ErasableByteStream(rawStore, 0, checksumPos); + } + + private static void AddPassword(IDigest digest, char[] password) + { + // Encoding.BigEndianUnicode + for (int i = 0; i < password.Length; ++i) + { + digest.Update((byte)(password[i] >> 8)); + digest.Update((byte)password[i]); + } + } + + private static byte[] CalculateChecksum(char[] password, byte[] buffer, int offset, int length) + { + IDigest checksumDigest = CreateChecksumDigest(password); + checksumDigest.BlockUpdate(buffer, offset, length); + return DigestUtilities.DoFinal(checksumDigest); + } + + private static X509Certificate[] CloneChain(X509Certificate[] chain) + { + return (X509Certificate[])chain?.Clone(); + } + + private static string ConvertAlias(string alias) + { + return alias.ToLowerInvariant(); + } + + private static IDigest CreateChecksumDigest(char[] password) + { + IDigest digest = DigestUtilities.GetDigest("SHA-1"); + AddPassword(digest, password); + + // + // This "Mighty Aphrodite" string goes all the way back to the + // first java betas in the mid 90's, why who knows? But see + // https://cryptosense.com/mighty-aphrodite-dark-secrets-of-the-java-keystore/ + // + byte[] prefix = Encoding.UTF8.GetBytes("Mighty Aphrodite"); + digest.BlockUpdate(prefix, 0, prefix.Length); + return digest; + } + + private static byte[] ReadBufferWithInt16Length(BinaryReader br) + { + int length = BinaryReaders.ReadInt16BigEndian(br); + return BinaryReaders.ReadBytesFully(br, length); + } + + private static byte[] ReadBufferWithInt32Length(BinaryReader br) + { + int length = BinaryReaders.ReadInt32BigEndian(br); + return BinaryReaders.ReadBytesFully(br, length); + } + + private static DateTime ReadDateTime(BinaryReader br) + { + long unixMS = BinaryReaders.ReadInt64BigEndian(br); + return DateTimeUtilities.UnixMsToDateTime(unixMS); + } + + private static X509Certificate ReadTypedCertificate(BinaryReader br, int storeVersion) + { + if (storeVersion == 2) + { + string certFormat = ReadUtf(br); + if ("X.509" != certFormat) + throw new IOException("Unsupported certificate format: " + certFormat); + } + + byte[] certData = ReadBufferWithInt32Length(br); + try + { + return new X509Certificate(certData); + } + finally + { + Array.Clear(certData, 0, certData.Length); + } + } + + private static string ReadUtf(BinaryReader br) + { + byte[] utfBytes = ReadBufferWithInt16Length(br); + + /* + * FIXME JKS actually uses a "modified UTF-8" format. For the moment we will just support single-byte + * encodings that aren't null bytes. + */ + for (int i = 0; i < utfBytes.Length; ++i) + { + byte utfByte = utfBytes[i]; + if (utfByte == 0 || (utfByte & 0x80) != 0) + throw new NotSupportedException("Currently missing support for modified UTF-8 encoding in JKS"); + } + + return Encoding.UTF8.GetString(utfBytes); + } + + private static void WriteBufferWithInt16Length(BinaryWriter bw, byte[] buffer) + { + BinaryWriters.WriteInt16BigEndian(bw, Convert.ToInt16(buffer.Length)); + bw.Write(buffer); + } + + private static void WriteBufferWithInt32Length(BinaryWriter bw, byte[] buffer) + { + BinaryWriters.WriteInt32BigEndian(bw, buffer.Length); + bw.Write(buffer); + } + + private static void WriteDateTime(BinaryWriter bw, DateTime dateTime) + { + long unixMS = DateTimeUtilities.DateTimeToUnixMs(dateTime); + BinaryWriters.WriteInt64BigEndian(bw, unixMS); + } + + private static void WriteTypedCertificate(BinaryWriter bw, X509Certificate cert) + { + WriteUtf(bw, "X.509"); + WriteBufferWithInt32Length(bw, cert.GetEncoded()); + } + + private static void WriteUtf(BinaryWriter bw, string s) + { + byte[] utfBytes = Encoding.UTF8.GetBytes(s); + + /* + * FIXME JKS actually uses a "modified UTF-8" format. For the moment we will just support single-byte + * encodings that aren't null bytes. + */ + for (int i = 0; i < utfBytes.Length; ++i) + { + byte utfByte = utfBytes[i]; + if (utfByte == 0 || (utfByte & 0x80) != 0) + throw new NotSupportedException("Currently missing support for modified UTF-8 encoding in JKS"); + } + + WriteBufferWithInt16Length(bw, utfBytes); + } + + /** + * JksTrustedCertEntry is a internal container for the certificate entry. + */ + private sealed class JksTrustedCertEntry + { + internal readonly DateTime date; + internal readonly X509Certificate cert; + + internal JksTrustedCertEntry(DateTime date, X509Certificate cert) + { + this.date = date; + this.cert = cert; + } + } + + private sealed class JksKeyEntry + { + internal readonly DateTime date; + internal readonly EncryptedPrivateKeyInfo keyData; + internal readonly X509Certificate[] chain; + + internal JksKeyEntry(DateTime date, byte[] keyData, X509Certificate[] chain) + { + this.date = date; + this.keyData = EncryptedPrivateKeyInfo.GetInstance(Asn1Sequence.GetInstance(keyData)); + this.chain = chain; + } + } + + private sealed class ErasableByteStream + : MemoryStream + { + internal ErasableByteStream(byte[] buffer, int index, int count) + : base(buffer, index, count, false, true) + { + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + Position = 0L; + + byte[] rawStore = GetBuffer(); + Array.Clear(rawStore, 0, rawStore.Length); + } + base.Dispose(disposing); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/JksStore.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/JksStore.cs.meta new file mode 100644 index 000000000..5fd90d650 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/JksStore.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 76c504517a951fc4e8508cc041cd8ec8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/KeyException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/KeyException.cs new file mode 100644 index 000000000..048942099 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/KeyException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + [Serializable] + public class KeyException + : GeneralSecurityException + { + public KeyException() + : base() + { + } + + public KeyException(string message) + : base(message) + { + } + + public KeyException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected KeyException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/KeyException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/KeyException.cs.meta new file mode 100644 index 000000000..17107b96b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/KeyException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 981c3b6a3e40ccc479b9b7c4a5e4568e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/MacUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/MacUtilities.cs new file mode 100644 index 000000000..01ec232f6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/MacUtilities.cs @@ -0,0 +1,238 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Iana; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Misc; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Rosstandart; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Paddings; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + /// + /// Utility class for creating HMac object from their names/Oids + /// + public static class MacUtilities + { + private static readonly IDictionary Algorithms = + new Dictionary(StringComparer.OrdinalIgnoreCase); + + static MacUtilities() + { + Algorithms[IanaObjectIdentifiers.HmacMD5.Id] = "HMAC-MD5"; + Algorithms[IanaObjectIdentifiers.HmacRipeMD160.Id] = "HMAC-RIPEMD160"; + Algorithms[IanaObjectIdentifiers.HmacSha1.Id] = "HMAC-SHA1"; + Algorithms[IanaObjectIdentifiers.HmacTiger.Id] = "HMAC-TIGER"; + + Algorithms[PkcsObjectIdentifiers.IdHmacWithSha1.Id] = "HMAC-SHA1"; + Algorithms[MiscObjectIdentifiers.HMAC_SHA1.Id] = "HMAC-SHA1"; + Algorithms[PkcsObjectIdentifiers.IdHmacWithSha224.Id] = "HMAC-SHA224"; + Algorithms[PkcsObjectIdentifiers.IdHmacWithSha256.Id] = "HMAC-SHA256"; + Algorithms[PkcsObjectIdentifiers.IdHmacWithSha384.Id] = "HMAC-SHA384"; + Algorithms[PkcsObjectIdentifiers.IdHmacWithSha512.Id] = "HMAC-SHA512"; + + Algorithms[NistObjectIdentifiers.IdHMacWithSha3_224.Id] = "HMAC-SHA3-224"; + Algorithms[NistObjectIdentifiers.IdHMacWithSha3_256.Id] = "HMAC-SHA3-256"; + Algorithms[NistObjectIdentifiers.IdHMacWithSha3_384.Id] = "HMAC-SHA3-384"; + Algorithms[NistObjectIdentifiers.IdHMacWithSha3_512.Id] = "HMAC-SHA3-512"; + + Algorithms[RosstandartObjectIdentifiers.id_tc26_hmac_gost_3411_12_256.Id] = "HMAC-GOST3411-2012-256"; + Algorithms[RosstandartObjectIdentifiers.id_tc26_hmac_gost_3411_12_512.Id] = "HMAC-GOST3411-2012-512"; + + // TODO AESMAC? + + Algorithms["DES"] = "DESMAC"; + Algorithms["DES/CFB8"] = "DESMAC/CFB8"; + Algorithms["DES64"] = "DESMAC64"; + Algorithms["DESEDE"] = "DESEDEMAC"; + Algorithms[PkcsObjectIdentifiers.DesEde3Cbc.Id] = "DESEDEMAC"; + Algorithms["DESEDE/CFB8"] = "DESEDEMAC/CFB8"; + Algorithms["DESISO9797MAC"] = "DESWITHISO9797"; + Algorithms["DESEDE64"] = "DESEDEMAC64"; + + Algorithms["DESEDE64WITHISO7816-4PADDING"] = "DESEDEMAC64WITHISO7816-4PADDING"; + Algorithms["DESEDEISO9797ALG1MACWITHISO7816-4PADDING"] = "DESEDEMAC64WITHISO7816-4PADDING"; + Algorithms["DESEDEISO9797ALG1WITHISO7816-4PADDING"] = "DESEDEMAC64WITHISO7816-4PADDING"; + + Algorithms["ISO9797ALG3"] = "ISO9797ALG3MAC"; + Algorithms["ISO9797ALG3MACWITHISO7816-4PADDING"] = "ISO9797ALG3WITHISO7816-4PADDING"; + + Algorithms["SKIPJACK"] = "SKIPJACKMAC"; + Algorithms["SKIPJACK/CFB8"] = "SKIPJACKMAC/CFB8"; + Algorithms["IDEA"] = "IDEAMAC"; + Algorithms["IDEA/CFB8"] = "IDEAMAC/CFB8"; + Algorithms["RC2"] = "RC2MAC"; + Algorithms["RC2/CFB8"] = "RC2MAC/CFB8"; + Algorithms["RC5"] = "RC5MAC"; + Algorithms["RC5/CFB8"] = "RC5MAC/CFB8"; + Algorithms["GOST28147"] = "GOST28147MAC"; + Algorithms["VMPC"] = "VMPCMAC"; + Algorithms["VMPC-MAC"] = "VMPCMAC"; + Algorithms["SIPHASH"] = "SIPHASH-2-4"; + + Algorithms["PBEWITHHMACSHA"] = "PBEWITHHMACSHA1"; + Algorithms["1.3.14.3.2.26"] = "PBEWITHHMACSHA1"; + } + + public static IMac GetMac(DerObjectIdentifier id) + { + return GetMac(id.Id); + } + + public static IMac GetMac(string algorithm) + { + if (algorithm == null) + throw new ArgumentNullException(nameof(algorithm)); + + string mechanism = CollectionUtilities.GetValueOrKey(Algorithms, algorithm).ToUpperInvariant(); + + if (Org.BouncyCastle.Utilities.Platform.StartsWith(mechanism, "PBEWITH")) + { + mechanism = mechanism.Substring("PBEWITH".Length); + } + + if (Org.BouncyCastle.Utilities.Platform.StartsWith(mechanism, "HMAC")) + { + string digestName; + if (Org.BouncyCastle.Utilities.Platform.StartsWith(mechanism, "HMAC-") || Org.BouncyCastle.Utilities.Platform.StartsWith(mechanism, "HMAC/")) + { + digestName = mechanism.Substring(5); + } + else + { + digestName = mechanism.Substring(4); + } + + return new HMac(DigestUtilities.GetDigest(digestName)); + } + + if (mechanism == "AESCMAC") + { + return new CMac(AesUtilities.CreateEngine()); + } + if (mechanism == "DESMAC") + { + return new CbcBlockCipherMac(new DesEngine()); + } + if (mechanism == "DESMAC/CFB8") + { + return new CfbBlockCipherMac(new DesEngine()); + } + if (mechanism == "DESMAC64") + { + return new CbcBlockCipherMac(new DesEngine(), 64); + } + if (mechanism == "DESEDECMAC") + { + return new CMac(new DesEdeEngine()); + } + if (mechanism == "DESEDEMAC") + { + return new CbcBlockCipherMac(new DesEdeEngine()); + } + if (mechanism == "DESEDEMAC/CFB8") + { + return new CfbBlockCipherMac(new DesEdeEngine()); + } + if (mechanism == "DESEDEMAC64") + { + return new CbcBlockCipherMac(new DesEdeEngine(), 64); + } + if (mechanism == "DESEDEMAC64WITHISO7816-4PADDING") + { + return new CbcBlockCipherMac(new DesEdeEngine(), 64, new ISO7816d4Padding()); + } + if (mechanism == "DESWITHISO9797" + || mechanism == "ISO9797ALG3MAC") + { + return new ISO9797Alg3Mac(new DesEngine()); + } + if (mechanism == "ISO9797ALG3WITHISO7816-4PADDING") + { + return new ISO9797Alg3Mac(new DesEngine(), new ISO7816d4Padding()); + } + if (mechanism == "SKIPJACKMAC") + { + return new CbcBlockCipherMac(new SkipjackEngine()); + } + if (mechanism == "SKIPJACKMAC/CFB8") + { + return new CfbBlockCipherMac(new SkipjackEngine()); + } + if (mechanism == "IDEAMAC") + { + return new CbcBlockCipherMac(new IdeaEngine()); + } + if (mechanism == "IDEAMAC/CFB8") + { + return new CfbBlockCipherMac(new IdeaEngine()); + } + if (mechanism == "RC2MAC") + { + return new CbcBlockCipherMac(new RC2Engine()); + } + if (mechanism == "RC2MAC/CFB8") + { + return new CfbBlockCipherMac(new RC2Engine()); + } + if (mechanism == "RC5MAC") + { + return new CbcBlockCipherMac(new RC532Engine()); + } + if (mechanism == "RC5MAC/CFB8") + { + return new CfbBlockCipherMac(new RC532Engine()); + } + if (mechanism == "GOST28147MAC") + { + return new Gost28147Mac(); + } + if (mechanism == "VMPCMAC") + { + return new VmpcMac(); + } + if (mechanism == "SIPHASH-2-4") + { + return new SipHash(); + } + throw new SecurityUtilityException("Mac " + mechanism + " not recognised."); + } + + public static string GetAlgorithmName(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(Algorithms, oid.Id); + } + + public static byte[] CalculateMac(string algorithm, ICipherParameters cp, byte[] input) + { + IMac mac = GetMac(algorithm); + mac.Init(cp); + mac.BlockUpdate(input, 0, input.Length); + return DoFinal(mac); + } + + public static byte[] DoFinal(IMac mac) + { + byte[] b = new byte[mac.GetMacSize()]; + mac.DoFinal(b, 0); + return b; + } + + public static byte[] DoFinal(IMac mac, byte[] input) + { + mac.BlockUpdate(input, 0, input.Length); + return DoFinal(mac); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/MacUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/MacUtilities.cs.meta new file mode 100644 index 000000000..d49ea38ae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/MacUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc8314b890aed0843acbd81d9e6db0cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/ParameterUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/ParameterUtilities.cs new file mode 100644 index 000000000..564d7f45e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/ParameterUtilities.cs @@ -0,0 +1,361 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Kisa; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Misc; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nsri; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ntt; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + public static class ParameterUtilities + { + private static readonly IDictionary Algorithms = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly IDictionary BasicIVSizes = + new Dictionary(StringComparer.OrdinalIgnoreCase); + + static ParameterUtilities() + { + AddAlgorithm("AES", + "AESWRAP"); + AddAlgorithm("AES128", + "2.16.840.1.101.3.4.2", + NistObjectIdentifiers.IdAes128Cbc, + NistObjectIdentifiers.IdAes128Ccm, + NistObjectIdentifiers.IdAes128Cfb, + NistObjectIdentifiers.IdAes128Ecb, + NistObjectIdentifiers.IdAes128Gcm, + NistObjectIdentifiers.IdAes128Ofb, + NistObjectIdentifiers.IdAes128Wrap); + AddAlgorithm("AES192", + "2.16.840.1.101.3.4.22", + NistObjectIdentifiers.IdAes192Cbc, + NistObjectIdentifiers.IdAes192Ccm, + NistObjectIdentifiers.IdAes192Cfb, + NistObjectIdentifiers.IdAes192Ecb, + NistObjectIdentifiers.IdAes192Gcm, + NistObjectIdentifiers.IdAes192Ofb, + NistObjectIdentifiers.IdAes192Wrap); + AddAlgorithm("AES256", + "2.16.840.1.101.3.4.42", + NistObjectIdentifiers.IdAes256Cbc, + NistObjectIdentifiers.IdAes256Ccm, + NistObjectIdentifiers.IdAes256Cfb, + NistObjectIdentifiers.IdAes256Ecb, + NistObjectIdentifiers.IdAes256Gcm, + NistObjectIdentifiers.IdAes256Ofb, + NistObjectIdentifiers.IdAes256Wrap); + AddAlgorithm("ARIA"); + AddAlgorithm("ARIA128", + NsriObjectIdentifiers.id_aria128_cbc, + NsriObjectIdentifiers.id_aria128_ccm, + NsriObjectIdentifiers.id_aria128_cfb, + NsriObjectIdentifiers.id_aria128_ctr, + NsriObjectIdentifiers.id_aria128_ecb, + NsriObjectIdentifiers.id_aria128_gcm, + NsriObjectIdentifiers.id_aria128_ocb2, + NsriObjectIdentifiers.id_aria128_ofb); + AddAlgorithm("ARIA192", + NsriObjectIdentifiers.id_aria192_cbc, + NsriObjectIdentifiers.id_aria192_ccm, + NsriObjectIdentifiers.id_aria192_cfb, + NsriObjectIdentifiers.id_aria192_ctr, + NsriObjectIdentifiers.id_aria192_ecb, + NsriObjectIdentifiers.id_aria192_gcm, + NsriObjectIdentifiers.id_aria192_ocb2, + NsriObjectIdentifiers.id_aria192_ofb); + AddAlgorithm("ARIA256", + NsriObjectIdentifiers.id_aria256_cbc, + NsriObjectIdentifiers.id_aria256_ccm, + NsriObjectIdentifiers.id_aria256_cfb, + NsriObjectIdentifiers.id_aria256_ctr, + NsriObjectIdentifiers.id_aria256_ecb, + NsriObjectIdentifiers.id_aria256_gcm, + NsriObjectIdentifiers.id_aria256_ocb2, + NsriObjectIdentifiers.id_aria256_ofb); + AddAlgorithm("BLOWFISH", + "1.3.6.1.4.1.3029.1.2"); + AddAlgorithm("CAMELLIA", + "CAMELLIAWRAP"); + AddAlgorithm("CAMELLIA128", + NttObjectIdentifiers.IdCamellia128Cbc, + NttObjectIdentifiers.IdCamellia128Wrap); + AddAlgorithm("CAMELLIA192", + NttObjectIdentifiers.IdCamellia192Cbc, + NttObjectIdentifiers.IdCamellia192Wrap); + AddAlgorithm("CAMELLIA256", + NttObjectIdentifiers.IdCamellia256Cbc, + NttObjectIdentifiers.IdCamellia256Wrap); + AddAlgorithm("CAST5", + "1.2.840.113533.7.66.10"); + AddAlgorithm("CAST6"); + AddAlgorithm("CHACHA"); + AddAlgorithm("CHACHA7539", + "CHACHA20", + "CHACHA20-POLY1305", + PkcsObjectIdentifiers.IdAlgAeadChaCha20Poly1305); + AddAlgorithm("DES", + OiwObjectIdentifiers.DesCbc, + OiwObjectIdentifiers.DesCfb, + OiwObjectIdentifiers.DesEcb, + OiwObjectIdentifiers.DesOfb); + AddAlgorithm("DESEDE", + "DESEDEWRAP", + "TDEA", + OiwObjectIdentifiers.DesEde, + PkcsObjectIdentifiers.IdAlgCms3DesWrap); + AddAlgorithm("DESEDE3", + PkcsObjectIdentifiers.DesEde3Cbc); + AddAlgorithm("GOST28147", + "GOST", + "GOST-28147", + CryptoProObjectIdentifiers.GostR28147Gcfb); + AddAlgorithm("HC128"); + AddAlgorithm("HC256"); + AddAlgorithm("IDEA", + "1.3.6.1.4.1.188.7.1.1.2"); + AddAlgorithm("NOEKEON"); + AddAlgorithm("RC2", + PkcsObjectIdentifiers.RC2Cbc, + PkcsObjectIdentifiers.IdAlgCmsRC2Wrap); + AddAlgorithm("RC4", + "ARC4", + "1.2.840.113549.3.4"); + AddAlgorithm("RC5", + "RC5-32"); + AddAlgorithm("RC5-64"); + AddAlgorithm("RC6"); + AddAlgorithm("RIJNDAEL"); + AddAlgorithm("SALSA20"); + AddAlgorithm("SEED", + KisaObjectIdentifiers.IdNpkiAppCmsSeedWrap, + KisaObjectIdentifiers.IdSeedCbc); + AddAlgorithm("SERPENT"); + AddAlgorithm("SKIPJACK"); + AddAlgorithm("SM4"); + AddAlgorithm("TEA"); + AddAlgorithm("THREEFISH-256"); + AddAlgorithm("THREEFISH-512"); + AddAlgorithm("THREEFISH-1024"); + AddAlgorithm("TNEPRES"); + AddAlgorithm("TWOFISH"); + AddAlgorithm("VMPC"); + AddAlgorithm("VMPC-KSA3"); + AddAlgorithm("XTEA"); + + AddBasicIVSizeEntries(8, "BLOWFISH", "CHACHA", "DES", "DESEDE", "DESEDE3", "SALSA20"); + AddBasicIVSizeEntries(12, "CHACHA7539"); + AddBasicIVSizeEntries(16, "AES", "AES128", "AES192", "AES256", "ARIA", "ARIA128", "ARIA192", "ARIA256", + "CAMELLIA", "CAMELLIA128", "CAMELLIA192", "CAMELLIA256", "NOEKEON", "SEED", "SM4"); + + // TODO These algorithms support an IV + // but JCE doesn't seem to provide an AlgorithmParametersGenerator for them + // "RIJNDAEL", "SKIPJACK", "TWOFISH" + } + + private static void AddAlgorithm(string canonicalName, params object[] aliases) + { + Algorithms[canonicalName] = canonicalName; + + foreach (object alias in aliases) + { + Algorithms[alias.ToString()] = canonicalName; + } + } + + private static void AddBasicIVSizeEntries(int size, params string[] algorithms) + { + foreach (string algorithm in algorithms) + { + BasicIVSizes.Add(algorithm, size); + } + } + + public static string GetCanonicalAlgorithmName(string algorithm) + { + return CollectionUtilities.GetValueOrNull(Algorithms, algorithm); + } + + public static KeyParameter CreateKeyParameter(DerObjectIdentifier algOid, byte[] keyBytes) + { + return CreateKeyParameter(algOid.Id, keyBytes, 0, keyBytes.Length); + } + + public static KeyParameter CreateKeyParameter(string algorithm, byte[] keyBytes) + { + return CreateKeyParameter(algorithm, keyBytes, 0, keyBytes.Length); + } + + public static KeyParameter CreateKeyParameter( + DerObjectIdentifier algOid, + byte[] keyBytes, + int offset, + int length) + { + return CreateKeyParameter(algOid.Id, keyBytes, offset, length); + } + + public static KeyParameter CreateKeyParameter( + string algorithm, + byte[] keyBytes, + int offset, + int length) + { + if (algorithm == null) + throw new ArgumentNullException(nameof(algorithm)); + + string canonical = GetCanonicalAlgorithmName(algorithm); + + if (canonical == null) + throw new SecurityUtilityException("Algorithm " + algorithm + " not recognised."); + + if (canonical == "DES") + return new DesParameters(keyBytes, offset, length); + + if (canonical == "DESEDE" || canonical =="DESEDE3") + return new DesEdeParameters(keyBytes, offset, length); + + if (canonical == "RC2") + return new RC2Parameters(keyBytes, offset, length); + + return new KeyParameter(keyBytes, offset, length); + } + + public static ICipherParameters GetCipherParameters( + DerObjectIdentifier algOid, + ICipherParameters key, + Asn1Object asn1Params) + { + return GetCipherParameters(algOid.Id, key, asn1Params); + } + + public static ICipherParameters GetCipherParameters( + string algorithm, + ICipherParameters key, + Asn1Object asn1Params) + { + if (algorithm == null) + throw new ArgumentNullException("algorithm"); + + string canonical = GetCanonicalAlgorithmName(algorithm); + + if (canonical == null) + throw new SecurityUtilityException("Algorithm " + algorithm + " not recognised."); + + byte[] iv = null; + + try + { + // TODO These algorithms support an IV + // but JCE doesn't seem to provide an AlgorithmParametersGenerator for them + // "RIJNDAEL", "SKIPJACK", "TWOFISH" + + int basicIVKeySize = FindBasicIVSize(canonical); + if (basicIVKeySize != -1 + || canonical == "RIJNDAEL" || canonical == "SKIPJACK" || canonical == "TWOFISH") + { + iv = ((Asn1OctetString) asn1Params).GetOctets(); + } + else if (canonical == "CAST5") + { + iv = Cast5CbcParameters.GetInstance(asn1Params).GetIV(); + } + else if (canonical == "IDEA") + { + iv = IdeaCbcPar.GetInstance(asn1Params).GetIV(); + } + else if (canonical == "RC2") + { + iv = RC2CbcParameter.GetInstance(asn1Params).GetIV(); + } + } + catch (Exception e) + { + throw new ArgumentException("Could not process ASN.1 parameters", e); + } + + if (iv != null) + { + return new ParametersWithIV(key, iv); + } + + throw new SecurityUtilityException("Algorithm " + algorithm + " not recognised."); + } + + public static Asn1Encodable GenerateParameters( + DerObjectIdentifier algID, + SecureRandom random) + { + return GenerateParameters(algID.Id, random); + } + + public static Asn1Encodable GenerateParameters( + string algorithm, + SecureRandom random) + { + if (algorithm == null) + throw new ArgumentNullException("algorithm"); + + string canonical = GetCanonicalAlgorithmName(algorithm); + + if (canonical == null) + throw new SecurityUtilityException("Algorithm " + algorithm + " not recognised."); + + // TODO These algorithms support an IV + // but JCE doesn't seem to provide an AlgorithmParametersGenerator for them + // "RIJNDAEL", "SKIPJACK", "TWOFISH" + + int basicIVKeySize = FindBasicIVSize(canonical); + if (basicIVKeySize != -1) + return CreateIVOctetString(random, basicIVKeySize); + + if (canonical == "CAST5") + return new Cast5CbcParameters(CreateIV(random, 8), 128); + + if (canonical == "IDEA") + return new IdeaCbcPar(CreateIV(random, 8)); + + if (canonical == "RC2") + return new RC2CbcParameter(CreateIV(random, 8)); + + throw new SecurityUtilityException("Algorithm " + algorithm + " not recognised."); + } + + public static ICipherParameters WithRandom(ICipherParameters cp, SecureRandom random) + { + if (random != null) + { + cp = new ParametersWithRandom(cp, random); + } + return cp; + } + + private static Asn1OctetString CreateIVOctetString(SecureRandom random, int ivLength) + { + return new DerOctetString(CreateIV(random, ivLength)); + } + + private static byte[] CreateIV(SecureRandom random, int ivLength) + { + return SecureRandom.GetNextBytes(random, ivLength); + } + + private static int FindBasicIVSize(string canonicalName) + { + return BasicIVSizes.TryGetValue(canonicalName, out int keySize) ? keySize : -1; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/ParameterUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/ParameterUtilities.cs.meta new file mode 100644 index 000000000..85eb922d0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/ParameterUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9c1511264e2b6be42bd6afc367283966 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/PbeUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/PbeUtilities.cs new file mode 100644 index 000000000..ef432a7c6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/PbeUtilities.cs @@ -0,0 +1,696 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.BC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.TeleTrust; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + /// + /// + /// + public static class PbeUtilities + { + const string Pkcs5S1 = "Pkcs5S1"; + const string Pkcs5S2 = "Pkcs5S2"; + const string Pkcs12 = "Pkcs12"; + const string OpenSsl = "OpenSsl"; + + private static readonly IDictionary Algorithms = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly IDictionary AlgorithmType = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly IDictionary Oids = + new Dictionary(StringComparer.OrdinalIgnoreCase); + + static PbeUtilities() + { + Algorithms["PKCS5SCHEME1"] = "Pkcs5scheme1"; + Algorithms["PKCS5SCHEME2"] = "Pkcs5scheme2"; + Algorithms["PBKDF2"] = "Pkcs5scheme2"; + Algorithms[PkcsObjectIdentifiers.IdPbeS2.Id] = "Pkcs5scheme2"; +// algorithms[PkcsObjectIdentifiers.IdPbkdf2.Id] = "Pkcs5scheme2"; + + // FIXME Add support for these? (see Pkcs8Generator) +// algorithms[PkcsObjectIdentifiers.DesEde3Cbc.Id] = "Pkcs5scheme2"; +// algorithms[NistObjectIdentifiers.IdAes128Cbc.Id] = "Pkcs5scheme2"; +// algorithms[NistObjectIdentifiers.IdAes192Cbc.Id] = "Pkcs5scheme2"; +// algorithms[NistObjectIdentifiers.IdAes256Cbc.Id] = "Pkcs5scheme2"; + + Algorithms["PBEWITHMD2ANDDES-CBC"] = "PBEwithMD2andDES-CBC"; + Algorithms[PkcsObjectIdentifiers.PbeWithMD2AndDesCbc.Id] = "PBEwithMD2andDES-CBC"; + Algorithms["PBEWITHMD2ANDRC2-CBC"] = "PBEwithMD2andRC2-CBC"; + Algorithms[PkcsObjectIdentifiers.PbeWithMD2AndRC2Cbc.Id] = "PBEwithMD2andRC2-CBC"; + Algorithms["PBEWITHMD5ANDDES-CBC"] = "PBEwithMD5andDES-CBC"; + Algorithms[PkcsObjectIdentifiers.PbeWithMD5AndDesCbc.Id] = "PBEwithMD5andDES-CBC"; + Algorithms["PBEWITHMD5ANDRC2-CBC"] = "PBEwithMD5andRC2-CBC"; + Algorithms[PkcsObjectIdentifiers.PbeWithMD5AndRC2Cbc.Id] = "PBEwithMD5andRC2-CBC"; + Algorithms["PBEWITHSHA1ANDDES"] = "PBEwithSHA-1andDES-CBC"; + Algorithms["PBEWITHSHA-1ANDDES"] = "PBEwithSHA-1andDES-CBC"; + Algorithms["PBEWITHSHA1ANDDES-CBC"] = "PBEwithSHA-1andDES-CBC"; + Algorithms["PBEWITHSHA-1ANDDES-CBC"] = "PBEwithSHA-1andDES-CBC"; + Algorithms[PkcsObjectIdentifiers.PbeWithSha1AndDesCbc.Id] = "PBEwithSHA-1andDES-CBC"; + Algorithms["PBEWITHSHA1ANDRC2"] = "PBEwithSHA-1andRC2-CBC"; + Algorithms["PBEWITHSHA-1ANDRC2"] = "PBEwithSHA-1andRC2-CBC"; + Algorithms["PBEWITHSHA1ANDRC2-CBC"] = "PBEwithSHA-1andRC2-CBC"; + Algorithms["PBEWITHSHA-1ANDRC2-CBC"] = "PBEwithSHA-1andRC2-CBC"; + Algorithms[PkcsObjectIdentifiers.PbeWithSha1AndRC2Cbc.Id] = "PBEwithSHA-1andRC2-CBC"; + Algorithms["PKCS12"] = "Pkcs12"; + Algorithms[BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes128_cbc.Id] = "PBEwithSHA-1and128bitAES-CBC-BC"; + Algorithms[BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes192_cbc.Id] = "PBEwithSHA-1and192bitAES-CBC-BC"; + Algorithms[BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes256_cbc.Id] = "PBEwithSHA-1and256bitAES-CBC-BC"; + Algorithms[BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes128_cbc.Id] = "PBEwithSHA-256and128bitAES-CBC-BC"; + Algorithms[BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes192_cbc.Id] = "PBEwithSHA-256and192bitAES-CBC-BC"; + Algorithms[BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes256_cbc.Id] = "PBEwithSHA-256and256bitAES-CBC-BC"; + Algorithms["PBEWITHSHAAND128BITRC4"] = "PBEwithSHA-1and128bitRC4"; + Algorithms["PBEWITHSHA1AND128BITRC4"] = "PBEwithSHA-1and128bitRC4"; + Algorithms["PBEWITHSHA-1AND128BITRC4"] = "PBEwithSHA-1and128bitRC4"; + Algorithms[PkcsObjectIdentifiers.PbeWithShaAnd128BitRC4.Id] = "PBEwithSHA-1and128bitRC4"; + Algorithms["PBEWITHSHAAND40BITRC4"] = "PBEwithSHA-1and40bitRC4"; + Algorithms["PBEWITHSHA1AND40BITRC4"] = "PBEwithSHA-1and40bitRC4"; + Algorithms["PBEWITHSHA-1AND40BITRC4"] = "PBEwithSHA-1and40bitRC4"; + Algorithms[PkcsObjectIdentifiers.PbeWithShaAnd40BitRC4.Id] = "PBEwithSHA-1and40bitRC4"; + Algorithms["PBEWITHSHAAND3-KEYDESEDE-CBC"] = "PBEwithSHA-1and3-keyDESEDE-CBC"; + Algorithms["PBEWITHSHAAND3-KEYTRIPLEDES-CBC"] = "PBEwithSHA-1and3-keyDESEDE-CBC"; + Algorithms["PBEWITHSHA1AND3-KEYDESEDE-CBC"] = "PBEwithSHA-1and3-keyDESEDE-CBC"; + Algorithms["PBEWITHSHA1AND3-KEYTRIPLEDES-CBC"] = "PBEwithSHA-1and3-keyDESEDE-CBC"; + Algorithms["PBEWITHSHA-1AND3-KEYDESEDE-CBC"] = "PBEwithSHA-1and3-keyDESEDE-CBC"; + Algorithms["PBEWITHSHA-1AND3-KEYTRIPLEDES-CBC"] = "PBEwithSHA-1and3-keyDESEDE-CBC"; + Algorithms[PkcsObjectIdentifiers.PbeWithShaAnd3KeyTripleDesCbc.Id] = "PBEwithSHA-1and3-keyDESEDE-CBC"; + Algorithms["PBEWITHSHAAND2-KEYDESEDE-CBC"] = "PBEwithSHA-1and2-keyDESEDE-CBC"; + Algorithms["PBEWITHSHAAND2-KEYTRIPLEDES-CBC"] = "PBEwithSHA-1and2-keyDESEDE-CBC"; + Algorithms["PBEWITHSHA1AND2-KEYDESEDE-CBC"] = "PBEwithSHA-1and2-keyDESEDE-CBC"; + Algorithms["PBEWITHSHA1AND2-KEYTRIPLEDES-CBC"] = "PBEwithSHA-1and2-keyDESEDE-CBC"; + Algorithms["PBEWITHSHA-1AND2-KEYDESEDE-CBC"] = "PBEwithSHA-1and2-keyDESEDE-CBC"; + Algorithms["PBEWITHSHA-1AND2-KEYTRIPLEDES-CBC"] = "PBEwithSHA-1and2-keyDESEDE-CBC"; + Algorithms[PkcsObjectIdentifiers.PbeWithShaAnd2KeyTripleDesCbc.Id] = "PBEwithSHA-1and2-keyDESEDE-CBC"; + Algorithms["PBEWITHSHAAND128BITRC2-CBC"] = "PBEwithSHA-1and128bitRC2-CBC"; + Algorithms["PBEWITHSHA1AND128BITRC2-CBC"] = "PBEwithSHA-1and128bitRC2-CBC"; + Algorithms["PBEWITHSHA-1AND128BITRC2-CBC"] = "PBEwithSHA-1and128bitRC2-CBC"; + Algorithms[PkcsObjectIdentifiers.PbeWithShaAnd128BitRC2Cbc.Id] = "PBEwithSHA-1and128bitRC2-CBC"; + Algorithms["PBEWITHSHAAND40BITRC2-CBC"] = "PBEwithSHA-1and40bitRC2-CBC"; + Algorithms["PBEWITHSHA1AND40BITRC2-CBC"] = "PBEwithSHA-1and40bitRC2-CBC"; + Algorithms["PBEWITHSHA-1AND40BITRC2-CBC"] = "PBEwithSHA-1and40bitRC2-CBC"; + Algorithms[PkcsObjectIdentifiers.PbewithShaAnd40BitRC2Cbc.Id] = "PBEwithSHA-1and40bitRC2-CBC"; + Algorithms["PBEWITHSHAAND128BITAES-CBC-BC"] = "PBEwithSHA-1and128bitAES-CBC-BC"; + Algorithms["PBEWITHSHA1AND128BITAES-CBC-BC"] = "PBEwithSHA-1and128bitAES-CBC-BC"; + Algorithms["PBEWITHSHA-1AND128BITAES-CBC-BC"] = "PBEwithSHA-1and128bitAES-CBC-BC"; + Algorithms["PBEWITHSHAAND192BITAES-CBC-BC"] = "PBEwithSHA-1and192bitAES-CBC-BC"; + Algorithms["PBEWITHSHA1AND192BITAES-CBC-BC"] = "PBEwithSHA-1and192bitAES-CBC-BC"; + Algorithms["PBEWITHSHA-1AND192BITAES-CBC-BC"] = "PBEwithSHA-1and192bitAES-CBC-BC"; + Algorithms["PBEWITHSHAAND256BITAES-CBC-BC"] = "PBEwithSHA-1and256bitAES-CBC-BC"; + Algorithms["PBEWITHSHA1AND256BITAES-CBC-BC"] = "PBEwithSHA-1and256bitAES-CBC-BC"; + Algorithms["PBEWITHSHA-1AND256BITAES-CBC-BC"] = "PBEwithSHA-1and256bitAES-CBC-BC"; + Algorithms["PBEWITHSHA256AND128BITAES-CBC-BC"] = "PBEwithSHA-256and128bitAES-CBC-BC"; + Algorithms["PBEWITHSHA-256AND128BITAES-CBC-BC"] = "PBEwithSHA-256and128bitAES-CBC-BC"; + Algorithms["PBEWITHSHA256AND192BITAES-CBC-BC"] = "PBEwithSHA-256and192bitAES-CBC-BC"; + Algorithms["PBEWITHSHA-256AND192BITAES-CBC-BC"] = "PBEwithSHA-256and192bitAES-CBC-BC"; + Algorithms["PBEWITHSHA256AND256BITAES-CBC-BC"] = "PBEwithSHA-256and256bitAES-CBC-BC"; + Algorithms["PBEWITHSHA-256AND256BITAES-CBC-BC"] = "PBEwithSHA-256and256bitAES-CBC-BC"; + Algorithms["PBEWITHSHAANDIDEA"] = "PBEwithSHA-1andIDEA-CBC"; + Algorithms["PBEWITHSHAANDIDEA-CBC"] = "PBEwithSHA-1andIDEA-CBC"; + Algorithms["PBEWITHSHAANDTWOFISH"] = "PBEwithSHA-1andTWOFISH-CBC"; + Algorithms["PBEWITHSHAANDTWOFISH-CBC"] = "PBEwithSHA-1andTWOFISH-CBC"; + Algorithms["PBEWITHHMACSHA1"] = "PBEwithHmacSHA-1"; + Algorithms["PBEWITHHMACSHA-1"] = "PBEwithHmacSHA-1"; + Algorithms[OiwObjectIdentifiers.IdSha1.Id] = "PBEwithHmacSHA-1"; + Algorithms["PBEWITHHMACSHA224"] = "PBEwithHmacSHA-224"; + Algorithms["PBEWITHHMACSHA-224"] = "PBEwithHmacSHA-224"; + Algorithms[NistObjectIdentifiers.IdSha224.Id] = "PBEwithHmacSHA-224"; + Algorithms["PBEWITHHMACSHA256"] = "PBEwithHmacSHA-256"; + Algorithms["PBEWITHHMACSHA-256"] = "PBEwithHmacSHA-256"; + Algorithms[NistObjectIdentifiers.IdSha256.Id] = "PBEwithHmacSHA-256"; + Algorithms["PBEWITHHMACRIPEMD128"] = "PBEwithHmacRipeMD128"; + Algorithms[TeleTrusTObjectIdentifiers.RipeMD128.Id] = "PBEwithHmacRipeMD128"; + Algorithms["PBEWITHHMACRIPEMD160"] = "PBEwithHmacRipeMD160"; + Algorithms[TeleTrusTObjectIdentifiers.RipeMD160.Id] = "PBEwithHmacRipeMD160"; + Algorithms["PBEWITHHMACRIPEMD256"] = "PBEwithHmacRipeMD256"; + Algorithms[TeleTrusTObjectIdentifiers.RipeMD256.Id] = "PBEwithHmacRipeMD256"; + Algorithms["PBEWITHHMACTIGER"] = "PBEwithHmacTiger"; + + Algorithms["PBEWITHMD5AND128BITAES-CBC-OPENSSL"] = "PBEwithMD5and128bitAES-CBC-OpenSSL"; + Algorithms["PBEWITHMD5AND192BITAES-CBC-OPENSSL"] = "PBEwithMD5and192bitAES-CBC-OpenSSL"; + Algorithms["PBEWITHMD5AND256BITAES-CBC-OPENSSL"] = "PBEwithMD5and256bitAES-CBC-OpenSSL"; + + AlgorithmType["Pkcs5scheme1"] = Pkcs5S1; + AlgorithmType["Pkcs5scheme2"] = Pkcs5S2; + AlgorithmType["PBEwithMD2andDES-CBC"] = Pkcs5S1; + AlgorithmType["PBEwithMD2andRC2-CBC"] = Pkcs5S1; + AlgorithmType["PBEwithMD5andDES-CBC"] = Pkcs5S1; + AlgorithmType["PBEwithMD5andRC2-CBC"] = Pkcs5S1; + AlgorithmType["PBEwithSHA-1andDES-CBC"] = Pkcs5S1; + AlgorithmType["PBEwithSHA-1andRC2-CBC"] = Pkcs5S1; + AlgorithmType["Pkcs12"] = Pkcs12; + AlgorithmType["PBEwithSHA-1and128bitRC4"] = Pkcs12; + AlgorithmType["PBEwithSHA-1and40bitRC4"] = Pkcs12; + AlgorithmType["PBEwithSHA-1and3-keyDESEDE-CBC"] = Pkcs12; + AlgorithmType["PBEwithSHA-1and2-keyDESEDE-CBC"] = Pkcs12; + AlgorithmType["PBEwithSHA-1and128bitRC2-CBC"] = Pkcs12; + AlgorithmType["PBEwithSHA-1and40bitRC2-CBC"] = Pkcs12; + AlgorithmType["PBEwithSHA-1and128bitAES-CBC-BC"] = Pkcs12; + AlgorithmType["PBEwithSHA-1and192bitAES-CBC-BC"] = Pkcs12; + AlgorithmType["PBEwithSHA-1and256bitAES-CBC-BC"] = Pkcs12; + AlgorithmType["PBEwithSHA-256and128bitAES-CBC-BC"] = Pkcs12; + AlgorithmType["PBEwithSHA-256and192bitAES-CBC-BC"] = Pkcs12; + AlgorithmType["PBEwithSHA-256and256bitAES-CBC-BC"] = Pkcs12; + AlgorithmType["PBEwithSHA-1andIDEA-CBC"] = Pkcs12; + AlgorithmType["PBEwithSHA-1andTWOFISH-CBC"] = Pkcs12; + AlgorithmType["PBEwithHmacSHA-1"] = Pkcs12; + AlgorithmType["PBEwithHmacSHA-224"] = Pkcs12; + AlgorithmType["PBEwithHmacSHA-256"] = Pkcs12; + AlgorithmType["PBEwithHmacRipeMD128"] = Pkcs12; + AlgorithmType["PBEwithHmacRipeMD160"] = Pkcs12; + AlgorithmType["PBEwithHmacRipeMD256"] = Pkcs12; + AlgorithmType["PBEwithHmacTiger"] = Pkcs12; + + AlgorithmType["PBEwithMD5and128bitAES-CBC-OpenSSL"] = OpenSsl; + AlgorithmType["PBEwithMD5and192bitAES-CBC-OpenSSL"] = OpenSsl; + AlgorithmType["PBEwithMD5and256bitAES-CBC-OpenSSL"] = OpenSsl; + + Oids["PBEwithMD2andDES-CBC"] = PkcsObjectIdentifiers.PbeWithMD2AndDesCbc; + Oids["PBEwithMD2andRC2-CBC"] = PkcsObjectIdentifiers.PbeWithMD2AndRC2Cbc; + Oids["PBEwithMD5andDES-CBC"] = PkcsObjectIdentifiers.PbeWithMD5AndDesCbc; + Oids["PBEwithMD5andRC2-CBC"] = PkcsObjectIdentifiers.PbeWithMD5AndRC2Cbc; + Oids["PBEwithSHA-1andDES-CBC"] = PkcsObjectIdentifiers.PbeWithSha1AndDesCbc; + Oids["PBEwithSHA-1andRC2-CBC"] = PkcsObjectIdentifiers.PbeWithSha1AndRC2Cbc; + Oids["PBEwithSHA-1and128bitRC4"] = PkcsObjectIdentifiers.PbeWithShaAnd128BitRC4; + Oids["PBEwithSHA-1and40bitRC4"] = PkcsObjectIdentifiers.PbeWithShaAnd40BitRC4; + Oids["PBEwithSHA-1and3-keyDESEDE-CBC"] = PkcsObjectIdentifiers.PbeWithShaAnd3KeyTripleDesCbc; + Oids["PBEwithSHA-1and2-keyDESEDE-CBC"] = PkcsObjectIdentifiers.PbeWithShaAnd2KeyTripleDesCbc; + Oids["PBEwithSHA-1and128bitRC2-CBC"] = PkcsObjectIdentifiers.PbeWithShaAnd128BitRC2Cbc; + Oids["PBEwithSHA-1and40bitRC2-CBC"] = PkcsObjectIdentifiers.PbewithShaAnd40BitRC2Cbc; + Oids["PBEwithHmacSHA-1"] = OiwObjectIdentifiers.IdSha1; + Oids["PBEwithHmacSHA-224"] = NistObjectIdentifiers.IdSha224; + Oids["PBEwithHmacSHA-256"] = NistObjectIdentifiers.IdSha256; + Oids["PBEwithHmacRipeMD128"] = TeleTrusTObjectIdentifiers.RipeMD128; + Oids["PBEwithHmacRipeMD160"] = TeleTrusTObjectIdentifiers.RipeMD160; + Oids["PBEwithHmacRipeMD256"] = TeleTrusTObjectIdentifiers.RipeMD256; + Oids["Pkcs5scheme2"] = PkcsObjectIdentifiers.IdPbeS2; + } + + static PbeParametersGenerator MakePbeGenerator( + string type, + IDigest digest, + byte[] key, + byte[] salt, + int iterationCount) + { + PbeParametersGenerator generator; + + if (type.Equals(Pkcs5S1)) + { + generator = new Pkcs5S1ParametersGenerator(digest); + } + else if (type.Equals(Pkcs5S2)) + { + generator = new Pkcs5S2ParametersGenerator(digest); + } + else if (type.Equals(Pkcs12)) + { + generator = new Pkcs12ParametersGenerator(digest); + } + else if (type.Equals(OpenSsl)) + { + generator = new OpenSslPbeParametersGenerator(); + } + else + { + throw new ArgumentException("Unknown PBE type: " + type, "type"); + } + + generator.Init(key, salt, iterationCount); + return generator; + } + + /// + /// Returns a ObjectIdentifier for a give encoding. + /// + /// A string representation of the encoding. + /// A DerObjectIdentifier, null if the Oid is not available. + public static DerObjectIdentifier GetObjectIdentifier(string mechanism) + { + if (!Algorithms.TryGetValue(mechanism, out var algorithm)) + return null; + + return CollectionUtilities.GetValueOrNull(Oids, algorithm); + } + + //public static ICollection Algorithms + //{ + // get { return oids.Keys; } + //} + + public static bool IsPkcs12(string algorithm) + { + if (!Algorithms.TryGetValue(algorithm, out var mechanism)) + return false; + if (!AlgorithmType.TryGetValue(mechanism, out var algorithmType)) + return false; + + return Pkcs12.Equals(algorithmType); + } + + public static bool IsPkcs5Scheme1(string algorithm) + { + if (!Algorithms.TryGetValue(algorithm, out var mechanism)) + return false; + if (!AlgorithmType.TryGetValue(mechanism, out var algorithmType)) + return false; + + return Pkcs5S1.Equals(algorithmType); + } + + public static bool IsPkcs5Scheme2(string algorithm) + { + if (!Algorithms.TryGetValue(algorithm, out var mechanism)) + return false; + if (!AlgorithmType.TryGetValue(mechanism, out var algorithmType)) + return false; + + return Pkcs5S2.Equals(algorithmType); + } + + public static bool IsOpenSsl(string algorithm) + { + if (!Algorithms.TryGetValue(algorithm, out var mechanism)) + return false; + if (!AlgorithmType.TryGetValue(mechanism, out var algorithmType)) + return false; + + return OpenSsl.Equals(algorithmType); + } + + public static bool IsPbeAlgorithm(string algorithm) + { + if (!Algorithms.TryGetValue(algorithm, out var mechanism)) + return false; + + return AlgorithmType.ContainsKey(mechanism); + } + + public static Asn1Encodable GenerateAlgorithmParameters( + DerObjectIdentifier algorithmOid, + byte[] salt, + int iterationCount) + { + return GenerateAlgorithmParameters(algorithmOid.Id, salt, iterationCount); + } + + public static Asn1Encodable GenerateAlgorithmParameters( + string algorithm, + byte[] salt, + int iterationCount) + { + if (IsPkcs12(algorithm)) + { + return new Pkcs12PbeParams(salt, iterationCount); + } + else if (IsPkcs5Scheme2(algorithm)) + { + return new Pbkdf2Params(salt, iterationCount); + } + else + { + return new PbeParameter(salt, iterationCount); + } + } + + public static Asn1Encodable GenerateAlgorithmParameters( + DerObjectIdentifier cipherAlgorithm, + DerObjectIdentifier hashAlgorithm, + byte[] salt, + int iterationCount, + SecureRandom secureRandom) + { + EncryptionScheme encScheme; + if (NistObjectIdentifiers.IdAes128Cbc.Equals(cipherAlgorithm) + || NistObjectIdentifiers.IdAes192Cbc.Equals(cipherAlgorithm) + || NistObjectIdentifiers.IdAes256Cbc.Equals(cipherAlgorithm) + || NistObjectIdentifiers.IdAes128Cfb.Equals(cipherAlgorithm) + || NistObjectIdentifiers.IdAes192Cfb.Equals(cipherAlgorithm) + || NistObjectIdentifiers.IdAes256Cfb.Equals(cipherAlgorithm)) + { + byte[] iv = new byte[16]; + secureRandom.NextBytes(iv); + encScheme = new EncryptionScheme(cipherAlgorithm, new DerOctetString(iv)); + } + else + { + throw new ArgumentException("unknown cipher: " + cipherAlgorithm); + } + + KeyDerivationFunc func = new KeyDerivationFunc(PkcsObjectIdentifiers.IdPbkdf2, new Pbkdf2Params(salt, iterationCount, new AlgorithmIdentifier(hashAlgorithm, DerNull.Instance))); + + return new PbeS2Parameters(func, encScheme); + } + + public static ICipherParameters GenerateCipherParameters( + DerObjectIdentifier algorithmOid, + char[] password, + Asn1Encodable pbeParameters) + { + return GenerateCipherParameters(algorithmOid.Id, password, false, pbeParameters); + } + + public static ICipherParameters GenerateCipherParameters( + DerObjectIdentifier algorithmOid, + char[] password, + bool wrongPkcs12Zero, + Asn1Encodable pbeParameters) + { + return GenerateCipherParameters(algorithmOid.Id, password, wrongPkcs12Zero, pbeParameters); + } + + public static ICipherParameters GenerateCipherParameters( + AlgorithmIdentifier algID, + char[] password) + { + return GenerateCipherParameters(algID.Algorithm.Id, password, false, algID.Parameters); + } + + public static ICipherParameters GenerateCipherParameters( + AlgorithmIdentifier algID, + char[] password, + bool wrongPkcs12Zero) + { + return GenerateCipherParameters(algID.Algorithm.Id, password, wrongPkcs12Zero, algID.Parameters); + } + + public static ICipherParameters GenerateCipherParameters( + string algorithm, + char[] password, + Asn1Encodable pbeParameters) + { + return GenerateCipherParameters(algorithm, password, false, pbeParameters); + } + + public static ICipherParameters GenerateCipherParameters( + string algorithm, + char[] password, + bool wrongPkcs12Zero, + Asn1Encodable pbeParameters) + { + string mechanism = CollectionUtilities.GetValueOrNull(Algorithms, algorithm); + + byte[] keyBytes = null; + byte[] salt = null; + int iterationCount = 0; + + if (IsPkcs12(mechanism)) + { + Pkcs12PbeParams pbeParams = Pkcs12PbeParams.GetInstance(pbeParameters); + salt = pbeParams.GetIV(); + iterationCount = pbeParams.Iterations.IntValue; + keyBytes = PbeParametersGenerator.Pkcs12PasswordToBytes(password, wrongPkcs12Zero); + } + else if (IsPkcs5Scheme2(mechanism)) + { + // See below + } + else + { + PbeParameter pbeParams = PbeParameter.GetInstance(pbeParameters); + salt = pbeParams.GetSalt(); + iterationCount = pbeParams.IterationCount.IntValue; + keyBytes = PbeParametersGenerator.Pkcs5PasswordToBytes(password); + } + + ICipherParameters parameters = null; + + if (IsPkcs5Scheme2(mechanism)) + { + PbeS2Parameters s2p = PbeS2Parameters.GetInstance(pbeParameters.ToAsn1Object()); + AlgorithmIdentifier encScheme = s2p.EncryptionScheme; + DerObjectIdentifier encOid = encScheme.Algorithm; + Asn1Object encParams = encScheme.Parameters.ToAsn1Object(); + + Pbkdf2Params pbeParams = Pbkdf2Params.GetInstance(s2p.KeyDerivationFunc.Parameters.ToAsn1Object()); + IDigest digest = DigestUtilities.GetDigest(pbeParams.Prf.Algorithm); + + byte[] iv; + if (encOid.Equals(PkcsObjectIdentifiers.RC2Cbc)) // PKCS5.B.2.3 + { + RC2CbcParameter rc2Params = RC2CbcParameter.GetInstance(encParams); + iv = rc2Params.GetIV(); + } + else + { + iv = Asn1OctetString.GetInstance(encParams).GetOctets(); + } + + salt = pbeParams.GetSalt(); + iterationCount = pbeParams.IterationCount.IntValue; + keyBytes = PbeParametersGenerator.Pkcs5PasswordToBytes(password); + + int keyLength = pbeParams.KeyLength != null + ? pbeParams.KeyLength.IntValue * 8 + : GeneratorUtilities.GetDefaultKeySize(encOid); + + PbeParametersGenerator gen = MakePbeGenerator( + AlgorithmType[mechanism], digest, keyBytes, salt, iterationCount); + + parameters = gen.GenerateDerivedParameters(encOid.Id, keyLength); + + if (iv != null) + { + // FIXME? OpenSSL weirdness with IV of zeros (for ECB keys?) + if (Arrays.AreEqual(iv, new byte[iv.Length])) + { + //Console.Error.Write("***** IV all 0 (length " + iv.Length + ") *****"); + } + else + { + parameters = new ParametersWithIV(parameters, iv); + } + } + } + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(mechanism, "PBEwithSHA-1")) + { + PbeParametersGenerator generator = MakePbeGenerator( + AlgorithmType[mechanism], new Sha1Digest(), keyBytes, salt, iterationCount); + + if (mechanism.Equals("PBEwithSHA-1and128bitAES-CBC-BC")) + { + parameters = generator.GenerateDerivedParameters("AES", 128, 128); + } + else if (mechanism.Equals("PBEwithSHA-1and192bitAES-CBC-BC")) + { + parameters = generator.GenerateDerivedParameters("AES", 192, 128); + } + else if (mechanism.Equals("PBEwithSHA-1and256bitAES-CBC-BC")) + { + parameters = generator.GenerateDerivedParameters("AES", 256, 128); + } + else if (mechanism.Equals("PBEwithSHA-1and128bitRC4")) + { + parameters = generator.GenerateDerivedParameters("RC4", 128); + } + else if (mechanism.Equals("PBEwithSHA-1and40bitRC4")) + { + parameters = generator.GenerateDerivedParameters("RC4", 40); + } + else if (mechanism.Equals("PBEwithSHA-1and3-keyDESEDE-CBC")) + { + parameters = generator.GenerateDerivedParameters("DESEDE", 192, 64); + } + else if (mechanism.Equals("PBEwithSHA-1and2-keyDESEDE-CBC")) + { + parameters = generator.GenerateDerivedParameters("DESEDE", 128, 64); + } + else if (mechanism.Equals("PBEwithSHA-1and128bitRC2-CBC")) + { + parameters = generator.GenerateDerivedParameters("RC2", 128, 64); + } + else if (mechanism.Equals("PBEwithSHA-1and40bitRC2-CBC")) + { + parameters = generator.GenerateDerivedParameters("RC2", 40, 64); + } + else if (mechanism.Equals("PBEwithSHA-1andDES-CBC")) + { + parameters = generator.GenerateDerivedParameters("DES", 64, 64); + } + else if (mechanism.Equals("PBEwithSHA-1andRC2-CBC")) + { + parameters = generator.GenerateDerivedParameters("RC2", 64, 64); + } + } + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(mechanism, "PBEwithSHA-256")) + { + PbeParametersGenerator generator = MakePbeGenerator( + AlgorithmType[mechanism], new Sha256Digest(), keyBytes, salt, iterationCount); + + if (mechanism.Equals("PBEwithSHA-256and128bitAES-CBC-BC")) + { + parameters = generator.GenerateDerivedParameters("AES", 128, 128); + } + else if (mechanism.Equals("PBEwithSHA-256and192bitAES-CBC-BC")) + { + parameters = generator.GenerateDerivedParameters("AES", 192, 128); + } + else if (mechanism.Equals("PBEwithSHA-256and256bitAES-CBC-BC")) + { + parameters = generator.GenerateDerivedParameters("AES", 256, 128); + } + } + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(mechanism, "PBEwithMD5")) + { + PbeParametersGenerator generator = MakePbeGenerator( + AlgorithmType[mechanism], new MD5Digest(), keyBytes, salt, iterationCount); + + if (mechanism.Equals("PBEwithMD5andDES-CBC")) + { + parameters = generator.GenerateDerivedParameters("DES", 64, 64); + } + else if (mechanism.Equals("PBEwithMD5andRC2-CBC")) + { + parameters = generator.GenerateDerivedParameters("RC2", 64, 64); + } + else if (mechanism.Equals("PBEwithMD5and128bitAES-CBC-OpenSSL")) + { + parameters = generator.GenerateDerivedParameters("AES", 128, 128); + } + else if (mechanism.Equals("PBEwithMD5and192bitAES-CBC-OpenSSL")) + { + parameters = generator.GenerateDerivedParameters("AES", 192, 128); + } + else if (mechanism.Equals("PBEwithMD5and256bitAES-CBC-OpenSSL")) + { + parameters = generator.GenerateDerivedParameters("AES", 256, 128); + } + } + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(mechanism, "PBEwithMD2")) + { + PbeParametersGenerator generator = MakePbeGenerator( + AlgorithmType[mechanism], new MD2Digest(), keyBytes, salt, iterationCount); + if (mechanism.Equals("PBEwithMD2andDES-CBC")) + { + parameters = generator.GenerateDerivedParameters("DES", 64, 64); + } + else if (mechanism.Equals("PBEwithMD2andRC2-CBC")) + { + parameters = generator.GenerateDerivedParameters("RC2", 64, 64); + } + } + else if (Org.BouncyCastle.Utilities.Platform.StartsWith(mechanism, "PBEwithHmac")) + { + string digestName = mechanism.Substring("PBEwithHmac".Length); + IDigest digest = DigestUtilities.GetDigest(digestName); + + PbeParametersGenerator generator = MakePbeGenerator( + AlgorithmType[mechanism], digest, keyBytes, salt, iterationCount); + + int bitLen = digest.GetDigestSize() * 8; + parameters = generator.GenerateDerivedMacParameters(bitLen); + } + + Array.Clear(keyBytes, 0, keyBytes.Length); + + return FixDesParity(mechanism, parameters); + } + + public static object CreateEngine( + DerObjectIdentifier algorithmOid) + { + return CreateEngine(algorithmOid.Id); + } + + public static object CreateEngine( + AlgorithmIdentifier algID) + { + string algorithm = algID.Algorithm.Id; + + if (IsPkcs5Scheme2(algorithm)) + { + PbeS2Parameters s2p = PbeS2Parameters.GetInstance(algID.Parameters.ToAsn1Object()); + AlgorithmIdentifier encScheme = s2p.EncryptionScheme; + return CipherUtilities.GetCipher(encScheme.Algorithm); + } + + return CreateEngine(algorithm); + } + + public static object CreateEngine(string algorithm) + { + string mechanism = CollectionUtilities.GetValueOrNull(Algorithms, algorithm); + + if (Org.BouncyCastle.Utilities.Platform.StartsWith(mechanism, "PBEwithHmac")) + { + string digestName = mechanism.Substring("PBEwithHmac".Length); + + return MacUtilities.GetMac("HMAC/" + digestName); + } + + if (Org.BouncyCastle.Utilities.Platform.StartsWith(mechanism, "PBEwithMD2") + || Org.BouncyCastle.Utilities.Platform.StartsWith(mechanism, "PBEwithMD5") + || Org.BouncyCastle.Utilities.Platform.StartsWith(mechanism, "PBEwithSHA-1") + || Org.BouncyCastle.Utilities.Platform.StartsWith(mechanism, "PBEwithSHA-256")) + { + if (Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "AES-CBC-BC") || Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "AES-CBC-OPENSSL")) + { + return CipherUtilities.GetCipher("AES/CBC"); + } + + if (Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "DES-CBC")) + { + return CipherUtilities.GetCipher("DES/CBC"); + } + + if (Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "DESEDE-CBC")) + { + return CipherUtilities.GetCipher("DESEDE/CBC"); + } + + if (Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "RC2-CBC")) + { + return CipherUtilities.GetCipher("RC2/CBC"); + } + + if (Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "RC4")) + { + return CipherUtilities.GetCipher("RC4"); + } + } + + return null; + } + + public static string GetEncodingName(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(Algorithms, oid.Id); + } + + private static ICipherParameters FixDesParity(string mechanism, ICipherParameters parameters) + { + if (!Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "DES-CBC") && !Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "DESEDE-CBC")) + { + return parameters; + } + + if (parameters is ParametersWithIV) + { + ParametersWithIV ivParams = (ParametersWithIV)parameters; + return new ParametersWithIV(FixDesParity(mechanism, ivParams.Parameters), ivParams.GetIV()); + } + + KeyParameter kParam = (KeyParameter)parameters; + byte[] keyBytes = kParam.GetKey(); + DesParameters.SetOddParity(keyBytes); + return new KeyParameter(keyBytes); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/PbeUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/PbeUtilities.cs.meta new file mode 100644 index 000000000..bd4dbdac9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/PbeUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dfc85a93228ca944eb2c23feecec2821 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/PrivateKeyFactory.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/PrivateKeyFactory.cs new file mode 100644 index 000000000..f44009660 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/PrivateKeyFactory.cs @@ -0,0 +1,412 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cryptlib; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.EdEC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Gnu; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Rosstandart; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Sec; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + public static class PrivateKeyFactory + { + public static AsymmetricKeyParameter CreateKey( + byte[] privateKeyInfoData) + { + return CreateKey( + PrivateKeyInfo.GetInstance( + Asn1Object.FromByteArray(privateKeyInfoData))); + } + + public static AsymmetricKeyParameter CreateKey( + Stream inStr) + { + return CreateKey( + PrivateKeyInfo.GetInstance( + Asn1Object.FromStream(inStr))); + } + + public static AsymmetricKeyParameter CreateKey( + PrivateKeyInfo keyInfo) + { + AlgorithmIdentifier algID = keyInfo.PrivateKeyAlgorithm; + DerObjectIdentifier algOid = algID.Algorithm; + + // TODO See RSAUtil.isRsaOid in Java build + if (algOid.Equals(PkcsObjectIdentifiers.RsaEncryption) + || algOid.Equals(X509ObjectIdentifiers.IdEARsa) + || algOid.Equals(PkcsObjectIdentifiers.IdRsassaPss) + || algOid.Equals(PkcsObjectIdentifiers.IdRsaesOaep)) + { + RsaPrivateKeyStructure keyStructure = RsaPrivateKeyStructure.GetInstance(keyInfo.ParsePrivateKey()); + + return new RsaPrivateCrtKeyParameters( + keyStructure.Modulus, + keyStructure.PublicExponent, + keyStructure.PrivateExponent, + keyStructure.Prime1, + keyStructure.Prime2, + keyStructure.Exponent1, + keyStructure.Exponent2, + keyStructure.Coefficient); + } + // TODO? + // else if (algOid.Equals(X9ObjectIdentifiers.DHPublicNumber)) + else if (algOid.Equals(PkcsObjectIdentifiers.DhKeyAgreement)) + { + DHParameter para = new DHParameter( + Asn1Sequence.GetInstance(algID.Parameters.ToAsn1Object())); + DerInteger derX = (DerInteger)keyInfo.ParsePrivateKey(); + + BigInteger lVal = para.L; + int l = lVal == null ? 0 : lVal.IntValue; + DHParameters dhParams = new DHParameters(para.P, para.G, null, l); + + return new DHPrivateKeyParameters(derX.Value, dhParams, algOid); + } + else if (algOid.Equals(OiwObjectIdentifiers.ElGamalAlgorithm)) + { + ElGamalParameter para = new ElGamalParameter( + Asn1Sequence.GetInstance(algID.Parameters.ToAsn1Object())); + DerInteger derX = (DerInteger)keyInfo.ParsePrivateKey(); + + return new ElGamalPrivateKeyParameters( + derX.Value, + new ElGamalParameters(para.P, para.G)); + } + else if (algOid.Equals(X9ObjectIdentifiers.IdDsa)) + { + DerInteger derX = (DerInteger)keyInfo.ParsePrivateKey(); + Asn1Encodable ae = algID.Parameters; + + DsaParameters parameters = null; + if (ae != null) + { + DsaParameter para = DsaParameter.GetInstance(ae.ToAsn1Object()); + parameters = new DsaParameters(para.P, para.Q, para.G); + } + + return new DsaPrivateKeyParameters(derX.Value, parameters); + } + else if (algOid.Equals(X9ObjectIdentifiers.IdECPublicKey)) + { + X962Parameters para = X962Parameters.GetInstance(algID.Parameters.ToAsn1Object()); + + X9ECParameters x9; + if (para.IsNamedCurve) + { + x9 = ECKeyPairGenerator.FindECCurveByOid((DerObjectIdentifier)para.Parameters); + } + else + { + x9 = new X9ECParameters((Asn1Sequence)para.Parameters); + } + + ECPrivateKeyStructure ec = ECPrivateKeyStructure.GetInstance(keyInfo.ParsePrivateKey()); + BigInteger d = ec.GetKey(); + + if (para.IsNamedCurve) + { + return new ECPrivateKeyParameters("EC", d, (DerObjectIdentifier)para.Parameters); + } + + ECDomainParameters dParams = new ECDomainParameters(x9.Curve, x9.G, x9.N, x9.H, x9.GetSeed()); + return new ECPrivateKeyParameters(d, dParams); + } + else if (algOid.Equals(CryptoProObjectIdentifiers.GostR3410x2001) || + algOid.Equals(RosstandartObjectIdentifiers.id_tc26_gost_3410_12_512) || + algOid.Equals(RosstandartObjectIdentifiers.id_tc26_gost_3410_12_256)) + { + Asn1Object p = algID.Parameters.ToAsn1Object(); + Gost3410PublicKeyAlgParameters gostParams = Gost3410PublicKeyAlgParameters.GetInstance(p); + + ECGost3410Parameters ecSpec; + BigInteger d; + + if (p is Asn1Sequence seq && (seq.Count == 2 || seq.Count == 3)) + { + X9ECParameters ecP = ECGost3410NamedCurves.GetByOid(gostParams.PublicKeyParamSet); + if (ecP == null) + throw new ArgumentException("Unrecognized curve OID for GostR3410x2001 private key"); + + ecSpec = new ECGost3410Parameters( + new ECNamedDomainParameters(gostParams.PublicKeyParamSet, ecP), + gostParams.PublicKeyParamSet, + gostParams.DigestParamSet, + gostParams.EncryptionParamSet); + + Asn1OctetString privEnc = keyInfo.PrivateKeyData; + if (privEnc.GetOctets().Length == 32 || privEnc.GetOctets().Length == 64) + { + d = new BigInteger(1, Arrays.Reverse(privEnc.GetOctets())); + } + else + { + Asn1Object privKey = keyInfo.ParsePrivateKey(); + if (privKey is DerInteger derInteger) + { + d = derInteger.PositiveValue; + } + else + { + byte[] dVal = Arrays.Reverse(Asn1OctetString.GetInstance(privKey).GetOctets()); + d = new BigInteger(1, dVal); + } + } + } + else + { + X962Parameters x962Parameters = X962Parameters.GetInstance(p); + + if (x962Parameters.IsNamedCurve) + { + DerObjectIdentifier oid = DerObjectIdentifier.GetInstance(x962Parameters.Parameters); + X9ECParameters ecP = ECNamedCurveTable.GetByOid(oid); + if (ecP == null) + throw new ArgumentException("Unrecognized curve OID for GostR3410x2001 private key"); + + ecSpec = new ECGost3410Parameters( + new ECNamedDomainParameters(oid, ecP), + gostParams.PublicKeyParamSet, + gostParams.DigestParamSet, + gostParams.EncryptionParamSet); + } + else if (x962Parameters.IsImplicitlyCA) + { + ecSpec = null; + } + else + { + X9ECParameters ecP = X9ECParameters.GetInstance(x962Parameters.Parameters); + + ecSpec = new ECGost3410Parameters( + new ECNamedDomainParameters(algOid, ecP), + gostParams.PublicKeyParamSet, + gostParams.DigestParamSet, + gostParams.EncryptionParamSet); + } + + Asn1Object privKey = keyInfo.ParsePrivateKey(); + if (privKey is DerInteger derD) + { + d = derD.Value; + } + else + { + ECPrivateKeyStructure ec = ECPrivateKeyStructure.GetInstance(privKey); + + d = ec.GetKey(); + } + } + + return new ECPrivateKeyParameters( + d, + new ECGost3410Parameters( + ecSpec, + gostParams.PublicKeyParamSet, + gostParams.DigestParamSet, + gostParams.EncryptionParamSet)); + } + else if (algOid.Equals(CryptoProObjectIdentifiers.GostR3410x94)) + { + Gost3410PublicKeyAlgParameters gostParams = Gost3410PublicKeyAlgParameters.GetInstance(algID.Parameters); + + Asn1Object privKey = keyInfo.ParsePrivateKey(); + BigInteger x; + + if (privKey is DerInteger) + { + x = DerInteger.GetInstance(privKey).PositiveValue; + } + else + { + x = new BigInteger(1, Arrays.Reverse(Asn1OctetString.GetInstance(privKey).GetOctets())); + } + + return new Gost3410PrivateKeyParameters(x, gostParams.PublicKeyParamSet); + } + else if (algOid.Equals(EdECObjectIdentifiers.id_X25519) + || algOid.Equals(CryptlibObjectIdentifiers.curvey25519)) + { + return new X25519PrivateKeyParameters(GetRawKey(keyInfo)); + } + else if (algOid.Equals(EdECObjectIdentifiers.id_X448)) + { + return new X448PrivateKeyParameters(GetRawKey(keyInfo)); + } + else if (algOid.Equals(EdECObjectIdentifiers.id_Ed25519) + || algOid.Equals(GnuObjectIdentifiers.Ed25519)) + { + return new Ed25519PrivateKeyParameters(GetRawKey(keyInfo)); + } + else if (algOid.Equals(EdECObjectIdentifiers.id_Ed448)) + { + return new Ed448PrivateKeyParameters(GetRawKey(keyInfo)); + } + else if (algOid.Equals(RosstandartObjectIdentifiers.id_tc26_gost_3410_12_256) + || algOid.Equals(RosstandartObjectIdentifiers.id_tc26_gost_3410_12_512) + || algOid.Equals(RosstandartObjectIdentifiers.id_tc26_agreement_gost_3410_12_256) + || algOid.Equals(RosstandartObjectIdentifiers.id_tc26_agreement_gost_3410_12_512)) + { + Gost3410PublicKeyAlgParameters gostParams = Gost3410PublicKeyAlgParameters.GetInstance( + keyInfo.PrivateKeyAlgorithm.Parameters); + ECGost3410Parameters ecSpec; + BigInteger d; + Asn1Object p = keyInfo.PrivateKeyAlgorithm.Parameters.ToAsn1Object(); + if (p is Asn1Sequence && (Asn1Sequence.GetInstance(p).Count == 2 || Asn1Sequence.GetInstance(p).Count == 3)) + { + X9ECParameters ecP = ECGost3410NamedCurves.GetByOid(gostParams.PublicKeyParamSet); + + ecSpec = new ECGost3410Parameters( + new ECNamedDomainParameters( + gostParams.PublicKeyParamSet, ecP), + gostParams.PublicKeyParamSet, + gostParams.DigestParamSet, + gostParams.EncryptionParamSet); + + Asn1OctetString privEnc = keyInfo.PrivateKeyData; + if (privEnc.GetOctets().Length == 32 || privEnc.GetOctets().Length == 64) + { + byte[] dVal = Arrays.Reverse(privEnc.GetOctets()); + d = new BigInteger(1, dVal); + } + else + { + Asn1Encodable privKey = keyInfo.ParsePrivateKey(); + if (privKey is DerInteger) + { + d = DerInteger.GetInstance(privKey).PositiveValue; + } + else + { + byte[] dVal = Arrays.Reverse(Asn1OctetString.GetInstance(privKey).GetOctets()); + d = new BigInteger(1, dVal); + } + } + } + else + { + X962Parameters parameters = X962Parameters.GetInstance(keyInfo.PrivateKeyAlgorithm.Parameters); + + if (parameters.IsNamedCurve) + { + DerObjectIdentifier oid = DerObjectIdentifier.GetInstance(parameters.Parameters); + X9ECParameters ecP = ECKeyPairGenerator.FindECCurveByOid(oid); + + ecSpec = new ECGost3410Parameters(new ECNamedDomainParameters(oid, ecP), + gostParams.PublicKeyParamSet, gostParams.DigestParamSet, + gostParams.EncryptionParamSet); + } + else if (parameters.IsImplicitlyCA) + { + ecSpec = null; + } + else + { + X9ECParameters ecP = X9ECParameters.GetInstance(parameters.Parameters); + ecSpec = new ECGost3410Parameters(new ECNamedDomainParameters(algOid, ecP), + gostParams.PublicKeyParamSet, gostParams.DigestParamSet, + gostParams.EncryptionParamSet); + } + + Asn1Encodable privKey = keyInfo.ParsePrivateKey(); + if (privKey is DerInteger) + { + DerInteger derD = DerInteger.GetInstance(privKey); + d = derD.Value; + } + else + { + ECPrivateKeyStructure ec = ECPrivateKeyStructure.GetInstance(privKey); + d = ec.GetKey(); + } + } + + return new ECPrivateKeyParameters( + d, + new ECGost3410Parameters( + ecSpec, + gostParams.PublicKeyParamSet, + gostParams.DigestParamSet, + gostParams.EncryptionParamSet)); + + } + else + { + throw new SecurityUtilityException("algorithm identifier in private key not recognised"); + } + } + + private static byte[] GetRawKey(PrivateKeyInfo keyInfo) + { + return Asn1OctetString.GetInstance(keyInfo.ParsePrivateKey()).GetOctets(); + } + + public static AsymmetricKeyParameter DecryptKey( + char[] passPhrase, + EncryptedPrivateKeyInfo encInfo) + { + return CreateKey(PrivateKeyInfoFactory.CreatePrivateKeyInfo(passPhrase, encInfo)); + } + + public static AsymmetricKeyParameter DecryptKey( + char[] passPhrase, + byte[] encryptedPrivateKeyInfoData) + { + return DecryptKey(passPhrase, Asn1Object.FromByteArray(encryptedPrivateKeyInfoData)); + } + + public static AsymmetricKeyParameter DecryptKey( + char[] passPhrase, + Stream encryptedPrivateKeyInfoStream) + { + return DecryptKey(passPhrase, Asn1Object.FromStream(encryptedPrivateKeyInfoStream)); + } + + private static AsymmetricKeyParameter DecryptKey( + char[] passPhrase, + Asn1Object asn1Object) + { + return DecryptKey(passPhrase, EncryptedPrivateKeyInfo.GetInstance(asn1Object)); + } + + public static byte[] EncryptKey( + DerObjectIdentifier algorithm, + char[] passPhrase, + byte[] salt, + int iterationCount, + AsymmetricKeyParameter key) + { + return EncryptedPrivateKeyInfoFactory.CreateEncryptedPrivateKeyInfo( + algorithm, passPhrase, salt, iterationCount, key).GetEncoded(); + } + + public static byte[] EncryptKey( + string algorithm, + char[] passPhrase, + byte[] salt, + int iterationCount, + AsymmetricKeyParameter key) + { + return EncryptedPrivateKeyInfoFactory.CreateEncryptedPrivateKeyInfo( + algorithm, passPhrase, salt, iterationCount, key).GetEncoded(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/PrivateKeyFactory.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/PrivateKeyFactory.cs.meta new file mode 100644 index 000000000..6c6f2ca94 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/PrivateKeyFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c8352ae57e5012f4a946e51451ff22a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/PublicKeyFactory.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/PublicKeyFactory.cs new file mode 100644 index 000000000..062d5bb37 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/PublicKeyFactory.cs @@ -0,0 +1,322 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cryptlib; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.EdEC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Gnu; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Rosstandart; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + public static class PublicKeyFactory + { + public static AsymmetricKeyParameter CreateKey( + byte[] keyInfoData) + { + return CreateKey( + SubjectPublicKeyInfo.GetInstance( + Asn1Object.FromByteArray(keyInfoData))); + } + + public static AsymmetricKeyParameter CreateKey( + Stream inStr) + { + return CreateKey( + SubjectPublicKeyInfo.GetInstance( + Asn1Object.FromStream(inStr))); + } + + public static AsymmetricKeyParameter CreateKey( + SubjectPublicKeyInfo keyInfo) + { + AlgorithmIdentifier algID = keyInfo.AlgorithmID; + DerObjectIdentifier algOid = algID.Algorithm; + + // TODO See RSAUtil.isRsaOid in Java build + if (algOid.Equals(PkcsObjectIdentifiers.RsaEncryption) + || algOid.Equals(X509ObjectIdentifiers.IdEARsa) + || algOid.Equals(PkcsObjectIdentifiers.IdRsassaPss) + || algOid.Equals(PkcsObjectIdentifiers.IdRsaesOaep)) + { + RsaPublicKeyStructure pubKey = RsaPublicKeyStructure.GetInstance( + keyInfo.ParsePublicKey()); + + return new RsaKeyParameters(false, pubKey.Modulus, pubKey.PublicExponent); + } + else if (algOid.Equals(X9ObjectIdentifiers.DHPublicNumber)) + { + Asn1Sequence seq = Asn1Sequence.GetInstance(algID.Parameters.ToAsn1Object()); + + DHPublicKey dhPublicKey = DHPublicKey.GetInstance(keyInfo.ParsePublicKey()); + + BigInteger y = dhPublicKey.Y.Value; + + if (IsPkcsDHParam(seq)) + return ReadPkcsDHParam(algOid, y, seq); + + DHDomainParameters dhParams = DHDomainParameters.GetInstance(seq); + + BigInteger p = dhParams.P.Value; + BigInteger g = dhParams.G.Value; + BigInteger q = dhParams.Q.Value; + + BigInteger j = null; + if (dhParams.J != null) + { + j = dhParams.J.Value; + } + + DHValidationParameters validation = null; + DHValidationParms dhValidationParms = dhParams.ValidationParms; + if (dhValidationParms != null) + { + byte[] seed = dhValidationParms.Seed.GetBytes(); + BigInteger pgenCounter = dhValidationParms.PgenCounter.Value; + + // TODO Check pgenCounter size? + + validation = new DHValidationParameters(seed, pgenCounter.IntValue); + } + + return new DHPublicKeyParameters(y, new DHParameters(p, g, q, j, validation)); + } + else if (algOid.Equals(PkcsObjectIdentifiers.DhKeyAgreement)) + { + Asn1Sequence seq = Asn1Sequence.GetInstance(algID.Parameters.ToAsn1Object()); + + DerInteger derY = (DerInteger)keyInfo.ParsePublicKey(); + + return ReadPkcsDHParam(algOid, derY.Value, seq); + } + else if (algOid.Equals(OiwObjectIdentifiers.ElGamalAlgorithm)) + { + ElGamalParameter para = new ElGamalParameter( + Asn1Sequence.GetInstance(algID.Parameters.ToAsn1Object())); + DerInteger derY = (DerInteger)keyInfo.ParsePublicKey(); + + return new ElGamalPublicKeyParameters( + derY.Value, + new ElGamalParameters(para.P, para.G)); + } + else if (algOid.Equals(X9ObjectIdentifiers.IdDsa) + || algOid.Equals(OiwObjectIdentifiers.DsaWithSha1)) + { + DerInteger derY = (DerInteger)keyInfo.ParsePublicKey(); + Asn1Encodable ae = algID.Parameters; + + DsaParameters parameters = null; + if (ae != null) + { + DsaParameter para = DsaParameter.GetInstance(ae.ToAsn1Object()); + parameters = new DsaParameters(para.P, para.Q, para.G); + } + + return new DsaPublicKeyParameters(derY.Value, parameters); + } + else if (algOid.Equals(X9ObjectIdentifiers.IdECPublicKey)) + { + X962Parameters para = X962Parameters.GetInstance(algID.Parameters.ToAsn1Object()); + + X9ECParameters x9; + if (para.IsNamedCurve) + { + x9 = ECKeyPairGenerator.FindECCurveByOid((DerObjectIdentifier)para.Parameters); + } + else + { + x9 = new X9ECParameters((Asn1Sequence)para.Parameters); + } + + Asn1OctetString key = new DerOctetString(keyInfo.PublicKeyData.GetBytes()); + X9ECPoint derQ = new X9ECPoint(x9.Curve, key); + ECPoint q = derQ.Point; + + if (para.IsNamedCurve) + { + return new ECPublicKeyParameters("EC", q, (DerObjectIdentifier)para.Parameters); + } + + ECDomainParameters dParams = new ECDomainParameters(x9); + return new ECPublicKeyParameters(q, dParams); + } + else if (algOid.Equals(CryptoProObjectIdentifiers.GostR3410x2001)) + { + Gost3410PublicKeyAlgParameters gostParams = Gost3410PublicKeyAlgParameters.GetInstance(algID.Parameters); + DerObjectIdentifier publicKeyParamSet = gostParams.PublicKeyParamSet; + + X9ECParameters ecP = ECGost3410NamedCurves.GetByOid(publicKeyParamSet); + if (ecP == null) + return null; + + Asn1OctetString key; + try + { + key = (Asn1OctetString)keyInfo.ParsePublicKey(); + } + catch (IOException e) + { + throw new ArgumentException("error recovering GOST3410_2001 public key", e); + } + + int fieldSize = 32; + int keySize = 2 * fieldSize; + + byte[] keyEnc = key.GetOctets(); + if (keyEnc.Length != keySize) + throw new ArgumentException("invalid length for GOST3410_2001 public key"); + + byte[] x9Encoding = new byte[1 + keySize]; + x9Encoding[0] = 0x04; + for (int i = 1; i <= fieldSize; ++i) + { + x9Encoding[i] = keyEnc[fieldSize - i]; + x9Encoding[i + fieldSize] = keyEnc[keySize - i]; + } + + ECPoint q = ecP.Curve.DecodePoint(x9Encoding); + + return new ECPublicKeyParameters("ECGOST3410", q, publicKeyParamSet); + } + else if (algOid.Equals(CryptoProObjectIdentifiers.GostR3410x94)) + { + Gost3410PublicKeyAlgParameters algParams = Gost3410PublicKeyAlgParameters.GetInstance(algID.Parameters); + + Asn1OctetString key; + try + { + key = (Asn1OctetString)keyInfo.ParsePublicKey(); + } + catch (IOException e) + { + throw new ArgumentException("error recovering GOST3410_94 public key", e); + } + + byte[] keyBytes = Arrays.Reverse(key.GetOctets()); // was little endian + + BigInteger y = new BigInteger(1, keyBytes); + + return new Gost3410PublicKeyParameters(y, algParams.PublicKeyParamSet); + } + else if (algOid.Equals(EdECObjectIdentifiers.id_X25519) + || algOid.Equals(CryptlibObjectIdentifiers.curvey25519)) + { + return new X25519PublicKeyParameters(GetRawKey(keyInfo)); + } + else if (algOid.Equals(EdECObjectIdentifiers.id_X448)) + { + return new X448PublicKeyParameters(GetRawKey(keyInfo)); + } + else if (algOid.Equals(EdECObjectIdentifiers.id_Ed25519) + || algOid.Equals(GnuObjectIdentifiers.Ed25519)) + { + return new Ed25519PublicKeyParameters(GetRawKey(keyInfo)); + } + else if (algOid.Equals(EdECObjectIdentifiers.id_Ed448)) + { + return new Ed448PublicKeyParameters(GetRawKey(keyInfo)); + } + else if (algOid.Equals(RosstandartObjectIdentifiers.id_tc26_gost_3410_12_256) + || algOid.Equals(RosstandartObjectIdentifiers.id_tc26_gost_3410_12_512) + || algOid.Equals(RosstandartObjectIdentifiers.id_tc26_agreement_gost_3410_12_256) + || algOid.Equals(RosstandartObjectIdentifiers.id_tc26_agreement_gost_3410_12_512)) + { + Gost3410PublicKeyAlgParameters gostParams = Gost3410PublicKeyAlgParameters.GetInstance(algID.Parameters); + DerObjectIdentifier publicKeyParamSet = gostParams.PublicKeyParamSet; + + ECGost3410Parameters ecDomainParameters =new ECGost3410Parameters( + new ECNamedDomainParameters(publicKeyParamSet, ECGost3410NamedCurves.GetByOid(publicKeyParamSet)), + publicKeyParamSet, + gostParams.DigestParamSet, + gostParams.EncryptionParamSet); + + Asn1OctetString key; + try + { + key = (Asn1OctetString)keyInfo.ParsePublicKey(); + } + catch (IOException e) + { + throw new ArgumentException("error recovering GOST3410_2012 public key", e); + } + + int fieldSize = 32; + if (algOid.Equals(RosstandartObjectIdentifiers.id_tc26_gost_3410_12_512)) + { + fieldSize = 64; + } + int keySize = 2 * fieldSize; + + byte[] keyEnc = key.GetOctets(); + if (keyEnc.Length != keySize) + throw new ArgumentException("invalid length for GOST3410_2012 public key"); + + byte[] x9Encoding = new byte[1 + keySize]; + x9Encoding[0] = 0x04; + for (int i = 1; i <= fieldSize; ++i) + { + x9Encoding[i] = keyEnc[fieldSize - i]; + x9Encoding[i + fieldSize] = keyEnc[keySize - i]; + } + + ECPoint q = ecDomainParameters.Curve.DecodePoint(x9Encoding); + + return new ECPublicKeyParameters(q, ecDomainParameters); + } + else + { + throw new SecurityUtilityException("algorithm identifier in public key not recognised: " + algOid); + } + } + + private static byte[] GetRawKey(SubjectPublicKeyInfo keyInfo) + { + /* + * TODO[RFC 8422] + * - Require keyInfo.Algorithm.Parameters == null? + */ + return keyInfo.PublicKeyData.GetOctets(); + } + + private static bool IsPkcsDHParam(Asn1Sequence seq) + { + if (seq.Count == 2) + return true; + + if (seq.Count > 3) + return false; + + DerInteger l = DerInteger.GetInstance(seq[2]); + DerInteger p = DerInteger.GetInstance(seq[0]); + + return l.Value.CompareTo(BigInteger.ValueOf(p.Value.BitLength)) <= 0; + } + + private static DHPublicKeyParameters ReadPkcsDHParam(DerObjectIdentifier algOid, + BigInteger y, Asn1Sequence seq) + { + DHParameter para = new DHParameter(seq); + + BigInteger lVal = para.L; + int l = lVal == null ? 0 : lVal.IntValue; + DHParameters dhParams = new DHParameters(para.P, para.G, null, l); + + return new DHPublicKeyParameters(y, dhParams, algOid); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/PublicKeyFactory.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/PublicKeyFactory.cs.meta new file mode 100644 index 000000000..b5b6405ac --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/PublicKeyFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bd0cb884524a32c429146ce48d62f30d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SecureRandom.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SecureRandom.cs new file mode 100644 index 000000000..1536977cd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SecureRandom.cs @@ -0,0 +1,267 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Threading; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + public class SecureRandom + : Random + { + private static long counter = DateTime.UtcNow.Ticks; + + private static long NextCounterValue() + { + return Interlocked.Increment(ref counter); + } + + private static readonly SecureRandom MasterRandom = new SecureRandom(new CryptoApiRandomGenerator()); + internal static readonly SecureRandom ArbitraryRandom = new SecureRandom(new VmpcRandomGenerator(), 16); + + private static DigestRandomGenerator CreatePrng(string digestName, bool autoSeed) + { + IDigest digest = DigestUtilities.GetDigest(digestName); + if (digest == null) + return null; + DigestRandomGenerator prng = new DigestRandomGenerator(digest); + if (autoSeed) + { + AutoSeed(prng, digest.GetDigestSize()); + } + return prng; + } + + public static byte[] GetNextBytes(SecureRandom secureRandom, int length) + { + byte[] result = new byte[length]; + secureRandom.NextBytes(result); + return result; + } + + /// + /// Create and auto-seed an instance based on the given algorithm. + /// + /// Equivalent to GetInstance(algorithm, true) + /// e.g. "SHA256PRNG" + public static SecureRandom GetInstance(string algorithm) + { + return GetInstance(algorithm, true); + } + + /// + /// Create an instance based on the given algorithm, with optional auto-seeding + /// + /// e.g. "SHA256PRNG" + /// If true, the instance will be auto-seeded. + public static SecureRandom GetInstance(string algorithm, bool autoSeed) + { + if (algorithm == null) + throw new ArgumentNullException(nameof(algorithm)); + + if (algorithm.EndsWith("PRNG", StringComparison.OrdinalIgnoreCase)) + { + string digestName = algorithm.Substring(0, algorithm.Length - "PRNG".Length); + + DigestRandomGenerator prng = CreatePrng(digestName, autoSeed); + if (prng != null) + return new SecureRandom(prng); + } + + throw new ArgumentException("Unrecognised PRNG algorithm: " + algorithm, "algorithm"); + } + + protected readonly IRandomGenerator generator; + + public SecureRandom() + : this(CreatePrng("SHA256", true)) + { + } + + /// Use the specified instance of IRandomGenerator as random source. + /// + /// This constructor performs no seeding of either the IRandomGenerator or the + /// constructed SecureRandom. It is the responsibility of the client to provide + /// proper seed material as necessary/appropriate for the given IRandomGenerator + /// implementation. + /// + /// The source to generate all random bytes from. + public SecureRandom(IRandomGenerator generator) + : base(0) + { + this.generator = generator; + } + + public SecureRandom(IRandomGenerator generator, int autoSeedLengthInBytes) + : base(0) + { + AutoSeed(generator, autoSeedLengthInBytes); + + this.generator = generator; + } + + public virtual byte[] GenerateSeed(int length) + { + return GetNextBytes(MasterRandom, length); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void GenerateSeed(Span seed) + { + MasterRandom.NextBytes(seed); + } +#endif + + public virtual void SetSeed(byte[] seed) + { + generator.AddSeedMaterial(seed); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void SetSeed(Span seed) + { + generator.AddSeedMaterial(seed); + } +#endif + + public virtual void SetSeed(long seed) + { + generator.AddSeedMaterial(seed); + } + + public override int Next() + { + return NextInt() & int.MaxValue; + } + + public override int Next(int maxValue) + { + if (maxValue < 2) + { + if (maxValue < 0) + throw new ArgumentOutOfRangeException("maxValue", "cannot be negative"); + + return 0; + } + + int bits; + + // Test whether maxValue is a power of 2 + if ((maxValue & (maxValue - 1)) == 0) + { + bits = NextInt() & int.MaxValue; + return (int)(((long)bits * maxValue) >> 31); + } + + int result; + do + { + bits = NextInt() & int.MaxValue; + result = bits % maxValue; + } + while (bits - result + (maxValue - 1) < 0); // Ignore results near overflow + + return result; + } + + public override int Next(int minValue, int maxValue) + { + if (maxValue <= minValue) + { + if (maxValue == minValue) + return minValue; + + throw new ArgumentException("maxValue cannot be less than minValue"); + } + + int diff = maxValue - minValue; + if (diff > 0) + return minValue + Next(diff); + + for (;;) + { + int i = NextInt(); + + if (i >= minValue && i < maxValue) + return i; + } + } + + public override void NextBytes(byte[] buf) + { + generator.NextBytes(buf); + } + + public virtual void NextBytes(byte[] buf, int off, int len) + { + generator.NextBytes(buf, off, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void NextBytes(Span buffer) + { + if (generator != null) + { + generator.NextBytes(buffer); + } + else + { + byte[] tmp = new byte[buffer.Length]; + NextBytes(tmp); + tmp.CopyTo(buffer); + } + } +#endif + + private static readonly double DoubleScale = 1.0 / Convert.ToDouble(1L << 53); + + public override double NextDouble() + { + ulong x = (ulong)NextLong() >> 11; + + return Convert.ToDouble(x) * DoubleScale; + } + + public virtual int NextInt() + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span bytes = stackalloc byte[4]; +#else + byte[] bytes = new byte[4]; +#endif + NextBytes(bytes); + return (int)Pack.BE_To_UInt32(bytes); + } + + public virtual long NextLong() + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span bytes = stackalloc byte[8]; +#else + byte[] bytes = new byte[8]; +#endif + NextBytes(bytes); + return (long)Pack.BE_To_UInt64(bytes); + } + + private static void AutoSeed(IRandomGenerator generator, int seedLength) + { + generator.AddSeedMaterial(NextCounterValue()); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span seed = seedLength <= 128 + ? stackalloc byte[seedLength] + : new byte[seedLength]; +#else + byte[] seed = new byte[seedLength]; +#endif + MasterRandom.NextBytes(seed); + generator.AddSeedMaterial(seed); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SecureRandom.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SecureRandom.cs.meta new file mode 100644 index 000000000..13d3f23ca --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SecureRandom.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dad6d1b180992fa4bbefb141195487f5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SecurityUtilityException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SecurityUtilityException.cs new file mode 100644 index 000000000..0e3c62a83 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SecurityUtilityException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + [Serializable] + public class SecurityUtilityException + : Exception + { + public SecurityUtilityException() + : base() + { + } + + public SecurityUtilityException(string message) + : base(message) + { + } + + public SecurityUtilityException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected SecurityUtilityException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SecurityUtilityException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SecurityUtilityException.cs.meta new file mode 100644 index 000000000..8199f5d3c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SecurityUtilityException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 776c8efaf8c3b3843aa42677ef63afd3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SignatureException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SignatureException.cs new file mode 100644 index 000000000..13e7de9df --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SignatureException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + [Serializable] + public class SignatureException + : GeneralSecurityException + { + public SignatureException() + : base() + { + } + + public SignatureException(string message) + : base(message) + { + } + + public SignatureException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected SignatureException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SignatureException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SignatureException.cs.meta new file mode 100644 index 000000000..4fc1b8efd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SignatureException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 464c53a8485e7d44e828bede8f580c3b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SignerUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SignerUtilities.cs new file mode 100644 index 000000000..d37cf269d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SignerUtilities.cs @@ -0,0 +1,711 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Bsi; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Eac; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.EdEC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.GM; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.TeleTrust; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Rosstandart; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + /// + /// Signer Utility class contains methods that can not be specifically grouped into other classes. + /// + public static class SignerUtilities + { + internal static readonly IDictionary AlgorithmMap = + new Dictionary(StringComparer.OrdinalIgnoreCase); + internal static readonly IDictionary Oids = + new Dictionary(StringComparer.OrdinalIgnoreCase); + + static SignerUtilities() + { + AlgorithmMap["MD2WITHRSA"] = "MD2withRSA"; + AlgorithmMap["MD2WITHRSAENCRYPTION"] = "MD2withRSA"; + AlgorithmMap[PkcsObjectIdentifiers.MD2WithRsaEncryption.Id] = "MD2withRSA"; + + AlgorithmMap["MD4WITHRSA"] = "MD4withRSA"; + AlgorithmMap["MD4WITHRSAENCRYPTION"] = "MD4withRSA"; + AlgorithmMap[PkcsObjectIdentifiers.MD4WithRsaEncryption.Id] = "MD4withRSA"; + AlgorithmMap[OiwObjectIdentifiers.MD4WithRsa.Id] = "MD4withRSA"; + AlgorithmMap[OiwObjectIdentifiers.MD4WithRsaEncryption.Id] = "MD4withRSA"; + + AlgorithmMap["MD5WITHRSA"] = "MD5withRSA"; + AlgorithmMap["MD5WITHRSAENCRYPTION"] = "MD5withRSA"; + AlgorithmMap[PkcsObjectIdentifiers.MD5WithRsaEncryption.Id] = "MD5withRSA"; + AlgorithmMap[OiwObjectIdentifiers.MD5WithRsa.Id] = "MD5withRSA"; + + AlgorithmMap["SHA1WITHRSA"] = "SHA-1withRSA"; + AlgorithmMap["SHA-1WITHRSA"] = "SHA-1withRSA"; + AlgorithmMap["SHA1WITHRSAENCRYPTION"] = "SHA-1withRSA"; + AlgorithmMap["SHA-1WITHRSAENCRYPTION"] = "SHA-1withRSA"; + AlgorithmMap[PkcsObjectIdentifiers.Sha1WithRsaEncryption.Id] = "SHA-1withRSA"; + AlgorithmMap[OiwObjectIdentifiers.Sha1WithRsa.Id] = "SHA-1withRSA"; + + AlgorithmMap["SHA224WITHRSA"] = "SHA-224withRSA"; + AlgorithmMap["SHA-224WITHRSA"] = "SHA-224withRSA"; + AlgorithmMap["SHA224WITHRSAENCRYPTION"] = "SHA-224withRSA"; + AlgorithmMap["SHA-224WITHRSAENCRYPTION"] = "SHA-224withRSA"; + AlgorithmMap[PkcsObjectIdentifiers.Sha224WithRsaEncryption.Id] = "SHA-224withRSA"; + + AlgorithmMap["SHA256WITHRSA"] = "SHA-256withRSA"; + AlgorithmMap["SHA-256WITHRSA"] = "SHA-256withRSA"; + AlgorithmMap["SHA256WITHRSAENCRYPTION"] = "SHA-256withRSA"; + AlgorithmMap["SHA-256WITHRSAENCRYPTION"] = "SHA-256withRSA"; + AlgorithmMap[PkcsObjectIdentifiers.Sha256WithRsaEncryption.Id] = "SHA-256withRSA"; + + AlgorithmMap["SHA384WITHRSA"] = "SHA-384withRSA"; + AlgorithmMap["SHA-384WITHRSA"] = "SHA-384withRSA"; + AlgorithmMap["SHA384WITHRSAENCRYPTION"] = "SHA-384withRSA"; + AlgorithmMap["SHA-384WITHRSAENCRYPTION"] = "SHA-384withRSA"; + AlgorithmMap[PkcsObjectIdentifiers.Sha384WithRsaEncryption.Id] = "SHA-384withRSA"; + + AlgorithmMap["SHA512WITHRSA"] = "SHA-512withRSA"; + AlgorithmMap["SHA-512WITHRSA"] = "SHA-512withRSA"; + AlgorithmMap["SHA512WITHRSAENCRYPTION"] = "SHA-512withRSA"; + AlgorithmMap["SHA-512WITHRSAENCRYPTION"] = "SHA-512withRSA"; + AlgorithmMap[PkcsObjectIdentifiers.Sha512WithRsaEncryption.Id] = "SHA-512withRSA"; + + AlgorithmMap["SHA512(224)WITHRSA"] = "SHA-512(224)withRSA"; + AlgorithmMap["SHA-512(224)WITHRSA"] = "SHA-512(224)withRSA"; + AlgorithmMap["SHA512(224)WITHRSAENCRYPTION"] = "SHA-512(224)withRSA"; + AlgorithmMap["SHA-512(224)WITHRSAENCRYPTION"] = "SHA-512(224)withRSA"; + AlgorithmMap[PkcsObjectIdentifiers.Sha512_224WithRSAEncryption.Id] = "SHA-512(224)withRSA"; + + AlgorithmMap["SHA512(256)WITHRSA"] = "SHA-512(256)withRSA"; + AlgorithmMap["SHA-512(256)WITHRSA"] = "SHA-512(256)withRSA"; + AlgorithmMap["SHA512(256)WITHRSAENCRYPTION"] = "SHA-512(256)withRSA"; + AlgorithmMap["SHA-512(256)WITHRSAENCRYPTION"] = "SHA-512(256)withRSA"; + AlgorithmMap[PkcsObjectIdentifiers.Sha512_256WithRSAEncryption.Id] = "SHA-512(256)withRSA"; + + AlgorithmMap["SHA3-224WITHRSA"] = "SHA3-224withRSA"; + AlgorithmMap["SHA3-224WITHRSAENCRYPTION"] = "SHA3-224withRSA"; + AlgorithmMap[NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_224.Id] = "SHA3-224withRSA"; + AlgorithmMap["SHA3-256WITHRSA"] = "SHA3-256withRSA"; + AlgorithmMap["SHA3-256WITHRSAENCRYPTION"] = "SHA3-256withRSA"; + AlgorithmMap[NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_256.Id] = "SHA3-256withRSA"; + AlgorithmMap["SHA3-384WITHRSA"] = "SHA3-384withRSA"; + AlgorithmMap["SHA3-384WITHRSAENCRYPTION"] = "SHA3-384withRSA"; + AlgorithmMap[NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_384.Id] = "SHA3-384withRSA"; + AlgorithmMap["SHA3-512WITHRSA"] = "SHA3-512withRSA"; + AlgorithmMap["SHA3-512WITHRSAENCRYPTION"] = "SHA3-512withRSA"; + AlgorithmMap[NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_512.Id] = "SHA3-512withRSA"; + + AlgorithmMap["PSSWITHRSA"] = "PSSwithRSA"; + AlgorithmMap["RSASSA-PSS"] = "PSSwithRSA"; + AlgorithmMap[PkcsObjectIdentifiers.IdRsassaPss.Id] = "PSSwithRSA"; + AlgorithmMap["RSAPSS"] = "PSSwithRSA"; + + AlgorithmMap["SHA1WITHRSAANDMGF1"] = "SHA-1withRSAandMGF1"; + AlgorithmMap["SHA-1WITHRSAANDMGF1"] = "SHA-1withRSAandMGF1"; + AlgorithmMap["SHA1WITHRSA/PSS"] = "SHA-1withRSAandMGF1"; + AlgorithmMap["SHA-1WITHRSA/PSS"] = "SHA-1withRSAandMGF1"; + AlgorithmMap["SHA1WITHRSASSA-PSS"] = "SHA-1withRSAandMGF1"; + AlgorithmMap["SHA-1WITHRSASSA-PSS"] = "SHA-1withRSAandMGF1"; + + AlgorithmMap["SHA224WITHRSAANDMGF1"] = "SHA-224withRSAandMGF1"; + AlgorithmMap["SHA-224WITHRSAANDMGF1"] = "SHA-224withRSAandMGF1"; + AlgorithmMap["SHA224WITHRSA/PSS"] = "SHA-224withRSAandMGF1"; + AlgorithmMap["SHA-224WITHRSA/PSS"] = "SHA-224withRSAandMGF1"; + AlgorithmMap["SHA224WITHRSASSA-PSS"] = "SHA-224withRSAandMGF1"; + AlgorithmMap["SHA-224WITHRSASSA-PSS"] = "SHA-224withRSAandMGF1"; + + AlgorithmMap["SHA256WITHRSAANDMGF1"] = "SHA-256withRSAandMGF1"; + AlgorithmMap["SHA-256WITHRSAANDMGF1"] = "SHA-256withRSAandMGF1"; + AlgorithmMap["SHA256WITHRSA/PSS"] = "SHA-256withRSAandMGF1"; + AlgorithmMap["SHA-256WITHRSA/PSS"] = "SHA-256withRSAandMGF1"; + AlgorithmMap["SHA256WITHRSASSA-PSS"] = "SHA-256withRSAandMGF1"; + AlgorithmMap["SHA-256WITHRSASSA-PSS"] = "SHA-256withRSAandMGF1"; + + AlgorithmMap["SHA384WITHRSAANDMGF1"] = "SHA-384withRSAandMGF1"; + AlgorithmMap["SHA-384WITHRSAANDMGF1"] = "SHA-384withRSAandMGF1"; + AlgorithmMap["SHA384WITHRSA/PSS"] = "SHA-384withRSAandMGF1"; + AlgorithmMap["SHA-384WITHRSA/PSS"] = "SHA-384withRSAandMGF1"; + AlgorithmMap["SHA384WITHRSASSA-PSS"] = "SHA-384withRSAandMGF1"; + AlgorithmMap["SHA-384WITHRSASSA-PSS"] = "SHA-384withRSAandMGF1"; + + AlgorithmMap["SHA512WITHRSAANDMGF1"] = "SHA-512withRSAandMGF1"; + AlgorithmMap["SHA-512WITHRSAANDMGF1"] = "SHA-512withRSAandMGF1"; + AlgorithmMap["SHA512WITHRSA/PSS"] = "SHA-512withRSAandMGF1"; + AlgorithmMap["SHA-512WITHRSA/PSS"] = "SHA-512withRSAandMGF1"; + AlgorithmMap["SHA512WITHRSASSA-PSS"] = "SHA-512withRSAandMGF1"; + AlgorithmMap["SHA-512WITHRSASSA-PSS"] = "SHA-512withRSAandMGF1"; + + AlgorithmMap["RIPEMD128WITHRSA"] = "RIPEMD128withRSA"; + AlgorithmMap["RIPEMD128WITHRSAENCRYPTION"] = "RIPEMD128withRSA"; + AlgorithmMap[TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD128.Id] = "RIPEMD128withRSA"; + + AlgorithmMap["RIPEMD160WITHRSA"] = "RIPEMD160withRSA"; + AlgorithmMap["RIPEMD160WITHRSAENCRYPTION"] = "RIPEMD160withRSA"; + AlgorithmMap[TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD160.Id] = "RIPEMD160withRSA"; + + AlgorithmMap["RIPEMD256WITHRSA"] = "RIPEMD256withRSA"; + AlgorithmMap["RIPEMD256WITHRSAENCRYPTION"] = "RIPEMD256withRSA"; + AlgorithmMap[TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD256.Id] = "RIPEMD256withRSA"; + + AlgorithmMap["NONEWITHRSA"] = "RSA"; + AlgorithmMap["RSAWITHNONE"] = "RSA"; + AlgorithmMap["RAWRSA"] = "RSA"; + + AlgorithmMap["RAWRSAPSS"] = "RAWRSASSA-PSS"; + AlgorithmMap["NONEWITHRSAPSS"] = "RAWRSASSA-PSS"; + AlgorithmMap["NONEWITHRSASSA-PSS"] = "RAWRSASSA-PSS"; + + AlgorithmMap["NONEWITHDSA"] = "NONEwithDSA"; + AlgorithmMap["DSAWITHNONE"] = "NONEwithDSA"; + AlgorithmMap["RAWDSA"] = "NONEwithDSA"; + + AlgorithmMap["DSA"] = "SHA-1withDSA"; + AlgorithmMap["DSAWITHSHA1"] = "SHA-1withDSA"; + AlgorithmMap["DSAWITHSHA-1"] = "SHA-1withDSA"; + AlgorithmMap["SHA/DSA"] = "SHA-1withDSA"; + AlgorithmMap["SHA1/DSA"] = "SHA-1withDSA"; + AlgorithmMap["SHA-1/DSA"] = "SHA-1withDSA"; + AlgorithmMap["SHA1WITHDSA"] = "SHA-1withDSA"; + AlgorithmMap["SHA-1WITHDSA"] = "SHA-1withDSA"; + AlgorithmMap[X9ObjectIdentifiers.IdDsaWithSha1.Id] = "SHA-1withDSA"; + AlgorithmMap[OiwObjectIdentifiers.DsaWithSha1.Id] = "SHA-1withDSA"; + + AlgorithmMap["DSAWITHSHA224"] = "SHA-224withDSA"; + AlgorithmMap["DSAWITHSHA-224"] = "SHA-224withDSA"; + AlgorithmMap["SHA224/DSA"] = "SHA-224withDSA"; + AlgorithmMap["SHA-224/DSA"] = "SHA-224withDSA"; + AlgorithmMap["SHA224WITHDSA"] = "SHA-224withDSA"; + AlgorithmMap["SHA-224WITHDSA"] = "SHA-224withDSA"; + AlgorithmMap[NistObjectIdentifiers.DsaWithSha224.Id] = "SHA-224withDSA"; + + AlgorithmMap["DSAWITHSHA256"] = "SHA-256withDSA"; + AlgorithmMap["DSAWITHSHA-256"] = "SHA-256withDSA"; + AlgorithmMap["SHA256/DSA"] = "SHA-256withDSA"; + AlgorithmMap["SHA-256/DSA"] = "SHA-256withDSA"; + AlgorithmMap["SHA256WITHDSA"] = "SHA-256withDSA"; + AlgorithmMap["SHA-256WITHDSA"] = "SHA-256withDSA"; + AlgorithmMap[NistObjectIdentifiers.DsaWithSha256.Id] = "SHA-256withDSA"; + + AlgorithmMap["DSAWITHSHA384"] = "SHA-384withDSA"; + AlgorithmMap["DSAWITHSHA-384"] = "SHA-384withDSA"; + AlgorithmMap["SHA384/DSA"] = "SHA-384withDSA"; + AlgorithmMap["SHA-384/DSA"] = "SHA-384withDSA"; + AlgorithmMap["SHA384WITHDSA"] = "SHA-384withDSA"; + AlgorithmMap["SHA-384WITHDSA"] = "SHA-384withDSA"; + AlgorithmMap[NistObjectIdentifiers.DsaWithSha384.Id] = "SHA-384withDSA"; + + AlgorithmMap["DSAWITHSHA512"] = "SHA-512withDSA"; + AlgorithmMap["DSAWITHSHA-512"] = "SHA-512withDSA"; + AlgorithmMap["SHA512/DSA"] = "SHA-512withDSA"; + AlgorithmMap["SHA-512/DSA"] = "SHA-512withDSA"; + AlgorithmMap["SHA512WITHDSA"] = "SHA-512withDSA"; + AlgorithmMap["SHA-512WITHDSA"] = "SHA-512withDSA"; + AlgorithmMap[NistObjectIdentifiers.DsaWithSha512.Id] = "SHA-512withDSA"; + + AlgorithmMap["NONEWITHECDSA"] = "NONEwithECDSA"; + AlgorithmMap["ECDSAWITHNONE"] = "NONEwithECDSA"; + + AlgorithmMap["ECDSA"] = "SHA-1withECDSA"; + AlgorithmMap["SHA1/ECDSA"] = "SHA-1withECDSA"; + AlgorithmMap["SHA-1/ECDSA"] = "SHA-1withECDSA"; + AlgorithmMap["ECDSAWITHSHA1"] = "SHA-1withECDSA"; + AlgorithmMap["ECDSAWITHSHA-1"] = "SHA-1withECDSA"; + AlgorithmMap["SHA1WITHECDSA"] = "SHA-1withECDSA"; + AlgorithmMap["SHA-1WITHECDSA"] = "SHA-1withECDSA"; + AlgorithmMap[X9ObjectIdentifiers.ECDsaWithSha1.Id] = "SHA-1withECDSA"; + AlgorithmMap[TeleTrusTObjectIdentifiers.ECSignWithSha1.Id] = "SHA-1withECDSA"; + + AlgorithmMap["SHA224/ECDSA"] = "SHA-224withECDSA"; + AlgorithmMap["SHA-224/ECDSA"] = "SHA-224withECDSA"; + AlgorithmMap["ECDSAWITHSHA224"] = "SHA-224withECDSA"; + AlgorithmMap["ECDSAWITHSHA-224"] = "SHA-224withECDSA"; + AlgorithmMap["SHA224WITHECDSA"] = "SHA-224withECDSA"; + AlgorithmMap["SHA-224WITHECDSA"] = "SHA-224withECDSA"; + AlgorithmMap[X9ObjectIdentifiers.ECDsaWithSha224.Id] = "SHA-224withECDSA"; + + AlgorithmMap["SHA256/ECDSA"] = "SHA-256withECDSA"; + AlgorithmMap["SHA-256/ECDSA"] = "SHA-256withECDSA"; + AlgorithmMap["ECDSAWITHSHA256"] = "SHA-256withECDSA"; + AlgorithmMap["ECDSAWITHSHA-256"] = "SHA-256withECDSA"; + AlgorithmMap["SHA256WITHECDSA"] = "SHA-256withECDSA"; + AlgorithmMap["SHA-256WITHECDSA"] = "SHA-256withECDSA"; + AlgorithmMap[X9ObjectIdentifiers.ECDsaWithSha256.Id] = "SHA-256withECDSA"; + + AlgorithmMap["SHA384/ECDSA"] = "SHA-384withECDSA"; + AlgorithmMap["SHA-384/ECDSA"] = "SHA-384withECDSA"; + AlgorithmMap["ECDSAWITHSHA384"] = "SHA-384withECDSA"; + AlgorithmMap["ECDSAWITHSHA-384"] = "SHA-384withECDSA"; + AlgorithmMap["SHA384WITHECDSA"] = "SHA-384withECDSA"; + AlgorithmMap["SHA-384WITHECDSA"] = "SHA-384withECDSA"; + AlgorithmMap[X9ObjectIdentifiers.ECDsaWithSha384.Id] = "SHA-384withECDSA"; + + AlgorithmMap["SHA512/ECDSA"] = "SHA-512withECDSA"; + AlgorithmMap["SHA-512/ECDSA"] = "SHA-512withECDSA"; + AlgorithmMap["ECDSAWITHSHA512"] = "SHA-512withECDSA"; + AlgorithmMap["ECDSAWITHSHA-512"] = "SHA-512withECDSA"; + AlgorithmMap["SHA512WITHECDSA"] = "SHA-512withECDSA"; + AlgorithmMap["SHA-512WITHECDSA"] = "SHA-512withECDSA"; + AlgorithmMap[X9ObjectIdentifiers.ECDsaWithSha512.Id] = "SHA-512withECDSA"; + + AlgorithmMap["RIPEMD160/ECDSA"] = "RIPEMD160withECDSA"; + AlgorithmMap["ECDSAWITHRIPEMD160"] = "RIPEMD160withECDSA"; + AlgorithmMap["RIPEMD160WITHECDSA"] = "RIPEMD160withECDSA"; + AlgorithmMap[TeleTrusTObjectIdentifiers.ECSignWithRipeMD160.Id] = "RIPEMD160withECDSA"; + + AlgorithmMap["NONEWITHCVC-ECDSA"] = "NONEwithCVC-ECDSA"; + AlgorithmMap["CVC-ECDSAWITHNONE"] = "NONEwithCVC-ECDSA"; + + AlgorithmMap["SHA1/CVC-ECDSA"] = "SHA-1withCVC-ECDSA"; + AlgorithmMap["SHA-1/CVC-ECDSA"] = "SHA-1withCVC-ECDSA"; + AlgorithmMap["CVC-ECDSAWITHSHA1"] = "SHA-1withCVC-ECDSA"; + AlgorithmMap["CVC-ECDSAWITHSHA-1"] = "SHA-1withCVC-ECDSA"; + AlgorithmMap["SHA1WITHCVC-ECDSA"] = "SHA-1withCVC-ECDSA"; + AlgorithmMap["SHA-1WITHCVC-ECDSA"] = "SHA-1withCVC-ECDSA"; + AlgorithmMap[EacObjectIdentifiers.id_TA_ECDSA_SHA_1.Id] = "SHA-1withCVC-ECDSA"; + + AlgorithmMap["SHA224/CVC-ECDSA"] = "SHA-224withCVC-ECDSA"; + AlgorithmMap["SHA-224/CVC-ECDSA"] = "SHA-224withCVC-ECDSA"; + AlgorithmMap["CVC-ECDSAWITHSHA224"] = "SHA-224withCVC-ECDSA"; + AlgorithmMap["CVC-ECDSAWITHSHA-224"] = "SHA-224withCVC-ECDSA"; + AlgorithmMap["SHA224WITHCVC-ECDSA"] = "SHA-224withCVC-ECDSA"; + AlgorithmMap["SHA-224WITHCVC-ECDSA"] = "SHA-224withCVC-ECDSA"; + AlgorithmMap[EacObjectIdentifiers.id_TA_ECDSA_SHA_224.Id] = "SHA-224withCVC-ECDSA"; + + AlgorithmMap["SHA256/CVC-ECDSA"] = "SHA-256withCVC-ECDSA"; + AlgorithmMap["SHA-256/CVC-ECDSA"] = "SHA-256withCVC-ECDSA"; + AlgorithmMap["CVC-ECDSAWITHSHA256"] = "SHA-256withCVC-ECDSA"; + AlgorithmMap["CVC-ECDSAWITHSHA-256"] = "SHA-256withCVC-ECDSA"; + AlgorithmMap["SHA256WITHCVC-ECDSA"] = "SHA-256withCVC-ECDSA"; + AlgorithmMap["SHA-256WITHCVC-ECDSA"] = "SHA-256withCVC-ECDSA"; + AlgorithmMap[EacObjectIdentifiers.id_TA_ECDSA_SHA_256.Id] = "SHA-256withCVC-ECDSA"; + + AlgorithmMap["SHA384/CVC-ECDSA"] = "SHA-384withCVC-ECDSA"; + AlgorithmMap["SHA-384/CVC-ECDSA"] = "SHA-384withCVC-ECDSA"; + AlgorithmMap["CVC-ECDSAWITHSHA384"] = "SHA-384withCVC-ECDSA"; + AlgorithmMap["CVC-ECDSAWITHSHA-384"] = "SHA-384withCVC-ECDSA"; + AlgorithmMap["SHA384WITHCVC-ECDSA"] = "SHA-384withCVC-ECDSA"; + AlgorithmMap["SHA-384WITHCVC-ECDSA"] = "SHA-384withCVC-ECDSA"; + AlgorithmMap[EacObjectIdentifiers.id_TA_ECDSA_SHA_384.Id] = "SHA-384withCVC-ECDSA"; + + AlgorithmMap["SHA512/CVC-ECDSA"] = "SHA-512withCVC-ECDSA"; + AlgorithmMap["SHA-512/CVC-ECDSA"] = "SHA-512withCVC-ECDSA"; + AlgorithmMap["CVC-ECDSAWITHSHA512"] = "SHA-512withCVC-ECDSA"; + AlgorithmMap["CVC-ECDSAWITHSHA-512"] = "SHA-512withCVC-ECDSA"; + AlgorithmMap["SHA512WITHCVC-ECDSA"] = "SHA-512withCVC-ECDSA"; + AlgorithmMap["SHA-512WITHCVC-ECDSA"] = "SHA-512withCVC-ECDSA"; + AlgorithmMap[EacObjectIdentifiers.id_TA_ECDSA_SHA_512.Id] = "SHA-512withCVC-ECDSA"; + + AlgorithmMap["NONEWITHPLAIN-ECDSA"] = "NONEwithPLAIN-ECDSA"; + AlgorithmMap["PLAIN-ECDSAWITHNONE"] = "NONEwithPLAIN-ECDSA"; + + AlgorithmMap["SHA1/PLAIN-ECDSA"] = "SHA-1withPLAIN-ECDSA"; + AlgorithmMap["SHA-1/PLAIN-ECDSA"] = "SHA-1withPLAIN-ECDSA"; + AlgorithmMap["PLAIN-ECDSAWITHSHA1"] = "SHA-1withPLAIN-ECDSA"; + AlgorithmMap["PLAIN-ECDSAWITHSHA-1"] = "SHA-1withPLAIN-ECDSA"; + AlgorithmMap["SHA1WITHPLAIN-ECDSA"] = "SHA-1withPLAIN-ECDSA"; + AlgorithmMap["SHA-1WITHPLAIN-ECDSA"] = "SHA-1withPLAIN-ECDSA"; + AlgorithmMap[BsiObjectIdentifiers.ecdsa_plain_SHA1.Id] = "SHA-1withPLAIN-ECDSA"; + + AlgorithmMap["SHA224/PLAIN-ECDSA"] = "SHA-224withPLAIN-ECDSA"; + AlgorithmMap["SHA-224/PLAIN-ECDSA"] = "SHA-224withPLAIN-ECDSA"; + AlgorithmMap["PLAIN-ECDSAWITHSHA224"] = "SHA-224withPLAIN-ECDSA"; + AlgorithmMap["PLAIN-ECDSAWITHSHA-224"] = "SHA-224withPLAIN-ECDSA"; + AlgorithmMap["SHA224WITHPLAIN-ECDSA"] = "SHA-224withPLAIN-ECDSA"; + AlgorithmMap["SHA-224WITHPLAIN-ECDSA"] = "SHA-224withPLAIN-ECDSA"; + AlgorithmMap[BsiObjectIdentifiers.ecdsa_plain_SHA224.Id] = "SHA-224withPLAIN-ECDSA"; + + AlgorithmMap["SHA256/PLAIN-ECDSA"] = "SHA-256withPLAIN-ECDSA"; + AlgorithmMap["SHA-256/PLAIN-ECDSA"] = "SHA-256withPLAIN-ECDSA"; + AlgorithmMap["PLAIN-ECDSAWITHSHA256"] = "SHA-256withPLAIN-ECDSA"; + AlgorithmMap["PLAIN-ECDSAWITHSHA-256"] = "SHA-256withPLAIN-ECDSA"; + AlgorithmMap["SHA256WITHPLAIN-ECDSA"] = "SHA-256withPLAIN-ECDSA"; + AlgorithmMap["SHA-256WITHPLAIN-ECDSA"] = "SHA-256withPLAIN-ECDSA"; + AlgorithmMap[BsiObjectIdentifiers.ecdsa_plain_SHA256.Id] = "SHA-256withPLAIN-ECDSA"; + + AlgorithmMap["SHA384/PLAIN-ECDSA"] = "SHA-384withPLAIN-ECDSA"; + AlgorithmMap["SHA-384/PLAIN-ECDSA"] = "SHA-384withPLAIN-ECDSA"; + AlgorithmMap["PLAIN-ECDSAWITHSHA384"] = "SHA-384withPLAIN-ECDSA"; + AlgorithmMap["PLAIN-ECDSAWITHSHA-384"] = "SHA-384withPLAIN-ECDSA"; + AlgorithmMap["SHA384WITHPLAIN-ECDSA"] = "SHA-384withPLAIN-ECDSA"; + AlgorithmMap["SHA-384WITHPLAIN-ECDSA"] = "SHA-384withPLAIN-ECDSA"; + AlgorithmMap[BsiObjectIdentifiers.ecdsa_plain_SHA384.Id] = "SHA-384withPLAIN-ECDSA"; + + AlgorithmMap["SHA512/PLAIN-ECDSA"] = "SHA-512withPLAIN-ECDSA"; + AlgorithmMap["SHA-512/PLAIN-ECDSA"] = "SHA-512withPLAIN-ECDSA"; + AlgorithmMap["PLAIN-ECDSAWITHSHA512"] = "SHA-512withPLAIN-ECDSA"; + AlgorithmMap["PLAIN-ECDSAWITHSHA-512"] = "SHA-512withPLAIN-ECDSA"; + AlgorithmMap["SHA512WITHPLAIN-ECDSA"] = "SHA-512withPLAIN-ECDSA"; + AlgorithmMap["SHA-512WITHPLAIN-ECDSA"] = "SHA-512withPLAIN-ECDSA"; + AlgorithmMap[BsiObjectIdentifiers.ecdsa_plain_SHA512.Id] = "SHA-512withPLAIN-ECDSA"; + + AlgorithmMap["RIPEMD160/PLAIN-ECDSA"] = "RIPEMD160withPLAIN-ECDSA"; + AlgorithmMap["PLAIN-ECDSAWITHRIPEMD160"] = "RIPEMD160withPLAIN-ECDSA"; + AlgorithmMap["RIPEMD160WITHPLAIN-ECDSA"] = "RIPEMD160withPLAIN-ECDSA"; + AlgorithmMap[BsiObjectIdentifiers.ecdsa_plain_RIPEMD160.Id] = "RIPEMD160withPLAIN-ECDSA"; + + AlgorithmMap["SHA1WITHECNR"] = "SHA-1withECNR"; + AlgorithmMap["SHA-1WITHECNR"] = "SHA-1withECNR"; + AlgorithmMap["SHA224WITHECNR"] = "SHA-224withECNR"; + AlgorithmMap["SHA-224WITHECNR"] = "SHA-224withECNR"; + AlgorithmMap["SHA256WITHECNR"] = "SHA-256withECNR"; + AlgorithmMap["SHA-256WITHECNR"] = "SHA-256withECNR"; + AlgorithmMap["SHA384WITHECNR"] = "SHA-384withECNR"; + AlgorithmMap["SHA-384WITHECNR"] = "SHA-384withECNR"; + AlgorithmMap["SHA512WITHECNR"] = "SHA-512withECNR"; + AlgorithmMap["SHA-512WITHECNR"] = "SHA-512withECNR"; + + AlgorithmMap["GOST-3410"] = "GOST3410"; + AlgorithmMap["GOST-3410-94"] = "GOST3410"; + AlgorithmMap["GOST3411WITHGOST3410"] = "GOST3410"; + AlgorithmMap["GOST3411/GOST3410"] = "GOST3410"; + AlgorithmMap[CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94.Id] = "GOST3410"; + + AlgorithmMap["ECGOST-3410"] = "ECGOST3410"; + AlgorithmMap["GOST-3410-2001"] = "ECGOST3410"; + AlgorithmMap["GOST3411WITHECGOST3410"] = "ECGOST3410"; + AlgorithmMap["GOST3411/ECGOST3410"] = "ECGOST3410"; + AlgorithmMap[CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001.Id] = "ECGOST3410"; + + AlgorithmMap["GOST-3410-2012-256"] = "ECGOST3410-2012-256"; + AlgorithmMap["GOST3411WITHECGOST3410-2012-256"] = "ECGOST3410-2012-256"; + AlgorithmMap["GOST3411-2012-256WITHECGOST3410"] = "ECGOST3410-2012-256"; + AlgorithmMap["GOST3411-2012-256WITHECGOST3410-2012-256"] = "ECGOST3410-2012-256"; + AlgorithmMap["GOST3411-2012-256/ECGOST3410"] = "ECGOST3410-2012-256"; + AlgorithmMap["GOST3411-2012-256/ECGOST3410-2012-256"] = "ECGOST3410-2012-256"; + AlgorithmMap[RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_256.Id] = + "ECGOST3410-2012-256"; + + AlgorithmMap["GOST-3410-2012-512"] = "ECGOST3410-2012-512"; + AlgorithmMap["GOST3411WITHECGOST3410-2012-512"] = "ECGOST3410-2012-512"; + AlgorithmMap["GOST3411-2012-512WITHECGOST3410"] = "ECGOST3410-2012-512"; + AlgorithmMap["GOST3411-2012-512WITHECGOST3410-2012-512"] = "ECGOST3410-2012-512"; + AlgorithmMap["GOST3411-2012-512/ECGOST3410"] = "ECGOST3410-2012-512"; + AlgorithmMap["GOST3411-2012-512/ECGOST3410-2012-512"] = "ECGOST3410-2012-512"; + AlgorithmMap[RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_512.Id] = + "ECGOST3410-2012-512"; + + AlgorithmMap["ED25519"] = "Ed25519"; + AlgorithmMap[EdECObjectIdentifiers.id_Ed25519.Id] = "Ed25519"; + AlgorithmMap["ED25519CTX"] = "Ed25519ctx"; + AlgorithmMap["ED25519PH"] = "Ed25519ph"; + AlgorithmMap["ED448"] = "Ed448"; + AlgorithmMap[EdECObjectIdentifiers.id_Ed448.Id] = "Ed448"; + AlgorithmMap["ED448PH"] = "Ed448ph"; + + AlgorithmMap["SHA256WITHSM2"] = "SHA256withSM2"; + AlgorithmMap[GMObjectIdentifiers.sm2sign_with_sha256.Id] = "SHA256withSM2"; + AlgorithmMap["SM3WITHSM2"] = "SM3withSM2"; + AlgorithmMap[GMObjectIdentifiers.sm2sign_with_sm3.Id] = "SM3withSM2"; + + Oids["MD2withRSA"] = PkcsObjectIdentifiers.MD2WithRsaEncryption; + Oids["MD4withRSA"] = PkcsObjectIdentifiers.MD4WithRsaEncryption; + Oids["MD5withRSA"] = PkcsObjectIdentifiers.MD5WithRsaEncryption; + + Oids["SHA-1withRSA"] = PkcsObjectIdentifiers.Sha1WithRsaEncryption; + Oids["SHA-224withRSA"] = PkcsObjectIdentifiers.Sha224WithRsaEncryption; + Oids["SHA-256withRSA"] = PkcsObjectIdentifiers.Sha256WithRsaEncryption; + Oids["SHA-384withRSA"] = PkcsObjectIdentifiers.Sha384WithRsaEncryption; + Oids["SHA-512withRSA"] = PkcsObjectIdentifiers.Sha512WithRsaEncryption; + Oids["SHA-512(224)withRSA"] = PkcsObjectIdentifiers.Sha512_224WithRSAEncryption; + Oids["SHA-512(256)withRSA"] = PkcsObjectIdentifiers.Sha512_256WithRSAEncryption; + Oids["SHA3-224withRSA"] = NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_224; + Oids["SHA3-256withRSA"] = NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_256; + Oids["SHA3-384withRSA"] = NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_384; + Oids["SHA3-512withRSA"] = NistObjectIdentifiers.IdRsassaPkcs1V15WithSha3_512; + + Oids["PSSwithRSA"] = PkcsObjectIdentifiers.IdRsassaPss; + Oids["SHA-1withRSAandMGF1"] = PkcsObjectIdentifiers.IdRsassaPss; + Oids["SHA-224withRSAandMGF1"] = PkcsObjectIdentifiers.IdRsassaPss; + Oids["SHA-256withRSAandMGF1"] = PkcsObjectIdentifiers.IdRsassaPss; + Oids["SHA-384withRSAandMGF1"] = PkcsObjectIdentifiers.IdRsassaPss; + Oids["SHA-512withRSAandMGF1"] = PkcsObjectIdentifiers.IdRsassaPss; + + Oids["RIPEMD128withRSA"] = TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD128; + Oids["RIPEMD160withRSA"] = TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD160; + Oids["RIPEMD256withRSA"] = TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD256; + + Oids["SHA-1withDSA"] = X9ObjectIdentifiers.IdDsaWithSha1; + + Oids["SHA-1withECDSA"] = X9ObjectIdentifiers.ECDsaWithSha1; + Oids["SHA-224withECDSA"] = X9ObjectIdentifiers.ECDsaWithSha224; + Oids["SHA-256withECDSA"] = X9ObjectIdentifiers.ECDsaWithSha256; + Oids["SHA-384withECDSA"] = X9ObjectIdentifiers.ECDsaWithSha384; + Oids["SHA-512withECDSA"] = X9ObjectIdentifiers.ECDsaWithSha512; + Oids["RIPEMD160withECDSA"] = TeleTrusTObjectIdentifiers.ECSignWithRipeMD160; + + Oids["SHA-1withCVC-ECDSA"] = EacObjectIdentifiers.id_TA_ECDSA_SHA_1; + Oids["SHA-224withCVC-ECDSA"] = EacObjectIdentifiers.id_TA_ECDSA_SHA_224; + Oids["SHA-256withCVC-ECDSA"] = EacObjectIdentifiers.id_TA_ECDSA_SHA_256; + Oids["SHA-384withCVC-ECDSA"] = EacObjectIdentifiers.id_TA_ECDSA_SHA_384; + Oids["SHA-512withCVC-ECDSA"] = EacObjectIdentifiers.id_TA_ECDSA_SHA_512; + + Oids["SHA-1withPLAIN-ECDSA"] = BsiObjectIdentifiers.ecdsa_plain_SHA1; + Oids["SHA-224withPLAIN-ECDSA"] = BsiObjectIdentifiers.ecdsa_plain_SHA224; + Oids["SHA-256withPLAIN-ECDSA"] = BsiObjectIdentifiers.ecdsa_plain_SHA256; + Oids["SHA-384withPLAIN-ECDSA"] = BsiObjectIdentifiers.ecdsa_plain_SHA384; + Oids["SHA-512withPLAIN-ECDSA"] = BsiObjectIdentifiers.ecdsa_plain_SHA512; + Oids["RIPEMD160withPLAIN-ECDSA"] = BsiObjectIdentifiers.ecdsa_plain_RIPEMD160; + + Oids["GOST3410"] = CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94; + Oids["ECGOST3410"] = CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001; + + Oids["ECGOST3410-2012-256"] = RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_256; + Oids["ECGOST3410-2012-512"] = RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_512; + + Oids["Ed25519"] = EdECObjectIdentifiers.id_Ed25519; + Oids["Ed448"] = EdECObjectIdentifiers.id_Ed448; + + Oids["SHA256withSM2"] = GMObjectIdentifiers.sm2sign_with_sha256; + Oids["SM3withSM2"] = GMObjectIdentifiers.sm2sign_with_sm3; + } + + /// + /// Returns an ObjectIdentifier for a given encoding. + /// + /// A string representation of the encoding. + /// A DerObjectIdentifier, null if the OID is not available. + // TODO Don't really want to support this + public static DerObjectIdentifier GetObjectIdentifier(string mechanism) + { + if (mechanism == null) + throw new ArgumentNullException(nameof(mechanism)); + + string algorithm = CollectionUtilities.GetValueOrKey(AlgorithmMap, mechanism); + + return CollectionUtilities.GetValueOrNull(Oids, algorithm); + } + + public static ICollection Algorithms + { + get { return CollectionUtilities.ReadOnly(Oids.Keys); } + } + + public static Asn1Encodable GetDefaultX509Parameters(DerObjectIdentifier id) + { + return GetDefaultX509Parameters(id.Id); + } + + public static Asn1Encodable GetDefaultX509Parameters(string algorithm) + { + if (algorithm == null) + throw new ArgumentNullException(nameof(algorithm)); + + string mechanism = CollectionUtilities.GetValueOrKey(AlgorithmMap, algorithm); + + if (mechanism == "PSSwithRSA") + { + // TODO The Sha1Digest here is a default. In JCE version, the actual digest + // to be used can be overridden by subsequent parameter settings. + return GetPssX509Parameters("SHA-1"); + } + + if (Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "withRSAandMGF1")) + { + string digestName = mechanism.Substring(0, mechanism.Length - "withRSAandMGF1".Length); + return GetPssX509Parameters(digestName); + } + + return DerNull.Instance; + } + + private static Asn1Encodable GetPssX509Parameters( + string digestName) + { + AlgorithmIdentifier hashAlgorithm = new AlgorithmIdentifier( + DigestUtilities.GetObjectIdentifier(digestName), DerNull.Instance); + + // TODO Is it possible for the MGF hash alg to be different from the PSS one? + AlgorithmIdentifier maskGenAlgorithm = new AlgorithmIdentifier( + PkcsObjectIdentifiers.IdMgf1, hashAlgorithm); + + int saltLen = DigestUtilities.GetDigest(digestName).GetDigestSize(); + return new RsassaPssParameters(hashAlgorithm, maskGenAlgorithm, + new DerInteger(saltLen), new DerInteger(1)); + } + + public static ISigner GetSigner(DerObjectIdentifier id) + { + return GetSigner(id.Id); + } + + public static ISigner GetSigner(string algorithm) + { + if (algorithm == null) + throw new ArgumentNullException(nameof(algorithm)); + + string mechanism = CollectionUtilities.GetValueOrKey(AlgorithmMap, algorithm.ToUpperInvariant()); + + if (Org.BouncyCastle.Utilities.Platform.StartsWith(mechanism, "Ed")) + { + if (mechanism.Equals("Ed25519")) + { + return new Ed25519Signer(); + } + if (mechanism.Equals("Ed25519ctx")) + { + return new Ed25519ctxSigner(Arrays.EmptyBytes); + } + if (mechanism.Equals("Ed25519ph")) + { + return new Ed25519phSigner(Arrays.EmptyBytes); + } + if (mechanism.Equals("Ed448")) + { + return new Ed448Signer(Arrays.EmptyBytes); + } + if (mechanism.Equals("Ed448ph")) + { + return new Ed448phSigner(Arrays.EmptyBytes); + } + } + + if (mechanism.Equals("RSA")) + { + return (new RsaDigestSigner(new NullDigest(), (AlgorithmIdentifier)null)); + } + if (mechanism.Equals("RAWRSASSA-PSS")) + { + // TODO Add support for other parameter settings + return PssSigner.CreateRawSigner(new RsaBlindedEngine(), new Sha1Digest()); + } + if (mechanism.Equals("PSSwithRSA")) + { + // TODO The Sha1Digest here is a default. In JCE version, the actual digest + // to be used can be overridden by subsequent parameter settings. + return new PssSigner(new RsaBlindedEngine(), new Sha1Digest()); + } + if (Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "withRSA")) + { + string digestName = mechanism.Substring(0, mechanism.LastIndexOf("with")); + IDigest digest = DigestUtilities.GetDigest(digestName); + return new RsaDigestSigner(digest); + } + if (Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "withRSAandMGF1")) + { + string digestName = mechanism.Substring(0, mechanism.LastIndexOf("with")); + IDigest digest = DigestUtilities.GetDigest(digestName); + return new PssSigner(new RsaBlindedEngine(), digest); + } + + if (Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "withDSA")) + { + string digestName = mechanism.Substring(0, mechanism.LastIndexOf("with")); + IDigest digest = DigestUtilities.GetDigest(digestName); + return new DsaDigestSigner(new DsaSigner(), digest); + } + + if (Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "withECDSA")) + { + string digestName = mechanism.Substring(0, mechanism.LastIndexOf("with")); + IDigest digest = DigestUtilities.GetDigest(digestName); + return new DsaDigestSigner(new ECDsaSigner(), digest); + } + + if (Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "withCVC-ECDSA") + || Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "withPLAIN-ECDSA")) + { + string digestName = mechanism.Substring(0, mechanism.LastIndexOf("with")); + IDigest digest = DigestUtilities.GetDigest(digestName); + return new DsaDigestSigner(new ECDsaSigner(), digest, PlainDsaEncoding.Instance); + } + + if (Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "withECNR")) + { + string digestName = mechanism.Substring(0, mechanism.LastIndexOf("with")); + IDigest digest = DigestUtilities.GetDigest(digestName); + return new DsaDigestSigner(new ECNRSigner(), digest); + } + + if (Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "withSM2")) + { + string digestName = mechanism.Substring(0, mechanism.LastIndexOf("with")); + IDigest digest = DigestUtilities.GetDigest(digestName); + return new SM2Signer(digest); + } + + if (mechanism.Equals("GOST3410")) + { + return new Gost3410DigestSigner(new Gost3410Signer(), new Gost3411Digest()); + } + if (mechanism.Equals("ECGOST3410")) + { + return new Gost3410DigestSigner(new ECGost3410Signer(), new Gost3411Digest()); + } + if (mechanism.Equals("ECGOST3410-2012-256")) + { + return new Gost3410DigestSigner(new ECGost3410Signer(), new Gost3411_2012_256Digest()); + } + if (mechanism.Equals("ECGOST3410-2012-512")) + { + return new Gost3410DigestSigner(new ECGost3410Signer(), new Gost3411_2012_512Digest()); + } + + if (mechanism.Equals("SHA1WITHRSA/ISO9796-2")) + { + return new Iso9796d2Signer(new RsaBlindedEngine(), new Sha1Digest(), true); + } + if (mechanism.Equals("MD5WITHRSA/ISO9796-2")) + { + return new Iso9796d2Signer(new RsaBlindedEngine(), new MD5Digest(), true); + } + if (mechanism.Equals("RIPEMD160WITHRSA/ISO9796-2")) + { + return new Iso9796d2Signer(new RsaBlindedEngine(), new RipeMD160Digest(), true); + } + + if (Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "/X9.31")) + { + string x931 = mechanism.Substring(0, mechanism.Length - "/X9.31".Length); + int withPos = Org.BouncyCastle.Utilities.Platform.IndexOf(x931, "WITH"); + if (withPos > 0) + { + int endPos = withPos + "WITH".Length; + + string digestName = x931.Substring(0, withPos); + IDigest digest = DigestUtilities.GetDigest(digestName); + + string cipherName = x931.Substring(endPos, x931.Length - endPos); + if (cipherName.Equals("RSA")) + { + IAsymmetricBlockCipher cipher = new RsaBlindedEngine(); + return new X931Signer(cipher, digest); + } + } + } + + throw new SecurityUtilityException("Signer " + algorithm + " not recognised."); + } + + public static string GetEncodingName(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(AlgorithmMap, oid.Id); + } + + public static ISigner InitSigner(DerObjectIdentifier algorithmOid, bool forSigning, AsymmetricKeyParameter privateKey, SecureRandom random) + { + return InitSigner(algorithmOid.Id, forSigning, privateKey, random); + } + + public static ISigner InitSigner(string algorithm, bool forSigning, AsymmetricKeyParameter privateKey, SecureRandom random) + { + ISigner signer = GetSigner(algorithm); + signer.Init(forSigning, ParameterUtilities.WithRandom(privateKey, random)); + return signer; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SignerUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SignerUtilities.cs.meta new file mode 100644 index 000000000..f77e633c9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/SignerUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 06997fffd3bfe604f912392f70471c57 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/WrapperUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/WrapperUtilities.cs new file mode 100644 index 000000000..d1fadf7d6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/WrapperUtilities.cs @@ -0,0 +1,144 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Kisa; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ntt; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security +{ + /// + /// Utility class for creating IWrapper objects from their names/Oids + /// + public static class WrapperUtilities + { + private enum WrapAlgorithm { AESWRAP, CAMELLIAWRAP, DESEDEWRAP, RC2WRAP, SEEDWRAP, + DESEDERFC3211WRAP, AESRFC3211WRAP, CAMELLIARFC3211WRAP }; + + private static readonly IDictionary Algorithms = + new Dictionary(StringComparer.OrdinalIgnoreCase); + + static WrapperUtilities() + { + // Signal to obfuscation tools not to change enum constants + Enums.GetArbitraryValue().ToString(); + + Algorithms[NistObjectIdentifiers.IdAes128Wrap.Id] = "AESWRAP"; + Algorithms[NistObjectIdentifiers.IdAes192Wrap.Id] = "AESWRAP"; + Algorithms[NistObjectIdentifiers.IdAes256Wrap.Id] = "AESWRAP"; + + Algorithms[NttObjectIdentifiers.IdCamellia128Wrap.Id] = "CAMELLIAWRAP"; + Algorithms[NttObjectIdentifiers.IdCamellia192Wrap.Id] = "CAMELLIAWRAP"; + Algorithms[NttObjectIdentifiers.IdCamellia256Wrap.Id] = "CAMELLIAWRAP"; + + Algorithms[PkcsObjectIdentifiers.IdAlgCms3DesWrap.Id] = "DESEDEWRAP"; + Algorithms["TDEAWRAP"] = "DESEDEWRAP"; + + Algorithms[PkcsObjectIdentifiers.IdAlgCmsRC2Wrap.Id] = "RC2WRAP"; + + Algorithms[KisaObjectIdentifiers.IdNpkiAppCmsSeedWrap.Id] = "SEEDWRAP"; + } + + public static IWrapper GetWrapper(DerObjectIdentifier oid) + { + return GetWrapper(oid.Id); + } + + public static IWrapper GetWrapper(string algorithm) + { + string mechanism = CollectionUtilities.GetValueOrKey(Algorithms, algorithm).ToUpperInvariant(); + + try + { + WrapAlgorithm wrapAlgorithm = Enums.GetEnumValue(mechanism); + + switch (wrapAlgorithm) + { + case WrapAlgorithm.AESWRAP: return new AesWrapEngine(); + case WrapAlgorithm.CAMELLIAWRAP: return new CamelliaWrapEngine(); + case WrapAlgorithm.DESEDEWRAP: return new DesEdeWrapEngine(); + case WrapAlgorithm.RC2WRAP: return new RC2WrapEngine(); + case WrapAlgorithm.SEEDWRAP: return new SeedWrapEngine(); + case WrapAlgorithm.DESEDERFC3211WRAP: return new Rfc3211WrapEngine(new DesEdeEngine()); + case WrapAlgorithm.AESRFC3211WRAP: return new Rfc3211WrapEngine(AesUtilities.CreateEngine()); + case WrapAlgorithm.CAMELLIARFC3211WRAP: return new Rfc3211WrapEngine(new CamelliaEngine()); + } + } + catch (ArgumentException) + { + } + + // Create an IBufferedCipher and use it as IWrapper (via BufferedCipherWrapper) + IBufferedCipher blockCipher = CipherUtilities.GetCipher(algorithm); + + if (blockCipher != null) + return new BufferedCipherWrapper(blockCipher); + + throw new SecurityUtilityException("Wrapper " + algorithm + " not recognised."); + } + + public static string GetAlgorithmName(DerObjectIdentifier oid) + { + return CollectionUtilities.GetValueOrNull(Algorithms, oid.Id); + } + + private class BufferedCipherWrapper + : IWrapper + { + private readonly IBufferedCipher cipher; + private bool forWrapping; + + public BufferedCipherWrapper( + IBufferedCipher cipher) + { + this.cipher = cipher; + } + + public string AlgorithmName + { + get { return cipher.AlgorithmName; } + } + + public void Init( + bool forWrapping, + ICipherParameters parameters) + { + this.forWrapping = forWrapping; + + cipher.Init(forWrapping, parameters); + } + + public byte[] Wrap( + byte[] input, + int inOff, + int length) + { + if (!forWrapping) + throw new InvalidOperationException("Not initialised for wrapping"); + + return cipher.DoFinal(input, inOff, length); + } + + public byte[] Unwrap( + byte[] input, + int inOff, + int length) + { + if (forWrapping) + throw new InvalidOperationException("Not initialised for unwrapping"); + + return cipher.DoFinal(input, inOff, length); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/WrapperUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/WrapperUtilities.cs.meta new file mode 100644 index 000000000..0f7a0223b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/WrapperUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 73ae39e593069a449ae3656aa207a8c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert.meta new file mode 100644 index 000000000..518fb0d9b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d73ca49e92fed5341b3ab5351606b988 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateEncodingException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateEncodingException.cs new file mode 100644 index 000000000..83c89b902 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateEncodingException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates +{ + [Serializable] + public class CertificateEncodingException + : CertificateException + { + public CertificateEncodingException() + : base() + { + } + + public CertificateEncodingException(string message) + : base(message) + { + } + + public CertificateEncodingException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected CertificateEncodingException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateEncodingException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateEncodingException.cs.meta new file mode 100644 index 000000000..8a7f8a403 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateEncodingException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d13d171e5bd63a43857b59678c5b634 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateException.cs new file mode 100644 index 000000000..2269caa5c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates +{ + [Serializable] + public class CertificateException + : GeneralSecurityException + { + public CertificateException() + : base() + { + } + + public CertificateException(string message) + : base(message) + { + } + + public CertificateException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected CertificateException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateException.cs.meta new file mode 100644 index 000000000..b1850b5f9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 312dba7b3b4d2b64f9f51f95db4ee1ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateExpiredException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateExpiredException.cs new file mode 100644 index 000000000..8b3891a6d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateExpiredException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates +{ + [Serializable] + public class CertificateExpiredException + : CertificateException + { + public CertificateExpiredException() + : base() + { + } + + public CertificateExpiredException(string message) + : base(message) + { + } + + public CertificateExpiredException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected CertificateExpiredException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateExpiredException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateExpiredException.cs.meta new file mode 100644 index 000000000..3822b60e9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateExpiredException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 94e5534bd782d1d4aa1d9cdf658ef365 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateNotYetValidException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateNotYetValidException.cs new file mode 100644 index 000000000..beeecec48 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateNotYetValidException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates +{ + [Serializable] + public class CertificateNotYetValidException + : CertificateException + { + public CertificateNotYetValidException() + : base() + { + } + + public CertificateNotYetValidException(string message) + : base(message) + { + } + + public CertificateNotYetValidException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected CertificateNotYetValidException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateNotYetValidException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateNotYetValidException.cs.meta new file mode 100644 index 000000000..b2de4bdd4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateNotYetValidException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1c062f71e1e45684aaa24f6ec45dc08c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateParsingException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateParsingException.cs new file mode 100644 index 000000000..17c1577d3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateParsingException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates +{ + [Serializable] + public class CertificateParsingException + : CertificateException + { + public CertificateParsingException() + : base() + { + } + + public CertificateParsingException(string message) + : base(message) + { + } + + public CertificateParsingException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected CertificateParsingException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateParsingException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateParsingException.cs.meta new file mode 100644 index 000000000..8a732cb0a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CertificateParsingException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cf1c2ef4e5eeedd4aac155d8a36837c3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CrlException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CrlException.cs new file mode 100644 index 000000000..09712f007 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CrlException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates +{ + [Serializable] + public class CrlException + : GeneralSecurityException + { + public CrlException() + : base() + { + } + + public CrlException(string message) + : base(message) + { + } + + public CrlException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected CrlException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CrlException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CrlException.cs.meta new file mode 100644 index 000000000..653afffc6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/security/cert/CrlException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0c28bc603c44ba4cae418797434e798 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls.meta new file mode 100644 index 000000000..0c48b1e4f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bda958f76bf06964f88e54f3194cd338 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsClient.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsClient.cs new file mode 100644 index 000000000..6077c68d2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsClient.cs @@ -0,0 +1,488 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Base class for a TLS client. + public abstract class AbstractTlsClient + : AbstractTlsPeer, TlsClient + { + protected TlsClientContext m_context; + protected ProtocolVersion[] m_protocolVersions; + protected int[] m_cipherSuites; + + protected IList m_supportedGroups; + protected IList m_supportedSignatureAlgorithms; + protected IList m_supportedSignatureAlgorithmsCert; + + protected AbstractTlsClient(TlsCrypto crypto) + : base(crypto) + { + } + + /// + protected virtual bool AllowUnexpectedServerExtension(int extensionType, byte[] extensionData) + { + switch (extensionType) + { + case ExtensionType.supported_groups: + /* + * Exception added based on field reports that some servers do send this, although the + * Supported Elliptic Curves Extension is clearly intended to be client-only. If + * present, we still require that it is a valid EllipticCurveList. + */ + TlsExtensionsUtilities.ReadSupportedGroupsExtension(extensionData); + return true; + + case ExtensionType.ec_point_formats: + /* + * Exception added based on field reports that some servers send this even when they + * didn't negotiate an ECC cipher suite. If present, we still require that it is a valid + * ECPointFormatList. + */ + TlsExtensionsUtilities.ReadSupportedPointFormatsExtension(extensionData); + return true; + + default: + return false; + } + } + + protected virtual IList GetNamedGroupRoles() + { + var namedGroupRoles = TlsUtilities.GetNamedGroupRoles(GetCipherSuites()); + var sigAlgs = m_supportedSignatureAlgorithms; + var sigAlgsCert = m_supportedSignatureAlgorithmsCert; + + if ((null == sigAlgs || TlsUtilities.ContainsAnySignatureAlgorithm(sigAlgs, SignatureAlgorithm.ecdsa)) || + (null != sigAlgsCert && TlsUtilities.ContainsAnySignatureAlgorithm(sigAlgsCert, SignatureAlgorithm.ecdsa))) + { + TlsUtilities.AddToSet(namedGroupRoles, NamedGroupRole.ecdsa); + } + + return namedGroupRoles; + } + + /// + protected virtual void CheckForUnexpectedServerExtension(IDictionary serverExtensions, + int extensionType) + { + byte[] extensionData = TlsUtilities.GetExtensionData(serverExtensions, extensionType); + if (extensionData != null && !AllowUnexpectedServerExtension(extensionType, extensionData)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + /// + public virtual TlsPskIdentity GetPskIdentity() + { + return null; + } + + /// + public virtual TlsSrpIdentity GetSrpIdentity() + { + return null; + } + + public virtual TlsDHGroupVerifier GetDHGroupVerifier() + { + return new DefaultTlsDHGroupVerifier(); + } + + public virtual TlsSrpConfigVerifier GetSrpConfigVerifier() + { + return new DefaultTlsSrpConfigVerifier(); + } + + protected virtual IList GetCertificateAuthorities() + { + return null; + } + + protected virtual IList GetProtocolNames() + { + return null; + } + + protected virtual CertificateStatusRequest GetCertificateStatusRequest() + { + return new CertificateStatusRequest(CertificateStatusType.ocsp, new OcspStatusRequest(null, null)); + } + + /// an of (or null). + protected virtual IList GetMultiCertStatusRequest() + { + return null; + } + + protected virtual IList GetSniServerNames() + { + return null; + } + + /// The default implementation calls this to determine which named + /// groups to include in the supported_groups extension for the ClientHello. + /// The named group roles for which there should + /// be at least one supported group. By default this is inferred from the offered cipher suites and signature + /// algorithms. + /// an of . See for group constants. + /// + protected virtual IList GetSupportedGroups(IList namedGroupRoles) + { + TlsCrypto crypto = Crypto; + var supportedGroups = new List(); + + if (namedGroupRoles.Contains(NamedGroupRole.ecdh)) + { + TlsUtilities.AddIfSupported(supportedGroups, crypto, + new int[]{ NamedGroup.x25519, NamedGroup.x448 }); + } + + if (namedGroupRoles.Contains(NamedGroupRole.ecdh) || + namedGroupRoles.Contains(NamedGroupRole.ecdsa)) + { + TlsUtilities.AddIfSupported(supportedGroups, crypto, + new int[]{ NamedGroup.secp256r1, NamedGroup.secp384r1 }); + } + + if (namedGroupRoles.Contains(NamedGroupRole.dh)) + { + TlsUtilities.AddIfSupported(supportedGroups, crypto, + new int[]{ NamedGroup.ffdhe2048, NamedGroup.ffdhe3072, NamedGroup.ffdhe4096 }); + } + + return supportedGroups; + } + + protected virtual IList GetSupportedSignatureAlgorithms() + { + return TlsUtilities.GetDefaultSupportedSignatureAlgorithms(m_context); + } + + protected virtual IList GetSupportedSignatureAlgorithmsCert() + { + return null; + } + + protected virtual IList GetTrustedCAIndication() + { + return null; + } + + protected virtual short[] GetAllowedClientCertificateTypes() + { + return null; + } + + protected virtual short[] GetAllowedServerCertificateTypes() + { + return null; + } + + public virtual void Init(TlsClientContext context) + { + this.m_context = context; + + this.m_protocolVersions = GetSupportedVersions(); + this.m_cipherSuites = GetSupportedCipherSuites(); + } + + public override ProtocolVersion[] GetProtocolVersions() + { + return m_protocolVersions; + } + + public override int[] GetCipherSuites() + { + return m_cipherSuites; + } + + /// + public override void NotifyHandshakeBeginning() + { + base.NotifyHandshakeBeginning(); + + this.m_supportedGroups = null; + this.m_supportedSignatureAlgorithms = null; + this.m_supportedSignatureAlgorithmsCert = null; + } + + public virtual TlsSession GetSessionToResume() + { + return null; + } + + public virtual IList GetExternalPsks() + { + return null; + } + + public virtual bool IsFallback() + { + /* + * RFC 7507 4. The TLS_FALLBACK_SCSV cipher suite value is meant for use by clients that + * repeat a connection attempt with a downgraded protocol (perform a "fallback retry") in + * order to work around interoperability problems with legacy servers. + */ + return false; + } + + /// + public virtual IDictionary GetClientExtensions() + { + var clientExtensions = new Dictionary(); + + bool offeringTlsV13Plus = false; + bool offeringPreTlsV13 = false; + { + ProtocolVersion[] supportedVersions = GetProtocolVersions(); + for (int i = 0; i < supportedVersions.Length; ++i) + { + if (TlsUtilities.IsTlsV13(supportedVersions[i])) + { + offeringTlsV13Plus = true; + } + else + { + offeringPreTlsV13 = true; + } + } + } + + var protocolNames = GetProtocolNames(); + if (protocolNames != null) + { + TlsExtensionsUtilities.AddAlpnExtensionClient(clientExtensions, protocolNames); + } + + var sniServerNames = GetSniServerNames(); + if (sniServerNames != null) + { + TlsExtensionsUtilities.AddServerNameExtensionClient(clientExtensions, sniServerNames); + } + + CertificateStatusRequest statusRequest = GetCertificateStatusRequest(); + if (statusRequest != null) + { + TlsExtensionsUtilities.AddStatusRequestExtension(clientExtensions, statusRequest); + } + + if (offeringTlsV13Plus) + { + var certificateAuthorities = GetCertificateAuthorities(); + if (certificateAuthorities != null) + { + TlsExtensionsUtilities.AddCertificateAuthoritiesExtension(clientExtensions, certificateAuthorities); + } + } + + if (offeringPreTlsV13) + { + // TODO Shouldn't add if no offered cipher suite uses a block cipher? + TlsExtensionsUtilities.AddEncryptThenMacExtension(clientExtensions); + + var statusRequestV2 = GetMultiCertStatusRequest(); + if (statusRequestV2 != null) + { + TlsExtensionsUtilities.AddStatusRequestV2Extension(clientExtensions, statusRequestV2); + } + + var trustedCAKeys = GetTrustedCAIndication(); + if (trustedCAKeys != null) + { + TlsExtensionsUtilities.AddTrustedCAKeysExtensionClient(clientExtensions, trustedCAKeys); + } + } + + ProtocolVersion clientVersion = m_context.ClientVersion; + + /* + * RFC 5246 7.4.1.4.1. Note: this extension is not meaningful for TLS versions prior to 1.2. + * Clients MUST NOT offer it if they are offering prior versions. + */ + if (TlsUtilities.IsSignatureAlgorithmsExtensionAllowed(clientVersion)) + { + var supportedSigAlgs = GetSupportedSignatureAlgorithms(); + if (null != supportedSigAlgs && supportedSigAlgs.Count > 0) + { + this.m_supportedSignatureAlgorithms = supportedSigAlgs; + + TlsExtensionsUtilities.AddSignatureAlgorithmsExtension(clientExtensions, supportedSigAlgs); + } + + var supportedSigAlgsCert = GetSupportedSignatureAlgorithmsCert(); + if (null != supportedSigAlgsCert && supportedSigAlgsCert.Count > 0) + { + this.m_supportedSignatureAlgorithmsCert = supportedSigAlgsCert; + + TlsExtensionsUtilities.AddSignatureAlgorithmsCertExtension(clientExtensions, supportedSigAlgsCert); + } + } + + var namedGroupRoles = GetNamedGroupRoles(); + + var supportedGroups = GetSupportedGroups(namedGroupRoles); + if (supportedGroups != null && supportedGroups.Count > 0) + { + this.m_supportedGroups = supportedGroups; + + TlsExtensionsUtilities.AddSupportedGroupsExtension(clientExtensions, supportedGroups); + } + + if (offeringPreTlsV13) + { + if (namedGroupRoles.Contains(NamedGroupRole.ecdh) || + namedGroupRoles.Contains(NamedGroupRole.ecdsa)) + { + TlsExtensionsUtilities.AddSupportedPointFormatsExtension(clientExtensions, + new short[]{ ECPointFormat.uncompressed }); + } + } + + /* + * RFC 7250 4.1: + * + * If the client has no remaining certificate types to send in + * the client hello, other than the default X.509 type, it MUST omit the + * client_certificate_type extension in the client hello. + */ + short[] clientCertTypes = GetAllowedClientCertificateTypes(); + if (clientCertTypes != null && (clientCertTypes.Length > 1 || clientCertTypes[0] != CertificateType.X509)) + { + TlsExtensionsUtilities.AddClientCertificateTypeExtensionClient(clientExtensions, clientCertTypes); + } + + /* + * RFC 7250 4.1: + * + * If the client has no remaining certificate types to send in + * the client hello, other than the default X.509 certificate type, it + * MUST omit the entire server_certificate_type extension from the + * client hello. + */ + short[] serverCertTypes = GetAllowedServerCertificateTypes(); + if (serverCertTypes != null && (serverCertTypes.Length > 1 || serverCertTypes[0] != CertificateType.X509)) + { + TlsExtensionsUtilities.AddServerCertificateTypeExtensionClient(clientExtensions, serverCertTypes); + } + + return clientExtensions; + } + + public virtual IList GetEarlyKeyShareGroups() + { + /* + * RFC 8446 4.2.8. Each KeyShareEntry value MUST correspond to a group offered in the + * "supported_groups" extension and MUST appear in the same order. However, the values MAY + * be a non-contiguous subset of the "supported_groups" extension and MAY omit the most + * preferred groups. + */ + + if (null == m_supportedGroups || m_supportedGroups.Count < 1) + return null; + + if (m_supportedGroups.Contains(NamedGroup.x25519)) + return TlsUtilities.VectorOfOne(NamedGroup.x25519); + + if (m_supportedGroups.Contains(NamedGroup.secp256r1)) + return TlsUtilities.VectorOfOne(NamedGroup.secp256r1); + + return TlsUtilities.VectorOfOne(m_supportedGroups[0]); + } + + /// + public virtual void NotifyServerVersion(ProtocolVersion serverVersion) + { + } + + public virtual void NotifySessionToResume(TlsSession session) + { + } + + public virtual void NotifySessionID(byte[] sessionID) + { + } + + public virtual void NotifySelectedCipherSuite(int selectedCipherSuite) + { + } + + /// + public virtual void NotifySelectedPsk(TlsPsk selectedPsk) + { + } + + /// + public virtual void ProcessServerExtensions(IDictionary serverExtensions) + { + if (null == serverExtensions) + return; + + SecurityParameters securityParameters = m_context.SecurityParameters; + bool isTlsV13 = TlsUtilities.IsTlsV13(securityParameters.NegotiatedVersion); + + if (isTlsV13) + { + /* + * NOTE: From TLS 1.3 the protocol classes are strict about what extensions can appear. + */ + } + else + { + /* + * RFC 5246 7.4.1.4.1. Servers MUST NOT send this extension. + */ + CheckForUnexpectedServerExtension(serverExtensions, ExtensionType.signature_algorithms); + CheckForUnexpectedServerExtension(serverExtensions, ExtensionType.signature_algorithms_cert); + + CheckForUnexpectedServerExtension(serverExtensions, ExtensionType.supported_groups); + + int selectedCipherSuite = securityParameters.CipherSuite; + + if (TlsEccUtilities.IsEccCipherSuite(selectedCipherSuite)) + { + // We only support uncompressed format, this is just to validate the extension, if present. + TlsExtensionsUtilities.GetSupportedPointFormatsExtension(serverExtensions); + } + else + { + CheckForUnexpectedServerExtension(serverExtensions, ExtensionType.ec_point_formats); + } + + /* + * RFC 7685 3. The server MUST NOT echo the extension. + */ + CheckForUnexpectedServerExtension(serverExtensions, ExtensionType.padding); + } + } + + /// + public virtual void ProcessServerSupplementalData(IList serverSupplementalData) + { + if (serverSupplementalData != null) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public abstract TlsAuthentication GetAuthentication(); + + /// + public virtual IList GetClientSupplementalData() + { + return null; + } + + /// + public virtual void NotifyNewSessionTicket(NewSessionTicket newSessionTicket) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsClient.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsClient.cs.meta new file mode 100644 index 000000000..adc361b07 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsClient.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8227cded6e5a6ec40ae81fd1d77da86c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsContext.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsContext.cs new file mode 100644 index 000000000..b2713f2a7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsContext.cs @@ -0,0 +1,316 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Threading; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + internal abstract class AbstractTlsContext + : TlsContext + { + private static long counter = DateTime.UtcNow.Ticks; + + private static long NextCounterValue() + { + return Interlocked.Increment(ref counter); + } + + private static TlsNonceGenerator CreateNonceGenerator(TlsCrypto crypto, int connectionEnd) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span additionalSeedMaterial = stackalloc byte[16]; + Pack.UInt64_To_BE((ulong)NextCounterValue(), additionalSeedMaterial); + Pack.UInt64_To_BE((ulong)DateTime.UtcNow.Ticks, additionalSeedMaterial[8..]); +#else + byte[] additionalSeedMaterial = new byte[16]; + Pack.UInt64_To_BE((ulong)NextCounterValue(), additionalSeedMaterial, 0); + Pack.UInt64_To_BE((ulong)DateTime.UtcNow.Ticks, additionalSeedMaterial, 8); +#endif + additionalSeedMaterial[0] &= 0x7F; + additionalSeedMaterial[0] |= (byte)(connectionEnd << 7); + + return crypto.CreateNonceGenerator(additionalSeedMaterial); + } + + private readonly TlsCrypto m_crypto; + private readonly int m_connectionEnd; + private readonly TlsNonceGenerator m_nonceGenerator; + + private SecurityParameters m_securityParameters = null; + private ProtocolVersion[] m_clientSupportedVersions = null; + private ProtocolVersion m_clientVersion = null; + private ProtocolVersion m_rsaPreMasterSecretVersion = null; + private TlsSession m_session = null; + private object m_userObject = null; + private bool m_connected = false; + + internal AbstractTlsContext(TlsCrypto crypto, int connectionEnd) + { + this.m_crypto = crypto; + this.m_connectionEnd = connectionEnd; + this.m_nonceGenerator = CreateNonceGenerator(crypto, connectionEnd); + } + + /// + internal void HandshakeBeginning(TlsPeer peer) + { + lock (this) + { + //if (null != m_securityParameters) + // throw new TlsFatalAlert(AlertDescription.internal_error, "Handshake already started"); + + var tmp = this.m_securityParameters; + + m_securityParameters = new SecurityParameters(); + m_securityParameters.m_entity = m_connectionEnd; + + if (tmp != null) + { + this.m_securityParameters.IsRenegotiating = true; + this.m_securityParameters.m_secureRenegotiation = tmp.m_secureRenegotiation; + this.m_securityParameters.m_negotiatedVersion = tmp.m_negotiatedVersion; + + this.m_securityParameters.m_localVerifyData = tmp.m_localVerifyData; + this.m_securityParameters.m_peerVerifyData = tmp.m_peerVerifyData; + this.m_securityParameters.PreRenegotiatingServerCert = tmp.m_peerCertificate; + } + } + + peer.NotifyHandshakeBeginning(); + } + + /// + internal void HandshakeComplete(TlsPeer peer, TlsSession session) + { + lock (this) + { + if (null == m_securityParameters) + throw new TlsFatalAlert(AlertDescription.internal_error); + + this.m_session = session; + this.m_connected = true; + } + + peer.NotifyHandshakeComplete(); + } + + internal bool IsConnected + { + get { lock (this) return m_connected; } + } + + internal bool IsHandshaking + { + get { lock (this) return !m_connected && null != m_securityParameters; } + } + + public TlsCrypto Crypto + { + get { return m_crypto; } + } + + public virtual TlsNonceGenerator NonceGenerator + { + get { return m_nonceGenerator; } + } + + public SecurityParameters SecurityParameters + { + get { lock (this) return m_securityParameters; } + } + + public abstract bool IsServer { get; } + + public virtual ProtocolVersion[] ClientSupportedVersions + { + get { return m_clientSupportedVersions; } + } + + internal void SetClientSupportedVersions(ProtocolVersion[] clientSupportedVersions) + { + this.m_clientSupportedVersions = clientSupportedVersions; + } + + public virtual ProtocolVersion ClientVersion + { + get { return m_clientVersion; } + } + + internal void SetClientVersion(ProtocolVersion clientVersion) + { + this.m_clientVersion = clientVersion; + } + + public virtual ProtocolVersion RsaPreMasterSecretVersion + { + get { return m_rsaPreMasterSecretVersion; } + } + + internal void SetRsaPreMasterSecretVersion(ProtocolVersion rsaPreMasterSecretVersion) + { + this.m_rsaPreMasterSecretVersion = rsaPreMasterSecretVersion; + } + + public virtual ProtocolVersion ServerVersion + { + get { return SecurityParameters.NegotiatedVersion; } + } + + public virtual TlsSession ResumableSession + { + get + { + TlsSession session = Session; + if (session == null || !session.IsResumable) + return null; + + return session; + } + } + + public virtual TlsSession Session + { + get { return m_session; } + } + + public virtual object UserObject + { + get { return m_userObject; } + set { this.m_userObject = value; } + } + + public virtual byte[] ExportChannelBinding(int channelBinding) + { + if (!IsConnected) + throw new InvalidOperationException("Export of channel bindings unavailable before handshake completion"); + + SecurityParameters securityParameters = SecurityParameters; + + if (ChannelBinding.tls_exporter == channelBinding) + return ExportKeyingMaterial("EXPORTER-Channel-Binding", TlsUtilities.EmptyBytes, 32); + + if (TlsUtilities.IsTlsV13(securityParameters.NegotiatedVersion)) + return null; + + switch (channelBinding) + { + case ChannelBinding.tls_server_end_point: + { + byte[] tlsServerEndPoint = securityParameters.TlsServerEndPoint; + + return TlsUtilities.IsNullOrEmpty(tlsServerEndPoint) ? null : Arrays.Clone(tlsServerEndPoint); + } + + case ChannelBinding.tls_unique: + { + return Arrays.Clone(securityParameters.TlsUnique); + } + + case ChannelBinding.tls_unique_for_telnet: + default: + throw new NotSupportedException(); + } + } + + public virtual byte[] ExportEarlyKeyingMaterial(string asciiLabel, byte[] context, int length) + { + // TODO[tls13] Ensure early_exporter_master_secret is available suitably early! + if (!IsConnected) + throw new InvalidOperationException("Export of early key material only available during handshake"); + + SecurityParameters sp = SecurityParameters; + + return ExportKeyingMaterial13(CheckEarlyExportSecret(sp.EarlyExporterMasterSecret), + sp.PrfCryptoHashAlgorithm, asciiLabel, context, length); + } + + public virtual byte[] ExportKeyingMaterial(string asciiLabel, byte[] context, int length) + { + if (!IsConnected) + throw new InvalidOperationException("Export of key material unavailable before handshake completion"); + + /* + * TODO[tls13] Introduce a TlsExporter interface? Avoid calculating (early) exporter + * secret(s) unless the peer actually uses it. + */ + SecurityParameters sp = SecurityParameters; + + if (!sp.IsExtendedMasterSecret) + { + /* + * RFC 7627 5.4. If a client or server chooses to continue with a full handshake without + * the extended master secret extension, [..] the client or server MUST NOT export any + * key material based on the new master secret for any subsequent application-level + * authentication. In particular, it MUST disable [RFC5705] [..]. + */ + throw new InvalidOperationException("Export of key material requires extended_master_secret"); + } + + if (TlsUtilities.IsTlsV13(sp.NegotiatedVersion)) + { + return ExportKeyingMaterial13(CheckExportSecret(sp.ExporterMasterSecret), sp.PrfCryptoHashAlgorithm, + asciiLabel, context, length); + } + + byte[] seed = TlsUtilities.CalculateExporterSeed(sp, context); + + return TlsUtilities.Prf(sp, CheckExportSecret(sp.MasterSecret), asciiLabel, seed, length).Extract(); + } + + protected virtual byte[] ExportKeyingMaterial13(TlsSecret secret, int cryptoHashAlgorithm, string asciiLabel, + byte[] context, int length) + { + if (null == context) + { + context = TlsUtilities.EmptyBytes; + } + else if (!TlsUtilities.IsValidUint16(context.Length)) + { + throw new ArgumentException("must have length less than 2^16 (or be null)", "context"); + } + + TlsHash exporterHash = Crypto.CreateHash(cryptoHashAlgorithm); + byte[] emptyTranscriptHash = exporterHash.CalculateHash(); + + TlsSecret exporterSecret = TlsUtilities.DeriveSecret(SecurityParameters, secret, asciiLabel, + emptyTranscriptHash); + + byte[] exporterContext = emptyTranscriptHash; + if (context.Length > 0) + { + exporterHash.Update(context, 0, context.Length); + exporterContext = exporterHash.CalculateHash(); + } + + return TlsCryptoUtilities + .HkdfExpandLabel(exporterSecret, cryptoHashAlgorithm, "exporter", exporterContext, length).Extract(); + } + + protected virtual TlsSecret CheckEarlyExportSecret(TlsSecret secret) + { + if (null == secret) + { + // TODO[tls13] For symmetry with normal export, ideally available for NotifyHandshakeBeginning() only + //throw new InvalidOperationException("Export of early key material only available from NotifyHandshakeBeginning()"); + throw new InvalidOperationException("Export of early key material not available for this handshake"); + } + return secret; + } + + protected virtual TlsSecret CheckExportSecret(TlsSecret secret) + { + if (null == secret) + throw new InvalidOperationException( + "Export of key material only available from NotifyHandshakeComplete()"); + + return secret; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsContext.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsContext.cs.meta new file mode 100644 index 000000000..6019b6a48 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a0e723f741842149a56a0c867090f42 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsKeyExchange.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsKeyExchange.cs new file mode 100644 index 000000000..7c9989f42 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsKeyExchange.cs @@ -0,0 +1,94 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Base class for supporting a TLS key exchange implementation. + public abstract class AbstractTlsKeyExchange + : TlsKeyExchange + { + protected readonly int m_keyExchange; + + protected TlsContext m_context; + + protected AbstractTlsKeyExchange(int keyExchange) + { + this.m_keyExchange = keyExchange; + } + + public virtual void Init(TlsContext context) + { + this.m_context = context; + } + + public abstract void SkipServerCredentials(); + + public abstract void ProcessServerCredentials(TlsCredentials serverCredentials); + + public virtual void ProcessServerCertificate(Certificate serverCertificate) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual bool RequiresServerKeyExchange + { + get { return false; } + } + + public virtual byte[] GenerateServerKeyExchange() + { + if (RequiresServerKeyExchange) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return null; + } + + public virtual void SkipServerKeyExchange() + { + if (RequiresServerKeyExchange) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public virtual void ProcessServerKeyExchange(Stream input) + { + if (!RequiresServerKeyExchange) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public virtual short[] GetClientCertificateTypes() + { + return null; + } + + public virtual void SkipClientCredentials() + { + } + + public abstract void ProcessClientCredentials(TlsCredentials clientCredentials); + + public virtual void ProcessClientCertificate(Certificate clientCertificate) + { + } + + public abstract void GenerateClientKeyExchange(Stream output); + + public virtual void ProcessClientKeyExchange(Stream input) + { + // Key exchange implementation MUST support client key exchange + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual bool RequiresCertificateVerify + { + get { return true; } + } + + public abstract TlsSecret GeneratePreMasterSecret(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsKeyExchange.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsKeyExchange.cs.meta new file mode 100644 index 000000000..fcf184945 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsKeyExchange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71e571fbcdb3bc54eaebe0f3bcd8efa4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsKeyExchangeFactory.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsKeyExchangeFactory.cs new file mode 100644 index 000000000..1ebcda4b8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsKeyExchangeFactory.cs @@ -0,0 +1,94 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Base class for supporting a TLS key exchange factory implementation. + public abstract class AbstractTlsKeyExchangeFactory + : TlsKeyExchangeFactory + { + public virtual TlsKeyExchange CreateDHKeyExchange(int keyExchange) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual TlsKeyExchange CreateDHanonKeyExchangeClient(int keyExchange, TlsDHGroupVerifier dhGroupVerifier) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual TlsKeyExchange CreateDHanonKeyExchangeServer(int keyExchange, TlsDHConfig dhConfig) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual TlsKeyExchange CreateDheKeyExchangeClient(int keyExchange, TlsDHGroupVerifier dhGroupVerifier) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual TlsKeyExchange CreateDheKeyExchangeServer(int keyExchange, TlsDHConfig dhConfig) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual TlsKeyExchange CreateECDHKeyExchange(int keyExchange) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual TlsKeyExchange CreateECDHanonKeyExchangeClient(int keyExchange) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual TlsKeyExchange CreateECDHanonKeyExchangeServer(int keyExchange, TlsECConfig ecConfig) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual TlsKeyExchange CreateECDheKeyExchangeClient(int keyExchange) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual TlsKeyExchange CreateECDheKeyExchangeServer(int keyExchange, TlsECConfig ecConfig) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual TlsKeyExchange CreatePskKeyExchangeClient(int keyExchange, TlsPskIdentity pskIdentity, + TlsDHGroupVerifier dhGroupVerifier) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual TlsKeyExchange CreatePskKeyExchangeServer(int keyExchange, + TlsPskIdentityManager pskIdentityManager, TlsDHConfig dhConfig, TlsECConfig ecConfig) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual TlsKeyExchange CreateRsaKeyExchange(int keyExchange) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual TlsKeyExchange CreateSrpKeyExchangeClient(int keyExchange, TlsSrpIdentity srpIdentity, + TlsSrpConfigVerifier srpConfigVerifier) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual TlsKeyExchange CreateSrpKeyExchangeServer(int keyExchange, + TlsSrpLoginParameters loginParameters) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsKeyExchangeFactory.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsKeyExchangeFactory.cs.meta new file mode 100644 index 000000000..266c7170e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsKeyExchangeFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3a9336eaeaae34d40ace755bb025ac9d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsPeer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsPeer.cs new file mode 100644 index 000000000..65bd820a7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsPeer.cs @@ -0,0 +1,167 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Base class for a TLS client or server. + public abstract class AbstractTlsPeer + : TlsPeer + { + private readonly TlsCrypto m_crypto; + + private volatile TlsCloseable m_closeHandle; + + protected AbstractTlsPeer(TlsCrypto crypto) + { + this.m_crypto = crypto; + } + + /// Get the values that are supported by this peer. + /// + /// WARNING: Mixing DTLS and TLS versions in the returned array is currently NOT supported. Use a separate + /// (sub-)class for each case. + /// + /// an array of supported values. + protected virtual ProtocolVersion[] GetSupportedVersions() + { + return ProtocolVersion.TLSv13.DownTo(ProtocolVersion.TLSv12); + } + + protected abstract int[] GetSupportedCipherSuites(); + + /// + public virtual void Cancel() + { + TlsCloseable closeHandle = this.m_closeHandle; + if (null != closeHandle) + { + closeHandle.Close(); + } + } + + public virtual TlsCrypto Crypto + { + get { return m_crypto; } + } + + public virtual void NotifyCloseHandle(TlsCloseable closeHandle) + { + this.m_closeHandle = closeHandle; + } + + public abstract ProtocolVersion[] GetProtocolVersions(); + + public abstract int[] GetCipherSuites(); + + /// + public virtual void NotifyHandshakeBeginning() + { + } + + public virtual int GetHandshakeTimeoutMillis() + { + return 0; + } + + public virtual bool AllowLegacyResumption() + { + return false; + } + + public virtual int GetMaxCertificateChainLength() + { + return 10; + } + + public virtual int GetMaxHandshakeMessageSize() + { + return 32768; + } + + public virtual short[] GetPskKeyExchangeModes() + { + return new short[]{ PskKeyExchangeMode.psk_dhe_ke }; + } + + public virtual bool RequiresCloseNotify() + { + return true; + } + + public virtual bool RequiresExtendedMasterSecret() + { + return false; + } + + public virtual bool ShouldCheckSigAlgOfPeerCerts() + { + return true; + } + + public virtual bool ShouldUseExtendedMasterSecret() + { + return true; + } + + public virtual bool ShouldUseExtendedPadding() + { + return false; + } + + public virtual bool ShouldUseGmtUnixTime() + { + /* + * draft-mathewson-no-gmtunixtime-00 2. For the reasons we discuss above, we recommend that + * TLS implementors MUST by default set the entire value the ClientHello.Random and + * ServerHello.Random fields, including gmt_unix_time, to a cryptographically random + * sequence. + */ + return false; + } + + /// + public virtual void NotifySecureRenegotiation(bool secureRenegotiation) + { + if (!secureRenegotiation) + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + + /// + public virtual TlsKeyExchangeFactory GetKeyExchangeFactory() + { + return new DefaultTlsKeyExchangeFactory(); + } + + public virtual void NotifyAlertRaised(short alertLevel, short alertDescription, string message, + Exception cause) + { + } + + public virtual void NotifyAlertReceived(short alertLevel, short alertDescription) + { + } + + /// + public virtual void NotifyHandshakeComplete() + { + } + + public virtual TlsHeartbeat GetHeartbeat() + { + return null; + } + + public virtual short GetHeartbeatPolicy() + { + return HeartbeatMode.peer_not_allowed_to_send; + } + + public virtual bool IgnoreCorruptDtlsRecords => false; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsPeer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsPeer.cs.meta new file mode 100644 index 000000000..4deb1fc94 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsPeer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98cb4dd632ab72f48a86a5fb31571547 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsServer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsServer.cs new file mode 100644 index 000000000..2263c60fe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsServer.cs @@ -0,0 +1,658 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Base class for a TLS server. + public abstract class AbstractTlsServer + : AbstractTlsPeer, TlsServer + { + protected TlsServerContext m_context; + protected ProtocolVersion[] m_protocolVersions; + protected int[] m_cipherSuites; + + protected int[] m_offeredCipherSuites; + protected IDictionary m_clientExtensions; + + protected bool m_encryptThenMACOffered; + protected short m_maxFragmentLengthOffered; + protected bool m_truncatedHMacOffered; + protected bool m_clientSentECPointFormats; + protected CertificateStatusRequest m_certificateStatusRequest; + protected IList m_statusRequestV2; + protected IList m_trustedCAKeys; + + protected int m_selectedCipherSuite; + protected IList m_clientProtocolNames; + protected ProtocolName m_selectedProtocolName; + + protected readonly IDictionary m_serverExtensions = new Dictionary(); + + public AbstractTlsServer(TlsCrypto crypto) + : base(crypto) + { + } + + protected virtual bool AllowCertificateStatus() + { + return true; + } + + protected virtual bool AllowEncryptThenMac() + { + return true; + } + + protected virtual bool AllowMultiCertStatus() + { + return false; + } + + protected virtual bool AllowTruncatedHmac() + { + return false; + } + + protected virtual bool AllowTrustedCAIndication() + { + return false; + } + + protected virtual int GetMaximumNegotiableCurveBits() + { + int[] clientSupportedGroups = m_context.SecurityParameters.ClientSupportedGroups; + if (clientSupportedGroups == null) + { + /* + * RFC 4492 4. A client that proposes ECC cipher suites may choose not to include these + * extensions. In this case, the server is free to choose any one of the elliptic curves + * or point formats [...]. + */ + return NamedGroup.GetMaximumCurveBits(); + } + + int maxBits = 0; + for (int i = 0; i < clientSupportedGroups.Length; ++i) + { + maxBits = System.Math.Max(maxBits, NamedGroup.GetCurveBits(clientSupportedGroups[i])); + } + return maxBits; + } + + protected virtual int GetMaximumNegotiableFiniteFieldBits() + { + int[] clientSupportedGroups = m_context.SecurityParameters.ClientSupportedGroups; + if (clientSupportedGroups == null) + { + return NamedGroup.GetMaximumFiniteFieldBits(); + } + + int maxBits = 0; + for (int i = 0; i < clientSupportedGroups.Length; ++i) + { + maxBits = System.Math.Max(maxBits, NamedGroup.GetFiniteFieldBits(clientSupportedGroups[i])); + } + return maxBits; + } + + protected virtual IList GetProtocolNames() + { + return null; + } + + protected virtual bool IsSelectableCipherSuite(int cipherSuite, int availCurveBits, int availFiniteFieldBits, + IList sigAlgs) + { + // TODO[tls13] The version check should be separated out (eventually select ciphersuite before version) + return TlsUtilities.IsValidVersionForCipherSuite(cipherSuite, m_context.ServerVersion) + && availCurveBits >= TlsEccUtilities.GetMinimumCurveBits(cipherSuite) + && availFiniteFieldBits >= TlsDHUtilities.GetMinimumFiniteFieldBits(cipherSuite) + && TlsUtilities.IsValidCipherSuiteForSignatureAlgorithms(cipherSuite, sigAlgs); + } + + protected virtual bool PreferLocalCipherSuites() + { + return false; + } + + /// + protected virtual bool SelectCipherSuite(int cipherSuite) + { + this.m_selectedCipherSuite = cipherSuite; + return true; + } + + protected virtual int SelectDH(int minimumFiniteFieldBits) + { + int[] clientSupportedGroups = m_context.SecurityParameters.ClientSupportedGroups; + if (clientSupportedGroups == null) + return SelectDHDefault(minimumFiniteFieldBits); + + // Try to find a supported named group of the required size from the client's list. + for (int i = 0; i < clientSupportedGroups.Length; ++i) + { + int namedGroup = clientSupportedGroups[i]; + if (NamedGroup.GetFiniteFieldBits(namedGroup) >= minimumFiniteFieldBits) + return namedGroup; + } + + return -1; + } + + protected virtual int SelectDHDefault(int minimumFiniteFieldBits) + { + return minimumFiniteFieldBits <= 2048 ? NamedGroup.ffdhe2048 + : minimumFiniteFieldBits <= 3072 ? NamedGroup.ffdhe3072 + : minimumFiniteFieldBits <= 4096 ? NamedGroup.ffdhe4096 + : minimumFiniteFieldBits <= 6144 ? NamedGroup.ffdhe6144 + : minimumFiniteFieldBits <= 8192 ? NamedGroup.ffdhe8192 + : -1; + } + + protected virtual int SelectECDH(int minimumCurveBits) + { + int[] clientSupportedGroups = m_context.SecurityParameters.ClientSupportedGroups; + if (clientSupportedGroups == null) + return SelectECDHDefault(minimumCurveBits); + + // Try to find a supported named group of the required size from the client's list. + for (int i = 0; i < clientSupportedGroups.Length; ++i) + { + int namedGroup = clientSupportedGroups[i]; + if (NamedGroup.GetCurveBits(namedGroup) >= minimumCurveBits) + return namedGroup; + } + + return -1; + } + + protected virtual int SelectECDHDefault(int minimumCurveBits) + { + return minimumCurveBits <= 256 ? NamedGroup.secp256r1 + : minimumCurveBits <= 384 ? NamedGroup.secp384r1 + : minimumCurveBits <= 521 ? NamedGroup.secp521r1 + : -1; + } + + protected virtual ProtocolName SelectProtocolName() + { + IList serverProtocolNames = GetProtocolNames(); + if (null == serverProtocolNames || serverProtocolNames.Count < 1) + return null; + + ProtocolName result = SelectProtocolName(m_clientProtocolNames, serverProtocolNames); + if (null == result) + throw new TlsFatalAlert(AlertDescription.no_application_protocol); + + return result; + } + + protected virtual ProtocolName SelectProtocolName(IList clientProtocolNames, + IList serverProtocolNames) + { + foreach (ProtocolName serverProtocolName in serverProtocolNames) + { + if (clientProtocolNames.Contains(serverProtocolName)) + return serverProtocolName; + } + return null; + } + + protected virtual bool ShouldSelectProtocolNameEarly() + { + return true; + } + + protected virtual bool PreferLocalClientCertificateTypes() + { + return false; + } + + protected virtual short[] GetAllowedClientCertificateTypes() + { + return null; + } + + public virtual void Init(TlsServerContext context) + { + this.m_context = context; + + this.m_protocolVersions = GetSupportedVersions(); + this.m_cipherSuites = GetSupportedCipherSuites(); + } + + public override ProtocolVersion[] GetProtocolVersions() + { + return m_protocolVersions; + } + + public override int[] GetCipherSuites() + { + return m_cipherSuites; + } + + public override void NotifyHandshakeBeginning() + { + base.NotifyHandshakeBeginning(); + + this.m_offeredCipherSuites = null; + this.m_clientExtensions = null; + this.m_encryptThenMACOffered = false; + this.m_maxFragmentLengthOffered = 0; + this.m_truncatedHMacOffered = false; + this.m_clientSentECPointFormats = false; + this.m_certificateStatusRequest = null; + this.m_selectedCipherSuite = -1; + this.m_selectedProtocolName = null; + this.m_serverExtensions.Clear(); + } + + public virtual TlsSession GetSessionToResume(byte[] sessionID) + { + return null; + } + + public virtual byte[] GetNewSessionID() + { + return null; + } + + public virtual TlsPskExternal GetExternalPsk(IList identities) + { + return null; + } + + public virtual void NotifySession(TlsSession session) + { + } + + public virtual void NotifyClientVersion(ProtocolVersion clientVersion) + { + } + + public virtual void NotifyFallback(bool isFallback) + { + /* + * RFC 7507 3. If TLS_FALLBACK_SCSV appears in ClientHello.cipher_suites and the highest + * protocol version supported by the server is higher than the version indicated in + * ClientHello.client_version, the server MUST respond with a fatal inappropriate_fallback + * alert [..]. + */ + if (isFallback) + { + ProtocolVersion[] serverVersions = GetProtocolVersions(); + ProtocolVersion clientVersion = m_context.ClientVersion; + + ProtocolVersion latestServerVersion; + if (clientVersion.IsTls) + { + latestServerVersion = ProtocolVersion.GetLatestTls(serverVersions); + } + else if (clientVersion.IsDtls) + { + latestServerVersion = ProtocolVersion.GetLatestDtls(serverVersions); + } + else + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + if (null != latestServerVersion && latestServerVersion.IsLaterVersionOf(clientVersion)) + { + throw new TlsFatalAlert(AlertDescription.inappropriate_fallback); + } + } + } + + public virtual void NotifyOfferedCipherSuites(int[] offeredCipherSuites) + { + this.m_offeredCipherSuites = offeredCipherSuites; + } + + public virtual void ProcessClientExtensions(IDictionary clientExtensions) + { + this.m_clientExtensions = clientExtensions; + + if (null != clientExtensions) + { + this.m_clientProtocolNames = TlsExtensionsUtilities.GetAlpnExtensionClient(clientExtensions); + + if (ShouldSelectProtocolNameEarly()) + { + if (null != m_clientProtocolNames && m_clientProtocolNames.Count > 0) + { + this.m_selectedProtocolName = SelectProtocolName(); + } + } + + // TODO[tls13] Don't need these if we have negotiated (D)TLS 1.3+ + { + this.m_encryptThenMACOffered = TlsExtensionsUtilities.HasEncryptThenMacExtension(clientExtensions); + this.m_truncatedHMacOffered = TlsExtensionsUtilities.HasTruncatedHmacExtension(clientExtensions); + this.m_statusRequestV2 = TlsExtensionsUtilities.GetStatusRequestV2Extension(clientExtensions); + this.m_trustedCAKeys = TlsExtensionsUtilities.GetTrustedCAKeysExtensionClient(clientExtensions); + + // We only support uncompressed format, this is just to validate the extension, and note its presence. + this.m_clientSentECPointFormats = + null != TlsExtensionsUtilities.GetSupportedPointFormatsExtension(clientExtensions); + } + + this.m_certificateStatusRequest = TlsExtensionsUtilities.GetStatusRequestExtension(clientExtensions); + + this.m_maxFragmentLengthOffered = TlsExtensionsUtilities.GetMaxFragmentLengthExtension(clientExtensions); + if (m_maxFragmentLengthOffered >= 0 && !MaxFragmentLength.IsValid(m_maxFragmentLengthOffered)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + } + + public virtual ProtocolVersion GetServerVersion() + { + ProtocolVersion[] serverVersions = GetProtocolVersions(); + ProtocolVersion[] clientVersions = m_context.ClientSupportedVersions; + + foreach (ProtocolVersion clientVersion in clientVersions) + { + if (ProtocolVersion.Contains(serverVersions, clientVersion)) + return clientVersion; + } + + throw new TlsFatalAlert(AlertDescription.protocol_version); + } + + public virtual int[] GetSupportedGroups() + { + // TODO[tls13] The rest of this class assumes all named groups are supported + return new int[]{ NamedGroup.x25519, NamedGroup.x448, NamedGroup.secp256r1, NamedGroup.secp384r1, + NamedGroup.ffdhe2048, NamedGroup.ffdhe3072, NamedGroup.ffdhe4096 }; + } + + public virtual int GetSelectedCipherSuite() + { + SecurityParameters securityParameters = m_context.SecurityParameters; + ProtocolVersion negotiatedVersion = securityParameters.NegotiatedVersion; + + if (TlsUtilities.IsTlsV13(negotiatedVersion)) + { + int commonCipherSuite13 = TlsUtilities.GetCommonCipherSuite13(negotiatedVersion, m_offeredCipherSuites, + GetCipherSuites(), PreferLocalCipherSuites()); + + if (commonCipherSuite13 >= 0 && SelectCipherSuite(commonCipherSuite13)) + { + return commonCipherSuite13; + } + } + else + { + /* + * RFC 5246 7.4.3. In order to negotiate correctly, the server MUST check any candidate + * cipher suites against the "signature_algorithms" extension before selecting them. This is + * somewhat inelegant but is a compromise designed to minimize changes to the original + * cipher suite design. + */ + var sigAlgs = TlsUtilities.GetUsableSignatureAlgorithms(securityParameters.ClientSigAlgs); + + /* + * RFC 4429 5.1. A server that receives a ClientHello containing one or both of these + * extensions MUST use the client's enumerated capabilities to guide its selection of an + * appropriate cipher suite. One of the proposed ECC cipher suites must be negotiated only + * if the server can successfully complete the handshake while using the curves and point + * formats supported by the client [...]. + */ + int availCurveBits = GetMaximumNegotiableCurveBits(); + int availFiniteFieldBits = GetMaximumNegotiableFiniteFieldBits(); + + int[] cipherSuites = TlsUtilities.GetCommonCipherSuites(m_offeredCipherSuites, GetCipherSuites(), + PreferLocalCipherSuites()); + + for (int i = 0; i < cipherSuites.Length; ++i) + { + int cipherSuite = cipherSuites[i]; + if (IsSelectableCipherSuite(cipherSuite, availCurveBits, availFiniteFieldBits, sigAlgs) + && SelectCipherSuite(cipherSuite)) + { + return cipherSuite; + } + } + } + + throw new TlsFatalAlert(AlertDescription.handshake_failure, "No selectable cipher suite"); + } + + // IDictionary is (Int32 -> byte[]) + public virtual IDictionary GetServerExtensions() + { + bool isTlsV13 = TlsUtilities.IsTlsV13(m_context); + + if (isTlsV13) + { + if (null != m_certificateStatusRequest && AllowCertificateStatus()) + { + /* + * TODO[tls13] RFC 8446 4.4.2.1. OCSP Status and SCT Extensions. + * + * OCSP information is carried in an extension for a CertificateEntry. + */ + } + } + else + { + if (m_encryptThenMACOffered && AllowEncryptThenMac()) + { + /* + * RFC 7366 3. If a server receives an encrypt-then-MAC request extension from a client + * and then selects a stream or Authenticated Encryption with Associated Data (AEAD) + * ciphersuite, it MUST NOT send an encrypt-then-MAC response extension back to the + * client. + */ + if (TlsUtilities.IsBlockCipherSuite(m_selectedCipherSuite)) + { + TlsExtensionsUtilities.AddEncryptThenMacExtension(m_serverExtensions); + } + } + + if (m_truncatedHMacOffered && AllowTruncatedHmac()) + { + TlsExtensionsUtilities.AddTruncatedHmacExtension(m_serverExtensions); + } + + if (m_clientSentECPointFormats && TlsEccUtilities.IsEccCipherSuite(m_selectedCipherSuite)) + { + /* + * RFC 4492 5.2. A server that selects an ECC cipher suite in response to a ClientHello + * message including a Supported Point Formats Extension appends this extension (along + * with others) to its ServerHello message, enumerating the point formats it can parse. + */ + TlsExtensionsUtilities.AddSupportedPointFormatsExtension(m_serverExtensions, + new short[]{ ECPointFormat.uncompressed }); + } + + // TODO[tls13] See RFC 8446 4.4.2.1 + if (null != m_statusRequestV2 && AllowMultiCertStatus()) + { + /* + * RFC 6961 2.2. If a server returns a "CertificateStatus" message in response to a + * "status_request_v2" request, then the server MUST have included an extension of type + * "status_request_v2" with empty "extension_data" in the extended server hello.. + */ + TlsExtensionsUtilities.AddEmptyExtensionData(m_serverExtensions, ExtensionType.status_request_v2); + } + else if (null != this.m_certificateStatusRequest && AllowCertificateStatus()) + { + /* + * RFC 6066 8. If a server returns a "CertificateStatus" message, then the server MUST + * have included an extension of type "status_request" with empty "extension_data" in + * the extended server hello. + */ + TlsExtensionsUtilities.AddEmptyExtensionData(m_serverExtensions, ExtensionType.status_request); + } + + if (null != m_trustedCAKeys && AllowTrustedCAIndication()) + { + TlsExtensionsUtilities.AddTrustedCAKeysExtensionServer(m_serverExtensions); + } + } + + if (m_maxFragmentLengthOffered >= 0 && MaxFragmentLength.IsValid(m_maxFragmentLengthOffered)) + { + TlsExtensionsUtilities.AddMaxFragmentLengthExtension(m_serverExtensions, m_maxFragmentLengthOffered); + } + + // RFC 7250 4.2 for server_certificate_type + short[] serverCertTypes = TlsExtensionsUtilities.GetServerCertificateTypeExtensionClient( + m_clientExtensions); + if (serverCertTypes != null) + { + TlsCredentials credentials = GetCredentials(); + + if (credentials == null || !Arrays.Contains(serverCertTypes, credentials.Certificate.CertificateType)) + { + // outcome 2: we support the extension but have no common types + throw new TlsFatalAlert(AlertDescription.unsupported_certificate); + } + + // outcome 3: we support the extension and have a common type + TlsExtensionsUtilities.AddServerCertificateTypeExtensionServer(m_serverExtensions, + credentials.Certificate.CertificateType); + } + + // RFC 7250 4.2 for client_certificate_type + short[] remoteClientCertTypes = TlsExtensionsUtilities.GetClientCertificateTypeExtensionClient( + m_clientExtensions); + if (remoteClientCertTypes != null) + { + short[] localClientCertTypes = GetAllowedClientCertificateTypes(); + if (localClientCertTypes != null) + { + short[] preferredTypes; + short[] nonPreferredTypes; + if (PreferLocalClientCertificateTypes()) + { + preferredTypes = localClientCertTypes; + nonPreferredTypes = remoteClientCertTypes; + } + else + { + preferredTypes = remoteClientCertTypes; + nonPreferredTypes = localClientCertTypes; + } + + short selectedType = -1; + for (int i = 0; i < preferredTypes.Length; i++) + { + if (Arrays.Contains(nonPreferredTypes, preferredTypes[i])) + { + selectedType = preferredTypes[i]; + break; + } + } + + if (selectedType == -1) + { + // outcome 2: we support the extension but have no common types + throw new TlsFatalAlert(AlertDescription.unsupported_certificate); + } + + // outcome 3: we support the extension and have a common type + TlsExtensionsUtilities.AddClientCertificateTypeExtensionServer(m_serverExtensions, selectedType); + } // else outcome 1: we don't support the extension + } + + return m_serverExtensions; + } + + public virtual void GetServerExtensionsForConnection(IDictionary serverExtensions) + { + if (!ShouldSelectProtocolNameEarly()) + { + if (null != m_clientProtocolNames && m_clientProtocolNames.Count > 0) + { + this.m_selectedProtocolName = SelectProtocolName(); + } + } + + /* + * RFC 7301 3.1. When session resumption or session tickets [...] are used, the previous + * contents of this extension are irrelevant, and only the values in the new handshake + * messages are considered. + */ + if (null == m_selectedProtocolName) + { + serverExtensions.Remove(ExtensionType.application_layer_protocol_negotiation); + } + else + { + TlsExtensionsUtilities.AddAlpnExtensionServer(serverExtensions, m_selectedProtocolName); + } + } + + public virtual IList GetServerSupplementalData() + { + return null; + } + + public abstract TlsCredentials GetCredentials(); + + public virtual CertificateStatus GetCertificateStatus() + { + return null; + } + + public virtual CertificateRequest GetCertificateRequest() + { + return null; + } + + public virtual TlsPskIdentityManager GetPskIdentityManager() + { + return null; + } + + public virtual TlsSrpLoginParameters GetSrpLoginParameters() + { + return null; + } + + public virtual TlsDHConfig GetDHConfig() + { + int minimumFiniteFieldBits = TlsDHUtilities.GetMinimumFiniteFieldBits(m_selectedCipherSuite); + int namedGroup = SelectDH(minimumFiniteFieldBits); + return TlsDHUtilities.CreateNamedDHConfig(m_context, namedGroup); + } + + public virtual TlsECConfig GetECDHConfig() + { + int minimumCurveBits = TlsEccUtilities.GetMinimumCurveBits(m_selectedCipherSuite); + int namedGroup = SelectECDH(minimumCurveBits); + return TlsEccUtilities.CreateNamedECConfig(m_context, namedGroup); + } + + public virtual void ProcessClientSupplementalData(IList clientSupplementalData) + { + if (clientSupplementalData != null) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public virtual void NotifyClientCertificate(Certificate clientCertificate) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual NewSessionTicket GetNewSessionTicket() + { + /* + * RFC 5077 3.3. If the server determines that it does not want to include a ticket after it + * has included the SessionTicket extension in the ServerHello, then it sends a zero-length + * ticket in the NewSessionTicket handshake message. + */ + return new NewSessionTicket(0L, TlsUtilities.EmptyBytes); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsServer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsServer.cs.meta new file mode 100644 index 000000000..2bb781419 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AbstractTlsServer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b71b0eb5769d3f54e8ede6d1d170c2e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AlertDescription.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AlertDescription.cs new file mode 100644 index 000000000..7eefece79 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AlertDescription.cs @@ -0,0 +1,327 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 5246 7.2. + public abstract class AlertDescription + { + /// This message notifies the recipient that the sender will not send any more messages on this + /// connection. + /// + /// Note that as of TLS 1.1, failure to properly close a connection no longer requires that a session not be + /// resumed. This is a change from TLS 1.0 ("The session becomes unresumable if any connection is terminated + /// without proper close_notify messages with level equal to warning.") to conform with widespread + /// implementation practice. + /// + public const short close_notify = 0; + + /// An inappropriate message was received. + /// + /// This alert is always fatal and should never be observed in communication between proper implementations. + /// + public const short unexpected_message = 10; + + /// This alert is returned if a record is received with an incorrect MAC. + /// + /// This alert also MUST be returned if an alert is sent because a TLSCiphertext decrypted in an invalid way: + /// either it wasn't an even multiple of the block length, or its padding values, when checked, weren't + /// correct. This message is always fatal and should never be observed in communication between proper + /// implementations (except when messages were corrupted in the network). + /// + public const short bad_record_mac = 20; + + /// + /// This alert was used in some earlier versions of TLS, and may have permitted certain attacks against the CBC + /// mode [CBCATT]. It MUST NOT be sent by compliant implementations. + /// + public const short decryption_failed = 21; + + /// A TLSCiphertext record was received that had a length more than 2^14+2048 bytes, or a record + /// decrypted to a TLSCompressed record with more than 2^14+1024 bytes. + /// + /// This message is always fatal and should never be observed in communication between proper implementations + /// (except when messages were corrupted in the network). + /// + public const short record_overflow = 22; + + /// The decompression function received improper input (e.g., data that would expand to excessive + /// length). + /// + /// This message is always fatal and should never be observed in communication between proper implementations. + /// + public const short decompression_failure = 30; + + /// Reception of a handshake_failure alert message indicates that the sender was unable to negotiate + /// an acceptable set of security parameters given the options available. + /// + /// This is a fatal error. + /// + public const short handshake_failure = 40; + + /// + /// This alert was used in SSLv3 but not any version of TLS. It MUST NOT be sent by compliant implementations. + /// + public const short no_certificate = 41; + + /// A certificate was corrupt, contained signatures that did not verify correctly, etc. + public const short bad_certificate = 42; + + /// A certificate was of an unsupported type. + public const short unsupported_certificate = 43; + + /// A certificate was revoked by its signer. + public const short certificate_revoked = 44; + + /// A certificate has expired or is not currently valid. + public const short certificate_expired = 45; + + /// Some other (unspecified) issue arose in processing the certificate, rendering it unacceptable. + /// + public const short certificate_unknown = 46; + + /// A field in the handshake was out of range or inconsistent with other fields. + /// + /// This message is always fatal. + /// + public const short illegal_parameter = 47; + + /// A valid certificate chain or partial chain was received, but the certificate was not accepted + /// because the CA certificate could not be located or couldn't be matched with a known, trusted CA. + /// + /// This message is always fatal. + /// + public const short unknown_ca = 48; + + /// A valid certificate was received, but when access control was applied, the sender decided not to + /// proceed with negotiation. + /// + /// This message is always fatal. + /// + public const short access_denied = 49; + + /// A message could not be decoded because some field was out of the specified range or the length of + /// the message was incorrect. + /// + /// This message is always fatal and should never be observed in communication between proper + /// implementations (except when messages were corrupted in the network). + /// + public const short decode_error = 50; + + /// A handshake cryptographic operation failed, including being unable to correctly verify a signature + /// or validate a Finished message. + /// + /// This message is always fatal. + /// + public const short decrypt_error = 51; + + /// + /// This alert was used in some earlier versions of TLS. It MUST NOT be sent by compliant implementations. + /// + public const short export_restriction = 60; + + /// The protocol version the client has attempted to negotiate is recognized but not supported. + /// + /// + /// (For example, old protocol versions might be avoided for security reasons.) This message is always fatal. + /// + public const short protocol_version = 70; + + /// Returned instead of handshake_failure when a negotiation has failed specifically because the + /// server requires ciphers more secure than those supported by the client. + /// + /// This message is always fatal. + /// + public const short insufficient_security = 71; + + /// An internal error unrelated to the peer or the correctness of the protocol (such as a memory + /// allocation failure) makes it impossible to continue. + /// + /// This message is always fatal. + /// + public const short internal_error = 80; + + /// This handshake is being canceled for some reason unrelated to a protocol failure. + /// + /// If the user cancels an operation after the handshake is complete, just closing the connection by sending a + /// close_notify is more appropriate. This alert should be followed by a close_notify. This message is + /// generally a warning. + /// + public const short user_canceled = 90; + + /// Sent by the client in response to a hello request or by the server in response to a client hello + /// after initial handshaking. + /// + /// Either of these would normally lead to renegotiation; when that is not appropriate, the recipient should + /// respond with this alert. At that point, the original requester can decide whether to proceed with the + /// connection. One case where this would be appropriate is where a server has spawned a process to satisfy a + /// request; the process might receive security parameters (key length, authentication, etc.) at startup, and + /// it might be difficult to communicate changes to these parameters after that point. This message is always a + /// warning. + /// + public const short no_renegotiation = 100; + + /// Sent by clients that receive an extended server hello containing an extension that they did not + /// put in the corresponding client hello. + /// + /// This message is always fatal. + /// + public const short unsupported_extension = 110; + + /* + * RFC 3546 + */ + + /// This alert is sent by servers who are unable to retrieve a certificate chain from the URL supplied + /// by the client(see Section 3.3). + /// + /// This message MAY be fatal - for example if client authentication is required by the server for the + /// handshake to continue and the server is unable to retrieve the certificate chain, it may send a fatal + /// alert. + /// + public const short certificate_unobtainable = 111; + + /// This alert is sent by servers that receive a server_name extension request, but do not recognize + /// the server name. + /// + /// This message MAY be fatal. + /// + public const short unrecognized_name = 112; + + /// This alert is sent by clients that receive an invalid certificate status response (see Section 3.6 + /// ). + /// + /// This message is always fatal. + /// + public const short bad_certificate_status_response = 113; + + /// This alert is sent by servers when a certificate hash does not match a client provided + /// certificate_hash. + /// + /// This message is always fatal. + /// + public const short bad_certificate_hash_value = 114; + + /* + * RFC 4279 + */ + + /// If the server does not recognize the PSK identity, it MAY respond with an "unknown_psk_identity" + /// alert message. + public const short unknown_psk_identity = 115; + + /* + * RFC 7301 + */ + + /// In the event that the server supports no protocols that the client advertises, then the server + /// SHALL respond with a fatal "no_application_protocol" alert. + public const short no_application_protocol = 120; + + /* + * RFC 7507 + */ + + /// If TLS_FALLBACK_SCSV appears in ClientHello.cipher_suites and the highest protocol version + /// supported by the server is higher than the version indicated in ClientHello.client_version, the server MUST + /// respond with a fatal inappropriate_fallback alert[..]. + public const short inappropriate_fallback = 86; + + /* + * RFC 8446 + */ + + /// Sent by endpoints that receive a handshake message not containing an extension that is mandatory + /// to send for the offered TLS version or other negotiated parameters. + public const short missing_extension = 109; + + /// Sent by servers when a client certificate is desired but none was provided by the client. + /// + public const short certificate_required = 116; + + public static string GetName(short alertDescription) + { + switch (alertDescription) + { + case close_notify: + return "close_notify"; + case unexpected_message: + return "unexpected_message"; + case bad_record_mac: + return "bad_record_mac"; + case decryption_failed: + return "decryption_failed"; + case record_overflow: + return "record_overflow"; + case decompression_failure: + return "decompression_failure"; + case handshake_failure: + return "handshake_failure"; + case no_certificate: + return "no_certificate"; + case bad_certificate: + return "bad_certificate"; + case unsupported_certificate: + return "unsupported_certificate"; + case certificate_revoked: + return "certificate_revoked"; + case certificate_expired: + return "certificate_expired"; + case certificate_unknown: + return "certificate_unknown"; + case illegal_parameter: + return "illegal_parameter"; + case unknown_ca: + return "unknown_ca"; + case access_denied: + return "access_denied"; + case decode_error: + return "decode_error"; + case decrypt_error: + return "decrypt_error"; + case export_restriction: + return "export_restriction"; + case protocol_version: + return "protocol_version"; + case insufficient_security: + return "insufficient_security"; + case internal_error: + return "internal_error"; + case user_canceled: + return "user_canceled"; + case no_renegotiation: + return "no_renegotiation"; + case unsupported_extension: + return "unsupported_extension"; + case certificate_unobtainable: + return "certificate_unobtainable"; + case unrecognized_name: + return "unrecognized_name"; + case bad_certificate_status_response: + return "bad_certificate_status_response"; + case bad_certificate_hash_value: + return "bad_certificate_hash_value"; + case unknown_psk_identity: + return "unknown_psk_identity"; + case no_application_protocol: + return "no_application_protocol"; + case inappropriate_fallback: + return "inappropriate_fallback"; + case missing_extension: + return "missing_extension"; + case certificate_required: + return "certificate_required"; + default: + return "UNKNOWN"; + } + } + + public static string GetText(short alertDescription) + { + return GetName(alertDescription) + "(" + alertDescription + ")"; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AlertDescription.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AlertDescription.cs.meta new file mode 100644 index 000000000..f9776e564 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AlertDescription.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3a2505255561f804d9face696a7d5923 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AlertLevel.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AlertLevel.cs new file mode 100644 index 000000000..9f5f58197 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AlertLevel.cs @@ -0,0 +1,33 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 5246 7.2 + public abstract class AlertLevel + { + public const short warning = 1; + public const short fatal = 2; + + public static string GetName(short alertDescription) + { + switch (alertDescription) + { + case warning: + return "warning"; + case fatal: + return "fatal"; + default: + return "UNKNOWN"; + } + } + + public static string GetText(short alertDescription) + { + return GetName(alertDescription) + "(" + alertDescription + ")"; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AlertLevel.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AlertLevel.cs.meta new file mode 100644 index 000000000..e9f1e7387 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/AlertLevel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 80a9110c93088b84ca2cf1c27ddbaff8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/BasicTlsPskExternal.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/BasicTlsPskExternal.cs new file mode 100644 index 000000000..f3a320587 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/BasicTlsPskExternal.cs @@ -0,0 +1,46 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public class BasicTlsPskExternal + : TlsPskExternal + { + protected readonly byte[] m_identity; + protected readonly TlsSecret m_key; + protected readonly int m_prfAlgorithm; + + public BasicTlsPskExternal(byte[] identity, TlsSecret key) + : this(identity, key, Tls.PrfAlgorithm.tls13_hkdf_sha256) + { + } + + public BasicTlsPskExternal(byte[] identity, TlsSecret key, int prfAlgorithm) + { + this.m_identity = Arrays.Clone(identity); + this.m_key = key; + this.m_prfAlgorithm = prfAlgorithm; + } + + public virtual byte[] Identity + { + get { return m_identity; } + } + + public virtual TlsSecret Key + { + get { return m_key; } + } + + public virtual int PrfAlgorithm + { + get { return m_prfAlgorithm; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/BasicTlsPskExternal.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/BasicTlsPskExternal.cs.meta new file mode 100644 index 000000000..51717d491 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/BasicTlsPskExternal.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce39a0f4d47ebe6469e28fe78f37cd54 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/BasicTlsPskIdentity.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/BasicTlsPskIdentity.cs new file mode 100644 index 000000000..988702c94 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/BasicTlsPskIdentity.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// A basic PSK Identity holder. + public class BasicTlsPskIdentity + : TlsPskIdentity + { + protected readonly byte[] m_identity; + protected readonly byte[] m_psk; + + public BasicTlsPskIdentity(byte[] identity, byte[] psk) + { + this.m_identity = Arrays.Clone(identity); + this.m_psk = Arrays.Clone(psk); + } + + public BasicTlsPskIdentity(string identity, byte[] psk) + { + this.m_identity = Strings.ToUtf8ByteArray(identity); + this.m_psk = Arrays.Clone(psk); + } + + public virtual void SkipIdentityHint() + { + } + + public virtual void NotifyIdentityHint(byte[] psk_identity_hint) + { + } + + public virtual byte[] GetPskIdentity() + { + return m_identity; + } + + public byte[] GetPsk() + { + return Arrays.Clone(m_psk); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/BasicTlsPskIdentity.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/BasicTlsPskIdentity.cs.meta new file mode 100644 index 000000000..3e2fec6d3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/BasicTlsPskIdentity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f6cb8fe208ca2b4c81ba0f64184751a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/BasicTlsSrpIdentity.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/BasicTlsSrpIdentity.cs new file mode 100644 index 000000000..f7727bd65 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/BasicTlsSrpIdentity.cs @@ -0,0 +1,40 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// A basic SRP Identity holder. + public class BasicTlsSrpIdentity + : TlsSrpIdentity + { + protected readonly byte[] m_identity; + protected readonly byte[] m_password; + + public BasicTlsSrpIdentity(byte[] identity, byte[] password) + { + this.m_identity = Arrays.Clone(identity); + this.m_password = Arrays.Clone(password); + } + + public BasicTlsSrpIdentity(string identity, string password) + { + this.m_identity = Strings.ToUtf8ByteArray(identity); + this.m_password = Strings.ToUtf8ByteArray(password); + } + + public virtual byte[] GetSrpIdentity() + { + return m_identity; + } + + public virtual byte[] GetSrpPassword() + { + return m_password; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/BasicTlsSrpIdentity.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/BasicTlsSrpIdentity.cs.meta new file mode 100644 index 000000000..3ecf07452 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/BasicTlsSrpIdentity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5eb24435ba998a34da78e3d8e1ec29fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ByteQueue.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ByteQueue.cs new file mode 100644 index 000000000..c71c24677 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ByteQueue.cs @@ -0,0 +1,268 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// A queue for bytes. This file could be more optimized. + public sealed class ByteQueue + { + /// The smallest number which can be written as 2^x which is bigger than i. + private static int GetAllocationSize(int i) + { + return Integers.HighestOneBit((256 | i) << 1); + } + + /// The buffer where we store our data. + private byte[] m_databuf; + + /// How many bytes at the beginning of the buffer are skipped. + private int m_skipped = 0; + + /// How many bytes in the buffer are valid data. + private int m_available = 0; + + private bool m_readOnlyBuf = false; + + public ByteQueue() + : this(0) + { + } + + public ByteQueue(int capacity) + { + this.m_databuf = capacity == 0 ? TlsUtilities.EmptyBytes : new byte[capacity]; + } + + public ByteQueue(byte[] buf, int off, int len) + { + this.m_databuf = buf; + this.m_skipped = off; + this.m_available = len; + this.m_readOnlyBuf = true; + } + + /// Add some data to our buffer. + /// A byte-array to read data from. + /// How many bytes to skip at the beginning of the array. + /// How many bytes to read from the array. + public void AddData(byte[] buf, int off, int len) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + AddData(buf.AsSpan(off, len)); +#else + if (m_readOnlyBuf) + throw new InvalidOperationException("Cannot add data to read-only buffer"); + + if (m_available == 0) + { + if (len > m_databuf.Length) + { + int desiredSize = GetAllocationSize(len); + m_databuf = new byte[desiredSize]; + } + m_skipped = 0; + } + else if ((m_skipped + m_available + len) > m_databuf.Length) + { + int desiredSize = GetAllocationSize(m_available + len); + if (desiredSize > m_databuf.Length) + { + byte[] tmp = new byte[desiredSize]; + Array.Copy(m_databuf, m_skipped, tmp, 0, m_available); + m_databuf = tmp; + } + else + { + Array.Copy(m_databuf, m_skipped, m_databuf, 0, m_available); + } + m_skipped = 0; + } + + Array.Copy(buf, off, m_databuf, m_skipped + m_available, len); + m_available += len; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void AddData(ReadOnlySpan buffer) + { + if (m_readOnlyBuf) + throw new InvalidOperationException("Cannot add data to read-only buffer"); + + int len = buffer.Length; + if (m_available == 0) + { + if (len > m_databuf.Length) + { + int desiredSize = GetAllocationSize(len); + m_databuf = new byte[desiredSize]; + } + m_skipped = 0; + } + else if ((m_skipped + m_available + len) > m_databuf.Length) + { + int desiredSize = GetAllocationSize(m_available + len); + if (desiredSize > m_databuf.Length) + { + byte[] tmp = new byte[desiredSize]; + Array.Copy(m_databuf, m_skipped, tmp, 0, m_available); + m_databuf = tmp; + } + else + { + Array.Copy(m_databuf, m_skipped, m_databuf, 0, m_available); + } + m_skipped = 0; + } + + buffer.CopyTo(m_databuf.AsSpan(m_skipped + m_available)); + m_available += len; + } +#endif + + /// The number of bytes which are available in this buffer. + public int Available + { + get { return m_available; } + } + + /// Copy some bytes from the beginning of the data to the provided . + /// The to copy the bytes to. + /// How many bytes to copy. + public void CopyTo(Stream output, int length) + { + if (length > m_available) + throw new InvalidOperationException("Cannot copy " + length + " bytes, only got " + m_available); + + output.Write(m_databuf, m_skipped, length); + } + + /// Read data from the buffer. + /// The buffer where the read data will be copied to. + /// How many bytes to skip at the beginning of buf. + /// How many bytes to read at all. + /// How many bytes from our data to skip. + public void Read(byte[] buf, int offset, int len, int skip) + { + if ((buf.Length - offset) < len) + { + throw new ArgumentException("Buffer size of " + buf.Length + + " is too small for a read of " + len + " bytes"); + } + if ((m_available - skip) < len) + { + throw new InvalidOperationException("Not enough data to read"); + } + Array.Copy(m_databuf, m_skipped + skip, buf, offset, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Read(Span buffer, int skip) + { + if ((m_available - skip) < buffer.Length) + throw new InvalidOperationException("Not enough data to read"); + + buffer.CopyFrom(m_databuf.AsSpan(m_skipped + skip)); + } +#endif + + /// Return a over some bytes at the beginning of the data. + /// + /// How many bytes will be readable. + /// A over the data. + internal HandshakeMessageInput ReadHandshakeMessage(int length) + { + if (length > m_available) + throw new InvalidOperationException("Cannot read " + length + " bytes, only got " + m_available); + + int position = m_skipped; + + m_available -= length; + m_skipped += length; + + return new HandshakeMessageInput(m_databuf, position, length); + } + + public int ReadInt32() + { + if (m_available < 4) + throw new InvalidOperationException("Not enough data to read"); + + return TlsUtilities.ReadInt32(m_databuf, m_skipped); + } + + public int ReadUint16(int skip) + { + if (m_available < skip + 2) + throw new InvalidOperationException("Not enough data to read"); + + return TlsUtilities.ReadUint16(m_databuf, m_skipped + skip); + } + + /// Remove some bytes from our data from the beginning. + /// How many bytes to remove. + public void RemoveData(int i) + { + if (i > m_available) + throw new InvalidOperationException("Cannot remove " + i + " bytes, only got " + m_available); + + /* + * Skip the data. + */ + m_available -= i; + m_skipped += i; + } + + /// Remove data from the buffer. + /// The buffer where the removed data will be copied to. + /// How many bytes to skip at the beginning of buf. + /// How many bytes to read at all. + /// How many bytes from our data to skip. + public void RemoveData(byte[] buf, int off, int len, int skip) + { + Read(buf, off, len, skip); + RemoveData(skip + len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void RemoveData(Span buffer, int skip) + { + Read(buffer, skip); + RemoveData(skip + buffer.Length); + } +#endif + + public byte[] RemoveData(int len, int skip) + { + byte[] buf = new byte[len]; + RemoveData(buf, 0, len, skip); + return buf; + } + + public void Shrink() + { + if (m_available == 0) + { + m_databuf = TlsUtilities.EmptyBytes; + m_skipped = 0; + } + else + { + int desiredSize = GetAllocationSize(m_available); + if (desiredSize < m_databuf.Length) + { + byte[] tmp = new byte[desiredSize]; + Array.Copy(m_databuf, m_skipped, tmp, 0, m_available); + m_databuf = tmp; + m_skipped = 0; + } + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ByteQueue.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ByteQueue.cs.meta new file mode 100644 index 000000000..9d8083168 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ByteQueue.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b37c92d467d028b4eb34c1c68778fa8a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ByteQueueInputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ByteQueueInputStream.cs new file mode 100644 index 000000000..a179272ce --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ByteQueueInputStream.cs @@ -0,0 +1,76 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class ByteQueueInputStream + : BaseInputStream + { + private readonly ByteQueue m_buffer; + + public ByteQueueInputStream() + { + this.m_buffer = new ByteQueue(); + } + + public void AddBytes(byte[] buf) + { + m_buffer.AddData(buf, 0, buf.Length); + } + + public void AddBytes(byte[] buf, int bufOff, int bufLen) + { + m_buffer.AddData(buf, bufOff, bufLen); + } + + public int Peek(byte[] buf) + { + int bytesToRead = System.Math.Min(m_buffer.Available, buf.Length); + m_buffer.Read(buf, 0, bytesToRead, 0); + return bytesToRead; + } + + public override int Read(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + + int bytesToRead = System.Math.Min(m_buffer.Available, count); + m_buffer.RemoveData(buffer, offset, bytesToRead, 0); + return bytesToRead; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int Read(Span buffer) + { + int bytesToRead = System.Math.Min(m_buffer.Available, buffer.Length); + m_buffer.RemoveData(buffer[..bytesToRead], 0); + return bytesToRead; + } +#endif + + public override int ReadByte() + { + if (m_buffer.Available == 0) + return -1; + + return m_buffer.RemoveData(1, 0)[0]; + } + + public long Skip(long n) + { + int bytesToRemove = System.Math.Min((int)n, m_buffer.Available); + m_buffer.RemoveData(bytesToRemove); + return bytesToRemove; + } + + public int Available + { + get { return m_buffer.Available; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ByteQueueInputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ByteQueueInputStream.cs.meta new file mode 100644 index 000000000..b6c76749c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ByteQueueInputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eeea8a9089688d54297d8a29e984e5e7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ByteQueueOutputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ByteQueueOutputStream.cs new file mode 100644 index 000000000..138b43599 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ByteQueueOutputStream.cs @@ -0,0 +1,46 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// OutputStream based on a ByteQueue implementation. + public sealed class ByteQueueOutputStream + : BaseOutputStream + { + private readonly ByteQueue m_buffer; + + public ByteQueueOutputStream() + { + this.m_buffer = new ByteQueue(); + } + + public ByteQueue Buffer + { + get { return m_buffer; } + } + + public override void Write(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + + m_buffer.AddData(buffer, offset, count); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) + { + m_buffer.AddData(buffer); + } +#endif + + public override void WriteByte(byte value) + { + m_buffer.AddData(new byte[]{ value }, 0, 1); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ByteQueueOutputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ByteQueueOutputStream.cs.meta new file mode 100644 index 000000000..94d4ea064 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ByteQueueOutputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cbefd50f95714a349ae44de163b24b1d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CachedInformationType.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CachedInformationType.cs new file mode 100644 index 000000000..48160482b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CachedInformationType.cs @@ -0,0 +1,32 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class CachedInformationType + { + public const short cert = 1; + public const short cert_req = 2; + + public static string GetName(short cachedInformationType) + { + switch (cachedInformationType) + { + case cert: + return "cert"; + case cert_req: + return "cert_req"; + default: + return "UNKNOWN"; + } + } + + public static string GetText(short cachedInformationType) + { + return GetName(cachedInformationType) + "(" + cachedInformationType + ")"; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CachedInformationType.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CachedInformationType.cs.meta new file mode 100644 index 000000000..944bf3ce5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CachedInformationType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 514caa9f24897c64788e1f68f5a3fd01 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertChainType.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertChainType.cs new file mode 100644 index 000000000..94349ac51 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertChainType.cs @@ -0,0 +1,38 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Implementation of the RFC 3546 3.3. CertChainType. + public abstract class CertChainType + { + public const short individual_certs = 0; + public const short pkipath = 1; + + public static string GetName(short certChainType) + { + switch (certChainType) + { + case individual_certs: + return "individual_certs"; + case pkipath: + return "pkipath"; + default: + return "UNKNOWN"; + } + } + + public static string GetText(short certChainType) + { + return GetName(certChainType) + "(" + certChainType + ")"; + } + + public static bool IsValid(short certChainType) + { + return certChainType >= individual_certs && certChainType <= pkipath; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertChainType.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertChainType.cs.meta new file mode 100644 index 000000000..3a5e665fd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertChainType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 27a6ada069c4b854dabb3c92bf7818cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/Certificate.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/Certificate.cs new file mode 100644 index 000000000..23734be0c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/Certificate.cs @@ -0,0 +1,300 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Parsing and encoding of a Certificate struct from RFC 4346. + /// + ///
    +    /// opaque ASN.1Cert<2^24-1>;
    +    /// struct {
    +    ///   ASN.1Cert certificate_list<0..2^24-1>;
    +    /// } Certificate;
    +    /// 
    + ///
    + public sealed class Certificate + { + private static readonly TlsCertificate[] EmptyCerts = new TlsCertificate[0]; + private static readonly CertificateEntry[] EmptyCertEntries = new CertificateEntry[0]; + + public static readonly Certificate EmptyChain = new Certificate(EmptyCerts); + public static readonly Certificate EmptyChainTls13 = new Certificate(TlsUtilities.EmptyBytes, EmptyCertEntries); + + public sealed class ParseOptions + { + public short CertificateType { get; set; } = Tls.CertificateType.X509; + public int MaxChainLength { get; set; } = int.MaxValue; + } + + private static CertificateEntry[] Convert(TlsCertificate[] certificateList) + { + if (TlsUtilities.IsNullOrContainsNull(certificateList)) + throw new ArgumentException("cannot be null or contain any nulls", "certificateList"); + + int count = certificateList.Length; + CertificateEntry[] result = new CertificateEntry[count]; + for (int i = 0; i < count; ++i) + { + result[i] = new CertificateEntry(certificateList[i], null); + } + return result; + } + + private readonly byte[] m_certificateRequestContext; + private readonly CertificateEntry[] m_certificateEntryList; + private readonly short m_certificateType; + + public Certificate(TlsCertificate[] certificateList) + : this(null, Convert(certificateList)) + { + } + + public Certificate(byte[] certificateRequestContext, CertificateEntry[] certificateEntryList) + : this(Tls.CertificateType.X509, certificateRequestContext, certificateEntryList) + { + } + + // TODO[tls13] Prefer to manage the certificateRequestContext internally only? + public Certificate(short certificateType, byte[] certificateRequestContext, CertificateEntry[] certificateEntryList) + { + if (null != certificateRequestContext && !TlsUtilities.IsValidUint8(certificateRequestContext.Length)) + throw new ArgumentException("cannot be longer than 255", "certificateRequestContext"); + if (TlsUtilities.IsNullOrContainsNull(certificateEntryList)) + throw new ArgumentException("cannot be null or contain any nulls", "certificateEntryList"); + + m_certificateRequestContext = TlsUtilities.Clone(certificateRequestContext); + m_certificateEntryList = certificateEntryList; + m_certificateType = certificateType; + } + + public byte[] GetCertificateRequestContext() + { + return TlsUtilities.Clone(m_certificateRequestContext); + } + + /// an array of representing a certificate chain. + public TlsCertificate[] GetCertificateList() + { + return CloneCertificateList(); + } + + public TlsCertificate GetCertificateAt(int index) + { + return m_certificateEntryList[index].Certificate; + } + + public CertificateEntry GetCertificateEntryAt(int index) + { + return m_certificateEntryList[index]; + } + + public CertificateEntry[] GetCertificateEntryList() + { + return CloneCertificateEntryList(); + } + + public short CertificateType => m_certificateType; + + public int Length => m_certificateEntryList.Length; + + /// true if this certificate chain contains no certificates, or false otherwise. + /// + public bool IsEmpty => m_certificateEntryList.Length == 0; + + /// Encode this to a , and optionally calculate the + /// "end point hash" (per RFC 5929's tls-server-end-point binding). + /// the of the current connection. + /// the to encode to. + /// the to write the "end point hash" to (or null). + /// + /// + public void Encode(TlsContext context, Stream messageOutput, Stream endPointHashOutput) + { + bool isTlsV13 = TlsUtilities.IsTlsV13(context); + + if ((null != m_certificateRequestContext) != isTlsV13) + throw new InvalidOperationException(); + + if (isTlsV13) + { + TlsUtilities.WriteOpaque8(m_certificateRequestContext, messageOutput); + } + + int count = m_certificateEntryList.Length; + var certEncodings = new List(count); + var extEncodings = isTlsV13 ? new List(count) : null; + + long totalLength = 0; + for (int i = 0; i < count; ++i) + { + CertificateEntry entry = m_certificateEntryList[i]; + TlsCertificate cert = entry.Certificate; + byte[] derEncoding = cert.GetEncoded(); + + if (i == 0 && endPointHashOutput != null) + { + CalculateEndPointHash(context, cert, derEncoding, endPointHashOutput); + } + + certEncodings.Add(derEncoding); + totalLength += derEncoding.Length; + totalLength += 3; + + if (isTlsV13) + { + var extensions = entry.Extensions; + byte[] extEncoding = (null == extensions) + ? TlsUtilities.EmptyBytes + : TlsProtocol.WriteExtensionsData(extensions); + + extEncodings.Add(extEncoding); + totalLength += extEncoding.Length; + totalLength += 2; + } + } + + // RFC 7250 indicates the raw key is not wrapped in a cert list like X509 is + // but RFC 8446 wraps it in a CertificateEntry, which is inside certificate_list + if (isTlsV13 || m_certificateType != Tls.CertificateType.RawPublicKey) + { + TlsUtilities.CheckUint24(totalLength); + TlsUtilities.WriteUint24((int)totalLength, messageOutput); + } + + for (int i = 0; i < count; ++i) + { + TlsUtilities.WriteOpaque24(certEncodings[i], messageOutput); + + if (isTlsV13) + { + TlsUtilities.WriteOpaque16(extEncodings[i], messageOutput); + } + } + } + + /// Parse a from a . + /// the to apply during parsing. + /// the of the current connection. + /// the to parse from. + /// the to write the "end point hash" to (or null). + /// + /// a object. + /// + public static Certificate Parse(ParseOptions options, TlsContext context, Stream messageInput, + Stream endPointHashOutput) + { + SecurityParameters securityParameters = context.SecurityParameters; + bool isTlsV13 = TlsUtilities.IsTlsV13(securityParameters.NegotiatedVersion); + short certType = options.CertificateType; + + byte[] certificateRequestContext = null; + if (isTlsV13) + { + certificateRequestContext = TlsUtilities.ReadOpaque8(messageInput); + } + + int totalLength = TlsUtilities.ReadUint24(messageInput); + if (totalLength == 0) + { + return !isTlsV13 ? EmptyChain + : certificateRequestContext.Length < 1 ? EmptyChainTls13 + : new Certificate(certType, certificateRequestContext, EmptyCertEntries); + } + + byte[] certListData = TlsUtilities.ReadFully(totalLength, messageInput); + MemoryStream buf = new MemoryStream(certListData, false); + + TlsCrypto crypto = context.Crypto; + int maxChainLength = System.Math.Max(1, options.MaxChainLength); + + var certificate_list = new List(); + while (buf.Position < buf.Length) + { + if (certificate_list.Count >= maxChainLength) + { + throw new TlsFatalAlert(AlertDescription.internal_error, + "Certificate chain longer than maximum (" + maxChainLength + ")"); + } + + // RFC 7250 indicates the raw key is not wrapped in a cert list like X509 is + // but RFC 8446 wraps it in a CertificateEntry, which is inside certificate_list + byte[] derEncoding; + if (isTlsV13 || certType != Tls.CertificateType.RawPublicKey) + { + derEncoding = TlsUtilities.ReadOpaque24(buf, 1); + } + else + { + derEncoding = certListData; + buf.Seek(totalLength, SeekOrigin.Current); + } + + TlsCertificate cert = crypto.CreateCertificate(certType, derEncoding); + + if (certificate_list.Count < 1 && endPointHashOutput != null) + { + CalculateEndPointHash(context, cert, derEncoding, endPointHashOutput); + } + + IDictionary extensions = null; + if (isTlsV13) + { + byte[] extEncoding = TlsUtilities.ReadOpaque16(buf); + + extensions = TlsProtocol.ReadExtensionsData13(HandshakeType.certificate, extEncoding); + } + + certificate_list.Add(new CertificateEntry(cert, extensions)); + } + + CertificateEntry[] certificateList = new CertificateEntry[certificate_list.Count]; + for (int i = 0; i < certificate_list.Count; i++) + { + certificateList[i] = (CertificateEntry)certificate_list[i]; + } + + return new Certificate(certType, certificateRequestContext, certificateList); + } + + private static void CalculateEndPointHash(TlsContext context, TlsCertificate cert, byte[] encoding, + Stream output) + { + byte[] endPointHash = TlsUtilities.CalculateEndPointHash(context, cert, encoding); + if (endPointHash != null && endPointHash.Length > 0) + { + output.Write(endPointHash, 0, endPointHash.Length); + } + } + + private TlsCertificate[] CloneCertificateList() + { + int count = m_certificateEntryList.Length; + if (0 == count) + return EmptyCerts; + + TlsCertificate[] result = new TlsCertificate[count]; + for (int i = 0; i < count; ++i) + { + result[i] = m_certificateEntryList[i].Certificate; + } + return result; + } + + private CertificateEntry[] CloneCertificateEntryList() + { + int count = m_certificateEntryList.Length; + if (0 == count) + return EmptyCertEntries; + + CertificateEntry[] result = new CertificateEntry[count]; + Array.Copy(m_certificateEntryList, 0, result, 0, count); + return result; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/Certificate.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/Certificate.cs.meta new file mode 100644 index 000000000..cf2381d6a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/Certificate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e02b2aa10a45b044d88fb5f1f2bb3fa2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateCompressionAlgorithm.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateCompressionAlgorithm.cs new file mode 100644 index 000000000..5970bcd16 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateCompressionAlgorithm.cs @@ -0,0 +1,51 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /** + * RFC 8879 + */ + public abstract class CertificateCompressionAlgorithm + { + public const int zlib = 1; + public const int brotli = 2; + public const int zstd = 3; + + public static string GetName(int certificateCompressionAlgorithm) + { + switch (certificateCompressionAlgorithm) + { + case zlib: + return "zlib"; + case brotli: + return "brotli"; + case zstd: + return "zstd"; + default: + return "UNKNOWN"; + } + } + + public static string GetText(int certificateCompressionAlgorithm) + { + return GetName(certificateCompressionAlgorithm) + "(" + certificateCompressionAlgorithm + ")"; + } + + public static bool IsRecognized(int certificateCompressionAlgorithm) + { + switch (certificateCompressionAlgorithm) + { + case zlib: + case brotli: + case zstd: + return true; + default: + return false; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateCompressionAlgorithm.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateCompressionAlgorithm.cs.meta new file mode 100644 index 000000000..35c114a6b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateCompressionAlgorithm.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e946795c64c7bf45be136ba500d866f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateEntry.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateEntry.cs new file mode 100644 index 000000000..bdf49518a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateEntry.cs @@ -0,0 +1,36 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class CertificateEntry + { + private readonly TlsCertificate m_certificate; + private readonly IDictionary m_extensions; + + public CertificateEntry(TlsCertificate certificate, IDictionary extensions) + { + if (null == certificate) + throw new ArgumentNullException("certificate"); + + this.m_certificate = certificate; + this.m_extensions = extensions; + } + + public TlsCertificate Certificate + { + get { return m_certificate; } + } + + public IDictionary Extensions + { + get { return m_extensions; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateEntry.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateEntry.cs.meta new file mode 100644 index 000000000..1ffd4bc0d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateEntry.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 87ba950718cec0c4cabc3759850322a8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateRequest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateRequest.cs new file mode 100644 index 000000000..0163940f8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateRequest.cs @@ -0,0 +1,283 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Parsing and encoding of a CertificateRequest struct from RFC 4346. + /// + ///
    +    /// struct {
    +    ///   ClientCertificateType certificate_types<1..2^8-1>;
    +    ///   DistinguishedName certificate_authorities<3..2^16-1>;
    +    /// } CertificateRequest;
    +    /// 
    + /// Updated for RFC 5246: + ///
    +    /// struct {
    +    ///   ClientCertificateType certificate_types <1..2 ^ 8 - 1>;
    +    ///   SignatureAndHashAlgorithm supported_signature_algorithms <2 ^ 16 - 1>;
    +    ///   DistinguishedName certificate_authorities <0..2 ^ 16 - 1>;
    +    /// } CertificateRequest;
    +    /// 
    + /// Revised for RFC 8446: + ///
    +    /// struct {
    +    ///   opaque certificate_request_context <0..2 ^ 8 - 1>;
    +    ///   Extension extensions <2..2 ^ 16 - 1>;
    +    /// } CertificateRequest;
    +    /// 
    + ///
    + /// + /// + public sealed class CertificateRequest + { + /// + private static IList CheckSupportedSignatureAlgorithms( + IList supportedSignatureAlgorithms, short alertDescription) + { + if (null == supportedSignatureAlgorithms) + throw new TlsFatalAlert(alertDescription, "'signature_algorithms' is required"); + + return supportedSignatureAlgorithms; + } + + private readonly byte[] m_certificateRequestContext; + private readonly short[] m_certificateTypes; + private readonly IList m_supportedSignatureAlgorithms; + private readonly IList m_supportedSignatureAlgorithmsCert; + private readonly IList m_certificateAuthorities; + + /// see for valid constants. + /// + /// an of . + public CertificateRequest(short[] certificateTypes, + IList supportedSignatureAlgorithms, IList certificateAuthorities) + : this(null, certificateTypes, supportedSignatureAlgorithms, null, certificateAuthorities) + { + } + + // TODO[tls13] Prefer to manage the certificateRequestContext internally only? + /// + public CertificateRequest(byte[] certificateRequestContext, + IList supportedSignatureAlgorithms, + IList supportedSignatureAlgorithmsCert, IList certificateAuthorities) + : this(certificateRequestContext, null, + CheckSupportedSignatureAlgorithms(supportedSignatureAlgorithms, AlertDescription.internal_error), + supportedSignatureAlgorithmsCert, certificateAuthorities) + { + /* + * TODO[tls13] Removed certificateTypes, added certificate_request_context, added extensions + * (required: signature_algorithms, optional: status_request, signed_certificate_timestamp, + * certificate_authorities, oid_filters, signature_algorithms_cert) + */ + } + + private CertificateRequest(byte[] certificateRequestContext, short[] certificateTypes, + IList supportedSignatureAlgorithms, + IList supportedSignatureAlgorithmsCert, IList certificateAuthorities) + { + if (null != certificateRequestContext && !TlsUtilities.IsValidUint8(certificateRequestContext.Length)) + throw new ArgumentException("cannot be longer than 255", "certificateRequestContext"); + if (null != certificateTypes + && (certificateTypes.Length < 1 || !TlsUtilities.IsValidUint8(certificateTypes.Length))) + { + throw new ArgumentException("should have length from 1 to 255", "certificateTypes"); + } + + this.m_certificateRequestContext = TlsUtilities.Clone(certificateRequestContext); + this.m_certificateTypes = certificateTypes; + this.m_supportedSignatureAlgorithms = supportedSignatureAlgorithms; + this.m_supportedSignatureAlgorithmsCert = supportedSignatureAlgorithmsCert; + this.m_certificateAuthorities = certificateAuthorities; + } + + public byte[] GetCertificateRequestContext() + { + return TlsUtilities.Clone(m_certificateRequestContext); + } + + /// an array of certificate types + /// + public short[] CertificateTypes + { + get { return m_certificateTypes; } + } + + /// an of (or null before TLS 1.2). + /// + public IList SupportedSignatureAlgorithms + { + get { return m_supportedSignatureAlgorithms; } + } + + /// an optional of . May be non-null from + /// TLS 1.3 onwards. + public IList SupportedSignatureAlgorithmsCert + { + get { return m_supportedSignatureAlgorithmsCert; } + } + + /// an of . + public IList CertificateAuthorities + { + get { return m_certificateAuthorities; } + } + + public bool HasCertificateRequestContext(byte[] certificateRequestContext) + { + return Arrays.AreEqual(m_certificateRequestContext, certificateRequestContext); + } + + /// Encode this to a . + /// the of the current connection. + /// the to encode to. + /// + public void Encode(TlsContext context, Stream output) + { + ProtocolVersion negotiatedVersion = context.ServerVersion; + bool isTlsV12 = TlsUtilities.IsTlsV12(negotiatedVersion); + bool isTlsV13 = TlsUtilities.IsTlsV13(negotiatedVersion); + + if (isTlsV13 != (null != m_certificateRequestContext) || + isTlsV13 != (null == m_certificateTypes) || + isTlsV12 != (null != m_supportedSignatureAlgorithms) || + (!isTlsV13 && (null != m_supportedSignatureAlgorithmsCert))) + { + throw new InvalidOperationException(); + } + + if (isTlsV13) + { + TlsUtilities.WriteOpaque8(m_certificateRequestContext, output); + + var extensions = new Dictionary(); + TlsExtensionsUtilities.AddSignatureAlgorithmsExtension(extensions, m_supportedSignatureAlgorithms); + + if (null != m_supportedSignatureAlgorithmsCert) + { + TlsExtensionsUtilities.AddSignatureAlgorithmsCertExtension(extensions, + m_supportedSignatureAlgorithmsCert); + } + + if (null != m_certificateAuthorities) + { + TlsExtensionsUtilities.AddCertificateAuthoritiesExtension(extensions, m_certificateAuthorities); + } + + byte[] extEncoding = TlsProtocol.WriteExtensionsData(extensions); + + TlsUtilities.WriteOpaque16(extEncoding, output); + return; + } + + TlsUtilities.WriteUint8ArrayWithUint8Length(m_certificateTypes, output); + + if (isTlsV12) + { + // TODO Check whether SignatureAlgorithm.anonymous is allowed here + TlsUtilities.EncodeSupportedSignatureAlgorithms(m_supportedSignatureAlgorithms, output); + } + + if (m_certificateAuthorities == null || m_certificateAuthorities.Count < 1) + { + TlsUtilities.WriteUint16(0, output); + } + else + { + var derEncodings = new List(m_certificateAuthorities.Count); + + int totalLength = 0; + foreach (X509Name certificateAuthority in m_certificateAuthorities) + { + byte[] derEncoding = certificateAuthority.GetEncoded(Asn1Encodable.Der); + derEncodings.Add(derEncoding); + totalLength += derEncoding.Length + 2; + } + + TlsUtilities.CheckUint16(totalLength); + TlsUtilities.WriteUint16(totalLength, output); + + foreach (byte[] derEncoding in derEncodings) + { + TlsUtilities.WriteOpaque16(derEncoding, output); + } + } + } + + /// Parse a from a + /// the of the current connection. + /// the to parse from. + /// a object. + /// + public static CertificateRequest Parse(TlsContext context, Stream input) + { + ProtocolVersion negotiatedVersion = context.ServerVersion; + bool isTlsV13 = TlsUtilities.IsTlsV13(negotiatedVersion); + + if (isTlsV13) + { + byte[] certificateRequestContext = TlsUtilities.ReadOpaque8(input); + + /* + * TODO[tls13] required: signature_algorithms; optional: status_request, + * signed_certificate_timestamp, certificate_authorities, oid_filters, + * signature_algorithms_cert + */ + + byte[] extEncoding = TlsUtilities.ReadOpaque16(input); + + var extensions = TlsProtocol.ReadExtensionsData13(HandshakeType.certificate_request, extEncoding); + + var supportedSignatureAlgorithms13 = CheckSupportedSignatureAlgorithms( + TlsExtensionsUtilities.GetSignatureAlgorithmsExtension(extensions), + AlertDescription.missing_extension); + var supportedSignatureAlgorithmsCert13 = TlsExtensionsUtilities + .GetSignatureAlgorithmsCertExtension(extensions); + var certificateAuthorities13 = TlsExtensionsUtilities.GetCertificateAuthoritiesExtension(extensions); + + return new CertificateRequest(certificateRequestContext, supportedSignatureAlgorithms13, + supportedSignatureAlgorithmsCert13, certificateAuthorities13); + } + + bool isTLSv12 = TlsUtilities.IsTlsV12(negotiatedVersion); + + short[] certificateTypes = TlsUtilities.ReadUint8ArrayWithUint8Length(input, 1); + + IList supportedSignatureAlgorithms = null; + if (isTLSv12) + { + supportedSignatureAlgorithms = TlsUtilities.ParseSupportedSignatureAlgorithms(input); + } + + IList certificateAuthorities = null; + { + byte[] certAuthData = TlsUtilities.ReadOpaque16(input); + if (certAuthData.Length > 0) + { + certificateAuthorities = new List(); + MemoryStream bis = new MemoryStream(certAuthData, false); + do + { + byte[] derEncoding = TlsUtilities.ReadOpaque16(bis, 1); + Asn1Object asn1 = TlsUtilities.ReadAsn1Object(derEncoding); + X509Name ca = X509Name.GetInstance(asn1); + TlsUtilities.RequireDerEncoding(ca, derEncoding); + certificateAuthorities.Add(ca); + } + while (bis.Position < bis.Length); + } + } + + return new CertificateRequest(certificateTypes, supportedSignatureAlgorithms, certificateAuthorities); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateRequest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateRequest.cs.meta new file mode 100644 index 000000000..26260eb81 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2079c1a478381f24892668463073ce18 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatus.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatus.cs new file mode 100644 index 000000000..97b4a4930 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatus.cs @@ -0,0 +1,215 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class CertificateStatus + { + private readonly short m_statusType; + private readonly object m_response; + + public CertificateStatus(short statusType, object response) + { + if (!IsCorrectType(statusType, response)) + throw new ArgumentException("not an instance of the correct type", "response"); + + this.m_statusType = statusType; + this.m_response = response; + } + + public short StatusType + { + get { return m_statusType; } + } + + public object Response + { + get { return m_response; } + } + + public OcspResponse OcspResponse + { + get + { + if (!IsCorrectType(CertificateStatusType.ocsp, m_response)) + throw new InvalidOperationException("'response' is not an OCSPResponse"); + + return (OcspResponse)m_response; + } + } + + /// an of (possibly null) . + public IList OcspResponseList + { + get + { + if (!IsCorrectType(CertificateStatusType.ocsp_multi, m_response)) + throw new InvalidOperationException("'response' is not an OCSPResponseList"); + + return (IList)m_response; + } + } + + /// Encode this to a . + /// the to encode to. + /// + public void Encode(Stream output) + { + TlsUtilities.WriteUint8(m_statusType, output); + + switch (m_statusType) + { + case CertificateStatusType.ocsp: + { + OcspResponse ocspResponse = (OcspResponse)m_response; + byte[] derEncoding = ocspResponse.GetEncoded(Asn1Encodable.Der); + TlsUtilities.WriteOpaque24(derEncoding, output); + break; + } + case CertificateStatusType.ocsp_multi: + { + var ocspResponseList = (IList)m_response; + int count = ocspResponseList.Count; + + var derEncodings = new List(count); + long totalLength = 0; + foreach (OcspResponse ocspResponse in ocspResponseList) + { + if (ocspResponse == null) + { + derEncodings.Add(TlsUtilities.EmptyBytes); + } + else + { + byte[] derEncoding = ocspResponse.GetEncoded(Asn1Encodable.Der); + derEncodings.Add(derEncoding); + totalLength += derEncoding.Length; + } + totalLength += 3; + } + + TlsUtilities.CheckUint24(totalLength); + TlsUtilities.WriteUint24((int)totalLength, output); + + foreach (byte[] derEncoding in derEncodings) + { + TlsUtilities.WriteOpaque24(derEncoding, output); + } + + break; + } + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + /// Parse a from a . + /// the of the current connection. + /// the to parse from. + /// a object. + /// + public static CertificateStatus Parse(TlsContext context, Stream input) + { + SecurityParameters securityParameters = context.SecurityParameters; + + Certificate peerCertificate = securityParameters.PeerCertificate; + if (null == peerCertificate || peerCertificate.IsEmpty + || CertificateType.X509 != peerCertificate.CertificateType) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + int certificateCount = peerCertificate.Length; + int statusRequestVersion = securityParameters.StatusRequestVersion; + + short status_type = TlsUtilities.ReadUint8(input); + object response; + + switch (status_type) + { + case CertificateStatusType.ocsp: + { + RequireStatusRequestVersion(1, statusRequestVersion); + + byte[] derEncoding = TlsUtilities.ReadOpaque24(input, 1); + response = ParseOcspResponse(derEncoding); + break; + } + case CertificateStatusType.ocsp_multi: + { + RequireStatusRequestVersion(2, statusRequestVersion); + + byte[] ocsp_response_list = TlsUtilities.ReadOpaque24(input, 1); + MemoryStream buf = new MemoryStream(ocsp_response_list, false); + + var ocspResponseList = new List(); + while (buf.Position < buf.Length) + { + if (ocspResponseList.Count >= certificateCount) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + int length = TlsUtilities.ReadUint24(buf); + if (length < 1) + { + ocspResponseList.Add(null); + } + else + { + byte[] derEncoding = TlsUtilities.ReadFully(length, buf); + ocspResponseList.Add(ParseOcspResponse(derEncoding)); + } + } + + response = ocspResponseList; + break; + } + default: + throw new TlsFatalAlert(AlertDescription.decode_error); + } + + return new CertificateStatus(status_type, response); + } + + private static bool IsCorrectType(short statusType, object response) + { + switch (statusType) + { + case CertificateStatusType.ocsp: + return response is OcspResponse; + case CertificateStatusType.ocsp_multi: + return IsOcspResponseList(response); + default: + throw new ArgumentException("unsupported CertificateStatusType", "statusType"); + } + } + + private static bool IsOcspResponseList(object response) + { + return response is IList v && v.Count > 0; + } + + /// + private static OcspResponse ParseOcspResponse(byte[] derEncoding) + { + Asn1Object asn1 = TlsUtilities.ReadAsn1Object(derEncoding); + OcspResponse ocspResponse = OcspResponse.GetInstance(asn1); + TlsUtilities.RequireDerEncoding(ocspResponse, derEncoding); + return ocspResponse; + } + + /// + private static void RequireStatusRequestVersion(int minVersion, int statusRequestVersion) + { + if (statusRequestVersion < minVersion) + throw new TlsFatalAlert(AlertDescription.decode_error); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatus.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatus.cs.meta new file mode 100644 index 000000000..35d1fdb18 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b07e64da0e64f4649bd505dce0fe7b36 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatusRequest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatusRequest.cs new file mode 100644 index 000000000..e57903237 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatusRequest.cs @@ -0,0 +1,95 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Implementation of the RFC 3546 3.6. CertificateStatusRequest. + public sealed class CertificateStatusRequest + { + private short m_statusType; + private object m_request; + + public CertificateStatusRequest(short statusType, object request) + { + if (!IsCorrectType(statusType, request)) + throw new ArgumentException("not an instance of the correct type", "request"); + + this.m_statusType = statusType; + this.m_request = request; + } + + public short StatusType + { + get { return m_statusType; } + } + + public object Request + { + get { return m_request; } + } + + public OcspStatusRequest OcspStatusRequest + { + get + { + if (!IsCorrectType(CertificateStatusType.ocsp, m_request)) + throw new InvalidOperationException("'request' is not an OCSPStatusRequest"); + + return (OcspStatusRequest)m_request; + } + } + + /// Encode this to a . + /// the to encode to. + /// + public void Encode(Stream output) + { + TlsUtilities.WriteUint8(m_statusType, output); + + switch (m_statusType) + { + case CertificateStatusType.ocsp: + ((OcspStatusRequest)m_request).Encode(output); + break; + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + /// Parse a from a . + /// the to parse from. + /// a object. + /// + public static CertificateStatusRequest Parse(Stream input) + { + short status_type = TlsUtilities.ReadUint8(input); + object request; + + switch (status_type) + { + case CertificateStatusType.ocsp: + request = OcspStatusRequest.Parse(input); + break; + default: + throw new TlsFatalAlert(AlertDescription.decode_error); + } + + return new CertificateStatusRequest(status_type, request); + } + + private static bool IsCorrectType(short statusType, object request) + { + switch (statusType) + { + case CertificateStatusType.ocsp: + return request is OcspStatusRequest; + default: + throw new ArgumentException("unsupported CertificateStatusType", "statusType"); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatusRequest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatusRequest.cs.meta new file mode 100644 index 000000000..06e52b4f4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatusRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: db1b20f898a4975458cbae73c442ec69 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatusRequestItemV2.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatusRequestItemV2.cs new file mode 100644 index 000000000..e543b9379 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatusRequestItemV2.cs @@ -0,0 +1,104 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Implementation of the RFC 6961 2.2. CertificateStatusRequestItemV2. + public sealed class CertificateStatusRequestItemV2 + { + private readonly short m_statusType; + private readonly object m_request; + + public CertificateStatusRequestItemV2(short statusType, object request) + { + if (!IsCorrectType(statusType, request)) + throw new ArgumentException("not an instance of the correct type", "request"); + + this.m_statusType = statusType; + this.m_request = request; + } + + public short StatusType + { + get { return m_statusType; } + } + + public object Request + { + get { return m_request; } + } + + public OcspStatusRequest OcspStatusRequest + { + get + { + if (!(m_request is OcspStatusRequest)) + throw new InvalidOperationException("'request' is not an OcspStatusRequest"); + + return (OcspStatusRequest)m_request; + } + } + + /// Encode this to a . + /// the to encode to. + /// + public void Encode(Stream output) + { + TlsUtilities.WriteUint8(m_statusType, output); + + MemoryStream buf = new MemoryStream(); + switch (m_statusType) + { + case CertificateStatusType.ocsp: + case CertificateStatusType.ocsp_multi: + ((OcspStatusRequest)m_request).Encode(buf); + break; + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + byte[] requestBytes = buf.ToArray(); + TlsUtilities.WriteOpaque16(requestBytes, output); + } + + /// Parse a from a . + /// the to parse from. + /// a object. + /// + public static CertificateStatusRequestItemV2 Parse(Stream input) + { + short status_type = TlsUtilities.ReadUint8(input); + + object request; + byte[] requestBytes = TlsUtilities.ReadOpaque16(input); + MemoryStream buf = new MemoryStream(requestBytes, false); + switch (status_type) + { + case CertificateStatusType.ocsp: + case CertificateStatusType.ocsp_multi: + request = OcspStatusRequest.Parse(buf); + break; + default: + throw new TlsFatalAlert(AlertDescription.decode_error); + } + TlsProtocol.AssertEmpty(buf); + + return new CertificateStatusRequestItemV2(status_type, request); + } + + private static bool IsCorrectType(short statusType, object request) + { + switch (statusType) + { + case CertificateStatusType.ocsp: + case CertificateStatusType.ocsp_multi: + return request is OcspStatusRequest; + default: + throw new ArgumentException("unsupported CertificateStatusType", "statusType"); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatusRequestItemV2.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatusRequestItemV2.cs.meta new file mode 100644 index 000000000..099d59fbe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatusRequestItemV2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 29350c23b9213954189a64330e6f160a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatusType.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatusType.cs new file mode 100644 index 000000000..9a52da3b0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatusType.cs @@ -0,0 +1,21 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class CertificateStatusType + { + /* + * RFC 6066 + */ + public const short ocsp = 1; + + /* + * RFC 6961 + */ + public const short ocsp_multi = 2; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatusType.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatusType.cs.meta new file mode 100644 index 000000000..d8d327eea --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateStatusType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e16b73164d04fb459a642ebfa576ca2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateType.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateType.cs new file mode 100644 index 000000000..bfbd19b5b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateType.cs @@ -0,0 +1,20 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 6091 + public abstract class CertificateType + { + public const short X509 = 0; + public const short OpenPGP = 1; + + /* + * RFC 7250 + */ + public const short RawPublicKey = 2; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateType.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateType.cs.meta new file mode 100644 index 000000000..ce91898e9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 94887caf243e88146898802a791af23f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateUrl.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateUrl.cs new file mode 100644 index 000000000..72fed8c9f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateUrl.cs @@ -0,0 +1,120 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 3546 3.3 + public sealed class CertificateUrl + { + private readonly short m_type; + private readonly IList m_urlAndHashList; + + /// see for valid constants. + /// an of . + public CertificateUrl(short type, IList urlAndHashList) + { + if (!CertChainType.IsValid(type)) + throw new ArgumentException("not a valid CertChainType value", "type"); + if (urlAndHashList == null || urlAndHashList.Count < 1) + throw new ArgumentException("must have length > 0", "urlAndHashList"); + if (type == CertChainType.pkipath && urlAndHashList.Count != 1) + throw new ArgumentException("must contain exactly one entry when type is " + + CertChainType.GetText(type), "urlAndHashList"); + + this.m_type = type; + this.m_urlAndHashList = urlAndHashList; + } + + /// + public short Type + { + get { return m_type; } + } + + /// an of . + public IList UrlAndHashList + { + get { return m_urlAndHashList; } + } + + /// Encode this to a . + /// the to encode to. + /// + public void Encode(Stream output) + { + TlsUtilities.WriteUint8(m_type, output); + + ListBuffer16 buf = new ListBuffer16(); + foreach (UrlAndHash urlAndHash in m_urlAndHashList) + { + urlAndHash.Encode(buf); + } + buf.EncodeTo(output); + } + + /// Parse a from a . + /// the of the current connection. + /// the to parse from. + /// a object. + /// + public static CertificateUrl Parse(TlsContext context, Stream input) + { + short type = TlsUtilities.ReadUint8(input); + if (!CertChainType.IsValid(type)) + throw new TlsFatalAlert(AlertDescription.decode_error); + + int totalLength = TlsUtilities.ReadUint16(input); + if (totalLength < 1) + throw new TlsFatalAlert(AlertDescription.decode_error); + + byte[] urlAndHashListData = TlsUtilities.ReadFully(totalLength, input); + + MemoryStream buf = new MemoryStream(urlAndHashListData, false); + + var url_and_hash_list = new List(); + while (buf.Position < buf.Length) + { + UrlAndHash url_and_hash = UrlAndHash.Parse(context, buf); + url_and_hash_list.Add(url_and_hash); + } + + if (type == CertChainType.pkipath && url_and_hash_list.Count != 1) + throw new TlsFatalAlert(AlertDescription.decode_error); + + return new CertificateUrl(type, url_and_hash_list); + } + + // TODO Could be more generally useful + internal class ListBuffer16 + : MemoryStream + { + internal ListBuffer16() + { + // Reserve space for length + TlsUtilities.WriteUint16(0, this); + } + + internal void EncodeTo(Stream output) + { + // Patch actual length back in + int length = Convert.ToInt32(Length) - 2; + TlsUtilities.CheckUint16(length); + + Seek(0L, SeekOrigin.Begin); + TlsUtilities.WriteUint16(length, this); + + WriteTo(output); + + Dispose(); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateUrl.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateUrl.cs.meta new file mode 100644 index 000000000..f8cb188c2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateUrl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 84ef8dab85a46a449810d359fcb16551 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateVerify.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateVerify.cs new file mode 100644 index 000000000..fabc01331 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateVerify.cs @@ -0,0 +1,61 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class CertificateVerify + { + private readonly int m_algorithm; + private readonly byte[] m_signature; + + public CertificateVerify(int algorithm, byte[] signature) + { + if (!TlsUtilities.IsValidUint16(algorithm)) + throw new ArgumentException("algorithm"); + if (signature == null) + throw new ArgumentNullException("signature"); + + this.m_algorithm = algorithm; + this.m_signature = signature; + } + + /// a value. + public int Algorithm + { + get { return m_algorithm; } + } + + public byte[] Signature + { + get { return m_signature; } + } + + /// Encode this to a . + /// the to encode to. + /// + public void Encode(Stream output) + { + TlsUtilities.WriteUint16(m_algorithm, output); + TlsUtilities.WriteOpaque16(m_signature, output); + } + + /// Parse a from a . + /// the of the current connection. + /// the to parse from. + /// a object. + /// + public static CertificateVerify Parse(TlsContext context, Stream input) + { + if (!TlsUtilities.IsTlsV13(context)) + throw new InvalidOperationException(); + + int algorithm = TlsUtilities.ReadUint16(input); + byte[] signature = TlsUtilities.ReadOpaque16(input); + return new CertificateVerify(algorithm, signature); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateVerify.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateVerify.cs.meta new file mode 100644 index 000000000..c873418d7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CertificateVerify.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e72d5eef8356da2429d50ff32b574022 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ChangeCipherSpec.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ChangeCipherSpec.cs new file mode 100644 index 000000000..77e086ee4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ChangeCipherSpec.cs @@ -0,0 +1,13 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class ChangeCipherSpec + { + public const short change_cipher_spec = 1; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ChangeCipherSpec.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ChangeCipherSpec.cs.meta new file mode 100644 index 000000000..58dfa34b4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ChangeCipherSpec.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: abd61c678ec2de2479a9b76e4d22047d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ChannelBinding.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ChannelBinding.cs new file mode 100644 index 000000000..aa1acab1e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ChannelBinding.cs @@ -0,0 +1,28 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 5056 + /// + /// Note that the values here are implementation-specific and arbitrary. It is recommended not to depend on the + /// particular values (e.g.serialization). + /// + public abstract class ChannelBinding + { + /* + * RFC 5929 + */ + public const int tls_server_end_point = 0; + public const int tls_unique = 1; + public const int tls_unique_for_telnet = 2; + + /* + * RFC 9266 + */ + public const int tls_exporter = 3; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ChannelBinding.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ChannelBinding.cs.meta new file mode 100644 index 000000000..18cc4c13e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ChannelBinding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0bcbccea8f960014c9a97a53a5fb8ddb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CipherSuite.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CipherSuite.cs new file mode 100644 index 000000000..cec981dab --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CipherSuite.cs @@ -0,0 +1,465 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 2246 A.5 + public abstract class CipherSuite + { + public static bool IsScsv(int cipherSuite) + { + switch (cipherSuite) + { + case TLS_EMPTY_RENEGOTIATION_INFO_SCSV: + case TLS_FALLBACK_SCSV: + return true; + default: + return false; + } + } + + public const int TLS_NULL_WITH_NULL_NULL = 0x0000; + public const int TLS_RSA_WITH_NULL_MD5 = 0x0001; + public const int TLS_RSA_WITH_NULL_SHA = 0x0002; + public const int TLS_RSA_EXPORT_WITH_RC4_40_MD5 = 0x0003; + public const int TLS_RSA_WITH_RC4_128_MD5 = 0x0004; + public const int TLS_RSA_WITH_RC4_128_SHA = 0x0005; + public const int TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 = 0x0006; + public const int TLS_RSA_WITH_IDEA_CBC_SHA = 0x0007; + public const int TLS_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x0008; + public const int TLS_RSA_WITH_DES_CBC_SHA = 0x0009; + public const int TLS_RSA_WITH_3DES_EDE_CBC_SHA = 0x000A; + public const int TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x000B; + public const int TLS_DH_DSS_WITH_DES_CBC_SHA = 0x000C; + public const int TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA = 0x000D; + public const int TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x000E; + public const int TLS_DH_RSA_WITH_DES_CBC_SHA = 0x000F; + public const int TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA = 0x0010; + public const int TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x0011; + public const int TLS_DHE_DSS_WITH_DES_CBC_SHA = 0x0012; + public const int TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA = 0x0013; + public const int TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x0014; + public const int TLS_DHE_RSA_WITH_DES_CBC_SHA = 0x0015; + public const int TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = 0x0016; + public const int TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 = 0x0017; + public const int TLS_DH_anon_WITH_RC4_128_MD5 = 0x0018; + public const int TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA = 0x0019; + public const int TLS_DH_anon_WITH_DES_CBC_SHA = 0x001A; + public const int TLS_DH_anon_WITH_3DES_EDE_CBC_SHA = 0x001B; + + /* + * Note: The cipher suite values { 0x00, 0x1C } and { 0x00, 0x1D } are reserved to avoid + * collision with Fortezza-based cipher suites in SSL 3. + */ + + /* + * RFC 3268 + */ + public const int TLS_RSA_WITH_AES_128_CBC_SHA = 0x002F; + public const int TLS_DH_DSS_WITH_AES_128_CBC_SHA = 0x0030; + public const int TLS_DH_RSA_WITH_AES_128_CBC_SHA = 0x0031; + public const int TLS_DHE_DSS_WITH_AES_128_CBC_SHA = 0x0032; + public const int TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x0033; + public const int TLS_DH_anon_WITH_AES_128_CBC_SHA = 0x0034; + public const int TLS_RSA_WITH_AES_256_CBC_SHA = 0x0035; + public const int TLS_DH_DSS_WITH_AES_256_CBC_SHA = 0x0036; + public const int TLS_DH_RSA_WITH_AES_256_CBC_SHA = 0x0037; + public const int TLS_DHE_DSS_WITH_AES_256_CBC_SHA = 0x0038; + public const int TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x0039; + public const int TLS_DH_anon_WITH_AES_256_CBC_SHA = 0x003A; + + /* + * RFC 5932 + */ + public const int TLS_RSA_WITH_CAMELLIA_128_CBC_SHA = 0x0041; + public const int TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA = 0x0042; + public const int TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA = 0x0043; + public const int TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA = 0x0044; + public const int TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA = 0x0045; + public const int TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA = 0x0046; + + public const int TLS_RSA_WITH_CAMELLIA_256_CBC_SHA = 0x0084; + public const int TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA = 0x0085; + public const int TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA = 0x0086; + public const int TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA = 0x0087; + public const int TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA = 0x0088; + public const int TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA = 0x0089; + + public const int TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 = 0x00BA; + public const int TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 = 0x00BB; + public const int TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 = 0x00BC; + public const int TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 = 0x00BD; + public const int TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 = 0x00BE; + public const int TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256 = 0x00BF; + + public const int TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 = 0x00C0; + public const int TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 = 0x00C1; + public const int TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 = 0x00C2; + public const int TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 = 0x00C3; + public const int TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 = 0x00C4; + public const int TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256 = 0x00C5; + + /* + * RFC 4162 + */ + public const int TLS_RSA_WITH_SEED_CBC_SHA = 0x0096; + public const int TLS_DH_DSS_WITH_SEED_CBC_SHA = 0x0097; + public const int TLS_DH_RSA_WITH_SEED_CBC_SHA = 0x0098; + public const int TLS_DHE_DSS_WITH_SEED_CBC_SHA = 0x0099; + public const int TLS_DHE_RSA_WITH_SEED_CBC_SHA = 0x009A; + public const int TLS_DH_anon_WITH_SEED_CBC_SHA = 0x009B; + + /* + * RFC 4279 + */ + public const int TLS_PSK_WITH_RC4_128_SHA = 0x008A; + public const int TLS_PSK_WITH_3DES_EDE_CBC_SHA = 0x008B; + public const int TLS_PSK_WITH_AES_128_CBC_SHA = 0x008C; + public const int TLS_PSK_WITH_AES_256_CBC_SHA = 0x008D; + public const int TLS_DHE_PSK_WITH_RC4_128_SHA = 0x008E; + public const int TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA = 0x008F; + public const int TLS_DHE_PSK_WITH_AES_128_CBC_SHA = 0x0090; + public const int TLS_DHE_PSK_WITH_AES_256_CBC_SHA = 0x0091; + public const int TLS_RSA_PSK_WITH_RC4_128_SHA = 0x0092; + public const int TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA = 0x0093; + public const int TLS_RSA_PSK_WITH_AES_128_CBC_SHA = 0x0094; + public const int TLS_RSA_PSK_WITH_AES_256_CBC_SHA = 0x0095; + + /* + * RFC 4492 + */ + public const int TLS_ECDH_ECDSA_WITH_NULL_SHA = 0xC001; + public const int TLS_ECDH_ECDSA_WITH_RC4_128_SHA = 0xC002; + public const int TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA = 0xC003; + public const int TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA = 0xC004; + public const int TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA = 0xC005; + public const int TLS_ECDHE_ECDSA_WITH_NULL_SHA = 0xC006; + public const int TLS_ECDHE_ECDSA_WITH_RC4_128_SHA = 0xC007; + public const int TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA = 0xC008; + public const int TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA = 0xC009; + public const int TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA = 0xC00A; + public const int TLS_ECDH_RSA_WITH_NULL_SHA = 0xC00B; + public const int TLS_ECDH_RSA_WITH_RC4_128_SHA = 0xC00C; + public const int TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA = 0xC00D; + public const int TLS_ECDH_RSA_WITH_AES_128_CBC_SHA = 0xC00E; + public const int TLS_ECDH_RSA_WITH_AES_256_CBC_SHA = 0xC00F; + public const int TLS_ECDHE_RSA_WITH_NULL_SHA = 0xC010; + public const int TLS_ECDHE_RSA_WITH_RC4_128_SHA = 0xC011; + public const int TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA = 0xC012; + public const int TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA = 0xC013; + public const int TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA = 0xC014; + public const int TLS_ECDH_anon_WITH_NULL_SHA = 0xC015; + public const int TLS_ECDH_anon_WITH_RC4_128_SHA = 0xC016; + public const int TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA = 0xC017; + public const int TLS_ECDH_anon_WITH_AES_128_CBC_SHA = 0xC018; + public const int TLS_ECDH_anon_WITH_AES_256_CBC_SHA = 0xC019; + + /* + * RFC 4785 + */ + public const int TLS_PSK_WITH_NULL_SHA = 0x002C; + public const int TLS_DHE_PSK_WITH_NULL_SHA = 0x002D; + public const int TLS_RSA_PSK_WITH_NULL_SHA = 0x002E; + + /* + * RFC 5054 + */ + public const int TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA = 0xC01A; + public const int TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA = 0xC01B; + public const int TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA = 0xC01C; + public const int TLS_SRP_SHA_WITH_AES_128_CBC_SHA = 0xC01D; + public const int TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA = 0xC01E; + public const int TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA = 0xC01F; + public const int TLS_SRP_SHA_WITH_AES_256_CBC_SHA = 0xC020; + public const int TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA = 0xC021; + public const int TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA = 0xC022; + + /* + * RFC 5246 + */ + public const int TLS_RSA_WITH_NULL_SHA256 = 0x003B; + public const int TLS_RSA_WITH_AES_128_CBC_SHA256 = 0x003C; + public const int TLS_RSA_WITH_AES_256_CBC_SHA256 = 0x003D; + public const int TLS_DH_DSS_WITH_AES_128_CBC_SHA256 = 0x003E; + public const int TLS_DH_RSA_WITH_AES_128_CBC_SHA256 = 0x003F; + public const int TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 = 0x0040; + public const int TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = 0x0067; + public const int TLS_DH_DSS_WITH_AES_256_CBC_SHA256 = 0x0068; + public const int TLS_DH_RSA_WITH_AES_256_CBC_SHA256 = 0x0069; + public const int TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 = 0x006A; + public const int TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = 0x006B; + public const int TLS_DH_anon_WITH_AES_128_CBC_SHA256 = 0x006C; + public const int TLS_DH_anon_WITH_AES_256_CBC_SHA256 = 0x006D; + + /* + * RFC 5288 + */ + public const int TLS_RSA_WITH_AES_128_GCM_SHA256 = 0x009C; + public const int TLS_RSA_WITH_AES_256_GCM_SHA384 = 0x009D; + public const int TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 = 0x009E; + public const int TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 0x009F; + public const int TLS_DH_RSA_WITH_AES_128_GCM_SHA256 = 0x00A0; + public const int TLS_DH_RSA_WITH_AES_256_GCM_SHA384 = 0x00A1; + public const int TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 = 0x00A2; + public const int TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 = 0x00A3; + public const int TLS_DH_DSS_WITH_AES_128_GCM_SHA256 = 0x00A4; + public const int TLS_DH_DSS_WITH_AES_256_GCM_SHA384 = 0x00A5; + public const int TLS_DH_anon_WITH_AES_128_GCM_SHA256 = 0x00A6; + public const int TLS_DH_anon_WITH_AES_256_GCM_SHA384 = 0x00A7; + + /* + * RFC 5289 + */ + public const int TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = 0xC023; + public const int TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = 0xC024; + public const int TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 = 0xC025; + public const int TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 = 0xC026; + public const int TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = 0xC027; + public const int TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = 0xC028; + public const int TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 = 0xC029; + public const int TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 = 0xC02A; + public const int TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = 0xC02B; + public const int TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = 0xC02C; + public const int TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 = 0xC02D; + public const int TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 = 0xC02E; + public const int TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = 0xC02F; + public const int TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = 0xC030; + public const int TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 = 0xC031; + public const int TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 = 0xC032; + + /* + * RFC 5487 + */ + public const int TLS_PSK_WITH_AES_128_GCM_SHA256 = 0x00A8; + public const int TLS_PSK_WITH_AES_256_GCM_SHA384 = 0x00A9; + public const int TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 = 0x00AA; + public const int TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 = 0x00AB; + public const int TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 = 0x00AC; + public const int TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 = 0x00AD; + public const int TLS_PSK_WITH_AES_128_CBC_SHA256 = 0x00AE; + public const int TLS_PSK_WITH_AES_256_CBC_SHA384 = 0x00AF; + public const int TLS_PSK_WITH_NULL_SHA256 = 0x00B0; + public const int TLS_PSK_WITH_NULL_SHA384 = 0x00B1; + public const int TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 = 0x00B2; + public const int TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 = 0x00B3; + public const int TLS_DHE_PSK_WITH_NULL_SHA256 = 0x00B4; + public const int TLS_DHE_PSK_WITH_NULL_SHA384 = 0x00B5; + public const int TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 = 0x00B6; + public const int TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 = 0x00B7; + public const int TLS_RSA_PSK_WITH_NULL_SHA256 = 0x00B8; + public const int TLS_RSA_PSK_WITH_NULL_SHA384 = 0x00B9; + + /* + * RFC 5489 + */ + public const int TLS_ECDHE_PSK_WITH_RC4_128_SHA = 0xC033; + public const int TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA = 0xC034; + public const int TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA = 0xC035; + public const int TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA = 0xC036; + public const int TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 = 0xC037; + public const int TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 = 0xC038; + public const int TLS_ECDHE_PSK_WITH_NULL_SHA = 0xC039; + public const int TLS_ECDHE_PSK_WITH_NULL_SHA256 = 0xC03A; + public const int TLS_ECDHE_PSK_WITH_NULL_SHA384 = 0xC03B; + + /* + * RFC 5746 + */ + public const int TLS_EMPTY_RENEGOTIATION_INFO_SCSV = 0x00FF; + + /* + * RFC 6209 + */ + public const int TLS_RSA_WITH_ARIA_128_CBC_SHA256 = 0xC03C; + public const int TLS_RSA_WITH_ARIA_256_CBC_SHA384 = 0xC03D; + public const int TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256 = 0xC03E; + public const int TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384 = 0xC03F; + public const int TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256 = 0xC040; + public const int TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384 = 0xC041; + public const int TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256 = 0xC042; + public const int TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384 = 0xC043; + public const int TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256 = 0xC044; + public const int TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384 = 0xC045; + public const int TLS_DH_anon_WITH_ARIA_128_CBC_SHA256 = 0xC046; + public const int TLS_DH_anon_WITH_ARIA_256_CBC_SHA384 = 0xC047; + + public const int TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256 = 0xC048; + public const int TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384 = 0xC049; + public const int TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256 = 0xC04A; + public const int TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384 = 0xC04B; + public const int TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256 = 0xC04C; + public const int TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384 = 0xC04D; + public const int TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256 = 0xC04E; + public const int TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384 = 0xC04F; + + public const int TLS_RSA_WITH_ARIA_128_GCM_SHA256 = 0xC050; + public const int TLS_RSA_WITH_ARIA_256_GCM_SHA384 = 0xC051; + public const int TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256 = 0xC052; + public const int TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384 = 0xC053; + public const int TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256 = 0xC054; + public const int TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384 = 0xC055; + public const int TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256 = 0xC056; + public const int TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384 = 0xC057; + public const int TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256 = 0xC058; + public const int TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384 = 0xC059; + public const int TLS_DH_anon_WITH_ARIA_128_GCM_SHA256 = 0xC05A; + public const int TLS_DH_anon_WITH_ARIA_256_GCM_SHA384 = 0xC05B; + + public const int TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 = 0xC05C; + public const int TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 = 0xC05D; + public const int TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 = 0xC05E; + public const int TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 = 0xC05F; + public const int TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 = 0xC060; + public const int TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 = 0xC061; + public const int TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 = 0xC062; + public const int TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 = 0xC063; + + public const int TLS_PSK_WITH_ARIA_128_CBC_SHA256 = 0xC064; + public const int TLS_PSK_WITH_ARIA_256_CBC_SHA384 = 0xC065; + public const int TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256 = 0xC066; + public const int TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384 = 0xC067; + public const int TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256 = 0xC068; + public const int TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384 = 0xC069; + public const int TLS_PSK_WITH_ARIA_128_GCM_SHA256 = 0xC06A; + public const int TLS_PSK_WITH_ARIA_256_GCM_SHA384 = 0xC06B; + public const int TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256 = 0xC06C; + public const int TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384 = 0xC06D; + public const int TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256 = 0xC06E; + public const int TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384 = 0xC06F; + public const int TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256 = 0xC070; + public const int TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384 = 0xC071; + + /* + * RFC 6367 + */ + public const int TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 = 0xC072; + public const int TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 = 0xC073; + public const int TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 = 0xC074; + public const int TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 = 0xC075; + public const int TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 = 0xC076; + public const int TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 = 0xC077; + public const int TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 = 0xC078; + public const int TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 = 0xC079; + + public const int TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 = 0xC07A; + public const int TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 = 0xC07B; + public const int TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 = 0xC07C; + public const int TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 = 0xC07D; + public const int TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256 = 0xC07E; + public const int TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384 = 0xC07F; + public const int TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256 = 0xC080; + public const int TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384 = 0xC081; + public const int TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256 = 0xC082; + public const int TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384 = 0xC083; + public const int TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256 = 0xC084; + public const int TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384 = 0xC085; + public const int TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 = 0xC086; + public const int TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 = 0xC087; + public const int TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 = 0xC088; + public const int TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 = 0xC089; + public const int TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 = 0xC08A; + public const int TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 = 0xC08B; + public const int TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 = 0xC08C; + public const int TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 = 0xC08D; + + public const int TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 = 0xC08E; + public const int TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 = 0xC08F; + public const int TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 = 0xC090; + public const int TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 = 0xC091; + public const int TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 = 0xC092; + public const int TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 = 0xC093; + public const int TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 = 0xC094; + public const int TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 = 0xC095; + public const int TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 = 0xC096; + public const int TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 = 0xC097; + public const int TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 = 0xC098; + public const int TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 = 0xC099; + public const int TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 = 0xC09A; + public const int TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 = 0xC09B; + + /* + * RFC 6655 + */ + public const int TLS_RSA_WITH_AES_128_CCM = 0xC09C; + public const int TLS_RSA_WITH_AES_256_CCM = 0xC09D; + public const int TLS_DHE_RSA_WITH_AES_128_CCM = 0xC09E; + public const int TLS_DHE_RSA_WITH_AES_256_CCM = 0xC09F; + public const int TLS_RSA_WITH_AES_128_CCM_8 = 0xC0A0; + public const int TLS_RSA_WITH_AES_256_CCM_8 = 0xC0A1; + public const int TLS_DHE_RSA_WITH_AES_128_CCM_8 = 0xC0A2; + public const int TLS_DHE_RSA_WITH_AES_256_CCM_8 = 0xC0A3; + public const int TLS_PSK_WITH_AES_128_CCM = 0xC0A4; + public const int TLS_PSK_WITH_AES_256_CCM = 0xC0A5; + public const int TLS_DHE_PSK_WITH_AES_128_CCM = 0xC0A6; + public const int TLS_DHE_PSK_WITH_AES_256_CCM = 0xC0A7; + public const int TLS_PSK_WITH_AES_128_CCM_8 = 0xC0A8; + public const int TLS_PSK_WITH_AES_256_CCM_8 = 0xC0A9; + public const int TLS_PSK_DHE_WITH_AES_128_CCM_8 = 0xC0AA; + public const int TLS_PSK_DHE_WITH_AES_256_CCM_8 = 0xC0AB; + + /* + * RFC 7251 + */ + public const int TLS_ECDHE_ECDSA_WITH_AES_128_CCM = 0xC0AC; + public const int TLS_ECDHE_ECDSA_WITH_AES_256_CCM = 0xC0AD; + public const int TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 = 0xC0AE; + public const int TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 = 0xC0AF; + + /* + * RFC 7507 + */ + public const int TLS_FALLBACK_SCSV = 0x5600; + + /* + * RFC 7905 + */ + public const int TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = 0xCCA8; + public const int TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 = 0xCCA9; + public const int TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = 0xCCAA; + public const int TLS_PSK_WITH_CHACHA20_POLY1305_SHA256 = 0xCCAB; + public const int TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 = 0xCCAC; + public const int TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256 = 0xCCAD; + public const int TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256 = 0xCCAE; + + /* + * RFC 8442 + */ + public const int TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256 = 0xD001; + public const int TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384 = 0xD002; + public const int TLS_ECDHE_PSK_WITH_AES_128_CCM_8_SHA256 = 0xD003; + public const int TLS_ECDHE_PSK_WITH_AES_128_CCM_SHA256 = 0xD005; + + /* + * TLS 1.3 Section + * + * Although TLS 1.3 uses the same cipher suite space as previous versions of TLS, TLS 1.3 cipher + * suites are defined differently, only specifying the symmetric ciphers, and cannot be used for + * TLS 1.2. Similarly, cipher suites for TLS 1.2 and lower cannot be used with TLS 1.3. + */ + + /* + * RFC 8446 + */ + public const int TLS_AES_128_GCM_SHA256 = 0x1301; + public const int TLS_AES_256_GCM_SHA384 = 0x1302; + public const int TLS_CHACHA20_POLY1305_SHA256 = 0x1303; + public const int TLS_AES_128_CCM_SHA256 = 0x1304; + public const int TLS_AES_128_CCM_8_SHA256 = 0x1305; + + /* + * RFC 8998 + */ + public const int TLS_SM4_GCM_SM3 = 0x00C6; + public const int TLS_SM4_CCM_SM3 = 0x00C7; + + /* + * draft-smyshlyaev-tls12-gost-suites-10 + */ + public const int TLS_GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC = 0xC100; + public const int TLS_GOSTR341112_256_WITH_MAGMA_CTR_OMAC = 0xC101; + public const int TLS_GOSTR341112_256_WITH_28147_CNT_IMIT = 0xC102; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CipherSuite.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CipherSuite.cs.meta new file mode 100644 index 000000000..9da165bb8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CipherSuite.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 425a37738dc6b3746bb219567a5a4f15 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CipherType.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CipherType.cs new file mode 100644 index 000000000..64466ed0a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CipherType.cs @@ -0,0 +1,24 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 2246 + /// + /// Note that the values here are implementation-specific and arbitrary. It is recommended not to depend on the + /// particular values (e.g. serialization). + /// + public abstract class CipherType + { + public const int stream = 0; + public const int block = 1; + + /* + * RFC 5246 + */ + public const int aead = 2; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CipherType.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CipherType.cs.meta new file mode 100644 index 000000000..ed542e251 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CipherType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b405b048b793e8f4488759616ce161c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ClientAuthenticationType.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ClientAuthenticationType.cs new file mode 100644 index 000000000..ab813759a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ClientAuthenticationType.cs @@ -0,0 +1,18 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class ClientAuthenticationType + { + /* + * RFC 5077 4 + */ + public const short anonymous = 0; + public const short certificate_based = 1; + public const short psk = 2; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ClientAuthenticationType.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ClientAuthenticationType.cs.meta new file mode 100644 index 000000000..a2e1dabd3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ClientAuthenticationType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d9bfacecd6d3b041be7d33b3a51aebb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ClientCertificateType.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ClientCertificateType.cs new file mode 100644 index 000000000..c83075584 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ClientCertificateType.cs @@ -0,0 +1,73 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class ClientCertificateType + { + /* + * RFC 4346 7.4.4 + */ + public const short rsa_sign = 1; + public const short dss_sign = 2; + public const short rsa_fixed_dh = 3; + public const short dss_fixed_dh = 4; + public const short rsa_ephemeral_dh_RESERVED = 5; + public const short dss_ephemeral_dh_RESERVED = 6; + public const short fortezza_dms_RESERVED = 20; + + /* + * RFC 4492 5.5 + */ + public const short ecdsa_sign = 64; + public const short rsa_fixed_ecdh = 65; + public const short ecdsa_fixed_ecdh = 66; + + /* + * draft-smyshlyaev-tls12-gost-suites-10 + */ + public const short gost_sign256 = 67; + public const short gost_sign512 = 68; + + public static string GetName(short clientCertificateType) + { + switch (clientCertificateType) + { + case rsa_sign: + return "rsa_sign"; + case dss_sign: + return "dss_sign"; + case rsa_fixed_dh: + return "rsa_fixed_dh"; + case dss_fixed_dh: + return "dss_fixed_dh"; + case rsa_ephemeral_dh_RESERVED: + return "rsa_ephemeral_dh_RESERVED"; + case dss_ephemeral_dh_RESERVED: + return "dss_ephemeral_dh_RESERVED"; + case fortezza_dms_RESERVED: + return "fortezza_dms_RESERVED"; + case ecdsa_sign: + return "ecdsa_sign"; + case rsa_fixed_ecdh: + return "rsa_fixed_ecdh"; + case ecdsa_fixed_ecdh: + return "ecdsa_fixed_ecdh"; + case gost_sign256: + return "gost_sign256"; + case gost_sign512: + return "gost_sign512"; + default: + return "UNKNOWN"; + } + } + + public static string GetText(short clientCertificateType) + { + return GetName(clientCertificateType) + "(" + clientCertificateType + ")"; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ClientCertificateType.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ClientCertificateType.cs.meta new file mode 100644 index 000000000..9f58b9efb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ClientCertificateType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cec7dd44279bd7d44b134bdac988039d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ClientHello.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ClientHello.cs new file mode 100644 index 000000000..af569343c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ClientHello.cs @@ -0,0 +1,181 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class ClientHello + { + private readonly ProtocolVersion m_version; + private readonly byte[] m_random; + private readonly byte[] m_sessionID; + private readonly byte[] m_cookie; + private readonly int[] m_cipherSuites; + private readonly IDictionary m_extensions; + private readonly int m_bindersSize; + + public ClientHello(ProtocolVersion version, byte[] random, byte[] sessionID, byte[] cookie, + int[] cipherSuites, IDictionary extensions, int bindersSize) + { + this.m_version = version; + this.m_random = random; + this.m_sessionID = sessionID; + this.m_cookie = cookie; + this.m_cipherSuites = cipherSuites; + this.m_extensions = extensions; + this.m_bindersSize = bindersSize; + } + + public int BindersSize + { + get { return m_bindersSize; } + } + + public int[] CipherSuites + { + get { return m_cipherSuites; } + } + + public byte[] Cookie + { + get { return m_cookie; } + } + + public IDictionary Extensions + { + get { return m_extensions; } + } + + public byte[] Random + { + get { return m_random; } + } + + public byte[] SessionID + { + get { return m_sessionID; } + } + + public ProtocolVersion Version + { + get { return m_version; } + } + + /// Encode this to a . + /// the of the current connection. + /// the to encode to. + /// + public void Encode(TlsContext context, Stream output) + { + if (m_bindersSize < 0) + throw new TlsFatalAlert(AlertDescription.internal_error); + + TlsUtilities.WriteVersion(m_version, output); + + output.Write(m_random, 0, m_random.Length); + + TlsUtilities.WriteOpaque8(m_sessionID, output); + + if (null != m_cookie) + { + TlsUtilities.WriteOpaque8(m_cookie, output); + } + + TlsUtilities.WriteUint16ArrayWithUint16Length(m_cipherSuites, output); + + TlsUtilities.WriteUint8ArrayWithUint8Length(new short[]{ CompressionMethod.cls_null }, output); + + TlsProtocol.WriteExtensions(output, m_extensions, m_bindersSize); + } + + /// Parse a from a . + /// the to parse from. + /// for DTLS this should be non-null; the input is copied to this + /// , minus the cookie field. + /// a object. + /// + public static ClientHello Parse(MemoryStream messageInput, Stream dtlsOutput) + { + try + { + return ImplParse(messageInput, dtlsOutput); + } + catch (TlsFatalAlert e) + { + throw e; + } + catch (IOException e) + { + throw new TlsFatalAlert(AlertDescription.decode_error, e); + } + } + + /// + private static ClientHello ImplParse(MemoryStream messageInput, Stream dtlsOutput) + { + Stream input = messageInput; + if (null != dtlsOutput) + { + input = new TeeInputStream(input, dtlsOutput); + } + + ProtocolVersion clientVersion = TlsUtilities.ReadVersion(input); + + byte[] random = TlsUtilities.ReadFully(32, input); + + byte[] sessionID = TlsUtilities.ReadOpaque8(input, 0, 32); + + byte[] cookie = null; + if (null != dtlsOutput) + { + /* + * RFC 6347 This specification increases the cookie size limit to 255 bytes for greater + * future flexibility. The limit remains 32 for previous versions of DTLS. + */ + int maxCookieLength = ProtocolVersion.DTLSv12.IsEqualOrEarlierVersionOf(clientVersion) ? 255 : 32; + + cookie = TlsUtilities.ReadOpaque8(messageInput, 0, maxCookieLength); + } + + int cipher_suites_length = TlsUtilities.ReadUint16(input); + if (cipher_suites_length < 2 || (cipher_suites_length & 1) != 0 + || Convert.ToInt32(messageInput.Length - messageInput.Position) < cipher_suites_length) + { + throw new TlsFatalAlert(AlertDescription.decode_error); + } + + /* + * NOTE: "If the session_id field is not empty (implying a session resumption request) this + * vector must include at least the cipher_suite from that session." + */ + int[] cipherSuites = TlsUtilities.ReadUint16Array(cipher_suites_length / 2, input); + + short[] compressionMethods = TlsUtilities.ReadUint8ArrayWithUint8Length(input, 1); + if (!Arrays.Contains(compressionMethods, CompressionMethod.cls_null)) + throw new TlsFatalAlert(AlertDescription.handshake_failure); + + /* + * NOTE: Can't use TlsProtocol.ReadExtensions directly because TeeInputStream a) won't have + * 'Length' or 'Position' properties in the FIPS provider, b) isn't a MemoryStream. + */ + IDictionary extensions = null; + if (messageInput.Position < messageInput.Length) + { + byte[] extBytes = TlsUtilities.ReadOpaque16(input); + + TlsProtocol.AssertEmpty(messageInput); + + extensions = TlsProtocol.ReadExtensionsDataClientHello(extBytes); + } + + return new ClientHello(clientVersion, random, sessionID, cookie, cipherSuites, extensions, -1); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ClientHello.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ClientHello.cs.meta new file mode 100644 index 000000000..a7b56362e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ClientHello.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 79bf6a99ebdfa7447a7e8db8429b7045 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CombinedHash.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CombinedHash.cs new file mode 100644 index 000000000..51d59a226 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CombinedHash.cs @@ -0,0 +1,79 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// A combined hash, which implements md5(m) || sha1(m). + public class CombinedHash + : TlsHash + { + protected readonly TlsContext m_context; + protected readonly TlsCrypto m_crypto; + protected readonly TlsHash m_md5; + protected readonly TlsHash m_sha1; + + internal CombinedHash(TlsContext context, TlsHash md5, TlsHash sha1) + { + this.m_context = context; + this.m_crypto = context.Crypto; + this.m_md5 = md5; + this.m_sha1 = sha1; + } + + public CombinedHash(TlsCrypto crypto) + { + this.m_crypto = crypto; + this.m_md5 = crypto.CreateHash(CryptoHashAlgorithm.md5); + this.m_sha1 = crypto.CreateHash(CryptoHashAlgorithm.sha1); + } + + public CombinedHash(CombinedHash t) + { + this.m_context = t.m_context; + this.m_crypto = t.m_crypto; + this.m_md5 = t.m_md5.CloneHash(); + this.m_sha1 = t.m_sha1.CloneHash(); + } + + public virtual void Update(byte[] input, int inOff, int len) + { + m_md5.Update(input, inOff, len); + m_sha1.Update(input, inOff, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Update(ReadOnlySpan input) + { + m_md5.Update(input); + m_sha1.Update(input); + } +#endif + + public virtual byte[] CalculateHash() + { + if (null != m_context && TlsUtilities.IsSsl(m_context)) + { + Ssl3Utilities.CompleteCombinedHash(m_context, m_md5, m_sha1); + } + + return Arrays.Concatenate(m_md5.CalculateHash(), m_sha1.CalculateHash()); + } + + public virtual TlsHash CloneHash() + { + return new CombinedHash(this); + } + + public virtual void Reset() + { + m_md5.Reset(); + m_sha1.Reset(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CombinedHash.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CombinedHash.cs.meta new file mode 100644 index 000000000..219032dca --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CombinedHash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ee4acf699dca9064b8e29a2c0f999456 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CompressionMethod.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CompressionMethod.cs new file mode 100644 index 000000000..93b83d80b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CompressionMethod.cs @@ -0,0 +1,24 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 2246 6.1 + public abstract class CompressionMethod + { + public const short cls_null = 0; + + /* + * RFC 3749 2 + */ + public const short DEFLATE = 1; + + /* + * Values from 224 decimal (0xE0) through 255 decimal (0xFF) + * inclusive are reserved for private use. + */ + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CompressionMethod.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CompressionMethod.cs.meta new file mode 100644 index 000000000..e61a22d43 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/CompressionMethod.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b20d7a5d708bbab40983e29a05322a03 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ConnectionEnd.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ConnectionEnd.cs new file mode 100644 index 000000000..9e3cf1f14 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ConnectionEnd.cs @@ -0,0 +1,19 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 2246 + /// + /// Note that the values here are implementation-specific and arbitrary. It is recommended not to depend on the + /// particular values(e.g.serialization). + /// + public abstract class ConnectionEnd + { + public const int server = 0; + public const int client = 1; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ConnectionEnd.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ConnectionEnd.cs.meta new file mode 100644 index 000000000..fac2f4e9d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ConnectionEnd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 509c5f8c2b8be8540a69b8b93b0188b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ContentType.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ContentType.cs new file mode 100644 index 000000000..ecc82cb3d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ContentType.cs @@ -0,0 +1,42 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 2246 6.2.1 + public abstract class ContentType + { + public const short change_cipher_spec = 20; + public const short alert = 21; + public const short handshake = 22; + public const short application_data = 23; + public const short heartbeat = 24; + + public static string GetName(short contentType) + { + switch (contentType) + { + case alert: + return "alert"; + case application_data: + return "application_data"; + case change_cipher_spec: + return "change_cipher_spec"; + case handshake: + return "handshake"; + case heartbeat: + return "heartbeat"; + default: + return "UNKNOWN"; + } + } + + public static string GetText(short contentType) + { + return GetName(contentType) + "(" + contentType + ")"; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ContentType.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ContentType.cs.meta new file mode 100644 index 000000000..a1dfd93ef --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ContentType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 14836a5f99a425545bdc1a08bd7b3467 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DatagramReceiver.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DatagramReceiver.cs new file mode 100644 index 000000000..d0cb25a71 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DatagramReceiver.cs @@ -0,0 +1,23 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public interface DatagramReceiver + { + /// + int GetReceiveLimit(); + + /// + int Receive(byte[] buf, int off, int len, int waitMillis); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// + int Receive(Span buffer, int waitMillis); +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DatagramReceiver.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DatagramReceiver.cs.meta new file mode 100644 index 000000000..dcc231a71 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DatagramReceiver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d4991430345dc35478aebc69807d33d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DatagramSender.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DatagramSender.cs new file mode 100644 index 000000000..7580cc273 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DatagramSender.cs @@ -0,0 +1,23 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public interface DatagramSender + { + /// + int GetSendLimit(); + + /// + void Send(byte[] buf, int off, int len); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// + void Send(ReadOnlySpan buffer); +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DatagramSender.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DatagramSender.cs.meta new file mode 100644 index 000000000..14d4f8ae8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DatagramSender.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d8e332e062b12b4fb2ee69bb3ea9729 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DatagramTransport.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DatagramTransport.cs new file mode 100644 index 000000000..c14f5b2e9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DatagramTransport.cs @@ -0,0 +1,14 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Base interface for an object sending and receiving DTLS data. + public interface DatagramTransport + : DatagramReceiver, DatagramSender, TlsCloseable + { + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DatagramTransport.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DatagramTransport.cs.meta new file mode 100644 index 000000000..0725f8092 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DatagramTransport.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 968c0f58d4cd5bc43848df9a1ee167c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsClient.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsClient.cs new file mode 100644 index 000000000..558653360 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsClient.cs @@ -0,0 +1,52 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class DefaultTlsClient + : AbstractTlsClient + { + private static readonly int[] DefaultCipherSuites = new int[] + { + /* + * TLS 1.3 + */ + CipherSuite.TLS_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_AES_128_GCM_SHA256, + + /* + * pre-TLS 1.3 + */ + CipherSuite.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_RSA_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA, + }; + + public DefaultTlsClient(TlsCrypto crypto) + : base(crypto) + { + } + + protected override int[] GetSupportedCipherSuites() + { + return TlsUtilities.GetSupportedCipherSuites(Crypto, DefaultCipherSuites); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsClient.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsClient.cs.meta new file mode 100644 index 000000000..b1e4cca5d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsClient.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d1f5a57a4dddc64f858a5c168e225cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsCredentialedSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsCredentialedSigner.cs new file mode 100644 index 000000000..0646fc1f4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsCredentialedSigner.cs @@ -0,0 +1,70 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Container class for generating signatures that carries the signature type, parameters, public key + /// certificate and public key's associated signer object. + public class DefaultTlsCredentialedSigner + : TlsCredentialedSigner + { + protected readonly TlsCryptoParameters m_cryptoParams; + protected readonly Certificate m_certificate; + protected readonly SignatureAndHashAlgorithm m_signatureAndHashAlgorithm; + protected readonly TlsSigner m_signer; + + public DefaultTlsCredentialedSigner(TlsCryptoParameters cryptoParams, TlsSigner signer, + Certificate certificate, SignatureAndHashAlgorithm signatureAndHashAlgorithm) + { + if (certificate == null) + throw new ArgumentNullException("certificate"); + if (certificate.IsEmpty) + throw new ArgumentException("cannot be empty", "certificate"); + if (signer == null) + throw new ArgumentNullException("signer"); + + this.m_cryptoParams = cryptoParams; + this.m_certificate = certificate; + this.m_signatureAndHashAlgorithm = signatureAndHashAlgorithm; + this.m_signer = signer; + } + + public virtual Certificate Certificate + { + get { return m_certificate; } + } + + public virtual byte[] GenerateRawSignature(byte[] hash) + { + return m_signer.GenerateRawSignature(GetEffectiveAlgorithm(), hash); + } + + public virtual SignatureAndHashAlgorithm SignatureAndHashAlgorithm + { + get { return m_signatureAndHashAlgorithm; } + } + + public virtual TlsStreamSigner GetStreamSigner() + { + return m_signer.GetStreamSigner(GetEffectiveAlgorithm()); + } + + protected virtual SignatureAndHashAlgorithm GetEffectiveAlgorithm() + { + SignatureAndHashAlgorithm algorithm = null; + if (TlsImplUtilities.IsTlsV12(m_cryptoParams)) + { + algorithm = SignatureAndHashAlgorithm; + if (algorithm == null) + throw new InvalidOperationException("'signatureAndHashAlgorithm' cannot be null for (D)TLS 1.2+"); + } + return algorithm; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsCredentialedSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsCredentialedSigner.cs.meta new file mode 100644 index 000000000..a607efa30 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsCredentialedSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 25d031312974584478be22ad3b3870c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsDHGroupVerifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsDHGroupVerifier.cs new file mode 100644 index 000000000..1fa1ea544 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsDHGroupVerifier.cs @@ -0,0 +1,110 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public class DefaultTlsDHGroupVerifier + : TlsDHGroupVerifier + { + public static readonly int DefaultMinimumPrimeBits = 2048; + + private static readonly List DefaultGroups = new List(); + + private static void AddDefaultGroup(DHGroup dhGroup) + { + DefaultGroups.Add(dhGroup); + } + + static DefaultTlsDHGroupVerifier() + { + /* + * These 10 standard groups are those specified in NIST SP 800-56A Rev. 3 Appendix D. Make + * sure to consider the impact on BCJSSE's FIPS mode and/or usage with the BCFIPS provider + * before modifying this list. + */ + + AddDefaultGroup(DHStandardGroups.rfc3526_2048); + AddDefaultGroup(DHStandardGroups.rfc3526_3072); + AddDefaultGroup(DHStandardGroups.rfc3526_4096); + AddDefaultGroup(DHStandardGroups.rfc3526_6144); + AddDefaultGroup(DHStandardGroups.rfc3526_8192); + + AddDefaultGroup(DHStandardGroups.rfc7919_ffdhe2048); + AddDefaultGroup(DHStandardGroups.rfc7919_ffdhe3072); + AddDefaultGroup(DHStandardGroups.rfc7919_ffdhe4096); + AddDefaultGroup(DHStandardGroups.rfc7919_ffdhe6144); + AddDefaultGroup(DHStandardGroups.rfc7919_ffdhe8192); + } + + // IList is (DHGroup) + protected readonly IList m_groups; + protected readonly int m_minimumPrimeBits; + + /// Accept named groups and various standard DH groups with 'P' at least + /// bits. + public DefaultTlsDHGroupVerifier() + : this(DefaultMinimumPrimeBits) + { + } + + /// Accept named groups and various standard DH groups with 'P' at least the specified number of bits. + /// + /// the minimum bitlength of 'P'. + public DefaultTlsDHGroupVerifier(int minimumPrimeBits) + : this(DefaultGroups, minimumPrimeBits) + { + } + + /// Accept named groups and a custom set of group parameters, subject to a minimum bitlength for 'P'. + /// + /// a list of acceptable s. + /// the minimum bitlength of 'P'. + public DefaultTlsDHGroupVerifier(IList groups, int minimumPrimeBits) + { + this.m_groups = new List(groups); + this.m_minimumPrimeBits = minimumPrimeBits; + } + + public virtual bool Accept(DHGroup dhGroup) + { + return CheckMinimumPrimeBits(dhGroup) && CheckGroup(dhGroup); + } + + public virtual int MinimumPrimeBits + { + get { return m_minimumPrimeBits; } + } + + protected virtual bool AreGroupsEqual(DHGroup a, DHGroup b) + { + return a == b || (AreParametersEqual(a.P, b.P) && AreParametersEqual(a.G, b.G)); + } + + protected virtual bool AreParametersEqual(BigInteger a, BigInteger b) + { + return a == b || a.Equals(b); + } + + protected virtual bool CheckGroup(DHGroup dhGroup) + { + foreach (DHGroup group in m_groups) + { + if (AreGroupsEqual(dhGroup, group)) + return true; + } + return false; + } + + protected virtual bool CheckMinimumPrimeBits(DHGroup dhGroup) + { + return dhGroup.P.BitLength >= MinimumPrimeBits; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsDHGroupVerifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsDHGroupVerifier.cs.meta new file mode 100644 index 000000000..e3afef3b6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsDHGroupVerifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 577b30bd159b5ab459df3f258a3b7c6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsHeartbeat.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsHeartbeat.cs new file mode 100644 index 000000000..c0404153f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsHeartbeat.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public class DefaultTlsHeartbeat + : TlsHeartbeat + { + private readonly int idleMillis, timeoutMillis; + + private uint counter = 0U; + + public DefaultTlsHeartbeat(int idleMillis, int timeoutMillis) + { + if (idleMillis <= 0) + throw new ArgumentException("must be > 0", "idleMillis"); + if (timeoutMillis <= 0) + throw new ArgumentException("must be > 0", "timeoutMillis"); + + this.idleMillis = idleMillis; + this.timeoutMillis = timeoutMillis; + } + + public virtual byte[] GeneratePayload() + { + lock (this) + { + // NOTE: The counter naturally wraps back to 0 + return Pack.UInt32_To_BE(++counter); + } + } + + public virtual int IdleMillis + { + get { return idleMillis; } + } + + public virtual int TimeoutMillis + { + get { return timeoutMillis; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsHeartbeat.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsHeartbeat.cs.meta new file mode 100644 index 000000000..474f96c5f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsHeartbeat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8465826a6c3e6b949ac7c9e8a4c572b1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsKeyExchangeFactory.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsKeyExchangeFactory.cs new file mode 100644 index 000000000..76049aaa7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsKeyExchangeFactory.cs @@ -0,0 +1,93 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public class DefaultTlsKeyExchangeFactory + : AbstractTlsKeyExchangeFactory + { + public override TlsKeyExchange CreateDHKeyExchange(int keyExchange) + { + return new TlsDHKeyExchange(keyExchange); + } + + public override TlsKeyExchange CreateDHanonKeyExchangeClient(int keyExchange, + TlsDHGroupVerifier dhGroupVerifier) + { + return new TlsDHanonKeyExchange(keyExchange, dhGroupVerifier); + } + + public override TlsKeyExchange CreateDHanonKeyExchangeServer(int keyExchange, TlsDHConfig dhConfig) + { + return new TlsDHanonKeyExchange(keyExchange, dhConfig); + } + + public override TlsKeyExchange CreateDheKeyExchangeClient(int keyExchange, TlsDHGroupVerifier dhGroupVerifier) + { + return new TlsDheKeyExchange(keyExchange, dhGroupVerifier); + } + + public override TlsKeyExchange CreateDheKeyExchangeServer(int keyExchange, TlsDHConfig dhConfig) + { + return new TlsDheKeyExchange(keyExchange, dhConfig); + } + + public override TlsKeyExchange CreateECDHKeyExchange(int keyExchange) + { + return new TlsECDHKeyExchange(keyExchange); + } + + public override TlsKeyExchange CreateECDHanonKeyExchangeClient(int keyExchange) + { + return new TlsECDHanonKeyExchange(keyExchange); + } + + public override TlsKeyExchange CreateECDHanonKeyExchangeServer(int keyExchange, TlsECConfig ecConfig) + { + return new TlsECDHanonKeyExchange(keyExchange, ecConfig); + } + + public override TlsKeyExchange CreateECDheKeyExchangeClient(int keyExchange) + { + return new TlsECDheKeyExchange(keyExchange); + } + + public override TlsKeyExchange CreateECDheKeyExchangeServer(int keyExchange, TlsECConfig ecConfig) + { + return new TlsECDheKeyExchange(keyExchange, ecConfig); + } + + public override TlsKeyExchange CreatePskKeyExchangeClient(int keyExchange, TlsPskIdentity pskIdentity, + TlsDHGroupVerifier dhGroupVerifier) + { + return new TlsPskKeyExchange(keyExchange, pskIdentity, dhGroupVerifier); + } + + public override TlsKeyExchange CreatePskKeyExchangeServer(int keyExchange, + TlsPskIdentityManager pskIdentityManager, TlsDHConfig dhConfig, TlsECConfig ecConfig) + { + return new TlsPskKeyExchange(keyExchange, pskIdentityManager, dhConfig, ecConfig); + } + + public override TlsKeyExchange CreateRsaKeyExchange(int keyExchange) + { + return new TlsRsaKeyExchange(keyExchange); + } + + public override TlsKeyExchange CreateSrpKeyExchangeClient(int keyExchange, TlsSrpIdentity srpIdentity, + TlsSrpConfigVerifier srpConfigVerifier) + { + return new TlsSrpKeyExchange(keyExchange, srpIdentity, srpConfigVerifier); + } + + public override TlsKeyExchange CreateSrpKeyExchangeServer(int keyExchange, TlsSrpLoginParameters loginParameters) + { + return new TlsSrpKeyExchange(keyExchange, loginParameters); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsKeyExchangeFactory.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsKeyExchangeFactory.cs.meta new file mode 100644 index 000000000..0011fb3e1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsKeyExchangeFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de66321bb455cd14b913f20feeb89812 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsServer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsServer.cs new file mode 100644 index 000000000..8189a5923 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsServer.cs @@ -0,0 +1,108 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class DefaultTlsServer + : AbstractTlsServer + { + private static readonly int[] DefaultCipherSuites = new int[] + { + /* + * TLS 1.3 + */ + CipherSuite.TLS_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_AES_256_GCM_SHA384, + CipherSuite.TLS_AES_128_GCM_SHA256, + + /* + * pre-TLS 1.3 + */ + CipherSuite.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, + CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, + CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_RSA_WITH_AES_256_GCM_SHA384, + CipherSuite.TLS_RSA_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA256, + CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA, + }; + + public DefaultTlsServer(TlsCrypto crypto) + : base(crypto) + { + } + + /// + protected virtual TlsCredentialedSigner GetDsaSignerCredentials() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + /// + protected virtual TlsCredentialedSigner GetECDsaSignerCredentials() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + /// + protected virtual TlsCredentialedDecryptor GetRsaEncryptionCredentials() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + /// + protected virtual TlsCredentialedSigner GetRsaSignerCredentials() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + protected override int[] GetSupportedCipherSuites() + { + return TlsUtilities.GetSupportedCipherSuites(Crypto, DefaultCipherSuites); + } + + public override TlsCredentials GetCredentials() + { + int keyExchangeAlgorithm = m_context.SecurityParameters.KeyExchangeAlgorithm; + + switch (keyExchangeAlgorithm) + { + case KeyExchangeAlgorithm.DHE_DSS: + return GetDsaSignerCredentials(); + + case KeyExchangeAlgorithm.ECDHE_ECDSA: + return GetECDsaSignerCredentials(); + + case KeyExchangeAlgorithm.DHE_RSA: + case KeyExchangeAlgorithm.ECDHE_RSA: + return GetRsaSignerCredentials(); + + case KeyExchangeAlgorithm.RSA: + return GetRsaEncryptionCredentials(); + + default: + // Note: internal error here; selected a key exchange we don't implement! + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsServer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsServer.cs.meta new file mode 100644 index 000000000..30e84e497 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsServer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 85c5c2e4344a02547a6d09066d95f3fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsSrpConfigVerifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsSrpConfigVerifier.cs new file mode 100644 index 000000000..060b665aa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsSrpConfigVerifier.cs @@ -0,0 +1,66 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public class DefaultTlsSrpConfigVerifier + : TlsSrpConfigVerifier + { + private static readonly List DefaultGroups = new List(); + + static DefaultTlsSrpConfigVerifier() + { + DefaultGroups.Add(Srp6StandardGroups.rfc5054_1024); + DefaultGroups.Add(Srp6StandardGroups.rfc5054_1536); + DefaultGroups.Add(Srp6StandardGroups.rfc5054_2048); + DefaultGroups.Add(Srp6StandardGroups.rfc5054_3072); + DefaultGroups.Add(Srp6StandardGroups.rfc5054_4096); + DefaultGroups.Add(Srp6StandardGroups.rfc5054_6144); + DefaultGroups.Add(Srp6StandardGroups.rfc5054_8192); + } + + // IList is (SRP6Group) + protected readonly IList m_groups; + + /// Accept only the group parameters specified in RFC 5054 Appendix A. + public DefaultTlsSrpConfigVerifier() + : this(DefaultGroups) + { + } + + /// Specify a custom set of acceptable group parameters. + /// an of acceptable . + public DefaultTlsSrpConfigVerifier(IList groups) + { + this.m_groups = new List(groups); + } + + public virtual bool Accept(TlsSrpConfig srpConfig) + { + foreach (Srp6Group group in m_groups) + { + if (AreGroupsEqual(srpConfig, group)) + return true; + } + return false; + } + + protected virtual bool AreGroupsEqual(TlsSrpConfig a, Srp6Group b) + { + BigInteger[] ng = a.GetExplicitNG(); + return AreParametersEqual(ng[0], b.N) && AreParametersEqual(ng[1], b.G); + } + + protected virtual bool AreParametersEqual(BigInteger a, BigInteger b) + { + return a == b || a.Equals(b); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsSrpConfigVerifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsSrpConfigVerifier.cs.meta new file mode 100644 index 000000000..18c62da7c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DefaultTlsSrpConfigVerifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 228995bc4bcda8e4abaf5414b67c51c2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DeferredHash.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DeferredHash.cs new file mode 100644 index 000000000..f51c0fafd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DeferredHash.cs @@ -0,0 +1,260 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Buffers input until the hash algorithm is determined. + internal sealed class DeferredHash + : TlsHandshakeHash + { + private const int BufferingHashLimit = 4; + + private readonly TlsContext m_context; + + private DigestInputBuffer m_buf; + private IDictionary m_hashes; + private bool m_forceBuffering; + private bool m_sealed; + + internal DeferredHash(TlsContext context) + { + this.m_context = context; + this.m_buf = new DigestInputBuffer(); + this.m_hashes = new Dictionary(); + this.m_forceBuffering = false; + this.m_sealed = false; + } + + /// + public void CopyBufferTo(Stream output) + { + if (m_buf == null) + { + // If you see this, you need to call ForceBuffering() before SealHashAlgorithms() + throw new InvalidOperationException("Not buffering"); + } + + m_buf.CopyInputTo(output); + } + + public void ForceBuffering() + { + if (m_sealed) + throw new InvalidOperationException("Too late to force buffering"); + + this.m_forceBuffering = true; + } + + public void NotifyPrfDetermined() + { + SecurityParameters securityParameters = m_context.SecurityParameters; + + switch (securityParameters.PrfAlgorithm) + { + case PrfAlgorithm.ssl_prf_legacy: + case PrfAlgorithm.tls_prf_legacy: + { + CheckTrackingHash(CryptoHashAlgorithm.md5); + CheckTrackingHash(CryptoHashAlgorithm.sha1); + break; + } + default: + { + CheckTrackingHash(securityParameters.PrfCryptoHashAlgorithm); + break; + } + } + } + + public void TrackHashAlgorithm(int cryptoHashAlgorithm) + { + if (m_sealed) + throw new InvalidOperationException("Too late to track more hash algorithms"); + + CheckTrackingHash(cryptoHashAlgorithm); + } + + public void SealHashAlgorithms() + { + if (m_sealed) + throw new InvalidOperationException("Already sealed"); + + this.m_sealed = true; + CheckStopBuffering(); + } + + public void StopTracking() + { + SecurityParameters securityParameters = m_context.SecurityParameters; + + IDictionary newHashes = new Dictionary(); + switch (securityParameters.PrfAlgorithm) + { + case PrfAlgorithm.ssl_prf_legacy: + case PrfAlgorithm.tls_prf_legacy: + { + CloneHash(newHashes, CryptoHashAlgorithm.md5); + CloneHash(newHashes, CryptoHashAlgorithm.sha1); + break; + } + default: + { + CloneHash(newHashes, securityParameters.PrfCryptoHashAlgorithm); + break; + } + } + + this.m_buf = null; + this.m_hashes = newHashes; + this.m_forceBuffering = false; + this.m_sealed = true; + } + + public TlsHash ForkPrfHash() + { + CheckStopBuffering(); + + SecurityParameters securityParameters = m_context.SecurityParameters; + + TlsHash prfHash; + switch (securityParameters.PrfAlgorithm) + { + case PrfAlgorithm.ssl_prf_legacy: + case PrfAlgorithm.tls_prf_legacy: + { + TlsHash md5Hash = CloneHash(CryptoHashAlgorithm.md5); + TlsHash sha1Hash = CloneHash(CryptoHashAlgorithm.sha1); + prfHash = new CombinedHash(m_context, md5Hash, sha1Hash); + break; + } + default: + { + prfHash = CloneHash(securityParameters.PrfCryptoHashAlgorithm); + break; + } + } + + if (m_buf != null) + { + m_buf.UpdateDigest(prfHash); + } + + return prfHash; + } + + public byte[] GetFinalHash(int cryptoHashAlgorithm) + { + if (!m_hashes.TryGetValue(cryptoHashAlgorithm, out var hash)) + throw new InvalidOperationException("CryptoHashAlgorithm." + cryptoHashAlgorithm + + " is not being tracked"); + + CheckStopBuffering(); + + hash = hash.CloneHash(); + if (m_buf != null) + { + m_buf.UpdateDigest(hash); + } + + return hash.CalculateHash(); + } + + public void Update(byte[] input, int inOff, int len) + { + if (m_buf != null) + { + m_buf.Write(input, inOff, len); + return; + } + + foreach (TlsHash hash in m_hashes.Values) + { + hash.Update(input, inOff, len); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Update(ReadOnlySpan input) + { + if (m_buf != null) + { + m_buf.Write(input); + return; + } + + foreach (TlsHash hash in m_hashes.Values) + { + hash.Update(input); + } + } +#endif + + public byte[] CalculateHash() + { + throw new InvalidOperationException("Use 'ForkPrfHash' to get a definite hash"); + } + + public TlsHash CloneHash() + { + throw new InvalidOperationException("attempt to clone a DeferredHash"); + } + + public void Reset() + { + if (m_buf != null) + { + m_buf.SetLength(0); + return; + } + + foreach (TlsHash hash in m_hashes.Values) + { + hash.Reset(); + } + } + + private void CheckStopBuffering() + { + if (!m_forceBuffering && m_sealed && m_buf != null && m_hashes.Count <= BufferingHashLimit) + { + foreach (TlsHash hash in m_hashes.Values) + { + m_buf.UpdateDigest(hash); + } + + this.m_buf = null; + } + } + + private void CheckTrackingHash(int cryptoHashAlgorithm) + { + if (!m_hashes.ContainsKey(cryptoHashAlgorithm)) + { + TlsHash hash = m_context.Crypto.CreateHash(cryptoHashAlgorithm); + m_hashes[cryptoHashAlgorithm] = hash; + } + } + + private TlsHash CloneHash(int cryptoHashAlgorithm) + { + return m_hashes[cryptoHashAlgorithm].CloneHash(); + } + + private void CloneHash(IDictionary newHashes, int cryptoHashAlgorithm) + { + TlsHash hash = CloneHash(cryptoHashAlgorithm); + if (m_buf != null) + { + m_buf.UpdateDigest(hash); + } + newHashes[cryptoHashAlgorithm] = hash; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DeferredHash.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DeferredHash.cs.meta new file mode 100644 index 000000000..acfbbc1f6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DeferredHash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fc14c8f46d63ab24aa903171e71c2f9d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DigestInputBuffer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DigestInputBuffer.cs new file mode 100644 index 000000000..9de3e79b1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DigestInputBuffer.cs @@ -0,0 +1,27 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + internal class DigestInputBuffer + : MemoryStream + { + internal void UpdateDigest(TlsHash hash) + { + WriteTo(new TlsHashSink(hash)); + } + + /// + internal void CopyInputTo(Stream output) + { + // TODO[tls] Consider defensive copy if 'output' might be external code + WriteTo(output); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DigestInputBuffer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DigestInputBuffer.cs.meta new file mode 100644 index 000000000..8b763518b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DigestInputBuffer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 094d1c0928915c04683e61973dbbaa76 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DigitallySigned.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DigitallySigned.cs new file mode 100644 index 000000000..bfe8d9df7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DigitallySigned.cs @@ -0,0 +1,66 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class DigitallySigned + { + private readonly SignatureAndHashAlgorithm m_algorithm; + private readonly byte[] m_signature; + + public DigitallySigned(SignatureAndHashAlgorithm algorithm, byte[] signature) + { + if (signature == null) + throw new ArgumentNullException("signature"); + + this.m_algorithm = algorithm; + this.m_signature = signature; + } + + /// a (or null before TLS 1.2). + public SignatureAndHashAlgorithm Algorithm + { + get { return m_algorithm; } + } + + public byte[] Signature + { + get { return m_signature; } + } + + /// Encode this to a . + /// the to encode to. + /// + public void Encode(Stream output) + { + if (m_algorithm != null) + { + m_algorithm.Encode(output); + } + TlsUtilities.WriteOpaque16(m_signature, output); + } + + /// Parse a from a . + /// the of the current connection. + /// the to parse from. + /// a object. + /// + public static DigitallySigned Parse(TlsContext context, Stream input) + { + SignatureAndHashAlgorithm algorithm = null; + if (TlsUtilities.IsTlsV12(context)) + { + algorithm = SignatureAndHashAlgorithm.Parse(input); + + if (SignatureAlgorithm.anonymous == algorithm.Signature) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + byte[] signature = TlsUtilities.ReadOpaque16(input); + return new DigitallySigned(algorithm, signature); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DigitallySigned.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DigitallySigned.cs.meta new file mode 100644 index 000000000..378a1011f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DigitallySigned.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ea437161a607144b8543a36cf939ebe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsClientProtocol.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsClientProtocol.cs new file mode 100644 index 000000000..751886dc8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsClientProtocol.cs @@ -0,0 +1,994 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public class DtlsClientProtocol + : DtlsProtocol + { + public DtlsClientProtocol() + : base() + { + } + + /// + public virtual DtlsTransport Connect(TlsClient client, DatagramTransport transport) + { + if (client == null) + throw new ArgumentNullException("client"); + if (transport == null) + throw new ArgumentNullException("transport"); + + ClientHandshakeState state = new ClientHandshakeState(); + state.client = client; + state.clientContext = new TlsClientContextImpl(client.Crypto); + + client.Init(state.clientContext); + state.clientContext.HandshakeBeginning(client); + + SecurityParameters securityParameters = state.clientContext.SecurityParameters; + securityParameters.m_extendedPadding = client.ShouldUseExtendedPadding(); + + TlsSession sessionToResume = state.client.GetSessionToResume(); + if (sessionToResume != null && sessionToResume.IsResumable) + { + SessionParameters sessionParameters = sessionToResume.ExportSessionParameters(); + + /* + * NOTE: If we ever enable session resumption without extended_master_secret, then + * renegotiation MUST be disabled (see RFC 7627 5.4). + */ + if (sessionParameters != null + && (sessionParameters.IsExtendedMasterSecret + || (!state.client.RequiresExtendedMasterSecret() && state.client.AllowLegacyResumption()))) + { + TlsSecret masterSecret = sessionParameters.MasterSecret; + lock (masterSecret) + { + if (masterSecret.IsAlive()) + { + state.tlsSession = sessionToResume; + state.sessionParameters = sessionParameters; + state.sessionMasterSecret = state.clientContext.Crypto.AdoptSecret(masterSecret); + } + } + } + } + + DtlsRecordLayer recordLayer = new DtlsRecordLayer(state.clientContext, state.client, transport); + client.NotifyCloseHandle(recordLayer); + + try + { + return ClientHandshake(state, recordLayer); + } + catch (TlsFatalAlert fatalAlert) + { + AbortClientHandshake(state, recordLayer, fatalAlert.AlertDescription); + throw fatalAlert; + } + catch (IOException e) + { + AbortClientHandshake(state, recordLayer, AlertDescription.internal_error); + throw e; + } + catch (Exception e) + { + AbortClientHandshake(state, recordLayer, AlertDescription.internal_error); + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + finally + { + securityParameters.Clear(); + } + } + + internal virtual void AbortClientHandshake(ClientHandshakeState state, DtlsRecordLayer recordLayer, + short alertDescription) + { + recordLayer.Fail(alertDescription); + InvalidateSession(state); + } + + /// + internal virtual DtlsTransport ClientHandshake(ClientHandshakeState state, DtlsRecordLayer recordLayer) + { + SecurityParameters securityParameters = state.clientContext.SecurityParameters; + + DtlsReliableHandshake handshake = new DtlsReliableHandshake(state.clientContext, recordLayer, + state.client.GetHandshakeTimeoutMillis(), null); + + byte[] clientHelloBody = GenerateClientHello(state); + + recordLayer.SetWriteVersion(ProtocolVersion.DTLSv10); + + handshake.SendMessage(HandshakeType.client_hello, clientHelloBody); + + DtlsReliableHandshake.Message serverMessage = handshake.ReceiveMessage(); + + // TODO Consider stricter HelloVerifyRequest protocol + //if (serverMessage.Type == HandshakeType.hello_verify_request) + while (serverMessage.Type == HandshakeType.hello_verify_request) + { + byte[] cookie = ProcessHelloVerifyRequest(state, serverMessage.Body); + byte[] patched = PatchClientHelloWithCookie(clientHelloBody, cookie); + + handshake.ResetAfterHelloVerifyRequestClient(); + handshake.SendMessage(HandshakeType.client_hello, patched); + + serverMessage = handshake.ReceiveMessage(); + } + + if (serverMessage.Type == HandshakeType.server_hello) + { + ProtocolVersion recordLayerVersion = recordLayer.ReadVersion; + ReportServerVersion(state, recordLayerVersion); + recordLayer.SetWriteVersion(recordLayerVersion); + + ProcessServerHello(state, serverMessage.Body); + } + else + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + handshake.HandshakeHash.NotifyPrfDetermined(); + + ApplyMaxFragmentLengthExtension(recordLayer, securityParameters.MaxFragmentLength); + + if (state.resumedSession) + { + securityParameters.m_masterSecret = state.sessionMasterSecret; + recordLayer.InitPendingEpoch(TlsUtilities.InitCipher(state.clientContext)); + + // NOTE: Calculated exclusive of the actual Finished message from the server + securityParameters.m_peerVerifyData = TlsUtilities.CalculateVerifyData(state.clientContext, + handshake.HandshakeHash, true); + ProcessFinished(handshake.ReceiveMessageBody(HandshakeType.finished), + securityParameters.PeerVerifyData); + + // NOTE: Calculated exclusive of the Finished message itself + securityParameters.m_localVerifyData = TlsUtilities.CalculateVerifyData(state.clientContext, + handshake.HandshakeHash, false); + handshake.SendMessage(HandshakeType.finished, securityParameters.LocalVerifyData); + + handshake.Finish(); + + if (securityParameters.IsExtendedMasterSecret) + { + securityParameters.m_tlsUnique = securityParameters.PeerVerifyData; + } + + securityParameters.m_localCertificate = state.sessionParameters.LocalCertificate; + securityParameters.m_peerCertificate = state.sessionParameters.PeerCertificate; + securityParameters.m_pskIdentity = state.sessionParameters.PskIdentity; + securityParameters.m_srpIdentity = state.sessionParameters.SrpIdentity; + + state.clientContext.HandshakeComplete(state.client, state.tlsSession); + + recordLayer.InitHeartbeat(state.heartbeat, + HeartbeatMode.peer_allowed_to_send == state.heartbeatPolicy); + + return new DtlsTransport(recordLayer, state.client.IgnoreCorruptDtlsRecords); + } + + InvalidateSession(state); + state.tlsSession = TlsUtilities.ImportSession(securityParameters.SessionID, null); + + serverMessage = handshake.ReceiveMessage(); + + if (serverMessage.Type == HandshakeType.supplemental_data) + { + ProcessServerSupplementalData(state, serverMessage.Body); + serverMessage = handshake.ReceiveMessage(); + } + else + { + state.client.ProcessServerSupplementalData(null); + } + + state.keyExchange = TlsUtilities.InitKeyExchangeClient(state.clientContext, state.client); + + if (serverMessage.Type == HandshakeType.certificate) + { + ProcessServerCertificate(state, serverMessage.Body); + serverMessage = handshake.ReceiveMessage(); + } + else + { + // Okay, Certificate is optional + state.authentication = null; + } + + if (serverMessage.Type == HandshakeType.certificate_status) + { + if (securityParameters.StatusRequestVersion < 1) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + ProcessCertificateStatus(state, serverMessage.Body); + serverMessage = handshake.ReceiveMessage(); + } + else + { + // Okay, CertificateStatus is optional + } + + TlsUtilities.ProcessServerCertificate(state.clientContext, state.certificateStatus, state.keyExchange, + state.authentication, state.clientExtensions, state.serverExtensions); + + if (serverMessage.Type == HandshakeType.server_key_exchange) + { + ProcessServerKeyExchange(state, serverMessage.Body); + serverMessage = handshake.ReceiveMessage(); + } + else + { + // Okay, ServerKeyExchange is optional + state.keyExchange.SkipServerKeyExchange(); + } + + if (serverMessage.Type == HandshakeType.certificate_request) + { + ProcessCertificateRequest(state, serverMessage.Body); + + TlsUtilities.EstablishServerSigAlgs(securityParameters, state.certificateRequest); + + serverMessage = handshake.ReceiveMessage(); + } + else + { + // Okay, CertificateRequest is optional + } + + if (serverMessage.Type == HandshakeType.server_hello_done) + { + if (serverMessage.Body.Length != 0) + { + throw new TlsFatalAlert(AlertDescription.decode_error); + } + } + else + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + TlsCredentials clientAuthCredentials = null; + TlsCredentialedSigner clientAuthSigner = null; + Certificate clientAuthCertificate = null; + SignatureAndHashAlgorithm clientAuthAlgorithm = null; + TlsStreamSigner clientAuthStreamSigner = null; + + if (state.certificateRequest != null) + { + clientAuthCredentials = TlsUtilities.EstablishClientCredentials(state.authentication, + state.certificateRequest); + if (clientAuthCredentials != null) + { + clientAuthCertificate = clientAuthCredentials.Certificate; + + if (clientAuthCredentials is TlsCredentialedSigner) + { + clientAuthSigner = (TlsCredentialedSigner)clientAuthCredentials; + clientAuthAlgorithm = TlsUtilities.GetSignatureAndHashAlgorithm( + securityParameters.NegotiatedVersion, clientAuthSigner); + clientAuthStreamSigner = clientAuthSigner.GetStreamSigner(); + + if (ProtocolVersion.DTLSv12.Equals(securityParameters.NegotiatedVersion)) + { + TlsUtilities.VerifySupportedSignatureAlgorithm(securityParameters.ServerSigAlgs, + clientAuthAlgorithm, AlertDescription.internal_error); + + if (clientAuthStreamSigner == null) + { + TlsUtilities.TrackHashAlgorithmClient(handshake.HandshakeHash, clientAuthAlgorithm); + } + } + + if (clientAuthStreamSigner != null) + { + handshake.HandshakeHash.ForceBuffering(); + } + } + } + } + + handshake.HandshakeHash.SealHashAlgorithms(); + + if (clientAuthCredentials == null) + { + state.keyExchange.SkipClientCredentials(); + } + else + { + state.keyExchange.ProcessClientCredentials(clientAuthCredentials); + } + + var clientSupplementalData = state.client.GetClientSupplementalData(); + if (clientSupplementalData != null) + { + byte[] supplementalDataBody = GenerateSupplementalData(clientSupplementalData); + handshake.SendMessage(HandshakeType.supplemental_data, supplementalDataBody); + } + + if (null != state.certificateRequest) + { + SendCertificateMessage(state.clientContext, handshake, clientAuthCertificate, null); + } + + byte[] clientKeyExchangeBody = GenerateClientKeyExchange(state); + handshake.SendMessage(HandshakeType.client_key_exchange, clientKeyExchangeBody); + + securityParameters.m_sessionHash = TlsUtilities.GetCurrentPrfHash(handshake.HandshakeHash); + + TlsProtocol.EstablishMasterSecret(state.clientContext, state.keyExchange); + recordLayer.InitPendingEpoch(TlsUtilities.InitCipher(state.clientContext)); + + if (clientAuthSigner != null) + { + DigitallySigned certificateVerify = TlsUtilities.GenerateCertificateVerifyClient(state.clientContext, + clientAuthSigner, clientAuthAlgorithm, clientAuthStreamSigner, handshake.HandshakeHash); + byte[] certificateVerifyBody = GenerateCertificateVerify(state, certificateVerify); + handshake.SendMessage(HandshakeType.certificate_verify, certificateVerifyBody); + } + + handshake.PrepareToFinish(); + + securityParameters.m_localVerifyData = TlsUtilities.CalculateVerifyData(state.clientContext, + handshake.HandshakeHash, false); + handshake.SendMessage(HandshakeType.finished, securityParameters.LocalVerifyData); + + if (state.expectSessionTicket) + { + serverMessage = handshake.ReceiveMessage(); + if (serverMessage.Type == HandshakeType.new_session_ticket) + { + /* + * RFC 5077 3.4. If the client receives a session ticket from the server, then it + * discards any Session ID that was sent in the ServerHello. + */ + securityParameters.m_sessionID = TlsUtilities.EmptyBytes; + InvalidateSession(state); + state.tlsSession = TlsUtilities.ImportSession(securityParameters.SessionID, null); + + ProcessNewSessionTicket(state, serverMessage.Body); + } + else + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + } + + // NOTE: Calculated exclusive of the actual Finished message from the server + securityParameters.m_peerVerifyData = TlsUtilities.CalculateVerifyData(state.clientContext, + handshake.HandshakeHash, true); + ProcessFinished(handshake.ReceiveMessageBody(HandshakeType.finished), securityParameters.PeerVerifyData); + + handshake.Finish(); + + state.sessionMasterSecret = securityParameters.MasterSecret; + + state.sessionParameters = new SessionParameters.Builder() + .SetCipherSuite(securityParameters.CipherSuite) + .SetExtendedMasterSecret(securityParameters.IsExtendedMasterSecret) + .SetLocalCertificate(securityParameters.LocalCertificate) + .SetMasterSecret(state.clientContext.Crypto.AdoptSecret(state.sessionMasterSecret)) + .SetNegotiatedVersion(securityParameters.NegotiatedVersion) + .SetPeerCertificate(securityParameters.PeerCertificate) + .SetPskIdentity(securityParameters.PskIdentity) + .SetSrpIdentity(securityParameters.SrpIdentity) + // TODO Consider filtering extensions that aren't relevant to resumed sessions + .SetServerExtensions(state.serverExtensions) + .Build(); + + state.tlsSession = TlsUtilities.ImportSession(securityParameters.SessionID, state.sessionParameters); + + securityParameters.m_tlsUnique = securityParameters.LocalVerifyData; + + state.clientContext.HandshakeComplete(state.client, state.tlsSession); + + recordLayer.InitHeartbeat(state.heartbeat, HeartbeatMode.peer_allowed_to_send == state.heartbeatPolicy); + + return new DtlsTransport(recordLayer, state.client.IgnoreCorruptDtlsRecords); + } + + /// + protected virtual byte[] GenerateCertificateVerify(ClientHandshakeState state, + DigitallySigned certificateVerify) + { + MemoryStream buf = new MemoryStream(); + certificateVerify.Encode(buf); + return buf.ToArray(); + } + + /// + protected virtual byte[] GenerateClientHello(ClientHandshakeState state) + { + TlsClientContextImpl context = state.clientContext; + SecurityParameters securityParameters = context.SecurityParameters; + + context.SetClientSupportedVersions(state.client.GetProtocolVersions()); + + ProtocolVersion client_version = ProtocolVersion.GetLatestDtls(context.ClientSupportedVersions); + if (!ProtocolVersion.IsSupportedDtlsVersionClient(client_version)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + context.SetClientVersion(client_version); + + { + bool useGmtUnixTime = ProtocolVersion.DTLSv12.IsEqualOrLaterVersionOf(client_version) + && state.client.ShouldUseGmtUnixTime(); + + securityParameters.m_clientRandom = TlsProtocol.CreateRandomBlock(useGmtUnixTime, state.clientContext); + } + + byte[] session_id = TlsUtilities.GetSessionID(state.tlsSession); + + bool fallback = state.client.IsFallback(); + + state.offeredCipherSuites = state.client.GetCipherSuites(); + + if (session_id.Length > 0 && state.sessionParameters != null) + { + if (!Arrays.Contains(state.offeredCipherSuites, state.sessionParameters.CipherSuite)) + { + session_id = TlsUtilities.EmptyBytes; + } + } + + state.clientExtensions = TlsExtensionsUtilities.EnsureExtensionsInitialised( + state.client.GetClientExtensions()); + + ProtocolVersion legacy_version = client_version; + if (client_version.IsLaterVersionOf(ProtocolVersion.DTLSv12)) + { + legacy_version = ProtocolVersion.DTLSv12; + + TlsExtensionsUtilities.AddSupportedVersionsExtensionClient(state.clientExtensions, + context.ClientSupportedVersions); + } + + context.SetRsaPreMasterSecretVersion(legacy_version); + + securityParameters.m_clientServerNames = TlsExtensionsUtilities.GetServerNameExtensionClient( + state.clientExtensions); + + if (TlsUtilities.IsSignatureAlgorithmsExtensionAllowed(client_version)) + { + TlsUtilities.EstablishClientSigAlgs(securityParameters, state.clientExtensions); + } + + securityParameters.m_clientSupportedGroups = TlsExtensionsUtilities.GetSupportedGroupsExtension( + state.clientExtensions); + + state.clientAgreements = TlsUtilities.AddKeyShareToClientHello(state.clientContext, state.client, + state.clientExtensions); + + if (TlsUtilities.IsExtendedMasterSecretOptionalDtls(context.ClientSupportedVersions) + && state.client.ShouldUseExtendedMasterSecret()) + { + TlsExtensionsUtilities.AddExtendedMasterSecretExtension(state.clientExtensions); + } + else if (!TlsUtilities.IsTlsV13(client_version) + && state.client.RequiresExtendedMasterSecret()) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + // Cipher Suites (and SCSV) + { + /* + * RFC 5746 3.4. The client MUST include either an empty "renegotiation_info" extension, + * or the TLS_EMPTY_RENEGOTIATION_INFO_SCSV signaling cipher suite value in the + * ClientHello. Including both is NOT RECOMMENDED. + */ + bool noRenegExt = (null == TlsUtilities.GetExtensionData(state.clientExtensions, + ExtensionType.renegotiation_info)); + bool noRenegScsv = !Arrays.Contains(state.offeredCipherSuites, + CipherSuite.TLS_EMPTY_RENEGOTIATION_INFO_SCSV); + + if (noRenegExt && noRenegScsv) + { + state.offeredCipherSuites = Arrays.Append(state.offeredCipherSuites, + CipherSuite.TLS_EMPTY_RENEGOTIATION_INFO_SCSV); + } + } + + /* (Fallback SCSV) + * RFC 7507 4. If a client sends a ClientHello.client_version containing a lower value + * than the latest (highest-valued) version supported by the client, it SHOULD include + * the TLS_FALLBACK_SCSV cipher suite value in ClientHello.cipher_suites [..]. (The + * client SHOULD put TLS_FALLBACK_SCSV after all cipher suites that it actually intends + * to negotiate.) + */ + if (fallback && !Arrays.Contains(state.offeredCipherSuites, CipherSuite.TLS_FALLBACK_SCSV)) + { + state.offeredCipherSuites = Arrays.Append(state.offeredCipherSuites, CipherSuite.TLS_FALLBACK_SCSV); + } + + // Heartbeats + { + state.heartbeat = state.client.GetHeartbeat(); + state.heartbeatPolicy = state.client.GetHeartbeatPolicy(); + + if (null != state.heartbeat || HeartbeatMode.peer_allowed_to_send == state.heartbeatPolicy) + { + TlsExtensionsUtilities.AddHeartbeatExtension(state.clientExtensions, + new HeartbeatExtension(state.heartbeatPolicy)); + } + } + + + + ClientHello clientHello = new ClientHello(legacy_version, securityParameters.ClientRandom, session_id, + TlsUtilities.EmptyBytes, state.offeredCipherSuites, state.clientExtensions, 0); + + MemoryStream buf = new MemoryStream(); + clientHello.Encode(state.clientContext, buf); + return buf.ToArray(); + } + + /// + protected virtual byte[] GenerateClientKeyExchange(ClientHandshakeState state) + { + MemoryStream buf = new MemoryStream(); + state.keyExchange.GenerateClientKeyExchange(buf); + return buf.ToArray(); + } + + protected virtual void InvalidateSession(ClientHandshakeState state) + { + if (state.sessionMasterSecret != null) + { + state.sessionMasterSecret.Destroy(); + state.sessionMasterSecret = null; + } + + if (state.sessionParameters != null) + { + state.sessionParameters.Clear(); + state.sessionParameters = null; + } + + if (state.tlsSession != null) + { + state.tlsSession.Invalidate(); + state.tlsSession = null; + } + } + + /// + protected virtual void ProcessCertificateRequest(ClientHandshakeState state, byte[] body) + { + if (null == state.authentication) + { + /* + * RFC 2246 7.4.4. It is a fatal handshake_failure alert for an anonymous server to + * request client identification. + */ + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + + MemoryStream buf = new MemoryStream(body, false); + + CertificateRequest certificateRequest = CertificateRequest.Parse(state.clientContext, buf); + + TlsProtocol.AssertEmpty(buf); + + state.certificateRequest = TlsUtilities.ValidateCertificateRequest(certificateRequest, state.keyExchange); + + state.clientContext.SecurityParameters.m_clientCertificateType = + TlsExtensionsUtilities.GetClientCertificateTypeExtensionServer(state.serverExtensions, + CertificateType.X509); + } + + /// + protected virtual void ProcessCertificateStatus(ClientHandshakeState state, byte[] body) + { + MemoryStream buf = new MemoryStream(body, false); + + // TODO[tls13] Ensure this cannot happen for (D)TLS1.3+ + state.certificateStatus = CertificateStatus.Parse(state.clientContext, buf); + + TlsProtocol.AssertEmpty(buf); + } + + /// + protected virtual byte[] ProcessHelloVerifyRequest(ClientHandshakeState state, byte[] body) + { + MemoryStream buf = new MemoryStream(body, false); + + ProtocolVersion server_version = TlsUtilities.ReadVersion(buf); + + /* + * RFC 6347 This specification increases the cookie size limit to 255 bytes for greater + * future flexibility. The limit remains 32 for previous versions of DTLS. + */ + int maxCookieLength = ProtocolVersion.DTLSv12.IsEqualOrEarlierVersionOf(server_version) ? 255 : 32; + + byte[] cookie = TlsUtilities.ReadOpaque8(buf, 0, maxCookieLength); + + TlsProtocol.AssertEmpty(buf); + + // TODO Seems this behaviour is not yet in line with OpenSSL for DTLS 1.2 + //ReportServerVersion(state, server_version); + if (!server_version.IsEqualOrEarlierVersionOf(state.clientContext.ClientVersion)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + return cookie; + } + + /// + protected virtual void ProcessNewSessionTicket(ClientHandshakeState state, byte[] body) + { + MemoryStream buf = new MemoryStream(body, false); + + NewSessionTicket newSessionTicket = NewSessionTicket.Parse(buf); + + TlsProtocol.AssertEmpty(buf); + + state.client.NotifyNewSessionTicket(newSessionTicket); + } + + /// + protected virtual void ProcessServerCertificate(ClientHandshakeState state, byte[] body) + { + state.authentication = TlsUtilities.ReceiveServerCertificate(state.clientContext, state.client, + new MemoryStream(body, false), state.serverExtensions); + } + + /// + protected virtual void ProcessServerHello(ClientHandshakeState state, byte[] body) + { + MemoryStream buf = new MemoryStream(body, false); + + ServerHello serverHello = ServerHello.Parse(buf); + ProtocolVersion server_version = serverHello.Version; + + state.serverExtensions = serverHello.Extensions; + + + + SecurityParameters securityParameters = state.clientContext.SecurityParameters; + + // TODO[dtls13] Check supported_version extension for negotiated version + + ReportServerVersion(state, server_version); + + securityParameters.m_serverRandom = serverHello.Random; + + if (!state.clientContext.ClientVersion.Equals(server_version)) + { + TlsUtilities.CheckDowngradeMarker(server_version, securityParameters.ServerRandom); + } + + { + byte[] selectedSessionID = serverHello.SessionID; + securityParameters.m_sessionID = selectedSessionID; + state.client.NotifySessionID(selectedSessionID); + state.resumedSession = selectedSessionID.Length > 0 && state.tlsSession != null + && Arrays.AreEqual(selectedSessionID, state.tlsSession.SessionID); + } + + /* + * Find out which CipherSuite the server has chosen and check that it was one of the offered + * ones, and is a valid selection for the negotiated version. + */ + { + int cipherSuite = ValidateSelectedCipherSuite(serverHello.CipherSuite, + AlertDescription.illegal_parameter); + + if (!TlsUtilities.IsValidCipherSuiteSelection(state.offeredCipherSuites, cipherSuite) || + !TlsUtilities.IsValidVersionForCipherSuite(cipherSuite, securityParameters.NegotiatedVersion)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + TlsUtilities.NegotiatedCipherSuite(securityParameters, cipherSuite); + state.client.NotifySelectedCipherSuite(cipherSuite); + } + + /* + * RFC3546 2.2 The extended server hello message format MAY be sent in place of the server + * hello message when the client has requested extended functionality via the extended + * client hello message specified in Section 2.1. ... Note that the extended server hello + * message is only sent in response to an extended client hello message. This prevents the + * possibility that the extended server hello message could "break" existing TLS 1.0 + * clients. + */ + + /* + * TODO RFC 3546 2.3 If [...] the older session is resumed, then the server MUST ignore + * extensions appearing in the client hello, and send a server hello containing no + * extensions. + */ + + /* + * RFC 7627 4. Clients and servers SHOULD NOT accept handshakes that do not use the extended + * master secret [..]. (and see 5.2, 5.3) + * + * RFC 8446 Appendix D. Because TLS 1.3 always hashes in the transcript up to the server + * Finished, implementations which support both TLS 1.3 and earlier versions SHOULD indicate + * the use of the Extended Master Secret extension in their APIs whenever TLS 1.3 is used. + */ + if (TlsUtilities.IsTlsV13(server_version)) + { + securityParameters.m_extendedMasterSecret = true; + } + else + { + bool acceptedExtendedMasterSecret = TlsExtensionsUtilities.HasExtendedMasterSecretExtension( + state.serverExtensions); + + if (acceptedExtendedMasterSecret) + { + if (!state.resumedSession && !state.client.ShouldUseExtendedMasterSecret()) + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + else + { + if (state.client.RequiresExtendedMasterSecret() + || (state.resumedSession && !state.client.AllowLegacyResumption())) + { + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + } + + securityParameters.m_extendedMasterSecret = acceptedExtendedMasterSecret; + } + + /* + * + * RFC 3546 2.2 Note that the extended server hello message is only sent in response to an + * extended client hello message. However, see RFC 5746 exception below. We always include + * the SCSV, so an Extended Server Hello is always allowed. + */ + if (state.serverExtensions != null) + { + foreach (int extType in state.serverExtensions.Keys) + { + /* + * RFC 5746 3.6. Note that sending a "renegotiation_info" extension in response to a + * ClientHello containing only the SCSV is an explicit exception to the prohibition + * in RFC 5246, Section 7.4.1.4, on the server sending unsolicited extensions and is + * only allowed because the client is signaling its willingness to receive the + * extension via the TLS_EMPTY_RENEGOTIATION_INFO_SCSV SCSV. + */ + if (extType == ExtensionType.renegotiation_info) + continue; + + /* + * RFC 5246 7.4.1.4 An extension type MUST NOT appear in the ServerHello unless the + * same extension type appeared in the corresponding ClientHello. If a client + * receives an extension type in ServerHello that it did not request in the + * associated ClientHello, it MUST abort the handshake with an unsupported_extension + * fatal alert. + */ + if (null == TlsUtilities.GetExtensionData(state.clientExtensions, extType)) + throw new TlsFatalAlert(AlertDescription.unsupported_extension); + + /* + * RFC 3546 2.3. If [...] the older session is resumed, then the server MUST ignore + * extensions appearing in the client hello, and send a server hello containing no + * extensions[.] + */ + if (state.resumedSession) + { + // TODO[compat-gnutls] GnuTLS test server sends server extensions e.g. ec_point_formats + // TODO[compat-openssl] OpenSSL test server sends server extensions e.g. ec_point_formats + // TODO[compat-polarssl] PolarSSL test server sends server extensions e.g. ec_point_formats + //throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + } + } + + /* + * RFC 5746 3.4. Client Behavior: Initial Handshake + */ + { + /* + * When a ServerHello is received, the client MUST check if it includes the + * "renegotiation_info" extension: + */ + byte[] renegExtData = TlsUtilities.GetExtensionData(state.serverExtensions, + ExtensionType.renegotiation_info); + if (renegExtData != null) + { + /* + * If the extension is present, set the secure_renegotiation flag to TRUE. The + * client MUST then verify that the length of the "renegotiated_connection" + * field is zero, and if it is not, MUST abort the handshake (by sending a fatal + * handshake_failure alert). + */ + securityParameters.m_secureRenegotiation = true; + + if (!Arrays.ConstantTimeAreEqual(renegExtData, + TlsProtocol.CreateRenegotiationInfo(TlsUtilities.EmptyBytes))) + { + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + } + } + + // TODO[compat-gnutls] GnuTLS test server fails to send renegotiation_info extension when resuming + state.client.NotifySecureRenegotiation(securityParameters.IsSecureRenegotiation); + + /* + * RFC 7301 3.1. When session resumption or session tickets [...] are used, the previous + * contents of this extension are irrelevant, and only the values in the new handshake + * messages are considered. + */ + securityParameters.m_applicationProtocol = TlsExtensionsUtilities.GetAlpnExtensionServer( + state.serverExtensions); + securityParameters.m_applicationProtocolSet = true; + + // Heartbeats + { + HeartbeatExtension heartbeatExtension = TlsExtensionsUtilities.GetHeartbeatExtension( + state.serverExtensions); + if (null == heartbeatExtension) + { + state.heartbeat = null; + state.heartbeatPolicy = HeartbeatMode.peer_not_allowed_to_send; + } + else if (HeartbeatMode.peer_allowed_to_send != heartbeatExtension.Mode) + { + state.heartbeat = null; + } + } + + + + var sessionClientExtensions = state.clientExtensions; + var sessionServerExtensions = state.serverExtensions; + + if (state.resumedSession) + { + if (securityParameters.CipherSuite != state.sessionParameters.CipherSuite + || !server_version.Equals(state.sessionParameters.NegotiatedVersion)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + sessionClientExtensions = null; + sessionServerExtensions = state.sessionParameters.ReadServerExtensions(); + } + + if (sessionServerExtensions != null && sessionServerExtensions.Count > 0) + { + { + /* + * RFC 7366 3. If a server receives an encrypt-then-MAC request extension from a client + * and then selects a stream or Authenticated Encryption with Associated Data (AEAD) + * ciphersuite, it MUST NOT send an encrypt-then-MAC response extension back to the + * client. + */ + bool serverSentEncryptThenMac = TlsExtensionsUtilities.HasEncryptThenMacExtension( + sessionServerExtensions); + if (serverSentEncryptThenMac && !TlsUtilities.IsBlockCipherSuite(securityParameters.CipherSuite)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + securityParameters.m_encryptThenMac = serverSentEncryptThenMac; + } + + securityParameters.m_maxFragmentLength = EvaluateMaxFragmentLengthExtension(state.resumedSession, + sessionClientExtensions, sessionServerExtensions, AlertDescription.illegal_parameter); + + securityParameters.m_truncatedHmac = TlsExtensionsUtilities.HasTruncatedHmacExtension( + sessionServerExtensions); + + if (!state.resumedSession) + { + // TODO[tls13] See RFC 8446 4.4.2.1 + if (TlsUtilities.HasExpectedEmptyExtensionData(sessionServerExtensions, + ExtensionType.status_request_v2, AlertDescription.illegal_parameter)) + { + securityParameters.m_statusRequestVersion = 2; + } + else if (TlsUtilities.HasExpectedEmptyExtensionData(sessionServerExtensions, + ExtensionType.status_request, AlertDescription.illegal_parameter)) + { + securityParameters.m_statusRequestVersion = 1; + } + } + + state.expectSessionTicket = !state.resumedSession + && TlsUtilities.HasExpectedEmptyExtensionData(sessionServerExtensions, + ExtensionType.session_ticket, AlertDescription.illegal_parameter); + } + + if (sessionClientExtensions != null) + { + state.client.ProcessServerExtensions(sessionServerExtensions); + } + } + + /// + protected virtual void ProcessServerKeyExchange(ClientHandshakeState state, byte[] body) + { + MemoryStream buf = new MemoryStream(body, false); + state.keyExchange.ProcessServerKeyExchange(buf); + TlsProtocol.AssertEmpty(buf); + } + + /// + protected virtual void ProcessServerSupplementalData(ClientHandshakeState state, byte[] body) + { + MemoryStream buf = new MemoryStream(body, false); + var serverSupplementalData = TlsProtocol.ReadSupplementalDataMessage(buf); + state.client.ProcessServerSupplementalData(serverSupplementalData); + } + + /// + protected virtual void ReportServerVersion(ClientHandshakeState state, ProtocolVersion server_version) + { + TlsClientContextImpl context = state.clientContext; + SecurityParameters securityParameters = context.SecurityParameters; + + ProtocolVersion currentServerVersion = securityParameters.NegotiatedVersion; + if (null != currentServerVersion) + { + if (!currentServerVersion.Equals(server_version)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + return; + } + + if (!ProtocolVersion.Contains(context.ClientSupportedVersions, server_version)) + throw new TlsFatalAlert(AlertDescription.protocol_version); + + securityParameters.m_negotiatedVersion = server_version; + + TlsUtilities.NegotiatedVersionDtlsClient(state.clientContext, state.client); + } + + /// + protected static byte[] PatchClientHelloWithCookie(byte[] clientHelloBody, byte[] cookie) + { + int sessionIDPos = 34; + int sessionIDLength = TlsUtilities.ReadUint8(clientHelloBody, sessionIDPos); + + int cookieLengthPos = sessionIDPos + 1 + sessionIDLength; + int cookiePos = cookieLengthPos + 1; + + byte[] patched = new byte[clientHelloBody.Length + cookie.Length]; + Array.Copy(clientHelloBody, 0, patched, 0, cookieLengthPos); + TlsUtilities.CheckUint8(cookie.Length); + TlsUtilities.WriteUint8(cookie.Length, patched, cookieLengthPos); + Array.Copy(cookie, 0, patched, cookiePos, cookie.Length); + Array.Copy(clientHelloBody, cookiePos, patched, cookiePos + cookie.Length, + clientHelloBody.Length - cookiePos); + + return patched; + } + + protected internal class ClientHandshakeState + { + internal TlsClient client = null; + internal TlsClientContextImpl clientContext = null; + internal TlsSession tlsSession = null; + internal SessionParameters sessionParameters = null; + internal TlsSecret sessionMasterSecret = null; + internal SessionParameters.Builder sessionParametersBuilder = null; + internal int[] offeredCipherSuites = null; + internal IDictionary clientExtensions = null; + internal IDictionary serverExtensions = null; + internal bool resumedSession = false; + internal bool expectSessionTicket = false; + internal IDictionary clientAgreements = null; + internal TlsKeyExchange keyExchange = null; + internal TlsAuthentication authentication = null; + internal CertificateStatus certificateStatus = null; + internal CertificateRequest certificateRequest = null; + internal TlsHeartbeat heartbeat = null; + internal short heartbeatPolicy = HeartbeatMode.peer_not_allowed_to_send; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsClientProtocol.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsClientProtocol.cs.meta new file mode 100644 index 000000000..a11f1a326 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsClientProtocol.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c25cdfd141425774d806cd428cfa1009 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsEpoch.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsEpoch.cs new file mode 100644 index 000000000..87c835a07 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsEpoch.cs @@ -0,0 +1,65 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + internal sealed class DtlsEpoch + { + private readonly DtlsReplayWindow m_replayWindow = new DtlsReplayWindow(); + + private readonly int m_epoch; + private readonly TlsCipher m_cipher; + + private long m_sequenceNumber = 0; + + internal DtlsEpoch(int epoch, TlsCipher cipher) + { + if (epoch < 0) + throw new ArgumentException("must be >= 0", "epoch"); + if (cipher == null) + throw new ArgumentNullException("cipher"); + + this.m_epoch = epoch; + this.m_cipher = cipher; + } + + /// + internal long AllocateSequenceNumber() + { + lock (this) + { + if (m_sequenceNumber >= (1L << 48)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return m_sequenceNumber++; + } + } + + internal TlsCipher Cipher + { + get { return m_cipher; } + } + + internal int Epoch + { + get { return m_epoch; } + } + + internal DtlsReplayWindow ReplayWindow + { + get { return m_replayWindow; } + } + + internal long SequenceNumber + { + get { lock (this) return m_sequenceNumber; } + set { lock (this) this.m_sequenceNumber = value; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsEpoch.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsEpoch.cs.meta new file mode 100644 index 000000000..21404e17c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsEpoch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aff9734b72c417f4593fd08898bb4f7e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsHandshakeRetransmit.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsHandshakeRetransmit.cs new file mode 100644 index 000000000..921df6699 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsHandshakeRetransmit.cs @@ -0,0 +1,15 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + internal interface DtlsHandshakeRetransmit + { + /// + void ReceivedHandshakeRecord(int epoch, byte[] buf, int off, int len); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsHandshakeRetransmit.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsHandshakeRetransmit.cs.meta new file mode 100644 index 000000000..76ed9bf03 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsHandshakeRetransmit.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e308d0ea7bca5054eb2e183f92db4371 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsProtocol.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsProtocol.cs new file mode 100644 index 000000000..6b69a6192 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsProtocol.cs @@ -0,0 +1,112 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class DtlsProtocol + { + internal DtlsProtocol() + { + } + + /// + internal virtual void ProcessFinished(byte[] body, byte[] expected_verify_data) + { + MemoryStream buf = new MemoryStream(body, false); + + byte[] verify_data = TlsUtilities.ReadFully(expected_verify_data.Length, buf); + + TlsProtocol.AssertEmpty(buf); + + if (!Arrays.ConstantTimeAreEqual(expected_verify_data, verify_data)) + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + + /// + internal static void ApplyMaxFragmentLengthExtension(DtlsRecordLayer recordLayer, short maxFragmentLength) + { + if (maxFragmentLength >= 0) + { + if (!MaxFragmentLength.IsValid(maxFragmentLength)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + int plainTextLimit = 1 << (8 + maxFragmentLength); + recordLayer.SetPlaintextLimit(plainTextLimit); + } + } + + /// + internal static short EvaluateMaxFragmentLengthExtension(bool resumedSession, + IDictionary clientExtensions, IDictionary serverExtensions, + short alertDescription) + { + short maxFragmentLength = TlsExtensionsUtilities.GetMaxFragmentLengthExtension(serverExtensions); + if (maxFragmentLength >= 0) + { + if (!MaxFragmentLength.IsValid(maxFragmentLength) + || (!resumedSession && maxFragmentLength != TlsExtensionsUtilities + .GetMaxFragmentLengthExtension(clientExtensions))) + { + throw new TlsFatalAlert(alertDescription); + } + } + return maxFragmentLength; + } + + /// + internal static byte[] GenerateCertificate(TlsContext context, Certificate certificate, Stream endPointHash) + { + MemoryStream buf = new MemoryStream(); + certificate.Encode(context, buf, endPointHash); + return buf.ToArray(); + } + + /// + internal static byte[] GenerateSupplementalData(IList supplementalData) + { + MemoryStream buf = new MemoryStream(); + TlsProtocol.WriteSupplementalData(buf, supplementalData); + return buf.ToArray(); + } + + /// + internal static void SendCertificateMessage(TlsContext context, DtlsReliableHandshake handshake, + Certificate certificate, Stream endPointHash) + { + SecurityParameters securityParameters = context.SecurityParameters; + if (null != securityParameters.LocalCertificate) + throw new TlsFatalAlert(AlertDescription.internal_error); + + if (null == certificate) + { + certificate = Certificate.EmptyChain; + } + + byte[] certificateBody = GenerateCertificate(context, certificate, endPointHash); + handshake.SendMessage(HandshakeType.certificate, certificateBody); + + securityParameters.m_localCertificate = certificate; + } + + /// + internal static int ValidateSelectedCipherSuite(int selectedCipherSuite, short alertDescription) + { + switch (TlsUtilities.GetEncryptionAlgorithm(selectedCipherSuite)) + { + case EncryptionAlgorithm.RC4_40: + case EncryptionAlgorithm.RC4_128: + case -1: + throw new TlsFatalAlert(alertDescription); + default: + return selectedCipherSuite; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsProtocol.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsProtocol.cs.meta new file mode 100644 index 000000000..7e6879d2a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsProtocol.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5ff344a712ec6c741beb6d5c9bd7f028 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsReassembler.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsReassembler.cs new file mode 100644 index 000000000..065a687ac --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsReassembler.cs @@ -0,0 +1,122 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + internal sealed class DtlsReassembler + { + private readonly short m_msg_type; + private readonly byte[] m_body; + + private readonly List m_missing = new List(); + + internal DtlsReassembler(short msg_type, int length) + { + this.m_msg_type = msg_type; + this.m_body = new byte[length]; + this.m_missing.Add(new Range(0, length)); + } + + internal short MsgType + { + get { return m_msg_type; } + } + + internal byte[] GetBodyIfComplete() + { + return m_missing.Count > 0 ? null : m_body; + } + + internal void ContributeFragment(short msg_type, int length, byte[] buf, int off, int fragment_offset, + int fragment_length) + { + int fragment_end = fragment_offset + fragment_length; + + if (m_msg_type != msg_type || m_body.Length != length || fragment_end > length) + return; + + if (fragment_length == 0) + { + // NOTE: Empty messages still require an empty fragment to complete it + if (fragment_offset == 0 && m_missing.Count > 0) + { + Range firstRange = (Range)m_missing[0]; + if (firstRange.End == 0) + { + m_missing.RemoveAt(0); + } + } + return; + } + + for (int i = 0; i < m_missing.Count; ++i) + { + Range range = (Range)m_missing[i]; + if (range.Start >= fragment_end) + break; + + if (range.End > fragment_offset) + { + int copyStart = System.Math.Max(range.Start, fragment_offset); + int copyEnd = System.Math.Min(range.End, fragment_end); + int copyLength = copyEnd - copyStart; + + Array.Copy(buf, off + copyStart - fragment_offset, m_body, copyStart, copyLength); + + if (copyStart == range.Start) + { + if (copyEnd == range.End) + { + m_missing.RemoveAt(i--); + } + else + { + range.Start = copyEnd; + } + } + else + { + if (copyEnd != range.End) + { + m_missing.Insert(++i, new Range(copyEnd, range.End)); + } + range.End = copyStart; + } + } + } + } + + internal void Reset() + { + m_missing.Clear(); + m_missing.Add(new Range(0, m_body.Length)); + } + + private sealed class Range + { + private int m_start, m_end; + + internal Range(int start, int end) + { + this.m_start = start; + this.m_end = end; + } + + public int Start + { + get { return m_start; } + set { this.m_start = value; } + } + + public int End + { + get { return m_end; } + set { this.m_end = value; } + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsReassembler.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsReassembler.cs.meta new file mode 100644 index 000000000..d9a32e655 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsReassembler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 557fe23897838c74bbb7738f62aeda93 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsRecordLayer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsRecordLayer.cs new file mode 100644 index 000000000..3a8d5c8a4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsRecordLayer.cs @@ -0,0 +1,966 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Net.Sockets; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Date; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + internal class DtlsRecordLayer + : DatagramTransport + { + private const int RECORD_HEADER_LENGTH = 13; + private const int MAX_FRAGMENT_LENGTH = 1 << 14; + private const long TCP_MSL = 1000L * 60 * 2; + private const long RETRANSMIT_TIMEOUT = TCP_MSL * 2; + + /// + internal static byte[] ReceiveClientHelloRecord(byte[] data, int dataOff, int dataLen) + { + if (dataLen < RECORD_HEADER_LENGTH) + { + return null; + } + + short contentType = TlsUtilities.ReadUint8(data, dataOff + 0); + if (ContentType.handshake != contentType) + return null; + + ProtocolVersion version = TlsUtilities.ReadVersion(data, dataOff + 1); + if (!ProtocolVersion.DTLSv10.IsEqualOrEarlierVersionOf(version)) + return null; + + int epoch = TlsUtilities.ReadUint16(data, dataOff + 3); + if (0 != epoch) + return null; + + //long sequenceNumber = TlsUtilities.ReadUint48(data, dataOff + 5); + + int length = TlsUtilities.ReadUint16(data, dataOff + 11); + if (dataLen < RECORD_HEADER_LENGTH + length) + return null; + + if (length > MAX_FRAGMENT_LENGTH) + return null; + + // NOTE: We ignore/drop any data after the first record + return TlsUtilities.CopyOfRangeExact(data, dataOff + RECORD_HEADER_LENGTH, + dataOff + RECORD_HEADER_LENGTH + length); + } + + /// + internal static void SendHelloVerifyRequestRecord(DatagramSender sender, long recordSeq, byte[] message) + { + TlsUtilities.CheckUint16(message.Length); + + byte[] record = new byte[RECORD_HEADER_LENGTH + message.Length]; + TlsUtilities.WriteUint8(ContentType.handshake, record, 0); + TlsUtilities.WriteVersion(ProtocolVersion.DTLSv10, record, 1); + TlsUtilities.WriteUint16(0, record, 3); + TlsUtilities.WriteUint48(recordSeq, record, 5); + TlsUtilities.WriteUint16(message.Length, record, 11); + + Array.Copy(message, 0, record, RECORD_HEADER_LENGTH, message.Length); + + SendDatagram(sender, record, 0, record.Length); + } + + /// + private static void SendDatagram(DatagramSender sender, byte[] buf, int off, int len) + { + // TODO[tls-port] Can we support interrupted IO on .NET? + //try + //{ + // sender.Send(buf, off, len); + //} + //catch (InterruptedIOException e) + //{ + // e.bytesTransferred = 0; + // throw e; + //} + + sender.Send(buf, off, len); + } + + private readonly TlsContext m_context; + private readonly TlsPeer m_peer; + private readonly DatagramTransport m_transport; + + private readonly ByteQueue m_recordQueue = new ByteQueue(); + private readonly object m_writeLock = new object(); + + private volatile bool m_closed = false; + private volatile bool m_failed = false; + // TODO[dtls13] Review the draft/RFC (legacy_record_version) to see if readVersion can be removed + private volatile ProtocolVersion m_readVersion = null, m_writeVersion = null; + private volatile bool m_inConnection; + private volatile bool m_inHandshake; + private volatile int m_plaintextLimit; + private DtlsEpoch m_currentEpoch, m_pendingEpoch; + private DtlsEpoch m_readEpoch, m_writeEpoch; + + private DtlsHandshakeRetransmit m_retransmit = null; + private DtlsEpoch m_retransmitEpoch = null; + private Timeout m_retransmitTimeout = null; + + private TlsHeartbeat m_heartbeat = null; // If non-null, controls the sending of heartbeat requests + private bool m_heartBeatResponder = false; // Whether we should send heartbeat responses + + private HeartbeatMessage m_heartbeatInFlight = null; // The current in-flight heartbeat request, if any + private Timeout m_heartbeatTimeout = null; // Idle timeout (if none in-flight), else expiry timeout for response + + private int m_heartbeatResendMillis = -1; // Delay before retransmit of current in-flight heartbeat request + private Timeout m_heartbeatResendTimeout = null; // Timeout for next retransmit of the in-flight heartbeat request + + internal DtlsRecordLayer(TlsContext context, TlsPeer peer, DatagramTransport transport) + { + this.m_context = context; + this.m_peer = peer; + this.m_transport = transport; + + this.m_inHandshake = true; + + this.m_currentEpoch = new DtlsEpoch(0, TlsNullNullCipher.Instance); + this.m_pendingEpoch = null; + this.m_readEpoch = m_currentEpoch; + this.m_writeEpoch = m_currentEpoch; + + SetPlaintextLimit(MAX_FRAGMENT_LENGTH); + } + + internal virtual bool IsClosed + { + get { return m_closed; } + } + + internal virtual void ResetAfterHelloVerifyRequestServer(long recordSeq) + { + this.m_inConnection = true; + + m_currentEpoch.SequenceNumber = recordSeq; + m_currentEpoch.ReplayWindow.Reset(recordSeq); + } + + internal virtual void SetPlaintextLimit(int plaintextLimit) + { + this.m_plaintextLimit = plaintextLimit; + } + + internal virtual int ReadEpoch + { + get { return m_readEpoch.Epoch; } + } + + internal virtual ProtocolVersion ReadVersion + { + get { return m_readVersion; } + set { this.m_readVersion = value; } + } + + internal virtual void SetWriteVersion(ProtocolVersion writeVersion) + { + this.m_writeVersion = writeVersion; + } + + internal virtual void InitPendingEpoch(TlsCipher pendingCipher) + { + if (m_pendingEpoch != null) + throw new InvalidOperationException(); + + /* + * TODO "In order to ensure that any given sequence/epoch pair is unique, implementations + * MUST NOT allow the same epoch value to be reused within two times the TCP maximum segment + * lifetime." + */ + + // TODO Check for overflow + this.m_pendingEpoch = new DtlsEpoch(m_writeEpoch.Epoch + 1, pendingCipher); + } + + internal virtual void HandshakeSuccessful(DtlsHandshakeRetransmit retransmit) + { + if (m_readEpoch == m_currentEpoch || m_writeEpoch == m_currentEpoch) + { + // TODO + throw new InvalidOperationException(); + } + + if (null != retransmit) + { + this.m_retransmit = retransmit; + this.m_retransmitEpoch = m_currentEpoch; + this.m_retransmitTimeout = new Timeout(RETRANSMIT_TIMEOUT); + } + + this.m_inHandshake = false; + this.m_currentEpoch = m_pendingEpoch; + this.m_pendingEpoch = null; + } + + internal virtual void InitHeartbeat(TlsHeartbeat heartbeat, bool heartbeatResponder) + { + if (m_inHandshake) + throw new InvalidOperationException(); + + this.m_heartbeat = heartbeat; + this.m_heartBeatResponder = heartbeatResponder; + + if (null != heartbeat) + { + ResetHeartbeat(); + } + } + + internal virtual void ResetWriteEpoch() + { + if (null != m_retransmitEpoch) + { + this.m_writeEpoch = m_retransmitEpoch; + } + else + { + this.m_writeEpoch = m_currentEpoch; + } + } + + /// + public virtual int GetReceiveLimit() + { + return System.Math.Min(m_plaintextLimit, + m_readEpoch.Cipher.GetPlaintextLimit(m_transport.GetReceiveLimit() - RECORD_HEADER_LENGTH)); + } + + /// + public virtual int GetSendLimit() + { + return System.Math.Min(m_plaintextLimit, + m_writeEpoch.Cipher.GetPlaintextLimit(m_transport.GetSendLimit() - RECORD_HEADER_LENGTH)); + } + + /// + public virtual int Receive(byte[] buf, int off, int len, int waitMillis) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return Receive(buf.AsSpan(off, len), waitMillis); +#else + long currentTimeMillis = DateTimeUtilities.CurrentUnixMs(); + + Timeout timeout = Timeout.ForWaitMillis(waitMillis, currentTimeMillis); + byte[] record = null; + + while (waitMillis >= 0) + { + if (null != m_retransmitTimeout && m_retransmitTimeout.RemainingMillis(currentTimeMillis) < 1) + { + m_retransmit = null; + m_retransmitEpoch = null; + m_retransmitTimeout = null; + } + + if (Timeout.HasExpired(m_heartbeatTimeout, currentTimeMillis)) + { + if (null != m_heartbeatInFlight) + throw new TlsTimeoutException("Heartbeat timed out"); + + this.m_heartbeatInFlight = HeartbeatMessage.Create(m_context, + HeartbeatMessageType.heartbeat_request, m_heartbeat.GeneratePayload()); + this.m_heartbeatTimeout = new Timeout(m_heartbeat.TimeoutMillis, currentTimeMillis); + + this.m_heartbeatResendMillis = DtlsReliableHandshake.INITIAL_RESEND_MILLIS; + this.m_heartbeatResendTimeout = new Timeout(m_heartbeatResendMillis, currentTimeMillis); + + SendHeartbeatMessage(m_heartbeatInFlight); + } + else if (Timeout.HasExpired(m_heartbeatResendTimeout, currentTimeMillis)) + { + this.m_heartbeatResendMillis = DtlsReliableHandshake.BackOff(m_heartbeatResendMillis); + this.m_heartbeatResendTimeout = new Timeout(m_heartbeatResendMillis, currentTimeMillis); + + SendHeartbeatMessage(m_heartbeatInFlight); + } + + waitMillis = Timeout.ConstrainWaitMillis(waitMillis, m_heartbeatTimeout, currentTimeMillis); + waitMillis = Timeout.ConstrainWaitMillis(waitMillis, m_heartbeatResendTimeout, currentTimeMillis); + + // NOTE: Guard against bad logic giving a negative value + if (waitMillis < 0) + { + waitMillis = 1; + } + + int receiveLimit = System.Math.Min(len, GetReceiveLimit()) + RECORD_HEADER_LENGTH; + if (null == record || record.Length < receiveLimit) + { + record = new byte[receiveLimit]; + } + + int received = ReceiveRecord(record, 0, receiveLimit, waitMillis); + int processed = ProcessRecord(received, record, buf, off); + if (processed >= 0) + { + return processed; + } + + currentTimeMillis = DateTimeUtilities.CurrentUnixMs(); + waitMillis = Timeout.GetWaitMillis(timeout, currentTimeMillis); + } + + return -1; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// + public virtual int Receive(Span buffer, int waitMillis) + { + long currentTimeMillis = DateTimeUtilities.CurrentUnixMs(); + + Timeout timeout = Timeout.ForWaitMillis(waitMillis, currentTimeMillis); + byte[] record = null; + + while (waitMillis >= 0) + { + if (null != m_retransmitTimeout && m_retransmitTimeout.RemainingMillis(currentTimeMillis) < 1) + { + m_retransmit = null; + m_retransmitEpoch = null; + m_retransmitTimeout = null; + } + + if (Timeout.HasExpired(m_heartbeatTimeout, currentTimeMillis)) + { + if (null != m_heartbeatInFlight) + throw new TlsTimeoutException("Heartbeat timed out"); + + this.m_heartbeatInFlight = HeartbeatMessage.Create(m_context, + HeartbeatMessageType.heartbeat_request, m_heartbeat.GeneratePayload()); + this.m_heartbeatTimeout = new Timeout(m_heartbeat.TimeoutMillis, currentTimeMillis); + + this.m_heartbeatResendMillis = DtlsReliableHandshake.INITIAL_RESEND_MILLIS; + this.m_heartbeatResendTimeout = new Timeout(m_heartbeatResendMillis, currentTimeMillis); + + SendHeartbeatMessage(m_heartbeatInFlight); + } + else if (Timeout.HasExpired(m_heartbeatResendTimeout, currentTimeMillis)) + { + this.m_heartbeatResendMillis = DtlsReliableHandshake.BackOff(m_heartbeatResendMillis); + this.m_heartbeatResendTimeout = new Timeout(m_heartbeatResendMillis, currentTimeMillis); + + SendHeartbeatMessage(m_heartbeatInFlight); + } + + waitMillis = Timeout.ConstrainWaitMillis(waitMillis, m_heartbeatTimeout, currentTimeMillis); + waitMillis = Timeout.ConstrainWaitMillis(waitMillis, m_heartbeatResendTimeout, currentTimeMillis); + + // NOTE: Guard against bad logic giving a negative value + if (waitMillis < 0) + { + waitMillis = 1; + } + + int receiveLimit = System.Math.Min(buffer.Length, GetReceiveLimit()) + RECORD_HEADER_LENGTH; + if (null == record || record.Length < receiveLimit) + { + record = new byte[receiveLimit]; + } + + int received = ReceiveRecord(record, 0, receiveLimit, waitMillis); + int processed = ProcessRecord(received, record, buffer); + if (processed >= 0) + { + return processed; + } + + currentTimeMillis = DateTimeUtilities.CurrentUnixMs(); + waitMillis = Timeout.GetWaitMillis(timeout, currentTimeMillis); + } + + return -1; + } +#endif + + /// + public virtual void Send(byte[] buf, int off, int len) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Send(buf.AsSpan(off, len)); +#else + short contentType = ContentType.application_data; + + if (m_inHandshake || m_writeEpoch == m_retransmitEpoch) + { + contentType = ContentType.handshake; + + short handshakeType = TlsUtilities.ReadUint8(buf, off); + if (handshakeType == HandshakeType.finished) + { + DtlsEpoch nextEpoch = null; + if (m_inHandshake) + { + nextEpoch = m_pendingEpoch; + } + else if (m_writeEpoch == m_retransmitEpoch) + { + nextEpoch = m_currentEpoch; + } + + if (nextEpoch == null) + { + // TODO + throw new InvalidOperationException(); + } + + // Implicitly send change_cipher_spec and change to pending cipher state + + // TODO Send change_cipher_spec and finished records in single datagram? + byte[] data = new byte[1]{ 1 }; + SendRecord(ContentType.change_cipher_spec, data, 0, data.Length); + + this.m_writeEpoch = nextEpoch; + } + } + + SendRecord(contentType, buf, off, len); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// + public virtual void Send(ReadOnlySpan buffer) + { + short contentType = ContentType.application_data; + + if (m_inHandshake || m_writeEpoch == m_retransmitEpoch) + { + contentType = ContentType.handshake; + + short handshakeType = TlsUtilities.ReadUint8(buffer); + if (handshakeType == HandshakeType.finished) + { + DtlsEpoch nextEpoch = null; + if (m_inHandshake) + { + nextEpoch = m_pendingEpoch; + } + else if (m_writeEpoch == m_retransmitEpoch) + { + nextEpoch = m_currentEpoch; + } + + if (nextEpoch == null) + { + // TODO + throw new InvalidOperationException(); + } + + // Implicitly send change_cipher_spec and change to pending cipher state + + // TODO Send change_cipher_spec and finished records in single datagram? + ReadOnlySpan data = stackalloc byte[1]{ 1 }; + SendRecord(ContentType.change_cipher_spec, data); + + this.m_writeEpoch = nextEpoch; + } + } + + SendRecord(contentType, buffer); + } +#endif + + /// + public virtual void Close() + { + if (!m_closed) + { + if (m_inHandshake && m_inConnection) + { + Warn(AlertDescription.user_canceled, "User canceled handshake"); + } + CloseTransport(); + } + } + + internal virtual void Fail(short alertDescription) + { + if (!m_closed) + { + if (m_inConnection) + { + try + { + RaiseAlert(AlertLevel.fatal, alertDescription, null, null); + } + catch (Exception) + { + // Ignore + } + } + + this.m_failed = true; + + CloseTransport(); + } + } + + internal virtual void Failed() + { + if (!m_closed) + { + this.m_failed = true; + + CloseTransport(); + } + } + + /// + internal virtual void Warn(short alertDescription, string message) + { + RaiseAlert(AlertLevel.warning, alertDescription, message, null); + } + + private void CloseTransport() + { + if (!m_closed) + { + /* + * RFC 5246 7.2.1. Unless some other fatal alert has been transmitted, each party is + * required to send a close_notify alert before closing the write side of the + * connection. The other party MUST respond with a close_notify alert of its own and + * close down the connection immediately, discarding any pending writes. + */ + + try + { + if (!m_failed) + { + Warn(AlertDescription.close_notify, null); + } + m_transport.Close(); + } + catch (Exception) + { + // Ignore + } + + this.m_closed = true; + } + } + + /// + private void RaiseAlert(short alertLevel, short alertDescription, string message, Exception cause) + { + m_peer.NotifyAlertRaised(alertLevel, alertDescription, message, cause); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + ReadOnlySpan error = stackalloc byte[2]{ (byte)alertLevel, (byte)alertDescription }; + SendRecord(ContentType.alert, error); +#else + byte[] error = new byte[2]{ (byte)alertLevel, (byte)alertDescription }; + SendRecord(ContentType.alert, error, 0, 2); +#endif + } + + /// + private int ReceiveDatagram(byte[] buf, int off, int len, int waitMillis) + { + try + { + return m_transport.Receive(buf, off, len, waitMillis); + } + catch (TlsTimeoutException) + { + return -1; + } + catch (SocketException e) + { + if (TlsUtilities.IsTimeout(e)) + return -1; + + throw e; + } + // TODO[tls-port] Can we support interrupted IO on .NET? + //catch (InterruptedIOException e) + //{ + // e.bytesTransferred = 0; + // throw e; + //} + } + + // TODO Include 'currentTimeMillis' as an argument, use with Timeout, resetHeartbeat + /// +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int ProcessRecord(int received, byte[] record, Span buffer) +#else + private int ProcessRecord(int received, byte[] record, byte[] buf, int off) +#endif + { + // NOTE: received < 0 (timeout) is covered by this first case + if (received < RECORD_HEADER_LENGTH) + return -1; + + int length = TlsUtilities.ReadUint16(record, 11); + if (received != (length + RECORD_HEADER_LENGTH)) + return -1; + + // TODO[dtls13] Deal with opaque record type for 1.3 AEAD ciphers + short recordType = TlsUtilities.ReadUint8(record, 0); + + switch (recordType) + { + case ContentType.alert: + case ContentType.application_data: + case ContentType.change_cipher_spec: + case ContentType.handshake: + case ContentType.heartbeat: + break; + default: + return -1; + } + + int epoch = TlsUtilities.ReadUint16(record, 3); + + DtlsEpoch recordEpoch = null; + if (epoch == m_readEpoch.Epoch) + { + recordEpoch = m_readEpoch; + } + else if (recordType == ContentType.handshake && null != m_retransmitEpoch + && epoch == m_retransmitEpoch.Epoch) + { + recordEpoch = m_retransmitEpoch; + } + + if (null == recordEpoch) + return -1; + + long seq = TlsUtilities.ReadUint48(record, 5); + if (recordEpoch.ReplayWindow.ShouldDiscard(seq)) + return -1; + + ProtocolVersion recordVersion = TlsUtilities.ReadVersion(record, 1); + if (!recordVersion.IsDtls) + return -1; + + if (null != m_readVersion && !m_readVersion.Equals(recordVersion)) + { + /* + * Special-case handling for retransmitted ClientHello records. + * + * TODO Revisit how 'readVersion' works, since this is quite awkward. + */ + bool isClientHelloFragment = + ReadEpoch == 0 + && length > 0 + && ContentType.handshake == recordType + && HandshakeType.client_hello == TlsUtilities.ReadUint8(record, RECORD_HEADER_LENGTH); + + if (!isClientHelloFragment) + return -1; + } + + long macSeqNo = GetMacSequenceNumber(recordEpoch.Epoch, seq); + + TlsDecodeResult decoded = recordEpoch.Cipher.DecodeCiphertext(macSeqNo, recordType, recordVersion, record, + RECORD_HEADER_LENGTH, length); + + recordEpoch.ReplayWindow.ReportAuthenticated(seq); + + if (decoded.len > m_plaintextLimit) + return -1; + + if (decoded.len < 1 && decoded.contentType != ContentType.application_data) + return -1; + + if (null == m_readVersion) + { + bool isHelloVerifyRequest = + ReadEpoch == 0 + && length > 0 + && ContentType.handshake == recordType + && HandshakeType.hello_verify_request == TlsUtilities.ReadUint8(record, RECORD_HEADER_LENGTH); + + if (isHelloVerifyRequest) + { + /* + * RFC 6347 4.2.1 DTLS 1.2 server implementations SHOULD use DTLS version 1.0 + * regardless of the version of TLS that is expected to be negotiated. DTLS 1.2 and + * 1.0 clients MUST use the version solely to indicate packet formatting (which is + * the same in both DTLS 1.2 and 1.0) and not as part of version negotiation. + */ + if (!ProtocolVersion.DTLSv12.IsEqualOrLaterVersionOf(recordVersion)) + return -1; + } + else + { + this.m_readVersion = recordVersion; + } + } + + switch (decoded.contentType) + { + case ContentType.alert: + { + if (decoded.len == 2) + { + short alertLevel = TlsUtilities.ReadUint8(decoded.buf, decoded.off); + short alertDescription = TlsUtilities.ReadUint8(decoded.buf, decoded.off + 1); + + m_peer.NotifyAlertReceived(alertLevel, alertDescription); + + if (alertLevel == AlertLevel.fatal) + { + Failed(); + throw new TlsFatalAlert(alertDescription); + } + + // TODO Can close_notify be a fatal alert? + if (alertDescription == AlertDescription.close_notify) + { + CloseTransport(); + } + } + + return -1; + } + case ContentType.application_data: + { + if (m_inHandshake) + { + // TODO Consider buffering application data for new epoch that arrives + // out-of-order with the Finished message + return -1; + } + break; + } + case ContentType.change_cipher_spec: + { + // Implicitly receive change_cipher_spec and change to pending cipher state + + for (int i = 0; i < decoded.len; ++i) + { + short message = TlsUtilities.ReadUint8(decoded.buf, decoded.off + i); + if (message != ChangeCipherSpec.change_cipher_spec) + continue; + + if (m_pendingEpoch != null) + { + m_readEpoch = m_pendingEpoch; + } + } + + return -1; + } + case ContentType.handshake: + { + if (!m_inHandshake) + { + if (null != m_retransmit) + { + m_retransmit.ReceivedHandshakeRecord(epoch, decoded.buf, decoded.off, decoded.len); + } + + // TODO Consider support for HelloRequest + return -1; + } + break; + } + case ContentType.heartbeat: + { + if (null != m_heartbeatInFlight || m_heartBeatResponder) + { + try + { + MemoryStream input = new MemoryStream(decoded.buf, decoded.off, decoded.len, false); + HeartbeatMessage heartbeatMessage = HeartbeatMessage.Parse(input); + + if (null != heartbeatMessage) + { + switch (heartbeatMessage.Type) + { + case HeartbeatMessageType.heartbeat_request: + { + if (m_heartBeatResponder) + { + HeartbeatMessage response = HeartbeatMessage.Create(m_context, + HeartbeatMessageType.heartbeat_response, heartbeatMessage.Payload); + + SendHeartbeatMessage(response); + } + break; + } + case HeartbeatMessageType.heartbeat_response: + { + if (null != m_heartbeatInFlight + && Arrays.AreEqual(heartbeatMessage.Payload, m_heartbeatInFlight.Payload)) + { + ResetHeartbeat(); + } + break; + } + default: + break; + } + } + } + catch (Exception) + { + // Ignore + } + } + + return -1; + } + default: + return -1; + } + + /* + * NOTE: If we receive any non-handshake data in the new epoch implies the peer has + * received our final flight. + */ + if (!m_inHandshake && null != m_retransmit) + { + this.m_retransmit = null; + this.m_retransmitEpoch = null; + this.m_retransmitTimeout = null; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + decoded.buf.AsSpan(decoded.off, decoded.len).CopyTo(buffer); +#else + Array.Copy(decoded.buf, decoded.off, buf, off, decoded.len); +#endif + return decoded.len; + } + + /// + private int ReceiveRecord(byte[] buf, int off, int len, int waitMillis) + { + if (m_recordQueue.Available > 0) + { + int length = 0; + if (m_recordQueue.Available >= RECORD_HEADER_LENGTH) + { + length = m_recordQueue.ReadUint16(11); + } + + int received = System.Math.Min(m_recordQueue.Available, RECORD_HEADER_LENGTH + length); + m_recordQueue.RemoveData(buf, off, received, 0); + return received; + } + + { + int received = ReceiveDatagram(buf, off, len, waitMillis); + if (received >= RECORD_HEADER_LENGTH) + { + this.m_inConnection = true; + + int fragmentLength = TlsUtilities.ReadUint16(buf, off + 11); + int recordLength = RECORD_HEADER_LENGTH + fragmentLength; + if (received > recordLength) + { + m_recordQueue.AddData(buf, off + recordLength, received - recordLength); + received = recordLength; + } + } + + return received; + } + } + + private void ResetHeartbeat() + { + this.m_heartbeatInFlight = null; + this.m_heartbeatResendMillis = -1; + this.m_heartbeatResendTimeout = null; + this.m_heartbeatTimeout = new Timeout(m_heartbeat.IdleMillis); + } + + /// + private void SendHeartbeatMessage(HeartbeatMessage heartbeatMessage) + { + MemoryStream output = new MemoryStream(); + heartbeatMessage.Encode(output); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + if (!output.TryGetBuffer(out var buffer)) + throw new InvalidOperationException(); + + SendRecord(ContentType.heartbeat, buffer); +#else + byte[] buf = output.ToArray(); + SendRecord(ContentType.heartbeat, buf, 0, buf.Length); +#endif + } + + /* + * Currently uses synchronization to ensure heartbeat sends and application data sends don't + * interfere with each other. It may be overly cautious; the sequence number allocation is + * atomic, and if we synchronize only on the datagram send instead, then the only effect should + * be possible reordering of records (which might surprise a reliable transport implementation). + */ + /// +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private void SendRecord(short contentType, ReadOnlySpan buffer) +#else + private void SendRecord(short contentType, byte[] buf, int off, int len) +#endif + { + // Never send anything until a valid ClientHello has been received + if (m_writeVersion == null) + return; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int len = buffer.Length; +#endif + + if (len > m_plaintextLimit) + throw new TlsFatalAlert(AlertDescription.internal_error); + + /* + * RFC 5246 6.2.1 Implementations MUST NOT send zero-length fragments of Handshake, Alert, + * or ChangeCipherSpec content types. + */ + if (len < 1 && contentType != ContentType.application_data) + throw new TlsFatalAlert(AlertDescription.internal_error); + + lock (m_writeLock) + { + int recordEpoch = m_writeEpoch.Epoch; + long recordSequenceNumber = m_writeEpoch.AllocateSequenceNumber(); + long macSequenceNumber = GetMacSequenceNumber(recordEpoch, recordSequenceNumber); + ProtocolVersion recordVersion = m_writeVersion; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + TlsEncodeResult encoded = m_writeEpoch.Cipher.EncodePlaintext(macSequenceNumber, contentType, + recordVersion, RECORD_HEADER_LENGTH, buffer); +#else + TlsEncodeResult encoded = m_writeEpoch.Cipher.EncodePlaintext(macSequenceNumber, contentType, + recordVersion, RECORD_HEADER_LENGTH, buf, off, len); +#endif + + int ciphertextLength = encoded.len - RECORD_HEADER_LENGTH; + TlsUtilities.CheckUint16(ciphertextLength); + + TlsUtilities.WriteUint8(encoded.recordType, encoded.buf, encoded.off + 0); + TlsUtilities.WriteVersion(recordVersion, encoded.buf, encoded.off + 1); + TlsUtilities.WriteUint16(recordEpoch, encoded.buf, encoded.off + 3); + TlsUtilities.WriteUint48(recordSequenceNumber, encoded.buf, encoded.off + 5); + TlsUtilities.WriteUint16(ciphertextLength, encoded.buf, encoded.off + 11); + + SendDatagram(m_transport, encoded.buf, encoded.off, encoded.len); + } + } + + private static long GetMacSequenceNumber(int epoch, long sequence_number) + { + return ((epoch & 0xFFFFFFFFL) << 48) | sequence_number; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsRecordLayer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsRecordLayer.cs.meta new file mode 100644 index 000000000..9f97e9922 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsRecordLayer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce9e392561fbba44fb187a3341b1fb66 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsReliableHandshake.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsReliableHandshake.cs new file mode 100644 index 000000000..dacfd40ba --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsReliableHandshake.cs @@ -0,0 +1,569 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Date; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + internal class DtlsReliableHandshake + { + private const int MAX_RECEIVE_AHEAD = 16; + private const int MESSAGE_HEADER_LENGTH = 12; + + internal const int INITIAL_RESEND_MILLIS = 1000; + private const int MAX_RESEND_MILLIS = 60000; + + /// + internal static DtlsRequest ReadClientRequest(byte[] data, int dataOff, int dataLen, Stream dtlsOutput) + { + // TODO Support the possibility of a fragmented ClientHello datagram + + byte[] message = DtlsRecordLayer.ReceiveClientHelloRecord(data, dataOff, dataLen); + if (null == message || message.Length < MESSAGE_HEADER_LENGTH) + return null; + + long recordSeq = TlsUtilities.ReadUint48(data, dataOff + 5); + + short msgType = TlsUtilities.ReadUint8(message, 0); + if (HandshakeType.client_hello != msgType) + return null; + + int length = TlsUtilities.ReadUint24(message, 1); + if (message.Length != MESSAGE_HEADER_LENGTH + length) + return null; + + // TODO Consider stricter HelloVerifyRequest-related checks + //int messageSeq = TlsUtilities.ReadUint16(message, 4); + //if (messageSeq > 1) + // return null; + + int fragmentOffset = TlsUtilities.ReadUint24(message, 6); + if (0 != fragmentOffset) + return null; + + int fragmentLength = TlsUtilities.ReadUint24(message, 9); + if (length != fragmentLength) + return null; + + ClientHello clientHello = ClientHello.Parse( + new MemoryStream(message, MESSAGE_HEADER_LENGTH, length, false), dtlsOutput); + + return new DtlsRequest(recordSeq, message, clientHello); + } + + /// + internal static void SendHelloVerifyRequest(DatagramSender sender, long recordSeq, byte[] cookie) + { + TlsUtilities.CheckUint8(cookie.Length); + + int length = 3 + cookie.Length; + + byte[] message = new byte[MESSAGE_HEADER_LENGTH + length]; + TlsUtilities.WriteUint8(HandshakeType.hello_verify_request, message, 0); + TlsUtilities.WriteUint24(length, message, 1); + //TlsUtilities.WriteUint16(0, message, 4); + //TlsUtilities.WriteUint24(0, message, 6); + TlsUtilities.WriteUint24(length, message, 9); + + // HelloVerifyRequest fields + TlsUtilities.WriteVersion(ProtocolVersion.DTLSv10, message, MESSAGE_HEADER_LENGTH + 0); + TlsUtilities.WriteOpaque8(cookie, message, MESSAGE_HEADER_LENGTH + 2); + + DtlsRecordLayer.SendHelloVerifyRequestRecord(sender, recordSeq, message); + } + + /* + * No 'final' modifiers so that it works in earlier JDKs + */ + private DtlsRecordLayer m_recordLayer; + private Timeout m_handshakeTimeout; + + private TlsHandshakeHash m_handshakeHash; + + private IDictionary m_currentInboundFlight = new Dictionary(); + private IDictionary m_previousInboundFlight = null; + private IList m_outboundFlight = new List(); + + private int m_resendMillis = -1; + private Timeout m_resendTimeout = null; + + private int m_next_send_seq = 0, m_next_receive_seq = 0; + + internal DtlsReliableHandshake(TlsContext context, DtlsRecordLayer transport, int timeoutMillis, + DtlsRequest request) + { + this.m_recordLayer = transport; + this.m_handshakeHash = new DeferredHash(context); + this.m_handshakeTimeout = Timeout.ForWaitMillis(timeoutMillis); + + if (null != request) + { + this.m_resendMillis = INITIAL_RESEND_MILLIS; + this.m_resendTimeout = new Timeout(m_resendMillis); + + long recordSeq = request.RecordSeq; + int messageSeq = request.MessageSeq; + byte[] message = request.Message; + + m_recordLayer.ResetAfterHelloVerifyRequestServer(recordSeq); + + // Simulate a previous flight consisting of the request ClientHello + DtlsReassembler reassembler = new DtlsReassembler(HandshakeType.client_hello, + message.Length - MESSAGE_HEADER_LENGTH); + m_currentInboundFlight[messageSeq] = reassembler; + + // We sent HelloVerifyRequest with (message) sequence number 0 + this.m_next_send_seq = 1; + this.m_next_receive_seq = messageSeq + 1; + + m_handshakeHash.Update(message, 0, message.Length); + } + } + + internal void ResetAfterHelloVerifyRequestClient() + { + this.m_currentInboundFlight = new Dictionary(); + this.m_previousInboundFlight = null; + this.m_outboundFlight = new List(); + + this.m_resendMillis = -1; + this.m_resendTimeout = null; + + // We're waiting for ServerHello, always with (message) sequence number 1 + this.m_next_receive_seq = 1; + + m_handshakeHash.Reset(); + } + + internal TlsHandshakeHash HandshakeHash + { + get { return m_handshakeHash; } + } + + internal void PrepareToFinish() + { + m_handshakeHash.StopTracking(); + } + + /// + internal void SendMessage(short msg_type, byte[] body) + { + TlsUtilities.CheckUint24(body.Length); + + if (null != m_resendTimeout) + { + CheckInboundFlight(); + + this.m_resendMillis = -1; + this.m_resendTimeout = null; + + m_outboundFlight.Clear(); + } + + Message message = new Message(m_next_send_seq++, msg_type, body); + + m_outboundFlight.Add(message); + + WriteMessage(message); + UpdateHandshakeMessagesDigest(message); + } + + /// + internal Message ReceiveMessage() + { + Message message = ImplReceiveMessage(); + UpdateHandshakeMessagesDigest(message); + return message; + } + + /// + internal byte[] ReceiveMessageBody(short msg_type) + { + Message message = ImplReceiveMessage(); + if (message.Type != msg_type) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + UpdateHandshakeMessagesDigest(message); + return message.Body; + } + + /// + internal Message ReceiveMessageDelayedDigest(short msg_type) + { + Message message = ImplReceiveMessage(); + if (message.Type != msg_type) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + return message; + } + + /// + internal void UpdateHandshakeMessagesDigest(Message message) + { + short msg_type = message.Type; + switch (msg_type) + { + case HandshakeType.hello_request: + case HandshakeType.hello_verify_request: + case HandshakeType.key_update: + break; + + // TODO[dtls13] Not included in the transcript for (D)TLS 1.3+ + case HandshakeType.new_session_ticket: + default: + { + byte[] body = message.Body; + byte[] buf = new byte[MESSAGE_HEADER_LENGTH]; + TlsUtilities.WriteUint8(msg_type, buf, 0); + TlsUtilities.WriteUint24(body.Length, buf, 1); + TlsUtilities.WriteUint16(message.Seq, buf, 4); + TlsUtilities.WriteUint24(0, buf, 6); + TlsUtilities.WriteUint24(body.Length, buf, 9); + m_handshakeHash.Update(buf, 0, buf.Length); + m_handshakeHash.Update(body, 0, body.Length); + break; + } + } + } + + internal void Finish() + { + DtlsHandshakeRetransmit retransmit = null; + if (null != m_resendTimeout) + { + CheckInboundFlight(); + } + else + { + PrepareInboundFlight(null); + + if (m_previousInboundFlight != null) + { + /* + * RFC 6347 4.2.4. In addition, for at least twice the default MSL defined for [TCP], + * when in the FINISHED state, the node that transmits the last flight (the server in an + * ordinary handshake or the client in a resumed handshake) MUST respond to a retransmit + * of the peer's last flight with a retransmit of the last flight. + */ + retransmit = new Retransmit(this); + } + } + + m_recordLayer.HandshakeSuccessful(retransmit); + } + + internal static int BackOff(int timeoutMillis) + { + /* + * TODO[DTLS] implementations SHOULD back off handshake packet size during the + * retransmit backoff. + */ + return System.Math.Min(timeoutMillis * 2, MAX_RESEND_MILLIS); + } + + /** + * Check that there are no "extra" messages left in the current inbound flight + */ + private void CheckInboundFlight() + { + foreach (int key in m_currentInboundFlight.Keys) + { + if (key >= m_next_receive_seq) + { + // TODO Should this be considered an error? + } + } + } + + /// + private Message GetPendingMessage() + { + if (m_currentInboundFlight.TryGetValue(m_next_receive_seq, out var next)) + { + byte[] body = next.GetBodyIfComplete(); + if (body != null) + { + m_previousInboundFlight = null; + return new Message(m_next_receive_seq++, next.MsgType, body); + } + } + return null; + } + + /// + private Message ImplReceiveMessage() + { + long currentTimeMillis = DateTimeUtilities.CurrentUnixMs(); + + if (null == m_resendTimeout) + { + m_resendMillis = INITIAL_RESEND_MILLIS; + m_resendTimeout = new Timeout(m_resendMillis, currentTimeMillis); + + PrepareInboundFlight(new Dictionary()); + } + + byte[] buf = null; + + for (;;) + { + if (m_recordLayer.IsClosed) + throw new TlsFatalAlert(AlertDescription.user_canceled); + + Message pending = GetPendingMessage(); + if (pending != null) + return pending; + + if (Timeout.HasExpired(m_handshakeTimeout, currentTimeMillis)) + throw new TlsTimeoutException("Handshake timed out"); + + int waitMillis = Timeout.GetWaitMillis(m_handshakeTimeout, currentTimeMillis); + waitMillis = Timeout.ConstrainWaitMillis(waitMillis, m_resendTimeout, currentTimeMillis); + + // NOTE: Ensure a finite wait, of at least 1ms + if (waitMillis < 1) + { + waitMillis = 1; + } + + int receiveLimit = m_recordLayer.GetReceiveLimit(); + if (buf == null || buf.Length < receiveLimit) + { + buf = new byte[receiveLimit]; + } + + int received = m_recordLayer.Receive(buf, 0, receiveLimit, waitMillis); + if (received < 0) + { + ResendOutboundFlight(); + } + else + { + ProcessRecord(MAX_RECEIVE_AHEAD, m_recordLayer.ReadEpoch, buf, 0, received); + } + + currentTimeMillis = DateTimeUtilities.CurrentUnixMs(); + } + } + + private void PrepareInboundFlight(IDictionary nextFlight) + { + ResetAll(m_currentInboundFlight); + m_previousInboundFlight = m_currentInboundFlight; + m_currentInboundFlight = nextFlight; + } + + /// + private void ProcessRecord(int windowSize, int epoch, byte[] buf, int off, int len) + { + bool checkPreviousFlight = false; + + while (len >= MESSAGE_HEADER_LENGTH) + { + int fragment_length = TlsUtilities.ReadUint24(buf, off + 9); + int message_length = fragment_length + MESSAGE_HEADER_LENGTH; + if (len < message_length) + { + // NOTE: Truncated message - ignore it + break; + } + + int length = TlsUtilities.ReadUint24(buf, off + 1); + int fragment_offset = TlsUtilities.ReadUint24(buf, off + 6); + if (fragment_offset + fragment_length > length) + { + // NOTE: Malformed fragment - ignore it and the rest of the record + break; + } + + /* + * NOTE: This very simple epoch check will only work until we want to support + * renegotiation (and we're not likely to do that anyway). + */ + short msg_type = TlsUtilities.ReadUint8(buf, off + 0); + int expectedEpoch = msg_type == HandshakeType.finished ? 1 : 0; + if (epoch != expectedEpoch) + break; + + int message_seq = TlsUtilities.ReadUint16(buf, off + 4); + if (message_seq >= (m_next_receive_seq + windowSize)) + { + // NOTE: Too far ahead - ignore + } + else if (message_seq >= m_next_receive_seq) + { + if (!m_currentInboundFlight.TryGetValue(message_seq, out var reassembler)) + { + reassembler = new DtlsReassembler(msg_type, length); + m_currentInboundFlight[message_seq] = reassembler; + } + + reassembler.ContributeFragment(msg_type, length, buf, off + MESSAGE_HEADER_LENGTH, fragment_offset, + fragment_length); + } + else if (m_previousInboundFlight != null) + { + /* + * NOTE: If we receive the previous flight of incoming messages in full again, + * retransmit our last flight + */ + + if (m_previousInboundFlight.TryGetValue(message_seq, out var reassembler)) + { + reassembler.ContributeFragment(msg_type, length, buf, off + MESSAGE_HEADER_LENGTH, + fragment_offset, fragment_length); + checkPreviousFlight = true; + } + } + + off += message_length; + len -= message_length; + } + + if (checkPreviousFlight && CheckAll(m_previousInboundFlight)) + { + ResendOutboundFlight(); + ResetAll(m_previousInboundFlight); + } + } + + /// + private void ResendOutboundFlight() + { + m_recordLayer.ResetWriteEpoch(); + foreach (Message message in m_outboundFlight) + { + WriteMessage(message); + } + + m_resendMillis = BackOff(m_resendMillis); + m_resendTimeout = new Timeout(m_resendMillis); + } + + /// + private void WriteMessage(Message message) + { + int sendLimit = m_recordLayer.GetSendLimit(); + int fragmentLimit = sendLimit - MESSAGE_HEADER_LENGTH; + + // TODO Support a higher minimum fragment size? + if (fragmentLimit < 1) + { + // TODO Should we be throwing an exception here? + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + int length = message.Body.Length; + + // NOTE: Must still send a fragment if body is empty + int fragment_offset = 0; + do + { + int fragment_length = System.Math.Min(length - fragment_offset, fragmentLimit); + WriteHandshakeFragment(message, fragment_offset, fragment_length); + fragment_offset += fragment_length; + } + while (fragment_offset < length); + } + + /// + private void WriteHandshakeFragment(Message message, int fragment_offset, int fragment_length) + { + RecordLayerBuffer fragment = new RecordLayerBuffer(MESSAGE_HEADER_LENGTH + fragment_length); + TlsUtilities.WriteUint8(message.Type, fragment); + TlsUtilities.WriteUint24(message.Body.Length, fragment); + TlsUtilities.WriteUint16(message.Seq, fragment); + TlsUtilities.WriteUint24(fragment_offset, fragment); + TlsUtilities.WriteUint24(fragment_length, fragment); + fragment.Write(message.Body, fragment_offset, fragment_length); + + fragment.SendToRecordLayer(m_recordLayer); + } + + private static bool CheckAll(IDictionary inboundFlight) + { + foreach (DtlsReassembler r in inboundFlight.Values) + { + if (r.GetBodyIfComplete() == null) + return false; + } + return true; + } + + private static void ResetAll(IDictionary inboundFlight) + { + foreach (DtlsReassembler r in inboundFlight.Values) + { + r.Reset(); + } + } + + internal class Message + { + private readonly int m_message_seq; + private readonly short m_msg_type; + private readonly byte[] m_body; + + internal Message(int message_seq, short msg_type, byte[] body) + { + this.m_message_seq = message_seq; + this.m_msg_type = msg_type; + this.m_body = body; + } + + public int Seq + { + get { return m_message_seq; } + } + + public short Type + { + get { return m_msg_type; } + } + + public byte[] Body + { + get { return m_body; } + } + } + + internal class RecordLayerBuffer + : MemoryStream + { + internal RecordLayerBuffer(int size) + : base(size) + { + } + + internal void SendToRecordLayer(DtlsRecordLayer recordLayer) + { + byte[] buf = GetBuffer(); + int bufLen = Convert.ToInt32(Length); + + recordLayer.Send(buf, 0, bufLen); + Dispose(); + } + } + + internal class Retransmit + : DtlsHandshakeRetransmit + { + private readonly DtlsReliableHandshake m_outer; + + internal Retransmit(DtlsReliableHandshake outer) + { + this.m_outer = outer; + } + + public void ReceivedHandshakeRecord(int epoch, byte[] buf, int off, int len) + { + m_outer.ProcessRecord(0, epoch, buf, off, len); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsReliableHandshake.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsReliableHandshake.cs.meta new file mode 100644 index 000000000..ba35b04e1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsReliableHandshake.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f5071fec892895a41bee4a889df03482 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsReplayWindow.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsReplayWindow.cs new file mode 100644 index 000000000..44f710372 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsReplayWindow.cs @@ -0,0 +1,88 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /** + * RFC 4347 4.1.2.5 Anti-replay + *

    + * Support fast rejection of duplicate records by maintaining a sliding receive window + *

    + */ + internal sealed class DtlsReplayWindow + { + private const long ValidSeqMask = 0x0000FFFFFFFFFFFFL; + + private const long WindowSize = 64L; + + private long m_latestConfirmedSeq = -1; + private ulong m_bitmap = 0; + + /// Check whether a received record with the given sequence number should be rejected as a duplicate. + /// + /// the 48-bit DTLSPlainText.sequence_number field of a received record. + /// true if the record should be discarded without further processing. + internal bool ShouldDiscard(long seq) + { + if ((seq & ValidSeqMask) != seq) + return true; + + if (seq <= m_latestConfirmedSeq) + { + long diff = m_latestConfirmedSeq - seq; + if (diff >= WindowSize) + return true; + + if ((m_bitmap & (1UL << (int)diff)) != 0) + return true; + } + + return false; + } + + /// Report that a received record with the given sequence number passed authentication checks. + /// + /// the 48-bit DTLSPlainText.sequence_number field of an authenticated record. + internal void ReportAuthenticated(long seq) + { + if ((seq & ValidSeqMask) != seq) + throw new ArgumentException("out of range", "seq"); + + if (seq <= m_latestConfirmedSeq) + { + long diff = m_latestConfirmedSeq - seq; + if (diff < WindowSize) + { + m_bitmap |= (1UL << (int)diff); + } + } + else + { + long diff = seq - m_latestConfirmedSeq; + if (diff >= WindowSize) + { + m_bitmap = 1; + } + else + { + m_bitmap <<= (int)diff; // for earlier JDKs + m_bitmap |= 1UL; + } + m_latestConfirmedSeq = seq; + } + } + + internal void Reset(long seq) + { + if ((seq & ValidSeqMask) != seq) + throw new ArgumentException("out of range", "seq"); + + // Discard future records unless sequence number > 'seq' + m_latestConfirmedSeq = seq; + m_bitmap = ulong.MaxValue >> (int)System.Math.Max(0, 63 - seq); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsReplayWindow.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsReplayWindow.cs.meta new file mode 100644 index 000000000..ff9ea5300 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsReplayWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3d0f0d11bdc6afc4c88642dc019376d6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsRequest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsRequest.cs new file mode 100644 index 000000000..527bdc734 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsRequest.cs @@ -0,0 +1,42 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class DtlsRequest + { + private readonly long m_recordSeq; + private readonly byte[] m_message; + private readonly ClientHello m_clientHello; + + internal DtlsRequest(long recordSeq, byte[] message, ClientHello clientHello) + { + this.m_recordSeq = recordSeq; + this.m_message = message; + this.m_clientHello = clientHello; + } + + internal ClientHello ClientHello + { + get { return m_clientHello; } + } + + internal byte[] Message + { + get { return m_message; } + } + + internal int MessageSeq + { + get { return TlsUtilities.ReadUint16(m_message, 4); } + } + + internal long RecordSeq + { + get { return m_recordSeq; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsRequest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsRequest.cs.meta new file mode 100644 index 000000000..d7ef355ff --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 87dad85097912cc42a8391d267b093c3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsServerProtocol.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsServerProtocol.cs new file mode 100644 index 000000000..db7451d8c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsServerProtocol.cs @@ -0,0 +1,876 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public class DtlsServerProtocol + : DtlsProtocol + { + protected bool m_verifyRequests = true; + + public DtlsServerProtocol() + : base() + { + } + + public virtual bool VerifyRequests + { + get { return m_verifyRequests; } + set { this.m_verifyRequests = value; } + } + + /// + public virtual DtlsTransport Accept(TlsServer server, DatagramTransport transport) + { + return Accept(server, transport, null); + } + + /// + public virtual DtlsTransport Accept(TlsServer server, DatagramTransport transport, DtlsRequest request) + { + if (server == null) + throw new ArgumentNullException("server"); + if (transport == null) + throw new ArgumentNullException("transport"); + + ServerHandshakeState state = new ServerHandshakeState(); + state.server = server; + state.serverContext = new TlsServerContextImpl(server.Crypto); + server.Init(state.serverContext); + state.serverContext.HandshakeBeginning(server); + + SecurityParameters securityParameters = state.serverContext.SecurityParameters; + securityParameters.m_extendedPadding = server.ShouldUseExtendedPadding(); + + DtlsRecordLayer recordLayer = new DtlsRecordLayer(state.serverContext, state.server, transport); + server.NotifyCloseHandle(recordLayer); + + try + { + return ServerHandshake(state, recordLayer, request); + } + catch (TlsFatalAlert fatalAlert) + { + AbortServerHandshake(state, recordLayer, fatalAlert.AlertDescription); + throw fatalAlert; + } + catch (IOException e) + { + AbortServerHandshake(state, recordLayer, AlertDescription.internal_error); + throw e; + } + catch (Exception e) + { + AbortServerHandshake(state, recordLayer, AlertDescription.internal_error); + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + finally + { + securityParameters.Clear(); + } + } + + internal virtual void AbortServerHandshake(ServerHandshakeState state, DtlsRecordLayer recordLayer, + short alertDescription) + { + recordLayer.Fail(alertDescription); + InvalidateSession(state); + } + + /// + internal virtual DtlsTransport ServerHandshake(ServerHandshakeState state, DtlsRecordLayer recordLayer, + DtlsRequest request) + { + SecurityParameters securityParameters = state.serverContext.SecurityParameters; + + DtlsReliableHandshake handshake = new DtlsReliableHandshake(state.serverContext, recordLayer, + state.server.GetHandshakeTimeoutMillis(), request); + + DtlsReliableHandshake.Message clientMessage = null; + + if (null == request) + { + clientMessage = handshake.ReceiveMessage(); + + // NOTE: DtlsRecordLayer requires any DTLS version, we don't otherwise constrain this + //ProtocolVersion recordLayerVersion = recordLayer.ReadVersion; + + if (clientMessage.Type == HandshakeType.client_hello) + { + ProcessClientHello(state, clientMessage.Body); + } + else + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + } + else + { + ProcessClientHello(state, request.ClientHello); + } + + /* + * NOTE: Currently no server support for session resumption + * + * If adding support, ensure securityParameters.tlsUnique is set to the localVerifyData, but + * ONLY when extended_master_secret has been negotiated (otherwise NULL). + */ + { + // TODO[resumption] + + state.tlsSession = TlsUtilities.ImportSession(TlsUtilities.EmptyBytes, null); + state.sessionParameters = null; + state.sessionMasterSecret = null; + } + + securityParameters.m_sessionID = state.tlsSession.SessionID; + + state.server.NotifySession(state.tlsSession); + + { + byte[] serverHelloBody = GenerateServerHello(state, recordLayer); + + // TODO[dtls13] Ideally, move this into GenerateServerHello once legacy_record_version clarified + { + ProtocolVersion recordLayerVersion = state.serverContext.ServerVersion; + recordLayer.ReadVersion = recordLayerVersion; + recordLayer.SetWriteVersion(recordLayerVersion); + } + + handshake.SendMessage(HandshakeType.server_hello, serverHelloBody); + } + + handshake.HandshakeHash.NotifyPrfDetermined(); + + var serverSupplementalData = state.server.GetServerSupplementalData(); + if (serverSupplementalData != null) + { + byte[] supplementalDataBody = GenerateSupplementalData(serverSupplementalData); + handshake.SendMessage(HandshakeType.supplemental_data, supplementalDataBody); + } + + state.keyExchange = TlsUtilities.InitKeyExchangeServer(state.serverContext, state.server); + + state.serverCredentials = null; + + if (!KeyExchangeAlgorithm.IsAnonymous(securityParameters.KeyExchangeAlgorithm)) + { + state.serverCredentials = TlsUtilities.EstablishServerCredentials(state.server); + } + + // Server certificate + { + Certificate serverCertificate = null; + + MemoryStream endPointHash = new MemoryStream(); + if (state.serverCredentials == null) + { + state.keyExchange.SkipServerCredentials(); + } + else + { + state.keyExchange.ProcessServerCredentials(state.serverCredentials); + + serverCertificate = state.serverCredentials.Certificate; + + SendCertificateMessage(state.serverContext, handshake, serverCertificate, endPointHash); + } + securityParameters.m_tlsServerEndPoint = endPointHash.ToArray(); + + // TODO[RFC 3546] Check whether empty certificates is possible, allowed, or excludes CertificateStatus + if (serverCertificate == null || serverCertificate.IsEmpty) + { + securityParameters.m_statusRequestVersion = 0; + } + } + + if (securityParameters.StatusRequestVersion > 0) + { + CertificateStatus certificateStatus = state.server.GetCertificateStatus(); + if (certificateStatus != null) + { + byte[] certificateStatusBody = GenerateCertificateStatus(state, certificateStatus); + handshake.SendMessage(HandshakeType.certificate_status, certificateStatusBody); + } + } + + byte[] serverKeyExchange = state.keyExchange.GenerateServerKeyExchange(); + if (serverKeyExchange != null) + { + handshake.SendMessage(HandshakeType.server_key_exchange, serverKeyExchange); + } + + if (state.serverCredentials != null) + { + state.certificateRequest = state.server.GetCertificateRequest(); + + if (null == state.certificateRequest) + { + /* + * For static agreement key exchanges, CertificateRequest is required since + * the client Certificate message is mandatory but can only be sent if the + * server requests it. + */ + if (!state.keyExchange.RequiresCertificateVerify) + throw new TlsFatalAlert(AlertDescription.internal_error); + } + else + { + if (TlsUtilities.IsTlsV12(state.serverContext) + != (state.certificateRequest.SupportedSignatureAlgorithms != null)) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + state.certificateRequest = TlsUtilities.ValidateCertificateRequest(state.certificateRequest, state.keyExchange); + + TlsUtilities.EstablishServerSigAlgs(securityParameters, state.certificateRequest); + + if (ProtocolVersion.DTLSv12.Equals(securityParameters.NegotiatedVersion)) + { + TlsUtilities.TrackHashAlgorithms(handshake.HandshakeHash, securityParameters.ServerSigAlgs); + + if (state.serverContext.Crypto.HasAnyStreamVerifiers(securityParameters.ServerSigAlgs)) + { + handshake.HandshakeHash.ForceBuffering(); + } + } + else + { + if (state.serverContext.Crypto.HasAnyStreamVerifiersLegacy(state.certificateRequest.CertificateTypes)) + { + handshake.HandshakeHash.ForceBuffering(); + } + } + } + } + + handshake.HandshakeHash.SealHashAlgorithms(); + + if (null != state.certificateRequest) + { + byte[] certificateRequestBody = GenerateCertificateRequest(state, state.certificateRequest); + handshake.SendMessage(HandshakeType.certificate_request, certificateRequestBody); + } + + handshake.SendMessage(HandshakeType.server_hello_done, TlsUtilities.EmptyBytes); + + clientMessage = handshake.ReceiveMessage(); + + if (clientMessage.Type == HandshakeType.supplemental_data) + { + ProcessClientSupplementalData(state, clientMessage.Body); + clientMessage = handshake.ReceiveMessage(); + } + else + { + state.server.ProcessClientSupplementalData(null); + } + + if (state.certificateRequest == null) + { + state.keyExchange.SkipClientCredentials(); + } + else + { + if (clientMessage.Type == HandshakeType.certificate) + { + ProcessClientCertificate(state, clientMessage.Body); + clientMessage = handshake.ReceiveMessage(); + } + else + { + if (TlsUtilities.IsTlsV12(state.serverContext)) + { + /* + * RFC 5246 If no suitable certificate is available, the client MUST send a + * certificate message containing no certificates. + * + * NOTE: In previous RFCs, this was SHOULD instead of MUST. + */ + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + NotifyClientCertificate(state, Certificate.EmptyChain); + } + } + + if (clientMessage.Type == HandshakeType.client_key_exchange) + { + ProcessClientKeyExchange(state, clientMessage.Body); + } + else + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + securityParameters.m_sessionHash = TlsUtilities.GetCurrentPrfHash(handshake.HandshakeHash); + + TlsProtocol.EstablishMasterSecret(state.serverContext, state.keyExchange); + recordLayer.InitPendingEpoch(TlsUtilities.InitCipher(state.serverContext)); + + /* + * RFC 5246 7.4.8 This message is only sent following a client certificate that has signing + * capability (i.e., all certificates except those containing fixed Diffie-Hellman + * parameters). + */ + { + if (ExpectCertificateVerifyMessage(state)) + { + clientMessage = handshake.ReceiveMessageDelayedDigest(HandshakeType.certificate_verify); + byte[] certificateVerifyBody = clientMessage.Body; + ProcessCertificateVerify(state, certificateVerifyBody, handshake.HandshakeHash); + handshake.PrepareToFinish(); + handshake.UpdateHandshakeMessagesDigest(clientMessage); + } + else + { + handshake.PrepareToFinish(); + } + } + + // NOTE: Calculated exclusive of the actual Finished message from the client + securityParameters.m_peerVerifyData = TlsUtilities.CalculateVerifyData(state.serverContext, + handshake.HandshakeHash, false); + ProcessFinished(handshake.ReceiveMessageBody(HandshakeType.finished), securityParameters.PeerVerifyData); + + if (state.expectSessionTicket) + { + /* + * TODO[new_session_ticket] Check the server-side rules regarding the session ID, since the client + * is going to ignore any session ID it received once it sees the new_session_ticket message. + */ + + NewSessionTicket newSessionTicket = state.server.GetNewSessionTicket(); + byte[] newSessionTicketBody = GenerateNewSessionTicket(state, newSessionTicket); + handshake.SendMessage(HandshakeType.new_session_ticket, newSessionTicketBody); + } + + // NOTE: Calculated exclusive of the Finished message itself + securityParameters.m_localVerifyData = TlsUtilities.CalculateVerifyData(state.serverContext, + handshake.HandshakeHash, true); + handshake.SendMessage(HandshakeType.finished, securityParameters.LocalVerifyData); + + handshake.Finish(); + + state.sessionMasterSecret = securityParameters.MasterSecret; + + state.sessionParameters = new SessionParameters.Builder() + .SetCipherSuite(securityParameters.CipherSuite) + .SetExtendedMasterSecret(securityParameters.IsExtendedMasterSecret) + .SetLocalCertificate(securityParameters.LocalCertificate) + .SetMasterSecret(state.serverContext.Crypto.AdoptSecret(state.sessionMasterSecret)) + .SetNegotiatedVersion(securityParameters.NegotiatedVersion) + .SetPeerCertificate(securityParameters.PeerCertificate) + .SetPskIdentity(securityParameters.PskIdentity) + .SetSrpIdentity(securityParameters.SrpIdentity) + // TODO Consider filtering extensions that aren't relevant to resumed sessions + .SetServerExtensions(state.serverExtensions) + .Build(); + + state.tlsSession = TlsUtilities.ImportSession(state.tlsSession.SessionID, state.sessionParameters); + + securityParameters.m_tlsUnique = securityParameters.PeerVerifyData; + + state.serverContext.HandshakeComplete(state.server, state.tlsSession); + + recordLayer.InitHeartbeat(state.heartbeat, HeartbeatMode.peer_allowed_to_send == state.heartbeatPolicy); + + return new DtlsTransport(recordLayer, state.server.IgnoreCorruptDtlsRecords); + } + + /// + protected virtual byte[] GenerateCertificateRequest(ServerHandshakeState state, + CertificateRequest certificateRequest) + { + MemoryStream buf = new MemoryStream(); + certificateRequest.Encode(state.serverContext, buf); + return buf.ToArray(); + } + + /// + protected virtual byte[] GenerateCertificateStatus(ServerHandshakeState state, + CertificateStatus certificateStatus) + { + MemoryStream buf = new MemoryStream(); + // TODO[tls13] Ensure this cannot happen for (D)TLS1.3+ + certificateStatus.Encode(buf); + return buf.ToArray(); + } + + /// + protected virtual byte[] GenerateNewSessionTicket(ServerHandshakeState state, + NewSessionTicket newSessionTicket) + { + MemoryStream buf = new MemoryStream(); + newSessionTicket.Encode(buf); + return buf.ToArray(); + } + + /// + internal virtual byte[] GenerateServerHello(ServerHandshakeState state, DtlsRecordLayer recordLayer) + { + TlsServerContextImpl context = state.serverContext; + SecurityParameters securityParameters = context.SecurityParameters; + + ProtocolVersion server_version = state.server.GetServerVersion(); + { + if (!ProtocolVersion.Contains(context.ClientSupportedVersions, server_version)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + // TODO[dtls13] Read draft/RFC for guidance on the legacy_record_version field + //ProtocolVersion legacy_record_version = server_version.IsLaterVersionOf(ProtocolVersion.DTLSv12) + // ? ProtocolVersion.DTLSv12 + // : server_version; + + //recordLayer.SetWriteVersion(legacy_record_version); + securityParameters.m_negotiatedVersion = server_version; + + TlsUtilities.NegotiatedVersionDtlsServer(context); + } + + { + bool useGmtUnixTime = ProtocolVersion.DTLSv12.IsEqualOrLaterVersionOf(server_version) + && state.server.ShouldUseGmtUnixTime(); + + securityParameters.m_serverRandom = TlsProtocol.CreateRandomBlock(useGmtUnixTime, context); + + if (!server_version.Equals(ProtocolVersion.GetLatestDtls(state.server.GetProtocolVersions()))) + { + TlsUtilities.WriteDowngradeMarker(server_version, securityParameters.ServerRandom); + } + } + + { + int cipherSuite = ValidateSelectedCipherSuite(state.server.GetSelectedCipherSuite(), + AlertDescription.internal_error); + + if (!TlsUtilities.IsValidCipherSuiteSelection(state.offeredCipherSuites, cipherSuite) || + !TlsUtilities.IsValidVersionForCipherSuite(cipherSuite, securityParameters.NegotiatedVersion)) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + TlsUtilities.NegotiatedCipherSuite(securityParameters, cipherSuite); + } + + state.serverExtensions = TlsExtensionsUtilities.EnsureExtensionsInitialised( + state.server.GetServerExtensions()); + + state.server.GetServerExtensionsForConnection(state.serverExtensions); + + ProtocolVersion legacy_version = server_version; + if (server_version.IsLaterVersionOf(ProtocolVersion.DTLSv12)) + { + legacy_version = ProtocolVersion.DTLSv12; + + TlsExtensionsUtilities.AddSupportedVersionsExtensionServer(state.serverExtensions, server_version); + } + + /* + * RFC 5746 3.6. Server Behavior: Initial Handshake + */ + if (securityParameters.IsSecureRenegotiation) + { + byte[] renegExtData = TlsUtilities.GetExtensionData(state.serverExtensions, + ExtensionType.renegotiation_info); + bool noRenegExt = (null == renegExtData); + + if (noRenegExt) + { + /* + * Note that sending a "renegotiation_info" extension in response to a ClientHello + * containing only the SCSV is an explicit exception to the prohibition in RFC 5246, + * Section 7.4.1.4, on the server sending unsolicited extensions and is only allowed + * because the client is signaling its willingness to receive the extension via the + * TLS_EMPTY_RENEGOTIATION_INFO_SCSV SCSV. + */ + + /* + * If the secure_renegotiation flag is set to TRUE, the server MUST include an empty + * "renegotiation_info" extension in the ServerHello message. + */ + state.serverExtensions[ExtensionType.renegotiation_info] = TlsProtocol.CreateRenegotiationInfo( + TlsUtilities.EmptyBytes); + } + } + + /* + * RFC 7627 4. Clients and servers SHOULD NOT accept handshakes that do not use the extended + * master secret [..]. (and see 5.2, 5.3) + * + * RFC 8446 Appendix D. Because TLS 1.3 always hashes in the transcript up to the server + * Finished, implementations which support both TLS 1.3 and earlier versions SHOULD indicate + * the use of the Extended Master Secret extension in their APIs whenever TLS 1.3 is used. + */ + if (TlsUtilities.IsTlsV13(server_version)) + { + securityParameters.m_extendedMasterSecret = true; + } + else + { + securityParameters.m_extendedMasterSecret = state.offeredExtendedMasterSecret + && state.server.ShouldUseExtendedMasterSecret(); + + if (securityParameters.IsExtendedMasterSecret) + { + TlsExtensionsUtilities.AddExtendedMasterSecretExtension(state.serverExtensions); + } + else if (state.server.RequiresExtendedMasterSecret()) + { + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + else if (state.resumedSession && !state.server.AllowLegacyResumption()) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + // Heartbeats + if (null != state.heartbeat || HeartbeatMode.peer_allowed_to_send == state.heartbeatPolicy) + { + TlsExtensionsUtilities.AddHeartbeatExtension(state.serverExtensions, + new HeartbeatExtension(state.heartbeatPolicy)); + } + + + + /* + * RFC 7301 3.1. When session resumption or session tickets [...] are used, the previous + * contents of this extension are irrelevant, and only the values in the new handshake + * messages are considered. + */ + securityParameters.m_applicationProtocol = TlsExtensionsUtilities.GetAlpnExtensionServer( + state.serverExtensions); + securityParameters.m_applicationProtocolSet = true; + + /* + * TODO RFC 3546 2.3 If [...] the older session is resumed, then the server MUST ignore + * extensions appearing in the client hello, and send a server hello containing no + * extensions. + */ + if (state.serverExtensions.Count > 0) + { + securityParameters.m_encryptThenMac = TlsExtensionsUtilities.HasEncryptThenMacExtension( + state.serverExtensions); + + securityParameters.m_maxFragmentLength = EvaluateMaxFragmentLengthExtension(state.resumedSession, + state.clientExtensions, state.serverExtensions, AlertDescription.internal_error); + + securityParameters.m_truncatedHmac = TlsExtensionsUtilities.HasTruncatedHmacExtension(state.serverExtensions); + + /* + * TODO It's surprising that there's no provision to allow a 'fresh' CertificateStatus to be sent in + * a session resumption handshake. + */ + if (!state.resumedSession) + { + // TODO[tls13] See RFC 8446 4.4.2.1 + if (TlsUtilities.HasExpectedEmptyExtensionData(state.serverExtensions, + ExtensionType.status_request_v2, AlertDescription.internal_error)) + { + securityParameters.m_statusRequestVersion = 2; + } + else if (TlsUtilities.HasExpectedEmptyExtensionData(state.serverExtensions, + ExtensionType.status_request, AlertDescription.internal_error)) + { + securityParameters.m_statusRequestVersion = 1; + } + } + + state.expectSessionTicket = !state.resumedSession + && TlsUtilities.HasExpectedEmptyExtensionData(state.serverExtensions, ExtensionType.session_ticket, + AlertDescription.internal_error); + } + + ApplyMaxFragmentLengthExtension(recordLayer, securityParameters.MaxFragmentLength); + + + + ServerHello serverHello = new ServerHello(legacy_version, securityParameters.ServerRandom, + state.tlsSession.SessionID, securityParameters.CipherSuite, state.serverExtensions); + + MemoryStream buf = new MemoryStream(); + serverHello.Encode(state.serverContext, buf); + return buf.ToArray(); + } + + protected virtual void InvalidateSession(ServerHandshakeState state) + { + if (state.sessionMasterSecret != null) + { + state.sessionMasterSecret.Destroy(); + state.sessionMasterSecret = null; + } + + if (state.sessionParameters != null) + { + state.sessionParameters.Clear(); + state.sessionParameters = null; + } + + if (state.tlsSession != null) + { + state.tlsSession.Invalidate(); + state.tlsSession = null; + } + } + + /// + protected virtual void NotifyClientCertificate(ServerHandshakeState state, Certificate clientCertificate) + { + if (null == state.certificateRequest) + throw new TlsFatalAlert(AlertDescription.internal_error); + + TlsUtilities.ProcessClientCertificate(state.serverContext, clientCertificate, state.keyExchange, + state.server); + } + + /// + protected virtual void ProcessClientCertificate(ServerHandshakeState state, byte[] body) + { + MemoryStream buf = new MemoryStream(body, false); + + Certificate.ParseOptions options = new Certificate.ParseOptions() + { + CertificateType = TlsExtensionsUtilities.GetClientCertificateTypeExtensionServer( + state.clientExtensions, CertificateType.X509), + MaxChainLength = state.server.GetMaxCertificateChainLength(), + }; + + Certificate clientCertificate = Certificate.Parse(options, state.serverContext, buf, null); + + TlsProtocol.AssertEmpty(buf); + + NotifyClientCertificate(state, clientCertificate); + } + + /// + protected virtual void ProcessCertificateVerify(ServerHandshakeState state, byte[] body, + TlsHandshakeHash handshakeHash) + { + if (state.certificateRequest == null) + throw new InvalidOperationException(); + + MemoryStream buf = new MemoryStream(body, false); + + TlsServerContextImpl context = state.serverContext; + DigitallySigned certificateVerify = DigitallySigned.Parse(context, buf); + + TlsProtocol.AssertEmpty(buf); + + TlsUtilities.VerifyCertificateVerifyClient(context, state.certificateRequest, certificateVerify, handshakeHash); + } + + /// + protected virtual void ProcessClientHello(ServerHandshakeState state, byte[] body) + { + MemoryStream buf = new MemoryStream(body, false); + ClientHello clientHello = ClientHello.Parse(buf, Stream.Null); + ProcessClientHello(state, clientHello); + } + + /// + protected virtual void ProcessClientHello(ServerHandshakeState state, ClientHello clientHello) + { + // TODO Read RFCs for guidance on the expected record layer version number + ProtocolVersion legacy_version = clientHello.Version; + state.offeredCipherSuites = clientHello.CipherSuites; + + /* + * TODO RFC 3546 2.3 If [...] the older session is resumed, then the server MUST ignore + * extensions appearing in the client hello, and send a server hello containing no + * extensions. + */ + state.clientExtensions = clientHello.Extensions; + + + + TlsServerContextImpl context = state.serverContext; + SecurityParameters securityParameters = context.SecurityParameters; + + if (!legacy_version.IsDtls) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + context.SetRsaPreMasterSecretVersion(legacy_version); + + context.SetClientSupportedVersions( + TlsExtensionsUtilities.GetSupportedVersionsExtensionClient(state.clientExtensions)); + + ProtocolVersion client_version = legacy_version; + if (null == context.ClientSupportedVersions) + { + if (client_version.IsLaterVersionOf(ProtocolVersion.DTLSv12)) + { + client_version = ProtocolVersion.DTLSv12; + } + + context.SetClientSupportedVersions(client_version.DownTo(ProtocolVersion.DTLSv10)); + } + else + { + client_version = ProtocolVersion.GetLatestDtls(context.ClientSupportedVersions); + } + + if (!ProtocolVersion.SERVER_EARLIEST_SUPPORTED_DTLS.IsEqualOrEarlierVersionOf(client_version)) + throw new TlsFatalAlert(AlertDescription.protocol_version); + + context.SetClientVersion(client_version); + + state.server.NotifyClientVersion(context.ClientVersion); + + securityParameters.m_clientRandom = clientHello.Random; + + state.server.NotifyFallback(Arrays.Contains(state.offeredCipherSuites, CipherSuite.TLS_FALLBACK_SCSV)); + + state.server.NotifyOfferedCipherSuites(state.offeredCipherSuites); + + /* + * TODO[resumption] Check RFC 7627 5.4. for required behaviour + */ + + /* + * RFC 5746 3.6. Server Behavior: Initial Handshake + */ + { + /* + * RFC 5746 3.4. The client MUST include either an empty "renegotiation_info" extension, + * or the TLS_EMPTY_RENEGOTIATION_INFO_SCSV signaling cipher suite value in the + * ClientHello. Including both is NOT RECOMMENDED. + */ + + /* + * When a ClientHello is received, the server MUST check if it includes the + * TLS_EMPTY_RENEGOTIATION_INFO_SCSV SCSV. If it does, set the secure_renegotiation flag + * to TRUE. + */ + if (Arrays.Contains(state.offeredCipherSuites, CipherSuite.TLS_EMPTY_RENEGOTIATION_INFO_SCSV)) + { + securityParameters.m_secureRenegotiation = true; + } + + /* + * The server MUST check if the "renegotiation_info" extension is included in the + * ClientHello. + */ + byte[] renegExtData = TlsUtilities.GetExtensionData(state.clientExtensions, + ExtensionType.renegotiation_info); + if (renegExtData != null) + { + /* + * If the extension is present, set secure_renegotiation flag to TRUE. The + * server MUST then verify that the length of the "renegotiated_connection" + * field is zero, and if it is not, MUST abort the handshake. + */ + securityParameters.m_secureRenegotiation = true; + + if (!Arrays.ConstantTimeAreEqual(renegExtData, + TlsProtocol.CreateRenegotiationInfo(TlsUtilities.EmptyBytes))) + { + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + } + } + + state.server.NotifySecureRenegotiation(securityParameters.IsSecureRenegotiation); + + state.offeredExtendedMasterSecret = TlsExtensionsUtilities.HasExtendedMasterSecretExtension( + state.clientExtensions); + + if (state.clientExtensions != null) + { + // NOTE: Validates the padding extension data, if present + TlsExtensionsUtilities.GetPaddingExtension(state.clientExtensions); + + securityParameters.m_clientServerNames = TlsExtensionsUtilities.GetServerNameExtensionClient( + state.clientExtensions); + + /* + * RFC 5246 7.4.1.4.1. Note: this extension is not meaningful for TLS versions prior + * to 1.2. Clients MUST NOT offer it if they are offering prior versions. + */ + if (TlsUtilities.IsSignatureAlgorithmsExtensionAllowed(client_version)) + { + TlsUtilities.EstablishClientSigAlgs(securityParameters, state.clientExtensions); + } + + securityParameters.m_clientSupportedGroups = TlsExtensionsUtilities.GetSupportedGroupsExtension( + state.clientExtensions); + + // Heartbeats + { + HeartbeatExtension heartbeatExtension = TlsExtensionsUtilities.GetHeartbeatExtension( + state.clientExtensions); + if (null != heartbeatExtension) + { + if (HeartbeatMode.peer_allowed_to_send == heartbeatExtension.Mode) + { + state.heartbeat = state.server.GetHeartbeat(); + } + + state.heartbeatPolicy = state.server.GetHeartbeatPolicy(); + } + } + + state.server.ProcessClientExtensions(state.clientExtensions); + } + } + + /// + protected virtual void ProcessClientKeyExchange(ServerHandshakeState state, byte[] body) + { + MemoryStream buf = new MemoryStream(body, false); + state.keyExchange.ProcessClientKeyExchange(buf); + TlsProtocol.AssertEmpty(buf); + } + + /// + protected virtual void ProcessClientSupplementalData(ServerHandshakeState state, byte[] body) + { + MemoryStream buf = new MemoryStream(body, false); + var clientSupplementalData = TlsProtocol.ReadSupplementalDataMessage(buf); + state.server.ProcessClientSupplementalData(clientSupplementalData); + } + + protected virtual bool ExpectCertificateVerifyMessage(ServerHandshakeState state) + { + if (null == state.certificateRequest) + return false; + + Certificate clientCertificate = state.serverContext.SecurityParameters.PeerCertificate; + + return null != clientCertificate && !clientCertificate.IsEmpty + && (null == state.keyExchange || state.keyExchange.RequiresCertificateVerify); + } + + protected internal class ServerHandshakeState + { + internal TlsServer server = null; + internal TlsServerContextImpl serverContext = null; + internal TlsSession tlsSession = null; + internal SessionParameters sessionParameters = null; + internal TlsSecret sessionMasterSecret = null; + internal SessionParameters.Builder sessionParametersBuilder = null; + internal int[] offeredCipherSuites = null; + internal IDictionary clientExtensions = null; + internal IDictionary serverExtensions = null; + internal bool offeredExtendedMasterSecret = false; + internal bool resumedSession = false; + internal bool expectSessionTicket = false; + internal TlsKeyExchange keyExchange = null; + internal TlsCredentials serverCredentials = null; + internal CertificateRequest certificateRequest = null; + internal TlsHeartbeat heartbeat = null; + internal short heartbeatPolicy = HeartbeatMode.peer_not_allowed_to_send; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsServerProtocol.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsServerProtocol.cs.meta new file mode 100644 index 000000000..014b1c5c7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsServerProtocol.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3e8de4c1c75a606439e2bc055d18549c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsTransport.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsTransport.cs new file mode 100644 index 000000000..d4a4652c4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsTransport.cs @@ -0,0 +1,242 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Net.Sockets; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public class DtlsTransport + : DatagramTransport + { + private readonly DtlsRecordLayer m_recordLayer; + private readonly bool m_ignoreCorruptRecords; + + internal DtlsTransport(DtlsRecordLayer recordLayer, bool ignoreCorruptRecords) + { + m_recordLayer = recordLayer; + m_ignoreCorruptRecords = ignoreCorruptRecords; + } + + /// + public virtual int GetReceiveLimit() + { + return m_recordLayer.GetReceiveLimit(); + } + + /// + public virtual int GetSendLimit() + { + return m_recordLayer.GetSendLimit(); + } + + /// + public virtual int Receive(byte[] buf, int off, int len, int waitMillis) + { + if (null == buf) + throw new ArgumentNullException("buf"); + if (off < 0 || off >= buf.Length) + throw new ArgumentException("invalid offset: " + off, "off"); + if (len < 0 || len > buf.Length - off) + throw new ArgumentException("invalid length: " + len, "len"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return Receive(buf.AsSpan(off, len), waitMillis); +#else + if (waitMillis < 0) + throw new ArgumentException("cannot be negative", "waitMillis"); + + try + { + return m_recordLayer.Receive(buf, off, len, waitMillis); + } + catch (TlsFatalAlert fatalAlert) + { + if (m_ignoreCorruptRecords && AlertDescription.bad_record_mac == fatalAlert.AlertDescription) + return -1; + + m_recordLayer.Fail(fatalAlert.AlertDescription); + throw fatalAlert; + } + catch (TlsTimeoutException e) + { + throw e; + } + catch (SocketException e) + { + if (TlsUtilities.IsTimeout(e)) + throw e; + + m_recordLayer.Fail(AlertDescription.internal_error); + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + // TODO[tls-port] Can we support interrupted IO on .NET? + //catch (InterruptedIOException e) + //{ + // throw e; + //} + catch (IOException e) + { + m_recordLayer.Fail(AlertDescription.internal_error); + throw e; + } + catch (Exception e) + { + m_recordLayer.Fail(AlertDescription.internal_error); + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// + public virtual int Receive(Span buffer, int waitMillis) + { + if (waitMillis < 0) + throw new ArgumentException("cannot be negative", nameof(waitMillis)); + + try + { + return m_recordLayer.Receive(buffer, waitMillis); + } + catch (TlsFatalAlert fatalAlert) + { + if (m_ignoreCorruptRecords && AlertDescription.bad_record_mac == fatalAlert.AlertDescription) + return -1; + + m_recordLayer.Fail(fatalAlert.AlertDescription); + throw fatalAlert; + } + catch (TlsTimeoutException e) + { + throw e; + } + catch (SocketException e) + { + if (TlsUtilities.IsTimeout(e)) + throw e; + + m_recordLayer.Fail(AlertDescription.internal_error); + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + // TODO[tls-port] Can we support interrupted IO on .NET? + //catch (InterruptedIOException e) + //{ + // throw e; + //} + catch (IOException e) + { + m_recordLayer.Fail(AlertDescription.internal_error); + throw e; + } + catch (Exception e) + { + m_recordLayer.Fail(AlertDescription.internal_error); + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + } +#endif + + /// + public virtual void Send(byte[] buf, int off, int len) + { + if (null == buf) + throw new ArgumentNullException("buf"); + if (off < 0 || off >= buf.Length) + throw new ArgumentException("invalid offset: " + off, "off"); + if (len < 0 || len > buf.Length - off) + throw new ArgumentException("invalid length: " + len, "len"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Send(buf.AsSpan(off, len)); +#else + try + { + m_recordLayer.Send(buf, off, len); + } + catch (TlsFatalAlert fatalAlert) + { + m_recordLayer.Fail(fatalAlert.AlertDescription); + throw fatalAlert; + } + catch (TlsTimeoutException e) + { + throw e; + } + catch (SocketException e) + { + if (TlsUtilities.IsTimeout(e)) + throw e; + + m_recordLayer.Fail(AlertDescription.internal_error); + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + // TODO[tls-port] Can we support interrupted IO on .NET? + //catch (InterruptedIOException e) + //{ + // throw e; + //} + catch (IOException e) + { + m_recordLayer.Fail(AlertDescription.internal_error); + throw e; + } + catch (Exception e) + { + m_recordLayer.Fail(AlertDescription.internal_error); + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void Send(ReadOnlySpan buffer) + { + try + { + m_recordLayer.Send(buffer); + } + catch (TlsFatalAlert fatalAlert) + { + m_recordLayer.Fail(fatalAlert.AlertDescription); + throw fatalAlert; + } + catch (TlsTimeoutException e) + { + throw e; + } + catch (SocketException e) + { + if (TlsUtilities.IsTimeout(e)) + throw e; + + m_recordLayer.Fail(AlertDescription.internal_error); + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + // TODO[tls-port] Can we support interrupted IO on .NET? + //catch (InterruptedIOException e) + //{ + // throw e; + //} + catch (IOException e) + { + m_recordLayer.Fail(AlertDescription.internal_error); + throw e; + } + catch (Exception e) + { + m_recordLayer.Fail(AlertDescription.internal_error); + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + } +#endif + + /// + public virtual void Close() + { + m_recordLayer.Close(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsTransport.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsTransport.cs.meta new file mode 100644 index 000000000..fd8cc8850 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsTransport.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9f08c5eb62970c4499df68eed347567c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsVerifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsVerifier.cs new file mode 100644 index 000000000..5972a25e7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsVerifier.cs @@ -0,0 +1,93 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public class DtlsVerifier + { + private static TlsMac CreateCookieMac(TlsCrypto crypto) + { + TlsMac mac = crypto.CreateHmac(MacAlgorithm.hmac_sha256); + + byte[] secret = new byte[mac.MacLength]; + crypto.SecureRandom.NextBytes(secret); + + mac.SetKey(secret, 0, secret.Length); + + return mac; + } + + private readonly TlsMac m_cookieMac; + private readonly TlsMacSink m_cookieMacSink; + + public DtlsVerifier(TlsCrypto crypto) + { + this.m_cookieMac = CreateCookieMac(crypto); + this.m_cookieMacSink = new TlsMacSink(m_cookieMac); + } + + public virtual DtlsRequest VerifyRequest(byte[] clientID, byte[] data, int dataOff, int dataLen, + DatagramSender sender) + { + lock (this) + { + bool resetCookieMac = true; + + try + { + m_cookieMac.Update(clientID, 0, clientID.Length); + + DtlsRequest request = DtlsReliableHandshake.ReadClientRequest(data, dataOff, dataLen, + m_cookieMacSink); + if (null != request) + { + byte[] expectedCookie = m_cookieMac.CalculateMac(); + resetCookieMac = false; + + // TODO Consider stricter HelloVerifyRequest protocol + //switch (request.MessageSeq) + //{ + //case 0: + //{ + // DtlsReliableHandshake.SendHelloVerifyRequest(sender, request.RecordSeq, expectedCookie); + // break; + //} + //case 1: + //{ + // if (Arrays.ConstantTimeAreEqual(expectedCookie, request.ClientHello.Cookie)) + // return request; + + // break; + //} + //} + + if (Arrays.ConstantTimeAreEqual(expectedCookie, request.ClientHello.Cookie)) + return request; + + DtlsReliableHandshake.SendHelloVerifyRequest(sender, request.RecordSeq, expectedCookie); + } + } + catch (IOException) + { + // Ignore + } + finally + { + if (resetCookieMac) + { + m_cookieMac.Reset(); + } + } + + return null; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsVerifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsVerifier.cs.meta new file mode 100644 index 000000000..a6000532d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/DtlsVerifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6744fdef50a1d4e449fd4dd7ae3def03 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ECCurveType.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ECCurveType.cs new file mode 100644 index 000000000..f23dd1616 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ECCurveType.cs @@ -0,0 +1,33 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 4492 5.4 + public abstract class ECCurveType + { + /** + * Indicates the elliptic curve domain parameters are conveyed verbosely, and the + * underlying finite field is a prime field. + */ + public const short explicit_prime = 1; + + /** + * Indicates the elliptic curve domain parameters are conveyed verbosely, and the + * underlying finite field is a characteristic-2 field. + */ + public const short explicit_char2 = 2; + + /** + * Indicates that a named curve is used. This option SHOULD be used when applicable. + */ + public const short named_curve = 3; + + /* + * Values 248 through 255 are reserved for private use. + */ + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ECCurveType.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ECCurveType.cs.meta new file mode 100644 index 000000000..53ea463ff --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ECCurveType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 86f153c75b874724ca0bc1f03e963416 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ECPointFormat.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ECPointFormat.cs new file mode 100644 index 000000000..1302bed92 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ECPointFormat.cs @@ -0,0 +1,20 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 4492 5.1.2 + public abstract class ECPointFormat + { + public const short uncompressed = 0; + public const short ansiX962_compressed_prime = 1; + public const short ansiX962_compressed_char2 = 2; + + /* + * reserved (248..255) + */ + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ECPointFormat.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ECPointFormat.cs.meta new file mode 100644 index 000000000..62086cce1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ECPointFormat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ec19c4f25a2584b4ba06a8bd50031435 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/EncryptionAlgorithm.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/EncryptionAlgorithm.cs new file mode 100644 index 000000000..381345546 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/EncryptionAlgorithm.cs @@ -0,0 +1,86 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 2246 + /// + /// Note that the values here are implementation-specific and arbitrary. It is recommended not to depend on the + /// particular values (e.g. serialization). + /// + public abstract class EncryptionAlgorithm + { + public const int NULL = 0; + public const int RC4_40 = 1; + public const int RC4_128 = 2; + public const int RC2_CBC_40 = 3; + public const int IDEA_CBC = 4; + public const int DES40_CBC = 5; + public const int DES_CBC = 6; + public const int cls_3DES_EDE_CBC = 7; + + /* + * RFC 3268 + */ + public const int AES_128_CBC = 8; + public const int AES_256_CBC = 9; + + /* + * RFC 5289 + */ + public const int AES_128_GCM = 10; + public const int AES_256_GCM = 11; + + /* + * RFC 5932 + */ + public const int CAMELLIA_128_CBC = 12; + public const int CAMELLIA_256_CBC = 13; + + /* + * RFC 4162 + */ + public const int SEED_CBC = 14; + + /* + * RFC 6655 + */ + public const int AES_128_CCM = 15; + public const int AES_128_CCM_8 = 16; + public const int AES_256_CCM = 17; + public const int AES_256_CCM_8 = 18; + + /* + * RFC 6367 + */ + public const int CAMELLIA_128_GCM = 19; + public const int CAMELLIA_256_GCM = 20; + + /* + * RFC 7905 + */ + public const int CHACHA20_POLY1305 = 21; + + /* + * RFC 6209 + */ + public const int ARIA_128_CBC = 22; + public const int ARIA_256_CBC = 23; + public const int ARIA_128_GCM = 24; + public const int ARIA_256_GCM = 25; + + /* + * RFC 8998 + */ + public const int SM4_CCM = 26; + public const int SM4_GCM = 27; + + /* + * GMT 0024-2014 + */ + public const int SM4_CBC = 28; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/EncryptionAlgorithm.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/EncryptionAlgorithm.cs.meta new file mode 100644 index 000000000..a9252419d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/EncryptionAlgorithm.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 507bde7dd98540a4c98e9436a39bd27c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ExporterLabel.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ExporterLabel.cs new file mode 100644 index 000000000..d617b84ec --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ExporterLabel.cs @@ -0,0 +1,46 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 5705 + public abstract class ExporterLabel + { + /* + * RFC 5246 + */ + public const string client_finished = "client finished"; + public const string server_finished = "server finished"; + public const string master_secret = "master secret"; + public const string key_expansion = "key expansion"; + + /* + * RFC 5216 + */ + public const string client_EAP_encryption = "client EAP encryption"; + + /* + * RFC 5281 + */ + public const string ttls_keying_material = "ttls keying material"; + public const string ttls_challenge = "ttls challenge"; + + /* + * RFC 5764 + */ + public const string dtls_srtp = "EXTRACTOR-dtls_srtp"; + + /* + * RFC 7627 + */ + public const string extended_master_secret = "extended master secret"; + + /* + * draft-ietf-tokbind-protocol-16 + */ + public const string token_binding = "EXPORTER-Token-Binding"; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ExporterLabel.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ExporterLabel.cs.meta new file mode 100644 index 000000000..fa9e4cbe8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ExporterLabel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 573c250530699364fbca412588b15f75 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ExtensionType.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ExtensionType.cs new file mode 100644 index 000000000..53c17eef9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ExtensionType.cs @@ -0,0 +1,291 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class ExtensionType + { + /* + * RFC 2546 2.3. + */ + public const int server_name = 0; + public const int max_fragment_length = 1; + public const int client_certificate_url = 2; + public const int trusted_ca_keys = 3; + public const int truncated_hmac = 4; + public const int status_request = 5; + + /* + * RFC 4681 + */ + public const int user_mapping = 6; + + /* + * RFC 5878 + */ + public const int client_authz = 7; + public const int server_authz = 8; + + /* + * RFC 6091 + */ + public const int cert_type = 9; + + /* + * RFC 7919 (originally 'elliptic_curves' from RFC 4492) + */ + public const int supported_groups = 10; + + /* + * RFC 4492 5.1. + */ + public const int ec_point_formats = 11; + + /* + * RFC 5054 2.8.1. + */ + public const int srp = 12; + + /* + * RFC 5246 7.4.1.4. + */ + public const int signature_algorithms = 13; + + /* + * RFC 5764 9. + */ + public const int use_srtp = 14; + + /* + * RFC 6520 6. + */ + public const int heartbeat = 15; + + /* + * RFC 7301 + */ + public const int application_layer_protocol_negotiation = 16; + + /* + * RFC 6961 + */ + public const int status_request_v2 = 17; + + /* + * RFC 6962 + */ + public const int signed_certificate_timestamp = 18; + + /* + * RFC 7250 + */ + public const int client_certificate_type = 19; + public const int server_certificate_type = 20; + + /* + * RFC 7685 + */ + public const int padding = 21; + + /* + * RFC 7366 + */ + public const int encrypt_then_mac = 22; + + /* + * RFC 7627 + */ + public const int extended_master_secret = 23; + + /* + * RFC 8472 + */ + public const int token_binding = 24; + + /* + * RFC 7924 + */ + public const int cached_info = 25; + + /* + * RFC 8879 + */ + public const int compress_certificate = 27; + + /* + * RFC 8449 + */ + public const int record_size_limit = 28; + + /* + * RFC 5077 7. + */ + public const int session_ticket = 35; + + /* + * RFC 8446 + */ + public const int pre_shared_key = 41; + public const int early_data = 42; + public const int supported_versions = 43; + public const int cookie = 44; + public const int psk_key_exchange_modes = 45; + public const int certificate_authorities = 47; + public const int oid_filters = 48; + public const int post_handshake_auth = 49; + public const int signature_algorithms_cert = 50; + public const int key_share = 51; + + /* + * RFC 5746 3.2. + */ + public const int renegotiation_info = 0xff01; + + public static string GetName(int extensionType) + { + switch (extensionType) + { + case server_name: + return "server_name"; + case max_fragment_length: + return "max_fragment_length"; + case client_certificate_url: + return "client_certificate_url"; + case trusted_ca_keys: + return "trusted_ca_keys"; + case truncated_hmac: + return "truncated_hmac"; + case status_request: + return "status_request"; + case user_mapping: + return "user_mapping"; + case client_authz: + return "client_authz"; + case server_authz: + return "server_authz"; + case cert_type: + return "cert_type"; + case supported_groups: + return "supported_groups"; + case ec_point_formats: + return "ec_point_formats"; + case srp: + return "srp"; + case signature_algorithms: + return "signature_algorithms"; + case use_srtp: + return "use_srtp"; + case heartbeat: + return "heartbeat"; + case application_layer_protocol_negotiation: + return "application_layer_protocol_negotiation"; + case status_request_v2: + return "status_request_v2"; + case signed_certificate_timestamp: + return "signed_certificate_timestamp"; + case client_certificate_type: + return "client_certificate_type"; + case server_certificate_type: + return "server_certificate_type"; + case padding: + return "padding"; + case encrypt_then_mac: + return "encrypt_then_mac"; + case extended_master_secret: + return "extended_master_secret"; + case token_binding: + return "token_binding"; + case cached_info: + return "cached_info"; + case compress_certificate: + return "compress_certificate"; + case record_size_limit: + return "record_size_limit"; + case session_ticket: + return "session_ticket"; + case pre_shared_key: + return "pre_shared_key"; + case early_data: + return "early_data"; + case supported_versions: + return "supported_versions"; + case cookie: + return "cookie"; + case psk_key_exchange_modes: + return "psk_key_exchange_modes"; + case certificate_authorities: + return "certificate_authorities"; + case oid_filters: + return "oid_filters"; + case post_handshake_auth: + return "post_handshake_auth"; + case signature_algorithms_cert: + return "signature_algorithms_cert"; + case key_share: + return "key_share"; + case renegotiation_info: + return "renegotiation_info"; + default: + return "UNKNOWN"; + } + } + + public static string GetText(int extensionType) + { + return GetName(extensionType) + "(" + extensionType + ")"; + } + + public static bool IsRecognized(int extensionType) + { + switch (extensionType) + { + case server_name: + case max_fragment_length: + case client_certificate_url: + case trusted_ca_keys: + case truncated_hmac: + case status_request: + case user_mapping: + case client_authz: + case server_authz: + case cert_type: + case supported_groups: + case ec_point_formats: + case srp: + case signature_algorithms: + case use_srtp: + case heartbeat: + case application_layer_protocol_negotiation: + case status_request_v2: + case signed_certificate_timestamp: + case client_certificate_type: + case server_certificate_type: + case padding: + case encrypt_then_mac: + case extended_master_secret: + case token_binding: + case cached_info: + case compress_certificate: + case record_size_limit: + case session_ticket: + case pre_shared_key: + case early_data: + case supported_versions: + case cookie: + case psk_key_exchange_modes: + case certificate_authorities: + case oid_filters: + case post_handshake_auth: + case signature_algorithms_cert: + case key_share: + case renegotiation_info: + return true; + default: + return false; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ExtensionType.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ExtensionType.cs.meta new file mode 100644 index 000000000..c03e98a60 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ExtensionType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f7a30c26b3fc6624fac39ba6f1f9cce2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HandshakeMessageInput.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HandshakeMessageInput.cs new file mode 100644 index 000000000..6f7be4151 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HandshakeMessageInput.cs @@ -0,0 +1,45 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + // TODO Rewrite without MemoryStream + public sealed class HandshakeMessageInput + : MemoryStream + { + private readonly int m_offset; + + internal HandshakeMessageInput(byte[] buf, int offset, int length) + : base(buf, offset, length, false, true) + { + m_offset = offset; + } + + public void UpdateHash(TlsHash hash) + { + WriteTo(new TlsHashSink(hash)); + } + + internal void UpdateHashPrefix(TlsHash hash, int bindersSize) + { + byte[] buf = GetBuffer(); + int count = Convert.ToInt32(Length); + + hash.Update(buf, m_offset, count - bindersSize); + } + + internal void UpdateHashSuffix(TlsHash hash, int bindersSize) + { + byte[] buf = GetBuffer(); + int count = Convert.ToInt32(Length); + + hash.Update(buf, m_offset + count - bindersSize, bindersSize); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HandshakeMessageInput.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HandshakeMessageInput.cs.meta new file mode 100644 index 000000000..473567b66 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HandshakeMessageInput.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b9df8deddaa545409460bcdb4e6ffff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HandshakeMessageOutput.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HandshakeMessageOutput.cs new file mode 100644 index 000000000..086739d58 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HandshakeMessageOutput.cs @@ -0,0 +1,94 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + internal sealed class HandshakeMessageOutput + : MemoryStream + { + internal static int GetLength(int bodyLength) + { + return 4 + bodyLength; + } + + /// + internal static void Send(TlsProtocol protocol, short handshakeType, byte[] body) + { + HandshakeMessageOutput message = new HandshakeMessageOutput(handshakeType, body.Length); + message.Write(body, 0, body.Length); + message.Send(protocol); + } + + /// + internal HandshakeMessageOutput(short handshakeType) + : this(handshakeType, 60) + { + } + + /// + internal HandshakeMessageOutput(short handshakeType, int bodyLength) + : base(GetLength(bodyLength)) + { + TlsUtilities.CheckUint8(handshakeType); + TlsUtilities.WriteUint8(handshakeType, this); + // Reserve space for length + Seek(3L, SeekOrigin.Current); + } + + /// + internal void Send(TlsProtocol protocol) + { + // Patch actual length back in + int bodyLength = Convert.ToInt32(Length) - 4; + TlsUtilities.CheckUint24(bodyLength); + + Seek(1L, SeekOrigin.Begin); + TlsUtilities.WriteUint24(bodyLength, this); + + byte[] buf = GetBuffer(); + int count = Convert.ToInt32(Length); + + protocol.WriteHandshakeMessage(buf, 0, count); + + Dispose(); + } + + internal void PrepareClientHello(TlsHandshakeHash handshakeHash, int bindersSize) + { + // Patch actual length back in + int bodyLength = Convert.ToInt32(Length) - 4 + bindersSize; + TlsUtilities.CheckUint24(bodyLength); + + Seek(1L, SeekOrigin.Begin); + TlsUtilities.WriteUint24(bodyLength, this); + + byte[] buf = GetBuffer(); + int count = Convert.ToInt32(Length); + + handshakeHash.Update(buf, 0, count); + + Seek(0L, SeekOrigin.End); + } + + internal void SendClientHello(TlsClientProtocol clientProtocol, TlsHandshakeHash handshakeHash, int bindersSize) + { + byte[] buf = GetBuffer(); + int count = Convert.ToInt32(Length); + + if (bindersSize > 0) + { + handshakeHash.Update(buf, count - bindersSize, bindersSize); + } + + clientProtocol.WriteHandshakeMessage(buf, 0, count); + + Dispose(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HandshakeMessageOutput.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HandshakeMessageOutput.cs.meta new file mode 100644 index 000000000..2a26f485f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HandshakeMessageOutput.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7900a827ace39b949ac3d8290b81f97f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HandshakeType.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HandshakeType.cs new file mode 100644 index 000000000..b052780b8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HandshakeType.cs @@ -0,0 +1,143 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class HandshakeType + { + /* + * RFC 2246 7.4 + */ + public const short hello_request = 0; + public const short client_hello = 1; + public const short server_hello = 2; + public const short certificate = 11; + public const short server_key_exchange = 12; + public const short certificate_request = 13; + public const short server_hello_done = 14; + public const short certificate_verify = 15; + public const short client_key_exchange = 16; + public const short finished = 20; + + /* + * RFC 3546 2.4 + */ + public const short certificate_url = 21; + public const short certificate_status = 22; + + /* + * (DTLS) RFC 4347 4.3.2 + */ + public const short hello_verify_request = 3; + + /* + * RFC 4680 + */ + public const short supplemental_data = 23; + + /* + * RFC 8446 + */ + public const short new_session_ticket = 4; + public const short end_of_early_data = 5; + public const short hello_retry_request = 6; + public const short encrypted_extensions = 8; + public const short key_update = 24; + public const short message_hash = 254; + + /* + * RFC 8879 + */ + public const short compressed_certificate = 25; + + public static string GetName(short handshakeType) + { + switch (handshakeType) + { + case hello_request: + return "hello_request"; + case client_hello: + return "client_hello"; + case server_hello: + return "server_hello"; + case certificate: + return "certificate"; + case server_key_exchange: + return "server_key_exchange"; + case certificate_request: + return "certificate_request"; + case server_hello_done: + return "server_hello_done"; + case certificate_verify: + return "certificate_verify"; + case client_key_exchange: + return "client_key_exchange"; + case finished: + return "finished"; + case certificate_url: + return "certificate_url"; + case certificate_status: + return "certificate_status"; + case hello_verify_request: + return "hello_verify_request"; + case supplemental_data: + return "supplemental_data"; + case new_session_ticket: + return "new_session_ticket"; + case end_of_early_data: + return "end_of_early_data"; + case hello_retry_request: + return "hello_retry_request"; + case encrypted_extensions: + return "encrypted_extensions"; + case key_update: + return "key_update"; + case message_hash: + return "message_hash"; + case compressed_certificate: + return "compressed_certificate"; + default: + return "UNKNOWN"; + } + } + + public static string GetText(short handshakeType) + { + return GetName(handshakeType) + "(" + handshakeType + ")"; + } + + public static bool IsRecognized(short handshakeType) + { + switch (handshakeType) + { + case hello_request: + case client_hello: + case server_hello: + case certificate: + case server_key_exchange: + case certificate_request: + case server_hello_done: + case certificate_verify: + case client_key_exchange: + case finished: + case certificate_url: + case certificate_status: + case hello_verify_request: + case supplemental_data: + case new_session_ticket: + case end_of_early_data: + case hello_retry_request: + case encrypted_extensions: + case key_update: + case message_hash: + case compressed_certificate: + return true; + default: + return false; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HandshakeType.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HandshakeType.cs.meta new file mode 100644 index 000000000..9d1b8d97a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HandshakeType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 115a53fa3ed49e84187c022f6393cca5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HashAlgorithm.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HashAlgorithm.cs new file mode 100644 index 000000000..d27e6ab6c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HashAlgorithm.cs @@ -0,0 +1,98 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 5246 7.4.1.4.1 + public abstract class HashAlgorithm + { + public const short none = 0; + public const short md5 = 1; + public const short sha1 = 2; + public const short sha224 = 3; + public const short sha256 = 4; + public const short sha384 = 5; + public const short sha512 = 6; + + /* + * RFC 8422 + */ + public const short Intrinsic = 8; + + public static string GetName(short hashAlgorithm) + { + switch (hashAlgorithm) + { + case none: + return "none"; + case md5: + return "md5"; + case sha1: + return "sha1"; + case sha224: + return "sha224"; + case sha256: + return "sha256"; + case sha384: + return "sha384"; + case sha512: + return "sha512"; + case Intrinsic: + return "Intrinsic"; + default: + return "UNKNOWN"; + } + } + + public static int GetOutputSize(short hashAlgorithm) + { + switch (hashAlgorithm) + { + case md5: + return 16; + case sha1: + return 20; + case sha224: + return 28; + case sha256: + return 32; + case sha384: + return 48; + case sha512: + return 64; + default: + return -1; + } + } + + public static string GetText(short hashAlgorithm) + { + return GetName(hashAlgorithm) + "(" + hashAlgorithm + ")"; + } + + public static bool IsPrivate(short hashAlgorithm) + { + return 224 <= hashAlgorithm && hashAlgorithm <= 255; + } + + public static bool IsRecognized(short hashAlgorithm) + { + switch (hashAlgorithm) + { + case md5: + case sha1: + case sha224: + case sha256: + case sha384: + case sha512: + case Intrinsic: + return true; + default: + return false; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HashAlgorithm.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HashAlgorithm.cs.meta new file mode 100644 index 000000000..43c649bde --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HashAlgorithm.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3a0677c372204ff44b3b9233b5743ec6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatExtension.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatExtension.cs new file mode 100644 index 000000000..9a1f60659 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatExtension.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class HeartbeatExtension + { + private readonly short m_mode; + + public HeartbeatExtension(short mode) + { + if (!HeartbeatMode.IsValid(mode)) + throw new ArgumentException("not a valid HeartbeatMode value", "mode"); + + this.m_mode = mode; + } + + public short Mode + { + get { return m_mode; } + } + + /// Encode this to a . + /// the to encode to. + /// + public void Encode(Stream output) + { + TlsUtilities.WriteUint8(m_mode, output); + } + + /// Parse a from a . + /// the to parse from. + /// a object. + /// + public static HeartbeatExtension Parse(Stream input) + { + short mode = TlsUtilities.ReadUint8(input); + if (!HeartbeatMode.IsValid(mode)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + return new HeartbeatExtension(mode); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatExtension.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatExtension.cs.meta new file mode 100644 index 000000000..346315db3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e70dede255117394b98e7f1e042ffc9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatMessage.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatMessage.cs new file mode 100644 index 000000000..c841b2db4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatMessage.cs @@ -0,0 +1,122 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class HeartbeatMessage + { + public static HeartbeatMessage Create(TlsContext context, short type, byte[] payload) + { + return Create(context, type, payload, 16); + } + + public static HeartbeatMessage Create(TlsContext context, short type, byte[] payload, int paddingLength) + { + byte[] padding = context.NonceGenerator.GenerateNonce(paddingLength); + + return new HeartbeatMessage(type, payload, padding); + } + + private readonly short m_type; + private readonly byte[] m_payload; + private readonly byte[] m_padding; + + public HeartbeatMessage(short type, byte[] payload, byte[] padding) + { + if (!HeartbeatMessageType.IsValid(type)) + throw new ArgumentException("not a valid HeartbeatMessageType value", "type"); + if (null == payload || payload.Length >= (1 << 16)) + throw new ArgumentException("must have length < 2^16", "payload"); + if (null == padding || padding.Length < 16) + throw new ArgumentException("must have length >= 16", "padding"); + + this.m_type = type; + this.m_payload = payload; + this.m_padding = padding; + } + + public int PaddingLength + { + /* + * RFC 6520 4. The padding of a received HeartbeatMessage message MUST be ignored + */ + get { return m_padding.Length; } + } + + public byte[] Payload + { + get { return m_payload; } + } + + public short Type + { + get { return m_type; } + } + + /// Encode this to a . + /// the to encode to. + /// + public void Encode(Stream output) + { + TlsUtilities.WriteUint8(m_type, output); + + TlsUtilities.CheckUint16(m_payload.Length); + TlsUtilities.WriteUint16(m_payload.Length, output); + output.Write(m_payload, 0, m_payload.Length); + + output.Write(m_padding, 0, m_padding.Length); + } + + /// Parse a from a . + /// the to parse from. + /// a object. + /// + public static HeartbeatMessage Parse(Stream input) + { + short type = TlsUtilities.ReadUint8(input); + if (!HeartbeatMessageType.IsValid(type)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + int payload_length = TlsUtilities.ReadUint16(input); + byte[] payloadBuffer = Streams.ReadAll(input); + + byte[] payload = GetPayload(payloadBuffer, payload_length); + if (null == payload) + { + /* + * RFC 6520 4. If the payload_length of a received HeartbeatMessage is too large, the received + * HeartbeatMessage MUST be discarded silently. + */ + return null; + } + + byte[] padding = GetPadding(payloadBuffer, payload_length); + + return new HeartbeatMessage(type, payload, padding); + } + + private static byte[] GetPayload(byte[] payloadBuffer, int payloadLength) + { + /* + * RFC 6520 4. The padding_length MUST be at least 16. + */ + int maxPayloadLength = payloadBuffer.Length - 16; + if (payloadLength > maxPayloadLength) + return null; + + return Arrays.CopyOf(payloadBuffer, payloadLength); + } + + private static byte[] GetPadding(byte[] payloadBuffer, int payloadLength) + { + return TlsUtilities.CopyOfRangeExact(payloadBuffer, payloadLength, payloadBuffer.Length); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatMessage.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatMessage.cs.meta new file mode 100644 index 000000000..8cd1515c1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatMessage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ecfc2e290c2fe044780592247270e3f9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatMessageType.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatMessageType.cs new file mode 100644 index 000000000..9d501ef7e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatMessageType.cs @@ -0,0 +1,38 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 6520 3. + public abstract class HeartbeatMessageType + { + public const short heartbeat_request = 1; + public const short heartbeat_response = 2; + + public static string GetName(short heartbeatMessageType) + { + switch (heartbeatMessageType) + { + case heartbeat_request: + return "heartbeat_request"; + case heartbeat_response: + return "heartbeat_response"; + default: + return "UNKNOWN"; + } + } + + public static string GetText(short heartbeatMessageType) + { + return GetName(heartbeatMessageType) + "(" + heartbeatMessageType + ")"; + } + + public static bool IsValid(short heartbeatMessageType) + { + return heartbeatMessageType >= heartbeat_request && heartbeatMessageType <= heartbeat_response; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatMessageType.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatMessageType.cs.meta new file mode 100644 index 000000000..ef4690f23 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatMessageType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d5ab5f40515cacc4bb3c9d0b31952ee7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatMode.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatMode.cs new file mode 100644 index 000000000..89bbf5b7a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatMode.cs @@ -0,0 +1,40 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /* + * RFC 6520 + */ + public abstract class HeartbeatMode + { + public const short peer_allowed_to_send = 1; + public const short peer_not_allowed_to_send = 2; + + public static string GetName(short heartbeatMode) + { + switch (heartbeatMode) + { + case peer_allowed_to_send: + return "peer_allowed_to_send"; + case peer_not_allowed_to_send: + return "peer_not_allowed_to_send"; + default: + return "UNKNOWN"; + } + } + + public static string GetText(short heartbeatMode) + { + return GetName(heartbeatMode) + "(" + heartbeatMode + ")"; + } + + public static bool IsValid(short heartbeatMode) + { + return heartbeatMode >= peer_allowed_to_send && heartbeatMode <= peer_not_allowed_to_send; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatMode.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatMode.cs.meta new file mode 100644 index 000000000..40b4bff72 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/HeartbeatMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0795d98e087703240b23b73fa50a7285 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/IdentifierType.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/IdentifierType.cs new file mode 100644 index 000000000..8e10422c0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/IdentifierType.cs @@ -0,0 +1,39 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 6066 + public abstract class IdentifierType + { + public const short pre_agreed = 0; + public const short key_sha1_hash = 1; + public const short x509_name = 2; + public const short cert_sha1_hash = 3; + + public static string GetName(short identifierType) + { + switch (identifierType) + { + case pre_agreed: + return "pre_agreed"; + case key_sha1_hash: + return "key_sha1_hash"; + case x509_name: + return "x509_name"; + case cert_sha1_hash: + return "cert_sha1_hash"; + default: + return "UNKNOWN"; + } + } + + public static string GetText(short identifierType) + { + return GetName(identifierType) + "(" + identifierType + ")"; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/IdentifierType.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/IdentifierType.cs.meta new file mode 100644 index 000000000..0eae1b180 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/IdentifierType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31507d909256bbf43a644aa75254038a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/KeyExchangeAlgorithm.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/KeyExchangeAlgorithm.cs new file mode 100644 index 000000000..e17047cbe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/KeyExchangeAlgorithm.cs @@ -0,0 +1,80 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 2246 + /// + /// Note that the values here are implementation-specific and arbitrary. It is recommended not to depend on the + /// particular values (e.g. serialization). + /// + public abstract class KeyExchangeAlgorithm + { + /* + * NOTE: We interpret TLS 1.3 cipher suites as having a NULL key exchange + */ + public const int NULL = 0; + + public const int RSA = 1; + public const int RSA_EXPORT = 2; + public const int DHE_DSS = 3; + public const int DHE_DSS_EXPORT = 4; + public const int DHE_RSA = 5; + public const int DHE_RSA_EXPORT = 6; + public const int DH_DSS = 7; + public const int DH_DSS_EXPORT = 8; + public const int DH_RSA = 9; + public const int DH_RSA_EXPORT = 10; + public const int DH_anon = 11; + public const int DH_anon_EXPORT = 12; + + /* + * RFC 4279 + */ + public const int PSK = 13; + public const int DHE_PSK = 14; + public const int RSA_PSK = 15; + + /* + * RFC 4429 + */ + public const int ECDH_ECDSA = 16; + public const int ECDHE_ECDSA = 17; + public const int ECDH_RSA = 18; + public const int ECDHE_RSA = 19; + public const int ECDH_anon = 20; + + /* + * RFC 5054 + */ + public const int SRP = 21; + public const int SRP_DSS = 22; + public const int SRP_RSA = 23; + + /* + * RFC 5489 + */ + public const int ECDHE_PSK = 24; + + /* + * GMT 0024-2014 + */ + public const int SM2 = 25; + + public static bool IsAnonymous(int keyExchangeAlgorithm) + { + switch (keyExchangeAlgorithm) + { + case DH_anon: + case DH_anon_EXPORT: + case ECDH_anon: + return true; + default: + return false; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/KeyExchangeAlgorithm.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/KeyExchangeAlgorithm.cs.meta new file mode 100644 index 000000000..996ed1c37 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/KeyExchangeAlgorithm.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 62893147f92a326418c72e1b062a3f74 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/KeyShareEntry.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/KeyShareEntry.cs new file mode 100644 index 000000000..8b206aad5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/KeyShareEntry.cs @@ -0,0 +1,66 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class KeyShareEntry + { + private static bool CheckKeyExchangeLength(int length) + { + return 0 < length && length < (1 << 16); + } + + private readonly int m_namedGroup; + private readonly byte[] m_keyExchange; + + /// + /// + public KeyShareEntry(int namedGroup, byte[] keyExchange) + { + if (!TlsUtilities.IsValidUint16(namedGroup)) + throw new ArgumentException("should be a uint16", "namedGroup"); + if (null == keyExchange) + throw new ArgumentNullException("keyExchange"); + if (!CheckKeyExchangeLength(keyExchange.Length)) + throw new ArgumentException("must have length from 1 to (2^16 - 1)", "keyExchange"); + + this.m_namedGroup = namedGroup; + this.m_keyExchange = keyExchange; + } + + /// + public int NamedGroup + { + get { return m_namedGroup; } + } + + public byte[] KeyExchange + { + get { return m_keyExchange; } + } + + /// Encode this to a . + /// the to encode to. + /// + public void Encode(Stream output) + { + TlsUtilities.WriteUint16(NamedGroup, output); + TlsUtilities.WriteOpaque16(KeyExchange, output); + } + + /// Parse a from a . + /// the to parse from. + /// a object. + /// + public static KeyShareEntry Parse(Stream input) + { + int namedGroup = TlsUtilities.ReadUint16(input); + byte[] keyExchange = TlsUtilities.ReadOpaque16(input, 1); + return new KeyShareEntry(namedGroup, keyExchange); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/KeyShareEntry.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/KeyShareEntry.cs.meta new file mode 100644 index 000000000..4ad46874e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/KeyShareEntry.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 73c066535d6cdc04397e10eb2f95e0e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/KeyUpdateRequest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/KeyUpdateRequest.cs new file mode 100644 index 000000000..6833db223 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/KeyUpdateRequest.cs @@ -0,0 +1,38 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 8446 4.6.3 + public abstract class KeyUpdateRequest + { + public const short update_not_requested = 0; + public const short update_requested = 1; + + public static string GetName(short keyUpdateRequest) + { + switch (keyUpdateRequest) + { + case update_not_requested: + return "update_not_requested"; + case update_requested: + return "update_requested"; + default: + return "UNKNOWN"; + } + } + + public static string GetText(short keyUpdateRequest) + { + return GetName(keyUpdateRequest) + "(" + keyUpdateRequest + ")"; + } + + public static bool IsValid(short keyUpdateRequest) + { + return keyUpdateRequest >= update_not_requested && keyUpdateRequest <= update_requested; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/KeyUpdateRequest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/KeyUpdateRequest.cs.meta new file mode 100644 index 000000000..a9d49d9bc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/KeyUpdateRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 226cf90d19d5efa4683a7a1428a8d8d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/MacAlgorithm.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/MacAlgorithm.cs new file mode 100644 index 000000000..425a208b6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/MacAlgorithm.cs @@ -0,0 +1,70 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 2246 + /// + /// Note that the values here are implementation-specific and arbitrary. It is recommended not to depend on the + /// particular values (e.g. serialization). + /// + public abstract class MacAlgorithm + { + public const int cls_null = 0; + public const int md5 = 1; + public const int sha = 2; + + /* + * RFC 5246 + */ + public const int hmac_md5 = md5; + public const int hmac_sha1 = sha; + public const int hmac_sha256 = 3; + public const int hmac_sha384 = 4; + public const int hmac_sha512 = 5; + + public static string GetName(int macAlgorithm) + { + switch (macAlgorithm) + { + case cls_null: + return "null"; + case hmac_md5: + return "hmac_md5"; + case hmac_sha1: + return "hmac_sha1"; + case hmac_sha256: + return "hmac_sha256"; + case hmac_sha384: + return "hmac_sha384"; + case hmac_sha512: + return "hmac_sha512"; + default: + return "UNKNOWN"; + } + } + + public static string GetText(int macAlgorithm) + { + return GetName(macAlgorithm) + "(" + macAlgorithm + ")"; + } + + public static bool IsHmac(int macAlgorithm) + { + switch (macAlgorithm) + { + case hmac_md5: + case hmac_sha1: + case hmac_sha256: + case hmac_sha384: + case hmac_sha512: + return true; + default: + return false; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/MacAlgorithm.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/MacAlgorithm.cs.meta new file mode 100644 index 000000000..9fa16c651 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/MacAlgorithm.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3a03e04109b246f4aa5a2d1bea02ecfc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/MaxFragmentLength.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/MaxFragmentLength.cs new file mode 100644 index 000000000..579e076ab --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/MaxFragmentLength.cs @@ -0,0 +1,24 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class MaxFragmentLength + { + /* + * RFC 3546 3.2. + */ + public const short pow2_9 = 1; + public const short pow2_10 = 2; + public const short pow2_11 = 3; + public const short pow2_12 = 4; + + public static bool IsValid(short maxFragmentLength) + { + return maxFragmentLength >= pow2_9 && maxFragmentLength <= pow2_12; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/MaxFragmentLength.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/MaxFragmentLength.cs.meta new file mode 100644 index 000000000..23773a45b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/MaxFragmentLength.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 85e49375c75e0ab4c9459dff8afd30c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NameType.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NameType.cs new file mode 100644 index 000000000..1dc60e0d0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NameType.cs @@ -0,0 +1,42 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class NameType + { + /* + * RFC 3546 3.1. + */ + public const short host_name = 0; + + public static string GetName(short nameType) + { + switch (nameType) + { + case host_name: + return "host_name"; + default: + return "UNKNOWN"; + } + } + + public static string GetText(short nameType) + { + return GetName(nameType) + "(" + nameType + ")"; + } + + public static bool IsRecognized(short nameType) + { + return host_name == nameType; + } + + public static bool IsValid(short nameType) + { + return TlsUtilities.IsValidUint8(nameType); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NameType.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NameType.cs.meta new file mode 100644 index 000000000..032127147 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NameType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eaf5d47a3bb5d724f9ec84332bb316e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NamedGroup.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NamedGroup.cs new file mode 100644 index 000000000..d6af8cfd7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NamedGroup.cs @@ -0,0 +1,420 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 7919 + public abstract class NamedGroup + { + /* + * RFC 4492 5.1.1 + *

    + * The named curves defined here are those specified in SEC 2 [13]. Note that many of these curves + * are also recommended in ANSI X9.62 [7] and FIPS 186-2 [11]. Values 0xFE00 through 0xFEFF are + * reserved for private use. Values 0xFF01 and 0xFF02 indicate that the client supports arbitrary + * prime and characteristic-2 curves, respectively (the curve parameters must be encoded explicitly + * in ECParameters). + */ + public const int sect163k1 = 1; + public const int sect163r1 = 2; + public const int sect163r2 = 3; + public const int sect193r1 = 4; + public const int sect193r2 = 5; + public const int sect233k1 = 6; + public const int sect233r1 = 7; + public const int sect239k1 = 8; + public const int sect283k1 = 9; + public const int sect283r1 = 10; + public const int sect409k1 = 11; + public const int sect409r1 = 12; + public const int sect571k1 = 13; + public const int sect571r1 = 14; + public const int secp160k1 = 15; + public const int secp160r1 = 16; + public const int secp160r2 = 17; + public const int secp192k1 = 18; + public const int secp192r1 = 19; + public const int secp224k1 = 20; + public const int secp224r1 = 21; + public const int secp256k1 = 22; + public const int secp256r1 = 23; + public const int secp384r1 = 24; + public const int secp521r1 = 25; + + /* + * RFC 7027 + */ + public const int brainpoolP256r1 = 26; + public const int brainpoolP384r1 = 27; + public const int brainpoolP512r1 = 28; + + /* + * RFC 8422 + */ + public const int x25519 = 29; + public const int x448 = 30; + + /* + * RFC 8734 + */ + public const int brainpoolP256r1tls13 = 31; + public const int brainpoolP384r1tls13 = 32; + public const int brainpoolP512r1tls13 = 33; + + /* + * draft-smyshlyaev-tls12-gost-suites-10 + */ + public const int GC256A = 34; + public const int GC256B = 35; + public const int GC256C = 36; + public const int GC256D = 37; + public const int GC512A = 38; + public const int GC512B = 39; + public const int GC512C = 40; + + /* + * RFC 8998 + */ + public const int curveSM2 = 41; + + /* + * RFC 7919 2. Codepoints in the "Supported Groups Registry" with a high byte of 0x01 (that is, + * between 256 and 511, inclusive) are set aside for FFDHE groups, though only a small number of + * them are initially defined and we do not expect many other FFDHE groups to be added to this + * range. No codepoints outside of this range will be allocated to FFDHE groups. + */ + public const int ffdhe2048 = 256; + public const int ffdhe3072 = 257; + public const int ffdhe4096 = 258; + public const int ffdhe6144 = 259; + public const int ffdhe8192 = 260; + + /* + * RFC 8446 reserved ffdhe_private_use (0x01FC..0x01FF) + */ + + /* + * RFC 4492 reserved ecdhe_private_use (0xFE00..0xFEFF) + */ + + /* + * RFC 4492 + */ + public const int arbitrary_explicit_prime_curves = 0xFF01; + public const int arbitrary_explicit_char2_curves = 0xFF02; + + /* Names of the actual underlying elliptic curves (not necessarily matching the NamedGroup names). */ + private static readonly string[] CurveNames = new string[]{ "sect163k1", "sect163r1", "sect163r2", "sect193r1", + "sect193r2", "sect233k1", "sect233r1", "sect239k1", "sect283k1", "sect283r1", "sect409k1", "sect409r1", + "sect571k1", "sect571r1", "secp160k1", "secp160r1", "secp160r2", "secp192k1", "secp192r1", "secp224k1", + "secp224r1", "secp256k1", "secp256r1", "secp384r1", "secp521r1", "brainpoolP256r1", "brainpoolP384r1", + "brainpoolP512r1", "X25519", "X448", "brainpoolP256r1", "brainpoolP384r1", "brainpoolP512r1", + "Tc26-Gost-3410-12-256-paramSetA", "GostR3410-2001-CryptoPro-A", "GostR3410-2001-CryptoPro-B", + "GostR3410-2001-CryptoPro-C", "Tc26-Gost-3410-12-512-paramSetA", "Tc26-Gost-3410-12-512-paramSetB", + "Tc26-Gost-3410-12-512-paramSetC", "sm2p256v1" }; + + private static readonly string[] FiniteFieldNames = new string[]{ "ffdhe2048", "ffdhe3072", "ffdhe4096", + "ffdhe6144", "ffdhe8192" }; + + public static bool CanBeNegotiated(int namedGroup, ProtocolVersion version) + { + if (TlsUtilities.IsTlsV13(version)) + { + if ((namedGroup >= sect163k1 && namedGroup <= secp256k1) + || (namedGroup >= brainpoolP256r1 && namedGroup <= brainpoolP512r1) + || (namedGroup >= GC256A && namedGroup <= GC512C) + || (namedGroup >= arbitrary_explicit_prime_curves && namedGroup <= arbitrary_explicit_char2_curves)) + { + return false; + } + } + else + { + if ((namedGroup >= brainpoolP256r1tls13 && namedGroup <= brainpoolP512r1tls13) + || (namedGroup == curveSM2)) + { + return false; + } + } + + return IsValid(namedGroup); + } + + public static int GetCurveBits(int namedGroup) + { + switch (namedGroup) + { + case secp160k1: + case secp160r1: + case secp160r2: + return 160; + + case sect163k1: + case sect163r1: + case sect163r2: + return 163; + + case secp192k1: + case secp192r1: + return 192; + + case sect193r1: + case sect193r2: + return 193; + + case secp224k1: + case secp224r1: + return 224; + + case sect233k1: + case sect233r1: + return 233; + + case sect239k1: + return 239; + + case x25519: + return 252; + + case brainpoolP256r1: + case brainpoolP256r1tls13: + case curveSM2: + case GC256A: + case GC256B: + case GC256C: + case GC256D: + case secp256k1: + case secp256r1: + return 256; + + case sect283k1: + case sect283r1: + return 283; + + case brainpoolP384r1: + case brainpoolP384r1tls13: + case secp384r1: + return 384; + + case sect409k1: + case sect409r1: + return 409; + + case x448: + return 446; + + case brainpoolP512r1: + case brainpoolP512r1tls13: + case GC512A: + case GC512B: + case GC512C: + return 512; + + case secp521r1: + return 521; + + case sect571k1: + case sect571r1: + return 571; + + default: + return 0; + } + } + + public static string GetCurveName(int namedGroup) + { + if (RefersToASpecificCurve(namedGroup)) + { + return CurveNames[namedGroup - sect163k1]; + } + + return null; + } + + public static int GetFiniteFieldBits(int namedGroup) + { + switch (namedGroup) + { + case ffdhe2048: + return 2048; + case ffdhe3072: + return 3072; + case ffdhe4096: + return 4096; + case ffdhe6144: + return 6144; + case ffdhe8192: + return 8192; + default: + return 0; + } + } + + public static string GetFiniteFieldName(int namedGroup) + { + if (RefersToASpecificFiniteField(namedGroup)) + { + return FiniteFieldNames[namedGroup - ffdhe2048]; + } + + return null; + } + + public static int GetMaximumChar2CurveBits() + { + return 571; + } + + public static int GetMaximumCurveBits() + { + return 571; + } + + public static int GetMaximumFiniteFieldBits() + { + return 8192; + } + + public static int GetMaximumPrimeCurveBits() + { + return 521; + } + + public static string GetName(int namedGroup) + { + if (IsPrivate(namedGroup)) + { + return "PRIVATE"; + } + + switch (namedGroup) + { + case x25519: + return "x25519"; + case x448: + return "x448"; + case brainpoolP256r1tls13: + return "brainpoolP256r1tls13"; + case brainpoolP384r1tls13: + return "brainpoolP384r1tls13"; + case brainpoolP512r1tls13: + return "brainpoolP512r1tls13"; + case GC256A: + return "GC256A"; + case GC256B: + return "GC256B"; + case GC256C: + return "GC256C"; + case GC256D: + return "GC256D"; + case GC512A: + return "GC512A"; + case GC512B: + return "GC512B"; + case GC512C: + return "GC512C"; + case curveSM2: + return "curveSM2"; + case arbitrary_explicit_prime_curves: + return "arbitrary_explicit_prime_curves"; + case arbitrary_explicit_char2_curves: + return "arbitrary_explicit_char2_curves"; + } + + string standardName = GetStandardName(namedGroup); + if (null != standardName) + { + return standardName; + } + + return "UNKNOWN"; + } + + public static string GetStandardName(int namedGroup) + { + string curveName = GetCurveName(namedGroup); + if (null != curveName) + { + return curveName; + } + + string finiteFieldName = GetFiniteFieldName(namedGroup); + if (null != finiteFieldName) + { + return finiteFieldName; + } + + return null; + } + + public static string GetText(int namedGroup) + { + return GetName(namedGroup) + "(" + namedGroup + ")"; + } + + public static bool IsChar2Curve(int namedGroup) + { + return (namedGroup >= sect163k1 && namedGroup <= sect571r1) + || (namedGroup == arbitrary_explicit_char2_curves); + } + + public static bool IsPrimeCurve(int namedGroup) + { + return (namedGroup >= secp160k1 && namedGroup <= curveSM2) + || (namedGroup == arbitrary_explicit_prime_curves); + } + + public static bool IsPrivate(int namedGroup) + { + return (namedGroup >> 2) == 0x7F || (namedGroup >> 8) == 0xFE; + } + + public static bool IsValid(int namedGroup) + { + return RefersToASpecificGroup(namedGroup) + || IsPrivate(namedGroup) + || (namedGroup >= arbitrary_explicit_prime_curves && namedGroup <= arbitrary_explicit_char2_curves); + } + + public static bool RefersToAnECDHCurve(int namedGroup) + { + return RefersToASpecificCurve(namedGroup); + } + + public static bool RefersToAnECDSACurve(int namedGroup) + { + /* + * TODO[RFC 8998] Double-check whether this method is only being used to mean + * "signature-capable" or specifically ECDSA, and consider curveSM2 behaviour + * accordingly. + */ + return RefersToASpecificCurve(namedGroup) + && !RefersToAnXDHCurve(namedGroup); + } + + public static bool RefersToAnXDHCurve(int namedGroup) + { + return namedGroup >= x25519 && namedGroup <= x448; + } + + public static bool RefersToASpecificCurve(int namedGroup) + { + return namedGroup >= sect163k1 && namedGroup <= curveSM2; + } + + public static bool RefersToASpecificFiniteField(int namedGroup) + { + return namedGroup >= ffdhe2048 && namedGroup <= ffdhe8192; + } + + public static bool RefersToASpecificGroup(int namedGroup) + { + return RefersToASpecificCurve(namedGroup) + || RefersToASpecificFiniteField(namedGroup); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NamedGroup.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NamedGroup.cs.meta new file mode 100644 index 000000000..846e46ddf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NamedGroup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49ef3d6e092cc044ab2d4c2ce2c3cc6b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NamedGroupRole.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NamedGroupRole.cs new file mode 100644 index 000000000..b734d5ecb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NamedGroupRole.cs @@ -0,0 +1,19 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// + /// Note that the values here are implementation-specific and arbitrary. It is recommended not to depend on the + /// particular values (e.g. serialization). + /// + public abstract class NamedGroupRole + { + public const int dh = 1; + public const int ecdh = 2; + public const int ecdsa = 3; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NamedGroupRole.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NamedGroupRole.cs.meta new file mode 100644 index 000000000..9f4b1549c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NamedGroupRole.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1cb1ab6a25fa0f2439cd9def07ad2f4b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NewSessionTicket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NewSessionTicket.cs new file mode 100644 index 000000000..628e3e122 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NewSessionTicket.cs @@ -0,0 +1,51 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class NewSessionTicket + { + private readonly long m_ticketLifetimeHint; + private readonly byte[] m_ticket; + + public NewSessionTicket(long ticketLifetimeHint, byte[] ticket) + { + this.m_ticketLifetimeHint = ticketLifetimeHint; + this.m_ticket = ticket; + } + + public long TicketLifetimeHint + { + get { return m_ticketLifetimeHint; } + } + + public byte[] Ticket + { + get { return m_ticket; } + } + + ///

    Encode this to a . + /// the to encode to. + /// + public void Encode(Stream output) + { + TlsUtilities.WriteUint32(TicketLifetimeHint, output); + TlsUtilities.WriteOpaque16(Ticket, output); + } + + /// Parse a from a . + /// the to parse from. + /// a object. + /// + public static NewSessionTicket Parse(Stream input) + { + long ticketLifetimeHint = TlsUtilities.ReadUint32(input); + byte[] ticket = TlsUtilities.ReadOpaque16(input); + return new NewSessionTicket(ticketLifetimeHint, ticket); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NewSessionTicket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NewSessionTicket.cs.meta new file mode 100644 index 000000000..c907a6413 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/NewSessionTicket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 991e4d968af516b4d9f4a1911caf6cd7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/OcspStatusRequest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/OcspStatusRequest.cs new file mode 100644 index 000000000..1a218086b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/OcspStatusRequest.cs @@ -0,0 +1,119 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 3546 3.6 + public sealed class OcspStatusRequest + { + private readonly IList m_responderIDList; + private readonly X509Extensions m_requestExtensions; + + /// an of , specifying the list of + /// trusted OCSP responders. An empty list has the special meaning that the responders are implicitly known to + /// the server - e.g., by prior arrangement. + /// OCSP request extensions. A null value means that there are no extensions. + /// + public OcspStatusRequest(IList responderIDList, X509Extensions requestExtensions) + { + this.m_responderIDList = responderIDList; + this.m_requestExtensions = requestExtensions; + } + + /// an of . + public IList ResponderIDList + { + get { return m_responderIDList; } + } + + /// OCSP request extensions. + public X509Extensions RequestExtensions + { + get { return m_requestExtensions; } + } + + /// Encode this to a . + /// the to encode to. + /// + public void Encode(Stream output) + { + if (m_responderIDList == null || m_responderIDList.Count < 1) + { + TlsUtilities.WriteUint16(0, output); + } + else + { + MemoryStream buf = new MemoryStream(); + foreach (ResponderID responderID in m_responderIDList) + { + byte[] derEncoding = responderID.GetEncoded(Asn1Encodable.Der); + TlsUtilities.WriteOpaque16(derEncoding, buf); + } + TlsUtilities.CheckUint16(buf.Length); + TlsUtilities.WriteUint16(Convert.ToInt32(buf.Length), output); + buf.WriteTo(output); + } + + if (m_requestExtensions == null) + { + TlsUtilities.WriteUint16(0, output); + } + else + { + byte[] derEncoding = m_requestExtensions.GetEncoded(Asn1Encodable.Der); + TlsUtilities.CheckUint16(derEncoding.Length); + TlsUtilities.WriteUint16(derEncoding.Length, output); + output.Write(derEncoding, 0, derEncoding.Length); + } + } + + /// Parse an from a . + /// the to parse from. + /// an object. + /// + public static OcspStatusRequest Parse(Stream input) + { + var responderIDList = new List(); + { + byte[] data = TlsUtilities.ReadOpaque16(input); + if (data.Length > 0) + { + MemoryStream buf = new MemoryStream(data, false); + do + { + byte[] derEncoding = TlsUtilities.ReadOpaque16(buf, 1); + Asn1Object asn1 = TlsUtilities.ReadAsn1Object(derEncoding); + ResponderID responderID = ResponderID.GetInstance(asn1); + TlsUtilities.RequireDerEncoding(responderID, derEncoding); + responderIDList.Add(responderID); + } + while (buf.Position < buf.Length); + } + } + + X509Extensions requestExtensions = null; + { + byte[] derEncoding = TlsUtilities.ReadOpaque16(input); + if (derEncoding.Length > 0) + { + Asn1Object asn1 = TlsUtilities.ReadAsn1Object(derEncoding); + X509Extensions extensions = X509Extensions.GetInstance(asn1); + TlsUtilities.RequireDerEncoding(extensions, derEncoding); + requestExtensions = extensions; + } + } + + return new OcspStatusRequest(responderIDList, requestExtensions); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/OcspStatusRequest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/OcspStatusRequest.cs.meta new file mode 100644 index 000000000..f8aa435ba --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/OcspStatusRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c748fe8ff2990fe4a8211816d01656ed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/OfferedPsks.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/OfferedPsks.cs new file mode 100644 index 000000000..a6e1e28e6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/OfferedPsks.cs @@ -0,0 +1,228 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class OfferedPsks + { + internal class BindersConfig + { + internal readonly TlsPsk[] m_psks; + internal readonly short[] m_pskKeyExchangeModes; + internal readonly TlsSecret[] m_earlySecrets; + internal int m_bindersSize; + + internal BindersConfig(TlsPsk[] psks, short[] pskKeyExchangeModes, TlsSecret[] earlySecrets, + int bindersSize) + { + this.m_psks = psks; + this.m_pskKeyExchangeModes = pskKeyExchangeModes; + this.m_earlySecrets = earlySecrets; + this.m_bindersSize = bindersSize; + } + } + + internal class SelectedConfig + { + internal readonly int m_index; + internal readonly TlsPsk m_psk; + internal readonly short[] m_pskKeyExchangeModes; + internal readonly TlsSecret m_earlySecret; + + internal SelectedConfig(int index, TlsPsk psk, short[] pskKeyExchangeModes, TlsSecret earlySecret) + { + this.m_index = index; + this.m_psk = psk; + this.m_pskKeyExchangeModes = pskKeyExchangeModes; + this.m_earlySecret = earlySecret; + } + } + + private readonly IList m_identities; + private readonly IList m_binders; + private readonly int m_bindersSize; + + public OfferedPsks(IList identities) + : this(identities, null, -1) + { + } + + private OfferedPsks(IList identities, IList binders, int bindersSize) + { + if (null == identities || identities.Count < 1) + throw new ArgumentException("cannot be null or empty", "identities"); + if (null != binders && identities.Count != binders.Count) + throw new ArgumentException("must be the same length as 'identities' (or null)", "binders"); + if ((null != binders) != (bindersSize >= 0)) + throw new ArgumentException("must be >= 0 iff 'binders' are present", "bindersSize"); + + this.m_identities = identities; + this.m_binders = binders; + this.m_bindersSize = bindersSize; + } + + public IList Binders + { + get { return m_binders; } + } + + public int BindersSize + { + get { return m_bindersSize; } + } + + public IList Identities + { + get { return m_identities; } + } + + public int GetIndexOfIdentity(PskIdentity pskIdentity) + { + for (int i = 0, count = m_identities.Count; i < count; ++i) + { + if (pskIdentity.Equals(m_identities[i])) + return i; + } + return -1; + } + + /// + public void Encode(Stream output) + { + // identities + { + int lengthOfIdentitiesList = 0; + foreach (PskIdentity identity in m_identities) + { + lengthOfIdentitiesList += identity.GetEncodedLength(); + } + + TlsUtilities.CheckUint16(lengthOfIdentitiesList); + TlsUtilities.WriteUint16(lengthOfIdentitiesList, output); + + foreach (PskIdentity identity in m_identities) + { + identity.Encode(output); + } + } + + // binders + if (null != m_binders) + { + int lengthOfBindersList = 0; + foreach (byte[] binder in m_binders) + { + lengthOfBindersList += 1 + binder.Length; + } + + TlsUtilities.CheckUint16(lengthOfBindersList); + TlsUtilities.WriteUint16(lengthOfBindersList, output); + + foreach (byte[] binder in m_binders) + { + TlsUtilities.WriteOpaque8(binder, output); + } + } + } + + /// + internal static void EncodeBinders(Stream output, TlsCrypto crypto, TlsHandshakeHash handshakeHash, + BindersConfig bindersConfig) + { + TlsPsk[] psks = bindersConfig.m_psks; + TlsSecret[] earlySecrets = bindersConfig.m_earlySecrets; + int expectedLengthOfBindersList = bindersConfig.m_bindersSize - 2; + + TlsUtilities.CheckUint16(expectedLengthOfBindersList); + TlsUtilities.WriteUint16(expectedLengthOfBindersList, output); + + int lengthOfBindersList = 0; + for (int i = 0; i < psks.Length; ++i) + { + TlsPsk psk = psks[i]; + TlsSecret earlySecret = earlySecrets[i]; + + // TODO[tls13-psk] Handle resumption PSKs + bool isExternalPsk = true; + int pskCryptoHashAlgorithm = TlsCryptoUtilities.GetHashForPrf(psk.PrfAlgorithm); + + // TODO[tls13-psk] Cache the transcript hashes per algorithm to avoid duplicates for multiple PSKs + TlsHash hash = crypto.CreateHash(pskCryptoHashAlgorithm); + handshakeHash.CopyBufferTo(new TlsHashSink(hash)); + byte[] transcriptHash = hash.CalculateHash(); + + byte[] binder = TlsUtilities.CalculatePskBinder(crypto, isExternalPsk, pskCryptoHashAlgorithm, + earlySecret, transcriptHash); + + lengthOfBindersList += 1 + binder.Length; + TlsUtilities.WriteOpaque8(binder, output); + } + + if (expectedLengthOfBindersList != lengthOfBindersList) + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + /// + internal static int GetBindersSize(TlsPsk[] psks) + { + int lengthOfBindersList = 0; + for (int i = 0; i < psks.Length; ++i) + { + TlsPsk psk = psks[i]; + + int prfAlgorithm = psk.PrfAlgorithm; + int prfCryptoHashAlgorithm = TlsCryptoUtilities.GetHashForPrf(prfAlgorithm); + + lengthOfBindersList += 1 + TlsCryptoUtilities.GetHashOutputSize(prfCryptoHashAlgorithm); + } + TlsUtilities.CheckUint16(lengthOfBindersList); + return 2 + lengthOfBindersList; + } + + /// + public static OfferedPsks Parse(Stream input) + { + var identities = new List(); + { + int totalLengthIdentities = TlsUtilities.ReadUint16(input); + if (totalLengthIdentities < 7) + throw new TlsFatalAlert(AlertDescription.decode_error); + + byte[] identitiesData = TlsUtilities.ReadFully(totalLengthIdentities, input); + MemoryStream buf = new MemoryStream(identitiesData, false); + do + { + PskIdentity identity = PskIdentity.Parse(buf); + identities.Add(identity); + } + while (buf.Position < buf.Length); + } + + var binders = new List(); + int totalLengthBinders = TlsUtilities.ReadUint16(input); + { + if (totalLengthBinders < 33) + throw new TlsFatalAlert(AlertDescription.decode_error); + + byte[] bindersData = TlsUtilities.ReadFully(totalLengthBinders, input); + MemoryStream buf = new MemoryStream(bindersData, false); + do + { + byte[] binder = TlsUtilities.ReadOpaque8(buf, 32); + binders.Add(binder); + } + while (buf.Position < buf.Length); + } + + return new OfferedPsks(identities, binders, 2 + totalLengthBinders); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/OfferedPsks.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/OfferedPsks.cs.meta new file mode 100644 index 000000000..26904213b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/OfferedPsks.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c622142fa9e27324ea8926560d600a7a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PrfAlgorithm.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PrfAlgorithm.cs new file mode 100644 index 000000000..8c8840f77 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PrfAlgorithm.cs @@ -0,0 +1,53 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 5246 + /// + /// Note that the values here are implementation-specific and arbitrary. It is recommended not to depend on the + /// particular values (e.g. serialization). + /// + public abstract class PrfAlgorithm + { + public const int ssl_prf_legacy = 0; + public const int tls_prf_legacy = 1; + public const int tls_prf_sha256 = 2; + public const int tls_prf_sha384 = 3; + public const int tls13_hkdf_sha256 = 4; + public const int tls13_hkdf_sha384 = 5; + //public const int tls13_hkdf_sha512 = 6; + public const int tls13_hkdf_sm3 = 7; + + public static string GetName(int prfAlgorithm) + { + switch (prfAlgorithm) + { + case ssl_prf_legacy: + return "ssl_prf_legacy"; + case tls_prf_legacy: + return "tls_prf_legacy"; + case tls_prf_sha256: + return "tls_prf_sha256"; + case tls_prf_sha384: + return "tls_prf_sha384"; + case tls13_hkdf_sha256: + return "tls13_hkdf_sha256"; + case tls13_hkdf_sha384: + return "tls13_hkdf_sha384"; + case tls13_hkdf_sm3: + return "tls13_hkdf_sm3"; + default: + return "UNKNOWN"; + } + } + + public static string GetText(int prfAlgorithm) + { + return GetName(prfAlgorithm) + "(" + prfAlgorithm + ")"; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PrfAlgorithm.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PrfAlgorithm.cs.meta new file mode 100644 index 000000000..c9542c9b7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PrfAlgorithm.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d8713aca130c614daca84c1a63dc1a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ProtocolName.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ProtocolName.cs new file mode 100644 index 000000000..388dba5f7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ProtocolName.cs @@ -0,0 +1,103 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 7301 Represents a protocol name for use with ALPN. + public sealed class ProtocolName + { + public static ProtocolName AsRawBytes(byte[] bytes) + { + return new ProtocolName(Arrays.Clone(bytes)); + } + + public static ProtocolName AsUtf8Encoding(string name) + { + return new ProtocolName(Strings.ToUtf8ByteArray(name)); + } + + public static readonly ProtocolName Http_1_1 = AsUtf8Encoding("http/1.1"); + public static readonly ProtocolName Spdy_1 = AsUtf8Encoding("spdy/1"); + public static readonly ProtocolName Spdy_2 = AsUtf8Encoding("spdy/2"); + public static readonly ProtocolName Spdy_3 = AsUtf8Encoding("spdy/3"); + public static readonly ProtocolName Stun_Turn = AsUtf8Encoding("stun.turn"); + public static readonly ProtocolName Stun_Nat_Discovery = AsUtf8Encoding("stun.nat-discovery"); + public static readonly ProtocolName Http_2_Tls = AsUtf8Encoding("h2"); + public static readonly ProtocolName Http_2_Tcp = AsUtf8Encoding("h2c"); + public static readonly ProtocolName WebRtc = AsUtf8Encoding("webrtc"); + public static readonly ProtocolName WebRtc_Confidential = AsUtf8Encoding("c-webrtc"); + public static readonly ProtocolName Ftp = AsUtf8Encoding("ftp"); + public static readonly ProtocolName Imap = AsUtf8Encoding("imap"); + public static readonly ProtocolName Pop3 = AsUtf8Encoding("pop3"); + public static readonly ProtocolName ManageSieve = AsUtf8Encoding("managesieve"); + public static readonly ProtocolName Coap = AsUtf8Encoding("coap"); + public static readonly ProtocolName Xmpp_Client = AsUtf8Encoding("xmpp-client"); + public static readonly ProtocolName Xmpp_Server = AsUtf8Encoding("xmpp-server"); + public static readonly ProtocolName Acme_Tls_1 = AsUtf8Encoding("acme-tls/1"); + public static readonly ProtocolName Oasis_Mqtt = AsUtf8Encoding("mqtt"); + public static readonly ProtocolName Dns_Over_Tls = AsUtf8Encoding("dot"); + public static readonly ProtocolName Ntske_1 = AsUtf8Encoding("ntske/1"); + public static readonly ProtocolName Sun_Rpc = AsUtf8Encoding("sunrpc"); + public static readonly ProtocolName Http_3 = AsUtf8Encoding("h3"); + public static readonly ProtocolName Smb_2 = AsUtf8Encoding("smb"); + public static readonly ProtocolName Irc = AsUtf8Encoding("irc"); + public static readonly ProtocolName Nntp_Reading = AsUtf8Encoding("nntp"); + public static readonly ProtocolName Nntp_Transit = AsUtf8Encoding("nnsp"); + public static readonly ProtocolName Dns_Over_Quic = AsUtf8Encoding("doq"); + + private readonly byte[] m_bytes; + + private ProtocolName(byte[] bytes) + { + if (bytes == null) + throw new ArgumentNullException("bytes"); + if (bytes.Length < 1 || bytes.Length > 255) + throw new ArgumentException("must have length from 1 to 255", "bytes"); + + this.m_bytes = bytes; + } + + public byte[] GetBytes() + { + return Arrays.Clone(m_bytes); + } + + public string GetUtf8Decoding() + { + return Strings.FromUtf8ByteArray(m_bytes); + } + + /// Encode this to a . + /// the to encode to. + /// + public void Encode(Stream output) + { + TlsUtilities.WriteOpaque8(m_bytes, output); + } + + /// Parse a from a . + /// the to parse from. + /// a object. + /// + public static ProtocolName Parse(Stream input) + { + return new ProtocolName(TlsUtilities.ReadOpaque8(input, 1)); + } + + public override bool Equals(object obj) + { + return obj is ProtocolName && Arrays.AreEqual(m_bytes, ((ProtocolName)obj).m_bytes); + } + + public override int GetHashCode() + { + return Arrays.GetHashCode(m_bytes); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ProtocolName.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ProtocolName.cs.meta new file mode 100644 index 000000000..af8b477ae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ProtocolName.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aab20a82a8612f24aa2a30bd75f278e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ProtocolVersion.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ProtocolVersion.cs new file mode 100644 index 000000000..21c17107a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ProtocolVersion.cs @@ -0,0 +1,423 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class ProtocolVersion + { + public static readonly ProtocolVersion SSLv3 = new ProtocolVersion(0x0300, "SSL 3.0"); + public static readonly ProtocolVersion TLSv10 = new ProtocolVersion(0x0301, "TLS 1.0"); + public static readonly ProtocolVersion TLSv11 = new ProtocolVersion(0x0302, "TLS 1.1"); + public static readonly ProtocolVersion TLSv12 = new ProtocolVersion(0x0303, "TLS 1.2"); + public static readonly ProtocolVersion TLSv13 = new ProtocolVersion(0x0304, "TLS 1.3"); + public static readonly ProtocolVersion DTLSv10 = new ProtocolVersion(0xFEFF, "DTLS 1.0"); + public static readonly ProtocolVersion DTLSv12 = new ProtocolVersion(0xFEFD, "DTLS 1.2"); + public static readonly ProtocolVersion DTLSv13 = new ProtocolVersion(0xFEFC, "DTLS 1.3"); + + internal static readonly ProtocolVersion CLIENT_EARLIEST_SUPPORTED_DTLS = DTLSv10; + internal static readonly ProtocolVersion CLIENT_EARLIEST_SUPPORTED_TLS = SSLv3; + internal static readonly ProtocolVersion CLIENT_LATEST_SUPPORTED_DTLS = DTLSv12; + internal static readonly ProtocolVersion CLIENT_LATEST_SUPPORTED_TLS = TLSv13; + + internal static readonly ProtocolVersion SERVER_EARLIEST_SUPPORTED_DTLS = DTLSv10; + internal static readonly ProtocolVersion SERVER_EARLIEST_SUPPORTED_TLS = SSLv3; + internal static readonly ProtocolVersion SERVER_LATEST_SUPPORTED_DTLS = DTLSv12; + internal static readonly ProtocolVersion SERVER_LATEST_SUPPORTED_TLS = TLSv13; + + public static bool Contains(ProtocolVersion[] versions, ProtocolVersion version) + { + if (versions != null && version != null) + { + for (int i = 0; i < versions.Length; ++i) + { + if (version.Equals(versions[i])) + return true; + } + } + return false; + } + + public static ProtocolVersion GetEarliestDtls(ProtocolVersion[] versions) + { + ProtocolVersion earliest = null; + if (null != versions) + { + for (int i = 0; i < versions.Length; ++i) + { + ProtocolVersion next = versions[i]; + if (null != next && next.IsDtls) + { + if (null == earliest || next.MinorVersion > earliest.MinorVersion) + { + earliest = next; + } + } + } + } + return earliest; + } + + public static ProtocolVersion GetEarliestTls(ProtocolVersion[] versions) + { + ProtocolVersion earliest = null; + if (null != versions) + { + for (int i = 0; i < versions.Length; ++i) + { + ProtocolVersion next = versions[i]; + if (null != next && next.IsTls) + { + if (null == earliest || next.MinorVersion < earliest.MinorVersion) + { + earliest = next; + } + } + } + } + return earliest; + } + + public static ProtocolVersion GetLatestDtls(ProtocolVersion[] versions) + { + ProtocolVersion latest = null; + if (null != versions) + { + for (int i = 0; i < versions.Length; ++i) + { + ProtocolVersion next = versions[i]; + if (null != next && next.IsDtls) + { + if (null == latest || next.MinorVersion < latest.MinorVersion) + { + latest = next; + } + } + } + } + return latest; + } + + public static ProtocolVersion GetLatestTls(ProtocolVersion[] versions) + { + ProtocolVersion latest = null; + if (null != versions) + { + for (int i = 0; i < versions.Length; ++i) + { + ProtocolVersion next = versions[i]; + if (null != next && next.IsTls) + { + if (null == latest || next.MinorVersion > latest.MinorVersion) + { + latest = next; + } + } + } + } + return latest; + } + + internal static bool IsSupportedDtlsVersionClient(ProtocolVersion version) + { + return null != version + && version.IsEqualOrLaterVersionOf(CLIENT_EARLIEST_SUPPORTED_DTLS) + && version.IsEqualOrEarlierVersionOf(CLIENT_LATEST_SUPPORTED_DTLS); + } + + internal static bool IsSupportedDtlsVersionServer(ProtocolVersion version) + { + return null != version + && version.IsEqualOrLaterVersionOf(SERVER_EARLIEST_SUPPORTED_DTLS) + && version.IsEqualOrEarlierVersionOf(SERVER_LATEST_SUPPORTED_DTLS); + } + + internal static bool IsSupportedTlsVersionClient(ProtocolVersion version) + { + if (null == version) + return false; + + int fullVersion = version.FullVersion; + + return fullVersion >= CLIENT_EARLIEST_SUPPORTED_TLS.FullVersion + && fullVersion <= CLIENT_LATEST_SUPPORTED_TLS.FullVersion; + } + + internal static bool IsSupportedTlsVersionServer(ProtocolVersion version) + { + if (null == version) + return false; + + int fullVersion = version.FullVersion; + + return fullVersion >= SERVER_EARLIEST_SUPPORTED_TLS.FullVersion + && fullVersion <= SERVER_LATEST_SUPPORTED_TLS.FullVersion; + } + + private readonly int version; + private readonly string name; + + private ProtocolVersion(int v, string name) + { + this.version = v & 0xFFFF; + this.name = name; + } + + public ProtocolVersion[] DownTo(ProtocolVersion min) + { + if (!IsEqualOrLaterVersionOf(min)) + throw new ArgumentException("must be an equal or earlier version of this one", "min"); + + var result = new List(); + result.Add(this); + + ProtocolVersion current = this; + while (!current.Equals(min)) + { + current = current.GetPreviousVersion(); + result.Add(current); + } + + return result.ToArray(); + } + + public int FullVersion + { + get { return version; } + } + + public int MajorVersion + { + get { return version >> 8; } + } + + public int MinorVersion + { + get { return version & 0xFF; } + } + + public string Name + { + get { return name; } + } + + public bool IsDtls + { + get { return MajorVersion == 0xFE; } + } + + public bool IsSsl + { + get { return this == SSLv3; } + } + + public bool IsTls + { + get { return MajorVersion == 0x03; } + } + + public ProtocolVersion GetEquivalentTlsVersion() + { + switch (MajorVersion) + { + case 0x03: + return this; + case 0xFE: + switch (MinorVersion) + { + case 0xFF: + return TLSv11; + case 0xFD: + return TLSv12; + case 0xFC: + return TLSv13; + default: + return null; + } + default: + return null; + } + } + + public ProtocolVersion GetNextVersion() + { + int major = MajorVersion, minor = MinorVersion; + switch (major) + { + case 0x03: + switch (minor) + { + case 0xFF: + return null; + default: + return Get(major, minor + 1); + } + case 0xFE: + switch (minor) + { + case 0x00: + return null; + case 0xFF: + return DTLSv12; + default: + return Get(major, minor - 1); + } + default: + return null; + } + } + + public ProtocolVersion GetPreviousVersion() + { + int major = MajorVersion, minor = MinorVersion; + switch (major) + { + case 0x03: + switch (minor) + { + case 0x00: + return null; + default: + return Get(major, minor - 1); + } + case 0xFE: + switch (minor) + { + case 0xFF: + return null; + case 0xFD: + return DTLSv10; + default: + return Get(major, minor + 1); + } + default: + return null; + } + } + + public bool IsEarlierVersionOf(ProtocolVersion version) + { + if (null == version || MajorVersion != version.MajorVersion) + return false; + + int diffMinorVersion = MinorVersion - version.MinorVersion; + return IsDtls ? diffMinorVersion > 0 : diffMinorVersion < 0; + } + + public bool IsEqualOrEarlierVersionOf(ProtocolVersion version) + { + if (null == version || MajorVersion != version.MajorVersion) + return false; + + int diffMinorVersion = MinorVersion - version.MinorVersion; + return IsDtls ? diffMinorVersion >= 0 : diffMinorVersion <= 0; + } + + public bool IsEqualOrLaterVersionOf(ProtocolVersion version) + { + if (null == version || MajorVersion != version.MajorVersion) + return false; + + int diffMinorVersion = MinorVersion - version.MinorVersion; + return IsDtls ? diffMinorVersion <= 0 : diffMinorVersion >= 0; + } + + public bool IsLaterVersionOf(ProtocolVersion version) + { + if (null == version || MajorVersion != version.MajorVersion) + return false; + + int diffMinorVersion = MinorVersion - version.MinorVersion; + return IsDtls ? diffMinorVersion < 0 : diffMinorVersion > 0; + } + + public override bool Equals(object other) + { + return this == other || (other is ProtocolVersion && Equals((ProtocolVersion)other)); + } + + public bool Equals(ProtocolVersion other) + { + return other != null && this.version == other.version; + } + + public override int GetHashCode() + { + return version; + } + + public static ProtocolVersion Get(int major, int minor) + { + switch (major) + { + case 0x03: + { + switch (minor) + { + case 0x00: + return SSLv3; + case 0x01: + return TLSv10; + case 0x02: + return TLSv11; + case 0x03: + return TLSv12; + case 0x04: + return TLSv13; + } + return GetUnknownVersion(major, minor, "TLS"); + } + case 0xFE: + { + switch (minor) + { + case 0xFF: + return DTLSv10; + case 0xFE: + throw new ArgumentException("{0xFE, 0xFE} is a reserved protocol version"); + case 0xFD: + return DTLSv12; + case 0xFC: + return DTLSv13; + } + return GetUnknownVersion(major, minor, "DTLS"); + } + default: + { + return GetUnknownVersion(major, minor, "UNKNOWN"); + } + } + } + + public ProtocolVersion[] Only() + { + return new ProtocolVersion[]{ this }; + } + + public override string ToString() + { + return name; + } + + private static void CheckUint8(int versionOctet) + { + if (!TlsUtilities.IsValidUint8(versionOctet)) + throw new ArgumentException("not a valid octet", "versionOctet"); + } + + private static ProtocolVersion GetUnknownVersion(int major, int minor, string prefix) + { + CheckUint8(major); + CheckUint8(minor); + + int v = (major << 8) | minor; + string hex = Convert.ToString(0x10000 | v, 16).Substring(1).ToUpperInvariant(); + return new ProtocolVersion(v, prefix + " 0x" + hex); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ProtocolVersion.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ProtocolVersion.cs.meta new file mode 100644 index 000000000..15e15ec1e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ProtocolVersion.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b4aa6c706d4d634e8221dd0c605c466 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskIdentity.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskIdentity.cs new file mode 100644 index 000000000..e4a785f1b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskIdentity.cs @@ -0,0 +1,73 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class PskIdentity + { + private readonly byte[] m_identity; + private readonly long m_obfuscatedTicketAge; + + public PskIdentity(byte[] identity, long obfuscatedTicketAge) + { + if (null == identity) + throw new ArgumentNullException("identity"); + if (identity.Length < 1 || !TlsUtilities.IsValidUint16(identity.Length)) + throw new ArgumentException("should have length from 1 to 65535", "identity"); + if (!TlsUtilities.IsValidUint32(obfuscatedTicketAge)) + throw new ArgumentException("should be a uint32", "obfuscatedTicketAge"); + + this.m_identity = identity; + this.m_obfuscatedTicketAge = obfuscatedTicketAge; + } + + public int GetEncodedLength() + { + return 6 + m_identity.Length; + } + + public byte[] Identity + { + get { return m_identity; } + } + + public long ObfuscatedTicketAge + { + get { return m_obfuscatedTicketAge; } + } + + public void Encode(Stream output) + { + TlsUtilities.WriteOpaque16(Identity, output); + TlsUtilities.WriteUint32(ObfuscatedTicketAge, output); + } + + public static PskIdentity Parse(Stream input) + { + byte[] identity = TlsUtilities.ReadOpaque16(input, 1); + long obfuscatedTicketAge = TlsUtilities.ReadUint32(input); + return new PskIdentity(identity, obfuscatedTicketAge); + } + + public override bool Equals(object obj) + { + PskIdentity that = obj as PskIdentity; + if (null == that) + return false; + + return this.m_obfuscatedTicketAge == that.m_obfuscatedTicketAge + && Arrays.ConstantTimeAreEqual(this.m_identity, that.m_identity); + } + + public override int GetHashCode() + { + return Arrays.GetHashCode(m_identity) ^ m_obfuscatedTicketAge.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskIdentity.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskIdentity.cs.meta new file mode 100644 index 000000000..d4d75a9eb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskIdentity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d28e8dfcf472ed142ab16c64d611043b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskKeyExchangeMode.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskKeyExchangeMode.cs new file mode 100644 index 000000000..9aa8963d3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskKeyExchangeMode.cs @@ -0,0 +1,36 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class PskKeyExchangeMode + { + /* + * RFC 8446 + */ + + public const short psk_ke = 0; + public const short psk_dhe_ke = 1; + + public static string GetName(short pskKeyExchangeMode) + { + switch (pskKeyExchangeMode) + { + case psk_ke: + return "psk_ke"; + case psk_dhe_ke: + return "psk_dhe_ke"; + default: + return "UNKNOWN"; + } + } + + public static string GetText(short pskKeyExchangeMode) + { + return GetName(pskKeyExchangeMode) + "(" + pskKeyExchangeMode + ")"; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskKeyExchangeMode.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskKeyExchangeMode.cs.meta new file mode 100644 index 000000000..7707ccb3a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskKeyExchangeMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 975780894f4c71a46a265c9d000f368e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskTlsClient.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskTlsClient.cs new file mode 100644 index 000000000..1724b74c4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskTlsClient.cs @@ -0,0 +1,64 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public class PskTlsClient + : AbstractTlsClient + { + private static readonly int[] DefaultCipherSuites = new int[] + { + CipherSuite.TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_DHE_PSK_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_DHE_PSK_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_DHE_PSK_WITH_AES_128_CBC_SHA + }; + + protected readonly TlsPskIdentity m_pskIdentity; + + public PskTlsClient(TlsCrypto crypto, byte[] identity, byte[] psk) + : this(crypto, new BasicTlsPskIdentity(identity, psk)) + { + } + + public PskTlsClient(TlsCrypto crypto, TlsPskIdentity pskIdentity) + : base(crypto) + { + this.m_pskIdentity = pskIdentity; + } + + protected override ProtocolVersion[] GetSupportedVersions() + { + return ProtocolVersion.TLSv12.Only(); + } + + protected override int[] GetSupportedCipherSuites() + { + return TlsUtilities.GetSupportedCipherSuites(Crypto, DefaultCipherSuites); + } + + public override TlsPskIdentity GetPskIdentity() + { + return m_pskIdentity; + } + + /// + public override TlsAuthentication GetAuthentication() + { + /* + * Note: This method is not called unless a server certificate is sent, which may be the + * case e.g. for RSA_PSK key exchange. + */ + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskTlsClient.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskTlsClient.cs.meta new file mode 100644 index 000000000..9e01d8cf2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskTlsClient.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f385650b2bc8ee449a32aaafc8c353c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskTlsServer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskTlsServer.cs new file mode 100644 index 000000000..d2d27004f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskTlsServer.cs @@ -0,0 +1,80 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public class PskTlsServer + : AbstractTlsServer + { + private static readonly int[] DefaultCipherSuites = new int[] + { + CipherSuite.TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384, + CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_DHE_PSK_WITH_AES_256_GCM_SHA384, + CipherSuite.TLS_DHE_PSK_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_DHE_PSK_WITH_AES_256_CBC_SHA384, + CipherSuite.TLS_DHE_PSK_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_DHE_PSK_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_DHE_PSK_WITH_AES_128_CBC_SHA + }; + + protected readonly TlsPskIdentityManager m_pskIdentityManager; + + public PskTlsServer(TlsCrypto crypto, TlsPskIdentityManager pskIdentityManager) + : base(crypto) + { + this.m_pskIdentityManager = pskIdentityManager; + } + + /// + protected virtual TlsCredentialedDecryptor GetRsaEncryptionCredentials() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + protected override ProtocolVersion[] GetSupportedVersions() + { + return ProtocolVersion.TLSv12.Only(); + } + + protected override int[] GetSupportedCipherSuites() + { + return TlsUtilities.GetSupportedCipherSuites(Crypto, DefaultCipherSuites); + } + + public override TlsCredentials GetCredentials() + { + int keyExchangeAlgorithm = m_context.SecurityParameters.KeyExchangeAlgorithm; + + switch (keyExchangeAlgorithm) + { + case KeyExchangeAlgorithm.DHE_PSK: + case KeyExchangeAlgorithm.ECDHE_PSK: + case KeyExchangeAlgorithm.PSK: + return null; + + case KeyExchangeAlgorithm.RSA_PSK: + return GetRsaEncryptionCredentials(); + + default: + // Note: internal error here; selected a key exchange we don't implement! + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + public override TlsPskIdentityManager GetPskIdentityManager() + { + return m_pskIdentityManager; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskTlsServer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskTlsServer.cs.meta new file mode 100644 index 000000000..987cafe75 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/PskTlsServer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e139d8b8002082b41b400ba330b3206b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/RecordFormat.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/RecordFormat.cs new file mode 100644 index 000000000..c89086207 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/RecordFormat.cs @@ -0,0 +1,16 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class RecordFormat + { + public const int TypeOffset = 0; + public const int VersionOffset = 1; + public const int LengthOffset = 3; + public const int FragmentOffset = 5; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/RecordFormat.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/RecordFormat.cs.meta new file mode 100644 index 000000000..485acc059 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/RecordFormat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 799b84e8a44763e4f92a334cbe5d6972 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/RecordPreview.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/RecordPreview.cs new file mode 100644 index 000000000..acf8c4cb2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/RecordPreview.cs @@ -0,0 +1,40 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class RecordPreview + { + private readonly int recordSize; + private readonly int contentLimit; + + internal static RecordPreview CombineAppData(RecordPreview a, RecordPreview b) + { + return new RecordPreview(a.RecordSize + b.RecordSize, a.ContentLimit + b.ContentLimit); + } + + internal static RecordPreview ExtendRecordSize(RecordPreview a, int recordSize) + { + return new RecordPreview(a.RecordSize + recordSize, a.ContentLimit); + } + + internal RecordPreview(int recordSize, int contentLimit) + { + this.recordSize = recordSize; + this.contentLimit = contentLimit; + } + + public int ContentLimit + { + get { return contentLimit; } + } + + public int RecordSize + { + get { return recordSize; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/RecordPreview.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/RecordPreview.cs.meta new file mode 100644 index 000000000..980cba105 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/RecordPreview.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c1255e776839264195eccce3e3a8670 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/RecordStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/RecordStream.cs new file mode 100644 index 000000000..c1a10e655 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/RecordStream.cs @@ -0,0 +1,609 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +using System.IO; + +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// An implementation of the TLS 1.0/1.1/1.2 record layer. + internal sealed class RecordStream + { + private const int DefaultPlaintextLimit = (1 << 14); + + private readonly Record m_inputRecord = new Record(); + private readonly SequenceNumber m_readSeqNo = new SequenceNumber(), m_writeSeqNo = new SequenceNumber(); + + private readonly TlsProtocol m_handler; + private readonly Stream m_input; + private readonly Stream m_output; + + private TlsCipher m_pendingCipher = null; + private TlsCipher m_readCipher = TlsNullNullCipher.Instance; + private TlsCipher m_readCipherDeferred = null; + private TlsCipher m_writeCipher = TlsNullNullCipher.Instance; + + private ProtocolVersion m_writeVersion = null; + + private int m_plaintextLimit = DefaultPlaintextLimit; + private int m_ciphertextLimit = DefaultPlaintextLimit; + private bool m_ignoreChangeCipherSpec = false; + + internal RecordStream(TlsProtocol handler, Stream input, Stream output) + { + this.m_handler = handler; + this.m_input = input; + this.m_output = output; + } + + internal int PlaintextLimit + { + get { return m_plaintextLimit; } + } + + internal void SetPlaintextLimit(int plaintextLimit) + { + this.m_plaintextLimit = plaintextLimit; + this.m_ciphertextLimit = m_readCipher.GetCiphertextDecodeLimit(plaintextLimit); + } + + internal void SetWriteVersion(ProtocolVersion writeVersion) + { + this.m_writeVersion = writeVersion; + } + + internal void SetIgnoreChangeCipherSpec(bool ignoreChangeCipherSpec) + { + this.m_ignoreChangeCipherSpec = ignoreChangeCipherSpec; + } + + internal void SetPendingCipher(TlsCipher tlsCipher) + { + this.m_pendingCipher = tlsCipher; + } + + /// + internal void NotifyChangeCipherSpecReceived() + { + if (m_pendingCipher == null) + throw new TlsFatalAlert(AlertDescription.unexpected_message, "No pending cipher"); + + EnablePendingCipherRead(false); + } + + /// + internal void EnablePendingCipherRead(bool deferred) + { + if (m_pendingCipher == null) + throw new TlsFatalAlert(AlertDescription.internal_error); + + if (m_readCipherDeferred != null) + throw new TlsFatalAlert(AlertDescription.internal_error); + + if (deferred) + { + this.m_readCipherDeferred = m_pendingCipher; + } + else + { + this.m_readCipher = m_pendingCipher; + this.m_ciphertextLimit = m_readCipher.GetCiphertextDecodeLimit(m_plaintextLimit); + m_readSeqNo.Reset(); + } + } + + /// + internal void EnablePendingCipherWrite() + { + if (m_pendingCipher == null) + throw new TlsFatalAlert(AlertDescription.internal_error); + + this.m_writeCipher = this.m_pendingCipher; + m_writeSeqNo.Reset(); + } + + /// + internal void FinaliseHandshake() + { + if (m_readCipher != m_pendingCipher || m_writeCipher != m_pendingCipher) + throw new TlsFatalAlert(AlertDescription.handshake_failure); + + this.m_pendingCipher = null; + } + + internal bool NeedsKeyUpdate() + { + return m_writeSeqNo.CurrentValue >= (1L << 20); + } + + /// + internal void NotifyKeyUpdateReceived() + { + m_readCipher.RekeyDecoder(); + m_readSeqNo.Reset(); + } + + /// + internal void NotifyKeyUpdateSent() + { + m_writeCipher.RekeyEncoder(); + m_writeSeqNo.Reset(); + } + + /// + internal RecordPreview PreviewRecordHeader(byte[] recordHeader) + { + short recordType = CheckRecordType(recordHeader, RecordFormat.TypeOffset); + + //ProtocolVersion recordVersion = TlsUtilities.ReadVersion(recordHeader, RecordFormat.VersionOffset); + + int length = TlsUtilities.ReadUint16(recordHeader, RecordFormat.LengthOffset); + + CheckLength(length, m_ciphertextLimit, AlertDescription.record_overflow); + + int recordSize = RecordFormat.FragmentOffset + length; + int applicationDataLimit = 0; + + // NOTE: For TLS 1.3, this only MIGHT be application data + if (ContentType.application_data == recordType && m_handler.IsApplicationDataReady) + { + applicationDataLimit = System.Math.Max(0, System.Math.Min(m_plaintextLimit, + m_readCipher.GetPlaintextLimit(length))); + } + + return new RecordPreview(recordSize, applicationDataLimit); + } + + internal RecordPreview PreviewOutputRecord(int contentLength) + { + int contentLimit = System.Math.Max(0, System.Math.Min(m_plaintextLimit, contentLength)); + int recordSize = PreviewOutputRecordSize(contentLimit); + return new RecordPreview(recordSize, contentLimit); + } + + internal int PreviewOutputRecordSize(int contentLength) + { + Debug.Assert(contentLength <= m_plaintextLimit); + + return RecordFormat.FragmentOffset + m_writeCipher.GetCiphertextEncodeLimit(contentLength, m_plaintextLimit); + } + + /// + internal bool ReadFullRecord(byte[] input, int inputOff, int inputLen) + { + if (inputLen < RecordFormat.FragmentOffset) + return false; + + int length = TlsUtilities.ReadUint16(input, inputOff + RecordFormat.LengthOffset); + if (inputLen != (RecordFormat.FragmentOffset + length)) + return false; + + short recordType = CheckRecordType(input, inputOff + RecordFormat.TypeOffset); + + ProtocolVersion recordVersion = TlsUtilities.ReadVersion(input, inputOff + RecordFormat.VersionOffset); + + CheckLength(length, m_ciphertextLimit, AlertDescription.record_overflow); + + if (m_ignoreChangeCipherSpec && ContentType.change_cipher_spec == recordType) + { + CheckChangeCipherSpec(input, inputOff + RecordFormat.FragmentOffset, length); + return true; + } + + TlsDecodeResult decoded = DecodeAndVerify(recordType, recordVersion, input, + inputOff + RecordFormat.FragmentOffset, length); + + m_handler.ProcessRecord(decoded.contentType, decoded.buf, decoded.off, decoded.len); + return true; + } + + /// + internal bool ReadRecord() + { + if (!m_inputRecord.ReadHeader(m_input)) + return false; + + short recordType = CheckRecordType(m_inputRecord.m_buf, RecordFormat.TypeOffset); + + ProtocolVersion recordVersion = TlsUtilities.ReadVersion(m_inputRecord.m_buf, RecordFormat.VersionOffset); + + int length = TlsUtilities.ReadUint16(m_inputRecord.m_buf, RecordFormat.LengthOffset); + + CheckLength(length, m_ciphertextLimit, AlertDescription.record_overflow); + + m_inputRecord.ReadFragment(m_input, length); + + TlsDecodeResult decoded; + try + { + if (m_ignoreChangeCipherSpec && ContentType.change_cipher_spec == recordType) + { + CheckChangeCipherSpec(m_inputRecord.m_buf, RecordFormat.FragmentOffset, length); + return true; + } + + decoded = DecodeAndVerify(recordType, recordVersion, m_inputRecord.m_buf, RecordFormat.FragmentOffset, + length); + + // with aead/cha-cha in and out buffer is the same + m_handler.ProcessRecord(decoded.contentType, decoded.buf, decoded.off, decoded.len); + + if (decoded.fromBufferPool) + BestHTTP.PlatformSupport.Memory.BufferPool.Release(decoded.buf); + } + finally + { + m_inputRecord.Reset(); + } + + return true; + } + + /// + internal TlsDecodeResult DecodeAndVerify(short recordType, ProtocolVersion recordVersion, byte[] ciphertext, + int off, int len) + { + long seqNo = m_readSeqNo.NextValue(AlertDescription.unexpected_message); + TlsDecodeResult decoded = m_readCipher.DecodeCiphertext(seqNo, recordType, recordVersion, ciphertext, off, + len); + + CheckLength(decoded.len, m_plaintextLimit, AlertDescription.record_overflow); + + /* + * RFC 5246 6.2.1 Implementations MUST NOT send zero-length fragments of Handshake, Alert, + * or ChangeCipherSpec content types. + */ + if (decoded.len < 1 && decoded.contentType != ContentType.application_data) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + return decoded; + } + + /// + internal void WriteRecord(short contentType, byte[] plaintext, int plaintextOffset, int plaintextLength) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + WriteRecord(contentType, plaintext.AsSpan(plaintextOffset, plaintextLength)); +#else + // Never send anything until a valid ClientHello has been received + if (m_writeVersion == null) + return; + + /* + * RFC 5246 6.2.1 The length should not exceed 2^14. + */ + CheckLength(plaintextLength, m_plaintextLimit, AlertDescription.internal_error); + + /* + * RFC 5246 6.2.1 Implementations MUST NOT send zero-length fragments of Handshake, Alert, + * or ChangeCipherSpec content types. + */ + if (plaintextLength < 1 && contentType != ContentType.application_data) + throw new TlsFatalAlert(AlertDescription.internal_error); + + long seqNo = m_writeSeqNo.NextValue(AlertDescription.internal_error); + ProtocolVersion recordVersion = m_writeVersion; + + TlsEncodeResult encoded = m_writeCipher.EncodePlaintext(seqNo, contentType, recordVersion, + RecordFormat.FragmentOffset, plaintext, plaintextOffset, plaintextLength); + + int ciphertextLength = encoded.len - RecordFormat.FragmentOffset; + TlsUtilities.CheckUint16(ciphertextLength); + + TlsUtilities.WriteUint8(encoded.recordType, encoded.buf, encoded.off + RecordFormat.TypeOffset); + TlsUtilities.WriteVersion(recordVersion, encoded.buf, encoded.off + RecordFormat.VersionOffset); + TlsUtilities.WriteUint16(ciphertextLength, encoded.buf, encoded.off + RecordFormat.LengthOffset); + + // TODO[tls-port] Can we support interrupted IO on .NET? + try + { + m_output.Write(encoded.buf, encoded.off, encoded.len); + } + //catch (InterruptedIOException e) + //{ + // throw new TlsFatalAlert(AlertDescription.internal_error, e); + //} + finally + { + if (encoded.fromBufferPool) + BufferPool.Release(encoded.buf); + } + + m_output.Flush(); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// + internal void WriteRecord(short contentType, ReadOnlySpan plaintext) + { + // Never send anything until a valid ClientHello has been received + if (m_writeVersion == null) + return; + + /* + * RFC 5246 6.2.1 The length should not exceed 2^14. + */ + CheckLength(plaintext.Length, m_plaintextLimit, AlertDescription.internal_error); + + /* + * RFC 5246 6.2.1 Implementations MUST NOT send zero-length fragments of Handshake, Alert, + * or ChangeCipherSpec content types. + */ + if (plaintext.Length < 1 && contentType != ContentType.application_data) + throw new TlsFatalAlert(AlertDescription.internal_error); + + long seqNo=m_writeSeqNo.NextValue(AlertDescription.internal_error); + ProtocolVersion recordVersion = m_writeVersion; + + TlsEncodeResult encoded = m_writeCipher.EncodePlaintext(seqNo, contentType, recordVersion, + RecordFormat.FragmentOffset, plaintext); + + int ciphertextLength = encoded.len - RecordFormat.FragmentOffset; + TlsUtilities.CheckUint16(ciphertextLength); + + TlsUtilities.WriteUint8(encoded.recordType, encoded.buf, encoded.off + RecordFormat.TypeOffset); + TlsUtilities.WriteVersion(recordVersion, encoded.buf, encoded.off + RecordFormat.VersionOffset); + TlsUtilities.WriteUint16(ciphertextLength, encoded.buf, encoded.off + RecordFormat.LengthOffset); + + // TODO[tls-port] Can we support interrupted IO on .NET? + //try + //{ + m_output.Write(encoded.buf, encoded.off, encoded.len); + //} + //catch (InterruptedIOException e) + //{ + // throw new TlsFatalAlert(AlertDescription.internal_error, e); + //} + + m_output.Flush(); + } +#endif + + /// + internal void Close() + { + m_inputRecord.Reset(); + + IOException io = null; + try + { + m_input.Dispose(); + } + catch (IOException e) + { + io = e; + } + + try + { + m_output.Dispose(); + } + catch (IOException e) + { + if (io == null) + { + io = e; + } + else + { + // TODO[tls] Available from JDK 7 + //io.addSuppressed(e); + } + } + + if (io != null) + throw io; + } + + /// + private void CheckChangeCipherSpec(byte[] buf, int off, int len) + { + if (1 != len || (byte)ChangeCipherSpec.change_cipher_spec != buf[off]) + { + throw new TlsFatalAlert(AlertDescription.unexpected_message, + "Malformed " + ContentType.GetText(ContentType.change_cipher_spec)); + } + } + + /// + private short CheckRecordType(byte[] buf, int off) + { + short recordType = TlsUtilities.ReadUint8(buf, off); + + if (null != m_readCipherDeferred && recordType == ContentType.application_data) + { + this.m_readCipher = m_readCipherDeferred; + this.m_readCipherDeferred = null; + this.m_ciphertextLimit = m_readCipher.GetCiphertextDecodeLimit(m_plaintextLimit); + m_readSeqNo.Reset(); + } + else if (m_readCipher.UsesOpaqueRecordType) + { + if (ContentType.application_data != recordType) + { + if (m_ignoreChangeCipherSpec && ContentType.change_cipher_spec == recordType) + { + // See RFC 8446 D.4. + } + else + { + throw new TlsFatalAlert(AlertDescription.unexpected_message, + "Opaque " + ContentType.GetText(recordType)); + } + } + } + else + { + switch (recordType) + { + case ContentType.application_data: + { + if (!m_handler.IsApplicationDataReady) + { + throw new TlsFatalAlert(AlertDescription.unexpected_message, + "Not ready for " + ContentType.GetText(ContentType.application_data)); + } + break; + } + case ContentType.alert: + case ContentType.change_cipher_spec: + case ContentType.handshake: + // case ContentType.heartbeat: + break; + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message, + "Unsupported " + ContentType.GetText(recordType)); + } + } + + return recordType; + } + + /// + private static void CheckLength(int length, int limit, short alertDescription) + { + if (length > limit) + throw new TlsFatalAlert(alertDescription); + } + + private sealed class Record + { + private readonly byte[] m_header = new byte[RecordFormat.FragmentOffset]; + + internal volatile byte[] m_buf; + internal volatile int m_pos; + + internal Record() + { + this.m_buf = m_header; + this.m_pos = 0; + } + + /// + internal void FillTo(Stream input, int length) + { + while (m_pos < length) + { + // TODO[tls-port] Can we support interrupted IO on .NET? + //try + //{ + int numRead = input.Read(m_buf, m_pos, length - m_pos); + if (numRead < 1) + break; + + m_pos += numRead; + //} + //catch (InterruptedIOException e) + //{ + // /* + // * Although modifying the bytesTransferred doesn't seem ideal, it's the simplest + // * way to make sure we don't break client code that depends on the exact type, + // * e.g. in Apache's httpcomponents-core-4.4.9, BHttpConnectionBase.isStale + // * depends on the exception type being SocketTimeoutException (or a subclass). + // * + // * We can set to 0 here because the only relevant callstack (via + // * TlsProtocol.readApplicationData) only ever processes one non-empty record (so + // * interruption after partial output cannot occur). + // */ + // m_pos += e.bytesTransferred; + // e.bytesTransferred = 0; + // throw e; + //} + } + } + + /// + internal void ReadFragment(Stream input, int fragmentLength) + { + int recordLength = RecordFormat.FragmentOffset + fragmentLength; + Resize(recordLength); + FillTo(input, recordLength); + if (m_pos < recordLength) + throw new EndOfStreamException(); + } + + /// + internal bool ReadHeader(Stream input) + { + FillTo(input, RecordFormat.FragmentOffset); + if (m_pos == 0) + return false; + + if (m_pos < RecordFormat.FragmentOffset) + throw new EndOfStreamException(); + + return true; + } + + internal void Reset() + { + if (m_buf != m_header) + BufferPool.Release(m_buf); + + m_buf = m_header; + m_pos = 0; + } + + private void Resize(int length) + { + if (m_buf.Length < length) + { + //byte[] tmp = new byte[length]; + //Array.Copy(m_buf, 0, tmp, 0, m_pos); + //m_buf = tmp; + + byte[] tmp = BufferPool.Get(length, true); + Array.Copy(m_buf, 0, tmp, 0, m_pos); + + if (m_buf != m_header) + BufferPool.Release(m_buf); + m_buf = tmp; + } + } + } + + private sealed class SequenceNumber + { + private long m_value = 0L; + private bool m_exhausted = false; + + internal long CurrentValue + { + get { lock (this) return m_value; } + } + + /// + internal long NextValue(short alertDescription) + { + lock (this) + { + if (m_exhausted) + throw new TlsFatalAlert(alertDescription, "Sequence numbers exhausted"); + + long result = m_value; + if (++m_value == 0L) + { + this.m_exhausted = true; + } + return result; + } + } + + internal void Reset() + { + lock (this) + { + this.m_value = 0L; + this.m_exhausted = false; + } + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/RecordStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/RecordStream.cs.meta new file mode 100644 index 000000000..a91b0079d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/RecordStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1cb5bec9eacb9114fa3ea388e0ec5d80 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SecurityParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SecurityParameters.cs new file mode 100644 index 000000000..6bdee5101 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SecurityParameters.cs @@ -0,0 +1,339 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class SecurityParameters + { + internal int m_entity = -1; + internal bool m_resumedSession = false; + internal bool m_secureRenegotiation = false; + internal int m_cipherSuite = Tls.CipherSuite.TLS_NULL_WITH_NULL_NULL; + internal short m_maxFragmentLength = -1; + internal int m_prfAlgorithm = -1; + internal int m_prfCryptoHashAlgorithm = -1; + internal int m_prfHashLength = -1; + internal int m_verifyDataLength = -1; + internal TlsSecret m_baseKeyClient = null; + internal TlsSecret m_baseKeyServer = null; + internal TlsSecret m_earlyExporterMasterSecret = null; + internal TlsSecret m_earlySecret = null; + internal TlsSecret m_exporterMasterSecret = null; + internal TlsSecret m_handshakeSecret = null; + internal TlsSecret m_masterSecret = null; + internal TlsSecret m_trafficSecretClient = null; + internal TlsSecret m_trafficSecretServer = null; + internal byte[] m_clientRandom = null; + internal byte[] m_serverRandom = null; + internal byte[] m_sessionHash = null; + internal byte[] m_sessionID = null; + internal byte[] m_pskIdentity = null; + internal byte[] m_srpIdentity = null; + internal byte[] m_tlsServerEndPoint = null; + internal byte[] m_tlsUnique = null; + internal bool m_encryptThenMac = false; + internal bool m_extendedMasterSecret = false; + internal bool m_extendedPadding = false; + internal bool m_truncatedHmac = false; + internal ProtocolName m_applicationProtocol = null; + internal bool m_applicationProtocolSet = false; + internal short[] m_clientCertTypes = null; + internal IList m_clientServerNames = null; + internal IList m_clientSigAlgs = null; + internal IList m_clientSigAlgsCert = null; + internal int[] m_clientSupportedGroups = null; + internal IList m_serverSigAlgs = null; + internal IList m_serverSigAlgsCert = null; + internal int[] m_serverSupportedGroups = null; + internal int m_keyExchangeAlgorithm = -1; + internal Certificate m_localCertificate = null; + internal Certificate m_peerCertificate = null; + internal ProtocolVersion m_negotiatedVersion = null; + internal int m_statusRequestVersion = 0; + internal short m_clientCertificateType = -1; + + // TODO[tls-ops] Investigate whether we can handle verify data using TlsSecret + internal byte[] m_localVerifyData = null; + internal byte[] m_peerVerifyData = null; + + internal void Clear() + { + this.m_sessionHash = null; + this.m_sessionID = null; + this.m_clientCertTypes = null; + this.m_clientServerNames = null; + this.m_clientSigAlgs = null; + this.m_clientSigAlgsCert = null; + this.m_clientSupportedGroups = null; + this.m_serverSigAlgs = null; + this.m_serverSigAlgsCert = null; + this.m_serverSupportedGroups = null; + this.m_statusRequestVersion = 0; + + this.m_baseKeyClient = ClearSecret(m_baseKeyClient); + this.m_baseKeyServer = ClearSecret(m_baseKeyServer); + this.m_earlyExporterMasterSecret = ClearSecret(m_earlyExporterMasterSecret); + this.m_earlySecret = ClearSecret(m_earlySecret); + this.m_exporterMasterSecret = ClearSecret(m_exporterMasterSecret); + this.m_handshakeSecret = ClearSecret(m_handshakeSecret); + this.m_masterSecret = ClearSecret(m_masterSecret); + } + + public ProtocolName ApplicationProtocol + { + get { return m_applicationProtocol; } + } + + public TlsSecret BaseKeyClient + { + get { return m_baseKeyClient; } + } + + public TlsSecret BaseKeyServer + { + get { return m_baseKeyServer; } + } + + public int CipherSuite + { + get { return m_cipherSuite; } + } + + public short ClientCertificateType + { + get { return m_clientCertificateType; } + } + + public short[] ClientCertTypes + { + get { return m_clientCertTypes; } + } + + public byte[] ClientRandom + { + get { return m_clientRandom; } + } + + public IList ClientServerNames + { + get { return m_clientServerNames; } + } + + public IList ClientSigAlgs + { + get { return m_clientSigAlgs; } + } + + public IList ClientSigAlgsCert + { + get { return m_clientSigAlgsCert; } + } + + public int[] ClientSupportedGroups + { + get { return m_clientSupportedGroups; } + } + + public TlsSecret EarlyExporterMasterSecret + { + get { return m_earlyExporterMasterSecret; } + } + + public TlsSecret EarlySecret + { + get { return m_earlySecret; } + } + + public TlsSecret ExporterMasterSecret + { + get { return m_exporterMasterSecret; } + } + + public int Entity + { + get { return m_entity; } + } + + public TlsSecret HandshakeSecret + { + get { return m_handshakeSecret; } + } + + public bool IsApplicationProtocolSet + { + get { return m_applicationProtocolSet; } + } + + public bool IsEncryptThenMac + { + get { return m_encryptThenMac; } + } + + public bool IsExtendedMasterSecret + { + get { return m_extendedMasterSecret; } + } + + public bool IsExtendedPadding + { + get { return m_extendedPadding; } + } + + public bool IsResumedSession + { + get { return m_resumedSession; } + } + + public bool IsSecureRenegotiation + { + get { return m_secureRenegotiation; } + } + + public bool IsTruncatedHmac + { + get { return m_truncatedHmac; } + } + + public int KeyExchangeAlgorithm + { + get { return m_keyExchangeAlgorithm; } + } + + public Certificate LocalCertificate + { + get { return m_localCertificate; } + } + + public byte[] LocalVerifyData + { + get { return m_localVerifyData; } + } + + public TlsSecret MasterSecret + { + get { return m_masterSecret; } + } + + public short MaxFragmentLength + { + get { return m_maxFragmentLength; } + } + + public ProtocolVersion NegotiatedVersion + { + get { return m_negotiatedVersion; } + } + + public Certificate PeerCertificate + { + get { return m_peerCertificate; } + } + + public byte[] PeerVerifyData + { + get { return m_peerVerifyData; } + } + + public int PrfAlgorithm + { + get { return m_prfAlgorithm; } + } + + public int PrfCryptoHashAlgorithm + { + get { return m_prfCryptoHashAlgorithm; } + } + + public int PrfHashLength + { + get { return m_prfHashLength; } + } + + public byte[] PskIdentity + { + get { return m_pskIdentity; } + } + + public byte[] ServerRandom + { + get { return m_serverRandom; } + } + + public IList ServerSigAlgs + { + get { return m_serverSigAlgs; } + } + + public IList ServerSigAlgsCert + { + get { return m_serverSigAlgsCert; } + } + + public int[] ServerSupportedGroups + { + get { return m_serverSupportedGroups; } + } + + public byte[] SessionHash + { + get { return m_sessionHash; } + } + + public byte[] SessionID + { + get { return m_sessionID; } + } + + public byte[] SrpIdentity + { + get { return m_srpIdentity; } + } + + public int StatusRequestVersion + { + get { return m_statusRequestVersion; } + } + + public byte[] TlsServerEndPoint + { + get { return m_tlsServerEndPoint; } + } + + public byte[] TlsUnique + { + get { return m_tlsUnique; } + } + + public TlsSecret TrafficSecretClient + { + get { return m_trafficSecretClient; } + } + + public TlsSecret TrafficSecretServer + { + get { return m_trafficSecretServer; } + } + + public int VerifyDataLength + { + get { return m_verifyDataLength; } + } + + public bool IsRenegotiating { get; set; } + public Certificate PreRenegotiatingServerCert { get; set; } + + private static TlsSecret ClearSecret(TlsSecret secret) + { + if (null != secret) + { + secret.Destroy(); + } + return null; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SecurityParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SecurityParameters.cs.meta new file mode 100644 index 000000000..322847195 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SecurityParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 25ee4b8784dbff44dbd526ad1a51e8d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerHello.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerHello.cs new file mode 100644 index 000000000..02ba7fdfd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerHello.cs @@ -0,0 +1,112 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class ServerHello + { + private static readonly byte[] HelloRetryRequestMagic = { 0xCF, 0x21, 0xAD, 0x74, 0xE5, 0x9A, 0x61, 0x11, 0xBE, + 0x1D, 0x8C, 0x02, 0x1E, 0x65, 0xB8, 0x91, 0xC2, 0xA2, 0x11, 0x16, 0x7A, 0xBB, 0x8C, 0x5E, 0x07, 0x9E, 0x09, + 0xE2, 0xC8, 0xA8, 0x33, 0x9C }; + + private readonly ProtocolVersion m_version; + private readonly byte[] m_random; + private readonly byte[] m_sessionID; + private readonly int m_cipherSuite; + private readonly IDictionary m_extensions; + + public ServerHello(byte[] sessionID, int cipherSuite, IDictionary extensions) + : this(ProtocolVersion.TLSv12, Arrays.Clone(HelloRetryRequestMagic), sessionID, cipherSuite, extensions) + { + } + + public ServerHello(ProtocolVersion version, byte[] random, byte[] sessionID, int cipherSuite, + IDictionary extensions) + { + this.m_version = version; + this.m_random = random; + this.m_sessionID = sessionID; + this.m_cipherSuite = cipherSuite; + this.m_extensions = extensions; + } + + public int CipherSuite + { + get { return m_cipherSuite; } + } + + public IDictionary Extensions + { + get { return m_extensions; } + } + + public byte[] Random + { + get { return m_random; } + } + + public byte[] SessionID + { + get { return m_sessionID; } + } + + public ProtocolVersion Version + { + get { return m_version; } + } + + public bool IsHelloRetryRequest() + { + return Arrays.AreEqual(HelloRetryRequestMagic, m_random); + } + + /// Encode this to a . + /// the of the current connection. + /// the to encode to. + /// + public void Encode(TlsContext context, Stream output) + { + TlsUtilities.WriteVersion(m_version, output); + + output.Write(m_random, 0, m_random.Length); + + TlsUtilities.WriteOpaque8(m_sessionID, output); + + TlsUtilities.WriteUint16(m_cipherSuite, output); + + TlsUtilities.WriteUint8(CompressionMethod.cls_null, output); + + TlsProtocol.WriteExtensions(output, m_extensions); + } + + /// Parse a from a . + /// the to parse from. + /// a object. + /// + public static ServerHello Parse(MemoryStream input) + { + ProtocolVersion version = TlsUtilities.ReadVersion(input); + + byte[] random = TlsUtilities.ReadFully(32, input); + + byte[] sessionID = TlsUtilities.ReadOpaque8(input, 0, 32); + + int cipherSuite = TlsUtilities.ReadUint16(input); + + short compressionMethod = TlsUtilities.ReadUint8(input); + if (CompressionMethod.cls_null != compressionMethod) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + var extensions = TlsProtocol.ReadExtensions(input); + + return new ServerHello(version, random, sessionID, cipherSuite, extensions); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerHello.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerHello.cs.meta new file mode 100644 index 000000000..605f7e3ef --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerHello.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d02a57f915340ff4493c1ad2b44d93ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerName.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerName.cs new file mode 100644 index 000000000..a246bbb52 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerName.cs @@ -0,0 +1,67 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 6066 3. Server Name Indication + /// + /// Current implementation uses this guidance: "For backward compatibility, all future data structures associated + /// with new NameTypes MUST begin with a 16-bit length field. TLS MAY treat provided server names as opaque data + /// and pass the names and types to the application.". RFC 6066 specifies ASCII encoding for host_name (possibly + /// using A-labels for IDNs), but note that the previous version (RFC 4366) specified UTF-8 encoding (see RFC 6066 + /// Appendix A). For maximum compatibility, it is recommended that client code tolerate receiving UTF-8 from the + /// peer, but only generate ASCII itself. + /// + public sealed class ServerName + { + private readonly short nameType; + private readonly byte[] nameData; + + public ServerName(short nameType, byte[] nameData) + { + if (!TlsUtilities.IsValidUint8(nameType)) + throw new ArgumentException("must be from 0 to 255", "nameType"); + if (null == nameData) + throw new ArgumentNullException("nameData"); + if (nameData.Length < 1 || !TlsUtilities.IsValidUint16(nameData.Length)) + throw new ArgumentException("must have length from 1 to 65535", "nameData"); + + this.nameType = nameType; + this.nameData = nameData; + } + + public byte[] NameData + { + get { return nameData; } + } + + public short NameType + { + get { return nameType; } + } + + /// Encode this to a . + /// the to encode to. + /// + public void Encode(Stream output) + { + TlsUtilities.WriteUint8(nameType, output); + TlsUtilities.WriteOpaque16(nameData, output); + } + + /// Parse a from a . + /// the to parse from. + /// a object. + /// + public static ServerName Parse(Stream input) + { + short name_type = TlsUtilities.ReadUint8(input); + byte[] nameData = TlsUtilities.ReadOpaque16(input, 1); + return new ServerName(name_type, nameData); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerName.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerName.cs.meta new file mode 100644 index 000000000..ff1ac63fd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerName.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a1cd0a2fe5a10ac4e82b74f061cb6626 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerNameList.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerNameList.cs new file mode 100644 index 000000000..405c7e5e7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerNameList.cs @@ -0,0 +1,91 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class ServerNameList + { + private readonly IList m_serverNameList; + + /// an of . + public ServerNameList(IList serverNameList) + { + if (null == serverNameList) + throw new ArgumentNullException("serverNameList"); + + this.m_serverNameList = serverNameList; + } + + /// an of . + public IList ServerNames + { + get { return m_serverNameList; } + } + + /// Encode this to a . + /// the to encode to . + /// + public void Encode(Stream output) + { + MemoryStream buf = new MemoryStream(); + + short[] nameTypesSeen = TlsUtilities.EmptyShorts; + foreach (ServerName entry in ServerNames) + { + nameTypesSeen = CheckNameType(nameTypesSeen, entry.NameType); + if (null == nameTypesSeen) + throw new TlsFatalAlert(AlertDescription.internal_error); + + entry.Encode(buf); + } + + int length = Convert.ToInt32(buf.Length); + TlsUtilities.CheckUint16(length); + TlsUtilities.WriteUint16(length, output); + buf.WriteTo(output); + } + + /// Parse a from a . + /// the to parse from. + /// a object. + /// + public static ServerNameList Parse(Stream input) + { + byte[] data = TlsUtilities.ReadOpaque16(input, 1); + + MemoryStream buf = new MemoryStream(data, false); + + short[] nameTypesSeen = TlsUtilities.EmptyShorts; + var server_name_list = new List(); + while (buf.Position < buf.Length) + { + ServerName entry = ServerName.Parse(buf); + + nameTypesSeen = CheckNameType(nameTypesSeen, entry.NameType); + if (null == nameTypesSeen) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + server_name_list.Add(entry); + } + + return new ServerNameList(server_name_list); + } + + private static short[] CheckNameType(short[] nameTypesSeen, short nameType) + { + // RFC 6066 3. The ServerNameList MUST NOT contain more than one name of the same NameType. + if (Arrays.Contains(nameTypesSeen, nameType)) + return null; + + return Arrays.Append(nameTypesSeen, nameType); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerNameList.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerNameList.cs.meta new file mode 100644 index 000000000..e212c00e1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerNameList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8e81bf88023b29c458548d2f1e054f0d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerOnlyTlsAuthentication.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerOnlyTlsAuthentication.cs new file mode 100644 index 000000000..3d3a06508 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerOnlyTlsAuthentication.cs @@ -0,0 +1,19 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class ServerOnlyTlsAuthentication + : TlsAuthentication + { + public abstract void NotifyServerCertificate(TlsServerCertificate serverCertificate); + + public TlsCredentials GetClientCredentials(CertificateRequest certificateRequest) + { + return null; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerOnlyTlsAuthentication.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerOnlyTlsAuthentication.cs.meta new file mode 100644 index 000000000..1995a7a17 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerOnlyTlsAuthentication.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 46d5437118bf1194395c46ca88eb9161 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerSrpParams.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerSrpParams.cs new file mode 100644 index 000000000..1466094b7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerSrpParams.cs @@ -0,0 +1,71 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class ServerSrpParams + { + private BigInteger m_N, m_g, m_B; + private byte[] m_s; + + public ServerSrpParams(BigInteger N, BigInteger g, byte[] s, BigInteger B) + { + this.m_N = N; + this.m_g = g; + this.m_s = Arrays.Clone(s); + this.m_B = B; + } + + public BigInteger B + { + get { return m_B; } + } + + public BigInteger G + { + get { return m_g; } + } + + public BigInteger N + { + get { return m_N; } + } + + public byte[] S + { + get { return m_s; } + } + + /// Encode this to a . + /// the to encode to. + /// + public void Encode(Stream output) + { + TlsSrpUtilities.WriteSrpParameter(m_N, output); + TlsSrpUtilities.WriteSrpParameter(m_g, output); + TlsUtilities.WriteOpaque8(m_s, output); + TlsSrpUtilities.WriteSrpParameter(m_B, output); + } + + /// Parse a from a . + /// the to parse from. + /// a object. + /// + public static ServerSrpParams Parse(Stream input) + { + BigInteger N = TlsSrpUtilities.ReadSrpParameter(input); + BigInteger g = TlsSrpUtilities.ReadSrpParameter(input); + byte[] s = TlsUtilities.ReadOpaque8(input, 1); + BigInteger B = TlsSrpUtilities.ReadSrpParameter(input); + + return new ServerSrpParams(N, g, s, B); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerSrpParams.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerSrpParams.cs.meta new file mode 100644 index 000000000..ef2284354 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/ServerSrpParams.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d56f4ddde1e881c4799a11b1566abc5b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SessionParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SessionParameters.cs new file mode 100644 index 000000000..79beac230 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SessionParameters.cs @@ -0,0 +1,199 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class SessionParameters + { + public sealed class Builder + { + private int m_cipherSuite = -1; + private Certificate m_localCertificate = null; + private TlsSecret m_masterSecret = null; + private ProtocolVersion m_negotiatedVersion; + private Certificate m_peerCertificate = null; + private byte[] m_pskIdentity = null; + private byte[] m_srpIdentity = null; + private byte[] m_encodedServerExtensions = null; + private bool m_extendedMasterSecret = false; + + public Builder() + { + } + + public SessionParameters Build() + { + Validate(m_cipherSuite >= 0, "cipherSuite"); + Validate(m_masterSecret != null, "masterSecret"); + return new SessionParameters(m_cipherSuite, m_localCertificate, m_masterSecret, m_negotiatedVersion, + m_peerCertificate, m_pskIdentity, m_srpIdentity, m_encodedServerExtensions, m_extendedMasterSecret); + } + + public Builder SetCipherSuite(int cipherSuite) + { + this.m_cipherSuite = cipherSuite; + return this; + } + + public Builder SetExtendedMasterSecret(bool extendedMasterSecret) + { + this.m_extendedMasterSecret = extendedMasterSecret; + return this; + } + + public Builder SetLocalCertificate(Certificate localCertificate) + { + this.m_localCertificate = localCertificate; + return this; + } + + public Builder SetMasterSecret(TlsSecret masterSecret) + { + this.m_masterSecret = masterSecret; + return this; + } + + public Builder SetNegotiatedVersion(ProtocolVersion negotiatedVersion) + { + this.m_negotiatedVersion = negotiatedVersion; + return this; + } + + public Builder SetPeerCertificate(Certificate peerCertificate) + { + this.m_peerCertificate = peerCertificate; + return this; + } + + public Builder SetPskIdentity(byte[] pskIdentity) + { + this.m_pskIdentity = pskIdentity; + return this; + } + + public Builder SetSrpIdentity(byte[] srpIdentity) + { + this.m_srpIdentity = srpIdentity; + return this; + } + + /// + public Builder SetServerExtensions(IDictionary serverExtensions) + { + if (serverExtensions == null || serverExtensions.Count < 1) + { + this.m_encodedServerExtensions = null; + } + else + { + MemoryStream buf = new MemoryStream(); + TlsProtocol.WriteExtensions(buf, serverExtensions); + this.m_encodedServerExtensions = buf.ToArray(); + } + return this; + } + + private void Validate(bool condition, string parameter) + { + if (!condition) + throw new InvalidOperationException("Required session parameter '" + parameter + "' not configured"); + } + } + + private readonly int m_cipherSuite; + private readonly Certificate m_localCertificate; + private readonly TlsSecret m_masterSecret; + private readonly ProtocolVersion m_negotiatedVersion; + private readonly Certificate m_peerCertificate; + private readonly byte[] m_pskIdentity; + private readonly byte[] m_srpIdentity; + private readonly byte[] m_encodedServerExtensions; + private readonly bool m_extendedMasterSecret; + + private SessionParameters(int cipherSuite, Certificate localCertificate, TlsSecret masterSecret, + ProtocolVersion negotiatedVersion, Certificate peerCertificate, byte[] pskIdentity, byte[] srpIdentity, + byte[] encodedServerExtensions, bool extendedMasterSecret) + { + this.m_cipherSuite = cipherSuite; + this.m_localCertificate = localCertificate; + this.m_masterSecret = masterSecret; + this.m_negotiatedVersion = negotiatedVersion; + this.m_peerCertificate = peerCertificate; + this.m_pskIdentity = Arrays.Clone(pskIdentity); + this.m_srpIdentity = Arrays.Clone(srpIdentity); + this.m_encodedServerExtensions = encodedServerExtensions; + this.m_extendedMasterSecret = extendedMasterSecret; + } + + public int CipherSuite + { + get { return m_cipherSuite; } + } + + public void Clear() + { + if (m_masterSecret != null) + { + m_masterSecret.Destroy(); + } + } + + public SessionParameters Copy() + { + return new SessionParameters(m_cipherSuite, m_localCertificate, m_masterSecret, m_negotiatedVersion, + m_peerCertificate, m_pskIdentity, m_srpIdentity, m_encodedServerExtensions, m_extendedMasterSecret); + } + + public bool IsExtendedMasterSecret + { + get { return m_extendedMasterSecret; } + } + + public Certificate LocalCertificate + { + get { return m_localCertificate; } + } + + public TlsSecret MasterSecret + { + get { return m_masterSecret; } + } + + public ProtocolVersion NegotiatedVersion + { + get { return m_negotiatedVersion; } + } + + public Certificate PeerCertificate + { + get { return m_peerCertificate; } + } + + public byte[] PskIdentity + { + get { return m_pskIdentity; } + } + + /// + public IDictionary ReadServerExtensions() + { + if (m_encodedServerExtensions == null) + return null; + + return TlsProtocol.ReadExtensions(new MemoryStream(m_encodedServerExtensions, false)); + } + + public byte[] SrpIdentity + { + get { return m_srpIdentity; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SessionParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SessionParameters.cs.meta new file mode 100644 index 000000000..432a22e09 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SessionParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4cc8f4c8457382841945f43f929f1d9a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SignatureAlgorithm.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SignatureAlgorithm.cs new file mode 100644 index 000000000..275f651b0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SignatureAlgorithm.cs @@ -0,0 +1,156 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /** + * RFC 5246 7.4.1.4.1 (in RFC 2246, there were no specific values assigned) + */ + public class SignatureAlgorithm + { + public const short anonymous = 0; + public const short rsa = 1; + public const short dsa = 2; + public const short ecdsa = 3; + + /* + * RFC 8422 + */ + public const short ed25519 = 7; + public const short ed448 = 8; + + /* + * RFC 8446 (implied from SignatureScheme values) + * RFC 8447 reserved these values without allocating the implied names + */ + public const short rsa_pss_rsae_sha256 = 4; + public const short rsa_pss_rsae_sha384 = 5; + public const short rsa_pss_rsae_sha512 = 6; + public const short rsa_pss_pss_sha256 = 9; + public const short rsa_pss_pss_sha384 = 10; + public const short rsa_pss_pss_sha512 = 11; + + /* + * RFC 8734 (implied from SignatureScheme values) + */ + public const short ecdsa_brainpoolP256r1tls13_sha256 = 26; + public const short ecdsa_brainpoolP384r1tls13_sha384 = 27; + public const short ecdsa_brainpoolP512r1tls13_sha512 = 28; + + /* + * draft-smyshlyaev-tls12-gost-suites-10 + */ + public const short gostr34102012_256 = 64; + public const short gostr34102012_512 = 65; + + public static short GetClientCertificateType(short signatureAlgorithm) + { + switch (signatureAlgorithm) + { + case SignatureAlgorithm.rsa: + case SignatureAlgorithm.rsa_pss_rsae_sha256: + case SignatureAlgorithm.rsa_pss_rsae_sha384: + case SignatureAlgorithm.rsa_pss_rsae_sha512: + case SignatureAlgorithm.rsa_pss_pss_sha256: + case SignatureAlgorithm.rsa_pss_pss_sha384: + case SignatureAlgorithm.rsa_pss_pss_sha512: + return ClientCertificateType.rsa_sign; + + case SignatureAlgorithm.dsa: + return ClientCertificateType.dss_sign; + + case SignatureAlgorithm.ecdsa: + case SignatureAlgorithm.ed25519: + case SignatureAlgorithm.ed448: + return ClientCertificateType.ecdsa_sign; + + case SignatureAlgorithm.gostr34102012_256: + return ClientCertificateType.gost_sign256; + + case SignatureAlgorithm.gostr34102012_512: + return ClientCertificateType.gost_sign512; + + default: + return -1; + } + } + + public static string GetName(short signatureAlgorithm) + { + switch (signatureAlgorithm) + { + case anonymous: + return "anonymous"; + case rsa: + return "rsa"; + case dsa: + return "dsa"; + case ecdsa: + return "ecdsa"; + case rsa_pss_rsae_sha256: + return "rsa_pss_rsae_sha256"; + case rsa_pss_rsae_sha384: + return "rsa_pss_rsae_sha384"; + case rsa_pss_rsae_sha512: + return "rsa_pss_rsae_sha512"; + case ed25519: + return "ed25519"; + case ed448: + return "ed448"; + case rsa_pss_pss_sha256: + return "rsa_pss_pss_sha256"; + case rsa_pss_pss_sha384: + return "rsa_pss_pss_sha384"; + case rsa_pss_pss_sha512: + return "rsa_pss_pss_sha512"; + case ecdsa_brainpoolP256r1tls13_sha256: + return "ecdsa_brainpoolP256r1tls13_sha256"; + case ecdsa_brainpoolP384r1tls13_sha384: + return "ecdsa_brainpoolP384r1tls13_sha384"; + case ecdsa_brainpoolP512r1tls13_sha512: + return "ecdsa_brainpoolP512r1tls13_sha512"; + case gostr34102012_256: + return "gostr34102012_256"; + case gostr34102012_512: + return "gostr34102012_512"; + default: + return "UNKNOWN"; + } + } + + public static string GetText(short signatureAlgorithm) + { + return GetName(signatureAlgorithm) + "(" + signatureAlgorithm + ")"; + } + + public static bool IsRecognized(short signatureAlgorithm) + { + switch (signatureAlgorithm) + { + case anonymous: + case rsa: + case dsa: + case ecdsa: + case rsa_pss_rsae_sha256: + case rsa_pss_rsae_sha384: + case rsa_pss_rsae_sha512: + case ed25519: + case ed448: + case rsa_pss_pss_sha256: + case rsa_pss_pss_sha384: + case rsa_pss_pss_sha512: + case ecdsa_brainpoolP256r1tls13_sha256: + case ecdsa_brainpoolP384r1tls13_sha384: + case ecdsa_brainpoolP512r1tls13_sha512: + case gostr34102012_256: + case gostr34102012_512: + return true; + default: + return false; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SignatureAlgorithm.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SignatureAlgorithm.cs.meta new file mode 100644 index 000000000..ac012db12 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SignatureAlgorithm.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 501cffbbda69d0542b3bb338d6efa590 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SignatureAndHashAlgorithm.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SignatureAndHashAlgorithm.cs new file mode 100644 index 000000000..0ef1abc7e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SignatureAndHashAlgorithm.cs @@ -0,0 +1,175 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 5246 7.4.1.4.1 + public sealed class SignatureAndHashAlgorithm + { + public static readonly SignatureAndHashAlgorithm ecdsa_brainpoolP256r1tls13_sha256 = + Create(SignatureScheme.ecdsa_brainpoolP256r1tls13_sha256); + public static readonly SignatureAndHashAlgorithm ecdsa_brainpoolP384r1tls13_sha384 = + Create(SignatureScheme.ecdsa_brainpoolP384r1tls13_sha384); + public static readonly SignatureAndHashAlgorithm ecdsa_brainpoolP512r1tls13_sha512 = + Create(SignatureScheme.ecdsa_brainpoolP512r1tls13_sha512); + public static readonly SignatureAndHashAlgorithm ed25519 = + Create(SignatureScheme.ed25519); + public static readonly SignatureAndHashAlgorithm ed448 = + Create(SignatureScheme.ed448); + public static readonly SignatureAndHashAlgorithm gostr34102012_256 = + Create(HashAlgorithm.Intrinsic, SignatureAlgorithm.gostr34102012_256); + public static readonly SignatureAndHashAlgorithm gostr34102012_512 = + Create(HashAlgorithm.Intrinsic, SignatureAlgorithm.gostr34102012_512); + public static readonly SignatureAndHashAlgorithm rsa_pss_rsae_sha256 = + Create(SignatureScheme.rsa_pss_rsae_sha256); + public static readonly SignatureAndHashAlgorithm rsa_pss_rsae_sha384 = + Create(SignatureScheme.rsa_pss_rsae_sha384); + public static readonly SignatureAndHashAlgorithm rsa_pss_rsae_sha512 = + Create(SignatureScheme.rsa_pss_rsae_sha512); + public static readonly SignatureAndHashAlgorithm rsa_pss_pss_sha256 = + Create(SignatureScheme.rsa_pss_pss_sha256); + public static readonly SignatureAndHashAlgorithm rsa_pss_pss_sha384 = + Create(SignatureScheme.rsa_pss_pss_sha384); + public static readonly SignatureAndHashAlgorithm rsa_pss_pss_sha512 = + Create(SignatureScheme.rsa_pss_pss_sha512); + + public static SignatureAndHashAlgorithm GetInstance(short hashAlgorithm, short signatureAlgorithm) + { + switch (hashAlgorithm) + { + case HashAlgorithm.Intrinsic: + return GetInstanceIntrinsic(signatureAlgorithm); + default: + return Create(hashAlgorithm, signatureAlgorithm); + } + } + + private static SignatureAndHashAlgorithm GetInstanceIntrinsic(short signatureAlgorithm) + { + switch (signatureAlgorithm) + { + case SignatureAlgorithm.ed25519: + return ed25519; + case SignatureAlgorithm.ed448: + return ed448; + case SignatureAlgorithm.gostr34102012_256: + return gostr34102012_256; + case SignatureAlgorithm.gostr34102012_512: + return gostr34102012_512; + case SignatureAlgorithm.rsa_pss_rsae_sha256: + return rsa_pss_rsae_sha256; + case SignatureAlgorithm.rsa_pss_rsae_sha384: + return rsa_pss_rsae_sha384; + case SignatureAlgorithm.rsa_pss_rsae_sha512: + return rsa_pss_rsae_sha512; + case SignatureAlgorithm.rsa_pss_pss_sha256: + return rsa_pss_pss_sha256; + case SignatureAlgorithm.rsa_pss_pss_sha384: + return rsa_pss_pss_sha384; + case SignatureAlgorithm.rsa_pss_pss_sha512: + return rsa_pss_pss_sha512; + case SignatureAlgorithm.ecdsa_brainpoolP256r1tls13_sha256: + return ecdsa_brainpoolP256r1tls13_sha256; + case SignatureAlgorithm.ecdsa_brainpoolP384r1tls13_sha384: + return ecdsa_brainpoolP384r1tls13_sha384; + case SignatureAlgorithm.ecdsa_brainpoolP512r1tls13_sha512: + return ecdsa_brainpoolP512r1tls13_sha512; + default: + return Create(HashAlgorithm.Intrinsic, signatureAlgorithm); + } + } + + private static SignatureAndHashAlgorithm Create(int signatureScheme) + { + short hashAlgorithm = SignatureScheme.GetHashAlgorithm(signatureScheme); + short signatureAlgorithm = SignatureScheme.GetSignatureAlgorithm(signatureScheme); + return Create(hashAlgorithm, signatureAlgorithm); + } + + private static SignatureAndHashAlgorithm Create(short hashAlgorithm, short signatureAlgorithm) + { + return new SignatureAndHashAlgorithm(hashAlgorithm, signatureAlgorithm); + } + + private readonly short m_hash; + private readonly short m_signature; + + /// + /// + public SignatureAndHashAlgorithm(short hash, short signature) + { + /* + * TODO]tls] The TlsUtils methods are inlined here to avoid circular static initialization + * b/w these classes. We should refactor parts of TlsUtils into separate classes. e.g. the + * TLS low-level encoding methods, and/or the SigAndHash registry and methods. + */ + + //if (!TlsUtilities.IsValidUint8(hash)) + if ((hash & 0xFF) != hash) + throw new ArgumentException("should be a uint8", "hash"); + + //if (!TlsUtilities.IsValidUint8(signature)) + if ((signature & 0xFF) != signature) + throw new ArgumentException("should be a uint8", "signature"); + + this.m_hash = hash; + this.m_signature = signature; + } + + /// + public short Hash + { + get { return m_hash; } + } + + /// + public short Signature + { + get { return m_signature; } + } + + /// Encode this to a . + /// the to encode to. + /// + public void Encode(Stream output) + { + TlsUtilities.WriteUint8(Hash, output); + TlsUtilities.WriteUint8(Signature, output); + } + + /// Parse a from a . + /// the to parse from. + /// a object. + /// + public static SignatureAndHashAlgorithm Parse(Stream input) + { + short hash = TlsUtilities.ReadUint8(input); + short signature = TlsUtilities.ReadUint8(input); + + return GetInstance(hash, signature); + } + + public override bool Equals(object obj) + { + if (!(obj is SignatureAndHashAlgorithm)) + return false; + + SignatureAndHashAlgorithm other = (SignatureAndHashAlgorithm)obj; + return other.Hash == Hash && other.Signature == Signature; + } + + public override int GetHashCode() + { + return ((int)Hash << 16) | (int)Signature; + } + + public override string ToString() + { + return "{" + HashAlgorithm.GetText(Hash) + "," + SignatureAlgorithm.GetText(Signature) + "}"; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SignatureAndHashAlgorithm.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SignatureAndHashAlgorithm.cs.meta new file mode 100644 index 000000000..e87a4bb02 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SignatureAndHashAlgorithm.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0710e3769b4b59499a6442b397952f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SignatureScheme.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SignatureScheme.cs new file mode 100644 index 000000000..4d3f9ba3e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SignatureScheme.cs @@ -0,0 +1,244 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class SignatureScheme + { + /* + * RFC 8446 + */ + + public const int rsa_pkcs1_sha1 = 0x0201; + public const int ecdsa_sha1 = 0x0203; + + public const int rsa_pkcs1_sha256 = 0x0401; + public const int rsa_pkcs1_sha384 = 0x0501; + public const int rsa_pkcs1_sha512 = 0x0601; + + public const int ecdsa_secp256r1_sha256 = 0x0403; + public const int ecdsa_secp384r1_sha384 = 0x0503; + public const int ecdsa_secp521r1_sha512 = 0x0603; + + public const int rsa_pss_rsae_sha256 = 0x0804; + public const int rsa_pss_rsae_sha384 = 0x0805; + public const int rsa_pss_rsae_sha512 = 0x0806; + + public const int ed25519 = 0x0807; + public const int ed448 = 0x0808; + + public const int rsa_pss_pss_sha256 = 0x0809; + public const int rsa_pss_pss_sha384 = 0x080A; + public const int rsa_pss_pss_sha512 = 0x080B; + + /* + * RFC 8734 + */ + + public const int ecdsa_brainpoolP256r1tls13_sha256 = 0x081A; + public const int ecdsa_brainpoolP384r1tls13_sha384 = 0x081B; + public const int ecdsa_brainpoolP512r1tls13_sha512 = 0x081C; + + /* + * RFC 8998 + */ + + public const int sm2sig_sm3 = 0x0708; + + /* + * RFC 8446 reserved for private use (0xFE00..0xFFFF) + */ + + public static int From(SignatureAndHashAlgorithm sigAndHashAlg) + { + if (null == sigAndHashAlg) + throw new ArgumentNullException(); + + return From(sigAndHashAlg.Hash, sigAndHashAlg.Signature); + } + + public static int From(short hashAlgorithm, short signatureAlgorithm) + { + return ((hashAlgorithm & 0xFF) << 8) | (signatureAlgorithm & 0xFF); + } + + public static int GetCryptoHashAlgorithm(int signatureScheme) + { + switch (signatureScheme) + { + case ed25519: + case ed448: + return -1; + case ecdsa_brainpoolP256r1tls13_sha256: + case rsa_pss_pss_sha256: + case rsa_pss_rsae_sha256: + return CryptoHashAlgorithm.sha256; + case ecdsa_brainpoolP384r1tls13_sha384: + case rsa_pss_pss_sha384: + case rsa_pss_rsae_sha384: + return CryptoHashAlgorithm.sha384; + case ecdsa_brainpoolP512r1tls13_sha512: + case rsa_pss_pss_sha512: + case rsa_pss_rsae_sha512: + return CryptoHashAlgorithm.sha512; + case sm2sig_sm3: + return CryptoHashAlgorithm.sm3; + default: + { + short hashAlgorithm = GetHashAlgorithm(signatureScheme); + if (HashAlgorithm.Intrinsic == hashAlgorithm || !HashAlgorithm.IsRecognized(hashAlgorithm)) + return -1; + + return TlsCryptoUtilities.GetHash(hashAlgorithm); + } + } + } + + public static int GetCryptoHashAlgorithm(SignatureAndHashAlgorithm signatureAndHashAlgorithm) + { + return GetCryptoHashAlgorithm(From(signatureAndHashAlgorithm)); + } + + public static string GetName(int signatureScheme) + { + switch (signatureScheme) + { + case rsa_pkcs1_sha1: + return "rsa_pkcs1_sha1"; + case ecdsa_sha1: + return "ecdsa_sha1"; + case rsa_pkcs1_sha256: + return "rsa_pkcs1_sha256"; + case rsa_pkcs1_sha384: + return "rsa_pkcs1_sha384"; + case rsa_pkcs1_sha512: + return "rsa_pkcs1_sha512"; + case ecdsa_secp256r1_sha256: + return "ecdsa_secp256r1_sha256"; + case ecdsa_secp384r1_sha384: + return "ecdsa_secp384r1_sha384"; + case ecdsa_secp521r1_sha512: + return "ecdsa_secp521r1_sha512"; + case rsa_pss_rsae_sha256: + return "rsa_pss_rsae_sha256"; + case rsa_pss_rsae_sha384: + return "rsa_pss_rsae_sha384"; + case rsa_pss_rsae_sha512: + return "rsa_pss_rsae_sha512"; + case ed25519: + return "ed25519"; + case ed448: + return "ed448"; + case rsa_pss_pss_sha256: + return "rsa_pss_pss_sha256"; + case rsa_pss_pss_sha384: + return "rsa_pss_pss_sha384"; + case rsa_pss_pss_sha512: + return "rsa_pss_pss_sha512"; + case ecdsa_brainpoolP256r1tls13_sha256: + return "ecdsa_brainpoolP256r1tls13_sha256"; + case ecdsa_brainpoolP384r1tls13_sha384: + return "ecdsa_brainpoolP384r1tls13_sha384"; + case ecdsa_brainpoolP512r1tls13_sha512: + return "ecdsa_brainpoolP512r1tls13_sha512"; + case sm2sig_sm3: + return "sm2sig_sm3"; + default: + return "UNKNOWN"; + } + } + + /** + * For TLS 1.3+ usage, some signature schemes are constrained to use a particular + * ({@link NamedGroup}. Not relevant for TLS 1.2 and below. + */ + public static int GetNamedGroup(int signatureScheme) + { + switch (signatureScheme) + { + case ecdsa_brainpoolP256r1tls13_sha256: + return NamedGroup.brainpoolP256r1tls13; + case ecdsa_brainpoolP384r1tls13_sha384: + return NamedGroup.brainpoolP384r1tls13; + case ecdsa_brainpoolP512r1tls13_sha512: + return NamedGroup.brainpoolP512r1tls13; + case ecdsa_secp256r1_sha256: + return NamedGroup.secp256r1; + case ecdsa_secp384r1_sha384: + return NamedGroup.secp384r1; + case ecdsa_secp521r1_sha512: + return NamedGroup.secp521r1; + case sm2sig_sm3: + return NamedGroup.curveSM2; + default: + return -1; + } + } + + public static short GetHashAlgorithm(int signatureScheme) + { + // TODO[RFC 8998] sm2sig_sm3 + return (short)((signatureScheme >> 8) & 0xFF); + } + + public static short GetSignatureAlgorithm(int signatureScheme) + { + // TODO[RFC 8998] sm2sig_sm3 + return (short)(signatureScheme & 0xFF); + } + + public static SignatureAndHashAlgorithm GetSignatureAndHashAlgorithm(int signatureScheme) + { + return SignatureAndHashAlgorithm.GetInstance( + GetHashAlgorithm(signatureScheme), + GetSignatureAlgorithm(signatureScheme)); + } + + public static string GetText(int signatureScheme) + { + string hex = Convert.ToString(signatureScheme, 16).ToUpperInvariant(); + return GetName(signatureScheme) + "(0x" + hex + ")"; + } + + public static bool IsPrivate(int signatureScheme) + { + return (signatureScheme >> 9) == 0xFE; + } + + public static bool IsECDsa(int signatureScheme) + { + switch (signatureScheme) + { + case ecdsa_brainpoolP256r1tls13_sha256: + case ecdsa_brainpoolP384r1tls13_sha384: + case ecdsa_brainpoolP512r1tls13_sha512: + return true; + default: + return SignatureAlgorithm.ecdsa == GetSignatureAlgorithm(signatureScheme); + } + } + + public static bool IsRsaPss(int signatureScheme) + { + switch (signatureScheme) + { + case rsa_pss_rsae_sha256: + case rsa_pss_rsae_sha384: + case rsa_pss_rsae_sha512: + case rsa_pss_pss_sha256: + case rsa_pss_pss_sha384: + case rsa_pss_pss_sha512: + return true; + default: + return false; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SignatureScheme.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SignatureScheme.cs.meta new file mode 100644 index 000000000..ea3dafb5f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SignatureScheme.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac5af3bf7611a4c4fa0686756c08be3b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SimulatedTlsSrpIdentityManager.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SimulatedTlsSrpIdentityManager.cs new file mode 100644 index 000000000..cbd77f857 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SimulatedTlsSrpIdentityManager.cs @@ -0,0 +1,73 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// An implementation of that simulates the existence of "unknown" + /// identities to obscure the fact that there is no verifier for them. + public class SimulatedTlsSrpIdentityManager + : TlsSrpIdentityManager + { + private static readonly byte[] PrefixPassword = Strings.ToByteArray("password"); + private static readonly byte[] PrefixSalt = Strings.ToByteArray("salt"); + + /// Create a that implements the algorithm from RFC 5054 + /// 2.5.1.3. + /// + /// the defining the group that SRP is operating in. + /// the secret "seed key" referred to in RFC 5054 2.5.1.3. + /// an instance of . + /// + public static SimulatedTlsSrpIdentityManager GetRfc5054Default(TlsCrypto crypto, Srp6Group group, byte[] seedKey) + { + TlsMac mac = crypto.CreateHmac(MacAlgorithm.hmac_sha1); + + mac.SetKey(seedKey, 0, seedKey.Length); + + TlsSrpConfig srpConfig = new TlsSrpConfig(); + + srpConfig.SetExplicitNG(new BigInteger[]{ group.N, group.G }); + + return new SimulatedTlsSrpIdentityManager(group, crypto.CreateSrp6VerifierGenerator(srpConfig), mac); + } + + protected readonly Srp6Group m_group; + protected readonly TlsSrp6VerifierGenerator m_verifierGenerator; + protected readonly TlsMac m_mac; + + public SimulatedTlsSrpIdentityManager(Srp6Group group, TlsSrp6VerifierGenerator verifierGenerator, TlsMac mac) + { + this.m_group = group; + this.m_verifierGenerator = verifierGenerator; + this.m_mac = mac; + } + + public virtual TlsSrpLoginParameters GetLoginParameters(byte[] identity) + { + m_mac.Update(PrefixSalt, 0, PrefixSalt.Length); + m_mac.Update(identity, 0, identity.Length); + + byte[] salt = m_mac.CalculateMac(); + + m_mac.Update(PrefixPassword, 0, PrefixPassword.Length); + m_mac.Update(identity, 0, identity.Length); + + byte[] password = m_mac.CalculateMac(); + + BigInteger verifier = m_verifierGenerator.GenerateVerifier(salt, identity, password); + + TlsSrpConfig srpConfig = new TlsSrpConfig(); + srpConfig.SetExplicitNG(new BigInteger[]{ m_group.N, m_group.G }); + + return new TlsSrpLoginParameters(identity, srpConfig, verifier, salt); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SimulatedTlsSrpIdentityManager.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SimulatedTlsSrpIdentityManager.cs.meta new file mode 100644 index 000000000..08c79d83e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SimulatedTlsSrpIdentityManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6a8727a30adfbd54c809dc4750801a56 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SrpTlsClient.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SrpTlsClient.cs new file mode 100644 index 000000000..d484c672f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SrpTlsClient.cs @@ -0,0 +1,87 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public class SrpTlsClient + : AbstractTlsClient + { + private static readonly int[] DefaultCipherSuites = new int[] + { + CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA + }; + + protected readonly TlsSrpIdentity m_srpIdentity; + + public SrpTlsClient(TlsCrypto crypto, byte[] identity, byte[] password) + : this(crypto, new BasicTlsSrpIdentity(identity, password)) + { + } + + public SrpTlsClient(TlsCrypto crypto, TlsSrpIdentity srpIdentity) + : base(crypto) + { + this.m_srpIdentity = srpIdentity; + } + + protected override int[] GetSupportedCipherSuites() + { + return TlsUtilities.GetSupportedCipherSuites(Crypto, DefaultCipherSuites); + } + + protected override ProtocolVersion[] GetSupportedVersions() + { + return ProtocolVersion.TLSv12.Only(); + } + + protected virtual bool RequireSrpServerExtension + { + // No explicit guidance in RFC 5054; by default an (empty) extension from server is optional + get { return false; } + } + + /// + public override IDictionary GetClientExtensions() + { + var clientExtensions = TlsExtensionsUtilities.EnsureExtensionsInitialised( + base.GetClientExtensions()); + TlsSrpUtilities.AddSrpExtension(clientExtensions, m_srpIdentity.GetSrpIdentity()); + return clientExtensions; + } + + /// + public override void ProcessServerExtensions(IDictionary serverExtensions) + { + if (!TlsUtilities.HasExpectedEmptyExtensionData(serverExtensions, ExtensionType.srp, + AlertDescription.illegal_parameter)) + { + if (RequireSrpServerExtension) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + base.ProcessServerExtensions(serverExtensions); + } + + public override TlsSrpIdentity GetSrpIdentity() + { + return m_srpIdentity; + } + + /// + public override TlsAuthentication GetAuthentication() + { + /* + * Note: This method is not called unless a server certificate is sent, which may be the + * case e.g. for SRP_DSS or SRP_RSA key exchange. + */ + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SrpTlsClient.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SrpTlsClient.cs.meta new file mode 100644 index 000000000..69da11fe2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SrpTlsClient.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c31d18c0a0406d48ac3a74169513cdf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SrpTlsServer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SrpTlsServer.cs new file mode 100644 index 000000000..f77f70c3b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SrpTlsServer.cs @@ -0,0 +1,110 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public class SrpTlsServer + : AbstractTlsServer + { + private static readonly int[] DefaultCipherSuites = new int[] + { + CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_SRP_SHA_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_SRP_SHA_WITH_AES_128_CBC_SHA + }; + + protected readonly TlsSrpIdentityManager m_srpIdentityManager; + + protected byte[] m_srpIdentity = null; + protected TlsSrpLoginParameters m_srpLoginParameters = null; + + public SrpTlsServer(TlsCrypto crypto, TlsSrpIdentityManager srpIdentityManager) + : base(crypto) + { + this.m_srpIdentityManager = srpIdentityManager; + } + + /// + protected virtual TlsCredentialedSigner GetDsaSignerCredentials() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + /// + protected virtual TlsCredentialedSigner GetRsaSignerCredentials() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + protected override ProtocolVersion[] GetSupportedVersions() + { + return ProtocolVersion.TLSv12.Only(); + } + + protected override int[] GetSupportedCipherSuites() + { + return TlsUtilities.GetSupportedCipherSuites(Crypto, DefaultCipherSuites); + } + + public override void ProcessClientExtensions(IDictionary clientExtensions) + { + base.ProcessClientExtensions(clientExtensions); + + this.m_srpIdentity = TlsSrpUtilities.GetSrpExtension(clientExtensions); + } + + public override int GetSelectedCipherSuite() + { + int cipherSuite = base.GetSelectedCipherSuite(); + + if (TlsSrpUtilities.IsSrpCipherSuite(cipherSuite)) + { + if (m_srpIdentity != null) + { + this.m_srpLoginParameters = m_srpIdentityManager.GetLoginParameters(m_srpIdentity); + } + + if (m_srpLoginParameters == null) + throw new TlsFatalAlert(AlertDescription.unknown_psk_identity); + } + + return cipherSuite; + } + + public override TlsCredentials GetCredentials() + { + int keyExchangeAlgorithm = m_context.SecurityParameters.KeyExchangeAlgorithm; + + switch (keyExchangeAlgorithm) + { + case KeyExchangeAlgorithm.SRP: + return null; + + case KeyExchangeAlgorithm.SRP_DSS: + return GetDsaSignerCredentials(); + + case KeyExchangeAlgorithm.SRP_RSA: + return GetRsaSignerCredentials(); + + default: + // Note: internal error here; selected a key exchange we don't implement! + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + public override TlsSrpLoginParameters GetSrpLoginParameters() + { + return m_srpLoginParameters; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SrpTlsServer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SrpTlsServer.cs.meta new file mode 100644 index 000000000..5abda6f54 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SrpTlsServer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0a9b561660b892445882ca777c976cbe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SrtpProtectionProfile.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SrtpProtectionProfile.cs new file mode 100644 index 000000000..9fe9c8673 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SrtpProtectionProfile.cs @@ -0,0 +1,25 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class SrtpProtectionProfile + { + /* + * RFC 5764 4.1.2. + */ + public const int SRTP_AES128_CM_HMAC_SHA1_80 = 0x0001; + public const int SRTP_AES128_CM_HMAC_SHA1_32 = 0x0002; + public const int SRTP_NULL_HMAC_SHA1_80 = 0x0005; + public const int SRTP_NULL_HMAC_SHA1_32 = 0x0006; + + /* + * RFC 7714 14.2. + */ + public const int SRTP_AEAD_AES_128_GCM = 0x0007; + public const int SRTP_AEAD_AES_256_GCM = 0x0008; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SrtpProtectionProfile.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SrtpProtectionProfile.cs.meta new file mode 100644 index 000000000..a74038649 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SrtpProtectionProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e28ff8c0de140b45813b36c61f3d284 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/Ssl3Utilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/Ssl3Utilities.cs new file mode 100644 index 000000000..77d9e831e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/Ssl3Utilities.cs @@ -0,0 +1,73 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + internal abstract class Ssl3Utilities + { + private static readonly byte[] SSL_CLIENT = {0x43, 0x4C, 0x4E, 0x54}; + private static readonly byte[] SSL_SERVER = {0x53, 0x52, 0x56, 0x52}; + + private const byte IPAD_BYTE = (byte)0x36; + private const byte OPAD_BYTE = (byte)0x5C; + + private static readonly byte[] IPAD = GenPad(IPAD_BYTE, 48); + private static readonly byte[] OPAD = GenPad(OPAD_BYTE, 48); + + internal static byte[] CalculateVerifyData(TlsHandshakeHash handshakeHash, bool isServer) + { + TlsHash prf = handshakeHash.ForkPrfHash(); + byte[] sslSender = isServer ? SSL_SERVER : SSL_CLIENT; + prf.Update(sslSender, 0, sslSender.Length); + return prf.CalculateHash(); + } + + internal static void CompleteCombinedHash(TlsContext context, TlsHash md5, TlsHash sha1) + { + TlsSecret masterSecret = context.SecurityParameters.MasterSecret; + byte[] master_secret = context.Crypto.AdoptSecret(masterSecret).Extract(); + + CompleteHash(master_secret, md5, 48); + CompleteHash(master_secret, sha1, 40); + } + + private static void CompleteHash(byte[] master_secret, TlsHash hash, int padLength) + { + hash.Update(master_secret, 0, master_secret.Length); + hash.Update(IPAD, 0, padLength); + + byte[] tmp = hash.CalculateHash(); + + hash.Update(master_secret, 0, master_secret.Length); + hash.Update(OPAD, 0, padLength); + hash.Update(tmp, 0, tmp.Length); + } + + private static byte[] GenPad(byte b, int count) + { + byte[] padding = new byte[count]; + Arrays.Fill(padding, b); + return padding; + } + + /// + internal static byte[] ReadEncryptedPms(Stream input) + { + return Streams.ReadAll(input); + } + + /// + internal static void WriteEncryptedPms(byte[] encryptedPms, Stream output) + { + output.Write(encryptedPms, 0, encryptedPms.Length); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/Ssl3Utilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/Ssl3Utilities.cs.meta new file mode 100644 index 000000000..8125f65c6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/Ssl3Utilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 521e69e3668f43740b3309fab0e10e04 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SupplementalDataEntry.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SupplementalDataEntry.cs new file mode 100644 index 000000000..bba2b583b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SupplementalDataEntry.cs @@ -0,0 +1,30 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class SupplementalDataEntry + { + private readonly int m_dataType; + private readonly byte[] m_data; + + public SupplementalDataEntry(int dataType, byte[] data) + { + this.m_dataType = dataType; + this.m_data = data; + } + + public int DataType + { + get { return m_dataType; } + } + + public byte[] Data + { + get { return m_data; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SupplementalDataEntry.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SupplementalDataEntry.cs.meta new file mode 100644 index 000000000..aee46e862 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SupplementalDataEntry.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a11197ff9b1a034e82efba853263c33 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SupplementalDataType.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SupplementalDataType.cs new file mode 100644 index 000000000..b88dfa97c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SupplementalDataType.cs @@ -0,0 +1,17 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 4680 + public abstract class SupplementalDataType + { + /* + * RFC 4681 + */ + public const int user_mapping_data = 0; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SupplementalDataType.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SupplementalDataType.cs.meta new file mode 100644 index 000000000..af60adb1a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/SupplementalDataType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b6144fcd08aea324ca89a87c69190d91 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/Timeout.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/Timeout.cs new file mode 100644 index 000000000..299a3b3b3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/Timeout.cs @@ -0,0 +1,123 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Date; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + internal class Timeout + { + private long durationMillis; + private long startMillis; + + internal Timeout(long durationMillis) + : this(durationMillis, DateTimeUtilities.CurrentUnixMs()) + { + } + + internal Timeout(long durationMillis, long currentTimeMillis) + { + this.durationMillis = System.Math.Max(0, durationMillis); + this.startMillis = System.Math.Max(0, currentTimeMillis); + } + + //internal long RemainingMillis() + //{ + // return RemainingMillis(DateTimeUtilities.CurrentUnixMs()); + //} + + internal long RemainingMillis(long currentTimeMillis) + { + lock (this) + { + // If clock jumped backwards, reset start time + if (startMillis > currentTimeMillis) + { + startMillis = currentTimeMillis; + return durationMillis; + } + + long elapsed = currentTimeMillis - startMillis; + long remaining = durationMillis - elapsed; + + // Once timeout reached, lock it in + if (remaining <= 0) + return durationMillis = 0L; + + return remaining; + } + } + + //internal static int ConstrainWaitMillis(int waitMillis, Timeout timeout) + //{ + // return constrainWaitMillis(waitMillis, timeout, DateTimeUtilities.CurrentUnixMs()); + //} + + internal static int ConstrainWaitMillis(int waitMillis, Timeout timeout, long currentTimeMillis) + { + if (waitMillis < 0) + return -1; + + int timeoutMillis = GetWaitMillis(timeout, currentTimeMillis); + if (timeoutMillis < 0) + return -1; + + if (waitMillis == 0) + return timeoutMillis; + + if (timeoutMillis == 0) + return waitMillis; + + return System.Math.Min(waitMillis, timeoutMillis); + } + + internal static Timeout ForWaitMillis(int waitMillis) + { + return ForWaitMillis(waitMillis, DateTimeUtilities.CurrentUnixMs()); + } + + internal static Timeout ForWaitMillis(int waitMillis, long currentTimeMillis) + { + if (waitMillis < 0) + throw new ArgumentException("cannot be negative", "waitMillis"); + + if (waitMillis > 0) + return new Timeout(waitMillis, currentTimeMillis); + + return null; + } + + //internal static int GetWaitMillis(Timeout timeout) + //{ + // return GetWaitMillis(timeout, DateTimeUtilities.CurrentUnixMs()); + //} + + internal static int GetWaitMillis(Timeout timeout, long currentTimeMillis) + { + if (null == timeout) + return 0; + + long remainingMillis = timeout.RemainingMillis(currentTimeMillis); + if (remainingMillis < 1L) + return -1; + + if (remainingMillis > int.MaxValue) + return int.MaxValue; + + return (int)remainingMillis; + } + + internal static bool HasExpired(Timeout timeout) + { + return HasExpired(timeout, DateTimeUtilities.CurrentUnixMs()); + } + + internal static bool HasExpired(Timeout timeout, long currentTimeMillis) + { + return null != timeout && timeout.RemainingMillis(currentTimeMillis) < 1L; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/Timeout.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/Timeout.cs.meta new file mode 100644 index 000000000..081dc9e23 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/Timeout.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 23bea867e90b6c24f8205a4e4601c29b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsAuthentication.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsAuthentication.cs new file mode 100644 index 000000000..4a771bfd7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsAuthentication.cs @@ -0,0 +1,33 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Base interface to provide TLS authentication credentials. + public interface TlsAuthentication + { + /// Called by the protocol handler to report the server certificate. + /// + /// Note: this method is responsible for certificate verification and validation. + /// + /// the server certificate received. + /// + void NotifyServerCertificate(TlsServerCertificate serverCertificate); + + /// Return client credentials in response to server's certificate request. + /// + /// The returned value may be null, or else it MUST implement exactly one of + /// , , or + /// , depending on the key exchange that was negotiated and the details of + /// the . + /// + /// details of the certificate request. + /// a object or null for no client authentication. + /// + TlsCredentials GetClientCredentials(CertificateRequest certificateRequest); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsAuthentication.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsAuthentication.cs.meta new file mode 100644 index 000000000..f8e99925a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsAuthentication.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04a55ecf3bc1eac4c82d71e4c481a956 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClient.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClient.cs new file mode 100644 index 000000000..dd5992444 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClient.cs @@ -0,0 +1,115 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public interface TlsClient + : TlsPeer + { + void Init(TlsClientContext context); + + /// Return the session this client wants to resume, if any. + /// + /// Note that the peer's certificate chain for the session (if any) may need to be periodically revalidated. + /// + /// A representing the resumable session to be used for this connection, or + /// null to use a new session. + /// + TlsSession GetSessionToResume(); + + /// Return the external PSKs to offer in the ClientHello. + /// This will only be called when TLS 1.3 or higher is amongst the offered protocol versions. + /// an of instances, or null if none should be + /// offered. + IList GetExternalPsks(); + + bool IsFallback(); + + /// (Int32 -> byte[]) + /// + IDictionary GetClientExtensions(); + + /// If this client is offering TLS 1.3 or higher, this method may be called to determine for which + /// groups a key share should be included in the initial ClientHello. + /// + /// Groups that were not included in the supported_groups extension (by will + /// be ignored. The protocol will then add a suitable key_share extension to the ClientHello extensions. + /// + /// an of named group values, possibly empty or + /// null. + /// + IList GetEarlyKeyShareGroups(); + + /// + void NotifyServerVersion(ProtocolVersion selectedVersion); + + /// Notifies the client of the session that will be offered in ClientHello for resumption, if any. + /// + /// + /// This will be either the session returned from {@link #getSessionToResume()} or null if that session was + /// unusable. NOTE: the actual negotiated session_id is notified by . + /// + /// The representing the resumable session to be offered for + /// this connection, or null if there is none. + /// + void NotifySessionToResume(TlsSession session); + + /// Notifies the client of the session_id sent in the ServerHello. + /// + /// + void NotifySessionID(byte[] sessionID); + + void NotifySelectedCipherSuite(int selectedCipherSuite); + + /// + void NotifySelectedPsk(TlsPsk selectedPsk); + + /// The protocol implementation validates that any server extensions received correspond to client + /// extensions sent. + /// + /// If further processing of the server extensions is needed, it can be done in this callback. NOTE: This is + /// not called for session resumption handshakes. + /// + /// (Int32 -> byte[]) + /// + void ProcessServerExtensions(IDictionary serverExtensions); + + /// (SupplementalDataEntry) + /// + void ProcessServerSupplementalData(IList serverSupplementalData); + + /// + TlsPskIdentity GetPskIdentity(); + + /// + TlsSrpIdentity GetSrpIdentity(); + + /// + TlsDHGroupVerifier GetDHGroupVerifier(); + + /// + TlsSrpConfigVerifier GetSrpConfigVerifier(); + + /// + TlsAuthentication GetAuthentication(); + + /// (SupplementalDataEntry) + /// + IList GetClientSupplementalData(); + + /// RFC 5077 3.3. NewSessionTicket Handshake Message + /// + /// This method will be called (only) when a NewSessionTicket handshake message is received. The ticket is + /// opaque to the client and clients MUST NOT examine the ticket under the assumption that it complies with e.g. + /// RFC 5077 4. "Recommended Ticket Construction". + /// + /// The ticket. + /// + void NotifyNewSessionTicket(NewSessionTicket newSessionTicket); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClient.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClient.cs.meta new file mode 100644 index 000000000..004c630de --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClient.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2950dd1f9bdf82e46be716bb732531a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClientContext.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClientContext.cs new file mode 100644 index 000000000..a8816c335 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClientContext.cs @@ -0,0 +1,14 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Marker interface to distinguish a TLS client context. + public interface TlsClientContext + : TlsContext + { + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClientContext.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClientContext.cs.meta new file mode 100644 index 000000000..801030d03 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClientContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e397e566e41b3bf4ea46056fbd357cc8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClientContextImpl.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClientContextImpl.cs new file mode 100644 index 000000000..58990f1be --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClientContextImpl.cs @@ -0,0 +1,24 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + internal class TlsClientContextImpl + : AbstractTlsContext, TlsClientContext + { + internal TlsClientContextImpl(TlsCrypto crypto) + : base(crypto, ConnectionEnd.client) + { + } + + public override bool IsServer + { + get { return false; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClientContextImpl.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClientContextImpl.cs.meta new file mode 100644 index 000000000..5be1c2dbe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClientContextImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3591a97ce11a32a46bb7064009aff194 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClientProtocol.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClientProtocol.cs new file mode 100644 index 000000000..cb48fb99f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClientProtocol.cs @@ -0,0 +1,1909 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public class TlsClientProtocol + : TlsProtocol + { + protected TlsClient m_tlsClient = null; + internal TlsClientContextImpl m_tlsClientContext = null; + + protected IDictionary m_clientAgreements = null; + internal OfferedPsks.BindersConfig m_clientBinders = null; + protected ClientHello m_clientHello = null; + protected TlsKeyExchange m_keyExchange = null; + protected TlsAuthentication m_authentication = null; + + protected CertificateStatus m_certificateStatus = null; + protected CertificateRequest m_certificateRequest = null; + + /// Constructor for non-blocking mode. + /// + /// When data is received, use to provide the received ciphertext, + /// then use to read the corresponding cleartext.

    + /// Similarly, when data needs to be sent, use + /// to provide the cleartext, then use to get the + /// corresponding ciphertext. + ///
    + public TlsClientProtocol() + : base() + { + } + + /// Constructor for blocking mode. + /// The of data to/from the server. + public TlsClientProtocol(Stream stream) + : base(stream) + { + } + + /// Constructor for blocking mode. + /// The of data from the server. + /// The of data to the server. + public TlsClientProtocol(Stream input, Stream output) + : base(input, output) + { + } + + /// Initiates a TLS handshake in the role of client. + /// + /// In blocking mode, this will not return until the handshake is complete. In non-blocking mode, use + /// to receive a callback when the handshake is complete. + /// + /// The to use for the handshake. + /// If in blocking mode and handshake was not successful. + public virtual void Connect(TlsClient tlsClient) + { + if (tlsClient == null) + throw new ArgumentNullException("tlsClient"); + if (m_tlsClient != null) + throw new InvalidOperationException("'Connect' can only be called once"); + + this.m_tlsClient = tlsClient; + this.m_tlsClientContext = new TlsClientContextImpl(tlsClient.Crypto); + + tlsClient.Init(m_tlsClientContext); + tlsClient.NotifyCloseHandle(this); + + BeginHandshake(false); + + if (m_blocking) + { + BlockForHandshake(); + } + } + + protected override void BeginHandshake(bool renegotiation) + { + base.BeginHandshake(renegotiation); + + SendClientHello(); + this.m_connectionState = CS_CLIENT_HELLO; + } + + protected override void CleanupHandshake() + { + base.CleanupHandshake(); + + this.m_clientAgreements = null; + this.m_clientBinders = null; + this.m_clientHello = null; + this.m_keyExchange = null; + this.m_authentication = null; + + this.m_certificateStatus = null; + this.m_certificateRequest = null; + } + + protected override TlsContext Context + { + get { return m_tlsClientContext; } + } + + internal override AbstractTlsContext ContextAdmin + { + get { return m_tlsClientContext; } + } + + protected override TlsPeer Peer + { + get { return m_tlsClient; } + } + + /// + protected virtual void Handle13HandshakeMessage(short type, HandshakeMessageInput buf) + { + if (!IsTlsV13ConnectionState()) + throw new TlsFatalAlert(AlertDescription.internal_error); + + switch (type) + { + case HandshakeType.certificate: + { + switch (m_connectionState) + { + case CS_SERVER_ENCRYPTED_EXTENSIONS: + case CS_SERVER_CERTIFICATE_REQUEST: + { + if (m_connectionState != CS_SERVER_CERTIFICATE_REQUEST) + { + Skip13CertificateRequest(); + } + + Receive13ServerCertificate(buf); + this.m_connectionState = CS_SERVER_CERTIFICATE; + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + case HandshakeType.certificate_request: + { + switch (m_connectionState) + { + case CS_END: + { + // TODO[tls13] Permit post-handshake authentication if we sent post_handshake_auth extension + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + case CS_SERVER_ENCRYPTED_EXTENSIONS: + { + Receive13CertificateRequest(buf, false); + this.m_connectionState = CS_SERVER_CERTIFICATE_REQUEST; + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + case HandshakeType.certificate_verify: + { + switch (m_connectionState) + { + case CS_SERVER_CERTIFICATE: + { + Receive13ServerCertificateVerify(buf); + buf.UpdateHash(m_handshakeHash); + this.m_connectionState = CS_SERVER_CERTIFICATE_VERIFY; + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + case HandshakeType.encrypted_extensions: + { + switch (m_connectionState) + { + case CS_SERVER_HELLO: + { + Receive13EncryptedExtensions(buf); + this.m_connectionState = CS_SERVER_ENCRYPTED_EXTENSIONS; + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + case HandshakeType.finished: + { + switch (m_connectionState) + { + case CS_SERVER_ENCRYPTED_EXTENSIONS: + case CS_SERVER_CERTIFICATE_REQUEST: + case CS_SERVER_CERTIFICATE_VERIFY: + { + if (m_connectionState == CS_SERVER_ENCRYPTED_EXTENSIONS) + { + Skip13CertificateRequest(); + } + if (m_connectionState != CS_SERVER_CERTIFICATE_VERIFY) + { + Skip13ServerCertificate(); + } + + Receive13ServerFinished(buf); + buf.UpdateHash(m_handshakeHash); + this.m_connectionState = CS_SERVER_FINISHED; + + byte[] serverFinishedTranscriptHash = TlsUtilities.GetCurrentPrfHash(m_handshakeHash); + + // See RFC 8446 D.4. + m_recordStream.SetIgnoreChangeCipherSpec(false); + + /* + * TODO[tls13] After receiving the server's Finished message, if the server has accepted early + * data, an EndOfEarlyData message will be sent to indicate the key change. This message will + * be encrypted with the 0-RTT traffic keys. + */ + + if (null != m_certificateRequest) + { + TlsCredentialedSigner clientCredentials = TlsUtilities.Establish13ClientCredentials( + m_authentication, m_certificateRequest); + + Certificate clientCertificate = null; + if (null != clientCredentials) + { + clientCertificate = clientCredentials.Certificate; + } + + if (null == clientCertificate) + { + // In this calling context, certificate_request_context is length 0 + clientCertificate = Certificate.EmptyChainTls13; + } + + Send13CertificateMessage(clientCertificate); + this.m_connectionState = CS_CLIENT_CERTIFICATE; + + if (null != clientCredentials) + { + DigitallySigned certificateVerify = TlsUtilities.Generate13CertificateVerify( + m_tlsClientContext, clientCredentials, m_handshakeHash); + Send13CertificateVerifyMessage(certificateVerify); + this.m_connectionState = CS_CLIENT_CERTIFICATE_VERIFY; + } + } + + Send13FinishedMessage(); + this.m_connectionState = CS_CLIENT_FINISHED; + + TlsUtilities.Establish13PhaseApplication(m_tlsClientContext, serverFinishedTranscriptHash, + m_recordStream); + + m_recordStream.EnablePendingCipherWrite(); + m_recordStream.EnablePendingCipherRead(false); + + CompleteHandshake(); + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + case HandshakeType.key_update: + { + Receive13KeyUpdate(buf); + break; + } + case HandshakeType.new_session_ticket: + { + Receive13NewSessionTicket(buf); + break; + } + case HandshakeType.server_hello: + { + switch (m_connectionState) + { + case CS_CLIENT_HELLO: + { + // NOTE: Legacy handler should be dispatching initial ServerHello/HelloRetryRequest. + throw new TlsFatalAlert(AlertDescription.internal_error); + } + case CS_CLIENT_HELLO_RETRY: + { + ServerHello serverHello = ReceiveServerHelloMessage(buf); + if (serverHello.IsHelloRetryRequest()) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + Process13ServerHello(serverHello, true); + buf.UpdateHash(m_handshakeHash); + this.m_connectionState = CS_SERVER_HELLO; + + Process13ServerHelloCoda(serverHello, true); + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + + case HandshakeType.certificate_status: + case HandshakeType.certificate_url: + case HandshakeType.client_hello: + case HandshakeType.client_key_exchange: + case HandshakeType.compressed_certificate: + case HandshakeType.end_of_early_data: + case HandshakeType.hello_request: + case HandshakeType.hello_verify_request: + case HandshakeType.message_hash: + case HandshakeType.server_hello_done: + case HandshakeType.server_key_exchange: + case HandshakeType.supplemental_data: + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + } + + protected override void HandleHandshakeMessage(short type, HandshakeMessageInput buf) + { + SecurityParameters securityParameters = m_tlsClientContext.SecurityParameters; + + if (m_connectionState > CS_CLIENT_HELLO + && TlsUtilities.IsTlsV13(securityParameters.NegotiatedVersion)) + { + if (securityParameters.IsResumedSession) + throw new TlsFatalAlert(AlertDescription.internal_error); + + Handle13HandshakeMessage(type, buf); + return; + } + + if (!IsLegacyConnectionState()) + throw new TlsFatalAlert(AlertDescription.internal_error); + + if (securityParameters.IsResumedSession) + { + if (type != HandshakeType.finished || m_connectionState != CS_SERVER_HELLO) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + ProcessFinishedMessage(buf); + buf.UpdateHash(m_handshakeHash); + this.m_connectionState = CS_SERVER_FINISHED; + + SendChangeCipherSpec(); + SendFinishedMessage(); + this.m_connectionState = CS_CLIENT_FINISHED; + + CompleteHandshake(); + return; + } + + switch (type) + { + case HandshakeType.certificate: + { + switch (m_connectionState) + { + case CS_SERVER_HELLO: + case CS_SERVER_SUPPLEMENTAL_DATA: + { + if (m_connectionState != CS_SERVER_SUPPLEMENTAL_DATA) + { + HandleSupplementalData(null); + } + + /* + * NOTE: Certificate processing (including authentication) is delayed to allow for a + * possible CertificateStatus message. + */ + m_authentication = TlsUtilities.ReceiveServerCertificate(m_tlsClientContext, m_tlsClient, buf, + m_serverExtensions); + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + this.m_connectionState = CS_SERVER_CERTIFICATE; + break; + } + case HandshakeType.certificate_status: + { + switch (m_connectionState) + { + case CS_SERVER_CERTIFICATE: + { + if (securityParameters.StatusRequestVersion < 1) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + this.m_certificateStatus = CertificateStatus.Parse(m_tlsClientContext, buf); + + AssertEmpty(buf); + + this.m_connectionState = CS_SERVER_CERTIFICATE_STATUS; + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + case HandshakeType.finished: + { + switch (m_connectionState) + { + case CS_CLIENT_FINISHED: + case CS_SERVER_SESSION_TICKET: + { + if (m_connectionState != CS_SERVER_SESSION_TICKET) + { + /* + * RFC 5077 3.3. This message MUST be sent if the server included a + * SessionTicket extension in the ServerHello. + */ + if (m_expectSessionTicket) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + ProcessFinishedMessage(buf); + this.m_connectionState = CS_SERVER_FINISHED; + + CompleteHandshake(); + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + case HandshakeType.server_hello: + { + switch (m_connectionState) + { + case CS_CLIENT_HELLO: + { + ServerHello serverHello = ReceiveServerHelloMessage(buf); + + // TODO[tls13] Only treat as HRR if it's TLS 1.3?? + if (serverHello.IsHelloRetryRequest()) + { + Process13HelloRetryRequest(serverHello); + m_handshakeHash.NotifyPrfDetermined(); + m_handshakeHash.SealHashAlgorithms(); + TlsUtilities.AdjustTranscriptForRetry(m_handshakeHash); + buf.UpdateHash(m_handshakeHash); + this.m_connectionState = CS_SERVER_HELLO_RETRY_REQUEST; + + Send13ClientHelloRetry(); + this.m_connectionState = CS_CLIENT_HELLO_RETRY; + } + else + { + ProcessServerHello(serverHello); + m_handshakeHash.NotifyPrfDetermined(); + if (TlsUtilities.IsTlsV13(securityParameters.NegotiatedVersion)) + { + m_handshakeHash.SealHashAlgorithms(); + } + buf.UpdateHash(m_handshakeHash); + this.m_connectionState = CS_SERVER_HELLO; + + if (TlsUtilities.IsTlsV13(securityParameters.NegotiatedVersion)) + { + Process13ServerHelloCoda(serverHello, false); + } + } + + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + case HandshakeType.supplemental_data: + { + switch (m_connectionState) + { + case CS_SERVER_HELLO: + { + HandleSupplementalData(ReadSupplementalDataMessage(buf)); + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + case HandshakeType.server_hello_done: + { + switch (m_connectionState) + { + case CS_SERVER_HELLO: + case CS_SERVER_SUPPLEMENTAL_DATA: + case CS_SERVER_CERTIFICATE: + case CS_SERVER_CERTIFICATE_STATUS: + case CS_SERVER_KEY_EXCHANGE: + case CS_SERVER_CERTIFICATE_REQUEST: + { + if (m_connectionState == CS_SERVER_HELLO) + { + HandleSupplementalData(null); + } + if (m_connectionState == CS_SERVER_HELLO || + m_connectionState == CS_SERVER_SUPPLEMENTAL_DATA) + { + this.m_authentication = null; + } + if (m_connectionState != CS_SERVER_KEY_EXCHANGE && + m_connectionState != CS_SERVER_CERTIFICATE_REQUEST) + { + HandleServerCertificate(); + + // There was no server key exchange message; check it's OK + m_keyExchange.SkipServerKeyExchange(); + } + + AssertEmpty(buf); + + this.m_connectionState = CS_SERVER_HELLO_DONE; + + TlsCredentials clientAuthCredentials = null; + TlsCredentialedSigner clientAuthSigner = null; + Certificate clientAuthCertificate = null; + SignatureAndHashAlgorithm clientAuthAlgorithm = null; + TlsStreamSigner clientAuthStreamSigner = null; + + if (m_certificateRequest != null) + { + clientAuthCredentials = TlsUtilities.EstablishClientCredentials(m_authentication, + m_certificateRequest); + if (clientAuthCredentials != null) + { + clientAuthCertificate = clientAuthCredentials.Certificate; + + if (clientAuthCredentials is TlsCredentialedSigner) + { + clientAuthSigner = (TlsCredentialedSigner)clientAuthCredentials; + clientAuthAlgorithm = TlsUtilities.GetSignatureAndHashAlgorithm( + securityParameters.NegotiatedVersion, clientAuthSigner); + clientAuthStreamSigner = clientAuthSigner.GetStreamSigner(); + + if (ProtocolVersion.TLSv12.Equals(securityParameters.NegotiatedVersion)) + { + TlsUtilities.VerifySupportedSignatureAlgorithm(securityParameters.ServerSigAlgs, + clientAuthAlgorithm, AlertDescription.internal_error); + + if (clientAuthStreamSigner == null) + { + TlsUtilities.TrackHashAlgorithmClient(m_handshakeHash, clientAuthAlgorithm); + } + } + + if (clientAuthStreamSigner != null) + { + m_handshakeHash.ForceBuffering(); + } + } + } + } + + m_handshakeHash.SealHashAlgorithms(); + + if (clientAuthCredentials == null) + { + m_keyExchange.SkipClientCredentials(); + } + else + { + m_keyExchange.ProcessClientCredentials(clientAuthCredentials); + } + + var clientSupplementalData = m_tlsClient.GetClientSupplementalData(); + if (clientSupplementalData != null) + { + SendSupplementalDataMessage(clientSupplementalData); + this.m_connectionState = CS_CLIENT_SUPPLEMENTAL_DATA; + } + + if (m_certificateRequest != null) + { + SendCertificateMessage(clientAuthCertificate, null); + this.m_connectionState = CS_CLIENT_CERTIFICATE; + } + + SendClientKeyExchange(); + this.m_connectionState = CS_CLIENT_KEY_EXCHANGE; + + bool isSsl = TlsUtilities.IsSsl(m_tlsClientContext); + if (isSsl) + { + // NOTE: For SSLv3 (only), master_secret needed to calculate session hash + EstablishMasterSecret(m_tlsClientContext, m_keyExchange); + } + + securityParameters.m_sessionHash = TlsUtilities.GetCurrentPrfHash(m_handshakeHash); + + if (!isSsl) + { + // NOTE: For (D)TLS, session hash potentially needed for extended_master_secret + EstablishMasterSecret(m_tlsClientContext, m_keyExchange); + } + + m_recordStream.SetPendingCipher(TlsUtilities.InitCipher(m_tlsClientContext)); + + if (clientAuthSigner != null) + { + DigitallySigned certificateVerify = TlsUtilities.GenerateCertificateVerifyClient( + m_tlsClientContext, clientAuthSigner, clientAuthAlgorithm, clientAuthStreamSigner, + m_handshakeHash); + SendCertificateVerifyMessage(certificateVerify); + this.m_connectionState = CS_CLIENT_CERTIFICATE_VERIFY; + } + + m_handshakeHash.StopTracking(); + + SendChangeCipherSpec(); + SendFinishedMessage(); + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + this.m_connectionState = CS_CLIENT_FINISHED; + break; + } + case HandshakeType.server_key_exchange: + { + switch (m_connectionState) + { + case CS_SERVER_HELLO: + case CS_SERVER_SUPPLEMENTAL_DATA: + case CS_SERVER_CERTIFICATE: + case CS_SERVER_CERTIFICATE_STATUS: + { + if (m_connectionState == CS_SERVER_HELLO) + { + HandleSupplementalData(null); + } + if (m_connectionState != CS_SERVER_CERTIFICATE && + m_connectionState != CS_SERVER_CERTIFICATE_STATUS) + { + this.m_authentication = null; + } + + HandleServerCertificate(); + + m_keyExchange.ProcessServerKeyExchange(buf); + + AssertEmpty(buf); + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + this.m_connectionState = CS_SERVER_KEY_EXCHANGE; + break; + } + case HandshakeType.certificate_request: + { + switch (m_connectionState) + { + case CS_SERVER_CERTIFICATE: + case CS_SERVER_CERTIFICATE_STATUS: + case CS_SERVER_KEY_EXCHANGE: + { + if (m_connectionState != CS_SERVER_KEY_EXCHANGE) + { + HandleServerCertificate(); + + // There was no server key exchange message; check it's OK + m_keyExchange.SkipServerKeyExchange(); + } + + ReceiveCertificateRequest(buf); + + TlsUtilities.EstablishServerSigAlgs(securityParameters, m_certificateRequest); + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + this.m_connectionState = CS_SERVER_CERTIFICATE_REQUEST; + break; + } + case HandshakeType.new_session_ticket: + { + switch (m_connectionState) + { + case CS_CLIENT_FINISHED: + { + if (!m_expectSessionTicket) + { + /* + * RFC 5077 3.3. This message MUST NOT be sent if the server did not include a + * SessionTicket extension in the ServerHello. + */ + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + /* + * RFC 5077 3.4. If the client receives a session ticket from the server, then it + * discards any Session ID that was sent in the ServerHello. + */ + securityParameters.m_sessionID = TlsUtilities.EmptyBytes; + InvalidateSession(); + this.m_tlsSession = TlsUtilities.ImportSession(securityParameters.SessionID, null); + + ReceiveNewSessionTicket(buf); + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + this.m_connectionState = CS_SERVER_SESSION_TICKET; + break; + } + case HandshakeType.hello_request: + { + AssertEmpty(buf); + + /* + * RFC 2246 7.4.1.1 Hello request This message will be ignored by the client if the + * client is currently negotiating a session. This message may be ignored by the client + * if it does not wish to renegotiate a session, or the client may, if it wishes, + * respond with a no_renegotiation alert. + */ + if (IsApplicationDataReady) + { + //RefuseRenegotiation(); + handleRenegotiation(); + } + break; + } + + case HandshakeType.certificate_url: + case HandshakeType.certificate_verify: + case HandshakeType.client_hello: + case HandshakeType.client_key_exchange: + case HandshakeType.compressed_certificate: + case HandshakeType.encrypted_extensions: + case HandshakeType.end_of_early_data: + case HandshakeType.hello_verify_request: + case HandshakeType.key_update: + case HandshakeType.message_hash: + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + } + + /// + protected virtual void HandleServerCertificate() + { + TlsUtilities.ProcessServerCertificate(m_tlsClientContext, m_certificateStatus, m_keyExchange, + m_authentication, m_clientExtensions, m_serverExtensions); + } + + /// + protected virtual void HandleSupplementalData(IList serverSupplementalData) + { + m_tlsClient.ProcessServerSupplementalData(serverSupplementalData); + this.m_connectionState = CS_SERVER_SUPPLEMENTAL_DATA; + + this.m_keyExchange = TlsUtilities.InitKeyExchangeClient(m_tlsClientContext, m_tlsClient); + } + + /// + protected virtual void Process13HelloRetryRequest(ServerHello helloRetryRequest) + { + ProtocolVersion legacy_record_version = ProtocolVersion.TLSv12; + m_recordStream.SetWriteVersion(legacy_record_version); + + SecurityParameters securityParameters = m_tlsClientContext.SecurityParameters; + if (securityParameters.IsRenegotiating) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + /* + * RFC 8446 4.1.4. Upon receipt of a HelloRetryRequest, the client MUST check the + * legacy_version, legacy_session_id_echo, cipher_suite, and legacy_compression_method as + * specified in Section 4.1.3 and then process the extensions, starting with determining the + * version using "supported_versions". + */ + ProtocolVersion legacy_version = helloRetryRequest.Version; + byte[] legacy_session_id_echo = helloRetryRequest.SessionID; + int cipherSuite = helloRetryRequest.CipherSuite; + // NOTE: legacy_compression_method checked during ServerHello parsing + + if (!ProtocolVersion.TLSv12.Equals(legacy_version) || + !Arrays.AreEqual(m_clientHello.SessionID, legacy_session_id_echo) || + !TlsUtilities.IsValidCipherSuiteSelection(m_clientHello.CipherSuites, cipherSuite)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + var extensions = helloRetryRequest.Extensions; + if (null == extensions) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + TlsUtilities.CheckExtensionData13(extensions, HandshakeType.hello_retry_request, + AlertDescription.illegal_parameter); + + { + /* + * RFC 8446 4.2. Implementations MUST NOT send extension responses if the remote + * endpoint did not send the corresponding extension requests, with the exception of the + * "cookie" extension in the HelloRetryRequest. Upon receiving such an extension, an + * endpoint MUST abort the handshake with an "unsupported_extension" alert. + */ + foreach (int extType in extensions.Keys) + { + if (ExtensionType.cookie == extType) + continue; + + if (null == TlsUtilities.GetExtensionData(m_clientExtensions, extType)) + throw new TlsFatalAlert(AlertDescription.unsupported_extension); + } + } + + ProtocolVersion server_version = TlsExtensionsUtilities.GetSupportedVersionsExtensionServer(extensions); + if (null == server_version) + throw new TlsFatalAlert(AlertDescription.missing_extension); + + if (!ProtocolVersion.TLSv13.IsEqualOrEarlierVersionOf(server_version) || + !ProtocolVersion.Contains(m_tlsClientContext.ClientSupportedVersions, server_version) || + !TlsUtilities.IsValidVersionForCipherSuite(cipherSuite, server_version)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + if (null != m_clientBinders) + { + if (!Arrays.Contains(m_clientBinders.m_pskKeyExchangeModes, PskKeyExchangeMode.psk_dhe_ke)) + { + this.m_clientBinders = null; + + m_tlsClient.NotifySelectedPsk(null); + } + } + + /* + * RFC 8446 4.2.8. Upon receipt of this [Key Share] extension in a HelloRetryRequest, the + * client MUST verify that (1) the selected_group field corresponds to a group which was + * provided in the "supported_groups" extension in the original ClientHello and (2) the + * selected_group field does not correspond to a group which was provided in the "key_share" + * extension in the original ClientHello. If either of these checks fails, then the client + * MUST abort the handshake with an "illegal_parameter" alert. + */ + int selected_group = TlsExtensionsUtilities.GetKeyShareHelloRetryRequest(extensions); + + if (!TlsUtilities.IsValidKeyShareSelection(server_version, securityParameters.ClientSupportedGroups, + m_clientAgreements, selected_group)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + byte[] cookie = TlsExtensionsUtilities.GetCookieExtension(extensions); + + + + securityParameters.m_negotiatedVersion = server_version; + TlsUtilities.NegotiatedVersionTlsClient(m_tlsClientContext, m_tlsClient); + + securityParameters.m_resumedSession = false; + securityParameters.m_sessionID = TlsUtilities.EmptyBytes; + m_tlsClient.NotifySessionID(TlsUtilities.EmptyBytes); + + TlsUtilities.NegotiatedCipherSuite(securityParameters, cipherSuite); + m_tlsClient.NotifySelectedCipherSuite(cipherSuite); + + this.m_clientAgreements = null; + this.m_retryCookie = cookie; + this.m_retryGroup = selected_group; + } + + /// + protected virtual void Process13ServerHello(ServerHello serverHello, bool afterHelloRetryRequest) + { + SecurityParameters securityParameters = m_tlsClientContext.SecurityParameters; + + ProtocolVersion legacy_version = serverHello.Version; + byte[] legacy_session_id_echo = serverHello.SessionID; + int cipherSuite = serverHello.CipherSuite; + // NOTE: legacy_compression_method checked during ServerHello parsing + + if (!ProtocolVersion.TLSv12.Equals(legacy_version) || + !Arrays.AreEqual(m_clientHello.SessionID, legacy_session_id_echo)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + var extensions = serverHello.Extensions; + if (null == extensions) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + TlsUtilities.CheckExtensionData13(extensions, HandshakeType.server_hello, + AlertDescription.illegal_parameter); + + if (afterHelloRetryRequest) + { + ProtocolVersion server_version = TlsExtensionsUtilities.GetSupportedVersionsExtensionServer(extensions); + if (null == server_version) + throw new TlsFatalAlert(AlertDescription.missing_extension); + + if (!securityParameters.NegotiatedVersion.Equals(server_version) || + securityParameters.CipherSuite != cipherSuite) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + } + else + { + if (!TlsUtilities.IsValidCipherSuiteSelection(m_clientHello.CipherSuites, cipherSuite) || + !TlsUtilities.IsValidVersionForCipherSuite(cipherSuite, securityParameters.NegotiatedVersion)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + securityParameters.m_resumedSession = false; + securityParameters.m_sessionID = TlsUtilities.EmptyBytes; + m_tlsClient.NotifySessionID(TlsUtilities.EmptyBytes); + + TlsUtilities.NegotiatedCipherSuite(securityParameters, cipherSuite); + m_tlsClient.NotifySelectedCipherSuite(cipherSuite); + } + + this.m_clientHello = null; + + // NOTE: Apparently downgrade marker mechanism not used for TLS 1.3+? + securityParameters.m_serverRandom = serverHello.Random; + + securityParameters.m_secureRenegotiation = false; + + /* + * RFC 8446 Appendix D. Because TLS 1.3 always hashes in the transcript up to the server + * Finished, implementations which support both TLS 1.3 and earlier versions SHOULD indicate + * the use of the Extended Master Secret extension in their APIs whenever TLS 1.3 is used. + */ + securityParameters.m_extendedMasterSecret = true; + + /* + * TODO[tls13] RFC 8446 4.4.2.1. OCSP Status and SCT Extensions. + * + * OCSP information is carried in an extension for a CertificateEntry. + */ + securityParameters.m_statusRequestVersion = + m_clientExtensions.ContainsKey(ExtensionType.status_request) ? 1 : 0; + + TlsSecret pskEarlySecret = null; + { + int selected_identity = TlsExtensionsUtilities.GetPreSharedKeyServerHello(extensions); + TlsPsk selectedPsk = null; + + if (selected_identity >= 0) + { + if (null == m_clientBinders || selected_identity >= m_clientBinders.m_psks.Length) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + selectedPsk = m_clientBinders.m_psks[selected_identity]; + if (selectedPsk.PrfAlgorithm != securityParameters.PrfAlgorithm) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + pskEarlySecret = m_clientBinders.m_earlySecrets[selected_identity]; + + this.m_selectedPsk13 = true; + } + + m_tlsClient.NotifySelectedPsk(selectedPsk); + } + + TlsSecret sharedSecret = null; + { + KeyShareEntry keyShareEntry = TlsExtensionsUtilities.GetKeyShareServerHello(extensions); + if (null == keyShareEntry) + { + if (afterHelloRetryRequest + || null == pskEarlySecret + || !Arrays.Contains(m_clientBinders.m_pskKeyExchangeModes, PskKeyExchangeMode.psk_ke)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + } + else + { + if (null != pskEarlySecret + && !Arrays.Contains(m_clientBinders.m_pskKeyExchangeModes, PskKeyExchangeMode.psk_dhe_ke)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + TlsAgreement agreement = (TlsAgreement)m_clientAgreements[keyShareEntry.NamedGroup]; + if (null == agreement) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + agreement.ReceivePeerValue(keyShareEntry.KeyExchange); + sharedSecret = agreement.CalculateSecret(); + } + } + + this.m_clientAgreements = null; + this.m_clientBinders = null; + + TlsUtilities.Establish13PhaseSecrets(m_tlsClientContext, pskEarlySecret, sharedSecret); + + InvalidateSession(); + this.m_tlsSession = TlsUtilities.ImportSession(securityParameters.SessionID, null); + } + + /// + protected virtual void Process13ServerHelloCoda(ServerHello serverHello, bool afterHelloRetryRequest) + { + byte[] serverHelloTranscriptHash = TlsUtilities.GetCurrentPrfHash(m_handshakeHash); + + TlsUtilities.Establish13PhaseHandshake(m_tlsClientContext, serverHelloTranscriptHash, m_recordStream); + + // See RFC 8446 D.4. + if (!afterHelloRetryRequest) + { + m_recordStream.SetIgnoreChangeCipherSpec(true); + + /* + * TODO[tls13] If offering early_data, the record is placed immediately after the first + * ClientHello. + */ + /* + * TODO[tls13] Ideally wait until just after Server Finished received, but then we'd need to defer + * the enabling of the pending write cipher + */ + SendChangeCipherSpecMessage(); + } + + m_recordStream.EnablePendingCipherWrite(); + m_recordStream.EnablePendingCipherRead(false); + } + + /// + protected virtual void ProcessServerHello(ServerHello serverHello) + { + var serverHelloExtensions = serverHello.Extensions; + + ProtocolVersion legacy_version = serverHello.Version; + ProtocolVersion supported_version = TlsExtensionsUtilities.GetSupportedVersionsExtensionServer( + serverHelloExtensions); + + ProtocolVersion server_version; + if (null == supported_version) + { + server_version = legacy_version; + } + else + { + if (!ProtocolVersion.TLSv12.Equals(legacy_version) || + !ProtocolVersion.TLSv13.IsEqualOrEarlierVersionOf(supported_version)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + server_version = supported_version; + } + + SecurityParameters securityParameters = m_tlsClientContext.SecurityParameters; + + if (securityParameters.IsRenegotiating) + { + // Check that this matches the negotiated version from the initial handshake + if (!server_version.Equals(securityParameters.NegotiatedVersion)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + } + else + { + if (!ProtocolVersion.Contains(m_tlsClientContext.ClientSupportedVersions, server_version)) + throw new TlsFatalAlert(AlertDescription.protocol_version); + + ProtocolVersion legacy_record_version = server_version.IsLaterVersionOf(ProtocolVersion.TLSv12) + ? ProtocolVersion.TLSv12 + : server_version; + + m_recordStream.SetWriteVersion(legacy_record_version); + securityParameters.m_negotiatedVersion = server_version; + } + + TlsUtilities.NegotiatedVersionTlsClient(m_tlsClientContext, m_tlsClient); + + if (ProtocolVersion.TLSv13.IsEqualOrEarlierVersionOf(server_version)) + { + Process13ServerHello(serverHello, false); + return; + } + + int[] offeredCipherSuites = m_clientHello.CipherSuites; + + this.m_clientHello = null; + this.m_retryCookie = null; + this.m_retryGroup = -1; + + securityParameters.m_serverRandom = serverHello.Random; + + if (!m_tlsClientContext.ClientVersion.Equals(server_version)) + { + TlsUtilities.CheckDowngradeMarker(server_version, securityParameters.ServerRandom); + } + + { + byte[] selectedSessionID = serverHello.SessionID; + securityParameters.m_sessionID = selectedSessionID; + m_tlsClient.NotifySessionID(selectedSessionID); + securityParameters.m_resumedSession = selectedSessionID.Length > 0 && m_tlsSession != null + && Arrays.AreEqual(selectedSessionID, m_tlsSession.SessionID); + } + + /* + * Find out which CipherSuite the server has chosen and check that it was one of the offered + * ones, and is a valid selection for the negotiated version. + */ + { + int cipherSuite = serverHello.CipherSuite; + + if (!TlsUtilities.IsValidCipherSuiteSelection(offeredCipherSuites, cipherSuite) || + !TlsUtilities.IsValidVersionForCipherSuite(cipherSuite, securityParameters.NegotiatedVersion)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + TlsUtilities.NegotiatedCipherSuite(securityParameters, cipherSuite); + m_tlsClient.NotifySelectedCipherSuite(cipherSuite); + } + + /* + * RFC 3546 2.2 Note that the extended server hello message is only sent in response to an + * extended client hello message. + * + * However, see RFC 5746 exception below. We always include the SCSV, so an Extended Server + * Hello is always allowed. + */ + this.m_serverExtensions = serverHelloExtensions; + if (m_serverExtensions != null) + { + foreach (int extType in m_serverExtensions.Keys) + { + /* + * RFC 5746 3.6. Note that sending a "renegotiation_info" extension in response to a + * ClientHello containing only the SCSV is an explicit exception to the prohibition + * in RFC 5246, Section 7.4.1.4, on the server sending unsolicited extensions and is + * only allowed because the client is signaling its willingness to receive the + * extension via the TLS_EMPTY_RENEGOTIATION_INFO_SCSV SCSV. + */ + if (ExtensionType.renegotiation_info == extType) + continue; + + /* + * RFC 5246 7.4.1.4 An extension type MUST NOT appear in the ServerHello unless the + * same extension type appeared in the corresponding ClientHello. If a client + * receives an extension type in ServerHello that it did not request in the + * associated ClientHello, it MUST abort the handshake with an unsupported_extension + * fatal alert. + */ + if (null == TlsUtilities.GetExtensionData(m_clientExtensions, extType)) + throw new TlsFatalAlert(AlertDescription.unsupported_extension); + + /* + * RFC 3546 2.3. If [...] the older session is resumed, then the server MUST ignore + * extensions appearing in the client hello, and send a server hello containing no + * extensions[.] + */ + if (securityParameters.IsResumedSession) + { + // TODO[compat-gnutls] GnuTLS test server sends server extensions e.g. ec_point_formats + // TODO[compat-openssl] OpenSSL test server sends server extensions e.g. ec_point_formats + // TODO[compat-polarssl] PolarSSL test server sends server extensions e.g. ec_point_formats + // throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + } + } + + byte[] renegExtData = TlsUtilities.GetExtensionData(m_serverExtensions, ExtensionType.renegotiation_info); + + if (securityParameters.IsRenegotiating) + { + /* + * RFC 5746 3.5. Client Behavior: Secure Renegotiation + * + * This text applies if the connection's "secure_renegotiation" flag is set to TRUE. + */ + if (!securityParameters.IsSecureRenegotiation) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + /* + * When a ServerHello is received, the client MUST verify that the "renegotiation_info" + * extension is present; if it is not, the client MUST abort the handshake. + */ + if (renegExtData == null) + { + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + + /* + * The client MUST then verify that the first half of the "renegotiated_connection" + * field is equal to the saved client_verify_data value, and the second half is equal to + * the saved server_verify_data value. If they are not, the client MUST abort the + * handshake. + */ + SecurityParameters saved = m_tlsClientContext.SecurityParameters; + byte[] reneg_conn_info = Arrays.Concatenate(saved.LocalVerifyData, saved.PeerVerifyData); + + if (!Arrays.ConstantTimeAreEqual(renegExtData, TlsProtocol.CreateRenegotiationInfo(reneg_conn_info))) + { + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + } + else + { + /* + * RFC 5746 3.4. Client Behavior: Initial Handshake (both full and session-resumption) + */ + + /* + * When a ServerHello is received, the client MUST check if it includes the + * "renegotiation_info" extension: + */ + if (renegExtData == null) + { + /* + * If the extension is not present, the server does not support secure + * renegotiation; set secure_renegotiation flag to FALSE. In this case, some clients + * may want to terminate the handshake instead of continuing; see Section 4.1 for + * discussion. + */ + securityParameters.m_secureRenegotiation = false; + } + else + { + /* + * If the extension is present, set the secure_renegotiation flag to TRUE. The + * client MUST then verify that the length of the "renegotiated_connection" + * field is zero, and if it is not, MUST abort the handshake (by sending a fatal + * handshake_failure alert). + */ + securityParameters.m_secureRenegotiation = true; + + if (!Arrays.ConstantTimeAreEqual(renegExtData, CreateRenegotiationInfo(TlsUtilities.EmptyBytes))) + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + } + + // TODO[compat-gnutls] GnuTLS test server fails to send renegotiation_info extension when resuming + m_tlsClient.NotifySecureRenegotiation(securityParameters.IsSecureRenegotiation); + + /* + * RFC 7627 4. Clients and servers SHOULD NOT accept handshakes that do not use the extended + * master secret [..]. (and see 5.2, 5.3) + * + * RFC 8446 Appendix D. Because TLS 1.3 always hashes in the transcript up to the server + * Finished, implementations which support both TLS 1.3 and earlier versions SHOULD indicate + * the use of the Extended Master Secret extension in their APIs whenever TLS 1.3 is used. + */ + { + bool acceptedExtendedMasterSecret = TlsExtensionsUtilities.HasExtendedMasterSecretExtension( + m_serverExtensions); + bool resumedSession = securityParameters.IsResumedSession; + + if (acceptedExtendedMasterSecret) + { + if (server_version.IsSsl + || (!resumedSession && !m_tlsClient.ShouldUseExtendedMasterSecret())) + { + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + } + else + { + if (m_tlsClient.RequiresExtendedMasterSecret() + || (resumedSession && !m_tlsClient.AllowLegacyResumption())) + { + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + } + + securityParameters.m_extendedMasterSecret = acceptedExtendedMasterSecret; + } + + /* + * RFC 7301 3.1. When session resumption or session tickets [...] are used, the previous + * contents of this extension are irrelevant, and only the values in the new handshake + * messages are considered. + */ + securityParameters.m_applicationProtocol = TlsExtensionsUtilities.GetAlpnExtensionServer( + m_serverExtensions); + securityParameters.m_applicationProtocolSet = true; + + var sessionClientExtensions = m_clientExtensions; + var sessionServerExtensions = m_serverExtensions; + if (securityParameters.IsResumedSession) + { + if (securityParameters.CipherSuite != m_sessionParameters.CipherSuite + || !server_version.Equals(m_sessionParameters.NegotiatedVersion)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + sessionClientExtensions = null; + sessionServerExtensions = m_sessionParameters.ReadServerExtensions(); + } + + if (sessionServerExtensions != null && sessionServerExtensions.Count > 0) + { + { + /* + * RFC 7366 3. If a server receives an encrypt-then-MAC request extension from a client + * and then selects a stream or Authenticated Encryption with Associated Data (AEAD) + * ciphersuite, it MUST NOT send an encrypt-then-MAC response extension back to the + * client. + */ + bool serverSentEncryptThenMAC = TlsExtensionsUtilities.HasEncryptThenMacExtension( + sessionServerExtensions); + if (serverSentEncryptThenMAC && !TlsUtilities.IsBlockCipherSuite(securityParameters.CipherSuite)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + securityParameters.m_encryptThenMac = serverSentEncryptThenMAC; + } + + securityParameters.m_maxFragmentLength = ProcessMaxFragmentLengthExtension(sessionClientExtensions, + sessionServerExtensions, AlertDescription.illegal_parameter); + + securityParameters.m_truncatedHmac = TlsExtensionsUtilities.HasTruncatedHmacExtension( + sessionServerExtensions); + + /* + * TODO It's surprising that there's no provision to allow a 'fresh' CertificateStatus to be sent in + * a session resumption handshake. + */ + if (!securityParameters.IsResumedSession) + { + // TODO[tls13] See RFC 8446 4.4.2.1 + if (TlsUtilities.HasExpectedEmptyExtensionData(sessionServerExtensions, + ExtensionType.status_request_v2, AlertDescription.illegal_parameter)) + { + securityParameters.m_statusRequestVersion = 2; + } + else if (TlsUtilities.HasExpectedEmptyExtensionData(sessionServerExtensions, + ExtensionType.status_request, AlertDescription.illegal_parameter)) + { + securityParameters.m_statusRequestVersion = 1; + } + + this.m_expectSessionTicket = TlsUtilities.HasExpectedEmptyExtensionData(sessionServerExtensions, + ExtensionType.session_ticket, AlertDescription.illegal_parameter); + } + } + + if (sessionClientExtensions != null) + { + m_tlsClient.ProcessServerExtensions(sessionServerExtensions); + } + + ApplyMaxFragmentLengthExtension(securityParameters.MaxFragmentLength); + + if (securityParameters.IsResumedSession) + { + securityParameters.m_masterSecret = m_sessionMasterSecret; + m_recordStream.SetPendingCipher(TlsUtilities.InitCipher(m_tlsClientContext)); + } + else + { + InvalidateSession(); + this.m_tlsSession = TlsUtilities.ImportSession(securityParameters.SessionID, null); + } + } + + /// + protected virtual void Receive13CertificateRequest(MemoryStream buf, bool postHandshakeAuth) + { + // TODO[tls13] Support for post_handshake_auth + if (postHandshakeAuth) + throw new TlsFatalAlert(AlertDescription.internal_error); + + /* + * RFC 8446 4.3.2. A server which is authenticating with a certificate MAY optionally + * request a certificate from the client. + */ + + if (m_selectedPsk13) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + CertificateRequest certificateRequest = CertificateRequest.Parse(m_tlsClientContext, buf); + + AssertEmpty(buf); + + if (!certificateRequest.HasCertificateRequestContext(TlsUtilities.EmptyBytes)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + this.m_certificateRequest = certificateRequest; + + m_tlsClientContext.SecurityParameters.m_clientCertificateType = + TlsExtensionsUtilities.GetClientCertificateTypeExtensionServer(m_serverExtensions, + CertificateType.X509); + + TlsUtilities.EstablishServerSigAlgs(m_tlsClientContext.SecurityParameters, certificateRequest); + } + + protected override void Send13CertificateMessage(Certificate certificate) + { + // Create a new certificate with the current context. + certificate = new Certificate(this.m_certificateRequest.GetCertificateRequestContext(), certificate.GetCertificateEntryList()); + + // call base's implementation with the new certificate + base.Send13CertificateMessage(certificate); + } + + /// + protected virtual void Receive13EncryptedExtensions(MemoryStream buf) + { + byte[] extBytes = TlsUtilities.ReadOpaque16(buf); + + AssertEmpty(buf); + + + this.m_serverExtensions = ReadExtensionsData13(HandshakeType.encrypted_extensions, extBytes); + + { + /* + * RFC 8446 4.2. Implementations MUST NOT send extension responses if the remote + * endpoint did not send the corresponding extension requests, with the exception of the + * "cookie" extension in the HelloRetryRequest. Upon receiving such an extension, an + * endpoint MUST abort the handshake with an "unsupported_extension" alert. + */ + foreach (int extType in m_serverExtensions.Keys) + { + if (null == TlsUtilities.GetExtensionData(m_clientExtensions, extType)) + throw new TlsFatalAlert(AlertDescription.unsupported_extension); + } + } + + + SecurityParameters securityParameters = m_tlsClientContext.SecurityParameters; + ProtocolVersion negotiatedVersion = securityParameters.NegotiatedVersion; + + securityParameters.m_applicationProtocol = TlsExtensionsUtilities.GetAlpnExtensionServer( + m_serverExtensions); + securityParameters.m_applicationProtocolSet = true; + + var sessionClientExtensions = m_clientExtensions; + var sessionServerExtensions = m_serverExtensions; + if (securityParameters.IsResumedSession) + { + if (securityParameters.CipherSuite != m_sessionParameters.CipherSuite + || !negotiatedVersion.Equals(m_sessionParameters.NegotiatedVersion)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + sessionClientExtensions = null; + sessionServerExtensions = m_sessionParameters.ReadServerExtensions(); + } + + securityParameters.m_maxFragmentLength = ProcessMaxFragmentLengthExtension(sessionClientExtensions, + sessionServerExtensions, AlertDescription.illegal_parameter); + + securityParameters.m_encryptThenMac = false; + securityParameters.m_truncatedHmac = false; + + /* + * TODO[tls13] RFC 8446 4.4.2.1. OCSP Status and SCT Extensions. + * + * OCSP information is carried in an extension for a CertificateEntry. + */ + securityParameters.m_statusRequestVersion = + m_clientExtensions.ContainsKey(ExtensionType.status_request) ? 1 : 0; + + this.m_expectSessionTicket = false; + + if (null != sessionClientExtensions) + { + m_tlsClient.ProcessServerExtensions(m_serverExtensions); + } + + ApplyMaxFragmentLengthExtension(securityParameters.MaxFragmentLength); + } + + /// + protected virtual void Receive13NewSessionTicket(MemoryStream buf) + { + if (!IsApplicationDataReady) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + // TODO[tls13] Do something more than just ignore them + + // struct { + // uint32 ticket_lifetime; + // uint32 ticket_age_add; + // opaque ticket_nonce<0..255>; + // opaque ticket<1..2^16-1>; + // Extension extensions<0..2^16-2>; + // } NewSessionTicket; + + TlsUtilities.ReadUint32(buf); + TlsUtilities.ReadUint32(buf); + TlsUtilities.ReadOpaque8(buf); + TlsUtilities.ReadOpaque16(buf); + TlsUtilities.ReadOpaque16(buf); + AssertEmpty(buf); + } + + /// + protected virtual void Receive13ServerCertificate(MemoryStream buf) + { + if (m_selectedPsk13) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + m_authentication = TlsUtilities.Receive13ServerCertificate(m_tlsClientContext, m_tlsClient, buf, + m_serverExtensions); + + // NOTE: In TLS 1.3 we don't have to wait for a possible CertificateStatus message. + HandleServerCertificate(); + } + + /// + protected virtual void Receive13ServerCertificateVerify(MemoryStream buf) + { + Certificate serverCertificate = m_tlsClientContext.SecurityParameters.PeerCertificate; + if (null == serverCertificate || serverCertificate.IsEmpty) + throw new TlsFatalAlert(AlertDescription.internal_error); + + CertificateVerify certificateVerify = CertificateVerify.Parse(m_tlsClientContext, buf); + + AssertEmpty(buf); + + TlsUtilities.Verify13CertificateVerifyServer(m_tlsClientContext, m_handshakeHash, certificateVerify); + } + + /// + protected virtual void Receive13ServerFinished(MemoryStream buf) + { + Process13FinishedMessage(buf); + } + + /// + protected virtual void ReceiveCertificateRequest(MemoryStream buf) + { + if (null == m_authentication) + { + /* + * RFC 2246 7.4.4. It is a fatal handshake_failure alert for an anonymous server to + * request client identification. + */ + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + + CertificateRequest certificateRequest = CertificateRequest.Parse(m_tlsClientContext, buf); + + AssertEmpty(buf); + + m_certificateRequest = TlsUtilities.ValidateCertificateRequest(certificateRequest, m_keyExchange); + + m_tlsClientContext.SecurityParameters.m_clientCertificateType = + TlsExtensionsUtilities.GetClientCertificateTypeExtensionServer(m_serverExtensions, + CertificateType.X509); + } + + /// + protected virtual void ReceiveNewSessionTicket(MemoryStream buf) + { + NewSessionTicket newSessionTicket = NewSessionTicket.Parse(buf); + + AssertEmpty(buf); + + m_tlsClient.NotifyNewSessionTicket(newSessionTicket); + } + + /// + protected virtual ServerHello ReceiveServerHelloMessage(MemoryStream buf) + { + return ServerHello.Parse(buf); + } + + /// + protected virtual void Send13ClientHelloRetry() + { + var clientHelloExtensions = m_clientHello.Extensions; + + clientHelloExtensions.Remove(ExtensionType.cookie); + clientHelloExtensions.Remove(ExtensionType.early_data); + clientHelloExtensions.Remove(ExtensionType.key_share); + clientHelloExtensions.Remove(ExtensionType.pre_shared_key); + + /* + * RFC 4.2.2. When sending the new ClientHello, the client MUST copy the contents of the + * extension received in the HelloRetryRequest into a "cookie" extension in the new + * ClientHello. + */ + if (null != m_retryCookie) + { + /* + * - Including a "cookie" extension if one was provided in the HelloRetryRequest. + */ + TlsExtensionsUtilities.AddCookieExtension(clientHelloExtensions, m_retryCookie); + this.m_retryCookie = null; + } + + /* + * - Updating the "pre_shared_key" extension if present by recomputing the "obfuscated_ticket_age" + * and binder values and (optionally) removing any PSKs which are incompatible with the server's + * indicated cipher suite. + */ + if (null != m_clientBinders) + { + this.m_clientBinders = TlsUtilities.AddPreSharedKeyToClientHelloRetry(m_tlsClientContext, + m_clientBinders, clientHelloExtensions); + if (null == m_clientBinders) + { + m_tlsClient.NotifySelectedPsk(null); + } + } + + /* + * RFC 8446 4.2.8. [..] when sending the new ClientHello, the client MUST replace the + * original "key_share" extension with one containing only a new KeyShareEntry for the group + * indicated in the selected_group field of the triggering HelloRetryRequest. + */ + if (m_retryGroup < 0) + throw new TlsFatalAlert(AlertDescription.internal_error); + + /* + * - If a "key_share" extension was supplied in the HelloRetryRequest, replacing the list of shares + * with a list containing a single KeyShareEntry from the indicated group + */ + this.m_clientAgreements = TlsUtilities.AddKeyShareToClientHelloRetry(m_tlsClientContext, + clientHelloExtensions, m_retryGroup); + + /* + * TODO[tls13] Optionally adding, removing, or changing the length of the "padding" + * extension [RFC7685]. + */ + + // See RFC 8446 D.4. + { + m_recordStream.SetIgnoreChangeCipherSpec(true); + + /* + * TODO[tls13] If offering early_data, the record is placed immediately after the first + * ClientHello. + */ + SendChangeCipherSpecMessage(); + } + + SendClientHelloMessage(); + } + + /// + protected virtual void SendCertificateVerifyMessage(DigitallySigned certificateVerify) + { + HandshakeMessageOutput message = new HandshakeMessageOutput(HandshakeType.certificate_verify); + certificateVerify.Encode(message); + message.Send(this); + } + + /// + protected virtual void SendClientHello() + { + SecurityParameters securityParameters = m_tlsClientContext.SecurityParameters; + + ProtocolVersion[] supportedVersions = m_tlsClient.GetProtocolVersions(); + ProtocolVersion earliestVersion = ProtocolVersion.GetEarliestTls(supportedVersions); + ProtocolVersion latestVersion = ProtocolVersion.GetLatestTls(supportedVersions); + + if (securityParameters.IsRenegotiating) + { + latestVersion = m_tlsClientContext.ClientVersion; + } + else + { + m_tlsClientContext.SetClientSupportedVersions(supportedVersions); + + if (ProtocolVersion.Contains(supportedVersions, ProtocolVersion.SSLv3)) + { + // TODO[tls13] Prevent offering SSLv3 AND TLSv13? + m_recordStream.SetWriteVersion(ProtocolVersion.SSLv3); + } + else + { + m_recordStream.SetWriteVersion(ProtocolVersion.TLSv10); + } + + //earliestVersion = ProtocolVersion.GetEarliestTls(supportedVersions); + //latestVersion = ProtocolVersion.GetLatestTls(supportedVersions); + + if (!ProtocolVersion.IsSupportedTlsVersionClient(latestVersion)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + m_tlsClientContext.SetClientVersion(latestVersion); + } + + bool offeringTlsV12Minus = ProtocolVersion.TLSv12.IsEqualOrLaterVersionOf(earliestVersion); + bool offeringTlsV13Plus = ProtocolVersion.TLSv13.IsEqualOrEarlierVersionOf(latestVersion); + + { + bool useGmtUnixTime = !offeringTlsV13Plus && m_tlsClient.ShouldUseGmtUnixTime(); + + securityParameters.m_clientRandom = CreateRandomBlock(useGmtUnixTime, m_tlsClientContext); + } + + EstablishSession(offeringTlsV12Minus ? m_tlsClient.GetSessionToResume() : null); + m_tlsClient.NotifySessionToResume(m_tlsSession); + + /* + * TODO RFC 5077 3.4. When presenting a ticket, the client MAY generate and include a + * Session ID in the TLS ClientHello. + */ + byte[] legacy_session_id = TlsUtilities.GetSessionID(m_tlsSession); + + bool fallback = m_tlsClient.IsFallback(); + + int[] offeredCipherSuites = m_tlsClient.GetCipherSuites(); + + if (legacy_session_id.Length > 0 && m_sessionParameters != null) + { + if (!Arrays.Contains(offeredCipherSuites, m_sessionParameters.CipherSuite)) + { + legacy_session_id = TlsUtilities.EmptyBytes; + } + } + + this.m_clientExtensions = TlsExtensionsUtilities.EnsureExtensionsInitialised( + m_tlsClient.GetClientExtensions()); + + ProtocolVersion legacy_version = latestVersion; + if (offeringTlsV13Plus) + { + legacy_version = ProtocolVersion.TLSv12; + + TlsExtensionsUtilities.AddSupportedVersionsExtensionClient(m_clientExtensions, supportedVersions); + + /* + * RFC 8446 4.2.1. In compatibility mode [..], this field MUST be non-empty, so a client + * not offering a pre-TLS 1.3 session MUST generate a new 32-byte value. + */ + if (legacy_session_id.Length < 1) + { + legacy_session_id = m_tlsClientContext.NonceGenerator.GenerateNonce(32); + } + } + + m_tlsClientContext.SetRsaPreMasterSecretVersion(legacy_version); + + securityParameters.m_clientServerNames = TlsExtensionsUtilities.GetServerNameExtensionClient( + m_clientExtensions); + + if (TlsUtilities.IsSignatureAlgorithmsExtensionAllowed(latestVersion)) + { + TlsUtilities.EstablishClientSigAlgs(securityParameters, m_clientExtensions); + } + + securityParameters.m_clientSupportedGroups = TlsExtensionsUtilities.GetSupportedGroupsExtension( + m_clientExtensions); + + this.m_clientBinders = TlsUtilities.AddPreSharedKeyToClientHello(m_tlsClientContext, m_tlsClient, + m_clientExtensions, offeredCipherSuites); + + // TODO[tls13-psk] Perhaps don't add key_share if external PSK(s) offered and 'psk_dhe_ke' not offered + this.m_clientAgreements = TlsUtilities.AddKeyShareToClientHello(m_tlsClientContext, m_tlsClient, + m_clientExtensions); + + if (TlsUtilities.IsExtendedMasterSecretOptionalTls(supportedVersions) + && (m_tlsClient.ShouldUseExtendedMasterSecret() || + (null != m_sessionParameters && m_sessionParameters.IsExtendedMasterSecret))) + { + TlsExtensionsUtilities.AddExtendedMasterSecretExtension(m_clientExtensions); + } + else if (!offeringTlsV13Plus && m_tlsClient.RequiresExtendedMasterSecret()) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + +// { +// bool useGmtUnixTime = !offeringTlsV13Plus && m_tlsClient.ShouldUseGmtUnixTime(); +// +// securityParameters.m_clientRandom = CreateRandomBlock(useGmtUnixTime, m_tlsClientContext); +// } + + if (securityParameters.IsRenegotiating) + { + /* + * RFC 5746 3.5. Client Behavior: Secure Renegotiation + * + * This text applies if the connection's "secure_renegotiation" flag is set to TRUE. + */ + if (!securityParameters.IsSecureRenegotiation) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + /* + * The client MUST include the "renegotiation_info" extension in the ClientHello, + * containing the saved client_verify_data. The SCSV MUST NOT be included. + */ + SecurityParameters saved = m_tlsClientContext.SecurityParameters; + + m_clientExtensions[ExtensionType.renegotiation_info] = TlsProtocol.CreateRenegotiationInfo(saved.LocalVerifyData); + } + else + { + /* + * RFC 5746 3.4. Client Behavior: Initial Handshake (both full and session-resumption) + */ + + /* + * The client MUST include either an empty "renegotiation_info" extension, or the + * TLS_EMPTY_RENEGOTIATION_INFO_SCSV signaling cipher suite value in the ClientHello. + * Including both is NOT RECOMMENDED. + */ + bool noRenegExt = (null == TlsUtilities.GetExtensionData(m_clientExtensions, + ExtensionType.renegotiation_info)); + bool noRenegScsv = !Arrays.Contains(offeredCipherSuites, CipherSuite.TLS_EMPTY_RENEGOTIATION_INFO_SCSV); + + if (noRenegExt && noRenegScsv) + { + // TODO[tls13] Probably want to not add this if no pre-TLSv13 versions offered? + offeredCipherSuites = Arrays.Append(offeredCipherSuites, CipherSuite.TLS_EMPTY_RENEGOTIATION_INFO_SCSV); + } + } + + /* + * (Fallback SCSV) + * RFC 7507 4. If a client sends a ClientHello.client_version containing a lower value + * than the latest (highest-valued) version supported by the client, it SHOULD include + * the TLS_FALLBACK_SCSV cipher suite value in ClientHello.cipher_suites [..]. (The + * client SHOULD put TLS_FALLBACK_SCSV after all cipher suites that it actually intends + * to negotiate.) + */ + if (fallback && !Arrays.Contains(offeredCipherSuites, CipherSuite.TLS_FALLBACK_SCSV)) + { + offeredCipherSuites = Arrays.Append(offeredCipherSuites, CipherSuite.TLS_FALLBACK_SCSV); + } + + + + int bindersSize = null == m_clientBinders ? 0 : m_clientBinders.m_bindersSize; + + this.m_clientHello = new ClientHello(legacy_version, securityParameters.ClientRandom, legacy_session_id, + null, offeredCipherSuites, m_clientExtensions, bindersSize); + + SendClientHelloMessage(); + } + + /// + protected virtual void SendClientHelloMessage() + { + HandshakeMessageOutput message = new HandshakeMessageOutput(HandshakeType.client_hello); + m_clientHello.Encode(m_tlsClientContext, message); + + message.PrepareClientHello(m_handshakeHash, m_clientHello.BindersSize); + + if (null != m_clientBinders) + { + OfferedPsks.EncodeBinders(message, m_tlsClientContext.Crypto, m_handshakeHash, m_clientBinders); + } + + message.SendClientHello(this, m_handshakeHash, m_clientHello.BindersSize); + } + + /// + protected virtual void SendClientKeyExchange() + { + HandshakeMessageOutput message = new HandshakeMessageOutput(HandshakeType.client_key_exchange); + m_keyExchange.GenerateClientKeyExchange(message); + message.Send(this); + } + + /// + protected virtual void Skip13CertificateRequest() + { + this.m_certificateRequest = null; + } + + /// + protected virtual void Skip13ServerCertificate() + { + if (!m_selectedPsk13) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + this.m_authentication = TlsUtilities.Skip13ServerCertificate(m_tlsClientContext); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClientProtocol.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClientProtocol.cs.meta new file mode 100644 index 000000000..2fb0ea585 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsClientProtocol.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d2bd67b320f002349a70c6356de78b82 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCloseable.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCloseable.cs new file mode 100644 index 000000000..071e5e55f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCloseable.cs @@ -0,0 +1,15 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public interface TlsCloseable + { + /// + void Close(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCloseable.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCloseable.cs.meta new file mode 100644 index 000000000..73071f83c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCloseable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 318e64e00b97eaf4b9f922542de5eabb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsContext.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsContext.cs new file mode 100644 index 000000000..9ad8ee058 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsContext.cs @@ -0,0 +1,83 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Base interface for a TLS context implementation. + public interface TlsContext + { + TlsCrypto Crypto { get; } + + TlsNonceGenerator NonceGenerator { get; } + + SecurityParameters SecurityParameters { get; } + + /// Return true if this context is for a server, false otherwise. + /// true for a server based context, false for a client based one. + bool IsServer { get; } + + ProtocolVersion[] ClientSupportedVersions { get; } + + ProtocolVersion ClientVersion { get; } + + ProtocolVersion RsaPreMasterSecretVersion { get; } + + ProtocolVersion ServerVersion { get; } + + /// Used to get the resumable session, if any, used by this connection. + /// + /// Only available after the handshake has successfully completed. + /// + /// A representing the resumable session used by this connection, or null if + /// no resumable session available. + /// + TlsSession ResumableSession { get; } + + /// Used to get the session information for this connection. + /// + /// Only available after the handshake has successfully completed. Use + /// to find out if the session is resumable. + /// + /// A representing the session used by this connection. + /// + TlsSession Session { get; } + + object UserObject { get; set; } + + /// Export the value of the specified channel binding. + /// + /// Only available after the handshake has successfully completed. + /// + /// A constant specifying the channel binding to + /// export. + /// A copy of the channel binding data as a byte[], or null if the binding could not be + /// determined. + byte[] ExportChannelBinding(int channelBinding); + + /// Export (early data) keying material according to RFC 5705: "Keying Material Exporters for TLS", as + /// updated for TLS 1.3 (RFC 8446). + /// + /// NOTE: for use in settings where an exporter is needed for 0-RTT data. + /// + /// indicates which application will use the exported keys. + /// allows the application using the exporter to mix its own data with the TLS PRF + /// for the exporter output. + /// the number of bytes to generate. + /// a pseudorandom bit string of 'length' bytes generated from the (exporter_)master_secret. + byte[] ExportEarlyKeyingMaterial(string asciiLabel, byte[] context_value, int length); + + /// Export keying material according to RFC 5705: "Keying Material Exporters for TLS", as updated for + /// TLS 1.3 (RFC 8446) when negotiated. + /// indicates which application will use the exported keys. + /// allows the application using the exporter to mix its own data with the TLS PRF + /// for the exporter output. + /// the number of bytes to generate. + /// a pseudorandom bit string of 'length' bytes generated from the (exporter_)master_secret. + byte[] ExportKeyingMaterial(string asciiLabel, byte[] context_value, int length); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsContext.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsContext.cs.meta new file mode 100644 index 000000000..998f62913 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: effdfb65ed0ffd14dac9817c2549c691 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentialedAgreement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentialedAgreement.cs new file mode 100644 index 000000000..5c3e5d50c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentialedAgreement.cs @@ -0,0 +1,23 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Support interface for generating a secret based on the credentials sent by a TLS peer. + public interface TlsCredentialedAgreement + : TlsCredentials + { + /// Calculate an agreed secret based on our credentials and the public key credentials of our peer. + /// + /// public key certificate of our TLS peer. + /// the agreed secret. + /// in case of an exception on generation of the secret. + TlsSecret GenerateAgreement(TlsCertificate peerCertificate); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentialedAgreement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentialedAgreement.cs.meta new file mode 100644 index 000000000..7e6f6dfbc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentialedAgreement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 888b3dd867d47d249b767fc6fa5aeffa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentialedDecryptor.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentialedDecryptor.cs new file mode 100644 index 000000000..4976c3604 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentialedDecryptor.cs @@ -0,0 +1,23 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Base interface for a class that decrypts TLS secrets. + public interface TlsCredentialedDecryptor + : TlsCredentials + { + /// Decrypt the passed in cipher text using the parameters available. + /// the parameters to use for the decryption. + /// the cipher text containing the secret. + /// a TLS secret. + /// on a parsing or decryption error. + TlsSecret Decrypt(TlsCryptoParameters cryptoParams, byte[] ciphertext); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentialedDecryptor.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentialedDecryptor.cs.meta new file mode 100644 index 000000000..d666a2da1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentialedDecryptor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b60d2d61a0c9c8e4e9f5d392c668b8a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentialedSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentialedSigner.cs new file mode 100644 index 000000000..95d2a8f20 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentialedSigner.cs @@ -0,0 +1,30 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Support interface for generating a signature based on our private credentials. + public interface TlsCredentialedSigner + : TlsCredentials + { + /// Generate a signature against the passed in hash. + /// a message digest calculated across the message the signature is to apply to. + /// an encoded signature. + /// if the hash cannot be processed, or there is an issue with the private + /// credentials. + byte[] GenerateRawSignature(byte[] hash); + + /// Return the algorithm IDs for the signature algorithm and the associated hash it uses. + /// the full algorithm details for the signature. + SignatureAndHashAlgorithm SignatureAndHashAlgorithm { get; } + + /// + TlsStreamSigner GetStreamSigner(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentialedSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentialedSigner.cs.meta new file mode 100644 index 000000000..7946c38b5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentialedSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6cd6d011939a21b489fb463caf9705b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentials.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentials.cs new file mode 100644 index 000000000..423178dd7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentials.cs @@ -0,0 +1,16 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Base interface for interfaces/classes carrying TLS credentials. + public interface TlsCredentials + { + /// Return the certificate structure representing our identity. + /// our certificate structure. + Certificate Certificate { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentials.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentials.cs.meta new file mode 100644 index 000000000..072352f0b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsCredentials.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 21b63ffc196635440bfeb27ebbe56550 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHGroupVerifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHGroupVerifier.cs new file mode 100644 index 000000000..6e9bcf001 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHGroupVerifier.cs @@ -0,0 +1,19 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Interface for verifying explicit Diffie-Hellman group parameters. + public interface TlsDHGroupVerifier + { + /// Check whether the given DH group is acceptable for use. + /// the to check. + /// true if (and only if) the specified group is acceptable. + bool Accept(DHGroup dhGroup); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHGroupVerifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHGroupVerifier.cs.meta new file mode 100644 index 000000000..8f3ff9bed --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHGroupVerifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc63cac4c0fe605448b8234868a3be81 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHKeyExchange.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHKeyExchange.cs new file mode 100644 index 000000000..45ecdfd4e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHKeyExchange.cs @@ -0,0 +1,95 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// (D)TLS DH key exchange. + public class TlsDHKeyExchange + : AbstractTlsKeyExchange + { + private static int CheckKeyExchange(int keyExchange) + { + switch (keyExchange) + { + case KeyExchangeAlgorithm.DH_DSS: + case KeyExchangeAlgorithm.DH_RSA: + return keyExchange; + default: + throw new ArgumentException("unsupported key exchange algorithm", "keyExchange"); + } + } + + protected TlsCredentialedAgreement m_agreementCredentials; + protected TlsCertificate m_dhPeerCertificate; + + public TlsDHKeyExchange(int keyExchange) + : base(CheckKeyExchange(keyExchange)) + { + } + + public override void SkipServerCredentials() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public override void ProcessServerCredentials(TlsCredentials serverCredentials) + { + this.m_agreementCredentials = TlsUtilities.RequireAgreementCredentials(serverCredentials); + } + + public override void ProcessServerCertificate(Certificate serverCertificate) + { + this.m_dhPeerCertificate = serverCertificate.GetCertificateAt(0).CheckUsageInRole(TlsCertificateRole.DH); + } + + public override short[] GetClientCertificateTypes() + { + return new short[]{ ClientCertificateType.dss_fixed_dh, ClientCertificateType.rsa_fixed_dh }; + } + + public override void SkipClientCredentials() + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public override void ProcessClientCredentials(TlsCredentials clientCredentials) + { + this.m_agreementCredentials = TlsUtilities.RequireAgreementCredentials(clientCredentials); + } + + public override void GenerateClientKeyExchange(Stream output) + { + /* + * RFC 2246 7.4.7.2 If the client certificate already contains a suitable Diffie-Hellman + * key, then Yc is implicit and does not need to be sent again. In this case, the Client Key + * Exchange message will be sent, but will be empty. + */ + } + + public override void ProcessClientCertificate(Certificate clientCertificate) + { + this.m_dhPeerCertificate = clientCertificate.GetCertificateAt(0).CheckUsageInRole(TlsCertificateRole.DH); + } + + public override void ProcessClientKeyExchange(Stream input) + { + // For dss_fixed_dh and rsa_fixed_dh, the key arrived in the client certificate + } + + public override bool RequiresCertificateVerify + { + get { return false; } + } + + public override TlsSecret GeneratePreMasterSecret() + { + return m_agreementCredentials.GenerateAgreement(m_dhPeerCertificate); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHKeyExchange.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHKeyExchange.cs.meta new file mode 100644 index 000000000..d706ca600 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHKeyExchange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a96e99b012c947a49ae41af1f88bedbc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHUtilities.cs new file mode 100644 index 000000000..c5dea4854 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHUtilities.cs @@ -0,0 +1,163 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class TlsDHUtilities + { + public static TlsDHConfig CreateNamedDHConfig(TlsContext context, int namedGroup) + { + if (namedGroup < 0 || NamedGroup.GetFiniteFieldBits(namedGroup) < 1) + return null; + + bool padded = TlsUtilities.IsTlsV13(context); + return new TlsDHConfig(namedGroup, padded); + } + + public static DHGroup GetDHGroup(TlsDHConfig dhConfig) + { + int namedGroup = dhConfig.NamedGroup; + if (namedGroup >= 0) + return GetNamedDHGroup(namedGroup); + + return dhConfig.ExplicitGroup; + } + + public static DHGroup GetNamedDHGroup(int namedGroup) + { + switch (namedGroup) + { + case NamedGroup.ffdhe2048: + return DHStandardGroups.rfc7919_ffdhe2048; + case NamedGroup.ffdhe3072: + return DHStandardGroups.rfc7919_ffdhe3072; + case NamedGroup.ffdhe4096: + return DHStandardGroups.rfc7919_ffdhe4096; + case NamedGroup.ffdhe6144: + return DHStandardGroups.rfc7919_ffdhe6144; + case NamedGroup.ffdhe8192: + return DHStandardGroups.rfc7919_ffdhe8192; + default: + return null; + } + } + + public static int GetMinimumFiniteFieldBits(int cipherSuite) + { + /* + * NOTE: An equivalent mechanism was added to support a minimum bit-size requirement for ECC + * mooted in early drafts of RFC 8442. This requirement was removed in later drafts, so that + * mechanism is currently somewhat trivial, and this similarly so. + */ + return IsDHCipherSuite(cipherSuite) ? 1 : 0; + } + + public static bool IsDHCipherSuite(int cipherSuite) + { + switch (TlsUtilities.GetKeyExchangeAlgorithm(cipherSuite)) + { + case KeyExchangeAlgorithm.DH_anon: + case KeyExchangeAlgorithm.DH_DSS: + case KeyExchangeAlgorithm.DH_RSA: + case KeyExchangeAlgorithm.DHE_DSS: + case KeyExchangeAlgorithm.DHE_PSK: + case KeyExchangeAlgorithm.DHE_RSA: + return true; + + default: + return false; + } + } + + public static int GetNamedGroupForDHParameters(BigInteger p, BigInteger g) + { + int[] namedGroups = new int[]{ NamedGroup.ffdhe2048, NamedGroup.ffdhe3072, NamedGroup.ffdhe4096, + NamedGroup.ffdhe6144, NamedGroup.ffdhe8192 }; + + for (int i = 0; i < namedGroups.Length; ++i) + { + int namedGroup = namedGroups[i]; + DHGroup dhGroup = GetNamedDHGroup(namedGroup); + if (dhGroup != null && dhGroup.P.Equals(p) && dhGroup.G.Equals(g)) + return namedGroup; + } + + return -1; + } + + public static DHGroup GetStandardGroupForDHParameters(BigInteger p, BigInteger g) + { + DHGroup[] standardGroups = new DHGroup[] { DHStandardGroups.rfc7919_ffdhe2048, + DHStandardGroups.rfc7919_ffdhe3072, DHStandardGroups.rfc7919_ffdhe4096, DHStandardGroups.rfc7919_ffdhe6144, + DHStandardGroups.rfc7919_ffdhe8192, DHStandardGroups.rfc3526_1536, DHStandardGroups.rfc3526_2048, + DHStandardGroups.rfc3526_3072, DHStandardGroups.rfc3526_4096, DHStandardGroups.rfc3526_6144, + DHStandardGroups.rfc3526_8192, DHStandardGroups.rfc5996_768, DHStandardGroups.rfc5996_1024 }; + + for (int i = 0; i < standardGroups.Length; ++i) + { + DHGroup dhGroup = standardGroups[i]; + if (dhGroup != null && dhGroup.P.Equals(p) && dhGroup.G.Equals(g)) + return dhGroup; + } + + return null; + } + + /// + public static TlsDHConfig ReceiveDHConfig(TlsContext context, TlsDHGroupVerifier dhGroupVerifier, + Stream input) + { + BigInteger p = ReadDHParameter(input); + BigInteger g = ReadDHParameter(input); + + int namedGroup = GetNamedGroupForDHParameters(p, g); + if (namedGroup< 0) + { + DHGroup dhGroup = GetStandardGroupForDHParameters(p, g); + if (null == dhGroup) + { + dhGroup = new DHGroup(p, null, g, 0); + } + + if (!dhGroupVerifier.Accept(dhGroup)) + throw new TlsFatalAlert(AlertDescription.insufficient_security); + + return new TlsDHConfig(dhGroup); + } + + int[] clientSupportedGroups = context.SecurityParameters.ClientSupportedGroups; + if (null == clientSupportedGroups || Arrays.Contains(clientSupportedGroups, namedGroup)) + return new TlsDHConfig(namedGroup, false); + + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + /// + public static BigInteger ReadDHParameter(Stream input) + { + return new BigInteger(1, TlsUtilities.ReadOpaque16(input, 1)); + } + + /// + public static void WriteDHConfig(TlsDHConfig dhConfig, Stream output) + { + DHGroup group = GetDHGroup(dhConfig); + WriteDHParameter(group.P, output); + WriteDHParameter(group.G, output); + } + + /// + public static void WriteDHParameter(BigInteger x, Stream output) + { + TlsUtilities.WriteOpaque16(BigIntegers.AsUnsignedByteArray(x), output); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHUtilities.cs.meta new file mode 100644 index 000000000..299f30745 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58c2466add632084bb18fe5ef8cfa8e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHanonKeyExchange.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHanonKeyExchange.cs new file mode 100644 index 000000000..86a33642c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHanonKeyExchange.cs @@ -0,0 +1,128 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// (D)TLS DH_anon key exchange. + public class TlsDHanonKeyExchange + : AbstractTlsKeyExchange + { + private static int CheckKeyExchange(int keyExchange) + { + switch (keyExchange) + { + case KeyExchangeAlgorithm.DH_anon: + return keyExchange; + default: + throw new ArgumentException("unsupported key exchange algorithm", "keyExchange"); + } + } + + protected TlsDHGroupVerifier m_dhGroupVerifier; + protected TlsDHConfig m_dhConfig; + + protected TlsAgreement m_agreement; + + public TlsDHanonKeyExchange(int keyExchange, TlsDHGroupVerifier dhGroupVerifier) + : this(keyExchange, dhGroupVerifier, null) + { + } + + public TlsDHanonKeyExchange(int keyExchange, TlsDHConfig dhConfig) + : this(keyExchange, null, dhConfig) + { + } + + private TlsDHanonKeyExchange(int keyExchange, TlsDHGroupVerifier dhGroupVerifier, TlsDHConfig dhConfig) + : base(CheckKeyExchange(keyExchange)) + { + this.m_dhGroupVerifier = dhGroupVerifier; + this.m_dhConfig = dhConfig; + } + + public override void SkipServerCredentials() + { + } + + public override void ProcessServerCredentials(TlsCredentials serverCredentials) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public override void ProcessServerCertificate(Certificate serverCertificate) + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public override bool RequiresServerKeyExchange + { + get { return true; } + } + + public override byte[] GenerateServerKeyExchange() + { + MemoryStream buf = new MemoryStream(); + + TlsDHUtilities.WriteDHConfig(m_dhConfig, buf); + + this.m_agreement = m_context.Crypto.CreateDHDomain(m_dhConfig).CreateDH(); + + byte[] y = m_agreement.GenerateEphemeral(); + + TlsUtilities.WriteOpaque16(y, buf); + + return buf. ToArray(); + } + + public override void ProcessServerKeyExchange(Stream input) + { + this.m_dhConfig = TlsDHUtilities.ReceiveDHConfig(m_context, m_dhGroupVerifier, input); + + byte[] y = TlsUtilities.ReadOpaque16(input, 1); + + this.m_agreement = m_context.Crypto.CreateDHDomain(m_dhConfig).CreateDH(); + + m_agreement.ReceivePeerValue(y); + } + + public override short[] GetClientCertificateTypes() + { + return null; + } + + public override void ProcessClientCredentials(TlsCredentials clientCredentials) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public override void GenerateClientKeyExchange(Stream output) + { + byte[] y = m_agreement.GenerateEphemeral(); + + TlsUtilities.WriteOpaque16(y, output); + } + + public override void ProcessClientCertificate(Certificate clientCertificate) + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public override void ProcessClientKeyExchange(Stream input) + { + byte[] y = TlsUtilities.ReadOpaque16(input, 1); + + m_agreement.ReceivePeerValue(y); + } + + public override TlsSecret GeneratePreMasterSecret() + { + return m_agreement.CalculateSecret(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHanonKeyExchange.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHanonKeyExchange.cs.meta new file mode 100644 index 000000000..500f0ab30 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDHanonKeyExchange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3f3fdc6e677a7c4aa9c833a85e1d8e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDheKeyExchange.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDheKeyExchange.cs new file mode 100644 index 000000000..cf09992dd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDheKeyExchange.cs @@ -0,0 +1,133 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public class TlsDheKeyExchange + : AbstractTlsKeyExchange + { + private static int CheckKeyExchange(int keyExchange) + { + switch (keyExchange) + { + case KeyExchangeAlgorithm.DHE_DSS: + case KeyExchangeAlgorithm.DHE_RSA: + return keyExchange; + default: + throw new ArgumentException("unsupported key exchange algorithm", "keyExchange"); + } + } + + protected TlsDHGroupVerifier m_dhGroupVerifier; + protected TlsDHConfig m_dhConfig; + + protected TlsCredentialedSigner m_serverCredentials = null; + protected TlsCertificate m_serverCertificate = null; + protected TlsAgreement m_agreement; + + public TlsDheKeyExchange(int keyExchange, TlsDHGroupVerifier dhGroupVerifier) + : this(keyExchange, dhGroupVerifier, null) + { + } + + public TlsDheKeyExchange(int keyExchange, TlsDHConfig dhConfig) + : this(keyExchange, null, dhConfig) + { + } + + private TlsDheKeyExchange(int keyExchange, TlsDHGroupVerifier dhGroupVerifier, TlsDHConfig dhConfig) + : base(CheckKeyExchange(keyExchange)) + { + this.m_dhGroupVerifier = dhGroupVerifier; + this.m_dhConfig = dhConfig; + } + + public override void SkipServerCredentials() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public override void ProcessServerCredentials(TlsCredentials serverCredentials) + { + this.m_serverCredentials = TlsUtilities.RequireSignerCredentials(serverCredentials); + } + + public override void ProcessServerCertificate(Certificate serverCertificate) + { + this.m_serverCertificate = serverCertificate.GetCertificateAt(0); + } + + public override bool RequiresServerKeyExchange + { + get { return true; } + } + + public override byte[] GenerateServerKeyExchange() + { + DigestInputBuffer digestBuffer = new DigestInputBuffer(); + + TlsDHUtilities.WriteDHConfig(m_dhConfig, digestBuffer); + + this.m_agreement = m_context.Crypto.CreateDHDomain(m_dhConfig).CreateDH(); + + byte[] y = m_agreement.GenerateEphemeral(); + + TlsUtilities.WriteOpaque16(y, digestBuffer); + + TlsUtilities.GenerateServerKeyExchangeSignature(m_context, m_serverCredentials, null, digestBuffer); + + return digestBuffer.ToArray(); + } + + public override void ProcessServerKeyExchange(Stream input) + { + DigestInputBuffer digestBuffer = new DigestInputBuffer(); + Stream teeIn = new TeeInputStream(input, digestBuffer); + + this.m_dhConfig = TlsDHUtilities.ReceiveDHConfig(m_context, m_dhGroupVerifier, teeIn); + + byte[] y = TlsUtilities.ReadOpaque16(teeIn, 1); + + TlsUtilities.VerifyServerKeyExchangeSignature(m_context, input, m_serverCertificate, null, digestBuffer); + + this.m_agreement = m_context.Crypto.CreateDHDomain(m_dhConfig).CreateDH(); + + m_agreement.ReceivePeerValue(y); + } + + public override short[] GetClientCertificateTypes() + { + return new short[]{ ClientCertificateType.dss_sign, ClientCertificateType.ecdsa_sign, + ClientCertificateType.rsa_sign }; + } + + public override void ProcessClientCredentials(TlsCredentials clientCredentials) + { + TlsUtilities.RequireSignerCredentials(clientCredentials); + } + + public override void GenerateClientKeyExchange(Stream output) + { + byte[] y = m_agreement.GenerateEphemeral(); + + TlsUtilities.WriteOpaque16(y, output); + } + + public override void ProcessClientKeyExchange(Stream input) + { + m_agreement.ReceivePeerValue(TlsUtilities.ReadOpaque16(input, 1)); + } + + public override TlsSecret GeneratePreMasterSecret() + { + return m_agreement.CalculateSecret(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDheKeyExchange.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDheKeyExchange.cs.meta new file mode 100644 index 000000000..333965110 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsDheKeyExchange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34ce539569393a8459e2278887f90850 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsECDHKeyExchange.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsECDHKeyExchange.cs new file mode 100644 index 000000000..4b433b91e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsECDHKeyExchange.cs @@ -0,0 +1,99 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// (D)TLS ECDH key exchange (see RFC 4492). + public class TlsECDHKeyExchange + : AbstractTlsKeyExchange + { + private static int CheckKeyExchange(int keyExchange) + { + switch (keyExchange) + { + case KeyExchangeAlgorithm.ECDH_ECDSA: + case KeyExchangeAlgorithm.ECDH_RSA: + return keyExchange; + default: + throw new ArgumentException("unsupported key exchange algorithm", "keyExchange"); + } + } + + protected TlsCredentialedAgreement m_agreementCredentials; + protected TlsCertificate m_ecdhPeerCertificate; + + public TlsECDHKeyExchange(int keyExchange) + : base(CheckKeyExchange(keyExchange)) + { + } + + public override void SkipServerCredentials() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public override void ProcessServerCredentials(TlsCredentials serverCredentials) + { + this.m_agreementCredentials = TlsUtilities.RequireAgreementCredentials(serverCredentials); + } + + public override void ProcessServerCertificate(Certificate serverCertificate) + { + this.m_ecdhPeerCertificate = serverCertificate.GetCertificateAt(0).CheckUsageInRole( + TlsCertificateRole.ECDH); + } + + public override short[] GetClientCertificateTypes() + { + /* + * RFC 4492 3. [...] The ECDSA_fixed_ECDH and RSA_fixed_ECDH mechanisms are usable with + * ECDH_ECDSA and ECDH_RSA. Their use with ECDHE_ECDSA and ECDHE_RSA is prohibited because + * the use of a long-term ECDH client key would jeopardize the forward secrecy property of + * these algorithms. + */ + return new short[]{ ClientCertificateType.ecdsa_fixed_ecdh, ClientCertificateType.rsa_fixed_ecdh }; + } + + public override void SkipClientCredentials() + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public override void ProcessClientCredentials(TlsCredentials clientCredentials) + { + this.m_agreementCredentials = TlsUtilities.RequireAgreementCredentials(clientCredentials); + } + + public override void GenerateClientKeyExchange(Stream output) + { + // In this case, the Client Key Exchange message will be sent, but will be empty. + } + + public override void ProcessClientCertificate(Certificate clientCertificate) + { + this.m_ecdhPeerCertificate = clientCertificate.GetCertificateAt(0).CheckUsageInRole( + TlsCertificateRole.ECDH); + } + + public override void ProcessClientKeyExchange(Stream input) + { + // For ecdsa_fixed_ecdh and rsa_fixed_ecdh, the key arrived in the client certificate + } + + public override bool RequiresCertificateVerify + { + get { return false; } + } + + public override TlsSecret GeneratePreMasterSecret() + { + return m_agreementCredentials.GenerateAgreement(m_ecdhPeerCertificate); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsECDHKeyExchange.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsECDHKeyExchange.cs.meta new file mode 100644 index 000000000..390227f4a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsECDHKeyExchange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af82eb3736383eb4ca0be7ec7934fad9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsECDHanonKeyExchange.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsECDHanonKeyExchange.cs new file mode 100644 index 000000000..0867dadf0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsECDHanonKeyExchange.cs @@ -0,0 +1,131 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// (D)TLS ECDH_anon key exchange (see RFC 4492). + public class TlsECDHanonKeyExchange + : AbstractTlsKeyExchange + { + private static int CheckKeyExchange(int keyExchange) + { + switch (keyExchange) + { + case KeyExchangeAlgorithm.ECDH_anon: + return keyExchange; + default: + throw new ArgumentException("unsupported key exchange algorithm", "keyExchange"); + } + } + + protected TlsECConfig m_ecConfig; + + protected TlsAgreement m_agreement; + + public TlsECDHanonKeyExchange(int keyExchange) + : this(keyExchange, null) + { + } + + public TlsECDHanonKeyExchange(int keyExchange, TlsECConfig ecConfig) + : base(CheckKeyExchange(keyExchange)) + { + this.m_ecConfig = ecConfig; + } + + public override void SkipServerCredentials() + { + } + + public override void ProcessServerCredentials(TlsCredentials serverCredentials) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public override void ProcessServerCertificate(Certificate serverCertificate) + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public override bool RequiresServerKeyExchange + { + get { return true; } + } + + public override byte[] GenerateServerKeyExchange() + { + MemoryStream buf = new MemoryStream(); + + TlsEccUtilities.WriteECConfig(m_ecConfig, buf); + + this.m_agreement = m_context.Crypto.CreateECDomain(m_ecConfig).CreateECDH(); + + GenerateEphemeral(buf); + + return buf.ToArray(); + } + + public override void ProcessServerKeyExchange(Stream input) + { + this.m_ecConfig = TlsEccUtilities.ReceiveECDHConfig(m_context, input); + + byte[] point = TlsUtilities.ReadOpaque8(input, 1); + + this.m_agreement = m_context.Crypto.CreateECDomain(m_ecConfig).CreateECDH(); + + ProcessEphemeral(point); + } + + public override short[] GetClientCertificateTypes() + { + return null; + } + + public override void ProcessClientCredentials(TlsCredentials clientCredentials) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public override void GenerateClientKeyExchange(Stream output) + { + GenerateEphemeral(output); + } + + public override void ProcessClientCertificate(Certificate clientCertificate) + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public override void ProcessClientKeyExchange(Stream input) + { + byte[] point = TlsUtilities.ReadOpaque8(input, 1); + + ProcessEphemeral(point); + } + + public override TlsSecret GeneratePreMasterSecret() + { + return m_agreement.CalculateSecret(); + } + + protected virtual void GenerateEphemeral(Stream output) + { + byte[] point = m_agreement.GenerateEphemeral(); + + TlsUtilities.WriteOpaque8(point, output); + } + + protected virtual void ProcessEphemeral(byte[] point) + { + TlsEccUtilities.CheckPointEncoding(m_ecConfig.NamedGroup, point); + + this.m_agreement.ReceivePeerValue(point); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsECDHanonKeyExchange.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsECDHanonKeyExchange.cs.meta new file mode 100644 index 000000000..0769a5aec --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsECDHanonKeyExchange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2c0cb56ebb0412d418041f0d55f02aa9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsECDheKeyExchange.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsECDheKeyExchange.cs new file mode 100644 index 000000000..c6a0c6b10 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsECDheKeyExchange.cs @@ -0,0 +1,145 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// (D)TLS ECDHE key exchange (see RFC 4492). + public class TlsECDheKeyExchange + : AbstractTlsKeyExchange + { + private static int CheckKeyExchange(int keyExchange) + { + switch (keyExchange) + { + case KeyExchangeAlgorithm.ECDHE_ECDSA: + case KeyExchangeAlgorithm.ECDHE_RSA: + return keyExchange; + default: + throw new ArgumentException("unsupported key exchange algorithm", "keyExchange"); + } + } + + protected TlsECConfig m_ecConfig; + + protected TlsCredentialedSigner m_serverCredentials = null; + protected TlsCertificate m_serverCertificate = null; + protected TlsAgreement m_agreement; + + public TlsECDheKeyExchange(int keyExchange) + : this(keyExchange, null) + { + } + + public TlsECDheKeyExchange(int keyExchange, TlsECConfig ecConfig) + : base(CheckKeyExchange(keyExchange)) + { + this.m_ecConfig = ecConfig; + } + + public override void SkipServerCredentials() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public override void ProcessServerCredentials(TlsCredentials serverCredentials) + { + this.m_serverCredentials = TlsUtilities.RequireSignerCredentials(serverCredentials); + } + + public override void ProcessServerCertificate(Certificate serverCertificate) + { + this.m_serverCertificate = serverCertificate.GetCertificateAt(0); + } + + public override bool RequiresServerKeyExchange + { + get { return true; } + } + + public override byte[] GenerateServerKeyExchange() + { + DigestInputBuffer digestBuffer = new DigestInputBuffer(); + + TlsEccUtilities.WriteECConfig(m_ecConfig, digestBuffer); + + this.m_agreement = m_context.Crypto.CreateECDomain(m_ecConfig).CreateECDH(); + + GenerateEphemeral(digestBuffer); + + TlsUtilities.GenerateServerKeyExchangeSignature(m_context, m_serverCredentials, null, digestBuffer); + + return digestBuffer.ToArray(); + } + + public override void ProcessServerKeyExchange(Stream input) + { + DigestInputBuffer digestBuffer = new DigestInputBuffer(); + Stream teeIn = new TeeInputStream(input, digestBuffer); + + this.m_ecConfig = TlsEccUtilities.ReceiveECDHConfig(m_context, teeIn); + + byte[] point = TlsUtilities.ReadOpaque8(teeIn, 1); + + TlsUtilities.VerifyServerKeyExchangeSignature(m_context, input, m_serverCertificate, null, digestBuffer); + + this.m_agreement = m_context.Crypto.CreateECDomain(m_ecConfig).CreateECDH(); + + ProcessEphemeral(point); + } + + public override short[] GetClientCertificateTypes() + { + /* + * RFC 4492 3. [...] The ECDSA_fixed_ECDH and RSA_fixed_ECDH mechanisms are usable with + * ECDH_ECDSA and ECDH_RSA. Their use with ECDHE_ECDSA and ECDHE_RSA is prohibited because + * the use of a long-term ECDH client key would jeopardize the forward secrecy property of + * these algorithms. + */ + return new short[]{ ClientCertificateType.dss_sign, ClientCertificateType.ecdsa_sign, + ClientCertificateType.rsa_sign }; + } + + public override void ProcessClientCredentials(TlsCredentials clientCredentials) + { + TlsUtilities.RequireSignerCredentials(clientCredentials); + } + + public override void GenerateClientKeyExchange(Stream output) + { + GenerateEphemeral(output); + } + + public override void ProcessClientKeyExchange(Stream input) + { + byte[] point = TlsUtilities.ReadOpaque8(input, 1); + + ProcessEphemeral(point); + } + + public override TlsSecret GeneratePreMasterSecret() + { + return m_agreement.CalculateSecret(); + } + + protected virtual void GenerateEphemeral(Stream output) + { + byte[] point = m_agreement.GenerateEphemeral(); + + TlsUtilities.WriteOpaque8(point, output); + } + + protected virtual void ProcessEphemeral(byte[] point) + { + TlsEccUtilities.CheckPointEncoding(m_ecConfig.NamedGroup, point); + + this.m_agreement.ReceivePeerValue(point); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsECDheKeyExchange.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsECDheKeyExchange.cs.meta new file mode 100644 index 000000000..209a56a5f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsECDheKeyExchange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0a2e5c084ccf16243a897b994dd13dd8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsEccUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsEccUtilities.cs new file mode 100644 index 000000000..5284a8ebc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsEccUtilities.cs @@ -0,0 +1,121 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class TlsEccUtilities + { + /// + public static TlsECConfig CreateNamedECConfig(TlsContext context, int namedGroup) + { + if (NamedGroup.GetCurveBits(namedGroup) < 1) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return new TlsECConfig(namedGroup); + } + + public static int GetMinimumCurveBits(int cipherSuite) + { + /* + * NOTE: This mechanism was added to support a minimum bit-size requirement mooted in early + * drafts of RFC 8442. This requirement was removed in later drafts, so this mechanism is + * currently somewhat trivial. + */ + return IsEccCipherSuite(cipherSuite) ? 1 : 0; + } + + public static bool IsEccCipherSuite(int cipherSuite) + { + switch (TlsUtilities.GetKeyExchangeAlgorithm(cipherSuite)) + { + case KeyExchangeAlgorithm.ECDH_anon: + case KeyExchangeAlgorithm.ECDH_ECDSA: + case KeyExchangeAlgorithm.ECDH_RSA: + case KeyExchangeAlgorithm.ECDHE_ECDSA: + case KeyExchangeAlgorithm.ECDHE_PSK: + case KeyExchangeAlgorithm.ECDHE_RSA: + return true; + + default: + return false; + } + } + + /// + public static void CheckPointEncoding(int namedGroup, byte[] encoding) + { + if (TlsUtilities.IsNullOrEmpty(encoding)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + switch (namedGroup) + { + case NamedGroup.x25519: + case NamedGroup.x448: + return; + } + + switch (encoding[0]) + { + case 0x04: // uncompressed + return; + + case 0x00: // infinity + case 0x02: // compressed + case 0x03: // compressed + case 0x06: // hybrid + case 0x07: // hybrid + default: + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + } + + /// + public static TlsECConfig ReceiveECDHConfig(TlsContext context, Stream input) + { + short curveType = TlsUtilities.ReadUint8(input); + if (curveType != ECCurveType.named_curve) + throw new TlsFatalAlert(AlertDescription.handshake_failure); + + int namedGroup = TlsUtilities.ReadUint16(input); + if (NamedGroup.RefersToAnECDHCurve(namedGroup)) + { + int[] clientSupportedGroups = context.SecurityParameters.ClientSupportedGroups; + if (null == clientSupportedGroups || Arrays.Contains(clientSupportedGroups, namedGroup)) + return new TlsECConfig(namedGroup); + } + + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + /// + public static void WriteECConfig(TlsECConfig ecConfig, Stream output) + { + WriteNamedECParameters(ecConfig.NamedGroup, output); + } + + /// + public static void WriteNamedECParameters(int namedGroup, Stream output) + { + if (!NamedGroup.RefersToASpecificCurve(namedGroup)) + { + /* + * RFC 4492 5.4. All those values of NamedCurve are allowed that refer to a specific + * curve. Values of NamedCurve that indicate support for a class of explicitly defined + * curves are not allowed here [...]. + */ + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + TlsUtilities.WriteUint8(ECCurveType.named_curve, output); + TlsUtilities.CheckUint16(namedGroup); + TlsUtilities.WriteUint16(namedGroup, output); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsEccUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsEccUtilities.cs.meta new file mode 100644 index 000000000..2f8621545 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsEccUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3edd913b1aada874e8d51f4b9885f06b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsException.cs new file mode 100644 index 000000000..5e1007660 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsException.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + [Serializable] + public class TlsException + : IOException + { + public TlsException() + : base() + { + } + + public TlsException(string message) + : base(message) + { + } + + public TlsException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected TlsException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsException.cs.meta new file mode 100644 index 000000000..ef56842a3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6a3ef8895bbfa64a9c985cf30250860 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsExtensionsUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsExtensionsUtilities.cs new file mode 100644 index 000000000..3e0180dbe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsExtensionsUtilities.cs @@ -0,0 +1,1449 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public static class TlsExtensionsUtilities + { + public static IDictionary EnsureExtensionsInitialised(IDictionary extensions) + { + return extensions == null ? new Dictionary() : extensions; + } + + /// (Int32 -> byte[]) + /// an of . + /// + public static void AddAlpnExtensionClient(IDictionary extensions, + IList protocolNameList) + { + extensions[ExtensionType.application_layer_protocol_negotiation] = + CreateAlpnExtensionClient(protocolNameList); + } + + /// + public static void AddAlpnExtensionServer(IDictionary extensions, ProtocolName protocolName) + { + extensions[ExtensionType.application_layer_protocol_negotiation] = CreateAlpnExtensionServer(protocolName); + } + + /// + public static void AddCertificateAuthoritiesExtension(IDictionary extensions, + IList authorities) + { + extensions[ExtensionType.certificate_authorities] = CreateCertificateAuthoritiesExtension(authorities); + } + + /// + public static void AddClientCertificateTypeExtensionClient(IDictionary extensions, + short[] certificateTypes) + { + extensions[ExtensionType.client_certificate_type] = CreateCertificateTypeExtensionClient(certificateTypes); + } + + /// + public static void AddClientCertificateTypeExtensionServer(IDictionary extensions, + short certificateType) + { + extensions[ExtensionType.client_certificate_type] = CreateCertificateTypeExtensionServer(certificateType); + } + + public static void AddClientCertificateUrlExtension(IDictionary extensions) + { + extensions[ExtensionType.client_certificate_url] = CreateClientCertificateUrlExtension(); + } + + /// + public static void AddCompressCertificateExtension(IDictionary extensions, int[] algorithms) + { + extensions[ExtensionType.compress_certificate] = CreateCompressCertificateExtension(algorithms); + } + + /// + public static void AddCookieExtension(IDictionary extensions, byte[] cookie) + { + extensions[ExtensionType.cookie] = CreateCookieExtension(cookie); + } + + public static void AddEarlyDataIndication(IDictionary extensions) + { + extensions[ExtensionType.early_data] = CreateEarlyDataIndication(); + } + + /// + public static void AddEarlyDataMaxSize(IDictionary extensions, long maxSize) + { + extensions[ExtensionType.early_data] = CreateEarlyDataMaxSize(maxSize); + } + + public static void AddEmptyExtensionData(IDictionary extensions, int extType) + { + extensions[extType] = CreateEmptyExtensionData(); + } + + public static void AddEncryptThenMacExtension(IDictionary extensions) + { + extensions[ExtensionType.encrypt_then_mac] = CreateEncryptThenMacExtension(); + } + + public static void AddExtendedMasterSecretExtension(IDictionary extensions) + { + extensions[ExtensionType.extended_master_secret] = CreateExtendedMasterSecretExtension(); + } + + /// + public static void AddHeartbeatExtension(IDictionary extensions, + HeartbeatExtension heartbeatExtension) + { + extensions[ExtensionType.heartbeat] = CreateHeartbeatExtension(heartbeatExtension); + } + + /// + public static void AddKeyShareClientHello(IDictionary extensions, + IList clientShares) + { + extensions[ExtensionType.key_share] = CreateKeyShareClientHello(clientShares); + } + + /// + public static void AddKeyShareHelloRetryRequest(IDictionary extensions, int namedGroup) + { + extensions[ExtensionType.key_share] = CreateKeyShareHelloRetryRequest(namedGroup); + } + + /// + public static void AddKeyShareServerHello(IDictionary extensions, KeyShareEntry serverShare) + { + extensions[ExtensionType.key_share] = CreateKeyShareServerHello(serverShare); + } + + /// + public static void AddMaxFragmentLengthExtension(IDictionary extensions, short maxFragmentLength) + { + extensions[ExtensionType.max_fragment_length] = CreateMaxFragmentLengthExtension(maxFragmentLength); + } + + /// + public static void AddOidFiltersExtension(IDictionary extensions, + IDictionary filters) + { + extensions[ExtensionType.oid_filters] = CreateOidFiltersExtension(filters); + } + + /// + public static void AddPaddingExtension(IDictionary extensions, int dataLength) + { + extensions[ExtensionType.padding] = CreatePaddingExtension(dataLength); + } + + public static void AddPostHandshakeAuthExtension(IDictionary extensions) + { + extensions[ExtensionType.post_handshake_auth] = CreatePostHandshakeAuthExtension(); + } + + /// + public static void AddPreSharedKeyClientHello(IDictionary extensions, OfferedPsks offeredPsks) + { + extensions[ExtensionType.pre_shared_key] = CreatePreSharedKeyClientHello(offeredPsks); + } + + /// + public static void AddPreSharedKeyServerHello(IDictionary extensions, int selectedIdentity) + { + extensions[ExtensionType.pre_shared_key] = CreatePreSharedKeyServerHello(selectedIdentity); + } + + /// + public static void AddPskKeyExchangeModesExtension(IDictionary extensions, short[] modes) + { + extensions[ExtensionType.psk_key_exchange_modes] = CreatePskKeyExchangeModesExtension(modes); + } + + /// + public static void AddRecordSizeLimitExtension(IDictionary extensions, int recordSizeLimit) + { + extensions[ExtensionType.record_size_limit] = CreateRecordSizeLimitExtension(recordSizeLimit); + } + + /// + public static void AddServerCertificateTypeExtensionClient(IDictionary extensions, + short[] certificateTypes) + { + extensions[ExtensionType.server_certificate_type] = CreateCertificateTypeExtensionClient(certificateTypes); + } + + /// + public static void AddServerCertificateTypeExtensionServer(IDictionary extensions, + short certificateType) + { + extensions[ExtensionType.server_certificate_type] = CreateCertificateTypeExtensionServer(certificateType); + } + + /// + public static void AddServerNameExtensionClient(IDictionary extensions, + IList serverNameList) + { + extensions[ExtensionType.server_name] = CreateServerNameExtensionClient(serverNameList); + } + + /// + public static void AddServerNameExtensionServer(IDictionary extensions) + { + extensions[ExtensionType.server_name] = CreateServerNameExtensionServer(); + } + + /// + public static void AddSignatureAlgorithmsExtension(IDictionary extensions, + IList supportedSignatureAlgorithms) + { + extensions[ExtensionType.signature_algorithms] = + CreateSignatureAlgorithmsExtension(supportedSignatureAlgorithms); + } + + /// + public static void AddSignatureAlgorithmsCertExtension(IDictionary extensions, + IList supportedSignatureAlgorithms) + { + extensions[ExtensionType.signature_algorithms_cert] = + CreateSignatureAlgorithmsCertExtension(supportedSignatureAlgorithms); + } + + /// + public static void AddStatusRequestExtension(IDictionary extensions, + CertificateStatusRequest statusRequest) + { + extensions[ExtensionType.status_request] = CreateStatusRequestExtension(statusRequest); + } + + /// + public static void AddStatusRequestV2Extension(IDictionary extensions, + IList statusRequestV2) + { + extensions[ExtensionType.status_request_v2] = CreateStatusRequestV2Extension(statusRequestV2); + } + + /// + public static void AddSupportedGroupsExtension(IDictionary extensions, IList namedGroups) + { + extensions[ExtensionType.supported_groups] = CreateSupportedGroupsExtension(namedGroups); + } + + /// + public static void AddSupportedPointFormatsExtension(IDictionary extensions, + short[] ecPointFormats) + { + extensions[ExtensionType.ec_point_formats] = CreateSupportedPointFormatsExtension(ecPointFormats); + } + + /// + public static void AddSupportedVersionsExtensionClient(IDictionary extensions, + ProtocolVersion[] versions) + { + extensions[ExtensionType.supported_versions] = CreateSupportedVersionsExtensionClient(versions); + } + + /// + public static void AddSupportedVersionsExtensionServer(IDictionary extensions, + ProtocolVersion selectedVersion) + { + extensions[ExtensionType.supported_versions] = CreateSupportedVersionsExtensionServer(selectedVersion); + } + + public static void AddTruncatedHmacExtension(IDictionary extensions) + { + extensions[ExtensionType.truncated_hmac] = CreateTruncatedHmacExtension(); + } + + /// + public static void AddTrustedCAKeysExtensionClient(IDictionary extensions, + IList trustedAuthoritiesList) + { + extensions[ExtensionType.trusted_ca_keys] = CreateTrustedCAKeysExtensionClient(trustedAuthoritiesList); + } + + public static void AddTrustedCAKeysExtensionServer(IDictionary extensions) + { + extensions[ExtensionType.trusted_ca_keys] = CreateTrustedCAKeysExtensionServer(); + } + + /// an of . + /// + public static IList GetAlpnExtensionClient(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, + ExtensionType.application_layer_protocol_negotiation); + return extensionData == null ? null : ReadAlpnExtensionClient(extensionData); + } + + /// + public static ProtocolName GetAlpnExtensionServer(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, + ExtensionType.application_layer_protocol_negotiation); + return extensionData == null ? null : ReadAlpnExtensionServer(extensionData); + } + + /// + public static IList GetCertificateAuthoritiesExtension(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.certificate_authorities); + return extensionData == null ? null : ReadCertificateAuthoritiesExtension(extensionData); + } + + /// + public static short[] GetClientCertificateTypeExtensionClient(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.client_certificate_type); + return extensionData == null ? null : ReadCertificateTypeExtensionClient(extensionData); + } + + /// + public static short GetClientCertificateTypeExtensionServer(IDictionary extensions, + short defaultValue) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.client_certificate_type); + return extensionData == null ? defaultValue : ReadCertificateTypeExtensionServer(extensionData); + } + + /// + public static int[] GetCompressCertificateExtension(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.compress_certificate); + return extensionData == null ? null : ReadCompressCertificateExtension(extensionData); + } + + /// + public static byte[] GetCookieExtension(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.cookie); + return extensionData == null ? null : ReadCookieExtension(extensionData); + } + + /// + public static long GetEarlyDataMaxSize(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.early_data); + return extensionData == null ? -1L : ReadEarlyDataMaxSize(extensionData); + } + + /// + public static HeartbeatExtension GetHeartbeatExtension(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.heartbeat); + return extensionData == null ? null : ReadHeartbeatExtension(extensionData); + } + + /// + public static IList GetKeyShareClientHello(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.key_share); + return extensionData == null ? null : ReadKeyShareClientHello(extensionData); + } + + /// + public static int GetKeyShareHelloRetryRequest(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.key_share); + return extensionData == null ? -1 : ReadKeyShareHelloRetryRequest(extensionData); + } + + /// + public static KeyShareEntry GetKeyShareServerHello(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.key_share); + return extensionData == null ? null : ReadKeyShareServerHello(extensionData); + } + + /// + public static short GetMaxFragmentLengthExtension(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.max_fragment_length); + return extensionData == null ? (short)-1 : ReadMaxFragmentLengthExtension(extensionData); + } + + /// + public static IDictionary GetOidFiltersExtension( + IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.oid_filters); + return extensionData == null ? null : ReadOidFiltersExtension(extensionData); + } + + /// + public static int GetPaddingExtension(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.padding); + return extensionData == null ? -1 : ReadPaddingExtension(extensionData); + } + + /// + public static OfferedPsks GetPreSharedKeyClientHello(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.pre_shared_key); + return extensionData == null ? null : ReadPreSharedKeyClientHello(extensionData); + } + + /// + public static int GetPreSharedKeyServerHello(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.pre_shared_key); + return extensionData == null ? -1 : ReadPreSharedKeyServerHello(extensionData); + } + + /// + public static short[] GetPskKeyExchangeModesExtension(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.psk_key_exchange_modes); + return extensionData == null ? null : ReadPskKeyExchangeModesExtension(extensionData); + } + + /// + public static int GetRecordSizeLimitExtension(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.record_size_limit); + return extensionData == null ? -1 : ReadRecordSizeLimitExtension(extensionData); + } + + /// + public static short[] GetServerCertificateTypeExtensionClient(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.server_certificate_type); + return extensionData == null ? null : ReadCertificateTypeExtensionClient(extensionData); + } + + /// + public static short GetServerCertificateTypeExtensionServer(IDictionary extensions, + short defaultValue) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.server_certificate_type); + return extensionData == null ? defaultValue : ReadCertificateTypeExtensionServer(extensionData); + } + + /// + public static IList GetServerNameExtensionClient(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.server_name); + return extensionData == null ? null : ReadServerNameExtensionClient(extensionData); + } + + /// + public static IList GetSignatureAlgorithmsExtension( + IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.signature_algorithms); + return extensionData == null ? null : ReadSignatureAlgorithmsExtension(extensionData); + } + + /// + public static IList GetSignatureAlgorithmsCertExtension( + IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.signature_algorithms_cert); + return extensionData == null ? null : ReadSignatureAlgorithmsCertExtension(extensionData); + } + + /// + public static CertificateStatusRequest GetStatusRequestExtension(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.status_request); + return extensionData == null ? null : ReadStatusRequestExtension(extensionData); + } + + /// + public static IList GetStatusRequestV2Extension( + IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.status_request_v2); + return extensionData == null ? null : ReadStatusRequestV2Extension(extensionData); + } + + /// + public static int[] GetSupportedGroupsExtension(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.supported_groups); + return extensionData == null ? null : ReadSupportedGroupsExtension(extensionData); + } + + /// + public static short[] GetSupportedPointFormatsExtension(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.ec_point_formats); + return extensionData == null ? null : ReadSupportedPointFormatsExtension(extensionData); + } + + /// + public static ProtocolVersion[] GetSupportedVersionsExtensionClient(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.supported_versions); + return extensionData == null ? null : ReadSupportedVersionsExtensionClient(extensionData); + } + + /// + public static ProtocolVersion GetSupportedVersionsExtensionServer(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.supported_versions); + return extensionData == null ? null : ReadSupportedVersionsExtensionServer(extensionData); + } + + /// + public static IList GetTrustedCAKeysExtensionClient(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.trusted_ca_keys); + return extensionData == null ? null : ReadTrustedCAKeysExtensionClient(extensionData); + } + + /// + public static bool HasClientCertificateUrlExtension(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.client_certificate_url); + return extensionData == null ? false : ReadClientCertificateUrlExtension(extensionData); + } + + /// + public static bool HasEarlyDataIndication(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.early_data); + return extensionData == null ? false : ReadEarlyDataIndication(extensionData); + } + + /// + public static bool HasEncryptThenMacExtension(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.encrypt_then_mac); + return extensionData == null ? false : ReadEncryptThenMacExtension(extensionData); + } + + /// + public static bool HasExtendedMasterSecretExtension(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.extended_master_secret); + return extensionData == null ? false : ReadExtendedMasterSecretExtension(extensionData); + } + + /// + public static bool HasServerNameExtensionServer(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.server_name); + return extensionData == null ? false : ReadServerNameExtensionServer(extensionData); + } + + /// + public static bool HasPostHandshakeAuthExtension(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.post_handshake_auth); + return extensionData == null ? false : ReadPostHandshakeAuthExtension(extensionData); + } + + /// + public static bool HasTruncatedHmacExtension(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.truncated_hmac); + return extensionData == null ? false : ReadTruncatedHmacExtension(extensionData); + } + + /// + public static bool HasTrustedCAKeysExtensionServer(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.trusted_ca_keys); + return extensionData == null ? false : ReadTrustedCAKeysExtensionServer(extensionData); + } + + /// an of . + /// + public static byte[] CreateAlpnExtensionClient(IList protocolNameList) + { + if (protocolNameList == null || protocolNameList.Count < 1) + throw new TlsFatalAlert(AlertDescription.internal_error); + + MemoryStream buf = new MemoryStream(); + + // Placeholder for length + TlsUtilities.WriteUint16(0, buf); + + foreach (ProtocolName protocolName in protocolNameList) + { + protocolName.Encode(buf); + } + + return PatchOpaque16(buf); + } + + /// + public static byte[] CreateAlpnExtensionServer(ProtocolName protocolName) + { + var protocol_name_list = new List(); + protocol_name_list.Add(protocolName); + + return CreateAlpnExtensionClient(protocol_name_list); + } + + /// + public static byte[] CreateCertificateAuthoritiesExtension(IList authorities) + { + if (null == authorities || authorities.Count < 1) + throw new TlsFatalAlert(AlertDescription.internal_error); + + MemoryStream buf = new MemoryStream(); + + // Placeholder for length + TlsUtilities.WriteUint16(0, buf); + + foreach (X509Name authority in authorities) + { + byte[] derEncoding = authority.GetEncoded(Asn1Encodable.Der); + TlsUtilities.WriteOpaque16(derEncoding, buf); + } + + return PatchOpaque16(buf); + } + + /// + public static byte[] CreateCertificateTypeExtensionClient(short[] certificateTypes) + { + if (TlsUtilities.IsNullOrEmpty(certificateTypes) || certificateTypes.Length > 255) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return TlsUtilities.EncodeUint8ArrayWithUint8Length(certificateTypes); + } + + /// + public static byte[] CreateCertificateTypeExtensionServer(short certificateType) + { + return TlsUtilities.EncodeUint8(certificateType); + } + + public static byte[] CreateClientCertificateUrlExtension() + { + return CreateEmptyExtensionData(); + } + + /// + public static byte[] CreateCompressCertificateExtension(int[] algorithms) + { + if (TlsUtilities.IsNullOrEmpty(algorithms) || algorithms.Length > 127) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return TlsUtilities.EncodeUint16ArrayWithUint8Length(algorithms); + } + + /// + public static byte[] CreateCookieExtension(byte[] cookie) + { + if (TlsUtilities.IsNullOrEmpty(cookie) || cookie.Length >= (1 << 16)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return TlsUtilities.EncodeOpaque16(cookie); + } + + public static byte[] CreateEarlyDataIndication() + { + return CreateEmptyExtensionData(); + } + + /// + public static byte[] CreateEarlyDataMaxSize(long maxSize) + { + return TlsUtilities.EncodeUint32(maxSize); + } + + public static byte[] CreateEmptyExtensionData() + { + return TlsUtilities.EmptyBytes; + } + + public static byte[] CreateEncryptThenMacExtension() + { + return CreateEmptyExtensionData(); + } + + public static byte[] CreateExtendedMasterSecretExtension() + { + return CreateEmptyExtensionData(); + } + + /// + public static byte[] CreateHeartbeatExtension(HeartbeatExtension heartbeatExtension) + { + if (heartbeatExtension == null) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + MemoryStream buf = new MemoryStream(); + + heartbeatExtension.Encode(buf); + + return buf.ToArray(); + } + + /// + public static byte[] CreateKeyShareClientHello(IList clientShares) + { + if (clientShares == null || clientShares.Count < 1) + return TlsUtilities.EncodeUint16(0); + + MemoryStream buf = new MemoryStream(); + + // Placeholder for length + TlsUtilities.WriteUint16(0, buf); + + foreach (KeyShareEntry clientShare in clientShares) + { + clientShare.Encode(buf); + } + + return PatchOpaque16(buf); + } + + /// + public static byte[] CreateKeyShareHelloRetryRequest(int namedGroup) + { + return TlsUtilities.EncodeUint16(namedGroup); + } + + /// + public static byte[] CreateKeyShareServerHello(KeyShareEntry serverShare) + { + if (serverShare == null) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + MemoryStream buf = new MemoryStream(); + + serverShare.Encode(buf); + + return buf.ToArray(); + } + + /// + public static byte[] CreateMaxFragmentLengthExtension(short maxFragmentLength) + { + return TlsUtilities.EncodeUint8(maxFragmentLength); + } + + /// + public static byte[] CreateOidFiltersExtension(IDictionary filters) + { + MemoryStream buf = new MemoryStream(); + + // Placeholder for length + TlsUtilities.WriteUint16(0, buf); + + if (null != filters) + { + //foreach (DerObjectIdentifier certificateExtensionOid in filters.Keys) + foreach (var filter in filters) + { + var certificateExtensionOid = filter.Key; + var certificateExtensionValues = filter.Value; + + if (null == certificateExtensionOid || null == certificateExtensionValues) + throw new TlsFatalAlert(AlertDescription.internal_error); + + byte[] derEncoding = certificateExtensionOid.GetEncoded(Asn1Encodable.Der); + TlsUtilities.WriteOpaque8(derEncoding, buf); + + TlsUtilities.WriteOpaque16(certificateExtensionValues, buf); + } + } + + return PatchOpaque16(buf); + } + + /// + public static byte[] CreatePaddingExtension(int dataLength) + { + TlsUtilities.CheckUint16(dataLength); + return new byte[dataLength]; + } + + public static byte[] CreatePostHandshakeAuthExtension() + { + return CreateEmptyExtensionData(); + } + + /// + public static byte[] CreatePreSharedKeyClientHello(OfferedPsks offeredPsks) + { + if (offeredPsks == null) + throw new TlsFatalAlert(AlertDescription.internal_error); + + MemoryStream buf = new MemoryStream(); + + offeredPsks.Encode(buf); + + return buf.ToArray(); + } + + /// + public static byte[] CreatePreSharedKeyServerHello(int selectedIdentity) + { + return TlsUtilities.EncodeUint16(selectedIdentity); + } + + /// + public static byte[] CreatePskKeyExchangeModesExtension(short[] modes) + { + if (TlsUtilities.IsNullOrEmpty(modes) || modes.Length > 255) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return TlsUtilities.EncodeUint8ArrayWithUint8Length(modes); + } + + /// + public static byte[] CreateRecordSizeLimitExtension(int recordSizeLimit) + { + if (recordSizeLimit < 64) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return TlsUtilities.EncodeUint16(recordSizeLimit); + } + + /// + public static byte[] CreateServerNameExtensionClient(IList serverNameList) + { + if (serverNameList == null) + throw new TlsFatalAlert(AlertDescription.internal_error); + + MemoryStream buf = new MemoryStream(); + + new ServerNameList(serverNameList).Encode(buf); + + return buf.ToArray(); + } + + public static byte[] CreateServerNameExtensionServer() + { + return CreateEmptyExtensionData(); + } + + /// + public static byte[] CreateSignatureAlgorithmsExtension( + IList supportedSignatureAlgorithms) + { + MemoryStream buf = new MemoryStream(); + + TlsUtilities.EncodeSupportedSignatureAlgorithms(supportedSignatureAlgorithms, buf); + + return buf.ToArray(); + } + + /// + public static byte[] CreateSignatureAlgorithmsCertExtension( + IList supportedSignatureAlgorithms) + { + return CreateSignatureAlgorithmsExtension(supportedSignatureAlgorithms); + } + + /// + public static byte[] CreateStatusRequestExtension(CertificateStatusRequest statusRequest) + { + if (statusRequest == null) + throw new TlsFatalAlert(AlertDescription.internal_error); + + MemoryStream buf = new MemoryStream(); + + statusRequest.Encode(buf); + + return buf.ToArray(); + } + + /// + public static byte[] CreateStatusRequestV2Extension(IList statusRequestV2) + { + if (statusRequestV2 == null || statusRequestV2.Count < 1) + throw new TlsFatalAlert(AlertDescription.internal_error); + + MemoryStream buf = new MemoryStream(); + + // Placeholder for length + TlsUtilities.WriteUint16(0, buf); + + foreach (CertificateStatusRequestItemV2 entry in statusRequestV2) + { + entry.Encode(buf); + } + + return PatchOpaque16(buf); + } + + /// + public static byte[] CreateSupportedGroupsExtension(IList namedGroups) + { + if (namedGroups == null || namedGroups.Count < 1) + throw new TlsFatalAlert(AlertDescription.internal_error); + + int count = namedGroups.Count; + int[] values = new int[count]; + for (int i = 0; i < count; ++i) + { + values[i] = namedGroups[i]; + } + + return TlsUtilities.EncodeUint16ArrayWithUint16Length(values); + } + + /// + public static byte[] CreateSupportedPointFormatsExtension(short[] ecPointFormats) + { + if (ecPointFormats == null || !Arrays.Contains(ecPointFormats, ECPointFormat.uncompressed)) + { + /* + * RFC 4492 5.1. If the Supported Point Formats Extension is indeed sent, it MUST + * contain the value 0 (uncompressed) as one of the items in the list of point formats. + */ + + // NOTE: We add it at the start (highest preference) + ecPointFormats = Arrays.Prepend(ecPointFormats, ECPointFormat.uncompressed); + } + + return TlsUtilities.EncodeUint8ArrayWithUint8Length(ecPointFormats); + } + + /// + public static byte[] CreateSupportedVersionsExtensionClient(ProtocolVersion[] versions) + { + if (TlsUtilities.IsNullOrEmpty(versions) || versions.Length > 127) + throw new TlsFatalAlert(AlertDescription.internal_error); + + int count = versions.Length; + byte[] data = new byte[1 + count * 2]; + TlsUtilities.WriteUint8(count * 2, data, 0); + for (int i = 0; i < count; ++i) + { + TlsUtilities.WriteVersion(versions[i], data, 1 + i * 2); + } + return data; + } + + /// + public static byte[] CreateSupportedVersionsExtensionServer(ProtocolVersion selectedVersion) + { + return TlsUtilities.EncodeVersion(selectedVersion); + } + + public static byte[] CreateTruncatedHmacExtension() + { + return CreateEmptyExtensionData(); + } + + /// + public static byte[] CreateTrustedCAKeysExtensionClient(IList trustedAuthoritiesList) + { + MemoryStream buf = new MemoryStream(); + + // Placeholder for length + TlsUtilities.WriteUint16(0, buf); + + if (trustedAuthoritiesList != null) + { + foreach (TrustedAuthority entry in trustedAuthoritiesList) + { + entry.Encode(buf); + } + } + + return PatchOpaque16(buf); + } + + public static byte[] CreateTrustedCAKeysExtensionServer() + { + return CreateEmptyExtensionData(); + } + + /// + private static bool ReadEmptyExtensionData(byte[] extensionData) + { + if (extensionData == null) + throw new ArgumentNullException("extensionData"); + + if (extensionData.Length != 0) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + return true; + } + + /// an of . + /// + public static IList ReadAlpnExtensionClient(byte[] extensionData) + { + if (extensionData == null) + throw new ArgumentNullException("extensionData"); + + MemoryStream buf = new MemoryStream(extensionData); + + int length = TlsUtilities.ReadUint16(buf); + if (length != (extensionData.Length - 2)) + throw new TlsFatalAlert(AlertDescription.decode_error); + + var protocol_name_list = new List(); + while (buf.Position < buf.Length) + { + ProtocolName protocolName = ProtocolName.Parse(buf); + + protocol_name_list.Add(protocolName); + } + return protocol_name_list; + } + + /// + public static ProtocolName ReadAlpnExtensionServer(byte[] extensionData) + { + var protocol_name_list = ReadAlpnExtensionClient(extensionData); + if (protocol_name_list.Count != 1) + throw new TlsFatalAlert(AlertDescription.decode_error); + + return protocol_name_list[0]; + } + + /// + public static IList ReadCertificateAuthoritiesExtension(byte[] extensionData) + { + if (extensionData == null) + throw new ArgumentNullException("extensionData"); + if (extensionData.Length < 5) + throw new TlsFatalAlert(AlertDescription.decode_error); + + MemoryStream buf = new MemoryStream(extensionData); + + int length = TlsUtilities.ReadUint16(buf); + if (length != (extensionData.Length - 2)) + throw new TlsFatalAlert(AlertDescription.decode_error); + + var authorities = new List(); + while (buf.Position < buf.Length) + { + byte[] derEncoding = TlsUtilities.ReadOpaque16(buf, 1); + Asn1Object asn1 = TlsUtilities.ReadAsn1Object(derEncoding); + X509Name ca = X509Name.GetInstance(asn1); + TlsUtilities.RequireDerEncoding(ca, derEncoding); + authorities.Add(ca); + } + return authorities; + } + + /// + public static short[] ReadCertificateTypeExtensionClient(byte[] extensionData) + { + short[] certificateTypes = TlsUtilities.DecodeUint8ArrayWithUint8Length(extensionData); + if (certificateTypes.Length < 1) + throw new TlsFatalAlert(AlertDescription.decode_error); + + return certificateTypes; + } + + /// + public static short ReadCertificateTypeExtensionServer(byte[] extensionData) + { + return TlsUtilities.DecodeUint8(extensionData); + } + + /// + public static bool ReadClientCertificateUrlExtension(byte[] extensionData) + { + return ReadEmptyExtensionData(extensionData); + } + + /// + public static int[] ReadCompressCertificateExtension(byte[] extensionData) + { + int[] algorithms = TlsUtilities.DecodeUint16ArrayWithUint8Length(extensionData); + if (algorithms.Length < 1) + throw new TlsFatalAlert(AlertDescription.decode_error); + + return algorithms; + } + + /// + public static byte[] ReadCookieExtension(byte[] extensionData) + { + return TlsUtilities.DecodeOpaque16(extensionData, 1); + } + + /// + public static bool ReadEarlyDataIndication(byte[] extensionData) + { + return ReadEmptyExtensionData(extensionData); + } + + /// + public static long ReadEarlyDataMaxSize(byte[] extensionData) + { + return TlsUtilities.DecodeUint32(extensionData); + } + + /// + public static bool ReadEncryptThenMacExtension(byte[] extensionData) + { + return ReadEmptyExtensionData(extensionData); + } + + /// + public static bool ReadExtendedMasterSecretExtension(byte[] extensionData) + { + return ReadEmptyExtensionData(extensionData); + } + + /// + public static HeartbeatExtension ReadHeartbeatExtension(byte[] extensionData) + { + if (extensionData == null) + throw new ArgumentNullException("extensionData"); + + MemoryStream buf = new MemoryStream(extensionData, false); + + HeartbeatExtension heartbeatExtension = HeartbeatExtension.Parse(buf); + + TlsProtocol.AssertEmpty(buf); + + return heartbeatExtension; + } + + /// + public static IList ReadKeyShareClientHello(byte[] extensionData) + { + if (extensionData == null) + throw new ArgumentNullException("extensionData"); + + /* + * TODO[tls13] Clients MUST NOT offer multiple KeyShareEntry values for the same group. + * Clients MUST NOT offer any KeyShareEntry values for groups not listed in the client's + * "supported_groups" extension. Servers MAY check for violations of these rules and abort + * the handshake with an "illegal_parameter" alert if one is violated. + */ + + MemoryStream buf = new MemoryStream(extensionData, false); + + int length = TlsUtilities.ReadUint16(buf); + if (length != (extensionData.Length - 2)) + throw new TlsFatalAlert(AlertDescription.decode_error); + + var clientShares = new List(); + while (buf.Position < buf.Length) + { + KeyShareEntry clientShare = KeyShareEntry.Parse(buf); + + clientShares.Add(clientShare); + } + return clientShares; + } + + /// + public static int ReadKeyShareHelloRetryRequest(byte[] extensionData) + { + return TlsUtilities.DecodeUint16(extensionData); + } + + /// + public static KeyShareEntry ReadKeyShareServerHello(byte[] extensionData) + { + if (extensionData == null) + throw new ArgumentNullException("extensionData"); + + MemoryStream buf = new MemoryStream(extensionData, false); + + KeyShareEntry serverShare = KeyShareEntry.Parse(buf); + + TlsProtocol.AssertEmpty(buf); + + return serverShare; + } + + /// + public static short ReadMaxFragmentLengthExtension(byte[] extensionData) + { + return TlsUtilities.DecodeUint8(extensionData); + } + + /// + public static IDictionary ReadOidFiltersExtension(byte[] extensionData) + { + if (extensionData == null) + throw new ArgumentNullException("extensionData"); + if (extensionData.Length < 2) + throw new TlsFatalAlert(AlertDescription.decode_error); + + MemoryStream buf = new MemoryStream(extensionData, false); + + int length = TlsUtilities.ReadUint16(buf); + if (length != (extensionData.Length - 2)) + throw new TlsFatalAlert(AlertDescription.decode_error); + + var filters = new Dictionary(); + while (buf.Position < buf.Length) + { + byte[] derEncoding = TlsUtilities.ReadOpaque8(buf, 1); + Asn1Object asn1 = TlsUtilities.ReadAsn1Object(derEncoding); + DerObjectIdentifier certificateExtensionOid = DerObjectIdentifier.GetInstance(asn1); + TlsUtilities.RequireDerEncoding(certificateExtensionOid, derEncoding); + + if (filters.ContainsKey(certificateExtensionOid)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + byte[] certificateExtensionValues = TlsUtilities.ReadOpaque16(buf); + + filters[certificateExtensionOid] = certificateExtensionValues; + } + return filters; + } + + /// + public static int ReadPaddingExtension(byte[] extensionData) + { + if (extensionData == null) + throw new ArgumentNullException("extensionData"); + + if (!Arrays.AreAllZeroes(extensionData, 0, extensionData.Length)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + return extensionData.Length; + } + + /// + public static bool ReadPostHandshakeAuthExtension(byte[] extensionData) + { + return ReadEmptyExtensionData(extensionData); + } + + /// + public static OfferedPsks ReadPreSharedKeyClientHello(byte[] extensionData) + { + if (extensionData == null) + throw new ArgumentNullException("extensionData"); + + MemoryStream buf = new MemoryStream(extensionData, false); + + OfferedPsks offeredPsks = OfferedPsks.Parse(buf); + + TlsProtocol.AssertEmpty(buf); + + return offeredPsks; + } + + /// + public static int ReadPreSharedKeyServerHello(byte[] extensionData) + { + return TlsUtilities.DecodeUint16(extensionData); + } + + /// + public static short[] ReadPskKeyExchangeModesExtension(byte[] extensionData) + { + short[] modes = TlsUtilities.DecodeUint8ArrayWithUint8Length(extensionData); + if (modes.Length < 1) + throw new TlsFatalAlert(AlertDescription.decode_error); + + return modes; + } + + /// + public static int ReadRecordSizeLimitExtension(byte[] extensionData) + { + int recordSizeLimit = TlsUtilities.DecodeUint16(extensionData); + if (recordSizeLimit < 64) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + return recordSizeLimit; + } + + /// + public static IList ReadServerNameExtensionClient(byte[] extensionData) + { + if (extensionData == null) + throw new ArgumentNullException("extensionData"); + + MemoryStream buf = new MemoryStream(extensionData, false); + + ServerNameList serverNameList = ServerNameList.Parse(buf); + + TlsProtocol.AssertEmpty(buf); + + return serverNameList.ServerNames; + } + + /// + public static bool ReadServerNameExtensionServer(byte[] extensionData) + { + return ReadEmptyExtensionData(extensionData); + } + + /// + public static IList ReadSignatureAlgorithmsExtension(byte[] extensionData) + { + if (extensionData == null) + throw new ArgumentNullException("extensionData"); + + MemoryStream buf = new MemoryStream(extensionData, false); + + var supported_signature_algorithms = TlsUtilities.ParseSupportedSignatureAlgorithms(buf); + + TlsProtocol.AssertEmpty(buf); + + return supported_signature_algorithms; + } + + /// + public static IList ReadSignatureAlgorithmsCertExtension(byte[] extensionData) + { + return ReadSignatureAlgorithmsExtension(extensionData); + } + + /// + public static CertificateStatusRequest ReadStatusRequestExtension(byte[] extensionData) + { + if (extensionData == null) + throw new ArgumentNullException("extensionData"); + + MemoryStream buf = new MemoryStream(extensionData, false); + + CertificateStatusRequest statusRequest = CertificateStatusRequest.Parse(buf); + + TlsProtocol.AssertEmpty(buf); + + return statusRequest; + } + + /// + public static IList ReadStatusRequestV2Extension(byte[] extensionData) + { + if (extensionData == null) + throw new ArgumentNullException("extensionData"); + if (extensionData.Length < 3) + throw new TlsFatalAlert(AlertDescription.decode_error); + + MemoryStream buf = new MemoryStream(extensionData, false); + + int length = TlsUtilities.ReadUint16(buf); + if (length != (extensionData.Length - 2)) + throw new TlsFatalAlert(AlertDescription.decode_error); + + var statusRequestV2 = new List(); + while (buf.Position < buf.Length) + { + CertificateStatusRequestItemV2 entry = CertificateStatusRequestItemV2.Parse(buf); + statusRequestV2.Add(entry); + } + return statusRequestV2; + } + + /// + public static int[] ReadSupportedGroupsExtension(byte[] extensionData) + { + if (extensionData == null) + throw new ArgumentNullException("extensionData"); + + MemoryStream buf = new MemoryStream(extensionData, false); + + int length = TlsUtilities.ReadUint16(buf); + if (length < 2 || (length & 1) != 0) + throw new TlsFatalAlert(AlertDescription.decode_error); + + int[] namedGroups = TlsUtilities.ReadUint16Array(length / 2, buf); + + TlsProtocol.AssertEmpty(buf); + + return namedGroups; + } + + /// + public static short[] ReadSupportedPointFormatsExtension(byte[] extensionData) + { + short[] ecPointFormats = TlsUtilities.DecodeUint8ArrayWithUint8Length(extensionData); + if (!Arrays.Contains(ecPointFormats, ECPointFormat.uncompressed)) + { + /* + * RFC 4492 5.1. If the Supported Point Formats Extension is indeed sent, it MUST + * contain the value 0 (uncompressed) as one of the items in the list of point formats. + */ + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + return ecPointFormats; + } + + /// + public static ProtocolVersion[] ReadSupportedVersionsExtensionClient(byte[] extensionData) + { + if (extensionData == null) + throw new ArgumentNullException("extensionData"); + if (extensionData.Length < 3 || extensionData.Length > 255 || (extensionData.Length & 1) == 0) + throw new TlsFatalAlert(AlertDescription.decode_error); + + int length = TlsUtilities.ReadUint8(extensionData, 0); + if (length != (extensionData.Length - 1)) + throw new TlsFatalAlert(AlertDescription.decode_error); + + int count = length / 2; + ProtocolVersion[] versions = new ProtocolVersion[count]; + for (int i = 0; i < count; ++i) + { + versions[i] = TlsUtilities.ReadVersion(extensionData, 1 + i * 2); + } + return versions; + } + + /// + public static ProtocolVersion ReadSupportedVersionsExtensionServer(byte[] extensionData) + { + if (extensionData == null) + throw new ArgumentNullException("extensionData"); + if (extensionData.Length != 2) + throw new TlsFatalAlert(AlertDescription.decode_error); + + return TlsUtilities.ReadVersion(extensionData, 0); + } + + /// + public static bool ReadTruncatedHmacExtension(byte[] extensionData) + { + return ReadEmptyExtensionData(extensionData); + } + + /// + public static IList ReadTrustedCAKeysExtensionClient(byte[] extensionData) + { + if (extensionData == null) + throw new ArgumentNullException("extensionData"); + if (extensionData.Length < 2) + throw new TlsFatalAlert(AlertDescription.decode_error); + + MemoryStream buf = new MemoryStream(extensionData, false); + + int length = TlsUtilities.ReadUint16(buf); + if (length != (extensionData.Length - 2)) + throw new TlsFatalAlert(AlertDescription.decode_error); + + var trusted_authorities_list = new List(); + while (buf.Position < buf.Length) + { + TrustedAuthority entry = TrustedAuthority.Parse(buf); + trusted_authorities_list.Add(entry); + } + return trusted_authorities_list; + } + + /// + public static bool ReadTrustedCAKeysExtensionServer(byte[] extensionData) + { + return ReadEmptyExtensionData(extensionData); + } + + /// + private static byte[] PatchOpaque16(MemoryStream buf) + { + int length = Convert.ToInt32(buf.Length) - 2; + TlsUtilities.CheckUint16(length); + byte[] extensionData = buf.ToArray(); + TlsUtilities.WriteUint16(length, extensionData, 0); + return extensionData; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsExtensionsUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsExtensionsUtilities.cs.meta new file mode 100644 index 000000000..ffb2ee4b7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsExtensionsUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2391567b702142f4caa01795eaee31d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsFatalAlert.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsFatalAlert.cs new file mode 100644 index 000000000..877b2d8d8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsFatalAlert.cs @@ -0,0 +1,67 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + [Serializable] + public class TlsFatalAlert + : TlsException + { + private static string GetMessage(short alertDescription, string detailMessage) + { + string msg = Tls.AlertDescription.GetText(alertDescription); + if (null != detailMessage) + { + msg += "; " + detailMessage; + } + return msg; + } + + protected readonly byte m_alertDescription; + + public TlsFatalAlert(short alertDescription) + : this(alertDescription, null, null) + { + } + + public TlsFatalAlert(short alertDescription, string detailMessage) + : this(alertDescription, detailMessage, null) + { + } + + public TlsFatalAlert(short alertDescription, Exception alertCause) + : this(alertDescription, null, alertCause) + { + } + + public TlsFatalAlert(short alertDescription, string detailMessage, Exception alertCause) + : base(GetMessage(alertDescription, detailMessage), alertCause) + { + if (!TlsUtilities.IsValidUint8(alertDescription)) + throw new ArgumentOutOfRangeException(nameof(alertDescription)); + + m_alertDescription = (byte)alertDescription; + } + + protected TlsFatalAlert(SerializationInfo info, StreamingContext context) + : base(info, context) + { + m_alertDescription = info.GetByte("alertDescription"); + } + + public override void GetObjectData(SerializationInfo info, StreamingContext context) + { + base.GetObjectData(info, context); + info.AddValue("alertDescription", m_alertDescription); + } + + public virtual short AlertDescription + { + get { return m_alertDescription; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsFatalAlert.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsFatalAlert.cs.meta new file mode 100644 index 000000000..37068b3e5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsFatalAlert.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9917072d1bcd6049a3af265063bc4e1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsFatalAlertReceived.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsFatalAlertReceived.cs new file mode 100644 index 000000000..54ae3057f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsFatalAlertReceived.cs @@ -0,0 +1,42 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + [Serializable] + public class TlsFatalAlertReceived + : TlsException + { + protected readonly byte m_alertDescription; + + public TlsFatalAlertReceived(short alertDescription) + : base(Tls.AlertDescription.GetText(alertDescription)) + { + if (!TlsUtilities.IsValidUint8(alertDescription)) + throw new ArgumentOutOfRangeException(nameof(alertDescription)); + + m_alertDescription = (byte)alertDescription; + } + + protected TlsFatalAlertReceived(SerializationInfo info, StreamingContext context) + : base(info, context) + { + m_alertDescription = info.GetByte("alertDescription"); + } + + public override void GetObjectData(SerializationInfo info, StreamingContext context) + { + base.GetObjectData(info, context); + info.AddValue("alertDescription", m_alertDescription); + } + + public virtual short AlertDescription + { + get { return m_alertDescription; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsFatalAlertReceived.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsFatalAlertReceived.cs.meta new file mode 100644 index 000000000..dc24a7418 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsFatalAlertReceived.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6de3d8437a707a24baf11de5f612be4c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsHandshakeHash.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsHandshakeHash.cs new file mode 100644 index 000000000..b9e6f4328 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsHandshakeHash.cs @@ -0,0 +1,33 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Base interface for an object that can calculate a handshake hash. + public interface TlsHandshakeHash + : TlsHash + { + /// + void CopyBufferTo(Stream output); + + void ForceBuffering(); + + void NotifyPrfDetermined(); + + void TrackHashAlgorithm(int cryptoHashAlgorithm); + + void SealHashAlgorithms(); + + void StopTracking(); + + TlsHash ForkPrfHash(); + + byte[] GetFinalHash(int cryptoHashAlgorithm); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsHandshakeHash.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsHandshakeHash.cs.meta new file mode 100644 index 000000000..79dd27592 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsHandshakeHash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 82b75760138cad64bb240eacaccec4bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsHeartbeat.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsHeartbeat.cs new file mode 100644 index 000000000..4dd0ea74b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsHeartbeat.cs @@ -0,0 +1,17 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public interface TlsHeartbeat + { + byte[] GeneratePayload(); + + int IdleMillis { get; } + + int TimeoutMillis { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsHeartbeat.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsHeartbeat.cs.meta new file mode 100644 index 000000000..285387ae2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsHeartbeat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 44e52738917a0194ca88d0b3b06d89d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsKeyExchange.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsKeyExchange.cs new file mode 100644 index 000000000..9fbe3cd9a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsKeyExchange.cs @@ -0,0 +1,59 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// A generic interface for key exchange implementations in (D)TLS. + public interface TlsKeyExchange + { + void Init(TlsContext context); + + /// + void SkipServerCredentials(); + + /// + void ProcessServerCredentials(TlsCredentials serverCredentials); + + /// + void ProcessServerCertificate(Certificate serverCertificate); + + bool RequiresServerKeyExchange { get; } + + /// + byte[] GenerateServerKeyExchange(); + + /// + void SkipServerKeyExchange(); + + /// + void ProcessServerKeyExchange(Stream input); + + short[] GetClientCertificateTypes(); + + /// + void SkipClientCredentials(); + + /// + void ProcessClientCredentials(TlsCredentials clientCredentials); + + /// + void ProcessClientCertificate(Certificate clientCertificate); + + /// + void GenerateClientKeyExchange(Stream output); + + /// + void ProcessClientKeyExchange(Stream input); + + bool RequiresCertificateVerify { get; } + + /// + TlsSecret GeneratePreMasterSecret(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsKeyExchange.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsKeyExchange.cs.meta new file mode 100644 index 000000000..413205c07 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsKeyExchange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00701a86d8bc28b4d82dd2596bdf4775 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsKeyExchangeFactory.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsKeyExchangeFactory.cs new file mode 100644 index 000000000..f05a5acc6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsKeyExchangeFactory.cs @@ -0,0 +1,63 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Interface for a key exchange factory offering a variety of specific algorithms. + public interface TlsKeyExchangeFactory + { + /// + TlsKeyExchange CreateDHKeyExchange(int keyExchange); + + /// + TlsKeyExchange CreateDHanonKeyExchangeClient(int keyExchange, TlsDHGroupVerifier dhGroupVerifier); + + /// + TlsKeyExchange CreateDHanonKeyExchangeServer(int keyExchange, TlsDHConfig dhConfig); + + /// + TlsKeyExchange CreateDheKeyExchangeClient(int keyExchange, TlsDHGroupVerifier dhGroupVerifier); + + /// + TlsKeyExchange CreateDheKeyExchangeServer(int keyExchange, TlsDHConfig dhConfig); + + /// + TlsKeyExchange CreateECDHKeyExchange(int keyExchange); + + /// + TlsKeyExchange CreateECDHanonKeyExchangeClient(int keyExchange); + + /// + TlsKeyExchange CreateECDHanonKeyExchangeServer(int keyExchange, TlsECConfig ecConfig); + + /// + TlsKeyExchange CreateECDheKeyExchangeClient(int keyExchange); + + /// + TlsKeyExchange CreateECDheKeyExchangeServer(int keyExchange, TlsECConfig ecConfig); + + /// + TlsKeyExchange CreatePskKeyExchangeClient(int keyExchange, TlsPskIdentity pskIdentity, + TlsDHGroupVerifier dhGroupVerifier); + + /// + TlsKeyExchange CreatePskKeyExchangeServer(int keyExchange, TlsPskIdentityManager pskIdentityManager, + TlsDHConfig dhConfig, TlsECConfig ecConfig); + + /// + TlsKeyExchange CreateRsaKeyExchange(int keyExchange); + + /// + TlsKeyExchange CreateSrpKeyExchangeClient(int keyExchange, TlsSrpIdentity srpIdentity, + TlsSrpConfigVerifier srpConfigVerifier); + + /// + TlsKeyExchange CreateSrpKeyExchangeServer(int keyExchange, TlsSrpLoginParameters loginParameters); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsKeyExchangeFactory.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsKeyExchangeFactory.cs.meta new file mode 100644 index 000000000..0e5f8c8fb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsKeyExchangeFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf9c249d06ccafc4ea6bb6e3473d457e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsNoCloseNotifyException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsNoCloseNotifyException.cs new file mode 100644 index 000000000..f10a55bae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsNoCloseNotifyException.cs @@ -0,0 +1,32 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// This exception will be thrown (only) when the connection is closed by the peer without sending a + /// close_notify warning alert. + /// + /// If this happens, the TLS protocol cannot rule out truncation of the connection data (potentially + /// malicious). It may be possible to check for truncation via some property of a higher level protocol + /// built upon TLS, e.g.the Content-Length header for HTTPS. + /// + [Serializable] + public class TlsNoCloseNotifyException + : EndOfStreamException + { + public TlsNoCloseNotifyException() + : base("No close_notify alert received before connection closed") + { + } + + protected TlsNoCloseNotifyException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsNoCloseNotifyException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsNoCloseNotifyException.cs.meta new file mode 100644 index 000000000..06cf05a01 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsNoCloseNotifyException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b177d6ba3e7182e46a2bcecbff291ca2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsObjectIdentifiers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsObjectIdentifiers.cs new file mode 100644 index 000000000..5a6146feb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsObjectIdentifiers.cs @@ -0,0 +1,18 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Object Identifiers associated with TLS extensions. + public abstract class TlsObjectIdentifiers + { + /// RFC 7633 + public static readonly DerObjectIdentifier id_pe_tlsfeature = X509ObjectIdentifiers.IdPE.Branch("24"); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsObjectIdentifiers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsObjectIdentifiers.cs.meta new file mode 100644 index 000000000..55cc0f221 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsObjectIdentifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 475ff6b90b7f0614e9743b19ee88d06e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPeer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPeer.cs new file mode 100644 index 000000000..6518c875c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPeer.cs @@ -0,0 +1,134 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Base interface for a (D)TLS endpoint. + public interface TlsPeer + { + TlsCrypto Crypto { get; } + + void NotifyCloseHandle(TlsCloseable closehandle); + + /// + void Cancel(); + + ProtocolVersion[] GetProtocolVersions(); + + int[] GetCipherSuites(); + + /// Notifies the peer that a new handshake is about to begin. + /// + void NotifyHandshakeBeginning(); + + /// Specify the timeout, in milliseconds, to use for the complete handshake process. + /// + /// NOTE: Currently only respected by DTLS protocols. Negative values are not allowed. A timeout of zero means + /// an infinite timeout (i.e.the handshake will never time out). + /// + /// the handshake timeout, in milliseconds. + int GetHandshakeTimeoutMillis(); + + bool AllowLegacyResumption(); + + int GetMaxCertificateChainLength(); + + int GetMaxHandshakeMessageSize(); + + short[] GetPskKeyExchangeModes(); + + /// + /// This option is provided as a last resort for interoperability with TLS peers that fail to correctly send a + /// close_notify alert at end of stream. Implementations SHOULD return true; caution is advised if returning + /// false without a full understanding of the implications. + /// + bool RequiresCloseNotify(); + + /// This implementation supports RFC 7627 and will always negotiate the extended_master_secret + /// extension where possible. When connecting to a peer that does not offer/accept this extension, it is + /// recommended to abort the handshake.This option is provided for interoperability with legacy peers, although + /// some TLS features will be disabled in that case (see RFC 7627 5.4). + /// + /// true if the handshake should be aborted when the peer does not negotiate the + /// extended_master_secret extension, or false to support legacy interoperability. + bool RequiresExtendedMasterSecret(); + + bool ShouldUseExtendedMasterSecret(); + + /// See RFC 5246 6.2.3.2. Controls whether block cipher encryption may randomly add extra padding + /// beyond the minimum. + /// + /// Note that in configurations where this is known to be potential security risk this setting will be ignored + /// (and extended padding disabled). Extra padding is always supported when decrypting received records. + /// + /// true if random extra padding should be added during block cipher encryption, or + /// false to always use the minimum amount of required padding. + bool ShouldUseExtendedPadding(); + + /// draft-mathewson-no-gmtunixtime-00 2. "If existing users of a TLS implementation may rely on + /// gmt_unix_time containing the current time, we recommend that implementors MAY provide the ability to set + /// gmt_unix_time as an option only, off by default.". + /// + /// NOTE: For a server that has negotiated TLS 1.3 (or later), or a client that has offered TLS 1.3 (or later), + /// this is not called and gmt_unix_time is not used. + /// + /// true if the current time should be used in the gmt_unix_time field of Random, or + /// false if gmt_unix_time should contain a cryptographically random value. + bool ShouldUseGmtUnixTime(); + + /// RFC 5746 3.4/3.6. In case this is false, peers may want to terminate the handshake instead of + /// continuing; see Section 4.1/4.3 for discussion. + /// + /// NOTE: TLS 1.3 forbids renegotiation, so this is never called when TLS 1.3 (or later) was negotiated. + /// + /// + void NotifySecureRenegotiation(bool secureRenegotiation); + + /// + TlsKeyExchangeFactory GetKeyExchangeFactory(); + + /// This method will be called when an alert is raised by the protocol. + /// + /// + /// A human-readable message explaining what caused this alert. May be null. + /// The that caused this alert to be raised. May be null. + void NotifyAlertRaised(short alertLevel, short alertDescription, string message, Exception cause); + + /// This method will be called when an alert is received from the remote peer. + /// + /// + void NotifyAlertReceived(short alertLevel, short alertDescription); + + /// Notifies the peer that the handshake has been successfully completed. + /// + void NotifyHandshakeComplete(); + + /// Return a instance that will control the generation of heartbeats + /// locally (if permitted by the remote peer), or null to not generate heartbeats. Heartbeats are described in + /// RFC 6520. + /// an instance of . + /// + TlsHeartbeat GetHeartbeat(); + + /// Return the heartbeat mode applicable to the remote peer. Heartbeats are described in RFC 6520. + /// + /// + /// See enumeration class for appropriate return values. + /// + /// the value. + short GetHeartbeatPolicy(); + + /// Indicates whether a DTLS connection should ignore corrupt records (bad_record_mac) instead of + /// failing the connection. + /// Called only once at the start of a connection and applies throughout. + /// The value true to ignore corrupt DTLS records, or false to fail the connection. + /// + bool IgnoreCorruptDtlsRecords { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPeer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPeer.cs.meta new file mode 100644 index 000000000..677142c40 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPeer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cac1e59d41bf46a43afdbb4ac6980fcb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsProtocol.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsProtocol.cs new file mode 100644 index 000000000..df22a576e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsProtocol.cs @@ -0,0 +1,2203 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.Connections.TLS; +using BestHTTP.PlatformSupport.Threading; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class TlsProtocol + : TlsCloseable + { + /* + * Connection States. + * + * NOTE: Redirection of handshake messages to TLS 1.3 handlers assumes CS_START, CS_CLIENT_HELLO + * are lower than any of the other values. + */ + protected const short CS_START = 0; + protected const short CS_CLIENT_HELLO = 1; + protected const short CS_SERVER_HELLO_RETRY_REQUEST = 2; + protected const short CS_CLIENT_HELLO_RETRY = 3; + protected const short CS_SERVER_HELLO = 4; + protected const short CS_SERVER_ENCRYPTED_EXTENSIONS = 5; + protected const short CS_SERVER_SUPPLEMENTAL_DATA = 6; + protected const short CS_SERVER_CERTIFICATE = 7; + protected const short CS_SERVER_CERTIFICATE_STATUS = 8; + protected const short CS_SERVER_CERTIFICATE_VERIFY = 9; + protected const short CS_SERVER_KEY_EXCHANGE = 10; + protected const short CS_SERVER_CERTIFICATE_REQUEST = 11; + protected const short CS_SERVER_HELLO_DONE = 12; + protected const short CS_CLIENT_END_OF_EARLY_DATA = 13; + protected const short CS_CLIENT_SUPPLEMENTAL_DATA = 14; + protected const short CS_CLIENT_CERTIFICATE = 15; + protected const short CS_CLIENT_KEY_EXCHANGE = 16; + protected const short CS_CLIENT_CERTIFICATE_VERIFY = 17; + protected const short CS_CLIENT_FINISHED = 18; + protected const short CS_SERVER_SESSION_TICKET = 19; + protected const short CS_SERVER_FINISHED = 20; + protected const short CS_END = 21; + + protected bool IsLegacyConnectionState() + { + switch (m_connectionState) + { + case CS_START: + case CS_CLIENT_HELLO: + case CS_SERVER_HELLO: + case CS_SERVER_SUPPLEMENTAL_DATA: + case CS_SERVER_CERTIFICATE: + case CS_SERVER_CERTIFICATE_STATUS: + case CS_SERVER_KEY_EXCHANGE: + case CS_SERVER_CERTIFICATE_REQUEST: + case CS_SERVER_HELLO_DONE: + case CS_CLIENT_SUPPLEMENTAL_DATA: + case CS_CLIENT_CERTIFICATE: + case CS_CLIENT_KEY_EXCHANGE: + case CS_CLIENT_CERTIFICATE_VERIFY: + case CS_CLIENT_FINISHED: + case CS_SERVER_SESSION_TICKET: + case CS_SERVER_FINISHED: + case CS_END: + return true; + + case CS_SERVER_HELLO_RETRY_REQUEST: + case CS_CLIENT_HELLO_RETRY: + case CS_SERVER_ENCRYPTED_EXTENSIONS: + case CS_SERVER_CERTIFICATE_VERIFY: + case CS_CLIENT_END_OF_EARLY_DATA: + default: + return false; + } + } + + protected bool IsTlsV13ConnectionState() + { + switch (m_connectionState) + { + case CS_START: + case CS_CLIENT_HELLO: + case CS_SERVER_HELLO_RETRY_REQUEST: + case CS_CLIENT_HELLO_RETRY: + case CS_SERVER_HELLO: + case CS_SERVER_ENCRYPTED_EXTENSIONS: + case CS_SERVER_CERTIFICATE_REQUEST: + case CS_SERVER_CERTIFICATE: + case CS_SERVER_CERTIFICATE_VERIFY: + case CS_SERVER_FINISHED: + case CS_CLIENT_END_OF_EARLY_DATA: + case CS_CLIENT_CERTIFICATE: + case CS_CLIENT_CERTIFICATE_VERIFY: + case CS_CLIENT_FINISHED: + case CS_END: + return true; + + case CS_SERVER_SUPPLEMENTAL_DATA: + case CS_SERVER_CERTIFICATE_STATUS: + case CS_SERVER_KEY_EXCHANGE: + case CS_SERVER_HELLO_DONE: + case CS_CLIENT_SUPPLEMENTAL_DATA: + case CS_CLIENT_KEY_EXCHANGE: + case CS_SERVER_SESSION_TICKET: + default: + return false; + } + } + + /* + * Different modes to handle the known IV weakness + */ + protected const short ADS_MODE_1_Nsub1 = 0; // 1/n-1 record splitting + protected const short ADS_MODE_0_N = 1; // 0/n record splitting + protected const short ADS_MODE_0_N_FIRSTONLY = 2; // 0/n record splitting on first data fragment only + + /* + * Queues for data from some protocols. + */ + private readonly ByteQueue m_applicationDataQueue = new ByteQueue(0); + private readonly ByteQueue m_alertQueue = new ByteQueue(2); + private readonly ByteQueue m_handshakeQueue = new ByteQueue(0); + //private readonly ByteQueue m_heartbeatQueue = new ByteQueue(0); + + internal readonly RecordStream m_recordStream; + //internal readonly object m_recordWriteLock = new object(); + + private int m_maxHandshakeMessageSize = -1; + + internal TlsHandshakeHash m_handshakeHash; + + private TlsStream m_tlsStream = null; + + private volatile bool m_closed = false; + private volatile bool m_failedWithError = false; + private volatile bool m_appDataReady = false; + private volatile bool m_appDataSplitEnabled = true; + private volatile bool m_keyUpdateEnabled = false; + //private volatile bool m_keyUpdatePendingReceive = false; + private volatile bool m_keyUpdatePendingSend = false; + private volatile bool m_resumableHandshake = false; + private volatile int m_appDataSplitMode = ADS_MODE_1_Nsub1; + + protected TlsSession m_tlsSession = null; + protected SessionParameters m_sessionParameters = null; + protected TlsSecret m_sessionMasterSecret = null; + + protected byte[] m_retryCookie = null; + protected int m_retryGroup = -1; + protected IDictionary m_clientExtensions = null; + protected IDictionary m_serverExtensions = null; + + protected short m_connectionState = CS_START; + protected bool m_selectedPsk13 = false; + protected bool m_receivedChangeCipherSpec = false; + protected bool m_expectSessionTicket = false; + + protected readonly bool m_blocking; + protected readonly ByteQueueInputStream m_inputBuffers; + protected readonly ByteQueueOutputStream m_outputBuffer; + + protected TlsProtocol() + { + this.m_blocking = false; + this.m_inputBuffers = new ByteQueueInputStream(); + this.m_outputBuffer = new ByteQueueOutputStream(); + this.m_recordStream = new RecordStream(this, m_inputBuffers, m_outputBuffer); + } + + public TlsProtocol(Stream stream) + : this(stream, stream) + { + } + + public TlsProtocol(Stream input, Stream output) + { + this.m_blocking = true; + this.m_inputBuffers = null; + this.m_outputBuffer = null; + this.m_recordStream = new RecordStream(this, input, output); + } + + /// + public virtual void ResumeHandshake() + { + if (!m_blocking) + throw new InvalidOperationException("Cannot use ResumeHandshake() in non-blocking mode!"); + if (!IsHandshaking) + throw new InvalidOperationException("No handshake in progress"); + + BlockForHandshake(); + } + + /// + protected virtual void CloseConnection() + { + m_recordStream.Close(); + } + + protected abstract TlsContext Context { get; } + + internal abstract AbstractTlsContext ContextAdmin { get; } + + protected abstract TlsPeer Peer { get; } + + /// + protected virtual void HandleAlertMessage(short alertLevel, short alertDescription) + { + Peer.NotifyAlertReceived(alertLevel, alertDescription); + + if (alertLevel == AlertLevel.warning) + { + HandleAlertWarningMessage(alertDescription); + } + else + { + HandleFailure(); + + throw new TlsFatalAlertReceived(alertDescription); + } + } + + /// + protected virtual void HandleAlertWarningMessage(short alertDescription) + { + switch (alertDescription) + { + /* + * RFC 5246 7.2.1. The other party MUST respond with a close_notify alert of its own + * and close down the connection immediately, discarding any pending writes. + */ + case AlertDescription.close_notify: + { + if (!m_appDataReady) + throw new TlsFatalAlert(AlertDescription.handshake_failure); + + HandleClose(false); + break; + } + case AlertDescription.no_certificate: + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + case AlertDescription.no_renegotiation: + { + // TODO[reneg] Give peer the option to tolerate this + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + } + } + + /// + protected virtual void HandleChangeCipherSpecMessage() + { + } + + /// + protected virtual void HandleClose(bool user_canceled) + { + if (!m_closed) + { + this.m_closed = true; + + if (!m_appDataReady) + { + CleanupHandshake(); + + if (user_canceled) + { + RaiseAlertWarning(AlertDescription.user_canceled, "User canceled handshake"); + } + } + + RaiseAlertWarning(AlertDescription.close_notify, "Connection closed"); + + CloseConnection(); + } + } + + /// + protected virtual void HandleException(short alertDescription, string message, Exception e) + { + // TODO[tls-port] Can we support interrupted IO on .NET? + //if ((m_appDataReady || IsResumableHandshake()) && (e is InterruptedIOException)) + // return; + + if (!m_closed) + { + RaiseAlertFatal(alertDescription, message, e); + + HandleFailure(); + } + } + + /// + protected virtual void HandleFailure() + { + this.m_closed = true; + this.m_failedWithError = true; + + /* + * RFC 2246 7.2.1. The session becomes unresumable if any connection is terminated + * without proper close_notify messages with level equal to warning. + */ + // TODO This isn't quite in the right place. Also, as of TLS 1.1 the above is obsolete. + InvalidateSession(); + + if (!m_appDataReady) + { + CleanupHandshake(); + } + + CloseConnection(); + } + + /// + protected abstract void HandleHandshakeMessage(short type, HandshakeMessageInput buf); + + /// + protected virtual void ApplyMaxFragmentLengthExtension(short maxFragmentLength) + { + if (maxFragmentLength >= 0) + { + if (!MaxFragmentLength.IsValid(maxFragmentLength)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + int plainTextLimit = 1 << (8 + maxFragmentLength); + m_recordStream.SetPlaintextLimit(plainTextLimit); + } + } + + /// + protected virtual void CheckReceivedChangeCipherSpec(bool expected) + { + if (expected != m_receivedChangeCipherSpec) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + /// + protected virtual void BlockForHandshake() + { + while (m_connectionState != CS_END) + { + if (IsClosed) + { + // NOTE: Any close during the handshake should have raised an exception. + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + using (new WriteLock(this.applicationDataLock)) + SafeReadRecord(); + } + } + + protected virtual void handleRenegotiation() + { + // TODO: check whether renegotiation is enabled or not and call BeginHandshake/RefuseRenegotiation accordingly. + BeginHandshake(true); + } + + /// + protected virtual void BeginHandshake(bool renegotiation) + { + AbstractTlsContext context = ContextAdmin; + TlsPeer peer = Peer; + + this.m_maxHandshakeMessageSize = System.Math.Max(1024, peer.GetMaxHandshakeMessageSize()); + + this.m_handshakeHash = new DeferredHash(context); + this.m_connectionState = CS_START; + this.m_selectedPsk13 = false; + + context.HandshakeBeginning(peer); + + SecurityParameters securityParameters = context.SecurityParameters; + + if (renegotiation != securityParameters.IsRenegotiating) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + securityParameters.m_extendedPadding = peer.ShouldUseExtendedPadding(); + } + + protected virtual void CleanupHandshake() + { + TlsContext context = Context; + if (null != context) + { + SecurityParameters securityParameters = context.SecurityParameters; + if (null != securityParameters) + { + securityParameters.Clear(); + } + } + + this.m_tlsSession = null; + this.m_sessionParameters = null; + this.m_sessionMasterSecret = null; + + this.m_retryCookie = null; + this.m_retryGroup = -1; + this.m_clientExtensions = null; + this.m_serverExtensions = null; + + this.m_selectedPsk13 = false; + this.m_receivedChangeCipherSpec = false; + this.m_expectSessionTicket = false; + } + + /// + protected virtual void CompleteHandshake() + { + try + { + AbstractTlsContext context = ContextAdmin; + SecurityParameters securityParameters = context.SecurityParameters; + + if ((!context.IsHandshaking && !securityParameters.IsRenegotiating) || + null == securityParameters.LocalVerifyData || + null == securityParameters.PeerVerifyData) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + m_recordStream.FinaliseHandshake(); + this.m_connectionState = CS_END; + + // TODO Prefer to set to null, but would need guards elsewhere + this.m_handshakeHash = new DeferredHash(context); + + m_alertQueue.Shrink(); + m_handshakeQueue.Shrink(); + + ProtocolVersion negotiatedVersion = securityParameters.NegotiatedVersion; + + this.m_appDataSplitEnabled = !TlsUtilities.IsTlsV11(negotiatedVersion); + this.m_appDataReady = true; + + this.m_keyUpdateEnabled = TlsUtilities.IsTlsV13(negotiatedVersion); + + if (m_blocking) + { + this.m_tlsStream = new TlsStream(this); + } + + if (m_sessionParameters == null) + { + this.m_sessionMasterSecret = securityParameters.MasterSecret; + + this.m_sessionParameters = new SessionParameters.Builder() + .SetCipherSuite(securityParameters.CipherSuite) + .SetExtendedMasterSecret(securityParameters.IsExtendedMasterSecret) + .SetLocalCertificate(securityParameters.LocalCertificate) + .SetMasterSecret(context.Crypto.AdoptSecret(m_sessionMasterSecret)) + .SetNegotiatedVersion(securityParameters.NegotiatedVersion) + .SetPeerCertificate(securityParameters.PeerCertificate) + .SetPskIdentity(securityParameters.PskIdentity) + .SetSrpIdentity(securityParameters.SrpIdentity) + // TODO Consider filtering extensions that aren't relevant to resumed sessions + .SetServerExtensions(m_serverExtensions) + .Build(); + + this.m_tlsSession = TlsUtilities.ImportSession(securityParameters.SessionID, m_sessionParameters); + } + else + { + securityParameters.m_localCertificate = m_sessionParameters.LocalCertificate; + securityParameters.m_peerCertificate = m_sessionParameters.PeerCertificate; + securityParameters.m_pskIdentity = m_sessionParameters.PskIdentity; + securityParameters.m_srpIdentity = m_sessionParameters.SrpIdentity; + } + + context.HandshakeComplete(Peer, m_tlsSession); + } + finally + { + CleanupHandshake(); + } + } + + /// + internal void ProcessRecord(short protocol, byte[] buf, int off, int len) + { + /* + * Have a look at the protocol type, and add it to the correct queue. + */ + switch (protocol) + { + case ContentType.alert: + { + m_alertQueue.AddData(buf, off, len); + ProcessAlertQueue(); + break; + } + case ContentType.application_data: + { + if (!m_appDataReady) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + m_applicationDataQueue.AddData(buf, off, len); + ProcessApplicationDataQueue(); + break; + } + case ContentType.change_cipher_spec: + { + ProcessChangeCipherSpec(buf, off, len); + break; + } + case ContentType.handshake: + { + if (m_handshakeQueue.Available > 0) + { + m_handshakeQueue.AddData(buf, off, len); + ProcessHandshakeQueue(m_handshakeQueue); + } + else + { + ByteQueue tmpQueue = new ByteQueue(buf, off, len); + ProcessHandshakeQueue(tmpQueue); + int remaining = tmpQueue.Available; + if (remaining > 0) + { + m_handshakeQueue.AddData(buf, off + len - remaining, remaining); + } + } + break; + } + //case ContentType.heartbeat: + //{ + // if (!m_appDataReady) + // throw new TlsFatalAlert(AlertDescription.unexpected_message); + + // // TODO[RFC 6520] + // m_heartbeatQueue.addData(buf, off, len); + // ProcessHeartbeatQueue(); + // break; + //} + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + } + + /// + private void ProcessHandshakeQueue(ByteQueue queue) + { + /* + * We need the first 4 bytes, they contain type and length of the message. + */ + while (queue.Available >= 4) + { + int header = queue.ReadInt32(); + + short type = (short)((uint)header >> 24); + if (!HandshakeType.IsRecognized(type)) + { + throw new TlsFatalAlert(AlertDescription.unexpected_message, + "Handshake message of unrecognized type: " + type); + } + + int length = header & 0x00FFFFFF; + if (length > m_maxHandshakeMessageSize) + { + throw new TlsFatalAlert(AlertDescription.internal_error, + "Handshake message length exceeds the maximum: " + HandshakeType.GetText(type) + ", " + length + + " > " + m_maxHandshakeMessageSize); + } + + int totalLength = 4 + length; + if (queue.Available < totalLength) + { + // Not enough bytes in the buffer to read the full message. + break; + } + + /* + * Check ChangeCipherSpec status + */ + switch (type) + { + case HandshakeType.hello_request: + break; + + default: + { + ProtocolVersion negotiatedVersion = Context.ServerVersion; + if (null != negotiatedVersion && TlsUtilities.IsTlsV13(negotiatedVersion)) + break; + + CheckReceivedChangeCipherSpec(HandshakeType.finished == type); + break; + } + } + + HandshakeMessageInput buf = queue.ReadHandshakeMessage(totalLength); + + switch (type) + { + /* + * These message types aren't included in the transcript. + */ + case HandshakeType.hello_request: + case HandshakeType.key_update: + break; + + /* + * Not included in the transcript for (D)TLS 1.3+ + */ + case HandshakeType.new_session_ticket: + { + ProtocolVersion negotiatedVersion = Context.ServerVersion; + if (null != negotiatedVersion && !TlsUtilities.IsTlsV13(negotiatedVersion)) + { + buf.UpdateHash(m_handshakeHash); + } + + break; + } + + /* + * These message types are deferred to the handler to explicitly update the transcript. + */ + case HandshakeType.certificate_verify: + case HandshakeType.client_hello: + case HandshakeType.finished: + case HandshakeType.server_hello: + break; + + /* + * For all others we automatically update the transcript immediately. + */ + default: + { + buf.UpdateHash(m_handshakeHash); + break; + } + } + + buf.Seek(4L, SeekOrigin.Current); + + HandleHandshakeMessage(type, buf); + } + } + + private void ProcessApplicationDataQueue() + { + /* + * There is nothing we need to do here. + * + * This function could be used for callbacks when application data arrives in the future. + */ + } + + /// + private void ProcessAlertQueue() + { + while (m_alertQueue.Available >= 2) + { + /* + * An alert is always 2 bytes. Read the alert. + */ + byte[] alert = m_alertQueue.RemoveData(2, 0); + short alertLevel = alert[0]; + short alertDescription = alert[1]; + + HandleAlertMessage(alertLevel, alertDescription); + } + } + + /// This method is called, when a change cipher spec message is received. + /// If the message has an invalid content or the handshake is not in the correct + /// state. + private void ProcessChangeCipherSpec(byte[] buf, int off, int len) + { + ProtocolVersion negotiatedVersion = Context.ServerVersion; + if (null == negotiatedVersion || TlsUtilities.IsTlsV13(negotiatedVersion)) + { + // See RFC 8446 D.4. + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + for (int i = 0; i < len; ++i) + { + short message = TlsUtilities.ReadUint8(buf, off + i); + + if (message != ChangeCipherSpec.change_cipher_spec) + throw new TlsFatalAlert(AlertDescription.decode_error); + + if (this.m_receivedChangeCipherSpec + || m_alertQueue.Available > 0 + || m_handshakeQueue.Available > 0) + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + m_recordStream.NotifyChangeCipherSpecReceived(); + + this.m_receivedChangeCipherSpec = true; + + HandleChangeCipherSpecMessage(); + } + } + + public virtual int ApplicationDataAvailable + { + get { return m_applicationDataQueue.Available; } + } + + /// Read data from the network. + /// + /// The method will return immediately, if there is still some data left in the buffer, or block until some + /// application data has been read from the network. + /// + /// The buffer where the data will be copied to. + /// The position where the data will be placed in the buffer. + /// The maximum number of bytes to read. + /// The number of bytes read. + /// If something goes wrong during reading data. + public virtual int ReadApplicationData(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return ReadApplicationData(buffer.AsSpan(offset, count)); +#else + if (!m_appDataReady) + throw new InvalidOperationException("Cannot read application data until initial handshake completed."); + + using (new WriteLock(this.applicationDataLock)) + { + while (m_applicationDataQueue.Available < 1) + { + if (this.m_closed) + { + if (this.m_failedWithError) + throw new IOException("Cannot read application data on failed TLS connection"); + + return 0; + } + + /* + * NOTE: Only called more than once when empty records are received, so no special + * InterruptedIOException handling is necessary. + */ + SafeReadRecord(); + } + + if (count > 0) + { + count = System.Math.Min(count, m_applicationDataQueue.Available); + m_applicationDataQueue.RemoveData(buffer, offset, count, 0); + } + return count; + } +#endif + } + + System.Threading.ReaderWriterLockSlim applicationDataLock = new System.Threading.ReaderWriterLockSlim(); + + public bool TryEnterApplicationDataLock(int millisecondsTimeout) + { + return this.applicationDataLock.TryEnterWriteLock(millisecondsTimeout); + } + + public void ExitApplicationDataLock() + { + this.applicationDataLock.ExitWriteLock(); + } + + public int TestApplicationData() + { + using (new WriteLock(this.applicationDataLock)) + { + while (m_applicationDataQueue.Available == 0) + { + if (this.m_closed) + { + if (this.m_failedWithError) + throw new IOException("Cannot read application data on failed TLS connection"); + + return -1; + } + if (!m_appDataReady) + throw new InvalidOperationException("Cannot read application data until initial handshake completed."); + + /* + * NOTE: Only called more than once when empty records are received, so no special + * InterruptedIOException handling is necessary. + */ + SafeReadRecord(); + } + + return m_applicationDataQueue.Available; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual int ReadApplicationData(Span buffer) + { + if (!m_appDataReady) + throw new InvalidOperationException("Cannot read application data until initial handshake completed."); + + while (m_applicationDataQueue.Available < 1) + { + if (this.m_closed) + { + if (this.m_failedWithError) + throw new IOException("Cannot read application data on failed TLS connection"); + + return 0; + } + + /* + * NOTE: Only called more than once when empty records are received, so no special + * InterruptedIOException handling is necessary. + */ + SafeReadRecord(); + } + + int count = buffer.Length; + if (count > 0) + { + count = System.Math.Min(count, m_applicationDataQueue.Available); + m_applicationDataQueue.RemoveData(buffer[..count], 0); + } + return count; + } +#endif + + /// + protected virtual RecordPreview SafePreviewRecordHeader(byte[] recordHeader) + { + try + { + return m_recordStream.PreviewRecordHeader(recordHeader); + } + catch (TlsFatalAlert e) + { + HandleException(e.AlertDescription, "Failed to read record", e); + throw e; + } + catch (IOException e) + { + HandleException(AlertDescription.internal_error, "Failed to read record", e); + throw e; + } + catch (Exception e) + { + HandleException(AlertDescription.internal_error, "Failed to read record", e); + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + } + + /// + protected virtual void SafeReadRecord() + { + try + { + if (m_recordStream.ReadRecord()) + return; + + if (!m_appDataReady) + throw new TlsFatalAlert(AlertDescription.handshake_failure); + + if (!Peer.RequiresCloseNotify()) + { + HandleClose(false); + return; + } + } + catch (TlsFatalAlertReceived e) + { + // Connection failure already handled at source + throw; + } + catch (TlsFatalAlert e) + { + HandleException(e.AlertDescription, "Failed to read record", e); + throw; + } + catch (IOException e) + { + HandleException(AlertDescription.internal_error, "Failed to read record", e); + throw; + } + catch (Exception e) + { + HandleException(AlertDescription.internal_error, "Failed to read record", e); + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + + HandleFailure(); + + throw new TlsNoCloseNotifyException(); + } + + /// + protected virtual bool SafeReadFullRecord(byte[] input, int inputOff, int inputLen) + { + try + { + return m_recordStream.ReadFullRecord(input, inputOff, inputLen); + } + catch (TlsFatalAlert e) + { + HandleException(e.AlertDescription, "Failed to process record", e); + throw e; + } + catch (IOException e) + { + HandleException(AlertDescription.internal_error, "Failed to process record", e); + throw e; + } + catch (Exception e) + { + HandleException(AlertDescription.internal_error, "Failed to process record", e); + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + } + + /// + protected virtual void SafeWriteRecord(short type, byte[] buf, int offset, int len) + { + try + { + m_recordStream.WriteRecord(type, buf, offset, len); + } + catch (TlsFatalAlert e) + { + HandleException(e.AlertDescription, "Failed to write record", e); + throw e; + } + catch (IOException e) + { + HandleException(AlertDescription.internal_error, "Failed to write record", e); + throw e; + } + catch (Exception e) + { + HandleException(AlertDescription.internal_error, "Failed to write record", e); + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// + protected virtual void SafeWriteRecord(short type, ReadOnlySpan buffer) + { + try + { + m_recordStream.WriteRecord(type, buffer); + } + catch (TlsFatalAlert e) + { + HandleException(e.AlertDescription, "Failed to write record", e); + throw e; + } + catch (IOException e) + { + HandleException(AlertDescription.internal_error, "Failed to write record", e); + throw e; + } + catch (Exception e) + { + HandleException(AlertDescription.internal_error, "Failed to write record", e); + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + } +#endif + + /// Write some application data. + /// + /// Fragmentation is handled internally. Usable in both blocking/non-blocking modes.

    + /// In blocking mode, the output will be automatically sent via the underlying transport. In non-blocking mode, + /// call to get the output bytes to send to the peer.

    + /// This method must not be called until after the initial handshake is complete. Attempting to call it earlier + /// will result in an . + ///
    + /// The buffer containing application data to send. + /// The offset at which the application data begins + /// The number of bytes of application data. + /// If called before the initial handshake has completed. + /// + /// If connection is already closed, or for encryption or transport errors. + /// + public virtual void WriteApplicationData(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + WriteApplicationData(buffer.AsSpan(offset, count)); +#else + if (!m_appDataReady) + throw new InvalidOperationException( + "Cannot write application data until initial handshake completed."); + + //lock (m_recordWriteLock) + { + while (count > 0) + { + if (m_closed) + throw new IOException("Cannot write application data on closed/failed TLS connection"); + + /* + * RFC 5246 6.2.1. Zero-length fragments of Application data MAY be sent as they are + * potentially useful as a traffic analysis countermeasure. + * + * NOTE: Actually, implementations appear to have settled on 1/n-1 record splitting. + */ + if (m_appDataSplitEnabled) + { + /* + * Protect against known IV attack! + * + * DO NOT REMOVE THIS CODE, EXCEPT YOU KNOW EXACTLY WHAT YOU ARE DOING HERE. + */ + switch (m_appDataSplitMode) + { + case ADS_MODE_0_N_FIRSTONLY: + { + this.m_appDataSplitEnabled = false; + SafeWriteRecord(ContentType.application_data, TlsUtilities.EmptyBytes, 0, 0); + break; + } + case ADS_MODE_0_N: + { + SafeWriteRecord(ContentType.application_data, TlsUtilities.EmptyBytes, 0, 0); + break; + } + case ADS_MODE_1_Nsub1: + default: + { + if (count > 1) + { + SafeWriteRecord(ContentType.application_data, buffer, offset, 1); + ++offset; + --count; + } + break; + } + } + } + else if (m_keyUpdateEnabled) + { + if (m_keyUpdatePendingSend) + { + Send13KeyUpdate(false); + } + else if (m_recordStream.NeedsKeyUpdate()) + { + Send13KeyUpdate(true); + } + } + + // Fragment data according to the current fragment limit. + int toWrite = System.Math.Min(count, m_recordStream.PlaintextLimit); + SafeWriteRecord(ContentType.application_data, buffer, offset, toWrite); + offset += toWrite; + count -= toWrite; + } + } +#endif + } + + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void WriteApplicationData(ReadOnlySpan buffer) + { + if (!m_appDataReady) + throw new InvalidOperationException( + "Cannot write application data until initial handshake completed."); + + //lock (m_recordWriteLock) + { + while (!buffer.IsEmpty) + { + if (m_closed) + throw new IOException("Cannot write application data on closed/failed TLS connection"); + + /* + * RFC 5246 6.2.1. Zero-length fragments of Application data MAY be sent as they are + * potentially useful as a traffic analysis countermeasure. + * + * NOTE: Actually, implementations appear to have settled on 1/n-1 record splitting. + */ + if (m_appDataSplitEnabled) + { + /* + * Protect against known IV attack! + * + * DO NOT REMOVE THIS CODE, EXCEPT YOU KNOW EXACTLY WHAT YOU ARE DOING HERE. + */ + switch (m_appDataSplitMode) + { + case ADS_MODE_0_N_FIRSTONLY: + { + this.m_appDataSplitEnabled = false; + SafeWriteRecord(ContentType.application_data, TlsUtilities.EmptyBytes, 0, 0); + break; + } + case ADS_MODE_0_N: + { + SafeWriteRecord(ContentType.application_data, TlsUtilities.EmptyBytes, 0, 0); + break; + } + case ADS_MODE_1_Nsub1: + default: + { + if (buffer.Length > 1) + { + SafeWriteRecord(ContentType.application_data, buffer[..1]); + buffer = buffer[1..]; + } + break; + } + } + } + else if (m_keyUpdateEnabled) + { + if (m_keyUpdatePendingSend) + { + Send13KeyUpdate(false); + } + else if (m_recordStream.NeedsKeyUpdate()) + { + Send13KeyUpdate(true); + } + } + + // Fragment data according to the current fragment limit. + int toWrite = System.Math.Min(buffer.Length, m_recordStream.PlaintextLimit); + SafeWriteRecord(ContentType.application_data, buffer[..toWrite]); + buffer = buffer[toWrite..]; + } + } + } +#endif + + public virtual int AppDataSplitMode + { + get { return m_appDataSplitMode; } + set + { + if (value < ADS_MODE_1_Nsub1 || value > ADS_MODE_0_N_FIRSTONLY) + throw new InvalidOperationException("Illegal appDataSplitMode mode: " + value); + + this.m_appDataSplitMode = value; + } + } + + public virtual bool IsResumableHandshake + { + get { return m_resumableHandshake; } + set { this.m_resumableHandshake = value; } + } + + /// + internal void WriteHandshakeMessage(byte[] buf, int off, int len) + { + if (len < 4) + throw new TlsFatalAlert(AlertDescription.internal_error); + + short type = TlsUtilities.ReadUint8(buf, off); + switch (type) + { + /* + * These message types aren't included in the transcript. + */ + case HandshakeType.hello_request: + case HandshakeType.key_update: + break; + + /* + * Not included in the transcript for (D)TLS 1.3+ + */ + case HandshakeType.new_session_ticket: + { + ProtocolVersion negotiatedVersion = Context.ServerVersion; + if (null != negotiatedVersion && !TlsUtilities.IsTlsV13(negotiatedVersion)) + { + m_handshakeHash.Update(buf, off, len); + } + + break; + } + + /* + * These message types are deferred to the writer to explicitly update the transcript. + */ + case HandshakeType.client_hello: + break; + + /* + * For all others we automatically update the transcript. + */ + default: + { + m_handshakeHash.Update(buf, off, len); + break; + } + } + + int total = 0; + do + { + // Fragment data according to the current fragment limit. + int toWrite = System.Math.Min(len - total, m_recordStream.PlaintextLimit); + SafeWriteRecord(ContentType.handshake, buf, off + total, toWrite); + total += toWrite; + } + while (total < len); + } + + /// The secure bidirectional stream for this connection + /// Only allowed in blocking mode. + public virtual Stream Stream + { + get + { + if (!m_blocking) + throw new InvalidOperationException( + "Cannot use Stream in non-blocking mode! Use OfferInput()/OfferOutput() instead."); + + return this.m_tlsStream; + } + } + + /// Should be called in non-blocking mode when the input data reaches EOF. + /// + public virtual void CloseInput() + { + if (m_blocking) + throw new InvalidOperationException("Cannot use CloseInput() in blocking mode!"); + + if (m_closed) + return; + + if (m_inputBuffers.Available > 0) + throw new EndOfStreamException(); + + if (!m_appDataReady) + throw new TlsFatalAlert(AlertDescription.handshake_failure); + + if (!Peer.RequiresCloseNotify()) + { + HandleClose(false); + return; + } + + HandleFailure(); + + throw new TlsNoCloseNotifyException(); + } + + /// + public virtual RecordPreview PreviewInputRecord(byte[] recordHeader) + { + if (m_blocking) + throw new InvalidOperationException("Cannot use PreviewInputRecord() in blocking mode!"); + if (m_inputBuffers.Available != 0) + throw new InvalidOperationException("Can only use PreviewInputRecord() for record-aligned input."); + if (m_closed) + throw new IOException("Connection is closed, cannot accept any more input"); + + return SafePreviewRecordHeader(recordHeader); + } + + public virtual int PreviewOutputRecord() + { + if (m_blocking) + throw new InvalidOperationException("Cannot use PreviewOutputRecord() in blocking mode!"); + + ByteQueue buffer = m_outputBuffer.Buffer; + int available = buffer.Available; + if (available < 1) + return 0; + + if (available >= RecordFormat.FragmentOffset) + { + int length = buffer.ReadUint16(RecordFormat.LengthOffset); + int recordSize = RecordFormat.FragmentOffset + length; + + if (available >= recordSize) + return recordSize; + } + + throw new InvalidOperationException("Can only use PreviewOutputRecord() for record-aligned output."); + } + + /// + public virtual RecordPreview PreviewOutputRecord(int applicationDataSize) + { + if (!m_appDataReady) + throw new InvalidOperationException( + "Cannot use PreviewOutputRecord() until initial handshake completed."); + if (m_blocking) + throw new InvalidOperationException("Cannot use PreviewOutputRecord() in blocking mode!"); + if (m_outputBuffer.Buffer.Available != 0) + throw new InvalidOperationException("Can only use PreviewOutputRecord() for record-aligned output."); + if (m_closed) + throw new IOException("Connection is closed, cannot produce any more output"); + + if (applicationDataSize < 1) + return new RecordPreview(0, 0); + + if (m_appDataSplitEnabled) + { + switch (m_appDataSplitMode) + { + case ADS_MODE_0_N_FIRSTONLY: + case ADS_MODE_0_N: + { + RecordPreview a = m_recordStream.PreviewOutputRecord(0); + RecordPreview b = m_recordStream.PreviewOutputRecord(applicationDataSize); + return RecordPreview.CombineAppData(a, b); + } + case ADS_MODE_1_Nsub1: + default: + { + RecordPreview a = m_recordStream.PreviewOutputRecord(1); + if (applicationDataSize > 1) + { + RecordPreview b = m_recordStream.PreviewOutputRecord(applicationDataSize - 1); + a = RecordPreview.CombineAppData(a, b); + } + return a; + } + } + } + else + { + RecordPreview a = m_recordStream.PreviewOutputRecord(applicationDataSize); + if (m_keyUpdateEnabled && (m_keyUpdatePendingSend || m_recordStream.NeedsKeyUpdate())) + { + int keyUpdateLength = HandshakeMessageOutput.GetLength(1); + int recordSize = m_recordStream.PreviewOutputRecordSize(keyUpdateLength); + a = RecordPreview.ExtendRecordSize(a, recordSize); + } + return a; + } + } + + /// Equivalent to OfferInput(input, 0, input.Length). + /// The input buffer to offer. + /// + /// + public virtual void OfferInput(byte[] input) + { + OfferInput(input, 0, input.Length); + } + + /// Offer input from an arbitrary source. + /// Only allowed in non-blocking mode.

    + /// This method will decrypt and process all records that are fully available. If only part of a record is + /// available, the buffer will be retained until the remainder of the record is offered.

    + /// If any records containing application data were processed, the decrypted data can be obtained using + /// . If any records containing protocol data were processed, a + /// response may have been generated. You should always check to see if there is any available output after + /// calling this method by calling . + ///
    + /// The input buffer to offer. + /// The offset within the input buffer that input begins. + /// The number of bytes of input being offered. + /// If an error occurs while decrypting or processing a record. + public virtual void OfferInput(byte[] input, int inputOff, int inputLen) + { + if (m_blocking) + throw new InvalidOperationException("Cannot use OfferInput() in blocking mode! Use Stream instead."); + if (m_closed) + throw new IOException("Connection is closed, cannot accept any more input"); + + // Fast path if the input is arriving one record at a time + if (m_inputBuffers.Available == 0 && SafeReadFullRecord(input, inputOff, inputLen)) + { + if (m_closed) + { + if (!m_appDataReady) + { + // NOTE: Any close during the handshake should have raised an exception. + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + return; + } + + m_inputBuffers.AddBytes(input, inputOff, inputLen); + + // loop while there are enough bytes to read the length of the next record + while (m_inputBuffers.Available >= RecordFormat.FragmentOffset) + { + byte[] recordHeader = new byte[RecordFormat.FragmentOffset]; + if (RecordFormat.FragmentOffset != m_inputBuffers.Peek(recordHeader)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + RecordPreview preview = SafePreviewRecordHeader(recordHeader); + if (m_inputBuffers.Available < preview.RecordSize) + { + // not enough bytes to read a whole record + break; + } + + // NOTE: This is actually reading from inputBuffers, so InterruptedIOException shouldn't be possible + SafeReadRecord(); + + if (m_closed) + { + if (!m_appDataReady) + { + // NOTE: Any close during the handshake should have raised an exception. + throw new TlsFatalAlert(AlertDescription.internal_error); + } + break; + } + } + } + + public virtual int ApplicationDataLimit + { + get { return m_recordStream.PlaintextLimit; } + } + + /// Gets the amount of received application data. + /// A call to is guaranteed to be able to return at least + /// this much data.

    + /// Only allowed in non-blocking mode. + ///
    + /// The number of bytes of available application data. + public virtual int GetAvailableInputBytes() + { + if (m_blocking) + throw new InvalidOperationException("Cannot use GetAvailableInputBytes() in blocking mode!"); + + return ApplicationDataAvailable; + } + + /// Retrieves received application data. + /// + /// Use to check how much application data is currently available. This + /// method functions similarly to , except that it never blocks. If + /// no data is available, nothing will be copied and zero will be returned.

    + /// Only allowed in non-blocking mode. + ///
    + /// The buffer to hold the application data. + /// The start offset in the buffer at which the data is written. + /// The maximum number of bytes to read. + /// The total number of bytes copied to the buffer. May be less than the length specified if the + /// length was greater than the amount of available data. + public virtual int ReadInput(byte[] buf, int off, int len) + { + if (m_blocking) + throw new InvalidOperationException("Cannot use ReadInput() in blocking mode! Use Stream instead."); + + len = System.Math.Min(len, ApplicationDataAvailable); + if (len < 1) + return 0; + + m_applicationDataQueue.RemoveData(buf, off, len, 0); + return len; + } + + /// Gets the amount of encrypted data available to be sent. + /// + /// A call to is guaranteed to be able to return at least this much + /// data. Only allowed in non-blocking mode. + /// + /// The number of bytes of available encrypted data. + public virtual int GetAvailableOutputBytes() + { + if (m_blocking) + throw new InvalidOperationException("Cannot use GetAvailableOutputBytes() in blocking mode! Use Stream instead."); + + return m_outputBuffer.Buffer.Available; + } + + /// Retrieves encrypted data to be sent. + /// + /// Use to check how much encrypted data is currently available. This + /// method functions similarly to , except that it never blocks. If + /// no data is available, nothing will be copied and zero will be returned. Only allowed in non-blocking mode. + /// + /// The buffer to hold the encrypted data. + /// The start offset in the buffer at which the data is written. + /// The maximum number of bytes to read. + /// The total number of bytes copied to the buffer. May be less than the length specified if the + /// length was greater than the amount of available data. + public virtual int ReadOutput(byte[] buffer, int offset, int length) + { + if (m_blocking) + throw new InvalidOperationException("Cannot use ReadOutput() in blocking mode! Use 'Stream() instead."); + + int bytesToRead = System.Math.Min(GetAvailableOutputBytes(), length); + m_outputBuffer.Buffer.RemoveData(buffer, offset, bytesToRead, 0); + return bytesToRead; + } + + protected virtual bool EstablishSession(TlsSession sessionToResume) + { + this.m_tlsSession = null; + this.m_sessionParameters = null; + this.m_sessionMasterSecret = null; + + if (null == sessionToResume || !sessionToResume.IsResumable) + return false; + + SessionParameters sessionParameters = sessionToResume.ExportSessionParameters(); + if (null == sessionParameters) + return false; + + if (!sessionParameters.IsExtendedMasterSecret) + { + TlsPeer peer = Peer; + if (!peer.AllowLegacyResumption() || peer.RequiresExtendedMasterSecret()) + return false; + + /* + * NOTE: For session resumption without extended_master_secret, renegotiation MUST be disabled + * (see RFC 7627 5.4). + */ + } + + TlsSecret sessionMasterSecret = TlsUtilities.GetSessionMasterSecret(Context.Crypto, + sessionParameters.MasterSecret); + if (null == sessionMasterSecret) + return false; + + this.m_tlsSession = sessionToResume; + this.m_sessionParameters = sessionParameters; + this.m_sessionMasterSecret = sessionMasterSecret; + + return true; + } + + protected virtual void InvalidateSession() + { + if (m_sessionMasterSecret != null) + { + m_sessionMasterSecret.Destroy(); + this.m_sessionMasterSecret = null; + } + + if (m_sessionParameters != null) + { + m_sessionParameters.Clear(); + this.m_sessionParameters = null; + } + + if (m_tlsSession != null) + { + m_tlsSession.Invalidate(); + this.m_tlsSession = null; + } + } + + /// + protected virtual void ProcessFinishedMessage(MemoryStream buf) + { + TlsContext context = Context; + SecurityParameters securityParameters = context.SecurityParameters; + bool isServerContext = context.IsServer; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span verify_data = stackalloc byte[securityParameters.VerifyDataLength]; + TlsUtilities.ReadFully(verify_data, buf); +#else + byte[] verify_data = TlsUtilities.ReadFully(securityParameters.VerifyDataLength, buf); +#endif + + AssertEmpty(buf); + + byte[] expected_verify_data = TlsUtilities.CalculateVerifyData(context, m_handshakeHash, !isServerContext); + + /* + * Compare both checksums. + */ + if (!Arrays.ConstantTimeAreEqual(expected_verify_data, verify_data)) + { + /* + * Wrong checksum in the finished message. + */ + throw new TlsFatalAlert(AlertDescription.decrypt_error); + } + + securityParameters.m_peerVerifyData = expected_verify_data; + + if (!securityParameters.IsResumedSession || securityParameters.IsExtendedMasterSecret) + { + if (null == securityParameters.LocalVerifyData) + { + securityParameters.m_tlsUnique = expected_verify_data; + } + } + } + + /// + protected virtual void Process13FinishedMessage(MemoryStream buf) + { + TlsContext context = Context; + SecurityParameters securityParameters = context.SecurityParameters; + bool isServerContext = context.IsServer; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span verify_data = stackalloc byte[securityParameters.VerifyDataLength]; + TlsUtilities.ReadFully(verify_data, buf); +#else + byte[] verify_data = TlsUtilities.ReadFully(securityParameters.VerifyDataLength, buf); +#endif + + AssertEmpty(buf); + + byte[] expected_verify_data = TlsUtilities.CalculateVerifyData(context, m_handshakeHash, !isServerContext); + + /* + * Compare both checksums. + */ + if (!Arrays.ConstantTimeAreEqual(expected_verify_data, verify_data)) + { + /* + * Wrong checksum in the finished message. + */ + throw new TlsFatalAlert(AlertDescription.decrypt_error); + } + + securityParameters.m_peerVerifyData = expected_verify_data; + securityParameters.m_tlsUnique = null; + } + + /// + protected virtual void RaiseAlertFatal(short alertDescription, string message, Exception cause) + { + Peer.NotifyAlertRaised(AlertLevel.fatal, alertDescription, message, cause); + + byte[] alert = new byte[]{ (byte)AlertLevel.fatal, (byte)alertDescription }; + + try + { + m_recordStream.WriteRecord(ContentType.alert, alert, 0, 2); + } + catch (Exception) + { + // We are already processing an exception, so just ignore this + } + } + + /// + protected virtual void RaiseAlertWarning(short alertDescription, string message) + { + Peer.NotifyAlertRaised(AlertLevel.warning, alertDescription, message, null); + + byte[] alert = new byte[]{ (byte)AlertLevel.warning, (byte)alertDescription }; + + SafeWriteRecord(ContentType.alert, alert, 0, 2); + } + + + /// + protected virtual void Receive13KeyUpdate(MemoryStream buf) + { + // TODO[tls13] This is interesting enough to notify the TlsPeer for possible logging/vetting + + if (!(m_appDataReady && m_keyUpdateEnabled)) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + short requestUpdate = TlsUtilities.ReadUint8(buf); + + AssertEmpty(buf); + + if (!KeyUpdateRequest.IsValid(requestUpdate)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + bool updateRequested = (KeyUpdateRequest.update_requested == requestUpdate); + + TlsUtilities.Update13TrafficSecretPeer(Context); + m_recordStream.NotifyKeyUpdateReceived(); + + //this.m_keyUpdatePendingReceive &= updateRequested; + this.m_keyUpdatePendingSend |= updateRequested; + } + + /// + protected virtual void SendCertificateMessage(Certificate certificate, Stream endPointHash) + { + TlsContext context = Context; + SecurityParameters securityParameters = context.SecurityParameters; + if (null != securityParameters.LocalCertificate) + throw new TlsFatalAlert(AlertDescription.internal_error); + + if (null == certificate) + { + certificate = Certificate.EmptyChain; + } + + if (certificate.IsEmpty && !context.IsServer && securityParameters.NegotiatedVersion.IsSsl) + { + string message = "SSLv3 client didn't provide credentials"; + RaiseAlertWarning(AlertDescription.no_certificate, message); + } + else + { + HandshakeMessageOutput message = new HandshakeMessageOutput(HandshakeType.certificate); + certificate.Encode(context, message, endPointHash); + message.Send(this); + } + + securityParameters.m_localCertificate = certificate; + } + + /// + protected virtual void Send13CertificateMessage(Certificate certificate) + { + if (null == certificate) + throw new TlsFatalAlert(AlertDescription.internal_error); + + TlsContext context = Context; + SecurityParameters securityParameters = context.SecurityParameters; + if (null != securityParameters.LocalCertificate) + throw new TlsFatalAlert(AlertDescription.internal_error); + + HandshakeMessageOutput message = new HandshakeMessageOutput(HandshakeType.certificate); + certificate.Encode(context, message, null); + message.Send(this); + + securityParameters.m_localCertificate = certificate; + } + + /// + protected virtual void Send13CertificateVerifyMessage(DigitallySigned certificateVerify) + { + HandshakeMessageOutput message = new HandshakeMessageOutput(HandshakeType.certificate_verify); + certificateVerify.Encode(message); + message.Send(this); + } + + /// + protected virtual void SendChangeCipherSpec() + { + SendChangeCipherSpecMessage(); + m_recordStream.EnablePendingCipherWrite(); + } + + /// + protected virtual void SendChangeCipherSpecMessage() + { + byte[] message = new byte[]{ 1 }; + SafeWriteRecord(ContentType.change_cipher_spec, message, 0, message.Length); + } + + /// + protected virtual void SendFinishedMessage() + { + TlsContext context = Context; + SecurityParameters securityParameters = context.SecurityParameters; + bool isServerContext = context.IsServer; + + byte[] verify_data = TlsUtilities.CalculateVerifyData(context, m_handshakeHash, isServerContext); + + securityParameters.m_localVerifyData = verify_data; + + if (!securityParameters.IsResumedSession || securityParameters.IsExtendedMasterSecret) + { + if (null == securityParameters.PeerVerifyData) + { + securityParameters.m_tlsUnique = verify_data; + } + } + + HandshakeMessageOutput.Send(this, HandshakeType.finished, verify_data); + } + + /// + protected virtual void Send13FinishedMessage() + { + TlsContext context = Context; + SecurityParameters securityParameters = context.SecurityParameters; + bool isServerContext = context.IsServer; + + byte[] verify_data = TlsUtilities.CalculateVerifyData(context, m_handshakeHash, isServerContext); + + securityParameters.m_localVerifyData = verify_data; + securityParameters.m_tlsUnique = null; + + HandshakeMessageOutput.Send(this, HandshakeType.finished, verify_data); + } + + /// + protected virtual void Send13KeyUpdate(bool updateRequested) + { + // TODO[tls13] This is interesting enough to notify the TlsPeer for possible logging/vetting + + if (!(m_appDataReady && m_keyUpdateEnabled)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + short requestUpdate = updateRequested + ? KeyUpdateRequest.update_requested + : KeyUpdateRequest.update_not_requested; + + HandshakeMessageOutput.Send(this, HandshakeType.key_update, TlsUtilities.EncodeUint8(requestUpdate)); + + TlsUtilities.Update13TrafficSecretLocal(Context); + m_recordStream.NotifyKeyUpdateSent(); + + //this.m_keyUpdatePendingReceive |= updateRequested; + this.m_keyUpdatePendingSend &= updateRequested; + } + + /// + protected virtual void SendSupplementalDataMessage(IList supplementalData) + { + HandshakeMessageOutput message = new HandshakeMessageOutput(HandshakeType.supplemental_data); + WriteSupplementalData(message, supplementalData); + message.Send(this); + } + + public virtual void Close() + { + applicationDataLock?.Dispose(); + applicationDataLock = null; + HandleClose(true); + } + + public virtual void Flush() + { + } + + internal bool IsApplicationDataReady + { + get { return m_appDataReady; } + } + + public virtual bool IsClosed + { + get { return m_closed; } + } + + public virtual bool IsConnected + { + get + { + if (m_closed) + return false; + + AbstractTlsContext context = ContextAdmin; + + return null != context && context.IsConnected; + } + } + + public virtual bool IsHandshaking + { + get + { + if (m_closed) + return false; + + AbstractTlsContext context = ContextAdmin; + + return null != context && context.IsHandshaking; + } + } + + /// + protected virtual short ProcessMaxFragmentLengthExtension(IDictionary clientExtensions, + IDictionary serverExtensions, short alertDescription) + { + short maxFragmentLength = TlsExtensionsUtilities.GetMaxFragmentLengthExtension(serverExtensions); + if (maxFragmentLength >= 0) + { + if (!MaxFragmentLength.IsValid(maxFragmentLength) || + (clientExtensions != null && + maxFragmentLength != TlsExtensionsUtilities.GetMaxFragmentLengthExtension(clientExtensions))) + { + throw new TlsFatalAlert(alertDescription); + } + } + return maxFragmentLength; + } + + /// + protected virtual void RefuseRenegotiation() + { + /* + * RFC 5746 4.5 SSLv3 clients [..] SHOULD use a fatal handshake_failure alert. + */ + if (TlsUtilities.IsSsl(Context)) + throw new TlsFatalAlert(AlertDescription.handshake_failure); + + RaiseAlertWarning(AlertDescription.no_renegotiation, "Renegotiation not supported"); + } + + /// Make sure the 'buf' is now empty. Fail otherwise. + /// The to check. + /// + internal static void AssertEmpty(MemoryStream buf) + { + if (buf.Position < buf.Length) + throw new TlsFatalAlert(AlertDescription.decode_error); + } + + internal static byte[] CreateRandomBlock(bool useGmtUnixTime, TlsContext context) + { + byte[] result = context.NonceGenerator.GenerateNonce(32); + + if (useGmtUnixTime) + { + TlsUtilities.WriteGmtUnixTime(result, 0); + } + + return result; + } + + /// + internal static byte[] CreateRenegotiationInfo(byte[] renegotiated_connection) + { + return TlsUtilities.EncodeOpaque8(renegotiated_connection); + } + + /// + internal static void EstablishMasterSecret(TlsContext context, TlsKeyExchange keyExchange) + { + TlsSecret preMasterSecret = keyExchange.GeneratePreMasterSecret(); + if (preMasterSecret == null) + throw new TlsFatalAlert(AlertDescription.internal_error); + + try + { + context.SecurityParameters.m_masterSecret = TlsUtilities.CalculateMasterSecret(context, + preMasterSecret); + + if (context.SecurityParameters.NegotiatedVersion != ProtocolVersion.TLSv13) + KeyLogFileWriter.WriteLabel(Labels.CLIENT_RANDOM, context.SecurityParameters); + } + finally + { + /* + * RFC 2246 8.1. The pre_master_secret should be deleted from memory once the + * master_secret has been computed. + */ + preMasterSecret.Destroy(); + } + } + + /// + internal static IDictionary ReadExtensions(MemoryStream input) + { + if (input.Position >= input.Length) + return null; + + byte[] extBytes = TlsUtilities.ReadOpaque16(input); + + AssertEmpty(input); + + return ReadExtensionsData(extBytes); + } + + /// + internal static IDictionary ReadExtensionsData(byte[] extBytes) + { + // Int32 -> byte[] + var extensions = new Dictionary(); + + if (extBytes.Length > 0) + { + MemoryStream buf = new MemoryStream(extBytes, false); + + do + { + int extension_type = TlsUtilities.ReadUint16(buf); + byte[] extension_data = TlsUtilities.ReadOpaque16(buf); + + /* + * RFC 3546 2.3 There MUST NOT be more than one extension of the same type. + */ + if (extensions.ContainsKey(extension_type)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter, + "Repeated extension: " + ExtensionType.GetText(extension_type)); + + extensions.Add(extension_type, extension_data); + } + while (buf.Position < buf.Length); + } + + return extensions; + } + + /// + internal static IDictionary ReadExtensionsData13(int handshakeType, byte[] extBytes) + { + // Int32 -> byte[] + var extensions = new Dictionary(); + + if (extBytes.Length > 0) + { + MemoryStream buf = new MemoryStream(extBytes, false); + + do + { + int extension_type = TlsUtilities.ReadUint16(buf); + + if (!TlsUtilities.IsPermittedExtensionType13(handshakeType, extension_type)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter, + "Invalid extension: " + ExtensionType.GetText(extension_type)); + } + + byte[] extension_data = TlsUtilities.ReadOpaque16(buf); + + /* + * RFC 3546 2.3 There MUST NOT be more than one extension of the same type. + */ + if (extensions.ContainsKey(extension_type)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter, + "Repeated extension: " + ExtensionType.GetText(extension_type)); + + extensions.Add(extension_type, extension_data); + } + while (buf.Position < buf.Length); + } + + return extensions; + } + + /// + internal static IDictionary ReadExtensionsDataClientHello(byte[] extBytes) + { + /* + * TODO[tls13] We are currently allowing any extensions to appear in ClientHello. It is + * somewhat complicated to restrict what can appear based on the specific set of versions + * the client is offering, and anyway could be fragile since clients may take a + * "kitchen sink" approach to adding extensions independently of the offered versions. + */ + + // Int32 -> byte[] + var extensions = new Dictionary(); + + if (extBytes.Length > 0) + { + MemoryStream buf = new MemoryStream(extBytes, false); + + int extension_type; + bool pre_shared_key_found = false; + + do + { + extension_type = TlsUtilities.ReadUint16(buf); + byte[] extension_data = TlsUtilities.ReadOpaque16(buf); + + /* + * RFC 3546 2.3 There MUST NOT be more than one extension of the same type. + */ + if (extensions.ContainsKey(extension_type)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter, + "Repeated extension: " + ExtensionType.GetText(extension_type)); + + extensions.Add(extension_type, extension_data); + + pre_shared_key_found |= (ExtensionType.pre_shared_key == extension_type); + } + while (buf.Position < buf.Length); + + if (pre_shared_key_found && (ExtensionType.pre_shared_key != extension_type)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter, + "'pre_shared_key' MUST be last in ClientHello"); + } + + return extensions; + } + + /// + internal static IList ReadSupplementalDataMessage(MemoryStream input) + { + byte[] supp_data = TlsUtilities.ReadOpaque24(input, 1); + + AssertEmpty(input); + + MemoryStream buf = new MemoryStream(supp_data, false); + + var supplementalData = new List(); + + while (buf.Position < buf.Length) + { + int supp_data_type = TlsUtilities.ReadUint16(buf); + byte[] data = TlsUtilities.ReadOpaque16(buf); + + supplementalData.Add(new SupplementalDataEntry(supp_data_type, data)); + } + + return supplementalData; + } + + /// + internal static void WriteExtensions(Stream output, IDictionary extensions) + { + WriteExtensions(output, extensions, 0); + } + + /// + internal static void WriteExtensions(Stream output, IDictionary extensions, int bindersSize) + { + if (null == extensions || extensions.Count < 1) + return; + + byte[] extBytes = WriteExtensionsData(extensions, bindersSize); + + int lengthWithBinders = extBytes.Length + bindersSize; + TlsUtilities.CheckUint16(lengthWithBinders); + TlsUtilities.WriteUint16(lengthWithBinders, output); + output.Write(extBytes, 0, extBytes.Length); + } + + /// + internal static byte[] WriteExtensionsData(IDictionary extensions) + { + return WriteExtensionsData(extensions, 0); + } + + /// + internal static byte[] WriteExtensionsData(IDictionary extensions, int bindersSize) + { + MemoryStream buf = new MemoryStream(); + WriteExtensionsData(extensions, buf, bindersSize); + return buf.ToArray(); + } + + /// + internal static void WriteExtensionsData(IDictionary extensions, MemoryStream buf) + { + WriteExtensionsData(extensions, buf, 0); + } + + /// + internal static void WriteExtensionsData(IDictionary extensions, MemoryStream buf, int bindersSize) + { + /* + * NOTE: There are reports of servers that don't accept a zero-length extension as the last + * one, so we write out any zero-length ones first as a best-effort workaround. + */ + WriteSelectedExtensions(buf, extensions, true); + WriteSelectedExtensions(buf, extensions, false); + WritePreSharedKeyExtension(buf, extensions, bindersSize); + } + + /// + internal static void WritePreSharedKeyExtension(MemoryStream buf, IDictionary extensions, + int bindersSize) + { + if (extensions.TryGetValue(ExtensionType.pre_shared_key, out var extension_data)) + { + TlsUtilities.CheckUint16(ExtensionType.pre_shared_key); + TlsUtilities.WriteUint16(ExtensionType.pre_shared_key, buf); + + int lengthWithBinders = extension_data.Length + bindersSize; + TlsUtilities.CheckUint16(lengthWithBinders); + TlsUtilities.WriteUint16(lengthWithBinders, buf); + buf.Write(extension_data, 0, extension_data.Length); + } + } + + /// + internal static void WriteSelectedExtensions(Stream output, IDictionary extensions, + bool selectEmpty) + { + foreach (var extension in extensions) + { + int extension_type = extension.Key; + + // NOTE: Must be last; handled by 'WritePreSharedKeyExtension' + if (ExtensionType.pre_shared_key == extension_type) + continue; + + byte[] extension_data = extension.Value; + + if (selectEmpty == (extension_data.Length == 0)) + { + TlsUtilities.CheckUint16(extension_type); + TlsUtilities.WriteUint16(extension_type, output); + TlsUtilities.WriteOpaque16(extension_data, output); + } + } + } + + /// + internal static void WriteSupplementalData(Stream output, IList supplementalData) + { + MemoryStream buf = new MemoryStream(); + + foreach (SupplementalDataEntry entry in supplementalData) + { + int supp_data_type = entry.DataType; + TlsUtilities.CheckUint16(supp_data_type); + TlsUtilities.WriteUint16(supp_data_type, buf); + TlsUtilities.WriteOpaque16(entry.Data, buf); + } + + byte[] supp_data = buf.ToArray(); + + TlsUtilities.WriteOpaque24(supp_data, output); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsProtocol.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsProtocol.cs.meta new file mode 100644 index 000000000..60b5b3f47 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsProtocol.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bfbbb1413316b414c808befae8e48c0e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPsk.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPsk.cs new file mode 100644 index 000000000..9285bda30 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPsk.cs @@ -0,0 +1,19 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public interface TlsPsk + { + byte[] Identity { get; } + + TlsSecret Key { get; } + + int PrfAlgorithm { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPsk.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPsk.cs.meta new file mode 100644 index 000000000..61e86c468 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPsk.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 241a0d43e4813b34595c8ff4013ee243 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskExternal.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskExternal.cs new file mode 100644 index 000000000..b245e3fef --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskExternal.cs @@ -0,0 +1,13 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public interface TlsPskExternal + : TlsPsk + { + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskExternal.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskExternal.cs.meta new file mode 100644 index 000000000..e4cd5f8c3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskExternal.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7af568b8e1d600047980e98773db669d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskIdentity.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskIdentity.cs new file mode 100644 index 000000000..239efabc6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskIdentity.cs @@ -0,0 +1,20 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Processor interface for a PSK identity. + public interface TlsPskIdentity + { + void SkipIdentityHint(); + + void NotifyIdentityHint(byte[] psk_identity_hint); + + byte[] GetPskIdentity(); + + byte[] GetPsk(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskIdentity.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskIdentity.cs.meta new file mode 100644 index 000000000..9bb4fbe8c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskIdentity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01123fb225e39ac44889ab405d74ef74 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskIdentityManager.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskIdentityManager.cs new file mode 100644 index 000000000..cccfaebeb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskIdentityManager.cs @@ -0,0 +1,16 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Base interface for an object that can process a PSK identity. + public interface TlsPskIdentityManager + { + byte[] GetHint(); + + byte[] GetPsk(byte[] identity); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskIdentityManager.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskIdentityManager.cs.meta new file mode 100644 index 000000000..8ff3e1390 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskIdentityManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e903b7e0e470d2447aa4209b6982d888 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskKeyExchange.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskKeyExchange.cs new file mode 100644 index 000000000..4cce7c21c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskKeyExchange.cs @@ -0,0 +1,309 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// (D)TLS PSK key exchange (RFC 4279). + public class TlsPskKeyExchange + : AbstractTlsKeyExchange + { + private static int CheckKeyExchange(int keyExchange) + { + switch (keyExchange) + { + case KeyExchangeAlgorithm.DHE_PSK: + case KeyExchangeAlgorithm.ECDHE_PSK: + case KeyExchangeAlgorithm.PSK: + case KeyExchangeAlgorithm.RSA_PSK: + return keyExchange; + default: + throw new ArgumentException("unsupported key exchange algorithm", "keyExchange"); + } + } + + protected TlsPskIdentity m_pskIdentity; + protected TlsPskIdentityManager m_pskIdentityManager; + protected TlsDHGroupVerifier m_dhGroupVerifier; + + protected byte[] m_psk_identity_hint = null; + protected byte[] m_psk = null; + + protected TlsDHConfig m_dhConfig; + protected TlsECConfig m_ecConfig; + protected TlsAgreement m_agreement; + + protected TlsCredentialedDecryptor m_serverCredentials = null; + protected TlsEncryptor m_serverEncryptor; + protected TlsSecret m_preMasterSecret; + + public TlsPskKeyExchange(int keyExchange, TlsPskIdentity pskIdentity, TlsDHGroupVerifier dhGroupVerifier) + : this(keyExchange, pskIdentity, null, dhGroupVerifier, null, null) + { + } + + public TlsPskKeyExchange(int keyExchange, TlsPskIdentityManager pskIdentityManager, + TlsDHConfig dhConfig, TlsECConfig ecConfig) + : this(keyExchange, null, pskIdentityManager, null, dhConfig, ecConfig) + { + } + + private TlsPskKeyExchange(int keyExchange, TlsPskIdentity pskIdentity, TlsPskIdentityManager pskIdentityManager, + TlsDHGroupVerifier dhGroupVerifier, TlsDHConfig dhConfig, TlsECConfig ecConfig) + : base(CheckKeyExchange(keyExchange)) + { + this.m_pskIdentity = pskIdentity; + this.m_pskIdentityManager = pskIdentityManager; + this.m_dhGroupVerifier = dhGroupVerifier; + this.m_dhConfig = dhConfig; + this.m_ecConfig = ecConfig; + } + + public override void SkipServerCredentials() + { + if (m_keyExchange == KeyExchangeAlgorithm.RSA_PSK) + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public override void ProcessServerCredentials(TlsCredentials serverCredentials) + { + if (m_keyExchange != KeyExchangeAlgorithm.RSA_PSK) + throw new TlsFatalAlert(AlertDescription.internal_error); + + this.m_serverCredentials = TlsUtilities.RequireDecryptorCredentials(serverCredentials); + } + + public override void ProcessServerCertificate(Certificate serverCertificate) + { + if (m_keyExchange != KeyExchangeAlgorithm.RSA_PSK) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + this.m_serverEncryptor = serverCertificate.GetCertificateAt(0).CreateEncryptor( + TlsCertificateRole.RsaEncryption); + } + + public override byte[] GenerateServerKeyExchange() + { + this.m_psk_identity_hint = m_pskIdentityManager.GetHint(); + + if (this.m_psk_identity_hint == null && !RequiresServerKeyExchange) + return null; + + MemoryStream buf = new MemoryStream(); + + if (this.m_psk_identity_hint == null) + { + TlsUtilities.WriteOpaque16(TlsUtilities.EmptyBytes, buf); + } + else + { + TlsUtilities.WriteOpaque16(this.m_psk_identity_hint, buf); + } + + if (this.m_keyExchange == KeyExchangeAlgorithm.DHE_PSK) + { + if (this.m_dhConfig == null) + throw new TlsFatalAlert(AlertDescription.internal_error); + + TlsDHUtilities.WriteDHConfig(m_dhConfig, buf); + + this.m_agreement = m_context.Crypto.CreateDHDomain(m_dhConfig).CreateDH(); + + GenerateEphemeralDH(buf); + } + else if (this.m_keyExchange == KeyExchangeAlgorithm.ECDHE_PSK) + { + if (this.m_ecConfig == null) + throw new TlsFatalAlert(AlertDescription.internal_error); + + TlsEccUtilities.WriteECConfig(m_ecConfig, buf); + + this.m_agreement = m_context.Crypto.CreateECDomain(m_ecConfig).CreateECDH(); + + GenerateEphemeralECDH(buf); + } + + return buf.ToArray(); + } + + public override bool RequiresServerKeyExchange + { + get + { + switch (m_keyExchange) + { + case KeyExchangeAlgorithm.DHE_PSK: + case KeyExchangeAlgorithm.ECDHE_PSK: + return true; + default: + return false; + } + } + } + + public override void ProcessServerKeyExchange(Stream input) + { + this.m_psk_identity_hint = TlsUtilities.ReadOpaque16(input); + + if (this.m_keyExchange == KeyExchangeAlgorithm.DHE_PSK) + { + this.m_dhConfig = TlsDHUtilities.ReceiveDHConfig(m_context, m_dhGroupVerifier, input); + + byte[] y = TlsUtilities.ReadOpaque16(input, 1); + + this.m_agreement = m_context.Crypto.CreateDHDomain(m_dhConfig).CreateDH(); + + ProcessEphemeralDH(y); + } + else if (this.m_keyExchange == KeyExchangeAlgorithm.ECDHE_PSK) + { + this.m_ecConfig = TlsEccUtilities.ReceiveECDHConfig(m_context, input); + + byte[] point = TlsUtilities.ReadOpaque8(input, 1); + + this.m_agreement = m_context.Crypto.CreateECDomain(m_ecConfig).CreateECDH(); + + ProcessEphemeralECDH(point); + } + } + + public override void ProcessClientCredentials(TlsCredentials clientCredentials) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public override void GenerateClientKeyExchange(Stream output) + { + if (m_psk_identity_hint == null) + { + m_pskIdentity.SkipIdentityHint(); + } + else + { + m_pskIdentity.NotifyIdentityHint(m_psk_identity_hint); + } + + byte[] psk_identity = m_pskIdentity.GetPskIdentity(); + if (psk_identity == null) + throw new TlsFatalAlert(AlertDescription.internal_error); + + this.m_psk = m_pskIdentity.GetPsk(); + if (m_psk == null) + throw new TlsFatalAlert(AlertDescription.internal_error); + + TlsUtilities.WriteOpaque16(psk_identity, output); + + m_context.SecurityParameters.m_pskIdentity = Arrays.Clone(psk_identity); + + if (this.m_keyExchange == KeyExchangeAlgorithm.DHE_PSK) + { + GenerateEphemeralDH(output); + } + else if (this.m_keyExchange == KeyExchangeAlgorithm.ECDHE_PSK) + { + GenerateEphemeralECDH(output); + } + else if (this.m_keyExchange == KeyExchangeAlgorithm.RSA_PSK) + { + this.m_preMasterSecret = TlsUtilities.GenerateEncryptedPreMasterSecret(m_context, m_serverEncryptor, + output); + } + } + + public override void ProcessClientKeyExchange(Stream input) + { + byte[] psk_identity = TlsUtilities.ReadOpaque16(input); + + this.m_psk = m_pskIdentityManager.GetPsk(psk_identity); + if (m_psk == null) + throw new TlsFatalAlert(AlertDescription.unknown_psk_identity); + + m_context.SecurityParameters.m_pskIdentity = psk_identity; + + if (this.m_keyExchange == KeyExchangeAlgorithm.DHE_PSK) + { + byte[] y = TlsUtilities.ReadOpaque16(input, 1); + + ProcessEphemeralDH(y); + } + else if (this.m_keyExchange == KeyExchangeAlgorithm.ECDHE_PSK) + { + byte[] point = TlsUtilities.ReadOpaque8(input, 1); + + ProcessEphemeralECDH(point); + } + else if (this.m_keyExchange == KeyExchangeAlgorithm.RSA_PSK) + { + byte[] encryptedPreMasterSecret = TlsUtilities.ReadEncryptedPms(m_context, input); + + this.m_preMasterSecret = m_serverCredentials.Decrypt(new TlsCryptoParameters(m_context), + encryptedPreMasterSecret); + } + } + + public override TlsSecret GeneratePreMasterSecret() + { + byte[] other_secret = GenerateOtherSecret(m_psk.Length); + + MemoryStream buf = new MemoryStream(4 + other_secret.Length + m_psk.Length); + TlsUtilities.WriteOpaque16(other_secret, buf); + TlsUtilities.WriteOpaque16(m_psk, buf); + + Array.Clear(m_psk, 0, m_psk.Length); + this.m_psk = null; + + return m_context.Crypto.CreateSecret(buf.ToArray()); + } + + protected virtual void GenerateEphemeralDH(Stream output) + { + byte[] y = m_agreement.GenerateEphemeral(); + TlsUtilities.WriteOpaque16(y, output); + } + + protected virtual void GenerateEphemeralECDH(Stream output) + { + byte[] point = m_agreement.GenerateEphemeral(); + TlsUtilities.WriteOpaque8(point, output); + } + + protected virtual byte[] GenerateOtherSecret(int pskLength) + { + if (this.m_keyExchange == KeyExchangeAlgorithm.PSK) + return new byte[pskLength]; + + if (this.m_keyExchange == KeyExchangeAlgorithm.DHE_PSK || + this.m_keyExchange == KeyExchangeAlgorithm.ECDHE_PSK) + { + if (m_agreement != null) + return m_agreement.CalculateSecret().Extract(); + } + + if (this.m_keyExchange == KeyExchangeAlgorithm.RSA_PSK) + { + if (m_preMasterSecret != null) + return this.m_preMasterSecret.Extract(); + } + + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + protected virtual void ProcessEphemeralDH(byte[] y) + { + this.m_agreement.ReceivePeerValue(y); + } + + protected virtual void ProcessEphemeralECDH(byte[] point) + { + TlsEccUtilities.CheckPointEncoding(m_ecConfig.NamedGroup, point); + + this.m_agreement.ReceivePeerValue(point); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskKeyExchange.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskKeyExchange.cs.meta new file mode 100644 index 000000000..bf30cfbbc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsPskKeyExchange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: da4bbb36a3d24294699357d61ee2e22e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsRsaKeyExchange.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsRsaKeyExchange.cs new file mode 100644 index 000000000..e43c02825 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsRsaKeyExchange.cs @@ -0,0 +1,84 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// (D)TLS RSA key exchange. + public class TlsRsaKeyExchange + : AbstractTlsKeyExchange + { + private static int CheckKeyExchange(int keyExchange) + { + switch (keyExchange) + { + case KeyExchangeAlgorithm.RSA: + return keyExchange; + default: + throw new ArgumentException("unsupported key exchange algorithm", "keyExchange"); + } + } + + protected TlsCredentialedDecryptor m_serverCredentials = null; + protected TlsEncryptor m_serverEncryptor; + protected TlsSecret m_preMasterSecret; + + public TlsRsaKeyExchange(int keyExchange) + : base(CheckKeyExchange(keyExchange)) + { + } + + public override void SkipServerCredentials() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public override void ProcessServerCredentials(TlsCredentials serverCredentials) + { + this.m_serverCredentials = TlsUtilities.RequireDecryptorCredentials(serverCredentials); + } + + public override void ProcessServerCertificate(Certificate serverCertificate) + { + this.m_serverEncryptor = serverCertificate.GetCertificateAt(0).CreateEncryptor( + TlsCertificateRole.RsaEncryption); + } + + public override short[] GetClientCertificateTypes() + { + return new short[]{ ClientCertificateType.rsa_sign, ClientCertificateType.dss_sign, + ClientCertificateType.ecdsa_sign }; + } + + public override void ProcessClientCredentials(TlsCredentials clientCredentials) + { + TlsUtilities.RequireSignerCredentials(clientCredentials); + } + + public override void GenerateClientKeyExchange(Stream output) + { + this.m_preMasterSecret = TlsUtilities.GenerateEncryptedPreMasterSecret(m_context, m_serverEncryptor, + output); + } + + public override void ProcessClientKeyExchange(Stream input) + { + byte[] encryptedPreMasterSecret = TlsUtilities.ReadEncryptedPms(m_context, input); + + this.m_preMasterSecret = m_serverCredentials.Decrypt(new TlsCryptoParameters(m_context), + encryptedPreMasterSecret); + } + + public override TlsSecret GeneratePreMasterSecret() + { + TlsSecret tmp = this.m_preMasterSecret; + this.m_preMasterSecret = null; + return tmp; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsRsaKeyExchange.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsRsaKeyExchange.cs.meta new file mode 100644 index 000000000..2a53e78cb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsRsaKeyExchange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9fac913575b75c94dbdcb8811af0c981 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServer.cs new file mode 100644 index 000000000..8f1ae055a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServer.cs @@ -0,0 +1,134 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Interface describing a TLS server endpoint. + public interface TlsServer + : TlsPeer + { + void Init(TlsServerContext context); + + /// Return the specified session, if available. + /// + /// Note that the peer's certificate chain for the session (if any) may need to be periodically revalidated. + /// + /// the ID of the session to resume. + /// A with the specified session ID, or null. + /// + TlsSession GetSessionToResume(byte[] sessionID); + + byte[] GetNewSessionID(); + + /// Return the external PSK to select from the ClientHello. + /// + /// WARNING: EXPERIMENTAL FEATURE, UNSTABLE API + /// Note that this will only be called when TLS 1.3 or higher is amongst the offered protocol versions, and one + /// or more PSKs are actually offered. + /// + /// an of instances. + /// The corresponding to the selected identity, or null to not select + /// any. + TlsPskExternal GetExternalPsk(IList identities); + + void NotifySession(TlsSession session); + + /// + void NotifyClientVersion(ProtocolVersion clientVersion); + + /// + void NotifyFallback(bool isFallback); + + /// + void NotifyOfferedCipherSuites(int[] offeredCipherSuites); + + /// (Int32 -> byte[]) + /// + void ProcessClientExtensions(IDictionary clientExtensions); + + /// + ProtocolVersion GetServerVersion(); + + /// + int[] GetSupportedGroups(); + + /// + int GetSelectedCipherSuite(); + + /// (Int32 -> byte[]) + /// + IDictionary GetServerExtensions(); + + /// (Int32 -> byte[]) + /// + void GetServerExtensionsForConnection(IDictionary serverExtensions); + + /// (SupplementalDataEntry) + /// + IList GetServerSupplementalData(); + + /// Return server credentials to use. + /// + /// The returned value may be null, or else it MUST implement exactly one of + /// , , or + /// , depending on the key exchange that was negotiated. + /// + /// a object or null for anonymous key exchanges. + /// + TlsCredentials GetCredentials(); + + /// + /// This method will be called (only) if the server included an extension of type "status_request" with empty + /// "extension_data" in the extended server hello. See RFC 3546 3.6. Certificate Status Request. If a + /// non-null is returned, it is sent to the client as a handshake message of + /// type "certificate_status". + /// + /// A to be sent to the client (or null for none). + /// + CertificateStatus GetCertificateStatus(); + + /// + CertificateRequest GetCertificateRequest(); + + /// + TlsPskIdentityManager GetPskIdentityManager(); + + /// + TlsSrpLoginParameters GetSrpLoginParameters(); + + /// + TlsDHConfig GetDHConfig(); + + /// + TlsECConfig GetECDHConfig(); + + /// (SupplementalDataEntry) + /// + void ProcessClientSupplementalData(IList clientSupplementalData); + + /// Called by the protocol handler to report the client certificate, only if + /// returned non-null. + /// + /// Note: this method is responsible for certificate verification and validation. + /// + /// the effective client certificate (may be an empty chain). + /// + void NotifyClientCertificate(Certificate clientCertificate); + + /// RFC 5077 3.3. NewSessionTicket Handshake Message. + /// + /// This method will be called (only) if a NewSessionTicket extension was sent by the server. See RFC 5077 + /// 4. Recommended Ticket Construction for recommended format and protection. + /// + /// The ticket. + /// + NewSessionTicket GetNewSessionTicket(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServer.cs.meta new file mode 100644 index 000000000..b93187835 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ef07d24824a1bd4a83a28d455dfdce6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerCertificate.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerCertificate.cs new file mode 100644 index 000000000..bfd9bb559 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerCertificate.cs @@ -0,0 +1,16 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Server certificate carrier interface. + public interface TlsServerCertificate + { + Certificate Certificate { get; } + + CertificateStatus CertificateStatus { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerCertificate.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerCertificate.cs.meta new file mode 100644 index 000000000..f6131ab17 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerCertificate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 74259383834cdb6429ba622ac4959a82 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerCertificateImpl.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerCertificateImpl.cs new file mode 100644 index 000000000..fc0fb98c3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerCertificateImpl.cs @@ -0,0 +1,31 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + internal sealed class TlsServerCertificateImpl + : TlsServerCertificate + { + private readonly Certificate m_certificate; + private readonly CertificateStatus m_certificateStatus; + + internal TlsServerCertificateImpl(Certificate certificate, CertificateStatus certificateStatus) + { + this.m_certificate = certificate; + this.m_certificateStatus = certificateStatus; + } + + public Certificate Certificate + { + get { return m_certificate; } + } + + public CertificateStatus CertificateStatus + { + get { return m_certificateStatus; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerCertificateImpl.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerCertificateImpl.cs.meta new file mode 100644 index 000000000..ce7653533 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerCertificateImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cb5cc921cdb09c9469cf7e46ecbc93e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerContext.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerContext.cs new file mode 100644 index 000000000..a3776ec2d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerContext.cs @@ -0,0 +1,14 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Marker interface to distinguish a TLS server context. + public interface TlsServerContext + : TlsContext + { + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerContext.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerContext.cs.meta new file mode 100644 index 000000000..a1747dc4f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 65007b4ed49391645abce84d17e8dbdd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerContextImpl.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerContextImpl.cs new file mode 100644 index 000000000..890b77c5c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerContextImpl.cs @@ -0,0 +1,24 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + internal class TlsServerContextImpl + : AbstractTlsContext, TlsServerContext + { + internal TlsServerContextImpl(TlsCrypto crypto) + : base(crypto, ConnectionEnd.server) + { + } + + public override bool IsServer + { + get { return true; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerContextImpl.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerContextImpl.cs.meta new file mode 100644 index 000000000..e809142c4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerContextImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 584aa9880d04cd142856288c87be171e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerProtocol.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerProtocol.cs new file mode 100644 index 000000000..9c368c573 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerProtocol.cs @@ -0,0 +1,1560 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public class TlsServerProtocol + : TlsProtocol + { + protected TlsServer m_tlsServer = null; + internal TlsServerContextImpl m_tlsServerContext = null; + + protected int[] m_offeredCipherSuites = null; + protected TlsKeyExchange m_keyExchange = null; + protected CertificateRequest m_certificateRequest = null; + + /// Constructor for non-blocking mode. + /// + /// When data is received, use to provide the received ciphertext, + /// then use to read the corresponding cleartext.

    + /// Similarly, when data needs to be sent, use + /// to provide the cleartext, then use to get the + /// corresponding ciphertext. + ///
    + public TlsServerProtocol() + : base() + { + } + + /// Constructor for blocking mode. + /// The of data to/from the server. + public TlsServerProtocol(Stream stream) + : base(stream) + { + } + + /// Constructor for blocking mode. + /// The of data from the server. + /// The of data to the server. + public TlsServerProtocol(Stream input, Stream output) + : base(input, output) + { + } + + /// Receives a TLS handshake in the role of server. + /// + /// In blocking mode, this will not return until the handshake is complete. In non-blocking mode, use + /// to receive a callback when the handshake is complete. + /// + /// The to use for the handshake. + /// If in blocking mode and handshake was not successful. + public void Accept(TlsServer tlsServer) + { + if (tlsServer == null) + throw new ArgumentNullException("tlsServer"); + if (m_tlsServer != null) + throw new InvalidOperationException("'Accept' can only be called once"); + + this.m_tlsServer = tlsServer; + this.m_tlsServerContext = new TlsServerContextImpl(tlsServer.Crypto); + + tlsServer.Init(m_tlsServerContext); + tlsServer.NotifyCloseHandle(this); + + BeginHandshake(false); + + if (m_blocking) + { + BlockForHandshake(); + } + } + + protected override void CleanupHandshake() + { + base.CleanupHandshake(); + + this.m_offeredCipherSuites = null; + this.m_keyExchange = null; + this.m_certificateRequest = null; + } + + protected virtual bool ExpectCertificateVerifyMessage() + { + if (null == m_certificateRequest) + return false; + + Certificate clientCertificate = m_tlsServerContext.SecurityParameters.PeerCertificate; + + return null != clientCertificate && !clientCertificate.IsEmpty + && (null == m_keyExchange || m_keyExchange.RequiresCertificateVerify); + } + + /// + protected virtual ServerHello Generate13HelloRetryRequest(ClientHello clientHello) + { + // TODO[tls13] In future there might be other reasons for a HelloRetryRequest. + if (m_retryGroup < 0) + throw new TlsFatalAlert(AlertDescription.internal_error); + + SecurityParameters securityParameters = m_tlsServerContext.SecurityParameters; + ProtocolVersion serverVersion = securityParameters.NegotiatedVersion; + + var serverHelloExtensions = new Dictionary(); + TlsExtensionsUtilities.AddSupportedVersionsExtensionServer(serverHelloExtensions, serverVersion); + if (m_retryGroup >= 0) + { + TlsExtensionsUtilities.AddKeyShareHelloRetryRequest(serverHelloExtensions, m_retryGroup); + } + if (null != m_retryCookie) + { + TlsExtensionsUtilities.AddCookieExtension(serverHelloExtensions, m_retryCookie); + } + + TlsUtilities.CheckExtensionData13(serverHelloExtensions, HandshakeType.hello_retry_request, + AlertDescription.internal_error); + + return new ServerHello(clientHello.SessionID, securityParameters.CipherSuite, serverHelloExtensions); + } + + /// + protected virtual ServerHello Generate13ServerHello(ClientHello clientHello, + HandshakeMessageInput clientHelloMessage, bool afterHelloRetryRequest) + { + SecurityParameters securityParameters = m_tlsServerContext.SecurityParameters; + + + byte[] legacy_session_id = clientHello.SessionID; + + var clientHelloExtensions = clientHello.Extensions; + if (null == clientHelloExtensions) + throw new TlsFatalAlert(AlertDescription.missing_extension); + + + ProtocolVersion serverVersion = securityParameters.NegotiatedVersion; + TlsCrypto crypto = m_tlsServerContext.Crypto; + + // NOTE: Will only select for psk_dhe_ke + OfferedPsks.SelectedConfig selectedPsk = TlsUtilities.SelectPreSharedKey(m_tlsServerContext, m_tlsServer, + clientHelloExtensions, clientHelloMessage, m_handshakeHash, afterHelloRetryRequest); + + var clientShares = TlsExtensionsUtilities.GetKeyShareClientHello(clientHelloExtensions); + KeyShareEntry clientShare = null; + + if (afterHelloRetryRequest) + { + if (m_retryGroup < 0) + throw new TlsFatalAlert(AlertDescription.internal_error); + + if (null == selectedPsk) + { + /* + * RFC 8446 4.2.3. If a server is authenticating via a certificate and the client has + * not sent a "signature_algorithms" extension, then the server MUST abort the handshake + * with a "missing_extension" alert. + */ + if (null == securityParameters.ClientSigAlgs) + throw new TlsFatalAlert(AlertDescription.missing_extension); + } + else + { + // TODO[tls13] Maybe filter the offered PSKs by PRF algorithm before server selection instead + if (selectedPsk.m_psk.PrfAlgorithm != securityParameters.PrfAlgorithm) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + /* + * TODO[tls13] Confirm fields in the ClientHello haven't changed + * + * RFC 8446 4.1.2 [..] when the server has responded to its ClientHello with a + * HelloRetryRequest [..] the client MUST send the same ClientHello without + * modification, except as follows: [key_share, early_data, cookie, pre_shared_key, + * padding]. + */ + + byte[] cookie = TlsExtensionsUtilities.GetCookieExtension(clientHelloExtensions); + if (!Arrays.AreEqual(m_retryCookie, cookie)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + this.m_retryCookie = null; + + clientShare = TlsUtilities.SelectKeyShare(clientShares, m_retryGroup); + if (null == clientShare) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + else + { + { + securityParameters.m_serverRandom = CreateRandomBlock(false, m_tlsServerContext); + + if (!serverVersion.Equals(ProtocolVersion.GetLatestTls(m_tlsServer.GetProtocolVersions()))) + { + TlsUtilities.WriteDowngradeMarker(serverVersion, securityParameters.ServerRandom); + } + } + + this.m_clientExtensions = clientHelloExtensions; + + securityParameters.m_secureRenegotiation = false; + + // NOTE: Validates the padding extension data, if present + TlsExtensionsUtilities.GetPaddingExtension(clientHelloExtensions); + + securityParameters.m_clientServerNames = TlsExtensionsUtilities + .GetServerNameExtensionClient(clientHelloExtensions); + + TlsUtilities.EstablishClientSigAlgs(securityParameters, clientHelloExtensions); + + /* + * RFC 8446 4.2.3. If a server is authenticating via a certificate and the client has + * not sent a "signature_algorithms" extension, then the server MUST abort the handshake + * with a "missing_extension" alert. + */ + if (null == selectedPsk && null == securityParameters.ClientSigAlgs) + throw new TlsFatalAlert(AlertDescription.missing_extension); + + m_tlsServer.ProcessClientExtensions(clientHelloExtensions); + + /* + * NOTE: Currently no server support for session resumption + * + * If adding support, ensure securityParameters.tlsUnique is set to the localVerifyData, but + * ONLY when extended_master_secret has been negotiated (otherwise NULL). + */ + { + // TODO[tls13] Resumption/PSK + securityParameters.m_resumedSession = false; + + this.m_tlsSession = TlsUtilities.ImportSession(TlsUtilities.EmptyBytes, null); + this.m_sessionParameters = null; + this.m_sessionMasterSecret = null; + } + + securityParameters.m_sessionID = m_tlsSession.SessionID; + + m_tlsServer.NotifySession(m_tlsSession); + + TlsUtilities.NegotiatedVersionTlsServer(m_tlsServerContext); + + { + // TODO[tls13] Constrain selection when PSK selected + int cipherSuite = m_tlsServer.GetSelectedCipherSuite(); + + if (!TlsUtilities.IsValidCipherSuiteSelection(m_offeredCipherSuites, cipherSuite) || + !TlsUtilities.IsValidVersionForCipherSuite(cipherSuite, serverVersion)) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + TlsUtilities.NegotiatedCipherSuite(securityParameters, cipherSuite); + } + + int[] clientSupportedGroups = securityParameters.ClientSupportedGroups; + int[] serverSupportedGroups = securityParameters.ServerSupportedGroups; + + clientShare = TlsUtilities.SelectKeyShare(crypto, serverVersion, clientShares, clientSupportedGroups, + serverSupportedGroups); + + if (null == clientShare) + { + this.m_retryGroup = TlsUtilities.SelectKeyShareGroup(crypto, serverVersion, clientSupportedGroups, + serverSupportedGroups); + if (m_retryGroup < 0) + throw new TlsFatalAlert(AlertDescription.handshake_failure); + + this.m_retryCookie = m_tlsServerContext.NonceGenerator.GenerateNonce(16); + + return Generate13HelloRetryRequest(clientHello); + } + + if (clientShare.NamedGroup != serverSupportedGroups[0]) + { + /* + * TODO[tls13] RFC 8446 4.2.7. As of TLS 1.3, servers are permitted to send the + * "supported_groups" extension to the client. Clients MUST NOT act upon any + * information found in "supported_groups" prior to successful completion of the + * handshake but MAY use the information learned from a successfully completed + * handshake to change what groups they use in their "key_share" extension in + * subsequent connections. If the server has a group it prefers to the ones in the + * "key_share" extension but is still willing to accept the ClientHello, it SHOULD + * send "supported_groups" to update the client's view of its preferences; this + * extension SHOULD contain all groups the server supports, regardless of whether + * they are currently supported by the client. + */ + } + } + + + var serverHelloExtensions = new Dictionary(); + var serverEncryptedExtensions = TlsExtensionsUtilities.EnsureExtensionsInitialised( + m_tlsServer.GetServerExtensions()); + + m_tlsServer.GetServerExtensionsForConnection(serverEncryptedExtensions); + + ProtocolVersion serverLegacyVersion = ProtocolVersion.TLSv12; + TlsExtensionsUtilities.AddSupportedVersionsExtensionServer(serverHelloExtensions, serverVersion); + + /* + * RFC 8446 Appendix D. Because TLS 1.3 always hashes in the transcript up to the server + * Finished, implementations which support both TLS 1.3 and earlier versions SHOULD indicate + * the use of the Extended Master Secret extension in their APIs whenever TLS 1.3 is used. + */ + securityParameters.m_extendedMasterSecret = true; + + /* + * RFC 7301 3.1. When session resumption or session tickets [...] are used, the previous + * contents of this extension are irrelevant, and only the values in the new handshake + * messages are considered. + */ + securityParameters.m_applicationProtocol = TlsExtensionsUtilities.GetAlpnExtensionServer( + serverEncryptedExtensions); + securityParameters.m_applicationProtocolSet = true; + + if (serverEncryptedExtensions.Count > 0) + { + securityParameters.m_maxFragmentLength = ProcessMaxFragmentLengthExtension( + securityParameters.IsResumedSession ? null : clientHelloExtensions, serverEncryptedExtensions, + AlertDescription.internal_error); + } + + securityParameters.m_encryptThenMac = false; + securityParameters.m_truncatedHmac = false; + + /* + * TODO[tls13] RFC 8446 4.4.2.1. OCSP Status and SCT Extensions. + * + * OCSP information is carried in an extension for a CertificateEntry. + */ + securityParameters.m_statusRequestVersion = + clientHelloExtensions.ContainsKey(ExtensionType.status_request) ? 1 : 0; + + this.m_expectSessionTicket = false; + + TlsSecret pskEarlySecret = null; + if (null != selectedPsk) + { + pskEarlySecret = selectedPsk.m_earlySecret; + + this.m_selectedPsk13 = true; + + TlsExtensionsUtilities.AddPreSharedKeyServerHello(serverHelloExtensions, selectedPsk.m_index); + } + + TlsSecret sharedSecret; + { + int namedGroup = clientShare.NamedGroup; + + TlsAgreement agreement; + if (NamedGroup.RefersToASpecificCurve(namedGroup)) + { + agreement = crypto.CreateECDomain(new TlsECConfig(namedGroup)).CreateECDH(); + } + else if (NamedGroup.RefersToASpecificFiniteField(namedGroup)) + { + agreement = crypto.CreateDHDomain(new TlsDHConfig(namedGroup, true)).CreateDH(); + } + else + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + byte[] key_exchange = agreement.GenerateEphemeral(); + KeyShareEntry serverShare = new KeyShareEntry(namedGroup, key_exchange); + TlsExtensionsUtilities.AddKeyShareServerHello(serverHelloExtensions, serverShare); + + agreement.ReceivePeerValue(clientShare.KeyExchange); + sharedSecret = agreement.CalculateSecret(); + } + + TlsUtilities.Establish13PhaseSecrets(m_tlsServerContext, pskEarlySecret, sharedSecret); + + this.m_serverExtensions = serverEncryptedExtensions; + + ApplyMaxFragmentLengthExtension(securityParameters.MaxFragmentLength); + + TlsUtilities.CheckExtensionData13(serverHelloExtensions, HandshakeType.server_hello, + AlertDescription.internal_error); + + return new ServerHello(serverLegacyVersion, securityParameters.ServerRandom, legacy_session_id, + securityParameters.CipherSuite, serverHelloExtensions); + } + + /// + protected virtual ServerHello GenerateServerHello(ClientHello clientHello, + HandshakeMessageInput clientHelloMessage) + { + ProtocolVersion clientLegacyVersion = clientHello.Version; + if (!clientLegacyVersion.IsTls) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + this.m_offeredCipherSuites = clientHello.CipherSuites; + + + + SecurityParameters securityParameters = m_tlsServerContext.SecurityParameters; + + m_tlsServerContext.SetClientSupportedVersions( + TlsExtensionsUtilities.GetSupportedVersionsExtensionClient(clientHello.Extensions)); + + ProtocolVersion clientVersion = clientLegacyVersion; + if (null == m_tlsServerContext.ClientSupportedVersions) + { + if (clientVersion.IsLaterVersionOf(ProtocolVersion.TLSv12)) + { + clientVersion = ProtocolVersion.TLSv12; + } + + m_tlsServerContext.SetClientSupportedVersions(clientVersion.DownTo(ProtocolVersion.SSLv3)); + } + else + { + clientVersion = ProtocolVersion.GetLatestTls(m_tlsServerContext.ClientSupportedVersions); + } + + // Set the legacy_record_version to use for early alerts + m_recordStream.SetWriteVersion(clientVersion); + + if (!ProtocolVersion.SERVER_EARLIEST_SUPPORTED_TLS.IsEqualOrEarlierVersionOf(clientVersion)) + throw new TlsFatalAlert(AlertDescription.protocol_version); + + // NOT renegotiating + { + m_tlsServerContext.SetClientVersion(clientVersion); + } + + m_tlsServer.NotifyClientVersion(m_tlsServerContext.ClientVersion); + + securityParameters.m_clientRandom = clientHello.Random; + + m_tlsServer.NotifyFallback(Arrays.Contains(m_offeredCipherSuites, CipherSuite.TLS_FALLBACK_SCSV)); + + m_tlsServer.NotifyOfferedCipherSuites(m_offeredCipherSuites); + + // TODO[tls13] Negotiate cipher suite first? + + ProtocolVersion serverVersion; + + // NOT renegotiating + { + serverVersion = m_tlsServer.GetServerVersion(); + if (!ProtocolVersion.Contains(m_tlsServerContext.ClientSupportedVersions, serverVersion)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + securityParameters.m_negotiatedVersion = serverVersion; + } + + securityParameters.m_clientSupportedGroups = TlsExtensionsUtilities.GetSupportedGroupsExtension( + clientHello.Extensions); + securityParameters.m_serverSupportedGroups = m_tlsServer.GetSupportedGroups(); + + if (ProtocolVersion.TLSv13.IsEqualOrEarlierVersionOf(serverVersion)) + { + // See RFC 8446 D.4. + m_recordStream.SetIgnoreChangeCipherSpec(true); + + m_recordStream.SetWriteVersion(ProtocolVersion.TLSv12); + + return Generate13ServerHello(clientHello, clientHelloMessage, false); + } + + m_recordStream.SetWriteVersion(serverVersion); + + { + bool useGmtUnixTime = m_tlsServer.ShouldUseGmtUnixTime(); + + securityParameters.m_serverRandom = CreateRandomBlock(useGmtUnixTime, m_tlsServerContext); + + if (!serverVersion.Equals(ProtocolVersion.GetLatestTls(m_tlsServer.GetProtocolVersions()))) + { + TlsUtilities.WriteDowngradeMarker(serverVersion, securityParameters.ServerRandom); + } + } + + this.m_clientExtensions = clientHello.Extensions; + + byte[] clientRenegExtData = TlsUtilities.GetExtensionData(m_clientExtensions, ExtensionType.renegotiation_info); + + // NOT renegotiating + { + /* + * RFC 5746 3.6. Server Behavior: Initial Handshake (both full and session-resumption) + */ + + /* + * RFC 5746 3.4. The client MUST include either an empty "renegotiation_info" extension, + * or the TLS_EMPTY_RENEGOTIATION_INFO_SCSV signaling cipher suite value in the + * ClientHello. Including both is NOT RECOMMENDED. + */ + + /* + * When a ClientHello is received, the server MUST check if it includes the + * TLS_EMPTY_RENEGOTIATION_INFO_SCSV SCSV. If it does, set the secure_renegotiation flag + * to TRUE. + */ + if (Arrays.Contains(m_offeredCipherSuites, CipherSuite.TLS_EMPTY_RENEGOTIATION_INFO_SCSV)) + { + securityParameters.m_secureRenegotiation = true; + } + + /* + * The server MUST check if the "renegotiation_info" extension is included in the + * ClientHello. + */ + if (clientRenegExtData != null) + { + /* + * If the extension is present, set secure_renegotiation flag to TRUE. The + * server MUST then verify that the length of the "renegotiated_connection" + * field is zero, and if it is not, MUST abort the handshake. + */ + securityParameters.m_secureRenegotiation = true; + + if (!Arrays.ConstantTimeAreEqual(clientRenegExtData, + CreateRenegotiationInfo(TlsUtilities.EmptyBytes))) + { + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + } + } + + m_tlsServer.NotifySecureRenegotiation(securityParameters.IsSecureRenegotiation); + + bool offeredExtendedMasterSecret = TlsExtensionsUtilities.HasExtendedMasterSecretExtension( + m_clientExtensions); + + if (m_clientExtensions != null) + { + // NOTE: Validates the padding extension data, if present + TlsExtensionsUtilities.GetPaddingExtension(m_clientExtensions); + + securityParameters.m_clientServerNames = TlsExtensionsUtilities.GetServerNameExtensionClient( + m_clientExtensions); + + /* + * RFC 5246 7.4.1.4.1. Note: this extension is not meaningful for TLS versions prior + * to 1.2. Clients MUST NOT offer it if they are offering prior versions. + */ + if (TlsUtilities.IsSignatureAlgorithmsExtensionAllowed(clientVersion)) + { + TlsUtilities.EstablishClientSigAlgs(securityParameters, m_clientExtensions); + } + + securityParameters.m_clientSupportedGroups = TlsExtensionsUtilities.GetSupportedGroupsExtension( + m_clientExtensions); + + m_tlsServer.ProcessClientExtensions(m_clientExtensions); + } + + bool resumedSession = EstablishSession(m_tlsServer.GetSessionToResume(clientHello.SessionID)); + securityParameters.m_resumedSession = resumedSession; + + if (!resumedSession) + { + byte[] newSessionID = m_tlsServer.GetNewSessionID(); + if (null == newSessionID) + { + newSessionID = TlsUtilities.EmptyBytes; + } + + this.m_tlsSession = TlsUtilities.ImportSession(newSessionID, null); + this.m_sessionParameters = null; + this.m_sessionMasterSecret = null; + } + + securityParameters.m_sessionID = m_tlsSession.SessionID; + + m_tlsServer.NotifySession(m_tlsSession); + + TlsUtilities.NegotiatedVersionTlsServer(m_tlsServerContext); + + { + int cipherSuite = resumedSession + ? m_sessionParameters.CipherSuite + : m_tlsServer.GetSelectedCipherSuite(); + + if (!TlsUtilities.IsValidCipherSuiteSelection(m_offeredCipherSuites, cipherSuite) || + !TlsUtilities.IsValidVersionForCipherSuite(cipherSuite, serverVersion)) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + TlsUtilities.NegotiatedCipherSuite(securityParameters, cipherSuite); + } + + m_tlsServerContext.SetRsaPreMasterSecretVersion(clientLegacyVersion); + + { + var sessionServerExtensions = resumedSession + ? m_sessionParameters.ReadServerExtensions() + : m_tlsServer.GetServerExtensions(); + + this.m_serverExtensions = TlsExtensionsUtilities.EnsureExtensionsInitialised(sessionServerExtensions); + } + + m_tlsServer.GetServerExtensionsForConnection(m_serverExtensions); + + // NOT renegotiating + { + /* + * RFC 5746 3.6. Server Behavior: Initial Handshake (both full and session-resumption) + */ + if (securityParameters.IsSecureRenegotiation) + { + byte[] serverRenegExtData = TlsUtilities.GetExtensionData(m_serverExtensions, + ExtensionType.renegotiation_info); + bool noRenegExt = (null == serverRenegExtData); + + if (noRenegExt) + { + /* + * Note that sending a "renegotiation_info" extension in response to a ClientHello + * containing only the SCSV is an explicit exception to the prohibition in RFC 5246, + * Section 7.4.1.4, on the server sending unsolicited extensions and is only allowed + * because the client is signaling its willingness to receive the extension via the + * TLS_EMPTY_RENEGOTIATION_INFO_SCSV SCSV. + */ + + /* + * If the secure_renegotiation flag is set to TRUE, the server MUST include an empty + * "renegotiation_info" extension in the ServerHello message. + */ + this.m_serverExtensions[ExtensionType.renegotiation_info] = CreateRenegotiationInfo( + TlsUtilities.EmptyBytes); + } + } + } + + /* + * RFC 7627 4. Clients and servers SHOULD NOT accept handshakes that do not use the extended + * master secret [..]. (and see 5.2, 5.3) + */ + if (resumedSession) + { + if (!m_sessionParameters.IsExtendedMasterSecret) + { + /* + * TODO[resumption] ProvTlsServer currently only resumes EMS sessions. Revisit this + * in relation to 'tlsServer.allowLegacyResumption()'. + */ + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + if (!offeredExtendedMasterSecret) + throw new TlsFatalAlert(AlertDescription.handshake_failure); + + securityParameters.m_extendedMasterSecret = true; + + TlsExtensionsUtilities.AddExtendedMasterSecretExtension(m_serverExtensions); + } + else + { + securityParameters.m_extendedMasterSecret = offeredExtendedMasterSecret && !serverVersion.IsSsl + && m_tlsServer.ShouldUseExtendedMasterSecret(); + + if (securityParameters.IsExtendedMasterSecret) + { + TlsExtensionsUtilities.AddExtendedMasterSecretExtension(m_serverExtensions); + } + else if (m_tlsServer.RequiresExtendedMasterSecret()) + { + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + } + + securityParameters.m_applicationProtocol = TlsExtensionsUtilities.GetAlpnExtensionServer(m_serverExtensions); + securityParameters.m_applicationProtocolSet = true; + + if (m_serverExtensions.Count > 0) + { + securityParameters.m_encryptThenMac = TlsExtensionsUtilities.HasEncryptThenMacExtension( + m_serverExtensions); + + securityParameters.m_maxFragmentLength = ProcessMaxFragmentLengthExtension( + resumedSession ? null : m_clientExtensions, m_serverExtensions, AlertDescription.internal_error); + + securityParameters.m_truncatedHmac = TlsExtensionsUtilities.HasTruncatedHmacExtension( + m_serverExtensions); + + if (!resumedSession) + { + if (TlsUtilities.HasExpectedEmptyExtensionData(m_serverExtensions, ExtensionType.status_request_v2, + AlertDescription.internal_error)) + { + securityParameters.m_statusRequestVersion = 2; + } + else if (TlsUtilities.HasExpectedEmptyExtensionData(m_serverExtensions, ExtensionType.status_request, + AlertDescription.internal_error)) + { + securityParameters.m_statusRequestVersion = 1; + } + + this.m_expectSessionTicket = TlsUtilities.HasExpectedEmptyExtensionData(m_serverExtensions, + ExtensionType.session_ticket, AlertDescription.internal_error); + } + } + + ApplyMaxFragmentLengthExtension(securityParameters.MaxFragmentLength); + + return new ServerHello(serverVersion, securityParameters.ServerRandom, m_tlsSession.SessionID, + securityParameters.CipherSuite, m_serverExtensions); + } + + protected override TlsContext Context + { + get { return m_tlsServerContext; } + } + + internal override AbstractTlsContext ContextAdmin + { + get { return m_tlsServerContext; } + } + + protected override TlsPeer Peer + { + get { return m_tlsServer; } + } + + /// + protected virtual void Handle13HandshakeMessage(short type, HandshakeMessageInput buf) + { + if (!IsTlsV13ConnectionState()) + throw new TlsFatalAlert(AlertDescription.internal_error); + + /* + * TODO[tls13] Abbreviated handshakes (PSK resumption) + * + * NOTE: No CertificateRequest, Certificate, CertificateVerify messages, but client + * might now send EndOfEarlyData after receiving server Finished message. + */ + + switch (type) + { + case HandshakeType.certificate: + { + switch (m_connectionState) + { + case CS_SERVER_FINISHED: + { + Receive13ClientCertificate(buf); + this.m_connectionState = CS_CLIENT_CERTIFICATE; + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + case HandshakeType.certificate_verify: + { + switch (m_connectionState) + { + case CS_CLIENT_CERTIFICATE: + { + Receive13ClientCertificateVerify(buf); + buf.UpdateHash(m_handshakeHash); + this.m_connectionState = CS_CLIENT_CERTIFICATE_VERIFY; + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + case HandshakeType.client_hello: + { + switch (m_connectionState) + { + case CS_START: + { + // NOTE: Legacy handler should be dispatching initial ClientHello. + throw new TlsFatalAlert(AlertDescription.internal_error); + } + case CS_SERVER_HELLO_RETRY_REQUEST: + { + ClientHello clientHelloRetry = ReceiveClientHelloMessage(buf); + this.m_connectionState = CS_CLIENT_HELLO_RETRY; + + ServerHello serverHello = Generate13ServerHello(clientHelloRetry, buf, true); + SendServerHelloMessage(serverHello); + this.m_connectionState = CS_SERVER_HELLO; + + Send13ServerHelloCoda(serverHello, true); + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + case HandshakeType.finished: + { + switch (m_connectionState) + { + case CS_SERVER_FINISHED: + case CS_CLIENT_CERTIFICATE: + case CS_CLIENT_CERTIFICATE_VERIFY: + { + if (m_connectionState == CS_SERVER_FINISHED) + { + Skip13ClientCertificate(); + } + if (m_connectionState != CS_CLIENT_CERTIFICATE_VERIFY) + { + Skip13ClientCertificateVerify(); + } + + Receive13ClientFinished(buf); + this.m_connectionState = CS_CLIENT_FINISHED; + + // See RFC 8446 D.4. + m_recordStream.SetIgnoreChangeCipherSpec(false); + + // NOTE: Completes the switch to application-data phase (server entered after CS_SERVER_FINISHED). + m_recordStream.EnablePendingCipherRead(false); + + CompleteHandshake(); + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + case HandshakeType.key_update: + { + Receive13KeyUpdate(buf); + break; + } + + case HandshakeType.certificate_request: + case HandshakeType.certificate_status: + case HandshakeType.certificate_url: + case HandshakeType.client_key_exchange: + case HandshakeType.compressed_certificate: + case HandshakeType.encrypted_extensions: + case HandshakeType.end_of_early_data: + case HandshakeType.hello_request: + case HandshakeType.hello_verify_request: + case HandshakeType.message_hash: + case HandshakeType.new_session_ticket: + case HandshakeType.server_hello: + case HandshakeType.server_hello_done: + case HandshakeType.server_key_exchange: + case HandshakeType.supplemental_data: + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + } + + protected override void HandleHandshakeMessage(short type, HandshakeMessageInput buf) + { + SecurityParameters securityParameters = m_tlsServerContext.SecurityParameters; + + if (m_connectionState > CS_CLIENT_HELLO + && TlsUtilities.IsTlsV13(securityParameters.NegotiatedVersion)) + { + if (securityParameters.IsResumedSession) + throw new TlsFatalAlert(AlertDescription.internal_error); + + Handle13HandshakeMessage(type, buf); + return; + } + + if (!IsLegacyConnectionState()) + throw new TlsFatalAlert(AlertDescription.internal_error); + + if (securityParameters.IsResumedSession) + { + if (type != HandshakeType.finished || m_connectionState != CS_SERVER_FINISHED) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + ProcessFinishedMessage(buf); + this.m_connectionState = CS_CLIENT_FINISHED; + + CompleteHandshake(); + return; + } + + switch (type) + { + case HandshakeType.client_hello: + { + if (IsApplicationDataReady) + { + RefuseRenegotiation(); + break; + } + + switch (m_connectionState) + { + case CS_END: + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + case CS_START: + { + ClientHello clientHello = ReceiveClientHelloMessage(buf); + this.m_connectionState = CS_CLIENT_HELLO; + + ServerHello serverHello = GenerateServerHello(clientHello, buf); + m_handshakeHash.NotifyPrfDetermined(); + + if (TlsUtilities.IsTlsV13(securityParameters.NegotiatedVersion)) + { + m_handshakeHash.SealHashAlgorithms(); + + if (serverHello.IsHelloRetryRequest()) + { + TlsUtilities.AdjustTranscriptForRetry(m_handshakeHash); + + SendServerHelloMessage(serverHello); + this.m_connectionState = CS_SERVER_HELLO_RETRY_REQUEST; + + // See RFC 8446 D.4. + SendChangeCipherSpecMessage(); + } + else + { + SendServerHelloMessage(serverHello); + this.m_connectionState = CS_SERVER_HELLO; + + // See RFC 8446 D.4. + SendChangeCipherSpecMessage(); + + Send13ServerHelloCoda(serverHello, false); + } + break; + } + + // For TLS 1.3+, this was already done by GenerateServerHello + buf.UpdateHash(m_handshakeHash); + + SendServerHelloMessage(serverHello); + this.m_connectionState = CS_SERVER_HELLO; + + if (securityParameters.IsResumedSession) + { + securityParameters.m_masterSecret = m_sessionMasterSecret; + m_recordStream.SetPendingCipher(TlsUtilities.InitCipher(m_tlsServerContext)); + + SendChangeCipherSpec(); + SendFinishedMessage(); + this.m_connectionState = CS_SERVER_FINISHED; + break; + } + + var serverSupplementalData = m_tlsServer.GetServerSupplementalData(); + if (serverSupplementalData != null) + { + SendSupplementalDataMessage(serverSupplementalData); + this.m_connectionState = CS_SERVER_SUPPLEMENTAL_DATA; + } + + this.m_keyExchange = TlsUtilities.InitKeyExchangeServer(m_tlsServerContext, m_tlsServer); + + TlsCredentials serverCredentials = null; + + if (!KeyExchangeAlgorithm.IsAnonymous(securityParameters.KeyExchangeAlgorithm)) + { + serverCredentials = TlsUtilities.EstablishServerCredentials(m_tlsServer); + } + + // Server certificate + { + Certificate serverCertificate = null; + + MemoryStream endPointHash = new MemoryStream(); + if (null == serverCredentials) + { + m_keyExchange.SkipServerCredentials(); + } + else + { + m_keyExchange.ProcessServerCredentials(serverCredentials); + + serverCertificate = serverCredentials.Certificate; + SendCertificateMessage(serverCertificate, endPointHash); + this.m_connectionState = CS_SERVER_CERTIFICATE; + } + + securityParameters.m_tlsServerEndPoint = endPointHash.ToArray(); + + // TODO[RFC 3546] Check whether empty certificates is possible, allowed, or excludes + // CertificateStatus + if (null == serverCertificate || serverCertificate.IsEmpty) + { + securityParameters.m_statusRequestVersion = 0; + } + } + + if (securityParameters.StatusRequestVersion > 0) + { + CertificateStatus certificateStatus = m_tlsServer.GetCertificateStatus(); + if (certificateStatus != null) + { + SendCertificateStatusMessage(certificateStatus); + this.m_connectionState = CS_SERVER_CERTIFICATE_STATUS; + } + } + + byte[] serverKeyExchange = m_keyExchange.GenerateServerKeyExchange(); + if (serverKeyExchange != null) + { + SendServerKeyExchangeMessage(serverKeyExchange); + this.m_connectionState = CS_SERVER_KEY_EXCHANGE; + } + + if (null != serverCredentials) + { + this.m_certificateRequest = m_tlsServer.GetCertificateRequest(); + + if (null == m_certificateRequest) + { + /* + * For static agreement key exchanges, CertificateRequest is required since + * the client Certificate message is mandatory but can only be sent if the + * server requests it. + */ + if (!m_keyExchange.RequiresCertificateVerify) + throw new TlsFatalAlert(AlertDescription.internal_error); + } + else + { + if (TlsUtilities.IsTlsV12(m_tlsServerContext) + != (m_certificateRequest.SupportedSignatureAlgorithms != null)) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + this.m_certificateRequest = TlsUtilities.ValidateCertificateRequest(m_certificateRequest, + m_keyExchange); + + TlsUtilities.EstablishServerSigAlgs(securityParameters, m_certificateRequest); + + if (ProtocolVersion.TLSv12.Equals(securityParameters.NegotiatedVersion)) + { + TlsUtilities.TrackHashAlgorithms(m_handshakeHash, securityParameters.ServerSigAlgs); + + if (m_tlsServerContext.Crypto.HasAnyStreamVerifiers(securityParameters.ServerSigAlgs)) + { + m_handshakeHash.ForceBuffering(); + } + } + else + { + if (m_tlsServerContext.Crypto.HasAnyStreamVerifiersLegacy(m_certificateRequest.CertificateTypes)) + { + m_handshakeHash.ForceBuffering(); + } + } + } + } + + m_handshakeHash.SealHashAlgorithms(); + + if (null != m_certificateRequest) + { + SendCertificateRequestMessage(m_certificateRequest); + this.m_connectionState = CS_SERVER_CERTIFICATE_REQUEST; + } + + SendServerHelloDoneMessage(); + this.m_connectionState = CS_SERVER_HELLO_DONE; + + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + case HandshakeType.supplemental_data: + { + switch (m_connectionState) + { + case CS_SERVER_HELLO_DONE: + { + m_tlsServer.ProcessClientSupplementalData(ReadSupplementalDataMessage(buf)); + this.m_connectionState = CS_CLIENT_SUPPLEMENTAL_DATA; + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + case HandshakeType.certificate: + { + switch (m_connectionState) + { + case CS_SERVER_HELLO_DONE: + case CS_CLIENT_SUPPLEMENTAL_DATA: + { + if (m_connectionState != CS_CLIENT_SUPPLEMENTAL_DATA) + { + m_tlsServer.ProcessClientSupplementalData(null); + } + + ReceiveCertificateMessage(buf); + this.m_connectionState = CS_CLIENT_CERTIFICATE; + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + case HandshakeType.client_key_exchange: + { + switch (m_connectionState) + { + case CS_SERVER_HELLO_DONE: + case CS_CLIENT_SUPPLEMENTAL_DATA: + case CS_CLIENT_CERTIFICATE: + { + if (m_connectionState == CS_SERVER_HELLO_DONE) + { + m_tlsServer.ProcessClientSupplementalData(null); + } + if (m_connectionState != CS_CLIENT_CERTIFICATE) + { + if (null == m_certificateRequest) + { + m_keyExchange.SkipClientCredentials(); + } + else if (TlsUtilities.IsTlsV12(m_tlsServerContext)) + { + /* + * RFC 5246 If no suitable certificate is available, the client MUST send a + * certificate message containing no certificates. + * + * NOTE: In previous RFCs, this was SHOULD instead of MUST. + */ + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + else if (TlsUtilities.IsSsl(m_tlsServerContext)) + { + /* + * SSL 3.0 If the server has sent a certificate request Message, the client must + * send either the certificate message or a no_certificate alert. + */ + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + else + { + NotifyClientCertificate(Certificate.EmptyChain); + } + } + + ReceiveClientKeyExchangeMessage(buf); + this.m_connectionState = CS_CLIENT_KEY_EXCHANGE; + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + case HandshakeType.certificate_verify: + { + switch (m_connectionState) + { + case CS_CLIENT_KEY_EXCHANGE: + { + /* + * RFC 5246 7.4.8 This message is only sent following a client certificate that has + * signing capability (i.e., all certificates except those containing fixed + * Diffie-Hellman parameters). + */ + if (!ExpectCertificateVerifyMessage()) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + ReceiveCertificateVerifyMessage(buf); + buf.UpdateHash(m_handshakeHash); + this.m_connectionState = CS_CLIENT_CERTIFICATE_VERIFY; + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + case HandshakeType.finished: + { + switch (m_connectionState) + { + case CS_CLIENT_KEY_EXCHANGE: + case CS_CLIENT_CERTIFICATE_VERIFY: + { + if (m_connectionState != CS_CLIENT_CERTIFICATE_VERIFY) + { + if (ExpectCertificateVerifyMessage()) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + ProcessFinishedMessage(buf); + buf.UpdateHash(m_handshakeHash); + this.m_connectionState = CS_CLIENT_FINISHED; + + if (m_expectSessionTicket) + { + /* + * TODO[new_session_ticket] Check the server-side rules regarding the session ID, since + * the client is going to ignore any session ID it received once it sees the + * new_session_ticket message. + */ + + SendNewSessionTicketMessage(m_tlsServer.GetNewSessionTicket()); + this.m_connectionState = CS_SERVER_SESSION_TICKET; + } + + SendChangeCipherSpec(); + SendFinishedMessage(); + this.m_connectionState = CS_SERVER_FINISHED; + + CompleteHandshake(); + break; + } + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + break; + } + + case HandshakeType.certificate_request: + case HandshakeType.certificate_status: + case HandshakeType.certificate_url: + case HandshakeType.compressed_certificate: + case HandshakeType.encrypted_extensions: + case HandshakeType.end_of_early_data: + case HandshakeType.hello_request: + case HandshakeType.hello_verify_request: + case HandshakeType.key_update: + case HandshakeType.message_hash: + case HandshakeType.new_session_ticket: + case HandshakeType.server_hello: + case HandshakeType.server_hello_done: + case HandshakeType.server_key_exchange: + default: + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + } + + protected override void HandleAlertWarningMessage(short alertDescription) + { + /* + * SSL 3.0 If the server has sent a certificate request Message, the client must send + * either the certificate message or a no_certificate alert. + */ + if (AlertDescription.no_certificate == alertDescription && null != m_certificateRequest + && TlsUtilities.IsSsl(m_tlsServerContext)) + { + switch (m_connectionState) + { + case CS_SERVER_HELLO_DONE: + case CS_CLIENT_SUPPLEMENTAL_DATA: + { + if (m_connectionState != CS_CLIENT_SUPPLEMENTAL_DATA) + { + m_tlsServer.ProcessClientSupplementalData(null); + } + + NotifyClientCertificate(Certificate.EmptyChain); + this.m_connectionState = CS_CLIENT_CERTIFICATE; + return; + } + } + } + + base.HandleAlertWarningMessage(alertDescription); + } + + /// + protected virtual void NotifyClientCertificate(Certificate clientCertificate) + { + if (null == m_certificateRequest) + throw new TlsFatalAlert(AlertDescription.internal_error); + + TlsUtilities.ProcessClientCertificate(m_tlsServerContext, clientCertificate, m_keyExchange, m_tlsServer); + } + + /// + protected virtual void Receive13ClientCertificate(MemoryStream buf) + { + // TODO[tls13] This currently just duplicates 'receiveCertificateMessage' + + if (null == m_certificateRequest) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + Certificate.ParseOptions options = new Certificate.ParseOptions() + { + CertificateType = TlsExtensionsUtilities.GetClientCertificateTypeExtensionServer(m_serverExtensions, + CertificateType.X509), + MaxChainLength = m_tlsServer.GetMaxCertificateChainLength(), + }; + + Certificate clientCertificate = Certificate.Parse(options, m_tlsServerContext, buf, null); + + AssertEmpty(buf); + + NotifyClientCertificate(clientCertificate); + } + + /// + protected void Receive13ClientCertificateVerify(MemoryStream buf) + { + Certificate clientCertificate = m_tlsServerContext.SecurityParameters.PeerCertificate; + if (null == clientCertificate || clientCertificate.IsEmpty) + throw new TlsFatalAlert(AlertDescription.internal_error); + + CertificateVerify certificateVerify = CertificateVerify.Parse(m_tlsServerContext, buf); + + AssertEmpty(buf); + + TlsUtilities.Verify13CertificateVerifyClient(m_tlsServerContext, m_handshakeHash, certificateVerify); + } + + /// + protected virtual void Receive13ClientFinished(MemoryStream buf) + { + Process13FinishedMessage(buf); + } + + /// + protected virtual void ReceiveCertificateMessage(MemoryStream buf) + { + if (null == m_certificateRequest) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + Certificate.ParseOptions options = new Certificate.ParseOptions() + { + CertificateType = TlsExtensionsUtilities.GetClientCertificateTypeExtensionServer(m_serverExtensions, + CertificateType.X509), + MaxChainLength = m_tlsServer.GetMaxCertificateChainLength(), + }; + + Certificate clientCertificate = Certificate.Parse(options, m_tlsServerContext, buf, null); + + AssertEmpty(buf); + + NotifyClientCertificate(clientCertificate); + } + + /// + protected virtual void ReceiveCertificateVerifyMessage(MemoryStream buf) + { + DigitallySigned certificateVerify = DigitallySigned.Parse(m_tlsServerContext, buf); + + AssertEmpty(buf); + + TlsUtilities.VerifyCertificateVerifyClient(m_tlsServerContext, m_certificateRequest, certificateVerify, + m_handshakeHash); + + m_handshakeHash.StopTracking(); + } + + /// + protected virtual ClientHello ReceiveClientHelloMessage(MemoryStream buf) + { + return ClientHello.Parse(buf, null); + } + + /// + protected virtual void ReceiveClientKeyExchangeMessage(MemoryStream buf) + { + m_keyExchange.ProcessClientKeyExchange(buf); + + AssertEmpty(buf); + + bool isSsl = TlsUtilities.IsSsl(m_tlsServerContext); + if (isSsl) + { + // NOTE: For SSLv3 (only), master_secret needed to calculate session hash + EstablishMasterSecret(m_tlsServerContext, m_keyExchange); + } + + m_tlsServerContext.SecurityParameters.m_sessionHash = TlsUtilities.GetCurrentPrfHash(m_handshakeHash); + + if (!isSsl) + { + // NOTE: For (D)TLS, session hash potentially needed for extended_master_secret + EstablishMasterSecret(m_tlsServerContext, m_keyExchange); + } + + m_recordStream.SetPendingCipher(TlsUtilities.InitCipher(m_tlsServerContext)); + + if (!ExpectCertificateVerifyMessage()) + { + m_handshakeHash.StopTracking(); + } + } + + /// + protected virtual void Send13EncryptedExtensionsMessage(IDictionary serverExtensions) + { + // TODO[tls13] Avoid extra copy; use placeholder to write opaque-16 data directly to message buffer + + byte[] extBytes = WriteExtensionsData(serverExtensions); + + HandshakeMessageOutput message = new HandshakeMessageOutput(HandshakeType.encrypted_extensions); + TlsUtilities.WriteOpaque16(extBytes, message); + message.Send(this); + } + + /// + protected virtual void Send13ServerHelloCoda(ServerHello serverHello, bool afterHelloRetryRequest) + { + SecurityParameters securityParameters = m_tlsServerContext.SecurityParameters; + + byte[] serverHelloTranscriptHash = TlsUtilities.GetCurrentPrfHash(m_handshakeHash); + + TlsUtilities.Establish13PhaseHandshake(m_tlsServerContext, serverHelloTranscriptHash, m_recordStream); + + m_recordStream.EnablePendingCipherWrite(); + m_recordStream.EnablePendingCipherRead(true); + + Send13EncryptedExtensionsMessage(m_serverExtensions); + this.m_connectionState = CS_SERVER_ENCRYPTED_EXTENSIONS; + + if (m_selectedPsk13) + { + /* + * For PSK-only key exchange, there's no CertificateRequest, Certificate, CertificateVerify. + */ + } + else + { + // CertificateRequest + { + this.m_certificateRequest = m_tlsServer.GetCertificateRequest(); + if (null != m_certificateRequest) + { + if (!m_certificateRequest.HasCertificateRequestContext(TlsUtilities.EmptyBytes)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + TlsUtilities.EstablishServerSigAlgs(securityParameters, m_certificateRequest); + + SendCertificateRequestMessage(m_certificateRequest); + this.m_connectionState = CS_SERVER_CERTIFICATE_REQUEST; + } + } + + TlsCredentialedSigner serverCredentials = TlsUtilities.Establish13ServerCredentials(m_tlsServer); + if (null == serverCredentials) + throw new TlsFatalAlert(AlertDescription.internal_error); + + // Certificate + { + /* + * TODO[tls13] Note that we are expecting the TlsServer implementation to take care of + * e.g. adding optional "status_request" extension to each CertificateEntry. + */ + /* + * No CertificateStatus message is sent; TLS 1.3 uses per-CertificateEntry + * "status_request" extension instead. + */ + + Certificate serverCertificate = serverCredentials.Certificate; + Send13CertificateMessage(serverCertificate); + securityParameters.m_tlsServerEndPoint = null; + this.m_connectionState = CS_SERVER_CERTIFICATE; + } + + // CertificateVerify + { + DigitallySigned certificateVerify = TlsUtilities.Generate13CertificateVerify(m_tlsServerContext, + serverCredentials, m_handshakeHash); + Send13CertificateVerifyMessage(certificateVerify); + this.m_connectionState = CS_CLIENT_CERTIFICATE_VERIFY; + } + } + + // Finished + { + Send13FinishedMessage(); + this.m_connectionState = CS_SERVER_FINISHED; + } + + byte[] serverFinishedTranscriptHash = TlsUtilities.GetCurrentPrfHash(m_handshakeHash); + + TlsUtilities.Establish13PhaseApplication(m_tlsServerContext, serverFinishedTranscriptHash, m_recordStream); + + m_recordStream.EnablePendingCipherWrite(); + } + + /// + protected virtual void SendCertificateRequestMessage(CertificateRequest certificateRequest) + { + HandshakeMessageOutput message = new HandshakeMessageOutput(HandshakeType.certificate_request); + certificateRequest.Encode(m_tlsServerContext, message); + message.Send(this); + } + + /// + protected virtual void SendCertificateStatusMessage(CertificateStatus certificateStatus) + { + HandshakeMessageOutput message = new HandshakeMessageOutput(HandshakeType.certificate_status); + // TODO[tls13] Ensure this cannot happen for (D)TLS1.3+ + certificateStatus.Encode(message); + message.Send(this); + } + + /// + protected virtual void SendHelloRequestMessage() + { + HandshakeMessageOutput.Send(this, HandshakeType.hello_request, TlsUtilities.EmptyBytes); + } + + /// + protected virtual void SendNewSessionTicketMessage(NewSessionTicket newSessionTicket) + { + if (newSessionTicket == null) + throw new TlsFatalAlert(AlertDescription.internal_error); + + HandshakeMessageOutput message = new HandshakeMessageOutput(HandshakeType.new_session_ticket); + newSessionTicket.Encode(message); + message.Send(this); + } + + /// + protected virtual void SendServerHelloDoneMessage() + { + HandshakeMessageOutput.Send(this, HandshakeType.server_hello_done, TlsUtilities.EmptyBytes); + } + + /// + protected virtual void SendServerHelloMessage(ServerHello serverHello) + { + HandshakeMessageOutput message = new HandshakeMessageOutput(HandshakeType.server_hello); + serverHello.Encode(m_tlsServerContext, message); + message.Send(this); + } + + /// + protected virtual void SendServerKeyExchangeMessage(byte[] serverKeyExchange) + { + HandshakeMessageOutput.Send(this, HandshakeType.server_key_exchange, serverKeyExchange); + } + + /// + protected virtual void Skip13ClientCertificate() + { + if (null != m_certificateRequest) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + /// + protected virtual void Skip13ClientCertificateVerify() + { + if (ExpectCertificateVerifyMessage()) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerProtocol.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerProtocol.cs.meta new file mode 100644 index 000000000..c6fccb262 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsServerProtocol.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e089aae52f4bf644d9049950346292ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSession.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSession.cs new file mode 100644 index 000000000..faf8a9c3b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSession.cs @@ -0,0 +1,20 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Base interface for a carrier object for a TLS session. + public interface TlsSession + { + SessionParameters ExportSessionParameters(); + + byte[] SessionID { get; } + + void Invalidate(); + + bool IsResumable { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSession.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSession.cs.meta new file mode 100644 index 000000000..507442df2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSession.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 226a7a42afeee534097ed985f97d2f8b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSessionImpl.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSessionImpl.cs new file mode 100644 index 000000000..6083e629f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSessionImpl.cs @@ -0,0 +1,56 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + internal class TlsSessionImpl + : TlsSession + { + private readonly byte[] m_sessionID; + private readonly SessionParameters m_sessionParameters; + private bool m_resumable; + + internal TlsSessionImpl(byte[] sessionID, SessionParameters sessionParameters) + { + if (sessionID == null) + throw new ArgumentNullException("sessionID"); + if (sessionID.Length > 32) + throw new ArgumentException("cannot be longer than 32 bytes", "sessionID"); + + this.m_sessionID = Arrays.Clone(sessionID); + this.m_sessionParameters = sessionParameters; + this.m_resumable = sessionID.Length > 0 && null != sessionParameters; + } + + public SessionParameters ExportSessionParameters() + { + lock (this) + { + return m_sessionParameters == null ? null : m_sessionParameters.Copy(); + } + } + + public byte[] SessionID + { + get { lock (this) return m_sessionID; } + } + + public void Invalidate() + { + lock (this) + { + this.m_resumable = false; + } + } + + public bool IsResumable + { + get { lock (this) return m_resumable; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSessionImpl.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSessionImpl.cs.meta new file mode 100644 index 000000000..0227264f7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSessionImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6be73e639bc5d049a0cc5935816e838 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpConfigVerifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpConfigVerifier.cs new file mode 100644 index 000000000..f8088faaf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpConfigVerifier.cs @@ -0,0 +1,19 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Interface for verifying SRP config needs to conform to. + public interface TlsSrpConfigVerifier + { + /// Check whether the given SRP configuration is acceptable for use. + /// the to check. + /// true if (and only if) the specified configuration is acceptable. + bool Accept(TlsSrpConfig srpConfig); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpConfigVerifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpConfigVerifier.cs.meta new file mode 100644 index 000000000..a9cb6dc84 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpConfigVerifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d176cdcffb5d2314197c9b740b29ed6b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpIdentity.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpIdentity.cs new file mode 100644 index 000000000..2823403f2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpIdentity.cs @@ -0,0 +1,16 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Processor interface for an SRP identity. + public interface TlsSrpIdentity + { + byte[] GetSrpIdentity(); + + byte[] GetSrpPassword(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpIdentity.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpIdentity.cs.meta new file mode 100644 index 000000000..f6aaff1f1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpIdentity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 42d9631d4d20cce4a8ca661e32481da0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpIdentityManager.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpIdentityManager.cs new file mode 100644 index 000000000..d5cf8c999 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpIdentityManager.cs @@ -0,0 +1,22 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// Base interface for an object that can return login parameters from an SRP identity. + public interface TlsSrpIdentityManager + { + /// Lookup the corresponding to the specified identity. + /// + /// NOTE: To avoid "identity probing", unknown identities SHOULD be handled as recommended in RFC 5054 2.5.1.3. + /// is provided for this purpose. + /// + /// the SRP identity sent by the connecting client. + /// the for the specified identity, or else 'simulated' parameters + /// if the identity is not recognized. A null value is also allowed, but not recommended. + TlsSrpLoginParameters GetLoginParameters(byte[] identity); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpIdentityManager.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpIdentityManager.cs.meta new file mode 100644 index 000000000..1a1a64aa7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpIdentityManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5de1adb7791424c4bae3a648c7ad71a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpKeyExchange.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpKeyExchange.cs new file mode 100644 index 000000000..1e82b80d3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpKeyExchange.cs @@ -0,0 +1,191 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// (D)TLS SRP key exchange (RFC 5054). + public class TlsSrpKeyExchange + : AbstractTlsKeyExchange + { + private static int CheckKeyExchange(int keyExchange) + { + switch (keyExchange) + { + case KeyExchangeAlgorithm.SRP: + case KeyExchangeAlgorithm.SRP_DSS: + case KeyExchangeAlgorithm.SRP_RSA: + return keyExchange; + default: + throw new ArgumentException("unsupported key exchange algorithm", "keyExchange"); + } + } + + protected TlsSrpIdentity m_srpIdentity; + protected TlsSrpConfigVerifier m_srpConfigVerifier; + protected TlsCertificate m_serverCertificate = null; + protected byte[] m_srpSalt = null; + protected TlsSrp6Client m_srpClient = null; + + protected TlsSrpLoginParameters m_srpLoginParameters; + protected TlsCredentialedSigner m_serverCredentials = null; + protected TlsSrp6Server m_srpServer = null; + + protected BigInteger m_srpPeerCredentials = null; + + public TlsSrpKeyExchange(int keyExchange, TlsSrpIdentity srpIdentity, TlsSrpConfigVerifier srpConfigVerifier) + : base(CheckKeyExchange(keyExchange)) + { + this.m_srpIdentity = srpIdentity; + this.m_srpConfigVerifier = srpConfigVerifier; + } + + public TlsSrpKeyExchange(int keyExchange, TlsSrpLoginParameters srpLoginParameters) + : base(CheckKeyExchange(keyExchange)) + { + this.m_srpLoginParameters = srpLoginParameters; + } + + public override void SkipServerCredentials() + { + if (m_keyExchange != KeyExchangeAlgorithm.SRP) + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public override void ProcessServerCredentials(TlsCredentials serverCredentials) + { + if (m_keyExchange == KeyExchangeAlgorithm.SRP) + throw new TlsFatalAlert(AlertDescription.internal_error); + + this.m_serverCredentials = TlsUtilities.RequireSignerCredentials(serverCredentials); + } + + public override void ProcessServerCertificate(Certificate serverCertificate) + { + if (m_keyExchange == KeyExchangeAlgorithm.SRP) + throw new TlsFatalAlert(AlertDescription.internal_error); + + this.m_serverCertificate = serverCertificate.GetCertificateAt(0); + } + + public override bool RequiresServerKeyExchange + { + get { return true; } + } + + public override byte[] GenerateServerKeyExchange() + { + TlsSrpConfig config = m_srpLoginParameters.Config; + + this.m_srpServer = m_context.Crypto.CreateSrp6Server(config, m_srpLoginParameters.Verifier); + + BigInteger B = m_srpServer.GenerateServerCredentials(); + + BigInteger[] ng = config.GetExplicitNG(); + ServerSrpParams srpParams = new ServerSrpParams(ng[0], ng[1], m_srpLoginParameters.Salt, B); + + DigestInputBuffer digestBuffer = new DigestInputBuffer(); + + srpParams.Encode(digestBuffer); + + if (m_serverCredentials != null) + { + TlsUtilities.GenerateServerKeyExchangeSignature(m_context, m_serverCredentials, null, digestBuffer); + } + + return digestBuffer.ToArray(); + } + + public override void ProcessServerKeyExchange(Stream input) + { + DigestInputBuffer digestBuffer = null; + Stream teeIn = input; + + if (m_keyExchange != KeyExchangeAlgorithm.SRP) + { + digestBuffer = new DigestInputBuffer(); + teeIn = new TeeInputStream(input, digestBuffer); + } + + ServerSrpParams srpParams = ServerSrpParams.Parse(teeIn); + + if (digestBuffer != null) + { + TlsUtilities.VerifyServerKeyExchangeSignature(m_context, input, m_serverCertificate, null, + digestBuffer); + } + + TlsSrpConfig config = new TlsSrpConfig(); + config.SetExplicitNG(new BigInteger[]{ srpParams.N, srpParams.G }); + + if (!m_srpConfigVerifier.Accept(config)) + throw new TlsFatalAlert(AlertDescription.insufficient_security); + + this.m_srpSalt = srpParams.S; + + /* + * RFC 5054 2.5.3: The client MUST abort the handshake with an "illegal_parameter" alert if + * B % N = 0. + */ + this.m_srpPeerCredentials = ValidatePublicValue(srpParams.N, srpParams.B); + this.m_srpClient = m_context.Crypto.CreateSrp6Client(config); + } + + public override void ProcessClientCredentials(TlsCredentials clientCredentials) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public override void GenerateClientKeyExchange(Stream output) + { + byte[] identity = m_srpIdentity.GetSrpIdentity(); + byte[] password = m_srpIdentity.GetSrpPassword(); + + BigInteger A = m_srpClient.GenerateClientCredentials(m_srpSalt, identity, password); + TlsSrpUtilities.WriteSrpParameter(A, output); + + m_context.SecurityParameters.m_srpIdentity = Arrays.Clone(identity); + } + + public override void ProcessClientKeyExchange(Stream input) + { + /* + * RFC 5054 2.5.4: The server MUST abort the handshake with an "illegal_parameter" alert if + * A % N = 0. + */ + this.m_srpPeerCredentials = ValidatePublicValue(m_srpLoginParameters.Config.GetExplicitNG()[0], + TlsSrpUtilities.ReadSrpParameter(input)); + + m_context.SecurityParameters.m_srpIdentity = Arrays.Clone(m_srpLoginParameters.Identity); + } + + public override TlsSecret GeneratePreMasterSecret() + { + BigInteger S = m_srpServer != null + ? m_srpServer.CalculateSecret(m_srpPeerCredentials) + : m_srpClient.CalculateSecret(m_srpPeerCredentials); + + // TODO Check if this needs to be a fixed size + return m_context.Crypto.CreateSecret(BigIntegers.AsUnsignedByteArray(S)); + } + + protected static BigInteger ValidatePublicValue(BigInteger N, BigInteger val) + { + val = val.Mod(N); + + // Check that val % N != 0 + if (val.Equals(BigInteger.Zero)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + return val; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpKeyExchange.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpKeyExchange.cs.meta new file mode 100644 index 000000000..c648ce325 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpKeyExchange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 170b44b4aedafb84a8773a74ce989285 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpLoginParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpLoginParameters.cs new file mode 100644 index 000000000..0e32c67e9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpLoginParameters.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public class TlsSrpLoginParameters + { + protected byte[] m_identity; + protected TlsSrpConfig m_srpConfig; + protected BigInteger m_verifier; + protected byte[] m_salt; + + public TlsSrpLoginParameters(byte[] identity, TlsSrpConfig srpConfig, BigInteger verifier, byte[] salt) + { + this.m_identity = Arrays.Clone(identity); + this.m_srpConfig = srpConfig; + this.m_verifier = verifier; + this.m_salt = Arrays.Clone(salt); + } + + public virtual TlsSrpConfig Config + { + get { return m_srpConfig; } + } + + public virtual byte[] Identity + { + get { return m_identity; } + } + + public virtual byte[] Salt + { + get { return m_salt; } + } + + public virtual BigInteger Verifier + { + get { return m_verifier; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpLoginParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpLoginParameters.cs.meta new file mode 100644 index 000000000..ba8768b42 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpLoginParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa6cf0f9de995ae4291f2555695577a8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpUtilities.cs new file mode 100644 index 000000000..33c9678d8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpUtilities.cs @@ -0,0 +1,73 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class TlsSrpUtilities + { + /// + public static void AddSrpExtension(IDictionary extensions, byte[] identity) + { + extensions[ExtensionType.srp] = CreateSrpExtension(identity); + } + + /// + public static byte[] GetSrpExtension(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.srp); + return extensionData == null ? null : ReadSrpExtension(extensionData); + } + + /// + public static byte[] CreateSrpExtension(byte[] identity) + { + if (identity == null) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return TlsUtilities.EncodeOpaque8(identity); + } + + /// + public static byte[] ReadSrpExtension(byte[] extensionData) + { + if (extensionData == null) + throw new ArgumentNullException("extensionData"); + + return TlsUtilities.DecodeOpaque8(extensionData, 1); + } + + /// + public static BigInteger ReadSrpParameter(Stream input) + { + return new BigInteger(1, TlsUtilities.ReadOpaque16(input, 1)); + } + + /// + public static void WriteSrpParameter(BigInteger x, Stream output) + { + TlsUtilities.WriteOpaque16(BigIntegers.AsUnsignedByteArray(x), output); + } + + public static bool IsSrpCipherSuite(int cipherSuite) + { + switch (TlsUtilities.GetKeyExchangeAlgorithm(cipherSuite)) + { + case KeyExchangeAlgorithm.SRP: + case KeyExchangeAlgorithm.SRP_DSS: + case KeyExchangeAlgorithm.SRP_RSA: + return true; + + default: + return false; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpUtilities.cs.meta new file mode 100644 index 000000000..a8975c844 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrpUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2ac8d72a19137094cabfc62bf72c3cc7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrtpUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrtpUtilities.cs new file mode 100644 index 000000000..1c9952fac --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrtpUtilities.cs @@ -0,0 +1,67 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 5764 DTLS Extension to Establish Keys for SRTP. + public abstract class TlsSrtpUtilities +{ + /// + public static void AddUseSrtpExtension(IDictionary extensions, UseSrtpData useSrtpData) + { + extensions[ExtensionType.use_srtp] = CreateUseSrtpExtension(useSrtpData); + } + + /// + public static UseSrtpData GetUseSrtpExtension(IDictionary extensions) + { + byte[] extensionData = TlsUtilities.GetExtensionData(extensions, ExtensionType.use_srtp); + return extensionData == null ? null : ReadUseSrtpExtension(extensionData); + } + + /// + public static byte[] CreateUseSrtpExtension(UseSrtpData useSrtpData) + { + if (useSrtpData == null) + throw new ArgumentNullException("useSrtpData"); + + MemoryStream buf = new MemoryStream(); + + // SRTPProtectionProfiles + TlsUtilities.WriteUint16ArrayWithUint16Length(useSrtpData.ProtectionProfiles, buf); + + // srtp_mki + TlsUtilities.WriteOpaque8(useSrtpData.Mki, buf); + + return buf.ToArray(); + } + + /// + public static UseSrtpData ReadUseSrtpExtension(byte[] extensionData) + { + if (extensionData == null) + throw new ArgumentNullException("extensionData"); + + MemoryStream buf = new MemoryStream(extensionData, false); + + // SRTPProtectionProfiles + int length = TlsUtilities.ReadUint16(buf); + if (length < 2 || (length & 1) != 0) + throw new TlsFatalAlert(AlertDescription.decode_error); + + int[] protectionProfiles = TlsUtilities.ReadUint16Array(length / 2, buf); + + // srtp_mki + byte[] mki = TlsUtilities.ReadOpaque8(buf); + + TlsProtocol.AssertEmpty(buf); + + return new UseSrtpData(protectionProfiles, mki); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrtpUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrtpUtilities.cs.meta new file mode 100644 index 000000000..6395d245c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsSrtpUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31351cdede545054ea85bd735c0cc03d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsStream.cs new file mode 100644 index 000000000..933acd7c1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsStream.cs @@ -0,0 +1,110 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + internal class TlsStream + : Stream + { + private readonly TlsProtocol m_handler; + + public TlsProtocol Protocol { get => this.m_handler; } + + byte[] oneByteBuf = new byte[1]; + + internal TlsStream(TlsProtocol handler) + { + m_handler = handler; + } + + public override bool CanRead + { + get { return true; } + } + + public override bool CanSeek + { + get { return false; } + } + + public override bool CanWrite + { + get { return true; } + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + m_handler.Close(); + } + base.Dispose(disposing); + } + + public override void Flush() + { + m_handler.Flush(); + } + + public override long Length + { + get { throw new NotSupportedException(); } + } + + public override long Position + { + get { throw new NotSupportedException(); } + set { throw new NotSupportedException(); } + } + + public override int Read(byte[] buffer, int offset, int count) + { + return m_handler.ReadApplicationData(buffer, offset, count); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int Read(Span buffer) + { + return m_handler.ReadApplicationData(buffer); + } +#endif + + public override int ReadByte() + { + int ret = m_handler.ReadApplicationData(oneByteBuf, 0, 1); + return ret <= 0 ? -1 : oneByteBuf[0]; + } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException(); + } + + public override void SetLength(long value) + { + throw new NotSupportedException(); + } + + public override void Write(byte[] buffer, int offset, int count) + { + m_handler.WriteApplicationData(buffer, offset, count); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) + { + m_handler.WriteApplicationData(buffer); + } +#endif + + public override void WriteByte(byte value) + { + oneByteBuf[0] = value; + Write(oneByteBuf, 0, 1); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsStream.cs.meta new file mode 100644 index 000000000..3a2422c62 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d14f634547b30ab4f9c1ba2175cb4ce5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsTimeoutException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsTimeoutException.cs new file mode 100644 index 000000000..2861e2b8b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsTimeoutException.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + [Serializable] + public class TlsTimeoutException + : IOException + { + public TlsTimeoutException() + : base() + { + } + + public TlsTimeoutException(string message) + : base(message) + { + } + + public TlsTimeoutException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected TlsTimeoutException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsTimeoutException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsTimeoutException.cs.meta new file mode 100644 index 000000000..6dfda79d4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsTimeoutException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c03d81d657016a4ba655cc8c010efc1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsUtilities.cs new file mode 100644 index 000000000..900f1b657 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsUtilities.cs @@ -0,0 +1,5786 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; +using System.Net.Sockets; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Bsi; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Eac; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.EdEC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Rosstandart; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Date; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public abstract class TlsUtilities + { + private static readonly byte[] DowngradeTlsV11 = Hex.DecodeStrict("444F574E47524400"); + private static readonly byte[] DowngradeTlsV12 = Hex.DecodeStrict("444F574E47524401"); + + private static readonly IDictionary CertSigAlgOids = CreateCertSigAlgOids(); + private static readonly IList DefaultSupportedSigAlgs = CreateDefaultSupportedSigAlgs(); + + private static void AddCertSigAlgOid(IDictionary d, DerObjectIdentifier oid, + SignatureAndHashAlgorithm sigAndHash) + { + d[oid.Id] = sigAndHash; + } + + private static void AddCertSigAlgOid(IDictionary d, DerObjectIdentifier oid, + short hashAlgorithm, short signatureAlgorithm) + { + AddCertSigAlgOid(d, oid, SignatureAndHashAlgorithm.GetInstance(hashAlgorithm, signatureAlgorithm)); + } + + private static IDictionary CreateCertSigAlgOids() + { + var d = new Dictionary(); + + AddCertSigAlgOid(d, NistObjectIdentifiers.DsaWithSha224, HashAlgorithm.sha224, SignatureAlgorithm.dsa); + AddCertSigAlgOid(d, NistObjectIdentifiers.DsaWithSha256, HashAlgorithm.sha256, SignatureAlgorithm.dsa); + AddCertSigAlgOid(d, NistObjectIdentifiers.DsaWithSha384, HashAlgorithm.sha384, SignatureAlgorithm.dsa); + AddCertSigAlgOid(d, NistObjectIdentifiers.DsaWithSha512, HashAlgorithm.sha512, SignatureAlgorithm.dsa); + + AddCertSigAlgOid(d, OiwObjectIdentifiers.DsaWithSha1, HashAlgorithm.sha1, SignatureAlgorithm.dsa); + AddCertSigAlgOid(d, OiwObjectIdentifiers.Sha1WithRsa, HashAlgorithm.sha1, SignatureAlgorithm.rsa); + + AddCertSigAlgOid(d, PkcsObjectIdentifiers.Sha1WithRsaEncryption, HashAlgorithm.sha1, SignatureAlgorithm.rsa); + AddCertSigAlgOid(d, PkcsObjectIdentifiers.Sha224WithRsaEncryption, HashAlgorithm.sha224, SignatureAlgorithm.rsa); + AddCertSigAlgOid(d, PkcsObjectIdentifiers.Sha256WithRsaEncryption, HashAlgorithm.sha256, SignatureAlgorithm.rsa); + AddCertSigAlgOid(d, PkcsObjectIdentifiers.Sha384WithRsaEncryption, HashAlgorithm.sha384, SignatureAlgorithm.rsa); + AddCertSigAlgOid(d, PkcsObjectIdentifiers.Sha512WithRsaEncryption, HashAlgorithm.sha512, SignatureAlgorithm.rsa); + + AddCertSigAlgOid(d, X9ObjectIdentifiers.ECDsaWithSha1, HashAlgorithm.sha1, SignatureAlgorithm.ecdsa); + AddCertSigAlgOid(d, X9ObjectIdentifiers.ECDsaWithSha224, HashAlgorithm.sha224, SignatureAlgorithm.ecdsa); + AddCertSigAlgOid(d, X9ObjectIdentifiers.ECDsaWithSha256, HashAlgorithm.sha256, SignatureAlgorithm.ecdsa); + AddCertSigAlgOid(d, X9ObjectIdentifiers.ECDsaWithSha384, HashAlgorithm.sha384, SignatureAlgorithm.ecdsa); + AddCertSigAlgOid(d, X9ObjectIdentifiers.ECDsaWithSha512, HashAlgorithm.sha512, SignatureAlgorithm.ecdsa); + AddCertSigAlgOid(d, X9ObjectIdentifiers.IdDsaWithSha1, HashAlgorithm.sha1, SignatureAlgorithm.dsa); + + AddCertSigAlgOid(d, EacObjectIdentifiers.id_TA_ECDSA_SHA_1, HashAlgorithm.sha1, SignatureAlgorithm.ecdsa); + AddCertSigAlgOid(d, EacObjectIdentifiers.id_TA_ECDSA_SHA_224, HashAlgorithm.sha224, SignatureAlgorithm.ecdsa); + AddCertSigAlgOid(d, EacObjectIdentifiers.id_TA_ECDSA_SHA_256, HashAlgorithm.sha256, SignatureAlgorithm.ecdsa); + AddCertSigAlgOid(d, EacObjectIdentifiers.id_TA_ECDSA_SHA_384, HashAlgorithm.sha384, SignatureAlgorithm.ecdsa); + AddCertSigAlgOid(d, EacObjectIdentifiers.id_TA_ECDSA_SHA_512, HashAlgorithm.sha512, SignatureAlgorithm.ecdsa); + AddCertSigAlgOid(d, EacObjectIdentifiers.id_TA_RSA_v1_5_SHA_1, HashAlgorithm.sha1, SignatureAlgorithm.rsa); + AddCertSigAlgOid(d, EacObjectIdentifiers.id_TA_RSA_v1_5_SHA_256, HashAlgorithm.sha256, SignatureAlgorithm.rsa); + + AddCertSigAlgOid(d, BsiObjectIdentifiers.ecdsa_plain_SHA1, HashAlgorithm.sha1, SignatureAlgorithm.ecdsa); + AddCertSigAlgOid(d, BsiObjectIdentifiers.ecdsa_plain_SHA224, HashAlgorithm.sha224, SignatureAlgorithm.ecdsa); + AddCertSigAlgOid(d, BsiObjectIdentifiers.ecdsa_plain_SHA256, HashAlgorithm.sha256, SignatureAlgorithm.ecdsa); + AddCertSigAlgOid(d, BsiObjectIdentifiers.ecdsa_plain_SHA384, HashAlgorithm.sha384, SignatureAlgorithm.ecdsa); + AddCertSigAlgOid(d, BsiObjectIdentifiers.ecdsa_plain_SHA512, HashAlgorithm.sha512, SignatureAlgorithm.ecdsa); + + AddCertSigAlgOid(d, EdECObjectIdentifiers.id_Ed25519, SignatureAndHashAlgorithm.ed25519); + AddCertSigAlgOid(d, EdECObjectIdentifiers.id_Ed448, SignatureAndHashAlgorithm.ed448); + + AddCertSigAlgOid(d, RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_256, + SignatureAndHashAlgorithm.gostr34102012_256); + AddCertSigAlgOid(d, RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_512, + SignatureAndHashAlgorithm.gostr34102012_512); + + // TODO[RFC 8998] + //AddCertSigAlgOid(d, GMObjectIdentifiers.sm2sign_with_sm3, HashAlgorithm.sm3, SignatureAlgorithm.sm2); + + return d; + } + + private static IList CreateDefaultSupportedSigAlgs() + { + var result = new List(); + result.Add(SignatureAndHashAlgorithm.ed25519); + result.Add(SignatureAndHashAlgorithm.ed448); + result.Add(SignatureAndHashAlgorithm.GetInstance(HashAlgorithm.sha256, SignatureAlgorithm.ecdsa)); + result.Add(SignatureAndHashAlgorithm.GetInstance(HashAlgorithm.sha384, SignatureAlgorithm.ecdsa)); + result.Add(SignatureAndHashAlgorithm.GetInstance(HashAlgorithm.sha512, SignatureAlgorithm.ecdsa)); + result.Add(SignatureAndHashAlgorithm.rsa_pss_rsae_sha256); + result.Add(SignatureAndHashAlgorithm.rsa_pss_rsae_sha384); + result.Add(SignatureAndHashAlgorithm.rsa_pss_rsae_sha512); + result.Add(SignatureAndHashAlgorithm.rsa_pss_pss_sha256); + result.Add(SignatureAndHashAlgorithm.rsa_pss_pss_sha384); + result.Add(SignatureAndHashAlgorithm.rsa_pss_pss_sha512); + result.Add(SignatureAndHashAlgorithm.GetInstance(HashAlgorithm.sha256, SignatureAlgorithm.rsa)); + result.Add(SignatureAndHashAlgorithm.GetInstance(HashAlgorithm.sha384, SignatureAlgorithm.rsa)); + result.Add(SignatureAndHashAlgorithm.GetInstance(HashAlgorithm.sha512, SignatureAlgorithm.rsa)); + result.Add(SignatureAndHashAlgorithm.GetInstance(HashAlgorithm.sha256, SignatureAlgorithm.dsa)); + result.Add(SignatureAndHashAlgorithm.GetInstance(HashAlgorithm.sha384, SignatureAlgorithm.dsa)); + result.Add(SignatureAndHashAlgorithm.GetInstance(HashAlgorithm.sha512, SignatureAlgorithm.dsa)); + result.Add(SignatureAndHashAlgorithm.GetInstance(HashAlgorithm.sha224, SignatureAlgorithm.ecdsa)); + result.Add(SignatureAndHashAlgorithm.GetInstance(HashAlgorithm.sha224, SignatureAlgorithm.rsa)); + result.Add(SignatureAndHashAlgorithm.GetInstance(HashAlgorithm.sha224, SignatureAlgorithm.dsa)); + result.Add(SignatureAndHashAlgorithm.GetInstance(HashAlgorithm.sha1, SignatureAlgorithm.ecdsa)); + result.Add(SignatureAndHashAlgorithm.GetInstance(HashAlgorithm.sha1, SignatureAlgorithm.rsa)); + result.Add(SignatureAndHashAlgorithm.GetInstance(HashAlgorithm.sha1, SignatureAlgorithm.dsa)); + return result; + } + + public static readonly byte[] EmptyBytes = new byte[0]; + public static readonly short[] EmptyShorts = new short[0]; + public static readonly int[] EmptyInts = new int[0]; + public static readonly long[] EmptyLongs = new long[0]; + public static readonly string[] EmptyStrings = new string[0]; + + internal static short MinimumHashStrict = HashAlgorithm.sha1; + internal static short MinimumHashPreferred = HashAlgorithm.sha256; + + public static void CheckUint8(short i) + { + if (!IsValidUint8(i)) + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public static void CheckUint8(int i) + { + if (!IsValidUint8(i)) + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public static void CheckUint8(long i) + { + if (!IsValidUint8(i)) + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public static void CheckUint16(int i) + { + if (!IsValidUint16(i)) + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public static void CheckUint16(long i) + { + if (!IsValidUint16(i)) + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public static void CheckUint24(int i) + { + if (!IsValidUint24(i)) + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public static void CheckUint24(long i) + { + if (!IsValidUint24(i)) + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public static void CheckUint32(long i) + { + if (!IsValidUint32(i)) + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public static void CheckUint48(long i) + { + if (!IsValidUint48(i)) + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public static void CheckUint64(long i) + { + if (!IsValidUint64(i)) + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public static bool IsValidUint8(short i) + { + return (i & 0xFF) == i; + } + + public static bool IsValidUint8(int i) + { + return (i & 0xFF) == i; + } + + public static bool IsValidUint8(long i) + { + return (i & 0xFFL) == i; + } + + public static bool IsValidUint16(int i) + { + return (i & 0xFFFF) == i; + } + + public static bool IsValidUint16(long i) + { + return (i & 0xFFFFL) == i; + } + + public static bool IsValidUint24(int i) + { + return (i & 0xFFFFFF) == i; + } + + public static bool IsValidUint24(long i) + { + return (i & 0xFFFFFFL) == i; + } + + public static bool IsValidUint32(long i) + { + return (i & 0xFFFFFFFFL) == i; + } + + public static bool IsValidUint48(long i) + { + return (i & 0xFFFFFFFFFFFFL) == i; + } + + public static bool IsValidUint64(long i) + { + return true; + } + + public static bool IsSsl(TlsContext context) + { + return context.ServerVersion.IsSsl; + } + + public static bool IsTlsV10(ProtocolVersion version) + { + return ProtocolVersion.TLSv10.IsEqualOrEarlierVersionOf(version.GetEquivalentTlsVersion()); + } + + public static bool IsTlsV10(TlsContext context) + { + return IsTlsV10(context.ServerVersion); + } + + public static bool IsTlsV11(ProtocolVersion version) + { + return ProtocolVersion.TLSv11.IsEqualOrEarlierVersionOf(version.GetEquivalentTlsVersion()); + } + + public static bool IsTlsV11(TlsContext context) + { + return IsTlsV11(context.ServerVersion); + } + + public static bool IsTlsV12(ProtocolVersion version) + { + return ProtocolVersion.TLSv12.IsEqualOrEarlierVersionOf(version.GetEquivalentTlsVersion()); + } + + public static bool IsTlsV12(TlsContext context) + { + return IsTlsV12(context.ServerVersion); + } + + public static bool IsTlsV13(ProtocolVersion version) + { + return ProtocolVersion.TLSv13.IsEqualOrEarlierVersionOf(version.GetEquivalentTlsVersion()); + } + + public static bool IsTlsV13(TlsContext context) + { + return IsTlsV13(context.ServerVersion); + } + + public static void WriteUint8(short i, Stream output) + { + output.WriteByte((byte)i); + } + + public static void WriteUint8(int i, Stream output) + { + output.WriteByte((byte)i); + } + + public static void WriteUint8(short i, byte[] buf, int offset) + { + buf[offset] = (byte)i; + } + + public static void WriteUint8(int i, byte[] buf, int offset) + { + buf[offset] = (byte)i; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void WriteUint8(int i, Span buf) + { + buf[0] = (byte)i; + } +#endif + + public static void WriteUint16(int i, Stream output) + { + output.WriteByte((byte)(i >> 8)); + output.WriteByte((byte)i); + } + + public static void WriteUint16(int i, byte[] buf, int offset) + { + buf[offset ] = (byte)(i >> 8); + buf[offset + 1] = (byte)i; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void WriteUint16(int i, Span buf) + { + buf[0] = (byte)(i >> 8); + buf[1] = (byte)i; + } +#endif + + public static void WriteUint24(int i, Stream output) + { + output.WriteByte((byte)(i >> 16)); + output.WriteByte((byte)(i >> 8)); + output.WriteByte((byte)i); + } + + public static void WriteUint24(int i, byte[] buf, int offset) + { + buf[offset ] = (byte)(i >> 16); + buf[offset + 1] = (byte)(i >> 8); + buf[offset + 2] = (byte)i; + } + + public static void WriteUint32(long i, Stream output) + { + output.WriteByte((byte)(i >> 24)); + output.WriteByte((byte)(i >> 16)); + output.WriteByte((byte)(i >> 8)); + output.WriteByte((byte)i); + } + + public static void WriteUint32(long i, byte[] buf, int offset) + { + buf[offset ] = (byte)(i >> 24); + buf[offset + 1] = (byte)(i >> 16); + buf[offset + 2] = (byte)(i >> 8); + buf[offset + 3] = (byte)i; + } + + public static void WriteUint48(long i, Stream output) + { + output.WriteByte((byte)(i >> 40)); + output.WriteByte((byte)(i >> 32)); + output.WriteByte((byte)(i >> 24)); + output.WriteByte((byte)(i >> 16)); + output.WriteByte((byte)(i >> 8)); + output.WriteByte((byte)i); + } + + public static void WriteUint48(long i, byte[] buf, int offset) + { + buf[offset ] = (byte)(i >> 40); + buf[offset + 1] = (byte)(i >> 32); + buf[offset + 2] = (byte)(i >> 24); + buf[offset + 3] = (byte)(i >> 16); + buf[offset + 4] = (byte)(i >> 8); + buf[offset + 5] = (byte)i; + } + + public static void WriteUint64(long i, Stream output) + { + output.WriteByte((byte)(i >> 56)); + output.WriteByte((byte)(i >> 48)); + output.WriteByte((byte)(i >> 40)); + output.WriteByte((byte)(i >> 32)); + output.WriteByte((byte)(i >> 24)); + output.WriteByte((byte)(i >> 16)); + output.WriteByte((byte)(i >> 8)); + output.WriteByte((byte) i); + } + + public static void WriteUint64(long i, byte[] buf, int offset) + { + buf[offset ] = (byte)(i >> 56); + buf[offset + 1] = (byte)(i >> 48); + buf[offset + 2] = (byte)(i >> 40); + buf[offset + 3] = (byte)(i >> 32); + buf[offset + 4] = (byte)(i >> 24); + buf[offset + 5] = (byte)(i >> 16); + buf[offset + 6] = (byte)(i >> 8); + buf[offset + 7] = (byte)i; + } + + public static void WriteOpaque8(byte[] buf, Stream output) + { + CheckUint8(buf.Length); + WriteUint8(buf.Length, output); + output.Write(buf, 0, buf.Length); + } + + public static void WriteOpaque8(byte[] data, byte[] buf, int off) + { + CheckUint8(data.Length); + WriteUint8(data.Length, buf, off); + Array.Copy(data, 0, buf, off + 1, data.Length); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void WriteOpaque8(ReadOnlySpan data, Span buf) + { + CheckUint8(data.Length); + WriteUint8(data.Length, buf); + data.CopyTo(buf[1..]); + } +#endif + + public static void WriteOpaque16(byte[] buf, Stream output) + { + CheckUint16(buf.Length); + WriteUint16(buf.Length, output); + output.Write(buf, 0, buf.Length); + } + + public static void WriteOpaque16(byte[] data, byte[] buf, int off) + { + CheckUint16(data.Length); + WriteUint16(data.Length, buf, off); + Array.Copy(data, 0, buf, off + 2, data.Length); + } + + public static void WriteOpaque24(byte[] buf, Stream output) + { + CheckUint24(buf.Length); + WriteUint24(buf.Length, output); + output.Write(buf, 0, buf.Length); + } + + public static void WriteOpaque24(byte[] data, byte[] buf, int off) + { + CheckUint24(data.Length); + WriteUint24(data.Length, buf, off); + Array.Copy(data, 0, buf, off + 3, data.Length); + } + + public static void WriteUint8Array(short[] u8s, Stream output) + { + for (int i = 0; i < u8s.Length; ++i) + { + WriteUint8(u8s[i], output); + } + } + + public static void WriteUint8Array(short[] u8s, byte[] buf, int offset) + { + for (int i = 0; i < u8s.Length; ++i) + { + WriteUint8(u8s[i], buf, offset); + ++offset; + } + } + + public static void WriteUint8ArrayWithUint8Length(short[] u8s, Stream output) + { + CheckUint8(u8s.Length); + WriteUint8(u8s.Length, output); + WriteUint8Array(u8s, output); + } + + public static void WriteUint8ArrayWithUint8Length(short[] u8s, byte[] buf, int offset) + { + CheckUint8(u8s.Length); + WriteUint8(u8s.Length, buf, offset); + WriteUint8Array(u8s, buf, offset + 1); + } + + public static void WriteUint16Array(int[] u16s, Stream output) + { + for (int i = 0; i < u16s.Length; ++i) + { + WriteUint16(u16s[i], output); + } + } + + public static void WriteUint16Array(int[] u16s, byte[] buf, int offset) + { + for (int i = 0; i < u16s.Length; ++i) + { + WriteUint16(u16s[i], buf, offset); + offset += 2; + } + } + + public static void WriteUint16ArrayWithUint8Length(int[] u16s, byte[] buf, int offset) + { + int length = 2 * u16s.Length; + CheckUint8(length); + WriteUint8(length, buf, offset); + WriteUint16Array(u16s, buf, offset + 1); + } + + public static void WriteUint16ArrayWithUint16Length(int[] u16s, Stream output) + { + int length = 2 * u16s.Length; + CheckUint16(length); + WriteUint16(length, output); + WriteUint16Array(u16s, output); + } + + public static void WriteUint16ArrayWithUint16Length(int[] u16s, byte[] buf, int offset) + { + int length = 2 * u16s.Length; + CheckUint16(length); + WriteUint16(length, buf, offset); + WriteUint16Array(u16s, buf, offset + 2); + } + + public static byte[] DecodeOpaque8(byte[] buf) + { + return DecodeOpaque8(buf, 0); + } + + public static byte[] DecodeOpaque8(byte[] buf, int minLength) + { + if (buf == null) + throw new ArgumentNullException("buf"); + if (buf.Length < 1) + throw new TlsFatalAlert(AlertDescription.decode_error); + + short length = ReadUint8(buf, 0); + if (buf.Length != (length + 1) || length < minLength) + throw new TlsFatalAlert(AlertDescription.decode_error); + + return CopyOfRangeExact(buf, 1, buf.Length); + } + + public static byte[] DecodeOpaque16(byte[] buf) + { + return DecodeOpaque16(buf, 0); + } + + public static byte[] DecodeOpaque16(byte[] buf, int minLength) + { + if (buf == null) + throw new ArgumentNullException("buf"); + if (buf.Length < 2) + throw new TlsFatalAlert(AlertDescription.decode_error); + + int length = ReadUint16(buf, 0); + if (buf.Length != (length + 2) || length < minLength) + throw new TlsFatalAlert(AlertDescription.decode_error); + + return CopyOfRangeExact(buf, 2, buf.Length); + } + + public static short DecodeUint8(byte[] buf) + { + if (buf == null) + throw new ArgumentNullException("buf"); + if (buf.Length != 1) + throw new TlsFatalAlert(AlertDescription.decode_error); + + return ReadUint8(buf, 0); + } + + public static short[] DecodeUint8ArrayWithUint8Length(byte[] buf) + { + if (buf == null) + throw new ArgumentNullException("buf"); + + int count = ReadUint8(buf, 0); + if (buf.Length != (count + 1)) + throw new TlsFatalAlert(AlertDescription.decode_error); + + short[] uints = new short[count]; + for (int i = 0; i < count; ++i) + { + uints[i] = ReadUint8(buf, i + 1); + } + return uints; + } + + public static int DecodeUint16(byte[] buf) + { + if (buf == null) + throw new ArgumentNullException("buf"); + if (buf.Length != 2) + throw new TlsFatalAlert(AlertDescription.decode_error); + + return ReadUint16(buf, 0); + } + + public static int[] DecodeUint16ArrayWithUint8Length(byte[] buf) + { + if (buf == null) + throw new ArgumentNullException("buf"); + + int length = ReadUint8(buf, 0); + if (buf.Length != (length + 1) || (length & 1) != 0) + throw new TlsFatalAlert(AlertDescription.decode_error); + + int count = length / 2, pos = 1; + int[] u16s = new int[count]; + for (int i = 0; i < count; ++i) + { + u16s[i] = ReadUint16(buf, pos); + pos += 2; + } + return u16s; + } + + public static long DecodeUint32(byte[] buf) + { + if (buf == null) + throw new ArgumentNullException("buf"); + if (buf.Length != 4) + throw new TlsFatalAlert(AlertDescription.decode_error); + + return ReadUint32(buf, 0); + } + + public static byte[] EncodeOpaque8(byte[] buf) + { + CheckUint8(buf.Length); + return Arrays.Prepend(buf, (byte)buf.Length); + } + + public static byte[] EncodeOpaque16(byte[] buf) + { + CheckUint16(buf.Length); + byte[] r = new byte[2 + buf.Length]; + WriteUint16(buf.Length, r, 0); + Array.Copy(buf, 0, r, 2, buf.Length); + return r; + } + + public static byte[] EncodeOpaque24(byte[] buf) + { + CheckUint24(buf.Length); + byte[] r = new byte[3 + buf.Length]; + WriteUint24(buf.Length, r, 0); + Array.Copy(buf, 0, r, 3, buf.Length); + return r; + } + + public static byte[] EncodeUint8(short u8) + { + CheckUint8(u8); + + byte[] encoding = new byte[1]; + WriteUint8(u8, encoding, 0); + return encoding; + } + + public static byte[] EncodeUint8ArrayWithUint8Length(short[] u8s) + { + byte[] result = new byte[1 + u8s.Length]; + WriteUint8ArrayWithUint8Length(u8s, result, 0); + return result; + } + + public static byte[] EncodeUint16(int u16) + { + CheckUint16(u16); + + byte[] encoding = new byte[2]; + WriteUint16(u16, encoding, 0); + return encoding; + } + + public static byte[] EncodeUint16ArrayWithUint8Length(int[] u16s) + { + int length = 2 * u16s.Length; + byte[] result = new byte[1 + length]; + WriteUint16ArrayWithUint8Length(u16s, result, 0); + return result; + } + + public static byte[] EncodeUint16ArrayWithUint16Length(int[] u16s) + { + int length = 2 * u16s.Length; + byte[] result = new byte[2 + length]; + WriteUint16ArrayWithUint16Length(u16s, result, 0); + return result; + } + + public static byte[] EncodeUint24(int u24) + { + CheckUint24(u24); + + byte[] encoding = new byte[3]; + WriteUint24(u24, encoding, 0); + return encoding; + } + + public static byte[] EncodeUint32(long u32) + { + CheckUint32(u32); + + byte[] encoding = new byte[4]; + WriteUint32(u32, encoding, 0); + return encoding; + } + + public static byte[] EncodeVersion(ProtocolVersion version) + { + return new byte[]{ + (byte)version.MajorVersion, + (byte)version.MinorVersion + }; + } + + public static int ReadInt32(byte[] buf, int offset) + { + int n = buf[offset] << 24; + n |= (buf[++offset] & 0xff) << 16; + n |= (buf[++offset] & 0xff) << 8; + n |= (buf[++offset] & 0xff); + return n; + } + + public static short ReadUint8(Stream input) + { + int i = input.ReadByte(); + if (i < 0) + throw new EndOfStreamException(); + return (short)i; + } + + public static short ReadUint8(byte[] buf, int offset) + { + return (short)buf[offset]; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static short ReadUint8(ReadOnlySpan buffer) + { + return (short)buffer[0]; + } +#endif + + public static int ReadUint16(Stream input) + { + int i1 = input.ReadByte(); + int i2 = input.ReadByte(); + if (i2 < 0) + throw new EndOfStreamException(); + return (i1 << 8) | i2; + } + + public static int ReadUint16(byte[] buf, int offset) + { + int n = (buf[offset] & 0xff) << 8; + n |= (buf[++offset] & 0xff); + return n; + } + + public static int ReadUint24(Stream input) + { + int i1 = input.ReadByte(); + int i2 = input.ReadByte(); + int i3 = input.ReadByte(); + if (i3 < 0) + throw new EndOfStreamException(); + + return (i1 << 16) | (i2 << 8) | i3; + } + + public static int ReadUint24(byte[] buf, int offset) + { + int n = (buf[offset] & 0xff) << 16; + n |= (buf[++offset] & 0xff) << 8; + n |= (buf[++offset] & 0xff); + return n; + } + + public static long ReadUint32(Stream input) + { + int i1 = input.ReadByte(); + int i2 = input.ReadByte(); + int i3 = input.ReadByte(); + int i4 = input.ReadByte(); + if (i4 < 0) + throw new EndOfStreamException(); + + return ((i1 << 24) | (i2 << 16) | (i3 << 8) | i4) & 0xFFFFFFFFL; + } + + public static long ReadUint32(byte[] buf, int offset) + { + int n = (buf[offset] & 0xff) << 24; + n |= (buf[++offset] & 0xff) << 16; + n |= (buf[++offset] & 0xff) << 8; + n |= (buf[++offset] & 0xff); + return n & 0xFFFFFFFFL; + } + + public static long ReadUint48(Stream input) + { + int hi = ReadUint24(input); + int lo = ReadUint24(input); + return ((long)(hi & 0xffffffffL) << 24) | (long)(lo & 0xffffffffL); + } + + public static long ReadUint48(byte[] buf, int offset) + { + int hi = ReadUint24(buf, offset); + int lo = ReadUint24(buf, offset + 3); + return ((long)(hi & 0xffffffffL) << 24) | (long)(lo & 0xffffffffL); + } + + public static byte[] ReadAllOrNothing(int length, Stream input) + { + if (length < 1) + return EmptyBytes; + byte[] buf = new byte[length]; + int read = Streams.ReadFully(input, buf); + if (read == 0) + return null; + if (read != length) + throw new EndOfStreamException(); + return buf; + } + + public static byte[] ReadFully(int length, Stream input) + { + if (length < 1) + return EmptyBytes; + byte[] buf = new byte[length]; + if (length != Streams.ReadFully(input, buf)) + throw new EndOfStreamException(); + return buf; + } + + public static void ReadFully(byte[] buf, Stream input) + { + int length = buf.Length; + if (length > 0 && length != Streams.ReadFully(input, buf)) + throw new EndOfStreamException(); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void ReadFully(Span buf, Stream input) + { + int length = buf.Length; + if (length > 0 && length != Streams.ReadFully(input, buf)) + throw new EndOfStreamException(); + } +#endif + + public static byte[] ReadOpaque8(Stream input) + { + short length = ReadUint8(input); + return ReadFully(length, input); + } + + public static byte[] ReadOpaque8(Stream input, int minLength) + { + short length = ReadUint8(input); + if (length < minLength) + throw new TlsFatalAlert(AlertDescription.decode_error); + + return ReadFully(length, input); + } + + public static byte[] ReadOpaque8(Stream input, int minLength, int maxLength) + { + short length = ReadUint8(input); + if (length < minLength || maxLength < length) + throw new TlsFatalAlert(AlertDescription.decode_error); + + return ReadFully(length, input); + } + + public static byte[] ReadOpaque16(Stream input) + { + int length = ReadUint16(input); + return ReadFully(length, input); + } + + public static byte[] ReadOpaque16(Stream input, int minLength) + { + int length = ReadUint16(input); + if (length < minLength) + throw new TlsFatalAlert(AlertDescription.decode_error); + + return ReadFully(length, input); + } + + public static byte[] ReadOpaque24(Stream input) + { + int length = ReadUint24(input); + return ReadFully(length, input); + } + + public static byte[] ReadOpaque24(Stream input, int minLength) + { + int length = ReadUint24(input); + if (length < minLength) + throw new TlsFatalAlert(AlertDescription.decode_error); + + return ReadFully(length, input); + } + + public static short[] ReadUint8Array(int count, Stream input) + { + short[] uints = new short[count]; + for (int i = 0; i < count; ++i) + { + uints[i] = ReadUint8(input); + } + return uints; + } + + public static short[] ReadUint8ArrayWithUint8Length(Stream input, int minLength) + { + int length = ReadUint8(input); + if (length < minLength) + throw new TlsFatalAlert(AlertDescription.decode_error); + + return ReadUint8Array(length, input); + } + + public static int[] ReadUint16Array(int count, Stream input) + { + int[] uints = new int[count]; + for (int i = 0; i < count; ++i) + { + uints[i] = ReadUint16(input); + } + return uints; + } + + public static ProtocolVersion ReadVersion(byte[] buf, int offset) + { + return ProtocolVersion.Get(buf[offset], buf[offset + 1]); + } + + public static ProtocolVersion ReadVersion(Stream input) + { + int i1 = input.ReadByte(); + int i2 = input.ReadByte(); + if (i2 < 0) + throw new EndOfStreamException(); + + return ProtocolVersion.Get(i1, i2); + } + + public static Asn1Object ReadAsn1Object(byte[] encoding) + { + Asn1InputStream asn1 = new Asn1InputStream(encoding); + Asn1Object result = asn1.ReadObject(); + if (null == result) + throw new TlsFatalAlert(AlertDescription.decode_error); + if (null != asn1.ReadObject()) + throw new TlsFatalAlert(AlertDescription.decode_error); + + return result; + } + + /// + public static void RequireDerEncoding(Asn1Encodable asn1, byte[] encoding) + { + /* + * NOTE: The current ASN.1 parsing code can't enforce DER-only parsing, but since DER is + * canonical, we can check it by re-encoding the result and comparing to the original. + */ + byte[] check = asn1.GetEncoded(Asn1Encodable.Der); + if (!Arrays.AreEqual(check, encoding)) + throw new TlsFatalAlert(AlertDescription.decode_error); + } + + public static void WriteGmtUnixTime(byte[] buf, int offset) + { + int t = (int)(DateTimeUtilities.CurrentUnixMs() / 1000L); + buf[offset ] = (byte)(t >> 24); + buf[offset + 1] = (byte)(t >> 16); + buf[offset + 2] = (byte)(t >> 8); + buf[offset + 3] = (byte)t; + } + + public static void WriteVersion(ProtocolVersion version, Stream output) + { + output.WriteByte((byte)version.MajorVersion); + output.WriteByte((byte)version.MinorVersion); + } + + public static void WriteVersion(ProtocolVersion version, byte[] buf, int offset) + { + buf[offset] = (byte)version.MajorVersion; + buf[offset + 1] = (byte)version.MinorVersion; + } + + public static void AddIfSupported(IList supportedAlgs, TlsCrypto crypto, + SignatureAndHashAlgorithm alg) + { + if (crypto.HasSignatureAndHashAlgorithm(alg)) + { + supportedAlgs.Add(alg); + } + } + + public static void AddIfSupported(IList supportedGroups, TlsCrypto crypto, int namedGroup) + { + if (crypto.HasNamedGroup(namedGroup)) + { + supportedGroups.Add(namedGroup); + } + } + + public static void AddIfSupported(IList supportedGroups, TlsCrypto crypto, int[] namedGroups) + { + for (int i = 0; i < namedGroups.Length; ++i) + { + AddIfSupported(supportedGroups, crypto, namedGroups[i]); + } + } + + public static bool AddToSet(IList s, T i) + { + bool result = !s.Contains(i); + if (result) + { + s.Add(i); + } + return result; + } + + public static IList GetDefaultDssSignatureAlgorithms() + { + return GetDefaultSignatureAlgorithms(SignatureAlgorithm.dsa); + } + + public static IList GetDefaultECDsaSignatureAlgorithms() + { + return GetDefaultSignatureAlgorithms(SignatureAlgorithm.ecdsa); + } + + public static IList GetDefaultRsaSignatureAlgorithms() + { + return GetDefaultSignatureAlgorithms(SignatureAlgorithm.rsa); + } + + public static SignatureAndHashAlgorithm GetDefaultSignatureAlgorithm(short signatureAlgorithm) + { + /* + * RFC 5246 7.4.1.4.1. If the client does not send the signature_algorithms extension, + * the server MUST do the following: + * + * - If the negotiated key exchange algorithm is one of (RSA, DHE_RSA, DH_RSA, RSA_PSK, + * ECDH_RSA, ECDHE_RSA), behave as if client had sent the value {sha1,rsa}. + * + * - If the negotiated key exchange algorithm is one of (DHE_DSS, DH_DSS), behave as if + * the client had sent the value {sha1,dsa}. + * + * - If the negotiated key exchange algorithm is one of (ECDH_ECDSA, ECDHE_ECDSA), + * behave as if the client had sent value {sha1,ecdsa}. + */ + + switch (signatureAlgorithm) + { + case SignatureAlgorithm.dsa: + case SignatureAlgorithm.ecdsa: + case SignatureAlgorithm.rsa: + return SignatureAndHashAlgorithm.GetInstance(HashAlgorithm.sha1, signatureAlgorithm); + default: + return null; + } + } + + public static IList GetDefaultSignatureAlgorithms(short signatureAlgorithm) + { + SignatureAndHashAlgorithm sigAndHashAlg = GetDefaultSignatureAlgorithm(signatureAlgorithm); + + return null == sigAndHashAlg ? new List() : VectorOfOne(sigAndHashAlg); + } + + public static IList GetDefaultSupportedSignatureAlgorithms(TlsContext context) + { + return GetSupportedSignatureAlgorithms(context, DefaultSupportedSigAlgs); + } + + public static IList GetSupportedSignatureAlgorithms(TlsContext context, + IList candidates) + { + TlsCrypto crypto = context.Crypto; + + var result = new List(candidates.Count); + foreach (SignatureAndHashAlgorithm sigAndHashAlg in candidates) + { + AddIfSupported(result, crypto, sigAndHashAlg); + } + return result; + } + + internal static SignatureAndHashAlgorithm GetSignatureAndHashAlgorithm(ProtocolVersion negotiatedVersion, + TlsCredentialedSigner credentialedSigner) + { + SignatureAndHashAlgorithm signatureAndHashAlgorithm = null; + if (IsSignatureAlgorithmsExtensionAllowed(negotiatedVersion)) + { + signatureAndHashAlgorithm = credentialedSigner.SignatureAndHashAlgorithm; + if (signatureAndHashAlgorithm == null) + { + /* + * RFC 5246 4.7. digitally-signed element needs SignatureAndHashAlgorithm from TLS 1.2 + */ + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + return signatureAndHashAlgorithm; + } + + public static byte[] GetExtensionData(IDictionary extensions, int extensionType) + { + if (extensions == null || !extensions.TryGetValue(extensionType, out var extensionData)) + return null; + + return extensionData; + } + + public static bool HasExpectedEmptyExtensionData(IDictionary extensions, int extensionType, + short alertDescription) + { + byte[] extension_data = GetExtensionData(extensions, extensionType); + if (extension_data == null) + return false; + + if (extension_data.Length != 0) + throw new TlsFatalAlert(alertDescription); + + return true; + } + + public static TlsSession ImportSession(byte[] sessionID, SessionParameters sessionParameters) + { + return new TlsSessionImpl(sessionID, sessionParameters); + } + + internal static bool IsExtendedMasterSecretOptionalDtls(ProtocolVersion[] activeProtocolVersions) + { + return ProtocolVersion.Contains(activeProtocolVersions, ProtocolVersion.DTLSv12) + || ProtocolVersion.Contains(activeProtocolVersions, ProtocolVersion.DTLSv10); + } + + internal static bool IsExtendedMasterSecretOptionalTls(ProtocolVersion[] activeProtocolVersions) + { + return ProtocolVersion.Contains(activeProtocolVersions, ProtocolVersion.TLSv12) + || ProtocolVersion.Contains(activeProtocolVersions, ProtocolVersion.TLSv11) + || ProtocolVersion.Contains(activeProtocolVersions, ProtocolVersion.TLSv10); + } + + public static bool IsNullOrContainsNull(object[] array) + { + if (null == array) + return true; + + int count = array.Length; + for (int i = 0; i < count; ++i) + { + if (null == array[i]) + return true; + } + return false; + } + + public static bool IsNullOrEmpty(T[] array) + { + return null == array || array.Length < 1; + } + + public static bool IsNullOrEmpty(string s) + { + return null == s || s.Length < 1; + } + + public static bool IsNullOrEmpty(IList v) + { + return null == v || v.Count < 1; + } + + public static bool IsSignatureAlgorithmsExtensionAllowed(ProtocolVersion version) + { + return null != version + && ProtocolVersion.TLSv12.IsEqualOrEarlierVersionOf(version.GetEquivalentTlsVersion()); + } + + public static short GetLegacyClientCertType(short signatureAlgorithm) + { + switch (signatureAlgorithm) + { + case SignatureAlgorithm.rsa: + return ClientCertificateType.rsa_sign; + case SignatureAlgorithm.dsa: + return ClientCertificateType.dss_sign; + case SignatureAlgorithm.ecdsa: + return ClientCertificateType.ecdsa_sign; + default: + return -1; + } + } + + public static short GetLegacySignatureAlgorithmClient(short clientCertificateType) + { + switch (clientCertificateType) + { + case ClientCertificateType.dss_sign: + return SignatureAlgorithm.dsa; + case ClientCertificateType.ecdsa_sign: + return SignatureAlgorithm.ecdsa; + case ClientCertificateType.rsa_sign: + return SignatureAlgorithm.rsa; + default: + return -1; + } + } + + public static short GetLegacySignatureAlgorithmClientCert(short clientCertificateType) + { + switch (clientCertificateType) + { + case ClientCertificateType.dss_sign: + case ClientCertificateType.dss_fixed_dh: + return SignatureAlgorithm.dsa; + + case ClientCertificateType.ecdsa_sign: + case ClientCertificateType.ecdsa_fixed_ecdh: + return SignatureAlgorithm.ecdsa; + + case ClientCertificateType.rsa_sign: + case ClientCertificateType.rsa_fixed_dh: + case ClientCertificateType.rsa_fixed_ecdh: + return SignatureAlgorithm.rsa; + default: + return -1; + } + } + + public static short GetLegacySignatureAlgorithmServer(int keyExchangeAlgorithm) + { + switch (keyExchangeAlgorithm) + { + case KeyExchangeAlgorithm.DHE_DSS: + case KeyExchangeAlgorithm.SRP_DSS: + return SignatureAlgorithm.dsa; + + case KeyExchangeAlgorithm.ECDHE_ECDSA: + return SignatureAlgorithm.ecdsa; + + case KeyExchangeAlgorithm.DHE_RSA: + case KeyExchangeAlgorithm.ECDHE_RSA: + case KeyExchangeAlgorithm.SRP_RSA: + return SignatureAlgorithm.rsa; + + default: + return -1; + } + } + + public static short GetLegacySignatureAlgorithmServerCert(int keyExchangeAlgorithm) + { + switch (keyExchangeAlgorithm) + { + case KeyExchangeAlgorithm.DH_DSS: + case KeyExchangeAlgorithm.DHE_DSS: + case KeyExchangeAlgorithm.SRP_DSS: + return SignatureAlgorithm.dsa; + + case KeyExchangeAlgorithm.ECDH_ECDSA: + case KeyExchangeAlgorithm.ECDHE_ECDSA: + return SignatureAlgorithm.ecdsa; + + case KeyExchangeAlgorithm.DH_RSA: + case KeyExchangeAlgorithm.DHE_RSA: + case KeyExchangeAlgorithm.ECDH_RSA: + case KeyExchangeAlgorithm.ECDHE_RSA: + case KeyExchangeAlgorithm.RSA: + case KeyExchangeAlgorithm.RSA_PSK: + case KeyExchangeAlgorithm.SRP_RSA: + return SignatureAlgorithm.rsa; + + default: + return -1; + } + } + + public static IList GetLegacySupportedSignatureAlgorithms() + { + var result = new List(3); + result.Add(SignatureAndHashAlgorithm.GetInstance(HashAlgorithm.sha1, SignatureAlgorithm.dsa)); + result.Add(SignatureAndHashAlgorithm.GetInstance(HashAlgorithm.sha1, SignatureAlgorithm.ecdsa)); + result.Add(SignatureAndHashAlgorithm.GetInstance(HashAlgorithm.sha1, SignatureAlgorithm.rsa)); + return result; + } + + /// + public static void EncodeSupportedSignatureAlgorithms( + IList supportedSignatureAlgorithms, Stream output) + { + if (supportedSignatureAlgorithms == null || + supportedSignatureAlgorithms.Count < 1 || + supportedSignatureAlgorithms.Count >= (1 << 15)) + { + throw new ArgumentException("must have length from 1 to (2^15 - 1)", "supportedSignatureAlgorithms"); + } + + // supported_signature_algorithms + int length = 2 * supportedSignatureAlgorithms.Count; + CheckUint16(length); + WriteUint16(length, output); + foreach (SignatureAndHashAlgorithm entry in supportedSignatureAlgorithms) + { + if (entry.Signature == SignatureAlgorithm.anonymous) + { + /* + * RFC 5246 7.4.1.4.1 The "anonymous" value is meaningless in this context but used + * in Section 7.4.3. It MUST NOT appear in this extension. + */ + throw new ArgumentException( + "SignatureAlgorithm.anonymous MUST NOT appear in the signature_algorithms extension"); + } + entry.Encode(output); + } + } + + /// + public static IList ParseSupportedSignatureAlgorithms(Stream input) + { + // supported_signature_algorithms + int length = ReadUint16(input); + if (length < 2 || (length & 1) != 0) + throw new TlsFatalAlert(AlertDescription.decode_error); + + int count = length / 2; + var supportedSignatureAlgorithms = new List(count); + for (int i = 0; i < count; ++i) + { + SignatureAndHashAlgorithm sigAndHashAlg = SignatureAndHashAlgorithm.Parse(input); + + if (SignatureAlgorithm.anonymous != sigAndHashAlg.Signature) + { + supportedSignatureAlgorithms.Add(sigAndHashAlg); + } + } + return supportedSignatureAlgorithms; + } + + /// + public static void VerifySupportedSignatureAlgorithm( + IList supportedSignatureAlgorithms, SignatureAndHashAlgorithm signatureAlgorithm) + { + VerifySupportedSignatureAlgorithm(supportedSignatureAlgorithms, signatureAlgorithm, + AlertDescription.illegal_parameter); + } + + /// + internal static void VerifySupportedSignatureAlgorithm( + IList supportedSignatureAlgorithms, SignatureAndHashAlgorithm signatureAlgorithm, + short alertDescription) + { + if (supportedSignatureAlgorithms == null || supportedSignatureAlgorithms.Count < 1 + || supportedSignatureAlgorithms.Count >= (1 << 15)) + { + throw new ArgumentException("must have length from 1 to (2^15 - 1)", "supportedSignatureAlgorithms"); + } + if (signatureAlgorithm == null) + throw new ArgumentNullException("signatureAlgorithm"); + + if (signatureAlgorithm.Signature == SignatureAlgorithm.anonymous + || !ContainsSignatureAlgorithm(supportedSignatureAlgorithms, signatureAlgorithm)) + { + throw new TlsFatalAlert(alertDescription); + } + } + + /// + public static bool ContainsSignatureAlgorithm(IList supportedSignatureAlgorithms, + SignatureAndHashAlgorithm signatureAlgorithm) + { + foreach (SignatureAndHashAlgorithm entry in supportedSignatureAlgorithms) + { + if (entry.Equals(signatureAlgorithm)) + return true; + } + + return false; + } + + public static bool ContainsAnySignatureAlgorithm(IList supportedSignatureAlgorithms, + short signatureAlgorithm) + { + foreach (SignatureAndHashAlgorithm entry in supportedSignatureAlgorithms) + { + if (entry.Signature == signatureAlgorithm) + return true; + } + + return false; + } + + public static TlsSecret Prf(SecurityParameters securityParameters, TlsSecret secret, string asciiLabel, + byte[] seed, int length) + { + return secret.DeriveUsingPrf(securityParameters.PrfAlgorithm, asciiLabel, seed, length); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static TlsSecret Prf(SecurityParameters securityParameters, TlsSecret secret, + ReadOnlySpan asciiLabel, ReadOnlySpan seed, int length) + { + return secret.DeriveUsingPrf(securityParameters.PrfAlgorithm, asciiLabel, seed, length); + } +#endif + + public static byte[] Clone(byte[] data) + { + return null == data ? null : data.Length == 0 ? EmptyBytes : (byte[])data.Clone(); + } + + public static string[] Clone(string[] s) + { + return null == s ? null : s.Length < 1 ? EmptyStrings : (string[])s.Clone(); + } + + public static bool ConstantTimeAreEqual(int len, byte[] a, int aOff, byte[] b, int bOff) + { + int d = 0; + for (int i = 0; i < len; ++i) + { + d |= a[aOff + i] ^ b[bOff + i]; + } + return 0 == d; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static bool ConstantTimeAreEqual(int len, Span a, int aOff, byte[] b, int bOff) + { + int d = 0; + for (int i = 0; i < len; ++i) + { + d |= a[aOff + i] ^ b[bOff + i]; + } + return 0 == d; + } +#endif + + public static byte[] CopyOfRangeExact(byte[] original, int from, int to) + { + int newLength = to - from; + byte[] copy = new byte[newLength]; + Array.Copy(original, from, copy, 0, newLength); + return copy; + } + + internal static byte[] Concat(byte[] a, byte[] b) + { + byte[] c = new byte[a.Length + b.Length]; + Array.Copy(a, 0, c, 0, a.Length); + Array.Copy(b, 0, c, a.Length, b.Length); + return c; + } + + /// + internal static byte[] CalculateEndPointHash(TlsContext context, TlsCertificate certificate, byte[] enc) + { + return CalculateEndPointHash(context, certificate, enc, 0, enc.Length); + } + + /// + internal static byte[] CalculateEndPointHash(TlsContext context, TlsCertificate certificate, byte[] enc, + int encOff, int encLen) + { + short hashAlgorithm = HashAlgorithm.none; + + string sigAlgOid = certificate.SigAlgOid; + if (sigAlgOid != null) + { + if (PkcsObjectIdentifiers.IdRsassaPss.Id.Equals(sigAlgOid)) + { + RsassaPssParameters pssParams = RsassaPssParameters.GetInstance(certificate.GetSigAlgParams()); + if (null != pssParams) + { + DerObjectIdentifier hashOid = pssParams.HashAlgorithm.Algorithm; + if (NistObjectIdentifiers.IdSha256.Equals(hashOid)) + { + hashAlgorithm = HashAlgorithm.sha256; + } + else if (NistObjectIdentifiers.IdSha384.Equals(hashOid)) + { + hashAlgorithm = HashAlgorithm.sha384; + } + else if (NistObjectIdentifiers.IdSha512.Equals(hashOid)) + { + hashAlgorithm = HashAlgorithm.sha512; + } + } + } + else + { + if (CertSigAlgOids.TryGetValue(sigAlgOid, out var algorithm)) + { + hashAlgorithm = algorithm.Hash; + } + } + } + + switch (hashAlgorithm) + { + case HashAlgorithm.Intrinsic: + hashAlgorithm = HashAlgorithm.none; + break; + case HashAlgorithm.md5: + case HashAlgorithm.sha1: + hashAlgorithm = HashAlgorithm.sha256; + break; + } + + if (HashAlgorithm.none != hashAlgorithm) + { + TlsHash hash = CreateHash(context.Crypto, hashAlgorithm); + if (hash != null) + { + hash.Update(enc, encOff, encLen); + return hash.CalculateHash(); + } + } + + return EmptyBytes; + } + + public static byte[] CalculateExporterSeed(SecurityParameters securityParameters, byte[] context) + { + byte[] cr = securityParameters.ClientRandom, sr = securityParameters.ServerRandom; + if (null == context) + return Arrays.Concatenate(cr, sr); + + if (!IsValidUint16(context.Length)) + throw new ArgumentException("must have length less than 2^16 (or be null)", "context"); + + byte[] contextLength = new byte[2]; + WriteUint16(context.Length, contextLength, 0); + + return Arrays.ConcatenateAll(cr, sr, contextLength, context); + } + + private static byte[] CalculateFinishedHmac(SecurityParameters securityParameters, TlsSecret baseKey, + byte[] transcriptHash) + { + int prfCryptoHashAlgorithm = securityParameters.PrfCryptoHashAlgorithm; + int prfHashLength = securityParameters.PrfHashLength; + + return CalculateFinishedHmac(prfCryptoHashAlgorithm, prfHashLength, baseKey, transcriptHash); + } + + private static byte[] CalculateFinishedHmac(int prfCryptoHashAlgorithm, int prfHashLength, TlsSecret baseKey, + byte[] transcriptHash) + { + TlsSecret finishedKey = TlsCryptoUtilities.HkdfExpandLabel(baseKey, prfCryptoHashAlgorithm, "finished", + EmptyBytes, prfHashLength); + + try + { + return finishedKey.CalculateHmac(prfCryptoHashAlgorithm, transcriptHash, 0, transcriptHash.Length); + } + finally + { + finishedKey.Destroy(); + } + } + + internal static TlsSecret CalculateMasterSecret(TlsContext context, TlsSecret preMasterSecret) + { + SecurityParameters sp = context.SecurityParameters; + + string asciiLabel; + byte[] seed; + if (sp.IsExtendedMasterSecret) + { + asciiLabel = ExporterLabel.extended_master_secret; + seed = sp.SessionHash; + } + else + { + asciiLabel = ExporterLabel.master_secret; + seed = Concat(sp.ClientRandom, sp.ServerRandom); + } + + return Prf(sp, preMasterSecret, asciiLabel, seed, 48); + } + + internal static byte[] CalculatePskBinder(TlsCrypto crypto, bool isExternalPsk, int pskCryptoHashAlgorithm, + TlsSecret earlySecret, byte[] transcriptHash) + { + int prfHashLength = TlsCryptoUtilities.GetHashOutputSize(pskCryptoHashAlgorithm); + + string label = isExternalPsk ? "ext binder" : "res binder"; + byte[] emptyTranscriptHash = crypto.CreateHash(pskCryptoHashAlgorithm).CalculateHash(); + + TlsSecret binderKey = DeriveSecret(pskCryptoHashAlgorithm, prfHashLength, earlySecret, label, + emptyTranscriptHash); + + try + { + return CalculateFinishedHmac(pskCryptoHashAlgorithm, prfHashLength, binderKey, transcriptHash); + } + finally + { + binderKey.Destroy(); + } + } + + internal static byte[] CalculateVerifyData(TlsContext context, TlsHandshakeHash handshakeHash, bool isServer) + { + SecurityParameters securityParameters = context.SecurityParameters; + ProtocolVersion negotiatedVersion = securityParameters.NegotiatedVersion; + + if (IsTlsV13(negotiatedVersion)) + { + TlsSecret baseKey = isServer + ? securityParameters.BaseKeyServer + : securityParameters.BaseKeyClient; + byte[] transcriptHash = GetCurrentPrfHash(handshakeHash); + + return CalculateFinishedHmac(securityParameters, baseKey, transcriptHash); + } + + if (negotiatedVersion.IsSsl) + { + return Ssl3Utilities.CalculateVerifyData(handshakeHash, isServer); + } + + string asciiLabel = isServer ? ExporterLabel.server_finished : ExporterLabel.client_finished; + byte[] prfHash = GetCurrentPrfHash(handshakeHash); + + TlsSecret master_secret = securityParameters.MasterSecret; + int verify_data_length = securityParameters.VerifyDataLength; + + return Prf(securityParameters, master_secret, asciiLabel, prfHash, verify_data_length).Extract(); + } + + internal static void Establish13PhaseSecrets(TlsContext context, TlsSecret pskEarlySecret, + TlsSecret sharedSecret) + { + TlsCrypto crypto = context.Crypto; + SecurityParameters securityParameters = context.SecurityParameters; + int cryptoHashAlgorithm = securityParameters.PrfCryptoHashAlgorithm; + TlsSecret zeros = crypto.HkdfInit(cryptoHashAlgorithm); + byte[] emptyTranscriptHash = crypto.CreateHash(cryptoHashAlgorithm).CalculateHash(); + + TlsSecret earlySecret = pskEarlySecret; + if (null == earlySecret) + { + earlySecret = crypto + .HkdfInit(cryptoHashAlgorithm) + .HkdfExtract(cryptoHashAlgorithm, zeros); + } + + if (null == sharedSecret) + { + sharedSecret = zeros; + } + + TlsSecret handshakeSecret = DeriveSecret(securityParameters, earlySecret, "derived", emptyTranscriptHash) + .HkdfExtract(cryptoHashAlgorithm, sharedSecret); + + if (sharedSecret != zeros) + { + sharedSecret.Destroy(); + } + + TlsSecret masterSecret = DeriveSecret(securityParameters, handshakeSecret, "derived", emptyTranscriptHash) + .HkdfExtract(cryptoHashAlgorithm, zeros); + + securityParameters.m_earlySecret = earlySecret; + securityParameters.m_handshakeSecret = handshakeSecret; + securityParameters.m_masterSecret = masterSecret; + } + + private static void Establish13TrafficSecrets(TlsContext context, byte[] transcriptHash, TlsSecret phaseSecret, + string clientLabel, string serverLabel, RecordStream recordStream) + { + SecurityParameters securityParameters = context.SecurityParameters; + + securityParameters.m_trafficSecretClient = DeriveSecret(securityParameters, phaseSecret, clientLabel, + transcriptHash); + + if (null != serverLabel) + { + securityParameters.m_trafficSecretServer = DeriveSecret(securityParameters, phaseSecret, serverLabel, + transcriptHash); + } + + // TODO[tls13] Early data (client->server only) + + recordStream.SetPendingCipher(InitCipher(context)); + } + + internal static void Establish13PhaseApplication(TlsContext context, byte[] serverFinishedTranscriptHash, + RecordStream recordStream) + { + SecurityParameters securityParameters = context.SecurityParameters; + TlsSecret phaseSecret = securityParameters.MasterSecret; + + Establish13TrafficSecrets(context, serverFinishedTranscriptHash, phaseSecret, "c ap traffic", + "s ap traffic", recordStream); + + securityParameters.m_exporterMasterSecret = DeriveSecret(securityParameters, phaseSecret, "exp master", + serverFinishedTranscriptHash); + + Connections.TLS.KeyLogFileWriter.WriteLabel(Connections.TLS.Labels.CLIENT_TRAFFIC_SECRET_0, securityParameters); + Connections.TLS.KeyLogFileWriter.WriteLabel(Connections.TLS.Labels.SERVER_TRAFFIC_SECRET_0, securityParameters); + Connections.TLS.KeyLogFileWriter.WriteLabel(Connections.TLS.Labels.EXPORTER_SECRET, securityParameters); + } + + internal static void Establish13PhaseEarly(TlsContext context, byte[] clientHelloTranscriptHash, + RecordStream recordStream) + { + SecurityParameters securityParameters = context.SecurityParameters; + TlsSecret phaseSecret = securityParameters.EarlySecret; + + // TODO[tls13] binder_key + + // TODO[tls13] Early data (client->server only) + if (null != recordStream) + { + Establish13TrafficSecrets(context, clientHelloTranscriptHash, phaseSecret, "c e traffic", null, + recordStream); + } + + securityParameters.m_earlyExporterMasterSecret = DeriveSecret(securityParameters, phaseSecret, + "e exp master", clientHelloTranscriptHash); + } + + internal static void Establish13PhaseHandshake(TlsContext context, byte[] serverHelloTranscriptHash, + RecordStream recordStream) + { + SecurityParameters securityParameters = context.SecurityParameters; + TlsSecret phaseSecret = securityParameters.HandshakeSecret; + + Establish13TrafficSecrets(context, serverHelloTranscriptHash, phaseSecret, "c hs traffic", "s hs traffic", + recordStream); + + Connections.TLS.KeyLogFileWriter.WriteLabel(Connections.TLS.Labels.CLIENT_HANDSHAKE_TRAFFIC_SECRET, securityParameters); + Connections.TLS.KeyLogFileWriter.WriteLabel(Connections.TLS.Labels.SERVER_HANDSHAKE_TRAFFIC_SECRET, securityParameters); + + securityParameters.m_baseKeyClient = securityParameters.TrafficSecretClient; + securityParameters.m_baseKeyServer = securityParameters.TrafficSecretServer; + } + + internal static void Update13TrafficSecretLocal(TlsContext context) + { + Update13TrafficSecret(context, context.IsServer); + } + + internal static void Update13TrafficSecretPeer(TlsContext context) + { + Update13TrafficSecret(context, !context.IsServer); + } + + private static void Update13TrafficSecret(TlsContext context, bool forServer) + { + SecurityParameters securityParameters = context.SecurityParameters; + + TlsSecret current; + if (forServer) + { + current = securityParameters.TrafficSecretServer; + securityParameters.m_trafficSecretServer = Update13TrafficSecret(securityParameters, current); + } + else + { + current = securityParameters.TrafficSecretClient; + securityParameters.m_trafficSecretClient = Update13TrafficSecret(securityParameters, current); + } + + if (null != current) + { + current.Destroy(); + } + } + + private static TlsSecret Update13TrafficSecret(SecurityParameters securityParameters, TlsSecret secret) + { + return TlsCryptoUtilities.HkdfExpandLabel(secret, securityParameters.PrfCryptoHashAlgorithm, "traffic upd", + EmptyBytes, securityParameters.PrfHashLength); + } + + public static DerObjectIdentifier GetOidForHashAlgorithm(short hashAlgorithm) + { + switch (hashAlgorithm) + { + case HashAlgorithm.md5: + return PkcsObjectIdentifiers.MD5; + case HashAlgorithm.sha1: + return X509ObjectIdentifiers.IdSha1; + case HashAlgorithm.sha224: + return NistObjectIdentifiers.IdSha224; + case HashAlgorithm.sha256: + return NistObjectIdentifiers.IdSha256; + case HashAlgorithm.sha384: + return NistObjectIdentifiers.IdSha384; + case HashAlgorithm.sha512: + return NistObjectIdentifiers.IdSha512; + // TODO[RFC 8998] + //case HashAlgorithm.sm3: + // return GMObjectIdentifiers.sm3; + default: + throw new ArgumentException("invalid HashAlgorithm: " + HashAlgorithm.GetText(hashAlgorithm)); + } + } + + internal static int GetPrfAlgorithm(SecurityParameters securityParameters, int cipherSuite) + { + ProtocolVersion negotiatedVersion = securityParameters.NegotiatedVersion; + + bool isTlsV13 = IsTlsV13(negotiatedVersion); + bool isTlsV12Exactly = !isTlsV13 && IsTlsV12(negotiatedVersion); + bool isSsl = negotiatedVersion.IsSsl; + + switch (cipherSuite) + { + case CipherSuite.TLS_AES_128_CCM_SHA256: + case CipherSuite.TLS_AES_128_CCM_8_SHA256: + case CipherSuite.TLS_AES_128_GCM_SHA256: + case CipherSuite.TLS_CHACHA20_POLY1305_SHA256: + { + if (isTlsV13) + return PrfAlgorithm.tls13_hkdf_sha256; + + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + case CipherSuite.TLS_AES_256_GCM_SHA384: + { + if (isTlsV13) + return PrfAlgorithm.tls13_hkdf_sha384; + + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + case CipherSuite.TLS_SM4_CCM_SM3: + case CipherSuite.TLS_SM4_GCM_SM3: + { + if (isTlsV13) + return PrfAlgorithm.tls13_hkdf_sm3; + + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + case CipherSuite.TLS_DH_anon_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DH_anon_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DH_anon_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DH_anon_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_anon_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_AES_128_CCM: + case CipherSuite.TLS_DHE_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_AES_256_CCM: + case CipherSuite.TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CCM: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CCM_8: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CCM: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CCM_8: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CCM: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CCM: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CCM_8_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CCM_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_PSK_DHE_WITH_AES_128_CCM_8: + case CipherSuite.TLS_PSK_DHE_WITH_AES_256_CCM_8: + case CipherSuite.TLS_PSK_WITH_AES_128_CCM: + case CipherSuite.TLS_PSK_WITH_AES_128_CCM_8: + case CipherSuite.TLS_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_PSK_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_PSK_WITH_AES_256_CCM: + case CipherSuite.TLS_PSK_WITH_AES_256_CCM_8: + case CipherSuite.TLS_PSK_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_PSK_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_AES_128_CCM: + case CipherSuite.TLS_RSA_WITH_AES_128_CCM_8: + case CipherSuite.TLS_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_AES_256_CCM: + case CipherSuite.TLS_RSA_WITH_AES_256_CCM_8: + case CipherSuite.TLS_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_NULL_SHA256: + { + if (isTlsV12Exactly) + return PrfAlgorithm.tls_prf_sha256; + + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + case CipherSuite.TLS_DH_anon_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DH_anon_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DH_anon_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_PSK_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_PSK_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384: + { + if (isTlsV12Exactly) + return PrfAlgorithm.tls_prf_sha384; + + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + case CipherSuite.TLS_DHE_PSK_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_NULL_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_NULL_SHA384: + case CipherSuite.TLS_PSK_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_PSK_WITH_NULL_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_NULL_SHA384: + { + if (isTlsV13) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + if (isTlsV12Exactly) + return PrfAlgorithm.tls_prf_sha384; + + if (isSsl) + return PrfAlgorithm.ssl_prf_legacy; + + return PrfAlgorithm.tls_prf_legacy; + } + + default: + { + if (isTlsV13) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + if (isTlsV12Exactly) + return PrfAlgorithm.tls_prf_sha256; + + if (isSsl) + return PrfAlgorithm.ssl_prf_legacy; + + return PrfAlgorithm.tls_prf_legacy; + } + } + } + + internal static int GetPrfAlgorithm13(int cipherSuite) + { + // NOTE: GetPrfAlgorithms13 relies on the number of distinct return values + switch (cipherSuite) + { + case CipherSuite.TLS_AES_128_CCM_SHA256: + case CipherSuite.TLS_AES_128_CCM_8_SHA256: + case CipherSuite.TLS_AES_128_GCM_SHA256: + case CipherSuite.TLS_CHACHA20_POLY1305_SHA256: + return PrfAlgorithm.tls13_hkdf_sha256; + + case CipherSuite.TLS_AES_256_GCM_SHA384: + return PrfAlgorithm.tls13_hkdf_sha384; + + case CipherSuite.TLS_SM4_CCM_SM3: + case CipherSuite.TLS_SM4_GCM_SM3: + return PrfAlgorithm.tls13_hkdf_sm3; + + default: + return -1; + } + } + + internal static int[] GetPrfAlgorithms13(int[] cipherSuites) + { + int[] result = new int[System.Math.Min(3, cipherSuites.Length)]; + + int count = 0; + for (int i = 0; i < cipherSuites.Length; ++i) + { + int prfAlgorithm = GetPrfAlgorithm13(cipherSuites[i]); + if (prfAlgorithm >= 0 && !Arrays.Contains(result, prfAlgorithm)) + { + result[count++] = prfAlgorithm; + } + } + + return Truncate(result, count); + } + + internal static byte[] CalculateSignatureHash(TlsContext context, SignatureAndHashAlgorithm algorithm, + byte[] extraSignatureInput, DigestInputBuffer buf) + { + TlsCrypto crypto = context.Crypto; + + TlsHash h = algorithm == null + ? new CombinedHash(crypto) + : CreateHash(crypto, algorithm); + + SecurityParameters sp = context.SecurityParameters; + // NOTE: The implicit copy here is intended (and important) + byte[] randoms = Arrays.Concatenate(sp.ClientRandom, sp.ServerRandom); + h.Update(randoms, 0, randoms.Length); + + if (null != extraSignatureInput) + { + h.Update(extraSignatureInput, 0, extraSignatureInput.Length); + } + + buf.UpdateDigest(h); + + return h.CalculateHash(); + } + + internal static void SendSignatureInput(TlsContext context, byte[] extraSignatureInput, DigestInputBuffer buf, + Stream output) + { + SecurityParameters sp = context.SecurityParameters; + // NOTE: The implicit copy here is intended (and important) + byte[] randoms = Arrays.Concatenate(sp.ClientRandom, sp.ServerRandom); + output.Write(randoms, 0, randoms.Length); + + if (null != extraSignatureInput) + { + output.Write(extraSignatureInput, 0, extraSignatureInput.Length); + } + + buf.CopyInputTo(output); + + output.Dispose(); + } + + internal static DigitallySigned GenerateCertificateVerifyClient(TlsClientContext clientContext, + TlsCredentialedSigner clientAuthSigner, SignatureAndHashAlgorithm clientAuthAlgorithm, + TlsStreamSigner clientAuthStreamSigner, TlsHandshakeHash handshakeHash) + { + SecurityParameters securityParameters = clientContext.SecurityParameters; + if (IsTlsV13(securityParameters.NegotiatedVersion)) + { + // Should be using Generate13CertificateVerify instead + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + byte[] signature; + if (clientAuthStreamSigner != null) + { + handshakeHash.CopyBufferTo(clientAuthStreamSigner.Stream); + signature = clientAuthStreamSigner.GetSignature(); + } + else + { + byte[] hash; + if (clientAuthAlgorithm == null) + { + hash = securityParameters.SessionHash; + } + else + { + hash = handshakeHash.GetFinalHash(SignatureScheme.GetCryptoHashAlgorithm(clientAuthAlgorithm)); + } + + signature = clientAuthSigner.GenerateRawSignature(hash); + } + + return new DigitallySigned(clientAuthAlgorithm, signature); + } + + internal static DigitallySigned Generate13CertificateVerify(TlsContext context, + TlsCredentialedSigner credentialedSigner, TlsHandshakeHash handshakeHash) + { + SignatureAndHashAlgorithm signatureAndHashAlgorithm = credentialedSigner.SignatureAndHashAlgorithm; + if (null == signatureAndHashAlgorithm) + throw new TlsFatalAlert(AlertDescription.internal_error); + + string contextString = context.IsServer + ? "TLS 1.3, server CertificateVerify" + : "TLS 1.3, client CertificateVerify"; + + byte[] signature = Generate13CertificateVerify(context.Crypto, credentialedSigner, contextString, + handshakeHash, signatureAndHashAlgorithm); + + return new DigitallySigned(signatureAndHashAlgorithm, signature); + } + + private static byte[] Generate13CertificateVerify(TlsCrypto crypto, TlsCredentialedSigner credentialedSigner, + string contextString, TlsHandshakeHash handshakeHash, SignatureAndHashAlgorithm signatureAndHashAlgorithm) + { + TlsStreamSigner streamSigner = credentialedSigner.GetStreamSigner(); + + byte[] header = GetCertificateVerifyHeader(contextString); + byte[] prfHash = GetCurrentPrfHash(handshakeHash); + + if (null != streamSigner) + { + Stream output = streamSigner.Stream; + output.Write(header, 0, header.Length); + output.Write(prfHash, 0, prfHash.Length); + return streamSigner.GetSignature(); + } + + TlsHash tlsHash = CreateHash(crypto, signatureAndHashAlgorithm); + tlsHash.Update(header, 0, header.Length); + tlsHash.Update(prfHash, 0, prfHash.Length); + byte[] hash = tlsHash.CalculateHash(); + return credentialedSigner.GenerateRawSignature(hash); + } + + internal static void VerifyCertificateVerifyClient(TlsServerContext serverContext, + CertificateRequest certificateRequest, DigitallySigned certificateVerify, TlsHandshakeHash handshakeHash) + { + SecurityParameters securityParameters = serverContext.SecurityParameters; + Certificate clientCertificate = securityParameters.PeerCertificate; + TlsCertificate verifyingCert = clientCertificate.GetCertificateAt(0); + SignatureAndHashAlgorithm sigAndHashAlg = certificateVerify.Algorithm; + short signatureAlgorithm; + + if (null == sigAndHashAlg) + { + signatureAlgorithm = verifyingCert.GetLegacySignatureAlgorithm(); + + CheckClientCertificateType(certificateRequest, GetLegacyClientCertType(signatureAlgorithm), + AlertDescription.unsupported_certificate); + } + else + { + VerifySupportedSignatureAlgorithm(securityParameters.ServerSigAlgs, sigAndHashAlg); + + signatureAlgorithm = sigAndHashAlg.Signature; + + CheckClientCertificateType(certificateRequest, + SignatureAlgorithm.GetClientCertificateType(signatureAlgorithm), AlertDescription.illegal_parameter); + } + + // Verify the CertificateVerify message contains a correct signature. + bool verified; + try + { + TlsVerifier verifier = verifyingCert.CreateVerifier(signatureAlgorithm); + TlsStreamVerifier streamVerifier = verifier.GetStreamVerifier(certificateVerify); + + if (streamVerifier != null) + { + handshakeHash.CopyBufferTo(streamVerifier.Stream); + verified = streamVerifier.IsVerified(); + } + else + { + byte[] hash; + if (IsTlsV12(serverContext)) + { + hash = handshakeHash.GetFinalHash(SignatureScheme.GetCryptoHashAlgorithm(sigAndHashAlg)); + } + else + { + hash = securityParameters.SessionHash; + } + + verified = verifier.VerifyRawSignature(certificateVerify, hash); + } + } + catch (TlsFatalAlert e) + { + throw e; + } + catch (Exception e) + { + throw new TlsFatalAlert(AlertDescription.decrypt_error, e); + } + + if (!verified) + { + throw new TlsFatalAlert(AlertDescription.decrypt_error); + } + } + + /// + internal static void Verify13CertificateVerifyClient(TlsServerContext serverContext, + TlsHandshakeHash handshakeHash, CertificateVerify certificateVerify) + { + SecurityParameters securityParameters = serverContext.SecurityParameters; + + var supportedAlgorithms = securityParameters.ServerSigAlgs; + TlsCertificate certificate = securityParameters.PeerCertificate.GetCertificateAt(0); + + Verify13CertificateVerify(supportedAlgorithms, "TLS 1.3, client CertificateVerify", handshakeHash, + certificate, certificateVerify); + } + + /// + internal static void Verify13CertificateVerifyServer(TlsClientContext clientContext, + TlsHandshakeHash handshakeHash, CertificateVerify certificateVerify) + { + SecurityParameters securityParameters = clientContext.SecurityParameters; + + var supportedAlgorithms = securityParameters.ClientSigAlgs; + TlsCertificate certificate = securityParameters.PeerCertificate.GetCertificateAt(0); + + Verify13CertificateVerify(supportedAlgorithms, "TLS 1.3, server CertificateVerify", handshakeHash, + certificate, certificateVerify); + } + + /// + private static void Verify13CertificateVerify(IList supportedAlgorithms, + string contextString, TlsHandshakeHash handshakeHash, TlsCertificate certificate, + CertificateVerify certificateVerify) + { + // Verify the CertificateVerify message contains a correct signature. + bool verified; + try + { + int signatureScheme = certificateVerify.Algorithm; + + SignatureAndHashAlgorithm algorithm = SignatureScheme.GetSignatureAndHashAlgorithm(signatureScheme); + VerifySupportedSignatureAlgorithm(supportedAlgorithms, algorithm); + + Tls13Verifier verifier = certificate.CreateVerifier(signatureScheme); + + byte[] header = GetCertificateVerifyHeader(contextString); + byte[] prfHash = GetCurrentPrfHash(handshakeHash); + + Stream output = verifier.Stream; + output.Write(header, 0, header.Length); + output.Write(prfHash, 0, prfHash.Length); + verified = verifier.VerifySignature(certificateVerify.Signature); + } + catch (TlsFatalAlert e) + { + throw e; + } + catch (Exception e) + { + throw new TlsFatalAlert(AlertDescription.decrypt_error, e); + } + + if (!verified) + { + throw new TlsFatalAlert(AlertDescription.decrypt_error); + } + } + + private static byte[] GetCertificateVerifyHeader(string contextString) + { + int count = contextString.Length; + byte[] header = new byte[64 + count + 1]; + for (int i = 0; i < 64; ++i) + { + header[i] = 0x20; + } + for (int i = 0; i < count; ++i) + { + char c = contextString[i]; + header[64 + i] = (byte)c; + } + header[64 + count] = 0x00; + return header; + } + + /// + internal static void GenerateServerKeyExchangeSignature(TlsContext context, TlsCredentialedSigner credentials, + byte[] extraSignatureInput, DigestInputBuffer digestBuffer) + { + /* + * RFC 5246 4.7. digitally-signed element needs SignatureAndHashAlgorithm from TLS 1.2 + */ + SignatureAndHashAlgorithm algorithm = GetSignatureAndHashAlgorithm(context.ServerVersion, credentials); + TlsStreamSigner streamSigner = credentials.GetStreamSigner(); + + byte[] signature; + if (streamSigner != null) + { + SendSignatureInput(context, extraSignatureInput, digestBuffer, streamSigner.Stream); + signature = streamSigner.GetSignature(); + } + else + { + byte[] hash = CalculateSignatureHash(context, algorithm, extraSignatureInput, digestBuffer); + signature = credentials.GenerateRawSignature(hash); + } + + DigitallySigned digitallySigned = new DigitallySigned(algorithm, signature); + + digitallySigned.Encode(digestBuffer); + } + + /// + internal static void VerifyServerKeyExchangeSignature(TlsContext context, Stream signatureInput, + TlsCertificate serverCertificate, byte[] extraSignatureInput, DigestInputBuffer digestBuffer) + { + DigitallySigned digitallySigned = DigitallySigned.Parse(context, signatureInput); + + SecurityParameters securityParameters = context.SecurityParameters; + int keyExchangeAlgorithm = securityParameters.KeyExchangeAlgorithm; + + SignatureAndHashAlgorithm sigAndHashAlg = digitallySigned.Algorithm; + short signatureAlgorithm; + + if (sigAndHashAlg == null) + { + signatureAlgorithm = GetLegacySignatureAlgorithmServer(keyExchangeAlgorithm); + } + else + { + signatureAlgorithm = sigAndHashAlg.Signature; + + if (!IsValidSignatureAlgorithmForServerKeyExchange(signatureAlgorithm, keyExchangeAlgorithm)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + VerifySupportedSignatureAlgorithm(securityParameters.ClientSigAlgs, sigAndHashAlg); + } + + TlsVerifier verifier = serverCertificate.CreateVerifier(signatureAlgorithm); + TlsStreamVerifier streamVerifier = verifier.GetStreamVerifier(digitallySigned); + + bool verified; + if (streamVerifier != null) + { + SendSignatureInput(context, null, digestBuffer, streamVerifier.Stream); + verified = streamVerifier.IsVerified(); + } + else + { + byte[] hash = CalculateSignatureHash(context, sigAndHashAlg, null, digestBuffer); + verified = verifier.VerifyRawSignature(digitallySigned, hash); + } + + if (!verified) + { + throw new TlsFatalAlert(AlertDescription.decrypt_error); + } + } + + internal static void TrackHashAlgorithmClient(TlsHandshakeHash handshakeHash, + SignatureAndHashAlgorithm signatureAndHashAlgorithm) + { + int cryptoHashAlgorithm = SignatureScheme.GetCryptoHashAlgorithm(signatureAndHashAlgorithm); + if (cryptoHashAlgorithm >= 0) + { + handshakeHash.TrackHashAlgorithm(cryptoHashAlgorithm); + } + } + + internal static void TrackHashAlgorithms(TlsHandshakeHash handshakeHash, + IList supportedSignatureAlgorithms) + { + foreach (SignatureAndHashAlgorithm signatureAndHashAlgorithm in supportedSignatureAlgorithms) + { + int cryptoHashAlgorithm = SignatureScheme.GetCryptoHashAlgorithm(signatureAndHashAlgorithm); + if (cryptoHashAlgorithm >= 0) + { + handshakeHash.TrackHashAlgorithm(cryptoHashAlgorithm); + } + else if (HashAlgorithm.Intrinsic == signatureAndHashAlgorithm.Hash) + { + handshakeHash.ForceBuffering(); + } + } + } + + public static bool HasSigningCapability(short clientCertificateType) + { + switch (clientCertificateType) + { + case ClientCertificateType.dss_sign: + case ClientCertificateType.ecdsa_sign: + case ClientCertificateType.rsa_sign: + return true; + default: + return false; + } + } + + public static IList VectorOfOne(T obj) + { + var v = new List(1); + v.Add(obj); + return v; + } + + public static int GetCipherType(int cipherSuite) + { + int encryptionAlgorithm = GetEncryptionAlgorithm(cipherSuite); + + return GetEncryptionAlgorithmType(encryptionAlgorithm); + } + + public static int GetEncryptionAlgorithm(int cipherSuite) + { + switch (cipherSuite) + { + case CipherSuite.TLS_DH_anon_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_PSK_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA: + return EncryptionAlgorithm.cls_3DES_EDE_CBC; + + case CipherSuite.TLS_DH_anon_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DH_anon_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DHE_PSK_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_anon_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_PSK_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_PSK_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_RSA_PSK_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_WITH_AES_128_CBC_SHA: + return EncryptionAlgorithm.AES_128_CBC; + + case CipherSuite.TLS_AES_128_CCM_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_AES_128_CCM: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CCM: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CCM: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CCM_SHA256: + case CipherSuite.TLS_PSK_WITH_AES_128_CCM: + case CipherSuite.TLS_RSA_WITH_AES_128_CCM: + return EncryptionAlgorithm.AES_128_CCM; + + case CipherSuite.TLS_AES_128_CCM_8_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CCM_8: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CCM_8_SHA256: + case CipherSuite.TLS_PSK_DHE_WITH_AES_128_CCM_8: + case CipherSuite.TLS_PSK_WITH_AES_128_CCM_8: + case CipherSuite.TLS_RSA_WITH_AES_128_CCM_8: + return EncryptionAlgorithm.AES_128_CCM_8; + + case CipherSuite.TLS_AES_128_GCM_SHA256: + case CipherSuite.TLS_DH_anon_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_RSA_WITH_AES_128_GCM_SHA256: + return EncryptionAlgorithm.AES_128_GCM; + + case CipherSuite.TLS_DH_anon_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DH_anon_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DHE_PSK_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_ECDH_anon_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_PSK_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_PSK_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_RSA_PSK_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_WITH_AES_256_CBC_SHA: + return EncryptionAlgorithm.AES_256_CBC; + + case CipherSuite.TLS_DHE_PSK_WITH_AES_256_CCM: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CCM: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CCM: + case CipherSuite.TLS_PSK_WITH_AES_256_CCM: + case CipherSuite.TLS_RSA_WITH_AES_256_CCM: + return EncryptionAlgorithm.AES_256_CCM; + + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CCM_8: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8: + case CipherSuite.TLS_PSK_DHE_WITH_AES_256_CCM_8: + case CipherSuite.TLS_PSK_WITH_AES_256_CCM_8: + case CipherSuite.TLS_RSA_WITH_AES_256_CCM_8: + return EncryptionAlgorithm.AES_256_CCM_8; + + case CipherSuite.TLS_AES_256_GCM_SHA384: + case CipherSuite.TLS_DH_anon_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_RSA_WITH_AES_256_GCM_SHA384: + return EncryptionAlgorithm.AES_256_GCM; + + case CipherSuite.TLS_DH_anon_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_PSK_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256: + return EncryptionAlgorithm.ARIA_128_CBC; + + case CipherSuite.TLS_DH_anon_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_PSK_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256: + return EncryptionAlgorithm.ARIA_128_GCM; + + case CipherSuite.TLS_DH_anon_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_PSK_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384: + return EncryptionAlgorithm.ARIA_256_CBC; + + case CipherSuite.TLS_DH_anon_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_PSK_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384: + return EncryptionAlgorithm.ARIA_256_GCM; + + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_128_CBC_SHA: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256: + return EncryptionAlgorithm.CAMELLIA_128_CBC; + + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256: + return EncryptionAlgorithm.CAMELLIA_128_GCM; + + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_256_CBC_SHA: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384: + return EncryptionAlgorithm.CAMELLIA_256_CBC; + + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384: + return EncryptionAlgorithm.CAMELLIA_256_GCM; + + case CipherSuite.TLS_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_PSK_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256: + return EncryptionAlgorithm.CHACHA20_POLY1305; + + case CipherSuite.TLS_DHE_PSK_WITH_NULL_SHA: + case CipherSuite.TLS_ECDH_anon_WITH_NULL_SHA: + case CipherSuite.TLS_ECDH_ECDSA_WITH_NULL_SHA: + case CipherSuite.TLS_ECDH_RSA_WITH_NULL_SHA: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_NULL_SHA: + case CipherSuite.TLS_ECDHE_PSK_WITH_NULL_SHA: + case CipherSuite.TLS_ECDHE_RSA_WITH_NULL_SHA: + case CipherSuite.TLS_PSK_WITH_NULL_SHA: + case CipherSuite.TLS_RSA_PSK_WITH_NULL_SHA: + case CipherSuite.TLS_RSA_WITH_NULL_SHA: + return EncryptionAlgorithm.NULL; + + case CipherSuite.TLS_DHE_PSK_WITH_NULL_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_NULL_SHA256: + case CipherSuite.TLS_PSK_WITH_NULL_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_NULL_SHA256: + case CipherSuite.TLS_RSA_WITH_NULL_SHA256: + return EncryptionAlgorithm.NULL; + + case CipherSuite.TLS_DHE_PSK_WITH_NULL_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_NULL_SHA384: + case CipherSuite.TLS_PSK_WITH_NULL_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_NULL_SHA384: + return EncryptionAlgorithm.NULL; + + case CipherSuite.TLS_DH_anon_WITH_SEED_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_SEED_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_SEED_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_SEED_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_SEED_CBC_SHA: + case CipherSuite.TLS_RSA_WITH_SEED_CBC_SHA: + return EncryptionAlgorithm.SEED_CBC; + + case CipherSuite.TLS_SM4_CCM_SM3: + return EncryptionAlgorithm.SM4_CCM; + + case CipherSuite.TLS_SM4_GCM_SM3: + return EncryptionAlgorithm.SM4_GCM; + + default: + return -1; + } + } + + public static int GetEncryptionAlgorithmType(int encryptionAlgorithm) + { + switch (encryptionAlgorithm) + { + case EncryptionAlgorithm.AES_128_CCM: + case EncryptionAlgorithm.AES_128_CCM_8: + case EncryptionAlgorithm.AES_128_GCM: + case EncryptionAlgorithm.AES_256_CCM: + case EncryptionAlgorithm.AES_256_CCM_8: + case EncryptionAlgorithm.AES_256_GCM: + case EncryptionAlgorithm.ARIA_128_GCM: + case EncryptionAlgorithm.ARIA_256_GCM: + case EncryptionAlgorithm.CAMELLIA_128_GCM: + case EncryptionAlgorithm.CAMELLIA_256_GCM: + case EncryptionAlgorithm.CHACHA20_POLY1305: + case EncryptionAlgorithm.SM4_CCM: + case EncryptionAlgorithm.SM4_GCM: + return CipherType.aead; + + case EncryptionAlgorithm.RC2_CBC_40: + case EncryptionAlgorithm.IDEA_CBC: + case EncryptionAlgorithm.DES40_CBC: + case EncryptionAlgorithm.DES_CBC: + case EncryptionAlgorithm.cls_3DES_EDE_CBC: + case EncryptionAlgorithm.AES_128_CBC: + case EncryptionAlgorithm.AES_256_CBC: + case EncryptionAlgorithm.ARIA_128_CBC: + case EncryptionAlgorithm.ARIA_256_CBC: + case EncryptionAlgorithm.CAMELLIA_128_CBC: + case EncryptionAlgorithm.CAMELLIA_256_CBC: + case EncryptionAlgorithm.SEED_CBC: + case EncryptionAlgorithm.SM4_CBC: + return CipherType.block; + + case EncryptionAlgorithm.NULL: + case EncryptionAlgorithm.RC4_40: + case EncryptionAlgorithm.RC4_128: + return CipherType.stream; + + default: + return -1; + } + } + + public static int GetKeyExchangeAlgorithm(int cipherSuite) + { + switch (cipherSuite) + { + case CipherSuite.TLS_DH_anon_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DH_anon_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DH_anon_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DH_anon_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DH_anon_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DH_anon_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DH_anon_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DH_anon_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_anon_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_anon_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DH_anon_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_anon_WITH_SEED_CBC_SHA: + return KeyExchangeAlgorithm.DH_anon; + + case CipherSuite.TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_SEED_CBC_SHA: + return KeyExchangeAlgorithm.DH_DSS; + + case CipherSuite.TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_SEED_CBC_SHA: + return KeyExchangeAlgorithm.DH_RSA; + + case CipherSuite.TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_SEED_CBC_SHA: + return KeyExchangeAlgorithm.DHE_DSS; + + case CipherSuite.TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DHE_PSK_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DHE_PSK_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_AES_128_CCM: + case CipherSuite.TLS_DHE_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DHE_PSK_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_AES_256_CCM: + case CipherSuite.TLS_DHE_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_NULL_SHA: + case CipherSuite.TLS_DHE_PSK_WITH_NULL_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_NULL_SHA384: + case CipherSuite.TLS_PSK_DHE_WITH_AES_128_CCM_8: + case CipherSuite.TLS_PSK_DHE_WITH_AES_256_CCM_8: + return KeyExchangeAlgorithm.DHE_PSK; + + case CipherSuite.TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CCM: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CCM_8: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CCM: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CCM_8: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_SEED_CBC_SHA: + return KeyExchangeAlgorithm.DHE_RSA; + + case CipherSuite.TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDH_anon_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDH_anon_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDH_anon_WITH_NULL_SHA: + return KeyExchangeAlgorithm.ECDH_anon; + + case CipherSuite.TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_NULL_SHA: + return KeyExchangeAlgorithm.ECDH_ECDSA; + + case CipherSuite.TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_NULL_SHA: + return KeyExchangeAlgorithm.ECDH_RSA; + + case CipherSuite.TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CCM: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CCM: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_NULL_SHA: + return KeyExchangeAlgorithm.ECDHE_ECDSA; + + case CipherSuite.TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CCM_8_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CCM_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_NULL_SHA: + case CipherSuite.TLS_ECDHE_PSK_WITH_NULL_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_NULL_SHA384: + return KeyExchangeAlgorithm.ECDHE_PSK; + + case CipherSuite.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_NULL_SHA: + return KeyExchangeAlgorithm.ECDHE_RSA; + + case CipherSuite.TLS_AES_128_CCM_8_SHA256: + case CipherSuite.TLS_AES_128_CCM_SHA256: + case CipherSuite.TLS_AES_128_GCM_SHA256: + case CipherSuite.TLS_AES_256_GCM_SHA384: + case CipherSuite.TLS_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_SM4_CCM_SM3: + case CipherSuite.TLS_SM4_GCM_SM3: + return KeyExchangeAlgorithm.NULL; + + case CipherSuite.TLS_PSK_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_PSK_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_PSK_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_PSK_WITH_AES_128_CCM: + case CipherSuite.TLS_PSK_WITH_AES_128_CCM_8: + case CipherSuite.TLS_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_PSK_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_PSK_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_PSK_WITH_AES_256_CCM: + case CipherSuite.TLS_PSK_WITH_AES_256_CCM_8: + case CipherSuite.TLS_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_PSK_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_PSK_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_PSK_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_PSK_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_PSK_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_PSK_WITH_NULL_SHA: + case CipherSuite.TLS_PSK_WITH_NULL_SHA256: + case CipherSuite.TLS_PSK_WITH_NULL_SHA384: + return KeyExchangeAlgorithm.PSK; + + case CipherSuite.TLS_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_AES_128_CCM: + case CipherSuite.TLS_RSA_WITH_AES_128_CCM_8: + case CipherSuite.TLS_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_AES_256_CCM: + case CipherSuite.TLS_RSA_WITH_AES_256_CCM_8: + case CipherSuite.TLS_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_128_CBC_SHA: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_256_CBC_SHA: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_RSA_WITH_NULL_SHA: + case CipherSuite.TLS_RSA_WITH_NULL_SHA256: + case CipherSuite.TLS_RSA_WITH_SEED_CBC_SHA: + return KeyExchangeAlgorithm.RSA; + + case CipherSuite.TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_RSA_PSK_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_RSA_PSK_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_RSA_PSK_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_NULL_SHA: + case CipherSuite.TLS_RSA_PSK_WITH_NULL_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_NULL_SHA384: + return KeyExchangeAlgorithm.RSA_PSK; + + case CipherSuite.TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_WITH_AES_256_CBC_SHA: + return KeyExchangeAlgorithm.SRP; + + case CipherSuite.TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA: + return KeyExchangeAlgorithm.SRP_DSS; + + case CipherSuite.TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA: + return KeyExchangeAlgorithm.SRP_RSA; + + default: + return -1; + } + } + + public static IList GetKeyExchangeAlgorithms(int[] cipherSuites) + { + var result = new List(); + if (null != cipherSuites) + { + for (int i = 0; i < cipherSuites.Length; ++i) + { + AddToSet(result, GetKeyExchangeAlgorithm(cipherSuites[i])); + } + result.Remove(-1); + } + return result; + } + + public static int GetMacAlgorithm(int cipherSuite) + { + switch (cipherSuite) + { + case CipherSuite.TLS_AES_128_CCM_SHA256: + case CipherSuite.TLS_AES_128_CCM_8_SHA256: + case CipherSuite.TLS_AES_128_GCM_SHA256: + case CipherSuite.TLS_AES_256_GCM_SHA384: + case CipherSuite.TLS_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_DH_anon_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DH_anon_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DH_anon_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_anon_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_AES_128_CCM: + case CipherSuite.TLS_DHE_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_AES_256_CCM: + case CipherSuite.TLS_DHE_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CCM: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CCM_8: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CCM: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CCM_8: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CCM: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CCM: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CCM_8_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CCM_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_PSK_DHE_WITH_AES_128_CCM_8: + case CipherSuite.TLS_PSK_DHE_WITH_AES_256_CCM_8: + case CipherSuite.TLS_PSK_WITH_AES_128_CCM: + case CipherSuite.TLS_PSK_WITH_AES_128_CCM_8: + case CipherSuite.TLS_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_PSK_WITH_AES_256_CCM: + case CipherSuite.TLS_PSK_WITH_AES_256_CCM_8: + case CipherSuite.TLS_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_PSK_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_PSK_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_PSK_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_RSA_WITH_AES_128_CCM: + case CipherSuite.TLS_RSA_WITH_AES_128_CCM_8: + case CipherSuite.TLS_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_RSA_WITH_AES_256_CCM: + case CipherSuite.TLS_RSA_WITH_AES_256_CCM_8: + case CipherSuite.TLS_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_SM4_CCM_SM3: + case CipherSuite.TLS_SM4_GCM_SM3: + return MacAlgorithm.cls_null; + + case CipherSuite.TLS_DH_anon_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DH_anon_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DH_anon_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA: + case CipherSuite.TLS_DH_anon_WITH_SEED_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_SEED_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_SEED_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_SEED_CBC_SHA: + case CipherSuite.TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DHE_PSK_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DHE_PSK_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DHE_PSK_WITH_NULL_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_SEED_CBC_SHA: + case CipherSuite.TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDH_anon_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDH_anon_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDH_anon_WITH_NULL_SHA: + case CipherSuite.TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDH_ECDSA_WITH_NULL_SHA: + case CipherSuite.TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDH_RSA_WITH_NULL_SHA: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_NULL_SHA: + case CipherSuite.TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDHE_PSK_WITH_NULL_SHA: + case CipherSuite.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDHE_RSA_WITH_NULL_SHA: + case CipherSuite.TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_RSA_PSK_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_RSA_PSK_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_PSK_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_PSK_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_PSK_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_PSK_WITH_NULL_SHA: + case CipherSuite.TLS_RSA_PSK_WITH_NULL_SHA: + case CipherSuite.TLS_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_128_CBC_SHA: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_256_CBC_SHA: + case CipherSuite.TLS_RSA_WITH_NULL_SHA: + case CipherSuite.TLS_RSA_WITH_SEED_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_WITH_AES_256_CBC_SHA: + return MacAlgorithm.hmac_sha1; + + case CipherSuite.TLS_DH_anon_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DH_anon_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DH_anon_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_NULL_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_NULL_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_PSK_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_PSK_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_PSK_WITH_NULL_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_NULL_SHA256: + case CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_NULL_SHA256: + return MacAlgorithm.hmac_sha256; + + case CipherSuite.TLS_DH_anon_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_NULL_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_NULL_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_PSK_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_PSK_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_PSK_WITH_NULL_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_NULL_SHA384: + case CipherSuite.TLS_RSA_WITH_ARIA_256_CBC_SHA384: + return MacAlgorithm.hmac_sha384; + + default: + return -1; + } + } + + public static ProtocolVersion GetMinimumVersion(int cipherSuite) + { + switch (cipherSuite) + { + case CipherSuite.TLS_AES_128_CCM_SHA256: + case CipherSuite.TLS_AES_128_CCM_8_SHA256: + case CipherSuite.TLS_AES_128_GCM_SHA256: + case CipherSuite.TLS_AES_256_GCM_SHA384: + case CipherSuite.TLS_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_SM4_CCM_SM3: + case CipherSuite.TLS_SM4_GCM_SM3: + return ProtocolVersion.TLSv13; + + case CipherSuite.TLS_DH_anon_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DH_anon_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DH_anon_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DH_anon_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DH_anon_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_anon_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_anon_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DH_anon_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_AES_128_CCM: + case CipherSuite.TLS_DHE_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_AES_256_CCM: + case CipherSuite.TLS_DHE_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CCM: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CCM_8: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CCM: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CCM_8: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CCM: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CCM: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CCM_8_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CCM_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_PSK_DHE_WITH_AES_128_CCM_8: + case CipherSuite.TLS_PSK_DHE_WITH_AES_256_CCM_8: + case CipherSuite.TLS_PSK_WITH_AES_128_CCM: + case CipherSuite.TLS_PSK_WITH_AES_128_CCM_8: + case CipherSuite.TLS_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_PSK_WITH_AES_256_CCM: + case CipherSuite.TLS_PSK_WITH_AES_256_CCM_8: + case CipherSuite.TLS_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_PSK_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_PSK_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_PSK_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_PSK_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_PSK_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256: + case CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_AES_128_CCM: + case CipherSuite.TLS_RSA_WITH_AES_128_CCM_8: + case CipherSuite.TLS_RSA_WITH_AES_128_GCM_SHA256: + case CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_AES_256_CCM: + case CipherSuite.TLS_RSA_WITH_AES_256_CCM_8: + case CipherSuite.TLS_RSA_WITH_AES_256_GCM_SHA384: + case CipherSuite.TLS_RSA_WITH_ARIA_128_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_ARIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_WITH_ARIA_256_CBC_SHA384: + case CipherSuite.TLS_RSA_WITH_ARIA_256_GCM_SHA384: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256: + case CipherSuite.TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384: + case CipherSuite.TLS_RSA_WITH_NULL_SHA256: + return ProtocolVersion.TLSv12; + + default: + return ProtocolVersion.SSLv3; + } + } + + public static IList GetNamedGroupRoles(int[] cipherSuites) + { + return GetNamedGroupRoles(GetKeyExchangeAlgorithms(cipherSuites)); + } + + public static IList GetNamedGroupRoles(IList keyExchangeAlgorithms) + { + var result = new List(); + foreach (int keyExchangeAlgorithm in keyExchangeAlgorithms) + { + switch (keyExchangeAlgorithm) + { + case KeyExchangeAlgorithm.DH_anon: + case KeyExchangeAlgorithm.DH_DSS: + case KeyExchangeAlgorithm.DH_RSA: + case KeyExchangeAlgorithm.DHE_DSS: + case KeyExchangeAlgorithm.DHE_PSK: + case KeyExchangeAlgorithm.DHE_RSA: + { + AddToSet(result, NamedGroupRole.dh); + break; + } + + case KeyExchangeAlgorithm.ECDH_anon: + case KeyExchangeAlgorithm.ECDH_RSA: + case KeyExchangeAlgorithm.ECDHE_PSK: + case KeyExchangeAlgorithm.ECDHE_RSA: + { + AddToSet(result, NamedGroupRole.ecdh); + break; + } + + case KeyExchangeAlgorithm.ECDH_ECDSA: + case KeyExchangeAlgorithm.ECDHE_ECDSA: + { + AddToSet(result, NamedGroupRole.ecdh); + AddToSet(result, NamedGroupRole.ecdsa); + break; + } + + case KeyExchangeAlgorithm.NULL: + { + // TODO[tls13] We're conservatively adding both here, though maybe only one is needed + AddToSet(result, NamedGroupRole.dh); + AddToSet(result, NamedGroupRole.ecdh); + break; + } + } + } + return result; + } + + /// + public static bool IsAeadCipherSuite(int cipherSuite) + { + return CipherType.aead == GetCipherType(cipherSuite); + } + + /// + public static bool IsBlockCipherSuite(int cipherSuite) + { + return CipherType.block == GetCipherType(cipherSuite); + } + + /// + public static bool IsStreamCipherSuite(int cipherSuite) + { + return CipherType.stream == GetCipherType(cipherSuite); + } + + /// Whether a server can select the specified cipher suite given the available signature algorithms + /// for ServerKeyExchange. + public static bool IsValidCipherSuiteForSignatureAlgorithms(int cipherSuite, IList sigAlgs) + { + int keyExchangeAlgorithm = GetKeyExchangeAlgorithm(cipherSuite); + + switch (keyExchangeAlgorithm) + { + case KeyExchangeAlgorithm.DHE_DSS: + case KeyExchangeAlgorithm.DHE_RSA: + case KeyExchangeAlgorithm.ECDHE_ECDSA: + case KeyExchangeAlgorithm.ECDHE_RSA: + case KeyExchangeAlgorithm.NULL: + case KeyExchangeAlgorithm.SRP_RSA: + case KeyExchangeAlgorithm.SRP_DSS: + break; + + default: + return true; + } + + foreach (short signatureAlgorithm in sigAlgs) + { + if (IsValidSignatureAlgorithmForServerKeyExchange(signatureAlgorithm, keyExchangeAlgorithm)) + return true; + } + + return false; + } + + internal static bool IsValidCipherSuiteSelection(int[] offeredCipherSuites, int cipherSuite) + { + return null != offeredCipherSuites + && Arrays.Contains(offeredCipherSuites, cipherSuite) + && CipherSuite.TLS_NULL_WITH_NULL_NULL != cipherSuite + && !CipherSuite.IsScsv(cipherSuite); + } + + internal static bool IsValidKeyShareSelection(ProtocolVersion negotiatedVersion, int[] clientSupportedGroups, + IDictionary clientAgreements, int keyShareGroup) + { + return null != clientSupportedGroups + && Arrays.Contains(clientSupportedGroups, keyShareGroup) + && !clientAgreements.ContainsKey(keyShareGroup) + && NamedGroup.CanBeNegotiated(keyShareGroup, negotiatedVersion); + } + + internal static bool IsValidSignatureAlgorithmForServerKeyExchange(short signatureAlgorithm, + int keyExchangeAlgorithm) + { + // TODO[tls13] + + switch (keyExchangeAlgorithm) + { + case KeyExchangeAlgorithm.DHE_RSA: + case KeyExchangeAlgorithm.ECDHE_RSA: + case KeyExchangeAlgorithm.SRP_RSA: + switch (signatureAlgorithm) + { + case SignatureAlgorithm.rsa: + case SignatureAlgorithm.rsa_pss_rsae_sha256: + case SignatureAlgorithm.rsa_pss_rsae_sha384: + case SignatureAlgorithm.rsa_pss_rsae_sha512: + case SignatureAlgorithm.rsa_pss_pss_sha256: + case SignatureAlgorithm.rsa_pss_pss_sha384: + case SignatureAlgorithm.rsa_pss_pss_sha512: + return true; + default: + return false; + } + + case KeyExchangeAlgorithm.DHE_DSS: + case KeyExchangeAlgorithm.SRP_DSS: + return SignatureAlgorithm.dsa == signatureAlgorithm; + + case KeyExchangeAlgorithm.ECDHE_ECDSA: + switch (signatureAlgorithm) + { + case SignatureAlgorithm.ecdsa: + case SignatureAlgorithm.ed25519: + case SignatureAlgorithm.ed448: + return true; + default: + return false; + } + + case KeyExchangeAlgorithm.NULL: + return SignatureAlgorithm.anonymous != signatureAlgorithm; + + default: + return false; + } + } + + public static bool IsValidSignatureSchemeForServerKeyExchange(int signatureScheme, int keyExchangeAlgorithm) + { + short signatureAlgorithm = SignatureScheme.GetSignatureAlgorithm(signatureScheme); + + return IsValidSignatureAlgorithmForServerKeyExchange(signatureAlgorithm, keyExchangeAlgorithm); + } + + public static bool IsValidVersionForCipherSuite(int cipherSuite, ProtocolVersion version) + { + version = version.GetEquivalentTlsVersion(); + + ProtocolVersion minimumVersion = GetMinimumVersion(cipherSuite); + if (minimumVersion == version) + return true; + + if (!minimumVersion.IsEarlierVersionOf(version)) + return false; + + return ProtocolVersion.TLSv13.IsEqualOrEarlierVersionOf(minimumVersion) + || ProtocolVersion.TLSv13.IsLaterVersionOf(version); + } + + /// + public static SignatureAndHashAlgorithm ChooseSignatureAndHashAlgorithm(TlsContext context, + IList sigHashAlgs, short signatureAlgorithm) + { + return ChooseSignatureAndHashAlgorithm(context.ServerVersion, sigHashAlgs, signatureAlgorithm); + } + + /// + public static SignatureAndHashAlgorithm ChooseSignatureAndHashAlgorithm(ProtocolVersion negotiatedVersion, + IList sigHashAlgs, short signatureAlgorithm) + { + if (!IsTlsV12(negotiatedVersion)) + return null; + + if (sigHashAlgs == null) + { + /* + * TODO[tls13] RFC 8446 4.2.3 Clients which desire the server to authenticate itself via + * a certificate MUST send the "signature_algorithms" extension. + */ + + sigHashAlgs = GetDefaultSignatureAlgorithms(signatureAlgorithm); + } + + SignatureAndHashAlgorithm result = null; + foreach (SignatureAndHashAlgorithm sigHashAlg in sigHashAlgs) + { + if (sigHashAlg.Signature != signatureAlgorithm) + continue; + + short hash = sigHashAlg.Hash; + if (hash < MinimumHashStrict) + continue; + + if (result == null) + { + result = sigHashAlg; + continue; + } + + short current = result.Hash; + if (current < MinimumHashPreferred) + { + if (hash > current) + { + result = sigHashAlg; + } + } + else if (hash >= MinimumHashPreferred) + { + if (hash < current) + { + result = sigHashAlg; + } + } + } + if (result == null) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return result; + } + + public static IList GetUsableSignatureAlgorithms(IList sigHashAlgs) + { + if (sigHashAlgs == null) + return new List(){ SignatureAlgorithm.rsa, SignatureAlgorithm.dsa, SignatureAlgorithm.ecdsa }; + + var v = new List(); + foreach (SignatureAndHashAlgorithm sigHashAlg in sigHashAlgs) + { + if (sigHashAlg.Hash >= MinimumHashStrict) + { + short sigAlg = sigHashAlg.Signature; + if (!v.Contains(sigAlg)) + { + // TODO Check for crypto support before choosing (or pass in cached list?) + v.Add(sigAlg); + } + } + } + return v; + } + + public static int GetCommonCipherSuite13(ProtocolVersion negotiatedVersion, int[] peerCipherSuites, + int[] localCipherSuites, bool useLocalOrder) + { + int[] ordered = peerCipherSuites, unordered = localCipherSuites; + if (useLocalOrder) + { + ordered = localCipherSuites; + unordered = peerCipherSuites; + } + + for (int i = 0; i < ordered.Length; ++i) + { + int candidate = ordered[i]; + if (Arrays.Contains(unordered, candidate) && + IsValidVersionForCipherSuite(candidate, negotiatedVersion)) + { + return candidate; + } + } + + return -1; + } + + public static int[] GetCommonCipherSuites(int[] peerCipherSuites, int[] localCipherSuites, bool useLocalOrder) + { + int[] ordered = peerCipherSuites, unordered = localCipherSuites; + if (useLocalOrder) + { + ordered = localCipherSuites; + unordered = peerCipherSuites; + } + + int count = 0, limit = System.Math.Min(ordered.Length, unordered.Length); + int[] candidates = new int[limit]; + for (int i = 0; i < ordered.Length; ++i) + { + int candidate = ordered[i]; + if (!Contains(candidates, 0, count, candidate) + && Arrays.Contains(unordered, candidate)) + { + candidates[count++] = candidate; + } + } + + if (count < limit) + { + candidates = Arrays.CopyOf(candidates, count); + } + + return candidates; + } + + public static int[] GetSupportedCipherSuites(TlsCrypto crypto, int[] suites) + { + return GetSupportedCipherSuites(crypto, suites, 0, suites.Length); + } + + public static int[] GetSupportedCipherSuites(TlsCrypto crypto, int[] suites, int suitesOff, int suitesCount) + { + int[] supported = new int[suitesCount]; + int count = 0; + + for (int i = 0; i < suitesCount; ++i) + { + int suite = suites[suitesOff + i]; + if (IsSupportedCipherSuite(crypto, suite)) + { + supported[count++] = suite; + } + } + + if (count < suitesCount) + { + supported = Arrays.CopyOf(supported, count); + } + + return supported; + } + + public static bool IsSupportedCipherSuite(TlsCrypto crypto, int cipherSuite) + { + int keyExchangeAlgorithm = GetKeyExchangeAlgorithm(cipherSuite); + if (!IsSupportedKeyExchange(crypto, keyExchangeAlgorithm)) + return false; + + int encryptionAlgorithm = GetEncryptionAlgorithm(cipherSuite); + if (encryptionAlgorithm < 0 || !crypto.HasEncryptionAlgorithm(encryptionAlgorithm)) + return false; + + int macAlgorithm = GetMacAlgorithm(cipherSuite); + if (macAlgorithm != MacAlgorithm.cls_null) + { + if (macAlgorithm < 0 || !crypto.HasMacAlgorithm(macAlgorithm)) + return false; + } + + return true; + } + + public static bool IsSupportedKeyExchange(TlsCrypto crypto, int keyExchangeAlgorithm) + { + switch (keyExchangeAlgorithm) + { + case KeyExchangeAlgorithm.DH_anon: + case KeyExchangeAlgorithm.DH_DSS: + case KeyExchangeAlgorithm.DH_RSA: + case KeyExchangeAlgorithm.DHE_PSK: + return crypto.HasDHAgreement(); + + case KeyExchangeAlgorithm.DHE_DSS: + return crypto.HasDHAgreement() + && crypto.HasSignatureAlgorithm(SignatureAlgorithm.dsa); + + case KeyExchangeAlgorithm.DHE_RSA: + return crypto.HasDHAgreement() + && HasAnyRsaSigAlgs(crypto); + + case KeyExchangeAlgorithm.ECDH_anon: + case KeyExchangeAlgorithm.ECDH_ECDSA: + case KeyExchangeAlgorithm.ECDH_RSA: + case KeyExchangeAlgorithm.ECDHE_PSK: + return crypto.HasECDHAgreement(); + + case KeyExchangeAlgorithm.ECDHE_ECDSA: + return crypto.HasECDHAgreement() + && (crypto.HasSignatureAlgorithm(SignatureAlgorithm.ecdsa) + || crypto.HasSignatureAlgorithm(SignatureAlgorithm.ed25519) + || crypto.HasSignatureAlgorithm(SignatureAlgorithm.ed448)); + + case KeyExchangeAlgorithm.ECDHE_RSA: + return crypto.HasECDHAgreement() + && HasAnyRsaSigAlgs(crypto); + + case KeyExchangeAlgorithm.NULL: + case KeyExchangeAlgorithm.PSK: + return true; + + case KeyExchangeAlgorithm.RSA: + case KeyExchangeAlgorithm.RSA_PSK: + return crypto.HasRsaEncryption(); + + case KeyExchangeAlgorithm.SRP: + return crypto.HasSrpAuthentication(); + + case KeyExchangeAlgorithm.SRP_DSS: + return crypto.HasSrpAuthentication() + && crypto.HasSignatureAlgorithm(SignatureAlgorithm.dsa); + + case KeyExchangeAlgorithm.SRP_RSA: + return crypto.HasSrpAuthentication() + && HasAnyRsaSigAlgs(crypto); + + default: + return false; + } + } + + internal static bool HasAnyRsaSigAlgs(TlsCrypto crypto) + { + return crypto.HasSignatureAlgorithm(SignatureAlgorithm.rsa) + || crypto.HasSignatureAlgorithm(SignatureAlgorithm.rsa_pss_rsae_sha256) + || crypto.HasSignatureAlgorithm(SignatureAlgorithm.rsa_pss_rsae_sha384) + || crypto.HasSignatureAlgorithm(SignatureAlgorithm.rsa_pss_rsae_sha512) + || crypto.HasSignatureAlgorithm(SignatureAlgorithm.rsa_pss_pss_sha256) + || crypto.HasSignatureAlgorithm(SignatureAlgorithm.rsa_pss_pss_sha384) + || crypto.HasSignatureAlgorithm(SignatureAlgorithm.rsa_pss_pss_sha512); + } + + internal static byte[] GetCurrentPrfHash(TlsHandshakeHash handshakeHash) + { + return handshakeHash.ForkPrfHash().CalculateHash(); + } + + private static TlsHash CreateHash(TlsCrypto crypto, short hashAlgorithm) + { + return crypto.CreateHash(TlsCryptoUtilities.GetHash(hashAlgorithm)); + } + + private static TlsHash CreateHash(TlsCrypto crypto, SignatureAndHashAlgorithm signatureAndHashAlgorithm) + { + return crypto.CreateHash(SignatureScheme.GetCryptoHashAlgorithm(signatureAndHashAlgorithm)); + } + + /// + private static TlsKeyExchange CreateKeyExchangeClient(TlsClient client, int keyExchange) + { + TlsKeyExchangeFactory factory = client.GetKeyExchangeFactory(); + + switch (keyExchange) + { + case KeyExchangeAlgorithm.DH_anon: + return factory.CreateDHanonKeyExchangeClient(keyExchange, client.GetDHGroupVerifier()); + + case KeyExchangeAlgorithm.DH_DSS: + case KeyExchangeAlgorithm.DH_RSA: + return factory.CreateDHKeyExchange(keyExchange); + + case KeyExchangeAlgorithm.DHE_DSS: + case KeyExchangeAlgorithm.DHE_RSA: + return factory.CreateDheKeyExchangeClient(keyExchange, client.GetDHGroupVerifier()); + + case KeyExchangeAlgorithm.ECDH_anon: + return factory.CreateECDHanonKeyExchangeClient(keyExchange); + + case KeyExchangeAlgorithm.ECDH_ECDSA: + case KeyExchangeAlgorithm.ECDH_RSA: + return factory.CreateECDHKeyExchange(keyExchange); + + case KeyExchangeAlgorithm.ECDHE_ECDSA: + case KeyExchangeAlgorithm.ECDHE_RSA: + return factory.CreateECDheKeyExchangeClient(keyExchange); + + case KeyExchangeAlgorithm.RSA: + return factory.CreateRsaKeyExchange(keyExchange); + + case KeyExchangeAlgorithm.DHE_PSK: + return factory.CreatePskKeyExchangeClient(keyExchange, client.GetPskIdentity(), + client.GetDHGroupVerifier()); + + case KeyExchangeAlgorithm.ECDHE_PSK: + case KeyExchangeAlgorithm.PSK: + case KeyExchangeAlgorithm.RSA_PSK: + return factory.CreatePskKeyExchangeClient(keyExchange, client.GetPskIdentity(), null); + + case KeyExchangeAlgorithm.SRP: + case KeyExchangeAlgorithm.SRP_DSS: + case KeyExchangeAlgorithm.SRP_RSA: + return factory.CreateSrpKeyExchangeClient(keyExchange, client.GetSrpIdentity(), + client.GetSrpConfigVerifier()); + + default: + /* + * Note: internal error here; the TlsProtocol implementation verifies that the + * server-selected cipher suite was in the list of client-offered cipher suites, so if + * we now can't produce an implementation, we shouldn't have offered it! + */ + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + /// + private static TlsKeyExchange CreateKeyExchangeServer(TlsServer server, int keyExchange) + { + TlsKeyExchangeFactory factory = server.GetKeyExchangeFactory(); + + switch (keyExchange) + { + case KeyExchangeAlgorithm.DH_anon: + return factory.CreateDHanonKeyExchangeServer(keyExchange, server.GetDHConfig()); + + case KeyExchangeAlgorithm.DH_DSS: + case KeyExchangeAlgorithm.DH_RSA: + return factory.CreateDHKeyExchange(keyExchange); + + case KeyExchangeAlgorithm.DHE_DSS: + case KeyExchangeAlgorithm.DHE_RSA: + return factory.CreateDheKeyExchangeServer(keyExchange, server.GetDHConfig()); + + case KeyExchangeAlgorithm.ECDH_anon: + return factory.CreateECDHanonKeyExchangeServer(keyExchange, server.GetECDHConfig()); + + case KeyExchangeAlgorithm.ECDH_ECDSA: + case KeyExchangeAlgorithm.ECDH_RSA: + return factory.CreateECDHKeyExchange(keyExchange); + + case KeyExchangeAlgorithm.ECDHE_ECDSA: + case KeyExchangeAlgorithm.ECDHE_RSA: + return factory.CreateECDheKeyExchangeServer(keyExchange, server.GetECDHConfig()); + + case KeyExchangeAlgorithm.RSA: + return factory.CreateRsaKeyExchange(keyExchange); + + case KeyExchangeAlgorithm.DHE_PSK: + return factory.CreatePskKeyExchangeServer(keyExchange, server.GetPskIdentityManager(), + server.GetDHConfig(), null); + + case KeyExchangeAlgorithm.ECDHE_PSK: + return factory.CreatePskKeyExchangeServer(keyExchange, server.GetPskIdentityManager(), null, + server.GetECDHConfig()); + + case KeyExchangeAlgorithm.PSK: + case KeyExchangeAlgorithm.RSA_PSK: + return factory.CreatePskKeyExchangeServer(keyExchange, server.GetPskIdentityManager(), null, null); + + case KeyExchangeAlgorithm.SRP: + case KeyExchangeAlgorithm.SRP_DSS: + case KeyExchangeAlgorithm.SRP_RSA: + return factory.CreateSrpKeyExchangeServer(keyExchange, server.GetSrpLoginParameters()); + + default: + /* + * Note: internal error here; the TlsProtocol implementation verifies that the + * server-selected cipher suite was in the list of client-offered cipher suites, so if + * we now can't produce an implementation, we shouldn't have offered it! + */ + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + /// + internal static TlsKeyExchange InitKeyExchangeClient(TlsClientContext clientContext, TlsClient client) + { + SecurityParameters securityParameters = clientContext.SecurityParameters; + TlsKeyExchange keyExchange = CreateKeyExchangeClient(client, securityParameters.KeyExchangeAlgorithm); + keyExchange.Init(clientContext); + return keyExchange; + } + + /// + internal static TlsKeyExchange InitKeyExchangeServer(TlsServerContext serverContext, TlsServer server) + { + SecurityParameters securityParameters = serverContext.SecurityParameters; + TlsKeyExchange keyExchange = CreateKeyExchangeServer(server, securityParameters.KeyExchangeAlgorithm); + keyExchange.Init(serverContext); + return keyExchange; + } + + internal static TlsCipher InitCipher(TlsContext context) + { + SecurityParameters securityParameters = context.SecurityParameters; + int cipherSuite = securityParameters.CipherSuite; + int encryptionAlgorithm = GetEncryptionAlgorithm(cipherSuite); + int macAlgorithm = GetMacAlgorithm(cipherSuite); + + if (encryptionAlgorithm < 0 || macAlgorithm < 0) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return context.Crypto.CreateCipher(new TlsCryptoParameters(context), encryptionAlgorithm, macAlgorithm); + } + + /// Check the signature algorithm for certificates in the peer's CertPath as specified in RFC 5246 + /// 7.4.2, 7.4.4, 7.4.6 and similar rules for earlier TLS versions. + /// + /// The supplied CertPath should include the trust anchor (its signature algorithm isn't checked, but in the + /// general case checking a certificate requires the issuer certificate). + /// + /// if any certificate in the CertPath (excepting the trust anchor) has a + /// signature algorithm that is not one of the locally supported signature algorithms. + public static void CheckPeerSigAlgs(TlsContext context, TlsCertificate[] peerCertPath) + { + if (context.IsServer) + { + CheckSigAlgOfClientCerts(context, peerCertPath); + } + else + { + CheckSigAlgOfServerCerts(context, peerCertPath); + } + } + + private static void CheckSigAlgOfClientCerts(TlsContext context, TlsCertificate[] clientCertPath) + { + SecurityParameters securityParameters = context.SecurityParameters; + short[] clientCertTypes = securityParameters.ClientCertTypes; + var serverSigAlgsCert = securityParameters.ServerSigAlgsCert; + + int trustAnchorPos = clientCertPath.Length - 1; + for (int i = 0; i < trustAnchorPos; ++i) + { + TlsCertificate subjectCert = clientCertPath[i]; + TlsCertificate issuerCert = clientCertPath[i + 1]; + + SignatureAndHashAlgorithm sigAndHashAlg = GetCertSigAndHashAlg(subjectCert, issuerCert); + + bool valid = false; + if (null == sigAndHashAlg) + { + // We don't recognize the 'signatureAlgorithm' of the certificate + } + else if (null == serverSigAlgsCert) + { + // TODO Review this (legacy) logic with RFC 4346 (7.4?.2?) + if (null != clientCertTypes) + { + for (int j = 0; j < clientCertTypes.Length; ++j) + { + short signatureAlgorithm = GetLegacySignatureAlgorithmClientCert(clientCertTypes[j]); + if (sigAndHashAlg.Signature == signatureAlgorithm) + { + valid = true; + break; + } + } + } + } + else + { + /* + * RFC 5246 7.4.4 Any certificates provided by the client MUST be signed using a + * hash/signature algorithm pair found in supported_signature_algorithms. + */ + valid = ContainsSignatureAlgorithm(serverSigAlgsCert, sigAndHashAlg); + } + + if (!valid) + { + throw new TlsFatalAlert(AlertDescription.bad_certificate); + } + } + } + + private static void CheckSigAlgOfServerCerts(TlsContext context, TlsCertificate[] serverCertPath) + { + SecurityParameters securityParameters = context.SecurityParameters; + var clientSigAlgsCert = securityParameters.ClientSigAlgsCert; + var clientSigAlgs = securityParameters.ClientSigAlgs; + + /* + * NOTE: For TLS 1.2, we'll check 'signature_algorithms' too (if it's distinct), since + * there's no way of knowing whether the server understood 'signature_algorithms_cert'. + */ + if (clientSigAlgs == clientSigAlgsCert || IsTlsV13(securityParameters.NegotiatedVersion)) + { + clientSigAlgs = null; + } + + int trustAnchorPos = serverCertPath.Length - 1; + for (int i = 0; i < trustAnchorPos; ++i) + { + TlsCertificate subjectCert = serverCertPath[i]; + TlsCertificate issuerCert = serverCertPath[i + 1]; + + SignatureAndHashAlgorithm sigAndHashAlg = GetCertSigAndHashAlg(subjectCert, issuerCert); + + bool valid = false; + if (null == sigAndHashAlg) + { + // We don't recognize the 'signatureAlgorithm' of the certificate + } + else if (null == clientSigAlgsCert) + { + /* + * RFC 4346 7.4.2. Unless otherwise specified, the signing algorithm for the + * certificate MUST be the same as the algorithm for the certificate key. + */ + short signatureAlgorithm = GetLegacySignatureAlgorithmServerCert( + securityParameters.KeyExchangeAlgorithm); + + valid = (signatureAlgorithm == sigAndHashAlg.Signature); + } + else + { + /* + * RFC 5246 7.4.2. If the client provided a "signature_algorithms" extension, then + * all certificates provided by the server MUST be signed by a hash/signature algorithm + * pair that appears in that extension. + */ + valid = ContainsSignatureAlgorithm(clientSigAlgsCert, sigAndHashAlg) + || (null != clientSigAlgs && ContainsSignatureAlgorithm(clientSigAlgs, sigAndHashAlg)); + } + + if (!valid) + throw new TlsFatalAlert(AlertDescription.bad_certificate); + } + } + + internal static void CheckTlsFeatures(Certificate serverCertificate, IDictionary clientExtensions, + IDictionary serverExtensions) + { + /* + * RFC 7633 4.3.3. A client MUST treat a certificate with a TLS feature extension as an + * invalid certificate if the features offered by the server do not contain all features + * present in both the client's ClientHello message and the TLS feature extension. + */ + byte[] tlsFeatures = serverCertificate.GetCertificateAt(0).GetExtension(TlsObjectIdentifiers.id_pe_tlsfeature); + if (tlsFeatures != null) + { + // TODO[tls] Proper ASN.1 type class for this extension? + Asn1Sequence tlsFeaturesSeq = (Asn1Sequence)ReadAsn1Object(tlsFeatures); + for (int i = 0; i < tlsFeaturesSeq.Count; ++i) + { + if (!(tlsFeaturesSeq[i] is DerInteger)) + throw new TlsFatalAlert(AlertDescription.bad_certificate); + } + + RequireDerEncoding(tlsFeaturesSeq, tlsFeatures); + + foreach (DerInteger tlsExtensionElement in tlsFeaturesSeq) + { + BigInteger tlsExtension = tlsExtensionElement.PositiveValue; + if (tlsExtension.BitLength <= 16) + { + int extensionType = tlsExtension.IntValueExact; + + if (clientExtensions.ContainsKey(extensionType) && !serverExtensions.ContainsKey(extensionType)) + throw new TlsFatalAlert(AlertDescription.certificate_unknown); + } + } + } + } + + internal static void ProcessClientCertificate(TlsServerContext serverContext, Certificate clientCertificate, + TlsKeyExchange keyExchange, TlsServer server) + { + SecurityParameters securityParameters = serverContext.SecurityParameters; + if (null != securityParameters.PeerCertificate) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + bool isTlsV13 = IsTlsV13(securityParameters.NegotiatedVersion); + if (isTlsV13) + { + // 'keyExchange' not used + } + else if (clientCertificate.IsEmpty) + { + /* + * NOTE: We tolerate SSLv3 clients sending an empty chain, although "If no suitable + * certificate is available, the client should send a no_certificate alert instead". + */ + + keyExchange.SkipClientCredentials(); + } + else + { + keyExchange.ProcessClientCertificate(clientCertificate); + } + + securityParameters.m_peerCertificate = clientCertificate; + + /* + * RFC 5246 7.4.6. If the client does not send any certificates, the server MAY at its + * discretion either continue the handshake without client authentication, or respond with a + * fatal handshake_failure alert. Also, if some aspect of the certificate chain was + * unacceptable (e.g., it was not signed by a known, trusted CA), the server MAY at its + * discretion either continue the handshake (considering the client unauthenticated) or send + * a fatal alert. + */ + server.NotifyClientCertificate(clientCertificate); + } + + internal static void ProcessServerCertificate(TlsClientContext clientContext, + CertificateStatus serverCertificateStatus, TlsKeyExchange keyExchange, + TlsAuthentication clientAuthentication, IDictionary clientExtensions, + IDictionary serverExtensions) + { + SecurityParameters securityParameters = clientContext.SecurityParameters; + bool isTlsV13 = IsTlsV13(securityParameters.NegotiatedVersion); + + if (null == clientAuthentication) + { + if (isTlsV13) + throw new TlsFatalAlert(AlertDescription.internal_error); + + if (securityParameters.IsRenegotiating) + { + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + + // There was no server certificate message; check it's OK + keyExchange.SkipServerCredentials(); + securityParameters.m_tlsServerEndPoint = EmptyBytes; + return; + } + + Certificate serverCertificate = securityParameters.PeerCertificate; + + CheckTlsFeatures(serverCertificate, clientExtensions, serverExtensions); + + if (!isTlsV13) + { + keyExchange.ProcessServerCertificate(serverCertificate); + } + + clientAuthentication.NotifyServerCertificate( + new TlsServerCertificateImpl(serverCertificate, serverCertificateStatus)); + } + + internal static SignatureAndHashAlgorithm GetCertSigAndHashAlg(TlsCertificate subjectCert, TlsCertificate issuerCert) + { + string sigAlgOid = subjectCert.SigAlgOid; + + if (null != sigAlgOid) + { + if (!PkcsObjectIdentifiers.IdRsassaPss.Id.Equals(sigAlgOid)) + return CollectionUtilities.GetValueOrNull(CertSigAlgOids, sigAlgOid); + + RsassaPssParameters pssParams = RsassaPssParameters.GetInstance(subjectCert.GetSigAlgParams()); + if (null != pssParams) + { + DerObjectIdentifier hashOid = pssParams.HashAlgorithm.Algorithm; + if (NistObjectIdentifiers.IdSha256.Equals(hashOid)) + { + if (issuerCert.SupportsSignatureAlgorithmCA(SignatureAlgorithm.rsa_pss_pss_sha256)) + return SignatureAndHashAlgorithm.rsa_pss_pss_sha256; + + if (issuerCert.SupportsSignatureAlgorithmCA(SignatureAlgorithm.rsa_pss_rsae_sha256)) + return SignatureAndHashAlgorithm.rsa_pss_rsae_sha256; + } + else if (NistObjectIdentifiers.IdSha384.Equals(hashOid)) + { + if (issuerCert.SupportsSignatureAlgorithmCA(SignatureAlgorithm.rsa_pss_pss_sha384)) + return SignatureAndHashAlgorithm.rsa_pss_pss_sha384; + + if (issuerCert.SupportsSignatureAlgorithmCA(SignatureAlgorithm.rsa_pss_rsae_sha384)) + return SignatureAndHashAlgorithm.rsa_pss_rsae_sha384; + } + else if (NistObjectIdentifiers.IdSha512.Equals(hashOid)) + { + if (issuerCert.SupportsSignatureAlgorithmCA(SignatureAlgorithm.rsa_pss_pss_sha512)) + return SignatureAndHashAlgorithm.rsa_pss_pss_sha512; + + if (issuerCert.SupportsSignatureAlgorithmCA(SignatureAlgorithm.rsa_pss_rsae_sha512)) + return SignatureAndHashAlgorithm.rsa_pss_rsae_sha512; + } + } + } + + return null; + } + + internal static CertificateRequest ValidateCertificateRequest(CertificateRequest certificateRequest, + TlsKeyExchange keyExchange) + { + short[] validClientCertificateTypes = keyExchange.GetClientCertificateTypes(); + if (IsNullOrEmpty(validClientCertificateTypes)) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + certificateRequest = NormalizeCertificateRequest(certificateRequest, validClientCertificateTypes); + if (certificateRequest == null) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + return certificateRequest; + } + + internal static CertificateRequest NormalizeCertificateRequest(CertificateRequest certificateRequest, + short[] validClientCertificateTypes) + { + if (ContainsAll(validClientCertificateTypes, certificateRequest.CertificateTypes)) + return certificateRequest; + + short[] retained = RetainAll(certificateRequest.CertificateTypes, validClientCertificateTypes); + if (retained.Length < 1) + return null; + + // TODO Filter for unique sigAlgs/CAs only + return new CertificateRequest(retained, certificateRequest.SupportedSignatureAlgorithms, + certificateRequest.CertificateAuthorities); + } + + internal static bool Contains(int[] buf, int off, int len, int value) + { + for (int i = 0; i < len; ++i) + { + if (value == buf[off + i]) + return true; + } + return false; + } + + internal static bool ContainsAll(short[] container, short[] elements) + { + for (int i = 0; i < elements.Length; ++i) + { + if (!Arrays.Contains(container, elements[i])) + return false; + } + return true; + } + + internal static short[] RetainAll(short[] retainer, short[] elements) + { + short[] retained = new short[System.Math.Min(retainer.Length, elements.Length)]; + + int count = 0; + for (int i = 0; i < elements.Length; ++i) + { + if (Arrays.Contains(retainer, elements[i])) + { + retained[count++] = elements[i]; + } + } + + return Truncate(retained, count); + } + + internal static short[] Truncate(short[] a, int n) + { + if (n >= a.Length) + return a; + + short[] t = new short[n]; + Array.Copy(a, 0, t, 0, n); + return t; + } + + internal static int[] Truncate(int[] a, int n) + { + if (n >= a.Length) + return a; + + int[] t = new int[n]; + Array.Copy(a, 0, t, 0, n); + return t; + } + + /// + internal static TlsCredentialedAgreement RequireAgreementCredentials(TlsCredentials credentials) + { + if (!(credentials is TlsCredentialedAgreement)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return (TlsCredentialedAgreement)credentials; + } + + /// + internal static TlsCredentialedDecryptor RequireDecryptorCredentials(TlsCredentials credentials) + { + if (!(credentials is TlsCredentialedDecryptor)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return (TlsCredentialedDecryptor)credentials; + } + + /// + internal static TlsCredentialedSigner RequireSignerCredentials(TlsCredentials credentials) + { + if (!(credentials is TlsCredentialedSigner)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return (TlsCredentialedSigner)credentials; + } + + /// + private static void CheckClientCertificateType(CertificateRequest certificateRequest, + short clientCertificateType, short alertDescription) + { + if (clientCertificateType < 0 + || !Arrays.Contains(certificateRequest.CertificateTypes, clientCertificateType)) + { + throw new TlsFatalAlert(alertDescription); + } + } + + private static void CheckDowngradeMarker(byte[] randomBlock, byte[] downgradeMarker) + { + int len = downgradeMarker.Length; + if (ConstantTimeAreEqual(len, downgradeMarker, 0, randomBlock, randomBlock.Length - len)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + internal static void CheckDowngradeMarker(ProtocolVersion version, byte[] randomBlock) + { + version = version.GetEquivalentTlsVersion(); + + if (version.IsEqualOrEarlierVersionOf(ProtocolVersion.TLSv11)) + { + CheckDowngradeMarker(randomBlock, DowngradeTlsV11); + } + if (version.IsEqualOrEarlierVersionOf(ProtocolVersion.TLSv12)) + { + CheckDowngradeMarker(randomBlock, DowngradeTlsV12); + } + } + + internal static void WriteDowngradeMarker(ProtocolVersion version, byte[] randomBlock) + { + version = version.GetEquivalentTlsVersion(); + + byte[] marker; + if (ProtocolVersion.TLSv12 == version) + { + marker = DowngradeTlsV12; + } + else if (version.IsEqualOrEarlierVersionOf(ProtocolVersion.TLSv11)) + { + marker = DowngradeTlsV11; + } + else + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + Array.Copy(marker, 0, randomBlock, randomBlock.Length - marker.Length, marker.Length); + } + + private static bool areCertificatesEqual(Certificate a, Certificate b) + { + int length = a.Length; + if (b.Length == length) + { + try + { + for (int i = 0; i < length; ++i) + { + TlsCertificate ai = a.GetCertificateAt(i); + TlsCertificate bi = b.GetCertificateAt(i); + + if (!Arrays.AreEqual(ai.GetEncoded(), bi.GetEncoded())) + { + return false; + } + } + + return true; + } + catch (Exception e) + { + } + } + return false; + } + + private static bool isSafeRenegotiationServerCertificate(TlsClientContext clientContext, Certificate serverCertificate) + { + SecurityParameters securityParametersConnection = clientContext.SecurityParameters; + if (securityParametersConnection != null) + { + Certificate previousCertificate = securityParametersConnection.PreRenegotiatingServerCert; + if (null != previousCertificate) + { + return areCertificatesEqual(previousCertificate, serverCertificate); + } + } + + return false; + } + + internal static TlsAuthentication ReceiveServerCertificate(TlsClientContext clientContext, TlsClient client, + MemoryStream buf, IDictionary serverExtensions) + { + SecurityParameters securityParameters = clientContext.SecurityParameters; + if (KeyExchangeAlgorithm.IsAnonymous(securityParameters.KeyExchangeAlgorithm) + || null != securityParameters.PeerCertificate) + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + MemoryStream endPointHash = new MemoryStream(); + + Certificate.ParseOptions options = new Certificate.ParseOptions() + { + CertificateType = TlsExtensionsUtilities.GetServerCertificateTypeExtensionServer(serverExtensions, + CertificateType.X509), + MaxChainLength = client.GetMaxCertificateChainLength(), + }; + + Certificate serverCertificate = Certificate.Parse(options, clientContext, buf, endPointHash); + + TlsProtocol.AssertEmpty(buf); + + if (serverCertificate.IsEmpty) + throw new TlsFatalAlert(AlertDescription.decode_error); + + if (securityParameters.IsRenegotiating && !isSafeRenegotiationServerCertificate(clientContext, serverCertificate)) + { + throw new TlsFatalAlert(AlertDescription.certificate_unknown, "Server certificate changed unsafely in renegotiation handshake"); + } + + securityParameters.PreRenegotiatingServerCert = null; + securityParameters.m_peerCertificate = serverCertificate; + securityParameters.m_tlsServerEndPoint = endPointHash.ToArray(); + + TlsAuthentication authentication = client.GetAuthentication(); + if (null == authentication) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return authentication; + } + + internal static TlsAuthentication Receive13ServerCertificate(TlsClientContext clientContext, TlsClient client, + MemoryStream buf, IDictionary serverExtensions) + { + SecurityParameters securityParameters = clientContext.SecurityParameters; + if (null != securityParameters.PeerCertificate) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + Certificate.ParseOptions options = new Certificate.ParseOptions() + { + CertificateType = TlsExtensionsUtilities.GetServerCertificateTypeExtensionServer(serverExtensions, + CertificateType.X509), + MaxChainLength = client.GetMaxCertificateChainLength(), + }; + + Certificate serverCertificate = Certificate.Parse(options, clientContext, buf, null); + + TlsProtocol.AssertEmpty(buf); + + if (serverCertificate.GetCertificateRequestContext().Length > 0) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + if (serverCertificate.IsEmpty) + throw new TlsFatalAlert(AlertDescription.decode_error); + + securityParameters.m_peerCertificate = serverCertificate; + securityParameters.m_tlsServerEndPoint = null; + + TlsAuthentication authentication = client.GetAuthentication(); + if (null == authentication) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return authentication; + } + + internal static TlsAuthentication Skip13ServerCertificate(TlsClientContext clientContext) + { + SecurityParameters securityParameters = clientContext.SecurityParameters; + if (null != securityParameters.PeerCertificate) + throw new TlsFatalAlert(AlertDescription.internal_error); + + securityParameters.m_peerCertificate = null; + securityParameters.m_tlsServerEndPoint = null; + + return null; + } + + public static bool ContainsNonAscii(byte[] bs) + { + for (int i = 0; i < bs.Length; ++i) + { + int c = bs[i]; + if (c >= 0x80) + return true; + } + return false; + } + + public static bool ContainsNonAscii(string s) + { + for (int i = 0; i < s.Length; ++i) + { + int c = s[i]; + if (c >= 0x80) + return true; + } + return false; + } + + internal static IDictionary AddKeyShareToClientHello(TlsClientContext clientContext, + TlsClient client, IDictionary clientExtensions) + { + /* + * RFC 8446 9.2. If containing a "supported_groups" extension, it MUST also contain a + * "key_share" extension, and vice versa. An empty KeyShare.client_shares vector is + * permitted. + */ + if (!IsTlsV13(clientContext.ClientVersion) + || !clientExtensions.ContainsKey(ExtensionType.supported_groups)) + { + return null; + } + + var supportedGroups = TlsExtensionsUtilities.GetSupportedGroupsExtension(clientExtensions); + var keyShareGroups = client.GetEarlyKeyShareGroups(); + var clientAgreements = new Dictionary(3); + var clientShares = new List(2); + + CollectKeyShares(clientContext.Crypto, supportedGroups, keyShareGroups, clientAgreements, clientShares); + + // TODO[tls13-psk] When clientShares empty, consider not adding extension if pre_shared_key in use + TlsExtensionsUtilities.AddKeyShareClientHello(clientExtensions, clientShares); + + return clientAgreements; + } + + internal static IDictionary AddKeyShareToClientHelloRetry(TlsClientContext clientContext, + IDictionary clientExtensions, int keyShareGroup) + { + int[] supportedGroups = new int[]{ keyShareGroup }; + var keyShareGroups = VectorOfOne(keyShareGroup); + var clientAgreements = new Dictionary(1); + var clientShares = new List(1); + + CollectKeyShares(clientContext.Crypto, supportedGroups, keyShareGroups, clientAgreements, clientShares); + + TlsExtensionsUtilities.AddKeyShareClientHello(clientExtensions, clientShares); + + if (clientAgreements.Count < 1 || clientShares.Count < 1) + { + // NOTE: Probable cause is declaring an unsupported NamedGroup in supported_groups extension + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + return clientAgreements; + } + + private static void CollectKeyShares(TlsCrypto crypto, int[] supportedGroups, IList keyShareGroups, + IDictionary clientAgreements, IList clientShares) + { + if (IsNullOrEmpty(supportedGroups)) + return; + + if (null == keyShareGroups || keyShareGroups.Count < 1) + return; + + for (int i = 0; i < supportedGroups.Length; ++i) + { + int supportedGroup = supportedGroups[i]; + + if (!keyShareGroups.Contains(supportedGroup) + || clientAgreements.ContainsKey(supportedGroup) + || !crypto.HasNamedGroup(supportedGroup)) + { + continue; + } + + TlsAgreement agreement = null; + if (NamedGroup.RefersToASpecificCurve(supportedGroup)) + { + if (crypto.HasECDHAgreement()) + { + agreement = crypto.CreateECDomain(new TlsECConfig(supportedGroup)).CreateECDH(); + } + } + else if (NamedGroup.RefersToASpecificFiniteField(supportedGroup)) + { + if (crypto.HasDHAgreement()) + { + agreement = crypto.CreateDHDomain(new TlsDHConfig(supportedGroup, true)).CreateDH(); + } + } + + if (null != agreement) + { + byte[] key_exchange = agreement.GenerateEphemeral(); + KeyShareEntry clientShare = new KeyShareEntry(supportedGroup, key_exchange); + + clientShares.Add(clientShare); + clientAgreements[supportedGroup] = agreement; + } + } + } + + internal static KeyShareEntry SelectKeyShare(IList clientShares, int keyShareGroup) + { + if (null != clientShares && 1 == clientShares.Count) + { + KeyShareEntry clientShare = (KeyShareEntry)clientShares[0]; + if (null != clientShare && clientShare.NamedGroup == keyShareGroup) + { + return clientShare; + } + } + return null; + } + + internal static KeyShareEntry SelectKeyShare(TlsCrypto crypto, ProtocolVersion negotiatedVersion, + IList clientShares, int[] clientSupportedGroups, int[] serverSupportedGroups) + { + if (null != clientShares && !IsNullOrEmpty(clientSupportedGroups) && !IsNullOrEmpty(serverSupportedGroups)) + { + foreach (KeyShareEntry clientShare in clientShares) + { + int group = clientShare.NamedGroup; + + if (!NamedGroup.CanBeNegotiated(group, negotiatedVersion)) + continue; + + if (!Arrays.Contains(serverSupportedGroups, group) || + !Arrays.Contains(clientSupportedGroups, group)) + { + continue; + } + + if (!crypto.HasNamedGroup(group)) + continue; + + if ((NamedGroup.RefersToASpecificCurve(group) && !crypto.HasECDHAgreement()) || + (NamedGroup.RefersToASpecificFiniteField(group) && !crypto.HasDHAgreement())) + { + continue; + } + + return clientShare; + } + } + return null; + } + + internal static int SelectKeyShareGroup(TlsCrypto crypto, ProtocolVersion negotiatedVersion, + int[] clientSupportedGroups, int[] serverSupportedGroups) + { + if (!IsNullOrEmpty(clientSupportedGroups) && !IsNullOrEmpty(serverSupportedGroups)) + { + foreach (int group in clientSupportedGroups) + { + if (!NamedGroup.CanBeNegotiated(group, negotiatedVersion)) + continue; + + if (!Arrays.Contains(serverSupportedGroups, group)) + continue; + + if (!crypto.HasNamedGroup(group)) + continue; + + if ((NamedGroup.RefersToASpecificCurve(group) && !crypto.HasECDHAgreement()) || + (NamedGroup.RefersToASpecificFiniteField(group) && !crypto.HasDHAgreement())) + { + continue; + } + + return group; + } + } + return -1; + } + + internal static byte[] ReadEncryptedPms(TlsContext context, Stream input) + { + if (IsSsl(context)) + return Ssl3Utilities.ReadEncryptedPms(input); + + return ReadOpaque16(input); + } + + internal static void WriteEncryptedPms(TlsContext context, byte[] encryptedPms, Stream output) + { + if (IsSsl(context)) + { + Ssl3Utilities.WriteEncryptedPms(encryptedPms, output); + } + else + { + WriteOpaque16(encryptedPms, output); + } + } + + internal static byte[] GetSessionID(TlsSession tlsSession) + { + if (null != tlsSession) + { + byte[] sessionID = tlsSession.SessionID; + if (null != sessionID + && sessionID.Length > 0 + && sessionID.Length <= 32) + { + return sessionID; + } + } + return EmptyBytes; + } + + internal static void AdjustTranscriptForRetry(TlsHandshakeHash handshakeHash) + { + byte[] clientHelloHash = GetCurrentPrfHash(handshakeHash); + handshakeHash.Reset(); + + int length = clientHelloHash.Length; + CheckUint8(length); + + byte[] synthetic = new byte[4 + length]; + WriteUint8(HandshakeType.message_hash, synthetic, 0); + WriteUint24(length, synthetic, 1); + Array.Copy(clientHelloHash, 0, synthetic, 4, length); + + handshakeHash.Update(synthetic, 0, synthetic.Length); + } + + internal static TlsCredentials EstablishClientCredentials(TlsAuthentication clientAuthentication, + CertificateRequest certificateRequest) + { + return ValidateCredentials(clientAuthentication.GetClientCredentials(certificateRequest)); + } + + internal static TlsCredentialedSigner Establish13ClientCredentials(TlsAuthentication clientAuthentication, + CertificateRequest certificateRequest) + { + return Validate13Credentials(clientAuthentication.GetClientCredentials(certificateRequest)); + } + + internal static void EstablishClientSigAlgs(SecurityParameters securityParameters, + IDictionary clientExtensions) + { + securityParameters.m_clientSigAlgs = TlsExtensionsUtilities.GetSignatureAlgorithmsExtension( + clientExtensions); + securityParameters.m_clientSigAlgsCert = TlsExtensionsUtilities.GetSignatureAlgorithmsCertExtension( + clientExtensions); + } + + internal static TlsCredentials EstablishServerCredentials(TlsServer server) + { + return ValidateCredentials(server.GetCredentials()); + } + + internal static TlsCredentialedSigner Establish13ServerCredentials(TlsServer server) + { + return Validate13Credentials(server.GetCredentials()); + } + + internal static void EstablishServerSigAlgs(SecurityParameters securityParameters, + CertificateRequest certificateRequest) + { + securityParameters.m_clientCertTypes = certificateRequest.CertificateTypes; + securityParameters.m_serverSigAlgs = certificateRequest.SupportedSignatureAlgorithms; + securityParameters.m_serverSigAlgsCert = certificateRequest.SupportedSignatureAlgorithmsCert; + + if (null == securityParameters.ServerSigAlgsCert) + { + securityParameters.m_serverSigAlgsCert = securityParameters.ServerSigAlgs; + } + } + + internal static TlsCredentials ValidateCredentials(TlsCredentials credentials) + { + if (null != credentials) + { + int count = 0; + count += (credentials is TlsCredentialedAgreement) ? 1 : 0; + count += (credentials is TlsCredentialedDecryptor) ? 1 : 0; + count += (credentials is TlsCredentialedSigner) ? 1 : 0; + if (count != 1) + throw new TlsFatalAlert(AlertDescription.internal_error); + } + return credentials; + } + + internal static TlsCredentialedSigner Validate13Credentials(TlsCredentials credentials) + { + if (null == credentials) + return null; + + if (!(credentials is TlsCredentialedSigner)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return (TlsCredentialedSigner)credentials; + } + + internal static void NegotiatedCipherSuite(SecurityParameters securityParameters, int cipherSuite) + { + securityParameters.m_cipherSuite = cipherSuite; + securityParameters.m_keyExchangeAlgorithm = GetKeyExchangeAlgorithm(cipherSuite); + + int prfAlgorithm = GetPrfAlgorithm(securityParameters, cipherSuite); + securityParameters.m_prfAlgorithm = prfAlgorithm; + + switch (prfAlgorithm) + { + case PrfAlgorithm.ssl_prf_legacy: + case PrfAlgorithm.tls_prf_legacy: + { + securityParameters.m_prfCryptoHashAlgorithm = -1; + securityParameters.m_prfHashLength = -1; + break; + } + default: + { + int prfCryptoHashAlgorithm = TlsCryptoUtilities.GetHashForPrf(prfAlgorithm); + + securityParameters.m_prfCryptoHashAlgorithm = prfCryptoHashAlgorithm; + securityParameters.m_prfHashLength = TlsCryptoUtilities.GetHashOutputSize(prfCryptoHashAlgorithm); + break; + } + } + + /* + * TODO[tls13] We're slowly moving towards negotiating cipherSuite THEN version. We could + * move this to "after parameter negotiation" i.e. after ServerHello/EncryptedExtensions. + */ + ProtocolVersion negotiatedVersion = securityParameters.NegotiatedVersion; + if (IsTlsV13(negotiatedVersion)) + { + securityParameters.m_verifyDataLength = securityParameters.PrfHashLength; + } + else + { + securityParameters.m_verifyDataLength = negotiatedVersion.IsSsl ? 36 : 12; + } + } + + internal static void NegotiatedVersion(SecurityParameters securityParameters) + { + if (!IsSignatureAlgorithmsExtensionAllowed(securityParameters.NegotiatedVersion)) + { + securityParameters.m_clientSigAlgs = null; + securityParameters.m_clientSigAlgsCert = null; + return; + } + + if (null == securityParameters.ClientSigAlgs) + { + securityParameters.m_clientSigAlgs = GetLegacySupportedSignatureAlgorithms(); + } + + if (null == securityParameters.ClientSigAlgsCert) + { + securityParameters.m_clientSigAlgsCert = securityParameters.ClientSigAlgs; + } + } + + internal static void NegotiatedVersionDtlsClient(TlsClientContext clientContext, TlsClient client) + { + SecurityParameters securityParameters = clientContext.SecurityParameters; + ProtocolVersion negotiatedVersion = securityParameters.NegotiatedVersion; + + if (!ProtocolVersion.IsSupportedDtlsVersionClient(negotiatedVersion)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + NegotiatedVersion(securityParameters); + + client.NotifyServerVersion(negotiatedVersion); + } + + internal static void NegotiatedVersionDtlsServer(TlsServerContext serverContext) + { + SecurityParameters securityParameters = serverContext.SecurityParameters; + ProtocolVersion negotiatedVersion = securityParameters.NegotiatedVersion; + + if (!ProtocolVersion.IsSupportedDtlsVersionServer(negotiatedVersion)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + NegotiatedVersion(securityParameters); + } + + internal static void NegotiatedVersionTlsClient(TlsClientContext clientContext, TlsClient client) + { + SecurityParameters securityParameters = clientContext.SecurityParameters; + ProtocolVersion negotiatedVersion = securityParameters.NegotiatedVersion; + + if (!ProtocolVersion.IsSupportedTlsVersionClient(negotiatedVersion)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + NegotiatedVersion(securityParameters); + + client.NotifyServerVersion(negotiatedVersion); + } + + internal static void NegotiatedVersionTlsServer(TlsServerContext serverContext) + { + SecurityParameters securityParameters = serverContext.SecurityParameters; + ProtocolVersion negotiatedVersion = securityParameters.NegotiatedVersion; + + if (!ProtocolVersion.IsSupportedTlsVersionServer(negotiatedVersion)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + NegotiatedVersion(securityParameters); + } + + internal static TlsSecret DeriveSecret(SecurityParameters securityParameters, TlsSecret secret, string label, + byte[] transcriptHash) + { + int prfCryptoHashAlgorithm = securityParameters.PrfCryptoHashAlgorithm; + int prfHashLength = securityParameters.PrfHashLength; + + return DeriveSecret(prfCryptoHashAlgorithm, prfHashLength, secret, label, transcriptHash); + } + + internal static TlsSecret DeriveSecret(int prfCryptoHashAlgorithm, int prfHashLength, TlsSecret secret, + string label, byte[] transcriptHash) + { + if (transcriptHash.Length != prfHashLength) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return TlsCryptoUtilities.HkdfExpandLabel(secret, prfCryptoHashAlgorithm, label, transcriptHash, + prfHashLength); + } + + internal static TlsSecret GetSessionMasterSecret(TlsCrypto crypto, TlsSecret masterSecret) + { + if (null != masterSecret) + { + lock (masterSecret) + { + if (masterSecret.IsAlive()) + return crypto.AdoptSecret(masterSecret); + } + } + + return null; + } + + internal static bool IsPermittedExtensionType13(int handshakeType, int extensionType) + { + switch (extensionType) + { + case ExtensionType.server_name: + case ExtensionType.max_fragment_length: + case ExtensionType.supported_groups: + case ExtensionType.use_srtp: + case ExtensionType.heartbeat: + case ExtensionType.application_layer_protocol_negotiation: + case ExtensionType.client_certificate_type: + case ExtensionType.server_certificate_type: + { + switch (handshakeType) + { + case HandshakeType.client_hello: + case HandshakeType.encrypted_extensions: + return true; + default: + return false; + } + } + case ExtensionType.status_request: + case ExtensionType.signed_certificate_timestamp: + { + switch (handshakeType) + { + case HandshakeType.client_hello: + case HandshakeType.certificate_request: + case HandshakeType.certificate: + return true; + default: + return false; + } + } + case ExtensionType.signature_algorithms: + case ExtensionType.compress_certificate: + case ExtensionType.certificate_authorities: + case ExtensionType.signature_algorithms_cert: + { + switch (handshakeType) + { + case HandshakeType.client_hello: + case HandshakeType.certificate_request: + return true; + default: + return false; + } + } + case ExtensionType.padding: + case ExtensionType.psk_key_exchange_modes: + case ExtensionType.post_handshake_auth: + { + switch (handshakeType) + { + case HandshakeType.client_hello: + return true; + default: + return false; + } + } + case ExtensionType.key_share: + case ExtensionType.supported_versions: + { + switch (handshakeType) + { + case HandshakeType.client_hello: + case HandshakeType.server_hello: + case HandshakeType.hello_retry_request: + return true; + default: + return false; + } + } + case ExtensionType.pre_shared_key: + { + switch (handshakeType) + { + case HandshakeType.client_hello: + case HandshakeType.server_hello: + return true; + default: + return false; + } + } + case ExtensionType.early_data: + { + switch (handshakeType) + { + case HandshakeType.client_hello: + case HandshakeType.encrypted_extensions: + case HandshakeType.new_session_ticket: + return true; + default: + return false; + } + } + case ExtensionType.cookie: + { + switch (handshakeType) + { + case HandshakeType.client_hello: + case HandshakeType.hello_retry_request: + return true; + default: + return false; + } + } + case ExtensionType.oid_filters: + { + switch (handshakeType) + { + case HandshakeType.certificate_request: + return true; + default: + return false; + } + } + default: + { + return !ExtensionType.IsRecognized(extensionType); + } + } + } + + /// + internal static void CheckExtensionData13(IDictionary extensions, int handshakeType, + short alertDescription) + { + foreach (int extensionType in extensions.Keys) + { + if (!IsPermittedExtensionType13(handshakeType, extensionType)) + throw new TlsFatalAlert(alertDescription, "Invalid extension: " + + ExtensionType.GetText(extensionType)); + } + } + + /// Generate a pre_master_secret and send it encrypted to the server. + /// + public static TlsSecret GenerateEncryptedPreMasterSecret(TlsContext context, TlsEncryptor encryptor, + Stream output) + { + ProtocolVersion version = context.RsaPreMasterSecretVersion; + TlsSecret preMasterSecret = context.Crypto.GenerateRsaPreMasterSecret(version); + byte[] encryptedPreMasterSecret = preMasterSecret.Encrypt(encryptor); + WriteEncryptedPms(context, encryptedPreMasterSecret, output); + return preMasterSecret; + } + + public static bool IsTimeout(SocketException e) + { + return SocketError.TimedOut == e.SocketErrorCode; + } + + /// + internal static void AddPreSharedKeyToClientExtensions(TlsPsk[] psks, IDictionary clientExtensions) + { + var identities = new List(psks.Length); + for (int i = 0; i < psks.Length; ++i) + { + TlsPsk psk = psks[i]; + + // TODO[tls13-psk] Handle obfuscated_ticket_age for resumption PSKs + identities.Add(new PskIdentity(psk.Identity, 0L)); + } + + TlsExtensionsUtilities.AddPreSharedKeyClientHello(clientExtensions, new OfferedPsks(identities)); + } + + /// + internal static OfferedPsks.BindersConfig AddPreSharedKeyToClientHello(TlsClientContext clientContext, + TlsClient client, IDictionary clientExtensions, int[] offeredCipherSuites) + { + if (!IsTlsV13(clientContext.ClientVersion)) + return null; + + TlsPskExternal[] pskExternals = GetPskExternalsClient(client, offeredCipherSuites); + if (null == pskExternals) + return null; + + short[] pskKeyExchangeModes = client.GetPskKeyExchangeModes(); + if (IsNullOrEmpty(pskKeyExchangeModes)) + throw new TlsFatalAlert(AlertDescription.internal_error, + "External PSKs configured but no PskKeyExchangeMode available"); + + TlsSecret[] pskEarlySecrets = GetPskEarlySecrets(clientContext.Crypto, pskExternals); + + int bindersSize = OfferedPsks.GetBindersSize(pskExternals); + + AddPreSharedKeyToClientExtensions(pskExternals, clientExtensions); + TlsExtensionsUtilities.AddPskKeyExchangeModesExtension(clientExtensions, pskKeyExchangeModes); + + return new OfferedPsks.BindersConfig(pskExternals, pskKeyExchangeModes, pskEarlySecrets, bindersSize); + } + + /// + internal static OfferedPsks.BindersConfig AddPreSharedKeyToClientHelloRetry(TlsClientContext clientContext, + OfferedPsks.BindersConfig clientBinders, IDictionary clientExtensions) + { + SecurityParameters securityParameters = clientContext.SecurityParameters; + + int prfAlgorithm = GetPrfAlgorithm13(securityParameters.CipherSuite); + + var pskIndices = GetPskIndices(clientBinders.m_psks, prfAlgorithm); + if (pskIndices.Count < 1) + return null; + + OfferedPsks.BindersConfig result = clientBinders; + + int count = pskIndices.Count; + if (count < clientBinders.m_psks.Length) + { + TlsPsk[] psks = new TlsPsk[count]; + TlsSecret[] earlySecrets = new TlsSecret[count]; + + for (int i = 0; i < count; ++i) + { + int j = (int)pskIndices[i]; + + psks[i] = clientBinders.m_psks[j]; + earlySecrets[i] = clientBinders.m_earlySecrets[j]; + } + + int bindersSize = OfferedPsks.GetBindersSize(psks); + + result = new OfferedPsks.BindersConfig(psks, clientBinders.m_pskKeyExchangeModes, earlySecrets, + bindersSize); + } + + AddPreSharedKeyToClientExtensions(result.m_psks, clientExtensions); + // NOTE: psk_key_exchange_modes should already be in 'clientExtensions' from the ClientHello + + return result; + } + + internal static OfferedPsks.SelectedConfig SelectPreSharedKey(TlsServerContext serverContext, TlsServer server, + IDictionary clientHelloExtensions, HandshakeMessageInput clientHelloMessage, + TlsHandshakeHash handshakeHash, bool afterHelloRetryRequest) + { + bool handshakeHashUpdated = false; + + OfferedPsks offeredPsks = TlsExtensionsUtilities.GetPreSharedKeyClientHello(clientHelloExtensions); + if (null != offeredPsks) + { + short[] pskKeyExchangeModes = TlsExtensionsUtilities.GetPskKeyExchangeModesExtension( + clientHelloExtensions); + if (IsNullOrEmpty(pskKeyExchangeModes)) + throw new TlsFatalAlert(AlertDescription.missing_extension); + + // TODO[tls13] Add support for psk_ke? + if (Arrays.Contains(pskKeyExchangeModes, PskKeyExchangeMode.psk_dhe_ke)) + { + // TODO[tls13] Prefer to get the exact index from the server? + TlsPskExternal psk = server.GetExternalPsk(offeredPsks.Identities); + if (null != psk) + { + int index = offeredPsks.GetIndexOfIdentity(new PskIdentity(psk.Identity, 0L)); + if (index >= 0) + { + byte[] binder = (byte[])offeredPsks.Binders[index]; + + TlsCrypto crypto = serverContext.Crypto; + TlsSecret earlySecret = GetPskEarlySecret(crypto, psk); + + // TODO[tls13-psk] Handle resumption PSKs + bool isExternalPsk = true; + int pskCryptoHashAlgorithm = TlsCryptoUtilities.GetHashForPrf(psk.PrfAlgorithm); + + byte[] transcriptHash; + { + handshakeHashUpdated = true; + int bindersSize = offeredPsks.BindersSize; + clientHelloMessage.UpdateHashPrefix(handshakeHash, bindersSize); + + if (afterHelloRetryRequest) + { + transcriptHash = handshakeHash.GetFinalHash(pskCryptoHashAlgorithm); + } + else + { + TlsHash hash = crypto.CreateHash(pskCryptoHashAlgorithm); + handshakeHash.CopyBufferTo(new TlsHashSink(hash)); + transcriptHash = hash.CalculateHash(); + } + + clientHelloMessage.UpdateHashSuffix(handshakeHash, bindersSize); + } + + byte[] calculatedBinder = CalculatePskBinder(crypto, isExternalPsk, pskCryptoHashAlgorithm, + earlySecret, transcriptHash); + + if (Arrays.ConstantTimeAreEqual(calculatedBinder, binder)) + return new OfferedPsks.SelectedConfig(index, psk, pskKeyExchangeModes, earlySecret); + } + } + } + } + + if (!handshakeHashUpdated) + { + clientHelloMessage.UpdateHash(handshakeHash); + } + + return null; + } + + internal static TlsSecret GetPskEarlySecret(TlsCrypto crypto, TlsPsk psk) + { + int cryptoHashAlgorithm = TlsCryptoUtilities.GetHashForPrf(psk.PrfAlgorithm); + + return crypto + .HkdfInit(cryptoHashAlgorithm) + .HkdfExtract(cryptoHashAlgorithm, psk.Key); + } + + internal static TlsSecret[] GetPskEarlySecrets(TlsCrypto crypto, TlsPsk[] psks) + { + int count = psks.Length; + TlsSecret[] earlySecrets = new TlsSecret[count]; + for (int i = 0; i < count; ++i) + { + earlySecrets[i] = GetPskEarlySecret(crypto, psks[i]); + } + return earlySecrets; + } + + /// + internal static TlsPskExternal[] GetPskExternalsClient(TlsClient client, int[] offeredCipherSuites) + { + var externalPsks = client.GetExternalPsks(); + if (IsNullOrEmpty(externalPsks)) + return null; + + int[] prfAlgorithms = GetPrfAlgorithms13(offeredCipherSuites); + + int count = externalPsks.Count; + TlsPskExternal[] result = new TlsPskExternal[count]; + + for (int i = 0; i < count; ++i) + { + TlsPskExternal pskExternal = externalPsks[i] as TlsPskExternal; + if (null == pskExternal) + throw new TlsFatalAlert(AlertDescription.internal_error, + "External PSKs element is not a TlsPSKExternal"); + + if (!Arrays.Contains(prfAlgorithms, pskExternal.PrfAlgorithm)) + throw new TlsFatalAlert(AlertDescription.internal_error, + "External PSK incompatible with offered cipher suites"); + + result[i] = pskExternal; + } + + return result; + } + + internal static IList GetPskIndices(TlsPsk[] psks, int prfAlgorithm) + { + var v = new List(psks.Length); + for (int i = 0; i < psks.Length; ++i) + { + if (psks[i].PrfAlgorithm == prfAlgorithm) + { + v.Add(i); + } + } + return v; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsUtilities.cs.meta new file mode 100644 index 000000000..ed5ce1dc9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TlsUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a46327ac41f7a9e49b091fd299d0abe2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TrustedAuthority.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TrustedAuthority.cs new file mode 100644 index 000000000..4fdd0a47f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TrustedAuthority.cs @@ -0,0 +1,155 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + public sealed class TrustedAuthority + { + private readonly short m_identifierType; + private readonly object m_identifier; + + public TrustedAuthority(short identifierType, object identifier) + { + if (!IsCorrectType(identifierType, identifier)) + throw new ArgumentException("not an instance of the correct type", "identifier"); + + this.m_identifierType = identifierType; + this.m_identifier = identifier; + } + + public short IdentifierType + { + get { return m_identifierType; } + } + + public object Identifier + { + get { return m_identifier; } + } + + public byte[] GetCertSha1Hash() + { + return Arrays.Clone((byte[])m_identifier); + } + + public byte[] GetKeySha1Hash() + { + return Arrays.Clone((byte[])m_identifier); + } + + public X509Name X509Name + { + get + { + CheckCorrectType(Tls.IdentifierType.x509_name); + return (X509Name)m_identifier; + } + } + + /// Encode this to a . + /// the to encode to. + /// + public void Encode(Stream output) + { + TlsUtilities.WriteUint8(m_identifierType, output); + + switch (m_identifierType) + { + case Tls.IdentifierType.cert_sha1_hash: + case Tls.IdentifierType.key_sha1_hash: + { + byte[] sha1Hash = (byte[])m_identifier; + output.Write(sha1Hash, 0, sha1Hash.Length); + break; + } + case Tls.IdentifierType.pre_agreed: + { + break; + } + case Tls.IdentifierType.x509_name: + { + X509Name dn = (X509Name)m_identifier; + byte[] derEncoding = dn.GetEncoded(Asn1Encodable.Der); + TlsUtilities.WriteOpaque16(derEncoding, output); + break; + } + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + /// Parse a from a . + /// the to parse from. + /// a object. + /// + public static TrustedAuthority Parse(Stream input) + { + short identifier_type = TlsUtilities.ReadUint8(input); + object identifier; + + switch (identifier_type) + { + case Tls.IdentifierType.cert_sha1_hash: + case Tls.IdentifierType.key_sha1_hash: + { + identifier = TlsUtilities.ReadFully(20, input); + break; + } + case Tls.IdentifierType.pre_agreed: + { + identifier = null; + break; + } + case Tls.IdentifierType.x509_name: + { + byte[] derEncoding = TlsUtilities.ReadOpaque16(input, 1); + Asn1Object asn1 = TlsUtilities.ReadAsn1Object(derEncoding); + X509Name x509Name = X509Name.GetInstance(asn1); + TlsUtilities.RequireDerEncoding(x509Name, derEncoding); + identifier = x509Name; + break; + } + default: + throw new TlsFatalAlert(AlertDescription.decode_error); + } + + return new TrustedAuthority(identifier_type, identifier); + } + + private void CheckCorrectType(short expectedIdentifierType) + { + if (m_identifierType != expectedIdentifierType || !IsCorrectType(expectedIdentifierType, m_identifier)) + throw new InvalidOperationException("TrustedAuthority is not of type " + + Tls.IdentifierType.GetName(expectedIdentifierType)); + } + + private static bool IsCorrectType(short identifierType, object identifier) + { + switch (identifierType) + { + case Tls.IdentifierType.cert_sha1_hash: + case Tls.IdentifierType.key_sha1_hash: + return IsSha1Hash(identifier); + case Tls.IdentifierType.pre_agreed: + return identifier == null; + case Tls.IdentifierType.x509_name: + return identifier is X509Name; + default: + throw new ArgumentException("unsupported IdentifierType", "identifierType"); + } + } + + private static bool IsSha1Hash(object identifier) + { + return identifier is byte[] && ((byte[])identifier).Length == 20; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TrustedAuthority.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TrustedAuthority.cs.meta new file mode 100644 index 000000000..735d0cc74 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/TrustedAuthority.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3024269c3dff4274c88518d5ce719805 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/UrlAndHash.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/UrlAndHash.cs new file mode 100644 index 000000000..3937fdd0c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/UrlAndHash.cs @@ -0,0 +1,87 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 6066 5. + public sealed class UrlAndHash + { + private readonly string m_url; + private readonly byte[] m_sha1Hash; + + public UrlAndHash(string url, byte[] sha1Hash) + { + if (TlsUtilities.IsNullOrEmpty(url) || url.Length >= (1 << 16)) + throw new ArgumentException("must have length from 1 to (2^16 - 1)", "url"); + if (sha1Hash != null && sha1Hash.Length != 20) + throw new ArgumentException("must have length == 20, if present", "sha1Hash"); + + this.m_url = url; + this.m_sha1Hash = sha1Hash; + } + + public string Url + { + get { return m_url; } + } + + public byte[] Sha1Hash + { + get { return m_sha1Hash; } + } + + /// Encode this to a . + /// the to encode to. + /// + public void Encode(Stream output) + { + byte[] urlEncoding = Strings.ToByteArray(m_url); + TlsUtilities.WriteOpaque16(urlEncoding, output); + + if (m_sha1Hash == null) + { + TlsUtilities.WriteUint8(0, output); + } + else + { + TlsUtilities.WriteUint8(1, output); + output.Write(m_sha1Hash, 0, m_sha1Hash.Length); + } + } + + /// Parse a from a . + /// the of the current connection. + /// the to parse from. + /// a object. + /// + public static UrlAndHash Parse(TlsContext context, Stream input) + { + byte[] urlEncoding = TlsUtilities.ReadOpaque16(input, 1); + string url = Strings.FromByteArray(urlEncoding); + + byte[] sha1Hash = null; + short padding = TlsUtilities.ReadUint8(input); + switch (padding) + { + case 0: + if (TlsUtilities.IsTlsV12(context)) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + break; + case 1: + sha1Hash = TlsUtilities.ReadFully(20, input); + break; + default: + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + return new UrlAndHash(url, sha1Hash); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/UrlAndHash.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/UrlAndHash.cs.meta new file mode 100644 index 000000000..a3222fee5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/UrlAndHash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a11c8c018ccd2ed42887acae7fc601d6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/UseSrtpData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/UseSrtpData.cs new file mode 100644 index 000000000..dacb16146 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/UseSrtpData.cs @@ -0,0 +1,47 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 5764 4.1.1 + public sealed class UseSrtpData + { + private readonly int[] m_protectionProfiles; + private readonly byte[] m_mki; + + /// see for valid constants. + /// valid lengths from 0 to 255. + public UseSrtpData(int[] protectionProfiles, byte[] mki) + { + if (TlsUtilities.IsNullOrEmpty(protectionProfiles) || protectionProfiles.Length >= (1 << 15)) + throw new ArgumentException("must have length from 1 to (2^15 - 1)", "protectionProfiles"); + + if (mki == null) + { + mki = TlsUtilities.EmptyBytes; + } + else if (mki.Length > 255) + { + throw new ArgumentException("cannot be longer than 255 bytes", "mki"); + } + + this.m_protectionProfiles = protectionProfiles; + this.m_mki = mki; + } + + /// see for valid constants. + public int[] ProtectionProfiles + { + get { return m_protectionProfiles; } + } + + /// valid lengths from 0 to 255. + public byte[] Mki + { + get { return m_mki; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/UseSrtpData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/UseSrtpData.cs.meta new file mode 100644 index 000000000..285c67c90 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/UseSrtpData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c508cb1e4027d4944a798d62959f25ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/UserMappingType.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/UserMappingType.cs new file mode 100644 index 000000000..1057cb5cf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/UserMappingType.cs @@ -0,0 +1,17 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls +{ + /// RFC 4681 + public abstract class UserMappingType + { + /* + * RFC 4681 + */ + public const short upn_domain_hint = 64; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/UserMappingType.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/UserMappingType.cs.meta new file mode 100644 index 000000000..e8a7c7117 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/UserMappingType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 313d5a9bb59c6f0439a3d4495b173bdc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto.meta new file mode 100644 index 000000000..e715df9f6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8da87230921b5e34aac1d65882516062 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/CryptoHashAlgorithm.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/CryptoHashAlgorithm.cs new file mode 100644 index 000000000..e06067efd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/CryptoHashAlgorithm.cs @@ -0,0 +1,19 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + public abstract class CryptoHashAlgorithm + { + public const int md5 = 1; + public const int sha1 = 2; + public const int sha224 = 3; + public const int sha256 = 4; + public const int sha384 = 5; + public const int sha512 = 6; + public const int sm3 = 7; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/CryptoHashAlgorithm.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/CryptoHashAlgorithm.cs.meta new file mode 100644 index 000000000..e8eda8d2e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/CryptoHashAlgorithm.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 709e925d87eec4847b5c525aed21efe2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/CryptoSignatureAlgorithm.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/CryptoSignatureAlgorithm.cs new file mode 100644 index 000000000..ba3bd2a6d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/CryptoSignatureAlgorithm.cs @@ -0,0 +1,29 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + public abstract class CryptoSignatureAlgorithm + { + public const int rsa = 1; + public const int dsa = 2; + public const int ecdsa = 3; + public const int rsa_pss_rsae_sha256 = 4; + public const int rsa_pss_rsae_sha384 = 5; + public const int rsa_pss_rsae_sha512 = 6; + public const int ed25519 = 7; + public const int ed448 = 8; + public const int rsa_pss_pss_sha256 = 9; + public const int rsa_pss_pss_sha384 = 10; + public const int rsa_pss_pss_sha512 = 11; + public const int ecdsa_brainpoolP256r1tls13_sha256 = 26; + public const int ecdsa_brainpoolP384r1tls13_sha384 = 27; + public const int ecdsa_brainpoolP512r1tls13_sha512 = 28; + public const int gostr34102012_256 = 64; + public const int gostr34102012_512 = 65; + public const int sm2 = 200; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/CryptoSignatureAlgorithm.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/CryptoSignatureAlgorithm.cs.meta new file mode 100644 index 000000000..08494644f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/CryptoSignatureAlgorithm.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 41b1d55f85a98684b9c499d26ac1329b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/DHGroup.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/DHGroup.cs new file mode 100644 index 000000000..f80daf443 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/DHGroup.cs @@ -0,0 +1,50 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Carrier class for Diffie-Hellman group parameters. + public class DHGroup + { + private readonly BigInteger g, p, q; + private readonly int l; + + /// Base constructor with the prime factor of (p - 1). + /// the prime modulus. + /// specifies the prime factor of (p - 1). + /// the base generator. + /// + public DHGroup(BigInteger p, BigInteger q, BigInteger g, int l) + { + this.p = p; + this.g = g; + this.q = q; + this.l = l; + } + + public virtual BigInteger G + { + get { return g; } + } + + public virtual int L + { + get { return l; } + } + + public virtual BigInteger P + { + get { return p; } + } + + public virtual BigInteger Q + { + get { return q; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/DHGroup.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/DHGroup.cs.meta new file mode 100644 index 000000000..f48a7ba37 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/DHGroup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 125dd34a400298641ba356812f51e35b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/DHStandardGroups.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/DHStandardGroups.cs new file mode 100644 index 000000000..ac7e56d54 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/DHStandardGroups.cs @@ -0,0 +1,252 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Standard Diffie-Hellman groups from various IETF specifications. + public class DHStandardGroups + { + private static readonly BigInteger Two = BigInteger.Two; + + private static BigInteger FromHex(string hex) + { + return new BigInteger(1, Hex.DecodeStrict(hex)); + } + + //private static DHGroup FromPG(string hexP, string hexG) + //{ + // return new DHGroup(FromHex(hexP), null, FromHex(hexG), 0); + //} + + private static DHGroup SafePrimeGen2(string hexP) + { + return SafePrimeGen2(hexP, 0); + } + + private static DHGroup SafePrimeGen2(string hexP, int l) + { + // NOTE: A group using a safe prime (i.e. q = (p-1)/2), and generator g = 2 + BigInteger p = FromHex(hexP); + return new DHGroup(p, p.ShiftRight(1), Two, l); + } + + /* + * RFC 2409 + */ + private static readonly string rfc2409_768_p = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" + + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" + + "E485B576625E7EC6F44C42E9A63A3620FFFFFFFFFFFFFFFF"; + public static readonly DHGroup rfc2409_768 = SafePrimeGen2(rfc2409_768_p); + + private static readonly string rfc2409_1024_p = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" + + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" + + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381" + + "FFFFFFFFFFFFFFFF"; + public static readonly DHGroup rfc2409_1024 = SafePrimeGen2(rfc2409_1024_p); + + /* + * RFC 3526 + */ + private static readonly string rfc3526_1536_p = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" + + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" + + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" + + "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" + "83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF"; + private static readonly int rfc3526_1536_l = 200; // RFC3526/RFC7919 + public static readonly DHGroup rfc3526_1536 = SafePrimeGen2(rfc3526_1536_p, rfc3526_1536_l); + + private static readonly string rfc3526_2048_p = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" + + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" + + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" + + "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" + "83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" + "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" + + "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" + "15728E5A8AACAA68FFFFFFFFFFFFFFFF"; + private static readonly int rfc3526_2048_l = System.Math.Max(225, 112 * 2); // MAX(RFC3526/RFC7919,FIPS) + public static readonly DHGroup rfc3526_2048 = SafePrimeGen2(rfc3526_2048_p, rfc3526_2048_l); + + private static readonly string rfc3526_3072_p = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" + + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" + + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" + + "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" + "83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" + "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" + + "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" + "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" + + "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" + "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" + + "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" + + "43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF"; + private static readonly int rfc3526_3072_l = System.Math.Max(275, 128 * 2); // MAX(RFC3526/RFC7919,FIPS) + public static readonly DHGroup rfc3526_3072 = SafePrimeGen2(rfc3526_3072_p, rfc3526_3072_l); + + private static readonly string rfc3526_4096_p = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" + + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" + + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" + + "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" + "83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" + "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" + + "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" + "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" + + "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" + "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" + + "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" + + "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7" + "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA" + + "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6" + "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED" + + "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9" + "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199" + + "FFFFFFFFFFFFFFFF"; + private static readonly int rfc3526_4096_l = System.Math.Max(325, 152 * 2); // MAX(RFC3526/RFC7919,FIPS) + public static readonly DHGroup rfc3526_4096 = SafePrimeGen2(rfc3526_4096_p, rfc3526_4096_l); + + private static readonly string rfc3526_6144_p = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08" + + "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B" + + "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9" + + "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6" + + "49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8" + + "FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C" + + "180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718" + + "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D" + + "04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D" + + "B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226" + + "1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC" + + "E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26" + + "99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB" + + "04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2" + + "233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127" + + "D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492" + + "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406" + + "AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918" + + "DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B33205151" + + "2BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03" + + "F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97F" + + "BEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA" + + "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58B" + + "B7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632" + + "387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E" + + "6DCC4024FFFFFFFFFFFFFFFF"; + private static readonly int rfc3526_6144_l = System.Math.Max(375, 176 * 2); // MAX(RFC3526/RFC7919,FIPS) + public static readonly DHGroup rfc3526_6144 = SafePrimeGen2(rfc3526_6144_p, rfc3526_6144_l); + + private static readonly string rfc3526_8192_p = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" + + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" + + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" + + "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" + "83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" + "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" + + "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" + "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" + + "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" + "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" + + "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" + + "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7" + "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA" + + "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6" + "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED" + + "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9" + "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492" + + "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BD" + "F8FF9406AD9E530EE5DB382F413001AEB06A53ED9027D831" + + "179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1B" + "DB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF" + + "5983CA01C64B92ECF032EA15D1721D03F482D7CE6E74FEF6" + "D55E702F46980C82B5A84031900B1C9E59E7C97FBEC7E8F3" + + "23A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA" + "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE328" + + "06A1D58BB7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55C" + "DA56C9EC2EF29632387FE8D76E3C0468043E8F663F4860EE" + + "12BF2D5B0B7474D6E694F91E6DBE115974A3926F12FEE5E4" + "38777CB6A932DF8CD8BEC4D073B931BA3BC832B68D9DD300" + + "741FA7BF8AFC47ED2576F6936BA424663AAB639C5AE4F568" + "3423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD9" + + "22222E04A4037C0713EB57A81A23F0C73473FC646CEA306B" + "4BCBC8862F8385DDFA9D4B7FA2C087E879683303ED5BDD3A" + + "062B3CF5B3A278A66D2A13F83F44F82DDF310EE074AB6A36" + "4597E899A0255DC164F31CC50846851DF9AB48195DED7EA1" + + "B1D510BD7EE74D73FAF36BC31ECFA268359046F4EB879F92" + "4009438B481C6CD7889A002ED5EE382BC9190DA6FC026E47" + + "9558E4475677E9AA9E3050E2765694DFC81F56E880B96E71" + "60C980DD98EDD3DFFFFFFFFFFFFFFFFF"; + private static readonly int rfc3526_8192_l = System.Math.Max(400, 200 * 2); // MAX(RFC3526/RFC7919,FIPS) + public static readonly DHGroup rfc3526_8192 = SafePrimeGen2(rfc3526_8192_p, rfc3526_8192_l); + + /* + * RFC 4306 + */ + public static readonly DHGroup rfc4306_768 = rfc2409_768; + public static readonly DHGroup rfc4306_1024 = rfc2409_1024; + + /* + * RFC 5996 + */ + public static readonly DHGroup rfc5996_768 = rfc4306_768; + public static readonly DHGroup rfc5996_1024 = rfc4306_1024; + + /* + * RFC 7919 + */ + private static readonly string rfc7919_ffdhe2048_p = "FFFFFFFFFFFFFFFFADF85458A2BB4A9AAFDC5620273D3CF1" + + "D8B9C583CE2D3695A9E13641146433FBCC939DCE249B3EF9" + "7D2FE363630C75D8F681B202AEC4617AD3DF1ED5D5FD6561" + + "2433F51F5F066ED0856365553DED1AF3B557135E7F57C935" + "984F0C70E0E68B77E2A689DAF3EFE8721DF158A136ADE735" + + "30ACCA4F483A797ABC0AB182B324FB61D108A94BB2C8E3FB" + "B96ADAB760D7F4681D4F42A3DE394DF4AE56EDE76372BB19" + + "0B07A7C8EE0A6D709E02FCE1CDF7E2ECC03404CD28342F61" + "9172FE9CE98583FF8E4F1232EEF28183C3FE3B1B4C6FAD73" + + "3BB5FCBC2EC22005C58EF1837D1683B2C6F34A26C1B2EFFA" + "886B423861285C97FFFFFFFFFFFFFFFF"; + private static readonly int rfc7919_ffdhe2048_l = System.Math.Max(225, 112 * 2); // MAX(RFC7919,FIPS) + public static readonly DHGroup rfc7919_ffdhe2048 = SafePrimeGen2(rfc7919_ffdhe2048_p, rfc7919_ffdhe2048_l); + + private static readonly string rfc7919_ffdhe3072_p = "FFFFFFFFFFFFFFFFADF85458A2BB4A9AAFDC5620273D3CF1" + + "D8B9C583CE2D3695A9E13641146433FBCC939DCE249B3EF9" + "7D2FE363630C75D8F681B202AEC4617AD3DF1ED5D5FD6561" + + "2433F51F5F066ED0856365553DED1AF3B557135E7F57C935" + "984F0C70E0E68B77E2A689DAF3EFE8721DF158A136ADE735" + + "30ACCA4F483A797ABC0AB182B324FB61D108A94BB2C8E3FB" + "B96ADAB760D7F4681D4F42A3DE394DF4AE56EDE76372BB19" + + "0B07A7C8EE0A6D709E02FCE1CDF7E2ECC03404CD28342F61" + "9172FE9CE98583FF8E4F1232EEF28183C3FE3B1B4C6FAD73" + + "3BB5FCBC2EC22005C58EF1837D1683B2C6F34A26C1B2EFFA" + "886B4238611FCFDCDE355B3B6519035BBC34F4DEF99C0238" + + "61B46FC9D6E6C9077AD91D2691F7F7EE598CB0FAC186D91C" + "AEFE130985139270B4130C93BC437944F4FD4452E2D74DD3" + + "64F2E21E71F54BFF5CAE82AB9C9DF69EE86D2BC522363A0D" + "ABC521979B0DEADA1DBF9A42D5C4484E0ABCD06BFA53DDEF" + + "3C1B20EE3FD59D7C25E41D2B66C62E37FFFFFFFFFFFFFFFF"; + private static readonly int rfc7919_ffdhe3072_l = System.Math.Max(275, 128 * 2); // MAX(RFC7919,FIPS) + public static readonly DHGroup rfc7919_ffdhe3072 = SafePrimeGen2(rfc7919_ffdhe3072_p, rfc7919_ffdhe3072_l); + + private static readonly string rfc7919_ffdhe4096_p = "FFFFFFFFFFFFFFFFADF85458A2BB4A9AAFDC5620273D3CF1" + + "D8B9C583CE2D3695A9E13641146433FBCC939DCE249B3EF9" + "7D2FE363630C75D8F681B202AEC4617AD3DF1ED5D5FD6561" + + "2433F51F5F066ED0856365553DED1AF3B557135E7F57C935" + "984F0C70E0E68B77E2A689DAF3EFE8721DF158A136ADE735" + + "30ACCA4F483A797ABC0AB182B324FB61D108A94BB2C8E3FB" + "B96ADAB760D7F4681D4F42A3DE394DF4AE56EDE76372BB19" + + "0B07A7C8EE0A6D709E02FCE1CDF7E2ECC03404CD28342F61" + "9172FE9CE98583FF8E4F1232EEF28183C3FE3B1B4C6FAD73" + + "3BB5FCBC2EC22005C58EF1837D1683B2C6F34A26C1B2EFFA" + "886B4238611FCFDCDE355B3B6519035BBC34F4DEF99C0238" + + "61B46FC9D6E6C9077AD91D2691F7F7EE598CB0FAC186D91C" + "AEFE130985139270B4130C93BC437944F4FD4452E2D74DD3" + + "64F2E21E71F54BFF5CAE82AB9C9DF69EE86D2BC522363A0D" + "ABC521979B0DEADA1DBF9A42D5C4484E0ABCD06BFA53DDEF" + + "3C1B20EE3FD59D7C25E41D2B669E1EF16E6F52C3164DF4FB" + "7930E9E4E58857B6AC7D5F42D69F6D187763CF1D55034004" + + "87F55BA57E31CC7A7135C886EFB4318AED6A1E012D9E6832" + "A907600A918130C46DC778F971AD0038092999A333CB8B7A" + + "1A1DB93D7140003C2A4ECEA9F98D0ACC0A8291CDCEC97DCF" + "8EC9B55A7F88A46B4DB5A851F44182E1C68A007E5E655F6A" + + "FFFFFFFFFFFFFFFF"; + private static readonly int rfc7919_ffdhe4096_l = System.Math.Max(325, 152 * 2); // MAX(RFC7919,FIPS) + public static readonly DHGroup rfc7919_ffdhe4096 = SafePrimeGen2(rfc7919_ffdhe4096_p, rfc7919_ffdhe4096_l); + + private static readonly string rfc7919_ffdhe6144_p = "FFFFFFFFFFFFFFFFADF85458A2BB4A9AAFDC5620273D3CF1" + + "D8B9C583CE2D3695A9E13641146433FBCC939DCE249B3EF9" + "7D2FE363630C75D8F681B202AEC4617AD3DF1ED5D5FD6561" + + "2433F51F5F066ED0856365553DED1AF3B557135E7F57C935" + "984F0C70E0E68B77E2A689DAF3EFE8721DF158A136ADE735" + + "30ACCA4F483A797ABC0AB182B324FB61D108A94BB2C8E3FB" + "B96ADAB760D7F4681D4F42A3DE394DF4AE56EDE76372BB19" + + "0B07A7C8EE0A6D709E02FCE1CDF7E2ECC03404CD28342F61" + "9172FE9CE98583FF8E4F1232EEF28183C3FE3B1B4C6FAD73" + + "3BB5FCBC2EC22005C58EF1837D1683B2C6F34A26C1B2EFFA" + "886B4238611FCFDCDE355B3B6519035BBC34F4DEF99C0238" + + "61B46FC9D6E6C9077AD91D2691F7F7EE598CB0FAC186D91C" + "AEFE130985139270B4130C93BC437944F4FD4452E2D74DD3" + + "64F2E21E71F54BFF5CAE82AB9C9DF69EE86D2BC522363A0D" + "ABC521979B0DEADA1DBF9A42D5C4484E0ABCD06BFA53DDEF" + + "3C1B20EE3FD59D7C25E41D2B669E1EF16E6F52C3164DF4FB" + "7930E9E4E58857B6AC7D5F42D69F6D187763CF1D55034004" + + "87F55BA57E31CC7A7135C886EFB4318AED6A1E012D9E6832" + "A907600A918130C46DC778F971AD0038092999A333CB8B7A" + + "1A1DB93D7140003C2A4ECEA9F98D0ACC0A8291CDCEC97DCF" + "8EC9B55A7F88A46B4DB5A851F44182E1C68A007E5E0DD902" + + "0BFD64B645036C7A4E677D2C38532A3A23BA4442CAF53EA6" + "3BB454329B7624C8917BDD64B1C0FD4CB38E8C334C701C3A" + + "CDAD0657FCCFEC719B1F5C3E4E46041F388147FB4CFDB477" + "A52471F7A9A96910B855322EDB6340D8A00EF092350511E3" + + "0ABEC1FFF9E3A26E7FB29F8C183023C3587E38DA0077D9B4" + "763E4E4B94B2BBC194C6651E77CAF992EEAAC0232A281BF6" + + "B3A739C1226116820AE8DB5847A67CBEF9C9091B462D538C" + "D72B03746AE77F5E62292C311562A846505DC82DB854338A" + + "E49F5235C95B91178CCF2DD5CACEF403EC9D1810C6272B04" + "5B3B71F9DC6B80D63FDD4A8E9ADB1E6962A69526D43161C1" + + "A41D570D7938DAD4A40E329CD0E40E65FFFFFFFFFFFFFFFF"; + private static readonly int rfc7919_ffdhe6144_l = System.Math.Max(375, 176 * 2); // MAX(RFC7919,FIPS) + public static readonly DHGroup rfc7919_ffdhe6144 = SafePrimeGen2(rfc7919_ffdhe6144_p, rfc7919_ffdhe6144_l); + + private static readonly string rfc7919_ffdhe8192_p = "FFFFFFFFFFFFFFFFADF85458A2BB4A9AAFDC5620273D3CF1" + + "D8B9C583CE2D3695A9E13641146433FBCC939DCE249B3EF9" + "7D2FE363630C75D8F681B202AEC4617AD3DF1ED5D5FD6561" + + "2433F51F5F066ED0856365553DED1AF3B557135E7F57C935" + "984F0C70E0E68B77E2A689DAF3EFE8721DF158A136ADE735" + + "30ACCA4F483A797ABC0AB182B324FB61D108A94BB2C8E3FB" + "B96ADAB760D7F4681D4F42A3DE394DF4AE56EDE76372BB19" + + "0B07A7C8EE0A6D709E02FCE1CDF7E2ECC03404CD28342F61" + "9172FE9CE98583FF8E4F1232EEF28183C3FE3B1B4C6FAD73" + + "3BB5FCBC2EC22005C58EF1837D1683B2C6F34A26C1B2EFFA" + "886B4238611FCFDCDE355B3B6519035BBC34F4DEF99C0238" + + "61B46FC9D6E6C9077AD91D2691F7F7EE598CB0FAC186D91C" + "AEFE130985139270B4130C93BC437944F4FD4452E2D74DD3" + + "64F2E21E71F54BFF5CAE82AB9C9DF69EE86D2BC522363A0D" + "ABC521979B0DEADA1DBF9A42D5C4484E0ABCD06BFA53DDEF" + + "3C1B20EE3FD59D7C25E41D2B669E1EF16E6F52C3164DF4FB" + "7930E9E4E58857B6AC7D5F42D69F6D187763CF1D55034004" + + "87F55BA57E31CC7A7135C886EFB4318AED6A1E012D9E6832" + "A907600A918130C46DC778F971AD0038092999A333CB8B7A" + + "1A1DB93D7140003C2A4ECEA9F98D0ACC0A8291CDCEC97DCF" + "8EC9B55A7F88A46B4DB5A851F44182E1C68A007E5E0DD902" + + "0BFD64B645036C7A4E677D2C38532A3A23BA4442CAF53EA6" + "3BB454329B7624C8917BDD64B1C0FD4CB38E8C334C701C3A" + + "CDAD0657FCCFEC719B1F5C3E4E46041F388147FB4CFDB477" + "A52471F7A9A96910B855322EDB6340D8A00EF092350511E3" + + "0ABEC1FFF9E3A26E7FB29F8C183023C3587E38DA0077D9B4" + "763E4E4B94B2BBC194C6651E77CAF992EEAAC0232A281BF6" + + "B3A739C1226116820AE8DB5847A67CBEF9C9091B462D538C" + "D72B03746AE77F5E62292C311562A846505DC82DB854338A" + + "E49F5235C95B91178CCF2DD5CACEF403EC9D1810C6272B04" + "5B3B71F9DC6B80D63FDD4A8E9ADB1E6962A69526D43161C1" + + "A41D570D7938DAD4A40E329CCFF46AAA36AD004CF600C838" + "1E425A31D951AE64FDB23FCEC9509D43687FEB69EDD1CC5E" + + "0B8CC3BDF64B10EF86B63142A3AB8829555B2F747C932665" + "CB2C0F1CC01BD70229388839D2AF05E454504AC78B758282" + + "2846C0BA35C35F5C59160CC046FD8251541FC68C9C86B022" + "BB7099876A460E7451A8A93109703FEE1C217E6C3826E52C" + + "51AA691E0E423CFC99E9E31650C1217B624816CDAD9A95F9" + "D5B8019488D9C0A0A1FE3075A577E23183F81D4A3F2FA457" + + "1EFC8CE0BA8A4FE8B6855DFE72B0A66EDED2FBABFBE58A30" + "FAFABE1C5D71A87E2F741EF8C1FE86FEA6BBFDE530677F0D" + + "97D11D49F7A8443D0822E506A9F4614E011E2A94838FF88C" + "D68C8BB7C5C6424CFFFFFFFFFFFFFFFF"; + private static readonly int rfc7919_ffdhe8192_l = System.Math.Max(400, 200 * 2); // MAX(RFC7919,FIPS) + public static readonly DHGroup rfc7919_ffdhe8192 = SafePrimeGen2(rfc7919_ffdhe8192_p, rfc7919_ffdhe8192_l); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/DHStandardGroups.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/DHStandardGroups.cs.meta new file mode 100644 index 000000000..4b29875eb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/DHStandardGroups.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 22595526a1c23d443a2b7effae0b3799 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/Srp6Group.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/Srp6Group.cs new file mode 100644 index 000000000..3be0de30f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/Srp6Group.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Carrier class for SRP-6 group parameters. + public class Srp6Group + { + private readonly BigInteger n, g; + + /// Base constructor. + /// the n value. + /// the g value. + public Srp6Group(BigInteger n, BigInteger g) + { + this.n = n; + this.g = g; + } + + public virtual BigInteger G + { + get { return g; } + } + + public virtual BigInteger N + { + get { return n; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/Srp6Group.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/Srp6Group.cs.meta new file mode 100644 index 000000000..9b316b461 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/Srp6Group.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6f0c70e03745eb141aa0c615b1638409 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/Srp6StandardGroups.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/Srp6StandardGroups.cs new file mode 100644 index 000000000..3137cf243 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/Srp6StandardGroups.cs @@ -0,0 +1,163 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// A selection of standard groups for SRP-6. + public class Srp6StandardGroups + { + private static BigInteger FromHex(string hex) + { + return new BigInteger(1, Hex.DecodeStrict(hex)); + } + + private static Srp6Group FromNG(string hexN, string hexG) + { + return new Srp6Group(FromHex(hexN), FromHex(hexG)); + } + + /* + * RFC 5054 + */ + private static readonly string rfc5054_1024_N = "EEAF0AB9ADB38DD69C33F80AFA8FC5E86072618775FF3C0B9EA2314C" + + "9C256576D674DF7496EA81D3383B4813D692C6E0E0D5D8E250B98BE4" + + "8E495C1D6089DAD15DC7D7B46154D6B6CE8EF4AD69B15D4982559B29" + + "7BCF1885C529F566660E57EC68EDBC3C05726CC02FD4CBF4976EAA9A" + "FD5138FE8376435B9FC61D2FC0EB06E3"; + private static readonly string rfc5054_1024_g = "02"; + public static readonly Srp6Group rfc5054_1024 = FromNG(rfc5054_1024_N, rfc5054_1024_g); + + private static readonly string rfc5054_1536_N = "9DEF3CAFB939277AB1F12A8617A47BBBDBA51DF499AC4C80BEEEA961" + + "4B19CC4D5F4F5F556E27CBDE51C6A94BE4607A291558903BA0D0F843" + + "80B655BB9A22E8DCDF028A7CEC67F0D08134B1C8B97989149B609E0B" + + "E3BAB63D47548381DBC5B1FC764E3F4B53DD9DA1158BFD3E2B9C8CF5" + + "6EDF019539349627DB2FD53D24B7C48665772E437D6C7F8CE442734A" + + "F7CCB7AE837C264AE3A9BEB87F8A2FE9B8B5292E5A021FFF5E91479E" + + "8CE7A28C2442C6F315180F93499A234DCF76E3FED135F9BB"; + private static readonly string rfc5054_1536_g = "02"; + public static readonly Srp6Group rfc5054_1536 = FromNG(rfc5054_1536_N, rfc5054_1536_g); + + private static readonly string rfc5054_2048_N = "AC6BDB41324A9A9BF166DE5E1389582FAF72B6651987EE07FC319294" + + "3DB56050A37329CBB4A099ED8193E0757767A13DD52312AB4B03310D" + + "CD7F48A9DA04FD50E8083969EDB767B0CF6095179A163AB3661A05FB" + + "D5FAAAE82918A9962F0B93B855F97993EC975EEAA80D740ADBF4FF74" + + "7359D041D5C33EA71D281E446B14773BCA97B43A23FB801676BD207A" + + "436C6481F1D2B9078717461A5B9D32E688F87748544523B524B0D57D" + + "5EA77A2775D2ECFA032CFBDBF52FB3786160279004E57AE6AF874E73" + + "03CE53299CCC041C7BC308D82A5698F3A8D0C38271AE35F8E9DBFBB6" + + "94B5C803D89F7AE435DE236D525F54759B65E372FCD68EF20FA7111F" + "9E4AFF73"; + private static readonly string rfc5054_2048_g = "02"; + public static readonly Srp6Group rfc5054_2048 = FromNG(rfc5054_2048_N, rfc5054_2048_g); + + private static readonly string rfc5054_3072_N = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08" + + "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B" + + "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9" + + "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6" + + "49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8" + + "FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C" + + "180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718" + + "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D" + + "04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D" + + "B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226" + + "1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC" + "E0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF"; + private static readonly string rfc5054_3072_g = "05"; + public static readonly Srp6Group rfc5054_3072 = FromNG(rfc5054_3072_N, rfc5054_3072_g); + + private static readonly string rfc5054_4096_N = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08" + + "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B" + + "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9" + + "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6" + + "49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8" + + "FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C" + + "180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718" + + "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D" + + "04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D" + + "B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226" + + "1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC" + + "E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26" + + "99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB" + + "04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2" + + "233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127" + + "D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199" + "FFFFFFFFFFFFFFFF"; + private static readonly string rfc5054_4096_g = "05"; + public static readonly Srp6Group rfc5054_4096 = FromNG(rfc5054_4096_N, rfc5054_4096_g); + + private static readonly string rfc5054_6144_N = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08" + + "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B" + + "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9" + + "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6" + + "49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8" + + "FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C" + + "180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718" + + "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D" + + "04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D" + + "B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226" + + "1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC" + + "E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26" + + "99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB" + + "04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2" + + "233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127" + + "D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492" + + "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406" + + "AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918" + + "DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B33205151" + + "2BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03" + + "F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97F" + + "BEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA" + + "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58B" + + "B7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632" + + "387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E" + "6DCC4024FFFFFFFFFFFFFFFF"; + private static readonly string rfc5054_6144_g = "05"; + public static readonly Srp6Group rfc5054_6144 = FromNG(rfc5054_6144_N, rfc5054_6144_g); + + private static readonly string rfc5054_8192_N = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08" + + "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B" + + "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9" + + "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6" + + "49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8" + + "FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C" + + "180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718" + + "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D" + + "04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D" + + "B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226" + + "1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC" + + "E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26" + + "99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB" + + "04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2" + + "233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127" + + "D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492" + + "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406" + + "AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918" + + "DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B33205151" + + "2BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03" + + "F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97F" + + "BEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA" + + "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58B" + + "B7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632" + + "387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E" + + "6DBE115974A3926F12FEE5E438777CB6A932DF8CD8BEC4D073B931BA" + + "3BC832B68D9DD300741FA7BF8AFC47ED2576F6936BA424663AAB639C" + + "5AE4F5683423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD9" + + "22222E04A4037C0713EB57A81A23F0C73473FC646CEA306B4BCBC886" + + "2F8385DDFA9D4B7FA2C087E879683303ED5BDD3A062B3CF5B3A278A6" + + "6D2A13F83F44F82DDF310EE074AB6A364597E899A0255DC164F31CC5" + + "0846851DF9AB48195DED7EA1B1D510BD7EE74D73FAF36BC31ECFA268" + + "359046F4EB879F924009438B481C6CD7889A002ED5EE382BC9190DA6" + + "FC026E479558E4475677E9AA9E3050E2765694DFC81F56E880B96E71" + "60C980DD98EDD3DFFFFFFFFFFFFFFFFF"; + private static readonly string rfc5054_8192_g = "13"; + public static readonly Srp6Group rfc5054_8192 = FromNG(rfc5054_8192_N, rfc5054_8192_g); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/Srp6StandardGroups.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/Srp6StandardGroups.cs.meta new file mode 100644 index 000000000..fe027dfff --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/Srp6StandardGroups.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d872358ec0e35942a9983bc750e06fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/Tls13Verifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/Tls13Verifier.cs new file mode 100644 index 000000000..394ea47ec --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/Tls13Verifier.cs @@ -0,0 +1,18 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + public interface Tls13Verifier + { + /// + Stream Stream { get; } + + /// + bool VerifySignature(byte[] signature); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/Tls13Verifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/Tls13Verifier.cs.meta new file mode 100644 index 000000000..f33ef66d8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/Tls13Verifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8d3d92b1fac74df4db2c07db7e134b0e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsAgreement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsAgreement.cs new file mode 100644 index 000000000..d3294d839 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsAgreement.cs @@ -0,0 +1,28 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Base interface for ephemeral key agreement calculator. + public interface TlsAgreement + { + /// Generate an ephemeral key pair, returning the encoding of the public key. + /// a byte encoding of the public key. + /// + byte[] GenerateEphemeral(); + + /// Pass in the public key for the peer to the agreement calculator. + /// a byte encoding of the peer public key. + /// + void ReceivePeerValue(byte[] peerValue); + + /// Calculate the agreed secret based on the calculator's current state. + /// the calculated secret. + /// + TlsSecret CalculateSecret(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsAgreement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsAgreement.cs.meta new file mode 100644 index 000000000..e78650d1a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsAgreement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e7060f14f10ed7f47ade9a62c2552b1b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCertificate.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCertificate.cs new file mode 100644 index 000000000..d009e2d49 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCertificate.cs @@ -0,0 +1,61 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Interface providing the functional representation of a single X.509 certificate. + public interface TlsCertificate + { + /// Return an encryptor based on the public key in this certificate. + /// + /// a based on this certificate's public key. + /// + TlsEncryptor CreateEncryptor(int tlsCertificateRole); + + /// + /// + TlsVerifier CreateVerifier(short signatureAlgorithm); + + /// + /// + Tls13Verifier CreateVerifier(int signatureScheme); + + /// + byte[] GetEncoded(); + + /// + byte[] GetExtension(DerObjectIdentifier extensionOid); + + BigInteger SerialNumber { get; } + + /// the OID of this certificate's 'signatureAlgorithm', as a string. + string SigAlgOid { get; } + + /// + Asn1Encodable GetSigAlgParams(); + + /// + /// + short GetLegacySignatureAlgorithm(); + + /// + /// true if (and only if) this certificate can be used to verify the given signature algorithm. + /// + /// + bool SupportsSignatureAlgorithm(short signatureAlgorithm); + + /// + bool SupportsSignatureAlgorithmCA(short signatureAlgorithm); + + /// + /// + TlsCertificate CheckUsageInRole(int tlsCertificateRole); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCertificate.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCertificate.cs.meta new file mode 100644 index 000000000..89d35763a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCertificate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8aac8245d7045141b2c164bae485c39 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCertificateRole.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCertificateRole.cs new file mode 100644 index 000000000..0c07dbc8f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCertificateRole.cs @@ -0,0 +1,16 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + public abstract class TlsCertificateRole + { + public const int DH = 1; + public const int ECDH = 2; + public const int RsaEncryption = 3; + public const int Sm2Encryption = 4; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCertificateRole.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCertificateRole.cs.meta new file mode 100644 index 000000000..683a264f2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCertificateRole.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1d18efd5b89b75c4b93863d2e2f2ec53 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCipher.cs new file mode 100644 index 000000000..2dcc6ae14 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCipher.cs @@ -0,0 +1,70 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Base interface for a TLS bulk cipher. + public interface TlsCipher + { + /// Return the maximum input size for a ciphertext given a maximum output size for the plaintext of + /// plaintextLimit bytes. + /// the maximum output size for the plaintext. + /// the maximum input size of the ciphertext for plaintextlimit bytes of output. + int GetCiphertextDecodeLimit(int plaintextLimit); + + /// Return the maximum output size for a ciphertext given an actual input plaintext size of + /// plaintextLength bytes and a maximum input plaintext size of plaintextLimit bytes. + /// the actual input size for the plaintext. + /// the maximum input size for the plaintext. + /// the maximum output size of the ciphertext for plaintextlimit bytes of input. + int GetCiphertextEncodeLimit(int plaintextLength, int plaintextLimit); + + /// Return the maximum size for the plaintext given ciphertextlimit bytes of ciphertext. + /// the maximum number of bytes of ciphertext. + /// the maximum size of the plaintext for ciphertextlimit bytes of input. + int GetPlaintextLimit(int ciphertextLimit); + + /// Encode the passed in plaintext using the current bulk cipher. + /// sequence number of the message represented by plaintext. + /// content type of the message represented by plaintext. + /// used for the record. + /// extra bytes to allocate at start of returned byte array. + /// array holding input plaintext to the cipher. + /// offset into input array the plaintext starts at. + /// length of the plaintext in the array. + /// A containing the result of encoding (after 'headerAllocation' unused + /// bytes). + /// + TlsEncodeResult EncodePlaintext(long seqNo, short contentType, ProtocolVersion recordVersion, + int headerAllocation, byte[] plaintext, int offset, int len); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + TlsEncodeResult EncodePlaintext(long seqNo, short contentType, ProtocolVersion recordVersion, + int headerAllocation, ReadOnlySpan plaintext); +#endif + + /// Decode the passed in ciphertext using the current bulk cipher. + /// sequence number of the message represented by ciphertext. + /// content type used in the record for this message. + /// used for the record. + /// array holding input ciphertext to the cipher. + /// offset into input array the ciphertext starts at. + /// length of the ciphertext in the array. + /// A containing the result of decoding. + /// + TlsDecodeResult DecodeCiphertext(long seqNo, short recordType, ProtocolVersion recordVersion, + byte[] ciphertext, int offset, int len); + + /// + void RekeyDecoder(); + + /// + void RekeyEncoder(); + + bool UsesOpaqueRecordType { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCipher.cs.meta new file mode 100644 index 000000000..ed72bd7cd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 846f1aca6033b574fba49320414bed92 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCrypto.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCrypto.cs new file mode 100644 index 000000000..e52cd959e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCrypto.cs @@ -0,0 +1,213 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Service and object creation interface for the primitive types and services that are associated with + /// cryptography in the API. + public interface TlsCrypto + { + /// Return true if this TlsCrypto would use a stream verifier for any of the passed in algorithms. + /// + /// This method is only relevant to handshakes negotiating (D)TLS 1.2. + /// A list of + /// values. + /// true if this instance would use a stream verifier for any of the passed in algorithms, otherwise + /// false. + bool HasAnyStreamVerifiers(IList signatureAndHashAlgorithms); + + /// Return true if this TlsCrypto would use a stream verifier for any of the passed in algorithms. + /// + /// This method is only relevant to handshakes negotiating (D)TLS versions older than 1.2. + /// An array of values. + /// true if this instance would use a stream verifier for any of the passed in algorithms, otherwise + /// false. + bool HasAnyStreamVerifiersLegacy(short[] clientCertificateTypes); + + /// Return true if this TlsCrypto can support the passed in hash algorithm. + /// the algorithm of interest. + /// true if cryptoHashAlgorithm is supported, false otherwise. + bool HasCryptoHashAlgorithm(int cryptoHashAlgorithm); + + /// Return true if this TlsCrypto can support the passed in signature algorithm (not necessarily in + /// combination with EVERY hash algorithm). + /// the algorithm of interest. + /// true if cryptoSignatureAlgorithm is supported, false otherwise. + bool HasCryptoSignatureAlgorithm(int cryptoSignatureAlgorithm); + + /// Return true if this TlsCrypto can support DH key agreement. + /// true if this instance can support DH key agreement, false otherwise. + bool HasDHAgreement(); + + /// Return true if this TlsCrypto can support ECDH key agreement. + /// true if this instance can support ECDH key agreement, false otherwise. + bool HasECDHAgreement(); + + /// Return true if this TlsCrypto can support the passed in block/stream encryption algorithm. + /// + /// the algorithm of interest. + /// true if encryptionAlgorithm is supported, false otherwise. + bool HasEncryptionAlgorithm(int encryptionAlgorithm); + + /// Return true if this TlsCrypto can support HKDF with the passed in hash algorithm. + /// the algorithm of interest. + /// true if HKDF is supported with cryptoHashAlgorithm, false otherwise. + bool HasHkdfAlgorithm(int cryptoHashAlgorithm); + + /// Return true if this TlsCrypto can support the passed in MAC algorithm. + /// the algorithm of interest. + /// true if macAlgorithm is supported, false otherwise. + bool HasMacAlgorithm(int macAlgorithm); + + /// Return true if this TlsCrypto supports the passed in named group + /// value. + /// true if this instance supports the passed in named group value. + /// + bool HasNamedGroup(int namedGroup); + + /// Return true if this TlsCrypto can support RSA encryption/decryption. + /// true if this instance can support RSA encryption/decryption, false otherwise. + bool HasRsaEncryption(); + + /// Return true if this TlsCrypto can support the passed in signature algorithm (not necessarily in + /// combination with EVERY hash algorithm). + /// true if signatureAlgorithm is supported, false otherwise. + bool HasSignatureAlgorithm(short signatureAlgorithm); + + /// Return true if this TlsCrypto can support the passed in signature algorithm. + /// the algorithm of interest. + /// true if sigAndHashAlgorithm is supported, false otherwise. + bool HasSignatureAndHashAlgorithm(SignatureAndHashAlgorithm sigAndHashAlgorithm); + + /// Return true if this TlsCrypto can support the passed in signature scheme. + /// the scheme of interest. + /// true if signatureScheme is supported, false otherwise. + bool HasSignatureScheme(int signatureScheme); + + /// Return true if this TlsCrypto can support SRP authentication. + /// true if this instance can support SRP authentication, false otherwise. + bool HasSrpAuthentication(); + + /// Create a TlsSecret object based on provided data. + /// the data to base the TlsSecret on. + /// a TlsSecret based on the provided data. + TlsSecret CreateSecret(byte[] data); + + /// Create a TlsSecret object containing a randomly-generated RSA PreMasterSecret + /// the client version to place in the first 2 bytes + /// a TlsSecret containing the PreMasterSecret. + TlsSecret GenerateRsaPreMasterSecret(ProtocolVersion clientVersion); + + /// Return the primary (safest) SecureRandom for this crypto. + /// a SecureRandom suitable for key generation. + SecureRandom SecureRandom { get; } + + /// Create a TlsCertificate from an ASN.1 binary encoding of an X.509 certificate. + /// DER/BER encoding of the certificate of interest. + /// a TlsCertificate. + /// if there is an issue on decoding or constructing the certificate. + TlsCertificate CreateCertificate(byte[] encoding); + + /// Create a TlsCertificate from an ASN.1 binary encoding of a certificate. + /// Certificate type as per IANA TLS Certificate Types registry. + /// DER/BER encoding of the certificate of interest. + /// a TlsCertificate. + /// if there is an issue on decoding or constructing the certificate. + TlsCertificate CreateCertificate(short type, byte[] encoding); + + /// Create a cipher for the specified encryption and MAC algorithms. + /// + /// See enumeration classes , for appropriate + /// argument values. + /// + /// context specific parameters. + /// the encryption algorithm to be employed by the cipher. + /// the MAC algorithm to be employed by the cipher. + /// a implementing the encryption and MAC algorithms. + /// + TlsCipher CreateCipher(TlsCryptoParameters cryptoParams, int encryptionAlgorithm, int macAlgorithm); + + /// Create a domain object supporting the domain parameters described in dhConfig. + /// the config describing the DH parameters to use. + /// a TlsDHDomain supporting the parameters in dhConfig. + TlsDHDomain CreateDHDomain(TlsDHConfig dhConfig); + + /// Create a domain object supporting the domain parameters described in ecConfig. + /// the config describing the EC parameters to use. + /// a TlsECDomain supporting the parameters in ecConfig. + TlsECDomain CreateECDomain(TlsECConfig ecConfig); + + /// Adopt the passed in secret, creating a new copy of it. + /// the secret to make a copy of. + /// a TlsSecret based on the original secret. + TlsSecret AdoptSecret(TlsSecret secret); + + /// Create a suitable hash for the hash algorithm identifier passed in. + /// + /// See enumeration class for appropriate argument values. + /// + /// the hash algorithm the hash needs to implement. + /// a . + TlsHash CreateHash(int cryptoHashAlgorithm); + + /// Create a suitable HMAC for the MAC algorithm identifier passed in. + /// + /// See enumeration class for appropriate argument values. + /// + /// the MAC algorithm the HMAC needs to match. + /// a . + TlsHmac CreateHmac(int macAlgorithm); + + /// Create a suitable HMAC using the hash algorithm identifier passed in. + /// + /// See enumeration class for appropriate argument values. + /// + /// the hash algorithm the HMAC should use. + /// a . + TlsHmac CreateHmacForHash(int cryptoHashAlgorithm); + + /// Create a nonce generator. + /// + /// Each call should construct a new generator, and the generator should be returned from this call only after + /// automatically seeding from this 's entropy source, and from the provided additional + /// seed material. The output of each returned generator must be completely independent of the others. + /// + /// context-specific seed material + /// a . + TlsNonceGenerator CreateNonceGenerator(byte[] additionalSeedMaterial); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + TlsNonceGenerator CreateNonceGenerator(ReadOnlySpan additionalSeedMaterial); +#endif + + /// Create an SRP-6 client. + /// client config. + /// an initialised SRP6 client object. + TlsSrp6Client CreateSrp6Client(TlsSrpConfig srpConfig); + + /// Create an SRP-6 server. + /// server config. + /// the SRP6 verifier value. + /// an initialised SRP6 server object. + TlsSrp6Server CreateSrp6Server(TlsSrpConfig srpConfig, BigInteger srpVerifier); + + /// Create an SRP-6 verifier generator. + /// generator config. + /// an initialized SRP6 verifier generator. + TlsSrp6VerifierGenerator CreateSrp6VerifierGenerator(TlsSrpConfig srpConfig); + + /// Setup an initial "secret" for a chain of HKDF calls (RFC 5869), containing a string of HashLen + /// zeroes. + /// the hash algorithm to instantiate HMAC with. See + /// for values. + TlsSecret HkdfInit(int cryptoHashAlgorithm); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCrypto.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCrypto.cs.meta new file mode 100644 index 000000000..3f0356b32 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCrypto.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 797259739d2db2444a0fa577d5f10e6d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCryptoException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCryptoException.cs new file mode 100644 index 000000000..e915bc235 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCryptoException.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Basic exception class for crypto services to pass back a cause. + [Serializable] + public class TlsCryptoException + : TlsException + { + public TlsCryptoException() + : base() + { + } + + public TlsCryptoException(string message) + : base(message) + { + } + + public TlsCryptoException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected TlsCryptoException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCryptoException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCryptoException.cs.meta new file mode 100644 index 000000000..444bc6708 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCryptoException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c35ba0214f021bc40b111393881dde27 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCryptoParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCryptoParameters.cs new file mode 100644 index 000000000..b282054b5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCryptoParameters.cs @@ -0,0 +1,53 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + // TODO[tls-port] Would rather this be sealed + /// Carrier class for context-related parameters needed for creating secrets and ciphers. + public class TlsCryptoParameters + { + private readonly TlsContext m_context; + + /// Base constructor. + /// the context for this parameters object. + public TlsCryptoParameters(TlsContext context) + { + this.m_context = context; + } + + public SecurityParameters SecurityParameters + { + get { return m_context.SecurityParameters; } + } + + public ProtocolVersion ClientVersion + { + get { return m_context.ClientVersion; } + } + + public ProtocolVersion RsaPreMasterSecretVersion + { + get { return m_context.RsaPreMasterSecretVersion; } + } + + // TODO[tls-port] Would rather this be non-virtual + public virtual ProtocolVersion ServerVersion + { + get { return m_context.ServerVersion; } + } + + public bool IsServer + { + get { return m_context.IsServer; } + } + + public TlsNonceGenerator NonceGenerator + { + get { return m_context.NonceGenerator; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCryptoParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCryptoParameters.cs.meta new file mode 100644 index 000000000..ddaadf572 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCryptoParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5272b3ca1dbb1b24c8684f17ec66da59 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCryptoUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCryptoUtilities.cs new file mode 100644 index 000000000..33895b213 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCryptoUtilities.cs @@ -0,0 +1,278 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + public abstract class TlsCryptoUtilities + { + // "tls13 " + private static readonly byte[] Tls13Prefix = new byte[] { 0x74, 0x6c, 0x73, 0x31, 0x33, 0x20 }; + + public static int GetHash(short hashAlgorithm) + { + switch (hashAlgorithm) + { + case HashAlgorithm.md5: + return CryptoHashAlgorithm.md5; + case HashAlgorithm.sha1: + return CryptoHashAlgorithm.sha1; + case HashAlgorithm.sha224: + return CryptoHashAlgorithm.sha224; + case HashAlgorithm.sha256: + return CryptoHashAlgorithm.sha256; + case HashAlgorithm.sha384: + return CryptoHashAlgorithm.sha384; + case HashAlgorithm.sha512: + return CryptoHashAlgorithm.sha512; + default: + throw new ArgumentException("specified HashAlgorithm invalid: " + HashAlgorithm.GetText(hashAlgorithm)); + } + } + + public static int GetHashForHmac(int macAlgorithm) + { + switch (macAlgorithm) + { + case MacAlgorithm.hmac_md5: + return CryptoHashAlgorithm.md5; + case MacAlgorithm.hmac_sha1: + return CryptoHashAlgorithm.sha1; + case MacAlgorithm.hmac_sha256: + return CryptoHashAlgorithm.sha256; + case MacAlgorithm.hmac_sha384: + return CryptoHashAlgorithm.sha384; + case MacAlgorithm.hmac_sha512: + return CryptoHashAlgorithm.sha512; + default: + throw new ArgumentException("specified MacAlgorithm not an HMAC: " + MacAlgorithm.GetText(macAlgorithm)); + } + } + + public static int GetHashForPrf(int prfAlgorithm) + { + switch (prfAlgorithm) + { + case PrfAlgorithm.ssl_prf_legacy: + case PrfAlgorithm.tls_prf_legacy: + throw new ArgumentException("legacy PRF not a valid algorithm"); + case PrfAlgorithm.tls_prf_sha256: + case PrfAlgorithm.tls13_hkdf_sha256: + return CryptoHashAlgorithm.sha256; + case PrfAlgorithm.tls_prf_sha384: + case PrfAlgorithm.tls13_hkdf_sha384: + return CryptoHashAlgorithm.sha384; + case PrfAlgorithm.tls13_hkdf_sm3: + return CryptoHashAlgorithm.sm3; + default: + throw new ArgumentException("unknown PrfAlgorithm: " + PrfAlgorithm.GetText(prfAlgorithm)); + } + } + + public static int GetHashInternalSize(int cryptoHashAlgorithm) + { + switch (cryptoHashAlgorithm) + { + case CryptoHashAlgorithm.md5: + case CryptoHashAlgorithm.sha1: + case CryptoHashAlgorithm.sha224: + case CryptoHashAlgorithm.sha256: + case CryptoHashAlgorithm.sm3: + return 64; + case CryptoHashAlgorithm.sha384: + case CryptoHashAlgorithm.sha512: + return 128; + default: + throw new ArgumentException(); + } + } + + public static int GetHashOutputSize(int cryptoHashAlgorithm) + { + switch (cryptoHashAlgorithm) + { + case CryptoHashAlgorithm.md5: + return 16; + case CryptoHashAlgorithm.sha1: + return 20; + case CryptoHashAlgorithm.sha224: + return 28; + case CryptoHashAlgorithm.sha256: + case CryptoHashAlgorithm.sm3: + return 32; + case CryptoHashAlgorithm.sha384: + return 48; + case CryptoHashAlgorithm.sha512: + return 64; + default: + throw new ArgumentException(); + } + } + + public static DerObjectIdentifier GetOidForHash(int cryptoHashAlgorithm) + { + switch (cryptoHashAlgorithm) + { + case CryptoHashAlgorithm.md5: + return PkcsObjectIdentifiers.MD5; + case CryptoHashAlgorithm.sha1: + return X509ObjectIdentifiers.IdSha1; + case CryptoHashAlgorithm.sha224: + return NistObjectIdentifiers.IdSha224; + case CryptoHashAlgorithm.sha256: + return NistObjectIdentifiers.IdSha256; + case CryptoHashAlgorithm.sha384: + return NistObjectIdentifiers.IdSha384; + case CryptoHashAlgorithm.sha512: + return NistObjectIdentifiers.IdSha512; + // TODO[RFC 8998] + //case CryptoHashAlgorithm.sm3: + // return GMObjectIdentifiers.sm3; + default: + throw new ArgumentException(); + } + } + + public static int GetSignature(short signatureAlgorithm) + { + switch (signatureAlgorithm) + { + case SignatureAlgorithm.rsa: + return CryptoSignatureAlgorithm.rsa; + case SignatureAlgorithm.dsa: + return CryptoSignatureAlgorithm.dsa; + case SignatureAlgorithm.ecdsa: + return CryptoSignatureAlgorithm.ecdsa; + case SignatureAlgorithm.rsa_pss_rsae_sha256: + return CryptoSignatureAlgorithm.rsa_pss_rsae_sha256; + case SignatureAlgorithm.rsa_pss_rsae_sha384: + return CryptoSignatureAlgorithm.rsa_pss_rsae_sha384; + case SignatureAlgorithm.rsa_pss_rsae_sha512: + return CryptoSignatureAlgorithm.rsa_pss_rsae_sha512; + case SignatureAlgorithm.ed25519: + return CryptoSignatureAlgorithm.ed25519; + case SignatureAlgorithm.ed448: + return CryptoSignatureAlgorithm.ed448; + case SignatureAlgorithm.rsa_pss_pss_sha256: + return CryptoSignatureAlgorithm.rsa_pss_pss_sha256; + case SignatureAlgorithm.rsa_pss_pss_sha384: + return CryptoSignatureAlgorithm.rsa_pss_pss_sha384; + case SignatureAlgorithm.rsa_pss_pss_sha512: + return CryptoSignatureAlgorithm.rsa_pss_pss_sha512; + case SignatureAlgorithm.ecdsa_brainpoolP256r1tls13_sha256: + return CryptoSignatureAlgorithm.ecdsa_brainpoolP256r1tls13_sha256; + case SignatureAlgorithm.ecdsa_brainpoolP384r1tls13_sha384: + return CryptoSignatureAlgorithm.ecdsa_brainpoolP384r1tls13_sha384; + case SignatureAlgorithm.ecdsa_brainpoolP512r1tls13_sha512: + return CryptoSignatureAlgorithm.ecdsa_brainpoolP512r1tls13_sha512; + case SignatureAlgorithm.gostr34102012_256: + return CryptoSignatureAlgorithm.gostr34102012_256; + case SignatureAlgorithm.gostr34102012_512: + return CryptoSignatureAlgorithm.gostr34102012_512; + default: + throw new ArgumentException("specified SignatureAlgorithm invalid: " + + SignatureAlgorithm.GetText(signatureAlgorithm)); + } + } + + /// + public static TlsSecret HkdfExpandLabel(TlsSecret secret, int cryptoHashAlgorithm, string label, + byte[] context, int length) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return HkdfExpandLabel(secret, cryptoHashAlgorithm, label.AsSpan(), context.AsSpan(), length); +#else + int labelLength = label.Length; + if (labelLength < 1) + throw new TlsFatalAlert(AlertDescription.internal_error); + + int contextLength = context.Length; + int expandedLabelLength = Tls13Prefix.Length + labelLength; + + byte[] hkdfLabel = new byte[2 + (1 + expandedLabelLength) + (1 + contextLength)]; + + // uint16 length + { + TlsUtilities.CheckUint16(length); + TlsUtilities.WriteUint16(length, hkdfLabel, 0); + } + + // opaque label<7..255> + { + TlsUtilities.CheckUint8(expandedLabelLength); + TlsUtilities.WriteUint8(expandedLabelLength, hkdfLabel, 2); + + Array.Copy(Tls13Prefix, 0, hkdfLabel, 2 + 1, Tls13Prefix.Length); + + int labelPos = 2 + (1 + Tls13Prefix.Length); + for (int i = 0; i < labelLength; ++i) + { + char c = label[i]; + hkdfLabel[labelPos + i] = (byte)c; + } + } + + // context + { + TlsUtilities.WriteOpaque8(context, hkdfLabel, 2 + (1 + expandedLabelLength)); + } + + return secret.HkdfExpand(cryptoHashAlgorithm, hkdfLabel, length); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + /// + public static TlsSecret HkdfExpandLabel(TlsSecret secret, int cryptoHashAlgorithm, ReadOnlySpan label, + ReadOnlySpan context, int length) + { + int labelLength = label.Length; + if (labelLength < 1) + throw new TlsFatalAlert(AlertDescription.internal_error); + + int contextLength = context.Length; + int expandedLabelLength = Tls13Prefix.Length + labelLength; + + int hkdfLabelLength = 2 + (1 + expandedLabelLength) + (1 + contextLength); + Span hkdfLabel = hkdfLabelLength <= 512 + ? stackalloc byte[hkdfLabelLength] + : new byte[hkdfLabelLength]; + + // uint16 length + { + TlsUtilities.CheckUint16(length); + TlsUtilities.WriteUint16(length, hkdfLabel); + } + + // opaque label<7..255> + { + TlsUtilities.CheckUint8(expandedLabelLength); + TlsUtilities.WriteUint8(expandedLabelLength, hkdfLabel[2..]); + + Tls13Prefix.CopyTo(hkdfLabel[3..]); + + int labelPos = 2 + (1 + Tls13Prefix.Length); + for (int i = 0; i < labelLength; ++i) + { + hkdfLabel[labelPos + i] = (byte)label[i]; + } + } + + // context + { + TlsUtilities.WriteOpaque8(context, hkdfLabel.Slice(2 + (1 + expandedLabelLength))); + } + + return secret.HkdfExpand(cryptoHashAlgorithm, hkdfLabel, length); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCryptoUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCryptoUtilities.cs.meta new file mode 100644 index 000000000..e9528c101 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsCryptoUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0610ee128e03a3a49847b0676f644a91 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsDHConfig.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsDHConfig.cs new file mode 100644 index 000000000..381cdcb21 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsDHConfig.cs @@ -0,0 +1,45 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Basic config for Diffie-Hellman. + public class TlsDHConfig + { + protected readonly DHGroup m_explicitGroup; + protected readonly int m_namedGroup; + protected readonly bool m_padded; + + public TlsDHConfig(DHGroup explicitGroup) + { + this.m_explicitGroup = explicitGroup; + this.m_namedGroup = -1; + this.m_padded = false; + } + + public TlsDHConfig(int namedGroup, bool padded) + { + this.m_explicitGroup = null; + this.m_namedGroup = namedGroup; + this.m_padded = padded; + } + + public virtual DHGroup ExplicitGroup + { + get { return m_explicitGroup; } + } + + public virtual int NamedGroup + { + get { return m_namedGroup; } + } + + public virtual bool IsPadded + { + get { return m_padded; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsDHConfig.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsDHConfig.cs.meta new file mode 100644 index 000000000..2a88e87dd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsDHConfig.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf5102488668c9d44981e50eedd3491d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsDHDomain.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsDHDomain.cs new file mode 100644 index 000000000..2fc7840a8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsDHDomain.cs @@ -0,0 +1,16 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Domain interface to service factory for creating Diffie-Hellman operators. + public interface TlsDHDomain + { + /// Return an agreement operator suitable for ephemeral Diffie-Hellman. + /// a key agreement operator. + TlsAgreement CreateDH(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsDHDomain.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsDHDomain.cs.meta new file mode 100644 index 000000000..3d281c69b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsDHDomain.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 69714806cc7d8664ebf4f1cccf74e11c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsDecodeResult.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsDecodeResult.cs new file mode 100644 index 000000000..e87796809 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsDecodeResult.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + public sealed class TlsDecodeResult + { + public readonly byte[] buf; + public readonly int off, len; + public readonly short contentType; + + public readonly bool fromBufferPool; + + public TlsDecodeResult(byte[] buf, int off, int len, short contentType) + { + this.buf = buf; + this.off = off; + this.len = len; + this.contentType = contentType; + this.fromBufferPool = false; + } + + public TlsDecodeResult(byte[] buf, int off, int len, short contentType, bool fromPool) + { + this.buf = buf; + this.off = off; + this.len = len; + this.contentType = contentType; + this.fromBufferPool = fromPool; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsDecodeResult.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsDecodeResult.cs.meta new file mode 100644 index 000000000..9f8157de1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsDecodeResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 84b1b0de2e066e541ab137af6f72d65a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsECConfig.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsECConfig.cs new file mode 100644 index 000000000..b81ab7711 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsECConfig.cs @@ -0,0 +1,26 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Carrier class for Elliptic Curve parameter configuration. + public class TlsECConfig + { + protected readonly int m_namedGroup; + + public TlsECConfig(int namedGroup) + { + this.m_namedGroup = namedGroup; + } + + /// Return the group used. + /// the named group used. + public virtual int NamedGroup + { + get { return m_namedGroup; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsECConfig.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsECConfig.cs.meta new file mode 100644 index 000000000..7141ca82f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsECConfig.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bbbcb076f23bd9a499b95c8aa2a54113 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsECDomain.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsECDomain.cs new file mode 100644 index 000000000..9583da5ba --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsECDomain.cs @@ -0,0 +1,16 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Domain interface to service factory for creating Elliptic-Curve (EC) based operators. + public interface TlsECDomain + { + /// Return an agreement operator suitable for ephemeral EC Diffie-Hellman. + /// a key agreement operator. + TlsAgreement CreateECDH(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsECDomain.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsECDomain.cs.meta new file mode 100644 index 000000000..50ae1f402 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsECDomain.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8a911f63a3d365642b6ad8b8c7b52fe8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsEncodeResult.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsEncodeResult.cs new file mode 100644 index 000000000..3479aa9da --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsEncodeResult.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + public readonly struct TlsEncodeResult + { + public readonly byte[] buf; + public readonly int off, len; + public readonly short recordType; + public readonly bool fromBufferPool; + + public TlsEncodeResult(byte[] buf, int off, int len, short recordType) + { + this.buf = buf; + this.off = off; + this.len = len; + this.recordType = recordType; + this.fromBufferPool = false; + } + + public TlsEncodeResult(byte[] buf, int off, int len, short recordType, bool fromPool) + { + this.buf = buf; + this.off = off; + this.len = len; + this.recordType = recordType; + this.fromBufferPool = fromPool; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsEncodeResult.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsEncodeResult.cs.meta new file mode 100644 index 000000000..860f973b9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsEncodeResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1fa162c2d39704047b66e57032598926 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsEncryptor.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsEncryptor.cs new file mode 100644 index 000000000..b65dc92c4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsEncryptor.cs @@ -0,0 +1,21 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Base interface for an encryptor. + public interface TlsEncryptor + { + /// Encrypt data from the passed in input array. + /// byte array containing the input data. + /// offset into input where the data starts. + /// the length of the data to encrypt. + /// the encrypted data. + /// + byte[] Encrypt(byte[] input, int inOff, int length); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsEncryptor.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsEncryptor.cs.meta new file mode 100644 index 000000000..6dc1911cd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsEncryptor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a67f5696d756244c892a70f1ad95e9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsHash.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsHash.cs new file mode 100644 index 000000000..2af753b23 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsHash.cs @@ -0,0 +1,33 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Interface for message digest, or hash, services. + public interface TlsHash + { + /// Update the hash with the passed in input. + /// input array containing the data. + /// offset into the input array the input starts at. + /// the length of the input data. + void Update(byte[] input, int inOff, int length); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + void Update(ReadOnlySpan input); +#endif + + /// Return calculated hash for any input passed in. + /// the hash value. + byte[] CalculateHash(); + + /// Return a clone of this hash object representing its current state. + /// a clone of the current hash. + TlsHash CloneHash(); + + /// Reset the hash underlying this service. + void Reset(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsHash.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsHash.cs.meta new file mode 100644 index 000000000..124474138 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsHash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 486a23d3781fe0b4d9e2d3ecbb222806 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsHashSink.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsHashSink.cs new file mode 100644 index 000000000..0028c8a79 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsHashSink.cs @@ -0,0 +1,51 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + public class TlsHashSink + : BaseOutputStream + { + private readonly TlsHash m_hash; + + public TlsHashSink(TlsHash hash) + { + this.m_hash = hash; + } + + public virtual TlsHash Hash + { + get { return m_hash; } + } + + public override void Write(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + + if (count > 0) + { + m_hash.Update(buffer, offset, count); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) + { + if (!buffer.IsEmpty) + { + m_hash.Update(buffer); + } + } +#endif + + public override void WriteByte(byte value) + { + m_hash.Update(new byte[]{ value }, 0, 1); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsHashSink.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsHashSink.cs.meta new file mode 100644 index 000000000..a290e9a60 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsHashSink.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5dc500e8d3733ee4c81313ea79a642fa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsHmac.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsHmac.cs new file mode 100644 index 000000000..c9d2cac75 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsHmac.cs @@ -0,0 +1,17 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Interface for MAC services based on HMAC. + public interface TlsHmac + : TlsMac + { + /// Return the internal block size for the message digest underlying this HMAC service. + /// the internal block size for the digest (in bytes). + int InternalBlockSize { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsHmac.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsHmac.cs.meta new file mode 100644 index 000000000..de6b1d010 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsHmac.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e625fed351c3bd445b7575ac87974d9b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsMac.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsMac.cs new file mode 100644 index 000000000..84109838d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsMac.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Interface for MAC services. + public interface TlsMac + { + /// Set the key to be used by the MAC implementation supporting this service. + /// array holding the MAC key. + /// offset into the array the key starts at. + /// length of the key in the array. + void SetKey(byte[] key, int keyOff, int keyLen); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + void SetKey(ReadOnlySpan key); +#endif + + /// Update the MAC with the passed in input. + /// input array containing the data. + /// offset into the input array the input starts at. + /// the length of the input data. + void Update(byte[] input, int inOff, int length); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + void Update(ReadOnlySpan input); +#endif + + /// Return calculated MAC for any input passed in. + /// the MAC value. + byte[] CalculateMac(); + + /// Write the calculated MAC to an output buffer. + /// output array to write the MAC to. + /// offset into the output array to write the MAC to. + void CalculateMac(byte[] output, int outOff); + + /// Return the length of the MAC generated by this service. + /// the MAC length. + int MacLength { get; } + + /// Reset the MAC underlying this service. + void Reset(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsMac.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsMac.cs.meta new file mode 100644 index 000000000..df146516b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsMac.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a364406e30a492c40867a01595fa8e66 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsMacSink.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsMacSink.cs new file mode 100644 index 000000000..1ce8bc4b6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsMacSink.cs @@ -0,0 +1,51 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + public class TlsMacSink + : BaseOutputStream + { + private readonly TlsMac m_mac; + + public TlsMacSink(TlsMac mac) + { + this.m_mac = mac; + } + + public virtual TlsMac Mac + { + get { return m_mac; } + } + + public override void Write(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + + if (count > 0) + { + m_mac.Update(buffer, offset, count); + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) + { + if (!buffer.IsEmpty) + { + m_mac.Update(buffer); + } + } +#endif + + public override void WriteByte(byte value) + { + m_mac.Update(new byte[]{ value }, 0, 1); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsMacSink.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsMacSink.cs.meta new file mode 100644 index 000000000..0dd6715c5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsMacSink.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 85001bf6d17621843820855c52667686 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsNonceGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsNonceGenerator.cs new file mode 100644 index 000000000..8b051a7f2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsNonceGenerator.cs @@ -0,0 +1,16 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + public interface TlsNonceGenerator + { + /// Generate a nonce byte[] string. + /// the length, in bytes, of the nonce to generate. + /// the nonce value. + byte[] GenerateNonce(int size); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsNonceGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsNonceGenerator.cs.meta new file mode 100644 index 000000000..63689cf38 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsNonceGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e292936754c9aaa498be0ade8b251d83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsNullNullCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsNullNullCipher.cs new file mode 100644 index 000000000..036e51efa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsNullNullCipher.cs @@ -0,0 +1,69 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// The cipher for TLS_NULL_WITH_NULL_NULL. + public sealed class TlsNullNullCipher + : TlsCipher + { + public static readonly TlsNullNullCipher Instance = new TlsNullNullCipher(); + + public int GetCiphertextDecodeLimit(int plaintextLimit) + { + return plaintextLimit; + } + + public int GetCiphertextEncodeLimit(int plaintextLength, int plaintextLimit) + { + return plaintextLength; + } + + public int GetPlaintextLimit(int ciphertextLimit) + { + return ciphertextLimit; + } + + public TlsEncodeResult EncodePlaintext(long seqNo, short contentType, ProtocolVersion recordVersion, + int headerAllocation, byte[] plaintext, int offset, int len) + { + byte[] result = new byte[headerAllocation + len]; + Array.Copy(plaintext, offset, result, headerAllocation, len); + return new TlsEncodeResult(result, 0, result.Length, contentType); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public TlsEncodeResult EncodePlaintext(long seqNo, short contentType, ProtocolVersion recordVersion, + int headerAllocation, ReadOnlySpan plaintext) + { + byte[] result = new byte[headerAllocation + plaintext.Length]; + plaintext.CopyTo(result.AsSpan(headerAllocation)); + return new TlsEncodeResult(result, 0, result.Length, contentType); + } +#endif + + public TlsDecodeResult DecodeCiphertext(long seqNo, short recordType, ProtocolVersion recordVersion, + byte[] ciphertext, int offset, int len) + { + return new TlsDecodeResult(ciphertext, offset, len, recordType); + } + + public void RekeyDecoder() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public void RekeyEncoder() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public bool UsesOpaqueRecordType + { + get { return false; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsNullNullCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsNullNullCipher.cs.meta new file mode 100644 index 000000000..feed14ed5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsNullNullCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fce5fd02fb8f3344f80b1f521e35837a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSecret.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSecret.cs new file mode 100644 index 000000000..5b123eac9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSecret.cs @@ -0,0 +1,86 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Interface supporting the generation of key material and other SSL/TLS secret values from PRFs. + /// + public interface TlsSecret + { + /// Calculate an HMAC with this secret's data as the key. + /// the hash algorithm to instantiate HMAC with. See + /// for values. + /// array containing the input data. + /// offset into the input array the input starts at. + /// the length of the input data. + byte[] CalculateHmac(int cryptoHashAlgorithm, byte[] buf, int off, int len); + + /// Return a new secret based on applying a PRF to this one. + /// PRF algorithm to use. + /// the label details. + /// the seed details. + /// the size (in bytes) of the secret to generate. + /// the new secret. + TlsSecret DeriveUsingPrf(int prfAlgorithm, string label, byte[] seed, int length); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + TlsSecret DeriveUsingPrf(int prfAlgorithm, ReadOnlySpan label, ReadOnlySpan seed, int length); +#endif + + /// Destroy the internal state of the secret. + /// + /// After this call, any attempt to use the will result in an + /// being thrown. + /// + void Destroy(); + + /// Return an encrypted copy of the data this secret is based on. + /// the encryptor to use for protecting the internal data. + /// an encrypted copy of this secret's internal data. + /// + byte[] Encrypt(TlsEncryptor encryptor); + + /// Return the internal data from this secret. + /// + /// The does not keep a copy of the data. After this call, any attempt to use the + /// will result in an being thrown. + /// + /// the secret's internal data. + byte[] Extract(); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + void ExtractTo(Span output); +#endif + + /// RFC 5869 HKDF-Expand function, with this secret's data as the pseudo-random key ('prk'). + /// the hash algorithm to instantiate HMAC with. See + /// for values. + /// optional context and application specific information (can be zero-length). + /// length of output keying material in octets. + /// output keying material (of 'length' octets). + TlsSecret HkdfExpand(int cryptoHashAlgorithm, byte[] info, int length); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + TlsSecret HkdfExpand(int cryptoHashAlgorithm, ReadOnlySpan info, int length); +#endif + + /// RFC 5869 HKDF-Extract function, with this secret's data as the 'salt'. + /// + /// The does not keep a copy of the data. After this call, any attempt to use + /// the will result in an being thrown. + /// + /// the hash algorithm to instantiate HMAC with. See + /// for values. + /// input keying material. + /// a pseudo-random key (of HashLen octets). + TlsSecret HkdfExtract(int cryptoHashAlgorithm, TlsSecret ikm); + + bool IsAlive(); + + int Length { get; } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSecret.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSecret.cs.meta new file mode 100644 index 000000000..55ec4dd11 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSecret.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4e39c775fcfbb9b4c97ffd2b5936c1b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSigner.cs new file mode 100644 index 000000000..2648aa554 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSigner.cs @@ -0,0 +1,23 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Base interface for a TLS signer that works on raw message digests. + public interface TlsSigner + { + /// Generate an encoded signature based on the passed in hash. + /// the signature algorithm to use. + /// the hash calculated for the signature. + /// an encoded signature. + /// in case of an exception processing the hash. + byte[] GenerateRawSignature(SignatureAndHashAlgorithm algorithm, byte[] hash); + + /// + TlsStreamSigner GetStreamSigner(SignatureAndHashAlgorithm algorithm); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSigner.cs.meta new file mode 100644 index 000000000..75a011a61 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 722c5a045f708ec46a6fe0024301ed9b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrp6Client.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrp6Client.cs new file mode 100644 index 000000000..edb97e9a9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrp6Client.cs @@ -0,0 +1,28 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Basic interface for an SRP-6 client implementation. + public interface TlsSrp6Client + { + /// Generates the secret S given the server's credentials + /// The server's credentials + /// Client's verification message for the server + /// If server's credentials are invalid + BigInteger CalculateSecret(BigInteger serverB); + + /// Generates client's credentials given the client's salt, identity and password + /// The salt used in the client's verifier. + /// The user's identity (eg. username) + /// The user's password + /// Client's public value to send to server + BigInteger GenerateClientCredentials(byte[] salt, byte[] identity, byte[] password); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrp6Client.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrp6Client.cs.meta new file mode 100644 index 000000000..9e0a08e71 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrp6Client.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f5e0a78d0c33a7b46bf073d622ce8aa5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrp6Server.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrp6Server.cs new file mode 100644 index 000000000..59cf43fa9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrp6Server.cs @@ -0,0 +1,26 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Basic interface for an SRP-6 server implementation. + public interface TlsSrp6Server + { + /// Generates the server's credentials that are to be sent to the client. + /// The server's public value to the client + BigInteger GenerateServerCredentials(); + + /// Processes the client's credentials. If valid the shared secret is generated and returned. + /// + /// The client's credentials. + /// A shared secret . + /// If client's credentials are invalid. + BigInteger CalculateSecret(BigInteger clientA); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrp6Server.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrp6Server.cs.meta new file mode 100644 index 000000000..f9654000d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrp6Server.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0286faaac0e21c84584a433cdd51b2e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrp6VerifierGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrp6VerifierGenerator.cs new file mode 100644 index 000000000..67a6d7700 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrp6VerifierGenerator.cs @@ -0,0 +1,21 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Base interface for a generator for SRP-6 verifiers. + public interface TlsSrp6VerifierGenerator + { + /// Creates a new SRP-6 verifier value. + /// The salt to use, generally should be large and random + /// The user's identifying information (eg. username) + /// The user's password + /// A new verifier for use in future SRP authentication + BigInteger GenerateVerifier(byte[] salt, byte[] identity, byte[] password); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrp6VerifierGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrp6VerifierGenerator.cs.meta new file mode 100644 index 000000000..b344f225b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrp6VerifierGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c308a1b32bce1b3498f0c720f05faaa0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrpConfig.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrpConfig.cs new file mode 100644 index 000000000..875c77c1d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrpConfig.cs @@ -0,0 +1,30 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Basic config for SRP. + public class TlsSrpConfig + { + protected BigInteger[] m_explicitNG; + + /// Return the (N, g) values used in SRP-6. + /// (N, g) as a BigInteger array (N=[0], g=[1]). + public BigInteger[] GetExplicitNG() + { + return (BigInteger[])m_explicitNG.Clone(); + } + + /// Set the (N, g) values used for SRP-6. + /// (N, g) as a BigInteger array (N=[0], g=[1]). + public void SetExplicitNG(BigInteger[] explicitNG) + { + this.m_explicitNG = (BigInteger[])explicitNG.Clone(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrpConfig.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrpConfig.cs.meta new file mode 100644 index 000000000..ed851fa76 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsSrpConfig.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b15b1dce25f5404686b581341e096e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsStreamSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsStreamSigner.cs new file mode 100644 index 000000000..a3a68ed42 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsStreamSigner.cs @@ -0,0 +1,18 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + public interface TlsStreamSigner + { + /// + Stream Stream { get; } + + /// + byte[] GetSignature(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsStreamSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsStreamSigner.cs.meta new file mode 100644 index 000000000..5c8849dd2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsStreamSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 797aa8e999ffbbb47ab40534b9faaa4b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsStreamVerifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsStreamVerifier.cs new file mode 100644 index 000000000..7e77f88f0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsStreamVerifier.cs @@ -0,0 +1,18 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + public interface TlsStreamVerifier + { + /// + Stream Stream { get; } + + /// + bool IsVerified(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsStreamVerifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsStreamVerifier.cs.meta new file mode 100644 index 000000000..aae9c1708 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsStreamVerifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43710294a7037e440a255b334cd4df15 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsVerifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsVerifier.cs new file mode 100644 index 000000000..8e573ba6f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsVerifier.cs @@ -0,0 +1,24 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto +{ + /// Base interface for a TLS verifier that works with signatures and either raw message digests, or entire + /// messages. + public interface TlsVerifier + { + /// + TlsStreamVerifier GetStreamVerifier(DigitallySigned digitallySigned); + + /// Return true if the passed in signature and hash represent a real signature. + /// the signature object containing the signature to be verified. + /// the hash calculated for the signature. + /// true if signature verifies, false otherwise. + /// in case of an exception verifying signature. + bool VerifyRawSignature(DigitallySigned digitallySigned, byte[] hash); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsVerifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsVerifier.cs.meta new file mode 100644 index 000000000..f583fbad8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/TlsVerifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b4cfe1edea332bb4fb794e2376baeea8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl.meta new file mode 100644 index 000000000..408b50910 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a390784241d998448978f28531769b83 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/AbstractTlsCrypto.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/AbstractTlsCrypto.cs new file mode 100644 index 000000000..273eaa35c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/AbstractTlsCrypto.cs @@ -0,0 +1,101 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl +{ + /// Base class for a TlsCrypto implementation that provides some needed methods from elsewhere in the impl + /// package. + public abstract class AbstractTlsCrypto + : TlsCrypto + { + public abstract bool HasAnyStreamVerifiers(IList signatureAndHashAlgorithms); + + public abstract bool HasAnyStreamVerifiersLegacy(short[] clientCertificateTypes); + + public abstract bool HasCryptoHashAlgorithm(int cryptoHashAlgorithm); + + public abstract bool HasCryptoSignatureAlgorithm(int cryptoSignatureAlgorithm); + + public abstract bool HasDHAgreement(); + + public abstract bool HasECDHAgreement(); + + public abstract bool HasEncryptionAlgorithm(int encryptionAlgorithm); + + public abstract bool HasHkdfAlgorithm(int cryptoHashAlgorithm); + + public abstract bool HasMacAlgorithm(int macAlgorithm); + + public abstract bool HasNamedGroup(int namedGroup); + + public abstract bool HasRsaEncryption(); + + public abstract bool HasSignatureAlgorithm(short signatureAlgorithm); + + public abstract bool HasSignatureAndHashAlgorithm(SignatureAndHashAlgorithm sigAndHashAlgorithm); + + public abstract bool HasSignatureScheme(int signatureScheme); + + public abstract bool HasSrpAuthentication(); + + public abstract TlsSecret CreateSecret(byte[] data); + + public abstract TlsSecret GenerateRsaPreMasterSecret(ProtocolVersion clientVersion); + + public abstract SecureRandom SecureRandom { get; } + + public virtual TlsCertificate CreateCertificate(byte[] encoding) + { + return CreateCertificate(CertificateType.X509, encoding); + } + + public abstract TlsCertificate CreateCertificate(short type, byte[] encoding); + + public abstract TlsCipher CreateCipher(TlsCryptoParameters cryptoParams, int encryptionAlgorithm, int macAlgorithm); + + public abstract TlsDHDomain CreateDHDomain(TlsDHConfig dhConfig); + + public abstract TlsECDomain CreateECDomain(TlsECConfig ecConfig); + + public virtual TlsSecret AdoptSecret(TlsSecret secret) + { + // TODO[tls] Need an alternative that doesn't require AbstractTlsSecret (which holds literal data) + if (secret is AbstractTlsSecret) + { + AbstractTlsSecret sec = (AbstractTlsSecret)secret; + + return CreateSecret(sec.CopyData()); + } + + throw new ArgumentException("unrecognized TlsSecret - cannot copy data: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(secret)); + } + + public abstract TlsHash CreateHash(int cryptoHashAlgorithm); + + public abstract TlsHmac CreateHmac(int macAlgorithm); + + public abstract TlsHmac CreateHmacForHash(int cryptoHashAlgorithm); + + public abstract TlsNonceGenerator CreateNonceGenerator(byte[] additionalSeedMaterial); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public abstract TlsNonceGenerator CreateNonceGenerator(ReadOnlySpan additionalSeedMaterial); +#endif + + public abstract TlsSrp6Client CreateSrp6Client(TlsSrpConfig srpConfig); + + public abstract TlsSrp6Server CreateSrp6Server(TlsSrpConfig srpConfig, BigInteger srpVerifier); + + public abstract TlsSrp6VerifierGenerator CreateSrp6VerifierGenerator(TlsSrpConfig srpConfig); + + public abstract TlsSecret HkdfInit(int cryptoHashAlgorithm); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/AbstractTlsCrypto.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/AbstractTlsCrypto.cs.meta new file mode 100644 index 000000000..e8ccfe2a5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/AbstractTlsCrypto.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01c572cfea3ad83408d4768c397b75cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/AbstractTlsSecret.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/AbstractTlsSecret.cs new file mode 100644 index 000000000..e7dd918d6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/AbstractTlsSecret.cs @@ -0,0 +1,144 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl +{ + /// Base class for a TlsSecret implementation which captures common code and fields. + public abstract class AbstractTlsSecret + : TlsSecret + { + protected static byte[] CopyData(AbstractTlsSecret other) + { + return other.CopyData(); + } + + protected byte[] m_data; + + /// Base constructor. + /// the byte[] making up the secret value. + protected AbstractTlsSecret(byte[] data) + { + m_data = data; + } + + protected virtual void CheckAlive() + { + if (m_data == null) + throw new InvalidOperationException("Secret has already been extracted or destroyed"); + } + + protected abstract AbstractTlsCrypto Crypto { get; } + + public virtual byte[] CalculateHmac(int cryptoHashAlgorithm, byte[] buf, int off, int len) + { + lock (this) + { + CheckAlive(); + + TlsHmac hmac = Crypto.CreateHmacForHash(cryptoHashAlgorithm); + hmac.SetKey(m_data, 0, m_data.Length); + hmac.Update(buf, off, len); + return hmac.CalculateMac(); + } + } + + public abstract TlsSecret DeriveUsingPrf(int prfAlgorithm, string label, byte[] seed, int length); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public abstract TlsSecret DeriveUsingPrf(int prfAlgorithm, ReadOnlySpan label, ReadOnlySpan seed, + int length); +#endif + + public virtual void Destroy() + { + lock (this) + { + if (m_data != null) + { + // TODO Is there a way to ensure the data is really overwritten? + Array.Clear(m_data, 0, m_data.Length); + m_data = null; + } + } + } + + /// + public virtual byte[] Encrypt(TlsEncryptor encryptor) + { + lock (this) + { + CheckAlive(); + + return encryptor.Encrypt(m_data, 0, m_data.Length); + } + } + + public virtual byte[] Extract() + { + lock (this) + { + CheckAlive(); + + byte[] result = m_data; + m_data = null; + return result; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual void ExtractTo(Span output) + { + lock (this) + { + CheckAlive(); + + m_data.CopyTo(output); + m_data = null; + } + } +#endif + + public abstract TlsSecret HkdfExpand(int cryptoHashAlgorithm, byte[] info, int length); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public abstract TlsSecret HkdfExpand(int cryptoHashAlgorithm, ReadOnlySpan info, int length); +#endif + + public abstract TlsSecret HkdfExtract(int cryptoHashAlgorithm, TlsSecret ikm); + + public virtual bool IsAlive() + { + lock (this) + { + return null != m_data; + } + } + + public virtual int Length + { + get + { + lock (this) + { + CheckAlive(); + + return m_data.Length; + } + } + } + + internal virtual byte[] CopyData() + { + lock (this) + { + return Arrays.Clone(m_data); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/AbstractTlsSecret.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/AbstractTlsSecret.cs.meta new file mode 100644 index 000000000..8e446cedf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/AbstractTlsSecret.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4fa041baff628d54c99f0e0391c2404c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/LegacyTls13Verifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/LegacyTls13Verifier.cs new file mode 100644 index 000000000..e09686507 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/LegacyTls13Verifier.cs @@ -0,0 +1,64 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl +{ + public sealed class LegacyTls13Verifier + : TlsVerifier + { + private readonly int m_signatureScheme; + private readonly Tls13Verifier m_tls13Verifier; + + public LegacyTls13Verifier(int signatureScheme, Tls13Verifier tls13Verifier) + { + if (!TlsUtilities.IsValidUint16(signatureScheme)) + throw new ArgumentException("signatureScheme"); + if (tls13Verifier == null) + throw new ArgumentNullException("tls13Verifier"); + + this.m_signatureScheme = signatureScheme; + this.m_tls13Verifier = tls13Verifier; + } + + public TlsStreamVerifier GetStreamVerifier(DigitallySigned digitallySigned) + { + SignatureAndHashAlgorithm algorithm = digitallySigned.Algorithm; + if (algorithm == null || SignatureScheme.From(algorithm) != m_signatureScheme) + throw new InvalidOperationException("Invalid algorithm: " + algorithm); + + return new TlsStreamVerifierImpl(m_tls13Verifier, digitallySigned.Signature); + } + + public bool VerifyRawSignature(DigitallySigned digitallySigned, byte[] hash) + { + throw new NotSupportedException(); + } + + private class TlsStreamVerifierImpl + : TlsStreamVerifier + { + private readonly Tls13Verifier m_tls13Verifier; + private readonly byte[] m_signature; + + internal TlsStreamVerifierImpl(Tls13Verifier tls13Verifier, byte[] signature) + { + this.m_tls13Verifier = tls13Verifier; + this.m_signature = signature; + } + + public Stream Stream + { + get { return m_tls13Verifier.Stream; } + } + + public bool IsVerified() + { + return m_tls13Verifier.VerifySignature(m_signature); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/LegacyTls13Verifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/LegacyTls13Verifier.cs.meta new file mode 100644 index 000000000..9d9891c89 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/LegacyTls13Verifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9382149a5067cb443bc964d772eb882c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/RsaUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/RsaUtilities.cs new file mode 100644 index 000000000..00828fa32 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/RsaUtilities.cs @@ -0,0 +1,140 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl +{ + public abstract class RsaUtilities + { + private static readonly byte[] RSAPSSParams_256_A, RSAPSSParams_384_A, RSAPSSParams_512_A; + private static readonly byte[] RSAPSSParams_256_B, RSAPSSParams_384_B, RSAPSSParams_512_B; + + static RsaUtilities() + { + /* + * RFC 4055 + */ + + AlgorithmIdentifier sha256Identifier_A = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha256); + AlgorithmIdentifier sha384Identifier_A = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha384); + AlgorithmIdentifier sha512Identifier_A = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha512); + AlgorithmIdentifier sha256Identifier_B = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha256, DerNull.Instance); + AlgorithmIdentifier sha384Identifier_B = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha384, DerNull.Instance); + AlgorithmIdentifier sha512Identifier_B = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha512, DerNull.Instance); + + AlgorithmIdentifier mgf1SHA256Identifier_A = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdMgf1, sha256Identifier_A); + AlgorithmIdentifier mgf1SHA384Identifier_A = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdMgf1, sha384Identifier_A); + AlgorithmIdentifier mgf1SHA512Identifier_A = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdMgf1, sha512Identifier_A); + AlgorithmIdentifier mgf1SHA256Identifier_B = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdMgf1, sha256Identifier_B); + AlgorithmIdentifier mgf1SHA384Identifier_B = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdMgf1, sha384Identifier_B); + AlgorithmIdentifier mgf1SHA512Identifier_B = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdMgf1, sha512Identifier_B); + + DerInteger sha256Size = new DerInteger(TlsCryptoUtilities.GetHashOutputSize(CryptoHashAlgorithm.sha256)); + DerInteger sha384Size = new DerInteger(TlsCryptoUtilities.GetHashOutputSize(CryptoHashAlgorithm.sha384)); + DerInteger sha512Size = new DerInteger(TlsCryptoUtilities.GetHashOutputSize(CryptoHashAlgorithm.sha512)); + + DerInteger trailerField = new DerInteger(1); + + try + { + RSAPSSParams_256_A = new RsassaPssParameters(sha256Identifier_A, mgf1SHA256Identifier_A, sha256Size, trailerField) + .GetEncoded(Asn1Encodable.Der); + RSAPSSParams_384_A = new RsassaPssParameters(sha384Identifier_A, mgf1SHA384Identifier_A, sha384Size, trailerField) + .GetEncoded(Asn1Encodable.Der); + RSAPSSParams_512_A = new RsassaPssParameters(sha512Identifier_A, mgf1SHA512Identifier_A, sha512Size, trailerField) + .GetEncoded(Asn1Encodable.Der); + RSAPSSParams_256_B = new RsassaPssParameters(sha256Identifier_B, mgf1SHA256Identifier_B, sha256Size, trailerField) + .GetEncoded(Asn1Encodable.Der); + RSAPSSParams_384_B = new RsassaPssParameters(sha384Identifier_B, mgf1SHA384Identifier_B, sha384Size, trailerField) + .GetEncoded(Asn1Encodable.Der); + RSAPSSParams_512_B = new RsassaPssParameters(sha512Identifier_B, mgf1SHA512Identifier_B, sha512Size, trailerField) + .GetEncoded(Asn1Encodable.Der); + } + catch (IOException e) + { + throw new InvalidOperationException(e.Message); + } + } + + public static bool SupportsPkcs1(AlgorithmIdentifier pubKeyAlgID) + { + DerObjectIdentifier oid = pubKeyAlgID.Algorithm; + return PkcsObjectIdentifiers.RsaEncryption.Equals(oid) + || X509ObjectIdentifiers.IdEARsa.Equals(oid); + } + + public static bool SupportsPss_Pss(short signatureAlgorithm, AlgorithmIdentifier pubKeyAlgID) + { + DerObjectIdentifier oid = pubKeyAlgID.Algorithm; + if (!PkcsObjectIdentifiers.IdRsassaPss.Equals(oid)) + return false; + + /* + * TODO ASN.1 NULL shouldn't really be allowed here; it's a workaround for e.g. Oracle JDK + * 1.8.0_241, where the X.509 certificate implementation adds the NULL when re-encoding the + * original parameters. It appears it was fixed at some later date (OpenJDK 12.0.2 does not + * have the issue), but not sure exactly when. + */ + Asn1Encodable pssParams = pubKeyAlgID.Parameters; + if (null == pssParams || pssParams is DerNull) + { + switch (signatureAlgorithm) + { + case SignatureAlgorithm.rsa_pss_pss_sha256: + case SignatureAlgorithm.rsa_pss_pss_sha384: + case SignatureAlgorithm.rsa_pss_pss_sha512: + return true; + default: + return false; + } + } + + byte[] encoded; + try + { + encoded = pssParams.ToAsn1Object().GetEncoded(Asn1Encodable.Der); + } + catch (Exception) + { + return false; + } + + byte[] expected_A, expected_B; + switch (signatureAlgorithm) + { + case SignatureAlgorithm.rsa_pss_pss_sha256: + expected_A = RSAPSSParams_256_A; + expected_B = RSAPSSParams_256_B; + break; + case SignatureAlgorithm.rsa_pss_pss_sha384: + expected_A = RSAPSSParams_384_A; + expected_B = RSAPSSParams_384_B; + break; + case SignatureAlgorithm.rsa_pss_pss_sha512: + expected_A = RSAPSSParams_512_A; + expected_B = RSAPSSParams_512_B; + break; + default: + return false; + } + + return Arrays.AreEqual(expected_A, encoded) + || Arrays.AreEqual(expected_B, encoded); + } + + public static bool SupportsPss_Rsae(AlgorithmIdentifier pubKeyAlgID) + { + DerObjectIdentifier oid = pubKeyAlgID.Algorithm; + return PkcsObjectIdentifiers.RsaEncryption.Equals(oid); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/RsaUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/RsaUtilities.cs.meta new file mode 100644 index 000000000..29d96822a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/RsaUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 09227be9011742841a7d3a60ee137368 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsAeadCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsAeadCipher.cs new file mode 100644 index 000000000..6a276e7b2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsAeadCipher.cs @@ -0,0 +1,497 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl +{ + /// A generic TLS 1.2 AEAD cipher. + public class TlsAeadCipher + : TlsCipher + { + public const int AEAD_CCM = 1; + public const int AEAD_CHACHA20_POLY1305 = 2; + public const int AEAD_GCM = 3; + + private const int NONCE_RFC5288 = 1; + private const int NONCE_RFC7905 = 2; + + protected readonly TlsCryptoParameters m_cryptoParams; + protected readonly int m_keySize; + protected readonly int m_macSize; + protected readonly int m_fixed_iv_length; + protected readonly int m_record_iv_length; + + protected readonly TlsAeadCipherImpl m_decryptCipher, m_encryptCipher; + protected readonly byte[] m_decryptNonce, m_encryptNonce; + + protected readonly bool m_isTlsV13; + protected readonly int m_nonceMode; + + /// + public TlsAeadCipher(TlsCryptoParameters cryptoParams, TlsAeadCipherImpl encryptCipher, + TlsAeadCipherImpl decryptCipher, int keySize, int macSize, int aeadType) + { + SecurityParameters securityParameters = cryptoParams.SecurityParameters; + ProtocolVersion negotiatedVersion = securityParameters.NegotiatedVersion; + + if (!TlsImplUtilities.IsTlsV12(negotiatedVersion)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + this.m_isTlsV13 = TlsImplUtilities.IsTlsV13(negotiatedVersion); + this.m_nonceMode = GetNonceMode(m_isTlsV13, aeadType); + + switch (m_nonceMode) + { + case NONCE_RFC5288: + this.m_fixed_iv_length = 4; + this.m_record_iv_length = 8; + break; + case NONCE_RFC7905: + this.m_fixed_iv_length = 12; + this.m_record_iv_length = 0; + break; + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + this.m_cryptoParams = cryptoParams; + this.m_keySize = keySize; + this.m_macSize = macSize; + + this.m_decryptCipher = decryptCipher; + this.m_encryptCipher = encryptCipher; + + this.m_decryptNonce = new byte[m_fixed_iv_length]; + this.m_encryptNonce = new byte[m_fixed_iv_length]; + + bool isServer = cryptoParams.IsServer; + if (m_isTlsV13) + { + RekeyCipher(securityParameters, decryptCipher, m_decryptNonce, !isServer); + RekeyCipher(securityParameters, encryptCipher, m_encryptNonce, isServer); + return; + } + + int keyBlockSize = (2 * keySize) + (2 * m_fixed_iv_length); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span keyBlock = keyBlockSize <= 512 + ? stackalloc byte[keyBlockSize] + : new byte[keyBlockSize]; + TlsImplUtilities.CalculateKeyBlock(cryptoParams, keyBlock); + + if (isServer) + { + decryptCipher.SetKey(keyBlock[..keySize]); keyBlock = keyBlock[keySize..]; + encryptCipher.SetKey(keyBlock[..keySize]); keyBlock = keyBlock[keySize..]; + + keyBlock[..m_fixed_iv_length].CopyTo(m_decryptNonce); keyBlock = keyBlock[m_fixed_iv_length..]; + keyBlock[..m_fixed_iv_length].CopyTo(m_encryptNonce); keyBlock = keyBlock[m_fixed_iv_length..]; + } + else + { + encryptCipher.SetKey(keyBlock[..keySize]); keyBlock = keyBlock[keySize..]; + decryptCipher.SetKey(keyBlock[..keySize]); keyBlock = keyBlock[keySize..]; + + keyBlock[..m_fixed_iv_length].CopyTo(m_encryptNonce); keyBlock = keyBlock[m_fixed_iv_length..]; + keyBlock[..m_fixed_iv_length].CopyTo(m_decryptNonce); keyBlock = keyBlock[m_fixed_iv_length..]; + } + + if (!keyBlock.IsEmpty) + throw new TlsFatalAlert(AlertDescription.internal_error); +#else + byte[] keyBlock = TlsImplUtilities.CalculateKeyBlock(cryptoParams, keyBlockSize); + int pos = 0; + + if (isServer) + { + decryptCipher.SetKey(keyBlock, pos, keySize); pos += keySize; + encryptCipher.SetKey(keyBlock, pos, keySize); pos += keySize; + + Array.Copy(keyBlock, pos, m_decryptNonce, 0, m_fixed_iv_length); pos += m_fixed_iv_length; + Array.Copy(keyBlock, pos, m_encryptNonce, 0, m_fixed_iv_length); pos += m_fixed_iv_length; + } + else + { + encryptCipher.SetKey(keyBlock, pos, keySize); pos += keySize; + decryptCipher.SetKey(keyBlock, pos, keySize); pos += keySize; + + Array.Copy(keyBlock, pos, m_encryptNonce, 0, m_fixed_iv_length); pos += m_fixed_iv_length; + Array.Copy(keyBlock, pos, m_decryptNonce, 0, m_fixed_iv_length); pos += m_fixed_iv_length; + } + + if (pos != keyBlockSize) + throw new TlsFatalAlert(AlertDescription.internal_error); +#endif + + int nonceLength = m_fixed_iv_length + m_record_iv_length; + + // NOTE: Ensure dummy nonce is not part of the generated sequence(s) + byte[] dummyNonce = new byte[nonceLength]; + dummyNonce[0] = (byte)~m_encryptNonce[0]; + dummyNonce[1] = (byte)~m_decryptNonce[1]; + + encryptCipher.Init(dummyNonce, macSize, null); + decryptCipher.Init(dummyNonce, macSize, null); + } + + public virtual int GetCiphertextDecodeLimit(int plaintextLimit) + { + return plaintextLimit + m_macSize + m_record_iv_length + (m_isTlsV13 ? 1 : 0); + } + + public virtual int GetCiphertextEncodeLimit(int plaintextLength, int plaintextLimit) + { + int innerPlaintextLimit = plaintextLength; + if (m_isTlsV13) + { + // TODO[tls13] Add support for padding + int maxPadding = 0; + + innerPlaintextLimit = 1 + System.Math.Min(plaintextLimit, plaintextLength + maxPadding); + } + + return innerPlaintextLimit + m_macSize + m_record_iv_length; + } + + public virtual int GetPlaintextLimit(int ciphertextLimit) + { + return ciphertextLimit - m_macSize - m_record_iv_length - (m_isTlsV13 ? 1 : 0); + } + + public virtual TlsEncodeResult EncodePlaintext(long seqNo, short contentType, ProtocolVersion recordVersion, + int headerAllocation, byte[] plaintext, int plaintextOffset, int plaintextLength) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return EncodePlaintext(seqNo, contentType, recordVersion, headerAllocation, + plaintext.AsSpan(plaintextOffset, plaintextLength)); +#else + byte[] nonce = new byte[m_encryptNonce.Length + m_record_iv_length]; + + switch (m_nonceMode) + { + case NONCE_RFC5288: + Array.Copy(m_encryptNonce, 0, nonce, 0, m_encryptNonce.Length); + // RFC 5288/6655: The nonce_explicit MAY be the 64-bit sequence number. + TlsUtilities.WriteUint64(seqNo, nonce, m_encryptNonce.Length); + break; + case NONCE_RFC7905: + TlsUtilities.WriteUint64(seqNo, nonce, nonce.Length - 8); + for (int i = 0; i < m_encryptNonce.Length; ++i) + { + nonce[i] ^= m_encryptNonce[i]; + } + break; + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + int extraLength = m_isTlsV13 ? 1 : 0; + + // TODO[tls13] If we support adding padding to TLSInnerPlaintext, this will need review + int encryptionLength = m_encryptCipher.GetOutputSize(plaintextLength + extraLength); + int ciphertextLength = m_record_iv_length + encryptionLength; + + byte[] output = new byte[headerAllocation + ciphertextLength]; + int outputPos = headerAllocation; + + if (m_record_iv_length != 0) + { + Array.Copy(nonce, nonce.Length - m_record_iv_length, output, outputPos, m_record_iv_length); + outputPos += m_record_iv_length; + } + + short recordType = m_isTlsV13 ? ContentType.application_data : contentType; + + byte[] additionalData = GetAdditionalData(seqNo, recordType, recordVersion, ciphertextLength, + plaintextLength); + + try + { + Array.Copy(plaintext, plaintextOffset, output, outputPos, plaintextLength); + if (m_isTlsV13) + { + output[outputPos + plaintextLength] = (byte)contentType; + } + + m_encryptCipher.Init(nonce, m_macSize, additionalData); + outputPos += m_encryptCipher.DoFinal(output, outputPos, plaintextLength + extraLength, output, + outputPos); + } + catch (IOException e) + { + throw e; + } + catch (Exception e) + { + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + + if (outputPos != output.Length) + { + // NOTE: The additional data mechanism for AEAD ciphers requires exact output size prediction. + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + return new TlsEncodeResult(output, 0, output.Length, recordType); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual TlsEncodeResult EncodePlaintext(long seqNo, short contentType, ProtocolVersion recordVersion, + int headerAllocation, ReadOnlySpan plaintext) + { + byte[] nonce = new byte[m_encryptNonce.Length + m_record_iv_length]; + + switch (m_nonceMode) + { + case NONCE_RFC5288: + Array.Copy(m_encryptNonce, 0, nonce, 0, m_encryptNonce.Length); + // RFC 5288/6655: The nonce_explicit MAY be the 64-bit sequence number. + TlsUtilities.WriteUint64(seqNo, nonce, m_encryptNonce.Length); + break; + case NONCE_RFC7905: + TlsUtilities.WriteUint64(seqNo, nonce, nonce.Length - 8); + for (int i = 0; i < m_encryptNonce.Length; ++i) + { + nonce[i] ^= m_encryptNonce[i]; + } + break; + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + int extraLength = m_isTlsV13 ? 1 : 0; + + // TODO[tls13] If we support adding padding to TLSInnerPlaintext, this will need review + int encryptionLength = m_encryptCipher.GetOutputSize(plaintext.Length + extraLength); + int ciphertextLength = m_record_iv_length + encryptionLength; + + byte[] output = new byte[headerAllocation + ciphertextLength]; + int outputPos = headerAllocation; + + if (m_record_iv_length != 0) + { + Array.Copy(nonce, nonce.Length - m_record_iv_length, output, outputPos, m_record_iv_length); + outputPos += m_record_iv_length; + } + + short recordType = m_isTlsV13 ? ContentType.application_data : contentType; + + byte[] additionalData = GetAdditionalData(seqNo, recordType, recordVersion, ciphertextLength, + plaintext.Length); + + try + { + plaintext.CopyTo(output.AsSpan(outputPos)); + if (m_isTlsV13) + { + output[outputPos + plaintext.Length] = (byte)contentType; + } + + m_encryptCipher.Init(nonce, m_macSize, additionalData); + outputPos += m_encryptCipher.DoFinal(output, outputPos, plaintext.Length + extraLength, output, + outputPos); + } + catch (IOException e) + { + throw e; + } + catch (Exception e) + { + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + + if (outputPos != output.Length) + { + // NOTE: The additional data mechanism for AEAD ciphers requires exact output size prediction. + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + return new TlsEncodeResult(output, 0, output.Length, recordType); + } +#endif + + public virtual TlsDecodeResult DecodeCiphertext(long seqNo, short recordType, ProtocolVersion recordVersion, + byte[] ciphertext, int ciphertextOffset, int ciphertextLength) + { + if (GetPlaintextLimit(ciphertextLength) < 0) + throw new TlsFatalAlert(AlertDescription.decode_error); + + byte[] nonce = new byte[m_decryptNonce.Length + m_record_iv_length]; + + switch (m_nonceMode) + { + case NONCE_RFC5288: + Array.Copy(m_decryptNonce, 0, nonce, 0, m_decryptNonce.Length); + Array.Copy(ciphertext, ciphertextOffset, nonce, nonce.Length - m_record_iv_length, + m_record_iv_length); + break; + case NONCE_RFC7905: + TlsUtilities.WriteUint64(seqNo, nonce, nonce.Length - 8); + for (int i = 0; i < m_decryptNonce.Length; ++i) + { + nonce[i] ^= m_decryptNonce[i]; + } + break; + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + int encryptionOffset = ciphertextOffset + m_record_iv_length; + int encryptionLength = ciphertextLength - m_record_iv_length; + int plaintextLength = m_decryptCipher.GetOutputSize(encryptionLength); + + byte[] additionalData = GetAdditionalData(seqNo, recordType, recordVersion, ciphertextLength, + plaintextLength); + + int outputPos; + try + { + m_decryptCipher.Init(nonce, m_macSize, additionalData); + outputPos = m_decryptCipher.DoFinal(ciphertext, encryptionOffset, encryptionLength, ciphertext, + encryptionOffset); + } + catch (TlsFatalAlert fatalAlert) + { + if (AlertDescription.bad_record_mac == fatalAlert.AlertDescription) + { + m_decryptCipher.Reset(); + } + throw fatalAlert; + } + catch (IOException e) + { + throw e; + } + catch (Exception e) + { + m_decryptCipher.Reset(); + throw new TlsFatalAlert(AlertDescription.bad_record_mac, e); + } + + if (outputPos != plaintextLength) + { + // NOTE: The additional data mechanism for AEAD ciphers requires exact output size prediction. + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + short contentType = recordType; + if (m_isTlsV13) + { + // Strip padding and read true content type from TLSInnerPlaintext + int pos = plaintextLength; + for (;;) + { + if (--pos < 0) + throw new TlsFatalAlert(AlertDescription.unexpected_message); + + byte octet = ciphertext[encryptionOffset + pos]; + if (0 != octet) + { + contentType = (short)(octet & 0xFF); + plaintextLength = pos; + break; + } + } + } + + return new TlsDecodeResult(ciphertext, encryptionOffset, plaintextLength, contentType); + } + + public virtual void RekeyDecoder() + { + RekeyCipher(m_cryptoParams.SecurityParameters, m_decryptCipher, m_decryptNonce, !m_cryptoParams.IsServer); + } + + public virtual void RekeyEncoder() + { + RekeyCipher(m_cryptoParams.SecurityParameters, m_encryptCipher, m_encryptNonce, m_cryptoParams.IsServer); + } + + public virtual bool UsesOpaqueRecordType + { + get { return m_isTlsV13; } + } + + protected virtual byte[] GetAdditionalData(long seqNo, short recordType, ProtocolVersion recordVersion, + int ciphertextLength, int plaintextLength) + { + if (m_isTlsV13) + { + /* + * TLSCiphertext.opaque_type || TLSCiphertext.legacy_record_version || TLSCiphertext.length + */ + byte[] additional_data = new byte[5]; + TlsUtilities.WriteUint8(recordType, additional_data, 0); + TlsUtilities.WriteVersion(recordVersion, additional_data, 1); + TlsUtilities.WriteUint16(ciphertextLength, additional_data, 3); + return additional_data; + } + else + { + /* + * seq_num + TLSCompressed.type + TLSCompressed.version + TLSCompressed.length + */ + byte[] additional_data = new byte[13]; + TlsUtilities.WriteUint64(seqNo, additional_data, 0); + TlsUtilities.WriteUint8(recordType, additional_data, 8); + TlsUtilities.WriteVersion(recordVersion, additional_data, 9); + TlsUtilities.WriteUint16(plaintextLength, additional_data, 11); + return additional_data; + } + } + + protected virtual void RekeyCipher(SecurityParameters securityParameters, TlsAeadCipherImpl cipher, + byte[] nonce, bool serverSecret) + { + if (!m_isTlsV13) + throw new TlsFatalAlert(AlertDescription.internal_error); + + TlsSecret secret = serverSecret + ? securityParameters.TrafficSecretServer + : securityParameters.TrafficSecretClient; + + // TODO[tls13] For early data, have to disable server->client + if (null == secret) + throw new TlsFatalAlert(AlertDescription.internal_error); + + Setup13Cipher(cipher, nonce, secret, securityParameters.PrfCryptoHashAlgorithm); + } + + protected virtual void Setup13Cipher(TlsAeadCipherImpl cipher, byte[] nonce, TlsSecret secret, + int cryptoHashAlgorithm) + { + byte[] key = TlsCryptoUtilities.HkdfExpandLabel(secret, cryptoHashAlgorithm, "key", + TlsUtilities.EmptyBytes, m_keySize).Extract(); + byte[] iv = TlsCryptoUtilities.HkdfExpandLabel(secret, cryptoHashAlgorithm, "iv", TlsUtilities.EmptyBytes, + m_fixed_iv_length).Extract(); + + cipher.SetKey(key, 0, m_keySize); + Array.Copy(iv, 0, nonce, 0, m_fixed_iv_length); + + // NOTE: Ensure dummy nonce is not part of the generated sequence(s) + iv [0] ^= 0x80; + cipher.Init(iv, m_macSize, null); + } + + private static int GetNonceMode(bool isTLSv13, int aeadType) + { + switch (aeadType) + { + case AEAD_CCM: + case AEAD_GCM: + return isTLSv13 ? NONCE_RFC7905 : NONCE_RFC5288; + + case AEAD_CHACHA20_POLY1305: + return NONCE_RFC7905; + + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsAeadCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsAeadCipher.cs.meta new file mode 100644 index 000000000..2bf941a07 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsAeadCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2f7388a640a7c4f4abd5499763902544 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsAeadCipherImpl.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsAeadCipherImpl.cs new file mode 100644 index 000000000..936af5f76 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsAeadCipherImpl.cs @@ -0,0 +1,51 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl +{ + /// Base interface for services supporting AEAD encryption/decryption. + public interface TlsAeadCipherImpl + { + /// Set the key to be used by the AEAD cipher implementation supporting this service. + /// array holding the AEAD cipher key. + /// offset into the array the key starts at. + /// length of the key in the array. + /// + void SetKey(byte[] key, int keyOff, int keyLen); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + void SetKey(ReadOnlySpan key); +#endif + + /// Initialise the parameters for the AEAD operator. + /// the nonce. + /// MAC size in bytes. + /// any additional data to be included in the MAC calculation. + /// if the parameters are inappropriate. + void Init(byte[] nonce, int macSize, byte[] additionalData); + + /// Return the maximum size of the output for input of inputLength bytes. + /// the length (in bytes) of the proposed input. + /// the maximum size of the output. + int GetOutputSize(int inputLength); + + /// Perform the cipher encryption/decryption returning the output in output. + /// + /// Note: we have to use DoFinal() here as it is the only way to guarantee output from the underlying cipher. + /// + /// array holding input data to the cipher. + /// offset into input array data starts at. + /// length of the input data in the array. + /// array to hold the cipher output. + /// offset into output array to start saving output. + /// the amount of data written to output. + /// in case of failure. + int DoFinal(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset); + + void Reset(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsAeadCipherImpl.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsAeadCipherImpl.cs.meta new file mode 100644 index 000000000..f19a60f90 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsAeadCipherImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a4322d96b36b35849bf7ced8622476c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsBlockCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsBlockCipher.cs new file mode 100644 index 000000000..1f1feeb80 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsBlockCipher.cs @@ -0,0 +1,532 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl +{ + /// A generic TLS 1.0-1.2 block cipher. This can be used for AES or 3DES for example. + public class TlsBlockCipher + : TlsCipher + { + protected readonly TlsCryptoParameters m_cryptoParams; + protected readonly byte[] m_randomData; + protected readonly bool m_encryptThenMac; + protected readonly bool m_useExplicitIV; + protected readonly bool m_acceptExtraPadding; + protected readonly bool m_useExtraPadding; + + protected readonly TlsBlockCipherImpl m_decryptCipher, m_encryptCipher; + protected readonly TlsSuiteMac m_readMac, m_writeMac; + + /// + public TlsBlockCipher(TlsCryptoParameters cryptoParams, TlsBlockCipherImpl encryptCipher, + TlsBlockCipherImpl decryptCipher, TlsHmac clientMac, TlsHmac serverMac, int cipherKeySize) + { + SecurityParameters securityParameters = cryptoParams.SecurityParameters; + ProtocolVersion negotiatedVersion = securityParameters.NegotiatedVersion; + + if (TlsImplUtilities.IsTlsV13(negotiatedVersion)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + this.m_cryptoParams = cryptoParams; + this.m_randomData = cryptoParams.NonceGenerator.GenerateNonce(256); + + this.m_encryptThenMac = securityParameters.IsEncryptThenMac; + this.m_useExplicitIV = TlsImplUtilities.IsTlsV11(negotiatedVersion); + + this.m_acceptExtraPadding = !negotiatedVersion.IsSsl; + + /* + * Don't use variable-length padding with truncated MACs. + * + * See "Tag Size Does Matter: Attacks and Proofs for the TLS Record Protocol", Paterson, + * Ristenpart, Shrimpton. + * + * TODO[DTLS] Consider supporting in DTLS (without exceeding send limit though) + */ + this.m_useExtraPadding = securityParameters.IsExtendedPadding + && ProtocolVersion.TLSv10.IsEqualOrEarlierVersionOf(negotiatedVersion) + && (m_encryptThenMac || !securityParameters.IsTruncatedHmac); + + this.m_encryptCipher = encryptCipher; + this.m_decryptCipher = decryptCipher; + + TlsBlockCipherImpl clientCipher, serverCipher; + if (cryptoParams.IsServer) + { + clientCipher = decryptCipher; + serverCipher = encryptCipher; + } + else + { + clientCipher = encryptCipher; + serverCipher = decryptCipher; + } + + int keyBlockSize = (2 * cipherKeySize) + clientMac.MacLength + serverMac.MacLength; + + // From TLS 1.1 onwards, block ciphers don't need IVs from the key_block + if (!m_useExplicitIV) + { + keyBlockSize += clientCipher.GetBlockSize() + serverCipher.GetBlockSize(); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span keyBlock = keyBlockSize <= 512 + ? stackalloc byte[keyBlockSize] + : new byte[keyBlockSize]; + TlsImplUtilities.CalculateKeyBlock(cryptoParams, keyBlock); + + clientMac.SetKey(keyBlock[..clientMac.MacLength]); keyBlock = keyBlock[clientMac.MacLength..]; + serverMac.SetKey(keyBlock[..serverMac.MacLength]); keyBlock = keyBlock[serverMac.MacLength..]; + + clientCipher.SetKey(keyBlock[..cipherKeySize]); keyBlock = keyBlock[cipherKeySize..]; + serverCipher.SetKey(keyBlock[..cipherKeySize]); keyBlock = keyBlock[cipherKeySize..]; + + int clientIVLength = clientCipher.GetBlockSize(); + int serverIVLength = serverCipher.GetBlockSize(); + + if (m_useExplicitIV) + { + clientCipher.Init(clientIVLength <= 64 ? stackalloc byte[clientIVLength] : new byte[clientIVLength]); + serverCipher.Init(serverIVLength <= 64 ? stackalloc byte[serverIVLength] : new byte[serverIVLength]); + } + else + { + clientCipher.Init(keyBlock[..clientIVLength]); keyBlock = keyBlock[clientIVLength..]; + serverCipher.Init(keyBlock[..serverIVLength]); keyBlock = keyBlock[serverIVLength..]; + } + + if (!keyBlock.IsEmpty) + throw new TlsFatalAlert(AlertDescription.internal_error); +#else + byte[] keyBlock = TlsImplUtilities.CalculateKeyBlock(cryptoParams, keyBlockSize); + int pos = 0; + + clientMac.SetKey(keyBlock, pos, clientMac.MacLength); + pos += clientMac.MacLength; + serverMac.SetKey(keyBlock, pos, serverMac.MacLength); + pos += serverMac.MacLength; + + clientCipher.SetKey(keyBlock, pos, cipherKeySize); + pos += cipherKeySize; + serverCipher.SetKey(keyBlock, pos, cipherKeySize); + pos += cipherKeySize; + + int clientIVLength = clientCipher.GetBlockSize(); + int serverIVLength = serverCipher.GetBlockSize(); + + if (m_useExplicitIV) + { + clientCipher.Init(new byte[clientIVLength], 0, clientIVLength); + serverCipher.Init(new byte[serverIVLength], 0, serverIVLength); + } + else + { + clientCipher.Init(keyBlock, pos, clientIVLength); + pos += clientIVLength; + serverCipher.Init(keyBlock, pos, serverIVLength); + pos += serverIVLength; + } + + if (pos != keyBlockSize) + throw new TlsFatalAlert(AlertDescription.internal_error); +#endif + + if (cryptoParams.IsServer) + { + this.m_writeMac = new TlsSuiteHmac(cryptoParams, serverMac); + this.m_readMac = new TlsSuiteHmac(cryptoParams, clientMac); + } + else + { + this.m_writeMac = new TlsSuiteHmac(cryptoParams, clientMac); + this.m_readMac = new TlsSuiteHmac(cryptoParams, serverMac); + } + } + + public virtual int GetCiphertextDecodeLimit(int plaintextLimit) + { + int blockSize = m_decryptCipher.GetBlockSize(); + int macSize = m_readMac.Size; + int maxPadding = 256; + + return GetCiphertextLength(blockSize, macSize, maxPadding, plaintextLimit); + } + + public virtual int GetCiphertextEncodeLimit(int plaintextLength, int plaintextLimit) + { + int blockSize = m_encryptCipher.GetBlockSize(); + int macSize = m_writeMac.Size; + int maxPadding = m_useExtraPadding ? 256 : blockSize; + + return GetCiphertextLength(blockSize, macSize, maxPadding, plaintextLength); + } + + public virtual int GetPlaintextLimit(int ciphertextLimit) + { + int blockSize = m_encryptCipher.GetBlockSize(); + int macSize = m_writeMac.Size; + + int plaintextLimit = ciphertextLimit; + + // Leave room for the MAC, and require block-alignment + if (m_encryptThenMac) + { + plaintextLimit -= macSize; + plaintextLimit -= plaintextLimit % blockSize; + } + else + { + plaintextLimit -= plaintextLimit % blockSize; + plaintextLimit -= macSize; + } + + // Minimum 1 byte of padding + --plaintextLimit; + + // An explicit IV consumes 1 block + if (m_useExplicitIV) + { + plaintextLimit -= blockSize; + } + + return plaintextLimit; + } + + public virtual TlsEncodeResult EncodePlaintext(long seqNo, short contentType, ProtocolVersion recordVersion, + int headerAllocation, byte[] plaintext, int offset, int len) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return EncodePlaintext(seqNo, contentType, recordVersion, headerAllocation, plaintext.AsSpan(offset, len)); +#else + int blockSize = m_encryptCipher.GetBlockSize(); + int macSize = m_writeMac.Size; + + int enc_input_length = len; + if (!m_encryptThenMac) + { + enc_input_length += macSize; + } + + int padding_length = blockSize - (enc_input_length % blockSize); + if (m_useExtraPadding) + { + // Add a random number of extra blocks worth of padding + int maxExtraPadBlocks = (256 - padding_length) / blockSize; + int actualExtraPadBlocks = ChooseExtraPadBlocks(maxExtraPadBlocks); + padding_length += actualExtraPadBlocks * blockSize; + } + + int totalSize = len + macSize + padding_length; + if (m_useExplicitIV) + { + totalSize += blockSize; + } + + byte[] outBuf = new byte[headerAllocation + totalSize]; + int outOff = headerAllocation; + + if (m_useExplicitIV) + { + // Technically the explicit IV will be the encryption of this nonce + byte[] explicitIV = m_cryptoParams.NonceGenerator.GenerateNonce(blockSize); + Array.Copy(explicitIV, 0, outBuf, outOff, blockSize); + outOff += blockSize; + } + + Array.Copy(plaintext, offset, outBuf, outOff, len); + outOff += len; + + if (!m_encryptThenMac) + { + byte[] mac = m_writeMac.CalculateMac(seqNo, contentType, plaintext, offset, len); + Array.Copy(mac, 0, outBuf, outOff, mac.Length); + outOff += mac.Length; + } + + byte padByte = (byte)(padding_length - 1); + for (int i = 0; i < padding_length; ++i) + { + outBuf[outOff++] = padByte; + } + + m_encryptCipher.DoFinal(outBuf, headerAllocation, outOff - headerAllocation, outBuf, headerAllocation); + + if (m_encryptThenMac) + { + byte[] mac = m_writeMac.CalculateMac(seqNo, contentType, outBuf, headerAllocation, + outOff - headerAllocation); + Array.Copy(mac, 0, outBuf, outOff, mac.Length); + outOff += mac.Length; + } + + if (outOff != outBuf.Length) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return new TlsEncodeResult(outBuf, 0, outBuf.Length, contentType); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual TlsEncodeResult EncodePlaintext(long seqNo, short contentType, ProtocolVersion recordVersion, + int headerAllocation, ReadOnlySpan plaintext) + { + int blockSize = m_encryptCipher.GetBlockSize(); + int macSize = m_writeMac.Size; + + int enc_input_length = plaintext.Length; + if (!m_encryptThenMac) + { + enc_input_length += macSize; + } + + int padding_length = blockSize - (enc_input_length % blockSize); + if (m_useExtraPadding) + { + // Add a random number of extra blocks worth of padding + int maxExtraPadBlocks = (256 - padding_length) / blockSize; + int actualExtraPadBlocks = ChooseExtraPadBlocks(maxExtraPadBlocks); + padding_length += actualExtraPadBlocks * blockSize; + } + + int totalSize = plaintext.Length + macSize + padding_length; + if (m_useExplicitIV) + { + totalSize += blockSize; + } + + byte[] outBuf = new byte[headerAllocation + totalSize]; + int outOff = headerAllocation; + + if (m_useExplicitIV) + { + // Technically the explicit IV will be the encryption of this nonce + byte[] explicitIV = m_cryptoParams.NonceGenerator.GenerateNonce(blockSize); + Array.Copy(explicitIV, 0, outBuf, outOff, blockSize); + outOff += blockSize; + } + + plaintext.CopyTo(outBuf.AsSpan(outOff)); + outOff += plaintext.Length; + + if (!m_encryptThenMac) + { + byte[] mac = m_writeMac.CalculateMac(seqNo, contentType, plaintext); + mac.CopyTo(outBuf.AsSpan(outOff)); + outOff += mac.Length; + } + + byte padByte = (byte)(padding_length - 1); + for (int i = 0; i < padding_length; ++i) + { + outBuf[outOff++] = padByte; + } + + m_encryptCipher.DoFinal(outBuf, headerAllocation, outOff - headerAllocation, outBuf, headerAllocation); + + if (m_encryptThenMac) + { + byte[] mac = m_writeMac.CalculateMac(seqNo, contentType, outBuf, headerAllocation, + outOff - headerAllocation); + Array.Copy(mac, 0, outBuf, outOff, mac.Length); + outOff += mac.Length; + } + + if (outOff != outBuf.Length) + throw new TlsFatalAlert(AlertDescription.internal_error); + + return new TlsEncodeResult(outBuf, 0, outBuf.Length, contentType); + } +#endif + + public virtual TlsDecodeResult DecodeCiphertext(long seqNo, short recordType, ProtocolVersion recordVersion, + byte[] ciphertext, int offset, int len) + { + int blockSize = m_decryptCipher.GetBlockSize(); + int macSize = m_readMac.Size; + + int minLen = blockSize; + if (m_encryptThenMac) + { + minLen += macSize; + } + else + { + minLen = System.Math.Max(minLen, macSize + 1); + } + + if (m_useExplicitIV) + { + minLen += blockSize; + } + + if (len < minLen) + throw new TlsFatalAlert(AlertDescription.decode_error); + + int blocks_length = len; + if (m_encryptThenMac) + { + blocks_length -= macSize; + } + + if (blocks_length % blockSize != 0) + throw new TlsFatalAlert(AlertDescription.decryption_failed); + + if (m_encryptThenMac) + { + byte[] expectedMac = m_readMac.CalculateMac(seqNo, recordType, ciphertext, offset, len - macSize); + + bool checkMac = TlsUtilities.ConstantTimeAreEqual(macSize, expectedMac, 0, ciphertext, + offset + len - macSize); + if (!checkMac) + { + /* + * RFC 7366 3. The MAC SHALL be evaluated before any further processing such as + * decryption is performed, and if the MAC verification fails, then processing SHALL + * terminate immediately. For TLS, a fatal bad_record_mac MUST be generated [2]. For + * DTLS, the record MUST be discarded, and a fatal bad_record_mac MAY be generated + * [4]. This immediate response to a bad MAC eliminates any timing channels that may + * be available through the use of manipulated packet data. + */ + throw new TlsFatalAlert(AlertDescription.bad_record_mac); + } + } + + m_decryptCipher.DoFinal(ciphertext, offset, blocks_length, ciphertext, offset); + + if (m_useExplicitIV) + { + offset += blockSize; + blocks_length -= blockSize; + } + + // If there's anything wrong with the padding, this will return zero + int totalPad = CheckPaddingConstantTime(ciphertext, offset, blocks_length, blockSize, + m_encryptThenMac ? 0 : macSize); + bool badMac = (totalPad == 0); + + int dec_output_length = blocks_length - totalPad; + + if (!m_encryptThenMac) + { + dec_output_length -= macSize; + + byte[] expectedMac = m_readMac.CalculateMacConstantTime(seqNo, recordType, ciphertext, offset, + dec_output_length, blocks_length - macSize, m_randomData); + + badMac |= !TlsUtilities.ConstantTimeAreEqual(macSize, expectedMac, 0, ciphertext, + offset + dec_output_length); + } + + if (badMac) + throw new TlsFatalAlert(AlertDescription.bad_record_mac); + + return new TlsDecodeResult(ciphertext, offset, dec_output_length, recordType); + } + + public virtual void RekeyDecoder() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual void RekeyEncoder() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual bool UsesOpaqueRecordType + { + get { return false; } + } + + protected virtual int CheckPaddingConstantTime(byte[] buf, int off, int len, int blockSize, int macSize) + { + int end = off + len; + byte lastByte = buf[end - 1]; + int padlen = lastByte & 0xff; + int totalPad = padlen + 1; + + int dummyIndex = 0; + byte padDiff = 0; + + int totalPadLimit = System.Math.Min(m_acceptExtraPadding ? 256 : blockSize, len - macSize); + + if (totalPad > totalPadLimit) + { + totalPad = 0; + } + else + { + int padPos = end - totalPad; + do + { + padDiff |= (byte)(buf[padPos++] ^ lastByte); + } + while (padPos < end); + + dummyIndex = totalPad; + + if (padDiff != 0) + { + totalPad = 0; + } + } + + // Run some extra dummy checks so the number of checks is always constant + { + byte[] dummyPad = m_randomData; + while (dummyIndex < 256) + { + padDiff |= (byte)(dummyPad[dummyIndex++] ^ lastByte); + } + // Ensure the above loop is not eliminated + dummyPad[0] ^= padDiff; + } + + return totalPad; + } + + protected virtual int ChooseExtraPadBlocks(int max) + { + byte[] random = m_cryptoParams.NonceGenerator.GenerateNonce(4); + int x = (int)Pack.LE_To_UInt32(random, 0); + int n = Integers.NumberOfTrailingZeros(x); + return System.Math.Min(n, max); + } + + protected virtual int GetCiphertextLength(int blockSize, int macSize, int maxPadding, int plaintextLength) + { + int ciphertextLength = plaintextLength; + + // An explicit IV consumes 1 block + if (m_useExplicitIV) + { + ciphertextLength += blockSize; + } + + // Leave room for the MAC and (block-aligning) padding + + ciphertextLength += maxPadding; + + if (m_encryptThenMac) + { + ciphertextLength -= (ciphertextLength % blockSize); + ciphertextLength += macSize; + } + else + { + ciphertextLength += macSize; + ciphertextLength -= (ciphertextLength % blockSize); + } + + return ciphertextLength; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsBlockCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsBlockCipher.cs.meta new file mode 100644 index 000000000..1b00e434b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsBlockCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c415e360f2deee24198035c7e9dab15d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsBlockCipherImpl.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsBlockCipherImpl.cs new file mode 100644 index 000000000..39a0d3750 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsBlockCipherImpl.cs @@ -0,0 +1,52 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl +{ + /// Interface for block cipher services. + public interface TlsBlockCipherImpl + { + /// Set the key to be used by the block cipher implementation supporting this service. + /// array holding the block cipher key. + /// offset into the array the key starts at. + /// length of the key in the array. + /// + void SetKey(byte[] key, int keyOff, int keyLen); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + void SetKey(ReadOnlySpan key); +#endif + + /// Initialise the parameters for operator. + /// array holding the initialization vector (IV). + /// offset into the array the IV starts at. + /// length of the IV in the array. + /// if the parameters are inappropriate. + void Init(byte[] iv, int ivOff, int ivLen); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + void Init(ReadOnlySpan iv); +#endif + + /// Perform the cipher encryption/decryption returning the output in output. + /// + /// Note: we have to use DoFinal() here as it is the only way to guarantee output from the underlying cipher. + /// + /// array holding input data to the cipher. + /// offset into input array data starts at. + /// length of the input data in the array. + /// array to hold the cipher output. + /// offset into output array to start saving output. + /// the amount of data written to output. + /// in case of failure. + int DoFinal(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset); + + /// Return the blocksize (in bytes) of the underlying block cipher. + /// the cipher's blocksize. + int GetBlockSize(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsBlockCipherImpl.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsBlockCipherImpl.cs.meta new file mode 100644 index 000000000..f3dd78ffd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsBlockCipherImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c268b3662c094ee4796d92e5093284eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsImplUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsImplUtilities.cs new file mode 100644 index 000000000..8ae50125e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsImplUtilities.cs @@ -0,0 +1,86 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl +{ + /// Useful utility methods. + public abstract class TlsImplUtilities + { + public static bool IsSsl(TlsCryptoParameters cryptoParams) + { + return cryptoParams.ServerVersion.IsSsl; + } + + public static bool IsTlsV10(ProtocolVersion version) + { + return ProtocolVersion.TLSv10.IsEqualOrEarlierVersionOf(version.GetEquivalentTlsVersion()); + } + + public static bool IsTlsV10(TlsCryptoParameters cryptoParams) + { + return IsTlsV10(cryptoParams.ServerVersion); + } + + public static bool IsTlsV11(ProtocolVersion version) + { + return ProtocolVersion.TLSv11.IsEqualOrEarlierVersionOf(version.GetEquivalentTlsVersion()); + } + + public static bool IsTlsV11(TlsCryptoParameters cryptoParams) + { + return IsTlsV11(cryptoParams.ServerVersion); + } + + public static bool IsTlsV12(ProtocolVersion version) + { + return ProtocolVersion.TLSv12.IsEqualOrEarlierVersionOf(version.GetEquivalentTlsVersion()); + } + + public static bool IsTlsV12(TlsCryptoParameters cryptoParams) + { + return IsTlsV12(cryptoParams.ServerVersion); + } + + public static bool IsTlsV13(ProtocolVersion version) + { + return ProtocolVersion.TLSv13.IsEqualOrEarlierVersionOf(version.GetEquivalentTlsVersion()); + } + + public static bool IsTlsV13(TlsCryptoParameters cryptoParams) + { + return IsTlsV13(cryptoParams.ServerVersion); + } + + public static byte[] CalculateKeyBlock(TlsCryptoParameters cryptoParams, int length) + { + SecurityParameters securityParameters = cryptoParams.SecurityParameters; + TlsSecret master_secret = securityParameters.MasterSecret; + int prfAlgorithm = securityParameters.PrfAlgorithm; + byte[] seed = Arrays.Concatenate(securityParameters.ServerRandom, securityParameters.ClientRandom); + return master_secret.DeriveUsingPrf(prfAlgorithm, ExporterLabel.key_expansion, seed, length).Extract(); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void CalculateKeyBlock(TlsCryptoParameters cryptoParams, Span keyBlock) + { + SecurityParameters securityParameters = cryptoParams.SecurityParameters; + TlsSecret master_secret = securityParameters.MasterSecret; + int prfAlgorithm = securityParameters.PrfAlgorithm; + + Span cr = securityParameters.ClientRandom, sr = securityParameters.ServerRandom; + Span seed = stackalloc byte[sr.Length + cr.Length]; + sr.CopyTo(seed); + cr.CopyTo(seed[sr.Length..]); + + TlsSecret derived = master_secret.DeriveUsingPrf(prfAlgorithm, ExporterLabel.key_expansion, seed, + keyBlock.Length); + derived.ExtractTo(keyBlock); + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsImplUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsImplUtilities.cs.meta new file mode 100644 index 000000000..a36d4b15f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsImplUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 060605ca7cfc3d1489d5df934dd6f555 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsNullCipher.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsNullCipher.cs new file mode 100644 index 000000000..229473be0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsNullCipher.cs @@ -0,0 +1,133 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl +{ + /// The NULL cipher. + public class TlsNullCipher + : TlsCipher + { + protected readonly TlsCryptoParameters m_cryptoParams; + protected readonly TlsSuiteHmac m_readMac, m_writeMac; + + /// + public TlsNullCipher(TlsCryptoParameters cryptoParams, TlsHmac clientMac, TlsHmac serverMac) + { + if (TlsImplUtilities.IsTlsV13(cryptoParams)) + throw new TlsFatalAlert(AlertDescription.internal_error); + + m_cryptoParams = cryptoParams; + + int keyBlockSize = clientMac.MacLength + serverMac.MacLength; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span keyBlock = keyBlockSize <= 512 + ? stackalloc byte[keyBlockSize] + : new byte[keyBlockSize]; + TlsImplUtilities.CalculateKeyBlock(cryptoParams, keyBlock); + + clientMac.SetKey(keyBlock[..clientMac.MacLength]); keyBlock = keyBlock[clientMac.MacLength..]; + serverMac.SetKey(keyBlock[..serverMac.MacLength]); keyBlock = keyBlock[serverMac.MacLength..]; + + if (!keyBlock.IsEmpty) + throw new TlsFatalAlert(AlertDescription.internal_error); +#else + byte[] keyBlock = TlsImplUtilities.CalculateKeyBlock(cryptoParams, keyBlockSize); + int pos = 0; + + clientMac.SetKey(keyBlock, pos, clientMac.MacLength); + pos += clientMac.MacLength; + serverMac.SetKey(keyBlock, pos, serverMac.MacLength); + pos += serverMac.MacLength; + + if (pos != keyBlockSize) + throw new TlsFatalAlert(AlertDescription.internal_error); +#endif + + if (cryptoParams.IsServer) + { + this.m_writeMac = new TlsSuiteHmac(cryptoParams, serverMac); + this.m_readMac = new TlsSuiteHmac(cryptoParams, clientMac); + } + else + { + this.m_writeMac = new TlsSuiteHmac(cryptoParams, clientMac); + this.m_readMac = new TlsSuiteHmac(cryptoParams, serverMac); + } + } + + public virtual int GetCiphertextDecodeLimit(int plaintextLimit) + { + return plaintextLimit + m_writeMac.Size; + } + + public virtual int GetCiphertextEncodeLimit(int plaintextLength, int plaintextLimit) + { + return plaintextLength + m_writeMac.Size; + } + + public virtual int GetPlaintextLimit(int ciphertextLimit) + { + return ciphertextLimit - m_writeMac.Size; + } + + public virtual TlsEncodeResult EncodePlaintext(long seqNo, short contentType, ProtocolVersion recordVersion, + int headerAllocation, byte[] plaintext, int offset, int len) + { + byte[] mac = m_writeMac.CalculateMac(seqNo, contentType, plaintext, offset, len); + byte[] ciphertext = new byte[headerAllocation + len + mac.Length]; + Array.Copy(plaintext, offset, ciphertext, headerAllocation, len); + Array.Copy(mac, 0, ciphertext, headerAllocation + len, mac.Length); + return new TlsEncodeResult(ciphertext, 0, ciphertext.Length, contentType); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual TlsEncodeResult EncodePlaintext(long seqNo, short contentType, ProtocolVersion recordVersion, + int headerAllocation, ReadOnlySpan plaintext) + { + byte[] mac = m_writeMac.CalculateMac(seqNo, contentType, plaintext); + byte[] ciphertext = new byte[headerAllocation + plaintext.Length + mac.Length]; + plaintext.CopyTo(ciphertext.AsSpan(headerAllocation)); + mac.CopyTo(ciphertext.AsSpan(headerAllocation + plaintext.Length)); + return new TlsEncodeResult(ciphertext, 0, ciphertext.Length, contentType); + } +#endif + + public virtual TlsDecodeResult DecodeCiphertext(long seqNo, short recordType, ProtocolVersion recordVersion, + byte[] ciphertext, int offset, int len) + { + int macSize = m_readMac.Size; + if (len < macSize) + throw new TlsFatalAlert(AlertDescription.decode_error); + + int macInputLen = len - macSize; + + byte[] expectedMac = m_readMac.CalculateMac(seqNo, recordType, ciphertext, offset, macInputLen); + + bool badMac = !TlsUtilities.ConstantTimeAreEqual(macSize, expectedMac, 0, ciphertext, offset + macInputLen); + if (badMac) + throw new TlsFatalAlert(AlertDescription.bad_record_mac); + + return new TlsDecodeResult(ciphertext, offset, macInputLen, recordType); + } + + public virtual void RekeyDecoder() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual void RekeyEncoder() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public virtual bool UsesOpaqueRecordType + { + get { return false; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsNullCipher.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsNullCipher.cs.meta new file mode 100644 index 000000000..d7ed27f05 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsNullCipher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 25b66614ea3a3ab4cbd6aacebf4cc27b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsSuiteHmac.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsSuiteHmac.cs new file mode 100644 index 000000000..b791f54e2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsSuiteHmac.cs @@ -0,0 +1,151 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl +{ + /// A generic TLS MAC implementation, acting as an HMAC based on some underlying Digest. + public class TlsSuiteHmac + : TlsSuiteMac + { + protected static int GetMacSize(TlsCryptoParameters cryptoParams, TlsMac mac) + { + int macSize = mac.MacLength; + if (cryptoParams.SecurityParameters.IsTruncatedHmac) + { + macSize = System.Math.Min(macSize, 10); + } + return macSize; + } + + protected readonly TlsCryptoParameters m_cryptoParams; + protected readonly TlsHmac m_mac; + protected readonly int m_digestBlockSize; + protected readonly int m_digestOverhead; + protected readonly int m_macSize; + + /// Generate a new instance of a TlsMac. + /// the TLS client context specific crypto parameters. + /// The MAC to use. + public TlsSuiteHmac(TlsCryptoParameters cryptoParams, TlsHmac mac) + { + this.m_cryptoParams = cryptoParams; + this.m_mac = mac; + this.m_macSize = GetMacSize(cryptoParams, mac); + this.m_digestBlockSize = mac.InternalBlockSize; + + // TODO This should check the actual algorithm, not assume based on the digest size + if (TlsImplUtilities.IsSsl(cryptoParams) && mac.MacLength == 20) + { + /* + * NOTE: For the SSL 3.0 MAC with SHA-1, the secret + input pad is not block-aligned. + */ + this.m_digestOverhead = 4; + } + else + { + this.m_digestOverhead = m_digestBlockSize / 8; + } + } + + public virtual int Size + { + get { return m_macSize; } + } + + public virtual byte[] CalculateMac(long seqNo, short type, byte[] msg, int msgOff, int msgLen) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return CalculateMac(seqNo, type, msg.AsSpan(msgOff, msgLen)); +#else + ProtocolVersion serverVersion = m_cryptoParams.ServerVersion; + bool isSsl = serverVersion.IsSsl; + + byte[] macHeader = new byte[isSsl ? 11 : 13]; + TlsUtilities.WriteUint64(seqNo, macHeader, 0); + TlsUtilities.WriteUint8(type, macHeader, 8); + if (!isSsl) + { + TlsUtilities.WriteVersion(serverVersion, macHeader, 9); + } + TlsUtilities.WriteUint16(msgLen, macHeader, macHeader.Length - 2); + + m_mac.Update(macHeader, 0, macHeader.Length); + m_mac.Update(msg, msgOff, msgLen); + + return Truncate(m_mac.CalculateMac()); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public virtual byte[] CalculateMac(long seqNo, short type, ReadOnlySpan message) + { + ProtocolVersion serverVersion = m_cryptoParams.ServerVersion; + bool isSsl = serverVersion.IsSsl; + + byte[] macHeader = new byte[isSsl ? 11 : 13]; + TlsUtilities.WriteUint64(seqNo, macHeader, 0); + TlsUtilities.WriteUint8(type, macHeader, 8); + if (!isSsl) + { + TlsUtilities.WriteVersion(serverVersion, macHeader, 9); + } + TlsUtilities.WriteUint16(message.Length, macHeader, macHeader.Length - 2); + + m_mac.Update(macHeader); + m_mac.Update(message); + + return Truncate(m_mac.CalculateMac()); + } +#endif + + public virtual byte[] CalculateMacConstantTime(long seqNo, short type, byte[] msg, int msgOff, int msgLen, + int fullLength, byte[] dummyData) + { + /* + * Actual MAC only calculated on 'length' bytes... + */ + byte[] result = CalculateMac(seqNo, type, msg, msgOff, msgLen); + + /* + * ...but ensure a constant number of complete digest blocks are processed (as many as would + * be needed for 'fullLength' bytes of input). + */ + int headerLength = TlsImplUtilities.IsSsl(m_cryptoParams) ? 11 : 13; + + // How many extra full blocks do we need to calculate? + int extra = GetDigestBlockCount(headerLength + fullLength) - GetDigestBlockCount(headerLength + msgLen); + + while (--extra >= 0) + { + m_mac.Update(dummyData, 0, m_digestBlockSize); + } + + // One more byte in case the implementation is "lazy" about processing blocks + m_mac.Update(dummyData, 0, 1); + m_mac.Reset(); + + return result; + } + + protected virtual int GetDigestBlockCount(int inputLength) + { + // NOTE: The input pad for HMAC is always a full digest block + + // NOTE: This calculation assumes a minimum of 1 pad byte + return (inputLength + m_digestOverhead) / m_digestBlockSize; + } + + protected virtual byte[] Truncate(byte[] bs) + { + if (bs.Length <= m_macSize) + return bs; + + return Arrays.CopyOf(bs, m_macSize); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsSuiteHmac.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsSuiteHmac.cs.meta new file mode 100644 index 000000000..af7d32aa0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsSuiteHmac.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a230ac417dec22d49b08c275fe3ec3d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsSuiteMac.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsSuiteMac.cs new file mode 100644 index 000000000..12516e0da --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsSuiteMac.cs @@ -0,0 +1,41 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl +{ + /// Base interface for a generic TLS MAC implementation for use with a bulk cipher. + public interface TlsSuiteMac + { + /// Return the output length (in bytes) of this MAC. + /// The output length of this MAC. + int Size { get; } + + /// Calculate the MAC for some given data. + /// The sequence number of the record. + /// The content type of the message. + /// A byte array containing the message. + /// The number of bytes to skip, before the message starts. + /// The length of the message. + /// A new byte array containing the MAC value. + byte[] CalculateMac(long seqNo, short type, byte[] message, int offset, int length); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + byte[] CalculateMac(long seqNo, short type, ReadOnlySpan message); +#endif + + /// Constant time calculation of the MAC for some given data with a given expected length. + /// The sequence number of the record. + /// The content type of the message. + /// A byte array containing the message. + /// The number of bytes to skip, before the message starts. + /// The length of the message. + /// The expected length of the full message. + /// Random data for padding out the MAC calculation if required. + /// A new byte array containing the MAC value. + byte[] CalculateMacConstantTime(long seqNo, short type, byte[] message, int offset, int length, + int expectedLength, byte[] randomData); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsSuiteMac.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsSuiteMac.cs.meta new file mode 100644 index 000000000..c7329230b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/TlsSuiteMac.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c1a3ebbf6ddf31b4d9a3c41cf81d9a87 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc.meta new file mode 100644 index 000000000..1e22a4dcc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b9a0c4b9f83251c4a8fb1ee507a0d0d5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcChaCha20Poly1305.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcChaCha20Poly1305.cs new file mode 100644 index 000000000..e4177f8ec --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcChaCha20Poly1305.cs @@ -0,0 +1,149 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + public sealed class BcChaCha20Poly1305 + : TlsAeadCipherImpl + { + private static readonly byte[] Zeroes = new byte[15]; + + private readonly ChaCha7539Engine m_cipher = new ChaCha7539Engine(); + private readonly Poly1305 m_mac = new Poly1305(); + + private readonly bool m_isEncrypting; + + private int m_additionalDataLength; + + public BcChaCha20Poly1305(bool isEncrypting) + { + this.m_isEncrypting = isEncrypting; + } + + public int DoFinal(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset) + { + if (m_isEncrypting) + { + int ciphertextLength = inputLength; + + m_cipher.DoFinal(input, inputOffset, inputLength, output, outputOffset); + int outputLength = inputLength; + + if (ciphertextLength != outputLength) + throw new InvalidOperationException(); + + UpdateMac(output, outputOffset, ciphertextLength); + + byte[] lengths = new byte[16]; + Pack.UInt64_To_LE((ulong)m_additionalDataLength, lengths, 0); + Pack.UInt64_To_LE((ulong)ciphertextLength, lengths, 8); + m_mac.BlockUpdate(lengths, 0, 16); + + m_mac.DoFinal(output, outputOffset + ciphertextLength); + + return ciphertextLength + 16; + } + else + { + int ciphertextLength = inputLength - 16; + + UpdateMac(input, inputOffset, ciphertextLength); + + byte[] expectedMac = new byte[16]; + Pack.UInt64_To_LE((ulong)m_additionalDataLength, expectedMac, 0); + Pack.UInt64_To_LE((ulong)ciphertextLength, expectedMac, 8); + m_mac.BlockUpdate(expectedMac, 0, 16); + m_mac.DoFinal(expectedMac, 0); + + bool badMac = !TlsUtilities.ConstantTimeAreEqual(16, expectedMac, 0, input, inputOffset + ciphertextLength); + if (badMac) + throw new TlsFatalAlert(AlertDescription.bad_record_mac); + + m_cipher.DoFinal(input, inputOffset, ciphertextLength, output, outputOffset); + int outputLength = ciphertextLength; + + if (ciphertextLength != outputLength) + throw new InvalidOperationException(); + + return ciphertextLength; + } + } + + public int GetOutputSize(int inputLength) + { + return m_isEncrypting ? inputLength + 16 : inputLength - 16; + } + + public void Init(byte[] nonce, int macSize, byte[] additionalData) + { + if (nonce == null || nonce.Length != 12 || macSize != 16) + throw new TlsFatalAlert(AlertDescription.internal_error); + + m_cipher.Init(m_isEncrypting, new ParametersWithIV(null, nonce)); + InitMac(); + if (additionalData == null) + { + this.m_additionalDataLength = 0; + } + else + { + this.m_additionalDataLength = additionalData.Length; + UpdateMac(additionalData, 0, additionalData.Length); + } + } + + public void Reset() + { + m_cipher.Reset(); + m_mac.Reset(); + } + + public void SetKey(byte[] key, int keyOff, int keyLen) + { + KeyParameter cipherKey = new KeyParameter(key, keyOff, keyLen); + m_cipher.Init(m_isEncrypting, new ParametersWithIV(cipherKey, Zeroes, 0, 12)); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void SetKey(ReadOnlySpan key) + { + KeyParameter cipherKey = new KeyParameter(key); + m_cipher.Init(m_isEncrypting, new ParametersWithIV(cipherKey, Zeroes.AsSpan(0, 12))); + } +#endif + + private void InitMac() + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span firstBlock = stackalloc byte[64]; + m_cipher.ProcessBytes(firstBlock, firstBlock); + m_mac.Init(new KeyParameter(firstBlock[..32])); + firstBlock.Fill(0x00); +#else + byte[] firstBlock = new byte[64]; + m_cipher.ProcessBytes(firstBlock, 0, 64, firstBlock, 0); + m_mac.Init(new KeyParameter(firstBlock, 0, 32)); + Array.Clear(firstBlock, 0, firstBlock.Length); +#endif + } + + private void UpdateMac(byte[] buf, int off, int len) + { + m_mac.BlockUpdate(buf, off, len); + + int partial = len % 16; + if (partial != 0) + { + m_mac.BlockUpdate(Zeroes, 0, 16 - partial); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcChaCha20Poly1305.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcChaCha20Poly1305.cs.meta new file mode 100644 index 000000000..8e1b37602 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcChaCha20Poly1305.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f43a4ccb425a5664e9b3cd9467a47d2c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcDefaultTlsCredentialedAgreement.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcDefaultTlsCredentialedAgreement.cs new file mode 100644 index 000000000..41ba0b58f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcDefaultTlsCredentialedAgreement.cs @@ -0,0 +1,116 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// Credentialed class generating agreed secrets from a peer's public key for our end of the TLS connection + /// using the BC light-weight API. + public class BcDefaultTlsCredentialedAgreement + : TlsCredentialedAgreement + { + protected readonly TlsCredentialedAgreement m_agreementCredentials; + + public BcDefaultTlsCredentialedAgreement(BcTlsCrypto crypto, Certificate certificate, + AsymmetricKeyParameter privateKey) + { + if (crypto == null) + throw new ArgumentNullException("crypto"); + if (certificate == null) + throw new ArgumentNullException("certificate"); + if (certificate.IsEmpty) + throw new ArgumentException("cannot be empty", "certificate"); + if (privateKey == null) + throw new ArgumentNullException("privateKey"); + if (!privateKey.IsPrivate) + throw new ArgumentException("must be private", "privateKey"); + + if (privateKey is DHPrivateKeyParameters) + { + this.m_agreementCredentials = new DHCredentialedAgreement(crypto, certificate, + (DHPrivateKeyParameters)privateKey); + } + else if (privateKey is ECPrivateKeyParameters) + { + this.m_agreementCredentials = new ECCredentialedAgreement(crypto, certificate, + (ECPrivateKeyParameters)privateKey); + } + else + { + throw new ArgumentException("'privateKey' type not supported: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(privateKey)); + } + } + + public virtual Certificate Certificate + { + get { return m_agreementCredentials.Certificate; } + } + + public virtual TlsSecret GenerateAgreement(TlsCertificate peerCertificate) + { + return m_agreementCredentials.GenerateAgreement(peerCertificate); + } + + private sealed class DHCredentialedAgreement + : TlsCredentialedAgreement + { + private readonly BcTlsCrypto m_crypto; + private readonly Certificate m_certificate; + private readonly DHPrivateKeyParameters m_privateKey; + + internal DHCredentialedAgreement(BcTlsCrypto crypto, Certificate certificate, + DHPrivateKeyParameters privateKey) + { + this.m_crypto = crypto; + this.m_certificate = certificate; + this.m_privateKey = privateKey; + } + + public TlsSecret GenerateAgreement(TlsCertificate peerCertificate) + { + BcTlsCertificate bcCert = BcTlsCertificate.Convert(m_crypto, peerCertificate); + DHPublicKeyParameters peerPublicKey = bcCert.GetPubKeyDH(); + return BcTlsDHDomain.CalculateDHAgreement(m_crypto, m_privateKey, peerPublicKey, false); + } + + public Certificate Certificate + { + get { return m_certificate; } + } + } + + private sealed class ECCredentialedAgreement + : TlsCredentialedAgreement + { + private readonly BcTlsCrypto m_crypto; + private readonly Certificate m_certificate; + private readonly ECPrivateKeyParameters m_privateKey; + + internal ECCredentialedAgreement(BcTlsCrypto crypto, Certificate certificate, + ECPrivateKeyParameters privateKey) + { + this.m_crypto = crypto; + this.m_certificate = certificate; + this.m_privateKey = privateKey; + } + + public TlsSecret GenerateAgreement(TlsCertificate peerCertificate) + { + BcTlsCertificate bcCert = BcTlsCertificate.Convert(m_crypto, peerCertificate); + ECPublicKeyParameters peerPublicKey = bcCert.GetPubKeyEC(); + return BcTlsECDomain.CalculateECDHAgreement(m_crypto, m_privateKey, peerPublicKey); + } + + public Certificate Certificate + { + get { return m_certificate; } + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcDefaultTlsCredentialedAgreement.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcDefaultTlsCredentialedAgreement.cs.meta new file mode 100644 index 000000000..e8d3c8633 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcDefaultTlsCredentialedAgreement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 425b3cc62e6b783438d03c974c0e648e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcDefaultTlsCredentialedDecryptor.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcDefaultTlsCredentialedDecryptor.cs new file mode 100644 index 000000000..f9ce55df5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcDefaultTlsCredentialedDecryptor.cs @@ -0,0 +1,143 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Encodings; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// Credentialed class decrypting RSA encrypted secrets sent from a peer for our end of the TLS connection + /// using the BC light-weight API. + public class BcDefaultTlsCredentialedDecryptor + : TlsCredentialedDecryptor + { + protected readonly BcTlsCrypto m_crypto; + protected readonly Certificate m_certificate; + protected readonly AsymmetricKeyParameter m_privateKey; + + public BcDefaultTlsCredentialedDecryptor(BcTlsCrypto crypto, Certificate certificate, + AsymmetricKeyParameter privateKey) + { + if (crypto == null) + throw new ArgumentNullException("crypto"); + if (certificate == null) + throw new ArgumentNullException("certificate"); + if (certificate.IsEmpty) + throw new ArgumentException("cannot be empty", "certificate"); + if (privateKey == null) + throw new ArgumentNullException("privateKey"); + if (!privateKey.IsPrivate) + throw new ArgumentException("must be private", "privateKey"); + + if (privateKey is RsaKeyParameters) + { + } + else + { + throw new ArgumentException("'privateKey' type not supported: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(privateKey)); + } + + this.m_crypto = crypto; + this.m_certificate = certificate; + this.m_privateKey = privateKey; + } + + public virtual Certificate Certificate + { + get { return m_certificate; } + } + + public virtual TlsSecret Decrypt(TlsCryptoParameters cryptoParams, byte[] ciphertext) + { + // TODO Keep only the decryption itself here - move error handling outside + return SafeDecryptPreMasterSecret(cryptoParams, (RsaKeyParameters)m_privateKey, ciphertext); + } + + /* + * TODO[tls-ops] Probably need to make RSA encryption/decryption into TlsCrypto functions so + * that users can implement "generic" encryption credentials externally + */ + protected virtual TlsSecret SafeDecryptPreMasterSecret(TlsCryptoParameters cryptoParams, + RsaKeyParameters rsaServerPrivateKey, byte[] encryptedPreMasterSecret) + { + SecureRandom secureRandom = m_crypto.SecureRandom; + + /* + * RFC 5246 7.4.7.1. + */ + ProtocolVersion expectedVersion = cryptoParams.RsaPreMasterSecretVersion; + + // TODO Provide as configuration option? + bool versionNumberCheckDisabled = false; + + /* + * Generate 48 random bytes we can use as a Pre-Master-Secret, if the + * PKCS1 padding check should fail. + */ + byte[] fallback = new byte[48]; + secureRandom.NextBytes(fallback); + + byte[] M = Arrays.Clone(fallback); + try + { + Pkcs1Encoding encoding = new Pkcs1Encoding(new RsaBlindedEngine(), fallback); + encoding.Init(false, new ParametersWithRandom(rsaServerPrivateKey, secureRandom)); + + M = encoding.ProcessBlock(encryptedPreMasterSecret, 0, encryptedPreMasterSecret.Length); + } + catch (Exception) + { + /* + * This should never happen since the decryption should never throw an exception + * and return a random value instead. + * + * In any case, a TLS server MUST NOT generate an alert if processing an + * RSA-encrypted premaster secret message fails, or the version number is not as + * expected. Instead, it MUST continue the handshake with a randomly generated + * premaster secret. + */ + } + + /* + * If ClientHello.legacy_version is TLS 1.1 or higher, server implementations MUST check the + * version number [..]. + */ + if (versionNumberCheckDisabled && !TlsImplUtilities.IsTlsV11(expectedVersion)) + { + /* + * If the version number is TLS 1.0 or earlier, server implementations SHOULD check the + * version number, but MAY have a configuration option to disable the check. + */ + } + else + { + /* + * Compare the version number in the decrypted Pre-Master-Secret with the legacy_version + * field from the ClientHello. If they don't match, continue the handshake with the + * randomly generated 'fallback' value. + * + * NOTE: The comparison and replacement must be constant-time. + */ + int mask = (expectedVersion.MajorVersion ^ (M[0] & 0xFF)) + | (expectedVersion.MinorVersion ^ (M[1] & 0xFF)); + + // 'mask' will be all 1s if the versions matched, or else all 0s. + mask = (mask - 1) >> 31; + + for (int i = 0; i < 48; i++) + { + M[i] = (byte)((M[i] & mask) | (fallback[i] & ~mask)); + } + } + + return m_crypto.CreateSecret(M); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcDefaultTlsCredentialedDecryptor.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcDefaultTlsCredentialedDecryptor.cs.meta new file mode 100644 index 000000000..0ffa8b0d8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcDefaultTlsCredentialedDecryptor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 418d1b111036e2c4681cf886c681dc3e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcDefaultTlsCredentialedSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcDefaultTlsCredentialedSigner.cs new file mode 100644 index 000000000..a3089c096 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcDefaultTlsCredentialedSigner.cs @@ -0,0 +1,89 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// Credentialed class for generating signatures based on the use of primitives from the BC light-weight API. + public class BcDefaultTlsCredentialedSigner + : DefaultTlsCredentialedSigner + { + private static BcTlsCertificate GetEndEntity(BcTlsCrypto crypto, Certificate certificate) + { + if (certificate == null || certificate.IsEmpty) + throw new ArgumentException("No certificate"); + + return BcTlsCertificate.Convert(crypto, certificate.GetCertificateAt(0)); + } + + private static TlsSigner MakeSigner(BcTlsCrypto crypto, AsymmetricKeyParameter privateKey, + Certificate certificate, SignatureAndHashAlgorithm signatureAndHashAlgorithm) + { + TlsSigner signer; + if (privateKey is RsaKeyParameters) + { + RsaKeyParameters privKeyRsa = (RsaKeyParameters)privateKey; + + if (signatureAndHashAlgorithm != null) + { + int signatureScheme = SignatureScheme.From(signatureAndHashAlgorithm); + if (SignatureScheme.IsRsaPss(signatureScheme)) + { + return new BcTlsRsaPssSigner(crypto, privKeyRsa, signatureScheme); + } + } + + RsaKeyParameters pubKeyRsa = GetEndEntity(crypto, certificate).GetPubKeyRsa(); + + signer = new BcTlsRsaSigner(crypto, privKeyRsa, pubKeyRsa); + } + else if (privateKey is DsaPrivateKeyParameters) + { + signer = new BcTlsDsaSigner(crypto, (DsaPrivateKeyParameters)privateKey); + } + else if (privateKey is ECPrivateKeyParameters) + { + ECPrivateKeyParameters privKeyEC = (ECPrivateKeyParameters)privateKey; + + if (signatureAndHashAlgorithm != null) + { + int signatureScheme = SignatureScheme.From(signatureAndHashAlgorithm); + if (SignatureScheme.IsECDsa(signatureScheme)) + { + return new BcTlsECDsa13Signer(crypto, privKeyEC, signatureScheme); + } + } + + signer = new BcTlsECDsaSigner(crypto, privKeyEC); + } + else if (privateKey is Ed25519PrivateKeyParameters) + { + signer = new BcTlsEd25519Signer(crypto, (Ed25519PrivateKeyParameters)privateKey); + } + else if (privateKey is Ed448PrivateKeyParameters) + { + signer = new BcTlsEd448Signer(crypto, (Ed448PrivateKeyParameters)privateKey); + } + else + { + throw new ArgumentException("'privateKey' type not supported: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(privateKey)); + } + + return signer; + } + + public BcDefaultTlsCredentialedSigner(TlsCryptoParameters cryptoParams, BcTlsCrypto crypto, + AsymmetricKeyParameter privateKey, Certificate certificate, + SignatureAndHashAlgorithm signatureAndHashAlgorithm) + : base(cryptoParams, MakeSigner(crypto, privateKey, certificate, signatureAndHashAlgorithm), certificate, + signatureAndHashAlgorithm) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcDefaultTlsCredentialedSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcDefaultTlsCredentialedSigner.cs.meta new file mode 100644 index 000000000..751f75cf9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcDefaultTlsCredentialedSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b72228640b140bd4495bdbc29252e0b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcSsl3Hmac.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcSsl3Hmac.cs new file mode 100644 index 000000000..ee69066ce --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcSsl3Hmac.cs @@ -0,0 +1,133 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// HMAC implementation based on original internet draft for HMAC (RFC 2104). + /// + /// The difference is that padding is concatenated versus XORed with the key, e.g: + /// H(K + opad, H(K + ipad, text)) + /// + internal class BcSsl3Hmac + : TlsHmac + { + private const byte IPAD_BYTE = (byte)0x36; + private const byte OPAD_BYTE = (byte)0x5C; + + private static readonly byte[] IPAD = GenPad(IPAD_BYTE, 48); + private static readonly byte[] OPAD = GenPad(OPAD_BYTE, 48); + + private readonly IDigest m_digest; + private readonly int m_padLength; + + private byte[] m_secret; + + /// Base constructor for one of the standard digest algorithms for which the byteLength is known. + /// + /// + /// Behaviour is undefined for digests other than MD5 or SHA1. + /// + /// the digest. + internal BcSsl3Hmac(IDigest digest) + { + this.m_digest = digest; + + if (digest.GetDigestSize() == 20) + { + this.m_padLength = 40; + } + else + { + this.m_padLength = 48; + } + } + + public virtual void SetKey(byte[] key, int keyOff, int keyLen) + { + this.m_secret = TlsUtilities.CopyOfRangeExact(key, keyOff, keyOff + keyLen); + + Reset(); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void SetKey(ReadOnlySpan key) + { + this.m_secret = key.ToArray(); + + Reset(); + } +#endif + + public virtual void Update(byte[] input, int inOff, int len) + { + m_digest.BlockUpdate(input, inOff, len); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Update(ReadOnlySpan input) + { + m_digest.BlockUpdate(input); + } +#endif + + public virtual byte[] CalculateMac() + { + byte[] result = new byte[m_digest.GetDigestSize()]; + DoFinal(result, 0); + return result; + } + + public virtual void CalculateMac(byte[] output, int outOff) + { + DoFinal(output, outOff); + } + + public virtual int InternalBlockSize + { + get { return m_digest.GetByteLength(); } + } + + public virtual int MacLength + { + get { return m_digest.GetDigestSize(); } + } + + /** + * Reset the mac generator. + */ + public virtual void Reset() + { + m_digest.Reset(); + m_digest.BlockUpdate(m_secret, 0, m_secret.Length); + m_digest.BlockUpdate(IPAD, 0, m_padLength); + } + + private void DoFinal(byte[] output, int outOff) + { + byte[] tmp = new byte[m_digest.GetDigestSize()]; + m_digest.DoFinal(tmp, 0); + + m_digest.BlockUpdate(m_secret, 0, m_secret.Length); + m_digest.BlockUpdate(OPAD, 0, m_padLength); + m_digest.BlockUpdate(tmp, 0, tmp.Length); + + m_digest.DoFinal(output, outOff); + + Reset(); + } + + private static byte[] GenPad(byte b, int count) + { + byte[] padding = new byte[count]; + Arrays.Fill(padding, b); + return padding; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcSsl3Hmac.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcSsl3Hmac.cs.meta new file mode 100644 index 000000000..7217ca9da --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcSsl3Hmac.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c99124a9b98c8804ba374702e7699474 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTls13Verifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTls13Verifier.cs new file mode 100644 index 000000000..141ed81b7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTls13Verifier.cs @@ -0,0 +1,36 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + internal sealed class BcTls13Verifier + : Tls13Verifier + { + private readonly SignerSink m_output; + + internal BcTls13Verifier(ISigner verifier) + { + if (verifier == null) + throw new ArgumentNullException("verifier"); + + this.m_output = new SignerSink(verifier); + } + + public Stream Stream + { + get { return m_output; } + } + + public bool VerifySignature(byte[] signature) + { + return m_output.Signer.VerifySignature(signature); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTls13Verifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTls13Verifier.cs.meta new file mode 100644 index 000000000..b83d4be3c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTls13Verifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4243bb97339ecb84e889671b73a181af +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsAeadCipherImpl.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsAeadCipherImpl.cs new file mode 100644 index 000000000..f58f7ad5d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsAeadCipherImpl.cs @@ -0,0 +1,70 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + internal sealed class BcTlsAeadCipherImpl + : TlsAeadCipherImpl + { + private readonly bool m_isEncrypting; + private readonly IAeadCipher m_cipher; + + private KeyParameter key; + + internal BcTlsAeadCipherImpl(IAeadCipher cipher, bool isEncrypting) + { + this.m_cipher = cipher; + this.m_isEncrypting = isEncrypting; + } + + public void SetKey(byte[] key, int keyOff, int keyLen) + { + this.key = new KeyParameter(key, keyOff, keyLen); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void SetKey(ReadOnlySpan key) + { + this.key = new KeyParameter(key); + } +#endif + + public void Init(byte[] nonce, int macSize, byte[] additionalData) + { + m_cipher.Init(m_isEncrypting, new AeadParameters(key, macSize * 8, nonce, additionalData)); + } + + public int GetOutputSize(int inputLength) + { + return m_cipher.GetOutputSize(inputLength); + } + + public int DoFinal(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset) + { + int len = m_cipher.ProcessBytes(input, inputOffset, inputLength, output, outputOffset); + + try + { + len += m_cipher.DoFinal(output, outputOffset + len); + } + catch (InvalidCipherTextException e) + { + throw new TlsFatalAlert(AlertDescription.bad_record_mac, e); + } + + return len; + } + + public void Reset() + { + m_cipher.Reset(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsAeadCipherImpl.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsAeadCipherImpl.cs.meta new file mode 100644 index 000000000..bc92afc20 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsAeadCipherImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6b60198915b75d41bfe56198d42097d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsBlockCipherImpl.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsBlockCipherImpl.cs new file mode 100644 index 000000000..b0e47e93b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsBlockCipherImpl.cs @@ -0,0 +1,67 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + internal sealed class BcTlsBlockCipherImpl + : TlsBlockCipherImpl + { + private readonly bool m_isEncrypting; + private readonly IBlockCipher m_cipher; + + private KeyParameter key; + + internal BcTlsBlockCipherImpl(IBlockCipher cipher, bool isEncrypting) + { + this.m_cipher = cipher; + this.m_isEncrypting = isEncrypting; + } + + public void SetKey(byte[] key, int keyOff, int keyLen) + { + this.key = new KeyParameter(key, keyOff, keyLen); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void SetKey(ReadOnlySpan key) + { + this.key = new KeyParameter(key); + } +#endif + + public void Init(byte[] iv, int ivOff, int ivLen) + { + m_cipher.Init(m_isEncrypting, new ParametersWithIV(key, iv, ivOff, ivLen)); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Init(ReadOnlySpan iv) + { + m_cipher.Init(m_isEncrypting, new ParametersWithIV(key, iv)); + } +#endif + + public int DoFinal(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset) + { + int blockSize = m_cipher.GetBlockSize(); + + for (int i = 0; i < inputLength; i += blockSize) + { + m_cipher.ProcessBlock(input, inputOffset + i, output, outputOffset + i); + } + + return inputLength; + } + + public int GetBlockSize() + { + return m_cipher.GetBlockSize(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsBlockCipherImpl.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsBlockCipherImpl.cs.meta new file mode 100644 index 000000000..229b22830 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsBlockCipherImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8060aed88ac685c4296a7bd5a0a6e35c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsCertificate.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsCertificate.cs new file mode 100644 index 000000000..92d5b4a08 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsCertificate.cs @@ -0,0 +1,101 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// Implementation class for a single X.509 certificate based on the BC light-weight API. + public class BcTlsCertificate + : BcTlsRawKeyCertificate + { + /// + public static BcTlsCertificate Convert(BcTlsCrypto crypto, TlsCertificate certificate) + { + if (certificate is BcTlsCertificate) + return (BcTlsCertificate)certificate; + + return new BcTlsCertificate(crypto, certificate.GetEncoded()); + } + + /// + public static X509CertificateStructure ParseCertificate(byte[] encoding) + { + try + { + Asn1Object asn1 = TlsUtilities.ReadAsn1Object(encoding); + return X509CertificateStructure.GetInstance(asn1); + } + catch (Exception e) + { + throw new TlsFatalAlert(AlertDescription.bad_certificate, e); + } + } + + protected readonly X509CertificateStructure m_certificate; + + /// + public BcTlsCertificate(BcTlsCrypto crypto, byte[] encoding) + : this(crypto, ParseCertificate(encoding)) + { + } + + public BcTlsCertificate(BcTlsCrypto crypto, X509CertificateStructure certificate) + : base(crypto, certificate.SubjectPublicKeyInfo) + { + m_certificate = certificate; + } + + public virtual X509CertificateStructure X509CertificateStructure => m_certificate; + + /// + public override byte[] GetEncoded() + { + return m_certificate.GetEncoded(Asn1Encodable.Der); + } + + /// + public override byte[] GetExtension(DerObjectIdentifier extensionOid) + { + X509Extensions extensions = m_certificate.TbsCertificate.Extensions; + if (extensions != null) + { + X509Extension extension = extensions.GetExtension(extensionOid); + if (extension != null) + { + return Arrays.Clone(extension.Value.GetOctets()); + } + } + return null; + } + + public override BigInteger SerialNumber => m_certificate.SerialNumber.Value; + + public override string SigAlgOid => m_certificate.SignatureAlgorithm.Algorithm.Id; + + public override Asn1Encodable GetSigAlgParams() => m_certificate.SignatureAlgorithm.Parameters; + + protected override bool SupportsKeyUsage(int keyUsageBits) + { + X509Extensions exts = m_certificate.TbsCertificate.Extensions; + if (exts != null) + { + KeyUsage ku = KeyUsage.FromExtensions(exts); + if (ku != null) + { + int bits = ku.GetBytes()[0] & 0xff; + if ((bits & keyUsageBits) != keyUsageBits) + return false; + } + } + return true; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsCertificate.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsCertificate.cs.meta new file mode 100644 index 000000000..4bff24d0c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsCertificate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6ee1a041dc0fe1648add802553a3e2b7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsCrypto.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsCrypto.cs new file mode 100644 index 000000000..ec6ca6012 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsCrypto.cs @@ -0,0 +1,774 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.Srp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /** + * Class for providing cryptographic services for TLS based on implementations in the BC light-weight API. + *

    + * This class provides default implementations for everything. If you need to customise it, extend the class + * and override the appropriate methods. + *

    + */ + public class BcTlsCrypto + : AbstractTlsCrypto + { + private readonly SecureRandom m_entropySource; + + public BcTlsCrypto() + : this(CryptoServicesRegistrar.GetSecureRandom()) + { + } + + public BcTlsCrypto(SecureRandom entropySource) + { + if (entropySource == null) + throw new ArgumentNullException(nameof(entropySource)); + + this.m_entropySource = entropySource; + } + + internal virtual BcTlsSecret AdoptLocalSecret(byte[] data) + { + return new BcTlsSecret(this, data); + } + + public override SecureRandom SecureRandom + { + get { return m_entropySource; } + } + + public override TlsCertificate CreateCertificate(short type, byte[] encoding) + { + switch (type) + { + case CertificateType.X509: + return new BcTlsCertificate(this, encoding); + case CertificateType.RawPublicKey: + return new BcTlsRawKeyCertificate(this, encoding); + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + public override TlsCipher CreateCipher(TlsCryptoParameters cryptoParams, int encryptionAlgorithm, + int macAlgorithm) + { + switch (encryptionAlgorithm) + { + case EncryptionAlgorithm.AES_128_CBC: + case EncryptionAlgorithm.ARIA_128_CBC: + case EncryptionAlgorithm.CAMELLIA_128_CBC: + case EncryptionAlgorithm.SEED_CBC: + case EncryptionAlgorithm.SM4_CBC: + return CreateCipher_Cbc(cryptoParams, encryptionAlgorithm, 16, macAlgorithm); + + case EncryptionAlgorithm.cls_3DES_EDE_CBC: + return CreateCipher_Cbc(cryptoParams, encryptionAlgorithm, 24, macAlgorithm); + + case EncryptionAlgorithm.AES_256_CBC: + case EncryptionAlgorithm.ARIA_256_CBC: + case EncryptionAlgorithm.CAMELLIA_256_CBC: + return CreateCipher_Cbc(cryptoParams, encryptionAlgorithm, 32, macAlgorithm); + + case EncryptionAlgorithm.AES_128_CCM: + // NOTE: Ignores macAlgorithm + return CreateCipher_Aes_Ccm(cryptoParams, 16, 16); + case EncryptionAlgorithm.AES_128_CCM_8: + // NOTE: Ignores macAlgorithm + return CreateCipher_Aes_Ccm(cryptoParams, 16, 8); + case EncryptionAlgorithm.AES_128_GCM: + // NOTE: Ignores macAlgorithm + return CreateCipher_Aes_Gcm(cryptoParams, 16, 16); + case EncryptionAlgorithm.AES_256_CCM: + // NOTE: Ignores macAlgorithm + return CreateCipher_Aes_Ccm(cryptoParams, 32, 16); + case EncryptionAlgorithm.AES_256_CCM_8: + // NOTE: Ignores macAlgorithm + return CreateCipher_Aes_Ccm(cryptoParams, 32, 8); + case EncryptionAlgorithm.AES_256_GCM: + // NOTE: Ignores macAlgorithm + return CreateCipher_Aes_Gcm(cryptoParams, 32, 16); + case EncryptionAlgorithm.ARIA_128_GCM: + // NOTE: Ignores macAlgorithm + return CreateCipher_Aria_Gcm(cryptoParams, 16, 16); + case EncryptionAlgorithm.ARIA_256_GCM: + // NOTE: Ignores macAlgorithm + return CreateCipher_Aria_Gcm(cryptoParams, 32, 16); + case EncryptionAlgorithm.CAMELLIA_128_GCM: + // NOTE: Ignores macAlgorithm + return CreateCipher_Camellia_Gcm(cryptoParams, 16, 16); + case EncryptionAlgorithm.CAMELLIA_256_GCM: + // NOTE: Ignores macAlgorithm + return CreateCipher_Camellia_Gcm(cryptoParams, 32, 16); + case EncryptionAlgorithm.CHACHA20_POLY1305: + // NOTE: Ignores macAlgorithm + return CreateChaCha20Poly1305(cryptoParams); + case EncryptionAlgorithm.NULL: + return CreateNullCipher(cryptoParams, macAlgorithm); + case EncryptionAlgorithm.SM4_CCM: + // NOTE: Ignores macAlgorithm + return CreateCipher_SM4_Ccm(cryptoParams); + case EncryptionAlgorithm.SM4_GCM: + // NOTE: Ignores macAlgorithm + return CreateCipher_SM4_Gcm(cryptoParams); + + case EncryptionAlgorithm.DES40_CBC: + case EncryptionAlgorithm.DES_CBC: + case EncryptionAlgorithm.IDEA_CBC: + case EncryptionAlgorithm.RC2_CBC_40: + case EncryptionAlgorithm.RC4_128: + case EncryptionAlgorithm.RC4_40: + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + public override TlsDHDomain CreateDHDomain(TlsDHConfig dhConfig) + { + return new BcTlsDHDomain(this, dhConfig); + } + + public override TlsECDomain CreateECDomain(TlsECConfig ecConfig) + { + switch (ecConfig.NamedGroup) + { + case NamedGroup.x25519: + return new BcX25519Domain(this); + case NamedGroup.x448: + return new BcX448Domain(this); + default: + return new BcTlsECDomain(this, ecConfig); + } + } + + public override TlsNonceGenerator CreateNonceGenerator(byte[] additionalSeedMaterial) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return CreateNonceGenerator(Spans.FromNullableReadOnly(additionalSeedMaterial)); +#else + int cryptoHashAlgorithm = CryptoHashAlgorithm.sha256; + IDigest digest = CreateDigest(cryptoHashAlgorithm); + + int seedLength = TlsCryptoUtilities.GetHashOutputSize(cryptoHashAlgorithm); + byte[] seed = new byte[seedLength]; + SecureRandom.NextBytes(seed); + + DigestRandomGenerator randomGenerator = new DigestRandomGenerator(digest); + randomGenerator.AddSeedMaterial(additionalSeedMaterial); + randomGenerator.AddSeedMaterial(seed); + + return new BcTlsNonceGenerator(randomGenerator); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override TlsNonceGenerator CreateNonceGenerator(ReadOnlySpan additionalSeedMaterial) + { + int cryptoHashAlgorithm = CryptoHashAlgorithm.sha256; + IDigest digest = CreateDigest(cryptoHashAlgorithm); + + int seedLength = TlsCryptoUtilities.GetHashOutputSize(cryptoHashAlgorithm); + Span seed = seedLength <= 128 + ? stackalloc byte[seedLength] + : new byte[seedLength]; + SecureRandom.NextBytes(seed); + + DigestRandomGenerator randomGenerator = new DigestRandomGenerator(digest); + randomGenerator.AddSeedMaterial(additionalSeedMaterial); + randomGenerator.AddSeedMaterial(seed); + + return new BcTlsNonceGenerator(randomGenerator); + } +#endif + + public override bool HasAnyStreamVerifiers(IList signatureAndHashAlgorithms) + { + foreach (SignatureAndHashAlgorithm algorithm in signatureAndHashAlgorithms) + { + switch (SignatureScheme.From(algorithm)) + { + case SignatureScheme.ed25519: + case SignatureScheme.ed448: + return true; + } + } + return false; + } + + public override bool HasAnyStreamVerifiersLegacy(short[] clientCertificateTypes) + { + return false; + } + + public override bool HasCryptoHashAlgorithm(int cryptoHashAlgorithm) + { + switch (cryptoHashAlgorithm) + { + case CryptoHashAlgorithm.md5: + case CryptoHashAlgorithm.sha1: + case CryptoHashAlgorithm.sha224: + case CryptoHashAlgorithm.sha256: + case CryptoHashAlgorithm.sha384: + case CryptoHashAlgorithm.sha512: + case CryptoHashAlgorithm.sm3: + return true; + + default: + return false; + } + } + + public override bool HasCryptoSignatureAlgorithm(int cryptoSignatureAlgorithm) + { + switch (cryptoSignatureAlgorithm) + { + case CryptoSignatureAlgorithm.rsa: + case CryptoSignatureAlgorithm.dsa: + case CryptoSignatureAlgorithm.ecdsa: + case CryptoSignatureAlgorithm.rsa_pss_rsae_sha256: + case CryptoSignatureAlgorithm.rsa_pss_rsae_sha384: + case CryptoSignatureAlgorithm.rsa_pss_rsae_sha512: + case CryptoSignatureAlgorithm.ed25519: + case CryptoSignatureAlgorithm.ed448: + case CryptoSignatureAlgorithm.rsa_pss_pss_sha256: + case CryptoSignatureAlgorithm.rsa_pss_pss_sha384: + case CryptoSignatureAlgorithm.rsa_pss_pss_sha512: + return true; + + // TODO[draft-smyshlyaev-tls12-gost-suites-10] + case CryptoSignatureAlgorithm.gostr34102012_256: + case CryptoSignatureAlgorithm.gostr34102012_512: + + // TODO[RFC 8998] + case CryptoSignatureAlgorithm.sm2: + + default: + return false; + } + } + + public override bool HasDHAgreement() + { + return true; + } + + public override bool HasECDHAgreement() + { + return true; + } + + public override bool HasEncryptionAlgorithm(int encryptionAlgorithm) + { + switch (encryptionAlgorithm) + { + case EncryptionAlgorithm.AES_128_CBC: + case EncryptionAlgorithm.AES_128_CCM: + case EncryptionAlgorithm.AES_128_CCM_8: + case EncryptionAlgorithm.AES_128_GCM: + case EncryptionAlgorithm.AES_256_CBC: + case EncryptionAlgorithm.AES_256_CCM: + case EncryptionAlgorithm.AES_256_CCM_8: + case EncryptionAlgorithm.AES_256_GCM: + case EncryptionAlgorithm.ARIA_128_CBC: + case EncryptionAlgorithm.ARIA_128_GCM: + case EncryptionAlgorithm.ARIA_256_CBC: + case EncryptionAlgorithm.ARIA_256_GCM: + case EncryptionAlgorithm.CAMELLIA_128_CBC: + case EncryptionAlgorithm.CAMELLIA_128_GCM: + case EncryptionAlgorithm.CAMELLIA_256_CBC: + case EncryptionAlgorithm.CAMELLIA_256_GCM: + case EncryptionAlgorithm.CHACHA20_POLY1305: + case EncryptionAlgorithm.cls_3DES_EDE_CBC: + case EncryptionAlgorithm.NULL: + case EncryptionAlgorithm.SEED_CBC: + case EncryptionAlgorithm.SM4_CBC: + case EncryptionAlgorithm.SM4_CCM: + case EncryptionAlgorithm.SM4_GCM: + return true; + + case EncryptionAlgorithm.DES_CBC: + case EncryptionAlgorithm.DES40_CBC: + case EncryptionAlgorithm.IDEA_CBC: + case EncryptionAlgorithm.RC2_CBC_40: + case EncryptionAlgorithm.RC4_128: + case EncryptionAlgorithm.RC4_40: + default: + return false; + } + } + + public override bool HasHkdfAlgorithm(int cryptoHashAlgorithm) + { + switch (cryptoHashAlgorithm) + { + case CryptoHashAlgorithm.sha256: + case CryptoHashAlgorithm.sha384: + case CryptoHashAlgorithm.sha512: + case CryptoHashAlgorithm.sm3: + return true; + + default: + return false; + } + } + + public override bool HasMacAlgorithm(int macAlgorithm) + { + switch (macAlgorithm) + { + case MacAlgorithm.hmac_md5: + case MacAlgorithm.hmac_sha1: + case MacAlgorithm.hmac_sha256: + case MacAlgorithm.hmac_sha384: + case MacAlgorithm.hmac_sha512: + return true; + + default: + return false; + } + } + + public override bool HasNamedGroup(int namedGroup) + { + return NamedGroup.RefersToASpecificGroup(namedGroup); + } + + public override bool HasRsaEncryption() + { + return true; + } + + public override bool HasSignatureAlgorithm(short signatureAlgorithm) + { + switch (signatureAlgorithm) + { + case SignatureAlgorithm.rsa: + case SignatureAlgorithm.dsa: + case SignatureAlgorithm.ecdsa: + case SignatureAlgorithm.ed25519: + case SignatureAlgorithm.ed448: + case SignatureAlgorithm.rsa_pss_rsae_sha256: + case SignatureAlgorithm.rsa_pss_rsae_sha384: + case SignatureAlgorithm.rsa_pss_rsae_sha512: + case SignatureAlgorithm.rsa_pss_pss_sha256: + case SignatureAlgorithm.rsa_pss_pss_sha384: + case SignatureAlgorithm.rsa_pss_pss_sha512: + case SignatureAlgorithm.ecdsa_brainpoolP256r1tls13_sha256: + case SignatureAlgorithm.ecdsa_brainpoolP384r1tls13_sha384: + case SignatureAlgorithm.ecdsa_brainpoolP512r1tls13_sha512: + return true; + + // TODO[draft-smyshlyaev-tls12-gost-suites-10] + case SignatureAlgorithm.gostr34102012_256: + case SignatureAlgorithm.gostr34102012_512: + // TODO[RFC 8998] + //case SignatureAlgorithm.sm2: + default: + return false; + } + } + + public override bool HasSignatureAndHashAlgorithm(SignatureAndHashAlgorithm sigAndHashAlgorithm) + { + short signature = sigAndHashAlgorithm.Signature; + + switch (sigAndHashAlgorithm.Hash) + { + case HashAlgorithm.md5: + return SignatureAlgorithm.rsa == signature && HasSignatureAlgorithm(signature); + default: + return HasSignatureAlgorithm(signature); + } + } + + public override bool HasSignatureScheme(int signatureScheme) + { + switch (signatureScheme) + { + case SignatureScheme.sm2sig_sm3: + return false; + default: + { + short signature = SignatureScheme.GetSignatureAlgorithm(signatureScheme); + + switch(SignatureScheme.GetCryptoHashAlgorithm(signatureScheme)) + { + case CryptoHashAlgorithm.md5: + return SignatureAlgorithm.rsa == signature && HasSignatureAlgorithm(signature); + default: + return HasSignatureAlgorithm(signature); + } + } + } + } + + public override bool HasSrpAuthentication() + { + return true; + } + + public override TlsSecret CreateSecret(byte[] data) + { + try + { + return AdoptLocalSecret(Arrays.Clone(data)); + } + finally + { + // TODO[tls-ops] Add this after checking all callers + //if (data != null) + //{ + // Array.Clear(data, 0, data.Length); + //} + } + } + + public override TlsSecret GenerateRsaPreMasterSecret(ProtocolVersion version) + { + byte[] data = new byte[48]; + SecureRandom.NextBytes(data); + TlsUtilities.WriteVersion(version, data, 0); + return AdoptLocalSecret(data); + } + + public virtual IDigest CloneDigest(int cryptoHashAlgorithm, IDigest digest) + { + switch (cryptoHashAlgorithm) + { + case CryptoHashAlgorithm.md5: + return new MD5Digest((MD5Digest)digest); + case CryptoHashAlgorithm.sha1: + return new Sha1Digest((Sha1Digest)digest); + case CryptoHashAlgorithm.sha224: + return new Sha224Digest((Sha224Digest)digest); + case CryptoHashAlgorithm.sha256: + return new Sha256Digest((Sha256Digest)digest); + case CryptoHashAlgorithm.sha384: + return new Sha384Digest((Sha384Digest)digest); + case CryptoHashAlgorithm.sha512: + return new Sha512Digest((Sha512Digest)digest); + case CryptoHashAlgorithm.sm3: + return new SM3Digest((SM3Digest)digest); + default: + throw new ArgumentException("invalid CryptoHashAlgorithm: " + cryptoHashAlgorithm); + } + } + + public virtual IDigest CreateDigest(int cryptoHashAlgorithm) + { + switch (cryptoHashAlgorithm) + { + case CryptoHashAlgorithm.md5: + return new MD5Digest(); + case CryptoHashAlgorithm.sha1: + return new Sha1Digest(); + case CryptoHashAlgorithm.sha224: + return new Sha224Digest(); + case CryptoHashAlgorithm.sha256: + return new Sha256Digest(); + case CryptoHashAlgorithm.sha384: + return new Sha384Digest(); + case CryptoHashAlgorithm.sha512: + return new Sha512Digest(); + case CryptoHashAlgorithm.sm3: + return new SM3Digest(); + default: + throw new ArgumentException("invalid CryptoHashAlgorithm: " + cryptoHashAlgorithm); + } + } + + public override TlsHash CreateHash(int cryptoHashAlgorithm) + { + return new BcTlsHash(this, cryptoHashAlgorithm); + } + + protected virtual IBlockCipher CreateBlockCipher(int encryptionAlgorithm) + { + switch (encryptionAlgorithm) + { + case EncryptionAlgorithm.cls_3DES_EDE_CBC: + return CreateDesEdeEngine(); + case EncryptionAlgorithm.AES_128_CBC: + case EncryptionAlgorithm.AES_256_CBC: + return CreateAesEngine(); + case EncryptionAlgorithm.ARIA_128_CBC: + case EncryptionAlgorithm.ARIA_256_CBC: + return CreateAriaEngine(); + case EncryptionAlgorithm.CAMELLIA_128_CBC: + case EncryptionAlgorithm.CAMELLIA_256_CBC: + return CreateCamelliaEngine(); + case EncryptionAlgorithm.SEED_CBC: + return CreateSeedEngine(); + case EncryptionAlgorithm.SM4_CBC: + return CreateSM4Engine(); + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + protected virtual IBlockCipher CreateCbcBlockCipher(IBlockCipher blockCipher) + { + return new CbcBlockCipher(blockCipher); + } + + protected virtual IBlockCipher CreateCbcBlockCipher(int encryptionAlgorithm) + { + return CreateCbcBlockCipher(CreateBlockCipher(encryptionAlgorithm)); + } + + protected virtual TlsCipher CreateChaCha20Poly1305(TlsCryptoParameters cryptoParams) + { + BcChaCha20Poly1305 encrypt = new BcChaCha20Poly1305(true); + BcChaCha20Poly1305 decrypt = new BcChaCha20Poly1305(false); + + return new TlsAeadCipher(cryptoParams, encrypt, decrypt, 32, 16, TlsAeadCipher.AEAD_CHACHA20_POLY1305); + } + + protected virtual TlsAeadCipher CreateCipher_Aes_Ccm(TlsCryptoParameters cryptoParams, int cipherKeySize, + int macSize) + { + BcTlsAeadCipherImpl encrypt = new BcTlsAeadCipherImpl(CreateAeadCipher_Aes_Ccm(), true); + BcTlsAeadCipherImpl decrypt = new BcTlsAeadCipherImpl(CreateAeadCipher_Aes_Ccm(), false); + + return new TlsAeadCipher(cryptoParams, encrypt, decrypt, cipherKeySize, macSize, TlsAeadCipher.AEAD_CCM); + } + + protected virtual TlsAeadCipher CreateCipher_Aes_Gcm(TlsCryptoParameters cryptoParams, int cipherKeySize, + int macSize) + { + BcTlsAeadCipherImpl encrypt = new BcTlsAeadCipherImpl(CreateAeadCipher_Aes_Gcm(), true); + BcTlsAeadCipherImpl decrypt = new BcTlsAeadCipherImpl(CreateAeadCipher_Aes_Gcm(), false); + + return new TlsAeadCipher(cryptoParams, encrypt, decrypt, cipherKeySize, macSize, TlsAeadCipher.AEAD_GCM); + } + + protected virtual TlsAeadCipher CreateCipher_Aria_Gcm(TlsCryptoParameters cryptoParams, int cipherKeySize, + int macSize) + { + BcTlsAeadCipherImpl encrypt = new BcTlsAeadCipherImpl(CreateAeadCipher_Aria_Gcm(), true); + BcTlsAeadCipherImpl decrypt = new BcTlsAeadCipherImpl(CreateAeadCipher_Aria_Gcm(), false); + + return new TlsAeadCipher(cryptoParams, encrypt, decrypt, cipherKeySize, macSize, TlsAeadCipher.AEAD_GCM); + } + + protected virtual TlsAeadCipher CreateCipher_Camellia_Gcm(TlsCryptoParameters cryptoParams, int cipherKeySize, + int macSize) + { + BcTlsAeadCipherImpl encrypt = new BcTlsAeadCipherImpl(CreateAeadCipher_Camellia_Gcm(), true); + BcTlsAeadCipherImpl decrypt = new BcTlsAeadCipherImpl(CreateAeadCipher_Camellia_Gcm(), false); + + return new TlsAeadCipher(cryptoParams, encrypt, decrypt, cipherKeySize, macSize, TlsAeadCipher.AEAD_GCM); + } + + protected virtual TlsCipher CreateCipher_Cbc(TlsCryptoParameters cryptoParams, int encryptionAlgorithm, + int cipherKeySize, int macAlgorithm) + { + BcTlsBlockCipherImpl encrypt = new BcTlsBlockCipherImpl(CreateCbcBlockCipher(encryptionAlgorithm), true); + BcTlsBlockCipherImpl decrypt = new BcTlsBlockCipherImpl(CreateCbcBlockCipher(encryptionAlgorithm), false); + + TlsHmac clientMac = CreateMac(cryptoParams, macAlgorithm); + TlsHmac serverMac = CreateMac(cryptoParams, macAlgorithm); + + return new TlsBlockCipher(cryptoParams, encrypt, decrypt, clientMac, serverMac, cipherKeySize); + } + + protected virtual TlsAeadCipher CreateCipher_SM4_Ccm(TlsCryptoParameters cryptoParams) + { + BcTlsAeadCipherImpl encrypt = new BcTlsAeadCipherImpl(CreateAeadCipher_SM4_Ccm(), true); + BcTlsAeadCipherImpl decrypt = new BcTlsAeadCipherImpl(CreateAeadCipher_SM4_Ccm(), false); + + return new TlsAeadCipher(cryptoParams, encrypt, decrypt, 16, 16, TlsAeadCipher.AEAD_CCM); + } + + protected virtual TlsAeadCipher CreateCipher_SM4_Gcm(TlsCryptoParameters cryptoParams) + { + BcTlsAeadCipherImpl encrypt = new BcTlsAeadCipherImpl(CreateAeadCipher_SM4_Gcm(), true); + BcTlsAeadCipherImpl decrypt = new BcTlsAeadCipherImpl(CreateAeadCipher_SM4_Gcm(), false); + + return new TlsAeadCipher(cryptoParams, encrypt, decrypt, 16, 16, TlsAeadCipher.AEAD_GCM); + } + + protected virtual TlsNullCipher CreateNullCipher(TlsCryptoParameters cryptoParams, int macAlgorithm) + { + return new TlsNullCipher(cryptoParams, CreateMac(cryptoParams, macAlgorithm), + CreateMac(cryptoParams, macAlgorithm)); + } + + protected virtual IBlockCipher CreateAesEngine() + { + return AesUtilities.CreateEngine(); + } + + protected virtual IBlockCipher CreateAriaEngine() + { + return new AriaEngine(); + } + + protected virtual IBlockCipher CreateCamelliaEngine() + { + return new CamelliaEngine(); + } + + protected virtual IBlockCipher CreateDesEdeEngine() + { + return new DesEdeEngine(); + } + + protected virtual IBlockCipher CreateSeedEngine() + { + return new SeedEngine(); + } + + protected virtual IBlockCipher CreateSM4Engine() + { + return new SM4Engine(); + } + + protected virtual IAeadCipher CreateCcmMode(IBlockCipher engine) + { + return new CcmBlockCipher(engine); + } + + protected virtual IAeadCipher CreateGcmMode(IBlockCipher engine) + { + // TODO Consider allowing custom configuration of multiplier + return new GcmBlockCipher(engine); + } + + protected virtual IAeadCipher CreateAeadCipher_Aes_Ccm() + { + return CreateCcmMode(CreateAesEngine()); + } + + protected virtual IAeadCipher CreateAeadCipher_Aes_Gcm() + { + return CreateGcmMode(CreateAesEngine()); + } + + protected virtual IAeadCipher CreateAeadCipher_Aria_Gcm() + { + return CreateGcmMode(CreateAriaEngine()); + } + + protected virtual IAeadCipher CreateAeadCipher_Camellia_Gcm() + { + return CreateGcmMode(CreateCamelliaEngine()); + } + + protected virtual IAeadCipher CreateAeadCipher_SM4_Ccm() + { + return CreateCcmMode(CreateSM4Engine()); + } + + protected virtual IAeadCipher CreateAeadCipher_SM4_Gcm() + { + return CreateGcmMode(CreateSM4Engine()); + } + + public override TlsHmac CreateHmac(int macAlgorithm) + { + switch (macAlgorithm) + { + case MacAlgorithm.hmac_md5: + case MacAlgorithm.hmac_sha1: + case MacAlgorithm.hmac_sha256: + case MacAlgorithm.hmac_sha384: + case MacAlgorithm.hmac_sha512: + return CreateHmacForHash(TlsCryptoUtilities.GetHashForHmac(macAlgorithm)); + + default: + throw new ArgumentException("invalid MacAlgorithm: " + macAlgorithm); + } + } + + public override TlsHmac CreateHmacForHash(int cryptoHashAlgorithm) + { + return new BcTlsHmac(new HMac(CreateDigest(cryptoHashAlgorithm))); + } + + protected virtual TlsHmac CreateHmac_Ssl(int macAlgorithm) + { + switch (macAlgorithm) + { + case MacAlgorithm.hmac_md5: + return new BcSsl3Hmac(CreateDigest(CryptoHashAlgorithm.md5)); + case MacAlgorithm.hmac_sha1: + return new BcSsl3Hmac(CreateDigest(CryptoHashAlgorithm.sha1)); + case MacAlgorithm.hmac_sha256: + return new BcSsl3Hmac(CreateDigest(CryptoHashAlgorithm.sha256)); + case MacAlgorithm.hmac_sha384: + return new BcSsl3Hmac(CreateDigest(CryptoHashAlgorithm.sha384)); + case MacAlgorithm.hmac_sha512: + return new BcSsl3Hmac(CreateDigest(CryptoHashAlgorithm.sha512)); + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + protected virtual TlsHmac CreateMac(TlsCryptoParameters cryptoParams, int macAlgorithm) + { + if (TlsImplUtilities.IsSsl(cryptoParams)) + { + return CreateHmac_Ssl(macAlgorithm); + } + else + { + return CreateHmac(macAlgorithm); + } + } + + public override TlsSrp6Client CreateSrp6Client(TlsSrpConfig srpConfig) + { + BigInteger[] ng = srpConfig.GetExplicitNG(); + Srp6GroupParameters srpGroup = new Srp6GroupParameters(ng[0], ng[1]); + + Srp6Client srp6Client = new Srp6Client(); + srp6Client.Init(srpGroup, CreateDigest(CryptoHashAlgorithm.sha1), SecureRandom); + + return new BcTlsSrp6Client(srp6Client); + } + + public override TlsSrp6Server CreateSrp6Server(TlsSrpConfig srpConfig, BigInteger srpVerifier) + { + BigInteger[] ng = srpConfig.GetExplicitNG(); + Srp6GroupParameters srpGroup = new Srp6GroupParameters(ng[0], ng[1]); + + Srp6Server srp6Server = new Srp6Server(); + srp6Server.Init(srpGroup, srpVerifier, CreateDigest(CryptoHashAlgorithm.sha1), SecureRandom); + + return new BcTlsSrp6Server(srp6Server); + } + + public override TlsSrp6VerifierGenerator CreateSrp6VerifierGenerator(TlsSrpConfig srpConfig) + { + BigInteger[] ng = srpConfig.GetExplicitNG(); + + Srp6VerifierGenerator srp6VerifierGenerator = new Srp6VerifierGenerator(); + srp6VerifierGenerator.Init(ng[0], ng[1], CreateDigest(CryptoHashAlgorithm.sha1)); + + return new BcTlsSrp6VerifierGenerator(srp6VerifierGenerator); + } + + public override TlsSecret HkdfInit(int cryptoHashAlgorithm) + { + return AdoptLocalSecret(new byte[TlsCryptoUtilities.GetHashOutputSize(cryptoHashAlgorithm)]); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsCrypto.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsCrypto.cs.meta new file mode 100644 index 000000000..4046a017b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsCrypto.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8406d1d47a82ead44b9695dc4bbf14f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDH.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDH.cs new file mode 100644 index 000000000..958d40bf0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDH.cs @@ -0,0 +1,43 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// Support class for ephemeral Diffie-Hellman using the BC light-weight library. + public class BcTlsDH + : TlsAgreement + { + protected readonly BcTlsDHDomain m_domain; + + protected AsymmetricCipherKeyPair m_localKeyPair; + protected DHPublicKeyParameters m_peerPublicKey; + + public BcTlsDH(BcTlsDHDomain domain) + { + this.m_domain = domain; + } + + public virtual byte[] GenerateEphemeral() + { + this.m_localKeyPair = m_domain.GenerateKeyPair(); + + return m_domain.EncodePublicKey((DHPublicKeyParameters)m_localKeyPair.Public); + } + + public virtual void ReceivePeerValue(byte[] peerValue) + { + this.m_peerPublicKey = m_domain.DecodePublicKey(peerValue); + } + + public virtual TlsSecret CalculateSecret() + { + return m_domain.CalculateDHAgreement((DHPrivateKeyParameters)m_localKeyPair.Private, m_peerPublicKey); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDH.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDH.cs.meta new file mode 100644 index 000000000..f50f087e8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDH.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b464263854ef8554bb21d42813144860 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDHDomain.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDHDomain.cs new file mode 100644 index 000000000..3c5f5c50f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDHDomain.cs @@ -0,0 +1,121 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// BC light-weight support class for Diffie-Hellman key pair generation and key agreement over a + /// specified Diffie-Hellman configuration. + public class BcTlsDHDomain + : TlsDHDomain + { + private static byte[] EncodeValue(DHParameters dh, bool padded, BigInteger x) + { + return padded + ? BigIntegers.AsUnsignedByteArray(GetValueLength(dh), x) + : BigIntegers.AsUnsignedByteArray(x); + } + + private static int GetValueLength(DHParameters dh) + { + return BigIntegers.GetUnsignedByteLength(dh.P); + } + + public static BcTlsSecret CalculateDHAgreement(BcTlsCrypto crypto, DHPrivateKeyParameters privateKey, + DHPublicKeyParameters publicKey, bool padded) + { + DHBasicAgreement basicAgreement = new DHBasicAgreement(); + basicAgreement.Init(privateKey); + BigInteger agreementValue = basicAgreement.CalculateAgreement(publicKey); + byte[] secret = EncodeValue(privateKey.Parameters, padded, agreementValue); + return crypto.AdoptLocalSecret(secret); + } + + public static DHParameters GetDomainParameters(TlsDHConfig dhConfig) + { + DHGroup dhGroup = TlsDHUtilities.GetDHGroup(dhConfig); + if (dhGroup == null) + throw new ArgumentException("No DH configuration provided"); + + return new DHParameters(dhGroup.P, dhGroup.G, dhGroup.Q, dhGroup.L); + } + + protected readonly BcTlsCrypto m_crypto; + protected readonly TlsDHConfig m_config; + protected readonly DHParameters m_domainParameters; + + public BcTlsDHDomain(BcTlsCrypto crypto, TlsDHConfig dhConfig) + { + this.m_crypto = crypto; + this.m_config = dhConfig; + this.m_domainParameters = GetDomainParameters(dhConfig); + } + + public virtual BcTlsSecret CalculateDHAgreement(DHPrivateKeyParameters privateKey, + DHPublicKeyParameters publicKey) + { + return CalculateDHAgreement(m_crypto, privateKey, publicKey, m_config.IsPadded); + } + + public virtual TlsAgreement CreateDH() + { + return new BcTlsDH(this); + } + + /// + public virtual BigInteger DecodeParameter(byte[] encoding) + { + if (m_config.IsPadded && GetValueLength(m_domainParameters) != encoding.Length) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + return new BigInteger(1, encoding); + } + + /// + public virtual DHPublicKeyParameters DecodePublicKey(byte[] encoding) + { + /* + * RFC 7919 3. [..] the client MUST verify that dh_Ys is in the range 1 < dh_Ys < dh_p - 1. + * If dh_Ys is not in this range, the client MUST terminate the connection with a fatal + * handshake_failure(40) alert. + */ + try + { + BigInteger y = DecodeParameter(encoding); + + return new DHPublicKeyParameters(y, m_domainParameters); + } + catch (Exception e) + { + throw new TlsFatalAlert(AlertDescription.handshake_failure, e); + } + } + + public virtual byte[] EncodeParameter(BigInteger x) + { + return EncodeValue(m_domainParameters, m_config.IsPadded, x); + } + + public virtual byte[] EncodePublicKey(DHPublicKeyParameters publicKey) + { + return EncodeValue(m_domainParameters, true, publicKey.Y); + } + + public virtual AsymmetricCipherKeyPair GenerateKeyPair() + { + DHBasicKeyPairGenerator keyPairGenerator = new DHBasicKeyPairGenerator(); + keyPairGenerator.Init(new DHKeyGenerationParameters(m_crypto.SecureRandom, m_domainParameters)); + return keyPairGenerator.GenerateKeyPair(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDHDomain.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDHDomain.cs.meta new file mode 100644 index 000000000..d75e8aabc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDHDomain.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9cea54b730b18b048998497501272259 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDsaSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDsaSigner.cs new file mode 100644 index 000000000..586198cd4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDsaSigner.cs @@ -0,0 +1,33 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// Implementation class for generation of the raw DSA signature type using the BC light-weight API. + /// + public class BcTlsDsaSigner + : BcTlsDssSigner + { + public BcTlsDsaSigner(BcTlsCrypto crypto, DsaPrivateKeyParameters privateKey) + : base(crypto, privateKey) + { + } + + protected override IDsa CreateDsaImpl(int cryptoHashAlgorithm) + { + return new DsaSigner(new HMacDsaKCalculator(m_crypto.CreateDigest(cryptoHashAlgorithm))); + } + + protected override short SignatureAlgorithm + { + get { return Tls.SignatureAlgorithm.dsa; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDsaSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDsaSigner.cs.meta new file mode 100644 index 000000000..037bdb0b6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDsaSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 935e86f6ecdca034386f1abbbd5f44df +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDsaVerifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDsaVerifier.cs new file mode 100644 index 000000000..b4d39c7d5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDsaVerifier.cs @@ -0,0 +1,33 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// Implementation class for the verification of the raw DSA signature type using the BC light-weight API. + /// + public class BcTlsDsaVerifier + : BcTlsDssVerifier + { + public BcTlsDsaVerifier(BcTlsCrypto crypto, DsaPublicKeyParameters publicKey) + : base(crypto, publicKey) + { + } + + protected override IDsa CreateDsaImpl() + { + return new DsaSigner(); + } + + protected override short SignatureAlgorithm + { + get { return Tls.SignatureAlgorithm.dsa; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDsaVerifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDsaVerifier.cs.meta new file mode 100644 index 000000000..42dcaea47 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDsaVerifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11fb82bcb75bb2a43b8a07deec5c76ae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDssSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDssSigner.cs new file mode 100644 index 000000000..da3ef04d2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDssSigner.cs @@ -0,0 +1,58 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// BC light-weight base class for the signers implementing the two DSA style algorithms from FIPS PUB + /// 186-4: DSA and ECDSA. + public abstract class BcTlsDssSigner + : BcTlsSigner + { + protected BcTlsDssSigner(BcTlsCrypto crypto, AsymmetricKeyParameter privateKey) + : base(crypto, privateKey) + { + } + + protected abstract IDsa CreateDsaImpl(int cryptoHashAlgorithm); + + protected abstract short SignatureAlgorithm { get; } + + public override byte[] GenerateRawSignature(SignatureAndHashAlgorithm algorithm, byte[] hash) + { + if (algorithm != null && algorithm.Signature != SignatureAlgorithm) + throw new InvalidOperationException("Invalid algorithm: " + algorithm); + + int cryptoHashAlgorithm = (null == algorithm) + ? CryptoHashAlgorithm.sha1 + : TlsCryptoUtilities.GetHash(algorithm.Hash); + + ISigner signer = new DsaDigestSigner(CreateDsaImpl(cryptoHashAlgorithm), new NullDigest()); + signer.Init(true, new ParametersWithRandom(m_privateKey, m_crypto.SecureRandom)); + if (algorithm == null) + { + // Note: Only use the SHA1 part of the (MD5/SHA1) hash + signer.BlockUpdate(hash, 16, 20); + } + else + { + signer.BlockUpdate(hash, 0, hash.Length); + } + try + { + return signer.GenerateSignature(); + } + catch (CryptoException e) + { + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDssSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDssSigner.cs.meta new file mode 100644 index 000000000..71ccebdef --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDssSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 194cf4af65133e24a8610f0f14ea39d6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDssVerifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDssVerifier.cs new file mode 100644 index 000000000..cfc8a5cd9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDssVerifier.cs @@ -0,0 +1,47 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// BC light-weight base class for the verifiers supporting the two DSA style algorithms from FIPS PUB + /// 186-4: DSA and ECDSA. + public abstract class BcTlsDssVerifier + : BcTlsVerifier + { + protected BcTlsDssVerifier(BcTlsCrypto crypto, AsymmetricKeyParameter publicKey) + : base(crypto, publicKey) + { + } + + protected abstract IDsa CreateDsaImpl(); + + protected abstract short SignatureAlgorithm { get; } + + public override bool VerifyRawSignature(DigitallySigned digitallySigned, byte[] hash) + { + SignatureAndHashAlgorithm algorithm = digitallySigned.Algorithm; + if (algorithm != null && algorithm.Signature != SignatureAlgorithm) + throw new InvalidOperationException("Invalid algorithm: " + algorithm); + + ISigner signer = new DsaDigestSigner(CreateDsaImpl(), new NullDigest()); + signer.Init(false, m_publicKey); + if (algorithm == null) + { + // Note: Only use the SHA1 part of the (MD5/SHA1) hash + signer.BlockUpdate(hash, 16, 20); + } + else + { + signer.BlockUpdate(hash, 0, hash.Length); + } + return signer.VerifySignature(digitallySigned.Signature); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDssVerifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDssVerifier.cs.meta new file mode 100644 index 000000000..6e139c341 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsDssVerifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c13381f4a661cd468c640a992543193 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDH.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDH.cs new file mode 100644 index 000000000..e43b26a74 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDH.cs @@ -0,0 +1,43 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// Support class for ephemeral Elliptic Curve Diffie-Hellman using the BC light-weight library. + public class BcTlsECDH + : TlsAgreement + { + protected readonly BcTlsECDomain m_domain; + + protected AsymmetricCipherKeyPair m_localKeyPair; + protected ECPublicKeyParameters m_peerPublicKey; + + public BcTlsECDH(BcTlsECDomain domain) + { + this.m_domain = domain; + } + + public virtual byte[] GenerateEphemeral() + { + this.m_localKeyPair = m_domain.GenerateKeyPair(); + + return m_domain.EncodePublicKey((ECPublicKeyParameters)m_localKeyPair.Public); + } + + public virtual void ReceivePeerValue(byte[] peerValue) + { + this.m_peerPublicKey = m_domain.DecodePublicKey(peerValue); + } + + public virtual TlsSecret CalculateSecret() + { + return m_domain.CalculateECDHAgreement((ECPrivateKeyParameters)m_localKeyPair.Private, m_peerPublicKey); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDH.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDH.cs.meta new file mode 100644 index 000000000..517087218 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDH.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 56d43de28e4e3334d83bd8fadb698741 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDomain.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDomain.cs new file mode 100644 index 000000000..6dbd2347e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDomain.cs @@ -0,0 +1,125 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /** + * EC domain class for generating key pairs and performing key agreement. + */ + public class BcTlsECDomain + : TlsECDomain + { + public static BcTlsSecret CalculateECDHAgreement(BcTlsCrypto crypto, ECPrivateKeyParameters privateKey, + ECPublicKeyParameters publicKey) + { + ECDHBasicAgreement basicAgreement = new ECDHBasicAgreement(); + basicAgreement.Init(privateKey); + BigInteger agreementValue = basicAgreement.CalculateAgreement(publicKey); + + /* + * RFC 4492 5.10. Note that this octet string (Z in IEEE 1363 terminology) as output by + * FE2OSP, the Field Element to Octet String Conversion Primitive, has constant length for + * any given field; leading zeros found in this octet string MUST NOT be truncated. + */ + byte[] secret = BigIntegers.AsUnsignedByteArray(basicAgreement.GetFieldSize(), agreementValue); + return crypto.AdoptLocalSecret(secret); + } + + public static ECDomainParameters GetDomainParameters(TlsECConfig ecConfig) + { + return GetDomainParameters(ecConfig.NamedGroup); + } + + public static ECDomainParameters GetDomainParameters(int namedGroup) + { + if (!NamedGroup.RefersToASpecificCurve(namedGroup)) + return null; + + // Parameters are lazily created the first time a particular curve is accessed + + string curveName = NamedGroup.GetCurveName(namedGroup); + X9ECParameters ecP = ECKeyPairGenerator.FindECCurveByName(curveName); + if (ecP == null) + return null; + + // It's a bit inefficient to do this conversion every time + return new ECDomainParameters(ecP.Curve, ecP.G, ecP.N, ecP.H, ecP.GetSeed()); + } + + protected readonly BcTlsCrypto m_crypto; + protected readonly TlsECConfig m_config; + protected readonly ECDomainParameters m_domainParameters; + + public BcTlsECDomain(BcTlsCrypto crypto, TlsECConfig ecConfig) + { + this.m_crypto = crypto; + this.m_config = ecConfig; + this.m_domainParameters = GetDomainParameters(ecConfig); + } + + public virtual BcTlsSecret CalculateECDHAgreement(ECPrivateKeyParameters privateKey, + ECPublicKeyParameters publicKey) + { + return CalculateECDHAgreement(m_crypto, privateKey, publicKey); + } + + public virtual TlsAgreement CreateECDH() + { + return new BcTlsECDH(this); + } + + public virtual ECPoint DecodePoint(byte[] encoding) + { + return m_domainParameters.Curve.DecodePoint(encoding); + } + + /// + public virtual ECPublicKeyParameters DecodePublicKey(byte[] encoding) + { + try + { + ECPoint point = DecodePoint(encoding); + + return new ECPublicKeyParameters(point, m_domainParameters); + } + catch (IOException e) + { + throw e; + } + catch (Exception e) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter, e); + } + } + + public virtual byte[] EncodePoint(ECPoint point) + { + return point.GetEncoded(false); + } + + public virtual byte[] EncodePublicKey(ECPublicKeyParameters publicKey) + { + return EncodePoint(publicKey.Q); + } + + public virtual AsymmetricCipherKeyPair GenerateKeyPair() + { + ECKeyPairGenerator keyPairGenerator = new ECKeyPairGenerator(); + keyPairGenerator.Init(new ECKeyGenerationParameters(m_domainParameters, m_crypto.SecureRandom)); + return keyPairGenerator.GenerateKeyPair(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDomain.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDomain.cs.meta new file mode 100644 index 000000000..26d7a0809 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDomain.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5cf18dcb7394dc742b7db5cf2a716a61 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDsa13Signer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDsa13Signer.cs new file mode 100644 index 000000000..83cc10772 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDsa13Signer.cs @@ -0,0 +1,51 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// Implementation class for generation of ECDSA signatures in TLS 1.3+ using the BC light-weight API. + /// + public class BcTlsECDsa13Signer + : BcTlsSigner + { + private readonly int m_signatureScheme; + + public BcTlsECDsa13Signer(BcTlsCrypto crypto, ECPrivateKeyParameters privateKey, int signatureScheme) + : base(crypto, privateKey) + { + if (!SignatureScheme.IsECDsa(signatureScheme)) + throw new ArgumentException("signatureScheme"); + + this.m_signatureScheme = signatureScheme; + } + + public override byte[] GenerateRawSignature(SignatureAndHashAlgorithm algorithm, byte[] hash) + { + if (algorithm == null || SignatureScheme.From(algorithm) != m_signatureScheme) + throw new InvalidOperationException("Invalid algorithm: " + algorithm); + + int cryptoHashAlgorithm = SignatureScheme.GetCryptoHashAlgorithm(m_signatureScheme); + IDsa dsa = new ECDsaSigner(new HMacDsaKCalculator(m_crypto.CreateDigest(cryptoHashAlgorithm))); + + ISigner signer = new DsaDigestSigner(dsa, new NullDigest()); + signer.Init(true, new ParametersWithRandom(m_privateKey, m_crypto.SecureRandom)); + signer.BlockUpdate(hash, 0, hash.Length); + try + { + return signer.GenerateSignature(); + } + catch (CryptoException e) + { + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDsa13Signer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDsa13Signer.cs.meta new file mode 100644 index 000000000..aec73129e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDsa13Signer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 54762524c72538c4785d15c746765d44 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDsaSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDsaSigner.cs new file mode 100644 index 000000000..53c147975 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDsaSigner.cs @@ -0,0 +1,33 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// Implementation class for generation of the raw ECDSA signature type using the BC light-weight API. + /// + public class BcTlsECDsaSigner + : BcTlsDssSigner + { + public BcTlsECDsaSigner(BcTlsCrypto crypto, ECPrivateKeyParameters privateKey) + : base(crypto, privateKey) + { + } + + protected override IDsa CreateDsaImpl(int cryptoHashAlgorithm) + { + return new ECDsaSigner(new HMacDsaKCalculator(m_crypto.CreateDigest(cryptoHashAlgorithm))); + } + + protected override short SignatureAlgorithm + { + get { return Tls.SignatureAlgorithm.ecdsa; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDsaSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDsaSigner.cs.meta new file mode 100644 index 000000000..1f12a624c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDsaSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d97f2f3a6de025e4888ac2e9ea2b08f9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDsaVerifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDsaVerifier.cs new file mode 100644 index 000000000..1f612f173 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDsaVerifier.cs @@ -0,0 +1,33 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// Implementation class for the verification of the raw ECDSA signature type using the BC light-weight + /// API. + public class BcTlsECDsaVerifier + : BcTlsDssVerifier + { + public BcTlsECDsaVerifier(BcTlsCrypto crypto, ECPublicKeyParameters publicKey) + : base(crypto, publicKey) + { + } + + protected override IDsa CreateDsaImpl() + { + return new ECDsaSigner(); + } + + protected override short SignatureAlgorithm + { + get { return Tls.SignatureAlgorithm.ecdsa; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDsaVerifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDsaVerifier.cs.meta new file mode 100644 index 000000000..3b4af58ea --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsECDsaVerifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3b8e53a206065545a96a45028b3e094 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsEd25519Signer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsEd25519Signer.cs new file mode 100644 index 000000000..dc40b9260 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsEd25519Signer.cs @@ -0,0 +1,31 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + public class BcTlsEd25519Signer + : BcTlsSigner + { + public BcTlsEd25519Signer(BcTlsCrypto crypto, Ed25519PrivateKeyParameters privateKey) + : base(crypto, privateKey) + { + } + + public override TlsStreamSigner GetStreamSigner(SignatureAndHashAlgorithm algorithm) + { + if (algorithm == null || SignatureScheme.From(algorithm) != SignatureScheme.ed25519) + throw new InvalidOperationException("Invalid algorithm: " + algorithm); + + Ed25519Signer signer = new Ed25519Signer(); + signer.Init(true, m_privateKey); + + return new BcTlsStreamSigner(signer); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsEd25519Signer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsEd25519Signer.cs.meta new file mode 100644 index 000000000..b2277f1c0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsEd25519Signer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f69e9c372302cc4d9071aa8c9f35034 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsEd448Signer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsEd448Signer.cs new file mode 100644 index 000000000..2e7bb6843 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsEd448Signer.cs @@ -0,0 +1,31 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + public class BcTlsEd448Signer + : BcTlsSigner + { + public BcTlsEd448Signer(BcTlsCrypto crypto, Ed448PrivateKeyParameters privateKey) + : base(crypto, privateKey) + { + } + + public override TlsStreamSigner GetStreamSigner(SignatureAndHashAlgorithm algorithm) + { + if (algorithm == null || SignatureScheme.From(algorithm) != SignatureScheme.ed448) + throw new InvalidOperationException("Invalid algorithm: " + algorithm); + + Ed448Signer signer = new Ed448Signer(TlsUtilities.EmptyBytes); + signer.Init(true, m_privateKey); + + return new BcTlsStreamSigner(signer); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsEd448Signer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsEd448Signer.cs.meta new file mode 100644 index 000000000..ab33bbc4d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsEd448Signer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9ca63a94c4db59242ae17d8cc2c8fece +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsHash.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsHash.cs new file mode 100644 index 000000000..84947a738 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsHash.cs @@ -0,0 +1,60 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + internal sealed class BcTlsHash + : TlsHash + { + private readonly BcTlsCrypto m_crypto; + private readonly int m_cryptoHashAlgorithm; + private readonly IDigest m_digest; + + internal BcTlsHash(BcTlsCrypto crypto, int cryptoHashAlgorithm) + : this(crypto, cryptoHashAlgorithm, crypto.CreateDigest(cryptoHashAlgorithm)) + { + } + + private BcTlsHash(BcTlsCrypto crypto, int cryptoHashAlgorithm, IDigest digest) + { + this.m_crypto = crypto; + this.m_cryptoHashAlgorithm = cryptoHashAlgorithm; + this.m_digest = digest; + } + + public void Update(byte[] data, int offSet, int length) + { + m_digest.BlockUpdate(data, offSet, length); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Update(ReadOnlySpan input) + { + m_digest.BlockUpdate(input); + } +#endif + + public byte[] CalculateHash() + { + byte[] rv = new byte[m_digest.GetDigestSize()]; + m_digest.DoFinal(rv, 0); + return rv; + } + + public TlsHash CloneHash() + { + IDigest clone = m_crypto.CloneDigest(m_cryptoHashAlgorithm, m_digest); + return new BcTlsHash(m_crypto, m_cryptoHashAlgorithm, clone); + } + + public void Reset() + { + m_digest.Reset(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsHash.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsHash.cs.meta new file mode 100644 index 000000000..3c70f3bfe --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsHash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a19f59dc5138f32429bf98fb2b12a8e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsHmac.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsHmac.cs new file mode 100644 index 000000000..8666193a4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsHmac.cs @@ -0,0 +1,73 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + internal sealed class BcTlsHmac + : TlsHmac + { + private readonly HMac m_hmac; + + internal BcTlsHmac(HMac hmac) + { + this.m_hmac = hmac; + } + + public void SetKey(byte[] key, int keyOff, int keyLen) + { + m_hmac.Init(new KeyParameter(key, keyOff, keyLen)); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void SetKey(ReadOnlySpan key) + { + m_hmac.Init(new KeyParameter(key)); + } +#endif + + public void Update(byte[] input, int inOff, int length) + { + m_hmac.BlockUpdate(input, inOff, length); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public void Update(ReadOnlySpan input) + { + m_hmac.BlockUpdate(input); + } +#endif + + public byte[] CalculateMac() + { + byte[] rv = new byte[m_hmac.GetMacSize()]; + m_hmac.DoFinal(rv, 0); + return rv; + } + + public void CalculateMac(byte[] output, int outOff) + { + m_hmac.DoFinal(output, outOff); + } + + public int InternalBlockSize + { + get { return m_hmac.GetUnderlyingDigest().GetByteLength(); } + } + + public int MacLength + { + get { return m_hmac.GetMacSize(); } + } + + public void Reset() + { + m_hmac.Reset(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsHmac.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsHmac.cs.meta new file mode 100644 index 000000000..e5550df43 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsHmac.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d4d56225ca5a9746b45780a43322a69 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsNonceGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsNonceGenerator.cs new file mode 100644 index 000000000..63fb52cfc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsNonceGenerator.cs @@ -0,0 +1,28 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + internal sealed class BcTlsNonceGenerator + : TlsNonceGenerator + { + private readonly IRandomGenerator m_randomGenerator; + + internal BcTlsNonceGenerator(IRandomGenerator randomGenerator) + { + this.m_randomGenerator = randomGenerator; + } + + public byte[] GenerateNonce(int size) + { + byte[] nonce = new byte[size]; + m_randomGenerator.NextBytes(nonce); + return nonce; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsNonceGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsNonceGenerator.cs.meta new file mode 100644 index 000000000..dfeab4eeb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsNonceGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 406377d7c6149294db0a13047dbc5fed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRawKeyCertificate.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRawKeyCertificate.cs new file mode 100644 index 000000000..1ecf2b7c4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRawKeyCertificate.cs @@ -0,0 +1,511 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// Implementation class for a single X.509 certificate based on the BC light-weight API. + public class BcTlsRawKeyCertificate + : TlsCertificate + { + protected readonly BcTlsCrypto m_crypto; + protected readonly SubjectPublicKeyInfo m_keyInfo; + + protected DHPublicKeyParameters m_pubKeyDH = null; + protected ECPublicKeyParameters m_pubKeyEC = null; + protected Ed25519PublicKeyParameters m_pubKeyEd25519 = null; + protected Ed448PublicKeyParameters m_pubKeyEd448 = null; + protected RsaKeyParameters m_pubKeyRsa = null; + + /// + public BcTlsRawKeyCertificate(BcTlsCrypto crypto, byte[] encoding) + : this(crypto, SubjectPublicKeyInfo.GetInstance(encoding)) + { + } + + public BcTlsRawKeyCertificate(BcTlsCrypto crypto, SubjectPublicKeyInfo keyInfo) + { + m_crypto = crypto; + m_keyInfo = keyInfo; + } + + public virtual SubjectPublicKeyInfo SubjectPublicKeyInfo => m_keyInfo; + + /// + public virtual TlsEncryptor CreateEncryptor(int tlsCertificateRole) + { + ValidateKeyUsage(KeyUsage.KeyEncipherment); + + switch (tlsCertificateRole) + { + case TlsCertificateRole.RsaEncryption: + { + this.m_pubKeyRsa = GetPubKeyRsa(); + return new BcTlsRsaEncryptor(m_crypto, m_pubKeyRsa); + } + // TODO[gmssl] + //case TlsCertificateRole.Sm2Encryption: + //{ + // this.m_pubKeyEC = GetPubKeyEC(); + // return new BcTlsSM2Encryptor(m_crypto, m_pubKeyEC); + //} + } + + throw new TlsFatalAlert(AlertDescription.certificate_unknown); + } + + /// + public virtual TlsVerifier CreateVerifier(short signatureAlgorithm) + { + switch (signatureAlgorithm) + { + case SignatureAlgorithm.ed25519: + case SignatureAlgorithm.ed448: + { + int signatureScheme = SignatureScheme.From(HashAlgorithm.Intrinsic, signatureAlgorithm); + Tls13Verifier tls13Verifier = CreateVerifier(signatureScheme); + return new LegacyTls13Verifier(signatureScheme, tls13Verifier); + } + } + + ValidateKeyUsage(KeyUsage.DigitalSignature); + + switch (signatureAlgorithm) + { + case SignatureAlgorithm.dsa: + return new BcTlsDsaVerifier(m_crypto, GetPubKeyDss()); + + case SignatureAlgorithm.ecdsa: + return new BcTlsECDsaVerifier(m_crypto, GetPubKeyEC()); + + case SignatureAlgorithm.rsa: + { + ValidateRsa_Pkcs1(); + return new BcTlsRsaVerifier(m_crypto, GetPubKeyRsa()); + } + + case SignatureAlgorithm.rsa_pss_pss_sha256: + case SignatureAlgorithm.rsa_pss_pss_sha384: + case SignatureAlgorithm.rsa_pss_pss_sha512: + { + ValidateRsa_Pss_Pss(signatureAlgorithm); + int signatureScheme = SignatureScheme.From(HashAlgorithm.Intrinsic, signatureAlgorithm); + return new BcTlsRsaPssVerifier(m_crypto, GetPubKeyRsa(), signatureScheme); + } + + case SignatureAlgorithm.rsa_pss_rsae_sha256: + case SignatureAlgorithm.rsa_pss_rsae_sha384: + case SignatureAlgorithm.rsa_pss_rsae_sha512: + { + ValidateRsa_Pss_Rsae(); + int signatureScheme = SignatureScheme.From(HashAlgorithm.Intrinsic, signatureAlgorithm); + return new BcTlsRsaPssVerifier(m_crypto, GetPubKeyRsa(), signatureScheme); + } + + default: + throw new TlsFatalAlert(AlertDescription.certificate_unknown); + } + } + + /// + public virtual Tls13Verifier CreateVerifier(int signatureScheme) + { + ValidateKeyUsage(KeyUsage.DigitalSignature); + + switch (signatureScheme) + { + case SignatureScheme.ecdsa_brainpoolP256r1tls13_sha256: + case SignatureScheme.ecdsa_brainpoolP384r1tls13_sha384: + case SignatureScheme.ecdsa_brainpoolP512r1tls13_sha512: + case SignatureScheme.ecdsa_secp256r1_sha256: + case SignatureScheme.ecdsa_secp384r1_sha384: + case SignatureScheme.ecdsa_secp521r1_sha512: + case SignatureScheme.ecdsa_sha1: + { + int cryptoHashAlgorithm = SignatureScheme.GetCryptoHashAlgorithm(signatureScheme); + IDigest digest = m_crypto.CreateDigest(cryptoHashAlgorithm); + + ISigner verifier = new DsaDigestSigner(new ECDsaSigner(), digest); + verifier.Init(false, GetPubKeyEC()); + + return new BcTls13Verifier(verifier); + } + + case SignatureScheme.ed25519: + { + Ed25519Signer verifier = new Ed25519Signer(); + verifier.Init(false, GetPubKeyEd25519()); + + return new BcTls13Verifier(verifier); + } + + case SignatureScheme.ed448: + { + Ed448Signer verifier = new Ed448Signer(TlsUtilities.EmptyBytes); + verifier.Init(false, GetPubKeyEd448()); + + return new BcTls13Verifier(verifier); + } + + case SignatureScheme.rsa_pkcs1_sha1: + case SignatureScheme.rsa_pkcs1_sha256: + case SignatureScheme.rsa_pkcs1_sha384: + case SignatureScheme.rsa_pkcs1_sha512: + { + ValidateRsa_Pkcs1(); + + int cryptoHashAlgorithm = SignatureScheme.GetCryptoHashAlgorithm(signatureScheme); + IDigest digest = m_crypto.CreateDigest(cryptoHashAlgorithm); + + RsaDigestSigner verifier = new RsaDigestSigner(digest, + TlsCryptoUtilities.GetOidForHash(cryptoHashAlgorithm)); + verifier.Init(false, GetPubKeyRsa()); + + return new BcTls13Verifier(verifier); + } + + case SignatureScheme.rsa_pss_pss_sha256: + case SignatureScheme.rsa_pss_pss_sha384: + case SignatureScheme.rsa_pss_pss_sha512: + { + ValidateRsa_Pss_Pss(SignatureScheme.GetSignatureAlgorithm(signatureScheme)); + + int cryptoHashAlgorithm = SignatureScheme.GetCryptoHashAlgorithm(signatureScheme); + IDigest digest = m_crypto.CreateDigest(cryptoHashAlgorithm); + + PssSigner verifier = new PssSigner(new RsaEngine(), digest, digest.GetDigestSize()); + verifier.Init(false, GetPubKeyRsa()); + + return new BcTls13Verifier(verifier); + } + + case SignatureScheme.rsa_pss_rsae_sha256: + case SignatureScheme.rsa_pss_rsae_sha384: + case SignatureScheme.rsa_pss_rsae_sha512: + { + ValidateRsa_Pss_Rsae(); + + int cryptoHashAlgorithm = SignatureScheme.GetCryptoHashAlgorithm(signatureScheme); + IDigest digest = m_crypto.CreateDigest(cryptoHashAlgorithm); + + PssSigner verifier = new PssSigner(new RsaEngine(), digest, digest.GetDigestSize()); + verifier.Init(false, GetPubKeyRsa()); + + return new BcTls13Verifier(verifier); + } + + // TODO[RFC 8998] + //case SignatureScheme.sm2sig_sm3: + //{ + // ParametersWithID parametersWithID = new ParametersWithID(GetPubKeyEC(), + // Strings.ToByteArray("TLSv1.3+GM+Cipher+Suite")); + + // SM2Signer verifier = new SM2Signer(); + // verifier.Init(false, parametersWithID); + + // return new BcTls13Verifier(verifier); + //} + + default: + throw new TlsFatalAlert(AlertDescription.certificate_unknown); + } + } + + /// + public virtual byte[] GetEncoded() + { + return m_keyInfo.GetEncoded(Asn1Encodable.Der); + } + + /// + public virtual byte[] GetExtension(DerObjectIdentifier extensionOid) + { + return null; + } + + public virtual BigInteger SerialNumber => null; + + public virtual string SigAlgOid => null; + + public virtual Asn1Encodable GetSigAlgParams() => null; + + /// + public virtual short GetLegacySignatureAlgorithm() + { + AsymmetricKeyParameter publicKey = GetPublicKey(); + if (publicKey.IsPrivate) + throw new TlsFatalAlert(AlertDescription.internal_error); + + if (!SupportsKeyUsage(KeyUsage.DigitalSignature)) + return -1; + + /* + * RFC 5246 7.4.6. Client Certificate + */ + + /* + * RSA public key; the certificate MUST allow the key to be used for signing with the + * signature scheme and hash algorithm that will be employed in the certificate verify + * message. + */ + if (publicKey is RsaKeyParameters) + return SignatureAlgorithm.rsa; + + /* + * DSA public key; the certificate MUST allow the key to be used for signing with the + * hash algorithm that will be employed in the certificate verify message. + */ + if (publicKey is DsaPublicKeyParameters) + return SignatureAlgorithm.dsa; + + /* + * ECDSA-capable public key; the certificate MUST allow the key to be used for signing + * with the hash algorithm that will be employed in the certificate verify message; the + * public key MUST use a curve and point format supported by the server. + */ + if (publicKey is ECPublicKeyParameters) + { + // TODO Check the curve and point format + return SignatureAlgorithm.ecdsa; + } + + return -1; + } + + /// + public virtual DHPublicKeyParameters GetPubKeyDH() + { + try + { + return (DHPublicKeyParameters)GetPublicKey(); + } + catch (InvalidCastException e) + { + throw new TlsFatalAlert(AlertDescription.certificate_unknown, e); + } + } + + /// + public virtual DsaPublicKeyParameters GetPubKeyDss() + { + try + { + return (DsaPublicKeyParameters)GetPublicKey(); + } + catch (InvalidCastException e) + { + throw new TlsFatalAlert(AlertDescription.certificate_unknown, e); + } + } + + /// + public virtual ECPublicKeyParameters GetPubKeyEC() + { + try + { + return (ECPublicKeyParameters)GetPublicKey(); + } + catch (InvalidCastException e) + { + throw new TlsFatalAlert(AlertDescription.certificate_unknown, e); + } + } + + /// + public virtual Ed25519PublicKeyParameters GetPubKeyEd25519() + { + try + { + return (Ed25519PublicKeyParameters)GetPublicKey(); + } + catch (InvalidCastException e) + { + throw new TlsFatalAlert(AlertDescription.certificate_unknown, e); + } + } + + /// + public virtual Ed448PublicKeyParameters GetPubKeyEd448() + { + try + { + return (Ed448PublicKeyParameters)GetPublicKey(); + } + catch (InvalidCastException e) + { + throw new TlsFatalAlert(AlertDescription.certificate_unknown, e); + } + } + + /// + public virtual RsaKeyParameters GetPubKeyRsa() + { + try + { + return (RsaKeyParameters)GetPublicKey(); + } + catch (InvalidCastException e) + { + throw new TlsFatalAlert(AlertDescription.certificate_unknown, e); + } + } + + /// + public virtual bool SupportsSignatureAlgorithm(short signatureAlgorithm) + { + return SupportsSignatureAlgorithm(signatureAlgorithm, KeyUsage.DigitalSignature); + } + + /// + public virtual bool SupportsSignatureAlgorithmCA(short signatureAlgorithm) + { + return SupportsSignatureAlgorithm(signatureAlgorithm, KeyUsage.KeyCertSign); + } + + /// + public virtual TlsCertificate CheckUsageInRole(int tlsCertificateRole) + { + switch (tlsCertificateRole) + { + case TlsCertificateRole.DH: + { + ValidateKeyUsage(KeyUsage.KeyAgreement); + this.m_pubKeyDH = GetPubKeyDH(); + return this; + } + case TlsCertificateRole.ECDH: + { + ValidateKeyUsage(KeyUsage.KeyAgreement); + this.m_pubKeyEC = GetPubKeyEC(); + return this; + } + } + + throw new TlsFatalAlert(AlertDescription.certificate_unknown); + } + + /// + protected virtual AsymmetricKeyParameter GetPublicKey() + { + try + { + return PublicKeyFactory.CreateKey(m_keyInfo); + } + catch (Exception e) + { + throw new TlsFatalAlert(AlertDescription.unsupported_certificate, e); + } + } + + protected virtual bool SupportsKeyUsage(int keyUsageBits) + { + return true; + } + + protected virtual bool SupportsRsa_Pkcs1() + { + AlgorithmIdentifier pubKeyAlgID = m_keyInfo.AlgorithmID; + return RsaUtilities.SupportsPkcs1(pubKeyAlgID); + } + + protected virtual bool SupportsRsa_Pss_Pss(short signatureAlgorithm) + { + AlgorithmIdentifier pubKeyAlgID = m_keyInfo.AlgorithmID; + return RsaUtilities.SupportsPss_Pss(signatureAlgorithm, pubKeyAlgID); + } + + protected virtual bool SupportsRsa_Pss_Rsae() + { + AlgorithmIdentifier pubKeyAlgID = m_keyInfo.AlgorithmID; + return RsaUtilities.SupportsPss_Rsae(pubKeyAlgID); + } + + /// + protected virtual bool SupportsSignatureAlgorithm(short signatureAlgorithm, int keyUsage) + { + if (!SupportsKeyUsage(keyUsage)) + return false; + + AsymmetricKeyParameter publicKey = GetPublicKey(); + + switch (signatureAlgorithm) + { + case SignatureAlgorithm.rsa: + return SupportsRsa_Pkcs1() + && publicKey is RsaKeyParameters; + + case SignatureAlgorithm.dsa: + return publicKey is DsaPublicKeyParameters; + + case SignatureAlgorithm.ecdsa: + case SignatureAlgorithm.ecdsa_brainpoolP256r1tls13_sha256: + case SignatureAlgorithm.ecdsa_brainpoolP384r1tls13_sha384: + case SignatureAlgorithm.ecdsa_brainpoolP512r1tls13_sha512: + return publicKey is ECPublicKeyParameters; + + case SignatureAlgorithm.ed25519: + return publicKey is Ed25519PublicKeyParameters; + + case SignatureAlgorithm.ed448: + return publicKey is Ed448PublicKeyParameters; + + case SignatureAlgorithm.rsa_pss_rsae_sha256: + case SignatureAlgorithm.rsa_pss_rsae_sha384: + case SignatureAlgorithm.rsa_pss_rsae_sha512: + return SupportsRsa_Pss_Rsae() + && publicKey is RsaKeyParameters; + + case SignatureAlgorithm.rsa_pss_pss_sha256: + case SignatureAlgorithm.rsa_pss_pss_sha384: + case SignatureAlgorithm.rsa_pss_pss_sha512: + return SupportsRsa_Pss_Pss(signatureAlgorithm) + && publicKey is RsaKeyParameters; + + default: + return false; + } + } + + /// + public virtual void ValidateKeyUsage(int keyUsageBits) + { + if (!SupportsKeyUsage(keyUsageBits)) + throw new TlsFatalAlert(AlertDescription.certificate_unknown); + } + + /// + protected virtual void ValidateRsa_Pkcs1() + { + if (!SupportsRsa_Pkcs1()) + throw new TlsFatalAlert(AlertDescription.certificate_unknown); + } + + /// + protected virtual void ValidateRsa_Pss_Pss(short signatureAlgorithm) + { + if (!SupportsRsa_Pss_Pss(signatureAlgorithm)) + throw new TlsFatalAlert(AlertDescription.certificate_unknown); + } + + /// + protected virtual void ValidateRsa_Pss_Rsae() + { + if (!SupportsRsa_Pss_Rsae()) + throw new TlsFatalAlert(AlertDescription.certificate_unknown); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRawKeyCertificate.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRawKeyCertificate.cs.meta new file mode 100644 index 000000000..a7d43f710 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRawKeyCertificate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eb9ce5833c16ef344b2932731dc4fd48 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaEncryptor.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaEncryptor.cs new file mode 100644 index 000000000..01e8b5e47 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaEncryptor.cs @@ -0,0 +1,51 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Encodings; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + internal sealed class BcTlsRsaEncryptor + : TlsEncryptor + { + private static RsaKeyParameters CheckPublicKey(RsaKeyParameters pubKeyRsa) + { + if (null == pubKeyRsa || pubKeyRsa.IsPrivate) + throw new ArgumentException("No public RSA key provided", "pubKeyRsa"); + + return pubKeyRsa; + } + + private readonly BcTlsCrypto m_crypto; + private readonly RsaKeyParameters m_pubKeyRsa; + + internal BcTlsRsaEncryptor(BcTlsCrypto crypto, RsaKeyParameters pubKeyRsa) + { + this.m_crypto = crypto; + this.m_pubKeyRsa = CheckPublicKey(pubKeyRsa); + } + + public byte[] Encrypt(byte[] input, int inOff, int length) + { + try + { + Pkcs1Encoding encoding = new Pkcs1Encoding(new RsaBlindedEngine()); + encoding.Init(true, new ParametersWithRandom(m_pubKeyRsa, m_crypto.SecureRandom)); + return encoding.ProcessBlock(input, inOff, length); + } + catch (InvalidCipherTextException e) + { + /* + * This should never happen, only during decryption. + */ + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaEncryptor.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaEncryptor.cs.meta new file mode 100644 index 000000000..095ab11ef --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaEncryptor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e808553b1d4297243942b12cab60f855 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaPssSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaPssSigner.cs new file mode 100644 index 000000000..0c49638f5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaPssSigner.cs @@ -0,0 +1,51 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// Operator supporting the generation of RSASSA-PSS signatures using the BC light-weight API. + public class BcTlsRsaPssSigner + : BcTlsSigner + { + private readonly int m_signatureScheme; + + public BcTlsRsaPssSigner(BcTlsCrypto crypto, RsaKeyParameters privateKey, int signatureScheme) + : base(crypto, privateKey) + { + if (!SignatureScheme.IsRsaPss(signatureScheme)) + throw new ArgumentException("signatureScheme"); + + this.m_signatureScheme = signatureScheme; + } + + public override byte[] GenerateRawSignature(SignatureAndHashAlgorithm algorithm, byte[] hash) + { + if (algorithm == null || SignatureScheme.From(algorithm) != m_signatureScheme) + throw new InvalidOperationException("Invalid algorithm: " + algorithm); + + int cryptoHashAlgorithm = SignatureScheme.GetCryptoHashAlgorithm(m_signatureScheme); + IDigest digest = m_crypto.CreateDigest(cryptoHashAlgorithm); + + PssSigner signer = PssSigner.CreateRawSigner(new RsaBlindedEngine(), digest, digest, digest.GetDigestSize(), + PssSigner.TrailerImplicit); + signer.Init(true, new ParametersWithRandom(m_privateKey, m_crypto.SecureRandom)); + signer.BlockUpdate(hash, 0, hash.Length); + try + { + return signer.GenerateSignature(); + } + catch (CryptoException e) + { + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaPssSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaPssSigner.cs.meta new file mode 100644 index 000000000..38382a807 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaPssSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e24db98858ad2824b87dc449d82f45d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaPssVerifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaPssVerifier.cs new file mode 100644 index 000000000..5af7fa281 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaPssVerifier.cs @@ -0,0 +1,45 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// Operator supporting the verification of RSASSA-PSS signatures using the BC light-weight API. + public class BcTlsRsaPssVerifier + : BcTlsVerifier + { + private readonly int m_signatureScheme; + + public BcTlsRsaPssVerifier(BcTlsCrypto crypto, RsaKeyParameters publicKey, int signatureScheme) + : base(crypto, publicKey) + { + if (!SignatureScheme.IsRsaPss(signatureScheme)) + throw new ArgumentException("signatureScheme"); + + this.m_signatureScheme = signatureScheme; + } + + public override bool VerifyRawSignature(DigitallySigned digitallySigned, byte[] hash) + { + SignatureAndHashAlgorithm algorithm = digitallySigned.Algorithm; + if (algorithm == null || SignatureScheme.From(algorithm) != m_signatureScheme) + throw new InvalidOperationException("Invalid algorithm: " + algorithm); + + int cryptoHashAlgorithm = SignatureScheme.GetCryptoHashAlgorithm(m_signatureScheme); + IDigest digest = m_crypto.CreateDigest(cryptoHashAlgorithm); + + PssSigner verifier = PssSigner.CreateRawSigner(new RsaEngine(), digest, digest, digest.GetDigestSize(), + PssSigner.TrailerImplicit); + verifier.Init(false, m_publicKey); + verifier.BlockUpdate(hash, 0, hash.Length); + return verifier.VerifySignature(digitallySigned.Signature); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaPssVerifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaPssVerifier.cs.meta new file mode 100644 index 000000000..74afa111a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaPssVerifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce44b33ea84d8ed4b8de6d0a12f014b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaSigner.cs new file mode 100644 index 000000000..6be468053 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaSigner.cs @@ -0,0 +1,75 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Encodings; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// Operator supporting the generation of RSASSA-PKCS1-v1_5 signatures using the BC light-weight API. + /// + public class BcTlsRsaSigner + : BcTlsSigner + { + private readonly RsaKeyParameters m_publicKey; + + public BcTlsRsaSigner(BcTlsCrypto crypto, RsaKeyParameters privateKey, RsaKeyParameters publicKey) + : base(crypto, privateKey) + { + this.m_publicKey = publicKey; + } + + public override byte[] GenerateRawSignature(SignatureAndHashAlgorithm algorithm, byte[] hash) + { + IDigest nullDigest = new NullDigest(); + + ISigner signer; + if (algorithm != null) + { + if (algorithm.Signature != SignatureAlgorithm.rsa) + throw new InvalidOperationException("Invalid algorithm: " + algorithm); + + /* + * RFC 5246 4.7. In RSA signing, the opaque vector contains the signature generated + * using the RSASSA-PKCS1-v1_5 signature scheme defined in [PKCS1]. + */ + signer = new RsaDigestSigner(nullDigest, TlsUtilities.GetOidForHashAlgorithm(algorithm.Hash)); + } + else + { + /* + * RFC 5246 4.7. Note that earlier versions of TLS used a different RSA signature scheme + * that did not include a DigestInfo encoding. + */ + signer = new GenericSigner(new Pkcs1Encoding(new RsaBlindedEngine()), nullDigest); + } + signer.Init(true, new ParametersWithRandom(m_privateKey, m_crypto.SecureRandom)); + signer.BlockUpdate(hash, 0, hash.Length); + try + { + byte[] signature = signer.GenerateSignature(); + + signer.Init(false, m_publicKey); + signer.BlockUpdate(hash, 0, hash.Length); + + if (signer.VerifySignature(signature)) + { + return signature; + } + } + catch (CryptoException e) + { + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaSigner.cs.meta new file mode 100644 index 000000000..ec934bc76 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c44e4055ed235cb4bb8ce86d1f7c1a09 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaVerifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaVerifier.cs new file mode 100644 index 000000000..109ff36df --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaVerifier.cs @@ -0,0 +1,56 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Encodings; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// Operator supporting the verification of RSASSA-PKCS1-v1_5 signatures using the BC light-weight API. + /// + public class BcTlsRsaVerifier + : BcTlsVerifier + { + public BcTlsRsaVerifier(BcTlsCrypto crypto, RsaKeyParameters publicKey) + : base(crypto, publicKey) + { + } + + public override bool VerifyRawSignature(DigitallySigned digitallySigned, byte[] hash) + { + IDigest nullDigest = new NullDigest(); + + SignatureAndHashAlgorithm algorithm = digitallySigned.Algorithm; + ISigner signer; + if (algorithm != null) + { + if (algorithm.Signature != SignatureAlgorithm.rsa) + throw new InvalidOperationException("Invalid algorithm: " + algorithm); + + /* + * RFC 5246 4.7. In RSA signing, the opaque vector contains the signature generated + * using the RSASSA-PKCS1-v1_5 signature scheme defined in [PKCS1]. + */ + signer = new RsaDigestSigner(nullDigest, TlsUtilities.GetOidForHashAlgorithm(algorithm.Hash)); + } + else + { + /* + * RFC 5246 4.7. Note that earlier versions of TLS used a different RSA signature scheme + * that did not include a DigestInfo encoding. + */ + signer = new GenericSigner(new Pkcs1Encoding(new RsaBlindedEngine()), nullDigest); + } + signer.Init(false, m_publicKey); + signer.BlockUpdate(hash, 0, hash.Length); + return signer.VerifySignature(digitallySigned.Signature); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaVerifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaVerifier.cs.meta new file mode 100644 index 000000000..0817979ea --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsRsaVerifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 225a886ec1af60a4680aeb9e8e64f44a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSecret.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSecret.cs new file mode 100644 index 000000000..abdc60960 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSecret.cs @@ -0,0 +1,416 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// BC light-weight support class for handling TLS secrets and deriving key material and other secrets + /// from them. + public class BcTlsSecret + : AbstractTlsSecret + { + public static BcTlsSecret Convert(BcTlsCrypto crypto, TlsSecret secret) + { + if (secret is BcTlsSecret) + return (BcTlsSecret)secret; + + if (secret is AbstractTlsSecret) + { + AbstractTlsSecret abstractTlsSecret = (AbstractTlsSecret)secret; + + return crypto.AdoptLocalSecret(CopyData(abstractTlsSecret)); + } + + throw new ArgumentException("unrecognized TlsSecret - cannot copy data: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(secret)); + } + + // SSL3 magic mix constants ("A", "BB", "CCC", ...) + private static readonly byte[] Ssl3Const = GenerateSsl3Constants(); + + private static byte[] GenerateSsl3Constants() + { + int n = 15; + byte[] result = new byte[n * (n + 1) / 2]; + int pos = 0; + for (int i = 0; i < n; ++i) + { + byte b = (byte)('A' + i); + for (int j = 0; j <= i; ++j) + { + result[pos++] = b; + } + } + return result; + } + + protected readonly BcTlsCrypto m_crypto; + + public BcTlsSecret(BcTlsCrypto crypto, byte[] data) + : base(data) + { + this.m_crypto = crypto; + } + + public override TlsSecret DeriveUsingPrf(int prfAlgorithm, string label, byte[] seed, int length) + { + lock (this) + { + CheckAlive(); + + switch (prfAlgorithm) + { + case PrfAlgorithm.tls13_hkdf_sha256: + return TlsCryptoUtilities.HkdfExpandLabel(this, CryptoHashAlgorithm.sha256, label, seed, length); + case PrfAlgorithm.tls13_hkdf_sha384: + return TlsCryptoUtilities.HkdfExpandLabel(this, CryptoHashAlgorithm.sha384, label, seed, length); + case PrfAlgorithm.tls13_hkdf_sm3: + return TlsCryptoUtilities.HkdfExpandLabel(this, CryptoHashAlgorithm.sm3, label, seed, length); + default: + return m_crypto.AdoptLocalSecret(Prf(prfAlgorithm, label, seed, length)); + } + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override TlsSecret DeriveUsingPrf(int prfAlgorithm, ReadOnlySpan label, ReadOnlySpan seed, + int length) + { + lock (this) + { + CheckAlive(); + + switch (prfAlgorithm) + { + case PrfAlgorithm.tls13_hkdf_sha256: + return TlsCryptoUtilities.HkdfExpandLabel(this, CryptoHashAlgorithm.sha256, label, seed, length); + case PrfAlgorithm.tls13_hkdf_sha384: + return TlsCryptoUtilities.HkdfExpandLabel(this, CryptoHashAlgorithm.sha384, label, seed, length); + case PrfAlgorithm.tls13_hkdf_sm3: + return TlsCryptoUtilities.HkdfExpandLabel(this, CryptoHashAlgorithm.sm3, label, seed, length); + default: + return m_crypto.AdoptLocalSecret(Prf(prfAlgorithm, label, seed, length)); + } + } + } +#endif + + public override TlsSecret HkdfExpand(int cryptoHashAlgorithm, byte[] info, int length) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return HkdfExpand(cryptoHashAlgorithm, info.AsSpan(), length); +#else + lock (this) + { + if (length < 1) + return m_crypto.AdoptLocalSecret(TlsUtilities.EmptyBytes); + + int hashLen = TlsCryptoUtilities.GetHashOutputSize(cryptoHashAlgorithm); + if (length > (255 * hashLen)) + throw new ArgumentException("must be <= 255 * (output size of 'hashAlgorithm')", "length"); + + CheckAlive(); + + byte[] prk = m_data; + + HMac hmac = new HMac(m_crypto.CreateDigest(cryptoHashAlgorithm)); + hmac.Init(new KeyParameter(prk)); + + byte[] okm = new byte[length]; + + byte[] t = new byte[hashLen]; + byte counter = 0x00; + + int pos = 0; + for (;;) + { + hmac.BlockUpdate(info, 0, info.Length); + hmac.Update(++counter); + hmac.DoFinal(t, 0); + + int remaining = length - pos; + if (remaining <= hashLen) + { + Array.Copy(t, 0, okm, pos, remaining); + break; + } + + Array.Copy(t, 0, okm, pos, hashLen); + pos += hashLen; + hmac.BlockUpdate(t, 0, t.Length); + } + + return m_crypto.AdoptLocalSecret(okm); + } +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override TlsSecret HkdfExpand(int cryptoHashAlgorithm, ReadOnlySpan info, int length) + { + lock (this) + { + if (length < 1) + return m_crypto.AdoptLocalSecret(TlsUtilities.EmptyBytes); + + int hashLen = TlsCryptoUtilities.GetHashOutputSize(cryptoHashAlgorithm); + if (length > (255 * hashLen)) + throw new ArgumentException("must be <= 255 * (output size of 'hashAlgorithm')", "length"); + + CheckAlive(); + + ReadOnlySpan prk = m_data; + + HMac hmac = new HMac(m_crypto.CreateDigest(cryptoHashAlgorithm)); + hmac.Init(new KeyParameter(prk)); + + byte[] okm = new byte[length]; + + Span t = hashLen <= 128 + ? stackalloc byte[hashLen] + : new byte[hashLen]; + byte counter = 0x00; + + int pos = 0; + for (;;) + { + hmac.BlockUpdate(info); + hmac.Update(++counter); + hmac.DoFinal(t); + + int remaining = length - pos; + if (remaining <= hashLen) + { + t[..remaining].CopyTo(okm.AsSpan(pos)); + break; + } + + t.CopyTo(okm.AsSpan(pos)); + pos += hashLen; + hmac.BlockUpdate(t); + } + + return m_crypto.AdoptLocalSecret(okm); + } + } +#endif + + public override TlsSecret HkdfExtract(int cryptoHashAlgorithm, TlsSecret ikm) + { + lock (this) + { + CheckAlive(); + + byte[] salt = m_data; + this.m_data = null; + + HMac hmac = new HMac(m_crypto.CreateDigest(cryptoHashAlgorithm)); + hmac.Init(new KeyParameter(salt)); + + Convert(m_crypto, ikm).UpdateMac(hmac); + + byte[] prk = new byte[hmac.GetMacSize()]; + hmac.DoFinal(prk, 0); + + return m_crypto.AdoptLocalSecret(prk); + } + } + + protected override AbstractTlsCrypto Crypto + { + get { return m_crypto; } + } + + protected virtual void HmacHash(int cryptoHashAlgorithm, byte[] secret, int secretOff, int secretLen, + byte[] seed, byte[] output) + { + IDigest digest = m_crypto.CreateDigest(cryptoHashAlgorithm); + HMac hmac = new HMac(digest); + hmac.Init(new KeyParameter(secret, secretOff, secretLen)); + + byte[] a = seed; + + int macSize = hmac.GetMacSize(); + + byte[] b1 = new byte[macSize]; + byte[] b2 = new byte[macSize]; + + int pos = 0; + while (pos < output.Length) + { + hmac.BlockUpdate(a, 0, a.Length); + hmac.DoFinal(b1, 0); + a = b1; + hmac.BlockUpdate(a, 0, a.Length); + hmac.BlockUpdate(seed, 0, seed.Length); + hmac.DoFinal(b2, 0); + Array.Copy(b2, 0, output, pos, System.Math.Min(macSize, output.Length - pos)); + pos += macSize; + } + } + + protected virtual byte[] Prf(int prfAlgorithm, string label, byte[] seed, int length) + { + if (PrfAlgorithm.ssl_prf_legacy == prfAlgorithm) + return Prf_Ssl(seed, length); + + byte[] labelSeed = Arrays.Concatenate(Strings.ToByteArray(label), seed); + + if (PrfAlgorithm.tls_prf_legacy == prfAlgorithm) + return Prf_1_0(labelSeed, length); + + return Prf_1_2(prfAlgorithm, labelSeed, length); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + protected virtual byte[] Prf(int prfAlgorithm, ReadOnlySpan label, ReadOnlySpan seed, int length) + { + if (PrfAlgorithm.ssl_prf_legacy == prfAlgorithm) + return Prf_Ssl(seed, length); + + byte[] labelSeed = new byte[label.Length + seed.Length]; + + for (int i = 0; i < label.Length; ++i) + { + labelSeed[i] = (byte)label[i]; + } + + seed.CopyTo(labelSeed.AsSpan(label.Length)); + + if (PrfAlgorithm.tls_prf_legacy == prfAlgorithm) + return Prf_1_0(labelSeed, length); + + return Prf_1_2(prfAlgorithm, labelSeed, length); + } +#endif + + protected virtual byte[] Prf_Ssl(byte[] seed, int length) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return Prf_Ssl(seed.AsSpan(), length); +#else + IDigest md5 = m_crypto.CreateDigest(CryptoHashAlgorithm.md5); + IDigest sha1 = m_crypto.CreateDigest(CryptoHashAlgorithm.sha1); + + int md5Size = md5.GetDigestSize(); + int sha1Size = sha1.GetDigestSize(); + + byte[] tmp = new byte[System.Math.Max(md5Size, sha1Size)]; + byte[] result = new byte[length]; + + int constLen = 1, constPos = 0, resultPos = 0; + while (resultPos < length) + { + sha1.BlockUpdate(Ssl3Const, constPos, constLen); + constPos += constLen++; + + sha1.BlockUpdate(m_data, 0, m_data.Length); + sha1.BlockUpdate(seed, 0, seed.Length); + sha1.DoFinal(tmp, 0); + + md5.BlockUpdate(m_data, 0, m_data.Length); + md5.BlockUpdate(tmp, 0, sha1Size); + + int remaining = length - resultPos; + if (remaining < md5Size) + { + md5.DoFinal(tmp, 0); + Array.Copy(tmp, 0, result, resultPos, remaining); + resultPos += remaining; + } + else + { + md5.DoFinal(result, resultPos); + resultPos += md5Size; + } + } + + return result; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + protected virtual byte[] Prf_Ssl(ReadOnlySpan seed, int length) + { + IDigest md5 = m_crypto.CreateDigest(CryptoHashAlgorithm.md5); + IDigest sha1 = m_crypto.CreateDigest(CryptoHashAlgorithm.sha1); + + int md5Size = md5.GetDigestSize(); + int sha1Size = sha1.GetDigestSize(); + + Span tmp = stackalloc byte[System.Math.Max(md5Size, sha1Size)]; + byte[] result = new byte[length]; + + int constLen = 1, constPos = 0, resultPos = 0; + while (resultPos < length) + { + sha1.BlockUpdate(Ssl3Const.AsSpan(constPos, constLen)); + constPos += constLen++; + + sha1.BlockUpdate(m_data); + sha1.BlockUpdate(seed); + sha1.DoFinal(tmp); + + md5.BlockUpdate(m_data); + md5.BlockUpdate(tmp[..sha1Size]); + + int remaining = length - resultPos; + if (remaining < md5Size) + { + md5.DoFinal(tmp); + tmp[..remaining].CopyTo(result.AsSpan(resultPos)); + resultPos += remaining; + } + else + { + md5.DoFinal(result.AsSpan(resultPos)); + resultPos += md5Size; + } + } + + return result; + } +#endif + + protected virtual byte[] Prf_1_0(byte[] labelSeed, int length) + { + int s_half = (m_data.Length + 1) / 2; + + byte[] b1 = new byte[length]; + HmacHash(CryptoHashAlgorithm.md5, m_data, 0, s_half, labelSeed, b1); + + byte[] b2 = new byte[length]; + HmacHash(CryptoHashAlgorithm.sha1, m_data, m_data.Length - s_half, s_half, labelSeed, b2); + + for (int i = 0; i < length; i++) + { + b1[i] ^= b2[i]; + } + return b1; + } + + protected virtual byte[] Prf_1_2(int prfAlgorithm, byte[] labelSeed, int length) + { + int cryptoHashAlgorithm = TlsCryptoUtilities.GetHashForPrf(prfAlgorithm); + byte[] result = new byte[length]; + HmacHash(cryptoHashAlgorithm, m_data, 0, m_data.Length, labelSeed, result); + return result; + } + + protected virtual void UpdateMac(IMac mac) + { + lock (this) + { + CheckAlive(); + + mac.BlockUpdate(m_data, 0, m_data.Length); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSecret.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSecret.cs.meta new file mode 100644 index 000000000..b413ef66d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSecret.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e048cc36b0979343a70134c4b313249 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSigner.cs new file mode 100644 index 000000000..fdc4f258c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSigner.cs @@ -0,0 +1,40 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + public abstract class BcTlsSigner + : TlsSigner + { + protected readonly BcTlsCrypto m_crypto; + protected readonly AsymmetricKeyParameter m_privateKey; + + protected BcTlsSigner(BcTlsCrypto crypto, AsymmetricKeyParameter privateKey) + { + if (crypto == null) + throw new ArgumentNullException("crypto"); + if (privateKey == null) + throw new ArgumentNullException("privateKey"); + if (!privateKey.IsPrivate) + throw new ArgumentException("must be private", "privateKey"); + + this.m_crypto = crypto; + this.m_privateKey = privateKey; + } + + public virtual byte[] GenerateRawSignature(SignatureAndHashAlgorithm algorithm, byte[] hash) + { + throw new NotSupportedException(); + } + + public virtual TlsStreamSigner GetStreamSigner(SignatureAndHashAlgorithm algorithm) + { + return null; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSigner.cs.meta new file mode 100644 index 000000000..86c481405 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eefeda3d1ea92f347bc9b4747437de2f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSrp6Client.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSrp6Client.cs new file mode 100644 index 000000000..ca1dac3c8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSrp6Client.cs @@ -0,0 +1,40 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.Srp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + internal sealed class BcTlsSrp6Client + : TlsSrp6Client + { + private readonly Srp6Client m_srp6Client; + + internal BcTlsSrp6Client(Srp6Client srpClient) + { + this.m_srp6Client = srpClient; + } + + public BigInteger CalculateSecret(BigInteger serverB) + { + try + { + return m_srp6Client.CalculateSecret(serverB); + } + catch (CryptoException e) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter, e); + } + } + + public BigInteger GenerateClientCredentials(byte[] srpSalt, byte[] identity, byte[] password) + { + return m_srp6Client.GenerateClientCredentials(srpSalt, identity, password); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSrp6Client.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSrp6Client.cs.meta new file mode 100644 index 000000000..dd9f44013 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSrp6Client.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1f7aad8565cbc814e862794fe0ed1fdb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSrp6Server.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSrp6Server.cs new file mode 100644 index 000000000..3b6577742 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSrp6Server.cs @@ -0,0 +1,40 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.Srp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + internal sealed class BcTlsSrp6Server + : TlsSrp6Server + { + private readonly Srp6Server m_srp6Server; + + internal BcTlsSrp6Server(Srp6Server srp6Server) + { + this.m_srp6Server = srp6Server; + } + + public BigInteger GenerateServerCredentials() + { + return m_srp6Server.GenerateServerCredentials(); + } + + public BigInteger CalculateSecret(BigInteger clientA) + { + try + { + return m_srp6Server.CalculateSecret(clientA); + } + catch (CryptoException e) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter, e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSrp6Server.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSrp6Server.cs.meta new file mode 100644 index 000000000..eeef052ba --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSrp6Server.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 111682cf04864804bb2faf60239213c2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSrp6VerifierGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSrp6VerifierGenerator.cs new file mode 100644 index 000000000..fab6aacb7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSrp6VerifierGenerator.cs @@ -0,0 +1,27 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.Srp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + internal sealed class BcTlsSrp6VerifierGenerator + : TlsSrp6VerifierGenerator + { + private readonly Srp6VerifierGenerator m_srp6VerifierGenerator; + + internal BcTlsSrp6VerifierGenerator(Srp6VerifierGenerator srp6VerifierGenerator) + { + this.m_srp6VerifierGenerator = srp6VerifierGenerator; + } + + public BigInteger GenerateVerifier(byte[] salt, byte[] identity, byte[] password) + { + return m_srp6VerifierGenerator.GenerateVerifier(salt, identity, password); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSrp6VerifierGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSrp6VerifierGenerator.cs.meta new file mode 100644 index 000000000..f87680045 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsSrp6VerifierGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dbcee6e65b66bfb4f99013766bf58618 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsStreamSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsStreamSigner.cs new file mode 100644 index 000000000..30c86b635 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsStreamSigner.cs @@ -0,0 +1,40 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + internal sealed class BcTlsStreamSigner + : TlsStreamSigner + { + private readonly SignerSink m_output; + + internal BcTlsStreamSigner(ISigner signer) + { + this.m_output = new SignerSink(signer); + } + + public Stream Stream + { + get { return m_output; } + } + + public byte[] GetSignature() + { + try + { + return m_output.Signer.GenerateSignature(); + } + catch (CryptoException e) + { + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsStreamSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsStreamSigner.cs.meta new file mode 100644 index 000000000..b3d7d37b5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsStreamSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9dd0739ab6804a7458e079e9719a22a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsStreamVerifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsStreamVerifier.cs new file mode 100644 index 000000000..96fc283f1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsStreamVerifier.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + internal sealed class BcTlsStreamVerifier + : TlsStreamVerifier + { + private readonly SignerSink m_output; + private readonly byte[] m_signature; + + internal BcTlsStreamVerifier(ISigner verifier, byte[] signature) + { + this.m_output = new SignerSink(verifier); + this.m_signature = signature; + } + + public Stream Stream + { + get { return m_output; } + } + + public bool IsVerified() + { + return m_output.Signer.VerifySignature(m_signature); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsStreamVerifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsStreamVerifier.cs.meta new file mode 100644 index 000000000..f25e188f2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsStreamVerifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e2ff69cf90c958648942a25059753710 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsVerifier.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsVerifier.cs new file mode 100644 index 000000000..50ac598fd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsVerifier.cs @@ -0,0 +1,40 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + public abstract class BcTlsVerifier + : TlsVerifier + { + protected readonly BcTlsCrypto m_crypto; + protected readonly AsymmetricKeyParameter m_publicKey; + + protected BcTlsVerifier(BcTlsCrypto crypto, AsymmetricKeyParameter publicKey) + { + if (crypto == null) + throw new ArgumentNullException("crypto"); + if (publicKey == null) + throw new ArgumentNullException("publicKey"); + if (publicKey.IsPrivate) + throw new ArgumentException("must be public", "publicKey"); + + this.m_crypto = crypto; + this.m_publicKey = publicKey; + } + + public virtual TlsStreamVerifier GetStreamVerifier(DigitallySigned digitallySigned) + { + return null; + } + + public virtual bool VerifyRawSignature(DigitallySigned digitallySigned, byte[] hash) + { + throw new NotSupportedException(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsVerifier.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsVerifier.cs.meta new file mode 100644 index 000000000..770f2935c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcTlsVerifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7eb023f962742f445b4cc64994f80269 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcVerifyingStreamSigner.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcVerifyingStreamSigner.cs new file mode 100644 index 000000000..92b1e595e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcVerifyingStreamSigner.cs @@ -0,0 +1,52 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + internal sealed class BcVerifyingStreamSigner + : TlsStreamSigner + { + private readonly ISigner m_signer; + private readonly ISigner m_verifier; + private readonly TeeOutputStream m_output; + + internal BcVerifyingStreamSigner(ISigner signer, ISigner verifier) + { + Stream outputSigner = new SignerSink(signer); + Stream outputVerifier = new SignerSink(verifier); + + this.m_signer = signer; + this.m_verifier = verifier; + this.m_output = new TeeOutputStream(outputSigner, outputVerifier); + } + + public Stream Stream + { + get { return m_output; } + } + + public byte[] GetSignature() + { + try + { + byte[] signature = m_signer.GenerateSignature(); + if (m_verifier.VerifySignature(signature)) + return signature; + } + catch (CryptoException e) + { + throw new TlsFatalAlert(AlertDescription.internal_error, e); + } + + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcVerifyingStreamSigner.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcVerifyingStreamSigner.cs.meta new file mode 100644 index 000000000..a36d3c25f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcVerifyingStreamSigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 05e8b274e689e6f4ea625740e1c069dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX25519.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX25519.cs new file mode 100644 index 000000000..2692352da --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX25519.cs @@ -0,0 +1,58 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc7748; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// Support class for X25519 using the BC light-weight library. + public class BcX25519 + : TlsAgreement + { + protected readonly BcTlsCrypto m_crypto; + protected readonly byte[] m_privateKey = new byte[X25519.ScalarSize]; + protected readonly byte[] m_peerPublicKey = new byte[X25519.PointSize]; + + public BcX25519(BcTlsCrypto crypto) + { + this.m_crypto = crypto; + } + + public virtual byte[] GenerateEphemeral() + { + m_crypto.SecureRandom.NextBytes(m_privateKey); + + byte[] publicKey = new byte[X25519.PointSize]; + X25519.ScalarMultBase(m_privateKey, 0, publicKey, 0); + return publicKey; + } + + public virtual void ReceivePeerValue(byte[] peerValue) + { + if (peerValue == null || peerValue.Length != X25519.PointSize) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + Array.Copy(peerValue, 0, m_peerPublicKey, 0, X25519.PointSize); + } + + public virtual TlsSecret CalculateSecret() + { + try + { + byte[] secret = new byte[X25519.PointSize]; + if (!X25519.CalculateAgreement(m_privateKey, 0, m_peerPublicKey, 0, secret, 0)) + throw new TlsFatalAlert(AlertDescription.handshake_failure); + + return m_crypto.AdoptLocalSecret(secret); + } + finally + { + Array.Clear(m_privateKey, 0, m_privateKey.Length); + Array.Clear(m_peerPublicKey, 0, m_peerPublicKey.Length); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX25519.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX25519.cs.meta new file mode 100644 index 000000000..eaa0d4d80 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX25519.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 79a898d6d22e68c41bdb94c9e1823c9c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX25519Domain.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX25519Domain.cs new file mode 100644 index 000000000..d44fc1361 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX25519Domain.cs @@ -0,0 +1,24 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + public class BcX25519Domain + : TlsECDomain + { + protected readonly BcTlsCrypto m_crypto; + + public BcX25519Domain(BcTlsCrypto crypto) + { + this.m_crypto = crypto; + } + + public virtual TlsAgreement CreateECDH() + { + return new BcX25519(m_crypto); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX25519Domain.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX25519Domain.cs.meta new file mode 100644 index 000000000..6ced6a40b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX25519Domain.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9afae5c35dad58f49a4858bf7090ab22 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX448.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX448.cs new file mode 100644 index 000000000..cde5466f1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX448.cs @@ -0,0 +1,58 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc7748; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + /// Support class for X448 using the BC light-weight library. + public class BcX448 + : TlsAgreement + { + protected readonly BcTlsCrypto m_crypto; + protected readonly byte[] m_privateKey = new byte[X448.ScalarSize]; + protected readonly byte[] m_peerPublicKey = new byte[X448.PointSize]; + + public BcX448(BcTlsCrypto crypto) + { + this.m_crypto = crypto; + } + + public virtual byte[] GenerateEphemeral() + { + m_crypto.SecureRandom.NextBytes(m_privateKey); + + byte[] publicKey = new byte[X448.PointSize]; + X448.ScalarMultBase(m_privateKey, 0, publicKey, 0); + return publicKey; + } + + public virtual void ReceivePeerValue(byte[] peerValue) + { + if (peerValue == null || peerValue.Length != X448.PointSize) + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + + Array.Copy(peerValue, 0, m_peerPublicKey, 0, X448.PointSize); + } + + public virtual TlsSecret CalculateSecret() + { + try + { + byte[] secret = new byte[X448.PointSize]; + if (!X448.CalculateAgreement(m_privateKey, 0, m_peerPublicKey, 0, secret, 0)) + throw new TlsFatalAlert(AlertDescription.handshake_failure); + + return m_crypto.AdoptLocalSecret(secret); + } + finally + { + Array.Clear(m_privateKey, 0, m_privateKey.Length); + Array.Clear(m_peerPublicKey, 0, m_peerPublicKey.Length); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX448.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX448.cs.meta new file mode 100644 index 000000000..fab293c02 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX448.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68c97900f1e5828478c6cd89e7dfb5c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX448Domain.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX448Domain.cs new file mode 100644 index 000000000..5680cdbce --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX448Domain.cs @@ -0,0 +1,24 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl.BC +{ + public class BcX448Domain + : TlsECDomain + { + protected readonly BcTlsCrypto m_crypto; + + public BcX448Domain(BcTlsCrypto crypto) + { + this.m_crypto = crypto; + } + + public virtual TlsAgreement CreateECDH() + { + return new BcX448(m_crypto); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX448Domain.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX448Domain.cs.meta new file mode 100644 index 000000000..bc844d2fb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tls/crypto/impl/bc/BcX448Domain.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c87167106abb764eb9311263aec47ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp.meta new file mode 100644 index 000000000..83bc41ee0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b65683262d1a3214f857d8d7a9199f0c +folderAsset: yes +timeCreated: 1547039641 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/GenTimeAccuracy.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/GenTimeAccuracy.cs new file mode 100644 index 000000000..458c6c9dc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/GenTimeAccuracy.cs @@ -0,0 +1,37 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Tsp; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tsp +{ + public class GenTimeAccuracy + { + private Accuracy accuracy; + + public GenTimeAccuracy( + Accuracy accuracy) + { + this.accuracy = accuracy; + } + + public int Seconds { get { return GetTimeComponent(accuracy.Seconds); } } + + public int Millis { get { return GetTimeComponent(accuracy.Millis); } } + + public int Micros { get { return GetTimeComponent(accuracy.Micros); } } + + private int GetTimeComponent( + DerInteger time) + { + return time == null ? 0 : time.IntValueExact; + } + + public override string ToString() + { + return Seconds + "." + Millis.ToString("000") + Micros.ToString("000"); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/GenTimeAccuracy.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/GenTimeAccuracy.cs.meta new file mode 100644 index 000000000..728581455 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/GenTimeAccuracy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b121e50e39f7eae438bd60a8c88d8aab +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPAlgorithms.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPAlgorithms.cs new file mode 100644 index 000000000..18564a583 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPAlgorithms.cs @@ -0,0 +1,53 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.GM; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Rosstandart; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.TeleTrust; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tsp +{ + /** + * Recognised hash algorithms for the time stamp protocol. + */ + public static class TspAlgorithms + { + public static readonly string MD5 = PkcsObjectIdentifiers.MD5.Id; + + public static readonly string Sha1 = OiwObjectIdentifiers.IdSha1.Id; + + public static readonly string Sha224 = NistObjectIdentifiers.IdSha224.Id; + public static readonly string Sha256 = NistObjectIdentifiers.IdSha256.Id; + public static readonly string Sha384 = NistObjectIdentifiers.IdSha384.Id; + public static readonly string Sha512 = NistObjectIdentifiers.IdSha512.Id; + + public static readonly string RipeMD128 = TeleTrusTObjectIdentifiers.RipeMD128.Id; + public static readonly string RipeMD160 = TeleTrusTObjectIdentifiers.RipeMD160.Id; + public static readonly string RipeMD256 = TeleTrusTObjectIdentifiers.RipeMD256.Id; + + public static readonly string Gost3411 = CryptoProObjectIdentifiers.GostR3411.Id; + public static readonly string Gost3411_2012_256 = RosstandartObjectIdentifiers.id_tc26_gost_3411_12_256.Id; + public static readonly string Gost3411_2012_512 = RosstandartObjectIdentifiers.id_tc26_gost_3411_12_512.Id; + + public static readonly string SM3 = GMObjectIdentifiers.sm3.Id; + + public static readonly IList Allowed; + + static TspAlgorithms() + { + Allowed = CollectionUtilities.ReadOnly(new List() + { + Gost3411, Gost3411_2012_256, Gost3411_2012_512, MD5, RipeMD128, RipeMD160, RipeMD256, Sha1, Sha224, + Sha256, Sha384, Sha512, SM3 + }); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPAlgorithms.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPAlgorithms.cs.meta new file mode 100644 index 000000000..703aaa5d1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPAlgorithms.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 499a88718c5a4bc4f83dbb4ea7aa4ed9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPException.cs new file mode 100644 index 000000000..f38bb337b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tsp +{ + [Serializable] + public class TspException + : Exception + { + public TspException() + : base() + { + } + + public TspException(string message) + : base(message) + { + } + + public TspException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected TspException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPException.cs.meta new file mode 100644 index 000000000..626e3ce38 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7656ac180275ac84f835935c4731b5b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPUtil.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPUtil.cs new file mode 100644 index 000000000..5f201c5cb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPUtil.cs @@ -0,0 +1,206 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.GM; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Rosstandart; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.TeleTrust; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tsp +{ + public class TspUtil + { + private static readonly Dictionary DigestLengths = new Dictionary(); + private static readonly Dictionary DigestNames = new Dictionary(); + + static TspUtil() + { + DigestLengths.Add(PkcsObjectIdentifiers.MD5.Id, 16); + DigestLengths.Add(OiwObjectIdentifiers.IdSha1.Id, 20); + DigestLengths.Add(NistObjectIdentifiers.IdSha224.Id, 28); + DigestLengths.Add(NistObjectIdentifiers.IdSha256.Id, 32); + DigestLengths.Add(NistObjectIdentifiers.IdSha384.Id, 48); + DigestLengths.Add(NistObjectIdentifiers.IdSha512.Id, 64); + DigestLengths.Add(TeleTrusTObjectIdentifiers.RipeMD128.Id, 16); + DigestLengths.Add(TeleTrusTObjectIdentifiers.RipeMD160.Id, 20); + DigestLengths.Add(TeleTrusTObjectIdentifiers.RipeMD256.Id, 32); + DigestLengths.Add(CryptoProObjectIdentifiers.GostR3411.Id, 32); + DigestLengths.Add(RosstandartObjectIdentifiers.id_tc26_gost_3411_12_256.Id, 32); + DigestLengths.Add(RosstandartObjectIdentifiers.id_tc26_gost_3411_12_512.Id, 64); + DigestLengths.Add(GMObjectIdentifiers.sm3.Id, 32); + + DigestNames.Add(PkcsObjectIdentifiers.MD5.Id, "MD5"); + DigestNames.Add(OiwObjectIdentifiers.IdSha1.Id, "SHA1"); + DigestNames.Add(NistObjectIdentifiers.IdSha224.Id, "SHA224"); + DigestNames.Add(NistObjectIdentifiers.IdSha256.Id, "SHA256"); + DigestNames.Add(NistObjectIdentifiers.IdSha384.Id, "SHA384"); + DigestNames.Add(NistObjectIdentifiers.IdSha512.Id, "SHA512"); + DigestNames.Add(PkcsObjectIdentifiers.MD5WithRsaEncryption.Id, "MD5"); + DigestNames.Add(PkcsObjectIdentifiers.Sha1WithRsaEncryption.Id, "SHA1"); + DigestNames.Add(PkcsObjectIdentifiers.Sha224WithRsaEncryption.Id, "SHA224"); + DigestNames.Add(PkcsObjectIdentifiers.Sha256WithRsaEncryption.Id, "SHA256"); + DigestNames.Add(PkcsObjectIdentifiers.Sha384WithRsaEncryption.Id, "SHA384"); + DigestNames.Add(PkcsObjectIdentifiers.Sha512WithRsaEncryption.Id, "SHA512"); + DigestNames.Add(TeleTrusTObjectIdentifiers.RipeMD128.Id, "RIPEMD128"); + DigestNames.Add(TeleTrusTObjectIdentifiers.RipeMD160.Id, "RIPEMD160"); + DigestNames.Add(TeleTrusTObjectIdentifiers.RipeMD256.Id, "RIPEMD256"); + DigestNames.Add(CryptoProObjectIdentifiers.GostR3411.Id, "GOST3411"); + DigestNames.Add(OiwObjectIdentifiers.DsaWithSha1.Id, "SHA1"); + DigestNames.Add(OiwObjectIdentifiers.Sha1WithRsa.Id, "SHA1"); + DigestNames.Add(OiwObjectIdentifiers.MD5WithRsa.Id, "MD5"); + DigestNames.Add(RosstandartObjectIdentifiers.id_tc26_gost_3411_12_256.Id, "GOST3411-2012-256"); + DigestNames.Add(RosstandartObjectIdentifiers.id_tc26_gost_3411_12_512.Id, "GOST3411-2012-512"); + DigestNames.Add(GMObjectIdentifiers.sm3.Id, "SM3"); + } + + + /** + * Fetches the signature time-stamp attributes from a SignerInformation object. + * Checks that the MessageImprint for each time-stamp matches the signature field. + * (see RFC 3161 Appendix A). + * + * @param signerInfo a SignerInformation to search for time-stamps + * @return a collection of TimeStampToken objects + * @throws TSPValidationException + */ + public static IList GetSignatureTimestamps( + SignerInformation signerInfo) + { + var timestamps = new List(); + + Asn1.Cms.AttributeTable unsignedAttrs = signerInfo.UnsignedAttributes; + if (unsignedAttrs != null) + { + foreach (Asn1.Cms.Attribute tsAttr in unsignedAttrs.GetAll( + PkcsObjectIdentifiers.IdAASignatureTimeStampToken)) + { + foreach (Asn1Encodable asn1 in tsAttr.AttrValues) + { + try + { + Asn1.Cms.ContentInfo contentInfo = Asn1.Cms.ContentInfo.GetInstance( + asn1.ToAsn1Object()); + TimeStampToken timeStampToken = new TimeStampToken(contentInfo); + TimeStampTokenInfo tstInfo = timeStampToken.TimeStampInfo; + + byte[] expectedDigest = DigestUtilities.CalculateDigest( + GetDigestAlgName(tstInfo.MessageImprintAlgOid), + signerInfo.GetSignature()); + + if (!Arrays.ConstantTimeAreEqual(expectedDigest, tstInfo.GetMessageImprintDigest())) + throw new TspValidationException("Incorrect digest in message imprint"); + + timestamps.Add(timeStampToken); + } + catch (SecurityUtilityException) + { + throw new TspValidationException("Unknown hash algorithm specified in timestamp"); + } + catch (Exception) + { + throw new TspValidationException("Timestamp could not be parsed"); + } + } + } + } + + return timestamps; + } + + /** + * Validate the passed in certificate as being of the correct type to be used + * for time stamping. To be valid it must have an ExtendedKeyUsage extension + * which has a key purpose identifier of id-kp-timeStamping. + * + * @param cert the certificate of interest. + * @throws TspValidationException if the certicate fails on one of the check points. + */ + public static void ValidateCertificate( + X509Certificate cert) + { + if (cert.Version != 3) + throw new ArgumentException("Certificate must have an ExtendedKeyUsage extension."); + + Asn1OctetString ext = cert.GetExtensionValue(X509Extensions.ExtendedKeyUsage); + if (ext == null) + throw new TspValidationException("Certificate must have an ExtendedKeyUsage extension."); + + if (!cert.GetCriticalExtensionOids().Contains(X509Extensions.ExtendedKeyUsage.Id)) + throw new TspValidationException("Certificate must have an ExtendedKeyUsage extension marked as critical."); + + try + { + ExtendedKeyUsage extKey = ExtendedKeyUsage.GetInstance( + Asn1Object.FromByteArray(ext.GetOctets())); + + if (!extKey.HasKeyPurposeId(KeyPurposeID.id_kp_timeStamping) || extKey.Count != 1) + throw new TspValidationException("ExtendedKeyUsage not solely time stamping."); + } + catch (IOException) + { + throw new TspValidationException("cannot process ExtendedKeyUsage extension"); + } + } + + /// + /// Return the digest algorithm using one of the standard JCA string + /// representations rather than the algorithm identifier (if possible). + /// + internal static string GetDigestAlgName(string digestAlgOid) + { + return CollectionUtilities.GetValueOrKey(DigestNames, digestAlgOid); + } + + internal static int GetDigestLength(string digestAlgOid) + { + if (!DigestLengths.TryGetValue(digestAlgOid, out int length)) + throw new TspException("digest algorithm cannot be found."); + + return length; + } + + internal static IDigest CreateDigestInstance(string digestAlgOID) + { + string digestName = GetDigestAlgName(digestAlgOID); + + return DigestUtilities.GetDigest(digestName); + } + + internal static ISet GetCriticalExtensionOids(X509Extensions extensions) + { + return extensions == null + ? new HashSet() + : new HashSet(extensions.GetCriticalExtensionOids()); + } + + internal static ISet GetNonCriticalExtensionOids(X509Extensions extensions) + { + return extensions == null + ? new HashSet() + : new HashSet(extensions.GetNonCriticalExtensionOids()); + } + + internal static IList GetExtensionOids(X509Extensions extensions) + { + return extensions == null + ? new List() + : new List(extensions.GetExtensionOids()); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPUtil.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPUtil.cs.meta new file mode 100644 index 000000000..26a89878f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPUtil.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac5ae719ecc37554b9cf608fb87fef41 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPValidationException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPValidationException.cs new file mode 100644 index 000000000..245f2a585 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPValidationException.cs @@ -0,0 +1,51 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tsp +{ + /** + * Exception thrown if a TSP request or response fails to validate. + *

    + * If a failure code is associated with the exception it can be retrieved using + * the getFailureCode() method.

    + */ + [Serializable] + public class TspValidationException + : TspException + { + protected readonly int m_failureCode; + + public TspValidationException(string message) + : this(message, -1) + { + } + + public TspValidationException(string message, int failureCode) + : base(message) + { + m_failureCode = failureCode; + } + + protected TspValidationException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + m_failureCode = info.GetInt32("failureCode"); + } + + public override void GetObjectData(SerializationInfo info, StreamingContext context) + { + base.GetObjectData(info, context); + info.AddValue("failureCode", m_failureCode); + } + + /// The failure code associated with this exception, if one is set. + public int FailureCode + { + get { return m_failureCode; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPValidationException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPValidationException.cs.meta new file mode 100644 index 000000000..47e130e21 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TSPValidationException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 17b0d10ccf7ab7c4c815f6d81d87f6bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampRequest.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampRequest.cs new file mode 100644 index 000000000..296367403 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampRequest.cs @@ -0,0 +1,185 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Tsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tsp +{ + /** + * Base class for an RFC 3161 Time Stamp Request. + */ + public class TimeStampRequest + : X509ExtensionBase + { + private TimeStampReq req; + private X509Extensions extensions; + + public TimeStampRequest( + TimeStampReq req) + { + this.req = req; + this.extensions = req.Extensions; + } + + /** + * Create a TimeStampRequest from the past in byte array. + * + * @param req byte array containing the request. + * @throws IOException if the request is malformed. + */ + public TimeStampRequest( + byte[] req) + : this(new Asn1InputStream(req)) + { + } + + /** + * Create a TimeStampRequest from the past in input stream. + * + * @param in input stream containing the request. + * @throws IOException if the request is malformed. + */ + public TimeStampRequest( + Stream input) + : this(new Asn1InputStream(input)) + { + } + + private TimeStampRequest( + Asn1InputStream str) + { + try + { + this.req = TimeStampReq.GetInstance(str.ReadObject()); + } + catch (InvalidCastException e) + { + throw new IOException("malformed request: " + e); + } + catch (ArgumentException e) + { + throw new IOException("malformed request: " + e); + } + } + + public int Version + { + get { return req.Version.IntValueExact; } + } + + public string MessageImprintAlgOid + { + get { return req.MessageImprint.HashAlgorithm.Algorithm.Id; } + } + + public byte[] GetMessageImprintDigest() + { + return req.MessageImprint.GetHashedMessage(); + } + + public string ReqPolicy + { + get + { + return req.ReqPolicy == null + ? null + : req.ReqPolicy.Id; + } + } + + public BigInteger Nonce + { + get + { + return req.Nonce == null + ? null + : req.Nonce.Value; + } + } + + public bool CertReq + { + get + { + return req.CertReq == null + ? false + : req.CertReq.IsTrue; + } + } + + /** + * Validate the timestamp request, checking the digest to see if it is of an + * accepted type and whether it is of the correct length for the algorithm specified. + * + * @param algorithms a set of string OIDS giving accepted algorithms. + * @param policies if non-null a set of policies we are willing to sign under. + * @param extensions if non-null a set of extensions we are willing to accept. + * @throws TspException if the request is invalid, or processing fails. + */ + public void Validate(IList algorithms, IList policies, IList extensions) + { + if (!algorithms.Contains(this.MessageImprintAlgOid)) + throw new TspValidationException("request contains unknown algorithm", PkiFailureInfo.BadAlg); + + if (policies != null && this.ReqPolicy != null && !policies.Contains(this.ReqPolicy)) + throw new TspValidationException("request contains unknown policy", PkiFailureInfo.UnacceptedPolicy); + + if (this.Extensions != null && extensions != null) + { + foreach (DerObjectIdentifier oid in this.Extensions.ExtensionOids) + { + if (!extensions.Contains(oid.Id)) + throw new TspValidationException("request contains unknown extension", PkiFailureInfo.UnacceptedExtension); + } + } + + int digestLength = TspUtil.GetDigestLength(this.MessageImprintAlgOid); + + if (digestLength != this.GetMessageImprintDigest().Length) + throw new TspValidationException("imprint digest the wrong length", PkiFailureInfo.BadDataFormat); + } + + /** + * return the ASN.1 encoded representation of this object. + */ + public byte[] GetEncoded() + { + return req.GetEncoded(); + } + + internal X509Extensions Extensions + { + get { return req.Extensions; } + } + + public virtual bool HasExtensions + { + get { return extensions != null; } + } + + public virtual X509Extension GetExtension(DerObjectIdentifier oid) + { + return extensions == null ? null : extensions.GetExtension(oid); + } + + public virtual IList GetExtensionOids() + { + return TspUtil.GetExtensionOids(extensions); + } + + protected override X509Extensions GetX509Extensions() + { + return Extensions; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampRequest.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampRequest.cs.meta new file mode 100644 index 000000000..04933edf9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3f95e3ff8f9fee4d8c530f910ce5104 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampRequestGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampRequestGenerator.cs new file mode 100644 index 000000000..e439ffab6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampRequestGenerator.cs @@ -0,0 +1,98 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Tsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tsp +{ + /** + * Generator for RFC 3161 Time Stamp Request objects. + */ + public class TimeStampRequestGenerator + { + private DerObjectIdentifier reqPolicy; + + private DerBoolean certReq; + + private Dictionary m_extensions = + new Dictionary(); + private List m_ordering = new List(); + + public void SetReqPolicy(string reqPolicy) + { + this.reqPolicy = new DerObjectIdentifier(reqPolicy); + } + + public void SetCertReq(bool certReq) + { + this.certReq = DerBoolean.GetInstance(certReq); + } + + /** + * add a given extension field for the standard extensions tag (tag 3) + * @throws IOException + */ + public virtual void AddExtension(DerObjectIdentifier oid, bool critical, Asn1Encodable extValue) + { + this.AddExtension(oid, critical, extValue.GetEncoded()); + } + + /** + * add a given extension field for the standard extensions tag + * The value parameter becomes the contents of the octet string associated + * with the extension. + */ + public virtual void AddExtension(DerObjectIdentifier oid, bool critical, byte[] extValue) + { + m_extensions.Add(oid, new X509Extension(critical, new DerOctetString(extValue))); + m_ordering.Add(oid); + } + + public TimeStampRequest Generate(string digestAlgorithm, byte[] digest) + { + return Generate(digestAlgorithm, digest, null); + } + + public TimeStampRequest Generate(string digestAlgorithmOid, byte[] digest, BigInteger nonce) + { + if (digestAlgorithmOid == null) + throw new ArgumentException("No digest algorithm specified"); + + DerObjectIdentifier digestAlgOid = new DerObjectIdentifier(digestAlgorithmOid); + + AlgorithmIdentifier algID = new AlgorithmIdentifier(digestAlgOid, DerNull.Instance); + MessageImprint messageImprint = new MessageImprint(algID, digest); + + X509Extensions ext = null; + + if (m_ordering.Count > 0) + { + ext = new X509Extensions(m_ordering, m_extensions); + } + + DerInteger derNonce = nonce == null ? null : new DerInteger(nonce); + + return new TimeStampRequest( + new TimeStampReq(messageImprint, reqPolicy, derNonce, certReq, ext)); + } + + public virtual TimeStampRequest Generate(DerObjectIdentifier digestAlgorithm, byte[] digest) + { + return Generate(digestAlgorithm.Id, digest); + } + + public virtual TimeStampRequest Generate(DerObjectIdentifier digestAlgorithm, byte[] digest, BigInteger nonce) + { + return Generate(digestAlgorithm.Id, digest, nonce); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampRequestGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampRequestGenerator.cs.meta new file mode 100644 index 000000000..8e1f720f6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampRequestGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1cb85a8797248f249a9b03c64d756801 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampResponse.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampResponse.cs new file mode 100644 index 000000000..5897c59c5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampResponse.cs @@ -0,0 +1,188 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Tsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tsp +{ + /** + * Base class for an RFC 3161 Time Stamp Response object. + */ + public class TimeStampResponse + { + private TimeStampResp resp; + private TimeStampToken timeStampToken; + + public TimeStampResponse( + TimeStampResp resp) + { + this.resp = resp; + + if (resp.TimeStampToken != null) + { + timeStampToken = new TimeStampToken(resp.TimeStampToken); + } + } + + /** + * Create a TimeStampResponse from a byte array containing an ASN.1 encoding. + * + * @param resp the byte array containing the encoded response. + * @throws TspException if the response is malformed. + * @throws IOException if the byte array doesn't represent an ASN.1 encoding. + */ + public TimeStampResponse( + byte[] resp) + : this(readTimeStampResp(new Asn1InputStream(resp))) + { + } + + /** + * Create a TimeStampResponse from an input stream containing an ASN.1 encoding. + * + * @param input the input stream containing the encoded response. + * @throws TspException if the response is malformed. + * @throws IOException if the stream doesn't represent an ASN.1 encoding. + */ + public TimeStampResponse( + Stream input) + : this(readTimeStampResp(new Asn1InputStream(input))) + { + } + + private static TimeStampResp readTimeStampResp( + Asn1InputStream input) + { + try + { + return TimeStampResp.GetInstance(input.ReadObject()); + } + catch (ArgumentException e) + { + throw new TspException("malformed timestamp response: " + e, e); + } + catch (InvalidCastException e) + { + throw new TspException("malformed timestamp response: " + e, e); + } + } + + public int Status + { + get { return resp.Status.Status.IntValue; } + } + + public string GetStatusString() + { + if (resp.Status.StatusString == null) + { + return null; + } + + StringBuilder statusStringBuf = new StringBuilder(); + PkiFreeText text = resp.Status.StatusString; + for (int i = 0; i != text.Count; i++) + { + statusStringBuf.Append(text[i].GetString()); + } + + return statusStringBuf.ToString(); + } + + public PkiFailureInfo GetFailInfo() + { + if (resp.Status.FailInfo == null) + { + return null; + } + + return new PkiFailureInfo(resp.Status.FailInfo); + } + + public TimeStampToken TimeStampToken + { + get { return timeStampToken; } + } + + /** + * Check this response against to see if it a well formed response for + * the passed in request. Validation will include checking the time stamp + * token if the response status is GRANTED or GRANTED_WITH_MODS. + * + * @param request the request to be checked against + * @throws TspException if the request can not match this response. + */ + public void Validate( + TimeStampRequest request) + { + TimeStampToken tok = this.TimeStampToken; + + if (tok != null) + { + TimeStampTokenInfo tstInfo = tok.TimeStampInfo; + + if (request.Nonce != null && !request.Nonce.Equals(tstInfo.Nonce)) + { + throw new TspValidationException("response contains wrong nonce value."); + } + + if (this.Status != (int) PkiStatus.Granted && this.Status != (int) PkiStatus.GrantedWithMods) + { + throw new TspValidationException("time stamp token found in failed request."); + } + + if (!Arrays.ConstantTimeAreEqual(request.GetMessageImprintDigest(), tstInfo.GetMessageImprintDigest())) + { + throw new TspValidationException("response for different message imprint digest."); + } + + if (!tstInfo.MessageImprintAlgOid.Equals(request.MessageImprintAlgOid)) + { + throw new TspValidationException("response for different message imprint algorithm."); + } + + Asn1.Cms.Attribute scV1 = tok.SignedAttributes[PkcsObjectIdentifiers.IdAASigningCertificate]; + Asn1.Cms.Attribute scV2 = tok.SignedAttributes[PkcsObjectIdentifiers.IdAASigningCertificateV2]; + + if (scV1 == null && scV2 == null) + { + throw new TspValidationException("no signing certificate attribute present."); + } + + if (scV1 != null && scV2 != null) + { + /* + * RFC 5035 5.4. If both attributes exist in a single message, + * they are independently evaluated. + */ + } + + if (request.ReqPolicy != null && !request.ReqPolicy.Equals(tstInfo.Policy)) + { + throw new TspValidationException("TSA policy wrong for request."); + } + } + else if (this.Status == (int) PkiStatus.Granted || this.Status == (int) PkiStatus.GrantedWithMods) + { + throw new TspValidationException("no time stamp token found and one expected."); + } + } + + /** + * return the ASN.1 encoded representation of this object. + */ + public byte[] GetEncoded() + { + return resp.GetEncoded(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampResponse.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampResponse.cs.meta new file mode 100644 index 000000000..e965991a5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampResponse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0b7d9336b3bad4448a81aa956426c6d9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampResponseGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampResponseGenerator.cs new file mode 100644 index 000000000..7c243ebf7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampResponseGenerator.cs @@ -0,0 +1,259 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Tsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tsp +{ + /** + * Generator for RFC 3161 Time Stamp Responses. + */ + public class TimeStampResponseGenerator + { + private PkiStatus status; + + private Asn1EncodableVector statusStrings; + + private int failInfo; + private TimeStampTokenGenerator tokenGenerator; + private IList acceptedAlgorithms; + private IList acceptedPolicies; + private IList acceptedExtensions; + + public TimeStampResponseGenerator( + TimeStampTokenGenerator tokenGenerator, + IList acceptedAlgorithms) + : this(tokenGenerator, acceptedAlgorithms, null, null) + { + } + + public TimeStampResponseGenerator( + TimeStampTokenGenerator tokenGenerator, + IList acceptedAlgorithms, + IList acceptedPolicy) + : this(tokenGenerator, acceptedAlgorithms, acceptedPolicy, null) + { + } + + public TimeStampResponseGenerator( + TimeStampTokenGenerator tokenGenerator, + IList acceptedAlgorithms, + IList acceptedPolicies, + IList acceptedExtensions) + { + this.tokenGenerator = tokenGenerator; + this.acceptedAlgorithms = acceptedAlgorithms; + this.acceptedPolicies = acceptedPolicies; + this.acceptedExtensions = acceptedExtensions; + + statusStrings = new Asn1EncodableVector(); + } + + private void AddStatusString(string statusString) + { + statusStrings.Add(new DerUtf8String(statusString)); + } + + private void SetFailInfoField(int field) + { + failInfo |= field; + } + + private PkiStatusInfo GetPkiStatusInfo() + { + Asn1EncodableVector v = new Asn1EncodableVector( + new DerInteger((int)status)); + + if (statusStrings.Count > 0) + { + v.Add(new PkiFreeText(new DerSequence(statusStrings))); + } + + if (failInfo != 0) + { + v.Add(new FailInfo(failInfo)); + } + + return new PkiStatusInfo(new DerSequence(v)); + } + + /** + * Return an appropriate TimeStampResponse. + *

    + * If genTime is null a timeNotAvailable error response will be returned. + * + * @param request the request this response is for. + * @param serialNumber serial number for the response token. + * @param genTime generation time for the response token. + * @param provider provider to use for signature calculation. + * @return + * @throws NoSuchAlgorithmException + * @throws NoSuchProviderException + * @throws TSPException + *

    + */ + public TimeStampResponse Generate(TimeStampRequest request, BigInteger serialNumber, DateTime? genTime) + { + TimeStampResp resp; + + try + { + if (genTime == null) + throw new TspValidationException("The time source is not available.", + PkiFailureInfo.TimeNotAvailable); + + request.Validate(acceptedAlgorithms, acceptedPolicies, acceptedExtensions); + + this.status = PkiStatus.Granted; + this.AddStatusString("Operation Okay"); + + PkiStatusInfo pkiStatusInfo = GetPkiStatusInfo(); + + ContentInfo tstTokenContentInfo; + try + { + TimeStampToken token = tokenGenerator.Generate(request, serialNumber, genTime.Value); + byte[] encoded = token.ToCmsSignedData().GetEncoded(); + + tstTokenContentInfo = ContentInfo.GetInstance(Asn1Object.FromByteArray(encoded)); + } + catch (IOException e) + { + throw new TspException("Timestamp token received cannot be converted to ContentInfo", e); + } + + resp = new TimeStampResp(pkiStatusInfo, tstTokenContentInfo); + } + catch (TspValidationException e) + { + status = PkiStatus.Rejection; + + this.SetFailInfoField(e.FailureCode); + this.AddStatusString(e.Message); + + PkiStatusInfo pkiStatusInfo = GetPkiStatusInfo(); + + resp = new TimeStampResp(pkiStatusInfo, null); + } + + try + { + return new TimeStampResponse(resp); + } + catch (IOException e) + { + throw new TspException("created badly formatted response!", e); + } + } + + public TimeStampResponse GenerateGrantedResponse(TimeStampRequest request, BigInteger serialNumber, + DateTime? genTime, string statusString, X509Extensions additionalExtensions) + { + TimeStampResp resp; + + try + { + if (genTime == null) + throw new TspValidationException("The time source is not available.", + PkiFailureInfo.TimeNotAvailable); + + request.Validate(acceptedAlgorithms, acceptedPolicies, acceptedExtensions); + + this.status = PkiStatus.Granted; + this.AddStatusString(statusString); + + PkiStatusInfo pkiStatusInfo = GetPkiStatusInfo(); + + ContentInfo tstTokenContentInfo; + try + { + TimeStampToken token = tokenGenerator.Generate(request, serialNumber, genTime.Value,additionalExtensions); + byte[] encoded = token.ToCmsSignedData().GetEncoded(); + + tstTokenContentInfo = ContentInfo.GetInstance(Asn1Object.FromByteArray(encoded)); + } + catch (IOException e) + { + throw new TspException("Timestamp token received cannot be converted to ContentInfo", e); + } + + resp = new TimeStampResp(pkiStatusInfo, tstTokenContentInfo); + } + catch (TspValidationException e) + { + status = PkiStatus.Rejection; + + this.SetFailInfoField(e.FailureCode); + this.AddStatusString(e.Message); + + PkiStatusInfo pkiStatusInfo = GetPkiStatusInfo(); + + resp = new TimeStampResp(pkiStatusInfo, null); + } + + try + { + return new TimeStampResponse(resp); + } + catch (IOException e) + { + throw new TspException("created badly formatted response!", e); + } + } + + + + class FailInfo + : DerBitString + { + internal FailInfo(int failInfoValue) + : base(failInfoValue) + { + } + } + + /** + * Generate a TimeStampResponse with chosen status and FailInfoField. + * + * @param status the PKIStatus to set. + * @param failInfoField the FailInfoField to set. + * @param statusString an optional string describing the failure. + * @return a TimeStampResponse with a failInfoField and optional statusString + * @throws TSPException in case the response could not be created + */ + public TimeStampResponse GenerateFailResponse(PkiStatus status, int failInfoField, string statusString) + { + this.status = status; + + this.SetFailInfoField(failInfoField); + + if (statusString != null) + { + this.AddStatusString(statusString); + } + + PkiStatusInfo pkiStatusInfo = GetPkiStatusInfo(); + + TimeStampResp resp = new TimeStampResp(pkiStatusInfo, null); + + try + { + return new TimeStampResponse(resp); + } + catch (IOException e) + { + throw new TspException("created badly formatted response!", e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampResponseGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampResponseGenerator.cs.meta new file mode 100644 index 000000000..b0393288a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampResponseGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31244340abddb5d4ca611f3cc612ee24 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampToken.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampToken.cs new file mode 100644 index 000000000..f420f142c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampToken.cs @@ -0,0 +1,308 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ess; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Tsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tsp +{ + public class TimeStampToken + { + private readonly CmsSignedData tsToken; + private readonly SignerInformation tsaSignerInfo; +// private readonly DateTime genTime; + private readonly TimeStampTokenInfo tstInfo; + private readonly CertID certID; + + public TimeStampToken( + Asn1.Cms.ContentInfo contentInfo) + : this(new CmsSignedData(contentInfo)) + { + } + + public TimeStampToken( + CmsSignedData signedData) + { + this.tsToken = signedData; + + if (!this.tsToken.SignedContentType.Equals(PkcsObjectIdentifiers.IdCTTstInfo)) + { + throw new TspValidationException("ContentInfo object not for a time stamp."); + } + + var signers = tsToken.GetSignerInfos().GetSigners(); + + if (signers.Count != 1) + { + throw new ArgumentException("Time-stamp token signed by " + + signers.Count + + " signers, but it must contain just the TSA signature."); + } + + + var signerEnum = signers.GetEnumerator(); + + signerEnum.MoveNext(); + tsaSignerInfo = signerEnum.Current; + + try + { + CmsProcessable content = tsToken.SignedContent; + MemoryStream bOut = new MemoryStream(); + + content.Write(bOut); + + this.tstInfo = new TimeStampTokenInfo( + TstInfo.GetInstance( + Asn1Object.FromByteArray(bOut.ToArray()))); + + Asn1.Cms.Attribute attr = tsaSignerInfo.SignedAttributes[ + PkcsObjectIdentifiers.IdAASigningCertificate]; + +// if (attr == null) +// { +// throw new TspValidationException( +// "no signing certificate attribute found, time stamp invalid."); +// } +// +// SigningCertificate signCert = SigningCertificate.GetInstance( +// attr.AttrValues[0]); +// +// this.certID = EssCertID.GetInstance(signCert.GetCerts()[0]); + + if (attr != null) + { + + if (attr.AttrValues[0] is SigningCertificateV2) + { + SigningCertificateV2 signCert = SigningCertificateV2.GetInstance(attr.AttrValues[0]); + this.certID = new CertID(EssCertIDv2.GetInstance(signCert.GetCerts()[0])); + } + else + { + SigningCertificate signCert = SigningCertificate.GetInstance(attr.AttrValues[0]); + this.certID = new CertID(EssCertID.GetInstance(signCert.GetCerts()[0])); + } + } + else + { + attr = tsaSignerInfo.SignedAttributes[PkcsObjectIdentifiers.IdAASigningCertificateV2]; + + if (attr == null) + throw new TspValidationException("no signing certificate attribute found, time stamp invalid."); + + SigningCertificateV2 signCertV2 = SigningCertificateV2.GetInstance(attr.AttrValues[0]); + + this.certID = new CertID(EssCertIDv2.GetInstance(signCertV2.GetCerts()[0])); + } + } + catch (CmsException e) + { + throw new TspException(e.Message, e.InnerException); + } + } + + public TimeStampTokenInfo TimeStampInfo + { + get { return tstInfo; } + } + + public SignerID SignerID + { + get { return tsaSignerInfo.SignerID; } + } + + public Asn1.Cms.AttributeTable SignedAttributes + { + get { return tsaSignerInfo.SignedAttributes; } + } + + public Asn1.Cms.AttributeTable UnsignedAttributes + { + get { return tsaSignerInfo.UnsignedAttributes; } + } + + public IStore GetAttributeCertificates() => tsToken.GetAttributeCertificates(); + + public IStore GetCertificates() => tsToken.GetCertificates(); + + public IStore GetCrls() => tsToken.GetCrls(); + + /** + * Validate the time stamp token. + *

    + * To be valid the token must be signed by the passed in certificate and + * the certificate must be the one referred to by the SigningCertificate + * attribute included in the hashed attributes of the token. The + * certificate must also have the ExtendedKeyUsageExtension with only + * KeyPurposeID.IdKPTimeStamping and have been valid at the time the + * timestamp was created. + *

    + *

    + * A successful call to validate means all the above are true. + *

    + */ + public void Validate( + X509Certificate cert) + { + try + { + byte[] hash = DigestUtilities.CalculateDigest( + certID.GetHashAlgorithmName(), cert.GetEncoded()); + + if (!Arrays.ConstantTimeAreEqual(certID.GetCertHash(), hash)) + throw new TspValidationException("certificate hash does not match certID hash."); + + if (certID.IssuerSerial != null) + { + if (!certID.IssuerSerial.Serial.HasValue(cert.SerialNumber)) + throw new TspValidationException("certificate serial number does not match certID for signature."); + + GeneralName[] names = certID.IssuerSerial.Issuer.GetNames(); + X509Name principal = PrincipalUtilities.GetIssuerX509Principal(cert); + bool found = false; + + for (int i = 0; i != names.Length; i++) + { + if (names[i].TagNo == 4 + && X509Name.GetInstance(names[i].Name).Equivalent(principal)) + { + found = true; + break; + } + } + + if (!found) + { + throw new TspValidationException("certificate name does not match certID for signature. "); + } + } + + TspUtil.ValidateCertificate(cert); + + cert.CheckValidity(tstInfo.GenTime); + + if (!tsaSignerInfo.Verify(cert)) + { + throw new TspValidationException("signature not created by certificate."); + } + } + catch (CmsException e) + { + if (e.InnerException != null) + { + throw new TspException(e.Message, e.InnerException); + } + + throw new TspException("CMS exception: " + e, e); + } + catch (CertificateEncodingException e) + { + throw new TspException("problem processing certificate: " + e, e); + } + catch (SecurityUtilityException e) + { + throw new TspException("cannot find algorithm: " + e.Message, e); + } + } + + /** + * Return the underlying CmsSignedData object. + * + * @return the underlying CMS structure. + */ + public CmsSignedData ToCmsSignedData() + { + return tsToken; + } + + /** + * Return a ASN.1 encoded byte stream representing the encoded object. + * + * @throws IOException if encoding fails. + */ + public byte[] GetEncoded() + { + return tsToken.GetEncoded(Asn1Encodable.Der); + } + + /** + * return the ASN.1 encoded representation of this object using the specified encoding. + * + * @param encoding the ASN.1 encoding format to use ("BER" or "DER"). + */ + public byte[] GetEncoded(string encoding) + { + return tsToken.GetEncoded(encoding); + } + + // perhaps this should be done using an interface on the ASN.1 classes... + private class CertID + { + private EssCertID certID; + private EssCertIDv2 certIDv2; + + internal CertID(EssCertID certID) + { + this.certID = certID; + this.certIDv2 = null; + } + + internal CertID(EssCertIDv2 certID) + { + this.certIDv2 = certID; + this.certID = null; + } + + public string GetHashAlgorithmName() + { + if (certID != null) + return "SHA-1"; + + if (NistObjectIdentifiers.IdSha256.Equals(certIDv2.HashAlgorithm.Algorithm)) + return "SHA-256"; + + return certIDv2.HashAlgorithm.Algorithm.Id; + } + + public AlgorithmIdentifier GetHashAlgorithm() + { + return (certID != null) + ? new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1) + : certIDv2.HashAlgorithm; + } + + public byte[] GetCertHash() + { + return certID != null + ? certID.GetCertHash() + : certIDv2.GetCertHash(); + } + + public IssuerSerial IssuerSerial + { + get + { + return certID != null + ? certID.IssuerSerial + : certIDv2.IssuerSerial; + } + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampToken.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampToken.cs.meta new file mode 100644 index 000000000..c198a6064 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampToken.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e001862fca691964183bd415e4c373b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampTokenGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampTokenGenerator.cs new file mode 100644 index 000000000..a0d7bdb01 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampTokenGenerator.cs @@ -0,0 +1,452 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ess; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Tsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Cms; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Date; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tsp +{ + public enum Resolution + { + R_SECONDS, R_TENTHS_OF_SECONDS, R_HUNDREDTHS_OF_SECONDS, R_MILLISECONDS + } + + public class TimeStampTokenGenerator + { + private int accuracySeconds = -1; + private int accuracyMillis = -1; + private int accuracyMicros = -1; + private bool ordering = false; + private GeneralName tsa = null; + private DerObjectIdentifier tsaPolicyOID; + + private IStore x509Certs; + private IStore x509Crls; + private IStore x509AttrCerts; + // TODO Port changes from bc-java + //private Dictionary<> otherRevoc = new Dictionary<>(); + private SignerInfoGenerator signerInfoGenerator; + IDigestFactory digestCalculator; + + private Resolution resolution = Resolution.R_SECONDS; + + public Resolution Resolution + { + get { return resolution; } + set { resolution = value; } + } + + /** + * basic creation - only the default attributes will be included here. + */ + public TimeStampTokenGenerator( + AsymmetricKeyParameter key, + X509Certificate cert, + string digestOID, + string tsaPolicyOID) + : this(key, cert, digestOID, tsaPolicyOID, null, null) + { + } + + public TimeStampTokenGenerator( + SignerInfoGenerator signerInfoGen, + IDigestFactory digestCalculator, + DerObjectIdentifier tsaPolicy, + bool isIssuerSerialIncluded) + { + this.signerInfoGenerator = signerInfoGen; + this.digestCalculator = digestCalculator; + this.tsaPolicyOID = tsaPolicy; + + if (signerInfoGenerator.certificate == null) + throw new ArgumentException("SignerInfoGenerator must have an associated certificate"); + + X509Certificate assocCert = signerInfoGenerator.certificate; + TspUtil.ValidateCertificate(assocCert); + + try + { + byte[] certEnc = assocCert.GetEncoded(); + + IStreamCalculator calculator = digestCalculator.CreateCalculator(); + + using (var stream = calculator.Stream) + { + stream.Write(certEnc, 0, certEnc.Length); + } + + if (((AlgorithmIdentifier)digestCalculator.AlgorithmDetails).Algorithm.Equals(OiwObjectIdentifiers.IdSha1)) + { + EssCertID essCertID = new EssCertID( + calculator.GetResult().Collect(), + isIssuerSerialIncluded ? + new IssuerSerial( + new GeneralNames( + new GeneralName(assocCert.IssuerDN)), + new DerInteger(assocCert.SerialNumber)) : null); + + this.signerInfoGenerator = signerInfoGen.NewBuilder() + .WithSignedAttributeGenerator(new TableGen(signerInfoGen, essCertID)) + .Build(signerInfoGen.contentSigner, signerInfoGen.certificate); + } + else + { + AlgorithmIdentifier digestAlgID = new AlgorithmIdentifier( + ((AlgorithmIdentifier)digestCalculator.AlgorithmDetails).Algorithm); + + EssCertIDv2 essCertID = new EssCertIDv2( + calculator.GetResult().Collect(), + isIssuerSerialIncluded ? + new IssuerSerial( + new GeneralNames( + new GeneralName(assocCert.IssuerDN)), + new DerInteger(assocCert.SerialNumber)) : null); + + this.signerInfoGenerator = signerInfoGen.NewBuilder() + .WithSignedAttributeGenerator(new TableGen2(signerInfoGen, essCertID)) + .Build(signerInfoGen.contentSigner, signerInfoGen.certificate); + } + } + catch (Exception ex) + { + throw new TspException("Exception processing certificate", ex); + } + } + + /** + * create with a signer with extra signed/unsigned attributes. + */ + public TimeStampTokenGenerator( + AsymmetricKeyParameter key, + X509Certificate cert, + string digestOID, + string tsaPolicyOID, + Asn1.Cms.AttributeTable signedAttr, + Asn1.Cms.AttributeTable unsignedAttr) : this( + makeInfoGenerator(key, cert, digestOID, signedAttr, unsignedAttr), + Asn1DigestFactory.Get(OiwObjectIdentifiers.IdSha1), + tsaPolicyOID != null ? new DerObjectIdentifier(tsaPolicyOID):null, false) + { + } + + internal static SignerInfoGenerator makeInfoGenerator( + AsymmetricKeyParameter key, + X509Certificate cert, + string digestOID, + Asn1.Cms.AttributeTable signedAttr, + Asn1.Cms.AttributeTable unsignedAttr) + { + TspUtil.ValidateCertificate(cert); + + // + // Add the ESSCertID attribute + // + IDictionary signedAttrs; + if (signedAttr != null) + { + signedAttrs = signedAttr.ToDictionary(); + } + else + { + signedAttrs = new Dictionary(); + } + + //try + //{ + // byte[] hash = DigestUtilities.CalculateDigest("SHA-1", cert.GetEncoded()); + + // EssCertID essCertid = new EssCertID(hash); + + // Asn1.Cms.Attribute attr = new Asn1.Cms.Attribute( + // PkcsObjectIdentifiers.IdAASigningCertificate, + // new DerSet(new SigningCertificate(essCertid))); + + // signedAttrs[attr.AttrType] = attr; + //} + //catch (CertificateEncodingException e) + //{ + // throw new TspException("Exception processing certificate.", e); + //} + //catch (SecurityUtilityException e) + //{ + // throw new TspException("Can't find a SHA-1 implementation.", e); + //} + + string digestName = CmsSignedHelper.Instance.GetDigestAlgName(digestOID); + string signatureName = digestName + "with" + CmsSignedHelper.Instance.GetEncryptionAlgName(CmsSignedHelper.Instance.GetEncOid(key, digestOID)); + + Asn1SignatureFactory sigfact = new Asn1SignatureFactory(signatureName, key); + return new SignerInfoGeneratorBuilder() + .WithSignedAttributeGenerator( + new DefaultSignedAttributeTableGenerator( + new Asn1.Cms.AttributeTable(signedAttrs))) + .WithUnsignedAttributeGenerator( + new SimpleAttributeTableGenerator(unsignedAttr)) + .Build(sigfact, cert); + } + + public void SetAttributeCertificates(IStore attributeCertificates) + { + this.x509AttrCerts = attributeCertificates; + } + + public void SetCertificates(IStore certificates) + { + this.x509Certs = certificates; + } + + public void SetCrls(IStore crls) + { + this.x509Crls = crls; + } + + public void SetAccuracySeconds( + int accuracySeconds) + { + this.accuracySeconds = accuracySeconds; + } + + public void SetAccuracyMillis( + int accuracyMillis) + { + this.accuracyMillis = accuracyMillis; + } + + public void SetAccuracyMicros( + int accuracyMicros) + { + this.accuracyMicros = accuracyMicros; + } + + public void SetOrdering( + bool ordering) + { + this.ordering = ordering; + } + + public void SetTsa( + GeneralName tsa) + { + this.tsa = tsa; + } + + //------------------------------------------------------------------------------ + + public TimeStampToken Generate( + TimeStampRequest request, + BigInteger serialNumber, + DateTime genTime) + { + return Generate(request, serialNumber, genTime, null); + } + + + public TimeStampToken Generate( + TimeStampRequest request, + BigInteger serialNumber, + DateTime genTime, X509Extensions additionalExtensions) + { + DerObjectIdentifier digestAlgOID = new DerObjectIdentifier(request.MessageImprintAlgOid); + + AlgorithmIdentifier algID = new AlgorithmIdentifier(digestAlgOID, DerNull.Instance); + MessageImprint messageImprint = new MessageImprint(algID, request.GetMessageImprintDigest()); + + Accuracy accuracy = null; + if (accuracySeconds > 0 || accuracyMillis > 0 || accuracyMicros > 0) + { + DerInteger seconds = null; + if (accuracySeconds > 0) + { + seconds = new DerInteger(accuracySeconds); + } + + DerInteger millis = null; + if (accuracyMillis > 0) + { + millis = new DerInteger(accuracyMillis); + } + + DerInteger micros = null; + if (accuracyMicros > 0) + { + micros = new DerInteger(accuracyMicros); + } + + accuracy = new Accuracy(seconds, millis, micros); + } + + DerBoolean derOrdering = null; + if (ordering) + { + derOrdering = DerBoolean.GetInstance(ordering); + } + + DerInteger nonce = null; + if (request.Nonce != null) + { + nonce = new DerInteger(request.Nonce); + } + + DerObjectIdentifier tsaPolicy = tsaPolicyOID; + if (request.ReqPolicy != null) + { + tsaPolicy = new DerObjectIdentifier(request.ReqPolicy); + } + + if (tsaPolicy == null) + { + throw new TspValidationException("request contains no policy", PkiFailureInfo.UnacceptedPolicy); + } + + X509Extensions respExtensions = request.Extensions; + if (additionalExtensions != null) + { + X509ExtensionsGenerator extGen = new X509ExtensionsGenerator(); + + if (respExtensions != null) + { + foreach(object oid in respExtensions.ExtensionOids) + { + DerObjectIdentifier id = DerObjectIdentifier.GetInstance(oid); + extGen.AddExtension(id, respExtensions.GetExtension(DerObjectIdentifier.GetInstance(id))); + } + } + + foreach (object oid in additionalExtensions.ExtensionOids) + { + DerObjectIdentifier id = DerObjectIdentifier.GetInstance(oid); + extGen.AddExtension(id, additionalExtensions.GetExtension(DerObjectIdentifier.GetInstance(id))); + + } + + respExtensions = extGen.Generate(); + } + + var timeStampTime = new Asn1GeneralizedTime(WithResolution(genTime, resolution)); + + TstInfo tstInfo = new TstInfo(tsaPolicy, messageImprint, + new DerInteger(serialNumber), timeStampTime, accuracy, + derOrdering, nonce, tsa, respExtensions); + + try + { + CmsSignedDataGenerator signedDataGenerator = new CmsSignedDataGenerator(); + + byte[] derEncodedTstInfo = tstInfo.GetDerEncoded(); + + if (request.CertReq) + { + signedDataGenerator.AddCertificates(x509Certs); + signedDataGenerator.AddAttributeCertificates(x509AttrCerts); + } + + signedDataGenerator.AddCrls(x509Crls); + + signedDataGenerator.AddSignerInfoGenerator(signerInfoGenerator); + + CmsSignedData signedData = signedDataGenerator.Generate( + PkcsObjectIdentifiers.IdCTTstInfo.Id, + new CmsProcessableByteArray(derEncodedTstInfo), + true); + + return new TimeStampToken(signedData); + } + catch (CmsException cmsEx) + { + throw new TspException("Error generating time-stamp token", cmsEx); + } + catch (IOException e) + { + throw new TspException("Exception encoding info", e); + } + //catch (InvalidAlgorithmParameterException e) + //{ + // throw new TspException("Exception handling CertStore CRLs", e); + //} + } + + private static DateTime WithResolution(DateTime dateTime, Resolution resolution) + { + switch (resolution) + { + case Resolution.R_SECONDS: + return DateTimeUtilities.WithPrecisionSecond(dateTime); + case Resolution.R_TENTHS_OF_SECONDS: + return DateTimeUtilities.WithPrecisionDecisecond(dateTime); + case Resolution.R_HUNDREDTHS_OF_SECONDS: + return DateTimeUtilities.WithPrecisionCentisecond(dateTime); + case Resolution.R_MILLISECONDS: + return DateTimeUtilities.WithPrecisionMillisecond(dateTime); + default: + throw new InvalidOperationException(); + } + } + + private class TableGen + : CmsAttributeTableGenerator + { + private readonly SignerInfoGenerator infoGen; + private readonly EssCertID essCertID; + + + public TableGen(SignerInfoGenerator infoGen, EssCertID essCertID) + { + this.infoGen = infoGen; + this.essCertID = essCertID; + } + + public Asn1.Cms.AttributeTable GetAttributes(IDictionary parameters) + { + Asn1.Cms.AttributeTable tab = infoGen.signedGen.GetAttributes(parameters); + if (tab[PkcsObjectIdentifiers.IdAASigningCertificate] == null) + { + return tab.Add(PkcsObjectIdentifiers.IdAASigningCertificate, new SigningCertificate(essCertID)); + } + return tab; + } + } + + private class TableGen2 + : CmsAttributeTableGenerator + { + private readonly SignerInfoGenerator infoGen; + private readonly EssCertIDv2 essCertID; + + + public TableGen2(SignerInfoGenerator infoGen, EssCertIDv2 essCertID) + { + this.infoGen = infoGen; + this.essCertID = essCertID; + } + + public Asn1.Cms.AttributeTable GetAttributes(IDictionary parameters) + { + Asn1.Cms.AttributeTable tab = infoGen.signedGen.GetAttributes(parameters); + if (tab[PkcsObjectIdentifiers.IdAASigningCertificateV2] == null) + { + return tab.Add(PkcsObjectIdentifiers.IdAASigningCertificateV2, new SigningCertificateV2(essCertID)); + } + return tab; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampTokenGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampTokenGenerator.cs.meta new file mode 100644 index 000000000..b2c1d5e89 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampTokenGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d1991286d37694478ba89a7c392c9bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampTokenInfo.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampTokenInfo.cs new file mode 100644 index 000000000..aa4cb5dfb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampTokenInfo.cs @@ -0,0 +1,128 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Tsp; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tsp +{ + public class TimeStampTokenInfo + { + private static TstInfo ParseTstInfo(byte[] tstInfoEncoding) + { + try + { + return TstInfo.GetInstance(tstInfoEncoding); + } + catch (Exception e) + { + throw new TspException("unable to parse TstInfo encoding: " + e.Message); + } + } + + private TstInfo tstInfo; + private DateTime genTime; + + public TimeStampTokenInfo(byte[] tstInfoEncoding) + : this(ParseTstInfo(tstInfoEncoding)) + { + } + + public TimeStampTokenInfo( + TstInfo tstInfo) + { + this.tstInfo = tstInfo; + + try + { + this.genTime = tstInfo.GenTime.ToDateTime(); + } + catch (Exception e) + { + throw new TspException("unable to parse genTime field: " + e.Message); + } + } + + public bool IsOrdered + { + get { return tstInfo.Ordering.IsTrue; } + } + + public Accuracy Accuracy + { + get { return tstInfo.Accuracy; } + } + + public DateTime GenTime + { + get { return genTime; } + } + + public GenTimeAccuracy GenTimeAccuracy + { + get + { + return this.Accuracy == null + ? null + : new GenTimeAccuracy(this.Accuracy); + } + } + + public string Policy + { + get { return tstInfo.Policy.Id; } + } + + public BigInteger SerialNumber + { + get { return tstInfo.SerialNumber.Value; } + } + + public GeneralName Tsa + { + get { return tstInfo.Tsa; } + } + + /** + * @return the nonce value, null if there isn't one. + */ + public BigInteger Nonce + { + get + { + return tstInfo.Nonce == null + ? null + : tstInfo.Nonce.Value; + } + } + + public AlgorithmIdentifier HashAlgorithm + { + get { return tstInfo.MessageImprint.HashAlgorithm; } + } + + public string MessageImprintAlgOid + { + get { return tstInfo.MessageImprint.HashAlgorithm.Algorithm.Id; } + } + + public byte[] GetMessageImprintDigest() + { + return tstInfo.MessageImprint.GetHashedMessage(); + } + + public byte[] GetEncoded() + { + return tstInfo.GetEncoded(); + } + + public TstInfo TstInfo + { + get { return tstInfo; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampTokenInfo.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampTokenInfo.cs.meta new file mode 100644 index 000000000..e5b6969e0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/tsp/TimeStampTokenInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb197672beb7bd749971431ab1bb00bf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util.meta new file mode 100644 index 000000000..d3cc9ad7c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ba5cad752407f8545a6d90f346edc648 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Arrays.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Arrays.cs new file mode 100644 index 000000000..da371d2d6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Arrays.cs @@ -0,0 +1,1015 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities +{ + /// General array utilities. + public static class Arrays + { + public static readonly byte[] EmptyBytes = new byte[0]; + public static readonly int[] EmptyInts = new int[0]; + + public static bool AreAllZeroes(byte[] buf, int off, int len) + { + uint bits = 0; + for (int i = 0; i < len; ++i) + { + bits |= buf[off + i]; + } + return bits == 0; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static bool AreAllZeroes(ReadOnlySpan buf) + { + uint bits = 0; + for (int i = 0; i < buf.Length; ++i) + { + bits |= buf[i]; + } + return bits == 0; + } +#endif + + public static bool AreEqual( + bool[] a, + bool[] b) + { + if (a == b) + return true; + + if (a == null || b == null) + return false; + + return HaveSameContents(a, b); + } + + public static bool AreEqual( + char[] a, + char[] b) + { + if (a == b) + return true; + + if (a == null || b == null) + return false; + + return HaveSameContents(a, b); + } + + /// + /// Are two arrays equal. + /// + /// Left side. + /// Right side. + /// True if equal. + public static bool AreEqual(byte[] a, byte[] b) + { + if (a == b) + return true; + + if (a == null || b == null) + return false; + + return HaveSameContents(a, b); + } + + public static bool AreEqual(byte[] a, int aFromIndex, int aToIndex, byte[] b, int bFromIndex, int bToIndex) + { + int aLength = aToIndex - aFromIndex; + int bLength = bToIndex - bFromIndex; + + if (aLength != bLength) + return false; + + for (int i = 0; i < aLength; ++i) + { + if (a[aFromIndex + i] != b[bFromIndex + i]) + return false; + } + + return true; + } + + /// + /// A constant time equals comparison - does not terminate early if + /// test will fail. + /// + /// first array + /// second array + /// true if arrays equal, false otherwise. + public static bool ConstantTimeAreEqual(byte[] a, byte[] b) + { + if (null == a || null == b) + return false; + if (a == b) + return true; + + int len = System.Math.Min(a.Length, b.Length); + int nonEqual = a.Length ^ b.Length; + for (int i = 0; i < len; ++i) + { + nonEqual |= (a[i] ^ b[i]); + } + for (int i = len; i < b.Length; ++i) + { + nonEqual |= (b[i] ^ ~b[i]); + } + return 0 == nonEqual; + } + + public static bool ConstantTimeAreEqual(int len, byte[] a, int aOff, byte[] b, int bOff) + { + if (null == a) + throw new ArgumentNullException("a"); + if (null == b) + throw new ArgumentNullException("b"); + if (len < 0) + throw new ArgumentException("cannot be negative", "len"); + if (aOff > (a.Length - len)) + throw new IndexOutOfRangeException("'aOff' value invalid for specified length"); + if (bOff > (b.Length - len)) + throw new IndexOutOfRangeException("'bOff' value invalid for specified length"); + + int d = 0; + for (int i = 0; i < len; ++i) + { + d |= a[aOff + i] ^ b[bOff + i]; + } + return 0 == d; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static bool ConstantTimeAreEqual(Span a, Span b) + { + if (a.Length != b.Length) + throw new ArgumentException("Spans to compare must have equal length"); + + int d = 0; + for (int i = 0, count = a.Length; i < count; ++i) + { + d |= a[i] ^ b[i]; + } + return 0 == d; + + } +#endif + + public static bool AreEqual( + int[] a, + int[] b) + { + if (a == b) + return true; + + if (a == null || b == null) + return false; + + return HaveSameContents(a, b); + } + + [CLSCompliant(false)] + public static bool AreEqual(uint[] a, uint[] b) + { + if (a == b) + return true; + + if (a == null || b == null) + return false; + + return HaveSameContents(a, b); + } + + public static bool AreEqual(long[] a, long[] b) + { + if (a == b) + return true; + + if (a == null || b == null) + return false; + + return HaveSameContents(a, b); + } + + [CLSCompliant(false)] + public static bool AreEqual(ulong[] a, ulong[] b) + { + if (a == b) + return true; + + if (a == null || b == null) + return false; + + return HaveSameContents(a, b); + } + + private static bool HaveSameContents( + bool[] a, + bool[] b) + { + int i = a.Length; + if (i != b.Length) + return false; + while (i != 0) + { + --i; + if (a[i] != b[i]) + return false; + } + return true; + } + + private static bool HaveSameContents( + char[] a, + char[] b) + { + int i = a.Length; + if (i != b.Length) + return false; + while (i != 0) + { + --i; + if (a[i] != b[i]) + return false; + } + return true; + } + + private static bool HaveSameContents( + byte[] a, + byte[] b) + { + int i = a.Length; + if (i != b.Length) + return false; + while (i != 0) + { + --i; + if (a[i] != b[i]) + return false; + } + return true; + } + + private static bool HaveSameContents( + int[] a, + int[] b) + { + int i = a.Length; + if (i != b.Length) + return false; + while (i != 0) + { + --i; + if (a[i] != b[i]) + return false; + } + return true; + } + + private static bool HaveSameContents(uint[] a, uint[] b) + { + int i = a.Length; + if (i != b.Length) + return false; + while (i != 0) + { + --i; + if (a[i] != b[i]) + return false; + } + return true; + } + + private static bool HaveSameContents(long[] a, long[] b) + { + int i = a.Length; + if (i != b.Length) + return false; + while (i != 0) + { + --i; + if (a[i] != b[i]) + return false; + } + return true; + } + + private static bool HaveSameContents(ulong[] a, ulong[] b) + { + int i = a.Length; + if (i != b.Length) + return false; + while (i != 0) + { + --i; + if (a[i] != b[i]) + return false; + } + return true; + } + + public static string ToString( + object[] a) + { + StringBuilder sb = new StringBuilder("["); + if (a.Length > 0) + { + sb.Append(a[0]); + for (int index = 1; index < a.Length; ++index) + { + sb.Append(", ").Append(a[index]); + } + } + sb.Append(']'); + return sb.ToString(); + } + + public static int GetHashCode(byte[] data) + { + if (data == null) + { + return 0; + } + + int i = data.Length; + int hc = i + 1; + + while (--i >= 0) + { + hc *= 257; + hc ^= data[i]; + } + + return hc; + } + + public static int GetHashCode(byte[] data, int off, int len) + { + if (data == null) + { + return 0; + } + + int i = len; + int hc = i + 1; + + while (--i >= 0) + { + hc *= 257; + hc ^= data[off + i]; + } + + return hc; + } + + public static int GetHashCode(int[] data) + { + if (data == null) + return 0; + + int i = data.Length; + int hc = i + 1; + + while (--i >= 0) + { + hc *= 257; + hc ^= data[i]; + } + + return hc; + } + + [CLSCompliant(false)] + public static int GetHashCode(ushort[] data) + { + if (data == null) + return 0; + + int i = data.Length; + int hc = i + 1; + + while (--i >= 0) + { + hc *= 257; + hc ^= data[i]; + } + + return hc; + } + + public static int GetHashCode(int[] data, int off, int len) + { + if (data == null) + return 0; + + int i = len; + int hc = i + 1; + + while (--i >= 0) + { + hc *= 257; + hc ^= data[off + i]; + } + + return hc; + } + + [CLSCompliant(false)] + public static int GetHashCode(uint[] data) + { + if (data == null) + return 0; + + int i = data.Length; + int hc = i + 1; + + while (--i >= 0) + { + hc *= 257; + hc ^= (int)data[i]; + } + + return hc; + } + + [CLSCompliant(false)] + public static int GetHashCode(uint[] data, int off, int len) + { + if (data == null) + return 0; + + int i = len; + int hc = i + 1; + + while (--i >= 0) + { + hc *= 257; + hc ^= (int)data[off + i]; + } + + return hc; + } + + [CLSCompliant(false)] + public static int GetHashCode(ulong[] data) + { + if (data == null) + return 0; + + int i = data.Length; + int hc = i + 1; + + while (--i >= 0) + { + ulong di = data[i]; + hc *= 257; + hc ^= (int)di; + hc *= 257; + hc ^= (int)(di >> 32); + } + + return hc; + } + + [CLSCompliant(false)] + public static int GetHashCode(ulong[] data, int off, int len) + { + if (data == null) + return 0; + + int i = len; + int hc = i + 1; + + while (--i >= 0) + { + ulong di = data[off + i]; + hc *= 257; + hc ^= (int)di; + hc *= 257; + hc ^= (int)(di >> 32); + } + + return hc; + } + + public static bool[] Clone(bool[] data) + { + return data == null ? null : (bool[])data.Clone(); + } + + public static byte[] Clone(byte[] data) + { + return data == null ? null : (byte[])data.Clone(); + } + + public static short[] Clone(short[] data) + { + return data == null ? null : (short[])data.Clone(); + } + + [CLSCompliant(false)] + public static ushort[] Clone(ushort[] data) + { + return data == null ? null : (ushort[])data.Clone(); + } + + public static int[] Clone(int[] data) + { + return data == null ? null : (int[])data.Clone(); + } + + [CLSCompliant(false)] + public static uint[] Clone(uint[] data) + { + return data == null ? null : (uint[])data.Clone(); + } + + public static long[] Clone(long[] data) + { + return data == null ? null : (long[])data.Clone(); + } + + [CLSCompliant(false)] + public static ulong[] Clone(ulong[] data) + { + return data == null ? null : (ulong[])data.Clone(); + } + + public static byte[] Clone(byte[] data, byte[] existing) + { + if (data == null) + return null; + if (existing == null || existing.Length != data.Length) + return Clone(data); + Array.Copy(data, 0, existing, 0, existing.Length); + return existing; + } + + [CLSCompliant(false)] + public static ulong[] Clone(ulong[] data, ulong[] existing) + { + if (data == null) + return null; + if (existing == null || existing.Length != data.Length) + return Clone(data); + Array.Copy(data, 0, existing, 0, existing.Length); + return existing; + } + + public static bool Contains(byte[] a, byte n) + { + for (int i = 0; i < a.Length; ++i) + { + if (a[i] == n) + return true; + } + return false; + } + + public static bool Contains(short[] a, short n) + { + for (int i = 0; i < a.Length; ++i) + { + if (a[i] == n) + return true; + } + return false; + } + + public static bool Contains(int[] a, int n) + { + for (int i = 0; i < a.Length; ++i) + { + if (a[i] == n) + return true; + } + return false; + } + + public static void Fill( + byte[] buf, + byte b) + { + int i = buf.Length; + while (i > 0) + { + buf[--i] = b; + } + } + + [CLSCompliant(false)] + public static void Fill( + ulong[] buf, + ulong b) + { + int i = buf.Length; + while (i > 0) + { + buf[--i] = b; + } + } + + public static void Fill(byte[] buf, int from, int to, byte b) + { + for (int i = from; i < to; ++i) + { + buf[i] = b; + } + } + + public static void Fill(T[] ts, T t) + { + for (int i = 0; i < ts.Length; ++i) + { + ts[i] = t; + } + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void Fill(Span ts, T t) + { + ts.Fill(t); + } +#endif + + public static byte[] CopyOf(byte[] data, int newLength) + { + byte[] tmp = new byte[newLength]; + Array.Copy(data, 0, tmp, 0, System.Math.Min(newLength, data.Length)); + return tmp; + } + + public static char[] CopyOf(char[] data, int newLength) + { + char[] tmp = new char[newLength]; + Array.Copy(data, 0, tmp, 0, System.Math.Min(newLength, data.Length)); + return tmp; + } + + public static int[] CopyOf(int[] data, int newLength) + { + int[] tmp = new int[newLength]; + Array.Copy(data, 0, tmp, 0, System.Math.Min(newLength, data.Length)); + return tmp; + } + + [CLSCompliant(false)] + public static uint[] CopyOf(uint[] data, int newLength) + { + uint[] tmp = new uint[newLength]; + Array.Copy(data, 0, tmp, 0, System.Math.Min(newLength, data.Length)); + return tmp; + } + + public static long[] CopyOf(long[] data, int newLength) + { + long[] tmp = new long[newLength]; + Array.Copy(data, 0, tmp, 0, System.Math.Min(newLength, data.Length)); + return tmp; + } + + public static BigInteger[] CopyOf(BigInteger[] data, int newLength) + { + BigInteger[] tmp = new BigInteger[newLength]; + Array.Copy(data, 0, tmp, 0, System.Math.Min(newLength, data.Length)); + return tmp; + } + + /** + * Make a copy of a range of bytes from the passed in data array. The range can + * extend beyond the end of the input array, in which case the return array will + * be padded with zeroes. + * + * @param data the array from which the data is to be copied. + * @param from the start index at which the copying should take place. + * @param to the final index of the range (exclusive). + * + * @return a new byte array containing the range given. + */ + public static byte[] CopyOfRange(byte[] data, int from, int to) + { + int newLength = GetLength(from, to); + byte[] tmp = new byte[newLength]; + Array.Copy(data, from, tmp, 0, System.Math.Min(newLength, data.Length - from)); + return tmp; + } + + public static int[] CopyOfRange(int[] data, int from, int to) + { + int newLength = GetLength(from, to); + int[] tmp = new int[newLength]; + Array.Copy(data, from, tmp, 0, System.Math.Min(newLength, data.Length - from)); + return tmp; + } + + public static long[] CopyOfRange(long[] data, int from, int to) + { + int newLength = GetLength(from, to); + long[] tmp = new long[newLength]; + Array.Copy(data, from, tmp, 0, System.Math.Min(newLength, data.Length - from)); + return tmp; + } + + public static BigInteger[] CopyOfRange(BigInteger[] data, int from, int to) + { + int newLength = GetLength(from, to); + BigInteger[] tmp = new BigInteger[newLength]; + Array.Copy(data, from, tmp, 0, System.Math.Min(newLength, data.Length - from)); + return tmp; + } + + private static int GetLength(int from, int to) + { + int newLength = to - from; + if (newLength < 0) + throw new ArgumentException(from + " > " + to); + return newLength; + } + + public static byte[] Append(byte[] a, byte b) + { + if (a == null) + return new byte[] { b }; + + int length = a.Length; + byte[] result = new byte[length + 1]; + Array.Copy(a, 0, result, 0, length); + result[length] = b; + return result; + } + + public static short[] Append(short[] a, short b) + { + if (a == null) + return new short[] { b }; + + int length = a.Length; + short[] result = new short[length + 1]; + Array.Copy(a, 0, result, 0, length); + result[length] = b; + return result; + } + + public static int[] Append(int[] a, int b) + { + if (a == null) + return new int[] { b }; + + int length = a.Length; + int[] result = new int[length + 1]; + Array.Copy(a, 0, result, 0, length); + result[length] = b; + return result; + } + + public static byte[] Concatenate(byte[] a, byte[] b) + { + if (a == null) + return Clone(b); + if (b == null) + return Clone(a); + + byte[] rv = new byte[a.Length + b.Length]; + Array.Copy(a, 0, rv, 0, a.Length); + Array.Copy(b, 0, rv, a.Length, b.Length); + return rv; + } + + [CLSCompliant(false)] + public static ushort[] Concatenate(ushort[] a, ushort[] b) + { + if (a == null) + return Clone(b); + if (b == null) + return Clone(a); + + ushort[] rv = new ushort[a.Length + b.Length]; + Array.Copy(a, 0, rv, 0, a.Length); + Array.Copy(b, 0, rv, a.Length, b.Length); + return rv; + } + + public static byte[] ConcatenateAll(params byte[][] vs) + { + byte[][] nonNull = new byte[vs.Length][]; + int count = 0; + int totalLength = 0; + + for (int i = 0; i < vs.Length; ++i) + { + byte[] v = vs[i]; + if (v != null) + { + nonNull[count++] = v; + totalLength += v.Length; + } + } + + byte[] result = new byte[totalLength]; + int pos = 0; + + for (int j = 0; j < count; ++j) + { + byte[] v = nonNull[j]; + Array.Copy(v, 0, result, pos, v.Length); + pos += v.Length; + } + + return result; + } + + public static int[] Concatenate(int[] a, int[] b) + { + if (a == null) + return Clone(b); + if (b == null) + return Clone(a); + + int[] rv = new int[a.Length + b.Length]; + Array.Copy(a, 0, rv, 0, a.Length); + Array.Copy(b, 0, rv, a.Length, b.Length); + return rv; + } + + [CLSCompliant(false)] + public static uint[] Concatenate(uint[] a, uint[] b) + { + if (a == null) + return Clone(b); + if (b == null) + return Clone(a); + + uint[] rv = new uint[a.Length + b.Length]; + Array.Copy(a, 0, rv, 0, a.Length); + Array.Copy(b, 0, rv, a.Length, b.Length); + return rv; + } + + public static byte[] Prepend(byte[] a, byte b) + { + if (a == null) + return new byte[] { b }; + + int length = a.Length; + byte[] result = new byte[length + 1]; + Array.Copy(a, 0, result, 1, length); + result[0] = b; + return result; + } + + public static short[] Prepend(short[] a, short b) + { + if (a == null) + return new short[] { b }; + + int length = a.Length; + short[] result = new short[length + 1]; + Array.Copy(a, 0, result, 1, length); + result[0] = b; + return result; + } + + public static int[] Prepend(int[] a, int b) + { + if (a == null) + return new int[] { b }; + + int length = a.Length; + int[] result = new int[length + 1]; + Array.Copy(a, 0, result, 1, length); + result[0] = b; + return result; + } + + public static T[] Prepend(T[] a, T b) + { + if (a == null) + return new T[1]{ b }; + + T[] result = new T[1 + a.Length]; + result[0] = b; + a.CopyTo(result, 1); + return result; + } + + public static byte[] Reverse(byte[] a) + { + if (a == null) + return null; + + int p1 = 0, p2 = a.Length; + byte[] result = new byte[p2]; + + while (--p2 >= 0) + { + result[p2] = a[p1++]; + } + + return result; + } + + public static int[] Reverse(int[] a) + { + if (a == null) + return null; + + int p1 = 0, p2 = a.Length; + int[] result = new int[p2]; + + while (--p2 >= 0) + { + result[p2] = a[p1++]; + } + + return result; + } + + public static T[] ReverseInPlace(T[] array) + { + if (null == array) + return null; + + Array.Reverse(array); + return array; + } + + public static void Clear(byte[] data) + { + if (null != data) + { + Array.Clear(data, 0, data.Length); + } + } + + public static void Clear(int[] data) + { + if (null != data) + { + Array.Clear(data, 0, data.Length); + } + } + + public static bool IsNullOrContainsNull(object[] array) + { + if (null == array) + return true; + + int count = array.Length; + for (int i = 0; i < count; ++i) + { + if (null == array[i]) + return true; + } + return false; + } + + public static bool IsNullOrEmpty(byte[] array) + { + return null == array || array.Length < 1; + } + + public static bool IsNullOrEmpty(object[] array) + { + return null == array || array.Length < 1; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + + public static byte[] Concatenate(ReadOnlySpan a, ReadOnlySpan b) + { + byte[] rv = new byte[a.Length + b.Length]; + a.CopyTo(rv); + b.CopyTo(rv.AsSpan(a.Length)); + return rv; + } + + public static byte[] Concatenate(ReadOnlySpan a, ReadOnlySpan b, ReadOnlySpan c) + { + byte[] rv = new byte[a.Length + b.Length + c.Length]; + a.CopyTo(rv); + b.CopyTo(rv.AsSpan(a.Length)); + c.CopyTo(rv.AsSpan(a.Length + b.Length)); + return rv; + } + + public static byte[] Concatenate(ReadOnlySpan a, ReadOnlySpan b, ReadOnlySpan c, + ReadOnlySpan d) + { + byte[] rv = new byte[a.Length + b.Length + c.Length + d.Length]; + a.CopyTo(rv); + b.CopyTo(rv.AsSpan(a.Length)); + c.CopyTo(rv.AsSpan(a.Length + b.Length)); + d.CopyTo(rv.AsSpan(a.Length + b.Length + c.Length)); + return rv; + } + +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Arrays.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Arrays.cs.meta new file mode 100644 index 000000000..0b64de1a2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Arrays.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5ba8c42c46160a54db30a3ddfae9ed76 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/BigIntegers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/BigIntegers.cs new file mode 100644 index 000000000..df260cd89 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/BigIntegers.cs @@ -0,0 +1,255 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities +{ + /** + * BigInteger utilities. + */ + public static class BigIntegers + { + public static readonly BigInteger Zero = BigInteger.Zero; + public static readonly BigInteger One = BigInteger.One; + + private const int MaxIterations = 1000; + + /** + * Return the passed in value as an unsigned byte array. + * + * @param value the value to be converted. + * @return a byte array without a leading zero byte if present in the signed encoding. + */ + public static byte[] AsUnsignedByteArray(BigInteger n) + { + return n.ToByteArrayUnsigned(); + } + + /** + * Return the passed in value as an unsigned byte array of the specified length, padded with + * leading zeros as necessary. + * @param length the fixed length of the result. + * @param n the value to be converted. + * @return a byte array padded to a fixed length with leading zeros. + */ + public static byte[] AsUnsignedByteArray(int length, BigInteger n) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int bytesLength = n.GetLengthofByteArrayUnsigned(); + + if (bytesLength > length) + throw new ArgumentException("standard length exceeded", nameof(n)); + + byte[] bytes = new byte[length]; + n.ToByteArrayUnsigned(bytes.AsSpan(length - bytesLength)); + return bytes; +#else + byte[] bytes = n.ToByteArrayUnsigned(); + int bytesLength = bytes.Length; + + if (bytesLength == length) + return bytes; + + if (bytesLength > length) + throw new ArgumentException("standard length exceeded", nameof(n)); + + byte[] tmp = new byte[length]; + Array.Copy(bytes, 0, tmp, length - bytesLength, bytesLength); + return tmp; +#endif + } + + /** + * Write the passed in value as unsigned bytes to the specified buffer range, padded with + * leading zeros as necessary. + * + * @param n + * the value to be converted. + * @param buf + * the buffer to which the value is written. + * @param off + * the start offset in array buf at which the data is written. + * @param len + * the fixed length of data written (possibly padded with leading zeros). + */ + public static void AsUnsignedByteArray(BigInteger n, byte[] buf, int off, int len) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + AsUnsignedByteArray(n, buf.AsSpan(off, len)); +#else + byte[] bytes = n.ToByteArrayUnsigned(); + int bytesLength = bytes.Length; + + if (bytesLength > len) + throw new ArgumentException("standard length exceeded", nameof(n)); + + int padLen = len - bytesLength; + Arrays.Fill(buf, off, off + padLen, 0); + Array.Copy(bytes, 0, buf, off + padLen, bytesLength); +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static void AsUnsignedByteArray(BigInteger n, Span buf) + { + int bytesLength = n.GetLengthofByteArrayUnsigned(); + + if (bytesLength > buf.Length) + throw new ArgumentException("standard length exceeded", nameof(n)); + + buf[..^bytesLength].Fill(0x00); + n.ToByteArrayUnsigned(buf[^bytesLength..]); + } +#endif + + /// + /// Creates a Random BigInteger from the secure random of a given bit length. + /// + /// + /// + /// + public static BigInteger CreateRandomBigInteger(int bitLength, SecureRandom secureRandom) + { + return new BigInteger(bitLength, secureRandom); + } + + /** + * Return a random BigInteger not less than 'min' and not greater than 'max' + * + * @param min the least value that may be generated + * @param max the greatest value that may be generated + * @param random the source of randomness + * @return a random BigInteger value in the range [min,max] + */ + public static BigInteger CreateRandomInRange( + BigInteger min, + BigInteger max, + // TODO Should have been just Random class + SecureRandom random) + { + int cmp = min.CompareTo(max); + if (cmp >= 0) + { + if (cmp > 0) + throw new ArgumentException("'min' may not be greater than 'max'"); + + return min; + } + + if (min.BitLength > max.BitLength / 2) + { + return CreateRandomInRange(BigInteger.Zero, max.Subtract(min), random).Add(min); + } + + for (int i = 0; i < MaxIterations; ++i) + { + BigInteger x = new BigInteger(max.BitLength, random); + if (x.CompareTo(min) >= 0 && x.CompareTo(max) <= 0) + { + return x; + } + } + + // fall back to a faster (restricted) method + return new BigInteger(max.Subtract(min).BitLength - 1, random).Add(min); + } + + public static BigInteger ModOddInverse(BigInteger M, BigInteger X) + { + if (!M.TestBit(0)) + throw new ArgumentException("must be odd", "M"); + if (M.SignValue != 1) + throw new ArithmeticException("BigInteger: modulus not positive"); + if (X.SignValue < 0 || X.CompareTo(M) >= 0) + { + X = X.Mod(M); + } + + int bits = M.BitLength; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + if (bits <= 2048) + { + int len = Nat.GetLengthForBits(bits); + Span m = stackalloc uint[len]; + Span x = stackalloc uint[len]; + Span z = stackalloc uint[len]; + Nat.FromBigInteger(bits, M, m); + Nat.FromBigInteger(bits, X, x); + if (0 == Mod.ModOddInverse(m, x, z)) + throw new ArithmeticException("BigInteger not invertible"); + return Nat.ToBigInteger(len, z); + } + else +#endif + { + uint[] m = Nat.FromBigInteger(bits, M); + uint[] x = Nat.FromBigInteger(bits, X); + int len = m.Length; + uint[] z = Nat.Create(len); + if (0 == Mod.ModOddInverse(m, x, z)) + throw new ArithmeticException("BigInteger not invertible"); + return Nat.ToBigInteger(len, z); + } + } + + public static BigInteger ModOddInverseVar(BigInteger M, BigInteger X) + { + if (!M.TestBit(0)) + throw new ArgumentException("must be odd", "M"); + if (M.SignValue != 1) + throw new ArithmeticException("BigInteger: modulus not positive"); + if (M.Equals(One)) + return Zero; + if (X.SignValue < 0 || X.CompareTo(M) >= 0) + { + X = X.Mod(M); + } + if (X.Equals(One)) + return One; + + int bits = M.BitLength; + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + if (bits <= 2048) + { + int len = Nat.GetLengthForBits(bits); + Span m = stackalloc uint[len]; + Span x = stackalloc uint[len]; + Span z = stackalloc uint[len]; + Nat.FromBigInteger(bits, M, m); + Nat.FromBigInteger(bits, X, x); + if (!Mod.ModOddInverseVar(m, x, z)) + throw new ArithmeticException("BigInteger not invertible"); + return Nat.ToBigInteger(len, z); + } + else +#endif + { + uint[] m = Nat.FromBigInteger(bits, M); + uint[] x = Nat.FromBigInteger(bits, X); + int len = m.Length; + uint[] z = Nat.Create(len); + if (!Mod.ModOddInverseVar(m, x, z)) + throw new ArithmeticException("BigInteger not invertible"); + return Nat.ToBigInteger(len, z); + } + } + + public static int GetByteLength(BigInteger n) + { + return n.GetLengthofByteArray(); + } + + public static int GetUnsignedByteLength(BigInteger n) + { + return n.GetLengthofByteArrayUnsigned(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/BigIntegers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/BigIntegers.cs.meta new file mode 100644 index 000000000..54f519bb0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/BigIntegers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ebdb832f8f30d6c44a1a40e88b4f3b17 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Bytes.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Bytes.cs new file mode 100644 index 000000000..2515884d1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Bytes.cs @@ -0,0 +1,14 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities +{ + public static class Bytes + { + public const int NumBits = 8; + public const int NumBytes = 1; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Bytes.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Bytes.cs.meta new file mode 100644 index 000000000..01327d456 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Bytes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b97fb38c4abab044aa82f618c5a2bca4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Enums.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Enums.cs new file mode 100644 index 000000000..96d4188c4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Enums.cs @@ -0,0 +1,50 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Date; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities +{ + internal static class Enums + { + internal static TEnum GetEnumValue(string s) + where TEnum : struct, Enum + { + // We only want to parse single named constants + if (s.Length > 0 && char.IsLetter(s[0]) && s.IndexOf(',') < 0) + { + s = s.Replace('-', '_'); + s = s.Replace('/', '_'); + +#if NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER || UNITY_2021_2_OR_NEWER + return Enum.Parse(s, false); +#else + return (TEnum)Enum.Parse(typeof(TEnum), s, false); +#endif + } + + throw new ArgumentException(); + } + + internal static TEnum[] GetEnumValues() + where TEnum : struct, Enum + { +#if NET5_0_OR_GREATER + return Enum.GetValues(); +#else + return (TEnum[])Enum.GetValues(typeof(TEnum)); +#endif + } + + internal static TEnum GetArbitraryValue() + where TEnum : struct, Enum + { + TEnum[] values = GetEnumValues(); + int pos = (int)(DateTimeUtilities.CurrentUnixMs() & int.MaxValue) % values.Length; + return values[pos]; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Enums.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Enums.cs.meta new file mode 100644 index 000000000..f2aea4f3d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Enums.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5bc960ec18e889148ae2e52c6be70ec4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/IEncodable.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/IEncodable.cs new file mode 100644 index 000000000..625f697cb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/IEncodable.cs @@ -0,0 +1,16 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities +{ + public interface IEncodable + { + /// Return a byte array representing the implementing object. + /// An encoding of this object as a byte array. + /// + byte[] GetEncoded(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/IEncodable.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/IEncodable.cs.meta new file mode 100644 index 000000000..db4d0d732 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/IEncodable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 361d48ffae4de8140b1af6bbeb70bb80 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/IMemoable.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/IMemoable.cs new file mode 100644 index 000000000..6fd47e04e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/IMemoable.cs @@ -0,0 +1,33 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities +{ + public interface IMemoable + { + /// + /// Produce a copy of this object with its configuration and in its current state. + /// + /// + /// The returned object may be used simply to store the state, or may be used as a similar object + /// starting from the copied state. + /// + IMemoable Copy(); + + /// + /// Restore a copied object state into this object. + /// + /// + /// Implementations of this method should try to avoid or minimise memory allocation to perform the reset. + /// + /// an object originally {@link #copy() copied} from an object of the same type as this instance. + /// if the provided object is not of the correct type. + /// if the other parameter is in some other way invalid. + void Reset(IMemoable other); + } + +} + +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/IMemoable.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/IMemoable.cs.meta new file mode 100644 index 000000000..240b1f35b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/IMemoable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5094da18f6285e498789845689aac6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Integers.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Integers.cs new file mode 100644 index 000000000..79ee53cb2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Integers.cs @@ -0,0 +1,162 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ +using System.Buffers.Binary; +#endif +#if NETCOREAPP3_0_OR_GREATER +using System.Numerics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities +{ + public static class Integers + { + public const int NumBits = 32; + public const int NumBytes = 4; + + private static readonly byte[] DeBruijnTZ = { + 0x1F, 0x00, 0x1B, 0x01, 0x1C, 0x0D, 0x17, 0x02, 0x1D, 0x15, 0x13, 0x0E, 0x18, 0x10, 0x03, 0x07, + 0x1E, 0x1A, 0x0C, 0x16, 0x14, 0x12, 0x0F, 0x06, 0x19, 0x0B, 0x11, 0x05, 0x0A, 0x04, 0x09, 0x08 }; + + public static int HighestOneBit(int i) + { + return (int)HighestOneBit((uint)i); + } + + [CLSCompliant(false)] + public static uint HighestOneBit(uint i) + { + i |= i >> 1; + i |= i >> 2; + i |= i >> 4; + i |= i >> 8; + i |= i >> 16; + return i - (i >> 1); + } + + public static int LowestOneBit(int i) + { + return i & -i; + } + + [CLSCompliant(false)] + public static uint LowestOneBit(uint i) + { + return (uint)LowestOneBit((int)i); + } + + public static int NumberOfLeadingZeros(int i) + { +#if NETCOREAPP3_0_OR_GREATER + if (Lzcnt.IsSupported) + { + return (int)Lzcnt.LeadingZeroCount((uint)i); + } +#endif + + if (i <= 0) + return (~i >> (31 - 5)) & (1 << 5); + + uint u = (uint)i; + int n = 1; + if (0 == (u >> 16)) { n += 16; u <<= 16; } + if (0 == (u >> 24)) { n += 8; u <<= 8; } + if (0 == (u >> 28)) { n += 4; u <<= 4; } + if (0 == (u >> 30)) { n += 2; u <<= 2; } + n -= (int)(u >> 31); + return n; + } + + public static int NumberOfTrailingZeros(int i) + { +#if NETCOREAPP3_0_OR_GREATER + if (Bmi1.IsSupported) + { + return (int)Bmi1.TrailingZeroCount((uint)i); + } +#endif + + int n = DeBruijnTZ[(uint)((i & -i) * 0x0EF96A62) >> 27]; + int m = (((i & 0xFFFF) | (int)((uint)i >> 16)) - 1) >> 31; + return n - m; + } + + public static int Reverse(int i) + { + return (int)Reverse((uint)i); + } + + [CLSCompliant(false)] + public static uint Reverse(uint i) + { + i = Bits.BitPermuteStepSimple(i, 0x55555555U, 1); + i = Bits.BitPermuteStepSimple(i, 0x33333333U, 2); + i = Bits.BitPermuteStepSimple(i, 0x0F0F0F0FU, 4); + return ReverseBytes(i); + } + + public static int ReverseBytes(int i) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return BinaryPrimitives.ReverseEndianness(i); +#else + return (int)ReverseBytes((uint)i); +#endif + } + + [CLSCompliant(false)] + public static uint ReverseBytes(uint i) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return BinaryPrimitives.ReverseEndianness(i); +#else + return RotateLeft(i & 0xFF00FF00U, 8) | + RotateLeft(i & 0x00FF00FFU, 24); +#endif + } + + public static int RotateLeft(int i, int distance) + { +#if NETCOREAPP3_0_OR_GREATER + return (int)BitOperations.RotateLeft((uint)i, distance); +#else + return (i << distance) | (int)((uint)i >> -distance); +#endif + } + + [CLSCompliant(false)] + public static uint RotateLeft(uint i, int distance) + { +#if NETCOREAPP3_0_OR_GREATER + return BitOperations.RotateLeft(i, distance); +#else + return (i << distance) | (i >> -distance); +#endif + } + + public static int RotateRight(int i, int distance) + { +#if NETCOREAPP3_0_OR_GREATER + return (int)BitOperations.RotateRight((uint)i, distance); +#else + return (int)((uint)i >> distance) | (i << -distance); +#endif + } + + [CLSCompliant(false)] + public static uint RotateRight(uint i, int distance) + { +#if NETCOREAPP3_0_OR_GREATER + return BitOperations.RotateRight(i, distance); +#else + return (i >> distance) | (i << -distance); +#endif + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Integers.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Integers.cs.meta new file mode 100644 index 000000000..72b270d42 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Integers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3188e9987cc8be145a324b947c7e7475 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Longs.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Longs.cs new file mode 100644 index 000000000..10396b006 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Longs.cs @@ -0,0 +1,163 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ +using System.Buffers.Binary; +#endif +#if NETCOREAPP3_0_OR_GREATER +using System.Numerics; +using System.Runtime.Intrinsics.X86; +#endif + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Raw; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities +{ + public static class Longs + { + public const int NumBits = 64; + public const int NumBytes = 8; + + private static readonly byte[] DeBruijnTZ = { + 0x3F, 0x00, 0x01, 0x34, 0x02, 0x06, 0x35, 0x1A, 0x03, 0x25, 0x28, 0x07, 0x21, 0x36, 0x2F, 0x1B, + 0x3D, 0x04, 0x26, 0x2D, 0x2B, 0x29, 0x15, 0x08, 0x17, 0x22, 0x3A, 0x37, 0x30, 0x11, 0x1C, 0x0A, + 0x3E, 0x33, 0x05, 0x19, 0x24, 0x27, 0x20, 0x2E, 0x3C, 0x2C, 0x2A, 0x14, 0x16, 0x39, 0x10, 0x09, + 0x32, 0x18, 0x23, 0x1F, 0x3B, 0x13, 0x38, 0x0F, 0x31, 0x1E, 0x12, 0x0E, 0x1D, 0x0D, 0x0C, 0x0B }; + + public static long HighestOneBit(long i) + { + return (long)HighestOneBit((ulong)i); + } + + [CLSCompliant(false)] + public static ulong HighestOneBit(ulong i) + { + i |= i >> 1; + i |= i >> 2; + i |= i >> 4; + i |= i >> 8; + i |= i >> 16; + i |= i >> 32; + return i - (i >> 1); + } + + public static long LowestOneBit(long i) + { + return i & -i; + } + + [CLSCompliant(false)] + public static ulong LowestOneBit(ulong i) + { + return (ulong)LowestOneBit((long)i); + } + + public static int NumberOfLeadingZeros(long i) + { +#if NETCOREAPP3_0_OR_GREATER + if (Lzcnt.X64.IsSupported) + { + return (int)Lzcnt.X64.LeadingZeroCount((ulong)i); + } +#endif + + int x = (int)(i >> 32), n = 0; + if (x == 0) + { + n = 32; + x = (int)i; + } + return n + Integers.NumberOfLeadingZeros(x); + } + + public static int NumberOfTrailingZeros(long i) + { +#if NETCOREAPP3_0_OR_GREATER + if (Bmi1.X64.IsSupported) + { + return (int)Bmi1.X64.TrailingZeroCount((ulong)i); + } +#endif + + int n = DeBruijnTZ[(uint)((ulong)((i & -i) * 0x045FBAC7992A70DAL) >> 58)]; + long m = (((i & 0xFFFFFFFFL) | (long)((ulong)i >> 32)) - 1L) >> 63; + return n - (int)m; + } + + public static long Reverse(long i) + { + return (long)Reverse((ulong)i); + } + + [CLSCompliant(false)] + public static ulong Reverse(ulong i) + { + i = Bits.BitPermuteStepSimple(i, 0x5555555555555555UL, 1); + i = Bits.BitPermuteStepSimple(i, 0x3333333333333333UL, 2); + i = Bits.BitPermuteStepSimple(i, 0x0F0F0F0F0F0F0F0FUL, 4); + return ReverseBytes(i); + } + + public static long ReverseBytes(long i) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return BinaryPrimitives.ReverseEndianness(i); +#else + return (long)ReverseBytes((ulong)i); +#endif + } + + [CLSCompliant(false)] + public static ulong ReverseBytes(ulong i) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return BinaryPrimitives.ReverseEndianness(i); +#else + return RotateLeft(i & 0xFF000000FF000000UL, 8) | + RotateLeft(i & 0x00FF000000FF0000UL, 24) | + RotateLeft(i & 0x0000FF000000FF00UL, 40) | + RotateLeft(i & 0x000000FF000000FFUL, 56); +#endif + } + + public static long RotateLeft(long i, int distance) + { +#if NETCOREAPP3_0_OR_GREATER + return (long)BitOperations.RotateLeft((ulong)i, distance); +#else + return (i << distance) | (long)((ulong)i >> -distance); +#endif + } + + [CLSCompliant(false)] + public static ulong RotateLeft(ulong i, int distance) + { +#if NETCOREAPP3_0_OR_GREATER + return BitOperations.RotateLeft(i, distance); +#else + return (i << distance) | (i >> -distance); +#endif + } + + public static long RotateRight(long i, int distance) + { +#if NETCOREAPP3_0_OR_GREATER + return (long)BitOperations.RotateRight((ulong)i, distance); +#else + return (long)((ulong)i >> distance) | (i << -distance); +#endif + } + + [CLSCompliant(false)] + public static ulong RotateRight(ulong i, int distance) + { +#if NETCOREAPP3_0_OR_GREATER + return BitOperations.RotateRight(i, distance); +#else + return (i >> distance) | (i << -distance); +#endif + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Longs.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Longs.cs.meta new file mode 100644 index 000000000..ea4d09f32 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Longs.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3caeabba050d9394fa0dd0457df4fb0d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/MemoableResetException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/MemoableResetException.cs new file mode 100644 index 000000000..774450621 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/MemoableResetException.cs @@ -0,0 +1,42 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities +{ + /** + * Exception to be thrown on a failure to reset an object implementing Memoable. + *

    + * The exception extends InvalidCastException to enable users to have a single handling case, + * only introducing specific handling of this one if required. + *

    + */ + [Serializable] + public class MemoableResetException + : InvalidCastException + { + public MemoableResetException() + : base() + { + } + + public MemoableResetException(string message) + : base(message) + { + } + + public MemoableResetException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected MemoableResetException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} + +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/MemoableResetException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/MemoableResetException.cs.meta new file mode 100644 index 000000000..e3d860457 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/MemoableResetException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 20a8024aade27594aacfebde1c7c76f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Objects.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Objects.cs new file mode 100644 index 000000000..677182431 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Objects.cs @@ -0,0 +1,14 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities +{ + public static class Objects + { + public static int GetHashCode(object obj) + { + return null == obj ? 0 : obj.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Objects.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Objects.cs.meta new file mode 100644 index 000000000..f97b14a03 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Objects.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 81337102137f3814c94821e995ceb992 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Platform.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Platform.cs new file mode 100644 index 000000000..86da2a35c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Platform.cs @@ -0,0 +1,73 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Globalization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities +{ + internal static class Platform + { + private static readonly CompareInfo InvariantCompareInfo = CultureInfo.InvariantCulture.CompareInfo; + + internal static bool EqualsIgnoreCase(string a, string b) + { + return string.Equals(a, b, StringComparison.OrdinalIgnoreCase); + } + + internal static string GetEnvironmentVariable(string variable) + { + try + { + return Environment.GetEnvironmentVariable(variable); + } + catch (System.Security.SecurityException) + { + // We don't have the required permission to read this environment variable, + // which is fine, just act as if it's not set + return null; + } + } + + internal static int IndexOf(string source, char value) + { + return InvariantCompareInfo.IndexOf(source, value, CompareOptions.Ordinal); + } + + internal static int IndexOf(string source, string value) + { + return InvariantCompareInfo.IndexOf(source, value, CompareOptions.Ordinal); + } + + internal static int IndexOf(string source, char value, int startIndex) + { + return InvariantCompareInfo.IndexOf(source, value, startIndex, CompareOptions.Ordinal); + } + + internal static int IndexOf(string source, string value, int startIndex) + { + return InvariantCompareInfo.IndexOf(source, value, startIndex, CompareOptions.Ordinal); + } + + internal static int LastIndexOf(string source, string value) + { + return InvariantCompareInfo.LastIndexOf(source, value, CompareOptions.Ordinal); + } + + internal static bool StartsWith(string source, string prefix) + { + return InvariantCompareInfo.IsPrefix(source, prefix, CompareOptions.Ordinal); + } + + internal static bool EndsWith(string source, string suffix) + { + return InvariantCompareInfo.IsSuffix(source, suffix, CompareOptions.Ordinal); + } + + internal static string GetTypeName(object obj) + { + return obj.GetType().FullName; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Platform.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Platform.cs.meta new file mode 100644 index 000000000..8013f2b5c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Platform.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34ac2529ba9563b4b95ceece9c95095a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Shorts.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Shorts.cs new file mode 100644 index 000000000..be7b723bd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Shorts.cs @@ -0,0 +1,58 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ +using System.Buffers.Binary; +#endif + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities +{ + public static class Shorts + { + public const int NumBits = 16; + public const int NumBytes = 2; + + public static short ReverseBytes(short i) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return BinaryPrimitives.ReverseEndianness(i); +#else + return RotateLeft(i, 8); +#endif + } + + [CLSCompliant(false)] + public static ushort ReverseBytes(ushort i) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return BinaryPrimitives.ReverseEndianness(i); +#else + return RotateLeft(i, 8); +#endif + } + + public static short RotateLeft(short i, int distance) + { + return (short)RotateLeft((ushort)i, distance); + } + + [CLSCompliant(false)] + public static ushort RotateLeft(ushort i, int distance) + { + return (ushort)((i << distance) | (i >> (16 - distance))); + } + + public static short RotateRight(short i, int distance) + { + return (short)RotateRight((ushort)i, distance); + } + + [CLSCompliant(false)] + public static ushort RotateRight(ushort i, int distance) + { + return (ushort)((i >> distance) | (i << (16 - distance))); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Shorts.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Shorts.cs.meta new file mode 100644 index 000000000..f9f10c187 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Shorts.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 64f79d897b653fb48a890b7df96822bf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Spans.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Spans.cs new file mode 100644 index 000000000..21185186b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Spans.cs @@ -0,0 +1,46 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ +using System; +using System.Runtime.CompilerServices; + +//#nullable enable + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities +{ + internal static class Spans + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void CopyFrom(this Span output, ReadOnlySpan input) + { + input[..output.Length].CopyTo(output); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static Span FromNullable(T[]? array) + { + return array == null ? Span.Empty : array.AsSpan(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static Span FromNullable(T[]? array, int start) + { + return array == null ? Span.Empty : array.AsSpan(start); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static ReadOnlySpan FromNullableReadOnly(T[]? array) + { + return array == null ? Span.Empty : array.AsSpan(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static ReadOnlySpan FromNullableReadOnly(T[]? array, int start) + { + return array == null ? Span.Empty : array.AsSpan(start); + } + } +} +#endif +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Spans.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Spans.cs.meta new file mode 100644 index 000000000..c4fa399f7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Spans.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e1011a1c49304df47bc72fae41c46624 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Strings.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Strings.cs new file mode 100644 index 000000000..4814c16f8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Strings.cs @@ -0,0 +1,83 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities +{ + /// General string utilities. + public static class Strings + { + internal static bool IsOneOf(string s, params string[] candidates) + { + foreach (string candidate in candidates) + { + if (s == candidate) + return true; + } + return false; + } + + public static string FromByteArray(byte[] bs) + { + char[] cs = new char[bs.Length]; + for (int i = 0; i < cs.Length; ++i) + { + cs[i] = Convert.ToChar(bs[i]); + } + return new string(cs); + } + + public static byte[] ToByteArray(char[] cs) + { + byte[] bs = new byte[cs.Length]; + for (int i = 0; i < bs.Length; ++i) + { + bs[i] = Convert.ToByte(cs[i]); + } + return bs; + } + + public static byte[] ToByteArray(string s) + { + byte[] bs = new byte[s.Length]; + for (int i = 0; i < bs.Length; ++i) + { + bs[i] = Convert.ToByte(s[i]); + } + return bs; + } + + public static string FromAsciiByteArray(byte[] bytes) + { + return Encoding.ASCII.GetString(bytes); + } + + public static byte[] ToAsciiByteArray(char[] cs) + { + return Encoding.ASCII.GetBytes(cs); + } + + public static byte[] ToAsciiByteArray(string s) + { + return Encoding.ASCII.GetBytes(s); + } + + public static string FromUtf8ByteArray(byte[] bytes) + { + return Encoding.UTF8.GetString(bytes); + } + + public static byte[] ToUtf8ByteArray(char[] cs) + { + return Encoding.UTF8.GetBytes(cs); + } + + public static byte[] ToUtf8ByteArray(string s) + { + return Encoding.UTF8.GetBytes(s); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Strings.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Strings.cs.meta new file mode 100644 index 000000000..9c9bc239a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/Strings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1102d66cf36a07545b4ef549eb96e85e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2.meta new file mode 100644 index 000000000..28eff046e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 71a439503264c6c4ba4e2d3ebdd0fc1e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/BZip2Constants.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/BZip2Constants.cs new file mode 100644 index 000000000..fa1779e69 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/BZip2Constants.cs @@ -0,0 +1,51 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +/* + * This package is based on the work done by Keiron Liddle, Aftex Software + * to whom the Ant project is very grateful for his + * great code. + */ + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Bzip2 +{ + /** + * Base class for both the compress and decompress classes. + * Holds common arrays, and static data. + * + * @author Keiron Liddle + */ + public class BZip2Constants + { + public const int baseBlockSize = 100000; + public const int MAX_ALPHA_SIZE = 258; + public const int MAX_CODE_LEN = 20; + public const int MAX_CODE_LEN_GEN = 17; + public const int RUNA = 0; + public const int RUNB = 1; + public const int N_GROUPS = 6; + public const int G_SIZE = 50; + public const int N_ITERS = 4; + public const int MAX_SELECTORS = 2 + (900000 / G_SIZE); + public const int NUM_OVERSHOOT_BYTES = 20; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/BZip2Constants.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/BZip2Constants.cs.meta new file mode 100644 index 000000000..7f2f119b5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/BZip2Constants.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 51385589e08abc14c881532858ab77aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/CBZip2InputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/CBZip2InputStream.cs new file mode 100644 index 000000000..fa8dbb74b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/CBZip2InputStream.cs @@ -0,0 +1,813 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +/* + * This package is based on the work done by Keiron Liddle, Aftex Software + * to whom the Ant project is very grateful for his + * great code. + */ + +using System; +using System.Diagnostics; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Bzip2 +{ + /** + * An input stream that decompresses from the BZip2 format (with the file + * header chars) to be read as any other stream. + * + * @author Keiron Liddle + * + * NB: note this class has been modified to read the leading BZ from the + * start of the BZIP2 stream to make it compatible with other PGP programs. + */ + public class CBZip2InputStream + : BaseInputStream + { + /* + index of the last char in the block, so + the block size == last + 1. + */ + private int last; + + /* + index in zptr[] of original string after sorting. + */ + private int origPtr; + + /* + always: in the range 0 .. 9. + The current block size is 100000 * this number. + */ + private int blockSize100k; + + private int bsBuff; + private int bsLive; + private readonly CRC m_blockCrc = new CRC(); + + private int nInUse; + + private byte[] seqToUnseq = new byte[256]; + + private byte[] m_selectors = new byte[BZip2Constants.MAX_SELECTORS]; + + private int[] tt; + private byte[] ll8; + + /* + freq table collected to save a pass over the data + during decompression. + */ + private int[] unzftab = new int[256]; + + private int[][] limit = CreateIntArray(BZip2Constants.N_GROUPS, BZip2Constants.MAX_CODE_LEN + 1); + private int[][] basev = CreateIntArray(BZip2Constants.N_GROUPS, BZip2Constants.MAX_CODE_LEN + 1); + private int[][] perm = CreateIntArray(BZip2Constants.N_GROUPS, BZip2Constants.MAX_ALPHA_SIZE); + private int[] minLens = new int[BZip2Constants.N_GROUPS]; + + private Stream bsStream; + + private bool streamEnd = false; + + private int currentByte = -1; + + private const int RAND_PART_B_STATE = 1; + private const int RAND_PART_C_STATE = 2; + private const int NO_RAND_PART_B_STATE = 3; + private const int NO_RAND_PART_C_STATE = 4; + + private int currentState = 0; + + private int m_expectedBlockCrc, m_expectedStreamCrc, m_streamCrc; + + int i2, count, chPrev, ch2; + int i, tPos; + int rNToGo = 0; + int rTPos = 0; + int j2; + int z; + + public CBZip2InputStream(Stream zStream) + { + ll8 = null; + tt = null; + bsStream = zStream; + bsLive = 0; + bsBuff = 0; + + int magic1 = bsStream.ReadByte(); + int magic2 = bsStream.ReadByte(); + int version = bsStream.ReadByte(); + int level = bsStream.ReadByte(); + if (level < 0) + throw new EndOfStreamException(); + + if (magic1 != 'B' | magic2 != 'Z' | version != 'h' | level < '1' | level > '9') + throw new IOException("Invalid stream header"); + + blockSize100k = level - '0'; + + int n = BZip2Constants.baseBlockSize * blockSize100k; + ll8 = new byte[n]; + tt = new int[n]; + + m_streamCrc = 0; + + BeginBlock(); + } + + public override int Read(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + + /* + * TODO The base class implementation allows to return partial data if/when ReadByte throws. That would be + * be preferable here too (so don't override), but it would require that exceptions cause this instance to + * permanently fail, and that needs review. + */ + int pos = 0; + while (pos < count) + { + int b = ReadByte(); + if (b < 0) + break; + + buffer[offset + pos++] = (byte)b; + } + return pos; + } + + public override int ReadByte() + { + if (streamEnd) + return -1; + + int result = currentByte; + switch (currentState) + { + case RAND_PART_B_STATE: + SetupRandPartB(); + break; + case RAND_PART_C_STATE: + SetupRandPartC(); + break; + case NO_RAND_PART_B_STATE: + SetupNoRandPartB(); + break; + case NO_RAND_PART_C_STATE: + SetupNoRandPartC(); + break; + default: + throw new InvalidOperationException(); + } + return result; + } + + private void BeginBlock() + { + long magic48 = BsGetLong48(); + if (magic48 != 0x314159265359L) + { + if (magic48 != 0x177245385090L) + throw new IOException("Block header error"); + + m_expectedStreamCrc = BsGetInt32(); + if (m_expectedStreamCrc != m_streamCrc) + throw new IOException("Stream CRC error"); + + BsFinishedWithStream(); + streamEnd = true; + return; + } + + m_expectedBlockCrc = BsGetInt32(); + + bool blockRandomised = BsGetBit() == 1; + + GetAndMoveToFrontDecode(); + + m_blockCrc.Initialise(); + + int[] cftab = new int[257]; + { + int accum = 0; + cftab[0] = 0; + for (i = 0; i < 256; ++i) + { + accum += unzftab[i]; + cftab[i + 1] = accum; + } + if (accum != (last + 1)) + throw new InvalidOperationException(); + } + + for (i = 0; i <= last; i++) + { + byte ch = ll8[i]; + tt[cftab[ch]++] = i; + } + + tPos = tt[origPtr]; + + count = 0; + i2 = 0; + ch2 = 256; /* not a char and not EOF */ + + if (blockRandomised) + { + rNToGo = 0; + rTPos = 0; + SetupRandPartA(); + } + else + { + SetupNoRandPartA(); + } + } + + private void EndBlock() + { + int blockFinalCrc = m_blockCrc.GetFinal(); + if (m_expectedBlockCrc != blockFinalCrc) + throw new IOException("Block CRC error"); + + m_streamCrc = Integers.RotateLeft(m_streamCrc, 1) ^ blockFinalCrc; + } + + private void BsFinishedWithStream() + { + try + { + if (this.bsStream != null) + { + this.bsStream.Dispose(); + this.bsStream = null; + } + } + catch + { + //ignore + } + } + + private int BsGetBit() + { + if (bsLive == 0) + { + bsBuff = RequireByte(); + bsLive = 7; + return (int)((uint)bsBuff >> 7); + } + + --bsLive; + + return (bsBuff >> bsLive) & 1; + } + + private int BsGetBits(int n) + { + Debug.Assert(1 <= n && n <= 24); + + while (bsLive < n) + { + bsBuff = (bsBuff << 8) | RequireByte(); + bsLive += 8; + } + + bsLive -= n; + + return (bsBuff >> bsLive) & ((1 << n) - 1); + } + + private int BsGetBitsSmall(int n) + { + Debug.Assert(1 <= n && n <= 8); + + if (bsLive < n) + { + bsBuff = (bsBuff << 8) | RequireByte(); + bsLive += 8; + } + + bsLive -= n; + + return (bsBuff >> bsLive) & ((1 << n) - 1); + } + + private int BsGetInt32() + { + int u = BsGetBits(16) << 16; + return u | BsGetBits(16); + } + + private long BsGetLong48() + { + long u = (long)BsGetBits(24) << 24; + return u | (long)BsGetBits(24); + } + + private void HbCreateDecodeTables(int[] limit, int[] basev, int[] perm, byte[] length, int minLen, int maxLen, + int alphaSize) + { + Array.Clear(basev, 0, basev.Length); + Array.Clear(limit, 0, limit.Length); + + int pp = 0, baseVal = 0; + for (int i = minLen; i <= maxLen; i++) + { + for (int j = 0; j < alphaSize; j++) + { + if (length[j] == i) + { + perm[pp++] = j; + } + } + basev[i] = baseVal; + limit[i] = baseVal + pp; + baseVal += baseVal + pp; + } + } + + private int RecvDecodingTables() + { + int i, j; + + nInUse = 0; + + /* Receive the mapping table */ + int inUse16 = BsGetBits(16); + + for (i = 0; i < 16; ++i) + { + if ((inUse16 & (0x8000 >> i)) != 0) + { + int inUse = BsGetBits(16); + + int i16 = i * 16; + for (j = 0; j < 16; ++j) + { + if ((inUse & (0x8000 >> j)) != 0) + { + seqToUnseq[nInUse++] = (byte)(i16 + j); + } + } + } + } + + if (nInUse < 1) + throw new InvalidOperationException(); + + int alphaSize = nInUse + 2; + + /* Now the selectors */ + int nGroups = BsGetBitsSmall(3); + if (nGroups < 2 || nGroups > BZip2Constants.N_GROUPS) + throw new InvalidOperationException(); + + int nSelectors = BsGetBits(15); + if (nSelectors < 1) + throw new InvalidOperationException(); + + uint mtfGroups = 0x00543210U; + for (i = 0; i < nSelectors; i++) + { + int mtfSelector = 0; + while (BsGetBit() == 1) + { + if (++mtfSelector >= nGroups) + throw new InvalidOperationException(); + } + + // Ignore declared selectors in excess of the maximum usable number + if (i >= BZip2Constants.MAX_SELECTORS) + continue; + + // Undo the MTF value for the selector. + switch (mtfSelector) + { + case 0: + break; + case 1: + mtfGroups = (mtfGroups >> 4) & 0x00000FU | (mtfGroups << 4) & 0x0000F0U | mtfGroups & 0xFFFF00U; + break; + case 2: + mtfGroups = (mtfGroups >> 8) & 0x00000FU | (mtfGroups << 4) & 0x000FF0U | mtfGroups & 0xFFF000U; + break; + case 3: + mtfGroups = (mtfGroups >> 12) & 0x00000FU | (mtfGroups << 4) & 0x00FFF0U | mtfGroups & 0xFF0000U; + break; + case 4: + mtfGroups = (mtfGroups >> 16) & 0x00000FU | (mtfGroups << 4) & 0x0FFFF0U | mtfGroups & 0xF00000U; + break; + case 5: + mtfGroups = (mtfGroups >> 20) & 0x00000FU | (mtfGroups << 4) & 0xFFFFF0U; + break; + default: + throw new InvalidOperationException(); + } + + m_selectors[i] = (byte)(mtfGroups & 0xF); + } + + byte[] len_t = new byte[alphaSize]; + + /* Now the coding tables */ + for (int t = 0; t < nGroups; t++) + { + int maxLen = 0, minLen = 32; + int curr = BsGetBitsSmall(5); + if ((curr < 1) | (curr > BZip2Constants.MAX_CODE_LEN)) + throw new InvalidOperationException(); + + for (i = 0; i < alphaSize; i++) + { + int markerBit = BsGetBit(); + while (markerBit != 0) + { + int nextTwoBits = BsGetBitsSmall(2); + curr += 1 - (nextTwoBits & 2); + if ((curr < 1) | (curr > BZip2Constants.MAX_CODE_LEN)) + throw new InvalidOperationException(); + markerBit = nextTwoBits & 1; + } + + len_t[i] = (byte)curr; + maxLen = System.Math.Max(maxLen, curr); + minLen = System.Math.Min(minLen, curr); + } + + /* Create the Huffman decoding tables */ + HbCreateDecodeTables(limit[t], basev[t], perm[t], len_t, minLen, maxLen, alphaSize); + minLens[t] = minLen; + } + + return nSelectors; + } + + private void GetAndMoveToFrontDecode() + { + int i, j, nextSym; + + int limitLast = BZip2Constants.baseBlockSize * blockSize100k; + + origPtr = BsGetBits(24); + if (origPtr > 10 + limitLast) + throw new InvalidOperationException(); + + int nSelectors = RecvDecodingTables(); + + int alphaSize = nInUse + 2; + int EOB = nInUse + 1; + + /* + Setting up the unzftab entries here is not strictly + necessary, but it does save having to do it later + in a separate pass, and so saves a block's worth of + cache misses. + */ + Array.Clear(unzftab, 0, unzftab.Length); + + byte[] yy = new byte[nInUse]; + for (i = 0; i < nInUse; ++i) + { + yy[i] = seqToUnseq[i]; + } + + last = -1; + + int groupNo = 0; + int groupPos = BZip2Constants.G_SIZE - 1; + int groupSel = m_selectors[groupNo]; + int groupMinLen = minLens[groupSel]; + int[] groupLimits = limit[groupSel]; + int[] groupPerm = perm[groupSel]; + int[] groupBase = basev[groupSel]; + + { + int zn = groupMinLen; + int zvec = BsGetBits(groupMinLen); + while (zvec >= groupLimits[zn]) + { + if (++zn > BZip2Constants.MAX_CODE_LEN) + throw new InvalidOperationException(); + + zvec = (zvec << 1) | BsGetBit(); + } + int permIndex = zvec - groupBase[zn]; + if (permIndex >= alphaSize) + throw new InvalidOperationException(); + + nextSym = groupPerm[permIndex]; + } + + while (nextSym != EOB) + { + //if (nextSym == BZip2Constants.RUNA || nextSym == BZip2Constants.RUNB) + if (nextSym <= BZip2Constants.RUNB) + { + int n = 1, s = 0; + do + { + if (n > 1024 * 1024) + throw new InvalidOperationException(); + + s += n << nextSym; + n <<= 1; + + { + if (groupPos == 0) + { + if (++groupNo >= nSelectors) + throw new InvalidOperationException(); + + groupPos = BZip2Constants.G_SIZE; + groupSel = m_selectors[groupNo]; + groupMinLen = minLens[groupSel]; + groupLimits = limit[groupSel]; + groupPerm = perm[groupSel]; + groupBase = basev[groupSel]; + } + groupPos--; + + int zn = groupMinLen; + int zvec = BsGetBits(groupMinLen); + while (zvec >= groupLimits[zn]) + { + if (++zn > BZip2Constants.MAX_CODE_LEN) + throw new InvalidOperationException(); + + zvec = (zvec << 1) | BsGetBit(); + } + int permIndex = zvec - groupBase[zn]; + if (permIndex >= alphaSize) + throw new InvalidOperationException(); + + nextSym = groupPerm[permIndex]; + } + } + //while (nextSym == BZip2Constants.RUNA || nextSym == BZip2Constants.RUNB); + while (nextSym <= BZip2Constants.RUNB); + + byte ch = yy[0]; + unzftab[ch] += s; + + if (last >= limitLast - s) + throw new InvalidOperationException("Block overrun"); + + while (--s >= 0) + { + ll8[++last] = ch; + } + + continue; + } + else + { + if (++last >= limitLast) + throw new InvalidOperationException("Block overrun"); + + byte tmp = yy[nextSym - 1]; + unzftab[tmp]++; + ll8[last] = tmp; + + /* + * This loop is hammered during decompression, hence avoid + * native method call overhead of Array.Copy for very + * small ranges to copy. + */ + if (nextSym <= 16) + { + for (j = nextSym - 1; j > 0; --j) + { + yy[j] = yy[j - 1]; + } + } + else + { + Array.Copy(yy, 0, yy, 1, nextSym - 1); + } + + yy[0] = tmp; + + { + if (groupPos == 0) + { + if (++groupNo >= nSelectors) + throw new InvalidOperationException(); + + groupPos = BZip2Constants.G_SIZE; + groupSel = m_selectors[groupNo]; + groupMinLen = minLens[groupSel]; + groupLimits = limit[groupSel]; + groupPerm = perm[groupSel]; + groupBase = basev[groupSel]; + } + groupPos--; + + int zn = groupMinLen; + int zvec = BsGetBits(groupMinLen); + while (zvec >= groupLimits[zn]) + { + if (++zn > BZip2Constants.MAX_CODE_LEN) + throw new InvalidOperationException(); + + zvec = (zvec << 1) | BsGetBit(); + } + int permIndex = zvec - groupBase[zn]; + if (permIndex >= alphaSize) + throw new InvalidOperationException(); + + nextSym = groupPerm[permIndex]; + } + continue; + } + } + + if (origPtr > last) + throw new InvalidOperationException(); + + // Check unzftab entries are in range. + { + int nblock = last + 1; + int check = 0; + + for (i = 0; i <= 255; i++) + { + int t = unzftab[i]; + check |= t; + check |= nblock - t; + } + if (check < 0) + throw new InvalidOperationException(); + } + } + + private int RequireByte() + { + int b = bsStream.ReadByte(); + if (b < 0) + throw new EndOfStreamException(); + return b & 0xFF; + } + + private void SetupRandPartA() + { + if (i2 <= last) + { + chPrev = ch2; + ch2 = ll8[tPos]; + tPos = tt[tPos]; + if (rNToGo == 0) + { + rNToGo = CBZip2OutputStream.RNums[rTPos++]; + rTPos &= 0x1FF; + } + rNToGo--; + ch2 ^= rNToGo == 1 ? 1 : 0; + i2++; + + currentByte = ch2; + currentState = RAND_PART_B_STATE; + m_blockCrc.Update((byte)ch2); + } + else + { + EndBlock(); + BeginBlock(); + } + } + + private void SetupNoRandPartA() + { + if (i2 <= last) + { + chPrev = ch2; + ch2 = ll8[tPos]; + tPos = tt[tPos]; + i2++; + + currentByte = ch2; + currentState = NO_RAND_PART_B_STATE; + m_blockCrc.Update((byte)ch2); + } + else + { + EndBlock(); + BeginBlock(); + } + } + + private void SetupRandPartB() + { + if (ch2 != chPrev) + { + count = 1; + SetupRandPartA(); + } + else if (++count < 4) + { + SetupRandPartA(); + } + else + { + z = ll8[tPos]; + tPos = tt[tPos]; + if (rNToGo == 0) + { + rNToGo = CBZip2OutputStream.RNums[rTPos++]; + rTPos &= 0x1FF; + } + rNToGo--; + z ^= rNToGo == 1 ? 1 : 0; + j2 = 0; + currentState = RAND_PART_C_STATE; + SetupRandPartC(); + } + } + + private void SetupNoRandPartB() + { + if (ch2 != chPrev) + { + count = 1; + SetupNoRandPartA(); + } + else if (++count < 4) + { + SetupNoRandPartA(); + } + else + { + z = ll8[tPos]; + tPos = tt[tPos]; + currentState = NO_RAND_PART_C_STATE; + j2 = 0; + SetupNoRandPartC(); + } + } + + private void SetupRandPartC() + { + if (j2 < z) + { + currentByte = ch2; + m_blockCrc.Update((byte)ch2); + j2++; + } + else + { + i2++; + count = 0; + SetupRandPartA(); + } + } + + private void SetupNoRandPartC() + { + if (j2 < z) + { + currentByte = ch2; + m_blockCrc.Update((byte)ch2); + j2++; + } + else + { + i2++; + count = 0; + SetupNoRandPartA(); + } + } + + internal static int[][] CreateIntArray(int n1, int n2) + { + int[][] a = new int[n1][]; + for (int k = 0; k < n1; ++k) + { + a[k] = new int[n2]; + } + return a; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/CBZip2InputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/CBZip2InputStream.cs.meta new file mode 100644 index 000000000..93cecc877 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/CBZip2InputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7a4666f98f6a8d540ae1d0d2f61b9262 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/CBZip2OutputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/CBZip2OutputStream.cs new file mode 100644 index 000000000..d22ab55e4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/CBZip2OutputStream.cs @@ -0,0 +1,1623 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +/* + * This package is based on the work done by Keiron Liddle, Aftex Software + * to whom the Ant project is very grateful for his + * great code. + */ + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Bzip2 +{ + /** + * An output stream that compresses into the BZip2 format (with the file + * header chars) into another stream. + * + * @author Keiron Liddle + * + * TODO: Update to BZip2 1.0.1 + * NB: note this class has been modified to add a leading BZ to the + * start of the BZIP2 stream to make it compatible with other PGP programs. + */ + public class CBZip2OutputStream + : BaseOutputStream + { + protected const int SETMASK = 1 << 21; + protected const int CLEARMASK = ~SETMASK; + protected const int GREATER_ICOST = 15; + protected const int LESSER_ICOST = 0; + protected const int SMALL_THRESH = 20; + protected const int DEPTH_THRESH = 10; + + internal static readonly ushort[] RNums = { + 619, 720, 127, 481, 931, 816, 813, 233, 566, 247, 985, 724, 205, 454, 863, 491, 741, 242, 949, 214, 733, + 859, 335, 708, 621, 574, 73, 654, 730, 472, 419, 436, 278, 496, 867, 210, 399, 680, 480, 51, 878, 465, 811, + 169, 869, 675, 611, 697, 867, 561, 862, 687, 507, 283, 482, 129, 807, 591, 733, 623, 150, 238, 59, 379, 684, + 877, 625, 169, 643, 105, 170, 607, 520, 932, 727, 476, 693, 425, 174, 647, 73, 122, 335, 530, 442, 853, 695, + 249, 445, 515, 909, 545, 703, 919, 874, 474, 882, 500, 594, 612, 641, 801, 220, 162, 819, 984, 589, 513, + 495, 799, 161, 604, 958, 533, 221, 400, 386, 867, 600, 782, 382, 596, 414, 171, 516, 375, 682, 485, 911, + 276, 98, 553, 163, 354, 666, 933, 424, 341, 533, 870, 227, 730, 475, 186, 263, 647, 537, 686, 600, 224, 469, + 68, 770, 919, 190, 373, 294, 822, 808, 206, 184, 943, 795, 384, 383, 461, 404, 758, 839, 887, 715, 67, 618, + 276, 204, 918, 873, 777, 604, 560, 951, 160, 578, 722, 79, 804, 96, 409, 713, 940, 652, 934, 970, 447, 318, + 353, 859, 672, 112, 785, 645, 863, 803, 350, 139, 93, 354, 99, 820, 908, 609, 772, 154, 274, 580, 184, 79, + 626, 630, 742, 653, 282, 762, 623, 680, 81, 927, 626, 789, 125, 411, 521, 938, 300, 821, 78, 343, 175, 128, + 250, 170, 774, 972, 275, 999, 639, 495, 78, 352, 126, 857, 956, 358, 619, 580, 124, 737, 594, 701, 612, 669, + 112, 134, 694, 363, 992, 809, 743, 168, 974, 944, 375, 748, 52, 600, 747, 642, 182, 862, 81, 344, 805, 988, + 739, 511, 655, 814, 334, 249, 515, 897, 955, 664, 981, 649, 113, 974, 459, 893, 228, 433, 837, 553, 268, + 926, 240, 102, 654, 459, 51, 686, 754, 806, 760, 493, 403, 415, 394, 687, 700, 946, 670, 656, 610, 738, 392, + 760, 799, 887, 653, 978, 321, 576, 617, 626, 502, 894, 679, 243, 440, 680, 879, 194, 572, 640, 724, 926, 56, + 204, 700, 707, 151, 457, 449, 797, 195, 791, 558, 945, 679, 297, 59, 87, 824, 713, 663, 412, 693, 342, 606, + 134, 108, 571, 364, 631, 212, 174, 643, 304, 329, 343, 97, 430, 751, 497, 314, 983, 374, 822, 928, 140, 206, + 73, 263, 980, 736, 876, 478, 430, 305, 170, 514, 364, 692, 829, 82, 855, 953, 676, 246, 369, 970, 294, 750, + 807, 827, 150, 790, 288, 923, 804, 378, 215, 828, 592, 281, 565, 555, 710, 82, 896, 831, 547, 261, 524, 462, + 293, 465, 502, 56, 661, 821, 976, 991, 658, 869, 905, 758, 745, 193, 768, 550, 608, 933, 378, 286, 215, 979, + 792, 961, 61, 688, 793, 644, 986, 403, 106, 366, 905, 644, 372, 567, 466, 434, 645, 210, 389, 550, 919, 135, + 780, 773, 635, 389, 707, 100, 626, 958, 165, 504, 920, 176, 193, 713, 857, 265, 203, 50, 668, 108, 645, 990, + 626, 197, 510, 357, 358, 850, 858, 364, 936, 638 }; + + /* + * Knuth's increments seem to work better than Incerpi-Sedgewick here, possibly because the number of elements + * to sort is usually small, typically <= 20. + */ + private static readonly int[] Incs = { 1, 4, 13, 40, 121, 364, 1093, 3280, 9841, 29524, 88573, 265720, 797161, + 2391484 }; + + private bool finished; + + protected static void HbMakeCodeLengths(byte[] len, int[] freq, int alphaSize, int maxLen) + { + /* + Nodes and heap entries run from 1. Entry 0 + for both the heap and nodes is a sentinel. + */ + int[] heap = new int[BZip2Constants.MAX_ALPHA_SIZE + 2]; + int[] weight = new int[BZip2Constants.MAX_ALPHA_SIZE * 2]; + int[] parent = new int[BZip2Constants.MAX_ALPHA_SIZE * 2]; + + for (int i = 0; i < alphaSize; i++) + { + weight[i + 1] = (freq[i] == 0 ? 1 : freq[i]) << 8; + } + + while (true) + { + int nNodes = alphaSize; + int nHeap = 0; + + heap[0] = 0; + weight[0] = 0; + parent[0] = -2; + + for (int i = 1; i <= alphaSize; i++) + { + parent[i] = -1; + heap[++nHeap] = i; + { + int zz = nHeap; + int tmp = heap[zz]; + while (weight[tmp] < weight[heap[zz >> 1]]) + { + heap[zz] = heap[zz >> 1]; + zz >>= 1; + } + heap[zz] = tmp; + } + } + if (!(nHeap < (BZip2Constants.MAX_ALPHA_SIZE + 2))) + throw new InvalidOperationException(); + + while (nHeap > 1) + { + int n1 = heap[1]; + heap[1] = heap[nHeap--]; + { + int zz = 1; + int tmp = heap[zz]; + while (true) + { + int yy = zz << 1; + if (yy > nHeap) + break; + + if (yy < nHeap + && weight[heap[yy + 1]] < weight[heap[yy]]) + { + yy++; + } + + if (weight[tmp] < weight[heap[yy]]) + break; + + heap[zz] = heap[yy]; + zz = yy; + } + heap[zz] = tmp; + } + int n2 = heap[1]; + heap[1] = heap[nHeap--]; + { + int zz = 1; + int tmp = heap[zz]; + while (true) + { + int yy = zz << 1; + if (yy > nHeap) + break; + + if (yy < nHeap + && weight[heap[yy + 1]] < weight[heap[yy]]) + { + yy++; + } + + if (weight[tmp] < weight[heap[yy]]) + break; + + heap[zz] = heap[yy]; + zz = yy; + } + heap[zz] = tmp; + } + nNodes++; + parent[n1] = parent[n2] = nNodes; + + weight[nNodes] = (int)((uint)((weight[n1] & 0xffffff00) + + (weight[n2] & 0xffffff00)) + | (uint)(1 + (((weight[n1] & 0x000000ff) > + (weight[n2] & 0x000000ff)) ? + (weight[n1] & 0x000000ff) : + (weight[n2] & 0x000000ff)))); + + parent[nNodes] = -1; + heap[++nHeap] = nNodes; + { + int zz = nHeap; + int tmp = heap[zz]; + while (weight[tmp] < weight[heap[zz >> 1]]) + { + heap[zz] = heap[zz >> 1]; + zz >>= 1; + } + heap[zz] = tmp; + } + } + if (!(nNodes < (BZip2Constants.MAX_ALPHA_SIZE * 2))) + throw new InvalidOperationException(); + + //bool tooLong = false; + int tooLongBits = 0; + for (int i = 1; i <= alphaSize; i++) + { + int j = 0; + int k = i; + while (parent[k] >= 0) + { + k = parent[k]; + j++; + } + len[i - 1] = (byte)j; + //tooLong |= j > maxLen; + tooLongBits |= maxLen - j; + } + + //if (!tooLong) + if (tooLongBits >= 0) + break; + + for (int i = 1; i <= alphaSize; i++) + { + int j = weight[i] >> 8; + j = 1 + (j / 2); + weight[i] = j << 8; + } + } + } + + /* + * number of characters in the block + */ + int count; + + /* + index in zptr[] of original string after sorting. + */ + int origPtr; + + /* + always: in the range 0 .. 9. + The current block size is 100000 * this number. + */ + private readonly int blockSize100k; + private readonly int allowableBlockSize; + + bool blockRandomised; + private readonly IList blocksortStack = new List(); + + int bsBuff; + int bsLivePos; + private readonly CRC m_blockCrc = new CRC(); + + private bool[] inUse = new bool[256]; + private int nInUse; + + private byte[] m_selectors = new byte[BZip2Constants.MAX_SELECTORS]; + + private byte[] blockBytes; + private ushort[] quadrantShorts; + private int[] zptr; + private int[] szptr; + private int[] ftab; + + private int nMTF; + + private int[] mtfFreq = new int[BZip2Constants.MAX_ALPHA_SIZE]; + + /* + * Used when sorting. If too many long comparisons + * happen, we stop sorting, randomise the block + * slightly, and try again. + */ + private int workFactor; + private int workDone; + private int workLimit; + private bool firstAttempt; + + private int currentByte = -1; + private int runLength = 0; + private int m_streamCrc; + + public CBZip2OutputStream(Stream outStream) + : this(outStream, 9) + { + } + + public CBZip2OutputStream(Stream outStream, int blockSize) + { + blockBytes = null; + quadrantShorts = null; + zptr = null; + ftab = null; + + outStream.WriteByte((byte)'B'); + outStream.WriteByte((byte)'Z'); + + bsStream = outStream; + bsBuff = 0; + bsLivePos = 32; + + workFactor = 50; + if (blockSize > 9) + { + blockSize = 9; + } + else if (blockSize < 1) + { + blockSize = 1; + } + blockSize100k = blockSize; + + /* 20 is just a paranoia constant */ + allowableBlockSize = BZip2Constants.baseBlockSize * blockSize100k - 20; + + int n = BZip2Constants.baseBlockSize * blockSize100k; + blockBytes = new byte[(n + 1 + BZip2Constants.NUM_OVERSHOOT_BYTES)]; + quadrantShorts = new ushort[(n + 1 + BZip2Constants.NUM_OVERSHOOT_BYTES)]; + zptr = new int[n]; + ftab = new int[65537]; + + /* + The back end needs a place to store the MTF values + whilst it calculates the coding tables. We could + put them in the zptr array. However, these values + will fit in a short, so we overlay szptr at the + start of zptr, in the hope of reducing the number + of cache misses induced by the multiple traversals + of the MTF values when calculating coding tables. + Seems to improve compression speed by about 1%. + */ + // NOTE: We can't "overlay" in C#, so we just share zptr + szptr = zptr; + + // Write `magic' bytes h indicating file-format == huffmanised, followed by a digit indicating blockSize100k + outStream.WriteByte((byte)'h'); + outStream.WriteByte((byte)('0' + blockSize100k)); + + m_streamCrc = 0; + + InitBlock(); + } + + /** + * + * modified by Oliver Merkel, 010128 + * + */ + public override void WriteByte(byte value) + { + if (currentByte == value) + { + if (++runLength > 254) + { + WriteRun(); + currentByte = -1; + runLength = 0; + } + return; + } + + if (currentByte >= 0) + { + WriteRun(); + } + + currentByte = value; + runLength = 1; + } + + private void WriteRun() + { + if (count > allowableBlockSize) + { + EndBlock(); + InitBlock(); + } + + inUse[currentByte] = true; + + switch (runLength) + { + case 1: + blockBytes[++count] = (byte)currentByte; + m_blockCrc.Update((byte)currentByte); + break; + case 2: + blockBytes[++count] = (byte)currentByte; + blockBytes[++count] = (byte)currentByte; + m_blockCrc.Update((byte)currentByte); + m_blockCrc.Update((byte)currentByte); + break; + case 3: + blockBytes[++count] = (byte)currentByte; + blockBytes[++count] = (byte)currentByte; + blockBytes[++count] = (byte)currentByte; + m_blockCrc.Update((byte)currentByte); + m_blockCrc.Update((byte)currentByte); + m_blockCrc.Update((byte)currentByte); + break; + default: + blockBytes[++count] = (byte)currentByte; + blockBytes[++count] = (byte)currentByte; + blockBytes[++count] = (byte)currentByte; + blockBytes[++count] = (byte)currentByte; + blockBytes[++count] = (byte)(runLength - 4); + inUse[runLength - 4] = true; + m_blockCrc.UpdateRun((byte)currentByte, runLength); + break; + } + } + + bool closed = false; + + protected void Detach(bool disposing) + { + if (disposing) + { + if (!closed) + { + Finish(); + closed = true; + } + } + base.Dispose(disposing); + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (!closed) + { + Finish(); + closed = true; + this.bsStream.Dispose(); + } + } + base.Dispose(disposing); + } + + public void Finish() + { + if (finished) + return; + + if (runLength > 0) + { + WriteRun(); + } + currentByte = -1; + if (count > 0) + { + EndBlock(); + } + EndCompression(); + finished = true; + Flush(); + } + + public override void Flush() + { + bsStream.Flush(); + } + + private void InitBlock() + { + m_blockCrc.Initialise(); + count = 0; + + for (int i = 0; i < 256; i++) + { + inUse[i] = false; + } + } + + private void EndBlock() + { + int blockFinalCrc = m_blockCrc.GetFinal(); + m_streamCrc = Integers.RotateLeft(m_streamCrc, 1) ^ blockFinalCrc; + + /* sort the block and establish posn of original string */ + DoReversibleTransformation(); + + /* + A 6-byte block header, the value chosen arbitrarily + as 0x314159265359 :-). A 32 bit value does not really + give a strong enough guarantee that the value will not + appear by chance in the compressed datastream. Worst-case + probability of this event, for a 900k block, is about + 2.0e-3 for 32 bits, 1.0e-5 for 40 bits and 4.0e-8 for 48 bits. + For a compressed file of size 100Gb -- about 100000 blocks -- + only a 48-bit marker will do. NB: normal compression/ + decompression do *not* rely on these statistical properties. + They are only important when trying to recover blocks from + damaged files. + */ + BsPutLong48(0x314159265359L); + + /* Now the block's CRC, so it is in a known place. */ + BsPutInt32(blockFinalCrc); + + /* Now a single bit indicating randomisation. */ + BsPutBit(blockRandomised ? 1 : 0); + + /* Finally, block's contents proper. */ + MoveToFrontCodeAndSend(); + } + + private void EndCompression() + { + /* + Now another magic 48-bit number, 0x177245385090, to + indicate the end of the last block. (Sqrt(pi), if + you want to know. I did want to use e, but it contains + too much repetition -- 27 18 28 18 28 46 -- for me + to feel statistically comfortable. Call me paranoid.) + */ + BsPutLong48(0x177245385090L); + + BsPutInt32(m_streamCrc); + + BsFinishedWithStream(); + } + + private void HbAssignCodes(int[] code, byte[] length, int minLen, int maxLen, int alphaSize) + { + int vec = 0; + for (int n = minLen; n <= maxLen; n++) + { + for (int i = 0; i < alphaSize; i++) + { + if (length[i] == n) + { + code[i] = vec++; + } + } + vec <<= 1; + } + } + + private void BsFinishedWithStream() + { + if (bsLivePos < 32) + { + bsStream.WriteByte((byte)(bsBuff >> 24)); + bsBuff = 0; + bsLivePos = 32; + } + } + + private void BsPutBit(int v) + { + --bsLivePos; + bsBuff |= v << bsLivePos; + + if (bsLivePos <= 24) + { + bsStream.WriteByte((byte)(bsBuff >> 24)); + bsBuff <<= 8; + bsLivePos += 8; + } + } + + private void BsPutBits(int n, int v) + { + Debug.Assert(1 <= n && n <= 24); + + bsLivePos -= n; + bsBuff |= v << bsLivePos; + + while (bsLivePos <= 24) + { + bsStream.WriteByte((byte)(bsBuff >> 24)); + bsBuff <<= 8; + bsLivePos += 8; + } + } + + private void BsPutBitsSmall(int n, int v) + { + Debug.Assert(1 <= n && n <= 8); + + bsLivePos -= n; + bsBuff |= v << bsLivePos; + + if (bsLivePos <= 24) + { + bsStream.WriteByte((byte)(bsBuff >> 24)); + bsBuff <<= 8; + bsLivePos += 8; + } + } + + private void BsPutInt32(int u) + { + BsPutBits(16, (u >> 16) & 0xFFFF); + BsPutBits(16, u & 0xFFFF); + } + + private void BsPutLong48(long u) + { + BsPutBits(24, (int)(u >> 24) & 0xFFFFFF); + BsPutBits(24, (int)u & 0xFFFFFF); + } + + private void SendMtfValues() + { + + int v, t, i, j, bt, bc, iter; + + int alphaSize = nInUse + 2; + + /* Decide how many coding tables to use */ + if (nMTF <= 0) + throw new InvalidOperationException(); + + int nGroups; + if (nMTF < 200) + { + nGroups = 2; + } + else if (nMTF < 600) + { + nGroups = 3; + } + else if (nMTF < 1200) + { + nGroups = 4; + } + else if (nMTF < 2400) + { + nGroups = 5; + } + else + { + nGroups = 6; + } + + byte[][] len = CreateByteArray(nGroups, alphaSize); + for (t = 0; t < nGroups; t++) + { + Arrays.Fill(len[t], GREATER_ICOST); + } + + /* Generate an initial set of coding tables */ + { + int nPart = nGroups; + int remF = nMTF; + int ge = -1; + while (nPart > 0) + { + int gs = ge + 1; + int aFreq = 0, tFreq = remF / nPart; + while (aFreq < tFreq && ge < alphaSize - 1) + { + aFreq += mtfFreq[++ge]; + } + + if (ge > gs && nPart != nGroups && nPart != 1 + && ((nGroups - nPart) % 2 == 1)) + { + aFreq -= mtfFreq[ge--]; + } + + byte[] len_np = len[nPart - 1]; + for (v = 0; v < alphaSize; v++) + { + if (v >= gs && v <= ge) + { + len_np[v] = LESSER_ICOST; + } + else + { + len_np[v] = GREATER_ICOST; + } + } + + nPart--; + remF -= aFreq; + } + } + + int[][] rfreq = CBZip2InputStream.CreateIntArray(BZip2Constants.N_GROUPS, BZip2Constants.MAX_ALPHA_SIZE); + int[] fave = new int[BZip2Constants.N_GROUPS]; + short[] cost = new short[BZip2Constants.N_GROUPS]; + + // Iterate up to N_ITERS times to improve the tables. + int nSelectors = 0; + for (iter = 0; iter < BZip2Constants.N_ITERS; iter++) + { + for (t = 0; t < nGroups; t++) + { + fave[t] = 0; + + int[] rfreq_t = rfreq[t]; + for (v = 0; v < alphaSize; v++) + { + rfreq_t[v] = 0; + } + } + + nSelectors = 0; + int gs = 0; + while (gs < nMTF) + { + /* Set group start & end marks. */ + + /* + * Calculate the cost of this group as coded by each of the coding tables. + */ + + int ge = System.Math.Min(gs + BZip2Constants.G_SIZE - 1, nMTF - 1); + + if (nGroups == 6) + { + byte[] len_0 = len[0], len_1 = len[1], len_2 = len[2], len_3 = len[3], len_4 = len[4], len_5 = len[5]; + short cost0 = 0, cost1 = 0, cost2 = 0, cost3 = 0, cost4 = 0, cost5 = 0; + + for (i = gs; i <= ge; i++) + { + int icv = szptr[i]; + cost0 += len_0[icv]; + cost1 += len_1[icv]; + cost2 += len_2[icv]; + cost3 += len_3[icv]; + cost4 += len_4[icv]; + cost5 += len_5[icv]; + } + + cost[0] = cost0; + cost[1] = cost1; + cost[2] = cost2; + cost[3] = cost3; + cost[4] = cost4; + cost[5] = cost5; + } + else + { + for (t = 0; t < nGroups; t++) + { + cost[t] = 0; + } + + for (i = gs; i <= ge; i++) + { + int icv = szptr[i]; + for (t = 0; t < nGroups; t++) + { + cost[t] += len[t][icv]; + } + } + } + + /* + Find the coding table which is best for this group, + and record its identity in the selector table. + */ + bc = cost[0]; + bt = 0; + for (t = 1; t < nGroups; t++) + { + short cost_t = cost[t]; + if (cost_t < bc) + { + bc = cost_t; + bt = t; + } + } + fave[bt]++; + m_selectors[nSelectors] = (byte)bt; + nSelectors++; + + /* + Increment the symbol frequencies for the selected table. + */ + int[] rfreq_bt = rfreq[bt]; + for (i = gs; i <= ge; i++) + { + rfreq_bt[szptr[i]]++; + } + + gs = ge + 1; + } + + /* + Recompute the tables based on the accumulated frequencies. + */ + for (t = 0; t < nGroups; t++) + { + HbMakeCodeLengths(len[t], rfreq[t], alphaSize, BZip2Constants.MAX_CODE_LEN_GEN); + } + } + + if (nGroups >= 8 || nGroups > BZip2Constants.N_GROUPS) + throw new InvalidOperationException(); + if (nSelectors >= 32768 || nSelectors > BZip2Constants.MAX_SELECTORS) + throw new InvalidOperationException(); + + int[][] code = CBZip2InputStream.CreateIntArray(BZip2Constants.N_GROUPS, BZip2Constants.MAX_ALPHA_SIZE); + + /* Assign actual codes for the tables. */ + for (t = 0; t < nGroups; t++) + { + int maxLen = 0, minLen = 32; + byte[] len_t = len[t]; + for (i = 0; i < alphaSize; i++) + { + int lti = len_t[i]; + maxLen = System.Math.Max(maxLen, lti); + minLen = System.Math.Min(minLen, lti); + } + if (minLen < 1 | maxLen > BZip2Constants.MAX_CODE_LEN_GEN) + throw new InvalidOperationException(); + + HbAssignCodes(code[t], len_t, minLen, maxLen, alphaSize); + } + + /* Transmit the mapping table. */ + { + bool[] inUse16 = new bool[16]; + for (i = 0; i < 16; i++) + { + inUse16[i] = false; + int i16 = i * 16; + for (j = 0; j < 16; j++) + { + if (inUse[i16 + j]) + { + inUse16[i] = true; + break; + } + } + } + + for (i = 0; i < 16; i++) + { + BsPutBit(inUse16[i] ? 1 : 0); + } + + for (i = 0; i < 16; i++) + { + if (inUse16[i]) + { + int i16 = i * 16; + for (j = 0; j < 16; j++) + { + BsPutBit(inUse[i16 + j] ? 1 : 0); + } + } + } + } + + /* Now the selectors. */ + BsPutBitsSmall(3, nGroups); + BsPutBits(15, nSelectors); + { + int mtfSelectors = 0x00654321; + + for (i = 0; i < nSelectors; i++) + { + // Compute MTF value for the selector. + int ll_i = m_selectors[i]; + int bitPos = ll_i << 2; + int mtfSelector = (mtfSelectors >> bitPos) & 0xF; + + if (mtfSelector != 1) + { + int mtfIncMask = (0x00888888 - mtfSelectors + 0x00111111 * mtfSelector) & 0x00888888; + mtfSelectors = mtfSelectors - (mtfSelector << bitPos) + (mtfIncMask >> 3); + } + + BsPutBitsSmall(mtfSelector, (1 << mtfSelector) - 2); + } + } + + /* Now the coding tables. */ + for (t = 0; t < nGroups; t++) + { + byte[] len_t = len[t]; + int curr = len_t[0]; + BsPutBitsSmall(6, curr << 1); + for (i = 1; i < alphaSize; i++) + { + int lti = len_t[i]; + while (curr < lti) + { + BsPutBitsSmall(2, 2); + curr++; /* 10 */ + } + while (curr > lti) + { + BsPutBitsSmall(2, 3); + curr--; /* 11 */ + } + BsPutBit(0); + } + } + + /* And finally, the block data proper */ + { + int selCtr = 0; + int gs = 0; + while (gs < nMTF) + { + int ge = System.Math.Min(gs + BZip2Constants.G_SIZE - 1, nMTF - 1); + + int selector_selCtr = m_selectors[selCtr]; + byte[] len_selCtr = len[selector_selCtr]; + int[] code_selCtr = code[selector_selCtr]; + + for (i = gs; i <= ge; i++) + { + int sfmap_i = szptr[i]; + BsPutBits(len_selCtr[sfmap_i], code_selCtr[sfmap_i]); + } + + gs = ge + 1; + selCtr++; + } + if (selCtr != nSelectors) + throw new InvalidOperationException(); + } + } + + private void MoveToFrontCodeAndSend() + { + BsPutBits(24, origPtr); + GenerateMtfValues(); + SendMtfValues(); + } + + private Stream bsStream; + + private void SimpleSort(int lo, int hi, int d) + { + int i, j, h, v; + + int bigN = hi - lo + 1; + if (bigN < 2) + return; + + int hp = 0; + while (Incs[hp] < bigN) + { + hp++; + } + hp--; + + for (; hp >= 0; hp--) + { + h = Incs[hp]; + + i = lo + h; + while (i <= hi) + { + /* copy 1 */ + v = zptr[i]; + j = i; + while (FullGtU(zptr[j - h] + d, v + d)) + { + zptr[j] = zptr[j - h]; + j = j - h; + if (j <= (lo + h - 1)) + break; + } + zptr[j] = v; + + /* copy 2 */ + if (++i > hi) + break; + + v = zptr[i]; + j = i; + while (FullGtU(zptr[j - h] + d, v + d)) + { + zptr[j] = zptr[j - h]; + j = j - h; + if (j <= (lo + h - 1)) + break; + } + zptr[j] = v; + + /* copy 3 */ + if (++i > hi) + break; + + v = zptr[i]; + j = i; + while (FullGtU(zptr[j - h] + d, v + d)) + { + zptr[j] = zptr[j - h]; + j = j - h; + if (j <= (lo + h - 1)) + break; + } + zptr[j] = v; + i++; + + if (workDone > workLimit && firstAttempt) + return; + } + } + } + + private void Vswap(int p1, int p2, int n) + { + while (--n >= 0) + { + int t1 = zptr[p1], t2 = zptr[p2]; + zptr[p1++] = t2; + zptr[p2++] = t1; + } + } + + private int Med3(int a, int b, int c) + { + return a > b + ? (c < b ? b : c > a ? a : c) + : (c < a ? a : c > b ? b : c); + } + + internal class StackElem + { + internal int ll; + internal int hh; + internal int dd; + } + + private static void PushStackElem(IList stack, int stackCount, int ll, int hh, int dd) + { + StackElem stackElem; + if (stackCount < stack.Count) + { + stackElem = stack[stackCount]; + } + else + { + stackElem = new StackElem(); + stack.Add(stackElem); + } + + stackElem.ll = ll; + stackElem.hh = hh; + stackElem.dd = dd; + } + + private void QSort3(int loSt, int hiSt, int dSt) + { + int unLo, unHi, ltLo, gtHi, n, m; + + var stack = blocksortStack; + int stackCount = 0; + StackElem stackElem; + + int lo = loSt; + int hi = hiSt; + int d = dSt; + + for (;;) + { + if (hi - lo < SMALL_THRESH || d > DEPTH_THRESH) + { + SimpleSort(lo, hi, d); + if (stackCount < 1 || (workDone > workLimit && firstAttempt)) + return; + + stackElem = stack[--stackCount]; + lo = stackElem.ll; + hi = stackElem.hh; + d = stackElem.dd; + continue; + } + + int d1 = d + 1; + int med = Med3( + blockBytes[zptr[lo] + d1], + blockBytes[zptr[hi] + d1], + blockBytes[zptr[(lo + hi) >> 1] + d1]); + + unLo = ltLo = lo; + unHi = gtHi = hi; + + while (true) + { + while (unLo <= unHi) + { + int zUnLo = zptr[unLo]; + n = blockBytes[zUnLo + d1] - med; + if (n > 0) + break; + + if (n == 0) + { + zptr[unLo] = zptr[ltLo]; + zptr[ltLo++] = zUnLo; + } + unLo++; + } + while (unLo <= unHi) + { + int zUnHi = zptr[unHi]; + n = blockBytes[zUnHi + d1] - med; + if (n < 0) + break; + + if (n == 0) + { + zptr[unHi] = zptr[gtHi]; + zptr[gtHi--] = zUnHi; + } + unHi--; + } + if (unLo > unHi) + break; + + int temp = zptr[unLo]; + zptr[unLo++] = zptr[unHi]; + zptr[unHi--] = temp; + } + + if (gtHi < ltLo) + { + d = d1; + continue; + } + + n = System.Math.Min(ltLo - lo, unLo - ltLo); + Vswap(lo, unLo - n, n); + + m = System.Math.Min(hi - gtHi, gtHi - unHi); + Vswap(unLo, hi - m + 1, m); + + n = lo + (unLo - ltLo); + m = hi - (gtHi - unHi); + + PushStackElem(stack, stackCount++, lo, n - 1, d); + PushStackElem(stack, stackCount++, n, m, d1); + + lo = m + 1; + } + } + + private void MainSort() + { + int i, j, ss, sb; + int[] runningOrder = new int[256]; + int[] copy = new int[256]; + bool[] bigDone = new bool[256]; + int c1, c2; + + /* + In the various block-sized structures, live data runs + from 0 to last+NUM_OVERSHOOT_BYTES inclusive. First, + set up the overshoot area for block. + */ + for (i = 0; i < BZip2Constants.NUM_OVERSHOOT_BYTES; i++) + { + blockBytes[count + i + 1] = blockBytes[(i % count) + 1]; + } + for (i = 0; i <= count + BZip2Constants.NUM_OVERSHOOT_BYTES; i++) + { + quadrantShorts[i] = 0; + } + + blockBytes[0] = blockBytes[count]; + + if (count <= 4000) + { + /* + Use SimpleSort(), since the full sorting mechanism + has quite a large constant overhead. + */ + for (i = 0; i < count; i++) + { + zptr[i] = i; + } + firstAttempt = false; + workDone = workLimit = 0; + SimpleSort(0, count - 1, 0); + } + else + { + for (i = 0; i <= 255; i++) + { + bigDone[i] = false; + } + + for (i = 0; i <= 65536; i++) + { + ftab[i] = 0; + } + + c1 = blockBytes[0]; + for (i = 1; i <= count; i++) + { + c2 = blockBytes[i]; + ftab[(c1 << 8) + c2]++; + c1 = c2; + } + + for (i = 0; i < 65536; i++) + { + ftab[i + 1] += ftab[i]; + } + + c1 = blockBytes[1]; + for (i = 0; i < (count - 1); i++) + { + c2 = blockBytes[i + 2]; + j = (c1 << 8) + c2; + c1 = c2; + ftab[j]--; + zptr[ftab[j]] = i; + } + + j = ((int)blockBytes[count] << 8) + blockBytes[1]; + ftab[j]--; + zptr[ftab[j]] = count - 1; + + /* + Now ftab contains the first loc of every small bucket. + Calculate the running order, from smallest to largest + big bucket. + */ + + for (i = 0; i <= 255; i++) + { + runningOrder[i] = i; + } + + { + int h = 1; + do + { + h = 3 * h + 1; + } + while (h <= 256); + do + { + h = h / 3; + for (i = h; i <= 255; i++) + { + int vv = runningOrder[i]; + j = i; + while ((ftab[(runningOrder[j - h] + 1) << 8] - ftab[runningOrder[j - h] << 8]) + > (ftab[(vv + 1) << 8] - ftab[vv << 8])) + { + runningOrder[j] = runningOrder[j - h]; + j = j - h; + if (j < h) + break; + } + runningOrder[j] = vv; + } + } + while (h != 1); + } + + /* + The main sorting loop. + */ + for (i = 0; i <= 255; i++) + { + /* + Process big buckets, starting with the least full. + */ + ss = runningOrder[i]; + + /* + Complete the big bucket [ss] by quicksorting + any unsorted small buckets [ss, j]. Hopefully + previous pointer-scanning phases have already + completed many of the small buckets [ss, j], so + we don't have to sort them at all. + */ + for (j = 0; j <= 255; j++) + { + sb = (ss << 8) + j; + if ((ftab[sb] & SETMASK) != SETMASK) + { + int lo = ftab[sb] & CLEARMASK; + int hi = (ftab[sb + 1] & CLEARMASK) - 1; + if (hi > lo) + { + QSort3(lo, hi, 2); + if (workDone > workLimit && firstAttempt) + return; + } + ftab[sb] |= SETMASK; + } + } + + /* + The ss big bucket is now done. Record this fact, + and update the quadrant descriptors. Remember to + update quadrants in the overshoot area too, if + necessary. The "if (i < 255)" test merely skips + this updating for the last bucket processed, since + updating for the last bucket is pointless. + */ + bigDone[ss] = true; + + if (i < 255) + { + int bbStart = ftab[ss << 8] & CLEARMASK; + int bbSize = (ftab[(ss + 1) << 8] & CLEARMASK) - bbStart; + + int shifts = 0; + while ((bbSize >> shifts) > 65534) + { + shifts++; + } + + for (j = 0; j < bbSize; j++) + { + int a2update = zptr[bbStart + j] + 1; + ushort qVal = (ushort)(j >> shifts); + quadrantShorts[a2update] = qVal; + if (a2update <= BZip2Constants.NUM_OVERSHOOT_BYTES) + { + quadrantShorts[a2update + count] = qVal; + } + } + + if (!(((bbSize - 1) >> shifts) <= 65535)) + throw new InvalidOperationException(); + } + + /* + Now scan this big bucket so as to synthesise the + sorted order for small buckets [t, ss] for all t != ss. + */ + for (j = 0; j <= 255; j++) + { + copy[j] = ftab[(j << 8) + ss] & CLEARMASK; + } + + for (j = ftab[ss << 8] & CLEARMASK; + j < (ftab[(ss + 1) << 8] & CLEARMASK); j++) + { + int zptr_j = zptr[j]; + c1 = blockBytes[zptr_j]; + if (!bigDone[c1]) + { + zptr[copy[c1]] = (zptr_j == 0 ? count : zptr_j) - 1; + copy[c1]++; + } + } + + for (j = 0; j <= 255; j++) + { + ftab[(j << 8) + ss] |= SETMASK; + } + } + } + } + + private void RandomiseBlock() + { + for (int i = 0; i < 256; i++) + { + inUse[i] = false; + } + + int rNToGo = 0, rTPos = 0; + + for (int i = 1; i <= count; i++) + { + if (rNToGo == 0) + { + rNToGo = RNums[rTPos++]; + rTPos &= 0x1FF; + } + rNToGo--; + blockBytes[i] ^= (byte)(rNToGo == 1 ? 1 : 0); + + inUse[blockBytes[i]] = true; + } + } + + private void DoReversibleTransformation() + { + workLimit = workFactor * (count - 1); + workDone = 0; + blockRandomised = false; + firstAttempt = true; + + MainSort(); + + if (workDone > workLimit && firstAttempt) + { + RandomiseBlock(); + workLimit = workDone = 0; + blockRandomised = true; + firstAttempt = false; + MainSort(); + } + + origPtr = -1; + for (int i = 0; i < count; i++) + { + if (zptr[i] == 0) + { + origPtr = i; + break; + } + } + + if (origPtr == -1) + throw new InvalidOperationException(); + } + + private bool FullGtU(int i1, int i2) + { + int c1, c2; + + c1 = blockBytes[++i1]; + c2 = blockBytes[++i2]; + if (c1 != c2) + return c1 > c2; + + c1 = blockBytes[++i1]; + c2 = blockBytes[++i2]; + if (c1 != c2) + return c1 > c2; + + c1 = blockBytes[++i1]; + c2 = blockBytes[++i2]; + if (c1 != c2) + return c1 > c2; + + c1 = blockBytes[++i1]; + c2 = blockBytes[++i2]; + if (c1 != c2) + return c1 > c2; + + c1 = blockBytes[++i1]; + c2 = blockBytes[++i2]; + if (c1 != c2) + return c1 > c2; + + c1 = blockBytes[++i1]; + c2 = blockBytes[++i2]; + if (c1 != c2) + return c1 > c2; + + int k = count; + int s1, s2; + + do + { + c1 = blockBytes[++i1]; + c2 = blockBytes[++i2]; + if (c1 != c2) + return c1 > c2; + + s1 = quadrantShorts[i1]; + s2 = quadrantShorts[i2]; + if (s1 != s2) + return s1 > s2; + + c1 = blockBytes[++i1]; + c2 = blockBytes[++i2]; + if (c1 != c2) + return c1 > c2; + + s1 = quadrantShorts[i1]; + s2 = quadrantShorts[i2]; + if (s1 != s2) + return s1 > s2; + + c1 = blockBytes[++i1]; + c2 = blockBytes[++i2]; + if (c1 != c2) + return c1 > c2; + + s1 = quadrantShorts[i1]; + s2 = quadrantShorts[i2]; + if (s1 != s2) + return s1 > s2; + + c1 = blockBytes[++i1]; + c2 = blockBytes[++i2]; + if (c1 != c2) + return c1 > c2; + + s1 = quadrantShorts[i1]; + s2 = quadrantShorts[i2]; + if (s1 != s2) + return s1 > s2; + + if (i1 >= count) + { + i1 -= count; + } + if (i2 >= count) + { + i2 -= count; + } + + k -= 4; + workDone++; + } + while (k >= 0); + + return false; + } + + private void GenerateMtfValues() + { + int i; + + nInUse = 0; + + byte[] yy = new byte[256]; + for (i = 0; i < 256; i++) + { + if (inUse[i]) + { + yy[nInUse++] = (byte)i; + } + } + + int EOB = nInUse + 1; + + for (i = 0; i <= EOB; i++) + { + mtfFreq[i] = 0; + } + + int wr = 0, zPend = 0; + for (i = 0; i < count; i++) + { + byte blockByte = blockBytes[zptr[i]]; + + byte tmp = yy[0]; + if (blockByte == tmp) + { + zPend++; + continue; + } + + int sym = 1; + do + { + byte tmp2 = tmp; + tmp = yy[sym]; + yy[sym++] = tmp2; + } + while (blockByte != tmp); + yy[0] = tmp; + + while (zPend > 0) + { + // RUNA or RUNB + int run = --zPend & 1; + szptr[wr++] = run; + mtfFreq[run]++; + zPend >>= 1; + } + + szptr[wr++] = sym; + mtfFreq[sym]++; + } + + while (zPend > 0) + { + // RUNA or RUNB + int run = --zPend & 1; + szptr[wr++] = run; + mtfFreq[run]++; + zPend >>= 1; + } + + szptr[wr++] = EOB; + mtfFreq[EOB]++; + + nMTF = wr; + } + + internal static byte[][] CreateByteArray(int n1, int n2) + { + byte[][] a = new byte[n1][]; + for (int k = 0; k < n1; ++k) + { + a[k] = new byte[n2]; + } + return a; + } + } + + public class CBZip2OutputStreamLeaveOpen + : CBZip2OutputStream + { + public CBZip2OutputStreamLeaveOpen(Stream outStream) + : base(outStream) + { + } + + public CBZip2OutputStreamLeaveOpen(Stream outStream, int blockSize) + : base(outStream, blockSize) + { + } + + protected override void Dispose(bool disposing) + { + Detach(disposing); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/CBZip2OutputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/CBZip2OutputStream.cs.meta new file mode 100644 index 000000000..5f11c0ddb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/CBZip2OutputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf3dffeb38ff3b74983e5d723d21417c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/CRC.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/CRC.cs new file mode 100644 index 000000000..efbbfdccf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/CRC.cs @@ -0,0 +1,162 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +/* + * This package is based on the work done by Keiron Liddle), Aftex Software + * to whom the Ant project is very grateful for his + * great code. + */ + +using System.Diagnostics; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Bzip2 +{ + /** + * A simple class the hold and calculate the CRC for sanity checking + * of the data. + * + * @author Keiron Liddle + */ + internal class CRC + { + // Values are byte-reversed + private static readonly uint[] Crc32Table = { + 0x00000000, 0xB71DC104, 0x6E3B8209, 0xD926430D, + 0xDC760413, 0x6B6BC517, 0xB24D861A, 0x0550471E, + 0xB8ED0826, 0x0FF0C922, 0xD6D68A2F, 0x61CB4B2B, + 0x649B0C35, 0xD386CD31, 0x0AA08E3C, 0xBDBD4F38, + 0x70DB114C, 0xC7C6D048, 0x1EE09345, 0xA9FD5241, + 0xACAD155F, 0x1BB0D45B, 0xC2969756, 0x758B5652, + 0xC836196A, 0x7F2BD86E, 0xA60D9B63, 0x11105A67, + 0x14401D79, 0xA35DDC7D, 0x7A7B9F70, 0xCD665E74, + 0xE0B62398, 0x57ABE29C, 0x8E8DA191, 0x39906095, + 0x3CC0278B, 0x8BDDE68F, 0x52FBA582, 0xE5E66486, + 0x585B2BBE, 0xEF46EABA, 0x3660A9B7, 0x817D68B3, + 0x842D2FAD, 0x3330EEA9, 0xEA16ADA4, 0x5D0B6CA0, + 0x906D32D4, 0x2770F3D0, 0xFE56B0DD, 0x494B71D9, + 0x4C1B36C7, 0xFB06F7C3, 0x2220B4CE, 0x953D75CA, + 0x28803AF2, 0x9F9DFBF6, 0x46BBB8FB, 0xF1A679FF, + 0xF4F63EE1, 0x43EBFFE5, 0x9ACDBCE8, 0x2DD07DEC, + 0x77708634, 0xC06D4730, 0x194B043D, 0xAE56C539, + 0xAB068227, 0x1C1B4323, 0xC53D002E, 0x7220C12A, + 0xCF9D8E12, 0x78804F16, 0xA1A60C1B, 0x16BBCD1F, + 0x13EB8A01, 0xA4F64B05, 0x7DD00808, 0xCACDC90C, + 0x07AB9778, 0xB0B6567C, 0x69901571, 0xDE8DD475, + 0xDBDD936B, 0x6CC0526F, 0xB5E61162, 0x02FBD066, + 0xBF469F5E, 0x085B5E5A, 0xD17D1D57, 0x6660DC53, + 0x63309B4D, 0xD42D5A49, 0x0D0B1944, 0xBA16D840, + 0x97C6A5AC, 0x20DB64A8, 0xF9FD27A5, 0x4EE0E6A1, + 0x4BB0A1BF, 0xFCAD60BB, 0x258B23B6, 0x9296E2B2, + 0x2F2BAD8A, 0x98366C8E, 0x41102F83, 0xF60DEE87, + 0xF35DA999, 0x4440689D, 0x9D662B90, 0x2A7BEA94, + 0xE71DB4E0, 0x500075E4, 0x892636E9, 0x3E3BF7ED, + 0x3B6BB0F3, 0x8C7671F7, 0x555032FA, 0xE24DF3FE, + 0x5FF0BCC6, 0xE8ED7DC2, 0x31CB3ECF, 0x86D6FFCB, + 0x8386B8D5, 0x349B79D1, 0xEDBD3ADC, 0x5AA0FBD8, + 0xEEE00C69, 0x59FDCD6D, 0x80DB8E60, 0x37C64F64, + 0x3296087A, 0x858BC97E, 0x5CAD8A73, 0xEBB04B77, + 0x560D044F, 0xE110C54B, 0x38368646, 0x8F2B4742, + 0x8A7B005C, 0x3D66C158, 0xE4408255, 0x535D4351, + 0x9E3B1D25, 0x2926DC21, 0xF0009F2C, 0x471D5E28, + 0x424D1936, 0xF550D832, 0x2C769B3F, 0x9B6B5A3B, + 0x26D61503, 0x91CBD407, 0x48ED970A, 0xFFF0560E, + 0xFAA01110, 0x4DBDD014, 0x949B9319, 0x2386521D, + 0x0E562FF1, 0xB94BEEF5, 0x606DADF8, 0xD7706CFC, + 0xD2202BE2, 0x653DEAE6, 0xBC1BA9EB, 0x0B0668EF, + 0xB6BB27D7, 0x01A6E6D3, 0xD880A5DE, 0x6F9D64DA, + 0x6ACD23C4, 0xDDD0E2C0, 0x04F6A1CD, 0xB3EB60C9, + 0x7E8D3EBD, 0xC990FFB9, 0x10B6BCB4, 0xA7AB7DB0, + 0xA2FB3AAE, 0x15E6FBAA, 0xCCC0B8A7, 0x7BDD79A3, + 0xC660369B, 0x717DF79F, 0xA85BB492, 0x1F467596, + 0x1A163288, 0xAD0BF38C, 0x742DB081, 0xC3307185, + 0x99908A5D, 0x2E8D4B59, 0xF7AB0854, 0x40B6C950, + 0x45E68E4E, 0xF2FB4F4A, 0x2BDD0C47, 0x9CC0CD43, + 0x217D827B, 0x9660437F, 0x4F460072, 0xF85BC176, + 0xFD0B8668, 0x4A16476C, 0x93300461, 0x242DC565, + 0xE94B9B11, 0x5E565A15, 0x87701918, 0x306DD81C, + 0x353D9F02, 0x82205E06, 0x5B061D0B, 0xEC1BDC0F, + 0x51A69337, 0xE6BB5233, 0x3F9D113E, 0x8880D03A, + 0x8DD09724, 0x3ACD5620, 0xE3EB152D, 0x54F6D429, + 0x7926A9C5, 0xCE3B68C1, 0x171D2BCC, 0xA000EAC8, + 0xA550ADD6, 0x124D6CD2, 0xCB6B2FDF, 0x7C76EEDB, + 0xC1CBA1E3, 0x76D660E7, 0xAFF023EA, 0x18EDE2EE, + 0x1DBDA5F0, 0xAAA064F4, 0x738627F9, 0xC49BE6FD, + 0x09FDB889, 0xBEE0798D, 0x67C63A80, 0xD0DBFB84, + 0xD58BBC9A, 0x62967D9E, 0xBBB03E93, 0x0CADFF97, + 0xB110B0AF, 0x060D71AB, 0xDF2B32A6, 0x6836F3A2, + 0x6D66B4BC, 0xDA7B75B8, 0x035D36B5, 0xB440F7B1, + }; + + private uint m_value = 0U; + + internal void Initialise() + { + m_value = 0xFFFFFFFF; + } + + internal int GetFinal() + { + return (int)~Integers.ReverseBytes(m_value); + } + + internal void Update(byte inCh) + { + m_value = (m_value >> 8) ^ Crc32Table[(byte)(m_value ^ inCh)]; + } + + internal void UpdateRun(byte inCh, int runLength) + { + Debug.Assert(runLength >= 4); + + uint inCh2 = (uint)inCh << 8 | inCh; + uint inCh4 = inCh2 << 16 | inCh2; + + do + { + m_value ^= inCh4; + m_value = (m_value >> 8) ^ Crc32Table[(byte)m_value]; + m_value = (m_value >> 8) ^ Crc32Table[(byte)m_value]; + m_value = (m_value >> 8) ^ Crc32Table[(byte)m_value]; + m_value = (m_value >> 8) ^ Crc32Table[(byte)m_value]; + } + while ((runLength -= 4) >= 4); + + switch (runLength & 3) + { + case 0: + break; + case 1: + Update(inCh); + break; + case 2: + Update(inCh); + Update(inCh); + break; + case 3: + Update(inCh); + Update(inCh); + Update(inCh); + break; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/CRC.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/CRC.cs.meta new file mode 100644 index 000000000..23dde28c7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/bzip2/CRC.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8ef54f297138cd845a76621ec767e6a3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections.meta new file mode 100644 index 000000000..31f173d7c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0b0797c2616cd4f4bbc6332490d85557 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/CollectionUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/CollectionUtilities.cs new file mode 100644 index 000000000..e5c40eaad --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/CollectionUtilities.cs @@ -0,0 +1,108 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.Text; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections +{ + public abstract class CollectionUtilities + { + public static void CollectMatches(ICollection matches, ISelector selector, + IEnumerable> stores) + { + if (matches == null) + throw new ArgumentNullException(nameof(matches)); + if (stores == null) + return; + + foreach (var store in stores) + { + if (store == null) + continue; + + foreach (T match in store.EnumerateMatches(selector)) + { + matches.Add(match); + } + } + } + + public static IStore CreateStore(IEnumerable contents) + { + return new StoreImpl(contents); + } + + public static T GetValueOrKey(IDictionary d, T k) + { + return d.TryGetValue(k, out var v) ? v : k; + } + + public static V GetValueOrNull(IDictionary d, K k) + where V : class + { + return d.TryGetValue(k, out var v) ? v : null; + } + + public static IEnumerable Proxy(IEnumerable e) + { + return new EnumerableProxy(e); + } + + public static ICollection ReadOnly(ICollection c) + { + return new ReadOnlyCollectionProxy(c); + } + + public static IDictionary ReadOnly(IDictionary d) + { + return new ReadOnlyDictionaryProxy(d); + } + + public static IList ReadOnly(IList l) + { + return new ReadOnlyListProxy(l); + } + + public static ISet ReadOnly(ISet s) + { + return new ReadOnlySetProxy(s); + } + + public static bool Remove(IDictionary d, K k, out V v) + { + if (!d.TryGetValue(k, out v)) + return false; + + d.Remove(k); + return true; + } + + public static T RequireNext(IEnumerator e) + { + if (!e.MoveNext()) + throw new InvalidOperationException(); + + return e.Current; + } + + public static string ToString(IEnumerable c) + { + IEnumerator e = c.GetEnumerator(); + if (!e.MoveNext()) + return "[]"; + + StringBuilder sb = new StringBuilder("["); + sb.Append(e.Current); + while (e.MoveNext()) + { + sb.Append(", "); + sb.Append(e.Current); + } + sb.Append(']'); + return sb.ToString(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/CollectionUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/CollectionUtilities.cs.meta new file mode 100644 index 000000000..4df1ae19c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/CollectionUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d30cc7795a67b547845658234e4bed0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/EnumerableProxy.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/EnumerableProxy.cs new file mode 100644 index 000000000..5dcff8233 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/EnumerableProxy.cs @@ -0,0 +1,33 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections +{ + internal sealed class EnumerableProxy + : IEnumerable + { + private readonly IEnumerable m_target; + + internal EnumerableProxy(IEnumerable target) + { + if (target == null) + throw new ArgumentNullException(nameof(target)); + + m_target = target; + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return m_target.GetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + return m_target.GetEnumerator(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/EnumerableProxy.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/EnumerableProxy.cs.meta new file mode 100644 index 000000000..47339c882 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/EnumerableProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7473b1e62cdb7be449f354cbedddd3b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/HashSet.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/HashSet.cs new file mode 100644 index 000000000..0454b349a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/HashSet.cs @@ -0,0 +1,3 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/HashSet.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/HashSet.cs.meta new file mode 100644 index 000000000..afa5c3662 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/HashSet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be205234b98d61744b11c4318e87ac85 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ISelector.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ISelector.cs new file mode 100644 index 000000000..10e834841 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ISelector.cs @@ -0,0 +1,20 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections +{ + /// Interface for matching objects in an . + /// The contravariant type of selectable objects. + public interface ISelector + : ICloneable + { + /// Match the passed in object, returning true if it would be selected by this selector, false + /// otherwise. + /// The object to be matched. + /// true if the objects is matched by this selector, false otherwise. + bool Match(T candidate); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ISelector.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ISelector.cs.meta new file mode 100644 index 000000000..2c249f4f9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ISelector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac9912de47b494548bad468a96736ce4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/IStore.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/IStore.cs new file mode 100644 index 000000000..53453499b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/IStore.cs @@ -0,0 +1,19 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections +{ + /// A generic interface describing a simple store of objects. + /// The covariant type of stored objects. + public interface IStore + { + /// Enumerate the (possibly empty) collection of objects matched by the given selector. + /// The used to select matching objects. + /// An of the matching objects. + IEnumerable EnumerateMatches(ISelector selector); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/IStore.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/IStore.cs.meta new file mode 100644 index 000000000..2198ae0d6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/IStore.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d42fa3793a9494946985bb14484c7dcf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/LinkedDictionary.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/LinkedDictionary.cs new file mode 100644 index 000000000..0454b349a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/LinkedDictionary.cs @@ -0,0 +1,3 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/LinkedDictionary.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/LinkedDictionary.cs.meta new file mode 100644 index 000000000..ce18137dc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/LinkedDictionary.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5f1de8474468a840953808b84fc6f96 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlyCollection.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlyCollection.cs new file mode 100644 index 000000000..ed9393b0e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlyCollection.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections +{ + internal abstract class ReadOnlyCollection + : ICollection + { + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public bool IsReadOnly => true; + + public void Add(T item) => throw new NotSupportedException(); + public void Clear() => throw new NotSupportedException(); + public bool Remove(T item) => throw new NotSupportedException(); + + public abstract bool Contains(T item); + public abstract int Count { get; } + public abstract void CopyTo(T[] array, int arrayIndex); + public abstract IEnumerator GetEnumerator(); + } + + internal class ReadOnlyCollectionProxy + : ReadOnlyCollection + { + private readonly ICollection m_target; + + internal ReadOnlyCollectionProxy(ICollection target) + { + if (target == null) + throw new ArgumentNullException(nameof(target)); + + m_target = target; + } + + public override bool Contains(T item) => m_target.Contains(item); + public override int Count => m_target.Count; + public override void CopyTo(T[] array, int arrayIndex) => m_target.CopyTo(array, arrayIndex); + public override IEnumerator GetEnumerator() => m_target.GetEnumerator(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlyCollection.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlyCollection.cs.meta new file mode 100644 index 000000000..0da308e3c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlyCollection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a48902e1e6ee3a0448224787f2a690c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlyDictionary.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlyDictionary.cs new file mode 100644 index 000000000..c3fbb4651 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlyDictionary.cs @@ -0,0 +1,68 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections +{ + internal abstract class ReadOnlyDictionary + : IDictionary + { + public V this[K key] + { + get { return Lookup(key); } + set { throw new NotSupportedException(); } + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public bool IsReadOnly => true; + + public void Add(K key, V value) => throw new NotSupportedException(); + public void Add(KeyValuePair item) => throw new NotSupportedException(); + public void Clear() => throw new NotSupportedException(); + public bool Remove(K key) => throw new NotSupportedException(); + public bool Remove(KeyValuePair item) => throw new NotSupportedException(); + + public abstract bool Contains(KeyValuePair item); + public abstract bool ContainsKey(K key); + public abstract void CopyTo(KeyValuePair[] array, int arrayIndex); + public abstract int Count { get; } + public abstract IEnumerator> GetEnumerator(); + public abstract ICollection Keys { get; } + public abstract bool TryGetValue(K key, out V value); + public abstract ICollection Values { get; } + + protected abstract V Lookup(K key); + } + + internal class ReadOnlyDictionaryProxy + : ReadOnlyDictionary + { + private readonly IDictionary m_target; + + internal ReadOnlyDictionaryProxy(IDictionary target) + { + if (target == null) + throw new ArgumentNullException(nameof(target)); + + m_target = target; + } + + public override bool Contains(KeyValuePair item) => m_target.Contains(item); + public override bool ContainsKey(K key) => m_target.ContainsKey(key); + public override void CopyTo(KeyValuePair[] array, int arrayIndex) => m_target.CopyTo(array, arrayIndex); + public override int Count => m_target.Count; + public override IEnumerator> GetEnumerator() => m_target.GetEnumerator(); + public override ICollection Keys => new ReadOnlyCollectionProxy(m_target.Keys); + public override bool TryGetValue(K key, out V value) => m_target.TryGetValue(key, out value); + public override ICollection Values => new ReadOnlyCollectionProxy(m_target.Values); + + protected override V Lookup(K key) => m_target[key]; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlyDictionary.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlyDictionary.cs.meta new file mode 100644 index 000000000..9926c8924 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlyDictionary.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9a4f69721ea2e274f8e93b1fdaf45141 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlyList.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlyList.cs new file mode 100644 index 000000000..c946cba40 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlyList.cs @@ -0,0 +1,63 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections +{ + internal abstract class ReadOnlyList + : IList + { + public T this[int index] + { + get { return Lookup(index); } + set { throw new NotSupportedException(); } + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public bool IsReadOnly => true; + + public void Add(T item) => throw new NotSupportedException(); + public void Clear() => throw new NotSupportedException(); + public void Insert(int index, T item) => throw new NotSupportedException(); + public bool Remove(T item) => throw new NotSupportedException(); + public void RemoveAt(int index) => throw new NotSupportedException(); + + + public abstract bool Contains(T item); + public abstract void CopyTo(T[] array, int arrayIndex); + public abstract int Count { get; } + public abstract IEnumerator GetEnumerator(); + public abstract int IndexOf(T item); + + protected abstract T Lookup(int index); + } + + internal class ReadOnlyListProxy + : ReadOnlyList + { + private readonly IList m_target; + + internal ReadOnlyListProxy(IList target) + { + if (target == null) + throw new ArgumentNullException(nameof(target)); + + m_target = target; + } + + public override int Count => m_target.Count; + public override bool Contains(T item) => m_target.Contains(item); + public override void CopyTo(T[] array, int arrayIndex) => m_target.CopyTo(array, arrayIndex); + public override IEnumerator GetEnumerator() => m_target.GetEnumerator(); + public override int IndexOf(T item) => m_target.IndexOf(item); + + protected override T Lookup(int index) => m_target[index]; + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlyList.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlyList.cs.meta new file mode 100644 index 000000000..13867e190 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlyList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a7fb52e360eebb940b519bf3dab83424 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlySet.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlySet.cs new file mode 100644 index 000000000..b9b038c40 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlySet.cs @@ -0,0 +1,65 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections +{ + internal abstract class ReadOnlySet + : ISet + { + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public bool IsReadOnly => true; + + void ICollection.Add(T item) => throw new NotSupportedException(); + + public bool Add(T item) => throw new NotSupportedException(); + public void Clear() => throw new NotSupportedException(); + public void ExceptWith(IEnumerable other) => throw new NotSupportedException(); + public void IntersectWith(IEnumerable other) => throw new NotSupportedException(); + public bool Remove(T item) => throw new NotSupportedException(); + public bool SetEquals(IEnumerable other) => throw new NotSupportedException(); + public void SymmetricExceptWith(IEnumerable other) => throw new NotSupportedException(); + public void UnionWith(IEnumerable other) => throw new NotSupportedException(); + + public abstract bool Contains(T item); + public abstract void CopyTo(T[] array, int arrayIndex); + public abstract int Count { get; } + public abstract IEnumerator GetEnumerator(); + public abstract bool IsProperSubsetOf(IEnumerable other); + public abstract bool IsProperSupersetOf(IEnumerable other); + public abstract bool IsSubsetOf(IEnumerable other); + public abstract bool IsSupersetOf(IEnumerable other); + public abstract bool Overlaps(IEnumerable other); + } + + internal class ReadOnlySetProxy + : ReadOnlySet + { + private readonly ISet m_target; + + internal ReadOnlySetProxy(ISet target) + { + if (target == null) + throw new ArgumentNullException(nameof(target)); + + m_target = target; + } + + public override bool Contains(T item) => m_target.Contains(item); + public override void CopyTo(T[] array, int arrayIndex) => m_target.CopyTo(array, arrayIndex); + public override int Count => m_target.Count; + public override IEnumerator GetEnumerator() => m_target.GetEnumerator(); + public override bool IsProperSubsetOf(IEnumerable other) => m_target.IsProperSubsetOf(other); + public override bool IsProperSupersetOf(IEnumerable other) => m_target.IsProperSupersetOf(other); + public override bool IsSubsetOf(IEnumerable other) => m_target.IsSubsetOf(other); + public override bool IsSupersetOf(IEnumerable other) => m_target.IsSupersetOf(other); + public override bool Overlaps(IEnumerable other) => m_target.Overlaps(other); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlySet.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlySet.cs.meta new file mode 100644 index 000000000..6b65f33e3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/ReadOnlySet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24bbf770e59530f4cb957c11b0b50001 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/StoreImpl.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/StoreImpl.cs new file mode 100644 index 000000000..d3bfebe8b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/StoreImpl.cs @@ -0,0 +1,29 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections +{ + internal sealed class StoreImpl + : IStore + { + private readonly List m_contents; + + internal StoreImpl(IEnumerable e) + { + m_contents = new List(e); + } + + IEnumerable IStore.EnumerateMatches(ISelector selector) + { + foreach (T candidate in m_contents) + { + if (selector == null || selector.Match(candidate)) + yield return candidate; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/StoreImpl.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/StoreImpl.cs.meta new file mode 100644 index 000000000..fcd4797eb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/collections/StoreImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 72bf42ed5d4da8a47915e3c158f0305b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/date.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/date.meta new file mode 100644 index 000000000..bb7a509ac --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/date.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 519a28f7f784fe741926e76c222b9da5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/date/DateTimeUtilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/date/DateTimeUtilities.cs new file mode 100644 index 000000000..5aaa3eab6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/date/DateTimeUtilities.cs @@ -0,0 +1,87 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Date +{ + public static class DateTimeUtilities + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static readonly DateTime UnixEpoch = DateTime.UnixEpoch; +#else + public static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); +#endif + + public static readonly long MaxUnixMs = + (DateTime.MaxValue.Ticks - UnixEpoch.Ticks) / TimeSpan.TicksPerMillisecond; + public static readonly long MinUnixMs = 0L; + + /// + /// Return the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC) for a given DateTime value. + /// + /// The DateTime value will be converted to UTC (using before + /// conversion. + /// A DateTime value not before the epoch. + /// Number of whole milliseconds after epoch. + /// 'dateTime' is before the epoch. + public static long DateTimeToUnixMs(DateTime dateTime) + { + DateTime utc = dateTime.ToUniversalTime(); + if (utc.CompareTo(UnixEpoch) < 0) + throw new ArgumentOutOfRangeException(nameof(dateTime), "DateTime value may not be before the epoch"); + + return (utc.Ticks - UnixEpoch.Ticks) / TimeSpan.TicksPerMillisecond; + } + + /// + /// Create a UTC DateTime value from the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC). + /// + /// Number of milliseconds since the epoch. + /// A UTC DateTime value + /// 'unixMs' is before 'MinUnixMs' or after 'MaxUnixMs'. + /// + public static DateTime UnixMsToDateTime(long unixMs) + { + if (unixMs < MinUnixMs || unixMs > MaxUnixMs) + throw new ArgumentOutOfRangeException(nameof(unixMs)); + + return new DateTime(unixMs * TimeSpan.TicksPerMillisecond + UnixEpoch.Ticks, DateTimeKind.Utc); + } + + /// + /// Return the current number of milliseconds since the Unix epoch (1 Jan., 1970 UTC). + /// + public static long CurrentUnixMs() + { + return DateTimeToUnixMs(DateTime.UtcNow); + } + + public static DateTime WithPrecisionCentisecond(DateTime dateTime) + { + int millisecond = dateTime.Millisecond - (dateTime.Millisecond % 10); + return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, + dateTime.Hour, dateTime.Minute, dateTime.Second, millisecond, dateTime.Kind); + } + + public static DateTime WithPrecisionDecisecond(DateTime dateTime) + { + int millisecond = dateTime.Millisecond - (dateTime.Millisecond % 100); + return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, + dateTime.Hour, dateTime.Minute, dateTime.Second, millisecond, dateTime.Kind); + } + + public static DateTime WithPrecisionMillisecond(DateTime dateTime) + { + return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, + dateTime.Hour, dateTime.Minute, dateTime.Second, dateTime.Millisecond, dateTime.Kind); + } + + public static DateTime WithPrecisionSecond(DateTime dateTime) + { + return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, + dateTime.Hour, dateTime.Minute, dateTime.Second, dateTime.Kind); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/date/DateTimeUtilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/date/DateTimeUtilities.cs.meta new file mode 100644 index 000000000..0f2ca7fca --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/date/DateTimeUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 85931186ecac6fa43a89af5ddc60b835 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders.meta new file mode 100644 index 000000000..ecc759a94 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a1c695eec32cfe44ba8bb5c6b6230161 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Base64.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Base64.cs new file mode 100644 index 000000000..22898626d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Base64.cs @@ -0,0 +1,124 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Text; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders +{ + public sealed class Base64 + { + private Base64() + { + } + + public static string ToBase64String( + byte[] data) + { + return Convert.ToBase64String(data, 0, data.Length); + } + + public static string ToBase64String( + byte[] data, + int off, + int length) + { + return Convert.ToBase64String(data, off, length); + } + + /** + * encode the input data producing a base 64 encoded byte array. + * + * @return a byte array containing the base 64 encoded data. + */ + public static byte[] Encode( + byte[] data) + { + return Encode(data, 0, data.Length); + } + + /** + * encode the input data producing a base 64 encoded byte array. + * + * @return a byte array containing the base 64 encoded data. + */ + public static byte[] Encode( + byte[] data, + int off, + int length) + { + string s = Convert.ToBase64String(data, off, length); + return Strings.ToAsciiByteArray(s); + } + + /** + * Encode the byte data to base 64 writing it to the given output stream. + * + * @return the number of bytes produced. + */ + public static int Encode( + byte[] data, + Stream outStream) + { + byte[] encoded = Encode(data); + outStream.Write(encoded, 0, encoded.Length); + return encoded.Length; + } + + /** + * Encode the byte data to base 64 writing it to the given output stream. + * + * @return the number of bytes produced. + */ + public static int Encode( + byte[] data, + int off, + int length, + Stream outStream) + { + byte[] encoded = Encode(data, off, length); + outStream.Write(encoded, 0, encoded.Length); + return encoded.Length; + } + + /** + * decode the base 64 encoded input data. It is assumed the input data is valid. + * + * @return a byte array representing the decoded data. + */ + public static byte[] Decode( + byte[] data) + { + string s = Strings.FromAsciiByteArray(data); + return Convert.FromBase64String(s); + } + + /** + * decode the base 64 encoded string data - whitespace will be ignored. + * + * @return a byte array representing the decoded data. + */ + public static byte[] Decode( + string data) + { + return Convert.FromBase64String(data); + } + + /** + * decode the base 64 encoded string data writing it to the given output stream, + * whitespace characters will be ignored. + * + * @return the number of bytes produced. + */ + public static int Decode( + string data, + Stream outStream) + { + byte[] decoded = Decode(data); + outStream.Write(decoded, 0, decoded.Length); + return decoded.Length; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Base64.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Base64.cs.meta new file mode 100644 index 000000000..3d41fa92b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Base64.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d6f9d60f7dc61d48babd61d65e4a234 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Base64Encoder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Base64Encoder.cs new file mode 100644 index 000000000..7c31c0dc6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Base64Encoder.cs @@ -0,0 +1,511 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders +{ + public class Base64Encoder + : IEncoder + { + protected readonly byte[] encodingTable = + { + (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', (byte)'G', + (byte)'H', (byte)'I', (byte)'J', (byte)'K', (byte)'L', (byte)'M', (byte)'N', + (byte)'O', (byte)'P', (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U', + (byte)'V', (byte)'W', (byte)'X', (byte)'Y', (byte)'Z', + (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g', + (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n', + (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u', + (byte)'v', + (byte)'w', (byte)'x', (byte)'y', (byte)'z', + (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', + (byte)'7', (byte)'8', (byte)'9', + (byte)'+', (byte)'/' + }; + + protected byte padding = (byte)'='; + + /* + * set up the decoding table. + */ + protected readonly byte[] decodingTable = new byte[128]; + + protected void InitialiseDecodingTable() + { + Arrays.Fill(decodingTable, (byte)0xff); + + for (int i = 0; i < encodingTable.Length; i++) + { + decodingTable[encodingTable[i]] = (byte)i; + } + } + + public Base64Encoder() + { + InitialiseDecodingTable(); + } + + public int Encode(byte[] inBuf, int inOff, int inLen, byte[] outBuf, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return Encode(inBuf.AsSpan(inOff, inLen), outBuf.AsSpan(outOff)); +#else + int inPos = inOff; + int inEnd = inOff + inLen - 2; + int outPos = outOff; + + while (inPos < inEnd) + { + uint a1 = inBuf[inPos++]; + uint a2 = inBuf[inPos++]; + uint a3 = inBuf[inPos++]; + + outBuf[outPos++] = encodingTable[(a1 >> 2) & 0x3F]; + outBuf[outPos++] = encodingTable[((a1 << 4) | (a2 >> 4)) & 0x3F]; + outBuf[outPos++] = encodingTable[((a2 << 2) | (a3 >> 6)) & 0x3F]; + outBuf[outPos++] = encodingTable[a3 & 0x3F]; + } + + switch (inLen - (inPos - inOff)) + { + case 1: + { + uint a1 = inBuf[inPos++]; + + outBuf[outPos++] = encodingTable[(a1 >> 2) & 0x3F]; + outBuf[outPos++] = encodingTable[(a1 << 4) & 0x3F]; + outBuf[outPos++] = padding; + outBuf[outPos++] = padding; + break; + } + case 2: + { + uint a1 = inBuf[inPos++]; + uint a2 = inBuf[inPos++]; + + outBuf[outPos++] = encodingTable[(a1 >> 2) & 0x3F]; + outBuf[outPos++] = encodingTable[((a1 << 4) | (a2 >> 4)) & 0x3F]; + outBuf[outPos++] = encodingTable[(a2 << 2) & 0x3F]; + outBuf[outPos++] = padding; + break; + } + } + + return outPos - outOff; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int Encode(ReadOnlySpan input, Span output) + { + int inPos = 0; + int inEnd = input.Length - 2; + int outPos = 0; + + while (inPos < inEnd) + { + uint a1 = input[inPos++]; + uint a2 = input[inPos++]; + uint a3 = input[inPos++]; + + output[outPos++] = encodingTable[(a1 >> 2) & 0x3F]; + output[outPos++] = encodingTable[((a1 << 4) | (a2 >> 4)) & 0x3F]; + output[outPos++] = encodingTable[((a2 << 2) | (a3 >> 6)) & 0x3F]; + output[outPos++] = encodingTable[a3 & 0x3F]; + } + + switch (input.Length - inPos) + { + case 1: + { + uint a1 = input[inPos++]; + + output[outPos++] = encodingTable[(a1 >> 2) & 0x3F]; + output[outPos++] = encodingTable[(a1 << 4) & 0x3F]; + output[outPos++] = padding; + output[outPos++] = padding; + break; + } + case 2: + { + uint a1 = input[inPos++]; + uint a2 = input[inPos++]; + + output[outPos++] = encodingTable[(a1 >> 2) & 0x3F]; + output[outPos++] = encodingTable[((a1 << 4) | (a2 >> 4)) & 0x3F]; + output[outPos++] = encodingTable[(a2 << 2) & 0x3F]; + output[outPos++] = padding; + break; + } + } + + return outPos; + } +#endif + + /** + * encode the input data producing a base 64 output stream. + * + * @return the number of bytes produced. + */ + public int Encode(byte[] buf, int off, int len, Stream outStream) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return Encode(buf.AsSpan(off, len), outStream); +#else + if (len < 0) + return 0; + + byte[] tmp = new byte[72]; + int remaining = len; + while (remaining > 0) + { + int inLen = System.Math.Min(54, remaining); + int outLen = Encode(buf, off, inLen, tmp, 0); + outStream.Write(tmp, 0, outLen); + off += inLen; + remaining -= inLen; + } + return (len + 2) / 3 * 4; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int Encode(ReadOnlySpan data, Stream outStream) + { + Span tmp = stackalloc byte[72]; + int result = (data.Length + 2) / 3 * 4; + while (!data.IsEmpty) + { + int inLen = System.Math.Min(54, data.Length); + int outLen = Encode(data[..inLen], tmp); + outStream.Write(tmp[..outLen]); + data = data[inLen..]; + } + return result; + } +#endif + + private bool Ignore(char c) + { + return c == '\n' || c =='\r' || c == '\t' || c == ' '; + } + + /** + * decode the base 64 encoded byte data writing it to the given output stream, + * whitespace characters will be ignored. + * + * @return the number of bytes produced. + */ + public int Decode(byte[] data, int off, int length, Stream outStream) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return Decode(data.AsSpan(off, length), outStream); +#else + byte b1, b2, b3, b4; + byte[] outBuffer = new byte[54]; // S/MIME standard + int bufOff = 0; + int outLen = 0; + int end = off + length; + + while (end > off) + { + if (!Ignore((char)data[end - 1])) + break; + + end--; + } + + int finish = end - 4; + int i = NextI(data, off, finish); + + while (i < finish) + { + b1 = decodingTable[data[i++]]; + + i = NextI(data, i, finish); + + b2 = decodingTable[data[i++]]; + + i = NextI(data, i, finish); + + b3 = decodingTable[data[i++]]; + + i = NextI(data, i, finish); + + b4 = decodingTable[data[i++]]; + + if ((b1 | b2 | b3 | b4) >= 0x80) + throw new IOException("invalid characters encountered in base64 data"); + + outBuffer[bufOff++] = (byte)((b1 << 2) | (b2 >> 4)); + outBuffer[bufOff++] = (byte)((b2 << 4) | (b3 >> 2)); + outBuffer[bufOff++] = (byte)((b3 << 6) | b4); + + if (bufOff == outBuffer.Length) + { + outStream.Write(outBuffer, 0, bufOff); + bufOff = 0; + } + + outLen += 3; + + i = NextI(data, i, finish); + } + + if (bufOff > 0) + { + outStream.Write(outBuffer, 0, bufOff); + } + + int e0 = NextI(data, i, end); + int e1 = NextI(data, e0 + 1, end); + int e2 = NextI(data, e1 + 1, end); + int e3 = NextI(data, e2 + 1, end); + + outLen += DecodeLastBlock(outStream, (char)data[e0], (char)data[e1], (char)data[e2], (char)data[e3]); + + return outLen; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int Decode(ReadOnlySpan data, Stream outStream) + { + byte b1, b2, b3, b4; + Span outBuffer = stackalloc byte[54]; // S/MIME standard + int bufOff = 0; + int outLen = 0; + int end = data.Length; + + while (end > 0) + { + if (!Ignore((char)data[end - 1])) + break; + + end--; + } + + int finish = end - 4; + int i = NextI(data, 0, finish); + + while (i < finish) + { + b1 = decodingTable[data[i++]]; + + i = NextI(data, i, finish); + + b2 = decodingTable[data[i++]]; + + i = NextI(data, i, finish); + + b3 = decodingTable[data[i++]]; + + i = NextI(data, i, finish); + + b4 = decodingTable[data[i++]]; + + if ((b1 | b2 | b3 | b4) >= 0x80) + throw new IOException("invalid characters encountered in base64 data"); + + outBuffer[bufOff++] = (byte)((b1 << 2) | (b2 >> 4)); + outBuffer[bufOff++] = (byte)((b2 << 4) | (b3 >> 2)); + outBuffer[bufOff++] = (byte)((b3 << 6) | b4); + + if (bufOff == outBuffer.Length) + { + outStream.Write(outBuffer); + bufOff = 0; + } + + outLen += 3; + + i = NextI(data, i, finish); + } + + if (bufOff > 0) + { + outStream.Write(outBuffer[..bufOff]); + } + + int e0 = NextI(data, i, end); + int e1 = NextI(data, e0 + 1, end); + int e2 = NextI(data, e1 + 1, end); + int e3 = NextI(data, e2 + 1, end); + + outLen += DecodeLastBlock(outStream, (char)data[e0], (char)data[e1], (char)data[e2], (char)data[e3]); + + return outLen; + } +#endif + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + private int NextI(ReadOnlySpan data, int i, int finish) +#else + private int NextI(byte[] data, int i, int finish) +#endif + { + while ((i < finish) && Ignore((char)data[i])) + { + i++; + } + return i; + } + + /** + * decode the base 64 encoded string data writing it to the given output stream, + * whitespace characters will be ignored. + * + * @return the number of bytes produced. + */ + public int DecodeString(string data, Stream outStream) + { + // Platform Implementation +// byte[] bytes = Convert.FromBase64String(data); +// outStream.Write(bytes, 0, bytes.Length); +// return bytes.Length; + + byte b1, b2, b3, b4; + int length = 0; + + int end = data.Length; + + while (end > 0) + { + if (!Ignore(data[end - 1])) + break; + + end--; + } + + int finish = end - 4; + int i = NextI(data, 0, finish); +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span buf = stackalloc byte[3]; +#endif + + while (i < finish) + { + b1 = decodingTable[data[i++]]; + + i = NextI(data, i, finish); + + b2 = decodingTable[data[i++]]; + + i = NextI(data, i, finish); + + b3 = decodingTable[data[i++]]; + + i = NextI(data, i, finish); + + b4 = decodingTable[data[i++]]; + + if ((b1 | b2 | b3 | b4) >= 0x80) + throw new IOException("invalid characters encountered in base64 data"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + buf[0] = (byte)((b1 << 2) | (b2 >> 4)); + buf[1] = (byte)((b2 << 4) | (b3 >> 2)); + buf[2] = (byte)((b3 << 6) | b4); + outStream.Write(buf); +#else + outStream.WriteByte((byte)((b1 << 2) | (b2 >> 4))); + outStream.WriteByte((byte)((b2 << 4) | (b3 >> 2))); + outStream.WriteByte((byte)((b3 << 6) | b4)); +#endif + + length += 3; + + i = NextI(data, i, finish); + } + + length += DecodeLastBlock(outStream, data[end - 4], data[end - 3], data[end - 2], data[end - 1]); + + return length; + } + + private int DecodeLastBlock( + Stream outStream, + char c1, + char c2, + char c3, + char c4) + { + if (c3 == padding) + { + if (c4 != padding) + throw new IOException("invalid characters encountered at end of base64 data"); + + byte b1 = decodingTable[c1]; + byte b2 = decodingTable[c2]; + + if ((b1 | b2) >= 0x80) + throw new IOException("invalid characters encountered at end of base64 data"); + + outStream.WriteByte((byte)((b1 << 2) | (b2 >> 4))); + + return 1; + } + + if (c4 == padding) + { + byte b1 = decodingTable[c1]; + byte b2 = decodingTable[c2]; + byte b3 = decodingTable[c3]; + + if ((b1 | b2 | b3) >= 0x80) + throw new IOException("invalid characters encountered at end of base64 data"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span buf = stackalloc byte[2] { + (byte)((b1 << 2) | (b2 >> 4)), + (byte)((b2 << 4) | (b3 >> 2)), + }; + outStream.Write(buf); +#else + outStream.WriteByte((byte)((b1 << 2) | (b2 >> 4))); + outStream.WriteByte((byte)((b2 << 4) | (b3 >> 2))); +#endif + + return 2; + } + + { + byte b1 = decodingTable[c1]; + byte b2 = decodingTable[c2]; + byte b3 = decodingTable[c3]; + byte b4 = decodingTable[c4]; + + if ((b1 | b2 | b3 | b4) >= 0x80) + throw new IOException("invalid characters encountered at end of base64 data"); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span buf = stackalloc byte[3] { + (byte)((b1 << 2) | (b2 >> 4)), + (byte)((b2 << 4) | (b3 >> 2)), + (byte)((b3 << 6) | b4), + }; + outStream.Write(buf); +#else + outStream.WriteByte((byte)((b1 << 2) | (b2 >> 4))); + outStream.WriteByte((byte)((b2 << 4) | (b3 >> 2))); + outStream.WriteByte((byte)((b3 << 6) | b4)); +#endif + + return 3; + } + } + + private int NextI(string data, int i, int finish) + { + while ((i < finish) && Ignore(data[i])) + { + i++; + } + return i; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Base64Encoder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Base64Encoder.cs.meta new file mode 100644 index 000000000..82aff3b0a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Base64Encoder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f905b3d88fa2c734fb7553270ac7e0b3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/BufferedDecoder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/BufferedDecoder.cs new file mode 100644 index 000000000..9f72a9a63 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/BufferedDecoder.cs @@ -0,0 +1,121 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders +{ + /// + /// A buffering class to allow translation from one format to another to + /// be done in discrete chunks. + /// + public class BufferedDecoder + { + internal byte[] buffer; + internal int bufOff; + + internal ITranslator translator; + + /// + /// Create a buffered Decoder. + /// + /// The translater to use. + /// The size of the buffer. + public BufferedDecoder( + ITranslator translator, + int bufferSize) + { + this.translator = translator; + + if ((bufferSize % translator.GetEncodedBlockSize()) != 0) + { + throw new ArgumentException("buffer size not multiple of input block size"); + } + + buffer = new byte[bufferSize]; +// bufOff = 0; + } + + /// + /// Process one byte of data. + /// + /// Data in. + /// Byte array for the output. + /// The offset in the output byte array to start writing from. + /// The amount of output bytes. + public int ProcessByte( + byte input, + byte[] output, + int outOff) + { + int resultLen = 0; + + buffer[bufOff++] = input; + + if (bufOff == buffer.Length) + { + resultLen = translator.Decode(buffer, 0, buffer.Length, output, outOff); + bufOff = 0; + } + + return resultLen; + } + + + /// + /// Process data from a byte array. + /// + /// The input data. + /// Start position within input data array. + /// Amount of data to process from input data array. + /// Array to store output. + /// Position in output array to start writing from. + /// The amount of output bytes. + public int ProcessBytes( + byte[] input, + int inOff, + int len, + byte[] outBytes, + int outOff) + { + if (len < 0) + { + throw new ArgumentException("Can't have a negative input length!"); + } + + int resultLen = 0; + int gapLen = buffer.Length - bufOff; + + if (len > gapLen) + { + Array.Copy(input, inOff, buffer, bufOff, gapLen); + + resultLen += translator.Decode(buffer, 0, buffer.Length, outBytes, outOff); + + bufOff = 0; + + len -= gapLen; + inOff += gapLen; + outOff += resultLen; + + int chunkSize = len - (len % buffer.Length); + + resultLen += translator.Decode(input, inOff, chunkSize, outBytes, outOff); + + len -= chunkSize; + inOff += chunkSize; + } + + if (len != 0) + { + Array.Copy(input, inOff, buffer, bufOff, len); + + bufOff += len; + } + + return resultLen; + } + } + +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/BufferedDecoder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/BufferedDecoder.cs.meta new file mode 100644 index 000000000..1692e3fa7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/BufferedDecoder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6c49427e416a0845b216c1bc698f79c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/BufferedEncoder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/BufferedEncoder.cs new file mode 100644 index 000000000..e7c94efb8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/BufferedEncoder.cs @@ -0,0 +1,121 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders +{ + /// + /// A class that allows encoding of data using a specific encoder to be processed in chunks. + /// + public class BufferedEncoder + { + internal byte[] Buffer; + internal int bufOff; + + internal ITranslator translator; + + + /// + /// Create. + /// + /// The translator to use. + /// Size of the chunks. + public BufferedEncoder( + ITranslator translator, + int bufferSize) + { + this.translator = translator; + + if ((bufferSize % translator.GetEncodedBlockSize()) != 0) + { + throw new ArgumentException("buffer size not multiple of input block size"); + } + + Buffer = new byte[bufferSize]; +// bufOff = 0; + } + + + /// + /// Process one byte of data. + /// + /// The byte. + /// An array to store output in. + /// Offset within output array to start writing from. + /// + public int ProcessByte( + byte input, + byte[] outBytes, + int outOff) + { + int resultLen = 0; + + Buffer[bufOff++] = input; + + if (bufOff == Buffer.Length) + { + resultLen = translator.Encode(Buffer, 0, Buffer.Length, outBytes, outOff); + bufOff = 0; + } + + return resultLen; + } + + /// + /// Process data from a byte array. + /// + /// Input data Byte array containing data to be processed. + /// Start position within input data array. + /// Amount of input data to be processed. + /// Output data array. + /// Offset within output data array to start writing to. + /// The amount of data written. + public int ProcessBytes( + byte[] input, + int inOff, + int len, + byte[] outBytes, + int outOff) + { + if (len < 0) + { + throw new ArgumentException("Can't have a negative input length!"); + } + + int resultLen = 0; + int gapLen = Buffer.Length - bufOff; + + if (len > gapLen) + { + Array.Copy(input, inOff, Buffer, bufOff, gapLen); + + resultLen += translator.Encode(Buffer, 0, Buffer.Length, outBytes, outOff); + + bufOff = 0; + + len -= gapLen; + inOff += gapLen; + outOff += resultLen; + + int chunkSize = len - (len % Buffer.Length); + + resultLen += translator.Encode(input, inOff, chunkSize, outBytes, outOff); + + len -= chunkSize; + inOff += chunkSize; + } + + if (len != 0) + { + Array.Copy(input, inOff, Buffer, bufOff, len); + + bufOff += len; + } + + return resultLen; + } + } + +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/BufferedEncoder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/BufferedEncoder.cs.meta new file mode 100644 index 000000000..369568194 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/BufferedEncoder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 53ece357fad218446b6823b06ffea94d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Hex.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Hex.cs new file mode 100644 index 000000000..5785253e0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Hex.cs @@ -0,0 +1,155 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders +{ + /// + /// Class to decode and encode Hex. + /// + public sealed class Hex + { + private static readonly HexEncoder encoder = new HexEncoder(); + + private Hex() + { + } + + public static string ToHexString( + byte[] data) + { + return ToHexString(data, 0, data.Length); + } + + public static string ToHexString( + byte[] data, + int off, + int length) + { + byte[] hex = Encode(data, off, length); + return Strings.FromAsciiByteArray(hex); + } + + /** + * encode the input data producing a Hex encoded byte array. + * + * @return a byte array containing the Hex encoded data. + */ + public static byte[] Encode( + byte[] data) + { + return Encode(data, 0, data.Length); + } + + /** + * encode the input data producing a Hex encoded byte array. + * + * @return a byte array containing the Hex encoded data. + */ + public static byte[] Encode( + byte[] data, + int off, + int length) + { + MemoryStream bOut = new MemoryStream(length * 2); + + encoder.Encode(data, off, length, bOut); + + return bOut.ToArray(); + } + + /** + * Hex encode the byte data writing it to the given output stream. + * + * @return the number of bytes produced. + */ + public static int Encode( + byte[] data, + Stream outStream) + { + return encoder.Encode(data, 0, data.Length, outStream); + } + + /** + * Hex encode the byte data writing it to the given output stream. + * + * @return the number of bytes produced. + */ + public static int Encode( + byte[] data, + int off, + int length, + Stream outStream) + { + return encoder.Encode(data, off, length, outStream); + } + + /** + * decode the Hex encoded input data. It is assumed the input data is valid. + * + * @return a byte array representing the decoded data. + */ + public static byte[] Decode( + byte[] data) + { + MemoryStream bOut = new MemoryStream((data.Length + 1) / 2); + + encoder.Decode(data, 0, data.Length, bOut); + + return bOut.ToArray(); + } + + /** + * decode the Hex encoded string data - whitespace will be ignored. + * + * @return a byte array representing the decoded data. + */ + public static byte[] Decode( + string data) + { + MemoryStream bOut = new MemoryStream((data.Length + 1) / 2); + + encoder.DecodeString(data, bOut); + + return bOut.ToArray(); + } + + /** + * decode the Hex encoded string data writing it to the given output stream, + * whitespace characters will be ignored. + * + * @return the number of bytes produced. + */ + public static int Decode( + string data, + Stream outStream) + { + return encoder.DecodeString(data, outStream); + } + + /** + * Decode the hexadecimal-encoded string strictly i.e. any non-hexadecimal characters will be + * considered an error. + * + * @return a byte array representing the decoded data. + */ + public static byte[] DecodeStrict(string str) + { + return encoder.DecodeStrict(str, 0, str.Length); + } + + /** + * Decode the hexadecimal-encoded string strictly i.e. any non-hexadecimal characters will be + * considered an error. + * + * @return a byte array representing the decoded data. + */ + public static byte[] DecodeStrict(string str, int off, int len) + { + return encoder.DecodeStrict(str, off, len); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Hex.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Hex.cs.meta new file mode 100644 index 000000000..2748cccb4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Hex.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5ed222e1db807254592957eb36667273 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/HexEncoder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/HexEncoder.cs new file mode 100644 index 000000000..27c7bb219 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/HexEncoder.cs @@ -0,0 +1,356 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders +{ + public class HexEncoder + : IEncoder + { + protected readonly byte[] encodingTable = + { + (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', (byte)'7', + (byte)'8', (byte)'9', (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f' + }; + + /* + * set up the decoding table. + */ + protected readonly byte[] decodingTable = new byte[128]; + + protected void InitialiseDecodingTable() + { + Arrays.Fill(decodingTable, (byte)0xff); + + for (int i = 0; i < encodingTable.Length; i++) + { + decodingTable[encodingTable[i]] = (byte)i; + } + + decodingTable['A'] = decodingTable['a']; + decodingTable['B'] = decodingTable['b']; + decodingTable['C'] = decodingTable['c']; + decodingTable['D'] = decodingTable['d']; + decodingTable['E'] = decodingTable['e']; + decodingTable['F'] = decodingTable['f']; + } + + public HexEncoder() + { + InitialiseDecodingTable(); + } + + public int Encode(byte[] inBuf, int inOff, int inLen, byte[] outBuf, int outOff) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return Encode(inBuf.AsSpan(inOff, inLen), outBuf.AsSpan(outOff)); +#else + int inPos = inOff; + int inEnd = inOff + inLen; + int outPos = outOff; + + while (inPos < inEnd) + { + uint b = inBuf[inPos++]; + + outBuf[outPos++] = encodingTable[b >> 4]; + outBuf[outPos++] = encodingTable[b & 0xF]; + } + + return outPos - outOff; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int Encode(ReadOnlySpan input, Span output) + { + int inPos = 0; + int inEnd = input.Length; + int outPos = 0; + + while (inPos < inEnd) + { + uint b = input[inPos++]; + + output[outPos++] = encodingTable[b >> 4]; + output[outPos++] = encodingTable[b & 0xF]; + } + + return outPos; + } +#endif + + /** + * encode the input data producing a Hex output stream. + * + * @return the number of bytes produced. + */ + public int Encode(byte[] buf, int off, int len, Stream outStream) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return Encode(buf.AsSpan(off, len), outStream); +#else + if (len < 0) + return 0; + + byte[] tmp = new byte[72]; + int remaining = len; + while (remaining > 0) + { + int inLen = System.Math.Min(36, remaining); + int outLen = Encode(buf, off, inLen, tmp, 0); + outStream.Write(tmp, 0, outLen); + off += inLen; + remaining -= inLen; + } + return len * 2; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int Encode(ReadOnlySpan data, Stream outStream) + { + Span tmp = stackalloc byte[72]; + int result = data.Length * 2; + while (!data.IsEmpty) + { + int inLen = System.Math.Min(36, data.Length); + int outLen = Encode(data[..inLen], tmp); + outStream.Write(tmp[..outLen]); + data = data[inLen..]; + } + return result; + } +#endif + + private static bool Ignore(char c) + { + return c == '\n' || c =='\r' || c == '\t' || c == ' '; + } + + /** + * decode the Hex encoded byte data writing it to the given output stream, + * whitespace characters will be ignored. + * + * @return the number of bytes produced. + */ + public int Decode(byte[] data, int off, int length, Stream outStream) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + return Decode(data.AsSpan(off, length), outStream); +#else + byte b1, b2; + int outLen = 0; + byte[] buf = new byte[36]; + int bufOff = 0; + int end = off + length; + + while (end > off) + { + if (!Ignore((char)data[end - 1])) + break; + + end--; + } + + int i = off; + while (i < end) + { + while (i < end && Ignore((char)data[i])) + { + i++; + } + + b1 = decodingTable[data[i++]]; + + while (i < end && Ignore((char)data[i])) + { + i++; + } + + b2 = decodingTable[data[i++]]; + + if ((b1 | b2) >= 0x80) + throw new IOException("invalid characters encountered in Hex data"); + + buf[bufOff++] = (byte)((b1 << 4) | b2); + + if (bufOff == buf.Length) + { + outStream.Write(buf, 0, bufOff); + bufOff = 0; + } + + outLen++; + } + + if (bufOff > 0) + { + outStream.Write(buf, 0, bufOff); + } + + return outLen; +#endif + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public int Decode(ReadOnlySpan data, Stream outStream) + { + byte b1, b2; + int outLen = 0; + Span buf = stackalloc byte[36]; + int bufOff = 0; + int end = data.Length; + + while (end > 0) + { + if (!Ignore((char)data[end - 1])) + break; + + end--; + } + + int i = 0; + while (i < end) + { + while (i < end && Ignore((char)data[i])) + { + i++; + } + + b1 = decodingTable[data[i++]]; + + while (i < end && Ignore((char)data[i])) + { + i++; + } + + b2 = decodingTable[data[i++]]; + + if ((b1 | b2) >= 0x80) + throw new IOException("invalid characters encountered in Hex data"); + + buf[bufOff++] = (byte)((b1 << 4) | b2); + + if (bufOff == buf.Length) + { + outStream.Write(buf); + bufOff = 0; + } + + outLen++; + } + + if (bufOff > 0) + { + outStream.Write(buf[..bufOff]); + } + + return outLen; + } +#endif + + /** + * decode the Hex encoded string data writing it to the given output stream, + * whitespace characters will be ignored. + * + * @return the number of bytes produced. + */ + public int DecodeString(string data, Stream outStream) + { + byte b1, b2; + int length = 0; +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + Span buf = stackalloc byte[36]; +#else + byte[] buf = new byte[36]; +#endif + int bufOff = 0; + int end = data.Length; + + while (end > 0) + { + if (!Ignore(data[end - 1])) + break; + + end--; + } + + int i = 0; + while (i < end) + { + while (i < end && Ignore(data[i])) + { + i++; + } + + b1 = decodingTable[data[i++]]; + + while (i < end && Ignore(data[i])) + { + i++; + } + + b2 = decodingTable[data[i++]]; + + if ((b1 | b2) >= 0x80) + throw new IOException("invalid characters encountered in Hex data"); + + buf[bufOff++] = (byte)((b1 << 4) | b2); + + if (bufOff == buf.Length) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + outStream.Write(buf); +#else + outStream.Write(buf, 0, bufOff); +#endif + bufOff = 0; + } + + length++; + } + + if (bufOff > 0) + { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + outStream.Write(buf[..bufOff]); +#else + outStream.Write(buf, 0, bufOff); +#endif + } + + return length; + } + + internal byte[] DecodeStrict(string str, int off, int len) + { + if (null == str) + throw new ArgumentNullException("str"); + if (off < 0 || len < 0 || off > (str.Length - len)) + throw new IndexOutOfRangeException("invalid offset and/or length specified"); + if (0 != (len & 1)) + throw new ArgumentException("a hexadecimal encoding must have an even number of characters", "len"); + + int resultLen = len >> 1; + byte[] result = new byte[resultLen]; + + int strPos = off; + for (int i = 0; i < resultLen; ++i) + { + byte b1 = decodingTable[str[strPos++]]; + byte b2 = decodingTable[str[strPos++]]; + + if ((b1 | b2) >= 0x80) + throw new IOException("invalid characters encountered in Hex data"); + + result[i] = (byte)((b1 << 4) | b2); + } + return result; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/HexEncoder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/HexEncoder.cs.meta new file mode 100644 index 000000000..d585633d9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/HexEncoder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 05d0f6c3caab0a549b8c1067b01bcbb2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/HexTranslator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/HexTranslator.cs new file mode 100644 index 000000000..c2d218df2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/HexTranslator.cs @@ -0,0 +1,112 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders +{ + /// + /// A hex translator. + /// + public class HexTranslator : ITranslator + { + private static readonly byte[] hexTable = + { + (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', (byte)'7', + (byte)'8', (byte)'9', (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f' + }; + + /// + /// Return encoded block size. + /// + /// 2 + public int GetEncodedBlockSize() + { + return 2; + } + + /// + /// Encode some data. + /// + /// Input data array. + /// Start position within input data array. + /// The amount of data to process. + /// The output data array. + /// The offset within the output data array to start writing from. + /// Amount of data encoded. + public int Encode( + byte[] input, + int inOff, + int length, + byte[] outBytes, + int outOff) + { + for (int i = 0, j = 0; i < length; i++, j += 2) + { + outBytes[outOff + j] = hexTable[(input[inOff] >> 4) & 0x0f]; + outBytes[outOff + j + 1] = hexTable[input[inOff] & 0x0f]; + + inOff++; + } + + return length * 2; + } + + /// + /// Returns the decoded block size. + /// + /// 1 + public int GetDecodedBlockSize() + { + return 1; + } + + /// + /// Decode data from a byte array. + /// + /// The input data array. + /// Start position within input data array. + /// The amounty of data to process. + /// The output data array. + /// The position within the output data array to start writing from. + /// The amount of data written. + public int Decode( + byte[] input, + int inOff, + int length, + byte[] outBytes, + int outOff) + { + int halfLength = length / 2; + byte left, right; + for (int i = 0; i < halfLength; i++) + { + left = input[inOff + i * 2]; + right = input[inOff + i * 2 + 1]; + + if (left < (byte)'a') + { + outBytes[outOff] = (byte)((left - '0') << 4); + } + else + { + outBytes[outOff] = (byte)((left - 'a' + 10) << 4); + } + if (right < (byte)'a') + { + outBytes[outOff] += (byte)(right - '0'); + } + else + { + outBytes[outOff] += (byte)(right - 'a' + 10); + } + + outOff++; + } + + return halfLength; + } + } + +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/HexTranslator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/HexTranslator.cs.meta new file mode 100644 index 000000000..38b3100b1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/HexTranslator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a4cfe8d15199522458337f90de553550 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/IEncoder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/IEncoder.cs new file mode 100644 index 000000000..e0a3783e5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/IEncoder.cs @@ -0,0 +1,30 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders +{ + /** + * Encode and decode byte arrays (typically from binary to 7-bit ASCII + * encodings). + */ + public interface IEncoder + { + int Encode(byte[] data, int off, int length, Stream outStream); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int Encode(ReadOnlySpan data, Stream outStream); +#endif + + int Decode(byte[] data, int off, int length, Stream outStream); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + int Decode(ReadOnlySpan data, Stream outStream); +#endif + + int DecodeString(string data, Stream outStream); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/IEncoder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/IEncoder.cs.meta new file mode 100644 index 000000000..928cc8f34 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/IEncoder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e240a99386c56d4c833831f5247b554 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Translator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Translator.cs new file mode 100644 index 000000000..fc3c50add --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Translator.cs @@ -0,0 +1,23 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders +{ + /// + /// Translator interface. + /// + public interface ITranslator + { + int GetEncodedBlockSize(); + + int Encode(byte[] input, int inOff, int length, byte[] outBytes, int outOff); + + int GetDecodedBlockSize(); + + int Decode(byte[] input, int inOff, int length, byte[] outBytes, int outOff); + } + +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Translator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Translator.cs.meta new file mode 100644 index 000000000..78ceb0157 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/Translator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fd4d0e7a77106f047a8aab6380c5e046 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/UrlBase64.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/UrlBase64.cs new file mode 100644 index 000000000..b065d8a1f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/UrlBase64.cs @@ -0,0 +1,131 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders +{ + /** + * Convert binary data to and from UrlBase64 encoding. This is identical to + * Base64 encoding, except that the padding character is "." and the other + * non-alphanumeric characters are "-" and "_" instead of "+" and "/". + *

    + * The purpose of UrlBase64 encoding is to provide a compact encoding of binary + * data that is safe for use as an URL parameter. Base64 encoding does not + * produce encoded values that are safe for use in URLs, since "/" can be + * interpreted as a path delimiter; "+" is the encoded form of a space; and + * "=" is used to separate a name from the corresponding value in an URL + * parameter. + *

    + */ + public class UrlBase64 + { + private static readonly IEncoder encoder = new UrlBase64Encoder(); + + /** + * Encode the input data producing a URL safe base 64 encoded byte array. + * + * @return a byte array containing the URL safe base 64 encoded data. + */ + public static byte[] Encode( + byte[] data) + { + MemoryStream bOut = new MemoryStream(); + + try + { + encoder.Encode(data, 0, data.Length, bOut); + } + catch (IOException e) + { + throw new Exception("exception encoding URL safe base64 string: " + e.Message, e); + } + + return bOut.ToArray(); + } + + /** + * Encode the byte data writing it to the given output stream. + * + * @return the number of bytes produced. + */ + public static int Encode( + byte[] data, + Stream outStr) + { + return encoder.Encode(data, 0, data.Length, outStr); + } + + /** + * Decode the URL safe base 64 encoded input data - white space will be ignored. + * + * @return a byte array representing the decoded data. + */ + public static byte[] Decode( + byte[] data) + { + MemoryStream bOut = new MemoryStream(); + + try + { + encoder.Decode(data, 0, data.Length, bOut); + } + catch (IOException e) + { + throw new Exception("exception decoding URL safe base64 string: " + e.Message, e); + } + + return bOut.ToArray(); + } + + /** + * decode the URL safe base 64 encoded byte data writing it to the given output stream, + * whitespace characters will be ignored. + * + * @return the number of bytes produced. + */ + public static int Decode( + byte[] data, + Stream outStr) + { + return encoder.Decode(data, 0, data.Length, outStr); + } + + /** + * decode the URL safe base 64 encoded string data - whitespace will be ignored. + * + * @return a byte array representing the decoded data. + */ + public static byte[] Decode( + string data) + { + MemoryStream bOut = new MemoryStream(); + + try + { + encoder.DecodeString(data, bOut); + } + catch (IOException e) + { + throw new Exception("exception decoding URL safe base64 string: " + e.Message, e); + } + + return bOut.ToArray(); + } + + /** + * Decode the URL safe base 64 encoded string data writing it to the given output stream, + * whitespace characters will be ignored. + * + * @return the number of bytes produced. + */ + public static int Decode( + string data, + Stream outStr) + { + return encoder.DecodeString(data, outStr); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/UrlBase64.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/UrlBase64.cs.meta new file mode 100644 index 000000000..65dc9004a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/UrlBase64.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b90f1cc819741c42aa20ee7dee4e85a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/UrlBase64Encoder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/UrlBase64Encoder.cs new file mode 100644 index 000000000..1a9961cc4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/UrlBase64Encoder.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders +{ + /** + * Convert binary data to and from UrlBase64 encoding. This is identical to + * Base64 encoding, except that the padding character is "." and the other + * non-alphanumeric characters are "-" and "_" instead of "+" and "/". + *

    + * The purpose of UrlBase64 encoding is to provide a compact encoding of binary + * data that is safe for use as an URL parameter. Base64 encoding does not + * produce encoded values that are safe for use in URLs, since "/" can be + * interpreted as a path delimiter; "+" is the encoded form of a space; and + * "=" is used to separate a name from the corresponding value in an URL + * parameter. + *

    + */ + public class UrlBase64Encoder + : Base64Encoder + { + public UrlBase64Encoder() + { + encodingTable[encodingTable.Length - 2] = (byte) '-'; + encodingTable[encodingTable.Length - 1] = (byte) '_'; + padding = (byte) '.'; + // we must re-create the decoding table with the new encoded values. + InitialiseDecodingTable(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/UrlBase64Encoder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/UrlBase64Encoder.cs.meta new file mode 100644 index 000000000..538c1eb74 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/encoders/UrlBase64Encoder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 39a7d129d5716d94db71754607e15ec5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io.meta new file mode 100644 index 000000000..d963f375f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8d0ebd9539721c34daaadeafccd8ed9d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BaseInputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BaseInputStream.cs new file mode 100644 index 000000000..709068a70 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BaseInputStream.cs @@ -0,0 +1,57 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO +{ + public abstract class BaseInputStream + : Stream + { + public sealed override bool CanRead { get { return true; } } + public sealed override bool CanSeek { get { return false; } } + public sealed override bool CanWrite { get { return false; } } + + public sealed override void Flush() {} + public sealed override long Length { get { throw new NotSupportedException(); } } + public sealed override long Position + { + get { throw new NotSupportedException(); } + set { throw new NotSupportedException(); } + } + + public override int Read(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + + int pos = 0; + try + { + while (pos < count) + { + int b = ReadByte(); + if (b < 0) + break; + + buffer[offset + pos++] = (byte)b; + } + } + catch (IOException) + { + if (pos == 0) + throw; + } + return pos; + } + + public sealed override long Seek(long offset, SeekOrigin origin) { throw new NotSupportedException(); } + public sealed override void SetLength(long value) { throw new NotSupportedException(); } + public sealed override void Write(byte[] buffer, int offset, int count) { throw new NotSupportedException(); } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) { throw new NotSupportedException(); } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BaseInputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BaseInputStream.cs.meta new file mode 100644 index 000000000..f860ae92b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BaseInputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c55c7018496d63408687d3da511e3ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BaseOutputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BaseOutputStream.cs new file mode 100644 index 000000000..96e0b53b9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BaseOutputStream.cs @@ -0,0 +1,49 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO +{ + public abstract class BaseOutputStream + : Stream + { + public sealed override bool CanRead { get { return false; } } + public sealed override bool CanSeek { get { return false; } } + public sealed override bool CanWrite { get { return true; } } + +#if NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER || (UNITY_2021_2_OR_NEWER && (NET_STANDARD_2_0 || NET_STANDARD_2_1)) + public override void CopyTo(Stream destination, int bufferSize) { throw new NotSupportedException(); } +#endif + public override void Flush() {} + public sealed override long Length { get { throw new NotSupportedException(); } } + public sealed override long Position + { + get { throw new NotSupportedException(); } + set { throw new NotSupportedException(); } + } + public sealed override int Read(byte[] buffer, int offset, int count) { throw new NotSupportedException(); } +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public sealed override int Read(Span buffer) { throw new NotSupportedException(); } +#endif + public sealed override long Seek(long offset, SeekOrigin origin) { throw new NotSupportedException(); } + public sealed override void SetLength(long value) { throw new NotSupportedException(); } + + public override void Write(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + + for (int i = 0; i < count; ++i) + { + WriteByte(buffer[offset + i]); + } + } + + public virtual void Write(params byte[] buffer) + { + Write(buffer, 0, buffer.Length); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BaseOutputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BaseOutputStream.cs.meta new file mode 100644 index 000000000..ff2cd329d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BaseOutputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8a6aa30f111ed30408694c452b3e0947 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BinaryReaders.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BinaryReaders.cs new file mode 100644 index 000000000..7040d46dc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BinaryReaders.cs @@ -0,0 +1,98 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO +{ + public static class BinaryReaders + { + public static byte[] ReadBytesFully(BinaryReader binaryReader, int count) + { + byte[] bytes = binaryReader.ReadBytes(count); + if (bytes == null || bytes.Length != count) + throw new EndOfStreamException(); + return bytes; + } + + public static short ReadInt16BigEndian(BinaryReader binaryReader) + { + short n = binaryReader.ReadInt16(); + return BitConverter.IsLittleEndian ? Shorts.ReverseBytes(n) : n; + } + + public static short ReadInt16LittleEndian(BinaryReader binaryReader) + { + short n = binaryReader.ReadInt16(); + return BitConverter.IsLittleEndian ? n : Shorts.ReverseBytes(n); + } + + public static int ReadInt32BigEndian(BinaryReader binaryReader) + { + int n = binaryReader.ReadInt32(); + return BitConverter.IsLittleEndian ? Integers.ReverseBytes(n) : n; + } + + public static int ReadInt32LittleEndian(BinaryReader binaryReader) + { + int n = binaryReader.ReadInt32(); + return BitConverter.IsLittleEndian ? n : Integers.ReverseBytes(n); + } + + public static long ReadInt64BigEndian(BinaryReader binaryReader) + { + long n = binaryReader.ReadInt64(); + return BitConverter.IsLittleEndian ? Longs.ReverseBytes(n) : n; + } + + public static long ReadInt64LittleEndian(BinaryReader binaryReader) + { + long n = binaryReader.ReadInt64(); + return BitConverter.IsLittleEndian ? n : Longs.ReverseBytes(n); + } + + [CLSCompliant(false)] + public static ushort ReadUInt16BigEndian(BinaryReader binaryReader) + { + ushort n = binaryReader.ReadUInt16(); + return BitConverter.IsLittleEndian ? Shorts.ReverseBytes(n) : n; + } + + [CLSCompliant(false)] + public static ushort ReadUInt16LittleEndian(BinaryReader binaryReader) + { + ushort n = binaryReader.ReadUInt16(); + return BitConverter.IsLittleEndian ? n : Shorts.ReverseBytes(n); + } + + [CLSCompliant(false)] + public static uint ReadUInt32BigEndian(BinaryReader binaryReader) + { + uint n = binaryReader.ReadUInt32(); + return BitConverter.IsLittleEndian ? Integers.ReverseBytes(n) : n; + } + + [CLSCompliant(false)] + public static uint ReadUInt32LittleEndian(BinaryReader binaryReader) + { + uint n = binaryReader.ReadUInt32(); + return BitConverter.IsLittleEndian ? n : Integers.ReverseBytes(n); + } + + [CLSCompliant(false)] + public static ulong ReadUInt64BigEndian(BinaryReader binaryReader) + { + ulong n = binaryReader.ReadUInt64(); + return BitConverter.IsLittleEndian ? Longs.ReverseBytes(n) : n; + } + + [CLSCompliant(false)] + public static ulong ReadUInt64LittleEndian(BinaryReader binaryReader) + { + ulong n = binaryReader.ReadUInt64(); + return BitConverter.IsLittleEndian ? n : Longs.ReverseBytes(n); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BinaryReaders.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BinaryReaders.cs.meta new file mode 100644 index 000000000..9c8bf81f3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BinaryReaders.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 363e4c910179d7244a77ced662a52003 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BinaryWriters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BinaryWriters.cs new file mode 100644 index 000000000..fcd3bbce7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BinaryWriters.cs @@ -0,0 +1,90 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO +{ + public static class BinaryWriters + { + public static void WriteInt16BigEndian(BinaryWriter binaryWriter, short n) + { + short bigEndian = BitConverter.IsLittleEndian ? Shorts.ReverseBytes(n) : n; + binaryWriter.Write(bigEndian); + } + + public static void WriteInt16LittleEndian(BinaryWriter binaryWriter, short n) + { + short littleEndian = BitConverter.IsLittleEndian ? n : Shorts.ReverseBytes(n); + binaryWriter.Write(littleEndian); + } + + public static void WriteInt32BigEndian(BinaryWriter binaryWriter, int n) + { + int bigEndian = BitConverter.IsLittleEndian ? Integers.ReverseBytes(n) : n; + binaryWriter.Write(bigEndian); + } + + public static void WriteInt32LittleEndian(BinaryWriter binaryWriter, int n) + { + int littleEndian = BitConverter.IsLittleEndian ? n : Integers.ReverseBytes(n); + binaryWriter.Write(littleEndian); + } + + public static void WriteInt64BigEndian(BinaryWriter binaryWriter, long n) + { + long bigEndian = BitConverter.IsLittleEndian ? Longs.ReverseBytes(n) : n; + binaryWriter.Write(bigEndian); + } + + public static void WriteInt64LittleEndian(BinaryWriter binaryWriter, long n) + { + long littleEndian = BitConverter.IsLittleEndian ? n : Longs.ReverseBytes(n); + binaryWriter.Write(littleEndian); + } + + [CLSCompliant(false)] + public static void WriteUInt16BigEndian(BinaryWriter binaryWriter, ushort n) + { + ushort bigEndian = BitConverter.IsLittleEndian ? Shorts.ReverseBytes(n) : n; + binaryWriter.Write(bigEndian); + } + + [CLSCompliant(false)] + public static void WriteUInt16LittleEndian(BinaryWriter binaryWriter, ushort n) + { + ushort littleEndian = BitConverter.IsLittleEndian ? n : Shorts.ReverseBytes(n); + binaryWriter.Write(littleEndian); + } + + [CLSCompliant(false)] + public static void WriteUInt32BigEndian(BinaryWriter binaryWriter, uint n) + { + uint bigEndian = BitConverter.IsLittleEndian ? Integers.ReverseBytes(n) : n; + binaryWriter.Write(bigEndian); + } + + [CLSCompliant(false)] + public static void WriteUInt32LittleEndian(BinaryWriter binaryWriter, uint n) + { + uint littleEndian = BitConverter.IsLittleEndian ? n : Integers.ReverseBytes(n); + binaryWriter.Write(littleEndian); + } + + [CLSCompliant(false)] + public static void WriteUInt64BigEndian(BinaryWriter binaryWriter, ulong n) + { + ulong bigEndian = BitConverter.IsLittleEndian ? Longs.ReverseBytes(n) : n; + binaryWriter.Write(bigEndian); + } + + [CLSCompliant(false)] + public static void WriteUInt64LittleEndian(BinaryWriter binaryWriter, ulong n) + { + ulong littleEndian = BitConverter.IsLittleEndian ? n : Longs.ReverseBytes(n); + binaryWriter.Write(littleEndian); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BinaryWriters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BinaryWriters.cs.meta new file mode 100644 index 000000000..20c869063 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/BinaryWriters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f41708fc94768343bede3d0cee338ba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/FilterStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/FilterStream.cs new file mode 100644 index 000000000..658dc69cd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/FilterStream.cs @@ -0,0 +1,100 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO +{ + public class FilterStream + : Stream + { + protected readonly Stream s; + + public FilterStream(Stream s) + { + this.s = s ?? throw new ArgumentNullException(nameof(s)); + } + public override bool CanRead + { + get { return s.CanRead; } + } + public override bool CanSeek + { + get { return s.CanSeek; } + } + public override bool CanWrite + { + get { return s.CanWrite; } + } +#if NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER || (UNITY_2021_2_OR_NEWER && (NET_STANDARD_2_0 || NET_STANDARD_2_1)) + public override void CopyTo(Stream destination, int bufferSize) + { + s.CopyTo(destination, bufferSize); + } +#endif + public override void Flush() + { + s.Flush(); + } + public override long Length + { + get { return s.Length; } + } + public override long Position + { + get { return s.Position; } + set { s.Position = value; } + } + public override int Read(byte[] buffer, int offset, int count) + { + return s.Read(buffer, offset, count); + } +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int Read(Span buffer) + { + return s.Read(buffer); + } +#endif + public override int ReadByte() + { + return s.ReadByte(); + } + public override long Seek(long offset, SeekOrigin origin) + { + return s.Seek(offset, origin); + } + public override void SetLength(long value) + { + s.SetLength(value); + } + public override void Write(byte[] buffer, int offset, int count) + { + s.Write(buffer, offset, count); + } +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) + { + s.Write(buffer); + } +#endif + public override void WriteByte(byte value) + { + s.WriteByte(value); + } + protected void Detach(bool disposing) + { + base.Dispose(disposing); + } + protected override void Dispose(bool disposing) + { + if (disposing) + { + s.Dispose(); + } + + base.Dispose(disposing); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/FilterStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/FilterStream.cs.meta new file mode 100644 index 000000000..4c41df04a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/FilterStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3fce67f814432d848a840ddec287f366 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/LimitedInputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/LimitedInputStream.cs new file mode 100644 index 000000000..5359207d2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/LimitedInputStream.cs @@ -0,0 +1,60 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Zlib; +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO +{ + internal class LimitedInputStream + : BaseInputStream + { + private readonly Stream m_stream; + private long m_limit; + + internal LimitedInputStream(Stream stream, long limit) + { + this.m_stream = stream; + this.m_limit = limit; + } + + internal long CurrentLimit => m_limit; + + public override int Read(byte[] buffer, int offset, int count) + { + int numRead = m_stream.Read(buffer, offset, count); + if (numRead > 0) + { + if ((m_limit -= numRead) < 0) + throw new StreamOverflowException("Data Overflow"); + } + return numRead; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int Read(Span buffer) + { + int numRead = m_stream.Read(buffer); + if (numRead > 0) + { + if ((m_limit -= numRead) < 0) + throw new StreamOverflowException("Data Overflow"); + } + return numRead; + } +#endif + + public override int ReadByte() + { + int b = m_stream.ReadByte(); + if (b >= 0) + { + if (--m_limit < 0) + throw new StreamOverflowException("Data Overflow"); + } + return b; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/LimitedInputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/LimitedInputStream.cs.meta new file mode 100644 index 000000000..b14b954f8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/LimitedInputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 51e6e462295cfec4893c651eb750729f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/MemoryInputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/MemoryInputStream.cs new file mode 100644 index 000000000..fa9005c03 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/MemoryInputStream.cs @@ -0,0 +1,23 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO +{ + public class MemoryInputStream + : MemoryStream + { + public MemoryInputStream(byte[] buffer) + : base(buffer, false) + { + } + + public sealed override bool CanWrite + { + get { return false; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/MemoryInputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/MemoryInputStream.cs.meta new file mode 100644 index 000000000..8b3042ab2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/MemoryInputStream.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 3b4331a0210eff64ba6fccaada135d60 +timeCreated: 1572519797 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/MemoryOutputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/MemoryOutputStream.cs new file mode 100644 index 000000000..a2f535b2e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/MemoryOutputStream.cs @@ -0,0 +1,18 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO +{ + public class MemoryOutputStream + : MemoryStream + { + public sealed override bool CanRead + { + get { return false; } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/MemoryOutputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/MemoryOutputStream.cs.meta new file mode 100644 index 000000000..7e386ac32 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/MemoryOutputStream.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 9a5b428a65489d2459d79b9fba08b2be +timeCreated: 1572519797 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/PushbackStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/PushbackStream.cs new file mode 100644 index 000000000..571228b8e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/PushbackStream.cs @@ -0,0 +1,87 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO +{ + public class PushbackStream + : FilterStream + { + private int m_buf = -1; + + public PushbackStream(Stream s) + : base(s) + { + } + +#if NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER || (UNITY_2021_2_OR_NEWER && (NET_STANDARD_2_0 || NET_STANDARD_2_1)) + public override void CopyTo(Stream destination, int bufferSize) + { + if (m_buf != -1) + { + destination.WriteByte((byte)m_buf); + m_buf = -1; + } + + s.CopyTo(destination, bufferSize); + } +#endif + + public override int Read(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + + if (m_buf != -1) + { + if (count < 1) + return 0; + + buffer[offset] = (byte)m_buf; + m_buf = -1; + return 1; + } + + return s.Read(buffer, offset, count); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int Read(Span buffer) + { + if (m_buf != -1) + { + if (buffer.IsEmpty) + return 0; + + buffer[0] = (byte)m_buf; + m_buf = -1; + return 1; + } + + return s.Read(buffer); + } +#endif + + public override int ReadByte() + { + if (m_buf != -1) + { + int tmp = m_buf; + m_buf = -1; + return tmp; + } + + return base.ReadByte(); + } + + public virtual void Unread(int b) + { + if (m_buf != -1) + throw new InvalidOperationException("Can only push back one byte"); + + m_buf = b & 0xFF; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/PushbackStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/PushbackStream.cs.meta new file mode 100644 index 000000000..bca52c14b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/PushbackStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43f5f3bf52001c342945b5bb8fd8fa9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/StreamOverflowException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/StreamOverflowException.cs new file mode 100644 index 000000000..074f7aff2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/StreamOverflowException.cs @@ -0,0 +1,35 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO +{ + [Serializable] + public class StreamOverflowException + : IOException + { + public StreamOverflowException() + : base() + { + } + + public StreamOverflowException(string message) + : base(message) + { + } + + public StreamOverflowException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected StreamOverflowException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/StreamOverflowException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/StreamOverflowException.cs.meta new file mode 100644 index 000000000..fa2660803 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/StreamOverflowException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9bebbf770f250c4ab5bd25ef8f384a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/Streams.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/Streams.cs new file mode 100644 index 000000000..4205534d1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/Streams.cs @@ -0,0 +1,140 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO +{ + public static class Streams + { + private const int BufferSize = 4096; + + public static void Drain(Stream inStr) + { + inStr.CopyTo(Stream.Null, BufferSize); + } + + /// Write the full contents of inStr to the destination stream outStr. + /// Source stream. + /// Destination stream. + /// In case of IO failure. + public static void PipeAll(Stream inStr, Stream outStr) + { + inStr.CopyTo(outStr, BufferSize); + } + + /// Write the full contents of inStr to the destination stream outStr. + /// Source stream. + /// Destination stream. + /// The size of temporary buffer to use. + /// In case of IO failure. + public static void PipeAll(Stream inStr, Stream outStr, int bufferSize) + { + inStr.CopyTo(outStr, bufferSize); + } + + /// + /// Pipe all bytes from inStr to outStr, throwing StreamFlowException if greater + /// than limit bytes in inStr. + /// + /// + /// A + /// + /// + /// A + /// + /// + /// A + /// + /// The number of bytes actually transferred, if not greater than limit + /// + public static long PipeAllLimited(Stream inStr, long limit, Stream outStr) + { + var limited = new LimitedInputStream(inStr, limit); + limited.CopyTo(outStr, BufferSize); + return limit - limited.CurrentLimit; + } + + public static byte[] ReadAll(Stream inStr) + { + MemoryStream buf = new MemoryStream(); + PipeAll(inStr, buf); + return buf.ToArray(); + } + + public static byte[] ReadAll(MemoryStream inStr) + { + return inStr.ToArray(); + } + + public static byte[] ReadAllLimited(Stream inStr, int limit) + { + MemoryStream buf = new MemoryStream(); + PipeAllLimited(inStr, limit, buf); + return buf.ToArray(); + } + + public static int ReadFully(Stream inStr, byte[] buf) + { + return ReadFully(inStr, buf, 0, buf.Length); + } + + public static int ReadFully(Stream inStr, byte[] buf, int off, int len) + { + int totalRead = 0; + while (totalRead < len) + { + int numRead = inStr.Read(buf, off + totalRead, len - totalRead); + if (numRead < 1) + break; + totalRead += numRead; + } + return totalRead; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public static int ReadFully(Stream inStr, Span buffer) + { + int totalRead = 0; + while (totalRead < buffer.Length) + { + int numRead = inStr.Read(buffer[totalRead..]); + if (numRead < 1) + break; + totalRead += numRead; + } + return totalRead; + } +#endif + + public static void ValidateBufferArguments(byte[] buffer, int offset, int count) + { + if (buffer == null) + throw new ArgumentNullException("buffer"); + int available = buffer.Length - offset; + if ((offset | available) < 0) + throw new ArgumentOutOfRangeException("offset"); + int remaining = available - count; + if ((count | remaining) < 0) + throw new ArgumentOutOfRangeException("count"); + } + + /// + public static int WriteBufTo(MemoryStream buf, byte[] output, int offset) + { +#if NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER || UNITY_2021_2_OR_NEWER + if (buf.TryGetBuffer(out var buffer)) + { + buffer.CopyTo(output, offset); + return buffer.Count; + } +#endif + + int size = Convert.ToInt32(buf.Length); + buf.WriteTo(new MemoryStream(output, offset, size)); + return size; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/Streams.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/Streams.cs.meta new file mode 100644 index 000000000..8924fc4e8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/Streams.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7009443e85a87f4499c540687b6cb8c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/TeeInputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/TeeInputStream.cs new file mode 100644 index 000000000..599b956f5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/TeeInputStream.cs @@ -0,0 +1,73 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO +{ + public class TeeInputStream + : BaseInputStream + { + private readonly Stream input, tee; + + public TeeInputStream(Stream input, Stream tee) + { + Debug.Assert(input.CanRead); + Debug.Assert(tee.CanWrite); + + this.input = input; + this.tee = tee; + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + input.Dispose(); + tee.Dispose(); + } + base.Dispose(disposing); + } + + public override int Read(byte[] buffer, int offset, int count) + { + int i = input.Read(buffer, offset, count); + + if (i > 0) + { + tee.Write(buffer, offset, i); + } + + return i; + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override int Read(Span buffer) + { + int i = input.Read(buffer); + + if (i > 0) + { + tee.Write(buffer[..i]); + } + + return i; + } +#endif + + public override int ReadByte() + { + int i = input.ReadByte(); + + if (i >= 0) + { + tee.WriteByte((byte)i); + } + + return i; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/TeeInputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/TeeInputStream.cs.meta new file mode 100644 index 000000000..a6ab62700 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/TeeInputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ae88e55e5d7dac54aa31654c14619f10 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/TeeOutputStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/TeeOutputStream.cs new file mode 100644 index 000000000..3962c848e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/TeeOutputStream.cs @@ -0,0 +1,55 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Diagnostics; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO +{ + public class TeeOutputStream + : BaseOutputStream + { + private readonly Stream output, tee; + + public TeeOutputStream(Stream output, Stream tee) + { + Debug.Assert(output.CanWrite); + Debug.Assert(tee.CanWrite); + + this.output = output; + this.tee = tee; + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + output.Dispose(); + tee.Dispose(); + } + base.Dispose(disposing); + } + + public override void Write(byte[] buffer, int offset, int count) + { + output.Write(buffer, offset, count); + tee.Write(buffer, offset, count); + } + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || _UNITY_2021_2_OR_NEWER_ + public override void Write(ReadOnlySpan buffer) + { + output.Write(buffer); + tee.Write(buffer); + } +#endif + + public override void WriteByte(byte value) + { + output.WriteByte(value); + tee.WriteByte(value); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/TeeOutputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/TeeOutputStream.cs.meta new file mode 100644 index 000000000..a2c47db65 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/TeeOutputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 94d20141b69679e4293e7365906dbe4b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression.meta new file mode 100644 index 000000000..f96feb455 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5722b9b60bf804d4cb4e3a0bd11b29a0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression/Bzip2.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression/Bzip2.cs new file mode 100644 index 000000000..003b92a87 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression/Bzip2.cs @@ -0,0 +1,25 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO.Compression +{ + using Impl = Utilities.Bzip2; + + internal static class Bzip2 + { + internal static Stream CompressOutput(Stream stream, bool leaveOpen = false) + { + return leaveOpen + ? new Impl.CBZip2OutputStreamLeaveOpen(stream) + : new Impl.CBZip2OutputStream(stream); + } + + internal static Stream DecompressInput(Stream stream) + { + return new Impl.CBZip2InputStream(stream); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression/Bzip2.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression/Bzip2.cs.meta new file mode 100644 index 000000000..7a924fb46 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression/Bzip2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 432a2f67bb53c314e9868625567e180e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression/ZLib.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression/ZLib.cs new file mode 100644 index 000000000..dc4262c28 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression/ZLib.cs @@ -0,0 +1,50 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +#if NET6_0_OR_GREATER +using System.IO.Compression; +#else +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Zlib; +#endif + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO.Compression +{ + internal static class ZLib + { + internal static Stream CompressOutput(Stream stream, int zlibCompressionLevel, bool leaveOpen = false) + { +#if NET6_0_OR_GREATER + return new ZLibStream(stream, GetCompressionLevel(zlibCompressionLevel), leaveOpen); +#else + return leaveOpen + ? new ZOutputStreamLeaveOpen(stream, zlibCompressionLevel, false) + : new ZOutputStream(stream, zlibCompressionLevel, false); +#endif + } + + internal static Stream DecompressInput(Stream stream) + { +#if NET6_0_OR_GREATER + return new ZLibStream(stream, CompressionMode.Decompress, leaveOpen: false); +#else + return new ZInputStream(stream); +#endif + } + +#if NET6_0_OR_GREATER + internal static CompressionLevel GetCompressionLevel(int zlibCompressionLevel) + { + return zlibCompressionLevel switch + { + 0 => CompressionLevel.NoCompression, + 1 or 2 or 3 => CompressionLevel.Fastest, + 7 or 8 or 9 => CompressionLevel.SmallestSize, + _ => CompressionLevel.Optimal, + }; + } +#endif + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression/ZLib.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression/ZLib.cs.meta new file mode 100644 index 000000000..3f0846c43 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression/ZLib.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2cef2db8934718a42b4eb5995cd362b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression/Zip.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression/Zip.cs new file mode 100644 index 000000000..4219452b9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression/Zip.cs @@ -0,0 +1,37 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System.IO; + +#if NET6_0_OR_GREATER +using System.IO.Compression; +#else +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Zlib; +#endif + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO.Compression +{ + internal static class Zip + { + internal static Stream CompressOutput(Stream stream, int zlibCompressionLevel, bool leaveOpen = false) + { +#if NET6_0_OR_GREATER + return new DeflateStream(stream, ZLib.GetCompressionLevel(zlibCompressionLevel), leaveOpen); +#else + return leaveOpen + ? new ZOutputStreamLeaveOpen(stream, zlibCompressionLevel, true) + : new ZOutputStream(stream, zlibCompressionLevel, true); +#endif + } + + internal static Stream DecompressInput(Stream stream) + { +#if NET6_0_OR_GREATER + return new DeflateStream(stream, CompressionMode.Decompress, leaveOpen: false); +#else + return new ZInputStream(stream, true); +#endif + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression/Zip.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression/Zip.cs.meta new file mode 100644 index 000000000..29903e7c9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/compression/Zip.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b165e8b3c4017df44b2805807d06513f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem.meta new file mode 100644 index 000000000..64312356c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: facfbd283a257c247b7788a4852da32a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemGenerationException.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemGenerationException.cs new file mode 100644 index 000000000..f61aca695 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemGenerationException.cs @@ -0,0 +1,34 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Runtime.Serialization; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO.Pem +{ + [Serializable] + public class PemGenerationException + : Exception + { + public PemGenerationException() + : base() + { + } + + public PemGenerationException(string message) + : base(message) + { + } + + public PemGenerationException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected PemGenerationException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemGenerationException.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemGenerationException.cs.meta new file mode 100644 index 000000000..f8c7e60a5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemGenerationException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d64f3f17b41a69c4e9f8146e9a630aa6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemHeader.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemHeader.cs new file mode 100644 index 000000000..62df2eba3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemHeader.cs @@ -0,0 +1,64 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO.Pem +{ + public class PemHeader + { + private string name; + private string val; + + public PemHeader(string name, string val) + { + this.name = name; + this.val = val; + } + + public virtual string Name + { + get { return name; } + } + + public virtual string Value + { + get { return val; } + } + + public override int GetHashCode() + { + return GetHashCode(this.name) + 31 * GetHashCode(this.val); + } + + public override bool Equals(object obj) + { + if (obj == this) + return true; + + if (!(obj is PemHeader)) + return false; + + PemHeader other = (PemHeader)obj; + + return Org.BouncyCastle.Utilities.Platform.Equals(this.name, other.name) + && Org.BouncyCastle.Utilities.Platform.Equals(this.val, other.val); + } + + private int GetHashCode(string s) + { + if (s == null) + { + return 1; + } + + return s.GetHashCode(); + } + + public override string ToString() + { + return name + ":" + val; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemHeader.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemHeader.cs.meta new file mode 100644 index 000000000..5c0d2f1d0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemHeader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6145fa38ebb0c79458ea0c15c317525d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemObject.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemObject.cs new file mode 100644 index 000000000..c4da1a5a7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemObject.cs @@ -0,0 +1,49 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO.Pem +{ + public class PemObject + : PemObjectGenerator + { + private string type; + private IList headers; + private byte[] content; + + public PemObject(string type, byte[] content) + : this(type, new List(), content) + { + } + + public PemObject(string type, IList headers, byte[] content) + { + this.type = type; + this.headers = new List(headers); + this.content = content; + } + + public string Type + { + get { return type; } + } + + public IList Headers + { + get { return headers; } + } + + public byte[] Content + { + get { return content; } + } + + public PemObject Generate() + { + return this; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemObject.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemObject.cs.meta new file mode 100644 index 000000000..3c0c8e0c4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd96e7dbd869965419cb9e8ee3aad2ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemObjectGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemObjectGenerator.cs new file mode 100644 index 000000000..d2cfd8e27 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemObjectGenerator.cs @@ -0,0 +1,17 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO.Pem +{ + public interface PemObjectGenerator + { + /// + /// A + /// + /// + PemObject Generate(); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemObjectGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemObjectGenerator.cs.meta new file mode 100644 index 000000000..12f1a17a9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemObjectGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ae784c7acdea52e429e2586f22f7d6ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemObjectParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemObjectParser.cs new file mode 100644 index 000000000..48ba57090 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemObjectParser.cs @@ -0,0 +1,21 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO.Pem +{ + public interface PemObjectParser + { + /// + /// A + /// + /// + /// An + /// + /// + object ParseObject(PemObject obj); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemObjectParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemObjectParser.cs.meta new file mode 100644 index 000000000..71255e2ef --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemObjectParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ed04d49054ba1445bb5b1c03b5cc613 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemReader.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemReader.cs new file mode 100644 index 000000000..48a2b2f33 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemReader.cs @@ -0,0 +1,377 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO.Pem +{ + public class PemReader + : IDisposable + { + private readonly TextReader reader; + private readonly MemoryStream buffer; + private readonly StreamWriter textBuffer; + private readonly List pushback = new List(); + int c = 0; + + public PemReader(TextReader reader) + { + this.reader = reader ?? throw new ArgumentNullException(nameof(reader)); + this.buffer = new MemoryStream(); + this.textBuffer = new StreamWriter(buffer); + } + + #region IDisposable + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + reader.Dispose(); + } + } + + #endregion + + public TextReader Reader + { + get { return reader; } + } + + + /// + /// A + /// + /// + public PemObject ReadPemObject() + { + + // + // Look for BEGIN + // + + for (;;) + { + + // Seek a leading dash, ignore anything up to that point. + if (!seekDash()) + { + // There are no pem objects here. + return null; + } + + + // consume dash [-----]BEGIN ... + if (!consumeDash()) + { + throw new IOException("no data after consuming leading dashes"); + } + + + skipWhiteSpace(); + + + if (!expect("BEGIN")) + { + continue; + } + + break; + + } + + + skipWhiteSpace(); + + // + // Consume type, accepting whitespace + // + + if (!bufferUntilStopChar('-',false) ) + { + throw new IOException("ran out of data before consuming type"); + } + + string type = bufferedString().Trim(); + + + // Consume dashes after type. + + if (!consumeDash()) + { + throw new IOException("ran out of data consuming header"); + } + + skipWhiteSpace(); + + + // + // Read ahead looking for headers. + // Look for a colon for up to 64 characters, as an indication there might be a header. + // + + var headers = new List(); + + while (seekColon(64)) + { + + if (!bufferUntilStopChar(':',false)) + { + throw new IOException("ran out of data reading header key value"); + } + + string key = bufferedString().Trim(); + + + c = Read(); + if (c != ':') + { + throw new IOException("expected colon"); + } + + + // + // We are going to look for well formed headers, if they do not end with a "LF" we cannot + // discern where they end. + // + + if (!bufferUntilStopChar('\n', false)) // Now read to the end of the line. + { + throw new IOException("ran out of data before consuming header value"); + } + + skipWhiteSpace(); + + string value = bufferedString().Trim(); + headers.Add(new PemHeader(key,value)); + } + + + // + // Consume payload, ignoring all white space until we encounter a '-' + // + + skipWhiteSpace(); + + if (!bufferUntilStopChar('-',true)) + { + throw new IOException("ran out of data before consuming payload"); + } + + string payload = bufferedString(); + + // Seek the start of the end. + if (!seekDash()) + { + throw new IOException("did not find leading '-'"); + } + + if (!consumeDash()) + { + throw new IOException("no data after consuming trailing dashes"); + } + + if (!expect("END "+type)) + { + throw new IOException("END "+type+" was not found."); + } + + + + if (!seekDash()) + { + throw new IOException("did not find ending '-'"); + } + + + // consume trailing dashes. + consumeDash(); + + + return new PemObject(type, headers, Base64.Decode(payload)); + + } + + + + private string bufferedString() + { + textBuffer.Flush(); + string value = Strings.FromUtf8ByteArray(buffer.ToArray()); + buffer.Position = 0; + buffer.SetLength(0); + return value; + } + + + private bool seekDash() + { + c = 0; + while((c = Read()) >=0) + { + if (c == '-') + { + break; + } + } + + PushBack(c); + + return c == '-'; + } + + + /// + /// Seek ':" up to the limit. + /// + /// + /// + private bool seekColon(int upTo) + { + c = 0; + bool colonFound = false; + var read = new List(); + + for (; upTo>=0 && c >=0; upTo--) + { + c = Read(); + read.Add(c); + if (c == ':') + { + colonFound = true; + break; + } + } + + while(read.Count>0) + { + PushBack((int)read[read.Count-1]); + read.RemoveAt(read.Count-1); + } + + return colonFound; + } + + + + /// + /// Consume the dashes + /// + /// + private bool consumeDash() + { + c = 0; + while ((c = Read()) >= 0) + { + if (c != '-') + { + break; + } + } + + PushBack(c); + + return c != -1; + } + + /// + /// Skip white space leave char in stream. + /// + private void skipWhiteSpace() + { + while ((c = Read()) >= 0) + { + if (c > ' ') + { + break; + } + } + PushBack(c); + } + + /// + /// Read forward consuming the expected string. + /// + /// expected string + /// false if not consumed + + private bool expect(string value) + { + for (int t=0; t + /// Consume until dash. + /// + /// true if stream end not met + private bool bufferUntilStopChar(char stopChar, bool skipWhiteSpace) + { + while ((c = Read()) >= 0) + { + if (skipWhiteSpace && c <=' ') + { + continue; + } + + if (c != stopChar) + { + textBuffer.Write((char)c); + textBuffer.Flush(); + + } else + { + PushBack(c); + break; + } + } + + return c > -1; + } + + private void PushBack(int value) + { + if (pushback.Count == 0) + { + pushback.Add(value); + } else + { + pushback.Insert(0, value); + } + } + + private int Read() + { + if (pushback.Count > 0) + { + int i = pushback[0]; + pushback.RemoveAt(0); + return i; + } + + return reader.Read(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemReader.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemReader.cs.meta new file mode 100644 index 000000000..088a495a9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemReader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f26fdb1978588c94ba940413500381e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemWriter.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemWriter.cs new file mode 100644 index 000000000..365afe145 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemWriter.cs @@ -0,0 +1,139 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO.Pem +{ + /** + * A generic PEM writer, based on RFC 1421 + */ + public class PemWriter + : IDisposable + { + private const int LineLength = 64; + + private readonly TextWriter writer; + private readonly int nlLength; + private char[] buf = new char[LineLength]; + + /** + * Base constructor. + * + * @param out output stream to use. + */ + public PemWriter(TextWriter writer) + { + this.writer = writer ?? throw new ArgumentNullException(nameof(writer)); + this.nlLength = Environment.NewLine.Length; + } + + #region IDisposable + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + writer.Dispose(); + } + } + + #endregion + + public TextWriter Writer + { + get { return writer; } + } + + /** + * Return the number of bytes or characters required to contain the + * passed in object if it is PEM encoded. + * + * @param obj pem object to be output + * @return an estimate of the number of bytes + */ + public int GetOutputSize(PemObject obj) + { + // BEGIN and END boundaries. + int size = (2 * (obj.Type.Length + 10 + nlLength)) + 6 + 4; + + if (obj.Headers.Count > 0) + { + foreach (PemHeader header in obj.Headers) + { + size += header.Name.Length + ": ".Length + header.Value.Length + nlLength; + } + + size += nlLength; + } + + // base64 encoding + int dataLen = ((obj.Content.Length + 2) / 3) * 4; + + size += dataLen + (((dataLen + LineLength - 1) / LineLength) * nlLength); + + return size; + } + + public void WriteObject(PemObjectGenerator objGen) + { + PemObject obj = objGen.Generate(); + + WritePreEncapsulationBoundary(obj.Type); + + if (obj.Headers.Count > 0) + { + foreach (PemHeader header in obj.Headers) + { + writer.Write(header.Name); + writer.Write(": "); + writer.WriteLine(header.Value); + } + + writer.WriteLine(); + } + + WriteEncoded(obj.Content); + WritePostEncapsulationBoundary(obj.Type); + } + + private void WriteEncoded(byte[] bytes) + { + bytes = Base64.Encode(bytes); + + for (int i = 0; i < bytes.Length; i += buf.Length) + { + int index = 0; + while (index != buf.Length) + { + if ((i + index) >= bytes.Length) + break; + + buf[index] = (char)bytes[i + index]; + index++; + } + writer.WriteLine(buf, 0, index); + } + } + + private void WritePreEncapsulationBoundary(string type) + { + writer.WriteLine("-----BEGIN " + type + "-----"); + } + + private void WritePostEncapsulationBoundary(string type) + { + writer.WriteLine("-----END " + type + "-----"); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemWriter.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemWriter.cs.meta new file mode 100644 index 000000000..b2fc9fa9b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/io/pem/PemWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 32f18cc53c19448418b7b334997da7a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/net.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/net.meta new file mode 100644 index 000000000..59e276800 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/net.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ef95faa5f016dcf42829616d382ec0fd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/net/IPAddress.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/net/IPAddress.cs new file mode 100644 index 000000000..58f62c1f2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/net/IPAddress.cs @@ -0,0 +1,201 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Globalization; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Net +{ + public class IPAddress + { + /** + * Validate the given IPv4 or IPv6 address. + * + * @param address the IP address as a string. + * + * @return true if a valid address, false otherwise + */ + public static bool IsValid( + string address) + { + return IsValidIPv4(address) || IsValidIPv6(address); + } + + /** + * Validate the given IPv4 or IPv6 address and netmask. + * + * @param address the IP address as a string. + * + * @return true if a valid address with netmask, false otherwise + */ + public static bool IsValidWithNetMask( + string address) + { + return IsValidIPv4WithNetmask(address) || IsValidIPv6WithNetmask(address); + } + + /** + * Validate the given IPv4 address. + * + * @param address the IP address as a string. + * + * @return true if a valid IPv4 address, false otherwise + */ + public static bool IsValidIPv4( + string address) + { + try + { + return unsafeIsValidIPv4(address); + } + catch (FormatException) {} + catch (OverflowException) {} + return false; + } + + private static bool unsafeIsValidIPv4( + string address) + { + if (address.Length == 0) + return false; + + int octets = 0; + string temp = address + "."; + + int pos; + int start = 0; + while (start < temp.Length + && (pos = temp.IndexOf('.', start)) > start) + { + if (octets == 4) + return false; + + string octetStr = temp.Substring(start, pos - start); + int octet = int.Parse(octetStr); + + if (octet < 0 || octet > 255) + return false; + + start = pos + 1; + octets++; + } + + return octets == 4; + } + + public static bool IsValidIPv4WithNetmask( + string address) + { + int index = address.IndexOf('/'); + string mask = address.Substring(index + 1); + + return (index > 0) && IsValidIPv4(address.Substring(0, index)) + && (IsValidIPv4(mask) || IsMaskValue(mask, 32)); + } + + public static bool IsValidIPv6WithNetmask( + string address) + { + int index = address.IndexOf('/'); + string mask = address.Substring(index + 1); + + return (index > 0) && (IsValidIPv6(address.Substring(0, index)) + && (IsValidIPv6(mask) || IsMaskValue(mask, 128))); + } + + private static bool IsMaskValue( + string component, + int size) + { + int val = int.Parse(component); + try + { + return val >= 0 && val <= size; + } + catch (FormatException) {} + catch (OverflowException) {} + return false; + } + + /** + * Validate the given IPv6 address. + * + * @param address the IP address as a string. + * + * @return true if a valid IPv4 address, false otherwise + */ + public static bool IsValidIPv6( + string address) + { + try + { + return unsafeIsValidIPv6(address); + } + catch (FormatException) {} + catch (OverflowException) {} + return false; + } + + private static bool unsafeIsValidIPv6( + string address) + { + if (address.Length == 0) + { + return false; + } + + int octets = 0; + + string temp = address + ":"; + bool doubleColonFound = false; + int pos; + int start = 0; + while (start < temp.Length + && (pos = temp.IndexOf(':', start)) >= start) + { + if (octets == 8) + { + return false; + } + + if (start != pos) + { + string value = temp.Substring(start, pos - start); + + if (pos == (temp.Length - 1) && value.IndexOf('.') > 0) + { + if (!IsValidIPv4(value)) + { + return false; + } + + octets++; // add an extra one as address covers 2 words. + } + else + { + string octetStr = temp.Substring(start, pos - start); + int octet = int.Parse(octetStr, NumberStyles.AllowHexSpecifier); + + if (octet < 0 || octet > 0xffff) + return false; + } + } + else + { + if (pos != 1 && pos != temp.Length - 1 && doubleColonFound) + { + return false; + } + doubleColonFound = true; + } + start = pos + 1; + octets++; + } + + return octets == 8 || doubleColonFound; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/net/IPAddress.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/net/IPAddress.cs.meta new file mode 100644 index 000000000..00fbfebcc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/net/IPAddress.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c829f456cc2252e4da1989ca55f8c0b8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib.meta new file mode 100644 index 000000000..7218d6d8d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4d3c9d4702c5ca34fa5b819f8f2c5850 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/Adler32.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/Adler32.cs new file mode 100644 index 000000000..422d26740 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/Adler32.cs @@ -0,0 +1,92 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +/* + * $Id: Adler32.cs,v 1.1 2006-07-31 13:59:25 bouncy Exp $ + * +Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. 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. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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. + */ +/* + * This program is based on zlib-1.1.3, so all credit should go authors + * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) + * and contributors of zlib. + */ + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Zlib { + + internal sealed class Adler32{ + + // largest prime smaller than 65536 + private const int BASE=65521; + // NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 + private const int NMAX=5552; + + internal long adler32(long adler, byte[] buf, int index, int len){ + if(buf == null){ return 1L; } + + long s1=adler&0xffff; + long s2=(adler>>16)&0xffff; + int k; + + while(len > 0) { + k=len=16){ + s1+=buf[index++]&0xff; s2+=s1; + s1+=buf[index++]&0xff; s2+=s1; + s1+=buf[index++]&0xff; s2+=s1; + s1+=buf[index++]&0xff; s2+=s1; + s1+=buf[index++]&0xff; s2+=s1; + s1+=buf[index++]&0xff; s2+=s1; + s1+=buf[index++]&0xff; s2+=s1; + s1+=buf[index++]&0xff; s2+=s1; + s1+=buf[index++]&0xff; s2+=s1; + s1+=buf[index++]&0xff; s2+=s1; + s1+=buf[index++]&0xff; s2+=s1; + s1+=buf[index++]&0xff; s2+=s1; + s1+=buf[index++]&0xff; s2+=s1; + s1+=buf[index++]&0xff; s2+=s1; + s1+=buf[index++]&0xff; s2+=s1; + s1+=buf[index++]&0xff; s2+=s1; + k-=16; + } + if(k!=0){ + do{ + s1+=buf[index++]&0xff; s2+=s1; + } + while(--k!=0); + } + s1%=BASE; + s2%=BASE; + } + return (s2<<16)|s1; + } + + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/Adler32.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/Adler32.cs.meta new file mode 100644 index 000000000..2b21780fa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/Adler32.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2cfff793e226e3941b78bc3b1d5a873b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/Deflate.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/Deflate.cs new file mode 100644 index 000000000..26c486da6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/Deflate.cs @@ -0,0 +1,1638 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +/* + * $Id: Deflate.cs,v 1.2 2008-05-10 09:35:40 bouncy Exp $ + * +Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. 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. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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. + */ +/* + * This program is based on zlib-1.1.3, so all credit should go authors + * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) + * and contributors of zlib. + */ + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Zlib { + + public sealed class Deflate{ + + private const int MAX_MEM_LEVEL=9; + + private const int Z_DEFAULT_COMPRESSION=-1; + + private const int MAX_WBITS=15; // 32K LZ77 window + private const int DEF_MEM_LEVEL=8; + + internal class Config{ + internal int good_length; // reduce lazy search above this match length + internal int max_lazy; // do not perform lazy search above this match length + internal int nice_length; // quit search above this match length + internal int max_chain; + internal int func; + internal Config(int good_length, int max_lazy, + int nice_length, int max_chain, int func){ + this.good_length=good_length; + this.max_lazy=max_lazy; + this.nice_length=nice_length; + this.max_chain=max_chain; + this.func=func; + } + } + + private const int STORED=0; + private const int FAST=1; + private const int SLOW=2; + private static readonly Config[] config_table; + + static Deflate(){ + config_table=new Config[10]; + // good lazy nice chain + config_table[0]=new Config(0, 0, 0, 0, STORED); + config_table[1]=new Config(4, 4, 8, 4, FAST); + config_table[2]=new Config(4, 5, 16, 8, FAST); + config_table[3]=new Config(4, 6, 32, 32, FAST); + + config_table[4]=new Config(4, 4, 16, 16, SLOW); + config_table[5]=new Config(8, 16, 32, 32, SLOW); + config_table[6]=new Config(8, 16, 128, 128, SLOW); + config_table[7]=new Config(8, 32, 128, 256, SLOW); + config_table[8]=new Config(32, 128, 258, 1024, SLOW); + config_table[9]=new Config(32, 258, 258, 4096, SLOW); + } + + private static readonly string[] z_errmsg = { + "need dictionary", // Z_NEED_DICT 2 + "stream end", // Z_STREAM_END 1 + "", // Z_OK 0 + "file error", // Z_ERRNO (-1) + "stream error", // Z_STREAM_ERROR (-2) + "data error", // Z_DATA_ERROR (-3) + "insufficient memory", // Z_MEM_ERROR (-4) + "buffer error", // Z_BUF_ERROR (-5) + "incompatible version",// Z_VERSION_ERROR (-6) + "" + }; + + // block not completed, need more input or more output + private const int NeedMore=0; + + // block flush performed + private const int BlockDone=1; + + // finish started, need only more output at next deflate + private const int FinishStarted=2; + + // finish done, accept no more input or output + private const int FinishDone=3; + + // preset dictionary flag in zlib header + private const int PRESET_DICT=0x20; + + private const int Z_FILTERED=1; + private const int Z_HUFFMAN_ONLY=2; + private const int Z_DEFAULT_STRATEGY=0; + + private const int Z_NO_FLUSH=0; + private const int Z_PARTIAL_FLUSH=1; + private const int Z_SYNC_FLUSH=2; + private const int Z_FULL_FLUSH=3; + private const int Z_FINISH=4; + + private const int Z_OK=0; + private const int Z_STREAM_END=1; + private const int Z_NEED_DICT=2; + private const int Z_ERRNO=-1; + private const int Z_STREAM_ERROR=-2; + private const int Z_DATA_ERROR=-3; + private const int Z_MEM_ERROR=-4; + private const int Z_BUF_ERROR=-5; + private const int Z_VERSION_ERROR=-6; + + private const int INIT_STATE=42; + private const int BUSY_STATE=113; + private const int FINISH_STATE=666; + + // The deflate compression method + private const int Z_DEFLATED=8; + + private const int STORED_BLOCK=0; + private const int STATIC_TREES=1; + private const int DYN_TREES=2; + + // The three kinds of block type + private const int Z_BINARY=0; + private const int Z_ASCII=1; + private const int Z_UNKNOWN=2; + + private const int Buf_size=8*2; + + // repeat previous bit length 3-6 times (2 bits of repeat count) + private const int REP_3_6=16; + + // repeat a zero length 3-10 times (3 bits of repeat count) + private const int REPZ_3_10=17; + + // repeat a zero length 11-138 times (7 bits of repeat count) + private const int REPZ_11_138=18; + + private const int MIN_MATCH=3; + private const int MAX_MATCH=258; + private const int MIN_LOOKAHEAD=(MAX_MATCH+MIN_MATCH+1); + + private const int MAX_BITS=15; + private const int D_CODES=30; + private const int BL_CODES=19; + private const int LENGTH_CODES=29; + private const int LITERALS=256; + private const int L_CODES=(LITERALS+1+LENGTH_CODES); + private const int HEAP_SIZE=(2*L_CODES+1); + + private const int END_BLOCK=256; + + internal ZStream strm; // pointer back to this zlib stream + internal int status; // as the name implies + internal byte[] pending_buf; // output still pending + internal int pending_out; // next pending byte to output to the stream + internal int pending; // nb of bytes in the pending buffer + internal int noheader; // suppress zlib header and adler32 + internal byte data_type; // UNKNOWN, BINARY or ASCII + internal byte method; // STORED (for zip only) or DEFLATED + internal int last_flush; // value of flush param for previous deflate call + + internal int w_size; // LZ77 window size (32K by default) + internal int w_bits; // log2(w_size) (8..16) + internal int w_mask; // w_size - 1 + + internal byte[] window; + // Sliding window. Input bytes are read into the second half of the window, + // and move to the first half later to keep a dictionary of at least wSize + // bytes. With this organization, matches are limited to a distance of + // wSize-MAX_MATCH bytes, but this ensures that IO is always + // performed with a length multiple of the block size. Also, it limits + // the window size to 64K, which is quite useful on MSDOS. + // To do: use the user input buffer as sliding window. + + internal int window_size; + // Actual size of window: 2*wSize, except when the user input buffer + // is directly used as sliding window. + + internal short[] prev; + // Link to older string with same hash index. To limit the size of this + // array to 64K, this link is maintained only for the last 32K strings. + // An index in this array is thus a window index modulo 32K. + + internal short[] head; // Heads of the hash chains or NIL. + + internal int ins_h; // hash index of string to be inserted + internal int hash_size; // number of elements in hash table + internal int hash_bits; // log2(hash_size) + internal int hash_mask; // hash_size-1 + + // Number of bits by which ins_h must be shifted at each input + // step. It must be such that after MIN_MATCH steps, the oldest + // byte no longer takes part in the hash key, that is: + // hash_shift * MIN_MATCH >= hash_bits + internal int hash_shift; + + // Window position at the beginning of the current output block. Gets + // negative when the window is moved backwards. + + internal int block_start; + + internal int match_length; // length of best match + internal int prev_match; // previous match + internal int match_available; // set if previous match exists + internal int strstart; // start of string to insert + internal int match_start; // start of matching string + internal int lookahead; // number of valid bytes ahead in window + + // Length of the best match at previous step. Matches not greater than this + // are discarded. This is used in the lazy match evaluation. + internal int prev_length; + + // To speed up deflation, hash chains are never searched beyond this + // length. A higher limit improves compression ratio but degrades the speed. + internal int max_chain_length; + + // Attempt to find a better match only when the current match is strictly + // smaller than this value. This mechanism is used only for compression + // levels >= 4. + internal int max_lazy_match; + + // Insert new strings in the hash table only if the match length is not + // greater than this length. This saves time but degrades compression. + // max_insert_length is used only for compression levels <= 3. + + internal int level; // compression level (1..9) + internal int strategy; // favor or force Huffman coding + + // Use a faster search when the previous match is longer than this + internal int good_match; + + // Stop searching when current match exceeds this + internal int nice_match; + + internal short[] dyn_ltree; // literal and length tree + internal short[] dyn_dtree; // distance tree + internal short[] bl_tree; // Huffman tree for bit lengths + + internal Tree l_desc=new Tree(); // desc for literal tree + internal Tree d_desc=new Tree(); // desc for distance tree + internal Tree bl_desc=new Tree(); // desc for bit length tree + + // number of codes at each bit length for an optimal tree + internal short[] bl_count=new short[MAX_BITS+1]; + + // heap used to build the Huffman trees + internal int[] heap=new int[2*L_CODES+1]; + + internal int heap_len; // number of elements in the heap + internal int heap_max; // element of largest frequency + // The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + // The same heap array is used to build all trees. + + // Depth of each subtree used as tie breaker for trees of equal frequency + internal byte[] depth=new byte[2*L_CODES+1]; + + internal int l_buf; // index for literals or lengths */ + + // Size of match buffer for literals/lengths. There are 4 reasons for + // limiting lit_bufsize to 64K: + // - frequencies can be kept in 16 bit counters + // - if compression is not successful for the first block, all input + // data is still in the window so we can still emit a stored block even + // when input comes from standard input. (This can also be done for + // all blocks if lit_bufsize is not greater than 32K.) + // - if compression is not successful for a file smaller than 64K, we can + // even emit a stored file instead of a stored block (saving 5 bytes). + // This is applicable only for zip (not gzip or zlib). + // - creating new Huffman trees less frequently may not provide fast + // adaptation to changes in the input data statistics. (Take for + // example a binary file with poorly compressible code followed by + // a highly compressible string table.) Smaller buffer sizes give + // fast adaptation but have of course the overhead of transmitting + // trees more frequently. + // - I can't count above 4 + internal int lit_bufsize; + + internal int last_lit; // running index in l_buf + + // Buffer for distances. To simplify the code, d_buf and l_buf have + // the same number of elements. To use different lengths, an extra flag + // array would be necessary. + + internal int d_buf; // index of pendig_buf + + internal int opt_len; // bit length of current block with optimal trees + internal int static_len; // bit length of current block with static trees + internal int matches; // number of string matches in current block + internal int last_eob_len; // bit length of EOB code for last block + + // Output buffer. bits are inserted starting at the bottom (least + // significant bits). + internal uint bi_buf; + + // Number of valid bits in bi_buf. All bits above the last valid bit + // are always zero. + internal int bi_valid; + + internal Deflate(){ + dyn_ltree=new short[HEAP_SIZE*2]; + dyn_dtree=new short[(2*D_CODES+1)*2]; // distance tree + bl_tree=new short[(2*BL_CODES+1)*2]; // Huffman tree for bit lengths + } + + internal void lm_init() { + window_size=2*w_size; + + head[hash_size-1]=0; + for(int i=0; i= 3; max_blindex--) { + if (bl_tree[Tree.bl_order[max_blindex]*2+1] != 0) break; + } + // Update opt_len to include the bit length tree and counts + opt_len += 3*(max_blindex+1) + 5+5+4; + + return max_blindex; + } + + + // Send the header for a block using dynamic Huffman trees: the counts, the + // lengths of the bit length codes, the literal tree and the distance tree. + // IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + internal void send_all_trees(int lcodes, int dcodes, int blcodes){ + int rank; // index in bl_order + + send_bits(lcodes-257, 5); // not +255 as stated in appnote.txt + send_bits(dcodes-1, 5); + send_bits(blcodes-4, 4); // not -3 as stated in appnote.txt + for (rank = 0; rank < blcodes; rank++) { + send_bits(bl_tree[Tree.bl_order[rank]*2+1], 3); + } + send_tree(dyn_ltree, lcodes-1); // literal tree + send_tree(dyn_dtree, dcodes-1); // distance tree + } + + // Send a literal or distance tree in compressed form, using the codes in + // bl_tree. + internal void send_tree (short[] tree,// the tree to be sent + int max_code // and its largest code of non zero frequency + ){ + int n; // iterates over all tree elements + int prevlen = -1; // last emitted length + int curlen; // length of current code + int nextlen = tree[0*2+1]; // length of next code + int count = 0; // repeat count of the current code + int max_count = 7; // max repeat count + int min_count = 4; // min repeat count + + if (nextlen == 0){ max_count = 138; min_count = 3; } + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; nextlen = tree[(n+1)*2+1]; + if(++count < max_count && curlen == nextlen) { + continue; + } + else if(count < min_count) { + do { send_code(curlen, bl_tree); } while (--count != 0); + } + else if(curlen != 0){ + if(curlen != prevlen){ + send_code(curlen, bl_tree); count--; + } + send_code(REP_3_6, bl_tree); + send_bits(count-3, 2); + } + else if(count <= 10){ + send_code(REPZ_3_10, bl_tree); + send_bits(count-3, 3); + } + else{ + send_code(REPZ_11_138, bl_tree); + send_bits(count-11, 7); + } + count = 0; prevlen = curlen; + if(nextlen == 0){ + max_count = 138; min_count = 3; + } + else if(curlen == nextlen){ + max_count = 6; min_count = 3; + } + else{ + max_count = 7; min_count = 4; + } + } + } + + // Output a byte on the stream. + // IN assertion: there is enough room in pending_buf. + internal void put_byte(byte[] p, int start, int len){ + System.Array.Copy(p, start, pending_buf, pending, len); + pending+=len; + } + + internal void put_byte(byte c){ + pending_buf[pending++]=c; + } + internal void put_short(int w) { + pending_buf[pending++]=(byte)(w/*&0xff*/); + pending_buf[pending++]=(byte)(w>>8); + } + internal void putShortMSB(int b){ + pending_buf[pending++]=(byte)(b>>8); + pending_buf[pending++]=(byte)(b/*&0xff*/); + } + + internal void send_code(int c, short[] tree){ + int c2=c*2; + send_bits((tree[c2]&0xffff), (tree[c2+1]&0xffff)); + } + + internal void send_bits(int val, int length){ + if (bi_valid > Buf_size - length) { + bi_buf |= (uint)(val << bi_valid); + pending_buf[pending++]=(byte)(bi_buf/*&0xff*/); + pending_buf[pending++]=(byte)(bi_buf>>8); + bi_buf = ((uint)val) >> (Buf_size - bi_valid); + bi_valid += length - Buf_size; + } else { + bi_buf |= (uint)(val << bi_valid); + bi_valid += length; + } +// int len = length; +// if (bi_valid > (int)Buf_size - len) { +// int val = value; +// // bi_buf |= (val << bi_valid); +// bi_buf = (short)((ushort)bi_buf | (ushort)((val << bi_valid)&0xffff)); +// put_short(bi_buf); +// bi_buf = (short)(((uint)val) >> (Buf_size - bi_valid)); +// bi_valid += len - Buf_size; +// } else { +// // bi_buf |= (value) << bi_valid; +// bi_buf = (short)((ushort)bi_buf | (ushort)(((value) << bi_valid)&0xffff)); +// bi_valid += len; +// } + } + + // Send one empty static block to give enough lookahead for inflate. + // This takes 10 bits, of which 7 may remain in the bit buffer. + // The current inflate code requires 9 bits of lookahead. If the + // last two codes for the previous block (real code plus EOB) were coded + // on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode + // the last real code. In this case we send two empty static blocks instead + // of one. (There are no problems if the previous block is stored or fixed.) + // To simplify the code, we assume the worst case of last real code encoded + // on one bit only. + internal void _tr_align(){ + send_bits(STATIC_TREES<<1, 3); + send_code(END_BLOCK, StaticTree.static_ltree); + + bi_flush(); + + // Of the 10 bits for the empty block, we have already sent + // (10 - bi_valid) bits. The lookahead for the last real code (before + // the EOB of the previous block) was thus at least one plus the length + // of the EOB plus what we have just sent of the empty static block. + if (1 + last_eob_len + 10 - bi_valid < 9) { + send_bits(STATIC_TREES<<1, 3); + send_code(END_BLOCK, StaticTree.static_ltree); + bi_flush(); + } + last_eob_len = 7; + } + + + // Save the match info and tally the frequency counts. Return true if + // the current block must be flushed. + internal bool _tr_tally (int dist, // distance of matched string + int lc // match length-MIN_MATCH or unmatched char (if dist==0) + ){ + + pending_buf[d_buf+last_lit*2] = (byte)(dist>>8); + pending_buf[d_buf+last_lit*2+1] = (byte)dist; + + pending_buf[l_buf+last_lit] = (byte)lc; last_lit++; + + if (dist == 0) { + // lc is the unmatched char + dyn_ltree[lc*2]++; + } + else { + matches++; + // Here, lc is the match length - MIN_MATCH + dist--; // dist = match distance - 1 + dyn_ltree[(Tree._length_code[lc]+LITERALS+1)*2]++; + dyn_dtree[Tree.d_code(dist)*2]++; + } + + if ((last_lit & 0x1fff) == 0 && level > 2) { + // Compute an upper bound for the compressed length + int out_length = last_lit*8; + int in_length = strstart - block_start; + int dcode; + for (dcode = 0; dcode < D_CODES; dcode++) { + out_length += (int)((int)dyn_dtree[dcode*2] * + (5L+Tree.extra_dbits[dcode])); + } + out_length >>= 3; + if ((matches < (last_lit/2)) && out_length < in_length/2) return true; + } + + return (last_lit == lit_bufsize-1); + // We avoid equality with lit_bufsize because of wraparound at 64K + // on 16 bit machines and because stored blocks are restricted to + // 64K-1 bytes. + } + + // Send the block data compressed using the given Huffman trees + internal void compress_block(short[] ltree, short[] dtree){ + int dist; // distance of matched string + int lc; // match length or unmatched char (if dist == 0) + int lx = 0; // running index in l_buf + int code; // the code to send + int extra; // number of extra bits to send + + if (last_lit != 0){ + do{ + dist=((pending_buf[d_buf+lx*2]<<8)&0xff00)| + (pending_buf[d_buf+lx*2+1]&0xff); + lc=(pending_buf[l_buf+lx])&0xff; lx++; + + if(dist == 0){ + send_code(lc, ltree); // send a literal byte + } + else{ + // Here, lc is the match length - MIN_MATCH + code = Tree._length_code[lc]; + + send_code(code+LITERALS+1, ltree); // send the length code + extra = Tree.extra_lbits[code]; + if(extra != 0){ + lc -= Tree.base_length[code]; + send_bits(lc, extra); // send the extra length bits + } + dist--; // dist is now the match distance - 1 + code = Tree.d_code(dist); + + send_code(code, dtree); // send the distance code + extra = Tree.extra_dbits[code]; + if (extra != 0) { + dist -= Tree.base_dist[code]; + send_bits(dist, extra); // send the extra distance bits + } + } // literal or match pair ? + + // Check that the overlay between pending_buf and d_buf+l_buf is ok: + } + while (lx < last_lit); + } + + send_code(END_BLOCK, ltree); + last_eob_len = ltree[END_BLOCK*2+1]; + } + + // Set the data type to ASCII or BINARY, using a crude approximation: + // binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise. + // IN assertion: the fields freq of dyn_ltree are set and the total of all + // frequencies does not exceed 64K (to fit in an int on 16 bit machines). + internal void set_data_type(){ + int n = 0; + int ascii_freq = 0; + int bin_freq = 0; + while(n<7){ bin_freq += dyn_ltree[n*2]; n++;} + while(n<128){ ascii_freq += dyn_ltree[n*2]; n++;} + while(n (ascii_freq >> 2) ? Z_BINARY : Z_ASCII); + } + + // Flush the bit buffer, keeping at most 7 bits in it. + internal void bi_flush(){ + if (bi_valid == 16) { + pending_buf[pending++]=(byte)(bi_buf/*&0xff*/); + pending_buf[pending++]=(byte)(bi_buf>>8); + bi_buf=0; + bi_valid=0; + } + else if (bi_valid >= 8) { + pending_buf[pending++]=(byte)(bi_buf); + bi_buf>>=8; + bi_buf &= 0x00ff; + bi_valid-=8; + } + } + + // Flush the bit buffer and align the output on a byte boundary + internal void bi_windup(){ + if (bi_valid > 8) { + pending_buf[pending++]=(byte)(bi_buf); + pending_buf[pending++]=(byte)(bi_buf>>8); + } else if (bi_valid > 0) { + pending_buf[pending++]=(byte)(bi_buf); + } + bi_buf = 0; + bi_valid = 0; + } + + // Copy a stored block, storing first the length and its + // one's complement if requested. + internal void copy_block(int buf, // the input data + int len, // its length + bool header // true if block header must be written + ){ + //int index=0; + bi_windup(); // align on byte boundary + last_eob_len = 8; // enough lookahead for inflate + + if (header) { + put_short((short)len); + put_short((short)~len); + } + + // while(len--!=0) { + // put_byte(window[buf+index]); + // index++; + // } + put_byte(window, buf, len); + } + + internal void flush_block_only(bool eof){ + _tr_flush_block(block_start>=0 ? block_start : -1, + strstart-block_start, + eof); + block_start=strstart; + strm.flush_pending(); + } + + // Copy without compression as much as possible from the input stream, return + // the current block state. + // This function does not insert new strings in the dictionary since + // uncompressible data is probably not useful. This function is used + // only for the level=0 compression option. + // NOTE: this function should be optimized to avoid extra copying from + // window to pending_buf. + internal int deflate_stored(int flush){ + // Stored blocks are limited to 0xffff bytes, pending_buf is limited + // to pending_buf_size, and each stored block has a 5 byte header: + + int max_block_size = System.Math.Min(0xffff, pending_buf.Length - 5); + int max_start; + + // Copy as much as possible from input to output: + while(true){ + // Fill the window as much as possible: + if(lookahead<=1){ + fill_window(); + if(lookahead==0 && flush==Z_NO_FLUSH) return NeedMore; + if(lookahead==0) break; // flush the current block + } + + strstart+=lookahead; + lookahead=0; + + // Emit a stored block if pending_buf will be full: + max_start=block_start+max_block_size; + if(strstart==0|| strstart>=max_start) { + // strstart == 0 is possible when wraparound on 16-bit machine + lookahead = (int)(strstart-max_start); + strstart = (int)max_start; + + flush_block_only(false); + if(strm.avail_out==0) return NeedMore; + + } + + // Flush if we may have to slide, otherwise block_start may become + // negative and the data will be gone: + if(strstart-block_start >= w_size-MIN_LOOKAHEAD) { + flush_block_only(false); + if(strm.avail_out==0) return NeedMore; + } + } + + flush_block_only(flush == Z_FINISH); + if(strm.avail_out==0) + return (flush == Z_FINISH) ? FinishStarted : NeedMore; + + return flush == Z_FINISH ? FinishDone : BlockDone; + } + + // Send a stored block + internal void _tr_stored_block(int buf, // input block + int stored_len, // length of input block + bool eof // true if this is the last block for a file + ){ + send_bits((STORED_BLOCK<<1)+(eof?1:0), 3); // send block type + copy_block(buf, stored_len, true); // with header + } + + // Determine the best encoding for the current block: dynamic trees, static + // trees or store, and output the encoded block to the zip file. + internal void _tr_flush_block(int buf, // input block, or NULL if too old + int stored_len, // length of input block + bool eof // true if this is the last block for a file + ) { + int opt_lenb, static_lenb;// opt_len and static_len in bytes + int max_blindex = 0; // index of last bit length code of non zero freq + + // Build the Huffman trees unless a stored block is forced + if(level > 0) { + // Check if the file is ascii or binary + if(data_type == Z_UNKNOWN) set_data_type(); + + // Construct the literal and distance trees + l_desc.build_tree(this); + + d_desc.build_tree(this); + + // At this point, opt_len and static_len are the total bit lengths of + // the compressed block data, excluding the tree representations. + + // Build the bit length tree for the above two trees, and get the index + // in bl_order of the last bit length code to send. + max_blindex=build_bl_tree(); + + // Determine the best encoding. Compute first the block length in bytes + opt_lenb=(opt_len+3+7)>>3; + static_lenb=(static_len+3+7)>>3; + + if(static_lenb<=opt_lenb) opt_lenb=static_lenb; + } + else { + opt_lenb=static_lenb=stored_len+5; // force a stored block + } + + if(stored_len+4<=opt_lenb && buf != -1){ + // 4: two words for the lengths + // The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + // Otherwise we can't have processed more than WSIZE input bytes since + // the last block flush, because compression would have been + // successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + // transform a block into a stored block. + _tr_stored_block(buf, stored_len, eof); + } + else if(static_lenb == opt_lenb){ + send_bits((STATIC_TREES<<1)+(eof?1:0), 3); + compress_block(StaticTree.static_ltree, StaticTree.static_dtree); + } + else{ + send_bits((DYN_TREES<<1)+(eof?1:0), 3); + send_all_trees(l_desc.max_code+1, d_desc.max_code+1, max_blindex+1); + compress_block(dyn_ltree, dyn_dtree); + } + + // The above check is made mod 2^32, for files larger than 512 MB + // and uLong implemented on 32 bits. + + init_block(); + + if(eof){ + bi_windup(); + } + } + + // Fill the window when the lookahead becomes insufficient. + // Updates strstart and lookahead. + // + // IN assertion: lookahead < MIN_LOOKAHEAD + // OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + // At least one byte has been read, or avail_in == 0; reads are + // performed for at least two bytes (required for the zip translate_eol + // option -- not supported here). + internal void fill_window(){ + int n, m; + int p; + int more; // Amount of free space at the end of the window. + + do{ + more = (window_size-lookahead-strstart); + + // Deal with !@#$% 64K limit: + if(more==0 && strstart==0 && lookahead==0){ + more = w_size; + } + else if(more==-1) { + // Very unlikely, but possible on 16 bit machine if strstart == 0 + // and lookahead == 1 (input done one byte at time) + more--; + + // If the window is almost full and there is insufficient lookahead, + // move the upper half to the lower one to make room in the upper half. + } + else if(strstart >= w_size+ w_size-MIN_LOOKAHEAD) { + System.Array.Copy(window, w_size, window, 0, w_size); + match_start-=w_size; + strstart-=w_size; // we now have strstart >= MAX_DIST + block_start-=w_size; + + // Slide the hash table (could be avoided with 32 bit values + // at the expense of memory usage). We slide even when level == 0 + // to keep the hash table consistent if we switch back to level > 0 + // later. (Using level 0 permanently is not an optimal usage of + // zlib, so we don't care about this pathological case.) + + n = hash_size; + p=n; + do { + m = (head[--p]&0xffff); + head[p]=(short)(m>=w_size ? (m-w_size) : 0); + } + while (--n != 0); + + n = w_size; + p = n; + do { + m = (prev[--p]&0xffff); + prev[p] = (short)(m >= w_size ? (m-w_size) : 0); + // If n is not on any hash chain, prev[n] is garbage but + // its value will never be used. + } + while (--n!=0); + more += w_size; + } + + if (strm.avail_in == 0) return; + + // If there was no sliding: + // strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + // more == window_size - lookahead - strstart + // => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + // => more >= window_size - 2*WSIZE + 2 + // In the BIG_MEM or MMAP case (not yet supported), + // window_size == input_size + MIN_LOOKAHEAD && + // strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + // Otherwise, window_size == 2*WSIZE so more >= 2. + // If there was sliding, more >= WSIZE. So in all cases, more >= 2. + + n = strm.read_buf(window, strstart + lookahead, more); + lookahead += n; + + // Initialize the hash value now that we have some input: + if(lookahead >= MIN_MATCH) { + ins_h = window[strstart]&0xff; + ins_h=(((ins_h)<= MIN_MATCH){ + ins_h=(((ins_h)<=MIN_MATCH){ + // check_match(strstart, match_start, match_length); + + bflush=_tr_tally(strstart-match_start, match_length-MIN_MATCH); + + lookahead -= match_length; + + // Insert new strings in the hash table only if the match length + // is not too large. This saves time but degrades compression. + if(match_length <= max_lazy_match && + lookahead >= MIN_MATCH) { + match_length--; // string at strstart already in hash table + do{ + strstart++; + + ins_h=((ins_h<= MIN_MATCH) { + ins_h=(((ins_h)< 4096))) { + + // If prev_match is also MIN_MATCH, match_start is garbage + // but we will ignore the current match anyway. + match_length = MIN_MATCH-1; + } + } + + // If there was a match at the previous step and the current + // match is not better, output the previous match: + if(prev_length >= MIN_MATCH && match_length <= prev_length) { + int max_insert = strstart + lookahead - MIN_MATCH; + // Do not insert strings in hash table beyond this. + + // check_match(strstart-1, prev_match, prev_length); + + bflush=_tr_tally(strstart-1-prev_match, prev_length - MIN_MATCH); + + // Insert in hash table all strings up to the end of the match. + // strstart-1 and strstart are already inserted. If there is not + // enough lookahead, the last two strings are not inserted in + // the hash table. + lookahead -= prev_length-1; + prev_length -= 2; + do{ + if(++strstart <= max_insert) { + ins_h=(((ins_h)<(w_size-MIN_LOOKAHEAD) ? + strstart-(w_size-MIN_LOOKAHEAD) : 0; + int nice_match=this.nice_match; + + // Stop when cur_match becomes <= limit. To simplify the code, + // we prevent matches with the string of window index 0. + + int wmask = w_mask; + + int strend = strstart + MAX_MATCH; + byte scan_end1 = window[scan+best_len-1]; + byte scan_end = window[scan+best_len]; + + // The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + // It is easy to get rid of this optimization if necessary. + + // Do not waste too much time if we already have a good match: + if (prev_length >= good_match) { + chain_length >>= 2; + } + + // Do not look for matches beyond the end of the input. This is necessary + // to make deflate deterministic. + if (nice_match > lookahead) nice_match = lookahead; + + do { + match = cur_match; + + // Skip to next match if the match length cannot increase + // or if the match length is less than 2: + if (window[match+best_len] != scan_end || + window[match+best_len-1] != scan_end1 || + window[match] != window[scan] || + window[++match] != window[scan+1]) continue; + + // The check at best_len-1 can be removed because it will be made + // again later. (This heuristic is not always a win.) + // It is not necessary to compare scan[2] and match[2] since they + // are always equal when the other bytes match, given that + // the hash keys are equal and that HASH_BITS >= 8. + scan += 2; match++; + + // We check for insufficient lookahead only every 8th comparison; + // the 256th check will be made at strstart+258. + do { + } while (window[++scan] == window[++match] && + window[++scan] == window[++match] && + window[++scan] == window[++match] && + window[++scan] == window[++match] && + window[++scan] == window[++match] && + window[++scan] == window[++match] && + window[++scan] == window[++match] && + window[++scan] == window[++match] && + scan < strend); + + len = MAX_MATCH - (int)(strend - scan); + scan = strend - MAX_MATCH; + + if(len>best_len) { + match_start = cur_match; + best_len = len; + if (len >= nice_match) break; + scan_end1 = window[scan+best_len-1]; + scan_end = window[scan+best_len]; + } + + } while ((cur_match = (prev[cur_match & wmask]&0xffff)) > limit + && --chain_length != 0); + + if (best_len <= lookahead) return best_len; + return lookahead; + } + + internal int deflateInit(ZStream strm, int level, int bits){ + return deflateInit2(strm, level, Z_DEFLATED, bits, DEF_MEM_LEVEL, + Z_DEFAULT_STRATEGY); + } + internal int deflateInit(ZStream strm, int level){ + return deflateInit(strm, level, MAX_WBITS); + } + internal int deflateInit2(ZStream strm, int level, int method, int windowBits, + int memLevel, int strategy){ + int noheader = 0; + // byte[] my_version=ZLIB_VERSION; + + // + // if (version == null || version[0] != my_version[0] + // || stream_size != sizeof(z_stream)) { + // return Z_VERSION_ERROR; + // } + + strm.msg = null; + + if (level == Z_DEFAULT_COMPRESSION) level = 6; + + if (windowBits < 0) { // undocumented feature: suppress zlib header + noheader = 1; + windowBits = -windowBits; + } + + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || + method != Z_DEFLATED || + windowBits < 9 || windowBits > 15 || level < 0 || level > 9 || + strategy < 0 || strategy > Z_HUFFMAN_ONLY) { + return Z_STREAM_ERROR; + } + + strm.dstate = (Deflate)this; + + this.noheader = noheader; + w_bits = windowBits; + w_size = 1 << w_bits; + w_mask = w_size - 1; + + hash_bits = memLevel + 7; + hash_size = 1 << hash_bits; + hash_mask = hash_size - 1; + hash_shift = ((hash_bits+MIN_MATCH-1)/MIN_MATCH); + + window = new byte[w_size*2]; + prev = new short[w_size]; + head = new short[hash_size]; + + lit_bufsize = 1 << (memLevel + 6); // 16K elements by default + + // We overlay pending_buf and d_buf+l_buf. This works since the average + // output size for (length,distance) codes is <= 24 bits. + pending_buf = new byte[lit_bufsize*4]; + + d_buf = lit_bufsize; + l_buf = (1+2)*lit_bufsize; + + this.level = level; + + //System.out.println("level="+level); + + this.strategy = strategy; + this.method = (byte)method; + + return deflateReset(strm); + } + + internal int deflateReset(ZStream strm){ + strm.total_in = strm.total_out = 0; + strm.msg = null; // + strm.data_type = Z_UNKNOWN; + + pending = 0; + pending_out = 0; + + if(noheader < 0) { + noheader = 0; // was set to -1 by deflate(..., Z_FINISH); + } + status = (noheader!=0) ? BUSY_STATE : INIT_STATE; + strm.adler=strm._adler.adler32(0, null, 0, 0); + + last_flush = Z_NO_FLUSH; + + tr_init(); + lm_init(); + return Z_OK; + } + + internal int deflateEnd(){ + if(status!=INIT_STATE && status!=BUSY_STATE && status!=FINISH_STATE){ + return Z_STREAM_ERROR; + } + // Deallocate in reverse order of allocations: + pending_buf=null; + head=null; + prev=null; + window=null; + // free + // dstate=null; + return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK; + } + + internal int deflateParams(ZStream strm, int _level, int _strategy){ + int err=Z_OK; + + if(_level == Z_DEFAULT_COMPRESSION){ + _level = 6; + } + if(_level < 0 || _level > 9 || + _strategy < 0 || _strategy > Z_HUFFMAN_ONLY) { + return Z_STREAM_ERROR; + } + + if(config_table[level].func!=config_table[_level].func && + strm.total_in != 0) { + // Flush the last buffer: + err = strm.deflate(Z_PARTIAL_FLUSH); + } + + if(level != _level) { + level = _level; + max_lazy_match = config_table[level].max_lazy; + good_match = config_table[level].good_length; + nice_match = config_table[level].nice_length; + max_chain_length = config_table[level].max_chain; + } + strategy = _strategy; + return err; + } + + internal int deflateSetDictionary (ZStream strm, byte[] dictionary, int dictLength){ + int length = dictLength; + int index=0; + + if(dictionary == null || status != INIT_STATE) + return Z_STREAM_ERROR; + + strm.adler=strm._adler.adler32(strm.adler, dictionary, 0, dictLength); + + if(length < MIN_MATCH) return Z_OK; + if(length > w_size-MIN_LOOKAHEAD){ + length = w_size-MIN_LOOKAHEAD; + index=dictLength-length; // use the tail of the dictionary + } + System.Array.Copy(dictionary, index, window, 0, length); + strstart = length; + block_start = length; + + // Insert all strings in the hash table (except for the last two bytes). + // s->lookahead stays null, so s->ins_h will be recomputed at the next + // call of fill_window. + + ins_h = window[0]&0xff; + ins_h=(((ins_h)<Z_FINISH || flush<0){ + return Z_STREAM_ERROR; + } + + if(strm.next_out == null || + (strm.next_in == null && strm.avail_in != 0) || + (status == FINISH_STATE && flush != Z_FINISH)) { + strm.msg=z_errmsg[Z_NEED_DICT-(Z_STREAM_ERROR)]; + return Z_STREAM_ERROR; + } + if(strm.avail_out == 0){ + strm.msg=z_errmsg[Z_NEED_DICT-(Z_BUF_ERROR)]; + return Z_BUF_ERROR; + } + + this.strm = strm; // just in case + old_flush = last_flush; + last_flush = flush; + + // Write the zlib header + if(status == INIT_STATE) { + int header = (Z_DEFLATED+((w_bits-8)<<4))<<8; + int level_flags=((level-1)&0xff)>>1; + + if(level_flags>3) level_flags=3; + header |= (level_flags<<6); + if(strstart!=0) header |= PRESET_DICT; + header+=31-(header % 31); + + status=BUSY_STATE; + putShortMSB(header); + + + // Save the adler32 of the preset dictionary: + if(strstart!=0){ + putShortMSB((int)(strm.adler>>16)); + putShortMSB((int)(strm.adler&0xffff)); + } + strm.adler=strm._adler.adler32(0, null, 0, 0); + } + + // Flush as much pending output as possible + if(pending != 0) { + strm.flush_pending(); + if(strm.avail_out == 0) { + //System.out.println(" avail_out==0"); + // Since avail_out is 0, deflate will be called again with + // more output space, but possibly with both pending and + // avail_in equal to zero. There won't be anything to do, + // but this is not an error situation so make sure we + // return OK instead of BUF_ERROR at next call of deflate: + last_flush = -1; + return Z_OK; + } + + // Make sure there is something to do and avoid duplicate consecutive + // flushes. For repeated and useless calls with Z_FINISH, we keep + // returning Z_STREAM_END instead of Z_BUFF_ERROR. + } + else if(strm.avail_in==0 && flush <= old_flush && + flush != Z_FINISH) { + strm.msg=z_errmsg[Z_NEED_DICT-(Z_BUF_ERROR)]; + return Z_BUF_ERROR; + } + + // User must not provide more input after the first FINISH: + if(status == FINISH_STATE && strm.avail_in != 0) { + strm.msg=z_errmsg[Z_NEED_DICT-(Z_BUF_ERROR)]; + return Z_BUF_ERROR; + } + + // Start a new block or continue the current one. + if(strm.avail_in!=0 || lookahead!=0 || + (flush != Z_NO_FLUSH && status != FINISH_STATE)) { + int bstate=-1; + switch(config_table[level].func){ + case STORED: + bstate = deflate_stored(flush); + break; + case FAST: + bstate = deflate_fast(flush); + break; + case SLOW: + bstate = deflate_slow(flush); + break; + default: + break; + } + + if (bstate==FinishStarted || bstate==FinishDone) { + status = FINISH_STATE; + } + if (bstate==NeedMore || bstate==FinishStarted) { + if(strm.avail_out == 0) { + last_flush = -1; // avoid BUF_ERROR next call, see above + } + return Z_OK; + // If flush != Z_NO_FLUSH && avail_out == 0, the next call + // of deflate should use the same flush parameter to make sure + // that the flush is complete. So we don't have to output an + // empty block here, this will be done at next call. This also + // ensures that for a very small output buffer, we emit at most + // one empty block. + } + + if (bstate==BlockDone) { + if(flush == Z_PARTIAL_FLUSH) { + _tr_align(); + } + else { // FULL_FLUSH or SYNC_FLUSH + _tr_stored_block(0, 0, false); + // For a full flush, this empty block will be recognized + // as a special marker by inflate_sync(). + if(flush == Z_FULL_FLUSH) { + //state.head[s.hash_size-1]=0; + for(int i=0; i>16)); + putShortMSB((int)(strm.adler&0xffff)); + strm.flush_pending(); + + // If avail_out is zero, the application will call deflate again + // to flush the rest. + noheader = -1; // write the trailer only once! + return pending != 0 ? Z_OK : Z_STREAM_END; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/Deflate.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/Deflate.cs.meta new file mode 100644 index 000000000..57f333d07 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/Deflate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d29c091390e4c924b9c9cd53bc19b4e9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/InfBlocks.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/InfBlocks.cs new file mode 100644 index 000000000..97c4db61c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/InfBlocks.cs @@ -0,0 +1,622 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +/* + * $Id: InfBlocks.cs,v 1.2 2008-05-10 09:35:40 bouncy Exp $ + * +Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. 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. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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. + */ +/* + * This program is based on zlib-1.1.3, so all credit should go authors + * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) + * and contributors of zlib. + */ + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Zlib { + + internal sealed class InfBlocks{ + private const int MANY=1440; + + // And'ing with mask[n] masks the lower n bits + private static readonly int[] inflate_mask = { + 0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, + 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, + 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, + 0x00007fff, 0x0000ffff + }; + + // Table for deflate from PKZIP's appnote.txt. + static readonly int[] border = { // Order of the bit length code lengths + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 + }; + + private const int Z_OK=0; + private const int Z_STREAM_END=1; + private const int Z_NEED_DICT=2; + private const int Z_ERRNO=-1; + private const int Z_STREAM_ERROR=-2; + private const int Z_DATA_ERROR=-3; + private const int Z_MEM_ERROR=-4; + private const int Z_BUF_ERROR=-5; + private const int Z_VERSION_ERROR=-6; + + private const int TYPE=0; // get type bits (3, including end bit) + private const int LENS=1; // get lengths for stored + private const int STORED=2;// processing stored block + private const int TABLE=3; // get table lengths + private const int BTREE=4; // get bit lengths tree for a dynamic block + private const int DTREE=5; // get length, distance trees for a dynamic block + private const int CODES=6; // processing fixed or dynamic block + private const int DRY=7; // output remaining window bytes + private const int DONE=8; // finished last block, done + private const int BAD=9; // ot a data error--stuck here + + internal int mode; // current inflate_block mode + + internal int left; // if STORED, bytes left to copy + + internal int table; // table lengths (14 bits) + internal int index; // index into blens (or border) + internal int[] blens; // bit lengths of codes + internal int[] bb=new int[1]; // bit length tree depth + internal int[] tb=new int[1]; // bit length decoding tree + + internal InfCodes codes=new InfCodes(); // if CODES, current state + + int last; // true if this block is the last block + + // mode independent information + internal int bitk; // bits in bit buffer + internal int bitb; // bit buffer + internal int[] hufts; // single malloc for tree space + internal byte[] window; // sliding window + internal int end; // one byte after sliding window + internal int read; // window read pointer + internal int write; // window write pointer + internal object checkfn; // check function + internal long check; // check on output + + internal InfTree inftree=new InfTree(); + + internal InfBlocks(ZStream z, object checkfn, int w){ + hufts=new int[MANY*3]; + window=new byte[w]; + end=w; + this.checkfn = checkfn; + mode = TYPE; + reset(z, null); + } + + internal void reset(ZStream z, long[] c){ + if(c!=null) c[0]=check; + if(mode==BTREE || mode==DTREE){ + } + if(mode==CODES){ + codes.free(z); + } + mode=TYPE; + bitk=0; + bitb=0; + read=write=0; + + if(checkfn != null) + z.adler=check=z._adler.adler32(0L, null, 0, 0); + } + + internal int proc(ZStream z, int r){ + int t; // temporary storage + int b; // bit buffer + int k; // bits in bit buffer + int p; // input data pointer + int n; // bytes available there + int q; // output window write pointer + int m; { // bytes to end of window or read pointer + + // copy input/output information to locals (UPDATE macro restores) + p=z.next_in_index;n=z.avail_in;b=bitb;k=bitk;} { + q=write;m=(int)(q> 1){ + case 0: { // stored + b>>=(3);k-=(3);} + t = k & 7; { // go to byte boundary + + b>>=(t);k-=(t);} + mode = LENS; // get length of stored block + break; + case 1: { // fixed + int[] bl=new int[1]; + int[] bd=new int[1]; + int[][] tl=new int[1][]; + int[][] td=new int[1][]; + + InfTree.inflate_trees_fixed(bl, bd, tl, td, z); + codes.init(bl[0], bd[0], tl[0], 0, td[0], 0, z); + } { + + b>>=(3);k-=(3);} + + mode = CODES; + break; + case 2: { // dynamic + + b>>=(3);k-=(3);} + + mode = TABLE; + break; + case 3: { // illegal + + b>>=(3);k-=(3);} + mode = BAD; + z.msg = "invalid block type"; + r = Z_DATA_ERROR; + + bitb=b; bitk=k; + z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p; + write=q; + return inflate_flush(z,r); + } + break; + case LENS: + + while(k<(32)){ + if(n!=0){ + r=Z_OK; + } + else{ + bitb=b; bitk=k; + z.avail_in=n; + z.total_in+=p-z.next_in_index;z.next_in_index=p; + write=q; + return inflate_flush(z,r); + }; + n--; + b|=(z.next_in[p++]&0xff)<> 16) & 0xffff) != (b & 0xffff)){ + mode = BAD; + z.msg = "invalid stored block lengths"; + r = Z_DATA_ERROR; + + bitb=b; bitk=k; + z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p; + write=q; + return inflate_flush(z,r); + } + left = (b & 0xffff); + b = k = 0; // dump bits + mode = left!=0 ? STORED : (last!=0 ? DRY : TYPE); + break; + case STORED: + if (n == 0){ + bitb=b; bitk=k; + z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p; + write=q; + return inflate_flush(z,r); + } + + if(m==0){ + if(q==end&&read!=0){ + q=0; m=(int)(qn) t = n; + if(t>m) t = m; + System.Array.Copy(z.next_in, p, window, q, t); + p += t; n -= t; + q += t; m -= t; + if ((left -= t) != 0) + break; + mode = last!=0 ? DRY : TYPE; + break; + case TABLE: + + while(k<(14)){ + if(n!=0){ + r=Z_OK; + } + else{ + bitb=b; bitk=k; + z.avail_in=n; + z.total_in+=p-z.next_in_index;z.next_in_index=p; + write=q; + return inflate_flush(z,r); + }; + n--; + b|=(z.next_in[p++]&0xff)< 29 || ((t >> 5) & 0x1f) > 29) { + mode = BAD; + z.msg = "too many length or distance symbols"; + r = Z_DATA_ERROR; + + bitb=b; bitk=k; + z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p; + write=q; + return inflate_flush(z,r); + } + t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f); + if(blens==null || blens.Length>=(14);k-=(14);} + + index = 0; + mode = BTREE; + goto case BTREE; + case BTREE: + while (index < 4 + (table >> 10)){ + while(k<(3)){ + if(n!=0){ + r=Z_OK; + } + else{ + bitb=b; bitk=k; + z.avail_in=n; + z.total_in+=p-z.next_in_index;z.next_in_index=p; + write=q; + return inflate_flush(z,r); + }; + n--; + b|=(z.next_in[p++]&0xff)<>=(3);k-=(3);} + } + + while(index < 19){ + blens[border[index++]] = 0; + } + + bb[0] = 7; + t = inftree.inflate_trees_bits(blens, bb, tb, hufts, z); + if (t != Z_OK){ + r = t; + if (r == Z_DATA_ERROR){ + blens=null; + mode = BAD; + } + + bitb=b; bitk=k; + z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p; + write=q; + return inflate_flush(z,r); + } + + index = 0; + mode = DTREE; + goto case DTREE; + case DTREE: + while (true){ + t = table; + if(!(index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))){ + break; + } + + int i, j, c; + + t = bb[0]; + + while(k<(t)){ + if(n!=0){ + r=Z_OK; + } + else{ + bitb=b; bitk=k; + z.avail_in=n; + z.total_in+=p-z.next_in_index;z.next_in_index=p; + write=q; + return inflate_flush(z,r); + }; + n--; + b|=(z.next_in[p++]&0xff)<>=(t);k-=(t); + blens[index++] = c; + } + else { // c == 16..18 + i = c == 18 ? 7 : c - 14; + j = c == 18 ? 11 : 3; + + while(k<(t+i)){ + if(n!=0){ + r=Z_OK; + } + else{ + bitb=b; bitk=k; + z.avail_in=n; + z.total_in+=p-z.next_in_index;z.next_in_index=p; + write=q; + return inflate_flush(z,r); + }; + n--; + b|=(z.next_in[p++]&0xff)<>=(t);k-=(t); + + j += (b & inflate_mask[i]); + + b>>=(i);k-=(i); + + i = index; + t = table; + if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) || + (c == 16 && i < 1)){ + blens=null; + mode = BAD; + z.msg = "invalid bit length repeat"; + r = Z_DATA_ERROR; + + bitb=b; bitk=k; + z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p; + write=q; + return inflate_flush(z,r); + } + + c = c == 16 ? blens[i-1] : 0; + do{ + blens[i++] = c; + } + while (--j!=0); + index = i; + } + } + + tb[0]=-1; { + int[] bl=new int[1]; + int[] bd=new int[1]; + int[] tl=new int[1]; + int[] td=new int[1]; + bl[0] = 9; // must be <= 9 for lookahead assumptions + bd[0] = 6; // must be <= 9 for lookahead assumptions + + t = table; + t = inftree.inflate_trees_dynamic(257 + (t & 0x1f), + 1 + ((t >> 5) & 0x1f), + blens, bl, bd, tl, td, hufts, z); + + if (t != Z_OK){ + if (t == Z_DATA_ERROR){ + blens=null; + mode = BAD; + } + r = t; + + bitb=b; bitk=k; + z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p; + write=q; + return inflate_flush(z,r); + } + codes.init(bl[0], bd[0], hufts, tl[0], hufts, td[0], z); + } + mode = CODES; + goto case CODES; + case CODES: + bitb=b; bitk=k; + z.avail_in=n; z.total_in+=p-z.next_in_index;z.next_in_index=p; + write=q; + + if ((r = codes.proc(this, z, r)) != Z_STREAM_END){ + return inflate_flush(z, r); + } + r = Z_OK; + codes.free(z); + + p=z.next_in_index; n=z.avail_in;b=bitb;k=bitk; + q=write;m=(int)(q z.avail_out) n = z.avail_out; + if (n!=0 && r == Z_BUF_ERROR) r = Z_OK; + + // update counters + z.avail_out -= n; + z.total_out += n; + + // update check information + if(checkfn != null) + z.adler=check=z._adler.adler32(check, window, q, n); + + // copy as far as end of window + System.Array.Copy(window, q, z.next_out, p, n); + p += n; + q += n; + + // see if more to copy at beginning of window + if (q == end){ + // wrap pointers + q = 0; + if (write == end) + write = 0; + + // compute bytes to copy + n = write - q; + if (n > z.avail_out) n = z.avail_out; + if (n!=0 && r == Z_BUF_ERROR) r = Z_OK; + + // update counters + z.avail_out -= n; + z.total_out += n; + + // update check information + if(checkfn != null) + z.adler=check=z._adler.adler32(check, window, q, n); + + // copy + System.Array.Copy(window, q, z.next_out, p, n); + p += n; + q += n; + } + + // update pointers + z.next_out_index = p; + read = q; + + // done + return r; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/InfBlocks.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/InfBlocks.cs.meta new file mode 100644 index 000000000..06e5644ce --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/InfBlocks.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 39991dab49f0a85419083ecf2f53dc90 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/InfCodes.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/InfCodes.cs new file mode 100644 index 000000000..2cedae174 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/InfCodes.cs @@ -0,0 +1,615 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +/* + * $Id: InfCodes.cs,v 1.2 2008-05-10 09:35:40 bouncy Exp $ + * +Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. 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. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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. + */ +/* + * This program is based on zlib-1.1.3, so all credit should go authors + * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) + * and contributors of zlib. + */ + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Zlib { + + internal sealed class InfCodes{ + + private static readonly int[] inflate_mask = { + 0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, + 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, + 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, + 0x00007fff, 0x0000ffff + }; + + private const int Z_OK=0; + private const int Z_STREAM_END=1; + private const int Z_NEED_DICT=2; + private const int Z_ERRNO=-1; + private const int Z_STREAM_ERROR=-2; + private const int Z_DATA_ERROR=-3; + private const int Z_MEM_ERROR=-4; + private const int Z_BUF_ERROR=-5; + private const int Z_VERSION_ERROR=-6; + + // waiting for "i:"=input, + // "o:"=output, + // "x:"=nothing + private const int START=0; // x: set up for LEN + private const int LEN=1; // i: get length/literal/eob next + private const int LENEXT=2; // i: getting length extra (have base) + private const int DIST=3; // i: get distance next + private const int DISTEXT=4;// i: getting distance extra + private const int COPY=5; // o: copying bytes in window, waiting for space + private const int LIT=6; // o: got literal, waiting for output space + private const int WASH=7; // o: got eob, possibly still output waiting + private const int END=8; // x: got eob and all data flushed + private const int BADCODE=9;// x: got error + + int mode; // current inflate_codes mode + + // mode dependent information + int len; + + int[] tree; // pointer into tree + int tree_index=0; + int need; // bits needed + + int lit; + + // if EXT or COPY, where and how much + int get; // bits to get for extra + int dist; // distance back to copy from + + byte lbits; // ltree bits decoded per branch + byte dbits; // dtree bits decoder per branch + int[] ltree; // literal/length/eob tree + int ltree_index; // literal/length/eob tree + int[] dtree; // distance tree + int dtree_index; // distance tree + + internal InfCodes(){ + } + internal void init(int bl, int bd, + int[] tl, int tl_index, + int[] td, int td_index, ZStream z){ + mode=START; + lbits=(byte)bl; + dbits=(byte)bd; + ltree=tl; + ltree_index=tl_index; + dtree = td; + dtree_index=td_index; + tree=null; + } + + internal int proc(InfBlocks s, ZStream z, int r){ + int j; // temporary storage + int tindex; // temporary pointer + int e; // extra bits or operation + int b=0; // bit buffer + int k=0; // bits in bit buffer + int p=0; // input data pointer + int n; // bytes available there + int q; // output window write pointer + int m; // bytes to end of window or read pointer + int f; // pointer to copy strings from + + // copy input/output information to locals (UPDATE macro restores) + p=z.next_in_index;n=z.avail_in;b=s.bitb;k=s.bitk; + q=s.write;m=q= 258 && n >= 10){ + + s.bitb=b;s.bitk=k; + z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p; + s.write=q; + r = inflate_fast(lbits, dbits, + ltree, ltree_index, + dtree, dtree_index, + s, z); + + p=z.next_in_index;n=z.avail_in;b=s.bitb;k=s.bitk; + q=s.write;m=q>=(tree[tindex+1]); + k-=(tree[tindex+1]); + + e=tree[tindex]; + + if(e == 0){ // literal + lit = tree[tindex+2]; + mode = LIT; + break; + } + if((e & 16)!=0 ){ // length + get = e & 15; + len = tree[tindex+2]; + mode = LENEXT; + break; + } + if ((e & 64) == 0){ // next table + need = e; + tree_index = tindex/3+tree[tindex+2]; + break; + } + if ((e & 32)!=0){ // end of block + mode = WASH; + break; + } + mode = BADCODE; // invalid code + z.msg = "invalid literal/length code"; + r = Z_DATA_ERROR; + + s.bitb=b;s.bitk=k; + z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p; + s.write=q; + return s.inflate_flush(z,r); + + case LENEXT: // i: getting length extra (have base) + j = get; + + while(k<(j)){ + if(n!=0)r=Z_OK; + else{ + + s.bitb=b;s.bitk=k; + z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p; + s.write=q; + return s.inflate_flush(z,r); + } + n--; b|=(z.next_in[p++]&0xff)<>=j; + k-=j; + + need = dbits; + tree = dtree; + tree_index=dtree_index; + mode = DIST; + goto case DIST; + case DIST: // i: get distance next + j = need; + + while(k<(j)){ + if(n!=0)r=Z_OK; + else{ + + s.bitb=b;s.bitk=k; + z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p; + s.write=q; + return s.inflate_flush(z,r); + } + n--; b|=(z.next_in[p++]&0xff)<>=tree[tindex+1]; + k-=tree[tindex+1]; + + e = (tree[tindex]); + if((e & 16)!=0){ // distance + get = e & 15; + dist = tree[tindex+2]; + mode = DISTEXT; + break; + } + if ((e & 64) == 0){ // next table + need = e; + tree_index = tindex/3 + tree[tindex+2]; + break; + } + mode = BADCODE; // invalid code + z.msg = "invalid distance code"; + r = Z_DATA_ERROR; + + s.bitb=b;s.bitk=k; + z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p; + s.write=q; + return s.inflate_flush(z,r); + + case DISTEXT: // i: getting distance extra + j = get; + + while(k<(j)){ + if(n!=0)r=Z_OK; + else{ + + s.bitb=b;s.bitk=k; + z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p; + s.write=q; + return s.inflate_flush(z,r); + } + n--; b|=(z.next_in[p++]&0xff)<>=j; + k-=j; + + mode = COPY; + goto case COPY; + case COPY: // o: copying bytes in window, waiting for space + f = q - dist; + while(f < 0){ // modulo window size-"while" instead + f += s.end; // of "if" handles invalid distances + } + while (len!=0){ + + if(m==0){ + if(q==s.end&&s.read!=0){q=0;m=q 7){ // return unused byte, if any + k -= 8; + n++; + p--; // can always return one + } + + s.write=q; r=s.inflate_flush(z,r); + q=s.write;m=q= 258 && n >= 10 + // get literal/length code + while(k<(20)){ // max bits for literal/length code + n--; + b|=(z.next_in[p++]&0xff)<>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]); + + s.window[q++] = (byte)tp[tp_index_t_3+2]; + m--; + continue; + } + do { + + b>>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]); + + if((e&16)!=0){ + e &= 15; + c = tp[tp_index_t_3+2] + ((int)b & inflate_mask[e]); + + b>>=e; k-=e; + + // decode distance base of block to copy + while(k<(15)){ // max bits for distance code + n--; + b|=(z.next_in[p++]&0xff)<>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]); + + if((e&16)!=0){ + // get extra bits to add to distance base + e &= 15; + while(k<(e)){ // get extra bits (up to 13) + n--; + b|=(z.next_in[p++]&0xff)<>=(e); k-=(e); + + // do the copy + m -= c; + if (q >= d){ // offset before dest + // just copy + r=q-d; + if(q-r>0 && 2>(q-r)){ + s.window[q++]=s.window[r++]; // minimum count is three, + s.window[q++]=s.window[r++]; // so unroll loop a little + c-=2; + } + else{ + System.Array.Copy(s.window, r, s.window, q, 2); + q+=2; r+=2; c-=2; + } + } + else{ // else offset after destination + r=q-d; + do{ + r+=s.end; // force pointer in window + }while(r<0); // covers invalid distances + e=s.end-r; + if(c>e){ // if source crosses, + c-=e; // wrapped copy + if(q-r>0 && e>(q-r)){ + do{s.window[q++] = s.window[r++];} + while(--e!=0); + } + else{ + System.Array.Copy(s.window, r, s.window, q, e); + q+=e; r+=e; e=0; + } + r = 0; // copy rest from start of window + } + + } + + // copy all or what's left + if(q-r>0 && c>(q-r)){ + do{s.window[q++] = s.window[r++];} + while(--c!=0); + } + else{ + System.Array.Copy(s.window, r, s.window, q, c); + q+=c; r+=c; c=0; + } + break; + } + else if((e&64)==0){ + t+=tp[tp_index_t_3+2]; + t+=(b&inflate_mask[e]); + tp_index_t_3=(tp_index+t)*3; + e=tp[tp_index_t_3]; + } + else{ + z.msg = "invalid distance code"; + + c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3; + + s.bitb=b;s.bitk=k; + z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p; + s.write=q; + + return Z_DATA_ERROR; + } + } + while(true); + break; + } + + if((e&64)==0){ + t+=tp[tp_index_t_3+2]; + t+=(b&inflate_mask[e]); + tp_index_t_3=(tp_index+t)*3; + if((e=tp[tp_index_t_3])==0){ + + b>>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]); + + s.window[q++]=(byte)tp[tp_index_t_3+2]; + m--; + break; + } + } + else if((e&32)!=0){ + + c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3; + + s.bitb=b;s.bitk=k; + z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p; + s.write=q; + + return Z_STREAM_END; + } + else{ + z.msg="invalid literal/length code"; + + c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3; + + s.bitb=b;s.bitk=k; + z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p; + s.write=q; + + return Z_DATA_ERROR; + } + } + while(true); + } + while(m>=258 && n>= 10); + + // not enough input or output--restore pointers and return + c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3; + + s.bitb=b;s.bitk=k; + z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p; + s.write=q; + + return Z_OK; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/InfCodes.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/InfCodes.cs.meta new file mode 100644 index 000000000..be5b50c74 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/InfCodes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5900c7f6a2d2b704596f30b1ff8334c8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/InfTree.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/InfTree.cs new file mode 100644 index 000000000..68c3e39b6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/InfTree.cs @@ -0,0 +1,527 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +/* + * $Id: InfTree.cs,v 1.2 2008-05-10 09:35:40 bouncy Exp $ + * +Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. 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. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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. + */ +/* + * This program is based on zlib-1.1.3, so all credit should go authors + * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) + * and contributors of zlib. + */ + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Zlib { + + internal sealed class InfTree{ + + private const int MANY=1440; + + private const int Z_OK=0; + private const int Z_STREAM_END=1; + private const int Z_NEED_DICT=2; + private const int Z_ERRNO=-1; + private const int Z_STREAM_ERROR=-2; + private const int Z_DATA_ERROR=-3; + private const int Z_MEM_ERROR=-4; + private const int Z_BUF_ERROR=-5; + private const int Z_VERSION_ERROR=-6; + + private const int fixed_bl = 9; + private const int fixed_bd = 5; + + static readonly int[] fixed_tl = { + 96,7,256, 0,8,80, 0,8,16, 84,8,115, + 82,7,31, 0,8,112, 0,8,48, 0,9,192, + 80,7,10, 0,8,96, 0,8,32, 0,9,160, + 0,8,0, 0,8,128, 0,8,64, 0,9,224, + 80,7,6, 0,8,88, 0,8,24, 0,9,144, + 83,7,59, 0,8,120, 0,8,56, 0,9,208, + 81,7,17, 0,8,104, 0,8,40, 0,9,176, + 0,8,8, 0,8,136, 0,8,72, 0,9,240, + 80,7,4, 0,8,84, 0,8,20, 85,8,227, + 83,7,43, 0,8,116, 0,8,52, 0,9,200, + 81,7,13, 0,8,100, 0,8,36, 0,9,168, + 0,8,4, 0,8,132, 0,8,68, 0,9,232, + 80,7,8, 0,8,92, 0,8,28, 0,9,152, + 84,7,83, 0,8,124, 0,8,60, 0,9,216, + 82,7,23, 0,8,108, 0,8,44, 0,9,184, + 0,8,12, 0,8,140, 0,8,76, 0,9,248, + 80,7,3, 0,8,82, 0,8,18, 85,8,163, + 83,7,35, 0,8,114, 0,8,50, 0,9,196, + 81,7,11, 0,8,98, 0,8,34, 0,9,164, + 0,8,2, 0,8,130, 0,8,66, 0,9,228, + 80,7,7, 0,8,90, 0,8,26, 0,9,148, + 84,7,67, 0,8,122, 0,8,58, 0,9,212, + 82,7,19, 0,8,106, 0,8,42, 0,9,180, + 0,8,10, 0,8,138, 0,8,74, 0,9,244, + 80,7,5, 0,8,86, 0,8,22, 192,8,0, + 83,7,51, 0,8,118, 0,8,54, 0,9,204, + 81,7,15, 0,8,102, 0,8,38, 0,9,172, + 0,8,6, 0,8,134, 0,8,70, 0,9,236, + 80,7,9, 0,8,94, 0,8,30, 0,9,156, + 84,7,99, 0,8,126, 0,8,62, 0,9,220, + 82,7,27, 0,8,110, 0,8,46, 0,9,188, + 0,8,14, 0,8,142, 0,8,78, 0,9,252, + 96,7,256, 0,8,81, 0,8,17, 85,8,131, + 82,7,31, 0,8,113, 0,8,49, 0,9,194, + 80,7,10, 0,8,97, 0,8,33, 0,9,162, + 0,8,1, 0,8,129, 0,8,65, 0,9,226, + 80,7,6, 0,8,89, 0,8,25, 0,9,146, + 83,7,59, 0,8,121, 0,8,57, 0,9,210, + 81,7,17, 0,8,105, 0,8,41, 0,9,178, + 0,8,9, 0,8,137, 0,8,73, 0,9,242, + 80,7,4, 0,8,85, 0,8,21, 80,8,258, + 83,7,43, 0,8,117, 0,8,53, 0,9,202, + 81,7,13, 0,8,101, 0,8,37, 0,9,170, + 0,8,5, 0,8,133, 0,8,69, 0,9,234, + 80,7,8, 0,8,93, 0,8,29, 0,9,154, + 84,7,83, 0,8,125, 0,8,61, 0,9,218, + 82,7,23, 0,8,109, 0,8,45, 0,9,186, + 0,8,13, 0,8,141, 0,8,77, 0,9,250, + 80,7,3, 0,8,83, 0,8,19, 85,8,195, + 83,7,35, 0,8,115, 0,8,51, 0,9,198, + 81,7,11, 0,8,99, 0,8,35, 0,9,166, + 0,8,3, 0,8,131, 0,8,67, 0,9,230, + 80,7,7, 0,8,91, 0,8,27, 0,9,150, + 84,7,67, 0,8,123, 0,8,59, 0,9,214, + 82,7,19, 0,8,107, 0,8,43, 0,9,182, + 0,8,11, 0,8,139, 0,8,75, 0,9,246, + 80,7,5, 0,8,87, 0,8,23, 192,8,0, + 83,7,51, 0,8,119, 0,8,55, 0,9,206, + 81,7,15, 0,8,103, 0,8,39, 0,9,174, + 0,8,7, 0,8,135, 0,8,71, 0,9,238, + 80,7,9, 0,8,95, 0,8,31, 0,9,158, + 84,7,99, 0,8,127, 0,8,63, 0,9,222, + 82,7,27, 0,8,111, 0,8,47, 0,9,190, + 0,8,15, 0,8,143, 0,8,79, 0,9,254, + 96,7,256, 0,8,80, 0,8,16, 84,8,115, + 82,7,31, 0,8,112, 0,8,48, 0,9,193, + + 80,7,10, 0,8,96, 0,8,32, 0,9,161, + 0,8,0, 0,8,128, 0,8,64, 0,9,225, + 80,7,6, 0,8,88, 0,8,24, 0,9,145, + 83,7,59, 0,8,120, 0,8,56, 0,9,209, + 81,7,17, 0,8,104, 0,8,40, 0,9,177, + 0,8,8, 0,8,136, 0,8,72, 0,9,241, + 80,7,4, 0,8,84, 0,8,20, 85,8,227, + 83,7,43, 0,8,116, 0,8,52, 0,9,201, + 81,7,13, 0,8,100, 0,8,36, 0,9,169, + 0,8,4, 0,8,132, 0,8,68, 0,9,233, + 80,7,8, 0,8,92, 0,8,28, 0,9,153, + 84,7,83, 0,8,124, 0,8,60, 0,9,217, + 82,7,23, 0,8,108, 0,8,44, 0,9,185, + 0,8,12, 0,8,140, 0,8,76, 0,9,249, + 80,7,3, 0,8,82, 0,8,18, 85,8,163, + 83,7,35, 0,8,114, 0,8,50, 0,9,197, + 81,7,11, 0,8,98, 0,8,34, 0,9,165, + 0,8,2, 0,8,130, 0,8,66, 0,9,229, + 80,7,7, 0,8,90, 0,8,26, 0,9,149, + 84,7,67, 0,8,122, 0,8,58, 0,9,213, + 82,7,19, 0,8,106, 0,8,42, 0,9,181, + 0,8,10, 0,8,138, 0,8,74, 0,9,245, + 80,7,5, 0,8,86, 0,8,22, 192,8,0, + 83,7,51, 0,8,118, 0,8,54, 0,9,205, + 81,7,15, 0,8,102, 0,8,38, 0,9,173, + 0,8,6, 0,8,134, 0,8,70, 0,9,237, + 80,7,9, 0,8,94, 0,8,30, 0,9,157, + 84,7,99, 0,8,126, 0,8,62, 0,9,221, + 82,7,27, 0,8,110, 0,8,46, 0,9,189, + 0,8,14, 0,8,142, 0,8,78, 0,9,253, + 96,7,256, 0,8,81, 0,8,17, 85,8,131, + 82,7,31, 0,8,113, 0,8,49, 0,9,195, + 80,7,10, 0,8,97, 0,8,33, 0,9,163, + 0,8,1, 0,8,129, 0,8,65, 0,9,227, + 80,7,6, 0,8,89, 0,8,25, 0,9,147, + 83,7,59, 0,8,121, 0,8,57, 0,9,211, + 81,7,17, 0,8,105, 0,8,41, 0,9,179, + 0,8,9, 0,8,137, 0,8,73, 0,9,243, + 80,7,4, 0,8,85, 0,8,21, 80,8,258, + 83,7,43, 0,8,117, 0,8,53, 0,9,203, + 81,7,13, 0,8,101, 0,8,37, 0,9,171, + 0,8,5, 0,8,133, 0,8,69, 0,9,235, + 80,7,8, 0,8,93, 0,8,29, 0,9,155, + 84,7,83, 0,8,125, 0,8,61, 0,9,219, + 82,7,23, 0,8,109, 0,8,45, 0,9,187, + 0,8,13, 0,8,141, 0,8,77, 0,9,251, + 80,7,3, 0,8,83, 0,8,19, 85,8,195, + 83,7,35, 0,8,115, 0,8,51, 0,9,199, + 81,7,11, 0,8,99, 0,8,35, 0,9,167, + 0,8,3, 0,8,131, 0,8,67, 0,9,231, + 80,7,7, 0,8,91, 0,8,27, 0,9,151, + 84,7,67, 0,8,123, 0,8,59, 0,9,215, + 82,7,19, 0,8,107, 0,8,43, 0,9,183, + 0,8,11, 0,8,139, 0,8,75, 0,9,247, + 80,7,5, 0,8,87, 0,8,23, 192,8,0, + 83,7,51, 0,8,119, 0,8,55, 0,9,207, + 81,7,15, 0,8,103, 0,8,39, 0,9,175, + 0,8,7, 0,8,135, 0,8,71, 0,9,239, + 80,7,9, 0,8,95, 0,8,31, 0,9,159, + 84,7,99, 0,8,127, 0,8,63, 0,9,223, + 82,7,27, 0,8,111, 0,8,47, 0,9,191, + 0,8,15, 0,8,143, 0,8,79, 0,9,255 + }; + static readonly int[] fixed_td = { + 80,5,1, 87,5,257, 83,5,17, 91,5,4097, + 81,5,5, 89,5,1025, 85,5,65, 93,5,16385, + 80,5,3, 88,5,513, 84,5,33, 92,5,8193, + 82,5,9, 90,5,2049, 86,5,129, 192,5,24577, + 80,5,2, 87,5,385, 83,5,25, 91,5,6145, + 81,5,7, 89,5,1537, 85,5,97, 93,5,24577, + 80,5,4, 88,5,769, 84,5,49, 92,5,12289, + 82,5,13, 90,5,3073, 86,5,193, 192,5,24577 + }; + + // Tables for deflate from PKZIP's appnote.txt. + static readonly int[] cplens = { // Copy lengths for literal codes 257..285 + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 + }; + + // see note #13 above about 258 + static readonly int[] cplext = { // Extra bits for literal codes 257..285 + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, + 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112 // 112==invalid + }; + + static readonly int[] cpdist = { // Copy offsets for distance codes 0..29 + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577 + }; + + static readonly int[] cpdext = { // Extra bits for distance codes + 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, + 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, + 12, 12, 13, 13}; + + // If BMAX needs to be larger than 16, then h and x[] should be uLong. + const int BMAX=15; // maximum bit length of any code + + int[] hn = null; // hufts used in space + int[] v = null; // work area for huft_build + int[] c = null; // bit length count table + int[] r = null; // table entry for structure assignment + int[] u = null; // table stack + int[] x = null; // bit offsets, then code stack + + private int huft_build(int[] b, // code lengths in bits (all assumed <= BMAX) + int bindex, + int n, // number of codes (assumed <= 288) + int s, // number of simple-valued codes (0..s-1) + int[] d, // list of base values for non-simple codes + int[] e, // list of extra bits for non-simple codes + int[] t, // result: starting table + int[] m, // maximum lookup bits, returns actual + int[] hp,// space for trees + int[] hn,// hufts used in space + int[] v // working area: values in order of bit length + ){ + // Given a list of code lengths and a maximum table size, make a set of + // tables to decode that set of codes. Return Z_OK on success, Z_BUF_ERROR + // if the given code set is incomplete (the tables are still built in this + // case), Z_DATA_ERROR if the input is invalid (an over-subscribed set of + // lengths), or Z_MEM_ERROR if not enough memory. + + int a; // counter for codes of length k + int f; // i repeats in table every f entries + int g; // maximum code length + int h; // table level + int i; // counter, current code + int j; // counter + int k; // number of bits in current code + int l; // bits per table (returned in m) + int mask; // (1 << w) - 1, to avoid cc -O bug on HP + int p; // pointer into c[], b[], or v[] + int q; // points to current table + int w; // bits before this table == (l * h) + int xp; // pointer into x + int y; // number of dummy codes added + int z; // number of entries in current table + + // Generate counts for each bit length + + p = 0; i = n; + do { + c[b[bindex+p]]++; p++; i--; // assume all entries <= BMAX + }while(i!=0); + + if(c[0] == n){ // null input--all zero length codes + t[0] = -1; + m[0] = 0; + return Z_OK; + } + + // Find minimum and maximum length, bound *m by those + l = m[0]; + for (j = 1; j <= BMAX; j++) + if(c[j]!=0) break; + k = j; // minimum code length + if(l < j){ + l = j; + } + for (i = BMAX; i!=0; i--){ + if(c[i]!=0) break; + } + g = i; // maximum code length + if(l > i){ + l = i; + } + m[0] = l; + + // Adjust last length count to fill out codes, if needed + for (y = 1 << j; j < i; j++, y <<= 1){ + if ((y -= c[j]) < 0){ + return Z_DATA_ERROR; + } + } + if ((y -= c[i]) < 0){ + return Z_DATA_ERROR; + } + c[i] += y; + + // Generate starting offsets into the value table for each length + x[1] = j = 0; + p = 1; xp = 2; + while (--i!=0) { // note that i == g from above + x[xp] = (j += c[p]); + xp++; + p++; + } + + // Make a table of values in order of bit lengths + i = 0; p = 0; + do { + if ((j = b[bindex+p]) != 0){ + v[x[j]++] = i; + } + p++; + } + while (++i < n); + n = x[g]; // set n to length of v + + // Generate the Huffman codes and for each, make the table entries + x[0] = i = 0; // first Huffman code is zero + p = 0; // grab values in bit order + h = -1; // no tables yet--level -1 + w = -l; // bits decoded == (l * h) + u[0] = 0; // just to keep compilers happy + q = 0; // ditto + z = 0; // ditto + + // go through the bit lengths (k already is bits in shortest code) + for (; k <= g; k++){ + a = c[k]; + while (a--!=0){ + // here i is the Huffman code of length k bits for value *p + // make tables up to required level + while (k > w + l){ + h++; + w += l; // previous table always l bits + // compute minimum size table less than or equal to l bits + z = g - w; + z = (z > l) ? l : z; // table size upper limit + if((f=1<<(j=k-w))>a+1){ // try a k-w bit table + // too few codes for k-w bit table + f -= a + 1; // deduct codes from patterns left + xp = k; + if(j < z){ + while (++j < z){ // try smaller tables up to z bits + if((f <<= 1) <= c[++xp]) + break; // enough codes to use up j bits + f -= c[xp]; // else deduct codes from patterns + } + } + } + z = 1 << j; // table entries for j-bit table + + // allocate new table + if (hn[0] + z > MANY){ // (note: doesn't matter for fixed) + return Z_DATA_ERROR; // overflow of MANY + } + u[h] = q = /*hp+*/ hn[0]; // DEBUG + hn[0] += z; + + // connect to last table, if there is one + if(h!=0){ + x[h]=i; // save pattern for backing up + r[0]=(byte)j; // bits in this table + r[1]=(byte)l; // bits to dump before this table + j=i>>(w - l); + r[2] = (int)(q - u[h-1] - j); // offset to this table + System.Array.Copy(r, 0, hp, (u[h-1]+j)*3, 3); // connect to last table + } + else{ + t[0] = q; // first table is returned result + } + } + + // set up table entry in r + r[1] = (byte)(k - w); + if (p >= n){ + r[0] = 128 + 64; // out of values--invalid code + } + else if (v[p] < s){ + r[0] = (byte)(v[p] < 256 ? 0 : 32 + 64); // 256 is end-of-block + r[2] = v[p++]; // simple code is just the value + } + else{ + r[0]=(byte)(e[v[p]-s]+16+64); // non-simple--look up in lists + r[2]=d[v[p++] - s]; + } + + // fill code-like entries with r + f=1<<(k-w); + for (j=i>>w;j>= 1){ + i ^= j; + } + i ^= j; + + // backup over finished tables + mask = (1 << w) - 1; // needed on HP, cc -O bug + while ((i & mask) != x[h]){ + h--; // don't need to update q + w -= l; + mask = (1 << w) - 1; + } + } + } + // Return Z_BUF_ERROR if we were given an incomplete table + return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK; + } + + internal int inflate_trees_bits(int[] c, // 19 code lengths + int[] bb, // bits tree desired/actual depth + int[] tb, // bits tree result + int[] hp, // space for trees + ZStream z // for messages + ){ + int result; + initWorkArea(19); + hn[0]=0; + result = huft_build(c, 0, 19, 19, null, null, tb, bb, hp, hn, v); + + if(result == Z_DATA_ERROR){ + z.msg = "oversubscribed dynamic bit lengths tree"; + } + else if(result == Z_BUF_ERROR || bb[0] == 0){ + z.msg = "incomplete dynamic bit lengths tree"; + result = Z_DATA_ERROR; + } + return result; + } + + internal int inflate_trees_dynamic(int nl, // number of literal/length codes + int nd, // number of distance codes + int[] c, // that many (total) code lengths + int[] bl, // literal desired/actual bit depth + int[] bd, // distance desired/actual bit depth + int[] tl, // literal/length tree result + int[] td, // distance tree result + int[] hp, // space for trees + ZStream z // for messages + ){ + int result; + + // build literal/length tree + initWorkArea(288); + hn[0]=0; + result = huft_build(c, 0, nl, 257, cplens, cplext, tl, bl, hp, hn, v); + if (result != Z_OK || bl[0] == 0){ + if(result == Z_DATA_ERROR){ + z.msg = "oversubscribed literal/length tree"; + } + else if (result != Z_MEM_ERROR){ + z.msg = "incomplete literal/length tree"; + result = Z_DATA_ERROR; + } + return result; + } + + // build distance tree + initWorkArea(288); + result = huft_build(c, nl, nd, 0, cpdist, cpdext, td, bd, hp, hn, v); + + if (result != Z_OK || (bd[0] == 0 && nl > 257)){ + if (result == Z_DATA_ERROR){ + z.msg = "oversubscribed distance tree"; + } + else if (result == Z_BUF_ERROR) { + z.msg = "incomplete distance tree"; + result = Z_DATA_ERROR; + } + else if (result != Z_MEM_ERROR){ + z.msg = "empty distance tree with lengths"; + result = Z_DATA_ERROR; + } + return result; + } + + return Z_OK; + } + + internal static int inflate_trees_fixed(int[] bl, //literal desired/actual bit depth + int[] bd, //distance desired/actual bit depth + int[][] tl,//literal/length tree result + int[][] td,//distance tree result + ZStream z //for memory allocation + ){ + bl[0]=fixed_bl; + bd[0]=fixed_bd; + tl[0]=fixed_tl; + td[0]=fixed_td; + return Z_OK; + } + + private void initWorkArea(int vsize){ + if(hn==null){ + hn=new int[1]; + v=new int[vsize]; + c=new int[BMAX+1]; + r=new int[3]; + u=new int[BMAX]; + x=new int[BMAX+1]; + } + if(v.Lengthstate); + return Z_OK; + } + + internal int inflateInit(ZStream z, int w){ + z.msg = null; + blocks = null; + + // handle undocumented nowrap option (no zlib header or check) + nowrap = 0; + if(w < 0){ + w = - w; + nowrap = 1; + } + + // set window size + if(w<8 ||w>15){ + inflateEnd(z); + return Z_STREAM_ERROR; + } + wbits=w; + + z.istate.blocks=new InfBlocks(z, + z.istate.nowrap!=0 ? null : this, + 1<>4)+8>z.istate.wbits){ + z.istate.mode = BAD; + z.msg="invalid window size"; + z.istate.marker = 5; // can't try inflateSync + break; + } + z.istate.mode=FLAG; + goto case FLAG; + case FLAG: + + if(z.avail_in==0)return r;r=f; + + z.avail_in--; z.total_in++; + b = (z.next_in[z.next_in_index++])&0xff; + + if((((z.istate.method << 8)+b) % 31)!=0){ + z.istate.mode = BAD; + z.msg = "incorrect header check"; + z.istate.marker = 5; // can't try inflateSync + break; + } + + if((b&PRESET_DICT)==0){ + z.istate.mode = BLOCKS; + break; + } + z.istate.mode = DICT4; + goto case DICT4; + case DICT4: + + if(z.avail_in==0)return r;r=f; + + z.avail_in--; z.total_in++; + z.istate.need=((z.next_in[z.next_in_index++]&0xff)<<24)&0xff000000L; + z.istate.mode=DICT3; + goto case DICT3; + case DICT3: + + if(z.avail_in==0)return r;r=f; + + z.avail_in--; z.total_in++; + z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<16)&0xff0000L; + z.istate.mode=DICT2; + goto case DICT2; + case DICT2: + + if(z.avail_in==0)return r;r=f; + + z.avail_in--; z.total_in++; + z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<8)&0xff00L; + z.istate.mode=DICT1; + goto case DICT1; + case DICT1: + + if(z.avail_in==0)return r;r=f; + + z.avail_in--; z.total_in++; + z.istate.need += (z.next_in[z.next_in_index++]&0xffL); + z.adler = z.istate.need; + z.istate.mode = DICT0; + return Z_NEED_DICT; + case DICT0: + z.istate.mode = BAD; + z.msg = "need dictionary"; + z.istate.marker = 0; // can try inflateSync + return Z_STREAM_ERROR; + case BLOCKS: + + r = z.istate.blocks.proc(z, r); + if(r == Z_DATA_ERROR){ + z.istate.mode = BAD; + z.istate.marker = 0; // can try inflateSync + break; + } + if(r == Z_OK){ + r = f; + } + if(r != Z_STREAM_END){ + return r; + } + r = f; + z.istate.blocks.reset(z, z.istate.was); + if(z.istate.nowrap!=0){ + z.istate.mode=DONE; + break; + } + z.istate.mode=CHECK4; + goto case CHECK4; + case CHECK4: + + if(z.avail_in==0)return r;r=f; + + z.avail_in--; z.total_in++; + z.istate.need=((z.next_in[z.next_in_index++]&0xff)<<24)&0xff000000L; + z.istate.mode=CHECK3; + goto case CHECK3; + case CHECK3: + + if(z.avail_in==0)return r;r=f; + + z.avail_in--; z.total_in++; + z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<16)&0xff0000L; + z.istate.mode = CHECK2; + goto case CHECK2; + case CHECK2: + + if(z.avail_in==0)return r;r=f; + + z.avail_in--; z.total_in++; + z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<8)&0xff00L; + z.istate.mode = CHECK1; + goto case CHECK1; + case CHECK1: + + if(z.avail_in==0)return r;r=f; + + z.avail_in--; z.total_in++; + z.istate.need+=(z.next_in[z.next_in_index++]&0xffL); + + if(((int)(z.istate.was[0])) != ((int)(z.istate.need))){ + z.istate.mode = BAD; + z.msg = "incorrect data check"; + z.istate.marker = 5; // can't try inflateSync + break; + } + + z.istate.mode = DONE; + goto case DONE; + case DONE: + return Z_STREAM_END; + case BAD: + return Z_DATA_ERROR; + default: + return Z_STREAM_ERROR; + } + } + } + + + internal int inflateSetDictionary(ZStream z, byte[] dictionary, int dictLength){ + int index=0; + int length = dictLength; + if(z==null || z.istate == null|| z.istate.mode != DICT0) + return Z_STREAM_ERROR; + + if(z._adler.adler32(1L, dictionary, 0, dictLength)!=z.adler){ + return Z_DATA_ERROR; + } + + z.adler = z._adler.adler32(0, null, 0, 0); + + if(length >= (1< 0) + { + output.Write(buf, 0, count); + } + } + while (z.avail_in > 0 || z.avail_out == 0); + + Flush(); + } + + public override void Flush() + { + output.Flush(); + } + + public virtual int FlushMode + { + get { return flushLevel; } + set { this.flushLevel = value; } + } + + public virtual long TotalIn + { + get { return z.total_in; } + } + + public virtual long TotalOut + { + get { return z.total_out; } + } + + public override void Write(byte[] buffer, int offset, int count) + { + Streams.ValidateBufferArguments(buffer, offset, count); + + if (count == 0) + return; + + z.next_in = buffer; + z.next_in_index = offset; + z.avail_in = count; + + do + { + z.next_out = buf; + z.next_out_index = 0; + z.avail_out = buf.Length; + + int err = compress + ? z.deflate(flushLevel) + : z.inflate(flushLevel); + + if (err != JZlib.Z_OK) + // TODO + //throw new ZStreamException((compress ? "de" : "in") + "flating: " + z.msg); + throw new IOException((compress ? "de" : "in") + "flating: " + z.msg); + + output.Write(buf, 0, buf.Length - z.avail_out); + } + while (z.avail_in > 0 || z.avail_out == 0); + } + + public override void WriteByte(byte value) + { + buf1[0] = value; + Write(buf1, 0, 1); + } + } + + public class ZOutputStreamLeaveOpen + : ZOutputStream + { + public ZOutputStreamLeaveOpen(Stream output) + : base(output) + { + } + + public ZOutputStreamLeaveOpen(Stream output, bool nowrap) + : base(output, nowrap) + { + } + + public ZOutputStreamLeaveOpen(Stream output, ZStream z) + : base(output, z) + { + } + + public ZOutputStreamLeaveOpen(Stream output, int level) + : base(output, level) + { + } + + public ZOutputStreamLeaveOpen(Stream output, int level, bool nowrap) + : base(output, level, nowrap) + { + } + + protected override void Dispose(bool disposing) + { + Detach(disposing); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/ZOutputStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/ZOutputStream.cs.meta new file mode 100644 index 000000000..4a5a596e3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/ZOutputStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7184782482afa5f43b30b456f1930268 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/ZStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/ZStream.cs new file mode 100644 index 000000000..2eded6bcb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/ZStream.cs @@ -0,0 +1,218 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +/* + * $Id: ZStream.cs,v 1.1 2006-07-31 13:59:26 bouncy Exp $ + * +Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. 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. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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. + */ +/* + * This program is based on zlib-1.1.3, so all credit should go authors + * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) + * and contributors of zlib. + */ + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Zlib { + + public sealed class ZStream{ + + private const int MAX_WBITS=15; // 32K LZ77 window + private const int DEF_WBITS=MAX_WBITS; + + private const int Z_NO_FLUSH=0; + private const int Z_PARTIAL_FLUSH=1; + private const int Z_SYNC_FLUSH=2; + private const int Z_FULL_FLUSH=3; + private const int Z_FINISH=4; + + private const int MAX_MEM_LEVEL=9; + + private const int Z_OK=0; + private const int Z_STREAM_END=1; + private const int Z_NEED_DICT=2; + private const int Z_ERRNO=-1; + private const int Z_STREAM_ERROR=-2; + private const int Z_DATA_ERROR=-3; + private const int Z_MEM_ERROR=-4; + private const int Z_BUF_ERROR=-5; + private const int Z_VERSION_ERROR=-6; + + public byte[] next_in; // next input byte + public int next_in_index; + public int avail_in; // number of bytes available at next_in + public long total_in; // total nb of input bytes read so far + + public byte[] next_out; // next output byte should be put there + public int next_out_index; + public int avail_out; // remaining free space at next_out + public long total_out; // total nb of bytes output so far + + public string msg; + + internal Deflate dstate; + internal Inflate istate; + + internal int data_type; // best guess about the data type: ascii or binary + + public long adler; + internal Adler32 _adler=new Adler32(); + + public int inflateInit(){ + return inflateInit(DEF_WBITS); + } + public int inflateInit(bool nowrap){ + return inflateInit(DEF_WBITS, nowrap); + } + public int inflateInit(int w){ + return inflateInit(w, false); + } + + public int inflateInit(int w, bool nowrap){ + istate=new Inflate(); + return istate.inflateInit(this, nowrap?-w:w); + } + + public int inflate(int f){ + if(istate==null) return Z_STREAM_ERROR; + return istate.inflate(this, f); + } + public int inflateEnd(){ + if(istate==null) return Z_STREAM_ERROR; + int ret=istate.inflateEnd(this); + istate = null; + return ret; + } + public int inflateSync(){ + if(istate == null) + return Z_STREAM_ERROR; + return istate.inflateSync(this); + } + public int inflateSetDictionary(byte[] dictionary, int dictLength){ + if(istate == null) + return Z_STREAM_ERROR; + return istate.inflateSetDictionary(this, dictionary, dictLength); + } + + public int deflateInit(int level){ + return deflateInit(level, MAX_WBITS); + } + public int deflateInit(int level, bool nowrap){ + return deflateInit(level, MAX_WBITS, nowrap); + } + public int deflateInit(int level, int bits){ + return deflateInit(level, bits, false); + } + public int deflateInit(int level, int bits, bool nowrap){ + dstate=new Deflate(); + return dstate.deflateInit(this, level, nowrap?-bits:bits); + } + public int deflate(int flush){ + if(dstate==null){ + return Z_STREAM_ERROR; + } + return dstate.deflate(this, flush); + } + public int deflateEnd(){ + if(dstate==null) return Z_STREAM_ERROR; + int ret=dstate.deflateEnd(); + dstate=null; + return ret; + } + public int deflateParams(int level, int strategy){ + if(dstate==null) return Z_STREAM_ERROR; + return dstate.deflateParams(this, level, strategy); + } + public int deflateSetDictionary (byte[] dictionary, int dictLength){ + if(dstate == null) + return Z_STREAM_ERROR; + return dstate.deflateSetDictionary(this, dictionary, dictLength); + } + + // Flush as much pending output as possible. All deflate() output goes + // through this function so some applications may wish to modify it + // to avoid allocating a large strm->next_out buffer and copying into it. + // (See also read_buf()). + internal void flush_pending(){ + int len=dstate.pending; + + if(len>avail_out) len=avail_out; + if(len==0) return; + + if(dstate.pending_buf.Length<=dstate.pending_out || + next_out.Length<=next_out_index || + dstate.pending_buf.Length<(dstate.pending_out+len) || + next_out.Length<(next_out_index+len)){ + // System.out.println(dstate.pending_buf.length+", "+dstate.pending_out+ + // ", "+next_out.length+", "+next_out_index+", "+len); + // System.out.println("avail_out="+avail_out); + } + + System.Array.Copy(dstate.pending_buf, dstate.pending_out, + next_out, next_out_index, len); + + next_out_index+=len; + dstate.pending_out+=len; + total_out+=len; + avail_out-=len; + dstate.pending-=len; + if(dstate.pending==0){ + dstate.pending_out=0; + } + } + + // Read a new buffer from the current input stream, update the adler32 + // and total number of bytes read. All deflate() input goes through + // this function so some applications may wish to modify it to avoid + // allocating a large strm->next_in buffer and copying from it. + // (See also flush_pending()). + internal int read_buf(byte[] buf, int start, int size) { + int len=avail_in; + + if(len>size) len=size; + if(len==0) return 0; + + avail_in-=len; + + if(dstate.noheader==0) { + adler=_adler.adler32(adler, next_in, next_in_index, len); + } + System.Array.Copy(next_in, next_in_index, buf, start, len); + next_in_index += len; + total_in += len; + return len; + } + + public void free(){ + next_in=null; + next_out=null; + msg=null; + _adler=null; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/ZStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/ZStream.cs.meta new file mode 100644 index 000000000..b4414aea7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/ZStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8ddcf6fa74a82c246a547246aefee100 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/ZTree.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/ZTree.cs new file mode 100644 index 000000000..bd123192c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/ZTree.cs @@ -0,0 +1,371 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +/* + * $Id: Tree.cs,v 1.2 2008-05-10 09:35:40 bouncy Exp $ + * +Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. 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. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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. + */ +/* + * This program is based on zlib-1.1.3, so all credit should go authors + * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) + * and contributors of zlib. + */ + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Zlib { + + internal sealed class Tree{ + private const int MAX_BITS=15; + private const int BL_CODES=19; + private const int D_CODES=30; + private const int LITERALS=256; + private const int LENGTH_CODES=29; + private const int L_CODES=(LITERALS+1+LENGTH_CODES); + private const int HEAP_SIZE=(2*L_CODES+1); + + // Bit length codes must not exceed MAX_BL_BITS bits + internal const int MAX_BL_BITS=7; + + // end of block literal code + internal const int END_BLOCK=256; + + // repeat previous bit length 3-6 times (2 bits of repeat count) + internal const int REP_3_6=16; + + // repeat a zero length 3-10 times (3 bits of repeat count) + internal const int REPZ_3_10=17; + + // repeat a zero length 11-138 times (7 bits of repeat count) + internal const int REPZ_11_138=18; + + // extra bits for each length code + internal static readonly int[] extra_lbits={ + 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0 + }; + + // extra bits for each distance code + internal static readonly int[] extra_dbits={ + 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13 + }; + + // extra bits for each bit length code + internal static readonly int[] extra_blbits={ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7 + }; + + internal static readonly byte[] bl_order={ + 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15}; + + + // The lengths of the bit length codes are sent in order of decreasing + // probability, to avoid transmitting the lengths for unused bit + // length codes. + + internal const int Buf_size=8*2; + + // see definition of array dist_code below + internal const int DIST_CODE_LEN=512; + + internal static readonly byte[] _dist_code = { + 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, + 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, + 18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, + 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 + }; + + internal static readonly byte[] _length_code={ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, + 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, + 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, + 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 + }; + + internal static readonly int[] base_length = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, + 64, 80, 96, 112, 128, 160, 192, 224, 0 + }; + + internal static readonly int[] base_dist = { + 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, + 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, + 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 + }; + + // Mapping from a distance to a distance code. dist is the distance - 1 and + // must not have side effects. _dist_code[256] and _dist_code[257] are never + // used. + internal static int d_code(int dist){ + return ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]); + } + + internal short[] dyn_tree; // the dynamic tree + internal int max_code; // largest code with non zero frequency + internal StaticTree stat_desc; // the corresponding static tree + + // Compute the optimal bit lengths for a tree and update the total bit length + // for the current block. + // IN assertion: the fields freq and dad are set, heap[heap_max] and + // above are the tree nodes sorted by increasing frequency. + // OUT assertions: the field len is set to the optimal bit length, the + // array bl_count contains the frequencies for each bit length. + // The length opt_len is updated; static_len is also updated if stree is + // not null. + internal void gen_bitlen(Deflate s){ + short[] tree = dyn_tree; + short[] stree = stat_desc.static_tree; + int[] extra = stat_desc.extra_bits; + int based = stat_desc.extra_base; + int max_length = stat_desc.max_length; + int h; // heap index + int n, m; // iterate over the tree elements + int bits; // bit length + int xbits; // extra bits + short f; // frequency + int overflow = 0; // number of elements with bit length too large + + for (bits = 0; bits <= MAX_BITS; bits++) s.bl_count[bits] = 0; + + // In a first pass, compute the optimal bit lengths (which may + // overflow in the case of the bit length tree). + tree[s.heap[s.heap_max]*2+1] = 0; // root of the heap + + for(h=s.heap_max+1; h max_length){ bits = max_length; overflow++; } + tree[n*2+1] = (short)bits; + // We overwrite tree[n*2+1] which is no longer needed + + if (n > max_code) continue; // not a leaf node + + s.bl_count[bits]++; + xbits = 0; + if (n >= based) xbits = extra[n-based]; + f = tree[n*2]; + s.opt_len += f * (bits + xbits); + if (stree!=null) s.static_len += f * (stree[n*2+1] + xbits); + } + if (overflow == 0) return; + + // This happens for example on obj2 and pic of the Calgary corpus + // Find the first bit length which could increase: + do { + bits = max_length-1; + while(s.bl_count[bits]==0) bits--; + s.bl_count[bits]--; // move one leaf down the tree + s.bl_count[bits+1]+=2; // move one overflow item as its brother + s.bl_count[max_length]--; + // The brother of the overflow item also moves one step up, + // but this does not affect bl_count[max_length] + overflow -= 2; + } + while (overflow > 0); + + for (bits = max_length; bits != 0; bits--) { + n = s.bl_count[bits]; + while (n != 0) { + m = s.heap[--h]; + if (m > max_code) continue; + if (tree[m*2+1] != bits) { + s.opt_len += (int)(((long)bits - (long)tree[m*2+1])*(long)tree[m*2]); + tree[m*2+1] = (short)bits; + } + n--; + } + } + } + + // Construct one Huffman tree and assigns the code bit strings and lengths. + // Update the total bit length for the current block. + // IN assertion: the field freq is set for all tree elements. + // OUT assertions: the fields len and code are set to the optimal bit length + // and corresponding code. The length opt_len is updated; static_len is + // also updated if stree is not null. The field max_code is set. + internal void build_tree(Deflate s){ + short[] tree=dyn_tree; + short[] stree=stat_desc.static_tree; + int elems=stat_desc.elems; + int n, m; // iterate over heap elements + int max_code=-1; // largest code with non zero frequency + int node; // new node being created + + // Construct the initial heap, with least frequent element in + // heap[1]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + // heap[0] is not used. + s.heap_len = 0; + s.heap_max = HEAP_SIZE; + + for(n=0; n=1; n--) + s.pqdownheap(tree, n); + + // Construct the Huffman tree by repeatedly combining the least two + // frequent nodes. + + node=elems; // next internal node of the tree + do{ + // n = node of least frequency + n=s.heap[1]; + s.heap[1]=s.heap[s.heap_len--]; + s.pqdownheap(tree, 1); + m=s.heap[1]; // m = node of next least frequency + + s.heap[--s.heap_max] = n; // keep the nodes sorted by frequency + s.heap[--s.heap_max] = m; + + // Create a new node father of n and m + tree[node*2] = (short)(tree[n*2] + tree[m*2]); + s.depth[node] = (byte)(System.Math.Max(s.depth[n],s.depth[m])+1); + tree[n*2+1] = tree[m*2+1] = (short)node; + + // and insert the new node in the heap + s.heap[1] = node++; + s.pqdownheap(tree, 1); + } + while(s.heap_len>=2); + + s.heap[--s.heap_max] = s.heap[1]; + + // At this point, the fields freq and dad are set. We can now + // generate the bit lengths. + + gen_bitlen(s); + + // The field len is now set, we can generate the bit codes + gen_codes(tree, max_code, s.bl_count); + } + + // Generate the codes for a given tree and bit counts (which need not be + // optimal). + // IN assertion: the array bl_count contains the bit length statistics for + // the given tree and the field len is set for all tree elements. + // OUT assertion: the field code is set for all tree elements of non + // zero code length. + internal static void gen_codes(short[] tree, // the tree to decorate + int max_code, // largest code with non zero frequency + short[] bl_count // number of codes at each bit length + ){ + short[] next_code=new short[MAX_BITS+1]; // next code value for each bit length + short code = 0; // running code value + int bits; // bit index + int n; // code index + + // The distribution counts are first used to generate the code values + // without bit reversal. + for (bits = 1; bits <= MAX_BITS; bits++) { + next_code[bits] = code = (short)((code + bl_count[bits-1]) << 1); + } + + // Check that the bit counts in bl_count are consistent. The last code + // must be all ones. + //Assert (code + bl_count[MAX_BITS]-1 == (1<>=1; + res<<=1; + } + while(--len>0); + return res>>1; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/ZTree.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/ZTree.cs.meta new file mode 100644 index 000000000..5899c95ed --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/util/zlib/ZTree.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 834fa3fb1cac3254fb41c39d4f5b2957 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509.meta new file mode 100644 index 000000000..1b5af6116 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c54419453e5665246b78dd2cc005e17a +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/AttributeCertificateHolder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/AttributeCertificateHolder.cs new file mode 100644 index 000000000..3305b908e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/AttributeCertificateHolder.cs @@ -0,0 +1,427 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + /// + /// The Holder object. + ///
    + 	/// Holder ::= SEQUENCE {
    + 	///		baseCertificateID   [0] IssuerSerial OPTIONAL,
    + 	///			-- the issuer and serial number of
    + 	///			-- the holder's Public Key Certificate
    + 	///		entityName          [1] GeneralNames OPTIONAL,
    + 	///			-- the name of the claimant or role
    + 	///		objectDigestInfo    [2] ObjectDigestInfo OPTIONAL
    + 	///			-- used to directly authenticate the holder,
    + 	///			-- for example, an executable
    + 	/// }
    +	/// 
    + ///
    + public class AttributeCertificateHolder + //: CertSelector, Selector + : ISelector + { + internal readonly Holder holder; + + internal AttributeCertificateHolder( + Asn1Sequence seq) + { + holder = Holder.GetInstance(seq); + } + + public AttributeCertificateHolder( + X509Name issuerName, + BigInteger serialNumber) + { + holder = new Holder( + new IssuerSerial( + GenerateGeneralNames(issuerName), + new DerInteger(serialNumber))); + } + + public AttributeCertificateHolder( + X509Certificate cert) + { + X509Name name; + try + { + name = PrincipalUtilities.GetIssuerX509Principal(cert); + } + catch (Exception e) + { + throw new CertificateParsingException(e.Message); + } + + holder = new Holder(new IssuerSerial(GenerateGeneralNames(name), new DerInteger(cert.SerialNumber))); + } + + public AttributeCertificateHolder( + X509Name principal) + { + holder = new Holder(GenerateGeneralNames(principal)); + } + + /** + * Constructs a holder for v2 attribute certificates with a hash value for + * some type of object. + *

    + * digestedObjectType can be one of the following: + *

      + *
    • 0 - publicKey - A hash of the public key of the holder must be + * passed.
    • + *
    • 1 - publicKeyCert - A hash of the public key certificate of the + * holder must be passed.
    • + *
    • 2 - otherObjectDigest - A hash of some other object type must be + * passed. otherObjectTypeID must not be empty.
    • + *
    + *

    + *

    This cannot be used if a v1 attribute certificate is used.

    + * + * @param digestedObjectType The digest object type. + * @param digestAlgorithm The algorithm identifier for the hash. + * @param otherObjectTypeID The object type ID if + * digestedObjectType is + * otherObjectDigest. + * @param objectDigest The hash value. + */ + public AttributeCertificateHolder( + int digestedObjectType, + string digestAlgorithm, + string otherObjectTypeID, + byte[] objectDigest) + { + // TODO Allow 'objectDigest' to be null? + + holder = new Holder(new ObjectDigestInfo(digestedObjectType, otherObjectTypeID, + new AlgorithmIdentifier(new DerObjectIdentifier(digestAlgorithm)), Arrays.Clone(objectDigest))); + } + + /** + * Returns the digest object type if an object digest info is used. + *

    + *

      + *
    • 0 - publicKey - A hash of the public key of the holder must be + * passed.
    • + *
    • 1 - publicKeyCert - A hash of the public key certificate of the + * holder must be passed.
    • + *
    • 2 - otherObjectDigest - A hash of some other object type must be + * passed. otherObjectTypeID must not be empty.
    • + *
    + *

    + * + * @return The digest object type or -1 if no object digest info is set. + */ + public int DigestedObjectType + { + get + { + ObjectDigestInfo odi = holder.ObjectDigestInfo; + + return odi == null + ? -1 + : odi.DigestedObjectType.IntValueExact; + } + } + + /** + * Returns the other object type ID if an object digest info is used. + * + * @return The other object type ID or null if no object + * digest info is set. + */ + public string DigestAlgorithm + { + get + { + ObjectDigestInfo odi = holder.ObjectDigestInfo; + + return odi == null + ? null + : odi.DigestAlgorithm.Algorithm.Id; + } + } + + /** + * Returns the hash if an object digest info is used. + * + * @return The hash or null if no object digest info is set. + */ + public byte[] GetObjectDigest() + { + ObjectDigestInfo odi = holder.ObjectDigestInfo; + + return odi == null + ? null + : odi.ObjectDigest.GetBytes(); + } + + /** + * Returns the digest algorithm ID if an object digest info is used. + * + * @return The digest algorithm ID or null if no object + * digest info is set. + */ + public string OtherObjectTypeID + { + get + { + ObjectDigestInfo odi = holder.ObjectDigestInfo; + + return odi == null + ? null + : odi.OtherObjectTypeID.Id; + } + } + + private GeneralNames GenerateGeneralNames( + X509Name principal) + { +// return GeneralNames.GetInstance(new DerSequence(new GeneralName(principal))); + return new GeneralNames(new GeneralName(principal)); + } + + private bool MatchesDN( + X509Name subject, + GeneralNames targets) + { + GeneralName[] names = targets.GetNames(); + + for (int i = 0; i != names.Length; i++) + { + GeneralName gn = names[i]; + + if (gn.TagNo == GeneralName.DirectoryName) + { + try + { + if (X509Name.GetInstance(gn.Name).Equivalent(subject)) + { + return true; + } + } + catch (Exception) + { + } + } + } + + return false; + } + + private object[] GetNames( + GeneralName[] names) + { + int count = 0; + for (int i = 0; i != names.Length; i++) + { + if (names[i].TagNo == GeneralName.DirectoryName) + { + ++count; + } + } + + object[] result = new object[count]; + + int pos = 0; + for (int i = 0; i != names.Length; i++) + { + if (names[i].TagNo == GeneralName.DirectoryName) + { + result[pos++] = X509Name.GetInstance(names[i].Name); + } + } + + return result; + } + + private X509Name[] GetPrincipals( + GeneralNames names) + { + object[] p = this.GetNames(names.GetNames()); + + int count = 0; + + for (int i = 0; i != p.Length; i++) + { + if (p[i] is X509Name) + { + ++count; + } + } + + X509Name[] result = new X509Name[count]; + + int pos = 0; + for (int i = 0; i != p.Length; i++) + { + if (p[i] is X509Name) + { + result[pos++] = (X509Name)p[i]; + } + } + + return result; + } + + /** + * Return any principal objects inside the attribute certificate holder entity names field. + * + * @return an array of IPrincipal objects (usually X509Name), null if no entity names field is set. + */ + public X509Name[] GetEntityNames() + { + if (holder.EntityName != null) + { + return GetPrincipals(holder.EntityName); + } + + return null; + } + + /** + * Return the principals associated with the issuer attached to this holder + * + * @return an array of principals, null if no BaseCertificateID is set. + */ + public X509Name[] GetIssuer() + { + if (holder.BaseCertificateID != null) + { + return GetPrincipals(holder.BaseCertificateID.Issuer); + } + + return null; + } + + /** + * Return the serial number associated with the issuer attached to this holder. + * + * @return the certificate serial number, null if no BaseCertificateID is set. + */ + public BigInteger SerialNumber + { + get + { + if (holder.BaseCertificateID != null) + { + return holder.BaseCertificateID.Serial.Value; + } + + return null; + } + } + + public object Clone() + { + return new AttributeCertificateHolder((Asn1Sequence)holder.ToAsn1Object()); + } + + public bool Match(X509Certificate x509Cert) + { + if (x509Cert == null) + return false; + + try + { + if (holder.BaseCertificateID != null) + { + return holder.BaseCertificateID.Serial.HasValue(x509Cert.SerialNumber) + && MatchesDN(PrincipalUtilities.GetIssuerX509Principal(x509Cert), holder.BaseCertificateID.Issuer); + } + + if (holder.EntityName != null) + { + if (MatchesDN(PrincipalUtilities.GetSubjectX509Principal(x509Cert), holder.EntityName)) + { + return true; + } + } + + if (holder.ObjectDigestInfo != null) + { + IDigest md = null; + try + { + md = DigestUtilities.GetDigest(DigestAlgorithm); + } + catch (Exception) + { + return false; + } + + switch (DigestedObjectType) + { + case ObjectDigestInfo.PublicKey: + { + // TODO: DSA Dss-parms + + //byte[] b = x509Cert.GetPublicKey().getEncoded(); + // TODO Is this the right way to encode? + byte[] b = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo( + x509Cert.GetPublicKey()).GetEncoded(); + md.BlockUpdate(b, 0, b.Length); + break; + } + + case ObjectDigestInfo.PublicKeyCert: + { + byte[] b = x509Cert.GetEncoded(); + md.BlockUpdate(b, 0, b.Length); + break; + } + + // TODO Default handler? + } + + // TODO Shouldn't this be the other way around? + if (!Arrays.AreEqual(DigestUtilities.DoFinal(md), GetObjectDigest())) + { + return false; + } + } + } + catch (CertificateEncodingException) + { + return false; + } + + return false; + } + + public override bool Equals( + object obj) + { + if (obj == this) + { + return true; + } + + if (!(obj is AttributeCertificateHolder)) + { + return false; + } + + AttributeCertificateHolder other = (AttributeCertificateHolder)obj; + + return this.holder.Equals(other.holder); + } + + public override int GetHashCode() + { + return this.holder.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/AttributeCertificateHolder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/AttributeCertificateHolder.cs.meta new file mode 100644 index 000000000..4317107f0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/AttributeCertificateHolder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 938387042cf639245ad61e6176058eca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/AttributeCertificateIssuer.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/AttributeCertificateIssuer.cs new file mode 100644 index 000000000..ffb1e405d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/AttributeCertificateIssuer.cs @@ -0,0 +1,182 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + /** + * Carrying class for an attribute certificate issuer. + */ + public class AttributeCertificateIssuer + //: CertSelector, Selector + : ISelector + { + internal readonly Asn1Encodable form; + + /** + * Set the issuer directly with the ASN.1 structure. + * + * @param issuer The issuer + */ + public AttributeCertificateIssuer( + AttCertIssuer issuer) + { + form = issuer.Issuer; + } + + public AttributeCertificateIssuer( + X509Name principal) + { +// form = new V2Form(GeneralNames.GetInstance(new DerSequence(new GeneralName(principal)))); + form = new V2Form(new GeneralNames(new GeneralName(principal))); + } + + private object[] GetNames() + { + GeneralNames name; + if (form is V2Form) + { + name = ((V2Form)form).IssuerName; + } + else + { + name = (GeneralNames)form; + } + + GeneralName[] names = name.GetNames(); + + int count = 0; + for (int i = 0; i != names.Length; i++) + { + if (names[i].TagNo == GeneralName.DirectoryName) + { + ++count; + } + } + + object[] result = new object[count]; + + int pos = 0; + for (int i = 0; i != names.Length; i++) + { + if (names[i].TagNo == GeneralName.DirectoryName) + { + result[pos++] = X509Name.GetInstance(names[i].Name); + } + } + + return result; + } + + /// Return any principal objects inside the attribute certificate issuer object. + /// An array of IPrincipal objects (usually X509Principal). + public X509Name[] GetPrincipals() + { + object[] p = this.GetNames(); + + int count = 0; + for (int i = 0; i != p.Length; i++) + { + if (p[i] is X509Name) + { + ++count; + } + } + + X509Name[] result = new X509Name[count]; + + int pos = 0; + for (int i = 0; i != p.Length; i++) + { + if (p[i] is X509Name) + { + result[pos++] = (X509Name)p[i]; + } + } + + return result; + } + + private bool MatchesDN( + X509Name subject, + GeneralNames targets) + { + GeneralName[] names = targets.GetNames(); + + for (int i = 0; i != names.Length; i++) + { + GeneralName gn = names[i]; + + if (gn.TagNo == GeneralName.DirectoryName) + { + try + { + if (X509Name.GetInstance(gn.Name).Equivalent(subject)) + { + return true; + } + } + catch (Exception) + { + } + } + } + + return false; + } + + public object Clone() + { + return new AttributeCertificateIssuer(AttCertIssuer.GetInstance(form)); + } + + public bool Match(X509Certificate x509Cert) + { + if (x509Cert == null) + return false; + + if (form is V2Form) + { + V2Form issuer = (V2Form) form; + if (issuer.BaseCertificateID != null) + { + return issuer.BaseCertificateID.Serial.HasValue(x509Cert.SerialNumber) + && MatchesDN(x509Cert.IssuerDN, issuer.BaseCertificateID.Issuer); + } + + return MatchesDN(x509Cert.SubjectDN, issuer.IssuerName); + } + + return MatchesDN(x509Cert.SubjectDN, (GeneralNames) form); + } + + public override bool Equals( + object obj) + { + if (obj == this) + { + return true; + } + + if (!(obj is AttributeCertificateIssuer)) + { + return false; + } + + AttributeCertificateIssuer other = (AttributeCertificateIssuer)obj; + + return this.form.Equals(other.form); + } + + public override int GetHashCode() + { + return this.form.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/AttributeCertificateIssuer.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/AttributeCertificateIssuer.cs.meta new file mode 100644 index 000000000..ed5fc272c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/AttributeCertificateIssuer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: acf2171ca98d9a84b9b2f630c3ed992f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/IX509Extension.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/IX509Extension.cs new file mode 100644 index 000000000..a55a0c039 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/IX509Extension.cs @@ -0,0 +1,28 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + public interface IX509Extension + { + /// + /// Get all critical extension values, by oid + /// + /// IDictionary with string (OID) keys and Asn1OctetString values + ISet GetCriticalExtensionOids(); + + /// + /// Get all non-critical extension values, by oid + /// + /// IDictionary with string (OID) keys and Asn1OctetString values + ISet GetNonCriticalExtensionOids(); + + Asn1OctetString GetExtensionValue(DerObjectIdentifier oid); + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/IX509Extension.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/IX509Extension.cs.meta new file mode 100644 index 000000000..3d5a21b71 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/IX509Extension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8a0d122875ecdab4796b2617ab2d97eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/PEMParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/PEMParser.cs new file mode 100644 index 000000000..493a5daaa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/PEMParser.cs @@ -0,0 +1,99 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + class PemParser + { + private readonly string _header1; + private readonly string _header2; + private readonly string _footer1; + private readonly string _footer2; + + internal PemParser( + string type) + { + _header1 = "-----BEGIN " + type + "-----"; + _header2 = "-----BEGIN X509 " + type + "-----"; + _footer1 = "-----END " + type + "-----"; + _footer2 = "-----END X509 " + type + "-----"; + } + + private string ReadLine( + Stream inStream) + { + int c; + StringBuilder l = new StringBuilder(); + + do + { + while (((c = inStream.ReadByte()) != '\r') && c != '\n' && (c >= 0)) + { + if (c == '\r') + { + continue; + } + + l.Append((char)c); + } + } + while (c >= 0 && l.Length == 0); + + if (c < 0) + { + return null; + } + + return l.ToString(); + } + + internal Asn1Sequence ReadPemObject( + Stream inStream) + { + string line; + StringBuilder pemBuf = new StringBuilder(); + + while ((line = ReadLine(inStream)) != null) + { + if (Org.BouncyCastle.Utilities.Platform.StartsWith(line, _header1) || Org.BouncyCastle.Utilities.Platform.StartsWith(line, _header2)) + { + break; + } + } + + while ((line = ReadLine(inStream)) != null) + { + if (Org.BouncyCastle.Utilities.Platform.StartsWith(line, _footer1) || Org.BouncyCastle.Utilities.Platform.StartsWith(line, _footer2)) + { + break; + } + + pemBuf.Append(line); + } + + if (pemBuf.Length != 0) + { + Asn1Object o = Asn1Object.FromByteArray(Base64.Decode(pemBuf.ToString())); + + if (!(o is Asn1Sequence)) + { + throw new IOException("malformed PEM data encountered"); + } + + return (Asn1Sequence) o; + } + + return null; + } + } +} + +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/PEMParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/PEMParser.cs.meta new file mode 100644 index 000000000..5a347ec6f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/PEMParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c0af44d6133b484fad764d838af9600 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/PrincipalUtil.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/PrincipalUtil.cs new file mode 100644 index 000000000..674e548ab --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/PrincipalUtil.cs @@ -0,0 +1,74 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + /// + /// A utility class that will extract X509Principal objects from X.509 certificates. + ///

    + /// Use this in preference to trying to recreate a principal from a string, not all + /// DNs are what they should be, so it's best to leave them encoded where they + /// can be.

    + ///
    + public class PrincipalUtilities + { + /// Return the issuer of the given cert as an X509Principal. + public static X509Name GetIssuerX509Principal( + X509Certificate cert) + { + try + { + TbsCertificateStructure tbsCert = TbsCertificateStructure.GetInstance( + Asn1Object.FromByteArray(cert.GetTbsCertificate())); + + return tbsCert.Issuer; + } + catch (Exception e) + { + throw new CertificateEncodingException("Could not extract issuer", e); + } + } + + /// Return the subject of the given cert as an X509Principal. + public static X509Name GetSubjectX509Principal( + X509Certificate cert) + { + try + { + TbsCertificateStructure tbsCert = TbsCertificateStructure.GetInstance( + Asn1Object.FromByteArray(cert.GetTbsCertificate())); + + return tbsCert.Subject; + } + catch (Exception e) + { + throw new CertificateEncodingException("Could not extract subject", e); + } + } + + /// Return the issuer of the given CRL as an X509Principal. + public static X509Name GetIssuerX509Principal( + X509Crl crl) + { + try + { + TbsCertificateList tbsCertList = TbsCertificateList.GetInstance( + Asn1Object.FromByteArray(crl.GetTbsCertList())); + + return tbsCertList.Issuer; + } + catch (Exception e) + { + throw new CrlException("Could not extract issuer", e); + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/PrincipalUtil.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/PrincipalUtil.cs.meta new file mode 100644 index 000000000..62598112d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/PrincipalUtil.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: afc0a35c1a82d7047807b55049604a40 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/SubjectPublicKeyInfoFactory.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/SubjectPublicKeyInfoFactory.cs new file mode 100644 index 000000000..21be1ffbb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/SubjectPublicKeyInfoFactory.cs @@ -0,0 +1,277 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.EdEC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Rosstandart; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + /// + /// A factory to produce Public Key Info Objects. + /// + public static class SubjectPublicKeyInfoFactory + { + /// + /// Create a Subject Public Key Info object for a given public key. + /// + /// One of ElGammalPublicKeyParameters, DSAPublicKeyParameter, DHPublicKeyParameters, RsaKeyParameters or ECPublicKeyParameters + /// A subject public key info object. + /// Throw exception if object provided is not one of the above. + public static SubjectPublicKeyInfo CreateSubjectPublicKeyInfo( + AsymmetricKeyParameter publicKey) + { + if (publicKey == null) + throw new ArgumentNullException("publicKey"); + if (publicKey.IsPrivate) + throw new ArgumentException("Private key passed - public key expected.", "publicKey"); + + if (publicKey is ElGamalPublicKeyParameters) + { + ElGamalPublicKeyParameters _key = (ElGamalPublicKeyParameters)publicKey; + ElGamalParameters kp = _key.Parameters; + + SubjectPublicKeyInfo info = new SubjectPublicKeyInfo( + new AlgorithmIdentifier( + OiwObjectIdentifiers.ElGamalAlgorithm, + new ElGamalParameter(kp.P, kp.G).ToAsn1Object()), + new DerInteger(_key.Y)); + + return info; + } + + if (publicKey is DsaPublicKeyParameters) + { + DsaPublicKeyParameters _key = (DsaPublicKeyParameters) publicKey; + DsaParameters kp = _key.Parameters; + Asn1Encodable ae = kp == null + ? null + : new DsaParameter(kp.P, kp.Q, kp.G).ToAsn1Object(); + + return new SubjectPublicKeyInfo( + new AlgorithmIdentifier(X9ObjectIdentifiers.IdDsa, ae), + new DerInteger(_key.Y)); + } + + if (publicKey is DHPublicKeyParameters) + { + DHPublicKeyParameters _key = (DHPublicKeyParameters) publicKey; + DHParameters kp = _key.Parameters; + + SubjectPublicKeyInfo info = new SubjectPublicKeyInfo( + new AlgorithmIdentifier( + _key.AlgorithmOid, + new DHParameter(kp.P, kp.G, kp.L).ToAsn1Object()), + new DerInteger(_key.Y)); + + return info; + } // End of DH + + if (publicKey is RsaKeyParameters) + { + RsaKeyParameters _key = (RsaKeyParameters) publicKey; + + SubjectPublicKeyInfo info = new SubjectPublicKeyInfo( + new AlgorithmIdentifier(PkcsObjectIdentifiers.RsaEncryption, DerNull.Instance), + new RsaPublicKeyStructure(_key.Modulus, _key.Exponent).ToAsn1Object()); + + return info; + } // End of RSA. + + if (publicKey is ECPublicKeyParameters) + { + + ECPublicKeyParameters _key = (ECPublicKeyParameters) publicKey; + + + if (_key.Parameters is ECGost3410Parameters) + { + ECGost3410Parameters gostParams = (ECGost3410Parameters)_key.Parameters; + + BigInteger bX = _key.Q.AffineXCoord.ToBigInteger(); + BigInteger bY = _key.Q.AffineYCoord.ToBigInteger(); + bool is512 = (bX.BitLength > 256); + + Gost3410PublicKeyAlgParameters parameters = new Gost3410PublicKeyAlgParameters( + gostParams.PublicKeyParamSet, + gostParams.DigestParamSet, + gostParams.EncryptionParamSet); + + int encKeySize; + int offset; + DerObjectIdentifier algIdentifier; + if (is512) + { + encKeySize = 128; + offset = 64; + algIdentifier = RosstandartObjectIdentifiers.id_tc26_gost_3410_12_512; + } + else + { + encKeySize = 64; + offset = 32; + algIdentifier = RosstandartObjectIdentifiers.id_tc26_gost_3410_12_256; + } + + byte[] encKey = new byte[encKeySize]; + + ExtractBytes(encKey, encKeySize / 2, 0, bX); + ExtractBytes(encKey, encKeySize / 2, offset, bY); + + return new SubjectPublicKeyInfo(new AlgorithmIdentifier(algIdentifier, parameters), new DerOctetString(encKey)); + + + } // End of ECGOST3410_2012 + + + + + + if (_key.AlgorithmName == "ECGOST3410") + { + if (_key.PublicKeyParamSet == null) + throw new NotImplementedException("Not a CryptoPro parameter set"); + + ECPoint q = _key.Q.Normalize(); + BigInteger bX = q.AffineXCoord.ToBigInteger(); + BigInteger bY = q.AffineYCoord.ToBigInteger(); + + byte[] encKey = new byte[64]; + ExtractBytes(encKey, 0, bX); + ExtractBytes(encKey, 32, bY); + + Gost3410PublicKeyAlgParameters gostParams = new Gost3410PublicKeyAlgParameters( + _key.PublicKeyParamSet, CryptoProObjectIdentifiers.GostR3411x94CryptoProParamSet); + + AlgorithmIdentifier algID = new AlgorithmIdentifier( + CryptoProObjectIdentifiers.GostR3410x2001, + gostParams.ToAsn1Object()); + + return new SubjectPublicKeyInfo(algID, new DerOctetString(encKey)); + } + else + { + X962Parameters x962; + if (_key.PublicKeyParamSet == null) + { + ECDomainParameters kp = _key.Parameters; + X9ECParameters ecP = new X9ECParameters(kp.Curve, new X9ECPoint(kp.G, false), kp.N, kp.H, + kp.GetSeed()); + + x962 = new X962Parameters(ecP); + } + else + { + x962 = new X962Parameters(_key.PublicKeyParamSet); + } + + byte[] pubKey = _key.Q.GetEncoded(false); + + AlgorithmIdentifier algID = new AlgorithmIdentifier( + X9ObjectIdentifiers.IdECPublicKey, x962.ToAsn1Object()); + + return new SubjectPublicKeyInfo(algID, pubKey); + } + } // End of EC + + if (publicKey is Gost3410PublicKeyParameters) + { + Gost3410PublicKeyParameters _key = (Gost3410PublicKeyParameters) publicKey; + + if (_key.PublicKeyParamSet == null) + throw new NotImplementedException("Not a CryptoPro parameter set"); + + byte[] keyEnc = _key.Y.ToByteArrayUnsigned(); + byte[] keyBytes = new byte[keyEnc.Length]; + + for (int i = 0; i != keyBytes.Length; i++) + { + keyBytes[i] = keyEnc[keyEnc.Length - 1 - i]; // must be little endian + } + + Gost3410PublicKeyAlgParameters algParams = new Gost3410PublicKeyAlgParameters( + _key.PublicKeyParamSet, CryptoProObjectIdentifiers.GostR3411x94CryptoProParamSet); + + AlgorithmIdentifier algID = new AlgorithmIdentifier( + CryptoProObjectIdentifiers.GostR3410x94, + algParams.ToAsn1Object()); + + return new SubjectPublicKeyInfo(algID, new DerOctetString(keyBytes)); + } + + if (publicKey is X448PublicKeyParameters) + { + X448PublicKeyParameters key = (X448PublicKeyParameters)publicKey; + + return new SubjectPublicKeyInfo(new AlgorithmIdentifier(EdECObjectIdentifiers.id_X448), key.GetEncoded()); + } + + if (publicKey is X25519PublicKeyParameters) + { + X25519PublicKeyParameters key = (X25519PublicKeyParameters)publicKey; + + return new SubjectPublicKeyInfo(new AlgorithmIdentifier(EdECObjectIdentifiers.id_X25519), key.GetEncoded()); + } + + if (publicKey is Ed448PublicKeyParameters) + { + Ed448PublicKeyParameters key = (Ed448PublicKeyParameters)publicKey; + + return new SubjectPublicKeyInfo(new AlgorithmIdentifier(EdECObjectIdentifiers.id_Ed448), key.GetEncoded()); + } + + if (publicKey is Ed25519PublicKeyParameters) + { + Ed25519PublicKeyParameters key = (Ed25519PublicKeyParameters)publicKey; + + return new SubjectPublicKeyInfo(new AlgorithmIdentifier(EdECObjectIdentifiers.id_Ed25519), key.GetEncoded()); + } + + throw new ArgumentException("Class provided no convertible: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(publicKey)); + } + + private static void ExtractBytes( + byte[] encKey, + int offset, + BigInteger bI) + { + byte[] val = bI.ToByteArray(); + int n = (bI.BitLength + 7) / 8; + + for (int i = 0; i < n; ++i) + { + encKey[offset + i] = val[val.Length - 1 - i]; + } + } + + + private static void ExtractBytes(byte[] encKey, int size, int offSet, BigInteger bI) + { + byte[] val = bI.ToByteArray(); + if (val.Length < size) + { + byte[] tmp = new byte[size]; + Array.Copy(val, 0, tmp, tmp.Length - val.Length, val.Length); + val = tmp; + } + + for (int i = 0; i != size; i++) + { + encKey[offSet + i] = val[val.Length - 1 - i]; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/SubjectPublicKeyInfoFactory.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/SubjectPublicKeyInfoFactory.cs.meta new file mode 100644 index 000000000..bb896e5da --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/SubjectPublicKeyInfoFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd36b9e69934c4e4a841a43e6b65c904 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509AttrCertParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509AttrCertParser.cs new file mode 100644 index 000000000..2517cca4e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509AttrCertParser.cs @@ -0,0 +1,175 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + public class X509AttrCertParser + { + private static readonly PemParser PemAttrCertParser = new PemParser("ATTRIBUTE CERTIFICATE"); + + private Asn1Set sData; + private int sDataObjectCount; + private Stream currentStream; + + private X509V2AttributeCertificate ReadDerCertificate( + Asn1InputStream dIn) + { + Asn1Sequence seq = (Asn1Sequence)dIn.ReadObject(); + + if (seq.Count > 1 && seq[0] is DerObjectIdentifier) + { + if (seq[0].Equals(PkcsObjectIdentifiers.SignedData)) + { + sData = SignedData.GetInstance( + Asn1Sequence.GetInstance((Asn1TaggedObject) seq[1], true)).Certificates; + + return GetCertificate(); + } + } + + return new X509V2AttributeCertificate(AttributeCertificate.GetInstance(seq)); + } + + private X509V2AttributeCertificate GetCertificate() + { + if (sData != null) + { + while (sDataObjectCount < sData.Count) + { + Asn1Encodable ae = sData[sDataObjectCount++]; + + if (ae.ToAsn1Object() is Asn1TaggedObject t && t.TagNo == 2) + { + return new X509V2AttributeCertificate( + AttributeCertificate.GetInstance(Asn1Sequence.GetInstance(t, false))); + } + } + } + + return null; + } + + private X509V2AttributeCertificate ReadPemCertificate( + Stream inStream) + { + Asn1Sequence seq = PemAttrCertParser.ReadPemObject(inStream); + + return seq == null + ? null + : new X509V2AttributeCertificate(AttributeCertificate.GetInstance(seq)); + } + + /// + /// Create loading data from byte array. + /// + /// + public X509V2AttributeCertificate ReadAttrCert(byte[] input) + { + return ReadAttrCert(new MemoryStream(input, false)); + } + + /// + /// Create loading data from byte array. + /// + /// + public IList ReadAttrCerts(byte[] input) + { + return ReadAttrCerts(new MemoryStream(input, false)); + } + + /** + * Generates a certificate object and initializes it with the data + * read from the input stream inStream. + */ + public X509V2AttributeCertificate ReadAttrCert( + Stream inStream) + { + if (inStream == null) + throw new ArgumentNullException("inStream"); + if (!inStream.CanRead) + throw new ArgumentException("inStream must be read-able", "inStream"); + + if (currentStream == null) + { + currentStream = inStream; + sData = null; + sDataObjectCount = 0; + } + else if (currentStream != inStream) // reset if input stream has changed + { + currentStream = inStream; + sData = null; + sDataObjectCount = 0; + } + + try + { + if (sData != null) + { + if (sDataObjectCount != sData.Count) + { + return GetCertificate(); + } + + sData = null; + sDataObjectCount = 0; + return null; + } + + int tag = inStream.ReadByte(); + if (tag < 0) + return null; + + if (inStream.CanSeek) + { + inStream.Seek(-1L, SeekOrigin.Current); + } + else + { + PushbackStream pis = new PushbackStream(inStream); + pis.Unread(tag); + inStream = pis; + } + + if (tag != 0x30) // assume ascii PEM encoded. + { + return ReadPemCertificate(inStream); + } + + return ReadDerCertificate(new Asn1InputStream(inStream)); + } + catch (Exception e) + { + throw new CertificateException(e.ToString()); + } + } + + /** + * Returns a (possibly empty) collection view of the certificates + * read from the given input stream inStream. + */ + public IList ReadAttrCerts(Stream inStream) + { + var attrCerts = new List(); + + X509V2AttributeCertificate attrCert; + while ((attrCert = ReadAttrCert(inStream)) != null) + { + attrCerts.Add(attrCert); + } + + return attrCerts; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509AttrCertParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509AttrCertParser.cs.meta new file mode 100644 index 000000000..0d7b95439 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509AttrCertParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb17e3130c56fdb44a2169c7946d70f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Attribute.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Attribute.cs new file mode 100644 index 000000000..6f9aadba0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Attribute.cs @@ -0,0 +1,80 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + /** + * Class for carrying the values in an X.509 Attribute. + */ + public class X509Attribute + : Asn1Encodable + { + private readonly AttributeX509 attr; + + /** + * @param at an object representing an attribute. + */ + internal X509Attribute( + Asn1Encodable at) + { + this.attr = AttributeX509.GetInstance(at); + } + + /** + * Create an X.509 Attribute with the type given by the passed in oid and + * the value represented by an ASN.1 Set containing value. + * + * @param oid type of the attribute + * @param value value object to go into the atribute's value set. + */ + public X509Attribute( + string oid, + Asn1Encodable value) + { + this.attr = new AttributeX509(new DerObjectIdentifier(oid), new DerSet(value)); + } + + /** + * Create an X.59 Attribute with the type given by the passed in oid and the + * value represented by an ASN.1 Set containing the objects in value. + * + * @param oid type of the attribute + * @param value vector of values to go in the attribute's value set. + */ + public X509Attribute( + string oid, + Asn1EncodableVector value) + { + this.attr = new AttributeX509(new DerObjectIdentifier(oid), new DerSet(value)); + } + + public string Oid + { + get { return attr.AttrType.Id; } + } + + public Asn1Encodable[] GetValues() + { + Asn1Set s = attr.AttrValues; + Asn1Encodable[] values = new Asn1Encodable[s.Count]; + + for (int i = 0; i != s.Count; i++) + { + values[i] = (Asn1Encodable)s[i]; + } + + return values; + } + + public override Asn1Object ToAsn1Object() + { + return attr.ToAsn1Object(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Attribute.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Attribute.cs.meta new file mode 100644 index 000000000..33aea968f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Attribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8689ae3e6241dab498e32e4185da76fc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CertPairParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CertPairParser.cs new file mode 100644 index 000000000..6fbdde011 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CertPairParser.cs @@ -0,0 +1,101 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + public class X509CertPairParser + { + private Stream currentStream; + + private X509CertificatePair ReadDerCrossCertificatePair( + Stream inStream) + { + Asn1InputStream dIn = new Asn1InputStream(inStream);//, ProviderUtil.getReadLimit(in)); + Asn1Sequence seq = (Asn1Sequence)dIn.ReadObject(); + CertificatePair pair = CertificatePair.GetInstance(seq); + return new X509CertificatePair(pair); + } + + /// + /// Create loading data from byte array. + /// + /// + public X509CertificatePair ReadCertPair(byte[] input) + { + return ReadCertPair(new MemoryStream(input, false)); + } + + /// + /// Create loading data from byte array. + /// + /// + public IList ReadCertPairs(byte[] input) + { + return ReadCertPairs(new MemoryStream(input, false)); + } + + public X509CertificatePair ReadCertPair(Stream inStream) + { + if (inStream == null) + throw new ArgumentNullException("inStream"); + if (!inStream.CanRead) + throw new ArgumentException("inStream must be read-able", "inStream"); + + if (currentStream == null) + { + currentStream = inStream; + } + else if (currentStream != inStream) // reset if input stream has changed + { + currentStream = inStream; + } + + try + { + int tag = inStream.ReadByte(); + if (tag < 0) + return null; + + if (inStream.CanSeek) + { + inStream.Seek(-1L, SeekOrigin.Current); + } + else + { + PushbackStream pis = new PushbackStream(inStream); + pis.Unread(tag); + inStream = pis; + } + + return ReadDerCrossCertificatePair(inStream); + } + catch (Exception e) + { + throw new CertificateException(e.ToString()); + } + } + + public IList ReadCertPairs(Stream inStream) + { + var certPairs = new List(); + + X509CertificatePair certPair; + while ((certPair = ReadCertPair(inStream)) != null) + { + certPairs.Add(certPair); + } + + return certPairs; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CertPairParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CertPairParser.cs.meta new file mode 100644 index 000000000..9b0c612e7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CertPairParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8127558424a84ff4b96f41dbcb52b8f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Certificate.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Certificate.cs new file mode 100644 index 000000000..1d1acbe09 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Certificate.cs @@ -0,0 +1,748 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Misc; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Extension; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + /// + /// An Object representing an X509 Certificate. + /// Has static methods for loading Certificates encoded in many forms that return X509Certificate Objects. + /// + public class X509Certificate + : X509ExtensionBase + // , PKCS12BagAttributeCarrier + { + private class CachedEncoding + { + private readonly byte[] encoding; + private readonly CertificateEncodingException exception; + + internal CachedEncoding(byte[] encoding, CertificateEncodingException exception) + { + this.encoding = encoding; + this.exception = exception; + } + + internal byte[] Encoding + { + get { return encoding; } + } + + internal byte[] GetEncoded() + { + if (null != exception) + throw exception; + + if (null == encoding) + throw new CertificateEncodingException(); + + return encoding; + } + } + + private readonly X509CertificateStructure c; + //private Dictionary<> pkcs12Attributes = new Dictionary<>(); + //private List<> pkcs12Ordering = new List<>(); + private readonly string sigAlgName; + private readonly byte[] sigAlgParams; + private readonly BasicConstraints basicConstraints; + private readonly bool[] keyUsage; + + private readonly object cacheLock = new object(); + private AsymmetricKeyParameter publicKeyValue; + private CachedEncoding cachedEncoding; + + private volatile bool hashValueSet; + private volatile int hashValue; + + protected X509Certificate() + { + } + + public X509Certificate(byte[] certData) + : this(X509CertificateStructure.GetInstance(certData)) + { + } + + public X509Certificate(X509CertificateStructure c) + { + this.c = c; + + try + { + this.sigAlgName = X509SignatureUtilities.GetSignatureName(c.SignatureAlgorithm); + + Asn1Encodable parameters = c.SignatureAlgorithm.Parameters; + this.sigAlgParams = (null == parameters) ? null : parameters.GetEncoded(Asn1Encodable.Der); + } + catch (Exception e) + { + throw new CertificateParsingException("Certificate contents invalid: " + e); + } + + try + { + Asn1OctetString str = GetExtensionValue(X509Extensions.BasicConstraints); + if (str != null) + { + basicConstraints = BasicConstraints.GetInstance(X509ExtensionUtilities.FromExtensionValue(str)); + } + } + catch (Exception e) + { + throw new CertificateParsingException("cannot construct BasicConstraints: " + e); + } + + try + { + Asn1OctetString str = GetExtensionValue(X509Extensions.KeyUsage); + if (str != null) + { + DerBitString bits = DerBitString.GetInstance(X509ExtensionUtilities.FromExtensionValue(str)); + + byte[] bytes = bits.GetBytes(); + int length = (bytes.Length * 8) - bits.PadBits; + + keyUsage = new bool[(length < 9) ? 9 : length]; + + for (int i = 0; i != length; i++) + { + keyUsage[i] = (bytes[i / 8] & (0x80 >> (i % 8))) != 0; + } + } + else + { + keyUsage = null; + } + } + catch (Exception e) + { + throw new CertificateParsingException("cannot construct KeyUsage: " + e); + } + } + + // internal X509Certificate( + // Asn1Sequence seq) + // { + // this.c = X509CertificateStructure.GetInstance(seq); + // } + + // /// + // /// Load certificate from byte array. + // /// + // /// Byte array containing encoded X509Certificate. + // public X509Certificate( + // byte[] encoded) + // : this((Asn1Sequence) new Asn1InputStream(encoded).ReadObject()) + // { + // } + // + // /// + // /// Load certificate from Stream. + // /// Must be positioned at start of certificate. + // /// + // /// + // public X509Certificate( + // Stream input) + // : this((Asn1Sequence) new Asn1InputStream(input).ReadObject()) + // { + // } + + public virtual X509CertificateStructure CertificateStructure + { + get { return c; } + } + + /// + /// Return true if the current time is within the start and end times nominated on the certificate. + /// + /// true id certificate is valid for the current time. + public virtual bool IsValidNow + { + get { return IsValid(DateTime.UtcNow); } + } + + /// + /// Return true if the nominated time is within the start and end times nominated on the certificate. + /// + /// The time to test validity against. + /// True if certificate is valid for nominated time. + public virtual bool IsValid( + DateTime time) + { + return time.CompareTo(NotBefore) >= 0 && time.CompareTo(NotAfter) <= 0; + } + + /// + /// Checks if the current date is within certificate's validity period. + /// + public virtual void CheckValidity() + { + this.CheckValidity(DateTime.UtcNow); + } + + /// + /// Checks if the given date is within certificate's validity period. + /// + /// if the certificate is expired by given date + /// if the certificate is not yet valid on given date + public virtual void CheckValidity( + DateTime time) + { + if (time.CompareTo(NotAfter) > 0) + throw new CertificateExpiredException("certificate expired on " + c.EndDate); + if (time.CompareTo(NotBefore) < 0) + throw new CertificateNotYetValidException("certificate not valid until " + c.StartDate); + } + + /// + /// Return the certificate's version. + /// + /// An integer whose value Equals the version of the cerficate. + public virtual int Version + { + get { return c.Version; } + } + + /// + /// Return a BigInteger containing the serial number. + /// + /// The Serial number. + public virtual BigInteger SerialNumber + { + get { return c.SerialNumber.Value; } + } + + /// + /// Get the Issuer Distinguished Name. (Who signed the certificate.) + /// + /// And X509Object containing name and value pairs. + // public IPrincipal IssuerDN + public virtual X509Name IssuerDN + { + get { return c.Issuer; } + } + + /// + /// Get the subject of this certificate. + /// + /// An X509Name object containing name and value pairs. + // public IPrincipal SubjectDN + public virtual X509Name SubjectDN + { + get { return c.Subject; } + } + + /// + /// The time that this certificate is valid from. + /// + /// A DateTime object representing that time in the local time zone. + public virtual DateTime NotBefore + { + get { return c.StartDate.ToDateTime(); } + } + + /// + /// The time that this certificate is valid up to. + /// + /// A DateTime object representing that time in the local time zone. + public virtual DateTime NotAfter + { + get { return c.EndDate.ToDateTime(); } + } + + /// + /// Return the Der encoded TbsCertificate data. + /// This is the certificate component less the signature. + /// To Get the whole certificate call the GetEncoded() member. + /// + /// A byte array containing the Der encoded Certificate component. + public virtual byte[] GetTbsCertificate() + { + return c.TbsCertificate.GetDerEncoded(); + } + + /// + /// The signature. + /// + /// A byte array containg the signature of the certificate. + public virtual byte[] GetSignature() + { + return c.GetSignatureOctets(); + } + + /// + /// A meaningful version of the Signature Algorithm. (EG SHA1WITHRSA) + /// + /// A sting representing the signature algorithm. + public virtual string SigAlgName + { + get { return sigAlgName; } + } + + /// + /// Get the Signature Algorithms Object ID. + /// + /// A string containg a '.' separated object id. + public virtual string SigAlgOid + { + get { return c.SignatureAlgorithm.Algorithm.Id; } + } + + /// + /// Get the signature algorithms parameters. (EG DSA Parameters) + /// + /// A byte array containing the Der encoded version of the parameters or null if there are none. + public virtual byte[] GetSigAlgParams() + { + return Arrays.Clone(sigAlgParams); + } + + /// + /// Get the issuers UID. + /// + /// A DerBitString. + public virtual DerBitString IssuerUniqueID + { + get { return c.TbsCertificate.IssuerUniqueID; } + } + + /// + /// Get the subjects UID. + /// + /// A DerBitString. + public virtual DerBitString SubjectUniqueID + { + get { return c.TbsCertificate.SubjectUniqueID; } + } + + /// + /// Get a key usage guidlines. + /// + public virtual bool[] GetKeyUsage() + { + return Arrays.Clone(keyUsage); + } + + // TODO Replace with something that returns a list of DerObjectIdentifier + public virtual IList GetExtendedKeyUsage() + { + Asn1OctetString str = GetExtensionValue(X509Extensions.ExtendedKeyUsage); + + if (str == null) + return null; + + try + { + Asn1Sequence seq = Asn1Sequence.GetInstance(X509ExtensionUtilities.FromExtensionValue(str)); + + var result = new List(); + foreach (DerObjectIdentifier oid in seq) + { + result.Add(oid); + } + return result; + } + catch (Exception e) + { + throw new CertificateParsingException("error processing extended key usage extension", e); + } + } + + public virtual int GetBasicConstraints() + { + if (basicConstraints != null && basicConstraints.IsCA()) + { + if (basicConstraints.PathLenConstraint == null) + { + return int.MaxValue; + } + + return basicConstraints.PathLenConstraint.IntValue; + } + + return -1; + } + + public virtual GeneralNames GetIssuerAlternativeNameExtension() + { + return GetAlternativeNameExtension(X509Extensions.IssuerAlternativeName); + } + + public virtual GeneralNames GetSubjectAlternativeNameExtension() + { + return GetAlternativeNameExtension(X509Extensions.SubjectAlternativeName); + } + + public virtual IList> GetIssuerAlternativeNames() + { + return GetAlternativeNames(X509Extensions.IssuerAlternativeName); + } + + public virtual IList> GetSubjectAlternativeNames() + { + return GetAlternativeNames(X509Extensions.SubjectAlternativeName); + } + + protected virtual GeneralNames GetAlternativeNameExtension(DerObjectIdentifier oid) + { + Asn1OctetString altNames = GetExtensionValue(oid); + if (altNames == null) + return null; + + Asn1Object asn1Object = X509ExtensionUtilities.FromExtensionValue(altNames); + + return GeneralNames.GetInstance(asn1Object); + } + + protected virtual IList> GetAlternativeNames(DerObjectIdentifier oid) + { + var generalNames = GetAlternativeNameExtension(oid); + if (generalNames == null) + return null; + + var gns = generalNames.GetNames(); + + var result = new List>(gns.Length); + foreach (GeneralName gn in gns) + { + var entry = new List(2); + entry.Add(gn.TagNo); + + switch (gn.TagNo) + { + case GeneralName.EdiPartyName: + case GeneralName.X400Address: + case GeneralName.OtherName: + entry.Add(gn.GetEncoded()); + break; + case GeneralName.DirectoryName: + // TODO Styles + //entry.Add(X509Name.GetInstance(Rfc4519Style.Instance, gn.Name).ToString()); + entry.Add(X509Name.GetInstance(gn.Name).ToString()); + break; + case GeneralName.DnsName: + case GeneralName.Rfc822Name: + case GeneralName.UniformResourceIdentifier: + entry.Add(((IAsn1String)gn.Name).GetString()); + break; + case GeneralName.RegisteredID: + entry.Add(DerObjectIdentifier.GetInstance(gn.Name).Id); + break; + case GeneralName.IPAddress: + byte[] addrBytes = Asn1OctetString.GetInstance(gn.Name).GetOctets(); + IPAddress ipAddress = new IPAddress(addrBytes); + entry.Add(ipAddress.ToString()); + break; + default: + throw new IOException("Bad tag number: " + gn.TagNo); + } + + result.Add(entry); + } + return result; + } + + protected override X509Extensions GetX509Extensions() + { + return c.Version >= 3 + ? c.TbsCertificate.Extensions + : null; + } + + /// + /// Get the public key of the subject of the certificate. + /// + /// The public key parameters. + public virtual AsymmetricKeyParameter GetPublicKey() + { + // Cache the public key to support repeated-use optimizations + lock (cacheLock) + { + if (null != publicKeyValue) + return publicKeyValue; + } + + AsymmetricKeyParameter temp = PublicKeyFactory.CreateKey(c.SubjectPublicKeyInfo); + + lock (cacheLock) + { + if (null == publicKeyValue) + { + publicKeyValue = temp; + } + + return publicKeyValue; + } + } + + /// + /// Return the DER encoding of this certificate. + /// + /// A byte array containing the DER encoding of this certificate. + /// If there is an error encoding the certificate. + public virtual byte[] GetEncoded() + { + return Arrays.Clone(GetCachedEncoding().GetEncoded()); + } + + public override bool Equals(object other) + { + if (this == other) + return true; + + X509Certificate that = other as X509Certificate; + if (null == that) + return false; + + if (this.hashValueSet && that.hashValueSet) + { + if (this.hashValue != that.hashValue) + return false; + } + else if (null == this.cachedEncoding || null == that.cachedEncoding) + { + DerBitString signature = c.Signature; + if (null != signature && !signature.Equals(that.c.Signature)) + return false; + } + + byte[] thisEncoding = this.GetCachedEncoding().Encoding; + byte[] thatEncoding = that.GetCachedEncoding().Encoding; + + return null != thisEncoding + && null != thatEncoding + && Arrays.AreEqual(thisEncoding, thatEncoding); + } + + public override int GetHashCode() + { + if (!hashValueSet) + { + byte[] thisEncoding = this.GetCachedEncoding().Encoding; + + hashValue = Arrays.GetHashCode(thisEncoding); + hashValueSet = true; + } + + return hashValue; + } + + // public void setBagAttribute( + // DERObjectIdentifier oid, + // DEREncodable attribute) + // { + // pkcs12Attributes.put(oid, attribute); + // pkcs12Ordering.addElement(oid); + // } + // + // public DEREncodable getBagAttribute( + // DERObjectIdentifier oid) + // { + // return (DEREncodable)pkcs12Attributes.get(oid); + // } + // + // public Enumeration getBagAttributeKeys() + // { + // return pkcs12Ordering.elements(); + // } + + public override string ToString() + { + StringBuilder buf = new StringBuilder(); + + buf.Append(" [0] Version: ").Append(this.Version).AppendLine(); + buf.Append(" SerialNumber: ").Append(this.SerialNumber).AppendLine(); + buf.Append(" IssuerDN: ").Append(this.IssuerDN).AppendLine(); + buf.Append(" Start Date: ").Append(this.NotBefore).AppendLine(); + buf.Append(" Final Date: ").Append(this.NotAfter).AppendLine(); + buf.Append(" SubjectDN: ").Append(this.SubjectDN).AppendLine(); + buf.Append(" Public Key: ").Append(this.GetPublicKey()).AppendLine(); + buf.Append(" Signature Algorithm: ").Append(this.SigAlgName).AppendLine(); + + byte[] sig = this.GetSignature(); + buf.Append(" Signature: ").Append(Hex.ToHexString(sig, 0, 20)).AppendLine(); + + for (int i = 20; i < sig.Length; i += 20) + { + int len = System.Math.Min(20, sig.Length - i); + buf.Append(" ").Append(Hex.ToHexString(sig, i, len)).AppendLine(); + } + + X509Extensions extensions = c.TbsCertificate.Extensions; + + if (extensions != null) + { + var e = extensions.ExtensionOids.GetEnumerator(); + + if (e.MoveNext()) + { + buf.Append(" Extensions: \n"); + } + + do + { + DerObjectIdentifier oid = e.Current; + X509Extension ext = extensions.GetExtension(oid); + + if (ext.Value != null) + { + Asn1Object obj = X509ExtensionUtilities.FromExtensionValue(ext.Value); + + buf.Append(" critical(").Append(ext.IsCritical).Append(") "); + try + { + if (oid.Equals(X509Extensions.BasicConstraints)) + { + buf.Append(BasicConstraints.GetInstance(obj)); + } + else if (oid.Equals(X509Extensions.KeyUsage)) + { + buf.Append(KeyUsage.GetInstance(obj)); + } + else if (oid.Equals(MiscObjectIdentifiers.NetscapeCertType)) + { + buf.Append(new NetscapeCertType((DerBitString)obj)); + } + else if (oid.Equals(MiscObjectIdentifiers.NetscapeRevocationUrl)) + { + buf.Append(new NetscapeRevocationUrl((DerIA5String)obj)); + } + else if (oid.Equals(MiscObjectIdentifiers.VerisignCzagExtension)) + { + buf.Append(new VerisignCzagExtension((DerIA5String)obj)); + } + else + { + buf.Append(oid.Id); + buf.Append(" value = ").Append(Asn1Dump.DumpAsString(obj)); + //buf.Append(" value = ").Append("*****").AppendLine(); + } + } + catch (Exception) + { + buf.Append(oid.Id); + //buf.Append(" value = ").Append(new string(Hex.encode(ext.getValue().getOctets()))).AppendLine(); + buf.Append(" value = ").Append("*****"); + } + } + + buf.AppendLine(); + } + while (e.MoveNext()); + } + + return buf.ToString(); + } + + /// + /// Verify the certificate's signature using the nominated public key. + /// + /// An appropriate public key parameter object, RsaPublicKeyParameters, DsaPublicKeyParameters or ECDsaPublicKeyParameters + /// True if the signature is valid. + /// If key submitted is not of the above nominated types. + public virtual void Verify( + AsymmetricKeyParameter key) + { + CheckSignature(new Asn1VerifierFactory(c.SignatureAlgorithm, key)); + } + + /// + /// Verify the certificate's signature using a verifier created using the passed in verifier provider. + /// + /// An appropriate provider for verifying the certificate's signature. + /// True if the signature is valid. + /// If verifier provider is not appropriate or the certificate algorithm is invalid. + public virtual void Verify( + IVerifierFactoryProvider verifierProvider) + { + CheckSignature(verifierProvider.CreateVerifierFactory(c.SignatureAlgorithm)); + } + + protected virtual void CheckSignature( + IVerifierFactory verifier) + { + if (!IsAlgIDEqual(c.SignatureAlgorithm, c.TbsCertificate.Signature)) + throw new CertificateException("signature algorithm in TBS cert not same as outer cert"); + + byte[] b = GetTbsCertificate(); + + IStreamCalculator streamCalculator = verifier.CreateCalculator(); + using (var stream = streamCalculator.Stream) + { + stream.Write(b, 0, b.Length); + } + + if (!streamCalculator.GetResult().IsVerified(this.GetSignature())) + throw new InvalidKeyException("Public key presented not for certificate signature"); + } + + private CachedEncoding GetCachedEncoding() + { + lock (cacheLock) + { + if (null != cachedEncoding) + return cachedEncoding; + } + + byte[] encoding = null; + CertificateEncodingException exception = null; + try + { + encoding = c.GetEncoded(Asn1Encodable.Der); + } + catch (IOException e) + { + exception = new CertificateEncodingException("Failed to DER-encode certificate", e); + } + + CachedEncoding temp = new CachedEncoding(encoding, exception); + + lock (cacheLock) + { + if (null == cachedEncoding) + { + cachedEncoding = temp; + } + + return cachedEncoding; + } + } + + private static bool IsAlgIDEqual(AlgorithmIdentifier id1, AlgorithmIdentifier id2) + { + if (!id1.Algorithm.Equals(id2.Algorithm)) + return false; + + Asn1Encodable p1 = id1.Parameters; + Asn1Encodable p2 = id2.Parameters; + + if ((p1 == null) == (p2 == null)) + return Org.BouncyCastle.Utilities.Platform.Equals(p1, p2); + + // Exactly one of p1, p2 is null at this point + return p1 == null + ? p2.ToAsn1Object() is Asn1Null + : p1.ToAsn1Object() is Asn1Null; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Certificate.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Certificate.cs.meta new file mode 100644 index 000000000..0711150f4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Certificate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6beadff9e85279b4e98431dba56a094f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CertificatePair.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CertificatePair.cs new file mode 100644 index 000000000..b64a45df9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CertificatePair.cs @@ -0,0 +1,127 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + /// + /// This class contains a cross certificate pair. Cross certificates pairs may + /// contain two cross signed certificates from two CAs. A certificate from the + /// other CA to this CA is contained in the forward certificate, the certificate + /// from this CA to the other CA is contained in the reverse certificate. + /// + public class X509CertificatePair + { + private readonly X509Certificate forward; + private readonly X509Certificate reverse; + + /// Constructor + /// Certificate from the other CA to this CA. + /// Certificate from this CA to the other CA. + public X509CertificatePair( + X509Certificate forward, + X509Certificate reverse) + { + this.forward = forward; + this.reverse = reverse; + } + + /// Constructor from a ASN.1 CertificatePair structure. + /// The CertificatePair ASN.1 object. + public X509CertificatePair( + CertificatePair pair) + { + if (pair.Forward != null) + { + this.forward = new X509Certificate(pair.Forward); + } + if (pair.Reverse != null) + { + this.reverse = new X509Certificate(pair.Reverse); + } + } + + public byte[] GetEncoded() + { + try + { + X509CertificateStructure f = null, r = null; + + if (forward != null) + { + f = X509CertificateStructure.GetInstance( + Asn1Object.FromByteArray(forward.GetEncoded())); + + if (f == null) + throw new CertificateEncodingException("unable to get encoding for forward"); + } + + if (reverse != null) + { + r = X509CertificateStructure.GetInstance( + Asn1Object.FromByteArray(reverse.GetEncoded())); + + if (r == null) + throw new CertificateEncodingException("unable to get encoding for reverse"); + } + + return new CertificatePair(f, r).GetDerEncoded(); + } + catch (Exception e) + { + // TODO +// throw new ExtCertificateEncodingException(e.toString(), e); + throw new CertificateEncodingException(e.Message, e); + } + } + + /// Returns the certificate from the other CA to this CA. + public X509Certificate Forward + { + get { return forward; } + } + + /// Returns the certificate from this CA to the other CA. + public X509Certificate Reverse + { + get { return reverse; } + } + + public override bool Equals( + object obj) + { + if (obj == this) + return true; + + X509CertificatePair other = obj as X509CertificatePair; + + if (other == null) + return false; + + return Org.BouncyCastle.Utilities.Platform.Equals(this.forward, other.forward) + && Org.BouncyCastle.Utilities.Platform.Equals(this.reverse, other.reverse); + } + + public override int GetHashCode() + { + int hash = -1; + if (forward != null) + { + hash ^= forward.GetHashCode(); + } + if (reverse != null) + { + hash *= 17; + hash ^= reverse.GetHashCode(); + } + return hash; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CertificatePair.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CertificatePair.cs.meta new file mode 100644 index 000000000..cd6b3e307 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CertificatePair.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ebb6773b53a2eae45aff0fc7c7f03d8c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CertificateParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CertificateParser.cs new file mode 100644 index 000000000..524e7d23e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CertificateParser.cs @@ -0,0 +1,171 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + /** + * class for dealing with X509 certificates. + *

    + * At the moment this will deal with "-----BEGIN CERTIFICATE-----" to "-----END CERTIFICATE-----" + * base 64 encoded certs, as well as the BER binaries of certificates and some classes of PKCS#7 + * objects.

    + */ + public class X509CertificateParser + { + private static readonly PemParser PemCertParser = new PemParser("CERTIFICATE"); + + private Asn1Set sData; + private int sDataObjectCount; + private Stream currentStream; + + private X509Certificate ReadDerCertificate(Asn1InputStream dIn) + { + Asn1Sequence seq = (Asn1Sequence)dIn.ReadObject(); + + if (seq.Count > 1 && seq[0] is DerObjectIdentifier) + { + if (seq[0].Equals(PkcsObjectIdentifiers.SignedData)) + { + sData = SignedData.GetInstance( + Asn1Sequence.GetInstance((Asn1TaggedObject) seq[1], true)).Certificates; + + return GetCertificate(); + } + } + + return new X509Certificate(X509CertificateStructure.GetInstance(seq)); + } + + private X509Certificate ReadPemCertificate(Stream inStream) + { + Asn1Sequence seq = PemCertParser.ReadPemObject(inStream); + + return seq == null ? null : new X509Certificate(X509CertificateStructure.GetInstance(seq)); + } + + private X509Certificate GetCertificate() + { + if (sData != null) + { + while (sDataObjectCount < sData.Count) + { + object obj = sData[sDataObjectCount++]; + + if (obj is Asn1Sequence) + return new X509Certificate(X509CertificateStructure.GetInstance(obj)); + } + } + + return null; + } + + /// + /// Create loading data from byte array. + /// + /// + public X509Certificate ReadCertificate(byte[] input) + { + return ReadCertificate(new MemoryStream(input, false)); + } + + /// + /// Create loading data from byte array. + /// + /// + public IList ReadCertificates(byte[] input) + { + return ReadCertificates(new MemoryStream(input, false)); + } + + /** + * Generates a certificate object and initializes it with the data + * read from the input stream inStream. + */ + public X509Certificate ReadCertificate(Stream inStream) + { + if (inStream == null) + throw new ArgumentNullException("inStream"); + if (!inStream.CanRead) + throw new ArgumentException("inStream must be read-able", "inStream"); + + if (currentStream == null) + { + currentStream = inStream; + sData = null; + sDataObjectCount = 0; + } + else if (currentStream != inStream) // reset if input stream has changed + { + currentStream = inStream; + sData = null; + sDataObjectCount = 0; + } + + try + { + if (sData != null) + { + if (sDataObjectCount != sData.Count) + return GetCertificate(); + + sData = null; + sDataObjectCount = 0; + return null; + } + + int tag = inStream.ReadByte(); + if (tag < 0) + return null; + + if (inStream.CanSeek) + { + inStream.Seek(-1L, SeekOrigin.Current); + } + else + { + PushbackStream pis = new PushbackStream(inStream); + pis.Unread(tag); + inStream = pis; + } + + if (tag != 0x30) // assume ascii PEM encoded. + return ReadPemCertificate(inStream); + + return ReadDerCertificate(new Asn1InputStream(inStream)); + } + catch (Exception e) + { + throw new CertificateException("Failed to read certificate", e); + } + } + + /** + * Returns a (possibly empty) collection view of the certificates + * read from the given input stream inStream. + */ + public IList ReadCertificates(Stream inStream) + { + return new List(ParseCertificates(inStream)); + } + + public IEnumerable ParseCertificates(Stream inStream) + { + X509Certificate cert; + while ((cert = ReadCertificate(inStream)) != null) + { + yield return cert; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CertificateParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CertificateParser.cs.meta new file mode 100644 index 000000000..ac6cfc615 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CertificateParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d7c29c36b4684094d864d3cae4db30f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Crl.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Crl.cs new file mode 100644 index 000000000..203f67111 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Crl.cs @@ -0,0 +1,497 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Extension; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + /** + * The following extensions are listed in RFC 2459 as relevant to CRLs + * + * Authority Key Identifier + * Issuer Alternative Name + * CRL Number + * Delta CRL Indicator (critical) + * Issuing Distribution Point (critical) + */ + public class X509Crl + : X509ExtensionBase + // TODO Add interface Crl? + { + private class CachedEncoding + { + private readonly byte[] encoding; + private readonly CrlException exception; + + internal CachedEncoding(byte[] encoding, CrlException exception) + { + this.encoding = encoding; + this.exception = exception; + } + + internal byte[] Encoding + { + get { return encoding; } + } + + internal byte[] GetEncoded() + { + if (null != exception) + throw exception; + + if (null == encoding) + throw new CrlException(); + + return encoding; + } + } + + private readonly CertificateList c; + private readonly string sigAlgName; + private readonly byte[] sigAlgParams; + private readonly bool isIndirect; + + private readonly object cacheLock = new object(); + private CachedEncoding cachedEncoding; + + private volatile bool hashValueSet; + private volatile int hashValue; + + public X509Crl(byte[] encoding) + : this(CertificateList.GetInstance(encoding)) + { + } + + public X509Crl(CertificateList c) + { + this.c = c; + + try + { + this.sigAlgName = X509SignatureUtilities.GetSignatureName(c.SignatureAlgorithm); + + Asn1Encodable parameters = c.SignatureAlgorithm.Parameters; + this.sigAlgParams = (null == parameters) ? null : parameters.GetEncoded(Asn1Encodable.Der); + + this.isIndirect = IsIndirectCrl; + } + catch (Exception e) + { + throw new CrlException("CRL contents invalid: " + e); + } + } + + public virtual CertificateList CertificateList + { + get { return c; } + } + + protected override X509Extensions GetX509Extensions() + { + return c.Version >= 2 + ? c.TbsCertList.Extensions + : null; + } + + public virtual void Verify( + AsymmetricKeyParameter publicKey) + { + Verify(new Asn1VerifierFactoryProvider(publicKey)); + } + + /// + /// Verify the CRL's signature using a verifier created using the passed in verifier provider. + /// + /// An appropriate provider for verifying the CRL's signature. + /// True if the signature is valid. + /// If verifier provider is not appropriate or the CRL algorithm is invalid. + public virtual void Verify( + IVerifierFactoryProvider verifierProvider) + { + CheckSignature(verifierProvider.CreateVerifierFactory(c.SignatureAlgorithm)); + } + + protected virtual void CheckSignature( + IVerifierFactory verifier) + { + // TODO Compare IsAlgIDEqual in X509Certificate.CheckSignature + if (!c.SignatureAlgorithm.Equals(c.TbsCertList.Signature)) + throw new CrlException("Signature algorithm on CertificateList does not match TbsCertList."); + + byte[] b = GetTbsCertList(); + + IStreamCalculator streamCalculator = verifier.CreateCalculator(); + using (var stream = streamCalculator.Stream) + { + stream.Write(b, 0, b.Length); + } + + if (!streamCalculator.GetResult().IsVerified(GetSignature())) + throw new InvalidKeyException("CRL does not verify with supplied public key."); + } + + public virtual int Version + { + get { return c.Version; } + } + + public virtual X509Name IssuerDN + { + get { return c.Issuer; } + } + + public virtual DateTime ThisUpdate + { + get { return c.ThisUpdate.ToDateTime(); } + } + + public virtual DateTime? NextUpdate => c.NextUpdate?.ToDateTime(); + + private ISet LoadCrlEntries() + { + var entrySet = new HashSet(); + var revoked = c.GetRevokedCertificateEnumeration(); + + X509Name previousCertificateIssuer = IssuerDN; + foreach (CrlEntry entry in revoked) + { + X509CrlEntry crlEntry = new X509CrlEntry(entry, isIndirect, previousCertificateIssuer); + entrySet.Add(crlEntry); + previousCertificateIssuer = crlEntry.GetCertificateIssuer(); + } + + return entrySet; + } + + public virtual X509CrlEntry GetRevokedCertificate( + BigInteger serialNumber) + { + var certs = c.GetRevokedCertificateEnumeration(); + + X509Name previousCertificateIssuer = IssuerDN; + foreach (CrlEntry entry in certs) + { + X509CrlEntry crlEntry = new X509CrlEntry(entry, isIndirect, previousCertificateIssuer); + + if (serialNumber.Equals(entry.UserCertificate.Value)) + { + return crlEntry; + } + + previousCertificateIssuer = crlEntry.GetCertificateIssuer(); + } + + return null; + } + + public virtual ISet GetRevokedCertificates() + { + var entrySet = LoadCrlEntries(); + + if (entrySet.Count > 0) + return entrySet; + + return null; + } + + public virtual byte[] GetTbsCertList() + { + try + { + return c.TbsCertList.GetDerEncoded(); + } + catch (Exception e) + { + throw new CrlException(e.ToString()); + } + } + + public virtual byte[] GetSignature() + { + return c.GetSignatureOctets(); + } + + public virtual string SigAlgName + { + get { return sigAlgName; } + } + + public virtual string SigAlgOid + { + get { return c.SignatureAlgorithm.Algorithm.Id; } + } + + public virtual byte[] GetSigAlgParams() + { + return Arrays.Clone(sigAlgParams); + } + + /// + /// Return the DER encoding of this CRL. + /// + /// A byte array containing the DER encoding of this CRL. + /// If there is an error encoding the CRL. + public virtual byte[] GetEncoded() + { + return Arrays.Clone(GetCachedEncoding().GetEncoded()); + } + + public override bool Equals(object other) + { + if (this == other) + return true; + + X509Crl that = other as X509Crl; + if (null == that) + return false; + + if (this.hashValueSet && that.hashValueSet) + { + if (this.hashValue != that.hashValue) + return false; + } + else if (null == this.cachedEncoding || null == that.cachedEncoding) + { + DerBitString signature = c.Signature; + if (null != signature && !signature.Equals(that.c.Signature)) + return false; + } + + byte[] thisEncoding = this.GetCachedEncoding().Encoding; + byte[] thatEncoding = that.GetCachedEncoding().Encoding; + + return null != thisEncoding + && null != thatEncoding + && Arrays.AreEqual(thisEncoding, thatEncoding); + } + + public override int GetHashCode() + { + if (!hashValueSet) + { + byte[] thisEncoding = this.GetCachedEncoding().Encoding; + + hashValue = Arrays.GetHashCode(thisEncoding); + hashValueSet = true; + } + + return hashValue; + } + + /** + * Returns a string representation of this CRL. + * + * @return a string representation of this CRL. + */ + public override string ToString() + { + StringBuilder buf = new StringBuilder(); + + buf.Append(" Version: ").Append(this.Version).AppendLine(); + buf.Append(" IssuerDN: ").Append(this.IssuerDN).AppendLine(); + buf.Append(" This update: ").Append(this.ThisUpdate).AppendLine(); + buf.Append(" Next update: ").Append(this.NextUpdate).AppendLine(); + buf.Append(" Signature Algorithm: ").Append(this.SigAlgName).AppendLine(); + + byte[] sig = this.GetSignature(); + + buf.Append(" Signature: "); + buf.Append(Hex.ToHexString(sig, 0, 20)).AppendLine(); + + for (int i = 20; i < sig.Length; i += 20) + { + int count = System.Math.Min(20, sig.Length - i); + buf.Append(" "); + buf.Append(Hex.ToHexString(sig, i, count)).AppendLine(); + } + + X509Extensions extensions = c.TbsCertList.Extensions; + + if (extensions != null) + { + var e = extensions.ExtensionOids.GetEnumerator(); + + if (e.MoveNext()) + { + buf.Append(" Extensions: ").AppendLine(); + } + + do + { + DerObjectIdentifier oid = e.Current; + X509Extension ext = extensions.GetExtension(oid); + + if (ext.Value != null) + { + Asn1Object asn1Value = X509ExtensionUtilities.FromExtensionValue(ext.Value); + + buf.Append(" critical(").Append(ext.IsCritical).Append(") "); + try + { + if (oid.Equals(X509Extensions.CrlNumber)) + { + buf.Append(new CrlNumber(DerInteger.GetInstance(asn1Value).PositiveValue)).AppendLine(); + } + else if (oid.Equals(X509Extensions.DeltaCrlIndicator)) + { + buf.Append( + "Base CRL: " + + new CrlNumber(DerInteger.GetInstance( + asn1Value).PositiveValue)) + .AppendLine(); + } + else if (oid.Equals(X509Extensions.IssuingDistributionPoint)) + { + buf.Append(IssuingDistributionPoint.GetInstance((Asn1Sequence) asn1Value)).AppendLine(); + } + else if (oid.Equals(X509Extensions.CrlDistributionPoints)) + { + buf.Append(CrlDistPoint.GetInstance((Asn1Sequence) asn1Value)).AppendLine(); + } + else if (oid.Equals(X509Extensions.FreshestCrl)) + { + buf.Append(CrlDistPoint.GetInstance((Asn1Sequence) asn1Value)).AppendLine(); + } + else + { + buf.Append(oid.Id); + buf.Append(" value = ").Append( + Asn1Dump.DumpAsString(asn1Value)) + .AppendLine(); + } + } + catch (Exception) + { + buf.Append(oid.Id); + buf.Append(" value = ").Append("*****").AppendLine(); + } + } + else + { + buf.AppendLine(); + } + } + while (e.MoveNext()); + } + + var certSet = GetRevokedCertificates(); + if (certSet != null) + { + foreach (X509CrlEntry entry in certSet) + { + buf.Append(entry); + buf.AppendLine(); + } + } + + return buf.ToString(); + } + + /** + * Checks whether the given certificate is on this CRL. + * + * @param cert the certificate to check for. + * @return true if the given certificate is on this CRL, + * false otherwise. + */ +// public bool IsRevoked( +// Certificate cert) +// { +// if (!cert.getType().Equals("X.509")) +// { +// throw new RuntimeException("X.509 CRL used with non X.509 Cert"); +// } + public virtual bool IsRevoked( + X509Certificate cert) + { + CrlEntry[] certs = c.GetRevokedCertificates(); + + if (certs != null) + { + BigInteger serial = cert.SerialNumber; + + for (int i = 0; i < certs.Length; i++) + { + if (certs[i].UserCertificate.HasValue(serial)) + return true; + } + } + + return false; + } + + protected virtual bool IsIndirectCrl + { + get + { + Asn1OctetString idp = GetExtensionValue(X509Extensions.IssuingDistributionPoint); + bool isIndirect = false; + + try + { + if (idp != null) + { + isIndirect = IssuingDistributionPoint.GetInstance( + X509ExtensionUtilities.FromExtensionValue(idp)).IsIndirectCrl; + } + } + catch (Exception e) + { + // TODO +// throw new ExtCrlException("Exception reading IssuingDistributionPoint", e); + throw new CrlException("Exception reading IssuingDistributionPoint" + e); + } + + return isIndirect; + } + } + + private CachedEncoding GetCachedEncoding() + { + lock (cacheLock) + { + if (null != cachedEncoding) + return cachedEncoding; + } + + byte[] encoding = null; + CrlException exception = null; + try + { + encoding = c.GetEncoded(Asn1Encodable.Der); + } + catch (IOException e) + { + exception = new CrlException("Failed to DER-encode CRL", e); + } + + CachedEncoding temp = new CachedEncoding(encoding, exception); + + lock (cacheLock) + { + if (null == cachedEncoding) + { + cachedEncoding = temp; + } + + return cachedEncoding; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Crl.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Crl.cs.meta new file mode 100644 index 000000000..a4305b471 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Crl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9a154750ed1601f4b80aa4d215d54e31 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CrlEntry.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CrlEntry.cs new file mode 100644 index 000000000..866dc09e7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CrlEntry.cs @@ -0,0 +1,234 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Text; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Extension; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + /** + * The following extensions are listed in RFC 2459 as relevant to CRL Entries + * + * ReasonCode Hode Instruction Code Invalidity Date Certificate Issuer + * (critical) + */ + public class X509CrlEntry + : X509ExtensionBase + { + private CrlEntry c; + private bool isIndirect; + private X509Name previousCertificateIssuer; + private X509Name certificateIssuer; + + private volatile bool hashValueSet; + private volatile int hashValue; + + public X509CrlEntry( + CrlEntry c) + { + this.c = c; + this.certificateIssuer = loadCertificateIssuer(); + } + + /** + * Constructor for CRLEntries of indirect CRLs. If isIndirect + * is false {@link #getCertificateIssuer()} will always + * return null, previousCertificateIssuer is + * ignored. If this isIndirect is specified and this CrlEntry + * has no certificate issuer CRL entry extension + * previousCertificateIssuer is returned by + * {@link #getCertificateIssuer()}. + * + * @param c + * TbsCertificateList.CrlEntry object. + * @param isIndirect + * true if the corresponding CRL is a indirect + * CRL. + * @param previousCertificateIssuer + * Certificate issuer of the previous CrlEntry. + */ + public X509CrlEntry( + CrlEntry c, + bool isIndirect, + X509Name previousCertificateIssuer) + { + this.c = c; + this.isIndirect = isIndirect; + this.previousCertificateIssuer = previousCertificateIssuer; + this.certificateIssuer = loadCertificateIssuer(); + } + + private X509Name loadCertificateIssuer() + { + if (!isIndirect) + { + return null; + } + + Asn1OctetString ext = GetExtensionValue(X509Extensions.CertificateIssuer); + if (ext == null) + { + return previousCertificateIssuer; + } + + try + { + GeneralName[] names = GeneralNames.GetInstance( + X509ExtensionUtilities.FromExtensionValue(ext)).GetNames(); + + for (int i = 0; i < names.Length; i++) + { + if (names[i].TagNo == GeneralName.DirectoryName) + { + return X509Name.GetInstance(names[i].Name); + } + } + } + catch (Exception) + { + } + + return null; + } + + public X509Name GetCertificateIssuer() + { + return certificateIssuer; + } + + protected override X509Extensions GetX509Extensions() + { + return c.Extensions; + } + + public byte[] GetEncoded() + { + try + { + return c.GetDerEncoded(); + } + catch (Exception e) + { + throw new CrlException(e.ToString()); + } + } + + public BigInteger SerialNumber + { + get { return c.UserCertificate.Value; } + } + + public DateTime RevocationDate + { + get { return c.RevocationDate.ToDateTime(); } + } + + public bool HasExtensions + { + get { return c.Extensions != null; } + } + + public override bool Equals(object other) + { + if (this == other) + return true; + + X509CrlEntry that = other as X509CrlEntry; + if (null == that) + return false; + + if (this.hashValueSet && that.hashValueSet) + { + if (this.hashValue != that.hashValue) + return false; + } + + return this.c.Equals(that.c); + } + + public override int GetHashCode() + { + if (!hashValueSet) + { + hashValue = this.c.GetHashCode(); + hashValueSet = true; + } + + return hashValue; + } + + public override string ToString() + { + StringBuilder buf = new StringBuilder(); + + buf.Append(" userCertificate: ").Append(this.SerialNumber).AppendLine(); + buf.Append(" revocationDate: ").Append(this.RevocationDate).AppendLine(); + buf.Append(" certificateIssuer: ").Append(this.GetCertificateIssuer()).AppendLine(); + + X509Extensions extensions = c.Extensions; + + if (extensions != null) + { + var e = extensions.ExtensionOids.GetEnumerator(); + if (e.MoveNext()) + { + buf.Append(" crlEntryExtensions:").AppendLine(); + + do + { + DerObjectIdentifier oid = e.Current; + X509Extension ext = extensions.GetExtension(oid); + + if (ext.Value != null) + { + Asn1Object obj = X509ExtensionUtilities.FromExtensionValue(ext.Value); + + buf.Append(" critical(") + .Append(ext.IsCritical) + .Append(") "); + try + { + if (oid.Equals(X509Extensions.ReasonCode)) + { + buf.Append(new CrlReason(DerEnumerated.GetInstance(obj))); + } + else if (oid.Equals(X509Extensions.CertificateIssuer)) + { + buf.Append("Certificate issuer: ").Append( + GeneralNames.GetInstance((Asn1Sequence)obj)); + } + else + { + buf.Append(oid.Id); + buf.Append(" value = ").Append(Asn1Dump.DumpAsString(obj)); + } + buf.AppendLine(); + } + catch (Exception) + { + buf.Append(oid.Id); + buf.Append(" value = ").Append("*****").AppendLine(); + } + } + else + { + buf.AppendLine(); + } + } + while (e.MoveNext()); + } + } + + return buf.ToString(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CrlEntry.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CrlEntry.cs.meta new file mode 100644 index 000000000..42d2e4304 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CrlEntry.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bc6c6a5eead859647b11f57143e492fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CrlParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CrlParser.cs new file mode 100644 index 000000000..aab05bd24 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CrlParser.cs @@ -0,0 +1,176 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IO; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + public class X509CrlParser + { + private static readonly PemParser PemCrlParser = new PemParser("CRL"); + + private readonly bool lazyAsn1; + + private Asn1Set sCrlData; + private int sCrlDataObjectCount; + private Stream currentCrlStream; + + public X509CrlParser(bool lazyAsn1 = false) + { + this.lazyAsn1 = lazyAsn1; + } + + private X509Crl ReadDerCrl(Asn1InputStream dIn) + { + Asn1Sequence seq = (Asn1Sequence)dIn.ReadObject(); + + if (seq.Count > 1 && seq[0] is DerObjectIdentifier) + { + if (seq[0].Equals(PkcsObjectIdentifiers.SignedData)) + { + sCrlData = SignedData.GetInstance( + Asn1Sequence.GetInstance((Asn1TaggedObject) seq[1], true)).Crls; + + return GetCrl(); + } + } + + return new X509Crl(CertificateList.GetInstance(seq)); + } + + private X509Crl ReadPemCrl(Stream inStream) + { + Asn1Sequence seq = PemCrlParser.ReadPemObject(inStream); + + return seq == null ? null : new X509Crl(CertificateList.GetInstance(seq)); + } + + private X509Crl GetCrl() + { + if (sCrlData == null || sCrlDataObjectCount >= sCrlData.Count) + return null; + + return new X509Crl(CertificateList.GetInstance(sCrlData[sCrlDataObjectCount++])); + } + + /// + /// Create loading data from byte array. + /// + /// + public X509Crl ReadCrl(byte[] input) + { + return ReadCrl(new MemoryStream(input, false)); + } + + /// + /// Create loading data from byte array. + /// + /// + public IList ReadCrls(byte[] input) + { + return ReadCrls(new MemoryStream(input, false)); + } + + /** + * Generates a certificate revocation list (CRL) object and initializes + * it with the data read from the input stream inStream. + */ + public X509Crl ReadCrl(Stream inStream) + { + if (inStream == null) + throw new ArgumentNullException("inStream"); + if (!inStream.CanRead) + throw new ArgumentException("inStream must be read-able", "inStream"); + + if (currentCrlStream == null) + { + currentCrlStream = inStream; + sCrlData = null; + sCrlDataObjectCount = 0; + } + else if (currentCrlStream != inStream) // reset if input stream has changed + { + currentCrlStream = inStream; + sCrlData = null; + sCrlDataObjectCount = 0; + } + + try + { + if (sCrlData != null) + { + if (sCrlDataObjectCount != sCrlData.Count) + return GetCrl(); + + sCrlData = null; + sCrlDataObjectCount = 0; + return null; + } + + int tag = inStream.ReadByte(); + if (tag < 0) + return null; + + if (inStream.CanSeek) + { + inStream.Seek(-1L, SeekOrigin.Current); + } + else + { + PushbackStream pis = new PushbackStream(inStream); + pis.Unread(tag); + inStream = pis; + } + + if (tag != 0x30) // assume ascii PEM encoded. + return ReadPemCrl(inStream); + + Asn1InputStream asn1 = lazyAsn1 + ? new LazyAsn1InputStream(inStream) + : new Asn1InputStream(inStream); + + return ReadDerCrl(asn1); + } + catch (CrlException e) + { + throw e; + } + catch (Exception e) + { + throw new CrlException(e.ToString()); + } + } + + /** + * Returns a (possibly empty) collection view of the CRLs read from + * the given input stream inStream. + * + * The inStream may contain a sequence of DER-encoded CRLs, or + * a PKCS#7 CRL set. This is a PKCS#7 SignedData object, with the + * only significant field being crls. In particular the signature + * and the contents are ignored. + */ + public IList ReadCrls(Stream inStream) + { + return new List(ParseCrls(inStream)); + } + + public IEnumerable ParseCrls(Stream inStream) + { + X509Crl crl; + while ((crl = ReadCrl(inStream)) != null) + { + yield return crl; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CrlParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CrlParser.cs.meta new file mode 100644 index 000000000..c77b331e5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509CrlParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e3886777ef4aa57469f8e79b6e1c14ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509ExtensionBase.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509ExtensionBase.cs new file mode 100644 index 000000000..9bc16723b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509ExtensionBase.cs @@ -0,0 +1,59 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + public abstract class X509ExtensionBase + : IX509Extension + { + protected abstract X509Extensions GetX509Extensions(); + + protected virtual ISet GetExtensionOids(bool critical) + { + X509Extensions extensions = GetX509Extensions(); + if (extensions == null) + return null; + + var set = new HashSet(); + foreach (DerObjectIdentifier oid in extensions.ExtensionOids) + { + X509Extension ext = extensions.GetExtension(oid); + if (ext.IsCritical == critical) + { + set.Add(oid.Id); + } + } + return set; + } + + /// + /// Get non critical extensions. + /// + /// A set of non critical extension oids. + public virtual ISet GetNonCriticalExtensionOids() + { + return GetExtensionOids(false); + } + + /// + /// Get any critical extensions. + /// + /// A sorted list of critical entension. + public virtual ISet GetCriticalExtensionOids() + { + return GetExtensionOids(true); + } + + public virtual Asn1OctetString GetExtensionValue(DerObjectIdentifier oid) + { + return GetX509Extensions()?.GetExtension(oid)?.Value; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509ExtensionBase.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509ExtensionBase.cs.meta new file mode 100644 index 000000000..7b6af8e65 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509ExtensionBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c9d43943931445544867d6e0c63383f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509KeyUsage.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509KeyUsage.cs new file mode 100644 index 000000000..44bdc161a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509KeyUsage.cs @@ -0,0 +1,63 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + /** + * A holding class for constructing an X509 Key Usage extension. + * + *
    +	 *    id-ce-keyUsage OBJECT IDENTIFIER ::=  { id-ce 15 }
    +	 *
    +	 *    KeyUsage ::= BIT STRING {
    +	 *         digitalSignature        (0),
    +	 *         nonRepudiation          (1),
    +	 *         keyEncipherment         (2),
    +	 *         dataEncipherment        (3),
    +	 *         keyAgreement            (4),
    +	 *         keyCertSign             (5),
    +	 *         cRLSign                 (6),
    +	 *         encipherOnly            (7),
    +	 *         decipherOnly            (8) }
    +	 * 
    + */ + public class X509KeyUsage + : Asn1Encodable + { + public const int DigitalSignature = 1 << 7; + public const int NonRepudiation = 1 << 6; + public const int KeyEncipherment = 1 << 5; + public const int DataEncipherment = 1 << 4; + public const int KeyAgreement = 1 << 3; + public const int KeyCertSign = 1 << 2; + public const int CrlSign = 1 << 1; + public const int EncipherOnly = 1 << 0; + public const int DecipherOnly = 1 << 15; + + private readonly int usage; + + /** + * Basic constructor. + * + * @param usage - the bitwise OR of the Key Usage flags giving the + * allowed uses for the key. + * e.g. (X509KeyUsage.keyEncipherment | X509KeyUsage.dataEncipherment) + */ + public X509KeyUsage( + int usage) + { + this.usage = usage; + } + + public override Asn1Object ToAsn1Object() + { + return new KeyUsage(usage); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509KeyUsage.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509KeyUsage.cs.meta new file mode 100644 index 000000000..36b9cf813 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509KeyUsage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 856abba21185f344ba24e505be6a75e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509SignatureUtil.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509SignatureUtil.cs new file mode 100644 index 000000000..a7e432bda --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509SignatureUtil.cs @@ -0,0 +1,139 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.TeleTrust; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + internal class X509SignatureUtilities + { + private static readonly Asn1Null derNull = DerNull.Instance; + + internal static void SetSignatureParameters( + ISigner signature, + Asn1Encodable parameters) + { + if (parameters != null && !derNull.Equals(parameters)) + { + // TODO Put back in +// AlgorithmParameters sigParams = AlgorithmParameters.GetInstance(signature.getAlgorithm()); +// +// try +// { +// sigParams.Init(parameters.ToAsn1Object().GetDerEncoded()); +// } +// catch (IOException e) +// { +// throw new SignatureException("IOException decoding parameters: " + e.Message); +// } +// +// if (Org.BouncyCastle.Utilities.Platform.EndsWith(signature.getAlgorithm(), "MGF1")) +// { +// try +// { +// signature.setParameter(sigParams.getParameterSpec(PSSParameterSpec.class)); +// } +// catch (GeneralSecurityException e) +// { +// throw new SignatureException("Exception extracting parameters: " + e.Message); +// } +// } + } + } + + internal static string GetSignatureName( + AlgorithmIdentifier sigAlgId) + { + Asn1Encodable parameters = sigAlgId.Parameters; + + if (parameters != null && !derNull.Equals(parameters)) + { + if (sigAlgId.Algorithm.Equals(PkcsObjectIdentifiers.IdRsassaPss)) + { + RsassaPssParameters rsaParams = RsassaPssParameters.GetInstance(parameters); + + return GetDigestAlgName(rsaParams.HashAlgorithm.Algorithm) + "withRSAandMGF1"; + } + if (sigAlgId.Algorithm.Equals(X9ObjectIdentifiers.ECDsaWithSha2)) + { + Asn1Sequence ecDsaParams = Asn1Sequence.GetInstance(parameters); + + return GetDigestAlgName((DerObjectIdentifier)ecDsaParams[0]) + "withECDSA"; + } + } + + string sigName = SignerUtilities.GetEncodingName(sigAlgId.Algorithm); + if (null != sigName) + { + return sigName; + } + + return sigAlgId.Algorithm.Id; + } + + /** + * Return the digest algorithm using one of the standard JCA string + * representations rather than the algorithm identifier (if possible). + */ + private static string GetDigestAlgName( + DerObjectIdentifier digestAlgOID) + { + if (PkcsObjectIdentifiers.MD5.Equals(digestAlgOID)) + { + return "MD5"; + } + else if (OiwObjectIdentifiers.IdSha1.Equals(digestAlgOID)) + { + return "SHA1"; + } + else if (NistObjectIdentifiers.IdSha224.Equals(digestAlgOID)) + { + return "SHA224"; + } + else if (NistObjectIdentifiers.IdSha256.Equals(digestAlgOID)) + { + return "SHA256"; + } + else if (NistObjectIdentifiers.IdSha384.Equals(digestAlgOID)) + { + return "SHA384"; + } + else if (NistObjectIdentifiers.IdSha512.Equals(digestAlgOID)) + { + return "SHA512"; + } + else if (TeleTrusTObjectIdentifiers.RipeMD128.Equals(digestAlgOID)) + { + return "RIPEMD128"; + } + else if (TeleTrusTObjectIdentifiers.RipeMD160.Equals(digestAlgOID)) + { + return "RIPEMD160"; + } + else if (TeleTrusTObjectIdentifiers.RipeMD256.Equals(digestAlgOID)) + { + return "RIPEMD256"; + } + else if (CryptoProObjectIdentifiers.GostR3411.Equals(digestAlgOID)) + { + return "GOST3411"; + } + else + { + return digestAlgOID.Id; + } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509SignatureUtil.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509SignatureUtil.cs.meta new file mode 100644 index 000000000..22775e86b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509SignatureUtil.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 622a207c30957f04fb37399eac610155 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Utilities.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Utilities.cs new file mode 100644 index 000000000..e45cf04da --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Utilities.cs @@ -0,0 +1,167 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.TeleTrust; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + internal class X509Utilities + { + private static readonly Dictionary m_algorithms = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly Dictionary m_exParams = + new Dictionary(StringComparer.OrdinalIgnoreCase); + private static readonly HashSet m_noParams = new HashSet(); + + static X509Utilities() + { + m_algorithms.Add("MD2WITHRSAENCRYPTION", PkcsObjectIdentifiers.MD2WithRsaEncryption); + m_algorithms.Add("MD2WITHRSA", PkcsObjectIdentifiers.MD2WithRsaEncryption); + m_algorithms.Add("MD5WITHRSAENCRYPTION", PkcsObjectIdentifiers.MD5WithRsaEncryption); + m_algorithms.Add("MD5WITHRSA", PkcsObjectIdentifiers.MD5WithRsaEncryption); + m_algorithms.Add("SHA1WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha1WithRsaEncryption); + m_algorithms.Add("SHA-1WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha1WithRsaEncryption); + m_algorithms.Add("SHA1WITHRSA", PkcsObjectIdentifiers.Sha1WithRsaEncryption); + m_algorithms.Add("SHA-1WITHRSA", PkcsObjectIdentifiers.Sha1WithRsaEncryption); + m_algorithms.Add("SHA224WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha224WithRsaEncryption); + m_algorithms.Add("SHA-224WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha224WithRsaEncryption); + m_algorithms.Add("SHA224WITHRSA", PkcsObjectIdentifiers.Sha224WithRsaEncryption); + m_algorithms.Add("SHA-224WITHRSA", PkcsObjectIdentifiers.Sha224WithRsaEncryption); + m_algorithms.Add("SHA256WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha256WithRsaEncryption); + m_algorithms.Add("SHA-256WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha256WithRsaEncryption); + m_algorithms.Add("SHA256WITHRSA", PkcsObjectIdentifiers.Sha256WithRsaEncryption); + m_algorithms.Add("SHA-256WITHRSA", PkcsObjectIdentifiers.Sha256WithRsaEncryption); + m_algorithms.Add("SHA384WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha384WithRsaEncryption); + m_algorithms.Add("SHA-384WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha384WithRsaEncryption); + m_algorithms.Add("SHA384WITHRSA", PkcsObjectIdentifiers.Sha384WithRsaEncryption); + m_algorithms.Add("SHA-384WITHRSA", PkcsObjectIdentifiers.Sha384WithRsaEncryption); + m_algorithms.Add("SHA512WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512WithRsaEncryption); + m_algorithms.Add("SHA-512WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512WithRsaEncryption); + m_algorithms.Add("SHA512WITHRSA", PkcsObjectIdentifiers.Sha512WithRsaEncryption); + m_algorithms.Add("SHA-512WITHRSA", PkcsObjectIdentifiers.Sha512WithRsaEncryption); + m_algorithms.Add("SHA512(224)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption); + m_algorithms.Add("SHA-512(224)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption); + m_algorithms.Add("SHA512(224)WITHRSA", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption); + m_algorithms.Add("SHA-512(224)WITHRSA", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption); + m_algorithms.Add("SHA512(256)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption); + m_algorithms.Add("SHA-512(256)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption); + m_algorithms.Add("SHA512(256)WITHRSA", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption); + m_algorithms.Add("SHA-512(256)WITHRSA", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption); + m_algorithms.Add("SHA1WITHRSAANDMGF1", PkcsObjectIdentifiers.IdRsassaPss); + m_algorithms.Add("SHA224WITHRSAANDMGF1", PkcsObjectIdentifiers.IdRsassaPss); + m_algorithms.Add("SHA256WITHRSAANDMGF1", PkcsObjectIdentifiers.IdRsassaPss); + m_algorithms.Add("SHA384WITHRSAANDMGF1", PkcsObjectIdentifiers.IdRsassaPss); + m_algorithms.Add("SHA512WITHRSAANDMGF1", PkcsObjectIdentifiers.IdRsassaPss); + m_algorithms.Add("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD160); + m_algorithms.Add("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD160); + m_algorithms.Add("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD128); + m_algorithms.Add("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD128); + m_algorithms.Add("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD256); + m_algorithms.Add("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD256); + m_algorithms.Add("SHA1WITHDSA", X9ObjectIdentifiers.IdDsaWithSha1); + m_algorithms.Add("DSAWITHSHA1", X9ObjectIdentifiers.IdDsaWithSha1); + m_algorithms.Add("SHA224WITHDSA", NistObjectIdentifiers.DsaWithSha224); + m_algorithms.Add("SHA256WITHDSA", NistObjectIdentifiers.DsaWithSha256); + m_algorithms.Add("SHA384WITHDSA", NistObjectIdentifiers.DsaWithSha384); + m_algorithms.Add("SHA512WITHDSA", NistObjectIdentifiers.DsaWithSha512); + m_algorithms.Add("SHA1WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha1); + m_algorithms.Add("ECDSAWITHSHA1", X9ObjectIdentifiers.ECDsaWithSha1); + m_algorithms.Add("SHA224WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha224); + m_algorithms.Add("SHA256WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha256); + m_algorithms.Add("SHA384WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha384); + m_algorithms.Add("SHA512WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha512); + m_algorithms.Add("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94); + m_algorithms.Add("GOST3411WITHGOST3410-94", CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94); + m_algorithms.Add("GOST3411WITHECGOST3410", CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001); + m_algorithms.Add("GOST3411WITHECGOST3410-2001", CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001); + m_algorithms.Add("GOST3411WITHGOST3410-2001", CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001); + + // + // According to RFC 3279, the ASN.1 encoding SHALL (id-dsa-with-sha1) or MUST (ecdsa-with-SHA*) omit the parameters field. + // The parameters field SHALL be NULL for RSA based signature algorithms. + // + m_noParams.Add(X9ObjectIdentifiers.ECDsaWithSha1); + m_noParams.Add(X9ObjectIdentifiers.ECDsaWithSha224); + m_noParams.Add(X9ObjectIdentifiers.ECDsaWithSha256); + m_noParams.Add(X9ObjectIdentifiers.ECDsaWithSha384); + m_noParams.Add(X9ObjectIdentifiers.ECDsaWithSha512); + m_noParams.Add(X9ObjectIdentifiers.IdDsaWithSha1); + m_noParams.Add(OiwObjectIdentifiers.DsaWithSha1); + m_noParams.Add(NistObjectIdentifiers.DsaWithSha224); + m_noParams.Add(NistObjectIdentifiers.DsaWithSha256); + m_noParams.Add(NistObjectIdentifiers.DsaWithSha384); + m_noParams.Add(NistObjectIdentifiers.DsaWithSha512); + + // + // RFC 4491 + // + m_noParams.Add(CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94); + m_noParams.Add(CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001); + + // + // explicit params + // + AlgorithmIdentifier sha1AlgId = new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1, DerNull.Instance); + m_exParams.Add("SHA1WITHRSAANDMGF1", CreatePssParams(sha1AlgId, 20)); + + AlgorithmIdentifier sha224AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha224, DerNull.Instance); + m_exParams.Add("SHA224WITHRSAANDMGF1", CreatePssParams(sha224AlgId, 28)); + + AlgorithmIdentifier sha256AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha256, DerNull.Instance); + m_exParams.Add("SHA256WITHRSAANDMGF1", CreatePssParams(sha256AlgId, 32)); + + AlgorithmIdentifier sha384AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha384, DerNull.Instance); + m_exParams.Add("SHA384WITHRSAANDMGF1", CreatePssParams(sha384AlgId, 48)); + + AlgorithmIdentifier sha512AlgId = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha512, DerNull.Instance); + m_exParams.Add("SHA512WITHRSAANDMGF1", CreatePssParams(sha512AlgId, 64)); + } + + private static RsassaPssParameters CreatePssParams( + AlgorithmIdentifier hashAlgId, + int saltSize) + { + return new RsassaPssParameters( + hashAlgId, + new AlgorithmIdentifier(PkcsObjectIdentifiers.IdMgf1, hashAlgId), + new DerInteger(saltSize), + new DerInteger(1)); + } + + internal static DerObjectIdentifier GetAlgorithmOid(string algorithmName) + { + if (m_algorithms.TryGetValue(algorithmName, out var oid)) + return oid; + + return new DerObjectIdentifier(algorithmName); + } + + internal static AlgorithmIdentifier GetSigAlgID(DerObjectIdentifier sigOid, string algorithmName) + { + if (m_noParams.Contains(sigOid)) + return new AlgorithmIdentifier(sigOid); + + if (m_exParams.TryGetValue(algorithmName, out var explicitParameters)) + return new AlgorithmIdentifier(sigOid, explicitParameters); + + return new AlgorithmIdentifier(sigOid, DerNull.Instance); + } + + internal static IEnumerable GetAlgNames() + { + return CollectionUtilities.Proxy(m_algorithms.Keys); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Utilities.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Utilities.cs.meta new file mode 100644 index 000000000..891f73ccd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509Utilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 05c143c2146115a488ce5733be22c489 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V1CertificateGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V1CertificateGenerator.cs new file mode 100644 index 000000000..c8e2a80f2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V1CertificateGenerator.cs @@ -0,0 +1,151 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + /// + /// Class to Generate X509V1 Certificates. + /// + public class X509V1CertificateGenerator + { + private V1TbsCertificateGenerator tbsGen; + + /// + /// Default Constructor. + /// + public X509V1CertificateGenerator() + { + tbsGen = new V1TbsCertificateGenerator(); + } + + /// + /// Reset the generator. + /// + public void Reset() + { + tbsGen = new V1TbsCertificateGenerator(); + } + + /// + /// Set the certificate's serial number. + /// + /// Make serial numbers long, if you have no serial number policy make sure the number is at least 16 bytes of secure random data. + /// You will be surprised how ugly a serial number collision can get. + /// The serial number. + public void SetSerialNumber( + BigInteger serialNumber) + { + if (serialNumber.SignValue <= 0) + { + throw new ArgumentException("serial number must be a positive integer", "serialNumber"); + } + + tbsGen.SetSerialNumber(new DerInteger(serialNumber)); + } + + /// + /// Set the issuer distinguished name. + /// The issuer is the entity whose private key is used to sign the certificate. + /// + /// The issuers DN. + public void SetIssuerDN( + X509Name issuer) + { + tbsGen.SetIssuer(issuer); + } + + /// + /// Set the date that this certificate is to be valid from. + /// + /// + public void SetNotBefore( + DateTime date) + { + tbsGen.SetStartDate(new Time(date)); + } + + /// + /// Set the date after which this certificate will no longer be valid. + /// + /// + public void SetNotAfter( + DateTime date) + { + tbsGen.SetEndDate(new Time(date)); + } + + /// + /// Set the subject distinguished name. + /// The subject describes the entity associated with the public key. + /// + /// + public void SetSubjectDN( + X509Name subject) + { + tbsGen.SetSubject(subject); + } + + /// + /// Set the public key that this certificate identifies. + /// + /// + public void SetPublicKey( + AsymmetricKeyParameter publicKey) + { + try + { + tbsGen.SetSubjectPublicKeyInfo( + SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(publicKey)); + } + catch (Exception e) + { + throw new ArgumentException("unable to process key - " + e.ToString()); + } + } + + /// + /// Generate a new using the provided . + /// + /// A signature factory with the necessary + /// algorithm details. + /// An . + public X509Certificate Generate(ISignatureFactory signatureFactory) + { + var sigAlgID = (AlgorithmIdentifier)signatureFactory.AlgorithmDetails; + + tbsGen.SetSignature(sigAlgID); + + TbsCertificateStructure tbsCert = tbsGen.GenerateTbsCertificate(); + + IStreamCalculator streamCalculator = signatureFactory.CreateCalculator(); + using (Stream sigStream = streamCalculator.Stream) + { + tbsCert.EncodeTo(sigStream, Asn1Encodable.Der); + } + + var signature = streamCalculator.GetResult().Collect(); + + return new X509Certificate( + new X509CertificateStructure(tbsCert, sigAlgID, new DerBitString(signature))); + } + + /// + /// Allows enumeration of the signature names supported by the generator. + /// + public IEnumerable SignatureAlgNames + { + get { return X509Utilities.GetAlgNames(); } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V1CertificateGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V1CertificateGenerator.cs.meta new file mode 100644 index 000000000..76950c8ad --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V1CertificateGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a9d644b2fa83d85409041f2aa7707d64 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V2AttributeCertificate.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V2AttributeCertificate.cs new file mode 100644 index 000000000..e045bb58a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V2AttributeCertificate.cs @@ -0,0 +1,280 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + /// An implementation of a version 2 X.509 Attribute Certificate. + public class X509V2AttributeCertificate + : X509ExtensionBase + { + private readonly AttributeCertificate cert; + private readonly DateTime notBefore; + private readonly DateTime notAfter; + + private static AttributeCertificate GetObject(Stream input) + { + try + { + return AttributeCertificate.GetInstance(Asn1Object.FromStream(input)); + } + catch (IOException e) + { + throw e; + } + catch (Exception e) + { + throw new IOException("exception decoding certificate structure", e); + } + } + + public X509V2AttributeCertificate( + Stream encIn) + : this(GetObject(encIn)) + { + } + + public X509V2AttributeCertificate( + byte[] encoded) + : this(new MemoryStream(encoded, false)) + { + } + + public X509V2AttributeCertificate(AttributeCertificate cert) + { + this.cert = cert; + + try + { + this.notAfter = cert.ACInfo.AttrCertValidityPeriod.NotAfterTime.ToDateTime(); + this.notBefore = cert.ACInfo.AttrCertValidityPeriod.NotBeforeTime.ToDateTime(); + } + catch (Exception e) + { + throw new IOException("invalid data structure in certificate!", e); + } + } + + public virtual AttributeCertificate AttributeCertificate + { + get { return cert; } + } + + public virtual int Version + { + get { return cert.ACInfo.Version.IntValueExact + 1; } + } + + public virtual BigInteger SerialNumber + { + get { return cert.ACInfo.SerialNumber.Value; } + } + + public virtual AttributeCertificateHolder Holder + { + get + { + return new AttributeCertificateHolder((Asn1Sequence)cert.ACInfo.Holder.ToAsn1Object()); + } + } + + public virtual AttributeCertificateIssuer Issuer + { + get + { + return new AttributeCertificateIssuer(cert.ACInfo.Issuer); + } + } + + public virtual DateTime NotBefore + { + get { return notBefore; } + } + + public virtual DateTime NotAfter + { + get { return notAfter; } + } + + public virtual bool[] GetIssuerUniqueID() + { + DerBitString id = cert.ACInfo.IssuerUniqueID; + + if (id != null) + { + byte[] bytes = id.GetBytes(); + bool[] boolId = new bool[bytes.Length * 8 - id.PadBits]; + + for (int i = 0; i != boolId.Length; i++) + { + //boolId[i] = (bytes[i / 8] & (0x80 >>> (i % 8))) != 0; + boolId[i] = (bytes[i / 8] & (0x80 >> (i % 8))) != 0; + } + + return boolId; + } + + return null; + } + + public virtual bool IsValidNow + { + get { return IsValid(DateTime.UtcNow); } + } + + public virtual bool IsValid( + DateTime date) + { + return date.CompareTo(NotBefore) >= 0 && date.CompareTo(NotAfter) <= 0; + } + + public virtual void CheckValidity() + { + this.CheckValidity(DateTime.UtcNow); + } + + public virtual void CheckValidity( + DateTime date) + { + if (date.CompareTo(NotAfter) > 0) + throw new CertificateExpiredException("certificate expired on " + NotAfter); + if (date.CompareTo(NotBefore) < 0) + throw new CertificateNotYetValidException("certificate not valid until " + NotBefore); + } + + public virtual AlgorithmIdentifier SignatureAlgorithm + { + get { return cert.SignatureAlgorithm; } + } + + public virtual byte[] GetSignature() + { + return cert.GetSignatureOctets(); + } + + public virtual void Verify( + AsymmetricKeyParameter key) + { + CheckSignature(new Asn1VerifierFactory(cert.SignatureAlgorithm, key)); + } + + /// + /// Verify the certificate's signature using a verifier created using the passed in verifier provider. + /// + /// An appropriate provider for verifying the certificate's signature. + /// True if the signature is valid. + /// If verifier provider is not appropriate or the certificate algorithm is invalid. + public virtual void Verify( + IVerifierFactoryProvider verifierProvider) + { + CheckSignature(verifierProvider.CreateVerifierFactory(cert.SignatureAlgorithm)); + } + + protected virtual void CheckSignature( + IVerifierFactory verifier) + { + // TODO Compare IsAlgIDEqual in X509Certificate.CheckSignature + if (!cert.SignatureAlgorithm.Equals(cert.ACInfo.Signature)) + throw new CertificateException("Signature algorithm in certificate info not same as outer certificate"); + + IStreamCalculator streamCalculator = verifier.CreateCalculator(); + + try + { + byte[] b = this.cert.ACInfo.GetEncoded(); + + using (var stream = streamCalculator.Stream) + { + stream.Write(b, 0, b.Length); + } + } + catch (IOException e) + { + throw new SignatureException("Exception encoding certificate info object", e); + } + + if (!streamCalculator.GetResult().IsVerified(this.GetSignature())) + throw new InvalidKeyException("Public key presented not for certificate signature"); + } + + public virtual byte[] GetEncoded() + { + return cert.GetEncoded(); + } + + protected override X509Extensions GetX509Extensions() + { + return cert.ACInfo.Extensions; + } + + public virtual X509Attribute[] GetAttributes() + { + Asn1Sequence seq = cert.ACInfo.Attributes; + X509Attribute[] attrs = new X509Attribute[seq.Count]; + + for (int i = 0; i != seq.Count; i++) + { + attrs[i] = new X509Attribute((Asn1Encodable)seq[i]); + } + + return attrs; + } + + public virtual X509Attribute[] GetAttributes( + string oid) + { + Asn1Sequence seq = cert.ACInfo.Attributes; + var list = new List(); + + for (int i = 0; i != seq.Count; i++) + { + X509Attribute attr = new X509Attribute((Asn1Encodable)seq[i]); + if (attr.Oid.Equals(oid)) + { + list.Add(attr); + } + } + + if (list.Count < 1) + { + return null; + } + + return list.ToArray(); + } + + public override bool Equals(object obj) + { + if (obj == this) + return true; + + X509V2AttributeCertificate other = obj as X509V2AttributeCertificate; + + if (other == null) + return false; + + return cert.Equals(other.cert); + + // NB: May prefer this implementation of Equals if more than one certificate implementation in play + //return Arrays.AreEqual(this.GetEncoded(), other.GetEncoded()); + } + + public override int GetHashCode() + { + return cert.GetHashCode(); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V2AttributeCertificate.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V2AttributeCertificate.cs.meta new file mode 100644 index 000000000..eccc88bbc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V2AttributeCertificate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f91955083bfb1549aefb0e34a5159e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V2AttributeCertificateGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V2AttributeCertificateGenerator.cs new file mode 100644 index 000000000..7796f0d11 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V2AttributeCertificateGenerator.cs @@ -0,0 +1,146 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + /// Class to produce an X.509 Version 2 AttributeCertificate. + public class X509V2AttributeCertificateGenerator + { + private readonly X509ExtensionsGenerator extGenerator = new X509ExtensionsGenerator(); + + private V2AttributeCertificateInfoGenerator acInfoGen; + + public X509V2AttributeCertificateGenerator() + { + acInfoGen = new V2AttributeCertificateInfoGenerator(); + } + + /// Reset the generator + public void Reset() + { + acInfoGen = new V2AttributeCertificateInfoGenerator(); + extGenerator.Reset(); + } + + /// Set the Holder of this Attribute Certificate. + public void SetHolder( + AttributeCertificateHolder holder) + { + acInfoGen.SetHolder(holder.holder); + } + + /// Set the issuer. + public void SetIssuer( + AttributeCertificateIssuer issuer) + { + acInfoGen.SetIssuer(AttCertIssuer.GetInstance(issuer.form)); + } + + /// Set the serial number for the certificate. + public void SetSerialNumber( + BigInteger serialNumber) + { + acInfoGen.SetSerialNumber(new DerInteger(serialNumber)); + } + + public void SetNotBefore( + DateTime date) + { + acInfoGen.SetStartDate(new Asn1GeneralizedTime(date)); + } + + public void SetNotAfter( + DateTime date) + { + acInfoGen.SetEndDate(new Asn1GeneralizedTime(date)); + } + + /// Add an attribute. + public void AddAttribute( + X509Attribute attribute) + { + acInfoGen.AddAttribute(AttributeX509.GetInstance(attribute.ToAsn1Object())); + } + + public void SetIssuerUniqueId( + bool[] iui) + { + // TODO convert bool array to bit string + //acInfoGen.SetIssuerUniqueID(iui); + throw new NotImplementedException("SetIssuerUniqueId()"); + } + + /// Add a given extension field for the standard extensions tag. + public void AddExtension( + string oid, + bool critical, + Asn1Encodable extensionValue) + { + extGenerator.AddExtension(new DerObjectIdentifier(oid), critical, extensionValue); + } + + /// + /// Add a given extension field for the standard extensions tag. + /// The value parameter becomes the contents of the octet string associated + /// with the extension. + /// + public void AddExtension( + string oid, + bool critical, + byte[] extensionValue) + { + extGenerator.AddExtension(new DerObjectIdentifier(oid), critical, extensionValue); + } + + /// + /// Generate a new using the provided . + /// + /// A signature factory with the necessary + /// algorithm details. + /// An . + public X509V2AttributeCertificate Generate(ISignatureFactory signatureFactory) + { + var sigAlgID = (AlgorithmIdentifier)signatureFactory.AlgorithmDetails; + + acInfoGen.SetSignature(sigAlgID); + + if (!extGenerator.IsEmpty) + { + acInfoGen.SetExtensions(extGenerator.Generate()); + } + + AttributeCertificateInfo acInfo = acInfoGen.GenerateAttributeCertificateInfo(); + + IStreamCalculator streamCalculator = signatureFactory.CreateCalculator(); + using (Stream sigStream = streamCalculator.Stream) + { + acInfo.EncodeTo(sigStream, Asn1Encodable.Der); + } + + var signature = streamCalculator.GetResult().Collect(); + + return new X509V2AttributeCertificate( + new AttributeCertificate(acInfo, sigAlgID, new DerBitString(signature))); + } + + /// + /// Allows enumeration of the signature names supported by the generator. + /// + public IEnumerable SignatureAlgNames + { + get { return X509Utilities.GetAlgNames(); } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V2AttributeCertificateGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V2AttributeCertificateGenerator.cs.meta new file mode 100644 index 000000000..71394ac78 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V2AttributeCertificateGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 443d99da7fa37d344b2315855b869d71 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V2CRLGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V2CRLGenerator.cs new file mode 100644 index 000000000..24372cbcc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V2CRLGenerator.cs @@ -0,0 +1,214 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + /** + * class to produce an X.509 Version 2 CRL. + */ + public class X509V2CrlGenerator + { + private readonly X509ExtensionsGenerator extGenerator = new X509ExtensionsGenerator(); + + private V2TbsCertListGenerator tbsGen; + + public X509V2CrlGenerator() + { + tbsGen = new V2TbsCertListGenerator(); + } + + /** + * reset the generator + */ + public void Reset() + { + tbsGen = new V2TbsCertListGenerator(); + extGenerator.Reset(); + } + + /** + * Set the issuer distinguished name - the issuer is the entity whose private key is used to sign the + * certificate. + */ + public void SetIssuerDN( + X509Name issuer) + { + tbsGen.SetIssuer(issuer); + } + + public void SetThisUpdate( + DateTime date) + { + tbsGen.SetThisUpdate(new Time(date)); + } + + public void SetNextUpdate( + DateTime date) + { + tbsGen.SetNextUpdate(new Time(date)); + } + + /** + * Reason being as indicated by CrlReason, i.e. CrlReason.KeyCompromise + * or 0 if CrlReason is not to be used + **/ + public void AddCrlEntry( + BigInteger userCertificate, + DateTime revocationDate, + int reason) + { + tbsGen.AddCrlEntry(new DerInteger(userCertificate), new Time(revocationDate), reason); + } + + /** + * Add a CRL entry with an Invalidity Date extension as well as a CrlReason extension. + * Reason being as indicated by CrlReason, i.e. CrlReason.KeyCompromise + * or 0 if CrlReason is not to be used + **/ + public void AddCrlEntry( + BigInteger userCertificate, + DateTime revocationDate, + int reason, + DateTime invalidityDate) + { + tbsGen.AddCrlEntry(new DerInteger(userCertificate), new Time(revocationDate), reason, + new Asn1GeneralizedTime(invalidityDate)); + } + + /** + * Add a CRL entry with extensions. + **/ + public void AddCrlEntry( + BigInteger userCertificate, + DateTime revocationDate, + X509Extensions extensions) + { + tbsGen.AddCrlEntry(new DerInteger(userCertificate), new Time(revocationDate), extensions); + } + + /** + * Add the CRLEntry objects contained in a previous CRL. + * + * @param other the X509Crl to source the other entries from. + */ + public void AddCrl(X509Crl other) + { + if (other == null) + throw new ArgumentNullException("other"); + + var revocations = other.GetRevokedCertificates(); + + if (revocations != null) + { + foreach (X509CrlEntry entry in revocations) + { + try + { + tbsGen.AddCrlEntry( + Asn1Sequence.GetInstance( + Asn1Object.FromByteArray(entry.GetEncoded()))); + } + catch (IOException e) + { + throw new CrlException("exception processing encoding of CRL", e); + } + } + } + } + + /** + * add a given extension field for the standard extensions tag (tag 0) + */ + public void AddExtension( + string oid, + bool critical, + Asn1Encodable extensionValue) + { + extGenerator.AddExtension(new DerObjectIdentifier(oid), critical, extensionValue); + } + + /** + * add a given extension field for the standard extensions tag (tag 0) + */ + public void AddExtension( + DerObjectIdentifier oid, + bool critical, + Asn1Encodable extensionValue) + { + extGenerator.AddExtension(oid, critical, extensionValue); + } + + /** + * add a given extension field for the standard extensions tag (tag 0) + */ + public void AddExtension( + string oid, + bool critical, + byte[] extensionValue) + { + extGenerator.AddExtension(new DerObjectIdentifier(oid), critical, new DerOctetString(extensionValue)); + } + + /** + * add a given extension field for the standard extensions tag (tag 0) + */ + public void AddExtension( + DerObjectIdentifier oid, + bool critical, + byte[] extensionValue) + { + extGenerator.AddExtension(oid, critical, new DerOctetString(extensionValue)); + } + + /// + /// Generate a new using the provided . + /// + /// A signature factory with the necessary + /// algorithm details. + /// An . + public X509Crl Generate(ISignatureFactory signatureFactory) + { + var sigAlgID = (AlgorithmIdentifier)signatureFactory.AlgorithmDetails; + + tbsGen.SetSignature(sigAlgID); + + if (!extGenerator.IsEmpty) + { + tbsGen.SetExtensions(extGenerator.Generate()); + } + + TbsCertificateList tbsCertList = tbsGen.GenerateTbsCertList(); + + IStreamCalculator streamCalculator = signatureFactory.CreateCalculator(); + using (Stream sigStream = streamCalculator.Stream) + { + tbsCertList.EncodeTo(sigStream, Asn1Encodable.Der); + } + + var signature = streamCalculator.GetResult().Collect(); + + return new X509Crl( + CertificateList.GetInstance(new DerSequence(tbsCertList, sigAlgID, new DerBitString(signature)))); + } + + /// + /// Allows enumeration of the signature names supported by the generator. + /// + public IEnumerable SignatureAlgNames + { + get { return X509Utilities.GetAlgNames(); } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V2CRLGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V2CRLGenerator.cs.meta new file mode 100644 index 000000000..d45336d71 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V2CRLGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4967cc865d9366a41bc51c9bc1a36da0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V3CertificateGenerator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V3CertificateGenerator.cs new file mode 100644 index 000000000..6a51b6533 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V3CertificateGenerator.cs @@ -0,0 +1,285 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Extension; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509 +{ + /// + /// A class to Generate Version 3 X509Certificates. + /// + public class X509V3CertificateGenerator + { + private readonly X509ExtensionsGenerator extGenerator = new X509ExtensionsGenerator(); + + private V3TbsCertificateGenerator tbsGen; + + public X509V3CertificateGenerator() + { + tbsGen = new V3TbsCertificateGenerator(); + } + + /// + /// Reset the Generator. + /// + public void Reset() + { + tbsGen = new V3TbsCertificateGenerator(); + extGenerator.Reset(); + } + + /// + /// Set the certificate's serial number. + /// + /// Make serial numbers long, if you have no serial number policy make sure the number is at least 16 bytes of secure random data. + /// You will be surprised how ugly a serial number collision can Get. + /// The serial number. + public void SetSerialNumber( + BigInteger serialNumber) + { + if (serialNumber.SignValue <= 0) + { + throw new ArgumentException("serial number must be a positive integer", "serialNumber"); + } + + tbsGen.SetSerialNumber(new DerInteger(serialNumber)); + } + + /// + /// Set the distinguished name of the issuer. + /// The issuer is the entity which is signing the certificate. + /// + /// The issuer's DN. + public void SetIssuerDN( + X509Name issuer) + { + tbsGen.SetIssuer(issuer); + } + + /// + /// Set the date that this certificate is to be valid from. + /// + /// + public void SetNotBefore( + DateTime date) + { + tbsGen.SetStartDate(new Time(date)); + } + + /// + /// Set the date after which this certificate will no longer be valid. + /// + /// + public void SetNotAfter( + DateTime date) + { + tbsGen.SetEndDate(new Time(date)); + } + + /// + /// Set the DN of the entity that this certificate is about. + /// + /// + public void SetSubjectDN( + X509Name subject) + { + tbsGen.SetSubject(subject); + } + + /// + /// Set the public key that this certificate identifies. + /// + /// + public void SetPublicKey( + AsymmetricKeyParameter publicKey) + { + tbsGen.SetSubjectPublicKeyInfo(SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(publicKey)); + } + + /// + /// Set the subject unique ID - note: it is very rare that it is correct to do this. + /// + /// + public void SetSubjectUniqueID( + bool[] uniqueID) + { + tbsGen.SetSubjectUniqueID(booleanToBitString(uniqueID)); + } + + /// + /// Set the issuer unique ID - note: it is very rare that it is correct to do this. + /// + /// + public void SetIssuerUniqueID( + bool[] uniqueID) + { + tbsGen.SetIssuerUniqueID(booleanToBitString(uniqueID)); + } + + private DerBitString booleanToBitString( + bool[] id) + { + byte[] bytes = new byte[(id.Length + 7) / 8]; + + for (int i = 0; i != id.Length; i++) + { + if (id[i]) + { + bytes[i / 8] |= (byte)(1 << ((7 - (i % 8)))); + } + } + + int pad = id.Length % 8; + + if (pad == 0) + { + return new DerBitString(bytes); + } + + return new DerBitString(bytes, 8 - pad); + } + + /// + /// Add a given extension field for the standard extensions tag (tag 3). + /// + /// string containing a dotted decimal Object Identifier. + /// Is it critical. + /// The value. + public void AddExtension( + string oid, + bool critical, + Asn1Encodable extensionValue) + { + extGenerator.AddExtension(new DerObjectIdentifier(oid), critical, extensionValue); + } + + /// + /// Add an extension to this certificate. + /// + /// Its Object Identifier. + /// Is it critical. + /// The value. + public void AddExtension( + DerObjectIdentifier oid, + bool critical, + Asn1Encodable extensionValue) + { + extGenerator.AddExtension(oid, critical, extensionValue); + } + + /// + /// Add an extension using a string with a dotted decimal OID. + /// + /// string containing a dotted decimal Object Identifier. + /// Is it critical. + /// byte[] containing the value of this extension. + public void AddExtension( + string oid, + bool critical, + byte[] extensionValue) + { + extGenerator.AddExtension(new DerObjectIdentifier(oid), critical, new DerOctetString(extensionValue)); + } + + /// + /// Add an extension to this certificate. + /// + /// Its Object Identifier. + /// Is it critical. + /// byte[] containing the value of this extension. + public void AddExtension( + DerObjectIdentifier oid, + bool critical, + byte[] extensionValue) + { + extGenerator.AddExtension(oid, critical, new DerOctetString(extensionValue)); + } + + /// + /// Add a given extension field for the standard extensions tag (tag 3), + /// copying the extension value from another certificate. + /// + public void CopyAndAddExtension( + string oid, + bool critical, + X509Certificate cert) + { + CopyAndAddExtension(new DerObjectIdentifier(oid), critical, cert); + } + + /** + * add a given extension field for the standard extensions tag (tag 3) + * copying the extension value from another certificate. + * @throws CertificateParsingException if the extension cannot be extracted. + */ + public void CopyAndAddExtension( + DerObjectIdentifier oid, + bool critical, + X509Certificate cert) + { + Asn1OctetString extValue = cert.GetExtensionValue(oid); + if (extValue == null) + throw new CertificateParsingException("extension " + oid + " not present"); + + try + { + Asn1Encodable value = X509ExtensionUtilities.FromExtensionValue(extValue); + + this.AddExtension(oid, critical, value); + } + catch (Exception e) + { + throw new CertificateParsingException(e.Message, e); + } + } + + /// + /// Generate a new using the provided . + /// + /// A signature factory with the necessary + /// algorithm details. + /// An . + public X509Certificate Generate(ISignatureFactory signatureFactory) + { + var sigAlgID = (AlgorithmIdentifier)signatureFactory.AlgorithmDetails; + + tbsGen.SetSignature(sigAlgID); + + if (!extGenerator.IsEmpty) + { + tbsGen.SetExtensions(extGenerator.Generate()); + } + + TbsCertificateStructure tbsCert = tbsGen.GenerateTbsCertificate(); + + IStreamCalculator streamCalculator = signatureFactory.CreateCalculator(); + using (Stream sigStream = streamCalculator.Stream) + { + tbsCert.EncodeTo(sigStream, Asn1Encodable.Der); + } + + var signature = streamCalculator.GetResult().Collect(); + + return new X509Certificate(new X509CertificateStructure(tbsCert, sigAlgID, new DerBitString(signature))); + } + + /// + /// Allows enumeration of the signature names supported by the generator. + /// + public IEnumerable SignatureAlgNames + { + get { return X509Utilities.GetAlgNames(); } + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V3CertificateGenerator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V3CertificateGenerator.cs.meta new file mode 100644 index 000000000..51287d941 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/X509V3CertificateGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6a3594cad87c9b4439139843a48e223c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension.meta new file mode 100644 index 000000000..66f951457 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 26902280df03e254eb103b0cc513363f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension/AuthorityKeyIdentifierStructure.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension/AuthorityKeyIdentifierStructure.cs new file mode 100644 index 000000000..27d80f787 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension/AuthorityKeyIdentifierStructure.cs @@ -0,0 +1,106 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Extension +{ + /// A high level authority key identifier. + public class AuthorityKeyIdentifierStructure + : AuthorityKeyIdentifier + { + /** + * Constructor which will take the byte[] returned from getExtensionValue() + * + * @param encodedValue a DER octet encoded string with the extension structure in it. + * @throws IOException on parsing errors. + */ + // TODO Add a functional constructor from byte[]? + public AuthorityKeyIdentifierStructure( + Asn1OctetString encodedValue) + : base((Asn1Sequence) X509ExtensionUtilities.FromExtensionValue(encodedValue)) + { + } + + private static Asn1Sequence FromCertificate( + X509Certificate certificate) + { + try + { + GeneralName genName = new GeneralName( + PrincipalUtilities.GetIssuerX509Principal(certificate)); + + if (certificate.Version == 3) + { + Asn1OctetString ext = certificate.GetExtensionValue(X509Extensions.SubjectKeyIdentifier); + + if (ext != null) + { + Asn1OctetString str = (Asn1OctetString) X509ExtensionUtilities.FromExtensionValue(ext); + + return (Asn1Sequence) new AuthorityKeyIdentifier( + str.GetOctets(), new GeneralNames(genName), certificate.SerialNumber).ToAsn1Object(); + } + } + + SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo( + certificate.GetPublicKey()); + + return (Asn1Sequence) new AuthorityKeyIdentifier( + info, new GeneralNames(genName), certificate.SerialNumber).ToAsn1Object(); + } + catch (Exception e) + { + throw new CertificateParsingException("Exception extracting certificate details", e); + } + } + + private static Asn1Sequence FromKey( + AsymmetricKeyParameter pubKey) + { + try + { + SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pubKey); + + return (Asn1Sequence) new AuthorityKeyIdentifier(info).ToAsn1Object(); + } + catch (Exception e) + { + throw new InvalidKeyException("can't process key: " + e); + } + } + + /** + * Create an AuthorityKeyIdentifier using the passed in certificate's public + * key, issuer and serial number. + * + * @param certificate the certificate providing the information. + * @throws CertificateParsingException if there is a problem processing the certificate + */ + public AuthorityKeyIdentifierStructure( + X509Certificate certificate) + : base(FromCertificate(certificate)) + { + } + + /** + * Create an AuthorityKeyIdentifier using just the hash of the + * public key. + * + * @param pubKey the key to generate the hash from. + * @throws InvalidKeyException if there is a problem using the key. + */ + public AuthorityKeyIdentifierStructure( + AsymmetricKeyParameter pubKey) + : base(FromKey(pubKey)) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension/AuthorityKeyIdentifierStructure.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension/AuthorityKeyIdentifierStructure.cs.meta new file mode 100644 index 000000000..f12de9447 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension/AuthorityKeyIdentifierStructure.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb0f4335ed25d2a4a9fd365799fdd64a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension/SubjectKeyIdentifierStructure.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension/SubjectKeyIdentifierStructure.cs new file mode 100644 index 000000000..cfd8d4c00 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension/SubjectKeyIdentifierStructure.cs @@ -0,0 +1,53 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Extension +{ + /** + * A high level subject key identifier. + */ + public class SubjectKeyIdentifierStructure + : SubjectKeyIdentifier + { + /** + * Constructor which will take the byte[] returned from getExtensionValue() + * + * @param encodedValue a DER octet encoded string with the extension structure in it. + * @throws IOException on parsing errors. + */ + public SubjectKeyIdentifierStructure( + Asn1OctetString encodedValue) + : base((Asn1OctetString) X509ExtensionUtilities.FromExtensionValue(encodedValue)) + { + } + + private static Asn1OctetString FromPublicKey( + AsymmetricKeyParameter pubKey) + { + try + { + SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pubKey); + + return (Asn1OctetString) new SubjectKeyIdentifier(info).ToAsn1Object(); + } + catch (Exception e) + { + throw new CertificateParsingException("Exception extracting certificate details: " + e.ToString()); + } + } + + public SubjectKeyIdentifierStructure( + AsymmetricKeyParameter pubKey) + : base(FromPublicKey(pubKey)) + { + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension/SubjectKeyIdentifierStructure.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension/SubjectKeyIdentifierStructure.cs.meta new file mode 100644 index 000000000..d21d9e24f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension/SubjectKeyIdentifierStructure.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 004dfdf815abe524093ddfebf9234b73 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension/X509ExtensionUtil.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension/X509ExtensionUtil.cs new file mode 100644 index 000000000..8d254e6b2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension/X509ExtensionUtil.cs @@ -0,0 +1,31 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Extension +{ + public class X509ExtensionUtilities + { + public static Asn1Object FromExtensionValue(Asn1OctetString extensionValue) + { + return Asn1Object.FromByteArray(extensionValue.GetOctets()); + } + + /// + /// Extract the value of the given extension, if it exists. + /// + /// The extensions object. + /// The object identifier to obtain. + /// Asn1Object + /// if the extension cannot be read. + public static Asn1Object FromExtensionValue(IX509Extension extensions, DerObjectIdentifier oid) + { + Asn1OctetString extensionValue = extensions.GetExtensionValue(oid); + return extensionValue == null ? null : FromExtensionValue(extensionValue); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension/X509ExtensionUtil.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension/X509ExtensionUtil.cs.meta new file mode 100644 index 000000000..0435a514f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/extension/X509ExtensionUtil.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c1e9b9d84df723247b8211204f278332 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store.meta new file mode 100644 index 000000000..4cb4dab62 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5b7983a5c52108d458439861101ff522 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509AttrCertStoreSelector.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509AttrCertStoreSelector.cs new file mode 100644 index 000000000..96983e69f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509AttrCertStoreSelector.cs @@ -0,0 +1,363 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Extension; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Store +{ + /** + * This class is an Selector like implementation to select + * attribute certificates from a given set of criteria. + * + * @see org.bouncycastle.x509.X509AttributeCertificate + * @see org.bouncycastle.x509.X509Store + */ + public class X509AttrCertStoreSelector + : ISelector + { + // TODO: name constraints??? + + private X509V2AttributeCertificate attributeCert; + private DateTime? attributeCertificateValid; + private AttributeCertificateHolder holder; + private AttributeCertificateIssuer issuer; + private BigInteger serialNumber; + private ISet targetNames = new HashSet(); + private ISet targetGroups = new HashSet(); + + public X509AttrCertStoreSelector() + { + } + + private X509AttrCertStoreSelector( + X509AttrCertStoreSelector o) + { + this.attributeCert = o.attributeCert; + this.attributeCertificateValid = o.attributeCertificateValid; + this.holder = o.holder; + this.issuer = o.issuer; + this.serialNumber = o.serialNumber; + this.targetGroups = new HashSet(o.targetGroups); + this.targetNames = new HashSet(o.targetNames); + } + + /// + /// Decides if the given attribute certificate should be selected. + /// + /// The attribute certificate to be checked. + /// true if the object matches this selector. + public bool Match(X509V2AttributeCertificate attrCert) + { + if (attrCert == null) + return false; + + if (this.attributeCert != null && !this.attributeCert.Equals(attrCert)) + return false; + + if (serialNumber != null && !attrCert.SerialNumber.Equals(serialNumber)) + return false; + + if (holder != null && !attrCert.Holder.Equals(holder)) + return false; + + if (issuer != null && !attrCert.Issuer.Equals(issuer)) + return false; + + if (attributeCertificateValid != null && !attrCert.IsValid(attributeCertificateValid.Value)) + return false; + + if (targetNames.Count > 0 || targetGroups.Count > 0) + { + Asn1OctetString targetInfoExt = attrCert.GetExtensionValue( + X509Extensions.TargetInformation); + + if (targetInfoExt != null) + { + TargetInformation targetinfo; + try + { + targetinfo = TargetInformation.GetInstance( + X509ExtensionUtilities.FromExtensionValue(targetInfoExt)); + } + catch (Exception) + { + return false; + } + + Targets[] targetss = targetinfo.GetTargetsObjects(); + + if (targetNames.Count > 0) + { + bool found = false; + + for (int i = 0; i < targetss.Length && !found; i++) + { + Target[] targets = targetss[i].GetTargets(); + + for (int j = 0; j < targets.Length; j++) + { + GeneralName targetName = targets[j].TargetName; + + if (targetName != null && targetNames.Contains(targetName)) + { + found = true; + break; + } + } + } + if (!found) + { + return false; + } + } + + if (targetGroups.Count > 0) + { + bool found = false; + + for (int i = 0; i < targetss.Length && !found; i++) + { + Target[] targets = targetss[i].GetTargets(); + + for (int j = 0; j < targets.Length; j++) + { + GeneralName targetGroup = targets[j].TargetGroup; + + if (targetGroup != null && targetGroups.Contains(targetGroup)) + { + found = true; + break; + } + } + } + + if (!found) + { + return false; + } + } + } + } + + return true; + } + + public object Clone() + { + return new X509AttrCertStoreSelector(this); + } + + /// The attribute certificate which must be matched. + /// If null is given, any will do. + public X509V2AttributeCertificate AttributeCert + { + get { return attributeCert; } + set { this.attributeCert = value; } + } + + /// The criteria for validity + /// If null is given any will do. + public DateTime? AttributeCertificateValid + { + get { return attributeCertificateValid; } + set { this.attributeCertificateValid = value; } + } + + /// The holder. + /// If null is given any will do. + public AttributeCertificateHolder Holder + { + get { return holder; } + set { this.holder = value; } + } + + /// The issuer. + /// If null is given any will do. + public AttributeCertificateIssuer Issuer + { + get { return issuer; } + set { this.issuer = value; } + } + + /// The serial number. + /// If null is given any will do. + public BigInteger SerialNumber + { + get { return serialNumber; } + set { this.serialNumber = value; } + } + + /** + * Adds a target name criterion for the attribute certificate to the target + * information extension criteria. The X509AttributeCertificate + * must contain at least one of the specified target names. + *

    + * Each attribute certificate may contain a target information extension + * limiting the servers where this attribute certificate can be used. If + * this extension is not present, the attribute certificate is not targeted + * and may be accepted by any server. + *

    + * + * @param name The name as a GeneralName (not null) + */ + public void AddTargetName( + GeneralName name) + { + targetNames.Add(name); + } + + /** + * Adds a target name criterion for the attribute certificate to the target + * information extension criteria. The X509AttributeCertificate + * must contain at least one of the specified target names. + *

    + * Each attribute certificate may contain a target information extension + * limiting the servers where this attribute certificate can be used. If + * this extension is not present, the attribute certificate is not targeted + * and may be accepted by any server. + *

    + * + * @param name a byte array containing the name in ASN.1 DER encoded form of a GeneralName + * @throws IOException if a parsing error occurs. + */ + public void AddTargetName(byte[] name) + { + AddTargetName(GeneralName.GetInstance(Asn1Object.FromByteArray(name))); + } + + /** + * Adds a collection with target names criteria. If null is + * given any will do. + *

    + * The collection consists of either GeneralName objects or byte[] arrays representing + * DER encoded GeneralName structures. + *

    + * + * @param names A collection of target names. + * @throws IOException if a parsing error occurs. + * @see #AddTargetName(byte[]) + * @see #AddTargetName(GeneralName) + */ + public void SetTargetNames(IEnumerable names) + { + targetNames = ExtractGeneralNames(names); + } + + /** + * Gets the target names. The collection consists of Lists + * made up of an Integer in the first entry and a DER encoded + * byte array or a String in the second entry. + *

    The returned collection is immutable.

    + * + * @return The collection of target names + * @see #setTargetNames(Collection) + */ + public IEnumerable GetTargetNames() + { + return CollectionUtilities.Proxy(targetNames); + } + + /** + * Adds a target group criterion for the attribute certificate to the target + * information extension criteria. The X509AttributeCertificate + * must contain at least one of the specified target groups. + *

    + * Each attribute certificate may contain a target information extension + * limiting the servers where this attribute certificate can be used. If + * this extension is not present, the attribute certificate is not targeted + * and may be accepted by any server. + *

    + * + * @param group The group as GeneralName form (not null) + */ + public void AddTargetGroup(GeneralName group) + { + targetGroups.Add(group); + } + + /** + * Adds a target group criterion for the attribute certificate to the target + * information extension criteria. The X509AttributeCertificate + * must contain at least one of the specified target groups. + *

    + * Each attribute certificate may contain a target information extension + * limiting the servers where this attribute certificate can be used. If + * this extension is not present, the attribute certificate is not targeted + * and may be accepted by any server. + *

    + * + * @param name a byte array containing the group in ASN.1 DER encoded form of a GeneralName + * @throws IOException if a parsing error occurs. + */ + public void AddTargetGroup(byte[] name) + { + AddTargetGroup(GeneralName.GetInstance(Asn1Object.FromByteArray(name))); + } + + /** + * Adds a collection with target groups criteria. If null is + * given any will do. + *

    + * The collection consists of GeneralName objects or byte[] + * representing DER encoded GeneralNames. + *

    + * + * @param names A collection of target groups. + * @throws IOException if a parsing error occurs. + * @see #AddTargetGroup(byte[]) + * @see #AddTargetGroup(GeneralName) + */ + public void SetTargetGroups(IEnumerable names) + { + targetGroups = ExtractGeneralNames(names); + } + + /** + * Gets the target groups. The collection consists of Lists + * made up of an Integer in the first entry and a DER encoded + * byte array or a String in the second entry. + *

    The returned collection is immutable.

    + * + * @return The collection of target groups. + * @see #setTargetGroups(Collection) + */ + public IEnumerable GetTargetGroups() + { + return CollectionUtilities.Proxy(targetGroups); + } + + private ISet ExtractGeneralNames(IEnumerable names) + { + var result = new HashSet(); + + if (names != null) + { + foreach (object o in names) + { + if (o is GeneralName gn) + { + result.Add(gn); + } + else if (o is byte[] bs) + { + result.Add(GeneralName.GetInstance(Asn1Object.FromByteArray(bs))); + } + else + { + throw new InvalidOperationException(); + } + } + } + + return result; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509AttrCertStoreSelector.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509AttrCertStoreSelector.cs.meta new file mode 100644 index 000000000..22ca02075 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509AttrCertStoreSelector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 05a1711d73cac0449a5f694102783ad4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CertPairStoreSelector.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CertPairStoreSelector.cs new file mode 100644 index 000000000..546a38128 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CertPairStoreSelector.cs @@ -0,0 +1,92 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Store +{ + /// + /// This class is an IX509Selector implementation to select + /// certificate pairs, which are e.g. used for cross certificates. The set of + /// criteria is given from two X509CertStoreSelector objects, + /// each of which, if present, must match the respective component of a pair. + /// + public class X509CertPairStoreSelector + : ISelector + { + private static X509CertStoreSelector CloneSelector( + X509CertStoreSelector s) + { + return s == null ? null : (X509CertStoreSelector) s.Clone(); + } + + private X509CertificatePair certPair; + private X509CertStoreSelector forwardSelector; + private X509CertStoreSelector reverseSelector; + + public X509CertPairStoreSelector() + { + } + + private X509CertPairStoreSelector( + X509CertPairStoreSelector o) + { + this.certPair = o.CertPair; + this.forwardSelector = o.ForwardSelector; + this.reverseSelector = o.ReverseSelector; + } + + /// The certificate pair which is used for testing on equality. + public X509CertificatePair CertPair + { + get { return certPair; } + set { this.certPair = value; } + } + + /// The certificate selector for the forward part. + public X509CertStoreSelector ForwardSelector + { + get { return CloneSelector(forwardSelector); } + set { this.forwardSelector = CloneSelector(value); } + } + + /// The certificate selector for the reverse part. + public X509CertStoreSelector ReverseSelector + { + get { return CloneSelector(reverseSelector); } + set { this.reverseSelector = CloneSelector(value); } + } + + /// + /// Decides if the given certificate pair should be selected. If + /// obj is not a X509CertificatePair, this method + /// returns false. + /// + /// The X509CertificatePair to be tested. + /// true if the object matches this selector. + public bool Match(X509CertificatePair pair) + { + if (pair == null) + return false; + + if (certPair != null && !certPair.Equals(pair)) + return false; + + if (forwardSelector != null && !forwardSelector.Match(pair.Forward)) + return false; + + if (reverseSelector != null && !reverseSelector.Match(pair.Reverse)) + return false; + + return true; + } + + public object Clone() + { + return new X509CertPairStoreSelector(this); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CertPairStoreSelector.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CertPairStoreSelector.cs.meta new file mode 100644 index 000000000..e6732f57b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CertPairStoreSelector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b519c06b0ed0da4e8bca4f63037fea6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CertStoreSelector.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CertStoreSelector.cs new file mode 100644 index 000000000..4379e8109 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CertStoreSelector.cs @@ -0,0 +1,333 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Extension; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Store +{ + public class X509CertStoreSelector + : ISelector + { + // TODO Missing criteria? + + private byte[] authorityKeyIdentifier; + private int basicConstraints = -1; + private X509Certificate certificate; + private DateTime? certificateValid; + private ISet extendedKeyUsage; + private bool ignoreX509NameOrdering; + private X509Name issuer; + private bool[] keyUsage; + private ISet policy; + private DateTime? privateKeyValid; + private BigInteger serialNumber; + private X509Name subject; + private byte[] subjectKeyIdentifier; + private SubjectPublicKeyInfo subjectPublicKey; + private DerObjectIdentifier subjectPublicKeyAlgID; + + public X509CertStoreSelector() + { + } + + public X509CertStoreSelector( + X509CertStoreSelector o) + { + this.authorityKeyIdentifier = o.AuthorityKeyIdentifier; + this.basicConstraints = o.BasicConstraints; + this.certificate = o.Certificate; + this.certificateValid = o.CertificateValid; + this.extendedKeyUsage = o.ExtendedKeyUsage; + this.ignoreX509NameOrdering = o.IgnoreX509NameOrdering; + this.issuer = o.Issuer; + this.keyUsage = o.KeyUsage; + this.policy = o.Policy; + this.privateKeyValid = o.PrivateKeyValid; + this.serialNumber = o.SerialNumber; + this.subject = o.Subject; + this.subjectKeyIdentifier = o.SubjectKeyIdentifier; + this.subjectPublicKey = o.SubjectPublicKey; + this.subjectPublicKeyAlgID = o.SubjectPublicKeyAlgID; + } + + public virtual object Clone() + { + return new X509CertStoreSelector(this); + } + + public byte[] AuthorityKeyIdentifier + { + get { return Arrays.Clone(authorityKeyIdentifier); } + set { authorityKeyIdentifier = Arrays.Clone(value); } + } + + public int BasicConstraints + { + get { return basicConstraints; } + set + { + if (value < -2) + throw new ArgumentException("value can't be less than -2", "value"); + + basicConstraints = value; + } + } + + public X509Certificate Certificate + { + get { return certificate; } + set { this.certificate = value; } + } + + public DateTime? CertificateValid + { + get { return certificateValid; } + set { certificateValid = value; } + } + + public ISet ExtendedKeyUsage + { + get { return CopySet(extendedKeyUsage); } + set { extendedKeyUsage = CopySet(value); } + } + + public bool IgnoreX509NameOrdering + { + get { return ignoreX509NameOrdering; } + set { this.ignoreX509NameOrdering = value; } + } + + public X509Name Issuer + { + get { return issuer; } + set { issuer = value; } + } + + public bool[] KeyUsage + { + get { return CopyBoolArray(keyUsage); } + set { keyUsage = CopyBoolArray(value); } + } + + /// + /// An ISet of DerObjectIdentifier objects. + /// + public ISet Policy + { + get { return CopySet(policy); } + set { policy = CopySet(value); } + } + + public DateTime? PrivateKeyValid + { + get { return privateKeyValid; } + set { privateKeyValid = value; } + } + + public BigInteger SerialNumber + { + get { return serialNumber; } + set { serialNumber = value; } + } + + public X509Name Subject + { + get { return subject; } + set { subject = value; } + } + + public byte[] SubjectKeyIdentifier + { + get { return Arrays.Clone(subjectKeyIdentifier); } + set { subjectKeyIdentifier = Arrays.Clone(value); } + } + + public SubjectPublicKeyInfo SubjectPublicKey + { + get { return subjectPublicKey; } + set { subjectPublicKey = value; } + } + + public DerObjectIdentifier SubjectPublicKeyAlgID + { + get { return subjectPublicKeyAlgID; } + set { subjectPublicKeyAlgID = value; } + } + + public virtual bool Match(X509Certificate c) + { + if (c == null) + return false; + + if (!MatchExtension(authorityKeyIdentifier, c, X509Extensions.AuthorityKeyIdentifier)) + return false; + + if (basicConstraints != -1) + { + int bc = c.GetBasicConstraints(); + + if (basicConstraints == -2) + { + if (bc != -1) + return false; + } + else + { + if (bc < basicConstraints) + return false; + } + } + + if (certificate != null && !certificate.Equals(c)) + return false; + + if (certificateValid != null && !c.IsValid(certificateValid.Value)) + return false; + + if (extendedKeyUsage != null) + { + var eku = c.GetExtendedKeyUsage(); + + // Note: if no extended key usage set, all key purposes are implicitly allowed + + if (eku != null) + { + foreach (DerObjectIdentifier oid in extendedKeyUsage) + { + if (!eku.Contains(oid)) + return false; + } + } + } + + if (issuer != null && !issuer.Equivalent(c.IssuerDN, !ignoreX509NameOrdering)) + return false; + + if (keyUsage != null) + { + bool[] ku = c.GetKeyUsage(); + + // Note: if no key usage set, all key purposes are implicitly allowed + + if (ku != null) + { + for (int i = 0; i < 9; ++i) + { + if (keyUsage[i] && !ku[i]) + return false; + } + } + } + + if (policy != null) + { + Asn1OctetString extVal = c.GetExtensionValue(X509Extensions.CertificatePolicies); + if (extVal == null) + return false; + + Asn1Sequence certPolicies = Asn1Sequence.GetInstance( + X509ExtensionUtilities.FromExtensionValue(extVal)); + + if (policy.Count < 1 && certPolicies.Count < 1) + return false; + + bool found = false; + foreach (PolicyInformation pi in certPolicies) + { + if (policy.Contains(pi.PolicyIdentifier)) + { + found = true; + break; + } + } + + if (!found) + return false; + } + + if (privateKeyValid != null) + { + Asn1OctetString extVal = c.GetExtensionValue(X509Extensions.PrivateKeyUsagePeriod); + if (extVal == null) + return false; + + PrivateKeyUsagePeriod pkup = PrivateKeyUsagePeriod.GetInstance( + X509ExtensionUtilities.FromExtensionValue(extVal)); + + DateTime dt = privateKeyValid.Value; + DateTime notAfter = pkup.NotAfter.ToDateTime(); + DateTime notBefore = pkup.NotBefore.ToDateTime(); + + if (dt.CompareTo(notAfter) > 0 || dt.CompareTo(notBefore) < 0) + return false; + } + + if (serialNumber != null && !serialNumber.Equals(c.SerialNumber)) + return false; + + if (subject != null && !subject.Equivalent(c.SubjectDN, !ignoreX509NameOrdering)) + return false; + + if (!MatchExtension(subjectKeyIdentifier, c, X509Extensions.SubjectKeyIdentifier)) + return false; + + if (subjectPublicKey != null && !subjectPublicKey.Equals(GetSubjectPublicKey(c))) + return false; + + if (subjectPublicKeyAlgID != null + && !subjectPublicKeyAlgID.Equals(GetSubjectPublicKey(c).AlgorithmID)) + return false; + + return true; + } + + internal static bool IssuersMatch( + X509Name a, + X509Name b) + { + return a == null ? b == null : a.Equivalent(b, true); + } + + private static bool[] CopyBoolArray( + bool[] b) + { + return b == null ? null : (bool[]) b.Clone(); + } + + private static ISet CopySet(ISet s) + { + return s == null ? null : new HashSet(s); + } + + private static SubjectPublicKeyInfo GetSubjectPublicKey( + X509Certificate c) + { + return SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(c.GetPublicKey()); + } + + private static bool MatchExtension( + byte[] b, + X509Certificate c, + DerObjectIdentifier oid) + { + if (b == null) + return true; + + Asn1OctetString extVal = c.GetExtensionValue(oid); + + if (extVal == null) + return false; + + return Arrays.AreEqual(b, extVal.GetOctets()); + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CertStoreSelector.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CertStoreSelector.cs.meta new file mode 100644 index 000000000..abdadd305 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CertStoreSelector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12b4022923dff834aa70b6c746f2e976 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CollectionStore.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CollectionStore.cs new file mode 100644 index 000000000..0454b349a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CollectionStore.cs @@ -0,0 +1,3 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CollectionStore.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CollectionStore.cs.meta new file mode 100644 index 000000000..340f0474e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CollectionStore.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c44ab57be880acf4083d7227de673914 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CollectionStoreParameters.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CollectionStoreParameters.cs new file mode 100644 index 000000000..0454b349a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CollectionStoreParameters.cs @@ -0,0 +1,3 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CollectionStoreParameters.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CollectionStoreParameters.cs.meta new file mode 100644 index 000000000..dba4f5973 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CollectionStoreParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c065ab63ea9da2a4dbca3a45cf5cf943 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CrlStoreSelector.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CrlStoreSelector.cs new file mode 100644 index 000000000..c3de47899 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CrlStoreSelector.cs @@ -0,0 +1,283 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) +#pragma warning disable +using System; +using System.Collections.Generic; + +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; +using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections; +using BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Extension; + +namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Store +{ + public class X509CrlStoreSelector + : ISelector + { + // TODO Missing criteria? + + private X509Certificate certificateChecking; + private DateTime? dateAndTime; + private IList issuers; + private BigInteger maxCrlNumber; + private BigInteger minCrlNumber; + + private X509V2AttributeCertificate attrCertChecking; + private bool completeCrlEnabled; + private bool deltaCrlIndicatorEnabled; + private byte[] issuingDistributionPoint; + private bool issuingDistributionPointEnabled; + private BigInteger maxBaseCrlNumber; + + public X509CrlStoreSelector() + { + } + + public X509CrlStoreSelector( + X509CrlStoreSelector o) + { + this.certificateChecking = o.CertificateChecking; + this.dateAndTime = o.DateAndTime; + this.issuers = o.Issuers; + this.maxCrlNumber = o.MaxCrlNumber; + this.minCrlNumber = o.MinCrlNumber; + + this.deltaCrlIndicatorEnabled = o.DeltaCrlIndicatorEnabled; + this.completeCrlEnabled = o.CompleteCrlEnabled; + this.maxBaseCrlNumber = o.MaxBaseCrlNumber; + this.attrCertChecking = o.AttrCertChecking; + this.issuingDistributionPointEnabled = o.IssuingDistributionPointEnabled; + this.issuingDistributionPoint = o.IssuingDistributionPoint; + } + + public virtual object Clone() + { + return new X509CrlStoreSelector(this); + } + + public X509Certificate CertificateChecking + { + get { return certificateChecking; } + set { certificateChecking = value; } + } + + public DateTime? DateAndTime + { + get { return dateAndTime; } + set { dateAndTime = value; } + } + + /// + /// An ICollection of X509Name objects + /// + public IList Issuers + { + get { return new List(issuers); } + set { issuers = new List(value); } + } + + public BigInteger MaxCrlNumber + { + get { return maxCrlNumber; } + set { maxCrlNumber = value; } + } + + public BigInteger MinCrlNumber + { + get { return minCrlNumber; } + set { minCrlNumber = value; } + } + + /** + * The attribute certificate being checked. This is not a criterion. + * Rather, it is optional information that may help a {@link X509Store} find + * CRLs that would be relevant when checking revocation for the specified + * attribute certificate. If null is specified, then no such + * optional information is provided. + * + * @param attrCert the IX509AttributeCertificate being checked (or + * null) + * @see #getAttrCertificateChecking() + */ + public X509V2AttributeCertificate AttrCertChecking + { + get { return attrCertChecking; } + set { this.attrCertChecking = value; } + } + + /** + * If true only complete CRLs are returned. Defaults to + * false. + * + * @return true if only complete CRLs are returned. + */ + public bool CompleteCrlEnabled + { + get { return completeCrlEnabled; } + set { this.completeCrlEnabled = value; } + } + + /** + * Returns if this selector must match CRLs with the delta CRL indicator + * extension set. Defaults to false. + * + * @return Returns true if only CRLs with the delta CRL + * indicator extension are selected. + */ + public bool DeltaCrlIndicatorEnabled + { + get { return deltaCrlIndicatorEnabled; } + set { this.deltaCrlIndicatorEnabled = value; } + } + + /** + * The issuing distribution point. + *

    + * The issuing distribution point extension is a CRL extension which + * identifies the scope and the distribution point of a CRL. The scope + * contains among others information about revocation reasons contained in + * the CRL. Delta CRLs and complete CRLs must have matching issuing + * distribution points.

    + *

    + * The byte array is cloned to protect against subsequent modifications.

    + *

    + * You must also enable or disable this criteria with + * {@link #setIssuingDistributionPointEnabled(bool)}.

    + * + * @param issuingDistributionPoint The issuing distribution point to set. + * This is the DER encoded OCTET STRING extension value. + * @see #getIssuingDistributionPoint() + */ + public byte[] IssuingDistributionPoint + { + get { return Arrays.Clone(issuingDistributionPoint); } + set { this.issuingDistributionPoint = Arrays.Clone(value); } + } + + /** + * Whether the issuing distribution point criteria should be applied. + * Defaults to false. + *

    + * You may also set the issuing distribution point criteria if not a missing + * issuing distribution point should be assumed.

    + * + * @return Returns if the issuing distribution point check is enabled. + */ + public bool IssuingDistributionPointEnabled + { + get { return issuingDistributionPointEnabled; } + set { this.issuingDistributionPointEnabled = value; } + } + + /** + * The maximum base CRL number. Defaults to null. + * + * @return Returns the maximum base CRL number. + * @see #setMaxBaseCRLNumber(BigInteger) + */ + public BigInteger MaxBaseCrlNumber + { + get { return maxBaseCrlNumber; } + set { this.maxBaseCrlNumber = value; } + } + + public virtual bool Match(X509Crl c) + { + if (c == null) + return false; + + if (dateAndTime != null) + { + DateTime dt = dateAndTime.Value; + DateTime tu = c.ThisUpdate; + DateTime? nu = c.NextUpdate; + + if (dt.CompareTo(tu) < 0 || nu == null || dt.CompareTo(nu.Value) >= 0) + return false; + } + + if (issuers != null) + { + X509Name i = c.IssuerDN; + + bool found = false; + + foreach (X509Name issuer in issuers) + { + if (issuer.Equivalent(i, true)) + { + found = true; + break; + } + } + + if (!found) + return false; + } + + if (maxCrlNumber != null || minCrlNumber != null) + { + Asn1OctetString extVal = c.GetExtensionValue(X509Extensions.CrlNumber); + if (extVal == null) + return false; + + BigInteger cn = CrlNumber.GetInstance( + X509ExtensionUtilities.FromExtensionValue(extVal)).PositiveValue; + + if (maxCrlNumber != null && cn.CompareTo(maxCrlNumber) > 0) + return false; + + if (minCrlNumber != null && cn.CompareTo(minCrlNumber) < 0) + return false; + } + + DerInteger dci = null; + try + { + Asn1OctetString bytes = c.GetExtensionValue(X509Extensions.DeltaCrlIndicator); + if (bytes != null) + { + dci = DerInteger.GetInstance(X509ExtensionUtilities.FromExtensionValue(bytes)); + } + } + catch (Exception) + { + return false; + } + + if (dci == null) + { + if (DeltaCrlIndicatorEnabled) + return false; + } + else + { + if (CompleteCrlEnabled) + return false; + + if (maxBaseCrlNumber != null && dci.PositiveValue.CompareTo(maxBaseCrlNumber) > 0) + return false; + } + + if (issuingDistributionPointEnabled) + { + Asn1OctetString idp = c.GetExtensionValue(X509Extensions.IssuingDistributionPoint); + if (issuingDistributionPoint == null) + { + if (idp != null) + return false; + } + else + { + if (!Arrays.AreEqual(idp.GetOctets(), issuingDistributionPoint)) + return false; + } + } + + return true; + } + } +} +#pragma warning restore +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CrlStoreSelector.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CrlStoreSelector.cs.meta new file mode 100644 index 000000000..2fda8c235 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509CrlStoreSelector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d8a2c8ce56d49414a89fd32d343d68c2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509StoreFactory.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509StoreFactory.cs new file mode 100644 index 000000000..0454b349a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509StoreFactory.cs @@ -0,0 +1,3 @@ +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509StoreFactory.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509StoreFactory.cs.meta new file mode 100644 index 000000000..ef6de67df --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SecureProtocol/x509/store/X509StoreFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2756db2be5ed60c4a9f25ba9608ae2d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/ServerSentEvents.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/ServerSentEvents.meta new file mode 100644 index 000000000..628329f90 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/ServerSentEvents.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c39b33f2c686550498ca5741c9e33690 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/ServerSentEvents/EventSource.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/ServerSentEvents/EventSource.cs new file mode 100644 index 000000000..8572db166 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/ServerSentEvents/EventSource.cs @@ -0,0 +1,907 @@ +#if !BESTHTTP_DISABLE_SERVERSENT_EVENTS + +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Text; +using BestHTTP.Core; +using BestHTTP.Extensions; +using BestHTTP.Logger; +using BestHTTP.PlatformSupport.Memory; + +#if UNITY_WEBGL && !UNITY_EDITOR + using System.Runtime.InteropServices; +#endif + +namespace BestHTTP.ServerSentEvents +{ + /// + /// Possible states of an EventSource object. + /// + public enum States + { + Initial, + Connecting, + Open, + Retrying, + Closing, + Closed + } + + public delegate void OnGeneralEventDelegate(EventSource eventSource); + public delegate void OnMessageDelegate(EventSource eventSource, BestHTTP.ServerSentEvents.Message message); + public delegate void OnErrorDelegate(EventSource eventSource, string error); + public delegate bool OnRetryDelegate(EventSource eventSource); + public delegate void OnEventDelegate(EventSource eventSource, BestHTTP.ServerSentEvents.Message message); + public delegate void OnStateChangedDelegate(EventSource eventSource, States oldState, States newState); + +#if !UNITY_WEBGL || UNITY_EDITOR + public delegate void OnCommentDelegate(EventSource eventSource, string comment); +#endif + +#if UNITY_WEBGL && !UNITY_EDITOR + + delegate void OnWebGLEventSourceOpenDelegate(uint id); + delegate void OnWebGLEventSourceMessageDelegate(uint id, string eventStr, string data, string eventId, int retry); + delegate void OnWebGLEventSourceErrorDelegate(uint id, string reason); +#endif + + /// + /// http://www.w3.org/TR/eventsource/ + /// + public class EventSource : IProtocol +#if !UNITY_WEBGL || UNITY_EDITOR + , IHeartbeat +#endif + + { +#region Public Properties + + /// + /// Uri of the remote endpoint. + /// + public Uri Uri { get; private set; } + + /// + /// Current state of the EventSource object. + /// + public States State + { + get + { + return _state; + } + private set + { + States oldState = _state; + _state = value; + + if (OnStateChanged != null) + { + try + { + OnStateChanged(this, oldState, _state); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("EventSource", "OnStateChanged", ex); + } + } + } + } + private States _state; + + /// + /// Time to wait to do a reconnect attempt. Default to 2 sec. The server can overwrite this setting. + /// + public TimeSpan ReconnectionTime { get; set; } + + /// + /// The last successfully received event's id. + /// + public string LastEventId { get; private set; } + + public HostConnectionKey ConnectionKey { get; private set; } + + public bool IsClosed { get { return this.State == States.Closed; } } + + public LoggingContext LoggingContext { get; private set; } + +#if !UNITY_WEBGL || UNITY_EDITOR + /// + /// The internal request object of the EventSource. + /// + public HTTPRequest InternalRequest { get; private set; } + +#else + public bool WithCredentials { get; set; } +#endif + +#endregion + +#region Public Events + + /// + /// Called when successfully connected to the server. + /// + public event OnGeneralEventDelegate OnOpen; + + /// + /// Called on every message received from the server. + /// + public event OnMessageDelegate OnMessage; + + /// + /// Called when an error occurs. + /// + public event OnErrorDelegate OnError; + +#if !UNITY_WEBGL || UNITY_EDITOR + /// + /// Called when the EventSource will try to do a retry attempt. If this function returns with false, it will cancel the attempt. + /// + public event OnRetryDelegate OnRetry; + + /// + /// This event is called for comments received from the server. + /// + public event OnCommentDelegate OnComment; +#endif + + /// + /// Called when the EventSource object closed. + /// + public event OnGeneralEventDelegate OnClosed; + + /// + /// Called every time when the State property changed. + /// + public event OnStateChangedDelegate OnStateChanged; + +#endregion + +#region Privates + + /// + /// A dictionary to store eventName => delegate mapping. + /// + private Dictionary EventTable; + +#if !UNITY_WEBGL || UNITY_EDITOR + /// + /// Number of retry attempts made. + /// + private byte RetryCount; + + /// + /// When we called the Retry function. We will delay the Open call from here. + /// + private DateTime RetryCalled; + + /// + /// Buffer for the read data. + /// + private byte[] LineBuffer; + + /// + /// Buffer position. + /// + private int LineBufferPos = 0; + + /// + /// The currently receiving and parsing message + /// + private BestHTTP.ServerSentEvents.Message CurrentMessage; + + /// + /// Completed messages that waiting to be dispatched + /// + //private List CompletedMessages = new List(); + private ConcurrentQueue CompletedMessages = new ConcurrentQueue(); + +#else + private static Dictionary EventSources = new Dictionary(); + private uint Id; +#endif + +#endregion + + public EventSource(Uri uri, int readBufferSizeOverride = 0) + { + this.Uri = uri; + this.LoggingContext = new LoggingContext(this); + + this.ReconnectionTime = TimeSpan.FromMilliseconds(2000); + + this.ConnectionKey = new HostConnectionKey(this.Uri.Host, HostDefinition.GetKeyFor(this.Uri +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + , HTTPManager.Proxy +#endif + )); + +#if !UNITY_WEBGL || UNITY_EDITOR + this.InternalRequest = new HTTPRequest(Uri, HTTPMethods.Get, true, true, OnRequestFinished); + + // Set headers + this.InternalRequest.SetHeader("Accept", "text/event-stream"); + this.InternalRequest.SetHeader("Cache-Control", "no-cache"); + this.InternalRequest.SetHeader("Accept-Encoding", "identity"); + + this.InternalRequest.StreamChunksImmediately = true; + this.InternalRequest.ReadBufferSizeOverride = readBufferSizeOverride; + this.InternalRequest.OnStreamingData = OnData; + + // Disable internal retry + this.InternalRequest.MaxRetries = 0; + + this.InternalRequest.Context.Add("EventSource", this.LoggingContext); +#else + if (!ES_IsSupported()) + throw new NotSupportedException("This browser isn't support the EventSource protocol!"); + + this.Id = ES_Create(this.Uri.ToString(), WithCredentials, OnOpenCallback, OnMessageCallback, OnErrorCallback); + + EventSources.Add(this.Id, this); +#endif + } + +#region Public Functions + + /// + /// Start to connect to the remote server. + /// + public void Open() + { + if (this.State != States.Initial && + this.State != States.Retrying && + this.State != States.Closed) + return; + + this.State = States.Connecting; + +#if !UNITY_WEBGL || UNITY_EDITOR + if (!string.IsNullOrEmpty(this.LastEventId)) + this.InternalRequest.SetHeader("Last-Event-ID", this.LastEventId); + + this.InternalRequest.Send(); +#endif + } + + /// + /// Start to close the connection. + /// + public void Close() + { + if (this.State == States.Closing || + this.State == States.Closed) + return; + + this.State = States.Closing; +#if !UNITY_WEBGL || UNITY_EDITOR + if (this.InternalRequest != null) + this.CancellationRequested(); + else + this.State = States.Closed; +#else + ES_Close(this.Id); + + SetClosed("Close"); + + EventSources.Remove(this.Id); + + ES_Release(this.Id); +#endif + } + + /// + /// With this function an event handler can be subscribed for an event name. + /// + public void On(string eventName, OnEventDelegate action) + { + if (EventTable == null) + EventTable = new Dictionary(); + + EventTable[eventName] = action; +#if UNITY_WEBGL && !UNITY_EDITOR + ES_AddEventHandler(this.Id, eventName); +#endif + } + + /// + /// With this function the event handler can be removed for the given event name. + /// + /// + public void Off(string eventName) + { + if (eventName == null || EventTable == null) + return; + + EventTable.Remove(eventName); + } + +#endregion + +#region Private Helper Functions + + private void CallOnError(string error, string msg) + { + if (OnError != null) + { + try + { + OnError(this, error); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("EventSource", msg + " - OnError", ex, this.LoggingContext); + } + } + } + +#if !UNITY_WEBGL || UNITY_EDITOR + private bool CallOnRetry() + { + if (OnRetry != null) + { + try + { + return OnRetry(this); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("EventSource", "CallOnRetry", ex, this.LoggingContext); + } + } + + return true; + } +#endif + + private void SetClosed(string msg) + { + this.State = States.Closed; + + if (OnClosed != null) + { + try + { + OnClosed(this); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("EventSource", msg + " - OnClosed", ex, this.LoggingContext); + } + } + } + +#if !UNITY_WEBGL || UNITY_EDITOR + private void Retry() + { + if (RetryCount > 0 || + !CallOnRetry()) + { + SetClosed("Retry"); + return; + } + + RetryCount++; + RetryCalled = DateTime.UtcNow; + + HTTPManager.Heartbeats.Subscribe(this); + + this.State = States.Retrying; + } +#endif + +#endregion + +#region HTTP Request Implementation +#if !UNITY_WEBGL || UNITY_EDITOR + private void OnRequestFinished(HTTPRequest req, HTTPResponse resp) + { + HTTPManager.Logger.Information("EventSource", string.Format("OnRequestFinished - State: {0}, StatusCode: {1}", this.State, resp != null ? resp.StatusCode : 0), req.Context); + + if (this.State == States.Closed) + return; + + if (this.State == States.Closing || req.IsCancellationRequested) + { + SetClosed("OnRequestFinished"); + + return; + } + + string reason = string.Empty; + + // In some cases retry is prohibited + bool canRetry = true; + + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + // HTTP 200 OK responses that have a Content-Type specifying an unsupported type, or that have no Content-Type at all, must cause the user agent to fail the connection. + if (resp.StatusCode == 200 && !resp.HasHeaderWithValue("content-type", "text/event-stream")) + { + reason = "No Content-Type header with value 'text/event-stream' present."; + canRetry = false; + } + + // HTTP 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable, and 504 Gateway Timeout responses, and any network error that prevents the connection + // from being established in the first place (e.g. DNS errors), must cause the user agent to asynchronously reestablish the connection. + // Any other HTTP response code not listed here must cause the user agent to fail the connection. + if (canRetry && + resp.StatusCode != 500 && + resp.StatusCode != 502 && + resp.StatusCode != 503 && + resp.StatusCode != 504) + { + canRetry = false; + + reason = string.Format("Request Finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}", + resp.StatusCode, + resp.Message, + resp.DataAsText); + } + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + reason = "Request Finished with Error! " + (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception"); + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + // If the state is Closing, then it's a normal behaviour, and we close the EventSource + reason = "OnRequestFinished - Aborted without request. EventSource's State: " + this.State; + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + reason = "Connection Timed Out!"; + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + reason = "Processing the request Timed Out!"; + break; + } + + // If we are not closing the EventSource, then we will try to reconnect. + if (this.State < States.Closing) + { + if (!string.IsNullOrEmpty(reason)) + CallOnError(reason, "OnRequestFinished"); + + if (canRetry) + Retry(); + else + SetClosed("OnRequestFinished"); + } + else + SetClosed("OnRequestFinished"); + } + + private bool OnData(HTTPRequest request, HTTPResponse response, byte[] dataFragment, int dataFragmentLength) + { + if (this.State == States.Connecting) + { + string contentType = response.GetFirstHeaderValue("content-type"); + bool IsUpgraded = response.StatusCode == 200 && + !string.IsNullOrEmpty(contentType) && + contentType.ToLower().StartsWith("text/event-stream"); + + if (IsUpgraded) + { + ProtocolEventHelper.AddProtocol(this); + + if (this.OnOpen != null) + { + try + { + this.OnOpen(this); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("EventSource", "OnOpen", ex, request.Context); + } + } + + this.RetryCount = 0; + this.State = States.Open; + } + else + { + this.State = States.Closing; + request.Abort(); + } + } + + if (this.State == States.Closing) + return true; + + if (FeedData(dataFragment, dataFragmentLength)) + ProtocolEventHelper.EnqueueProtocolEvent(new ProtocolEventInfo(this)); + + return true; + } + +#region Data Parsing + + public bool FeedData(byte[] buffer, int count) + { + if (count == -1) + count = buffer.Length; + + if (count == 0) + return false; + + if (LineBuffer == null) + LineBuffer = BufferPool.Get(1024, true); + + int newlineIdx; + int pos = 0; + bool hasMessageToSend = false; + + do + { + + newlineIdx = -1; + int skipCount = 1; // to skip CR and/or LF + + for (int i = pos; i < count && newlineIdx == -1; ++i) + { + // Lines must be separated by either a U+000D CARRIAGE RETURN U+000A LINE FEED (CRLF) character pair, a single U+000A LINE FEED (LF) character, or a single U+000D CARRIAGE RETURN (CR) character. + if (buffer[i] == HTTPResponse.CR) + { + if (i + 1 < count && buffer[i + 1] == HTTPResponse.LF) + skipCount = 2; + newlineIdx = i; + } + else if (buffer[i] == HTTPResponse.LF) + newlineIdx = i; + } + + int copyIndex = newlineIdx == -1 ? count : newlineIdx; + + if (LineBuffer.Length < LineBufferPos + (copyIndex - pos)) + { + int newSize = LineBufferPos + (copyIndex - pos); + BufferPool.Resize(ref LineBuffer, newSize, true, false); + } + + Array.Copy(buffer, pos, LineBuffer, LineBufferPos, copyIndex - pos); + + LineBufferPos += copyIndex - pos; + + if (newlineIdx == -1) + return hasMessageToSend; + + hasMessageToSend |= ParseLine(LineBuffer, LineBufferPos); + + LineBufferPos = 0; + //pos += newlineIdx + skipCount; + pos = newlineIdx + skipCount; + + } while (newlineIdx != -1 && pos < count); + + return hasMessageToSend; + } + + bool ParseLine(byte[] buffer, int count) + { + // If the line is empty (a blank line) => Dispatch the event + if (count == 0) + { + if (CurrentMessage != null) + { + CompletedMessages.Enqueue(CurrentMessage); + CurrentMessage = null; + + return true; + } + + return false; + } + + // If the line starts with a U+003A COLON character (:) => Ignore the line. + if (buffer[0] == 0x3A) + { + this.CompletedMessages.Enqueue(new Message() { IsComment = true, Data = Encoding.UTF8.GetString(buffer, 1, count - 1) }); + return true; + } + + //If the line contains a U+003A COLON character (:) + int colonIdx = -1; + for (int i = 0; i < count && colonIdx == -1; ++i) + if (buffer[i] == 0x3A) + colonIdx = i; + + string field; + string value; + + if (colonIdx != -1) + { + // Collect the characters on the line before the first U+003A COLON character (:), and let field be that string. + field = Encoding.UTF8.GetString(buffer, 0, colonIdx); + + //Collect the characters on the line after the first U+003A COLON character (:), and let value be that string. If value starts with a U+0020 SPACE character, remove it from value. + if (colonIdx + 1 < count && buffer[colonIdx + 1] == 0x20) + colonIdx++; + + colonIdx++; + + // discarded because it is not followed by a blank line + if (colonIdx >= count) + return false; + + value = Encoding.UTF8.GetString(buffer, colonIdx, count - colonIdx); + } + else + { + // Otherwise, the string is not empty but does not contain a U+003A COLON character (:) => + // Process the field using the whole line as the field name, and the empty string as the field value. + field = Encoding.UTF8.GetString(buffer, 0, count); + value = string.Empty; + } + + if (CurrentMessage == null) + CurrentMessage = new BestHTTP.ServerSentEvents.Message(); + + switch (field) + { + // If the field name is "id" => Set the last event ID buffer to the field value. + case "id": + CurrentMessage.Id = value; + break; + + // If the field name is "event" => Set the event type buffer to field value. + case "event": + CurrentMessage.Event = value; + break; + + // If the field name is "data" => Append the field value to the data buffer, then append a single U+000A LINE FEED (LF) character to the data buffer. + case "data": + // Append a new line if we already have some data. This way we can skip step 3.) in the EventSource's OnMessageReceived. + // We do only null check, because empty string can be valid payload + if (CurrentMessage.Data != null) + CurrentMessage.Data += Environment.NewLine; + + CurrentMessage.Data += value; + break; + + // If the field name is "retry" => If the field value consists of only ASCII digits, then interpret the field value as an integer in base ten, + // and set the event stream's reconnection time to that integer. Otherwise, ignore the field. + case "retry": + int result; + if (int.TryParse(value, out result)) + CurrentMessage.Retry = TimeSpan.FromMilliseconds(result); + break; + + // Otherwise: The field is ignored. + default: + break; + } + + return false; + } + +#endregion +#endif +#endregion + +#region EventStreamResponse Event Handlers + + private void OnMessageReceived(BestHTTP.ServerSentEvents.Message message) + { + if (this.State >= States.Closing) + return; + + // 1.) Set the last event ID string of the event source to value of the last event ID buffer. + // The buffer does not get reset, so the last event ID string of the event source remains set to this value until the next time it is set by the server. + // We check here only for null, because it can be a non-null but empty string. + if (message.Id != null) + this.LastEventId = message.Id; + + if (message.Retry.TotalMilliseconds > 0) + this.ReconnectionTime = message.Retry; + + // 2.) If the data buffer is an empty string, set the data buffer and the event type buffer to the empty string and abort these steps. + if (string.IsNullOrEmpty(message.Data)) + return; + + // 3.) If the data buffer's last character is a U+000A LINE FEED (LF) character, then remove the last character from the data buffer. + // This step can be ignored. We constructed the string to be able to skip this step. + + if (OnMessage != null && !message.IsComment) + { + try + { + OnMessage(this, message); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("EventSource", "OnMessageReceived - OnMessage", ex, this.LoggingContext); + } + } +#if !UNITY_WEBGL || UNITY_EDITOR + else if (message.IsComment && this.OnComment != null) + { + try + { + this.OnComment(this, message.Data); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("EventSource", "OnMessageReceived - OnComment", ex, this.LoggingContext); + } + } +#endif + + if (EventTable != null && !string.IsNullOrEmpty(message.Event)) + { + OnEventDelegate action; + if (EventTable.TryGetValue(message.Event, out action)) + { + if (action != null) + { + try + { + action(this, message); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("EventSource", "OnMessageReceived - action", ex, this.LoggingContext); + } + } + } + } + } + + public void HandleEvents() + { +#if !UNITY_WEBGL || UNITY_EDITOR + if (this.State == States.Open) + { + BestHTTP.ServerSentEvents.Message message; + while (this.CompletedMessages.TryDequeue(out message)) + OnMessageReceived(message); + } +#endif + } + + public void CancellationRequested() + { +#if !UNITY_WEBGL || UNITY_EDITOR + if (this.InternalRequest != null) + this.InternalRequest.Abort(); +#else + Close(); +#endif + } + + public void Dispose() + { + + } + +#endregion + +#region IHeartbeat Implementation +#if !UNITY_WEBGL || UNITY_EDITOR + + void IHeartbeat.OnHeartbeatUpdate(TimeSpan dif) + { + if (this.State != States.Retrying) + { + HTTPManager.Heartbeats.Unsubscribe(this); + + return; + } + + if (DateTime.UtcNow - RetryCalled >= ReconnectionTime) + { + Open(); + + if (this.State != States.Connecting) + SetClosed("OnHeartbeatUpdate"); + + HTTPManager.Heartbeats.Unsubscribe(this); + } + } +#endif + #endregion + + #region WebGL Static Callbacks +#if UNITY_WEBGL && !UNITY_EDITOR + + [AOT.MonoPInvokeCallback(typeof(OnWebGLEventSourceOpenDelegate))] + static void OnOpenCallback(uint id) + { + EventSource es; + if (EventSources.TryGetValue(id, out es)) + { + if (es.OnOpen != null) + { + try + { + es.OnOpen(es); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("EventSource", "OnOpen", ex, es.LoggingContext); + } + } + + es.State = States.Open; + } + else + HTTPManager.Logger.Warning("EventSource", "OnOpenCallback - No EventSource found for id: " + id.ToString()); + } + + [AOT.MonoPInvokeCallback(typeof(OnWebGLEventSourceMessageDelegate))] + static void OnMessageCallback(uint id, string eventStr, string data, string eventId, int retry) + { + EventSource es; + if (EventSources.TryGetValue(id, out es)) + { + var msg = new BestHTTP.ServerSentEvents.Message(); + msg.Id = eventId; + msg.Data = data; + msg.Event = eventStr; + msg.Retry = TimeSpan.FromSeconds(retry); + + es.OnMessageReceived(msg); + } + } + + [AOT.MonoPInvokeCallback(typeof(OnWebGLEventSourceErrorDelegate))] + static void OnErrorCallback(uint id, string reason) + { + EventSource es; + if (EventSources.TryGetValue(id, out es)) + { + es.CallOnError(reason, "OnErrorCallback"); + es.SetClosed("OnError"); + + EventSources.Remove(id); + } + + try + { + ES_Release(id); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("EventSource", "ES_Release", ex); + } + } + +#endif + #endregion + + #region WebGL Interface +#if UNITY_WEBGL && !UNITY_EDITOR + + [DllImport("__Internal")] + static extern bool ES_IsSupported(); + + [DllImport("__Internal")] + static extern uint ES_Create(string url, bool withCred, OnWebGLEventSourceOpenDelegate onOpen, OnWebGLEventSourceMessageDelegate onMessage, OnWebGLEventSourceErrorDelegate onError); + + [DllImport("__Internal")] + static extern void ES_AddEventHandler(uint id, string eventName); + + [DllImport("__Internal")] + static extern void ES_Close(uint id); + + [DllImport("__Internal")] + static extern void ES_Release(uint id); + +#endif + #endregion + + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/ServerSentEvents/EventSource.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/ServerSentEvents/EventSource.cs.meta new file mode 100644 index 000000000..6a2ba68b4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/ServerSentEvents/EventSource.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 49e4cc3acf485d644887e96e5a2d1219 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/ServerSentEvents/Message.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/ServerSentEvents/Message.cs new file mode 100644 index 000000000..17ea15750 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/ServerSentEvents/Message.cs @@ -0,0 +1,47 @@ +#if !BESTHTTP_DISABLE_SERVERSENT_EVENTS + +using System; + +namespace BestHTTP.ServerSentEvents +{ + [PlatformSupport.IL2CPP.Preserve] + public sealed class Message + { + /// + /// Event Id of the message. If it's null, then it's not present. + /// + [PlatformSupport.IL2CPP.Preserve] + public string Id { get; internal set; } + + /// + /// Name of the event, or an empty string. + /// + [PlatformSupport.IL2CPP.Preserve] + public string Event { get; internal set; } + + /// + /// The actual payload of the message. + /// + [PlatformSupport.IL2CPP.Preserve] + public string Data { get; internal set; } + + /// + /// A reconnection time, in milliseconds. This must initially be a user-agent-defined value, probably in the region of a few seconds. + /// + [PlatformSupport.IL2CPP.Preserve] + public TimeSpan Retry { get; internal set; } + + /// + /// If this is true, the Data property holds the comment sent by the server. + /// + [PlatformSupport.IL2CPP.Preserve] + internal bool IsComment { get; set; } + + public override string ToString() + { + return string.Format("\"{0}\": \"{1}\"", Event, Data); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/ServerSentEvents/Message.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/ServerSentEvents/Message.cs.meta new file mode 100644 index 000000000..05418380b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/ServerSentEvents/Message.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9a3820c17c331374a82799277eb9ede0 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR.meta new file mode 100644 index 000000000..121d89349 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e2d987f043f34ae48a80a57c82fa4193 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Authentication.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Authentication.meta new file mode 100644 index 000000000..38db03712 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Authentication.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 008d5591a2cd6704fb39796bd33ff71a +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Authentication/IAuthenticationProvider.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Authentication/IAuthenticationProvider.cs new file mode 100644 index 000000000..a632f0513 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Authentication/IAuthenticationProvider.cs @@ -0,0 +1,37 @@ +#if !BESTHTTP_DISABLE_SIGNALR + +namespace BestHTTP.SignalR.Authentication +{ + public delegate void OnAuthenticationSuccededDelegate(IAuthenticationProvider provider); + public delegate void OnAuthenticationFailedDelegate(IAuthenticationProvider provider, string reason); + + public interface IAuthenticationProvider + { + /// + /// The authentication must be run before any request made to build up the SignalR protocol + /// + bool IsPreAuthRequired { get; } + + /// + /// This event must be called when the pre-authentication succeded. When IsPreAuthRequired is false, no-one will subscribe to this event. + /// + event OnAuthenticationSuccededDelegate OnAuthenticationSucceded; + + /// + /// This event must be called when the pre-authentication failed. When IsPreAuthRequired is false, no-one will subscribe to this event. + /// + event OnAuthenticationFailedDelegate OnAuthenticationFailed; + + /// + /// This function called once, when the before the SignalR negotiation begins. If IsPreAuthRequired is false, then this step will be skipped. + /// + void StartAuthentication(); + + /// + /// This function will be called for every request before sending it. + /// + void PrepareRequest(HTTPRequest request, RequestTypes type); + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Authentication/IAuthenticationProvider.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Authentication/IAuthenticationProvider.cs.meta new file mode 100644 index 000000000..94bb950f2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Authentication/IAuthenticationProvider.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e95e3e74ee7feaf4b872a3d4d23dc0a6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Connection.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Connection.cs new file mode 100644 index 000000000..d278fbaba --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Connection.cs @@ -0,0 +1,1299 @@ +#if !BESTHTTP_DISABLE_SIGNALR + +using System; +using System.Text; +using System.Collections.Generic; + +using BestHTTP.Extensions; +using BestHTTP.SignalR.Hubs; +using BestHTTP.SignalR.Messages; +using BestHTTP.SignalR.Transports; +using BestHTTP.SignalR.JsonEncoders; +using BestHTTP.SignalR.Authentication; + +using PlatformSupport.Collections.ObjectModel; +using BestHTTP.Connections; +using BestHTTP.PlatformSupport.Text; + +#if !NETFX_CORE +using PlatformSupport.Collections.Specialized; +#else + using System.Collections.Specialized; +#endif + +namespace BestHTTP.SignalR +{ + public delegate void OnNonHubMessageDelegate(Connection connection, object data); + public delegate void OnConnectedDelegate(Connection connection); + public delegate void OnClosedDelegate(Connection connection); + public delegate void OnErrorDelegate(Connection connection, string error); + public delegate void OnStateChanged(Connection connection, ConnectionStates oldState, ConnectionStates newState); + public delegate void OnPrepareRequestDelegate(Connection connection, HTTPRequest req, RequestTypes type); + + /// + /// Interface to be able to hide internally used functions and properties. + /// + public interface IConnection + { + ProtocolVersions Protocol { get; } + NegotiationData NegotiationResult { get; } + IJsonEncoder JsonEncoder { get; set; } + + void OnMessage(IServerMessage msg); + void TransportStarted(); + void TransportReconnected(); + void TransportAborted(); + void Error(string reason); + Uri BuildUri(RequestTypes type); + Uri BuildUri(RequestTypes type, TransportBase transport); + HTTPRequest PrepareRequest(HTTPRequest req, RequestTypes type); + string ParseResponse(string responseStr); + } + + /// + /// Supported versions of the SignalR protocol. + /// + public enum ProtocolVersions : byte + { + Protocol_2_0, + Protocol_2_1, + Protocol_2_2 + } + + /// + /// The main SignalR class. This is the entry point to connect to a SignalR service. + /// + public sealed class Connection : IHeartbeat, IConnection + { + #region Public Properties + + /// + /// The default Json encode/decoder that will be used to encode/decode the event arguments. + /// + public static IJsonEncoder DefaultEncoder = +#if BESTHTTP_SIGNALR_WITH_JSONDOTNET + new JSonDotnetEncoder(); +#else + new DefaultJsonEncoder(); +#endif + + /// + /// The base url endpoint where the SignalR service can be found. + /// + public Uri Uri { get; private set; } + + /// + /// Current State of the SignalR connection. + /// + public ConnectionStates State + { + get { return _state; } + private set + { + ConnectionStates old = _state; + _state = value; + + if (OnStateChanged != null) + OnStateChanged(this, old, _state); + } + } + private ConnectionStates _state; + + /// + /// Result of the negotiation request from the server. + /// + public NegotiationData NegotiationResult { get; private set; } + + /// + /// The hubs that the client is connected to. + /// + public Hub[] Hubs { get; private set; } + + /// + /// The transport that is used to send and receive messages. + /// + public TransportBase Transport { get; private set; } + + /// + /// Current client protocol in use. + /// + public ProtocolVersions Protocol { get; private set; } + + /// + /// Additional query parameters that will be passed for the handshake uri. If the value is null, or an empty string it will be not appended to the query only the key. + /// The keys and values must be escaped properly, as the plugin will not escape these. + /// + public ObservableDictionary AdditionalQueryParams + { + get { return additionalQueryParams; } + set + { + // Unsubscribe from previous dictionary's events + if (additionalQueryParams != null) + additionalQueryParams.CollectionChanged -= AdditionalQueryParams_CollectionChanged; + + additionalQueryParams = value; + + // Clear out the cached value + BuiltQueryParams = null; + + // Subscribe to the collection changed event + if (value != null) + value.CollectionChanged += AdditionalQueryParams_CollectionChanged; + } + } + private ObservableDictionary additionalQueryParams; + + /// + /// If it's false, the parameters in the AdditionalQueryParams will be passed for all http requests. Its default value is true. + /// + public bool QueryParamsOnlyForHandshake { get; set; } + + /// + /// The Json encoder that will be used by the connection and the transport. + /// + public IJsonEncoder JsonEncoder { get; set; } + + /// + /// An IAuthenticationProvider implementation that will be used to authenticate the connection. + /// + public IAuthenticationProvider AuthenticationProvider { get; set; } + + /// + /// How much time we have to wait between two pings. + /// + public TimeSpan PingInterval { get; set; } + + /// + /// Wait time before the plugin should do a reconnect attempt. Its default value is 5 seconds. + /// + public TimeSpan ReconnectDelay { get; set; } + + #endregion + + #region Public Events + + /// + /// Called when the protocol is open for communication. + /// + public event OnConnectedDelegate OnConnected; + + /// + /// Called when the connection is closed, and no further messages are sent or received. + /// + public event OnClosedDelegate OnClosed; + + /// + /// Called when an error occures. If the connection is already Started, it will try to do a reconnect, otherwise it will close the connection. + /// + public event OnErrorDelegate OnError; + + /// + /// This event called when a reconnection attempt are started. If fails to reconnect an OnError and OnClosed events are called. + /// + public event OnConnectedDelegate OnReconnecting; + + /// + /// This event called when the reconnection attempt succeded. + /// + public event OnConnectedDelegate OnReconnected; + + /// + /// Called every time when the connection's state changes. + /// + public event OnStateChanged OnStateChanged; + + /// + /// It's called when a non-Hub message received. The data can be anything from primitive types to array of complex objects. + /// + public event OnNonHubMessageDelegate OnNonHubMessage; + + /// + /// With this delegate all requests can be further customized. + /// + public OnPrepareRequestDelegate RequestPreparator { get; set; } + + #endregion + + #region Indexers + + /// + /// Indexer property the access hubs by index. + /// + public Hub this[int idx] { get { return Hubs[idx] as Hub; } } + + /// + /// Indexer property the access hubs by name. + /// + public Hub this[string hubName] + { + get + { + for (int i = 0; i < Hubs.Length; ++i) + { + Hub hub = Hubs[i] as Hub; + if (hub.Name.Equals(hubName, StringComparison.OrdinalIgnoreCase)) + return hub; + } + + return null; + } + } + + #endregion + + #region Internals + + /// + /// Unique ID for all message sent by the client. + /// + internal long ClientMessageCounter; + + #endregion + + #region Privates + + /// + /// Supported client protocol versions. + /// + private readonly string[] ClientProtocols = new string[] { "1.3", "1.4", "1.5" }; + + /// + /// A timestamp that will be sent with all request for easier debugging. + /// + private UInt32 Timestamp { get { return (UInt32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).Ticks; } } + + /// + /// Request counter sent with all request for easier debugging. + /// + private long RequestCounter; + + /// + /// Instance of the last received message. Used for its MessageId. + /// + private MultiMessage LastReceivedMessage; + + /// + /// The GroupsToken sent by the server that stores what groups we are joined to. + /// We will send it with the reconnect request. + /// + private string GroupsToken; + + /// + /// Received messages before the Start request finishes. + /// + private List BufferedMessages; + + /// + /// When the last message received from the server. Used for reconnecting. + /// + private DateTime LastMessageReceivedAt; + + /// + /// When we started to reconnect. When too much time passes without a successful reconnect, we will close the connection. + /// + private DateTime ReconnectStartedAt; + + private DateTime ReconnectDelayStartedAt; + + /// + /// True, if the reconnect process started. + /// + private bool ReconnectStarted; + + /// + /// When the last ping request sent out. + /// + private DateTime LastPingSentAt; + + /// + /// Reference to the ping request. + /// + private HTTPRequest PingRequest; + + /// + /// When the transport started the connection process + /// + private DateTime? TransportConnectionStartedAt; + + /// + /// Cached StringBuilder instance used in BuildUri + /// + private StringBuilder queryBuilder = new StringBuilder(); + + /// + /// Builds and returns with the connection data made from the hub names. + /// + private string ConnectionData + { + get + { + if (!string.IsNullOrEmpty(BuiltConnectionData)) + return BuiltConnectionData; + + StringBuilder sb = new StringBuilder("[", Hubs.Length * 4); + + if (Hubs != null) + for (int i = 0; i < Hubs.Length; ++i) + { + sb.Append(@"{""Name"":"""); + sb.Append(Hubs[i].Name); + sb.Append(@"""}"); + + if (i < Hubs.Length - 1) + sb.Append(","); + } + + sb.Append("]"); + + return BuiltConnectionData = Uri.EscapeUriString(sb.ToString()); + } + } + + /// + /// The cached value of the result of the ConnectionData property call. + /// + private string BuiltConnectionData; + + /// + /// Builds the keys and values from the AdditionalQueryParams to an key=value form. If AdditionalQueryParams is null or empty, it will return an empty string. + /// + private string QueryParams + { + get + { + if (AdditionalQueryParams == null || AdditionalQueryParams.Count == 0) + return string.Empty; + + if (!string.IsNullOrEmpty(BuiltQueryParams)) + return BuiltQueryParams; + + StringBuilder sb = StringBuilderPool.Get(AdditionalQueryParams.Count * 4); //new StringBuilder(AdditionalQueryParams.Count * 4); + + foreach (var kvp in AdditionalQueryParams) + { + sb.Append("&"); + sb.Append(kvp.Key); + + if (!string.IsNullOrEmpty(kvp.Value)) + { + sb.Append("="); + sb.Append(Uri.EscapeDataString(kvp.Value)); + } + } + + return BuiltQueryParams = StringBuilderPool.ReleaseAndGrab(sb); + } + } + + /// + /// The cached value of the result of the QueryParams property call. + /// + private string BuiltQueryParams; + + private SupportedProtocols NextProtocolToTry; + + #endregion + + #region Constructors + + public Connection(Uri uri, params string[] hubNames) + : this(uri) + { + if (hubNames != null && hubNames.Length > 0) + { + this.Hubs = new Hub[hubNames.Length]; + + for (int i = 0; i < hubNames.Length; ++i) + this.Hubs[i] = new Hub(hubNames[i], this); + } + } + + public Connection(Uri uri, params Hub[] hubs) + :this(uri) + { + this.Hubs = hubs; + if (hubs != null) + for (int i = 0; i < hubs.Length; ++i) + (hubs[i] as IHub).Connection = this; + } + + public Connection(Uri uri) + { + this.State = ConnectionStates.Initial; + this.Uri = uri; + + this.JsonEncoder = Connection.DefaultEncoder; + this.PingInterval = TimeSpan.FromMinutes(5); + + // Expected protocol + this.Protocol = ProtocolVersions.Protocol_2_2; + + this.ReconnectDelay = TimeSpan.FromSeconds(5); + } + + #endregion + + #region Starting the protocol + + /// + /// This function will start to authenticate if required, and the SignalR protocol negotiation. + /// + public void Open() + { + if (State != ConnectionStates.Initial && State != ConnectionStates.Closed) + return; + + if (AuthenticationProvider != null && AuthenticationProvider.IsPreAuthRequired) + { + this.State = ConnectionStates.Authenticating; + + AuthenticationProvider.OnAuthenticationSucceded += OnAuthenticationSucceded; + AuthenticationProvider.OnAuthenticationFailed += OnAuthenticationFailed; + + // Start the authentication process + AuthenticationProvider.StartAuthentication(); + } + else + StartImpl(); + } + + /// + /// Called when the authentication succeeded. + /// + /// + private void OnAuthenticationSucceded(IAuthenticationProvider provider) + { + provider.OnAuthenticationSucceded -= OnAuthenticationSucceded; + provider.OnAuthenticationFailed -= OnAuthenticationFailed; + + StartImpl(); + } + + /// + /// Called when the authentication failed. + /// + private void OnAuthenticationFailed(IAuthenticationProvider provider, string reason) + { + provider.OnAuthenticationSucceded -= OnAuthenticationSucceded; + provider.OnAuthenticationFailed -= OnAuthenticationFailed; + + (this as IConnection).Error(reason); + } + + /// + /// It's the real Start implementation. It will start the negotiation + /// + private void StartImpl() + { + this.State = ConnectionStates.Negotiating; + + NegotiationResult = new NegotiationData(this); + NegotiationResult.OnReceived = OnNegotiationDataReceived; + NegotiationResult.OnError = OnNegotiationError; + NegotiationResult.Start(); + } + + #region Negotiation Event Handlers + + /// + /// Protocol negotiation finished successfully. + /// + private void OnNegotiationDataReceived(NegotiationData data) + { + // Find out what supported protocol the server speak + int protocolIdx = -1; + for (int i = 0; i < ClientProtocols.Length && protocolIdx == -1; ++i) + if (data.ProtocolVersion == ClientProtocols[i]) + protocolIdx = i; + + // No supported protocol found? Try using the latest one. + if (protocolIdx == -1) + { + protocolIdx = (byte)ProtocolVersions.Protocol_2_2; + HTTPManager.Logger.Warning("SignalR Connection", "Unknown protocol version: " + data.ProtocolVersion); + } + + this.Protocol = (ProtocolVersions)protocolIdx; + + #if !BESTHTTP_DISABLE_WEBSOCKET + if (data.TryWebSockets) + { + Transport = new WebSocketTransport(this); + + #if !BESTHTTP_DISABLE_SERVERSENT_EVENTS + NextProtocolToTry = SupportedProtocols.ServerSentEvents; + #else + NextProtocolToTry = SupportedProtocols.HTTP; + #endif + } + else + #endif + { + #if !BESTHTTP_DISABLE_SERVERSENT_EVENTS + Transport = new ServerSentEventsTransport(this); + + // Long-Poll + NextProtocolToTry = SupportedProtocols.HTTP; + #else + + Transport = new PollingTransport(this); + + NextProtocolToTry = SupportedProtocols.Unknown; + #endif + } + + this.State = ConnectionStates.Connecting; + TransportConnectionStartedAt = DateTime.UtcNow; + + Transport.Connect(); + } + + /// + /// Protocol negotiation failed. + /// + private void OnNegotiationError(NegotiationData data, string error) + { + (this as IConnection).Error(error); + } + + #endregion + + #endregion + + #region Public Interface + + /// + /// Closes the connection and shuts down the transport. + /// + public void Close() + { + if (this.State == ConnectionStates.Closed) + return; + + this.State = ConnectionStates.Closed; + + //ReconnectStartedAt = null; + ReconnectStarted = false; + + TransportConnectionStartedAt = null; + + if (Transport != null) + { + Transport.Abort(); + Transport = null; + } + + NegotiationResult = null; + + HTTPManager.Heartbeats.Unsubscribe(this); + + LastReceivedMessage = null; + + if (Hubs != null) + for (int i = 0; i < Hubs.Length; ++i) + (Hubs[i] as IHub).Close(); + + if (BufferedMessages != null) + { + BufferedMessages.Clear(); + BufferedMessages = null; + } + + if (OnClosed != null) + { + try + { + OnClosed(this); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("SignalR Connection", "OnClosed", ex); + } + } + } + + /// + /// Initiates a reconnect to the SignalR server. + /// + public void Reconnect() + { + // Return if reconnect process already started. + if (ReconnectStarted) + return; + ReconnectStarted = true; + + // Set ReconnectStartedAt only when the previous State is not Reconnecting, + // so we keep the first date&time when we started reconnecting + if (this.State != ConnectionStates.Reconnecting) + ReconnectStartedAt = DateTime.UtcNow; + + this.State = ConnectionStates.Reconnecting; + + HTTPManager.Logger.Warning("SignalR Connection", "Reconnecting"); + + Transport.Reconnect(); + + if (PingRequest != null) + PingRequest.Abort(); + + if (OnReconnecting != null) + { + try + { + OnReconnecting(this); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("SignalR Connection", "OnReconnecting", ex); + } + } + } + + + /// + /// Will encode the argument to a Json string using the Connection's JsonEncoder, then will send it to the server. + /// + /// True if the plugin was able to send out the message + public bool Send(object arg) + { + if (arg == null) + throw new ArgumentNullException("arg"); + + if (this.State != ConnectionStates.Connected) + return false; + + string json = JsonEncoder.Encode(arg); + + if (string.IsNullOrEmpty(json)) + HTTPManager.Logger.Error("SignalR Connection", "Failed to JSon encode the given argument. Please try to use an advanced JSon encoder(check the documentation how you can do it)."); + else + Transport.Send(json); + + return true; + } + + /// + /// Sends the given json string to the server. + /// + /// True if the plugin was able to send out the message + public bool SendJson(string json) + { + if (json == null) + throw new ArgumentNullException("json"); + + if (this.State != ConnectionStates.Connected) + return false; + + Transport.Send(json); + + return true; + } + + #endregion + + #region IManager Functions + + /// + /// Called when we receive a message from the server + /// + void IConnection.OnMessage(IServerMessage msg) + { + if (this.State == ConnectionStates.Closed) + return; + + // Store messages that we receive while we are connecting + if (this.State == ConnectionStates.Connecting) + { + if (BufferedMessages == null) + BufferedMessages = new List(); + + BufferedMessages.Add(msg); + + return; + } + + LastMessageReceivedAt = DateTime.UtcNow; + + switch(msg.Type) + { + case MessageTypes.Multiple: + LastReceivedMessage = msg as MultiMessage; + + // Not received in the reconnect process, so we can't rely on it + if (LastReceivedMessage.IsInitialization) + HTTPManager.Logger.Information("SignalR Connection", "OnMessage - Init"); + + if (LastReceivedMessage.GroupsToken != null) + GroupsToken = LastReceivedMessage.GroupsToken; + + if (LastReceivedMessage.ShouldReconnect) + { + HTTPManager.Logger.Information("SignalR Connection", "OnMessage - Should Reconnect"); + + Reconnect(); + + // Should we return here not processing the messages that may come with it? + //return; + } + + if (LastReceivedMessage.Data != null) + for (int i = 0; i < LastReceivedMessage.Data.Count; ++i) + (this as IConnection).OnMessage(LastReceivedMessage.Data[i]); + + break; + + case MessageTypes.MethodCall: + MethodCallMessage methodCall = msg as MethodCallMessage; + + Hub hub = this[methodCall.Hub]; + + if (hub != null) + (hub as IHub).OnMethod(methodCall); + else + HTTPManager.Logger.Warning("SignalR Connection", string.Format("Hub \"{0}\" not found!", methodCall.Hub)); + + break; + + case MessageTypes.Result: + case MessageTypes.Failure: + case MessageTypes.Progress: + UInt64 id = (msg as IHubMessage).InvocationId; + hub = FindHub(id); + if (hub != null) + (hub as IHub).OnMessage(msg); + else + HTTPManager.Logger.Warning("SignalR Connection", string.Format("No Hub found for Progress message! Id: {0}", id.ToString())); + break; + + case MessageTypes.Data: + if (OnNonHubMessage != null) + OnNonHubMessage(this, (msg as DataMessage).Data); + break; + + case MessageTypes.KeepAlive: + break; + + default: + HTTPManager.Logger.Warning("SignalR Connection", "Unknown message type received: " + msg.Type.ToString()); + break; + } + } + + /// + /// Called from the transport implementations when the Start request finishes successfully. + /// + void IConnection.TransportStarted() + { + if (this.State != ConnectionStates.Connecting) + return; + + InitOnStart(); + + if (OnConnected != null) + { + try + { + OnConnected(this); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("SignalR Connection", "OnOpened", ex); + } + } + + // Deliver messages that we received before the /start request returned. + // This must be after the OnStarted call, to let the clients to subrscribe to these events. + if (BufferedMessages != null) + { + for (int i = 0; i < BufferedMessages.Count; ++i) + (this as IConnection).OnMessage(BufferedMessages[i]); + + BufferedMessages.Clear(); + BufferedMessages = null; + } + } + + /// + /// Called when the transport sucessfully reconnected to the server. + /// + void IConnection.TransportReconnected() + { + if (this.State != ConnectionStates.Reconnecting) + return; + + HTTPManager.Logger.Information("SignalR Connection", "Transport Reconnected"); + + InitOnStart(); + + if (OnReconnected != null) + { + try + { + OnReconnected(this); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("SignalR Connection", "OnReconnected", ex); + } + } + } + + /// + /// Called from the transport implementation when the Abort request finishes successfully. + /// + void IConnection.TransportAborted() + { + Close(); + } + + /// + /// Called when an error occures. If the connection is in the Connected state, it will start the reconnect process, otherwise it will close the connection. + /// + void IConnection.Error(string reason) + { + // Not interested about errors we received after we already closed + if (this.State == ConnectionStates.Closed) + return; + + // If we are just quitting, don't try to reconnect. + if (HTTPManager.IsQuitting) + { + Close(); + return; + } + + HTTPManager.Logger.Error("SignalR Connection", reason); + + ReconnectStarted = false; + + if (OnError != null) + OnError(this, reason); + + if (this.State == ConnectionStates.Connected || this.State == ConnectionStates.Reconnecting) + { + this.ReconnectDelayStartedAt = DateTime.UtcNow; + if (this.State != ConnectionStates.Reconnecting) + this.ReconnectStartedAt = DateTime.UtcNow; + + //Reconnect(); + } + else + { + // Fall back if possible + if (this.State != ConnectionStates.Connecting || !TryFallbackTransport()) + Close(); + } + } + + /// + /// Creates an Uri instance for the given request type. + /// + Uri IConnection.BuildUri(RequestTypes type) + { + return (this as IConnection).BuildUri(type, null); + } + + /// + /// Creates an Uri instance from the given parameters. + /// + Uri IConnection.BuildUri(RequestTypes type, TransportBase transport) + { + // make sure that the queryBuilder is reseted + queryBuilder.Length = 0; + + UriBuilder uriBuilder = new UriBuilder(Uri); + + if (!uriBuilder.Path.EndsWith("/")) + uriBuilder.Path += "/"; + + long newValue, originalValue; + do + { + originalValue = this.RequestCounter; + newValue = originalValue % long.MaxValue; + } while (System.Threading.Interlocked.CompareExchange(ref this.RequestCounter, newValue, originalValue) != originalValue); + + switch (type) + { + case RequestTypes.Negotiate: + uriBuilder.Path += "negotiate"; + goto default; + + case RequestTypes.Connect: +#if !BESTHTTP_DISABLE_WEBSOCKET + if (transport != null && transport.Type == TransportTypes.WebSocket) + uriBuilder.Scheme = HTTPProtocolFactory.IsSecureProtocol(Uri) ? "wss" : "ws"; +#endif + + uriBuilder.Path += "connect"; + goto default; + + case RequestTypes.Start: + uriBuilder.Path += "start"; + goto default; + + case RequestTypes.Poll: + uriBuilder.Path += "poll"; + + if (this.LastReceivedMessage != null) + { + queryBuilder.Append("messageId="); + queryBuilder.Append(this.LastReceivedMessage.MessageId); + } + + if (!string.IsNullOrEmpty(GroupsToken)) + { + if (queryBuilder.Length > 0) + queryBuilder.Append("&"); + + queryBuilder.Append("groupsToken="); + queryBuilder.Append(GroupsToken); + } + + goto default; + + case RequestTypes.Send: + uriBuilder.Path += "send"; + goto default; + + case RequestTypes.Reconnect: +#if !BESTHTTP_DISABLE_WEBSOCKET + if (transport != null && transport.Type == TransportTypes.WebSocket) + uriBuilder.Scheme = HTTPProtocolFactory.IsSecureProtocol(Uri) ? "wss" : "ws"; +#endif + + uriBuilder.Path += "reconnect"; + + if (this.LastReceivedMessage != null) + { + queryBuilder.Append("messageId="); + queryBuilder.Append(this.LastReceivedMessage.MessageId); + } + + if (!string.IsNullOrEmpty(GroupsToken)) + { + if (queryBuilder.Length > 0) + queryBuilder.Append("&"); + + queryBuilder.Append("groupsToken="); + queryBuilder.Append(GroupsToken); + } + + goto default; + + case RequestTypes.Abort: + uriBuilder.Path += "abort"; + goto default; + + case RequestTypes.Ping: + uriBuilder.Path += "ping"; + + queryBuilder.Append("&tid="); + queryBuilder.Append(System.Threading.Interlocked.Increment(ref this.RequestCounter).ToString()); + + queryBuilder.Append("&_="); + queryBuilder.Append(Timestamp.ToString()); + + break; + + default: + if (queryBuilder.Length > 0) + queryBuilder.Append("&"); + + queryBuilder.Append("tid="); + queryBuilder.Append(System.Threading.Interlocked.Increment(ref this.RequestCounter).ToString()); + + queryBuilder.Append("&_="); + queryBuilder.Append(Timestamp.ToString()); + + if (transport != null) + { + queryBuilder.Append("&transport="); + queryBuilder.Append(transport.Name); + } + + queryBuilder.Append("&clientProtocol="); + queryBuilder.Append(ClientProtocols[(byte)Protocol]); + + if (NegotiationResult != null && !string.IsNullOrEmpty(this.NegotiationResult.ConnectionToken)) + { + queryBuilder.Append("&connectionToken="); + queryBuilder.Append(this.NegotiationResult.ConnectionToken); + } + + if (this.Hubs != null && this.Hubs.Length > 0) + { + queryBuilder.Append("&connectionData="); + queryBuilder.Append(this.ConnectionData); + } + + break; + } + + // Query params are added to all uri + if (this.AdditionalQueryParams != null && this.AdditionalQueryParams.Count > 0) + queryBuilder.Append(this.QueryParams); + + uriBuilder.Query = queryBuilder.ToString(); + + // reset the string builder + queryBuilder.Length = 0; + + return uriBuilder.Uri; + } + + /// + /// It's called on every request before sending it out to the server. + /// + HTTPRequest IConnection.PrepareRequest(HTTPRequest req, RequestTypes type) + { + if (req != null && AuthenticationProvider != null) + AuthenticationProvider.PrepareRequest(req, type); + + if (RequestPreparator != null) + RequestPreparator(this, req, type); + + return req; + } + + /// + /// Will parse a "{ 'Response': 'xyz' }" object and returns with 'xyz'. If it fails to parse, or getting the 'Response' key, it will call the Error function. + /// + string IConnection.ParseResponse(string responseStr) + { + Dictionary dic = JSON.Json.Decode(responseStr) as Dictionary; + + if (dic == null) + { + (this as IConnection).Error("Failed to parse Start response: " + responseStr); + return string.Empty; + } + + object value; + if (!dic.TryGetValue("Response", out value) || value == null) + { + (this as IConnection).Error("No 'Response' key found in response: " + responseStr); + return string.Empty; + } + + return value.ToString(); + } + + #endregion + + #region IHeartbeat Implementation + + /// + /// IHeartbeat implementation to manage timeouts. + /// + void IHeartbeat.OnHeartbeatUpdate(TimeSpan dif) + { + switch(this.State) + { + case ConnectionStates.Connected: + if (Transport.SupportsKeepAlive && NegotiationResult.KeepAliveTimeout != null && DateTime.UtcNow - LastMessageReceivedAt >= NegotiationResult.KeepAliveTimeout) + Reconnect(); + + if (PingRequest == null && DateTime.UtcNow - LastPingSentAt >= PingInterval) + Ping(); + + break; + + case ConnectionStates.Reconnecting: + if ( DateTime.UtcNow - ReconnectStartedAt >= NegotiationResult.DisconnectTimeout) + { + HTTPManager.Logger.Warning("SignalR Connection", "OnHeartbeatUpdate - Failed to reconnect in the given time!"); + + Close(); + } + else if (DateTime.UtcNow - ReconnectDelayStartedAt >= ReconnectDelay) + { + if (HTTPManager.Logger.Level <= Logger.Loglevels.Warning) + HTTPManager.Logger.Warning("SignalR Connection", this.ReconnectStarted.ToString() + " " + this.ReconnectStartedAt.ToString() + " " + NegotiationResult.DisconnectTimeout.ToString()); + Reconnect(); + } + break; + + default: + + if (TransportConnectionStartedAt != null && DateTime.UtcNow - TransportConnectionStartedAt >= NegotiationResult.TransportConnectTimeout) + { + HTTPManager.Logger.Warning("SignalR Connection", "OnHeartbeatUpdate - Transport failed to connect in the given time!"); + + // Using the Error function here instead of Close() will enable us to try to do a transport fallback. + (this as IConnection).Error("Transport failed to connect in the given time!"); + } + + break; + } + } + + #endregion + + #region Private Helper Functions + + /// + /// Init function to set the connected states and set up other variables. + /// + private void InitOnStart() + { + this.State = ConnectionStates.Connected; + + //ReconnectStartedAt = null; + ReconnectStarted = false; + TransportConnectionStartedAt = null; + + LastPingSentAt = DateTime.UtcNow; + LastMessageReceivedAt = DateTime.UtcNow; + + HTTPManager.Heartbeats.Subscribe(this); + } + + /// + /// Find and return with a Hub that has the message id. + /// + private Hub FindHub(UInt64 msgId) + { + if (Hubs != null) + for (int i = 0; i < Hubs.Length; ++i) + if ((Hubs[i] as IHub).HasSentMessageId(msgId)) + return Hubs[i]; + return null; + } + + /// + /// Try to fall back to next transport. If no more transport to try, it will return false. + /// + private bool TryFallbackTransport() + { + if (this.State == ConnectionStates.Connecting) + { + if (BufferedMessages != null) + BufferedMessages.Clear(); + + // stop the current transport + Transport.Stop(); + Transport = null; + + switch(NextProtocolToTry) + { +#if !BESTHTTP_DISABLE_WEBSOCKET + case SupportedProtocols.WebSocket: + Transport = new WebSocketTransport(this); + break; +#endif + +#if !BESTHTTP_DISABLE_SERVERSENT_EVENTS + case SupportedProtocols.ServerSentEvents: + Transport = new ServerSentEventsTransport(this); + NextProtocolToTry = SupportedProtocols.HTTP; + break; +#endif + + case SupportedProtocols.HTTP: + Transport = new PollingTransport(this); + NextProtocolToTry = SupportedProtocols.Unknown; + break; + + case SupportedProtocols.Unknown: + return false; + } + + TransportConnectionStartedAt = DateTime.UtcNow; + + Transport.Connect(); + + if (PingRequest != null) + PingRequest.Abort(); + + return true; + } + + return false; + } + + /// + /// This event will be called when the AdditonalQueryPrams dictionary changed. We have to reset the cached values. + /// + private void AdditionalQueryParams_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) + { + BuiltQueryParams = null; + } + + #endregion + + #region Ping Implementation + + /// + /// Sends a Ping request to the SignalR server. + /// + private void Ping() + { + HTTPManager.Logger.Information("SignalR Connection", "Sending Ping request."); + + PingRequest = new HTTPRequest((this as IConnection).BuildUri(RequestTypes.Ping), OnPingRequestFinished); + PingRequest.ConnectTimeout = PingInterval; + + (this as IConnection).PrepareRequest(PingRequest, RequestTypes.Ping); + + PingRequest.Send(); + + LastPingSentAt = DateTime.UtcNow; + } + + /// + /// Called when the Ping request finished. + /// + void OnPingRequestFinished(HTTPRequest req, HTTPResponse resp) + { + PingRequest = null; + + string reason = string.Empty; + + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + if (resp.IsSuccess) + { + // Parse the response, and do nothing when we receive the "pong" response + string response = (this as IConnection).ParseResponse(resp.DataAsText); + + if (response != "pong") + reason = "Wrong answer for ping request: " + response; + else + HTTPManager.Logger.Information("SignalR Connection", "Pong received."); + } + else + reason = string.Format("Ping - Request Finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}", + resp.StatusCode, + resp.Message, + resp.DataAsText); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + reason = "Ping - Request Finished with Error! " + (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception"); + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + reason = "Ping - Connection Timed Out!"; + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + reason = "Ping - Processing the request Timed Out!"; + break; + } + + if (!string.IsNullOrEmpty(reason)) + (this as IConnection).Error(reason); + } + + #endregion + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Connection.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Connection.cs.meta new file mode 100644 index 000000000..7d487bad0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Connection.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 878e20e1ec06ef542946893b5e37c3b6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Enums.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Enums.cs new file mode 100644 index 000000000..a1d784081 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Enums.cs @@ -0,0 +1,196 @@ +#if !BESTHTTP_DISABLE_SIGNALR + +namespace BestHTTP.SignalR +{ + /// + /// Possible transport types. + /// + public enum TransportTypes + { + /// + /// Transport using WebSockets. + /// + WebSocket, + + /// + /// Transport using ServerSentEvents protocol. + /// + ServerSentEvents, + + /// + /// Transport using long-polling requests. + /// + LongPoll + } + + /// + /// Server sent message types + /// + public enum MessageTypes + { + /// + /// An empty json object {} sent by the server to check keep alive. + /// + KeepAlive, + + /// + /// A no-hub message that contains data. + /// + Data, + + /// + /// A message that can hold multiple data message alongside with other information. + /// + Multiple, + + /// + /// A method call result. + /// + Result, + + /// + /// A message about a failed method call. + /// + Failure, + + /// + /// A message with all information to be able to call a method on the client. + /// + MethodCall, + + /// + /// A long running server-method's progress. + /// + Progress + } + + /// + /// Possible SignalR Connection states. + /// + public enum ConnectionStates + { + /// + /// The initial state of the connection. + /// + Initial, + + /// + /// The client authenticates itself with the server. This state is skipped if no AuthenticationProvider is present. + /// + Authenticating, + + /// + /// The client sent out the negotiation request to the server. + /// + Negotiating, + + /// + /// The client received the negotiation data, created the transport and wait's for the transport's connection. + /// + Connecting, + + /// + /// The transport connected and started successfully. + /// + Connected, + + /// + /// The client started the reconnect process. + /// + Reconnecting, + + /// + /// The connection is closed. + /// + Closed + } + + /// + /// Possible types of SignalR requests. + /// + public enum RequestTypes + { + /// + /// Request to the /negotiate path to negotiate protocol parameters. + /// + Negotiate, + + /// + /// Request to the /connect path to connect to the server. With long-polling, it's like a regular poll request. + /// + Connect, + + /// + /// Request to the /start path to start the protocol. + /// + Start, + + /// + /// Request to the /poll path to get new messages. Not used with the WebSocketTransport. + /// + Poll, + + /// + /// Request to the /send path to send a message to the server. Not used with the WebSocketTransport. + /// + Send, + + /// + /// Request to the /reconnect path to initiate a reconnection. It's used instead of the Connect type. + /// + Reconnect, + + /// + /// Request to the /abort path to close the connection. + /// + Abort, + + /// + /// Request to the /ping path to ping the server keeping the asp.net session alive. + /// + Ping + } + + /// + /// Possible states of a transport. + /// + public enum TransportStates + { + /// + /// Initial state + /// + Initial, + + /// + /// Connecting + /// + Connecting, + + /// + /// Reconnecting + /// + Reconnecting, + + /// + /// Sending Start request + /// + Starting, + + /// + /// Start request finished successfully + /// + Started, + + /// + /// Sending Abort request + /// + Closing, + + /// + /// The transport closed after Abort request sent + /// + Closed + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Enums.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Enums.cs.meta new file mode 100644 index 000000000..1ed53210a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Enums.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fafa6e4c8bf63324c82241199e91f437 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Hubs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Hubs.meta new file mode 100644 index 000000000..4060c0cd3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Hubs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7208796729371c74c9d7c3398b19f8f3 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Hubs/Hub.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Hubs/Hub.cs new file mode 100644 index 000000000..fc553dc74 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Hubs/Hub.cs @@ -0,0 +1,391 @@ +#if !BESTHTTP_DISABLE_SIGNALR + +using System; +using System.Collections.Generic; + +using BestHTTP.SignalR.Messages; +using System.Text; + +namespace BestHTTP.SignalR.Hubs +{ + public delegate void OnMethodCallDelegate(Hub hub, string method, params object[] args); + public delegate void OnMethodCallCallbackDelegate(Hub hub, MethodCallMessage methodCall); + + public delegate void OnMethodResultDelegate(Hub hub, ClientMessage originalMessage, ResultMessage result); + public delegate void OnMethodFailedDelegate(Hub hub, ClientMessage originalMessage, FailureMessage error); + public delegate void OnMethodProgressDelegate(Hub hub, ClientMessage originialMessage, ProgressMessage progress); + + /// + /// Represents a clientside Hub. This class can be used as a base class to encapsulate proxy functionalities. + /// + public class Hub : IHub + { + + #region Public Properties + + /// + /// Name of this hub. + /// + public string Name { get; private set; } + + /// + /// Server and user set state of the hub. + /// + public Dictionary State + { + // Create only when we need to. + get + { + if (state == null) + state = new Dictionary(); + return state; + } + } + private Dictionary state; + + /// + /// Event called every time when the server sends an order to call a method on the client. + /// + public event OnMethodCallDelegate OnMethodCall; + + #endregion + + #region Privates + + /// + /// Table of the sent messages. These messages will be removed from this table when a Result message is received from the server. + /// + private Dictionary SentMessages = new Dictionary(); + + /// + /// Methodname -> callback delegate mapping. This table stores the server callable functions. + /// + private Dictionary MethodTable = new Dictionary(); + + /// + /// A reusable StringBuilder to save some GC allocs + /// + private StringBuilder builder = new StringBuilder(); + + #endregion + + Connection IHub.Connection { get; set; } + + public Hub(string name) + :this(name, null) + { + + } + + public Hub(string name, Connection manager) + { + this.Name = name; + (this as IHub).Connection = manager; + } + + #region Public Hub Functions + + /// + /// Registers a callback function to the given method. + /// + public void On(string method, OnMethodCallCallbackDelegate callback) + { + MethodTable[method] = callback; + } + + /// + /// Removes callback from the given method. + /// + /// + public void Off(string method) + { + MethodTable[method] = null; + } + + /// + /// Orders the server to call a method with the given arguments. + /// + /// True if the plugin was able to send out the message + public bool Call(string method, params object[] args) + { + return Call(method, null, null, null, args); + } + + /// + /// Orders the server to call a method with the given arguments. + /// The onResult callback will be called when the server successfully called the function. + /// + /// True if the plugin was able to send out the message + public bool Call(string method, OnMethodResultDelegate onResult, params object[] args) + { + return Call(method, onResult, null, null, args); + } + + /// + /// Orders the server to call a method with the given arguments. + /// The onResult callback will be called when the server successfully called the function. + /// The onResultError will be called when the server can't call the function, or when the function throws an exception. + /// + /// True if the plugin was able to send out the message + public bool Call(string method, OnMethodResultDelegate onResult, OnMethodFailedDelegate onResultError, params object[] args) + { + return Call(method, onResult, onResultError, null, args); + } + + /// + /// Orders the server to call a method with the given arguments. + /// The onResult callback will be called when the server successfully called the function. + /// The onProgress callback called multiple times when the method is a long running function and reports back its progress. + /// + /// True if the plugin was able to send out the message + public bool Call(string method, OnMethodResultDelegate onResult, OnMethodProgressDelegate onProgress, params object[] args) + { + return Call(method, onResult, null, onProgress, args); + } + + /// + /// Orders the server to call a method with the given arguments. + /// The onResult callback will be called when the server successfully called the function. + /// The onResultError will be called when the server can't call the function, or when the function throws an exception. + /// The onProgress callback called multiple times when the method is a long running function and reports back its progress. + /// + /// True if the plugin was able to send out the message + public bool Call(string method, OnMethodResultDelegate onResult, OnMethodFailedDelegate onResultError, OnMethodProgressDelegate onProgress, params object[] args) + { + IHub thisHub = this as IHub; + + // Start over the counter if we are reached the max value if the long type. + // While we are using this property only here, we don't want to make it static to avoid another thread synchronization, neither we want to make it a Hub-instance field to achieve better debuggability. + + long newValue, originalValue; + do + { + originalValue = thisHub.Connection.ClientMessageCounter; + newValue = (originalValue % long.MaxValue) + 1; + } while (System.Threading.Interlocked.CompareExchange(ref thisHub.Connection.ClientMessageCounter, newValue, originalValue) != originalValue); + + // Create and send the client message + return thisHub.Call(new ClientMessage(this, method, args, (ulong)thisHub.Connection.ClientMessageCounter, onResult, onResultError, onProgress)); + } + + #endregion + + #region IHub Implementation + + bool IHub.Call(ClientMessage msg) + { + IHub thisHub = this as IHub; + + if (!thisHub.Connection.SendJson(BuildMessage(msg))) + return false; + + SentMessages.Add(msg.CallIdx, msg); + + return true; + } + + /// + /// Return true if this hub sent the message with the given id. + /// + bool IHub.HasSentMessageId(UInt64 id) + { + return SentMessages.ContainsKey(id); + } + + /// + /// Called on the manager's close. + /// + void IHub.Close() + { + SentMessages.Clear(); + } + + /// + /// Called when the client receives an order to call a hub-function. + /// + void IHub.OnMethod(MethodCallMessage msg) + { + // Merge the newly received states with the old one + MergeState(msg.State); + + if (OnMethodCall != null) + { + try + { + OnMethodCall(this, msg.Method, msg.Arguments); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("Hub - " + this.Name, "IHub.OnMethod - OnMethodCall", ex); + } + } + + OnMethodCallCallbackDelegate callback; + if (MethodTable.TryGetValue(msg.Method, out callback) && callback != null) + { + try + { + callback(this, msg); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("Hub - " + this.Name, "IHub.OnMethod - callback", ex); + } + } + else if (OnMethodCall == null) + HTTPManager.Logger.Warning("Hub - " + this.Name, string.Format("[Client] {0}.{1} (args: {2})", this.Name, msg.Method, msg.Arguments.Length)); + } + + /// + /// Called when the client receives back messages as a result of a server method call. + /// + void IHub.OnMessage(IServerMessage msg) + { + ClientMessage originalMsg; + + UInt64 id = (msg as IHubMessage).InvocationId; + if (!SentMessages.TryGetValue(id, out originalMsg)) + { + // This can happen when a result message removes the ClientMessage from the SentMessages dictionary, + // then a late come progress message tries to access it + HTTPManager.Logger.Warning("Hub - " + this.Name, "OnMessage - Sent message not found with id: " + id.ToString()); + return; + } + + switch(msg.Type) + { + case MessageTypes.Result: + ResultMessage result = msg as ResultMessage; + + // Merge the incoming State before firing the events + MergeState(result.State); + + if (originalMsg.ResultCallback != null) + { + try + { + originalMsg.ResultCallback(this, originalMsg, result); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("Hub " + this.Name, "IHub.OnMessage - ResultCallback", ex); + } + } + + SentMessages.Remove(id); + + break; + + case MessageTypes.Failure: + FailureMessage error = msg as FailureMessage; + + // Merge the incoming State before firing the events + MergeState(error.State); + + if (originalMsg.ResultErrorCallback != null) + { + try + { + originalMsg.ResultErrorCallback(this, originalMsg, error); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("Hub " + this.Name, "IHub.OnMessage - ResultErrorCallback", ex); + } + } + + SentMessages.Remove(id); + break; + + case MessageTypes.Progress: + if (originalMsg.ProgressCallback != null) + { + try + { + originalMsg.ProgressCallback(this, originalMsg, msg as ProgressMessage); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("Hub " + this.Name, "IHub.OnMessage - ProgressCallback", ex); + } + } + break; + } + } + + #endregion + + #region Helper Functions + + /// + /// Merges the current and the new states. + /// +#if BESTHTTP_SIGNALR_WITH_JSONDOTNET + private void MergeState(IDictionary state) +#else + private void MergeState(IDictionary state) +#endif + { + if (state != null && state.Count > 0) + foreach (var kvp in state) + this.State[kvp.Key] = kvp.Value; + } + + /// + /// Builds a JSon string from the given message. + /// + private string BuildMessage(ClientMessage msg) + { + try + { + builder.Append("{\"H\":\""); + builder.Append(this.Name); + builder.Append("\",\"M\":\""); + builder.Append(msg.Method); + builder.Append("\",\"A\":"); + + string jsonEncoded = string.Empty; + + // Arguments + if (msg.Args != null && msg.Args.Length > 0) + jsonEncoded = (this as IHub).Connection.JsonEncoder.Encode(msg.Args); + else + jsonEncoded = "[]"; + + builder.Append(jsonEncoded); + + builder.Append(",\"I\":\""); + builder.Append(msg.CallIdx.ToString()); + builder.Append("\""); + + // State, if any + if (msg.Hub.state != null && msg.Hub.state.Count > 0) + { + builder.Append(",\"S\":"); + + jsonEncoded = (this as IHub).Connection.JsonEncoder.Encode(msg.Hub.state); + builder.Append(jsonEncoded); + } + + builder.Append("}"); + + return builder.ToString(); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("Hub - " + this.Name, "Send", ex); + + return null; + } + finally + { + // reset the StringBuilder instance, to reuse next time + builder.Length = 0; + } + } + + #endregion + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Hubs/Hub.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Hubs/Hub.cs.meta new file mode 100644 index 000000000..ee76d02bf --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Hubs/Hub.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 00b4b8fd0e14de941b796a56a1272233 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Hubs/IHub.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Hubs/IHub.cs new file mode 100644 index 000000000..5426c2932 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Hubs/IHub.cs @@ -0,0 +1,24 @@ +#if !BESTHTTP_DISABLE_SIGNALR + +using System; + +using BestHTTP.SignalR.Messages; + +namespace BestHTTP.SignalR.Hubs +{ + /// + /// Interface to be able to hide internally used functions and properties. + /// + public interface IHub + { + Connection Connection { get; set; } + + bool Call(ClientMessage msg); + bool HasSentMessageId(UInt64 id); + void Close(); + void OnMethod(MethodCallMessage msg); + void OnMessage(IServerMessage msg); + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Hubs/IHub.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Hubs/IHub.cs.meta new file mode 100644 index 000000000..78982e779 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Hubs/IHub.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1813781a232e6c74ba3e00896327ace6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/JsonEncoders.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/JsonEncoders.meta new file mode 100644 index 000000000..794d22c35 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/JsonEncoders.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c593c51184e979a4d8e4bb2cc2a9b1d0 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/JsonEncoders/DefaultJsonEncoder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/JsonEncoders/DefaultJsonEncoder.cs new file mode 100644 index 000000000..cc6c3c188 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/JsonEncoders/DefaultJsonEncoder.cs @@ -0,0 +1,24 @@ +#if !BESTHTTP_DISABLE_SIGNALR + +using BestHTTP.JSON; +using System.Collections.Generic; + +namespace BestHTTP.SignalR.JsonEncoders +{ + public sealed class DefaultJsonEncoder : IJsonEncoder + { + public string Encode(object obj) + { + return Json.Encode(obj); + } + + public IDictionary DecodeMessage(string json) + { + bool ok = false; + IDictionary result = Json.Decode(json, ref ok) as IDictionary; + return ok ? result : null; + } + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/JsonEncoders/DefaultJsonEncoder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/JsonEncoders/DefaultJsonEncoder.cs.meta new file mode 100644 index 000000000..d6d0d4ed2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/JsonEncoders/DefaultJsonEncoder.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1a4bf647dcdcdbf44ab1edc744192ca0 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/JsonEncoders/IJsonEncoder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/JsonEncoders/IJsonEncoder.cs new file mode 100644 index 000000000..7304031f9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/JsonEncoders/IJsonEncoder.cs @@ -0,0 +1,24 @@ +#if !BESTHTTP_DISABLE_SIGNALR + +using System.Collections.Generic; + +namespace BestHTTP.SignalR.JsonEncoders +{ + /// + /// Interface to be able to write custom Json encoders/decoders. + /// + public interface IJsonEncoder + { + /// + /// This function must create a json formatted string from the given object. If the encoding fails, it should return null. + /// + string Encode(object obj); + + /// + /// This function must create a dictionary the Json formatted string parameter. If the decoding fails, it should return null. + /// + IDictionary DecodeMessage(string json); + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/JsonEncoders/IJsonEncoder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/JsonEncoders/IJsonEncoder.cs.meta new file mode 100644 index 000000000..ce9466d3b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/JsonEncoders/IJsonEncoder.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b494cd3e9ad9bd243bd68251a27c86b9 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages.meta new file mode 100644 index 000000000..ad7746868 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3ea7772f76aa54748aa8b466ba3113a9 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages/ClientMessage.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages/ClientMessage.cs new file mode 100644 index 000000000..c1c4c867c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages/ClientMessage.cs @@ -0,0 +1,71 @@ +#if !BESTHTTP_DISABLE_SIGNALR + +using System; + +using BestHTTP.SignalR.Hubs; + +namespace BestHTTP.SignalR.Messages +{ + /// + /// This struct represents a message from the client. + /// It holds every data and reference needed to construct the string represented message that will be sent to the wire. + /// + public struct ClientMessage + { + /// + /// Reference to the source Hub. The Name and the State of the hub will be user. + /// + public readonly Hub Hub; + + /// + /// Name of the method on the server to be called. + /// + public readonly string Method; + + /// + /// Arguments of the method. + /// + public readonly object[] Args; + + /// + /// Unique id on the client of this message + /// + public readonly UInt64 CallIdx; + + /// + /// The delegate that will be called when the server will sends a result of this method call. + /// + public readonly OnMethodResultDelegate ResultCallback; + + /// + /// The delegate that will be called when the server sends an error-result to this method call. + /// + public readonly OnMethodFailedDelegate ResultErrorCallback; + + /// + /// The delegate that will be called when the server sends a progress message to this method call. + /// + public readonly OnMethodProgressDelegate ProgressCallback; + + public ClientMessage(Hub hub, + string method, + object[] args, + UInt64 callIdx, + OnMethodResultDelegate resultCallback, + OnMethodFailedDelegate resultErrorCallback, + OnMethodProgressDelegate progressCallback) + { + Hub = hub; + Method = method; + Args = args; + + CallIdx = callIdx; + + ResultCallback = resultCallback; + ResultErrorCallback = resultErrorCallback; + ProgressCallback = progressCallback; + } + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages/ClientMessage.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages/ClientMessage.cs.meta new file mode 100644 index 000000000..658559cb1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages/ClientMessage.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: af18bb2021dd2f045b2d168d5769fab1 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages/IServerMessage.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages/IServerMessage.cs new file mode 100644 index 000000000..c5ffb2884 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages/IServerMessage.cs @@ -0,0 +1,19 @@ +#if !BESTHTTP_DISABLE_SIGNALR + +using System; + +namespace BestHTTP.SignalR.Messages +{ + public interface IServerMessage + { + MessageTypes Type { get; } + void Parse(object data); + } + + public interface IHubMessage + { + UInt64 InvocationId { get; } + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages/IServerMessage.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages/IServerMessage.cs.meta new file mode 100644 index 000000000..278f67810 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages/IServerMessage.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 25c60db0524552144bf03b547ae8a585 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages/ServerMessages.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages/ServerMessages.cs new file mode 100644 index 000000000..8f82c5b6f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages/ServerMessages.cs @@ -0,0 +1,354 @@ +#if !BESTHTTP_DISABLE_SIGNALR + +#if BESTHTTP_SIGNALR_WITH_JSONDOTNET +using Newtonsoft.Json.Linq; +#endif +using System; +using System.Collections; +using System.Collections.Generic; + +namespace BestHTTP.SignalR.Messages +{ + /// + /// Keep-alive message sent by the server. No data sent with it. + /// + public sealed class KeepAliveMessage : IServerMessage + { + MessageTypes IServerMessage.Type { get { return MessageTypes.KeepAlive; } } + void IServerMessage.Parse(object data) { } + } + + /// + /// A message that may contains multiple sub-messages and additional informations. + /// + public sealed class MultiMessage : IServerMessage + { + MessageTypes IServerMessage.Type { get { return MessageTypes.Multiple; } } + + /// + /// Id of the sent message + /// + public string MessageId { get; private set; } + + /// + /// True if it's an initialization message, false otherwise. + /// + public bool IsInitialization { get; private set; } + + /// + /// Group token may be sent, if the group changed that the client belongs to. + /// + public string GroupsToken { get; private set; } + + /// + /// The server suggests that the client should do a reconnect turn. + /// + public bool ShouldReconnect { get; private set; } + + /// + /// Additional poll delay sent by the server. + /// + public TimeSpan? PollDelay { get; private set; } + + /// + /// List of server messages sent inside this message. + /// + public List Data { get; private set; } + + void IServerMessage.Parse(object data) + { + IDictionary dic = data as IDictionary; + object value; + + this.MessageId = dic["C"].ToString(); + + if (dic.TryGetValue("S", out value)) + IsInitialization = int.Parse(value.ToString()) == 1 ? true : false; + else + IsInitialization = false; + + if (dic.TryGetValue("G", out value)) + GroupsToken = value.ToString(); + + if (dic.TryGetValue("T", out value)) + ShouldReconnect = int.Parse(value.ToString()) == 1 ? true : false; + else + ShouldReconnect = false; + + if (dic.TryGetValue("L", out value)) + PollDelay = TimeSpan.FromMilliseconds(double.Parse(value.ToString())); + + IEnumerable enumerable = dic["M"] as IEnumerable; + + if (enumerable != null) + { + Data = new List(); + + foreach (object subData in enumerable) + { +#if BESTHTTP_SIGNALR_WITH_JSONDOTNET + IDictionary subObj = subData as IDictionary; +#else + IDictionary subObj = subData as IDictionary; +#endif + + IServerMessage subMsg = null; + + if (subObj != null) + { + if (subObj.ContainsKey("H")) + subMsg = new MethodCallMessage(); + else if (subObj.ContainsKey("I")) + subMsg = new ProgressMessage(); + else + subMsg = new DataMessage(); + } + else + subMsg = new DataMessage(); + + subMsg.Parse(subData); + + Data.Add(subMsg); + } + } + } + } + + /// + /// A simple non-hub data message. It holds only one Data property. + /// + public sealed class DataMessage : IServerMessage + { + MessageTypes IServerMessage.Type { get { return MessageTypes.Data; } } + + public object Data { get; private set; } + + void IServerMessage.Parse(object data) + { + this.Data = data; + } + } + + /// + /// A Hub message that orders the client to call a method. + /// + public sealed class MethodCallMessage : IServerMessage + { + MessageTypes IServerMessage.Type { get { return MessageTypes.MethodCall; } } + + /// + /// The name of the Hub that the method is called on. + /// + public string Hub { get; private set; } + + /// + /// Name of the Method. + /// + public string Method { get; private set; } + + /// + /// Arguments of the method call. + /// + public object[] Arguments { get; private set; } + + /// + /// State changes of the hub. It's handled automatically by the Hub. + /// +#if BESTHTTP_SIGNALR_WITH_JSONDOTNET + public IDictionary State { get; private set; } +#else + public IDictionary State { get; private set; } +#endif + + void IServerMessage.Parse(object data) + { + #if BESTHTTP_SIGNALR_WITH_JSONDOTNET + IDictionary dic = data as IDictionary; + #else + IDictionary dic = data as IDictionary; + #endif + + Hub = dic["H"].ToString(); + Method = dic["M"].ToString(); + + List args = new List(); + foreach (object arg in dic["A"] as IEnumerable) + args.Add(arg); + Arguments = args.ToArray(); + +#if BESTHTTP_SIGNALR_WITH_JSONDOTNET + JToken value; + if (dic.TryGetValue("S", out value)) + State = value as IDictionary; +#else + object value; + if (dic.TryGetValue("S", out value)) + State = value as IDictionary; +#endif + } + } + + /// + /// Message of a server side method invocation result. + /// + public sealed class ResultMessage : IServerMessage, IHubMessage + { + MessageTypes IServerMessage.Type { get { return MessageTypes.Result; } } + + /// + /// The unique id that the client set when called the server side method. Used by the plugin to deliver this message to the good Hub. + /// + public UInt64 InvocationId { get; private set; } + + /// + /// The return value of the server side method call, or null if the method's return type is void. + /// + public object ReturnValue { get; private set; } + + /// + /// State changes of the hub. It's handled automatically by the Hub. + /// +#if BESTHTTP_SIGNALR_WITH_JSONDOTNET + public IDictionary State { get; private set; } +#else + public IDictionary State { get; private set; } +#endif + + void IServerMessage.Parse(object data) + { + IDictionary dic = data as IDictionary; + + InvocationId = UInt64.Parse(dic["I"].ToString()); + + object value; + if (dic.TryGetValue("R", out value)) + ReturnValue = value; + + if (dic.TryGetValue("S", out value)) + { +#if BESTHTTP_SIGNALR_WITH_JSONDOTNET + State = value as IDictionary; +#else + State = value as IDictionary; +#endif + } + } + } + + public sealed class FailureMessage : IServerMessage, IHubMessage + { + MessageTypes IServerMessage.Type { get { return MessageTypes.Failure; } } + + /// + /// The unique id that the client set when called the server side method. Used by the plugin to deliver this message to the good Hub. + /// + public UInt64 InvocationId { get; private set; } + + /// + /// True if it's a hub error. + /// + public bool IsHubError { get; private set; } + + /// + /// If the method call failed, it contains the error message to detail what happened. + /// + public string ErrorMessage { get; private set; } + + /// + /// A dictionary that may contain additional error data (can only be present for hub errors). It can be null. + /// +#if BESTHTTP_SIGNALR_WITH_JSONDOTNET + public IDictionary AdditionalData { get; private set; } +#else + public IDictionary AdditionalData { get; private set; } +#endif + + /// + /// Stack trace of the error. It present only if detailed error reporting is turned on on the server (https://msdn.microsoft.com/en-us/library/microsoft.aspnet.signalr.hubconfiguration.enabledetailederrors%28v=vs.118%29.aspx). + /// + public string StackTrace { get; private set; } + + /// + /// State changes of the hub. It's handled automatically by the Hub. + /// +#if BESTHTTP_SIGNALR_WITH_JSONDOTNET + public IDictionary State { get; private set; } +#else + public IDictionary State { get; private set; } +#endif + + void IServerMessage.Parse(object data) + { + IDictionary dic = data as IDictionary; + + InvocationId = UInt64.Parse(dic["I"].ToString()); + + object value; + + if (dic.TryGetValue("E", out value)) + ErrorMessage = value.ToString(); + + if (dic.TryGetValue("H", out value)) + IsHubError = int.Parse(value.ToString()) == 1 ? true : false; + + if (dic.TryGetValue("D", out value)) + { +#if BESTHTTP_SIGNALR_WITH_JSONDOTNET + AdditionalData = value as IDictionary; +#else + AdditionalData = value as IDictionary; +#endif + } + + if (dic.TryGetValue("T", out value)) + StackTrace = value.ToString(); + + if (dic.TryGetValue("S", out value)) + { +#if BESTHTTP_SIGNALR_WITH_JSONDOTNET + State = value as IDictionary; +#else + State = value as IDictionary; +#endif + } + } + } + + /// + /// When a server method is a long running method the server can send the information about the progress of execution of the method to the client. + /// + public sealed class ProgressMessage : IServerMessage, IHubMessage + { + MessageTypes IServerMessage.Type { get { return MessageTypes.Progress; } } + + /// + /// The unique id that the client set when called the server side method. Used by the plugin to deliver this message to the good Hub. + /// + public UInt64 InvocationId { get; private set; } + + /// + /// Current progress of the long running method. + /// + public double Progress { get; private set; } + + void IServerMessage.Parse(object data) + { +#if BESTHTTP_SIGNALR_WITH_JSONDOTNET + IDictionary dic = data as IDictionary; +#else + IDictionary dic = data as IDictionary; +#endif + +#if BESTHTTP_SIGNALR_WITH_JSONDOTNET + IDictionary P = dic["P"] as IDictionary; +#else + IDictionary P = dic["P"] as IDictionary; +#endif + + InvocationId = UInt64.Parse(P["I"].ToString()); + Progress = double.Parse(P["D"].ToString()); + } + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages/ServerMessages.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages/ServerMessages.cs.meta new file mode 100644 index 000000000..eb21219b6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Messages/ServerMessages.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a128625937e3c5b459b3aa221061a03f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/NegotiationData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/NegotiationData.cs new file mode 100644 index 000000000..989f81f34 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/NegotiationData.cs @@ -0,0 +1,276 @@ +#if !BESTHTTP_DISABLE_SIGNALR + +using System; +using System.Collections.Generic; + +using BestHTTP.JSON; + +namespace BestHTTP.SignalR +{ + public sealed class NegotiationData + { + #region Public Negotiate data + + /// + /// Path to the SignalR endpoint. Currently not used by the client. + /// + public string Url { get; private set; } + + /// + /// WebSocket endpoint. + /// + public string WebSocketServerUrl { get; private set; } + + /// + /// Connection token assigned by the server. See this article for more details: http://www.asp.net/signalr/overview/security/introduction-to-security#connectiontoken. + /// This value needs to be sent in each subsequent request as the value of the connectionToken parameter + /// + public string ConnectionToken { get; private set; } + + /// + /// The id of the connection. + /// + public string ConnectionId { get; private set; } + + /// + /// The amount of time in seconds the client should wait before attempting to reconnect if it has not received a keep alive message. + /// If the server is configured to not send keep alive messages this value is null. + /// + public TimeSpan? KeepAliveTimeout { get; private set; } + + /// + /// The amount of time within which the client should try to reconnect if the connection goes away. + /// + public TimeSpan DisconnectTimeout { get; private set; } + + /// + /// Timeout of poll requests. + /// + public TimeSpan ConnectionTimeout { get; private set; } + + /// + /// Whether the server supports websockets. + /// + public bool TryWebSockets { get; private set; } + + /// + /// The version of the protocol used for communication. + /// + public string ProtocolVersion { get; private set; } + + /// + /// The maximum amount of time the client should try to connect to the server using a given transport. + /// + public TimeSpan TransportConnectTimeout { get; private set; } + + /// + /// The wait time before restablishing a long poll connection after data is sent from the server. The default value is 0. + /// + public TimeSpan LongPollDelay { get; private set; } + + #endregion + + #region Event Handlers + + /// + /// Event handler that called when the negotiation data received and parsed successfully. + /// + public Action OnReceived; + + /// + /// Event handler that called when an error happens. + /// + public Action OnError; + + #endregion + + #region Private + + private HTTPRequest NegotiationRequest; + private IConnection Connection; + + #endregion + + public NegotiationData(Connection connection) + { + this.Connection = connection; + } + + /// + /// Start to get the negotiation data. + /// + public void Start() + { + NegotiationRequest = new HTTPRequest(Connection.BuildUri(RequestTypes.Negotiate), HTTPMethods.Get, true, true, OnNegotiationRequestFinished); + Connection.PrepareRequest(NegotiationRequest, RequestTypes.Negotiate); + NegotiationRequest.Send(); + + HTTPManager.Logger.Information("NegotiationData", "Negotiation request sent"); + } + + /// + /// Abort the negotiation request. + /// + public void Abort() + { + if (NegotiationRequest != null) + { + OnReceived = null; + OnError = null; + NegotiationRequest.Abort(); + } + } + + #region Request Event Handler + + private void OnNegotiationRequestFinished(HTTPRequest req, HTTPResponse resp) + { + NegotiationRequest = null; + + switch (req.State) + { + case HTTPRequestStates.Finished: + if (resp.IsSuccess) + { + HTTPManager.Logger.Information("NegotiationData", "Negotiation data arrived: " + resp.DataAsText); + + int idx = resp.DataAsText.IndexOf("{"); + if (idx < 0) + { + RaiseOnError("Invalid negotiation text: " + resp.DataAsText); + return; + } + + var Negotiation = Parse(resp.DataAsText.Substring(idx)); + + if (Negotiation == null) + { + RaiseOnError("Parsing Negotiation data failed: " + resp.DataAsText); + return; + } + + if (OnReceived != null) + { + OnReceived(this); + OnReceived = null; + } + } + else + RaiseOnError(string.Format("Negotiation request finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2} Uri: {3}", + resp.StatusCode, + resp.Message, + resp.DataAsText, + req.CurrentUri)); + break; + + case HTTPRequestStates.Error: + RaiseOnError(req.Exception != null ? (req.Exception.Message + " " + req.Exception.StackTrace) : string.Empty); + break; + + default: + RaiseOnError(req.State.ToString()); + break; + } + } + + #endregion + + #region Helper Methods + + private void RaiseOnError(string err) + { + HTTPManager.Logger.Error("NegotiationData", "Negotiation request failed with error: " + err); + + if (OnError != null) + { + OnError(this, err); + OnError = null; + } + } + + private NegotiationData Parse(string str) + { + bool success = false; + Dictionary dict = Json.Decode(str, ref success) as Dictionary; + if (!success) + return null; + + try + { + this.Url = GetString(dict, "Url"); + + if (dict.ContainsKey("webSocketServerUrl")) + this.WebSocketServerUrl = GetString(dict, "webSocketServerUrl"); + + this.ConnectionToken = Uri.EscapeDataString(GetString(dict, "ConnectionToken")); + this.ConnectionId = GetString(dict, "ConnectionId"); + + if (dict.ContainsKey("KeepAliveTimeout")) + this.KeepAliveTimeout = TimeSpan.FromSeconds(GetDouble(dict, "KeepAliveTimeout")); + + this.DisconnectTimeout = TimeSpan.FromSeconds(GetDouble(dict, "DisconnectTimeout")); + + if (dict.ContainsKey("ConnectionTimeout")) + this.ConnectionTimeout = TimeSpan.FromSeconds(GetDouble(dict, "ConnectionTimeout")); + else + this.ConnectionTimeout = TimeSpan.FromSeconds(120); + + this.TryWebSockets = (bool)Get(dict, "TryWebSockets"); + this.ProtocolVersion = GetString(dict, "ProtocolVersion"); + this.TransportConnectTimeout = TimeSpan.FromSeconds(GetDouble(dict, "TransportConnectTimeout")); + + if (dict.ContainsKey("LongPollDelay")) + this.LongPollDelay = TimeSpan.FromSeconds(GetDouble(dict, "LongPollDelay")); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("NegotiationData", "Parse", ex); + return null; + } + + return this; + } + + private static object Get(Dictionary from, string key) + { + object value; + if (!from.TryGetValue(key, out value)) + throw new System.Exception(string.Format("Can't get {0} from Negotiation data!", key)); + return value; + } + + private static string GetString(Dictionary from, string key) + { + return Get(from, key) as string; + } + + private static List GetStringList(Dictionary from, string key) + { + List value = Get(from, key) as List; + + List result = new List(value.Count); + for (int i = 0; i < value.Count; ++i) + { + string str = value[i] as string; + if (str != null) + result.Add(str); + } + + return result; + } + + private static int GetInt(Dictionary from, string key) + { + return (int)(double)Get(from, key); + } + + private static double GetDouble(Dictionary from, string key) + { + return (double)Get(from, key); + } + + #endregion + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/NegotiationData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/NegotiationData.cs.meta new file mode 100644 index 000000000..69855b5aa --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/NegotiationData.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c20f605e63af7ef4eb7782aa663f0196 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports.meta new file mode 100644 index 000000000..7a14d7a55 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c390001e221f7e1429a38eb6222413c5 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/PollingTransport.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/PollingTransport.cs new file mode 100644 index 000000000..e4955c956 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/PollingTransport.cs @@ -0,0 +1,256 @@ +#if !BESTHTTP_DISABLE_SIGNALR + +using System; + +using BestHTTP.Extensions; +using BestHTTP.SignalR.Messages; + +namespace BestHTTP.SignalR.Transports +{ + public sealed class PollingTransport : PostSendTransportBase, IHeartbeat + { + #region Overridden Properties + + public override bool SupportsKeepAlive { get { return false; } } + public override TransportTypes Type { get { return TransportTypes.LongPoll; } } + + #endregion + + #region Privates + + /// + /// When we received the last poll. + /// + private DateTime LastPoll; + + /// + /// How much time we have to wait before we can send out a new poll request. This value sent by the server. + /// + private TimeSpan PollDelay; + + /// + /// How much time we wait to a poll request to finish. It's value is the server sent negotiation's ConnectionTimeout + 10sec. + /// + private TimeSpan PollTimeout; + + /// + /// Reference to the the current poll request. + /// + private HTTPRequest pollRequest; + + #endregion + + public PollingTransport(Connection connection) + : base("longPolling", connection) + { + this.LastPoll = DateTime.MinValue; + this.PollTimeout = connection.NegotiationResult.ConnectionTimeout + TimeSpan.FromSeconds(10); + } + + #region Overrides from TransportBase + + /// + /// Polling transport specific connection logic. It's a regular GET request to the /connect path. + /// + public override void Connect() + { + HTTPManager.Logger.Information("Transport - " + this.Name, "Sending Open Request"); + + // Skip the Connecting state if we are reconnecting. If the connect succeeds, we will set the Started state directly + if (this.State != TransportStates.Reconnecting) + this.State = TransportStates.Connecting; + + RequestTypes requestType = this.State == TransportStates.Reconnecting ? RequestTypes.Reconnect : RequestTypes.Connect; + + var request = new HTTPRequest(Connection.BuildUri(requestType, this), HTTPMethods.Get, true, true, OnConnectRequestFinished); + + Connection.PrepareRequest(request, requestType); + + request.Send(); + } + + public override void Stop() + { + HTTPManager.Heartbeats.Unsubscribe(this); + + if (pollRequest != null) + { + pollRequest.Abort(); + pollRequest = null; + } + + // Should we abort the send requests in the sendRequestQueue? + } + + protected override void Started() + { + LastPoll = DateTime.UtcNow; + HTTPManager.Heartbeats.Subscribe(this); + } + + protected override void Aborted() + { + HTTPManager.Heartbeats.Unsubscribe(this); + } + + #endregion + + #region Request Handlers + + void OnConnectRequestFinished(HTTPRequest req, HTTPResponse resp) + { + // error reason if there is any. We will call the manager's Error function if it's not empty. + string reason = string.Empty; + + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + if (resp.IsSuccess) + { + HTTPManager.Logger.Information("Transport - " + this.Name, "Connect - Request Finished Successfully! " + resp.DataAsText); + + OnConnected(); + + IServerMessage msg = TransportBase.Parse(Connection.JsonEncoder, resp.DataAsText); + + if (msg != null) + { + Connection.OnMessage(msg); + + MultiMessage multiple = msg as MultiMessage; + if (multiple != null && multiple.PollDelay.HasValue) + PollDelay = multiple.PollDelay.Value; + } + } + else + reason = string.Format("Connect - Request Finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}", + resp.StatusCode, + resp.Message, + resp.DataAsText); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + reason = "Connect - Request Finished with Error! " + (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception"); + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + reason = "Connect - Request Aborted!"; + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + reason = "Connect - Connection Timed Out!"; + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + reason = "Connect - Processing the request Timed Out!"; + break; + } + + if (!string.IsNullOrEmpty(reason)) + Connection.Error(reason); + } + + void OnPollRequestFinished(HTTPRequest req, HTTPResponse resp) + { + // When Stop() called on the transport. + // In Stop() we set the pollRequest to null, but a new poll request can be made after a quick reconnection, and there is a chanse that + // in this handler function we can null out the new request. So we return early here. + if (req.IsCancellationRequested) + { + HTTPManager.Logger.Warning("Transport - " + this.Name, "Poll - Request Aborted!"); + return; + } + + // Set the pollRequest to null, now we can send out a new one + pollRequest = null; + + // error reason if there is any. We will call the manager's Error function if it's not empty. + string reason = string.Empty; + + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + if (resp.IsSuccess) + { + HTTPManager.Logger.Information("Transport - " + this.Name, "Poll - Request Finished Successfully! " + resp.DataAsText); + + IServerMessage msg = TransportBase.Parse(Connection.JsonEncoder, resp.DataAsText); + + if (msg != null) + { + Connection.OnMessage(msg); + + MultiMessage multiple = msg as MultiMessage; + if (multiple != null && multiple.PollDelay.HasValue) + PollDelay = multiple.PollDelay.Value; + + LastPoll = DateTime.UtcNow; + } + } + else + reason = string.Format("Poll - Request Finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}", + resp.StatusCode, + resp.Message, + resp.DataAsText); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + reason = "Poll - Request Finished with Error! " + (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception"); + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + reason = "Poll - Connection Timed Out!"; + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + reason = "Poll - Processing the request Timed Out!"; + break; + } + + if (!string.IsNullOrEmpty(reason)) + Connection.Error(reason); + } + + #endregion + + /// + /// Polling transport speficic function. Sends a GET request to the /poll path to receive messages. + /// + private void Poll() + { + pollRequest = new HTTPRequest(Connection.BuildUri(RequestTypes.Poll, this), HTTPMethods.Get, true, true, OnPollRequestFinished); + + Connection.PrepareRequest(pollRequest, RequestTypes.Poll); + + pollRequest.Timeout = this.PollTimeout; + + pollRequest.Send(); + } + + #region IHeartbeat Implementation + + void IHeartbeat.OnHeartbeatUpdate(TimeSpan dif) + { + switch(State) + { + case TransportStates.Started: + if (pollRequest == null && DateTime.UtcNow >= (LastPoll + PollDelay + Connection.NegotiationResult.LongPollDelay)) + Poll(); + break; + } + } + + #endregion + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/PollingTransport.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/PollingTransport.cs.meta new file mode 100644 index 000000000..ec93c4dc4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/PollingTransport.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 702a1cd6038bbc347a4b568983058f63 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/PostSendTransportBase.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/PostSendTransportBase.cs new file mode 100644 index 000000000..11d3bd517 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/PostSendTransportBase.cs @@ -0,0 +1,100 @@ +#if !BESTHTTP_DISABLE_SIGNALR + +using System.Collections.Generic; + +using BestHTTP.SignalR.Messages; + +namespace BestHTTP.SignalR.Transports +{ + /// + /// A base class for implementations that must send the data in unique requests. These are currently the LongPolling and ServerSentEvents transports. + /// + public abstract class PostSendTransportBase : TransportBase + { + /// + /// Sent out send requests. Keeping a reference to them for future use. + /// + protected List sendRequestQueue = new List(); + + public PostSendTransportBase(string name, Connection con) + : base(name, con) + { + + } + + #region Send Implementation + + protected override void SendImpl(string json) + { + var request = new HTTPRequest(Connection.BuildUri(RequestTypes.Send, this), HTTPMethods.Post, true, true, OnSendRequestFinished); + + request.FormUsage = Forms.HTTPFormUsage.UrlEncoded; + request.AddField("data", json); + + Connection.PrepareRequest(request, RequestTypes.Send); + + request.Send(); + + sendRequestQueue.Add(request); + } + + void OnSendRequestFinished(HTTPRequest req, HTTPResponse resp) + { + sendRequestQueue.Remove(req); + + // error reason if there is any. We will call the manager's Error function if it's not empty. + string reason = string.Empty; + + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + if (resp.IsSuccess) + { + HTTPManager.Logger.Information("Transport - " + this.Name, "Send - Request Finished Successfully! " + resp.DataAsText); + + if (!string.IsNullOrEmpty(resp.DataAsText)) + { + IServerMessage msg = TransportBase.Parse(Connection.JsonEncoder, resp.DataAsText); + + if (msg != null) + Connection.OnMessage(msg); + } + } + else + reason = string.Format("Send - Request Finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}", + resp.StatusCode, + resp.Message, + resp.DataAsText); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + reason = "Send - Request Finished with Error! " + (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception"); + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + reason = "Send - Request Aborted!"; + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + reason = "Send - Connection Timed Out!"; + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + reason = "Send - Processing the request Timed Out!"; + break; + } + + if (!string.IsNullOrEmpty(reason)) + Connection.Error(reason); + } + + #endregion + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/PostSendTransportBase.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/PostSendTransportBase.cs.meta new file mode 100644 index 000000000..0d1453234 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/PostSendTransportBase.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f47176f2538ccf54e855235ecb7647f3 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/ServerSentEventsTransport.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/ServerSentEventsTransport.cs new file mode 100644 index 000000000..5a36384e6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/ServerSentEventsTransport.cs @@ -0,0 +1,171 @@ +#if !BESTHTTP_DISABLE_SIGNALR +#if !BESTHTTP_DISABLE_SERVERSENT_EVENTS + +using System; + +using BestHTTP.ServerSentEvents; +using BestHTTP.SignalR.Messages; + +namespace BestHTTP.SignalR.Transports +{ + /// + /// A SignalR transport implementation that uses the Server-Sent Events protocol. + /// + public sealed class ServerSentEventsTransport : PostSendTransportBase + { + #region Overridden Properties + + /// + /// It's a persistent connection. We support the keep-alive mechanism. + /// + public override bool SupportsKeepAlive { get { return true; } } + + /// + /// Type of the transport. + /// + public override TransportTypes Type { get { return TransportTypes.ServerSentEvents; } } + + #endregion + + #region Privates + + /// + /// The EventSource object. + /// + private EventSource EventSource; + + #endregion + + public ServerSentEventsTransport(Connection con) + : base("serverSentEvents", con) + { + + } + + #region Overrides from TransportBase + + public override void Connect() + { + if (EventSource != null) + { + HTTPManager.Logger.Warning("ServerSentEventsTransport", "Start - EventSource already created!"); + return; + } + + // Skip the Connecting state if we are reconnecting. If the connect succeeds, we will set the Started state directly + if (this.State != TransportStates.Reconnecting) + this.State = TransportStates.Connecting; + + RequestTypes requestType = this.State == TransportStates.Reconnecting ? RequestTypes.Reconnect : RequestTypes.Connect; + + Uri uri = Connection.BuildUri(requestType, this); + + EventSource = new EventSource(uri); + + EventSource.OnOpen += OnEventSourceOpen; + EventSource.OnMessage += OnEventSourceMessage; + EventSource.OnError += OnEventSourceError; + EventSource.OnClosed += OnEventSourceClosed; + +#if !UNITY_WEBGL || UNITY_EDITOR + // Disable internal retry + EventSource.OnRetry += (es) => false; +#endif + + // Start connecting to the server. + EventSource.Open(); + } + + public override void Stop() + { + EventSource.OnOpen -= OnEventSourceOpen; + EventSource.OnMessage -= OnEventSourceMessage; + EventSource.OnError -= OnEventSourceError; + EventSource.OnClosed -= OnEventSourceClosed; + + EventSource.Close(); + + EventSource = null; + } + + protected override void Started() + { + // Nothing to do here for this transport + } + + /// + /// A custom Abort function where we will start to close the EventSource object. + /// + public override void Abort() + { + base.Abort(); + + EventSource.Close(); + } + + protected override void Aborted() + { + if (this.State == TransportStates.Closing) + this.State = TransportStates.Closed; + } + + #endregion + + #region EventSource Event Handlers + + private void OnEventSourceOpen(EventSource eventSource) + { + HTTPManager.Logger.Information("Transport - " + this.Name, "OnEventSourceOpen"); + } + + private void OnEventSourceMessage(EventSource eventSource, BestHTTP.ServerSentEvents.Message message) + { + if (message.Data.Equals("initialized")) + { + base.OnConnected(); + + return; + } + + IServerMessage msg = TransportBase.Parse(Connection.JsonEncoder, message.Data); + + if (msg != null) + Connection.OnMessage(msg); + + } + + private void OnEventSourceError(EventSource eventSource, string error) + { + HTTPManager.Logger.Information("Transport - " + this.Name, "OnEventSourceError"); + + // We are in a reconnecting phase, we have to connect now. + if (this.State == TransportStates.Reconnecting) + { + Connect(); + return; + } + + // Already closed? + if (this.State == TransportStates.Closed) + return; + + // Closing? Then we are closed now. + if (this.State == TransportStates.Closing) + this.State = TransportStates.Closed; + else // Errored when we didn't expected it. + Connection.Error(error); + } + + private void OnEventSourceClosed(ServerSentEvents.EventSource eventSource) + { + HTTPManager.Logger.Information("Transport - " + this.Name, "OnEventSourceClosed"); + + OnEventSourceError(eventSource, "EventSource Closed!"); + } + + #endregion + } +} + +#endif +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/ServerSentEventsTransport.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/ServerSentEventsTransport.cs.meta new file mode 100644 index 000000000..218dab36c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/ServerSentEventsTransport.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b8c1fc0aacfa94c4793a2e8958a34058 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/TransportBase.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/TransportBase.cs new file mode 100644 index 000000000..3e11dc1ae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/TransportBase.cs @@ -0,0 +1,386 @@ +#if !BESTHTTP_DISABLE_SIGNALR + +using System; +using System.Collections.Generic; + +using BestHTTP.SignalR.Messages; +using BestHTTP.SignalR.JsonEncoders; + +namespace BestHTTP.SignalR.Transports +{ + public delegate void OnTransportStateChangedDelegate(TransportBase transport, TransportStates oldState, TransportStates newState); + + public abstract class TransportBase + { + private const int MaxRetryCount = 5; + + #region Public Properties + + /// + /// Name of the transport. + /// + public string Name { get; protected set; } + + /// + /// True if the manager has to check the last message received time and reconnect if too much time passes. + /// + public abstract bool SupportsKeepAlive { get; } + + /// + /// Type of the transport. Used mainly by the manager in its BuildUri function. + /// + public abstract TransportTypes Type { get; } + + /// + /// Reference to the manager. + /// + public IConnection Connection { get; protected set; } + + /// + /// The current state of the transport. + /// + public TransportStates State + { + get { return _state; } + protected set + { + TransportStates old = _state; + _state = value; + + if (OnStateChanged != null) + OnStateChanged(this, old, _state); + } + } + public TransportStates _state; + + /// + /// Thi event called when the transport's State set to a new value. + /// + public event OnTransportStateChangedDelegate OnStateChanged; + + #endregion + + public TransportBase(string name, Connection connection) + { + this.Name = name; + this.Connection = connection; + this.State = TransportStates.Initial; + } + + #region Abstract functions + + /// + /// Start to connect to the server + /// + public abstract void Connect(); + + /// + /// Stop the connection + /// + public abstract void Stop(); + + /// + /// The transport specific implementation to send the given json string to the server. + /// + protected abstract void SendImpl(string json); + + /// + /// Called when the Start request finished successfully, or after a reconnect. + /// Manager.TransportOpened(); called from the TransportBase after this call + /// + protected abstract void Started(); + + /// + /// Called when the abort request finished successfully. + /// + protected abstract void Aborted(); + + #endregion + + /// + /// Called after a succesful connect/reconnect. The transport implementations have to call this function. + /// + protected void OnConnected() + { + if (this.State != TransportStates.Reconnecting) + { + // Send the Start request + Start(); + } + else + { + Connection.TransportReconnected(); + + Started(); + + this.State = TransportStates.Started; + } + } + + #region Start Request Sending + + /// + /// Sends out the /start request to the server. + /// + protected void Start() + { + HTTPManager.Logger.Information("Transport - " + this.Name, "Sending Start Request"); + + this.State = TransportStates.Starting; + + if (this.Connection.Protocol > ProtocolVersions.Protocol_2_0) + { + var request = new HTTPRequest(Connection.BuildUri(RequestTypes.Start, this), HTTPMethods.Get, true, true, OnStartRequestFinished); + + request.Tag = 0; + request.MaxRetries = 0; + + request.Timeout = Connection.NegotiationResult.ConnectionTimeout + TimeSpan.FromSeconds(10); + + Connection.PrepareRequest(request, RequestTypes.Start); + + request.Send(); + } + else + { + // The transport and the signalr protocol now started + this.State = TransportStates.Started; + + Started(); + + Connection.TransportStarted(); + } + } + + private void OnStartRequestFinished(HTTPRequest req, HTTPResponse resp) + { + switch (req.State) + { + case HTTPRequestStates.Finished: + if (resp.IsSuccess) + { + HTTPManager.Logger.Information("Transport - " + this.Name, "Start - Returned: " + resp.DataAsText); + + string response = Connection.ParseResponse(resp.DataAsText); + + if (response != "started") + { + Connection.Error(string.Format("Expected 'started' response, but '{0}' found!", response)); + return; + } + + // The transport and the signalr protocol now started + this.State = TransportStates.Started; + + Started(); + + Connection.TransportStarted(); + + return; + } + else + HTTPManager.Logger.Warning("Transport - " + this.Name, string.Format("Start - request finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2} Uri: {3}", + resp.StatusCode, + resp.Message, + resp.DataAsText, + req.CurrentUri)); + goto default; + + default: + HTTPManager.Logger.Information("Transport - " + this.Name, "Start request state: " + req.State.ToString()); + + // The request may not reached the server. Try it again. + int retryCount = (int)req.Tag; + if (retryCount++ < MaxRetryCount) + { + req.Tag = retryCount; + req.Send(); + } + else + Connection.Error("Failed to send Start request."); + + break; + } + } + + #endregion + + #region Abort Implementation + + /// + /// Will abort the transport. In SignalR 'Abort'ing is a graceful process, while 'Close'ing is a hard-abortion... + /// + public virtual void Abort() + { + if (this.State != TransportStates.Started) + return; + + this.State = TransportStates.Closing; + + var request = new HTTPRequest(Connection.BuildUri(RequestTypes.Abort, this), HTTPMethods.Get, true, true, OnAbortRequestFinished); + + // Retry counter + request.Tag = 0; + request.MaxRetries = 0; + + Connection.PrepareRequest(request, RequestTypes.Abort); + + request.Send(); + } + + protected void AbortFinished() + { + this.State = TransportStates.Closed; + + Connection.TransportAborted(); + + this.Aborted(); + } + + private void OnAbortRequestFinished(HTTPRequest req, HTTPResponse resp) + { + switch (req.State) + { + case HTTPRequestStates.Finished: + if (resp.IsSuccess) + { + HTTPManager.Logger.Information("Transport - " + this.Name, "Abort - Returned: " + resp.DataAsText); + + if (this.State == TransportStates.Closing) + AbortFinished(); + } + else + { + HTTPManager.Logger.Warning("Transport - " + this.Name, string.Format("Abort - Handshake request finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2} Uri: {3}", + resp.StatusCode, + resp.Message, + resp.DataAsText, + req.CurrentUri)); + + // try again + goto default; + } + break; + default: + HTTPManager.Logger.Information("Transport - " + this.Name, "Abort request state: " + req.State.ToString()); + + // The request may not reached the server. Try it again. + int retryCount = (int)req.Tag; + if (retryCount++ < MaxRetryCount) + { + req.Tag = retryCount; + req.Send(); + } + else + Connection.Error("Failed to send Abort request!"); + + break; + } + } + + #endregion + + #region Send Implementation + + /// + /// Sends the given json string to the wire. + /// + /// + public void Send(string jsonStr) + { + try + { + HTTPManager.Logger.Information("Transport - " + this.Name, "Sending: " + jsonStr); + + SendImpl(jsonStr); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("Transport - " + this.Name, "Send", ex); + } + } + + #endregion + + #region Helper Functions + + /// + /// Start the reconnect process + /// + public void Reconnect() + { + HTTPManager.Logger.Information("Transport - " + this.Name, "Reconnecting"); + + Stop(); + + this.State = TransportStates.Reconnecting; + + Connect(); + } + + /// + /// When the json string is successfully parsed will return with an IServerMessage implementation. + /// + public static IServerMessage Parse(IJsonEncoder encoder, string json) + { + // Nothing to parse? + if (string.IsNullOrEmpty(json)) + { + HTTPManager.Logger.Error("MessageFactory", "Parse - called with empty or null string!"); + return null; + } + + // We don't have to do further decoding, if it's an empty json object, then it's a KeepAlive message from the server + if (json.Length == 2 && json == "{}") + return new KeepAliveMessage(); + + IDictionary msg = null; + + try + { + // try to decode the json message with the encoder + msg = encoder.DecodeMessage(json); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("MessageFactory", "Parse - encoder.DecodeMessage", ex); + return null; + } + + if (msg == null) + { + HTTPManager.Logger.Error("MessageFactory", "Parse - Json Decode failed for json string: \"" + json + "\""); + return null; + } + + // "C" is for message id + IServerMessage result = null; + if (!msg.ContainsKey("C")) + { + // If there are no ErrorMessage in the object, then it was a success + if (!msg.ContainsKey("E")) + result = new ResultMessage(); + else + result = new FailureMessage(); + } + else + result = new MultiMessage(); + + try + { + result.Parse(msg); + } + catch + { + HTTPManager.Logger.Error("MessageFactory", "Can't parse msg: " + json); + throw; + } + + return result; + } + + #endregion + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/TransportBase.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/TransportBase.cs.meta new file mode 100644 index 000000000..88831c2b2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/TransportBase.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 469a77c43ea68f14da659401301834f5 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/WebSocketTransport.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/WebSocketTransport.cs new file mode 100644 index 000000000..d26f6a003 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/WebSocketTransport.cs @@ -0,0 +1,174 @@ +#if !BESTHTTP_DISABLE_SIGNALR +#if !BESTHTTP_DISABLE_WEBSOCKET + +using System; +using System.Text; + +using BestHTTP; +using BestHTTP.JSON; +using BestHTTP.SignalR.Hubs; +using BestHTTP.SignalR.Messages; +using BestHTTP.SignalR.JsonEncoders; + +namespace BestHTTP.SignalR.Transports +{ + public sealed class WebSocketTransport : TransportBase + { + #region Overridden Properties + + public override bool SupportsKeepAlive { get { return true; } } + public override TransportTypes Type { get { return TransportTypes.WebSocket; } } + + #endregion + + private WebSocket.WebSocket wSocket; + + public WebSocketTransport(Connection connection) + : base("webSockets", connection) + { + } + + #region Overrides from TransportBase + + /// + /// Websocket transport specific connection logic. It will create a WebSocket instance, and starts to connect to the server. + /// + public override void Connect() + { + if (wSocket != null) + { + HTTPManager.Logger.Warning("WebSocketTransport", "Start - WebSocket already created!"); + return; + } + + // Skip the Connecting state if we are reconnecting. If the connect succeeds, we will set the Started state directly + if (this.State != TransportStates.Reconnecting) + this.State = TransportStates.Connecting; + + RequestTypes requestType = this.State == TransportStates.Reconnecting ? RequestTypes.Reconnect : RequestTypes.Connect; + + Uri uri = Connection.BuildUri(requestType, this); + + // Create the WebSocket instance + wSocket = new WebSocket.WebSocket(uri); + + // Set up eventhandlers + wSocket.OnOpen += WSocket_OnOpen; + wSocket.OnMessage += WSocket_OnMessage; + wSocket.OnClosed += WSocket_OnClosed; + wSocket.OnError += WSocket_OnError; + +#if !UNITY_WEBGL || UNITY_EDITOR + // prepare the internal http request + wSocket.OnInternalRequestCreated = (ws, internalRequest) => Connection.PrepareRequest(internalRequest, requestType); +#endif + + // start opening the websocket protocol + wSocket.Open(); + } + + protected override void SendImpl(string json) + { + if (wSocket != null && wSocket.IsOpen) + wSocket.Send(json); + } + + public override void Stop() + { + if (wSocket != null) + { + wSocket.OnOpen = null; + wSocket.OnMessage = null; + wSocket.OnClosed = null; + wSocket.OnError = null; + wSocket.Close(); + wSocket = null; + } + } + + protected override void Started() + { + // Nothing to be done here for this transport + } + + /// + /// The /abort request successfully finished + /// + protected override void Aborted() + { + // if the websocket is still open, close it + if (wSocket != null && wSocket.IsOpen) + { + wSocket.Close(); + wSocket = null; + } + } + +#endregion + +#region WebSocket Events + + void WSocket_OnOpen(WebSocket.WebSocket webSocket) + { + if (webSocket != wSocket) + return; + + HTTPManager.Logger.Information("WebSocketTransport", "WSocket_OnOpen"); + + OnConnected(); + } + + void WSocket_OnMessage(WebSocket.WebSocket webSocket, string message) + { + if (webSocket != wSocket) + return; + + IServerMessage msg = TransportBase.Parse(Connection.JsonEncoder, message); + + if (msg != null) + Connection.OnMessage(msg); + } + + void WSocket_OnClosed(WebSocket.WebSocket webSocket, ushort code, string message) + { + if (webSocket != wSocket) + return; + + string reason = code.ToString() + " : " + message; + + HTTPManager.Logger.Information("WebSocketTransport", "WSocket_OnClosed " + reason); + + if (this.State == TransportStates.Closing) + this.State = TransportStates.Closed; + else + Connection.Error(reason); + } + + void WSocket_OnError(WebSocket.WebSocket webSocket, string reason) + { + if (webSocket != wSocket) + return; + + // On WP8.1, somehow we receive an exception that the remote server forcibly closed the connection instead of the + // WebSocket closed packet... Also, even the /abort request didn't finished. + if (this.State == TransportStates.Closing || + this.State == TransportStates.Closed) + { + base.AbortFinished(); + } + else + { + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Error("WebSocketTransport", "WSocket_OnError " + reason); + + this.State = TransportStates.Closed; + Connection.Error(reason); + } + } + +#endregion + } +} + +#endif +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/WebSocketTransport.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/WebSocketTransport.cs.meta new file mode 100644 index 000000000..e969abb9d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalR/Transports/WebSocketTransport.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5efa5f8b9a034084b87f47b2b74b8173 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore.meta new file mode 100644 index 000000000..81f6b4f15 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fe53b9220e298d844bd0d53106307094 +folderAsset: yes +timeCreated: 1515237542 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Authentication.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Authentication.meta new file mode 100644 index 000000000..347a9ccb4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Authentication.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a3fe10bda4c195348b779c549e20e0d4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Authentication/DefaultAccessTokenAuthenticator.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Authentication/DefaultAccessTokenAuthenticator.cs new file mode 100644 index 000000000..c1ee7f177 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Authentication/DefaultAccessTokenAuthenticator.cs @@ -0,0 +1,97 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE +using System; + +namespace BestHTTP.SignalRCore.Authentication +{ + public sealed class DefaultAccessTokenAuthenticator : IAuthenticationProvider + { + /// + /// No pre-auth step required for this type of authentication + /// + public bool IsPreAuthRequired { get { return false; } } + +#pragma warning disable 0067 + /// + /// Not used event as IsPreAuthRequired is false + /// + public event OnAuthenticationSuccededDelegate OnAuthenticationSucceded; + + /// + /// Not used event as IsPreAuthRequired is false + /// + public event OnAuthenticationFailedDelegate OnAuthenticationFailed; + +#pragma warning restore 0067 + + private HubConnection _connection; + + public DefaultAccessTokenAuthenticator(HubConnection connection) + { + this._connection = connection; + } + + /// + /// Not used as IsPreAuthRequired is false + /// + public void StartAuthentication() + { } + + /// + /// Prepares the request by adding two headers to it + /// + public void PrepareRequest(BestHTTP.HTTPRequest request) + { + if (this._connection.NegotiationResult == null) + return; + + // Add Authorization header to http requests, add access_token param to the uri otherwise + if (BestHTTP.Connections.HTTPProtocolFactory.GetProtocolFromUri(request.CurrentUri) == BestHTTP.Connections.SupportedProtocols.HTTP) + request.SetHeader("Authorization", "Bearer " + this._connection.NegotiationResult.AccessToken); + else +#if !BESTHTTP_DISABLE_WEBSOCKET + if (BestHTTP.Connections.HTTPProtocolFactory.GetProtocolFromUri(request.Uri) != BestHTTP.Connections.SupportedProtocols.WebSocket) + request.Uri = PrepareUriImpl(request.Uri); +#else + ; +#endif + } + + public Uri PrepareUri(Uri uri) + { + if (this._connection.NegotiationResult == null) + return uri; + + if (uri.Query.StartsWith("??")) + { + UriBuilder builder = new UriBuilder(uri); + builder.Query = builder.Query.Substring(2); + + return builder.Uri; + } + +#if !BESTHTTP_DISABLE_WEBSOCKET + if (BestHTTP.Connections.HTTPProtocolFactory.GetProtocolFromUri(uri) == BestHTTP.Connections.SupportedProtocols.WebSocket) + uri = PrepareUriImpl(uri); +#endif + + return uri; + + } + + private Uri PrepareUriImpl(Uri uri) + { + if (this._connection.NegotiationResult != null && !string.IsNullOrEmpty(this._connection.NegotiationResult.AccessToken)) + { + string query = string.IsNullOrEmpty(uri.Query) ? "" : uri.Query + "&"; + UriBuilder uriBuilder = new UriBuilder(uri.Scheme, uri.Host, uri.Port, uri.AbsolutePath, query + "access_token=" + this._connection.NegotiationResult.AccessToken); + return uriBuilder.Uri; + } + + return uri; + } + + public void Cancel() + { } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Authentication/DefaultAccessTokenAuthenticator.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Authentication/DefaultAccessTokenAuthenticator.cs.meta new file mode 100644 index 000000000..c404a37c2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Authentication/DefaultAccessTokenAuthenticator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd70ac39ecb098a49b5a09eef4e516f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Extensions.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Extensions.cs new file mode 100644 index 000000000..42b5d0872 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Extensions.cs @@ -0,0 +1,208 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE +using System; + +namespace BestHTTP.SignalRCore +{ + public static class HubConnectionExtensions + { + public static UpStreamItemController GetUpAndDownStreamController(this HubConnection hub, string target) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 1, true, HubConnection.EmptyArgs); + } + + public static UpStreamItemController GetUpAndDownStreamController(this HubConnection hub, string target, params object[] args) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 1, true, args); + } + + public static UpStreamItemController GetUpAndDownStreamController(this HubConnection hub, string target) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 2, true, HubConnection.EmptyArgs); + } + + public static UpStreamItemController GetUpAndDownStreamController(this HubConnection hub, string target, params object[] args) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 2, true, args); + } + + public static UpStreamItemController GetUpAndDownStreamController(this HubConnection hub, string target) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 3, true, HubConnection.EmptyArgs); + } + + public static UpStreamItemController GetUpAndDownStreamController(this HubConnection hub, string target, params object[] args) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 3, true, args); + } + + public static UpStreamItemController GetUpAndDownStreamController(this HubConnection hub, string target) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 4, true, HubConnection.EmptyArgs); + } + + public static UpStreamItemController GetUpAndDownStreamController(this HubConnection hub, string target, params object[] args) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 4, true, args); + } + + public static UpStreamItemController GetUpAndDownStreamController(this HubConnection hub, string target) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 5, true, HubConnection.EmptyArgs); + } + + public static UpStreamItemController GetUpAndDownStreamController(this HubConnection hub, string target, params object[] args) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 5, true, args); + } + + public static UpStreamItemController GetUpStreamController(this HubConnection hub, string target) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 1, false, HubConnection.EmptyArgs); + } + + public static UpStreamItemController GetUpStreamController(this HubConnection hub, string target, params object[] args) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 1, false, args); + } + + public static UpStreamItemController GetUpStreamController(this HubConnection hub, string target) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 2, false, HubConnection.EmptyArgs); + } + + public static UpStreamItemController GetUpStreamController(this HubConnection hub, string target, params object[] args) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 2, false, args); + } + + public static UpStreamItemController GetUpStreamController(this HubConnection hub, string target) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 3, false, HubConnection.EmptyArgs); + } + + public static UpStreamItemController GetUpStreamController(this HubConnection hub, string target, params object[] args) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 3, false, args); + } + + public static UpStreamItemController GetUpStreamController(this HubConnection hub, string target) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 4, false, HubConnection.EmptyArgs); + } + + public static UpStreamItemController GetUpStreamController(this HubConnection hub, string target, params object[] args) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 4, false, args); + } + + public static UpStreamItemController GetUpStreamController(this HubConnection hub, string target) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 5, false, HubConnection.EmptyArgs); + } + + public static UpStreamItemController GetUpStreamController(this HubConnection hub, string target, params object[] args) + { + if (hub.State != ConnectionStates.Connected) + return null; + + return hub.GetUpStreamController(target, 5, false, args); + } + } + + public static class UploadItemControllerExtensions + { + public static void UploadParam(this UpStreamItemController controller, P1 item) + { + controller.UploadParam(controller.streamingIds[0], item); + } + + public static void UploadParam(this UpStreamItemController controller, P1 param1, P2 param2) + { + controller.UploadParam(controller.streamingIds[0], param1); + controller.UploadParam(controller.streamingIds[1], param2); + } + + public static void UploadParam(this UpStreamItemController controller, P1 param1, P2 param2, P3 param3) + { + controller.UploadParam(controller.streamingIds[0], param1); + controller.UploadParam(controller.streamingIds[1], param2); + controller.UploadParam(controller.streamingIds[2], param3); + } + + public static void UploadParam(this UpStreamItemController controller, P1 param1, P2 param2, P3 param3, P4 param4) + { + controller.UploadParam(controller.streamingIds[0], param1); + controller.UploadParam(controller.streamingIds[1], param2); + controller.UploadParam(controller.streamingIds[2], param3); + controller.UploadParam(controller.streamingIds[3], param4); + } + + public static void UploadParam(this UpStreamItemController controller, P1 param1, P2 param2, P3 param3, P4 param4, P5 param5) + { + controller.UploadParam(controller.streamingIds[0], param1); + controller.UploadParam(controller.streamingIds[1], param2); + controller.UploadParam(controller.streamingIds[2], param3); + controller.UploadParam(controller.streamingIds[3], param4); + controller.UploadParam(controller.streamingIds[4], param5); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Extensions.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Extensions.cs.meta new file mode 100644 index 000000000..35ad1189b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Extensions.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: de6901e8d7371ed4f9d7f256c9f52d5a +timeCreated: 1548919763 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/HelperClasses.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/HelperClasses.cs new file mode 100644 index 000000000..0d133370f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/HelperClasses.cs @@ -0,0 +1,297 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE +using System; +using System.Collections.Generic; +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP.SignalRCore +{ + public enum TransportTypes + { +#if !BESTHTTP_DISABLE_WEBSOCKET + WebSocket, +#endif + LongPolling + } + + public enum TransferModes + { + Binary, + Text + } + + public enum TransportStates + { + Initial, + Connecting, + Connected, + Closing, + Failed, + Closed + } + + /// + /// Possible states of a HubConnection + /// + public enum ConnectionStates + { + Initial, + Authenticating, + Negotiating, + Redirected, + Reconnecting, + Connected, + CloseInitiated, + Closed + } + + /// + /// States that a transport can goes trough as seen from 'outside'. + /// + public enum TransportEvents + { + /// + /// Transport is selected to try to connect to the server + /// + SelectedToConnect, + + /// + /// Transport failed to connect to the server. This event can occur after SelectedToConnect, when already connected and an error occurs it will be a ClosedWithError one. + /// + FailedToConnect, + + /// + /// The transport successfully connected to the server. + /// + Connected, + + /// + /// Transport gracefully terminated. + /// + Closed, + + /// + /// Unexpected error occured and the transport can't recover from it. + /// + ClosedWithError + } + + public interface ITransport + { + TransferModes TransferMode { get; } + TransportTypes TransportType { get; } + TransportStates State { get; } + + string ErrorReason { get; } + + event Action OnStateChanged; + + void StartConnect(); + void StartClose(); + + void Send(BufferSegment bufferSegment); + } + + public interface IEncoder + { + BufferSegment Encode(T value); + + T DecodeAs(BufferSegment buffer); + + object ConvertTo(Type toType, object obj); + } + + public sealed class StreamItemContainer + { + public readonly long id; + + public List Items { get; private set; } + public T LastAdded { get; private set; } + + public bool IsCanceled; + + public StreamItemContainer(long _id) + { + this.id = _id; + this.Items = new List(); + } + + public void AddItem(T item) + { + if (this.Items == null) + this.Items = new List(); + + this.Items.Add(item); + this.LastAdded = item; + } + } + + struct CallbackDescriptor + { + public readonly Type[] ParamTypes; + public readonly Action Callback; + public CallbackDescriptor(Type[] paramTypes, Action callback) + { + this.ParamTypes = paramTypes; + this.Callback = callback; + } + } + + struct FunctionCallbackDescriptor + { + public readonly Type ReturnType; + public readonly Type[] ParamTypes; + public readonly Func Callback; + + public FunctionCallbackDescriptor(Type returnType, Type[] paramTypes, Func callback) + { + this.ReturnType = returnType; + this.ParamTypes = paramTypes; + this.Callback = callback; + } + } + + internal struct InvocationDefinition + { + public Action callback; + public Type returnType; + } + + internal sealed class Subscription + { + public List callbacks = new List(1); + public List functionCallbacks; + + public void Add(Type[] paramTypes, Action callback) + { + this.callbacks.Add(new CallbackDescriptor(paramTypes, callback)); + } + + public void AddFunc(Type resultType, Type[] paramTypes, Func callback) + { + if (this.functionCallbacks == null) + this.functionCallbacks = new List(1); + + this.functionCallbacks.Add(new FunctionCallbackDescriptor(resultType, paramTypes, callback)); + } + } + + public sealed class WebsocketOptions + { +#if !BESTHTTP_DISABLE_WEBSOCKET && (!UNITY_WEBGL || UNITY_EDITOR) + public Func ExtensionsFactory { get; set; } = WebSocket.WebSocket.GetDefaultExtensions; + + public TimeSpan? PingIntervalOverride { get; set; } = TimeSpan.Zero; +#endif + } + + public sealed class HubOptions + { + /// + /// When this is set to true, the plugin will skip the negotiation request if the PreferedTransport is WebSocket. Its default value is false. + /// + public bool SkipNegotiation { get; set; } + + /// + /// The preferred transport to choose when more than one available. Its default value is TransportTypes.WebSocket. + /// + public TransportTypes PreferedTransport { get; set; } + + /// + /// A ping message is only sent if the interval has elapsed without a message being sent. Its default value is 15 seconds. + /// + public TimeSpan PingInterval { get; set; } + + /// + /// If the client doesn't see any message in this interval, considers the connection broken. Its default value is 30 seconds. + /// + public TimeSpan PingTimeoutInterval { get; set; } + + /// + /// The maximum count of redirect negotiation result that the plugin will follow. Its default value is 100. + /// + public int MaxRedirects { get; set; } + + /// + /// The maximum time that the plugin allowed to spend trying to connect. Its default value is 1 minute. + /// + public TimeSpan ConnectTimeout { get; set; } + + /// + /// Customization options for the websocket transport. + /// + public WebsocketOptions WebsocketOptions { get; set; } = new WebsocketOptions(); + + public HubOptions() + { + this.SkipNegotiation = false; +#if !BESTHTTP_DISABLE_WEBSOCKET + this.PreferedTransport = TransportTypes.WebSocket; +#else + this.PreferedTransport = TransportTypes.LongPolling; +#endif + this.PingInterval = TimeSpan.FromSeconds(15); + this.PingTimeoutInterval = TimeSpan.FromSeconds(30); + this.MaxRedirects = 100; + this.ConnectTimeout = TimeSpan.FromSeconds(60); + } + } + + public interface IRetryPolicy + { + /// + /// This function must return with a delay time to wait until a new connection attempt, or null to do not do another one. + /// + TimeSpan? GetNextRetryDelay(RetryContext context); + } + + public struct RetryContext + { + /// + /// Previous reconnect attempts. A successful connection sets it back to zero. + /// + public uint PreviousRetryCount; + + /// + /// Elapsed time since the original connection error. + /// + public TimeSpan ElapsedTime; + + /// + /// String representation of the connection error. + /// + public string RetryReason; + } + + public sealed class DefaultRetryPolicy : IRetryPolicy + { + private static TimeSpan?[] DefaultBackoffTimes = new TimeSpan?[] + { + TimeSpan.Zero, + TimeSpan.FromSeconds(2), + TimeSpan.FromSeconds(10), + TimeSpan.FromSeconds(30), + null + }; + + TimeSpan?[] backoffTimes; + + public DefaultRetryPolicy() + { + this.backoffTimes = DefaultBackoffTimes; + } + + public DefaultRetryPolicy(TimeSpan?[] customBackoffTimes) + { + this.backoffTimes = customBackoffTimes; + } + + public TimeSpan? GetNextRetryDelay(RetryContext context) + { + if (context.PreviousRetryCount >= this.backoffTimes.Length) + return null; + + return this.backoffTimes[context.PreviousRetryCount]; + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/HelperClasses.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/HelperClasses.cs.meta new file mode 100644 index 000000000..5180aee9c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/HelperClasses.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 6742bc413b5a23041b937fb3ee3b12d8 +timeCreated: 1515237548 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/HubConnection.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/HubConnection.cs new file mode 100644 index 000000000..3b449bce5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/HubConnection.cs @@ -0,0 +1,1537 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE + +using System.Threading; +#if CSHARP_7_OR_LATER +using System.Threading.Tasks; +#endif + +using BestHTTP.Futures; +using BestHTTP.SignalRCore.Authentication; +using BestHTTP.SignalRCore.Messages; +using System; +using System.Collections.Generic; +using BestHTTP.Logger; +using System.Collections.Concurrent; +using BestHTTP.PlatformSupport.Threading; + +namespace BestHTTP.SignalRCore +{ + public sealed class HubConnection : BestHTTP.Extensions.IHeartbeat + { + public static readonly object[] EmptyArgs = new object[0]; + + /// + /// Uri of the Hub endpoint + /// + public Uri Uri { get; private set; } + + /// + /// Current state of this connection. + /// + public ConnectionStates State { + get { return (ConnectionStates)this._state; } + private set { + Interlocked.Exchange(ref this._state, (int)value); + } + } + private volatile int _state; + + /// + /// Current, active ITransport instance. + /// + public ITransport Transport { get; private set; } + + /// + /// The IProtocol implementation that will parse, encode and decode messages. + /// + public IProtocol Protocol { get; private set; } + + /// + /// This event is called when the connection is redirected to a new uri. + /// + public event Action OnRedirected; + + /// + /// This event is called when successfully connected to the hub. + /// + public event Action OnConnected; + + /// + /// This event is called when an unexpected error happen and the connection is closed. + /// + public event Action OnError; + + /// + /// This event is called when the connection is gracefully terminated. + /// + public event Action OnClosed; + + /// + /// This event is called for every server-sent message. When returns false, no further processing of the message is done by the plugin. + /// + public event Func OnMessage; + + /// + /// Called when the HubConnection start its reconnection process after loosing its underlying connection. + /// + public event Action OnReconnecting; + + /// + /// Called after a successful reconnection. + /// + public event Action OnReconnected; + + /// + /// Called for transport related events. + /// + public event Action OnTransportEvent; + + /// + /// An IAuthenticationProvider implementation that will be used to authenticate the connection. + /// + public IAuthenticationProvider AuthenticationProvider { get; set; } + + /// + /// Negotiation response sent by the server. + /// + public NegotiationResult NegotiationResult { get; private set; } + + /// + /// Options that has been used to create the HubConnection. + /// + public HubOptions Options { get; private set; } + + /// + /// How many times this connection is redirected. + /// + public int RedirectCount { get; private set; } + + /// + /// The reconnect policy that will be used when the underlying connection is lost. Its default value is null. + /// + public IRetryPolicy ReconnectPolicy { get; set; } + + /// + /// Logging context of this HubConnection instance. + /// + public LoggingContext Context { get; private set; } + + /// + /// This will be increment to add a unique id to every message the plugin will send. + /// + private long lastInvocationId = 1; + + /// + /// Id of the last streaming parameter. + /// + private int lastStreamId = 1; + + /// + /// Store the callback for all sent message that expect a return value from the server. All sent message has + /// a unique invocationId that will be sent back from the server. + /// + private ConcurrentDictionary invocations = new ConcurrentDictionary(); + + /// + /// This is where we store the methodname => callback mapping. + /// + private ConcurrentDictionary subscriptions = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); + + /// + /// When we sent out the last message to the server. + /// + private DateTime lastMessageSentAt; + private DateTime lastMessageReceivedAt; + + private DateTime connectionStartedAt; + + private RetryContext currentContext; + private DateTime reconnectStartTime = DateTime.MinValue; + private DateTime reconnectAt; + + private List triedoutTransports = new List(); + + private ReaderWriterLockSlim rwLock = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion); + + private bool pausedInLastFrame; + + public HubConnection(Uri hubUri, IProtocol protocol) + : this(hubUri, protocol, new HubOptions()) + { + } + + public HubConnection(Uri hubUri, IProtocol protocol, HubOptions options) + { + this.Context = new LoggingContext(this); + + this.Uri = hubUri; + this.State = ConnectionStates.Initial; + this.Options = options; + this.Protocol = protocol; + this.Protocol.Connection = this; + this.AuthenticationProvider = new DefaultAccessTokenAuthenticator(this); + } + + public void StartConnect() + { + if (this.State != ConnectionStates.Initial && + this.State != ConnectionStates.Redirected && + this.State != ConnectionStates.Reconnecting) + { + HTTPManager.Logger.Warning("HubConnection", "StartConnect - Expected Initial or Redirected state, got " + this.State.ToString(), this.Context); + return; + } + + if (this.State == ConnectionStates.Initial) + { + this.connectionStartedAt = DateTime.Now; + HTTPManager.Heartbeats.Subscribe(this); + } + + HTTPManager.Logger.Verbose("HubConnection", $"StartConnect State: {this.State}, connectionStartedAt: {this.connectionStartedAt.ToString(System.Globalization.CultureInfo.InvariantCulture)}", this.Context); + + if (this.AuthenticationProvider != null && this.AuthenticationProvider.IsPreAuthRequired) + { + HTTPManager.Logger.Information("HubConnection", "StartConnect - Authenticating", this.Context); + + SetState(ConnectionStates.Authenticating, null, this.defaultReconnect); + + this.AuthenticationProvider.OnAuthenticationSucceded += OnAuthenticationSucceded; + this.AuthenticationProvider.OnAuthenticationFailed += OnAuthenticationFailed; + + // Start the authentication process + this.AuthenticationProvider.StartAuthentication(); + } + else + StartNegotiation(); + } + +#if CSHARP_7_OR_LATER + + TaskCompletionSource connectAsyncTaskCompletionSource; + + public Task ConnectAsync() + { + if (this.State != ConnectionStates.Initial && this.State != ConnectionStates.Redirected && this.State != ConnectionStates.Reconnecting) + throw new Exception("HubConnection - ConnectAsync - Expected Initial or Redirected state, got " + this.State.ToString()); + + if (this.connectAsyncTaskCompletionSource != null) + throw new Exception("Connect process already started!"); + + this.connectAsyncTaskCompletionSource = new TaskCompletionSource(); + + this.OnConnected += OnAsyncConnectedCallback; + this.OnError += OnAsyncConnectFailedCallback; + + this.StartConnect(); + + return connectAsyncTaskCompletionSource.Task; + } + + private void OnAsyncConnectedCallback(HubConnection hub) + { + this.OnConnected -= OnAsyncConnectedCallback; + this.OnError -= OnAsyncConnectFailedCallback; + + this.connectAsyncTaskCompletionSource.TrySetResult(this); + this.connectAsyncTaskCompletionSource = null; + } + + private void OnAsyncConnectFailedCallback(HubConnection hub, string error) + { + this.OnConnected -= OnAsyncConnectedCallback; + this.OnError -= OnAsyncConnectFailedCallback; + + this.connectAsyncTaskCompletionSource.TrySetException(new Exception(error)); + this.connectAsyncTaskCompletionSource = null; + } + +#endif + + private void OnAuthenticationSucceded(IAuthenticationProvider provider) + { + HTTPManager.Logger.Verbose("HubConnection", "OnAuthenticationSucceded", this.Context); + + this.AuthenticationProvider.OnAuthenticationSucceded -= OnAuthenticationSucceded; + this.AuthenticationProvider.OnAuthenticationFailed -= OnAuthenticationFailed; + + StartNegotiation(); + } + + private void OnAuthenticationFailed(IAuthenticationProvider provider, string reason) + { + HTTPManager.Logger.Error("HubConnection", "OnAuthenticationFailed: " + reason, this.Context); + + this.AuthenticationProvider.OnAuthenticationSucceded -= OnAuthenticationSucceded; + this.AuthenticationProvider.OnAuthenticationFailed -= OnAuthenticationFailed; + + SetState(ConnectionStates.Closed, reason, this.defaultReconnect); + } + + private void StartNegotiation() + { + HTTPManager.Logger.Verbose("HubConnection", "StartNegotiation", this.Context); + + if (this.State == ConnectionStates.CloseInitiated) + { + SetState(ConnectionStates.Closed, null, this.defaultReconnect); + return; + } + +#if !BESTHTTP_DISABLE_WEBSOCKET + if (this.Options.SkipNegotiation && this.Options.PreferedTransport == TransportTypes.WebSocket) + { + HTTPManager.Logger.Verbose("HubConnection", "Skipping negotiation", this.Context); + ConnectImpl(this.Options.PreferedTransport); + + return; + } +#endif + + SetState(ConnectionStates.Negotiating, null, this.defaultReconnect); + + // https://github.com/dotnet/aspnetcore/blob/master/src/SignalR/docs/specs/TransportProtocols.md#post-endpoint-basenegotiate-request + // Send out a negotiation request. While we could skip it and connect right with the websocket transport + // it might return with additional information that could be useful. + + UriBuilder builder = new UriBuilder(this.Uri); + if (builder.Path.EndsWith("/")) + builder.Path += "negotiate"; + else + builder.Path += "/negotiate"; + + string query = builder.Query; + if (string.IsNullOrEmpty(query)) + query = "negotiateVersion=1"; + else + query = query.Remove(0, 1) + "&negotiateVersion=1"; + + builder.Query = query; + + var request = new HTTPRequest(builder.Uri, HTTPMethods.Post, OnNegotiationRequestFinished); + request.Context.Add("Hub", this.Context); + + if (this.AuthenticationProvider != null) + this.AuthenticationProvider.PrepareRequest(request); + + request.Send(); + } + + private void ConnectImpl(TransportTypes transport) + { + HTTPManager.Logger.Verbose("HubConnection", "ConnectImpl - " + transport, this.Context); + + switch (transport) + { +#if !BESTHTTP_DISABLE_WEBSOCKET + case TransportTypes.WebSocket: + if (this.NegotiationResult != null && !IsTransportSupported("WebSockets")) + { + SetState(ConnectionStates.Closed, "Couldn't use preferred transport, as the 'WebSockets' transport isn't supported by the server!", this.defaultReconnect); + return; + } + + this.Transport = new Transports.WebSocketTransport(this); + this.Transport.OnStateChanged += Transport_OnStateChanged; + break; +#endif + + case TransportTypes.LongPolling: + if (this.NegotiationResult != null && !IsTransportSupported("LongPolling")) + { + SetState(ConnectionStates.Closed, "Couldn't use preferred transport, as the 'LongPolling' transport isn't supported by the server!", this.defaultReconnect); + return; + } + + this.Transport = new Transports.LongPollingTransport(this); + this.Transport.OnStateChanged += Transport_OnStateChanged; + break; + + default: + SetState(ConnectionStates.Closed, "Unsupported transport: " + transport, this.defaultReconnect); + break; + } + + try + { + if (this.OnTransportEvent != null) + this.OnTransportEvent(this, this.Transport, TransportEvents.SelectedToConnect); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "ConnectImpl - OnTransportEvent exception in user code!", ex, this.Context); + } + + this.Transport.StartConnect(); + } + + private bool IsTransportSupported(string transportName) + { + // https://github.com/dotnet/aspnetcore/blob/master/src/SignalR/docs/specs/TransportProtocols.md#post-endpoint-basenegotiate-request + // If the negotiation response contains only the url and accessToken, no 'availableTransports' list is sent + if (this.NegotiationResult.SupportedTransports == null) + return true; + + for (int i = 0; i < this.NegotiationResult.SupportedTransports.Count; ++i) + if (this.NegotiationResult.SupportedTransports[i].Name.Equals(transportName, StringComparison.OrdinalIgnoreCase)) + return true; + + return false; + } + + private void OnNegotiationRequestFinished(HTTPRequest req, HTTPResponse resp) + { + if (this.State == ConnectionStates.Closed) + return; + + if (this.State == ConnectionStates.CloseInitiated) + { + SetState(ConnectionStates.Closed, null, this.defaultReconnect); + return; + } + + string errorReason = null; + + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + if (resp.IsSuccess) + { + HTTPManager.Logger.Information("HubConnection", "Negotiation Request Finished Successfully! Response: " + resp.DataAsText, this.Context); + + // Parse negotiation + this.NegotiationResult = NegotiationResult.Parse(resp, out errorReason, this); + + // Room for improvement: check validity of the negotiation result: + // If url and accessToken is present, the other two must be null. + // https://github.com/dotnet/aspnetcore/blob/master/src/SignalR/docs/specs/TransportProtocols.md#post-endpoint-basenegotiate-request + + if (string.IsNullOrEmpty(errorReason)) + { + if (this.NegotiationResult.Url != null) + { + this.SetState(ConnectionStates.Redirected, null, this.defaultReconnect); + + if (++this.RedirectCount >= this.Options.MaxRedirects) + errorReason = string.Format("MaxRedirects ({0:N0}) reached!", this.Options.MaxRedirects); + else + { + var oldUri = this.Uri; + this.Uri = this.NegotiationResult.Url; + + if (this.OnRedirected != null) + { + try + { + this.OnRedirected(this, oldUri, Uri); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "OnNegotiationRequestFinished - OnRedirected", ex, this.Context); + } + } + + StartConnect(); + } + } + else + ConnectImpl(this.Options.PreferedTransport); + } + } + else // Internal server error? + errorReason = string.Format("Negotiation Request Finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}", + resp.StatusCode, + resp.Message, + resp.DataAsText); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + errorReason = "Negotiation Request Finished with Error! " + (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception"); + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + errorReason = "Negotiation Request Aborted!"; + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + errorReason = "Negotiation Request - Connection Timed Out!"; + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + errorReason = "Negotiation Request - Processing the request Timed Out!"; + break; + } + + if (errorReason != null) + { + this.NegotiationResult = new NegotiationResult(); + this.NegotiationResult.NegotiationResponse = resp; + + SetState(ConnectionStates.Closed, errorReason, this.defaultReconnect); + } + } + + public void StartClose() + { + HTTPManager.Logger.Verbose("HubConnection", "StartClose", this.Context); + this.defaultReconnect = false; + + switch(this.State) + { + case ConnectionStates.Initial: + SetState(ConnectionStates.Closed, null, this.defaultReconnect); + break; + + case ConnectionStates.Authenticating: + this.AuthenticationProvider.OnAuthenticationSucceded -= OnAuthenticationSucceded; + this.AuthenticationProvider.OnAuthenticationFailed -= OnAuthenticationFailed; + this.AuthenticationProvider.Cancel(); + SetState(ConnectionStates.Closed, null, this.defaultReconnect); + break; + + case ConnectionStates.Reconnecting: + SetState(ConnectionStates.Closed, null, this.defaultReconnect); + break; + + case ConnectionStates.CloseInitiated: + case ConnectionStates.Closed: + // Already initiated/closed + break; + + default: + if (HTTPManager.IsQuitting) + { + SetState(ConnectionStates.Closed, null, this.defaultReconnect); + } + else + { + SetState(ConnectionStates.CloseInitiated, null, this.defaultReconnect); + + if (this.Transport != null) + this.Transport.StartClose(); + } + break; + } + } + +#if CSHARP_7_OR_LATER + + TaskCompletionSource closeAsyncTaskCompletionSource; + + public Task CloseAsync() + { + if (this.closeAsyncTaskCompletionSource != null) + throw new Exception("CloseAsync already called!"); + + this.closeAsyncTaskCompletionSource = new TaskCompletionSource(); + + this.OnClosed += OnClosedAsyncCallback; + this.OnError += OnClosedAsyncErrorCallback; + + // Avoid race condition by caching task prior to StartClose, + // which asynchronously calls OnClosedAsyncCallback, which nulls + // this.closeAsyncTaskCompletionSource immediately before we have + // a chance to read from it. + var task = this.closeAsyncTaskCompletionSource.Task; + + this.StartClose(); + + return task; + } + + void OnClosedAsyncCallback(HubConnection hub) + { + this.OnClosed -= OnClosedAsyncCallback; + this.OnError -= OnClosedAsyncErrorCallback; + + this.closeAsyncTaskCompletionSource.TrySetResult(this); + this.closeAsyncTaskCompletionSource = null; + } + + void OnClosedAsyncErrorCallback(HubConnection hub, string error) + { + this.OnClosed -= OnClosedAsyncCallback; + this.OnError -= OnClosedAsyncErrorCallback; + + this.closeAsyncTaskCompletionSource.TrySetException(new Exception(error)); + this.closeAsyncTaskCompletionSource = null; + } + +#endif + + public IFuture Invoke(string target, params object[] args) + { + Future future = new Future(); + + long id = InvokeImp(target, + args, + (message) => + { + bool isSuccess = string.IsNullOrEmpty(message.error); + if (isSuccess) + future.Assign((TResult)this.Protocol.ConvertTo(typeof(TResult), message.result)); + else + future.Fail(new Exception(message.error)); + }, + typeof(TResult)); + + if (id < 0) + future.Fail(new Exception("Not in Connected state! Current state: " + this.State)); + + return future; + } + +#if CSHARP_7_OR_LATER + + public Task InvokeAsync(string target, params object[] args) + { + return InvokeAsync(target, default(CancellationToken), args); + } + + public Task InvokeAsync(string target, CancellationToken cancellationToken = default, params object[] args) + { + TaskCompletionSource tcs = new TaskCompletionSource(); + long id = InvokeImp(target, + args, + (message) => + { + if (cancellationToken.IsCancellationRequested) + { + tcs.TrySetCanceled(cancellationToken); + return; + } + + bool isSuccess = string.IsNullOrEmpty(message.error); + if (isSuccess) + tcs.TrySetResult((TResult)this.Protocol.ConvertTo(typeof(TResult), message.result)); + else + tcs.TrySetException(new Exception(message.error)); + }, + typeof(TResult)); + + if (id < 0) + tcs.TrySetException(new Exception("Not in Connected state! Current state: " + this.State)); + else + cancellationToken.Register(() => tcs.TrySetCanceled()); + + return tcs.Task; + } + +#endif + + public IFuture Send(string target, params object[] args) + { + Future future = new Future(); + + long id = InvokeImp(target, + args, + (message) => + { + bool isSuccess = string.IsNullOrEmpty(message.error); + if (isSuccess) + future.Assign(message.item); + else + future.Fail(new Exception(message.error)); + }, + typeof(object)); + + if (id < 0) + future.Fail(new Exception("Not in Connected state! Current state: " + this.State)); + + return future; + } + +#if CSHARP_7_OR_LATER + + public Task SendAsync(string target, params object[] args) + { + return SendAsync(target, default(CancellationToken), args); + } + + public Task SendAsync(string target, CancellationToken cancellationToken = default, params object[] args) + { + TaskCompletionSource tcs = new TaskCompletionSource(); + + long id = InvokeImp(target, + args, + (message) => + { + if (cancellationToken.IsCancellationRequested) + { + tcs.TrySetCanceled(cancellationToken); + return; + } + + bool isSuccess = string.IsNullOrEmpty(message.error); + if (isSuccess) + tcs.TrySetResult(message.item); + else + tcs.TrySetException(new Exception(message.error)); + }, + typeof(object)); + + if (id < 0) + tcs.TrySetException(new Exception("Not in Connected state! Current state: " + this.State)); + else + cancellationToken.Register(() => tcs.TrySetCanceled()); + + return tcs.Task; + } + +#endif + + private long InvokeImp(string target, object[] args, Action callback, Type itemType, bool isStreamingInvocation = false) + { + if (this.State != ConnectionStates.Connected) + return -1; + + bool blockingInvocation = callback == null; + + long invocationId = blockingInvocation ? 0 : System.Threading.Interlocked.Increment(ref this.lastInvocationId); + var message = new Message + { + type = isStreamingInvocation ? MessageTypes.StreamInvocation : MessageTypes.Invocation, + invocationId = blockingInvocation ? null : invocationId.ToString(), + target = target, + arguments = args, + nonblocking = callback == null, + }; + + SendMessage(message); + + if (!blockingInvocation) + if (!this.invocations.TryAdd(invocationId, new InvocationDefinition { callback = callback, returnType = itemType })) + HTTPManager.Logger.Warning("HubConnection", "InvokeImp - invocations already contains id: " + invocationId, this.Context); + + return invocationId; + } + + internal void SendMessage(Message message) + { + // https://github.com/Benedicht/BestHTTP-Issues/issues/146 + if (this.State == ConnectionStates.Closed) + return; + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("HubConnection", "SendMessage: " + message.ToString(), this.Context); + + try + { + using (new WriteLock(this.rwLock)) + { + var encoded = this.Protocol.EncodeMessage(message); + if (encoded.Data != null) + { + this.lastMessageSentAt = DateTime.Now; + this.Transport.Send(encoded); + } + } + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "SendMessage", ex, this.Context); + } + } + + public DownStreamItemController GetDownStreamController(string target, params object[] args) + { + long invocationId = System.Threading.Interlocked.Increment(ref this.lastInvocationId); + + var future = new Future(); + future.BeginProcess(); + + var controller = new DownStreamItemController(this, invocationId, future); + + Action callback = (Message msg) => + { + switch (msg.type) + { + // StreamItem message contains only one item. + case MessageTypes.StreamItem: + { + if (controller.IsCanceled) + break; + + TDown item = (TDown)this.Protocol.ConvertTo(typeof(TDown), msg.item); + + future.AssignItem(item); + break; + } + + case MessageTypes.Completion: + { + bool isSuccess = string.IsNullOrEmpty(msg.error); + if (isSuccess) + { + // While completion message must not contain any result, this should be future-proof + if (!controller.IsCanceled && msg.result != null) + { + TDown result = (TDown)this.Protocol.ConvertTo(typeof(TDown), msg.result); + + future.AssignItem(result); + } + + future.Finish(); + } + else + future.Fail(new Exception(msg.error)); + break; + } + } + }; + + var message = new Message + { + type = MessageTypes.StreamInvocation, + invocationId = invocationId.ToString(), + target = target, + arguments = args, + nonblocking = false, + }; + + SendMessage(message); + + if (callback != null) + if (!this.invocations.TryAdd(invocationId, new InvocationDefinition { callback = callback, returnType = typeof(TDown) })) + HTTPManager.Logger.Warning("HubConnection", "GetDownStreamController - invocations already contains id: " + invocationId, this.Context); + + return controller; + } + + public UpStreamItemController GetUpStreamController(string target, int paramCount, bool downStream, object[] args) + { + Future future = new Future(); + future.BeginProcess(); + + long invocationId = System.Threading.Interlocked.Increment(ref this.lastInvocationId); + + string[] streamIds = new string[paramCount]; + for (int i = 0; i < paramCount; i++) + streamIds[i] = System.Threading.Interlocked.Increment(ref this.lastStreamId).ToString(); + + var controller = new UpStreamItemController(this, invocationId, streamIds, future); + + Action callback = (Message msg) => { + switch (msg.type) + { + // StreamItem message contains only one item. + case MessageTypes.StreamItem: + { + if (controller.IsCanceled) + break; + + TResult item = (TResult)this.Protocol.ConvertTo(typeof(TResult), msg.item); + + future.AssignItem(item); + break; + } + + case MessageTypes.Completion: + { + bool isSuccess = string.IsNullOrEmpty(msg.error); + if (isSuccess) + { + // While completion message must not contain any result, this should be future-proof + if (!controller.IsCanceled && msg.result != null) + { + TResult result = (TResult)this.Protocol.ConvertTo(typeof(TResult), msg.result); + + future.AssignItem(result); + } + + future.Finish(); + } + else + { + var ex = new Exception(msg.error); + future.Fail(ex); + } + break; + } + } + }; + + var messageToSend = new Message + { + type = downStream ? MessageTypes.StreamInvocation : MessageTypes.Invocation, + invocationId = invocationId.ToString(), + target = target, + arguments = args, + streamIds = streamIds, + nonblocking = false, + }; + + SendMessage(messageToSend); + + if (!this.invocations.TryAdd(invocationId, new InvocationDefinition { callback = callback, returnType = typeof(TResult) })) + HTTPManager.Logger.Warning("HubConnection", "GetUpStreamController - invocations already contains id: " + invocationId, this.Context); + + return controller; + } + + public void On(string methodName, Action callback) + { + On(methodName, null, (args) => callback()); + } + + public void On(string methodName, Action callback) + { + On(methodName, new Type[] { typeof(T1) }, (args) => callback((T1)args[0])); + } + + public void On(string methodName, Action callback) + { + On(methodName, + new Type[] { typeof(T1), typeof(T2) }, + (args) => callback((T1)args[0], (T2)args[1])); + } + + public void On(string methodName, Action callback) + { + On(methodName, + new Type[] { typeof(T1), typeof(T2), typeof(T3) }, + (args) => callback((T1)args[0], (T2)args[1], (T3)args[2])); + } + + public void On(string methodName, Action callback) + { + On(methodName, + new Type[] { typeof(T1), typeof(T2), typeof(T3), typeof(T4) }, + (args) => callback((T1)args[0], (T2)args[1], (T3)args[2], (T4)args[3])); + } + + private void On(string methodName, Type[] paramTypes, Action callback) + { + if (this.State >= ConnectionStates.CloseInitiated) + throw new Exception("Hub connection already closing or closed!"); + + this.subscriptions.GetOrAdd(methodName, _ => new Subscription()) + .Add(paramTypes, callback); + } + + public void On(string methodName, Func callback) + { + OnFunc(methodName, null, (args) => callback()); + } + + public void On(string methodName, Func callback) + { + OnFunc(methodName, new Type[] { typeof(T1) }, (args) => callback((T1)args[0])); + } + + public void On(string methodName, Func callback) + { + OnFunc(methodName, new Type[] { typeof(T1), typeof(T2) }, (args) => callback((T1)args[0], (T2)args[1])); + } + + public void On(string methodName, Func callback) + { + OnFunc(methodName, new Type[] { typeof(T1), typeof(T2), typeof(T3) }, (args) => callback((T1)args[0], (T2)args[1], (T3)args[2])); + } + + public void On(string methodName, Func callback) + { + OnFunc(methodName, new Type[] { typeof(T1), typeof(T2), typeof(T3), typeof(T4) }, (args) => callback((T1)args[0], (T2)args[1], (T3)args[2], (T4)args[3])); + } + + // https://github.com/dotnet/aspnetcore/issues/5280 + private void OnFunc(string methodName, Type[] paramTypes, Func callback) + { + this.subscriptions.GetOrAdd(methodName, _ => new Subscription()) + .AddFunc(typeof(Result), paramTypes, callback); + } + + /// + /// Remove all event handlers for that subscribed with an On call. + /// + public void Remove(string methodName) + { + if (this.State >= ConnectionStates.CloseInitiated) + throw new Exception("Hub connection already closing or closed!"); + + Subscription _; + this.subscriptions.TryRemove(methodName, out _); + } + + internal Subscription GetSubscription(string methodName) + { + Subscription subscribtion = null; + this.subscriptions.TryGetValue(methodName, out subscribtion); + return subscribtion; + } + + internal Type GetItemType(long invocationId) + { + InvocationDefinition def; + this.invocations.TryGetValue(invocationId, out def); + return def.returnType; + } + + List delayedMessages; + internal void OnMessages(List messages) + { + this.lastMessageReceivedAt = DateTime.Now; + + if (pausedInLastFrame) + { + if (this.delayedMessages == null) + this.delayedMessages = new List(messages.Count); + foreach(var msg in messages) + delayedMessages.Add(msg); + + messages.Clear(); + } + + for (int messageIdx = 0; messageIdx < messages.Count; ++messageIdx) + { + var message = messages[messageIdx]; + + if (this.OnMessage != null) + { + try + { + if (!this.OnMessage(this, message)) + continue; + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "Exception in OnMessage user code!", ex, this.Context); + } + } + + switch (message.type) + { + case MessageTypes.Handshake: + break; + + case MessageTypes.Invocation: + { + Subscription subscribtion = null; + if (this.subscriptions.TryGetValue(message.target, out subscribtion)) + { + if (subscribtion.callbacks?.Count == 0) + HTTPManager.Logger.Warning("HubConnection", $"No callback for invocation '{message.ToString()}'", this.Context); + + for (int i = 0; i < subscribtion.callbacks.Count; ++i) + { + var callbackDesc = subscribtion.callbacks[i]; + + object[] realArgs = null; + try + { + realArgs = this.Protocol.GetRealArguments(callbackDesc.ParamTypes, message.arguments); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "OnMessages - Invocation - GetRealArguments", ex, this.Context); + } + + try + { + callbackDesc.Callback.Invoke(realArgs); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "OnMessages - Invocation - Invoke", ex, this.Context); + } + } + + if (subscribtion.functionCallbacks?.Count == 0) + HTTPManager.Logger.Warning("HubConnection", $"No function callback for invocation '{message.ToString()}'", this.Context); + + if (subscribtion.functionCallbacks != null) + { + for (int i = 0; i < subscribtion.functionCallbacks.Count; ++i) + { + var callbackDesc = subscribtion.functionCallbacks[i]; + + object[] realArgs = null; + try + { + realArgs = this.Protocol.GetRealArguments(callbackDesc.ParamTypes, message.arguments); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "OnMessages - Function Invocation - GetRealArguments", ex, this.Context); + } + + try + { + var result = callbackDesc.Callback(realArgs); + + SendMessage(new Message + { + type = MessageTypes.Completion, + invocationId = message.invocationId, + result = result + }); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "OnMessages - Function Invocation - Invoke", ex, this.Context); + + SendMessage(new Message + { + type = MessageTypes.Completion, + invocationId = message.invocationId, + error = ex.Message + }); + } + } + } + } + else + HTTPManager.Logger.Warning("HubConnection", $"No subscription could be found for invocation '{message.ToString()}'", this.Context); + + break; + } + + case MessageTypes.StreamItem: + { + long invocationId; + if (long.TryParse(message.invocationId, out invocationId)) + { + InvocationDefinition def; + if (this.invocations.TryGetValue(invocationId, out def) && def.callback != null) + { + try + { + def.callback(message); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "OnMessages - StreamItem - callback", ex, this.Context); + } + } + } + break; + } + + case MessageTypes.Completion: + { + long invocationId; + if (long.TryParse(message.invocationId, out invocationId)) + { + InvocationDefinition def; + if (this.invocations.TryRemove(invocationId, out def) && def.callback != null) + { + try + { + def.callback(message); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "OnMessages - Completion - callback", ex, this.Context); + } + } + } + break; + } + + case MessageTypes.Ping: + // Send back an answer + SendMessage(new Message() { type = MessageTypes.Ping }); + break; + + case MessageTypes.Close: + SetState(ConnectionStates.Closed, message.error, message.allowReconnect); + if (this.Transport != null) + this.Transport.StartClose(); + return; + } + } + } + + private void Transport_OnStateChanged(TransportStates oldState, TransportStates newState) + { + HTTPManager.Logger.Verbose("HubConnection", string.Format("Transport_OnStateChanged - oldState: {0} newState: {1}", oldState.ToString(), newState.ToString()), this.Context); + + if (this.State == ConnectionStates.Closed) + { + HTTPManager.Logger.Verbose("HubConnection", "Transport_OnStateChanged - already closed!", this.Context); + return; + } + + switch (newState) + { + case TransportStates.Connected: + try + { + if (this.OnTransportEvent != null) + this.OnTransportEvent(this, this.Transport, TransportEvents.Connected); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "Exception in OnTransportEvent user code!", ex, this.Context); + } + + SetState(ConnectionStates.Connected, null, this.defaultReconnect); + break; + + case TransportStates.Failed: + if (this.State == ConnectionStates.Negotiating && !HTTPManager.IsQuitting) + { + try + { + if (this.OnTransportEvent != null) + this.OnTransportEvent(this, this.Transport, TransportEvents.FailedToConnect); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "Exception in OnTransportEvent user code!", ex, this.Context); + } + + this.triedoutTransports.Add(this.Transport.TransportType); + + var nextTransport = GetNextTransportToTry(); + if (nextTransport == null) + { + var reason = this.Transport.ErrorReason; + this.Transport = null; + + SetState(ConnectionStates.Closed, reason, this.defaultReconnect); + } + else + ConnectImpl(nextTransport.Value); + } + else + { + try + { + if (this.OnTransportEvent != null) + this.OnTransportEvent(this, this.Transport, TransportEvents.ClosedWithError); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "Exception in OnTransportEvent user code!", ex, this.Context); + } + + var reason = this.Transport.ErrorReason; + this.Transport = null; + + SetState(ConnectionStates.Closed, HTTPManager.IsQuitting ? null : reason, this.defaultReconnect); + } + break; + + case TransportStates.Closed: + { + try + { + if (this.OnTransportEvent != null) + this.OnTransportEvent(this, this.Transport, TransportEvents.Closed); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "Exception in OnTransportEvent user code!", ex, this.Context); + } + + // Check wheter we have any delayed message and a Close message among them. If there's one, delay the SetState(Close) too. + if (this.delayedMessages == null || this.delayedMessages.FindLast(dm => dm.type == MessageTypes.Close).type != MessageTypes.Close) + SetState(ConnectionStates.Closed, null, this.defaultReconnect); + } + break; + } + } + + private TransportTypes? GetNextTransportToTry() + { + foreach (TransportTypes val in Enum.GetValues(typeof(TransportTypes))) + if (!this.triedoutTransports.Contains(val) && IsTransportSupported(val.ToString())) + return val; + + return null; + } + + bool defaultReconnect = true; + private void SetState(ConnectionStates state, string errorReason, bool allowReconnect) + { + HTTPManager.Logger.Information("HubConnection", string.Format("SetState - from State: '{0}' to State: '{1}', errorReason: '{2}', allowReconnect: {3}, isQuitting: {4}", this.State, state, errorReason, allowReconnect, HTTPManager.IsQuitting), this.Context); + + if (this.State == state) + return; + + var previousState = this.State; + + this.State = state; + + switch (state) + { + case ConnectionStates.Initial: + case ConnectionStates.Authenticating: + case ConnectionStates.Negotiating: + case ConnectionStates.CloseInitiated: + break; + + case ConnectionStates.Reconnecting: + break; + + case ConnectionStates.Connected: + // If reconnectStartTime isn't its default value we reconnected + if (this.reconnectStartTime != DateTime.MinValue) + { + try + { + if (this.OnReconnected != null) + this.OnReconnected(this); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "OnReconnected", ex, this.Context); + } + } + else + { + try + { + if (this.OnConnected != null) + this.OnConnected(this); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "Exception in OnConnected user code!", ex, this.Context); + } + } + + this.lastMessageSentAt = DateTime.Now; + this.lastMessageReceivedAt = DateTime.Now; + + // Clean up reconnect related fields + this.currentContext = new RetryContext(); + this.reconnectStartTime = DateTime.MinValue; + this.reconnectAt = DateTime.MinValue; + + HTTPUpdateDelegator.OnApplicationForegroundStateChanged -= this.OnApplicationForegroundStateChanged; + HTTPUpdateDelegator.OnApplicationForegroundStateChanged += this.OnApplicationForegroundStateChanged; + + break; + + case ConnectionStates.Closed: + // Go through all invocations and cancel them. + var error = new Message(); + error.type = MessageTypes.Close; + error.error = errorReason; + + foreach (var kvp in this.invocations) + { + try + { + kvp.Value.callback(error); + } + catch + { } + } + + this.invocations.Clear(); + + // No errorReason? It's an expected closure. + if (errorReason == null && (!allowReconnect || HTTPManager.IsQuitting)) + { + if (this.OnClosed != null) + { + try + { + this.OnClosed(this); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "Exception in OnClosed user code!", ex, this.Context); + } + } + } + else + { + // If possible, try to reconnect + if (allowReconnect && this.ReconnectPolicy != null && (previousState == ConnectionStates.Connected || this.reconnectStartTime != DateTime.MinValue)) + { + // It's the first attempt after a successful connection + if (this.reconnectStartTime == DateTime.MinValue) + { + this.connectionStartedAt = this.reconnectStartTime = DateTime.Now; + + try + { + if (this.OnReconnecting != null) + this.OnReconnecting(this, errorReason); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "SetState - ConnectionStates.Reconnecting", ex, this.Context); + } + } + + RetryContext context = new RetryContext + { + ElapsedTime = DateTime.Now - this.reconnectStartTime, + PreviousRetryCount = this.currentContext.PreviousRetryCount, + RetryReason = errorReason + }; + + TimeSpan? nextAttempt = null; + try + { + nextAttempt = this.ReconnectPolicy.GetNextRetryDelay(context); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "ReconnectPolicy.GetNextRetryDelay", ex, this.Context); + } + + // No more reconnect attempt, we are closing + if (nextAttempt == null) + { + HTTPManager.Logger.Warning("HubConnection", "No more reconnect attempt!", this.Context); + + // Clean up everything + this.currentContext = new RetryContext(); + this.reconnectStartTime = DateTime.MinValue; + this.reconnectAt = DateTime.MinValue; + } + else + { + HTTPManager.Logger.Information("HubConnection", "Next reconnect attempt after " + nextAttempt.Value.ToString(), this.Context); + + this.currentContext = context; + this.currentContext.PreviousRetryCount += 1; + + this.reconnectAt = DateTime.Now + nextAttempt.Value; + + this.SetState(ConnectionStates.Reconnecting, null, this.defaultReconnect); + + return; + } + } + + if (this.OnError != null) + { + try + { + this.OnError(this, errorReason); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "Exception in OnError user code!", ex, this.Context); + } + } + } + break; + } + } + + private void OnApplicationForegroundStateChanged(bool isPaused) + { + pausedInLastFrame = !isPaused; + + HTTPManager.Logger.Information("HubConnection", $"OnApplicationForegroundStateChanged isPaused: {isPaused} pausedInLastFrame: {pausedInLastFrame}", this.Context); + } + + void BestHTTP.Extensions.IHeartbeat.OnHeartbeatUpdate(TimeSpan dif) + { + switch (this.State) + { + case ConnectionStates.Negotiating: + case ConnectionStates.Authenticating: + case ConnectionStates.Redirected: + if (DateTime.Now >= this.connectionStartedAt + this.Options.ConnectTimeout) + { + if (this.AuthenticationProvider != null) + { + this.AuthenticationProvider.OnAuthenticationSucceded -= OnAuthenticationSucceded; + this.AuthenticationProvider.OnAuthenticationFailed -= OnAuthenticationFailed; + + try + { + this.AuthenticationProvider.Cancel(); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("HubConnection", "Exception in AuthenticationProvider.Cancel !", ex, this.Context); + } + } + + if (this.Transport != null) + { + this.Transport.OnStateChanged -= Transport_OnStateChanged; + this.Transport.StartClose(); + } + + SetState(ConnectionStates.Closed, string.Format("Couldn't connect in the given time({0})!", this.Options.ConnectTimeout), this.defaultReconnect); + } + break; + + case ConnectionStates.Connected: + if (this.delayedMessages?.Count > 0) + { + pausedInLastFrame = false; + try + { + // if there's any Close message clear any other one. + int idx = this.delayedMessages.FindLastIndex(dm => dm.type == MessageTypes.Close); + if (idx > 0) + this.delayedMessages.RemoveRange(0, idx); + + OnMessages(this.delayedMessages); + } + finally + { + this.delayedMessages.Clear(); + } + } + + // Still connected? Check pinging. + if (this.State == ConnectionStates.Connected) + { + if (this.Options.PingInterval != TimeSpan.Zero && DateTime.Now - this.lastMessageReceivedAt >= this.Options.PingTimeoutInterval) + { + // The transport itself can be in a failure state or in a completely valid one, so while we do not want to receive anything from it, we have to try to close it + if (this.Transport != null) + { + this.Transport.OnStateChanged -= Transport_OnStateChanged; + this.Transport.StartClose(); + } + + SetState(ConnectionStates.Closed, + string.Format("PingInterval set to '{0}' and no message is received since '{1}'. PingTimeoutInterval: '{2}'", this.Options.PingInterval, this.lastMessageReceivedAt, this.Options.PingTimeoutInterval), + this.defaultReconnect); + } + else if (this.Options.PingInterval != TimeSpan.Zero && DateTime.Now - this.lastMessageSentAt >= this.Options.PingInterval) + SendMessage(new Message() { type = MessageTypes.Ping }); + } + break; + + case ConnectionStates.Reconnecting: + if (this.reconnectAt != DateTime.MinValue && DateTime.Now >= this.reconnectAt) + { + this.delayedMessages?.Clear(); + this.connectionStartedAt = DateTime.Now; + this.reconnectAt = DateTime.MinValue; + this.triedoutTransports.Clear(); + this.StartConnect(); + } + break; + + case ConnectionStates.Closed: + CleanUp(); + break; + } + } + + private void CleanUp() + { + HTTPManager.Logger.Information("HubConnection", "CleanUp", this.Context); + + this.delayedMessages?.Clear(); + HTTPManager.Heartbeats.Unsubscribe(this); + HTTPUpdateDelegator.OnApplicationForegroundStateChanged -= this.OnApplicationForegroundStateChanged; + + this.rwLock?.Dispose(); + this.rwLock = null; + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/HubConnection.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/HubConnection.cs.meta new file mode 100644 index 000000000..af0160962 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/HubConnection.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e8abbf851f5c2224380d8755c487b006 +timeCreated: 1515237548 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/IAuthenticationProvider.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/IAuthenticationProvider.cs new file mode 100644 index 000000000..3da8e20a1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/IAuthenticationProvider.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE + +using System; + +namespace BestHTTP.SignalRCore +{ + public delegate void OnAuthenticationSuccededDelegate(IAuthenticationProvider provider); + public delegate void OnAuthenticationFailedDelegate(IAuthenticationProvider provider, string reason); + + public interface IAuthenticationProvider + { + /// + /// The authentication must be run before any request made to build up the SignalR protocol + /// + bool IsPreAuthRequired { get; } + + /// + /// This event must be called when the pre-authentication succeded. When IsPreAuthRequired is false, no-one will subscribe to this event. + /// + event OnAuthenticationSuccededDelegate OnAuthenticationSucceded; + + /// + /// This event must be called when the pre-authentication failed. When IsPreAuthRequired is false, no-one will subscribe to this event. + /// + event OnAuthenticationFailedDelegate OnAuthenticationFailed; + + /// + /// This function called once, when the before the SignalR negotiation begins. If IsPreAuthRequired is false, then this step will be skipped. + /// + void StartAuthentication(); + + /// + /// This function will be called for every request before sending it. + /// + void PrepareRequest(HTTPRequest request); + + /// + /// This function can customize the given uri. If there's no intention to modify the uri, this function should return with the parameter. + /// + Uri PrepareUri(Uri uri); + + /// + /// Cancel any ongoing authentication. + /// + void Cancel(); + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/IAuthenticationProvider.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/IAuthenticationProvider.cs.meta new file mode 100644 index 000000000..fbab001f6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/IAuthenticationProvider.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: d30367ca9f9cbda45ad05e42d66c93cd +timeCreated: 1515237548 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/JsonProtocol.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/JsonProtocol.cs new file mode 100644 index 000000000..8d6370e56 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/JsonProtocol.cs @@ -0,0 +1,270 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE + +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.SignalRCore.Messages; +using System; +using System.Collections.Generic; + +#if NETFX_CORE || NET_4_6 +using System.Reflection; +#endif + +namespace BestHTTP.SignalRCore +{ + public interface IProtocol + { + string Name { get; } + + TransferModes Type { get; } + + IEncoder Encoder { get; } + + HubConnection Connection { get; set; } + + /// + /// This function must parse binary representation of the messages into the list of Messages. + /// + void ParseMessages(BufferSegment segment, ref List messages); + + /// + /// This function must return the encoded representation of the given message. + /// + BufferSegment EncodeMessage(Message message); + + /// + /// This function must convert all element in the arguments array to the corresponding type from the argTypes array. + /// + object[] GetRealArguments(Type[] argTypes, object[] arguments); + + /// + /// Convert a value to the given type. + /// + object ConvertTo(Type toType, object obj); + } + + public sealed class JsonProtocol : IProtocol + { + public const char Separator = (char)0x1E; + + public string Name { get { return "json"; } } + + public TransferModes Type { get { return TransferModes.Binary; } } + + public IEncoder Encoder { get; private set; } + + public HubConnection Connection { get; set; } + + public JsonProtocol(IEncoder encoder) + { + if (encoder == null) + throw new ArgumentNullException("encoder"); + + this.Encoder = encoder; + } + + public void ParseMessages(BufferSegment segment, ref List messages) { + if (segment.Data == null || segment.Count == 0) + return; + + int from = segment.Offset; + int separatorIdx = Array.IndexOf(segment.Data, (byte)JsonProtocol.Separator, from); + if (separatorIdx == -1) + throw new Exception("Missing separator in data! Segment: " + segment.ToString()); + + while (separatorIdx != -1) + { + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("JsonProtocol", "ParseMessages - " + System.Text.Encoding.UTF8.GetString(segment.Data, from, separatorIdx - from)); + var message = this.Encoder.DecodeAs(new BufferSegment(segment.Data, from, separatorIdx - from)); + + messages.Add(message); + + from = separatorIdx + 1; + separatorIdx = Array.IndexOf(segment.Data, (byte)JsonProtocol.Separator, from); + } + } + + public BufferSegment EncodeMessage(Message message) + { + BufferSegment result = BufferSegment.Empty; + + // While message contains all informations already, the spec states that no additional field are allowed in messages + // So we are creating 'specialized' messages here to send to the server. + switch (message.type) + { + case MessageTypes.StreamItem: + result = this.Encoder.Encode(new StreamItemMessage() + { + type = message.type, + invocationId = message.invocationId, + item = message.item + }); + break; + + case MessageTypes.Completion: + if (!string.IsNullOrEmpty(message.error)) + { + result = this.Encoder.Encode(new CompletionWithError() + { + type = MessageTypes.Completion, + invocationId = message.invocationId, + error = message.error + }); + } + else if (message.result != null) + { + result = this.Encoder.Encode(new CompletionWithResult() + { + type = MessageTypes.Completion, + invocationId = message.invocationId, + result = message.result + }); + } + else + result = this.Encoder.Encode(new Completion() + { + type = MessageTypes.Completion, + invocationId = message.invocationId + }); + break; + + case MessageTypes.Invocation: + case MessageTypes.StreamInvocation: + if (message.streamIds != null) + { + result = this.Encoder.Encode(new UploadInvocationMessage() + { + type = message.type, + invocationId = message.invocationId, + nonblocking = message.nonblocking, + target = message.target, + arguments = message.arguments, + streamIds = message.streamIds + }); + } + else + { + result = this.Encoder.Encode(new InvocationMessage() + { + type = message.type, + invocationId = message.invocationId, + nonblocking = message.nonblocking, + target = message.target, + arguments = message.arguments + }); + } + break; + + case MessageTypes.CancelInvocation: + result = this.Encoder.Encode(new CancelInvocationMessage() + { + invocationId = message.invocationId + }); + break; + + case MessageTypes.Ping: + //result = this.Encoder.Encode(new PingMessage()); + // fast path to encode a well-known json string + result = EncodeKnown("{\"type\":6}"); + break; + + case MessageTypes.Close: + if (!string.IsNullOrEmpty(message.error)) + { + result = this.Encoder.Encode(new CloseWithErrorMessage() { error = message.error }); + } + else + { + //result = this.Encoder.Encode(new CloseMessage()); + // fast path to encode a well-known json string + result = EncodeKnown("{\"type\":7}"); + } + break; + } + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("JsonProtocol", "EncodeMessage - json: " + System.Text.Encoding.UTF8.GetString(result.Data, 0, result.Count - 1)); + + return result; + } + + private BufferSegment EncodeKnown(string json) + { + int len = System.Text.Encoding.UTF8.GetByteCount(json); + byte[] buffer = BufferPool.Get(len + 1, true); + System.Text.Encoding.UTF8.GetBytes(json, 0, json.Length, buffer, 0); + buffer[len] = (byte)JsonProtocol.Separator; + return new BufferSegment(buffer, 0, len + 1); + } + + public object[] GetRealArguments(Type[] argTypes, object[] arguments) + { + if (arguments == null || arguments.Length == 0) + return null; + + if (argTypes.Length > arguments.Length) + throw new Exception(string.Format("argType.Length({0}) < arguments.length({1})", argTypes.Length, arguments.Length)); + + object[] realArgs = new object[arguments.Length]; + + for (int i = 0; i < arguments.Length; ++i) + realArgs[i] = ConvertTo(argTypes[i], arguments[i]); + + return realArgs; + } + + public object ConvertTo(Type toType, object obj) + { + if (obj == null) + return null; + +#if NETFX_CORE + TypeInfo typeInfo = toType.GetTypeInfo(); +#endif + +#if NETFX_CORE + if (typeInfo.IsEnum) +#else + if (toType.IsEnum) +#endif + return Enum.Parse(toType, obj.ToString(), true); + +#if NETFX_CORE + if (typeInfo.IsPrimitive) +#else + if (toType.IsPrimitive) +#endif + return Convert.ChangeType(obj, toType); + + if (toType == typeof(string)) + return obj.ToString(); + +#if NETFX_CORE + if (typeInfo.IsGenericType && toType.Name == "Nullable`1") + return Convert.ChangeType(obj, toType.GenericTypeArguments[0]); +#else + if (toType.IsGenericType && toType.Name == "Nullable`1") + return Convert.ChangeType(obj, toType.GetGenericArguments()[0]); +#endif + + return this.Encoder.ConvertTo(toType, obj); + } + + /// + /// Returns the given string parameter's bytes with the added separator(0x1E). + /// + public static BufferSegment WithSeparator(string str) + { + int len = System.Text.Encoding.UTF8.GetByteCount(str); + + byte[] buffer = BufferPool.Get(len + 1, true); + + System.Text.Encoding.UTF8.GetBytes(str, 0, str.Length, buffer, 0); + + buffer[len] = 0x1e; + + return new BufferSegment(buffer, 0, len + 1); + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/JsonProtocol.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/JsonProtocol.cs.meta new file mode 100644 index 000000000..f9ca713d8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/JsonProtocol.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b98779f03b6433e4387c86a676d50027 +timeCreated: 1515237548 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages.meta new file mode 100644 index 000000000..9f91ecde8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 04849aa46f6e586469d9275d70387fb0 +folderAsset: yes +timeCreated: 1515237542 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages/Invocation.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages/Invocation.cs new file mode 100644 index 000000000..04f129a81 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages/Invocation.cs @@ -0,0 +1,84 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE +using System; + +namespace BestHTTP.SignalRCore.Messages +{ + [PlatformSupport.IL2CPP.Preserve] + public struct Completion + { + [PlatformSupport.IL2CPP.Preserve] public MessageTypes type; + [PlatformSupport.IL2CPP.Preserve] public string invocationId; + } + + [PlatformSupport.IL2CPP.Preserve] + public struct CompletionWithResult + { + [PlatformSupport.IL2CPP.Preserve] public MessageTypes type; + [PlatformSupport.IL2CPP.Preserve] public string invocationId; + [PlatformSupport.IL2CPP.Preserve] public object result; + } + + [PlatformSupport.IL2CPP.Preserve] + public struct CompletionWithError + { + [PlatformSupport.IL2CPP.Preserve] public MessageTypes type; + [PlatformSupport.IL2CPP.Preserve] public string invocationId; + [PlatformSupport.IL2CPP.Preserve] public string error; + } + + [PlatformSupport.IL2CPP.Preserve] + public struct StreamItemMessage + { + [PlatformSupport.IL2CPP.Preserve] public MessageTypes type; + [PlatformSupport.IL2CPP.Preserve] public string invocationId; + [PlatformSupport.IL2CPP.Preserve] public object item; + } + + [PlatformSupport.IL2CPP.Preserve] + public struct InvocationMessage + { + [PlatformSupport.IL2CPP.Preserve] public MessageTypes type; + [PlatformSupport.IL2CPP.Preserve] public string invocationId; + [PlatformSupport.IL2CPP.Preserve] public bool nonblocking; + [PlatformSupport.IL2CPP.Preserve] public string target; + [PlatformSupport.IL2CPP.Preserve] public object[] arguments; + } + + [PlatformSupport.IL2CPP.Preserve] + public struct UploadInvocationMessage + { + [PlatformSupport.IL2CPP.Preserve] public MessageTypes type; + [PlatformSupport.IL2CPP.Preserve] public string invocationId; + [PlatformSupport.IL2CPP.Preserve] public bool nonblocking; + [PlatformSupport.IL2CPP.Preserve] public string target; + [PlatformSupport.IL2CPP.Preserve] public object[] arguments; + [PlatformSupport.IL2CPP.Preserve] public string[] streamIds; + } + + [PlatformSupport.IL2CPP.Preserve] + public struct CancelInvocationMessage + { + [PlatformSupport.IL2CPP.Preserve] public MessageTypes type { get { return MessageTypes.CancelInvocation; } } + [PlatformSupport.IL2CPP.Preserve] public string invocationId; + } + + [PlatformSupport.IL2CPP.Preserve] + public struct PingMessage + { + [PlatformSupport.IL2CPP.Preserve] public MessageTypes type { get { return MessageTypes.Ping; } } + } + + [PlatformSupport.IL2CPP.Preserve] + public struct CloseMessage + { + [PlatformSupport.IL2CPP.Preserve] public MessageTypes type { get { return MessageTypes.Close; } } + } + + [PlatformSupport.IL2CPP.Preserve] + public struct CloseWithErrorMessage + { + [PlatformSupport.IL2CPP.Preserve] public MessageTypes type { get { return MessageTypes.Close; } } + [PlatformSupport.IL2CPP.Preserve] public string error; + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages/Invocation.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages/Invocation.cs.meta new file mode 100644 index 000000000..b05e69c06 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages/Invocation.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 80d549225d0ced34c864973a497e97bc +timeCreated: 1515237548 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages/Message.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages/Message.cs new file mode 100644 index 000000000..aaff44678 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages/Message.cs @@ -0,0 +1,91 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE +using System; + +namespace BestHTTP.SignalRCore.Messages +{ + public enum MessageTypes : int + { + /// + /// This is a made up message type, for easier handshake handling. + /// + Handshake = 0, + + /// + /// https://github.com/dotnet/aspnetcore/blob/master/src/SignalR/docs/specs/HubProtocol.md#invocation-message-encoding + /// + Invocation = 1, + + /// + /// https://github.com/dotnet/aspnetcore/blob/master/src/SignalR/docs/specs/HubProtocol.md#streamitem-message-encoding + /// + StreamItem = 2, + + /// + /// https://github.com/dotnet/aspnetcore/blob/master/src/SignalR/docs/specs/HubProtocol.md#completion-message-encoding + /// + Completion = 3, + + /// + /// https://github.com/dotnet/aspnetcore/blob/master/src/SignalR/docs/specs/HubProtocol.md#streaminvocation-message-encoding + /// + StreamInvocation = 4, + + /// + /// https://github.com/dotnet/aspnetcore/blob/master/src/SignalR/docs/specs/HubProtocol.md#cancelinvocation-message-encoding + /// + CancelInvocation = 5, + + /// + /// https://github.com/dotnet/aspnetcore/blob/master/src/SignalR/docs/specs/HubProtocol.md#ping-message-encoding + /// + Ping = 6, + + /// + /// https://github.com/dotnet/aspnetcore/blob/master/src/SignalR/docs/specs/HubProtocol.md#close-message-encoding + /// + Close = 7 + } + + [PlatformSupport.IL2CPP.Preserve] + public struct Message + { + [PlatformSupport.IL2CPP.Preserve] public MessageTypes type; + [PlatformSupport.IL2CPP.Preserve] public string invocationId; + [PlatformSupport.IL2CPP.Preserve] public bool nonblocking; + [PlatformSupport.IL2CPP.Preserve] public string target; + [PlatformSupport.IL2CPP.Preserve] public object[] arguments; + [PlatformSupport.IL2CPP.Preserve] public string[] streamIds; + [PlatformSupport.IL2CPP.Preserve] public object item; + [PlatformSupport.IL2CPP.Preserve] public object result; + [PlatformSupport.IL2CPP.Preserve] public string error; + [PlatformSupport.IL2CPP.Preserve] public bool allowReconnect; + + public override string ToString() + { + switch (this.type) + { + case MessageTypes.Handshake: + return string.Format("[Handshake Error: '{0}'", this.error); + case MessageTypes.Invocation: + return string.Format("[Invocation Id: {0}, Target: '{1}', Argument count: {2}, Stream Ids: {3}]", this.invocationId, this.target, this.arguments != null ? this.arguments.Length : 0, this.streamIds != null ? this.streamIds.Length : 0); + case MessageTypes.StreamItem: + return string.Format("[StreamItem Id: {0}, Item: {1}]", this.invocationId, this.item.ToString()); + case MessageTypes.Completion: + return string.Format("[Completion Id: {0}, Result: {1}, Error: '{2}']", this.invocationId, this.result, this.error); + case MessageTypes.StreamInvocation: + return string.Format("[StreamInvocation Id: {0}, Target: '{1}', Argument count: {2}]", this.invocationId, this.target, this.arguments != null ? this.arguments.Length : 0); + case MessageTypes.CancelInvocation: + return string.Format("[CancelInvocation Id: {0}]", this.invocationId); + case MessageTypes.Ping: + return "[Ping]"; + case MessageTypes.Close: + return string.IsNullOrEmpty(this.error) ? + string.Format("[Close allowReconnect: {0}]", this.allowReconnect) : + string.Format("[Close Error: '{0}', allowReconnect: {1}]", this.error, this.allowReconnect); + default: + return "Unknown message! Type: " + this.type; + } + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages/Message.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages/Message.cs.meta new file mode 100644 index 000000000..566711cad --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages/Message.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: f6a7c57303e62774fb902547acce515a +timeCreated: 1515237548 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages/NegotiationResult.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages/NegotiationResult.cs new file mode 100644 index 000000000..e20e594d2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages/NegotiationResult.cs @@ -0,0 +1,185 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE +using System; +using System.Collections.Generic; + +namespace BestHTTP.SignalRCore.Messages +{ + public sealed class SupportedTransport + { + /// + /// Name of the transport. + /// + public string Name { get; private set; } + + /// + /// Supported transfer formats of the transport. + /// + public List SupportedFormats { get; private set; } + + internal SupportedTransport(string transportName, List transferFormats) + { + this.Name = transportName; + this.SupportedFormats = transferFormats; + } + } + + /// + /// Negotiation result of the /negotiation request. + /// + /// + public sealed class NegotiationResult + { + public int NegotiateVersion { get; private set; } + + /// + /// The connectionToken which is required by the Long Polling and Server-Sent Events transports (in order to correlate sends and receives). + /// + public string ConnectionToken { get; private set; } + + /// + /// The connectionId which is required by the Long Polling and Server-Sent Events transports (in order to correlate sends and receives). + /// + public string ConnectionId { get; private set; } + + /// + /// The availableTransports list which describes the transports the server supports. For each transport, the name of the transport (transport) is listed, as is a list of "transfer formats" supported by the transport (transferFormats) + /// + public List SupportedTransports { get; private set; } + + /// + /// The url which is the URL the client should connect to. + /// + public Uri Url { get; private set; } + + + /// + /// The accessToken which is an optional bearer token for accessing the specified url. + /// + public string AccessToken { get; private set; } + + public HTTPResponse NegotiationResponse { get; internal set; } + + internal static NegotiationResult Parse(HTTPResponse resp, out string error, HubConnection hub) + { + error = null; + + Dictionary response = BestHTTP.JSON.Json.Decode(resp.DataAsText) as Dictionary; + if (response == null) + { + error = "Json decoding failed!"; + return null; + } + + try + { + NegotiationResult result = new NegotiationResult(); + result.NegotiationResponse = resp; + + object value; + + if (response.TryGetValue("negotiateVersion", out value)) + { + int version; + if (int.TryParse(value.ToString(), out version)) + result.NegotiateVersion = version; + } + + if (response.TryGetValue("connectionId", out value)) + result.ConnectionId = value.ToString(); + + if (response.TryGetValue("connectionToken", out value)) + result.ConnectionToken = value.ToString(); + + if (response.TryGetValue("availableTransports", out value)) + { + List transports = value as List; + if (transports != null) + { + List supportedTransports = new List(transports.Count); + + foreach (Dictionary transport in transports) + { + string transportName = string.Empty; + List transferModes = null; + + if (transport.TryGetValue("transport", out value)) + transportName = value.ToString(); + + if (transport.TryGetValue("transferFormats", out value)) + { + List transferFormats = value as List; + + if (transferFormats != null) + { + transferModes = new List(transferFormats.Count); + foreach (var mode in transferFormats) + transferModes.Add(mode.ToString()); + } + } + + supportedTransports.Add(new SupportedTransport(transportName, transferModes)); + } + + result.SupportedTransports = supportedTransports; + } + } + + if (response.TryGetValue("url", out value)) + { + string uriStr = value.ToString(); + + Uri redirectUri; + + // Here we will try to parse the received url. If TryCreate fails, we will throw an exception + // as it should be able to successfully parse whole (absolute) urls (like "https://server:url/path") + // and relative ones (like "/path"). + if (!Uri.TryCreate(uriStr, UriKind.RelativeOrAbsolute, out redirectUri)) + throw new Exception(string.Format("Couldn't parse url: '{0}'", uriStr)); + + HTTPManager.Logger.Verbose("NegotiationResult", string.Format("Parsed url({0}) into uri({1}). uri.IsAbsoluteUri: {2}, IsAbsolute: {3}", uriStr, redirectUri, redirectUri.IsAbsoluteUri, IsAbsolute(uriStr))); + + // If received a relative url we will use the hub's current url to append the new path to it. + if (!IsAbsolute(uriStr)) + { + Uri oldUri = hub.Uri; + var builder = new UriBuilder(oldUri); + + // ?, / + var pathAndQuery = uriStr.Split(new string[] { "?", "%3F", "%3f", "/", "%2F", "%2f" }, StringSplitOptions.RemoveEmptyEntries); + + if (pathAndQuery.Length > 1) + builder.Query = pathAndQuery[1]; + else + builder.Query = string.Empty; + + builder.Path = pathAndQuery[0]; + + redirectUri = builder.Uri; + } + + result.Url = redirectUri; + } + + if (response.TryGetValue("accessToken", out value)) + result.AccessToken = value.ToString(); + else if (hub.NegotiationResult != null) + result.AccessToken = hub.NegotiationResult.AccessToken; + + return result; + } + catch (Exception ex) + { + error = "Error while parsing result: " + ex.Message + " StackTrace: " + ex.StackTrace; + return null; + } + } + + private static bool IsAbsolute(string url) + { + // an url is absolute if contains a scheme, an authority, and a path. + return url.StartsWith("http://", StringComparison.OrdinalIgnoreCase) || + url.StartsWith("https://", StringComparison.OrdinalIgnoreCase); + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages/NegotiationResult.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages/NegotiationResult.cs.meta new file mode 100644 index 000000000..46097767e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Messages/NegotiationResult.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ff02294dfc0839f4b8cfa92dce810808 +timeCreated: 1528093299 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports.meta new file mode 100644 index 000000000..7e9263634 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 93299fbc9d294004caa37d06aea06bb5 +folderAsset: yes +timeCreated: 1515237543 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports/LongPollingTransport.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports/LongPollingTransport.cs new file mode 100644 index 000000000..a9caaa5bd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports/LongPollingTransport.cs @@ -0,0 +1,446 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE +using System; +using System.Collections.Concurrent; +using System.Threading; + +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.Core; +using BestHTTP.Extensions; +using System.Collections.Generic; + +namespace BestHTTP.SignalRCore.Transports +{ + /// + /// LongPolling transport implementation. + /// https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/TransportProtocols.md#http-post-client-to-server-only + /// https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/TransportProtocols.md#long-polling-server-to-client-only + /// + internal sealed class LongPollingTransport : TransportBase + { + /// + /// Maximum retries for a failed request + /// + const int MaxRetries = 6; + + public override TransportTypes TransportType { get { return TransportTypes.LongPolling; } } + + /// + /// Polling transport can't send out a new send-messages request until the previous isn't finished, so it must cache new ones. + /// + private ConcurrentQueue outgoingMessages = new ConcurrentQueue(); + + /// + /// Flag indicating that a send-request is already sent out. We have to cache messages () until the request finishes. + /// + private int sendingInProgress; + + /// + /// Cached stream instance. By using a we can avoid allocating a large byte[] for the cached messages and copy bytes to the new array. + /// + private BufferSegmentStream stream = new BufferSegmentStream(); + + internal LongPollingTransport(HubConnection con) + :base(con) + { + } + + #region ITransport methods + + public override void StartConnect() + { + if (this.State != TransportStates.Initial) + return; + + HTTPManager.Logger.Information("LongPollingTransport", "StartConnect", this.Context); + + this.State = TransportStates.Connecting; + + // https://github.com/dotnet/aspnetcore/blob/master/src/SignalR/docs/specs/HubProtocol.md#overview + // When our connection is open, send the 'negotiation' message to the server. + + var request = new HTTPRequest(BuildUri(this.connection.Uri), HTTPMethods.Post, OnHandshakeRequestFinished); + request.Context.Add("Transport", this.Context); + + this.stream.Reset(); + this.stream.Write(JsonProtocol.WithSeparator(string.Format("{{\"protocol\":\"{0}\", \"version\": 1}}", this.connection.Protocol.Name))); + + request.UploadStream = this.stream; + + if (this.connection.AuthenticationProvider != null) + this.connection.AuthenticationProvider.PrepareRequest(request); + + request.Send(); + } + + public override void Send(BufferSegment msg) + { + if (this.State != TransportStates.Connected) + return; + + outgoingMessages.Enqueue(msg); + + SendMessages(); + } + + public override void StartClose() + { + if (this.State != TransportStates.Connected) + return; + + HTTPManager.Logger.Information("LongPollingTransport", "StartClose", this.Context); + + this.State = TransportStates.Closing; + + SendConnectionCloseRequest(); + } + + #endregion + + #region Private Helper methods + + private void SendMessages() + { + if (this.State != TransportStates.Connected || this.outgoingMessages.Count == 0) + return; + + if (Interlocked.CompareExchange(ref this.sendingInProgress, 1, 0) == 1) + return; + + var request = new HTTPRequest(BuildUri(this.connection.Uri), HTTPMethods.Post, OnSendMessagesFinished); + request.Context.Add("Transport", this.Context); + + this.stream.Reset(); + + BufferSegment buffer; + while (this.outgoingMessages.TryDequeue(out buffer)) + this.stream.Write(buffer); + + request.UploadStream = this.stream; + + request.Tag = 0; + + if (this.connection.AuthenticationProvider != null) + this.connection.AuthenticationProvider.PrepareRequest(request); + + request.Send(); + } + + private void DoPoll() + { + if (this.State != TransportStates.Connecting && this.State != TransportStates.Connected) + return; + + HTTPManager.Logger.Information("LongPollingTransport", "Sending Poll request", this.Context); + + var request = new HTTPRequest(BuildUri(this.connection.Uri), OnPollRequestFinished); + request.Context.Add("Transport", this.Context); + + request.AddHeader("Accept", " application/octet-stream"); + request.Timeout = TimeSpan.FromMinutes(2); + + if (this.connection.AuthenticationProvider != null) + this.connection.AuthenticationProvider.PrepareRequest(request); + + request.Send(); + } + + private void SendConnectionCloseRequest(int retryCount = 0) + { + if (this.State != TransportStates.Closing) + return; + + HTTPManager.Logger.Information("LongPollingTransport", "Sending DELETE request", this.Context); + + var request = new HTTPRequest(BuildUri(this.connection.Uri), HTTPMethods.Delete, OnConnectionCloseRequestFinished); + request.Context.Add("Transport", this.Context); + + request.Tag = retryCount; + + if (this.connection.AuthenticationProvider != null) + this.connection.AuthenticationProvider.PrepareRequest(request); + + request.Send(); + } + + #endregion + + #region Callbacks + + private void OnHandshakeRequestFinished(HTTPRequest req, HTTPResponse resp) + { + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + if (resp.IsSuccess) + { + // start listening for a handshake response + DoPoll(); + } + else + { + this.ErrorReason = string.Format("Handshake Request finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}", + resp.StatusCode, + resp.Message, + resp.DataAsText); + } + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + this.ErrorReason = "Handshake Request Finished with Error! " + (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception"); + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + this.ErrorReason = "Handshake Request Aborted!"; + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + this.ErrorReason = "Handshake - Connection Timed Out!"; + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + this.ErrorReason = "Handshake - Processing the request Timed Out!"; + break; + } + + if (!string.IsNullOrEmpty(this.ErrorReason)) + this.State = TransportStates.Failed; + + // To skip disposing the stream (because we reuse it), set the request's UploadStream to null + req.UploadStream = null; + } + + private void OnSendMessagesFinished(HTTPRequest req, HTTPResponse resp) + { + /* + * The HTTP POST request is made to the URL [endpoint-base]. The mandatory id query string value is used to identify the connection to send to. + * If there is no id query string value, a 400 Bad Request response is returned. Upon receipt of the entire payload, + * the server will process the payload and responds with 200 OK if the payload was successfully processed. + * If a client makes another request to / while an existing request is outstanding, the new request is immediately terminated by the server with the 409 Conflict status code. + * + * If a client receives a 409 Conflict request, the connection remains open. + * Any other response indicates that the connection has been terminated due to an error. + * + * If the relevant connection has been terminated, a 404 Not Found status code is returned. + * If there is an error instantiating an EndPoint or dispatching the message, a 500 Server Error status code is returned. + * */ + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + switch(resp.StatusCode) + { + // Upon receipt of the entire payload, the server will process the payload and responds with 200 OK if the payload was successfully processed. + case 200: + Interlocked.Exchange(ref this.sendingInProgress, 0); + + // The connections is OK, call OnMessages with an empty list to update HubConnection's lastMessageReceivedAt. + this.messages.Clear(); + try + { + this.connection.OnMessages(this.messages); + } + finally + { + this.messages.Clear(); + } + + SendMessages(); + + break; + + // Any other response indicates that the connection has been terminated due to an error. + default: + this.ErrorReason = string.Format("Send Request finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}", + resp.StatusCode, + resp.Message, + resp.DataAsText); + break; + } + break; + + default: + int retryCount = (int)req.Tag; + if (retryCount < MaxRetries) + { + req.Tag = retryCount + 1; + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(req, RequestEvents.Resend)); + } + else + { + this.ErrorReason = string.Format("Send message reached max retry count ({0})!", MaxRetries); + } + break; + } + + if (!string.IsNullOrEmpty(this.ErrorReason)) + this.State = TransportStates.Failed; + + // To skip disposing the stream (because we reuse it), set the request's UploadStream to null + req.UploadStream = null; + } + + private void OnPollRequestFinished(HTTPRequest req, HTTPResponse resp) + { + /* + * When data is available, the server responds with a body in one of the two formats below (depending upon the value of the Accept header). + * The response may be chunked, as per the chunked encoding part of the HTTP spec. + * + * If the id parameter is missing, a 400 Bad Request response is returned. + * If there is no connection with the ID specified in id, a 404 Not Found response is returned. + * + * When the client has finished with the connection, it can issue a DELETE request to [endpoint-base] (with the id in the query string) to gracefully terminate the connection. + * The server will complete the latest poll with 204 to indicate that it has shut down. + * */ + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + switch(resp.StatusCode) + { + case 200: + int offset = 0; + + // Parse and dispatch messages only if the transport is still in connected state + if (this.State == TransportStates.Connecting) + { + int idx = resp.Data != null ? Array.IndexOf(resp.Data, (byte)JsonProtocol.Separator, 0) : -1; + if (idx > 0) + { + base.HandleHandshakeResponse(System.Text.Encoding.UTF8.GetString(resp.Data, 0, idx)); + offset = idx + 1; + + if (this.State == TransportStates.Connected) + SendMessages(); + } + else + DoPoll(); + } + + if (this.State == TransportStates.Connected) + { + this.messages.Clear(); + try + { + if (resp.Data.Length - offset > 0) + this.connection.Protocol.ParseMessages(new BufferSegment(resp.Data, offset, resp.Data.Length - offset), ref this.messages); + else + this.messages.Add(new Messages.Message { type = Messages.MessageTypes.Ping }); + + this.connection.OnMessages(this.messages); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("LongPollingTransport", "OnMessage(byte[])", ex, this.Context); + } + finally + { + this.messages.Clear(); + + DoPoll(); + } + } + else if (this.State == TransportStates.Closing) + { + // DELETE message sent out while we received the poll result. We can close the transport at this point as we don't want to send out a new poll request. + this.State = TransportStates.Closed; + } + break; + + case 204: + this.State = TransportStates.Closed; + break; + + case 400: + case 404: + if (this.State == TransportStates.Closing) + { + this.State = TransportStates.Closed; + } + else if (this.State != TransportStates.Closed) + { + this.ErrorReason = resp.DataAsText; + } + break; + + default: + this.ErrorReason = string.Format("Poll Request finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}", + resp.StatusCode, + resp.Message, + resp.DataAsText); + break; + } + break; + + default: + if (this.State == TransportStates.Closing) + this.State = TransportStates.Closed; + else if (this.State != TransportStates.Closed) + DoPoll(); + break; + } + + if (!string.IsNullOrEmpty(this.ErrorReason)) + this.State = TransportStates.Failed; + } + + private void OnConnectionCloseRequestFinished(HTTPRequest req, HTTPResponse resp) + { + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + if (resp.IsSuccess) + { + return; + } + else + { + HTTPManager.Logger.Warning("LongPollingTransport", string.Format("Connection Close Request finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}", + resp.StatusCode, + resp.Message, + resp.DataAsText), this.Context); + } + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + HTTPManager.Logger.Warning("LongPollingTransport", "Connection Close Request Finished with Error! " + (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception"), this.Context); + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + HTTPManager.Logger.Warning("LongPollingTransport", "Connection Close Request Aborted!", this.Context); + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + HTTPManager.Logger.Warning("LongPollingTransport", "Connection Close - Connection Timed Out!", this.Context); + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + HTTPManager.Logger.Warning("LongPollingTransport", "Connection Close - Processing the request Timed Out!", this.Context); + break; + } + + int retryCount = (int)req.Tag; + if (retryCount <= MaxRetries) + { + // Try again if there were an error + SendConnectionCloseRequest(retryCount + 1); + } + else + { + this.State = TransportStates.Closed; + } + } + + #endregion + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports/LongPollingTransport.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports/LongPollingTransport.cs.meta new file mode 100644 index 000000000..cbece411a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports/LongPollingTransport.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5ac65a663eedb6a48b0895a3de8cce27 +timeCreated: 1574062905 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports/TransportBase.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports/TransportBase.cs new file mode 100644 index 000000000..1920e9627 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports/TransportBase.cs @@ -0,0 +1,133 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE +using System; +using System.Collections.Generic; +using System.Text; +using BestHTTP.Logger; +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.PlatformSupport.Text; + +namespace BestHTTP.SignalRCore.Transports +{ + internal abstract class TransportBase : ITransport + { + public abstract TransportTypes TransportType { get; } + + public TransferModes TransferMode { get { return TransferModes.Binary; } } + + /// + /// Current state of the transport. All changes will be propagated to the HubConnection through the onstateChanged event. + /// + public TransportStates State + { + get { return this._state; } + protected set + { + if (this._state != value) + { + TransportStates oldState = this._state; + this._state = value; + + if (this.OnStateChanged != null) + this.OnStateChanged(oldState, this._state); + } + } + } + protected TransportStates _state; + + /// + /// This will store the reason of failures so HubConnection can include it in its OnError event. + /// + public string ErrorReason { get; protected set; } + + /// + /// Called every time when the transport's changed. + /// + public event Action OnStateChanged; + + public LoggingContext Context { get; protected set; } + + /// + /// Cached list of parsed messages. + /// + protected List messages = new List(); + + /// + /// Parent HubConnection instance. + /// + protected HubConnection connection; + + internal TransportBase(HubConnection con) + { + this.connection = con; + this.Context = new LoggingContext(this); + this.Context.Add("Hub", this.connection.Context); + this.State = TransportStates.Initial; + } + + /// + /// ITransport.StartConnect + /// + public abstract void StartConnect(); + + /// + /// ITransport.Send + /// + /// + public abstract void Send(BufferSegment msg); + + /// + /// ITransport.StartClose + /// + public abstract void StartClose(); + + protected string ParseHandshakeResponse(string data) + { + // The handshake response is + // -an empty json object ('{}') if the handshake process is succesfull + // -otherwise it has one 'error' field + + Dictionary response = BestHTTP.JSON.Json.Decode(data) as Dictionary; + + if (response == null) + return "Couldn't parse json data: " + data; + + object error; + if (response.TryGetValue("error", out error)) + return error.ToString(); + + return null; + } + + protected void HandleHandshakeResponse(string data) + { + this.ErrorReason = ParseHandshakeResponse(data); + + this.State = string.IsNullOrEmpty(this.ErrorReason) ? TransportStates.Connected : TransportStates.Failed; + } + + //StringBuilder queryBuilder = new StringBuilder(3); + protected Uri BuildUri(Uri baseUri) + { + if (this.connection.NegotiationResult == null) + return baseUri; + + UriBuilder builder = new UriBuilder(baseUri); + + var queryBuilder = StringBuilderPool.Get(3); + + queryBuilder.Append(baseUri.Query); + if (!string.IsNullOrEmpty(this.connection.NegotiationResult.ConnectionToken)) + queryBuilder.Append("&id=").Append(this.connection.NegotiationResult.ConnectionToken); + else if (!string.IsNullOrEmpty(this.connection.NegotiationResult.ConnectionId)) + queryBuilder.Append("&id=").Append(this.connection.NegotiationResult.ConnectionId); + + builder.Query = StringBuilderPool.ReleaseAndGrab(queryBuilder); + + if (builder.Query.StartsWith("??")) + builder.Query = builder.Query.Substring(2); + + return builder.Uri; + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports/TransportBase.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports/TransportBase.cs.meta new file mode 100644 index 000000000..29e3ea33d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports/TransportBase.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 1bc15e15ea22bdc4c838d1cb00543076 +timeCreated: 1574323017 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports/WebsocketTransport.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports/WebsocketTransport.cs new file mode 100644 index 000000000..73d41c742 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports/WebsocketTransport.cs @@ -0,0 +1,279 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE && !BESTHTTP_DISABLE_WEBSOCKET +using System; +using System.Collections.Generic; +using System.Text; + +using BestHTTP.Extensions; +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.SignalRCore.Messages; + +namespace BestHTTP.SignalRCore.Transports +{ + /// + /// WebSockets transport implementation. + /// https://github.com/dotnet/aspnetcore/blob/master/src/SignalR/docs/specs/TransportProtocols.md#websockets-full-duplex + /// + internal sealed class WebSocketTransport : TransportBase + { + public override TransportTypes TransportType { get { return TransportTypes.WebSocket; } } + + private WebSocket.WebSocket webSocket; + + internal WebSocketTransport(HubConnection con) + :base(con) + { + } + + public override void StartConnect() + { + HTTPManager.Logger.Verbose("WebSocketTransport", "StartConnect", this.Context); + + if (this.webSocket == null) + { + Uri uri = this.connection.Uri; + string scheme = Connections.HTTPProtocolFactory.IsSecureProtocol(uri) ? "wss" : "ws"; + int port = uri.Port != -1 ? uri.Port : (scheme.Equals("wss", StringComparison.OrdinalIgnoreCase) ? 443 : 80); + + // Somehow if i use the UriBuilder it's not the same as if the uri is constructed from a string... + uri = new Uri(scheme + "://" + uri.Host + ":" + port + uri.GetRequestPathAndQueryURL()); + + uri = BuildUri(uri); + + // Also, if there's an authentication provider it can alter further our uri. + if (this.connection.AuthenticationProvider != null) + uri = this.connection.AuthenticationProvider.PrepareUri(uri) ?? uri; + + HTTPManager.Logger.Verbose("WebSocketTransport", "StartConnect connecting to Uri: " + uri.ToString(), this.Context); + + this.webSocket = new WebSocket.WebSocket(uri, string.Empty, string.Empty +#if !UNITY_WEBGL || UNITY_EDITOR + , (this.connection.Options.WebsocketOptions?.ExtensionsFactory ?? WebSocket.WebSocket.GetDefaultExtensions)?.Invoke() +#endif + ); + + this.webSocket.Context.Add("Transport", this.Context); + } + +#if !UNITY_WEBGL || UNITY_EDITOR + if (this.connection.Options.WebsocketOptions?.PingIntervalOverride is TimeSpan ping) + { + if (ping > TimeSpan.Zero) + { + this.webSocket.StartPingThread = true; + this.webSocket.PingFrequency = (int)ping.TotalMilliseconds; + } + else + this.webSocket.StartPingThread = false; + } + else + this.webSocket.StartPingThread = true; + + // prepare the internal http request + if (this.connection.AuthenticationProvider != null) + webSocket.OnInternalRequestCreated = (ws, internalRequest) => this.connection.AuthenticationProvider.PrepareRequest(internalRequest); +#endif + this.webSocket.OnOpen += OnOpen; + this.webSocket.OnMessage += OnMessage; + this.webSocket.OnBinaryNoAlloc += OnBinaryNoAlloc; + this.webSocket.OnError += OnError; + this.webSocket.OnClosed += OnClosed; + + this.webSocket.Open(); + + this.State = TransportStates.Connecting; + } + + public override void Send(BufferSegment msg) + { + if (this.webSocket == null || !this.webSocket.IsOpen) + { + BufferPool.Release(msg.Data); + + //this.OnError(this.webSocket, "Send called while the websocket is null or isn't open! Transport's State: " + this.State); + return; + } + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("WebSocketTransport", "Send: " + msg.ToString(), this.Context); + this.webSocket.SendAsBinary(msg); + } + + // The websocket connection is open + private void OnOpen(WebSocket.WebSocket webSocket) + { + HTTPManager.Logger.Verbose("WebSocketTransport", "OnOpen", this.Context); + + // https://github.com/dotnet/aspnetcore/blob/master/src/SignalR/docs/specs/HubProtocol.md#overview + // When our websocket connection is open, send the 'negotiation' message to the server. + (this as ITransport).Send(JsonProtocol.WithSeparator(string.Format("{{\"protocol\":\"{0}\", \"version\": 1}}", this.connection.Protocol.Name))); + } + + private void OnMessage(WebSocket.WebSocket webSocket, string data) + { + if (this.State == TransportStates.Closing) + return; + + this.messages.Clear(); + try + { + int len = System.Text.Encoding.UTF8.GetByteCount(data); + + byte[] buffer = BufferPool.Get(len, true); + try + { + // Clear the buffer, it might have previous messages in it with the record separator somewhere it doesn't gets overwritten by the new data + Array.Clear(buffer, 0, buffer.Length); + System.Text.Encoding.UTF8.GetBytes(data, 0, data.Length, buffer, 0); + + this.connection.Protocol.ParseMessages(new BufferSegment(buffer, 0, len), ref this.messages); + + if (this.State == TransportStates.Connecting) + { + // we expect a handshake response in this case + + if (this.messages.Count == 0) + { + this.ErrorReason = $"Expecting handshake response, but message({data}) couldn't be parsed!"; + this.State = TransportStates.Failed; + return; + } + + var message = this.messages[0]; + if (message.type != MessageTypes.Handshake) + { + this.ErrorReason = $"Expecting handshake response, but the first message is {message.type}!"; + this.State = TransportStates.Failed; + return; + } + + this.ErrorReason = message.error; + this.State = string.IsNullOrEmpty(message.error) ? TransportStates.Connected : TransportStates.Failed; + } + } + finally + { + BufferPool.Release(buffer); + } + + this.connection.OnMessages(this.messages); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("WebSocketTransport", "OnMessage(string)", ex, this.Context); + } + finally + { + this.messages.Clear(); + } + } + + private void OnBinaryNoAlloc(WebSocket.WebSocket webSocket, BufferSegment data) + { + if (this.State == TransportStates.Closing) + return; + + if (this.State == TransportStates.Connecting) + { + int recordSeparatorIdx = Array.FindIndex(data.Data, data.Offset, data.Count, (b) => b == JsonProtocol.Separator); + + if (recordSeparatorIdx == -1) + { + this.ErrorReason = $"Expecting handshake response, but message({data}) has no record separator(0x1E)!"; + this.State = TransportStates.Failed; + return; + } + else + { + HandleHandshakeResponse(System.Text.Encoding.UTF8.GetString(data.Data, data.Offset, recordSeparatorIdx - data.Offset)); + + // Skip any other messages sent if handshake is failed + if (this.State != TransportStates.Connected) + return; + + recordSeparatorIdx++; + if (recordSeparatorIdx == data.Offset + data.Count) + return; + + data = new BufferSegment(data.Data, data.Offset + recordSeparatorIdx, data.Count - recordSeparatorIdx); + } + } + + this.messages.Clear(); + try + { + this.connection.Protocol.ParseMessages(data, ref this.messages); + + if (this.State == TransportStates.Connecting) + { + // we expect a handshake response in this case + + if (this.messages.Count == 0) + { + this.ErrorReason = $"Expecting handshake response, but message({data}) couldn't be parsed!"; + this.State = TransportStates.Failed; + return; + } + + var message = this.messages[0]; + if (message.type != MessageTypes.Handshake) + { + this.ErrorReason = $"Expecting handshake response, but the first message is {message.type}!"; + this.State = TransportStates.Failed; + return; + } + + this.ErrorReason = message.error; + this.State = string.IsNullOrEmpty(message.error) ? TransportStates.Connected : TransportStates.Failed; + } + + this.connection.OnMessages(this.messages); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("WebSocketTransport", "OnMessage(byte[])", ex, this.Context); + } + finally + { + this.messages.Clear(); + } + } + + private void OnError(WebSocket.WebSocket webSocket, string reason) + { + HTTPManager.Logger.Verbose("WebSocketTransport", "OnError: " + reason, this.Context); + + if (this.State == TransportStates.Closing) + { + this.State = TransportStates.Closed; + } + else + { + this.ErrorReason = reason; + this.State = TransportStates.Failed; + } + } + + private void OnClosed(WebSocket.WebSocket webSocket, ushort code, string message) + { + HTTPManager.Logger.Verbose("WebSocketTransport", "OnClosed: " + code + " " + message, this.Context); + + this.webSocket = null; + + this.State = TransportStates.Closed; + } + + public override void StartClose() + { + HTTPManager.Logger.Verbose("WebSocketTransport", "StartClose", this.Context); + + if (this.webSocket != null && this.webSocket.IsOpen) + { + this.State = TransportStates.Closing; + this.webSocket.Close(); + } + else + this.State = TransportStates.Closed; + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports/WebsocketTransport.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports/WebsocketTransport.cs.meta new file mode 100644 index 000000000..7489628b8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/Transports/WebsocketTransport.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e89b403b974cebf40845e9ca6616a0e0 +timeCreated: 1515237548 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/UploadItemController.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/UploadItemController.cs new file mode 100644 index 000000000..6dc855939 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/UploadItemController.cs @@ -0,0 +1,271 @@ +#if !BESTHTTP_DISABLE_SIGNALR_CORE +using System; +using BestHTTP; +using BestHTTP.Futures; +using BestHTTP.SignalRCore.Messages; + +namespace BestHTTP.SignalRCore +{ + + public interface IUPloadItemController : IDisposable + { + string[] StreamingIDs { get; } + HubConnection Hub { get; } + + void UploadParam(string streamId, T item); + void Cancel(); + } + + public sealed class DownStreamItemController : IFuture, IDisposable + { + public readonly long invocationId; + public readonly HubConnection hubConnection; + public readonly IFuture future; + + public FutureState state { get { return this.future.state; } } + public TResult value { get { return this.future.value; } } + public Exception error { get { return this.future.error; } } + + public bool IsCanceled { get; private set; } + + public DownStreamItemController(HubConnection hub, long iId, IFuture future) + { + this.hubConnection = hub; + this.invocationId = iId; + this.future = future; + } + + public void Cancel() + { + if (this.IsCanceled) + return; + + this.IsCanceled = true; + + Message message = new Message + { + type = MessageTypes.CancelInvocation, + invocationId = this.invocationId.ToString() + }; + + this.hubConnection.SendMessage(message); + } + + public void Dispose() + { + GC.SuppressFinalize(this); + Cancel(); + } + + public IFuture OnItem(FutureValueCallback callback) { return this.future.OnItem(callback); } + public IFuture OnSuccess(FutureValueCallback callback) { return this.future.OnSuccess(callback); } + public IFuture OnError(FutureErrorCallback callback) { return this.future.OnError(callback); } + public IFuture OnComplete(FutureCallback callback) { return this.future.OnComplete(callback); } + } + + public sealed class UpStreamItemController : IUPloadItemController, IFuture + { + public readonly long invocationId; + public readonly string[] streamingIds; + public readonly HubConnection hubConnection; + public readonly Futures.IFuture future; + + public string[] StreamingIDs { get { return this.streamingIds; } } + + public HubConnection Hub { get { return this.hubConnection; } } + + public FutureState state { get { return this.future.state; } } + public TResult value { get { return this.future.value; } } + public Exception error { get { return this.future.error; } } + + public bool IsFinished { get; private set; } + + public bool IsCanceled { get; private set; } + + private object[] streams; + + public UpStreamItemController(HubConnection hub, long iId, string[] sIds, IFuture future) + { + this.hubConnection = hub; + this.invocationId = iId; + this.streamingIds = sIds; + this.streams = new object[this.streamingIds.Length]; + this.future = future; + } + + public UploadChannel GetUploadChannel(int paramIdx) + { + var stream = this.streams[paramIdx] as UploadChannel; + if (stream == null) + this.streams[paramIdx] = stream = new UploadChannel(this, paramIdx); + + return stream; + } + + public void UploadParam(string streamId, T item) + { + if (streamId == null) + return; + + var message = new Message + { + type = MessageTypes.StreamItem, + invocationId = streamId.ToString(), + item = item, + }; + + this.hubConnection.SendMessage(message); + } + + public void Finish() + { + if (!this.IsFinished) + { + this.IsFinished = true; + + for (int i = 0; i < this.streamingIds.Length; ++i) + if (this.streamingIds[i] != null) + { + var message = new Message + { + type = MessageTypes.Completion, + invocationId = this.streamingIds[i].ToString() + }; + + this.hubConnection.SendMessage(message); + } + } + } + + public void Cancel() + { + if (!this.IsFinished && !this.IsCanceled) + { + this.IsCanceled = true; + + var message = new Message + { + type = MessageTypes.CancelInvocation, + invocationId = this.invocationId.ToString(), + }; + + this.hubConnection.SendMessage(message); + + // Zero out the streaming ids, disabling any future message sending + Array.Clear(this.streamingIds, 0, this.streamingIds.Length); + + // If it's also a down-stream, set it canceled. + var itemContainer = (this.future.value as StreamItemContainer); + if (itemContainer != null) + itemContainer.IsCanceled = true; + } + } + + void IDisposable.Dispose() + { + GC.SuppressFinalize(this); + + Finish(); + } + + public IFuture OnItem(FutureValueCallback callback) { return this.future.OnItem(callback); } + public IFuture OnSuccess(FutureValueCallback callback) { return this.future.OnSuccess(callback); } + public IFuture OnError(FutureErrorCallback callback) { return this.future.OnError(callback); } + public IFuture OnComplete(FutureCallback callback) { return this.future.OnComplete(callback); } + } + + /// + /// An upload channel that represents one prameter of a client callable function. It implements the IDisposable + /// interface and calls Finish from the Dispose method. + /// + public sealed class UploadChannel : IDisposable + { + /// + /// The associated upload controller + /// + public IUPloadItemController Controller { get; private set; } + + /// + /// What parameter is bound to. + /// + public int ParamIdx { get; private set; } + + /// + /// Returns true if Finish() or Cancel() is already called. + /// + public bool IsFinished + { + get { return this.Controller.StreamingIDs[this.ParamIdx] == null; } + private set + { + if (value) + this.Controller.StreamingIDs[this.ParamIdx] = null; + } + } + + /// + /// The unique generated id of this parameter channel. + /// + public string StreamingId { get { return this.Controller.StreamingIDs[this.ParamIdx]; } } + + internal UploadChannel(IUPloadItemController ctrl, int paramIdx) + { + this.Controller = ctrl; + this.ParamIdx = paramIdx; + } + + /// + /// Uploads a parameter value to the server. + /// + public void Upload(T item) + { + string streamId = this.StreamingId; + if (streamId != null) + this.Controller.UploadParam(streamId, item); + } + + /// + /// Calling this function cancels the call itself, not just a parameter upload channel. + /// + public void Cancel() + { + if (!this.IsFinished) + { + // Cancel all upload stream, cancel will also set streaming ids to 0. + this.Controller.Cancel(); + } + } + + /// + /// Finishes the channel by telling the server that no more uplode items will follow. + /// + public void Finish() + { + if (!this.IsFinished) + { + string streamId = this.StreamingId; + if (streamId != null) + { + // this will set the streaming id to 0 + this.IsFinished = true; + + var message = new Message + { + type = MessageTypes.Completion, + invocationId = streamId.ToString() + }; + + this.Controller.Hub.SendMessage(message); + } + } + } + + void IDisposable.Dispose() + { + if (!this.IsFinished) + Finish(); + GC.SuppressFinalize(this); + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/UploadItemController.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/UploadItemController.cs.meta new file mode 100644 index 000000000..34742bc41 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SignalRCore/UploadItemController.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 889522a139cfb2544844a541fd70f6fc +timeCreated: 1548919763 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3.meta new file mode 100644 index 000000000..7f10af841 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e9a8c00b98ceed4d9940ce14caaad8b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Enums.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Enums.cs new file mode 100644 index 000000000..c86d17510 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Enums.cs @@ -0,0 +1,64 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +namespace BestHTTP.SocketIO3 +{ + /// + /// Possible event types on the transport level. + /// + public enum TransportEventTypes : int + { + Unknown = -1, + Open = 0, + Close = 1, + Ping = 2, + Pong = 3, + Message = 4, + Upgrade = 5, + Noop = 6 + } + + /// + /// Event types of the SocketIO protocol. + /// + public enum SocketIOEventTypes : int + { + Unknown = -1, + + /// + /// Connect to a namespace, or we connected to a namespace + /// + Connect = 0, + + /// + /// Disconnect a namespace, or we disconnected from a namespace. + /// + Disconnect = 1, + + /// + /// A general event. The event's name is in the payload. + /// + Event = 2, + + /// + /// Acknowledgment of an event. + /// + Ack = 3, + + /// + /// Error sent by the server, or by the plugin + /// + Error = 4, + + /// + /// A general event with binary attached to the packet. The event's name is in the payload. + /// + BinaryEvent = 5, + + /// + /// Acknowledgment of a binary event. + /// + BinaryAck = 6 + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Enums.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Enums.cs.meta new file mode 100644 index 000000000..87e578884 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Enums.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a0320baefeabf546a23d1a7c27b5d9d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Error.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Error.cs new file mode 100644 index 000000000..92392126c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Error.cs @@ -0,0 +1,23 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +namespace BestHTTP.SocketIO3 +{ + public class Error + { + public string message; + + public Error() { } + + public Error(string msg) + { + this.message = msg; + } + + public override string ToString() + { + return this.message; + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Error.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Error.cs.meta new file mode 100644 index 000000000..a5db26ee0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Error.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc0e45f7616e65448929807db6fd85f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Events.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Events.meta new file mode 100644 index 000000000..06994bee0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Events.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5bf17616a41ba2945a64fcef10150787 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Events/EventNames.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Events/EventNames.cs new file mode 100644 index 000000000..a67798c75 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Events/EventNames.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System; + +namespace BestHTTP.SocketIO3.Events +{ + /// + /// Helper class to provide functions to an easy Enum->string conversation of the transport and SocketIO evenet types. + /// + public static class EventNames + { + public const string Connect = "connect"; + public const string Disconnect = "disconnect"; + public const string Event = "event"; + public const string Ack = "ack"; + public const string Error = "error"; + public const string BinaryEvent = "binaryevent"; + public const string BinaryAck = "binaryack"; + + private static string[] SocketIONames = new string[] { "unknown", "connect", "disconnect", "event", "ack", "error", "binaryevent", "binaryack" }; + private static string[] TransportNames = new string[] { "unknown", "open", "close", "ping", "pong", "message", "upgrade", "noop" }; + private static string[] BlacklistedEvents = new string[] { "connect", "connect_error", "connect_timeout", "disconnect", "error", "reconnect", + "reconnect_attempt", "reconnect_failed", "reconnect_error", "reconnecting" }; + + public static string GetNameFor(SocketIOEventTypes type) + { + return SocketIONames[(int)type + 1]; + } + + public static string GetNameFor(TransportEventTypes transEvent) + { + return TransportNames[(int)transEvent + 1]; + } + + /// + /// Checks an event name whether it's blacklisted or not. + /// + public static bool IsBlacklisted(string eventName) + { + for (int i = 0; i < BlacklistedEvents.Length; ++i) + if (string.Compare(BlacklistedEvents[i], eventName, StringComparison.OrdinalIgnoreCase) == 0) + return true; + return false; + } + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Events/EventNames.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Events/EventNames.cs.meta new file mode 100644 index 000000000..b4f0ee745 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Events/EventNames.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 965500051efb4ac48ac133569578eec2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Events/TypedEventTable.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Events/TypedEventTable.cs new file mode 100644 index 000000000..28df4df5c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Events/TypedEventTable.cs @@ -0,0 +1,130 @@ +#if !BESTHTTP_DISABLE_SOCKETIO +using System; +using System.Collections.Generic; + +namespace BestHTTP.SocketIO3.Events +{ + [PlatformSupport.IL2CPP.Preserve] + public sealed class ConnectResponse + { + [PlatformSupport.IL2CPP.Preserve] public string sid; + } + + public struct CallbackDescriptor + { + public readonly Type[] ParamTypes; + public readonly Action Callback; + public readonly bool Once; + + public CallbackDescriptor(Type[] paramTypes, Action callback, bool once) + { + this.ParamTypes = paramTypes; + this.Callback = callback; + this.Once = once; + } + } + + public sealed class Subscription + { + public List callbacks = new List(1); + + public void Add(Type[] paramTypes, Action callback, bool once) + { + this.callbacks.Add(new CallbackDescriptor(paramTypes, callback, once)); + } + + public void Remove(Action callback) + { + int idx = -1; + for (int i = 0; i < this.callbacks.Count && idx == -1; ++i) + if (this.callbacks[i].Callback == callback) + idx = i; + + if (idx != -1) + this.callbacks.RemoveAt(idx); + } + } + + public sealed class TypedEventTable + { + /// + /// The Socket that this EventTable is bound to. + /// + private Socket Socket { get; set; } + + /// + /// This is where we store the methodname => callback mapping. + /// + private Dictionary subscriptions = new Dictionary(StringComparer.OrdinalIgnoreCase); + + /// + /// Constructor to create an instance and bind it to a socket. + /// + public TypedEventTable(Socket socket) + { + this.Socket = socket; + } + + public Subscription GetSubscription(string name) + { + Subscription subscription = null; + this.subscriptions.TryGetValue(name, out subscription); + return subscription; + } + + public void Register(string methodName, Type[] paramTypes, Action callback, bool once = false) + { + Subscription subscription = null; + if (!this.subscriptions.TryGetValue(methodName, out subscription)) + this.subscriptions.Add(methodName, subscription = new Subscription()); + + subscription.Add(paramTypes, callback, once); + } + + public void Call(string eventName, object[] args) + { + Subscription subscription = null; + if (this.subscriptions.TryGetValue(eventName, out subscription)) + { + for (int i = 0; i < subscription.callbacks.Count; ++i) + { + var callbackDesc = subscription.callbacks[i]; + + try + { + callbackDesc.Callback.Invoke(args); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("TypedEventTable", String.Format("Call('{0}', {1}) - Callback.Invoke", eventName, args != null ? args.Length : 0), ex, this.Socket.Context); + } + + if (callbackDesc.Once) + subscription.callbacks.RemoveAt(i--); + } + } + } + + public void Call(IncomingPacket packet) + { + if (packet.Equals(IncomingPacket.Empty)) + return; + + string name = packet.EventName; + object[] args = packet.DecodedArg != null ? new object[] { packet.DecodedArg } : packet.DecodedArgs; + + Call(name, args); + } + + public void Unregister(string name) + { + this.subscriptions.Remove(name); + } + + public void Clear() + { + this.subscriptions.Clear(); + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Events/TypedEventTable.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Events/TypedEventTable.cs.meta new file mode 100644 index 000000000..5657c90e8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Events/TypedEventTable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c1608ad010ae3f840b8427e6763aaf77 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/HandshakeData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/HandshakeData.cs new file mode 100644 index 000000000..1d2175300 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/HandshakeData.cs @@ -0,0 +1,44 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System.Collections.Generic; + +namespace BestHTTP.SocketIO3 +{ + /// + /// Helper class to parse and hold handshake information. + /// + [PlatformSupport.IL2CPP.Preserve] + public sealed class HandshakeData + { + /// + /// Session ID of this connection. + /// + [PlatformSupport.IL2CPP.Preserve] + public string Sid { get; private set; } + + /// + /// List of possible upgrades. + /// + [PlatformSupport.IL2CPP.Preserve] + public List Upgrades { get; private set; } + + /// + /// What interval we have to set a ping message. + /// + [PlatformSupport.IL2CPP.Preserve] + public int PingInterval { get; private set; } + + /// + /// What time have to pass without an answer to our ping request when we can consider the connection disconnected. + /// + [PlatformSupport.IL2CPP.Preserve] + public int PingTimeout { get; private set; } + + /// + /// This defines how many bytes a single message can be, before the server closes the socket. + /// + public int MaxPayload { get; private set; } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/HandshakeData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/HandshakeData.cs.meta new file mode 100644 index 000000000..266c3840e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/HandshakeData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f82b85f5bca6f204cbeb8f8548a39071 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/IncomingPacket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/IncomingPacket.cs new file mode 100644 index 000000000..4b8e1fd6e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/IncomingPacket.cs @@ -0,0 +1,151 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +namespace BestHTTP.SocketIO3 +{ + using System.Collections.Generic; + + using BestHTTP.PlatformSupport.Memory; + using BestHTTP.SocketIO3.Events; + + public struct OutgoingPacket + { + public bool IsBinary { get { return string.IsNullOrEmpty(this.Payload); } } + + public string Payload { get; set; } + public List Attachements { get; set; } + + public BufferSegment PayloadData { get; set; } + + public bool IsVolatile { get; set; } + + public override string ToString() + { + if (!string.IsNullOrEmpty(this.Payload)) + return this.Payload; + else + return this.PayloadData.ToString(); + } + } + + public struct IncomingPacket + { + public static readonly IncomingPacket Empty = new IncomingPacket(TransportEventTypes.Unknown, SocketIOEventTypes.Unknown, null, -1); + + /// + /// Event type of this packet on the transport layer. + /// + public TransportEventTypes TransportEvent { get; private set; } + + /// + /// The packet's type in the Socket.IO protocol. + /// + public SocketIOEventTypes SocketIOEvent { get; private set; } + + /// + /// The internal ack-id of this packet. + /// + public int Id { get; private set; } + + /// + /// The sender namespace's name. + /// + public string Namespace { get; private set; } + + /// + /// Count of binary data expected after the current packet. + /// + public int AttachementCount { get; set; } + + /// + /// list of binary data received. + /// + public List Attachements { get; set; } + + /// + /// The decoded event name from the payload string. + /// + public string EventName { get; set; } + + /// + /// The decoded arguments by the parser. + /// + public object[] DecodedArgs { get; set; } + + public object DecodedArg { get; set; } + + public IncomingPacket(TransportEventTypes transportEvent, SocketIOEventTypes packetType, string nsp, int id) + { + this.TransportEvent = transportEvent; + this.SocketIOEvent = packetType; + this.Namespace = nsp; + this.Id = id; + + this.AttachementCount = 0; + //this.ReceivedAttachements = 0; + this.Attachements = null; + + if (this.SocketIOEvent != SocketIOEventTypes.Unknown) + this.EventName = EventNames.GetNameFor(this.SocketIOEvent); + else + this.EventName = EventNames.GetNameFor(this.TransportEvent); + + this.DecodedArg = this.DecodedArgs = null; + } + + /// + /// Returns with the Payload of this packet. + /// + public override string ToString() + { + return string.Format("[Packet {0}{1}/{2},{3}[{4}]]", this.TransportEvent, this.SocketIOEvent, this.Namespace, this.Id, this.EventName); + } + + public override bool Equals(object obj) + { + if (obj is IncomingPacket) + return Equals((IncomingPacket)obj); + + return false; + } + + public bool Equals(IncomingPacket packet) + { + return this.TransportEvent == packet.TransportEvent && + this.SocketIOEvent == packet.SocketIOEvent && + this.Id == packet.Id && + this.Namespace == packet.Namespace && + this.EventName == packet.EventName && + this.DecodedArg == packet.DecodedArg && + this.DecodedArgs == packet.DecodedArgs; + } + + public override int GetHashCode() + { + int hashCode = -1860921451; + hashCode = hashCode * -1521134295 + TransportEvent.GetHashCode(); + hashCode = hashCode * -1521134295 + SocketIOEvent.GetHashCode(); + hashCode = hashCode * -1521134295 + Id.GetHashCode(); + + if (Namespace != null) + hashCode = hashCode * -1521134295 + Namespace.GetHashCode(); + + if (EventName != null) + hashCode = hashCode * -1521134295 + EventName.GetHashCode(); + + if (DecodedArgs != null) + hashCode = hashCode * -1521134295 + DecodedArgs.GetHashCode(); + + if (DecodedArg != null) + hashCode = hashCode * -1521134295 + DecodedArg.GetHashCode(); + + return hashCode; + } + + public static string GenerateAcknowledgementNameFromId(int id) + { + return string.Concat("Generated Callback Name for Id: ##", id.ToString(), "##"); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/IncomingPacket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/IncomingPacket.cs.meta new file mode 100644 index 000000000..b73bd28f6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/IncomingPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00ce19209b8aef24db825a613b0bfe75 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Interfaces.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Interfaces.cs new file mode 100644 index 000000000..9369ae32e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Interfaces.cs @@ -0,0 +1,44 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +namespace BestHTTP.SocketIO3 +{ + using BestHTTP.Logger; + using BestHTTP.PlatformSupport.Memory; + using BestHTTP.SocketIO3.Transports; + + /// + /// Interface to hide internal functions from the user by implementing it as an explicit interface. + /// + public interface IManager + { + LoggingContext Context { get; } + void Remove(Socket socket); + void Close(bool removeSockets = true); + void TryToReconnect(); + bool OnTransportConnected(ITransport transport); + void OnTransportError(ITransport trans, string err); + void OnTransportProbed(ITransport trans); + void SendPacket(OutgoingPacket packet); + void OnPacket(IncomingPacket packet); + void EmitEvent(string eventName, params object[] args); + void EmitEvent(SocketIOEventTypes type, params object[] args); + void EmitError(string msg); + void EmitAll(string eventName, params object[] args); + } + + /// + /// Interface to hide internal functions from the user by implementing it as an explicit interface. + /// + public interface ISocket + { + LoggingContext Context { get; } + void Open(); + void Disconnect(bool remove); + void OnPacket(IncomingPacket packet); + void EmitEvent(SocketIOEventTypes type, params object[] args); + void EmitEvent(string eventName, params object[] args); + void EmitError(string msg); + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Interfaces.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Interfaces.cs.meta new file mode 100644 index 000000000..b59c57c0b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Interfaces.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1cca0592430bc547857551f7e1f16ba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Parsers.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Parsers.meta new file mode 100644 index 000000000..8b4c062a0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Parsers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9b36cc089a1730748a3f212274f07e87 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Parsers/DefaultJsonParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Parsers/DefaultJsonParser.cs new file mode 100644 index 000000000..76b4c5e5b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Parsers/DefaultJsonParser.cs @@ -0,0 +1,562 @@ +#if !BESTHTTP_DISABLE_SOCKETIO +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.SocketIO3.Events; + +namespace BestHTTP.SocketIO3.Parsers +{ + public sealed class Placeholder + { + public bool _placeholder; + public int num; + } + + [PlatformSupport.IL2CPP.Il2CppEagerStaticClassConstructionAttribute] + public sealed class DefaultJsonParser : IParser + { + static DefaultJsonParser() + { + BestHTTP.JSON.LitJson.JsonMapper.RegisterImporter(str => Convert.FromBase64String(str)); + } + + private IncomingPacket PacketWithAttachment = IncomingPacket.Empty; + + private int ToInt(char ch) + { + int charValue = Convert.ToInt32(ch); + int num = charValue - '0'; + if (num < 0 || num > 9) + return -1; + + return num; + } + + public IncomingPacket Parse(SocketManager manager, string from) + { + int idx = 0; + var transportEvent = (TransportEventTypes)ToInt(from[idx++]); + var socketIOEvent = SocketIOEventTypes.Unknown; + var nsp = string.Empty; + var id = -1; + var payload = string.Empty; + int attachments = 0; + + if (from.Length > idx && ToInt(from[idx]) >= 0) + socketIOEvent = (SocketIOEventTypes)ToInt(from[idx++]); + else + socketIOEvent = SocketIOEventTypes.Unknown; + + // Parse Attachment + if (socketIOEvent == SocketIOEventTypes.BinaryEvent || socketIOEvent == SocketIOEventTypes.BinaryAck) + { + int endIdx = from.IndexOf('-', idx); + if (endIdx == -1) + endIdx = from.Length; + + int.TryParse(from.Substring(idx, endIdx - idx), out attachments); + + idx = endIdx + 1; + } + + // Parse Namespace + if (from.Length > idx && from[idx] == '/') + { + int endIdx = from.IndexOf(',', idx); + if (endIdx == -1) + endIdx = from.Length; + + nsp = from.Substring(idx, endIdx - idx); + idx = endIdx + 1; + } + else + nsp = "/"; + + // Parse Id + if (from.Length > idx && ToInt(from[idx]) >= 0) + { + int startIdx = idx++; + while (from.Length > idx && ToInt(from[idx]) >= 0) + idx++; + + int.TryParse(from.Substring(startIdx, idx - startIdx), out id); + } + + // What left is the payload data + if (from.Length > idx) + payload = from.Substring(idx); + else + payload = string.Empty; + + var packet = new IncomingPacket(transportEvent, socketIOEvent, nsp, id); + packet.AttachementCount = attachments; + + string eventName = packet.EventName; + object[] args = null; + + switch (socketIOEvent) + { + case SocketIOEventTypes.Unknown: + packet.DecodedArg = payload; + break; + + case SocketIOEventTypes.Connect: + // No Data | Object + if (!string.IsNullOrEmpty(payload)) + (eventName, args) = ReadData(manager, packet, payload); + break; + + case SocketIOEventTypes.Disconnect: + // No Data + break; + + case SocketIOEventTypes.Error: + // String | Object + (eventName, args) = ReadData(manager, packet, payload); + break; + + case SocketIOEventTypes.BinaryAck: + // Save payload until all attachments arrive + if (packet.AttachementCount > 0) + packet.DecodedArg = payload; + break; + + default: + // Array + (eventName, args) = ReadData(manager, packet, payload); + // Save payload until all attachments arrive + if (packet.AttachementCount > 0) + packet.DecodedArg = payload; + break; + } + + packet.EventName = eventName; + + if (args != null) + { + if (args.Length == 1) + packet.DecodedArg = args[0]; + else + packet.DecodedArgs = args; + } + + if (packet.AttachementCount > 0) + { + PacketWithAttachment = packet; + return IncomingPacket.Empty; + } + + return packet; + } + + public IncomingPacket MergeAttachements(SocketManager manager, IncomingPacket packet) + { + string payload = packet.DecodedArg as string; + packet.DecodedArg = null; + + string placeholderFormat = "{{\"_placeholder\":true,\"num\":{0}}}"; + + for (int i = 0; i < packet.Attachements.Count; ++i) + { + string placeholder = string.Format(placeholderFormat, i); + BufferSegment data = packet.Attachements[i]; + + payload = payload.Replace(placeholder, "\"" + Convert.ToBase64String(data.Data, data.Offset, data.Count) + "\""); + } + + (string eventName, object[] args) = ReadData(manager, packet, payload); + + packet.EventName = eventName; + + if (args != null) + { + if (args.Length == 1) + packet.DecodedArg = args[0]; + else + packet.DecodedArgs = args; + } + + return packet; + } + + private (string, object[]) ReadData(SocketManager manager, IncomingPacket packet, string payload) + { + Socket socket = manager.GetSocket(packet.Namespace); + + string eventName = packet.EventName; + Subscription subscription = socket.GetSubscription(eventName); + + object[] args = null; + + switch (packet.SocketIOEvent) + { + case SocketIOEventTypes.Unknown: + // TODO: Error? + break; + + case SocketIOEventTypes.Connect: + // No Data | Object + using (var strReader = new System.IO.StringReader(payload)) + args = ReadParameters(socket, subscription, strReader); + break; + + case SocketIOEventTypes.Disconnect: + // No Data + break; + + case SocketIOEventTypes.Error: + // String | Object + switch (payload[0]) + { + case '{': + using (var strReader = new System.IO.StringReader(payload)) + args = ReadParameters(socket, subscription, strReader); + break; + + default: + args = new object[] { new Error(payload) }; + break; + + } + break; + + case SocketIOEventTypes.Ack: + case SocketIOEventTypes.BinaryAck: + eventName = IncomingPacket.GenerateAcknowledgementNameFromId(packet.Id); + subscription = socket.GetSubscription(eventName); + + args = ReadParameters(socket, subscription, JSON.LitJson.JsonMapper.ToObject>(payload), 0); + + break; + + default: + // Array + + List array = null; + using (var reader = new System.IO.StringReader(payload)) + array = JSON.LitJson.JsonMapper.ToObject>(new JSON.LitJson.JsonReader(reader)); + + if (array.Count > 0) + { + eventName = array[0].ToString(); + subscription = socket.GetSubscription(eventName); + } + + if (packet.AttachementCount == 0 || packet.Attachements != null) + { + try + { + args = ReadParameters(socket, subscription, array, 1); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("DefaultJsonParser", string.Format("ReadParameters with eventName: {0}", eventName), ex); + } + } + + break; + } + + return (eventName, args); + } + + private object[] ReadParameters(Socket socket, Subscription subscription, List array, int startIdx) + { + object[] args = null; + + if (array.Count > startIdx) + { + var desc = subscription != null ? subscription.callbacks.FirstOrDefault() : default(CallbackDescriptor); + int paramCount = desc.ParamTypes != null ? desc.ParamTypes.Length : 0; + + int arrayIdx = startIdx; + if (paramCount > 0) + { + args = new object[paramCount]; + + for (int i = 0; i < desc.ParamTypes.Length; ++i) + { + Type type = desc.ParamTypes[i]; + + if (type == typeof(Socket)) + args[i] = socket; + else if (type == typeof(SocketManager)) + args[i] = socket.Manager; + else if (type == typeof(Placeholder)) + args[i] = new Placeholder(); + else + args[i] = ConvertTo(desc.ParamTypes[i], array[arrayIdx++]); + } + } + } + + return args; + } + + public object ConvertTo(Type toType, object obj) + { + if (obj == null) + return null; + +#if NETFX_CORE + TypeInfo objType = obj.GetType().GetTypeInfo(); +#else + Type objType = obj.GetType(); +#endif + +#if NETFX_CORE + TypeInfo typeInfo = toType.GetTypeInfo(); +#endif + +#if NETFX_CORE + if (typeInfo.IsEnum) +#else + if (toType.IsEnum) +#endif + return Enum.Parse(toType, obj.ToString(), true); + +#if NETFX_CORE + if (typeInfo.IsPrimitive) +#else + if (toType.IsPrimitive) +#endif + return Convert.ChangeType(obj, toType); + + if (toType == typeof(string)) + return obj.ToString(); + +#if NETFX_CORE + if (typeInfo.IsGenericType && toType.Name == "Nullable`1") + return Convert.ChangeType(obj, toType.GenericTypeArguments[0]); +#else + if (toType.IsGenericType && toType.Name == "Nullable`1") + return Convert.ChangeType(obj, toType.GetGenericArguments()[0]); +#endif + +#if NETFX_CORE + if (objType.Equals(typeInfo)) +#else + if (objType.Equals(toType)) +#endif + return obj; + + if (toType == typeof(byte[]) && objType == typeof(string)) + return Convert.FromBase64String(obj.ToString()); + + return JSON.LitJson.JsonMapper.ToObject(toType, JSON.LitJson.JsonMapper.ToJson(obj)); + } + + private object[] ReadParameters(Socket socket, Subscription subscription, System.IO.TextReader reader) + { + var desc = subscription != null ? subscription.callbacks.FirstOrDefault() : default(CallbackDescriptor); + int paramCount = desc.ParamTypes != null ? desc.ParamTypes.Length : 0; + object[] args = null; + + if (paramCount > 0) + { + args = new object[paramCount]; + + for (int i = 0; i < desc.ParamTypes.Length; ++i) + { + Type type = desc.ParamTypes[i]; + + if (type == typeof(Socket)) + args[i] = socket; + else if (type == typeof(SocketManager)) + args[i] = socket.Manager; + else { + BestHTTP.JSON.LitJson.JsonReader jr = new JSON.LitJson.JsonReader(reader); + args[i] = JSON.LitJson.JsonMapper.ToObject(desc.ParamTypes[i], jr); + reader.Read(); + } + } + } + + return args; + } + + public IncomingPacket Parse(SocketManager manager, BufferSegment data, TransportEventTypes transportEvent = TransportEventTypes.Unknown) + { + IncomingPacket packet = IncomingPacket.Empty; + + if (PacketWithAttachment.Attachements == null) + PacketWithAttachment.Attachements = new List(PacketWithAttachment.AttachementCount); + PacketWithAttachment.Attachements.Add(data); + + if (PacketWithAttachment.Attachements.Count == PacketWithAttachment.AttachementCount) + { + packet = manager.Parser.MergeAttachements(manager, PacketWithAttachment); + PacketWithAttachment = IncomingPacket.Empty; + } + + return packet; + } + + public OutgoingPacket CreateOutgoing(TransportEventTypes transportEvent, string payload) + { + return new OutgoingPacket { Payload = "" + (char)('0' + (byte)transportEvent) + payload }; + } + + private StringBuilder builder = new StringBuilder(); + public OutgoingPacket CreateOutgoing(Socket socket, SocketIOEventTypes socketIOEvent, int id, string name, object arg) + { + return CreateOutgoing(socket, socketIOEvent, id, name, arg != null ? new object[] { arg } : null); + } + + private int GetBinaryCount(object[] args) + { + if (args == null || args.Length == 0) + return 0; + + int count = 0; + for (int i = 0; i < args.Length; ++i) + if (args[i] is byte[]) + count++; + + return count; + } + public OutgoingPacket CreateOutgoing(Socket socket, SocketIOEventTypes socketIOEvent, int id, string name, object[] args) + { + builder.Length = 0; + List attachements = null; + + switch(socketIOEvent) + { + case SocketIOEventTypes.Ack: + if (GetBinaryCount(args) > 0) + { + attachements = CreatePlaceholders(args); + socketIOEvent = SocketIOEventTypes.BinaryAck; + } + break; + + case SocketIOEventTypes.Event: + if (GetBinaryCount(args) > 0) + { + attachements = CreatePlaceholders(args); + socketIOEvent = SocketIOEventTypes.BinaryEvent; + } + break; + } + + builder.Append(((int)TransportEventTypes.Message).ToString()); + builder.Append(((int)socketIOEvent).ToString()); + + if (socketIOEvent == SocketIOEventTypes.BinaryEvent || socketIOEvent == SocketIOEventTypes.BinaryAck) + { + builder.Append(attachements.Count.ToString()); + builder.Append('-'); + } + + // Add the namespace. If there is any other then the root nsp ("/") + // then we have to add a trailing "," if we have more data. + bool nspAdded = false; + if (socket.Namespace != "/") + { + builder.Append(socket.Namespace); + nspAdded = true; + } + + // ack id, if any + if (id >= 0) + { + if (nspAdded) + { + builder.Append(','); + nspAdded = false; + } + + builder.Append(id.ToString()); + } + + // payload + switch (socketIOEvent) + { + case SocketIOEventTypes.Connect: + // No Data | Object + if (args != null && args.Length > 0) + { + if (nspAdded) builder.Append(','); + + builder.Append(BestHTTP.JSON.LitJson.JsonMapper.ToJson(args[0])); + } + break; + + case SocketIOEventTypes.Disconnect: + // No Data + break; + + case SocketIOEventTypes.Error: + // String | Object + if (args != null && args.Length > 0) + { + if (nspAdded) builder.Append(','); + + builder.Append(BestHTTP.JSON.LitJson.JsonMapper.ToJson(args[0])); + } + break; + + case SocketIOEventTypes.Ack: + case SocketIOEventTypes.BinaryAck: + if (nspAdded) builder.Append(','); + + if (args != null && args.Length > 0) + { + var argsJson = JSON.LitJson.JsonMapper.ToJson(args); + builder.Append(argsJson); + } + else + builder.Append("[]"); + break; + + default: + if (nspAdded) builder.Append(','); + + // Array + builder.Append('['); + if (!string.IsNullOrEmpty(name)) + { + builder.Append('\"'); + builder.Append(name); + builder.Append('\"'); + } + + if (args != null && args.Length > 0) + { + builder.Append(','); + var argsJson = JSON.LitJson.JsonMapper.ToJson(args); + builder.Append(argsJson, 1, argsJson.Length - 2); + } + + builder.Append(']'); + break; + } + + return new OutgoingPacket { Payload = builder.ToString(), Attachements = attachements }; + } + + private List CreatePlaceholders(object[] args) + { + List attachements = null; + + for (int i = 0; i < args.Length; ++i) + { + var binary = args[i] as byte[]; + if (binary != null) + { + if (attachements == null) + attachements = new List(); + attachements.Add(binary); + + args[i] = new Placeholder { _placeholder = true, num = attachements.Count - 1 }; + } + } + + return attachements; + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Parsers/DefaultJsonParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Parsers/DefaultJsonParser.cs.meta new file mode 100644 index 000000000..436ac6f4c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Parsers/DefaultJsonParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c62226f9fd839c4e87dce9d3916d46c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Parsers/IParser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Parsers/IParser.cs new file mode 100644 index 000000000..77058c7c1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Parsers/IParser.cs @@ -0,0 +1,18 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP.SocketIO3.Parsers +{ + public interface IParser + { + IncomingPacket Parse(SocketManager manager, string data); + IncomingPacket Parse(SocketManager manager, BufferSegment data, TransportEventTypes transportEvent = TransportEventTypes.Unknown); + IncomingPacket MergeAttachements(SocketManager manager, IncomingPacket packet); + + OutgoingPacket CreateOutgoing(TransportEventTypes transportEvent, string payload); + OutgoingPacket CreateOutgoing(Socket socket, SocketIOEventTypes socketIOEvent, int id, string name, object arg); + OutgoingPacket CreateOutgoing(Socket socket, SocketIOEventTypes socketIOEvent, int id, string name, object[] args); + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Parsers/IParser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Parsers/IParser.cs.meta new file mode 100644 index 000000000..4fadd05c2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Parsers/IParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00b2cf789a1d91c4cbde279e44fdcd96 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Socket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Socket.cs new file mode 100644 index 000000000..dcc0caa79 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Socket.cs @@ -0,0 +1,534 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System; + +namespace BestHTTP.SocketIO3 +{ + using BestHTTP; + using BestHTTP.Logger; + using BestHTTP.SocketIO3.Events; + + public delegate void SocketIOCallback(Socket socket, IncomingPacket packet, params object[] args); + public delegate void SocketIOAckCallback(Socket socket, IncomingPacket packet, params object[] args); + + public struct EmitBuilder + { + private Socket socket; + internal bool isVolatile; + internal int id; + + internal EmitBuilder(Socket s) + { + this.socket = s; + this.isVolatile = false; + this.id = -1; + } + + public EmitBuilder ExpectAcknowledgement(Action callback) + { + this.id = this.socket.Manager.NextAckId; + string name = IncomingPacket.GenerateAcknowledgementNameFromId(this.id); + + this.socket.TypedEventTable.Register(name, null, _ => callback(), true); + return this; + } + + public EmitBuilder ExpectAcknowledgement(Action callback) + { + this.id = this.socket.Manager.NextAckId; + string name = IncomingPacket.GenerateAcknowledgementNameFromId(this.id); + + this.socket.TypedEventTable.Register(name, new Type[] { typeof(T) }, (args) => callback((T)args[0]), true); + + return this; + } + + public EmitBuilder Volatile() + { + this.isVolatile = true; + return this; + } + + public Socket Emit(string eventName, params object[] args) + { + bool blackListed = EventNames.IsBlacklisted(eventName); + if (blackListed) + throw new ArgumentException("Blacklisted event: " + eventName); + + var packet = this.socket.Manager.Parser.CreateOutgoing(this.socket, SocketIOEventTypes.Event, this.id, eventName, args); + packet.IsVolatile = this.isVolatile; + (this.socket.Manager as IManager).SendPacket(packet); + + return this.socket; + } + } + + /// + /// This class represents a Socket.IO namespace. + /// + public sealed class Socket : ISocket + { + #region Public Properties + + /// + /// The SocketManager instance that created this socket. + /// + public SocketManager Manager { get; private set; } + + /// + /// The namespace that this socket is bound to. + /// + public string Namespace { get; private set; } + + /// + /// Unique Id of the socket. + /// + public string Id { get; private set; } + + /// + /// True if the socket is connected and open to the server. False otherwise. + /// + public bool IsOpen { get; private set; } + + public IncomingPacket CurrentPacket { get { return this.currentPacket; } } + + public LoggingContext Context { get; private set; } + + #endregion + + internal TypedEventTable TypedEventTable; + private IncomingPacket currentPacket = IncomingPacket.Empty; + + /// + /// Internal constructor. + /// + internal Socket(string nsp, SocketManager manager) + { + this.Context = new LoggingContext(this); + this.Context.Add("nsp", nsp); + + this.Namespace = nsp; + this.Manager = manager; + this.IsOpen = false; + this.TypedEventTable = new TypedEventTable(this); + + this.On(EventNames.GetNameFor(SocketIOEventTypes.Connect), OnConnected); + } + + private void OnConnected(ConnectResponse resp) + { + this.Id = resp.sid; + this.IsOpen = true; + } + + #region Socket Handling + + /// + /// Internal function to start opening the socket. + /// + void ISocket.Open() + { + HTTPManager.Logger.Information("Socket", string.Format("Open - Manager.State = {0}", Manager.State), this.Context); + + // The transport already established the connection + if (Manager.State == SocketManager.States.Open) + OnTransportOpen(); + else if (Manager.Options.AutoConnect && Manager.State == SocketManager.States.Initial) + Manager.Open(); + } + + /// + /// Disconnects this socket/namespace. + /// + public void Disconnect() + { + (this as ISocket).Disconnect(true); + } + + /// + /// Disconnects this socket/namespace. + /// + void ISocket.Disconnect(bool remove) + { + // Send a disconnect packet to the server + if (IsOpen) + { + var packet = this.Manager.Parser.CreateOutgoing(this, SocketIOEventTypes.Disconnect, -1, null, null); + (Manager as IManager).SendPacket(packet); + + // IsOpen must be false, because in the OnPacket preprocessing the packet would call this function again + IsOpen = false; + (this as ISocket).OnPacket(new IncomingPacket(TransportEventTypes.Message, SocketIOEventTypes.Disconnect, this.Namespace, -1)); + } + + if (remove) + { + this.TypedEventTable.Clear(); + + (Manager as IManager).Remove(this); + } + } + + #endregion + + #region Emit Implementations + + /// + /// By emitting a volatile event, if the transport isn't ready the event is going to be discarded. + /// + public EmitBuilder Volatile() + { + return new EmitBuilder(this) { isVolatile = true }; + } + + public EmitBuilder ExpectAcknowledgement(Action callback) + { + return new EmitBuilder(this).ExpectAcknowledgement(callback); + } + + public EmitBuilder ExpectAcknowledgement(Action callback) + { + return new EmitBuilder(this).ExpectAcknowledgement(callback); + } + + public Socket Emit(string eventName, params object[] args) + { + return new EmitBuilder(this).Emit(eventName, args); + } + + public Socket EmitAck(params object[] args) + { + return EmitAck(this.currentPacket, args); + } + + public Socket EmitAck(IncomingPacket packet, params object[] args) + { + if (packet.Equals(IncomingPacket.Empty)) + throw new ArgumentNullException("currentPacket"); + + if (packet.Id < 0 || (packet.SocketIOEvent != SocketIOEventTypes.Event && packet.SocketIOEvent != SocketIOEventTypes.BinaryEvent)) + throw new ArgumentException("Wrong packet - you can't send an Ack for a packet with id < 0 or SocketIOEvent != Event or SocketIOEvent != BinaryEvent!"); + + var eventType = packet.SocketIOEvent == SocketIOEventTypes.Event ? SocketIOEventTypes.Ack : SocketIOEventTypes.BinaryAck; + + (Manager as IManager).SendPacket(this.Manager.Parser.CreateOutgoing(this, eventType, packet.Id, null, args)); + + return this; + } + + #endregion + + #region On Implementations + + public void On(SocketIOEventTypes eventType, Action callback) + { + this.TypedEventTable.Register(EventNames.GetNameFor(eventType), null, _ => callback()); + } + + public void On(SocketIOEventTypes eventType, Action callback) + { + string eventName = EventNames.GetNameFor(eventType); + this.TypedEventTable.Register(eventName, new Type[] { typeof(T) }, (args) => + { + T arg = default(T); + try + { + arg = (T)args[0]; + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("Socket", String.Format("On<{0}>('{1}') - cast failed", typeof(T).Name, eventName), ex, this.Context); + } + + callback(arg); + }); + } + + public void On(string eventName, Action callback) + { + this.TypedEventTable.Register(eventName, null, _ => callback()); + } + + public void On(string eventName, Action callback) + { + this.TypedEventTable.Register(eventName, new Type[] { typeof(T) }, (args) => { + T arg = default(T); + try + { + arg = (T)args[0]; + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("Socket", String.Format("On<{0}>('{1}') - cast failed", typeof(T).Name, eventName), ex, this.Context); + return; + } + + callback(arg); + }); + } + + public void On(string eventName, Action callback) + { + this.TypedEventTable.Register(eventName, new Type[] { typeof(T1), typeof(T2) }, (args) => { + T1 arg1 = default(T1); + T2 arg2 = default(T2); + try + { + arg1 = (T1)args[0]; + arg2 = (T2)args[1]; + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("Socket", String.Format("On<{0}, {1}>('{2}') - cast failed", typeof(T1).Name, typeof(T2).Name, eventName), ex, this.Context); + return; + } + + callback(arg1, arg2); + }); + } + + public void On(string eventName, Action callback) + { + this.TypedEventTable.Register(eventName, new Type[] { typeof(T1), typeof(T2), typeof(T3) }, (args) => { + T1 arg1 = default(T1); + T2 arg2 = default(T2); + T3 arg3 = default(T3); + try + { + arg1 = (T1)args[0]; + arg2 = (T2)args[1]; + arg3 = (T3)args[2]; + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("Socket", String.Format("On<{0}, {1}, {2}>('{3}') - cast failed", typeof(T1).Name, typeof(T2).Name, typeof(T3).Name, eventName), ex, this.Context); + return; + } + + callback(arg1, arg2, arg3); + }); + } + + public void On(string eventName, Action callback) + { + this.TypedEventTable.Register(eventName, new Type[] { typeof(T1), typeof(T2), typeof(T3), typeof(T4) }, (args) => { + T1 arg1 = default(T1); + T2 arg2 = default(T2); + T3 arg3 = default(T3); + T4 arg4 = default(T4); + try + { + arg1 = (T1)args[0]; + arg2 = (T2)args[1]; + arg3 = (T3)args[2]; + arg4 = (T4)args[3]; + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("Socket", String.Format("On<{0}, {1}, {2}, {3}>('{4}') - cast failed", typeof(T1).Name, typeof(T2).Name, typeof(T3).Name, typeof(T4).Name, eventName), ex, this.Context); + return; + } + + callback(arg1, arg2, arg3, arg4); + }); + } + + public void On(string eventName, Action callback) + { + this.TypedEventTable.Register(eventName, new Type[] { typeof(T1), typeof(T2), typeof(T3), typeof(T4), typeof(T5) }, (args) => { + T1 arg1 = default(T1); + T2 arg2 = default(T2); + T3 arg3 = default(T3); + T4 arg4 = default(T4); + T5 arg5 = default(T5); + try + { + arg1 = (T1)args[0]; + arg2 = (T2)args[1]; + arg3 = (T3)args[2]; + arg4 = (T4)args[3]; + arg5 = (T5)args[4]; + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("Socket", String.Format("On<{0}, {1}, {2}, {3}, {4}>('{5}') - cast failed", typeof(T1).Name, typeof(T2).Name, typeof(T3).Name, typeof(T4).Name, typeof(T5).Name, eventName), ex, this.Context); + return; + } + + callback(arg1, arg2, arg3, arg4, arg5); + }); + } + + #endregion + + #region Once Implementations + + public void Once(string eventName, Action callback) + { + this.TypedEventTable.Register(eventName, null, _ => callback(), true); + } + + public void Once(string eventName, Action callback) + { + this.TypedEventTable.Register(eventName, new Type[] { typeof(T) }, (args) => callback((T)args[0]), true); + } + + public void Once(string eventName, Action callback) + { + this.TypedEventTable.Register(eventName, new Type[] { typeof(T1), typeof(T2) }, (args) => callback((T1)args[0], (T2)args[1]), true); + } + + public void Once(string eventName, Action callback) + { + this.TypedEventTable.Register(eventName, new Type[] { typeof(T1), typeof(T2), typeof(T3) }, (args) => callback((T1)args[0], (T2)args[1], (T3)args[2]), true); + } + + public void Once(string eventName, Action callback) + { + this.TypedEventTable.Register(eventName, new Type[] { typeof(T1), typeof(T2), typeof(T3), typeof(T4) }, (args) => callback((T1)args[0], (T2)args[1], (T3)args[2], (T4)args[3]), true); + } + + public void Once(string eventName, Action callback) + { + this.TypedEventTable.Register(eventName, new Type[] { typeof(T1), typeof(T2), typeof(T3), typeof(T4), typeof(T5) }, (args) => callback((T1)args[0], (T2)args[1], (T3)args[2], (T4)args[3], (T5)args[4]), true); + } + + #endregion + + #region Off Implementations + + /// + /// Remove all callbacks for all events. + /// + public void Off() + { + this.TypedEventTable.Clear(); + } + + /// + /// Removes all callbacks to the given event. + /// + public void Off(string eventName) + { + this.TypedEventTable.Unregister(eventName); + } + + /// + /// Removes all callbacks to the given event. + /// + public void Off(SocketIOEventTypes type) + { + Off(EventNames.GetNameFor(type)); + } + + #endregion + + #region Packet Handling + + /// + /// Last call of the OnPacket chain(Transport -> Manager -> Socket), we will dispatch the event if there is any callback + /// + void ISocket.OnPacket(IncomingPacket packet) + { + // Some preprocessing of the packet + switch(packet.SocketIOEvent) + { + case SocketIOEventTypes.Connect: + break; + + case SocketIOEventTypes.Disconnect: + if (IsOpen) + { + IsOpen = false; + this.TypedEventTable.Call(packet); + Disconnect(); + } + break; + } + + try + { + this.currentPacket = packet; + + // Dispatch the event to all subscriber + this.TypedEventTable.Call(packet); + } + finally + { + this.currentPacket = IncomingPacket.Empty; + } + } + + #endregion + + public Subscription GetSubscription(string name) + { + return this.TypedEventTable.GetSubscription(name); + } + + /// + /// Emits an internal packet-less event to the user level. + /// + void ISocket.EmitEvent(SocketIOEventTypes type, params object[] args) + { + (this as ISocket).EmitEvent(EventNames.GetNameFor(type), args); + } + + /// + /// Emits an internal packet-less event to the user level. + /// + void ISocket.EmitEvent(string eventName, params object[] args) + { + if (!string.IsNullOrEmpty(eventName)) + this.TypedEventTable.Call(eventName, args); + } + + void ISocket.EmitError(string msg) + { + var outcoming = this.Manager.Parser.CreateOutgoing(this, SocketIOEventTypes.Error, -1, null, new Error(msg)); + IncomingPacket packet = IncomingPacket.Empty; + if (outcoming.IsBinary) + packet = this.Manager.Parser.Parse(this.Manager, outcoming.PayloadData); + else + packet = this.Manager.Parser.Parse(this.Manager, outcoming.Payload); + + (this as ISocket).EmitEvent(SocketIOEventTypes.Error, packet.DecodedArg ?? packet.DecodedArgs); + } + + #region Private Helper Functions + + /// + /// Called when the underlying transport is connected + /// + internal void OnTransportOpen() + { + HTTPManager.Logger.Information("Socket", "OnTransportOpen - IsOpen: " + this.IsOpen, this.Context); + + if (this.IsOpen) + return; + + object authData = null; + try + { + authData = this.Manager.Options.Auth != null ? this.Manager.Options.Auth(this.Manager, this) : null; + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("Socket", "OnTransportOpen - Options.Auth", ex, this.Context); + } + + try + { + (Manager as IManager).SendPacket(this.Manager.Parser.CreateOutgoing(this, SocketIOEventTypes.Connect, -1, null, authData)); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("Socket", "OnTransportOpen", ex, this.Context); + } + } + + #endregion + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Socket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Socket.cs.meta new file mode 100644 index 000000000..e46e74770 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Socket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: da95002fee0fc1346bc77e99fd15544b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/SocketManager.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/SocketManager.cs new file mode 100644 index 000000000..7d0d7f8e6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/SocketManager.cs @@ -0,0 +1,745 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System; +using System.Collections.Generic; + +using BestHTTP.SocketIO3.Transports; +using BestHTTP.Extensions; +using BestHTTP.SocketIO3.Parsers; +using BestHTTP.SocketIO3.Events; +using BestHTTP.Logger; +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP.SocketIO3 +{ + public sealed class SocketManager : IHeartbeat, IManager + { + /// + /// Possible states of a SocketManager instance. + /// + public enum States + { + /// + /// Initial state of the SocketManager + /// + Initial, + + /// + /// The SocketManager is currently opening. + /// + Opening, + + /// + /// The SocketManager is open, events can be sent to the server. + /// + Open, + + /// + /// Paused for transport upgrade + /// + Paused, + + /// + /// An error occurred, the SocketManager now trying to connect again to the server. + /// + Reconnecting, + + /// + /// The SocketManager is closed, initiated by the user or by the server + /// + Closed + } + + /// + /// Supported Socket.IO protocol version + /// + public int ProtocolVersion { get { return 4; } } + + #region Public Properties + + /// + /// The current state of this Socket.IO manager. + /// + public States State { get { return state; } private set { PreviousState = state; state = value; } } + private States state; + + /// + /// The SocketOptions instance that this manager will use. + /// + public SocketOptions Options { get; private set; } + + /// + /// The Uri to the Socket.IO endpoint. + /// + public Uri Uri { get; private set; } + + /// + /// The server sent and parsed Handshake data. + /// + public HandshakeData Handshake { get; private set; } + + /// + /// The currently used main transport instance. + /// + public ITransport Transport { get; private set; } + + /// + /// The Request counter for request-based transports. + /// + public ulong RequestCounter { get; internal set; } + + /// + /// The root("/") Socket. + /// + public Socket Socket { get { return GetSocket(); } } + + /// + /// Indexer to access socket associated to the given namespace. + /// + public Socket this[string nsp] { get { return GetSocket(nsp); } } + + /// + /// How many reconnect attempts made. + /// + public int ReconnectAttempts { get; private set; } + + /// + /// Parser to encode and decode messages and create strongly typed objects. + /// + public IParser Parser { get; set; } + + /// + /// Logging context of this socket.io connection. + /// + public LoggingContext Context { get; private set; } + + #endregion + + #region Internal Properties + + /// + /// Timestamp support to the request based transports. + /// + internal UInt64 Timestamp { get { return (UInt64)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds; } } + + /// + /// Auto-incrementing property to return Ack ids. + /// + internal int NextAckId { get { return System.Threading.Interlocked.Increment(ref nextAckId); } } + private int nextAckId; + + /// + /// Internal property to store the previous state of the manager. + /// + internal States PreviousState { get; private set; } + + /// + /// Transport currently upgrading. + /// + internal ITransport UpgradingTransport { get; set; } + + #endregion + + #region Privates + + /// + /// Namespace name -> Socket mapping + /// + private Dictionary Namespaces = new Dictionary(); + + /// + /// List of the sockets to able to iterate over them easily. + /// + private List Sockets = new List(); + + /// + /// List of unsent packets. Only instantiated when we have to use it. + /// + private List OfflinePackets; + + /// + /// When we sent out the last heartbeat(Ping) message. + /// + private DateTime LastHeartbeat = DateTime.MinValue; + + /// + /// When we have to try to do a reconnect attempt + /// + private DateTime ReconnectAt; + + /// + /// When we started to connect to the server. + /// + private DateTime ConnectionStarted; + + /// + /// Private flag to avoid multiple Close call + /// + private bool closing; + + /// + /// In Engine.io v4 / socket.io v3 the server sends the ping messages, not the client. + /// + private DateTime lastPingReceived; + + #endregion + + #region Constructors + + /// + /// Constructor to create a SocketManager instance that will connect to the given uri. + /// + public SocketManager(Uri uri) + :this(uri, new DefaultJsonParser(), new SocketOptions()) + { } + + public SocketManager(Uri uri, IParser parser) + : this(uri, parser, new SocketOptions()) + { } + + public SocketManager(Uri uri, SocketOptions options) + :this(uri, new DefaultJsonParser(), options) + { } + + /// + /// Constructor to create a SocketManager instance. + /// + public SocketManager(Uri uri, IParser parser, SocketOptions options) + { + this.Context = new LoggingContext(this); + + string path = uri.PathAndQuery; + if (path.Length <= 1) + { + string append; + if (uri.OriginalString[uri.OriginalString.Length - 1] == '/') + append = "socket.io/"; + else + append = "/socket.io/"; + + uri = new Uri(uri.OriginalString + append); + } + + this.Uri = uri; + this.Options = options ?? new SocketOptions(); + this.State = States.Initial; + this.PreviousState = States.Initial; + this.Parser = parser ?? new DefaultJsonParser(); + +#if !BESTHTTP_DISABLE_WEBSOCKET + if (uri.Scheme.StartsWith("ws")) + options.ConnectWith = TransportTypes.WebSocket; +#endif + } + + #endregion + + /// + /// Returns with the "/" namespace, the same as the Socket property. + /// + public Socket GetSocket() + { + return GetSocket("/"); + } + + /// + /// Returns with the specified namespace + /// + public Socket GetSocket(string nsp) + { + if (string.IsNullOrEmpty(nsp)) + throw new ArgumentNullException("Namespace parameter is null or empty!"); + + /*if (nsp[0] != '/') + nsp = "/" + nsp;*/ + + Socket socket = null; + if (!Namespaces.TryGetValue(nsp, out socket)) + { + // No socket found, create one + socket = new Socket(nsp, this); + + Namespaces.Add(nsp, socket); + Sockets.Add(socket); + + (socket as ISocket).Open(); + } + + return socket; + } + + /// + /// Internal function to remove a Socket instance from this manager. + /// + /// + void IManager.Remove(Socket socket) + { + Namespaces.Remove(socket.Namespace); + Sockets.Remove(socket); + + if (Sockets.Count == 0) + Close(); + } + + #region Connection to the server, and upgrading + + /// + /// This function will begin to open the Socket.IO connection by sending out the handshake request. + /// If the Options' AutoConnect is true, it will be called automatically. + /// + public void Open() + { + if (State != States.Initial && + State != States.Closed && + State != States.Reconnecting) + return; + + HTTPManager.Logger.Information("SocketManager", "Opening", this.Context); + + ReconnectAt = DateTime.MinValue; + + switch (Options.ConnectWith) + { + case TransportTypes.Polling: Transport = new PollingTransport(this); break; +#if !BESTHTTP_DISABLE_WEBSOCKET + case TransportTypes.WebSocket: + Transport = new WebSocketTransport(this); + break; +#endif + } + Transport.Open(); + + + (this as IManager).EmitEvent("connecting"); + + State = States.Opening; + + ConnectionStarted = DateTime.UtcNow; + + HTTPManager.Heartbeats.Subscribe(this); + + // The root namespace will be opened by default + //GetSocket("/"); + } + + /// + /// Closes this Socket.IO connection. + /// + public void Close() + { + (this as IManager).Close(true); + } + + /// + /// Closes this Socket.IO connection. + /// + void IManager.Close(bool removeSockets) + { + if (State == States.Closed || closing) + return; + closing = true; + + HTTPManager.Logger.Information("SocketManager", "Closing", this.Context); + + HTTPManager.Heartbeats.Unsubscribe(this); + + // Disconnect the sockets. The Disconnect function will call the Remove function to remove it from the Sockets list. + if (removeSockets) + while (Sockets.Count > 0) + (Sockets[Sockets.Count - 1] as ISocket).Disconnect(removeSockets); + else + for (int i = 0; i < Sockets.Count; ++i) + (Sockets[i] as ISocket).Disconnect(removeSockets); + + // Set to Closed after Socket's Disconnect. This way we can send the disconnect events to the server. + State = States.Closed; + + LastHeartbeat = DateTime.MinValue; + lastPingReceived = DateTime.MinValue; + + if (removeSockets && OfflinePackets != null) + { + foreach (var packet in OfflinePackets) + BufferPool.Release(packet.PayloadData); + OfflinePackets.Clear(); + } + + // Remove the references from the dictionary too. + if (removeSockets) + Namespaces.Clear(); + + Handshake = null; + + if (Transport != null) + Transport.Close(); + Transport = null; + + if (UpgradingTransport != null) + UpgradingTransport.Close(); + UpgradingTransport = null; + + closing = false; + } + + /// + /// Called from a ITransport implementation when an error occurs and we may have to try to reconnect. + /// + void IManager.TryToReconnect() + { + if (State == States.Reconnecting || + State == States.Closed) + return; + + if (!Options.Reconnection || HTTPManager.IsQuitting) + { + Close(); + + return; + } + + if (++ReconnectAttempts >= Options.ReconnectionAttempts) + { + (this as IManager).EmitEvent("reconnect_failed"); + Close(); + + return; + } + + Random rand = new Random(); + + int delay = (int)Options.ReconnectionDelay.TotalMilliseconds * ReconnectAttempts; + + ReconnectAt = DateTime.UtcNow + + TimeSpan.FromMilliseconds(Math.Min(rand.Next(/*rand min:*/(int)(delay - (delay * Options.RandomizationFactor)), + /*rand max:*/(int)(delay + (delay * Options.RandomizationFactor))), + (int)Options.ReconnectionDelayMax.TotalMilliseconds)); + + (this as IManager).Close(false); + + State = States.Reconnecting; + + for (int i = 0; i < Sockets.Count; ++i) + (Sockets[i] as ISocket).Open(); + + // In the Close() function we unregistered + HTTPManager.Heartbeats.Subscribe(this); + + HTTPManager.Logger.Information("SocketManager", "Reconnecting", this.Context); + } + + /// + /// Called by transports when they are connected to the server. + /// + bool IManager.OnTransportConnected(ITransport trans) + { + HTTPManager.Logger.Information("SocketManager", string.Format("OnTransportConnected State: {0}, PreviousState: {1}, Current Transport: {2}, Upgrading Transport: {3}", this.State, this.PreviousState, trans.Type, UpgradingTransport != null ? UpgradingTransport.Type.ToString() : "null"), this.Context); + + if (State != States.Opening) + return false; + + if (PreviousState == States.Reconnecting) + (this as IManager).EmitEvent("reconnect"); + + State = States.Open; + + if (PreviousState == States.Reconnecting) + (this as IManager).EmitEvent("reconnect_before_offline_packets"); + + for (int i = 0; i < Sockets.Count; ++i) + { + var socket = Sockets[i]; + if (socket != null) + socket.OnTransportOpen(); + } + + ReconnectAttempts = 0; + + // Send out packets that we collected while there were no available transport. + SendOfflinePackets(); + +#if !BESTHTTP_DISABLE_WEBSOCKET + // Can we upgrade to WebSocket transport? + if (Transport.Type != TransportTypes.WebSocket && + Handshake.Upgrades.Contains("websocket")) + { + UpgradingTransport = new WebSocketTransport(this); + UpgradingTransport.Open(); + } +#endif + + return true; + } + + void IManager.OnTransportError(ITransport trans, string err) + { + if (UpgradingTransport != null && trans != UpgradingTransport) + return; + + (this as IManager).EmitError(err); + + trans.Close(); + (this as IManager).TryToReconnect(); + } + + void IManager.OnTransportProbed(ITransport trans) + { + HTTPManager.Logger.Information("SocketManager", "\"probe\" packet received", this.Context); + + // If we have to reconnect, we will go straight with the transport we were able to upgrade + Options.ConnectWith = trans.Type; + + // Pause ourself to wait for any send and receive turn to finish. + State = States.Paused; + } + + #endregion + + #region Packet Handling + + /// + /// Select the best transport to send out packets. + /// + private ITransport SelectTransport() + { + if (State != States.Open || Transport == null) + return null; + + return Transport.IsRequestInProgress ? null : Transport; + } + + /// + /// Will select the best transport and sends out all packets that are in the OfflinePackets list. + /// + private void SendOfflinePackets() + { + ITransport trans = SelectTransport(); + + // Send out packets that we not sent while no transport was available. + // This function is called before the event handlers get the 'connected' event, so + // theoretically the packet orders are remains. + if (OfflinePackets != null && OfflinePackets.Count > 0 && trans != null) + { + trans.Send(OfflinePackets); + OfflinePackets.Clear(); + } + } + + /// + /// Internal function that called from the Socket class. It will send out the packet instantly, or if no transport is available it will store + /// the packet in the OfflinePackets list. + /// + void IManager.SendPacket(OutgoingPacket packet) + { + if (HTTPManager.Logger.Level <= Loglevels.Information) + HTTPManager.Logger.Information("SocketManager", "SendPacket " + packet.ToString(), this.Context); + + ITransport trans = SelectTransport(); + + if (trans != null) + { + try + { + trans.Send(packet); + } + catch(Exception ex) + { + (this as IManager).EmitError(ex.Message + " " + ex.StackTrace); + } + } + else + { + if (packet.IsVolatile) + { + BufferPool.Release(packet.PayloadData); + return; + } + + HTTPManager.Logger.Information("SocketManager", "SendPacket - Offline stashing packet", this.Context); + + if (OfflinePackets == null) + OfflinePackets = new List(); + + // The same packet can be sent through multiple Sockets. + OfflinePackets.Add(packet); + } + } + + /// + /// Called from the currently operating Transport. Will pass forward to the Socket that has to call the callbacks. + /// + void IManager.OnPacket(IncomingPacket packet) + { + if (State == States.Closed) + { + HTTPManager.Logger.Information("SocketManager", "OnPacket - State == States.Closed", this.Context); + return; + } + + switch(packet.TransportEvent) + { + case TransportEventTypes.Open: + if (Handshake == null) + { + Handshake = packet.DecodedArg as HandshakeData; + + (this as IManager).OnTransportConnected(Transport); + + return; + } + else + HTTPManager.Logger.Information("SocketManager", "OnPacket - Already received handshake data!", this.Context); + break; + + case TransportEventTypes.Ping: + lastPingReceived = DateTime.UtcNow; + //IncomingPacket pingPacket = new Packet(TransportEventTypes.Pong, SocketIOEventTypes.Unknown, "/", 0); + + (this as IManager).SendPacket(this.Parser.CreateOutgoing(TransportEventTypes.Pong, null)); + break; + + case TransportEventTypes.Pong: break; + } + + Socket socket = null; + if (Namespaces.TryGetValue(packet.Namespace, out socket)) + (socket as ISocket).OnPacket(packet); + else if (packet.TransportEvent == TransportEventTypes.Message) + HTTPManager.Logger.Warning("SocketManager", "Namespace \"" + packet.Namespace + "\" not found!", this.Context); + } + + #endregion + + /// + /// Sends an event to all available namespaces. + /// + public void EmitAll(string eventName, params object[] args) + { + for (int i = 0; i < Sockets.Count; ++i) + Sockets[i].Emit(eventName, args); + } + + /// + /// Emits an internal packet-less event to the root namespace without creating it if it isn't exists yet. + /// + void IManager.EmitEvent(string eventName, params object[] args) + { + Socket socket = null; + if (Namespaces.TryGetValue("/", out socket)) + (socket as ISocket).EmitEvent(eventName, args); + } + + /// + /// Emits an internal packet-less event to the root namespace without creating it if it isn't exists yet. + /// + void IManager.EmitEvent(SocketIOEventTypes type, params object[] args) + { + (this as IManager).EmitEvent(EventNames.GetNameFor(type), args); + } + + void IManager.EmitError(string msg) + { + var outcoming = this.Parser.CreateOutgoing(this.Sockets[0], SocketIOEventTypes.Error, -1, null, new Error(msg)); + IncomingPacket inc = IncomingPacket.Empty; + if (outcoming.IsBinary) + inc = this.Parser.Parse(this, outcoming.PayloadData); + else + inc = this.Parser.Parse(this, outcoming.Payload); + + (this as IManager).EmitEvent(SocketIOEventTypes.Error, inc.DecodedArg ?? inc.DecodedArgs); + } + + void IManager.EmitAll(string eventName, params object[] args) + { + for (int i = 0; i < Sockets.Count; ++i) + (Sockets[i] as ISocket).EmitEvent(eventName, args); + } + + #region IHeartbeat Implementation + + /// + /// Called from the HTTPManager's OnUpdate function every frame. It's main function is to send out heartbeat messages. + /// + void IHeartbeat.OnHeartbeatUpdate(TimeSpan dif) + { + switch (State) + { + case States.Paused: + // To ensure no messages are lost, the upgrade packet will only be sent once all the buffers of the existing transport are flushed and the transport is considered paused. + if (!Transport.IsRequestInProgress && + !Transport.IsPollingInProgress) + { + State = States.Open; + + // Close the current transport + Transport.Close(); + + // and switch to the newly upgraded one + Transport = UpgradingTransport; + UpgradingTransport = null; + + // We will send an Upgrade("5") packet. + Transport.Send(this.Parser.CreateOutgoing(TransportEventTypes.Upgrade, null)); + + goto case States.Open; + } + break; + + case States.Opening: + if (DateTime.UtcNow - ConnectionStarted >= Options.Timeout) + { + (this as IManager).EmitError("Connection timed out!"); + (this as IManager).EmitEvent("connect_error"); + (this as IManager).EmitEvent("connect_timeout"); + (this as IManager).TryToReconnect(); + } + + break; + + case States.Reconnecting: + if (ReconnectAt != DateTime.MinValue && DateTime.UtcNow >= ReconnectAt) + { + (this as IManager).EmitEvent("reconnect_attempt"); + (this as IManager).EmitEvent("reconnecting"); + + Open(); + } + break; + + case States.Open: + ITransport trans = null; + + // Select transport to use + if (Transport != null && Transport.State == TransportStates.Open) + trans = Transport; + + // not yet open? + if (trans == null || trans.State != TransportStates.Open) + return; + + // Start to poll the server for events + trans.Poll(); + + // Start to send out unsent packets + SendOfflinePackets(); + + // First time we reached this point. Set the LastHeartbeat to the current time, 'cause we are just opened. + if (LastHeartbeat == DateTime.MinValue) + { + LastHeartbeat = DateTime.UtcNow; + lastPingReceived = DateTime.UtcNow; + return; + } + + if (DateTime.UtcNow - lastPingReceived > TimeSpan.FromMilliseconds(Handshake.PingInterval + Handshake.PingTimeout)) + (this as IManager).TryToReconnect(); + + break; // case States.Open: + } + } + + #endregion + + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/SocketManager.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/SocketManager.cs.meta new file mode 100644 index 000000000..54749b3cd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/SocketManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d9f15f2a3f9fba94daefe951ba45998b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/SocketOptions.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/SocketOptions.cs new file mode 100644 index 000000000..65bf3083d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/SocketOptions.cs @@ -0,0 +1,186 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System; +using System.Text; + +using BestHTTP.PlatformSupport.Text; + +using PlatformSupport.Collections.ObjectModel; + +#if !NETFX_CORE + using PlatformSupport.Collections.Specialized; +#else + using System.Collections.Specialized; +#endif + +namespace BestHTTP.SocketIO3 +{ + public delegate void HTTPRequestCallbackDelegate(SocketManager manager, HTTPRequest request); + + public sealed class WebsocketOptions + { +#if !BESTHTTP_DISABLE_WEBSOCKET && (!UNITY_WEBGL || UNITY_EDITOR) + public Func ExtensionsFactory { get; set; } = WebSocket.WebSocket.GetDefaultExtensions; + + public TimeSpan? PingIntervalOverride { get; set; } = TimeSpan.Zero; +#endif + } + + public sealed class SocketOptions + { + #region Properties + + /// + /// The SocketManager will try to connect with this transport. + /// + public Transports.TransportTypes ConnectWith { get; set; } + + /// + /// Whether to reconnect automatically after a disconnect (default true) + /// + public bool Reconnection { get; set; } + + /// + /// Number of attempts before giving up (default Int.MaxValue) + /// + public int ReconnectionAttempts { get; set; } + + /// + /// How long to initially wait before attempting a new reconnection (default 1000ms). + /// Affected by +/- RandomizationFactor, for example the default initial delay will be between 500ms to 1500ms. + /// + public TimeSpan ReconnectionDelay { get; set; } + + /// + /// Maximum amount of time to wait between reconnections (default 5000ms). + /// Each attempt increases the reconnection delay along with a randomization as above. + /// + public TimeSpan ReconnectionDelayMax { get; set; } + + /// + /// (default 0.5`), [0..1] + /// + public float RandomizationFactor { get { return randomizationFactor; } set { randomizationFactor = Math.Min(1.0f, Math.Max(0.0f, value)); } } + private float randomizationFactor; + + /// + /// Connection timeout before a connect_error and connect_timeout events are emitted (default 20000ms) + /// + public TimeSpan Timeout { get; set; } + + /// + /// By setting this false, you have to call SocketManager's Open() whenever you decide it's appropriate. + /// + public bool AutoConnect { get; set; } + + /// + /// Additional query parameters that will be passed for accessed uris. If the value is null, or an empty string it will be not appended to the query only the key. + /// The keys and values must be escaped properly, as the plugin will not escape these. + /// + public ObservableDictionary AdditionalQueryParams + { + get { return additionalQueryParams; } + set + { + // Unsubscribe from previous dictionary's events + if (additionalQueryParams != null) + additionalQueryParams.CollectionChanged -= AdditionalQueryParams_CollectionChanged; + + additionalQueryParams = value; + + // Clear out the cached value + BuiltQueryParams = null; + + // Subscribe to the collection changed event + if (value != null) + value.CollectionChanged += AdditionalQueryParams_CollectionChanged; + } + } + private ObservableDictionary additionalQueryParams; + + /// + /// If it's false, the parameters in the AdditionalQueryParams will be passed for all HTTP requests. Its default value is true. + /// + public bool QueryParamsOnlyForHandshake { get; set; } + + /// + /// A callback that called for every HTTPRequest the socket.io protocol sends out. It can be used to further customize (add additional request for example) requests. + /// + public HTTPRequestCallbackDelegate HTTPRequestCustomizationCallback { get; set; } + + /// + /// Starting with Socket.IO v3, connecting to a namespace a client can send payload data. When the Auth callback function is set, the plugin going to call it when connecting to a namespace. Its return value must be a json string! + /// + public Func Auth; + + /// + /// Customization options for the websocket transport. + /// + public WebsocketOptions WebsocketOptions { get; set; } = new WebsocketOptions(); + + #endregion + + /// + /// The cached value of the result of the BuildQueryParams() call. + /// + private string BuiltQueryParams; + + /// + /// Constructor, setting the default option values. + /// + public SocketOptions() + { + ConnectWith = Transports.TransportTypes.Polling; + Reconnection = true; + ReconnectionAttempts = int.MaxValue; + ReconnectionDelay = TimeSpan.FromMilliseconds(1000); + ReconnectionDelayMax = TimeSpan.FromMilliseconds(5000); + RandomizationFactor = 0.5f; + Timeout = TimeSpan.FromMilliseconds(20000); + AutoConnect = true; + QueryParamsOnlyForHandshake = true; + } + + #region Helper Functions + + /// + /// Builds the keys and values from the AdditionalQueryParams to an key=value form. If AdditionalQueryParams is null or empty, it will return an empty string. + /// + internal string BuildQueryParams() + { + if (AdditionalQueryParams == null || AdditionalQueryParams.Count == 0) + return string.Empty; + + if (!string.IsNullOrEmpty(BuiltQueryParams)) + return BuiltQueryParams; + + StringBuilder sb = StringBuilderPool.Get(AdditionalQueryParams.Count * 4); //new StringBuilder(AdditionalQueryParams.Count * 4); + + foreach(var kvp in AdditionalQueryParams) + { + sb.Append("&"); + sb.Append(kvp.Key); + + if (!string.IsNullOrEmpty(kvp.Value)) + { + sb.Append("="); + sb.Append(kvp.Value); + } + } + + return BuiltQueryParams = StringBuilderPool.ReleaseAndGrab(sb); + } + + /// + /// This event will be called when the AdditonalQueryPrams dictionary changed. We have to reset the cached values. + /// + private void AdditionalQueryParams_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) + { + BuiltQueryParams = null; + } + + #endregion + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/SocketOptions.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/SocketOptions.cs.meta new file mode 100644 index 000000000..67b1dedb3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/SocketOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed134c399f174ea4c84cff86a39f3538 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports.meta new file mode 100644 index 000000000..04b99c36f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 560f23beb99c8de44930b354f1429321 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports/ITransport.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports/ITransport.cs new file mode 100644 index 000000000..9109937a1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports/ITransport.cs @@ -0,0 +1,104 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System.Collections.Generic; + +namespace BestHTTP.SocketIO3.Transports +{ + public enum TransportTypes + { + Polling, + +#if !BESTHTTP_DISABLE_WEBSOCKET + WebSocket +#endif + } + + /// + /// Possible states of an ITransport implementation. + /// + public enum TransportStates : int + { + /// + /// The transport is connecting to the server. + /// + Connecting = 0, + + /// + /// The transport is connected, and started the opening process. + /// + Opening = 1, + + /// + /// The transport is open, can send and receive packets. + /// + Open = 2, + + /// + /// The transport is closed. + /// + Closed = 3, + + /// + /// The transport is paused. + /// + Paused = 4 + } + + /// + /// An interface that a Socket.IO transport must implement. + /// + public interface ITransport + { + /// + /// Type of this transport. + /// + TransportTypes Type { get; } + + /// + /// Current state of the transport + /// + TransportStates State { get; } + + /// + /// SocketManager instance that this transport is bound to. + /// + SocketManager Manager { get; } + + /// + /// True if the transport is busy with sending messages. + /// + bool IsRequestInProgress { get; } + + /// + /// True if the transport is busy with a poll request. + /// + bool IsPollingInProgress { get; } + + /// + /// Start open/upgrade the transport. + /// + void Open(); + + /// + /// Do a poll for available messages on the server. + /// + void Poll(); + + /// + /// Send a single packet to the server. + /// + void Send(OutgoingPacket packet); + + /// + /// Send a list of packets to the server. + /// + void Send(List packets); + + /// + /// Close this transport. + /// + void Close(); + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports/ITransport.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports/ITransport.cs.meta new file mode 100644 index 000000000..9bbaa3bbc --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports/ITransport.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7de7ad2b3c5e05b49a948cd0c22a6683 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports/PollingTransport.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports/PollingTransport.cs new file mode 100644 index 000000000..ce8279884 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports/PollingTransport.cs @@ -0,0 +1,442 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System; +using System.Text; + +using BestHTTP.Extensions; +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP.SocketIO3.Transports +{ + public sealed class PollingTransport : ITransport + { + #region Public (ITransport) Properties + + public TransportTypes Type { get { return TransportTypes.Polling; } } + public TransportStates State { get; private set; } + public SocketManager Manager { get; private set; } + public bool IsRequestInProgress { get { return LastRequest != null; } } + public bool IsPollingInProgress { get { return PollRequest != null; } } + + #endregion + + #region Private Fields + + /// + /// The last POST request we sent to the server. + /// + private HTTPRequest LastRequest; + + /// + /// Last GET request we sent to the server. + /// + private HTTPRequest PollRequest; + + #endregion + + public PollingTransport(SocketManager manager) + { + Manager = manager; + } + + public void Open() + { + string format = "{0}?EIO={1}&transport=polling&t={2}-{3}{5}"; + if (Manager.Handshake != null) + format += "&sid={4}"; + + bool sendAdditionalQueryParams = !Manager.Options.QueryParamsOnlyForHandshake || (Manager.Options.QueryParamsOnlyForHandshake && Manager.Handshake == null); + + HTTPRequest request = new HTTPRequest(new Uri(string.Format(format, + Manager.Uri.ToString(), + Manager.ProtocolVersion, + Manager.Timestamp.ToString(), + Manager.RequestCounter++.ToString(), + Manager.Handshake != null ? Manager.Handshake.Sid : string.Empty, + sendAdditionalQueryParams ? Manager.Options.BuildQueryParams() : string.Empty)), + OnRequestFinished); + +#if !BESTHTTP_DISABLE_CACHING + // Don't even try to cache it + request.DisableCache = true; +#endif + + request.MaxRetries = 0; + + if (this.Manager.Options.HTTPRequestCustomizationCallback != null) + this.Manager.Options.HTTPRequestCustomizationCallback(this.Manager, request); + + request.Send(); + + State = TransportStates.Opening; + } + + /// + /// Closes the transport and cleans up resources. + /// + public void Close() + { + if (State == TransportStates.Closed) + return; + + State = TransportStates.Closed; + } + + #region Packet Sending Implementation + + private System.Collections.Generic.List lonelyPacketList = new System.Collections.Generic.List(1); + public void Send(OutgoingPacket packet) + { + try + { + lonelyPacketList.Add(packet); + Send(lonelyPacketList); + } + finally + { + lonelyPacketList.Clear(); + } + } + + public void Send(System.Collections.Generic.List packets) + { + if (State != TransportStates.Opening && State != TransportStates.Open) + return; + + if (IsRequestInProgress) + throw new Exception("Sending packets are still in progress!"); + + + + LastRequest = new HTTPRequest(new Uri(string.Format("{0}?EIO={1}&transport=polling&t={2}-{3}&sid={4}{5}", + Manager.Uri.ToString(), + Manager.ProtocolVersion, + Manager.Timestamp.ToString(), + Manager.RequestCounter++.ToString(), + Manager.Handshake.Sid, + !Manager.Options.QueryParamsOnlyForHandshake ? Manager.Options.BuildQueryParams() : string.Empty)), + HTTPMethods.Post, + OnRequestFinished); + + +#if !BESTHTTP_DISABLE_CACHING + // Don't even try to cache it + LastRequest.DisableCache = true; +#endif + EncodePackets(packets, LastRequest); + + if (this.Manager.Options.HTTPRequestCustomizationCallback != null) + this.Manager.Options.HTTPRequestCustomizationCallback(this.Manager, LastRequest); + + LastRequest.Send(); + } + + StringBuilder sendBuilder = new StringBuilder(); + private void EncodePackets(System.Collections.Generic.List packets, HTTPRequest request) + { + sendBuilder.Length = 0; + + for (int i = 0; i < packets.Count; ++i) + { + var packet = packets[i]; + + if (packet.IsBinary) + { + sendBuilder.Append('b'); + sendBuilder.Append(Convert.ToBase64String(packet.PayloadData.Data, packet.PayloadData.Offset, packet.PayloadData.Count)); + } + else + { + sendBuilder.Append(packet.Payload); + } + + if (packet.Attachements != null) + { + for (int cv = 0; cv < packet.Attachements.Count; ++cv) + { + sendBuilder.Append((char)0x1E); + sendBuilder.Append('b'); + + sendBuilder.Append(Convert.ToBase64String(packet.Attachements[cv])); + } + } + + if (i < packets.Count - 1) + sendBuilder.Append((char)0x1E); + + BufferPool.Release(packet.PayloadData); + } + + string result = sendBuilder.ToString(); + var length = System.Text.Encoding.UTF8.GetByteCount(result); + var buffer = BufferPool.Get(length, true); + + System.Text.Encoding.UTF8.GetBytes(result, 0, result.Length, buffer, 0); + + var stream = new BufferSegmentStream(); + + stream.Write(new BufferSegment(buffer, 0, length)); + + request.UploadStream = stream; + request.SetHeader("Content-Type", "text/plain; charset=UTF-8"); + } + + private void OnRequestFinished(HTTPRequest req, HTTPResponse resp) + { + // Clear out the LastRequest variable, so we can start sending out new packets + LastRequest = null; + + if (State == TransportStates.Closed) + return; + + string errorString = null; + + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + if (HTTPManager.Logger.Level <= BestHTTP.Logger.Loglevels.All) + HTTPManager.Logger.Verbose("PollingTransport", "OnRequestFinished: " + resp.DataAsText, this.Manager.Context); + + if (resp.IsSuccess) + { + // When we are sending data, the response is an 'ok' string + if (req.MethodType != HTTPMethods.Post) + ParseResponse(resp); + } + else + errorString = string.Format("Polling - Request finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2} Uri: {3}", + resp.StatusCode, + resp.Message, + resp.DataAsText, + req.CurrentUri); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + errorString = (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception"); + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + errorString = string.Format("Polling - Request({0}) Aborted!", req.CurrentUri); + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + errorString = string.Format("Polling - Connection Timed Out! Uri: {0}", req.CurrentUri); + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + errorString = string.Format("Polling - Processing the request({0}) Timed Out!", req.CurrentUri); + break; + } + + if (!string.IsNullOrEmpty(errorString)) + (Manager as IManager).OnTransportError(this, errorString); + } + + #endregion + + #region Polling Implementation + + public void Poll() + { + if (PollRequest != null || State == TransportStates.Paused) + return; + + PollRequest = new HTTPRequest(new Uri(string.Format("{0}?EIO={1}&transport=polling&t={2}-{3}&sid={4}{5}", + Manager.Uri.ToString(), + Manager.ProtocolVersion, + Manager.Timestamp.ToString(), + Manager.RequestCounter++.ToString(), + Manager.Handshake.Sid, + !Manager.Options.QueryParamsOnlyForHandshake ? Manager.Options.BuildQueryParams() : string.Empty)), + HTTPMethods.Get, + OnPollRequestFinished); + +#if !BESTHTTP_DISABLE_CACHING + // Don't even try to cache it + PollRequest.DisableCache = true; +#endif + + PollRequest.MaxRetries = 0; + + if (this.Manager.Options.HTTPRequestCustomizationCallback != null) + this.Manager.Options.HTTPRequestCustomizationCallback(this.Manager, PollRequest); + + PollRequest.Send(); + } + + private void OnPollRequestFinished(HTTPRequest req, HTTPResponse resp) + { + // Clear the PollRequest variable, so we can start a new poll. + PollRequest = null; + + if (State == TransportStates.Closed) + return; + + string errorString = null; + + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + + if (HTTPManager.Logger.Level <= BestHTTP.Logger.Loglevels.All) + HTTPManager.Logger.Verbose("PollingTransport", "OnPollRequestFinished: " + resp.DataAsText, this.Manager.Context); + + if (resp.IsSuccess) + ParseResponse(resp); + else + errorString = string.Format("Polling - Request finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2} Uri: {3}", + resp.StatusCode, + resp.Message, + resp.DataAsText, + req.CurrentUri); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + errorString = req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception"; + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + errorString = string.Format("Polling - Request({0}) Aborted!", req.CurrentUri); + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + errorString = string.Format("Polling - Connection Timed Out! Uri: {0}", req.CurrentUri); + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + errorString = string.Format("Polling - Processing the request({0}) Timed Out!", req.CurrentUri); + break; + } + + if (!string.IsNullOrEmpty(errorString)) + (Manager as IManager).OnTransportError(this, errorString); + } + + #endregion + + #region Packet Parsing and Handling + + /// + /// Preprocessing and sending out packets to the manager. + /// + private void OnPacket(IncomingPacket packet) + { + switch (packet.TransportEvent) + { + case TransportEventTypes.Open: + if (this.State != TransportStates.Opening) + HTTPManager.Logger.Warning("PollingTransport", "Received 'Open' packet while state is '" + State.ToString() + "'", this.Manager.Context); + else + State = TransportStates.Open; + goto default; + + case TransportEventTypes.Message: + if (packet.SocketIOEvent == SocketIOEventTypes.Connect) //2:40 + this.State = TransportStates.Open; + goto default; + + default: + (Manager as IManager).OnPacket(packet); + break; + } + } + + private void ParseResponse(HTTPResponse resp) + { + try + { + if (resp == null || resp.Data == null || resp.Data.Length < 1) + return; + + int idx = 0; + while (idx < resp.Data.Length) + { + int endIdx = FindNextRecordSeparator(resp.Data, idx); + int length = endIdx - idx; + + if (length <= 0) + break; + + IncomingPacket packet = IncomingPacket.Empty; + + if (resp.Data[idx] == 'b') + { + // First byte is the binary indicator('b'). We must skip it, so we advance our idx and also have to decrease length + idx++; + length--; + var base64Encoded = System.Text.Encoding.UTF8.GetString(resp.Data, idx, length); + var byteData = Convert.FromBase64String(base64Encoded); + packet = this.Manager.Parser.Parse(this.Manager, new BufferSegment(byteData, 0, byteData.Length)); + } + else + { + // It's the handshake data? + if (this.State == TransportStates.Opening) + { + TransportEventTypes transportEvent = (TransportEventTypes)(resp.Data[idx] - '0'); + if (transportEvent == TransportEventTypes.Open) + { + var handshake = BestHTTP.JSON.LitJson.JsonMapper.ToObject(Encoding.UTF8.GetString(resp.Data, idx + 1, length - 1)); + packet = new IncomingPacket(TransportEventTypes.Open, SocketIOEventTypes.Unknown, "/", -1); + packet.DecodedArg = handshake; + } + else + { + // TODO: error? + } + } + else + { + packet = this.Manager.Parser.Parse(this.Manager, System.Text.Encoding.UTF8.GetString(resp.Data, idx, length)); + } + } + + if (!packet.Equals(IncomingPacket.Empty)) + { + try + { + OnPacket(packet); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("PollingTransport", "ParseResponse - OnPacket", ex, this.Manager.Context); + (Manager as IManager).EmitError(ex.Message + " " + ex.StackTrace); + } + } + + idx = endIdx + 1; + } + } + catch (Exception ex) + { + (Manager as IManager).EmitError(ex.Message + " " + ex.StackTrace); + + HTTPManager.Logger.Exception("PollingTransport", "ParseResponse", ex, this.Manager.Context); + } + } + + private int FindNextRecordSeparator(byte[] data, int startIdx) + { + for (int i = startIdx; i < data.Length; ++i) + { + if (data[i] == 0x1E) + return i; + } + return data.Length; + } + + #endregion + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports/PollingTransport.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports/PollingTransport.cs.meta new file mode 100644 index 000000000..17f3b3dd5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports/PollingTransport.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49d663750911911468eda71c51712aff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports/WebSocketTransport.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports/WebSocketTransport.cs new file mode 100644 index 000000000..d936aed5f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports/WebSocketTransport.cs @@ -0,0 +1,363 @@ +#if !BESTHTTP_DISABLE_SOCKETIO +#if !BESTHTTP_DISABLE_WEBSOCKET + +using System; +using System.Collections.Generic; + +namespace BestHTTP.SocketIO3.Transports +{ + using BestHTTP.Connections; + using BestHTTP.PlatformSupport.Memory; + using BestHTTP.WebSocket; + using Extensions; + + /// + /// A transport implementation that can communicate with a SocketIO server. + /// + public sealed class WebSocketTransport : ITransport + { + public TransportTypes Type { get { return TransportTypes.WebSocket; } } + public TransportStates State { get; private set; } + public SocketManager Manager { get; private set; } + public bool IsRequestInProgress { get { return false; } } + public bool IsPollingInProgress { get { return false; } } + public WebSocket Implementation { get; private set; } + + public WebSocketTransport(SocketManager manager) + { + State = TransportStates.Closed; + Manager = manager; + } + + #region Some ITransport Implementation + + public void Open() + { + if (State != TransportStates.Closed) + return; + + Uri uri = null; + string baseUrl = new UriBuilder(HTTPProtocolFactory.IsSecureProtocol(Manager.Uri) ? "wss" : "ws", + Manager.Uri.Host, + Manager.Uri.Port, + Manager.Uri.GetRequestPathAndQueryURL()).Uri.ToString(); + string format = "{0}?EIO={1}&transport=websocket{3}"; + if (Manager.Handshake != null) + format += "&sid={2}"; + + bool sendAdditionalQueryParams = !Manager.Options.QueryParamsOnlyForHandshake || (Manager.Options.QueryParamsOnlyForHandshake && Manager.Handshake == null); + + uri = new Uri(string.Format(format, + baseUrl, + Manager.ProtocolVersion, + Manager.Handshake != null ? Manager.Handshake.Sid : string.Empty, + sendAdditionalQueryParams ? Manager.Options.BuildQueryParams() : string.Empty)); + + Implementation = new WebSocket(uri, string.Empty, string.Empty +#if !UNITY_WEBGL || UNITY_EDITOR + , (Manager.Options.WebsocketOptions?.ExtensionsFactory ?? WebSocket.GetDefaultExtensions)?.Invoke() +#endif + ); + +#if !UNITY_WEBGL || UNITY_EDITOR + if (this.Manager.Options.WebsocketOptions?.PingIntervalOverride is TimeSpan ping) + { + if (ping > TimeSpan.Zero) + { + Implementation.StartPingThread = true; + Implementation.PingFrequency = (int)ping.TotalMilliseconds; + } + else + Implementation.StartPingThread = false; + } + else + Implementation.StartPingThread = true; + + if (this.Manager.Options.HTTPRequestCustomizationCallback != null) + Implementation.OnInternalRequestCreated = (ws, internalRequest) => this.Manager.Options.HTTPRequestCustomizationCallback(this.Manager, internalRequest); +#endif + + Implementation.OnOpen = OnOpen; + Implementation.OnMessage = OnMessage; + Implementation.OnBinaryNoAlloc = OnBinaryNoAlloc; + Implementation.OnError = OnError; + Implementation.OnClosed = OnClosed; + + Implementation.Open(); + + State = TransportStates.Connecting; + } + + /// + /// Closes the transport and cleans up resources. + /// + public void Close() + { + if (State == TransportStates.Closed) + return; + + State = TransportStates.Closed; + + if (Implementation != null) + Implementation.Close(); + else + HTTPManager.Logger.Warning("WebSocketTransport", "Close - WebSocket Implementation already null!", this.Manager.Context); + Implementation = null; + } + + /// + /// Polling implementation. With WebSocket it's just a skeleton. + /// + public void Poll() + { + } + + #endregion + + #region WebSocket Events + + /// + /// WebSocket implementation OnOpen event handler. + /// + private void OnOpen(WebSocket ws) + { + if (ws != Implementation) + return; + + HTTPManager.Logger.Information("WebSocketTransport", "OnOpen", this.Manager.Context); + + State = TransportStates.Opening; + + // Send a Probe packet to test the transport. If we receive back a pong with the same payload we can upgrade + if (Manager.UpgradingTransport == this) + Send(this.Manager.Parser.CreateOutgoing(TransportEventTypes.Ping, "probe")); + } + + /// + /// WebSocket implementation OnMessage event handler. + /// + private void OnMessage(WebSocket ws, string message) + { + if (ws != Implementation) + return; + + if (HTTPManager.Logger.Level <= BestHTTP.Logger.Loglevels.All) + HTTPManager.Logger.Verbose("WebSocketTransport", "OnMessage: " + message, this.Manager.Context); + + IncomingPacket packet = IncomingPacket.Empty; + try + { + packet = this.Manager.Parser.Parse(this.Manager, message); + + if (packet.TransportEvent == TransportEventTypes.Open) + { + packet.DecodedArg = BestHTTP.JSON.LitJson.JsonMapper.ToObject(packet.DecodedArg as string); + } + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("WebSocketTransport", "OnMessage Packet parsing", ex, this.Manager.Context); + } + + if (!packet.Equals(IncomingPacket.Empty)) + { + try + { + OnPacket(packet); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("WebSocketTransport", "OnMessage OnPacket", ex, this.Manager.Context); + } + } + else if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("WebSocketTransport", "OnMessage: skipping message " + message, this.Manager.Context); + } + + /// + /// WebSocket implementation OnBinary event handler. + /// + private void OnBinaryNoAlloc(WebSocket ws, BufferSegment data) + { + if (ws != Implementation) + return; + + if (HTTPManager.Logger.Level <= BestHTTP.Logger.Loglevels.All) + HTTPManager.Logger.Verbose("WebSocketTransport", $"OnBinaryNoAlloc({data})", this.Manager.Context); + + IncomingPacket packet = IncomingPacket.Empty; + try + { + packet = this.Manager.Parser.Parse(this.Manager, data); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("WebSocketTransport", $"OnBinaryNoAlloc({data}) Packet parsing", ex, this.Manager.Context); + } + + if (!packet.Equals(IncomingPacket.Empty)) + { + try + { + OnPacket(packet); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("WebSocketTransport", $"OnBinaryNoAlloc({data}) OnPacket", ex, this.Manager.Context); + } + } + else if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("WebSocketTransport", "OnBinaryNoAlloc skipping message", this.Manager.Context); + } + + /// + /// WebSocket implementation OnError event handler. + /// + private void OnError(WebSocket ws, string error) + { + if (ws != Implementation) + return; + +#if !UNITY_WEBGL || UNITY_EDITOR + if (string.IsNullOrEmpty(error)) + { + switch (ws.InternalRequest.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + if (ws.InternalRequest.Response.IsSuccess || ws.InternalRequest.Response.StatusCode == 101) + error = string.Format("Request finished. Status Code: {0} Message: {1}", ws.InternalRequest.Response.StatusCode.ToString(), ws.InternalRequest.Response.Message); + else + error = string.Format("Request Finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}", + ws.InternalRequest.Response.StatusCode, + ws.InternalRequest.Response.Message, + ws.InternalRequest.Response.DataAsText); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + error = "Request Finished with Error! : " + ws.InternalRequest.Exception != null ? (ws.InternalRequest.Exception.Message + " " + ws.InternalRequest.Exception.StackTrace) : string.Empty; + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + error = "Request Aborted!"; + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + error = "Connection Timed Out!"; + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + error = "Processing the request Timed Out!"; + break; + } + } +#endif + + if (Manager.UpgradingTransport != this) + (Manager as IManager).OnTransportError(this, error); + else + Manager.UpgradingTransport = null; + } + + /// + /// WebSocket implementation OnClosed event handler. + /// + private void OnClosed(WebSocket ws, ushort code, string message) + { + if (ws != Implementation) + return; + + HTTPManager.Logger.Information("WebSocketTransport", "OnClosed", this.Manager.Context); + + Close(); + + if (Manager.UpgradingTransport != this) + (Manager as IManager).TryToReconnect(); + else + Manager.UpgradingTransport = null; + } + +#endregion + +#region Packet Sending Implementation + + /// + /// A WebSocket implementation of the packet sending. + /// + public void Send(OutgoingPacket packet) + { + if (State == TransportStates.Closed || + State == TransportStates.Paused) + { + HTTPManager.Logger.Information("WebSocketTransport", string.Format("Send - State == {0}, skipping packet sending!", State), this.Manager.Context); + return; + } + + if (packet.IsBinary) + Implementation.SendAsBinary(packet.PayloadData); + else + { + Implementation.Send(packet.Payload); + } + + if (packet.Attachements != null) + for (int i = 0; i < packet.Attachements.Count; ++i) + Implementation.Send(packet.Attachements[i]); + } + + /// + /// A WebSocket implementation of the packet sending. + /// + public void Send(List packets) + { + for (int i = 0; i < packets.Count; ++i) + Send(packets[i]); + + packets.Clear(); + } + +#endregion + +#region Packet Handling + + /// + /// Will only process packets that need to upgrade. All other packets are passed to the Manager. + /// + private void OnPacket(IncomingPacket packet) + { + switch (packet.TransportEvent) + { + case TransportEventTypes.Open: + if (this.State != TransportStates.Opening) + HTTPManager.Logger.Warning("WebSocketTransport", "Received 'Open' packet while state is '" + State.ToString() + "'", this.Manager.Context); + else + State = TransportStates.Open; + goto default; + + case TransportEventTypes.Pong: + // Answer for a Ping Probe. + if ("probe".Equals(packet.DecodedArg)) + { + State = TransportStates.Open; + (Manager as IManager).OnTransportProbed(this); + } + + goto default; + + default: + if (Manager.UpgradingTransport != this) + (Manager as IManager).OnPacket(packet); + break; + } + } + +#endregion + } +} + +#endif +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports/WebSocketTransport.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports/WebSocketTransport.cs.meta new file mode 100644 index 000000000..9e3dc1bf2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.3/Transports/WebSocketTransport.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7cad5db1ba092014a8933937b6f9c6c8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.meta new file mode 100644 index 000000000..563bd54f9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 70d2cd72d4442e349a1cfa407bbcfe8d +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Enums.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Enums.cs new file mode 100644 index 000000000..612c89887 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Enums.cs @@ -0,0 +1,110 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +namespace BestHTTP.SocketIO +{ + /// + /// Possible event types on the transport level. + /// + public enum TransportEventTypes : int + { + Unknown = -1, + Open = 0, + Close = 1, + Ping = 2, + Pong = 3, + Message = 4, + Upgrade = 5, + Noop = 6 + } + + /// + /// Event types of the SocketIO protocol. + /// + public enum SocketIOEventTypes : int + { + Unknown = -1, + + /// + /// Connect to a namespace, or we connected to a namespace + /// + Connect = 0, + + /// + /// Disconnect a namespace, or we disconnected from a namespace. + /// + Disconnect = 1, + + /// + /// A general event. The event's name is in the payload. + /// + Event = 2, + + /// + /// Acknowledgment of an event. + /// + Ack = 3, + + /// + /// Error sent by the server, or by the plugin + /// + Error = 4, + + /// + /// A general event with binary attached to the packet. The event's name is in the payload. + /// + BinaryEvent = 5, + + /// + /// Acknowledgment of a binary event. + /// + BinaryAck = 6 + } + + /// + /// Possible error codes that the SocketIO server can send. + /// + public enum SocketIOErrors + { + /// + /// Transport unknown + /// + UnknownTransport = 0, + + /// + /// Session ID unknown + /// + UnknownSid = 1, + + /// + /// Bad handshake method + /// + BadHandshakeMethod = 2, + + /// + /// Bad request + /// + BadRequest = 3, + + /// + /// Tried to access a forbidden resource + /// + Forbidden = 4, + + /// + /// Plugin internal error! + /// + Internal = 5, + + /// + /// Exceptions that caught by the plugin but raised in a user code. + /// + User = 6, + + /// + /// A custom, server sent error, most probably from a Socket.IO middleware. + /// + Custom = 7, + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Enums.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Enums.cs.meta new file mode 100644 index 000000000..88ef434bd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Enums.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 94f15ba2f99e9e148869183ae648e7e6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Error.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Error.cs new file mode 100644 index 000000000..6f4fc6060 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Error.cs @@ -0,0 +1,23 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +namespace BestHTTP.SocketIO +{ + public sealed class Error + { + public SocketIOErrors Code { get; private set; } + public string Message { get; private set; } + + public Error(SocketIOErrors code, string msg) + { + this.Code = code; + this.Message = msg; + } + + public override string ToString() + { + return string.Format("Code: {0} Message: \"{1}\"", this.Code.ToString(), this.Message); + } + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Error.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Error.cs.meta new file mode 100644 index 000000000..565635488 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Error.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bede350068da4b74b9cc566b9bff3bdd +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events.meta new file mode 100644 index 000000000..125739a95 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 97e9578ca337d0f42a4145ade32a3a5c +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events/EventDescriptor.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events/EventDescriptor.cs new file mode 100644 index 000000000..13e177c63 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events/EventDescriptor.cs @@ -0,0 +1,97 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System; +using System.Collections.Generic; + +namespace BestHTTP.SocketIO.Events +{ + public delegate void SocketIOCallback(Socket socket, Packet packet, params object[] args); + public delegate void SocketIOAckCallback(Socket socket, Packet packet, params object[] args); + + /// + /// A class to describe an event, and its metadatas. + /// + internal sealed class EventDescriptor + { + #region Public Properties + + /// + /// List of callback delegates. + /// + public List Callbacks { get; private set; } + + /// + /// If this property is true, callbacks are removed automatically after the event dispatch. + /// + public bool OnlyOnce { get; private set; } + + /// + /// If this property is true, the dispatching packet's Payload will be decoded using the Manager's Encoder. + /// + public bool AutoDecodePayload { get; private set; } + + #endregion + + /// + /// Cache an array on a hot-path. + /// + private SocketIOCallback[] CallbackArray; + + /// + /// Constructor to create an EventDescriptor instance and set the meta-datas. + /// + public EventDescriptor(bool onlyOnce, bool autoDecodePayload, SocketIOCallback callback) + { + this.OnlyOnce = onlyOnce; + this.AutoDecodePayload = autoDecodePayload; + this.Callbacks = new List(1); + + if (callback != null) + Callbacks.Add(callback); + } + + /// + /// Will call the callback delegates with the given parameters and remove the callbacks if this descriptor marked with a true OnlyOnce property. + /// + public void Call(Socket socket, Packet packet, params object[] args) + { + int callbackCount = Callbacks.Count; + if (CallbackArray == null || CallbackArray.Length < callbackCount) + Array.Resize(ref CallbackArray, callbackCount); + + // Copy the callback delegates to an array, because in one of the callbacks we can modify the list(by calling On/Once/Off in an event handler) + // This way we can prevent some strange bug + Callbacks.CopyTo(CallbackArray); + + // Go through the delegates and call them + for (int i = 0; i < callbackCount; ++i) + { + try + { + // Call the delegate. + SocketIOCallback callback = CallbackArray[i]; + if (callback!= null) + callback(socket, packet, args); + } + catch (Exception ex) + { + // Do not try to emit a new Error when we already tried to deliver an Error, possible causing a + // stack overflow + if (args == null || args.Length == 0 || !(args[0] is Error)) + (socket as ISocket).EmitError(SocketIOErrors.User, ex.Message + " " + ex.StackTrace); + + HTTPManager.Logger.Exception("EventDescriptor", "Call", ex); + } + + // If these callbacks has to be called only once, remove them from the main list + if (this.OnlyOnce) + Callbacks.Remove(CallbackArray[i]); + + // Don't keep any reference avoiding memory leaks + CallbackArray[i] = null; + } + } + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events/EventDescriptor.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events/EventDescriptor.cs.meta new file mode 100644 index 000000000..40d24c3ae --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events/EventDescriptor.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ab942858f5ff2a4458ec312bc2955779 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events/EventNames.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events/EventNames.cs new file mode 100644 index 000000000..7e4203495 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events/EventNames.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System; + +namespace BestHTTP.SocketIO.Events +{ + /// + /// Helper class to provide functions to an easy Enum->string conversation of the transport and SocketIO evenet types. + /// + public static class EventNames + { + public const string Connect = "connect"; + public const string Disconnect = "disconnect"; + public const string Event = "event"; + public const string Ack = "ack"; + public const string Error = "error"; + public const string BinaryEvent = "binaryevent"; + public const string BinaryAck = "binaryack"; + + private static string[] SocketIONames = new string[] { "unknown", "connect", "disconnect", "event", "ack", "error", "binaryevent", "binaryack" }; + private static string[] TransportNames = new string[] { "unknown", "open", "close", "ping", "pong", "message", "upgrade", "noop" }; + private static string[] BlacklistedEvents = new string[] { "connect", "connect_error", "connect_timeout", "disconnect", "error", "reconnect", + "reconnect_attempt", "reconnect_failed", "reconnect_error", "reconnecting" }; + + public static string GetNameFor(SocketIOEventTypes type) + { + return SocketIONames[(int)type + 1]; + } + + public static string GetNameFor(TransportEventTypes transEvent) + { + return TransportNames[(int)transEvent + 1]; + } + + /// + /// Checks an event name whether it's blacklisted or not. + /// + public static bool IsBlacklisted(string eventName) + { + for (int i = 0; i < BlacklistedEvents.Length; ++i) + if (string.Compare(BlacklistedEvents[i], eventName, StringComparison.OrdinalIgnoreCase) == 0) + return true; + return false; + } + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events/EventNames.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events/EventNames.cs.meta new file mode 100644 index 000000000..68ed64944 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events/EventNames.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3ab78cfee54d71543bec1cdef098cd4b +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events/EventTable.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events/EventTable.cs new file mode 100644 index 000000000..9f3cb3970 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events/EventTable.cs @@ -0,0 +1,161 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System.Collections.Generic; + +namespace BestHTTP.SocketIO.Events +{ + /// + /// This class helps keep track and maintain EventDescriptor instances and dispatching packets to the right delegates. + /// + internal sealed class EventTable + { + #region Privates + + /// + /// The Socket that this EventTable is bound to. + /// + private Socket Socket { get; set; } + + /// + /// The 'EventName -> List of events' mapping. + /// + private Dictionary> Table = new Dictionary>(); + + #endregion + + /// + /// Constructor to create an instance and bind it to a socket. + /// + public EventTable(Socket socket) + { + this.Socket = socket; + } + + /// + /// Register a callback to a name with the given metadata. + /// + public void Register(string eventName, SocketIOCallback callback, bool onlyOnce, bool autoDecodePayload) + { + List events; + if (!Table.TryGetValue(eventName, out events)) + Table.Add(eventName, events = new List(1)); + + // Find a matching descriptor + var desc = events.Find((d) => d.OnlyOnce == onlyOnce && d.AutoDecodePayload == autoDecodePayload); + + // If not found, create one + if (desc == null) + events.Add(new EventDescriptor(onlyOnce, autoDecodePayload, callback)); + else // if found, add the new callback + desc.Callbacks.Add(callback); + } + + /// + /// Removes all events that registered for the given name. + /// + public void Unregister(string eventName) + { + Table.Remove(eventName); + } + + /// + /// + /// + public void Unregister(string eventName, SocketIOCallback callback) + { + List events; + if (Table.TryGetValue(eventName, out events)) + for (int i = 0; i < events.Count; ++i) + events[i].Callbacks.Remove(callback); + } + + /// + /// Will call the delegates that associated to the given eventName. + /// + public void Call(string eventName, Packet packet, params object[] args) + { + List events; + + if (Table.TryGetValue(eventName, out events)) + { + if (HTTPManager.Logger.Level <= BestHTTP.Logger.Loglevels.All) + HTTPManager.Logger.Verbose("EventTable", string.Format("Call - {0} ({1})", eventName, events.Count)); + + for (int i = 0; i < events.Count; ++i) + events[i].Call(Socket, packet, args); + } + else + { + if (HTTPManager.Logger.Level <= BestHTTP.Logger.Loglevels.All) + HTTPManager.Logger.Verbose("EventTable", string.Format("Call - {0} (0)", eventName)); + } + } + + /// + /// This function will get the eventName from the packet's Payload, and optionally will decode it from Json. + /// + public void Call(Packet packet) + { + string eventName = packet.DecodeEventName(); + string typeName = packet.SocketIOEvent != SocketIOEventTypes.Unknown ? EventNames.GetNameFor(packet.SocketIOEvent) : EventNames.GetNameFor(packet.TransportEvent); + object[] args = null; + + if (!HasSubsciber(eventName) && !HasSubsciber(typeName)) + return; + + // If this is an Event or BinaryEvent message, or we have a subscriber with AutoDecodePayload, then + // we have to decode the packet's Payload. + if (packet.TransportEvent == TransportEventTypes.Message && (packet.SocketIOEvent == SocketIOEventTypes.Event || packet.SocketIOEvent == SocketIOEventTypes.BinaryEvent) && ShouldDecodePayload(eventName)) + args = packet.Decode(Socket.Manager.Encoder); + + // call event callbacks registered for 'eventName' + if (!string.IsNullOrEmpty(eventName)) + Call(eventName, packet, args); + + if (!packet.IsDecoded && ShouldDecodePayload(typeName)) + args = packet.Decode(Socket.Manager.Encoder); + + // call event callbacks registered for 'typeName' + if (!string.IsNullOrEmpty(typeName)) + Call(typeName, packet, args); + } + + /// + /// Remove all event -> delegate association. + /// + public void Clear() + { + Table.Clear(); + } + + #region Private Helpers + + /// + /// Returns true, if for the given event name there are at least one event that needs a decoded + /// + /// + /// + private bool ShouldDecodePayload(string eventName) + { + List events; + + // If we find at least one EventDescriptor with AutoDecodePayload == true, we have to + // decode the whole payload + if (Table.TryGetValue(eventName, out events)) + for (int i = 0; i < events.Count; ++i) + if (events[i].AutoDecodePayload && events[i].Callbacks.Count > 0) + return true; + + return false; + } + + private bool HasSubsciber(string eventName) + { + return Table.ContainsKey(eventName); + } + + #endregion + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events/EventTable.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events/EventTable.cs.meta new file mode 100644 index 000000000..6089fc31c --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Events/EventTable.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 62b1e6227e8b13446b06cf83b7ab23e2 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/HandshakeData.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/HandshakeData.cs new file mode 100644 index 000000000..0994dfef4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/HandshakeData.cs @@ -0,0 +1,101 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System; +using System.Collections.Generic; + +namespace BestHTTP.SocketIO +{ + using BestHTTP.JSON; + + /// + /// Helper class to parse and hold handshake information. + /// + public sealed class HandshakeData + { + #region Public Handshake Data + + /// + /// Session ID of this connection. + /// + public string Sid { get; private set; } + + /// + /// List of possible upgrades. + /// + public List Upgrades { get; private set; } + + /// + /// What interval we have to set a ping message. + /// + public TimeSpan PingInterval { get; private set; } + + /// + /// What time have to pass without an answer to our ping request when we can consider the connection disconnected. + /// + public TimeSpan PingTimeout { get; private set; } + + #endregion + + #region Helper Methods + + public bool Parse(string str) + { + bool success = false; + Dictionary dict = Json.Decode(str, ref success) as Dictionary; + if (!success) + return false; + + try + { + this.Sid = GetString(dict, "sid"); + this.Upgrades = GetStringList(dict, "upgrades"); + this.PingInterval = TimeSpan.FromMilliseconds(GetInt(dict, "pingInterval")); + this.PingTimeout = TimeSpan.FromMilliseconds(GetInt(dict, "pingTimeout")); + } + catch (Exception ex) + { + BestHTTP.HTTPManager.Logger.Exception("HandshakeData", "Parse", ex); + return false; + } + + return true; + } + + private static object Get(Dictionary from, string key) + { + object value; + if (!from.TryGetValue(key, out value)) + throw new System.Exception(string.Format("Can't get {0} from Handshake data!", key)); + return value; + } + + private static string GetString(Dictionary from, string key) + { + return Get(from, key) as string; + } + + private static List GetStringList(Dictionary from, string key) + { + List value = Get(from, key) as List; + + List result = new List(value.Count); + for (int i = 0; i < value.Count; ++i) + { + string str = value[i] as string; + if (str != null) + result.Add(str); + } + + return result; + } + + private static int GetInt(Dictionary from, string key) + { + return (int)(double)Get(from, key); + } + + #endregion + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/HandshakeData.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/HandshakeData.cs.meta new file mode 100644 index 000000000..9ad5b7106 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/HandshakeData.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 28457ee0deb7f0e4e8477f231304c601 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Interfaces.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Interfaces.cs new file mode 100644 index 000000000..7e5b17126 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Interfaces.cs @@ -0,0 +1,40 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +namespace BestHTTP.SocketIO +{ + using BestHTTP.SocketIO.Transports; + + /// + /// Interface to hide internal functions from the user by implementing it as an explicit interface. + /// + public interface IManager + { + void Remove(Socket socket); + void Close(bool removeSockets = true); + void TryToReconnect(); + bool OnTransportConnected(ITransport transport); + void OnTransportError(ITransport trans, string err); + void OnTransportProbed(ITransport trans); + void SendPacket(Packet packet); + void OnPacket(Packet packet); + void EmitEvent(string eventName, params object[] args); + void EmitEvent(SocketIOEventTypes type, params object[] args); + void EmitError(SocketIOErrors errCode, string msg); + void EmitAll(string eventName, params object[] args); + } + + /// + /// Interface to hide internal functions from the user by implementing it as an explicit interface. + /// + public interface ISocket + { + void Open(); + void Disconnect(bool remove); + void OnPacket(Packet packet); + void EmitEvent(SocketIOEventTypes type, params object[] args); + void EmitEvent(string eventName, params object[] args); + void EmitError(SocketIOErrors errCode, string msg); + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Interfaces.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Interfaces.cs.meta new file mode 100644 index 000000000..d7d93f163 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Interfaces.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e37425596e0069c4b99fea0b55dcd4cc +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/JsonEncoders.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/JsonEncoders.meta new file mode 100644 index 000000000..62ac15d46 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/JsonEncoders.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ed82682a337846d47b38e6ca7189a0c8 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/JsonEncoders/DefaultJSonEncoder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/JsonEncoders/DefaultJSonEncoder.cs new file mode 100644 index 000000000..5dee8cf66 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/JsonEncoders/DefaultJSonEncoder.cs @@ -0,0 +1,25 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System.Collections.Generic; +using BestHTTP.JSON; + +namespace BestHTTP.SocketIO.JsonEncoders +{ + /// + /// The default IJsonEncoder implementation. It's uses the Json class from the BestHTTP.JSON namespace to encode and decode. + /// + public sealed class DefaultJSonEncoder : IJsonEncoder + { + public List Decode(string json) + { + return Json.Decode(json) as List; + } + + public string Encode(List obj) + { + return Json.Encode(obj); + } + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/JsonEncoders/DefaultJSonEncoder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/JsonEncoders/DefaultJSonEncoder.cs.meta new file mode 100644 index 000000000..d30ae6558 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/JsonEncoders/DefaultJSonEncoder.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 692eedd1d08951b4fac2cd4447430cf7 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/JsonEncoders/IJSonEncoder.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/JsonEncoders/IJSonEncoder.cs new file mode 100644 index 000000000..5a8ecbc30 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/JsonEncoders/IJSonEncoder.cs @@ -0,0 +1,24 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System.Collections.Generic; + +namespace BestHTTP.SocketIO.JsonEncoders +{ + /// + /// Interface to be able to write custom Json encoders/decoders. + /// + public interface IJsonEncoder + { + /// + /// The Decode function must create a list of objects from the Json formatted string parameter. If the decoding fails, it should return null. + /// + List Decode(string json); + + /// + /// The Encode function must create a json formatted string from the parameter. If the encoding fails, it should return null. + /// + string Encode(List obj); + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/JsonEncoders/IJSonEncoder.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/JsonEncoders/IJSonEncoder.cs.meta new file mode 100644 index 000000000..25f6b1f33 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/JsonEncoders/IJSonEncoder.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 68459b55b5787e04186d568f4ec8bbc3 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Packet.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Packet.cs new file mode 100644 index 000000000..9a7177352 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Packet.cs @@ -0,0 +1,611 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System.Text; + +namespace BestHTTP.SocketIO +{ + using System; + using System.Collections.Generic; + using BestHTTP.JSON; + + public sealed class Packet + { + private enum PayloadTypes : byte + { + Textual = 0, + Binary = 1 + } + + public const string Placeholder = "_placeholder"; + + #region Public properties + + /// + /// Event type of this packet on the transport layer. + /// + public TransportEventTypes TransportEvent { get; private set; } + + /// + /// The packet's type in the Socket.IO protocol. + /// + public SocketIOEventTypes SocketIOEvent { get; private set; } + + /// + /// How many attachment should have this packet. + /// + public int AttachmentCount { get; private set; } + + /// + /// The internal ack-id of this packet. + /// + public int Id { get; private set; } + + /// + /// The sender namespace's name. + /// + public string Namespace { get; private set; } + + /// + /// The payload as a Json string. + /// + public string Payload { get; private set; } + + /// + /// The decoded event name from the payload string. + /// + public string EventName { get; private set; } + + /// + /// All binary data attached to this event. + /// + public List Attachments { get { return attachments; } set { attachments = value; AttachmentCount = attachments != null ? attachments.Count : 0; } } + private List attachments; + + /// + /// Property to check whether all attachments are received to this packet. + /// + public bool HasAllAttachment { get { return Attachments != null && Attachments.Count == AttachmentCount; } } + + /// + /// True if it's already decoded. The DecodedArgs still can be null after the Decode call. + /// + public bool IsDecoded { get; private set; } + + /// + /// The decoded arguments from the result of a Json string -> c# object convert. + /// + public object[] DecodedArgs { get; private set; } + + #endregion + + #region Constructors + + /// + /// Internal constructor. Don't use it directly! + /// + internal Packet() + { + this.TransportEvent = TransportEventTypes.Unknown; + this.SocketIOEvent = SocketIOEventTypes.Unknown; + this.Payload = string.Empty; + } + + /// + /// Internal constructor. Don't use it directly! + /// + internal Packet(string from) + { + this.Parse(from); + } + + /// + /// Internal constructor. Don't use it directly! + /// + public Packet(TransportEventTypes transportEvent, SocketIOEventTypes packetType, string nsp, string payload, int attachment = 0, int id = 0) + { + this.TransportEvent = transportEvent; + this.SocketIOEvent = packetType; + this.Namespace = nsp; + this.Payload = payload; + this.AttachmentCount = attachment; + this.Id = id; + } + + #endregion + + #region Public Functions + + public object[] Decode(BestHTTP.SocketIO.JsonEncoders.IJsonEncoder encoder) + { + if (IsDecoded || encoder == null) + return DecodedArgs; + + IsDecoded = true; + + if (string.IsNullOrEmpty(Payload)) + return DecodedArgs; + + List decoded = encoder.Decode(Payload); + + if (decoded != null && decoded.Count > 0) + { + if (this.SocketIOEvent == SocketIOEventTypes.Ack || this.SocketIOEvent == SocketIOEventTypes.BinaryAck) + DecodedArgs = decoded.ToArray(); + else + { + decoded.RemoveAt(0); + + DecodedArgs = decoded.ToArray(); + } + } + + return DecodedArgs; + } + + /// + /// Will set and return with the EventName from the packet's Payload string. + /// + public string DecodeEventName() + { + // Already decoded + if (!string.IsNullOrEmpty(EventName)) + return EventName; + + // No Payload to decode + if (string.IsNullOrEmpty(Payload)) + return string.Empty; + + // Not array encoded, we can't decode + if (Payload[0] != '[') + return string.Empty; + + int idx = 1; + + // Search for the string-begin mark( ' or " chars) + while (Payload.Length > idx && Payload[idx] != '"' && Payload[idx] != '\'') + idx++; + + // Reached the end of the string + if (Payload.Length <= idx) + return string.Empty; + + int startIdx = ++idx; + + // Search for the trailing mark of the string + while (Payload.Length > idx && Payload[idx] != '"' && Payload[idx] != '\'') + idx++; + + // Reached the end of the string + if (Payload.Length <= idx) + return string.Empty; + + return EventName = Payload.Substring(startIdx, idx - startIdx); + } + + public string RemoveEventName(bool removeArrayMarks) + { + // No Payload to decode + if (string.IsNullOrEmpty(Payload)) + return string.Empty; + + // Not array encoded, we can't decode + if (Payload[0] != '[') + return string.Empty; + + int idx = 1; + + // Search for the string-begin mark( ' or " chars) + while (Payload.Length > idx && Payload[idx] != '"' && Payload[idx] != '\'') + idx++; + + // Reached the end of the string + if (Payload.Length <= idx) + return string.Empty; + + int startIdx = idx; + + // Search for end of first element, or end of the array marks + while (Payload.Length > idx && Payload[idx] != ',' && Payload[idx] != ']') + idx++; + + // Reached the end of the string + if (Payload.Length <= ++idx) + return string.Empty; + + string payload = Payload.Remove(startIdx, idx - startIdx); + + if (removeArrayMarks) + payload = payload.Substring(1, payload.Length - 2); + + return payload; + } + + /// + /// Will switch the "{'_placeholder':true,'num':X}" to a the index num X. + /// + /// True if successfully reconstructed, false otherwise. + public bool ReconstructAttachmentAsIndex() + { + //"452-["multiImage",{"image":true,"buffer1":{"_placeholder":true,"num":0},"buffer2":{"_placeholder":true,"num":1}}]" + + return PlaceholderReplacer((json, obj) => + { + int idx = Convert.ToInt32(obj["num"]); + this.Payload = this.Payload.Replace(json, idx.ToString()); + this.IsDecoded = false; + }); + } + + /// + /// Will switch the "{'_placeholder':true,'num':X}" to a the data as a base64 encoded string. + /// + /// True if successfully reconstructed, false otherwise. + public bool ReconstructAttachmentAsBase64() + { + //"452-["multiImage",{"image":true,"buffer1":{"_placeholder":true,"num":0},"buffer2":{"_placeholder":true,"num":1}}]" + + if (!HasAllAttachment) + return false; + + return PlaceholderReplacer((json, obj) => + { + int idx = Convert.ToInt32(obj["num"]); + this.Payload = this.Payload.Replace(json, string.Format("\"{0}\"", Convert.ToBase64String(this.Attachments[idx]))); + this.IsDecoded = false; + }); + } + + #endregion + + #region Internal Functions + + /// + /// Parse the packet from a server sent textual data. The Payload will be the raw json string. + /// + internal void Parse(string from) + { + int idx = 0; + this.TransportEvent = (TransportEventTypes)ToInt(from[idx++]); + + if (from.Length > idx && ToInt(from[idx]) >= 0) + this.SocketIOEvent = (SocketIOEventTypes)ToInt(from[idx++]); + else + this.SocketIOEvent = SocketIOEventTypes.Unknown; + + // Parse Attachment + if (this.SocketIOEvent == SocketIOEventTypes.BinaryEvent || this.SocketIOEvent == SocketIOEventTypes.BinaryAck) + { + int endIdx = from.IndexOf('-', idx); + if (endIdx == -1) + endIdx = from.Length; + + int attachment = 0; + int.TryParse(from.Substring(idx, endIdx - idx), out attachment); + this.AttachmentCount = attachment; + idx = endIdx + 1; + } + + // Parse Namespace + if (from.Length > idx && from[idx] == '/') + { + int endIdx = from.IndexOf(',', idx); + if (endIdx == -1) + endIdx = from.Length; + + this.Namespace = from.Substring(idx, endIdx - idx); + idx = endIdx + 1; + } + else + this.Namespace = "/"; + + // Parse Id + if (from.Length > idx && ToInt(from[idx]) >= 0) + { + int startIdx = idx++; + while (from.Length > idx && ToInt(from[idx]) >= 0) + idx++; + + int id = 0; + int.TryParse(from.Substring(startIdx, idx - startIdx), out id); + this.Id = id; + } + + // What left is the payload data + if (from.Length > idx) + this.Payload = from.Substring(idx); + else + this.Payload = string.Empty; + } + + /// + /// Custom function instead of char.GetNumericValue, as it throws an error under WebGL using the new 4.x runtime. + /// It will return the value of the char if it's a numeric one, otherwise -1. + /// + private int ToInt(char ch) + { + int charValue = Convert.ToInt32(ch); + int num = charValue - '0'; + if (num < 0 || num > 9) + return -1; + + return num; + } + + /// + /// Encodes this packet to a Socket.IO formatted string. + /// + internal string Encode() + { + StringBuilder builder = new StringBuilder(); + + // Set to Message if not set, and we are sending attachments + if (this.TransportEvent == TransportEventTypes.Unknown && this.AttachmentCount > 0) + this.TransportEvent = TransportEventTypes.Message; + + if (this.TransportEvent != TransportEventTypes.Unknown) + builder.Append(((int)this.TransportEvent).ToString()); + + // Set to BinaryEvent if not set, and we are sending attachments + if (this.SocketIOEvent == SocketIOEventTypes.Unknown && this.AttachmentCount > 0) + this.SocketIOEvent = SocketIOEventTypes.BinaryEvent; + + if (this.SocketIOEvent != SocketIOEventTypes.Unknown) + builder.Append(((int)this.SocketIOEvent).ToString()); + + if (this.SocketIOEvent == SocketIOEventTypes.BinaryEvent || this.SocketIOEvent == SocketIOEventTypes.BinaryAck) + { + builder.Append(this.AttachmentCount.ToString()); + builder.Append("-"); + } + + // Add the namespace. If there is any other then the root nsp ("/") + // then we have to add a trailing "," if we have more data. + bool nspAdded = false; + if (this.Namespace != "/") + { + builder.Append(this.Namespace); + nspAdded = true; + } + + // ack id, if any + if (this.Id != 0) + { + if (nspAdded) + { + builder.Append(","); + nspAdded = false; + } + + builder.Append(this.Id.ToString()); + } + + // payload + if (!string.IsNullOrEmpty(this.Payload)) + { + if (nspAdded) + { + builder.Append(","); + nspAdded = false; + } + + builder.Append(this.Payload); + } + + return builder.ToString(); + } + + /// + /// Encodes this packet to a Socket.IO formatted byte array. + /// + internal byte[] EncodeBinary() + { + if (AttachmentCount != 0 || (Attachments != null && Attachments.Count != 0)) + { + if (Attachments == null) + throw new ArgumentException("packet.Attachments are null!"); + + if (AttachmentCount != Attachments.Count) + throw new ArgumentException("packet.AttachmentCount != packet.Attachments.Count. Use the packet.AddAttachment function to add data to a packet!"); + } + + // Encode it as usual + string encoded = Encode(); + + // Convert it to a byte[] + byte[] payload = Encoding.UTF8.GetBytes(encoded); + + // Encode it to a message + byte[] buffer = EncodeData(payload, PayloadTypes.Textual, null); + + // If there is any attachment, convert them too, and append them after each other + if (AttachmentCount != 0) + { + int idx = buffer.Length; + + // List to temporarily hold the converted attachments + List attachmentDatas = new List(AttachmentCount); + + // The sum size of the converted attachments to be able to resize our buffer only once. This way we can avoid some GC garbage + int attachmentDataSize = 0; + + // Encode our attachments, and store them in our list + for (int i = 0; i < AttachmentCount; i++) + { + byte[] tmpBuff = EncodeData(Attachments[i], PayloadTypes.Binary, new byte[] { 4 }); + attachmentDatas.Add(tmpBuff); + + attachmentDataSize += tmpBuff.Length; + } + + // Resize our buffer once + Array.Resize(ref buffer, buffer.Length + attachmentDataSize); + + // And copy all data into it + for (int i = 0; i < AttachmentCount; ++i) + { + byte[] data = attachmentDatas[i]; + Array.Copy(data, 0, buffer, idx, data.Length); + + idx += data.Length; + } + } + + // Return the buffer + return buffer; + } + + /// + /// Will add the byte[] that the server sent to the attachments list. + /// + internal void AddAttachmentFromServer(byte[] data, bool copyFull) + { + if (data == null || data.Length == 0) + return; + + if (this.attachments == null) + this.attachments = new List(this.AttachmentCount); + + if (copyFull) + this.Attachments.Add(data); + else + { + byte[] buff = new byte[data.Length - 1]; + Array.Copy(data, 1, buff, 0, data.Length - 1); + + this.Attachments.Add(buff); + } + } + + #endregion + + #region Private Helper Functions + + /// + /// Encodes a byte array to a Socket.IO binary encoded message + /// + private byte[] EncodeData(byte[] data, PayloadTypes type, byte[] afterHeaderData) + { + // Packet binary encoding: + // [ 0|1 ][ length of data ][ FF ][data] + // <1 = binary, 0 = string>[...] + + // Get the length of the payload. Socket.IO uses a wasteful encoding to send the length of the data. + // If the data is 16 bytes we have to send the length as two bytes: byte value of the character '1' and byte value of the character '6'. + // Instead of just one byte: 0xF. If the payload is 123 bytes, we can't send as 0x7B... + int afterHeaderLength = (afterHeaderData != null ? afterHeaderData.Length : 0); + string lenStr = (data.Length + afterHeaderLength).ToString(); + byte[] len = new byte[lenStr.Length]; + for (int cv = 0; cv < lenStr.Length; ++cv) + len[cv] = (byte)char.GetNumericValue(lenStr[cv]); + + // We need another buffer to store the final data + byte[] buffer = new byte[data.Length + len.Length + 2 + afterHeaderLength]; + + // The payload is textual -> 0 + buffer[0] = (byte)type; + + // Copy the length of the data + for (int cv = 0; cv < len.Length; ++cv) + buffer[1 + cv] = len[cv]; + + int idx = 1 + len.Length; + + // End of the header data + buffer[idx++] = 0xFF; + + if (afterHeaderData != null && afterHeaderData.Length > 0) + { + Array.Copy(afterHeaderData, 0, buffer, idx, afterHeaderData.Length); + idx += afterHeaderData.Length; + } + + // Copy our payload data to the buffer + Array.Copy(data, 0, buffer, idx, data.Length); + + return buffer; + } + + /// + /// Searches for the "{'_placeholder':true,'num':X}" string, and will call the given action to modify the PayLoad + /// + private bool PlaceholderReplacer(Action> onFound) + { + if (string.IsNullOrEmpty(this.Payload)) + return false; + + // Find the first index of the "_placeholder" str + int placeholderIdx = this.Payload.IndexOf(Placeholder); + + while (placeholderIdx >= 0) + { + // Find the object-start token + int startIdx = placeholderIdx; + while (this.Payload[startIdx] != '{') + startIdx--; + + // Find the object-end token + int endIdx = placeholderIdx; + while (this.Payload.Length > endIdx && this.Payload[endIdx] != '}') + endIdx++; + + // We reached the end + if (this.Payload.Length <= endIdx) + return false; + + // Get the object, and decode it + string placeholderJson = this.Payload.Substring(startIdx, endIdx - startIdx + 1); + bool success = false; + Dictionary obj = Json.Decode(placeholderJson, ref success) as Dictionary; + if (!success) + return false; + + // Check for presence and value of _placeholder + object value; + if (!obj.TryGetValue(Placeholder, out value) || + !(bool)value) + return false; + + // Check for presence of num + if (!obj.TryGetValue("num", out value)) + return false; + + // Let do, what we have to do + onFound(placeholderJson, obj); + + // Find the next attachment if there is any + placeholderIdx = this.Payload.IndexOf(Placeholder); + } + + return true; + } + + #endregion + + #region Overrides and Interface Implementations + + /// + /// Returns with the Payload of this packet. + /// + public override string ToString() + { + return this.Payload; + } + + /// + /// Will clone this packet to an identical packet instance. + /// + internal Packet Clone() + { + Packet packet = new Packet(this.TransportEvent, this.SocketIOEvent, this.Namespace, this.Payload, 0, this.Id); + packet.EventName = this.EventName; + packet.AttachmentCount = this.AttachmentCount; + packet.attachments = this.attachments; + + return packet; + } + + #endregion + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Packet.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Packet.cs.meta new file mode 100644 index 000000000..f55388357 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Packet.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 907cf4e3f52e02c409084c624e734c7c +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Socket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Socket.cs new file mode 100644 index 000000000..719192586 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Socket.cs @@ -0,0 +1,508 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System; +using System.Collections.Generic; + +namespace BestHTTP.SocketIO +{ + using BestHTTP; + using BestHTTP.SocketIO.Events; + + /// + /// This class represents a Socket.IO namespace. + /// + public sealed class Socket : ISocket + { + #region Public Properties + + /// + /// The SocketManager instance that created this socket. + /// + public SocketManager Manager { get; private set; } + + /// + /// The namespace that this socket is bound to. + /// + public string Namespace { get; private set; } + + /// + /// Unique Id of the socket. + /// + public string Id { get; private set; } + + /// + /// True if the socket is connected and open to the server. False otherwise. + /// + public bool IsOpen { get; private set; } + + /// + /// While this property is True, the socket will decode the Packet's Payload data using the parent SocketManager's Encoder. You must set this property before any event subscription! Its default value is True; + /// + public bool AutoDecodePayload { get; set; } + + #endregion + + #region Privates + + /// + /// A table to store acknowledgment callbacks associated to the given ids. + /// + private Dictionary AckCallbacks; + + /// + /// Tha callback table that helps this class to manage event subscription and dispatching events. + /// + private EventTable EventCallbacks; + + /// + /// Cached list to spare some GC alloc. + /// + private List arguments = new List(); + + #endregion + + /// + /// Internal constructor. + /// + internal Socket(string nsp, SocketManager manager) + { + this.Namespace = nsp; + this.Manager = manager; + this.IsOpen = false; + this.AutoDecodePayload = true; + this.EventCallbacks = new EventTable(this); + } + + #region Socket Handling + + /// + /// Internal function to start opening the socket. + /// + void ISocket.Open() + { + HTTPManager.Logger.Information("Socket", string.Format("Open - Manager.State = {0}", Manager.State)); + + // The transport already established the connection + if (Manager.State == SocketManager.States.Open) + OnTransportOpen(); + else if (Manager.Options.AutoConnect && Manager.State == SocketManager.States.Initial) + Manager.Open(); + } + + /// + /// Disconnects this socket/namespace. + /// + public void Disconnect() + { + (this as ISocket).Disconnect(true); + } + + /// + /// Disconnects this socket/namespace. + /// + void ISocket.Disconnect(bool remove) + { + // Send a disconnect packet to the server + if (IsOpen) + { + Packet packet = new Packet(TransportEventTypes.Message, SocketIOEventTypes.Disconnect, this.Namespace, string.Empty); + (Manager as IManager).SendPacket(packet); + + // IsOpen must be false, because in the OnPacket preprocessing the packet would call this function again + IsOpen = false; + (this as ISocket).OnPacket(packet); + } + + if (AckCallbacks != null) + AckCallbacks.Clear(); + + if (remove) + { + EventCallbacks.Clear(); + + (Manager as IManager).Remove(this); + } + } + + #endregion + + #region Emit Implementations + + public Socket Emit(string eventName, params object[] args) + { + return Emit(eventName, null, args); + } + + public Socket Emit(string eventName, SocketIOAckCallback callback, params object[] args) + { + bool blackListed = EventNames.IsBlacklisted(eventName); + if (blackListed) + throw new ArgumentException("Blacklisted event: " + eventName); + + arguments.Clear(); + arguments.Add(eventName); + + // Find and swap any binary data(byte[]) to a placeholder string. + // Server side these will be swapped back. + List attachments = null; + if (args != null && args.Length > 0) + { + int idx = 0; + for (int i = 0; i < args.Length; ++i) + { + byte[] binData = args[i] as byte[]; + if (binData != null) + { + if (attachments == null) + attachments = new List(); + + Dictionary placeholderObj = new Dictionary(2); + placeholderObj.Add(Packet.Placeholder, true); + placeholderObj.Add("num", idx++); + + arguments.Add(placeholderObj); + + attachments.Add(binData); + } + else + arguments.Add(args[i]); + } + } + + string payload = null; + + try + { + payload = Manager.Encoder.Encode(arguments); + } + catch(Exception ex) + { + (this as ISocket).EmitError(SocketIOErrors.Internal, "Error while encoding payload: " + ex.Message + " " + ex.StackTrace); + + return this; + } + + // We don't use it further in this function, so we can clear it to not hold any unwanted reference. + arguments.Clear(); + + if (payload == null) + throw new ArgumentException("Encoding the arguments to JSON failed!"); + + int id = 0; + + if (callback != null) + { + id = Manager.NextAckId; + + if (AckCallbacks == null) + AckCallbacks = new Dictionary(); + + AckCallbacks[id] = callback; + } + + Packet packet = new Packet(TransportEventTypes.Message, + attachments == null ? SocketIOEventTypes.Event : SocketIOEventTypes.BinaryEvent, + this.Namespace, + payload, + 0, + id); + + if (attachments != null) + packet.Attachments = attachments; // This will set the AttachmentCount property too. + + (Manager as IManager).SendPacket(packet); + + return this; + } + + public Socket EmitAck(Packet originalPacket, params object[] args) + { + if (originalPacket == null) + throw new ArgumentNullException("originalPacket == null!"); + + if (/*originalPacket.Id == 0 ||*/ + (originalPacket.SocketIOEvent != SocketIOEventTypes.Event && originalPacket.SocketIOEvent != SocketIOEventTypes.BinaryEvent)) + throw new ArgumentException("Wrong packet - you can't send an Ack for a packet with id == 0 and SocketIOEvent != Event or SocketIOEvent != BinaryEvent!"); + + arguments.Clear(); + if (args != null && args.Length > 0) + arguments.AddRange(args); + + string payload = null; + try + { + payload = Manager.Encoder.Encode(arguments); + } + catch (Exception ex) + { + (this as ISocket).EmitError(SocketIOErrors.Internal, "Error while encoding payload: " + ex.Message + " " + ex.StackTrace); + + return this; + } + + if (payload == null) + throw new ArgumentException("Encoding the arguments to JSON failed!"); + + Packet packet = new Packet(TransportEventTypes.Message, + originalPacket.SocketIOEvent == SocketIOEventTypes.Event ? SocketIOEventTypes.Ack : SocketIOEventTypes.BinaryAck, + this.Namespace, + payload, + 0, + originalPacket.Id); + + (Manager as IManager).SendPacket(packet); + + return this; + } + + #endregion + + #region On Implementations + + /// + /// Register a callback for a given name + /// + public void On(string eventName, SocketIOCallback callback) + { + EventCallbacks.Register(eventName, callback, false, this.AutoDecodePayload); + } + + public void On(SocketIOEventTypes type, SocketIOCallback callback) + { + string eventName = EventNames.GetNameFor(type); + + EventCallbacks.Register(eventName, callback, false, this.AutoDecodePayload); + } + + public void On(string eventName, SocketIOCallback callback, bool autoDecodePayload) + { + EventCallbacks.Register(eventName, callback, false, autoDecodePayload); + } + + public void On(SocketIOEventTypes type, SocketIOCallback callback, bool autoDecodePayload) + { + string eventName = EventNames.GetNameFor(type); + + EventCallbacks.Register(eventName, callback, false, autoDecodePayload); + } + + #endregion + + #region Once Implementations + + public void Once(string eventName, SocketIOCallback callback) + { + EventCallbacks.Register(eventName, callback, true, this.AutoDecodePayload); + } + + public void Once(SocketIOEventTypes type, SocketIOCallback callback) + { + EventCallbacks.Register(EventNames.GetNameFor(type), callback, true, this.AutoDecodePayload); + } + + public void Once(string eventName, SocketIOCallback callback, bool autoDecodePayload) + { + EventCallbacks.Register(eventName, callback, true, autoDecodePayload); + } + + public void Once(SocketIOEventTypes type, SocketIOCallback callback, bool autoDecodePayload) + { + EventCallbacks.Register(EventNames.GetNameFor(type), callback, true, autoDecodePayload); + } + + #endregion + + #region Off Implementations + + /// + /// Remove all callbacks for all events. + /// + public void Off() + { + EventCallbacks.Clear(); + } + + /// + /// Removes all callbacks to the given event. + /// + public void Off(string eventName) + { + EventCallbacks.Unregister(eventName); + } + + /// + /// Removes all callbacks to the given event. + /// + public void Off(SocketIOEventTypes type) + { + Off(EventNames.GetNameFor(type)); + } + + /// + /// Remove the specified callback. + /// + public void Off(string eventName, SocketIOCallback callback) + { + EventCallbacks.Unregister(eventName, callback); + } + + /// + /// Remove the specified callback. + /// + public void Off(SocketIOEventTypes type, SocketIOCallback callback) + { + EventCallbacks.Unregister(EventNames.GetNameFor(type), callback); + } + + #endregion + + #region Packet Handling + + /// + /// Last call of the OnPacket chain(Transport -> Manager -> Socket), we will dispatch the event if there is any callback + /// + void ISocket.OnPacket(Packet packet) + { + // Some preprocessing of the packet + switch(packet.SocketIOEvent) + { + case SocketIOEventTypes.Connect: + if (this.Manager.Options.ServerVersion != SupportedSocketIOVersions.v3) + { + this.Id = this.Namespace != "/" ? this.Namespace + "#" + this.Manager.Handshake.Sid : this.Manager.Handshake.Sid; + } + else + { + var data = JSON.Json.Decode(packet.Payload) as Dictionary; + this.Id = data["sid"].ToString(); + } + this.IsOpen = true; + break; + + case SocketIOEventTypes.Disconnect: + if (IsOpen) + { + IsOpen = false; + EventCallbacks.Call(EventNames.GetNameFor(SocketIOEventTypes.Disconnect), packet); + Disconnect(); + } + break; + + // Create an Error object from the server-sent json string + case SocketIOEventTypes.Error: + bool success = false; + object result = JSON.Json.Decode(packet.Payload, ref success); + if (success) + { + var errDict = result as Dictionary; + Error err = null; + + if (errDict != null) + { + object tmpObject = null; + string code = null; + if (errDict.TryGetValue("code", out tmpObject)) + code = tmpObject.ToString(); + + int errorCode; + if (code != null && int.TryParse(code, out errorCode) && errorCode >= 0 && errorCode <= 7) + { + errDict.TryGetValue("message", out tmpObject); + err = new Error((SocketIOErrors)errorCode, tmpObject != null ? tmpObject.ToString() : string.Empty); + } + } + + if (err == null) + err = new Error(SocketIOErrors.Custom, packet.Payload); + + EventCallbacks.Call(EventNames.GetNameFor(SocketIOEventTypes.Error), packet, err); + + return; + } + break; + } + + // Dispatch the event to all subscriber + EventCallbacks.Call(packet); + + // call Ack callbacks + if ((packet.SocketIOEvent == SocketIOEventTypes.Ack || packet.SocketIOEvent == SocketIOEventTypes.BinaryAck) && AckCallbacks != null) + { + SocketIOAckCallback ackCallback = null; + if (AckCallbacks.TryGetValue(packet.Id, out ackCallback) && + ackCallback != null) + { + try + { + ackCallback(this, packet, this.AutoDecodePayload ? packet.Decode(Manager.Encoder) : null); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("Socket", "ackCallback", ex); + } + } + + AckCallbacks.Remove(packet.Id); + } + } + + #endregion + + /// + /// Emits an internal packet-less event to the user level. + /// + void ISocket.EmitEvent(SocketIOEventTypes type, params object[] args) + { + (this as ISocket).EmitEvent(EventNames.GetNameFor(type), args); + } + + /// + /// Emits an internal packet-less event to the user level. + /// + void ISocket.EmitEvent(string eventName, params object[] args) + { + if (!string.IsNullOrEmpty(eventName)) + EventCallbacks.Call(eventName, null, args); + } + + void ISocket.EmitError(SocketIOErrors errCode, string msg) + { + (this as ISocket).EmitEvent(SocketIOEventTypes.Error, new Error(errCode, msg)); + } + + #region Private Helper Functions + + /// + /// Called when the underlying transport is connected + /// + internal void OnTransportOpen() + { + HTTPManager.Logger.Information("Socket", "OnTransportOpen - IsOpen: " + this.IsOpen); + + if (this.IsOpen) + return; + + if (this.Namespace != "/" || this.Manager.Options.ServerVersion == SupportedSocketIOVersions.v3) + { + try + { + string authData = null; + if (this.Manager.Options.ServerVersion == SupportedSocketIOVersions.v3) + authData = this.Manager.Options.Auth != null ? this.Manager.Options.Auth(this.Manager, this) : "{}"; + + (Manager as IManager).SendPacket(new Packet(TransportEventTypes.Message, SocketIOEventTypes.Connect, this.Namespace, authData)); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("Socket", "OnTransportOpen", ex); + } + } + else + this.IsOpen = true; + } + + #endregion + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Socket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Socket.cs.meta new file mode 100644 index 000000000..392955477 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Socket.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2087171a4dffa4f49a83c2c61d3debba +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/SocketManager.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/SocketManager.cs new file mode 100644 index 000000000..035dbcd41 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/SocketManager.cs @@ -0,0 +1,749 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System; +using System.Collections.Generic; + +using BestHTTP.SocketIO.Transports; +using BestHTTP.Extensions; +using BestHTTP.SocketIO.JsonEncoders; +using BestHTTP.SocketIO.Events; + +namespace BestHTTP.SocketIO +{ + public sealed class SocketManager : IHeartbeat, IManager + { + /// + /// Possible states of a SocketManager instance. + /// + public enum States + { + /// + /// Initial state of the SocketManager + /// + Initial, + + /// + /// The SocketManager is currently opening. + /// + Opening, + + /// + /// The SocketManager is open, events can be sent to the server. + /// + Open, + + /// + /// Paused for transport upgrade + /// + Paused, + + /// + /// An error occurred, the SocketManager now trying to connect again to the server. + /// + Reconnecting, + + /// + /// The SocketManager is closed, initiated by the user or by the server + /// + Closed + } + + /// + /// The default Json encode/decoder that will be used to encode/decode the event arguments. + /// + public static IJsonEncoder DefaultEncoder = new DefaultJSonEncoder(); + + /// + /// Supported Socket.IO protocol version + /// + public int ProtocolVersion { get { return this.Options.ServerVersion == SupportedSocketIOVersions.v3 ? 4 : 3; } } + + #region Public Properties + + /// + /// The current state of this Socket.IO manager. + /// + public States State { get { return state; } private set { PreviousState = state; state = value; } } + private States state; + + /// + /// The SocketOptions instance that this manager will use. + /// + public SocketOptions Options { get; private set; } + + /// + /// The Uri to the Socket.IO endpoint. + /// + public Uri Uri { get; private set; } + + /// + /// The server sent and parsed Handshake data. + /// + public HandshakeData Handshake { get; private set; } + + /// + /// The currently used main transport instance. + /// + public ITransport Transport { get; private set; } + + /// + /// The Request counter for request-based transports. + /// + public ulong RequestCounter { get; internal set; } + + /// + /// The root("/") Socket. + /// + public Socket Socket { get { return GetSocket(); } } + + /// + /// Indexer to access socket associated to the given namespace. + /// + public Socket this[string nsp] { get { return GetSocket(nsp); } } + + /// + /// How many reconnect attempts made. + /// + public int ReconnectAttempts { get; private set; } + + /// + /// The JSon encoder that will be used to encode the sent data to json and decode the received json to an object list. + /// + public IJsonEncoder Encoder { get; set; } + + #endregion + + #region Internal Properties + + /// + /// Timestamp support to the request based transports. + /// + internal UInt64 Timestamp { get { return (UInt64)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds; } } + + /// + /// Auto-incrementing property to return Ack ids. + /// + internal int NextAckId { get { return System.Threading.Interlocked.Increment(ref nextAckId); } } + private int nextAckId; + + /// + /// Internal property to store the previous state of the manager. + /// + internal States PreviousState { get; private set; } + + /// + /// Transport currently upgrading. + /// + internal ITransport UpgradingTransport { get; set; } + + #endregion + + #region Privates + + /// + /// Namespace name -> Socket mapping + /// + private Dictionary Namespaces = new Dictionary(); + + /// + /// List of the sockets to able to iterate over them easily. + /// + private List Sockets = new List(); + + /// + /// List of unsent packets. Only instantiated when we have to use it. + /// + private List OfflinePackets; + + /// + /// When we sent out the last heartbeat(Ping) message. + /// + private DateTime LastHeartbeat = DateTime.MinValue; + + /// + /// When we have to try to do a reconnect attempt + /// + private DateTime ReconnectAt; + + /// + /// When we started to connect to the server. + /// + private DateTime ConnectionStarted; + + /// + /// Private flag to avoid multiple Close call + /// + private bool closing; + + /// + /// Whether the connection is waiting for a ping response. + /// + private bool IsWaitingPong; + + /// + /// In Engine.io v4 / socket.io v3 the server sends the ping messages, not the client. + /// + private DateTime lastPingReceived; + + #endregion + + #region Constructors + + /// + /// Constructor to create a SocketManager instance that will connect to the given uri. + /// + public SocketManager(Uri uri) + :this(uri, new SocketOptions()) + { + + } + + /// + /// Constructor to create a SocketManager instance. + /// + public SocketManager(Uri uri, SocketOptions options) + { + Uri = uri; + Options = options ?? new SocketOptions(); + State = States.Initial; + PreviousState = States.Initial; + Encoder = SocketManager.DefaultEncoder; + } + + #endregion + + /// + /// Returns with the "/" namespace, the same as the Socket property. + /// + public Socket GetSocket() + { + return GetSocket("/"); + } + + /// + /// Returns with the specified namespace + /// + public Socket GetSocket(string nsp) + { + if (string.IsNullOrEmpty(nsp)) + throw new ArgumentNullException("Namespace parameter is null or empty!"); + + /*if (nsp[0] != '/') + nsp = "/" + nsp;*/ + + Socket socket = null; + if (!Namespaces.TryGetValue(nsp, out socket)) + { + // No socket found, create one + socket = new Socket(nsp, this); + + Namespaces.Add(nsp, socket); + Sockets.Add(socket); + + (socket as ISocket).Open(); + } + + return socket; + } + + /// + /// Internal function to remove a Socket instance from this manager. + /// + /// + void IManager.Remove(Socket socket) + { + Namespaces.Remove(socket.Namespace); + Sockets.Remove(socket); + + if (Sockets.Count == 0) + Close(); + } + + #region Connection to the server, and upgrading + + /// + /// This function will begin to open the Socket.IO connection by sending out the handshake request. + /// If the Options' AutoConnect is true, it will be called automatically. + /// + public void Open() + { + if (State != States.Initial && + State != States.Closed && + State != States.Reconnecting) + return; + + HTTPManager.Logger.Information("SocketManager", "Opening"); + + ReconnectAt = DateTime.MinValue; + + switch (Options.ConnectWith) + { + case TransportTypes.Polling: Transport = new PollingTransport(this); break; +#if !BESTHTTP_DISABLE_WEBSOCKET + case TransportTypes.WebSocket: + Transport = new WebSocketTransport(this); + break; +#endif + } + Transport.Open(); + + + (this as IManager).EmitEvent("connecting"); + + State = States.Opening; + + ConnectionStarted = DateTime.UtcNow; + + HTTPManager.Heartbeats.Subscribe(this); + + // The root namespace will be opened by default + GetSocket("/"); + } + + /// + /// Closes this Socket.IO connection. + /// + public void Close() + { + (this as IManager).Close(true); + } + + /// + /// Closes this Socket.IO connection. + /// + void IManager.Close(bool removeSockets) + { + if (State == States.Closed || closing) + return; + closing = true; + + HTTPManager.Logger.Information("SocketManager", "Closing"); + + HTTPManager.Heartbeats.Unsubscribe(this); + + // Disconnect the sockets. The Disconnect function will call the Remove function to remove it from the Sockets list. + if (removeSockets) + while (Sockets.Count > 0) + (Sockets[Sockets.Count - 1] as ISocket).Disconnect(removeSockets); + else + for (int i = 0; i < Sockets.Count; ++i) + (Sockets[i] as ISocket).Disconnect(removeSockets); + + // Set to Closed after Socket's Disconnect. This way we can send the disconnect events to the server. + State = States.Closed; + + LastHeartbeat = DateTime.MinValue; + IsWaitingPong = false; + lastPingReceived = DateTime.MinValue; + + if (removeSockets && OfflinePackets != null) + OfflinePackets.Clear(); + + // Remove the references from the dictionary too. + if (removeSockets) + Namespaces.Clear(); + + Handshake = null; + + if (Transport != null) + Transport.Close(); + Transport = null; + + if (UpgradingTransport != null) + UpgradingTransport.Close(); + UpgradingTransport = null; + + closing = false; + } + + /// + /// Called from a ITransport implementation when an error occurs and we may have to try to reconnect. + /// + void IManager.TryToReconnect() + { + if (State == States.Reconnecting || + State == States.Closed) + return; + + if (!Options.Reconnection || HTTPManager.IsQuitting) + { + Close(); + + return; + } + + if (++ReconnectAttempts >= Options.ReconnectionAttempts) + { + (this as IManager).EmitEvent("reconnect_failed"); + Close(); + + return; + } + + Random rand = new Random(); + + int delay = (int)Options.ReconnectionDelay.TotalMilliseconds * ReconnectAttempts; + + ReconnectAt = DateTime.UtcNow + + TimeSpan.FromMilliseconds(Math.Min(rand.Next(/*rand min:*/(int)(delay - (delay * Options.RandomizationFactor)), + /*rand max:*/(int)(delay + (delay * Options.RandomizationFactor))), + (int)Options.ReconnectionDelayMax.TotalMilliseconds)); + + (this as IManager).Close(false); + + State = States.Reconnecting; + + for (int i = 0; i < Sockets.Count; ++i) + (Sockets[i] as ISocket).Open(); + + // In the Close() function we unregistered + HTTPManager.Heartbeats.Subscribe(this); + + HTTPManager.Logger.Information("SocketManager", "Reconnecting"); + } + + /// + /// Called by transports when they are connected to the server. + /// + bool IManager.OnTransportConnected(ITransport trans) + { + HTTPManager.Logger.Information("SocketManager", string.Format("OnTransportConnected State: {0}, PreviousState: {1}, Current Transport: {2}, Upgrading Transport: {3}", this.State, this.PreviousState, trans.Type, UpgradingTransport != null ? UpgradingTransport.Type.ToString() : "null")); + + if (State != States.Opening) + return false; + + if (PreviousState == States.Reconnecting) + (this as IManager).EmitEvent("reconnect"); + + State = States.Open; + + if (PreviousState == States.Reconnecting) + (this as IManager).EmitEvent("reconnect_before_offline_packets"); + + for (int i = 0; i < Sockets.Count; ++i) + { + var socket = Sockets[i]; + if (socket != null) + socket.OnTransportOpen(); + } + + ReconnectAttempts = 0; + + // Send out packets that we collected while there were no available transport. + SendOfflinePackets(); + +#if !BESTHTTP_DISABLE_WEBSOCKET + // Can we upgrade to WebSocket transport? + if (Transport.Type != TransportTypes.WebSocket && + Handshake.Upgrades.Contains("websocket")) + { + UpgradingTransport = new WebSocketTransport(this); + UpgradingTransport.Open(); + } +#endif + + return true; + } + + void IManager.OnTransportError(ITransport trans, string err) + { + (this as IManager).EmitError(SocketIOErrors.Internal, err); + + trans.Close(); + (this as IManager).TryToReconnect(); + } + + void IManager.OnTransportProbed(ITransport trans) + { + HTTPManager.Logger.Information("SocketManager", "\"probe\" packet received"); + + // If we have to reconnect, we will go straight with the transport we were able to upgrade + Options.ConnectWith = trans.Type; + + // Pause ourself to wait for any send and receive turn to finish. + State = States.Paused; + } + + #endregion + + #region Packet Handling + + /// + /// Select the best transport to send out packets. + /// + private ITransport SelectTransport() + { + if (State != States.Open || Transport == null) + return null; + + return Transport.IsRequestInProgress ? null : Transport; + } + + /// + /// Will select the best transport and sends out all packets that are in the OfflinePackets list. + /// + private void SendOfflinePackets() + { + ITransport trans = SelectTransport(); + + // Send out packets that we not sent while no transport was available. + // This function is called before the event handlers get the 'connected' event, so + // theoretically the packet orders are remains. + if (OfflinePackets != null && OfflinePackets.Count > 0 && trans != null) + { + trans.Send(OfflinePackets); + OfflinePackets.Clear(); + } + } + + /// + /// Internal function that called from the Socket class. It will send out the packet instantly, or if no transport is available it will store + /// the packet in the OfflinePackets list. + /// + void IManager.SendPacket(Packet packet) + { + HTTPManager.Logger.Information("SocketManager", "SendPacket " + packet.ToString()); + + ITransport trans = SelectTransport(); + + if (trans != null) + { + try + { + trans.Send(packet); + } + catch(Exception ex) + { + (this as IManager).EmitError(SocketIOErrors.Internal, ex.Message + " " + ex.StackTrace); + } + } + else + { + HTTPManager.Logger.Information("SocketManager", "SendPacket - Offline stashing packet"); + + if (OfflinePackets == null) + OfflinePackets = new List(); + + // The same packet can be sent through multiple Sockets. + OfflinePackets.Add(packet.Clone()); + } + } + + /// + /// Called from the currently operating Transport. Will pass forward to the Socket that has to call the callbacks. + /// + void IManager.OnPacket(Packet packet) + { + if (State == States.Closed) + { + HTTPManager.Logger.Information("SocketManager", "OnPacket - State == States.Closed"); + return; + } + + switch(packet.TransportEvent) + { + case TransportEventTypes.Open: + if (Handshake == null) + { + Handshake = new HandshakeData(); + if (!Handshake.Parse(packet.Payload)) + HTTPManager.Logger.Warning("SocketManager", "Expected handshake data, but wasn't able to parse. Payload: " + packet.Payload); + + (this as IManager).OnTransportConnected(Transport); + + return; + } + else + HTTPManager.Logger.Information("SocketManager", "OnPacket - Already received handshake data!"); + break; + + case TransportEventTypes.Ping: + if (this.Options.ServerVersion == SupportedSocketIOVersions.Unknown) + { + HTTPManager.Logger.Information("SocketManager", "Received Ping packet from server, setting ServerVersion to v3!"); + this.Options.ServerVersion = SupportedSocketIOVersions.v3; + } + + lastPingReceived = DateTime.UtcNow; + (this as IManager).SendPacket(new Packet(TransportEventTypes.Pong, SocketIOEventTypes.Unknown, "/", string.Empty)); + break; + + case TransportEventTypes.Pong: + IsWaitingPong = false; + break; + } + + Socket socket = null; + if (Namespaces.TryGetValue(packet.Namespace, out socket)) + (socket as ISocket).OnPacket(packet); + else + HTTPManager.Logger.Warning("SocketManager", "Namespace \"" + packet.Namespace + "\" not found!"); + } + + #endregion + + /// + /// Sends an event to all available namespaces. + /// + public void EmitAll(string eventName, params object[] args) + { + for (int i = 0; i < Sockets.Count; ++i) + Sockets[i].Emit(eventName, args); + } + + /// + /// Emits an internal packet-less event to the root namespace without creating it if it isn't exists yet. + /// + void IManager.EmitEvent(string eventName, params object[] args) + { + Socket socket = null; + if (Namespaces.TryGetValue("/", out socket)) + (socket as ISocket).EmitEvent(eventName, args); + } + + /// + /// Emits an internal packet-less event to the root namespace without creating it if it isn't exists yet. + /// + void IManager.EmitEvent(SocketIOEventTypes type, params object[] args) + { + (this as IManager).EmitEvent(EventNames.GetNameFor(type), args); + } + + void IManager.EmitError(SocketIOErrors errCode, string msg) + { + (this as IManager).EmitEvent(SocketIOEventTypes.Error, new Error(errCode, msg)); + } + + void IManager.EmitAll(string eventName, params object[] args) + { + for (int i = 0; i < Sockets.Count; ++i) + (Sockets[i] as ISocket).EmitEvent(eventName, args); + } + + #region IHeartbeat Implementation + + /// + /// Called from the HTTPManager's OnUpdate function every frame. It's main function is to send out heartbeat messages. + /// + void IHeartbeat.OnHeartbeatUpdate(TimeSpan dif) + { + switch (State) + { + case States.Paused: + // To ensure no messages are lost, the upgrade packet will only be sent once all the buffers of the existing transport are flushed and the transport is considered paused. + if (!Transport.IsRequestInProgress && + !Transport.IsPollingInProgress) + { + State = States.Open; + + // Close the current transport + Transport.Close(); + + // and switch to the newly upgraded one + Transport = UpgradingTransport; + UpgradingTransport = null; + + // We will send an Upgrade("5") packet. + Transport.Send(new Packet(TransportEventTypes.Upgrade, SocketIOEventTypes.Unknown, "/", string.Empty)); + + goto case States.Open; + } + break; + + case States.Opening: + if (DateTime.UtcNow - ConnectionStarted >= Options.Timeout) + { + (this as IManager).EmitError(SocketIOErrors.Internal, "Connection timed out!"); + (this as IManager).EmitEvent("connect_error"); + (this as IManager).EmitEvent("connect_timeout"); + (this as IManager).TryToReconnect(); + } + + break; + + case States.Reconnecting: + if (ReconnectAt != DateTime.MinValue && DateTime.UtcNow >= ReconnectAt) + { + (this as IManager).EmitEvent("reconnect_attempt"); + (this as IManager).EmitEvent("reconnecting"); + + Open(); + } + break; + + case States.Open: + ITransport trans = null; + + // Select transport to use + if (Transport != null && Transport.State == TransportStates.Open) + trans = Transport; + + // not yet open? + if (trans == null || trans.State != TransportStates.Open) + return; + + // Start to poll the server for events + trans.Poll(); + + // Start to send out unsent packets + SendOfflinePackets(); + + // First time we reached this point. Set the LastHeartbeat to the current time, 'cause we are just opened. + if (LastHeartbeat == DateTime.MinValue) + { + LastHeartbeat = DateTime.UtcNow; + lastPingReceived = DateTime.UtcNow; + if (this.Options.ServerVersion == SupportedSocketIOVersions.Unknown) { + (this as IManager).SendPacket(new Packet(TransportEventTypes.Ping, SocketIOEventTypes.Unknown, "/", string.Empty)); + IsWaitingPong = true; + } + return; + } + + switch (this.Options.ServerVersion) + { + case SupportedSocketIOVersions.v2: + // It's time to send out a ping event to the server + if (!IsWaitingPong && DateTime.UtcNow - LastHeartbeat > Handshake.PingInterval) + { + (this as IManager).SendPacket(new Packet(TransportEventTypes.Ping, SocketIOEventTypes.Unknown, "/", string.Empty)); + + LastHeartbeat = DateTime.UtcNow; + IsWaitingPong = true; + } + + // No pong event received in the given time, we are disconnected. + if (IsWaitingPong && DateTime.UtcNow - LastHeartbeat > Handshake.PingTimeout) + { + IsWaitingPong = false; + (this as IManager).TryToReconnect(); + } + + break; + + case SupportedSocketIOVersions.v3: + if (DateTime.UtcNow - lastPingReceived > Handshake.PingInterval + Handshake.PingTimeout) + { + (this as IManager).TryToReconnect(); + } + break; + + case SupportedSocketIOVersions.Unknown: + var diff = DateTime.UtcNow - LastHeartbeat; + if (diff > Handshake.PingTimeout) + { + this.Options.ServerVersion = IsWaitingPong ? SupportedSocketIOVersions.v3 : SupportedSocketIOVersions.v2; + } + break; + } + + break; // case States.Open: + } + } + + #endregion + + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/SocketManager.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/SocketManager.cs.meta new file mode 100644 index 000000000..6c5a75c4d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/SocketManager.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 71662b80689f3cc479fbd747b6b05ed4 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/SocketOptions.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/SocketOptions.cs new file mode 100644 index 000000000..db4ea1007 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/SocketOptions.cs @@ -0,0 +1,184 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System; +using System.Text; + +using BestHTTP.PlatformSupport.Text; + +using PlatformSupport.Collections.ObjectModel; + +#if !NETFX_CORE + using PlatformSupport.Collections.Specialized; +#else + using System.Collections.Specialized; +#endif + +namespace BestHTTP.SocketIO +{ + public delegate void HTTPRequestCallbackDelegate(SocketManager manager, HTTPRequest request); + + public enum SupportedSocketIOVersions + { + Unknown, + v2, + v3 + } + + public sealed class SocketOptions + { + #region Properties + + /// + /// The SocketManager will try to connect with this transport. + /// + public Transports.TransportTypes ConnectWith { get; set; } + + /// + /// Whether to reconnect automatically after a disconnect (default true) + /// + public bool Reconnection { get; set; } + + /// + /// Number of attempts before giving up (default Int.MaxValue) + /// + public int ReconnectionAttempts { get; set; } + + /// + /// How long to initially wait before attempting a new reconnection (default 1000ms). + /// Affected by +/- RandomizationFactor, for example the default initial delay will be between 500ms to 1500ms. + /// + public TimeSpan ReconnectionDelay { get; set; } + + /// + /// Maximum amount of time to wait between reconnections (default 5000ms). + /// Each attempt increases the reconnection delay along with a randomization as above. + /// + public TimeSpan ReconnectionDelayMax { get; set; } + + /// + /// (default 0.5`), [0..1] + /// + public float RandomizationFactor { get { return randomizationFactor; } set { randomizationFactor = Math.Min(1.0f, Math.Max(0.0f, value)); } } + private float randomizationFactor; + + /// + /// Connection timeout before a connect_error and connect_timeout events are emitted (default 20000ms) + /// + public TimeSpan Timeout { get; set; } + + /// + /// By setting this false, you have to call SocketManager's Open() whenever you decide it's appropriate. + /// + public bool AutoConnect { get; set; } + + /// + /// Additional query parameters that will be passed for accessed uris. If the value is null, or an empty string it will be not appended to the query only the key. + /// The keys and values must be escaped properly, as the plugin will not escape these. + /// + public ObservableDictionary AdditionalQueryParams + { + get { return additionalQueryParams; } + set + { + // Unsubscribe from previous dictionary's events + if (additionalQueryParams != null) + additionalQueryParams.CollectionChanged -= AdditionalQueryParams_CollectionChanged; + + additionalQueryParams = value; + + // Clear out the cached value + BuiltQueryParams = null; + + // Subscribe to the collection changed event + if (value != null) + value.CollectionChanged += AdditionalQueryParams_CollectionChanged; + } + } + private ObservableDictionary additionalQueryParams; + + /// + /// If it's false, the parameters in the AdditionalQueryParams will be passed for all HTTP requests. Its default value is true. + /// + public bool QueryParamsOnlyForHandshake { get; set; } + + /// + /// A callback that called for every HTTPRequest the socket.io protocol sends out. It can be used to further customize (add additional request for example) requests. + /// + public HTTPRequestCallbackDelegate HTTPRequestCustomizationCallback { get; set; } + + /// + /// Socket.IO protocol version of the server. If left as default (Unknown) the plugin tries to detect the server version. + /// + public SupportedSocketIOVersions ServerVersion { get; set; } + + /// + /// Starting with Socket.IO v3, connecting to a namespace a client can send payload data. When the Auth callback function is set, the plugin going to call it when connecting to a namespace. Its return value must be a json string! + /// + public Func Auth; + + #endregion + + /// + /// The cached value of the result of the BuildQueryParams() call. + /// + private string BuiltQueryParams; + + /// + /// Constructor, setting the default option values. + /// + public SocketOptions() + { + ConnectWith = Transports.TransportTypes.Polling; + Reconnection = true; + ReconnectionAttempts = int.MaxValue; + ReconnectionDelay = TimeSpan.FromMilliseconds(1000); + ReconnectionDelayMax = TimeSpan.FromMilliseconds(5000); + RandomizationFactor = 0.5f; + Timeout = TimeSpan.FromMilliseconds(20000); + AutoConnect = true; + QueryParamsOnlyForHandshake = true; + } + + #region Helper Functions + + /// + /// Builds the keys and values from the AdditionalQueryParams to an key=value form. If AdditionalQueryParams is null or empty, it will return an empty string. + /// + internal string BuildQueryParams() + { + if (AdditionalQueryParams == null || AdditionalQueryParams.Count == 0) + return string.Empty; + + if (!string.IsNullOrEmpty(BuiltQueryParams)) + return BuiltQueryParams; + + StringBuilder sb = StringBuilderPool.Get(AdditionalQueryParams.Count * 4); //new StringBuilder(AdditionalQueryParams.Count * 4); + + foreach (var kvp in AdditionalQueryParams) + { + sb.Append("&"); + sb.Append(kvp.Key); + + if (!string.IsNullOrEmpty(kvp.Value)) + { + sb.Append("="); + sb.Append(kvp.Value); + } + } + + return BuiltQueryParams = StringBuilderPool.ReleaseAndGrab(sb); + } + + /// + /// This event will be called when the AdditonalQueryPrams dictionary changed. We have to reset the cached values. + /// + private void AdditionalQueryParams_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) + { + BuiltQueryParams = null; + } + + #endregion + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/SocketOptions.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/SocketOptions.cs.meta new file mode 100644 index 000000000..6554f9788 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/SocketOptions.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f6da26edefd917f4c9d36cc053c80415 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports.meta new file mode 100644 index 000000000..5358aa9e3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: eaefe2a013280de43aa61175fa8c119a +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports/ITransport.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports/ITransport.cs new file mode 100644 index 000000000..abc84831d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports/ITransport.cs @@ -0,0 +1,104 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System.Collections.Generic; + +namespace BestHTTP.SocketIO.Transports +{ + public enum TransportTypes + { + Polling, + +#if !BESTHTTP_DISABLE_WEBSOCKET + WebSocket +#endif + } + + /// + /// Possible states of an ITransport implementation. + /// + public enum TransportStates : int + { + /// + /// The transport is connecting to the server. + /// + Connecting = 0, + + /// + /// The transport is connected, and started the opening process. + /// + Opening = 1, + + /// + /// The transport is open, can send and receive packets. + /// + Open = 2, + + /// + /// The transport is closed. + /// + Closed = 3, + + /// + /// The transport is paused. + /// + Paused = 4 + } + + /// + /// An interface that a Socket.IO transport must implement. + /// + public interface ITransport + { + /// + /// Type of this transport. + /// + TransportTypes Type { get; } + + /// + /// Current state of the transport + /// + TransportStates State { get; } + + /// + /// SocketManager instance that this transport is bound to. + /// + SocketManager Manager { get; } + + /// + /// True if the transport is busy with sending messages. + /// + bool IsRequestInProgress { get; } + + /// + /// True if the transport is busy with a poll request. + /// + bool IsPollingInProgress { get; } + + /// + /// Start open/upgrade the transport. + /// + void Open(); + + /// + /// Do a poll for available messages on the server. + /// + void Poll(); + + /// + /// Send a single packet to the server. + /// + void Send(Packet packet); + + /// + /// Send a list of packets to the server. + /// + void Send(List packets); + + /// + /// Close this transport. + /// + void Close(); + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports/ITransport.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports/ITransport.cs.meta new file mode 100644 index 000000000..4b63c0c22 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports/ITransport.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c13819a2cd1052c4b8fd103084362fed +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports/PollingTransport.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports/PollingTransport.cs new file mode 100644 index 000000000..410c7661b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports/PollingTransport.cs @@ -0,0 +1,638 @@ +#if !BESTHTTP_DISABLE_SOCKETIO + +using System; +using System.Linq; +using System.Text; + +using BestHTTP.Extensions; + +namespace BestHTTP.SocketIO.Transports +{ + public sealed class PollingTransport : ITransport + { + #region Public (ITransport) Properties + + public TransportTypes Type { get { return TransportTypes.Polling; } } + public TransportStates State { get; private set; } + public SocketManager Manager { get; private set; } + public bool IsRequestInProgress { get { return LastRequest != null; } } + public bool IsPollingInProgress { get { return PollRequest != null; } } + + #endregion + + #region Private Fields + + /// + /// The last POST request we sent to the server. + /// + private HTTPRequest LastRequest; + + /// + /// Last GET request we sent to the server. + /// + private HTTPRequest PollRequest; + + /// + /// The last packet with expected binary attachments + /// + private Packet PacketWithAttachment; + + #endregion + + public enum PayloadTypes : byte + { + Text, + Binary + } + + public PollingTransport(SocketManager manager) + { + Manager = manager; + } + + public void Open() + { + string format = "{0}?EIO={1}&transport=polling&t={2}-{3}{5}"; + if (Manager.Handshake != null) + format += "&sid={4}"; + + bool sendAdditionalQueryParams = !Manager.Options.QueryParamsOnlyForHandshake || (Manager.Options.QueryParamsOnlyForHandshake && Manager.Handshake == null); + + HTTPRequest request = new HTTPRequest(new Uri(string.Format(format, + Manager.Uri.ToString(), + Manager.ProtocolVersion, + Manager.Timestamp.ToString(), + Manager.RequestCounter++.ToString(), + Manager.Handshake != null ? Manager.Handshake.Sid : string.Empty, + sendAdditionalQueryParams ? Manager.Options.BuildQueryParams() : string.Empty)), + OnRequestFinished); + +#if !BESTHTTP_DISABLE_CACHING + // Don't even try to cache it + request.DisableCache = true; +#endif + + request.MaxRetries = 0; + + if (this.Manager.Options.HTTPRequestCustomizationCallback != null) + this.Manager.Options.HTTPRequestCustomizationCallback(this.Manager, request); + + request.Send(); + + State = TransportStates.Opening; + } + + /// + /// Closes the transport and cleans up resources. + /// + public void Close() + { + if (State == TransportStates.Closed) + return; + + State = TransportStates.Closed; + + /* + if (LastRequest != null) + LastRequest.Abort(); + + if (PollRequest != null) + PollRequest.Abort();*/ + } + + #region Packet Sending Implementation + + private System.Collections.Generic.List lonelyPacketList = new System.Collections.Generic.List(1); + public void Send(Packet packet) + { + try + { + lonelyPacketList.Add(packet); + Send(lonelyPacketList); + } + finally + { + lonelyPacketList.Clear(); + } + } + + public void Send(System.Collections.Generic.List packets) + { + if (State != TransportStates.Opening && State != TransportStates.Open) + return; + + if (IsRequestInProgress) + throw new Exception("Sending packets are still in progress!"); + + + + LastRequest = new HTTPRequest(new Uri(string.Format("{0}?EIO={1}&transport=polling&t={2}-{3}&sid={4}{5}", + Manager.Uri.ToString(), + Manager.ProtocolVersion, + Manager.Timestamp.ToString(), + Manager.RequestCounter++.ToString(), + Manager.Handshake.Sid, + !Manager.Options.QueryParamsOnlyForHandshake ? Manager.Options.BuildQueryParams() : string.Empty)), + HTTPMethods.Post, + OnRequestFinished); + + +#if !BESTHTTP_DISABLE_CACHING + // Don't even try to cache it + LastRequest.DisableCache = true; +#endif + + if (this.Manager.Options.ServerVersion == SupportedSocketIOVersions.v2) + SendV2(packets, LastRequest); + else + SendV3(packets, LastRequest); + + if (this.Manager.Options.HTTPRequestCustomizationCallback != null) + this.Manager.Options.HTTPRequestCustomizationCallback(this.Manager, LastRequest); + + LastRequest.Send(); + } + + StringBuilder sendBuilder = new StringBuilder(); + private void SendV3(System.Collections.Generic.List packets, HTTPRequest request) + { + sendBuilder.Length = 0; + + try + { + for (int i = 0; i < packets.Count; ++i) + { + var packet = packets[i]; + + if (i > 0) + sendBuilder.Append((char)0x1E); + sendBuilder.Append(packet.Encode()); + + if (packet.Attachments != null && packet.Attachments.Count > 0) + for(int cv = 0; cv < packet.Attachments.Count; ++cv) + { + sendBuilder.Append((char)0x1E); + sendBuilder.Append('b'); + sendBuilder.Append(Convert.ToBase64String(packet.Attachments[i])); + } + } + + packets.Clear(); + } + catch (Exception ex) + { + (Manager as IManager).EmitError(SocketIOErrors.Internal, ex.Message + " " + ex.StackTrace); + return; + } + + var str = sendBuilder.ToString(); + request.RawData = System.Text.Encoding.UTF8.GetBytes(str); + request.SetHeader("Content-Type", "text/plain; charset=UTF-8"); + } + + private void SendV2(System.Collections.Generic.List packets, HTTPRequest request) + { + byte[] buffer = null; + + try + { + buffer = packets[0].EncodeBinary(); + + for (int i = 1; i < packets.Count; ++i) + { + byte[] tmpBuffer = packets[i].EncodeBinary(); + + Array.Resize(ref buffer, buffer.Length + tmpBuffer.Length); + + Array.Copy(tmpBuffer, 0, buffer, buffer.Length - tmpBuffer.Length, tmpBuffer.Length); + } + + packets.Clear(); + } + catch (Exception ex) + { + (Manager as IManager).EmitError(SocketIOErrors.Internal, ex.Message + " " + ex.StackTrace); + return; + } + + request.SetHeader("Content-Type", "application/octet-stream"); + request.RawData = buffer; + } + + private void OnRequestFinished(HTTPRequest req, HTTPResponse resp) + { + // Clear out the LastRequest variable, so we can start sending out new packets + LastRequest = null; + + if (State == TransportStates.Closed) + return; + + string errorString = null; + + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + if (HTTPManager.Logger.Level <= BestHTTP.Logger.Loglevels.All) + HTTPManager.Logger.Verbose("PollingTransport", "OnRequestFinished: " + resp.DataAsText); + + if (resp.IsSuccess) + { + // When we are sending data, the response is an 'ok' string + if (req.MethodType != HTTPMethods.Post) + ParseResponse(resp); + } + else + errorString = string.Format("Polling - Request finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2} Uri: {3}", + resp.StatusCode, + resp.Message, + resp.DataAsText, + req.CurrentUri); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + errorString = (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception"); + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + errorString = string.Format("Polling - Request({0}) Aborted!", req.CurrentUri); + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + errorString = string.Format("Polling - Connection Timed Out! Uri: {0}", req.CurrentUri); + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + errorString = string.Format("Polling - Processing the request({0}) Timed Out!", req.CurrentUri); + break; + } + + if (!string.IsNullOrEmpty(errorString)) + (Manager as IManager).OnTransportError(this, errorString); + } + + #endregion + + #region Polling Implementation + + public void Poll() + { + if (PollRequest != null || State == TransportStates.Paused) + return; + + PollRequest = new HTTPRequest(new Uri(string.Format("{0}?EIO={1}&transport=polling&t={2}-{3}&sid={4}{5}", + Manager.Uri.ToString(), + Manager.ProtocolVersion, + Manager.Timestamp.ToString(), + Manager.RequestCounter++.ToString(), + Manager.Handshake.Sid, + !Manager.Options.QueryParamsOnlyForHandshake ? Manager.Options.BuildQueryParams() : string.Empty)), + HTTPMethods.Get, + OnPollRequestFinished); + +#if !BESTHTTP_DISABLE_CACHING + // Don't even try to cache it + PollRequest.DisableCache = true; +#endif + + PollRequest.MaxRetries = 0; + + if (this.Manager.Options.HTTPRequestCustomizationCallback != null) + this.Manager.Options.HTTPRequestCustomizationCallback(this.Manager, PollRequest); + + PollRequest.Send(); + } + + private void OnPollRequestFinished(HTTPRequest req, HTTPResponse resp) + { + // Clear the PollRequest variable, so we can start a new poll. + PollRequest = null; + + if (State == TransportStates.Closed) + return; + + string errorString = null; + + switch (req.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + + if (HTTPManager.Logger.Level <= BestHTTP.Logger.Loglevels.All) + HTTPManager.Logger.Verbose("PollingTransport", "OnPollRequestFinished: " + resp.DataAsText); + + if (resp.IsSuccess) + ParseResponse(resp); + else + errorString = string.Format("Polling - Request finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2} Uri: {3}", + resp.StatusCode, + resp.Message, + resp.DataAsText, + req.CurrentUri); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + errorString = req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception"; + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + errorString = string.Format("Polling - Request({0}) Aborted!", req.CurrentUri); + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + errorString = string.Format("Polling - Connection Timed Out! Uri: {0}", req.CurrentUri); + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + errorString = string.Format("Polling - Processing the request({0}) Timed Out!", req.CurrentUri); + break; + } + + if (!string.IsNullOrEmpty(errorString)) + (Manager as IManager).OnTransportError(this, errorString); + } + + #endregion + + #region Packet Parsing and Handling + + /// + /// Preprocessing and sending out packets to the manager. + /// + private void OnPacket(Packet packet) + { + if (packet.AttachmentCount != 0 && !packet.HasAllAttachment) + { + PacketWithAttachment = packet; + return; + } + + switch (packet.TransportEvent) + { + case TransportEventTypes.Open: + if (this.State != TransportStates.Opening) + HTTPManager.Logger.Warning("PollingTransport", "Received 'Open' packet while state is '" + State.ToString() + "'"); + else + State = TransportStates.Open; + goto default; + + case TransportEventTypes.Message: + if (packet.SocketIOEvent == SocketIOEventTypes.Connect) //2:40 + this.State = TransportStates.Open; + goto default; + + default: + (Manager as IManager).OnPacket(packet); + break; + } + } + + private SupportedSocketIOVersions GetServerVersion(HTTPResponse resp) + { + string contentTypeValue = resp.GetFirstHeaderValue("content-type"); + if (string.IsNullOrEmpty(contentTypeValue)) + return SupportedSocketIOVersions.v2; + + HeaderParser contentType = new HeaderParser(contentTypeValue); + PayloadTypes type = contentType.Values.FirstOrDefault().Key == "text/plain" ? PayloadTypes.Text : PayloadTypes.Binary; + + if (type != PayloadTypes.Text) + return SupportedSocketIOVersions.v2; + + // https://github.com/socketio/engine.io-protocol/issues/35 + // v3: 96:0{ "sid":"lv_VI97HAXpY6yYWAAAC","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000} + // v4: 0{ "sid":"lv_VI97HAXpY6yYWAAAC","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000} + for (int i = 0; i< resp.Data.Length; ++i) + { + if (resp.Data[i] == ':') + return SupportedSocketIOVersions.v2; + if (resp.Data[i] == '{') + return SupportedSocketIOVersions.v3; + } + + return SupportedSocketIOVersions.Unknown; + } + + private void ParseResponse(HTTPResponse resp) + { + if (this.Manager.Options.ServerVersion == SupportedSocketIOVersions.Unknown) + this.Manager.Options.ServerVersion = GetServerVersion(resp); + + if (this.Manager.Options.ServerVersion == SupportedSocketIOVersions.v2) + this.ParseResponseV2(resp); + else + this.ParseResponseV3(resp); + } + + private void ParseResponseV3(HTTPResponse resp) + { + try + { + if (resp == null || resp.Data == null || resp.Data.Length < 1) + return; + + //HeaderParser contentType = new HeaderParser(resp.GetFirstHeaderValue("content-type")); + //PayloadTypes type = contentType.Values.FirstOrDefault().Key == "text/plain" ? PayloadTypes.Text : PayloadTypes.Binary; + + int idx = 0; + while (idx < resp.Data.Length) + { + int endIdx = FindNextRecordSeparator(resp.Data, idx); + int length = endIdx - idx; + + if (length <= 0) + break; + + Packet packet = null; + + if (resp.Data[idx] == 'b') + { + if (PacketWithAttachment != null) + { + // First byte is the binary indicator('b'). We must skip it, so we advance our idx and also have to decrease length + idx++; + length--; + + var base64Encoded = System.Text.Encoding.UTF8.GetString(resp.Data, idx, length); + PacketWithAttachment.AddAttachmentFromServer(Convert.FromBase64String(base64Encoded), true); + + if (PacketWithAttachment.HasAllAttachment) + { + packet = PacketWithAttachment; + PacketWithAttachment = null; + } + } + else + HTTPManager.Logger.Warning("PollingTransport", "Received binary but no packet to attach to!"); + } + else + { + packet = new Packet(Encoding.UTF8.GetString(resp.Data, idx, length)); + } + + if (packet != null) + { + try + { + OnPacket(packet); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("PollingTransport", "ParseResponseV3 - OnPacket", ex); + (Manager as IManager).EmitError(SocketIOErrors.Internal, ex.Message + " " + ex.StackTrace); + } + } + + idx = endIdx + 1; + } + } + catch (Exception ex) + { + (Manager as IManager).EmitError(SocketIOErrors.Internal, ex.Message + " " + ex.StackTrace); + + HTTPManager.Logger.Exception("PollingTransport", "ParseResponseV3", ex); + } + } + + private int FindNextRecordSeparator(byte[] data, int startIdx) + { + for (int i = startIdx; i < data.Length; ++i) + { + if (data[i] == 0x1E) + return i; + } + return data.Length; + } + + /// + /// Will parse the response, and send out the parsed packets. + /// + private void ParseResponseV2(HTTPResponse resp) + { + try + { + if (resp != null && resp.Data != null && resp.Data.Length >= 1) + { + int idx = 0; + + while (idx < resp.Data.Length) + { + PayloadTypes type = PayloadTypes.Text; + int length = 0; + + if (resp.Data[idx] < '0') + { + type = (PayloadTypes)resp.Data[idx++]; + + byte num = resp.Data[idx++]; + while (num != 0xFF) + { + length = (length * 10) + num; + num = resp.Data[idx++]; + } + } + else + { + byte next = resp.Data[idx++]; + while (next != ':') + { + length = (length * 10) + (next - '0'); + next = resp.Data[idx++]; + } + + // Because length can be different from the byte length, we have to do a little post-processing to support unicode characters. + + int brackets = 0; + int tmpIdx = idx; + while (tmpIdx < idx + length) + { + if (resp.Data[tmpIdx] == '[') + brackets++; + else if (resp.Data[tmpIdx] == ']') + brackets--; + + tmpIdx++; + } + + if (brackets > 0) + { + while (brackets > 0) + { + if (resp.Data[tmpIdx] == '[') + brackets++; + else if (resp.Data[tmpIdx] == ']') + brackets--; + tmpIdx++; + } + + length = tmpIdx - idx; + } + } + + Packet packet = null; + switch (type) + { + case PayloadTypes.Text: + packet = new Packet(Encoding.UTF8.GetString(resp.Data, idx, length)); + break; + case PayloadTypes.Binary: + if (PacketWithAttachment != null) + { + // First byte is the packet type. We can skip it, so we advance our idx and we also have + // to decrease length + idx++; + length--; + + byte[] buffer = new byte[length]; + Array.Copy(resp.Data, idx, buffer, 0, length); + + PacketWithAttachment.AddAttachmentFromServer(buffer, true); + + if (PacketWithAttachment.HasAllAttachment) + { + packet = PacketWithAttachment; + PacketWithAttachment = null; + } + } + break; + } // switch + + if (packet != null) + { + try + { + OnPacket(packet); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("PollingTransport", "ParseResponseV2 - OnPacket", ex); + (Manager as IManager).EmitError(SocketIOErrors.Internal, ex.Message + " " + ex.StackTrace); + } + } + + idx += length; + + }// while + } + } + catch (Exception ex) + { + (Manager as IManager).EmitError(SocketIOErrors.Internal, ex.Message + " " + ex.StackTrace); + + HTTPManager.Logger.Exception("PollingTransport", "ParseResponseV2", ex); + } + } + + #endregion + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports/PollingTransport.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports/PollingTransport.cs.meta new file mode 100644 index 000000000..70a0afb97 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports/PollingTransport.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d38d2293870da854287018c9eb086861 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports/WebSocketTransport.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports/WebSocketTransport.cs new file mode 100644 index 000000000..5f17c3423 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports/WebSocketTransport.cs @@ -0,0 +1,386 @@ +#if !BESTHTTP_DISABLE_SOCKETIO +#if !BESTHTTP_DISABLE_WEBSOCKET + +using System; +using System.Collections.Generic; + +namespace BestHTTP.SocketIO.Transports +{ + using BestHTTP.Connections; + using BestHTTP.WebSocket; + using Extensions; + + /// + /// A transport implementation that can communicate with a SocketIO server. + /// + internal sealed class WebSocketTransport : ITransport + { + public TransportTypes Type { get { return TransportTypes.WebSocket; } } + public TransportStates State { get; private set; } + public SocketManager Manager { get; private set; } + public bool IsRequestInProgress { get { return false; } } + public bool IsPollingInProgress { get { return false; } } + public WebSocket Implementation { get; private set; } + + private Packet PacketWithAttachment; + private byte[] Buffer; + + public WebSocketTransport(SocketManager manager) + { + State = TransportStates.Closed; + Manager = manager; + } + + #region Some ITransport Implementation + + public void Open() + { + if (State != TransportStates.Closed) + return; + + Uri uri = null; + string baseUrl = new UriBuilder(HTTPProtocolFactory.IsSecureProtocol(Manager.Uri) ? "wss" : "ws", + Manager.Uri.Host, + Manager.Uri.Port, + Manager.Uri.GetRequestPathAndQueryURL()).Uri.ToString(); + string format = "{0}?EIO={1}&transport=websocket{3}"; + if (Manager.Handshake != null) + format += "&sid={2}"; + + bool sendAdditionalQueryParams = !Manager.Options.QueryParamsOnlyForHandshake || (Manager.Options.QueryParamsOnlyForHandshake && Manager.Handshake == null); + + uri = new Uri(string.Format(format, + baseUrl, + Manager.ProtocolVersion, + Manager.Handshake != null ? Manager.Handshake.Sid : string.Empty, + sendAdditionalQueryParams ? Manager.Options.BuildQueryParams() : string.Empty)); + + Implementation = new WebSocket(uri); + +#if !UNITY_WEBGL || UNITY_EDITOR + Implementation.StartPingThread = true; + + if (this.Manager.Options.HTTPRequestCustomizationCallback != null) + Implementation.OnInternalRequestCreated = (ws, internalRequest) => this.Manager.Options.HTTPRequestCustomizationCallback(this.Manager, internalRequest); +#endif + + Implementation.OnOpen = OnOpen; + Implementation.OnMessage = OnMessage; + Implementation.OnBinary = OnBinary; + Implementation.OnError = OnError; + Implementation.OnClosed = OnClosed; + + Implementation.Open(); + + State = TransportStates.Connecting; + } + + /// + /// Closes the transport and cleans up resources. + /// + public void Close() + { + if (State == TransportStates.Closed) + return; + + State = TransportStates.Closed; + + if (Implementation != null) + Implementation.Close(); + else + HTTPManager.Logger.Warning("WebSocketTransport", "Close - WebSocket Implementation already null!"); + Implementation = null; + } + + /// + /// Polling implementation. With WebSocket it's just a skeleton. + /// + public void Poll() + { + } + + #endregion + + #region WebSocket Events + + /// + /// WebSocket implementation OnOpen event handler. + /// + private void OnOpen(WebSocket ws) + { + if (ws != Implementation) + return; + + HTTPManager.Logger.Information("WebSocketTransport", "OnOpen"); + + State = TransportStates.Opening; + + // Send a Probe packet to test the transport. If we receive back a pong with the same payload we can upgrade + if (Manager.UpgradingTransport == this) + Send(new Packet(TransportEventTypes.Ping, SocketIOEventTypes.Unknown, "/", "probe")); + } + + /// + /// WebSocket implementation OnMessage event handler. + /// + private void OnMessage(WebSocket ws, string message) + { + if (ws != Implementation) + return; + + if (HTTPManager.Logger.Level <= BestHTTP.Logger.Loglevels.All) + HTTPManager.Logger.Verbose("WebSocketTransport", "OnMessage: " + message); + + Packet packet = null; + try + { + packet = new Packet(message); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("WebSocketTransport", "OnMessage Packet parsing", ex); + } + + if (packet == null) + { + HTTPManager.Logger.Error("WebSocketTransport", "Message parsing failed. Message: " + message); + return; + } + + try + { + + if (packet.AttachmentCount == 0) + OnPacket(packet); + else + PacketWithAttachment = packet; + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("WebSocketTransport", "OnMessage OnPacket", ex); + } + } + + /// + /// WebSocket implementation OnBinary event handler. + /// + private void OnBinary(WebSocket ws, byte[] data) + { + if (ws != Implementation) + return; + + if (HTTPManager.Logger.Level <= BestHTTP.Logger.Loglevels.All) + HTTPManager.Logger.Verbose("WebSocketTransport", "OnBinary"); + + if (PacketWithAttachment != null) + { + switch(this.Manager.Options.ServerVersion) + { + case SupportedSocketIOVersions.v2: PacketWithAttachment.AddAttachmentFromServer(data, false); break; + case SupportedSocketIOVersions.v3: PacketWithAttachment.AddAttachmentFromServer(data, true); break; + default: + HTTPManager.Logger.Warning("WebSocketTransport", "Binary packet received while the server's version is Unknown. Set SocketOption's ServerVersion to the correct value to avoid packet mishandling!"); + + // Fall back to V2 by default. + this.Manager.Options.ServerVersion = SupportedSocketIOVersions.v2; + goto case SupportedSocketIOVersions.v2; + } + + if (PacketWithAttachment.HasAllAttachment) + { + try + { + OnPacket(PacketWithAttachment); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("WebSocketTransport", "OnBinary", ex); + } + finally + { + PacketWithAttachment = null; + } + } + } + else + { + // Room for improvement: we received an unwanted binary message? + } + } + + /// + /// WebSocket implementation OnError event handler. + /// + private void OnError(WebSocket ws, string error) + { + if (ws != Implementation) + return; + +#if !UNITY_WEBGL || UNITY_EDITOR + if (string.IsNullOrEmpty(error)) + { + switch (ws.InternalRequest.State) + { + // The request finished without any problem. + case HTTPRequestStates.Finished: + if (ws.InternalRequest.Response.IsSuccess || ws.InternalRequest.Response.StatusCode == 101) + error = string.Format("Request finished. Status Code: {0} Message: {1}", ws.InternalRequest.Response.StatusCode.ToString(), ws.InternalRequest.Response.Message); + else + error = string.Format("Request Finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}", + ws.InternalRequest.Response.StatusCode, + ws.InternalRequest.Response.Message, + ws.InternalRequest.Response.DataAsText); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + error = "Request Finished with Error! : " + ws.InternalRequest.Exception != null ? (ws.InternalRequest.Exception.Message + " " + ws.InternalRequest.Exception.StackTrace) : string.Empty; + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + error = "Request Aborted!"; + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + error = "Connection Timed Out!"; + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + error = "Processing the request Timed Out!"; + break; + } + } +#endif + + if (Manager.UpgradingTransport != this) + (Manager as IManager).OnTransportError(this, error); + else + Manager.UpgradingTransport = null; + } + + /// + /// WebSocket implementation OnClosed event handler. + /// + private void OnClosed(WebSocket ws, ushort code, string message) + { + if (ws != Implementation) + return; + + HTTPManager.Logger.Information("WebSocketTransport", "OnClosed"); + + Close(); + + if (Manager.UpgradingTransport != this) + (Manager as IManager).TryToReconnect(); + else + Manager.UpgradingTransport = null; + } + +#endregion + +#region Packet Sending Implementation + + /// + /// A WebSocket implementation of the packet sending. + /// + public void Send(Packet packet) + { + if (State == TransportStates.Closed || + State == TransportStates.Paused) + { + HTTPManager.Logger.Information("WebSocketTransport", string.Format("Send - State == {0}, skipping packet sending!", State)); + return; + } + + string encoded = packet.Encode(); + + if (HTTPManager.Logger.Level <= BestHTTP.Logger.Loglevels.All) + HTTPManager.Logger.Verbose("WebSocketTransport", "Send: " + encoded); + + if (packet.AttachmentCount != 0 || (packet.Attachments != null && packet.Attachments.Count != 0)) + { + if (packet.Attachments == null) + throw new ArgumentException("packet.Attachments are null!"); + + if (packet.AttachmentCount != packet.Attachments.Count) + throw new ArgumentException("packet.AttachmentCount != packet.Attachments.Count. Use the packet.AddAttachment function to add data to a packet!"); + } + + Implementation.Send(encoded); + + if (packet.AttachmentCount != 0) + { + int maxLength = packet.Attachments[0].Length + 1; + for (int cv = 1; cv < packet.Attachments.Count; ++cv) + if ((packet.Attachments[cv].Length + 1) > maxLength) + maxLength = packet.Attachments[cv].Length + 1; + + if (Buffer == null || Buffer.Length < maxLength) + Array.Resize(ref Buffer, maxLength); + + for (int i = 0; i < packet.AttachmentCount; i++) + { + Buffer[0] = (byte)TransportEventTypes.Message; + + Array.Copy(packet.Attachments[i], 0, Buffer, 1, packet.Attachments[i].Length); + + Implementation.Send(Buffer, 0, (ulong)packet.Attachments[i].Length + 1UL); + } + } + } + + /// + /// A WebSocket implementation of the packet sending. + /// + public void Send(List packets) + { + for (int i = 0; i < packets.Count; ++i) + Send(packets[i]); + + packets.Clear(); + } + +#endregion + +#region Packet Handling + + /// + /// Will only process packets that need to upgrade. All other packets are passed to the Manager. + /// + private void OnPacket(Packet packet) + { + switch (packet.TransportEvent) + { + case TransportEventTypes.Open: + if (this.State != TransportStates.Opening) + HTTPManager.Logger.Warning("WebSocketTransport", "Received 'Open' packet while state is '" + State.ToString() + "'"); + else + State = TransportStates.Open; + goto default; + + case TransportEventTypes.Pong: + // Answer for a Ping Probe. + if (packet.Payload == "probe") + { + State = TransportStates.Open; + (Manager as IManager).OnTransportProbed(this); + } + + goto default; + + default: + if (Manager.UpgradingTransport != this) + (Manager as IManager).OnPacket(packet); + break; + } + } + +#endregion + } +} + +#endif +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports/WebSocketTransport.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports/WebSocketTransport.cs.meta new file mode 100644 index 000000000..cdaa9aa7d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/SocketIO/Transports/WebSocketTransport.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 28075d7868e0f0845ab98be53d258c85 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Timings.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Timings.meta new file mode 100644 index 000000000..626ee7ff0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Timings.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 305afd9e4f7c72d46bc1499547ed6a3a +folderAsset: yes +timeCreated: 1596976591 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Timings/TimingCollector.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Timings/TimingCollector.cs new file mode 100644 index 000000000..711123bc3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Timings/TimingCollector.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; + +using BestHTTP.Core; + +namespace BestHTTP.Timings +{ + public sealed class TimingCollector + { + public HTTPRequest ParentRequest { get; } + + /// + /// When the TimingCollector instance created. + /// + public DateTime Start { get; private set; } + + /// + /// List of added events. + /// + public List Events { get; private set; } + + public TimingCollector(HTTPRequest parentRequest) + { + this.ParentRequest = parentRequest; + this.Start = DateTime.Now; + } + + internal void AddEvent(string name, DateTime when, TimeSpan duration) + { + if (this.Events == null) + this.Events = new List(); + + if (duration == TimeSpan.Zero) + { + DateTime prevEventAt = this.Start; + if (this.Events.Count > 0) + prevEventAt = this.Events[this.Events.Count - 1].When; + duration = when - prevEventAt; + } + this.Events.Add(new TimingEvent(name, when, duration)); + } + + /// + /// Add an event. Duration is calculated from the previous event or start of the collector. + /// + public void Add(string name) + { + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this.ParentRequest, name, DateTime.Now)); + } + + /// + /// Add an event with a known duration. + /// + public void Add(string name, TimeSpan duration) + { + RequestEventHelper.EnqueueRequestEvent(new RequestEventInfo(this.ParentRequest, name, duration)); + } + + public TimingEvent FindFirst(string name) + { + if (this.Events == null) + return TimingEvent.Empty; + + for (int i = 0; i < this.Events.Count; ++i) + { + if (this.Events[i].Name == name) + return this.Events[i]; + } + + return TimingEvent.Empty; + } + + public TimingEvent FindLast(string name) + { + if (this.Events == null) + return TimingEvent.Empty; + + for (int i = this.Events.Count - 1; i >= 0; --i) + { + if (this.Events[i].Name == name) + return this.Events[i]; + } + + return TimingEvent.Empty; + } + + public override string ToString() + { + string result = string.Format("[TimingCollector Start: '{0}' ", this.Start.ToLongTimeString()); + + if (this.Events != null) + foreach (var @event in this.Events) + result += '\n' + @event.ToString(); + + result += "]"; + + return result; + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Timings/TimingCollector.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Timings/TimingCollector.cs.meta new file mode 100644 index 000000000..eb3760bc1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Timings/TimingCollector.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 71a56816af23e59479967fd2aaf8d72c +timeCreated: 1596976592 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Timings/TimingEvent.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Timings/TimingEvent.cs new file mode 100644 index 000000000..d9596720f --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Timings/TimingEvent.cs @@ -0,0 +1,82 @@ +using System; + +namespace BestHTTP.Timings +{ + public struct TimingEvent : IEquatable + { + public static readonly TimingEvent Empty = new TimingEvent(null, TimeSpan.Zero); + /// + /// Name of the event + /// + public readonly string Name; + + /// + /// Duration of the event. + /// + public readonly TimeSpan Duration; + + /// + /// When the event occurred. + /// + public readonly DateTime When; + + public TimingEvent(string name, TimeSpan duration) + { + this.Name = name; + this.Duration = duration; + this.When = DateTime.Now; + } + + public TimingEvent(string name, DateTime when, TimeSpan duration) + { + this.Name = name; + this.When = when; + this.Duration = duration; + } + + public TimeSpan CalculateDuration(TimingEvent @event) + { + if (this.When < @event.When) + return @event.When - this.When; + + return this.When - @event.When; + } + + public bool Equals(TimingEvent other) + { + return this.Name == other.Name && + this.Duration == other.Duration && + this.When == other.When; + } + + public override bool Equals(object obj) + { + if (obj is TimingEvent) + return this.Equals((TimingEvent)obj); + + return false; + } + + public override int GetHashCode() + { + return (this.Name != null ? this.Name.GetHashCode() : 0) ^ + this.Duration.GetHashCode() ^ + this.When.GetHashCode(); + } + + public static bool operator ==(TimingEvent lhs, TimingEvent rhs) + { + return lhs.Equals(rhs); + } + + public static bool operator !=(TimingEvent lhs, TimingEvent rhs) + { + return !lhs.Equals(rhs); + } + + public override string ToString() + { + return string.Format("['{0}': {1}]", this.Name, this.Duration); + } + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Timings/TimingEvent.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Timings/TimingEvent.cs.meta new file mode 100644 index 000000000..dadea773e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Timings/TimingEvent.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b504248fda665464b8acfee61f219501 +timeCreated: 1596976592 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Timings/TimingEventNames.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/Timings/TimingEventNames.cs new file mode 100644 index 000000000..f0d875587 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Timings/TimingEventNames.cs @@ -0,0 +1,21 @@ +namespace BestHTTP.Timings +{ + public static class TimingEventNames + { + public const string Queued = "Queued"; + public const string Queued_For_Redirection = "Queued for redirection"; + public const string DNS_Lookup = "DNS Lookup"; + public const string TCP_Connection = "TCP Connection"; + public const string Proxy_Negotiation = "Proxy Negotiation"; + public const string TLS_Negotiation = "TLS Negotiation"; + public const string Request_Sent = "Request Sent"; + public const string Waiting_TTFB = "Waiting (TTFB)"; + public const string Headers = "Headers"; + public const string Loading_From_Cache = "Loading from Cache"; + public const string Writing_To_Cache = "Writing to Cache"; + public const string Response_Received = "Response Received"; + public const string Queued_For_Disptach = "Queued for Dispatch"; + public const string Finished = "Finished in"; + public const string Callback = "Callback"; + } +} diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/Timings/TimingEventNames.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/Timings/TimingEventNames.cs.meta new file mode 100644 index 000000000..1a9f78bd4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/Timings/TimingEventNames.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e9f77b1a6417dfd4abbbeb4f35020146 +timeCreated: 1596976592 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket.meta new file mode 100644 index 000000000..6d10d98f9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7b831e0970fca74409c9458a8a6774de +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Extensions.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Extensions.meta new file mode 100644 index 000000000..53aae1ea0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Extensions.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5e44072d24b360245b3b38f37c984cee +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Extensions/IExtension.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Extensions/IExtension.cs new file mode 100644 index 000000000..324a96f04 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Extensions/IExtension.cs @@ -0,0 +1,42 @@ +#if !BESTHTTP_DISABLE_WEBSOCKET && (!UNITY_WEBGL || UNITY_EDITOR) + +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.WebSocket.Frames; + +namespace BestHTTP.WebSocket.Extensions +{ + public interface IExtension + { + /// + /// This is the first pass: here we can add headers to the request to initiate an extension negotiation. + /// + /// + void AddNegotiation(HTTPRequest request); + + /// + /// If the websocket upgrade succeded it will call this function to be able to parse the server's negotiation + /// response. Inside this function the IsEnabled should be set. + /// + bool ParseNegotiation(HTTPResponse resp); + + /// + /// This function should return a new header flag based on the inFlag parameter. The extension should set only the + /// Rsv1-3 bits in the header. + /// + byte GetFrameHeader(WebSocketFrame writer, byte inFlag); + + /// + /// This function will be called to be able to transform the data that will be sent to the server. + /// + /// + /// + BufferSegment Encode(WebSocketFrame writer); + + /// + /// This function can be used the decode the server-sent data. + /// + BufferSegment Decode(byte header, BufferSegment data); + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Extensions/IExtension.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Extensions/IExtension.cs.meta new file mode 100644 index 000000000..9d0c5e916 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Extensions/IExtension.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0ef9ac8246255ea449a40171fb654053 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Extensions/PerMessageCompression.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Extensions/PerMessageCompression.cs new file mode 100644 index 000000000..922cbb38b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Extensions/PerMessageCompression.cs @@ -0,0 +1,339 @@ +#if !BESTHTTP_DISABLE_WEBSOCKET && (!UNITY_WEBGL || UNITY_EDITOR) + +using System; +using BestHTTP.Extensions; +using BestHTTP.WebSocket.Frames; +using BestHTTP.Decompression.Zlib; +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP.WebSocket.Extensions +{ + /// + /// Compression Extensions for WebSocket implementation. + /// http://tools.ietf.org/html/rfc7692 + /// + public sealed class PerMessageCompression : IExtension + { + public const int MinDataLengthToCompressDefault = 256; + + private static readonly byte[] Trailer = new byte[] { 0x00, 0x00, 0xFF, 0xFF }; + + #region Public Properties + + /// + /// By including this extension parameter in an extension negotiation offer, a client informs the peer server + /// of a hint that even if the server doesn't include the "client_no_context_takeover" extension parameter in + /// the corresponding extension negotiation response to the offer, the client is not going to use context takeover. + /// + public bool ClientNoContextTakeover { get; private set; } + + /// + /// By including this extension parameter in an extension negotiation offer, a client prevents the peer server from using context takeover. + /// + public bool ServerNoContextTakeover { get; private set; } + + /// + /// This parameter indicates the base-2 logarithm of the LZ77 sliding window size of the client context. + /// + public int ClientMaxWindowBits { get; private set; } + + /// + /// This parameter indicates the base-2 logarithm of the LZ77 sliding window size of the server context. + /// + public int ServerMaxWindowBits { get; private set; } + + /// + /// The compression level that the client will use to compress the frames. + /// + public CompressionLevel Level { get; private set; } + + /// + /// What minimum data length will trigger the compression. + /// + public int MinimumDataLegthToCompress { get; set; } + + #endregion + + #region Private fields + + /// + /// Cached object to support context takeover. + /// + private BufferPoolMemoryStream compressorOutputStream; + private DeflateStream compressorDeflateStream; + + /// + /// Cached object to support context takeover. + /// + private BufferPoolMemoryStream decompressorInputStream; + private BufferPoolMemoryStream decompressorOutputStream; + private DeflateStream decompressorDeflateStream; + + #endregion + + public PerMessageCompression() + :this(CompressionLevel.Default, false, false, ZlibConstants.WindowBitsMax, ZlibConstants.WindowBitsMax, MinDataLengthToCompressDefault) + { } + + public PerMessageCompression(CompressionLevel level, + bool clientNoContextTakeover, + bool serverNoContextTakeover, + int desiredClientMaxWindowBits, + int desiredServerMaxWindowBits, + int minDatalengthToCompress) + { + this.Level = level; + this.ClientNoContextTakeover = clientNoContextTakeover; + this.ServerNoContextTakeover = serverNoContextTakeover; + this.ClientMaxWindowBits = desiredClientMaxWindowBits; + this.ServerMaxWindowBits = desiredServerMaxWindowBits; + this.MinimumDataLegthToCompress = minDatalengthToCompress; + } + + #region IExtension Implementation + + /// + /// This will start the permessage-deflate negotiation process. + /// + /// + public void AddNegotiation(HTTPRequest request) + { + // The default header value that we will send out minimum. + string headerValue = "permessage-deflate"; + + + // http://tools.ietf.org/html/rfc7692#section-7.1.1.1 + // A client MAY include the "server_no_context_takeover" extension parameter in an extension negotiation offer. This extension parameter has no value. + // By including this extension parameter in an extension negotiation offer, a client prevents the peer server from using context takeover. + // If the peer server doesn't use context takeover, the client doesn't need to reserve memory to retain the LZ77 sliding window between messages. + if (this.ServerNoContextTakeover) + headerValue += "; server_no_context_takeover"; + + + // http://tools.ietf.org/html/rfc7692#section-7.1.1.2 + // A client MAY include the "client_no_context_takeover" extension parameter in an extension negotiation offer. + // This extension parameter has no value. By including this extension parameter in an extension negotiation offer, + // a client informs the peer server of a hint that even if the server doesn't include the "client_no_context_takeover" + // extension parameter in the corresponding extension negotiation response to the offer, the client is not going to use context takeover. + if (this.ClientNoContextTakeover) + headerValue += "; client_no_context_takeover"; + + // http://tools.ietf.org/html/rfc7692#section-7.1.2.1 + // By including this parameter in an extension negotiation offer, a client limits the LZ77 sliding window size that the server + // will use to compress messages.If the peer server uses a small LZ77 sliding window to compress messages, the client can reduce the memory needed for the LZ77 sliding window. + if (this.ServerMaxWindowBits != ZlibConstants.WindowBitsMax) + headerValue += "; server_max_window_bits=" + this.ServerMaxWindowBits.ToString(); + else + // Absence of this parameter in an extension negotiation offer indicates that the client can receive messages compressed using an LZ77 sliding window of up to 32,768 bytes. + this.ServerMaxWindowBits = ZlibConstants.WindowBitsMax; + + // http://tools.ietf.org/html/rfc7692#section-7.1.2.2 + // By including this parameter in an offer, a client informs the peer server that the client supports the "client_max_window_bits" + // extension parameter in an extension negotiation response and, optionally, a hint by attaching a value to the parameter. + if (this.ClientMaxWindowBits != ZlibConstants.WindowBitsMax) + headerValue += "; client_max_window_bits=" + this.ClientMaxWindowBits.ToString(); + else + { + headerValue += "; client_max_window_bits"; + + // If the "client_max_window_bits" extension parameter in an extension negotiation offer has a value, the parameter also informs the + // peer server of a hint that even if the server doesn't include the "client_max_window_bits" extension parameter in the corresponding + // extension negotiation response with a value greater than the one in the extension negotiation offer or if the server doesn't include + // the extension parameter at all, the client is not going to use an LZ77 sliding window size greater than the size specified + // by the value in the extension negotiation offer to compress messages. + this.ClientMaxWindowBits = ZlibConstants.WindowBitsMax; + } + + // Add the new header to the request. + request.AddHeader("Sec-WebSocket-Extensions", headerValue); + } + + public bool ParseNegotiation(HTTPResponse resp) + { + // Search for any returned neogitation offer + var headerValues = resp.GetHeaderValues("Sec-WebSocket-Extensions"); + if (headerValues == null) + return false; + + for (int i = 0; i < headerValues.Count; ++i) + { + // If found, tokenize it + HeaderParser parser = new HeaderParser(headerValues[i]); + + for (int cv = 0; cv < parser.Values.Count; ++cv) + { + HeaderValue value = parser.Values[i]; + + if (!string.IsNullOrEmpty(value.Key) && value.Key.StartsWith("permessage-deflate", StringComparison.OrdinalIgnoreCase)) + { + HTTPManager.Logger.Information("PerMessageCompression", "Enabled with header: " + headerValues[i]); + + HeaderValue option; + if (value.TryGetOption("client_no_context_takeover", out option)) + this.ClientNoContextTakeover = true; + + if (value.TryGetOption("server_no_context_takeover", out option)) + this.ServerNoContextTakeover = true; + + if (value.TryGetOption("client_max_window_bits", out option)) + if (option.HasValue) + { + int windowBits; + if (int.TryParse(option.Value, out windowBits)) + this.ClientMaxWindowBits = windowBits; + } + + if (value.TryGetOption("server_max_window_bits", out option)) + if (option.HasValue) + { + int windowBits; + if (int.TryParse(option.Value, out windowBits)) + this.ServerMaxWindowBits = windowBits; + } + + return true; + } + } + } + + return false; + } + + /// + /// IExtension implementation to set the Rsv1 flag in the header if we are we will want to compress the data + /// in the writer. + /// + public byte GetFrameHeader(WebSocketFrame writer, byte inFlag) + { + // http://tools.ietf.org/html/rfc7692#section-7.2.3.1 + // the RSV1 bit is set only on the first frame. + if ((writer.Type == WebSocketFrameTypes.Binary || writer.Type == WebSocketFrameTypes.Text) && + writer.Data != null && writer.Data.Count >= this.MinimumDataLegthToCompress) + return (byte)(inFlag | 0x40); + else + return inFlag; + } + + /// + /// IExtension implementation to be able to compress the data hold in the writer. + /// + public BufferSegment Encode(WebSocketFrame writer) + { + if (writer.Data == null) + return BufferSegment.Empty; + + // Is compressing enabled for this frame? If so, compress it. + if ((writer.Header & 0x40) != 0) + return Compress(writer.Data); + else + return writer.Data; + } + + /// + /// IExtension implementation to possible decompress the data. + /// + public BufferSegment Decode(byte header, BufferSegment data) + { + // Is the server compressed the data? If so, decompress it. + if ((header & 0x40) != 0) + return Decompress(data); + else + return data; + } + + #endregion + + #region Private Helper Functions + + /// + /// A function to compress and return the data parameter with possible context takeover support (reusing the DeflateStream). + /// + private BufferSegment Compress(BufferSegment data) + { + if (compressorOutputStream == null) + compressorOutputStream = new BufferPoolMemoryStream(); + compressorOutputStream.SetLength(0); + + if (compressorDeflateStream == null) + { + compressorDeflateStream = new DeflateStream(compressorOutputStream, CompressionMode.Compress, this.Level, true, this.ClientMaxWindowBits); + compressorDeflateStream.FlushMode = FlushType.Sync; + } + + BufferSegment result = BufferSegment.Empty; + try + { + compressorDeflateStream.Write(data.Data, data.Offset, data.Count); + compressorDeflateStream.Flush(); + + compressorOutputStream.Position = 0; + + // http://tools.ietf.org/html/rfc7692#section-7.2.1 + // Remove 4 octets (that are 0x00 0x00 0xff 0xff) from the tail end. After this step, the last octet of the compressed data contains (possibly part of) the DEFLATE header bits with the "BTYPE" bits set to 00. + compressorOutputStream.SetLength(compressorOutputStream.Length - 4); + + result = compressorOutputStream.ToBufferSegment(); + } + finally + { + if (this.ClientNoContextTakeover) + { + compressorDeflateStream.Dispose(); + compressorDeflateStream = null; + } + } + + return result; + } + + /// + /// A function to decompress and return the data parameter with possible context takeover support (reusing the DeflateStream). + /// + private BufferSegment Decompress(BufferSegment data) + { + if (decompressorInputStream == null) + decompressorInputStream = new BufferPoolMemoryStream(data.Count + 4); + + decompressorInputStream.Write(data.Data, data.Offset, data.Count); + + // http://tools.ietf.org/html/rfc7692#section-7.2.2 + // Append 4 octets of 0x00 0x00 0xff 0xff to the tail end of the payload of the message. + decompressorInputStream.Write(PerMessageCompression.Trailer, 0, PerMessageCompression.Trailer.Length); + + decompressorInputStream.Position = 0; + + if (decompressorDeflateStream == null) + { + decompressorDeflateStream = new DeflateStream(decompressorInputStream, CompressionMode.Decompress, CompressionLevel.Default, true, this.ServerMaxWindowBits); + decompressorDeflateStream.FlushMode = FlushType.Sync; + } + + if (decompressorOutputStream == null) + decompressorOutputStream = new BufferPoolMemoryStream(); + decompressorOutputStream.SetLength(0); + + byte[] copyBuffer = BufferPool.Get(1024, true); + int readCount; + while ((readCount = decompressorDeflateStream.Read(copyBuffer, 0, copyBuffer.Length)) != 0) + decompressorOutputStream.Write(copyBuffer, 0, readCount); + + BufferPool.Release(copyBuffer); + + decompressorDeflateStream.SetLength(0); + + var result = decompressorOutputStream.ToBufferSegment(); + + if (this.ServerNoContextTakeover) + { + decompressorDeflateStream.Dispose(); + decompressorDeflateStream = null; + } + + return result; + } + + #endregion + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Extensions/PerMessageCompression.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Extensions/PerMessageCompression.cs.meta new file mode 100644 index 000000000..0acf916ba --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Extensions/PerMessageCompression.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4c6122052eb4822438f8d080c0f8574f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames.meta new file mode 100644 index 000000000..9bff9d638 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d07681f5c8c854d42b668e7c6f0a8764 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames/WebSocketFrame.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames/WebSocketFrame.cs new file mode 100644 index 000000000..109bb04eb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames/WebSocketFrame.cs @@ -0,0 +1,356 @@ +#if !BESTHTTP_DISABLE_WEBSOCKET && (!UNITY_WEBGL || UNITY_EDITOR) + +using System; +using BestHTTP.Extensions; +using BestHTTP.PlatformSupport.Memory; +using System.Runtime.CompilerServices; +using BestHTTP.PlatformSupport.IL2CPP; +using BestHTTP.Logger; + +#if BESTHTTP_WITH_BURST +using Unity.Burst; +using Unity.Burst.Intrinsics; +using static Unity.Burst.Intrinsics.X86.Avx2; +using static Unity.Burst.Intrinsics.X86.Sse2; +using static Unity.Burst.Intrinsics.Arm.Neon; +#endif + +namespace BestHTTP.WebSocket.Frames +{ + /// + /// Denotes a binary frame. The "Payload data" is arbitrary binary data whose interpretation is solely up to the application layer. + /// This is the base class of all other frame writers, as all frame can be represented as a byte array. + /// +#if BESTHTTP_WITH_BURST + [BurstCompile] +#endif + [Il2CppEagerStaticClassConstruction] + public struct WebSocketFrame + { + public WebSocketFrameTypes Type { get; private set; } + + public bool IsFinal { get; private set; } + + public byte Header { get; private set; } + + public BufferSegment Data { get; private set; } + + public WebSocket Websocket { get; private set; } + + public bool UseExtensions { get; private set; } + + public WebSocketFrame(WebSocket webSocket, WebSocketFrameTypes type, BufferSegment data) + :this(webSocket, type, data, true) + { } + + public WebSocketFrame(WebSocket webSocket, WebSocketFrameTypes type, BufferSegment data, bool useExtensions) + : this(webSocket, type, data, true, useExtensions) + { + } + + public WebSocketFrame(WebSocket webSocket, WebSocketFrameTypes type, BufferSegment data, bool isFinal, bool useExtensions) + :this(webSocket, type, data, isFinal, useExtensions, copyData: true) + { + + } + + public WebSocketFrame(WebSocket webSocket, WebSocketFrameTypes type, BufferSegment data, bool isFinal, bool useExtensions, bool copyData) + { + this.Type = type; + this.IsFinal = isFinal; + this.Websocket = webSocket; + this.UseExtensions = useExtensions; + + this.Data = data; + + if (this.Data.Data != null) + { + if (copyData) + { + var from = this.Data; + + var buffer = BufferPool.Get(this.Data.Count, true); + this.Data = new BufferSegment(buffer, 0, this.Data.Count); + + Array.Copy(from.Data, (int)from.Offset, this.Data.Data, this.Data.Offset, this.Data.Count); + } + } + else + this.Data = BufferSegment.Empty; + + // First byte: Final Bit + Rsv flags + OpCode + byte finalBit = (byte)(IsFinal ? 0x80 : 0x0); + this.Header = (byte)(finalBit | (byte)Type); + } + + public override string ToString() + { + return string.Format("[WebSocketFrame Type: {0}, IsFinal: {1}, Header: {2:X2}, Data: {3}, UseExtensions: {4}]", + this.Type, this.IsFinal, this.Header, this.Data, this.UseExtensions); + } + + public void WriteTo(Action callback, uint maxFragmentSize, bool mask, LoggingContext context) + { + DoExtensions(); + + if (HTTPManager.Logger.Level <= Logger.Loglevels.All) + HTTPManager.Logger.Verbose("WebSocketFrame", "WriteTo - Frame: " + ToString(), context); + + if ((this.Type == WebSocketFrameTypes.Binary || this.Type == WebSocketFrameTypes.Text) && this.Data.Count > maxFragmentSize) + { + FragmentAndSend(callback, maxFragmentSize, mask, context); + } + else + { + WriteFragment(callback, this.Type, this.Header, this.Data, mask, context); + } + } + + private void DoExtensions() + { + if (this.UseExtensions && this.Websocket != null && this.Websocket.Extensions != null) + { + for (int i = 0; i < this.Websocket.Extensions.Length; ++i) + { + var ext = this.Websocket.Extensions[i]; + if (ext != null) + { + this.Header |= ext.GetFrameHeader(this, this.Header); + BufferSegment newData = ext.Encode(this); + + if (newData != this.Data) + { + BufferPool.Release(this.Data); + + this.Data = newData; + } + } + } + } + } + + private void FragmentAndSend(Action callback, uint maxFragmentSize, bool mask, LoggingContext context) + { + int pos = this.Data.Offset; + int endPos = this.Data.Offset + this.Data.Count; + + while (pos < endPos) + { + int chunkLength = Math.Min((int)maxFragmentSize, endPos - pos); + + WriteFragment(callback: callback, + Type: pos == this.Data.Offset ? this.Type : WebSocketFrameTypes.Continuation, + IsFinal: pos + chunkLength >= this.Data.Count, + Data: this.Data.Slice((int)pos, (int)chunkLength), + mask: mask, + context: context); + + pos += chunkLength; + } + } + + private static void WriteFragment(Action callback, WebSocketFrameTypes Type, bool IsFinal, BufferSegment Data, bool mask, LoggingContext context) + { + // First byte: Final Bit + Rsv flags + OpCode + byte finalBit = (byte)(IsFinal ? 0x80 : 0x0); + byte Header = (byte)(finalBit | (byte)Type); + + WriteFragment(callback, Type, Header, Data, mask, context); + } + + private static unsafe void WriteFragment(Action callback, WebSocketFrameTypes Type, byte Header, BufferSegment Data, bool mask, LoggingContext context) + { + // For the complete documentation for this section see: + // http://tools.ietf.org/html/rfc6455#section-5.2 + + // Header(1) + Len(8) + Mask (4) + byte[] wsHeader = BufferPool.Get(13, true); + int pos = 0; + + // Write the header + wsHeader[pos++] = Header; + + // The length of the "Payload data", in bytes: if 0-125, that is the payload length. If 126, the following 2 bytes interpreted as a + // 16-bit unsigned integer are the payload length. If 127, the following 8 bytes interpreted as a 64-bit unsigned integer (the + // most significant bit MUST be 0) are the payload length. Multibyte length quantities are expressed in network byte order. + if (Data.Count < 126) + { + wsHeader[pos++] = (byte)(0x80 | (byte)Data.Count); + } + else if (Data.Count < UInt16.MaxValue) + { + wsHeader[pos++] = (byte)(0x80 | 126); + var count = (UInt16)Data.Count; + wsHeader[pos++] = (byte)(count >> 8); + wsHeader[pos++] = (byte)(count); + } + else + { + wsHeader[pos++] = (byte)(0x80 | 127); + + var count = (UInt64)Data.Count; + wsHeader[pos++] = (byte)(count >> 56); + wsHeader[pos++] = (byte)(count >> 48); + wsHeader[pos++] = (byte)(count >> 40); + wsHeader[pos++] = (byte)(count >> 32); + wsHeader[pos++] = (byte)(count >> 24); + wsHeader[pos++] = (byte)(count >> 16); + wsHeader[pos++] = (byte)(count >> 8); + wsHeader[pos++] = (byte)(count); + } + + if (Data != BufferSegment.Empty) + { + // All frames sent from the client to the server are masked by a 32-bit value that is contained within the frame. This field is + // present if the mask bit is set to 1 and is absent if the mask bit is set to 0. + // If the data is being sent by the client, the frame(s) MUST be masked. + + uint hash = mask ? (uint)wsHeader.GetHashCode() : 0; + + wsHeader[pos++] = (byte)(hash >> 24); + wsHeader[pos++] = (byte)(hash >> 16); + wsHeader[pos++] = (byte)(hash >> 8); + wsHeader[pos++] = (byte)(hash); + + // Do the masking. + if (mask) + { + fixed (byte* pData = Data.Data/*, pmask = &wsHeader[pos - 4]*/) + { + byte* alignedMask = stackalloc byte[4]; + alignedMask[0] = wsHeader[pos - 4]; + alignedMask[1] = wsHeader[pos - 3]; + alignedMask[2] = wsHeader[pos - 2]; + alignedMask[3] = wsHeader[pos - 1]; + + ApplyMask(pData, Data.Offset, Data.Count, alignedMask); + } + } + } + else + { + wsHeader[pos++] = 0; + wsHeader[pos++] = 0; + wsHeader[pos++] = 0; + wsHeader[pos++] = 0; + } + + var header = wsHeader.AsBuffer(pos); + + if (HTTPManager.Logger.Level <= Logger.Loglevels.All) + HTTPManager.Logger.Verbose("WebSocketFrame", string.Format("WriteFragment - Header: {0}, data chunk: {1}", header.ToString(), Data.ToString()), context); + + callback(header, Data); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#if BESTHTTP_WITH_BURST + [BurstCompile(CompileSynchronously = true)] +#endif + public unsafe static void ApplyMask( +#if BESTHTTP_WITH_BURST + [NoAlias] +#endif + byte* pData, + int DataOffset, + int DataCount, +#if BESTHTTP_WITH_BURST + [NoAlias] +#endif + byte* pmask + ) + { + int targetOffset = DataOffset + DataCount; + uint umask = *(uint*)pmask; + +#if BESTHTTP_WITH_BURST + if (targetOffset - DataOffset >= 32) + { + if (IsAvx2Supported) + { + v256 mask = new v256(umask); + v256 ldstrMask = new v256((byte)0xFF); + + while (targetOffset - DataOffset >= 32) + { + // load data + v256 data = mm256_maskload_epi32(pData + DataOffset, ldstrMask); + + // xor + v256 result = mm256_xor_si256(data, mask); + + // store + mm256_maskstore_epi32(pData + DataOffset, ldstrMask, result); + + // advance + DataOffset += 32; + } + } + } + + if (targetOffset - DataOffset >= 16) + { + v128 mask = new v128(umask); + + if (IsSse2Supported) + { + while (targetOffset - DataOffset >= 16) + { + // load data + v128 data = loadu_si128(pData + DataOffset); + + // xor + var result = xor_si128(data, mask); + + // store + storeu_si128(pData + DataOffset, result); + + // advance + DataOffset += 16; + } + } + else if (IsNeonSupported) + { + while (targetOffset - DataOffset >= 16) + { + // load data + v128 data = vld1q_u8(pData + DataOffset); + + // xor + v128 result = veorq_u8(data, mask); + + // store + vst1q_u8(pData + DataOffset, result); + + // advance + DataOffset += 16; + } + } + } +#endif + + // fallback to calculate by reinterpret-casting to ulong + if (targetOffset - DataOffset >= 8) + { + ulong* ulpData = (ulong*)(pData + DataOffset); + + // duplicate the mask to fill up a whole ulong. + ulong ulmask = (((ulong)umask << 32) | umask); + + while (targetOffset - DataOffset >= 8) + { + *ulpData = *ulpData ^ ulmask; + + ulpData++; + DataOffset += 8; + } + } + + // process remaining bytes (0..7) + for (int i = DataOffset; i < targetOffset; ++i) + pData[i] = (byte)(pData[i] ^ pmask[(i - DataOffset) % 4]); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames/WebSocketFrame.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames/WebSocketFrame.cs.meta new file mode 100644 index 000000000..dcaea1660 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames/WebSocketFrame.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2f674a60005f409438aa505311bf2e7a +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames/WebSocketFrameReader.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames/WebSocketFrameReader.cs new file mode 100644 index 000000000..550ce95bd --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames/WebSocketFrameReader.cs @@ -0,0 +1,220 @@ +#if !BESTHTTP_DISABLE_WEBSOCKET && (!UNITY_WEBGL || UNITY_EDITOR) + +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.Extensions; +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP.WebSocket.Frames +{ + /// + /// Represents an incoming WebSocket Frame. + /// + public struct WebSocketFrameReader + { +#region Properties + + public byte Header { get; private set; } + + /// + /// True if it's a final Frame in a sequence, or the only one. + /// + public bool IsFinal { get; private set; } + + /// + /// The type of the Frame. + /// + public WebSocketFrameTypes Type { get; private set; } + + /// + /// The decoded array of bytes. + /// + public BufferSegment Data { get; private set; } + + /// + /// Textual representation of the received Data. + /// + public string DataAsText { get; private set; } + + #endregion + + #region Internal & Private Functions + + internal unsafe void Read(Stream stream) + { + // For the complete documentation for this section see: + // http://tools.ietf.org/html/rfc6455#section-5.2 + + this.Header = ReadByte(stream); + + // The first byte is the Final Bit and the type of the frame + IsFinal = (this.Header & 0x80) != 0; + Type = (WebSocketFrameTypes)(this.Header & 0xF); + + byte maskAndLength = ReadByte(stream); + + // The second byte is the Mask Bit and the length of the payload data + if ((maskAndLength & 0x80) != 0) + throw new NotImplementedException($"Payload from the server is masked!"); + + // if 0-125, that is the payload length. + var length = (UInt64)(maskAndLength & 127); + + // If 126, the following 2 bytes interpreted as a 16-bit unsigned integer are the payload length. + if (length == 126) + { + byte[] rawLen = BufferPool.Get(2, true); + + stream.ReadBuffer(rawLen, 2); + + if (BitConverter.IsLittleEndian) + Array.Reverse(rawLen, 0, 2); + + length = (UInt64)BitConverter.ToUInt16(rawLen, 0); + + BufferPool.Release(rawLen); + } + else if (length == 127) + { + // If 127, the following 8 bytes interpreted as a 64-bit unsigned integer (the + // most significant bit MUST be 0) are the payload length. + + byte[] rawLen = BufferPool.Get(8, true); + + stream.ReadBuffer(rawLen, 8); + + if (BitConverter.IsLittleEndian) + Array.Reverse(rawLen, 0, 8); + + length = (UInt64)BitConverter.ToUInt64(rawLen, 0); + + BufferPool.Release(rawLen); + } + + if (length == 0L) + { + Data = BufferSegment.Empty; + return; + } + + var buffer = BufferPool.Get((long)length, true); + + uint readLength = 0; + + try + { + do + { + int read = stream.Read(buffer, (int)readLength, (int)(length - readLength)); + + if (read <= 0) + throw ExceptionHelper.ServerClosedTCPStream(); + + readLength += (uint)read; + } while (readLength < length); + } + catch + { + BufferPool.Release(buffer); + throw; + } + this.Data = new BufferSegment(buffer, 0, (int)length); + } + + private byte ReadByte(Stream stream) + { + int read = stream.ReadByte(); + + if (read < 0) + throw ExceptionHelper.ServerClosedTCPStream(); + + return (byte)read; + } + +#endregion + +#region Public Functions + + /// + /// Assembles all fragments into a final frame. Call this on the last fragment of a frame. + /// + /// The list of previously downloaded and parsed fragments of the frame + public void Assemble(List fragments) + { + // this way the following algorithms will handle this fragment's data too + fragments.Add(this); + + UInt64 finalLength = 0; + for (int i = 0; i < fragments.Count; ++i) + finalLength += (UInt64)fragments[i].Data.Count; + + byte[] buffer = BufferPool.Get((long)finalLength, true); + UInt64 pos = 0; + for (int i = 0; i < fragments.Count; ++i) + { + if (fragments[i].Data.Count > 0) + Array.Copy(fragments[i].Data.Data, fragments[i].Data.Offset, buffer, (int)pos, (int)fragments[i].Data.Count); + fragments[i].ReleaseData(); + + pos += (UInt64)fragments[i].Data.Count; + } + + // All fragments of a message are of the same type, as set by the first fragment's opcode. + this.Type = fragments[0].Type; + + // Reserver flags may be contained only in the first fragment + + this.Header = fragments[0].Header; + this.Data = new BufferSegment(buffer, 0, (int)finalLength); + } + + /// + /// This function will decode the received data incrementally with the associated websocket's extensions. + /// + public void DecodeWithExtensions(WebSocket webSocket) + { + if (webSocket.Extensions != null) + for (int i = 0; i < webSocket.Extensions.Length; ++i) + { + var ext = webSocket.Extensions[i]; + if (ext != null) + { + var newData = ext.Decode(this.Header, this.Data); + if (this.Data != newData) + { + this.ReleaseData(); + this.Data = newData; + } + } + } + + if (this.Type == WebSocketFrameTypes.Text) + { + if (this.Data != BufferSegment.Empty) + { + this.DataAsText = System.Text.Encoding.UTF8.GetString(this.Data.Data, this.Data.Offset, this.Data.Count); + this.ReleaseData(); + } + else + HTTPManager.Logger.Warning("WebSocketFrameReader", "Empty Text frame received!"); + } + } + + public void ReleaseData() + { + BufferPool.Release(this.Data); + this.Data = BufferSegment.Empty; + } + + public override string ToString() + { + return string.Format("[{0} Header: {1:X2}, IsFinal: {2}, Data: {3}]", this.Type.ToString(), this.Header, this.IsFinal, this.Data); + } + +#endregion + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames/WebSocketFrameReader.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames/WebSocketFrameReader.cs.meta new file mode 100644 index 000000000..652a61d65 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames/WebSocketFrameReader.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 551161b05e7dd8c4d85aadf44c841056 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames/WebSocketFrameTypes.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames/WebSocketFrameTypes.cs new file mode 100644 index 000000000..168d1f490 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames/WebSocketFrameTypes.cs @@ -0,0 +1,48 @@ +#if !BESTHTTP_DISABLE_WEBSOCKET && (!UNITY_WEBGL || UNITY_EDITOR) + +namespace BestHTTP.WebSocket.Frames +{ + public enum WebSocketFrameTypes : byte + { + /// + /// A fragmented message's first frame's contain the type of the message(binary or text), all consecutive frame of that message must be a Continuation frame. + /// Last of these frame's Fin bit must be 1. + /// + /// For a text message sent as three fragments, the first fragment would have an opcode of 0x1 (text) and a FIN bit clear, + /// the second fragment would have an opcode of 0x0 (Continuation) and a FIN bit clear, + /// and the third fragment would have an opcode of 0x0 (Continuation) and a FIN bit that is set. + Continuation = 0x0, + Text = 0x1, + Binary = 0x2, + //Reserved1 = 0x3, + //Reserved2 = 0x4, + //Reserved3 = 0x5, + //Reserved4 = 0x6, + //Reserved5 = 0x7, + + /// + /// The Close frame MAY contain a body (the "Application data" portion of the frame) that indicates a reason for closing, + /// such as an endpoint shutting down, an endpoint having received a frame too large, or an endpoint having received a frame that + /// does not conform to the format expected by the endpoint. + /// As the data is not guaranteed to be human readable, clients MUST NOT show it to end users. + /// + ConnectionClose = 0x8, + + /// + /// The Ping frame contains an opcode of 0x9. A Ping frame MAY include "Application data". + /// + Ping = 0x9, + + /// + /// A Pong frame sent in response to a Ping frame must have identical "Application data" as found in the message body of the Ping frame being replied to. + /// + Pong = 0xA, + //Reserved6 = 0xB, + //Reserved7 = 0xC, + //Reserved8 = 0xD, + //Reserved9 = 0xE, + //Reserved10 = 0xF, + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames/WebSocketFrameTypes.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames/WebSocketFrameTypes.cs.meta new file mode 100644 index 000000000..b27424475 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Frames/WebSocketFrameTypes.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 111b231c861908546b2c5acfa6d69bae +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations.meta new file mode 100644 index 000000000..a2ad27ecb --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b2ac4a2034710f14c833fe68b7337340 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/OverHTTP1.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/OverHTTP1.cs new file mode 100644 index 000000000..db3b861c9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/OverHTTP1.cs @@ -0,0 +1,352 @@ +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_WEBSOCKET +using System; + +using BestHTTP.Connections; +using BestHTTP.Extensions; +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.WebSocket.Frames; + +namespace BestHTTP.WebSocket +{ + internal sealed class OverHTTP1 : WebSocketBaseImplementation + { + public override bool IsOpen => webSocket != null && !webSocket.IsClosed; + + public override int BufferedAmount => webSocket.BufferedAmount; + + public override int Latency => this.webSocket.Latency; + public override DateTime LastMessageReceived => this.webSocket.lastMessage; + + /// + /// Indicates whether we sent out the connection request to the server. + /// + private bool requestSent; + + /// + /// The internal WebSocketResponse object + /// + private WebSocketResponse webSocket; + + public OverHTTP1(WebSocket parent, Uri uri, string origin, string protocol) : base(parent, uri, origin, protocol) + { + string scheme = HTTPProtocolFactory.IsSecureProtocol(uri) ? "wss" : "ws"; + int port = uri.Port != -1 ? uri.Port : (scheme.Equals("wss", StringComparison.OrdinalIgnoreCase) ? 443 : 80); + + // Somehow if i use the UriBuilder it's not the same as if the uri is constructed from a string... + //uri = new UriBuilder(uri.Scheme, uri.Host, uri.Scheme.Equals("wss", StringComparison.OrdinalIgnoreCase) ? 443 : 80, uri.PathAndQuery).Uri; + base.Uri = new Uri(scheme + "://" + uri.Host + ":" + port + uri.GetRequestPathAndQueryURL()); + } + + protected override void CreateInternalRequest() + { + if (this._internalRequest != null) + return; + + this._internalRequest = new HTTPRequest(base.Uri, OnInternalRequestCallback); + + this._internalRequest.Context.Add("WebSocket", this.Parent.Context); + + // Called when the regular GET request is successfully upgraded to WebSocket + this._internalRequest.OnUpgraded = OnInternalRequestUpgraded; + + //http://tools.ietf.org/html/rfc6455#section-4 + + // The request MUST contain an |Upgrade| header field whose value MUST include the "websocket" keyword. + this._internalRequest.SetHeader("Upgrade", "websocket"); + + // The request MUST contain a |Connection| header field whose value MUST include the "Upgrade" token. + this._internalRequest.SetHeader("Connection", "Upgrade"); + + // The request MUST include a header field with the name |Sec-WebSocket-Key|. The value of this header field MUST be a nonce consisting of a + // randomly selected 16-byte value that has been base64-encoded (see Section 4 of [RFC4648]). The nonce MUST be selected randomly for each connection. + this._internalRequest.SetHeader("Sec-WebSocket-Key", WebSocket.GetSecKey(new object[] { this, InternalRequest, base.Uri, new object() })); + + // The request MUST include a header field with the name |Origin| [RFC6454] if the request is coming from a browser client. + // If the connection is from a non-browser client, the request MAY include this header field if the semantics of that client match the use-case described here for browser clients. + // More on Origin Considerations: http://tools.ietf.org/html/rfc6455#section-10.2 + if (!string.IsNullOrEmpty(Origin)) + this._internalRequest.SetHeader("Origin", Origin); + + // The request MUST include a header field with the name |Sec-WebSocket-Version|. The value of this header field MUST be 13. + this._internalRequest.SetHeader("Sec-WebSocket-Version", "13"); + + if (!string.IsNullOrEmpty(Protocol)) + this._internalRequest.SetHeader("Sec-WebSocket-Protocol", Protocol); + + // Disable caching + this._internalRequest.SetHeader("Cache-Control", "no-cache"); + this._internalRequest.SetHeader("Pragma", "no-cache"); + +#if !BESTHTTP_DISABLE_CACHING + this._internalRequest.DisableCache = true; +#endif + +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + this._internalRequest.Proxy = this.Parent.GetProxy(this.Uri); +#endif + + if (this.Parent.OnInternalRequestCreated != null) + { + try + { + this.Parent.OnInternalRequestCreated(this.Parent, this._internalRequest); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("OverHTTP1", "CreateInternalRequest", ex, this.Parent.Context); + } + } + } + + public override void StartClose(UInt16 code, string message) + { + if (this.State == WebSocketStates.Connecting) + { + if (this.InternalRequest != null) + this.InternalRequest.Abort(); + + this.State = WebSocketStates.Closed; + if (this.Parent.OnClosed != null) + this.Parent.OnClosed(this.Parent, (ushort)WebSocketStausCodes.NoStatusCode, string.Empty); + } + else + { + this.State = WebSocketStates.Closing; + webSocket.Close(code, message); + } + } + + public override void StartOpen() + { + if (requestSent) + throw new InvalidOperationException("Open already called! You can't reuse this WebSocket instance!"); + + if (this.Parent.Extensions != null) + { + try + { + for (int i = 0; i < this.Parent.Extensions.Length; ++i) + { + var ext = this.Parent.Extensions[i]; + if (ext != null) + ext.AddNegotiation(InternalRequest); + } + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("OverHTTP1", "Open", ex, this.Parent.Context); + } + } + + InternalRequest.Send(); + requestSent = true; + this.State = WebSocketStates.Connecting; + } + + private void OnInternalRequestCallback(HTTPRequest req, HTTPResponse resp) + { + string reason = string.Empty; + + switch (req.State) + { + case HTTPRequestStates.Finished: + HTTPManager.Logger.Information("OverHTTP1", string.Format("Request finished. Status Code: {0} Message: {1}", resp.StatusCode.ToString(), resp.Message), this.Parent.Context); + + if (resp.StatusCode == 101) + { + // The request upgraded successfully. + return; + } + else + reason = string.Format("Request Finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}", + resp.StatusCode, + resp.Message, + resp.DataAsText); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + reason = "Request Finished with Error! " + (req.Exception != null ? ("Exception: " + req.Exception.Message + req.Exception.StackTrace) : string.Empty); + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + reason = "Request Aborted!"; + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + reason = "Connection Timed Out!"; + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + reason = "Processing the request Timed Out!"; + break; + + default: + return; + } + + if (this.State != WebSocketStates.Connecting || !string.IsNullOrEmpty(reason)) + { + if (this.Parent.OnError != null) + this.Parent.OnError(this.Parent, reason); + else if (!HTTPManager.IsQuitting) + HTTPManager.Logger.Error("OverHTTP1", reason, this.Parent.Context); + } + else if (this.Parent.OnClosed != null) + this.Parent.OnClosed(this.Parent, (ushort)WebSocketStausCodes.NormalClosure, "Closed while opening"); + + this.State = WebSocketStates.Closed; + + if (!req.IsKeepAlive && resp != null && resp is WebSocketResponse) + (resp as WebSocketResponse).CloseStream(); + } + + private void OnInternalRequestUpgraded(HTTPRequest req, HTTPResponse resp) + { + HTTPManager.Logger.Information("OverHTTP1", "Internal request upgraded!", this.Parent.Context); + + webSocket = resp as WebSocketResponse; + + if (webSocket == null) + { + if (this.Parent.OnError != null) + { + string reason = string.Empty; + if (req.Exception != null) + reason = req.Exception.Message + " " + req.Exception.StackTrace; + + this.Parent.OnError(this.Parent, reason); + } + + this.State = WebSocketStates.Closed; + return; + } + + // If Close called while we connected + if (this.State == WebSocketStates.Closed) + { + webSocket.CloseStream(); + return; + } + + if (!resp.HasHeader("sec-websocket-accept")) + { + this.State = WebSocketStates.Closed; + webSocket.CloseStream(); + + if (this.Parent.OnError != null) + this.Parent.OnError(this.Parent, "No Sec-Websocket-Accept header is sent by the server!"); + return; + } + + webSocket.WebSocket = this.Parent; + + if (this.Parent.Extensions != null) + { + for (int i = 0; i < this.Parent.Extensions.Length; ++i) + { + var ext = this.Parent.Extensions[i]; + + try + { + if (ext != null && !ext.ParseNegotiation(webSocket)) + this.Parent.Extensions[i] = null; // Keep extensions only that successfully negotiated + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("OverHTTP1", "ParseNegotiation", ex, this.Parent.Context); + + // Do not try to use a defective extension in the future + this.Parent.Extensions[i] = null; + } + } + } + + this.State = WebSocketStates.Open; + if (this.Parent.OnOpen != null) + { + try + { + this.Parent.OnOpen(this.Parent); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("OverHTTP1", "OnOpen", ex, this.Parent.Context); + } + } + + webSocket.OnText = (ws, msg) => + { + if (this.Parent.OnMessage != null) + this.Parent.OnMessage(this.Parent, msg); + }; + + webSocket.OnBinaryNoAlloc = (ws, frame) => + { + if (this.Parent.OnBinary != null) + { + var bin = new byte[frame.Count]; + Array.Copy(frame.Data, 0, bin, 0, frame.Count); + this.Parent.OnBinary(this.Parent, bin); + } + + if (this.Parent.OnBinaryNoAlloc != null) + this.Parent.OnBinaryNoAlloc(this.Parent, frame); + }; + + webSocket.OnClosed = (ws, code, msg) => + { + this.State = WebSocketStates.Closed; + + if (this.Parent.OnClosed != null) + this.Parent.OnClosed(this.Parent, code, msg); + }; + + if (this.Parent.OnIncompleteFrame != null) + webSocket.OnIncompleteFrame = (ws, frame) => + { + if (this.Parent.OnIncompleteFrame != null) + this.Parent.OnIncompleteFrame(this.Parent, frame); + }; + + if (this.Parent.StartPingThread) + webSocket.StartPinging(Math.Max(this.Parent.PingFrequency, 100)); + + webSocket.StartReceive(); + } + + public override void Send(string message) + { + webSocket.Send(message); + } + + public override void Send(byte[] buffer) + { + webSocket.Send(buffer); + } + + public override void Send(byte[] buffer, ulong offset, ulong count) + { + webSocket.Send(buffer, offset, count); + } + + public override void SendAsBinary(BufferSegment data) + { + webSocket.Send(WebSocketFrameTypes.Binary, data); + } + + public override void SendAsText(BufferSegment data) + { + webSocket.Send(WebSocketFrameTypes.Text, data); + } + + public override void Send(WebSocketFrame frame) + { + webSocket.Send(frame); + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/OverHTTP1.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/OverHTTP1.cs.meta new file mode 100644 index 000000000..3413aa7ad --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/OverHTTP1.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 042433932184b3747ab2c9857b763ef7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/OverHTTP2.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/OverHTTP2.cs new file mode 100644 index 000000000..7174eaa99 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/OverHTTP2.cs @@ -0,0 +1,728 @@ +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_ALTERNATE_SSL && !BESTHTTP_DISABLE_HTTP2 && !BESTHTTP_DISABLE_WEBSOCKET +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Text; + +using BestHTTP.Connections.HTTP2; +using BestHTTP.Extensions; +using BestHTTP.Logger; +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.WebSocket.Frames; + +namespace BestHTTP.WebSocket +{ + /// + /// Implements RFC 8441 (https://tools.ietf.org/html/rfc8441) to use Websocket over HTTP/2 + /// + public sealed class OverHTTP2 : WebSocketBaseImplementation, IHeartbeat + { + public override int BufferedAmount { get => this._bufferedAmount; } + internal volatile int _bufferedAmount; + + public override bool IsOpen => this.State == WebSocketStates.Open; + + public override int Latency { get { return this.Parent.StartPingThread ? base.Latency : (int)this.http2Handler.Latency; } } + + private List IncompleteFrames = new List(); + private HTTP2Handler http2Handler; + + /// + /// True if we sent out a Close message to the server + /// + internal volatile bool closeSent; + + /// + /// When we sent out the last ping. + /// + private DateTime lastPing = DateTime.MinValue; + + private bool waitingForPong = false; + + /// + /// A circular buffer to store the last N rtt times calculated by the pong messages. + /// + private CircularBuffer rtts = new CircularBuffer(WebSocketResponse.RTTBufferCapacity); + + private PeekableIncomingSegmentStream incomingSegmentStream = new PeekableIncomingSegmentStream(); + private ConcurrentQueue CompletedFrames = new ConcurrentQueue(); + internal ConcurrentQueue frames = new ConcurrentQueue(); + + public OverHTTP2(WebSocket parent, Uri uri, string origin, string protocol) : base(parent, uri, origin, protocol) + { + // use https scheme so it will be served over HTTP/2. Thre request's Tag will be set to this class' instance so HTTP2Handler will know it has to create a HTTP2WebSocketStream instance to + // process the request. + string scheme = "https"; + int port = uri.Port != -1 ? uri.Port : 443; + + base.Uri = new Uri(scheme + "://" + uri.Host + ":" + port + uri.GetRequestPathAndQueryURL()); + } + + internal void SetHTTP2Handler(HTTP2Handler handler) => this.http2Handler = handler; + + protected override void CreateInternalRequest() + { + HTTPManager.Logger.Verbose("OverHTTP2", "CreateInternalRequest", this.Parent.Context); + + base._internalRequest = new HTTPRequest(base.Uri, HTTPMethods.Connect, OnInternalRequestCallback); + base._internalRequest.Context.Add("WebSocket", this.Parent.Context); + + base._internalRequest.SetHeader(":protocol", "websocket"); + + // The request MUST include a header field with the name |Sec-WebSocket-Key|. The value of this header field MUST be a nonce consisting of a + // randomly selected 16-byte value that has been base64-encoded (see Section 4 of [RFC4648]). The nonce MUST be selected randomly for each connection. + base._internalRequest.SetHeader("sec-webSocket-key", WebSocket.GetSecKey(new object[] { this, InternalRequest, base.Uri, new object() })); + + // The request MUST include a header field with the name |Origin| [RFC6454] if the request is coming from a browser client. + // If the connection is from a non-browser client, the request MAY include this header field if the semantics of that client match the use-case described here for browser clients. + // More on Origin Considerations: http://tools.ietf.org/html/rfc6455#section-10.2 + if (!string.IsNullOrEmpty(base.Origin)) + base._internalRequest.SetHeader("origin", base.Origin); + + // The request MUST include a header field with the name |Sec-WebSocket-Version|. The value of this header field MUST be 13. + base._internalRequest.SetHeader("sec-webSocket-version", "13"); + + if (!string.IsNullOrEmpty(base.Protocol)) + base._internalRequest.SetHeader("sec-webSocket-protocol", base.Protocol); + + // Disable caching + base._internalRequest.SetHeader("cache-control", "no-cache"); + base._internalRequest.SetHeader("pragma", "no-cache"); + +#if !BESTHTTP_DISABLE_CACHING + base._internalRequest.DisableCache = true; +#endif + + + base._internalRequest.OnHeadersReceived += OnHeadersReceived; + + // set a fake upload stream, so HPACKEncoder will not set the END_STREAM flag + base._internalRequest.UploadStream = new MemoryStream(0); + base._internalRequest.UseUploadStreamLength = false; + + this.LastMessageReceived = DateTime.Now; + base._internalRequest.Tag = this; + + if (this.Parent.OnInternalRequestCreated != null) + { + try + { + this.Parent.OnInternalRequestCreated(this.Parent, base._internalRequest); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("OverHTTP2", "CreateInternalRequest", ex, this.Parent.Context); + } + } + } + + private void OnHeadersReceived(HTTPRequest req, HTTPResponse resp, Dictionary> newHeaders) + { + HTTPManager.Logger.Verbose("OverHTTP2", $"OnHeadersReceived - StatusCode: {resp?.StatusCode}", this.Parent.Context); + + if (resp != null && resp.StatusCode == 200) + { + if (this.Parent.Extensions != null) + { + for (int i = 0; i < this.Parent.Extensions.Length; ++i) + { + var ext = this.Parent.Extensions[i]; + + try + { + if (ext != null && !ext.ParseNegotiation(resp)) + this.Parent.Extensions[i] = null; // Keep extensions only that successfully negotiated + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("OverHTTP2", "ParseNegotiation", ex, this.Parent.Context); + + // Do not try to use a defective extension in the future + this.Parent.Extensions[i] = null; + } + } + } + + this.State = WebSocketStates.Open; + + if (this.Parent.OnOpen != null) + { + try + { + this.Parent.OnOpen(this.Parent); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("OverHTTP2", "OnOpen", ex, this.Parent.Context); + } + } + + if (this.Parent.StartPingThread) + { + this.LastMessageReceived = DateTime.Now; + SendPing(); + } + } + else + req.Abort(); + } + + private static bool CanReadFullFrame(PeekableIncomingSegmentStream stream) + { + if (stream.Length < 2) + return false; + + stream.BeginPeek(); + + if (stream.PeekByte() == -1) + return false; + + int maskAndLength = stream.PeekByte(); + if (maskAndLength == -1) + return false; + + // The second byte is the Mask Bit and the length of the payload data + var HasMask = (maskAndLength & 0x80) != 0; + + // if 0-125, that is the payload length. + var Length = (UInt64)(maskAndLength & 127); + + // If 126, the following 2 bytes interpreted as a 16-bit unsigned integer are the payload length. + if (Length == 126) + { + byte[] rawLen = BufferPool.Get(2, true); + + for (int i = 0; i < 2; i++) + { + int data = stream.PeekByte(); + if (data < 0) + return false; + + rawLen[i] = (byte)data; + } + + if (BitConverter.IsLittleEndian) + Array.Reverse(rawLen, 0, 2); + + Length = (UInt64)BitConverter.ToUInt16(rawLen, 0); + + BufferPool.Release(rawLen); + } + else if (Length == 127) + { + // If 127, the following 8 bytes interpreted as a 64-bit unsigned integer (the + // most significant bit MUST be 0) are the payload length. + + byte[] rawLen = BufferPool.Get(8, true); + + for (int i = 0; i < 8; i++) + { + int data = stream.PeekByte(); + if (data < 0) + return false; + + rawLen[i] = (byte)data; + } + + if (BitConverter.IsLittleEndian) + Array.Reverse(rawLen, 0, 8); + + Length = (UInt64)BitConverter.ToUInt64(rawLen, 0); + + BufferPool.Release(rawLen); + } + + // Header + Mask&Length + Length += 2; + + // 4 bytes for Mask if present + if (HasMask) + Length += 4; + + return stream.Length >= (long)Length; + } + + internal void OnReadThread(BufferSegment buffer) + { + this.LastMessageReceived = DateTime.Now; + + this.incomingSegmentStream.Write(buffer); + + while (CanReadFullFrame(this.incomingSegmentStream)) + { + WebSocketFrameReader frame = new WebSocketFrameReader(); + frame.Read(this.incomingSegmentStream); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Verbose("OverHTTP2", "Frame received: " + frame.ToString(), this.Parent.Context); + + if (!frame.IsFinal) + { + if (this.Parent.OnIncompleteFrame == null) + IncompleteFrames.Add(frame); + else + CompletedFrames.Enqueue(frame); + continue; + } + + switch (frame.Type) + { + // For a complete documentation and rules on fragmentation see http://tools.ietf.org/html/rfc6455#section-5.4 + // A fragmented Frame's last fragment's opcode is 0 (Continuation) and the FIN bit is set to 1. + case WebSocketFrameTypes.Continuation: + // Do an assemble pass only if OnFragment is not set. Otherwise put it in the CompletedFrames, we will handle it in the HandleEvent phase. + if (this.Parent.OnIncompleteFrame == null) + { + frame.Assemble(IncompleteFrames); + + // Remove all incomplete frames + IncompleteFrames.Clear(); + + // Control frames themselves MUST NOT be fragmented. So, its a normal text or binary frame. Go, handle it as usual. + goto case WebSocketFrameTypes.Binary; + } + else + { + CompletedFrames.Enqueue(frame); + } + break; + + case WebSocketFrameTypes.Text: + case WebSocketFrameTypes.Binary: + frame.DecodeWithExtensions(this.Parent); + CompletedFrames.Enqueue(frame); + break; + + // Upon receipt of a Ping frame, an endpoint MUST send a Pong frame in response, unless it already received a Close frame. + case WebSocketFrameTypes.Ping: + if (!closeSent && this.State != WebSocketStates.Closed) + { + // copy data set to true here, as the frame's data is released back to the pool after the switch + Send(new WebSocketFrame(this.Parent, WebSocketFrameTypes.Pong, frame.Data, true, true, true)); + } + break; + + case WebSocketFrameTypes.Pong: + // https://tools.ietf.org/html/rfc6455#section-5.5 + // A Pong frame MAY be sent unsolicited. This serves as a + // unidirectional heartbeat. A response to an unsolicited Pong frame is + // not expected. + if (!waitingForPong) + break; + + waitingForPong = false; + // the difference between the current time and the time when the ping message is sent + TimeSpan diff = DateTime.Now - lastPing; + + // add it to the buffer + this.rtts.Add((int)diff.TotalMilliseconds); + + // and calculate the new latency + base.Latency = CalculateLatency(); + break; + + // If an endpoint receives a Close frame and did not previously send a Close frame, the endpoint MUST send a Close frame in response. + case WebSocketFrameTypes.ConnectionClose: + HTTPManager.Logger.Information("OverHTTP2", "ConnectionClose packet received!", this.Parent.Context); + + CompletedFrames.Enqueue(frame); + + if (!closeSent) + Send(new WebSocketFrame(this.Parent, WebSocketFrameTypes.ConnectionClose, BufferSegment.Empty)); + + this.State = WebSocketStates.Closed; + break; + } + } + } + + private void OnInternalRequestCallback(HTTPRequest req, HTTPResponse resp) + { + HTTPManager.Logger.Verbose("OverHTTP2", $"OnInternalRequestCallback - this.State: {this.State}", this.Parent.Context); + + // If it's already closed, all events are called too. + if (this.State == WebSocketStates.Closed) + return; + + if (this.State == WebSocketStates.Connecting && HTTPManager.HTTP2Settings.WebSocketOverHTTP2Settings.EnableImplementationFallback) + { + this.Parent.FallbackToHTTP1(); + return; + } + + string reason = string.Empty; + + switch (req.State) + { + case HTTPRequestStates.Finished: + HTTPManager.Logger.Information("OverHTTP2", string.Format("Request finished. Status Code: {0} Message: {1}", resp.StatusCode.ToString(), resp.Message), this.Parent.Context); + + if (resp.StatusCode == 101) + { + // The request upgraded successfully. + return; + } + else + reason = string.Format("Request Finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}", + resp.StatusCode, + resp.Message, + resp.DataAsText); + break; + + // The request finished with an unexpected error. The request's Exception property may contain more info about the error. + case HTTPRequestStates.Error: + reason = "Request Finished with Error! " + (req.Exception != null ? ("Exception: " + req.Exception.Message + req.Exception.StackTrace) : string.Empty); + break; + + // The request aborted, initiated by the user. + case HTTPRequestStates.Aborted: + reason = "Request Aborted!"; + break; + + // Connecting to the server is timed out. + case HTTPRequestStates.ConnectionTimedOut: + reason = "Connection Timed Out!"; + break; + + // The request didn't finished in the given time. + case HTTPRequestStates.TimedOut: + reason = "Processing the request Timed Out!"; + break; + + default: + return; + } + + if (this.State != WebSocketStates.Connecting || !string.IsNullOrEmpty(reason)) + { + if (this.Parent.OnError != null) + { + try + { + this.Parent.OnError(this.Parent, reason); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("OverHTTP2", "OnError", ex, this.Parent.Context); + } + } + else if (!HTTPManager.IsQuitting) + HTTPManager.Logger.Error("OverHTTP2", reason, this.Parent.Context); + } + else if (this.Parent.OnClosed != null) + { + try + { + this.Parent.OnClosed(this.Parent, (ushort)WebSocketStausCodes.NormalClosure, "Closed while opening"); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("OverHTTP2", "OnClosed", ex, this.Parent.Context); + } + } + + this.State = WebSocketStates.Closed; + } + + public override void StartOpen() + { + HTTPManager.Logger.Verbose("OverHTTP2", "StartOpen", this.Parent.Context); + + if (this.Parent.Extensions != null) + { + try + { + for (int i = 0; i < this.Parent.Extensions.Length; ++i) + { + var ext = this.Parent.Extensions[i]; + if (ext != null) + ext.AddNegotiation(base.InternalRequest); + } + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("OverHTTP2", "Open", ex, this.Parent.Context); + } + } + + base.InternalRequest.Send(); + HTTPManager.Heartbeats.Subscribe(this); + + this.State = WebSocketStates.Connecting; + } + + public override void StartClose(ushort code, string message) + { + HTTPManager.Logger.Verbose("OverHTTP2", "StartClose", this.Parent.Context); + + if (this.State == WebSocketStates.Connecting) + { + if (this.InternalRequest != null) + this.InternalRequest.Abort(); + + this.State = WebSocketStates.Closed; + if (this.Parent.OnClosed != null) + this.Parent.OnClosed(this.Parent, code, message); + } + else + { + Send(new WebSocketFrame(this.Parent, WebSocketFrameTypes.ConnectionClose, WebSocket.EncodeCloseData(code, message), true, false, false)); + this.State = WebSocketStates.Closing; + } + } + + public override void Send(string message) + { + if (message == null) + throw new ArgumentNullException("message must not be null!"); + + int count = System.Text.Encoding.UTF8.GetByteCount(message); + byte[] data = BufferPool.Get(count, true); + System.Text.Encoding.UTF8.GetBytes(message, 0, message.Length, data, 0); + + SendAsText(data.AsBuffer(0, count)); + } + + public override void Send(byte[] buffer) + { + if (buffer == null) + throw new ArgumentNullException("data must not be null!"); + + Send(new WebSocketFrame(this.Parent, WebSocketFrameTypes.Binary, new BufferSegment(buffer, 0, buffer.Length))); + } + + public override void Send(byte[] data, ulong offset, ulong count) + { + if (data == null) + throw new ArgumentNullException("data must not be null!"); + if (offset + count > (ulong)data.Length) + throw new ArgumentOutOfRangeException("offset + count >= data.Length"); + + Send(new WebSocketFrame(this.Parent, WebSocketFrameTypes.Binary, new BufferSegment(data, (int)offset, (int)count), true, true)); + } + + public override void Send(WebSocketFrame frame) + { + if (this.State == WebSocketStates.Closed || closeSent) + return; + + this.frames.Enqueue(frame); + this.http2Handler.SignalRunnerThread(); + this._bufferedAmount += frame.Data.Count; + + if (frame.Type == WebSocketFrameTypes.ConnectionClose) + this.closeSent = true; + } + + public override void SendAsBinary(BufferSegment data) + { + Send(WebSocketFrameTypes.Binary, data); + } + + public override void SendAsText(BufferSegment data) + { + Send(WebSocketFrameTypes.Text, data); + } + + private void Send(WebSocketFrameTypes type, BufferSegment data) + { + Send(new WebSocketFrame(this.Parent, type, data, true, true, false)); + } + + private int CalculateLatency() + { + if (this.rtts.Count == 0) + return 0; + + int sumLatency = 0; + for (int i = 0; i < this.rtts.Count; ++i) + sumLatency += this.rtts[i]; + + return sumLatency / this.rtts.Count; + } + + internal void PreReadCallback() + { + if (this.Parent.StartPingThread) + { + DateTime now = DateTime.Now; + + if (!waitingForPong && now - LastMessageReceived >= TimeSpan.FromMilliseconds(this.Parent.PingFrequency)) + SendPing(); + + if (waitingForPong && now - lastPing > this.Parent.CloseAfterNoMessage) + { + if (this.State != WebSocketStates.Closed) + { + HTTPManager.Logger.Warning("OverHTTP2", + string.Format("No message received in the given time! Closing WebSocket. LastPing: {0}, PingFrequency: {1}, Close After: {2}, Now: {3}", + this.lastPing, TimeSpan.FromMilliseconds(this.Parent.PingFrequency), this.Parent.CloseAfterNoMessage, now), this.Parent.Context); + + CloseWithError("No message received in the given time!"); + } + } + } + } + + public void OnHeartbeatUpdate(TimeSpan dif) + { + DateTime now = DateTime.Now; + + switch (this.State) + { + case WebSocketStates.Connecting: + if (now - this.InternalRequest.Timing.Start >= this.Parent.CloseAfterNoMessage) + { + if (HTTPManager.HTTP2Settings.WebSocketOverHTTP2Settings.EnableImplementationFallback) + { + this.State = WebSocketStates.Closed; + this.InternalRequest.OnHeadersReceived = null; + this.InternalRequest.Callback = null; + this.Parent.FallbackToHTTP1(); + } + else + { + CloseWithError("WebSocket Over HTTP/2 Implementation failed to connect in the given time!"); + } + } + break; + + default: + while (CompletedFrames.TryDequeue(out var frame)) + { + // Bugs in the clients shouldn't interrupt the code, so we need to try-catch and ignore any exception occurring here + try + { + switch (frame.Type) + { + case WebSocketFrameTypes.Continuation: + if (HTTPManager.Logger.Level == Loglevels.All) + HTTPManager.Logger.Verbose("OverHTTP2", "HandleEvents - OnIncompleteFrame", this.Parent.Context); + if (this.Parent.OnIncompleteFrame != null) + this.Parent.OnIncompleteFrame(this.Parent, frame); + break; + + case WebSocketFrameTypes.Text: + // Any not Final frame is handled as a fragment + if (!frame.IsFinal) + goto case WebSocketFrameTypes.Continuation; + + if (HTTPManager.Logger.Level == Loglevels.All) + HTTPManager.Logger.Verbose("OverHTTP2", $"HandleEvents - OnText(\"{frame.DataAsText}\")", this.Parent.Context); + + if (this.Parent.OnMessage != null) + this.Parent.OnMessage(this.Parent, frame.DataAsText); + break; + + case WebSocketFrameTypes.Binary: + // Any not Final frame is handled as a fragment + if (!frame.IsFinal) + goto case WebSocketFrameTypes.Continuation; + + if (HTTPManager.Logger.Level == Loglevels.All) + HTTPManager.Logger.Verbose("OverHTTP2", $"HandleEvents - OnBinary({frame.Data})", this.Parent.Context); + + if (this.Parent.OnBinary != null) + { + var data = new byte[frame.Data.Count]; + Array.Copy(frame.Data.Data, frame.Data.Offset, data, 0, frame.Data.Count); + this.Parent.OnBinary(this.Parent, data); + } + + if (this.Parent.OnBinaryNoAlloc != null) + this.Parent.OnBinaryNoAlloc(this.Parent, frame.Data); + break; + + case WebSocketFrameTypes.ConnectionClose: + HTTPManager.Logger.Verbose("OverHTTP2", "HandleEvents - Calling OnClosed", this.Parent.Context); + if (this.Parent.OnClosed != null) + { + try + { + UInt16 statusCode = 0; + string msg = string.Empty; + + // If we received any data, we will get the status code and the message from it + if (/*CloseFrame != null && */ frame.Data != BufferSegment.Empty && frame.Data.Count >= 2) + { + if (BitConverter.IsLittleEndian) + Array.Reverse(frame.Data.Data, frame.Data.Offset, 2); + statusCode = BitConverter.ToUInt16(frame.Data.Data, frame.Data.Offset); + + if (frame.Data.Count > 2) + msg = Encoding.UTF8.GetString(frame.Data.Data, frame.Data.Offset + 2, frame.Data.Count - 2); + + frame.ReleaseData(); + } + + this.Parent.OnClosed(this.Parent, statusCode, msg); + this.Parent.OnClosed = null; + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("OverHTTP2", "HandleEvents - OnClosed", ex, this.Parent.Context); + } + } + + HTTPManager.Heartbeats.Unsubscribe(this); + break; + } + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("OverHTTP2", string.Format("HandleEvents({0})", frame.ToString()), ex, this.Parent.Context); + } + finally + { + frame.ReleaseData(); + } + } + break; + } + } + + /// + /// Next interaction relative to *now*. + /// + public TimeSpan GetNextInteraction() + { + if (waitingForPong) + return TimeSpan.MaxValue; + + return (LastMessageReceived + TimeSpan.FromMilliseconds(this.Parent.PingFrequency)) - DateTime.Now; + } + + private void SendPing() + { + HTTPManager.Logger.Information("OverHTTP2", "Sending Ping frame, waiting for a pong...", this.Parent.Context); + + lastPing = DateTime.Now; + waitingForPong = true; + + Send(new WebSocketFrame(this.Parent, WebSocketFrameTypes.Ping, BufferSegment.Empty)); + } + + private void CloseWithError(string message) + { + HTTPManager.Logger.Verbose("OverHTTP2", $"CloseWithError(\"{message}\")", this.Parent.Context); + + this.State = WebSocketStates.Closed; + + if (this.Parent.OnError != null) + { + try + { + this.Parent.OnError(this.Parent, message); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("OverHTTP2", "OnError", ex, this.Parent.Context); + } + } + + this.InternalRequest.Abort(); + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/OverHTTP2.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/OverHTTP2.cs.meta new file mode 100644 index 000000000..e3087b27a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/OverHTTP2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aadf012d28ce0f3458e08598d3b745f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/Utils.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/Utils.meta new file mode 100644 index 000000000..93d30076a --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/Utils.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a9b2365dee16ce748bf7849f48d85410 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/Utils/LockedBufferSegmenStream.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/Utils/LockedBufferSegmenStream.cs new file mode 100644 index 000000000..fc5744939 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/Utils/LockedBufferSegmenStream.cs @@ -0,0 +1,60 @@ +#if (!UNITY_WEBGL || UNITY_EDITOR) && !BESTHTTP_DISABLE_ALTERNATE_SSL && !BESTHTTP_DISABLE_HTTP2 && !BESTHTTP_DISABLE_WEBSOCKET +using System; +using System.Collections.Generic; +using System.IO; + +using BestHTTP.Extensions; +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP.WebSocket.Implementations.Utils +{ + public sealed class LockedBufferSegmenStream : BufferSegmentStream + { + public bool IsClosed { get; private set; } + + public override int Read(byte[] buffer, int offset, int count) + { + lock (base.bufferList) + { + if (this.IsClosed && base.bufferList.Count == 0) + return 0; + + int sumReadCount = base.Read(buffer, offset, count); + + return sumReadCount == 0 ? -1 : sumReadCount; + } + } + + public override void Write(BufferSegment bufferSegment) + { + lock (base.bufferList) + { + if (this.IsClosed) + return; + + base.Write(bufferSegment); + } + } + + public override void Reset() + { + lock (base.bufferList) + { + base.Reset(); + } + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + Reset(); + } + + public override void Close() + { + this.IsClosed = true; + } + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/Utils/LockedBufferSegmenStream.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/Utils/LockedBufferSegmenStream.cs.meta new file mode 100644 index 000000000..94728c66b --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/Utils/LockedBufferSegmenStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 311f1dc3057a76e45964b3b63c4a5e79 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/WebGLBrowser.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/WebGLBrowser.cs new file mode 100644 index 000000000..531a47eb6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/WebGLBrowser.cs @@ -0,0 +1,270 @@ +#if (UNITY_WEBGL && !UNITY_EDITOR) && !BESTHTTP_DISABLE_WEBSOCKET +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +using BestHTTP.PlatformSupport.Memory; + +namespace BestHTTP.WebSocket +{ + delegate void OnWebGLWebSocketOpenDelegate(uint id); + delegate void OnWebGLWebSocketTextDelegate(uint id, string text); + delegate void OnWebGLWebSocketBinaryDelegate(uint id, IntPtr pBuffer, int length); + delegate void OnWebGLWebSocketErrorDelegate(uint id, string error); + delegate void OnWebGLWebSocketCloseDelegate(uint id, int code, string reason); + + internal sealed class WebGLBrowser : WebSocketBaseImplementation + { + public override WebSocketStates State => ImplementationId != 0 ? WS_GetState(ImplementationId) : WebSocketStates.Unknown; + + public override bool IsOpen => ImplementationId != 0 && WS_GetState(ImplementationId) == WebSocketStates.Open; + public override int BufferedAmount => WS_GetBufferedAmount(ImplementationId); + + internal static Dictionary WebSockets = new Dictionary(); + + private uint ImplementationId; + + public WebGLBrowser(WebSocket parent, Uri uri, string origin, string protocol) : base(parent, uri, origin, protocol) + { + } + + public override void StartOpen() + { + try + { + ImplementationId = WS_Create(this.Uri.OriginalString, this.Protocol, OnOpenCallback, OnTextCallback, OnBinaryCallback, OnErrorCallback, OnCloseCallback); + WebSockets.Add(ImplementationId, this.Parent); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("WebSocket", "Open", ex, this.Parent.Context); + } + } + + public override void StartClose(UInt16 code, string message) + { + WS_Close(this.ImplementationId, code, message); + } + + public override void Send(string message) + { + var count = System.Text.Encoding.UTF8.GetByteCount(message); + var buffer = BufferPool.Get(count, true); + + System.Text.Encoding.UTF8.GetBytes(message, 0, message.Length, buffer, 0); + + WS_Send_String(this.ImplementationId, buffer, 0, count); + + BufferPool.Release(buffer); + } + + public override void Send(byte[] buffer) + { + WS_Send_Binary(this.ImplementationId, buffer, 0, buffer.Length); + } + + public override void Send(byte[] buffer, ulong offset, ulong count) + { + WS_Send_Binary(this.ImplementationId, buffer, (int)offset, (int)count); + } + + public override void SendAsBinary(BufferSegment data) + { + WS_Send_Binary(this.ImplementationId, data.Data, data.Offset, data.Count); + BufferPool.Release(data); + } + + public override void SendAsText(BufferSegment data) + { + WS_Send_String(this.ImplementationId, data.Data, data.Offset, data.Count); + BufferPool.Release(data); + } + + [DllImport("__Internal")] + static extern uint WS_Create(string url, string protocol, OnWebGLWebSocketOpenDelegate onOpen, OnWebGLWebSocketTextDelegate onText, OnWebGLWebSocketBinaryDelegate onBinary, OnWebGLWebSocketErrorDelegate onError, OnWebGLWebSocketCloseDelegate onClose); + + [DllImport("__Internal")] + static extern WebSocketStates WS_GetState(uint id); + + [DllImport("__Internal")] + static extern int WS_GetBufferedAmount(uint id); + + [DllImport("__Internal")] + static extern int WS_Send_String(uint id, byte[] strData, int pos, int length); + + [DllImport("__Internal")] + static extern int WS_Send_Binary(uint id, byte[] buffer, int pos, int length); + + [DllImport("__Internal")] + static extern void WS_Close(uint id, ushort code, string reason); + + [DllImport("__Internal")] + static extern void WS_Release(uint id); + + [AOT.MonoPInvokeCallback(typeof(OnWebGLWebSocketOpenDelegate))] + static void OnOpenCallback(uint id) + { + WebSocket ws; + if (WebSockets.TryGetValue(id, out ws)) + { + if (ws.OnOpen != null) + { + try + { + ws.OnOpen(ws); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("WebSocket", "OnOpen", ex, ws.Context); + } + } + } + else + HTTPManager.Logger.Warning("WebSocket", "OnOpenCallback - No WebSocket found for id: " + id.ToString(), ws.Context); + } + + [AOT.MonoPInvokeCallback(typeof(OnWebGLWebSocketTextDelegate))] + static void OnTextCallback(uint id, string text) + { + WebSocket ws; + if (WebSockets.TryGetValue(id, out ws)) + { + if (ws.OnMessage != null) + { + try + { + ws.OnMessage(ws, text); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("WebSocket", "OnMessage", ex, ws.Context); + } + } + } + else + HTTPManager.Logger.Warning("WebSocket", "OnTextCallback - No WebSocket found for id: " + id.ToString()); + } + + [AOT.MonoPInvokeCallback(typeof(OnWebGLWebSocketBinaryDelegate))] + static void OnBinaryCallback(uint id, IntPtr pBuffer, int length) + { + WebSocket ws; + if (WebSockets.TryGetValue(id, out ws)) + { + if (ws.OnBinary != null) + { + try + { + byte[] buffer = new byte[length]; + + // Copy data from the 'unmanaged' memory to managed memory. Buffer will be reclaimed by the GC. + Marshal.Copy(pBuffer, buffer, 0, length); + + ws.OnBinary(ws, buffer); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("WebSocket", "OnBinary", ex, ws.Context); + } + } + + if (ws.OnBinaryNoAlloc != null) + { + try + { + byte[] buffer = BufferPool.Get(length, true); + + // We still have to do a copy here, but at least the buffer will be released back to the pool. + // Copy data from the 'unmanaged' memory to managed memory. Buffer will be reclaimed by the GC. + Marshal.Copy(pBuffer, buffer, 0, length); + + ws.OnBinaryNoAlloc(ws, new BufferSegment(buffer, 0, length)); + + BufferPool.Release(buffer); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("WebSocket", "OnBinary", ex, ws.Context); + } + } + } + else + HTTPManager.Logger.Warning("WebSocket", "OnBinaryCallback - No WebSocket found for id: " + id.ToString()); + } + + [AOT.MonoPInvokeCallback(typeof(OnWebGLWebSocketErrorDelegate))] + static void OnErrorCallback(uint id, string error) + { + WebSocket ws; + if (WebSockets.TryGetValue(id, out ws)) + { + WebSockets.Remove(id); + + if (ws.OnError != null) + { + try + { + ws.OnError(ws, error); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("WebSocket", "OnError", ex, ws.Context); + } + } + } + else + HTTPManager.Logger.Warning("WebSocket", "OnErrorCallback - No WebSocket found for id: " + id.ToString()); + + try + { + WS_Release(id); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("WebSocket", "WS_Release", ex); + } + } + + [AOT.MonoPInvokeCallback(typeof(OnWebGLWebSocketCloseDelegate))] + static void OnCloseCallback(uint id, int code, string reason) + { + // To match non-webgl behavior, we have to treat this client-side generated message as an error + if (code == (int)WebSocketStausCodes.ClosedAbnormally) + { + OnErrorCallback(id, "Abnormal disconnection."); + return; + } + + WebSocket ws; + if (WebSockets.TryGetValue(id, out ws)) + { + WebSockets.Remove(id); + + if (ws.OnClosed != null) + { + try + { + ws.OnClosed(ws, (ushort)code, reason); + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("WebSocket", "OnClosed", ex, ws.Context); + } + } + } + else + HTTPManager.Logger.Warning("WebSocket", "OnCloseCallback - No WebSocket found for id: " + id.ToString()); + + try + { + WS_Release(id); + } + catch(Exception ex) + { + HTTPManager.Logger.Exception("WebSocket", "WS_Release", ex); + } + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/WebGLBrowser.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/WebGLBrowser.cs.meta new file mode 100644 index 000000000..da20de7b7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/WebGLBrowser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2f992398667c95b4f8694562f4bd37e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/WebSocketBaseImplementation.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/WebSocketBaseImplementation.cs new file mode 100644 index 000000000..2df6f5711 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/WebSocketBaseImplementation.cs @@ -0,0 +1,98 @@ +#if !BESTHTTP_DISABLE_WEBSOCKET +using System; + +using BestHTTP.PlatformSupport.Memory; + +#if !UNITY_WEBGL || UNITY_EDITOR +using BestHTTP.WebSocket.Frames; +#endif + +namespace BestHTTP.WebSocket +{ + /// + /// States of the underlying implementation's state. + /// + public enum WebSocketStates : byte + { + Connecting = 0, + Open = 1, + Closing = 2, + Closed = 3, + Unknown + }; + + public delegate void OnWebSocketOpenDelegate(WebSocket webSocket); + public delegate void OnWebSocketMessageDelegate(WebSocket webSocket, string message); + public delegate void OnWebSocketBinaryDelegate(WebSocket webSocket, byte[] data); + public delegate void OnWebSocketBinaryNoAllocDelegate(WebSocket webSocket, BufferSegment data); + public delegate void OnWebSocketClosedDelegate(WebSocket webSocket, UInt16 code, string message); + public delegate void OnWebSocketErrorDelegate(WebSocket webSocket, string reason); + +#if !UNITY_WEBGL || UNITY_EDITOR + public delegate void OnWebSocketIncompleteFrameDelegate(WebSocket webSocket, WebSocketFrameReader frame); +#endif + + public abstract class WebSocketBaseImplementation + { + public virtual WebSocketStates State { get; protected set; } + public virtual bool IsOpen { get; protected set; } + public virtual int BufferedAmount { get; protected set; } + +#if !UNITY_WEBGL || UNITY_EDITOR + public HTTPRequest InternalRequest + { + get + { + if (this._internalRequest == null) + CreateInternalRequest(); + + return this._internalRequest; + } + } + protected HTTPRequest _internalRequest; + + public virtual int Latency { get; protected set; } + public virtual DateTime LastMessageReceived { get; protected set; } +#endif + + public WebSocket Parent { get; } + public Uri Uri { get; protected set; } + public string Origin { get; } + public string Protocol { get; } + + public WebSocketBaseImplementation(WebSocket parent, Uri uri, string origin, string protocol) + { + this.Parent = parent; + this.Uri = uri; + this.Origin = origin; + this.Protocol = protocol; + +#if !UNITY_WEBGL || UNITY_EDITOR + this.LastMessageReceived = DateTime.MinValue; + + // Set up some default values. + this.Parent.PingFrequency = 10_000; + this.Parent.CloseAfterNoMessage = TimeSpan.FromSeconds(2); +#endif + } + + public abstract void StartOpen(); + public abstract void StartClose(UInt16 code, string message); + + public abstract void Send(string message); + public abstract void Send(byte[] buffer); + public abstract void Send(byte[] buffer, ulong offset, ulong count); + public abstract void SendAsBinary(BufferSegment data); + public abstract void SendAsText(BufferSegment data); + +#if !UNITY_WEBGL || UNITY_EDITOR + protected abstract void CreateInternalRequest(); + + /// + /// It will send the given frame to the server. + /// + public abstract void Send(WebSocketFrame frame); +#endif + } +} +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/WebSocketBaseImplementation.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/WebSocketBaseImplementation.cs.meta new file mode 100644 index 000000000..593fff8a4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/Implementations/WebSocketBaseImplementation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ba79e3bbef722f24881197bc223ded5c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/WebSocket.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/WebSocket.cs new file mode 100644 index 000000000..152c1c2b7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/WebSocket.cs @@ -0,0 +1,407 @@ +#if !BESTHTTP_DISABLE_WEBSOCKET + +using System; +using System.Text; +using BestHTTP.Extensions; +using BestHTTP.Connections; +using BestHTTP.Logger; +using BestHTTP.PlatformSupport.Memory; + +#if !UNITY_WEBGL || UNITY_EDITOR + using BestHTTP.WebSocket.Frames; + using BestHTTP.WebSocket.Extensions; +#endif + +namespace BestHTTP.WebSocket +{ + public sealed class WebSocket + { + /// + /// Maximum payload size of a websocket frame. Its default value is 32 KiB. + /// + public static uint MaxFragmentSize = UInt16.MaxValue / 2; + +#if !UNITY_WEBGL || UNITY_EDITOR + public static IExtension[] GetDefaultExtensions() + { +#if !BESTHTTP_DISABLE_GZIP + return new IExtension[] { new PerMessageCompression(/*compression level: */ Decompression.Zlib.CompressionLevel.Default, + /*clientNoContextTakeover: */ false, + /*serverNoContextTakeover: */ false, + /*clientMaxWindowBits: */ Decompression.Zlib.ZlibConstants.WindowBitsMax, + /*desiredServerMaxWindowBits: */ Decompression.Zlib.ZlibConstants.WindowBitsMax, + /*minDatalengthToCompress: */ PerMessageCompression.MinDataLengthToCompressDefault) }; +#else + return null; +#endif + } +#endif + + public WebSocketStates State { get { return this.implementation.State; } } + + /// + /// The connection to the WebSocket server is open. + /// + public bool IsOpen { get { return this.implementation.IsOpen; } } + + /// + /// Data waiting to be written to the wire. + /// + public int BufferedAmount { get { return this.implementation.BufferedAmount; } } + +#if !UNITY_WEBGL || UNITY_EDITOR + + /// + /// Set to true to start a new thread to send Pings to the WebSocket server + /// + public bool StartPingThread { get; set; } + + /// + /// The delay between two Pings in milliseconds. Minimum value is 100ms, default is 10 seconds. + /// + public int PingFrequency { get; set; } + + /// + /// If StartPingThread set to true, the plugin will close the connection and emit an OnError event if no + /// message is received from the server in the given time. Its default value is 2 sec. + /// + public TimeSpan CloseAfterNoMessage { get; set; } + + /// + /// The internal HTTPRequest object. + /// + public HTTPRequest InternalRequest { get { return this.implementation.InternalRequest; } } + + /// + /// IExtension implementations the plugin will negotiate with the server to use. + /// + public IExtension[] Extensions { get; private set; } + + /// + /// Latency calculated from the ping-pong message round-trip times. + /// + public int Latency { get { return this.implementation.Latency; } } + + /// + /// When we received the last message from the server. + /// + public DateTime LastMessageReceived { get { return this.implementation.LastMessageReceived; } } + + /// + /// When the Websocket Over HTTP/2 implementation fails to connect and EnableImplementationFallback is true, the plugin tries to fall back to the HTTP/1 implementation. + /// When this happens a new InternalRequest is created and all previous custom modifications (like added headers) are lost. With OnInternalRequestCreated these modifications can be reapplied. + /// + public Action OnInternalRequestCreated; +#endif + + /// + /// Called when the connection to the WebSocket server is established. + /// + public OnWebSocketOpenDelegate OnOpen; + + /// + /// Called when a new textual message is received from the server. + /// + public OnWebSocketMessageDelegate OnMessage; + + /// + /// Called when a new binary message is received from the server. + /// + public OnWebSocketBinaryDelegate OnBinary; + + /// + /// Called when a Binary message received. It's a more performant version than the OnBinary event, as the memory will be reused. + /// + public OnWebSocketBinaryNoAllocDelegate OnBinaryNoAlloc; + + /// + /// Called when the WebSocket connection is closed. + /// + public OnWebSocketClosedDelegate OnClosed; + + /// + /// Called when an error is encountered. The parameter will be the description of the error. + /// + public OnWebSocketErrorDelegate OnError; + +#if !UNITY_WEBGL || UNITY_EDITOR + /// + /// Called when an incomplete frame received. No attempt will be made to reassemble these fragments internally, and no reference are stored after this event to this frame. + /// + public OnWebSocketIncompleteFrameDelegate OnIncompleteFrame; +#endif + + /// + /// Logging context of this websocket instance. + /// + public LoggingContext Context { get; private set; } + + /// + /// The underlying, real implementation. + /// + private WebSocketBaseImplementation implementation; + + /// + /// Creates a WebSocket instance from the given uri. + /// + /// The uri of the WebSocket server + public WebSocket(Uri uri) + :this(uri, string.Empty, string.Empty) + { +#if (!UNITY_WEBGL || UNITY_EDITOR) + this.Extensions = WebSocket.GetDefaultExtensions(); +#endif + } + +#if !UNITY_WEBGL || UNITY_EDITOR + public WebSocket(Uri uri, string origin, string protocol) + :this(uri, origin, protocol, null) + { +#if (!UNITY_WEBGL || UNITY_EDITOR) + this.Extensions = WebSocket.GetDefaultExtensions(); +#endif + } +#endif + + /// + /// Creates a WebSocket instance from the given uri, protocol and origin. + /// + /// The uri of the WebSocket server + /// Servers that are not intended to process input from any web page but only for certain sites SHOULD verify the |Origin| field is an origin they expect. + /// If the origin indicated is unacceptable to the server, then it SHOULD respond to the WebSocket handshake with a reply containing HTTP 403 Forbidden status code. + /// The application-level protocol that the client want to use(eg. "chat", "leaderboard", etc.). Can be null or empty string if not used. + /// Optional IExtensions implementations + public WebSocket(Uri uri, string origin, string protocol +#if !UNITY_WEBGL || UNITY_EDITOR + , params IExtension[] extensions +#endif + ) + + { + this.Context = new LoggingContext(this); + +#if !UNITY_WEBGL || UNITY_EDITOR + this.Extensions = extensions; + +#if !BESTHTTP_DISABLE_ALTERNATE_SSL && !BESTHTTP_DISABLE_HTTP2 + if (HTTPManager.HTTP2Settings.WebSocketOverHTTP2Settings.EnableWebSocketOverHTTP2 && HTTPProtocolFactory.IsSecureProtocol(uri)) + { + // Try to find a HTTP/2 connection that supports the connect protocol. + var connectionKey = Core.HostDefinition.GetKeyFor(new UriBuilder("https", uri.Host, uri.Port).Uri +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + , GetProxy(uri) +#endif + ); + + var con = BestHTTP.Core.HostManager.GetHost(uri.Host).GetHostDefinition(connectionKey).Find(c => { + var httpConnection = c as HTTPConnection; + var http2Handler = httpConnection?.requestHandler as Connections.HTTP2.HTTP2Handler; + + return http2Handler != null && http2Handler.settings.RemoteSettings[Connections.HTTP2.HTTP2Settings.ENABLE_CONNECT_PROTOCOL] != 0; + }); + + if (con != null) + { + HTTPManager.Logger.Information("WebSocket", "Connection with enabled Connect Protocol found!", this.Context); + + var httpConnection = con as HTTPConnection; + var http2Handler = httpConnection?.requestHandler as Connections.HTTP2.HTTP2Handler; + + this.implementation = new OverHTTP2(this, uri, origin, protocol); + } + } +#endif + + if (this.implementation == null) + this.implementation = new OverHTTP1(this, uri, origin, protocol); +#else + this.implementation = new WebGLBrowser(this, uri, origin, protocol); +#endif + + // Under WebGL when only the WebSocket protocol is used Setup() isn't called, so we have to call it here. + HTTPManager.Setup(); + } + +#if !UNITY_WEBGL || UNITY_EDITOR + internal void FallbackToHTTP1() + { + HTTPManager.Logger.Verbose("WebSocket", "FallbackToHTTP1", this.Context); + + if (this.implementation == null) + return; + + this.implementation = new OverHTTP1(this, this.implementation.Uri, this.implementation.Origin, this.implementation.Protocol); + this.implementation.StartOpen(); + } +#endif + + /// + /// Start the opening process. + /// + public void Open() + { + this.implementation.StartOpen(); + } + + /// + /// It will send the given message to the server in one frame. + /// + public void Send(string message) + { + if (!IsOpen) + return; + + this.implementation.Send(message); + } + + /// + /// It will send the given data to the server in one frame. + /// + public void Send(byte[] buffer) + { + if (!IsOpen) + return; + + this.implementation.Send(buffer); + } + + /// + /// Will send count bytes from a byte array, starting from offset. + /// + public void Send(byte[] buffer, ulong offset, ulong count) + { + if (!IsOpen) + return; + + this.implementation.Send(buffer, offset, count); + } + + /// + /// Will send the data in one or more binary frame and takes ownership over it calling BufferPool.Release when sent. + /// + public void SendAsBinary(BufferSegment data) + { + if (!IsOpen) + { + BufferPool.Release(data); + return; + } + + this.implementation.SendAsBinary(data); + } + + /// + /// Will send data as a text frame and takes owenership over the memory region releasing it to the BufferPool as soon as possible. + /// + public void SendAsText(BufferSegment data) + { + if (!IsOpen) + { + BufferPool.Release(data); + return; + } + + this.implementation.SendAsText(data); + } + +#if !UNITY_WEBGL || UNITY_EDITOR + /// + /// It will send the given frame to the server. + /// + public void Send(WebSocketFrame frame) + { + if (!IsOpen) + return; + + this.implementation.Send(frame); + } +#endif + + /// + /// It will initiate the closing of the connection to the server. + /// + public void Close() + { + if (State >= WebSocketStates.Closing) + return; + + this.implementation.StartClose(1000, "Bye!"); + } + + /// + /// It will initiate the closing of the connection to the server sending the given code and message. + /// + public void Close(UInt16 code, string message) + { + if (!IsOpen) + return; + + this.implementation.StartClose(code, message); + } + +#if !BESTHTTP_DISABLE_PROXY && (!UNITY_WEBGL || UNITY_EDITOR) + internal Proxy GetProxy(Uri uri) + { + // WebSocket is not a request-response based protocol, so we need a 'tunnel' through the proxy + HTTPProxy proxy = HTTPManager.Proxy as HTTPProxy; + if (proxy != null && proxy.UseProxyForAddress(uri)) + proxy = new HTTPProxy(proxy.Address, + proxy.Credentials, + false, /*turn on 'tunneling'*/ + false, /*sendWholeUri*/ + proxy.NonTransparentForHTTPS); + + return proxy; + } +#endif + +#if !UNITY_WEBGL || UNITY_EDITOR + + public static BufferSegment EncodeCloseData(UInt16 code, string message) + { + //If there is a body, the first two bytes of the body MUST be a 2-byte unsigned integer + // (in network byte order) representing a status code with value /code/ defined in Section 7.4 (http://tools.ietf.org/html/rfc6455#section-7.4). Following the 2-byte integer, + // the body MAY contain UTF-8-encoded data with value /reason/, the interpretation of which is not defined by this specification. + // This data is not necessarily human readable but may be useful for debugging or passing information relevant to the script that opened the connection. + int msgLen = Encoding.UTF8.GetByteCount(message); + using (var ms = new BufferPoolMemoryStream(2 + msgLen)) + { + byte[] buff = BitConverter.GetBytes(code); + if (BitConverter.IsLittleEndian) + Array.Reverse(buff, 0, buff.Length); + + ms.Write(buff, 0, buff.Length); + + buff = Encoding.UTF8.GetBytes(message); + ms.Write(buff, 0, buff.Length); + + buff = ms.ToArray(); + + return buff.AsBuffer(buff.Length); + } + } + + internal static string GetSecKey(object[] from) + { + const int keysLength = 16; + byte[] keys = BufferPool.Get(keysLength, true); + int pos = 0; + + for (int i = 0; i < from.Length; ++i) + { + byte[] hash = BitConverter.GetBytes((Int32)from[i].GetHashCode()); + + for (int cv = 0; cv < hash.Length && pos < keysLength; ++cv) + keys[pos++] = hash[cv]; + } + + var result = Convert.ToBase64String(keys, 0, keysLength); + BufferPool.Release(keys); + + return result; + } +#endif + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/WebSocket.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/WebSocket.cs.meta new file mode 100644 index 000000000..be2a0c366 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/WebSocket.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 32e0cd2913acd794aa3fc7d414fe78e4 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/WebSocketResponse.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/WebSocketResponse.cs new file mode 100644 index 000000000..59fb28d98 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/WebSocketResponse.cs @@ -0,0 +1,708 @@ +#if !BESTHTTP_DISABLE_WEBSOCKET && (!UNITY_WEBGL || UNITY_EDITOR) + +using System; +using System.IO; +using System.Threading; +using System.Collections.Generic; +using System.Collections.Concurrent; +using System.Text; + +using BestHTTP.Extensions; +using BestHTTP.WebSocket.Frames; +using BestHTTP.Core; +using BestHTTP.PlatformSupport.Memory; +using BestHTTP.Logger; +using BestHTTP.Connections; + +namespace BestHTTP.WebSocket +{ + public sealed class WebSocketResponse : HTTPResponse, IProtocol + { + /// + /// Capacity of the RTT buffer where the latencies are kept. + /// + public static int RTTBufferCapacity = 5; + + #region Public Interface + + /// + /// A reference to the original WebSocket instance. Used for accessing extensions. + /// + public WebSocket WebSocket { get; internal set; } + + /// + /// Called when a Text message received + /// + public Action OnText; + + /// + /// Called when a Binary message received + /// + public Action OnBinary; + + /// + /// Called when a Binary message received. It's a more performant version than the OnBinary event, as the memory will be reused. + /// + public Action OnBinaryNoAlloc; + + /// + /// Called when an incomplete frame received. No attempt will be made to reassemble these fragments. + /// + public Action OnIncompleteFrame; + + /// + /// Called when the connection closed. + /// + public Action OnClosed; + + /// + /// IProtocol's ConnectionKey property. + /// + public HostConnectionKey ConnectionKey { get; private set; } + + /// + /// Indicates whether the connection to the server is closed or not. + /// + public bool IsClosed { get { return closed; } } + + /// + /// IProtocol.LoggingContext implementation. + /// + LoggingContext IProtocol.LoggingContext { get => this.Context; } + + /// + /// On what frequency we have to send a ping to the server. + /// + public TimeSpan PingFrequnecy { get; private set; } + + /// + /// Maximum size of a fragment's payload data. Its default value is WebSocket.MaxFragmentSize's value. + /// + public uint MaxFragmentSize { get; set; } + + /// + /// Length of unsent, buffered up data in bytes. + /// + public int BufferedAmount { get { return this._bufferedAmount; } } + private int _bufferedAmount; + + /// + /// Calculated latency from the Round-Trip Times we store in the rtts field. + /// + public int Latency { get; private set; } + + /// + /// When we received the last frame. + /// + public DateTime lastMessage = DateTime.MinValue; + + #endregion + + #region Private Fields + + private List IncompleteFrames = new List(); + private ConcurrentQueue CompletedFrames = new ConcurrentQueue(); + private WebSocketFrameReader CloseFrame; + + private ConcurrentQueue unsentFrames = new ConcurrentQueue(); + private volatile AutoResetEvent newFrameSignal = new AutoResetEvent(false); + private int sendThreadCreated = 0; + private int closedThreads = 0; + + /// + /// True if we sent out a Close message to the server + /// + private volatile bool closeSent; + + /// + /// True if this WebSocket connection is closed + /// + private volatile bool closed; + + /// + /// When we sent out the last ping. + /// + private DateTime lastPing = DateTime.MinValue; + + /// + /// True if waiting for an answer to our ping request. Ping timeout is used only why waitingForPong is true. + /// + private volatile bool waitingForPong = false; + + /// + /// A circular buffer to store the last N rtt times calculated by the pong messages. + /// + private CircularBuffer rtts = new CircularBuffer(WebSocketResponse.RTTBufferCapacity); + + #endregion + + internal WebSocketResponse(HTTPRequest request, Stream stream, bool isStreamed, bool isFromCache) + : base(request, stream, isStreamed, isFromCache) + { + base.IsClosedManually = true; + this.ConnectionKey = new HostConnectionKey(this.baseRequest.CurrentUri.Host, HostDefinition.GetKeyForRequest(this.baseRequest)); + + closed = false; + MaxFragmentSize = WebSocket.MaxFragmentSize; + } + + internal void StartReceive() + { + if (IsUpgraded) + BestHTTP.PlatformSupport.Threading.ThreadedRunner.RunLongLiving(ReceiveThreadFunc); + } + + internal void CloseStream() + { + if (base.Stream != null) + { + try + { + base.Stream.Dispose(); + } + catch + { } + } + } + + #region Public interface for interacting with the server + + /// + /// It will send the given message to the server in one frame. + /// + public void Send(string message) + { + if (message == null) + throw new ArgumentNullException("message must not be null!"); + + int count = System.Text.Encoding.UTF8.GetByteCount(message); + byte[] data = BufferPool.Get(count, true); + System.Text.Encoding.UTF8.GetBytes(message, 0, message.Length, data, 0); + + Send(WebSocketFrameTypes.Text, data.AsBuffer(count)); + } + + /// + /// It will send the given data to the server in one frame. + /// + public void Send(byte[] data) + { + if (data == null) + throw new ArgumentNullException("data must not be null!"); + + WebSocketFrame frame = new WebSocketFrame(this.WebSocket, WebSocketFrameTypes.Binary, new BufferSegment(data, 0, data.Length)); + Send(frame); + } + + /// + /// Will send count bytes from a byte array, starting from offset. + /// + public void Send(byte[] data, ulong offset, ulong count) + { + if (data == null) + throw new ArgumentNullException("data must not be null!"); + if (offset + count > (ulong)data.Length) + throw new ArgumentOutOfRangeException("offset + count >= data.Length"); + + WebSocketFrame frame = new WebSocketFrame(this.WebSocket, WebSocketFrameTypes.Binary, new BufferSegment(data, (int)offset, (int)count), true, true); + Send(frame); + } + + public void Send(WebSocketFrameTypes type, BufferSegment data) + { + WebSocketFrame frame = new WebSocketFrame(this.WebSocket, type, data, true, true, false); + Send(frame); + } + + /// + /// It will send the given frame to the server. + /// + public void Send(WebSocketFrame frame) + { + if (closed || closeSent) + return; + + this.unsentFrames.Enqueue(frame); + + if (Interlocked.CompareExchange(ref this.sendThreadCreated, 1, 0) == 0) + { + HTTPManager.Logger.Information("WebSocketResponse", "Send - Creating thread", this.Context); + + BestHTTP.PlatformSupport.Threading.ThreadedRunner.RunLongLiving(SendThreadFunc); + } + + Interlocked.Add(ref this._bufferedAmount, frame.Data.Count); + + //if (HTTPManager.Logger.Level <= Logger.Loglevels.All) + // HTTPManager.Logger.Information("WebSocketResponse", "Signaling SendThread!", this.Context); + + newFrameSignal.Set(); + } + + /// + /// It will initiate the closing of the connection to the server. + /// + public void Close() + { + Close(1000, "Bye!"); + } + + /// + /// It will initiate the closing of the connection to the server. + /// + public void Close(UInt16 code, string msg) + { + if (closed) + return; + + HTTPManager.Logger.Verbose("WebSocketResponse", string.Format("Close({0}, \"{1}\")", code, msg), this.Context); + + WebSocketFrame frame; + while (this.unsentFrames.TryDequeue(out frame)) + { + if (frame.Data.Data != null) + { + BufferPool.Release(frame.Data); + Interlocked.Add(ref this._bufferedAmount, -frame.Data.Count); + } + } + + Send(new WebSocketFrame(this.WebSocket, WebSocketFrameTypes.ConnectionClose, WebSocket.EncodeCloseData(code, msg))); + } + + public void StartPinging(int frequency) + { + if (frequency < 100) + throw new ArgumentException("frequency must be at least 100 milliseconds!"); + + PingFrequnecy = TimeSpan.FromMilliseconds(frequency); + lastMessage = DateTime.UtcNow; + + SendPing(); + } + + #endregion + + #region Private Threading Functions + + private void SendThreadFunc() + { + PlatformSupport.Threading.ThreadedRunner.SetThreadName("BestHTTP.WebSocket Send"); + + try + { + bool mask = !HTTPProtocolFactory.IsSecureProtocol(this.baseRequest.CurrentUri); + using (WriteOnlyBufferedStream bufferedStream = new WriteOnlyBufferedStream(this.Stream, 16 * 1024)) + { + while (!closed && !closeSent) + { + //if (HTTPManager.Logger.Level <= Logger.Loglevels.All) + // HTTPManager.Logger.Information("WebSocketResponse", "SendThread - Waiting...", this.Context); + + TimeSpan waitTime = TimeSpan.FromMilliseconds(int.MaxValue); + + if (this.PingFrequnecy != TimeSpan.Zero) + { + DateTime now = DateTime.UtcNow; + waitTime = lastMessage + PingFrequnecy - now; + + if (waitTime <= TimeSpan.Zero) + { + if (!waitingForPong && now - lastMessage >= PingFrequnecy) + { + if (!SendPing()) + continue; + } + + waitTime = PingFrequnecy; + } + + if (waitingForPong && now - lastPing > this.WebSocket.CloseAfterNoMessage) + { + HTTPManager.Logger.Warning("WebSocketResponse", + string.Format("No message received in the given time! Closing WebSocket. LastPing: {0}, PingFrequency: {1}, Close After: {2}, Now: {3}", + this.lastPing, this.PingFrequnecy, this.WebSocket.CloseAfterNoMessage, now), this.Context); + + CloseWithError(HTTPRequestStates.Error, "No message received in the given time!"); + continue; + } + } + + newFrameSignal.WaitOne(waitTime); + + try + { + //if (HTTPManager.Logger.Level <= Logger.Loglevels.All) + // HTTPManager.Logger.Information("WebSocketResponse", "SendThread - Wait is over, about " + this.unsentFrames.Count.ToString() + " new frames!", this.Context); + + WebSocketFrame frame; + while (this.unsentFrames.TryDequeue(out frame)) + { + // save data count as per-message deflate can compress, and it would be different after calling WriteTo + int originalFrameDataLength = frame.Data.Count; + + if (!closeSent) + { + frame.WriteTo((header, chunk) => + { + bufferedStream.Write(header.Data, header.Offset, header.Count); + BufferPool.Release(header); + + if (chunk != BufferSegment.Empty) + bufferedStream.Write(chunk.Data, chunk.Offset, chunk.Count); + }, MaxFragmentSize, mask, this.Context); + BufferPool.Release(frame.Data); + + if (frame.Type == WebSocketFrameTypes.ConnectionClose) + closeSent = true; + } + + Interlocked.Add(ref this._bufferedAmount, -originalFrameDataLength); + } + + bufferedStream.Flush(); + } + catch (Exception ex) + { + if (HTTPUpdateDelegator.IsCreated) + { + this.baseRequest.Exception = ex; + this.baseRequest.State = HTTPRequestStates.Error; + } + else + this.baseRequest.State = HTTPRequestStates.Aborted; + + closed = true; + } + } + + HTTPManager.Logger.Information("WebSocketResponse", string.Format("Ending Send thread. Closed: {0}, closeSent: {1}", closed, closeSent), this.Context); + } + } + catch (Exception ex) + { + if (HTTPManager.Logger.Level == Loglevels.All) + HTTPManager.Logger.Exception("WebSocketResponse", "SendThread", ex); + } + finally + { + Interlocked.Exchange(ref sendThreadCreated, 0); + + HTTPManager.Logger.Information("WebSocketResponse", "SendThread - Closed!", this.Context); + + TryToCleanup(); + } + } + + private void ReceiveThreadFunc() + { + PlatformSupport.Threading.ThreadedRunner.SetThreadName("BestHTTP.WebSocket Receive"); + + try + { + while (!closed) + { + try + { + WebSocketFrameReader frame = new WebSocketFrameReader(); + frame.Read(this.Stream); + + if (HTTPManager.Logger.Level == Logger.Loglevels.All) + HTTPManager.Logger.Information("WebSocketResponse", "Frame received: " + frame.ToString(), this.Context); + + lastMessage = DateTime.UtcNow; + + if (!frame.IsFinal) + { + if (OnIncompleteFrame == null) + IncompleteFrames.Add(frame); + else + CompletedFrames.Enqueue(frame); + continue; + } + + switch (frame.Type) + { + // For a complete documentation and rules on fragmentation see http://tools.ietf.org/html/rfc6455#section-5.4 + // A fragmented Frame's last fragment's opcode is 0 (Continuation) and the FIN bit is set to 1. + case WebSocketFrameTypes.Continuation: + // Do an assemble pass only if OnFragment is not set. Otherwise put it in the CompletedFrames, we will handle it in the HandleEvent phase. + if (OnIncompleteFrame == null) + { + frame.Assemble(IncompleteFrames); + + // Remove all incomplete frames + IncompleteFrames.Clear(); + + // Control frames themselves MUST NOT be fragmented. So, its a normal text or binary frame. Go, handle it as usual. + goto case WebSocketFrameTypes.Binary; + } + else + { + CompletedFrames.Enqueue(frame); + ProtocolEventHelper.EnqueueProtocolEvent(new ProtocolEventInfo(this)); + } + break; + + case WebSocketFrameTypes.Text: + case WebSocketFrameTypes.Binary: + frame.DecodeWithExtensions(WebSocket); + CompletedFrames.Enqueue(frame); + ProtocolEventHelper.EnqueueProtocolEvent(new ProtocolEventInfo(this)); + break; + + // Upon receipt of a Ping frame, an endpoint MUST send a Pong frame in response, unless it already received a Close frame. + case WebSocketFrameTypes.Ping: + if (!closeSent && !closed) + Send(new WebSocketFrame(this.WebSocket, WebSocketFrameTypes.Pong, frame.Data, true, true)); + break; + + case WebSocketFrameTypes.Pong: + try + { + // the difference between the current time and the time when the ping message is sent + TimeSpan diff = TimeSpan.FromTicks(this.lastMessage.Ticks - this.lastPing.Ticks); + + // add it to the buffer + this.rtts.Add((int)diff.TotalMilliseconds); + + // and calculate the new latency + this.Latency = CalculateLatency(); + } + catch + { + // https://tools.ietf.org/html/rfc6455#section-5.5 + // A Pong frame MAY be sent unsolicited. This serves as a + // unidirectional heartbeat. A response to an unsolicited Pong frame is + // not expected. + } + finally + { + waitingForPong = false; + } + + break; + + // If an endpoint receives a Close frame and did not previously send a Close frame, the endpoint MUST send a Close frame in response. + case WebSocketFrameTypes.ConnectionClose: + HTTPManager.Logger.Information("WebSocketResponse", "ConnectionClose packet received!", this.Context); + + CloseFrame = frame; + if (!closeSent) + Send(new WebSocketFrame(this.WebSocket, WebSocketFrameTypes.ConnectionClose, BufferSegment.Empty)); + closed = true; + break; + } + } + catch (Exception e) + { + if (HTTPUpdateDelegator.IsCreated) + { + this.baseRequest.Exception = e; + this.baseRequest.State = HTTPRequestStates.Error; + } + else + this.baseRequest.State = HTTPRequestStates.Aborted; + + closed = true; + newFrameSignal.Set(); + } + } + + HTTPManager.Logger.Information("WebSocketResponse", "Ending Read thread! closed: " + closed, this.Context); + } + finally + { + HTTPManager.Logger.Information("WebSocketResponse", "ReceiveThread - Closed!", this.Context); + + TryToCleanup(); + } + } + + #endregion + + #region Sending Out Events + + /// + /// Internal function to send out received messages. + /// + void IProtocol.HandleEvents() + { + WebSocketFrameReader frame; + while (CompletedFrames.TryDequeue(out frame)) + { + // Bugs in the clients shouldn't interrupt the code, so we need to try-catch and ignore any exception occurring here + try + { + switch (frame.Type) + { + case WebSocketFrameTypes.Continuation: + if (HTTPManager.Logger.Level == Loglevels.All) + HTTPManager.Logger.Verbose("WebSocketResponse", "HandleEvents - OnIncompleteFrame: " + frame.ToString(), this.Context); + + if (OnIncompleteFrame != null) + OnIncompleteFrame(this, frame); + break; + + case WebSocketFrameTypes.Text: + // Any not Final frame is handled as a fragment + if (!frame.IsFinal) + goto case WebSocketFrameTypes.Continuation; + + if (HTTPManager.Logger.Level == Loglevels.All) + HTTPManager.Logger.Verbose("WebSocketResponse", "HandleEvents - OnText: " + frame.DataAsText, this.Context); + + if (OnText != null) + OnText(this, frame.DataAsText); + break; + + case WebSocketFrameTypes.Binary: + // Any not Final frame is handled as a fragment + if (!frame.IsFinal) + goto case WebSocketFrameTypes.Continuation; + + if (HTTPManager.Logger.Level == Loglevels.All) + HTTPManager.Logger.Verbose("WebSocketResponse", "HandleEvents - OnBinary: " + frame.ToString(), this.Context); + + if (OnBinary != null) + { + var data = new byte[frame.Data.Count]; + Array.Copy(frame.Data.Data, frame.Data.Offset, data, 0, frame.Data.Count); + OnBinary(this, data); + } + + if (OnBinaryNoAlloc != null) + OnBinaryNoAlloc(this, frame.Data); + break; + } + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("WebSocketResponse", string.Format("HandleEvents({0})", frame.ToString()), ex, this.Context); + } + finally + { + frame.ReleaseData(); + } + } + + // 2015.05.09 + // State checking added because if there is an error the OnClose called first, and then the OnError. + // Now, when there is an error only the OnError event will be called! + if (IsClosed && OnClosed != null && baseRequest.State == HTTPRequestStates.Processing) + { + HTTPManager.Logger.Verbose("WebSocketResponse", "HandleEvents - Calling OnClosed", this.Context); + try + { + UInt16 statusCode = 0; + string msg = string.Empty; + + // If we received any data, we will get the status code and the message from it + if (/*CloseFrame != null && */CloseFrame.Data != BufferSegment.Empty && CloseFrame.Data.Count >= 2) + { + if (BitConverter.IsLittleEndian) + Array.Reverse(CloseFrame.Data.Data, CloseFrame.Data.Offset, 2); + statusCode = BitConverter.ToUInt16(CloseFrame.Data.Data, CloseFrame.Data.Offset); + + if (CloseFrame.Data.Count > 2) + msg = Encoding.UTF8.GetString(CloseFrame.Data.Data, CloseFrame.Data.Offset + 2, CloseFrame.Data.Count - 2); + + CloseFrame.ReleaseData(); + } + + OnClosed(this, statusCode, msg); + OnClosed = null; + } + catch (Exception ex) + { + HTTPManager.Logger.Exception("WebSocketResponse", "HandleEvents - OnClosed", ex, this.Context); + } + } + } + + #endregion + + private bool SendPing() + { + HTTPManager.Logger.Information("WebSocketResponse", "Sending Ping frame, waiting for a pong...", this.Context); + + lastPing = DateTime.UtcNow; + waitingForPong = true; + + try + { + var pingFrame = new WebSocketFrame(this.WebSocket, WebSocketFrameTypes.Ping, BufferSegment.Empty); + + Send(pingFrame); + } + catch + { + HTTPManager.Logger.Information("WebSocketResponse", "Error while sending PING message! Closing WebSocket.", this.Context); + CloseWithError(HTTPRequestStates.Error, "Error while sending PING message!"); + + return false; + } + + return true; + } + + private void CloseWithError(HTTPRequestStates state, string message) + { + if (!string.IsNullOrEmpty(message)) + this.baseRequest.Exception = new Exception(message); + this.baseRequest.State = state; + + this.closed = true; + + CloseStream(); + ProtocolEventHelper.EnqueueProtocolEvent(new ProtocolEventInfo(this)); + } + + private int CalculateLatency() + { + if (this.rtts.Count == 0) + return 0; + + int sumLatency = 0; + for (int i = 0; i < this.rtts.Count; ++i) + sumLatency += this.rtts[i]; + + return sumLatency / this.rtts.Count; + } + + void IProtocol.CancellationRequested() + { + CloseWithError(HTTPRequestStates.Aborted, null); + } + + private void TryToCleanup() + { + if (Interlocked.Increment(ref this.closedThreads) == 2) + { + ProtocolEventHelper.EnqueueProtocolEvent(new ProtocolEventInfo(this)); + (newFrameSignal as IDisposable).Dispose(); + newFrameSignal = null; + + CloseStream(); + + HTTPManager.Logger.Information("WebSocketResponse", "TryToCleanup - finished!", this.Context); + } + } + + public override string ToString() + { + return this.ConnectionKey.ToString(); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + IncompleteFrames.Clear(); + CompletedFrames.Clear(); + unsentFrames.Clear(); + } + } +} + +#endif diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/WebSocketResponse.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/WebSocketResponse.cs.meta new file mode 100644 index 000000000..72de547be --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/WebSocketResponse.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 46daae4eb8da43145b58819255462ded +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/WebSocketStatusCodes.cs b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/WebSocketStatusCodes.cs new file mode 100644 index 000000000..97b457a41 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/WebSocketStatusCodes.cs @@ -0,0 +1,83 @@ +#if !BESTHTTP_DISABLE_WEBSOCKET + +namespace BestHTTP.WebSocket +{ + /// + /// http://tools.ietf.org/html/rfc6455#section-7.4.1 + /// + public enum WebSocketStausCodes : ushort + { + /// + /// Indicates a normal closure, meaning that the purpose for which the connection was established has been fulfilled. + /// + NormalClosure = 1000, + + /// + /// Indicates that an endpoint is "going away", such as a server going down or a browser having navigated away from a page. + /// + GoingAway = 1001, + + /// + /// Indicates that an endpoint is terminating the connection due to a protocol error. + /// + ProtocolError = 1002, + + /// + /// Indicates that an endpoint is terminating the connection because it has received a type of data it cannot accept + /// (e.g., an endpoint that understands only text data MAY send this if it receives a binary message). + /// + WrongDataType = 1003, + + /// + /// Reserved. The specific meaning might be defined in the future. + /// + Reserved = 1004, + + /// + /// A reserved value and MUST NOT be set as a status code in a Close control frame by an endpoint. + /// It is designated for use in applications expecting a status code to indicate that no status code was actually present. + /// + NoStatusCode = 1005, + + /// + /// A reserved value and MUST NOT be set as a status code in a Close control frame by an endpoint. + /// It is designated for use in applications expecting a status code to indicate that the connection was closed abnormally, e.g., without sending or receiving a Close control frame. + /// + ClosedAbnormally = 1006, + + /// + /// Indicates that an endpoint is terminating the connection because it has received data within a message that was not consistent with the type of the message (e.g., non-UTF-8 [RFC3629] data within a text message). + /// + DataError = 1007, + + /// + /// Indicates that an endpoint is terminating the connection because it has received a message that violates its policy. + /// This is a generic status code that can be returned when there is no other more suitable status code (e.g., 1003 or 1009) or if there is a need to hide specific details about the policy. + /// + PolicyError = 1008, + + /// + /// Indicates that an endpoint is terminating the connection because it has received a message that is too big for it to process. + /// + TooBigMessage = 1009, + + /// + /// Indicates that an endpoint (client) is terminating the connection because it has expected the server to negotiate one or more extension, + /// but the server didn't return them in the response message of the WebSocket handshake. + /// The list of extensions that are needed SHOULD appear in the /reason/ part of the Close frame. Note that this status code is not used by the server, because it can fail the WebSocket handshake instead. + /// + ExtensionExpected = 1010, + + /// + /// Indicates that a server is terminating the connection because it encountered an unexpected condition that prevented it from fulfilling the request. + /// + WrongRequest = 1011, + + /// + /// A reserved value and MUST NOT be set as a status code in a Close control frame by an endpoint. It is designated for use in applications expecting a status code to indicate that the connection was closed due to a failure to perform a TLS handshake (e.g., the server certificate can't be verified). + /// + TLSHandshakeError = 1015 + } +} + +#endif \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/WebSocketStatusCodes.cs.meta b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/WebSocketStatusCodes.cs.meta new file mode 100644 index 000000000..8030e652e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Source/WebSocket/WebSocketStatusCodes.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b782b81b6b7755d478dc07521f33f09c +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/Third-Party Notices.txt b/GQ_URP/GQ/Assets/Best HTTP/Third-Party Notices.txt new file mode 100644 index 000000000..6805a8211 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Third-Party Notices.txt @@ -0,0 +1,88 @@ +This asset is governed by the Asset Store EULA; however, the following components are governed by the licenses indicated below: + +(A.) DotNetZip +-------------- + +Microsoft Public License (MS-PL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. Definitions +The terms "reproduce," "reproduction," "derivative works," and "distribution" have the +same meaning here as under U.S. copyright law. + +A "contribution" is the original software, or any additions or changes to the software. + +A "contributor" is any person that distributes its contribution under this license. + +"Licensed patents" are a contributor's patent claims that read directly on its contribution. + +2. Grant of Rights + +(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + +(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. Conditions and Limitations + +(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. + +(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + +(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + +(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + +(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +(B.) BouncyCastle +----------------- + +MIT + +Copyright (c) 2000 - 2020 The Legion of the Bouncy Castle Inc. (https://www.bouncycastle.org) + +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. + + +(C.) LitJson +------------ + +Public Domain + +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +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 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. + +For more information, please refer to + +Thank you for reading this notice. Following the tradition of other public +domain projects, here's a blessing: + + May you find forgiveness for yourself and forgive others. + May you experience and share the gift of unconditional love. + May you see light, wherever the illusion of darkness appears. \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/Third-Party Notices.txt.meta b/GQ_URP/GQ/Assets/Best HTTP/Third-Party Notices.txt.meta new file mode 100644 index 000000000..17dddf248 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/Third-Party Notices.txt.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8173c1a1ef2759f4fbd199585cabb4ca +timeCreated: 1593592117 +licenseType: Store +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/license.txt b/GQ_URP/GQ/Assets/Best HTTP/license.txt new file mode 100644 index 000000000..58d2a0455 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/license.txt @@ -0,0 +1 @@ +The plugin's license falls under the Unity Asset Store EULA that can be found here under Appendix 1: https://unity3d.com/legal/as_terms \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/license.txt.meta b/GQ_URP/GQ/Assets/Best HTTP/license.txt.meta new file mode 100644 index 000000000..30a41c592 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/license.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d3b503aff0a21bf4db6cd58a4538485a +timeCreated: 1518595425 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/link.xml b/GQ_URP/GQ/Assets/Best HTTP/link.xml new file mode 100644 index 000000000..1338bc471 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/link.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/link.xml.meta b/GQ_URP/GQ/Assets/Best HTTP/link.xml.meta new file mode 100644 index 000000000..52243c096 --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/link.xml.meta @@ -0,0 +1,38 @@ +fileFormatVersion: 2 +guid: ddecb9df09ed71446ba7ca31ced7e9a5 +labels: +- http +- www +- web +- cache +- stream +- wp8 +- wsa +- metro +- rest +- api +- socket +- socket.io +- websocket +- websockets +- cookie +- proxy +- il2cpp +- android +- tcp +- https +- ios +- webrequest +- signalr +- eventsource +- server-sent +- events +- server-sentevents +- authentication +- samsung +- smart +- tv +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Best HTTP/link_android_subset.xml b/GQ_URP/GQ/Assets/Best HTTP/link_android_subset.xml new file mode 100644 index 000000000..78abf272e --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/link_android_subset.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/Best HTTP/link_android_subset.xml.meta b/GQ_URP/GQ/Assets/Best HTTP/link_android_subset.xml.meta new file mode 100644 index 000000000..281b7615d --- /dev/null +++ b/GQ_URP/GQ/Assets/Best HTTP/link_android_subset.xml.meta @@ -0,0 +1,6 @@ +fileFormatVersion: 2 +guid: e735d6733fbcd8f46a2dbc2de051f0ce +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/tmptool.cs b/GQ_URP/GQ/Assets/Editor/tmptool.cs similarity index 78% rename from GQ_URP/GQ/Assets/tmptool.cs rename to GQ_URP/GQ/Assets/Editor/tmptool.cs index 47d9180fb..27f04947b 100644 --- a/GQ_URP/GQ/Assets/tmptool.cs +++ b/GQ_URP/GQ/Assets/Editor/tmptool.cs @@ -1,11 +1,15 @@ using System.Collections.Generic; +using System.IO; using Unity.VisualScripting; +using UnityEditor; using UnityEngine; public class tmptool : MonoBehaviour { public Transform a; public Transform b; + public List A; + public List B; public List arender = new List(); public List brender = new List(); public List amats = new List(); @@ -196,7 +200,7 @@ public class tmptool : MonoBehaviour } - [ContextMenu("ճ5ű")] + [ContextMenu("ճ5ű豸")] public void Replace5() { var b1 = b.AddComponent(); @@ -222,4 +226,47 @@ public class tmptool : MonoBehaviour if (!b.GetComponent()) b.AddComponent(); } + + [ContextMenu("ճ4ű忨")] + public void Replace4() + { + for (int i = 0; i < A.Count; i++) + { + var b1 = B[i].AddComponent(); + //var b2 = B.AddComponent(); + var b3 = B[i].AddComponent(); + var b4 = B[i].AddComponent(); + //var b5 = B.AddComponent(); + var b6 = B[i].AddComponent(); + + UnityEditorInternal.ComponentUtility.CopyComponent(A[i].GetComponent()); + UnityEditorInternal.ComponentUtility.PasteComponentValues(b1); + + //UnityEditorInternal.ComponentUtility.CopyComponent(A.GetComponent()); + //UnityEditorInternal.ComponentUtility.PasteComponentValues(b2); + + UnityEditorInternal.ComponentUtility.CopyComponent(A[i].GetComponent()); + UnityEditorInternal.ComponentUtility.PasteComponentValues(b3); + + UnityEditorInternal.ComponentUtility.CopyComponent(A[i].GetComponent()); + UnityEditorInternal.ComponentUtility.PasteComponentValues(b4); + + //UnityEditorInternal.ComponentUtility.CopyComponent(A.GetComponent()); + //UnityEditorInternal.ComponentUtility.PasteComponentValues(b5); + + UnityEditorInternal.ComponentUtility.CopyComponent(A[i].GetComponent()); + UnityEditorInternal.ComponentUtility.PasteComponentValues(b6); + + if (!B[i].GetComponent()) B[i].AddComponent(); + } + } + + + + + [ContextMenu("################################################")] + [ContextMenu("ȡģͼ")] + public void SaveThumbnail() + { + } } diff --git a/GQ_URP/GQ/Assets/tmptool.cs.meta b/GQ_URP/GQ/Assets/Editor/tmptool.cs.meta similarity index 100% rename from GQ_URP/GQ/Assets/tmptool.cs.meta rename to GQ_URP/GQ/Assets/Editor/tmptool.cs.meta diff --git a/GQ_URP/GQ/Assets/GameAssets/Shaders/New Shader Graph.shadergraph b/GQ_URP/GQ/Assets/GameAssets/Shaders/New Shader Graph.shadergraph new file mode 100644 index 000000000..596cbc005 --- /dev/null +++ b/GQ_URP/GQ/Assets/GameAssets/Shaders/New Shader Graph.shadergraph @@ -0,0 +1,662 @@ +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.GraphData", + "m_ObjectId": "3569196c9c944c2388d1a48adcc4a5a3", + "m_Properties": [], + "m_Keywords": [], + "m_Dropdowns": [], + "m_CategoryData": [ + { + "m_Id": "f5ea7f8354c34f23acad39c67f59ff68" + } + ], + "m_Nodes": [ + { + "m_Id": "4e5077489d9545fa8fb06696fd6aa388" + }, + { + "m_Id": "9a213aae1c654382b0047dacd4c68aa8" + }, + { + "m_Id": "57e83786faf449e8baf69e3451839acf" + }, + { + "m_Id": "ae172a36b6524f809538a0e78ffda2d4" + }, + { + "m_Id": "b1f7abe68093435fa5fc9bad18ba799d" + }, + { + "m_Id": "024f88ab75b546ab8fa8d3500dea126b" + }, + { + "m_Id": "6a56527b9e8f46a18becf2ac99297be6" + } + ], + "m_GroupDatas": [], + "m_StickyNoteDatas": [], + "m_Edges": [ + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "024f88ab75b546ab8fa8d3500dea126b" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "6a56527b9e8f46a18becf2ac99297be6" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "6a56527b9e8f46a18becf2ac99297be6" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "ae172a36b6524f809538a0e78ffda2d4" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b1f7abe68093435fa5fc9bad18ba799d" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "6a56527b9e8f46a18becf2ac99297be6" + }, + "m_SlotId": 0 + } + } + ], + "m_VertexContext": { + "m_Position": { + "x": 0.0, + "y": 0.0 + }, + "m_Blocks": [ + { + "m_Id": "4e5077489d9545fa8fb06696fd6aa388" + }, + { + "m_Id": "9a213aae1c654382b0047dacd4c68aa8" + }, + { + "m_Id": "57e83786faf449e8baf69e3451839acf" + } + ] + }, + "m_FragmentContext": { + "m_Position": { + "x": 0.0, + "y": 200.0 + }, + "m_Blocks": [ + { + "m_Id": "ae172a36b6524f809538a0e78ffda2d4" + } + ] + }, + "m_PreviewData": { + "serializedMesh": { + "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "preventRotation": false + }, + "m_Path": "Shader Graphs", + "m_GraphPrecision": 1, + "m_PreviewMode": 2, + "m_OutputNode": { + "m_Id": "" + }, + "m_ActiveTargets": [ + { + "m_Id": "d65435bf460942d3b115a5461cbc1b1c" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SubGraphNode", + "m_ObjectId": "024f88ab75b546ab8fa8d3500dea126b", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Main Light", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -822.9999389648438, + "y": 199.99993896484376, + "width": 208.0, + "height": 326.0 + } + }, + "m_Slots": [ + { + "m_Id": "5e88914508c2413bb859e14f084bb0c3" + }, + { + "m_Id": "8561821d0d1e49ea939d3fb691e38b2a" + }, + { + "m_Id": "6596cc2544f4454faefc33ac409ce223" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedSubGraph": "{\n \"subGraph\": {\n \"fileID\": -5475051401550479605,\n \"guid\": \"970d962ef25c3084987fd10643902eed\",\n \"type\": 3\n }\n}", + "m_PropertyGuids": [], + "m_PropertyIds": [], + "m_Dropdowns": [], + "m_DropdownSelectedEntries": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "1e82bb8337ba43d69d435b5ee56dc5a3", + "m_Id": 0, + "m_DisplayName": "Base Color", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "BaseColor", + "m_StageCapability": 2, + "m_Value": { + "x": 0.5, + "y": 0.5, + "z": 0.5 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_ColorMode": 0, + "m_DefaultColor": { + "r": 0.5, + "g": 0.5, + "b": 0.5, + "a": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "204503a635bc44e5954c48b1347ff1b6", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.TangentMaterialSlot", + "m_ObjectId": "213e0eb1c16141028d093ec09ffcd3db", + "m_Id": 0, + "m_DisplayName": "Tangent", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Tangent", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "4e5077489d9545fa8fb06696fd6aa388", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Position", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "5b12a1f163dd4478a3d17d9091612f04" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Position" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "57e83786faf449e8baf69e3451839acf", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Tangent", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "213e0eb1c16141028d093ec09ffcd3db" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Tangent" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PositionMaterialSlot", + "m_ObjectId": "5b12a1f163dd4478a3d17d9091612f04", + "m_Id": 0, + "m_DisplayName": "Position", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Position", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "5e88914508c2413bb859e14f084bb0c3", + "m_Id": 1, + "m_DisplayName": "Direction", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Direction", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "6596cc2544f4454faefc33ac409ce223", + "m_Id": 3, + "m_DisplayName": "CullingMask", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "CullingMask", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DotProductNode", + "m_ObjectId": "6a56527b9e8f46a18becf2ac99297be6", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Dot Product", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -535.0, + "y": 92.00001525878906, + "width": 208.0, + "height": 302.0 + } + }, + "m_Slots": [ + { + "m_Id": "dfbfb37652684f4ca506414c95153330" + }, + { + "m_Id": "204503a635bc44e5954c48b1347ff1b6" + }, + { + "m_Id": "ac55461dcec94ef9b1d8870ea01d783e" + } + ], + "synonyms": [ + "scalar product" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "8561821d0d1e49ea939d3fb691e38b2a", + "m_Id": 2, + "m_DisplayName": "Colour", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Colour", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalUnlitSubTarget", + "m_ObjectId": "88addc98ad38492aa6ca081e19051db9" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "9a213aae1c654382b0047dacd4c68aa8", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Normal", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "afc764de1a914e9c9a4954fb8d738484" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Normal" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "ac55461dcec94ef9b1d8870ea01d783e", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "ae172a36b6524f809538a0e78ffda2d4", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.BaseColor", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "1e82bb8337ba43d69d435b5ee56dc5a3" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.BaseColor" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "afc764de1a914e9c9a4954fb8d738484", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalVectorNode", + "m_ObjectId": "b1f7abe68093435fa5fc9bad18ba799d", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Normal Vector", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -823.0000610351563, + "y": -223.00001525878907, + "width": 208.00006103515626, + "height": 315.0000305175781 + } + }, + "m_Slots": [ + { + "m_Id": "e6086d63ae86488abee7691f2bc16319" + } + ], + "synonyms": [ + "surface direction" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 2, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Space": 2 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalTarget", + "m_ObjectId": "d65435bf460942d3b115a5461cbc1b1c", + "m_ActiveSubTarget": { + "m_Id": "88addc98ad38492aa6ca081e19051db9" + }, + "m_AllowMaterialOverride": false, + "m_SurfaceType": 0, + "m_ZTestMode": 4, + "m_ZWriteControl": 0, + "m_AlphaMode": 0, + "m_RenderFace": 2, + "m_AlphaClip": false, + "m_CastShadows": true, + "m_ReceiveShadows": true, + "m_CustomEditorGUI": "", + "m_SupportVFX": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "dfbfb37652684f4ca506414c95153330", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "e6086d63ae86488abee7691f2bc16319", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CategoryData", + "m_ObjectId": "f5ea7f8354c34f23acad39c67f59ff68", + "m_Name": "", + "m_ChildObjectList": [] +} + diff --git a/GQ_URP/GQ/Assets/GameAssets/Shaders/New Shader Graph.shadergraph.meta b/GQ_URP/GQ/Assets/GameAssets/Shaders/New Shader Graph.shadergraph.meta new file mode 100644 index 000000000..1d9a36455 --- /dev/null +++ b/GQ_URP/GQ/Assets/GameAssets/Shaders/New Shader Graph.shadergraph.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7fc2c37ef2892fa40924323d8266a3ac +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} diff --git a/GQ_URP/GQ/Assets/GameAssets/Shaders/Shader Graphs_New Shader Graph.mat b/GQ_URP/GQ/Assets/GameAssets/Shaders/Shader Graphs_New Shader Graph.mat new file mode 100644 index 000000000..7e6c3da88 --- /dev/null +++ b/GQ_URP/GQ/Assets/GameAssets/Shaders/Shader Graphs_New Shader Graph.mat @@ -0,0 +1,54 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-6259409735391068844 +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: 5 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Shader Graphs_New Shader Graph + m_Shader: {fileID: -6465566751694194690, guid: 7fc2c37ef2892fa40924323d8266a3ac, + type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - 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: + - _QueueControl: 0 + - _QueueOffset: 0 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/GQ_URP/GQ/Assets/GameAssets/Shaders/Shader Graphs_New Shader Graph.mat.meta b/GQ_URP/GQ/Assets/GameAssets/Shaders/Shader Graphs_New Shader Graph.mat.meta new file mode 100644 index 000000000..85235de1f --- /dev/null +++ b/GQ_URP/GQ/Assets/GameAssets/Shaders/Shader Graphs_New Shader Graph.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e4c0f21ea4171b44d86268e2424c4262 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/GameAssets/URP_ShaderGraphCustomLighting-main.meta b/GQ_URP/GQ/Assets/GameAssets/URP_ShaderGraphCustomLighting-main.meta new file mode 100644 index 000000000..4e409e43f --- /dev/null +++ b/GQ_URP/GQ/Assets/GameAssets/URP_ShaderGraphCustomLighting-main.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e9688d23c6b31e4d86a304f0680ae7e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/GameAssets/URP_ShaderGraphCustomLighting-main/CustomLighting.hlsl b/GQ_URP/GQ/Assets/GameAssets/URP_ShaderGraphCustomLighting-main/CustomLighting.hlsl new file mode 100644 index 000000000..7cff69540 --- /dev/null +++ b/GQ_URP/GQ/Assets/GameAssets/URP_ShaderGraphCustomLighting-main/CustomLighting.hlsl @@ -0,0 +1,404 @@ +#ifndef CUSTOM_LIGHTING_INCLUDED +#define CUSTOM_LIGHTING_INCLUDED + +// @Cyanilux | https://github.com/Cyanilux/URP_ShaderGraphCustomLighting +// Note this version of the package assumes v12+ due to usage of "Branch on Input Connection" node +// For older versions, see branches on github repo! + +//------------------------------------------------------------------------------------------------------ +// Main Light +//------------------------------------------------------------------------------------------------------ + +/* +- Obtains the Direction, Color and Distance Atten for the Main Light. +- (DistanceAtten is either 0 or 1 for directional light, depending if the light is in the culling mask or not) +- If you want shadow attenutation, see MainLightShadows_float, or use MainLightFull_float instead +*/ +void MainLight_float (out float3 Direction, out float3 Color, out float DistanceAtten){ + #ifdef SHADERGRAPH_PREVIEW + Direction = normalize(float3(1,1,-0.4)); + Color = float4(1,1,1,1); + DistanceAtten = 1; + #else + Light mainLight = GetMainLight(); + Direction = mainLight.direction; + Color = mainLight.color; + DistanceAtten = mainLight.distanceAttenuation; + #endif +} + +//------------------------------------------------------------------------------------------------------ +// Main Light Layer Test +//------------------------------------------------------------------------------------------------------ + +#ifndef SHADERGRAPH_PREVIEW + #if UNITY_VERSION < 202220 + /* + GetMeshRenderingLayer() is only available in 2022.2+ + Previous versions need to use GetMeshRenderingLightLayer() + */ + uint GetMeshRenderingLayer(){ + return GetMeshRenderingLightLayer(); + } + #endif +#endif + +/* +- Tests whether the Main Light Layer Mask appears in the Rendering Layers from renderer +- (Used to support Light Layers, pass your shading from Main Light into this) +- To work in an Unlit Graph, requires keywords : + - Boolean Keyword, Global Multi-Compile "_LIGHT_LAYERS" +*/ +void MainLightLayer_float(float3 Shading, out float3 Out){ + #ifdef SHADERGRAPH_PREVIEW + Out = Shading; + #else + Out = 0; + uint meshRenderingLayers = GetMeshRenderingLayer(); + #ifdef _LIGHT_LAYERS + if (IsMatchingLightLayer(GetMainLight().layerMask, meshRenderingLayers)) + #endif + { + Out = Shading; + } + #endif +} + +/* +- Obtains the Light Cookie assigned to the Main Light +- (For usage, You'd want to Multiply the result with your Light Colour) +- To work in an Unlit Graph, requires keywords : + - Boolean Keyword, Global Multi-Compile "_LIGHT_COOKIES" +*/ +void MainLightCookie_float(float3 WorldPos, out float3 Cookie){ + Cookie = 1; + #if defined(_LIGHT_COOKIES) + Cookie = SampleMainLightCookie(WorldPos); + #endif +} + +//------------------------------------------------------------------------------------------------------ +// Main Light Shadows +//------------------------------------------------------------------------------------------------------ + +/* +- This undef (un-define) is required to prevent the "invalid subscript 'shadowCoord'" error, + which occurs when _MAIN_LIGHT_SHADOWS is used with 1/No Shadow Cascades with the Unlit Graph. +- It's not required for the PBR/Lit graph, so I'm using the SHADERPASS_FORWARD to ignore it for that pass +*/ +#ifndef SHADERGRAPH_PREVIEW + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + #if (SHADERPASS != SHADERPASS_FORWARD) + #undef REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR + #endif +#endif + +/* +- Samples the Shadowmap for the Main Light, based on the World Position passed in. (Position node) +- For shadows to work in the Unlit Graph, the following keywords must be defined in the blackboard : + - Enum Keyword, Global Multi-Compile "_MAIN_LIGHT", with entries : + - "SHADOWS" + - "SHADOWS_CASCADE" + - "SHADOWS_SCREEN" + - Boolean Keyword, Global Multi-Compile "_SHADOWS_SOFT" +- For a PBR/Lit Graph, these keywords are already handled for you. +*/ +void MainLightShadows_float (float3 WorldPos, half4 Shadowmask, out float ShadowAtten){ + #ifdef SHADERGRAPH_PREVIEW + ShadowAtten = 1; + #else + #if defined(_MAIN_LIGHT_SHADOWS_SCREEN) && !defined(_SURFACE_TYPE_TRANSPARENT) + float4 shadowCoord = ComputeScreenPos(TransformWorldToHClip(WorldPos)); + #else + float4 shadowCoord = TransformWorldToShadowCoord(WorldPos); + #endif + ShadowAtten = MainLightShadow(shadowCoord, WorldPos, Shadowmask, _MainLightOcclusionProbes); + #endif +} + +void MainLightShadows_float (float3 WorldPos, out float ShadowAtten){ + MainLightShadows_float(WorldPos, half4(1,1,1,1), ShadowAtten); +} + +//------------------------------------------------------------------------------------------------------ +// Shadowmask (v10+) +//------------------------------------------------------------------------------------------------------ + +/* +- Used to support "Shadowmask" mode in Lighting window. +- Should be sampled once in graph, then input into the Main Light Shadows and/or Additional Light subgraphs/functions. +- To work in an Unlit Graph, likely requires keywords : + - Boolean Keyword, Global Multi-Compile "SHADOWS_SHADOWMASK" + - Boolean Keyword, Global Multi-Compile "LIGHTMAP_SHADOW_MIXING" + - (also LIGHTMAP_ON, but I believe Shader Graph is already defining this one) +*/ +void Shadowmask_half (float2 lightmapUV, out half4 Shadowmask){ + #ifdef SHADERGRAPH_PREVIEW + Shadowmask = half4(1,1,1,1); + #else + OUTPUT_LIGHTMAP_UV(lightmapUV, unity_LightmapST, lightmapUV); + Shadowmask = SAMPLE_SHADOWMASK(lightmapUV); + #endif +} + +//------------------------------------------------------------------------------------------------------ +// Ambient Lighting +//------------------------------------------------------------------------------------------------------ + +/* +- Uses "SampleSH", the spherical harmonic stuff that ambient lighting / light probes uses. +- Will likely be used in the fragment, so will be per-pixel. +- Alternatively could use the Baked GI node, as it'll also handle this for you. +- Could also use the Ambient node, would be cheaper but the result won't automatically adapt based on the Environmental Lighting Source (Lighting tab). +*/ +void AmbientSampleSH_float (float3 WorldNormal, out float3 Ambient){ + #ifdef SHADERGRAPH_PREVIEW + Ambient = float3(0.1, 0.1, 0.1); // Default ambient colour for previews + #else + Ambient = SampleSH(WorldNormal); + #endif +} + +//------------------------------------------------------------------------------------------------------ +// Subtractive Baked GI +//------------------------------------------------------------------------------------------------------ +/* +- Used to support "Subtractive" mode in Lighting window. +- To work in an Unlit Graph, likely requires keywords : + - Boolean Keyword, Global Multi-Compile "LIGHTMAP_SHADOW_MIXING" + - (also LIGHTMAP_ON, but I believe Shader Graph is already defining this one) +*/ +void SubtractiveGI_float (float ShadowAtten, float3 normalWS, float3 bakedGI, out half3 result){ + #ifdef SHADERGRAPH_PREVIEW + result = half3(1,1,1); + #else + Light mainLight = GetMainLight(); + mainLight.shadowAttenuation = ShadowAtten; + MixRealtimeAndBakedGI(mainLight, normalWS, bakedGI); + result = bakedGI; + #endif +} + +//------------------------------------------------------------------------------------------------------ +// Mix Fog +//------------------------------------------------------------------------------------------------------ + +/* +- Adds fog to the colour, based on the Fog settings in the Lighting tab. +- Note : Not required for v12, can use Lerp instead. See "Mix Fog" SubGraph +*/ +void MixFog_float (float3 Colour, float Fog, out float3 Out){ + #ifdef SHADERGRAPH_PREVIEW + Out = Colour; + #else + Out = MixFog(Colour, Fog); + #endif +} + +//------------------------------------------------------------------------------------------------------ +// Default Additional Lights +//------------------------------------------------------------------------------------------------------ + +/* +- Handles additional lights (e.g. additional directional, point, spotlights) +- For custom lighting, you may want to duplicate this and swap the LightingLambert / LightingSpecular functions out. See Toon Example below! +- To work in the Unlit Graph, the following keywords must be defined in the blackboard : + - Boolean Keyword, Global Multi-Compile "_ADDITIONAL_LIGHT_SHADOWS" + - Boolean Keyword, Global Multi-Compile "_ADDITIONAL_LIGHTS" +- To support Forward+ path, + - Boolean Keyword, Global Multi-Compile "_FORWARD_PLUS" (2022.2+) +*/ +void AdditionalLights_float(float3 SpecColor, float Smoothness, float3 WorldPosition, float3 WorldNormal, float3 WorldView, half4 Shadowmask, + out float3 Diffuse, out float3 Specular) { + float3 diffuseColor = 0; + float3 specularColor = 0; +#ifndef SHADERGRAPH_PREVIEW + Smoothness = exp2(10 * Smoothness + 1); + uint pixelLightCount = GetAdditionalLightsCount(); + uint meshRenderingLayers = GetMeshRenderingLayer(); + + #if USE_FORWARD_PLUS + for (uint lightIndex = 0; lightIndex < min(URP_FP_DIRECTIONAL_LIGHTS_COUNT, MAX_VISIBLE_LIGHTS); lightIndex++) { + FORWARD_PLUS_SUBTRACTIVE_LIGHT_CHECK + Light light = GetAdditionalLight(lightIndex, WorldPosition, Shadowmask); + #ifdef _LIGHT_LAYERS + if (IsMatchingLightLayer(light.layerMask, meshRenderingLayers)) + #endif + { + // Blinn-Phong + float3 attenuatedLightColor = light.color * (light.distanceAttenuation * light.shadowAttenuation); + diffuseColor += LightingLambert(attenuatedLightColor, light.direction, WorldNormal); + specularColor += LightingSpecular(attenuatedLightColor, light.direction, WorldNormal, WorldView, float4(SpecColor, 0), Smoothness); + } + } + #endif + + // For Foward+ the LIGHT_LOOP_BEGIN macro will use inputData.normalizedScreenSpaceUV, inputData.positionWS, so create that: + InputData inputData = (InputData)0; + float4 screenPos = ComputeScreenPos(TransformWorldToHClip(WorldPosition)); + inputData.normalizedScreenSpaceUV = screenPos.xy / screenPos.w; + inputData.positionWS = WorldPosition; + + LIGHT_LOOP_BEGIN(pixelLightCount) + Light light = GetAdditionalLight(lightIndex, WorldPosition, Shadowmask); + #ifdef _LIGHT_LAYERS + if (IsMatchingLightLayer(light.layerMask, meshRenderingLayers)) + #endif + { + // Blinn-Phong + float3 attenuatedLightColor = light.color * (light.distanceAttenuation * light.shadowAttenuation); + diffuseColor += LightingLambert(attenuatedLightColor, light.direction, WorldNormal); + specularColor += LightingSpecular(attenuatedLightColor, light.direction, WorldNormal, WorldView, float4(SpecColor, 0), Smoothness); + } + LIGHT_LOOP_END +#endif + + Diffuse = diffuseColor; + Specular = specularColor; +} + +// For backwards compatibility (before Shadowmask was introduced) +void AdditionalLights_float(float3 SpecColor, float Smoothness, float3 WorldPosition, float3 WorldNormal, float3 WorldView, + out float3 Diffuse, out float3 Specular) { +AdditionalLights_float(SpecColor, Smoothness, WorldPosition, WorldNormal, WorldView, half4(1,1,1,1), Diffuse, Specular); +} + +//------------------------------------------------------------------------------------------------------ +// Additional Lights Toon Example +//------------------------------------------------------------------------------------------------------ + +/* +- Calculates light attenuation values to produce multiple bands for a toon effect. See AdditionalLightsToon function below +*/ +#ifndef SHADERGRAPH_PREVIEW +float ToonAttenuation(int lightIndex, float3 positionWS, float pointBands, float spotBands){ + #if !USE_FORWARD_PLUS + lightIndex = GetPerObjectLightIndex(lightIndex); + #endif + #if USE_STRUCTURED_BUFFER_FOR_LIGHT_DATA + float4 lightPositionWS = _AdditionalLightsBuffer[lightIndex].position; + half4 spotDirection = _AdditionalLightsBuffer[lightIndex].spotDirection; + half4 distanceAndSpotAttenuation = _AdditionalLightsBuffer[lightIndex].attenuation; + #else + float4 lightPositionWS = _AdditionalLightsPosition[lightIndex]; + half4 spotDirection = _AdditionalLightsSpotDir[lightIndex]; + half4 distanceAndSpotAttenuation = _AdditionalLightsAttenuation[lightIndex]; + #endif + + // Point + float3 lightVector = lightPositionWS.xyz - positionWS * lightPositionWS.w; + float distanceSqr = max(dot(lightVector, lightVector), HALF_MIN); + float range = rsqrt(distanceAndSpotAttenuation.x); + float dist = sqrt(distanceSqr) / range; + + // Spot + half3 lightDirection = half3(lightVector * rsqrt(distanceSqr)); + half SdotL = dot(spotDirection.xyz, lightDirection); + half spotAtten = saturate(SdotL * distanceAndSpotAttenuation.z + distanceAndSpotAttenuation.w); + spotAtten *= spotAtten; + float maskSpotToRange = step(dist, 1); + + // Atten + bool isSpot = (distanceAndSpotAttenuation.z > 0); + return isSpot ? + //step(0.01, spotAtten) : // cheaper if you just want "1" band for spot lights + (floor(spotAtten * spotBands) / spotBands) * maskSpotToRange : + saturate(1.0 - floor(dist * pointBands) / pointBands); +} +#endif + +/* +- Handles additional lights (e.g. point, spotlights) with banded toon effect +- For shadows to work in the Unlit Graph, the following keywords must be defined in the blackboard : + - Boolean Keyword, Global Multi-Compile "_ADDITIONAL_LIGHT_SHADOWS" + - Boolean Keyword, Global Multi-Compile "_ADDITIONAL_LIGHTS" (required to prevent the one above from being stripped from builds) +- For a PBR/Lit Graph, these keywords are already handled for you. +*/ +void AdditionalLightsToon_float(float3 SpecColor, float Smoothness, float3 WorldPosition, float3 WorldNormal, float3 WorldView, half4 Shadowmask, + float PointLightBands, float SpotLightBands, + out float3 Diffuse, out float3 Specular) { + float3 diffuseColor = 0; + float3 specularColor = 0; + +#ifndef SHADERGRAPH_PREVIEW + Smoothness = exp2(10 * Smoothness + 1); + uint pixelLightCount = GetAdditionalLightsCount(); + uint meshRenderingLayers = GetMeshRenderingLayer(); + + #if USE_FORWARD_PLUS + for (uint lightIndex = 0; lightIndex < min(URP_FP_DIRECTIONAL_LIGHTS_COUNT, MAX_VISIBLE_LIGHTS); lightIndex++) { + FORWARD_PLUS_SUBTRACTIVE_LIGHT_CHECK + Light light = GetAdditionalLight(lightIndex, WorldPosition, Shadowmask); + #ifdef _LIGHT_LAYERS + if (IsMatchingLightLayer(light.layerMask, meshRenderingLayers)) + #endif + { + if (PointLightBands <= 1 && SpotLightBands <= 1){ + // Solid colour lights + diffuseColor += light.color * step(0.0001, light.distanceAttenuation * light.shadowAttenuation); + }else{ + // Multiple bands + diffuseColor += light.color * light.shadowAttenuation * ToonAttenuation(lightIndex, WorldPosition, PointLightBands, SpotLightBands); + } + } + } + #endif + + // For Foward+ the LIGHT_LOOP_BEGIN macro will use inputData.normalizedScreenSpaceUV, inputData.positionWS, so create that: + InputData inputData = (InputData)0; + float4 screenPos = ComputeScreenPos(TransformWorldToHClip(WorldPosition)); + inputData.normalizedScreenSpaceUV = screenPos.xy / screenPos.w; + inputData.positionWS = WorldPosition; + + LIGHT_LOOP_BEGIN(pixelLightCount) + Light light = GetAdditionalLight(lightIndex, WorldPosition, Shadowmask); + #ifdef _LIGHT_LAYERS + if (IsMatchingLightLayer(light.layerMask, meshRenderingLayers)) + #endif + { + if (PointLightBands <= 1 && SpotLightBands <= 1){ + // Solid colour lights + diffuseColor += light.color * step(0.0001, light.distanceAttenuation * light.shadowAttenuation); + }else{ + // Multiple bands + diffuseColor += light.color * light.shadowAttenuation * ToonAttenuation(lightIndex, WorldPosition, PointLightBands, SpotLightBands); + } + } + LIGHT_LOOP_END +#endif + +/* +#ifndef SHADERGRAPH_PREVIEW + Smoothness = exp2(10 * Smoothness + 1); + WorldNormal = normalize(WorldNormal); + WorldView = SafeNormalize(WorldView); + int pixelLightCount = GetAdditionalLightsCount(); + for (int i = 0; i < pixelLightCount; ++i) { + Light light = GetAdditionalLight(i, WorldPosition, Shadowmask); + + // DIFFUSE + if (PointLightBands <= 1 && SpotLightBands <= 1){ + // Solid colour lights + diffuseColor += light.color * step(0.0001, light.distanceAttenuation * light.shadowAttenuation); + }else{ + // Multiple bands : + diffuseColor += light.color * light.shadowAttenuation * ToonAttenuation(i, WorldPosition, PointLightBands, SpotLightBands); + } + } +#endif +*/ + + Diffuse = diffuseColor; + Specular = specularColor; + // Didn't really like the look of specular lighting in the toon shader here, so just keeping it at 0 +} + +// For backwards compatibility (before Shadowmask was introduced) +void AdditionalLightsToon_float(float3 SpecColor, float Smoothness, float3 WorldPosition, float3 WorldNormal, float3 WorldView, + float PointLightBands, float SpotLightBands, + out float3 Diffuse, out float3 Specular) { +AdditionalLightsToon_float(SpecColor, Smoothness, WorldPosition, WorldNormal, WorldView, half4(1,1,1,1), + PointLightBands, SpotLightBands,Diffuse, Specular); +} + +#endif // CUSTOM_LIGHTING_INCLUDED diff --git a/GQ_URP/GQ/Assets/GameAssets/URP_ShaderGraphCustomLighting-main/CustomLighting.hlsl.meta b/GQ_URP/GQ/Assets/GameAssets/URP_ShaderGraphCustomLighting-main/CustomLighting.hlsl.meta new file mode 100644 index 000000000..b527b4e5e --- /dev/null +++ b/GQ_URP/GQ/Assets/GameAssets/URP_ShaderGraphCustomLighting-main/CustomLighting.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5c09ec492074d214fbe1a19781ad15e8 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/GameAssets/URP_ShaderGraphCustomLighting-main/SubGraphs.meta b/GQ_URP/GQ/Assets/GameAssets/URP_ShaderGraphCustomLighting-main/SubGraphs.meta new file mode 100644 index 000000000..4ca18dd78 --- /dev/null +++ b/GQ_URP/GQ/Assets/GameAssets/URP_ShaderGraphCustomLighting-main/SubGraphs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 30d78a5ce9b557c429a7ea167057faef +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/GameAssets/URP_ShaderGraphCustomLighting-main/SubGraphs/Main Light.shadersubgraph b/GQ_URP/GQ/Assets/GameAssets/URP_ShaderGraphCustomLighting-main/SubGraphs/Main Light.shadersubgraph new file mode 100644 index 000000000..aa8803405 --- /dev/null +++ b/GQ_URP/GQ/Assets/GameAssets/URP_ShaderGraphCustomLighting-main/SubGraphs/Main Light.shadersubgraph @@ -0,0 +1,326 @@ +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.GraphData", + "m_ObjectId": "c74005a6471a43bfbba1a72bd79a3a70", + "m_Properties": [], + "m_Keywords": [], + "m_Dropdowns": [], + "m_CategoryData": [ + { + "m_Id": "ea839da0743e41379af3acae1158e7eb" + } + ], + "m_Nodes": [ + { + "m_Id": "0f043bb7e9b9d1849a740f31c19b79a8" + }, + { + "m_Id": "3be2118d2270ff818ec5f0f1353e249f" + } + ], + "m_GroupDatas": [], + "m_StickyNoteDatas": [], + "m_Edges": [ + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "3be2118d2270ff818ec5f0f1353e249f" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "0f043bb7e9b9d1849a740f31c19b79a8" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "3be2118d2270ff818ec5f0f1353e249f" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "0f043bb7e9b9d1849a740f31c19b79a8" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "3be2118d2270ff818ec5f0f1353e249f" + }, + "m_SlotId": 3 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "0f043bb7e9b9d1849a740f31c19b79a8" + }, + "m_SlotId": 3 + } + } + ], + "m_VertexContext": { + "m_Position": { + "x": 259.0, + "y": -74.0 + }, + "m_Blocks": [] + }, + "m_FragmentContext": { + "m_Position": { + "x": 259.0, + "y": 126.0 + }, + "m_Blocks": [] + }, + "m_PreviewData": { + "serializedMesh": { + "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "preventRotation": false + }, + "m_Path": "Custom Lighting", + "m_GraphPrecision": 0, + "m_PreviewMode": 2, + "m_OutputNode": { + "m_Id": "0f043bb7e9b9d1849a740f31c19b79a8" + }, + "m_ActiveTargets": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SubGraphOutputNode", + "m_ObjectId": "0f043bb7e9b9d1849a740f31c19b79a8", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Out_Vector1", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 239.0, + "y": -74.0, + "width": 127.0, + "height": 125.0 + } + }, + "m_Slots": [ + { + "m_Id": "a0d02e573b3ba68fa9f13362f0e6255f" + }, + { + "m_Id": "bd707ec20be29181868244301b2ba07f" + }, + { + "m_Id": "a709bcfbde214756bfb88dccd590d8f4" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "IsFirstSlotValid": true +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "3be2118d2270ff818ec5f0f1353e249f", + "m_Group": { + "m_Id": "" + }, + "m_Name": "MainLight (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 28.0, + "y": -74.0, + "width": 208.0, + "height": 326.0 + } + }, + "m_Slots": [ + { + "m_Id": "6a81d3d5075bf688be4c962ee8f2e01b" + }, + { + "m_Id": "4a6dd49c99fb4d8088e5738f060aecf6" + }, + { + "m_Id": "92a421c8566b451bbf9906125a90f7c0" + } + ], + "synonyms": [ + "code", + "HLSL" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "MainLight", + "m_FunctionSource": "5c09ec492074d214fbe1a19781ad15e8", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "4a6dd49c99fb4d8088e5738f060aecf6", + "m_Id": 2, + "m_DisplayName": "Colour", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Colour", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "6a81d3d5075bf688be4c962ee8f2e01b", + "m_Id": 1, + "m_DisplayName": "Direction", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Direction", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "92a421c8566b451bbf9906125a90f7c0", + "m_Id": 3, + "m_DisplayName": "DistanceAtten", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "DistanceAtten", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "a0d02e573b3ba68fa9f13362f0e6255f", + "m_Id": 1, + "m_DisplayName": "Direction", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Direction", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a709bcfbde214756bfb88dccd590d8f4", + "m_Id": 3, + "m_DisplayName": "CullingMask", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "CullingMask", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "bd707ec20be29181868244301b2ba07f", + "m_Id": 2, + "m_DisplayName": "Colour", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Colour", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [ + "X", + "Y", + "Z" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CategoryData", + "m_ObjectId": "ea839da0743e41379af3acae1158e7eb", + "m_Name": "", + "m_ChildObjectList": [] +} + diff --git a/GQ_URP/GQ/Assets/GameAssets/URP_ShaderGraphCustomLighting-main/SubGraphs/Main Light.shadersubgraph.meta b/GQ_URP/GQ/Assets/GameAssets/URP_ShaderGraphCustomLighting-main/SubGraphs/Main Light.shadersubgraph.meta new file mode 100644 index 000000000..fda565a8c --- /dev/null +++ b/GQ_URP/GQ/Assets/GameAssets/URP_ShaderGraphCustomLighting-main/SubGraphs/Main Light.shadersubgraph.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 970d962ef25c3084987fd10643902eed +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 60072b568d64c40a485e0fc55012dc9f, type: 3} diff --git a/GQ_URP/GQ/Assets/Model/4.FBX b/GQ_URP/GQ/Assets/Model/4.FBX deleted file mode 100644 index 34aa1c767..000000000 Binary files a/GQ_URP/GQ/Assets/Model/4.FBX and /dev/null differ diff --git a/GQ_URP/GQ/Assets/Model/4.prefab b/GQ_URP/GQ/Assets/Model/4.prefab deleted file mode 100644 index d9f7032d3..000000000 --- a/GQ_URP/GQ/Assets/Model/4.prefab +++ /dev/null @@ -1,4096 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &33977386032789211 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6119288162883222819} - - component: {fileID: 7400164379704262871} - - component: {fileID: 856716643730617821} - m_Layer: 0 - m_Name: Object001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6119288162883222819 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 33977386032789211} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.24042502, y: 0.30274874, z: -0.24046132} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7400164379704262871 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 33977386032789211} - m_Mesh: {fileID: -3292925553009838691, guid: 28f26d95cdf94864592846ed58340cb3, type: 3} ---- !u!23 &856716643730617821 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 33977386032789211} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: b5151be299690364ea2211f61267eb84, 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!1 &92626018952599314 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2670961046468959056} - - component: {fileID: 283005517828372398} - - component: {fileID: 5032545501821235847} - m_Layer: 0 - m_Name: Object014 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2670961046468959056 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 92626018952599314} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.38336894, y: 0.16772969, z: 0.011470437} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &283005517828372398 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 92626018952599314} - m_Mesh: {fileID: 3941715523697911101, guid: 28f26d95cdf94864592846ed58340cb3, type: 3} ---- !u!23 &5032545501821235847 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 92626018952599314} - 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: f7c4b8b2d4dc9ee4c902e550c5b74afa, 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!1 &245511055717927824 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7489437698606522303} - - component: {fileID: 4228532153024113752} - - component: {fileID: 9167195371703890529} - m_Layer: 11 - m_Name: Cube (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7489437698606522303 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 245511055717927824} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.14028475, y: -0.2543218, z: 0.0014539659} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4228532153024113752 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 245511055717927824} - 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!114 &9167195371703890529 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 245511055717927824} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 13 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &651793803853835041 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4654744948336633963} - - component: {fileID: 711994728761686608} - - component: {fileID: 9086921261179904102} - m_Layer: 11 - m_Name: Cube (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4654744948336633963 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 651793803853835041} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.21187651, y: -0.25432175, z: 0.0013072491} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &711994728761686608 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 651793803853835041} - 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!114 &9086921261179904102 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 651793803853835041} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &727368846171847519 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5301690302351785913} - - component: {fileID: 5155606717499025299} - - component: {fileID: 2665472242371979696} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5301690302351785913 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 727368846171847519} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.14243215, y: -0.25432175, z: 0.0013072491} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5155606717499025299 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 727368846171847519} - 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!114 &2665472242371979696 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 727368846171847519} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &930897528316943841 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2507481323253939542} - - component: {fileID: 3562805587217788975} - - component: {fileID: 194465575771276163} - - component: {fileID: 8903296517616756556} - - component: {fileID: 7313861746920421898} - m_Layer: 0 - m_Name: Object013 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2507481323253939542 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 930897528316943841} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.05185745, y: 0.015885487, z: -0.24493846} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4086762172323424189} - - {fileID: 6360844010861976077} - - {fileID: 1433015647720836070} - - {fileID: 930086225133940799} - - {fileID: 1390497074947614941} - - {fileID: 7773085020640443258} - - {fileID: 3167640491024876685} - - {fileID: 539221102784017398} - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3562805587217788975 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 930897528316943841} - m_Mesh: {fileID: 2871469715313346890, guid: 28f26d95cdf94864592846ed58340cb3, type: 3} ---- !u!23 &194465575771276163 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 930897528316943841} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 256f4f5dccef8754b9365a690d0bfac0, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 10ac57f42847b114584025b79f149fd9, 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!114 &8903296517616756556 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 930897528316943841} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 3 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7313861746920421898 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 930897528316943841} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!1 &936137195691677742 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5434765532242026272} - - component: {fileID: 1752948021289003324} - - component: {fileID: 4337562474480385327} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5434765532242026272 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 936137195691677742} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.18679291, y: -0.2543218, z: 0.0014539659} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1752948021289003324 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 936137195691677742} - 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!114 &4337562474480385327 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 936137195691677742} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 15 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &943701109720627573 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 738981759284771298} - - component: {fileID: 7016641258399158980} - - component: {fileID: 8819333187300790281} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &738981759284771298 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 943701109720627573} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.18722865, y: -0.25432172, z: -0.00038543344} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8323098589442916757} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7016641258399158980 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 943701109720627573} - 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!114 &8819333187300790281 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 943701109720627573} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &999494214307488669 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5868631634912608408} - - component: {fileID: 1650557005356071507} - - component: {fileID: 3197713631058774094} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5868631634912608408 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 999494214307488669} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.13988912, y: -0.25432172, z: -0.00038543344} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8323098589442916757} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1650557005356071507 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 999494214307488669} - 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!114 &3197713631058774094 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 999494214307488669} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1029137664595953542 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7773085020640443258} - - component: {fileID: 5184561283187337163} - - component: {fileID: 4002251839188763255} - m_Layer: 11 - m_Name: Cube (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7773085020640443258 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1029137664595953542} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.16869393, y: -0.25432178, z: 0.00075024366} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2507481323253939542} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5184561283187337163 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1029137664595953542} - 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!114 &4002251839188763255 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1029137664595953542} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1281380911921082301 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1275361798343047303} - - component: {fileID: 4217441963864138044} - - component: {fileID: 508034101022457830} - m_Layer: 0 - m_Name: Object005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1275361798343047303 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1281380911921082301} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.13671009, y: 0.24499546, z: -0.24493846} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4217441963864138044 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1281380911921082301} - m_Mesh: {fileID: 9186633843763367028, guid: 28f26d95cdf94864592846ed58340cb3, type: 3} ---- !u!23 &508034101022457830 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1281380911921082301} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &1365683616990714555 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 539221102784017398} - - component: {fileID: 7150563738001338763} - - component: {fileID: 4715090751265202070} - m_Layer: 11 - m_Name: Cube (23) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &539221102784017398 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1365683616990714555} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.21603343, y: -0.25432178, z: 0.00075024366} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2507481323253939542} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7150563738001338763 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1365683616990714555} - 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!114 &4715090751265202070 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1365683616990714555} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1528570755150290898 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3167640491024876685} - - component: {fileID: 4765289355333436658} - - component: {fileID: 5380641672436031011} - m_Layer: 11 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3167640491024876685 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1528570755150290898} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.19309723, y: -0.25432178, z: 0.00075024366} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2507481323253939542} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4765289355333436658 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1528570755150290898} - 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!114 &5380641672436031011 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1528570755150290898} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1688194180857154542 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1924822792149162625} - - component: {fileID: 7487967203395714391} - - component: {fileID: 644593242689055214} - m_Layer: 11 - m_Name: Cube (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1924822792149162625 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1688194180857154542} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2348127, y: -0.25432175, z: 0.0013072491} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7487967203395714391 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1688194180857154542} - 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!114 &644593242689055214 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1688194180857154542} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1950165987285784694 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5663784634474542336} - - component: {fileID: 4642685761998079266} - - component: {fileID: 718417744492425495} - m_Layer: 0 - m_Name: Object006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5663784634474542336 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1950165987285784694} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.13671009, y: 0.30277747, z: -0.24046132} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4642685761998079266 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1950165987285784694} - m_Mesh: {fileID: -2639241166356525208, guid: 28f26d95cdf94864592846ed58340cb3, type: 3} ---- !u!23 &718417744492425495 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1950165987285784694} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: b5151be299690364ea2211f61267eb84, 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!1 &2477756837267149529 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4562686891317841772} - - component: {fileID: 5043928444263045795} - - component: {fileID: 1837247747550578571} - m_Layer: 0 - m_Name: Object008 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4562686891317841772 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2477756837267149529} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.05185745, y: 0.1223328, z: -0.23659208} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5043928444263045795 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2477756837267149529} - m_Mesh: {fileID: -7647463442239531939, guid: 28f26d95cdf94864592846ed58340cb3, type: 3} ---- !u!23 &1837247747550578571 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2477756837267149529} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: fb6232690c1c1084fb58523d5ee5aeb0, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: f7c4b8b2d4dc9ee4c902e550c5b74afa, 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!1 &2594662305249433149 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 290843825749419267} - - component: {fileID: 2242813642307735506} - - component: {fileID: 3925508042693092528} - m_Layer: 0 - m_Name: Object004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &290843825749419267 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2594662305249433149} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.13671009, y: 0.27388644, z: -0.24493846} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2242813642307735506 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2594662305249433149} - m_Mesh: {fileID: -8113768720884857512, guid: 28f26d95cdf94864592846ed58340cb3, type: 3} ---- !u!23 &3925508042693092528 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2594662305249433149} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &2635555832764114512 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8468648384193802193} - - component: {fileID: 1486989767022854706} - - component: {fileID: 5816749643867353882} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8468648384193802193 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2635555832764114512} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.21002254, y: -0.2543218, z: 0.0014539659} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1486989767022854706 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2635555832764114512} - 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!114 &5816749643867353882 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2635555832764114512} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 16 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2995014803923584650 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8323098589442916757} - - component: {fileID: 8544000227580025903} - - component: {fileID: 222722073074996778} - - component: {fileID: 6613014182719695156} - - component: {fileID: 1218629217407122417} - m_Layer: 0 - m_Name: Object009 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8323098589442916757 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2995014803923584650} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.05185745, y: 0.07218541, z: -0.24493846} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 256691139158178184} - - {fileID: 1906694044866705379} - - {fileID: 317021635897548470} - - {fileID: 2893669101147101536} - - {fileID: 5868631634912608408} - - {fileID: 4587345653751072146} - - {fileID: 738981759284771298} - - {fileID: 441815512299408587} - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8544000227580025903 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2995014803923584650} - m_Mesh: {fileID: 4944557015945844418, guid: 28f26d95cdf94864592846ed58340cb3, type: 3} ---- !u!23 &222722073074996778 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2995014803923584650} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: b04ebe66322f21045bd7a383224822cd, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 10ac57f42847b114584025b79f149fd9, 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!114 &6613014182719695156 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2995014803923584650} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &1218629217407122417 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2995014803923584650} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!1 &3025626359560349039 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9007131626296424314} - - component: {fileID: 5066897592313767291} - - component: {fileID: 4452420466733183607} - m_Layer: 11 - m_Name: Cube (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9007131626296424314 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3025626359560349039} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.110990904, y: -0.2543218, z: 0.0014539659} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5066897592313767291 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3025626359560349039} - 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!114 &4452420466733183607 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3025626359560349039} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3236353059204819363 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4086762172323424189} - - component: {fileID: 7562490932804864547} - - component: {fileID: 144512896466554052} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4086762172323424189 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3236353059204819363} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.05337709, y: -0.2543218, z: 0.00075024366} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2507481323253939542} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7562490932804864547 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3236353059204819363} - 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!114 &144512896466554052 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3236353059204819363} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3394641522363074818 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6688860450599134775} - - component: {fileID: 185490746350256435} - - component: {fileID: 68298273324125362} - m_Layer: 0 - m_Name: Object002 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6688860450599134775 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3394641522363074818} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.24042502, y: 0.2738577, z: -0.24493846} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &185490746350256435 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3394641522363074818} - m_Mesh: {fileID: -3996760141626369306, guid: 28f26d95cdf94864592846ed58340cb3, type: 3} ---- !u!23 &68298273324125362 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3394641522363074818} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &3462913980498872704 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2901160171421853119} - - component: {fileID: 2416564252278698352} - - component: {fileID: 6778246789072360150} - m_Layer: 0 - m_Name: Object007 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2901160171421853119 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3462913980498872704} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.05185745, y: 0.19447754, z: -0.23659208} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2416564252278698352 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3462913980498872704} - m_Mesh: {fileID: 7733717212360752527, guid: 28f26d95cdf94864592846ed58340cb3, type: 3} ---- !u!23 &6778246789072360150 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3462913980498872704} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: fb6232690c1c1084fb58523d5ee5aeb0, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: f7c4b8b2d4dc9ee4c902e550c5b74afa, 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!1 &3963680504501194127 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1906694044866705379} - - component: {fileID: 1047924700110016157} - - component: {fileID: 6353259563102086624} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1906694044866705379 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3963680504501194127} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.07044475, y: -0.25432175, z: -0.00038543344} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8323098589442916757} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1047924700110016157 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3963680504501194127} - 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!114 &6353259563102086624 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3963680504501194127} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4148278486323173959 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 317021635897548470} - - component: {fileID: 4451281654624970441} - - component: {fileID: 989082606102789772} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &317021635897548470 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4148278486323173959} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.09484808, y: -0.25432172, z: -0.00038543344} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8323098589442916757} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4451281654624970441 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4148278486323173959} - 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!114 &989082606102789772 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4148278486323173959} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4349638383414181049 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4857909006872624532} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4857909006872624532 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4349638383414181049} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -0.31895176, z: 0.29200006} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &4733327074226593442 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6360844010861976077} - - component: {fileID: 8887534476703300226} - - component: {fileID: 6830989607844473917} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6360844010861976077 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4733327074226593442} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0763133, y: -0.2543218, z: 0.00075024366} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2507481323253939542} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8887534476703300226 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4733327074226593442} - 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!114 &6830989607844473917 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4733327074226593442} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4793071152068577894 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2893669101147101536} - - component: {fileID: 3911008752236869225} - - component: {fileID: 8449668616136583559} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2893669101147101536 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4793071152068577894} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.11778429, y: -0.25432172, z: -0.00038543344} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8323098589442916757} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3911008752236869225 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4793071152068577894} - 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!114 &8449668616136583559 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4793071152068577894} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5638544397785728171 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 930086225133940799} - - component: {fileID: 4326488261108326864} - - component: {fileID: 6253139242094938541} - m_Layer: 11 - m_Name: Cube (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &930086225133940799 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5638544397785728171} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.12365285, y: -0.25432178, z: 0.00075024366} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2507481323253939542} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4326488261108326864 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5638544397785728171} - 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!114 &6253139242094938541 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5638544397785728171} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5982001286415446727 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8772761054049937775} - - component: {fileID: 2828570938485963437} - - component: {fileID: 4292234847808790166} - m_Layer: 11 - m_Name: Cube (23) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8772761054049937775 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5982001286415446727} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.042133413, y: -0.2543218, z: 0.0014539659} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2828570938485963437 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5982001286415446727} - 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!114 &4292234847808790166 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5982001286415446727} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6297733951492695600 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5786497821360035071} - - component: {fileID: 6404378026973549800} - - component: {fileID: 524691294686569609} - m_Layer: 11 - m_Name: Cube (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5786497821360035071 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6297733951492695600} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.16371, y: -0.2543218, z: 0.0014539659} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6404378026973549800 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6297733951492695600} - 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!114 &524691294686569609 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6297733951492695600} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 14 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6358310446362135734 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7232420567735254370} - - component: {fileID: 5965786651923390549} - - component: {fileID: 6591637297113177698} - m_Layer: 0 - m_Name: Object003 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7232420567735254370 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6358310446362135734} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.24042502, y: 0.24496673, z: -0.24493846} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5965786651923390549 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6358310446362135734} - m_Mesh: {fileID: -3531946766418785785, guid: 28f26d95cdf94864592846ed58340cb3, type: 3} ---- !u!23 &6591637297113177698 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6358310446362135734} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &6428291541732870265 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3306442754570312491} - - component: {fileID: 3898101949289865387} - - component: {fileID: 6500549396191679954} - m_Layer: 11 - m_Name: Cube (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3306442754570312491 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6428291541732870265} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.08815252, y: -0.2543218, z: 0.0014539659} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3898101949289865387 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6428291541732870265} - 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!114 &6500549396191679954 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6428291541732870265} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6469046747684259767 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4587345653751072146} - - component: {fileID: 6175563528102823729} - - component: {fileID: 6846545810961428484} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4587345653751072146 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6469046747684259767} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.16282535, y: -0.25432172, z: -0.00038543344} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8323098589442916757} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6175563528102823729 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6469046747684259767} - 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!114 &6846545810961428484 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6469046747684259767} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6473895387068723067 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3232267453720805657} - - component: {fileID: 3582549919663129681} - - component: {fileID: 2877970087529087680} - m_Layer: 0 - m_Name: Object015 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3232267453720805657 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6473895387068723067} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.41386184, y: 0.024925753, z: 0.0050615966} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3582549919663129681 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6473895387068723067} - m_Mesh: {fileID: 4154864533425439726, guid: 28f26d95cdf94864592846ed58340cb3, type: 3} ---- !u!23 &2877970087529087680 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6473895387068723067} - 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: cf5586d329d32c54eb0957902257f300, 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!1 &6600928841082735868 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 711119303161318467} - - component: {fileID: 1400055381688596878} - - component: {fileID: 5904575701487219384} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &711119303161318467 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6600928841082735868} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.095092595, y: -0.25432175, z: 0.0013072491} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1400055381688596878 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6600928841082735868} - 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!114 &5904575701487219384 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6600928841082735868} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6840686421572110235 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7719317737665368209} - - component: {fileID: 1744555152859660013} - - component: {fileID: 3474827854092236728} - - component: {fileID: 7044389591273042014} - - component: {fileID: 641480797925638898} - m_Layer: 0 - m_Name: Object010 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7719317737665368209 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6840686421572110235} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.05185745, y: 0.044035427, z: -0.24493846} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4120886974038851864} - - {fileID: 711119303161318467} - - {fileID: 8721330264735139712} - - {fileID: 5301690302351785913} - - {fileID: 7133978855568702785} - - {fileID: 4666053687880131375} - - {fileID: 4654744948336633963} - - {fileID: 1924822792149162625} - - {fileID: 8468648384193802193} - - {fileID: 5434765532242026272} - - {fileID: 5786497821360035071} - - {fileID: 7489437698606522303} - - {fileID: 9007131626296424314} - - {fileID: 3306442754570312491} - - {fileID: 749941280761715461} - - {fileID: 8772761054049937775} - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1744555152859660013 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6840686421572110235} - m_Mesh: {fileID: 7643229109163234770, guid: 28f26d95cdf94864592846ed58340cb3, type: 3} ---- !u!23 &3474827854092236728 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6840686421572110235} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 256f4f5dccef8754b9365a690d0bfac0, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 10ac57f42847b114584025b79f149fd9, 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!114 &7044389591273042014 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6840686421572110235} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &641480797925638898 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6840686421572110235} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!1 &7062540019897201554 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1433015647720836070} - - component: {fileID: 7275442455681335346} - - component: {fileID: 6451327595952553385} - m_Layer: 11 - m_Name: Cube (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1433015647720836070 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7062540019897201554} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.10071665, y: -0.25432178, z: 0.00075024366} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2507481323253939542} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7275442455681335346 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7062540019897201554} - 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!114 &6451327595952553385 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7062540019897201554} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7366051710844972696 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4120886974038851864} - - component: {fileID: 4234038456838736933} - - component: {fileID: 1304490805782478371} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4120886974038851864 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7366051710844972696} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.072156385, y: -0.25432175, z: 0.0013072491} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4234038456838736933 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7366051710844972696} - 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!114 &1304490805782478371 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7366051710844972696} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7560009664155383910 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8721330264735139712} - - component: {fileID: 3626846429331798264} - - component: {fileID: 2961121215612882026} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8721330264735139712 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7560009664155383910} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.11949594, y: -0.25432175, z: 0.0013072491} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3626846429331798264 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7560009664155383910} - 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!114 &2961121215612882026 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7560009664155383910} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8156525238099895543 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7133978855568702785} - - component: {fileID: 4538664369774238790} - - component: {fileID: 8009205424455887542} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7133978855568702785 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8156525238099895543} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.16453701, y: -0.25432175, z: 0.0013072491} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4538664369774238790 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8156525238099895543} - 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!114 &8009205424455887542 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8156525238099895543} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8225483298702712645 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4769852930367341830} - - component: {fileID: 2959731575672799572} - - component: {fileID: 7460240453211724731} - m_Layer: 0 - m_Name: Box034 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4769852930367341830 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8225483298702712645} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.3765682, y: 0.15951674, z: -0.24793866} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2959731575672799572 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8225483298702712645} - m_Mesh: {fileID: 4435042010609528433, guid: 28f26d95cdf94864592846ed58340cb3, type: 3} ---- !u!23 &7460240453211724731 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8225483298702712645} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 7c2ee9f6ddd789e4b91ad284adb51cfd, 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!1 &8272575399637660694 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1390497074947614941} - - component: {fileID: 8579186776769484568} - - component: {fileID: 3521840246812327882} - m_Layer: 11 - m_Name: Cube (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1390497074947614941 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8272575399637660694} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1457577, y: -0.25432178, z: 0.00075024366} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2507481323253939542} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8579186776769484568 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8272575399637660694} - 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!114 &3521840246812327882 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8272575399637660694} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8372871209293559637 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 749941280761715461} - - component: {fileID: 9057038095319016405} - - component: {fileID: 2024357538392255168} - m_Layer: 11 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &749941280761715461 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8372871209293559637} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.06526523, y: -0.2543218, z: 0.0014539659} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9057038095319016405 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8372871209293559637} - 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!114 &2024357538392255168 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8372871209293559637} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8664426649095418106 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3498339062783566657} - - component: {fileID: 6237592032279893184} - - component: {fileID: 5341618637215599406} - m_Layer: 0 - m_Name: Line001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3498339062783566657 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8664426649095418106} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.0005511009, y: 0.15947585, z: -0.25297612} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6237592032279893184 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8664426649095418106} - m_Mesh: {fileID: -7553716758358721678, guid: 28f26d95cdf94864592846ed58340cb3, type: 3} ---- !u!23 &5341618637215599406 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8664426649095418106} - 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: cf5586d329d32c54eb0957902257f300, 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!1 &8759903042995600867 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 441815512299408587} - - component: {fileID: 7554120571346381566} - - component: {fileID: 6205435573119207322} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &441815512299408587 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8759903042995600867} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.21016484, y: -0.25432172, z: -0.00038543344} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8323098589442916757} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7554120571346381566 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8759903042995600867} - 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!114 &6205435573119207322 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8759903042995600867} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8858739238434995973 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 256691139158178184} - - component: {fileID: 6345200922319036877} - - component: {fileID: 2856557271273895409} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &256691139158178184 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8858739238434995973} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.047508545, y: -0.25432175, z: -0.00038543344} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8323098589442916757} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6345200922319036877 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8858739238434995973} - 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!114 &2856557271273895409 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8858739238434995973} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8893563343369143354 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4666053687880131375} - - component: {fileID: 7012004761249954026} - - component: {fileID: 1483555348063263324} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4666053687880131375 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8893563343369143354} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.18747321, y: -0.25432175, z: 0.0013072491} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7012004761249954026 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8893563343369143354} - 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!114 &1483555348063263324 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8893563343369143354} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9061080424600717175 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8571682767415418317} - m_Layer: 0 - m_Name: 4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8571682767415418317 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9061080424600717175} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 3498339062783566657} - - {fileID: 4769852930367341830} - - {fileID: 6119288162883222819} - - {fileID: 6688860450599134775} - - {fileID: 7232420567735254370} - - {fileID: 290843825749419267} - - {fileID: 1275361798343047303} - - {fileID: 5663784634474542336} - - {fileID: 2901160171421853119} - - {fileID: 4562686891317841772} - - {fileID: 8323098589442916757} - - {fileID: 7719317737665368209} - - {fileID: 2507481323253939542} - - {fileID: 2670961046468959056} - - {fileID: 3232267453720805657} - - {fileID: 4857909006872624532} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} diff --git a/GQ_URP/GQ/Assets/Model/91.FBX b/GQ_URP/GQ/Assets/Model/91.FBX deleted file mode 100644 index 59043f25a..000000000 Binary files a/GQ_URP/GQ/Assets/Model/91.FBX and /dev/null differ diff --git a/GQ_URP/GQ/Assets/Model/91.FBX.meta b/GQ_URP/GQ/Assets/Model/91.FBX.meta deleted file mode 100644 index f2b20a55f..000000000 --- a/GQ_URP/GQ/Assets/Model/91.FBX.meta +++ /dev/null @@ -1,105 +0,0 @@ -fileFormatVersion: 2 -guid: 852cd874e9741f040b2e3367ce173af0 -ModelImporter: - serializedVersion: 21202 - internalIDToNameTable: [] - externalObjects: {} - materials: - materialImportMode: 2 - materialName: 0 - materialSearch: 1 - materialLocation: 1 - animations: - legacyGenerateAnimations: 4 - bakeSimulation: 0 - resampleCurves: 1 - optimizeGameObjects: 0 - removeConstantScaleCurves: 1 - motionNodeName: - rigImportErrors: - rigImportWarnings: - animationImportErrors: - animationImportWarnings: - animationRetargetingWarnings: - animationDoRetargetingWarnings: 0 - importAnimatedCustomProperties: 0 - importConstraints: 0 - animationCompression: 1 - animationRotationError: 0.5 - animationPositionError: 0.5 - animationScaleError: 0.5 - animationWrapMode: 0 - extraExposedTransformPaths: [] - extraUserProperties: [] - clipAnimations: [] - isReadable: 0 - meshes: - lODScreenPercentages: [] - globalScale: 1 - meshCompression: 0 - addColliders: 0 - useSRGBMaterialColor: 1 - sortHierarchyByName: 1 - importVisibility: 1 - importBlendShapes: 1 - importCameras: 1 - importLights: 1 - nodeNameCollisionStrategy: 1 - fileIdsGeneration: 2 - swapUVChannels: 0 - generateSecondaryUV: 1 - useFileUnits: 1 - keepQuads: 0 - weldVertices: 1 - bakeAxisConversion: 0 - preserveHierarchy: 0 - skinWeightsMode: 0 - maxBonesPerVertex: 4 - minBoneWeight: 0.001 - optimizeBones: 1 - meshOptimizationFlags: -1 - indexFormat: 0 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVMarginMethod: 1 - secondaryUVMinLightmapResolution: 40 - secondaryUVMinObjectScale: 1 - secondaryUVPackMargin: 4 - useFileScale: 1 - tangentSpace: - normalSmoothAngle: 60 - normalImportMode: 0 - tangentImportMode: 3 - normalCalculationMode: 4 - legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 - blendShapeNormalImportMode: 1 - normalSmoothingSource: 0 - referencedClips: [] - importAnimation: 1 - humanDescription: - serializedVersion: 3 - human: [] - skeleton: [] - armTwist: 0.5 - foreArmTwist: 0.5 - upperLegTwist: 0.5 - legTwist: 0.5 - armStretch: 0.05 - legStretch: 0.05 - feetSpacing: 0 - globalScale: 1 - rootMotionBoneName: - hasTranslationDoF: 0 - hasExtraRoot: 0 - skeletonHasParents: 1 - lastHumanDescriptionAvatarSource: {instanceID: 0} - autoGenerateAvatarMappingIfUnspecified: 1 - animationType: 2 - humanoidOversampling: 1 - avatarSetup: 0 - addHumanoidExtraRootOnlyWhenUsingAvatar: 1 - additionalBone: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/92.FBX b/GQ_URP/GQ/Assets/Model/92.FBX deleted file mode 100644 index b37178d5f..000000000 Binary files a/GQ_URP/GQ/Assets/Model/92.FBX and /dev/null differ diff --git a/GQ_URP/GQ/Assets/Model/92.FBX.meta b/GQ_URP/GQ/Assets/Model/92.FBX.meta deleted file mode 100644 index 038dfbf79..000000000 --- a/GQ_URP/GQ/Assets/Model/92.FBX.meta +++ /dev/null @@ -1,105 +0,0 @@ -fileFormatVersion: 2 -guid: 57a8613251bdebe47bb563969faae247 -ModelImporter: - serializedVersion: 21202 - internalIDToNameTable: [] - externalObjects: {} - materials: - materialImportMode: 2 - materialName: 0 - materialSearch: 1 - materialLocation: 1 - animations: - legacyGenerateAnimations: 4 - bakeSimulation: 0 - resampleCurves: 1 - optimizeGameObjects: 0 - removeConstantScaleCurves: 1 - motionNodeName: - rigImportErrors: - rigImportWarnings: - animationImportErrors: - animationImportWarnings: - animationRetargetingWarnings: - animationDoRetargetingWarnings: 0 - importAnimatedCustomProperties: 0 - importConstraints: 0 - animationCompression: 1 - animationRotationError: 0.5 - animationPositionError: 0.5 - animationScaleError: 0.5 - animationWrapMode: 0 - extraExposedTransformPaths: [] - extraUserProperties: [] - clipAnimations: [] - isReadable: 0 - meshes: - lODScreenPercentages: [] - globalScale: 1 - meshCompression: 0 - addColliders: 0 - useSRGBMaterialColor: 1 - sortHierarchyByName: 1 - importVisibility: 1 - importBlendShapes: 1 - importCameras: 1 - importLights: 1 - nodeNameCollisionStrategy: 1 - fileIdsGeneration: 2 - swapUVChannels: 0 - generateSecondaryUV: 1 - useFileUnits: 1 - keepQuads: 0 - weldVertices: 1 - bakeAxisConversion: 0 - preserveHierarchy: 0 - skinWeightsMode: 0 - maxBonesPerVertex: 4 - minBoneWeight: 0.001 - optimizeBones: 1 - meshOptimizationFlags: -1 - indexFormat: 0 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVMarginMethod: 1 - secondaryUVMinLightmapResolution: 40 - secondaryUVMinObjectScale: 1 - secondaryUVPackMargin: 4 - useFileScale: 1 - tangentSpace: - normalSmoothAngle: 60 - normalImportMode: 0 - tangentImportMode: 3 - normalCalculationMode: 4 - legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 - blendShapeNormalImportMode: 1 - normalSmoothingSource: 0 - referencedClips: [] - importAnimation: 1 - humanDescription: - serializedVersion: 3 - human: [] - skeleton: [] - armTwist: 0.5 - foreArmTwist: 0.5 - upperLegTwist: 0.5 - legTwist: 0.5 - armStretch: 0.05 - legStretch: 0.05 - feetSpacing: 0 - globalScale: 1 - rootMotionBoneName: - hasTranslationDoF: 0 - hasExtraRoot: 0 - skeletonHasParents: 1 - lastHumanDescriptionAvatarSource: {instanceID: 0} - autoGenerateAvatarMappingIfUnspecified: 1 - animationType: 2 - humanoidOversampling: 1 - avatarSetup: 0 - addHumanoidExtraRootOnlyWhenUsingAvatar: 1 - additionalBone: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/93.FBX b/GQ_URP/GQ/Assets/Model/93.FBX deleted file mode 100644 index e7a2773c0..000000000 Binary files a/GQ_URP/GQ/Assets/Model/93.FBX and /dev/null differ diff --git a/GQ_URP/GQ/Assets/Model/93.FBX.meta b/GQ_URP/GQ/Assets/Model/93.FBX.meta deleted file mode 100644 index c30da9a24..000000000 --- a/GQ_URP/GQ/Assets/Model/93.FBX.meta +++ /dev/null @@ -1,105 +0,0 @@ -fileFormatVersion: 2 -guid: 16396feabc30a2442b440658b16d0bb2 -ModelImporter: - serializedVersion: 21202 - internalIDToNameTable: [] - externalObjects: {} - materials: - materialImportMode: 2 - materialName: 0 - materialSearch: 1 - materialLocation: 1 - animations: - legacyGenerateAnimations: 4 - bakeSimulation: 0 - resampleCurves: 1 - optimizeGameObjects: 0 - removeConstantScaleCurves: 1 - motionNodeName: - rigImportErrors: - rigImportWarnings: - animationImportErrors: - animationImportWarnings: - animationRetargetingWarnings: - animationDoRetargetingWarnings: 0 - importAnimatedCustomProperties: 0 - importConstraints: 0 - animationCompression: 1 - animationRotationError: 0.5 - animationPositionError: 0.5 - animationScaleError: 0.5 - animationWrapMode: 0 - extraExposedTransformPaths: [] - extraUserProperties: [] - clipAnimations: [] - isReadable: 0 - meshes: - lODScreenPercentages: [] - globalScale: 1 - meshCompression: 0 - addColliders: 0 - useSRGBMaterialColor: 1 - sortHierarchyByName: 1 - importVisibility: 1 - importBlendShapes: 1 - importCameras: 1 - importLights: 1 - nodeNameCollisionStrategy: 1 - fileIdsGeneration: 2 - swapUVChannels: 0 - generateSecondaryUV: 1 - useFileUnits: 1 - keepQuads: 0 - weldVertices: 1 - bakeAxisConversion: 0 - preserveHierarchy: 0 - skinWeightsMode: 0 - maxBonesPerVertex: 4 - minBoneWeight: 0.001 - optimizeBones: 1 - meshOptimizationFlags: -1 - indexFormat: 0 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVMarginMethod: 1 - secondaryUVMinLightmapResolution: 40 - secondaryUVMinObjectScale: 1 - secondaryUVPackMargin: 4 - useFileScale: 1 - tangentSpace: - normalSmoothAngle: 60 - normalImportMode: 0 - tangentImportMode: 3 - normalCalculationMode: 4 - legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 - blendShapeNormalImportMode: 1 - normalSmoothingSource: 0 - referencedClips: [] - importAnimation: 1 - humanDescription: - serializedVersion: 3 - human: [] - skeleton: [] - armTwist: 0.5 - foreArmTwist: 0.5 - upperLegTwist: 0.5 - legTwist: 0.5 - armStretch: 0.05 - legStretch: 0.05 - feetSpacing: 0 - globalScale: 1 - rootMotionBoneName: - hasTranslationDoF: 0 - hasExtraRoot: 0 - skeletonHasParents: 1 - lastHumanDescriptionAvatarSource: {instanceID: 0} - autoGenerateAvatarMappingIfUnspecified: 1 - animationType: 2 - humanoidOversampling: 1 - avatarSetup: 0 - addHumanoidExtraRootOnlyWhenUsingAvatar: 1 - additionalBone: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/19.FBX b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/19.FBX index 1f07d3a88..8e7f8a6b5 100644 Binary files a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/19.FBX and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/19.FBX differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/36.FBX b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/36.FBX index 75fbcbcc2..506c69fdc 100644 Binary files a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/36.FBX and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/36.FBX differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/36.FBX.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/36.FBX.meta index 5bb43970c..a9052d4e8 100644 --- a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/36.FBX.meta +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/36.FBX.meta @@ -2,7 +2,10 @@ fileFormatVersion: 2 guid: f3d13bb371d9ee04dae157e80c18f24b ModelImporter: serializedVersion: 21202 - internalIDToNameTable: [] + internalIDToNameTable: + - first: + 74: 1827226128182048838 + second: Take 001 externalObjects: {} materials: materialImportMode: 2 diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/4.FBX b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/4.FBX index 6cecd7c24..e7e43e6d2 100644 Binary files a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/4.FBX and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/4.FBX differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/4.FBX.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/4.FBX.meta index 097d341c2..4c5dd878e 100644 --- a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/4.FBX.meta +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/4.FBX.meta @@ -2,7 +2,10 @@ fileFormatVersion: 2 guid: 02ee53bb9fd9bdf4d875f570480cc9cd ModelImporter: serializedVersion: 21202 - internalIDToNameTable: [] + internalIDToNameTable: + - first: + 74: 1827226128182048838 + second: Take 001 externalObjects: {} materials: materialImportMode: 2 diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/48.FBX b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/48.FBX index c4d6a57b4..16855353d 100644 Binary files a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/48.FBX and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/48.FBX differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/48.FBX.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/48.FBX.meta index 631f4e28d..334b915b1 100644 --- a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/48.FBX.meta +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/48.FBX.meta @@ -2,7 +2,10 @@ fileFormatVersion: 2 guid: e5a285c67cecfde4380c9d25d337f626 ModelImporter: serializedVersion: 21202 - internalIDToNameTable: [] + internalIDToNameTable: + - first: + 74: 1827226128182048838 + second: Take 001 externalObjects: {} materials: materialImportMode: 2 diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/55.FBX b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/55.FBX index 965bf6226..a68564cd5 100644 Binary files a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/55.FBX and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/55.FBX differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.FBX b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.FBX index 5612657a6..1d8214510 100644 Binary files a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.FBX and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.FBX differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.FBX.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.FBX.meta index bc3777988..4515926dc 100644 --- a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.FBX.meta +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.FBX.meta @@ -2,7 +2,10 @@ fileFormatVersion: 2 guid: 57cab604cd08b3c41bcfcb710ae06b1c ModelImporter: serializedVersion: 21202 - internalIDToNameTable: [] + internalIDToNameTable: + - first: + 74: 1827226128182048838 + second: Take 001 externalObjects: {} materials: materialImportMode: 2 diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1.meta new file mode 100644 index 000000000..2083d719f --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8a86a6b26174326428dc778cd38294dd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1/black_left.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1/black_left.jpg new file mode 100644 index 000000000..a0c4525b3 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1/black_left.jpg differ diff --git a/GQ_URP/GQ/Assets/UI/11.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1/black_left.jpg.meta similarity index 98% rename from GQ_URP/GQ/Assets/UI/11.jpg.meta rename to GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1/black_left.jpg.meta index ecc7b7d01..ededaa07b 100644 --- a/GQ_URP/GQ/Assets/UI/11.jpg.meta +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1/black_left.jpg.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 000b75b80db4b2c4dbe6119546437e12 +guid: c21394cd1ab0f304188363f962161def TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1/black_right.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1/black_right.jpg new file mode 100644 index 000000000..3e08512ca Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1/black_right.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1/black_right.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1/black_right.jpg.meta new file mode 100644 index 000000000..937b3d4ec --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1/black_right.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 353a950b9ff5f81419e544500f0ced74 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1/black_top.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1/black_top.jpg new file mode 100644 index 000000000..1c5fd6541 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1/black_top.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1/black_top.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1/black_top.jpg.meta new file mode 100644 index 000000000..428c3af64 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/1/black_top.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 1daf4787968e20f49b35b7438af9573f +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/GQZ_08.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/GQZ_08.jpg new file mode 100644 index 000000000..48d03977b Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/GQZ_08.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/GQZ_08.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/GQZ_08.jpg.meta new file mode 100644 index 000000000..227ba5bb5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/77.fbm/GQZ_08.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: f2d6868777c1a1c40aa4bbb95305b30c +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.FBX b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.FBX index 0a45ee69d..f3b8ebea3 100644 Binary files a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.FBX and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.FBX differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.FBX.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.FBX.meta index 1bfc80420..b531a2841 100644 --- a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.FBX.meta +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.FBX.meta @@ -2,7 +2,10 @@ fileFormatVersion: 2 guid: 52ee70528d4e7c44da94ea73fd0bde06 ModelImporter: serializedVersion: 21202 - internalIDToNameTable: [] + internalIDToNameTable: + - first: + 74: 1827226128182048838 + second: Take 001 externalObjects: {} materials: materialImportMode: 2 diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1.meta new file mode 100644 index 000000000..b8e4e32fc --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 94a02cd119300f84c94d04b42fca73bc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/GQZ_08.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/GQZ_08.jpg new file mode 100644 index 000000000..48d03977b Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/GQZ_08.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/GQZ_08.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/GQZ_08.jpg.meta new file mode 100644 index 000000000..0a5c53317 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/GQZ_08.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 0f1b861320decc341acd382d24080a13 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/black_left.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/black_left.jpg new file mode 100644 index 000000000..a0c4525b3 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/black_left.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/black_left.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/black_left.jpg.meta new file mode 100644 index 000000000..fca09effe --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/black_left.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: d6f8b3c135be9e243a79d3be474b634d +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/black_right.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/black_right.jpg new file mode 100644 index 000000000..3e08512ca Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/black_right.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/black_right.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/black_right.jpg.meta new file mode 100644 index 000000000..a5de0f449 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/black_right.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 30e657d98f0797a4bb7ea02083785c63 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/black_top.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/black_top.jpg new file mode 100644 index 000000000..1c5fd6541 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/black_top.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/black_top.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/black_top.jpg.meta new file mode 100644 index 000000000..6edd9da08 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/86.fbm/1/black_top.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 674a654621092024ea59baf958eaa028 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.FBX b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.FBX index 9f11edec5..3e29bacf0 100644 Binary files a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.FBX and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.FBX differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.FBX.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.FBX.meta index c74e6118e..f25a32d7f 100644 --- a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.FBX.meta +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.FBX.meta @@ -8,7 +8,7 @@ ModelImporter: materialImportMode: 2 materialName: 0 materialSearch: 1 - materialLocation: 1 + materialLocation: 0 animations: legacyGenerateAnimations: 4 bakeSimulation: 0 diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm.meta new file mode 100644 index 000000000..08aef09c1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 211c4c752c74c5b4b87f16a327df886e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_08.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_08.jpg new file mode 100644 index 000000000..48d03977b Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_08.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_08.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_08.jpg.meta new file mode 100644 index 000000000..ee45b7c02 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_08.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 37f2c3c824888e3459b4d185fc456cd6 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_16banka.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_16banka.jpg new file mode 100644 index 000000000..9d820e005 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_16banka.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_16banka.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_16banka.jpg.meta new file mode 100644 index 000000000..2d93acdaa --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_16banka.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 82caeda76cfea714daf5296b1d6d2e95 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_192.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_192.jpg new file mode 100644 index 000000000..f88d233ba Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_192.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_192.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_192.jpg.meta new file mode 100644 index 000000000..2a45ceb02 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_192.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 0a978f9e24b78b842bd560b5861bff3e +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_211.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_211.jpg new file mode 100644 index 000000000..e13f1a2f1 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_211.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_211.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_211.jpg.meta new file mode 100644 index 000000000..bc6215737 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_211.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 18790290c01bf6b4bab2cb9a8bc409e0 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_225.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_225.jpg new file mode 100644 index 000000000..48a91ea42 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_225.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_225.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_225.jpg.meta new file mode 100644 index 000000000..fc8d4ed68 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_225.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 654500af2e634944a8bd6e3d66890bd9 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_226.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_226.jpg new file mode 100644 index 000000000..3b51bb9b6 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_226.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_226.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_226.jpg.meta new file mode 100644 index 000000000..03076a96e --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_226.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 6f5d7e06a2f440249bdf304171bf741a +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_227.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_227.jpg new file mode 100644 index 000000000..434e375df Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_227.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_227.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_227.jpg.meta new file mode 100644 index 000000000..db730ea79 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_227.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: eef5fb6929a652945a11b6497c75953c +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_228.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_228.jpg new file mode 100644 index 000000000..998a006fd Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_228.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_228.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_228.jpg.meta new file mode 100644 index 000000000..1cd9ed087 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_228.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: f5a62d996e0861d498969ec751b55b27 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_229.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_229.jpg new file mode 100644 index 000000000..7e367bcee Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_229.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_229.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_229.jpg.meta new file mode 100644 index 000000000..bea955366 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_229.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 23751f51fb8eb1c4b8b6c192dc48e600 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_230.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_230.jpg new file mode 100644 index 000000000..ec128830e Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_230.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_230.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_230.jpg.meta new file mode 100644 index 000000000..b21d53337 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_230.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: ea5cabdbfc0201f42b463c8ef3be17a7 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_231.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_231.jpg new file mode 100644 index 000000000..bf5579868 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_231.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_231.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_231.jpg.meta new file mode 100644 index 000000000..e68207a98 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_231.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 42294ac30b3642a48bd191c443896861 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_232.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_232.jpg new file mode 100644 index 000000000..d81d95bc0 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_232.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_232.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_232.jpg.meta new file mode 100644 index 000000000..249ecb5c8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_232.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 294511ef889146f408037871395d7396 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_96.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_96.jpg new file mode 100644 index 000000000..902f6ec55 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_96.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_96.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_96.jpg.meta new file mode 100644 index 000000000..5a98e9190 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/GQZ_96.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 079425e007e67fb4e9972aaadedc368e +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_back.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_back.jpg new file mode 100644 index 000000000..9d820e005 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_back.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_back.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_back.jpg.meta new file mode 100644 index 000000000..4aae4816b --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_back.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 7e04d9877141a0143aa4f09f6ee4448c +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_bottom.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_bottom.jpg new file mode 100644 index 000000000..2ffa58875 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_bottom.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_bottom.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_bottom.jpg.meta new file mode 100644 index 000000000..9ec2e6979 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_bottom.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: a92841aaadb2b7f4f8af86fb1df5b9f4 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_left.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_left.jpg new file mode 100644 index 000000000..68a97aea8 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_left.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_left.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_left.jpg.meta new file mode 100644 index 000000000..9a692ae40 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_left.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: fa58abf9cb70304478904dd1f00ea406 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_right.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_right.jpg new file mode 100644 index 000000000..797fe158e Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_right.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_right.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_right.jpg.meta new file mode 100644 index 000000000..841b70976 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_right.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: be158f82e2e72a44fba69395dd6885a2 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_top.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_top.jpg new file mode 100644 index 000000000..9b73758b3 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_top.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_top.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_top.jpg.meta new file mode 100644 index 000000000..b51ac2815 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/94.fbm/banka_top.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: a3c70fddf1a3b2c4585a9fce86053039 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm.meta new file mode 100644 index 000000000..1377fb052 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fb069a6597631d4489b2d953045f5369 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_08.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_08.jpg new file mode 100644 index 000000000..48d03977b Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_08.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_08.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_08.jpg.meta new file mode 100644 index 000000000..3b4efb949 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_08.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 1784b151b74c2f44296926e86824c8e6 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_16banka.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_16banka.jpg new file mode 100644 index 000000000..9d820e005 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_16banka.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_16banka.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_16banka.jpg.meta new file mode 100644 index 000000000..13d340781 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_16banka.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: c446690c521382043b7462f3f3831d43 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_192.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_192.jpg new file mode 100644 index 000000000..f88d233ba Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_192.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_192.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_192.jpg.meta new file mode 100644 index 000000000..898bd146b --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_192.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: d13b8f38360557e4cbeec8727684872d +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_211.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_211.jpg new file mode 100644 index 000000000..e13f1a2f1 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_211.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_211.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_211.jpg.meta new file mode 100644 index 000000000..b301745b4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_211.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 693cff4042ece9c41b597b348f346689 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_225.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_225.jpg new file mode 100644 index 000000000..48a91ea42 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_225.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_225.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_225.jpg.meta new file mode 100644 index 000000000..ee927bf0f --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_225.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 6cd5c53752318df49819baa6ae3772e1 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_226.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_226.jpg new file mode 100644 index 000000000..3b51bb9b6 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_226.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_226.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_226.jpg.meta new file mode 100644 index 000000000..a5191072f --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_226.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: a6712dbf3ba221145a33398b46c5604e +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_227.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_227.jpg new file mode 100644 index 000000000..434e375df Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_227.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_227.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_227.jpg.meta new file mode 100644 index 000000000..528ecd8a3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_227.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 1160d45954c5cbc4285b1c562d545409 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_228.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_228.jpg new file mode 100644 index 000000000..998a006fd Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_228.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_228.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_228.jpg.meta new file mode 100644 index 000000000..50aefd61c --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_228.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 2566523b5f167af449c7b4b6448e64f2 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_229.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_229.jpg new file mode 100644 index 000000000..7e367bcee Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_229.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_229.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_229.jpg.meta new file mode 100644 index 000000000..9fcf142b9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_229.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 060be3f9bab2e3440bc4401b10273a53 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_230.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_230.jpg new file mode 100644 index 000000000..ec128830e Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_230.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_230.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_230.jpg.meta new file mode 100644 index 000000000..5284c600c --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_230.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: eacf13bf732cc2b4cae450bd74d3efa6 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_231.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_231.jpg new file mode 100644 index 000000000..bf5579868 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_231.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_231.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_231.jpg.meta new file mode 100644 index 000000000..24413b037 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_231.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: e0a9ff96b32e73c4eb47505c44e1e891 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_232.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_232.jpg new file mode 100644 index 000000000..d81d95bc0 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_232.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_232.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_232.jpg.meta new file mode 100644 index 000000000..1925a8edc --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_232.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: c2f4d6a389b723a4b934d6b879828b69 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_96.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_96.jpg new file mode 100644 index 000000000..902f6ec55 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_96.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_96.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_96.jpg.meta new file mode 100644 index 000000000..8958e0be6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/GQZ_96.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 3a83604a2d0d37644a528290675d75b3 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_back.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_back.jpg new file mode 100644 index 000000000..9d820e005 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_back.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_back.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_back.jpg.meta new file mode 100644 index 000000000..ded3d6a0b --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_back.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: e8357d7d5859a1c41b77755eae4020f9 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_bottom.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_bottom.jpg new file mode 100644 index 000000000..2ffa58875 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_bottom.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_bottom.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_bottom.jpg.meta new file mode 100644 index 000000000..720c54884 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_bottom.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 07340a07edb005743b4f2e87389a40a9 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_left.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_left.jpg new file mode 100644 index 000000000..68a97aea8 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_left.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_left.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_left.jpg.meta new file mode 100644 index 000000000..7ca1b1677 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_left.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: e4bf4161b526faa43b41350017fa2b13 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_right.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_right.jpg new file mode 100644 index 000000000..797fe158e Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_right.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_right.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_right.jpg.meta new file mode 100644 index 000000000..bbfe17559 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_right.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 3cfcc20080b127a4ba3d5569324c40df +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_top.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_top.jpg new file mode 100644 index 000000000..9b73758b3 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_top.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_top.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_top.jpg.meta new file mode 100644 index 000000000..4c98fd4c9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/941.fbm/banka_top.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: e42f874d6037d9c4291a4f620cd3c91c +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/9.27更改/95.FBX b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.FBX similarity index 100% rename from GQ_URP/GQ/Assets/Model/9.27更改/95.FBX rename to GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.FBX diff --git a/GQ_URP/GQ/Assets/Model/9.27更改/95.FBX.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.FBX.meta similarity index 99% rename from GQ_URP/GQ/Assets/Model/9.27更改/95.FBX.meta rename to GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.FBX.meta index 15e19fa91..1e4fa75c1 100644 --- a/GQ_URP/GQ/Assets/Model/9.27更改/95.FBX.meta +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.FBX.meta @@ -8,7 +8,7 @@ ModelImporter: materialImportMode: 2 materialName: 0 materialSearch: 1 - materialLocation: 1 + materialLocation: 0 animations: legacyGenerateAnimations: 4 bakeSimulation: 0 diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.fbm.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.fbm.meta new file mode 100644 index 000000000..37f86370d --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.fbm.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 877795fbf1ba94248bd6f92b6c8cb62c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.fbm/gq_28.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.fbm/gq_28.jpg new file mode 100644 index 000000000..41b6e305f Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.fbm/gq_28.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.fbm/gq_28.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.fbm/gq_28.jpg.meta new file mode 100644 index 000000000..ca00fc5a9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.fbm/gq_28.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: a296a16436a3eeb46a5a012aab391678 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.fbm/gq_30.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.fbm/gq_30.jpg new file mode 100644 index 000000000..0bf9080f9 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.fbm/gq_30.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.fbm/gq_30.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.fbm/gq_30.jpg.meta new file mode 100644 index 000000000..3c17fb975 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/95.fbm/gq_30.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: c3351853f1143404a80f811a190c2e4a +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/9.27更改/96.FBX b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.FBX similarity index 100% rename from GQ_URP/GQ/Assets/Model/9.27更改/96.FBX rename to GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.FBX diff --git a/GQ_URP/GQ/Assets/Model/9.27更改/96.FBX.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.FBX.meta similarity index 99% rename from GQ_URP/GQ/Assets/Model/9.27更改/96.FBX.meta rename to GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.FBX.meta index 9ed13c5b5..aa5bb45ad 100644 --- a/GQ_URP/GQ/Assets/Model/9.27更改/96.FBX.meta +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.FBX.meta @@ -8,7 +8,7 @@ ModelImporter: materialImportMode: 2 materialName: 0 materialSearch: 1 - materialLocation: 1 + materialLocation: 0 animations: legacyGenerateAnimations: 4 bakeSimulation: 0 diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.fbm.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.fbm.meta new file mode 100644 index 000000000..848d2f48a --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.fbm.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9b7b6667e396b9d4294a5e0b27e83a7b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.fbm/gq_29.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.fbm/gq_29.jpg new file mode 100644 index 000000000..1687c6309 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.fbm/gq_29.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.fbm/gq_29.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.fbm/gq_29.jpg.meta new file mode 100644 index 000000000..8c0837a3b --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.fbm/gq_29.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: ccd91e85ed2d73148ab1a4734ab19173 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.fbm/gq_30.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.fbm/gq_30.jpg new file mode 100644 index 000000000..0bf9080f9 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.fbm/gq_30.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.fbm/gq_30.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.fbm/gq_30.jpg.meta new file mode 100644 index 000000000..f18b5e34b --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/96.fbm/gq_30.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 9a93301d0af409d44be63b8a64fe9696 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/9.27更改/97.FBX b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.FBX similarity index 100% rename from GQ_URP/GQ/Assets/Model/9.27更改/97.FBX rename to GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.FBX diff --git a/GQ_URP/GQ/Assets/Model/9.27更改/97.FBX.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.FBX.meta similarity index 99% rename from GQ_URP/GQ/Assets/Model/9.27更改/97.FBX.meta rename to GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.FBX.meta index 3389da1be..1bbd8a444 100644 --- a/GQ_URP/GQ/Assets/Model/9.27更改/97.FBX.meta +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.FBX.meta @@ -8,7 +8,7 @@ ModelImporter: materialImportMode: 2 materialName: 0 materialSearch: 1 - materialLocation: 1 + materialLocation: 0 animations: legacyGenerateAnimations: 4 bakeSimulation: 0 diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.fbm.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.fbm.meta new file mode 100644 index 000000000..36ab8ea22 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.fbm.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b45213f1596e3354bbdae412eda768d5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.fbm/gq_30.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.fbm/gq_30.jpg new file mode 100644 index 000000000..0bf9080f9 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.fbm/gq_30.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.fbm/gq_30.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.fbm/gq_30.jpg.meta new file mode 100644 index 000000000..73413e2b0 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.fbm/gq_30.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 41684bfdc3a051546bb02907796aebfc +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.fbm/gq_33.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.fbm/gq_33.jpg new file mode 100644 index 000000000..6e8484728 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.fbm/gq_33.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.fbm/gq_33.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.fbm/gq_33.jpg.meta new file mode 100644 index 000000000..c996a3b42 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/97.fbm/gq_33.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: c87eef7192eaed14a919cf35cd5a1a07 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.FBX b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.FBX new file mode 100644 index 000000000..3d0fee3a4 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.FBX differ diff --git a/GQ_URP/GQ/Assets/Model/4.FBX.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.FBX.meta similarity index 95% rename from GQ_URP/GQ/Assets/Model/4.FBX.meta rename to GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.FBX.meta index c0e5359d4..4c3e12317 100644 --- a/GQ_URP/GQ/Assets/Model/4.FBX.meta +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.FBX.meta @@ -1,8 +1,11 @@ fileFormatVersion: 2 -guid: 28f26d95cdf94864592846ed58340cb3 +guid: 917f7bb172a7ab341883ca0510bd8a6d ModelImporter: serializedVersion: 21202 - internalIDToNameTable: [] + internalIDToNameTable: + - first: + 74: 1827226128182048838 + second: Take 001 externalObjects: {} materials: materialImportMode: 2 diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm.meta new file mode 100644 index 000000000..799b4218e --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cf3aabaf5037ddd4ca8f133a81018be3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1.meta new file mode 100644 index 000000000..da3f9304e --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 87863352f1f752f4c8925faf1d2cf113 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1/banka_back.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1/banka_back.jpg new file mode 100644 index 000000000..9d820e005 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1/banka_back.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1/banka_back.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1/banka_back.jpg.meta new file mode 100644 index 000000000..c0abfb621 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1/banka_back.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: a6eeef596d718444d955738bb9bf7e0c +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1/banka_bottom.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1/banka_bottom.jpg new file mode 100644 index 000000000..2ffa58875 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1/banka_bottom.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1/banka_bottom.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1/banka_bottom.jpg.meta new file mode 100644 index 000000000..a931b6f61 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1/banka_bottom.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: e21964ec6ca98ee4b902d4002b656030 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1/banka_right.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1/banka_right.jpg new file mode 100644 index 000000000..797fe158e Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1/banka_right.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1/banka_right.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1/banka_right.jpg.meta new file mode 100644 index 000000000..69b60a58a --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/1/banka_right.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: e24dd6d58ee0dcf4a92fb65073692042 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_08.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_08.jpg new file mode 100644 index 000000000..48d03977b Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_08.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_08.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_08.jpg.meta new file mode 100644 index 000000000..e3356d8ce --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_08.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 2a52d005ec3467b44a763c10c347f003 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_120.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_120.jpg new file mode 100644 index 000000000..53d4637ff Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_120.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_120.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_120.jpg.meta new file mode 100644 index 000000000..73ad46e1a --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_120.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 09b4ed366d0842c4d802431fa05224a5 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_124.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_124.jpg new file mode 100644 index 000000000..fbbf358b9 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_124.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_124.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_124.jpg.meta new file mode 100644 index 000000000..0a08f928c --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_124.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 1aad7b4a6965ae8439ac11086d9034c0 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_125.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_125.jpg new file mode 100644 index 000000000..004755707 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_125.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_125.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_125.jpg.meta new file mode 100644 index 000000000..7eaece5f7 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_125.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 47958cdb758ebef40ac565783694652f +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_16banka.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_16banka.jpg new file mode 100644 index 000000000..9d820e005 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_16banka.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_16banka.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_16banka.jpg.meta new file mode 100644 index 000000000..b4c43d3f1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_16banka.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 320f923c24f39754cb9e9acdcd97fc08 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_82.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_82.jpg new file mode 100644 index 000000000..d0d3a4f73 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_82.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_82.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_82.jpg.meta new file mode 100644 index 000000000..5ec099dd8 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/GQZ_82.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: ed4208f604746894db714c7a31dfee96 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_back.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_back.jpg new file mode 100644 index 000000000..9d820e005 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_back.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_back.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_back.jpg.meta new file mode 100644 index 000000000..e66f380d4 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_back.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 9e3b4b096c87d2143a22308efaf6a8f7 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_bottom.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_bottom.jpg new file mode 100644 index 000000000..2ffa58875 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_bottom.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_bottom.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_bottom.jpg.meta new file mode 100644 index 000000000..24bef40aa --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_bottom.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 85498c424ace58349b0008bc626424e3 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_left.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_left.jpg new file mode 100644 index 000000000..68a97aea8 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_left.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_left.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_left.jpg.meta new file mode 100644 index 000000000..353a3e656 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_left.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: f1a6e063855bbbf4cb794c833a0db1bb +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_right.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_right.jpg new file mode 100644 index 000000000..797fe158e Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_right.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_right.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_right.jpg.meta new file mode 100644 index 000000000..d7449d6b6 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_right.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 77b203213d5484f4c9137c4e96d45707 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_top.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_top.jpg new file mode 100644 index 000000000..9b73758b3 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_top.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_top.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_top.jpg.meta new file mode 100644 index 000000000..4495d5a00 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/banka_top.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: a6caa1d757ac5fb4eaa584623b825794 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_back.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_back.jpg new file mode 100644 index 000000000..6759d673e Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_back.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_back.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_back.jpg.meta new file mode 100644 index 000000000..4b178888d --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_back.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 9b14dac09f79ed341b7f4b5752b6a102 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_bottom.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_bottom.jpg new file mode 100644 index 000000000..8605f4cb9 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_bottom.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_bottom.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_bottom.jpg.meta new file mode 100644 index 000000000..55a0b105d --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_bottom.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 32f8de4ecc2417745b1236ceb9e1a9b9 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_left.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_left.jpg new file mode 100644 index 000000000..a0c4525b3 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_left.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_left.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_left.jpg.meta new file mode 100644 index 000000000..1e53e601d --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_left.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: cd7ea82eddc4be54d9846f07aa57bdfb +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_right.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_right.jpg new file mode 100644 index 000000000..3e08512ca Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_right.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_right.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_right.jpg.meta new file mode 100644 index 000000000..8c25f044c --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_right.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: ddc63d5639cd99c43b24841d04e9a30c +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_top.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_top.jpg new file mode 100644 index 000000000..1c5fd6541 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_top.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_top.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_top.jpg.meta new file mode 100644 index 000000000..276a0d9b1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/black_top.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 583f4069a9833eb4c860906f4164af20 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_01.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_01.jpg new file mode 100644 index 000000000..cf1a525e0 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_01.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_01.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_01.jpg.meta new file mode 100644 index 000000000..7e16e5dd2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_01.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 15a86e0a98011ef48a46d7d3b4e3eb77 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_02.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_02.jpg new file mode 100644 index 000000000..977118c19 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_02.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_02.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_02.jpg.meta new file mode 100644 index 000000000..912c8406b --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_02.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 9be97ca4cc6ef694fb4bf405cefdce17 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_03.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_03.jpg new file mode 100644 index 000000000..1fc92f4c0 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_03.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_03.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_03.jpg.meta new file mode 100644 index 000000000..4c7479490 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_03.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 5c97f288a9d7d214c8a75844647441e4 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_04.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_04.jpg new file mode 100644 index 000000000..3d1807b45 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_04.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_04.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_04.jpg.meta new file mode 100644 index 000000000..9a97a62dc --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_04.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: a144197c0cbfc054db672ec6e36131d9 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_05.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_05.jpg new file mode 100644 index 000000000..ff05c536f Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_05.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_05.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_05.jpg.meta new file mode 100644 index 000000000..e1540db87 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_05.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 78edca60d1695154793db19d0360f884 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_06.jpg b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_06.jpg new file mode 100644 index 000000000..e8964f965 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_06.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_06.jpg.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_06.jpg.meta new file mode 100644 index 000000000..d0b0eceec --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/98.fbm/xz_06.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: ede9520b62b35a744a8125b72484a563 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/gq_30.mat b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/gq_30.mat new file mode 100644 index 000000000..d771a291e --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/gq_30.mat @@ -0,0 +1,128 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-5081517694615846297 +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: 5 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: gq_30 + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: c3351853f1143404a80f811a190c2e4a, type: 3} + 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: 2800000, guid: c3351853f1143404a80f811a190c2e4a, 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} + - 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: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _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} + m_BuildTextureStacks: [] diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/gq_30.mat.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/gq_30.mat.meta new file mode 100644 index 000000000..b00c91877 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/gq_30.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ab89c3bda64bca9468cbe42c9757a018 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_01.mat b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_01.mat new file mode 100644 index 000000000..71d18bebb --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_01.mat @@ -0,0 +1,128 @@ +%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: xz_01 + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: 15a86e0a98011ef48a46d7d3b4e3eb77, type: 3} + 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: 2800000, guid: 15a86e0a98011ef48a46d7d3b4e3eb77, 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} + - 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: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _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} + m_BuildTextureStacks: [] +--- !u!114 &1473743283343616122 +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: 5 diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_01.mat.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_01.mat.meta new file mode 100644 index 000000000..bc799f0a3 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_01.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4d3df77c0c4f14341814cbf2052e5359 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_02.mat b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_02.mat new file mode 100644 index 000000000..be0140efa --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_02.mat @@ -0,0 +1,128 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-3905711292988616534 +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: 5 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: xz_02 + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: 9be97ca4cc6ef694fb4bf405cefdce17, type: 3} + 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: 2800000, guid: 9be97ca4cc6ef694fb4bf405cefdce17, 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} + - 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: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _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} + m_BuildTextureStacks: [] diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_02.mat.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_02.mat.meta new file mode 100644 index 000000000..a4f3ee542 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_02.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bb38dc61bd17b3c48a82bd90fa6fee2f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_03.mat b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_03.mat new file mode 100644 index 000000000..247bf0afa --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_03.mat @@ -0,0 +1,128 @@ +%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: xz_03 + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: 5c97f288a9d7d214c8a75844647441e4, type: 3} + 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: 2800000, guid: 5c97f288a9d7d214c8a75844647441e4, 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} + - 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: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _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} + m_BuildTextureStacks: [] +--- !u!114 &49191041051393196 +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: 5 diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_03.mat.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_03.mat.meta new file mode 100644 index 000000000..4fcf8c606 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_03.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 87d7c98c56bfb294eb6611b7d8709b5f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_04.mat b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_04.mat new file mode 100644 index 000000000..5bd7e3b8c --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_04.mat @@ -0,0 +1,128 @@ +%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: xz_04 + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: a144197c0cbfc054db672ec6e36131d9, type: 3} + 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: 2800000, guid: a144197c0cbfc054db672ec6e36131d9, 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} + - 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: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _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} + m_BuildTextureStacks: [] +--- !u!114 &3092582873500610863 +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: 5 diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_04.mat.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_04.mat.meta new file mode 100644 index 000000000..fe6d978b2 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_04.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ee208a723d0303e4d8921b9a9f80dc58 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_05.mat b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_05.mat new file mode 100644 index 000000000..9f8504f03 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_05.mat @@ -0,0 +1,128 @@ +%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: xz_05 + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: 78edca60d1695154793db19d0360f884, type: 3} + 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: 2800000, guid: 78edca60d1695154793db19d0360f884, 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} + - 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: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _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} + m_BuildTextureStacks: [] +--- !u!114 &2183971946934103812 +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: 5 diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_05.mat.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_05.mat.meta new file mode 100644 index 000000000..1f26cfed5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_05.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4e9a2bbb976f37d4282e7fa9dc76c5be +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_06.mat b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_06.mat new file mode 100644 index 000000000..93c348af5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_06.mat @@ -0,0 +1,128 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-4352417453581616532 +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: 5 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: xz_06 + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: ede9520b62b35a744a8125b72484a563, type: 3} + 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: 2800000, guid: ede9520b62b35a744a8125b72484a563, 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} + - 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: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _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} + m_BuildTextureStacks: [] diff --git a/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_06.mat.meta b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_06.mat.meta new file mode 100644 index 000000000..8c9cf379e --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/94修改明暗 (10.12)/fbx/Materials/xz_06.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a24fe7235d560e142910287b6771a387 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/Materials/22.mat b/GQ_URP/GQ/Assets/Model/Materials/22.mat new file mode 100644 index 000000000..2e79b0549 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/Materials/22.mat @@ -0,0 +1,128 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-4691262228206054509 +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: 5 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: 22 + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: af5cabf9f1d2265419e02b9625eec411, type: 3} + 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: 2800000, guid: af5cabf9f1d2265419e02b9625eec411, 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} + - 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: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _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} + m_BuildTextureStacks: [] diff --git a/GQ_URP/GQ/Assets/Model/Materials/22.mat.meta b/GQ_URP/GQ/Assets/Model/Materials/22.mat.meta new file mode 100644 index 000000000..ca9799afe --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/Materials/22.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eb5a3ffc6928fd64fb9259e3558c4039 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/Materials/boli.mat b/GQ_URP/GQ/Assets/Model/Materials/boli.mat index 19e36589e..dde2ab8b1 100644 --- a/GQ_URP/GQ/Assets/Model/Materials/boli.mat +++ b/GQ_URP/GQ/Assets/Model/Materials/boli.mat @@ -111,9 +111,9 @@ Material: - _WorkflowMode: 1 - _ZWrite: 0 m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 0.19215687} - - _Color: {r: 1, g: 1, b: 1, a: 0.19215687} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 0.4117647} + - _Color: {r: 1, g: 1, b: 1, a: 0.4117647} + - _EmissionColor: {r: 0.10153155, g: 0.10153155, b: 0.10153155, a: 1} - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} m_BuildTextureStacks: [] --- !u!114 &4567583201361101488 diff --git a/GQ_URP/GQ/Assets/Model/宽金属条-1.fbm.meta b/GQ_URP/GQ/Assets/Model/宽金属条-1.fbm.meta new file mode 100644 index 000000000..4471f5144 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/宽金属条-1.fbm.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 00da3ca3511df9541a07f5bc5305836a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/宽金属条-1.fbm/22.jpg b/GQ_URP/GQ/Assets/Model/宽金属条-1.fbm/22.jpg new file mode 100644 index 000000000..8aadda99e Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/宽金属条-1.fbm/22.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/宽金属条-1.fbm/22.jpg.meta b/GQ_URP/GQ/Assets/Model/宽金属条-1.fbm/22.jpg.meta new file mode 100644 index 000000000..2ac0e8182 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/宽金属条-1.fbm/22.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: af5cabf9f1d2265419e02b9625eec411 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/宽金属条-1.FBX b/GQ_URP/GQ/Assets/Model/封条/宽金属条-1.FBX similarity index 100% rename from GQ_URP/GQ/Assets/Model/宽金属条-1.FBX rename to GQ_URP/GQ/Assets/Model/封条/宽金属条-1.FBX diff --git a/GQ_URP/GQ/Assets/Model/宽金属条-1.FBX.meta b/GQ_URP/GQ/Assets/Model/封条/宽金属条-1.FBX.meta similarity index 99% rename from GQ_URP/GQ/Assets/Model/宽金属条-1.FBX.meta rename to GQ_URP/GQ/Assets/Model/封条/宽金属条-1.FBX.meta index edd7c20f3..5c1225254 100644 --- a/GQ_URP/GQ/Assets/Model/宽金属条-1.FBX.meta +++ b/GQ_URP/GQ/Assets/Model/封条/宽金属条-1.FBX.meta @@ -8,7 +8,7 @@ ModelImporter: materialImportMode: 2 materialName: 0 materialSearch: 1 - materialLocation: 1 + materialLocation: 0 animations: legacyGenerateAnimations: 4 bakeSimulation: 0 diff --git a/GQ_URP/GQ/Assets/Model/金属条.FBX b/GQ_URP/GQ/Assets/Model/封条/金属条2.FBX similarity index 100% rename from GQ_URP/GQ/Assets/Model/金属条.FBX rename to GQ_URP/GQ/Assets/Model/封条/金属条2.FBX diff --git a/GQ_URP/GQ/Assets/Model/金属条.FBX.meta b/GQ_URP/GQ/Assets/Model/封条/金属条2.FBX.meta similarity index 99% rename from GQ_URP/GQ/Assets/Model/金属条.FBX.meta rename to GQ_URP/GQ/Assets/Model/封条/金属条2.FBX.meta index 5b490a898..9a92a3bfa 100644 --- a/GQ_URP/GQ/Assets/Model/金属条.FBX.meta +++ b/GQ_URP/GQ/Assets/Model/封条/金属条2.FBX.meta @@ -8,7 +8,7 @@ ModelImporter: materialImportMode: 2 materialName: 0 materialSearch: 1 - materialLocation: 1 + materialLocation: 0 animations: legacyGenerateAnimations: 4 bakeSimulation: 0 diff --git a/GQ_URP/GQ/Assets/Model/封条/金属条2.fbm.meta b/GQ_URP/GQ/Assets/Model/封条/金属条2.fbm.meta new file mode 100644 index 000000000..910629a85 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/封条/金属条2.fbm.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6473c0483837af349bdb72c3d91db75d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Model/封条/金属条2.fbm/gq_147.jpg b/GQ_URP/GQ/Assets/Model/封条/金属条2.fbm/gq_147.jpg new file mode 100644 index 000000000..3ff1b6daf Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/封条/金属条2.fbm/gq_147.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/封条/金属条2.fbm/gq_147.jpg.meta b/GQ_URP/GQ/Assets/Model/封条/金属条2.fbm/gq_147.jpg.meta new file mode 100644 index 000000000..b46f3bd15 --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/封条/金属条2.fbm/gq_147.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: ed360e300499c0a4e8900b2480ccac47 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/封条/金属条2.fbm/gq_86.jpg b/GQ_URP/GQ/Assets/Model/封条/金属条2.fbm/gq_86.jpg new file mode 100644 index 000000000..667445ae9 Binary files /dev/null and b/GQ_URP/GQ/Assets/Model/封条/金属条2.fbm/gq_86.jpg differ diff --git a/GQ_URP/GQ/Assets/Model/封条/金属条2.fbm/gq_86.jpg.meta b/GQ_URP/GQ/Assets/Model/封条/金属条2.fbm/gq_86.jpg.meta new file mode 100644 index 000000000..95001e0ad --- /dev/null +++ b/GQ_URP/GQ/Assets/Model/封条/金属条2.fbm/gq_86.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 208a356a81aca5f4d9d22cb247efc2a0 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/Model/蓄电池/Materials/Material #2763.mat b/GQ_URP/GQ/Assets/Model/蓄电池/Materials/Material #2763.mat index 682655645..ce1ee05d5 100644 --- a/GQ_URP/GQ/Assets/Model/蓄电池/Materials/Material #2763.mat +++ b/GQ_URP/GQ/Assets/Model/蓄电池/Materials/Material #2763.mat @@ -121,8 +121,8 @@ Material: - _WorkflowMode: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 0.79058963, g: 0.79058963, b: 0.79058963, a: 1} - - _Color: {r: 0.79058963, g: 0.79058963, b: 0.79058963, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, 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: [] diff --git a/GQ_URP/GQ/Assets/Model/蓄电池/Materials/gq_78.mat b/GQ_URP/GQ/Assets/Model/蓄电池/Materials/gq_78.mat index 6f18bb46c..07bd33ead 100644 --- a/GQ_URP/GQ/Assets/Model/蓄电池/Materials/gq_78.mat +++ b/GQ_URP/GQ/Assets/Model/蓄电池/Materials/gq_78.mat @@ -108,8 +108,8 @@ Material: - _WorkflowMode: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _Color: {r: 1, g: 1, b: 1, a: 1} + - _BaseColor: {r: 0.9716981, g: 0.9716981, b: 0.9716981, a: 1} + - _Color: {r: 0.9716981, g: 0.9716981, b: 0.9716981, 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: [] diff --git a/GQ_URP/GQ/Assets/Plugins/GQ.dll.meta b/GQ_URP/GQ/Assets/Plugins/GQ.dll.meta index d98e5a816..05337fe9e 100644 --- a/GQ_URP/GQ/Assets/Plugins/GQ.dll.meta +++ b/GQ_URP/GQ/Assets/Plugins/GQ.dll.meta @@ -11,6 +11,17 @@ PluginImporter: isExplicitlyReferenced: 0 validateReferences: 1 platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Editor: 0 + Exclude Linux64: 0 + Exclude OSXUniversal: 0 + Exclude WebGL: 1 + Exclude Win: 0 + Exclude Win64: 0 - first: Any: second: @@ -19,9 +30,35 @@ PluginImporter: - first: Editor: Editor second: - enabled: 0 + enabled: 1 settings: + CPU: AnyCPU DefaultValueInitialized: true + OS: AnyOS + - first: + Standalone: Linux64 + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: OSXUniversal + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win + second: + enabled: 1 + settings: + CPU: x86 + - first: + Standalone: Win64 + second: + enabled: 1 + settings: + CPU: x86_64 - first: Windows Store Apps: WindowsStoreApps second: diff --git a/GQ_URP/GQ/Assets/Resources/emission.mat b/GQ_URP/GQ/Assets/Resources/emission.mat index 0fe880b16..cd3ab34ff 100644 --- a/GQ_URP/GQ/Assets/Resources/emission.mat +++ b/GQ_URP/GQ/Assets/Resources/emission.mat @@ -10,9 +10,9 @@ Material: m_Name: emission m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} m_ValidKeywords: - - _EMISSION + - _NORMALMAP m_InvalidKeywords: [] - m_LightmapFlags: 1 + m_LightmapFlags: 6 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 @@ -23,11 +23,11 @@ Material: serializedVersion: 3 m_TexEnvs: - _BaseMap: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 5d1e403ec32411148b5be46975b16836, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _BumpMap: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 1e4acd4b855768e4580e1573e3cd3cf7, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _DetailAlbedoMap: @@ -47,7 +47,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MainTex: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 5d1e403ec32411148b5be46975b16836, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MetallicGlossMap: @@ -82,7 +82,7 @@ Material: m_Floats: - _AlphaClip: 0 - _Blend: 0 - - _BumpScale: 1 + - _BumpScale: 3 - _ClearCoatMask: 0 - _ClearCoatSmoothness: 0 - _ColorMask: 15 @@ -101,7 +101,7 @@ Material: - _Parallax: 0.02 - _QueueOffset: 0 - _ReceiveShadows: 1 - - _Smoothness: 0.5 + - _Smoothness: 0 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 @@ -115,9 +115,9 @@ Material: - _WorkflowMode: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 0, g: 0.74509805, b: 1, a: 1} - - _Color: {r: 0, g: 0.74509805, b: 1, a: 1} - - _EmissionColor: {r: 0, g: 0.6509804, b: 0.6431373, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, 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: [] --- !u!114 &4586313418104410923 diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/12.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/12.prefab index 6451c45db..3eb55323b 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/12.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/12.prefab @@ -15,7 +15,7 @@ GameObject: - component: {fileID: 7700127433997478891} - component: {fileID: 6275597787905006612} - component: {fileID: 8418322593027249444} - m_Layer: 8 + m_Layer: 13 m_Name: Box008 m_TagString: Untagged m_Icon: {fileID: 0} @@ -375,7 +375,7 @@ GameObject: - component: {fileID: 8692329855265142801} - component: {fileID: 7508174477508576232} - component: {fileID: 4541333512264328539} - m_Layer: 8 + m_Layer: 13 m_Name: Box013 m_TagString: Untagged m_Icon: {fileID: 0} @@ -1195,7 +1195,7 @@ GameObject: - component: {fileID: 5995258590900693706} - component: {fileID: 2283362738946291626} - component: {fileID: 4975468020882731881} - m_Layer: 8 + m_Layer: 13 m_Name: Box014 m_TagString: Untagged m_Icon: {fileID: 0} @@ -1659,7 +1659,7 @@ GameObject: - component: {fileID: 8924263149153457337} - component: {fileID: 5892080496138878019} - component: {fileID: 6418732911851362361} - m_Layer: 8 + m_Layer: 13 m_Name: Box015 m_TagString: Untagged m_Icon: {fileID: 0} @@ -2027,7 +2027,7 @@ GameObject: - component: {fileID: 5711118579854116026} - component: {fileID: 7765677157993807548} - component: {fileID: 5874914099896987373} - m_Layer: 8 + m_Layer: 13 m_Name: Box012 m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/13.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/13.prefab index 8fe47bb43..584bdf5b4 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/13.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/13.prefab @@ -203,7 +203,7 @@ MonoBehaviour: frames: [] PerTier: 42 PerRow: 5 - volume: 42 + volume: 3 isExit: 0 isClicked: 0 isTarget: 0 @@ -257,7 +257,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} m_Name: m_EditorClassIdentifier: - volume: 42 + volume: 3 selfIcon: {fileID: 21300000, guid: e876e5f1383050b49a2caf8b8a82cf7a, type: 3} --- !u!64 &9056229376381319932 MeshCollider: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/18.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/18.prefab index ab0f9054d..04c06c9fb 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/18.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/18.prefab @@ -976,7 +976,7 @@ GameObject: - component: {fileID: 3756170587262971144} - component: {fileID: 2410823690405397543} - component: {fileID: 4481421907938790835} - m_Layer: 8 + m_Layer: 13 m_Name: Box061 m_TagString: Untagged m_Icon: {fileID: 0} @@ -3221,7 +3221,7 @@ GameObject: - component: {fileID: 7660115168554805345} - component: {fileID: 947994635274027711} - component: {fileID: 3365197531529976400} - m_Layer: 8 + m_Layer: 13 m_Name: Box062 m_TagString: Untagged m_Icon: {fileID: 0} @@ -3604,7 +3604,7 @@ GameObject: - component: {fileID: 6731749516262817749} - component: {fileID: 98792970155289466} - component: {fileID: 4735877751496088851} - m_Layer: 8 + m_Layer: 13 m_Name: Box060 m_TagString: Untagged m_Icon: {fileID: 0} @@ -4938,7 +4938,7 @@ GameObject: - component: {fileID: 3422729147028076587} - component: {fileID: 1534238438475140956} - component: {fileID: 5698582328210164740} - m_Layer: 8 + m_Layer: 13 m_Name: Box071 m_TagString: Untagged m_Icon: {fileID: 0} @@ -5636,7 +5636,7 @@ GameObject: - component: {fileID: 7907540148105302049} - component: {fileID: 7459684607850411936} - component: {fileID: 8783862367773915295} - m_Layer: 8 + m_Layer: 13 m_Name: Box075 m_TagString: Untagged m_Icon: {fileID: 0} @@ -6418,7 +6418,7 @@ GameObject: - component: {fileID: 7224971539096366299} - component: {fileID: 4015979351488509667} - component: {fileID: 2622649960805685500} - m_Layer: 8 + m_Layer: 13 m_Name: Box072 m_TagString: Untagged m_Icon: {fileID: 0} @@ -6708,7 +6708,7 @@ GameObject: - component: {fileID: 8211416149365915299} - component: {fileID: 8310243219662041695} - component: {fileID: 1700054640015004391} - m_Layer: 8 + m_Layer: 13 m_Name: Box063 m_TagString: Untagged m_Icon: {fileID: 0} @@ -7889,7 +7889,7 @@ GameObject: - component: {fileID: 5267893310656205185} - component: {fileID: 3537322836222525388} - component: {fileID: 4192547757245230778} - m_Layer: 8 + m_Layer: 13 m_Name: Box076 m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/19.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/19.prefab index da48603c0..09b40617b 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/19.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/19.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &54295308639871799 +--- !u!1 &123170615027918642 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,9 +8,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3307598062355530965} - - component: {fileID: 1724129667198599440} - - component: {fileID: 1149645474235933670} + - component: {fileID: 3194384772702093877} + - component: {fileID: 1870091248188242670} + - component: {fileID: 643595139784293276} m_Layer: 11 m_Name: Cube (1) m_TagString: Untagged @@ -18,41 +18,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3307598062355530965 +--- !u!4 &3194384772702093877 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 54295308639871799} + m_GameObject: {fileID: 123170615027918642} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0101, y: -0.2693, z: 0.0784} - m_LocalScale: {x: 0.01352, y: 0.013520001, z: 0.01722} + m_LocalPosition: {x: 0.010100052, y: -0.2693, z: 0.078400075} + m_LocalScale: {x: 0.013520002, y: 0.013520002, z: 0.017220004} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 1220063532439705337} + m_Father: {fileID: 705144181047787125} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1724129667198599440 +--- !u!65 &1870091248188242670 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 54295308639871799} + m_GameObject: {fileID: 123170615027918642} 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!114 &1149645474235933670 +--- !u!114 &643595139784293276 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 54295308639871799} + m_GameObject: {fileID: 123170615027918642} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -78,7 +78,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &318529995253762364 +--- !u!1 &215564565720197159 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -86,139 +86,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2877678272841967989} - - component: {fileID: 3720468847329274988} - - component: {fileID: 4210798055264377005} - m_Layer: 8 - m_Name: Box140 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2877678272841967989 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 318529995253762364} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.10985073, y: 0.05056756, z: -0.16562717} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7479616600518107449} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3720468847329274988 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 318529995253762364} - m_Mesh: {fileID: -5474930739130038965, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &4210798055264377005 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 318529995253762364} - 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &342376971551590999 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4665805000032781865} - - component: {fileID: 5440382602795416139} - - component: {fileID: 8873621849543089969} + - component: {fileID: 276491290400186490} + - component: {fileID: 8641808045977872555} + - component: {fileID: 2027344302310914088} m_Layer: 11 - m_Name: Cube (3) + m_Name: Cube (8) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4665805000032781865 +--- !u!4 &276491290400186490 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 342376971551590999} + m_GameObject: {fileID: 215564565720197159} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009034574, y: -0.18049999, z: 0.030300006} - m_LocalScale: {x: 0.013519052, y: 0.013519053, z: 0.017220704} + m_LocalPosition: {x: 0.0153999925, y: -0.26930013, z: -0.043199986} + m_LocalScale: {x: 0.013400002, y: 0.013520002, z: 0.012290003} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 1427480625449896053} + m_Father: {fileID: 8835206757150889430} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5440382602795416139 +--- !u!65 &8641808045977872555 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 342376971551590999} + m_GameObject: {fileID: 215564565720197159} 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!114 &8873621849543089969 +--- !u!114 &2027344302310914088 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 342376971551590999} + m_GameObject: {fileID: 215564565720197159} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -244,7 +156,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &408778195848868910 +--- !u!1 &225458014235177788 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -252,88 +164,77 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1664885158721233237} - - component: {fileID: 515345239178323547} - - component: {fileID: 4612359971130107555} - m_Layer: 8 - m_Name: Box111 + - component: {fileID: 1856578222450061042} + - component: {fileID: 188716858295254727} + - component: {fileID: 1420212675832253533} + m_Layer: 11 + m_Name: Cube (7) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1664885158721233237 +--- !u!4 &1856578222450061042 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 408778195848868910} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.31344512, y: 0.05056756, z: -0.16562715} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} + m_GameObject: {fileID: 225458014235177788} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.00009030104, y: -0.1805, z: -0.066599995} + m_LocalScale: {x: 0.013520002, y: 0.013520002, z: 0.017220004} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7479616600518107449} + m_Father: {fileID: 786102043818516729} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &515345239178323547 -MeshFilter: +--- !u!65 &188716858295254727 +BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 408778195848868910} - m_Mesh: {fileID: -496025733953617223, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &4612359971130107555 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 408778195848868910} + m_GameObject: {fileID: 225458014235177788} + m_Material: {fileID: 0} + m_IsTrigger: 0 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &568266096180039745 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1420212675832253533 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 225458014235177788} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &374605846831345270 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -341,87 +242,77 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2708294511709933683} - - component: {fileID: 126809824763679628} - - component: {fileID: 5007279094104783322} - m_Layer: 8 - m_Name: Box144 + - component: {fileID: 2001008226805608848} + - component: {fileID: 8408398532017645588} + - component: {fileID: 9058495481884425970} + m_Layer: 11 + m_Name: Cube (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2708294511709933683 +--- !u!4 &2001008226805608848 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 568266096180039745} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.34551647, y: 0.05056756, z: -0.4987613} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} + m_GameObject: {fileID: 374605846831345270} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.000090271235, y: -0.18049997, z: 0.05120009} + m_LocalScale: {x: 0.013520002, y: 0.013520002, z: 0.017220004} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7479616600518107449} - m_RootOrder: 20 + m_Father: {fileID: 786102043818516729} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &126809824763679628 -MeshFilter: +--- !u!65 &8408398532017645588 +BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 568266096180039745} - m_Mesh: {fileID: -3966545228067385281, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &5007279094104783322 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 568266096180039745} + m_GameObject: {fileID: 374605846831345270} + m_Material: {fileID: 0} + m_IsTrigger: 0 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &1319758373845391968 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &9058495481884425970 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 374605846831345270} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &620419400810556772 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -429,92 +320,77 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5176432683153776439} - - component: {fileID: 2128944598828408803} - - component: {fileID: 4413385878195529347} - m_Layer: 8 - m_Name: Box136 + - component: {fileID: 828058296409308525} + - component: {fileID: 5430822665140934066} + - component: {fileID: 6093618652916359115} + m_Layer: 11 + m_Name: Cube (5) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5176432683153776439 +--- !u!4 &828058296409308525 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1319758373845391968} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.43823153, y: 0.05056756, z: -0.16562715} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} + m_GameObject: {fileID: 620419400810556772} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.000090271235, y: -0.18049997, z: -0.025599986} + m_LocalScale: {x: 0.013520002, y: 0.013520002, z: 0.017220004} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7479616600518107449} - m_RootOrder: 12 + m_Father: {fileID: 786102043818516729} + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2128944598828408803 -MeshFilter: +--- !u!65 &5430822665140934066 +BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1319758373845391968} - m_Mesh: {fileID: 7039355258290517440, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &4413385878195529347 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1319758373845391968} + m_GameObject: {fileID: 620419400810556772} + m_Material: {fileID: 0} + m_IsTrigger: 0 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: e33e8e143de68ea419d74e4d6b23e139, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, 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!1 &1389374144460809137 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6093618652916359115 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620419400810556772} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &752006409314470717 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -522,9 +398,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2095702158292150176} - - component: {fileID: 4508957584849621482} - - component: {fileID: 7716314524950393926} + - component: {fileID: 302528109288525612} + - component: {fileID: 2861101589776611686} + - component: {fileID: 8228778666875264202} m_Layer: 8 m_Name: Box104 m_TagString: Untagged @@ -532,36 +408,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2095702158292150176 +--- !u!4 &302528109288525612 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1389374144460809137} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.001106083, y: -0.35454786, z: 0.0009396253} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} + m_GameObject: {fileID: 752006409314470717} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.063566506} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7479616600518107449} + m_Father: {fileID: 3395021974730314740} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4508957584849621482 +--- !u!33 &2861101589776611686 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1389374144460809137} + m_GameObject: {fileID: 752006409314470717} m_Mesh: {fileID: -35850239040426563, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &7716314524950393926 +--- !u!23 &8228778666875264202 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1389374144460809137} + m_GameObject: {fileID: 752006409314470717} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -602,7 +478,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &1562304186305377318 +--- !u!1 &826160442703721196 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -610,77 +486,92 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3553493968075047206} - - component: {fileID: 837401379725975568} - - component: {fileID: 3850511067319989124} - m_Layer: 11 - m_Name: Cube (1) + - component: {fileID: 6841468856803342267} + - component: {fileID: 336681873144297327} + - component: {fileID: 2601069194294496783} + m_Layer: 8 + m_Name: Box136 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3553493968075047206 +--- !u!4 &6841468856803342267 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1562304186305377318} + m_GameObject: {fileID: 826160442703721196} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009036064, y: -0.18049997, z: 0.07130002} - m_LocalScale: {x: 0.013519052, y: 0.013519053, z: 0.017220704} + m_LocalPosition: {x: -0.2780515, y: 0.08862296, z: 0.24802452} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 1427480625449896053} - m_RootOrder: 1 + m_Father: {fileID: 3395021974730314740} + m_RootOrder: 12 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &837401379725975568 -BoxCollider: +--- !u!33 &336681873144297327 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1562304186305377318} - 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!114 &3850511067319989124 -MonoBehaviour: + m_GameObject: {fileID: 826160442703721196} + m_Mesh: {fileID: 7039355258290517440, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &2601069194294496783 +MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1562304186305377318} + m_GameObject: {fileID: 826160442703721196} m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1583415662531865101 + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: e33e8e143de68ea419d74e4d6b23e139, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, 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!1 &927400210335990401 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -688,9 +579,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5824911707439234550} - - component: {fileID: 3022939473034234133} - - component: {fileID: 5887814869451966433} + - component: {fileID: 5328211229479441786} + - component: {fileID: 3518444747608105369} + - component: {fileID: 5229274938401222509} m_Layer: 8 m_Name: Box113 m_TagString: Untagged @@ -698,36 +589,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5824911707439234550 +--- !u!4 &5328211229479441786 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583415662531865101} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.17979811, y: 0.05056756, z: -0.16562717} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} + m_GameObject: {fileID: 927400210335990401} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.113092035, y: 0.08862302, z: 0.24802452} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7479616600518107449} + m_Father: {fileID: 3395021974730314740} m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3022939473034234133 +--- !u!33 &3518444747608105369 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583415662531865101} + m_GameObject: {fileID: 927400210335990401} m_Mesh: {fileID: -7246287230559787882, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &5887814869451966433 +--- !u!23 &5229274938401222509 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583415662531865101} + m_GameObject: {fileID: 927400210335990401} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -773,7 +664,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &1662664871993719276 +--- !u!1 &1429891734226004180 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -781,825 +672,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5289986396292875432} - - component: {fileID: 5787583372109502858} - - component: {fileID: 6607857926735575607} + - component: {fileID: 4998097785217191462} + - component: {fileID: 5478062274854724993} + - component: {fileID: 5560644127701282658} m_Layer: 11 - m_Name: Cube (6) + m_Name: Cube (7) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5289986396292875432 +--- !u!4 &4998097785217191462 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1662664871993719276} + m_GameObject: {fileID: 1429891734226004180} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0033, y: -0.3579, z: -0.0452} - m_LocalScale: {x: 0.013396697, y: 0.013520006, z: 0.012286817} + m_LocalPosition: {x: 0.015400007, y: -0.26930013, z: -0.0119999945} + m_LocalScale: {x: 0.013400002, y: 0.013520002, z: 0.012290003} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 1694649269559321126} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5787583372109502858 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1662664871993719276} - 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!114 &6607857926735575607 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1662664871993719276} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2440864612872071368 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1416202827030425428} - - component: {fileID: 2917207872218726126} - - component: {fileID: 1172168631577826020} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1416202827030425428 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2440864612872071368} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0033, y: -0.3579, z: -0.0151} - m_LocalScale: {x: 0.013396697, y: 0.013520005, z: 0.012286816} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1694649269559321126} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2917207872218726126 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2440864612872071368} - 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!114 &1172168631577826020 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2440864612872071368} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2696129037601102225 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1694649269559321126} - - component: {fileID: 7802735416305949356} - - component: {fileID: 818861818829469573} - - component: {fileID: 1494347009982210536} - - component: {fileID: 5148834187551114550} - - component: {fileID: 4345798910106229014} - - component: {fileID: 1480322870716054470} - m_Layer: 8 - m_Name: Box117 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1694649269559321126 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2696129037601102225} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.013571438, y: 0.05056756, z: -0.1656271} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1416202827030425428} - - {fileID: 5289986396292875432} - m_Father: {fileID: 7479616600518107449} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7802735416305949356 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2696129037601102225} - m_Mesh: {fileID: -1041292729156527536, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &818861818829469573 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2696129037601102225} - 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, 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!114 &1494347009982210536 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2696129037601102225} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3` - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 3 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &5148834187551114550 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2696129037601102225} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &4345798910106229014 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2696129037601102225} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &1480322870716054470 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2696129037601102225} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -1041292729156527536, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!1 &2826088613600641562 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1488417346727576840} - - component: {fileID: 5153099348053986764} - - component: {fileID: 4337043513789307848} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1488417346727576840 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2826088613600641562} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009034574, y: -0.18049999, z: -0.004700005} - m_LocalScale: {x: 0.013519052, y: 0.013519053, z: 0.017220704} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1427480625449896053} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5153099348053986764 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2826088613600641562} - 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!114 &4337043513789307848 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2826088613600641562} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2948842930571300524 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2787956754044381658} - - component: {fileID: 4240382906834553996} - - component: {fileID: 8524319656790792424} - m_Layer: 8 - m_Name: Box102 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2787956754044381658 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2948842930571300524} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.47789732, y: 0.05056756, z: -0.16562715} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7479616600518107449} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4240382906834553996 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2948842930571300524} - m_Mesh: {fileID: 5047528748317851287, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &8524319656790792424 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2948842930571300524} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!1 &3119510865089333720 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 937466838903070822} - - component: {fileID: 7322994182144287421} - - component: {fileID: 4080342441409521569} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &937466838903070822 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3119510865089333720} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009034574, y: -0.18049999, z: -0.025600001} - m_LocalScale: {x: 0.013519052, y: 0.013519053, z: 0.017220704} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1427480625449896053} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7322994182144287421 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3119510865089333720} - 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!114 &4080342441409521569 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3119510865089333720} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3147385559993193519 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 95729430134403865} - - component: {fileID: 5088737096086628425} - - component: {fileID: 5563254978324377924} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &95729430134403865 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3147385559993193519} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0101, y: -0.26930007, z: 0.056199998} - m_LocalScale: {x: 0.01352, y: 0.013520002, z: 0.01722} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7186425625986432346} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5088737096086628425 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3147385559993193519} - 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!114 &5563254978324377924 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3147385559993193519} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3416025875762438268 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7708235346782577721} - - component: {fileID: 1682327477771202357} - - component: {fileID: 8805874883570300418} - m_Layer: 8 - m_Name: Box137 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7708235346782577721 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3416025875762438268} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.13148052, y: 0.05056756, z: -0.16562714} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7479616600518107449} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1682327477771202357 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3416025875762438268} - m_Mesh: {fileID: -2542006481543278910, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &8805874883570300418 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3416025875762438268} - 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, 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!1 &3468281070718990200 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4735083170315237717} - - component: {fileID: 5668846746482834543} - - component: {fileID: 300382655097701299} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4735083170315237717 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3468281070718990200} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0154, y: -0.2693, z: -0.012} - m_LocalScale: {x: 0.013396695, y: 0.013520001, z: 0.012286814} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1220063532439705337} + m_Father: {fileID: 8835206757150889430} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5668846746482834543 +--- !u!65 &5478062274854724993 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3468281070718990200} + m_GameObject: {fileID: 1429891734226004180} 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!114 &300382655097701299 +--- !u!114 &5560644127701282658 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3468281070718990200} + m_GameObject: {fileID: 1429891734226004180} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1625,7 +742,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3491480358265533233 +--- !u!1 &1454968604989508229 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1633,108 +750,244 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2689293987180074958} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2689293987180074958 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3491480358265533233} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.001105989, y: -1.5066257, z: 1.0609772} - m_LocalScale: {x: 1.5800583, y: 2.1962473, z: 1.8794985} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7479616600518107449} - m_RootOrder: 24 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &3720324988759459459 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3681307798398497284} - - component: {fileID: 2018859312617292428} - - component: {fileID: 4549311916009728507} + - component: {fileID: 853286396809985711} + - component: {fileID: 6995312692961690513} + - component: {fileID: 7854154219631061456} m_Layer: 11 - m_Name: Cube (7) + m_Name: Cube (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3681307798398497284 +--- !u!4 &853286396809985711 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3720324988759459459} + m_GameObject: {fileID: 1454968604989508229} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009036064, y: -0.18050003, z: -0.06660001} - m_LocalScale: {x: 0.013519052, y: 0.013519053, z: 0.017220704} + m_LocalPosition: {x: 0.010100007, y: -0.26930013, z: 0.056200057} + m_LocalScale: {x: 0.013520002, y: 0.013520002, z: 0.017220004} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 1427480625449896053} + m_Father: {fileID: 8835206757150889430} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6995312692961690513 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1454968604989508229} + 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!114 &7854154219631061456 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1454968604989508229} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1828934701567232240 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1657507667203840797} + - component: {fileID: 1201685967124328104} + - component: {fileID: 2316387014247494045} + m_Layer: 11 + m_Name: Cube (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1657507667203840797 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1828934701567232240} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.000090271235, y: -0.18049997, z: -0.045699984} + m_LocalScale: {x: 0.013520002, y: 0.013520002, z: 0.017220004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 786102043818516729} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1201685967124328104 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1828934701567232240} + 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!114 &2316387014247494045 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1828934701567232240} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2056984145007762594 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1026109945631033817} + - component: {fileID: 2162143950743981783} + - component: {fileID: 6423752927688756783} + m_Layer: 8 + m_Name: Box111 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1026109945631033817 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2056984145007762594} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.19767562, y: 0.08862302, z: 0.24802452} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3395021974730314740} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2018859312617292428 -BoxCollider: +--- !u!33 &2162143950743981783 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3720324988759459459} - 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!114 &4549311916009728507 -MonoBehaviour: + m_GameObject: {fileID: 2056984145007762594} + m_Mesh: {fileID: -496025733953617223, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &6423752927688756783 +MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3720324988759459459} + m_GameObject: {fileID: 2056984145007762594} m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3890575262573263392 + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &2111063303875404208 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1742,51 +995,227 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 9066369734668522041} - - component: {fileID: 8872107859943798275} - - component: {fileID: 8571351818887308258} - m_Layer: 11 - m_Name: Cube (5) + - component: {fileID: 4523923620823138809} + - component: {fileID: 3064249848019846368} + - component: {fileID: 2542395452020699169} + m_Layer: 8 + m_Name: Box140 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &9066369734668522041 +--- !u!4 &4523923620823138809 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3890575262573263392} + m_GameObject: {fileID: 2111063303875404208} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0101, y: -0.26930007, z: 0.078400016} - m_LocalScale: {x: 0.01352, y: 0.013520002, z: 0.01722} + m_LocalPosition: {x: -0.0705474, y: 0.08862299, z: 0.24802452} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7186425625986432346} - m_RootOrder: 0 + m_Father: {fileID: 3395021974730314740} + m_RootOrder: 16 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8872107859943798275 +--- !u!33 &3064249848019846368 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2111063303875404208} + m_Mesh: {fileID: -5474930739130038965, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &2542395452020699169 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2111063303875404208} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &2217256134551992525 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4373679367833729279} + - component: {fileID: 1793876761895959296} + - component: {fileID: 6654851827515363670} + m_Layer: 8 + m_Name: Box144 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4373679367833729279 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2217256134551992525} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.21937329, y: 0.2658692, z: 0.24802452} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3395021974730314740} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1793876761895959296 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2217256134551992525} + m_Mesh: {fileID: -3966545228067385281, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &6654851827515363670 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2217256134551992525} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &2321129536285239869 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7582457317324698068} + - component: {fileID: 4138594710450379748} + - component: {fileID: 8814542104834095192} + m_Layer: 11 + m_Name: Cube (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7582457317324698068 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2321129536285239869} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.000090271235, y: -0.18049997, z: -0.004700005} + m_LocalScale: {x: 0.013520002, y: 0.013520002, z: 0.017220004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 786102043818516729} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &4138594710450379748 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3890575262573263392} + m_GameObject: {fileID: 2321129536285239869} 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!114 &8571351818887308258 +--- !u!114 &8814542104834095192 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3890575262573263392} + m_GameObject: {fileID: 2321129536285239869} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1799,7 +1228,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 1 + portPosition: 5 deviceId: deviceName: portModel: @@ -1812,7 +1241,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &4411195153839796800 +--- !u!1 &2361893944052152379 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1820,54 +1249,132 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1220063532439705337} - - component: {fileID: 537165468973184623} - - component: {fileID: 4998111990015370876} - - component: {fileID: 5336789319978298774} - - component: {fileID: 7660387297034063665} - - component: {fileID: 78288170736337570} - - component: {fileID: 3531012791308187410} - m_Layer: 8 + - component: {fileID: 4638551057976454224} + - component: {fileID: 7673059727552646271} + - component: {fileID: 1353836737364620595} + m_Layer: 11 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4638551057976454224 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2361893944052152379} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.010100052, y: -0.2693, z: 0.056200087} + m_LocalScale: {x: 0.013520002, y: 0.013520002, z: 0.017220004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 705144181047787125} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7673059727552646271 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2361893944052152379} + 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!114 &1353836737364620595 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2361893944052152379} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2598598060250028748 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 705144181047787125} + - component: {fileID: 2185301977090744035} + - component: {fileID: 6664054126882574064} + - component: {fileID: 1476224969448617865} + - component: {fileID: 400131194489638784} + - component: {fileID: 6954368235768682507} + - component: {fileID: 3747414517063075372} + m_Layer: 13 m_Name: Box112 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1220063532439705337 +--- !u!4 &705144181047787125 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4411195153839796800} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.24672318, y: 0.05056756, z: 0.00093970913} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} + m_GameObject: {fileID: 2598598060250028748} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.15544811, y: 0, z: 0.24802452} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 3307598062355530965} - - {fileID: 3400364715692167400} - - {fileID: 4735083170315237717} - - {fileID: 4723685574122703635} - m_Father: {fileID: 7479616600518107449} + - {fileID: 3194384772702093877} + - {fileID: 4638551057976454224} + - {fileID: 349947246354557679} + - {fileID: 9183740804689567855} + m_Father: {fileID: 3395021974730314740} m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &537165468973184623 +--- !u!33 &2185301977090744035 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4411195153839796800} + m_GameObject: {fileID: 2598598060250028748} m_Mesh: {fileID: -6612900964092521861, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &4998111990015370876 +--- !u!23 &6664054126882574064 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4411195153839796800} + m_GameObject: {fileID: 2598598060250028748} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1916,13 +1423,13 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &5336789319978298774 +--- !u!114 &1476224969448617865 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4411195153839796800} + m_GameObject: {fileID: 2598598060250028748} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -1934,7 +1441,7 @@ MonoBehaviour: deviceCode: type: 2 typeStr: - deviceType: 3` + deviceType: 3 deviceTypeStr: rackId: shelfId: @@ -1974,26 +1481,26 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &7660387297034063665 +--- !u!114 &400131194489638784 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4411195153839796800} + m_GameObject: {fileID: 2598598060250028748} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &78288170736337570 +--- !u!114 &6954368235768682507 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4411195153839796800} + m_GameObject: {fileID: 2598598060250028748} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -2003,15 +1510,15 @@ MonoBehaviour: My_magnifyState: 0 empty: [] TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &3531012791308187410 +--- !u!64 &3747414517063075372 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4411195153839796800} + m_GameObject: {fileID: 2598598060250028748} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -2019,7 +1526,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -6612900964092521861, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!1 &4488764770320490162 +--- !u!1 &3588173396915824160 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2027,124 +1534,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4344457836382263791} - - component: {fileID: 7423228332662897226} - - component: {fileID: 1902645566313319705} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4344457836382263791 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4488764770320490162} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009034574, y: -0.18049999, z: -0.0457} - m_LocalScale: {x: 0.013519052, y: 0.013519053, z: 0.017220704} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1427480625449896053} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7423228332662897226 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4488764770320490162} - 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!114 &1902645566313319705 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4488764770320490162} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5131662499353870566 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4122780407539604732} - - component: {fileID: 6613355397304896343} - - component: {fileID: 1910152816082362134} + - component: {fileID: 4582248044166381910} + - component: {fileID: 2593924391023698944} + - component: {fileID: 8028741814428528740} m_Layer: 8 - m_Name: Box103 + m_Name: Box102 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4122780407539604732 +--- !u!4 &4582248044166381910 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5131662499353870566} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.001106083, y: 0.45568293, z: 0.0009396253} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} + m_GameObject: {fileID: 3588173396915824160} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.30199996, y: 0.08899996, z: 0.248} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7479616600518107449} - m_RootOrder: 1 + m_Father: {fileID: 3395021974730314740} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6613355397304896343 +--- !u!33 &2593924391023698944 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5131662499353870566} - m_Mesh: {fileID: -7768408576438331914, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &1910152816082362134 + m_GameObject: {fileID: 3588173396915824160} + m_Mesh: {fileID: 5047528748317851287, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &8028741814428528740 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5131662499353870566} + m_GameObject: {fileID: 3588173396915824160} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -2158,14 +1587,11 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -2187,7 +1613,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &5791997210984918929 +--- !u!1 &3913501475060287728 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2195,15 +1621,546 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7479616600518107449} - - component: {fileID: 1337944795942221914} - - component: {fileID: 3073125286398348836} - - component: {fileID: 5942207377838692810} - - component: {fileID: 8899979765889102332} - - component: {fileID: 25276216469572829} - - component: {fileID: 6641938421992556965} - - component: {fileID: 2887313724591170803} - - component: {fileID: 6229714247998861520} + - component: {fileID: 8349254250804972725} + - component: {fileID: 1044683765225162681} + - component: {fileID: 7139161130186743438} + m_Layer: 8 + m_Name: Box137 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8349254250804972725 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913501475060287728} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.08251241, y: 0.08862299, z: 0.24802452} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3395021974730314740} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1044683765225162681 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913501475060287728} + m_Mesh: {fileID: -2542006481543278910, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &7139161130186743438 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913501475060287728} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, 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!1 &4245223176979488223 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1476608896323657970} + - component: {fileID: 3130778892197085828} + - component: {fileID: 6956755525735148185} + m_Layer: 11 + m_Name: Cube (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1476608896323657970 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4245223176979488223} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0032999218, y: -0.35789996, z: -0.015099943} + m_LocalScale: {x: 0.013400002, y: 0.013520002, z: 0.012290003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1054756265575975594} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3130778892197085828 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4245223176979488223} + 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!114 &6956755525735148185 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4245223176979488223} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4345189307282567453 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1054756265575975594} + - component: {fileID: 8462060501603840544} + - component: {fileID: 1331530332356648713} + - component: {fileID: 3818225272042647920} + - component: {fileID: 8120347928106889116} + - component: {fileID: 1176503309807355217} + - component: {fileID: 3992503326151635385} + m_Layer: 13 + m_Name: Box117 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1054756265575975594 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4345189307282567453} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.009289265, y: 0.08862299, z: 0.24802452} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1476608896323657970} + - {fileID: 5047678711669077617} + m_Father: {fileID: 3395021974730314740} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8462060501603840544 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4345189307282567453} + m_Mesh: {fileID: -1041292729156527536, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &1331530332356648713 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4345189307282567453} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, 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!114 &3818225272042647920 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4345189307282567453} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} + m_Name: + m_EditorClassIdentifier: + deviceList: + id: + deviceName: + deviceCode: + type: 2 + typeStr: + deviceType: 3 + deviceTypeStr: + rackId: + shelfId: + slotId: + devicePosition: 3 + machineModel: + status: + conDeviceName: + rackType: + openFlag: + backDoorFlag: + modelNum: + occupyNum: + residueNum: + operationTime: + directorName: + phone: + manufacturer: + powerProperties: + maintenanceUnit: + machineFrameHigh: + machineFrameWide: + machineFrameThick: + slotNum: + slotSort: + installMethod: + affiliationFrame: + parentSlotName: + slotType: + occupyStatus: + affiliationSlot: + portNum: + cardFunction: + cardType: + runStatus: + tmsId: + remark: + createTime: + createName: +--- !u!114 &8120347928106889116 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4345189307282567453} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!114 &1176503309807355217 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4345189307282567453} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!64 &3992503326151635385 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4345189307282567453} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: -1041292729156527536, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!1 &4600062897595379250 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3901691731070047339} + - component: {fileID: 2303655059849811489} + - component: {fileID: 5611970051650854364} + m_Layer: 11 + m_Name: Cube (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3901691731070047339 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4600062897595379250} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.010100007, y: -0.26930013, z: 0.078400046} + m_LocalScale: {x: 0.013520002, y: 0.013520002, z: 0.017220004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8835206757150889430} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2303655059849811489 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4600062897595379250} + 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!114 &5611970051650854364 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4600062897595379250} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4699961703473580681 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6116015586805046083} + - component: {fileID: 2414557435837596234} + - component: {fileID: 4308249706604605489} + m_Layer: 11 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6116015586805046083 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4699961703473580681} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.00009030104, y: -0.18049994, z: 0.0713} + m_LocalScale: {x: 0.013520002, y: 0.013520002, z: 0.017220004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 786102043818516729} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2414557435837596234 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4699961703473580681} + 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!114 &4308249706604605489 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4699961703473580681} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4736260076719325185 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3395021974730314740} + - component: {fileID: 5705544290257375715} + - component: {fileID: 2196195176402308036} + - component: {fileID: 6386827669305936015} + - component: {fileID: 8918796125417902112} + - component: {fileID: 3696271951046292631} + - component: {fileID: 3433270494200157079} + - component: {fileID: 7879475813283359409} + - component: {fileID: 5170792587312072434} m_Layer: 8 m_Name: 19 m_TagString: Untagged @@ -2211,61 +2168,61 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7479616600518107449 +--- !u!4 &3395021974730314740 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5791997210984918929} - m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} - m_LocalPosition: {x: -0.26450002, y: 0.225, z: 0.00070002675} - m_LocalScale: {x: 0.6328881, y: 0.45532215, z: 0.5320568} + m_GameObject: {fileID: 4736260076719325185} + m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.2640001, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 2787956754044381658} - - {fileID: 4122780407539604732} - - {fileID: 2095702158292150176} - - {fileID: 2417706631599829515} - - {fileID: 6488165538850796141} - - {fileID: 600249031166564129} - - {fileID: 1427480625449896053} - - {fileID: 1664885158721233237} - - {fileID: 1220063532439705337} - - {fileID: 5824911707439234550} - - {fileID: 7831977415637021328} - - {fileID: 1694649269559321126} - - {fileID: 5176432683153776439} - - {fileID: 7708235346782577721} - - {fileID: 7186425625986432346} - - {fileID: 7136490618217312272} - - {fileID: 2877678272841967989} - - {fileID: 4334792055748643085} - - {fileID: 6675095870650848825} - - {fileID: 4676924790582239783} - - {fileID: 2708294511709933683} - - {fileID: 8193077465537047958} - - {fileID: 7166503512946026620} - - {fileID: 8821637404064397909} - - {fileID: 2689293987180074958} + - {fileID: 4582248044166381910} + - {fileID: 2310535020112376944} + - {fileID: 302528109288525612} + - {fileID: 4083303521803197063} + - {fileID: 4840592908536158945} + - {fileID: 1257391482798079917} + - {fileID: 786102043818516729} + - {fileID: 1026109945631033817} + - {fileID: 705144181047787125} + - {fileID: 5328211229479441786} + - {fileID: 8473347063849835036} + - {fileID: 1054756265575975594} + - {fileID: 6841468856803342267} + - {fileID: 8349254250804972725} + - {fileID: 8835206757150889430} + - {fileID: 8804059929203923100} + - {fileID: 4523923620823138809} + - {fileID: 2670603640076902785} + - {fileID: 5009429814413721269} + - {fileID: 6467278901368064683} + - {fileID: 4373679367833729279} + - {fileID: 7535662644123174170} + - {fileID: 8814438707350192368} + - {fileID: 7154924372107317977} + - {fileID: 1229934898108483447} m_Father: {fileID: 0} m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!33 &1337944795942221914 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5705544290257375715 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5791997210984918929} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &3073125286398348836 + m_GameObject: {fileID: 4736260076719325185} + m_Mesh: {fileID: 7942793150968599163, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &2196195176402308036 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5791997210984918929} + m_GameObject: {fileID: 4736260076719325185} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -2301,13 +2258,13 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &5942207377838692810 +--- !u!114 &6386827669305936015 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5791997210984918929} + m_GameObject: {fileID: 4736260076719325185} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -2359,13 +2316,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &8899979765889102332 +--- !u!114 &8918796125417902112 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5791997210984918929} + m_GameObject: {fileID: 4736260076719325185} m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} @@ -2381,26 +2338,26 @@ MonoBehaviour: isTarget: 0 isplace: 0 canPut: 0 ---- !u!114 &25276216469572829 +--- !u!114 &3696271951046292631 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5791997210984918929} + m_GameObject: {fileID: 4736260076719325185} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &6641938421992556965 +--- !u!114 &3433270494200157079 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5791997210984918929} + m_GameObject: {fileID: 4736260076719325185} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} @@ -2417,13 +2374,13 @@ MonoBehaviour: original_shebei: [] search_u_wei: 0 is_jigui: 0 ---- !u!114 &2887313724591170803 +--- !u!114 &7879475813283359409 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5791997210984918929} + m_GameObject: {fileID: 4736260076719325185} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} @@ -2431,21 +2388,21 @@ MonoBehaviour: m_EditorClassIdentifier: volume: 10 selfIcon: {fileID: 21300000, guid: fed9fd82b3b74df4e9327000a22b6303, type: 3} ---- !u!64 &6229714247998861520 +--- !u!64 &5170792587312072434 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5791997210984918929} + m_GameObject: {fileID: 4736260076719325185} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 4 m_Convex: 0 m_CookingOptions: 30 - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &6032942910035936568 + m_Mesh: {fileID: 7942793150968599163, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!1 &4983428391184990468 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2453,46 +2410,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4676924790582239783} - - component: {fileID: 8698293420889228243} - - component: {fileID: 424272091861981431} + - component: {fileID: 7535662644123174170} + - component: {fileID: 3583992423038696839} + - component: {fileID: 7465110489669134756} m_Layer: 8 - m_Name: Box143 + m_Name: Box145 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4676924790582239783 +--- !u!4 &7535662644123174170 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6032942910035936568} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.39210325, y: 0.05056756, z: -0.4987613} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} + m_GameObject: {fileID: 4983428391184990468} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.18950981, y: 0.2658692, z: 0.24802452} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7479616600518107449} - m_RootOrder: 19 + m_Father: {fileID: 3395021974730314740} + m_RootOrder: 21 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8698293420889228243 +--- !u!33 &3583992423038696839 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6032942910035936568} - m_Mesh: {fileID: 3362949761008655658, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &424272091861981431 + m_GameObject: {fileID: 4983428391184990468} + m_Mesh: {fileID: 3971713461252967244, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &7465110489669134756 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6032942910035936568} + m_GameObject: {fileID: 4983428391184990468} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -2533,7 +2490,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &6053152901570487455 +--- !u!1 &5143003399210635393 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2541,9 +2498,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4723685574122703635} - - component: {fileID: 613587790482662731} - - component: {fileID: 2341070427561987761} + - component: {fileID: 9183740804689567855} + - component: {fileID: 1143559744319206245} + - component: {fileID: 3826992533144248570} m_Layer: 11 m_Name: Cube (4) m_TagString: Untagged @@ -2551,41 +2508,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4723685574122703635 +--- !u!4 &9183740804689567855 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6053152901570487455} + m_GameObject: {fileID: 5143003399210635393} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0154, y: -0.2693, z: -0.0432} - m_LocalScale: {x: 0.013396695, y: 0.013520001, z: 0.012286814} + m_LocalPosition: {x: 0.015400052, y: -0.2693, z: -0.043199986} + m_LocalScale: {x: 0.013400002, y: 0.013520002, z: 0.012290003} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 1220063532439705337} + m_Father: {fileID: 705144181047787125} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &613587790482662731 +--- !u!65 &1143559744319206245 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6053152901570487455} + m_GameObject: {fileID: 5143003399210635393} 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!114 &2341070427561987761 +--- !u!114 &3826992533144248570 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6053152901570487455} + m_GameObject: {fileID: 5143003399210635393} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2611,7 +2568,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6320681701868160945 +--- !u!1 &5307118651595071268 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2619,9 +2576,128 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4334792055748643085} - - component: {fileID: 8723904869634141909} - - component: {fileID: 7596826487704643326} + - component: {fileID: 1229934898108483447} + m_Layer: 8 + m_Name: "\u951A\u70B9" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1229934898108483447 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5307118651595071268} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: -0.56400025, z: -0.46100006} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3395021974730314740} + m_RootOrder: 24 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5377003461425769908 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6467278901368064683} + - component: {fileID: 7030451568592497503} + - component: {fileID: 2073050611690565755} + m_Layer: 8 + m_Name: Box143 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6467278901368064683 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5377003461425769908} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2488575, y: 0.2658692, z: 0.24802452} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3395021974730314740} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7030451568592497503 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5377003461425769908} + m_Mesh: {fileID: 3362949761008655658, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &2073050611690565755 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5377003461425769908} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &5661085415174221629 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2670603640076902785} + - component: {fileID: 6932778111396513369} + - component: {fileID: 8091557603015560818} m_Layer: 8 m_Name: Box141 m_TagString: Untagged @@ -2629,36 +2705,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4334792055748643085 +--- !u!4 &2670603640076902785 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6320681701868160945} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.061917428, y: 0.05056756, z: -0.16562717} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} + m_GameObject: {fileID: 5661085415174221629} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.039886832, y: 0.08862299, z: 0.24802452} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7479616600518107449} + m_Father: {fileID: 3395021974730314740} m_RootOrder: 17 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8723904869634141909 +--- !u!33 &6932778111396513369 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6320681701868160945} + m_GameObject: {fileID: 5661085415174221629} m_Mesh: {fileID: 4070407857570179305, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &7596826487704643326 +--- !u!23 &8091557603015560818 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6320681701868160945} + m_GameObject: {fileID: 5661085415174221629} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -2699,7 +2775,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &6633542783160215944 +--- !u!1 &6778188394613516394 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2707,46 +2783,487 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8193077465537047958} - - component: {fileID: 2926006783289513227} - - component: {fileID: 9132952342100312360} + - component: {fileID: 2310535020112376944} + - component: {fileID: 4819130902363120603} + - component: {fileID: 262788130774349722} m_Layer: 8 - m_Name: Box145 + m_Name: Box103 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8193077465537047958 +--- !u!4 &2310535020112376944 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6633542783160215944} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.29833046, y: 0.05056756, z: -0.4987613} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} + m_GameObject: {fileID: 6778188394613516394} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.4324825} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7479616600518107449} - m_RootOrder: 21 + m_Father: {fileID: 3395021974730314740} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2926006783289513227 +--- !u!33 &4819130902363120603 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6633542783160215944} - m_Mesh: {fileID: 3971713461252967244, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &9132952342100312360 + m_GameObject: {fileID: 6778188394613516394} + m_Mesh: {fileID: -7768408576438331914, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &262788130774349722 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6633542783160215944} + m_GameObject: {fileID: 6778188394613516394} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &6981288345804216074 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4840592908536158945} + - component: {fileID: 7210008487663396281} + - component: {fileID: 2233272332681587288} + m_Layer: 8 + m_Name: Box108 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4840592908536158945 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6981288345804216074} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.27569, y: 0.08862302, z: 0.24802455} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3395021974730314740} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7210008487663396281 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6981288345804216074} + m_Mesh: {fileID: -5798510906853853667, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &2233272332681587288 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6981288345804216074} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: e33e8e143de68ea419d74e4d6b23e139, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, 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!1 &7187132512080155359 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4083303521803197063} + - component: {fileID: 5617181876750499378} + - component: {fileID: 6609785742145184520} + m_Layer: 8 + m_Name: Box105 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4083303521803197063 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7187132512080155359} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.030028656} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3395021974730314740} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5617181876750499378 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7187132512080155359} + m_Mesh: {fileID: -5369315709208034699, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &6609785742145184520 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7187132512080155359} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 806a8597a82ff9a448269dbf812faef4, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &7241192607852737948 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8730348325483878514} + - component: {fileID: 8791153583104932498} + - component: {fileID: 874065527445877513} + m_Layer: 11 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8730348325483878514 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7241192607852737948} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.000090271235, y: -0.18049997, z: 0.030300021} + m_LocalScale: {x: 0.013520002, y: 0.013520002, z: 0.017220004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 786102043818516729} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8791153583104932498 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7241192607852737948} + 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!114 &874065527445877513 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7241192607852737948} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7253674082670056526 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1257391482798079917} + - component: {fileID: 5999649964981957376} + - component: {fileID: 9000435015034363846} + m_Layer: 8 + m_Name: Box109 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1257391482798079917 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7253674082670056526} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2496852, y: 0.08862302, z: 0.24802452} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3395021974730314740} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5999649964981957376 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7253674082670056526} + m_Mesh: {fileID: 6975212812562875068, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &9000435015034363846 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7253674082670056526} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, 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!1 &7390649681888382107 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8804059929203923100} + - component: {fileID: 3424784461803849493} + - component: {fileID: 1738275967282578220} + m_Layer: 8 + m_Name: Box139 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8804059929203923100 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7390649681888382107} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.021260858, y: 0.08862299, z: 0.24802452} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3395021974730314740} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3424784461803849493 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7390649681888382107} + m_Mesh: {fileID: -6520371374760543206, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &1738275967282578220 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7390649681888382107} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -2787,7 +3304,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &7088964732117525953 +--- !u!1 &7827668745802073223 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2795,58 +3312,771 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1427480625449896053} - - component: {fileID: 6149900810510955812} - - component: {fileID: 8310957433093385755} - - component: {fileID: 6648767520463237312} - - component: {fileID: 4222864281426585426} - - component: {fileID: 630638123807125938} - - component: {fileID: 58511150178238994} + - component: {fileID: 3576176446311428951} + - component: {fileID: 4034809034365583092} + - component: {fileID: 5003505604882292324} + m_Layer: 11 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3576176446311428951 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7827668745802073223} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.000090286136, y: -0.18049993, z: 0.09224999} + m_LocalScale: {x: 0.013520002, y: 0.013520002, z: 0.017220004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 786102043818516729} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &4034809034365583092 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7827668745802073223} + 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!114 &5003505604882292324 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7827668745802073223} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8182878186572039925 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8473347063849835036} + - component: {fileID: 6622665105300683163} + - component: {fileID: 7560149017470484144} m_Layer: 8 + m_Name: Box115 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8473347063849835036 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8182878186572039925} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.051921457, y: 0.08862299, z: 0.24802452} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3395021974730314740} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6622665105300683163 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8182878186572039925} + m_Mesh: {fileID: -3526922212205323383, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &7560149017470484144 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8182878186572039925} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &8211422899418927046 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5047678711669077617} + - component: {fileID: 3628009453312859986} + - component: {fileID: 1404508161583126811} + m_Layer: 11 + m_Name: Cube (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5047678711669077617 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8211422899418927046} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0032999218, y: -0.35789996, z: -0.04519999} + m_LocalScale: {x: 0.013400002, y: 0.013520002, z: 0.012290003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1054756265575975594} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3628009453312859986 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8211422899418927046} + 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!114 &1404508161583126811 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8211422899418927046} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8351656259101159998 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5009429814413721269} + - component: {fileID: 5108181462181901687} + - component: {fileID: 1373356549129665158} + m_Layer: 8 + m_Name: Box142 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5009429814413721269 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8351656259101159998} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.10083905, y: 0.08862296, z: 0.24802452} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3395021974730314740} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5108181462181901687 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8351656259101159998} + m_Mesh: {fileID: 8197054578433957194, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &1373356549129665158 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8351656259101159998} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &8387289572827861700 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7154924372107317977} + - component: {fileID: 1601273353101999798} + - component: {fileID: 6583469489928369277} + m_Layer: 8 + m_Name: Box148 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7154924372107317977 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8387289572827861700} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.0035092235} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3395021974730314740} + m_RootOrder: 23 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1601273353101999798 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8387289572827861700} + m_Mesh: {fileID: 6762006788543029084, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &6583469489928369277 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8387289572827861700} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 806a8597a82ff9a448269dbf812faef4, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &8505584412780028359 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8835206757150889430} + - component: {fileID: 149367658498111778} + - component: {fileID: 1103782214380717607} + - component: {fileID: 4926691681537331014} + - component: {fileID: 2480929062333901716} + - component: {fileID: 1539793899035308036} + - component: {fileID: 578385621319282466} + m_Layer: 13 + m_Name: Box138 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8835206757150889430 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8505584412780028359} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.14807138, y: 0, z: 0.24802452} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3901691731070047339} + - {fileID: 853286396809985711} + - {fileID: 4998097785217191462} + - {fileID: 276491290400186490} + m_Father: {fileID: 3395021974730314740} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &149367658498111778 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8505584412780028359} + m_Mesh: {fileID: 6632251951820118909, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &1103782214380717607 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8505584412780028359} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: e33e8e143de68ea419d74e4d6b23e139, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!114 &4926691681537331014 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8505584412780028359} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} + m_Name: + m_EditorClassIdentifier: + deviceList: + id: + deviceName: + deviceCode: + type: 2 + typeStr: + deviceType: 3 + deviceTypeStr: + rackId: + shelfId: + slotId: + devicePosition: 4 + machineModel: + status: + conDeviceName: + rackType: + openFlag: + backDoorFlag: + modelNum: + occupyNum: + residueNum: + operationTime: + directorName: + phone: + manufacturer: + powerProperties: + maintenanceUnit: + machineFrameHigh: + machineFrameWide: + machineFrameThick: + slotNum: + slotSort: + installMethod: + affiliationFrame: + parentSlotName: + slotType: + occupyStatus: + affiliationSlot: + portNum: + cardFunction: + cardType: + runStatus: + tmsId: + remark: + createTime: + createName: +--- !u!114 &2480929062333901716 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8505584412780028359} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!114 &1539793899035308036 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8505584412780028359} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!64 &578385621319282466 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8505584412780028359} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 6632251951820118909, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!1 &8541926510756493963 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8814438707350192368} + - component: {fileID: 6127432277020232972} + - component: {fileID: 6619409074282672221} + m_Layer: 8 + m_Name: Box146 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8814438707350192368 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8541926510756493963} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.3017553, y: 0.0889999, z: 0.24802452} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3395021974730314740} + m_RootOrder: 22 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6127432277020232972 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8541926510756493963} + m_Mesh: {fileID: -6891480930148778616, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &6619409074282672221 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8541926510756493963} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!1 &8882974684854897997 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 786102043818516729} + - component: {fileID: 5512251462968090024} + - component: {fileID: 7670147436280481431} + - component: {fileID: 4635480342717452376} + - component: {fileID: 6225441464110069181} + - component: {fileID: 1455180559873620511} + - component: {fileID: 6079037897110731321} + m_Layer: 13 m_Name: Box110 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1427480625449896053 +--- !u!4 &786102043818516729 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7088964732117525953} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.3545342, y: 0.05056756, z: -0.16562715} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} + m_GameObject: {fileID: 8882974684854897997} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2236804, y: 0.08862302, z: 0.24802452} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 4813300286806972379} - - {fileID: 3553493968075047206} - - {fileID: 1876441878719583214} - - {fileID: 4665805000032781865} - - {fileID: 1488417346727576840} - - {fileID: 937466838903070822} - - {fileID: 4344457836382263791} - - {fileID: 3681307798398497284} - m_Father: {fileID: 7479616600518107449} + - {fileID: 3576176446311428951} + - {fileID: 6116015586805046083} + - {fileID: 2001008226805608848} + - {fileID: 8730348325483878514} + - {fileID: 7582457317324698068} + - {fileID: 828058296409308525} + - {fileID: 1657507667203840797} + - {fileID: 1856578222450061042} + m_Father: {fileID: 3395021974730314740} m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6149900810510955812 +--- !u!33 &5512251462968090024 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7088964732117525953} + m_GameObject: {fileID: 8882974684854897997} m_Mesh: {fileID: 3600287743064244957, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &8310957433093385755 +--- !u!23 &7670147436280481431 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7088964732117525953} + m_GameObject: {fileID: 8882974684854897997} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -2890,26 +4120,13 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &6648767520463237312 +--- !u!114 &4635480342717452376 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7088964732117525953} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &4222864281426585426 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7088964732117525953} + m_GameObject: {fileID: 8882974684854897997} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -2961,13 +4178,26 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &630638123807125938 +--- !u!114 &6225441464110069181 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7088964732117525953} + m_GameObject: {fileID: 8882974684854897997} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!114 &1455180559873620511 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8882974684854897997} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -2977,15 +4207,15 @@ MonoBehaviour: My_magnifyState: 0 empty: [] TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &58511150178238994 +--- !u!64 &6079037897110731321 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7088964732117525953} + m_GameObject: {fileID: 8882974684854897997} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -2993,7 +4223,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 3600287743064244957, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!1 &7541499604808248953 +--- !u!1 &9039737793161768965 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3001,139 +4231,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7831977415637021328} - - component: {fileID: 4814290170719310103} - - component: {fileID: 8200121220783134268} - m_Layer: 8 - m_Name: Box115 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7831977415637021328 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7541499604808248953} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.08314503, y: 0.05056756, z: -0.16562714} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7479616600518107449} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4814290170719310103 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7541499604808248953} - m_Mesh: {fileID: -3526922212205323383, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &8200121220783134268 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7541499604808248953} - 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &7601626500686060563 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1876441878719583214} - - component: {fileID: 2001287712934974595} - - component: {fileID: 7828860958419852755} + - component: {fileID: 349947246354557679} + - component: {fileID: 8991962722985889136} + - component: {fileID: 6898402395640284391} m_Layer: 11 - m_Name: Cube (2) + m_Name: Cube (3) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1876441878719583214 +--- !u!4 &349947246354557679 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7601626500686060563} + m_GameObject: {fileID: 9039737793161768965} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009034574, y: -0.1805, z: 0.051200032} - m_LocalScale: {x: 0.013519052, y: 0.013519053, z: 0.017220704} + m_LocalPosition: {x: 0.015400052, y: -0.2693, z: -0.0119999945} + m_LocalScale: {x: 0.013400002, y: 0.013520002, z: 0.012290003} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 1427480625449896053} + m_Father: {fileID: 705144181047787125} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2001287712934974595 +--- !u!65 &8991962722985889136 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7601626500686060563} + m_GameObject: {fileID: 9039737793161768965} 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!114 &7828860958419852755 +--- !u!114 &6898402395640284391 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7601626500686060563} + m_GameObject: {fileID: 9039737793161768965} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3159,1145 +4301,3 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7634314642934293085 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3400364715692167400} - - component: {fileID: 7922559105711096719} - - component: {fileID: 3078904783011389814} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3400364715692167400 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7634314642934293085} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0101, y: -0.2693, z: 0.0562} - m_LocalScale: {x: 0.01352, y: 0.013520001, z: 0.01722} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1220063532439705337} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7922559105711096719 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7634314642934293085} - 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!114 &3078904783011389814 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7634314642934293085} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7692340210416687794 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6675095870650848825} - - component: {fileID: 6900713430624574971} - - component: {fileID: 731977005295669770} - m_Layer: 8 - m_Name: Box142 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6675095870650848825 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7692340210416687794} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.15822549, y: 0.05056756, z: -0.16562714} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7479616600518107449} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6900713430624574971 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7692340210416687794} - m_Mesh: {fileID: 8197054578433957194, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &731977005295669770 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7692340210416687794} - 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &7872862630963935816 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8821637404064397909} - - component: {fileID: 1089721668370306618} - - component: {fileID: 4790294169731865841} - m_Layer: 8 - m_Name: Box148 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8821637404064397909 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7872862630963935816} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.001106083, y: -0.50186276, z: 0.0009396253} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7479616600518107449} - m_RootOrder: 23 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1089721668370306618 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7872862630963935816} - m_Mesh: {fileID: 6762006788543029084, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &4790294169731865841 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7872862630963935816} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 806a8597a82ff9a448269dbf812faef4, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &8011413636199811403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7186425625986432346} - - component: {fileID: 1960487146016297390} - - component: {fileID: 1618702836948659883} - - component: {fileID: 5655813245632628960} - - component: {fileID: 9097539716530905100} - - component: {fileID: 5157907358099521777} - - component: {fileID: 6970314950895589375} - m_Layer: 8 - m_Name: Box138 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7186425625986432346 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8011413636199811403} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.23285533, y: 0.05056756, z: 0.00093976513} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 9066369734668522041} - - {fileID: 95729430134403865} - - {fileID: 5117285967169854150} - - {fileID: 1711999900310156383} - m_Father: {fileID: 7479616600518107449} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1960487146016297390 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8011413636199811403} - m_Mesh: {fileID: 6632251951820118909, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &1618702836948659883 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8011413636199811403} - 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: e33e8e143de68ea419d74e4d6b23e139, type: 2} - - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!114 &5655813245632628960 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8011413636199811403} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3` - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 4 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &9097539716530905100 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8011413636199811403} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5157907358099521777 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8011413636199811403} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &6970314950895589375 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8011413636199811403} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 6632251951820118909, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!1 &8046984014467338759 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7166503512946026620} - - component: {fileID: 5489508086068454784} - - component: {fileID: 4826584257640978641} - m_Layer: 8 - m_Name: Box146 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7166503512946026620 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8046984014467338759} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.4756849, y: 0.05056756, z: -0.16562715} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7479616600518107449} - m_RootOrder: 22 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5489508086068454784 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8046984014467338759} - m_Mesh: {fileID: -6891480930148778616, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &4826584257640978641 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8046984014467338759} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!1 &8098619635866045577 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5117285967169854150} - - component: {fileID: 3379101815999642026} - - component: {fileID: 239211187821600333} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5117285967169854150 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8098619635866045577} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0154, y: -0.26930007, z: -0.0119999945} - m_LocalScale: {x: 0.013396695, y: 0.013520002, z: 0.012286815} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7186425625986432346} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3379101815999642026 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8098619635866045577} - 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!114 &239211187821600333 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8098619635866045577} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8396016443145338174 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4813300286806972379} - - component: {fileID: 6431950736240216304} - - component: {fileID: 458017122548266798} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4813300286806972379 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8396016443145338174} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009036064, y: -0.18049997, z: 0.09225001} - m_LocalScale: {x: 0.013519052, y: 0.013519053, z: 0.017220704} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1427480625449896053} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6431950736240216304 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8396016443145338174} - 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!114 &458017122548266798 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8396016443145338174} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8426379566770494277 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1711999900310156383} - - component: {fileID: 5441150226822787876} - - component: {fileID: 335396112018675222} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1711999900310156383 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8426379566770494277} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0154, y: -0.26930007, z: -0.043200016} - m_LocalScale: {x: 0.013396695, y: 0.013520002, z: 0.012286815} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7186425625986432346} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5441150226822787876 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8426379566770494277} - 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!114 &335396112018675222 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8426379566770494277} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8774456244297498502 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6488165538850796141} - - component: {fileID: 9018666271591959861} - - component: {fileID: 565633786822443732} - m_Layer: 8 - m_Name: Box108 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6488165538850796141 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8774456244297498502} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.43671235, y: 0.05056756, z: -0.16562715} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7479616600518107449} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &9018666271591959861 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8774456244297498502} - m_Mesh: {fileID: -5798510906853853667, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &565633786822443732 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8774456244297498502} - 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: e33e8e143de68ea419d74e4d6b23e139, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, 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!1 &8834504756547402323 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2417706631599829515} - - component: {fileID: 6112396880271562430} - - component: {fileID: 4800002298827901828} - m_Layer: 8 - m_Name: Box105 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2417706631599829515 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8834504756547402323} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.001106083, y: -0.42820528, z: 0.0009396253} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7479616600518107449} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6112396880271562430 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8834504756547402323} - m_Mesh: {fileID: -5369315709208034699, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &4800002298827901828 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8834504756547402323} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 806a8597a82ff9a448269dbf812faef4, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &9047062673769036994 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 600249031166564129} - - component: {fileID: 5360599049485179788} - - component: {fileID: 7331950635500123978} - m_Layer: 8 - m_Name: Box109 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &600249031166564129 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9047062673769036994} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.39562327, y: 0.05056756, z: -0.16562715} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7479616600518107449} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5360599049485179788 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9047062673769036994} - m_Mesh: {fileID: 6975212812562875068, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &7331950635500123978 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9047062673769036994} - 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, 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!1 &9202957466487022615 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7136490618217312272} - - component: {fileID: 3936395554387128217} - - component: {fileID: 87887796790455200} - m_Layer: 8 - m_Name: Box139 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7136490618217312272 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9202957466487022615} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.034699492, y: 0.05056756, z: -0.16562715} - m_LocalScale: {x: 1.5800581, y: 1.879498, z: 2.196247} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7479616600518107449} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3936395554387128217 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9202957466487022615} - m_Mesh: {fileID: -6520371374760543206, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &87887796790455200 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9202957466487022615} - 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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} diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/20.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/20.prefab index bf45327b6..2c049618d 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/20.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/20.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &146536469160412521 +--- !u!1 &70070682681130247 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,51 +8,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8909337605444133146} - - component: {fileID: 4286908145588616418} - - component: {fileID: 4794556087260303350} + - component: {fileID: 4073049622340903252} + - component: {fileID: 6506202480605296446} + - component: {fileID: 1825640477748166540} m_Layer: 11 - m_Name: Cube (1) + m_Name: Sphere m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8909337605444133146 +--- !u!4 &4073049622340903252 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 146536469160412521} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 70070682681130247} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.20285007, y: -0.014200002, z: -0.005136125} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2882354195092813665} - m_RootOrder: 1 + m_Father: {fileID: 7102364803529598818} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4286908145588616418 -BoxCollider: +--- !u!135 &6506202480605296446 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 146536469160412521} + m_GameObject: {fileID: 70070682681130247} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4794556087260303350 +--- !u!114 &1825640477748166540 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 146536469160412521} + m_GameObject: {fileID: 70070682681130247} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -65,7 +65,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 2 + portPosition: 1 deviceId: deviceName: portModel: @@ -93,7 +93,7 @@ GameObject: - component: {fileID: 5528482404942303544} - component: {fileID: 6879994657201393847} - component: {fileID: 6636425314938402372} - m_Layer: 8 + m_Layer: 13 m_Name: Object002 m_TagString: Untagged m_Icon: {fileID: 0} @@ -112,18 +112,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 5519510317604600422} - - {fileID: 4667007161145494176} - - {fileID: 5493727892208222087} - - {fileID: 8291036485490763202} - - {fileID: 1888042747117407450} - - {fileID: 178022273583025440} - - {fileID: 6276815236640898968} - - {fileID: 7847868716498602328} - - {fileID: 7960633694786568610} - - {fileID: 7691727016605302345} - - {fileID: 1326204423908509809} - - {fileID: 4396387779488924614} + - {fileID: 1154045236688858762} + - {fileID: 5822990524613631789} + - {fileID: 5948257585130820829} + - {fileID: 3700144104305282486} + - {fileID: 5181355303526684639} + - {fileID: 6618489269336638879} + - {fileID: 4491795753029332138} + - {fileID: 2804692721746005921} + - {fileID: 5610911679076570758} + - {fileID: 5650193141139611664} + - {fileID: 9007911519829215558} + - {fileID: 3915645134581423755} m_Father: {fileID: 1709068627463319996} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -282,7 +282,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -3996760141626369306, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} ---- !u!1 &222823812851356139 +--- !u!1 &436096458239270686 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -290,51 +290,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3769830013249752952} - - component: {fileID: 296405330248780325} - - component: {fileID: 2813182151780422210} + - component: {fileID: 5932596175274070391} + - component: {fileID: 8393836505984174228} + - component: {fileID: 6139394620096476076} m_Layer: 11 - m_Name: Cube (11) + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3769830013249752952 +--- !u!4 &5932596175274070391 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 222823812851356139} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 436096458239270686} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.1918, y: -0.014200002, z: -0.004200004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 4448320551712385765} - m_RootOrder: 11 + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &296405330248780325 -BoxCollider: +--- !u!135 &8393836505984174228 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 222823812851356139} + m_GameObject: {fileID: 436096458239270686} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2813182151780422210 +--- !u!114 &6139394620096476076 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 222823812851356139} + m_GameObject: {fileID: 436096458239270686} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -347,7 +347,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 12 + portPosition: 10 deviceId: deviceName: portModel: @@ -360,7 +360,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &231396130391688527 +--- !u!1 &470338702438466980 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -368,51 +368,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 9070572637175025118} - - component: {fileID: 1620252989094079528} - - component: {fileID: 7524362998406255537} + - component: {fileID: 5610911679076570758} + - component: {fileID: 7157551303056416887} + - component: {fileID: 7470353011315544882} m_Layer: 11 - m_Name: Cube (7) + m_Name: Sphere (8) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &9070572637175025118 +--- !u!4 &5610911679076570758 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 231396130391688527} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 470338702438466980} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.14860001, y: -0.014170006, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2882354195092813665} - m_RootOrder: 7 + m_Father: {fileID: 8132091427676697685} + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1620252989094079528 -BoxCollider: +--- !u!135 &7157551303056416887 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 231396130391688527} + m_GameObject: {fileID: 470338702438466980} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7524362998406255537 +--- !u!114 &7470353011315544882 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 231396130391688527} + m_GameObject: {fileID: 470338702438466980} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -425,7 +425,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 8 + portPosition: 9 deviceId: deviceName: portModel: @@ -438,7 +438,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &348651102645328616 +--- !u!1 &497326483879152911 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -446,207 +446,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6071107073763159052} - - component: {fileID: 6179371735995310087} - - component: {fileID: 3557698188177474971} + - component: {fileID: 3700144104305282486} + - component: {fileID: 2230002075582726712} + - component: {fileID: 7329522779033152073} m_Layer: 11 - m_Name: Cube (5) + m_Name: Sphere (3) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6071107073763159052 +--- !u!4 &3700144104305282486 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 348651102645328616} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4448320551712385765} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6179371735995310087 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 348651102645328616} - 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!114 &3557698188177474971 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 348651102645328616} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &355781866818073644 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1015588398378279318} - - component: {fileID: 5316206183130081676} - - component: {fileID: 7874379692809762212} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1015588398378279318 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 355781866818073644} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4448320551712385765} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5316206183130081676 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 355781866818073644} - 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!114 &7874379692809762212 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 355781866818073644} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &370865285249326840 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8291036485490763202} - - component: {fileID: 1815319299300244959} - - component: {fileID: 2538843849406753664} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8291036485490763202 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 370865285249326840} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 497326483879152911} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0701, y: -0.014170006, z: -0.005036004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 8132091427676697685} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1815319299300244959 -BoxCollider: +--- !u!135 &2230002075582726712 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 370865285249326840} + m_GameObject: {fileID: 497326483879152911} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2538843849406753664 +--- !u!114 &7329522779033152073 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 370865285249326840} + m_GameObject: {fileID: 497326483879152911} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -672,7 +516,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &393515569052032512 +--- !u!1 &537974787925143071 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -680,51 +524,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8252636873960920677} - - component: {fileID: 5223397249144316505} - - component: {fileID: 1322807967139884305} + - component: {fileID: 5819160155866079893} + - component: {fileID: 6814137436655657774} + - component: {fileID: 2594385006557685252} m_Layer: 11 - m_Name: Cube (6) + m_Name: Sphere (5) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8252636873960920677 +--- !u!4 &5819160155866079893 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 393515569052032512} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 537974787925143071} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.01970002, y: -0.014200002, z: -0.0051361173} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2882354195092813665} - m_RootOrder: 6 + m_Father: {fileID: 7102364803529598818} + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5223397249144316505 -BoxCollider: +--- !u!135 &6814137436655657774 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 393515569052032512} + m_GameObject: {fileID: 537974787925143071} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1322807967139884305 +--- !u!114 &2594385006557685252 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 393515569052032512} + m_GameObject: {fileID: 537974787925143071} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -737,7 +581,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 7 + portPosition: 6 deviceId: deviceName: portModel: @@ -765,7 +609,7 @@ GameObject: - component: {fileID: 4111926407767541930} - component: {fileID: 5435891912135199535} - component: {fileID: 9089649458867688255} - m_Layer: 8 + m_Layer: 13 m_Name: Object004 m_TagString: Untagged m_Icon: {fileID: 0} @@ -784,18 +628,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 7900656803283302177} - - {fileID: 8909337605444133146} - - {fileID: 1980636587052085450} - - {fileID: 2671980175945223580} - - {fileID: 4174457498095272080} - - {fileID: 5816833915176301676} - - {fileID: 8252636873960920677} - - {fileID: 9070572637175025118} - - {fileID: 4593402333573960735} - - {fileID: 2182265241457858039} - - {fileID: 4251587505889092915} - - {fileID: 6614228953678249330} + - {fileID: 2758767420341697500} + - {fileID: 8867036969805453592} + - {fileID: 8093054714030289784} + - {fileID: 6090660998124547727} + - {fileID: 1412670038803886995} + - {fileID: 1091171475064454686} + - {fileID: 6364476323380147505} + - {fileID: 1512729373705044575} + - {fileID: 401958534010103620} + - {fileID: 7340001165356281379} + - {fileID: 9104761368601412} + - {fileID: 6568218842029857077} m_Father: {fileID: 1709068627463319996} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -954,7 +798,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -8113768720884857512, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} ---- !u!1 &598280006265720891 +--- !u!1 &794006144695601276 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -962,51 +806,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3695753988607786474} - - component: {fileID: 6439748671963524995} - - component: {fileID: 8528141813271880528} + - component: {fileID: 881979942969889830} + - component: {fileID: 3697346800593873646} + - component: {fileID: 720803387448247289} m_Layer: 11 - m_Name: Cube (11) + m_Name: Sphere (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3695753988607786474 +--- !u!4 &881979942969889830 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 598280006265720891} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200015, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 794006144695601276} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.1133, y: -0.014200002, z: -0.0041999966} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 7102364803529598818} - m_RootOrder: 11 + m_Father: {fileID: 4448320551712385765} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6439748671963524995 -BoxCollider: +--- !u!135 &3697346800593873646 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 598280006265720891} + m_GameObject: {fileID: 794006144695601276} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8528141813271880528 +--- !u!114 &720803387448247289 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 598280006265720891} + m_GameObject: {fileID: 794006144695601276} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1019,241 +863,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &687353991306286226 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2110641770011683359} - - component: {fileID: 6542440711438587313} - - component: {fileID: 7616057253877778004} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2110641770011683359 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 687353991306286226} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.15960005, y: -0.014200004, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7102364803529598818} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6542440711438587313 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 687353991306286226} - 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!114 &7616057253877778004 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 687353991306286226} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &754699743486496110 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3388665459361448137} - - component: {fileID: 965579118504110655} - - component: {fileID: 8731154731249482884} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3388665459361448137 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 754699743486496110} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.14860004, y: -0.014200004, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7102364803529598818} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &965579118504110655 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 754699743486496110} - 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!114 &8731154731249482884 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 754699743486496110} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &777508837425041121 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4396387779488924614} - - component: {fileID: 7105016320014360209} - - component: {fileID: 1861481282061871109} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4396387779488924614 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 777508837425041121} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8132091427676697685} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7105016320014360209 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 777508837425041121} - 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!114 &1861481282061871109 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 777508837425041121} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 + portPosition: 3 deviceId: deviceName: portModel: @@ -1298,7 +908,7 @@ Transform: m_Father: {fileID: 1709068627463319996} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1107783945431682333 +--- !u!1 &1085598144888170162 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1306,51 +916,129 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1714328148525450904} - - component: {fileID: 8829108686343424237} - - component: {fileID: 6817590529030294573} + - component: {fileID: 4491795753029332138} + - component: {fileID: 4585887878973345913} + - component: {fileID: 6789866550520947495} m_Layer: 11 - m_Name: Cube (10) + m_Name: Sphere (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1714328148525450904 +--- !u!4 &4491795753029332138 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1107783945431682333} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 1085598144888170162} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.066099994, y: -0.014170006, z: -0.005036004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 4448320551712385765} - m_RootOrder: 10 + m_Father: {fileID: 8132091427676697685} + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8829108686343424237 -BoxCollider: +--- !u!135 &4585887878973345913 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1107783945431682333} + m_GameObject: {fileID: 1085598144888170162} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6817590529030294573 +--- !u!114 &6789866550520947495 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1107783945431682333} + m_GameObject: {fileID: 1085598144888170162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1237627691634622075 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9007911519829215558} + - component: {fileID: 7906201818383281639} + - component: {fileID: 2873877059462937144} + m_Layer: 11 + m_Name: Sphere (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9007911519829215558 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237627691634622075} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.23820001, y: -0.014170006, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 8132091427676697685} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7906201818383281639 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237627691634622075} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2873877059462937144 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237627691634622075} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1376,7 +1064,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &1335415376442319166 +--- !u!1 &1324907960355992343 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1384,51 +1072,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5493727892208222087} - - component: {fileID: 3084936187190923071} - - component: {fileID: 8078070803237755148} + - component: {fileID: 5650193141139611664} + - component: {fileID: 4662306619440411569} + - component: {fileID: 9052132878866602591} m_Layer: 11 - m_Name: Cube (2) + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5493727892208222087 +--- !u!4 &5650193141139611664 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1335415376442319166} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 1324907960355992343} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.1918, y: -0.014170006, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 8132091427676697685} - m_RootOrder: 2 + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3084936187190923071 -BoxCollider: +--- !u!135 &4662306619440411569 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1335415376442319166} + m_GameObject: {fileID: 1324907960355992343} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8078070803237755148 +--- !u!114 &9052132878866602591 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1335415376442319166} + m_GameObject: {fileID: 1324907960355992343} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1441,7 +1129,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 3 + portPosition: 10 deviceId: deviceName: portModel: @@ -1454,7 +1142,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &1429505130188956834 +--- !u!1 &1510722207160795627 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1462,51 +1150,207 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6763698175517028327} - - component: {fileID: 4740844864742740465} - - component: {fileID: 3307951616916711586} + - component: {fileID: 3766272809854337868} + - component: {fileID: 4613051851518694664} + - component: {fileID: 6530004660002794691} m_Layer: 11 - m_Name: Cube (3) + m_Name: Sphere (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6763698175517028327 +--- !u!4 &3766272809854337868 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1429505130188956834} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.07010001, y: -0.014200004, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 1510722207160795627} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.15959999, y: -0.014200002, z: -0.0041999966} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 7102364803529598818} - m_RootOrder: 3 + m_Father: {fileID: 4448320551712385765} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4740844864742740465 -BoxCollider: +--- !u!135 &4613051851518694664 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1429505130188956834} + m_GameObject: {fileID: 1510722207160795627} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3307951616916711586 +--- !u!114 &6530004660002794691 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1429505130188956834} + m_GameObject: {fileID: 1510722207160795627} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2346543322243817629 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7419029092949350285} + - component: {fileID: 7767672438128956136} + - component: {fileID: 5768825968735797430} + m_Layer: 11 + m_Name: Sphere (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7419029092949350285 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2346543322243817629} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.14860001, y: -0.014200002, z: -0.004200004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4448320551712385765} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7767672438128956136 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2346543322243817629} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5768825968735797430 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2346543322243817629} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 9 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2408245049740685700 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6090660998124547727} + - component: {fileID: 3000195296841434568} + - component: {fileID: 2957707504576849111} + m_Layer: 11 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6090660998124547727 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2408245049740685700} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0701, y: -0.014200002, z: -0.00500001} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2882354195092813665} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3000195296841434568 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2408245049740685700} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2957707504576849111 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2408245049740685700} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1532,7 +1376,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &1851713407373859053 +--- !u!1 &2605226979327035638 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1540,285 +1384,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5816833915176301676} - - component: {fileID: 4252280844003597583} - - component: {fileID: 4438160062240236370} + - component: {fileID: 5614449417688282399} + - component: {fileID: 6291646445800933927} + - component: {fileID: 1832962003262124604} m_Layer: 11 - m_Name: Cube (5) + m_Name: Sphere (3) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5816833915176301676 +--- !u!4 &5614449417688282399 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1851713407373859053} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2882354195092813665} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4252280844003597583 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1851713407373859053} - 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!114 &4438160062240236370 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1851713407373859053} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1957828822405530571 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1326204423908509809} - - component: {fileID: 3225165446783848957} - - component: {fileID: 4196168653598921737} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1326204423908509809 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1957828822405530571} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8132091427676697685} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3225165446783848957 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1957828822405530571} - 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!114 &4196168653598921737 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1957828822405530571} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2044171473579728746 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5519510317604600422} - - component: {fileID: 4747760671716204579} - - component: {fileID: 5811359621889831078} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5519510317604600422 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2044171473579728746} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8132091427676697685} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4747760671716204579 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2044171473579728746} - 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!114 &5811359621889831078 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2044171473579728746} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2076113314879580524 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 928594298522509771} - - component: {fileID: 2024749271901067213} - - component: {fileID: 7766569041075481464} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &928594298522509771 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2076113314879580524} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.19180012, y: -0.014200004, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 2605226979327035638} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.07010001, y: -0.014200002, z: -0.0051361173} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 7102364803529598818} - m_RootOrder: 9 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2024749271901067213 -BoxCollider: +--- !u!135 &6291646445800933927 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2076113314879580524} + m_GameObject: {fileID: 2605226979327035638} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7766569041075481464 +--- !u!114 &1832962003262124604 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2076113314879580524} + m_GameObject: {fileID: 2605226979327035638} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1831,7 +1441,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 10 + portPosition: 4 deviceId: deviceName: portModel: @@ -1844,7 +1454,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2582702231263986810 +--- !u!1 &3083033425803410891 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1852,207 +1462,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7691727016605302345} - - component: {fileID: 4641066297349996545} - - component: {fileID: 1717522382550107155} + - component: {fileID: 1412670038803886995} + - component: {fileID: 7632657000383658238} + - component: {fileID: 3111522131784013122} m_Layer: 11 - m_Name: Cube (9) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7691727016605302345 +--- !u!4 &1412670038803886995 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2582702231263986810} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8132091427676697685} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4641066297349996545 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2582702231263986810} - 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!114 &1717522382550107155 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2582702231263986810} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2694613700830378419 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8583413323880978190} - - component: {fileID: 3985307087507910530} - - component: {fileID: 1944279918046766185} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8583413323880978190 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2694613700830378419} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.019700022, y: -0.014200004, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7102364803529598818} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3985307087507910530 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2694613700830378419} - 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!114 &1944279918046766185 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2694613700830378419} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2933754819679225321 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6614228953678249330} - - component: {fileID: 6342299415373833156} - - component: {fileID: 7030759175567119170} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6614228953678249330 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2933754819679225321} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 3083033425803410891} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0235, y: -0.014200002, z: -0.005000014} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 2882354195092813665} - m_RootOrder: 11 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6342299415373833156 -BoxCollider: +--- !u!135 &7632657000383658238 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2933754819679225321} + m_GameObject: {fileID: 3083033425803410891} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7030759175567119170 +--- !u!114 &3111522131784013122 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2933754819679225321} + m_GameObject: {fileID: 3083033425803410891} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2065,7 +1519,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 12 + portPosition: 5 deviceId: deviceName: portModel: @@ -2166,7 +1620,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &3477668463989624888 +--- !u!1 &3247591632877150099 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2174,51 +1628,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 865945905735437123} - - component: {fileID: 8815029191519691053} - - component: {fileID: 2008370495075497775} + - component: {fileID: 1154045236688858762} + - component: {fileID: 6163918672810611055} + - component: {fileID: 3924142239892167054} m_Layer: 11 - m_Name: Cube + m_Name: Sphere m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &865945905735437123 +--- !u!4 &1154045236688858762 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3477668463989624888} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285007, y: -0.014200004, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 3247591632877150099} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.20284998, y: -0.014170006, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 7102364803529598818} + m_Father: {fileID: 8132091427676697685} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8815029191519691053 -BoxCollider: +--- !u!135 &6163918672810611055 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3477668463989624888} + m_GameObject: {fileID: 3247591632877150099} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2008370495075497775 +--- !u!114 &3924142239892167054 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3477668463989624888} + m_GameObject: {fileID: 3247591632877150099} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2244,7 +1698,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3560927196624084693 +--- !u!1 &3255026456014408775 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2252,51 +1706,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6159919832777400732} - - component: {fileID: 3052447430608282748} - - component: {fileID: 264496651933130802} + - component: {fileID: 8337218331718770865} + - component: {fileID: 8543233504700607340} + - component: {fileID: 7129684667880043074} m_Layer: 11 - m_Name: Cube (1) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6159919832777400732 +--- !u!4 &8337218331718770865 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3560927196624084693} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 3255026456014408775} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.023500003, y: -0.014200002, z: -0.0041999966} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 4448320551712385765} - m_RootOrder: 1 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3052447430608282748 -BoxCollider: +--- !u!135 &8543233504700607340 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3560927196624084693} + m_GameObject: {fileID: 3255026456014408775} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &264496651933130802 +--- !u!114 &7129684667880043074 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3560927196624084693} + m_GameObject: {fileID: 3255026456014408775} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2309,7 +1763,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 2 + portPosition: 5 deviceId: deviceName: portModel: @@ -2322,7 +1776,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3619313777903876666 +--- !u!1 &3258256641378563365 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2330,51 +1784,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 178022273583025440} - - component: {fileID: 2535347493595027070} - - component: {fileID: 6414283446662865429} + - component: {fileID: 8850805183494010028} + - component: {fileID: 9126739382486606560} + - component: {fileID: 7518073004326017595} m_Layer: 11 - m_Name: Cube (5) + m_Name: Sphere (8) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &178022273583025440 +--- !u!4 &8850805183494010028 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3619313777903876666} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 3258256641378563365} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.14860004, y: -0.014200002, z: -0.0051361173} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 8132091427676697685} - m_RootOrder: 5 + m_Father: {fileID: 7102364803529598818} + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2535347493595027070 -BoxCollider: +--- !u!135 &9126739382486606560 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3619313777903876666} + m_GameObject: {fileID: 3258256641378563365} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6414283446662865429 +--- !u!114 &7518073004326017595 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3619313777903876666} + m_GameObject: {fileID: 3258256641378563365} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2387,7 +1841,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 6 + portPosition: 9 deviceId: deviceName: portModel: @@ -2400,7 +1854,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3960177427549975314 +--- !u!1 &3550022115104804227 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2408,51 +1862,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7440596016991008026} - - component: {fileID: 1829392283752743708} - - component: {fileID: 6289755832706538523} + - component: {fileID: 6568218842029857077} + - component: {fileID: 3016941787282196590} + - component: {fileID: 4157526427248187890} m_Layer: 11 - m_Name: Cube (2) + m_Name: Sphere (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7440596016991008026 +--- !u!4 &6568218842029857077 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3960177427549975314} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 3550022115104804227} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2814, y: -0.014200002, z: -0.0050000027} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 4448320551712385765} - m_RootOrder: 2 + m_Father: {fileID: 2882354195092813665} + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1829392283752743708 -BoxCollider: +--- !u!135 &3016941787282196590 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3960177427549975314} + m_GameObject: {fileID: 3550022115104804227} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6289755832706538523 +--- !u!114 &4157526427248187890 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3960177427549975314} + m_GameObject: {fileID: 3550022115104804227} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2465,7 +1919,163 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 3 + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3802181074638559794 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2758767420341697500} + - component: {fileID: 2100274146208286875} + - component: {fileID: 2255164776410116881} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2758767420341697500 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3802181074638559794} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.20284998, y: -0.014200002, z: -0.0050000027} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2882354195092813665} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2100274146208286875 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3802181074638559794} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2255164776410116881 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3802181074638559794} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3948791172855732371 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5079558394079272093} + - component: {fileID: 6382308484142840165} + - component: {fileID: 439437388164104013} + m_Layer: 11 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5079558394079272093 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3948791172855732371} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0701, y: -0.014200002, z: -0.0042000115} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4448320551712385765} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6382308484142840165 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3948791172855732371} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &439437388164104013 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3948791172855732371} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 deviceId: deviceName: portModel: @@ -2493,7 +2103,7 @@ GameObject: - component: {fileID: 6606561129317477855} - component: {fileID: 2060240283894443985} - component: {fileID: 5957271586491086960} - m_Layer: 8 + m_Layer: 13 m_Name: Object006 m_TagString: Untagged m_Icon: {fileID: 0} @@ -2512,18 +2122,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 865945905735437123} - - {fileID: 2110641770011683359} - - {fileID: 5870099320624934192} - - {fileID: 6763698175517028327} - - {fileID: 6239560524756205666} - - {fileID: 8583413323880978190} - - {fileID: 711662264240506529} - - {fileID: 5956541339007503129} - - {fileID: 3388665459361448137} - - {fileID: 928594298522509771} - - {fileID: 3139223697833683172} - - {fileID: 3695753988607786474} + - {fileID: 4073049622340903252} + - {fileID: 2271691344518615121} + - {fileID: 997722833991873909} + - {fileID: 5614449417688282399} + - {fileID: 8849172440771348148} + - {fileID: 5819160155866079893} + - {fileID: 2956630623924069490} + - {fileID: 8776017291340176271} + - {fileID: 8850805183494010028} + - {fileID: 8633339416429255893} + - {fileID: 8099575551933386508} + - {fileID: 8171518950806654181} m_Father: {fileID: 1709068627463319996} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -2682,7 +2292,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -2639241166356525208, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} ---- !u!1 &4371522310310866663 +--- !u!1 &4061916454949029946 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2690,51 +2300,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4593402333573960735} - - component: {fileID: 4658026021092022734} - - component: {fileID: 3130184141300292590} + - component: {fileID: 401958534010103620} + - component: {fileID: 894681327971549062} + - component: {fileID: 7769298640250954061} m_Layer: 11 - m_Name: Cube (8) + m_Name: Sphere (8) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4593402333573960735 +--- !u!4 &401958534010103620 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4371522310310866663} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 4061916454949029946} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.14860001, y: -0.014200002, z: -0.00500001} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 2882354195092813665} m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4658026021092022734 -BoxCollider: +--- !u!135 &894681327971549062 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4371522310310866663} + m_GameObject: {fileID: 4061916454949029946} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3130184141300292590 +--- !u!114 &7769298640250954061 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4371522310310866663} + m_GameObject: {fileID: 4061916454949029946} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2760,6 +2370,162 @@ MonoBehaviour: remark: createTime: createName: +--- !u!1 &4078235008692634350 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8093054714030289784} + - component: {fileID: 5719200682103254108} + - component: {fileID: 2954547980092160753} + m_Layer: 11 + m_Name: Sphere (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8093054714030289784 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4078235008692634350} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.1133, y: -0.014200002, z: -0.0050000027} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2882354195092813665} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &5719200682103254108 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4078235008692634350} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2954547980092160753 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4078235008692634350} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4106456548568796664 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2956630623924069490} + - component: {fileID: 6099368386739941371} + - component: {fileID: 5167828992142104888} + m_Layer: 11 + m_Name: Sphere (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2956630623924069490 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4106456548568796664} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.066100046, y: -0.014200002, z: -0.0051361173} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 7102364803529598818} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6099368386739941371 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4106456548568796664} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5167828992142104888 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4106456548568796664} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: --- !u!1 &4449842387018087903 GameObject: m_ObjectHideFlags: 0 @@ -2775,7 +2541,7 @@ GameObject: - component: {fileID: 7520809817594532684} - component: {fileID: 8644764224351610082} - component: {fileID: 5738210343900942593} - m_Layer: 8 + m_Layer: 13 m_Name: Object005 m_TagString: Untagged m_Icon: {fileID: 0} @@ -2794,18 +2560,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 5298552138245889474} - - {fileID: 6159919832777400732} - - {fileID: 7440596016991008026} - - {fileID: 8187085601521158593} - - {fileID: 876331722148359242} - - {fileID: 6071107073763159052} - - {fileID: 1015588398378279318} - - {fileID: 3913355488280188986} - - {fileID: 410461927441386905} - - {fileID: 8236548648621263204} - - {fileID: 1714328148525450904} - - {fileID: 3769830013249752952} + - {fileID: 5908322752275779523} + - {fileID: 3766272809854337868} + - {fileID: 881979942969889830} + - {fileID: 5079558394079272093} + - {fileID: 8337218331718770865} + - {fileID: 2552862004689090826} + - {fileID: 6961452363025230911} + - {fileID: 432303371978585741} + - {fileID: 7419029092949350285} + - {fileID: 5932596175274070391} + - {fileID: 5352300813408740295} + - {fileID: 4103593611324370998} m_Father: {fileID: 1709068627463319996} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -2964,7 +2730,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: 9186633843763367028, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} ---- !u!1 &4474686681210306687 +--- !u!1 &4773799855056621526 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2972,51 +2738,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8187085601521158593} - - component: {fileID: 9067485290328848510} - - component: {fileID: 3651359527317536806} + - component: {fileID: 8099575551933386508} + - component: {fileID: 8905165124215081904} + - component: {fileID: 4275500034257762931} m_Layer: 11 - m_Name: Cube (3) + m_Name: Sphere (10) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8187085601521158593 +--- !u!4 &8099575551933386508 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4474686681210306687} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 4773799855056621526} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.23820001, y: -0.014200017, z: -0.005136125} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 4448320551712385765} - m_RootOrder: 3 + m_Father: {fileID: 7102364803529598818} + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9067485290328848510 -BoxCollider: +--- !u!135 &8905165124215081904 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4474686681210306687} + m_GameObject: {fileID: 4773799855056621526} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3651359527317536806 +--- !u!114 &4275500034257762931 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4474686681210306687} + m_GameObject: {fileID: 4773799855056621526} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3029,7 +2795,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 4 + portPosition: 11 deviceId: deviceName: portModel: @@ -3042,7 +2808,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &4766395190942588088 +--- !u!1 &4827073653680938610 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3050,129 +2816,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7960633694786568610} - - component: {fileID: 3059654985235004226} - - component: {fileID: 8917390616447625688} + - component: {fileID: 8849172440771348148} + - component: {fileID: 5995677260334293539} + - component: {fileID: 2432515039142457384} m_Layer: 11 - m_Name: Cube (8) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7960633694786568610 +--- !u!4 &8849172440771348148 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4766395190942588088} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 4827073653680938610} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.023499984, y: -0.014200002, z: -0.005136125} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 8132091427676697685} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3059654985235004226 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4766395190942588088} - 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!114 &8917390616447625688 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4766395190942588088} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4804444628190922743 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1888042747117407450} - - component: {fileID: 7153865075093840661} - - component: {fileID: 4773524174928293092} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1888042747117407450 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4804444628190922743} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8132091427676697685} + m_Father: {fileID: 7102364803529598818} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7153865075093840661 -BoxCollider: +--- !u!135 &5995677260334293539 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4804444628190922743} + m_GameObject: {fileID: 4827073653680938610} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4773524174928293092 +--- !u!114 &2432515039142457384 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4804444628190922743} + m_GameObject: {fileID: 4827073653680938610} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3198,6 +2886,84 @@ MonoBehaviour: remark: createTime: createName: +--- !u!1 &4897489493753308619 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6364476323380147505} + - component: {fileID: 1522386402639986719} + - component: {fileID: 8971919647511370037} + m_Layer: 11 + m_Name: Sphere (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6364476323380147505 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4897489493753308619} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.0661, y: -0.014200002, z: -0.00500001} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2882354195092813665} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1522386402639986719 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4897489493753308619} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8971919647511370037 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4897489493753308619} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: --- !u!1 &4943238014405017863 GameObject: m_ObjectHideFlags: 0 @@ -3443,6 +3209,84 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 914051726605392165, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} +--- !u!1 &5092768923768903133 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2271691344518615121} + - component: {fileID: 7082410090651862661} + - component: {fileID: 2271813689324784553} + m_Layer: 11 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2271691344518615121 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5092768923768903133} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.15960005, y: -0.014200002, z: -0.005136125} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 7102364803529598818} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7082410090651862661 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5092768923768903133} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2271813689324784553 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5092768923768903133} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: --- !u!1 &5215654940612775931 GameObject: m_ObjectHideFlags: 0 @@ -3474,7 +3318,7 @@ Transform: m_Father: {fileID: 1709068627463319996} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &5245695591614249066 +--- !u!1 &5611804818591781284 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3482,51 +3326,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 711662264240506529} - - component: {fileID: 7978542273772762927} - - component: {fileID: 5119887517023535371} + - component: {fileID: 8633339416429255893} + - component: {fileID: 3261326945613217835} + - component: {fileID: 8086883770746571224} m_Layer: 11 - m_Name: Cube (6) + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &711662264240506529 +--- !u!4 &8633339416429255893 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5245695591614249066} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.066100046, y: -0.014200004, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 5611804818591781284} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.19180012, y: -0.014200002, z: -0.0051361173} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 7102364803529598818} - m_RootOrder: 6 + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7978542273772762927 -BoxCollider: +--- !u!135 &3261326945613217835 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5245695591614249066} + m_GameObject: {fileID: 5611804818591781284} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5119887517023535371 +--- !u!114 &8086883770746571224 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5245695591614249066} + m_GameObject: {fileID: 5611804818591781284} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3539,7 +3383,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 7 + portPosition: 10 deviceId: deviceName: portModel: @@ -3552,7 +3396,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &5275990482463074487 +--- !u!1 &5654499514086643127 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3560,363 +3404,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7847868716498602328} - - component: {fileID: 5958800268227738723} - - component: {fileID: 3982555568234839902} + - component: {fileID: 5822990524613631789} + - component: {fileID: 5470813825274762448} + - component: {fileID: 1939843787876567229} m_Layer: 11 - m_Name: Cube (7) + m_Name: Sphere (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7847868716498602328 +--- !u!4 &5822990524613631789 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5275990482463074487} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8132091427676697685} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5958800268227738723 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5275990482463074487} - 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!114 &3982555568234839902 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5275990482463074487} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5663289424853204049 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5870099320624934192} - - component: {fileID: 7291542355086841719} - - component: {fileID: 7862444938502067882} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5870099320624934192 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5663289424853204049} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.11330007, y: -0.014200011, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7102364803529598818} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7291542355086841719 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5663289424853204049} - 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!114 &7862444938502067882 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5663289424853204049} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5738829813468938270 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3139223697833683172} - - component: {fileID: 479683840137918149} - - component: {fileID: 6569067488383506957} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3139223697833683172 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5738829813468938270} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200015, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7102364803529598818} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &479683840137918149 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5738829813468938270} - 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!114 &6569067488383506957 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5738829813468938270} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6324213450854072769 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1980636587052085450} - - component: {fileID: 6215036008251659013} - - component: {fileID: 1543800557154397245} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1980636587052085450 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6324213450854072769} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2882354195092813665} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6215036008251659013 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6324213450854072769} - 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!114 &1543800557154397245 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6324213450854072769} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6335871156228398030 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4667007161145494176} - - component: {fileID: 3940785245974834409} - - component: {fileID: 9186179982013010327} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4667007161145494176 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6335871156228398030} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 5654499514086643127} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.15959999, y: -0.014170006, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 8132091427676697685} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3940785245974834409 -BoxCollider: +--- !u!135 &5470813825274762448 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6335871156228398030} + m_GameObject: {fileID: 5654499514086643127} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &9186179982013010327 +--- !u!114 &1939843787876567229 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6335871156228398030} + m_GameObject: {fileID: 5654499514086643127} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3942,7 +3474,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6465719130159795583 +--- !u!1 &5674162325870409339 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3950,51 +3482,129 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4174457498095272080} - - component: {fileID: 7635589853507820455} - - component: {fileID: 4727390498236884008} + - component: {fileID: 8776017291340176271} + - component: {fileID: 5384181410760156199} + - component: {fileID: 2625274272210469829} m_Layer: 11 - m_Name: Cube (4) + m_Name: Sphere (7) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4174457498095272080 +--- !u!4 &8776017291340176271 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6465719130159795583} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 5674162325870409339} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.10930006, y: -0.014200002, z: -0.0051361173} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2882354195092813665} - m_RootOrder: 4 + m_Father: {fileID: 7102364803529598818} + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7635589853507820455 -BoxCollider: +--- !u!135 &5384181410760156199 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6465719130159795583} + m_GameObject: {fileID: 5674162325870409339} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4727390498236884008 +--- !u!114 &2625274272210469829 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6465719130159795583} + m_GameObject: {fileID: 5674162325870409339} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5707639464574186444 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5181355303526684639} + - component: {fileID: 2700188818077496100} + - component: {fileID: 1323890277828703403} + m_Layer: 11 + m_Name: Sphere (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5181355303526684639 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5707639464574186444} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0235, y: -0.014170006, z: -0.005036004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 8132091427676697685} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2700188818077496100 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5707639464574186444} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1323890277828703403 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5707639464574186444} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4020,7 +3630,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6789679900292277004 +--- !u!1 &5753949470302480376 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4028,285 +3638,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8236548648621263204} - - component: {fileID: 93020072198218290} - - component: {fileID: 268741021790825508} + - component: {fileID: 6618489269336638879} + - component: {fileID: 6549802722983911962} + - component: {fileID: 6623704721661488271} m_Layer: 11 - m_Name: Cube (9) + m_Name: Sphere (5) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8236548648621263204 +--- !u!4 &6618489269336638879 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6789679900292277004} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4448320551712385765} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &93020072198218290 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6789679900292277004} - 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!114 &268741021790825508 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6789679900292277004} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7239896301681841921 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5298552138245889474} - - component: {fileID: 3423426646481434716} - - component: {fileID: 6570429524483255786} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5298552138245889474 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7239896301681841921} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4448320551712385765} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3423426646481434716 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7239896301681841921} - 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!114 &6570429524483255786 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7239896301681841921} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7378210179734424205 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7900656803283302177} - - component: {fileID: 4747318775271737730} - - component: {fileID: 1277239567135260704} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7900656803283302177 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7378210179734424205} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2882354195092813665} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4747318775271737730 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7378210179734424205} - 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!114 &1277239567135260704 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7378210179734424205} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7492857828024486990 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6276815236640898968} - - component: {fileID: 6182005575032160653} - - component: {fileID: 6368519638312887330} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6276815236640898968 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7492857828024486990} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 5753949470302480376} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.019700002, y: -0.014170006, z: -0.005036004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 8132091427676697685} - m_RootOrder: 6 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6182005575032160653 -BoxCollider: +--- !u!135 &6549802722983911962 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7492857828024486990} + m_GameObject: {fileID: 5753949470302480376} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6368519638312887330 +--- !u!114 &6623704721661488271 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7492857828024486990} + m_GameObject: {fileID: 5753949470302480376} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4319,7 +3695,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 7 + portPosition: 6 deviceId: deviceName: portModel: @@ -4332,7 +3708,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7601059217023445196 +--- !u!1 &6358985076659431088 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4340,51 +3716,363 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4251587505889092915} - - component: {fileID: 5695706931959235573} - - component: {fileID: 9156407664001337082} + - component: {fileID: 5908322752275779523} + - component: {fileID: 5989113862513718392} + - component: {fileID: 7916581319662097286} m_Layer: 11 - m_Name: Cube (10) + m_Name: Sphere m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4251587505889092915 +--- !u!4 &5908322752275779523 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7601059217023445196} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 6358985076659431088} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.20284998, y: -0.014200002, z: -0.0041999966} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2882354195092813665} - m_RootOrder: 10 + m_Father: {fileID: 4448320551712385765} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5695706931959235573 -BoxCollider: +--- !u!135 &5989113862513718392 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7601059217023445196} + m_GameObject: {fileID: 6358985076659431088} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &9156407664001337082 +--- !u!114 &7916581319662097286 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7601059217023445196} + m_GameObject: {fileID: 6358985076659431088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6764741440134858611 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4103593611324370998} + - component: {fileID: 3588189396700391962} + - component: {fileID: 6329540222452253705} + m_Layer: 11 + m_Name: Sphere (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4103593611324370998 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6764741440134858611} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2814, y: -0.014200002, z: -0.0041999966} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4448320551712385765} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3588189396700391962 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6764741440134858611} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6329540222452253705 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6764741440134858611} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6770005325183990709 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2552862004689090826} + - component: {fileID: 3016055572439310072} + - component: {fileID: 779287607435616883} + m_Layer: 11 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2552862004689090826 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6770005325183990709} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.019699998, y: -0.014200002, z: -0.004200004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4448320551712385765} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3016055572439310072 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6770005325183990709} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &779287607435616883 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6770005325183990709} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6916014087260599817 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 432303371978585741} + - component: {fileID: 5698932494470177586} + - component: {fileID: 5781785922945610791} + m_Layer: 11 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &432303371978585741 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6916014087260599817} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.10930001, y: -0.014200002, z: -0.004200004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4448320551712385765} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &5698932494470177586 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6916014087260599817} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5781785922945610791 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6916014087260599817} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7270772074902846946 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5352300813408740295} + - component: {fileID: 6655575542897705299} + - component: {fileID: 3244664955885758192} + m_Layer: 11 + m_Name: Sphere (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5352300813408740295 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7270772074902846946} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.23820001, y: -0.014200002, z: -0.0041999966} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4448320551712385765} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6655575542897705299 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7270772074902846946} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3244664955885758192 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7270772074902846946} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4410,7 +4098,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7679141051438419836 +--- !u!1 &7285449598641939617 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4418,51 +4106,363 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5956541339007503129} - - component: {fileID: 4916445383965882756} - - component: {fileID: 7503145762553720472} + - component: {fileID: 9104761368601412} + - component: {fileID: 7829304728363338456} + - component: {fileID: 5234780034290922468} m_Layer: 11 - m_Name: Cube (7) + m_Name: Sphere (10) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5956541339007503129 +--- !u!4 &9104761368601412 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7679141051438419836} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.10930006, y: -0.014200004, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 7285449598641939617} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.23820001, y: -0.014200002, z: -0.0050000027} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 7102364803529598818} - m_RootOrder: 7 + m_Father: {fileID: 2882354195092813665} + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4916445383965882756 -BoxCollider: +--- !u!135 &7829304728363338456 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7679141051438419836} + m_GameObject: {fileID: 7285449598641939617} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7503145762553720472 +--- !u!114 &5234780034290922468 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7679141051438419836} + m_GameObject: {fileID: 7285449598641939617} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7488537328862090288 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8171518950806654181} + - component: {fileID: 6349571415023299465} + - component: {fileID: 5227688545841401224} + m_Layer: 11 + m_Name: Sphere (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8171518950806654181 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7488537328862090288} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2814, y: -0.014200017, z: -0.005136125} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 7102364803529598818} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6349571415023299465 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7488537328862090288} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5227688545841401224 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7488537328862090288} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7588546209497500601 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 997722833991873909} + - component: {fileID: 4298480852399289533} + - component: {fileID: 4189226432731003753} + m_Layer: 11 + m_Name: Sphere (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &997722833991873909 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7588546209497500601} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.11330007, y: -0.014200009, z: -0.0051361024} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 7102364803529598818} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &4298480852399289533 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7588546209497500601} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4189226432731003753 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7588546209497500601} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7627575499493150508 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6961452363025230911} + - component: {fileID: 2736679634571543449} + - component: {fileID: 6079170882130706078} + m_Layer: 11 + m_Name: Sphere (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6961452363025230911 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7627575499493150508} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.066099994, y: -0.014200002, z: -0.004200004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4448320551712385765} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2736679634571543449 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7627575499493150508} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6079170882130706078 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7627575499493150508} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8175004472526358758 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2804692721746005921} + - component: {fileID: 548520771357719156} + - component: {fileID: 8236992003368744903} + m_Layer: 11 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2804692721746005921 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8175004472526358758} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.109299995, y: -0.014170006, z: -0.005036004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 8132091427676697685} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &548520771357719156 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8175004472526358758} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8236992003368744903 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8175004472526358758} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4488,7 +4488,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7975257005038047698 +--- !u!1 &8405859834517225763 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4496,51 +4496,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 410461927441386905} - - component: {fileID: 815747698703661787} - - component: {fileID: 7014114671160877504} + - component: {fileID: 1091171475064454686} + - component: {fileID: 5413535899235939429} + - component: {fileID: 6424106035504626760} m_Layer: 11 - m_Name: Cube (8) + m_Name: Sphere (5) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &410461927441386905 +--- !u!4 &1091171475064454686 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7975257005038047698} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 8405859834517225763} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.019699998, y: -0.014200002, z: -0.00500001} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 4448320551712385765} - m_RootOrder: 8 + m_Father: {fileID: 2882354195092813665} + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &815747698703661787 -BoxCollider: +--- !u!135 &5413535899235939429 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7975257005038047698} + m_GameObject: {fileID: 8405859834517225763} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7014114671160877504 +--- !u!114 &6424106035504626760 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7975257005038047698} + m_GameObject: {fileID: 8405859834517225763} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4553,7 +4553,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 9 + portPosition: 6 deviceId: deviceName: portModel: @@ -4566,7 +4566,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &8075948043516552406 +--- !u!1 &8563249027548352007 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4574,51 +4574,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 876331722148359242} - - component: {fileID: 5271637341404897803} - - component: {fileID: 4634166526875112207} + - component: {fileID: 8867036969805453592} + - component: {fileID: 2921395327509889692} + - component: {fileID: 6585215566349924416} m_Layer: 11 - m_Name: Cube (4) + m_Name: Sphere (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &876331722148359242 +--- !u!4 &8867036969805453592 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8075948043516552406} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 8563249027548352007} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.15959999, y: -0.014200002, z: -0.0050000027} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 4448320551712385765} - m_RootOrder: 4 + m_Father: {fileID: 2882354195092813665} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5271637341404897803 -BoxCollider: +--- !u!135 &2921395327509889692 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8075948043516552406} + m_GameObject: {fileID: 8563249027548352007} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4634166526875112207 +--- !u!114 &6585215566349924416 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8075948043516552406} + m_GameObject: {fileID: 8563249027548352007} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4631,7 +4631,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 5 + portPosition: 2 deviceId: deviceName: portModel: @@ -4644,7 +4644,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &8316625144732618716 +--- !u!1 &8567479957164852968 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4652,51 +4652,285 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2182265241457858039} - - component: {fileID: 2655400410497838181} - - component: {fileID: 3235199651878349792} + - component: {fileID: 3915645134581423755} + - component: {fileID: 6897587853094518104} + - component: {fileID: 677406311335111330} m_Layer: 11 - m_Name: Cube (9) + m_Name: Sphere (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2182265241457858039 +--- !u!4 &3915645134581423755 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8316625144732618716} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 8567479957164852968} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2814, y: -0.014170006, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 8132091427676697685} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6897587853094518104 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8567479957164852968} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &677406311335111330 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8567479957164852968} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8721375015343073551 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5948257585130820829} + - component: {fileID: 1206286742995537795} + - component: {fileID: 2638261555668872540} + m_Layer: 11 + m_Name: Sphere (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5948257585130820829 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721375015343073551} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.1133, y: -0.014170006, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 8132091427676697685} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1206286742995537795 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721375015343073551} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2638261555668872540 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721375015343073551} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &9089946098908862707 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1512729373705044575} + - component: {fileID: 5077183262867129247} + - component: {fileID: 3897405334069868406} + m_Layer: 11 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1512729373705044575 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9089946098908862707} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.10930001, y: -0.014200002, z: -0.00500001} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2882354195092813665} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &5077183262867129247 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9089946098908862707} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3897405334069868406 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9089946098908862707} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &9103846414067937655 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7340001165356281379} + - component: {fileID: 6179001101989134940} + - component: {fileID: 2480289680247183534} + m_Layer: 11 + m_Name: Sphere (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7340001165356281379 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9103846414067937655} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.1918, y: -0.014200002, z: -0.0050000027} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 2882354195092813665} m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2655400410497838181 -BoxCollider: +--- !u!135 &6179001101989134940 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8316625144732618716} + m_GameObject: {fileID: 9103846414067937655} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3235199651878349792 +--- !u!114 &2480289680247183534 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8316625144732618716} + m_GameObject: {fileID: 9103846414067937655} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4722,237 +4956,3 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &8578320414863599620 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3913355488280188986} - - component: {fileID: 8267996312444776027} - - component: {fileID: 2352190947195692805} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3913355488280188986 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8578320414863599620} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4448320551712385765} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8267996312444776027 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8578320414863599620} - 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!114 &2352190947195692805 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8578320414863599620} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8804526121570226913 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6239560524756205666} - - component: {fileID: 6109066556746794078} - - component: {fileID: 3312926378251441447} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6239560524756205666 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8804526121570226913} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.023499984, y: -0.0142, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7102364803529598818} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6109066556746794078 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8804526121570226913} - 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!114 &3312926378251441447 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8804526121570226913} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8880623803048964546 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2671980175945223580} - - component: {fileID: 8235935317730918772} - - component: {fileID: 6105969630678337270} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2671980175945223580 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8880623803048964546} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2882354195092813665} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8235935317730918772 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8880623803048964546} - 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!114 &6105969630678337270 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8880623803048964546} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/21.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/21.prefab index cc96c8306..647349c3a 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/21.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/21.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &263149159907071292 +--- !u!1 &8332535833148024 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,51 +8,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3766636836033787841} - - component: {fileID: 1221171518985539014} - - component: {fileID: 656678849803719397} + - component: {fileID: 3677904513265377081} + - component: {fileID: 656200394334683389} + - component: {fileID: 7210029738951202515} m_Layer: 11 - m_Name: Cube (1) + m_Name: Sphere (7) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3766636836033787841 +--- !u!4 &3677904513265377081 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 263149159907071292} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 8332535833148024} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.10930001, y: -0.014200009, z: -0.005672656} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 7090807350158717037} - m_RootOrder: 1 + m_Father: {fileID: 4232618907112207193} + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1221171518985539014 -BoxCollider: +--- !u!135 &656200394334683389 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 263149159907071292} + m_GameObject: {fileID: 8332535833148024} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &656678849803719397 +--- !u!114 &7210029738951202515 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 263149159907071292} + m_GameObject: {fileID: 8332535833148024} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -65,7 +65,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 2 + portPosition: 8 deviceId: deviceName: portModel: @@ -78,7 +78,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &570654965099771185 +--- !u!1 &200915904049616037 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -86,129 +86,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2476482426754218933} - - component: {fileID: 7138904166934178045} - - component: {fileID: 3282466412129239759} + - component: {fileID: 3874552667837159143} + - component: {fileID: 6472724539915391714} + - component: {fileID: 6093511770769195616} m_Layer: 11 - m_Name: Cube (8) + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2476482426754218933 +--- !u!4 &3874552667837159143 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 570654965099771185} + m_GameObject: {fileID: 200915904049616037} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7090807350158717037} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7138904166934178045 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 570654965099771185} - 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!114 &3282466412129239759 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 570654965099771185} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &645912390399193291 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 829753236500164646} - - component: {fileID: 5224717342491316569} - - component: {fileID: 172649046089831065} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &829753236500164646 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 645912390399193291} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.1918, y: -0.014200017, z: -0.0062238723} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 8083344018379187034} m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5224717342491316569 -BoxCollider: +--- !u!135 &6472724539915391714 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 645912390399193291} + m_GameObject: {fileID: 200915904049616037} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &172649046089831065 +--- !u!114 &6093511770769195616 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 645912390399193291} + m_GameObject: {fileID: 200915904049616037} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -234,7 +156,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &701994778225418711 +--- !u!1 &641576464485076781 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -242,51 +164,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5572689487991457941} - - component: {fileID: 7782487033053853792} - - component: {fileID: 811573593458293352} + - component: {fileID: 1393173813212505384} + - component: {fileID: 1671612111761939477} + - component: {fileID: 3803400085297268796} m_Layer: 11 - m_Name: Cube (4) + m_Name: Sphere (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5572689487991457941 +--- !u!4 &1393173813212505384 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 701994778225418711} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 641576464485076781} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2814, y: -0.014200009, z: -0.005672656} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 7090807350158717037} - m_RootOrder: 4 + m_Father: {fileID: 4232618907112207193} + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7782487033053853792 -BoxCollider: +--- !u!135 &1671612111761939477 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 701994778225418711} + m_GameObject: {fileID: 641576464485076781} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &811573593458293352 +--- !u!114 &3803400085297268796 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 701994778225418711} + m_GameObject: {fileID: 641576464485076781} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -299,7 +221,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 5 + portPosition: 12 deviceId: deviceName: portModel: @@ -312,7 +234,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &1104407935999978951 +--- !u!1 &693600914916458755 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -320,51 +242,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1418205586851687239} - - component: {fileID: 6474948871037598671} - - component: {fileID: 8136131145553352117} + - component: {fileID: 3297136438702349440} + - component: {fileID: 6937478016975290547} + - component: {fileID: 4749768750640304987} m_Layer: 11 - m_Name: Cube (6) + m_Name: Sphere (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1418205586851687239 +--- !u!4 &3297136438702349440 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1104407935999978951} + m_GameObject: {fileID: 693600914916458755} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.2814, y: -0.014170006, z: -0.005293563} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 7090807350158717037} - m_RootOrder: 6 + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6474948871037598671 -BoxCollider: +--- !u!135 &6937478016975290547 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1104407935999978951} + m_GameObject: {fileID: 693600914916458755} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8136131145553352117 +--- !u!114 &4749768750640304987 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1104407935999978951} + m_GameObject: {fileID: 693600914916458755} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -377,7 +299,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 7 + portPosition: 12 deviceId: deviceName: portModel: @@ -390,7 +312,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &1215617417742784366 +--- !u!1 &1166557604232943586 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -398,51 +320,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8375758658344059216} - - component: {fileID: 3684087629232406615} - - component: {fileID: 4140430200322216380} + - component: {fileID: 6178962503360102204} + - component: {fileID: 512882924043369112} + - component: {fileID: 1545849099035573141} m_Layer: 11 - m_Name: Cube (2) + m_Name: Sphere (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8375758658344059216 +--- !u!4 &6178962503360102204 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1215617417742784366} + m_GameObject: {fileID: 1166557604232943586} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.1133, y: -0.014170006, z: -0.005293563} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 7090807350158717037} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3684087629232406615 -BoxCollider: +--- !u!135 &512882924043369112 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1215617417742784366} + m_GameObject: {fileID: 1166557604232943586} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4140430200322216380 +--- !u!114 &1545849099035573141 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1215617417742784366} + m_GameObject: {fileID: 1166557604232943586} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -483,7 +405,7 @@ GameObject: - component: {fileID: 8028310536450518375} - component: {fileID: 1345152022133863064} - component: {fileID: 3750028285226476468} - m_Layer: 8 + m_Layer: 13 m_Name: Object002 m_TagString: Untagged m_Icon: {fileID: 0} @@ -502,18 +424,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 4565307310950060919} - - {fileID: 3766636836033787841} - - {fileID: 8375758658344059216} - - {fileID: 2290900932599892641} - - {fileID: 5572689487991457941} - - {fileID: 6559320384548172870} - - {fileID: 1418205586851687239} - - {fileID: 3107292661847751242} - - {fileID: 2476482426754218933} - - {fileID: 9208787129580265217} - - {fileID: 2226479872798770374} - - {fileID: 7782446926905503245} + - {fileID: 3541731593462230492} + - {fileID: 4707205234931845027} + - {fileID: 6178962503360102204} + - {fileID: 4673164894545293128} + - {fileID: 5377174908174173655} + - {fileID: 6776682826565773576} + - {fileID: 5093793182712804076} + - {fileID: 483430337883496045} + - {fileID: 5356844964305729933} + - {fileID: 2336744336724270298} + - {fileID: 3102154599010711401} + - {fileID: 3297136438702349440} m_Father: {fileID: 363297859982620036} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -672,7 +594,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -3996760141626369306, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} ---- !u!1 &1329385046573296882 +--- !u!1 &1364770140754362940 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -680,51 +602,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2857314523464469162} - - component: {fileID: 5678887991503854986} - - component: {fileID: 566403429125128182} + - component: {fileID: 9170808635851334177} + - component: {fileID: 2630399317581034099} + - component: {fileID: 8002034853848196529} m_Layer: 11 - m_Name: Cube (2) + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2857314523464469162 +--- !u!4 &9170808635851334177 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1329385046573296882} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 1364770140754362940} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.1918, y: -0.014200009, z: -0.005672656} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 3388675454637027037} - m_RootOrder: 2 + m_Father: {fileID: 4232618907112207193} + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5678887991503854986 -BoxCollider: +--- !u!135 &2630399317581034099 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1329385046573296882} + m_GameObject: {fileID: 1364770140754362940} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &566403429125128182 +--- !u!114 &8002034853848196529 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1329385046573296882} + m_GameObject: {fileID: 1364770140754362940} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -737,7 +659,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 3 + portPosition: 10 deviceId: deviceName: portModel: @@ -750,7 +672,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &1335864381455937225 +--- !u!1 &1471358277320341212 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -758,129 +680,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2326799104198197050} - - component: {fileID: 2108113009161293708} - - component: {fileID: 8621450983134458827} + - component: {fileID: 2582155071628760234} + - component: {fileID: 392408449228233011} + - component: {fileID: 4904007202858618401} m_Layer: 11 - m_Name: Cube (11) + m_Name: Sphere (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2326799104198197050 +--- !u!4 &2582155071628760234 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1335864381455937225} + m_GameObject: {fileID: 1471358277320341212} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3388675454637027037} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2108113009161293708 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1335864381455937225} - 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!114 &8621450983134458827 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1335864381455937225} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1453174002137591196 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4611492716924795162} - - component: {fileID: 7545498259321004704} - - component: {fileID: 8711190647289456389} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4611492716924795162 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1453174002137591196} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.066099994, y: -0.014200017, z: -0.0062238723} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 8083344018379187034} - m_RootOrder: 10 + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7545498259321004704 -BoxCollider: +--- !u!135 &392408449228233011 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1453174002137591196} + m_GameObject: {fileID: 1471358277320341212} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8711190647289456389 +--- !u!114 &4904007202858618401 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1453174002137591196} + m_GameObject: {fileID: 1471358277320341212} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -893,7 +737,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 11 + portPosition: 7 deviceId: deviceName: portModel: @@ -906,7 +750,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &1692420454100989214 +--- !u!1 &1496548033121639567 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -914,51 +758,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2406038716800091059} - - component: {fileID: 3582267350463462294} - - component: {fileID: 1822803379461495250} + - component: {fileID: 1510275392793210474} + - component: {fileID: 1902151147221196561} + - component: {fileID: 4282013167100942307} m_Layer: 11 - m_Name: Cube (8) + m_Name: Sphere (8) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2406038716800091059 +--- !u!4 &1510275392793210474 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1692420454100989214} + m_GameObject: {fileID: 1496548033121639567} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.14860001, y: -0.014200009, z: -0.005702853} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 3388675454637027037} m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3582267350463462294 -BoxCollider: +--- !u!135 &1902151147221196561 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1692420454100989214} + m_GameObject: {fileID: 1496548033121639567} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1822803379461495250 +--- !u!114 &4282013167100942307 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1692420454100989214} + m_GameObject: {fileID: 1496548033121639567} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -984,7 +828,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &1741038978165474540 +--- !u!1 &1573798694870728584 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -992,51 +836,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6467348105307985728} - - component: {fileID: 1291834201040745086} - - component: {fileID: 884661544298184116} + - component: {fileID: 1016936130837560124} + - component: {fileID: 5107177940664853533} + - component: {fileID: 6959040885450974048} m_Layer: 11 - m_Name: Cube (3) + m_Name: Sphere (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6467348105307985728 +--- !u!4 &1016936130837560124 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1741038978165474540} + m_GameObject: {fileID: 1573798694870728584} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.15959999, y: -0.014200017, z: -0.0062238798} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 3388675454637027037} - m_RootOrder: 3 + m_Father: {fileID: 8083344018379187034} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1291834201040745086 -BoxCollider: +--- !u!135 &5107177940664853533 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1741038978165474540} + m_GameObject: {fileID: 1573798694870728584} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &884661544298184116 +--- !u!114 &6959040885450974048 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1741038978165474540} + m_GameObject: {fileID: 1573798694870728584} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1049,7 +893,241 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 4 + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1615113001392566855 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 483430337883496045} + - component: {fileID: 1856949995226894563} + - component: {fileID: 9160994220429400619} + m_Layer: 11 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &483430337883496045 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615113001392566855} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.109299995, y: -0.014170006, z: -0.0052935705} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 7090807350158717037} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1856949995226894563 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615113001392566855} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &9160994220429400619 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615113001392566855} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1708770497271921204 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5671207602086201347} + - component: {fileID: 3942431521611737269} + - component: {fileID: 1437860593831528532} + m_Layer: 11 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5671207602086201347 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1708770497271921204} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.019699998, y: -0.014200009, z: -0.005702853} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 3388675454637027037} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3942431521611737269 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1708770497271921204} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1437860593831528532 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1708770497271921204} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1780807615194445897 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3102154599010711401} + - component: {fileID: 6019539900306896644} + - component: {fileID: 3651650630138533401} + m_Layer: 11 + m_Name: Sphere (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3102154599010711401 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1780807615194445897} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.23820001, y: -0.014170006, z: -0.005293563} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 7090807350158717037} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6019539900306896644 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1780807615194445897} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3651650630138533401 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1780807615194445897} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 deviceId: deviceName: portModel: @@ -1077,7 +1155,7 @@ GameObject: - component: {fileID: 8215860903246004187} - component: {fileID: 7485631482906685134} - component: {fileID: 6460785554968194983} - m_Layer: 8 + m_Layer: 13 m_Name: Object004 m_TagString: Untagged m_Icon: {fileID: 0} @@ -1096,18 +1174,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 7165754451950328236} - - {fileID: 5992648988439413130} - - {fileID: 8221709575551498406} - - {fileID: 2442644725662818332} - - {fileID: 445126862264771270} - - {fileID: 8965808594974364271} - - {fileID: 5586608862215428139} - - {fileID: 2474477409288532977} - - {fileID: 5666533723504799514} - - {fileID: 8684287177820288874} - - {fileID: 9109174538915292336} - - {fileID: 4219845018159532203} + - {fileID: 7845828533787938146} + - {fileID: 8135542930492948041} + - {fileID: 5195551779674469950} + - {fileID: 412695813016731704} + - {fileID: 8822073471147862613} + - {fileID: 331304665956949706} + - {fileID: 945499536991026764} + - {fileID: 3677904513265377081} + - {fileID: 5714144472445985784} + - {fileID: 9170808635851334177} + - {fileID: 3593632674800538663} + - {fileID: 1393173813212505384} m_Father: {fileID: 363297859982620036} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1266,7 +1344,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -8113768720884857512, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} ---- !u!1 &2093687234874045109 +--- !u!1 &1931066954427586503 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1274,285 +1352,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8221709575551498406} - - component: {fileID: 6021754521270105439} - - component: {fileID: 8121661928283930961} + - component: {fileID: 606724255438537043} + - component: {fileID: 2404727548297027890} + - component: {fileID: 6111426017248106931} m_Layer: 11 - m_Name: Cube (2) + m_Name: Sphere (7) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8221709575551498406 +--- !u!4 &606724255438537043 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2093687234874045109} + m_GameObject: {fileID: 1931066954427586503} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.10930001, y: -0.014200009, z: -0.005702853} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 4232618907112207193} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6021754521270105439 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2093687234874045109} - 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!114 &8121661928283930961 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2093687234874045109} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2135345585617494404 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6559320384548172870} - - component: {fileID: 5334819878310617465} - - component: {fileID: 4497989630621947620} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6559320384548172870 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2135345585617494404} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7090807350158717037} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5334819878310617465 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2135345585617494404} - 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!114 &4497989630621947620 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2135345585617494404} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2146218915500262858 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9179953887517417808} - - component: {fileID: 6350423857066200150} - - component: {fileID: 1883448746595523845} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9179953887517417808 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2146218915500262858} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8083344018379187034} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6350423857066200150 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2146218915500262858} - 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!114 &1883448746595523845 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2146218915500262858} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2427856442298288916 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2474477409288532977} - - component: {fileID: 1650416790575320935} - - component: {fileID: 7696612830562399379} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2474477409288532977 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2427856442298288916} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4232618907112207193} + m_Father: {fileID: 3388675454637027037} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1650416790575320935 -BoxCollider: +--- !u!135 &2404727548297027890 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2427856442298288916} + m_GameObject: {fileID: 1931066954427586503} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7696612830562399379 +--- !u!114 &6111426017248106931 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2427856442298288916} + m_GameObject: {fileID: 1931066954427586503} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1578,7 +1422,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2531101513309133197 +--- !u!1 &2400300000060022928 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1586,51 +1430,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 708962165400634469} - - component: {fileID: 4587010321158000395} - - component: {fileID: 7808012565267077978} + - component: {fileID: 5093793182712804076} + - component: {fileID: 7624430569311500287} + - component: {fileID: 813818301722511988} m_Layer: 11 - m_Name: Cube (10) + m_Name: Sphere (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &708962165400634469 +--- !u!4 &5093793182712804076 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2531101513309133197} + m_GameObject: {fileID: 2400300000060022928} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.066099994, y: -0.014170006, z: -0.0052935705} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 3388675454637027037} - m_RootOrder: 10 + m_Father: {fileID: 7090807350158717037} + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4587010321158000395 -BoxCollider: +--- !u!135 &7624430569311500287 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2531101513309133197} + m_GameObject: {fileID: 2400300000060022928} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7808012565267077978 +--- !u!114 &813818301722511988 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2531101513309133197} + m_GameObject: {fileID: 2400300000060022928} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1643,7 +1487,241 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 11 + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2423479705634175900 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4673164894545293128} + - component: {fileID: 8020313937763340603} + - component: {fileID: 7881165518679507747} + m_Layer: 11 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4673164894545293128 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2423479705634175900} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.0701, y: -0.014170006, z: -0.0052935705} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 7090807350158717037} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &8020313937763340603 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2423479705634175900} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7881165518679507747 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2423479705634175900} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2490451386634001474 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 412695813016731704} + - component: {fileID: 6559188400826306748} + - component: {fileID: 442697100343928226} + m_Layer: 11 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &412695813016731704 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2490451386634001474} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0701, y: -0.014200009, z: -0.005672656} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4232618907112207193} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6559188400826306748 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2490451386634001474} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &442697100343928226 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2490451386634001474} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2674332711433957313 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 945499536991026764} + - component: {fileID: 4400178003701139993} + - component: {fileID: 5206666316625445161} + m_Layer: 11 + m_Name: Sphere (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &945499536991026764 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2674332711433957313} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.0661, y: -0.014200009, z: -0.005672656} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4232618907112207193} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &4400178003701139993 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2674332711433957313} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5206666316625445161 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2674332711433957313} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 deviceId: deviceName: portModel: @@ -1671,7 +1749,7 @@ GameObject: - component: {fileID: 6384072414705493118} - component: {fileID: 2993080749841568172} - component: {fileID: 5008901304630073514} - m_Layer: 8 + m_Layer: 13 m_Name: Object006 m_TagString: Untagged m_Icon: {fileID: 0} @@ -1690,18 +1768,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 9179953887517417808} - - {fileID: 5640539933715499200} - - {fileID: 8852643148453934753} - - {fileID: 2691603443838436858} - - {fileID: 9101404803728719829} - - {fileID: 6540872158493016067} - - {fileID: 6966876717480135217} - - {fileID: 95216853845265340} - - {fileID: 3100607874199597131} - - {fileID: 829753236500164646} - - {fileID: 4611492716924795162} - - {fileID: 8917734843461204594} + - {fileID: 5349418718718238466} + - {fileID: 1016936130837560124} + - {fileID: 748024687981570158} + - {fileID: 2616553804640768835} + - {fileID: 8416064805044108515} + - {fileID: 8083325283694969936} + - {fileID: 2582155071628760234} + - {fileID: 3429950217409007815} + - {fileID: 5297495732470253238} + - {fileID: 3874552667837159143} + - {fileID: 3427931339950652961} + - {fileID: 6577892493440290424} m_Father: {fileID: 363297859982620036} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1860,7 +1938,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -2639241166356525208, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} ---- !u!1 &2728652462164463020 +--- !u!1 &3018010885251191126 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1868,51 +1946,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 9101404803728719829} - - component: {fileID: 2000696708114805856} - - component: {fileID: 1202499667160829648} + - component: {fileID: 5193946207449396472} + - component: {fileID: 2616731409633347609} + - component: {fileID: 7886816108338336171} m_Layer: 11 - m_Name: Cube (4) + m_Name: Sphere (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &9101404803728719829 +--- !u!4 &5193946207449396472 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2728652462164463020} + m_GameObject: {fileID: 3018010885251191126} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.1133, y: -0.014200009, z: -0.005702853} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 8083344018379187034} - m_RootOrder: 4 + m_Father: {fileID: 3388675454637027037} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2000696708114805856 -BoxCollider: +--- !u!135 &2616731409633347609 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2728652462164463020} + m_GameObject: {fileID: 3018010885251191126} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1202499667160829648 +--- !u!114 &7886816108338336171 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2728652462164463020} + m_GameObject: {fileID: 3018010885251191126} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1925,7 +2003,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 5 + portPosition: 3 deviceId: deviceName: portModel: @@ -1938,7 +2016,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2833911653819016354 +--- !u!1 &3050177140002075507 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1946,51 +2024,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 9208787129580265217} - - component: {fileID: 8424851218574502999} - - component: {fileID: 2592928068525541673} + - component: {fileID: 5356844964305729933} + - component: {fileID: 6983618462052529023} + - component: {fileID: 835604905621549905} m_Layer: 11 - m_Name: Cube (9) + m_Name: Sphere (8) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &9208787129580265217 +--- !u!4 &5356844964305729933 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2833911653819016354} + m_GameObject: {fileID: 3050177140002075507} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.14860001, y: -0.014170006, z: -0.005293563} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 7090807350158717037} - m_RootOrder: 9 + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8424851218574502999 -BoxCollider: +--- !u!135 &6983618462052529023 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2833911653819016354} + m_GameObject: {fileID: 3050177140002075507} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2592928068525541673 +--- !u!114 &835604905621549905 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2833911653819016354} + m_GameObject: {fileID: 3050177140002075507} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2003,7 +2081,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 10 + portPosition: 9 deviceId: deviceName: portModel: @@ -2016,7 +2094,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2956089548473017971 +--- !u!1 &3095217761181683184 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2024,51 +2102,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3107292661847751242} - - component: {fileID: 4029413537969255908} - - component: {fileID: 1397839060793882531} + - component: {fileID: 3593632674800538663} + - component: {fileID: 3973813813095304629} + - component: {fileID: 5539261776275596661} m_Layer: 11 - m_Name: Cube (7) + m_Name: Sphere (10) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3107292661847751242 +--- !u!4 &3593632674800538663 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2956089548473017971} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 3095217761181683184} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.23820001, y: -0.014200009, z: -0.005672656} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 7090807350158717037} - m_RootOrder: 7 + m_Father: {fileID: 4232618907112207193} + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4029413537969255908 -BoxCollider: +--- !u!135 &3973813813095304629 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2956089548473017971} + m_GameObject: {fileID: 3095217761181683184} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1397839060793882531 +--- !u!114 &5539261776275596661 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2956089548473017971} + m_GameObject: {fileID: 3095217761181683184} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2081,7 +2159,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 8 + portPosition: 11 deviceId: deviceName: portModel: @@ -2094,7 +2172,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3327378700928486410 +--- !u!1 &3144422760646469659 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2102,51 +2180,129 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6540872158493016067} - - component: {fileID: 3093829871617393148} - - component: {fileID: 8988577310382814955} + - component: {fileID: 7845828533787938146} + - component: {fileID: 4428798915015363526} + - component: {fileID: 693278488451238460} m_Layer: 11 - m_Name: Cube (5) + m_Name: Sphere m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6540872158493016067 +--- !u!4 &7845828533787938146 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3327378700928486410} + m_GameObject: {fileID: 3144422760646469659} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.20284998, y: -0.014200009, z: -0.005672656} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4232618907112207193} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &4428798915015363526 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3144422760646469659} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &693278488451238460 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3144422760646469659} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3170203006852583644 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6577892493440290424} + - component: {fileID: 1460494298984901510} + - component: {fileID: 5500213829353139134} + m_Layer: 11 + m_Name: Sphere (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6577892493440290424 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3170203006852583644} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.2814, y: -0.014200017, z: -0.0062238798} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 8083344018379187034} - m_RootOrder: 5 + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3093829871617393148 -BoxCollider: +--- !u!135 &1460494298984901510 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3327378700928486410} + m_GameObject: {fileID: 3170203006852583644} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8988577310382814955 +--- !u!114 &5500213829353139134 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3327378700928486410} + m_GameObject: {fileID: 3170203006852583644} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2159,7 +2315,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 6 + portPosition: 12 deviceId: deviceName: portModel: @@ -2187,7 +2343,7 @@ GameObject: - component: {fileID: 5554157042819025455} - component: {fileID: 2466710658861521075} - component: {fileID: 1330781109941430399} - m_Layer: 8 + m_Layer: 13 m_Name: Object005 m_TagString: Untagged m_Icon: {fileID: 0} @@ -2206,18 +2362,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 5559232659499011781} - - {fileID: 5254120452308884941} - - {fileID: 2857314523464469162} - - {fileID: 6467348105307985728} - - {fileID: 7746249230124728492} - - {fileID: 5611460813998228802} - - {fileID: 8048565466936577288} - - {fileID: 1907202416662321052} - - {fileID: 2406038716800091059} - - {fileID: 5752940455334179691} - - {fileID: 708962165400634469} - - {fileID: 2326799104198197050} + - {fileID: 5005709417038827223} + - {fileID: 7252714817127048065} + - {fileID: 5193946207449396472} + - {fileID: 3553924979084062624} + - {fileID: 3273466403271147761} + - {fileID: 5671207602086201347} + - {fileID: 5586015355564189595} + - {fileID: 606724255438537043} + - {fileID: 1510275392793210474} + - {fileID: 8599385141207087024} + - {fileID: 3824967214978859934} + - {fileID: 1516717170785534041} m_Father: {fileID: 363297859982620036} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -2376,7 +2532,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: 9186633843763367028, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} ---- !u!1 &3541598660360716377 +--- !u!1 &3692995636446570334 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2384,441 +2540,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6966876717480135217} - - component: {fileID: 3840598981033742979} - - component: {fileID: 790200602516848760} + - component: {fileID: 5377174908174173655} + - component: {fileID: 233493167931833685} + - component: {fileID: 9126165694489487562} m_Layer: 11 - m_Name: Cube (6) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6966876717480135217 +--- !u!4 &5377174908174173655 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3541598660360716377} + m_GameObject: {fileID: 3692995636446570334} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.0235, y: -0.014170006, z: -0.0052935705} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 8083344018379187034} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3840598981033742979 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3541598660360716377} - 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!114 &790200602516848760 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3541598660360716377} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3569174845158905966 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8684287177820288874} - - component: {fileID: 8031553697703744439} - - component: {fileID: 8214553115142938028} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8684287177820288874 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3569174845158905966} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4232618907112207193} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8031553697703744439 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3569174845158905966} - 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!114 &8214553115142938028 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3569174845158905966} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3708091626227959961 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5666533723504799514} - - component: {fileID: 7607932421439332934} - - component: {fileID: 577856658203835171} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5666533723504799514 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3708091626227959961} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4232618907112207193} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7607932421439332934 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3708091626227959961} - 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!114 &577856658203835171 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3708091626227959961} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3788384146104549014 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9109174538915292336} - - component: {fileID: 8360453182154946832} - - component: {fileID: 6548038142027357607} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9109174538915292336 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3788384146104549014} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4232618907112207193} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8360453182154946832 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3788384146104549014} - 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!114 &6548038142027357607 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3788384146104549014} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4296383516883805186 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5586608862215428139} - - component: {fileID: 3160135195520426669} - - component: {fileID: 4597063355711074817} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5586608862215428139 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4296383516883805186} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4232618907112207193} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3160135195520426669 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4296383516883805186} - 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!114 &4597063355711074817 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4296383516883805186} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4402689091949876145 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 445126862264771270} - - component: {fileID: 8839934118234238614} - - component: {fileID: 2541930989866125551} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &445126862264771270 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4402689091949876145} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4232618907112207193} + m_Father: {fileID: 7090807350158717037} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8839934118234238614 -BoxCollider: +--- !u!135 &233493167931833685 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4402689091949876145} + m_GameObject: {fileID: 3692995636446570334} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2541930989866125551 +--- !u!114 &9126165694489487562 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4402689091949876145} + m_GameObject: {fileID: 3692995636446570334} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2844,7 +2610,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &4521020990665222479 +--- !u!1 &3732820473258575360 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2852,51 +2618,363 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5992648988439413130} - - component: {fileID: 3402386322276375546} - - component: {fileID: 641156383072195461} + - component: {fileID: 5195551779674469950} + - component: {fileID: 2146599359519130631} + - component: {fileID: 9037927824776909123} m_Layer: 11 - m_Name: Cube (1) + m_Name: Sphere (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5992648988439413130 +--- !u!4 &5195551779674469950 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4521020990665222479} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 3732820473258575360} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.1133, y: -0.014200009, z: -0.005672656} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 4232618907112207193} - m_RootOrder: 1 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3402386322276375546 -BoxCollider: +--- !u!135 &2146599359519130631 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4521020990665222479} + m_GameObject: {fileID: 3732820473258575360} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &641156383072195461 +--- !u!114 &9037927824776909123 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4521020990665222479} + m_GameObject: {fileID: 3732820473258575360} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3990848330631413395 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7252714817127048065} + - component: {fileID: 6103154979891677904} + - component: {fileID: 2253437207616611929} + m_Layer: 11 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7252714817127048065 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3990848330631413395} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.15959999, y: -0.014200009, z: -0.005702853} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 3388675454637027037} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6103154979891677904 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3990848330631413395} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2253437207616611929 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3990848330631413395} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4098896491634150151 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8083325283694969936} + - component: {fileID: 4140022674609694564} + - component: {fileID: 545736786659498325} + m_Layer: 11 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8083325283694969936 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4098896491634150151} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.019699998, y: -0.014200017, z: -0.0062238723} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 8083344018379187034} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &4140022674609694564 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4098896491634150151} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &545736786659498325 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4098896491634150151} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4280561993636279428 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 331304665956949706} + - component: {fileID: 3532533341241422629} + - component: {fileID: 5358318040817326146} + m_Layer: 11 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &331304665956949706 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4280561993636279428} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.019699998, y: -0.014200009, z: -0.005672656} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4232618907112207193} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3532533341241422629 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4280561993636279428} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5358318040817326146 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4280561993636279428} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4377118541972405990 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8135542930492948041} + - component: {fileID: 2848297736809095311} + - component: {fileID: 4503808165425149972} + m_Layer: 11 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8135542930492948041 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4377118541972405990} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.15959999, y: -0.014200009, z: -0.005672656} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4232618907112207193} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2848297736809095311 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4377118541972405990} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4503808165425149972 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4377118541972405990} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3011,7 +3089,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &4525585609517839611 +--- !u!1 &4545255003083819067 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3019,51 +3097,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2691603443838436858} - - component: {fileID: 5882751575620393559} - - component: {fileID: 7897794825789703751} + - component: {fileID: 4707205234931845027} + - component: {fileID: 5211655308662659497} + - component: {fileID: 2517221273954600301} m_Layer: 11 - m_Name: Cube (3) + m_Name: Sphere (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2691603443838436858 +--- !u!4 &4707205234931845027 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4525585609517839611} + m_GameObject: {fileID: 4545255003083819067} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.15959999, y: -0.014170006, z: -0.005293563} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 8083344018379187034} - m_RootOrder: 3 + m_Father: {fileID: 7090807350158717037} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5882751575620393559 -BoxCollider: +--- !u!135 &5211655308662659497 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4525585609517839611} + m_GameObject: {fileID: 4545255003083819067} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7897794825789703751 +--- !u!114 &2517221273954600301 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4525585609517839611} + m_GameObject: {fileID: 4545255003083819067} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3076,85 +3154,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4593749417828192294 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8965808594974364271} - - component: {fileID: 7181903725648269959} - - component: {fileID: 6109785960747264830} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8965808594974364271 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4593749417828192294} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4232618907112207193} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7181903725648269959 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4593749417828192294} - 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!114 &6109785960747264830 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4593749417828192294} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 + portPosition: 2 deviceId: deviceName: portModel: @@ -3199,7 +3199,7 @@ Transform: m_Father: {fileID: 363297859982620036} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &4743198940408620244 +--- !u!1 &5084723358370194678 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3207,51 +3207,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8048565466936577288} - - component: {fileID: 2708237852392402831} - - component: {fileID: 8960809986171420397} + - component: {fileID: 8416064805044108515} + - component: {fileID: 824764442191682067} + - component: {fileID: 671067813611766379} m_Layer: 11 - m_Name: Cube (6) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8048565466936577288 +--- !u!4 &8416064805044108515 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4743198940408620244} + m_GameObject: {fileID: 5084723358370194678} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.0235, y: -0.014200017, z: -0.0062238798} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 3388675454637027037} - m_RootOrder: 6 + m_Father: {fileID: 8083344018379187034} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2708237852392402831 -BoxCollider: +--- !u!135 &824764442191682067 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4743198940408620244} + m_GameObject: {fileID: 5084723358370194678} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8960809986171420397 +--- !u!114 &671067813611766379 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4743198940408620244} + m_GameObject: {fileID: 5084723358370194678} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3264,7 +3264,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 7 + portPosition: 5 deviceId: deviceName: portModel: @@ -3277,7 +3277,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &4907344960668389723 +--- !u!1 &5129107315002545279 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3285,51 +3285,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7165754451950328236} - - component: {fileID: 1366614793437957746} - - component: {fileID: 4845871226596434129} + - component: {fileID: 3429950217409007815} + - component: {fileID: 2807486540096413972} + - component: {fileID: 1665884624040260602} m_Layer: 11 - m_Name: Cube + m_Name: Sphere (7) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7165754451950328236 +--- !u!4 &3429950217409007815 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4907344960668389723} + m_GameObject: {fileID: 5129107315002545279} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.10930001, y: -0.014200017, z: -0.0062238723} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 4232618907112207193} - m_RootOrder: 0 + m_Father: {fileID: 8083344018379187034} + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1366614793437957746 -BoxCollider: +--- !u!135 &2807486540096413972 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4907344960668389723} + m_GameObject: {fileID: 5129107315002545279} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4845871226596434129 +--- !u!114 &1665884624040260602 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4907344960668389723} + m_GameObject: {fileID: 5129107315002545279} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3342,7 +3342,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 1 + portPosition: 8 deviceId: deviceName: portModel: @@ -3355,7 +3355,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &5123542667962672015 +--- !u!1 &5799113098907904331 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3363,285 +3363,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2442644725662818332} - - component: {fileID: 8120866463298286096} - - component: {fileID: 7594628465796433085} + - component: {fileID: 748024687981570158} + - component: {fileID: 9015569159853411275} + - component: {fileID: 3387034001070820212} m_Layer: 11 - m_Name: Cube (3) + m_Name: Sphere (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2442644725662818332 +--- !u!4 &748024687981570158 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5123542667962672015} + m_GameObject: {fileID: 5799113098907904331} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4232618907112207193} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8120866463298286096 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5123542667962672015} - 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!114 &7594628465796433085 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5123542667962672015} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5350545393465491053 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5752940455334179691} - - component: {fileID: 465363333837240926} - - component: {fileID: 2513056478179699462} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5752940455334179691 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5350545393465491053} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3388675454637027037} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &465363333837240926 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5350545393465491053} - 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!114 &2513056478179699462 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5350545393465491053} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5371729226770633989 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4565307310950060919} - - component: {fileID: 5892673318081860990} - - component: {fileID: 5669189379343030954} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4565307310950060919 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5371729226770633989} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7090807350158717037} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5892673318081860990 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5371729226770633989} - 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!114 &5669189379343030954 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5371729226770633989} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5541760212015385010 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8852643148453934753} - - component: {fileID: 1241074439515829435} - - component: {fileID: 7739594964479093816} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8852643148453934753 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5541760212015385010} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.1133, y: -0.014200017, z: -0.0062238798} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 8083344018379187034} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1241074439515829435 -BoxCollider: +--- !u!135 &9015569159853411275 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5541760212015385010} + m_GameObject: {fileID: 5799113098907904331} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7739594964479093816 +--- !u!114 &3387034001070820212 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5541760212015385010} + m_GameObject: {fileID: 5799113098907904331} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3667,7 +3433,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &5831856395212818939 +--- !u!1 &5874002632023653989 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3675,51 +3441,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5611460813998228802} - - component: {fileID: 6597478765038516407} - - component: {fileID: 4366264230804575100} + - component: {fileID: 3273466403271147761} + - component: {fileID: 68484591229845425} + - component: {fileID: 5628771846536639181} m_Layer: 11 - m_Name: Cube (5) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5611460813998228802 +--- !u!4 &3273466403271147761 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5831856395212818939} + m_GameObject: {fileID: 5874002632023653989} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.023500003, y: -0.014200009, z: -0.005702853} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 3388675454637027037} - m_RootOrder: 5 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6597478765038516407 -BoxCollider: +--- !u!135 &68484591229845425 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5831856395212818939} + m_GameObject: {fileID: 5874002632023653989} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4366264230804575100 +--- !u!114 &5628771846536639181 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5831856395212818939} + m_GameObject: {fileID: 5874002632023653989} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3732,7 +3498,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 6 + portPosition: 5 deviceId: deviceName: portModel: @@ -3745,7 +3511,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &5916433335648305691 +--- !u!1 &6018362822183663510 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3753,51 +3519,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5559232659499011781} - - component: {fileID: 717164275292732467} - - component: {fileID: 8657920993497132277} + - component: {fileID: 3553924979084062624} + - component: {fileID: 1298025499203724768} + - component: {fileID: 6028147935002553497} m_Layer: 11 - m_Name: Cube + m_Name: Sphere (3) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5559232659499011781 +--- !u!4 &3553924979084062624 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5916433335648305691} + m_GameObject: {fileID: 6018362822183663510} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.0701, y: -0.014200009, z: -0.005702853} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 3388675454637027037} - m_RootOrder: 0 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &717164275292732467 -BoxCollider: +--- !u!135 &1298025499203724768 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5916433335648305691} + m_GameObject: {fileID: 6018362822183663510} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8657920993497132277 +--- !u!114 &6028147935002553497 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5916433335648305691} + m_GameObject: {fileID: 6018362822183663510} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3810,85 +3576,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6113331780442930937 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4219845018159532203} - - component: {fileID: 292040006705475407} - - component: {fileID: 3128041259826171826} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4219845018159532203 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6113331780442930937} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4232618907112207193} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &292040006705475407 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6113331780442930937} - 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!114 &3128041259826171826 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6113331780442930937} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 + portPosition: 4 deviceId: deviceName: portModel: @@ -4145,7 +3833,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -4074771182479976246, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} ---- !u!1 &6724201895395607957 +--- !u!1 &6234723103052411621 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4153,51 +3841,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5254120452308884941} - - component: {fileID: 4594043037169977690} - - component: {fileID: 2291341432025202930} + - component: {fileID: 8822073471147862613} + - component: {fileID: 4565267752870926066} + - component: {fileID: 4988477739400760255} m_Layer: 11 - m_Name: Cube (1) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5254120452308884941 +--- !u!4 &8822073471147862613 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6724201895395607957} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 6234723103052411621} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0235, y: -0.014200009, z: -0.0056726523} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 3388675454637027037} - m_RootOrder: 1 + m_Father: {fileID: 4232618907112207193} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4594043037169977690 -BoxCollider: +--- !u!135 &4565267752870926066 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6724201895395607957} + m_GameObject: {fileID: 6234723103052411621} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2291341432025202930 +--- !u!114 &4988477739400760255 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6724201895395607957} + m_GameObject: {fileID: 6234723103052411621} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4210,7 +3898,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 2 + portPosition: 5 deviceId: deviceName: portModel: @@ -4223,7 +3911,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6739095391803020969 +--- !u!1 &6292566155782745116 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4231,51 +3919,519 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2226479872798770374} - - component: {fileID: 7330429137150142241} - - component: {fileID: 4099299538262381199} + - component: {fileID: 5586015355564189595} + - component: {fileID: 2904175670331669862} + - component: {fileID: 3329601624726396760} m_Layer: 11 - m_Name: Cube (10) + m_Name: Sphere (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2226479872798770374 +--- !u!4 &5586015355564189595 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6739095391803020969} + m_GameObject: {fileID: 6292566155782745116} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.066099994, y: -0.014200009, z: -0.005702853} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 7090807350158717037} - m_RootOrder: 10 + m_Father: {fileID: 3388675454637027037} + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7330429137150142241 -BoxCollider: +--- !u!135 &2904175670331669862 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6739095391803020969} + m_GameObject: {fileID: 6292566155782745116} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4099299538262381199 +--- !u!114 &3329601624726396760 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6739095391803020969} + m_GameObject: {fileID: 6292566155782745116} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6497371241452767624 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2616553804640768835} + - component: {fileID: 7600763734388534021} + - component: {fileID: 8088927967687518954} + m_Layer: 11 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2616553804640768835 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6497371241452767624} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.0701, y: -0.014200017, z: -0.006223865} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 8083344018379187034} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7600763734388534021 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6497371241452767624} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8088927967687518954 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6497371241452767624} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6688881252213580121 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6776682826565773576} + - component: {fileID: 2351982693944444015} + - component: {fileID: 3177945843548074067} + m_Layer: 11 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6776682826565773576 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6688881252213580121} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.019700002, y: -0.014170006, z: -0.0052935705} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 7090807350158717037} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2351982693944444015 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6688881252213580121} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3177945843548074067 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6688881252213580121} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6767516180920426526 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2336744336724270298} + - component: {fileID: 5791677215647579039} + - component: {fileID: 7527361755235403781} + m_Layer: 11 + m_Name: Sphere (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2336744336724270298 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6767516180920426526} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.1918, y: -0.014170006, z: -0.005293563} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 7090807350158717037} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &5791677215647579039 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6767516180920426526} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7527361755235403781 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6767516180920426526} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 10 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6798733855911968260 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5297495732470253238} + - component: {fileID: 5691152557208738193} + - component: {fileID: 8416719717114531843} + m_Layer: 11 + m_Name: Sphere (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5297495732470253238 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6798733855911968260} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.14860001, y: -0.014200017, z: -0.0062238723} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 8083344018379187034} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &5691152557208738193 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6798733855911968260} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8416719717114531843 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6798733855911968260} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 9 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6862831896980543781 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5005709417038827223} + - component: {fileID: 7126790538692736546} + - component: {fileID: 5798621932728161439} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5005709417038827223 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6862831896980543781} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.20284998, y: -0.014200009, z: -0.005702853} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 3388675454637027037} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7126790538692736546 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6862831896980543781} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5798621932728161439 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6862831896980543781} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7073527890314931650 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3824967214978859934} + - component: {fileID: 1142313227321318254} + - component: {fileID: 6615599985536444023} + m_Layer: 11 + m_Name: Sphere (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3824967214978859934 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7073527890314931650} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.23820001, y: -0.014200009, z: -0.005702853} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 3388675454637027037} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1142313227321318254 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7073527890314931650} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6615599985536444023 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7073527890314931650} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4301,240 +4457,6 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7034962998886723710 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7782446926905503245} - - component: {fileID: 908070106592389129} - - component: {fileID: 6483977449918716928} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7782446926905503245 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7034962998886723710} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7090807350158717037} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &908070106592389129 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7034962998886723710} - 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!114 &6483977449918716928 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7034962998886723710} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7048573296286573668 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1907202416662321052} - - component: {fileID: 551424434005426970} - - component: {fileID: 1695958688235219581} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1907202416662321052 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7048573296286573668} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3388675454637027037} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &551424434005426970 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7048573296286573668} - 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!114 &1695958688235219581 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7048573296286573668} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7086426949651327318 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 95216853845265340} - - component: {fileID: 2972377262603415919} - - component: {fileID: 9035212977276510841} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &95216853845265340 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7086426949651327318} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8083344018379187034} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2972377262603415919 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7086426949651327318} - 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!114 &9035212977276510841 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7086426949651327318} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: --- !u!1 &7185171699161354775 GameObject: m_ObjectHideFlags: 0 @@ -4566,7 +4488,7 @@ Transform: m_Father: {fileID: 363297859982620036} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &7597660510246742316 +--- !u!1 &8051855526232955598 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4574,129 +4496,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2290900932599892641} - - component: {fileID: 1272578962025628309} - - component: {fileID: 5299591454797382812} + - component: {fileID: 3427931339950652961} + - component: {fileID: 3091693392880306178} + - component: {fileID: 3898019613598937511} m_Layer: 11 - m_Name: Cube (3) + m_Name: Sphere (10) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2290900932599892641 +--- !u!4 &3427931339950652961 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7597660510246742316} + m_GameObject: {fileID: 8051855526232955598} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7090807350158717037} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1272578962025628309 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7597660510246742316} - 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!114 &5299591454797382812 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7597660510246742316} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7786515907029126882 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8917734843461204594} - - component: {fileID: 5393576996715601219} - - component: {fileID: 209496597932298073} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8917734843461204594 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7786515907029126882} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.23820001, y: -0.014200017, z: -0.0062238798} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 8083344018379187034} - m_RootOrder: 11 + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5393576996715601219 -BoxCollider: +--- !u!135 &3091693392880306178 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7786515907029126882} + m_GameObject: {fileID: 8051855526232955598} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &209496597932298073 +--- !u!114 &3898019613598937511 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7786515907029126882} + m_GameObject: {fileID: 8051855526232955598} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4709,7 +4553,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 12 + portPosition: 11 deviceId: deviceName: portModel: @@ -4722,7 +4566,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7967460066294838030 +--- !u!1 &8218872119416235349 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4730,129 +4574,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7746249230124728492} - - component: {fileID: 897471621598555259} - - component: {fileID: 7951372463754968944} + - component: {fileID: 5714144472445985784} + - component: {fileID: 3469314803954439118} + - component: {fileID: 2624740259082032182} m_Layer: 11 - m_Name: Cube (4) + m_Name: Sphere (8) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7746249230124728492 +--- !u!4 &5714144472445985784 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7967460066294838030} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 8218872119416235349} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.14860001, y: -0.014200009, z: -0.005672656} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 3388675454637027037} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &897471621598555259 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7967460066294838030} - 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!114 &7951372463754968944 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7967460066294838030} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8107751172695144989 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3100607874199597131} - - component: {fileID: 1220514309407505802} - - component: {fileID: 9076811596339792260} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3100607874199597131 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8107751172695144989} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8083344018379187034} + m_Father: {fileID: 4232618907112207193} m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1220514309407505802 -BoxCollider: +--- !u!135 &3469314803954439118 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8107751172695144989} + m_GameObject: {fileID: 8218872119416235349} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &9076811596339792260 +--- !u!114 &2624740259082032182 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8107751172695144989} + m_GameObject: {fileID: 8218872119416235349} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4878,7 +4644,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &8186132818246924899 +--- !u!1 &8334471323600966470 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4886,51 +4652,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5640539933715499200} - - component: {fileID: 2426520561710323387} - - component: {fileID: 1901304340437245226} + - component: {fileID: 3541731593462230492} + - component: {fileID: 6917094267999597737} + - component: {fileID: 5640347542700703142} m_Layer: 11 - m_Name: Cube (1) + m_Name: Sphere m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5640539933715499200 +--- !u!4 &3541731593462230492 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8186132818246924899} + m_GameObject: {fileID: 8334471323600966470} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.20284998, y: -0.014170006, z: -0.005293563} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 8083344018379187034} - m_RootOrder: 1 + m_Father: {fileID: 7090807350158717037} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2426520561710323387 -BoxCollider: +--- !u!135 &6917094267999597737 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8186132818246924899} + m_GameObject: {fileID: 8334471323600966470} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1901304340437245226 +--- !u!114 &5640347542700703142 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8186132818246924899} + m_GameObject: {fileID: 8334471323600966470} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4943,7 +4709,241 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 2 + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8356769445779295560 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1516717170785534041} + - component: {fileID: 7342089156089916636} + - component: {fileID: 4982126727173180323} + m_Layer: 11 + m_Name: Sphere (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1516717170785534041 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8356769445779295560} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2814, y: -0.014200009, z: -0.005702853} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 3388675454637027037} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7342089156089916636 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8356769445779295560} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4982126727173180323 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8356769445779295560} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8735828463144191453 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8599385141207087024} + - component: {fileID: 8346524255632003019} + - component: {fileID: 122085819885066028} + m_Layer: 11 + m_Name: Sphere (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8599385141207087024 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8735828463144191453} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.1918, y: -0.014200009, z: -0.005702853} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 3388675454637027037} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &8346524255632003019 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8735828463144191453} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &122085819885066028 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8735828463144191453} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 10 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &9098729507506501186 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5349418718718238466} + - component: {fileID: 2532087759420771819} + - component: {fileID: 4715160304813798659} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5349418718718238466 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9098729507506501186} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.20284998, y: -0.014200017, z: -0.0062238798} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 8083344018379187034} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2532087759420771819 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9098729507506501186} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4715160304813798659 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9098729507506501186} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 deviceId: deviceName: portModel: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/23.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/23.prefab index f8ec3293b..c56162f26 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/23.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/23.prefab @@ -182,7 +182,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 784674695684760748} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0.5280001, z: 0.46563628} + m_LocalPosition: {x: 0, y: 0.5280001, z: 0.464} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -196,7 +196,7 @@ MeshFilter: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 784674695684760748} - m_Mesh: {fileID: -2641816765375938631, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} + m_Mesh: {fileID: -3263837062639474007, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} --- !u!23 &2906877965759513424 MeshRenderer: m_ObjectHideFlags: 0 @@ -424,7 +424,7 @@ GameObject: - component: {fileID: 6935388459028431162} - component: {fileID: 8538898671383905983} - component: {fileID: 5408327333613247010} - m_Layer: 8 + m_Layer: 13 m_Name: Box247 m_TagString: Untagged m_Icon: {fileID: 0} @@ -703,7 +703,7 @@ GameObject: - component: {fileID: 7467310560552184468} - component: {fileID: 1386800406351062777} - component: {fileID: 6045063904263600468} - m_Layer: 8 + m_Layer: 13 m_Name: Box244 m_TagString: Untagged m_Icon: {fileID: 0} @@ -1651,7 +1651,7 @@ GameObject: - component: {fileID: 6895943976376736537} - component: {fileID: 6555079226093986229} - component: {fileID: 5811567357047465316} - m_Layer: 8 + m_Layer: 13 m_Name: Box233 m_TagString: Untagged m_Icon: {fileID: 0} @@ -1871,7 +1871,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4369354674093281706} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0.5280001, z: 0.579} + m_LocalPosition: {x: 0, y: 0.5280001, z: 0.8076} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -1885,7 +1885,7 @@ MeshFilter: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4369354674093281706} - m_Mesh: {fileID: -3263837062639474007, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} + m_Mesh: {fileID: -2641816765375938631, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} --- !u!23 &207943496091899729 MeshRenderer: m_ObjectHideFlags: 0 @@ -2516,7 +2516,7 @@ GameObject: - component: {fileID: 1092240794459889612} - component: {fileID: 8587213160179160454} - component: {fileID: 6015136309587849300} - m_Layer: 8 + m_Layer: 13 m_Name: Box246 m_TagString: Untagged m_Icon: {fileID: 0} @@ -3139,7 +3139,7 @@ GameObject: - component: {fileID: 8130464782939882688} - component: {fileID: 3244743908817976440} - component: {fileID: 2726333691557514839} - m_Layer: 8 + m_Layer: 13 m_Name: Box239 m_TagString: Untagged m_Icon: {fileID: 0} @@ -3508,7 +3508,7 @@ GameObject: - component: {fileID: 6267666668391401236} - component: {fileID: 8304157677427360301} - component: {fileID: 3828033031576223077} - m_Layer: 8 + m_Layer: 13 m_Name: Box248 m_TagString: Untagged m_Icon: {fileID: 0} @@ -3788,7 +3788,7 @@ GameObject: - component: {fileID: 8931182494995120860} - component: {fileID: 7734572964375865253} - component: {fileID: 603205785717530528} - m_Layer: 8 + m_Layer: 13 m_Name: Box235 m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/24.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/24.prefab index f82e407e1..d3058bde1 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/24.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/24.prefab @@ -249,7 +249,7 @@ GameObject: - component: {fileID: 1968382887049340033} - component: {fileID: 7301653309684399512} - component: {fileID: 987866938096823407} - m_Layer: 8 + m_Layer: 13 m_Name: Box032 m_TagString: Untagged m_Icon: {fileID: 0} @@ -843,7 +843,7 @@ GameObject: - component: {fileID: 6311724817261758047} - component: {fileID: 1106379417564206800} - component: {fileID: 5228929366920309418} - m_Layer: 8 + m_Layer: 13 m_Name: Box037 m_TagString: Untagged m_Icon: {fileID: 0} @@ -1078,7 +1078,7 @@ GameObject: - component: {fileID: 3383387053021078352} - component: {fileID: 9218329686405572080} - component: {fileID: 6609503373900342849} - m_Layer: 8 + m_Layer: 13 m_Name: Box025 m_TagString: Untagged m_Icon: {fileID: 0} @@ -2820,7 +2820,7 @@ GameObject: - component: {fileID: 264499987143437847} - component: {fileID: 9084999724606926243} - component: {fileID: 7740979229474018263} - m_Layer: 8 + m_Layer: 13 m_Name: Box038 m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/34.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/34.prefab index b4f938929..f87e2d0e8 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/34.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/34.prefab @@ -249,7 +249,7 @@ GameObject: - component: {fileID: 6330756363183492496} - component: {fileID: 5733690397267923954} - component: {fileID: 6438929142702474711} - m_Layer: 8 + m_Layer: 13 m_Name: Box032 m_TagString: Untagged m_Icon: {fileID: 0} @@ -1805,7 +1805,7 @@ GameObject: - component: {fileID: 349716310903556802} - component: {fileID: 5389257296111276810} - component: {fileID: 8536372032460239809} - m_Layer: 8 + m_Layer: 13 m_Name: Box037 m_TagString: Untagged m_Icon: {fileID: 0} @@ -2169,7 +2169,7 @@ GameObject: - component: {fileID: 3847373985515785412} - component: {fileID: 7370978328035881471} - component: {fileID: 5663650217132703765} - m_Layer: 8 + m_Layer: 13 m_Name: Box025 m_TagString: Untagged m_Icon: {fileID: 0} @@ -2545,7 +2545,7 @@ GameObject: - component: {fileID: 65417945283026454} - component: {fileID: 82275749355828958} - component: {fileID: 259768645355642621} - m_Layer: 8 + m_Layer: 13 m_Name: Box038 m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/36.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/36-old.prefab similarity index 64% rename from GQ_URP/GQ/Assets/prefab/老模型/36.prefab rename to GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/36-old.prefab index 28e753eef..629dbdf6b 100644 --- a/GQ_URP/GQ/Assets/prefab/老模型/36.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/36-old.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &136677118914031099 +--- !u!1 &238257681328418598 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,1162 +8,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1750165034267818043} - - component: {fileID: 1636858196878061630} - - component: {fileID: 5612680132326373144} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1750165034267818043 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 136677118914031099} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: -0.085, y: -0.0006, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2494444184688870355} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1636858196878061630 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 136677118914031099} - 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!114 &5612680132326373144 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 136677118914031099} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &474287174918971398 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1501358426804664953} - - component: {fileID: 1051064285648468687} - - component: {fileID: 2824031418588125171} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1501358426804664953 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 474287174918971398} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0639, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 771442881091986432} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1051064285648468687 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 474287174918971398} - 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!114 &2824031418588125171 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 474287174918971398} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &741480247872864501 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5334714598026349892} - - component: {fileID: 6141710593999718707} - - component: {fileID: 382049757813704679} - m_Layer: 8 - m_Name: Box073 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5334714598026349892 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 741480247872864501} - m_LocalRotation: {x: 0.000000089211305, y: 0.000000089211305, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.03655179, y: 0.38048548, z: -0.15646511} - m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6141710593999718707 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 741480247872864501} - m_Mesh: {fileID: -4787829685061339440, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &382049757813704679 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 741480247872864501} - 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: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - 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!1 &902999747589791775 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 279148105789600450} - - component: {fileID: 8236330835455041872} - - component: {fileID: 6197915307004166944} - m_Layer: 8 - m_Name: Box062 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &279148105789600450 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 902999747589791775} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.25110626, y: 0.18508703, z: -0.15037027} - m_LocalScale: {x: 1, y: 1, z: 1.5098631} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8236330835455041872 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 902999747589791775} - m_Mesh: {fileID: 5062258218628926779, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &6197915307004166944 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 902999747589791775} - 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: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 6282110939650246528, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -2657437502011740032, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - 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!1 &1301160882448172696 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3481592211287051916} - - component: {fileID: 1811002710938979658} - - component: {fileID: 4245190128618365115} - m_Layer: 8 - m_Name: Box068 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3481592211287051916 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1301160882448172696} - m_LocalRotation: {x: 0.000000089211305, y: 0.000000089211305, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.050002776, y: 0.38048548, z: -0.15037024} - m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1811002710938979658 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1301160882448172696} - m_Mesh: {fileID: -8084387392185104470, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &4245190128618365115 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1301160882448172696} - 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: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 8439447713746551403, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - 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!1 &1469508006942531471 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2494444184688870355} - - component: {fileID: 4707323075357677868} - - component: {fileID: 3055022818174440562} - - component: {fileID: 4394768802228512601} - - component: {fileID: 6604588863448537128} - - component: {fileID: 5835716098114292477} - - component: {fileID: 931679824582044911} - m_Layer: 8 - m_Name: Box065 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2494444184688870355 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1469508006942531471} - m_LocalRotation: {x: 0.000000089211305, y: 0.000000089211305, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.16602586, y: 0.38048548, z: -0.15037024} - m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2316397465278657919} - - {fileID: 6658421820338346345} - - {fileID: 5776025225180148296} - - {fileID: 1346047617408124117} - - {fileID: 1569101110863866732} - - {fileID: 5384045496338414787} - - {fileID: 1750165034267818043} - - {fileID: 3283012511727039447} - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4707323075357677868 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1469508006942531471} - m_Mesh: {fileID: 7404775158862943375, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &3055022818174440562 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1469508006942531471} - 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: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164185304146670524, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -4080166453176829040, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -2657437502011740032, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - 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!114 &4394768802228512601 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1469508006942531471} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &6604588863448537128 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1469508006942531471} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5835716098114292477 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1469508006942531471} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &931679824582044911 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1469508006942531471} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 7404775158862943375, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!1 &1484805504200342111 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5085854871346737019} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5085854871346737019 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1484805504200342111} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: -0.767, z: 0.2} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 23 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1493720819994245075 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5064352506131314550} - - component: {fileID: 5192795383187494357} - - component: {fileID: 4729342945496115721} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5064352506131314550 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1493720819994245075} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.1132, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 771442881091986432} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5192795383187494357 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1493720819994245075} - 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!114 &4729342945496115721 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1493720819994245075} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 13 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1566706619991012985 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6080891853998776477} - - component: {fileID: 7715307038045844543} - - component: {fileID: 3521770289246959733} - m_Layer: 8 - m_Name: Box060 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6080891853998776477 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1566706619991012985} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.30076832, y: 0.38048548, z: -0.15646511} - m_LocalScale: {x: 1, y: 1, z: 1.5098631} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7715307038045844543 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1566706619991012985} - m_Mesh: {fileID: -4248355281360383206, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &3521770289246959733 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1566706619991012985} - 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: -6257702196253466788, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 3287120834081420130, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 3925418980499852262, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1368039103165038143, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -6307277589567570940, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5956578104803850452, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - 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!1 &1767349784194816878 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3050612801852182801} - - component: {fileID: 4950007396417966460} - - component: {fileID: 5385768138832807171} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3050612801852182801 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1767349784194816878} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.104, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 771442881091986432} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4950007396417966460 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1767349784194816878} - 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!114 &5385768138832807171 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1767349784194816878} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1837969195909628942 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8490063397973143223} - - component: {fileID: 7833608318830623294} - - component: {fileID: 7844864892911092502} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8490063397973143223 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1837969195909628942} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0151, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 771442881091986432} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7833608318830623294 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1837969195909628942} - 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!114 &7844864892911092502 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1837969195909628942} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2049230183716168854 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5108631633955446604} - - component: {fileID: 7145985363989354290} - - component: {fileID: 3117622967735298133} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5108631633955446604 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2049230183716168854} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0311, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 771442881091986432} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7145985363989354290 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2049230183716168854} - 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!114 &3117622967735298133 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2049230183716168854} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2455859254260246595 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2448589610993227485} - - component: {fileID: 4646553321039130277} - - component: {fileID: 8671162914683522076} - m_Layer: 8 - m_Name: Box079 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2448589610993227485 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2455859254260246595} - m_LocalRotation: {x: 0.000000089211305, y: 0.000000089211305, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.20966078, y: 0.38048548, z: -0.15037024} - m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4646553321039130277 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2455859254260246595} - m_Mesh: {fileID: -2458614987055752723, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &8671162914683522076 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2455859254260246595} - 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: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - 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!1 &2629640582108476835 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5747793585008951527} - - component: {fileID: 4876650519385562836} - - component: {fileID: 1257207357619201455} + - component: {fileID: 2352083992720136504} + - component: {fileID: 250239919298930487} + - component: {fileID: 8680368017604961303} m_Layer: 11 m_Name: Cube (8) m_TagString: Untagged @@ -1171,41 +18,42 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5747793585008951527 +--- !u!4 &2352083992720136504 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2629640582108476835} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0258, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} + m_GameObject: {fileID: 238257681328418598} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: -0.02579997, y: 0.0029999723, z: 0.25649998} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 771442881091986432} + m_Father: {fileID: 3409569182399693976} m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4876650519385562836 +--- !u!65 &250239919298930487 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2629640582108476835} + m_GameObject: {fileID: 238257681328418598} 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!114 &1257207357619201455 +--- !u!114 &8680368017604961303 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2629640582108476835} + m_GameObject: {fileID: 238257681328418598} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1231,7 +79,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3369258829036236656 +--- !u!1 &564174378386896135 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1239,65 +87,791 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2704925741127955914} - - component: {fileID: 3525050119598699545} - - component: {fileID: 4522560510514961695} - - component: {fileID: 8818152801778168483} - - component: {fileID: -7982793875079541578} - - component: {fileID: -8909188243665711885} - m_Layer: 8 - m_Name: 36 + - component: {fileID: 5339638069407911918} + - component: {fileID: 3534063958084392921} + - component: {fileID: 613720182760237248} + m_Layer: 11 + m_Name: Cube (5) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2704925741127955914 +--- !u!4 &5339638069407911918 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3369258829036236656} - m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} + m_GameObject: {fileID: 564174378386896135} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: 0.04770002, y: 0.0030000296, z: 0.25649998} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 7423287049483324526} - - {fileID: 6080891853998776477} - - {fileID: 5078905462207568454} - - {fileID: 279148105789600450} - - {fileID: 3304446216220255002} - - {fileID: 6677649783437236489} - - {fileID: 2494444184688870355} - - {fileID: 7566782902018085742} - - {fileID: 588284148910806061} - - {fileID: 3481592211287051916} - - {fileID: 2999535602511611009} - - {fileID: 4915129317936571633} - - {fileID: 771442881091986432} - - {fileID: 3117155372314712884} - - {fileID: 5334714598026349892} - - {fileID: 502294262771640577} - - {fileID: 4283172781475754787} - - {fileID: 3119487771455069027} - - {fileID: 773904413390227160} - - {fileID: 6061484385126807712} - - {fileID: 2448589610993227485} - - {fileID: 2302451799919613023} - - {fileID: 5760551773049876661} - - {fileID: 5085854871346737019} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &3525050119598699545 + m_Children: [] + m_Father: {fileID: 3409569182399693976} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3534063958084392921 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 564174378386896135} + 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!114 &613720182760237248 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3369258829036236656} + m_GameObject: {fileID: 564174378386896135} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &572371493497456859 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 296865300291712581} + - component: {fileID: 7322379711718526525} + - component: {fileID: 6751923435954302084} + m_Layer: 8 + m_Name: Box079 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &296865300291712581 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 572371493497456859} + m_LocalRotation: {x: 0.50000006, y: -0.49999994, z: 0.50000006, w: 0.49999994} + m_LocalPosition: {x: 0.20951569, y: -0.009732753, z: 0.38048548} + m_LocalScale: {x: 1.5098637, y: 1.039147, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7322379711718526525 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 572371493497456859} + m_Mesh: {fileID: -2458614987055752723, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &6751923435954302084 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 572371493497456859} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &593414159972646001 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5119105075127824147} + - component: {fileID: 8892676584395878804} + - component: {fileID: 7058878052077247274} + m_Layer: 11 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5119105075127824147 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 593414159972646001} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: -0.08499995, y: -0.0006000059, z: 0.2565} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 539171815329309515} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8892676584395878804 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 593414159972646001} + 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!114 &7058878052077247274 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 593414159972646001} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1116581065631928979 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 295876354116072340} + - component: {fileID: 10294110693910381} + - component: {fileID: 3907399428644720723} + m_Layer: 11 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &295876354116072340 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1116581065631928979} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: -0.0015999962, y: -0.0006000059, z: 0.2565} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 539171815329309515} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &10294110693910381 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1116581065631928979} + 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!114 &3907399428644720723 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1116581065631928979} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1519393413170888225 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4819236499541617910} + - component: {fileID: 7131643272958568395} + - component: {fileID: 955057782906783965} + m_Layer: 8 + m_Name: Box047 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4819236499541617910 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1519393413170888225} + m_LocalRotation: {x: 0.7071069, y: -0, z: -0, w: 0.70710677} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1.5098629, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7131643272958568395 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1519393413170888225} + m_Mesh: {fileID: 347013164166513179, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &955057782906783965 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1519393413170888225} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, 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!1 &1572120656650473140 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7178293285693962974} + - component: {fileID: 1234819511305830469} + - component: {fileID: 202524935284667525} + m_Layer: 8 + m_Name: Box061 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7178293285693962974 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1572120656650473140} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.25125146, y: -0.009732783, z: 0.575884} + m_LocalScale: {x: 1, y: 1, z: 1.5098637} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1234819511305830469 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1572120656650473140} + m_Mesh: {fileID: -2893039221907779070, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &202524935284667525 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1572120656650473140} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: dc5f0f285be51334abb02b539c88f62a, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: d3469d2b2aeaf7441b7b8f89a0def34f, 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!1 &1627358636201926871 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3411753637558036032} + - component: {fileID: 8072709000401877026} + - component: {fileID: 4034547539028464602} + m_Layer: 8 + m_Name: Box077 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3411753637558036032 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1627358636201926871} + m_LocalRotation: {x: 0.50000006, y: -0.49999994, z: 0.50000006, w: 0.49999994} + m_LocalPosition: {x: 0.15181273, y: -0.009732783, z: 0.38048548} + m_LocalScale: {x: 1.5098637, y: 1.039147, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8072709000401877026 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1627358636201926871} + m_Mesh: {fileID: -1405206685389513613, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &4034547539028464602 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1627358636201926871} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &1871685745336044657 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8724257781568259987} + - component: {fileID: 8826661152196676599} + - component: {fileID: 1026854774718442622} + m_Layer: 11 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8724257781568259987 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1871685745336044657} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: 0.15276995, y: 0.003000001, z: 0.25649995} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3409569182399693976} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8826661152196676599 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1871685745336044657} + 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!114 &1026854774718442622 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1871685745336044657} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2007559242443043242 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1711871819808010200} + - component: {fileID: 8664054202059284995} + - component: {fileID: 5046361813678609705} + - component: {fileID: 7298471427680657062} + - component: {fileID: 267109384765836200} + - component: {fileID: 6182303699356900100} + - component: {fileID: 3559030439090193308} + - component: {fileID: 6963738123216573830} + - component: {fileID: 7486436821147393820} + m_Layer: 8 + m_Name: 36-old + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1711871819808010200 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2007559242443043242} + m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.16010304, y: 0, z: -0.00014512241} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4819236499541617910} + - {fileID: 8180266186707664901} + - {fileID: 7178293285693962974} + - {fileID: 2754573036102324826} + - {fileID: 593998506763568002} + - {fileID: 8741004418583755153} + - {fileID: 539171815329309515} + - {fileID: 5541418588356342774} + - {fileID: 3301014818166813877} + - {fileID: 1564041575195504148} + - {fileID: 884380706600903705} + - {fileID: 7049121050558710889} + - {fileID: 3409569182399693976} + - {fileID: 1056043975006534572} + - {fileID: 8065164648493870556} + - {fileID: 2530195974644042137} + - {fileID: 2203787294724035515} + - {fileID: 1058112491347868667} + - {fileID: 3411753637558036032} + - {fileID: 8213221856111433784} + - {fileID: 296865300291712581} + - {fileID: 4185671009826419911} + - {fileID: 7643762491261063213} + - {fileID: 5022871659837855723} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8664054202059284995 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2007559242443043242} + m_Mesh: {fileID: 9220937479983263372, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &5046361813678609705 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2007559242443043242} + 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: af9f09a343f0a264bb1136823665fff9, 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!114 &7298471427680657062 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2007559242443043242} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -1349,13 +923,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &4522560510514961695 +--- !u!114 &267109384765836200 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3369258829036236656} + m_GameObject: {fileID: 2007559242443043242} m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} @@ -1365,32 +939,32 @@ MonoBehaviour: frames: [] PerTier: 42 PerRow: 5 - volume: 16 + volume: 11 isExit: 0 isClicked: 0 isTarget: 0 isplace: 0 canPut: 0 ---- !u!114 &8818152801778168483 +--- !u!114 &6182303699356900100 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3369258829036236656} + m_GameObject: {fileID: 2007559242443043242} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &-7982793875079541578 +--- !u!114 &3559030439090193308 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3369258829036236656} + m_GameObject: {fileID: 2007559242443043242} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} @@ -1407,99 +981,35 @@ MonoBehaviour: original_shebei: [] search_u_wei: 0 is_jigui: 0 ---- !u!114 &-8909188243665711885 +--- !u!114 &6963738123216573830 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3369258829036236656} + m_GameObject: {fileID: 2007559242443043242} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} m_Name: m_EditorClassIdentifier: - volume: 16 + volume: 11 selfIcon: {fileID: 21300000, guid: 62e7f5ae089601a40b92e316beb2bae9, type: 3} ---- !u!1 &3460309814081978441 -GameObject: +--- !u!64 &7486436821147393820 +MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7042412044709670516} - - component: {fileID: 3529667111886817874} - - component: {fileID: 3159604064103326450} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7042412044709670516 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3460309814081978441} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.12, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 771442881091986432} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3529667111886817874 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3460309814081978441} + m_GameObject: {fileID: 2007559242443043242} 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!114 &3159604064103326450 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3460309814081978441} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3473618115877989932 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 9220937479983263372, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!1 &2351011811165022021 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1507,188 +1017,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5078905462207568454} - - component: {fileID: 3803144613496840413} - - component: {fileID: 2822082920452019229} - m_Layer: 8 - m_Name: Box061 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5078905462207568454 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3473618115877989932} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.25110626, y: 0.575884, z: -0.15037027} - m_LocalScale: {x: 1, y: 1, z: 1.5098631} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3803144613496840413 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3473618115877989932} - m_Mesh: {fileID: -2893039221907779070, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &2822082920452019229 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3473618115877989932} - 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: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 6282110939650246528, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -2657437502011740032, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - 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!1 &3526448729557966521 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7423287049483324526} - - component: {fileID: 5124289232752314195} - - component: {fileID: 2928612801328048197} - m_Layer: 8 - m_Name: Box047 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7423287049483324526 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3526448729557966521} - m_LocalRotation: {x: 0.00000008146034, y: 0, z: -0, w: 1} - m_LocalPosition: {x: 0.00014513358, y: 0, z: -0.16010308} - m_LocalScale: {x: 1, y: 1.5098631, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5124289232752314195 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3526448729557966521} - m_Mesh: {fileID: 347013164166513179, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &2928612801328048197 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3526448729557966521} - 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: 1368039103165038143, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -6307277589567570940, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5956578104803850452, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 3925418980499852262, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 3287120834081420130, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -6257702196253466788, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - 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!1 &3559989348318526791 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 295318367844471150} - - component: {fileID: 5332277509479842273} - - component: {fileID: 4194110935220628009} + - component: {fileID: 8591796556320202874} + - component: {fileID: 8837959949623736993} + - component: {fileID: 4490855722698174204} m_Layer: 11 m_Name: Cube (14) m_TagString: Untagged @@ -1696,41 +1027,42 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &295318367844471150 +--- !u!4 &8591796556320202874 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3559989348318526791} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.146, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} + m_GameObject: {fileID: 2351011811165022021} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: -0.14599991, y: 0.003000001, z: 0.2565} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 771442881091986432} + m_Father: {fileID: 3409569182399693976} m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5332277509479842273 +--- !u!65 &8837959949623736993 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3559989348318526791} + m_GameObject: {fileID: 2351011811165022021} 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!114 &4194110935220628009 +--- !u!114 &4490855722698174204 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3559989348318526791} + m_GameObject: {fileID: 2351011811165022021} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1756,7 +1088,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3706467043324362831 +--- !u!1 &2962752101442631313 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1764,46 +1096,125 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 773904413390227160} - - component: {fileID: 6191754859385788602} - - component: {fileID: 1303820342351344450} - m_Layer: 8 - m_Name: Box077 + - component: {fileID: 155016263042401130} + - component: {fileID: 769291875166686744} + - component: {fileID: 4946376700282163915} + m_Layer: 11 + m_Name: Cube (7) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &773904413390227160 +--- !u!4 &155016263042401130 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3706467043324362831} - m_LocalRotation: {x: 0.000000089211305, y: 0.000000089211305, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.15195785, y: 0.38048548, z: -0.15037024} - m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_GameObject: {fileID: 2962752101442631313} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: 0.015100009, y: 0.0029999723, z: 0.25649998} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 18 + m_Father: {fileID: 3409569182399693976} + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6191754859385788602 +--- !u!65 &769291875166686744 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2962752101442631313} + 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!114 &4946376700282163915 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2962752101442631313} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2985208505027985543 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2754573036102324826} + - component: {fileID: 6316541933750878664} + - component: {fileID: 8351614415417697208} + m_Layer: 8 + m_Name: Box062 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2754573036102324826 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2985208505027985543} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.25125146, y: -0.009732783, z: 0.18508703} + m_LocalScale: {x: 1, y: 1, z: 1.5098637} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6316541933750878664 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3706467043324362831} - m_Mesh: {fileID: -1405206685389513613, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &1303820342351344450 + m_GameObject: {fileID: 2985208505027985543} + m_Mesh: {fileID: 5062258218628926779, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &8351614415417697208 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3706467043324362831} + m_GameObject: {fileID: 2985208505027985543} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1817,13 +1228,15 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: dc5f0f285be51334abb02b539c88f62a, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: d3469d2b2aeaf7441b7b8f89a0def34f, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -1845,7 +1258,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &4121946241511383544 +--- !u!1 &3173740602912483160 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1853,9 +1266,88 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 179736051580879790} - - component: {fileID: 3440070411413641443} - - component: {fileID: 2471702047283464480} + - component: {fileID: 3291725412394710590} + - component: {fileID: 592202445181744453} + - component: {fileID: 2714892173010478785} + m_Layer: 11 + m_Name: Cube (13) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3291725412394710590 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3173740602912483160} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: -0.12939993, y: 0.003000001, z: 0.2565} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3409569182399693976} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &592202445181744453 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3173740602912483160} + 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!114 &2714892173010478785 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3173740602912483160} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 14 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3296049309225397969 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2320570091537197072} + - component: {fileID: 5502400691083161786} + - component: {fileID: 704661612370503616} m_Layer: 11 m_Name: Cube (1) m_TagString: Untagged @@ -1863,41 +1355,42 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &179736051580879790 +--- !u!4 &2320570091537197072 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4121946241511383544} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: 0.1138, y: -0.0008, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} + m_GameObject: {fileID: 3296049309225397969} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: 0.1366, y: 0.003000001, z: 0.25649995} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 6677649783437236489} - m_RootOrder: 0 + m_Father: {fileID: 3409569182399693976} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3440070411413641443 +--- !u!65 &5502400691083161786 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4121946241511383544} + m_GameObject: {fileID: 3296049309225397969} 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!114 &2471702047283464480 +--- !u!114 &704661612370503616 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4121946241511383544} + m_GameObject: {fileID: 3296049309225397969} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1910,7 +1403,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 1 + portPosition: 2 deviceId: deviceName: portModel: @@ -1923,7 +1416,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &4844762808885639781 +--- !u!1 &3323616313217674519 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1931,124 +1424,77 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5877275370897493670} - - component: {fileID: 5917865107432874388} - - component: {fileID: 3256986628264010369} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5877275370897493670 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4844762808885639781} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.15277, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 771442881091986432} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5917865107432874388 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4844762808885639781} - 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!114 &3256986628264010369 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4844762808885639781} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4853907674443835780 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3304446216220255002} - - component: {fileID: 1874406307996558382} - - component: {fileID: 3532893642841122358} + - component: {fileID: 5022871659837855723} m_Layer: 8 - m_Name: Box063 + m_Name: "\u951A\u70B9" m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3304446216220255002 +--- !u!4 &5022871659837855723 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4853907674443835780} - m_LocalRotation: {x: 0.000000089211305, y: 0.000000089211305, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.2511063, y: 0.38048548, z: -0.15646511} - m_LocalScale: {x: 1.5098631, y: 1, z: 1} + m_GameObject: {fileID: 3323616313217674519} + m_LocalRotation: {x: 0.70710677, y: -0, z: -0, w: 0.7071069} + m_LocalPosition: {x: -0.00014513731, y: -0.36010325, z: -0.76699996} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 4 + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 23 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1874406307996558382 +--- !u!1 &3436187651137216621 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8065164648493870556} + - component: {fileID: 8132994135476611499} + - component: {fileID: 2353374995078637439} + m_Layer: 8 + m_Name: Box073 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8065164648493870556 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3436187651137216621} + m_LocalRotation: {x: 0.50000006, y: -0.49999994, z: 0.50000006, w: 0.49999994} + m_LocalPosition: {x: 0.03640665, y: -0.00363791, z: 0.38048548} + m_LocalScale: {x: 1.5098637, y: 1.039147, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8132994135476611499 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4853907674443835780} - m_Mesh: {fileID: -2160783174947531112, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &3532893642841122358 + m_GameObject: {fileID: 3436187651137216621} + m_Mesh: {fileID: -4787829685061339440, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &2353374995078637439 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4853907674443835780} + m_GameObject: {fileID: 3436187651137216621} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -2062,12 +1508,13 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: -6257702196253466788, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 3287120834081420130, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 3925418980499852262, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1368039103165038143, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -6307277589567570940, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5956578104803850452, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -2089,7 +1536,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &4945692941676074986 +--- !u!1 &3443945138540967156 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2097,9 +1544,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6080503375738210527} - - component: {fileID: 1202886397609657917} - - component: {fileID: 1413218936445989817} + - component: {fileID: 4169817234225389323} + - component: {fileID: 7331518624856054863} + - component: {fileID: 3059986961342395823} m_Layer: 11 m_Name: Cube (5) m_TagString: Untagged @@ -2107,41 +1554,42 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6080503375738210527 +--- !u!4 &4169817234225389323 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4945692941676074986} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0477, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} + m_GameObject: {fileID: 3443945138540967156} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: -0.047099974, y: -0.0006000059, z: 0.2565} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 771442881091986432} - m_RootOrder: 5 + m_Father: {fileID: 539171815329309515} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1202886397609657917 +--- !u!65 &7331518624856054863 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4945692941676074986} + m_GameObject: {fileID: 3443945138540967156} 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!114 &1413218936445989817 +--- !u!114 &3059986961342395823 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4945692941676074986} + m_GameObject: {fileID: 3443945138540967156} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2154,7 +1602,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 6 + portPosition: 5 deviceId: deviceName: portModel: @@ -2167,7 +1615,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &4994230032370375691 +--- !u!1 &3484521069335893729 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2175,209 +1623,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7987486194507412452} - - component: {fileID: 4387157162644282670} - - component: {fileID: 7178398877447095869} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7987486194507412452 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4994230032370375691} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: 0.0512, y: -0.0008, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6677649783437236489} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4387157162644282670 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4994230032370375691} - 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!114 &7178398877447095869 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4994230032370375691} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5237545643325473099 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5535854382025100190} - - component: {fileID: 3426956011275067918} - - component: {fileID: 6412043797865184871} - m_Layer: 11 - m_Name: Cube (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5535854382025100190 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5237545643325473099} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.162, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 771442881091986432} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3426956011275067918 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5237545643325473099} - 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!114 &6412043797865184871 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5237545643325473099} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 16 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5480983224673900727 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6677649783437236489} - - component: {fileID: 6189566813907470831} - - component: {fileID: 8808521831520106702} - - component: {fileID: 6033035647894946803} - - component: {fileID: 6091700404549777378} - - component: {fileID: 4291399862522075042} - - component: {fileID: 4305409066750068322} + - component: {fileID: 8180266186707664901} + - component: {fileID: 5690237598031369383} + - component: {fileID: 1529633184502159597} m_Layer: 8 - m_Name: Box064 + m_Name: Box060 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6677649783437236489 +--- !u!4 &8180266186707664901 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5480983224673900727} - m_LocalRotation: {x: 0.000000089211305, y: 0.000000089211305, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.19604771, y: 0.38048548, z: -0.15037024} - m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_GameObject: {fileID: 3484521069335893729} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.3009135, y: -0.0036379397, z: 0.38048548} + m_LocalScale: {x: 1, y: 1, z: 1.5098637} m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 179736051580879790} - - {fileID: 4740460383499935551} - - {fileID: 7987486194507412452} - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 5 + m_Children: [] + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6189566813907470831 +--- !u!33 &5690237598031369383 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5480983224673900727} - m_Mesh: {fileID: 7413444807456324831, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &8808521831520106702 + m_GameObject: {fileID: 3484521069335893729} + m_Mesh: {fileID: -4248355281360383206, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &1529633184502159597 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5480983224673900727} + m_GameObject: {fileID: 3484521069335893729} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -2391,17 +1676,12 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1029088870345594192, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -877312669626368751, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -2657437502011740032, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164185304146670524, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -2423,13 +1703,117 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &6033035647894946803 +--- !u!1 &3567189085327376151 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 539171815329309515} + - component: {fileID: 7257070623711689140} + - component: {fileID: 1116911661210432746} + - component: {fileID: 5047803276578577050} + - component: {fileID: 8571491093638530553} + - component: {fileID: 5381019344530008912} + - component: {fileID: 6230746610686597180} + m_Layer: 13 + m_Name: Box065 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &539171815329309515 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3567189085327376151} + m_LocalRotation: {x: 0.50000006, y: -0.49999994, z: 0.50000006, w: 0.49999994} + m_LocalPosition: {x: -0.16617101, y: -0.009732783, z: 0.38048548} + m_LocalScale: {x: 1.5098637, y: 1.039147, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4754620562977328717} + - {fileID: 4922771419809952745} + - {fileID: 295876354116072340} + - {fileID: 5739826069654390921} + - {fileID: 4169817234225389323} + - {fileID: 953894815423391938} + - {fileID: 5119105075127824147} + - {fileID: 737415833651055981} + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7257070623711689140 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3567189085327376151} + m_Mesh: {fileID: 7404775158862943375, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &1116911661210432746 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3567189085327376151} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, type: 2} + - {fileID: 2100000, guid: d5a3c62a9a3aa334f90fb5ff44d48d36, type: 2} + - {fileID: 2100000, guid: d3469d2b2aeaf7441b7b8f89a0def34f, 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!114 &5047803276578577050 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5480983224673900727} + m_GameObject: {fileID: 3567189085327376151} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -2446,7 +1830,7 @@ MonoBehaviour: rackId: shelfId: slotId: - devicePosition: 3 + devicePosition: 2 machineModel: status: conDeviceName: @@ -2481,26 +1865,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &6091700404549777378 +--- !u!114 &8571491093638530553 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5480983224673900727} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &4291399862522075042 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5480983224673900727} + m_GameObject: {fileID: 3567189085327376151} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -2510,23 +1881,36 @@ MonoBehaviour: My_magnifyState: 0 empty: [] TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &4305409066750068322 +--- !u!114 &5381019344530008912 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3567189085327376151} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!64 &6230746610686597180 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5480983224673900727} + m_GameObject: {fileID: 3567189085327376151} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 4 m_Convex: 0 m_CookingOptions: 30 - m_Mesh: {fileID: 7413444807456324831, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!1 &5603387600091764283 + m_Mesh: {fileID: 7404775158862943375, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!1 &4029359097114879488 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2534,474 +1918,142 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4740460383499935551} - - component: {fileID: 4579351975981298436} - - component: {fileID: 5303048448296790364} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4740460383499935551 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5603387600091764283} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: 0.0827, y: -0.0008, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6677649783437236489} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4579351975981298436 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5603387600091764283} - 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!114 &5303048448296790364 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5603387600091764283} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5622032937937968523 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4147242229324892090} - - component: {fileID: 8913959934614324225} - - component: {fileID: 5066482424530721923} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4147242229324892090 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5622032937937968523} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.1366, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 771442881091986432} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8913959934614324225 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5622032937937968523} - 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!114 &5066482424530721923 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5622032937937968523} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5736699839427906720 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 502294262771640577} - - component: {fileID: 3063833042892164213} - - component: {fileID: 7058800992543131906} + - component: {fileID: 1564041575195504148} + - component: {fileID: 4378756073536482770} + - component: {fileID: 2237303593843195939} m_Layer: 8 - m_Name: Box074 + m_Name: Box068 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &502294262771640577 +--- !u!4 &1564041575195504148 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5736699839427906720} - m_LocalRotation: {x: 0.000000089211305, y: 0.000000089211305, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.123106346, y: 0.38048548, z: -0.15037024} - m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_GameObject: {fileID: 4029359097114879488} + m_LocalRotation: {x: 0.50000006, y: -0.49999994, z: 0.50000006, w: 0.49999994} + m_LocalPosition: {x: -0.05014792, y: -0.009732783, z: 0.38048548} + m_LocalScale: {x: 1.5098637, y: 1.039147, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2704925741127955914} + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4378756073536482770 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4029359097114879488} + m_Mesh: {fileID: -8084387392185104470, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &2237303593843195939 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4029359097114879488} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 8ff1d5a2c52311e4696cd22735732a66, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &4030843815406566901 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2977369308294391236} + - component: {fileID: 5059103906548731348} + - component: {fileID: 8879188483623717831} + m_Layer: 11 + m_Name: Cube (15) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2977369308294391236 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4030843815406566901} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: -0.16199991, y: 0.003000001, z: 0.2565} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3409569182399693976} m_RootOrder: 15 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3063833042892164213 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5736699839427906720} - m_Mesh: {fileID: 3181945431582109686, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &7058800992543131906 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5736699839427906720} - 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: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - 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!1 &6000198220813101166 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3119487771455069027} - - component: {fileID: 6399164259963101838} - - component: {fileID: 7176679199542297260} - m_Layer: 8 - m_Name: Box076 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3119487771455069027 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6000198220813101166} - m_LocalRotation: {x: 0.000000089211305, y: 0.000000089211305, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.1808093, y: 0.38048548, z: -0.15037024} - m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6399164259963101838 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6000198220813101166} - m_Mesh: {fileID: 7638646759786298271, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &7176679199542297260 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6000198220813101166} - 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: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - 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!1 &6007357943254165871 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4915129317936571633} - - component: {fileID: 3924869027579147626} - - component: {fileID: 316443652682462760} - m_Layer: 8 - m_Name: Box070 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4915129317936571633 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6007357943254165871} - m_LocalRotation: {x: 0.000000089211305, y: 0.000000089211305, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.021531833, y: 0.38048548, z: -0.15037024} - m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3924869027579147626 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6007357943254165871} - m_Mesh: {fileID: 1702923399578278298, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &316443652682462760 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6007357943254165871} - 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: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - 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!1 &6057753954863221585 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6658421820338346345} - - component: {fileID: 5435711523544228112} - - component: {fileID: 9114072952435026660} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6658421820338346345 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6057753954863221585} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: 0.017, y: -0.0006, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2494444184688870355} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5435711523544228112 +--- !u!65 &5059103906548731348 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6057753954863221585} + m_GameObject: {fileID: 4030843815406566901} 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!114 &9114072952435026660 +--- !u!114 &8879188483623717831 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6057753954863221585} + m_GameObject: {fileID: 4030843815406566901} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3014,7 +2066,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 2 + portPosition: 16 deviceId: deviceName: portModel: @@ -3027,7 +2079,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6104375663927053601 +--- !u!1 &4696217829021354392 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3035,46 +2087,125 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 588284148910806061} - - component: {fileID: 3383665736813682625} - - component: {fileID: 821328649985719839} - m_Layer: 8 - m_Name: Box067 + - component: {fileID: 8428692704609722988} + - component: {fileID: 3474066110229050223} + - component: {fileID: 4287324705218401563} + m_Layer: 11 + m_Name: Cube (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &588284148910806061 +--- !u!4 &8428692704609722988 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6104375663927053601} - m_LocalRotation: {x: 0.000000089211305, y: 0.000000089211305, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.10770582, y: 0.38048548, z: -0.15037024} - m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_GameObject: {fileID: 4696217829021354392} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: 0.03110005, y: 0.0029999723, z: 0.25649998} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 8 + m_Father: {fileID: 3409569182399693976} + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3383665736813682625 +--- !u!65 &3474066110229050223 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4696217829021354392} + 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!114 &4287324705218401563 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4696217829021354392} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5256233449775878648 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2203787294724035515} + - component: {fileID: 7503681425975496122} + - component: {fileID: 3903967559650063723} + m_Layer: 8 + m_Name: Box075 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2203787294724035515 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5256233449775878648} + m_LocalRotation: {x: 0.50000006, y: -0.49999994, z: 0.50000006, w: 0.49999994} + m_LocalPosition: {x: 0.094109714, y: -0.009732783, z: 0.38048548} + m_LocalScale: {x: 1.5098637, y: 1.039147, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7503681425975496122 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6104375663927053601} - m_Mesh: {fileID: -7516479528189023691, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &821328649985719839 + m_GameObject: {fileID: 5256233449775878648} + m_Mesh: {fileID: -293825477841229588, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &3903967559650063723 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6104375663927053601} + m_GameObject: {fileID: 5256233449775878648} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -3088,13 +2219,13 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -3116,7 +2247,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &6590131802049051462 +--- !u!1 &5278437848226941993 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3124,255 +2255,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8443943799233927710} - - component: {fileID: 3747909153928268694} - - component: {fileID: 6558141469499689228} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8443943799233927710 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6590131802049051462} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.1294, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 771442881091986432} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3747909153928268694 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6590131802049051462} - 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!114 &6558141469499689228 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6590131802049051462} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 14 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6643111439300805228 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2999535602511611009} - - component: {fileID: 3715668812653599521} - - component: {fileID: 3296425083855045098} - m_Layer: 8 - m_Name: Box069 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2999535602511611009 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6643111439300805228} - m_LocalRotation: {x: 0.000000089211305, y: 0.000000089211305, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.07885428, y: 0.38048548, z: -0.15037024} - m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3715668812653599521 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6643111439300805228} - m_Mesh: {fileID: 3304094240565004552, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &3296425083855045098 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6643111439300805228} - 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: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 8439447713746551403, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - 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!1 &7033817336701121377 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3283012511727039447} - - component: {fileID: 8173075906108592149} - - component: {fileID: 5299209590047948057} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3283012511727039447 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7033817336701121377} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: -0.1037, y: -0.0006, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2494444184688870355} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8173075906108592149 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7033817336701121377} - 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!114 &5299209590047948057 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7033817336701121377} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7198630588858066107 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2316397465278657919} - - component: {fileID: 8998158454599092478} - - component: {fileID: 5484275625289727403} + - component: {fileID: 6936090943688286416} + - component: {fileID: 1435960905873318533} + - component: {fileID: 1642954110515744422} m_Layer: 11 m_Name: Cube (1) m_TagString: Untagged @@ -3380,41 +2265,42 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2316397465278657919 +--- !u!4 &6936090943688286416 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7198630588858066107} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: 0.0355, y: -0.0006, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} + m_GameObject: {fileID: 5278437848226941993} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: 0.1138, y: -0.0007999314, z: 0.25649995} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2494444184688870355} + m_Father: {fileID: 8741004418583755153} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8998158454599092478 +--- !u!65 &1435960905873318533 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7198630588858066107} + m_GameObject: {fileID: 5278437848226941993} 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!114 &5484275625289727403 +--- !u!114 &1642954110515744422 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7198630588858066107} + m_GameObject: {fileID: 5278437848226941993} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3440,7 +2326,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7250300522405102402 +--- !u!1 &5498852636674835381 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3448,165 +2334,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6040996277402563357} - - component: {fileID: 3986288072775243850} - - component: {fileID: 530303493933644710} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6040996277402563357 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7250300522405102402} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0586, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 771442881091986432} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3986288072775243850 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7250300522405102402} - 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!114 &530303493933644710 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7250300522405102402} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7498760031893183445 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1569101110863866732} - - component: {fileID: 5727990330513386379} - - component: {fileID: 1813289625990879675} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1569101110863866732 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7498760031893183445} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: -0.0471, y: -0.0006, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2494444184688870355} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5727990330513386379 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7498760031893183445} - 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!114 &1813289625990879675 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7498760031893183445} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7613994306231673645 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2302451799919613023} - - component: {fileID: 2873775472729179897} - - component: {fileID: 6365478940442144759} + - component: {fileID: 4185671009826419911} + - component: {fileID: 145308969163859553} + - component: {fileID: 9057644242762518383} m_Layer: 8 m_Name: Box080 m_TagString: Untagged @@ -3614,36 +2344,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2302451799919613023 +--- !u!4 &4185671009826419911 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7613994306231673645} - m_LocalRotation: {x: 0.000000089211305, y: 0.000000089211305, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2962153, y: 0.38048548, z: -0.15037024} - m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_GameObject: {fileID: 5498852636674835381} + m_LocalRotation: {x: 0.50000006, y: -0.49999994, z: 0.50000006, w: 0.49999994} + m_LocalPosition: {x: 0.29607016, y: -0.009732753, z: 0.38048548} + m_LocalScale: {x: 1.5098637, y: 1.039147, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2704925741127955914} + m_Father: {fileID: 1711871819808010200} m_RootOrder: 21 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2873775472729179897 +--- !u!33 &145308969163859553 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7613994306231673645} + m_GameObject: {fileID: 5498852636674835381} m_Mesh: {fileID: 928670381974441746, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &6365478940442144759 +--- !u!23 &9057644242762518383 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7613994306231673645} + m_GameObject: {fileID: 5498852636674835381} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -3657,13 +2387,13 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -3685,7 +2415,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &7745665784544239263 +--- !u!1 &5664314281371926023 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3693,66 +2423,66 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 771442881091986432} - - component: {fileID: 8650570236787633923} - - component: {fileID: 4113955743304551733} - - component: {fileID: 4101276959471778159} - - component: {fileID: 2440456616519088226} - - component: {fileID: 364646246933055504} - - component: {fileID: 8715243470639717352} - m_Layer: 8 + - component: {fileID: 3409569182399693976} + - component: {fileID: 6767065130270936987} + - component: {fileID: 2085794304540339629} + - component: {fileID: 5274366460808094682} + - component: {fileID: 1458158285939353047} + - component: {fileID: 1755846816416864258} + - component: {fileID: 1951742151769779725} + m_Layer: 13 m_Name: Box071 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &771442881091986432 +--- !u!4 &3409569182399693976 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7745665784544239263} - m_LocalRotation: {x: 0.000000089211305, y: 0.000000089211305, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.021151282, y: 0.38048548, z: -0.15037027} - m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_GameObject: {fileID: 5664314281371926023} + m_LocalRotation: {x: 0.50000006, y: -0.49999994, z: 0.50000006, w: 0.49999994} + m_LocalPosition: {x: -0.021296427, y: -0.009732753, z: 0.38048548} + m_LocalScale: {x: 1.5098637, y: 1.039147, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 5877275370897493670} - - {fileID: 4147242229324892090} - - {fileID: 7042412044709670516} - - {fileID: 3050612801852182801} - - {fileID: 1501358426804664953} - - {fileID: 6080503375738210527} - - {fileID: 5108631633955446604} - - {fileID: 8490063397973143223} - - {fileID: 5747793585008951527} - - {fileID: 6634133778828277696} - - {fileID: 6040996277402563357} - - {fileID: 1998595244512771430} - - {fileID: 5064352506131314550} - - {fileID: 8443943799233927710} - - {fileID: 295318367844471150} - - {fileID: 5535854382025100190} - m_Father: {fileID: 2704925741127955914} + - {fileID: 8724257781568259987} + - {fileID: 2320570091537197072} + - {fileID: 6001486535790440763} + - {fileID: 8027388219716061827} + - {fileID: 8395817578637801114} + - {fileID: 5339638069407911918} + - {fileID: 8428692704609722988} + - {fileID: 155016263042401130} + - {fileID: 2352083992720136504} + - {fileID: 3856838021691070148} + - {fileID: 2154806257771298318} + - {fileID: 6937610765241144619} + - {fileID: 7069368002379161085} + - {fileID: 3291725412394710590} + - {fileID: 8591796556320202874} + - {fileID: 2977369308294391236} + m_Father: {fileID: 1711871819808010200} m_RootOrder: 12 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8650570236787633923 +--- !u!33 &6767065130270936987 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7745665784544239263} + m_GameObject: {fileID: 5664314281371926023} m_Mesh: {fileID: -5087548570314954540, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &4113955743304551733 +--- !u!23 &2085794304540339629 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7745665784544239263} + m_GameObject: {fileID: 5664314281371926023} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -3766,14 +2496,14 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 2124384961119642304, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 5c3ed94971591b3439c528cee49bee3e, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -3795,13 +2525,13 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &4101276959471778159 +--- !u!114 &5274366460808094682 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7745665784544239263} + m_GameObject: {fileID: 5664314281371926023} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -3853,26 +2583,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &2440456616519088226 +--- !u!114 &1458158285939353047 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7745665784544239263} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &364646246933055504 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7745665784544239263} + m_GameObject: {fileID: 5664314281371926023} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -3882,15 +2599,28 @@ MonoBehaviour: My_magnifyState: 0 empty: [] TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &8715243470639717352 +--- !u!114 &1755846816416864258 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5664314281371926023} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!64 &1951742151769779725 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7745665784544239263} + m_GameObject: {fileID: 5664314281371926023} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -3898,7 +2628,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -5087548570314954540, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!1 &7860024161221652832 +--- !u!1 &5720975561744408305 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3906,599 +2636,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4283172781475754787} - - component: {fileID: 5604695299064278306} - - component: {fileID: 1425428737484609011} - m_Layer: 8 - m_Name: Box075 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4283172781475754787 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7860024161221652832} - m_LocalRotation: {x: 0.000000089211305, y: 0.000000089211305, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.09425484, y: 0.38048548, z: -0.15037024} - m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5604695299064278306 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7860024161221652832} - m_Mesh: {fileID: -293825477841229588, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &1425428737484609011 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7860024161221652832} - 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: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - 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!1 &7892454322395042980 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1998595244512771430} - - component: {fileID: 7420203954985565471} - - component: {fileID: 5326726938435683674} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1998595244512771430 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7892454322395042980} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0746, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 771442881091986432} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7420203954985565471 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7892454322395042980} - 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!114 &5326726938435683674 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7892454322395042980} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8512005461021967685 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6634133778828277696} - - component: {fileID: 7437723689874580840} - - component: {fileID: 8209291188489908465} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6634133778828277696 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8512005461021967685} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.042, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 771442881091986432} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7437723689874580840 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8512005461021967685} - 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!114 &8209291188489908465 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8512005461021967685} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8678907343962019068 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5384045496338414787} - - component: {fileID: 7524312202764479643} - - component: {fileID: 4590816599129704949} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5384045496338414787 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8678907343962019068} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: -0.0655, y: -0.0006, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2494444184688870355} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7524312202764479643 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8678907343962019068} - 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!114 &4590816599129704949 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8678907343962019068} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8758189905987093997 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6061484385126807712} - - component: {fileID: 9073136403897749191} - - component: {fileID: 6490683197010677444} - m_Layer: 8 - m_Name: Box078 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6061484385126807712 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8758189905987093997} - m_LocalRotation: {x: 0.000000089211305, y: 0.000000089211305, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.23851234, y: 0.38048548, z: -0.15037024} - m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 19 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &9073136403897749191 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8758189905987093997} - m_Mesh: {fileID: 1720402882065375157, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &6490683197010677444 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8758189905987093997} - 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: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - 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!1 &8905312128342189077 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7566782902018085742} - - component: {fileID: 6794481585842280710} - - component: {fileID: 494773002956230171} - m_Layer: 8 - m_Name: Box066 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7566782902018085742 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8905312128342189077} - m_LocalRotation: {x: 0.000000089211305, y: 0.000000089211305, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.1365573, y: 0.38048548, z: -0.15037027} - m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6794481585842280710 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8905312128342189077} - m_Mesh: {fileID: 5644322950614084737, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &494773002956230171 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8905312128342189077} - 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: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - 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!1 &9003404015718848479 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760551773049876661} - - component: {fileID: 7905992092750509970} - - component: {fileID: 4278181149175418858} - m_Layer: 8 - m_Name: Box081 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5760551773049876661 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9003404015718848479} - m_LocalRotation: {x: 0.000000089211305, y: 0.000000089211305, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2673638, y: 0.38048548, z: -0.15037024} - m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 22 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7905992092750509970 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9003404015718848479} - m_Mesh: {fileID: 1491061044228583767, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &4278181149175418858 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9003404015718848479} - 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: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - 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!1 &9038769701416878477 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5776025225180148296} - - component: {fileID: 7158941997492936420} - - component: {fileID: 249413667688511648} + - component: {fileID: 8027388219716061827} + - component: {fileID: 7367612957164523027} + - component: {fileID: 6157337846485850842} m_Layer: 11 m_Name: Cube (3) m_TagString: Untagged @@ -4506,119 +2646,42 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5776025225180148296 +--- !u!4 &8027388219716061827 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9038769701416878477} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: -0.0016, y: -0.0006, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} + m_GameObject: {fileID: 5720975561744408305} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: 0.10400003, y: 0.003000001, z: 0.25649995} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2494444184688870355} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7158941997492936420 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9038769701416878477} - 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!114 &249413667688511648 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9038769701416878477} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9108146696010072906 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1346047617408124117} - - component: {fileID: 2170236318146217897} - - component: {fileID: 6192887332158210084} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1346047617408124117 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9108146696010072906} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: -0.0213, y: -0.0006, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2494444184688870355} + m_Father: {fileID: 3409569182399693976} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2170236318146217897 +--- !u!65 &7367612957164523027 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9108146696010072906} + m_GameObject: {fileID: 5720975561744408305} 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!114 &6192887332158210084 +--- !u!114 &6157337846485850842 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9108146696010072906} + m_GameObject: {fileID: 5720975561744408305} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4644,7 +2707,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &9119297508020311124 +--- !u!1 &6372904545453548709 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4652,46 +2715,125 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3117155372314712884} - - component: {fileID: 2658490891801128841} - - component: {fileID: 8674380337579491469} - m_Layer: 8 - m_Name: Box072 + - component: {fileID: 7069368002379161085} + - component: {fileID: 7540290622379287011} + - component: {fileID: 5406397191316480113} + m_Layer: 11 + m_Name: Cube (12) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3117155372314712884 +--- !u!4 &7069368002379161085 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9119297508020311124} - m_LocalRotation: {x: 0.000000089211305, y: 0.000000089211305, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.06540331, y: 0.38048548, z: -0.15037024} - m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_GameObject: {fileID: 6372904545453548709} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: -0.113199934, y: 0.003000001, z: 0.2565} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2704925741127955914} - m_RootOrder: 13 + m_Father: {fileID: 3409569182399693976} + m_RootOrder: 12 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2658490891801128841 +--- !u!65 &7540290622379287011 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6372904545453548709} + 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!114 &5406397191316480113 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6372904545453548709} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 13 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6419611260728325959 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7643762491261063213} + - component: {fileID: 5211289044318721802} + - component: {fileID: 2214268239698980722} + m_Layer: 8 + m_Name: Box081 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7643762491261063213 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6419611260728325959} + m_LocalRotation: {x: 0.50000006, y: -0.49999994, z: 0.50000006, w: 0.49999994} + m_LocalPosition: {x: 0.26721865, y: -0.009732753, z: 0.38048548} + m_LocalScale: {x: 1.5098637, y: 1.039147, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 22 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5211289044318721802 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9119297508020311124} - m_Mesh: {fileID: -8319805796033406473, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &8674380337579491469 + m_GameObject: {fileID: 6419611260728325959} + m_Mesh: {fileID: 1491061044228583767, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &2214268239698980722 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9119297508020311124} + m_GameObject: {fileID: 6419611260728325959} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -4705,13 +2847,13 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 3274929075364713951, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7155606534557221918, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1196480866727828669, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 1164559979738526386, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -1152147162816932204, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: -5309146791756261813, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} - - {fileID: 7268256556612975261, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -4733,3 +2875,1955 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &6576401123955222585 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 953894815423391938} + - component: {fileID: 2438129331650173142} + - component: {fileID: 8357756685228073513} + m_Layer: 11 + m_Name: Cube (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &953894815423391938 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6576401123955222585} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: -0.06549993, y: -0.0006000059, z: 0.2565} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 539171815329309515} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2438129331650173142 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6576401123955222585} + 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!114 &8357756685228073513 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6576401123955222585} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6587586383023944908 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1056043975006534572} + - component: {fileID: 72432856698883857} + - component: {fileID: 6738538260961648661} + m_Layer: 8 + m_Name: Box072 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1056043975006534572 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6587586383023944908} + m_LocalRotation: {x: 0.50000006, y: -0.49999994, z: 0.50000006, w: 0.49999994} + m_LocalPosition: {x: 0.065258175, y: -0.009732783, z: 0.38048548} + m_LocalScale: {x: 1.5098637, y: 1.039147, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &72432856698883857 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6587586383023944908} + m_Mesh: {fileID: -8319805796033406473, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &6738538260961648661 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6587586383023944908} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &6660500029086999925 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8213221856111433784} + - component: {fileID: 6345518347744833119} + - component: {fileID: 9220565908607168092} + m_Layer: 8 + m_Name: Box078 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8213221856111433784 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6660500029086999925} + m_LocalRotation: {x: 0.50000006, y: -0.49999994, z: 0.50000006, w: 0.49999994} + m_LocalPosition: {x: 0.23836723, y: -0.009732753, z: 0.3804855} + m_LocalScale: {x: 1.5098637, y: 1.039147, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6345518347744833119 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6660500029086999925} + m_Mesh: {fileID: 1720402882065375157, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &9220565908607168092 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6660500029086999925} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &6805933129117729933 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5541418588356342774} + - component: {fileID: 8912438039263820190} + - component: {fileID: 2537856736205254275} + m_Layer: 8 + m_Name: Box066 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5541418588356342774 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6805933129117729933} + m_LocalRotation: {x: 0.50000006, y: -0.49999994, z: 0.50000006, w: 0.49999994} + m_LocalPosition: {x: -0.13670245, y: -0.009732783, z: 0.38048548} + m_LocalScale: {x: 1.5098637, y: 1.039147, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8912438039263820190 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6805933129117729933} + m_Mesh: {fileID: 5644322950614084737, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &2537856736205254275 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6805933129117729933} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &6880772681275176385 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5739826069654390921} + - component: {fileID: 8529225640290395888} + - component: {fileID: 4779859647108739909} + m_Layer: 11 + m_Name: Cube (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5739826069654390921 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6880772681275176385} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: -0.021299964, y: -0.0006000059, z: 0.2565} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 539171815329309515} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8529225640290395888 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6880772681275176385} + 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!114 &4779859647108739909 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6880772681275176385} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6978302132425570338 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8635998485755481931} + - component: {fileID: 6272036478526644121} + - component: {fileID: 7957456568826110983} + m_Layer: 11 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8635998485755481931 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6978302132425570338} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: 0.051200036, y: -0.0007999601, z: 0.25649998} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8741004418583755153} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6272036478526644121 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6978302132425570338} + 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!114 &7957456568826110983 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6978302132425570338} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7195908940242018480 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8395817578637801114} + - component: {fileID: 6805229654074873934} + - component: {fileID: 8719684290514909301} + m_Layer: 11 + m_Name: Cube (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8395817578637801114 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7195908940242018480} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: 0.06390001, y: 0.0029999723, z: 0.25649998} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3409569182399693976} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6805229654074873934 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7195908940242018480} + 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!114 &8719684290514909301 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7195908940242018480} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7212280675355652872 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 737415833651055981} + - component: {fileID: 7896805903474543912} + - component: {fileID: 306219971708019454} + m_Layer: 11 + m_Name: Cube (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &737415833651055981 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7212280675355652872} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: -0.10369993, y: -0.00059997727, z: 0.2565} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 539171815329309515} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7896805903474543912 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7212280675355652872} + 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!114 &306219971708019454 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7212280675355652872} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7219404756502561557 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2154806257771298318} + - component: {fileID: 1566049062014534042} + - component: {fileID: 4373826001746425157} + m_Layer: 11 + m_Name: Cube (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2154806257771298318 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7219404756502561557} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: -0.05859993, y: 0.0029999723, z: 0.25649998} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3409569182399693976} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1566049062014534042 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7219404756502561557} + 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!114 &4373826001746425157 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7219404756502561557} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7401953500381579548 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 593998506763568002} + - component: {fileID: 4604566366854481078} + - component: {fileID: 1504996264859109038} + m_Layer: 8 + m_Name: Box063 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &593998506763568002 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7401953500381579548} + m_LocalRotation: {x: 0.50000006, y: -0.49999994, z: 0.50000006, w: 0.49999994} + m_LocalPosition: {x: -0.25125146, y: -0.0036379397, z: 0.38048548} + m_LocalScale: {x: 1.5098637, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4604566366854481078 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7401953500381579548} + m_Mesh: {fileID: -2160783174947531112, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &1504996264859109038 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7401953500381579548} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &7635240851217610799 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8741004418583755153} + - component: {fileID: 8070534184813209975} + - component: {fileID: 6907301106170665046} + - component: {fileID: 8995862256138671222} + - component: {fileID: 2270444320572759047} + - component: {fileID: 5464013726781874272} + - component: {fileID: 9139433116457490630} + m_Layer: 13 + m_Name: Box064 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8741004418583755153 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7635240851217610799} + m_LocalRotation: {x: 0.50000006, y: -0.49999994, z: 0.50000006, w: 0.49999994} + m_LocalPosition: {x: -0.19619288, y: -0.009732813, z: 0.38048548} + m_LocalScale: {x: 1.5098637, y: 1.039147, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6936090943688286416} + - {fileID: 1670207794774807390} + - {fileID: 8635998485755481931} + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8070534184813209975 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7635240851217610799} + m_Mesh: {fileID: 7413444807456324831, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &6907301106170665046 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7635240851217610799} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 35f71a8beb8dfe542b319806847da3bd, type: 2} + - {fileID: 2100000, guid: 8ff1d5a2c52311e4696cd22735732a66, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: d3469d2b2aeaf7441b7b8f89a0def34f, type: 2} + - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, 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!114 &8995862256138671222 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7635240851217610799} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} + m_Name: + m_EditorClassIdentifier: + deviceList: + id: + deviceName: + deviceCode: + type: 2 + typeStr: + deviceType: 3 + deviceTypeStr: + rackId: + shelfId: + slotId: + devicePosition: 3 + machineModel: + status: + conDeviceName: + rackType: + openFlag: + backDoorFlag: + modelNum: + occupyNum: + residueNum: + operationTime: + directorName: + phone: + manufacturer: + powerProperties: + maintenanceUnit: + machineFrameHigh: + machineFrameWide: + machineFrameThick: + slotNum: + slotSort: + installMethod: + affiliationFrame: + parentSlotName: + slotType: + occupyStatus: + affiliationSlot: + portNum: + cardFunction: + cardType: + runStatus: + tmsId: + remark: + createTime: + createName: +--- !u!114 &2270444320572759047 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7635240851217610799} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!114 &5464013726781874272 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7635240851217610799} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!64 &9139433116457490630 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7635240851217610799} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 7413444807456324831, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!1 &7672256013018623032 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2530195974644042137} + - component: {fileID: 1108278887428746477} + - component: {fileID: 4904534581203773850} + m_Layer: 8 + m_Name: Box074 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2530195974644042137 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7672256013018623032} + m_LocalRotation: {x: 0.50000006, y: -0.49999994, z: 0.50000006, w: 0.49999994} + m_LocalPosition: {x: 0.12296122, y: -0.009732783, z: 0.38048548} + m_LocalScale: {x: 1.5098637, y: 1.039147, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1108278887428746477 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7672256013018623032} + m_Mesh: {fileID: 3181945431582109686, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &4904534581203773850 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7672256013018623032} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &7774063173015739746 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6001486535790440763} + - component: {fileID: 8155699074470554066} + - component: {fileID: 7717840753613156087} + m_Layer: 11 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6001486535790440763 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7774063173015739746} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: 0.12, y: 0.003000001, z: 0.25649995} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3409569182399693976} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8155699074470554066 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7774063173015739746} + 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!114 &7717840753613156087 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7774063173015739746} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7798960048149750763 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4754620562977328717} + - component: {fileID: 3873714822915357939} + - component: {fileID: 1305227067811759986} + m_Layer: 11 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4754620562977328717 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7798960048149750763} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: 0.03550002, y: -0.0005999486, z: 0.2565} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 539171815329309515} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3873714822915357939 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7798960048149750763} + 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!114 &1305227067811759986 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7798960048149750763} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8165755647000391097 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3301014818166813877} + - component: {fileID: 797343991220731737} + - component: {fileID: 3350814616351383175} + m_Layer: 8 + m_Name: Box067 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3301014818166813877 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8165755647000391097} + m_LocalRotation: {x: 0.50000006, y: -0.49999994, z: 0.50000006, w: 0.49999994} + m_LocalPosition: {x: -0.10785097, y: -0.009732783, z: 0.38048548} + m_LocalScale: {x: 1.5098637, y: 1.039147, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &797343991220731737 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8165755647000391097} + m_Mesh: {fileID: -7516479528189023691, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &3350814616351383175 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8165755647000391097} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &8384502418187893146 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4922771419809952745} + - component: {fileID: 1522647020561288882} + - component: {fileID: 1717017619828917125} + m_Layer: 11 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4922771419809952745 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8384502418187893146} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: 0.017000068, y: -0.0006000059, z: 0.2565} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 539171815329309515} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1522647020561288882 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8384502418187893146} + 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!114 &1717017619828917125 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8384502418187893146} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8388994602455011174 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1670207794774807390} + - component: {fileID: 5582044046159395467} + - component: {fileID: 5915449557993202167} + m_Layer: 11 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1670207794774807390 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8388994602455011174} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: 0.08270003, y: -0.0007999601, z: 0.25649998} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8741004418583755153} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &5582044046159395467 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8388994602455011174} + 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!114 &5915449557993202167 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8388994602455011174} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8548239255993747702 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1058112491347868667} + - component: {fileID: 9019561960136081942} + - component: {fileID: 5079252893783499316} + m_Layer: 8 + m_Name: Box076 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1058112491347868667 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8548239255993747702} + m_LocalRotation: {x: 0.50000006, y: -0.49999994, z: 0.50000006, w: 0.49999994} + m_LocalPosition: {x: 0.18066418, y: -0.009732783, z: 0.38048548} + m_LocalScale: {x: 1.5098637, y: 1.039147, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &9019561960136081942 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8548239255993747702} + m_Mesh: {fileID: 7638646759786298271, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &5079252893783499316 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8548239255993747702} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, 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!1 &8555680498280122871 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7049121050558710889} + - component: {fileID: 1410297076947473906} + - component: {fileID: 2414410980128773808} + m_Layer: 8 + m_Name: Box070 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7049121050558710889 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8555680498280122871} + m_LocalRotation: {x: 0.50000006, y: -0.49999994, z: 0.50000006, w: 0.49999994} + m_LocalPosition: {x: 0.021386698, y: -0.009732783, z: 0.38048548} + m_LocalScale: {x: 1.5098637, y: 1.039147, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1410297076947473906 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8555680498280122871} + m_Mesh: {fileID: 1702923399578278298, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &2414410980128773808 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8555680498280122871} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &8778813671366959860 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 884380706600903705} + - component: {fileID: 1618264738197109689} + - component: {fileID: 602021150086553970} + m_Layer: 8 + m_Name: Box069 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &884380706600903705 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8778813671366959860} + m_LocalRotation: {x: 0.50000006, y: -0.49999994, z: 0.50000006, w: 0.49999994} + m_LocalPosition: {x: -0.07899942, y: -0.009732783, z: 0.38048548} + m_LocalScale: {x: 1.5098637, y: 1.039147, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1711871819808010200} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1618264738197109689 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8778813671366959860} + m_Mesh: {fileID: 3304094240565004552, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &602021150086553970 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8778813671366959860} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 8ff1d5a2c52311e4696cd22735732a66, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &8794469979758767472 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3856838021691070148} + - component: {fileID: 1465066317487995354} + - component: {fileID: 3939877717329517071} + m_Layer: 11 + m_Name: Cube (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3856838021691070148 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8794469979758767472} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: -0.041999962, y: 0.0029999723, z: 0.25649998} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3409569182399693976} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1465066317487995354 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8794469979758767472} + 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!114 &3939877717329517071 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8794469979758767472} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 10 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &9173590384310355131 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6937610765241144619} + - component: {fileID: 7082037520266187956} + - component: {fileID: 7181083208094868210} + m_Layer: 11 + m_Name: Cube (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6937610765241144619 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9173590384310355131} + m_LocalRotation: {x: -0.00000007450581, y: 0.000000029802326, z: 0.000000014901163, + w: 1} + m_LocalPosition: {x: -0.07459994, y: 0.0029999723, z: 0.25649998} + m_LocalScale: {x: 0.014458262, y: 0.009228725, z: 0.009230002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3409569182399693976} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7082037520266187956 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9173590384310355131} + 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!114 &7181083208094868210 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9173590384310355131} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/12.prefab.meta b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/36-old.prefab.meta similarity index 74% rename from GQ_URP/GQ/Assets/prefab/老模型/12.prefab.meta rename to GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/36-old.prefab.meta index 916c009ff..2e382e523 100644 --- a/GQ_URP/GQ/Assets/prefab/老模型/12.prefab.meta +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/36-old.prefab.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 98253eb598e3e6b41af909c9941f8cf9 +guid: 1ca8a36aa4ba1fd4c9de7297cd6e3944 PrefabImporter: externalObjects: {} userData: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/36.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/36.prefab index d298a0dd2..5fe18ad95 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/36.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/36.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &21824240141176251 +--- !u!1 &37331139365543466 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,51 +8,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3833469319475110290} - - component: {fileID: 8874932747898024221} - - component: {fileID: 801200757855525589} + - component: {fileID: 7123633968956834062} + - component: {fileID: 51486475452036191} + - component: {fileID: 4290768189128844513} m_Layer: 11 - m_Name: Cube (14) + m_Name: Cube (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3833469319475110290 +--- !u!4 &7123633968956834062 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 21824240141176251} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.146, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} + m_GameObject: {fileID: 37331139365543466} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.0031173378, y: -0.25649998, z: 0.0643} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 4296048400275952892} - m_RootOrder: 14 + m_Father: {fileID: 6610210691644107195} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8874932747898024221 +--- !u!65 &51486475452036191 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 21824240141176251} + m_GameObject: {fileID: 37331139365543466} 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!114 &801200757855525589 +--- !u!114 &4290768189128844513 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 21824240141176251} + m_GameObject: {fileID: 37331139365543466} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -65,7 +65,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 15 + portPosition: 5 deviceId: deviceName: portModel: @@ -78,7 +78,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &80734050845482704 +--- !u!1 &159136182034410464 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -86,695 +86,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8597921373278759610} - - component: {fileID: 427118026308177953} - - component: {fileID: 1585296766110393569} - m_Layer: 8 - m_Name: Box061 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8597921373278759610 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 80734050845482704} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.70710677} - m_LocalPosition: {x: -0.2512515, y: 0.38141468, z: 0.009732723} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &427118026308177953 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 80734050845482704} - m_Mesh: {fileID: -2893039221907779070, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &1585296766110393569 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 80734050845482704} - 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} - - {fileID: 2100000, guid: dc5f0f285be51334abb02b539c88f62a, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: d3469d2b2aeaf7441b7b8f89a0def34f, 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!1 &85404591433134261 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5805625927466655368} - - component: {fileID: 131154133008530094} - - component: {fileID: 1941963292367573518} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5805625927466655368 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 85404591433134261} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.12, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4296048400275952892} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &131154133008530094 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 85404591433134261} - 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!114 &1941963292367573518 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 85404591433134261} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &133524809052499525 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6210118955132959890} - - component: {fileID: 8518338367294224303} - - component: {fileID: 1841571643990300857} - - component: {fileID: 7138656772579567016} - - component: {fileID: 1349608950887067334} - - component: {fileID: 6405806620767954559} - - component: {fileID: 7419679693194155224} - - component: {fileID: 6624745544713997349} - - component: {fileID: 7049128974953194242} - m_Layer: 8 - m_Name: 36 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6210118955132959890 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 133524809052499525} - m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} - m_LocalPosition: {x: -0.1601031, y: 0, z: -0.00014512241} - m_LocalScale: {x: 1, y: 1.5098631, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 7298572035985330273} - - {fileID: 8597921373278759610} - - {fileID: 3672032169769255486} - - {fileID: 2085683568907490278} - - {fileID: 7890818290687486453} - - {fileID: 1419792431456711471} - - {fileID: 6352479564431696786} - - {fileID: 4107308310887851217} - - {fileID: 106696469865610864} - - {fileID: 1768344311532827773} - - {fileID: 8438648827226821645} - - {fileID: 4296048400275952892} - - {fileID: 1902852477194890184} - - {fileID: 8872831087707635128} - - {fileID: 4022444045796170237} - - {fileID: 746177549625934815} - - {fileID: 1900716873463999391} - - {fileID: 4294010179945756196} - - {fileID: 7292631380971210844} - - {fileID: 1211808270388176417} - - {fileID: 3375982017899553955} - - {fileID: 9141041867298357321} - - {fileID: 8628475204112703367} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!33 &8518338367294224303 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 133524809052499525} - m_Mesh: {fileID: 347013164166513179, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &1841571643990300857 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 133524809052499525} - 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: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, 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!114 &7138656772579567016 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 133524809052499525} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 36 - occupyNum: 16 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &1349608950887067334 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 133524809052499525} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 16 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &6405806620767954559 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 133524809052499525} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &7419679693194155224 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 133524809052499525} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &6624745544713997349 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 133524809052499525} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 16 - selfIcon: {fileID: 21300000, guid: 62e7f5ae089601a40b92e316beb2bae9, type: 3} ---- !u!64 &7049128974953194242 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 133524809052499525} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 347013164166513179, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!1 &169468104586440883 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4294010179945756196} - - component: {fileID: 7261946964795041862} - - component: {fileID: 2536106879943115710} - m_Layer: 8 - m_Name: Box077 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4294010179945756196 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 169468104586440883} - m_LocalRotation: {x: 0.0000000010017445, y: 0.00000011920929, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.15181275, y: 0.25199997, z: 0.009732783} - m_LocalScale: {x: 1, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7261946964795041862 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 169468104586440883} - m_Mesh: {fileID: -1405206685389513613, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &2536106879943115710 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 169468104586440883} - 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &584920601918066948 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3698751103629259602} - - component: {fileID: 2204375285788108831} - - component: {fileID: 1398131968595950044} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3698751103629259602 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 584920601918066948} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: 0.1138, y: -0.0008, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7890818290687486453} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2204375285788108831 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 584920601918066948} - 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!114 &1398131968595950044 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 584920601918066948} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1386792637295564991 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1211808270388176417} - - component: {fileID: 8165529512807390809} - - component: {fileID: 5295176316782918880} - m_Layer: 8 - m_Name: Box079 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1211808270388176417 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1386792637295564991} - m_LocalRotation: {x: 0.0000000010017445, y: 0.00000011920929, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.20951572, y: 0.25199997, z: 0.009732783} - m_LocalScale: {x: 1, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 19 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8165529512807390809 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1386792637295564991} - m_Mesh: {fileID: -2458614987055752723, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &5295176316782918880 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1386792637295564991} - 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &1536935122982290783 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9146342156008615963} - - component: {fileID: 8252637117656329768} - - component: {fileID: 2330728371720213843} + - component: {fileID: 4115291348231788926} + - component: {fileID: 5109765249171486461} + - component: {fileID: 4097132287297473943} m_Layer: 11 m_Name: Cube (8) m_TagString: Untagged @@ -782,41 +96,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &9146342156008615963 +--- !u!4 &4115291348231788926 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1536935122982290783} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0258, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} + m_GameObject: {fileID: 159136182034410464} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.0031173378, y: -0.25649998, z: -0.0243} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 4296048400275952892} + m_Father: {fileID: 6610210691644107195} m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8252637117656329768 +--- !u!65 &5109765249171486461 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1536935122982290783} + m_GameObject: {fileID: 159136182034410464} 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!114 &2330728371720213843 +--- !u!114 &4097132287297473943 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1536935122982290783} + m_GameObject: {fileID: 159136182034410464} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -842,7 +156,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2532343063785616996 +--- !u!1 &165618136248002005 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -850,2522 +164,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 106696469865610864} - - component: {fileID: 2885662951663025590} - - component: {fileID: 847775806370500679} - m_Layer: 8 - m_Name: Box068 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &106696469865610864 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2532343063785616996} - m_LocalRotation: {x: 0.0000000010017445, y: 0.00000011920929, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.05014793, y: 0.25199997, z: 0.009732787} - m_LocalScale: {x: 1, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2885662951663025590 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2532343063785616996} - m_Mesh: {fileID: -8084387392185104470, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &847775806370500679 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2532343063785616996} - 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: 8ff1d5a2c52311e4696cd22735732a66, type: 2} - - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &2635759350105867909 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7298572035985330273} - - component: {fileID: 6501034757888115907} - - component: {fileID: 141231304380139657} - m_Layer: 8 - m_Name: Box060 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7298572035985330273 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2635759350105867909} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.70710677} - m_LocalPosition: {x: -0.30091354, y: 0.25199997, z: 0.00363791} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6501034757888115907 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2635759350105867909} - m_Mesh: {fileID: -4248355281360383206, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &141231304380139657 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2635759350105867909} - 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &2688274918701690739 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1419792431456711471} - - component: {fileID: 8104741075372550608} - - component: {fileID: 1967942631713973390} - - component: {fileID: 997349973670762405} - - component: {fileID: 7674732864037021908} - - component: {fileID: 7050023116303055361} - - component: {fileID: 4451785869962304531} - m_Layer: 8 - m_Name: Box065 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1419792431456711471 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2688274918701690739} - m_LocalRotation: {x: 0.0000000010017445, y: 0.00000011920929, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.16617103, y: 0.25199997, z: 0.009732783} - m_LocalScale: {x: 1, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1229317000365606275} - - {fileID: 7876058158946494869} - - {fileID: 6990297053547348660} - - {fileID: 2559180768693187625} - - {fileID: 2660650262470761360} - - {fileID: 8907538072864967743} - - {fileID: 2982442503807895751} - - {fileID: 2064209972439253803} - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8104741075372550608 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2688274918701690739} - m_Mesh: {fileID: 7404775158862943375, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &1967942631713973390 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2688274918701690739} - 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} - - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, type: 2} - - {fileID: 2100000, guid: d5a3c62a9a3aa334f90fb5ff44d48d36, type: 2} - - {fileID: 2100000, guid: d3469d2b2aeaf7441b7b8f89a0def34f, 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!114 &997349973670762405 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2688274918701690739} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7674732864037021908 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2688274918701690739} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &7050023116303055361 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2688274918701690739} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &4451785869962304531 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2688274918701690739} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 7404775158862943375, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!1 &2706897981305784111 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8602481879644915594} - - component: {fileID: 8735458906526278953} - - component: {fileID: 8108755518872558325} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8602481879644915594 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2706897981305784111} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.1132, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4296048400275952892} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8735458906526278953 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2706897981305784111} - 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!114 &8108755518872558325 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2706897981305784111} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 13 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2715952915747392163 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8628475204112703367} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8628475204112703367 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2715952915747392163} - m_LocalRotation: {x: -0.00000008146034, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00014515223, y: -0.50799304, z: 0.36010328} - m_LocalScale: {x: 1, y: 0.6623117, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 22 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2930666099800634610 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4969957317376515659} - - component: {fileID: 6745415015389006530} - - component: {fileID: 6770204892789126122} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4969957317376515659 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2930666099800634610} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0151, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4296048400275952892} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6745415015389006530 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2930666099800634610} - 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!114 &6770204892789126122 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2930666099800634610} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3003044669990054802 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1981551239623614957} - - component: {fileID: 8474617763298812288} - - component: {fileID: 8904744437319972351} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1981551239623614957 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3003044669990054802} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.104, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4296048400275952892} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8474617763298812288 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3003044669990054802} - 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!114 &8904744437319972351 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3003044669990054802} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3268000938966750314 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8633285119518732208} - - component: {fileID: 5909203916713715662} - - component: {fileID: 1904481573149776041} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8633285119518732208 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3268000938966750314} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0311, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4296048400275952892} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5909203916713715662 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3268000938966750314} - 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!114 &1904481573149776041 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3268000938966750314} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3517176520796003591 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2982442503807895751} - - component: {fileID: 2854542944905642178} - - component: {fileID: 8993170188238850020} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2982442503807895751 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3517176520796003591} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: -0.085, y: -0.0006, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1419792431456711471} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2854542944905642178 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3517176520796003591} - 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!114 &8993170188238850020 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3517176520796003591} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4016955611420365050 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2738175363758918277} - - component: {fileID: 4592606273035668019} - - component: {fileID: 1592849199497766671} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2738175363758918277 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4016955611420365050} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0639, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4296048400275952892} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4592606273035668019 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4016955611420365050} - 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!114 &1592849199497766671 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4016955611420365050} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4278510011606822921 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8872831087707635128} - - component: {fileID: 7210732812766542287} - - component: {fileID: 3776064120821528347} - m_Layer: 8 - m_Name: Box073 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8872831087707635128 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4278510011606822921} - m_LocalRotation: {x: 0.0000000010017445, y: 0.00000011920929, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.036406655, y: 0.25199997, z: 0.00363791} - m_LocalScale: {x: 1, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7210732812766542287 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4278510011606822921} - m_Mesh: {fileID: -4787829685061339440, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &3776064120821528347 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4278510011606822921} - 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &4441128713013416163 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3672032169769255486} - - component: {fileID: 4856926819163328940} - - component: {fileID: 7433610470459192284} - m_Layer: 8 - m_Name: Box062 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3672032169769255486 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4441128713013416163} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.70710677} - m_LocalPosition: {x: -0.2512515, y: 0.1225853, z: 0.009732783} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4856926819163328940 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4441128713013416163} - m_Mesh: {fileID: 5062258218628926779, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &7433610470459192284 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4441128713013416163} - 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} - - {fileID: 2100000, guid: dc5f0f285be51334abb02b539c88f62a, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: d3469d2b2aeaf7441b7b8f89a0def34f, 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!1 &5119081682167592377 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7870950681926043452} - - component: {fileID: 6202033100354213268} - - component: {fileID: 4667792601674924045} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7870950681926043452 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5119081682167592377} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.042, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4296048400275952892} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6202033100354213268 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5119081682167592377} - 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!114 &4667792601674924045 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5119081682167592377} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5233535872144340241 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7292631380971210844} - - component: {fileID: 5530516035881745979} - - component: {fileID: 7726382068984430136} - m_Layer: 8 - m_Name: Box078 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7292631380971210844 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5233535872144340241} - m_LocalRotation: {x: 0.0000000010017445, y: 0.00000011920929, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.23836726, y: 0.25199997, z: 0.009732783} - m_LocalScale: {x: 1, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5530516035881745979 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5233535872144340241} - m_Mesh: {fileID: 1720402882065375157, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &7726382068984430136 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5233535872144340241} - 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &5286023421699433472 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8907538072864967743} - - component: {fileID: 6431611277742791783} - - component: {fileID: 1053786422726588681} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8907538072864967743 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5286023421699433472} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: -0.0655, y: -0.0006, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1419792431456711471} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6431611277742791783 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5286023421699433472} - 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!114 &1053786422726588681 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5286023421699433472} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5385197149283210473 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6352479564431696786} - - component: {fileID: 8025642634484083194} - - component: {fileID: 4032937285539364583} - m_Layer: 8 - m_Name: Box066 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6352479564431696786 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5385197149283210473} - m_LocalRotation: {x: 0.0000000010017445, y: 0.00000011920929, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.13670246, y: 0.25199997, z: 0.009732753} - m_LocalScale: {x: 1, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8025642634484083194 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5385197149283210473} - m_Mesh: {fileID: 5644322950614084737, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &4032937285539364583 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5385197149283210473} - 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &5501779524061032817 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6990297053547348660} - - component: {fileID: 5941300852342500888} - - component: {fileID: 3628790915173959772} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6990297053547348660 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5501779524061032817} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: -0.0016, y: -0.0006, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1419792431456711471} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5941300852342500888 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5501779524061032817} - 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!114 &3628790915173959772 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5501779524061032817} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5609394090905429795 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9141041867298357321} - - component: {fileID: 6673683320583767918} - - component: {fileID: 753562810150502166} - m_Layer: 8 - m_Name: Box081 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9141041867298357321 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5609394090905429795} - m_LocalRotation: {x: 0.0000000010017445, y: 0.00000011920929, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.26721868, y: 0.25199997, z: 0.009732783} - m_LocalScale: {x: 1, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 21 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6673683320583767918 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5609394090905429795} - m_Mesh: {fileID: 1491061044228583767, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &753562810150502166 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5609394090905429795} - 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &5714141438371738550 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2559180768693187625} - - component: {fileID: 3401392110537635669} - - component: {fileID: 7267569837774614744} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2559180768693187625 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5714141438371738550} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: -0.0213, y: -0.0006, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1419792431456711471} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3401392110537635669 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5714141438371738550} - 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!114 &7267569837774614744 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5714141438371738550} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5738807142464316584 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1902852477194890184} - - component: {fileID: 1571418813361184629} - - component: {fileID: 5281456283649028209} - m_Layer: 8 - m_Name: Box072 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1902852477194890184 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5738807142464316584} - m_LocalRotation: {x: 0.0000000010017445, y: 0.00000011920929, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.06525818, y: 0.25199997, z: 0.009732775} - m_LocalScale: {x: 1, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1571418813361184629 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5738807142464316584} - m_Mesh: {fileID: -8319805796033406473, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &5281456283649028209 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5738807142464316584} - 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &5816176737517912989 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2064209972439253803} - - component: {fileID: 4631546837977833705} - - component: {fileID: 8692094061509479909} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2064209972439253803 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5816176737517912989} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: -0.1037, y: -0.0006, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1419792431456711471} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4631546837977833705 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5816176737517912989} - 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!114 &8692094061509479909 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5816176737517912989} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5966348209231877191 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1229317000365606275} - - component: {fileID: 5617667707045820418} - - component: {fileID: 9022427402471640407} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1229317000365606275 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5966348209231877191} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: 0.0355, y: -0.0006, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1419792431456711471} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5617667707045820418 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5966348209231877191} - 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!114 &9022427402471640407 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5966348209231877191} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6175608946357810110 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7133693491135235041} - - component: {fileID: 466181477538572470} - - component: {fileID: 3924344206096108378} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7133693491135235041 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6175608946357810110} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0586, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4296048400275952892} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &466181477538572470 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6175608946357810110} - 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!114 &3924344206096108378 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6175608946357810110} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6377168607845127121 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3375982017899553955} - - component: {fileID: 1642588895158236677} - - component: {fileID: 7601142867660119819} - m_Layer: 8 - m_Name: Box080 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3375982017899553955 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6377168607845127121} - m_LocalRotation: {x: 0.0000000010017445, y: 0.00000011920929, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2960702, y: 0.25199997, z: 0.009732783} - m_LocalScale: {x: 1, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1642588895158236677 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6377168607845127121} - m_Mesh: {fileID: 928670381974441746, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &7601142867660119819 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6377168607845127121} - 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &6429703139268193065 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2660650262470761360} - - component: {fileID: 9104025202558753655} - - component: {fileID: 2882320505442855239} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2660650262470761360 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6429703139268193065} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: -0.0471, y: -0.0006, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1419792431456711471} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9104025202558753655 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6429703139268193065} - 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!114 &2882320505442855239 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6429703139268193065} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6508888429902736995 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4296048400275952892} - - component: {fileID: 5271157392713949183} - - component: {fileID: 593809426904792521} - - component: {fileID: 702772506257754515} - - component: {fileID: 1221645552982657182} - - component: {fileID: 3757530001809307884} - - component: {fileID: 5321237939029371668} - m_Layer: 8 - m_Name: Box071 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4296048400275952892 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6508888429902736995} - m_LocalRotation: {x: 0.0000000010017445, y: 0.00000011920929, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.02129643, y: 0.25199997, z: 0.009732749} - m_LocalScale: {x: 1, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 6969972138318495322} - - {fileID: 623714055974057798} - - {fileID: 5805625927466655368} - - {fileID: 1981551239623614957} - - {fileID: 2738175363758918277} - - {fileID: 7298188672125909027} - - {fileID: 8633285119518732208} - - {fileID: 4969957317376515659} - - {fileID: 9146342156008615963} - - {fileID: 7870950681926043452} - - {fileID: 7133693491135235041} - - {fileID: 3068774051194293658} - - {fileID: 8602481879644915594} - - {fileID: 4901319721441028834} - - {fileID: 3833469319475110290} - - {fileID: 9077383617303149410} - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5271157392713949183 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6508888429902736995} - m_Mesh: {fileID: -5087548570314954540, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &593809426904792521 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6508888429902736995} - 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: 5c3ed94971591b3439c528cee49bee3e, type: 2} - - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!114 &702772506257754515 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6508888429902736995} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &1221645552982657182 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6508888429902736995} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &3757530001809307884 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6508888429902736995} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &5321237939029371668 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6508888429902736995} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -5087548570314954540, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!1 &6646886577600594332 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 746177549625934815} - - component: {fileID: 9002122643271294430} - - component: {fileID: 2513630463907587343} - m_Layer: 8 - m_Name: Box075 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &746177549625934815 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6646886577600594332} - m_LocalRotation: {x: 0.0000000010017445, y: 0.00000011920929, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.09410973, y: 0.25199997, z: 0.009732783} - m_LocalScale: {x: 1, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &9002122643271294430 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6646886577600594332} - m_Mesh: {fileID: -293825477841229588, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &2513630463907587343 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6646886577600594332} - 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, 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!1 &6678195133415089240 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3068774051194293658} - - component: {fileID: 6328624390866226659} - - component: {fileID: 8702717654808278438} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3068774051194293658 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6678195133415089240} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0746, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4296048400275952892} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6328624390866226659 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6678195133415089240} - 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!114 &8702717654808278438 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6678195133415089240} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7092863789457365138 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1900716873463999391} - - component: {fileID: 7630350704171897458} - - component: {fileID: 5959029499504882256} + - component: {fileID: 8809671119953155800} + - component: {fileID: 704528920097828661} + - component: {fileID: 3643472682776071959} m_Layer: 8 m_Name: Box076 m_TagString: Untagged @@ -3373,36 +174,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1900716873463999391 +--- !u!4 &8809671119953155800 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7092863789457365138} - m_LocalRotation: {x: 0.0000000010017445, y: 0.00000011920929, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.1806642, y: 0.25199997, z: 0.009732783} - m_LocalScale: {x: 1, y: 1.0391465, z: 1} + m_GameObject: {fileID: 165618136248002005} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.18066418, y: -0.009732768, z: 0.24919832} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 16 + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 17 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7630350704171897458 +--- !u!33 &704528920097828661 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7092863789457365138} + m_GameObject: {fileID: 165618136248002005} m_Mesh: {fileID: 7638646759786298271, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &5959029499504882256 +--- !u!23 &3643472682776071959 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7092863789457365138} + m_GameObject: {fileID: 165618136248002005} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -3444,7 +245,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &7094429780554127763 +--- !u!1 &168590952973952212 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3452,9 +253,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8438648827226821645} - - component: {fileID: 530855077160748438} - - component: {fileID: 3841057731405940436} + - component: {fileID: 1530824467966978378} + - component: {fileID: 7457810596740462801} + - component: {fileID: 6155474560247593875} m_Layer: 8 m_Name: Box070 m_TagString: Untagged @@ -3462,36 +263,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8438648827226821645 +--- !u!4 &1530824467966978378 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7094429780554127763} - m_LocalRotation: {x: 0.0000000010017445, y: 0.00000011920929, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.021386698, y: 0.25199997, z: 0.009732784} - m_LocalScale: {x: 1, y: 1.0391465, z: 1} + m_GameObject: {fileID: 168590952973952212} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.021386698, y: -0.009732783, z: 0.24919833} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 10 + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &530855077160748438 +--- !u!33 &7457810596740462801 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7094429780554127763} + m_GameObject: {fileID: 168590952973952212} m_Mesh: {fileID: 1702923399578278298, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &3841057731405940436 +--- !u!23 &6155474560247593875 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7094429780554127763} + m_GameObject: {fileID: 168590952973952212} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -3533,7 +334,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &7294531038485658541 +--- !u!1 &414192620306890906 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3541,87 +342,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7876058158946494869} - - component: {fileID: 8810607262922002924} - - component: {fileID: 5715533550666258968} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7876058158946494869 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7294531038485658541} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: 0.017, y: -0.0006, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1419792431456711471} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8810607262922002924 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7294531038485658541} - 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!114 &5715533550666258968 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7294531038485658541} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7322025226403970525 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4107308310887851217} - - component: {fileID: 2296594449286311741} - - component: {fileID: 4201828192238391011} + - component: {fileID: 6422865332716706198} + - component: {fileID: 9222715232863048314} + - component: {fileID: 6515981482915115940} m_Layer: 8 m_Name: Box067 m_TagString: Untagged @@ -3629,371 +352,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4107308310887851217 +--- !u!4 &6422865332716706198 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7322025226403970525} - m_LocalRotation: {x: 0.0000000010017445, y: 0.00000011920929, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.107850984, y: 0.25199997, z: 0.009732783} - m_LocalScale: {x: 1, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2296594449286311741 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7322025226403970525} - m_Mesh: {fileID: -7516479528189023691, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &4201828192238391011 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7322025226403970525} - 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &7664791770995870650 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4901319721441028834} - - component: {fileID: 371874555372567402} - - component: {fileID: 7649685708388514288} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4901319721441028834 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7664791770995870650} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.1294, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4296048400275952892} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &371874555372567402 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7664791770995870650} - 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!114 &7649685708388514288 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7664791770995870650} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 14 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7861882921629741712 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1768344311532827773} - - component: {fileID: 196649226562677725} - - component: {fileID: 2059648417385591062} - m_Layer: 8 - m_Name: Box069 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1768344311532827773 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7861882921629741712} - m_LocalRotation: {x: 0.0000000010017445, y: 0.00000011920929, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.07899943, y: 0.25199997, z: 0.00973279} - m_LocalScale: {x: 1, y: 1.0391465, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &196649226562677725 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7861882921629741712} - m_Mesh: {fileID: 3304094240565004552, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &2059648417385591062 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7861882921629741712} - 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} - - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: 8ff1d5a2c52311e4696cd22735732a66, type: 2} - - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &8220785037433260697 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6969972138318495322} - - component: {fileID: 7136635868254540136} - - component: {fileID: 2024704902767776381} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6969972138318495322 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8220785037433260697} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.15277, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4296048400275952892} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7136635868254540136 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8220785037433260697} - 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!114 &2024704902767776381 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8220785037433260697} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8247952548412840312 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2085683568907490278} - - component: {fileID: 3110066425223075026} - - component: {fileID: 12748255044523722} - m_Layer: 8 - m_Name: Box063 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2085683568907490278 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8247952548412840312} - m_LocalRotation: {x: 0.0000000010017445, y: 0.00000011920929, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.2512515, y: 0.25199997, z: 0.00363791} + m_GameObject: {fileID: 414192620306890906} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.10785097, y: -0.009732798, z: 0.24919833} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 3 + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3110066425223075026 +--- !u!33 &9222715232863048314 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8247952548412840312} - m_Mesh: {fileID: -2160783174947531112, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &12748255044523722 + m_GameObject: {fileID: 414192620306890906} + m_Mesh: {fileID: -7516479528189023691, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &6515981482915115940 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8247952548412840312} + m_GameObject: {fileID: 414192620306890906} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -4007,12 +395,13 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -4034,7 +423,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &8387118351824891127 +--- !u!1 &609538430407750431 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4042,165 +431,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6913964597378269976} - - component: {fileID: 993120981118725586} - - component: {fileID: 5959632073917773505} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6913964597378269976 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8387118351824891127} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: 0.0512, y: -0.0008, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7890818290687486453} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &993120981118725586 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8387118351824891127} - 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!114 &5959632073917773505 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8387118351824891127} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8469221350679701270 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7298188672125909027} - - component: {fileID: 2421692753592514241} - - component: {fileID: 2501421209051153221} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7298188672125909027 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8469221350679701270} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0477, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4296048400275952892} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2421692753592514241 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8469221350679701270} - 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!114 &2501421209051153221 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8469221350679701270} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8756570492412359095 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9077383617303149410} - - component: {fileID: 2208144947349558002} - - component: {fileID: 7626337617288138395} + - component: {fileID: 4765282828437516975} + - component: {fileID: 506469639565632320} + - component: {fileID: 7224181762135800100} m_Layer: 11 m_Name: Cube (15) m_TagString: Untagged @@ -4208,41 +441,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &9077383617303149410 +--- !u!4 &4765282828437516975 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8756570492412359095} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.162, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} + m_GameObject: {fileID: 609538430407750431} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.0031173825, y: -0.2565, z: -0.1619} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 4296048400275952892} + m_Father: {fileID: 6610210691644107195} m_RootOrder: 15 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2208144947349558002 +--- !u!65 &506469639565632320 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8756570492412359095} + m_GameObject: {fileID: 609538430407750431} 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!114 &7626337617288138395 +--- !u!114 &7224181762135800100 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8756570492412359095} + m_GameObject: {fileID: 609538430407750431} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4268,7 +501,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &9000774950803793607 +--- !u!1 &648888196497747186 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4276,51 +509,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8134461826944200643} - - component: {fileID: 1055872185927828472} - - component: {fileID: 8697049028547975584} + - component: {fileID: 1560876613656734335} + - component: {fileID: 2069592768532206193} + - component: {fileID: 4155264417712609568} m_Layer: 11 - m_Name: Cube (2) + m_Name: Cube (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8134461826944200643 +--- !u!4 &1560876613656734335 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9000774950803793607} - m_LocalRotation: {x: -0, y: -0, z: -7.958656e-15, w: 1} - m_LocalPosition: {x: 0.0827, y: -0.0008, z: 0.2565} - m_LocalScale: {x: 0.014458261, y: 0.009228727, z: 0.00923} + m_GameObject: {fileID: 648888196497747186} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.0031173378, y: -0.25649998, z: -0.0737} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7890818290687486453} - m_RootOrder: 1 + m_Father: {fileID: 6610210691644107195} + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1055872185927828472 +--- !u!65 &2069592768532206193 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9000774950803793607} + m_GameObject: {fileID: 648888196497747186} 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!114 &8697049028547975584 +--- !u!114 &4155264417712609568 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9000774950803793607} + m_GameObject: {fileID: 648888196497747186} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4333,7 +566,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 2 + portPosition: 12 deviceId: deviceName: portModel: @@ -4346,7 +579,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &9023607544613480523 +--- !u!1 &668294283822048167 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4354,53 +587,626 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7890818290687486453} - - component: {fileID: 7264258153417079059} - - component: {fileID: 5410003594498787378} - - component: {fileID: 7103218406771700495} - - component: {fileID: 7322861011145475870} - - component: {fileID: 766749950873790302} - - component: {fileID: 762784854085138078} + - component: {fileID: 2682722584266570896} + - component: {fileID: 3552646771180710655} + - component: {fileID: 1904375240811644944} + m_Layer: 11 + m_Name: Cube (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2682722584266570896 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 668294283822048167} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.0031173974, y: -0.25649998, z: 0.0475} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6610210691644107195} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3552646771180710655 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 668294283822048167} + 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!114 &1904375240811644944 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 668294283822048167} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &758283250702376113 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4927542944163208156} + - component: {fileID: 8629070820686991276} + - component: {fileID: 376728101910382902} + m_Layer: 11 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4927542944163208156 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758283250702376113} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.0031173974, y: -0.25649995, z: 0.1025} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6610210691644107195} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8629070820686991276 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758283250702376113} + 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!114 &376728101910382902 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758283250702376113} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &952944549318725591 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8694450939412990266} + - component: {fileID: 7104478671064618650} + - component: {fileID: 8986890770481695825} m_Layer: 8 + m_Name: Box069 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8694450939412990266 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 952944549318725591} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.07899942, y: -0.009732798, z: 0.24919835} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7104478671064618650 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 952944549318725591} + m_Mesh: {fileID: 3304094240565004552, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &8986890770481695825 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 952944549318725591} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 8ff1d5a2c52311e4696cd22735732a66, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &1153330175146589967 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7949565682089634970} + - component: {fileID: 2022445864273387206} + - component: {fileID: 3453996759161738459} + m_Layer: 11 + m_Name: Cube (14) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7949565682089634970 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1153330175146589967} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.0031173825, y: -0.2565, z: -0.1451} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6610210691644107195} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2022445864273387206 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1153330175146589967} + 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!114 &3453996759161738459 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1153330175146589967} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 15 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1320702566427141183 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8994630737309429409} + - component: {fileID: 5407594137496103317} + - component: {fileID: 6921967345323060109} + m_Layer: 8 + m_Name: Box063 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8994630737309429409 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1320702566427141183} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.25125146, y: -0.0036379397, z: 0.24919833} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5407594137496103317 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1320702566427141183} + m_Mesh: {fileID: -2160783174947531112, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &6921967345323060109 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1320702566427141183} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &1768664593825466583 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 677298372435104352} + - component: {fileID: 4307175838429093765} + - component: {fileID: 8255834321668088691} + m_Layer: 11 + m_Name: Cube (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &677298372435104352 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1768664593825466583} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.0031173378, y: -0.25649998, z: -0.0572} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6610210691644107195} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &4307175838429093765 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1768664593825466583} + 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!114 &8255834321668088691 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1768664593825466583} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2019343165543190283 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1904146893152346029} + - component: {fileID: 1406817366370117980} + - component: {fileID: 1682929433528872214} + m_Layer: 11 + m_Name: Cube (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1904146893152346029 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019343165543190283} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.0031173378, y: -0.25649998, z: -0.0418} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6610210691644107195} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1406817366370117980 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019343165543190283} + 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!114 &1682929433528872214 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019343165543190283} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 10 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2096642885322691852 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 982734377411663026} + - component: {fileID: 355039544691786836} + - component: {fileID: 3113886487428806005} + - component: {fileID: 5303950451172226431} + - component: {fileID: 7605814343234128306} + - component: {fileID: 2185801786333009628} + - component: {fileID: 5547083935401665607} + - component: {fileID: 2790733515552989861} + - component: {fileID: 2640797505974198744} + - component: {fileID: 6951269224761429286} + - component: {fileID: 6581605369347075877} + - component: {fileID: 3846363476432705284} + m_Layer: 13 m_Name: Box064 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7890818290687486453 +--- !u!4 &982734377411663026 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9023607544613480523} - m_LocalRotation: {x: 0.0000000010017445, y: 0.00000011920929, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.1961929, y: 0.25199997, z: 0.009732783} - m_LocalScale: {x: 1, y: 1.0391465, z: 1} + m_GameObject: {fileID: 2096642885322691852} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.19619288, y: -0.009732813, z: 0.24919833} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 3698751103629259602} - - {fileID: 8134461826944200643} - - {fileID: 6913964597378269976} - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 4 + - {fileID: 3145357467472824692} + - {fileID: 8004337801106448717} + - {fileID: 8926784348705188808} + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7264258153417079059 +--- !u!33 &355039544691786836 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9023607544613480523} + m_GameObject: {fileID: 2096642885322691852} m_Mesh: {fileID: 7413444807456324831, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &5410003594498787378 +--- !u!23 &3113886487428806005 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9023607544613480523} + m_GameObject: {fileID: 2096642885322691852} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -4446,13 +1252,13 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &7103218406771700495 +--- !u!114 &5303950451172226431 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9023607544613480523} + m_GameObject: {fileID: 2096642885322691852} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -4504,26 +1310,48 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &7322861011145475870 +--- !u!114 &7605814343234128306 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9023607544613480523} + m_GameObject: {fileID: 2096642885322691852} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &766749950873790302 +--- !u!114 &2185801786333009628 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9023607544613480523} + m_GameObject: {fileID: 2096642885322691852} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + meshRenderers: [] + materials: [] + empty: [] + TransparentGlow_Shader: {fileID: 0} + TransparentGlow_Shader_half: {fileID: 0} + original_jigui: [] + original_shebei: [] + search_u_wei: 0 + is_jigui: 0 +--- !u!114 &5547083935401665607 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2096642885322691852} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -4533,15 +1361,15 @@ MonoBehaviour: My_magnifyState: 0 empty: [] TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &762784854085138078 +--- !u!64 &2790733515552989861 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9023607544613480523} + m_GameObject: {fileID: 2096642885322691852} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -4549,7 +1377,118 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 7413444807456324831, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!1 &9130710044534160476 +--- !u!114 &2640797505974198744 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2096642885322691852} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} + m_Name: + m_EditorClassIdentifier: + deviceList: + id: + deviceName: + deviceCode: + type: 2 + typeStr: + deviceType: 3 + deviceTypeStr: + rackId: + shelfId: + slotId: + devicePosition: 3 + machineModel: + status: + conDeviceName: + rackType: + openFlag: + backDoorFlag: + modelNum: + occupyNum: + residueNum: + operationTime: + directorName: + phone: + manufacturer: + powerProperties: + maintenanceUnit: + machineFrameHigh: + machineFrameWide: + machineFrameThick: + slotNum: + slotSort: + installMethod: + affiliationFrame: + parentSlotName: + slotType: + occupyStatus: + affiliationSlot: + portNum: + cardFunction: + cardType: + runStatus: + tmsId: + remark: + createTime: + createName: +--- !u!114 &6951269224761429286 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2096642885322691852} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!114 &6581605369347075877 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2096642885322691852} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + meshRenderers: [] + materials: [] + empty: [] + TransparentGlow_Shader: {fileID: 0} + TransparentGlow_Shader_half: {fileID: 0} + original_jigui: [] + original_shebei: [] + search_u_wei: 0 + is_jigui: 0 +--- !u!114 &3846363476432705284 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2096642885322691852} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &2201936085574174855 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4557,9 +1496,87 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4022444045796170237} - - component: {fileID: 1994810547855015049} - - component: {fileID: 5827640799069600254} + - component: {fileID: 3145357467472824692} + - component: {fileID: 4969760342213385691} + - component: {fileID: 6315463068728801050} + m_Layer: 11 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3145357467472824692 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2201936085574174855} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: 0.0008313209, y: -0.25649995, z: 0.1116} + m_LocalScale: {x: 0.018, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 982734377411663026} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &4969760342213385691 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2201936085574174855} + 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!114 &6315463068728801050 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2201936085574174855} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2203459444027048219 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6336592524532655290} + - component: {fileID: 8902617315986850254} + - component: {fileID: 3530117003256202425} m_Layer: 8 m_Name: Box074 m_TagString: Untagged @@ -4567,36 +1584,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4022444045796170237 +--- !u!4 &6336592524532655290 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9130710044534160476} - m_LocalRotation: {x: 0.0000000010017445, y: 0.00000011920929, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.12296124, y: 0.25199997, z: 0.009732783} - m_LocalScale: {x: 1, y: 1.0391465, z: 1} + m_GameObject: {fileID: 2203459444027048219} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.12296122, y: -0.009732768, z: 0.24919832} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 6210118955132959890} - m_RootOrder: 14 + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 15 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1994810547855015049 +--- !u!33 &8902617315986850254 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9130710044534160476} + m_GameObject: {fileID: 2203459444027048219} m_Mesh: {fileID: 3181945431582109686, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} ---- !u!23 &5827640799069600254 +--- !u!23 &3530117003256202425 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9130710044534160476} + m_GameObject: {fileID: 2203459444027048219} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -4638,7 +1655,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &9164666221256125815 +--- !u!1 &2256425137869646224 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4646,9 +1663,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 623714055974057798} - - component: {fileID: 5376920967201748221} - - component: {fileID: 8603516443755113599} + - component: {fileID: 694157108907493816} + - component: {fileID: 7676284532288386869} + - component: {fileID: 2145103396883106213} m_Layer: 11 m_Name: Cube (1) m_TagString: Untagged @@ -4656,41 +1673,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &623714055974057798 +--- !u!4 &694157108907493816 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9164666221256125815} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.1366, y: 0.003, z: 0.2565} - m_LocalScale: {x: 0.014456455, y: 0.009227934, z: 0.009227934} + m_GameObject: {fileID: 2256425137869646224} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.0031173974, y: -0.25649995, z: 0.13536} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 4296048400275952892} + m_Father: {fileID: 6610210691644107195} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5376920967201748221 +--- !u!65 &7676284532288386869 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9164666221256125815} + m_GameObject: {fileID: 2256425137869646224} 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!114 &8603516443755113599 +--- !u!114 &2145103396883106213 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9164666221256125815} + m_GameObject: {fileID: 2256425137869646224} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4716,3 +1733,3254 @@ MonoBehaviour: remark: createTime: createName: +--- !u!1 &2270835246866191793 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8926784348705188808} + - component: {fileID: 2959666130519083236} + - component: {fileID: 4803951403552734063} + m_Layer: 11 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8926784348705188808 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2270835246866191793} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: 0.0008313209, y: -0.25649998, z: 0.0509} + m_LocalScale: {x: 0.018, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 982734377411663026} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2959666130519083236 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2270835246866191793} + 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!114 &4803951403552734063 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2270835246866191793} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2821393643881390037 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6618442676597596475} + - component: {fileID: 8902020793349004012} + - component: {fileID: 3605409919871117627} + m_Layer: 11 + m_Name: Cube (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6618442676597596475 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2821393643881390037} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: 0.000623554, y: -0.2565, z: -0.04651858} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8329006642640785000} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8902020793349004012 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2821393643881390037} + 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!114 &3605409919871117627 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2821393643881390037} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2919405671211829334 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 366532382022251803} + - component: {fileID: 3234386971643069308} + - component: {fileID: 800252420079305599} + m_Layer: 8 + m_Name: Box078 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &366532382022251803 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2919405671211829334} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.23836723, y: -0.009732753, z: 0.24919835} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3234386971643069308 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2919405671211829334} + m_Mesh: {fileID: 1720402882065375157, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &800252420079305599 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2919405671211829334} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &3071066398592739758 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4038044800373219029} + - component: {fileID: 1099513467684885693} + - component: {fileID: 6329054737282532256} + m_Layer: 8 + m_Name: Box066 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4038044800373219029 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3071066398592739758} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.13670245, y: -0.009732768, z: 0.24919833} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1099513467684885693 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3071066398592739758} + m_Mesh: {fileID: 5644322950614084737, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &6329054737282532256 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3071066398592739758} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &3311661372239611360 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6457963728002672496} + - component: {fileID: 9013018782646579219} + - component: {fileID: 5652140100287712928} + m_Layer: 11 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6457963728002672496 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3311661372239611360} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: 0.0006234646, y: -0.2565, z: 0.0357} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8329006642640785000} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &9013018782646579219 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3311661372239611360} + 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!114 &5652140100287712928 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3311661372239611360} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3312992277972720228 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2231832672071597326} + - component: {fileID: 4377253952247478825} + - component: {fileID: 7662804097372635729} + m_Layer: 8 + m_Name: Box081 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2231832672071597326 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3312992277972720228} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.26721865, y: -0.009732753, z: 0.24919832} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 22 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4377253952247478825 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3312992277972720228} + m_Mesh: {fileID: 1491061044228583767, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &7662804097372635729 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3312992277972720228} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &3332608754908092158 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6010157658165931885} + - component: {fileID: 5984552489466518257} + - component: {fileID: 853848885618316440} + m_Layer: 11 + m_Name: Cube (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6010157658165931885 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3332608754908092158} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: 0.0006235838, y: -0.2565, z: -0.0459} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8329006642640785000} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &5984552489466518257 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3332608754908092158} + 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!114 &853848885618316440 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3332608754908092158} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3424662512022690287 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8812072118303233679} + - component: {fileID: 8497241148756632114} + - component: {fileID: 2983932006781242678} + m_Layer: 8 + m_Name: Box072 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8812072118303233679 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3424662512022690287} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.065258175, y: -0.009732768, z: 0.24919835} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8497241148756632114 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3424662512022690287} + m_Mesh: {fileID: -8319805796033406473, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &2983932006781242678 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3424662512022690287} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &3515150774209227509 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4443828797975863970} + - component: {fileID: 2351621968750890203} + - component: {fileID: 9013989383998191397} + m_Layer: 11 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4443828797975863970 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3515150774209227509} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.0031173974, y: -0.25649995, z: 0.15215} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6610210691644107195} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2351621968750890203 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3515150774209227509} + 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!114 &9013989383998191397 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3515150774209227509} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3563723040069146676 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6198286936450859613} + m_Layer: 8 + m_Name: "\u951A\u70B9" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6198286936450859613 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3563723040069146676} + m_LocalRotation: {x: 0.70710677, y: -0, z: -0, w: 0.7071069} + m_LocalPosition: {x: -0.00014512241, y: -0.36010325, z: -0.76699996} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 23 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3758406521179587071 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1917518303518569302} + - component: {fileID: 2523939885359598674} + - component: {fileID: 8398281760496463623} + m_Layer: 11 + m_Name: Cube (12) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1917518303518569302 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3758406521179587071} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.0031173825, y: -0.2565, z: -0.11234024} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6610210691644107195} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2523939885359598674 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3758406521179587071} + 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!114 &8398281760496463623 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3758406521179587071} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 13 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4081052737206972054 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5691260313538173412} + - component: {fileID: 8568427309295635266} + - component: {fileID: 675014318766088780} + m_Layer: 8 + m_Name: Box080 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5691260313538173412 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4081052737206972054} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.29607016, y: -0.009732753, z: 0.24919832} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 21 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8568427309295635266 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4081052737206972054} + m_Mesh: {fileID: 928670381974441746, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &675014318766088780 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4081052737206972054} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &4212758266154472228 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6610210691644107195} + - component: {fileID: 2955600920602829496} + - component: {fileID: 7502764291348152462} + - component: {fileID: 2535525464424110623} + - component: {fileID: 5762869430705906556} + - component: {fileID: 300077297242279950} + - component: {fileID: 4803118905984955672} + - component: {fileID: 4177371977041555455} + m_Layer: 13 + m_Name: Box071 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6610210691644107195 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4212758266154472228} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.021296427, y: -0.009732753, z: 0.24919833} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4443828797975863970} + - {fileID: 694157108907493816} + - {fileID: 1017983246649775262} + - {fileID: 4927542944163208156} + - {fileID: 7123633968956834062} + - {fileID: 2682722584266570896} + - {fileID: 53113868075621063} + - {fileID: 7528682677686996205} + - {fileID: 4115291348231788926} + - {fileID: 1904146893152346029} + - {fileID: 677298372435104352} + - {fileID: 1560876613656734335} + - {fileID: 1917518303518569302} + - {fileID: 1146433055238325415} + - {fileID: 7949565682089634970} + - {fileID: 4765282828437516975} + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2955600920602829496 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4212758266154472228} + m_Mesh: {fileID: -5087548570314954540, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &7502764291348152462 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4212758266154472228} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 5c3ed94971591b3439c528cee49bee3e, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!114 &2535525464424110623 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4212758266154472228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} + m_Name: + m_EditorClassIdentifier: + deviceList: + id: + deviceName: + deviceCode: + type: 2 + typeStr: + deviceType: 3 + deviceTypeStr: + rackId: + shelfId: + slotId: + devicePosition: 1 + machineModel: + status: + conDeviceName: + rackType: + openFlag: + backDoorFlag: + modelNum: + occupyNum: + residueNum: + operationTime: + directorName: + phone: + manufacturer: + powerProperties: + maintenanceUnit: + machineFrameHigh: + machineFrameWide: + machineFrameThick: + slotNum: + slotSort: + installMethod: + affiliationFrame: + parentSlotName: + slotType: + occupyStatus: + affiliationSlot: + portNum: + cardFunction: + cardType: + runStatus: + tmsId: + remark: + createTime: + createName: +--- !u!114 &5762869430705906556 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4212758266154472228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!114 &300077297242279950 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4212758266154472228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + meshRenderers: [] + materials: [] + empty: [] + TransparentGlow_Shader: {fileID: 0} + TransparentGlow_Shader_half: {fileID: 0} + original_jigui: [] + original_shebei: [] + search_u_wei: 0 + is_jigui: 0 +--- !u!114 &4803118905984955672 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4212758266154472228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!64 &4177371977041555455 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4212758266154472228} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: -5087548570314954540, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!1 &4331604089017793755 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7672016514092482200} + - component: {fileID: 2076009900962832537} + - component: {fileID: 4810050349479303240} + m_Layer: 8 + m_Name: Box075 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7672016514092482200 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4331604089017793755} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.094109714, y: -0.009732768, z: 0.24919832} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2076009900962832537 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4331604089017793755} + m_Mesh: {fileID: -293825477841229588, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &4810050349479303240 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4331604089017793755} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, 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!1 &4829616100635790115 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7014779765707653943} + - component: {fileID: 5199794938243170545} + - component: {fileID: 7773610166596447488} + m_Layer: 8 + m_Name: Box068 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7014779765707653943 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4829616100635790115} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.05014792, y: -0.009732798, z: 0.24919833} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5199794938243170545 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4829616100635790115} + m_Mesh: {fileID: -8084387392185104470, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &7773610166596447488 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4829616100635790115} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 8ff1d5a2c52311e4696cd22735732a66, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &4951311906813213634 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 390461046734433574} + - component: {fileID: 4186903389799020932} + - component: {fileID: 7050191460758762958} + m_Layer: 8 + m_Name: Box060 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &390461046734433574 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4951311906813213634} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.3009135, y: -0.0036379397, z: 0.24919833} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4186903389799020932 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4951311906813213634} + m_Mesh: {fileID: -4248355281360383206, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &7050191460758762958 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4951311906813213634} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &5002414052093497908 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8329006642640785000} + - component: {fileID: 1178638845552612503} + - component: {fileID: 8893773350343694793} + - component: {fileID: 7032282384903029804} + - component: {fileID: 1320175509884604679} + - component: {fileID: 8025506692704152244} + - component: {fileID: 7661322313081718761} + - component: {fileID: 581428665087086326} + m_Layer: 13 + m_Name: Box065 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8329006642640785000 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5002414052093497908} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.16617101, y: -0.009732798, z: 0.24919833} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6457963728002672496} + - {fileID: 9215820371742162014} + - {fileID: 5495792005687456119} + - {fileID: 6010157658165931885} + - {fileID: 6618442676597596475} + - {fileID: 1400187465821920243} + - {fileID: 2126244570838598756} + - {fileID: 8315254214794197127} + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1178638845552612503 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5002414052093497908} + m_Mesh: {fileID: 7404775158862943375, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &8893773350343694793 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5002414052093497908} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, type: 2} + - {fileID: 2100000, guid: d5a3c62a9a3aa334f90fb5ff44d48d36, type: 2} + - {fileID: 2100000, guid: d3469d2b2aeaf7441b7b8f89a0def34f, 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!114 &7032282384903029804 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5002414052093497908} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} + m_Name: + m_EditorClassIdentifier: + deviceList: + id: + deviceName: + deviceCode: + type: 2 + typeStr: + deviceType: 3 + deviceTypeStr: + rackId: + shelfId: + slotId: + devicePosition: 2 + machineModel: + status: + conDeviceName: + rackType: + openFlag: + backDoorFlag: + modelNum: + occupyNum: + residueNum: + operationTime: + directorName: + phone: + manufacturer: + powerProperties: + maintenanceUnit: + machineFrameHigh: + machineFrameWide: + machineFrameThick: + slotNum: + slotSort: + installMethod: + affiliationFrame: + parentSlotName: + slotType: + occupyStatus: + affiliationSlot: + portNum: + cardFunction: + cardType: + runStatus: + tmsId: + remark: + createTime: + createName: +--- !u!114 &1320175509884604679 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5002414052093497908} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!114 &8025506692704152244 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5002414052093497908} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + meshRenderers: [] + materials: [] + empty: [] + TransparentGlow_Shader: {fileID: 0} + TransparentGlow_Shader_half: {fileID: 0} + original_jigui: [] + original_shebei: [] + search_u_wei: 0 + is_jigui: 0 +--- !u!114 &7661322313081718761 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5002414052093497908} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!64 &581428665087086326 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5002414052093497908} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 7404775158862943375, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!1 &5099737678129031264 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8004337801106448717} + - component: {fileID: 2900661030687311830} + - component: {fileID: 922098791964598058} + m_Layer: 11 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8004337801106448717 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5099737678129031264} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: 0.0008313209, y: -0.25649998, z: 0.0814} + m_LocalScale: {x: 0.018, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 982734377411663026} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2900661030687311830 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5099737678129031264} + 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!114 &922098791964598058 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5099737678129031264} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5389016776336183638 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9215820371742162014} + - component: {fileID: 8403778508910210788} + - component: {fileID: 885613971457689068} + m_Layer: 11 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9215820371742162014 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5389016776336183638} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: 0.0006235838, y: -0.2565, z: 0.0168} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8329006642640785000} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8403778508910210788 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5389016776336183638} + 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!114 &885613971457689068 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5389016776336183638} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5608153089771355481 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2126244570838598756} + - component: {fileID: 1298305727441849154} + - component: {fileID: 4365226096576759507} + m_Layer: 11 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2126244570838598756 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5608153089771355481} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: 0.000623554, y: -0.2565, z: -0.0846} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8329006642640785000} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1298305727441849154 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5608153089771355481} + 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!114 &4365226096576759507 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5608153089771355481} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5639485074209462633 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1017983246649775262} + - component: {fileID: 6810402574934075303} + - component: {fileID: 1882924214479697254} + m_Layer: 11 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1017983246649775262 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5639485074209462633} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.0031173974, y: -0.25649995, z: 0.1187} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6610210691644107195} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6810402574934075303 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5639485074209462633} + 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!114 &1882924214479697254 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5639485074209462633} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5691236938019730213 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 53113868075621063} + - component: {fileID: 255262705665969435} + - component: {fileID: 7669582704542692925} + m_Layer: 11 + m_Name: Cube (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &53113868075621063 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5691236938019730213} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.0031173378, y: -0.25649998, z: 0.031} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6610210691644107195} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &255262705665969435 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5691236938019730213} + 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!114 &7669582704542692925 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5691236938019730213} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6576061362827169102 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1945605638560268543} + - component: {fileID: 302626909807248520} + - component: {fileID: 6072480225777732188} + m_Layer: 8 + m_Name: Box073 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1945605638560268543 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6576061362827169102} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.03640665, y: -0.00363791, z: 0.24919833} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &302626909807248520 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6576061362827169102} + m_Mesh: {fileID: -4787829685061339440, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &6072480225777732188 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6576061362827169102} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &6737527777148874148 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5969278407079214969} + - component: {fileID: 2541661784796212459} + - component: {fileID: 507767177238204059} + m_Layer: 8 + m_Name: Box062 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5969278407079214969 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6737527777148874148} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.25125146, y: -0.009732783, z: 0.12122245} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2541661784796212459 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6737527777148874148} + m_Mesh: {fileID: 5062258218628926779, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &507767177238204059 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6737527777148874148} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: dc5f0f285be51334abb02b539c88f62a, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: d3469d2b2aeaf7441b7b8f89a0def34f, 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!1 &7006578376468505495 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1689831961926703101} + - component: {fileID: 7336332236972174694} + - component: {fileID: 8512531010799212966} + m_Layer: 8 + m_Name: Box061 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1689831961926703101 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7006578376468505495} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.25125146, y: -0.009732783, z: 0.37717423} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7336332236972174694 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7006578376468505495} + m_Mesh: {fileID: -2893039221907779070, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &8512531010799212966 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7006578376468505495} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: dc5f0f285be51334abb02b539c88f62a, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: d3469d2b2aeaf7441b7b8f89a0def34f, 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!1 &7059654937423926018 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3894567566653538773} + - component: {fileID: 1591381748722027240} + - component: {fileID: 8767415005978273278} + m_Layer: 8 + m_Name: Box047 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3894567566653538773 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7059654937423926018} + 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: 7146329533284238075} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1591381748722027240 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7059654937423926018} + m_Mesh: {fileID: 347013164166513179, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &8767415005978273278 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7059654937423926018} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, 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!1 &7095593354927853044 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6608449000048233315} + - component: {fileID: 352706364263322881} + - component: {fileID: 4832504361904373497} + m_Layer: 8 + m_Name: Box077 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6608449000048233315 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7095593354927853044} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.15181273, y: -0.009732768, z: 0.24919832} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &352706364263322881 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7095593354927853044} + m_Mesh: {fileID: -1405206685389513613, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &4832504361904373497 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7095593354927853044} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &7931088371457894350 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1400187465821920243} + - component: {fileID: 1020685385352425775} + - component: {fileID: 6767563645598442890} + m_Layer: 11 + m_Name: Cube (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1400187465821920243 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7931088371457894350} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: 0.000623554, y: -0.2565, z: -0.0649} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8329006642640785000} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1020685385352425775 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7931088371457894350} + 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!114 &6767563645598442890 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7931088371457894350} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8012289664612080777 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7146329533284238075} + - component: {fileID: 923785367987638048} + - component: {fileID: 3667427444275214346} + - component: {fileID: 4791102995105332271} + - component: {fileID: 8413419720590134940} + - component: {fileID: 5298629469556293431} + - component: {fileID: 446309968346062009} + - component: {fileID: 4568306300385053372} + - component: {fileID: 6448699132357779571} + m_Layer: 8 + m_Name: 36 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7146329533284238075 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8012289664612080777} + m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.16010304, y: 0, z: -0.00014512241} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3894567566653538773} + - {fileID: 390461046734433574} + - {fileID: 1689831961926703101} + - {fileID: 5969278407079214969} + - {fileID: 8994630737309429409} + - {fileID: 982734377411663026} + - {fileID: 8329006642640785000} + - {fileID: 4038044800373219029} + - {fileID: 6422865332716706198} + - {fileID: 7014779765707653943} + - {fileID: 8694450939412990266} + - {fileID: 1530824467966978378} + - {fileID: 6610210691644107195} + - {fileID: 8812072118303233679} + - {fileID: 1945605638560268543} + - {fileID: 6336592524532655290} + - {fileID: 7672016514092482200} + - {fileID: 8809671119953155800} + - {fileID: 6608449000048233315} + - {fileID: 366532382022251803} + - {fileID: 8139055572363565926} + - {fileID: 5691260313538173412} + - {fileID: 2231832672071597326} + - {fileID: 6198286936450859613} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 90} +--- !u!33 &923785367987638048 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8012289664612080777} + m_Mesh: {fileID: 9220937479983263372, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &3667427444275214346 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8012289664612080777} + 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: af9f09a343f0a264bb1136823665fff9, 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!114 &4791102995105332271 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8012289664612080777} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} + m_Name: + m_EditorClassIdentifier: + deviceList: + id: + deviceName: + deviceCode: + type: 2 + typeStr: + deviceType: 1 + deviceTypeStr: + rackId: + shelfId: + slotId: + devicePosition: + machineModel: + status: + conDeviceName: + rackType: + openFlag: + backDoorFlag: + modelNum: 36 + occupyNum: 16 + residueNum: + operationTime: + directorName: + phone: + manufacturer: + powerProperties: + maintenanceUnit: + machineFrameHigh: + machineFrameWide: + machineFrameThick: + slotNum: + slotSort: + installMethod: + affiliationFrame: + parentSlotName: + slotType: + occupyStatus: + affiliationSlot: + portNum: + cardFunction: + cardType: + runStatus: + tmsId: + remark: + createTime: + createName: +--- !u!114 &8413419720590134940 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8012289664612080777} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} + m_Name: + m_EditorClassIdentifier: + listTargets: [] + frames: [] + PerTier: 42 + PerRow: 5 + volume: 11 + isExit: 0 + isClicked: 0 + isTarget: 0 + isplace: 0 + canPut: 0 +--- !u!114 &5298629469556293431 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8012289664612080777} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!114 &446309968346062009 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8012289664612080777} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + meshRenderers: [] + materials: [] + empty: [] + TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, + type: 3} + TransparentGlow_Shader_half: {fileID: 0} + original_jigui: [] + original_shebei: [] + search_u_wei: 0 + is_jigui: 0 +--- !u!114 &4568306300385053372 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8012289664612080777} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} + m_Name: + m_EditorClassIdentifier: + volume: 11 + selfIcon: {fileID: 21300000, guid: 62e7f5ae089601a40b92e316beb2bae9, type: 3} +--- !u!64 &6448699132357779571 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8012289664612080777} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 9220937479983263372, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!1 &8294625931144455672 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8139055572363565926} + - component: {fileID: 1257426838039339806} + - component: {fileID: 2981013612594905511} + m_Layer: 8 + m_Name: Box079 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8139055572363565926 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8294625931144455672} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.20951569, y: -0.009732753, z: 0.24919832} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7146329533284238075} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1257426838039339806 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8294625931144455672} + m_Mesh: {fileID: -2458614987055752723, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &2981013612594905511 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8294625931144455672} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &8350210951507016492 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7528682677686996205} + - component: {fileID: 5400422533617310279} + - component: {fileID: 3677030935081111118} + m_Layer: 11 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7528682677686996205 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8350210951507016492} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.0031173378, y: -0.25649998, z: 0.0146} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6610210691644107195} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &5400422533617310279 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8350210951507016492} + 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!114 &3677030935081111118 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8350210951507016492} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8402302215139516498 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8315254214794197127} + - component: {fileID: 6526787723998591274} + - component: {fileID: 1969971489605032396} + m_Layer: 11 + m_Name: Cube (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8315254214794197127 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8402302215139516498} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: 0.0006235242, y: -0.2565, z: -0.1025} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8329006642640785000} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6526787723998591274 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8402302215139516498} + 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!114 &1969971489605032396 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8402302215139516498} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8452876003297584435 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5495792005687456119} + - component: {fileID: 1337560223694604528} + - component: {fileID: 2621255439951755549} + m_Layer: 11 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5495792005687456119 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8452876003297584435} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: 0.0006235838, y: -0.2565, z: -0.0012} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8329006642640785000} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1337560223694604528 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8452876003297584435} + 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!114 &2621255439951755549 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8452876003297584435} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8625642089477260159 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1146433055238325415} + - component: {fileID: 8980630863944204384} + - component: {fileID: 3529435629604643717} + m_Layer: 11 + m_Name: Cube (13) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1146433055238325415 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8625642089477260159} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.0031173825, y: -0.2565, z: -0.1294} + m_LocalScale: {x: 0.015, y: 0.00959, z: 0.00923} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6610210691644107195} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8980630863944204384 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8625642089477260159} + 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!114 &3529435629604643717 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8625642089477260159} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 14 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/36.prefab.meta b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/36.prefab.meta index 2e382e523..8d998b53b 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/36.prefab.meta +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/36.prefab.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1ca8a36aa4ba1fd4c9de7297cd6e3944 +guid: 4dffd146a6d89a04499ac9b1c2d8125c PrefabImporter: externalObjects: {} userData: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/4.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/4-old.prefab similarity index 72% rename from GQ_URP/GQ/Assets/prefab/老模型/4.prefab rename to GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/4-old.prefab index 49ce31a0b..21893bcc5 100644 --- a/GQ_URP/GQ/Assets/prefab/老模型/4.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/4-old.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &33977386032789211 +--- !u!1 &80722787565447694 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,93 +8,96 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6119288162883222819} - - component: {fileID: 7400164379704262871} - - component: {fileID: 856716643730617821} - m_Layer: 8 - m_Name: Object001 + - component: {fileID: 4389079732212690687} + - component: {fileID: 380919928658351744} + - component: {fileID: 3834393829610884805} + - component: {fileID: 665472085028028555} + m_Layer: 11 + m_Name: Cube (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6119288162883222819 +--- !u!4 &4389079732212690687 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 33977386032789211} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.24042502, y: 0.30274874, z: -0.24046132} - m_LocalScale: {x: 1, y: 1, z: 1} + m_GameObject: {fileID: 80722787565447694} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.1065, y: -0.2543, z: -0.0004} + m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8571682767415418317} + m_Father: {fileID: 5408536924424171996} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7400164379704262871 -MeshFilter: +--- !u!65 &380919928658351744 +BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 33977386032789211} - m_Mesh: {fileID: -3292925553009838691, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &856716643730617821 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 33977386032789211} + m_GameObject: {fileID: 80722787565447694} + m_Material: {fileID: 0} + m_IsTrigger: 0 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: -5956578104803850452, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6307277589567570940, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 6396727546255612054, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6257702196253466788, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 1368039103165038143, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -8757356216087587297, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -4053520464898690182, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 1038451782150490529, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 1164559979738526386, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -1152147162816932204, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -5309146791756261813, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 1196480866727828669, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - 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!1 &92626018952599314 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3834393829610884805 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80722787565447694} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &665472085028028555 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80722787565447694} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &347455213103238384 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -102,82 +105,30 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2670961046468959056} - - component: {fileID: 283005517828372398} - - component: {fileID: 5032545501821235847} + - component: {fileID: 8927734510468861405} m_Layer: 8 - m_Name: Object014 + m_Name: "\u951A\u70B9" m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2670961046468959056 +--- !u!4 &8927734510468861405 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 92626018952599314} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.38336894, y: 0.16772969, z: 0.011470437} + m_GameObject: {fileID: 347455213103238384} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00055113435, y: -0.5449763, z: -0.4784276} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 13 + m_Father: {fileID: 577575017776698120} + m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &283005517828372398 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 92626018952599314} - m_Mesh: {fileID: 3941715523697911101, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &5032545501821235847 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 92626018952599314} - 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: 4222442362028934484, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - 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!1 &245511055717927824 +--- !u!1 &613000093962910153 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -185,1310 +136,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7489437698606522303} - - component: {fileID: 4228532153024113752} - - component: {fileID: 9167195371703890529} - - component: {fileID: 8939757118729159988} - m_Layer: 11 - m_Name: Cube (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7489437698606522303 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 245511055717927824} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2136, y: -0.2543, z: 0.0015} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4228532153024113752 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 245511055717927824} - 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!114 &9167195371703890529 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 245511055717927824} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 13 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &8939757118729159988 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 245511055717927824} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &651793803853835041 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4654744948336633963} - - component: {fileID: 711994728761686608} - - component: {fileID: 9086921261179904102} - - component: {fileID: 7124636641229970019} - m_Layer: 11 - m_Name: Cube (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4654744948336633963 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 651793803853835041} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2692, y: -0.2543, z: 0.0013} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &711994728761686608 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 651793803853835041} - 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!114 &9086921261179904102 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 651793803853835041} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &7124636641229970019 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 651793803853835041} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &727368846171847519 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5301690302351785913} - - component: {fileID: 5155606717499025299} - - component: {fileID: 2665472242371979696} - - component: {fileID: 2969088980560711608} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5301690302351785913 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 727368846171847519} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1735, y: -0.2543, z: 0.0013} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5155606717499025299 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 727368846171847519} - 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!114 &2665472242371979696 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 727368846171847519} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &2969088980560711608 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 727368846171847519} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &930897528316943841 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2507481323253939542} - - component: {fileID: 3562805587217788975} - - component: {fileID: 194465575771276163} - - component: {fileID: 8903296517616756556} - - component: {fileID: 7313861746920421898} - - component: {fileID: 4037443803896032056} - - component: {fileID: 2083064727079005527} + - component: {fileID: 1210782696795690486} + - component: {fileID: 1803183534007157049} + - component: {fileID: 7394424836706607775} m_Layer: 8 - m_Name: Object013 + m_Name: Object007 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2507481323253939542 +--- !u!4 &1210782696795690486 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 930897528316943841} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.05185745, y: 0.015885487, z: -0.24493846} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4086762172323424189} - - {fileID: 6360844010861976077} - - {fileID: 1433015647720836070} - - {fileID: 930086225133940799} - - {fileID: 1390497074947614941} - - {fileID: 7773085020640443258} - - {fileID: 3167640491024876685} - - {fileID: 539221102784017398} - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3562805587217788975 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 930897528316943841} - m_Mesh: {fileID: 2871469715313346890, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &194465575771276163 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 930897528316943841} - 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: -5956578104803850452, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6307277589567570940, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 3225789695635216771, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6257702196253466788, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 1368039103165038143, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -8757356216087587297, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -4053520464898690182, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 2492713088596817184, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - 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!114 &8903296517616756556 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 930897528316943841} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 3 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7313861746920421898 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 930897528316943841} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!64 &4037443803896032056 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 930897528316943841} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 2871469715313346890, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!114 &2083064727079005527 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 930897528316943841} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &936137195691677742 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5434765532242026272} - - component: {fileID: 1752948021289003324} - - component: {fileID: 4337562474480385327} - - component: {fileID: 6736320113282591894} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5434765532242026272 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 936137195691677742} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2785, y: -0.2543, z: 0.0015} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1752948021289003324 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 936137195691677742} - 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!114 &4337562474480385327 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 936137195691677742} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 15 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &6736320113282591894 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 936137195691677742} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &943701109720627573 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 738981759284771298} - - component: {fileID: 7016641258399158980} - - component: {fileID: 8819333187300790281} - - component: {fileID: 1726065721657449379} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &738981759284771298 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 943701109720627573} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2337, y: -0.2543, z: -0.0004} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8323098589442916757} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7016641258399158980 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 943701109720627573} - 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!114 &8819333187300790281 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 943701109720627573} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &1726065721657449379 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 943701109720627573} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &999494214307488669 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5868631634912608408} - - component: {fileID: 1650557005356071507} - - component: {fileID: 3197713631058774094} - - component: {fileID: 2955118210034263384} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5868631634912608408 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 999494214307488669} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1718, y: -0.2543, z: -0.0004} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8323098589442916757} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1650557005356071507 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 999494214307488669} - 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!114 &3197713631058774094 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 999494214307488669} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &2955118210034263384 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 999494214307488669} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &1029137664595953542 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7773085020640443258} - - component: {fileID: 5184561283187337163} - - component: {fileID: 4002251839188763255} - - component: {fileID: 8696584855073658424} - m_Layer: 11 - m_Name: Cube (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7773085020640443258 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1029137664595953542} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2114, y: -0.2543, z: 0.0008} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2507481323253939542} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5184561283187337163 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1029137664595953542} - 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!114 &4002251839188763255 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1029137664595953542} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &8696584855073658424 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1029137664595953542} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &1281380911921082301 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1275361798343047303} - - component: {fileID: 4217441963864138044} - - component: {fileID: 508034101022457830} - m_Layer: 8 - m_Name: Object005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1275361798343047303 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1281380911921082301} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.13671009, y: 0.24499546, z: -0.24493846} + m_GameObject: {fileID: 613000093962910153} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.051306352, y: -0.016384035, z: 0.035001695} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4217441963864138044 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1281380911921082301} - m_Mesh: {fileID: 9186633843763367028, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &508034101022457830 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1281380911921082301} - 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: -5956578104803850452, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6307277589567570940, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 6396727546255612054, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6257702196253466788, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 1368039103165038143, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -8757356216087587297, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -4053520464898690182, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - 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!1 &1365683616990714555 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 539221102784017398} - - component: {fileID: 7150563738001338763} - - component: {fileID: 4715090751265202070} - - component: {fileID: 6225089454989258178} - m_Layer: 11 - m_Name: Cube (23) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &539221102784017398 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1365683616990714555} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2747, y: -0.2543, z: 0.0008} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2507481323253939542} + m_Father: {fileID: 577575017776698120} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7150563738001338763 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1365683616990714555} - 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!114 &4715090751265202070 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1365683616990714555} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &6225089454989258178 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1365683616990714555} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &1528570755150290898 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3167640491024876685} - - component: {fileID: 4765289355333436658} - - component: {fileID: 5380641672436031011} - - component: {fileID: 631353894712520500} - m_Layer: 11 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3167640491024876685 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1528570755150290898} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2427, y: -0.2543, z: 0.0008} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2507481323253939542} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4765289355333436658 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1528570755150290898} - 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!114 &5380641672436031011 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1528570755150290898} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &631353894712520500 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1528570755150290898} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &1688194180857154542 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1924822792149162625} - - component: {fileID: 7487967203395714391} - - component: {fileID: 644593242689055214} - - component: {fileID: 4211320722589367225} - m_Layer: 11 - m_Name: Cube (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1924822792149162625 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1688194180857154542} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2991, y: -0.2543, z: 0.0013} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7487967203395714391 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1688194180857154542} - 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!114 &644593242689055214 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1688194180857154542} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &4211320722589367225 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1688194180857154542} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &1950165987285784694 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5663784634474542336} - - component: {fileID: 4642685761998079266} - - component: {fileID: 718417744492425495} - m_Layer: 8 - m_Name: Object006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5663784634474542336 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1950165987285784694} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.13671009, y: 0.30277747, z: -0.24046132} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4642685761998079266 +--- !u!33 &1803183534007157049 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1950165987285784694} - m_Mesh: {fileID: -2639241166356525208, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &718417744492425495 + m_GameObject: {fileID: 613000093962910153} + m_Mesh: {fileID: 7733717212360752527, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &7394424836706607775 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1950165987285784694} + m_GameObject: {fileID: 613000093962910153} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1502,14 +189,14 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: -5956578104803850452, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6307277589567570940, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 6396727546255612054, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6257702196253466788, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 1368039103165038143, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -8757356216087587297, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -4053520464898690182, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 1038451782150490529, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: fb6232690c1c1084fb58523d5ee5aeb0, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: f7c4b8b2d4dc9ee4c902e550c5b74afa, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -1531,7 +218,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &2477756837267149529 +--- !u!1 &1121044289703476678 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1539,231 +226,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4562686891317841772} - - component: {fileID: 5043928444263045795} - - component: {fileID: 1837247747550578571} - m_Layer: 8 - m_Name: Object008 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4562686891317841772 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2477756837267149529} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.05185745, y: 0.1223328, z: -0.23659208} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5043928444263045795 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2477756837267149529} - m_Mesh: {fileID: -7647463442239531939, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &1837247747550578571 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2477756837267149529} - 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: -5956578104803850452, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6307277589567570940, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 8896937393846573302, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6257702196253466788, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 1368039103165038143, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -8757356216087587297, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -4053520464898690182, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 4222442362028934484, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - 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!1 &2594662305249433149 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 290843825749419267} - - component: {fileID: 2242813642307735506} - - component: {fileID: 3925508042693092528} - m_Layer: 8 - m_Name: Object004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &290843825749419267 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2594662305249433149} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.13671009, y: 0.27388644, z: -0.24493846} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2242813642307735506 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2594662305249433149} - m_Mesh: {fileID: -8113768720884857512, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &3925508042693092528 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2594662305249433149} - 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: -5956578104803850452, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6307277589567570940, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 6396727546255612054, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6257702196253466788, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 1368039103165038143, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -8757356216087587297, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -4053520464898690182, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - 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!1 &2635555832764114512 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8468648384193802193} - - component: {fileID: 1486989767022854706} - - component: {fileID: 5816749643867353882} - - component: {fileID: 7293379631100737894} + - component: {fileID: 2520500239757985706} + - component: {fileID: 3892680502737665748} + - component: {fileID: 6963728676318057897} + - component: {fileID: 929687455856733233} m_Layer: 11 - m_Name: Cube (16) + m_Name: Cube (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8468648384193802193 +--- !u!4 &2520500239757985706 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2635555832764114512} + m_GameObject: {fileID: 1121044289703476678} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.3104, y: -0.2543, z: 0.0015} + m_LocalPosition: {x: 0.0752, y: -0.2543, z: -0.0004} m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 8 + m_Father: {fileID: 5408536924424171996} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1486989767022854706 +--- !u!65 &3892680502737665748 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2635555832764114512} + m_GameObject: {fileID: 1121044289703476678} 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!114 &5816749643867353882 +--- !u!114 &6963728676318057897 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2635555832764114512} + m_GameObject: {fileID: 1121044289703476678} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1776,7 +284,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 16 + portPosition: 7 deviceId: deviceName: portModel: @@ -1789,13 +297,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &7293379631100737894 +--- !u!114 &929687455856733233 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2635555832764114512} + m_GameObject: {fileID: 1121044289703476678} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -1807,7 +315,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &2995014803923584650 +--- !u!1 &1233708826306868931 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1815,58 +323,58 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8323098589442916757} - - component: {fileID: 8544000227580025903} - - component: {fileID: 222722073074996778} - - component: {fileID: 6613014182719695156} - - component: {fileID: 1218629217407122417} - - component: {fileID: 7511224941928127029} - - component: {fileID: 4512453206635696080} - m_Layer: 8 + - component: {fileID: 5408536924424171996} + - component: {fileID: 5628671931821436006} + - component: {fileID: 4294227561735005795} + - component: {fileID: 7154329610888321405} + - component: {fileID: 2911046565291920312} + - component: {fileID: 5814805680414009980} + - component: {fileID: 436877700149936025} + m_Layer: 13 m_Name: Object009 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8323098589442916757 +--- !u!4 &5408536924424171996 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2995014803923584650} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.05185745, y: 0.07218541, z: -0.24493846} + m_GameObject: {fileID: 1233708826306868931} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.051306352, y: -0.008037657, z: -0.087290436} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 256691139158178184} - - {fileID: 1906694044866705379} - - {fileID: 317021635897548470} - - {fileID: 2893669101147101536} - - {fileID: 5868631634912608408} - - {fileID: 4587345653751072146} - - {fileID: 738981759284771298} - - {fileID: 441815512299408587} - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 10 + - {fileID: 4251572353951943105} + - {fileID: 2520500239757985706} + - {fileID: 4389079732212690687} + - {fileID: 1199942169965340969} + - {fileID: 7637820041974001873} + - {fileID: 515357788729112027} + - {fileID: 3660879224686201259} + - {fileID: 4516768901365972098} + m_Father: {fileID: 577575017776698120} + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8544000227580025903 +--- !u!33 &5628671931821436006 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2995014803923584650} + m_GameObject: {fileID: 1233708826306868931} m_Mesh: {fileID: 4944557015945844418, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &222722073074996778 +--- !u!23 &4294227561735005795 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2995014803923584650} + m_GameObject: {fileID: 1233708826306868931} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1880,14 +388,14 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: -5956578104803850452, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6307277589567570940, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -5246455378973462045, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6257702196253466788, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 1368039103165038143, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -8757356216087587297, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -4053520464898690182, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 2492713088596817184, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: b04ebe66322f21045bd7a383224822cd, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 10ac57f42847b114584025b79f149fd9, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -1909,13 +417,13 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &6613014182719695156 +--- !u!114 &7154329610888321405 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2995014803923584650} + m_GameObject: {fileID: 1233708826306868931} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -1967,26 +475,26 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &1218629217407122417 +--- !u!114 &2911046565291920312 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2995014803923584650} + m_GameObject: {fileID: 1233708826306868931} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!64 &7511224941928127029 +--- !u!64 &5814805680414009980 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2995014803923584650} + m_GameObject: {fileID: 1233708826306868931} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -1994,13 +502,13 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 4944557015945844418, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!114 &4512453206635696080 +--- !u!114 &436877700149936025 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2995014803923584650} + m_GameObject: {fileID: 1233708826306868931} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -2012,7 +520,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 0, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &3025626359560349039 +--- !u!1 &1257140467935024422 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2020,10 +528,10 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 9007131626296424314} - - component: {fileID: 5066897592313767291} - - component: {fileID: 4452420466733183607} - - component: {fileID: 7658671646325186945} + - component: {fileID: 4931634842249692979} + - component: {fileID: 9141833625431102770} + - component: {fileID: 379781690842759742} + - component: {fileID: 5964592145560998344} m_Layer: 11 m_Name: Cube (20) m_TagString: Untagged @@ -2031,41 +539,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &9007131626296424314 +--- !u!4 &4931634842249692979 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3025626359560349039} + m_GameObject: {fileID: 1257140467935024422} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} m_LocalPosition: {x: -0.1747, y: -0.2543, z: 0.0015} m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7719317737665368209} + m_Father: {fileID: 6030296991647703256} m_RootOrder: 12 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5066897592313767291 +--- !u!65 &9141833625431102770 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3025626359560349039} + m_GameObject: {fileID: 1257140467935024422} 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!114 &4452420466733183607 +--- !u!114 &379781690842759742 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3025626359560349039} + m_GameObject: {fileID: 1257140467935024422} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2091,13 +599,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &7658671646325186945 +--- !u!114 &5964592145560998344 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3025626359560349039} + m_GameObject: {fileID: 1257140467935024422} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -2109,7 +617,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &3236353059204819363 +--- !u!1 &1470064953347594730 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2117,10 +625,10 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4086762172323424189} - - component: {fileID: 7562490932804864547} - - component: {fileID: 144512896466554052} - - component: {fileID: 8525129634460987865} + - component: {fileID: 15891480371091444} + - component: {fileID: 5799564103250639466} + - component: {fileID: 4219314342492126349} + - component: {fileID: 5674594356885832080} m_Layer: 11 m_Name: Cube (16) m_TagString: Untagged @@ -2128,41 +636,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4086762172323424189 +--- !u!4 &15891480371091444 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3236353059204819363} + m_GameObject: {fileID: 1470064953347594730} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} m_LocalPosition: {x: 0.0509, y: -0.2543, z: 0.0008} m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2507481323253939542} + m_Father: {fileID: 1892410448931982623} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7562490932804864547 +--- !u!65 &5799564103250639466 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3236353059204819363} + m_GameObject: {fileID: 1470064953347594730} 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!114 &144512896466554052 +--- !u!114 &4219314342492126349 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3236353059204819363} + m_GameObject: {fileID: 1470064953347594730} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2188,13 +696,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &8525129634460987865 +--- !u!114 &5674594356885832080 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3236353059204819363} + m_GameObject: {fileID: 1470064953347594730} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -2206,7 +714,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &3394641522363074818 +--- !u!1 &1698804590248474955 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2214,9 +722,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6688860450599134775} - - component: {fileID: 185490746350256435} - - component: {fileID: 68298273324125362} + - component: {fileID: 7231926236873807486} + - component: {fileID: 4187665291833667962} + - component: {fileID: 4070631011043507451} m_Layer: 8 m_Name: Object002 m_TagString: Untagged @@ -2224,362 +732,78 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6688860450599134775 +--- !u!4 &7231926236873807486 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3394641522363074818} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.24042502, y: 0.2738577, z: -0.24493846} + m_GameObject: {fileID: 1698804590248474955} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.23987395, y: -0.008037686, z: 0.114381865} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &185490746350256435 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3394641522363074818} - m_Mesh: {fileID: -3996760141626369306, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &68298273324125362 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3394641522363074818} - 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: -5956578104803850452, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6307277589567570940, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 6396727546255612054, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6257702196253466788, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 1368039103165038143, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -8757356216087587297, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -4053520464898690182, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - 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!1 &3462913980498872704 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2901160171421853119} - - component: {fileID: 2416564252278698352} - - component: {fileID: 6778246789072360150} - m_Layer: 8 - m_Name: Object007 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2901160171421853119 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3462913980498872704} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.05185745, y: 0.19447754, z: -0.23659208} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2416564252278698352 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3462913980498872704} - m_Mesh: {fileID: 7733717212360752527, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &6778246789072360150 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3462913980498872704} - 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: -5956578104803850452, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6307277589567570940, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 8896937393846573302, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6257702196253466788, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 1368039103165038143, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -8757356216087587297, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -4053520464898690182, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 4222442362028934484, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - 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!1 &3963680504501194127 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1906694044866705379} - - component: {fileID: 1047924700110016157} - - component: {fileID: 6353259563102086624} - - component: {fileID: 3776695362703858808} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1906694044866705379 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3963680504501194127} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0752, y: -0.2543, z: -0.0004} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8323098589442916757} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1047924700110016157 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3963680504501194127} - 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!114 &6353259563102086624 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3963680504501194127} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &3776695362703858808 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3963680504501194127} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &4148278486323173959 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 317021635897548470} - - component: {fileID: 4451281654624970441} - - component: {fileID: 989082606102789772} - - component: {fileID: 3581301689374142658} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &317021635897548470 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4148278486323173959} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1065, y: -0.2543, z: -0.0004} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8323098589442916757} + m_Father: {fileID: 577575017776698120} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4451281654624970441 -BoxCollider: +--- !u!33 &4187665291833667962 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4148278486323173959} - 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!114 &989082606102789772 -MonoBehaviour: + m_GameObject: {fileID: 1698804590248474955} + m_Mesh: {fileID: -3996760141626369306, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &4070631011043507451 +MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4148278486323173959} + m_GameObject: {fileID: 1698804590248474955} m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &3581301689374142658 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4148278486323173959} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &4349638383414181049 + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &1940399479160349328 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2587,30 +811,89 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4857909006872624532} + - component: {fileID: 567038148693655333} + - component: {fileID: 9038952663750257386} + - component: {fileID: 2445554288375478210} m_Layer: 8 - m_Name: "\u951A\u70B9" + m_Name: Object008 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4857909006872624532 +--- !u!4 &567038148693655333 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4349638383414181049} + m_GameObject: {fileID: 1940399479160349328} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -0.31895176, z: 0.29200006} + m_LocalPosition: {x: -0.051306352, y: -0.016384035, z: -0.03714305} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 15 + m_Father: {fileID: 577575017776698120} + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &4733327074226593442 +--- !u!33 &9038952663750257386 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1940399479160349328} + m_Mesh: {fileID: -7647463442239531939, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &2445554288375478210 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1940399479160349328} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: fb6232690c1c1084fb58523d5ee5aeb0, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: f7c4b8b2d4dc9ee4c902e550c5b74afa, 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!1 &2025508966895916569 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2618,52 +901,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6360844010861976077} - - component: {fileID: 8887534476703300226} - - component: {fileID: 6830989607844473917} - - component: {fileID: 2614637192488719254} + - component: {fileID: 5551182878884274072} + - component: {fileID: 3183399437337096827} + - component: {fileID: 7509280993610154835} + - component: {fileID: 6753191198577002799} m_Layer: 11 - m_Name: Cube (17) + m_Name: Cube (16) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6360844010861976077 +--- !u!4 &5551182878884274072 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4733327074226593442} + m_GameObject: {fileID: 2025508966895916569} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0834, y: -0.2543, z: 0.0008} + m_LocalPosition: {x: -0.3104, y: -0.2543, z: 0.0015} m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2507481323253939542} - m_RootOrder: 1 + m_Father: {fileID: 6030296991647703256} + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8887534476703300226 +--- !u!65 &3183399437337096827 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4733327074226593442} + m_GameObject: {fileID: 2025508966895916569} 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!114 &6830989607844473917 +--- !u!114 &7509280993610154835 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4733327074226593442} + m_GameObject: {fileID: 2025508966895916569} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2676,7 +959,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 7 + portPosition: 16 deviceId: deviceName: portModel: @@ -2689,13 +972,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &2614637192488719254 +--- !u!114 &6753191198577002799 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4733327074226593442} + m_GameObject: {fileID: 2025508966895916569} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -2707,7 +990,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &4793071152068577894 +--- !u!1 &2057434891373717108 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2715,96 +998,88 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2893669101147101536} - - component: {fileID: 3911008752236869225} - - component: {fileID: 8449668616136583559} - - component: {fileID: 906438341605309160} - m_Layer: 11 - m_Name: Cube (3) + - component: {fileID: 4361214347805381962} + - component: {fileID: 2859643529088024475} + - component: {fileID: 1077866060692526329} + m_Layer: 8 + m_Name: Object004 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2893669101147101536 +--- !u!4 &4361214347805381962 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4793071152068577894} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1388, y: -0.2543, z: -0.0004} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_GameObject: {fileID: 2057434891373717108} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.13726121, y: -0.008037642, z: 0.11441058} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8323098589442916757} - m_RootOrder: 3 + m_Father: {fileID: 577575017776698120} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3911008752236869225 -BoxCollider: +--- !u!33 &2859643529088024475 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4793071152068577894} - 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!114 &8449668616136583559 -MonoBehaviour: + m_GameObject: {fileID: 2057434891373717108} + m_Mesh: {fileID: -8113768720884857512, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &1077866060692526329 +MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4793071152068577894} + m_GameObject: {fileID: 2057434891373717108} m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &906438341605309160 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4793071152068577894} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &5638544397785728171 + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &2566783638257133631 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2812,96 +1087,89 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 930086225133940799} - - component: {fileID: 4326488261108326864} - - component: {fileID: 6253139242094938541} - - component: {fileID: 839479666084151439} - m_Layer: 11 - m_Name: Cube (19) + - component: {fileID: 8509168459568219465} + - component: {fileID: 8710330731630884203} + - component: {fileID: 3564379878329467230} + m_Layer: 8 + m_Name: Object006 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &930086225133940799 +--- !u!4 &8509168459568219465 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5638544397785728171} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1486, y: -0.2543, z: 0.0008} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_GameObject: {fileID: 2566783638257133631} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.13726121, y: -0.012514785, z: 0.1433016} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2507481323253939542} - m_RootOrder: 3 + m_Father: {fileID: 577575017776698120} + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4326488261108326864 -BoxCollider: +--- !u!33 &8710330731630884203 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5638544397785728171} - 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!114 &6253139242094938541 -MonoBehaviour: + m_GameObject: {fileID: 2566783638257133631} + m_Mesh: {fileID: -2639241166356525208, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &3564379878329467230 +MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5638544397785728171} + m_GameObject: {fileID: 2566783638257133631} m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &839479666084151439 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5638544397785728171} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &5982001286415446727 + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: b5151be299690364ea2211f61267eb84, 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!1 &2974359938453446644 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2909,10 +1177,99 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8772761054049937775} - - component: {fileID: 2828570938485963437} - - component: {fileID: 4292234847808790166} - - component: {fileID: 3312286544594546914} + - component: {fileID: 2971693442523531470} + - component: {fileID: 146420467016438133} + - component: {fileID: 4576655501421727663} + m_Layer: 8 + m_Name: Object005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2971693442523531470 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2974359938453446644} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.13726121, y: -0.008037642, z: 0.08551961} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 577575017776698120} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &146420467016438133 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2974359938453446644} + m_Mesh: {fileID: 9186633843763367028, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &4576655501421727663 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2974359938453446644} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &3061479897255078642 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4608553514069377983} + - component: {fileID: 6608058737036214722} + - component: {fileID: 8782076113242976223} + - component: {fileID: 7992930959765020043} m_Layer: 11 m_Name: Cube (23) m_TagString: Untagged @@ -2920,41 +1277,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8772761054049937775 +--- !u!4 &4608553514069377983 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5982001286415446727} + m_GameObject: {fileID: 3061479897255078642} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.0829, y: -0.2543, z: 0.0015} + m_LocalPosition: {x: 0.2747, y: -0.2543, z: 0.0008} m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 15 + m_Father: {fileID: 1892410448931982623} + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2828570938485963437 +--- !u!65 &6608058737036214722 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5982001286415446727} + m_GameObject: {fileID: 3061479897255078642} 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!114 &4292234847808790166 +--- !u!114 &8782076113242976223 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5982001286415446727} + m_GameObject: {fileID: 3061479897255078642} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2967,7 +1324,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 9 + portPosition: 1 deviceId: deviceName: portModel: @@ -2980,13 +1337,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &3312286544594546914 +--- !u!114 &7992930959765020043 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5982001286415446727} + m_GameObject: {fileID: 3061479897255078642} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -2998,7 +1355,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &6297733951492695600 +--- !u!1 &3294944687322214299 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3006,52 +1363,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5786497821360035071} - - component: {fileID: 6404378026973549800} - - component: {fileID: 524691294686569609} - - component: {fileID: 774076276752979325} + - component: {fileID: 1403668992278705348} + - component: {fileID: 8840241538051585211} + - component: {fileID: 8224853486854516330} + - component: {fileID: 3480271756856926077} m_Layer: 11 - m_Name: Cube (18) + m_Name: Cube (22) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5786497821360035071 +--- !u!4 &1403668992278705348 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6297733951492695600} + m_GameObject: {fileID: 3294944687322214299} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2456, y: -0.2543, z: 0.0015} + m_LocalPosition: {x: 0.2427, y: -0.2543, z: 0.0008} m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 10 + m_Father: {fileID: 1892410448931982623} + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6404378026973549800 +--- !u!65 &8840241538051585211 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6297733951492695600} + m_GameObject: {fileID: 3294944687322214299} 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!114 &524691294686569609 +--- !u!114 &8224853486854516330 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6297733951492695600} + m_GameObject: {fileID: 3294944687322214299} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3064,7 +1421,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 14 + portPosition: 2 deviceId: deviceName: portModel: @@ -3077,13 +1434,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &774076276752979325 +--- !u!114 &3480271756856926077 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6297733951492695600} + m_GameObject: {fileID: 3294944687322214299} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -3095,7 +1452,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &6358310446362135734 +--- !u!1 &3450538058778246055 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3103,141 +1460,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7232420567735254370} - - component: {fileID: 5965786651923390549} - - component: {fileID: 6591637297113177698} - m_Layer: 8 - m_Name: Object003 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7232420567735254370 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6358310446362135734} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.24042502, y: 0.24496673, z: -0.24493846} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5965786651923390549 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6358310446362135734} - m_Mesh: {fileID: -3531946766418785785, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &6591637297113177698 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6358310446362135734} - 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: -5956578104803850452, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6307277589567570940, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 6396727546255612054, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6257702196253466788, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 1368039103165038143, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -8757356216087587297, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -4053520464898690182, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - 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!1 &6428291541732870265 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3306442754570312491} - - component: {fileID: 3898101949289865387} - - component: {fileID: 6500549396191679954} - - component: {fileID: 996148645878138305} + - component: {fileID: 2466061219607243464} + - component: {fileID: 6874172823955508510} + - component: {fileID: 3494058420589762983} + - component: {fileID: 215874122595437552} m_Layer: 11 - m_Name: Cube (21) + m_Name: Cube (15) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3306442754570312491 +--- !u!4 &2466061219607243464 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6428291541732870265} + m_GameObject: {fileID: 3450538058778246055} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.1437, y: -0.2543, z: 0.0015} + m_LocalPosition: {x: 0.2991, y: -0.2543, z: 0.0013} m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 13 + m_Father: {fileID: 6030296991647703256} + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3898101949289865387 +--- !u!65 &6874172823955508510 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6428291541732870265} + m_GameObject: {fileID: 3450538058778246055} 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!114 &6500549396191679954 +--- !u!114 &3494058420589762983 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6428291541732870265} + m_GameObject: {fileID: 3450538058778246055} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3250,7 +1518,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 11 + portPosition: 1 deviceId: deviceName: portModel: @@ -3263,13 +1531,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &996148645878138305 +--- !u!114 &215874122595437552 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6428291541732870265} + m_GameObject: {fileID: 3450538058778246055} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -3281,7 +1549,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &6469046747684259767 +--- !u!1 &3568204122122099560 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3289,52 +1557,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4587345653751072146} - - component: {fileID: 6175563528102823729} - - component: {fileID: 6846545810961428484} - - component: {fileID: 4962344923929559779} + - component: {fileID: 8653548361083263010} + - component: {fileID: 3562046942775364121} + - component: {fileID: 5085785547494690863} + - component: {fileID: 6507885056010267178} m_Layer: 11 - m_Name: Cube (5) + m_Name: Cube (14) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4587345653751072146 +--- !u!4 &8653548361083263010 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6469046747684259767} + m_GameObject: {fileID: 3568204122122099560} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2032, y: -0.2543, z: -0.0004} + m_LocalPosition: {x: 0.2692, y: -0.2543, z: 0.0013} m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8323098589442916757} - m_RootOrder: 5 + m_Father: {fileID: 6030296991647703256} + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6175563528102823729 +--- !u!65 &3562046942775364121 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6469046747684259767} + m_GameObject: {fileID: 3568204122122099560} 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!114 &6846545810961428484 +--- !u!114 &5085785547494690863 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6469046747684259767} + m_GameObject: {fileID: 3568204122122099560} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3347,7 +1615,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 3 + portPosition: 2 deviceId: deviceName: portModel: @@ -3360,13 +1628,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &4962344923929559779 +--- !u!114 &6507885056010267178 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6469046747684259767} + m_GameObject: {fileID: 3568204122122099560} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -3378,7 +1646,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &6473895387068723067 +--- !u!1 &3645469972805454614 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3386,135 +1654,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3232267453720805657} - - component: {fileID: 3582549919663129681} - - component: {fileID: 2877970087529087680} - m_Layer: 8 - m_Name: Object015 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3232267453720805657 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6473895387068723067} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.41386184, y: 0.024925753, z: 0.0050615966} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3582549919663129681 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6473895387068723067} - m_Mesh: {fileID: 4154864533425439726, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &2877970087529087680 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6473895387068723067} - 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: -4053520464898690182, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - 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!1 &6600928841082735868 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 711119303161318467} - - component: {fileID: 1400055381688596878} - - component: {fileID: 5904575701487219384} - - component: {fileID: 3722565850701116632} + - component: {fileID: 8150405373323481072} + - component: {fileID: 9152169050687379418} + - component: {fileID: 2049917784796748281} + - component: {fileID: 1277684252820324337} m_Layer: 11 - m_Name: Cube (9) + m_Name: Cube (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &711119303161318467 +--- !u!4 &8150405373323481072 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6600928841082735868} + m_GameObject: {fileID: 3645469972805454614} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1082, y: -0.2543, z: 0.0013} + m_LocalPosition: {x: 0.1735, y: -0.2543, z: 0.0013} m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 1 + m_Father: {fileID: 6030296991647703256} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1400055381688596878 +--- !u!65 &9152169050687379418 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6600928841082735868} + m_GameObject: {fileID: 3645469972805454614} 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!114 &5904575701487219384 +--- !u!114 &2049917784796748281 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6600928841082735868} + m_GameObject: {fileID: 3645469972805454614} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3527,7 +1712,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 7 + portPosition: 5 deviceId: deviceName: portModel: @@ -3540,13 +1725,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &3722565850701116632 +--- !u!114 &1277684252820324337 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6600928841082735868} + m_GameObject: {fileID: 3645469972805454614} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -3558,7 +1743,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &6840686421572110235 +--- !u!1 &3775243414420909480 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3566,66 +1751,58 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7719317737665368209} - - component: {fileID: 1744555152859660013} - - component: {fileID: 3474827854092236728} - - component: {fileID: 7044389591273042014} - - component: {fileID: 641480797925638898} - - component: {fileID: 8377968497239614121} - - component: {fileID: 3695271070619703819} - m_Layer: 8 - m_Name: Object010 + - component: {fileID: 1892410448931982623} + - component: {fileID: 720238882172076134} + - component: {fileID: 4196665277394301898} + - component: {fileID: 4828334606785369861} + - component: {fileID: 6705687491089549891} + - component: {fileID: 38434541403970417} + - component: {fileID: 2623318100029644062} + m_Layer: 13 + m_Name: Object013 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7719317737665368209 +--- !u!4 &1892410448931982623 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6840686421572110235} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.05185745, y: 0.044035427, z: -0.24493846} + m_GameObject: {fileID: 3775243414420909480} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.051306352, y: -0.008037657, z: -0.14359036} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 4120886974038851864} - - {fileID: 711119303161318467} - - {fileID: 8721330264735139712} - - {fileID: 5301690302351785913} - - {fileID: 7133978855568702785} - - {fileID: 4666053687880131375} - - {fileID: 4654744948336633963} - - {fileID: 1924822792149162625} - - {fileID: 8468648384193802193} - - {fileID: 5434765532242026272} - - {fileID: 5786497821360035071} - - {fileID: 7489437698606522303} - - {fileID: 9007131626296424314} - - {fileID: 3306442754570312491} - - {fileID: 749941280761715461} - - {fileID: 8772761054049937775} - m_Father: {fileID: 8571682767415418317} + - {fileID: 15891480371091444} + - {fileID: 6974154227244821060} + - {fileID: 3129005167133080495} + - {fileID: 3776050321772085366} + - {fileID: 3153474134140704916} + - {fileID: 6003551294449568563} + - {fileID: 1403668992278705348} + - {fileID: 4608553514069377983} + m_Father: {fileID: 577575017776698120} m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1744555152859660013 +--- !u!33 &720238882172076134 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6840686421572110235} - m_Mesh: {fileID: 7643229109163234770, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &3474827854092236728 + m_GameObject: {fileID: 3775243414420909480} + m_Mesh: {fileID: 2871469715313346890, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &4196665277394301898 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6840686421572110235} + m_GameObject: {fileID: 3775243414420909480} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -3639,16 +1816,14 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 6396727546255612054, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 3225789695635216771, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 1368039103165038143, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -8757356216087587297, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -4053520464898690182, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -5956578104803850452, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6307277589567570940, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6257702196253466788, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -8757356216087587297, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 2492713088596817184, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 256f4f5dccef8754b9365a690d0bfac0, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 10ac57f42847b114584025b79f149fd9, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -3670,13 +1845,13 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &7044389591273042014 +--- !u!114 &4828334606785369861 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6840686421572110235} + m_GameObject: {fileID: 3775243414420909480} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -3693,7 +1868,7 @@ MonoBehaviour: rackId: shelfId: slotId: - devicePosition: 2 + devicePosition: 3 machineModel: status: conDeviceName: @@ -3728,40 +1903,40 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &641480797925638898 +--- !u!114 &6705687491089549891 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6840686421572110235} + m_GameObject: {fileID: 3775243414420909480} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!64 &8377968497239614121 +--- !u!64 &38434541403970417 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6840686421572110235} + m_GameObject: {fileID: 3775243414420909480} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 4 m_Convex: 0 m_CookingOptions: 30 - m_Mesh: {fileID: 7643229109163234770, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!114 &3695271070619703819 + m_Mesh: {fileID: 2871469715313346890, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!114 &2623318100029644062 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6840686421572110235} + m_GameObject: {fileID: 3775243414420909480} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -3773,7 +1948,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 0, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &7062540019897201554 +--- !u!1 &3779292413795084391 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3781,52 +1956,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1433015647720836070} - - component: {fileID: 7275442455681335346} - - component: {fileID: 6451327595952553385} - - component: {fileID: 9138554921358340210} + - component: {fileID: 8350597060180619113} + - component: {fileID: 2368002028733045109} + - component: {fileID: 341556321853214054} + - component: {fileID: 7346315263436463327} m_Layer: 11 - m_Name: Cube (18) + m_Name: Cube (17) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1433015647720836070 +--- !u!4 &8350597060180619113 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7062540019897201554} + m_GameObject: {fileID: 3779292413795084391} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1151, y: -0.2543, z: 0.0008} + m_LocalPosition: {x: -0.2785, y: -0.2543, z: 0.0015} m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2507481323253939542} - m_RootOrder: 2 + m_Father: {fileID: 6030296991647703256} + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7275442455681335346 +--- !u!65 &2368002028733045109 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7062540019897201554} + m_GameObject: {fileID: 3779292413795084391} 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!114 &6451327595952553385 +--- !u!114 &341556321853214054 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7062540019897201554} + m_GameObject: {fileID: 3779292413795084391} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3839,7 +2014,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 6 + portPosition: 15 deviceId: deviceName: portModel: @@ -3852,13 +2027,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &9138554921358340210 +--- !u!114 &7346315263436463327 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7062540019897201554} + m_GameObject: {fileID: 3779292413795084391} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -3870,7 +2045,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &7366051710844972696 +--- !u!1 &3842000449954976724 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3878,246 +2053,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4120886974038851864} - - component: {fileID: 4234038456838736933} - - component: {fileID: 1304490805782478371} - - component: {fileID: 3366950140067454411} + - component: {fileID: 7637820041974001873} + - component: {fileID: 3344091384027662874} + - component: {fileID: 1508673054639716359} + - component: {fileID: 1264911052333602065} m_Layer: 11 - m_Name: Cube (8) + m_Name: Cube (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4120886974038851864 +--- !u!4 &7637820041974001873 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7366051710844972696} + m_GameObject: {fileID: 3842000449954976724} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0773, y: -0.2543, z: 0.0013} + m_LocalPosition: {x: 0.1718, y: -0.2543, z: -0.0004} m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4234038456838736933 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7366051710844972696} - 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!114 &1304490805782478371 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7366051710844972696} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &3366950140067454411 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7366051710844972696} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &7560009664155383910 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8721330264735139712} - - component: {fileID: 3626846429331798264} - - component: {fileID: 2961121215612882026} - - component: {fileID: 8082196369412465485} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8721330264735139712 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7560009664155383910} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.141, y: -0.2543, z: 0.0013} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3626846429331798264 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7560009664155383910} - 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!114 &2961121215612882026 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7560009664155383910} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &8082196369412465485 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7560009664155383910} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &8156525238099895543 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7133978855568702785} - - component: {fileID: 4538664369774238790} - - component: {fileID: 8009205424455887542} - - component: {fileID: 6168655984200512602} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7133978855568702785 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8156525238099895543} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2049, y: -0.2543, z: 0.0013} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} + m_Father: {fileID: 5408536924424171996} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4538664369774238790 +--- !u!65 &3344091384027662874 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8156525238099895543} + m_GameObject: {fileID: 3842000449954976724} 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!114 &8009205424455887542 +--- !u!114 &1508673054639716359 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8156525238099895543} + m_GameObject: {fileID: 3842000449954976724} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4143,13 +2124,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &6168655984200512602 +--- !u!114 &1264911052333602065 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8156525238099895543} + m_GameObject: {fileID: 3842000449954976724} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -4161,7 +2142,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &8225483298702712645 +--- !u!1 &3861799934267492668 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4169,140 +2150,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4769852930367341830} - - component: {fileID: 2959731575672799572} - - component: {fileID: 7460240453211724731} - m_Layer: 8 - m_Name: Box034 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4769852930367341830 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8225483298702712645} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.3765682, y: 0.15951674, z: -0.24793866} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2959731575672799572 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8225483298702712645} - m_Mesh: {fileID: 4435042010609528433, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &7460240453211724731 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8225483298702712645} - 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: -6257702196253466788, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -4339531452289843980, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 1368039103165038143, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -6307277589567570940, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -5956578104803850452, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -8757356216087587297, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - 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!1 &8272575399637660694 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1390497074947614941} - - component: {fileID: 8579186776769484568} - - component: {fileID: 3521840246812327882} - - component: {fileID: 1657180142597618562} + - component: {fileID: 3660879224686201259} + - component: {fileID: 6480525592513307277} + - component: {fileID: 4822226492237717568} + - component: {fileID: 3421427419950672874} m_Layer: 11 - m_Name: Cube (20) + m_Name: Cube (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1390497074947614941 +--- !u!4 &3660879224686201259 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8272575399637660694} + m_GameObject: {fileID: 3861799934267492668} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1787, y: -0.2543, z: 0.0008} + m_LocalPosition: {x: 0.2337, y: -0.2543, z: -0.0004} m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2507481323253939542} - m_RootOrder: 4 + m_Father: {fileID: 5408536924424171996} + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8579186776769484568 +--- !u!65 &6480525592513307277 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8272575399637660694} + m_GameObject: {fileID: 3861799934267492668} 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!114 &3521840246812327882 +--- !u!114 &4822226492237717568 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8272575399637660694} + m_GameObject: {fileID: 3861799934267492668} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4315,7 +2208,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 4 + portPosition: 2 deviceId: deviceName: portModel: @@ -4328,13 +2221,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &1657180142597618562 +--- !u!114 &3421427419950672874 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8272575399637660694} + m_GameObject: {fileID: 3861799934267492668} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -4346,7 +2239,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &8372871209293559637 +--- !u!1 &3947219240013641679 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4354,431 +2247,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 749941280761715461} - - component: {fileID: 9057038095319016405} - - component: {fileID: 2024357538392255168} - - component: {fileID: 5182547478642042796} + - component: {fileID: 6003551294449568563} + - component: {fileID: 9186268708546402178} + - component: {fileID: 1082472957121278526} + - component: {fileID: 4629441370096608881} m_Layer: 11 - m_Name: Cube (22) + m_Name: Cube (21) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &749941280761715461 +--- !u!4 &6003551294449568563 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8372871209293559637} + m_GameObject: {fileID: 3947219240013641679} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.1119, y: -0.2543, z: 0.0015} + m_LocalPosition: {x: 0.2114, y: -0.2543, z: 0.0008} m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7719317737665368209} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9057038095319016405 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8372871209293559637} - 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!114 &2024357538392255168 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8372871209293559637} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &5182547478642042796 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8372871209293559637} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &8664426649095418106 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3498339062783566657} - - component: {fileID: 6237592032279893184} - - component: {fileID: 5341618637215599406} - m_Layer: 8 - m_Name: 4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3498339062783566657 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8664426649095418106} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.0005511009, y: 0.15947585, z: -0.25297612} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8571682767415418317} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6237592032279893184 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8664426649095418106} - m_Mesh: {fileID: -2628482395200241503, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &5341618637215599406 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8664426649095418106} - 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: -4053520464898690182, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -5309146791756261813, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: -1152147162816932204, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 1164559979738526386, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 1196480866727828669, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - - {fileID: 3274929075364713951, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} - 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!1 &8759903042995600867 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 441815512299408587} - - component: {fileID: 7554120571346381566} - - component: {fileID: 6205435573119207322} - - component: {fileID: 6663869052387647278} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &441815512299408587 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8759903042995600867} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2656, y: -0.2543, z: -0.0004} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8323098589442916757} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7554120571346381566 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8759903042995600867} - 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!114 &6205435573119207322 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8759903042995600867} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &6663869052387647278 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8759903042995600867} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &8858739238434995973 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 256691139158178184} - - component: {fileID: 6345200922319036877} - - component: {fileID: 2856557271273895409} - - component: {fileID: 2686212444096006269} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &256691139158178184 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8858739238434995973} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0429, y: -0.2543, z: -0.0004} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8323098589442916757} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6345200922319036877 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8858739238434995973} - 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!114 &2856557271273895409 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8858739238434995973} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &2686212444096006269 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8858739238434995973} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &8893563343369143354 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4666053687880131375} - - component: {fileID: 7012004761249954026} - - component: {fileID: 1483555348063263324} - - component: {fileID: 5544388338094828856} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4666053687880131375 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8893563343369143354} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.237, y: -0.2543, z: 0.0013} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7719317737665368209} + m_Father: {fileID: 1892410448931982623} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7012004761249954026 +--- !u!65 &9186268708546402178 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8893563343369143354} + m_GameObject: {fileID: 3947219240013641679} 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!114 &1483555348063263324 +--- !u!114 &1082472957121278526 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8893563343369143354} + m_GameObject: {fileID: 3947219240013641679} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4804,13 +2318,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &5544388338094828856 +--- !u!114 &4629441370096608881 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8893563343369143354} + m_GameObject: {fileID: 3947219240013641679} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -4822,7 +2336,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &9061080424600717175 +--- !u!1 &4104991461694457490 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4830,57 +2344,388 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8571682767415418317} - - component: {fileID: 7742252148123957479} - - component: {fileID: 2211117576792026150} - - component: {fileID: 7083236633090769758} - - component: {fileID: 765448918725412949} - - component: {fileID: 7579292751409468113} + - component: {fileID: 7810219860625329514} + - component: {fileID: 6790803677812338846} + - component: {fileID: 3705554859464082836} m_Layer: 8 - m_Name: 4 + m_Name: Object001 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8571682767415418317 +--- !u!4 &7810219860625329514 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9061080424600717175} - m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} + m_GameObject: {fileID: 4104991461694457490} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.23987395, y: -0.01251483, z: 0.14327289} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 3498339062783566657} - - {fileID: 4769852930367341830} - - {fileID: 6119288162883222819} - - {fileID: 6688860450599134775} - - {fileID: 7232420567735254370} - - {fileID: 290843825749419267} - - {fileID: 1275361798343047303} - - {fileID: 5663784634474542336} - - {fileID: 2901160171421853119} - - {fileID: 4562686891317841772} - - {fileID: 8323098589442916757} - - {fileID: 7719317737665368209} - - {fileID: 2507481323253939542} - - {fileID: 2670961046468959056} - - {fileID: 3232267453720805657} - - {fileID: 4857909006872624532} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &7742252148123957479 + m_Children: [] + m_Father: {fileID: 577575017776698120} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6790803677812338846 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4104991461694457490} + m_Mesh: {fileID: -3292925553009838691, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &3705554859464082836 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4104991461694457490} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: b5151be299690364ea2211f61267eb84, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, 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!1 &4163154968931395419 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2134219513638300441} + - component: {fileID: 4279015273392801767} + - component: {fileID: 9032071053746455246} + m_Layer: 8 + m_Name: Object014 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2134219513638300441 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4163154968931395419} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.38392013, y: -0.26444653, z: 0.008253843} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 577575017776698120} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4279015273392801767 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4163154968931395419} + m_Mesh: {fileID: 3941715523697911101, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &9032071053746455246 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4163154968931395419} + 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: f7c4b8b2d4dc9ee4c902e550c5b74afa, 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!1 &4316514140573252569 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6872702331171008502} + - component: {fileID: 153595359715646481} + - component: {fileID: 5167605842503909928} + - component: {fileID: 4944679714128213373} + m_Layer: 11 + m_Name: Cube (19) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6872702331171008502 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4316514140573252569} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.2136, y: -0.2543, z: 0.0015} + m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6030296991647703256} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &153595359715646481 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4316514140573252569} + 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!114 &5167605842503909928 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9061080424600717175} + m_GameObject: {fileID: 4316514140573252569} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 13 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &4944679714128213373 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4316514140573252569} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &4661603421284761779 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 577575017776698120} + - component: {fileID: 7935075753638995081} + - component: {fileID: 8263630764826540903} + - component: {fileID: 6923580699325254496} + - component: {fileID: 7070574128927241145} + - component: {fileID: 4316516179400939471} + - component: {fileID: 8909977027361011600} + - component: {fileID: 4115387942471935556} + - component: {fileID: 5249508264165512072} + m_Layer: 8 + m_Name: 4-old + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &577575017776698120 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4661603421284761779} + m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.25297615, y: 0.15947585, z: 0.00055113435} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8844654376926115151} + - {fileID: 7810219860625329514} + - {fileID: 7231926236873807486} + - {fileID: 6688361750682176811} + - {fileID: 4361214347805381962} + - {fileID: 2971693442523531470} + - {fileID: 8509168459568219465} + - {fileID: 1210782696795690486} + - {fileID: 567038148693655333} + - {fileID: 5408536924424171996} + - {fileID: 6030296991647703256} + - {fileID: 1892410448931982623} + - {fileID: 2134219513638300441} + - {fileID: 1464865748764324176} + - {fileID: 8927734510468861405} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 90} +--- !u!33 &7935075753638995081 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4661603421284761779} + m_Mesh: {fileID: -2628482395200241503, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &8263630764826540903 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4661603421284761779} + 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: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, 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!114 &6923580699325254496 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4661603421284761779} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -4932,13 +2777,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &2211117576792026150 +--- !u!114 &7070574128927241145 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9061080424600717175} + m_GameObject: {fileID: 4661603421284761779} m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} @@ -4954,26 +2799,26 @@ MonoBehaviour: isTarget: 0 isplace: 0 canPut: 0 ---- !u!114 &7083236633090769758 +--- !u!114 &4316516179400939471 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9061080424600717175} + m_GameObject: {fileID: 4661603421284761779} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &765448918725412949 +--- !u!114 &8909977027361011600 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9061080424600717175} + m_GameObject: {fileID: 4661603421284761779} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} @@ -4990,13 +2835,13 @@ MonoBehaviour: original_shebei: [] search_u_wei: 0 is_jigui: 0 ---- !u!114 &7579292751409468113 +--- !u!114 &4115387942471935556 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9061080424600717175} + m_GameObject: {fileID: 4661603421284761779} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} @@ -5004,3 +2849,2141 @@ MonoBehaviour: m_EditorClassIdentifier: volume: 7 selfIcon: {fileID: 21300000, guid: 0dd1691fdb0c3734a9afa356ee99d263, type: 3} +--- !u!64 &5249508264165512072 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4661603421284761779} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: -2628482395200241503, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!1 &4692188803575811498 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4516768901365972098} + - component: {fileID: 5790165800966707895} + - component: {fileID: 7967236602088519635} + - component: {fileID: 7274927636460531559} + m_Layer: 11 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4516768901365972098 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4692188803575811498} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.2656, y: -0.2543, z: -0.0004} + m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5408536924424171996} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &5790165800966707895 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4692188803575811498} + 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!114 &7967236602088519635 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4692188803575811498} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &7274927636460531559 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4692188803575811498} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &4791827642499551052 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4251572353951943105} + - component: {fileID: 6954053851706069380} + - component: {fileID: 2246146161578132920} + - component: {fileID: 2146029272370624564} + m_Layer: 11 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4251572353951943105 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4791827642499551052} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.0429, y: -0.2543, z: -0.0004} + m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5408536924424171996} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6954053851706069380 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4791827642499551052} + 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!114 &2246146161578132920 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4791827642499551052} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &2146029272370624564 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4791827642499551052} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &4891794306686923891 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8668948417752404838} + - component: {fileID: 6467389591292250275} + - component: {fileID: 3177790940272077333} + - component: {fileID: 8394413309664419185} + m_Layer: 11 + m_Name: Cube (13) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8668948417752404838 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4891794306686923891} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.237, y: -0.2543, z: 0.0013} + m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6030296991647703256} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6467389591292250275 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4891794306686923891} + 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!114 &3177790940272077333 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4891794306686923891} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &8394413309664419185 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4891794306686923891} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &5313862463779624126 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6597657199298727176} + - component: {fileID: 464995072852864015} + - component: {fileID: 6316584739935165183} + - component: {fileID: 7859936197067785235} + m_Layer: 11 + m_Name: Cube (12) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6597657199298727176 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5313862463779624126} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.2049, y: -0.2543, z: 0.0013} + m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6030296991647703256} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &464995072852864015 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5313862463779624126} + 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!114 &6316584739935165183 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5313862463779624126} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &7859936197067785235 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5313862463779624126} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &5350692807707690079 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3153474134140704916} + - component: {fileID: 5728588998834448209} + - component: {fileID: 607839401422229379} + - component: {fileID: 3346193437382839243} + m_Layer: 11 + m_Name: Cube (20) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3153474134140704916 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5350692807707690079} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.1787, y: -0.2543, z: 0.0008} + m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1892410448931982623} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &5728588998834448209 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5350692807707690079} + 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!114 &607839401422229379 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5350692807707690079} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &3346193437382839243 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5350692807707690079} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &5380012401753812748 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8844654376926115151} + - component: {fileID: 1269022868869624093} + - component: {fileID: 6847569946436774898} + m_Layer: 8 + m_Name: Box034 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8844654376926115151 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5380012401753812748} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.3771194, y: -0.005037397, z: 0.000040888786} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 577575017776698120} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1269022868869624093 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5380012401753812748} + m_Mesh: {fileID: 4435042010609528433, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &6847569946436774898 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5380012401753812748} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 7c2ee9f6ddd789e4b91ad284adb51cfd, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &5529584423473219356 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3667968743886695244} + - component: {fileID: 4989563519365387164} + - component: {fileID: 2637028866042829449} + - component: {fileID: 9179311056820901861} + m_Layer: 11 + m_Name: Cube (22) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3667968743886695244 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5529584423473219356} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.1119, y: -0.2543, z: 0.0015} + m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6030296991647703256} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &4989563519365387164 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5529584423473219356} + 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!114 &2637028866042829449 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5529584423473219356} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 10 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &9179311056820901861 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5529584423473219356} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &5793283888787638319 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4721758228932261833} + - component: {fileID: 782016787638716593} + - component: {fileID: 1267598033383898147} + - component: {fileID: 5235108536981525252} + m_Layer: 11 + m_Name: Cube (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4721758228932261833 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5793283888787638319} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.141, y: -0.2543, z: 0.0013} + m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6030296991647703256} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &782016787638716593 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5793283888787638319} + 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!114 &1267598033383898147 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5793283888787638319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &5235108536981525252 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5793283888787638319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &6524663654164317147 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3129005167133080495} + - component: {fileID: 6663354792611459195} + - component: {fileID: 6992073682734747104} + - component: {fileID: 5070427510913105979} + m_Layer: 11 + m_Name: Cube (18) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3129005167133080495 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6524663654164317147} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.1151, y: -0.2543, z: 0.0008} + m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1892410448931982623} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6663354792611459195 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6524663654164317147} + 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!114 &6992073682734747104 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6524663654164317147} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &5070427510913105979 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6524663654164317147} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &6824665089836883665 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 125882407788278097} + - component: {fileID: 165857170340543596} + - component: {fileID: 3068383758160973418} + - component: {fileID: 1600645855621295490} + m_Layer: 11 + m_Name: Cube (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &125882407788278097 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6824665089836883665} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.0773, y: -0.2543, z: 0.0013} + m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6030296991647703256} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &165857170340543596 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6824665089836883665} + 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!114 &3068383758160973418 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6824665089836883665} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &1600645855621295490 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6824665089836883665} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &6967680043673468159 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6688361750682176811} + - component: {fileID: 7657763026908942364} + - component: {fileID: 7202767143262989867} + m_Layer: 8 + m_Name: Object003 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6688361750682176811 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6967680043673468159} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.23987395, y: -0.008037686, z: 0.08549088} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 577575017776698120} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7657763026908942364 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6967680043673468159} + m_Mesh: {fileID: -3531946766418785785, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &7202767143262989867 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6967680043673468159} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &7010352009147840510 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 515357788729112027} + - component: {fileID: 7871007866394736504} + - component: {fileID: 7461546075483357261} + - component: {fileID: 8958407147354780330} + m_Layer: 11 + m_Name: Cube (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &515357788729112027 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7010352009147840510} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.2032, y: -0.2543, z: -0.0004} + m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5408536924424171996} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7871007866394736504 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7010352009147840510} + 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!114 &7461546075483357261 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7010352009147840510} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &8958407147354780330 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7010352009147840510} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &7014506165743345458 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1464865748764324176} + - component: {fileID: 664469610720801816} + - component: {fileID: 2269804554792022665} + m_Layer: 8 + m_Name: Object015 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1464865748764324176 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7014506165743345458} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.41441303, y: -0.2580377, z: -0.1345501} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 577575017776698120} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &664469610720801816 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7014506165743345458} + m_Mesh: {fileID: 4154864533425439726, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &2269804554792022665 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7014506165743345458} + 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: cf5586d329d32c54eb0957902257f300, 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!1 &7042095611151972400 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1544089904466488162} + - component: {fileID: 1051514292102238434} + - component: {fileID: 7113992516559218075} + - component: {fileID: 3845065103588439432} + m_Layer: 11 + m_Name: Cube (21) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1544089904466488162 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7042095611151972400} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.1437, y: -0.2543, z: 0.0015} + m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6030296991647703256} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1051514292102238434 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7042095611151972400} + 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!114 &7113992516559218075 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7042095611151972400} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &3845065103588439432 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7042095611151972400} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &7139428557430734005 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3553633132311002122} + - component: {fileID: 3162251856881781191} + - component: {fileID: 7601559321148801777} + - component: {fileID: 803426716375843985} + m_Layer: 11 + m_Name: Cube (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3553633132311002122 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7139428557430734005} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.1082, y: -0.2543, z: 0.0013} + m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6030296991647703256} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3162251856881781191 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7139428557430734005} + 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!114 &7601559321148801777 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7139428557430734005} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &803426716375843985 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7139428557430734005} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &7377016800921974738 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6030296991647703256} + - component: {fileID: 2358349189255581348} + - component: {fileID: 627825783567730673} + - component: {fileID: 6435044351279611927} + - component: {fileID: 3488480875035341499} + - component: {fileID: 5533771968086495968} + - component: {fileID: 848735880238508610} + m_Layer: 13 + m_Name: Object010 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6030296991647703256 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7377016800921974738} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.051306352, y: -0.008037657, z: -0.11544041} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 125882407788278097} + - {fileID: 3553633132311002122} + - {fileID: 4721758228932261833} + - {fileID: 8150405373323481072} + - {fileID: 6597657199298727176} + - {fileID: 8668948417752404838} + - {fileID: 8653548361083263010} + - {fileID: 2466061219607243464} + - {fileID: 5551182878884274072} + - {fileID: 8350597060180619113} + - {fileID: 7548781333511840950} + - {fileID: 6872702331171008502} + - {fileID: 4931634842249692979} + - {fileID: 1544089904466488162} + - {fileID: 3667968743886695244} + - {fileID: 4697384215034534182} + m_Father: {fileID: 577575017776698120} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2358349189255581348 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7377016800921974738} + m_Mesh: {fileID: 7643229109163234770, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &627825783567730673 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7377016800921974738} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 256f4f5dccef8754b9365a690d0bfac0, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 10ac57f42847b114584025b79f149fd9, 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!114 &6435044351279611927 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7377016800921974738} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} + m_Name: + m_EditorClassIdentifier: + deviceList: + id: + deviceName: + deviceCode: + type: 2 + typeStr: + deviceType: 3 + deviceTypeStr: + rackId: + shelfId: + slotId: + devicePosition: 2 + machineModel: + status: + conDeviceName: + rackType: + openFlag: + backDoorFlag: + modelNum: + occupyNum: + residueNum: + operationTime: + directorName: + phone: + manufacturer: + powerProperties: + maintenanceUnit: + machineFrameHigh: + machineFrameWide: + machineFrameThick: + slotNum: + slotSort: + installMethod: + affiliationFrame: + parentSlotName: + slotType: + occupyStatus: + affiliationSlot: + portNum: + cardFunction: + cardType: + runStatus: + tmsId: + remark: + createTime: + createName: +--- !u!114 &3488480875035341499 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7377016800921974738} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!64 &5533771968086495968 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7377016800921974738} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 7643229109163234770, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!114 &848735880238508610 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7377016800921974738} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 0, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &7749353302358672014 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4697384215034534182} + - component: {fileID: 2291901153100483300} + - component: {fileID: 224750513707298527} + - component: {fileID: 1547257693624008875} + m_Layer: 11 + m_Name: Cube (23) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4697384215034534182 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7749353302358672014} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.0829, y: -0.2543, z: 0.0015} + m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6030296991647703256} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2291901153100483300 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7749353302358672014} + 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!114 &224750513707298527 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7749353302358672014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 9 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &1547257693624008875 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7749353302358672014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &8064088852124243577 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7548781333511840950} + - component: {fileID: 6948920491188774049} + - component: {fileID: 4595780823799977152} + - component: {fileID: 3616812684525511988} + m_Layer: 11 + m_Name: Cube (18) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7548781333511840950 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8064088852124243577} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.2456, y: -0.2543, z: 0.0015} + m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6030296991647703256} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6948920491188774049 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8064088852124243577} + 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!114 &4595780823799977152 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8064088852124243577} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 14 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &3616812684525511988 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8064088852124243577} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &8561149368875857122 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3776050321772085366} + - component: {fileID: 325855226117247385} + - component: {fileID: 7946866241475574244} + - component: {fileID: 3686482109736825030} + m_Layer: 11 + m_Name: Cube (19) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3776050321772085366 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8561149368875857122} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.1486, y: -0.2543, z: 0.0008} + m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1892410448931982623} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &325855226117247385 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8561149368875857122} + 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!114 &7946866241475574244 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8561149368875857122} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &3686482109736825030 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8561149368875857122} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &8736783551483997931 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6974154227244821060} + - component: {fileID: 4889132625660332747} + - component: {fileID: 7368981251016514676} + - component: {fileID: 2073453602621268959} + m_Layer: 11 + m_Name: Cube (17) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6974154227244821060 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8736783551483997931} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.0834, y: -0.2543, z: 0.0008} + m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1892410448931982623} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &4889132625660332747 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8736783551483997931} + 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!114 &7368981251016514676 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8736783551483997931} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &2073453602621268959 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8736783551483997931} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &8794128667284765231 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1199942169965340969} + - component: {fileID: 1065624686088128032} + - component: {fileID: 5605905569966217678} + - component: {fileID: 3754662205770140321} + m_Layer: 11 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1199942169965340969 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8794128667284765231} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.1388, y: -0.2543, z: -0.0004} + m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5408536924424171996} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1065624686088128032 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8794128667284765231} + 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!114 &5605905569966217678 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8794128667284765231} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &3754662205770140321 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8794128667284765231} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/18.prefab.meta b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/4-old.prefab.meta similarity index 74% rename from GQ_URP/GQ/Assets/prefab/老模型/18.prefab.meta rename to GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/4-old.prefab.meta index fc7a752f9..6af1b78c0 100644 --- a/GQ_URP/GQ/Assets/prefab/老模型/18.prefab.meta +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/4-old.prefab.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: afbcc18b45b69d648ac88c9b0d6e4965 +guid: 534360dce37900b4a8ae06550a102043 PrefabImporter: externalObjects: {} userData: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/4.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/4.prefab index 4232bea43..a406cb71c 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/4.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/4.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &80722787565447694 +--- !u!1 &434642468334205121 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,52 +8,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4389079732212690687} - - component: {fileID: 380919928658351744} - - component: {fileID: 3834393829610884805} - - component: {fileID: 665472085028028555} + - component: {fileID: 4155648949426242209} + - component: {fileID: 8557285270673352308} + - component: {fileID: 7477018332111544605} + - component: {fileID: 1873688690447806877} m_Layer: 11 - m_Name: Cube (2) + m_Name: Cube (14) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4389079732212690687 +--- !u!4 &4155648949426242209 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 80722787565447694} + m_GameObject: {fileID: 434642468334205121} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1065, y: -0.2543, z: -0.0004} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_LocalPosition: {x: 0.1958, y: -0.2543, z: 0.0012999922} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 5408536924424171996} - m_RootOrder: 2 + m_Father: {fileID: 5924530916362887856} + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &380919928658351744 +--- !u!65 &8557285270673352308 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 80722787565447694} + m_GameObject: {fileID: 434642468334205121} 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!114 &3834393829610884805 +--- !u!114 &7477018332111544605 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 80722787565447694} + m_GameObject: {fileID: 434642468334205121} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -66,7 +66,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 6 + portPosition: 2 deviceId: deviceName: portModel: @@ -79,13 +79,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &665472085028028555 +--- !u!114 &1873688690447806877 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 80722787565447694} + m_GameObject: {fileID: 434642468334205121} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -97,7 +97,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &347455213103238384 +--- !u!1 &654730608648731553 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -105,40 +105,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8927734510468861405} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8927734510468861405 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 347455213103238384} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00055113435, y: -0.5449763, z: -0.4784276} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 577575017776698120} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &613000093962910153 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1210782696795690486} - - component: {fileID: 1803183534007157049} - - component: {fileID: 7394424836706607775} + - component: {fileID: 1250402152419415966} + - component: {fileID: 1770463918648525649} + - component: {fileID: 7424611031262732535} m_Layer: 8 m_Name: Object007 m_TagString: Untagged @@ -146,36 +115,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1210782696795690486 +--- !u!4 &1250402152419415966 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 613000093962910153} + m_GameObject: {fileID: 654730608648731553} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.051306352, y: -0.016384035, z: 0.035001695} + m_LocalPosition: {x: -0.037725642, y: -0.01638405, z: 0.035001695} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 577575017776698120} + m_Father: {fileID: 7451330437178050778} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1803183534007157049 +--- !u!33 &1770463918648525649 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 613000093962910153} + m_GameObject: {fileID: 654730608648731553} m_Mesh: {fileID: 7733717212360752527, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &7394424836706607775 +--- !u!23 &7424611031262732535 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 613000093962910153} + m_GameObject: {fileID: 654730608648731553} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -218,7 +187,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &1121044289703476678 +--- !u!1 &1077655012191969810 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -226,52 +195,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2520500239757985706} - - component: {fileID: 3892680502737665748} - - component: {fileID: 6963728676318057897} - - component: {fileID: 929687455856733233} + - component: {fileID: 8781692860274787854} + - component: {fileID: 3265628467211235267} + - component: {fileID: 8894549535657919480} + - component: {fileID: 4993928409911093619} m_Layer: 11 - m_Name: Cube (1) + m_Name: Cube (18) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2520500239757985706 +--- !u!4 &8781692860274787854 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1121044289703476678} + m_GameObject: {fileID: 1077655012191969810} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0752, y: -0.2543, z: -0.0004} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_LocalPosition: {x: 0.0838, y: -0.25429994, z: 0.00079999864} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 5408536924424171996} - m_RootOrder: 1 + m_Father: {fileID: 2005495007857971063} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3892680502737665748 +--- !u!65 &3265628467211235267 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1121044289703476678} + m_GameObject: {fileID: 1077655012191969810} 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!114 &6963728676318057897 +--- !u!114 &8894549535657919480 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1121044289703476678} + m_GameObject: {fileID: 1077655012191969810} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -284,7 +253,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 7 + portPosition: 6 deviceId: deviceName: portModel: @@ -297,13 +266,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &929687455856733233 +--- !u!114 &4993928409911093619 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1121044289703476678} + m_GameObject: {fileID: 1077655012191969810} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -315,7 +284,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &1233708826306868931 +--- !u!1 &1107018201514424160 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -323,58 +292,155 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5408536924424171996} - - component: {fileID: 5628671931821436006} - - component: {fileID: 4294227561735005795} - - component: {fileID: 7154329610888321405} - - component: {fileID: 2911046565291920312} - - component: {fileID: 5814805680414009980} - - component: {fileID: 436877700149936025} - m_Layer: 8 + - component: {fileID: 5707329719432993344} + - component: {fileID: 8518620000838946257} + - component: {fileID: 4451122712084404772} + - component: {fileID: 4523693153792558456} + m_Layer: 11 + m_Name: Cube (19) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5707329719432993344 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1107018201514424160} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.1072, y: -0.25429994, z: 0.00079999864} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2005495007857971063} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8518620000838946257 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1107018201514424160} + 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!114 &4451122712084404772 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1107018201514424160} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &4523693153792558456 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1107018201514424160} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &1191415370115544235 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5375391394150446004} + - component: {fileID: 5731619011671109134} + - component: {fileID: 4183821395023471627} + - component: {fileID: 205600460042627745} + - component: {fileID: 2335173514755940889} + - component: {fileID: 3054209841024329252} + - component: {fileID: 4816500982130944310} + m_Layer: 13 m_Name: Object009 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5408536924424171996 +--- !u!4 &5375391394150446004 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1233708826306868931} + m_GameObject: {fileID: 1191415370115544235} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.051306352, y: -0.008037657, z: -0.087290436} + m_LocalPosition: {x: -0.037725642, y: -0.008037671, z: -0.087290436} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 4251572353951943105} - - {fileID: 2520500239757985706} - - {fileID: 4389079732212690687} - - {fileID: 1199942169965340969} - - {fileID: 7637820041974001873} - - {fileID: 515357788729112027} - - {fileID: 3660879224686201259} - - {fileID: 4516768901365972098} - m_Father: {fileID: 577575017776698120} + - {fileID: 4069254880642469473} + - {fileID: 7834377889979109418} + - {fileID: 6919958696908479935} + - {fileID: 6511352073000034891} + - {fileID: 3076851828634088925} + - {fileID: 7405831555808317174} + - {fileID: 2844238794279293832} + - {fileID: 1088327363914456651} + m_Father: {fileID: 7451330437178050778} m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5628671931821436006 +--- !u!33 &5731619011671109134 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1233708826306868931} + m_GameObject: {fileID: 1191415370115544235} m_Mesh: {fileID: 4944557015945844418, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &4294227561735005795 +--- !u!23 &4183821395023471627 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1233708826306868931} + m_GameObject: {fileID: 1191415370115544235} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -417,13 +483,13 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &7154329610888321405 +--- !u!114 &205600460042627745 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1233708826306868931} + m_GameObject: {fileID: 1191415370115544235} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -475,40 +541,26 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &2911046565291920312 +--- !u!114 &2335173514755940889 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1233708826306868931} + m_GameObject: {fileID: 1191415370115544235} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!64 &5814805680414009980 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1233708826306868931} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 4944557015945844418, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!114 &436877700149936025 +--- !u!114 &3054209841024329252 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1233708826306868931} + m_GameObject: {fileID: 1191415370115544235} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -520,7 +572,21 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 0, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &1257140467935024422 +--- !u!64 &4816500982130944310 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191415370115544235} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 4944557015945844418, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!1 &1560517593924908313 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -528,52 +594,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4931634842249692979} - - component: {fileID: 9141833625431102770} - - component: {fileID: 379781690842759742} - - component: {fileID: 5964592145560998344} + - component: {fileID: 2523998839266272011} + - component: {fileID: 439128195722574307} + - component: {fileID: 8045178766632972082} + - component: {fileID: 5563239371024255263} m_Layer: 11 - m_Name: Cube (20) + m_Name: Cube (19) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4931634842249692979 +--- !u!4 &2523998839266272011 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1257140467935024422} + m_GameObject: {fileID: 1560517593924908313} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.1747, y: -0.2543, z: 0.0015} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_LocalPosition: {x: -0.1583, y: -0.2543, z: 0.0014999956} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 6030296991647703256} - m_RootOrder: 12 + m_Father: {fileID: 5924530916362887856} + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9141833625431102770 +--- !u!65 &439128195722574307 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1257140467935024422} + m_GameObject: {fileID: 1560517593924908313} 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!114 &379781690842759742 +--- !u!114 &8045178766632972082 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1257140467935024422} + m_GameObject: {fileID: 1560517593924908313} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -586,7 +652,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 12 + portPosition: 13 deviceId: deviceName: portModel: @@ -599,13 +665,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &5964592145560998344 +--- !u!114 &5563239371024255263 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1257140467935024422} + m_GameObject: {fileID: 1560517593924908313} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -617,7 +683,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &1470064953347594730 +--- !u!1 &1586568432507534115 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -625,106 +691,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 15891480371091444} - - component: {fileID: 5799564103250639466} - - component: {fileID: 4219314342492126349} - - component: {fileID: 5674594356885832080} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &15891480371091444 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1470064953347594730} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0509, y: -0.2543, z: 0.0008} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1892410448931982623} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5799564103250639466 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1470064953347594730} - 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!114 &4219314342492126349 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1470064953347594730} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &5674594356885832080 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1470064953347594730} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &1698804590248474955 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7231926236873807486} - - component: {fileID: 4187665291833667962} - - component: {fileID: 4070631011043507451} + - component: {fileID: 7335014468634891286} + - component: {fileID: 4290330888100639506} + - component: {fileID: 4173160120933056147} m_Layer: 8 m_Name: Object002 m_TagString: Untagged @@ -732,36 +701,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7231926236873807486 +--- !u!4 &7335014468634891286 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1698804590248474955} + m_GameObject: {fileID: 1586568432507534115} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.23987395, y: -0.008037686, z: 0.114381865} + m_LocalPosition: {x: -0.17637965, y: -0.008037686, z: 0.114381865} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 577575017776698120} + m_Father: {fileID: 7451330437178050778} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4187665291833667962 +--- !u!33 &4290330888100639506 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1698804590248474955} + m_GameObject: {fileID: 1586568432507534115} m_Mesh: {fileID: -3996760141626369306, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &4070631011043507451 +--- !u!23 &4173160120933056147 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1698804590248474955} + m_GameObject: {fileID: 1586568432507534115} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -803,7 +772,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &1940399479160349328 +--- !u!1 &1750094512243897715 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -811,9 +780,106 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 567038148693655333} - - component: {fileID: 9038952663750257386} - - component: {fileID: 2445554288375478210} + - component: {fileID: 6023723481354156935} + - component: {fileID: 1151577544664209101} + - component: {fileID: 7353811199518602263} + - component: {fileID: 3636664885125779277} + m_Layer: 11 + m_Name: Cube (21) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6023723481354156935 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1750094512243897715} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.1534, y: -0.25429994, z: 0.00079999864} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2005495007857971063} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1151577544664209101 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1750094512243897715} + 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!114 &7353811199518602263 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1750094512243897715} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &3636664885125779277 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1750094512243897715} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &1980015214301618424 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 452968426384620877} + - component: {fileID: 9000177626643572866} + - component: {fileID: 2335003124519417258} m_Layer: 8 m_Name: Object008 m_TagString: Untagged @@ -821,36 +887,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &567038148693655333 +--- !u!4 &452968426384620877 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1940399479160349328} + m_GameObject: {fileID: 1980015214301618424} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.051306352, y: -0.016384035, z: -0.03714305} + m_LocalPosition: {x: -0.037725642, y: -0.01638405, z: -0.037143067} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 577575017776698120} + m_Father: {fileID: 7451330437178050778} m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &9038952663750257386 +--- !u!33 &9000177626643572866 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1940399479160349328} + m_GameObject: {fileID: 1980015214301618424} m_Mesh: {fileID: -7647463442239531939, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &2445554288375478210 +--- !u!23 &2335003124519417258 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1940399479160349328} + m_GameObject: {fileID: 1980015214301618424} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -893,7 +959,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &2025508966895916569 +--- !u!1 &2086755057904851887 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -901,52 +967,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5551182878884274072} - - component: {fileID: 3183399437337096827} - - component: {fileID: 7509280993610154835} - - component: {fileID: 6753191198577002799} + - component: {fileID: 6593866923937741745} + - component: {fileID: 2369058153565885446} + - component: {fileID: 8374626714973161381} + - component: {fileID: 5517649898168137065} m_Layer: 11 - m_Name: Cube (16) + m_Name: Cube (17) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5551182878884274072 +--- !u!4 &6593866923937741745 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2025508966895916569} + m_GameObject: {fileID: 2086755057904851887} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.3104, y: -0.2543, z: 0.0015} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_LocalPosition: {x: 0.0598, y: -0.25429994, z: 0.00079999864} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 6030296991647703256} - m_RootOrder: 8 + m_Father: {fileID: 2005495007857971063} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3183399437337096827 +--- !u!65 &2369058153565885446 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2025508966895916569} + m_GameObject: {fileID: 2086755057904851887} 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!114 &7509280993610154835 +--- !u!114 &8374626714973161381 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2025508966895916569} + m_GameObject: {fileID: 2086755057904851887} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -959,7 +1025,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 16 + portPosition: 7 deviceId: deviceName: portModel: @@ -972,13 +1038,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &6753191198577002799 +--- !u!114 &5517649898168137065 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2025508966895916569} + m_GameObject: {fileID: 2086755057904851887} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -990,7 +1056,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &2057434891373717108 +--- !u!1 &2097191373831054364 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -998,9 +1064,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4361214347805381962} - - component: {fileID: 2859643529088024475} - - component: {fileID: 1077866060692526329} + - component: {fileID: 4400552318800713506} + - component: {fileID: 2754158911525010931} + - component: {fileID: 1108619070642755217} m_Layer: 8 m_Name: Object004 m_TagString: Untagged @@ -1008,36 +1074,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4361214347805381962 +--- !u!4 &4400552318800713506 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2057434891373717108} + m_GameObject: {fileID: 2097191373831054364} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.13726121, y: -0.008037642, z: 0.11441058} + m_LocalPosition: {x: 0.10092838, y: -0.008037657, z: 0.114410564} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 577575017776698120} + m_Father: {fileID: 7451330437178050778} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2859643529088024475 +--- !u!33 &2754158911525010931 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2057434891373717108} + m_GameObject: {fileID: 2097191373831054364} m_Mesh: {fileID: -8113768720884857512, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &1077866060692526329 +--- !u!23 &1108619070642755217 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2057434891373717108} + m_GameObject: {fileID: 2097191373831054364} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1079,7 +1145,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &2566783638257133631 +--- !u!1 &2365249757941206787 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1087,9 +1153,203 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8509168459568219465} - - component: {fileID: 8710330731630884203} - - component: {fileID: 3564379878329467230} + - component: {fileID: 396595758130752877} + - component: {fileID: 1897190671834249859} + - component: {fileID: 4841943613653889822} + - component: {fileID: 2397681154789812615} + m_Layer: 11 + m_Name: Cube (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &396595758130752877 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2365249757941206787} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.0555, y: -0.2543, z: 0.0012999922} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5924530916362887856} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1897190671834249859 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2365249757941206787} + 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!114 &4841943613653889822 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2365249757941206787} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &2397681154789812615 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2365249757941206787} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &2413069906957609914 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1995563303029898123} + - component: {fileID: 994932774212003182} + - component: {fileID: 2358103129154598770} + - component: {fileID: 2628207715080446601} + m_Layer: 11 + m_Name: Cube (20) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1995563303029898123 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2413069906957609914} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.1308, y: -0.25429994, z: 0.00079999864} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2005495007857971063} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &994932774212003182 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2413069906957609914} + 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!114 &2358103129154598770 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2413069906957609914} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &2628207715080446601 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2413069906957609914} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &2452436831413496407 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8611271654542149409} + - component: {fileID: 8752339012617991939} + - component: {fileID: 3522090672004088630} m_Layer: 8 m_Name: Object006 m_TagString: Untagged @@ -1097,36 +1357,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8509168459568219465 +--- !u!4 &8611271654542149409 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2566783638257133631} + m_GameObject: {fileID: 2452436831413496407} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.13726121, y: -0.012514785, z: 0.1433016} + m_LocalPosition: {x: 0.10092838, y: -0.0125148, z: 0.14330159} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 577575017776698120} + m_Father: {fileID: 7451330437178050778} m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8710330731630884203 +--- !u!33 &8752339012617991939 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2566783638257133631} + m_GameObject: {fileID: 2452436831413496407} m_Mesh: {fileID: -2639241166356525208, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &3564379878329467230 +--- !u!23 &3522090672004088630 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2566783638257133631} + m_GameObject: {fileID: 2452436831413496407} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1169,7 +1429,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &2974359938453446644 +--- !u!1 &2540420949618018520 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1177,9 +1437,203 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2971693442523531470} - - component: {fileID: 146420467016438133} - - component: {fileID: 4576655501421727663} + - component: {fileID: 2844238794279293832} + - component: {fileID: 402244250876584161} + - component: {fileID: 3983519763894038572} + - component: {fileID: 1109607810893566281} + m_Layer: 11 + m_Name: Cube (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2844238794279293832 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2540420949618018520} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.1711, y: -0.2543, z: -0.00040000677} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5375391394150446004} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &402244250876584161 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2540420949618018520} + 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!114 &3983519763894038572 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2540420949618018520} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &1109607810893566281 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2540420949618018520} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &2702949091288055532 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1088327363914456651} + - component: {fileID: 1633516699852448239} + - component: {fileID: 9115835399213251938} + - component: {fileID: 4339680731173304848} + m_Layer: 11 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1088327363914456651 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2702949091288055532} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.1947, y: -0.2543, z: -0.00040000677} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5375391394150446004} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1633516699852448239 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2702949091288055532} + 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!114 &9115835399213251938 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2702949091288055532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &4339680731173304848 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2702949091288055532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &2941077921677057436 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2930243720758200998} + - component: {fileID: 261194420105843485} + - component: {fileID: 4473281407232363975} m_Layer: 8 m_Name: Object005 m_TagString: Untagged @@ -1187,36 +1641,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2971693442523531470 +--- !u!4 &2930243720758200998 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2974359938453446644} + m_GameObject: {fileID: 2941077921677057436} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.13726121, y: -0.008037642, z: 0.08551961} + m_LocalPosition: {x: 0.10092838, y: -0.008037657, z: 0.0855196} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 577575017776698120} + m_Father: {fileID: 7451330437178050778} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &146420467016438133 +--- !u!33 &261194420105843485 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2974359938453446644} + m_GameObject: {fileID: 2941077921677057436} m_Mesh: {fileID: 9186633843763367028, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &4576655501421727663 +--- !u!23 &4473281407232363975 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2974359938453446644} + m_GameObject: {fileID: 2941077921677057436} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1258,7 +1712,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &3061479897255078642 +--- !u!1 &3374749522064335466 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1266,10 +1720,10 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4608553514069377983} - - component: {fileID: 6608058737036214722} - - component: {fileID: 8782076113242976223} - - component: {fileID: 7992930959765020043} + - component: {fileID: 2118873701293005633} + - component: {fileID: 3714768605018662260} + - component: {fileID: 8624027656425146449} + - component: {fileID: 9015495267016909183} m_Layer: 11 m_Name: Cube (23) m_TagString: Untagged @@ -1277,41 +1731,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4608553514069377983 +--- !u!4 &2118873701293005633 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3061479897255078642} + m_GameObject: {fileID: 3374749522064335466} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2747, y: -0.2543, z: 0.0008} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_LocalPosition: {x: 0.2007, y: -0.25429994, z: 0.00079999864} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 1892410448931982623} + m_Father: {fileID: 2005495007857971063} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6608058737036214722 +--- !u!65 &3714768605018662260 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3061479897255078642} + m_GameObject: {fileID: 3374749522064335466} 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!114 &8782076113242976223 +--- !u!114 &8624027656425146449 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3061479897255078642} + m_GameObject: {fileID: 3374749522064335466} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1337,13 +1791,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &7992930959765020043 +--- !u!114 &9015495267016909183 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3061479897255078642} + m_GameObject: {fileID: 3374749522064335466} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -1355,7 +1809,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &3294944687322214299 +--- !u!1 &3443277000093288439 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1363,52 +1817,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1403668992278705348} - - component: {fileID: 8840241538051585211} - - component: {fileID: 8224853486854516330} - - component: {fileID: 3480271756856926077} + - component: {fileID: 6437177680059180559} + - component: {fileID: 8678813912512355651} + - component: {fileID: 1527865823137721640} + - component: {fileID: 8515420140094323779} m_Layer: 11 - m_Name: Cube (22) + m_Name: Cube (13) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1403668992278705348 +--- !u!4 &6437177680059180559 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3294944687322214299} + m_GameObject: {fileID: 3443277000093288439} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2427, y: -0.2543, z: 0.0008} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_LocalPosition: {x: 0.1725, y: -0.2543, z: 0.0012999922} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 1892410448931982623} - m_RootOrder: 6 + m_Father: {fileID: 5924530916362887856} + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8840241538051585211 +--- !u!65 &8678813912512355651 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3294944687322214299} + m_GameObject: {fileID: 3443277000093288439} 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!114 &8224853486854516330 +--- !u!114 &1527865823137721640 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3294944687322214299} + m_GameObject: {fileID: 3443277000093288439} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1421,7 +1875,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 2 + portPosition: 3 deviceId: deviceName: portModel: @@ -1434,13 +1888,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &3480271756856926077 +--- !u!114 &8515420140094323779 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3294944687322214299} + m_GameObject: {fileID: 3443277000093288439} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -1452,7 +1906,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &3450538058778246055 +--- !u!1 &3887619890027524032 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1460,349 +1914,58 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2466061219607243464} - - component: {fileID: 6874172823955508510} - - component: {fileID: 3494058420589762983} - - component: {fileID: 215874122595437552} - m_Layer: 11 - m_Name: Cube (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2466061219607243464 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3450538058778246055} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2991, y: -0.2543, z: 0.0013} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6030296991647703256} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6874172823955508510 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3450538058778246055} - 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!114 &3494058420589762983 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3450538058778246055} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &215874122595437552 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3450538058778246055} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &3568204122122099560 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8653548361083263010} - - component: {fileID: 3562046942775364121} - - component: {fileID: 5085785547494690863} - - component: {fileID: 6507885056010267178} - m_Layer: 11 - m_Name: Cube (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8653548361083263010 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3568204122122099560} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2692, y: -0.2543, z: 0.0013} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6030296991647703256} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3562046942775364121 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3568204122122099560} - 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!114 &5085785547494690863 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3568204122122099560} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &6507885056010267178 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3568204122122099560} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &3645469972805454614 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8150405373323481072} - - component: {fileID: 9152169050687379418} - - component: {fileID: 2049917784796748281} - - component: {fileID: 1277684252820324337} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8150405373323481072 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3645469972805454614} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1735, y: -0.2543, z: 0.0013} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6030296991647703256} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9152169050687379418 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3645469972805454614} - 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!114 &2049917784796748281 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3645469972805454614} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &1277684252820324337 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3645469972805454614} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &3775243414420909480 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1892410448931982623} - - component: {fileID: 720238882172076134} - - component: {fileID: 4196665277394301898} - - component: {fileID: 4828334606785369861} - - component: {fileID: 6705687491089549891} - - component: {fileID: 38434541403970417} - - component: {fileID: 2623318100029644062} - m_Layer: 8 + - component: {fileID: 2005495007857971063} + - component: {fileID: 606032263069499918} + - component: {fileID: 4299335135396376994} + - component: {fileID: 7592536559235468788} + - component: {fileID: 5079464485758487005} + - component: {fileID: 4305852921128048330} + - component: {fileID: 3724074695383589821} + m_Layer: 13 m_Name: Object013 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1892410448931982623 +--- !u!4 &2005495007857971063 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3775243414420909480} + m_GameObject: {fileID: 3887619890027524032} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.051306352, y: -0.008037657, z: -0.14359036} + m_LocalPosition: {x: -0.037725642, y: -0.008037671, z: -0.14359036} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 15891480371091444} - - {fileID: 6974154227244821060} - - {fileID: 3129005167133080495} - - {fileID: 3776050321772085366} - - {fileID: 3153474134140704916} - - {fileID: 6003551294449568563} - - {fileID: 1403668992278705348} - - {fileID: 4608553514069377983} - m_Father: {fileID: 577575017776698120} + - {fileID: 7526126150620654755} + - {fileID: 6593866923937741745} + - {fileID: 8781692860274787854} + - {fileID: 5707329719432993344} + - {fileID: 1995563303029898123} + - {fileID: 6023723481354156935} + - {fileID: 3010566277451196678} + - {fileID: 2118873701293005633} + m_Father: {fileID: 7451330437178050778} m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &720238882172076134 +--- !u!33 &606032263069499918 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3775243414420909480} + m_GameObject: {fileID: 3887619890027524032} m_Mesh: {fileID: 2871469715313346890, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &4196665277394301898 +--- !u!23 &4299335135396376994 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3775243414420909480} + m_GameObject: {fileID: 3887619890027524032} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1845,13 +2008,13 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &4828334606785369861 +--- !u!114 &7592536559235468788 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3775243414420909480} + m_GameObject: {fileID: 3887619890027524032} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -1903,40 +2066,26 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &6705687491089549891 +--- !u!114 &5079464485758487005 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3775243414420909480} + m_GameObject: {fileID: 3887619890027524032} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!64 &38434541403970417 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3775243414420909480} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 2871469715313346890, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!114 &2623318100029644062 +--- !u!114 &4305852921128048330 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3775243414420909480} + m_GameObject: {fileID: 3887619890027524032} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -1948,7 +2097,21 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 0, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &3779292413795084391 +--- !u!64 &3724074695383589821 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3887619890027524032} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 2871469715313346890, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!1 &4022641831917489088 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1956,52 +2119,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8350597060180619113} - - component: {fileID: 2368002028733045109} - - component: {fileID: 341556321853214054} - - component: {fileID: 7346315263436463327} + - component: {fileID: 8458090745299560848} + - component: {fileID: 7078764943269763898} + - component: {fileID: 8713889051062358152} + - component: {fileID: 8691130662939066792} m_Layer: 11 - m_Name: Cube (17) + m_Name: Cube (15) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8350597060180619113 +--- !u!4 &8458090745299560848 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3779292413795084391} + m_GameObject: {fileID: 4022641831917489088} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2785, y: -0.2543, z: 0.0015} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_LocalPosition: {x: 0.2191, y: -0.2543, z: 0.0012999922} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 6030296991647703256} - m_RootOrder: 9 + m_Father: {fileID: 5924530916362887856} + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2368002028733045109 +--- !u!65 &7078764943269763898 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3779292413795084391} + m_GameObject: {fileID: 4022641831917489088} 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!114 &341556321853214054 +--- !u!114 &8713889051062358152 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3779292413795084391} + m_GameObject: {fileID: 4022641831917489088} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2014,7 +2177,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 15 + portPosition: 1 deviceId: deviceName: portModel: @@ -2027,13 +2190,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &7346315263436463327 +--- !u!114 &8691130662939066792 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3779292413795084391} + m_GameObject: {fileID: 4022641831917489088} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -2045,7 +2208,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &3842000449954976724 +--- !u!1 &4058232754904196403 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2053,52 +2216,135 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7637820041974001873} - - component: {fileID: 3344091384027662874} - - component: {fileID: 1508673054639716359} - - component: {fileID: 1264911052333602065} - m_Layer: 11 - m_Name: Cube (4) + - component: {fileID: 2020294360863320433} + - component: {fileID: 4248548024590599567} + - component: {fileID: 8993581354931241126} + m_Layer: 8 + m_Name: Object014 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7637820041974001873 +--- !u!4 &2020294360863320433 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3842000449954976724} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1718, y: -0.2543, z: -0.0004} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_GameObject: {fileID: 4058232754904196403} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.28229704, y: -0.2644466, z: 0.008253843} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 5408536924424171996} - m_RootOrder: 4 + m_Father: {fileID: 7451330437178050778} + m_RootOrder: 12 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3344091384027662874 +--- !u!33 &4248548024590599567 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4058232754904196403} + m_Mesh: {fileID: 3941715523697911101, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &8993581354931241126 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4058232754904196403} + 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: f7c4b8b2d4dc9ee4c902e550c5b74afa, 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!1 &4128881761643505700 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 373176110422982526} + - component: {fileID: 2313936419009811526} + - component: {fileID: 2657242850532024358} + - component: {fileID: 9022385960212088510} + m_Layer: 11 + m_Name: Cube (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &373176110422982526 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4128881761643505700} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.1262, y: -0.2543, z: 0.0012999922} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5924530916362887856} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2313936419009811526 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3842000449954976724} + m_GameObject: {fileID: 4128881761643505700} 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!114 &1508673054639716359 +--- !u!114 &2657242850532024358 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3842000449954976724} + m_GameObject: {fileID: 4128881761643505700} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2111,7 +2357,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 4 + portPosition: 5 deviceId: deviceName: portModel: @@ -2124,13 +2370,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &1264911052333602065 +--- !u!114 &9022385960212088510 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3842000449954976724} + m_GameObject: {fileID: 4128881761643505700} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -2142,7 +2388,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &3861799934267492668 +--- !u!1 &4134332698941113594 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2150,203 +2396,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3660879224686201259} - - component: {fileID: 6480525592513307277} - - component: {fileID: 4822226492237717568} - - component: {fileID: 3421427419950672874} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3660879224686201259 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3861799934267492668} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2337, y: -0.2543, z: -0.0004} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5408536924424171996} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6480525592513307277 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3861799934267492668} - 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!114 &4822226492237717568 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3861799934267492668} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &3421427419950672874 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3861799934267492668} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &3947219240013641679 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6003551294449568563} - - component: {fileID: 9186268708546402178} - - component: {fileID: 1082472957121278526} - - component: {fileID: 4629441370096608881} - m_Layer: 11 - m_Name: Cube (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6003551294449568563 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3947219240013641679} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2114, y: -0.2543, z: 0.0008} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1892410448931982623} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9186268708546402178 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3947219240013641679} - 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!114 &1082472957121278526 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3947219240013641679} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &4629441370096608881 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3947219240013641679} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &4104991461694457490 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7810219860625329514} - - component: {fileID: 6790803677812338846} - - component: {fileID: 3705554859464082836} + - component: {fileID: 7923164105100463874} + - component: {fileID: 6893328383129563894} + - component: {fileID: 3673535214093715452} m_Layer: 8 m_Name: Object001 m_TagString: Untagged @@ -2354,36 +2406,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7810219860625329514 +--- !u!4 &7923164105100463874 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4104991461694457490} + m_GameObject: {fileID: 4134332698941113594} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.23987395, y: -0.01251483, z: 0.14327289} + m_LocalPosition: {x: -0.17637965, y: -0.01251483, z: 0.14327289} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 577575017776698120} + m_Father: {fileID: 7451330437178050778} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6790803677812338846 +--- !u!33 &6893328383129563894 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4104991461694457490} + m_GameObject: {fileID: 4134332698941113594} m_Mesh: {fileID: -3292925553009838691, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &3705554859464082836 +--- !u!23 &3673535214093715452 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4104991461694457490} + m_GameObject: {fileID: 4134332698941113594} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -2430,7 +2482,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &4163154968931395419 +--- !u!1 &4516288575610075139 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2438,46 +2490,434 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2134219513638300441} - - component: {fileID: 4279015273392801767} - - component: {fileID: 9032071053746455246} - m_Layer: 8 - m_Name: Object014 + - component: {fileID: 7204755537516208261} + - component: {fileID: 9039146989472484166} + - component: {fileID: 2632233847583089697} + - component: {fileID: 824599553493138559} + m_Layer: 11 + m_Name: Cube (17) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2134219513638300441 +--- !u!4 &7204755537516208261 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4163154968931395419} + m_GameObject: {fileID: 4516288575610075139} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.2048, y: -0.2543, z: 0.0014999956} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5924530916362887856} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &9039146989472484166 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4516288575610075139} + 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!114 &2632233847583089697 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4516288575610075139} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 15 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &824599553493138559 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4516288575610075139} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &4805111889609791764 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3076851828634088925} + - component: {fileID: 852426398532157212} + - component: {fileID: 4237669627608998027} + - component: {fileID: 6164922487004341668} + m_Layer: 11 + m_Name: Cube (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3076851828634088925 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4805111889609791764} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.1252, y: -0.2543, z: -0.00040000677} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5375391394150446004} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &852426398532157212 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4805111889609791764} + 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!114 &4237669627608998027 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4805111889609791764} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &6164922487004341668 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4805111889609791764} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &4834871796446157363 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5331504429481981905} + - component: {fileID: 8214294714231275083} + - component: {fileID: 6429244128462907633} + - component: {fileID: 3095853367350309071} + m_Layer: 11 + m_Name: Cube (16) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5331504429481981905 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4834871796446157363} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.2296, y: -0.2543, z: 0.0014999956} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5924530916362887856} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8214294714231275083 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4834871796446157363} + 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!114 &6429244128462907633 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4834871796446157363} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 16 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &3095853367350309071 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4834871796446157363} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &5289436067723549619 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 405118459322272629} + - component: {fileID: 6096557093028219843} + - component: {fileID: 8475071307512429974} + - component: {fileID: 352537412343901796} + m_Layer: 11 + m_Name: Cube (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &405118459322272629 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5289436067723549619} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.1025, y: -0.2543, z: 0.0012999922} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5924530916362887856} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6096557093028219843 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5289436067723549619} + 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!114 &8475071307512429974 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5289436067723549619} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &352537412343901796 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5289436067723549619} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &5421883792516115812 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8874699411086472999} + - component: {fileID: 1156224163618730869} + - component: {fileID: 6814147195582065050} + m_Layer: 8 + m_Name: Box034 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8874699411086472999 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5421883792516115812} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.38392013, y: -0.26444653, z: 0.008253843} + m_LocalPosition: {x: 0.27729636, y: -0.005037427, z: 0.000040888786} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 577575017776698120} - m_RootOrder: 12 + m_Father: {fileID: 7451330437178050778} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4279015273392801767 +--- !u!33 &1156224163618730869 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4163154968931395419} - m_Mesh: {fileID: 3941715523697911101, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &9032071053746455246 + m_GameObject: {fileID: 5421883792516115812} + m_Mesh: {fileID: 4435042010609528433, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &6814147195582065050 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4163154968931395419} + m_GameObject: {fileID: 5421883792516115812} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -2491,7 +2931,12 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: f7c4b8b2d4dc9ee4c902e550c5b74afa, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 7c2ee9f6ddd789e4b91ad284adb51cfd, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -2513,7 +2958,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &4316514140573252569 +--- !u!1 &5750109211167939923 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2521,52 +2966,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6872702331171008502} - - component: {fileID: 153595359715646481} - - component: {fileID: 5167605842503909928} - - component: {fileID: 4944679714128213373} + - component: {fileID: 7321581575393611165} + - component: {fileID: 8065712393952548187} + - component: {fileID: 610763826223888257} + - component: {fileID: 5843349516031623960} m_Layer: 11 - m_Name: Cube (19) + m_Name: Cube (12) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6872702331171008502 +--- !u!4 &7321581575393611165 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4316514140573252569} + m_GameObject: {fileID: 5750109211167939923} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2136, y: -0.2543, z: 0.0015} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_LocalPosition: {x: 0.1499, y: -0.2543, z: 0.0012999922} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 6030296991647703256} - m_RootOrder: 11 + m_Father: {fileID: 5924530916362887856} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &153595359715646481 +--- !u!65 &8065712393952548187 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4316514140573252569} + m_GameObject: {fileID: 5750109211167939923} 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!114 &5167605842503909928 +--- !u!114 &610763826223888257 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4316514140573252569} + m_GameObject: {fileID: 5750109211167939923} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2579,7 +3024,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 13 + portPosition: 4 deviceId: deviceName: portModel: @@ -2592,13 +3037,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &4944679714128213373 +--- !u!114 &5843349516031623960 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4316514140573252569} + m_GameObject: {fileID: 5750109211167939923} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -2610,7 +3055,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &4661603421284761779 +--- !u!1 &5772983762470105835 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2618,15 +3063,209 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 577575017776698120} - - component: {fileID: 7935075753638995081} - - component: {fileID: 8263630764826540903} - - component: {fileID: 6923580699325254496} - - component: {fileID: 7070574128927241145} - - component: {fileID: 4316516179400939471} - - component: {fileID: 8909977027361011600} - - component: {fileID: 4115387942471935556} - - component: {fileID: 5249508264165512072} + - component: {fileID: 5888531366245755277} + - component: {fileID: 1432156742517003717} + - component: {fileID: 4567613984702162008} + - component: {fileID: 1649190211613745382} + m_Layer: 11 + m_Name: Cube (20) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5888531366245755277 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5772983762470105835} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.1295, y: -0.2543, z: 0.0014999956} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5924530916362887856} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1432156742517003717 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5772983762470105835} + 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!114 &4567613984702162008 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5772983762470105835} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &1649190211613745382 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5772983762470105835} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &6011467456455700909 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4012128556700755876} + - component: {fileID: 8944502832567387743} + - component: {fileID: 8313383370087677864} + - component: {fileID: 715851923549179284} + m_Layer: 11 + m_Name: Cube (18) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4012128556700755876 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6011467456455700909} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.1814, y: -0.2543, z: 0.0014999956} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5924530916362887856} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8944502832567387743 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6011467456455700909} + 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!114 &8313383370087677864 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6011467456455700909} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 14 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &715851923549179284 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6011467456455700909} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &6298690216142285466 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7451330437178050778} + - component: {fileID: 669966601334035765} + - component: {fileID: 108377893993343221} + - component: {fileID: 5987983140578837612} + - component: {fileID: 3323256848079801399} + - component: {fileID: 7502973015179614975} + - component: {fileID: 3132409423162647402} + - component: {fileID: 4137438900130439090} + - component: {fileID: 6724422405546517311} m_Layer: 8 m_Name: 4 m_TagString: Untagged @@ -2634,51 +3273,51 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &577575017776698120 +--- !u!4 &7451330437178050778 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4661603421284761779} + m_GameObject: {fileID: 6298690216142285466} m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} - m_LocalPosition: {x: -0.25297615, y: 0.15947585, z: 0.00055113435} + m_LocalPosition: {x: -0.25297615, y: 0.15947585, z: -0.0011649132} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 8844654376926115151} - - {fileID: 7810219860625329514} - - {fileID: 7231926236873807486} - - {fileID: 6688361750682176811} - - {fileID: 4361214347805381962} - - {fileID: 2971693442523531470} - - {fileID: 8509168459568219465} - - {fileID: 1210782696795690486} - - {fileID: 567038148693655333} - - {fileID: 5408536924424171996} - - {fileID: 6030296991647703256} - - {fileID: 1892410448931982623} - - {fileID: 2134219513638300441} - - {fileID: 1464865748764324176} - - {fileID: 8927734510468861405} + - {fileID: 8874699411086472999} + - {fileID: 7923164105100463874} + - {fileID: 7335014468634891286} + - {fileID: 6721085607321079619} + - {fileID: 4400552318800713506} + - {fileID: 2930243720758200998} + - {fileID: 8611271654542149409} + - {fileID: 1250402152419415966} + - {fileID: 452968426384620877} + - {fileID: 5375391394150446004} + - {fileID: 5924530916362887856} + - {fileID: 2005495007857971063} + - {fileID: 2020294360863320433} + - {fileID: 1568376303585751864} + - {fileID: 4244300313258811231} m_Father: {fileID: 0} m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: -90, y: 0, z: 90} ---- !u!33 &7935075753638995081 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &669966601334035765 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4661603421284761779} + m_GameObject: {fileID: 6298690216142285466} m_Mesh: {fileID: -2628482395200241503, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &8263630764826540903 +--- !u!23 &108377893993343221 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4661603421284761779} + m_GameObject: {fileID: 6298690216142285466} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -2719,13 +3358,13 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &6923580699325254496 +--- !u!114 &5987983140578837612 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4661603421284761779} + m_GameObject: {fileID: 6298690216142285466} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -2777,13 +3416,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &7070574128927241145 +--- !u!114 &3323256848079801399 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4661603421284761779} + m_GameObject: {fileID: 6298690216142285466} m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} @@ -2799,26 +3438,26 @@ MonoBehaviour: isTarget: 0 isplace: 0 canPut: 0 ---- !u!114 &4316516179400939471 +--- !u!114 &7502973015179614975 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4661603421284761779} + m_GameObject: {fileID: 6298690216142285466} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &8909977027361011600 +--- !u!114 &3132409423162647402 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4661603421284761779} + m_GameObject: {fileID: 6298690216142285466} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} @@ -2835,13 +3474,13 @@ MonoBehaviour: original_shebei: [] search_u_wei: 0 is_jigui: 0 ---- !u!114 &4115387942471935556 +--- !u!114 &4137438900130439090 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4661603421284761779} + m_GameObject: {fileID: 6298690216142285466} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} @@ -2849,13 +3488,13 @@ MonoBehaviour: m_EditorClassIdentifier: volume: 7 selfIcon: {fileID: 21300000, guid: 0dd1691fdb0c3734a9afa356ee99d263, type: 3} ---- !u!64 &5249508264165512072 +--- !u!64 &6724422405546517311 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4661603421284761779} + m_GameObject: {fileID: 6298690216142285466} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -2863,7 +3502,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -2628482395200241503, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!1 &4692188803575811498 +--- !u!1 &6400970088641748774 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2871,52 +3510,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4516768901365972098} - - component: {fileID: 5790165800966707895} - - component: {fileID: 7967236602088519635} - - component: {fileID: 7274927636460531559} + - component: {fileID: 3171390322454865828} + - component: {fileID: 8079785235327341969} + - component: {fileID: 6468018012749151494} + - component: {fileID: 7758322565218944253} m_Layer: 11 - m_Name: Cube (7) + m_Name: Cube (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4516768901365972098 +--- !u!4 &3171390322454865828 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4692188803575811498} + m_GameObject: {fileID: 6400970088641748774} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2656, y: -0.2543, z: -0.0004} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_LocalPosition: {x: 0.0793, y: -0.2543, z: 0.0012999922} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 5408536924424171996} - m_RootOrder: 7 + m_Father: {fileID: 5924530916362887856} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5790165800966707895 +--- !u!65 &8079785235327341969 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4692188803575811498} + m_GameObject: {fileID: 6400970088641748774} 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!114 &7967236602088519635 +--- !u!114 &6468018012749151494 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4692188803575811498} + m_GameObject: {fileID: 6400970088641748774} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2929,7 +3568,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 1 + portPosition: 7 deviceId: deviceName: portModel: @@ -2942,13 +3581,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &7274927636460531559 +--- !u!114 &7758322565218944253 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4692188803575811498} + m_GameObject: {fileID: 6400970088641748774} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -2960,7 +3599,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &4791827642499551052 +--- !u!1 &6516129933284634590 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2968,52 +3607,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4251572353951943105} - - component: {fileID: 6954053851706069380} - - component: {fileID: 2246146161578132920} - - component: {fileID: 2146029272370624564} + - component: {fileID: 7834377889979109418} + - component: {fileID: 8481449358633365174} + - component: {fileID: 8014307942328182545} + - component: {fileID: 8339237779510368140} m_Layer: 11 - m_Name: Cube + m_Name: Cube (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4251572353951943105 +--- !u!4 &7834377889979109418 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4791827642499551052} + m_GameObject: {fileID: 6516129933284634590} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0429, y: -0.2543, z: -0.0004} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_LocalPosition: {x: 0.0544, y: -0.2543, z: -0.00040000677} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 5408536924424171996} - m_RootOrder: 0 + m_Father: {fileID: 5375391394150446004} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6954053851706069380 +--- !u!65 &8481449358633365174 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4791827642499551052} + m_GameObject: {fileID: 6516129933284634590} 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!114 &2246146161578132920 +--- !u!114 &8014307942328182545 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4791827642499551052} + m_GameObject: {fileID: 6516129933284634590} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3026,7 +3665,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 8 + portPosition: 7 deviceId: deviceName: portModel: @@ -3039,13 +3678,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &2146029272370624564 +--- !u!114 &8339237779510368140 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4791827642499551052} + m_GameObject: {fileID: 6516129933284634590} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -3057,7 +3696,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &4891794306686923891 +--- !u!1 &6684349445798668745 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3065,52 +3704,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8668948417752404838} - - component: {fileID: 6467389591292250275} - - component: {fileID: 3177790940272077333} - - component: {fileID: 8394413309664419185} + - component: {fileID: 1140842008255535073} + - component: {fileID: 6218021891709731862} + - component: {fileID: 7722120054564269277} + - component: {fileID: 3259724239499344617} m_Layer: 11 - m_Name: Cube (13) + m_Name: Cube (23) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8668948417752404838 +--- !u!4 &1140842008255535073 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4891794306686923891} + m_GameObject: {fileID: 6684349445798668745} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.237, y: -0.2543, z: 0.0013} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_LocalPosition: {x: -0.059, y: -0.2543, z: 0.0014999956} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 6030296991647703256} - m_RootOrder: 5 + m_Father: {fileID: 5924530916362887856} + m_RootOrder: 15 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6467389591292250275 +--- !u!65 &6218021891709731862 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4891794306686923891} + m_GameObject: {fileID: 6684349445798668745} 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!114 &3177790940272077333 +--- !u!114 &7722120054564269277 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4891794306686923891} + m_GameObject: {fileID: 6684349445798668745} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3123,7 +3762,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 3 + portPosition: 9 deviceId: deviceName: portModel: @@ -3136,13 +3775,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &8394413309664419185 +--- !u!114 &3259724239499344617 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4891794306686923891} + m_GameObject: {fileID: 6684349445798668745} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -3154,7 +3793,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &5313862463779624126 +--- !u!1 &6839637132323102618 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3162,52 +3801,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6597657199298727176} - - component: {fileID: 464995072852864015} - - component: {fileID: 6316584739935165183} - - component: {fileID: 7859936197067785235} + - component: {fileID: 7967896092822480035} + - component: {fileID: 6893433196957035736} + - component: {fileID: 5213019307823310308} + - component: {fileID: 6813549286580733276} m_Layer: 11 - m_Name: Cube (12) + m_Name: Cube (21) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6597657199298727176 +--- !u!4 &7967896092822480035 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5313862463779624126} + m_GameObject: {fileID: 6839637132323102618} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2049, y: -0.2543, z: 0.0013} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_LocalPosition: {x: -0.1062, y: -0.25429994, z: 0.0015000105} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 6030296991647703256} - m_RootOrder: 4 + m_Father: {fileID: 5924530916362887856} + m_RootOrder: 13 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &464995072852864015 +--- !u!65 &6893433196957035736 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5313862463779624126} + m_GameObject: {fileID: 6839637132323102618} 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!114 &6316584739935165183 +--- !u!114 &5213019307823310308 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5313862463779624126} + m_GameObject: {fileID: 6839637132323102618} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3220,7 +3859,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 4 + portPosition: 11 deviceId: deviceName: portModel: @@ -3233,13 +3872,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &7859936197067785235 +--- !u!114 &6813549286580733276 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5313862463779624126} + m_GameObject: {fileID: 6839637132323102618} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -3251,7 +3890,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &5350692807707690079 +--- !u!1 &6975876133058174298 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3259,143 +3898,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3153474134140704916} - - component: {fileID: 5728588998834448209} - - component: {fileID: 607839401422229379} - - component: {fileID: 3346193437382839243} - m_Layer: 11 - m_Name: Cube (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3153474134140704916 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5350692807707690079} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1787, y: -0.2543, z: 0.0008} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1892410448931982623} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5728588998834448209 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5350692807707690079} - 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!114 &607839401422229379 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5350692807707690079} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &3346193437382839243 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5350692807707690079} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &5380012401753812748 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8844654376926115151} - - component: {fileID: 1269022868869624093} - - component: {fileID: 6847569946436774898} + - component: {fileID: 1568376303585751864} + - component: {fileID: 625835164851484272} + - component: {fileID: 2227088719651057889} m_Layer: 8 - m_Name: Box034 + m_Name: Object015 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8844654376926115151 +--- !u!4 &1568376303585751864 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5380012401753812748} + m_GameObject: {fileID: 6975876133058174298} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.3771194, y: -0.005037397, z: 0.000040888786} + m_LocalPosition: {x: 0.30471852, y: -0.25803772, z: -0.1345501} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 577575017776698120} - m_RootOrder: 0 + m_Father: {fileID: 7451330437178050778} + m_RootOrder: 13 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1269022868869624093 +--- !u!33 &625835164851484272 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5380012401753812748} - m_Mesh: {fileID: 4435042010609528433, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &6847569946436774898 + m_GameObject: {fileID: 6975876133058174298} + m_Mesh: {fileID: 4154864533425439726, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &2227088719651057889 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5380012401753812748} + m_GameObject: {fileID: 6975876133058174298} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -3409,12 +3951,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 7c2ee9f6ddd789e4b91ad284adb51cfd, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -3436,7 +3973,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &5529584423473219356 +--- !u!1 &7000263181043613335 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3444,397 +3981,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3667968743886695244} - - component: {fileID: 4989563519365387164} - - component: {fileID: 2637028866042829449} - - component: {fileID: 9179311056820901861} - m_Layer: 11 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3667968743886695244 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5529584423473219356} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.1119, y: -0.2543, z: 0.0015} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6030296991647703256} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4989563519365387164 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5529584423473219356} - 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!114 &2637028866042829449 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5529584423473219356} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &9179311056820901861 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5529584423473219356} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &5793283888787638319 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4721758228932261833} - - component: {fileID: 782016787638716593} - - component: {fileID: 1267598033383898147} - - component: {fileID: 5235108536981525252} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4721758228932261833 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5793283888787638319} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.141, y: -0.2543, z: 0.0013} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6030296991647703256} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &782016787638716593 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5793283888787638319} - 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!114 &1267598033383898147 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5793283888787638319} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &5235108536981525252 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5793283888787638319} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &6524663654164317147 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3129005167133080495} - - component: {fileID: 6663354792611459195} - - component: {fileID: 6992073682734747104} - - component: {fileID: 5070427510913105979} - m_Layer: 11 - m_Name: Cube (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3129005167133080495 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6524663654164317147} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1151, y: -0.2543, z: 0.0008} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1892410448931982623} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6663354792611459195 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6524663654164317147} - 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!114 &6992073682734747104 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6524663654164317147} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &5070427510913105979 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6524663654164317147} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &6824665089836883665 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 125882407788278097} - - component: {fileID: 165857170340543596} - - component: {fileID: 3068383758160973418} - - component: {fileID: 1600645855621295490} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &125882407788278097 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6824665089836883665} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0773, y: -0.2543, z: 0.0013} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6030296991647703256} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &165857170340543596 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6824665089836883665} - 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!114 &3068383758160973418 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6824665089836883665} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &1600645855621295490 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6824665089836883665} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &6967680043673468159 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6688361750682176811} - - component: {fileID: 7657763026908942364} - - component: {fileID: 7202767143262989867} + - component: {fileID: 6721085607321079619} + - component: {fileID: 7769295078662771316} + - component: {fileID: 7089401238213504067} m_Layer: 8 m_Name: Object003 m_TagString: Untagged @@ -3842,36 +3991,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6688361750682176811 +--- !u!4 &6721085607321079619 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6967680043673468159} + m_GameObject: {fileID: 7000263181043613335} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.23987395, y: -0.008037686, z: 0.08549088} + m_LocalPosition: {x: -0.17637965, y: -0.008037686, z: 0.0854909} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 577575017776698120} + m_Father: {fileID: 7451330437178050778} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7657763026908942364 +--- !u!33 &7769295078662771316 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6967680043673468159} + m_GameObject: {fileID: 7000263181043613335} m_Mesh: {fileID: -3531946766418785785, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &7202767143262989867 +--- !u!23 &7089401238213504067 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6967680043673468159} + m_GameObject: {fileID: 7000263181043613335} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -3913,7 +4062,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &7010352009147840510 +--- !u!1 &7130617757688924189 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3921,179 +4070,30 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 515357788729112027} - - component: {fileID: 7871007866394736504} - - component: {fileID: 7461546075483357261} - - component: {fileID: 8958407147354780330} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &515357788729112027 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7010352009147840510} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2032, y: -0.2543, z: -0.0004} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5408536924424171996} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7871007866394736504 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7010352009147840510} - 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!114 &7461546075483357261 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7010352009147840510} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &8958407147354780330 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7010352009147840510} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &7014506165743345458 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1464865748764324176} - - component: {fileID: 664469610720801816} - - component: {fileID: 2269804554792022665} + - component: {fileID: 4244300313258811231} m_Layer: 8 - m_Name: Object015 + m_Name: "\u951A\u70B9" m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1464865748764324176 +--- !u!4 &4244300313258811231 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7014506165743345458} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.41441303, y: -0.2580377, z: -0.1345501} + m_GameObject: {fileID: 7130617757688924189} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.0011649132, y: -0.5449763, z: -0.4784276} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 577575017776698120} - m_RootOrder: 13 + m_Father: {fileID: 7451330437178050778} + m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &664469610720801816 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7014506165743345458} - m_Mesh: {fileID: 4154864533425439726, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &2269804554792022665 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7014506165743345458} - 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: cf5586d329d32c54eb0957902257f300, 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!1 &7042095611151972400 +--- !u!1 &7132725844018070460 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4101,52 +4101,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1544089904466488162} - - component: {fileID: 1051514292102238434} - - component: {fileID: 7113992516559218075} - - component: {fileID: 3845065103588439432} + - component: {fileID: 6919958696908479935} + - component: {fileID: 8332236765357743898} + - component: {fileID: 196632972842944104} + - component: {fileID: 4775677016689621612} m_Layer: 11 - m_Name: Cube (21) + m_Name: Cube (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1544089904466488162 +--- !u!4 &6919958696908479935 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7042095611151972400} + m_GameObject: {fileID: 7132725844018070460} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.1437, y: -0.2543, z: 0.0015} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_LocalPosition: {x: 0.0779, y: -0.2543, z: -0.00040000677} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 6030296991647703256} - m_RootOrder: 13 + m_Father: {fileID: 5375391394150446004} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1051514292102238434 +--- !u!65 &8332236765357743898 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7042095611151972400} + m_GameObject: {fileID: 7132725844018070460} 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!114 &7113992516559218075 +--- !u!114 &196632972842944104 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7042095611151972400} + m_GameObject: {fileID: 7132725844018070460} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4159,7 +4159,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 11 + portPosition: 6 deviceId: deviceName: portModel: @@ -4172,13 +4172,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &3845065103588439432 +--- !u!114 &4775677016689621612 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7042095611151972400} + m_GameObject: {fileID: 7132725844018070460} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -4190,7 +4190,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &7139428557430734005 +--- !u!1 &7430505160461919036 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4198,52 +4198,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3553633132311002122} - - component: {fileID: 3162251856881781191} - - component: {fileID: 7601559321148801777} - - component: {fileID: 803426716375843985} + - component: {fileID: 7526126150620654755} + - component: {fileID: 5379528371137557798} + - component: {fileID: 5557420599523713315} + - component: {fileID: 5456922298730450623} m_Layer: 11 - m_Name: Cube (9) + m_Name: Cube (16) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3553633132311002122 +--- !u!4 &7526126150620654755 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7139428557430734005} + m_GameObject: {fileID: 7430505160461919036} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1082, y: -0.2543, z: 0.0013} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_LocalPosition: {x: 0.03560324, y: -0.25429994, z: 0.00079999864} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 6030296991647703256} - m_RootOrder: 1 + m_Father: {fileID: 2005495007857971063} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3162251856881781191 +--- !u!65 &5379528371137557798 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7139428557430734005} + m_GameObject: {fileID: 7430505160461919036} 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!114 &7601559321148801777 +--- !u!114 &5557420599523713315 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7139428557430734005} + m_GameObject: {fileID: 7430505160461919036} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4256,7 +4256,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 7 + portPosition: 8 deviceId: deviceName: portModel: @@ -4269,13 +4269,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &803426716375843985 +--- !u!114 &5456922298730450623 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7139428557430734005} + m_GameObject: {fileID: 7430505160461919036} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -4287,7 +4287,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &7377016800921974738 +--- !u!1 &7491649887783581114 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4295,66 +4295,66 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6030296991647703256} - - component: {fileID: 2358349189255581348} - - component: {fileID: 627825783567730673} - - component: {fileID: 6435044351279611927} - - component: {fileID: 3488480875035341499} - - component: {fileID: 5533771968086495968} - - component: {fileID: 848735880238508610} - m_Layer: 8 + - component: {fileID: 5924530916362887856} + - component: {fileID: 2390646437689773260} + - component: {fileID: 658016383812453785} + - component: {fileID: 1539724621551939270} + - component: {fileID: 6839572810133097292} + - component: {fileID: 6324948753277833153} + - component: {fileID: 5447288038871574664} + m_Layer: 13 m_Name: Object010 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6030296991647703256 +--- !u!4 &5924530916362887856 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7377016800921974738} + m_GameObject: {fileID: 7491649887783581114} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.051306352, y: -0.008037657, z: -0.11544041} + m_LocalPosition: {x: -0.037725642, y: -0.008037671, z: -0.11544041} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 125882407788278097} - - {fileID: 3553633132311002122} - - {fileID: 4721758228932261833} - - {fileID: 8150405373323481072} - - {fileID: 6597657199298727176} - - {fileID: 8668948417752404838} - - {fileID: 8653548361083263010} - - {fileID: 2466061219607243464} - - {fileID: 5551182878884274072} - - {fileID: 8350597060180619113} - - {fileID: 7548781333511840950} - - {fileID: 6872702331171008502} - - {fileID: 4931634842249692979} - - {fileID: 1544089904466488162} - - {fileID: 3667968743886695244} - - {fileID: 4697384215034534182} - m_Father: {fileID: 577575017776698120} + - {fileID: 396595758130752877} + - {fileID: 3171390322454865828} + - {fileID: 405118459322272629} + - {fileID: 373176110422982526} + - {fileID: 7321581575393611165} + - {fileID: 6437177680059180559} + - {fileID: 4155648949426242209} + - {fileID: 8458090745299560848} + - {fileID: 5331504429481981905} + - {fileID: 7204755537516208261} + - {fileID: 4012128556700755876} + - {fileID: 2523998839266272011} + - {fileID: 5888531366245755277} + - {fileID: 7967896092822480035} + - {fileID: 8748068616042127451} + - {fileID: 1140842008255535073} + m_Father: {fileID: 7451330437178050778} m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2358349189255581348 +--- !u!33 &2390646437689773260 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7377016800921974738} + m_GameObject: {fileID: 7491649887783581114} m_Mesh: {fileID: 7643229109163234770, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!23 &627825783567730673 +--- !u!23 &658016383812453785 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7377016800921974738} + m_GameObject: {fileID: 7491649887783581114} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -4399,13 +4399,13 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &6435044351279611927 +--- !u!114 &1539724621551939270 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7377016800921974738} + m_GameObject: {fileID: 7491649887783581114} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -4457,40 +4457,26 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &3488480875035341499 +--- !u!114 &6839572810133097292 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7377016800921974738} + m_GameObject: {fileID: 7491649887783581114} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!64 &5533771968086495968 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7377016800921974738} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 7643229109163234770, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} ---- !u!114 &848735880238508610 +--- !u!114 &6324948753277833153 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7377016800921974738} + m_GameObject: {fileID: 7491649887783581114} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -4502,7 +4488,21 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 0, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &7749353302358672014 +--- !u!64 &5447288038871574664 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7491649887783581114} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 7643229109163234770, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!1 &7727174177104352380 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4510,52 +4510,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4697384215034534182} - - component: {fileID: 2291901153100483300} - - component: {fileID: 224750513707298527} - - component: {fileID: 1547257693624008875} + - component: {fileID: 4069254880642469473} + - component: {fileID: 428945430835170542} + - component: {fileID: 4565717485748938064} + - component: {fileID: 7525373932767382567} m_Layer: 11 - m_Name: Cube (23) + m_Name: Cube m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4697384215034534182 +--- !u!4 &4069254880642469473 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7749353302358672014} + m_GameObject: {fileID: 7727174177104352380} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.0829, y: -0.2543, z: 0.0015} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_LocalPosition: {x: 0.0302, y: -0.2543, z: -0.00040000677} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 6030296991647703256} - m_RootOrder: 15 + m_Father: {fileID: 5375391394150446004} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2291901153100483300 +--- !u!65 &428945430835170542 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7749353302358672014} + m_GameObject: {fileID: 7727174177104352380} 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!114 &224750513707298527 +--- !u!114 &4565717485748938064 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7749353302358672014} + m_GameObject: {fileID: 7727174177104352380} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4568,7 +4568,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 9 + portPosition: 8 deviceId: deviceName: portModel: @@ -4581,13 +4581,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &1547257693624008875 +--- !u!114 &7525373932767382567 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7749353302358672014} + m_GameObject: {fileID: 7727174177104352380} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -4599,7 +4599,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &8064088852124243577 +--- !u!1 &8821011435729349652 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4607,52 +4607,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7548781333511840950} - - component: {fileID: 6948920491188774049} - - component: {fileID: 4595780823799977152} - - component: {fileID: 3616812684525511988} + - component: {fileID: 7405831555808317174} + - component: {fileID: 4623182245471399196} + - component: {fileID: 2397363064566709537} + - component: {fileID: 7148260012297827884} m_Layer: 11 - m_Name: Cube (18) + m_Name: Cube (5) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7548781333511840950 +--- !u!4 &7405831555808317174 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8064088852124243577} + m_GameObject: {fileID: 8821011435729349652} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2456, y: -0.2543, z: 0.0015} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_LocalPosition: {x: 0.1483, y: -0.2543, z: -0.00040000677} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 6030296991647703256} - m_RootOrder: 10 + m_Father: {fileID: 5375391394150446004} + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6948920491188774049 +--- !u!65 &4623182245471399196 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8064088852124243577} + m_GameObject: {fileID: 8821011435729349652} 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!114 &4595780823799977152 +--- !u!114 &2397363064566709537 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8064088852124243577} + m_GameObject: {fileID: 8821011435729349652} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4665,7 +4665,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 14 + portPosition: 3 deviceId: deviceName: portModel: @@ -4678,13 +4678,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &3616812684525511988 +--- !u!114 &7148260012297827884 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8064088852124243577} + m_GameObject: {fileID: 8821011435729349652} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -4696,7 +4696,7 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &8561149368875857122 +--- !u!1 &8863520352337877058 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4704,204 +4704,10 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3776050321772085366} - - component: {fileID: 325855226117247385} - - component: {fileID: 7946866241475574244} - - component: {fileID: 3686482109736825030} - m_Layer: 11 - m_Name: Cube (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3776050321772085366 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8561149368875857122} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1486, y: -0.2543, z: 0.0008} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1892410448931982623} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &325855226117247385 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8561149368875857122} - 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!114 &7946866241475574244 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8561149368875857122} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &3686482109736825030 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8561149368875857122} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &8736783551483997931 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6974154227244821060} - - component: {fileID: 4889132625660332747} - - component: {fileID: 7368981251016514676} - - component: {fileID: 2073453602621268959} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6974154227244821060 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8736783551483997931} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0834, y: -0.2543, z: 0.0008} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1892410448931982623} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4889132625660332747 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8736783551483997931} - 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!114 &7368981251016514676 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8736783551483997931} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!114 &2073453602621268959 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8736783551483997931} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 1.1, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!1 &8794128667284765231 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1199942169965340969} - - component: {fileID: 1065624686088128032} - - component: {fileID: 5605905569966217678} - - component: {fileID: 3754662205770140321} + - component: {fileID: 6511352073000034891} + - component: {fileID: 4736431929271002755} + - component: {fileID: 766989753059293176} + - component: {fileID: 8730424380725572399} m_Layer: 11 m_Name: Cube (3) m_TagString: Untagged @@ -4909,41 +4715,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1199942169965340969 +--- !u!4 &6511352073000034891 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8794128667284765231} + m_GameObject: {fileID: 8863520352337877058} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1388, y: -0.2543, z: -0.0004} - m_LocalScale: {x: 0.016170003, y: 0.014359996, z: 0.014360003} + m_LocalPosition: {x: 0.1017, y: -0.2543, z: -0.00040000677} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 5408536924424171996} + m_Father: {fileID: 5375391394150446004} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1065624686088128032 +--- !u!65 &4736431929271002755 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8794128667284765231} + m_GameObject: {fileID: 8863520352337877058} 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!114 &5605905569966217678 +--- !u!114 &766989753059293176 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8794128667284765231} + m_GameObject: {fileID: 8863520352337877058} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4969,13 +4775,207 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &3754662205770140321 +--- !u!114 &8730424380725572399 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8794128667284765231} + m_GameObject: {fileID: 8863520352337877058} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &8964857965432957316 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3010566277451196678} + - component: {fileID: 1508794188221784322} + - component: {fileID: 7494420361986925571} + - component: {fileID: 2831595108981065573} + m_Layer: 11 + m_Name: Cube (22) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3010566277451196678 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8964857965432957316} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.177, y: -0.25429994, z: 0.00079999864} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2005495007857971063} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1508794188221784322 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8964857965432957316} + 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!114 &7494420361986925571 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8964857965432957316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &2831595108981065573 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8964857965432957316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!1 &8969962342812229591 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8748068616042127451} + - component: {fileID: 4079307033606960705} + - component: {fileID: 707164243201183416} + - component: {fileID: 3854133696743984637} + m_Layer: 11 + m_Name: Cube (22) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8748068616042127451 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8969962342812229591} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.0821, y: -0.2543, z: 0.0014999807} + m_LocalScale: {x: 0.01617, y: 0.014359998, z: 0.014359999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5924530916362887856} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &4079307033606960705 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8969962342812229591} + 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!114 &707164243201183416 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8969962342812229591} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 10 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!114 &3854133696743984637 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8969962342812229591} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/4.prefab.meta b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/4.prefab.meta index 6af1b78c0..ba16443bb 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/4.prefab.meta +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/4.prefab.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 534360dce37900b4a8ae06550a102043 +guid: 30e64fc56e0e334479a32145c33af5af PrefabImporter: externalObjects: {} userData: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/40.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/40.prefab index 4a9f3b92a..fcaf3b4be 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/40.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/40.prefab @@ -407,7 +407,7 @@ GameObject: - component: {fileID: 4719889627079928302} - component: {fileID: 8085910035729053050} - component: {fileID: 4962483941760880838} - m_Layer: 8 + m_Layer: 13 m_Name: Object008 m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/47.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/47.prefab index 91f621723..bfe215b15 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/47.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/47.prefab @@ -1273,7 +1273,7 @@ GameObject: - component: {fileID: 8207041444167803595} - component: {fileID: 728935727241014291} - component: {fileID: 477389409078863193} - m_Layer: 8 + m_Layer: 13 m_Name: Box032 m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/8.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/48-old.prefab similarity index 58% rename from GQ_URP/GQ/Assets/prefab/老模型/8.prefab rename to GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/48-old.prefab index 07f27f74f..6e7fe1a4c 100644 --- a/GQ_URP/GQ/Assets/prefab/老模型/8.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/48-old.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &255882140279185659 +--- !u!1 &361372262157179312 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,880 +8,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1160103613500181503} - - component: {fileID: 3608114798376723519} - - component: {fileID: 2023984480299699398} - m_Layer: 8 - m_Name: 8 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1160103613500181503 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 255882140279185659} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0, z: -0.032154445} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3608114798376723519 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 255882140279185659} - m_Mesh: {fileID: 5270879433523947816, guid: 56d787cf8c89606489c2bb251ce1ffc6, type: 3} ---- !u!23 &2023984480299699398 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 255882140279185659} - 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: -1446609209366700916, guid: 56d787cf8c89606489c2bb251ce1ffc6, type: 3} - - {fileID: 4460647416255028466, guid: 56d787cf8c89606489c2bb251ce1ffc6, type: 3} - - {fileID: 1164559979738526386, guid: 56d787cf8c89606489c2bb251ce1ffc6, type: 3} - - {fileID: -1152147162816932204, guid: 56d787cf8c89606489c2bb251ce1ffc6, type: 3} - - {fileID: -5309146791756261813, guid: 56d787cf8c89606489c2bb251ce1ffc6, type: 3} - - {fileID: 1196480866727828669, guid: 56d787cf8c89606489c2bb251ce1ffc6, type: 3} - - {fileID: 7626191068330388430, guid: 56d787cf8c89606489c2bb251ce1ffc6, type: 3} - - {fileID: 8290782892783832528, guid: 56d787cf8c89606489c2bb251ce1ffc6, type: 3} - - {fileID: 8830196273332348141, guid: 56d787cf8c89606489c2bb251ce1ffc6, type: 3} - 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!1 &612243761399600640 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8434323042976378316} - - component: {fileID: 1080938065926031309} - - component: {fileID: 8793926876297115604} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8434323042976378316 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 612243761399600640} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.044060007, y: 0.018140003, z: 0.002400007} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1080938065926031309 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 612243761399600640} - 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!114 &8793926876297115604 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 612243761399600640} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 14 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1635212289593118281 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3613511892299275301} - - component: {fileID: 1036717795835562602} - - component: {fileID: 2752074540298761173} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3613511892299275301 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1635212289593118281} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.29550007, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1036717795835562602 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1635212289593118281} - 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!114 &2752074540298761173 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1635212289593118281} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1646403407572744421 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4479823541686802772} - - component: {fileID: 4597701605497463193} - - component: {fileID: 6958032775335724814} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4479823541686802772 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1646403407572744421} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.021099988, y: 0.018140003, z: 0.002400007} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4597701605497463193 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1646403407572744421} - 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!114 &6958032775335724814 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1646403407572744421} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 13 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1828485824514327693 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8022958918186935722} - - component: {fileID: 8616292962202891732} - - component: {fileID: 1986236358740338064} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8022958918186935722 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1828485824514327693} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.17830002, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8616292962202891732 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1828485824514327693} - 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!114 &1986236358740338064 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1828485824514327693} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2026533529053111463 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8961524569712645498} - - component: {fileID: 3019360724712362891} - - component: {fileID: 2179674635776537304} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8961524569712645498 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2026533529053111463} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20183004, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3019360724712362891 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2026533529053111463} - 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!114 &2179674635776537304 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2026533529053111463} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2102421570035905597 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4675207239432393982} - - component: {fileID: 5761976838690146364} - - component: {fileID: 7930683810573721946} - m_Layer: 11 - m_Name: Cube (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4675207239432393982 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2102421570035905597} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.22538002, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 23 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5761976838690146364 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2102421570035905597} - 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!114 &7930683810573721946 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2102421570035905597} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 21 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2168631467341709152 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6937295208331839998} - - component: {fileID: 7805554790484371357} - - component: {fileID: 5755337817000267312} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6937295208331839998 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2168631467341709152} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.09150002, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7805554790484371357 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2168631467341709152} - 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!114 &5755337817000267312 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2168631467341709152} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2420801850255935833 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 112550166686492951} - - component: {fileID: 1219790771061761698} - - component: {fileID: 1917860979489508880} - m_Layer: 11 - m_Name: Cube (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &112550166686492951 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2420801850255935833} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.24891001, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 24 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1219790771061761698 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2420801850255935833} - 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!114 &1917860979489508880 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2420801850255935833} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 22 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3061339311846594041 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8875859995315347572} - - component: {fileID: 629697705149558164} - - component: {fileID: 1894797987793540424} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8875859995315347572 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3061339311846594041} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.020449992, y: 0.018140003, z: 0.002400007} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &629697705149558164 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3061339311846594041} - 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!114 &1894797987793540424 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3061339311846594041} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4033706736141606128 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7422063400903198911} - - component: {fileID: 795045561260072586} - - component: {fileID: 2041798058044966475} - m_Layer: 11 - m_Name: Cube (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7422063400903198911 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4033706736141606128} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.067250006, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &795045561260072586 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4033706736141606128} - 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!114 &2041798058044966475 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4033706736141606128} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 15 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4288841306982294025 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4738737683115993803} - - component: {fileID: 4649583248218112650} - - component: {fileID: 7184283868683118010} + - component: {fileID: 2297191049661490466} + - component: {fileID: 3102693824504194064} + - component: {fileID: 3292951557381896159} m_Layer: 11 m_Name: Cube (2) m_TagString: Untagged @@ -889,41 +18,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4738737683115993803 +--- !u!4 &2297191049661490466 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4288841306982294025} + m_GameObject: {fileID: 361372262157179312} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.24935006, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} + m_LocalPosition: {x: 0.3799, y: -0.002730012, z: 0.03416998} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 5 + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4649583248218112650 +--- !u!65 &3102693824504194064 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4288841306982294025} + m_GameObject: {fileID: 361372262157179312} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7184283868683118010 +--- !u!114 &3292951557381896159 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4288841306982294025} + m_GameObject: {fileID: 361372262157179312} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -949,7 +78,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &4544130337262748248 +--- !u!1 &602922190339104659 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -957,207 +86,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1622089044028902571} - - component: {fileID: 1056120139873712855} - - component: {fileID: 4684174418475026235} + - component: {fileID: 8568234881423213722} + - component: {fileID: 1433702912064060571} + - component: {fileID: 7402162338450499700} m_Layer: 11 - m_Name: Cube (15) + m_Name: Cube (20) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1622089044028902571 +--- !u!4 &8568234881423213722 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4544130337262748248} + m_GameObject: {fileID: 602922190339104659} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.09078001, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} + m_LocalPosition: {x: 0.316, y: -0.0026999712, z: 0.014500026} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1056120139873712855 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4544130337262748248} - 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!114 &4684174418475026235 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4544130337262748248} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 16 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4835694914437022934 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8060497156721500811} - - component: {fileID: 6174191594647355376} - - component: {fileID: 3579657708275641621} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8060497156721500811 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4835694914437022934} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.22582006, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6174191594647355376 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4835694914437022934} - 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!114 &3579657708275641621 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4835694914437022934} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5450233722761865559 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5740017951174696880} - - component: {fileID: 5807520771285994719} - - component: {fileID: 3513449730711004144} - m_Layer: 11 - m_Name: Cube (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5740017951174696880 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5450233722761865559} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.17922997, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} + m_Father: {fileID: 1981063751103061301} m_RootOrder: 21 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5807520771285994719 +--- !u!65 &1433702912064060571 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5450233722761865559} + m_GameObject: {fileID: 602922190339104659} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3513449730711004144 +--- !u!114 &7402162338450499700 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5450233722761865559} + m_GameObject: {fileID: 602922190339104659} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1170,7 +143,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 19 + portPosition: 21 deviceId: deviceName: portModel: @@ -1183,7 +156,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &5478203444874312611 +--- !u!1 &848319880663636723 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1191,9 +164,87 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7047416502518878808} - - component: {fileID: 5853698379550188601} - - component: {fileID: 2020926126387812598} + - component: {fileID: 2643347220451863108} + - component: {fileID: 1792262382326212814} + - component: {fileID: 5645518875700114564} + m_Layer: 11 + m_Name: Cube (23) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2643347220451863108 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 848319880663636723} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2713, y: -0.0026999712, z: 0.014500026} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 24 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1792262382326212814 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 848319880663636723} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5645518875700114564 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 848319880663636723} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 24 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &958318824516326643 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4069680101207233006} + - component: {fileID: 379742964440594529} + - component: {fileID: 4484981810203659449} m_Layer: 11 m_Name: Cube (19) m_TagString: Untagged @@ -1201,41 +252,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7047416502518878808 +--- !u!4 &4069680101207233006 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5478203444874312611} + m_GameObject: {fileID: 958318824516326643} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.20219001, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} + m_LocalPosition: {x: 0.3352, y: -0.0026999712, z: 0.014500026} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 22 + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 20 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5853698379550188601 +--- !u!65 &379742964440594529 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5478203444874312611} + m_GameObject: {fileID: 958318824516326643} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2020926126387812598 +--- !u!114 &4484981810203659449 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5478203444874312611} + m_GameObject: {fileID: 958318824516326643} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1261,7 +312,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6091845917617491980 +--- !u!1 &1012821140123879307 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1269,51 +320,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8478822298290770943} - - component: {fileID: 5331903393291960799} - - component: {fileID: 6365590864313772945} + - component: {fileID: 6781594820258106736} + - component: {fileID: 8968060958074308791} + - component: {fileID: 305821541816374376} m_Layer: 11 - m_Name: Cube (6) + m_Name: Cube (21) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8478822298290770943 +--- !u!4 &6781594820258106736 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6091845917617491980} + m_GameObject: {fileID: 1012821140123879307} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.13765004, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} + m_LocalPosition: {x: 0.3013, y: -0.0026999712, z: 0.014500026} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 9 + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 22 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5331903393291960799 +--- !u!65 &8968060958074308791 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6091845917617491980} + m_GameObject: {fileID: 1012821140123879307} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6365590864313772945 +--- !u!114 &305821541816374376 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6091845917617491980} + m_GameObject: {fileID: 1012821140123879307} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1326,7 +377,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 7 + portPosition: 22 deviceId: deviceName: portModel: @@ -1339,7 +390,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6307683705137331014 +--- !u!1 &1168110505376008079 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1347,333 +398,132 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2210509082012795981} - - component: {fileID: 1935536927752455581} - - component: {fileID: 3544661546672383774} - m_Layer: 11 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2210509082012795981 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6307683705137331014} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.27290004, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 25 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1935536927752455581 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6307683705137331014} - 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!114 &3544661546672383774 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6307683705137331014} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 23 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6576590158815329624 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7309057261477665856} + - component: {fileID: 1981063751103061301} + - component: {fileID: 3229641035481715344} + - component: {fileID: 807562844596430426} + - component: {fileID: 4592096825198803796} + - component: {fileID: 2392768970474473103} + - component: {fileID: 7988944686712835721} + - component: {fileID: 172744034187221557} + - component: {fileID: 4033291464226215495} + - component: {fileID: 555558352510390801} m_Layer: 8 - m_Name: "\u951A\u70B9" + m_Name: 48-old m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7309057261477665856 +--- !u!4 &1981063751103061301 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6576590158815329624} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: -0.04500001, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &6741695964583702450 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8437215418686591860} - - component: {fileID: 122388492712969774} - - component: {fileID: 3626572479828596706} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8437215418686591860 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6741695964583702450} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.13830003, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &122388492712969774 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6741695964583702450} - 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!114 &3626572479828596706 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6741695964583702450} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 18 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6982916693761705814 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1981625885387512556} - - component: {fileID: 2731445949816252712} - - component: {fileID: 7249031694274734089} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1981625885387512556 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6982916693761705814} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.27254006, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2731445949816252712 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6982916693761705814} - 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!114 &7249031694274734089 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6982916693761705814} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7223660192962080294 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8031123203987485852} - - component: {fileID: 3845004119453544233} - - component: {fileID: 6883307159968879611} - - component: {fileID: 7535219155289886183} - - component: {fileID: -8906659584527597601} - - component: {fileID: -2288637705171059198} - m_Layer: 8 - m_Name: 8 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8031123203987485852 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7223660192962080294} - m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} + m_GameObject: {fileID: 1168110505376008079} + m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 1160103613500181503} - - {fileID: 2758679914016866283} - - {fileID: 7309057261477665856} - - {fileID: 3613511892299275301} - - {fileID: 1981625885387512556} - - {fileID: 4738737683115993803} - - {fileID: 8060497156721500811} - - {fileID: 8961524569712645498} - - {fileID: 8022958918186935722} - - {fileID: 8478822298290770943} - - {fileID: 1062788544977796067} - - {fileID: 6937295208331839998} - - {fileID: 9016827152002204053} - - {fileID: 1855753692074777204} - - {fileID: 8875859995315347572} - - {fileID: 4479823541686802772} - - {fileID: 8434323042976378316} - - {fileID: 7422063400903198911} - - {fileID: 1622089044028902571} - - {fileID: 3015093468418634780} - - {fileID: 8437215418686591860} - - {fileID: 5740017951174696880} - - {fileID: 7047416502518878808} - - {fileID: 4675207239432393982} - - {fileID: 112550166686492951} - - {fileID: 2210509082012795981} - - {fileID: 5541745474885392379} + - {fileID: 4458362074202912671} + - {fileID: 4408012711535963329} + - {fileID: 2571926749980871299} + - {fileID: 2297191049661490466} + - {fileID: 660108382714141734} + - {fileID: 2112427366521100405} + - {fileID: 4128450309978273094} + - {fileID: 3639738768856274586} + - {fileID: 2482118435128684028} + - {fileID: 1655427410644802856} + - {fileID: 8782096228198878896} + - {fileID: 4544786329588662367} + - {fileID: 5119581025485890499} + - {fileID: 7052090952923099570} + - {fileID: 8228268210899981393} + - {fileID: 7050615659789375707} + - {fileID: 6174550395718720753} + - {fileID: 7571271347034650931} + - {fileID: 1962335834906477667} + - {fileID: 8654037657719947928} + - {fileID: 4069680101207233006} + - {fileID: 8568234881423213722} + - {fileID: 6781594820258106736} + - {fileID: 9136593275285695304} + - {fileID: 2643347220451863108} + - {fileID: 2670912344263857810} + - {fileID: 7372432911886032180} + - {fileID: 7055655098131205985} + - {fileID: 3433762916647262701} + - {fileID: 7385802029667790710} + - {fileID: 8402396104259709053} m_Father: {fileID: 0} m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &3845004119453544233 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 90} +--- !u!33 &3229641035481715344 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1168110505376008079} + m_Mesh: {fileID: 3181909582359037443, guid: e5a285c67cecfde4380c9d25d337f626, type: 3} +--- !u!23 &807562844596430426 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1168110505376008079} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 94cb99f38fa96f84eafa2c0b80a90e9c, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 10ac57f42847b114584025b79f149fd9, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!114 &4592096825198803796 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7223660192962080294} + m_GameObject: {fileID: 1168110505376008079} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -1697,8 +547,8 @@ MonoBehaviour: rackType: openFlag: backDoorFlag: - modelNum: 8 - occupyNum: 1 + modelNum: 48 + occupyNum: 2 residueNum: operationTime: directorName: @@ -1725,13 +575,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &6883307159968879611 +--- !u!114 &2392768970474473103 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7223660192962080294} + m_GameObject: {fileID: 1168110505376008079} m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} @@ -1747,26 +597,26 @@ MonoBehaviour: isTarget: 0 isplace: 0 canPut: 0 ---- !u!114 &7535219155289886183 +--- !u!114 &7988944686712835721 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7223660192962080294} + m_GameObject: {fileID: 1168110505376008079} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &-8906659584527597601 +--- !u!114 &172744034187221557 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7223660192962080294} + m_GameObject: {fileID: 1168110505376008079} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} @@ -1783,182 +633,35 @@ MonoBehaviour: original_shebei: [] search_u_wei: 0 is_jigui: 0 ---- !u!114 &-2288637705171059198 +--- !u!114 &4033291464226215495 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7223660192962080294} + m_GameObject: {fileID: 1168110505376008079} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} m_Name: m_EditorClassIdentifier: volume: 1 - selfIcon: {fileID: 21300000, guid: ca411173a30d40b43b36630e0698412c, type: 3} ---- !u!1 &7411968106273326882 -GameObject: + selfIcon: {fileID: 21300000, guid: 6725e2395289f4241ac3155dd84f89d8, type: 3} +--- !u!64 &555558352510390801 +MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2758679914016866283} - - component: {fileID: 1951505091067374898} - - component: {fileID: 4154542151297389280} - m_Layer: 8 - m_Name: Box018 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2758679914016866283 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7411968106273326882} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.00007867813, y: 0, z: 0.0010538921} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1951505091067374898 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7411968106273326882} - m_Mesh: {fileID: 4733244715438518452, guid: 56d787cf8c89606489c2bb251ce1ffc6, type: 3} ---- !u!23 &4154542151297389280 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7411968106273326882} - 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: 18858803709778759, guid: 56d787cf8c89606489c2bb251ce1ffc6, type: 3} - 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!1 &7645824405388862780 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1855753692074777204} - - component: {fileID: 4197822752592927725} - - component: {fileID: 6414596182673832658} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1855753692074777204 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7645824405388862780} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.043979988, y: 0.018140003, z: 0.002400007} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4197822752592927725 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7645824405388862780} + m_GameObject: {fileID: 1168110505376008079} 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!114 &6414596182673832658 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7645824405388862780} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7717726966180822160 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 3181909582359037443, guid: e5a285c67cecfde4380c9d25d337f626, type: 3} +--- !u!1 &1551441514904679641 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1966,285 +669,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5541745474885392379} - - component: {fileID: 151865576229780011} - - component: {fileID: 3432492305699888083} + - component: {fileID: 8782096228198878896} + - component: {fileID: 6495873085727753350} + - component: {fileID: 6910406720188175630} m_Layer: 11 - m_Name: Cube (23) + m_Name: Cube (09) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5541745474885392379 +--- !u!4 &8782096228198878896 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7717726966180822160} + m_GameObject: {fileID: 1551441514904679641} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.29643002, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} + m_LocalPosition: {x: 0.2713, y: -0.002730012, z: 0.03416998} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 26 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &151865576229780011 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7717726966180822160} - 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!114 &3432492305699888083 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7717726966180822160} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 24 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8139711525153562355 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1062788544977796067} - - component: {fileID: 1908391477791361615} - - component: {fileID: 3493223602223203556} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1062788544977796067 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8139711525153562355} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.114690036, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} + m_Father: {fileID: 1981063751103061301} m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1908391477791361615 +--- !u!65 &6495873085727753350 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8139711525153562355} + m_GameObject: {fileID: 1551441514904679641} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3493223602223203556 +--- !u!114 &6910406720188175630 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8139711525153562355} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8784589918744255775 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3015093468418634780} - - component: {fileID: 6978291199992568720} - - component: {fileID: 1533481064971845009} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3015093468418634780 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8784589918744255775} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.11477004, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 19 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6978291199992568720 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8784589918744255775} - 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!114 &1533481064971845009 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8784589918744255775} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 17 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8876433742715880264 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9016827152002204053} - - component: {fileID: 7335725998284691251} - - component: {fileID: 6730309406084221811} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9016827152002204053 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8876433742715880264} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.067970015, y: 0.018140003, z: 0.0024000108} - m_LocalScale: {x: 0.010873022, y: 0.010873021, z: 0.010873021} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8031123203987485852} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7335725998284691251 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8876433742715880264} - 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!114 &6730309406084221811 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8876433742715880264} + m_GameObject: {fileID: 1551441514904679641} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2270,3 +739,1906 @@ MonoBehaviour: remark: createTime: createName: +--- !u!1 &1722659695684393406 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7055655098131205985} + - component: {fileID: 3609952794573317220} + - component: {fileID: 928109132441009004} + m_Layer: 11 + m_Name: Cube (26) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7055655098131205985 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1722659695684393406} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.3043, y: -0.0026999712, z: 0.014500026} + m_LocalScale: {x: 0.00811, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 27 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3609952794573317220 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1722659695684393406} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &928109132441009004 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1722659695684393406} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 27 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2878995836456540030 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4128450309978273094} + - component: {fileID: 8183800591697720300} + - component: {fileID: 3202252406774505044} + m_Layer: 11 + m_Name: Cube (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4128450309978273094 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2878995836456540030} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.3352, y: -0.002730012, z: 0.03416998} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8183800591697720300 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2878995836456540030} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3202252406774505044 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2878995836456540030} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3520897265133800949 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4408012711535963329} + - component: {fileID: 676452285303867256} + - component: {fileID: 2538478939723950695} + m_Layer: 11 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4408012711535963329 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3520897265133800949} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.4099, y: -0.002730012, z: 0.03416998} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &676452285303867256 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3520897265133800949} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2538478939723950695 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3520897265133800949} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3705444427551713687 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4458362074202912671} + m_Layer: 8 + m_Name: "\u951A\u70B9" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4458362074202912671 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3705444427551713687} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: -0.30000007, z: -0.045000017} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3795633722222572078 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7385802029667790710} + - component: {fileID: 2714887305150898567} + - component: {fileID: 3406680527507726818} + m_Layer: 11 + m_Name: Cube (28) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7385802029667790710 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3795633722222572078} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.3269, y: -0.0026999712, z: 0.014500026} + m_LocalScale: {x: 0.00811, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 29 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2714887305150898567 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3795633722222572078} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3406680527507726818 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3795633722222572078} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 29 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4003956847806159871 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9136593275285695304} + - component: {fileID: 2759594621644623610} + - component: {fileID: 6360587264470979073} + m_Layer: 11 + m_Name: Cube (22) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9136593275285695304 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4003956847806159871} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.286, y: -0.0026999712, z: 0.014500026} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 23 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2759594621644623610 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4003956847806159871} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6360587264470979073 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4003956847806159871} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 23 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4324673838440534170 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7571271347034650931} + - component: {fileID: 2058911780620276435} + - component: {fileID: 7362151113170632441} + m_Layer: 11 + m_Name: Cube (16) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7571271347034650931 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4324673838440534170} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.3799, y: -0.0026999712, z: 0.014500026} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2058911780620276435 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4324673838440534170} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7362151113170632441 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4324673838440534170} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 17 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4347621624765709090 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7050615659789375707} + - component: {fileID: 3142578287097216631} + - component: {fileID: 8519616052318110773} + m_Layer: 11 + m_Name: Cube (14) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7050615659789375707 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4347621624765709090} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.4099, y: -0.0026999712, z: 0.014500026} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3142578287097216631 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4347621624765709090} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8519616052318110773 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4347621624765709090} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 15 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4434754331386464062 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8402396104259709053} + - component: {fileID: 6208080271238653520} + - component: {fileID: 5046885102081719998} + m_Layer: 11 + m_Name: Cube (29) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8402396104259709053 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4434754331386464062} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.3402, y: -0.0026999712, z: 0.014500026} + m_LocalScale: {x: 0.00811, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 30 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6208080271238653520 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4434754331386464062} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5046885102081719998 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4434754331386464062} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 30 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5231608724215212095 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8228268210899981393} + - component: {fileID: 2889027729432729860} + - component: {fileID: 3468358472914856046} + m_Layer: 11 + m_Name: Cube (13) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8228268210899981393 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5231608724215212095} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.3409, y: -0.0026999712, z: 0.037100025} + m_LocalScale: {x: 0.0130199995, y: 0.00851, z: 0.01214} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2889027729432729860 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5231608724215212095} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3468358472914856046 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5231608724215212095} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 14 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5873602672455592750 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5119581025485890499} + - component: {fileID: 3347813578830136589} + - component: {fileID: 4679403564978127833} + m_Layer: 11 + m_Name: Cube (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5119581025485890499 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5873602672455592750} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2413, y: -0.002730012, z: 0.03416998} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3347813578830136589 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5873602672455592750} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4679403564978127833 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5873602672455592750} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5934891929711275197 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2112427366521100405} + - component: {fileID: 6801164417631201397} + - component: {fileID: 7525387807345635166} + m_Layer: 11 + m_Name: Cube (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2112427366521100405 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5934891929711275197} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.3499, y: -0.002730012, z: 0.03416998} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6801164417631201397 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5934891929711275197} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7525387807345635166 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5934891929711275197} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5951802307388749728 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1962335834906477667} + - component: {fileID: 1979460295623978206} + - component: {fileID: 8080645094672058461} + m_Layer: 11 + m_Name: Cube (17) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1962335834906477667 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5951802307388749728} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.3652, y: -0.0026999712, z: 0.014500026} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1979460295623978206 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5951802307388749728} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8080645094672058461 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5951802307388749728} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 18 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6019732290678947101 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1655427410644802856} + - component: {fileID: 789124375310084390} + - component: {fileID: 7296867718322551770} + m_Layer: 11 + m_Name: Cube (08) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1655427410644802856 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6019732290678947101} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.286, y: -0.002730012, z: 0.03416998} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &789124375310084390 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6019732290678947101} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7296867718322551770 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6019732290678947101} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 9 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6058626562309375392 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3433762916647262701} + - component: {fileID: 8775627375307984710} + - component: {fileID: 6103948113213573938} + m_Layer: 11 + m_Name: Cube (27) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3433762916647262701 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6058626562309375392} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.3148, y: -0.0026999712, z: 0.014500026} + m_LocalScale: {x: 0.00811, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 28 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8775627375307984710 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6058626562309375392} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6103948113213573938 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6058626562309375392} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 28 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6875801746016553133 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8654037657719947928} + - component: {fileID: 909995007124001850} + - component: {fileID: 694012139001247603} + m_Layer: 11 + m_Name: Cube (18) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8654037657719947928 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6875801746016553133} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.3499, y: -0.0026999712, z: 0.014500026} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &909995007124001850 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6875801746016553133} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &694012139001247603 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6875801746016553133} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 19 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6959174953934704082 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2571926749980871299} + - component: {fileID: 6856277627592724038} + - component: {fileID: 3677509693202811940} + m_Layer: 11 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2571926749980871299 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6959174953934704082} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.3952, y: -0.002730012, z: 0.03416998} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6856277627592724038 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6959174953934704082} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3677509693202811940 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6959174953934704082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7350892488835959738 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3639738768856274586} + - component: {fileID: 3671005399759138889} + - component: {fileID: 3463789553920379681} + m_Layer: 11 + m_Name: Cube (06) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3639738768856274586 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7350892488835959738} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.316, y: -0.002730012, z: 0.03416998} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3671005399759138889 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7350892488835959738} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3463789553920379681 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7350892488835959738} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7478492862910099241 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4544786329588662367} + - component: {fileID: 4884901985377936014} + - component: {fileID: 6677155282836839272} + m_Layer: 11 + m_Name: Cube (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4544786329588662367 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7478492862910099241} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.256, y: -0.002730012, z: 0.03416998} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &4884901985377936014 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7478492862910099241} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6677155282836839272 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7478492862910099241} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7747079878241867867 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6174550395718720753} + - component: {fileID: 1891223782485984542} + - component: {fileID: 5150281116351421737} + m_Layer: 11 + m_Name: Cube (15) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6174550395718720753 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7747079878241867867} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.3952, y: -0.0026999712, z: 0.014500026} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1891223782485984542 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7747079878241867867} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5150281116351421737 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7747079878241867867} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 16 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8128288297493241868 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2482118435128684028} + - component: {fileID: 8882363498436341038} + - component: {fileID: 3638629467974466887} + m_Layer: 11 + m_Name: Cube (07) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2482118435128684028 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8128288297493241868} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.3013, y: -0.002730012, z: 0.03416998} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8882363498436341038 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8128288297493241868} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3638629467974466887 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8128288297493241868} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8347245350302458417 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7052090952923099570} + - component: {fileID: 7340602724815038313} + - component: {fileID: 2911599004727017664} + m_Layer: 11 + m_Name: Cube (12) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7052090952923099570 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8347245350302458417} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.3059, y: -0.0026999712, z: 0.037100025} + m_LocalScale: {x: 0.0130199995, y: 0.00851, z: 0.01214} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7340602724815038313 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8347245350302458417} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2911599004727017664 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8347245350302458417} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 13 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8488042019125271633 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2670912344263857810} + - component: {fileID: 7730034622774210341} + - component: {fileID: 989230079524326823} + m_Layer: 11 + m_Name: Cube (24) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2670912344263857810 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8488042019125271633} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.256, y: -0.0026999712, z: 0.014500026} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 25 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7730034622774210341 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8488042019125271633} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &989230079524326823 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8488042019125271633} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 25 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8998133189527392153 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 660108382714141734} + - component: {fileID: 2477540786086281189} + - component: {fileID: 2861782089938841945} + m_Layer: 11 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &660108382714141734 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8998133189527392153} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.3652, y: -0.002730012, z: 0.03416998} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2477540786086281189 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8998133189527392153} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2861782089938841945 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8998133189527392153} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &9005117414176212590 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7372432911886032180} + - component: {fileID: 1425871754691611119} + - component: {fileID: 1025190355274411516} + m_Layer: 11 + m_Name: Cube (25) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7372432911886032180 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9005117414176212590} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2413, y: -0.0026999712, z: 0.014500026} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981063751103061301} + m_RootOrder: 26 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1425871754691611119 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9005117414176212590} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.0000005, z: 1.0000005} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1025190355274411516 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9005117414176212590} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 26 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/10.prefab.meta b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/48-old.prefab.meta similarity index 74% rename from GQ_URP/GQ/Assets/prefab/老模型/10.prefab.meta rename to GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/48-old.prefab.meta index e5e31a78c..0766b1dd0 100644 --- a/GQ_URP/GQ/Assets/prefab/老模型/10.prefab.meta +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/48-old.prefab.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e87d1add9efa21f45b73911a07e36061 +guid: e547ce72167d75a4896f727f000d72e4 PrefabImporter: externalObjects: {} userData: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/48.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/48.prefab index ab32c461c..6f5ba958b 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/48.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/48.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &64396714157553156 +--- !u!1 &123315553419169736 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,321 +8,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 275419918813116714} - - component: {fileID: 3409665103211548031} - - component: {fileID: 4026715685569689365} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &275419918813116714 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 64396714157553156} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1630001, y: -0.002730012, z: 0.034169972} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3409665103211548031 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 64396714157553156} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4026715685569689365 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 64396714157553156} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &417736960168062306 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6996962646714934811} - - component: {fileID: 5583200080681096020} - - component: {fileID: 6837857768726460560} - m_Layer: 11 - m_Name: Cube (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6996962646714934811 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 417736960168062306} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0544, y: -0.0026999712, z: 0.014500022} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 22 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5583200080681096020 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 417736960168062306} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6837857768726460560 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 417736960168062306} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 22 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &475765317211501958 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2330750022042133790} - - component: {fileID: 58757472782799237} - - component: {fileID: 6252066974973572314} - m_Layer: 11 - m_Name: Cube (25) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2330750022042133790 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 475765317211501958} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1501, y: -0.0026999712, z: 0.037100017} - m_LocalScale: {x: 0.013016265, y: 0.008513371, z: 0.012138815} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &58757472782799237 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 475765317211501958} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6252066974973572314 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 475765317211501958} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 14 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &928032767482060243 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3582878253229136199} - - component: {fileID: 9045202522542647672} - - component: {fileID: 1676421412194549425} - m_Layer: 11 - m_Name: Cube (24) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3582878253229136199 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 928032767482060243} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.13319969, y: -0.0026999712, z: 0.037100017} - m_LocalScale: {x: 0.013016265, y: 0.008513371, z: 0.012138815} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9045202522542647672 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 928032767482060243} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1676421412194549425 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 928032767482060243} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 13 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1175348778940544351 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6677779515733589007} - - component: {fileID: 3781494592277327767} - - component: {fileID: 7327575487411877497} + - component: {fileID: 3034534160284254222} + - component: {fileID: 853947982934679894} + - component: {fileID: 5696548546593735975} m_Layer: 11 m_Name: Cube (18) m_TagString: Untagged @@ -330,1632 +18,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6677779515733589007 +--- !u!4 &3034534160284254222 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1175348778940544351} + m_GameObject: {fileID: 123315553419169736} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.06910038, y: -0.0026999712, z: 0.014500022} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} + m_LocalPosition: {x: 0.2572, y: -0.0019395631, z: 0.014500022} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 21 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3781494592277327767 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1175348778940544351} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7327575487411877497 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1175348778940544351} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 21 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1195246355980676476 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 987432505340089588} - - component: {fileID: 7655455605071319417} - - component: {fileID: 6021496326028887667} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &987432505340089588 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1195246355980676476} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1183, y: -0.002730012, z: 0.034169972} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7655455605071319417 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1195246355980676476} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6021496326028887667 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1195246355980676476} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1218266462324469982 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7573337270416491220} - - component: {fileID: 1614562297715939337} - - component: {fileID: 6455893483647854959} - m_Layer: 11 - m_Name: Cube (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7573337270416491220 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1218266462324469982} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0244, y: -0.0026999712, z: 0.014500022} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 24 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1614562297715939337 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1218266462324469982} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6455893483647854959 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1218266462324469982} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 24 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1829492662623677758 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4915533657218257183} - - component: {fileID: 5462881447102934562} - - component: {fileID: 8625067377174344340} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4915533657218257183 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1829492662623677758} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1183, y: -0.0026999712, z: 0.014500022} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5462881447102934562 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1829492662623677758} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8625067377174344340 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1829492662623677758} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 18 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2959285012594822304 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2292658485331494726} - - component: {fileID: 6858890505139862081} - - component: {fileID: 3044163950980187217} - m_Layer: 11 - m_Name: Cube (28) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2292658485331494726 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2959285012594822304} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.15240002, y: -0.0026999712, z: 0.014500022} - m_LocalScale: {x: 0.00811385, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 29 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6858890505139862081 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2959285012594822304} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3044163950980187217 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2959285012594822304} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 29 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3021637471454157509 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7055754302613847371} - - component: {fileID: 1870743312357510589} - - component: {fileID: 3745859860948883684} - m_Layer: 11 - m_Name: Cube (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7055754302613847371 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3021637471454157509} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.039079666, y: -0.002730012, z: 0.034169972} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1870743312357510589 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3021637471454157509} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3745859860948883684 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3021637471454157509} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3082152402054735947 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3928842825839102454} - - component: {fileID: 5576160175309532549} - - component: {fileID: 4652979570620129304} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3928842825839102454 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3082152402054735947} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.10299969, y: -0.002730012, z: 0.034169972} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5576160175309532549 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3082152402054735947} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4652979570620129304 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3082152402054735947} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3092178372486016117 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6749550956881457433} - - component: {fileID: 5485504005734415905} - - component: {fileID: 8043937034690880265} - m_Layer: 11 - m_Name: Cube (29) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6749550956881457433 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3092178372486016117} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1657, y: -0.0026999712, z: 0.014500022} - m_LocalScale: {x: 0.00811385, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 30 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5485504005734415905 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3092178372486016117} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8043937034690880265 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3092178372486016117} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 30 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3128388876589819154 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 675990100303023839} - - component: {fileID: 3981086555570230862} - - component: {fileID: 2044511872997845791} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &675990100303023839 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3128388876589819154} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1630001, y: -0.0026999712, z: 0.014500022} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3981086555570230862 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3128388876589819154} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2044511872997845791 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3128388876589819154} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 15 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3130455632801186333 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2829240307237633199} - - component: {fileID: 6742844950320758882} - - component: {fileID: 8647593949288883504} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2829240307237633199 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3130455632801186333} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.13298035, y: -0.002730012, z: 0.034169972} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6742844950320758882 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3130455632801186333} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8647593949288883504 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3130455632801186333} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3830856765798602294 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1999687550524095368} - - component: {fileID: 2952888008159128619} - - component: {fileID: 2779073077558337479} - m_Layer: 11 - m_Name: Cube (26) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1999687550524095368 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3830856765798602294} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.12979984, y: -0.0026999712, z: 0.014500022} - m_LocalScale: {x: 0.00811385, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 27 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2952888008159128619 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3830856765798602294} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2779073077558337479 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3830856765798602294} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 27 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3980906589719734472 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8664895522984027344} - - component: {fileID: 40097903009111013} - - component: {fileID: 1622701297106414431} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8664895522984027344 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3980906589719734472} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0883, y: -0.0026999712, z: 0.014500022} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &40097903009111013 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3980906589719734472} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1622701297106414431 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3980906589719734472} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 20 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4078168979641750730 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2001276518186787093} - - component: {fileID: 2861645361015405939} - - component: {fileID: 7256759086348888186} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2001276518186787093 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4078168979641750730} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0544, y: -0.002730012, z: 0.034169972} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2861645361015405939 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4078168979641750730} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7256759086348888186 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4078168979641750730} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4081340850672716819 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2602523416058352440} - - component: {fileID: 1575384670091505711} - - component: {fileID: 7087318683294520598} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2602523416058352440 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4081340850672716819} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.13298035, y: -0.0026999712, z: 0.014500022} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1575384670091505711 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4081340850672716819} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7087318683294520598 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4081340850672716819} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 17 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4473648806988279161 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6565433470031453049} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6565433470031453049 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4473648806988279161} - m_LocalRotation: {x: 0.7071068, y: -0, z: 0, w: 0.7071068} - m_LocalPosition: {x: 0, y: -0.3, z: -0.045000006} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &4701126167946260533 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 492973153309588315} - - component: {fileID: 4128155643061355499} - - component: {fileID: 5186770668627607414} - m_Layer: 11 - m_Name: Cube (27) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &492973153309588315 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4701126167946260533} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1403, y: -0.0026999712, z: 0.014500022} - m_LocalScale: {x: 0.00811385, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 28 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4128155643061355499 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4701126167946260533} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5186770668627607414 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4701126167946260533} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 28 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5286150495131985271 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4596469242927636562} - - component: {fileID: 8480002015859106936} - - component: {fileID: 8744354096147851185} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4596469242927636562 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5286150495131985271} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0056, y: -0.002730012, z: 0.034169972} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8480002015859106936 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5286150495131985271} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8744354096147851185 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5286150495131985271} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5446301196152086305 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3968931123829980457} - - component: {fileID: 6562492956518181862} - - component: {fileID: 2644479410261509450} - m_Layer: 11 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3968931123829980457 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5446301196152086305} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00909996, y: -0.0026999712, z: 0.014500022} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 25 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6562492956518181862 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5446301196152086305} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2644479410261509450 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5446301196152086305} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 25 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5458912041434297025 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 963380562340327981} - - component: {fileID: 7146015323927397142} - - component: {fileID: 8050764269368251202} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &963380562340327981 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5458912041434297025} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00909996, y: -0.002730012, z: 0.034169972} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7146015323927397142 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5458912041434297025} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8050764269368251202 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5458912041434297025} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6799677636592311075 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1314633299980578351} - - component: {fileID: 6026598114653882330} - - component: {fileID: 8431713822901252885} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1314633299980578351 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6799677636592311075} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0883, y: -0.002730012, z: 0.034169972} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6026598114653882330 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6799677636592311075} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8431713822901252885 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6799677636592311075} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7403502851116661620 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 177510519180835293} - - component: {fileID: 1259112172171471335} - - component: {fileID: 381627218766575469} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &177510519180835293 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7403502851116661620} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.06910038, y: -0.002730012, z: 0.034169972} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1259112172171471335 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7403502851116661620} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &381627218766575469 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7403502851116661620} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7815866588348109013 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4976275334266424916} - - component: {fileID: 3674854979044221570} - - component: {fileID: 533182958765645463} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4976275334266424916 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7815866588348109013} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.10299969, y: -0.0026999712, z: 0.014500022} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} + m_Father: {fileID: 8930171613211127241} m_RootOrder: 19 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3674854979044221570 +--- !u!65 &853947982934679894 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7815866588348109013} + m_GameObject: {fileID: 123315553419169736} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &533182958765645463 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &5696548546593735975 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7815866588348109013} + m_GameObject: {fileID: 123315553419169736} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1981,7 +78,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7907693267883938442 +--- !u!1 &522365328411576862 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1989,15 +86,2074 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7419141135673067568} - - component: {fileID: 5861942995632719765} - - component: {fileID: 8556057888577549151} - - component: {fileID: 717382858128420745} - - component: {fileID: 8169398922854624954} - - component: {fileID: 5635636001699159393} - - component: {fileID: 2077049885432329912} - - component: {fileID: 1878251095796164127} - - component: {fileID: -9008535879137602999} + - component: {fileID: 5757416111765260754} + - component: {fileID: 7792528323774188441} + - component: {fileID: 3223054604904735946} + m_Layer: 11 + m_Name: Cube (22) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5757416111765260754 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 522365328411576862} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2095, y: -0.0019395631, z: 0.014500022} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 23 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7792528323774188441 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 522365328411576862} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &3223054604904735946 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 522365328411576862} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 23 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &576725546155906917 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 678641256218876535} + - component: {fileID: 8165029596070153560} + - component: {fileID: 2256107935123187146} + m_Layer: 11 + m_Name: Cube (07) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &678641256218876535 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576725546155906917} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2199, y: -0.0019696057, z: 0.034169972} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8165029596070153560 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576725546155906917} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &2256107935123187146 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576725546155906917} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &730478836101141623 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7093491093832936515} + - component: {fileID: 3605792228095372983} + - component: {fileID: 3621981128345699226} + m_Layer: 11 + m_Name: Cube (09) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7093491093832936515 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 730478836101141623} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.198, y: -0.0019696057, z: 0.034169972} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3605792228095372983 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 730478836101141623} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &3621981128345699226 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 730478836101141623} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 10 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &764260644280314995 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1633092965442241082} + - component: {fileID: 1841958277112960061} + - component: {fileID: 7445479667633088653} + m_Layer: 11 + m_Name: Cube (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1633092965442241082 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 764260644280314995} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.1867, y: -0.0019696057, z: 0.034169972} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1841958277112960061 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 764260644280314995} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &7445479667633088653 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 764260644280314995} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1380816280202283902 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1605729142072732160} + - component: {fileID: 8134595894537180612} + - component: {fileID: 3366170090856913632} + m_Layer: 11 + m_Name: Cube (06) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1605729142072732160 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380816280202283902} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.232, y: -0.0019696057, z: 0.034169972} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8134595894537180612 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380816280202283902} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &3366170090856913632 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380816280202283902} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1636686774711807713 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3218703711196472793} + - component: {fileID: 7809823380149095031} + - component: {fileID: 1838175513982310944} + m_Layer: 11 + m_Name: Cube (26) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3218703711196472793 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1636686774711807713} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2297, y: -0.0019395631, z: 0.014500022} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 27 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7809823380149095031 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1636686774711807713} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.5373941, y: 1.0000005, z: 0.84098953} + m_Center: {x: 0.15258992, y: 0, z: 0.0007665811} +--- !u!114 &1838175513982310944 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1636686774711807713} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 27 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1851339168670509673 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 228631084562944833} + - component: {fileID: 65053720946356308} + - component: {fileID: 6451494213171919141} + m_Layer: 11 + m_Name: Cube (25) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &228631084562944833 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1851339168670509673} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.1759, y: -0.0019395631, z: 0.014500037} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 26 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &65053720946356308 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1851339168670509673} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &6451494213171919141 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1851339168670509673} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 26 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1888718513462832796 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7868939114842901645} + - component: {fileID: 5864871237920219887} + - component: {fileID: 642056874749802983} + m_Layer: 11 + m_Name: Cube (24) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7868939114842901645 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1888718513462832796} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.1877, y: -0.0019395631, z: 0.014500022} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 25 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &5864871237920219887 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1888718513462832796} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &642056874749802983 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1888718513462832796} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 25 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3043353424417775692 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4188567203781857605} + - component: {fileID: 4682911644872864391} + - component: {fileID: 5696586216366762150} + m_Layer: 11 + m_Name: Cube (15) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4188567203781857605 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3043353424417775692} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2905, y: -0.0019395631, z: 0.014500022} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &4682911644872864391 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3043353424417775692} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &5696586216366762150 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3043353424417775692} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 16 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3324828045142714840 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7739411672320098538} + - component: {fileID: 2613894496409809995} + - component: {fileID: 6784246609352513254} + m_Layer: 11 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7739411672320098538 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3324828045142714840} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2796, y: -0.0019696057, z: 0.034169972} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2613894496409809995 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3324828045142714840} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &6784246609352513254 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3324828045142714840} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3364619592436454776 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6701977865388697027} + - component: {fileID: 371725765161660949} + - component: {fileID: 7365156527621555182} + m_Layer: 11 + m_Name: Cube (29) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6701977865388697027 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3364619592436454776} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2556, y: -0.0019395631, z: 0.014500022} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 30 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &371725765161660949 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3364619592436454776} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.5373941, y: 1.0000005, z: 0.84098953} + m_Center: {x: 0.15258992, y: 0, z: 0.0007665811} +--- !u!114 &7365156527621555182 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3364619592436454776} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 30 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3834575827100974975 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3869287757914522289} + - component: {fileID: 2615269576914031331} + - component: {fileID: 5587129784916114725} + m_Layer: 11 + m_Name: Cube (17) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3869287757914522289 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3834575827100974975} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2686, y: -0.0019395631, z: 0.014500022} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2615269576914031331 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3834575827100974975} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &5587129784916114725 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3834575827100974975} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 18 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3844486493551329266 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3855687733254249517} + - component: {fileID: 5669591607829598159} + - component: {fileID: 7647709476321207394} + m_Layer: 11 + m_Name: Cube (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3855687733254249517 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3844486493551329266} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.1753, y: -0.0019696057, z: 0.034169972} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &5669591607829598159 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3844486493551329266} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &7647709476321207394 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3844486493551329266} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4261435204700672952 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2219408691266147211} + - component: {fileID: 4041266793039182037} + - component: {fileID: 6951438989853566561} + m_Layer: 11 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2219408691266147211 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4261435204700672952} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.3016, y: -0.0019696057, z: 0.034169972} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &4041266793039182037 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4261435204700672952} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &6951438989853566561 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4261435204700672952} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5119904168937624305 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5049684773290588638} + - component: {fileID: 2910570183577265614} + - component: {fileID: 6605003334173727979} + m_Layer: 11 + m_Name: Cube (14) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5049684773290588638 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5119904168937624305} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.302, y: -0.0019395631, z: 0.014500022} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2910570183577265614 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5119904168937624305} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &6605003334173727979 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5119904168937624305} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 15 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5131459022837447400 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 589488283367625138} + - component: {fileID: 212510960612221595} + - component: {fileID: 4917034342073460186} + m_Layer: 11 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &589488283367625138 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5131459022837447400} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2923, y: -0.0019696057, z: 0.034169972} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &212510960612221595 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5131459022837447400} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.81940925, y: 1.0000005, z: 1.1838759} + m_Center: {x: 0.012897547, y: 0, z: 0.030645743} +--- !u!114 &4917034342073460186 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5131459022837447400} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5359960874101837829 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8885935948898029630} + - component: {fileID: 3137799669773556832} + - component: {fileID: 4030324827681964272} + m_Layer: 11 + m_Name: Cube (16) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8885935948898029630 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5359960874101837829} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2796, y: -0.0019395631, z: 0.014500022} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3137799669773556832 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5359960874101837829} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &4030324827681964272 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5359960874101837829} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 17 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5413991849382623186 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4579104175056507367} + - component: {fileID: 3953313422809447858} + - component: {fileID: 1365295587860194762} + m_Layer: 11 + m_Name: Cube (28) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4579104175056507367 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5413991849382623186} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.247, y: -0.0019395631, z: 0.014500022} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 29 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3953313422809447858 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5413991849382623186} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.5373941, y: 1.0000005, z: 0.84098953} + m_Center: {x: 0.15258992, y: 0, z: 0.0007665811} +--- !u!114 &1365295587860194762 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5413991849382623186} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 29 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5698041326757274409 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1730692607076506565} + - component: {fileID: 9179220652260677090} + - component: {fileID: 678590062940424778} + m_Layer: 11 + m_Name: Cube (13) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1730692607076506565 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5698041326757274409} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2564, y: -0.001939565, z: 0.0358} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &9179220652260677090 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5698041326757274409} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &678590062940424778 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5698041326757274409} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 14 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5750288466069744470 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9105130339290373359} + - component: {fileID: 6189098633380827099} + - component: {fileID: 6026247058296129274} + m_Layer: 11 + m_Name: Cube (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9105130339290373359 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5750288466069744470} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2427, y: -0.0019696057, z: 0.034169972} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6189098633380827099 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5750288466069744470} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &6026247058296129274 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5750288466069744470} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6057950954835665961 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7250406155521280616} + - component: {fileID: 3757090923599884875} + - component: {fileID: 1324839724678920987} + m_Layer: 11 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7250406155521280616 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6057950954835665961} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2683, y: -0.0019696057, z: 0.034169972} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3757090923599884875 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6057950954835665961} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &1324839724678920987 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6057950954835665961} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6692409510033790704 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3888553169867536430} + - component: {fileID: 3541795822118525258} + - component: {fileID: 8536018542428220491} + m_Layer: 11 + m_Name: Cube (20) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3888553169867536430 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6692409510033790704} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2328, y: -0.0019395631, z: 0.014500022} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 21 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3541795822118525258 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6692409510033790704} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &8536018542428220491 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6692409510033790704} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 21 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6795151594896344579 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8494374786380571871} + - component: {fileID: 4942673264750143594} + - component: {fileID: 9214658452066287989} + m_Layer: 11 + m_Name: Cube (08) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8494374786380571871 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6795151594896344579} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.209, y: -0.0019696057, z: 0.034169972} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &4942673264750143594 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6795151594896344579} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &9214658452066287989 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6795151594896344579} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 9 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6992486528317416155 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5785701492701859077} + m_Layer: 8 + m_Name: "\u951A\u70B9" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5785701492701859077 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6992486528317416155} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: -0.29923967, z: -0.045000017} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7272251832244897703 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1154370917898465517} + - component: {fileID: 5862623251331482746} + - component: {fileID: 2486776233199236907} + m_Layer: 11 + m_Name: Cube (12) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1154370917898465517 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7272251832244897703} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.23, y: -0.001939565, z: 0.0367} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &5862623251331482746 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7272251832244897703} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &2486776233199236907 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7272251832244897703} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 13 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7864847474057802426 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1319508538843149301} + - component: {fileID: 2799874753580057346} + - component: {fileID: 7686054898617324558} + m_Layer: 11 + m_Name: Cube (27) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1319508538843149301 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7864847474057802426} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2386, y: -0.0019395631, z: 0.014500022} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 28 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2799874753580057346 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7864847474057802426} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.5373941, y: 1.0000005, z: 0.84098953} + m_Center: {x: 0.15258992, y: 0, z: 0.0007665811} +--- !u!114 &7686054898617324558 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7864847474057802426} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 28 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8091040157419329641 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1221340719171872813} + - component: {fileID: 8805898926030679125} + - component: {fileID: 7953724348483446534} + m_Layer: 11 + m_Name: Cube (19) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1221340719171872813 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8091040157419329641} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2457, y: -0.0019395631, z: 0.014500022} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8805898926030679125 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8091040157419329641} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &7953724348483446534 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8091040157419329641} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 20 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8117042785192359795 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8930171613211127241} + - component: {fileID: 5494827303692591724} + - component: {fileID: 7756741276370081446} + - component: {fileID: 422286507262668040} + - component: {fileID: 4714735269049410715} + - component: {fileID: 4508967448837493878} + - component: {fileID: 7118017633581412717} + - component: {fileID: 915124783263377760} + - component: {fileID: 8053506089352008914} m_Layer: 8 m_Name: 48 m_TagString: Untagged @@ -2005,67 +2161,67 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7419141135673067568 +--- !u!4 &8930171613211127241 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7907693267883938442} + m_GameObject: {fileID: 8117042785192359795} m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} - m_LocalPosition: {x: -0, y: 0, z: 0} - m_LocalScale: {x: 1.797796, y: 1, z: 1} + m_LocalPosition: {x: 0.0007604079, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 6565433470031453049} - - {fileID: 275419918813116714} - - {fileID: 1780929707884520900} - - {fileID: 2829240307237633199} - - {fileID: 987432505340089588} - - {fileID: 3928842825839102454} - - {fileID: 1314633299980578351} - - {fileID: 177510519180835293} - - {fileID: 2001276518186787093} - - {fileID: 7055754302613847371} - - {fileID: 6476346795775459942} - - {fileID: 963380562340327981} - - {fileID: 4596469242927636562} - - {fileID: 3582878253229136199} - - {fileID: 2330750022042133790} - - {fileID: 675990100303023839} - - {fileID: 8780192072076201774} - - {fileID: 2602523416058352440} - - {fileID: 4915533657218257183} - - {fileID: 4976275334266424916} - - {fileID: 8664895522984027344} - - {fileID: 6677779515733589007} - - {fileID: 6996962646714934811} - - {fileID: 1397396657260736409} - - {fileID: 7573337270416491220} - - {fileID: 3968931123829980457} - - {fileID: 2423269213585237576} - - {fileID: 1999687550524095368} - - {fileID: 492973153309588315} - - {fileID: 2292658485331494726} - - {fileID: 6749550956881457433} + - {fileID: 5785701492701859077} + - {fileID: 2219408691266147211} + - {fileID: 589488283367625138} + - {fileID: 7739411672320098538} + - {fileID: 7250406155521280616} + - {fileID: 7382666350187550936} + - {fileID: 9105130339290373359} + - {fileID: 1605729142072732160} + - {fileID: 678641256218876535} + - {fileID: 8494374786380571871} + - {fileID: 7093491093832936515} + - {fileID: 1633092965442241082} + - {fileID: 3855687733254249517} + - {fileID: 1154370917898465517} + - {fileID: 1730692607076506565} + - {fileID: 5049684773290588638} + - {fileID: 4188567203781857605} + - {fileID: 8885935948898029630} + - {fileID: 3869287757914522289} + - {fileID: 3034534160284254222} + - {fileID: 1221340719171872813} + - {fileID: 3888553169867536430} + - {fileID: 9153377578158852470} + - {fileID: 5757416111765260754} + - {fileID: 650832695866352636} + - {fileID: 7868939114842901645} + - {fileID: 228631084562944833} + - {fileID: 3218703711196472793} + - {fileID: 1319508538843149301} + - {fileID: 4579104175056507367} + - {fileID: 6701977865388697027} m_Father: {fileID: 0} m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} ---- !u!33 &5861942995632719765 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 90} +--- !u!33 &5494827303692591724 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7907693267883938442} + m_GameObject: {fileID: 8117042785192359795} m_Mesh: {fileID: 3181909582359037443, guid: e5a285c67cecfde4380c9d25d337f626, type: 3} ---- !u!23 &8556057888577549151 +--- !u!23 &7756741276370081446 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7907693267883938442} + m_GameObject: {fileID: 8117042785192359795} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -2108,13 +2264,13 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &717382858128420745 +--- !u!114 &422286507262668040 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7907693267883938442} + m_GameObject: {fileID: 8117042785192359795} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -2166,13 +2322,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &8169398922854624954 +--- !u!114 &4714735269049410715 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7907693267883938442} + m_GameObject: {fileID: 8117042785192359795} m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} @@ -2182,32 +2338,32 @@ MonoBehaviour: frames: [] PerTier: 42 PerRow: 5 - volume: 2 + volume: 1 isExit: 0 isClicked: 0 isTarget: 0 isplace: 0 canPut: 0 ---- !u!114 &5635636001699159393 +--- !u!114 &4508967448837493878 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7907693267883938442} + m_GameObject: {fileID: 8117042785192359795} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &2077049885432329912 +--- !u!114 &7118017633581412717 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7907693267883938442} + m_GameObject: {fileID: 8117042785192359795} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} @@ -2224,27 +2380,27 @@ MonoBehaviour: original_shebei: [] search_u_wei: 0 is_jigui: 0 ---- !u!114 &1878251095796164127 +--- !u!114 &915124783263377760 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7907693267883938442} + m_GameObject: {fileID: 8117042785192359795} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} m_Name: m_EditorClassIdentifier: - volume: 2 + volume: 1 selfIcon: {fileID: 21300000, guid: 6725e2395289f4241ac3155dd84f89d8, type: 3} ---- !u!64 &-9008535879137602999 +--- !u!64 &8053506089352008914 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7907693267883938442} + m_GameObject: {fileID: 8117042785192359795} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -2252,7 +2408,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 3181909582359037443, guid: e5a285c67cecfde4380c9d25d337f626, type: 3} ---- !u!1 &7998551715733363309 +--- !u!1 &8763205005687784428 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2260,321 +2416,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1780929707884520900} - - component: {fileID: 6597193393413913310} - - component: {fileID: 4177913089006253231} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1780929707884520900 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7998551715733363309} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1483, y: -0.002730012, z: 0.034169972} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6597193393413913310 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7998551715733363309} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4177913089006253231 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7998551715733363309} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8532449311722351680 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8780192072076201774} - - component: {fileID: 4022820541098957281} - - component: {fileID: 6207112006449190510} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8780192072076201774 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8532449311722351680} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1483, y: -0.0026999712, z: 0.014500022} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4022820541098957281 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8532449311722351680} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6207112006449190510 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8532449311722351680} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 16 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8537288578508967524 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1397396657260736409} - - component: {fileID: 2656190786911351487} - - component: {fileID: 5110206923005045406} - m_Layer: 11 - m_Name: Cube (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1397396657260736409 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8537288578508967524} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.039079666, y: -0.0026999712, z: 0.014500022} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 23 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2656190786911351487 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8537288578508967524} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5110206923005045406 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8537288578508967524} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 23 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8725261104804527307 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6476346795775459942} - - component: {fileID: 4028466527820697445} - - component: {fileID: 4695213370978363742} - m_Layer: 11 - m_Name: Cube (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6476346795775459942 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8725261104804527307} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0244, y: -0.002730012, z: 0.034169972} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4028466527820697445 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8725261104804527307} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4695213370978363742 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8725261104804527307} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9130724321404620331 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2423269213585237576} - - component: {fileID: 8563301162869791534} - - component: {fileID: 2699592567095427811} + - component: {fileID: 650832695866352636} + - component: {fileID: 7861936757218453247} + - component: {fileID: 4904517499337772755} m_Layer: 11 m_Name: Cube (23) m_TagString: Untagged @@ -2582,41 +2426,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2423269213585237576 +--- !u!4 &650832695866352636 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9130724321404620331} + m_GameObject: {fileID: 8763205005687784428} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0056, y: -0.0026999712, z: 0.014500022} - m_LocalScale: {x: 0.01100183, y: 0.008513371, z: 0.009259909} + m_LocalPosition: {x: 0.1986, y: -0.0019395631, z: 0.014500022} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7419141135673067568} - m_RootOrder: 26 + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 24 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8563301162869791534 +--- !u!65 &7861936757218453247 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9130724321404620331} + m_GameObject: {fileID: 8763205005687784428} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1.0000005, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2699592567095427811 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &4904517499337772755 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9130724321404620331} + m_GameObject: {fileID: 8763205005687784428} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2629,7 +2473,163 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 26 + portPosition: 24 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &9174005395957090276 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9153377578158852470} + - component: {fileID: 6516219290951273317} + - component: {fileID: 8562298806126687859} + m_Layer: 11 + m_Name: Cube (21) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9153377578158852470 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9174005395957090276} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2208, y: -0.0019395631, z: 0.014500022} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 22 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6516219290951273317 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9174005395957090276} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &8562298806126687859 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9174005395957090276} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 22 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &9199585637737908849 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7382666350187550936} + - component: {fileID: 1609070045193315543} + - component: {fileID: 808020074327576095} + m_Layer: 11 + m_Name: Cube (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7382666350187550936 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9199585637737908849} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2567, y: -0.0019696057, z: 0.034169972} + m_LocalScale: {x: 0.011, y: 0.00851, z: 0.00926} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8930171613211127241} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1609070045193315543 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9199585637737908849} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.87994564, y: 1.0000005, z: 1.1779417} + m_Center: {x: 0.15340994, y: 0, z: 0.04127469} +--- !u!114 &808020074327576095 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9199585637737908849} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 deviceId: deviceName: portModel: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/48.prefab.meta b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/48.prefab.meta index 0766b1dd0..b716baad0 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/48.prefab.meta +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/48.prefab.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e547ce72167d75a4896f727f000d72e4 +guid: 3cd7e78f0393d4546a49e4fb56660c05 PrefabImporter: externalObjects: {} userData: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/55.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/55.prefab index 0992d3a98..b503f2498 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/55.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/55.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &61869963095108111 +--- !u!1 &30185239823286794 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,51 +8,141 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4741315910522783867} - - component: {fileID: 7249404896478464490} - - component: {fileID: 1027949755553716804} - m_Layer: 11 - m_Name: Cube (17) + - component: {fileID: 1736814007133966979} + - component: {fileID: 4670197577520366342} + - component: {fileID: 2937084632582995091} + m_Layer: 8 + m_Name: Object087 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4741315910522783867 +--- !u!4 &1736814007133966979 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 61869963095108111} + m_GameObject: {fileID: 30185239823286794} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009997189, y: -0.30460048, z: -0.004099995} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} + m_LocalPosition: {x: -0.25604844, y: -0.007866442, z: 0.24984208} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 4709397190120940411} - m_RootOrder: 2 + m_Father: {fileID: 581050114892090470} + m_RootOrder: 37 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7249404896478464490 +--- !u!33 &4670197577520366342 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 30185239823286794} + m_Mesh: {fileID: -2662323533501562378, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &2937084632582995091 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 30185239823286794} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &188515217266900708 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4434452782867742975} + - component: {fileID: 6885267636737847972} + - component: {fileID: 8691876002900696120} + m_Layer: 11 + m_Name: Cube (15) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4434452782867742975 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 188515217266900708} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.00059996545, y: -0.30460024, z: 0.068399996} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5100378216737473266} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6885267636737847972 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 61869963095108111} + m_GameObject: {fileID: 188515217266900708} 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!114 &1027949755553716804 +--- !u!114 &8691876002900696120 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 61869963095108111} + m_GameObject: {fileID: 188515217266900708} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -65,7 +155,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 3 + portPosition: 1 deviceId: deviceName: portModel: @@ -78,7 +168,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &168173133639198970 +--- !u!1 &389528697635018166 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -86,52 +176,140 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4458437672247867750} - - component: {fileID: 5851476932652312353} - - component: {fileID: 8824327036224566752} - - component: {fileID: 5851476932652312355} - - component: {fileID: 5851476932652312352} - - component: {fileID: 535517699041607489} - - component: {fileID: 2751664737083462177} + - component: {fileID: 4612464104083379533} + - component: {fileID: 6827050187103344583} + - component: {fileID: 2340113212982300765} m_Layer: 8 + m_Name: Object064 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4612464104083379533 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 389528697635018166} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.15827939, y: -0.007866353, z: 0.24984208} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 581050114892090470} + m_RootOrder: 26 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6827050187103344583 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 389528697635018166} + m_Mesh: {fileID: 70222690664163882, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &2340113212982300765 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 389528697635018166} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &416149410476624243 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4200873620633491695} + - component: {fileID: 6244120458464364200} + - component: {fileID: 9071731319887418473} + - component: {fileID: 1676777942410681554} + - component: {fileID: 5048161354176975539} + - component: {fileID: 7137463935642428125} + - component: {fileID: 215379331066655738} + m_Layer: 13 m_Name: Object034 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4458437672247867750 +--- !u!4 &4200873620633491695 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 168173133639198970} + m_GameObject: {fileID: 416149410476624243} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.08523495, y: 0.31237376, z: 0.44462687} + m_LocalPosition: {x: -0.08767949, y: 0.017654955, z: 0.6944689} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 3518988568457591320} - - {fileID: 3518988566727873210} - m_Father: {fileID: 8759592556452939278} + - {fileID: 2034972370499380040} + - {fileID: 6630262861214383386} + m_Father: {fileID: 581050114892090470} m_RootOrder: 17 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5851476932652312353 +--- !u!33 &6244120458464364200 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 168173133639198970} + m_GameObject: {fileID: 416149410476624243} m_Mesh: {fileID: 1857916439425390961, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &8824327036224566752 +--- !u!23 &9071731319887418473 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 168173133639198970} + m_GameObject: {fileID: 416149410476624243} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -174,26 +352,31 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &5851476932652312355 +--- !u!114 &1676777942410681554 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 168173133639198970} + m_GameObject: {fileID: 416149410476624243} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} m_Name: m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5851476932652312352 + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!114 &5048161354176975539 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 168173133639198970} + m_GameObject: {fileID: 416149410476624243} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -245,31 +428,26 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &535517699041607489 +--- !u!114 &7137463935642428125 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 168173133639198970} + m_GameObject: {fileID: 416149410476624243} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &2751664737083462177 + tmsAlarmLists: [] +--- !u!64 &215379331066655738 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 168173133639198970} + m_GameObject: {fileID: 416149410476624243} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -277,7 +455,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 1857916439425390961, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &169609534212277902 +--- !u!1 &621003893755105045 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -285,431 +463,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1407631790702617045} - - component: {fileID: 110604803189525006} - - component: {fileID: 6661476460372638117} - m_Layer: 11 - m_Name: Cube (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1407631790702617045 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 169609534212277902} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.000099975616, y: -0.29360047, z: -0.01609999} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1545860545188959874} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &110604803189525006 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 169609534212277902} - 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!114 &6661476460372638117 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 169609534212277902} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &213058366304269375 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5157130199548556484} - - component: {fileID: 6425933825744418382} - - component: {fileID: 2876337452554170836} - m_Layer: 8 - m_Name: Object064 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5157130199548556484 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 213058366304269375} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1582794, y: 0.28685242, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 26 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6425933825744418382 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 213058366304269375} - m_Mesh: {fileID: 70222690664163882, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &2876337452554170836 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 213058366304269375} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &574262198181176195 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2272464167749432074} - - component: {fileID: 5142216657247888015} - - component: {fileID: 3409668934121069850} - m_Layer: 8 - m_Name: Object087 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2272464167749432074 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 574262198181176195} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2560484, y: 0.28685233, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 37 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5142216657247888015 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 574262198181176195} - m_Mesh: {fileID: -2662323533501562378, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &3409668934121069850 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 574262198181176195} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &762424339719285816 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7177580546384128331} - - component: {fileID: 6833525189505292294} - - component: {fileID: 9001074606246193009} - m_Layer: 11 - m_Name: Cube (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7177580546384128331 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 762424339719285816} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009997189, y: -0.29360047, z: -0.01609999} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4709397190120940411} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6833525189505292294 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 762424339719285816} - 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!114 &9001074606246193009 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 762424339719285816} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &873532122738465066 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3204200018261396148} - - component: {fileID: 8900731440358584072} - - component: {fileID: 7246328669425846848} - m_Layer: 8 - m_Name: Object071 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3204200018261396148 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 873532122738465066} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.19086906, y: 0.28685236, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 30 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8900731440358584072 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 873532122738465066} - m_Mesh: {fileID: -831774524296487689, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &7246328669425846848 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 873532122738465066} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &1084579150172188316 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1874115533180273061} - - component: {fileID: 5899543348700069530} - - component: {fileID: 5075872298898132765} + - component: {fileID: 2130553471922217004} + - component: {fileID: 6218466504626642707} + - component: {fileID: 4747378722464018068} m_Layer: 8 m_Name: Object061 m_TagString: Untagged @@ -717,36 +473,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1874115533180273061 +--- !u!4 &2130553471922217004 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1084579150172188316} + m_GameObject: {fileID: 621003893755105045} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1256898, y: 0.28685242, z: 0} + m_LocalPosition: {x: 0.12568972, y: -0.007866353, z: 0.24984208} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8759592556452939278} + m_Father: {fileID: 581050114892090470} m_RootOrder: 25 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5899543348700069530 +--- !u!33 &6218466504626642707 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1084579150172188316} + m_GameObject: {fileID: 621003893755105045} m_Mesh: {fileID: -4778756733448772780, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &5075872298898132765 +--- !u!23 &4747378722464018068 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1084579150172188316} + m_GameObject: {fileID: 621003893755105045} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -787,7 +543,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &1665992901823064709 +--- !u!1 &673664398560291238 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -795,51 +551,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4024954686760107589} - - component: {fileID: 626032561469764129} - - component: {fileID: 6624605952101781137} + - component: {fileID: 3364195657457880252} + - component: {fileID: 1016516055889638859} + - component: {fileID: 4424752087095414312} m_Layer: 11 - m_Name: Cube (16) + m_Name: Cube (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4024954686760107589 +--- !u!4 &3364195657457880252 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1665992901823064709} + m_GameObject: {fileID: 673664398560291238} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00040003285, y: -0.29360023, z: 0.0564} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} + m_LocalPosition: {x: -0.0014849007, y: -0.19640002, z: -0.10229999} + m_LocalScale: {x: 0.01133, y: 0.01117, z: 0.01414} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 1545860545188959874} - m_RootOrder: 1 + m_Father: {fileID: 2858460395545577028} + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &626032561469764129 +--- !u!65 &1016516055889638859 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1665992901823064709} + m_GameObject: {fileID: 673664398560291238} 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!114 &6624605952101781137 +--- !u!114 &4424752087095414312 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1665992901823064709} + m_GameObject: {fileID: 673664398560291238} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -852,7 +608,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 2 + portPosition: 6 deviceId: deviceName: portModel: @@ -865,7 +621,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &1959583683178693183 +--- !u!1 &832152093432133795 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -873,77 +629,87 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4946681099065479658} - - component: {fileID: 2850578084932249250} - - component: {fileID: 3847428935745004352} - m_Layer: 11 - m_Name: Cube (22) + - component: {fileID: 3162819746360191805} + - component: {fileID: 8941559698316840577} + - component: {fileID: 7134595394100390857} + m_Layer: 8 + m_Name: Object071 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4946681099065479658 +--- !u!4 &3162819746360191805 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1959583683178693183} + m_GameObject: {fileID: 832152093432133795} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00009997189, y: -0.29360053, z: -0.01609999} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} + m_LocalPosition: {x: -0.19086902, y: -0.007866412, z: 0.24984208} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8312034079881504766} - m_RootOrder: 3 + m_Father: {fileID: 581050114892090470} + m_RootOrder: 30 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2850578084932249250 -BoxCollider: +--- !u!33 &8941559698316840577 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1959583683178693183} - 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!114 &3847428935745004352 -MonoBehaviour: + m_GameObject: {fileID: 832152093432133795} + m_Mesh: {fileID: -831774524296487689, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &7134595394100390857 +MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1959583683178693183} + m_GameObject: {fileID: 832152093432133795} m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2521204266193564646 + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &1210377339235418400 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -951,9 +717,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2935096702619799414} - - component: {fileID: 3727204934839092618} - - component: {fileID: 8854544118673335583} + - component: {fileID: 8038219547811377898} + - component: {fileID: 6172161023570536042} + - component: {fileID: 6815994584849423724} m_Layer: 11 m_Name: Cube (21) m_TagString: Untagged @@ -961,41 +727,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2935096702619799414 +--- !u!4 &8038219547811377898 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2521204266193564646} + m_GameObject: {fileID: 1210377339235418400} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00009997189, y: -0.30460054, z: -0.004099995} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} + m_LocalPosition: {x: 0.00009988248, y: -0.30460054, z: -0.004099995} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8312034079881504766} + m_Father: {fileID: 8415340705645430391} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3727204934839092618 +--- !u!65 &6172161023570536042 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2521204266193564646} + m_GameObject: {fileID: 1210377339235418400} 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!114 &8854544118673335583 +--- !u!114 &6815994584849423724 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2521204266193564646} + m_GameObject: {fileID: 1210377339235418400} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1021,7 +787,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3007992567257943391 +--- !u!1 &1274551389237168698 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1029,87 +795,77 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 9135412087137359191} - - component: {fileID: 3319043438596691139} - - component: {fileID: 530159836809610517} - m_Layer: 8 - m_Name: Object059 + - component: {fileID: 480129033532614521} + - component: {fileID: 8889149613745518769} + - component: {fileID: 5939472302791848012} + m_Layer: 11 + m_Name: Cube (3) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &9135412087137359191 +--- !u!4 &480129033532614521 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3007992567257943391} + m_GameObject: {fileID: 1274551389237168698} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.19086915, y: 0.28685242, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalPosition: {x: -0.0018848479, y: -0.19640005, z: -0.031399965} + m_LocalScale: {x: 0.01133, y: 0.01117, z: 0.01414} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 23 + m_Father: {fileID: 2858460395545577028} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3319043438596691139 -MeshFilter: +--- !u!65 &8889149613745518769 +BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3007992567257943391} - m_Mesh: {fileID: 8146333293907604950, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &530159836809610517 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3007992567257943391} + m_GameObject: {fileID: 1274551389237168698} + m_Material: {fileID: 0} + m_IsTrigger: 0 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &3353577846325268241 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5939472302791848012 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274551389237168698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1355062391571702310 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1117,58 +873,895 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2321684395504887757} - - component: {fileID: 4453154607913978816} - - component: {fileID: 9208657227110170729} - - component: {fileID: 9208657227110170731} - - component: {fileID: 9208657227110170728} - - component: {fileID: 495240025508395188} - - component: {fileID: 2642152011869972032} - m_Layer: 8 + - component: {fileID: 5078900489283073051} + - component: {fileID: 4844326083013466899} + m_Layer: 0 + m_Name: Object007 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5078900489283073051 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355062391571702310} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.1665163, y: 0.021333694, z: 0.69446886} + m_LocalScale: {x: 0.020000001, y: 0.56656253, z: 0.33984375} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6522156263465914382} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &4844326083013466899 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355062391571702310} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 0.87625486, z: 1} + m_Center: {x: 0, y: 0.020038307, z: 0} +--- !u!1 &1407985110364862695 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7059143788968601365} + - component: {fileID: 5007977241131315596} + - component: {fileID: 3251171129364510739} + m_Layer: 11 + m_Name: Cube (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7059143788968601365 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1407985110364862695} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.0008, y: -0.27610058, z: -0.07109988} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 756282960674280749} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &5007977241131315596 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1407985110364862695} + 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!114 &3251171129364510739 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1407985110364862695} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1458621920533953274 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5802407009533561969} + - component: {fileID: 2423496689229419074} + - component: {fileID: 7632823385748650661} + m_Layer: 11 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5802407009533561969 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1458621920533953274} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.00020000339, y: -0.27610016, z: -0.059600115} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5538140135170800563} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2423496689229419074 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1458621920533953274} + 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!114 &7632823385748650661 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1458621920533953274} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1751614940531227295 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2113741471150753691} + - component: {fileID: 5852012286453054224} + m_Layer: 0 + m_Name: UPos (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &2113741471150753691 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1751614940531227295} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.1665163, y: 0.021333694, z: 0.69446886} + m_LocalScale: {x: 0.020000001, y: 0.56656253, z: 0.33984375} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6522156263465914382} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &5852012286453054224 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1751614940531227295} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 0.87625486, z: 1} + m_Center: {x: 0, y: 0.020038307, z: 0} +--- !u!1 &2285414054508514966 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7373804768147580529} + - component: {fileID: 8955661002210789850} + m_Layer: 0 + m_Name: UPos (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &7373804768147580529 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2285414054508514966} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.1665163, y: 0.021333694, z: 0.69446886} + m_LocalScale: {x: 0.020000001, y: 0.56656253, z: 0.33984375} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6522156263465914382} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8955661002210789850 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2285414054508514966} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 0.87625486, z: 1} + m_Center: {x: 0, y: 0.020038307, z: 0} +--- !u!1 &2302402604942595093 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4925675562344851657} + - component: {fileID: 2100640858376695606} + - component: {fileID: 4389801789764659020} + m_Layer: 11 + m_Name: Cube (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4925675562344851657 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302402604942595093} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.00079998374, y: -0.27610058, z: -0.059599936} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 756282960674280749} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2100640858376695606 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302402604942595093} + 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!114 &4389801789764659020 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302402604942595093} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2584148807857729357 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2176890556168421981} + - component: {fileID: 2136383100897198178} + - component: {fileID: 5320580324225162320} + m_Layer: 11 + m_Name: Cube (19) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2176890556168421981 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2584148807857729357} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.00040012598, y: -0.3046003, z: 0.068399996} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8415340705645430391} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2136383100897198178 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2584148807857729357} + 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!114 &5320580324225162320 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2584148807857729357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2780242176023576525 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3457686439793586802} + - component: {fileID: 6426652304344702212} + - component: {fileID: 4719834279334659429} + m_Layer: 11 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3457686439793586802 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2780242176023576525} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0018849075, y: -0.19640005, z: 0.006300032} + m_LocalScale: {x: 0.01133, y: 0.01117, z: 0.01414} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2858460395545577028} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6426652304344702212 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2780242176023576525} + 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!114 &4719834279334659429 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2780242176023576525} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2791442705851996559 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6236319157629156918} + - component: {fileID: 5733710816475379271} + - component: {fileID: 7209764810628201244} + m_Layer: 11 + m_Name: Cube (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6236319157629156918 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2791442705851996559} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0018848479, y: -0.19640005, z: -0.049300075} + m_LocalScale: {x: 0.01133, y: 0.01117, z: 0.01414} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2858460395545577028} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &5733710816475379271 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2791442705851996559} + 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!114 &7209764810628201244 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2791442705851996559} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2858764641198800984 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8501438678158668086} + - component: {fileID: 3385208384373743696} + - component: {fileID: 2736398851999859082} + m_Layer: 11 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8501438678158668086 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2858764641198800984} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0014849007, y: -0.19640005, z: -0.12080002} + m_LocalScale: {x: 0.01133, y: 0.01117, z: 0.01414} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2858460395545577028} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3385208384373743696 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2858764641198800984} + 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!114 &2736398851999859082 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2858764641198800984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2910179891582176723 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1181507772646165131} + - component: {fileID: 2263802929756238318} + - component: {fileID: 88414638457354843} + m_Layer: 11 + m_Name: Cube (18) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1181507772646165131 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2910179891582176723} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.00009995699, y: -0.29360047, z: -0.016100049} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5100378216737473266} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2263802929756238318 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2910179891582176723} + 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!114 &88414638457354843 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2910179891582176723} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2939619997692950590 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5680709675399097663} + - component: {fileID: 6336921495251261646} + - component: {fileID: 7256310636491891176} + m_Layer: 11 + m_Name: Cube (13) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5680709675399097663 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2939619997692950590} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.00060003996, y: -0.30460042, z: -0.004099995} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8542576054566173656} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6336921495251261646 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2939619997692950590} + 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!114 &7256310636491891176 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2939619997692950590} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2961469103030726296 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2858460395545577028} + - component: {fileID: 4206297972347890249} + - component: {fileID: 8671880955442160096} + - component: {fileID: 4447586160487031057} + - component: {fileID: 7396714887959727840} + - component: {fileID: 4351073971537689933} + - component: {fileID: 3875407104406599597} + m_Layer: 13 m_Name: Object036 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2321684395504887757 +--- !u!4 &2858460395545577028 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3353577846325268241} + m_GameObject: {fileID: 2961469103030726296} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.22829485, y: 0.3848831, z: 0.44462687} + m_LocalPosition: {x: -0.2266101, y: 0.09016436, z: 0.6944689} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 3518988567980855655} - - {fileID: 3518988568451215372} - - {fileID: 3518988568094477811} - - {fileID: 3518988567228639381} - - {fileID: 3518988566962899118} - - {fileID: 3518988567841261081} - - {fileID: 3518988567044146580} - - {fileID: 3518988566825438980} - m_Father: {fileID: 8759592556452939278} + - {fileID: 3457686439793586802} + - {fileID: 7938291817993557396} + - {fileID: 480129033532614521} + - {fileID: 6236319157629156918} + - {fileID: 8642321975949784566} + - {fileID: 3364195657457880252} + - {fileID: 8501438678158668086} + - {fileID: 3495438334822071406} + m_Father: {fileID: 581050114892090470} m_RootOrder: 19 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4453154607913978816 +--- !u!33 &4206297972347890249 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3353577846325268241} + m_GameObject: {fileID: 2961469103030726296} m_Mesh: {fileID: 6018422378889459822, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &9208657227110170729 +--- !u!23 &8671880955442160096 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3353577846325268241} + m_GameObject: {fileID: 2961469103030726296} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1210,13 +1803,31 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &9208657227110170731 +--- !u!114 &4447586160487031057 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3353577846325268241} + m_GameObject: {fileID: 2961469103030726296} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!114 &7396714887959727840 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2961469103030726296} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -1268,44 +1879,26 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &9208657227110170728 +--- !u!114 &4351073971537689933 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3353577846325268241} + m_GameObject: {fileID: 2961469103030726296} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &495240025508395188 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3353577846325268241} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &2642152011869972032 +--- !u!64 &3875407104406599597 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3353577846325268241} + m_GameObject: {fileID: 2961469103030726296} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -1313,7 +1906,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 6018422378889459822, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &3518988566727873211 +--- !u!1 &3132768585688825924 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1321,51 +1914,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3518988566727873210} - - component: {fileID: 3518988566727873212} - - component: {fileID: 3518988566727873213} + - component: {fileID: 6995839407394714779} + - component: {fileID: 8813414449788127442} + - component: {fileID: 8186166681078857149} m_Layer: 11 - m_Name: Cube (8) + m_Name: Cube (16) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3518988566727873210 +--- !u!4 &6995839407394714779 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566727873211} + m_GameObject: {fileID: 3132768585688825924} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0007, y: -0.276, z: -0.0711} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} + m_LocalPosition: {x: -0.00040009618, y: -0.29360023, z: 0.05639994} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 4458437672247867750} + m_Father: {fileID: 1360354012567779083} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988566727873212 +--- !u!65 &8813414449788127442 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566727873211} + m_GameObject: {fileID: 3132768585688825924} 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!114 &3518988566727873213 +--- !u!114 &8186166681078857149 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566727873211} + m_GameObject: {fileID: 3132768585688825924} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1391,7 +1984,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3518988566760019035 +--- !u!1 &3198627340101954834 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1399,243 +1992,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3518988566760019034} - - component: {fileID: 3518988566760019036} - - component: {fileID: 3518988566760019037} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988566760019034 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566760019035} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00039999938, y: -0.2761006, z: -0.059600025} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1003694023116682404} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988566760019036 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566760019035} - 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!114 &3518988566760019037 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566760019035} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988566825438981 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988566825438980} - - component: {fileID: 3518988566825438982} - - component: {fileID: 3518988566825438983} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988566825438980 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566825438981} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00019988418, y: -0.19640002, z: -0.1387} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2321684395504887757} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988566825438982 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566825438981} - 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!114 &3518988566825438983 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566825438981} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988566914806280 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988566914806283} - - component: {fileID: 3518988566914806285} - - component: {fileID: 3518988566914806282} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988566914806283 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566914806280} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00009986758, y: -0.19640008, z: -0.012900025} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5794429086071574721} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988566914806285 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566914806280} - 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!114 &3518988566914806282 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566914806280} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988566955345654 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988566955345641} - - component: {fileID: 3518988566955345643} - - component: {fileID: 3518988566955345640} + - component: {fileID: 3547486670193521643} + - component: {fileID: 8427433924976916656} + - component: {fileID: 8260224290346098094} m_Layer: 11 m_Name: Cube (4) m_TagString: Untagged @@ -1643,41 +2002,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3518988566955345641 +--- !u!4 &3547486670193521643 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566955345654} + m_GameObject: {fileID: 3198627340101954834} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.000100016594, y: -0.2761005, z: -0.07109997} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} + m_LocalPosition: {x: -0.0011754036, y: -0.19640005, z: -0.049300075} + m_LocalScale: {x: 0.01133, y: 0.01117, z: 0.01414} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2147629963090131834} - m_RootOrder: 1 + m_Father: {fileID: 6339660558414541128} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988566955345643 +--- !u!65 &8427433924976916656 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566955345654} + m_GameObject: {fileID: 3198627340101954834} 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!114 &3518988566955345640 +--- !u!114 &8260224290346098094 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566955345654} + m_GameObject: {fileID: 3198627340101954834} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1690,7 +2049,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 2 + portPosition: 4 deviceId: deviceName: portModel: @@ -1703,7 +2062,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3518988566962899119 +--- !u!1 &3245503341075326399 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1711,9 +2070,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3518988566962899118} - - component: {fileID: 3518988566962899104} - - component: {fileID: 3518988566962899105} + - component: {fileID: 8642321975949784566} + - component: {fileID: 3187657246004433861} + - component: {fileID: 6863191862061305078} m_Layer: 11 m_Name: Cube (5) m_TagString: Untagged @@ -1721,41 +2080,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3518988566962899118 +--- !u!4 &8642321975949784566 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566962899119} + m_GameObject: {fileID: 3245503341075326399} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00019988418, y: -0.19640002, z: -0.08309999} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} + m_LocalPosition: {x: -0.0014849007, y: -0.19640005, z: -0.08309996} + m_LocalScale: {x: 0.01133, y: 0.01117, z: 0.01414} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2321684395504887757} + m_Father: {fileID: 2858460395545577028} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988566962899104 +--- !u!65 &3187657246004433861 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566962899119} + m_GameObject: {fileID: 3245503341075326399} 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!114 &3518988566962899105 +--- !u!114 &6863191862061305078 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566962899119} + m_GameObject: {fileID: 3245503341075326399} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1781,7 +2140,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3518988566967247600 +--- !u!1 &3274798549071352813 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1789,51 +2148,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3518988566967247603} - - component: {fileID: 3518988566967247605} - - component: {fileID: 3518988566967247602} + - component: {fileID: 4151196478578378934} + - component: {fileID: 3753608535464088007} + - component: {fileID: 1110767975365023029} m_Layer: 11 - m_Name: Cube (3) + m_Name: Cube (17) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3518988566967247603 +--- !u!4 &4151196478578378934 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566967247600} + m_GameObject: {fileID: 3274798549071352813} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00009986758, y: -0.19640008, z: -0.031399995} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} + m_LocalPosition: {x: -0.00009995699, y: -0.30460048, z: -0.0041000545} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 5794429086071574721} + m_Father: {fileID: 5100378216737473266} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988566967247605 +--- !u!65 &3753608535464088007 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566967247600} + m_GameObject: {fileID: 3274798549071352813} 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!114 &3518988566967247602 +--- !u!114 &1110767975365023029 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988566967247600} + m_GameObject: {fileID: 3274798549071352813} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1859,7 +2218,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3518988567044146581 +--- !u!1 &3327461317908524246 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1867,576 +2226,87 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3518988567044146580} - - component: {fileID: 3518988567044146582} - - component: {fileID: 3518988567044146583} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988567044146580 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567044146581} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00019988418, y: -0.19640002, z: -0.1208} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2321684395504887757} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988567044146582 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567044146581} - 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!114 &3518988567044146583 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567044146581} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988567048464419 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988567048464418} - - component: {fileID: 3518988567048464420} - - component: {fileID: 3518988567048464421} - m_Layer: 11 - m_Name: Cube (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988567048464418 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567048464419} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0006000325, y: -0.2936004, z: -0.01609999} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8151056368901167697} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988567048464420 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567048464419} - 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!114 &3518988567048464421 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567048464419} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988567223613094 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988567223613017} - - component: {fileID: 3518988567223613019} - - component: {fileID: 3518988567223613016} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988567223613017 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567223613094} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0001, y: -0.2693, z: -0.0711} - m_LocalScale: {x: 0.01317, y: 0.02676005, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5424691449148398138} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988567223613019 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567223613094} - 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!114 &3518988567223613016 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567223613094} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988567228639378 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988567228639381} - - component: {fileID: 3518988567228639383} - - component: {fileID: 3518988567228639380} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988567228639381 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567228639378} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0002001226, y: -0.19639999, z: -0.04930006} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2321684395504887757} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988567228639383 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567228639378} - 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!114 &3518988567228639380 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567228639378} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988567520452084 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988567520452087} - - component: {fileID: 3518988567520452073} - - component: {fileID: 3518988567520452086} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988567520452087 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567520452084} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.000100031495, y: -0.29360017, z: 0.0564} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8151056368901167697} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988567520452073 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567520452084} - 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!114 &3518988567520452086 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567520452084} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988567575204492 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988567575204495} - - component: {fileID: 3518988567575204481} - - component: {fileID: 3518988567575204494} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988567575204495 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567575204492} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.000100016594, y: -0.27610055, z: -0.059600025} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2147629963090131834} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988567575204481 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567575204492} - 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!114 &3518988567575204494 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567575204492} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988567584867555 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988567584867554} - - component: {fileID: 3518988567584867556} - - component: {fileID: 3518988567584867557} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988567584867554 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567584867555} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00049987435, y: -0.19640005, z: -0.10230003} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5794429086071574721} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988567584867556 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567584867555} - 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!114 &3518988567584867557 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567584867555} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988567687058613 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988567687058612} + - component: {fileID: 8742768742482015454} + - component: {fileID: 2998431233094137162} + - component: {fileID: 56449673767019676} m_Layer: 8 - m_Name: "\u951A\u70B9" + m_Name: Object059 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3518988567687058612 +--- !u!4 &8742768742482015454 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567687058613} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: -0.3000002, z: -1.1498421} + m_GameObject: {fileID: 3327461317908524246} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.19086912, y: -0.007866353, z: 0.24984208} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 39 + m_Father: {fileID: 581050114892090470} + m_RootOrder: 23 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &3518988567841261158 +--- !u!33 &2998431233094137162 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3327461317908524246} + m_Mesh: {fileID: 8146333293907604950, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &56449673767019676 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3327461317908524246} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &3555098238316807062 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2444,243 +2314,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3518988567841261081} - - component: {fileID: 3518988567841261083} - - component: {fileID: 3518988567841261080} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988567841261081 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567841261158} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00019988418, y: -0.19639999, z: -0.10230003} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2321684395504887757} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988567841261083 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567841261158} - 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!114 &3518988567841261080 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567841261158} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988567980855652 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988567980855655} - - component: {fileID: 3518988567980855577} - - component: {fileID: 3518988567980855654} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988567980855655 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567980855652} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0002001226, y: -0.1964, z: 0.0063000023} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2321684395504887757} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988567980855577 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567980855652} - 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!114 &3518988567980855654 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988567980855652} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988568020417326 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988568020417313} - - component: {fileID: 3518988568020417315} - - component: {fileID: 3518988568020417312} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988568020417313 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568020417326} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00039999938, y: -0.2761006, z: -0.07109997} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1003694023116682404} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988568020417315 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568020417326} - 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!114 &3518988568020417312 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568020417326} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988568094477808 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988568094477811} - - component: {fileID: 3518988568094477813} - - component: {fileID: 3518988568094477810} + - component: {fileID: 5275198880383397012} + - component: {fileID: 4099668371706849040} + - component: {fileID: 2522178812318704252} m_Layer: 11 m_Name: Cube (3) m_TagString: Untagged @@ -2688,197 +2324,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3518988568094477811 +--- !u!4 &5275198880383397012 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568094477808} + m_GameObject: {fileID: 3555098238316807062} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0002001226, y: -0.19640002, z: -0.031399995} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} + m_LocalPosition: {x: 0, y: -0.27610052, z: -0.059599996} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2321684395504887757} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988568094477813 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568094477808} - 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!114 &3518988568094477810 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568094477808} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988568260500802 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988568260500805} - - component: {fileID: 3518988568260500807} - - component: {fileID: 3518988568260500804} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988568260500805 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568260500802} - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.0001, y: -0.2739, z: -0.0725} - m_LocalScale: {x: 0.013169999, y: 0.010910002, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3575328425833037712} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988568260500807 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568260500802} - 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!114 &3518988568260500804 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568260500802} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988568269279119 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988568269279118} - - component: {fileID: 3518988568269279104} - - component: {fileID: 3518988568269279105} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988568269279118 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568269279119} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00009986758, y: -0.19640006, z: 0.0063000023} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5794429086071574721} + m_Father: {fileID: 1900210283077327603} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988568269279104 +--- !u!65 &4099668371706849040 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568269279119} + m_GameObject: {fileID: 3555098238316807062} 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!114 &3518988568269279105 +--- !u!114 &2522178812318704252 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568269279119} + m_GameObject: {fileID: 3555098238316807062} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2904,7 +2384,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3518988568302997208 +--- !u!1 &3561112184538078091 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2912,832 +2392,219 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3518988568302997211} - - component: {fileID: 3518988568302997213} - - component: {fileID: 3518988568302997210} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988568302997211 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568302997208} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00049987435, y: -0.19640008, z: -0.1208} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5794429086071574721} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988568302997213 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568302997208} - 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!114 &3518988568302997210 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568302997208} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988568325330471 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988568325330470} - - component: {fileID: 3518988568325330904} - - component: {fileID: 3518988568325330905} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988568325330470 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568325330471} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0006000325, y: -0.30460042, z: -0.004099995} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8151056368901167697} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988568325330904 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568325330471} - 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!114 &3518988568325330905 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568325330471} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988568410847610 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988568410847613} - - component: {fileID: 3518988568410847615} - - component: {fileID: 3518988568410847612} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988568410847613 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568410847610} - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.0001, y: -0.2739, z: -0.0598} - m_LocalScale: {x: 0.013169999, y: 0.010910002, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3575328425833037712} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988568410847615 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568410847610} - 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!114 &3518988568410847612 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568410847610} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988568451215373 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988568451215372} - - component: {fileID: 3518988568451215374} - - component: {fileID: 3518988568451215375} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988568451215372 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568451215373} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0002001226, y: -0.19640002, z: -0.012900025} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2321684395504887757} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988568451215374 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568451215373} - 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!114 &3518988568451215375 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568451215373} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988568457591321 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988568457591320} - - component: {fileID: 3518988568457591322} - - component: {fileID: 3518988568457591323} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988568457591320 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568457591321} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00069996715, y: -0.27610067, z: -0.059600025} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4458437672247867750} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988568457591322 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568457591321} - 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!114 &3518988568457591323 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568457591321} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988568614055146 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988568614055149} - - component: {fileID: 3518988568614055151} - - component: {fileID: 3518988568614055148} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988568614055149 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568614055146} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00009986758, y: -0.19640005, z: -0.04930006} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5794429086071574721} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988568614055151 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568614055146} - 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!114 &3518988568614055148 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568614055146} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988568701118900 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988568701118903} - - component: {fileID: 3518988568701118889} - - component: {fileID: 3518988568701118902} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988568701118903 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568701118900} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00049987435, y: -0.19640008, z: -0.1387} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5794429086071574721} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988568701118889 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568701118900} - 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!114 &3518988568701118902 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568701118900} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988568782340251 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988568782340250} - - component: {fileID: 3518988568782340252} - - component: {fileID: 3518988568782340253} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988568782340250 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568782340251} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.000100031495, y: -0.30460018, z: 0.068399996} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8151056368901167697} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988568782340252 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568782340251} - 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!114 &3518988568782340253 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568782340251} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988568803285985 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988568803285984} - - component: {fileID: 3518988568803285986} - - component: {fileID: 3518988568803285987} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988568803285984 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568803285985} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009998679, y: -0.2761002, z: -0.059600025} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5424691449148398138} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988568803285986 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568803285985} - 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!114 &3518988568803285987 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568803285985} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3518988568829432880 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518988568829432883} - - component: {fileID: 3518988568829432885} - - component: {fileID: 3518988568829432882} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518988568829432883 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568829432880} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00049987435, y: -0.19640008, z: -0.08309999} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5794429086071574721} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3518988568829432885 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568829432880} - 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!114 &3518988568829432882 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3518988568829432880} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3807842588340140594 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1003694023116682404} - - component: {fileID: 5705835776797760368} - - component: {fileID: 1908003943664383614} - - component: {fileID: 5705835776797760370} - - component: {fileID: 5705835776797760371} - - component: {fileID: 2433250432563168675} - - component: {fileID: 1480785414461485521} + - component: {fileID: 1110583207168770508} + - component: {fileID: 5641188267966986099} + - component: {fileID: 6455748606427799269} m_Layer: 8 + m_Name: Object025 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1110583207168770508 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3561112184538078091} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2020653, y: 0.09016442, z: 0.69446886} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 581050114892090470} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5641188267966986099 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3561112184538078091} + m_Mesh: {fileID: 5791823748547884724, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &6455748606427799269 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3561112184538078091} + 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: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 53a6ea32b66877f4f811139c51424123, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!1 &3666093177858335100 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3560681552879526496} + - component: {fileID: 8926131727264387781} + - component: {fileID: 347834244715498303} + m_Layer: 11 + m_Name: Cube (20) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3560681552879526496 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3666093177858335100} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.00040012598, y: -0.2936003, z: 0.0564} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8415340705645430391} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8926131727264387781 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3666093177858335100} + 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!114 &347834244715498303 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3666093177858335100} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3696084843780152251 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 756282960674280749} + - component: {fileID: 5241132603646966521} + - component: {fileID: 2155423529217972215} + - component: {fileID: 303593067995368347} + - component: {fileID: 7249292111965233675} + - component: {fileID: 5088755634323247442} + - component: {fileID: 970405379789738962} + m_Layer: 13 m_Name: Object033 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1003694023116682404 +--- !u!4 &756282960674280749 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3807842588340140594} + m_GameObject: {fileID: 3696084843780152251} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0.31237376, z: 0.44462687} + m_LocalPosition: {x: -0.0034261048, y: 0.017654955, z: 0.69446886} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 3518988566760019034} - - {fileID: 3518988568020417313} - m_Father: {fileID: 8759592556452939278} + - {fileID: 4925675562344851657} + - {fileID: 7059143788968601365} + m_Father: {fileID: 581050114892090470} m_RootOrder: 16 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5705835776797760368 +--- !u!33 &5241132603646966521 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3807842588340140594} + m_GameObject: {fileID: 3696084843780152251} m_Mesh: {fileID: 6206849629555422820, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &1908003943664383614 +--- !u!23 &2155423529217972215 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3807842588340140594} + m_GameObject: {fileID: 3696084843780152251} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -3780,13 +2647,31 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &5705835776797760370 +--- !u!114 &303593067995368347 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3807842588340140594} + m_GameObject: {fileID: 3696084843780152251} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!114 &7249292111965233675 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3696084843780152251} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -3838,44 +2723,26 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &5705835776797760371 +--- !u!114 &5088755634323247442 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3807842588340140594} + m_GameObject: {fileID: 3696084843780152251} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &2433250432563168675 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3807842588340140594} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &1480785414461485521 +--- !u!64 &970405379789738962 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3807842588340140594} + m_GameObject: {fileID: 3696084843780152251} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -3883,7 +2750,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 6206849629555422820, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &3899307809049751365 +--- !u!1 &3706805618452586406 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3891,281 +2758,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8759592556452939278} - - component: {fileID: 5671483950785830158} - - component: {fileID: 4654603314119585766} - - component: {fileID: 8350293876921222165} - - component: {fileID: 1391901495715107226} - - component: {fileID: 4958238038001968473} - - component: {fileID: 6709760646182924858} - - component: {fileID: 4488786508625977393} - m_Layer: 8 - m_Name: 55 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8759592556452939278 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3899307809049751365} - m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} - m_LocalPosition: {x: 0, y: 0.24984206, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1653837539288974118} - - {fileID: 2219170119977818162} - - {fileID: 902486078727195397} - - {fileID: 7664411459659684794} - - {fileID: 3575328425833037712} - - {fileID: 7426049551756076373} - - {fileID: 8002345349771925094} - - {fileID: 7262900710170605041} - - {fileID: 5006022408068790386} - - {fileID: 646997408754540613} - - {fileID: 7348678581100725815} - - {fileID: 5794429086071574721} - - {fileID: 6473173040778986631} - - {fileID: 1883840499350477516} - - {fileID: 5424691449148398138} - - {fileID: 2147629963090131834} - - {fileID: 1003694023116682404} - - {fileID: 4458437672247867750} - - {fileID: 7985258242834945591} - - {fileID: 2321684395504887757} - - {fileID: 8109306955029446079} - - {fileID: 8774857905968436074} - - {fileID: 8790122316529060272} - - {fileID: 9135412087137359191} - - {fileID: 5158219173145612152} - - {fileID: 1874115533180273061} - - {fileID: 5157130199548556484} - - {fileID: 5348569746133440938} - - {fileID: 1470698705808505749} - - {fileID: 8149517233206592876} - - {fileID: 3204200018261396148} - - {fileID: 9213699898667353340} - - {fileID: 8151056368901167697} - - {fileID: 4709397190120940411} - - {fileID: 1545860545188959874} - - {fileID: 8312034079881504766} - - {fileID: 5667703748216587930} - - {fileID: 2272464167749432074} - - {fileID: 5425942441630631213} - - {fileID: 3518988567687058612} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: -90, y: 0, z: 90} ---- !u!33 &5671483950785830158 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3899307809049751365} - m_Mesh: {fileID: 3648286742040142478, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!64 &4654603314119585766 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3899307809049751365} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 3648286742040142478, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!114 &8350293876921222165 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3899307809049751365} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 55 - occupyNum: 20 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &1391901495715107226 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3899307809049751365} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 20 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &4958238038001968473 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3899307809049751365} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &6709760646182924858 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3899307809049751365} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &4488786508625977393 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3899307809049751365} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 20 - selfIcon: {fileID: 21300000, guid: 636a88b3210458d40bd4ddeccf769584, type: 3} ---- !u!1 &3903115712393863067 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7604484097588018181} - - component: {fileID: 8599040396447524836} - - component: {fileID: 7945655828264339845} + - component: {fileID: 6723049313662681693} + - component: {fileID: 4523684880788621311} + - component: {fileID: 5639353270053629140} m_Layer: 11 - m_Name: Cube (15) + m_Name: Cube (3) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7604484097588018181 +--- !u!4 &6723049313662681693 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3903115712393863067} + m_GameObject: {fileID: 3706805618452586406} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0005999729, y: -0.30460024, z: 0.068399996} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} + m_LocalPosition: {x: -0.0011754036, y: -0.1964001, z: -0.031399965} + m_LocalScale: {x: 0.01133, y: 0.01117, z: 0.01414} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 4709397190120940411} - m_RootOrder: 0 + m_Father: {fileID: 6339660558414541128} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8599040396447524836 +--- !u!65 &4523684880788621311 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3903115712393863067} + m_GameObject: {fileID: 3706805618452586406} 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!114 &7945655828264339845 +--- !u!114 &5639353270053629140 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3903115712393863067} + m_GameObject: {fileID: 3706805618452586406} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4178,7 +2815,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 1 + portPosition: 3 deviceId: deviceName: portModel: @@ -4191,7 +2828,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3961075953875270146 +--- !u!1 &3798944407838662942 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4199,46 +2836,91 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 646997408754540613} - - component: {fileID: 5321719749193979642} - - component: {fileID: 6774645407059066732} - m_Layer: 8 - m_Name: Object025 + - component: {fileID: 3820955896496564718} + - component: {fileID: 3542785850634137887} + m_Layer: 0 + m_Name: UPos (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &646997408754540613 + m_IsActive: 0 +--- !u!4 &3820955896496564718 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3961075953875270146} + m_GameObject: {fileID: 3798944407838662942} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.20395052, y: 0.38488322, z: 0.4446268} + m_LocalPosition: {x: 0.1665163, y: 0.021333694, z: 0.69446886} + m_LocalScale: {x: 0.020000001, y: 0.56656253, z: 0.33984375} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6522156263465914382} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3542785850634137887 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3798944407838662942} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 0.87625486, z: 1} + m_Center: {x: 0, y: 0.020038307, z: 0} +--- !u!1 &4285260681819650925 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4822224793458924027} + - component: {fileID: 4574324450829037247} + - component: {fileID: 3889367916805985204} + m_Layer: 8 + m_Name: Object023 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4822224793458924027 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4285260681819650925} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.25066888, y: 0.09016442, z: 0.69446886} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 9 + m_Father: {fileID: 581050114892090470} + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5321719749193979642 +--- !u!33 &4574324450829037247 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3961075953875270146} - m_Mesh: {fileID: 5791823748547884724, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &6774645407059066732 + m_GameObject: {fileID: 4285260681819650925} + m_Mesh: {fileID: 8167450939506310628, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &3889367916805985204 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3961075953875270146} + m_GameObject: {fileID: 4285260681819650925} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -4252,12 +2934,12 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - {fileID: 2100000, guid: 53a6ea32b66877f4f811139c51424123, type: 2} - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} m_StaticBatchInfo: firstSubMesh: 0 @@ -4280,7 +2962,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &4104422775747004554 +--- !u!1 &4503457092766503502 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4288,54 +2970,132 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1545860545188959874} - - component: {fileID: 4211473531328806414} - - component: {fileID: 938408994262240836} - - component: {fileID: 6355828155002319388} - - component: {fileID: 7606455184379413539} - - component: {fileID: 42440531752222345} - - component: {fileID: 3979026488189942780} - m_Layer: 8 + - component: {fileID: 8632228678465954135} + - component: {fileID: 1922809856266198425} + - component: {fileID: 6633387886538782828} + m_Layer: 11 + m_Name: Cube (22) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8632228678465954135 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4503457092766503502} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.00009988248, y: -0.29360053, z: -0.01609999} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8415340705645430391} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1922809856266198425 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4503457092766503502} + 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!114 &6633387886538782828 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4503457092766503502} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4568580736114419971 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1360354012567779083} + - component: {fileID: 4458886754043600775} + - component: {fileID: 763055846168915917} + - component: {fileID: 7257339504401430061} + - component: {fileID: 6327378758412900084} + - component: {fileID: 3141646044297848302} + - component: {fileID: 967051722915296516} + m_Layer: 13 m_Name: Object081 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1545860545188959874 +--- !u!4 &1360354012567779083 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4104422775747004554} + m_GameObject: {fileID: 4568580736114419971} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.06051024, y: 0.28365514, z: 0} + m_LocalPosition: {x: -0.06051019, y: -0.011063635, z: 0.24984208} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 7035579158605356352} - - {fileID: 4024954686760107589} - - {fileID: 9180574661027314244} - - {fileID: 1407631790702617045} - m_Father: {fileID: 8759592556452939278} + - {fileID: 1569053268253839755} + - {fileID: 6995839407394714779} + - {fileID: 3738454787286208774} + - {fileID: 3934227995020025867} + m_Father: {fileID: 581050114892090470} m_RootOrder: 34 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4211473531328806414 +--- !u!33 &4458886754043600775 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4104422775747004554} + m_GameObject: {fileID: 4568580736114419971} m_Mesh: {fileID: -8879626735686362149, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &938408994262240836 +--- !u!23 &763055846168915917 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4104422775747004554} + m_GameObject: {fileID: 4568580736114419971} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -4378,13 +3138,31 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &6355828155002319388 +--- !u!114 &7257339504401430061 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4104422775747004554} + m_GameObject: {fileID: 4568580736114419971} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!114 &6327378758412900084 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4568580736114419971} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -4436,44 +3214,26 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &7606455184379413539 +--- !u!114 &3141646044297848302 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4104422775747004554} + m_GameObject: {fileID: 4568580736114419971} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &42440531752222345 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4104422775747004554} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &3979026488189942780 +--- !u!64 &967051722915296516 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4104422775747004554} + m_GameObject: {fileID: 4568580736114419971} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -4481,7 +3241,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -8879626735686362149, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &4389673589103155940 +--- !u!1 &4650479705212278473 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4489,46 +3249,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5006022408068790386} - - component: {fileID: 4100614217997668150} - - component: {fileID: 3632930173170692669} + - component: {fileID: 6793215668086039822} + - component: {fileID: 6213433643439376522} + - component: {fileID: 6794874825599088146} m_Layer: 8 - m_Name: Object023 + m_Name: Object028 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5006022408068790386 +--- !u!4 &6793215668086039822 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4389673589103155940} + m_GameObject: {fileID: 4650479705212278473} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.25263917, y: 0.38488322, z: 0.4446268} + m_LocalPosition: {x: -0.25112623, y: 0.09016442, z: 0.69446886} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 8 + m_Father: {fileID: 581050114892090470} + m_RootOrder: 12 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4100614217997668150 +--- !u!33 &6213433643439376522 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4389673589103155940} - m_Mesh: {fileID: 8167450939506310628, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &3632930173170692669 + m_GameObject: {fileID: 4650479705212278473} + m_Mesh: {fileID: 5783707781615440777, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &6794874825599088146 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4389673589103155940} + m_GameObject: {fileID: 4650479705212278473} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -4542,12 +3302,12 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - {fileID: 2100000, guid: 53a6ea32b66877f4f811139c51424123, type: 2} - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} m_StaticBatchInfo: firstSubMesh: 0 @@ -4570,7 +3330,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &4717899998518207785 +--- !u!1 &4704284339821393630 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4578,54 +3338,358 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8151056368901167697} - - component: {fileID: 5482931769498645291} - - component: {fileID: 2942586856143130924} - - component: {fileID: 6561132234156647514} - - component: {fileID: 5918275288657554014} - - component: {fileID: 5766298453262961859} - - component: {fileID: 6562268592921463905} - m_Layer: 8 - m_Name: Object076 + - component: {fileID: 6397557945516063141} + - component: {fileID: 4788871273073600986} + - component: {fileID: 9206048432438804810} + m_Layer: 11 + m_Name: Cube (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8151056368901167697 +--- !u!4 &6397557945516063141 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4717899998518207785} + m_GameObject: {fileID: 4704284339821393630} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.060510352, y: 0.28365514, z: 0} + m_LocalPosition: {x: 0.000100046396, y: -0.30460018, z: 0.068399996} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8542576054566173656} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &4788871273073600986 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4704284339821393630} + 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!114 &9206048432438804810 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4704284339821393630} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4719504418422677766 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7319146250806163316} + - component: {fileID: 3119565649619081296} + - component: {fileID: 7839175103395579779} + m_Layer: 11 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7319146250806163316 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4719504418422677766} + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.00079998374, y: -0.27389997, z: -0.05980003} + m_LocalScale: {x: 0.01317, y: 0.010909998, z: 0.010910001} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3894790690043125273} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3119565649619081296 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4719504418422677766} + 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!114 &7839175103395579779 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4719504418422677766} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4740939706922648237 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4342632877651732810} + - component: {fileID: 1590356026073973284} + - component: {fileID: 3305410459346093764} + m_Layer: 11 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4342632877651732810 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4740939706922648237} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.001175344, y: -0.1964001, z: 0.006300032} + m_LocalScale: {x: 0.01133, y: 0.01117, z: 0.01414} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6339660558414541128} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1590356026073973284 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4740939706922648237} + 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!114 &3305410459346093764 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4740939706922648237} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4745060161026647039 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2034972370499380040} + - component: {fileID: 6392745321319448845} + - component: {fileID: 1252309238457874969} + m_Layer: 11 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2034972370499380040 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4745060161026647039} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.00040008128, y: -0.27610064, z: -0.059599936} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4200873620633491695} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6392745321319448845 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4745060161026647039} + 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!114 &1252309238457874969 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4745060161026647039} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4955533751865624734 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6961911386187760860} + - component: {fileID: 5071604492544944162} + - component: {fileID: 25812233435180299} + m_Layer: 8 + m_Name: Object014 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6961911386187760860 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4955533751865624734} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.14916097, y: 0.014625788, z: 0.69446886} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 3518988568782340250} - - {fileID: 3518988567520452087} - - {fileID: 3518988568325330470} - - {fileID: 3518988567048464418} - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 32 + m_Children: [] + m_Father: {fileID: 581050114892090470} + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5482931769498645291 +--- !u!33 &5071604492544944162 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4717899998518207785} - m_Mesh: {fileID: -6144968561209659737, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &2942586856143130924 + m_GameObject: {fileID: 4955533751865624734} + m_Mesh: {fileID: 3941715523697911101, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &25812233435180299 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4717899998518207785} + m_GameObject: {fileID: 4955533751865624734} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -4640,12 +3704,12 @@ MeshRenderer: m_RendererPriority: 0 m_Materials: - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: b5151be299690364ea2211f61267eb84, type: 2} - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} m_StaticBatchInfo: firstSubMesh: 0 @@ -4668,84 +3732,359 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &6561132234156647514 +--- !u!1 &4958742612592956086 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3934227995020025867} + - component: {fileID: 2301942310183707327} + - component: {fileID: 4930279726529965940} + m_Layer: 11 + m_Name: Cube (18) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3934227995020025867 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4958742612592956086} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.000099912286, y: -0.29360047, z: -0.01609999} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1360354012567779083} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2301942310183707327 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4958742612592956086} + 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!114 &4930279726529965940 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4717899998518207785} + m_GameObject: {fileID: 4958742612592956086} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} m_Name: m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5918275288657554014 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4717899998518207785} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: + hight: {fileID: 0} + portList: id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 9 - machineModel: - status: + portModel: + status: 0 + conDevice: conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: + conPort: + cableName: + cableGroupName: remark: createTime: createName: ---- !u!114 &5766298453262961859 +--- !u!1 &4982591464260097293 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8542180066305680613} + - component: {fileID: 8117827567425215716} + - component: {fileID: 854131901211158374} + m_Layer: 8 + m_Name: Object068 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8542180066305680613 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4982591464260097293} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.22345872, y: -0.007866412, z: 0.24984208} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 581050114892090470} + m_RootOrder: 29 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8117827567425215716 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4982591464260097293} + m_Mesh: {fileID: 2561127810642175325, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &854131901211158374 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4982591464260097293} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &5040710156336851287 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1252160431311561391} + - component: {fileID: 2539519076633255771} + - component: {fileID: 5651786983109978705} + m_Layer: 8 + m_Name: Object001 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1252160431311561391 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5040710156336851287} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.23728117, z: 0.6975736} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 581050114892090470} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2539519076633255771 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5040710156336851287} + m_Mesh: {fileID: -3292925553009838691, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &5651786983109978705 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5040710156336851287} + 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: a0b6607cd34835240b74544e5f63df2e, type: 2} + - {fileID: 2100000, guid: 1fbeb920646eac047b8cd78ef1892384, 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!1 &5066530470784434865 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5538140135170800563} + - component: {fileID: 1973530311407749998} + - component: {fileID: 7159134236214147226} + - component: {fileID: 3730878656462826854} + - component: {fileID: 1758954106405838519} + - component: {fileID: 5096593419565522842} + - component: {fileID: 110699228093895612} + m_Layer: 13 + m_Name: Object031 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5538140135170800563 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5066530470784434865} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.038971692, y: 0.017654955, z: 0.694469} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5802407009533561969} + - {fileID: 4551150890951342157} + m_Father: {fileID: 581050114892090470} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1973530311407749998 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5066530470784434865} + m_Mesh: {fileID: -4418614455616001024, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &7159134236214147226 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5066530470784434865} + 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: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!114 &3730878656462826854 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4717899998518207785} + m_GameObject: {fileID: 5066530470784434865} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -4755,125 +4094,15 @@ MonoBehaviour: My_magnifyState: 0 empty: [] TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &6562268592921463905 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4717899998518207785} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -6144968561209659737, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &4745918398463615800 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5424691449148398138} - - component: {fileID: 2085287991559482087} - - component: {fileID: 7262432175118031123} - - component: {fileID: 5424691449148398140} - - component: {fileID: 5424691449148398141} - - component: {fileID: 245240023460744968} - - component: {fileID: 4585197980141109696} - m_Layer: 8 - m_Name: Object031 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5424691449148398138 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4745918398463615800} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.042617384, y: 0.31237376, z: 0.44462687} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 3518988568803285984} - - {fileID: 3518988567223613017} - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2085287991559482087 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4745918398463615800} - m_Mesh: {fileID: -4418614455616001024, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &7262432175118031123 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4745918398463615800} - 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: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!114 &5424691449148398140 +--- !u!114 &1758954106405838519 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4745918398463615800} + m_GameObject: {fileID: 5066530470784434865} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -4925,44 +4154,26 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &5424691449148398141 +--- !u!114 &5096593419565522842 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4745918398463615800} + m_GameObject: {fileID: 5066530470784434865} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &245240023460744968 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4745918398463615800} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &4585197980141109696 +--- !u!64 &110699228093895612 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4745918398463615800} + m_GameObject: {fileID: 5066530470784434865} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -4970,7 +4181,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -4418614455616001024, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &4784861383777831134 +--- !u!1 &5109989295340962976 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4978,130 +4189,54 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1653837539288974118} - - component: {fileID: 2642806046110465746} - - component: {fileID: 5331175009854737368} - m_Layer: 8 - m_Name: Object001 + - component: {fileID: 8542576054566173656} + - component: {fileID: 5441549398461715106} + - component: {fileID: 3406170587671015589} + - component: {fileID: 5960526245405634243} + - component: {fileID: 6717801478752314692} + - component: {fileID: 3337899054381766462} + - component: {fileID: 5105813456623040979} + m_Layer: 13 + m_Name: Object076 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1653837539288974118 +--- !u!4 &8542576054566173656 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4784861383777831134} + m_GameObject: {fileID: 5109989295340962976} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0.05743754, z: 0.44773155} + m_LocalPosition: {x: 0.060510337, y: -0.011063635, z: 0.24984208} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 0 + m_Children: + - {fileID: 6397557945516063141} + - {fileID: 1169474733444597902} + - {fileID: 5680709675399097663} + - {fileID: 4839491932855340649} + m_Father: {fileID: 581050114892090470} + m_RootOrder: 32 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2642806046110465746 +--- !u!33 &5441549398461715106 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4784861383777831134} - m_Mesh: {fileID: -3292925553009838691, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &5331175009854737368 + m_GameObject: {fileID: 5109989295340962976} + m_Mesh: {fileID: -6144968561209659737, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &3406170587671015589 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4784861383777831134} - 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: a0b6607cd34835240b74544e5f63df2e, type: 2} - - {fileID: 2100000, guid: 1fbeb920646eac047b8cd78ef1892384, 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!1 &4807229438502335620 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8149517233206592876} - - component: {fileID: 8591561957052939629} - - component: {fileID: 885363380379158255} - m_Layer: 8 - m_Name: Object068 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8149517233206592876 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4807229438502335620} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.22345869, y: 0.28685236, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 29 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8591561957052939629 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4807229438502335620} - m_Mesh: {fileID: 2561127810642175325, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &885363380379158255 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4807229438502335620} + m_GameObject: {fileID: 5109989295340962976} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -5121,173 +4256,7 @@ MeshRenderer: - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &4852116498048279154 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9180574661027314244} - - component: {fileID: 1034379597565760692} - - component: {fileID: 3973774937096571206} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9180574661027314244 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4852116498048279154} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.000099975616, y: -0.30460048, z: -0.004099995} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1545860545188959874} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1034379597565760692 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4852116498048279154} - 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!114 &3973774937096571206 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4852116498048279154} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4852235578714777879 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7426049551756076373} - - component: {fileID: 4752133612341299627} - - component: {fileID: 560901748066471042} - m_Layer: 8 - m_Name: Object014 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7426049551756076373 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4852235578714777879} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.14916098, y: 0.3093446, z: 0.4446268} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4752133612341299627 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4852235578714777879} - m_Mesh: {fileID: 3941715523697911101, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &560901748066471042 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4852235578714777879} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: b5151be299690364ea2211f61267eb84, type: 2} + - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} m_StaticBatchInfo: firstSubMesh: 0 @@ -5310,7 +4279,110 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &5123653382832256832 +--- !u!114 &5960526245405634243 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5109989295340962976} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!114 &6717801478752314692 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5109989295340962976} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} + m_Name: + m_EditorClassIdentifier: + deviceList: + id: + deviceName: + deviceCode: + type: 2 + typeStr: + deviceType: 3 + deviceTypeStr: + rackId: + shelfId: + slotId: + devicePosition: 9 + machineModel: + status: + conDeviceName: + rackType: + openFlag: + backDoorFlag: + modelNum: + occupyNum: + residueNum: + operationTime: + directorName: + phone: + manufacturer: + powerProperties: + maintenanceUnit: + machineFrameHigh: + machineFrameWide: + machineFrameThick: + slotNum: + slotSort: + installMethod: + affiliationFrame: + parentSlotName: + slotType: + occupyStatus: + affiliationSlot: + portNum: + cardFunction: + cardType: + runStatus: + tmsId: + remark: + createTime: + createName: +--- !u!114 &3337899054381766462 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5109989295340962976} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!64 &5105813456623040979 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5109989295340962976} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: -6144968561209659737, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!1 &5483399711155536633 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5318,46 +4390,124 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6473173040778986631} - - component: {fileID: 5884377081630746883} - - component: {fileID: 6475951529369360283} - m_Layer: 8 - m_Name: Object028 + - component: {fileID: 8972929557345558486} + - component: {fileID: 5128416616820582827} + - component: {fileID: 2051765015418923231} + m_Layer: 11 + m_Name: Cube (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6473173040778986631 +--- !u!4 &8972929557345558486 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5123653382832256832} + m_GameObject: {fileID: 5483399711155536633} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.25263923, y: 0.38488317, z: 0.4446268} + m_LocalPosition: {x: -0.0011754036, y: -0.1964001, z: -0.012899995} + m_LocalScale: {x: 0.01133, y: 0.01117, z: 0.01414} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6339660558414541128} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &5128416616820582827 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5483399711155536633} + 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!114 &2051765015418923231 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5483399711155536633} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5558350575839890700 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7158485398023312504} + - component: {fileID: 1493721476790536416} + - component: {fileID: 4339963005998111987} + m_Layer: 8 + m_Name: Object022 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7158485398023312504 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5558350575839890700} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.22558916, y: 0.09016442, z: 0.69446886} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 12 + m_Father: {fileID: 581050114892090470} + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5884377081630746883 +--- !u!33 &1493721476790536416 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5123653382832256832} - m_Mesh: {fileID: 5783707781615440777, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &6475951529369360283 + m_GameObject: {fileID: 5558350575839890700} + m_Mesh: {fileID: 4382602644814197676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &4339963005998111987 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5123653382832256832} + m_GameObject: {fileID: 5558350575839890700} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -5371,12 +4521,12 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - {fileID: 2100000, guid: 53a6ea32b66877f4f811139c51424123, type: 2} - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} m_StaticBatchInfo: firstSubMesh: 0 @@ -5399,7 +4549,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &5329842987434859107 +--- !u!1 &5581354637933991621 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5407,52 +4557,97 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2147629963090131834} - - component: {fileID: 4938060302416090372} - - component: {fileID: 577065121567153757} - - component: {fileID: 5329842987434859109} - - component: {fileID: 5329842987434859106} - - component: {fileID: 719483958169812556} - - component: {fileID: 324534208527895173} - m_Layer: 8 + - component: {fileID: 1254922344588444527} + - component: {fileID: 6041833021964762463} + m_Layer: 0 + m_Name: UPos (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1254922344588444527 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5581354637933991621} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.1665163, y: 0.021333694, z: 0.69446886} + m_LocalScale: {x: 0.020000001, y: 0.56656253, z: 0.33984375} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6522156263465914382} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6041833021964762463 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5581354637933991621} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 0.87625486, z: 1} + m_Center: {x: 0, y: 0.020038307, z: 0} +--- !u!1 &5648757243027389418 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1900210283077327603} + - component: {fileID: 4833645064089416845} + - component: {fileID: 1121722408057814996} + - component: {fileID: 6341169437595348531} + - component: {fileID: 4761942500206177180} + - component: {fileID: 550939413768498187} + - component: {fileID: 4511587745188916834} + m_Layer: 13 m_Name: Object032 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2147629963090131834 +--- !u!4 &1900210283077327603 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5329842987434859107} + m_GameObject: {fileID: 5648757243027389418} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0426175, y: 0.31237376, z: 0.44462687} + m_LocalPosition: {x: -0.045410037, y: 0.017654955, z: 0.6944689} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 3518988567575204495} - - {fileID: 3518988566955345641} - m_Father: {fileID: 8759592556452939278} + - {fileID: 5275198880383397012} + - {fileID: 6721148613301837531} + m_Father: {fileID: 581050114892090470} m_RootOrder: 15 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4938060302416090372 +--- !u!33 &4833645064089416845 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5329842987434859107} + m_GameObject: {fileID: 5648757243027389418} m_Mesh: {fileID: -6750423293286134506, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &577065121567153757 +--- !u!23 &1121722408057814996 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5329842987434859107} + m_GameObject: {fileID: 5648757243027389418} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -5495,13 +4690,31 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &5329842987434859109 +--- !u!114 &6341169437595348531 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5329842987434859107} + m_GameObject: {fileID: 5648757243027389418} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!114 &4761942500206177180 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5648757243027389418} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -5553,26 +4766,183 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &5329842987434859106 +--- !u!114 &550939413768498187 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5329842987434859107} + m_GameObject: {fileID: 5648757243027389418} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &719483958169812556 +--- !u!64 &4511587745188916834 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5648757243027389418} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: -6750423293286134506, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!1 &5754296808809974975 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4108983990077236578} + - component: {fileID: 4138806321292337229} + m_Layer: 0 + m_Name: UPos (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4108983990077236578 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5754296808809974975} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.1665163, y: 0.021333694, z: 0.69446886} + m_LocalScale: {x: 0.020000001, y: 0.56656253, z: 0.33984375} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6522156263465914382} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &4138806321292337229 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5754296808809974975} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 0.87625486, z: 1} + m_Center: {x: 0, y: 0.020038307, z: 0} +--- !u!1 &5950187414008942886 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5100378216737473266} + - component: {fileID: 5131731750046364104} + - component: {fileID: 3513114831276604939} + - component: {fileID: 5893569226912475920} + - component: {fileID: 5737508453903993935} + - component: {fileID: 5348808705166604625} + - component: {fileID: 2889429067674844373} + m_Layer: 13 + m_Name: Object077 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5100378216737473266 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5950187414008942886} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.09310004, y: -0.011063635, z: 0.24984208} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4434452782867742975} + - {fileID: 8335387566553820677} + - {fileID: 4151196478578378934} + - {fileID: 1181507772646165131} + m_Father: {fileID: 581050114892090470} + m_RootOrder: 33 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5131731750046364104 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5950187414008942886} + m_Mesh: {fileID: -8873797471287979038, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &3513114831276604939 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5950187414008942886} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!114 &5893569226912475920 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5329842987434859107} + m_GameObject: {fileID: 5950187414008942886} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -5582,474 +4952,15 @@ MonoBehaviour: My_magnifyState: 0 empty: [] TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &324534208527895173 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5329842987434859107} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -6750423293286134506, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &5381862422206278789 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7262900710170605041} - - component: {fileID: 1380862329790294377} - - component: {fileID: 4299152457985703290} - m_Layer: 8 - m_Name: Object022 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7262900710170605041 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5381862422206278789} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.22829482, y: 0.38488317, z: 0.44462684} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1380862329790294377 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5381862422206278789} - m_Mesh: {fileID: 4382602644814197676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &4299152457985703290 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5381862422206278789} - 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: 53a6ea32b66877f4f811139c51424123, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!1 &5614619822224290130 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7813304712737149380} - - component: {fileID: 5480390600373157752} - - component: {fileID: 7375258017842371797} - m_Layer: 11 - m_Name: Cube (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7813304712737149380 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5614619822224290130} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00040002912, y: -0.3046003, z: 0.068399996} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8312034079881504766} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5480390600373157752 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5614619822224290130} - 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!114 &7375258017842371797 +--- !u!114 &5737508453903993935 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5614619822224290130} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5945021883543771878 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9213699898667353340} - - component: {fileID: 3086252194099196799} - - component: {fileID: 838025527350685000} - m_Layer: 8 - m_Name: Object073 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9213699898667353340 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5945021883543771878} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2560485, y: 0.2868524, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 31 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3086252194099196799 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5945021883543771878} - m_Mesh: {fileID: 3376180099170138459, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &838025527350685000 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5945021883543771878} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &5985682315622039927 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5667703748216587930} - - component: {fileID: 6651995395338679657} - - component: {fileID: 4888710428013564921} - m_Layer: 8 - m_Name: Object085 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5667703748216587930 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5985682315622039927} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.28863814, y: 0.28685233, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 36 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6651995395338679657 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5985682315622039927} - m_Mesh: {fileID: -7047696389869352852, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &4888710428013564921 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5985682315622039927} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &6124968956972658863 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4709397190120940411} - - component: {fileID: 4658023748551430209} - - component: {fileID: 3986277682320203650} - - component: {fileID: 1555352133264728101} - - component: {fileID: 8264308597063704870} - - component: {fileID: 1877852657453690197} - - component: {fileID: 3429577700340878422} - m_Layer: 8 - m_Name: Object077 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4709397190120940411 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6124968956972658863} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.09310005, y: 0.28365514, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 7604484097588018181} - - {fileID: 8846926247751408524} - - {fileID: 4741315910522783867} - - {fileID: 7177580546384128331} - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 33 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4658023748551430209 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6124968956972658863} - m_Mesh: {fileID: -8873797471287979038, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &3986277682320203650 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6124968956972658863} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!114 &1555352133264728101 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6124968956972658863} + m_GameObject: {fileID: 5950187414008942886} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -6101,44 +5012,26 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &8264308597063704870 +--- !u!114 &5348808705166604625 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6124968956972658863} + m_GameObject: {fileID: 5950187414008942886} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &1877852657453690197 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6124968956972658863} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &3429577700340878422 +--- !u!64 &2889429067674844373 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6124968956972658863} + m_GameObject: {fileID: 5950187414008942886} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -6146,7 +5039,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -8873797471287979038, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &6412843703216924984 +--- !u!1 &6022979850000928766 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -6154,231 +5047,398 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1470698705808505749} - - component: {fileID: 4004863792993298725} - - component: {fileID: 968280053494227950} + - component: {fileID: 581050114892090470} + - component: {fileID: 4917151820496010913} + - component: {fileID: 7781006854094336768} + - component: {fileID: 6116462223181525250} + - component: {fileID: 8807632571121387860} + - component: {fileID: 6715041292147456127} + - component: {fileID: 2011141151564622712} + - component: {fileID: 1564859899366517120} + - component: {fileID: 5464414898056385612} m_Layer: 8 - m_Name: Object067 + m_Name: 55 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1470698705808505749 +--- !u!4 &581050114892090470 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6412843703216924984} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.12568961, y: 0.28685236, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 28 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4004863792993298725 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6412843703216924984} - m_Mesh: {fileID: -6637382640520475244, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &968280053494227950 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6412843703216924984} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &6417605216972662387 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 902486078727195397} - - component: {fileID: 176109092308679463} - - component: {fileID: 5469583757174394642} - m_Layer: 8 - m_Name: Object006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &902486078727195397 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6417605216972662387} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.30132788, y: 0.38488328, z: 0.4446268} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &176109092308679463 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6417605216972662387} - m_Mesh: {fileID: -2639241166356525208, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &5469583757174394642 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6417605216972662387} - 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: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: baaa5b5ad49b24344abade2eeb878576, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!1 &6522912922481203564 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8312034079881504766} - - component: {fileID: 3197328966539307923} - - component: {fileID: 6577307182177010434} - - component: {fileID: 4471239974878720088} - - component: {fileID: 752050279310683131} - - component: {fileID: 4503183663100618189} - - component: {fileID: 4403733294660125356} - m_Layer: 8 - m_Name: Object083 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8312034079881504766 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6522912922481203564} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.09309998, y: 0.28365514, z: 0} + m_GameObject: {fileID: 6022979850000928766} + m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.29471877, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 7813304712737149380} - - {fileID: 7611417796631884609} - - {fileID: 2935096702619799414} - - {fileID: 4946681099065479658} - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 35 + - {fileID: 1252160431311561391} + - {fileID: 1828213279107250619} + - {fileID: 798627468148976268} + - {fileID: 7912394226255821363} + - {fileID: 3894790690043125273} + - {fileID: 6961911386187760860} + - {fileID: 7538189663870203887} + - {fileID: 7158485398023312504} + - {fileID: 4822224793458924027} + - {fileID: 1110583207168770508} + - {fileID: 7091143021242181566} + - {fileID: 6339660558414541128} + - {fileID: 6793215668086039822} + - {fileID: 2141377827648387909} + - {fileID: 5538140135170800563} + - {fileID: 1900210283077327603} + - {fileID: 756282960674280749} + - {fileID: 4200873620633491695} + - {fileID: 7584724973429290942} + - {fileID: 2858460395545577028} + - {fileID: 8581897746225880118} + - {fileID: 9103327339556664035} + - {fileID: 9110716698970056761} + - {fileID: 8742768742482015454} + - {fileID: 4613551064410664689} + - {fileID: 2130553471922217004} + - {fileID: 4612464104083379533} + - {fileID: 5596534962100238371} + - {fileID: 1440014520284158492} + - {fileID: 8542180066305680613} + - {fileID: 3162819746360191805} + - {fileID: 8669057648776734069} + - {fileID: 8542576054566173656} + - {fileID: 5100378216737473266} + - {fileID: 1360354012567779083} + - {fileID: 8415340705645430391} + - {fileID: 5275043074513250067} + - {fileID: 1736814007133966979} + - {fileID: 5539388899689407652} + - {fileID: 7671870113248978562} + - {fileID: 6522156263465914382} + m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3197328966539307923 +--- !u!33 &4917151820496010913 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6522912922481203564} - m_Mesh: {fileID: 7525366566605188955, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &6577307182177010434 + m_GameObject: {fileID: 6022979850000928766} + m_Mesh: {fileID: -4424861107502493888, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &7781006854094336768 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6522912922481203564} + m_GameObject: {fileID: 6022979850000928766} + 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: af9f09a343f0a264bb1136823665fff9, 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!114 &6116462223181525250 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6022979850000928766} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} + m_Name: + m_EditorClassIdentifier: + deviceList: + id: + deviceName: + deviceCode: + type: 2 + typeStr: + deviceType: 1 + deviceTypeStr: + rackId: + shelfId: + slotId: + devicePosition: + machineModel: + status: + conDeviceName: + rackType: + openFlag: + backDoorFlag: + modelNum: 55 + occupyNum: 20 + residueNum: + operationTime: + directorName: + phone: + manufacturer: + powerProperties: + maintenanceUnit: + machineFrameHigh: + machineFrameWide: + machineFrameThick: + slotNum: + slotSort: + installMethod: + affiliationFrame: + parentSlotName: + slotType: + occupyStatus: + affiliationSlot: + portNum: + cardFunction: + cardType: + runStatus: + tmsId: + remark: + createTime: + createName: +--- !u!114 &8807632571121387860 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6022979850000928766} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} + m_Name: + m_EditorClassIdentifier: + listTargets: [] + frames: [] + PerTier: 42 + PerRow: 5 + volume: 20 + isExit: 0 + isClicked: 0 + isTarget: 0 + isplace: 0 + canPut: 0 +--- !u!114 &6715041292147456127 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6022979850000928766} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!114 &2011141151564622712 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6022979850000928766} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + meshRenderers: [] + materials: [] + empty: [] + TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, + type: 3} + TransparentGlow_Shader_half: {fileID: 0} + original_jigui: [] + original_shebei: [] + search_u_wei: 0 + is_jigui: 0 +--- !u!114 &1564859899366517120 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6022979850000928766} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} + m_Name: + m_EditorClassIdentifier: + volume: 20 + selfIcon: {fileID: 21300000, guid: 636a88b3210458d40bd4ddeccf769584, type: 3} +--- !u!64 &5464414898056385612 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6022979850000928766} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: -4424861107502493888, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!1 &6045404086179148781 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8259843468576464570} + - component: {fileID: 4285652963804841587} + - component: {fileID: 9131711014293416682} + m_Layer: 11 + m_Name: Cube (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8259843468576464570 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6045404086179148781} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0007753968, y: -0.19640008, z: -0.10230011} + m_LocalScale: {x: 0.01133, y: 0.01117, z: 0.01414} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6339660558414541128} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &4285652963804841587 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6045404086179148781} + 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!114 &9131711014293416682 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6045404086179148781} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6089543341112549630 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5275043074513250067} + - component: {fileID: 6612321833613300960} + - component: {fileID: 4921094115906138736} + m_Layer: 8 + m_Name: Object085 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5275043074513250067 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6089543341112549630} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.28863814, y: -0.007866442, z: 0.24984208} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 581050114892090470} + m_RootOrder: 36 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6612321833613300960 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6089543341112549630} + m_Mesh: {fileID: -7047696389869352852, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &4921094115906138736 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6089543341112549630} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -6421,13 +5481,495 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &4471239974878720088 +--- !u!1 &6130517134128348015 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8669057648776734069} + - component: {fileID: 3262751523275002614} + - component: {fileID: 878851717332257985} + m_Layer: 8 + m_Name: Object073 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8669057648776734069 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6130517134128348015} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.25604844, y: -0.007866383, z: 0.24984205} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 581050114892090470} + m_RootOrder: 31 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3262751523275002614 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6130517134128348015} + m_Mesh: {fileID: 3376180099170138459, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &878851717332257985 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6130517134128348015} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &6265704886774663197 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4839491932855340649} + - component: {fileID: 6610595423725065225} + - component: {fileID: 8752302971891245359} + m_Layer: 11 + m_Name: Cube (14) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4839491932855340649 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6265704886774663197} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.00060003996, y: -0.2936004, z: -0.01609999} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8542576054566173656} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6610595423725065225 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6265704886774663197} + 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!114 &8752302971891245359 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6522912922481203564} + m_GameObject: {fileID: 6265704886774663197} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6281149734103238837 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6721148613301837531} + - component: {fileID: 3769858043831372085} + - component: {fileID: 4257630660930659576} + m_Layer: 11 + m_Name: Cube (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6721148613301837531 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6281149734103238837} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: -0.27610046, z: -0.07109994} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1900210283077327603} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3769858043831372085 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6281149734103238837} + 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!114 &4257630660930659576 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6281149734103238837} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6413600143566539270 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7584724973429290942} + - component: {fileID: 4379354058695003695} + - component: {fileID: 7383168007458365961} + m_Layer: 8 + m_Name: Object035 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7584724973429290942 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6413600143566539270} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.27545613, y: 0.09016448, z: 0.69446886} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 581050114892090470} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4379354058695003695 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6413600143566539270} + m_Mesh: {fileID: -5079571484100782257, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &7383168007458365961 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6413600143566539270} + 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: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: baaa5b5ad49b24344abade2eeb878576, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!1 &6431960972824958409 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7671870113248978562} + m_Layer: 8 + m_Name: "\u951A\u70B9" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7671870113248978562 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6431960972824958409} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: -0.59471893, z: -0.9000001} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 581050114892090470} + m_RootOrder: 39 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6707275482866039013 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8415340705645430391} + - component: {fileID: 3155964494778386970} + - component: {fileID: 6689049640986206859} + - component: {fileID: 1260638776035154947} + - component: {fileID: 4153328977477404092} + - component: {fileID: 5005897434054213913} + - component: {fileID: 568665208991315419} + m_Layer: 13 + m_Name: Object083 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8415340705645430391 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6707275482866039013} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.09309989, y: -0.011063635, z: 0.24984208} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2176890556168421981} + - {fileID: 3560681552879526496} + - {fileID: 8038219547811377898} + - {fileID: 8632228678465954135} + m_Father: {fileID: 581050114892090470} + m_RootOrder: 35 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3155964494778386970 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6707275482866039013} + m_Mesh: {fileID: 7525366566605188955, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &6689049640986206859 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6707275482866039013} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!114 &1260638776035154947 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6707275482866039013} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!114 &4153328977477404092 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6707275482866039013} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -6479,44 +6021,26 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &752050279310683131 +--- !u!114 &5005897434054213913 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6522912922481203564} + m_GameObject: {fileID: 6707275482866039013} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &4503183663100618189 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6522912922481203564} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &4403733294660125356 +--- !u!64 &568665208991315419 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6522912922481203564} + m_GameObject: {fileID: 6707275482866039013} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -6524,7 +6048,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 7525366566605188955, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &6524136393668528529 +--- !u!1 &6817575503071791098 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -6532,124 +6056,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7611417796631884609} - - component: {fileID: 3512614517130727537} - - component: {fileID: 163891581424317256} - m_Layer: 11 - m_Name: Cube (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7611417796631884609 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6524136393668528529} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00040002912, y: -0.2936003, z: 0.0564} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8312034079881504766} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3512614517130727537 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6524136393668528529} - 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!114 &163891581424317256 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6524136393668528529} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6814687738609740687 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7985258242834945591} - - component: {fileID: 4275493217111699366} - - component: {fileID: 7054120337276076928} + - component: {fileID: 798627468148976268} + - component: {fileID: 424085434727979694} + - component: {fileID: 5509257283378802331} m_Layer: 8 - m_Name: Object035 + m_Name: Object006 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7985258242834945591 +--- !u!4 &798627468148976268 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6814687738609740687} + m_GameObject: {fileID: 6817575503071791098} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.27698362, y: 0.38488328, z: 0.4446268} + m_LocalPosition: {x: 0.30132782, y: 0.09016448, z: 0.69446886} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 18 + m_Father: {fileID: 581050114892090470} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4275493217111699366 +--- !u!33 &424085434727979694 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6814687738609740687} - m_Mesh: {fileID: -5079571484100782257, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &7054120337276076928 + m_GameObject: {fileID: 6817575503071791098} + m_Mesh: {fileID: -2639241166356525208, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &5509257283378802331 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6814687738609740687} + m_GameObject: {fileID: 6817575503071791098} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -6691,7 +6137,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &6975198143243634987 +--- !u!1 &6876418712979556529 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -6699,46 +6145,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8790122316529060272} - - component: {fileID: 8650374701162379648} - - component: {fileID: 7202806670494184246} + - component: {fileID: 1440014520284158492} + - component: {fileID: 3460786907629668524} + - component: {fileID: 784480286266622567} m_Layer: 8 - m_Name: Object054 + m_Name: Object067 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8790122316529060272 +--- !u!4 &1440014520284158492 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6975198143243634987} + m_GameObject: {fileID: 6876418712979556529} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.28863823, y: 0.2868524, z: 0} + m_LocalPosition: {x: -0.1256896, y: -0.007866412, z: 0.24984208} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 22 + m_Father: {fileID: 581050114892090470} + m_RootOrder: 28 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8650374701162379648 +--- !u!33 &3460786907629668524 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6975198143243634987} - m_Mesh: {fileID: -1824271642593903451, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &7202806670494184246 + m_GameObject: {fileID: 6876418712979556529} + m_Mesh: {fileID: -6637382640520475244, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &784480286266622567 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6975198143243634987} + m_GameObject: {fileID: 6876418712979556529} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -6758,8 +6204,6 @@ MeshRenderer: - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -6781,7 +6225,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &7329905812754569674 +--- !u!1 &7023926888757650566 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -6789,9 +6233,87 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8774857905968436074} - - component: {fileID: 5402583768897781229} - - component: {fileID: 222718691241804913} + - component: {fileID: 1169474733444597902} + - component: {fileID: 6704660332030390527} + - component: {fileID: 5789095262566259460} + m_Layer: 11 + m_Name: Cube (12) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1169474733444597902 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7023926888757650566} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.000100046396, y: -0.29360017, z: 0.0564} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8542576054566173656} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6704660332030390527 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7023926888757650566} + 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!114 &5789095262566259460 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7023926888757650566} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7073470277805946947 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9103327339556664035} + - component: {fileID: 5578509053897202788} + - component: {fileID: 325468935936304632} m_Layer: 8 m_Name: Object049 m_TagString: Untagged @@ -6799,36 +6321,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8774857905968436074 +--- !u!4 &9103327339556664035 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7329905812754569674} + m_GameObject: {fileID: 7073470277805946947} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.022107724, y: 0.28685242, z: 0} + m_LocalPosition: {x: 0.02210772, y: -0.007866353, z: 0.24984208} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8759592556452939278} + m_Father: {fileID: 581050114892090470} m_RootOrder: 21 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5402583768897781229 +--- !u!33 &5578509053897202788 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7329905812754569674} + m_GameObject: {fileID: 7073470277805946947} m_Mesh: {fileID: 3606764674779165107, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &222718691241804913 +--- !u!23 &325468935936304632 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7329905812754569674} + m_GameObject: {fileID: 7073470277805946947} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -6871,7 +6393,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &7582728535519368023 +--- !u!1 &7076039660818309714 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -6879,46 +6401,239 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1883840499350477516} - - component: {fileID: 7016059700414531864} - - component: {fileID: 8157926439355575582} - m_Layer: 8 - m_Name: Object030 + - component: {fileID: 4551150890951342157} + - component: {fileID: 3870811539687174720} + - component: {fileID: 5162592169825515408} + m_Layer: 11 + m_Name: Cube (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1883840499350477516 +--- !u!4 &4551150890951342157 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7582728535519368023} + m_GameObject: {fileID: 7076039660818309714} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.12785229, y: 0.31605244, z: 0.44462684} + m_LocalPosition: {x: 0.0002, y: -0.26929998, z: -0.071100116} + m_LocalScale: {x: 0.013169999, y: 0.026759999, z: 0.01091} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5538140135170800563} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3870811539687174720 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7076039660818309714} + 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!114 &5162592169825515408 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7076039660818309714} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7208523962409458158 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8335387566553820677} + - component: {fileID: 1374838627524608535} + - component: {fileID: 817075126495729622} + m_Layer: 11 + m_Name: Cube (16) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8335387566553820677 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7208523962409458158} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.00059996545, y: -0.29360023, z: 0.05639991} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5100378216737473266} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1374838627524608535 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7208523962409458158} + 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!114 &817075126495729622 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7208523962409458158} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7249886599816378887 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6522156263465914382} + m_Layer: 0 + m_Name: UPosManger + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &6522156263465914382 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7249886599816378887} + 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: 5078900489283073051} + - {fileID: 4108983990077236578} + - {fileID: 1254922344588444527} + - {fileID: 2113741471150753691} + - {fileID: 3820955896496564718} + - {fileID: 7373804768147580529} + m_Father: {fileID: 581050114892090470} + m_RootOrder: 40 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7448932878549182626 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9110716698970056761} + - component: {fileID: 9196140193720670217} + - component: {fileID: 7234627892778898111} + m_Layer: 8 + m_Name: Object054 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9110716698970056761 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7448932878549182626} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.28863817, y: -0.007866383, z: 0.2498421} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 13 + m_Father: {fileID: 581050114892090470} + m_RootOrder: 22 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7016059700414531864 +--- !u!33 &9196140193720670217 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7582728535519368023} - m_Mesh: {fileID: 5235648689648786991, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &8157926439355575582 + m_GameObject: {fileID: 7448932878549182626} + m_Mesh: {fileID: -1824271642593903451, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &7234627892778898111 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7582728535519368023} + m_GameObject: {fileID: 7448932878549182626} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -6932,13 +6647,13 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: 468ad295664494e4d82ea298061373c6, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} m_StaticBatchInfo: firstSubMesh: 0 @@ -6961,7 +6676,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &7674220027709645776 +--- !u!1 &7495605913201521655 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -6969,46 +6684,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8002345349771925094} - - component: {fileID: 7546108148855706820} - - component: {fileID: 1271463576968963591} + - component: {fileID: 7091143021242181566} + - component: {fileID: 4988033202595765793} + - component: {fileID: 1878336313668001969} m_Layer: 8 - m_Name: Object021 + m_Name: Object026 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8002345349771925094 +--- !u!4 &7091143021242181566 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7674220027709645776} + m_GameObject: {fileID: 7495605913201521655} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20395052, y: 0.38488317, z: 0.4446268} + m_LocalPosition: {x: -0.3013276, y: 0.09016442, z: 0.69446886} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 6 + m_Father: {fileID: 581050114892090470} + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7546108148855706820 +--- !u!33 &4988033202595765793 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7674220027709645776} - m_Mesh: {fileID: -3025179133607064014, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &1271463576968963591 + m_GameObject: {fileID: 7495605913201521655} + m_Mesh: {fileID: 1658199413673387437, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &1878336313668001969 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7674220027709645776} + m_GameObject: {fileID: 7495605913201521655} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -7022,12 +6737,12 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - {fileID: 2100000, guid: 53a6ea32b66877f4f811139c51424123, type: 2} - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} m_StaticBatchInfo: firstSubMesh: 0 @@ -7050,7 +6765,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &7750666697342220431 +--- !u!1 &7557365002607835036 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -7058,52 +6773,369 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3575328425833037712} - - component: {fileID: 3786940848339231274} - - component: {fileID: 4686220643822774319} - - component: {fileID: 4686220643822774305} - - component: {fileID: 4686220643822774318} - - component: {fileID: 3992342758054392097} - - component: {fileID: 6599867539687178219} + - component: {fileID: 5631985573117008479} + - component: {fileID: 7527782470138953857} + - component: {fileID: 5117106153310381874} + m_Layer: 11 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5631985573117008479 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7557365002607835036} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0007753968, y: -0.1964001, z: -0.12080002} + m_LocalScale: {x: 0.01133, y: 0.01117, z: 0.01414} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6339660558414541128} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7527782470138953857 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7557365002607835036} + 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!114 &5117106153310381874 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7557365002607835036} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7572644999578403755 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 680812339532913434} + - component: {fileID: 7660121529030098443} + - component: {fileID: 1017413820895713704} + m_Layer: 11 + m_Name: Cube (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &680812339532913434 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7572644999578403755} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0007753372, y: -0.1964001, z: -0.08309996} + m_LocalScale: {x: 0.01133, y: 0.01117, z: 0.01414} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6339660558414541128} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7660121529030098443 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7572644999578403755} + 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!114 &1017413820895713704 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7572644999578403755} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7678836462790776462 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1828213279107250619} + - component: {fileID: 5124669453406854847} + - component: {fileID: 5007476688457159486} m_Layer: 8 + m_Name: Object002 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1828213279107250619 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7678836462790776462} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.29471892, z: 0.6975736} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 581050114892090470} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5124669453406854847 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7678836462790776462} + m_Mesh: {fileID: -3996760141626369306, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &5007476688457159486 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7678836462790776462} + 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: a0b6607cd34835240b74544e5f63df2e, 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!1 &7776815906904616409 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7938291817993557396} + - component: {fileID: 8350505702766922225} + - component: {fileID: 2382000215924353235} + m_Layer: 11 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7938291817993557396 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7776815906904616409} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0018848479, y: -0.19640005, z: -0.012899995} + m_LocalScale: {x: 0.01133, y: 0.01117, z: 0.01414} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2858460395545577028} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8350505702766922225 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7776815906904616409} + 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!114 &2382000215924353235 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7776815906904616409} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7790360347620071686 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3894790690043125273} + - component: {fileID: 3683636214667903907} + - component: {fileID: 5087873393966844326} + - component: {fileID: 5073225483269223511} + - component: {fileID: 5515185430422995076} + - component: {fileID: 6477347558507164718} + - component: {fileID: 3883496538666292318} + m_Layer: 13 m_Name: Object009 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3575328425833037712 +--- !u!4 &3894790690043125273 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7750666697342220431} + m_GameObject: {fileID: 7790360347620071686} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.085234836, y: 0.31237376, z: 0.44462687} + m_LocalPosition: {x: 0.08128145, y: 0.017654955, z: 0.694469} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 3518988568410847613} - - {fileID: 3518988568260500805} - m_Father: {fileID: 8759592556452939278} + - {fileID: 7319146250806163316} + - {fileID: 2755061524147137600} + m_Father: {fileID: 581050114892090470} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3786940848339231274 +--- !u!33 &3683636214667903907 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7750666697342220431} + m_GameObject: {fileID: 7790360347620071686} m_Mesh: {fileID: 4944557015945844418, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &4686220643822774319 +--- !u!23 &5087873393966844326 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7750666697342220431} + m_GameObject: {fileID: 7790360347620071686} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -7146,13 +7178,31 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &4686220643822774305 +--- !u!114 &5073225483269223511 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7750666697342220431} + m_GameObject: {fileID: 7790360347620071686} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!114 &5515185430422995076 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7790360347620071686} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -7204,44 +7254,26 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &4686220643822774318 +--- !u!114 &6477347558507164718 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7750666697342220431} + m_GameObject: {fileID: 7790360347620071686} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &3992342758054392097 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7750666697342220431} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &6599867539687178219 +--- !u!64 &3883496538666292318 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7750666697342220431} + m_GameObject: {fileID: 7790360347620071686} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -7249,7 +7281,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 4944557015945844418, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &7757138308331042842 +--- !u!1 &7859699757591347801 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -7257,124 +7289,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8846926247751408524} - - component: {fileID: 5721185994933382331} - - component: {fileID: 7732219385645707250} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8846926247751408524 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7757138308331042842} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0005999729, y: -0.29360023, z: 0.0564} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4709397190120940411} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5721185994933382331 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7757138308331042842} - 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!114 &7732219385645707250 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7757138308331042842} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7855324664775620359 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2219170119977818162} - - component: {fileID: 4651504328211365686} - - component: {fileID: 4822559951734928055} + - component: {fileID: 7538189663870203887} + - component: {fileID: 8010254867113129293} + - component: {fileID: 1600511105689683854} m_Layer: 8 - m_Name: Object002 + m_Name: Object021 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2219170119977818162 +--- !u!4 &7538189663870203887 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7855324664775620359} + m_GameObject: {fileID: 7859699757591347801} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0.5894378, z: 0.44773155} + m_LocalPosition: {x: 0.20059574, y: 0.09016442, z: 0.69446886} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 1 + m_Father: {fileID: 581050114892090470} + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4651504328211365686 +--- !u!33 &8010254867113129293 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7855324664775620359} - m_Mesh: {fileID: -3996760141626369306, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &4822559951734928055 + m_GameObject: {fileID: 7859699757591347801} + m_Mesh: {fileID: -3025179133607064014, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &1600511105689683854 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7855324664775620359} + m_GameObject: {fileID: 7859699757591347801} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -7388,95 +7342,12 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: a0b6607cd34835240b74544e5f63df2e, 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!1 &8040808663840395902 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7348678581100725815} - - component: {fileID: 4803653021105242024} - - component: {fileID: 2126329941984493880} - m_Layer: 8 - m_Name: Object026 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7348678581100725815 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8040808663840395902} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.3013279, y: 0.38488305, z: 0.4446268} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4803653021105242024 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8040808663840395902} - m_Mesh: {fileID: 1658199413673387437, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &2126329941984493880 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8040808663840395902} - 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: 10236623513f12c4cb82923408ab50f2, type: 2} - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - {fileID: 2100000, guid: 53a6ea32b66877f4f811139c51424123, type: 2} - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} m_StaticBatchInfo: firstSubMesh: 0 @@ -7499,7 +7370,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &8219409866032166789 +--- !u!1 &7973709247785415390 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -7507,46 +7378,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7664411459659684794} - - component: {fileID: 7176156363827187573} - - component: {fileID: 2021733438661962963} + - component: {fileID: 2141377827648387909} + - component: {fileID: 7407577108618340497} + - component: {fileID: 8549463639863118999} m_Layer: 8 - m_Name: Object007 + m_Name: Object030 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7664411459659684794 +--- !u!4 &2141377827648387909 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8219409866032166789} + m_GameObject: {fileID: 7973709247785415390} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.17046967, y: 0.31605244, z: 0.44462678} + m_LocalPosition: {x: 0.123898864, y: 0.021333694, z: 0.69446886} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 3 + m_Father: {fileID: 581050114892090470} + m_RootOrder: 13 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7176156363827187573 +--- !u!33 &7407577108618340497 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8219409866032166789} - m_Mesh: {fileID: 7733717212360752527, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &2021733438661962963 + m_GameObject: {fileID: 7973709247785415390} + m_Mesh: {fileID: 5235648689648786991, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &8549463639863118999 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8219409866032166789} + m_GameObject: {fileID: 7973709247785415390} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -7589,7 +7460,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &8516506539243971284 +--- !u!1 &8021899713425582697 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -7597,9 +7468,248 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5425942441630631213} - - component: {fileID: 275679799914587842} - - component: {fileID: 5231221085576221084} + - component: {fileID: 3738454787286208774} + - component: {fileID: 1600782440037983976} + - component: {fileID: 7150628406507342438} + m_Layer: 11 + m_Name: Cube (17) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3738454787286208774 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8021899713425582697} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.000099912286, y: -0.30460048, z: -0.004099995} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1360354012567779083} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1600782440037983976 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8021899713425582697} + 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!114 &7150628406507342438 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8021899713425582697} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8058308549203142960 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6630262861214383386} + - component: {fileID: 6584104447529792750} + - component: {fileID: 2321245078108396584} + m_Layer: 11 + m_Name: Cube (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6630262861214383386 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8058308549203142960} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0004, y: -0.27599996, z: -0.0711} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4200873620633491695} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &6584104447529792750 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8058308549203142960} + 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!114 &2321245078108396584 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8058308549203142960} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8133260466801144816 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8581897746225880118} + - component: {fileID: 4583618249343363531} + - component: {fileID: 4984738129683278278} + m_Layer: 8 + m_Name: Object037 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8581897746225880118 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8133260466801144816} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.29471877, z: 0.24984208} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 581050114892090470} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4583618249343363531 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8133260466801144816} + m_Mesh: {fileID: 3648286742040142478, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &4984738129683278278 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8133260466801144816} + 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: a0b6607cd34835240b74544e5f63df2e, 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!1 &8188591608666194781 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5539388899689407652} + - component: {fileID: 306355192533501771} + - component: {fileID: 5695376642812899349} m_Layer: 8 m_Name: Object093 m_TagString: Untagged @@ -7607,36 +7717,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5425942441630631213 +--- !u!4 &5539388899689407652 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8516506539243971284} + m_GameObject: {fileID: 8188591608666194781} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.022107609, y: 0.28685242, z: 0} + m_LocalPosition: {x: -0.022107601, y: -0.007866353, z: 0.24984208} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8759592556452939278} + m_Father: {fileID: 581050114892090470} m_RootOrder: 38 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &275679799914587842 +--- !u!33 &306355192533501771 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8516506539243971284} + m_GameObject: {fileID: 8188591608666194781} m_Mesh: {fileID: -4909793419484529428, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &5231221085576221084 +--- !u!23 &5695376642812899349 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8516506539243971284} + m_GameObject: {fileID: 8188591608666194781} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -7679,7 +7789,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &8596290252774986361 +--- !u!1 &8444094607747086691 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -7687,47 +7797,124 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8109306955029446079} - - component: {fileID: 4039524075968481346} - - component: {fileID: 4809375833007016015} - - component: {fileID: 669026847495282733} - m_Layer: 8 - m_Name: Object037 + - component: {fileID: 2755061524147137600} + - component: {fileID: 8581966609956433864} + - component: {fileID: 7348714248661713087} + m_Layer: 11 + m_Name: Cube (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8109306955029446079 +--- !u!4 &2755061524147137600 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8596290252774986361} + m_GameObject: {fileID: 8444094607747086691} + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.0006, y: -0.27389997, z: -0.07250011} + m_LocalScale: {x: 0.01317, y: 0.010909998, z: 0.010910001} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3894790690043125273} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8581966609956433864 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8444094607747086691} + 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!114 &7348714248661713087 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8444094607747086691} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8467392391070258700 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7912394226255821363} + - component: {fileID: 7207405427681832700} + - component: {fileID: 1989938905622711642} + m_Layer: 8 + m_Name: Object007 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7912394226255821363 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8467392391070258700} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalPosition: {x: 0.1665163, y: 0.021333694, z: 0.69446886} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 20 + m_Father: {fileID: 581050114892090470} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4039524075968481346 +--- !u!33 &7207405427681832700 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8596290252774986361} - m_Mesh: {fileID: 3648286742040142478, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &4809375833007016015 + m_GameObject: {fileID: 8467392391070258700} + m_Mesh: {fileID: 7733717212360752527, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &1989938905622711642 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8596290252774986361} + m_GameObject: {fileID: 8467392391070258700} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -7741,7 +7928,14 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: a0b6607cd34835240b74544e5f63df2e, type: 2} + - {fileID: 2100000, guid: 468ad295664494e4d82ea298061373c6, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -7763,21 +7957,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!64 &669026847495282733 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8596290252774986361} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 3648286742040142478, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &8638343209065349423 +--- !u!1 &8557107288387528094 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -7785,9 +7965,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7035579158605356352} - - component: {fileID: 1063483919440501327} - - component: {fileID: 905816531356924261} + - component: {fileID: 1569053268253839755} + - component: {fileID: 3369779732632673987} + - component: {fileID: 4047614323087683215} m_Layer: 11 m_Name: Cube (15) m_TagString: Untagged @@ -7795,41 +7975,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7035579158605356352 +--- !u!4 &1569053268253839755 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8638343209065349423} + m_GameObject: {fileID: 8557107288387528094} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00040003285, y: -0.30460024, z: 0.068399996} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} + m_LocalPosition: {x: -0.00040009618, y: -0.30460024, z: 0.068399996} + m_LocalScale: {x: 0.013169999, y: 0.01091, z: 0.01091} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 1545860545188959874} + m_Father: {fileID: 1360354012567779083} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1063483919440501327 +--- !u!65 &3369779732632673987 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8638343209065349423} + m_GameObject: {fileID: 8557107288387528094} 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!114 &905816531356924261 +--- !u!114 &4047614323087683215 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8638343209065349423} + m_GameObject: {fileID: 8557107288387528094} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -7855,7 +8035,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &8806769689412421553 +--- !u!1 &8651087129290156888 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -7863,234 +8043,58 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5158219173145612152} - - component: {fileID: 6134919987801731633} - - component: {fileID: 6911391897384964341} - m_Layer: 8 - m_Name: Object060 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5158219173145612152 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8806769689412421553} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.22345892, y: 0.28685242, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 24 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6134919987801731633 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8806769689412421553} - m_Mesh: {fileID: -7466011377227053342, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &6911391897384964341 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8806769689412421553} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &9061325384061298496 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5348569746133440938} - - component: {fileID: 4499077860251232839} - - component: {fileID: 656137155287955511} - m_Layer: 8 - m_Name: Object066 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5348569746133440938 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9061325384061298496} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.15827934, y: 0.28685236, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8759592556452939278} - m_RootOrder: 27 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4499077860251232839 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9061325384061298496} - m_Mesh: {fileID: 1338664037747464310, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &656137155287955511 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9061325384061298496} - 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} - - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} - - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} - - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} - - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} - - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &9195744425478556369 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5794429086071574721} - - component: {fileID: 3371113393696081189} - - component: {fileID: 4064301038638388710} - - component: {fileID: 5794429086071574723} - - component: {fileID: 5794429086071574720} - - component: {fileID: 779573344273764056} - - component: {fileID: 2156478719670217686} - m_Layer: 8 + - component: {fileID: 6339660558414541128} + - component: {fileID: 2980139374051042476} + - component: {fileID: 4608380333495972975} + - component: {fileID: 3952028455649316045} + - component: {fileID: 3130829430780530094} + - component: {fileID: 9171941263148907579} + - component: {fileID: 7382766909370455166} + m_Layer: 13 m_Name: Object027 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5794429086071574721 +--- !u!4 &6339660558414541128 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9195744425478556369} + m_GameObject: {fileID: 8651087129290156888} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.27698353, y: 0.3848831, z: 0.44462687} + m_LocalPosition: {x: -0.27570826, y: 0.09016436, z: 0.6944689} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 3518988568269279118} - - {fileID: 3518988566914806283} - - {fileID: 3518988566967247603} - - {fileID: 3518988568614055149} - - {fileID: 3518988568829432883} - - {fileID: 3518988567584867554} - - {fileID: 3518988568302997211} - - {fileID: 3518988568701118903} - m_Father: {fileID: 8759592556452939278} + - {fileID: 4342632877651732810} + - {fileID: 8972929557345558486} + - {fileID: 6723049313662681693} + - {fileID: 3547486670193521643} + - {fileID: 680812339532913434} + - {fileID: 8259843468576464570} + - {fileID: 5631985573117008479} + - {fileID: 3640690121677020021} + m_Father: {fileID: 581050114892090470} m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3371113393696081189 +--- !u!33 &2980139374051042476 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9195744425478556369} + m_GameObject: {fileID: 8651087129290156888} m_Mesh: {fileID: 4874721120890998788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &4064301038638388710 +--- !u!23 &4608380333495972975 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9195744425478556369} + m_GameObject: {fileID: 8651087129290156888} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -8132,13 +8136,31 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &5794429086071574723 +--- !u!114 &3952028455649316045 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9195744425478556369} + m_GameObject: {fileID: 8651087129290156888} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!114 &3130829430780530094 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8651087129290156888} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -8190,44 +8212,26 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &5794429086071574720 +--- !u!114 &9171941263148907579 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9195744425478556369} + m_GameObject: {fileID: 8651087129290156888} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &779573344273764056 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9195744425478556369} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &2156478719670217686 +--- !u!64 &7382766909370455166 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9195744425478556369} + m_GameObject: {fileID: 8651087129290156888} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -8235,3 +8239,335 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 4874721120890998788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!1 &8814466206927062729 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5596534962100238371} + - component: {fileID: 4178463352734862286} + - component: {fileID: 1047118223062407614} + m_Layer: 8 + m_Name: Object066 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5596534962100238371 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8814466206927062729} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.1582793, y: -0.007866412, z: 0.24984208} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 581050114892090470} + m_RootOrder: 27 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4178463352734862286 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8814466206927062729} + m_Mesh: {fileID: 1338664037747464310, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &1047118223062407614 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8814466206927062729} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &8837682124308437324 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3640690121677020021} + - component: {fileID: 841316435354202071} + - component: {fileID: 2943484973096690465} + m_Layer: 11 + m_Name: Cube (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3640690121677020021 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8837682124308437324} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0007753968, y: -0.1964001, z: -0.13870001} + m_LocalScale: {x: 0.01133, y: 0.01117, z: 0.01414} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6339660558414541128} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &841316435354202071 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8837682124308437324} + 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!114 &2943484973096690465 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8837682124308437324} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8850847255355272773 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3495438334822071406} + - component: {fileID: 532876198728433083} + - component: {fileID: 8359317192708434192} + m_Layer: 11 + m_Name: Cube (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3495438334822071406 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8850847255355272773} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0014849007, y: -0.19640005, z: -0.13870001} + m_LocalScale: {x: 0.01133, y: 0.01117, z: 0.01414} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2858460395545577028} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &532876198728433083 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8850847255355272773} + 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!114 &8359317192708434192 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8850847255355272773} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &9053611163781981752 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4613551064410664689} + - component: {fileID: 5958420655710606264} + - component: {fileID: 6375196488804495740} + m_Layer: 8 + m_Name: Object060 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4613551064410664689 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9053611163781981752} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.22345886, y: -0.007866353, z: 0.24984208} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 581050114892090470} + m_RootOrder: 24 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5958420655710606264 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9053611163781981752} + m_Mesh: {fileID: -7466011377227053342, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &6375196488804495740 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9053611163781981752} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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} diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/6.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/6.prefab index 5f6a398b7..79d7906ce 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/6.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/6.prefab @@ -1,83 +1,5 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &4739598675093002 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3491450383549407084} - - component: {fileID: 4955027295791160655} - - component: {fileID: 9064469327772633362} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3491450383549407084 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4739598675093002} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1054129798022455986} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4955027295791160655 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4739598675093002} - 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!114 &9064469327772633362 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4739598675093002} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: --- !u!1 &51672687551833200 GameObject: m_ObjectHideFlags: 0 @@ -110,84 +32,6 @@ Transform: m_Father: {fileID: 3001881826281937704} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &278936017745121112 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6987003376667317095} - - component: {fileID: 2108955885953023203} - - component: {fileID: 589332739045236943} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6987003376667317095 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 278936017745121112} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5875567654398652213} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2108955885953023203 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 278936017745121112} - 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!114 &589332739045236943 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 278936017745121112} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: --- !u!1 &289244234138550851 GameObject: m_ObjectHideFlags: 0 @@ -203,7 +47,7 @@ GameObject: - component: {fileID: 5131774068083518145} - component: {fileID: 2357902731805312338} - component: {fileID: 2621020347835034325} - m_Layer: 8 + m_Layer: 13 m_Name: Object006 m_TagString: Untagged m_Icon: {fileID: 0} @@ -222,18 +66,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 6987003376667317095} - - {fileID: 5868834136298690557} - - {fileID: 4976525250069531110} - - {fileID: 8312386094762136474} - - {fileID: 7361826177107237745} - - {fileID: 7011069775328392293} - - {fileID: 6015789570432423842} - - {fileID: 6359833683645053809} - - {fileID: 8265996790619917609} - - {fileID: 5924965266780168284} - - {fileID: 2655926145933836521} - - {fileID: 7235443312391755628} + - {fileID: 7269162495821292324} + - {fileID: 2330110187371336613} + - {fileID: 5637328196705805371} + - {fileID: 5499732514665965031} + - {fileID: 6645226136643372388} + - {fileID: 3710227611738773333} + - {fileID: 480841851590917573} + - {fileID: 4254889724165609613} + - {fileID: 7576513513171803} + - {fileID: 4111114383185852196} + - {fileID: 6872049337606629899} + - {fileID: 7171384238718129818} m_Father: {fileID: 3001881826281937704} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -392,6 +236,162 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -2639241166356525208, guid: fcc65de0395699040be81595ac8a1eda, type: 3} +--- !u!1 &455217401276327429 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9179773436326572345} + - component: {fileID: 3470657454337965186} + - component: {fileID: 2433532609121559502} + m_Layer: 11 + m_Name: Sphere (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9179773436326572345 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 455217401276327429} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2814, y: -0.014200002, z: -0.0041999966} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1054129798022455986} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3470657454337965186 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 455217401276327429} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2433532609121559502 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 455217401276327429} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &460147233394480822 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5178211654784908364} + - component: {fileID: 4316522279943054936} + - component: {fileID: 7776357647393629601} + m_Layer: 11 + m_Name: Sphere (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5178211654784908364 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 460147233394480822} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.023500003, y: -0.014200002, z: -0.0041999966} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1054129798022455986} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &4316522279943054936 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 460147233394480822} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7776357647393629601 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 460147233394480822} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: --- !u!1 &583612679574955321 GameObject: m_ObjectHideFlags: 0 @@ -639,6 +639,162 @@ MonoBehaviour: m_EditorClassIdentifier: volume: 3 selfIcon: {fileID: 21300000, guid: c3e6629937132a54f96bddee775f1ab8, type: 3} +--- !u!1 &804943367864641832 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5427223881943364101} + - component: {fileID: 2082383398177321370} + - component: {fileID: 1005980153739421402} + m_Layer: 11 + m_Name: Sphere (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5427223881943364101 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 804943367864641832} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.1918, y: -0.014200002, z: -0.004200004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1054129798022455986} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2082383398177321370 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 804943367864641832} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1005980153739421402 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 804943367864641832} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 10 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1001676682005083676 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4736611434151197730} + - component: {fileID: 5580204025031341264} + - component: {fileID: 3873369905009999654} + m_Layer: 11 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4736611434151197730 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001676682005083676} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.10930001, y: -0.014200002, z: -0.004999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1953070545116839734} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &5580204025031341264 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001676682005083676} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3873369905009999654 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001676682005083676} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: --- !u!1 &1070619336690562440 GameObject: m_ObjectHideFlags: 0 @@ -654,7 +810,7 @@ GameObject: - component: {fileID: 7151361147983555996} - component: {fileID: 314508607141392593} - component: {fileID: 8559659993479290470} - m_Layer: 8 + m_Layer: 13 m_Name: Object005 m_TagString: Untagged m_Icon: {fileID: 0} @@ -673,18 +829,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 5606219786734570247} - - {fileID: 363971925336806279} - - {fileID: 7337589253734271497} - - {fileID: 3491450383549407084} - - {fileID: 6398533766896139156} - - {fileID: 374504307039242151} - - {fileID: 4126219461914994037} - - {fileID: 1897874872622747961} - - {fileID: 988166034446779175} - - {fileID: 1106869908114056227} - - {fileID: 3086951740947739810} - - {fileID: 4230534255839274089} + - {fileID: 6754921267947037327} + - {fileID: 2971397309305566326} + - {fileID: 8076203628052034743} + - {fileID: 5429038198593407563} + - {fileID: 5178211654784908364} + - {fileID: 850979192788750846} + - {fileID: 8267748047029803415} + - {fileID: 2845427912849893106} + - {fileID: 4703156535336588568} + - {fileID: 5427223881943364101} + - {fileID: 1122357504227233223} + - {fileID: 9179773436326572345} m_Father: {fileID: 3001881826281937704} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -843,7 +999,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: 9186633843763367028, guid: fcc65de0395699040be81595ac8a1eda, type: 3} ---- !u!1 &1532625139779063482 +--- !u!1 &1108502530856091292 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -851,51 +1007,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6398533766896139156} - - component: {fileID: 1066562691770068488} - - component: {fileID: 6671762285048487672} + - component: {fileID: 3961300999522435511} + - component: {fileID: 2220220520125813412} + - component: {fileID: 9155217946068408185} m_Layer: 11 - m_Name: Cube (4) + m_Name: Sphere (10) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6398533766896139156 +--- !u!4 &3961300999522435511 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1532625139779063482} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 1108502530856091292} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.23820001, y: -0.0141699985, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1054129798022455986} - m_RootOrder: 4 + m_Father: {fileID: 4882008233125985282} + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1066562691770068488 -BoxCollider: +--- !u!135 &2220220520125813412 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1532625139779063482} + m_GameObject: {fileID: 1108502530856091292} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6671762285048487672 +--- !u!114 &9155217946068408185 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1532625139779063482} + m_GameObject: {fileID: 1108502530856091292} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -908,7 +1064,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 5 + portPosition: 11 deviceId: deviceName: portModel: @@ -921,7 +1077,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &1811220500502892312 +--- !u!1 &1725457082211326347 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -929,51 +1085,129 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3079608279311180493} - - component: {fileID: 1029360921717921932} - - component: {fileID: 8290270855254131537} + - component: {fileID: 8395112494927092948} + - component: {fileID: 8940107650634599133} + - component: {fileID: 8947022828786313802} m_Layer: 11 - m_Name: Cube + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3079608279311180493 +--- !u!4 &8395112494927092948 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1811220500502892312} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 1725457082211326347} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.1918, y: -0.0141699985, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1953070545116839734} - m_RootOrder: 0 + m_Father: {fileID: 4882008233125985282} + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1029360921717921932 -BoxCollider: +--- !u!135 &8940107650634599133 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1811220500502892312} + m_GameObject: {fileID: 1725457082211326347} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8290270855254131537 +--- !u!114 &8947022828786313802 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1811220500502892312} + m_GameObject: {fileID: 1725457082211326347} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 10 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1776242272121433849 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4519495791206672609} + - component: {fileID: 422975930298716614} + - component: {fileID: 1048581869345689715} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4519495791206672609 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1776242272121433849} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.20284998, y: -0.014200002, z: -0.0050000027} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1953070545116839734} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &422975930298716614 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1776242272121433849} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1048581869345689715 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1776242272121433849} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -999,7 +1233,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2178097307975041449 +--- !u!1 &1905422744633887543 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1007,129 +1241,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5023834293397528477} - - component: {fileID: 4145460659120715460} - - component: {fileID: 1192018134773158173} + - component: {fileID: 4845998205499927687} + - component: {fileID: 3197139099405222897} + - component: {fileID: 4684009641996421033} m_Layer: 11 - m_Name: Cube (3) + m_Name: Sphere (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5023834293397528477 +--- !u!4 &4845998205499927687 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2178097307975041449} + m_GameObject: {fileID: 1905422744633887543} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.1133, y: -0.0141699985, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 4882008233125985282} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4145460659120715460 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2178097307975041449} - 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!114 &1192018134773158173 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2178097307975041449} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2217907121939434838 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4976525250069531110} - - component: {fileID: 8736136026162174631} - - component: {fileID: 3278081618146538640} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4976525250069531110 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2217907121939434838} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5875567654398652213} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8736136026162174631 -BoxCollider: +--- !u!135 &3197139099405222897 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2217907121939434838} + m_GameObject: {fileID: 1905422744633887543} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3278081618146538640 +--- !u!114 &4684009641996421033 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2217907121939434838} + m_GameObject: {fileID: 1905422744633887543} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1155,84 +1311,6 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2237707098477042755 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3529934397240885573} - - component: {fileID: 5937885859188939113} - - component: {fileID: 2194137713654655023} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3529934397240885573 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2237707098477042755} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4882008233125985282} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5937885859188939113 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2237707098477042755} - 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!114 &2194137713654655023 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2237707098477042755} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: --- !u!1 &2263988980548513006 GameObject: m_ObjectHideFlags: 0 @@ -1322,7 +1400,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &2524638552973811840 +--- !u!1 &2308798557421360931 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1330,51 +1408,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4230534255839274089} - - component: {fileID: 645662206694975441} - - component: {fileID: 7329084498217611756} + - component: {fileID: 5592906861911157890} + - component: {fileID: 3230706980010232506} + - component: {fileID: 4059455773115761326} m_Layer: 11 - m_Name: Cube (11) + m_Name: Sphere (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4230534255839274089 +--- !u!4 &5592906861911157890 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2524638552973811840} + m_GameObject: {fileID: 2308798557421360931} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.1133, y: -0.014200002, z: -0.0050000027} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1054129798022455986} - m_RootOrder: 11 + m_Father: {fileID: 1953070545116839734} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &645662206694975441 -BoxCollider: +--- !u!135 &3230706980010232506 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2524638552973811840} + m_GameObject: {fileID: 2308798557421360931} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7329084498217611756 +--- !u!114 &4059455773115761326 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2524638552973811840} + m_GameObject: {fileID: 2308798557421360931} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1387,7 +1465,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 12 + portPosition: 3 deviceId: deviceName: portModel: @@ -1400,7 +1478,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2578545889239140249 +--- !u!1 &2502344170103043671 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1408,285 +1486,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8795811758736210353} - - component: {fileID: 3744811661139576004} - - component: {fileID: 3509821717690088477} + - component: {fileID: 6645226136643372388} + - component: {fileID: 2824191972928564654} + - component: {fileID: 4824137944396696755} m_Layer: 11 - m_Name: Cube (5) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8795811758736210353 +--- !u!4 &6645226136643372388 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2578545889239140249} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4882008233125985282} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3744811661139576004 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2578545889239140249} - 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!114 &3509821717690088477 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2578545889239140249} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2838890787059182465 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7011069775328392293} - - component: {fileID: 2747138882031642732} - - component: {fileID: 629622618607387128} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7011069775328392293 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2838890787059182465} + m_GameObject: {fileID: 2502344170103043671} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.0235, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 5875567654398652213} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2747138882031642732 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2838890787059182465} - 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!114 &629622618607387128 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2838890787059182465} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3062165415180312945 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8265996790619917609} - - component: {fileID: 1731759039220296034} - - component: {fileID: 2784185219253457407} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8265996790619917609 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3062165415180312945} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5875567654398652213} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1731759039220296034 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3062165415180312945} - 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!114 &2784185219253457407 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3062165415180312945} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3217707493920328677 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1841144600581902750} - - component: {fileID: 3552628068389154287} - - component: {fileID: 1326512468076719629} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1841144600581902750 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3217707493920328677} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4882008233125985282} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3552628068389154287 -BoxCollider: +--- !u!135 &2824191972928564654 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3217707493920328677} + m_GameObject: {fileID: 2502344170103043671} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1326512468076719629 +--- !u!114 &4824137944396696755 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3217707493920328677} + m_GameObject: {fileID: 2502344170103043671} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1712,7 +1556,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3294256857642676603 +--- !u!1 &2566867729341847263 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1720,51 +1564,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 442432214845945121} - - component: {fileID: 1725554895625445047} - - component: {fileID: 4648478300144810836} + - component: {fileID: 5046323381110331507} + - component: {fileID: 5571233154325775621} + - component: {fileID: 3054569637899472342} m_Layer: 11 - m_Name: Cube (2) + m_Name: Sphere (8) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &442432214845945121 +--- !u!4 &5046323381110331507 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3294256857642676603} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 2566867729341847263} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.14860001, y: -0.014200002, z: -0.004999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 4882008233125985282} - m_RootOrder: 2 + m_Father: {fileID: 1953070545116839734} + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1725554895625445047 -BoxCollider: +--- !u!135 &5571233154325775621 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3294256857642676603} + m_GameObject: {fileID: 2566867729341847263} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4648478300144810836 +--- !u!114 &3054569637899472342 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3294256857642676603} + m_GameObject: {fileID: 2566867729341847263} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1777,7 +1621,553 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 3 + portPosition: 9 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2921356836052408514 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5499732514665965031} + - component: {fileID: 7678289197124430089} + - component: {fileID: 2276045326854948867} + m_Layer: 11 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5499732514665965031 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2921356836052408514} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.0701, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5875567654398652213} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7678289197124430089 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2921356836052408514} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2276045326854948867 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2921356836052408514} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3034355302781252483 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 549030369955085676} + - component: {fileID: 6125914891309764763} + - component: {fileID: 4672185262575556940} + m_Layer: 11 + m_Name: Sphere (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &549030369955085676 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3034355302781252483} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2814, y: -0.014200002, z: -0.0050000027} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1953070545116839734} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6125914891309764763 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3034355302781252483} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4672185262575556940 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3034355302781252483} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3079042633265392824 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4397528036291532760} + - component: {fileID: 539684390046949091} + - component: {fileID: 1217859140397159655} + m_Layer: 11 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4397528036291532760 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3079042633265392824} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.15959999, y: -0.0141699985, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4882008233125985282} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &539684390046949091 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3079042633265392824} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1217859140397159655 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3079042633265392824} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3093112872914248381 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7987329549410604291} + - component: {fileID: 3585581129805181266} + - component: {fileID: 4904861482243352501} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7987329549410604291 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3093112872914248381} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.20284998, y: -0.0141699985, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4882008233125985282} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3585581129805181266 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3093112872914248381} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4904861482243352501 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3093112872914248381} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3136843553744738972 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4465868573658689904} + - component: {fileID: 7387016261870068334} + - component: {fileID: 2723860623838890904} + m_Layer: 11 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4465868573658689904 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3136843553744738972} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.109299995, y: -0.0141699985, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4882008233125985282} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7387016261870068334 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3136843553744738972} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2723860623838890904 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3136843553744738972} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3139399438437256929 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5429038198593407563} + - component: {fileID: 1781940434082302185} + - component: {fileID: 2578469704521472894} + m_Layer: 11 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5429038198593407563 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3139399438437256929} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.0701, y: -0.014200002, z: -0.0042000115} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1054129798022455986} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1781940434082302185 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3139399438437256929} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2578469704521472894 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3139399438437256929} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3459870988182229582 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3710227611738773333} + - component: {fileID: 4287704939864222728} + - component: {fileID: 6738336060506306874} + m_Layer: 11 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3710227611738773333 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3459870988182229582} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.019699998, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5875567654398652213} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &4287704939864222728 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3459870988182229582} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6738336060506306874 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3459870988182229582} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 deviceId: deviceName: portModel: @@ -1805,7 +2195,7 @@ GameObject: - component: {fileID: 2116936124714162930} - component: {fileID: 7779807260624298258} - component: {fileID: 2721420064734942141} - m_Layer: 8 + m_Layer: 13 m_Name: Object002 m_TagString: Untagged m_Icon: {fileID: 0} @@ -1822,20 +2212,20 @@ Transform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0.00032439083, y: -0.110712744, z: 0.019212604} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 + m_ConstrainProportionsScale: 1 m_Children: - - {fileID: 2250358367165771622} - - {fileID: 5119357014523561465} - - {fileID: 442432214845945121} - - {fileID: 5023834293397528477} - - {fileID: 1841144600581902750} - - {fileID: 8795811758736210353} - - {fileID: 3225264136296405500} - - {fileID: 8399748865722738932} - - {fileID: 3529934397240885573} - - {fileID: 6696839480469275885} - - {fileID: 3525639783844535631} - - {fileID: 1900394028713828201} + - {fileID: 7987329549410604291} + - {fileID: 4397528036291532760} + - {fileID: 4845998205499927687} + - {fileID: 6919048357288321336} + - {fileID: 5417607978065400560} + - {fileID: 5766074767904215785} + - {fileID: 4304858096679672161} + - {fileID: 4465868573658689904} + - {fileID: 687255622799688660} + - {fileID: 8395112494927092948} + - {fileID: 3961300999522435511} + - {fileID: 1679075022984319337} m_Father: {fileID: 3001881826281937704} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1994,7 +2384,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -3996760141626369306, guid: fcc65de0395699040be81595ac8a1eda, type: 3} ---- !u!1 &3517930103672210643 +--- !u!1 &3916991653538095874 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2002,129 +2392,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5606219786734570247} - - component: {fileID: 2759335771450532034} - - component: {fileID: 9097893391236592637} + - component: {fileID: 4312932648291573975} + - component: {fileID: 2914820028366002135} + - component: {fileID: 3685755056081384256} m_Layer: 11 - m_Name: Cube + m_Name: Sphere (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5606219786734570247 +--- !u!4 &4312932648291573975 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3517930103672210643} + m_GameObject: {fileID: 3916991653538095874} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1054129798022455986} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2759335771450532034 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3517930103672210643} - 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!114 &9097893391236592637 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3517930103672210643} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3651212341625536282 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5968258763277714762} - - component: {fileID: 1037213909725857456} - - component: {fileID: 2390282621892003168} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5968258763277714762 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3651212341625536282} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.06610001, y: -0.014200002, z: -0.004999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 1953070545116839734} - m_RootOrder: 9 + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1037213909725857456 -BoxCollider: +--- !u!135 &2914820028366002135 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3651212341625536282} + m_GameObject: {fileID: 3916991653538095874} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2390282621892003168 +--- !u!114 &3685755056081384256 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3651212341625536282} + m_GameObject: {fileID: 3916991653538095874} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2137,7 +2449,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 10 + portPosition: 7 deviceId: deviceName: portModel: @@ -2150,7 +2462,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3775541774270519992 +--- !u!1 &4079534528943849740 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2158,285 +2470,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7235443312391755628} - - component: {fileID: 5364973522945899156} - - component: {fileID: 7166850523437902280} + - component: {fileID: 5766074767904215785} + - component: {fileID: 7860026548030721777} + - component: {fileID: 3895794074150927746} m_Layer: 11 - m_Name: Cube (11) + m_Name: Sphere (5) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7235443312391755628 +--- !u!4 &5766074767904215785 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3775541774270519992} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5875567654398652213} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5364973522945899156 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3775541774270519992} - 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!114 &7166850523437902280 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3775541774270519992} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3838670894459266178 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 944005204603691979} - - component: {fileID: 894266580431230076} - - component: {fileID: 1374036149300484065} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &944005204603691979 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3838670894459266178} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1953070545116839734} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &894266580431230076 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3838670894459266178} - 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!114 &1374036149300484065 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3838670894459266178} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3865142482223733887 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8399748865722738932} - - component: {fileID: 8475103253303645781} - - component: {fileID: 8952877473644671186} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8399748865722738932 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3865142482223733887} + m_GameObject: {fileID: 4079534528943849740} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.019700002, y: -0.0141699985, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 4882008233125985282} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8475103253303645781 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3865142482223733887} - 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!114 &8952877473644671186 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3865142482223733887} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4027053919077067206 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4474833255023629206} - - component: {fileID: 5223126635735195881} - - component: {fileID: 6382988017966619277} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4474833255023629206 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4027053919077067206} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1953070545116839734} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5223126635735195881 -BoxCollider: +--- !u!135 &7860026548030721777 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4027053919077067206} + m_GameObject: {fileID: 4079534528943849740} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6382988017966619277 +--- !u!114 &3895794074150927746 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4027053919077067206} + m_GameObject: {fileID: 4079534528943849740} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2462,7 +2540,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &4203380208484595205 +--- !u!1 &4227789811812908167 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2470,129 +2548,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3561787069309820268} - - component: {fileID: 2910251118113698014} - - component: {fileID: 7686954691071112425} + - component: {fileID: 8076203628052034743} + - component: {fileID: 7504587763448014057} + - component: {fileID: 2191669656080347291} m_Layer: 11 - m_Name: Cube (6) + m_Name: Sphere (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3561787069309820268 +--- !u!4 &8076203628052034743 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4203380208484595205} + m_GameObject: {fileID: 4227789811812908167} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1953070545116839734} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2910251118113698014 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4203380208484595205} - 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!114 &7686954691071112425 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4203380208484595205} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4216496331722382644 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4126219461914994037} - - component: {fileID: 8026440543569876498} - - component: {fileID: 516862203560820521} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4126219461914994037 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4216496331722382644} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.1133, y: -0.014200002, z: -0.0041999966} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 1054129798022455986} - m_RootOrder: 6 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8026440543569876498 -BoxCollider: +--- !u!135 &7504587763448014057 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4216496331722382644} + m_GameObject: {fileID: 4227789811812908167} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &516862203560820521 +--- !u!114 &2191669656080347291 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4216496331722382644} + m_GameObject: {fileID: 4227789811812908167} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2605,7 +2605,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 7 + portPosition: 3 deviceId: deviceName: portModel: @@ -2633,7 +2633,7 @@ GameObject: - component: {fileID: 7751541019396425394} - component: {fileID: 2583331343439713132} - component: {fileID: 7555474499474028776} - m_Layer: 8 + m_Layer: 13 m_Name: Object004 m_TagString: Untagged m_Icon: {fileID: 0} @@ -2652,18 +2652,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 3079608279311180493} - - {fileID: 944005204603691979} - - {fileID: 4418440666348997821} - - {fileID: 6001349062081367197} - - {fileID: 8456914082403712070} - - {fileID: 4474833255023629206} - - {fileID: 3561787069309820268} - - {fileID: 4069218108933459548} - - {fileID: 2098939570822969607} - - {fileID: 5968258763277714762} - - {fileID: 6949268240041058055} - - {fileID: 1422326788253848992} + - {fileID: 4519495791206672609} + - {fileID: 2128576193436957830} + - {fileID: 5592906861911157890} + - {fileID: 7775694542143704857} + - {fileID: 657726593940201769} + - {fileID: 6832788748548678332} + - {fileID: 4312932648291573975} + - {fileID: 4736611434151197730} + - {fileID: 5046323381110331507} + - {fileID: 6141654048536293457} + - {fileID: 8236612011662983873} + - {fileID: 549030369955085676} m_Father: {fileID: 3001881826281937704} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -2822,7 +2822,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -8113768720884857512, guid: fcc65de0395699040be81595ac8a1eda, type: 3} ---- !u!1 &4302443586946382331 +--- !u!1 &4268560468854077361 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2830,285 +2830,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1422326788253848992} - - component: {fileID: 2011356094559435846} - - component: {fileID: 2037575831601636731} + - component: {fileID: 687255622799688660} + - component: {fileID: 7806817794941555805} + - component: {fileID: 6302069996741476439} m_Layer: 11 - m_Name: Cube (11) + m_Name: Sphere (8) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1422326788253848992 +--- !u!4 &687255622799688660 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4302443586946382331} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 4268560468854077361} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.14860001, y: -0.0141699985, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1953070545116839734} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2011356094559435846 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4302443586946382331} - 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!114 &2037575831601636731 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4302443586946382331} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4362575261707138353 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8456914082403712070} - - component: {fileID: 2918423700720495731} - - component: {fileID: 1018151513162609875} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8456914082403712070 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4362575261707138353} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1953070545116839734} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2918423700720495731 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4362575261707138353} - 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!114 &1018151513162609875 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4362575261707138353} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4386225642645771564 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8312386094762136474} - - component: {fileID: 5955492539399419379} - - component: {fileID: 8678067439603798355} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8312386094762136474 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4386225642645771564} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5875567654398652213} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5955492539399419379 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4386225642645771564} - 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!114 &8678067439603798355 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4386225642645771564} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4801044159896548346 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2098939570822969607} - - component: {fileID: 976133814955699532} - - component: {fileID: 4461153051182109611} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2098939570822969607 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4801044159896548346} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1953070545116839734} + m_Father: {fileID: 4882008233125985282} m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &976133814955699532 -BoxCollider: +--- !u!135 &7806817794941555805 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4801044159896548346} + m_GameObject: {fileID: 4268560468854077361} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4461153051182109611 +--- !u!114 &6302069996741476439 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4801044159896548346} + m_GameObject: {fileID: 4268560468854077361} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3134,7 +2900,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &4891855306949026394 +--- !u!1 &4320125748517653592 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3142,129 +2908,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1897874872622747961} - - component: {fileID: 3098768261747868947} - - component: {fileID: 7566652560289854366} + - component: {fileID: 2971397309305566326} + - component: {fileID: 830891719481746900} + - component: {fileID: 5594968053599912593} m_Layer: 11 - m_Name: Cube (7) + m_Name: Sphere (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1897874872622747961 +--- !u!4 &2971397309305566326 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4891855306949026394} + m_GameObject: {fileID: 4320125748517653592} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.15959999, y: -0.014200002, z: -0.0041999966} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 1054129798022455986} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3098768261747868947 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4891855306949026394} - 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!114 &7566652560289854366 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4891855306949026394} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4977059673041638437 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5119357014523561465} - - component: {fileID: 4724237168417270591} - - component: {fileID: 4107353001988502446} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5119357014523561465 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4977059673041638437} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4882008233125985282} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4724237168417270591 -BoxCollider: +--- !u!135 &830891719481746900 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4977059673041638437} + m_GameObject: {fileID: 4320125748517653592} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4107353001988502446 +--- !u!114 &5594968053599912593 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4977059673041638437} + m_GameObject: {fileID: 4320125748517653592} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3290,7 +2978,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &5001955958484661454 +--- !u!1 &4415127798806837739 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3298,51 +2986,129 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5924965266780168284} - - component: {fileID: 7992839373255793929} - - component: {fileID: 304790597448531364} + - component: {fileID: 480841851590917573} + - component: {fileID: 5640015767679092491} + - component: {fileID: 2940165854367278048} m_Layer: 11 - m_Name: Cube (9) + m_Name: Sphere (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5924965266780168284 +--- !u!4 &480841851590917573 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5001955958484661454} + m_GameObject: {fileID: 4415127798806837739} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.06610001, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 5875567654398652213} - m_RootOrder: 9 + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7992839373255793929 -BoxCollider: +--- !u!135 &5640015767679092491 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5001955958484661454} + m_GameObject: {fileID: 4415127798806837739} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &304790597448531364 +--- !u!114 &2940165854367278048 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5001955958484661454} + m_GameObject: {fileID: 4415127798806837739} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4427166891829741573 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6141654048536293457} + - component: {fileID: 225562712045580518} + - component: {fileID: 7594728635630081276} + m_Layer: 11 + m_Name: Sphere (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6141654048536293457 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4427166891829741573} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.1918, y: -0.014200002, z: -0.0050000027} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1953070545116839734} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &225562712045580518 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4427166891829741573} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7594728635630081276 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4427166891829741573} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3368,7 +3134,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &5403261504435218945 +--- !u!1 &4736151084345855977 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3376,51 +3142,519 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1900394028713828201} - - component: {fileID: 5824504933729292842} - - component: {fileID: 991375158551521143} + - component: {fileID: 4703156535336588568} + - component: {fileID: 4063523584757907142} + - component: {fileID: 3629214628393178863} m_Layer: 11 - m_Name: Cube (11) + m_Name: Sphere (8) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1900394028713828201 +--- !u!4 &4703156535336588568 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5403261504435218945} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 4736151084345855977} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.14860001, y: -0.014200002, z: -0.004200004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 4882008233125985282} - m_RootOrder: 11 + m_Father: {fileID: 1054129798022455986} + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5824504933729292842 -BoxCollider: +--- !u!135 &4063523584757907142 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5403261504435218945} + m_GameObject: {fileID: 4736151084345855977} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &991375158551521143 +--- !u!114 &3629214628393178863 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5403261504435218945} + m_GameObject: {fileID: 4736151084345855977} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 9 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4829437181973712967 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2128576193436957830} + - component: {fileID: 1898359691934218950} + - component: {fileID: 6087187587017051902} + m_Layer: 11 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2128576193436957830 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4829437181973712967} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.15959999, y: -0.014200002, z: -0.0050000027} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1953070545116839734} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1898359691934218950 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4829437181973712967} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6087187587017051902 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4829437181973712967} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4847811062129799284 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8267748047029803415} + - component: {fileID: 604007676488787279} + - component: {fileID: 1285312943590832024} + m_Layer: 11 + m_Name: Sphere (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8267748047029803415 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4847811062129799284} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.066099994, y: -0.014200002, z: -0.004200004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1054129798022455986} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &604007676488787279 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4847811062129799284} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1285312943590832024 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4847811062129799284} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5233660866642941147 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 657726593940201769} + - component: {fileID: 8763375531688063411} + - component: {fileID: 2483820384431088524} + m_Layer: 11 + m_Name: Sphere (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &657726593940201769 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5233660866642941147} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.0235, y: -0.014200002, z: -0.004999999} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1953070545116839734} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &8763375531688063411 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5233660866642941147} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2483820384431088524 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5233660866642941147} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5488513087458214189 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2330110187371336613} + - component: {fileID: 6429688764468122754} + - component: {fileID: 4730280906250898195} + m_Layer: 11 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2330110187371336613 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5488513087458214189} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.15959999, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5875567654398652213} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6429688764468122754 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5488513087458214189} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4730280906250898195 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5488513087458214189} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6277715824825920985 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2845427912849893106} + - component: {fileID: 6993622727119046065} + - component: {fileID: 2689185869966111971} + m_Layer: 11 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2845427912849893106 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6277715824825920985} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.10930001, y: -0.014200002, z: -0.004200004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1054129798022455986} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6993622727119046065 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6277715824825920985} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2689185869966111971 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6277715824825920985} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6469391579333549142 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1679075022984319337} + - component: {fileID: 3416115581773954381} + - component: {fileID: 115127553750295973} + m_Layer: 11 + m_Name: Sphere (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1679075022984319337 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6469391579333549142} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2814, y: -0.0141699985, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4882008233125985282} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3416115581773954381 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6469391579333549142} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &115127553750295973 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6469391579333549142} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3446,7 +3680,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &5749688682047344162 +--- !u!1 &6534635607948472330 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3454,363 +3688,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6949268240041058055} - - component: {fileID: 4079732340924781227} - - component: {fileID: 2856909914681268833} + - component: {fileID: 6754921267947037327} + - component: {fileID: 7938142620707233481} + - component: {fileID: 816973394747026635} m_Layer: 11 - m_Name: Cube (10) + m_Name: Sphere m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6949268240041058055 +--- !u!4 &6754921267947037327 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5749688682047344162} + m_GameObject: {fileID: 6534635607948472330} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1953070545116839734} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4079732340924781227 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5749688682047344162} - 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!114 &2856909914681268833 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5749688682047344162} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5750663706863365632 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2655926145933836521} - - component: {fileID: 7369361090704879447} - - component: {fileID: 6835931154885101460} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2655926145933836521 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5750663706863365632} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5875567654398652213} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7369361090704879447 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5750663706863365632} - 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!114 &6835931154885101460 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5750663706863365632} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5918167780615444652 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3525639783844535631} - - component: {fileID: 4227344159395061468} - - component: {fileID: 2368150884089221789} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3525639783844535631 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5918167780615444652} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4882008233125985282} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4227344159395061468 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5918167780615444652} - 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!114 &2368150884089221789 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5918167780615444652} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6171866634407756331 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7337589253734271497} - - component: {fileID: 4966856485970493116} - - component: {fileID: 6913901019685509131} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7337589253734271497 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6171866634407756331} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.20284998, y: -0.014200002, z: -0.0041999966} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 1054129798022455986} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4966856485970493116 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6171866634407756331} - 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!114 &6913901019685509131 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6171866634407756331} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7526389410080324018 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2250358367165771622} - - component: {fileID: 3628875191377645526} - - component: {fileID: 5265677880444205468} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2250358367165771622 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7526389410080324018} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4882008233125985282} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3628875191377645526 -BoxCollider: +--- !u!135 &7938142620707233481 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7526389410080324018} + m_GameObject: {fileID: 6534635607948472330} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5265677880444205468 +--- !u!114 &816973394747026635 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7526389410080324018} + m_GameObject: {fileID: 6534635607948472330} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3836,7 +3758,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7547289304774458138 +--- !u!1 &6549980711254565406 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3844,940 +3766,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2086789431953690583} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2086789431953690583 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7547289304774458138} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: -0.47800004, z: -0.13499999} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3001881826281937704} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &7596544725822498730 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3225264136296405500} - - component: {fileID: 9114398712544026486} - - component: {fileID: 7226978977838501583} + - component: {fileID: 6919048357288321336} + - component: {fileID: 7893824868472400254} + - component: {fileID: 8562209842885203117} m_Layer: 11 - m_Name: Cube (6) + m_Name: Sphere (3) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3225264136296405500 +--- !u!4 &6919048357288321336 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7596544725822498730} + m_GameObject: {fileID: 6549980711254565406} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.0701, y: -0.0141699985, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 4882008233125985282} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9114398712544026486 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7596544725822498730} - 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!114 &7226978977838501583 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7596544725822498730} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7656962105926112851 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1106869908114056227} - - component: {fileID: 2708033540670242072} - - component: {fileID: 4037937943041650697} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1106869908114056227 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7656962105926112851} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1054129798022455986} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2708033540670242072 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7656962105926112851} - 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!114 &4037937943041650697 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7656962105926112851} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7706613219653359681 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 363971925336806279} - - component: {fileID: 291497169552048104} - - component: {fileID: 3129942574448921308} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &363971925336806279 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7706613219653359681} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1054129798022455986} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &291497169552048104 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7706613219653359681} - 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!114 &3129942574448921308 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7706613219653359681} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7763550993714257061 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3086951740947739810} - - component: {fileID: 7164360665642038279} - - component: {fileID: 2966881928777291580} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3086951740947739810 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7763550993714257061} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1054129798022455986} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7164360665642038279 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7763550993714257061} - 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!114 &2966881928777291580 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7763550993714257061} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7839179467008730117 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6015789570432423842} - - component: {fileID: 3707991151267432486} - - component: {fileID: 3020209594295626256} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6015789570432423842 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7839179467008730117} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5875567654398652213} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3707991151267432486 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7839179467008730117} - 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!114 &3020209594295626256 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7839179467008730117} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8026055987293270942 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6359833683645053809} - - component: {fileID: 4366473694158476945} - - component: {fileID: 3147690797520090625} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6359833683645053809 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8026055987293270942} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5875567654398652213} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4366473694158476945 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8026055987293270942} - 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!114 &3147690797520090625 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8026055987293270942} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8197186669031788711 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 988166034446779175} - - component: {fileID: 2805556992337274981} - - component: {fileID: 8712270314685518811} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &988166034446779175 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8197186669031788711} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1054129798022455986} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2805556992337274981 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8197186669031788711} - 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!114 &8712270314685518811 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8197186669031788711} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8372878113452091199 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6696839480469275885} - - component: {fileID: 2862373174323856408} - - component: {fileID: 405946227838259861} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6696839480469275885 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8372878113452091199} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4882008233125985282} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2862373174323856408 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8372878113452091199} - 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!114 &405946227838259861 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8372878113452091199} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8420063022133341024 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5868834136298690557} - - component: {fileID: 8332123853659973343} - - component: {fileID: 4463210437162413112} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5868834136298690557 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8420063022133341024} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5875567654398652213} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8332123853659973343 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8420063022133341024} - 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!114 &4463210437162413112 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8420063022133341024} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8641120483667982640 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4418440666348997821} - - component: {fileID: 5822493470004455333} - - component: {fileID: 2827136040419911494} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4418440666348997821 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8641120483667982640} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1953070545116839734} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5822493470004455333 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8641120483667982640} - 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!114 &2827136040419911494 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8641120483667982640} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8772916791660844663 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7361826177107237745} - - component: {fileID: 9124289510535300297} - - component: {fileID: 2893810677352629899} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7361826177107237745 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8772916791660844663} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5875567654398652213} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9124289510535300297 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8772916791660844663} - 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!114 &2893810677352629899 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8772916791660844663} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8783138544742901671 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6001349062081367197} - - component: {fileID: 5992739552458129543} - - component: {fileID: 8138812560398638607} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6001349062081367197 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8783138544742901671} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1953070545116839734} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5992739552458129543 -BoxCollider: +--- !u!135 &7893824868472400254 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8783138544742901671} + m_GameObject: {fileID: 6549980711254565406} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8138812560398638607 +--- !u!114 &8562209842885203117 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8783138544742901671} + m_GameObject: {fileID: 6549980711254565406} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4803,7 +3836,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &9025692635920549798 +--- !u!1 &6642149731362392663 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4811,51 +3844,628 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 374504307039242151} - - component: {fileID: 1406711682193023406} - - component: {fileID: 1233475457657302189} + - component: {fileID: 5637328196705805371} + - component: {fileID: 4632728345881665267} + - component: {fileID: 220586407597210020} m_Layer: 11 - m_Name: Cube (5) + m_Name: Sphere (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &374504307039242151 +--- !u!4 &5637328196705805371 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9025692635920549798} + m_GameObject: {fileID: 6642149731362392663} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.1133, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1054129798022455986} - m_RootOrder: 5 + m_Father: {fileID: 5875567654398652213} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1406711682193023406 -BoxCollider: +--- !u!135 &4632728345881665267 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9025692635920549798} + m_GameObject: {fileID: 6642149731362392663} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1233475457657302189 +--- !u!114 &220586407597210020 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9025692635920549798} + m_GameObject: {fileID: 6642149731362392663} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6896545899942479403 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7269162495821292324} + - component: {fileID: 23054170543742654} + - component: {fileID: 2462061375246560215} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7269162495821292324 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6896545899942479403} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.20284998, y: -0.014200009, z: -0.005136095} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5875567654398652213} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &23054170543742654 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6896545899942479403} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2462061375246560215 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6896545899942479403} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7244737009960882217 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6872049337606629899} + - component: {fileID: 2365748636864589778} + - component: {fileID: 270802265500712527} + m_Layer: 11 + m_Name: Sphere (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6872049337606629899 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7244737009960882217} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.23820001, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5875567654398652213} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2365748636864589778 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7244737009960882217} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &270802265500712527 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7244737009960882217} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7547289304774458138 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2086789431953690583} + m_Layer: 11 + m_Name: "\u951A\u70B9" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2086789431953690583 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7547289304774458138} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: -0.47800004, z: -0.13499999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3001881826281937704} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7848828847356379133 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4304858096679672161} + - component: {fileID: 8648263929152480655} + - component: {fileID: 4554749662435612218} + m_Layer: 11 + m_Name: Sphere (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4304858096679672161 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7848828847356379133} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.066099994, y: -0.0141699985, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4882008233125985282} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &8648263929152480655 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7848828847356379133} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4554749662435612218 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7848828847356379133} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7883372044861433018 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5417607978065400560} + - component: {fileID: 1972588334739818426} + - component: {fileID: 1715704363802831768} + m_Layer: 11 + m_Name: Sphere (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5417607978065400560 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7883372044861433018} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0235, y: -0.0141699985, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4882008233125985282} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1972588334739818426 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7883372044861433018} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1715704363802831768 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7883372044861433018} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7909710268783740601 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1122357504227233223} + - component: {fileID: 604341483547631780} + - component: {fileID: 3177016657807914265} + m_Layer: 11 + m_Name: Sphere (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1122357504227233223 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7909710268783740601} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.23820001, y: -0.014200002, z: -0.0041999966} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1054129798022455986} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &604341483547631780 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7909710268783740601} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3177016657807914265 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7909710268783740601} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8151306247797027637 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7171384238718129818} + - component: {fileID: 800936380459342625} + - component: {fileID: 9073176908816116098} + m_Layer: 11 + m_Name: Sphere (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7171384238718129818 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8151306247797027637} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2814, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5875567654398652213} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &800936380459342625 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8151306247797027637} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &9073176908816116098 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8151306247797027637} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8210423306645576874 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6832788748548678332} + - component: {fileID: 8907480505117013784} + - component: {fileID: 2703561084172031679} + m_Layer: 11 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6832788748548678332 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8210423306645576874} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.019700002, y: -0.014200002, z: -0.004999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1953070545116839734} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &8907480505117013784 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8210423306645576874} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2703561084172031679 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8210423306645576874} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4881,7 +4491,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &9152645850575273183 +--- !u!1 &8231803064101855820 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4889,51 +4499,129 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4069218108933459548} - - component: {fileID: 8170831933976918431} - - component: {fileID: 5549459679808602651} + - component: {fileID: 7775694542143704857} + - component: {fileID: 1355152288061589209} + - component: {fileID: 3264989890160139606} m_Layer: 11 - m_Name: Cube (7) + m_Name: Sphere (3) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4069218108933459548 +--- !u!4 &7775694542143704857 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9152645850575273183} + m_GameObject: {fileID: 8231803064101855820} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.0701, y: -0.014200002, z: -0.004999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 1953070545116839734} - m_RootOrder: 7 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8170831933976918431 -BoxCollider: +--- !u!135 &1355152288061589209 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9152645850575273183} + m_GameObject: {fileID: 8231803064101855820} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5549459679808602651 +--- !u!114 &3264989890160139606 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9152645850575273183} + m_GameObject: {fileID: 8231803064101855820} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8305789148104860495 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4254889724165609613} + - component: {fileID: 5433840641507952085} + - component: {fileID: 6580962949334429893} + m_Layer: 11 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4254889724165609613 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8305789148104860495} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.109299995, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5875567654398652213} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &5433840641507952085 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8305789148104860495} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6580962949334429893 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8305789148104860495} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4959,3 +4647,315 @@ MonoBehaviour: remark: createTime: createName: +--- !u!1 &8595239702253531529 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7576513513171803} + - component: {fileID: 924166753608122814} + - component: {fileID: 378308956284909603} + m_Layer: 11 + m_Name: Sphere (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7576513513171803 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8595239702253531529} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.14860001, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5875567654398652213} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &924166753608122814 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8595239702253531529} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &378308956284909603 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8595239702253531529} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 9 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8978150742677306605 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 850979192788750846} + - component: {fileID: 5426263684626004957} + - component: {fileID: 611651947251728942} + m_Layer: 11 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &850979192788750846 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8978150742677306605} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.019699998, y: -0.014200002, z: -0.004200004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1054129798022455986} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &5426263684626004957 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8978150742677306605} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &611651947251728942 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8978150742677306605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &9026885673222512853 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4111114383185852196} + - component: {fileID: 3018787804202991931} + - component: {fileID: 1170361171455438734} + m_Layer: 11 + m_Name: Sphere (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4111114383185852196 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9026885673222512853} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.1918, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5875567654398652213} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3018787804202991931 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9026885673222512853} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1170361171455438734 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9026885673222512853} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 10 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &9130872260783360809 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8236612011662983873} + - component: {fileID: 6974830851415254907} + - component: {fileID: 3153557125421466923} + m_Layer: 11 + m_Name: Sphere (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8236612011662983873 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9130872260783360809} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.23820001, y: -0.014200002, z: -0.0050000027} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1953070545116839734} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6974830851415254907 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9130872260783360809} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3153557125421466923 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9130872260783360809} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/62.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/62.prefab index 88aaa943b..e0040ceb5 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/62.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/62.prefab @@ -811,7 +811,7 @@ MonoBehaviour: frames: [] PerTier: 42 PerRow: 5 - volume: 2 + volume: 1 isExit: 0 isClicked: 0 isTarget: 0 @@ -865,7 +865,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} m_Name: m_EditorClassIdentifier: - volume: 2 + volume: 1 selfIcon: {fileID: 21300000, guid: 415ee62fca836bb488ec50fbe5ad8c44, type: 3} --- !u!64 &-8964996270950891443 MeshCollider: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/63.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/63.prefab index d0facf07a..0aa42ecd7 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/63.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/63.prefab @@ -618,7 +618,7 @@ MonoBehaviour: frames: [] PerTier: 42 PerRow: 5 - volume: 3 + volume: 2 isExit: 0 isClicked: 0 isTarget: 0 @@ -672,7 +672,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} m_Name: m_EditorClassIdentifier: - volume: 3 + volume: 2 selfIcon: {fileID: 21300000, guid: 70cf66aa69e724240a7df41840286da7, type: 3} --- !u!64 &1972504751183773031 MeshCollider: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/7.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/7.prefab index c5761da68..367a23b1f 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/7.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/7.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &137341750476835440 +--- !u!1 &75307151265726440 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,51 +8,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7465132561304130764} - - component: {fileID: 1199041955781993739} - - component: {fileID: 7131376127323060736} + - component: {fileID: 7710682531392836083} + - component: {fileID: 3375272540579582322} + - component: {fileID: 950335951709314851} m_Layer: 11 - m_Name: Cube (5) + m_Name: Sphere (10) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7465132561304130764 +--- !u!4 &7710682531392836083 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 137341750476835440} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 75307151265726440} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.23820001, y: -0.014200002, z: -0.0050000027} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 4918477309057525437} - m_RootOrder: 5 + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1199041955781993739 -BoxCollider: +--- !u!135 &3375272540579582322 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 137341750476835440} + m_GameObject: {fileID: 75307151265726440} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7131376127323060736 +--- !u!114 &950335951709314851 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 137341750476835440} + m_GameObject: {fileID: 75307151265726440} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -65,7 +65,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 6 + portPosition: 11 deviceId: deviceName: portModel: @@ -78,7 +78,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &523355724718810314 +--- !u!1 &428945382353461514 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -86,51 +86,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2774768848874472355} - - component: {fileID: 1456159636831305066} - - component: {fileID: 3686549470548545088} + - component: {fileID: 3673792265480411605} + - component: {fileID: 2768249035578330408} + - component: {fileID: 3522920423391724752} m_Layer: 11 - m_Name: Cube (2) + m_Name: Sphere (10) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2774768848874472355 +--- !u!4 &3673792265480411605 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 523355724718810314} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 428945382353461514} + m_LocalRotation: {x: 0.5, y: -0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: -0.23820001, y: -0.014170006, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 2061279473399457161} - m_RootOrder: 2 + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1456159636831305066 -BoxCollider: +--- !u!135 &2768249035578330408 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 523355724718810314} + m_GameObject: {fileID: 428945382353461514} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3686549470548545088 +--- !u!114 &3522920423391724752 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 523355724718810314} + m_GameObject: {fileID: 428945382353461514} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -143,7 +143,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 3 + portPosition: 11 deviceId: deviceName: portModel: @@ -156,7 +156,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &603495967392134678 +--- !u!1 &453608678291890475 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -164,207 +164,207 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6288432761803761657} - - component: {fileID: 1336606064007699720} - - component: {fileID: 6146807438471568280} + - component: {fileID: 917844445467896906} + - component: {fileID: 4249090705686183811} + - component: {fileID: 8357894852229718280} m_Layer: 11 - m_Name: Cube (2) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6288432761803761657 +--- !u!4 &917844445467896906 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 603495967392134678} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1067766508646708926} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1336606064007699720 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 603495967392134678} - 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!114 &6146807438471568280 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 603495967392134678} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &904740548418939840 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7679911531819471025} - - component: {fileID: 5587148782182724934} - - component: {fileID: 8077032187510788219} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7679911531819471025 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 904740548418939840} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4918477309057525437} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5587148782182724934 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 904740548418939840} - 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!114 &8077032187510788219 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 904740548418939840} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1074457208656554889 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2112622662884511933} - - component: {fileID: 4131636546874068391} - - component: {fileID: 563322614164369594} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2112622662884511933 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1074457208656554889} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 453608678291890475} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.023500003, y: -0.014200002, z: -0.0041999966} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 5907112110899247929} - m_RootOrder: 2 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4131636546874068391 -BoxCollider: +--- !u!135 &4249090705686183811 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1074457208656554889} + m_GameObject: {fileID: 453608678291890475} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &563322614164369594 +--- !u!114 &8357894852229718280 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1074457208656554889} + m_GameObject: {fileID: 453608678291890475} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &632875056251356769 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4674455754843335199} + - component: {fileID: 2206052734398939944} + - component: {fileID: 798927493170693658} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4674455754843335199 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 632875056251356769} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.20284998, y: -0.014200002, z: -0.0041999966} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5907112110899247929} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2206052734398939944 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 632875056251356769} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &798927493170693658 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 632875056251356769} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &768783501262751800 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6049470209363633035} + - component: {fileID: 7621357417883948089} + - component: {fileID: 4367168843234553692} + m_Layer: 11 + m_Name: Sphere (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6049470209363633035 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 768783501262751800} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.1133, y: -0.014200002, z: -0.0050000027} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4918477309057525437} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7621357417883948089 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 768783501262751800} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4367168843234553692 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 768783501262751800} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -390,6 +390,84 @@ MonoBehaviour: remark: createTime: createName: +--- !u!1 &998558839988667063 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9087928285014896747} + - component: {fileID: 804450728940968681} + - component: {fileID: 1180331120628762196} + m_Layer: 11 + m_Name: Sphere (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9087928285014896747 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 998558839988667063} + m_LocalRotation: {x: 0.5, y: -0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: -0.066099994, y: -0.014170006, z: -0.005036004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2061279473399457161} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &804450728940968681 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 998558839988667063} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1180331120628762196 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 998558839988667063} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: --- !u!1 &1167457869899439780 GameObject: m_ObjectHideFlags: 0 @@ -421,7 +499,7 @@ Transform: m_Father: {fileID: 8841467529091483321} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1631080838942460481 +--- !u!1 &1737069474073995957 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -429,129 +507,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6958379877413912090} - - component: {fileID: 4501458455792835514} - - component: {fileID: 6231299795831311734} + - component: {fileID: 6065867465739378959} + - component: {fileID: 284583240571137870} + - component: {fileID: 7239536297320462658} m_Layer: 11 - m_Name: Cube (6) + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6958379877413912090 +--- !u!4 &6065867465739378959 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1631080838942460481} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 1737069474073995957} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.1918, y: -0.014200002, z: -0.004200004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 5907112110899247929} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4501458455792835514 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1631080838942460481} - 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!114 &6231299795831311734 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1631080838942460481} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1648910895322958712 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4039350274498827192} - - component: {fileID: 5143823312783772536} - - component: {fileID: 1701546651950371353} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4039350274498827192 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1648910895322958712} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1067766508646708926} m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5143823312783772536 -BoxCollider: +--- !u!135 &284583240571137870 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1648910895322958712} + m_GameObject: {fileID: 1737069474073995957} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1701546651950371353 +--- !u!114 &7239536297320462658 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1648910895322958712} + m_GameObject: {fileID: 1737069474073995957} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -577,7 +577,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2024760770302048520 +--- !u!1 &2102814191013794620 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -585,285 +585,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8280813169883292233} - - component: {fileID: 2204663062718734358} - - component: {fileID: 6729165109953597095} + - component: {fileID: 3649605259791915252} + - component: {fileID: 3575748138537926407} + - component: {fileID: 1634370920039063318} m_Layer: 11 - m_Name: Cube + m_Name: Sphere (8) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8280813169883292233 +--- !u!4 &3649605259791915252 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2024760770302048520} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4918477309057525437} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2204663062718734358 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2024760770302048520} - 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!114 &6729165109953597095 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2024760770302048520} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2096854452654497544 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 919606568232672589} - - component: {fileID: 8853250314299975334} - - component: {fileID: 1499735469583861567} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &919606568232672589 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2096854452654497544} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4918477309057525437} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8853250314299975334 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2096854452654497544} - 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!114 &1499735469583861567 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2096854452654497544} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2568508374278926164 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4819963420901666708} - - component: {fileID: 4344840386503851510} - - component: {fileID: 380651286322788237} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4819963420901666708 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2568508374278926164} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 2102814191013794620} + m_LocalRotation: {x: 0.5, y: -0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: -0.14860001, y: -0.014170006, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 2061279473399457161} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4344840386503851510 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2568508374278926164} - 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!114 &380651286322788237 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2568508374278926164} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2688034890754186398 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5209527355906408078} - - component: {fileID: 4056811185604778327} - - component: {fileID: 758750186578848765} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5209527355906408078 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2688034890754186398} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1067766508646708926} m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4056811185604778327 -BoxCollider: +--- !u!135 &3575748138537926407 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2688034890754186398} + m_GameObject: {fileID: 2102814191013794620} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &758750186578848765 +--- !u!114 &1634370920039063318 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2688034890754186398} + m_GameObject: {fileID: 2102814191013794620} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -889,7 +655,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2695098209247099580 +--- !u!1 &2176351753497434796 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -897,51 +663,207 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6413657689864042288} - - component: {fileID: 1355191958794716220} - - component: {fileID: 5160217115225204799} + - component: {fileID: 7764818167569879659} + - component: {fileID: 3541911712149580681} + - component: {fileID: 5272109495763386641} m_Layer: 11 - m_Name: Cube (7) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6413657689864042288 +--- !u!4 &7764818167569879659 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2695098209247099580} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 2176351753497434796} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0235, y: -0.014200002, z: -0.005000014} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 5907112110899247929} - m_RootOrder: 7 + m_Father: {fileID: 4918477309057525437} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1355191958794716220 -BoxCollider: +--- !u!135 &3541911712149580681 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2695098209247099580} + m_GameObject: {fileID: 2176351753497434796} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5160217115225204799 +--- !u!114 &5272109495763386641 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2695098209247099580} + m_GameObject: {fileID: 2176351753497434796} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2182127694572817560 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8434767688668655184} + - component: {fileID: 1408531978055341421} + - component: {fileID: 8781512007770068492} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8434767688668655184 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2182127694572817560} + m_LocalRotation: {x: 0.5, y: -0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: 0.20284998, y: -0.014170006, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2061279473399457161} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1408531978055341421 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2182127694572817560} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8781512007770068492 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2182127694572817560} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2202220531332575544 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 222381598223425467} + - component: {fileID: 7269437068032467501} + - component: {fileID: 7862419962534778045} + m_Layer: 11 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &222381598223425467 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2202220531332575544} + m_LocalRotation: {x: 0.5, y: -0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: -0.109299995, y: -0.014170006, z: -0.005036004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2061279473399457161} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7269437068032467501 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2202220531332575544} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7862419962534778045 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2202220531332575544} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -967,7 +889,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2712161536573084688 +--- !u!1 &2261212921583074584 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -975,51 +897,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 9084221732265990193} - - component: {fileID: 2809519683849508276} - - component: {fileID: 3572977927365816006} + - component: {fileID: 366349774202114554} + - component: {fileID: 6222157442892012383} + - component: {fileID: 5039562668753790395} m_Layer: 11 - m_Name: Cube (4) + m_Name: Sphere (5) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &9084221732265990193 +--- !u!4 &366349774202114554 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2712161536573084688} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 2261212921583074584} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.019699998, y: -0.014200002, z: -0.004200004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 5907112110899247929} - m_RootOrder: 4 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2809519683849508276 -BoxCollider: +--- !u!135 &6222157442892012383 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2712161536573084688} + m_GameObject: {fileID: 2261212921583074584} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3572977927365816006 +--- !u!114 &5039562668753790395 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2712161536573084688} + m_GameObject: {fileID: 2261212921583074584} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1032,7 +954,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 5 + portPosition: 6 deviceId: deviceName: portModel: @@ -1045,7 +967,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2725547312534472656 +--- !u!1 &2272832078358804505 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1053,363 +975,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3738470469241757424} - - component: {fileID: 293856875180475387} - - component: {fileID: 5056826655393268173} + - component: {fileID: 5376568382107209650} + - component: {fileID: 4449479727810055714} + - component: {fileID: 3849094827554676353} m_Layer: 11 - m_Name: Cube (11) + m_Name: Sphere (3) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3738470469241757424 +--- !u!4 &5376568382107209650 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2725547312534472656} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1067766508646708926} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &293856875180475387 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2725547312534472656} - 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!114 &5056826655393268173 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2725547312534472656} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3003360071972097044 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1462278720572263026} - - component: {fileID: 8412559919560434088} - - component: {fileID: 1071309437036093657} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1462278720572263026 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3003360071972097044} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5907112110899247929} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8412559919560434088 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3003360071972097044} - 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!114 &1071309437036093657 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3003360071972097044} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3114203778366649390 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8254279535190566720} - - component: {fileID: 2137449515901617398} - - component: {fileID: 1275861189969785028} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8254279535190566720 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3114203778366649390} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 2272832078358804505} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0701, y: -0.014200002, z: -0.00500001} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 4918477309057525437} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2137449515901617398 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3114203778366649390} - 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!114 &1275861189969785028 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3114203778366649390} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3587904568402408479 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5526760463488761457} - - component: {fileID: 8366901409700627131} - - component: {fileID: 6612122112607763219} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5526760463488761457 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3587904568402408479} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5907112110899247929} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8366901409700627131 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3587904568402408479} - 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!114 &6612122112607763219 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3587904568402408479} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3695511344141645049 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8591461048204997} - - component: {fileID: 564726422350171492} - - component: {fileID: 579365071692572047} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8591461048204997 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3695511344141645049} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2061279473399457161} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &564726422350171492 -BoxCollider: +--- !u!135 &4449479727810055714 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3695511344141645049} + m_GameObject: {fileID: 2272832078358804505} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &579365071692572047 +--- !u!114 &3849094827554676353 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3695511344141645049} + m_GameObject: {fileID: 2272832078358804505} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1435,7 +1045,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3711676157821232477 +--- !u!1 &2747858683397167810 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1443,51 +1053,129 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3827675443125176655} - - component: {fileID: 2470082811222970441} - - component: {fileID: 814824699714088579} + - component: {fileID: 7702710672534816657} + - component: {fileID: 243044232964877270} + - component: {fileID: 7319374529238257760} m_Layer: 11 - m_Name: Cube (8) + m_Name: Sphere (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3827675443125176655 +--- !u!4 &7702710672534816657 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3711676157821232477} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 2747858683397167810} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.15959999, y: -0.014200002, z: -0.0041999966} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2061279473399457161} - m_RootOrder: 8 + m_Father: {fileID: 5907112110899247929} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2470082811222970441 -BoxCollider: +--- !u!135 &243044232964877270 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3711676157821232477} + m_GameObject: {fileID: 2747858683397167810} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &814824699714088579 +--- !u!114 &7319374529238257760 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3711676157821232477} + m_GameObject: {fileID: 2747858683397167810} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2784601140384227957 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6633137694142961938} + - component: {fileID: 726553367418500423} + - component: {fileID: 7720766585302153801} + m_Layer: 11 + m_Name: Sphere (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6633137694142961938 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2784601140384227957} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.14860001, y: -0.014200002, z: -0.004200004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5907112110899247929} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &726553367418500423 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2784601140384227957} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7720766585302153801 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2784601140384227957} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1513,7 +1201,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3832683481410595872 +--- !u!1 &2812747625253057531 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1521,51 +1209,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5972696923440445628} - - component: {fileID: 2696172511615462231} - - component: {fileID: 2004977045900331637} + - component: {fileID: 4636255249488492961} + - component: {fileID: 6910065619760125691} + - component: {fileID: 6545205734947935634} m_Layer: 11 - m_Name: Cube + m_Name: Sphere (5) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5972696923440445628 +--- !u!4 &4636255249488492961 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3832683481410595872} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 2812747625253057531} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.019699998, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 1067766508646708926} - m_RootOrder: 0 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2696172511615462231 -BoxCollider: +--- !u!135 &6910065619760125691 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3832683481410595872} + m_GameObject: {fileID: 2812747625253057531} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2004977045900331637 +--- !u!114 &6545205734947935634 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3832683481410595872} + m_GameObject: {fileID: 2812747625253057531} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1578,7 +1266,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 1 + portPosition: 6 deviceId: deviceName: portModel: @@ -1591,7 +1279,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &4093151936184408087 +--- !u!1 &2826594836561469016 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1599,51 +1287,129 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7803512090640278806} - - component: {fileID: 2227771337293962299} - - component: {fileID: 5391816788447924351} + - component: {fileID: 2768998409358479446} + - component: {fileID: 3519273209818183236} + - component: {fileID: 3911770630644132147} m_Layer: 11 - m_Name: Cube (4) + m_Name: Sphere (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7803512090640278806 +--- !u!4 &2768998409358479446 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4093151936184408087} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 2826594836561469016} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.1133, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1067766508646708926} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3519273209818183236 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2826594836561469016} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3911770630644132147 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2826594836561469016} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3027576074206368607 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7246613589125507759} + - component: {fileID: 12440517175387623} + - component: {fileID: 8719994942108465170} + m_Layer: 11 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7246613589125507759 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3027576074206368607} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.10930001, y: -0.014200002, z: -0.00500001} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 4918477309057525437} - m_RootOrder: 4 + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2227771337293962299 -BoxCollider: +--- !u!135 &12440517175387623 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4093151936184408087} + m_GameObject: {fileID: 3027576074206368607} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5391816788447924351 +--- !u!114 &8719994942108465170 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4093151936184408087} + m_GameObject: {fileID: 3027576074206368607} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1656,7 +1422,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 5 + portPosition: 8 deviceId: deviceName: portModel: @@ -1669,7 +1435,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &4097681750224807756 +--- !u!1 &3054768689640381190 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1677,207 +1443,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5203585505389374025} - - component: {fileID: 5455018739547885298} - - component: {fileID: 2368909828405494828} + - component: {fileID: 5616531635124042824} + - component: {fileID: 7568313094811962354} + - component: {fileID: 3256355108409108696} m_Layer: 11 - m_Name: Cube (8) + m_Name: Sphere (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5203585505389374025 +--- !u!4 &5616531635124042824 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4097681750224807756} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 3054768689640381190} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.06610001, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 4918477309057525437} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5455018739547885298 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4097681750224807756} - 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!114 &2368909828405494828 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4097681750224807756} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4102404155035655505 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9189794102418805137} - - component: {fileID: 4569142487265426016} - - component: {fileID: 6933576639732373779} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9189794102418805137 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4102404155035655505} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4918477309057525437} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4569142487265426016 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4102404155035655505} - 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!114 &6933576639732373779 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4102404155035655505} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4210365256090721266 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5226682236814690864} - - component: {fileID: 1114584469946896919} - - component: {fileID: 2294943259789809110} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5226682236814690864 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4210365256090721266} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2061279473399457161} + m_Father: {fileID: 1067766508646708926} m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1114584469946896919 -BoxCollider: +--- !u!135 &7568313094811962354 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4210365256090721266} + m_GameObject: {fileID: 3054768689640381190} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2294943259789809110 +--- !u!114 &3256355108409108696 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4210365256090721266} + m_GameObject: {fileID: 3054768689640381190} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1903,7 +1513,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &4409662465334877630 +--- !u!1 &3413184088536115116 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1911,51 +1521,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4117083344675796657} - - component: {fileID: 3067490257738638217} - - component: {fileID: 2902372875645416748} + - component: {fileID: 2881840414029123463} + - component: {fileID: 9030357258142182473} + - component: {fileID: 2552974541120922124} m_Layer: 11 - m_Name: Cube (3) + m_Name: Sphere (3) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4117083344675796657 +--- !u!4 &2881840414029123463 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4409662465334877630} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 3413184088536115116} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0701, y: -0.014200002, z: -0.0042000115} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1067766508646708926} + m_Father: {fileID: 5907112110899247929} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3067490257738638217 -BoxCollider: +--- !u!135 &9030357258142182473 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4409662465334877630} + m_GameObject: {fileID: 3413184088536115116} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2902372875645416748 +--- !u!114 &2552974541120922124 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4409662465334877630} + m_GameObject: {fileID: 3413184088536115116} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1981,6 +1591,474 @@ MonoBehaviour: remark: createTime: createName: +--- !u!1 &3544643088093500197 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3700078714890780925} + - component: {fileID: 1848167672043871060} + - component: {fileID: 3395735965460808749} + m_Layer: 11 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3700078714890780925 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3544643088093500197} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.019699998, y: -0.014200002, z: -0.00500001} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4918477309057525437} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1848167672043871060 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3544643088093500197} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3395735965460808749 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3544643088093500197} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3768067309140841584 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3114751059957956579} + - component: {fileID: 5855551121536266145} + - component: {fileID: 5000376102461738756} + m_Layer: 11 + m_Name: Sphere (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3114751059957956579 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3768067309140841584} + m_LocalRotation: {x: 0.5, y: -0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: 0.1133, y: -0.014170006, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2061279473399457161} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &5855551121536266145 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3768067309140841584} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5000376102461738756 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3768067309140841584} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3888975447582578163 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4524322904760163279} + - component: {fileID: 4495876138854051146} + - component: {fileID: 8071842341551612571} + m_Layer: 11 + m_Name: Sphere (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4524322904760163279 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3888975447582578163} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.1133, y: -0.014200002, z: -0.0041999966} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5907112110899247929} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &4495876138854051146 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3888975447582578163} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8071842341551612571 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3888975447582578163} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3996702862403351196 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5889057799542352685} + - component: {fileID: 8338883879888124588} + - component: {fileID: 6569411203164588821} + m_Layer: 11 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5889057799542352685 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3996702862403351196} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.15959999, y: -0.014200002, z: -0.0050000027} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4918477309057525437} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &8338883879888124588 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3996702862403351196} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6569411203164588821 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3996702862403351196} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4016110913774554296 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4969973630352047749} + - component: {fileID: 3140608594149346047} + - component: {fileID: 3242742949043767842} + m_Layer: 11 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4969973630352047749 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4016110913774554296} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0701, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1067766508646708926} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3140608594149346047 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4016110913774554296} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3242742949043767842 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4016110913774554296} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4028459164446864214 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 662267781985325121} + - component: {fileID: 906624104367132648} + - component: {fileID: 8947642988904179912} + m_Layer: 11 + m_Name: Sphere (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &662267781985325121 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4028459164446864214} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.066099994, y: -0.014200002, z: -0.004200004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5907112110899247929} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &906624104367132648 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4028459164446864214} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8947642988904179912 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4028459164446864214} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: --- !u!1 &4625214023556199781 GameObject: m_ObjectHideFlags: 0 @@ -2070,7 +2148,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &4657826566347069931 +--- !u!1 &4980047506494392590 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2078,519 +2156,129 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8965936971790145554} - - component: {fileID: 6788371611754576836} - - component: {fileID: 3889830650147670419} + - component: {fileID: 5104583465346387948} + - component: {fileID: 8933181963767396830} + - component: {fileID: 4453067006643482059} m_Layer: 11 - m_Name: Cube (5) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8965936971790145554 +--- !u!4 &5104583465346387948 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4657826566347069931} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5907112110899247929} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6788371611754576836 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4657826566347069931} - 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!114 &3889830650147670419 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4657826566347069931} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4754615622606839409 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3130513697472439168} - - component: {fileID: 2505509984821807450} - - component: {fileID: 5484591743044479978} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3130513697472439168 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4754615622606839409} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5907112110899247929} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2505509984821807450 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4754615622606839409} - 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!114 &5484591743044479978 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4754615622606839409} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5124953795426527556 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4692762351705761245} - - component: {fileID: 8922969469777561960} - - component: {fileID: 3006049506227986324} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4692762351705761245 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5124953795426527556} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1067766508646708926} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8922969469777561960 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5124953795426527556} - 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!114 &3006049506227986324 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5124953795426527556} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5297484532216717621 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7677443020409710492} - - component: {fileID: 9157599540357896310} - - component: {fileID: 7051274992429627636} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7677443020409710492 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5297484532216717621} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1067766508646708926} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9157599540357896310 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5297484532216717621} - 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!114 &7051274992429627636 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5297484532216717621} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5300462978998194771 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6106715900455331783} - - component: {fileID: 2048446921496362784} - - component: {fileID: 967310898647371517} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6106715900455331783 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5300462978998194771} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4918477309057525437} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2048446921496362784 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5300462978998194771} - 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!114 &967310898647371517 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5300462978998194771} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5640393722504890248 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3288016141465693254} - - component: {fileID: 8067831627102998340} - - component: {fileID: 2059690743237948466} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3288016141465693254 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5640393722504890248} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4918477309057525437} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8067831627102998340 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5640393722504890248} - 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!114 &2059690743237948466 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5640393722504890248} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5670394774115124141 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7017076977129893095} - - component: {fileID: 8681242207919060776} - - component: {fileID: 811181717747701193} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7017076977129893095 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5670394774115124141} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 4980047506494392590} + m_LocalRotation: {x: 0.5, y: -0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: 0.0235, y: -0.014170006, z: -0.005036004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 2061279473399457161} - m_RootOrder: 9 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8681242207919060776 -BoxCollider: +--- !u!135 &8933181963767396830 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5670394774115124141} + m_GameObject: {fileID: 4980047506494392590} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &811181717747701193 +--- !u!114 &4453067006643482059 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5670394774115124141} + m_GameObject: {fileID: 4980047506494392590} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5054905226092809249 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2757894946460898768} + - component: {fileID: 503842167058746191} + - component: {fileID: 2863605089882783269} + m_Layer: 11 + m_Name: Sphere (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2757894946460898768 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5054905226092809249} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.1918, y: -0.014200002, z: -0.0050000027} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4918477309057525437} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &503842167058746191 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5054905226092809249} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2863605089882783269 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5054905226092809249} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2616,7 +2304,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &5803088312338823179 +--- !u!1 &5222378419970021101 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2624,51 +2312,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3688572060793558416} - - component: {fileID: 1914229570112282548} - - component: {fileID: 4803092451514093976} + - component: {fileID: 8792380910286470342} + - component: {fileID: 8900403104386637642} + - component: {fileID: 2920994465098101563} m_Layer: 11 - m_Name: Cube (1) + m_Name: Sphere (7) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3688572060793558416 +--- !u!4 &8792380910286470342 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5803088312338823179} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 5222378419970021101} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.109299995, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2061279473399457161} - m_RootOrder: 1 + m_Father: {fileID: 1067766508646708926} + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1914229570112282548 -BoxCollider: +--- !u!135 &8900403104386637642 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5803088312338823179} + m_GameObject: {fileID: 5222378419970021101} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4803092451514093976 +--- !u!114 &2920994465098101563 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5803088312338823179} + m_GameObject: {fileID: 5222378419970021101} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2681,7 +2369,241 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 2 + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5662514108033621869 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4429361949263796255} + - component: {fileID: 7720789421574221481} + - component: {fileID: 195352705939771080} + m_Layer: 11 + m_Name: Sphere (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4429361949263796255 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5662514108033621869} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.14860001, y: -0.014200002, z: -0.00500001} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4918477309057525437} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7720789421574221481 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5662514108033621869} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &195352705939771080 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5662514108033621869} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 9 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5680241897575150334 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4331740750505187936} + - component: {fileID: 7851084768854232209} + - component: {fileID: 2578481480727905113} + m_Layer: 11 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4331740750505187936 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5680241897575150334} + m_LocalRotation: {x: 0.5, y: -0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: -0.019700002, y: -0.014170006, z: -0.005036004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2061279473399457161} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7851084768854232209 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5680241897575150334} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2578481480727905113 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5680241897575150334} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5864652130200902752 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1059764494718834625} + - component: {fileID: 2527283617435544879} + - component: {fileID: 9028100155211844910} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1059764494718834625 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5864652130200902752} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.20284998, y: -0.014200009, z: -0.005136095} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1067766508646708926} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2527283617435544879 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5864652130200902752} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &9028100155211844910 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5864652130200902752} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 deviceId: deviceName: portModel: @@ -2728,18 +2650,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 6377943322125339553} - - {fileID: 7570151564049028349} - - {fileID: 2112622662884511933} - - {fileID: 3130513697472439168} - - {fileID: 9084221732265990193} - - {fileID: 8965936971790145554} - - {fileID: 6958379877413912090} - - {fileID: 6413657689864042288} - - {fileID: 1462278720572263026} - - {fileID: 3584210318307000102} - - {fileID: 5526760463488761457} - - {fileID: 1895592811790700236} + - {fileID: 4674455754843335199} + - {fileID: 7702710672534816657} + - {fileID: 4524322904760163279} + - {fileID: 2881840414029123463} + - {fileID: 917844445467896906} + - {fileID: 366349774202114554} + - {fileID: 662267781985325121} + - {fileID: 4901610629453118280} + - {fileID: 6633137694142961938} + - {fileID: 6065867465739378959} + - {fileID: 9066814660274462535} + - {fileID: 7792477081653192783} m_Father: {fileID: 8841467529091483321} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -2895,10 +2817,10 @@ MeshCollider: m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 4 - m_Convex: 1 + m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 9186633843763367028, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} ---- !u!1 &6039577910628937732 +--- !u!1 &6026347282858027285 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2906,129 +2828,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3584210318307000102} - - component: {fileID: 3018814056040242976} - - component: {fileID: 8828567899762423976} + - component: {fileID: 7792477081653192783} + - component: {fileID: 1165392308751949942} + - component: {fileID: 5793669428462584769} m_Layer: 11 - m_Name: Cube (9) + m_Name: Sphere (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3584210318307000102 +--- !u!4 &7792477081653192783 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6039577910628937732} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 6026347282858027285} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2814, y: -0.014200002, z: -0.0041999966} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 5907112110899247929} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3018814056040242976 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6039577910628937732} - 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!114 &8828567899762423976 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6039577910628937732} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6476370534357301605 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2464212165139533393} - - component: {fileID: 5032129479941389756} - - component: {fileID: 8002288785787030749} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2464212165139533393 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6476370534357301605} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4918477309057525437} m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5032129479941389756 -BoxCollider: +--- !u!135 &1165392308751949942 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6476370534357301605} + m_GameObject: {fileID: 6026347282858027285} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8002288785787030749 +--- !u!114 &5793669428462584769 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6476370534357301605} + m_GameObject: {fileID: 6026347282858027285} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3054,7 +2898,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6552323985220600411 +--- !u!1 &6093654245274602729 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3062,51 +2906,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8578412286986033496} - - component: {fileID: 8891138018823881133} - - component: {fileID: 3888601693131620791} + - component: {fileID: 7969696664466818510} + - component: {fileID: 6348221163410820066} + - component: {fileID: 7955177419522767293} m_Layer: 11 - m_Name: Cube (10) + m_Name: Sphere (10) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8578412286986033496 +--- !u!4 &7969696664466818510 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6552323985220600411} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 6093654245274602729} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.23820001, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2061279473399457161} + m_Father: {fileID: 1067766508646708926} m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8891138018823881133 -BoxCollider: +--- !u!135 &6348221163410820066 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6552323985220600411} + m_GameObject: {fileID: 6093654245274602729} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3888601693131620791 +--- !u!114 &7955177419522767293 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6552323985220600411} + m_GameObject: {fileID: 6093654245274602729} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3132,7 +2976,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6562048133899258456 +--- !u!1 &6099358985237369589 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3140,51 +2984,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1958174906567818409} - - component: {fileID: 3086700139808703503} - - component: {fileID: 3978084049644733325} + - component: {fileID: 6765688519532712670} + - component: {fileID: 8051894098396655801} + - component: {fileID: 2224733709958240881} m_Layer: 11 - m_Name: Cube (5) + m_Name: Sphere m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1958174906567818409 +--- !u!4 &6765688519532712670 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6562048133899258456} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 6099358985237369589} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.20284998, y: -0.014200002, z: -0.0050000027} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1067766508646708926} - m_RootOrder: 5 + m_Father: {fileID: 4918477309057525437} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3086700139808703503 -BoxCollider: +--- !u!135 &8051894098396655801 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6562048133899258456} + m_GameObject: {fileID: 6099358985237369589} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3978084049644733325 +--- !u!114 &2224733709958240881 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6562048133899258456} + m_GameObject: {fileID: 6099358985237369589} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3197,7 +3041,85 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 6 + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6533058889754620161 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 832133945197843630} + - component: {fileID: 8190945557158131824} + - component: {fileID: 4700278826886797415} + m_Layer: 11 + m_Name: Sphere (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &832133945197843630 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6533058889754620161} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.14860001, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1067766508646708926} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &8190945557158131824 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6533058889754620161} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4700278826886797415 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6533058889754620161} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 9 deviceId: deviceName: portModel: @@ -3244,18 +3166,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 5972696923440445628} - - {fileID: 5960482636494425930} - - {fileID: 6288432761803761657} - - {fileID: 4117083344675796657} - - {fileID: 6886090832882736704} - - {fileID: 1958174906567818409} - - {fileID: 7677443020409710492} - - {fileID: 4692762351705761245} - - {fileID: 5209527355906408078} - - {fileID: 4039350274498827192} - - {fileID: 7274077574621365429} - - {fileID: 3738470469241757424} + - {fileID: 1059764494718834625} + - {fileID: 167624143027631970} + - {fileID: 2768998409358479446} + - {fileID: 4969973630352047749} + - {fileID: 3508943254033876405} + - {fileID: 4636255249488492961} + - {fileID: 5616531635124042824} + - {fileID: 8792380910286470342} + - {fileID: 832133945197843630} + - {fileID: 7233608916931143710} + - {fileID: 7969696664466818510} + - {fileID: 6648843404885211795} m_Father: {fileID: 8841467529091483321} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -3411,10 +3333,10 @@ MeshCollider: m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 4 - m_Convex: 1 + m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -2639241166356525208, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} ---- !u!1 &6773272201022227390 +--- !u!1 &6634943554442815481 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3422,51 +3344,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2450086908189374122} - - component: {fileID: 7704561542979140508} - - component: {fileID: 2728022427367797997} + - component: {fileID: 7233608916931143710} + - component: {fileID: 7277884878959508138} + - component: {fileID: 9128015494974904703} m_Layer: 11 - m_Name: Cube (11) + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2450086908189374122 +--- !u!4 &7233608916931143710 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6773272201022227390} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 6634943554442815481} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.1918, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2061279473399457161} - m_RootOrder: 11 + m_Father: {fileID: 1067766508646708926} + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7704561542979140508 -BoxCollider: +--- !u!135 &7277884878959508138 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6773272201022227390} + m_GameObject: {fileID: 6634943554442815481} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2728022427367797997 +--- !u!114 &9128015494974904703 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6773272201022227390} + m_GameObject: {fileID: 6634943554442815481} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3479,7 +3401,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 12 + portPosition: 10 deviceId: deviceName: portModel: @@ -3492,7 +3414,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7197674189282269820 +--- !u!1 &6952838834858807436 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3500,51 +3422,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1895592811790700236} - - component: {fileID: 1983058145501878525} - - component: {fileID: 1870352964256053803} + - component: {fileID: 3508943254033876405} + - component: {fileID: 3523050950541454801} + - component: {fileID: 8802664051373024983} m_Layer: 11 - m_Name: Cube (11) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1895592811790700236 +--- !u!4 &3508943254033876405 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7197674189282269820} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 6952838834858807436} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0235, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 5907112110899247929} - m_RootOrder: 11 + m_Father: {fileID: 1067766508646708926} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1983058145501878525 -BoxCollider: +--- !u!135 &3523050950541454801 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7197674189282269820} + m_GameObject: {fileID: 6952838834858807436} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1870352964256053803 +--- !u!114 &8802664051373024983 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7197674189282269820} + m_GameObject: {fileID: 6952838834858807436} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3557,7 +3479,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 12 + portPosition: 5 deviceId: deviceName: portModel: @@ -3604,18 +3526,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 8280813169883292233} - - {fileID: 7679911531819471025} - - {fileID: 919606568232672589} - - {fileID: 9189794102418805137} - - {fileID: 7803512090640278806} - - {fileID: 7465132561304130764} - - {fileID: 6106715900455331783} - - {fileID: 3288016141465693254} - - {fileID: 5203585505389374025} - - {fileID: 3512923381749433551} - - {fileID: 8254279535190566720} - - {fileID: 2464212165139533393} + - {fileID: 6765688519532712670} + - {fileID: 5889057799542352685} + - {fileID: 6049470209363633035} + - {fileID: 5376568382107209650} + - {fileID: 7764818167569879659} + - {fileID: 3700078714890780925} + - {fileID: 6840905805336790100} + - {fileID: 7246613589125507759} + - {fileID: 4429361949263796255} + - {fileID: 2757894946460898768} + - {fileID: 7710682531392836083} + - {fileID: 5090847630217591913} m_Father: {fileID: 8841467529091483321} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -3771,9 +3693,165 @@ MeshCollider: m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 4 - m_Convex: 1 + m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -8113768720884857512, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} +--- !u!1 &7284580011781525104 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4370634269627467736} + - component: {fileID: 3071196253301534943} + - component: {fileID: 1052261149806407561} + m_Layer: 11 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4370634269627467736 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7284580011781525104} + m_LocalRotation: {x: 0.5, y: -0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: 0.15959999, y: -0.014170006, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2061279473399457161} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3071196253301534943 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7284580011781525104} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1052261149806407561 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7284580011781525104} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7298957461459595751 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4901610629453118280} + - component: {fileID: 6940742543920180135} + - component: {fileID: 1111450470588188795} + m_Layer: 11 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4901610629453118280 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7298957461459595751} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.10930001, y: -0.014200002, z: -0.004200004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5907112110899247929} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6940742543920180135 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7298957461459595751} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1111450470588188795 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7298957461459595751} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: --- !u!1 &7337111109528621480 GameObject: m_ObjectHideFlags: 0 @@ -4019,7 +4097,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -7821917557700976381, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} ---- !u!1 &7352796782398001262 +--- !u!1 &7397049743042380881 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4027,51 +4105,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7274077574621365429} - - component: {fileID: 106313599621895021} - - component: {fileID: 4485603694842284849} + - component: {fileID: 6648843404885211795} + - component: {fileID: 5410240776593552327} + - component: {fileID: 6929753490106086670} m_Layer: 11 - m_Name: Cube (10) + m_Name: Sphere (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7274077574621365429 +--- !u!4 &6648843404885211795 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7352796782398001262} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 7397049743042380881} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2814, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 1067766508646708926} - m_RootOrder: 10 + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &106313599621895021 -BoxCollider: +--- !u!135 &5410240776593552327 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7352796782398001262} + m_GameObject: {fileID: 7397049743042380881} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4485603694842284849 +--- !u!114 &6929753490106086670 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7352796782398001262} + m_GameObject: {fileID: 7397049743042380881} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4084,7 +4162,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 11 + portPosition: 12 deviceId: deviceName: portModel: @@ -4097,7 +4175,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7470662137315054464 +--- !u!1 &7747459675926326366 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4105,51 +4183,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7570151564049028349} - - component: {fileID: 2587222505665796397} - - component: {fileID: 4834538114827620101} + - component: {fileID: 5195464732479359899} + - component: {fileID: 289375747182983647} + - component: {fileID: 6765766154784960954} m_Layer: 11 - m_Name: Cube (1) + m_Name: Sphere (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7570151564049028349 +--- !u!4 &5195464732479359899 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7470662137315054464} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 7747459675926326366} + m_LocalRotation: {x: 0.5, y: -0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: -0.2814, y: -0.014170006, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 5907112110899247929} - m_RootOrder: 1 + m_Father: {fileID: 2061279473399457161} + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2587222505665796397 -BoxCollider: +--- !u!135 &289375747182983647 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7470662137315054464} + m_GameObject: {fileID: 7747459675926326366} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4834538114827620101 +--- !u!114 &6765766154784960954 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7470662137315054464} + m_GameObject: {fileID: 7747459675926326366} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4162,7 +4240,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 2 + portPosition: 12 deviceId: deviceName: portModel: @@ -4175,7 +4253,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7753655211415903649 +--- !u!1 &7922782458259697909 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4183,51 +4261,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3512923381749433551} - - component: {fileID: 3488933733008603436} - - component: {fileID: 1178485462838966299} + - component: {fileID: 5090847630217591913} + - component: {fileID: 6371753542614909764} + - component: {fileID: 1842381298461337222} m_Layer: 11 - m_Name: Cube (9) + m_Name: Sphere (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3512923381749433551 +--- !u!4 &5090847630217591913 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7753655211415903649} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 7922782458259697909} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2814, y: -0.014200002, z: -0.0050000027} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 4918477309057525437} - m_RootOrder: 9 + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3488933733008603436 -BoxCollider: +--- !u!135 &6371753542614909764 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7753655211415903649} + m_GameObject: {fileID: 7922782458259697909} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1178485462838966299 +--- !u!114 &1842381298461337222 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7753655211415903649} + m_GameObject: {fileID: 7922782458259697909} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4240,7 +4318,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 10 + portPosition: 12 deviceId: deviceName: portModel: @@ -4287,18 +4365,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 1416405451004820472} - - {fileID: 3688572060793558416} - - {fileID: 2774768848874472355} - - {fileID: 8591461048204997} - - {fileID: 4819963420901666708} - - {fileID: 2674459270145512787} - - {fileID: 5226682236814690864} - - {fileID: 543546904632413294} - - {fileID: 3827675443125176655} - - {fileID: 7017076977129893095} - - {fileID: 8578412286986033496} - - {fileID: 2450086908189374122} + - {fileID: 8434767688668655184} + - {fileID: 4370634269627467736} + - {fileID: 3114751059957956579} + - {fileID: 5195266617962266891} + - {fileID: 5104583465346387948} + - {fileID: 4331740750505187936} + - {fileID: 9087928285014896747} + - {fileID: 222381598223425467} + - {fileID: 3649605259791915252} + - {fileID: 5170292752160313998} + - {fileID: 3673792265480411605} + - {fileID: 5195464732479359899} m_Father: {fileID: 8841467529091483321} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -4454,10 +4532,10 @@ MeshCollider: m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 4 - m_Convex: 1 + m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -3996760141626369306, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} ---- !u!1 &8090463081793956265 +--- !u!1 &8135400884385388369 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4465,51 +4543,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5960482636494425930} - - component: {fileID: 7880666216593402083} - - component: {fileID: 6270013217129739859} + - component: {fileID: 5195266617962266891} + - component: {fileID: 5908488119331009535} + - component: {fileID: 3449182576528743634} m_Layer: 11 - m_Name: Cube (1) + m_Name: Sphere (3) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5960482636494425930 +--- !u!4 &5195266617962266891 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8090463081793956265} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 8135400884385388369} + m_LocalRotation: {x: 0.5, y: -0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: 0.0701, y: -0.014170006, z: -0.005036004} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1067766508646708926} - m_RootOrder: 1 + m_Father: {fileID: 2061279473399457161} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7880666216593402083 -BoxCollider: +--- !u!135 &5908488119331009535 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8090463081793956265} + m_GameObject: {fileID: 8135400884385388369} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6270013217129739859 +--- !u!114 &3449182576528743634 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8090463081793956265} + m_GameObject: {fileID: 8135400884385388369} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4522,85 +4600,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8117623676765465747 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6377943322125339553} - - component: {fileID: 3978700328884284404} - - component: {fileID: 2419585028017681016} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6377943322125339553 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8117623676765465747} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5907112110899247929} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3978700328884284404 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8117623676765465747} - 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!114 &2419585028017681016 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8117623676765465747} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 + portPosition: 4 deviceId: deviceName: portModel: @@ -4645,7 +4645,7 @@ Transform: m_Father: {fileID: 8841467529091483321} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &8703430389037438874 +--- !u!1 &8631411858981271248 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4653,51 +4653,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2674459270145512787} - - component: {fileID: 7986189706291170581} - - component: {fileID: 8829258465108220270} + - component: {fileID: 6840905805336790100} + - component: {fileID: 4924633138473609897} + - component: {fileID: 2279754281946112732} m_Layer: 11 - m_Name: Cube (5) + m_Name: Sphere (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2674459270145512787 +--- !u!4 &6840905805336790100 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8703430389037438874} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 8631411858981271248} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.0661, y: -0.014200002, z: -0.00500001} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2061279473399457161} - m_RootOrder: 5 + m_Father: {fileID: 4918477309057525437} + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7986189706291170581 -BoxCollider: +--- !u!135 &4924633138473609897 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8703430389037438874} + m_GameObject: {fileID: 8631411858981271248} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8829258465108220270 +--- !u!114 &2279754281946112732 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8703430389037438874} + m_GameObject: {fileID: 8631411858981271248} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4710,7 +4710,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 6 + portPosition: 7 deviceId: deviceName: portModel: @@ -4723,7 +4723,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &8770964453383297585 +--- !u!1 &8707854909752073750 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4731,51 +4731,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1416405451004820472} - - component: {fileID: 8242301222568304078} - - component: {fileID: 2204772357812010684} + - component: {fileID: 5170292752160313998} + - component: {fileID: 8120967878768983319} + - component: {fileID: 4779706592175402905} m_Layer: 11 - m_Name: Cube + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1416405451004820472 +--- !u!4 &5170292752160313998 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8770964453383297585} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 8707854909752073750} + m_LocalRotation: {x: 0.5, y: -0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: -0.1918, y: -0.014170006, z: -0.0050359964} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 2061279473399457161} - m_RootOrder: 0 + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8242301222568304078 -BoxCollider: +--- !u!135 &8120967878768983319 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8770964453383297585} + m_GameObject: {fileID: 8707854909752073750} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2204772357812010684 +--- !u!114 &4779706592175402905 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8770964453383297585} + m_GameObject: {fileID: 8707854909752073750} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4788,7 +4788,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 1 + portPosition: 10 deviceId: deviceName: portModel: @@ -4801,7 +4801,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &8785156202755010222 +--- !u!1 &8792171333118301363 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4809,51 +4809,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 543546904632413294} - - component: {fileID: 1349228072020127300} - - component: {fileID: 3880122518522444701} + - component: {fileID: 9066814660274462535} + - component: {fileID: 7197807138968505262} + - component: {fileID: 1933347442929197536} m_Layer: 11 - m_Name: Cube (7) + m_Name: Sphere (10) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &543546904632413294 +--- !u!4 &9066814660274462535 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8785156202755010222} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 8792171333118301363} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.23820001, y: -0.014200002, z: -0.0041999966} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2061279473399457161} - m_RootOrder: 7 + m_Father: {fileID: 5907112110899247929} + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1349228072020127300 -BoxCollider: +--- !u!135 &7197807138968505262 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8785156202755010222} + m_GameObject: {fileID: 8792171333118301363} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3880122518522444701 +--- !u!114 &1933347442929197536 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8785156202755010222} + m_GameObject: {fileID: 8792171333118301363} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4866,7 +4866,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 8 + portPosition: 11 deviceId: deviceName: portModel: @@ -4879,7 +4879,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &8993023446050493693 +--- !u!1 &9187715963581229193 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4887,51 +4887,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6886090832882736704} - - component: {fileID: 7742779596443163137} - - component: {fileID: 6534093486703303880} + - component: {fileID: 167624143027631970} + - component: {fileID: 1313345858853211582} + - component: {fileID: 6253035046205547678} m_Layer: 11 - m_Name: Cube (4) + m_Name: Sphere (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6886090832882736704 +--- !u!4 &167624143027631970 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8993023446050493693} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 9187715963581229193} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.15959999, y: -0.014200009, z: -0.00513611} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 1067766508646708926} - m_RootOrder: 4 + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7742779596443163137 -BoxCollider: +--- !u!135 &1313345858853211582 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8993023446050493693} + m_GameObject: {fileID: 9187715963581229193} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6534093486703303880 +--- !u!114 &6253035046205547678 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8993023446050493693} + m_GameObject: {fileID: 9187715963581229193} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4944,7 +4944,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 5 + portPosition: 2 deviceId: deviceName: portModel: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/72.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/72.prefab index 3a865ddf0..d07787102 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/72.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/72.prefab @@ -436,7 +436,7 @@ GameObject: - component: {fileID: 2733104584962140630} - component: {fileID: 6573983349457692309} - component: {fileID: 663811459835049781} - m_Layer: 8 + m_Layer: 13 m_Name: Box015 m_TagString: Untagged m_Icon: {fileID: 0} @@ -802,7 +802,7 @@ MonoBehaviour: frames: [] PerTier: 42 PerRow: 5 - volume: 1 + volume: 2 isExit: 0 isClicked: 0 isTarget: 0 @@ -856,7 +856,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} m_Name: m_EditorClassIdentifier: - volume: 1 + volume: 2 selfIcon: {fileID: 21300000, guid: 4f9cb685f05acab45b2b13beccf4469b, type: 3} --- !u!64 &7646879837071494674 MeshCollider: @@ -1738,7 +1738,7 @@ GameObject: - component: {fileID: 892326304599442341} - component: {fileID: 5154491836212176704} - component: {fileID: 1962800850326407990} - m_Layer: 8 + m_Layer: 13 m_Name: Box007 m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/73.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/73.prefab index 6d2a5b499..e6aaccc6d 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/73.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/73.prefab @@ -904,7 +904,7 @@ GameObject: - component: {fileID: 6225021080359115652} - component: {fileID: 2842002048584156253} - component: {fileID: 8924673035015560457} - m_Layer: 8 + m_Layer: 13 m_Name: Box015 m_TagString: Untagged m_Icon: {fileID: 0} @@ -2158,7 +2158,7 @@ GameObject: - component: {fileID: 2674548660922348156} - component: {fileID: 3112645685161313096} - component: {fileID: 2410977731536094265} - m_Layer: 8 + m_Layer: 13 m_Name: Box007 m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/77-old.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/77-old.prefab new file mode 100644 index 000000000..05b494e51 --- /dev/null +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/77-old.prefab @@ -0,0 +1,272 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3614450309944614080 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2334673183058407874} + m_Layer: 8 + m_Name: "\u951A\u70B9" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2334673183058407874 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3614450309944614080} + m_LocalRotation: {x: 0.7071068, y: -0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: -0.3, z: -0.045000106} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7641658471917526084} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7009658515745654526 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7641658471917526084} + - component: {fileID: 6747311922601825249} + - component: {fileID: 8811208249968715563} + - component: {fileID: 4558146309861723245} + - component: {fileID: 5701413977545714045} + - component: {fileID: 3493747612824572614} + - component: {fileID: -605326495328156875} + - component: {fileID: 1394052508262966079} + - component: {fileID: 2363846252458284975} + m_Layer: 8 + m_Name: 77-old + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7641658471917526084 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7009658515745654526} + m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0, y: 0, z: -0.0000000013300747} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2334673183058407874} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} +--- !u!33 &6747311922601825249 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7009658515745654526} + m_Mesh: {fileID: -8752412803172520849, guid: 57cab604cd08b3c41bcfcb710ae06b1c, type: 3} +--- !u!23 &8811208249968715563 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7009658515745654526} + 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: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: aa93fad006955254e966a521f35c57dd, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, 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!114 &4558146309861723245 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7009658515745654526} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} + m_Name: + m_EditorClassIdentifier: + deviceList: + id: + deviceName: + deviceCode: + type: 2 + typeStr: + deviceType: 1 + deviceTypeStr: + rackId: + shelfId: + slotId: + devicePosition: + machineModel: + status: + conDeviceName: + rackType: + openFlag: + backDoorFlag: + modelNum: 77 + occupyNum: 1 + residueNum: + operationTime: + directorName: + phone: + manufacturer: + powerProperties: + maintenanceUnit: + machineFrameHigh: + machineFrameWide: + machineFrameThick: + slotNum: + slotSort: + installMethod: + affiliationFrame: + parentSlotName: + slotType: + occupyStatus: + affiliationSlot: + portNum: + cardFunction: + cardType: + runStatus: + tmsId: + remark: + createTime: + createName: +--- !u!114 &5701413977545714045 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7009658515745654526} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} + m_Name: + m_EditorClassIdentifier: + listTargets: [] + frames: [] + PerTier: 42 + PerRow: 5 + volume: 1 + isExit: 0 + isClicked: 0 + isTarget: 0 + isplace: 0 + canPut: 0 +--- !u!114 &3493747612824572614 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7009658515745654526} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!114 &-605326495328156875 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7009658515745654526} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + meshRenderers: [] + materials: [] + empty: [] + TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, + type: 3} + TransparentGlow_Shader_half: {fileID: 0} + original_jigui: [] + original_shebei: [] + search_u_wei: 0 + is_jigui: 0 +--- !u!114 &1394052508262966079 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7009658515745654526} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} + m_Name: + m_EditorClassIdentifier: + volume: 1 + selfIcon: {fileID: 21300000, guid: 4bac7e613615134418258783d4f8aa7b, type: 3} +--- !u!64 &2363846252458284975 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7009658515745654526} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: -8752412803172520849, guid: 57cab604cd08b3c41bcfcb710ae06b1c, type: 3} diff --git a/GQ_URP/GQ/Assets/Model/4.prefab.meta b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/77-old.prefab.meta similarity index 74% rename from GQ_URP/GQ/Assets/Model/4.prefab.meta rename to GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/77-old.prefab.meta index 99777cc28..d18e9cca9 100644 --- a/GQ_URP/GQ/Assets/Model/4.prefab.meta +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/77-old.prefab.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 21757a25ef708b74a97ee195305e7f32 +guid: 8c4a8588f34156348a469632f7ee42c6 PrefabImporter: externalObjects: {} userData: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/77.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/77.prefab index 2e6c7fca9..1671f494a 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/77.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/77.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &3614450309944614080 +--- !u!1 &184425182240417286 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,84 +8,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2334673183058407874} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2334673183058407874 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3614450309944614080} - m_LocalRotation: {x: 0.7071068, y: -0, z: 0, w: 0.7071068} - m_LocalPosition: {x: 0, y: -0.3, z: -0.045000106} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7641658471917526084} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &7009658515745654526 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7641658471917526084} - - component: {fileID: 6747311922601825249} - - component: {fileID: 8811208249968715563} - - component: {fileID: 4558146309861723245} - - component: {fileID: 5701413977545714045} - - component: {fileID: 3493747612824572614} - - component: {fileID: -605326495328156875} - - component: {fileID: 1394052508262966079} - - component: {fileID: 2363846252458284975} - m_Layer: 8 + - component: {fileID: 6334256280519330925} + - component: {fileID: 4231031871807284640} + - component: {fileID: 1708643090458024117} + - component: {fileID: 4608301542671125679} + - component: {fileID: 1506402475277420302} + - component: {fileID: 5454825503488649801} + - component: {fileID: 6191187131497867296} + - component: {fileID: 2194092315612837427} + m_Layer: 13 m_Name: 77 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7641658471917526084 +--- !u!4 &6334256280519330925 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7009658515745654526} - m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} - m_LocalPosition: {x: -0, y: 0, z: -0.0000000013300747} + m_GameObject: {fileID: 184425182240417286} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.19368656, z: 0.0051158983} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2334673183058407874} - m_Father: {fileID: 0} + m_Children: [] + m_Father: {fileID: 7691252733872402878} m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} ---- !u!33 &6747311922601825249 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4231031871807284640 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7009658515745654526} + m_GameObject: {fileID: 184425182240417286} m_Mesh: {fileID: -8752412803172520849, guid: 57cab604cd08b3c41bcfcb710ae06b1c, type: 3} ---- !u!23 &8811208249968715563 +--- !u!23 &1708643090458024117 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7009658515745654526} + m_GameObject: {fileID: 184425182240417286} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -126,13 +93,233 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &4558146309861723245 +--- !u!114 &4608301542671125679 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7009658515745654526} + m_GameObject: {fileID: 184425182240417286} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} + m_Name: + m_EditorClassIdentifier: + deviceList: + id: + deviceName: + deviceCode: + type: 2 + typeStr: + deviceType: 3 + deviceTypeStr: + rackId: + shelfId: + slotId: + devicePosition: 1 + machineModel: + status: + conDeviceName: + rackType: + openFlag: + backDoorFlag: + modelNum: + occupyNum: 1 + residueNum: + operationTime: + directorName: + phone: + manufacturer: + powerProperties: + maintenanceUnit: + machineFrameHigh: + machineFrameWide: + machineFrameThick: + slotNum: + slotSort: + installMethod: + affiliationFrame: + parentSlotName: + slotType: + occupyStatus: + affiliationSlot: + portNum: + cardFunction: + cardType: + runStatus: + tmsId: + remark: + createTime: + createName: +--- !u!114 &1506402475277420302 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 184425182240417286} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!114 &5454825503488649801 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 184425182240417286} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + meshRenderers: [] + materials: [] + empty: [] + TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, + type: 3} + TransparentGlow_Shader_half: {fileID: 0} + original_jigui: [] + original_shebei: [] + search_u_wei: 0 + is_jigui: 0 +--- !u!114 &6191187131497867296 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 184425182240417286} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!64 &2194092315612837427 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 184425182240417286} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: -8752412803172520849, guid: 57cab604cd08b3c41bcfcb710ae06b1c, type: 3} +--- !u!1 &4415911164671648617 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7691252733872402878} + - component: {fileID: 5378740828381313667} + - component: {fileID: 2674157907164042645} + - component: {fileID: 1399903960459766008} + - component: {fileID: 6995181451347207960} + - component: {fileID: 3625380036830317430} + - component: {fileID: 720028090966913275} + - component: {fileID: 1413862345320545969} + - component: {fileID: 2291175641487604337} + m_Layer: 8 + m_Name: 77 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7691252733872402878 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4415911164671648617} + m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.21724613, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6334256280519330925} + - {fileID: 103984889836094637} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 90} +--- !u!33 &5378740828381313667 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4415911164671648617} + m_Mesh: {fileID: 347013164166513179, guid: 57cab604cd08b3c41bcfcb710ae06b1c, type: 3} +--- !u!23 &2674157907164042645 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4415911164671648617} + 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: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, 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!114 &1399903960459766008 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4415911164671648617} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -184,13 +371,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &5701413977545714045 +--- !u!114 &6995181451347207960 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7009658515745654526} + m_GameObject: {fileID: 4415911164671648617} m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} @@ -206,26 +393,26 @@ MonoBehaviour: isTarget: 0 isplace: 0 canPut: 0 ---- !u!114 &3493747612824572614 +--- !u!114 &3625380036830317430 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7009658515745654526} + m_GameObject: {fileID: 4415911164671648617} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &-605326495328156875 +--- !u!114 &720028090966913275 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7009658515745654526} + m_GameObject: {fileID: 4415911164671648617} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} @@ -242,13 +429,13 @@ MonoBehaviour: original_shebei: [] search_u_wei: 0 is_jigui: 0 ---- !u!114 &1394052508262966079 +--- !u!114 &1413862345320545969 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7009658515745654526} + m_GameObject: {fileID: 4415911164671648617} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} @@ -256,17 +443,48 @@ MonoBehaviour: m_EditorClassIdentifier: volume: 1 selfIcon: {fileID: 21300000, guid: 4bac7e613615134418258783d4f8aa7b, type: 3} ---- !u!64 &2363846252458284975 +--- !u!64 &2291175641487604337 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7009658515745654526} + m_GameObject: {fileID: 4415911164671648617} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 4 m_Convex: 0 m_CookingOptions: 30 - m_Mesh: {fileID: -8752412803172520849, guid: 57cab604cd08b3c41bcfcb710ae06b1c, type: 3} + m_Mesh: {fileID: 347013164166513179, guid: 57cab604cd08b3c41bcfcb710ae06b1c, type: 3} +--- !u!1 &6765283776774749902 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 103984889836094637} + m_Layer: 8 + m_Name: "\u951A\u70B9" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &103984889836094637 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6765283776774749902} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: -0.5172461, z: -0.045000106} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7691252733872402878} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/77.prefab.meta b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/77.prefab.meta index d18e9cca9..ec6118324 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/77.prefab.meta +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/77.prefab.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8c4a8588f34156348a469632f7ee42c6 +guid: edcc2d111b0e4ba43a19b55d61c87b4d PrefabImporter: externalObjects: {} userData: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/79.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/79.prefab index f7613d755..1f2be8297 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/79.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/79.prefab @@ -416,7 +416,7 @@ GameObject: - component: {fileID: 7674058892441480647} - component: {fileID: 2698793880540889033} - component: {fileID: 6675181006405141774} - m_Layer: 8 + m_Layer: 13 m_Name: Box033 m_TagString: Untagged m_Icon: {fileID: 0} @@ -772,7 +772,7 @@ GameObject: - component: {fileID: 4238392940506386189} - component: {fileID: 8735184544247224107} - component: {fileID: 7171854200737787635} - m_Layer: 8 + m_Layer: 13 m_Name: Box037 m_TagString: Untagged m_Icon: {fileID: 0} @@ -1317,7 +1317,7 @@ GameObject: - component: {fileID: 546683460355956687} - component: {fileID: 8147417088842697978} - component: {fileID: 419593903644404207} - m_Layer: 8 + m_Layer: 13 m_Name: Box019 m_TagString: Untagged m_Icon: {fileID: 0} @@ -1518,7 +1518,7 @@ GameObject: - component: {fileID: 7077633242908961711} - component: {fileID: 2722709375581868440} - component: {fileID: 8481989945208532410} - m_Layer: 8 + m_Layer: 13 m_Name: Box022 m_TagString: Untagged m_Icon: {fileID: 0} @@ -3212,7 +3212,7 @@ GameObject: - component: {fileID: 2488154055854479050} - component: {fileID: 4908220497462759969} - component: {fileID: 836315947115008734} - m_Layer: 8 + m_Layer: 13 m_Name: Box032 m_TagString: Untagged m_Icon: {fileID: 0} @@ -4301,7 +4301,7 @@ GameObject: - component: {fileID: 6076558724465575141} - component: {fileID: 7262075357504074883} - component: {fileID: 7641450610257077025} - m_Layer: 8 + m_Layer: 13 m_Name: Box005 m_TagString: Untagged m_Icon: {fileID: 0} @@ -4581,7 +4581,7 @@ GameObject: - component: {fileID: 1164266356571446859} - component: {fileID: 382481149656930308} - component: {fileID: 7054113643354944072} - m_Layer: 8 + m_Layer: 13 m_Name: Box001 m_TagString: Untagged m_Icon: {fileID: 0} @@ -4860,7 +4860,7 @@ GameObject: - component: {fileID: 4301668429742950884} - component: {fileID: 6081196391930389744} - component: {fileID: 208826622013951048} - m_Layer: 8 + m_Layer: 13 m_Name: Box040 m_TagString: Untagged m_Icon: {fileID: 0} @@ -5216,7 +5216,7 @@ GameObject: - component: {fileID: 4086857633796660919} - component: {fileID: 470186037641372848} - component: {fileID: 5617384296421528982} - m_Layer: 8 + m_Layer: 13 m_Name: Box039 m_TagString: Untagged m_Icon: {fileID: 0} @@ -6363,7 +6363,7 @@ GameObject: - component: {fileID: 2483742471526776493} - component: {fileID: 7497426542443132847} - component: {fileID: 6422753396241231901} - m_Layer: 8 + m_Layer: 13 m_Name: Box038 m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/80.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/80.prefab index d6556202c..8f9eaa0e2 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/80.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/80.prefab @@ -1304,7 +1304,7 @@ GameObject: - component: {fileID: 5681760890209941867} - component: {fileID: 6737232542292538744} - component: {fileID: 8135161527680624290} - m_Layer: 8 + m_Layer: 13 m_Name: Box019 m_TagString: Untagged m_Icon: {fileID: 0} @@ -2523,7 +2523,7 @@ GameObject: - component: {fileID: 3705636963183839559} - component: {fileID: 6930565141064892353} - component: {fileID: 7226566418394357747} - m_Layer: 8 + m_Layer: 13 m_Name: Box009 m_TagString: Untagged m_Icon: {fileID: 0} @@ -2810,7 +2810,7 @@ GameObject: - component: {fileID: 7343622437520613335} - component: {fileID: 5208794653602801500} - component: {fileID: 2455174216494837952} - m_Layer: 8 + m_Layer: 13 m_Name: Box004 m_TagString: Untagged m_Icon: {fileID: 0} @@ -3876,7 +3876,7 @@ GameObject: - component: {fileID: 8235770716093299986} - component: {fileID: 5781260405233199443} - component: {fileID: 5614605856627319792} - m_Layer: 8 + m_Layer: 13 m_Name: Box006 m_TagString: Untagged m_Icon: {fileID: 0} @@ -4095,7 +4095,7 @@ GameObject: - component: {fileID: 6374834422786616193} - component: {fileID: 1485948355337495403} - component: {fileID: 3839375831334444060} - m_Layer: 8 + m_Layer: 13 m_Name: Box003 m_TagString: Untagged m_Icon: {fileID: 0} @@ -4605,7 +4605,7 @@ GameObject: - component: {fileID: 9154584505512004657} - component: {fileID: 8508104616234848506} - component: {fileID: 3413640402993142701} - m_Layer: 8 + m_Layer: 13 m_Name: Box005 m_TagString: Untagged m_Icon: {fileID: 0} @@ -5195,7 +5195,7 @@ GameObject: - component: {fileID: 9145962542121014690} - component: {fileID: 4631708224821319379} - component: {fileID: 4767424613403772774} - m_Layer: 8 + m_Layer: 13 m_Name: Box017 m_TagString: Untagged m_Icon: {fileID: 0} @@ -5566,7 +5566,7 @@ MonoBehaviour: frames: [] PerTier: 42 PerRow: 5 - volume: 20 + volume: 10 isExit: 0 isClicked: 0 isTarget: 0 @@ -5620,7 +5620,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} m_Name: m_EditorClassIdentifier: - volume: 20 + volume: 10 selfIcon: {fileID: 21300000, guid: 78cf31f89d03d83478ed1b175d5f12d0, type: 3} --- !u!64 &4610751610045484018 MeshCollider: @@ -6363,7 +6363,7 @@ GameObject: - component: {fileID: 7248799172231146351} - component: {fileID: 784916689674961924} - component: {fileID: 5712274760276552416} - m_Layer: 8 + m_Layer: 13 m_Name: Box012 m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/81.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/81.prefab index f1ca87983..ecb634cdb 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/81.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/81.prefab @@ -15,7 +15,7 @@ GameObject: - component: {fileID: 8920164060739271893} - component: {fileID: 4439223434857124443} - component: {fileID: 7033693430582543060} - m_Layer: 8 + m_Layer: 13 m_Name: Object002 m_TagString: Untagged m_Icon: {fileID: 0} @@ -369,7 +369,7 @@ GameObject: - component: {fileID: 4084221248552314612} - component: {fileID: 983977997428848300} - component: {fileID: 6226960805860323309} - m_Layer: 8 + m_Layer: 13 m_Name: Object001 m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/82.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/82.prefab index c3fef4241..1b3acd7af 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/82.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/82.prefab @@ -191,7 +191,7 @@ MonoBehaviour: frames: [] PerTier: 42 PerRow: 5 - volume: 20 + volume: 10 isExit: 0 isClicked: 0 isTarget: 0 @@ -245,7 +245,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} m_Name: m_EditorClassIdentifier: - volume: 20 + volume: 10 selfIcon: {fileID: 21300000, guid: ddc9d5693d4b79343ae38571ada8e109, type: 3} --- !u!64 &765907685747793183 MeshCollider: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/86-old.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/86-old.prefab new file mode 100644 index 000000000..e82f4851f --- /dev/null +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/86-old.prefab @@ -0,0 +1,273 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2207305353042470914 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7421650080246176945} + m_Layer: 8 + m_Name: "\u951A\u70B9" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7421650080246176945 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2207305353042470914} + m_LocalRotation: {x: 0.7071068, y: -0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: -0.3, z: -0.045000046} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5928702356545403374} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6416833204318675796 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5928702356545403374} + - component: {fileID: 7343436903823701579} + - component: {fileID: 4759697588368114305} + - component: {fileID: 4489074868104159076} + - component: {fileID: 8267766470522565694} + - component: {fileID: 8273752438835201092} + - component: {fileID: -6167748816127241774} + - component: {fileID: 7014631476716584406} + - component: {fileID: -5707820733402463839} + m_Layer: 8 + m_Name: 86-old + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5928702356545403374 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6416833204318675796} + m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7421650080246176945} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} +--- !u!33 &7343436903823701579 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6416833204318675796} + m_Mesh: {fileID: -4612744323214652673, guid: 52ee70528d4e7c44da94ea73fd0bde06, type: 3} +--- !u!23 &4759697588368114305 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6416833204318675796} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: a989c61300807ab4898d5adf84872713, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!114 &4489074868104159076 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6416833204318675796} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} + m_Name: + m_EditorClassIdentifier: + deviceList: + id: + deviceName: + deviceCode: + type: 2 + typeStr: + deviceType: 1 + deviceTypeStr: + rackId: + shelfId: + slotId: + devicePosition: + machineModel: + status: + conDeviceName: + rackType: + openFlag: + backDoorFlag: + modelNum: 86 + occupyNum: 1 + residueNum: + operationTime: + directorName: + phone: + manufacturer: + powerProperties: + maintenanceUnit: + machineFrameHigh: + machineFrameWide: + machineFrameThick: + slotNum: + slotSort: + installMethod: + affiliationFrame: + parentSlotName: + slotType: + occupyStatus: + affiliationSlot: + portNum: + cardFunction: + cardType: + runStatus: + tmsId: + remark: + createTime: + createName: +--- !u!114 &8267766470522565694 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6416833204318675796} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} + m_Name: + m_EditorClassIdentifier: + listTargets: [] + frames: [] + PerTier: 42 + PerRow: 5 + volume: 1 + isExit: 0 + isClicked: 0 + isTarget: 0 + isplace: 0 + canPut: 0 +--- !u!114 &8273752438835201092 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6416833204318675796} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!114 &-6167748816127241774 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6416833204318675796} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + meshRenderers: [] + materials: [] + empty: [] + TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, + type: 3} + TransparentGlow_Shader_half: {fileID: 0} + original_jigui: [] + original_shebei: [] + search_u_wei: 0 + is_jigui: 0 +--- !u!114 &7014631476716584406 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6416833204318675796} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} + m_Name: + m_EditorClassIdentifier: + volume: 1 + selfIcon: {fileID: 21300000, guid: 76139c74938b99043a48fef24ef08408, type: 3} +--- !u!64 &-5707820733402463839 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6416833204318675796} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: -4612744323214652673, guid: 52ee70528d4e7c44da94ea73fd0bde06, type: 3} diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/86-old.prefab.meta b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/86-old.prefab.meta new file mode 100644 index 000000000..01028c0a5 --- /dev/null +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/86-old.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 56e2d530ac9a98446b722d5ff8943eb9 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/86.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/86.prefab index 8ecc22fda..497e35c5c 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/86.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/86.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &2207305353042470914 +--- !u!1 &4014692571395031571 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,46 +8,15 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7421650080246176945} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7421650080246176945 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2207305353042470914} - m_LocalRotation: {x: 0.7071068, y: -0, z: 0, w: 0.7071068} - m_LocalPosition: {x: 0, y: -0.3, z: -0.045000046} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5928702356545403374} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &6416833204318675796 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5928702356545403374} - - component: {fileID: 7343436903823701579} - - component: {fileID: 4759697588368114305} - - component: {fileID: 4489074868104159076} - - component: {fileID: 8267766470522565694} - - component: {fileID: 8273752438835201092} - - component: {fileID: -6167748816127241774} - - component: {fileID: 7014631476716584406} - - component: {fileID: -5707820733402463839} + - component: {fileID: 6936576749006131396} + - component: {fileID: 4637117828393540601} + - component: {fileID: 3450881167658153199} + - component: {fileID: 5762531144728821952} + - component: {fileID: 2295131284303676237} + - component: {fileID: 4197713535160432752} + - component: {fileID: 1446329813093800041} + - component: {fileID: 7008626757505111303} + - component: {fileID: 1431268146741223625} m_Layer: 8 m_Name: 86 m_TagString: Untagged @@ -55,37 +24,39 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5928702356545403374 +--- !u!4 &6936576749006131396 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6416833204318675796} + m_GameObject: {fileID: 4014692571395031571} m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} - m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalPosition: {x: -0.21724613, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 7421650080246176945} + - {fileID: 6105358874972803677} + - {fileID: 2439523252576960453} + - {fileID: 3678583203401106757} m_Father: {fileID: 0} m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} ---- !u!33 &7343436903823701579 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 90} +--- !u!33 &4637117828393540601 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6416833204318675796} - m_Mesh: {fileID: -4612744323214652673, guid: 52ee70528d4e7c44da94ea73fd0bde06, type: 3} ---- !u!23 &4759697588368114305 + m_GameObject: {fileID: 4014692571395031571} + m_Mesh: {fileID: 347013164166513179, guid: 52ee70528d4e7c44da94ea73fd0bde06, type: 3} +--- !u!23 &3450881167658153199 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6416833204318675796} + m_GameObject: {fileID: 4014692571395031571} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -99,13 +70,10 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} - - {fileID: 2100000, guid: a989c61300807ab4898d5adf84872713, type: 2} - - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} - - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} - - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -127,13 +95,13 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &4489074868104159076 +--- !u!114 &5762531144728821952 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6416833204318675796} + m_GameObject: {fileID: 4014692571395031571} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -185,13 +153,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &8267766470522565694 +--- !u!114 &2295131284303676237 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6416833204318675796} + m_GameObject: {fileID: 4014692571395031571} m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} @@ -207,26 +175,26 @@ MonoBehaviour: isTarget: 0 isplace: 0 canPut: 0 ---- !u!114 &8273752438835201092 +--- !u!114 &4197713535160432752 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6416833204318675796} + m_GameObject: {fileID: 4014692571395031571} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &-6167748816127241774 +--- !u!114 &1446329813093800041 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6416833204318675796} + m_GameObject: {fileID: 4014692571395031571} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} @@ -243,13 +211,13 @@ MonoBehaviour: original_shebei: [] search_u_wei: 0 is_jigui: 0 ---- !u!114 &7014631476716584406 +--- !u!114 &7008626757505111303 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6416833204318675796} + m_GameObject: {fileID: 4014692571395031571} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} @@ -257,13 +225,264 @@ MonoBehaviour: m_EditorClassIdentifier: volume: 1 selfIcon: {fileID: 21300000, guid: 76139c74938b99043a48fef24ef08408, type: 3} ---- !u!64 &-5707820733402463839 +--- !u!64 &1431268146741223625 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6416833204318675796} + m_GameObject: {fileID: 4014692571395031571} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 347013164166513179, guid: 52ee70528d4e7c44da94ea73fd0bde06, type: 3} +--- !u!1 &5742735656951323100 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3678583203401106757} + m_Layer: 8 + m_Name: "\u951A\u70B9" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3678583203401106757 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5742735656951323100} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: -0.5172461, z: -0.045000046} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6936576749006131396} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6392028867122733943 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6105358874972803677} + - component: {fileID: 2536364327254279395} + - component: {fileID: 6547038317857606069} + - component: {fileID: 2616384298140197323} + - component: {fileID: 6498716713155307020} + - component: {fileID: 7027990738488378772} + - component: {fileID: 7357788026039628720} + - component: {fileID: 6529707333297449371} + m_Layer: 13 + m_Name: 86 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6105358874972803677 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6392028867122733943} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.15490983, y: -0.17667794, z: 0.0051158816} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6936576749006131396} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2536364327254279395 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6392028867122733943} + m_Mesh: {fileID: -4612744323214652673, guid: 52ee70528d4e7c44da94ea73fd0bde06, type: 3} +--- !u!23 &6547038317857606069 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6392028867122733943} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: a989c61300807ab4898d5adf84872713, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!114 &2616384298140197323 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6392028867122733943} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} + m_Name: + m_EditorClassIdentifier: + deviceList: + id: + deviceName: + deviceCode: + type: 2 + typeStr: + deviceType: 3 + deviceTypeStr: + rackId: + shelfId: + slotId: + devicePosition: 1 + machineModel: + status: + conDeviceName: + rackType: + openFlag: + backDoorFlag: + modelNum: + occupyNum: + residueNum: + operationTime: + directorName: + phone: + manufacturer: + powerProperties: + maintenanceUnit: + machineFrameHigh: + machineFrameWide: + machineFrameThick: + slotNum: + slotSort: + installMethod: + affiliationFrame: + parentSlotName: + slotType: + occupyStatus: + affiliationSlot: + portNum: + cardFunction: + cardType: + runStatus: + tmsId: + remark: + createTime: + createName: +--- !u!114 &6498716713155307020 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6392028867122733943} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!114 &7027990738488378772 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6392028867122733943} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + meshRenderers: [] + materials: [] + empty: [] + TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, + type: 3} + TransparentGlow_Shader_half: {fileID: 0} + original_jigui: [] + original_shebei: [] + search_u_wei: 0 + is_jigui: 0 +--- !u!114 &7357788026039628720 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6392028867122733943} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!64 &6529707333297449371 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6392028867122733943} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -271,3 +490,223 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -4612744323214652673, guid: 52ee70528d4e7c44da94ea73fd0bde06, type: 3} +--- !u!1 &8654451577878734205 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2439523252576960453} + - component: {fileID: 7600002009907711771} + - component: {fileID: 3100052320702453916} + - component: {fileID: 5658210501560258922} + - component: {fileID: 3037212347564201383} + - component: {fileID: 3820672518402850722} + - component: {fileID: 4505105908940517422} + - component: {fileID: 1908444267830118833} + m_Layer: 13 + m_Name: 087 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2439523252576960453 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8654451577878734205} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.15638386, y: -0.17667797, z: 0.0051158816} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6936576749006131396} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7600002009907711771 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8654451577878734205} + m_Mesh: {fileID: 6367464660126607858, guid: 52ee70528d4e7c44da94ea73fd0bde06, type: 3} +--- !u!23 &3100052320702453916 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8654451577878734205} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: a989c61300807ab4898d5adf84872713, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!114 &5658210501560258922 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8654451577878734205} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} + m_Name: + m_EditorClassIdentifier: + deviceList: + id: + deviceName: + deviceCode: + type: 2 + typeStr: + deviceType: 3 + deviceTypeStr: + rackId: + shelfId: + slotId: + devicePosition: 2 + machineModel: + status: + conDeviceName: + rackType: + openFlag: + backDoorFlag: + modelNum: + occupyNum: + residueNum: + operationTime: + directorName: + phone: + manufacturer: + powerProperties: + maintenanceUnit: + machineFrameHigh: + machineFrameWide: + machineFrameThick: + slotNum: + slotSort: + installMethod: + affiliationFrame: + parentSlotName: + slotType: + occupyStatus: + affiliationSlot: + portNum: + cardFunction: + cardType: + runStatus: + tmsId: + remark: + createTime: + createName: +--- !u!114 &3037212347564201383 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8654451577878734205} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!114 &3820672518402850722 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8654451577878734205} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + meshRenderers: [] + materials: [] + empty: [] + TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, + type: 3} + TransparentGlow_Shader_half: {fileID: 0} + original_jigui: [] + original_shebei: [] + search_u_wei: 0 + is_jigui: 0 +--- !u!114 &4505105908940517422 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8654451577878734205} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 1.1, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!64 &1908444267830118833 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8654451577878734205} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 6367464660126607858, guid: 52ee70528d4e7c44da94ea73fd0bde06, type: 3} diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/86.prefab.meta b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/86.prefab.meta index 01028c0a5..418f956da 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/86.prefab.meta +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/86.prefab.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 56e2d530ac9a98446b722d5ff8943eb9 +guid: ee70c271dbdd4d6499ab0c1bb2a3a8d8 PrefabImporter: externalObjects: {} userData: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/91.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/91.prefab index 487b91833..9add294f7 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/91.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/91.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &140082465910778474 +--- !u!1 &119325321383405785 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,363 +8,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8750998001283777155} - - component: {fileID: 7362490249088733178} - - component: {fileID: 5367667024857749406} + - component: {fileID: 7813516284638191785} + - component: {fileID: 9106884353629231780} + - component: {fileID: 3000937762758153931} + - component: {fileID: 3599705126701363997} + - component: {fileID: 7706796367239849620} m_Layer: 11 - m_Name: Cube (26) + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8750998001283777155 +--- !u!4 &7813516284638191785 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 140082465910778474} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1161, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 119325321383405785} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.1912, y: -0.014200002, z: -0.004999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1462550250744464128} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7362490249088733178 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 140082465910778474} - 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!114 &5367667024857749406 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 140082465910778474} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &255745727095068471 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9043187855703268860} - - component: {fileID: 7862965696130494831} - - component: {fileID: 2830779702560821436} - m_Layer: 11 - m_Name: Cube (25) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9043187855703268860 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 255745727095068471} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1624, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1462550250744464128} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7862965696130494831 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 255745727095068471} - 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!114 &2830779702560821436 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 255745727095068471} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &628287849183768884 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2765290132678375698} - - component: {fileID: 1747987471747775621} - - component: {fileID: 3118155192952423939} - m_Layer: 11 - m_Name: Cube (23) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2765290132678375698 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 628287849183768884} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2786, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5433370186872049287} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1747987471747775621 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 628287849183768884} - 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!114 &3118155192952423939 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 628287849183768884} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &969981808834775765 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3931373797583108576} - - component: {fileID: 3163487442543854250} - - component: {fileID: 1494977007122616660} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3931373797583108576 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 969981808834775765} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0263, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5433370186872049287} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3163487442543854250 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 969981808834775765} - 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!114 &1494977007122616660 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 969981808834775765} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1121367467311560375 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 845501031763293664} - - component: {fileID: 3869965030170538319} - - component: {fileID: 1989269113556355758} - m_Layer: 11 - m_Name: Cube (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &845501031763293664 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1121367467311560375} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1912, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6835482656366072579} + m_Father: {fileID: 434122983594594359} m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3869965030170538319 -BoxCollider: +--- !u!33 &9106884353629231780 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1121367467311560375} + m_GameObject: {fileID: 119325321383405785} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3000937762758153931 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 119325321383405785} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &3599705126701363997 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 119325321383405785} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1989269113556355758 +--- !u!114 &7706796367239849620 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1121367467311560375} + m_GameObject: {fileID: 119325321383405785} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -390,7 +130,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &1306546457300470970 +--- !u!1 &256670025824616454 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -398,207 +138,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5795954215439872485} - - component: {fileID: 2869381304560955060} - - component: {fileID: 520153906786483986} + - component: {fileID: 820131175712678115} + - component: {fileID: 8746174707010047188} + - component: {fileID: 916451063907323630} + - component: {fileID: 7681178820700407643} + - component: {fileID: 2483139254737361117} m_Layer: 11 - m_Name: Cube (8) + m_Name: Sphere (7) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5795954215439872485 +--- !u!4 &820131175712678115 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1306546457300470970} + m_GameObject: {fileID: 256670025824616454} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.148, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 434122983594594359} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2869381304560955060 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1306546457300470970} - 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!114 &520153906786483986 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1306546457300470970} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2129973958791702250 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4963627421155511695} - - component: {fileID: 2137085961873546821} - - component: {fileID: 8583631899212435666} - m_Layer: 11 - m_Name: Cube (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4963627421155511695 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2129973958791702250} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.148, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6835482656366072579} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2137085961873546821 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2129973958791702250} - 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!114 &8583631899212435666 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2129973958791702250} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2384000630629710462 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7781378606789544623} - - component: {fileID: 3339989607927972757} - - component: {fileID: 2305476408796819910} - m_Layer: 11 - m_Name: Cube (31) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7781378606789544623 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2384000630629710462} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.106500015, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.10650002, y: -0.014200002, z: -0.0037999898} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 1462550250744464128} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3339989607927972757 -BoxCollider: +--- !u!33 &8746174707010047188 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2384000630629710462} + m_GameObject: {fileID: 256670025824616454} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &916451063907323630 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256670025824616454} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &7681178820700407643 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256670025824616454} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2305476408796819910 +--- !u!114 &2483139254737361117 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2384000630629710462} + m_GameObject: {fileID: 256670025824616454} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -624,7 +260,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2507936031298319356 +--- !u!1 &308306296133657823 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -632,285 +268,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2320444808197185521} - - component: {fileID: 2753107140002421826} - - component: {fileID: 7025307325285046579} + - component: {fileID: 1506383791881166786} + - component: {fileID: 7211827225056602151} + - component: {fileID: 1202672426156279912} + - component: {fileID: 6817065235278914322} + - component: {fileID: 7321086984035498037} m_Layer: 11 - m_Name: Cube (18) + m_Name: Sphere (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2320444808197185521 +--- !u!4 &1506383791881166786 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2507936031298319356} + m_GameObject: {fileID: 308306296133657823} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0633, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5433370186872049287} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2753107140002421826 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2507936031298319356} - 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!114 &7025307325285046579 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2507936031298319356} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2533991783280269178 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2920077091562740170} - - component: {fileID: 7131719164253965657} - - component: {fileID: 7791706462040246089} - m_Layer: 11 - m_Name: Cube (29) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2920077091562740170 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2533991783280269178} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0169, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.1161, y: -0.014200002, z: -0.0037999898} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 1462550250744464128} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7131719164253965657 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2533991783280269178} - 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!114 &7791706462040246089 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2533991783280269178} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2599329377432953080 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8000697507011598267} - - component: {fileID: 2853479053223264143} - - component: {fileID: 1848147884969665221} - m_Layer: 11 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8000697507011598267 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2599329377432953080} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2376, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6835482656366072579} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2853479053223264143 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2599329377432953080} - 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!114 &1848147884969665221 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2599329377432953080} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3156845966750780259 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7805725031558220348} - - component: {fileID: 3680464573643769765} - - component: {fileID: 8809675745482434116} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7805725031558220348 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3156845966750780259} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1139, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 434122983594594359} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3680464573643769765 -BoxCollider: +--- !u!33 &7211827225056602151 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3156845966750780259} + m_GameObject: {fileID: 308306296133657823} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1202672426156279912 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 308306296133657823} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &6817065235278914322 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 308306296133657823} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8809675745482434116 +--- !u!114 &7321086984035498037 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3156845966750780259} + m_GameObject: {fileID: 308306296133657823} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -936,7 +390,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3192578178492465661 +--- !u!1 &809161580151772587 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -944,51 +398,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2524741719698716316} - - component: {fileID: 6649720995423892014} - - component: {fileID: 4554105486486552531} + - component: {fileID: 1827513161845658245} + - component: {fileID: 2057108240219010428} + - component: {fileID: 6837827926576137318} + - component: {fileID: 2894411301330214994} + - component: {fileID: 2967566748511506060} m_Layer: 11 - m_Name: Cube (19) + m_Name: Sphere (8) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2524741719698716316 +--- !u!4 &1827513161845658245 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3192578178492465661} + m_GameObject: {fileID: 809161580151772587} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1087, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.1458, y: -0.014200002, z: -0.0059000105} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 6835482656366072579} - m_RootOrder: 7 + m_Father: {fileID: 5433370186872049287} + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6649720995423892014 -BoxCollider: +--- !u!33 &2057108240219010428 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3192578178492465661} + m_GameObject: {fileID: 809161580151772587} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6837827926576137318 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 809161580151772587} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &2894411301330214994 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 809161580151772587} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4554105486486552531 +--- !u!114 &2967566748511506060 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3192578178492465661} + m_GameObject: {fileID: 809161580151772587} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1001,7 +507,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 8 + portPosition: 9 deviceId: deviceName: portModel: @@ -1014,7 +520,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3457344853391026998 +--- !u!1 &1101812700099628262 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1022,51 +528,233 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4471301252679772306} - - component: {fileID: 8324684755853665600} - - component: {fileID: 1514589790990123481} + - component: {fileID: 7330404826422811911} + - component: {fileID: 2795963975800569519} + - component: {fileID: 3263624453833706541} + - component: {fileID: 8582654737937922952} + - component: {fileID: 1715081343731897092} m_Layer: 11 - m_Name: Cube (35) + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4471301252679772306 +--- !u!4 &7330404826422811911 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3457344853391026998} + m_GameObject: {fileID: 1101812700099628262} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2786, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.189, y: -0.014200002, z: -0.0059000105} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1462550250744464128} - m_RootOrder: 11 + m_Father: {fileID: 5433370186872049287} + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8324684755853665600 -BoxCollider: +--- !u!33 &2795963975800569519 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3457344853391026998} + m_GameObject: {fileID: 1101812700099628262} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3263624453833706541 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101812700099628262} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &8582654737937922952 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101812700099628262} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1514589790990123481 +--- !u!114 &1715081343731897092 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3457344853391026998} + m_GameObject: {fileID: 1101812700099628262} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 10 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1390814984237716675 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7022342286115927698} + - component: {fileID: 1568680245821959592} + - component: {fileID: 1273643970122223792} + - component: {fileID: 7250415156576721341} + - component: {fileID: 2547484085238126398} + m_Layer: 11 + m_Name: Sphere (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7022342286115927698 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1390814984237716675} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2808, y: -0.014200002, z: -0.004999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 434122983594594359} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1568680245821959592 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1390814984237716675} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1273643970122223792 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1390814984237716675} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &7250415156576721341 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1390814984237716675} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2547484085238126398 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1390814984237716675} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1092,7 +780,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3549043001475182207 +--- !u!1 &2091532817462292988 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1100,51 +788,753 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 264213427253717294} - - component: {fileID: 5363015398041950659} - - component: {fileID: 8195424843595078921} + - component: {fileID: 361955625143316041} + - component: {fileID: 306353973457159349} + - component: {fileID: 8735815897161322062} + - component: {fileID: 3053284751534464927} + - component: {fileID: 8218802704839836869} m_Layer: 11 - m_Name: Cube (6) + m_Name: Sphere (10) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &264213427253717294 +--- !u!4 &361955625143316041 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3549043001475182207} + m_GameObject: {fileID: 2091532817462292988} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0655, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.2354, y: -0.014200002, z: -0.0037999898} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 434122983594594359} - m_RootOrder: 6 + m_Father: {fileID: 1462550250744464128} + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5363015398041950659 -BoxCollider: +--- !u!33 &306353973457159349 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3549043001475182207} + m_GameObject: {fileID: 2091532817462292988} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8735815897161322062 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091532817462292988} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &3053284751534464927 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091532817462292988} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8195424843595078921 +--- !u!114 &8218802704839836869 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3549043001475182207} + m_GameObject: {fileID: 2091532817462292988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2356505061656370208 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7418646731813084474} + - component: {fileID: 2611691491057737257} + - component: {fileID: 2830251620926174725} + - component: {fileID: 5338349786803168997} + - component: {fileID: 1044417839915039661} + m_Layer: 11 + m_Name: Sphere (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7418646731813084474 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2356505061656370208} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2376, y: -0.014200002, z: -0.004999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 434122983594594359} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2611691491057737257 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2356505061656370208} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2830251620926174725 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2356505061656370208} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &5338349786803168997 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2356505061656370208} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1044417839915039661 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2356505061656370208} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2361318211097227366 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2730134512538252549} + - component: {fileID: 6349582177425222524} + - component: {fileID: 8313519067986433720} + - component: {fileID: 687239911286002760} + - component: {fileID: 5564677236801070961} + m_Layer: 11 + m_Name: Sphere (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2730134512538252549 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2361318211097227366} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.11389999, y: -0.014200002, z: -0.004999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 434122983594594359} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6349582177425222524 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2361318211097227366} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8313519067986433720 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2361318211097227366} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &687239911286002760 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2361318211097227366} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5564677236801070961 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2361318211097227366} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2506963329702704690 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5429959739503960633} + - component: {fileID: 6907658370677423839} + - component: {fileID: 472653670635946304} + - component: {fileID: 7249543190151842453} + - component: {fileID: 8517836258507127163} + m_Layer: 11 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5429959739503960633 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2506963329702704690} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.1624, y: -0.014200002, z: -0.0059000254} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5433370186872049287} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6907658370677423839 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2506963329702704690} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &472653670635946304 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2506963329702704690} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &7249543190151842453 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2506963329702704690} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8517836258507127163 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2506963329702704690} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2883093062398975051 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3957334945271604345} + - component: {fileID: 5257146923020596052} + - component: {fileID: 3643673492397310779} + - component: {fileID: 2186401474933427331} + - component: {fileID: 4984310384328063330} + m_Layer: 11 + m_Name: Sphere (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3957334945271604345 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2883093062398975051} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.024100013, y: -0.014200002, z: -0.0044} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 6835482656366072579} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5257146923020596052 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2883093062398975051} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3643673492397310779 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2883093062398975051} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &2186401474933427331 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2883093062398975051} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4984310384328063330 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2883093062398975051} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2906219323889035446 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8450999851469357805} + - component: {fileID: 6941837474806977859} + - component: {fileID: 3210091634409571459} + - component: {fileID: 4578005974537987538} + - component: {fileID: 243395310999514735} + m_Layer: 11 + m_Name: Sphere (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8450999851469357805 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2906219323889035446} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0633, y: -0.014200002, z: -0.0037999898} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1462550250744464128} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6941837474806977859 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2906219323889035446} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3210091634409571459 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2906219323889035446} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &4578005974537987538 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2906219323889035446} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &243395310999514735 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2906219323889035446} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1170,7 +1560,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3849473472210543671 +--- !u!1 &3076395256641173747 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1178,51 +1568,883 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7117354771964580405} - - component: {fileID: 6114412298916422679} - - component: {fileID: 8702425069907499033} + - component: {fileID: 7756486019373070334} + - component: {fileID: 4971365291374441128} + - component: {fileID: 7955687256229536092} + - component: {fileID: 4129039700903001864} + - component: {fileID: 5806220620616427027} m_Layer: 11 - m_Name: Cube (15) + m_Name: Sphere (5) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7117354771964580405 +--- !u!4 &7756486019373070334 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3849473472210543671} + m_GameObject: {fileID: 3076395256641173747} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0707, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.0169, y: -0.014200002, z: -0.0037999898} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 6835482656366072579} - m_RootOrder: 3 + m_Father: {fileID: 1462550250744464128} + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6114412298916422679 -BoxCollider: +--- !u!33 &4971365291374441128 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3849473472210543671} + m_GameObject: {fileID: 3076395256641173747} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7955687256229536092 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3076395256641173747} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &4129039700903001864 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3076395256641173747} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8702425069907499033 +--- !u!114 &5806220620616427027 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3849473472210543671} + m_GameObject: {fileID: 3076395256641173747} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3174171691253336845 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1441599186880810299} + - component: {fileID: 6422402975729452208} + - component: {fileID: 4353751568491433823} + - component: {fileID: 6840652307869962222} + - component: {fileID: 43077026836492325} + m_Layer: 11 + m_Name: Sphere (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1441599186880810299 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3174171691253336845} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.026299998, y: -0.014200002, z: -0.0037999898} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1462550250744464128} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6422402975729452208 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3174171691253336845} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4353751568491433823 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3174171691253336845} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &6840652307869962222 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3174171691253336845} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &43077026836492325 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3174171691253336845} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3174771575087427896 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3592516803644195733} + - component: {fileID: 7953798153609163650} + - component: {fileID: 8163999775005586973} + - component: {fileID: 367879006476193539} + - component: {fileID: 7682264680257782825} + m_Layer: 11 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3592516803644195733 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3174771575087427896} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.1602, y: -0.014200002, z: -0.0044} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 6835482656366072579} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7953798153609163650 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3174771575087427896} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8163999775005586973 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3174771575087427896} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &367879006476193539 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3174771575087427896} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7682264680257782825 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3174771575087427896} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3308696279884477934 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1311296531901772415} + - component: {fileID: 8100002777040790202} + - component: {fileID: 3084276842837194078} + - component: {fileID: 3563961489552436465} + - component: {fileID: 7507226328135602042} + m_Layer: 11 + m_Name: Sphere (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1311296531901772415 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3308696279884477934} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.189, y: -0.014200002, z: -0.0037999898} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1462550250744464128} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8100002777040790202 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3308696279884477934} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3084276842837194078 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3308696279884477934} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &3563961489552436465 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3308696279884477934} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7507226328135602042 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3308696279884477934} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 10 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3642340742832355077 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 666310601077685965} + - component: {fileID: 5520309606615391903} + - component: {fileID: 1160969807060122299} + - component: {fileID: 6689866698391800626} + - component: {fileID: 443185484687368612} + m_Layer: 11 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &666310601077685965 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3642340742832355077} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.0729, y: -0.014200002, z: -0.0037999898} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1462550250744464128} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5520309606615391903 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3642340742832355077} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1160969807060122299 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3642340742832355077} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &6689866698391800626 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3642340742832355077} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &443185484687368612 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3642340742832355077} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3674866871467327909 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7296534492359485495} + - component: {fileID: 231872074331655110} + - component: {fileID: 4147943367933823697} + - component: {fileID: 1124684255955060049} + - component: {fileID: 2452881057795347565} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7296534492359485495 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3674866871467327909} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2057, y: -0.014200002, z: -0.0059000105} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5433370186872049287} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &231872074331655110 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3674866871467327909} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4147943367933823697 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3674866871467327909} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &1124684255955060049 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3674866871467327909} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2452881057795347565 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3674866871467327909} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3676577219624133903 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6700801916508284755} + - component: {fileID: 3044411322394289826} + - component: {fileID: 1265879168046522939} + - component: {fileID: 3337130906758657469} + - component: {fileID: 283353968646625910} + m_Layer: 11 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6700801916508284755 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3676577219624133903} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.0707, y: -0.014200002, z: -0.0044000074} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 6835482656366072579} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3044411322394289826 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3676577219624133903} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1265879168046522939 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3676577219624133903} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &3337130906758657469 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3676577219624133903} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &283353968646625910 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3676577219624133903} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1280,7 +2502,7 @@ Transform: m_Father: {fileID: 8929066535806527971} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &3859529774596306972 +--- !u!1 &3859067608788462269 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1288,129 +2510,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1115908774567838735} - - component: {fileID: 6660562335350767326} - - component: {fileID: 7164412660873262197} + - component: {fileID: 2099110270108001029} + - component: {fileID: 1058303831011361360} + - component: {fileID: 3901168211627071323} + - component: {fileID: 5116557611866192952} + - component: {fileID: 988634408822079786} m_Layer: 11 - m_Name: Cube (14) + m_Name: Sphere (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1115908774567838735 +--- !u!4 &2099110270108001029 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3859529774596306972} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1139, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6835482656366072579} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6660562335350767326 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3859529774596306972} - 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!114 &7164412660873262197 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3859529774596306972} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3990404861048100482 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9114579581690390571} - - component: {fileID: 4053710915454385701} - - component: {fileID: 2184739160655079825} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9114579581690390571 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3990404861048100482} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0707, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 3859067608788462269} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.1602, y: -0.014200002, z: -0.004999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 434122983594594359} - m_RootOrder: 3 + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4053710915454385701 -BoxCollider: +--- !u!33 &1058303831011361360 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3990404861048100482} + m_GameObject: {fileID: 3859067608788462269} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3901168211627071323 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3859067608788462269} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &5116557611866192952 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3859067608788462269} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2184739160655079825 +--- !u!114 &988634408822079786 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3990404861048100482} + m_GameObject: {fileID: 3859067608788462269} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1423,7 +2619,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 4 + portPosition: 2 deviceId: deviceName: portModel: @@ -1436,7 +2632,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &4026805865114627913 +--- !u!1 &4097881298307646513 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1444,51 +2640,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4206267700277148301} - - component: {fileID: 313500843338818446} - - component: {fileID: 5631882574296218422} + - component: {fileID: 2833282480490394667} + - component: {fileID: 6462537888983377264} + - component: {fileID: 9014071699916115735} + - component: {fileID: 8084926740990588315} + - component: {fileID: 5540397591275593757} m_Layer: 11 - m_Name: Cube (30) + m_Name: Sphere (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4206267700277148301 +--- !u!4 &2833282480490394667 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4026805865114627913} + m_GameObject: {fileID: 4097881298307646513} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0633, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.0633, y: -0.014200002, z: -0.0059000105} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1462550250744464128} + m_Father: {fileID: 5433370186872049287} m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &313500843338818446 -BoxCollider: +--- !u!33 &6462537888983377264 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4026805865114627913} + m_GameObject: {fileID: 4097881298307646513} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &9014071699916115735 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4097881298307646513} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &8084926740990588315 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4097881298307646513} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5631882574296218422 +--- !u!114 &5540397591275593757 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4026805865114627913} + m_GameObject: {fileID: 4097881298307646513} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1514,7 +2762,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &4405917290614183136 +--- !u!1 &4321996241745265613 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1522,207 +2770,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8030333385130045917} - - component: {fileID: 6931126235012795028} - - component: {fileID: 5013415452599546636} + - component: {fileID: 5103135383619948335} + - component: {fileID: 7527222028648539365} + - component: {fileID: 1358750241077455078} + - component: {fileID: 7624422849496679871} + - component: {fileID: 5467640506896143400} m_Layer: 11 - m_Name: Cube (14) + m_Name: Sphere (7) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8030333385130045917 +--- !u!4 &5103135383619948335 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4405917290614183136} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1161, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5433370186872049287} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6931126235012795028 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4405917290614183136} - 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!114 &5013415452599546636 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4405917290614183136} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4534458534309776068 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7652370717870866665} - - component: {fileID: 4754293700835877199} - - component: {fileID: 2996453649743724500} - m_Layer: 11 - m_Name: Cube (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7652370717870866665 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4534458534309776068} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1458, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5433370186872049287} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4754293700835877199 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4534458534309776068} - 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!114 &2996453649743724500 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4534458534309776068} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4623168668228655357 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4088594508611842701} - - component: {fileID: 4035713813809108201} - - component: {fileID: 2419732012018342116} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4088594508611842701 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4623168668228655357} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2376, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 4321996241745265613} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.10869999, y: -0.014200002, z: -0.004999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 434122983594594359} - m_RootOrder: 10 + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4035713813809108201 -BoxCollider: +--- !u!33 &7527222028648539365 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4623168668228655357} + m_GameObject: {fileID: 4321996241745265613} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1358750241077455078 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4321996241745265613} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &7624422849496679871 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4321996241745265613} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2419732012018342116 +--- !u!114 &5467640506896143400 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4623168668228655357} + m_GameObject: {fileID: 4321996241745265613} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1735,7 +2879,397 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 11 + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4677034771525300986 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 52621314816570685} + - component: {fileID: 1799811096101190368} + - component: {fileID: 2454824711728348147} + - component: {fileID: 8749768773511328864} + - component: {fileID: 5036967085404355672} + m_Layer: 11 + m_Name: Sphere (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &52621314816570685 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4677034771525300986} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2808, y: -0.014200002, z: -0.0044} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 6835482656366072579} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1799811096101190368 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4677034771525300986} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2454824711728348147 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4677034771525300986} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &8749768773511328864 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4677034771525300986} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5036967085404355672 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4677034771525300986} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4727164130530857594 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2282658184373647617} + - component: {fileID: 6640176978542996859} + - component: {fileID: 1268608912088842390} + - component: {fileID: 7066927037303463550} + - component: {fileID: 4437924029563638191} + m_Layer: 11 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2282658184373647617 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4727164130530857594} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.0191, y: -0.014200002, z: -0.004999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 434122983594594359} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6640176978542996859 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4727164130530857594} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1268608912088842390 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4727164130530857594} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &7066927037303463550 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4727164130530857594} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4437924029563638191 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4727164130530857594} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4735908718154359476 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5326715860307681105} + - component: {fileID: 6501360420579418282} + - component: {fileID: 8246797654641468750} + - component: {fileID: 1298086007256200770} + - component: {fileID: 5228529015295901398} + m_Layer: 11 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5326715860307681105 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4735908718154359476} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.10650001, y: -0.014200002, z: -0.0059000105} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5433370186872049287} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6501360420579418282 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4735908718154359476} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8246797654641468750 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4735908718154359476} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &1298086007256200770 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4735908718154359476} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5228529015295901398 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4735908718154359476} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 deviceId: deviceName: portModel: @@ -1763,7 +3297,7 @@ GameObject: - component: {fileID: 2515522716057796366} - component: {fileID: 5949775335661709233} - component: {fileID: 7539497401045943057} - m_Layer: 8 + m_Layer: 13 m_Name: Object006 m_TagString: Untagged m_Icon: {fileID: 0} @@ -1782,18 +3316,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 2940586963712800410} - - {fileID: 9043187855703268860} - - {fileID: 8750998001283777155} - - {fileID: 7725652193201052755} - - {fileID: 2833875473805234494} - - {fileID: 2920077091562740170} - - {fileID: 4206267700277148301} - - {fileID: 7781378606789544623} - - {fileID: 8346778946281448119} - - {fileID: 5650423916277487732} - - {fileID: 1190688816569768842} - - {fileID: 4471301252679772306} + - {fileID: 7485134667420676901} + - {fileID: 3399758215449910130} + - {fileID: 1506383791881166786} + - {fileID: 666310601077685965} + - {fileID: 1441599186880810299} + - {fileID: 7756486019373070334} + - {fileID: 8450999851469357805} + - {fileID: 820131175712678115} + - {fileID: 1374096470230771859} + - {fileID: 1311296531901772415} + - {fileID: 361955625143316041} + - {fileID: 8164459853255364420} m_Father: {fileID: 8929066535806527971} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1952,7 +3486,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -2639241166356525208, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} ---- !u!1 &4798317593925694784 +--- !u!1 &4935682043364959839 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1960,51 +3494,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1111985291033092106} - - component: {fileID: 6588069006331582451} - - component: {fileID: 9162720173678162652} + - component: {fileID: 638272822004058345} + - component: {fileID: 4976518407973768131} + - component: {fileID: 4736237263466706860} + - component: {fileID: 5195951334547293926} + - component: {fileID: 784668990957550829} m_Layer: 11 - m_Name: Cube (13) + m_Name: Sphere (3) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1111985291033092106 +--- !u!4 &638272822004058345 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4798317593925694784} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1602, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 4935682043364959839} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0707, y: -0.014200002, z: -0.004999988} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 6835482656366072579} - m_RootOrder: 1 + m_Father: {fileID: 434122983594594359} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6588069006331582451 -BoxCollider: +--- !u!33 &4976518407973768131 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4798317593925694784} + m_GameObject: {fileID: 4935682043364959839} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4736237263466706860 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4935682043364959839} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &5195951334547293926 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4935682043364959839} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &9162720173678162652 +--- !u!114 &784668990957550829 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4798317593925694784} + m_GameObject: {fileID: 4935682043364959839} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2017,7 +3603,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 2 + portPosition: 4 deviceId: deviceName: portModel: @@ -2030,7 +3616,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &4928572410033132606 +--- !u!1 &4995013575035202331 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2038,129 +3624,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5650423916277487732} - - component: {fileID: 1798290304761654581} - - component: {fileID: 1478656129225291590} + - component: {fileID: 181727036588366148} + - component: {fileID: 3325439154449928550} + - component: {fileID: 7889212990241905848} + - component: {fileID: 7842064303602255346} + - component: {fileID: 3426166626837367950} m_Layer: 11 - m_Name: Cube (33) + m_Name: Sphere m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5650423916277487732 +--- !u!4 &181727036588366148 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4928572410033132606} + m_GameObject: {fileID: 4995013575035202331} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.189, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1462550250744464128} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1798290304761654581 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4928572410033132606} - 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!114 &1478656129225291590 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4928572410033132606} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5125478047502315342 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5331467086635204251} - - component: {fileID: 88354031075447811} - - component: {fileID: 7355307930152039512} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5331467086635204251 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5125478047502315342} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2035, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.20350002, y: -0.014200002, z: -0.004400015} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 6835482656366072579} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &88354031075447811 -BoxCollider: +--- !u!33 &3325439154449928550 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5125478047502315342} + m_GameObject: {fileID: 4995013575035202331} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7889212990241905848 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4995013575035202331} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &7842064303602255346 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4995013575035202331} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7355307930152039512 +--- !u!114 &3426166626837367950 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5125478047502315342} + m_GameObject: {fileID: 4995013575035202331} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2186,7 +3746,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &5144828849711981359 +--- !u!1 &5195356644062705922 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2194,51 +3754,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4555436565216205348} - - component: {fileID: 5139510891554523202} - - component: {fileID: 2794871302485828179} + - component: {fileID: 6216831722753961678} + - component: {fileID: 8923591671630482313} + - component: {fileID: 9147766355449246534} + - component: {fileID: 4932067435324065079} + - component: {fileID: 7571591823561168777} m_Layer: 11 - m_Name: Cube (13) + m_Name: Sphere (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4555436565216205348 +--- !u!4 &6216831722753961678 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5144828849711981359} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1624, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 5195356644062705922} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.0655, y: -0.014200002, z: -0.004999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 5433370186872049287} - m_RootOrder: 1 + m_Father: {fileID: 434122983594594359} + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5139510891554523202 -BoxCollider: +--- !u!33 &8923591671630482313 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5144828849711981359} + m_GameObject: {fileID: 5195356644062705922} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &9147766355449246534 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5195356644062705922} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &4932067435324065079 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5195356644062705922} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2794871302485828179 +--- !u!114 &7571591823561168777 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5144828849711981359} + m_GameObject: {fileID: 5195356644062705922} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2251,7 +3863,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: + portPosition: 7 deviceId: deviceName: portModel: @@ -2264,7 +3876,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &5224544219386539810 +--- !u!1 &5382213911555901536 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2272,51 +3884,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2205233956872056179} - - component: {fileID: 9032733445043097843} - - component: {fileID: 1611862433463662634} + - component: {fileID: 8164459853255364420} + - component: {fileID: 8786925799219256995} + - component: {fileID: 871809575008364440} + - component: {fileID: 889510329006695168} + - component: {fileID: 4968617583623328997} m_Layer: 11 - m_Name: Cube (16) + m_Name: Sphere (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2205233956872056179 +--- !u!4 &8164459853255364420 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5224544219386539810} + m_GameObject: {fileID: 5382213911555901536} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.024100013, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.27859998, y: -0.014200002, z: -0.0037999898} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 6835482656366072579} - m_RootOrder: 4 + m_Father: {fileID: 1462550250744464128} + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9032733445043097843 -BoxCollider: +--- !u!33 &8786925799219256995 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5224544219386539810} + m_GameObject: {fileID: 5382213911555901536} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &871809575008364440 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5382213911555901536} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &889510329006695168 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5382213911555901536} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1611862433463662634 +--- !u!114 &4968617583623328997 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5224544219386539810} + m_GameObject: {fileID: 5382213911555901536} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2329,7 +3993,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 5 + portPosition: 12 deviceId: deviceName: portModel: @@ -2357,7 +4021,7 @@ GameObject: - component: {fileID: 3348992784358893461} - component: {fileID: 3847076018911750232} - component: {fileID: 4173506284997414378} - m_Layer: 8 + m_Layer: 13 m_Name: Object005 m_TagString: Untagged m_Icon: {fileID: 0} @@ -2376,18 +4040,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 7916363254244731630} - - {fileID: 4555436565216205348} - - {fileID: 8030333385130045917} - - {fileID: 1687773851335026210} - - {fileID: 3931373797583108576} - - {fileID: 780226098672750095} - - {fileID: 2320444808197185521} - - {fileID: 4658129022714043196} - - {fileID: 7652370717870866665} - - {fileID: 4605868579075728023} - - {fileID: 8333321723951548708} - - {fileID: 2765290132678375698} + - {fileID: 7296534492359485495} + - {fileID: 5429959739503960633} + - {fileID: 9085804987652119762} + - {fileID: 1276874954855927047} + - {fileID: 6749127692985582779} + - {fileID: 4573018466151405853} + - {fileID: 2833282480490394667} + - {fileID: 5326715860307681105} + - {fileID: 1827513161845658245} + - {fileID: 7330404826422811911} + - {fileID: 2952716126170145917} + - {fileID: 2324915195537448977} m_Father: {fileID: 8929066535806527971} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -2546,7 +4210,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: 9186633843763367028, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} ---- !u!1 &5490763180914311461 +--- !u!1 &5572814301892014068 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2554,285 +4218,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4605868579075728023} - - component: {fileID: 2839917790240377726} - - component: {fileID: 5273189421540516687} + - component: {fileID: 1642441945952281258} + - component: {fileID: 677914434984649600} + - component: {fileID: 8240380934754312351} + - component: {fileID: 4012835273031975870} + - component: {fileID: 8901440666583720927} m_Layer: 11 - m_Name: Cube (21) + m_Name: Sphere (7) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4605868579075728023 +--- !u!4 &1642441945952281258 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5490763180914311461} + m_GameObject: {fileID: 5572814301892014068} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.189, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.1087, y: -0.014200002, z: -0.0044} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 5433370186872049287} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2839917790240377726 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5490763180914311461} - 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!114 &5273189421540516687 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5490763180914311461} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5492079704057836903 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5880052375516535716} - - component: {fileID: 1678702970763512966} - - component: {fileID: 389130694848569357} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5880052375516535716 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5492079704057836903} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2808, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 434122983594594359} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1678702970763512966 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5492079704057836903} - 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!114 &389130694848569357 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5492079704057836903} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5563862218290607085 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4658129022714043196} - - component: {fileID: 5036525493492908154} - - component: {fileID: 2339988840951976907} - m_Layer: 11 - m_Name: Cube (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4658129022714043196 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5563862218290607085} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1065, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5433370186872049287} + m_Father: {fileID: 6835482656366072579} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5036525493492908154 -BoxCollider: +--- !u!33 &677914434984649600 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5563862218290607085} + m_GameObject: {fileID: 5572814301892014068} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8240380934754312351 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5572814301892014068} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &4012835273031975870 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5572814301892014068} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2339988840951976907 +--- !u!114 &8901440666583720927 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5563862218290607085} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5991869359002970617 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1088388408826054194} - - component: {fileID: 522834548420713024} - - component: {fileID: 2229054234704845581} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1088388408826054194 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5991869359002970617} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1087, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 434122983594594359} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &522834548420713024 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5991869359002970617} - 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!114 &2229054234704845581 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5991869359002970617} + m_GameObject: {fileID: 5572814301892014068} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2858,7 +4340,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6228744667237502253 +--- !u!1 &5698361566454548290 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2866,51 +4348,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 731826796658975833} - - component: {fileID: 6941440200305154855} - - component: {fileID: 2812325523397240204} + - component: {fileID: 2170849038975103478} + - component: {fileID: 8018753072792811219} + - component: {fileID: 2369970046981968536} + - component: {fileID: 6297109317066859038} + - component: {fileID: 8621720321350846028} m_Layer: 11 - m_Name: Cube (1) + m_Name: Sphere (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &731826796658975833 +--- !u!4 &2170849038975103478 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6228744667237502253} + m_GameObject: {fileID: 5698361566454548290} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1602, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.0655, y: -0.014200002, z: -0.0044} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 434122983594594359} - m_RootOrder: 1 + m_Father: {fileID: 6835482656366072579} + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6941440200305154855 -BoxCollider: +--- !u!33 &8018753072792811219 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6228744667237502253} + m_GameObject: {fileID: 5698361566454548290} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2369970046981968536 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5698361566454548290} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &6297109317066859038 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5698361566454548290} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2812325523397240204 +--- !u!114 &8621720321350846028 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6228744667237502253} + m_GameObject: {fileID: 5698361566454548290} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2923,7 +4457,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 2 + portPosition: 7 deviceId: deviceName: portModel: @@ -2936,7 +4470,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6268318115530217649 +--- !u!1 &6256455810864827882 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2944,51 +4478,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7916363254244731630} - - component: {fileID: 8268060674619961766} - - component: {fileID: 522545200781753275} + - component: {fileID: 1276874954855927047} + - component: {fileID: 6301111041631872386} + - component: {fileID: 6724264626015056468} + - component: {fileID: 4483285837106403462} + - component: {fileID: 2390501507560499339} m_Layer: 11 - m_Name: Cube (12) + m_Name: Sphere (3) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7916363254244731630 +--- !u!4 &1276874954855927047 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6268318115530217649} + m_GameObject: {fileID: 6256455810864827882} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2057, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.0729, y: -0.014200002, z: -0.0059000105} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 5433370186872049287} - m_RootOrder: 0 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8268060674619961766 -BoxCollider: +--- !u!33 &6301111041631872386 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6268318115530217649} + m_GameObject: {fileID: 6256455810864827882} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6724264626015056468 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6256455810864827882} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &4483285837106403462 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6256455810864827882} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &522545200781753275 +--- !u!114 &2390501507560499339 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6268318115530217649} + m_GameObject: {fileID: 6256455810864827882} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3001,7 +4587,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: + portPosition: 4 deviceId: deviceName: portModel: @@ -3103,7 +4689,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &6612556774611263202 +--- !u!1 &6576991471047058749 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3111,51 +4697,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1190688816569768842} - - component: {fileID: 6351700033400802655} - - component: {fileID: 1828498696599943805} + - component: {fileID: 5342095941915248238} + - component: {fileID: 8579645588486218918} + - component: {fileID: 7888019645115093669} + - component: {fileID: 6898617684550831550} + - component: {fileID: 3762975645061208056} m_Layer: 11 - m_Name: Cube (34) + m_Name: Sphere (10) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1190688816569768842 +--- !u!4 &5342095941915248238 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6612556774611263202} + m_GameObject: {fileID: 6576991471047058749} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2354, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.2376, y: -0.014200002, z: -0.0044} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1462550250744464128} + m_Father: {fileID: 6835482656366072579} m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6351700033400802655 -BoxCollider: +--- !u!33 &8579645588486218918 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6612556774611263202} + m_GameObject: {fileID: 6576991471047058749} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7888019645115093669 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6576991471047058749} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &6898617684550831550 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6576991471047058749} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1828498696599943805 +--- !u!114 &3762975645061208056 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6612556774611263202} + m_GameObject: {fileID: 6576991471047058749} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3426,7 +5064,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 1247351977123226646, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} ---- !u!1 &6842328883327023327 +--- !u!1 &6893380315669390872 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3434,363 +5072,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 9105128369467318423} - - component: {fileID: 203693108611764536} - - component: {fileID: 2182705163039233022} + - component: {fileID: 2324915195537448977} + - component: {fileID: 7271111487018636284} + - component: {fileID: 2625591004718723055} + - component: {fileID: 4332228998647534302} + - component: {fileID: 8852215276183608456} m_Layer: 11 - m_Name: Cube (5) + m_Name: Sphere (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &9105128369467318423 +--- !u!4 &2324915195537448977 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6842328883327023327} + m_GameObject: {fileID: 6893380315669390872} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0191, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.27860004, y: -0.014200002, z: -0.0059000105} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 434122983594594359} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &203693108611764536 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6842328883327023327} - 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!114 &2182705163039233022 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6842328883327023327} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6842537532944727697 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4779104168845097823} - - component: {fileID: 6961707245014105054} - - component: {fileID: 3999788255391938661} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4779104168845097823 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6842537532944727697} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2035, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 434122983594594359} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6961707245014105054 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6842537532944727697} - 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!114 &3999788255391938661 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6842537532944727697} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6895480637942648486 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8313931913532896088} - - component: {fileID: 4633441618995944059} - - component: {fileID: 3057484035194416273} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8313931913532896088 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6895480637942648486} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0191, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6835482656366072579} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4633441618995944059 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6895480637942648486} - 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!114 &3057484035194416273 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6895480637942648486} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6961658067452034490 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5508105932478735586} - - component: {fileID: 4512924454870234642} - - component: {fileID: 8491916066828614838} - m_Layer: 11 - m_Name: Cube (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5508105932478735586 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6961658067452034490} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0655, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6835482656366072579} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4512924454870234642 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6961658067452034490} - 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!114 &8491916066828614838 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6961658067452034490} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7038109574568547283 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5072975969933993463} - - component: {fileID: 8838805535154548592} - - component: {fileID: 4254551186696040568} - m_Layer: 11 - m_Name: Cube (23) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5072975969933993463 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7038109574568547283} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2808, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6835482656366072579} + m_Father: {fileID: 5433370186872049287} m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8838805535154548592 -BoxCollider: +--- !u!33 &7271111487018636284 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7038109574568547283} + m_GameObject: {fileID: 6893380315669390872} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2625591004718723055 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6893380315669390872} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &4332228998647534302 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6893380315669390872} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4254551186696040568 +--- !u!114 &8852215276183608456 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7038109574568547283} + m_GameObject: {fileID: 6893380315669390872} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3816,7 +5194,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7112524583297848505 +--- !u!1 &7007216101353862635 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3824,51 +5202,363 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 137398856142094645} - - component: {fileID: 8219556205714905798} - - component: {fileID: 492480077994624499} + - component: {fileID: 4573018466151405853} + - component: {fileID: 9107488214923020557} + - component: {fileID: 3240159529485772318} + - component: {fileID: 1604070360108461530} + - component: {fileID: 4599925405724043529} m_Layer: 11 - m_Name: Cube (4) + m_Name: Sphere (5) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &137398856142094645 +--- !u!4 &4573018466151405853 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7112524583297848505} + m_GameObject: {fileID: 7007216101353862635} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0241, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.016899996, y: -0.014200002, z: -0.005900003} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 434122983594594359} - m_RootOrder: 4 + m_Father: {fileID: 5433370186872049287} + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8219556205714905798 -BoxCollider: +--- !u!33 &9107488214923020557 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7112524583297848505} + m_GameObject: {fileID: 7007216101353862635} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3240159529485772318 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7007216101353862635} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &1604070360108461530 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7007216101353862635} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &492480077994624499 +--- !u!114 &4599925405724043529 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7112524583297848505} + m_GameObject: {fileID: 7007216101353862635} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7112446424797527608 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4021794257583160881} + - component: {fileID: 7162052699981035222} + - component: {fileID: 3593417410237415588} + - component: {fileID: 5476986672295378060} + - component: {fileID: 8577840462560754407} + m_Layer: 11 + m_Name: Sphere (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4021794257583160881 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7112446424797527608} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.11389999, y: -0.014200002, z: -0.0044} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 6835482656366072579} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7162052699981035222 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7112446424797527608} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3593417410237415588 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7112446424797527608} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &5476986672295378060 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7112446424797527608} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8577840462560754407 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7112446424797527608} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7208860744952718387 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 502045891298934144} + - component: {fileID: 4594568139258961686} + - component: {fileID: 1699947888741744598} + - component: {fileID: 4305128109703555194} + - component: {fileID: 4094728181846641810} + m_Layer: 11 + m_Name: Sphere (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &502045891298934144 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7208860744952718387} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.024099998, y: -0.014200002, z: -0.004999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 434122983594594359} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4594568139258961686 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7208860744952718387} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1699947888741744598 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7208860744952718387} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &4305128109703555194 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7208860744952718387} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4094728181846641810 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7208860744952718387} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3894,7 +5584,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7272672869116181858 +--- !u!1 &7389577961559732949 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3902,51 +5592,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8346778946281448119} - - component: {fileID: 6656336441372556681} - - component: {fileID: 8165592150423353339} + - component: {fileID: 2839309256098764545} + - component: {fileID: 3408442210134418183} + - component: {fileID: 4178669369555735367} + - component: {fileID: 2947168982379767507} + - component: {fileID: 7105328775720487927} m_Layer: 11 - m_Name: Cube (32) + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8346778946281448119 +--- !u!4 &2839309256098764545 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7272672869116181858} + m_GameObject: {fileID: 7389577961559732949} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1458, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.1912, y: -0.014200002, z: -0.0044} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1462550250744464128} - m_RootOrder: 8 + m_Father: {fileID: 6835482656366072579} + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6656336441372556681 -BoxCollider: +--- !u!33 &3408442210134418183 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7272672869116181858} + m_GameObject: {fileID: 7389577961559732949} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4178669369555735367 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7389577961559732949} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &2947168982379767507 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7389577961559732949} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8165592150423353339 +--- !u!114 &7105328775720487927 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7272672869116181858} + m_GameObject: {fileID: 7389577961559732949} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3959,7 +5701,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 9 + portPosition: 10 deviceId: deviceName: portModel: @@ -3972,7 +5714,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7354929131057441813 +--- !u!1 &7571346698621714485 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3980,51 +5722,233 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2940586963712800410} - - component: {fileID: 4103229187664709579} - - component: {fileID: 2938577246004130171} + - component: {fileID: 9085804987652119762} + - component: {fileID: 2056707363803063039} + - component: {fileID: 1630830238614085116} + - component: {fileID: 7956748121261467114} + - component: {fileID: 7686387523566925822} m_Layer: 11 - m_Name: Cube (24) + m_Name: Sphere (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2940586963712800410 +--- !u!4 &9085804987652119762 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7354929131057441813} + m_GameObject: {fileID: 7571346698621714485} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2057, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.1161, y: -0.014200002, z: -0.0059000105} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1462550250744464128} - m_RootOrder: 0 + m_Father: {fileID: 5433370186872049287} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4103229187664709579 -BoxCollider: +--- !u!33 &2056707363803063039 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7354929131057441813} + m_GameObject: {fileID: 7571346698621714485} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1630830238614085116 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7571346698621714485} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &7956748121261467114 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7571346698621714485} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2938577246004130171 +--- !u!114 &7686387523566925822 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7354929131057441813} + m_GameObject: {fileID: 7571346698621714485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7627374302027928558 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 423358469080753025} + - component: {fileID: 8992885276970375127} + - component: {fileID: 5971770048843282121} + - component: {fileID: 3236449055486591329} + - component: {fileID: 8201126901507705313} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &423358469080753025 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7627374302027928558} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.20350002, y: -0.014200002, z: -0.004999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 434122983594594359} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8992885276970375127 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7627374302027928558} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5971770048843282121 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7627374302027928558} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &3236449055486591329 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7627374302027928558} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8201126901507705313 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7627374302027928558} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4050,7 +5974,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7365107845732453726 +--- !u!1 &7637559783436688251 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4058,51 +5982,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 780226098672750095} - - component: {fileID: 4894059614734899556} - - component: {fileID: 1323508547831024705} + - component: {fileID: 7485134667420676901} + - component: {fileID: 7706804856830036553} + - component: {fileID: 4021055388758879829} + - component: {fileID: 2273099227258238030} + - component: {fileID: 484716232207089523} m_Layer: 11 - m_Name: Cube (17) + m_Name: Sphere m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &780226098672750095 +--- !u!4 &7485134667420676901 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7365107845732453726} + m_GameObject: {fileID: 7637559783436688251} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0169, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.2057, y: -0.014200002, z: -0.0037999898} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 5433370186872049287} - m_RootOrder: 5 + m_Father: {fileID: 1462550250744464128} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4894059614734899556 -BoxCollider: +--- !u!33 &7706804856830036553 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7365107845732453726} + m_GameObject: {fileID: 7637559783436688251} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4021055388758879829 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7637559783436688251} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &2273099227258238030 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7637559783436688251} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1323508547831024705 +--- !u!114 &484716232207089523 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7365107845732453726} + m_GameObject: {fileID: 7637559783436688251} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4115,7 +6091,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: + portPosition: 1 deviceId: deviceName: portModel: @@ -4128,7 +6104,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7390048332458161705 +--- !u!1 &7689790583329948698 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4136,51 +6112,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8333321723951548708} - - component: {fileID: 8854557260397605521} - - component: {fileID: 4864904913539710067} + - component: {fileID: 2952716126170145917} + - component: {fileID: 8714447340366795516} + - component: {fileID: 2402557263377715905} + - component: {fileID: 845786658561514245} + - component: {fileID: 8082663851648171284} m_Layer: 11 - m_Name: Cube (22) + m_Name: Sphere (10) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8333321723951548708 +--- !u!4 &2952716126170145917 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7390048332458161705} + m_GameObject: {fileID: 7689790583329948698} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2354, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.2354, y: -0.014200002, z: -0.0059000105} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 5433370186872049287} m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8854557260397605521 -BoxCollider: +--- !u!33 &8714447340366795516 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7390048332458161705} + m_GameObject: {fileID: 7689790583329948698} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2402557263377715905 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7689790583329948698} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &845786658561514245 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7689790583329948698} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4864904913539710067 +--- !u!114 &8082663851648171284 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7390048332458161705} + m_GameObject: {fileID: 7689790583329948698} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4193,7 +6221,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: + portPosition: 11 deviceId: deviceName: portModel: @@ -4206,7 +6234,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &8331495102785174106 +--- !u!1 &7711653227926779568 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4214,51 +6242,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1687773851335026210} - - component: {fileID: 349396897507309755} - - component: {fileID: 6189484587573004840} + - component: {fileID: 1374096470230771859} + - component: {fileID: 6495082915888194301} + - component: {fileID: 8727458631646313314} + - component: {fileID: 7532909915787750606} + - component: {fileID: 8079833675985347030} m_Layer: 11 - m_Name: Cube (15) + m_Name: Sphere (8) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1687773851335026210 +--- !u!4 &1374096470230771859 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8331495102785174106} + m_GameObject: {fileID: 7711653227926779568} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0729, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.1458, y: -0.014200002, z: -0.0037999898} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 5433370186872049287} - m_RootOrder: 3 + m_Father: {fileID: 1462550250744464128} + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &349396897507309755 -BoxCollider: +--- !u!33 &6495082915888194301 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8331495102785174106} + m_GameObject: {fileID: 7711653227926779568} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8727458631646313314 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7711653227926779568} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &7532909915787750606 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7711653227926779568} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6189484587573004840 +--- !u!114 &8079833675985347030 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8331495102785174106} + m_GameObject: {fileID: 7711653227926779568} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4271,7 +6351,267 @@ MonoBehaviour: portCode: portName: portType: - portPosition: + portPosition: 9 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7835016746199584502 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5147321248349931692} + - component: {fileID: 7542891456467732749} + - component: {fileID: 7089681648483552685} + - component: {fileID: 72503759119923716} + - component: {fileID: 713477171840563423} + m_Layer: 11 + m_Name: Sphere (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5147321248349931692 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7835016746199584502} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.148, y: -0.014200002, z: -0.004999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 434122983594594359} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7542891456467732749 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7835016746199584502} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7089681648483552685 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7835016746199584502} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &72503759119923716 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7835016746199584502} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &713477171840563423 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7835016746199584502} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 9 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8335208678466072486 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4149394817607538342} + - component: {fileID: 4576442379784357457} + - component: {fileID: 8931524566282855099} + - component: {fileID: 4219073331627721817} + - component: {fileID: 1950833976264500258} + m_Layer: 11 + m_Name: Sphere (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4149394817607538342 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8335208678466072486} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.148, y: -0.014200002, z: -0.0044} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 6835482656366072579} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4576442379784357457 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8335208678466072486} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8931524566282855099 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8335208678466072486} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &4219073331627721817 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8335208678466072486} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1950833976264500258 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8335208678466072486} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 9 deviceId: deviceName: portModel: @@ -4299,7 +6639,7 @@ GameObject: - component: {fileID: 3404027593722066560} - component: {fileID: 961987903663548946} - component: {fileID: 9032861046626274243} - m_Layer: 8 + m_Layer: 13 m_Name: Object002 m_TagString: Untagged m_Icon: {fileID: 0} @@ -4318,18 +6658,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 4779104168845097823} - - {fileID: 731826796658975833} - - {fileID: 7805725031558220348} - - {fileID: 9114579581690390571} - - {fileID: 137398856142094645} - - {fileID: 9105128369467318423} - - {fileID: 264213427253717294} - - {fileID: 1088388408826054194} - - {fileID: 5795954215439872485} - - {fileID: 6834420168627527224} - - {fileID: 4088594508611842701} - - {fileID: 5880052375516535716} + - {fileID: 423358469080753025} + - {fileID: 2099110270108001029} + - {fileID: 2730134512538252549} + - {fileID: 638272822004058345} + - {fileID: 502045891298934144} + - {fileID: 2282658184373647617} + - {fileID: 6216831722753961678} + - {fileID: 5103135383619948335} + - {fileID: 5147321248349931692} + - {fileID: 7813516284638191785} + - {fileID: 7418646731813084474} + - {fileID: 7022342286115927698} m_Father: {fileID: 8929066535806527971} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -4488,7 +6828,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -3996760141626369306, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} ---- !u!1 &8631196219548478152 +--- !u!1 &8492406681672307356 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4496,51 +6836,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6834420168627527224} - - component: {fileID: 4681443291212800594} - - component: {fileID: 712891301487454134} + - component: {fileID: 6749127692985582779} + - component: {fileID: 8172113309932269250} + - component: {fileID: 7370019079288261794} + - component: {fileID: 4641858115348967597} + - component: {fileID: 2302829576283116491} m_Layer: 11 - m_Name: Cube (9) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6834420168627527224 +--- !u!4 &6749127692985582779 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8631196219548478152} + m_GameObject: {fileID: 8492406681672307356} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1912, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.026299998, y: -0.014200002, z: -0.0059000105} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 434122983594594359} - m_RootOrder: 9 + m_Father: {fileID: 5433370186872049287} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4681443291212800594 -BoxCollider: +--- !u!33 &8172113309932269250 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8631196219548478152} + m_GameObject: {fileID: 8492406681672307356} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7370019079288261794 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8492406681672307356} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &4641858115348967597 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8492406681672307356} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &712891301487454134 +--- !u!114 &2302829576283116491 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8631196219548478152} + m_GameObject: {fileID: 8492406681672307356} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4553,7 +6945,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 10 + portPosition: 5 deviceId: deviceName: portModel: @@ -4566,7 +6958,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &8900347584727785245 +--- !u!1 &9102792404020048354 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4574,51 +6966,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7725652193201052755} - - component: {fileID: 4261461329542383678} - - component: {fileID: 4194638770966817757} + - component: {fileID: 3399758215449910130} + - component: {fileID: 8088777651099206049} + - component: {fileID: 4458622310876641691} + - component: {fileID: 843327415456562958} + - component: {fileID: 7631995611981786548} m_Layer: 11 - m_Name: Cube (27) + m_Name: Sphere (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7725652193201052755 +--- !u!4 &3399758215449910130 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8900347584727785245} + m_GameObject: {fileID: 9102792404020048354} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0729, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.16240002, y: -0.014200002, z: -0.0037999898} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 1462550250744464128} - m_RootOrder: 3 + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4261461329542383678 -BoxCollider: +--- !u!33 &8088777651099206049 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8900347584727785245} + m_GameObject: {fileID: 9102792404020048354} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4458622310876641691 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9102792404020048354} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &843327415456562958 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9102792404020048354} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4194638770966817757 +--- !u!114 &7631995611981786548 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8900347584727785245} + m_GameObject: {fileID: 9102792404020048354} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4631,7 +7075,137 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 4 + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &9137142217131240171 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3538121810874153339} + - component: {fileID: 2223098628793396014} + - component: {fileID: 6628349944471529410} + - component: {fileID: 2441878024311275049} + - component: {fileID: 168166824218323523} + m_Layer: 11 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3538121810874153339 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9137142217131240171} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0191, y: -0.014200002, z: -0.0043999963} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 6835482656366072579} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2223098628793396014 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9137142217131240171} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6628349944471529410 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9137142217131240171} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &2441878024311275049 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9137142217131240171} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &168166824218323523 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9137142217131240171} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 deviceId: deviceName: portModel: @@ -4659,7 +7233,7 @@ GameObject: - component: {fileID: 4638908700541124301} - component: {fileID: 1419722890937983267} - component: {fileID: 5926172568007086264} - m_Layer: 8 + m_Layer: 13 m_Name: Object004 m_TagString: Untagged m_Icon: {fileID: 0} @@ -4678,18 +7252,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 5331467086635204251} - - {fileID: 1111985291033092106} - - {fileID: 1115908774567838735} - - {fileID: 7117354771964580405} - - {fileID: 2205233956872056179} - - {fileID: 8313931913532896088} - - {fileID: 5508105932478735586} - - {fileID: 2524741719698716316} - - {fileID: 4963627421155511695} - - {fileID: 845501031763293664} - - {fileID: 8000697507011598267} - - {fileID: 5072975969933993463} + - {fileID: 181727036588366148} + - {fileID: 3592516803644195733} + - {fileID: 4021794257583160881} + - {fileID: 6700801916508284755} + - {fileID: 3957334945271604345} + - {fileID: 3538121810874153339} + - {fileID: 2170849038975103478} + - {fileID: 1642441945952281258} + - {fileID: 4149394817607538342} + - {fileID: 2839309256098764545} + - {fileID: 5342095941915248238} + - {fileID: 52621314816570685} m_Father: {fileID: 8929066535806527971} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -4848,84 +7422,6 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -8113768720884857512, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} ---- !u!1 &9156845239795647663 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2833875473805234494} - - component: {fileID: 5838260470145655476} - - component: {fileID: 566873272719468264} - m_Layer: 11 - m_Name: Cube (28) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2833875473805234494 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9156845239795647663} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0263, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1462550250744464128} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5838260470145655476 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9156845239795647663} - 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!114 &566873272719468264 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9156845239795647663} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: --- !u!1 &9171653413042027283 GameObject: m_ObjectHideFlags: 0 @@ -4935,6 +7431,7 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1457436809453128185} + - component: {fileID: 1392741118749144003} m_Layer: 8 m_Name: "\u951A\u70B9" m_TagString: Untagged @@ -4957,3 +7454,43 @@ Transform: m_Father: {fileID: 8929066535806527971} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1392741118749144003 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9171653413042027283} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 08598a3519fbad24195f9a93c4b44600, type: 3} + m_Name: + m_EditorClassIdentifier: + a: {fileID: 0} + b: {fileID: 0} + A: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + B: + - {fileID: 7485134667420676901} + - {fileID: 3399758215449910130} + - {fileID: 1506383791881166786} + - {fileID: 666310601077685965} + - {fileID: 1441599186880810299} + - {fileID: 7756486019373070334} + - {fileID: 8450999851469357805} + - {fileID: 820131175712678115} + - {fileID: 1374096470230771859} + - {fileID: 1311296531901772415} + - {fileID: 361955625143316041} + - {fileID: 8164459853255364420} diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/92.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/92.prefab index fd5ba0c41..8c755664e 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/92.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/92.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &233345813700270480 +--- !u!1 &56090831012450253 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,51 +8,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1983097928530780977} - - component: {fileID: 6949313061414492688} - - component: {fileID: 1259128750120571942} + - component: {fileID: 9126483804641529398} + - component: {fileID: 4818004520756440961} + - component: {fileID: 5856845767904229096} m_Layer: 11 - m_Name: Cube (63) + m_Name: Sphere (5) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1983097928530780977 +--- !u!4 &9126483804641529398 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 233345813700270480} + m_GameObject: {fileID: 56090831012450253} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0693, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.017800003, y: -0.014200002, z: -0.0043999925} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2422483358618234071} - m_RootOrder: 3 + m_Father: {fileID: 5788891714345457339} + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6949313061414492688 -BoxCollider: +--- !u!135 &4818004520756440961 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 233345813700270480} + m_GameObject: {fileID: 56090831012450253} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1259128750120571942 +--- !u!114 &5856845767904229096 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 233345813700270480} + m_GameObject: {fileID: 56090831012450253} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -65,85 +65,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &340177321609488534 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2726609369122085213} - - component: {fileID: 902573878774915913} - - component: {fileID: 1953478840153021910} - m_Layer: 11 - m_Name: Cube (25) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2726609369122085213 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 340177321609488534} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1588, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1116178602514176828} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &902573878774915913 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 340177321609488534} - 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!114 &1953478840153021910 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 340177321609488534} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 + portPosition: 6 deviceId: deviceName: portModel: @@ -171,7 +93,7 @@ GameObject: - component: {fileID: 8226882711532056945} - component: {fileID: 2404501868775413694} - component: {fileID: 9032147848957401174} - m_Layer: 8 + m_Layer: 13 m_Name: Object006 m_TagString: Untagged m_Icon: {fileID: 0} @@ -190,18 +112,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 5757283646124553475} - - {fileID: 1899681908371119670} - - {fileID: 2954314879958608395} - - {fileID: 4889362347755219584} - - {fileID: 2823679047645120903} - - {fileID: 651628107216904950} - - {fileID: 5872079125406068295} - - {fileID: 5384924794318455437} - - {fileID: 1333663720490321148} - - {fileID: 5315209091851945059} - - {fileID: 5296559148930058256} - - {fileID: 2338536309552519409} + - {fileID: 329387822980982420} + - {fileID: 7873135090845694741} + - {fileID: 391636442131912281} + - {fileID: 3605274825726300548} + - {fileID: 5799833891658410346} + - {fileID: 9126483804641529398} + - {fileID: 7121168072671916570} + - {fileID: 8376303875428506086} + - {fileID: 8108014341238421789} + - {fileID: 6164634375565417785} + - {fileID: 7768637468282495882} + - {fileID: 243710225277656546} m_Father: {fileID: 1794715343052336818} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -360,7 +282,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -2639241166356525208, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!1 &445923754175632878 +--- !u!1 &515020146543814156 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -368,51 +290,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4947829751671840846} - - component: {fileID: 5036395777915433375} - - component: {fileID: 4048429425103396521} + - component: {fileID: 1814628234821569482} + - component: {fileID: 973439396518014772} + - component: {fileID: 4460397991140630843} m_Layer: 11 - m_Name: Cube (20) + m_Name: Sphere (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4947829751671840846 +--- !u!4 &1814628234821569482 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 445923754175632878} + m_GameObject: {fileID: 515020146543814156} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1494, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.0639, y: -0.014200002, z: -0.0037999973} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1929441288969520824} - m_RootOrder: 8 + m_Father: {fileID: 1116178602514176828} + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5036395777915433375 -BoxCollider: +--- !u!135 &973439396518014772 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 445923754175632878} + m_GameObject: {fileID: 515020146543814156} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4048429425103396521 +--- !u!114 &4460397991140630843 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 445923754175632878} + m_GameObject: {fileID: 515020146543814156} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -425,7 +347,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 9 + portPosition: 7 deviceId: deviceName: portModel: @@ -438,7 +360,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &686782194075591445 +--- !u!1 &836776042918183248 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -446,51 +368,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1899681908371119670} - - component: {fileID: 7734541266068797255} - - component: {fileID: 101338985054891790} + - component: {fileID: 4866117174039284265} + - component: {fileID: 3065181990719773866} + - component: {fileID: 536626795395606435} m_Layer: 11 - m_Name: Cube (37) + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1899681908371119670 +--- !u!4 &4866117174039284265 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 686782194075591445} + m_GameObject: {fileID: 836776042918183248} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1588, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.19260001, y: -0.014200002, z: -0.0037999973} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 5788891714345457339} - m_RootOrder: 1 + m_Father: {fileID: 1116178602514176828} + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7734541266068797255 -BoxCollider: +--- !u!135 &3065181990719773866 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 686782194075591445} + m_GameObject: {fileID: 836776042918183248} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &101338985054891790 +--- !u!114 &536626795395606435 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 686782194075591445} + m_GameObject: {fileID: 836776042918183248} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -503,7 +425,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 2 + portPosition: 10 deviceId: deviceName: portModel: @@ -516,7 +438,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &905469448542083258 +--- !u!1 &887697148616247656 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -524,51 +446,207 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2022007275255954477} - - component: {fileID: 5998237577232589680} - - component: {fileID: 174060419216725021} + - component: {fileID: 2628087308968623359} + - component: {fileID: 7450239312938619536} + - component: {fileID: 7442552956693245361} m_Layer: 11 - m_Name: Cube (1) + m_Name: Sphere (5) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2022007275255954477 +--- !u!4 &2628087308968623359 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 905469448542083258} + m_GameObject: {fileID: 887697148616247656} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1558, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.017799996, y: -0.014200002, z: -0.0037999973} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1116178602514176828} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7450239312938619536 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 887697148616247656} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7442552956693245361 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 887697148616247656} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &950214172782572760 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2196484244889125004} + - component: {fileID: 1746360396906079286} + - component: {fileID: 426823410773271015} + m_Layer: 11 + m_Name: Sphere (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2196484244889125004 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950214172782572760} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.06390001, y: -0.014200002, z: -0.0048999786} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 3930927260046231044} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1746360396906079286 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950214172782572760} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &426823410773271015 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950214172782572760} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1054865796614479784 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1855969462347208677} + - component: {fileID: 1231728969978162430} + - component: {fileID: 3024982172467616716} + m_Layer: 11 + m_Name: Sphere (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1855969462347208677 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1054865796614479784} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.1117, y: -0.013999999, z: -0.003999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 4763703869370140044} - m_RootOrder: 1 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5998237577232589680 -BoxCollider: +--- !u!135 &1231728969978162430 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 905469448542083258} + m_GameObject: {fileID: 1054865796614479784} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &174060419216725021 +--- !u!114 &3024982172467616716 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 905469448542083258} + m_GameObject: {fileID: 1054865796614479784} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -581,163 +659,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &930613363264340584 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1333663720490321148} - - component: {fileID: 242615274246619121} - - component: {fileID: 6836391803597018530} - m_Layer: 11 - m_Name: Cube (44) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1333663720490321148 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 930613363264340584} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1494, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5788891714345457339} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &242615274246619121 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 930613363264340584} - 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!114 &6836391803597018530 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 930613363264340584} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &940514522022953223 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3261658753933114805} - - component: {fileID: 8065470487098807489} - - component: {fileID: 6217523150966665114} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3261658753933114805 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 940514522022953223} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.024, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1929441288969520824} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8065470487098807489 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 940514522022953223} - 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!114 &6217523150966665114 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 940514522022953223} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 + portPosition: 3 deviceId: deviceName: portModel: @@ -765,7 +687,7 @@ GameObject: - component: {fileID: 8321846103652135528} - component: {fileID: 3046744981053917942} - component: {fileID: 3082977720569851791} - m_Layer: 8 + m_Layer: 13 m_Name: Object005 m_TagString: Untagged m_Icon: {fileID: 0} @@ -784,18 +706,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 5316387824494520998} - - {fileID: 2726609369122085213} - - {fileID: 5343902325313852762} - - {fileID: 8553376669644264785} - - {fileID: 1994130001471878946} - - {fileID: 1752984943632728699} - - {fileID: 49678600407209226} - - {fileID: 4334998463189252452} - - {fileID: 302798195189197586} - - {fileID: 8967887233033293846} - - {fileID: 2387399627735431221} - - {fileID: 5178230643259935600} + - {fileID: 8495705246382067134} + - {fileID: 5759486080670872693} + - {fileID: 6483935847359241580} + - {fileID: 124423757543545928} + - {fileID: 3615493098993768704} + - {fileID: 2628087308968623359} + - {fileID: 1814628234821569482} + - {fileID: 3156170350060976318} + - {fileID: 6796279301627592739} + - {fileID: 4866117174039284265} + - {fileID: 6722017097780247761} + - {fileID: 716073480673413529} m_Father: {fileID: 1794715343052336818} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -954,7 +876,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: 9186633843763367028, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!1 &1313070427294640049 +--- !u!1 &1165150192955286970 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -962,51 +884,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2338536309552519409} - - component: {fileID: 6283008296172294151} - - component: {fileID: 305093788100018295} + - component: {fileID: 716073480673413529} + - component: {fileID: 7106025779977627662} + - component: {fileID: 8258080571404502665} m_Layer: 11 - m_Name: Cube (47) + m_Name: Sphere (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2338536309552519409 +--- !u!4 &716073480673413529 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1313070427294640049} + m_GameObject: {fileID: 1165150192955286970} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2754, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.2754, y: -0.014200002, z: -0.0038000047} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 5788891714345457339} + m_Father: {fileID: 1116178602514176828} m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6283008296172294151 -BoxCollider: +--- !u!135 &7106025779977627662 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1313070427294640049} + m_GameObject: {fileID: 1165150192955286970} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &305093788100018295 +--- !u!114 &8258080571404502665 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1313070427294640049} + m_GameObject: {fileID: 1165150192955286970} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1032,7 +954,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &1484228826742610003 +--- !u!1 &1231523422717542461 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1040,285 +962,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3508084003914324091} - - component: {fileID: 4911125189412850607} - - component: {fileID: 2598190070053706958} + - component: {fileID: 6206304289928810339} + - component: {fileID: 2451061318748984445} + - component: {fileID: 838645471214152656} m_Layer: 11 - m_Name: Cube (7) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3508084003914324091 +--- !u!4 &6206304289928810339 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1484228826742610003} + m_GameObject: {fileID: 1231523422717542461} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1038, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.024000004, y: -0.014200002, z: -0.0048999786} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 4763703869370140044} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4911125189412850607 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1484228826742610003} - 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!114 &2598190070053706958 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1484228826742610003} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1657293693148079230 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7138000063032715468} - - component: {fileID: 9075967888371912271} - - component: {fileID: 2721882990796189498} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7138000063032715468 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1657293693148079230} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2747, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4763703869370140044} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9075967888371912271 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1657293693148079230} - 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!114 &2721882990796189498 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1657293693148079230} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1711381003034512295 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3389410312371278593} - - component: {fileID: 3628955291144749805} - - component: {fileID: 6841411893792789620} - m_Layer: 11 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3389410312371278593 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1711381003034512295} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.23577, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1929441288969520824} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3628955291144749805 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1711381003034512295} - 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!114 &6841411893792789620 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1711381003034512295} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1834244849110368290 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2753550427263249660} - - component: {fileID: 5108168238709151714} - - component: {fileID: 5789973635563899997} - m_Layer: 11 - m_Name: Cube (64) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2753550427263249660 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1834244849110368290} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.024, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2422483358618234071} + m_Father: {fileID: 3930927260046231044} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5108168238709151714 -BoxCollider: +--- !u!135 &2451061318748984445 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1834244849110368290} + m_GameObject: {fileID: 1231523422717542461} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5789973635563899997 +--- !u!114 &838645471214152656 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1834244849110368290} + m_GameObject: {fileID: 1231523422717542461} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1344,7 +1032,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2065566738773632023 +--- !u!1 &1270852689452130801 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1352,51 +1040,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8967887233033293846} - - component: {fileID: 5472669792509366949} - - component: {fileID: 4530314138282131367} + - component: {fileID: 3986621070561115839} + - component: {fileID: 3192408758871713072} + - component: {fileID: 6877540546169347215} m_Layer: 11 - m_Name: Cube (33) + m_Name: Sphere (8) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8967887233033293846 +--- !u!4 &3986621070561115839 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2065566738773632023} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1926, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 1270852689452130801} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.1478, y: -0.013999999, z: -0.003999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1116178602514176828} - m_RootOrder: 9 + m_Father: {fileID: 4763703869370140044} + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5472669792509366949 -BoxCollider: +--- !u!135 &3192408758871713072 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2065566738773632023} + m_GameObject: {fileID: 1270852689452130801} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4530314138282131367 +--- !u!114 &6877540546169347215 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2065566738773632023} + m_GameObject: {fileID: 1270852689452130801} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1409,7 +1097,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 10 + portPosition: 9 deviceId: deviceName: portModel: @@ -1422,7 +1110,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2185486561059467952 +--- !u!1 &1475558981433076936 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1430,51 +1118,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8503025852538173084} - - component: {fileID: 6267265477977809436} - - component: {fileID: 8379894672321504435} + - component: {fileID: 3499255317781149117} + - component: {fileID: 4993608713633191050} + - component: {fileID: 2733959254203515562} m_Layer: 11 - m_Name: Cube (51) + m_Name: Sphere (3) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8503025852538173084 +--- !u!4 &3499255317781149117 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2185486561059467952} + m_GameObject: {fileID: 1475558981433076936} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0693, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.0693, y: -0.014200002, z: -0.0048999786} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 3930927260046231044} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6267265477977809436 -BoxCollider: +--- !u!135 &4993608713633191050 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2185486561059467952} + m_GameObject: {fileID: 1475558981433076936} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8379894672321504435 +--- !u!114 &2733959254203515562 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2185486561059467952} + m_GameObject: {fileID: 1475558981433076936} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1500,6 +1188,552 @@ MonoBehaviour: remark: createTime: createName: +--- !u!1 &1571110037506052367 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2095326503947555578} + - component: {fileID: 1546075785763429279} + - component: {fileID: 8748678092719970730} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2095326503947555578 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571110037506052367} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2021, y: -0.014200002, z: -0.0033000112} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1929441288969520824} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1546075785763429279 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571110037506052367} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8748678092719970730 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571110037506052367} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1578647822000880895 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7121168072671916570} + - component: {fileID: 2263303021124420604} + - component: {fileID: 5860142408852593464} + m_Layer: 11 + m_Name: Sphere (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7121168072671916570 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1578647822000880895} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.06390001, y: -0.014200002, z: -0.0043999925} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5788891714345457339} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2263303021124420604 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1578647822000880895} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5860142408852593464 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1578647822000880895} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1810290427040563794 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 124423757543545928} + - component: {fileID: 6854216060488738193} + - component: {fileID: 1553814494539047744} + m_Layer: 11 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &124423757543545928 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1810290427040563794} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.0693, y: -0.014200002, z: -0.0037999973} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1116178602514176828} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6854216060488738193 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1810290427040563794} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1553814494539047744 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1810290427040563794} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1831836552827619924 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6722017097780247761} + - component: {fileID: 6175296156222386015} + - component: {fileID: 7027637149564765395} + m_Layer: 11 + m_Name: Sphere (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6722017097780247761 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1831836552827619924} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2358, y: -0.014200002, z: -0.0038000047} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1116178602514176828} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6175296156222386015 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1831836552827619924} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7027637149564765395 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1831836552827619924} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1844478643434937988 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8336945426382849446} + - component: {fileID: 1191254720401040727} + - component: {fileID: 29118691872052153} + m_Layer: 11 + m_Name: Sphere (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8336945426382849446 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844478643434937988} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.14939998, y: -0.014200002, z: -0.0048999786} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 3930927260046231044} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1191254720401040727 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844478643434937988} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &29118691872052153 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844478643434937988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 9 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2020615812509259465 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5039370057784881314} + - component: {fileID: 5886815401100752676} + - component: {fileID: 6147661264294866896} + m_Layer: 11 + m_Name: Sphere (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5039370057784881314 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2020615812509259465} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.1125, y: -0.014200002, z: -0.0033000112} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1929441288969520824} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &5886815401100752676 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2020615812509259465} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6147661264294866896 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2020615812509259465} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2091075057978642508 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8376303875428506086} + - component: {fileID: 1147515821591430967} + - component: {fileID: 1794308042852926826} + m_Layer: 11 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8376303875428506086 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091075057978642508} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.1072, y: -0.014200002, z: -0.0043999925} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5788891714345457339} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1147515821591430967 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091075057978642508} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1794308042852926826 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091075057978642508} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: --- !u!1 &2213305957667673440 GameObject: m_ObjectHideFlags: 0 @@ -1589,7 +1823,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &2387613748054197841 +--- !u!1 &2378479589554733315 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1597,51 +1831,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5315209091851945059} - - component: {fileID: 2024299200389261190} - - component: {fileID: 4564907357937918244} + - component: {fileID: 7644450856472740051} + - component: {fileID: 27716888448054200} + - component: {fileID: 3736379320459028785} m_Layer: 11 - m_Name: Cube (45) + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5315209091851945059 +--- !u!4 &7644450856472740051 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2387613748054197841} + m_GameObject: {fileID: 2378479589554733315} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.19260001, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.1926, y: -0.014200002, z: -0.0033000112} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 5788891714345457339} + m_Father: {fileID: 1929441288969520824} m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2024299200389261190 -BoxCollider: +--- !u!135 &27716888448054200 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2387613748054197841} + m_GameObject: {fileID: 2378479589554733315} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4564907357937918244 +--- !u!114 &3736379320459028785 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2387613748054197841} + m_GameObject: {fileID: 2378479589554733315} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1667,7 +1901,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2553250367217582657 +--- !u!1 &2551423746949059642 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1675,51 +1909,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5872079125406068295} - - component: {fileID: 2667516970317137432} - - component: {fileID: 4360510805887239046} + - component: {fileID: 6164634375565417785} + - component: {fileID: 8887172204793060109} + - component: {fileID: 8552181103381963660} m_Layer: 11 - m_Name: Cube (42) + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5872079125406068295 +--- !u!4 &6164634375565417785 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2553250367217582657} + m_GameObject: {fileID: 2551423746949059642} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0639, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.1926, y: -0.014200002, z: -0.0043999925} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 5788891714345457339} - m_RootOrder: 6 + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2667516970317137432 -BoxCollider: +--- !u!135 &8887172204793060109 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2553250367217582657} + m_GameObject: {fileID: 2551423746949059642} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4360510805887239046 +--- !u!114 &8552181103381963660 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2553250367217582657} + m_GameObject: {fileID: 2551423746949059642} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1732,7 +1966,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 7 + portPosition: 10 deviceId: deviceName: portModel: @@ -1745,7 +1979,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2615746314782733247 +--- !u!1 &2570689409206234711 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1753,129 +1987,441 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5343902325313852762} - - component: {fileID: 7930927936681785272} - - component: {fileID: 7966823715960362821} + - component: {fileID: 1603201790597025861} + - component: {fileID: 9097295754815394489} + - component: {fileID: 2682545316904898871} m_Layer: 11 - m_Name: Cube (26) + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5343902325313852762 +--- !u!4 &1603201790597025861 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2615746314782733247} + m_GameObject: {fileID: 2570689409206234711} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1125, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.1926, y: -0.014200002, z: -0.0048999786} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 3930927260046231044} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &9097295754815394489 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2570689409206234711} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2682545316904898871 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2570689409206234711} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 10 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2595857245101895249 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7073992007745178875} + - component: {fileID: 2934286084359672824} + - component: {fileID: 1028542734693263466} + m_Layer: 11 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7073992007745178875 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2595857245101895249} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.1072, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2422483358618234071} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2934286084359672824 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2595857245101895249} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1028542734693263466 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2595857245101895249} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2678907515400051392 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4610149660436253286} + - component: {fileID: 8715085065611250602} + - component: {fileID: 3828488364045361304} + m_Layer: 11 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4610149660436253286 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2678907515400051392} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.01782, y: -0.014200002, z: -0.0033000037} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1929441288969520824} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &8715085065611250602 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2678907515400051392} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3828488364045361304 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2678907515400051392} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2831399127253440946 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1337270356774373375} + - component: {fileID: 7829142806668100886} + - component: {fileID: 7841217787105179487} + m_Layer: 11 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1337270356774373375 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2831399127253440946} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.10720001, y: -0.014200002, z: -0.0048999786} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 3930927260046231044} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7829142806668100886 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2831399127253440946} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7841217787105179487 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2831399127253440946} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2857124773366374837 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7768637468282495882} + - component: {fileID: 8916547937600553389} + - component: {fileID: 7578204036176997414} + m_Layer: 11 + m_Name: Sphere (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7768637468282495882 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2857124773366374837} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.23580001, y: -0.014200002, z: -0.0044} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5788891714345457339} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &8916547937600553389 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2857124773366374837} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7578204036176997414 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2857124773366374837} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3182665431950689333 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6796279301627592739} + - component: {fileID: 9192843489844956037} + - component: {fileID: 1489350584702632864} + m_Layer: 11 + m_Name: Sphere (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6796279301627592739 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3182665431950689333} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.1494, y: -0.014200002, z: -0.0037999973} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 1116178602514176828} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7930927936681785272 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2615746314782733247} - 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!114 &7966823715960362821 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2615746314782733247} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2669315620818364409 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5378365049727354396} - - component: {fileID: 3255139657835034264} - - component: {fileID: 7247186356402140958} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5378365049727354396 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2669315620818364409} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1478, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4763703869370140044} m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3255139657835034264 -BoxCollider: +--- !u!135 &9192843489844956037 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2669315620818364409} + m_GameObject: {fileID: 3182665431950689333} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7247186356402140958 +--- !u!114 &1489350584702632864 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2669315620818364409} + m_GameObject: {fileID: 3182665431950689333} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1916,7 +2462,7 @@ GameObject: - component: {fileID: 5514793186580738394} - component: {fileID: 458399355061017521} - component: {fileID: 8746942799935754536} - m_Layer: 8 + m_Layer: 13 m_Name: Object007 m_TagString: Untagged m_Icon: {fileID: 0} @@ -1935,18 +2481,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 3374938038603344552} - - {fileID: 6050146676625308161} - - {fileID: 5917691404838395467} - - {fileID: 8503025852538173084} - - {fileID: 5844582467016777499} - - {fileID: 5500736354033870080} - - {fileID: 357753466344779044} - - {fileID: 522723024270682946} - - {fileID: 3742059626461988481} - - {fileID: 8687438993933357542} - - {fileID: 3216851306333196823} - - {fileID: 3368879119626716229} + - {fileID: 1114337568138927948} + - {fileID: 46652882684772903} + - {fileID: 5248747782013549980} + - {fileID: 3499255317781149117} + - {fileID: 6206304289928810339} + - {fileID: 7419642139735390423} + - {fileID: 2196484244889125004} + - {fileID: 1337270356774373375} + - {fileID: 8336945426382849446} + - {fileID: 1603201790597025861} + - {fileID: 4521207879741116566} + - {fileID: 8692060288196325607} m_Father: {fileID: 1794715343052336818} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -2105,7 +2651,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: 7733717212360752527, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!1 &3459174478417616952 +--- !u!1 &3373441726161063321 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2113,129 +2659,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5178230643259935600} - - component: {fileID: 4089884808753507886} - - component: {fileID: 8358794636176781738} + - component: {fileID: 5799833891658410346} + - component: {fileID: 2328498725664317364} + - component: {fileID: 5647078346466646905} m_Layer: 11 - m_Name: Cube (35) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5178230643259935600 +--- !u!4 &5799833891658410346 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3459174478417616952} + m_GameObject: {fileID: 3373441726161063321} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2754, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1116178602514176828} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4089884808753507886 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3459174478417616952} - 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!114 &8358794636176781738 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3459174478417616952} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3537763544888100912 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5384924794318455437} - - component: {fileID: 4394918707768609054} - - component: {fileID: 3529320788954778696} - m_Layer: 11 - m_Name: Cube (43) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5384924794318455437 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3537763544888100912} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1072, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.024, y: -0.014200002, z: -0.0044} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 5788891714345457339} - m_RootOrder: 7 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4394918707768609054 -BoxCollider: +--- !u!135 &2328498725664317364 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3537763544888100912} + m_GameObject: {fileID: 3373441726161063321} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3529320788954778696 +--- !u!114 &5647078346466646905 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3537763544888100912} + m_GameObject: {fileID: 3373441726161063321} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2248,7 +2716,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 8 + portPosition: 5 deviceId: deviceName: portModel: @@ -2261,7 +2729,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3584906188415581103 +--- !u!1 &3386198699081024258 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2269,51 +2737,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 112111801270798582} - - component: {fileID: 7963128473530472693} - - component: {fileID: 665138784957604532} + - component: {fileID: 6426668828871678567} + - component: {fileID: 1468497117567704983} + - component: {fileID: 7250919812622890465} m_Layer: 11 - m_Name: Cube (21) + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &112111801270798582 +--- !u!4 &6426668828871678567 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3584906188415581103} + m_GameObject: {fileID: 3386198699081024258} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1926, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.19260001, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1929441288969520824} + m_Father: {fileID: 2422483358618234071} m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7963128473530472693 -BoxCollider: +--- !u!135 &1468497117567704983 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3584906188415581103} + m_GameObject: {fileID: 3386198699081024258} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &665138784957604532 +--- !u!114 &7250919812622890465 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3584906188415581103} + m_GameObject: {fileID: 3386198699081024258} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2339,6 +2807,162 @@ MonoBehaviour: remark: createTime: createName: +--- !u!1 &3493092046843560244 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4623392761999281123} + - component: {fileID: 9030543465002553920} + - component: {fileID: 2614025306016254291} + m_Layer: 11 + m_Name: Sphere (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4623392761999281123 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3493092046843560244} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.06394, y: -0.014200002, z: -0.0033000037} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1929441288969520824} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &9030543465002553920 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3493092046843560244} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2614025306016254291 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3493092046843560244} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3493373767899601166 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1411687763818607163} + - component: {fileID: 4225341220197514170} + - component: {fileID: 514466971977982725} + m_Layer: 11 + m_Name: Sphere (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1411687763818607163 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3493373767899601166} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.23576999, y: -0.014200002, z: -0.0032999963} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1929441288969520824} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &4225341220197514170 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3493373767899601166} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &514466971977982725 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3493373767899601166} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: --- !u!1 &3590415847242787513 GameObject: m_ObjectHideFlags: 0 @@ -2354,7 +2978,7 @@ GameObject: - component: {fileID: 5428551848377814500} - component: {fileID: 6245829924478429833} - component: {fileID: 3097741005572399518} - m_Layer: 8 + m_Layer: 13 m_Name: Object002 m_TagString: Untagged m_Icon: {fileID: 0} @@ -2373,18 +2997,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 4827215777736092367} - - {fileID: 2022007275255954477} - - {fileID: 1538675829139577191} - - {fileID: 1485479889308115253} - - {fileID: 6701542560462241220} - - {fileID: 8237148699649257061} - - {fileID: 9136824769587766428} - - {fileID: 3508084003914324091} - - {fileID: 5378365049727354396} - - {fileID: 7710837639035211693} - - {fileID: 5685022664820683680} - - {fileID: 7138000063032715468} + - {fileID: 8545579473834286209} + - {fileID: 4467511930536254188} + - {fileID: 1855969462347208677} + - {fileID: 1167955913579066096} + - {fileID: 1552335265519878193} + - {fileID: 3213744602697045546} + - {fileID: 6547190584060465297} + - {fileID: 1548387594393347973} + - {fileID: 3986621070561115839} + - {fileID: 6184349980587983056} + - {fileID: 5389140668193964941} + - {fileID: 7329844896774178059} m_Father: {fileID: 1794715343052336818} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -2543,7 +3167,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -3996760141626369306, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!1 &3697157006540839489 +--- !u!1 &3742435905651940381 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2551,51 +3175,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1752984943632728699} - - component: {fileID: 5911778896432915129} - - component: {fileID: 3880573935964069259} + - component: {fileID: 7419642139735390423} + - component: {fileID: 7372867408678714511} + - component: {fileID: 9091873175983356678} m_Layer: 11 - m_Name: Cube (29) + m_Name: Sphere (5) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1752984943632728699 +--- !u!4 &7419642139735390423 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3697157006540839489} + m_GameObject: {fileID: 3742435905651940381} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0178, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.017800003, y: -0.014200002, z: -0.0048999786} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1116178602514176828} + m_Father: {fileID: 3930927260046231044} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5911778896432915129 -BoxCollider: +--- !u!135 &7372867408678714511 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3697157006540839489} + m_GameObject: {fileID: 3742435905651940381} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3880573935964069259 +--- !u!114 &9091873175983356678 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3697157006540839489} + m_GameObject: {fileID: 3742435905651940381} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2621,7 +3245,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3702395622140176766 +--- !u!1 &3886067354564123611 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2629,51 +3253,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2387399627735431221} - - component: {fileID: 7563205311763926383} - - component: {fileID: 6065599103270193505} + - component: {fileID: 3978760168668545979} + - component: {fileID: 543128425974279936} + - component: {fileID: 2247352913433821958} m_Layer: 11 - m_Name: Cube (34) + m_Name: Sphere (8) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2387399627735431221 +--- !u!4 &3978760168668545979 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3702395622140176766} + m_GameObject: {fileID: 3886067354564123611} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2358, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.1494, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1116178602514176828} - m_RootOrder: 10 + m_Father: {fileID: 2422483358618234071} + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7563205311763926383 -BoxCollider: +--- !u!135 &543128425974279936 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3702395622140176766} + m_GameObject: {fileID: 3886067354564123611} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6065599103270193505 +--- !u!114 &2247352913433821958 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3702395622140176766} + m_GameObject: {fileID: 3886067354564123611} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2686,7 +3310,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 11 + portPosition: 9 deviceId: deviceName: portModel: @@ -2699,7 +3323,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3710759044392846653 +--- !u!1 &3890934943219909860 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2707,51 +3331,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3219887867809262927} - - component: {fileID: 1138500894750751695} - - component: {fileID: 8169742275145518280} + - component: {fileID: 4723983801414790018} + - component: {fileID: 651911213596307981} + - component: {fileID: 1674098172680290575} m_Layer: 11 - m_Name: Cube (19) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3219887867809262927 +--- !u!4 &4723983801414790018 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3710759044392846653} + m_GameObject: {fileID: 3890934943219909860} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.10723, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.024000004, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1929441288969520824} - m_RootOrder: 7 + m_Father: {fileID: 2422483358618234071} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1138500894750751695 -BoxCollider: +--- !u!135 &651911213596307981 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3710759044392846653} + m_GameObject: {fileID: 3890934943219909860} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8169742275145518280 +--- !u!114 &1674098172680290575 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3710759044392846653} + m_GameObject: {fileID: 3890934943219909860} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2764,7 +3388,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 8 + portPosition: 5 deviceId: deviceName: portModel: @@ -2777,7 +3401,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3821307772911301864 +--- !u!1 &4003133419884993741 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2785,51 +3409,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5757283646124553475} - - component: {fileID: 6366992805162239505} - - component: {fileID: 4370960618130356675} + - component: {fileID: 8692060288196325607} + - component: {fileID: 5280003458241518901} + - component: {fileID: 1284561214417378874} m_Layer: 11 - m_Name: Cube (36) + m_Name: Sphere (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5757283646124553475 +--- !u!4 &8692060288196325607 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3821307772911301864} + m_GameObject: {fileID: 4003133419884993741} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2021, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.27540004, y: -0.014200002, z: -0.0048999786} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 5788891714345457339} - m_RootOrder: 0 + m_Father: {fileID: 3930927260046231044} + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6366992805162239505 -BoxCollider: +--- !u!135 &5280003458241518901 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3821307772911301864} + m_GameObject: {fileID: 4003133419884993741} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4370960618130356675 +--- !u!114 &1284561214417378874 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3821307772911301864} + m_GameObject: {fileID: 4003133419884993741} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2842,319 +3466,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3826670921011698505 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9136824769587766428} - - component: {fileID: 7209719151177571371} - - component: {fileID: 1514820538633191319} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9136824769587766428 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3826670921011698505} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0619, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4763703869370140044} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7209719151177571371 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3826670921011698505} - 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!114 &1514820538633191319 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3826670921011698505} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3932579948496712983 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1485479889308115253} - - component: {fileID: 7499350142615431950} - - component: {fileID: 5217310561346438990} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1485479889308115253 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3932579948496712983} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.069, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4763703869370140044} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7499350142615431950 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3932579948496712983} - 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!114 &5217310561346438990 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3932579948496712983} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3935881107900413987 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3160727933455478079} - - component: {fileID: 6941815714530559611} - - component: {fileID: 3872900928581439699} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3160727933455478079 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3935881107900413987} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.01782, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1929441288969520824} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6941815714530559611 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3935881107900413987} - 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!114 &3872900928581439699 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3935881107900413987} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3939959743143201642 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4620823432856093220} - - component: {fileID: 5230936480229560079} - - component: {fileID: 6835507311114744285} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4620823432856093220 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3939959743143201642} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1588, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1929441288969520824} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5230936480229560079 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3939959743143201642} - 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!114 &6835507311114744285 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3939959743143201642} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 + portPosition: 12 deviceId: deviceName: portModel: @@ -3199,6 +3511,240 @@ Transform: m_Father: {fileID: 1794715343052336818} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4170175397923930362 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4168604399235971312} + - component: {fileID: 4801600585475010750} + - component: {fileID: 1940629664576048910} + m_Layer: 11 + m_Name: Sphere (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4168604399235971312 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4170175397923930362} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.063899994, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2422483358618234071} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &4801600585475010750 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4170175397923930362} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1940629664576048910 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4170175397923930362} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4204734049995961713 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8351132421746825230} + - component: {fileID: 4784066898560692755} + - component: {fileID: 3121033712422510035} + m_Layer: 11 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8351132421746825230 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4204734049995961713} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.1588, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2422483358618234071} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &4784066898560692755 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4204734049995961713} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3121033712422510035 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4204734049995961713} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4235263102137131585 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4467511930536254188} + - component: {fileID: 1039127272271067655} + - component: {fileID: 4304335344339298818} + m_Layer: 11 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4467511930536254188 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4235263102137131585} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.1558, y: -0.013999999, z: -0.00400001} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4763703869370140044} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1039127272271067655 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4235263102137131585} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4304335344339298818 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4235263102137131585} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: --- !u!1 &4237218559632471430 GameObject: m_ObjectHideFlags: 0 @@ -3214,7 +3760,7 @@ GameObject: - component: {fileID: 7422414423286543149} - component: {fileID: 7395498525051901395} - component: {fileID: 705449994353589362} - m_Layer: 8 + m_Layer: 13 m_Name: Object004 m_TagString: Untagged m_Icon: {fileID: 0} @@ -3233,18 +3779,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 1264085220224098396} - - {fileID: 4620823432856093220} - - {fileID: 6418792076713990634} - - {fileID: 6266133593720218738} - - {fileID: 3261658753933114805} - - {fileID: 3160727933455478079} - - {fileID: 6361255458700389663} - - {fileID: 3219887867809262927} - - {fileID: 4947829751671840846} - - {fileID: 112111801270798582} - - {fileID: 3389410312371278593} - - {fileID: 1658012038589624868} + - {fileID: 2095326503947555578} + - {fileID: 9209802028305256003} + - {fileID: 5039370057784881314} + - {fileID: 4002536734246066260} + - {fileID: 1076406446739890705} + - {fileID: 4610149660436253286} + - {fileID: 4623392761999281123} + - {fileID: 7018685214960908079} + - {fileID: 6041892281891965512} + - {fileID: 7644450856472740051} + - {fileID: 1411687763818607163} + - {fileID: 6009813967054621743} m_Father: {fileID: 1794715343052336818} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -3403,6 +3949,84 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -8113768720884857512, guid: 1e0b029320fe5914d98621193276e076, type: 3} +--- !u!1 &4332041966838123152 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6041892281891965512} + - component: {fileID: 4522622441665444314} + - component: {fileID: 3906278446155355528} + m_Layer: 11 + m_Name: Sphere (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6041892281891965512 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4332041966838123152} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.1494, y: -0.014200002, z: -0.0033000037} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1929441288969520824} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &4522622441665444314 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4332041966838123152} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3906278446155355528 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4332041966838123152} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 9 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: --- !u!1 &4372233264538218850 GameObject: m_ObjectHideFlags: 0 @@ -3418,7 +4042,7 @@ GameObject: - component: {fileID: 4046118133783685363} - component: {fileID: 2124398170198832041} - component: {fileID: 1149484277099109730} - m_Layer: 8 + m_Layer: 13 m_Name: Object008 m_TagString: Untagged m_Icon: {fileID: 0} @@ -3437,18 +4061,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 2252616128689562585} - - {fileID: 5173178038046161330} - - {fileID: 8516965108281577670} - - {fileID: 1983097928530780977} - - {fileID: 2753550427263249660} - - {fileID: 891039462031728871} - - {fileID: 5333931500951253136} - - {fileID: 7519381891976902077} - - {fileID: 4712983172762885978} - - {fileID: 8130838751077880757} - - {fileID: 7134987419408975482} - - {fileID: 2688766786346424101} + - {fileID: 7153366884035409193} + - {fileID: 8351132421746825230} + - {fileID: 1707826410743563978} + - {fileID: 1034127599272708115} + - {fileID: 4723983801414790018} + - {fileID: 7845447040086877967} + - {fileID: 4168604399235971312} + - {fileID: 7073992007745178875} + - {fileID: 3978760168668545979} + - {fileID: 6426668828871678567} + - {fileID: 1329124708807026783} + - {fileID: 1356349592692938938} m_Father: {fileID: 1794715343052336818} m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -3607,7 +4231,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -7647463442239531939, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!1 &4404150487069680752 +--- !u!1 &4484286090475757326 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3615,987 +4239,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 891039462031728871} - - component: {fileID: 1456983551109662972} - - component: {fileID: 3767764399232828554} + - component: {fileID: 6483935847359241580} + - component: {fileID: 3412470355746011228} + - component: {fileID: 8538275622918405285} m_Layer: 11 - m_Name: Cube (65) + m_Name: Sphere (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &891039462031728871 +--- !u!4 &6483935847359241580 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4404150487069680752} + m_GameObject: {fileID: 4484286090475757326} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0178, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.1125, y: -0.014200002, z: -0.0037999898} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2422483358618234071} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1456983551109662972 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4404150487069680752} - 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!114 &3767764399232828554 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4404150487069680752} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4634496992479626599 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 522723024270682946} - - component: {fileID: 5948076560241460459} - - component: {fileID: 2465285138050384132} - m_Layer: 11 - m_Name: Cube (55) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &522723024270682946 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4634496992479626599} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.10720003, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3930927260046231044} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5948076560241460459 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4634496992479626599} - 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!114 &2465285138050384132 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4634496992479626599} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4905568112268240183 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7710837639035211693} - - component: {fileID: 8686816783638443458} - - component: {fileID: 8522284009815031563} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7710837639035211693 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4905568112268240183} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1895, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4763703869370140044} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8686816783638443458 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4905568112268240183} - 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!114 &8522284009815031563 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4905568112268240183} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4984642585613577199 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2252616128689562585} - - component: {fileID: 2564920884910258309} - - component: {fileID: 3288924106552518004} - m_Layer: 11 - m_Name: Cube (60) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2252616128689562585 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4984642585613577199} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2021, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2422483358618234071} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2564920884910258309 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4984642585613577199} - 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!114 &3288924106552518004 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4984642585613577199} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5294702020385234629 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4827215777736092367} - - component: {fileID: 916797034921534785} - - component: {fileID: 1581240183987558812} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4827215777736092367 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5294702020385234629} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2006, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4763703869370140044} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &916797034921534785 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5294702020385234629} - 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!114 &1581240183987558812 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5294702020385234629} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5307508604116732796 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2688766786346424101} - - component: {fileID: 2452609976936873903} - - component: {fileID: 151707919737988715} - m_Layer: 11 - m_Name: Cube (71) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2688766786346424101 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5307508604116732796} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2754, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2422483358618234071} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2452609976936873903 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5307508604116732796} - 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!114 &151707919737988715 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5307508604116732796} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5470369280512704183 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5333931500951253136} - - component: {fileID: 2841574692389962818} - - component: {fileID: 5792986128607563427} - m_Layer: 11 - m_Name: Cube (66) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5333931500951253136 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5470369280512704183} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0639, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2422483358618234071} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2841574692389962818 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5470369280512704183} - 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!114 &5792986128607563427 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5470369280512704183} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5478139542998145601 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5500736354033870080} - - component: {fileID: 3780894106841366666} - - component: {fileID: 2921942068713966430} - m_Layer: 11 - m_Name: Cube (53) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5500736354033870080 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5478139542998145601} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0178, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3930927260046231044} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3780894106841366666 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5478139542998145601} - 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!114 &2921942068713966430 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5478139542998145601} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5751776904733628352 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 357753466344779044} - - component: {fileID: 2390345209651736449} - - component: {fileID: 3438731223711404724} - m_Layer: 11 - m_Name: Cube (54) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &357753466344779044 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5751776904733628352} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0639, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3930927260046231044} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2390345209651736449 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5751776904733628352} - 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!114 &3438731223711404724 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5751776904733628352} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5917153191027338483 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 651628107216904950} - - component: {fileID: 3943550309554282226} - - component: {fileID: 2321118710763586359} - m_Layer: 11 - m_Name: Cube (41) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &651628107216904950 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5917153191027338483} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0178, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5788891714345457339} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3943550309554282226 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5917153191027338483} - 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!114 &2321118710763586359 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5917153191027338483} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5956372403551021185 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8237148699649257061} - - component: {fileID: 245908124866504960} - - component: {fileID: 742141439267758960} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8237148699649257061 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5956372403551021185} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0163, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4763703869370140044} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &245908124866504960 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5956372403551021185} - 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!114 &742141439267758960 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5956372403551021185} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6076645097450589071 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4889362347755219584} - - component: {fileID: 2832188587878839144} - - component: {fileID: 7059840926787419712} - m_Layer: 11 - m_Name: Cube (39) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4889362347755219584 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6076645097450589071} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0693, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5788891714345457339} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2832188587878839144 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6076645097450589071} - 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!114 &7059840926787419712 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6076645097450589071} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6111951558138808360 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1538675829139577191} - - component: {fileID: 8028134208147099556} - - component: {fileID: 4949148546314003036} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1538675829139577191 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6111951558138808360} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1117, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4763703869370140044} + m_Father: {fileID: 1116178602514176828} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8028134208147099556 -BoxCollider: +--- !u!135 &3412470355746011228 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6111951558138808360} + m_GameObject: {fileID: 4484286090475757326} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4949148546314003036 +--- !u!114 &8538275622918405285 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6111951558138808360} + m_GameObject: {fileID: 4484286090475757326} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4621,7 +4309,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6121326874402104697 +--- !u!1 &4549394749455259177 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4629,51 +4317,129 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6701542560462241220} - - component: {fileID: 1880152537050844157} - - component: {fileID: 98915291320613554} + - component: {fileID: 5759486080670872693} + - component: {fileID: 733991555501885616} + - component: {fileID: 1859647549721384435} m_Layer: 11 - m_Name: Cube (4) + m_Name: Sphere (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6701542560462241220 +--- !u!4 &5759486080670872693 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6121326874402104697} + m_GameObject: {fileID: 4549394749455259177} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0257, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.1588, y: -0.014200002, z: -0.0038000047} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 4763703869370140044} - m_RootOrder: 4 + m_Father: {fileID: 1116178602514176828} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1880152537050844157 -BoxCollider: +--- !u!135 &733991555501885616 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6121326874402104697} + m_GameObject: {fileID: 4549394749455259177} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &98915291320613554 +--- !u!114 &1859647549721384435 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6121326874402104697} + m_GameObject: {fileID: 4549394749455259177} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4707219134119276657 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3615493098993768704} + - component: {fileID: 7495934743455777672} + - component: {fileID: 7476519121893387854} + m_Layer: 11 + m_Name: Sphere (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3615493098993768704 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4707219134119276657} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.023999996, y: -0.014200002, z: -0.0037999973} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1116178602514176828} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7495934743455777672 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4707219134119276657} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7476519121893387854 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4707219134119276657} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4699,6 +4465,786 @@ MonoBehaviour: remark: createTime: createName: +--- !u!1 &4712393859645663053 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6184349980587983056} + - component: {fileID: 7855066719203843496} + - component: {fileID: 828416667306905175} + m_Layer: 11 + m_Name: Sphere (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6184349980587983056 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4712393859645663053} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.1895, y: -0.013999999, z: -0.003999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4763703869370140044} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7855066719203843496 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4712393859645663053} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &828416667306905175 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4712393859645663053} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 10 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4976536952092992347 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7153366884035409193} + - component: {fileID: 1447617348090668527} + - component: {fileID: 6726753041803550276} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7153366884035409193 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4976536952092992347} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2021, y: -0.014200002, z: -0.003399983} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2422483358618234071} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1447617348090668527 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4976536952092992347} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6726753041803550276 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4976536952092992347} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4985229597276958430 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1356349592692938938} + - component: {fileID: 569648842103365797} + - component: {fileID: 7052992243454404467} + m_Layer: 11 + m_Name: Sphere (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1356349592692938938 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4985229597276958430} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2754, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2422483358618234071} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &569648842103365797 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4985229597276958430} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7052992243454404467 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4985229597276958430} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5162024215196633871 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9209802028305256003} + - component: {fileID: 3334241690812405009} + - component: {fileID: 9148431447645655663} + m_Layer: 11 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9209802028305256003 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5162024215196633871} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.1588, y: -0.014200002, z: -0.0032999963} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1929441288969520824} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3334241690812405009 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5162024215196633871} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &9148431447645655663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5162024215196633871} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5258066206127259916 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 243710225277656546} + - component: {fileID: 7114354450502004163} + - component: {fileID: 8573609574197290667} + m_Layer: 11 + m_Name: Sphere (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &243710225277656546 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5258066206127259916} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.27540004, y: -0.014200002, z: -0.004399985} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5788891714345457339} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7114354450502004163 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5258066206127259916} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8573609574197290667 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5258066206127259916} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5491647768076178337 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1329124708807026783} + - component: {fileID: 8799541864865451387} + - component: {fileID: 1191381373486572456} + m_Layer: 11 + m_Name: Sphere (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1329124708807026783 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5491647768076178337} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2358, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2422483358618234071} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &8799541864865451387 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5491647768076178337} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1191381373486572456 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5491647768076178337} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5598852026280973266 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1548387594393347973} + - component: {fileID: 5372375257038944510} + - component: {fileID: 6352785593079875625} + m_Layer: 11 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1548387594393347973 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5598852026280973266} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.1038, y: -0.013999999, z: -0.0040000025} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4763703869370140044} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &5372375257038944510 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5598852026280973266} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6352785593079875625 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5598852026280973266} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5916954669789895152 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1552335265519878193} + - component: {fileID: 2850018433691958404} + - component: {fileID: 6406006353532913725} + m_Layer: 11 + m_Name: Sphere (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1552335265519878193 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5916954669789895152} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0257, y: -0.013999999, z: -0.0040000025} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4763703869370140044} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2850018433691958404 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5916954669789895152} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6406006353532913725 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5916954669789895152} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5996840230524269396 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5248747782013549980} + - component: {fileID: 1307729337496874438} + - component: {fileID: 6644737724569922612} + m_Layer: 11 + m_Name: Sphere (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5248747782013549980 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5996840230524269396} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.1125, y: -0.014200002, z: -0.0048999935} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 3930927260046231044} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1307729337496874438 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5996840230524269396} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6644737724569922612 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5996840230524269396} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6132177504145453765 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8545579473834286209} + - component: {fileID: 4531668407945137033} + - component: {fileID: 8501849153848650570} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8545579473834286209 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6132177504145453765} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.2006, y: -0.013999999, z: -0.003999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4763703869370140044} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &4531668407945137033 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6132177504145453765} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8501849153848650570 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6132177504145453765} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: --- !u!1 &6155451245696517734 GameObject: m_ObjectHideFlags: 0 @@ -4945,7 +5491,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -894122891035482148, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!1 &6276050714984888595 +--- !u!1 &6208285890093713895 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4953,51 +5499,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5296559148930058256} - - component: {fileID: 9156303985824139416} - - component: {fileID: 7591863888938214838} + - component: {fileID: 8495705246382067134} + - component: {fileID: 4016504052233877945} + - component: {fileID: 8673607386529982891} m_Layer: 11 - m_Name: Cube (46) + m_Name: Sphere m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5296559148930058256 +--- !u!4 &8495705246382067134 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6276050714984888595} + m_GameObject: {fileID: 6208285890093713895} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2358, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.2021, y: -0.014200002, z: -0.0037999898} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 5788891714345457339} - m_RootOrder: 10 + m_Father: {fileID: 1116178602514176828} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9156303985824139416 -BoxCollider: +--- !u!135 &4016504052233877945 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6276050714984888595} + m_GameObject: {fileID: 6208285890093713895} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7591863888938214838 +--- !u!114 &8673607386529982891 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6276050714984888595} + m_GameObject: {fileID: 6208285890093713895} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -5010,7 +5556,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 11 + portPosition: 1 deviceId: deviceName: portModel: @@ -5023,7 +5569,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6276674500960136220 +--- !u!1 &6549592641781534979 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5031,51 +5577,129 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6361255458700389663} - - component: {fileID: 7793111392651496255} - - component: {fileID: 8958476507625778565} + - component: {fileID: 6009813967054621743} + - component: {fileID: 3190111840519855916} + - component: {fileID: 6348226935126412816} m_Layer: 11 - m_Name: Cube (18) + m_Name: Sphere (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6361255458700389663 +--- !u!4 &6009813967054621743 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6276674500960136220} + m_GameObject: {fileID: 6549592641781534979} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.06394, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.2754, y: -0.014200002, z: -0.0032999963} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 1929441288969520824} - m_RootOrder: 6 + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7793111392651496255 -BoxCollider: +--- !u!135 &3190111840519855916 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6276674500960136220} + m_GameObject: {fileID: 6549592641781534979} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8958476507625778565 +--- !u!114 &6348226935126412816 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6276674500960136220} + m_GameObject: {fileID: 6549592641781534979} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6658224306099169796 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6547190584060465297} + - component: {fileID: 8525730523592254373} + - component: {fileID: 4172843635392902221} + m_Layer: 11 + m_Name: Sphere (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6547190584060465297 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6658224306099169796} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.061900005, y: -0.013999999, z: -0.0040000025} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4763703869370140044} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &8525730523592254373 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6658224306099169796} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4172843635392902221 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6658224306099169796} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -5101,7 +5725,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6447616328793627549 +--- !u!1 &6673394219140333740 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5109,51 +5733,129 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8516965108281577670} - - component: {fileID: 389179270958943872} - - component: {fileID: 7513382990070353237} + - component: {fileID: 3605274825726300548} + - component: {fileID: 2584114335838644383} + - component: {fileID: 2219307140680995451} m_Layer: 11 - m_Name: Cube (62) + m_Name: Sphere (3) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8516965108281577670 +--- !u!4 &3605274825726300548 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6447616328793627549} + m_GameObject: {fileID: 6673394219140333740} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1125, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.0693, y: -0.014200002, z: -0.0043999925} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5788891714345457339} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2584114335838644383 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6673394219140333740} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2219307140680995451 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6673394219140333740} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6746409964156371565 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1034127599272708115} + - component: {fileID: 8998718951036826380} + - component: {fileID: 4478166584139935258} + m_Layer: 11 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1034127599272708115 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6746409964156371565} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.0693, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 2422483358618234071} - m_RootOrder: 2 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &389179270958943872 -BoxCollider: +--- !u!135 &8998718951036826380 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6447616328793627549} + m_GameObject: {fileID: 6746409964156371565} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7513382990070353237 +--- !u!114 &4478166584139935258 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6447616328793627549} + m_GameObject: {fileID: 6746409964156371565} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -5166,7 +5868,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 3 + portPosition: 4 deviceId: deviceName: portModel: @@ -5179,7 +5881,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6692130183480383584 +--- !u!1 &6765054597362982164 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5187,51 +5889,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3742059626461988481} - - component: {fileID: 7311495115011928313} - - component: {fileID: 6344482263250848817} + - component: {fileID: 1076406446739890705} + - component: {fileID: 3112458780002751964} + - component: {fileID: 4031503145960994817} m_Layer: 11 - m_Name: Cube (56) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3742059626461988481 +--- !u!4 &1076406446739890705 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6692130183480383584} + m_GameObject: {fileID: 6765054597362982164} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1494, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.024, y: -0.014200002, z: -0.0033000074} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 3930927260046231044} - m_RootOrder: 8 + m_Father: {fileID: 1929441288969520824} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7311495115011928313 -BoxCollider: +--- !u!135 &3112458780002751964 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6692130183480383584} + m_GameObject: {fileID: 6765054597362982164} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6344482263250848817 +--- !u!114 &4031503145960994817 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6692130183480383584} + m_GameObject: {fileID: 6765054597362982164} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -5244,7 +5946,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 9 + portPosition: 5 deviceId: deviceName: portModel: @@ -5257,7 +5959,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6834161815616605279 +--- !u!1 &6804162669948515093 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5265,51 +5967,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4334998463189252452} - - component: {fileID: 2857904234575338210} - - component: {fileID: 3489621851117499163} + - component: {fileID: 7018685214960908079} + - component: {fileID: 3677957268098686972} + - component: {fileID: 4597193336962486970} m_Layer: 11 - m_Name: Cube (31) + m_Name: Sphere (7) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4334998463189252452 +--- !u!4 &7018685214960908079 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6834161815616605279} + m_GameObject: {fileID: 6804162669948515093} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.10723003, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.10722999, y: -0.014200002, z: -0.0033000037} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 1116178602514176828} + m_Father: {fileID: 1929441288969520824} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2857904234575338210 -BoxCollider: +--- !u!135 &3677957268098686972 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6834161815616605279} + m_GameObject: {fileID: 6804162669948515093} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3489621851117499163 +--- !u!114 &4597193336962486970 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6834161815616605279} + m_GameObject: {fileID: 6804162669948515093} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -5344,6 +6046,7 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 705914432076356769} + - component: {fileID: 7341841642530546540} m_Layer: 8 m_Name: "\u951A\u70B9" m_TagString: Untagged @@ -5366,85 +6069,47 @@ Transform: m_Father: {fileID: 1794715343052336818} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &7079638233173543225 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3216851306333196823} - - component: {fileID: 515592486457722944} - - component: {fileID: 6862036716516004653} - m_Layer: 11 - m_Name: Cube (58) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3216851306333196823 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7079638233173543225} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2358, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3930927260046231044} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &515592486457722944 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7079638233173543225} - 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!114 &6862036716516004653 +--- !u!114 &7341841642530546540 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7079638233173543225} + m_GameObject: {fileID: 6923440781929810570} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Script: {fileID: 11500000, guid: 08598a3519fbad24195f9a93c4b44600, type: 3} m_Name: m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7137105888727028983 + a: {fileID: 0} + b: {fileID: 0} + A: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + B: + - {fileID: 8545579473834286209} + - {fileID: 4467511930536254188} + - {fileID: 1855969462347208677} + - {fileID: 1167955913579066096} + - {fileID: 1552335265519878193} + - {fileID: 3213744602697045546} + - {fileID: 6547190584060465297} + - {fileID: 1548387594393347973} + - {fileID: 3986621070561115839} + - {fileID: 6184349980587983056} + - {fileID: 5389140668193964941} + - {fileID: 7329844896774178059} +--- !u!1 &6992191054870813385 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5452,441 +6117,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5173178038046161330} - - component: {fileID: 9040029278253604784} - - component: {fileID: 4321057412708604873} + - component: {fileID: 1707826410743563978} + - component: {fileID: 8509914761412157508} + - component: {fileID: 3238910253592660179} m_Layer: 11 - m_Name: Cube (61) + m_Name: Sphere (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5173178038046161330 +--- !u!4 &1707826410743563978 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7137105888727028983} + m_GameObject: {fileID: 6992191054870813385} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1588, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.1125, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 2422483358618234071} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9040029278253604784 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7137105888727028983} - 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!114 &4321057412708604873 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7137105888727028983} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7235703785760280550 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7134987419408975482} - - component: {fileID: 5682631990675288012} - - component: {fileID: 7341611222071154924} - m_Layer: 11 - m_Name: Cube (70) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7134987419408975482 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7235703785760280550} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2358, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2422483358618234071} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5682631990675288012 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7235703785760280550} - 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!114 &7341611222071154924 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7235703785760280550} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7466192225658091865 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1994130001471878946} - - component: {fileID: 6961522124271491960} - - component: {fileID: 6173438412349541001} - m_Layer: 11 - m_Name: Cube (28) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1994130001471878946 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7466192225658091865} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.024, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1116178602514176828} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6961522124271491960 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7466192225658091865} - 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!114 &6173438412349541001 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7466192225658091865} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7565176136821986505 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5316387824494520998} - - component: {fileID: 3722781905680145013} - - component: {fileID: 1649724474836992629} - m_Layer: 11 - m_Name: Cube (24) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5316387824494520998 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7565176136821986505} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2021, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1116178602514176828} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3722781905680145013 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7565176136821986505} - 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!114 &1649724474836992629 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7565176136821986505} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7626621209227087129 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3368879119626716229} - - component: {fileID: 3124394097941012009} - - component: {fileID: 6551704362899193901} - m_Layer: 11 - m_Name: Cube (59) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3368879119626716229 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7626621209227087129} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2754, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3930927260046231044} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3124394097941012009 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7626621209227087129} - 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!114 &6551704362899193901 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7626621209227087129} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7683195721943596335 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2954314879958608395} - - component: {fileID: 5657367706710429296} - - component: {fileID: 8604862902590873938} - m_Layer: 11 - m_Name: Cube (38) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2954314879958608395 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7683195721943596335} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1125, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5788891714345457339} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5657367706710429296 -BoxCollider: +--- !u!135 &8509914761412157508 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7683195721943596335} + m_GameObject: {fileID: 6992191054870813385} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8604862902590873938 +--- !u!114 &3238910253592660179 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7683195721943596335} + m_GameObject: {fileID: 6992191054870813385} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -5912,7 +6187,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7749235083256816984 +--- !u!1 &7122826536339512343 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5920,207 +6195,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1658012038589624868} - - component: {fileID: 2016062346393011817} - - component: {fileID: 4827688122791803843} + - component: {fileID: 4002536734246066260} + - component: {fileID: 3449489126205335069} + - component: {fileID: 8183920926366804239} m_Layer: 11 - m_Name: Cube (23) + m_Name: Sphere (3) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1658012038589624868 +--- !u!4 &4002536734246066260 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7749235083256816984} + m_GameObject: {fileID: 7122826536339512343} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2754, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.0693, y: -0.014200002, z: -0.0033000037} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 1929441288969520824} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2016062346393011817 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7749235083256816984} - 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!114 &4827688122791803843 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7749235083256816984} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7982258619931677209 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 49678600407209226} - - component: {fileID: 8220402842298793515} - - component: {fileID: 8487004200241280723} - m_Layer: 11 - m_Name: Cube (30) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &49678600407209226 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7982258619931677209} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0639, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1116178602514176828} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8220402842298793515 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7982258619931677209} - 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!114 &8487004200241280723 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7982258619931677209} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7985402085078264136 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8553376669644264785} - - component: {fileID: 2587128610396615136} - - component: {fileID: 5939457833516800977} - m_Layer: 11 - m_Name: Cube (27) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8553376669644264785 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7985402085078264136} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0693, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1116178602514176828} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2587128610396615136 -BoxCollider: +--- !u!135 &3449489126205335069 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7985402085078264136} + m_GameObject: {fileID: 7122826536339512343} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5939457833516800977 +--- !u!114 &8183920926366804239 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7985402085078264136} + m_GameObject: {fileID: 7122826536339512343} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -6146,7 +6265,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &8038985310533814068 +--- !u!1 &7295323956033395912 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -6154,207 +6273,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8130838751077880757} - - component: {fileID: 2189637454222204104} - - component: {fileID: 4240431078094948146} + - component: {fileID: 329387822980982420} + - component: {fileID: 8390435583768475567} + - component: {fileID: 2390863773616559051} m_Layer: 11 - m_Name: Cube (69) + m_Name: Sphere m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8130838751077880757 +--- !u!4 &329387822980982420 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8038985310533814068} + m_GameObject: {fileID: 7295323956033395912} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.19260001, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2422483358618234071} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2189637454222204104 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8038985310533814068} - 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!114 &4240431078094948146 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8038985310533814068} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8115386383324359069 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2823679047645120903} - - component: {fileID: 324140953783491351} - - component: {fileID: 1622586452009973456} - m_Layer: 11 - m_Name: Cube (40) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2823679047645120903 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8115386383324359069} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.024, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.2021, y: -0.014200002, z: -0.0044} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 5788891714345457339} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &324140953783491351 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8115386383324359069} - 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!114 &1622586452009973456 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8115386383324359069} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8252821528106830031 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1264085220224098396} - - component: {fileID: 4611117941718903800} - - component: {fileID: 1482981206690753580} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1264085220224098396 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8252821528106830031} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2021, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1929441288969520824} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4611117941718903800 -BoxCollider: +--- !u!135 &8390435583768475567 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8252821528106830031} + m_GameObject: {fileID: 7295323956033395912} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1482981206690753580 +--- !u!114 &2390863773616559051 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8252821528106830031} + m_GameObject: {fileID: 7295323956033395912} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -6380,7 +6343,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &8277008815100306212 +--- !u!1 &7397866491552661400 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -6388,363 +6351,207 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 302798195189197586} - - component: {fileID: 1823496334263698545} - - component: {fileID: 356900526735929386} + - component: {fileID: 5389140668193964941} + - component: {fileID: 3817578398627453488} + - component: {fileID: 901633704371448680} m_Layer: 11 - m_Name: Cube (32) + m_Name: Sphere (10) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &302798195189197586 +--- !u!4 &5389140668193964941 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8277008815100306212} + m_GameObject: {fileID: 7397866491552661400} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2342, y: -0.013999999, z: -0.003999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4763703869370140044} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3817578398627453488 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7397866491552661400} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &901633704371448680 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7397866491552661400} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7428596907982180262 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 391636442131912281} + - component: {fileID: 3415016238028168896} + - component: {fileID: 2836653846733918991} + m_Layer: 11 + m_Name: Sphere (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &391636442131912281 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7428596907982180262} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1494, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.1125, y: -0.014200002, z: -0.0044} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5788891714345457339} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3415016238028168896 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7428596907982180262} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2836653846733918991 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7428596907982180262} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7512891024167639146 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3156170350060976318} + - component: {fileID: 7703202747021331936} + - component: {fileID: 1709791724016424864} + m_Layer: 11 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3156170350060976318 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7512891024167639146} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.10723003, y: -0.014200002, z: -0.0037999973} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 1116178602514176828} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1823496334263698545 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8277008815100306212} - 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!114 &356900526735929386 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8277008815100306212} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8329751305411221089 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8687438993933357542} - - component: {fileID: 4103717739461512085} - - component: {fileID: 798486687588132658} - m_Layer: 11 - m_Name: Cube (57) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8687438993933357542 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8329751305411221089} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1926, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3930927260046231044} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4103717739461512085 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8329751305411221089} - 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!114 &798486687588132658 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8329751305411221089} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8361721857865209942 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6266133593720218738} - - component: {fileID: 9055495649145203765} - - component: {fileID: 7487603011835294033} - m_Layer: 11 - m_Name: Cube (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6266133593720218738 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8361721857865209942} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0693, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1929441288969520824} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9055495649145203765 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8361721857865209942} - 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!114 &7487603011835294033 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8361721857865209942} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8407638559600768548 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6050146676625308161} - - component: {fileID: 6580326744428829929} - - component: {fileID: 1182492651192101261} - m_Layer: 11 - m_Name: Cube (49) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6050146676625308161 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8407638559600768548} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1588, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3930927260046231044} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6580326744428829929 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8407638559600768548} - 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!114 &1182492651192101261 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8407638559600768548} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8530689034480685470 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7519381891976902077} - - component: {fileID: 888574235078064708} - - component: {fileID: 358965334940361168} - m_Layer: 11 - m_Name: Cube (67) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7519381891976902077 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8530689034480685470} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1072, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2422483358618234071} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &888574235078064708 -BoxCollider: +--- !u!135 &7703202747021331936 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8530689034480685470} + m_GameObject: {fileID: 7512891024167639146} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &358965334940361168 +--- !u!114 &1709791724016424864 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8530689034480685470} + m_GameObject: {fileID: 7512891024167639146} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -6770,7 +6577,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &8590821887708998873 +--- !u!1 &7544979231868927593 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -6778,129 +6585,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5917691404838395467} - - component: {fileID: 2470480741365883247} - - component: {fileID: 2488604456109981491} + - component: {fileID: 1167955913579066096} + - component: {fileID: 4056486599995850038} + - component: {fileID: 1919919189486241208} m_Layer: 11 - m_Name: Cube (50) + m_Name: Sphere (3) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5917691404838395467 +--- !u!4 &1167955913579066096 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8590821887708998873} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1125, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3930927260046231044} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2470480741365883247 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8590821887708998873} - 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!114 &2488604456109981491 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8590821887708998873} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8722060974102012822 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5685022664820683680} - - component: {fileID: 1571900959199517449} - - component: {fileID: 8402470316187155602} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5685022664820683680 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8722060974102012822} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2342, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 7544979231868927593} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.069, y: -0.013999999, z: -0.0040000025} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 4763703869370140044} - m_RootOrder: 10 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1571900959199517449 -BoxCollider: +--- !u!135 &4056486599995850038 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8722060974102012822} + m_GameObject: {fileID: 7544979231868927593} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8402470316187155602 +--- !u!114 &1919919189486241208 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8722060974102012822} + m_GameObject: {fileID: 7544979231868927593} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -6913,7 +6642,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 11 + portPosition: 4 deviceId: deviceName: portModel: @@ -6926,7 +6655,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &8803862440685714651 +--- !u!1 &7662931009704297879 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -6934,51 +6663,207 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4712983172762885978} - - component: {fileID: 1861464570588327185} - - component: {fileID: 5667556676642075131} + - component: {fileID: 7873135090845694741} + - component: {fileID: 2958051204955746556} + - component: {fileID: 8535360177573854199} m_Layer: 11 - m_Name: Cube (68) + m_Name: Sphere (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4712983172762885978 +--- !u!4 &7873135090845694741 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8803862440685714651} + m_GameObject: {fileID: 7662931009704297879} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1494, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.1588, y: -0.014200002, z: -0.004399985} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2422483358618234071} - m_RootOrder: 8 + m_Father: {fileID: 5788891714345457339} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1861464570588327185 -BoxCollider: +--- !u!135 &2958051204955746556 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8803862440685714651} + m_GameObject: {fileID: 7662931009704297879} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5667556676642075131 +--- !u!114 &8535360177573854199 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8803862440685714651} + m_GameObject: {fileID: 7662931009704297879} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7869278820655823227 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 46652882684772903} + - component: {fileID: 4166151209264573490} + - component: {fileID: 8313813055789562442} + m_Layer: 11 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &46652882684772903 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7869278820655823227} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.1588, y: -0.014200002, z: -0.0048999786} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 3930927260046231044} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &4166151209264573490 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7869278820655823227} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8313813055789562442 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7869278820655823227} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7956360507270151936 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8108014341238421789} + - component: {fileID: 2531846324592480538} + - component: {fileID: 5564950807258413634} + m_Layer: 11 + m_Name: Sphere (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8108014341238421789 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7956360507270151936} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.1494, y: -0.014200002, z: -0.0043999925} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 5788891714345457339} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2531846324592480538 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7956360507270151936} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5564950807258413634 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7956360507270151936} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -7004,7 +6889,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &9049932935482098986 +--- !u!1 &8098064686483592196 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -7012,129 +6897,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6418792076713990634} - - component: {fileID: 8601517590756404247} - - component: {fileID: 8147877122920716925} + - component: {fileID: 4521207879741116566} + - component: {fileID: 8653972980379444633} + - component: {fileID: 9207574081553587661} m_Layer: 11 - m_Name: Cube (14) + m_Name: Sphere (10) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6418792076713990634 +--- !u!4 &4521207879741116566 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9049932935482098986} + m_GameObject: {fileID: 8098064686483592196} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1125, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1929441288969520824} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8601517590756404247 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9049932935482098986} - 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!114 &8147877122920716925 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9049932935482098986} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9060917393534267147 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5844582467016777499} - - component: {fileID: 1091721751198178432} - - component: {fileID: 2217305040946813013} - m_Layer: 11 - m_Name: Cube (52) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5844582467016777499 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9060917393534267147} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.024, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.23580001, y: -0.014200002, z: -0.0048999786} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 3930927260046231044} - m_RootOrder: 4 + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1091721751198178432 -BoxCollider: +--- !u!135 &8653972980379444633 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9060917393534267147} + m_GameObject: {fileID: 8098064686483592196} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2217305040946813013 +--- !u!114 &9207574081553587661 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9060917393534267147} + m_GameObject: {fileID: 8098064686483592196} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -7147,7 +6954,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 5 + portPosition: 11 deviceId: deviceName: portModel: @@ -7160,7 +6967,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &9155546883419854225 +--- !u!1 &8280073123661188634 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -7168,51 +6975,285 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3374938038603344552} - - component: {fileID: 9076908623704637313} - - component: {fileID: 756703146357265772} + - component: {fileID: 3213744602697045546} + - component: {fileID: 1792636120368246034} + - component: {fileID: 3945737399140984167} m_Layer: 11 - m_Name: Cube (48) + m_Name: Sphere (5) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3374938038603344552 +--- !u!4 &3213744602697045546 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9155546883419854225} + m_GameObject: {fileID: 8280073123661188634} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.0163, y: -0.013999999, z: -0.0040000025} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4763703869370140044} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1792636120368246034 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8280073123661188634} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3945737399140984167 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8280073123661188634} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8375839051279523254 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7329844896774178059} + - component: {fileID: 3762757513499722769} + - component: {fileID: 5232530772419601841} + m_Layer: 11 + m_Name: Sphere (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7329844896774178059 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8375839051279523254} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2747, y: -0.013999999, z: -0.003999995} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 4763703869370140044} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3762757513499722769 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8375839051279523254} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5232530772419601841 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8375839051279523254} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8512684350379886519 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7845447040086877967} + - component: {fileID: 2018219021649252004} + - component: {fileID: 445192897258968565} + m_Layer: 11 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7845447040086877967 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8512684350379886519} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2021, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.017800003, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2422483358618234071} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2018219021649252004 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8512684350379886519} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &445192897258968565 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8512684350379886519} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8612558079539711597 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1114337568138927948} + - component: {fileID: 2968324533803225126} + - component: {fileID: 1402315617379835397} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1114337568138927948 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8612558079539711597} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2021, y: -0.014200002, z: -0.0048999637} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 3930927260046231044} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9076908623704637313 -BoxCollider: +--- !u!135 &2968324533803225126 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9155546883419854225} + m_GameObject: {fileID: 8612558079539711597} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &756703146357265772 +--- !u!114 &1402315617379835397 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9155546883419854225} + m_GameObject: {fileID: 8612558079539711597} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/93.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/93.prefab index aec21c46d..cad5de51a 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/93.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/93.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &19730379969216030 +--- !u!1 &214898406005354427 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,51 +8,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3620393284701983306} - - component: {fileID: 335983859685136915} - - component: {fileID: 8660597209975244180} + - component: {fileID: 4397386851153603730} + - component: {fileID: 2061458244109575104} + - component: {fileID: 453853534076493003} m_Layer: 11 - m_Name: Cube (10) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3620393284701983306 +--- !u!4 &4397386851153603730 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 19730379969216030} + m_GameObject: {fileID: 214898406005354427} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2352, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.026500002, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 7597274171263352298} - m_RootOrder: 10 + m_Father: {fileID: 2598459831961461594} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &335983859685136915 -BoxCollider: +--- !u!135 &2061458244109575104 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 19730379969216030} + m_GameObject: {fileID: 214898406005354427} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8660597209975244180 +--- !u!114 &453853534076493003 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 19730379969216030} + m_GameObject: {fileID: 214898406005354427} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -65,241 +65,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &158139698297279359 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 310486509168273178} - - component: {fileID: 4604687284327737988} - - component: {fileID: 3883452311694859840} - m_Layer: 11 - m_Name: Cube (47) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &310486509168273178 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 158139698297279359} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2736, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2161611759434366562} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4604687284327737988 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 158139698297279359} - 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!114 &3883452311694859840 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 158139698297279359} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &310255393722276047 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2641029100318961404} - - component: {fileID: 6158935142634221373} - - component: {fileID: 2062523935740331498} - m_Layer: 11 - m_Name: Cube (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2641029100318961404 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 310255393722276047} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1456, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3581526449222385374} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6158935142634221373 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 310255393722276047} - 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!114 &2062523935740331498 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 310255393722276047} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &409786740417056834 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 771545070777503915} - - component: {fileID: 7035344471785979247} - - component: {fileID: 7403017750014833411} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &771545070777503915 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 409786740417056834} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.15896, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7597274171263352298} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7035344471785979247 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 409786740417056834} - 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!114 &7403017750014833411 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 409786740417056834} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 + portPosition: 5 deviceId: deviceName: portModel: @@ -327,7 +93,7 @@ GameObject: - component: {fileID: 3234207680769671571} - component: {fileID: 7432088800982781887} - component: {fileID: 7673013264980566794} - m_Layer: 8 + m_Layer: 13 m_Name: Object007 m_TagString: Untagged m_Icon: {fileID: 0} @@ -346,18 +112,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 1009889247171203509} - - {fileID: 8540876986530184459} - - {fileID: 1480403674119407241} - - {fileID: 5256010864869567453} - - {fileID: 6022275856200374254} - - {fileID: 2512490374861157634} - - {fileID: 2024646811815937695} - - {fileID: 4324197799543862216} - - {fileID: 5869497421925963655} - - {fileID: 6031927975009561915} - - {fileID: 2599530856709152293} - - {fileID: 310486509168273178} + - {fileID: 2793250671315613402} + - {fileID: 5025570561163523918} + - {fileID: 8202703412083595114} + - {fileID: 248009486032723101} + - {fileID: 4880719635647625785} + - {fileID: 7778385130005229000} + - {fileID: 8862396565282244604} + - {fileID: 2756598426637155489} + - {fileID: 652165345641507736} + - {fileID: 4813927210342856425} + - {fileID: 173393514636389519} + - {fileID: 5091001851249429606} m_Father: {fileID: 2329335555156093472} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -516,7 +282,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: 7733717212360752527, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!1 &544117700961699164 +--- !u!1 &648681497332916545 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -524,51 +290,129 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3171529003426891565} - - component: {fileID: 2773543278119835712} - - component: {fileID: 6931399457303239757} + - component: {fileID: 5534279512110369670} + - component: {fileID: 447652194744059060} + - component: {fileID: 4753533541681886006} m_Layer: 11 - m_Name: Cube (30) + m_Name: Sphere (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3171529003426891565 +--- !u!4 &5534279512110369670 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 544117700961699164} + m_GameObject: {fileID: 648681497332916545} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.06216, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.15762, y: -0.014200002, z: -0.003999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2598459831961461594} - m_RootOrder: 6 + m_Father: {fileID: 3581526449222385374} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2773543278119835712 -BoxCollider: +--- !u!135 &447652194744059060 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 544117700961699164} + m_GameObject: {fileID: 648681497332916545} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6931399457303239757 +--- !u!114 &4753533541681886006 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 544117700961699164} + m_GameObject: {fileID: 648681497332916545} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &660960494666993297 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7007238286469593046} + - component: {fileID: 2417992945925893645} + - component: {fileID: 5032747078451202599} + m_Layer: 11 + m_Name: Sphere (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7007238286469593046 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 660960494666993297} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.063099995, y: -0.014200002, z: -0.0042999983} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 787144991333733553} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2417992945925893645 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 660960494666993297} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5032747078451202599 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 660960494666993297} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -594,6 +438,84 @@ MonoBehaviour: remark: createTime: createName: +--- !u!1 &714352107276872984 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9185722484166822499} + - component: {fileID: 6823918334943722871} + - component: {fileID: 4275500120115103520} + m_Layer: 11 + m_Name: Sphere (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9185722484166822499 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 714352107276872984} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2352, y: -0.014200002, z: -0.0042999983} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 787144991333733553} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6823918334943722871 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 714352107276872984} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4275500120115103520 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 714352107276872984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: --- !u!1 &821470746034725191 GameObject: m_ObjectHideFlags: 0 @@ -841,7 +763,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 907094073435759743, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!1 &928904645967339486 +--- !u!1 &1093334154026958330 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -849,51 +771,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8535683444195087322} - - component: {fileID: 1075265312237158890} - - component: {fileID: 1902116438473508379} + - component: {fileID: 307521615889731751} + - component: {fileID: 7120181450376050919} + - component: {fileID: 2063273557757615173} m_Layer: 11 - m_Name: Cube (48) + m_Name: Sphere (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8535683444195087322 +--- !u!4 &307521615889731751 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 928904645967339486} + m_GameObject: {fileID: 1093334154026958330} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2059, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.05975, y: -0.014200002, z: -0.0025999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 787144991333733553} - m_RootOrder: 0 + m_Father: {fileID: 8873399284239937245} + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1075265312237158890 -BoxCollider: +--- !u!135 &7120181450376050919 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 928904645967339486} + m_GameObject: {fileID: 1093334154026958330} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1902116438473508379 +--- !u!114 &2063273557757615173 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 928904645967339486} + m_GameObject: {fileID: 1093334154026958330} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -906,7 +828,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 1 + portPosition: 7 deviceId: deviceName: portModel: @@ -919,7 +841,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &1140999048533703364 +--- !u!1 &1221481353357842547 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -927,51 +849,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1239912718611396405} - - component: {fileID: 1064124650189600929} - - component: {fileID: 8606601591308904980} + - component: {fileID: 3886622847371536174} + - component: {fileID: 4276973735594012201} + - component: {fileID: 2205771948361910801} m_Layer: 11 - m_Name: Cube (32) + m_Name: Sphere (10) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1239912718611396405 +--- !u!4 &3886622847371536174 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1140999048533703364} + m_GameObject: {fileID: 1221481353357842547} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1456, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.23369999, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 8873399284239937245} - m_RootOrder: 8 + m_Father: {fileID: 2598459831961461594} + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1064124650189600929 -BoxCollider: +--- !u!135 &4276973735594012201 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1140999048533703364} + m_GameObject: {fileID: 1221481353357842547} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8606601591308904980 +--- !u!114 &2205771948361910801 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1140999048533703364} + m_GameObject: {fileID: 1221481353357842547} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -984,7 +906,163 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 9 + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1246256256708961596 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 248009486032723101} + - component: {fileID: 4150710272077107697} + - component: {fileID: 8653161262541378273} + m_Layer: 11 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &248009486032723101 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1246256256708961596} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.0731, y: -0.014200002, z: -0.0037999898} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2161611759434366562} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &4150710272077107697 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1246256256708961596} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8653161262541378273 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1246256256708961596} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1248906198311232082 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7310656348734428225} + - component: {fileID: 582235466327072778} + - component: {fileID: 7889561169884968153} + m_Layer: 11 + m_Name: Sphere (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7310656348734428225 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1248906198311232082} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.1163, y: -0.014200002, z: -0.0034999996} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 7597274171263352298} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &582235466327072778 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1248906198311232082} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7889561169884968153 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1248906198311232082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 deviceId: deviceName: portModel: @@ -1012,7 +1090,7 @@ GameObject: - component: {fileID: 509022528907722205} - component: {fileID: 3848281707255787654} - component: {fileID: 1874586355433207668} - m_Layer: 8 + m_Layer: 13 m_Name: Object004 m_TagString: Untagged m_Icon: {fileID: 0} @@ -1031,18 +1109,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 9054014694917940961} - - {fileID: 7138058726862382906} - - {fileID: 6307632742800704549} - - {fileID: 7481844945435761627} - - {fileID: 6892063770050067436} - - {fileID: 4637773727881991259} - - {fileID: 4755241432141861569} - - {fileID: 7634864175777285304} - - {fileID: 2641029100318961404} - - {fileID: 1649997744457105803} - - {fileID: 499457524538716505} - - {fileID: 4005814636551394509} + - {fileID: 3832818164241230304} + - {fileID: 5534279512110369670} + - {fileID: 1352742117045237856} + - {fileID: 3730995445569508650} + - {fileID: 4160964625316965764} + - {fileID: 552166725259317454} + - {fileID: 3450385595666657289} + - {fileID: 6439880244026591650} + - {fileID: 8620537135146663205} + - {fileID: 6398228193710873596} + - {fileID: 4347746254913837968} + - {fileID: 4509527296149453170} m_Father: {fileID: 2329335555156093472} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1201,7 +1279,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -8113768720884857512, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!1 &1486499748933145911 +--- !u!1 &1292993769268640935 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1209,51 +1287,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6203996636598924986} - - component: {fileID: 5266787194551495272} - - component: {fileID: 1523206306255826292} + - component: {fileID: 8202703412083595114} + - component: {fileID: 5006800084838275459} + - component: {fileID: 5260934611482724995} m_Layer: 11 - m_Name: Cube (27) + m_Name: Sphere (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6203996636598924986 +--- !u!4 &8202703412083595114 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1486499748933145911} + m_GameObject: {fileID: 1292993769268640935} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0731, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.1163, y: -0.014200002, z: -0.0038000047} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2598459831961461594} - m_RootOrder: 3 + m_Father: {fileID: 2161611759434366562} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5266787194551495272 -BoxCollider: +--- !u!135 &5006800084838275459 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1486499748933145911} + m_GameObject: {fileID: 1292993769268640935} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1523206306255826292 +--- !u!114 &5260934611482724995 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1486499748933145911} + m_GameObject: {fileID: 1292993769268640935} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1266,7 +1344,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 4 + portPosition: 3 deviceId: deviceName: portModel: @@ -1279,7 +1357,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &1719096021208357284 +--- !u!1 &1321511513440388491 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1287,51 +1365,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4328440346452577618} - - component: {fileID: 6391115060149047646} - - component: {fileID: 6529230863911603424} + - component: {fileID: 5415005157168022758} + - component: {fileID: 6329542096822475249} + - component: {fileID: 3859259491510934244} m_Layer: 11 - m_Name: Cube (51) + m_Name: Sphere (7) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4328440346452577618 +--- !u!4 &5415005157168022758 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1719096021208357284} + m_GameObject: {fileID: 1321511513440388491} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0731, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.1063, y: -0.014200002, z: -0.0034999996} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 787144991333733553} - m_RootOrder: 3 + m_Father: {fileID: 7597274171263352298} + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6391115060149047646 -BoxCollider: +--- !u!135 &6329542096822475249 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1719096021208357284} + m_GameObject: {fileID: 1321511513440388491} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6529230863911603424 +--- !u!114 &3859259491510934244 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1719096021208357284} + m_GameObject: {fileID: 1321511513440388491} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1344,7 +1422,241 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 4 + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1323940280986825065 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5611507512289851797} + - component: {fileID: 3987754114223603931} + - component: {fileID: 9023672886209459539} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5611507512289851797 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1323940280986825065} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.2059, y: -0.014200002, z: -0.0042999983} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 787144991333733553} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3987754114223603931 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1323940280986825065} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &9023672886209459539 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1323940280986825065} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1373088658464312081 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7166928834388742466} + - component: {fileID: 4446126126129368356} + - component: {fileID: 1650041701371485002} + m_Layer: 11 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7166928834388742466 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1373088658464312081} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0167, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2598459831961461594} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &4446126126129368356 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1373088658464312081} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1650041701371485002 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1373088658464312081} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1504271280506339921 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6439880244026591650} + - component: {fileID: 4422694598493976563} + - component: {fileID: 3073541914608272276} + m_Layer: 11 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6439880244026591650 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1504271280506339921} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.1063, y: -0.014200002, z: -0.003999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 3581526449222385374} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &4422694598493976563 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1504271280506339921} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3073541914608272276 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1504271280506339921} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 deviceId: deviceName: portModel: @@ -1372,7 +1684,7 @@ GameObject: - component: {fileID: 7201642187957790485} - component: {fileID: 4639105890208650546} - component: {fileID: 6176275974969570574} - m_Layer: 8 + m_Layer: 13 m_Name: Object008 m_TagString: Untagged m_Icon: {fileID: 0} @@ -1391,18 +1703,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 8535683444195087322} - - {fileID: 5257193285049439607} - - {fileID: 5891212962710087181} - - {fileID: 4328440346452577618} - - {fileID: 5964918966855285402} - - {fileID: 3880907327955511736} - - {fileID: 4541101992050586856} - - {fileID: 2156597847719148021} - - {fileID: 741766354613047169} - - {fileID: 4417192172188857388} - - {fileID: 3131223276933139087} - - {fileID: 1624414754017249623} + - {fileID: 5611507512289851797} + - {fileID: 360539297950294875} + - {fileID: 984261542323513740} + - {fileID: 5303667364890271151} + - {fileID: 1882605838813107496} + - {fileID: 5550368153480917865} + - {fileID: 7007238286469593046} + - {fileID: 4360283626656544512} + - {fileID: 4037015450570893149} + - {fileID: 3412729144522006205} + - {fileID: 9185722484166822499} + - {fileID: 3369802415714301075} m_Father: {fileID: 2329335555156093472} m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1576,7 +1888,7 @@ GameObject: - component: {fileID: 8768881738342927552} - component: {fileID: 7412987525032027127} - component: {fileID: 2570087110154438480} - m_Layer: 8 + m_Layer: 13 m_Name: Object002 m_TagString: Untagged m_Icon: {fileID: 0} @@ -1595,18 +1907,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 6312056132373434306} - - {fileID: 771545070777503915} - - {fileID: 2086232640035137634} - - {fileID: 873259781300599029} - - {fileID: 8216891459945394975} - - {fileID: 7968338335919027888} - - {fileID: 7547975891643376553} - - {fileID: 8985078777473702571} - - {fileID: 8642393499705613626} - - {fileID: 2111636263673913779} - - {fileID: 3620393284701983306} - - {fileID: 6529106354918216541} + - {fileID: 4220160805455648324} + - {fileID: 4973593597287190668} + - {fileID: 7310656348734428225} + - {fileID: 4398397794232900968} + - {fileID: 8804361589665933442} + - {fileID: 3362833855080207625} + - {fileID: 3775884829022601325} + - {fileID: 5415005157168022758} + - {fileID: 7736487814244908578} + - {fileID: 5347522255439261625} + - {fileID: 8395739506624401129} + - {fileID: 8819454296315295185} m_Father: {fileID: 2329335555156093472} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1765,7 +2077,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -3996760141626369306, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!1 &1920763845219184645 +--- !u!1 &2141691111681039042 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1773,51 +2085,441 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6553503905152067402} - - component: {fileID: 4330857336898944335} - - component: {fileID: 7525807708839180691} + - component: {fileID: 2756598426637155489} + - component: {fileID: 1032834434559932135} + - component: {fileID: 5985954968012659415} m_Layer: 11 - m_Name: Cube (35) + m_Name: Sphere (7) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6553503905152067402 +--- !u!4 &2756598426637155489 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1920763845219184645} + m_GameObject: {fileID: 2141691111681039042} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.27468, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.103149995, y: -0.014200002, z: -0.0038000047} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2598459831961461594} - m_RootOrder: 11 + m_Father: {fileID: 2161611759434366562} + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4330857336898944335 -BoxCollider: +--- !u!135 &1032834434559932135 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1920763845219184645} + m_GameObject: {fileID: 2141691111681039042} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7525807708839180691 +--- !u!114 &5985954968012659415 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1920763845219184645} + m_GameObject: {fileID: 2141691111681039042} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2238157392931186446 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8909627397375898871} + - component: {fileID: 8809587804397369702} + - component: {fileID: 8798480037662614704} + m_Layer: 11 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8909627397375898871 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2238157392931186446} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.15711, y: -0.014200002, z: -0.0025999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 8873399284239937245} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &8809587804397369702 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2238157392931186446} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8798480037662614704 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2238157392931186446} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2278292413874812105 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5740038781049693194} + - component: {fileID: 3355726136262818731} + - component: {fileID: 2270355343649375830} + m_Layer: 11 + m_Name: Sphere (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5740038781049693194 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2278292413874812105} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.11630003, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2598459831961461594} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3355726136262818731 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2278292413874812105} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2270355343649375830 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2278292413874812105} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2360017814216805051 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1838855767181187941} + - component: {fileID: 5041454326597362525} + - component: {fileID: 8658131244113839100} + m_Layer: 11 + m_Name: Sphere (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1838855767181187941 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2360017814216805051} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.18879999, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2598459831961461594} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &5041454326597362525 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2360017814216805051} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8658131244113839100 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2360017814216805051} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 10 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2436999952942526941 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1981455670114701807} + - component: {fileID: 5844039936988738368} + - component: {fileID: 6574926458127490782} + m_Layer: 11 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1981455670114701807 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2436999952942526941} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.016699985, y: -0.014200002, z: -0.0025999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 8873399284239937245} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &5844039936988738368 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2436999952942526941} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6574926458127490782 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2436999952942526941} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2469517266901047070 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5091001851249429606} + - component: {fileID: 2290962947873186241} + - component: {fileID: 523604705721821578} + m_Layer: 11 + m_Name: Sphere (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5091001851249429606 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2469517266901047070} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.27359998, y: -0.014200002, z: -0.0038000047} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2161611759434366562} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2290962947873186241 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2469517266901047070} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &523604705721821578 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2469517266901047070} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -1843,630 +2545,6 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2098634301587271706 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6892063770050067436} - - component: {fileID: 4130655217103026948} - - component: {fileID: 8008166665395734248} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6892063770050067436 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2098634301587271706} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0265, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3581526449222385374} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4130655217103026948 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2098634301587271706} - 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!114 &8008166665395734248 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2098634301587271706} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2161649816659187608 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2599530856709152293} - - component: {fileID: 378985022328168357} - - component: {fileID: 7306290880288536955} - m_Layer: 11 - m_Name: Cube (46) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2599530856709152293 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2161649816659187608} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.23325, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2161611759434366562} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &378985022328168357 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2161649816659187608} - 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!114 &7306290880288536955 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2161649816659187608} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2175343726329318036 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 377693250943047120} - - component: {fileID: 5877399372446917254} - - component: {fileID: 8894164915326537961} - m_Layer: 11 - m_Name: Cube (34) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &377693250943047120 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2175343726329318036} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.23286, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8873399284239937245} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5877399372446917254 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2175343726329318036} - 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!114 &8894164915326537961 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2175343726329318036} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2278784652661537780 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8985078777473702571} - - component: {fileID: 2195496081915405808} - - component: {fileID: 7357733790290809488} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8985078777473702571 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2278784652661537780} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1063, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7597274171263352298} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2195496081915405808 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2278784652661537780} - 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!114 &7357733790290809488 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2278784652661537780} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2324011694678388095 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6022275856200374254} - - component: {fileID: 1008643594738114888} - - component: {fileID: 6671955360204241355} - m_Layer: 11 - m_Name: Cube (40) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6022275856200374254 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2324011694678388095} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0265, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2161611759434366562} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1008643594738114888 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2324011694678388095} - 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!114 &6671955360204241355 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2324011694678388095} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2382069219505240502 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2156597847719148021} - - component: {fileID: 6831304728061439502} - - component: {fileID: 5973378046641985163} - m_Layer: 11 - m_Name: Cube (55) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2156597847719148021 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2382069219505240502} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1063, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 787144991333733553} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6831304728061439502 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2382069219505240502} - 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!114 &5973378046641985163 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2382069219505240502} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2451763965838381026 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5869497421925963655} - - component: {fileID: 5726065601861388252} - - component: {fileID: 3381018120333402488} - m_Layer: 11 - m_Name: Cube (44) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5869497421925963655 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2451763965838381026} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.14682, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2161611759434366562} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5726065601861388252 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2451763965838381026} - 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!114 &3381018120333402488 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2451763965838381026} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2621034246170154330 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4324197799543862216} - - component: {fileID: 6616054477772183367} - - component: {fileID: 6793484977852675191} - m_Layer: 11 - m_Name: Cube (43) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4324197799543862216 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2621034246170154330} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.10315, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2161611759434366562} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6616054477772183367 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2621034246170154330} - 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!114 &6793484977852675191 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2621034246170154330} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: --- !u!1 &2627017610767479904 GameObject: m_ObjectHideFlags: 0 @@ -2482,7 +2560,7 @@ GameObject: - component: {fileID: 7862161442759742947} - component: {fileID: 3400195226589635107} - component: {fileID: 6416144623271278621} - m_Layer: 8 + m_Layer: 13 m_Name: Object005 m_TagString: Untagged m_Icon: {fileID: 0} @@ -2501,18 +2579,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 4337139616402886004} - - {fileID: 8566772668802091627} - - {fileID: 6426664917937781492} - - {fileID: 6203996636598924986} - - {fileID: 2888793755966792954} - - {fileID: 8428704161039726651} - - {fileID: 3171529003426891565} - - {fileID: 981326156512229030} - - {fileID: 4006643756670725804} - - {fileID: 5644433590537822312} - - {fileID: 7957056465149033263} - - {fileID: 6553503905152067402} + - {fileID: 5144468255054880925} + - {fileID: 8812545563072191542} + - {fileID: 5740038781049693194} + - {fileID: 2900591846364116817} + - {fileID: 4397386851153603730} + - {fileID: 7166928834388742466} + - {fileID: 1595424425692243295} + - {fileID: 315647176258881027} + - {fileID: 5027928114379054603} + - {fileID: 1838855767181187941} + - {fileID: 3886622847371536174} + - {fileID: 6535484612478536097} m_Father: {fileID: 2329335555156093472} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -2671,7 +2749,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: 9186633843763367028, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!1 &2690506827921733074 +--- !u!1 &2671721543909461967 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2679,51 +2757,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 741766354613047169} - - component: {fileID: 3297736689203390360} - - component: {fileID: 6280032977957850886} + - component: {fileID: 4037015450570893149} + - component: {fileID: 4850234806071633069} + - component: {fileID: 1717417847189370753} m_Layer: 11 - m_Name: Cube (56) + m_Name: Sphere (8) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &741766354613047169 +--- !u!4 &4037015450570893149 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2690506827921733074} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1456, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 2671721543909461967} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.1456, y: -0.014200002, z: -0.0042999983} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 787144991333733553} m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3297736689203390360 -BoxCollider: +--- !u!135 &4850234806071633069 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2690506827921733074} + m_GameObject: {fileID: 2671721543909461967} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6280032977957850886 +--- !u!114 &1717417847189370753 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2690506827921733074} + m_GameObject: {fileID: 2671721543909461967} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2749,7 +2827,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2792261883200296959 +--- !u!1 &2686556100527774786 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2757,51 +2835,129 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5371421072056191496} - - component: {fileID: 6452916168377534637} - - component: {fileID: 729775750574742519} + - component: {fileID: 1595424425692243295} + - component: {fileID: 5075655211689703683} + - component: {fileID: 519718305313010722} m_Layer: 11 - m_Name: Cube (26) + m_Name: Sphere (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5371421072056191496 +--- !u!4 &1595424425692243295 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2792261883200296959} + m_GameObject: {fileID: 2686556100527774786} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1163, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.06216, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2598459831961461594} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &5075655211689703683 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2686556100527774786} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &519718305313010722 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2686556100527774786} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2764013389453392535 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8810144122745518575} + - component: {fileID: 1158461140461277106} + - component: {fileID: 1135020309098965101} + m_Layer: 11 + m_Name: Sphere (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8810144122745518575 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2764013389453392535} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.23286, y: -0.014200002, z: -0.0025999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 8873399284239937245} - m_RootOrder: 2 + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6452916168377534637 -BoxCollider: +--- !u!135 &1158461140461277106 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2792261883200296959} + m_GameObject: {fileID: 2764013389453392535} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &729775750574742519 +--- !u!114 &1135020309098965101 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2792261883200296959} + m_GameObject: {fileID: 2764013389453392535} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2814,7 +2970,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 3 + portPosition: 11 deviceId: deviceName: portModel: @@ -2827,7 +2983,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &2818563028151415724 +--- !u!1 &2824547901953603775 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2835,51 +2991,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7634864175777285304} - - component: {fileID: 9222529982585936507} - - component: {fileID: 5328768023957384022} + - component: {fileID: 4220160805455648324} + - component: {fileID: 8952586706588516085} + - component: {fileID: 6601287648334338737} m_Layer: 11 - m_Name: Cube (19) + m_Name: Sphere m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7634864175777285304 +--- !u!4 &4220160805455648324 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2818563028151415724} + m_GameObject: {fileID: 2824547901953603775} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1063, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.20189, y: -0.014200002, z: -0.0034999996} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 3581526449222385374} - m_RootOrder: 7 + m_Father: {fileID: 7597274171263352298} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9222529982585936507 -BoxCollider: +--- !u!135 &8952586706588516085 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2818563028151415724} + m_GameObject: {fileID: 2824547901953603775} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5328768023957384022 +--- !u!114 &6601287648334338737 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2818563028151415724} + m_GameObject: {fileID: 2824547901953603775} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -2892,7 +3048,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 8 + portPosition: 1 deviceId: deviceName: portModel: @@ -2905,7 +3061,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3128927612266408750 +--- !u!1 &2882835748065620628 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2913,285 +3069,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1480403674119407241} - - component: {fileID: 8037167490427963559} - - component: {fileID: 5322562849366552982} + - component: {fileID: 7778385130005229000} + - component: {fileID: 7697905781440609167} + - component: {fileID: 6671399291573827366} m_Layer: 11 - m_Name: Cube (38) + m_Name: Sphere (5) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1480403674119407241 +--- !u!4 &7778385130005229000 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3128927612266408750} + m_GameObject: {fileID: 2882835748065620628} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1163, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.0167, y: -0.014200002, z: -0.0038000047} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 2161611759434366562} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8037167490427963559 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3128927612266408750} - 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!114 &5322562849366552982 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3128927612266408750} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3138724184583361622 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4417192172188857388} - - component: {fileID: 4470952024778611714} - - component: {fileID: 919923270093517995} - m_Layer: 11 - m_Name: Cube (57) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4417192172188857388 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3138724184583361622} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1888, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 787144991333733553} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4470952024778611714 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3138724184583361622} - 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!114 &919923270093517995 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3138724184583361622} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3167883987535989546 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6031927975009561915} - - component: {fileID: 1094015195251395406} - - component: {fileID: 1759887573828147955} - m_Layer: 11 - m_Name: Cube (45) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6031927975009561915 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3167883987535989546} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1888, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2161611759434366562} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1094015195251395406 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3167883987535989546} - 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!114 &1759887573828147955 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3167883987535989546} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3171852420265026366 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3880907327955511736} - - component: {fileID: 6683603632696666558} - - component: {fileID: 2636090723667956500} - m_Layer: 11 - m_Name: Cube (53) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3880907327955511736 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3171852420265026366} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0167, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 787144991333733553} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6683603632696666558 -BoxCollider: +--- !u!135 &7697905781440609167 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3171852420265026366} + m_GameObject: {fileID: 2882835748065620628} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2636090723667956500 +--- !u!114 &6671399291573827366 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3171852420265026366} + m_GameObject: {fileID: 2882835748065620628} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3217,6 +3139,162 @@ MonoBehaviour: remark: createTime: createName: +--- !u!1 &3174602322088118997 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8395739506624401129} + - component: {fileID: 3136976870428164453} + - component: {fileID: 9090487933155096083} + m_Layer: 11 + m_Name: Sphere (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8395739506624401129 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3174602322088118997} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2352, y: -0.014200002, z: -0.0034999996} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 7597274171263352298} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3136976870428164453 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3174602322088118997} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &9090487933155096083 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3174602322088118997} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3225966865470306792 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8862396565282244604} + - component: {fileID: 9014558754663334811} + - component: {fileID: 8276716036584475549} + m_Layer: 11 + m_Name: Sphere (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8862396565282244604 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3225966865470306792} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.063099995, y: -0.014200002, z: -0.0038000047} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2161611759434366562} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &9014558754663334811 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3225966865470306792} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8276716036584475549 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3225966865470306792} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: --- !u!1 &3363355617532036011 GameObject: m_ObjectHideFlags: 0 @@ -3232,7 +3310,7 @@ GameObject: - component: {fileID: 3088174745486678115} - component: {fileID: 4105777676582997619} - component: {fileID: 8726460080868080276} - m_Layer: 8 + m_Layer: 13 m_Name: Object006 m_TagString: Untagged m_Icon: {fileID: 0} @@ -3251,18 +3329,18 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 8177790833841146288} - - {fileID: 64298488765880761} - - {fileID: 5371421072056191496} - - {fileID: 6714685027611952345} - - {fileID: 769810608071689993} - - {fileID: 5395839528422700896} - - {fileID: 6100369597082314912} - - {fileID: 8064664526245961273} - - {fileID: 1239912718611396405} - - {fileID: 1346502821402032249} - - {fileID: 377693250943047120} - - {fileID: 4594803425074548747} + - {fileID: 3888267719696444994} + - {fileID: 8909627397375898871} + - {fileID: 1737551386321662506} + - {fileID: 6487852688982037188} + - {fileID: 1943380600213620942} + - {fileID: 1981455670114701807} + - {fileID: 307521615889731751} + - {fileID: 7238108490386680368} + - {fileID: 7234879604934591016} + - {fileID: 3031708176016065676} + - {fileID: 8810144122745518575} + - {fileID: 8919192089792839712} m_Father: {fileID: 2329335555156093472} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -3421,7 +3499,7 @@ MeshCollider: m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -2639241166356525208, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!1 &3440785675798508651 +--- !u!1 &3438287407749661808 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3429,51 +3507,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 981326156512229030} - - component: {fileID: 8979305442455192625} - - component: {fileID: 3573037108065591519} + - component: {fileID: 1737551386321662506} + - component: {fileID: 187431108897492753} + - component: {fileID: 8581189764050194906} m_Layer: 11 - m_Name: Cube (31) + m_Name: Sphere (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &981326156512229030 +--- !u!4 &1737551386321662506 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3440785675798508651} + m_GameObject: {fileID: 3438287407749661808} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.10414, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.1163, y: -0.014200002, z: -0.0025999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2598459831961461594} - m_RootOrder: 7 + m_Father: {fileID: 8873399284239937245} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8979305442455192625 -BoxCollider: +--- !u!135 &187431108897492753 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3440785675798508651} + m_GameObject: {fileID: 3438287407749661808} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3573037108065591519 +--- !u!114 &8581189764050194906 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3440785675798508651} + m_GameObject: {fileID: 3438287407749661808} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3486,7 +3564,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 8 + portPosition: 3 deviceId: deviceName: portModel: @@ -3499,7 +3577,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3550373431111689705 +--- !u!1 &3642744107452497962 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3507,285 +3585,129 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2024646811815937695} - - component: {fileID: 3665601592356290233} - - component: {fileID: 1074827171180701310} + - component: {fileID: 984261542323513740} + - component: {fileID: 5473141350256619509} + - component: {fileID: 7684095127389548516} m_Layer: 11 - m_Name: Cube (42) + m_Name: Sphere (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2024646811815937695 +--- !u!4 &984261542323513740 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3550373431111689705} + m_GameObject: {fileID: 3642744107452497962} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.1163, y: -0.014200002, z: -0.0042999983} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 787144991333733553} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &5473141350256619509 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3642744107452497962} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7684095127389548516 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3642744107452497962} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3686007136732730111 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4880719635647625785} + - component: {fileID: 7996402955549998312} + - component: {fileID: 4066044405619392516} + m_Layer: 11 + m_Name: Sphere (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4880719635647625785 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3686007136732730111} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0631, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.026500002, y: -0.014200002, z: -0.0038000047} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 2161611759434366562} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3665601592356290233 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3550373431111689705} - 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!114 &1074827171180701310 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3550373431111689705} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3578795389578624986 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5644433590537822312} - - component: {fileID: 7294791854894590532} - - component: {fileID: 8530460057192408353} - m_Layer: 11 - m_Name: Cube (33) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5644433590537822312 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3578795389578624986} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1888, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2598459831961461594} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7294791854894590532 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3578795389578624986} - 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!114 &8530460057192408353 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3578795389578624986} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3615198054253721287 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4337139616402886004} - - component: {fileID: 1868633472572223702} - - component: {fileID: 7040087670923808156} - m_Layer: 11 - m_Name: Cube (24) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4337139616402886004 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3615198054253721287} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20305, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2598459831961461594} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1868633472572223702 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3615198054253721287} - 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!114 &7040087670923808156 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3615198054253721287} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3727619147167194420 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2888793755966792954} - - component: {fileID: 765080288659049278} - - component: {fileID: 7717992898655572311} - m_Layer: 11 - m_Name: Cube (28) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2888793755966792954 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3727619147167194420} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0265, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2598459831961461594} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &765080288659049278 -BoxCollider: +--- !u!135 &7996402955549998312 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3727619147167194420} + m_GameObject: {fileID: 3686007136732730111} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7717992898655572311 +--- !u!114 &4066044405619392516 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3727619147167194420} + m_GameObject: {fileID: 3686007136732730111} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -3811,84 +3733,6 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &3825444359565727440 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7957056465149033263} - - component: {fileID: 3140880314316514857} - - component: {fileID: 5354994440922117160} - m_Layer: 11 - m_Name: Cube (34) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7957056465149033263 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3825444359565727440} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2337, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2598459831961461594} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3140880314316514857 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3825444359565727440} - 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!114 &5354994440922117160 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3825444359565727440} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: --- !u!1 &3874747145493507334 GameObject: m_ObjectHideFlags: 0 @@ -4008,7 +3852,7 @@ Transform: m_Father: {fileID: 2329335555156093472} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &3999914995835219432 +--- !u!1 &4161203343414636887 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4016,753 +3860,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5257193285049439607} - - component: {fileID: 648268229745791427} - - component: {fileID: 2743354619907646073} + - component: {fileID: 4973593597287190668} + - component: {fileID: 6911645199592251550} + - component: {fileID: 3283097917597446602} m_Layer: 11 - m_Name: Cube (49) + m_Name: Sphere (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5257193285049439607 +--- !u!4 &4973593597287190668 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3999914995835219432} + m_GameObject: {fileID: 4161203343414636887} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1626, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 787144991333733553} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &648268229745791427 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3999914995835219432} - 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!114 &2743354619907646073 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3999914995835219432} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4007471298755283052 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2086232640035137634} - - component: {fileID: 5599492776218901677} - - component: {fileID: 5736692669988795747} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2086232640035137634 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4007471298755283052} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1163, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.15896, y: -0.014200002, z: -0.0034999996} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 7597274171263352298} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5599492776218901677 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4007471298755283052} - 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!114 &5736692669988795747 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4007471298755283052} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4053203881629379664 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5964918966855285402} - - component: {fileID: 6242502672999435567} - - component: {fileID: 5175296486298141418} - m_Layer: 11 - m_Name: Cube (52) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5964918966855285402 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4053203881629379664} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0265, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 787144991333733553} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6242502672999435567 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4053203881629379664} - 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!114 &5175296486298141418 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4053203881629379664} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4081134322272848326 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4755241432141861569} - - component: {fileID: 3863932005544243327} - - component: {fileID: 2785337795026410020} - m_Layer: 11 - m_Name: Cube (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4755241432141861569 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4081134322272848326} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0631, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3581526449222385374} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3863932005544243327 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4081134322272848326} - 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!114 &2785337795026410020 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4081134322272848326} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4401373469967030447 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5395839528422700896} - - component: {fileID: 1900980918261870285} - - component: {fileID: 8417330281224466458} - m_Layer: 11 - m_Name: Cube (29) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5395839528422700896 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4401373469967030447} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.016699987, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8873399284239937245} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1900980918261870285 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4401373469967030447} - 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!114 &8417330281224466458 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4401373469967030447} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4432692238250842488 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3131223276933139087} - - component: {fileID: 1613548382172656005} - - component: {fileID: 2252264592324526527} - m_Layer: 11 - m_Name: Cube (58) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3131223276933139087 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4432692238250842488} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2352, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 787144991333733553} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1613548382172656005 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4432692238250842488} - 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!114 &2252264592324526527 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4432692238250842488} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4654654100500048436 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8428704161039726651} - - component: {fileID: 810805166752711114} - - component: {fileID: 2159941754650881580} - m_Layer: 11 - m_Name: Cube (29) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8428704161039726651 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4654654100500048436} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0167, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2598459831961461594} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &810805166752711114 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4654654100500048436} - 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!114 &2159941754650881580 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4654654100500048436} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4990258930420532509 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4541101992050586856} - - component: {fileID: 254817150527633988} - - component: {fileID: 5248771132263092115} - m_Layer: 11 - m_Name: Cube (54) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4541101992050586856 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4990258930420532509} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0631, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 787144991333733553} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &254817150527633988 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4990258930420532509} - 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!114 &5248771132263092115 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4990258930420532509} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5043517145901045185 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4006643756670725804} - - component: {fileID: 38881471319657836} - - component: {fileID: 8019619631161897031} - m_Layer: 11 - m_Name: Cube (32) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4006643756670725804 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5043517145901045185} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1456, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2598459831961461594} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &38881471319657836 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5043517145901045185} - 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!114 &8019619631161897031 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5043517145901045185} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5046426878084809119 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7138058726862382906} - - component: {fileID: 2835487777460731085} - - component: {fileID: 2415180846113271887} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7138058726862382906 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5046426878084809119} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.15762, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3581526449222385374} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2835487777460731085 -BoxCollider: +--- !u!135 &6911645199592251550 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5046426878084809119} + m_GameObject: {fileID: 4161203343414636887} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2415180846113271887 +--- !u!114 &3283097917597446602 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5046426878084809119} + m_GameObject: {fileID: 4161203343414636887} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4788,7 +3930,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &5599853549971107538 +--- !u!1 &4167266710462225647 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4796,51 +3938,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 769810608071689993} - - component: {fileID: 5986111282154243180} - - component: {fileID: 5044043177129152273} + - component: {fileID: 5025570561163523918} + - component: {fileID: 6990116821257489802} + - component: {fileID: 6597098442063073632} m_Layer: 11 - m_Name: Cube (28) + m_Name: Sphere (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &769810608071689993 +--- !u!4 &5025570561163523918 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5599853549971107538} + m_GameObject: {fileID: 4167266710462225647} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0265, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.15849, y: -0.014200002, z: -0.0038000196} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 8873399284239937245} - m_RootOrder: 4 + m_Father: {fileID: 2161611759434366562} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5986111282154243180 -BoxCollider: +--- !u!135 &6990116821257489802 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5599853549971107538} + m_GameObject: {fileID: 4167266710462225647} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5044043177129152273 +--- !u!114 &6597098442063073632 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5599853549971107538} + m_GameObject: {fileID: 4167266710462225647} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4853,7 +3995,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 5 + portPosition: 2 deviceId: deviceName: portModel: @@ -4866,7 +4008,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &5713895657024644529 +--- !u!1 &4222018763737832545 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4874,51 +4016,129 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5256010864869567453} - - component: {fileID: 6635221040310125283} - - component: {fileID: 3190295295648305697} + - component: {fileID: 8919192089792839712} + - component: {fileID: 4778872771661045634} + - component: {fileID: 2699891893302067080} m_Layer: 11 - m_Name: Cube (39) + m_Name: Sphere (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5256010864869567453 +--- !u!4 &8919192089792839712 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5713895657024644529} + m_GameObject: {fileID: 4222018763737832545} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0731, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.27332, y: -0.014200002, z: -0.0025999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2161611759434366562} - m_RootOrder: 3 + m_Father: {fileID: 8873399284239937245} + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6635221040310125283 -BoxCollider: +--- !u!135 &4778872771661045634 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5713895657024644529} + m_GameObject: {fileID: 4222018763737832545} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3190295295648305697 +--- !u!114 &2699891893302067080 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5713895657024644529} + m_GameObject: {fileID: 4222018763737832545} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4282045206962862974 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3730995445569508650} + - component: {fileID: 1191491520212703035} + - component: {fileID: 9003361935743373969} + m_Layer: 11 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3730995445569508650 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4282045206962862974} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.07015, y: -0.014200002, z: -0.003999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 3581526449222385374} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1191491520212703035 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4282045206962862974} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &9003361935743373969 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4282045206962862974} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -4944,7 +4164,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &5750537904570980281 +--- !u!1 &4308737111365399629 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4952,51 +4172,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 64298488765880761} - - component: {fileID: 5500738590247166698} - - component: {fileID: 6885035914998791914} + - component: {fileID: 4509527296149453170} + - component: {fileID: 6590692258428312793} + - component: {fileID: 6687457115418547501} m_Layer: 11 - m_Name: Cube (25) + m_Name: Sphere (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &64298488765880761 +--- !u!4 &4509527296149453170 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5750537904570980281} + m_GameObject: {fileID: 4308737111365399629} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.15711, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.27415, y: -0.014200002, z: -0.003999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 8873399284239937245} - m_RootOrder: 1 + m_Father: {fileID: 3581526449222385374} + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5500738590247166698 -BoxCollider: +--- !u!135 &6590692258428312793 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5750537904570980281} + m_GameObject: {fileID: 4308737111365399629} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6885035914998791914 +--- !u!114 &6687457115418547501 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5750537904570980281} + m_GameObject: {fileID: 4308737111365399629} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -5009,7 +4229,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 2 + portPosition: 12 deviceId: deviceName: portModel: @@ -5022,7 +4242,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6089831433801361718 +--- !u!1 &4573556055965630374 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5030,51 +4250,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8566772668802091627} - - component: {fileID: 4151159162482753731} - - component: {fileID: 3241716082222498979} + - component: {fileID: 315647176258881027} + - component: {fileID: 9115393641488941594} + - component: {fileID: 3185058943684565692} m_Layer: 11 - m_Name: Cube (25) + m_Name: Sphere (7) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8566772668802091627 +--- !u!4 &315647176258881027 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6089831433801361718} + m_GameObject: {fileID: 4573556055965630374} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.15837, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.10414, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 2598459831961461594} - m_RootOrder: 1 + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4151159162482753731 -BoxCollider: +--- !u!135 &9115393641488941594 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6089831433801361718} + m_GameObject: {fileID: 4573556055965630374} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3241716082222498979 +--- !u!114 &3185058943684565692 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6089831433801361718} + m_GameObject: {fileID: 4573556055965630374} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -5087,7 +4307,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 2 + portPosition: 8 deviceId: deviceName: portModel: @@ -5100,7 +4320,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6293762111590812151 +--- !u!1 &4673239979365405183 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5108,51 +4328,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2111636263673913779} - - component: {fileID: 8258801866531208323} - - component: {fileID: 8954658266684717729} + - component: {fileID: 3412729144522006205} + - component: {fileID: 3278341286287095303} + - component: {fileID: 1836328746589587517} m_Layer: 11 - m_Name: Cube (9) + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2111636263673913779 +--- !u!4 &3412729144522006205 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6293762111590812151} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1888, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 4673239979365405183} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.18879999, y: -0.014200002, z: -0.0042999983} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 7597274171263352298} + m_Father: {fileID: 787144991333733553} m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8258801866531208323 -BoxCollider: +--- !u!135 &3278341286287095303 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6293762111590812151} + m_GameObject: {fileID: 4673239979365405183} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8954658266684717729 +--- !u!114 &1836328746589587517 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6293762111590812151} + m_GameObject: {fileID: 4673239979365405183} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -5178,7 +4398,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6548731687397412085 +--- !u!1 &4721543100665960707 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5186,51 +4406,285 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7481844945435761627} - - component: {fileID: 8977474492020103587} - - component: {fileID: 7565801249391028989} + - component: {fileID: 1882605838813107496} + - component: {fileID: 1709729279425083013} + - component: {fileID: 353755468902688719} m_Layer: 11 - m_Name: Cube (15) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7481844945435761627 +--- !u!4 &1882605838813107496 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6548731687397412085} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.07015, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 4721543100665960707} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.026500002, y: -0.014200002, z: -0.0042999983} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 3581526449222385374} - m_RootOrder: 3 + m_Father: {fileID: 787144991333733553} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8977474492020103587 -BoxCollider: +--- !u!135 &1709729279425083013 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6548731687397412085} + m_GameObject: {fileID: 4721543100665960707} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7565801249391028989 +--- !u!114 &353755468902688719 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6548731687397412085} + m_GameObject: {fileID: 4721543100665960707} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4816586772809011280 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3362833855080207625} + - component: {fileID: 6159887208210767016} + - component: {fileID: 2787294347492851722} + m_Layer: 11 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3362833855080207625 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4816586772809011280} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0167, y: -0.014200002, z: -0.0034999996} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 7597274171263352298} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6159887208210767016 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4816586772809011280} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2787294347492851722 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4816586772809011280} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5086838000972983167 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 173393514636389519} + - component: {fileID: 5933943807056398568} + - component: {fileID: 4744818790154600205} + m_Layer: 11 + m_Name: Sphere (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &173393514636389519 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5086838000972983167} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.23325, y: -0.014200002, z: -0.0038000047} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2161611759434366562} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &5933943807056398568 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5086838000972983167} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4744818790154600205 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5086838000972983167} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5135948662071325076 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2900591846364116817} + - component: {fileID: 7808165416516987353} + - component: {fileID: 6122234580968431446} + m_Layer: 11 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2900591846364116817 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5135948662071325076} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.0731, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2598459831961461594} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7808165416516987353 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5135948662071325076} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6122234580968431446 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5135948662071325076} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -5256,7 +4710,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6591280179610041098 +--- !u!1 &5252476335357128307 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5264,51 +4718,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4005814636551394509} - - component: {fileID: 5108870495134875972} - - component: {fileID: 5169505025075099956} + - component: {fileID: 3369802415714301075} + - component: {fileID: 7899417330191058272} + - component: {fileID: 3332356568951526206} m_Layer: 11 - m_Name: Cube (23) + m_Name: Sphere (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4005814636551394509 +--- !u!4 &3369802415714301075 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6591280179610041098} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.27415, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 5252476335357128307} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.27840018, y: -0.014200002, z: -0.0042999983} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 3581526449222385374} + m_Father: {fileID: 787144991333733553} m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5108870495134875972 -BoxCollider: +--- !u!135 &7899417330191058272 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6591280179610041098} + m_GameObject: {fileID: 5252476335357128307} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5169505025075099956 +--- !u!114 &3332356568951526206 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6591280179610041098} + m_GameObject: {fileID: 5252476335357128307} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -5334,7 +4788,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6599704378374993487 +--- !u!1 &5342088730438375079 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5342,51 +4796,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6100369597082314912} - - component: {fileID: 5219838224161937766} - - component: {fileID: 7439054690910457952} + - component: {fileID: 4347746254913837968} + - component: {fileID: 7979651231352596950} + - component: {fileID: 8964094915714416978} m_Layer: 11 - m_Name: Cube (30) + m_Name: Sphere (10) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6100369597082314912 +--- !u!4 &4347746254913837968 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6599704378374993487} + m_GameObject: {fileID: 5342088730438375079} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.05975, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.23314, y: -0.014200002, z: -0.003999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 8873399284239937245} - m_RootOrder: 6 + m_Father: {fileID: 3581526449222385374} + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5219838224161937766 -BoxCollider: +--- !u!135 &7979651231352596950 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6599704378374993487} + m_GameObject: {fileID: 5342088730438375079} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7439054690910457952 +--- !u!114 &8964094915714416978 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6599704378374993487} + m_GameObject: {fileID: 5342088730438375079} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -5399,7 +4853,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 7 + portPosition: 11 deviceId: deviceName: portModel: @@ -5412,7 +4866,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6626998083370121787 +--- !u!1 &5355160425752665781 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5420,51 +4874,441 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7547975891643376553} - - component: {fileID: 3627482936134578061} - - component: {fileID: 4511289031400683317} + - component: {fileID: 6535484612478536097} + - component: {fileID: 6505288411959724694} + - component: {fileID: 4260666895786888012} m_Layer: 11 - m_Name: Cube (6) + m_Name: Sphere (11) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7547975891643376553 +--- !u!4 &6535484612478536097 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6626998083370121787} + m_GameObject: {fileID: 5355160425752665781} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0631, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.27467996, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2598459831961461594} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6505288411959724694 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5355160425752665781} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4260666895786888012 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5355160425752665781} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5540700806524381212 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 652165345641507736} + - component: {fileID: 8535236153304943596} + - component: {fileID: 126789996776798226} + m_Layer: 11 + m_Name: Sphere (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &652165345641507736 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5540700806524381212} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.14682, y: -0.014200002, z: -0.0038000047} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2161611759434366562} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &8535236153304943596 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5540700806524381212} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &126789996776798226 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5540700806524381212} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 9 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5659058556342615462 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8620537135146663205} + - component: {fileID: 7024505894981143804} + - component: {fileID: 1974268815249212360} + m_Layer: 11 + m_Name: Sphere (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8620537135146663205 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5659058556342615462} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.14560002, y: -0.014200002, z: -0.003999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 3581526449222385374} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7024505894981143804 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5659058556342615462} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1974268815249212360 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5659058556342615462} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 9 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5833627220359340928 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5550368153480917865} + - component: {fileID: 7921990547371301253} + - component: {fileID: 5876288801837963155} + m_Layer: 11 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5550368153480917865 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5833627220359340928} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.0167, y: -0.014200002, z: -0.0042999983} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 787144991333733553} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7921990547371301253 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5833627220359340928} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5876288801837963155 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5833627220359340928} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &5963861616714241163 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4160964625316965764} + - component: {fileID: 2845784433885474867} + - component: {fileID: 4459012330718805251} + m_Layer: 11 + m_Name: Sphere (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4160964625316965764 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5963861616714241163} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.026500002, y: -0.014200002, z: -0.003999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 3581526449222385374} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2845784433885474867 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5963861616714241163} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4459012330718805251 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5963861616714241163} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6240345302262749725 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3775884829022601325} + - component: {fileID: 2515271455998498160} + - component: {fileID: 8340199107395986561} + m_Layer: 11 + m_Name: Sphere (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3775884829022601325 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6240345302262749725} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0631, y: -0.014200002, z: -0.0034999996} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 7597274171263352298} m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3627482936134578061 -BoxCollider: +--- !u!135 &2515271455998498160 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6626998083370121787} + m_GameObject: {fileID: 6240345302262749725} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4511289031400683317 +--- !u!114 &8340199107395986561 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6626998083370121787} + m_GameObject: {fileID: 6240345302262749725} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -5490,7 +5334,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6807959009962352737 +--- !u!1 &6454059460670462285 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5498,51 +5342,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4594803425074548747} - - component: {fileID: 1310677831165115544} - - component: {fileID: 7469000797213583308} + - component: {fileID: 5347522255439261625} + - component: {fileID: 50657066919433123} + - component: {fileID: 4359082745261242552} m_Layer: 11 - m_Name: Cube (35) + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4594803425074548747 +--- !u!4 &5347522255439261625 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6807959009962352737} + m_GameObject: {fileID: 6454059460670462285} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.27332, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.1888, y: -0.014200002, z: -0.0034999996} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 8873399284239937245} - m_RootOrder: 11 + m_Father: {fileID: 7597274171263352298} + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1310677831165115544 -BoxCollider: +--- !u!135 &50657066919433123 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6807959009962352737} + m_GameObject: {fileID: 6454059460670462285} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7469000797213583308 +--- !u!114 &4359082745261242552 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6807959009962352737} + m_GameObject: {fileID: 6454059460670462285} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -5555,7 +5399,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 12 + portPosition: 10 deviceId: deviceName: portModel: @@ -5568,7 +5412,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &6879902313011631865 +--- !u!1 &6494822344804559915 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5576,51 +5420,285 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 873259781300599029} - - component: {fileID: 948532239572557077} - - component: {fileID: 6275729735742572330} + - component: {fileID: 8804361589665933442} + - component: {fileID: 4216128903151280304} + - component: {fileID: 1703427247304570783} m_Layer: 11 - m_Name: Cube (3) + m_Name: Sphere (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &873259781300599029 +--- !u!4 &8804361589665933442 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6879902313011631865} + m_GameObject: {fileID: 6494822344804559915} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0677, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.026500002, y: -0.014200002, z: -0.0034999996} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 7597274171263352298} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &4216128903151280304 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6494822344804559915} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1703427247304570783 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6494822344804559915} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6506930784003968521 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2793250671315613402} + - component: {fileID: 7087921024647779473} + - component: {fileID: 2841132323307625255} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2793250671315613402 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6506930784003968521} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.20322, y: -0.014200002, z: -0.0038000047} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2161611759434366562} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7087921024647779473 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6506930784003968521} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2841132323307625255 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6506930784003968521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6596732726482234724 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5027928114379054603} + - component: {fileID: 8185108541708255781} + - component: {fileID: 6536280353394746633} + m_Layer: 11 + m_Name: Sphere (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5027928114379054603 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6596732726482234724} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.1456, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2598459831961461594} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &8185108541708255781 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6596732726482234724} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6536280353394746633 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6596732726482234724} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 9 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6745487712365445822 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4398397794232900968} + - component: {fileID: 6911339177721944481} + - component: {fileID: 479933278158690296} + m_Layer: 11 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4398397794232900968 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6745487712365445822} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.0677, y: -0.014200002, z: -0.0034999996} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 7597274171263352298} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &948532239572557077 -BoxCollider: +--- !u!135 &6911339177721944481 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6879902313011631865} + m_GameObject: {fileID: 6745487712365445822} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6275729735742572330 +--- !u!114 &479933278158690296 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6879902313011631865} + m_GameObject: {fileID: 6745487712365445822} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -5646,6 +5724,84 @@ MonoBehaviour: remark: createTime: createName: +--- !u!1 &6903117248395522956 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8819454296315295185} + - component: {fileID: 7107829095721632118} + - component: {fileID: 5912122629349271476} + m_Layer: 11 + m_Name: Sphere (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8819454296315295185 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6903117248395522956} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2784, y: -0.014200002, z: -0.0034999996} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 7597274171263352298} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7107829095721632118 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6903117248395522956} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5912122629349271476 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6903117248395522956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: --- !u!1 &7030413260837568781 GameObject: m_ObjectHideFlags: 0 @@ -5678,7 +5834,7 @@ Transform: m_Father: {fileID: 2329335555156093472} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &7221852744621920462 +--- !u!1 &7091066871706844301 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5686,129 +5842,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6426664917937781492} - - component: {fileID: 4328570315854433972} - - component: {fileID: 1273651230539062220} + - component: {fileID: 4360283626656544512} + - component: {fileID: 1207072996717844352} + - component: {fileID: 2913614302579417748} m_Layer: 11 - m_Name: Cube (26) + m_Name: Sphere (7) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6426664917937781492 +--- !u!4 &4360283626656544512 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7221852744621920462} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.11630003, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 7091066871706844301} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.1063, y: -0.014200002, z: -0.0042999983} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2598459831961461594} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4328570315854433972 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7221852744621920462} - 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!114 &1273651230539062220 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7221852744621920462} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7290030102865640055 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8064664526245961273} - - component: {fileID: 3808797644312930613} - - component: {fileID: 6019873273874546715} - m_Layer: 11 - m_Name: Cube (31) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8064664526245961273 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7290030102865640055} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1048, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8873399284239937245} + m_Father: {fileID: 787144991333733553} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3808797644312930613 -BoxCollider: +--- !u!135 &1207072996717844352 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7290030102865640055} + m_GameObject: {fileID: 7091066871706844301} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6019873273874546715 +--- !u!114 &2913614302579417748 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7290030102865640055} + m_GameObject: {fileID: 7091066871706844301} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -5834,7 +5912,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7301358205407030230 +--- !u!1 &7092530992459617313 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5842,51 +5920,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1649997744457105803} - - component: {fileID: 6013908127069294379} - - component: {fileID: 6130787058360464436} + - component: {fileID: 3450385595666657289} + - component: {fileID: 8852287623684648239} + - component: {fileID: 6386301567250493890} m_Layer: 11 - m_Name: Cube (21) + m_Name: Sphere (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1649997744457105803 +--- !u!4 &3450385595666657289 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7301358205407030230} + m_GameObject: {fileID: 7092530992459617313} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1888, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.0631, y: -0.014200002, z: -0.003999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 3581526449222385374} - m_RootOrder: 9 + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6013908127069294379 -BoxCollider: +--- !u!135 &8852287623684648239 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7301358205407030230} + m_GameObject: {fileID: 7092530992459617313} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6130787058360464436 +--- !u!114 &6386301567250493890 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7301358205407030230} + m_GameObject: {fileID: 7092530992459617313} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -5899,7 +5977,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 10 + portPosition: 7 deviceId: deviceName: portModel: @@ -5912,7 +5990,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7347214524535571411 +--- !u!1 &7202712746285891443 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5920,129 +5998,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4637773727881991259} - - component: {fileID: 832216838091175595} - - component: {fileID: 4813290003625019987} + - component: {fileID: 3888267719696444994} + - component: {fileID: 7205818930494362745} + - component: {fileID: 798406508284704286} m_Layer: 11 - m_Name: Cube (17) + m_Name: Sphere m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4637773727881991259 +--- !u!4 &3888267719696444994 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7347214524535571411} + m_GameObject: {fileID: 7202712746285891443} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.016699994, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: 0.20010999, y: -0.014200002, z: -0.0025999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 3581526449222385374} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &832216838091175595 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7347214524535571411} - 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!114 &4813290003625019987 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7347214524535571411} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7516051846470709829 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6312056132373434306} - - component: {fileID: 8821178340266478904} - - component: {fileID: 6545345927863123178} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6312056132373434306 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7516051846470709829} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20189, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7597274171263352298} + m_Father: {fileID: 8873399284239937245} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8821178340266478904 -BoxCollider: +--- !u!135 &7205818930494362745 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7516051846470709829} + m_GameObject: {fileID: 7202712746285891443} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6545345927863123178 +--- !u!114 &798406508284704286 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7516051846470709829} + m_GameObject: {fileID: 7202712746285891443} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -6068,7 +6068,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &7614406635837056285 +--- !u!1 &7202731200084318000 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -6076,363 +6076,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5891212962710087181} - - component: {fileID: 4659077425458235618} - - component: {fileID: 7491178927327934762} + - component: {fileID: 7736487814244908578} + - component: {fileID: 3551259680154120698} + - component: {fileID: 7933152962656039928} m_Layer: 11 - m_Name: Cube (50) + m_Name: Sphere (8) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5891212962710087181 +--- !u!4 &7736487814244908578 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7614406635837056285} + m_GameObject: {fileID: 7202731200084318000} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1163, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 787144991333733553} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4659077425458235618 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7614406635837056285} - 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!114 &7491178927327934762 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7614406635837056285} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7720832306621661397 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7968338335919027888} - - component: {fileID: 3130264144696923176} - - component: {fileID: 3391639369782349489} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7968338335919027888 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7720832306621661397} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0167, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7597274171263352298} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3130264144696923176 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7720832306621661397} - 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!114 &3391639369782349489 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7720832306621661397} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7809697447772384159 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 499457524538716505} - - component: {fileID: 9165219253807010668} - - component: {fileID: 1697192855078575845} - m_Layer: 11 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &499457524538716505 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7809697447772384159} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.23314, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3581526449222385374} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9165219253807010668 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7809697447772384159} - 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!114 &1697192855078575845 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7809697447772384159} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7921507709482913455 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9054014694917940961} - - component: {fileID: 9167876644737347230} - - component: {fileID: 1735147969636170739} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9054014694917940961 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7921507709482913455} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20189, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3581526449222385374} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9167876644737347230 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7921507709482913455} - 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!114 &1735147969636170739 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7921507709482913455} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7962201886912099688 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8642393499705613626} - - component: {fileID: 6869472180334173350} - - component: {fileID: 3640323870350046782} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8642393499705613626 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7962201886912099688} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1456, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.1456, y: -0.014200002, z: -0.0034999996} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 7597274171263352298} m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6869472180334173350 -BoxCollider: +--- !u!135 &3551259680154120698 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7962201886912099688} + m_GameObject: {fileID: 7202731200084318000} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3640323870350046782 +--- !u!114 &7933152962656039928 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7962201886912099688} + m_GameObject: {fileID: 7202731200084318000} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -6458,7 +6146,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &8031761078693882766 +--- !u!1 &7287127507175350416 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -6466,285 +6154,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6307632742800704549} - - component: {fileID: 6830737471918275098} - - component: {fileID: 6684838323897274116} + - component: {fileID: 7234879604934591016} + - component: {fileID: 6028823470494661219} + - component: {fileID: 7602938617065771618} m_Layer: 11 - m_Name: Cube (14) + m_Name: Sphere (8) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6307632742800704549 +--- !u!4 &7234879604934591016 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8031761078693882766} + m_GameObject: {fileID: 7287127507175350416} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.11555, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3581526449222385374} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6830737471918275098 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8031761078693882766} - 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!114 &6684838323897274116 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8031761078693882766} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8055078970257783313 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6529106354918216541} - - component: {fileID: 5228839289941516236} - - component: {fileID: 4552960314768295063} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6529106354918216541 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8055078970257783313} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2784, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7597274171263352298} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5228839289941516236 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8055078970257783313} - 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!114 &4552960314768295063 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8055078970257783313} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8147014814926662552 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2512490374861157634} - - component: {fileID: 2566439859536094952} - - component: {fileID: 4864168593803923419} - m_Layer: 11 - m_Name: Cube (41) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2512490374861157634 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8147014814926662552} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0167, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2161611759434366562} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2566439859536094952 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8147014814926662552} - 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!114 &4864168593803923419 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8147014814926662552} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8273560560398729193 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1346502821402032249} - - component: {fileID: 2120062454578992958} - - component: {fileID: 8700425207662301795} - m_Layer: 11 - m_Name: Cube (33) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1346502821402032249 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8273560560398729193} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1888, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.1456, y: -0.014200002, z: -0.0025999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 8873399284239937245} - m_RootOrder: 9 + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2120062454578992958 -BoxCollider: +--- !u!135 &6028823470494661219 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8273560560398729193} + m_GameObject: {fileID: 7287127507175350416} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8700425207662301795 +--- !u!114 &7602938617065771618 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8273560560398729193} + m_GameObject: {fileID: 7287127507175350416} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -6757,7 +6211,7 @@ MonoBehaviour: portCode: portName: portType: - portPosition: 10 + portPosition: 9 deviceId: deviceName: portModel: @@ -6770,7 +6224,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &8326528076410562150 +--- !u!1 &7465803285409517247 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -6778,363 +6232,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8216891459945394975} - - component: {fileID: 1981613455247454892} - - component: {fileID: 525881340620209130} + - component: {fileID: 5303667364890271151} + - component: {fileID: 673046673262486079} + - component: {fileID: 1898787655360215760} m_Layer: 11 - m_Name: Cube (4) + m_Name: Sphere (3) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8216891459945394975 +--- !u!4 &5303667364890271151 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8326528076410562150} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0265, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7597274171263352298} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1981613455247454892 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8326528076410562150} - 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!114 &525881340620209130 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8326528076410562150} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8401761876601793371 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8177790833841146288} - - component: {fileID: 5405432722210429631} - - component: {fileID: 2218249055744515327} - m_Layer: 11 - m_Name: Cube (24) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8177790833841146288 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8401761876601793371} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20011, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8873399284239937245} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5405432722210429631 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8401761876601793371} - 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!114 &2218249055744515327 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8401761876601793371} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8496244394199365183 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1624414754017249623} - - component: {fileID: 8668808307096443165} - - component: {fileID: 7013449447602249741} - m_Layer: 11 - m_Name: Cube (59) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1624414754017249623 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8496244394199365183} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.27840018, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_GameObject: {fileID: 7465803285409517247} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0731, y: -0.014200002, z: -0.0042999983} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 787144991333733553} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8668808307096443165 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8496244394199365183} - 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!114 &7013449447602249741 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8496244394199365183} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8714910309614987142 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1009889247171203509} - - component: {fileID: 8198454315711156278} - - component: {fileID: 3362573862786156633} - m_Layer: 11 - m_Name: Cube (36) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1009889247171203509 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8714910309614987142} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20322, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2161611759434366562} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8198454315711156278 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8714910309614987142} - 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!114 &3362573862786156633 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8714910309614987142} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8944265726676213343 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6714685027611952345} - - component: {fileID: 7149974176812540195} - - component: {fileID: 6971272945915818705} - m_Layer: 11 - m_Name: Cube (27) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6714685027611952345 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8944265726676213343} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0731, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8873399284239937245} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7149974176812540195 -BoxCollider: +--- !u!135 &673046673262486079 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8944265726676213343} + m_GameObject: {fileID: 7465803285409517247} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6971272945915818705 +--- !u!114 &1898787655360215760 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8944265726676213343} + m_GameObject: {fileID: 7465803285409517247} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -7160,7 +6302,7 @@ MonoBehaviour: remark: createTime: createName: ---- !u!1 &8949643851837737510 +--- !u!1 &7717954046938885459 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -7168,51 +6310,129 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8540876986530184459} - - component: {fileID: 3588010852552116005} - - component: {fileID: 378778956363208430} + - component: {fileID: 6398228193710873596} + - component: {fileID: 4112543213104706983} + - component: {fileID: 1254725311316329247} m_Layer: 11 - m_Name: Cube (37) + m_Name: Sphere (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8540876986530184459 +--- !u!4 &6398228193710873596 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8949643851837737510} + m_GameObject: {fileID: 7717954046938885459} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.15849, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 + m_LocalPosition: {x: -0.18879999, y: -0.014200002, z: -0.003999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 2161611759434366562} - m_RootOrder: 1 + m_Father: {fileID: 3581526449222385374} + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3588010852552116005 -BoxCollider: +--- !u!135 &4112543213104706983 +SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8949643851837737510} + m_GameObject: {fileID: 7717954046938885459} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} + m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &378778956363208430 +--- !u!114 &1254725311316329247 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8949643851837737510} + m_GameObject: {fileID: 7717954046938885459} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 10 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7797639986637379793 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 360539297950294875} + - component: {fileID: 1408787125549475423} + - component: {fileID: 3016116170282865398} + m_Layer: 11 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &360539297950294875 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7797639986637379793} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.1626, y: -0.014200002, z: -0.0042999983} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 787144991333733553} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1408787125549475423 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7797639986637379793} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3016116170282865398 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7797639986637379793} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} @@ -7238,3 +6458,783 @@ MonoBehaviour: remark: createTime: createName: +--- !u!1 &7935514417262433726 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7238108490386680368} + - component: {fileID: 3751161076853815023} + - component: {fileID: 5885122784479061112} + m_Layer: 11 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7238108490386680368 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7935514417262433726} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.1048, y: -0.014200002, z: -0.0025999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 8873399284239937245} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3751161076853815023 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7935514417262433726} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5885122784479061112 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7935514417262433726} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8094919976354635745 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 552166725259317454} + - component: {fileID: 4025118144000500207} + - component: {fileID: 7739204814851063649} + m_Layer: 11 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &552166725259317454 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8094919976354635745} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.016699994, y: -0.014200002, z: -0.003999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 3581526449222385374} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &4025118144000500207 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8094919976354635745} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7739204814851063649 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8094919976354635745} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8181639139979596729 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8812545563072191542} + - component: {fileID: 3677557471318730099} + - component: {fileID: 456487908748818036} + m_Layer: 11 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8812545563072191542 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8181639139979596729} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.15837, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2598459831961461594} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3677557471318730099 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8181639139979596729} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &456487908748818036 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8181639139979596729} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8316970460956516118 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3031708176016065676} + - component: {fileID: 3255841025034276851} + - component: {fileID: 8029167968001814856} + m_Layer: 11 + m_Name: Sphere (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3031708176016065676 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8316970460956516118} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.1888, y: -0.014200002, z: -0.0025999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 8873399284239937245} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &3255841025034276851 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8316970460956516118} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8029167968001814856 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8316970460956516118} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 10 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8354722660438118870 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3832818164241230304} + - component: {fileID: 1328840066898496492} + - component: {fileID: 7014793084097153243} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3832818164241230304 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8354722660438118870} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.20189, y: -0.014200002, z: -0.003999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 3581526449222385374} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1328840066898496492 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8354722660438118870} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7014793084097153243 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8354722660438118870} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8454572724362545019 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6487852688982037188} + - component: {fileID: 8722741291281450742} + - component: {fileID: 4434484358966807650} + m_Layer: 11 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6487852688982037188 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8454572724362545019} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.0731, y: -0.014200002, z: -0.0025999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 8873399284239937245} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &8722741291281450742 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8454572724362545019} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4434484358966807650 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8454572724362545019} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8615078338186916263 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4813927210342856425} + - component: {fileID: 6972107393299887799} + - component: {fileID: 5635387806921422825} + m_Layer: 11 + m_Name: Sphere (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4813927210342856425 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8615078338186916263} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.18879999, y: -0.014200002, z: -0.0038000047} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2161611759434366562} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6972107393299887799 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8615078338186916263} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5635387806921422825 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8615078338186916263} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 10 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &9115872924809203517 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1943380600213620942} + - component: {fileID: 7699513556167901207} + - component: {fileID: 5908334614467490851} + m_Layer: 11 + m_Name: Sphere (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1943380600213620942 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9115872924809203517} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.026500002, y: -0.014200002, z: -0.0025999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 8873399284239937245} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &7699513556167901207 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9115872924809203517} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5908334614467490851 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9115872924809203517} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &9141169039202230172 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1352742117045237856} + - component: {fileID: 2615029069355317203} + - component: {fileID: 1065077964480661335} + m_Layer: 11 + m_Name: Sphere (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1352742117045237856 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9141169039202230172} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.11555, y: -0.014200002, z: -0.003999993} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 3581526449222385374} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &2615029069355317203 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9141169039202230172} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1065077964480661335 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9141169039202230172} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &9141786508525779710 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5144468255054880925} + - component: {fileID: 1591851893128390821} + - component: {fileID: 1617523741851542075} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5144468255054880925 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9141786508525779710} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.20305, y: -0.014200002, z: -0.003399998} + m_LocalScale: {x: 0.015, y: 0.015, z: 0.015} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2598459831961461594} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1591851893128390821 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9141786508525779710} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1617523741851542075 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9141786508525779710} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/94.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/94-old.prefab similarity index 78% rename from GQ_URP/GQ/Assets/prefab/老模型/94.prefab rename to GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/94-old.prefab index 69ada3254..7f5043db8 100644 --- a/GQ_URP/GQ/Assets/prefab/老模型/94.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/94-old.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &783209682734537231 +--- !u!1 &445004528334360235 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,2147 +8,54 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3944445775375592411} - - component: {fileID: 11681200170268396} - - component: {fileID: 691856240686287067} - - component: {fileID: 11681200170268398} - - component: {fileID: 11681200170268397} - - component: {fileID: 6745642973544031109} - - component: {fileID: 4200204941952997982} - m_Layer: 8 - m_Name: Object003 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3944445775375592411 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 783209682734537231} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.17569539, y: 0.108672604, z: -0.013490637} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4133015143507854981} - - {fileID: 4133015143454214586} - m_Father: {fileID: 2600679975534840692} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &11681200170268396 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 783209682734537231} - m_Mesh: {fileID: -3996760141626369306, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &691856240686287067 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 783209682734537231} - 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 2446803691416548083, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 343868187792612432, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 3376099467616673647, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!114 &11681200170268398 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 783209682734537231} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &11681200170268397 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 783209682734537231} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &6745642973544031109 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 783209682734537231} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &4200204941952997982 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 783209682734537231} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -3996760141626369306, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!1 &868285061974135074 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4162243263789614632} - - component: {fileID: 5392536140053817428} - - component: {fileID: 7123240105092260097} - m_Layer: 8 - m_Name: Object010 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4162243263789614632 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 868285061974135074} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.030068845, y: 0.108672604, z: -0.013490637} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2600679975534840692} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5392536140053817428 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 868285061974135074} - m_Mesh: {fileID: 7643229109163234770, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &7123240105092260097 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 868285061974135074} - 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 5483008982332242224, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &2533212243767767446 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 906468171487289302} - - component: {fileID: 3364006845448860701} - - component: {fileID: 3864688610314851602} - m_Layer: 8 - m_Name: Box004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &906468171487289302 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2533212243767767446} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.1771093, y: 0.11922714, z: -0.062746026} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2600679975534840692} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3364006845448860701 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2533212243767767446} - m_Mesh: {fileID: -5613867604693661769, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &3864688610314851602 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2533212243767767446} - 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: 2841219563373173654, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &2959898458744613967 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7081705463004382724} - - component: {fileID: 2230786605366021993} - - component: {fileID: 6530627064261925498} - m_Layer: 8 - m_Name: Box006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7081705463004382724 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2959898458744613967} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.28054863, y: 0.11922714, z: -0.062746026} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2600679975534840692} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2230786605366021993 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2959898458744613967} - m_Mesh: {fileID: 3822247309040838107, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &6530627064261925498 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2959898458744613967} - 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: 66457086088218715, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 2841219563373173654, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &3412787353822532046 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2600679975534840692} - - component: {fileID: 8745096800254986387} - - component: {fileID: 5582055149922525637} - - component: {fileID: 9033539185321525092} - - component: {fileID: 6558557724077256069} - - component: {fileID: 7738618829086954916} - m_Layer: 8 - m_Name: 94 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2600679975534840692 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3412787353822532046} - 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: 2872317716438635990} - - {fileID: 2189655125825406120} - - {fileID: 906468171487289302} - - {fileID: 7548234057945703899} - - {fileID: 7081705463004382724} - - {fileID: 8836407068170105606} - - {fileID: 3944445775375592411} - - {fileID: 6262972491702154170} - - {fileID: 436797000973020058} - - {fileID: 1022422132950642830} - - {fileID: 4850722505650662974} - - {fileID: 2051964377374942137} - - {fileID: 7904432157606484437} - - {fileID: 2405576094978086700} - - {fileID: 4162243263789614632} - - {fileID: 2017854178678042721} - - {fileID: 8643230449607101929} - - {fileID: 5360320792510165482} - - {fileID: 5000854960993987988} - - {fileID: 8736839535926748465} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &8745096800254986387 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3412787353822532046} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 5 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &5582055149922525637 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3412787353822532046} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 5 - selfIcon: {fileID: 0} ---- !u!114 &9033539185321525092 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3412787353822532046} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &6558557724077256069 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3412787353822532046} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 94 - occupyNum: 5 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7738618829086954916 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3412787353822532046} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!1 &3919932025300482468 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2189655125825406120} - - component: {fileID: 8084269636446752183} - - component: {fileID: 7791660949807914719} - m_Layer: 8 - m_Name: Box003 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2189655125825406120 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3919932025300482468} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.14218193, y: 0.11922714, z: -0.062746026} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2600679975534840692} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8084269636446752183 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3919932025300482468} - m_Mesh: {fileID: 690106047850165013, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &7791660949807914719 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3919932025300482468} - 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: 2841219563373173654, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &4133015143161643465 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4133015143161643466} - - component: {fileID: 4133015143161643460} - - component: {fileID: 4133015143161643467} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4133015143161643466 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143161643465} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.00091056526, y: 0.014009367, z: 0.019227404} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6262972491702154170} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4133015143161643460 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143161643465} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} - m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} ---- !u!114 &4133015143161643467 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143161643465} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4133015143383957282 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4133015143383957283} - - component: {fileID: 4133015143383957309} - - component: {fileID: 4133015143383957308} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4133015143383957283 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143383957282} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.003622502, y: 0.014009369, z: 0.00030739792} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 436797000973020058} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4133015143383957309 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143383957282} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.7740604, y: 1.050554, z: 0.6695809} - m_Center: {x: 0.058433417, y: -0.4308767, z: -0.16520952} ---- !u!114 &4133015143383957308 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143383957282} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4133015143386650530 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4133015143386650531} - - component: {fileID: 4133015143386650557} - - component: {fileID: 4133015143386650556} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4133015143386650531 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143386650530} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.0020986497, y: 0.014009367, z: 0.019527394} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8836407068170105606} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4133015143386650557 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143386650530} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} - m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} ---- !u!114 &4133015143386650556 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143386650530} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4133015143454214585 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4133015143454214586} - - component: {fileID: 4133015143454214580} - - component: {fileID: 4133015143454214587} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4133015143454214586 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143454214585} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.0037046075, y: 0.014009368, z: 0.009627397} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3944445775375592411} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4133015143454214580 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143454214585} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} - m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} ---- !u!114 &4133015143454214587 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143454214585} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4133015143507854980 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4133015143507854981} - - component: {fileID: 4133015143507854983} - - component: {fileID: 4133015143507854982} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4133015143507854981 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143507854980} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.0037046075, y: 0.014009367, z: 0.019527394} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3944445775375592411} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4133015143507854983 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143507854980} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} - m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} ---- !u!114 &4133015143507854982 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143507854980} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4133015143509511313 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4133015143509511314} - - component: {fileID: 4133015143509511340} - - component: {fileID: 4133015143509511315} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4133015143509511314 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143509511313} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.0020986497, y: 0.014009368, z: 0.009427401} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8836407068170105606} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4133015143509511340 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143509511313} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} - m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} ---- !u!114 &4133015143509511315 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143509511313} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4133015143588132329 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4133015143588132330} - - component: {fileID: 4133015143588132324} - - component: {fileID: 4133015143588132331} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4133015143588132330 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143588132329} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.003622502, y: 0.014009367, z: 0.0166574} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 436797000973020058} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4133015143588132324 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143588132329} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.7740604, y: 1.050554, z: 0.6695809} - m_Center: {x: 0.058433417, y: -0.4308767, z: -0.16520952} ---- !u!114 &4133015143588132331 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143588132329} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4133015143839630225 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4133015143839630226} - - component: {fileID: 4133015143839630252} - - component: {fileID: 4133015143839630227} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4133015143839630226 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143839630225} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.00091056526, y: 0.014009369, z: 0.0028274013} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6262972491702154170} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4133015143839630252 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143839630225} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} - m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} ---- !u!114 &4133015143839630227 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015143839630225} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4133015144073727601 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4133015144073727602} - - component: {fileID: 4133015144073727884} - - component: {fileID: 4133015144073727603} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4133015144073727602 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015144073727601} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.00091056526, y: 0.014009368, z: 0.0111274} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6262972491702154170} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4133015144073727884 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015144073727601} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} - m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} ---- !u!114 &4133015144073727603 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015144073727601} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4133015144798339563 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4133015144798339556} - - component: {fileID: 4133015144798339558} - - component: {fileID: 4133015144798339557} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4133015144798339556 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015144798339563} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.003622502, y: 0.014009371, z: -0.016602606} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 436797000973020058} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4133015144798339558 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015144798339563} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.7740604, y: 1.050554, z: 0.6695809} - m_Center: {x: 0.058433417, y: -0.4308767, z: -0.16520952} ---- !u!114 &4133015144798339557 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015144798339563} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4133015144891017124 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4133015144891017125} - - component: {fileID: 4133015144891017127} - - component: {fileID: 4133015144891017126} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4133015144891017125 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015144891017124} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.00091056526, y: 0.014009365, z: 0.028427396} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6262972491702154170} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4133015144891017127 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015144891017124} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} - m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} ---- !u!114 &4133015144891017126 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015144891017124} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4133015145214845455 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4133015145214845448} - - component: {fileID: 4133015145214845450} - - component: {fileID: 4133015145214845449} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4133015145214845448 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015145214845455} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.003622502, y: 0.014009364, z: 0.033727396} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 436797000973020058} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4133015145214845450 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015145214845455} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.7740604, y: 1.050554, z: 0.6695809} - m_Center: {x: 0.058433417, y: -0.4308767, z: -0.16520952} ---- !u!114 &4133015145214845449 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133015145214845455} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4840144198917060868 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4850722505650662974} - - component: {fileID: 7522306294509303685} - - component: {fileID: 6192206452449454431} - m_Layer: 8 - m_Name: Object005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4850722505650662974 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4840144198917060868} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.038519233, y: 0.108672604, z: -0.013490637} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2600679975534840692} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7522306294509303685 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4840144198917060868} - m_Mesh: {fileID: -2639241166356525208, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &6192206452449454431 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4840144198917060868} - 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -899806608179610634, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &4855332299287049892 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2017854178678042721} - - component: {fileID: 8716900619864238505} - - component: {fileID: 6190229079124997949} - m_Layer: 8 - m_Name: Object011 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2017854178678042721 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4855332299287049892} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.0042251945, y: 0.108672604, z: -0.013490637} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2600679975534840692} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8716900619864238505 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4855332299287049892} - m_Mesh: {fileID: -3243264717552843444, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &6190229079124997949 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4855332299287049892} - 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 2446803691416548083, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 343868187792612432, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 3376099467616673647, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &5113854448648837485 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7548234057945703899} - - component: {fileID: 4136970542556281818} - - component: {fileID: 5366827294318456054} - m_Layer: 8 - m_Name: Box005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7548234057945703899 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5113854448648837485} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.20933586, y: 0.11922714, z: -0.062746026} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2600679975534840692} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4136970542556281818 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5113854448648837485} - m_Mesh: {fileID: 6715375062900545627, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &5366827294318456054 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5113854448648837485} - 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: 66457086088218715, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 2841219563373173654, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &5328784226180140751 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2051964377374942137} - - component: {fileID: 1336978365780005787} - - component: {fileID: 6565000889081604014} - m_Layer: 8 - m_Name: Object006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2051964377374942137 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5328784226180140751} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.07281327, y: 0.108672604, z: -0.013490637} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2600679975534840692} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1336978365780005787 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5328784226180140751} - m_Mesh: {fileID: 7733717212360752527, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &6565000889081604014 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5328784226180140751} - 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -3806979676295470834, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &5557212895431119241 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5360320792510165482} - - component: {fileID: 4451256967993772193} - - component: {fileID: 6868293621663179557} - m_Layer: 8 - m_Name: Object018 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5360320792510165482 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5557212895431119241} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.14362183, y: 0.15057148, z: -0.062137723} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2600679975534840692} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4451256967993772193 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5557212895431119241} - m_Mesh: {fileID: -6558347715830034149, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &6868293621663179557 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5557212895431119241} - 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: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &5952477672788107362 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 436797000973020058} - - component: {fileID: 3769916326749820526} - - component: {fileID: 6413248571719656292} - - component: {fileID: 5952477672788107388} - - component: {fileID: 5952477672788107363} - - component: {fileID: 8584484802645921176} - - component: {fileID: 9000933923789977695} - m_Layer: 8 + - component: {fileID: 5960614350300775763} + - component: {fileID: 6982520377233356967} + - component: {fileID: 988509598112828845} + - component: {fileID: 445004528334360245} + - component: {fileID: 445004528334360234} + - component: {fileID: 2564163195137090385} + - component: {fileID: 2908821868175054486} + m_Layer: 13 m_Name: Object001 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &436797000973020058 +--- !u!4 &5960614350300775763 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5952477672788107362} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2785775, y: 0.108672604, z: -0.013490637} + m_GameObject: {fileID: 445004528334360235} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.27863854, y: 0.013490625, z: 0.10867262} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 4133015145214845448} - - {fileID: 4133015143588132330} - - {fileID: 4133015143383957283} - - {fileID: 4133015144798339556} - m_Father: {fileID: 2600679975534840692} - m_RootOrder: 8 + - {fileID: 7920952982909406401} + - {fileID: 7920952982388382499} + - {fileID: 7920952982181515754} + - {fileID: 7920952982495440685} + m_Father: {fileID: 8316756648468626207} + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3769916326749820526 +--- !u!33 &6982520377233356967 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5952477672788107362} + m_GameObject: {fileID: 445004528334360235} m_Mesh: {fileID: -8113768720884857512, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &6413248571719656292 +--- !u!23 &988509598112828845 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5952477672788107362} + m_GameObject: {fileID: 445004528334360235} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -2189,13 +96,13 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &5952477672788107388 +--- !u!114 &445004528334360245 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5952477672788107362} + m_GameObject: {fileID: 445004528334360235} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -2247,26 +154,26 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &5952477672788107363 +--- !u!114 &445004528334360234 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5952477672788107362} + m_GameObject: {fileID: 445004528334360235} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &8584484802645921176 +--- !u!114 &2564163195137090385 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5952477672788107362} + m_GameObject: {fileID: 445004528334360235} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -2278,13 +185,13 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 0, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &9000933923789977695 +--- !u!64 &2908821868175054486 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5952477672788107362} + m_GameObject: {fileID: 445004528334360235} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -2292,7 +199,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -8113768720884857512, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!1 &6028866865692606891 +--- !u!1 &512669140495822690 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2300,9 +207,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8643230449607101929} - - component: {fileID: 5840804381413957911} - - component: {fileID: 1672231700376101950} + - component: {fileID: 2541551819266335520} + - component: {fileID: 412430138929352670} + - component: {fileID: 4864871084977375991} m_Layer: 8 m_Name: Object014 m_TagString: Untagged @@ -2310,36 +217,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8643230449607101929 +--- !u!4 &2541551819266335520 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6028866865692606891} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.027531004, y: 0.15057148, z: -0.062137723} + m_GameObject: {fileID: 512669140495822690} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.027469968, y: 0.062137716, z: 0.1505715} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2600679975534840692} - m_RootOrder: 16 + m_Father: {fileID: 8316756648468626207} + m_RootOrder: 15 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5840804381413957911 +--- !u!33 &412430138929352670 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6028866865692606891} + m_GameObject: {fileID: 512669140495822690} m_Mesh: {fileID: 3941715523697911101, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &1672231700376101950 +--- !u!23 &4864871084977375991 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6028866865692606891} + m_GameObject: {fileID: 512669140495822690} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -2375,7 +282,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &6714772616889195485 +--- !u!1 &691339630918153492 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2383,46 +290,72 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2872317716438635990} - - component: {fileID: 2436684507667017082} - - component: {fileID: 1930415290775223252} + - component: {fileID: 8316756648468626207} + - component: {fileID: 8459831594805707699} + - component: {fileID: 5655885474847675677} + - component: {fileID: 195842438363233151} + - component: {fileID: 7153168268141432284} + - component: {fileID: 3858621521615002585} + - component: {fileID: 3765040783096882077} + - component: {fileID: 4042578050794164056} + - component: {fileID: 2481769319278874132} m_Layer: 8 - m_Name: 94 + m_Name: 94-old m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2872317716438635990 +--- !u!4 &8316756648468626207 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6714772616889195485} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.000061035156, y: 0, z: 0} + m_GameObject: {fileID: 691339630918153492} + m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2600679975534840692} + m_Children: + - {fileID: 5392141471348042337} + - {fileID: 6351166580709617951} + - {fileID: 4357018539797646098} + - {fileID: 3958890830615554253} + - {fileID: 3321038366156414415} + - {fileID: 7064730740750583058} + - {fileID: 170301059506822515} + - {fileID: 5960614350300775763} + - {fileID: 6523415846758440519} + - {fileID: 1722259406046429431} + - {fileID: 5245991113718074736} + - {fileID: 4108871172764661532} + - {fileID: 8490931350996711909} + - {fileID: 7887150497940154593} + - {fileID: 5239744695777730216} + - {fileID: 2541551819266335520} + - {fileID: 2221441169919876899} + - {fileID: 1283825726583079773} + - {fileID: 3281143777044286456} + - {fileID: 1493775339868594063} + m_Father: {fileID: 0} m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2436684507667017082 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 90} +--- !u!33 &8459831594805707699 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6714772616889195485} + m_GameObject: {fileID: 691339630918153492} m_Mesh: {fileID: 4071154032785273126, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &1930415290775223252 +--- !u!23 &5655885474847675677 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6714772616889195485} + m_GameObject: {fileID: 691339630918153492} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -2460,192 +393,13 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &6724270499715481155 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5000854960993987988} - - component: {fileID: 1593325371642592666} - - component: {fileID: 7831048730635002877} - m_Layer: 8 - m_Name: Object019 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5000854960993987988 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6724270499715481155} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.17815283, y: 0.15057148, z: -0.062137723} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2600679975534840692} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1593325371642592666 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6724270499715481155} - m_Mesh: {fileID: -112464831985561941, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &7831048730635002877 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6724270499715481155} - 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: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &7128487159841251129 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8836407068170105606} - - component: {fileID: 8316627633817348041} - - component: {fileID: 933071053491324015} - - component: {fileID: 7128487159841251131} - - component: {fileID: 7128487159841251130} - - component: {fileID: 498682394457618557} - - component: {fileID: 2550987007936672129} - m_Layer: 8 - m_Name: Object007 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8836407068170105606 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7128487159841251129} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.14140135, y: 0.108672604, z: -0.013490637} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4133015143386650531} - - {fileID: 4133015143509511314} - m_Father: {fileID: 2600679975534840692} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8316627633817348041 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7128487159841251129} - m_Mesh: {fileID: -3292925553009838691, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &933071053491324015 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7128487159841251129} - 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -3032525779187151254, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 343868187792612432, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!114 &7128487159841251131 +--- !u!114 &195842438363233151 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7128487159841251129} + m_GameObject: {fileID: 691339630918153492} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -2657,20 +411,20 @@ MonoBehaviour: deviceCode: type: 2 typeStr: - deviceType: 3 + deviceType: 1 deviceTypeStr: rackId: shelfId: slotId: - devicePosition: 1 + devicePosition: machineModel: status: conDeviceName: rackType: openFlag: backDoorFlag: - modelNum: - occupyNum: + modelNum: 94 + occupyNum: 5 residueNum: operationTime: directorName: @@ -2697,52 +451,93 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &7128487159841251130 +--- !u!114 &7153168268141432284 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7128487159841251129} + m_GameObject: {fileID: 691339630918153492} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} + m_Name: + m_EditorClassIdentifier: + listTargets: [] + frames: [] + PerTier: 42 + PerRow: 5 + volume: 5 + isExit: 0 + isClicked: 0 + isTarget: 0 + isplace: 0 + canPut: 0 +--- !u!114 &3858621521615002585 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 691339630918153492} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &498682394457618557 +--- !u!114 &3765040783096882077 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7128487159841251129} + m_GameObject: {fileID: 691339630918153492} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} m_Name: m_EditorClassIdentifier: isTransparentGlow: 0 - My_magnifyState: 0 + meshRenderers: [] + materials: [] empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &2550987007936672129 + TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, + type: 3} + TransparentGlow_Shader_half: {fileID: 0} + original_jigui: [] + original_shebei: [] + search_u_wei: 0 + is_jigui: 0 +--- !u!114 &4042578050794164056 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 691339630918153492} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} + m_Name: + m_EditorClassIdentifier: + volume: 5 + selfIcon: {fileID: 0} +--- !u!64 &2481769319278874132 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7128487159841251129} + m_GameObject: {fileID: 691339630918153492} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 4 m_Convex: 0 m_CookingOptions: 30 - m_Mesh: {fileID: -3292925553009838691, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!1 &8106767472012641376 + m_Mesh: {fileID: 4071154032785273126, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!1 &713508011940253834 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2750,46 +545,213 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7904432157606484437} - - component: {fileID: 1665318754299563034} - - component: {fileID: 5448497590045266226} + - component: {fileID: 1283825726583079773} + - component: {fileID: 4803981114365072211} + - component: {fileID: 4042810733785779508} m_Layer: 8 - m_Name: Object008 + m_Name: Object019 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7904432157606484437 +--- !u!4 &1283825726583079773 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8106767472012641376} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.10710731, y: 0.108672604, z: -0.013490637} + m_GameObject: {fileID: 713508011940253834} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.17821386, y: 0.062137716, z: 0.1505715} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2600679975534840692} - m_RootOrder: 12 + m_Father: {fileID: 8316756648468626207} + m_RootOrder: 17 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1665318754299563034 +--- !u!33 &4803981114365072211 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8106767472012641376} - m_Mesh: {fileID: -7647463442239531939, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &5448497590045266226 + m_GameObject: {fileID: 713508011940253834} + m_Mesh: {fileID: -112464831985561941, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &4042810733785779508 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8106767472012641376} + m_GameObject: {fileID: 713508011940253834} + 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: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!1 &1319418505828120484 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4357018539797646098} + - component: {fileID: 7917032853339608339} + - component: {fileID: 2219508636551283263} + m_Layer: 8 + m_Name: Box005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4357018539797646098 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319418505828120484} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2093969, y: 0.0144, z: 0.1089} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8316756648468626207} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7917032853339608339 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319418505828120484} + m_Mesh: {fileID: 6715375062900545627, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &2219508636551283263 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319418505828120484} + 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: 66457086088218715, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 2841219563373173654, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!1 &1701285491781638093 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1722259406046429431} + - component: {fileID: 4382866779984927052} + - component: {fileID: 97013556659373974} + m_Layer: 8 + m_Name: Object005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1722259406046429431 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1701285491781638093} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.03858027, y: 0.013490625, z: 0.10867262} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8316756648468626207} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4382866779984927052 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1701285491781638093} + m_Mesh: {fileID: -2639241166356525208, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &97013556659373974 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1701285491781638093} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -2831,7 +793,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &8566360211548717188 +--- !u!1 &1717578609889761389 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2839,54 +801,219 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6262972491702154170} - - component: {fileID: 5603559549408434539} - - component: {fileID: 7249089385179836937} - - component: {fileID: 5603559549408434533} - - component: {fileID: 5603559549408434532} - - component: {fileID: 4099541547769141472} - - component: {fileID: 606124880635229291} + - component: {fileID: 5239744695777730216} + - component: {fileID: 3192820451786491744} + - component: {fileID: 98963923381524980} m_Layer: 8 - m_Name: Object004 + m_Name: Object011 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6262972491702154170 +--- !u!4 &5239744695777730216 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8566360211548717188} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.20998943, y: 0.108672604, z: -0.013490637} + m_GameObject: {fileID: 1717578609889761389} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0042862296, y: 0.013490625, z: 0.10867262} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4133015144891017125} - - {fileID: 4133015143161643466} - - {fileID: 4133015144073727602} - - {fileID: 4133015143839630226} - m_Father: {fileID: 2600679975534840692} - m_RootOrder: 7 + m_Children: [] + m_Father: {fileID: 8316756648468626207} + m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5603559549408434539 +--- !u!33 &3192820451786491744 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8566360211548717188} - m_Mesh: {fileID: -3531946766418785785, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &7249089385179836937 + m_GameObject: {fileID: 1717578609889761389} + m_Mesh: {fileID: -3243264717552843444, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &98963923381524980 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8566360211548717188} + m_GameObject: {fileID: 1717578609889761389} + 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 2446803691416548083, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 343868187792612432, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 3376099467616673647, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!1 &1848908011977948992 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2221441169919876899} + - component: {fileID: 7597995908255819368} + - component: {fileID: 857547659884711404} + m_Layer: 8 + m_Name: Object018 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2221441169919876899 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1848908011977948992} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.14368287, y: 0.062137716, z: 0.1505715} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8316756648468626207} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7597995908255819368 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1848908011977948992} + m_Mesh: {fileID: -6558347715830034149, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &857547659884711404 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1848908011977948992} + 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: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!1 &2108861791975628806 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5245991113718074736} + - component: {fileID: 5060477082585726290} + - component: {fileID: 1129306347257514343} + m_Layer: 8 + m_Name: Object006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5245991113718074736 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2108861791975628806} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.07287431, y: 0.013490625, z: 0.10867262} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8316756648468626207} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5060477082585726290 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2108861791975628806} + m_Mesh: {fileID: 7733717212360752527, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &1129306347257514343 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2108861791975628806} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -2927,13 +1054,109 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &5603559549408434533 +--- !u!1 &2474262476390346317 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 170301059506822515} + - component: {fileID: 1834192230102415266} + - component: {fileID: 3471848454517890240} + - component: {fileID: 1834192230102415276} + - component: {fileID: 1834192230102415277} + - component: {fileID: 7805851909608830505} + - component: {fileID: 6692042261976062626} + m_Layer: 13 + m_Name: Object004 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &170301059506822515 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2474262476390346317} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.21005046, y: 0.013490625, z: 0.10867262} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7920952982621653356} + - {fileID: 7920952981925670659} + - {fileID: 7920952981768822971} + - {fileID: 7920952981534207323} + m_Father: {fileID: 8316756648468626207} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1834192230102415266 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2474262476390346317} + m_Mesh: {fileID: -3531946766418785785, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &3471848454517890240 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2474262476390346317} + 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -3806979676295470834, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!114 &1834192230102415276 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8566360211548717188} + m_GameObject: {fileID: 2474262476390346317} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -2985,26 +1208,26 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &5603559549408434532 +--- !u!114 &1834192230102415277 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8566360211548717188} + m_GameObject: {fileID: 2474262476390346317} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &4099541547769141472 +--- !u!114 &7805851909608830505 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8566360211548717188} + m_GameObject: {fileID: 2474262476390346317} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -3016,13 +1239,13 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 0, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &606124880635229291 +--- !u!64 &6692042261976062626 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8566360211548717188} + m_GameObject: {fileID: 2474262476390346317} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -3030,7 +1253,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -3531946766418785785, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!1 &8895641429657587763 +--- !u!1 &2609428844099447465 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3038,9 +1261,301 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2405576094978086700} - - component: {fileID: 2626062950709349014} - - component: {fileID: 5905485941788491923} + - component: {fileID: 4108871172764661532} + - component: {fileID: 4876251813363819219} + - component: {fileID: 2246020874908844027} + m_Layer: 8 + m_Name: Object008 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4108871172764661532 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2609428844099447465} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.10716835, y: 0.013490625, z: 0.10867262} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8316756648468626207} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4876251813363819219 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2609428844099447465} + m_Mesh: {fileID: -7647463442239531939, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &2246020874908844027 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2609428844099447465} + 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -899806608179610634, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!1 &2907092453969823124 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3281143777044286456} + - component: {fileID: 3566666531783964342} + - component: {fileID: 1609212600174239356} + m_Layer: 8 + m_Name: Object020 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3281143777044286456 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2907092453969823124} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.21180847, y: 0.062137716, z: 0.1505715} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8316756648468626207} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3566666531783964342 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2907092453969823124} + m_Mesh: {fileID: -1444909868921906229, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &1609212600174239356 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2907092453969823124} + 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: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!1 &2941642036779261328 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1493775339868594063} + m_Layer: 8 + m_Name: "\u951A\u70B9" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1493775339868594063 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2941642036779261328} + 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: 8316756648468626207} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2974767710641074546 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6523415846758440519} + - component: {fileID: 344157978774632771} + - component: {fileID: 479329794617504962} + m_Layer: 8 + m_Name: Object002 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6523415846758440519 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2974767710641074546} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2443445, y: 0.013490625, z: 0.10867262} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8316756648468626207} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &344157978774632771 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2974767710641074546} + m_Mesh: {fileID: 9186633843763367028, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &479329794617504962 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2974767710641074546} + 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -899806608179610634, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!1 &3441912414642700026 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8490931350996711909} + - component: {fileID: 8126233095980295263} + - component: {fileID: 379159480080281178} m_Layer: 8 m_Name: Object009 m_TagString: Untagged @@ -3048,36 +1563,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2405576094978086700 +--- !u!4 &8490931350996711909 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8895641429657587763} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.06436288, y: 0.108672604, z: -0.013490637} + m_GameObject: {fileID: 3441912414642700026} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.06430185, y: 0.013490625, z: 0.10867262} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2600679975534840692} - m_RootOrder: 13 + m_Father: {fileID: 8316756648468626207} + m_RootOrder: 12 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2626062950709349014 +--- !u!33 &8126233095980295263 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8895641429657587763} + m_GameObject: {fileID: 3441912414642700026} m_Mesh: {fileID: 4944557015945844418, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &5905485941788491923 +--- !u!23 &379159480080281178 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8895641429657587763} + m_GameObject: {fileID: 3441912414642700026} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -3120,7 +1635,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &9002584098054794077 +--- !u!1 &3916709906705592816 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3128,129 +1643,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8736839535926748465} - - component: {fileID: 7334345044179294335} - - component: {fileID: 4819583808791785653} - m_Layer: 8 - m_Name: Object020 + - component: {fileID: 3321038366156414415} + - component: {fileID: 2872473440971163904} + - component: {fileID: 6360600587577928358} + - component: {fileID: 3916709906705592818} + - component: {fileID: 3916709906705592819} + - component: {fileID: 5934661683989894836} + - component: {fileID: 8633794721313349448} + m_Layer: 13 + m_Name: Object007 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8736839535926748465 +--- !u!4 &3321038366156414415 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9002584098054794077} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.21174744, y: 0.15057148, z: -0.062137723} + m_GameObject: {fileID: 3916709906705592816} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.14146239, y: 0.013490625, z: 0.10867262} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2600679975534840692} - m_RootOrder: 19 + m_Children: + - {fileID: 7920952982188521834} + - {fileID: 7920952982307611227} + m_Father: {fileID: 8316756648468626207} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7334345044179294335 +--- !u!33 &2872473440971163904 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9002584098054794077} - m_Mesh: {fileID: -1444909868921906229, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &4819583808791785653 + m_GameObject: {fileID: 3916709906705592816} + m_Mesh: {fileID: -3292925553009838691, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &6360600587577928358 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9002584098054794077} - 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: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &9079244607772286907 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1022422132950642830} - - component: {fileID: 5796478510764627850} - - component: {fileID: 5913613672686164491} - m_Layer: 8 - m_Name: Object002 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1022422132950642830 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9079244607772286907} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.24428347, y: 0.108672604, z: -0.013490637} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2600679975534840692} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5796478510764627850 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9079244607772286907} - m_Mesh: {fileID: 9186633843763367028, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &5913613672686164491 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9079244607772286907} + m_GameObject: {fileID: 3916709906705592816} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -3266,10 +1704,11 @@ MeshRenderer: m_Materials: - {fileID: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -899806608179610634, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -3032525779187151254, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 343868187792612432, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - {fileID: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} m_StaticBatchInfo: firstSubMesh: 0 @@ -3292,3 +1731,1579 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &3916709906705592818 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3916709906705592816} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} + m_Name: + m_EditorClassIdentifier: + deviceList: + id: + deviceName: + deviceCode: + type: 2 + typeStr: + deviceType: 3 + deviceTypeStr: + rackId: + shelfId: + slotId: + devicePosition: 1 + machineModel: + status: + conDeviceName: + rackType: + openFlag: + backDoorFlag: + modelNum: + occupyNum: + residueNum: + operationTime: + directorName: + phone: + manufacturer: + powerProperties: + maintenanceUnit: + machineFrameHigh: + machineFrameWide: + machineFrameThick: + slotNum: + slotSort: + installMethod: + affiliationFrame: + parentSlotName: + slotType: + occupyStatus: + affiliationSlot: + portNum: + cardFunction: + cardType: + runStatus: + tmsId: + remark: + createTime: + createName: +--- !u!114 &3916709906705592819 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3916709906705592816} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!114 &5934661683989894836 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3916709906705592816} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 0, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!64 &8633794721313349448 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3916709906705592816} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: -3292925553009838691, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!1 &6393791013160943595 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7887150497940154593} + - component: {fileID: 2189216338946868893} + - component: {fileID: 3921894787390820296} + m_Layer: 8 + m_Name: Object010 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7887150497940154593 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6393791013160943595} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.03000781, y: 0.013490625, z: 0.10867262} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8316756648468626207} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2189216338946868893 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6393791013160943595} + m_Mesh: {fileID: 7643229109163234770, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &3921894787390820296 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6393791013160943595} + 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 5483008982332242224, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!1 &6802984842628445382 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7064730740750583058} + - component: {fileID: 6097579606372980773} + - component: {fileID: 6714440644159055378} + - component: {fileID: 6097579606372980775} + - component: {fileID: 6097579606372980772} + - component: {fileID: 660583486117530956} + - component: {fileID: 7997737084855465111} + m_Layer: 13 + m_Name: Object003 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7064730740750583058 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6802984842628445382} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.17575642, y: 0.013490625, z: 0.10867262} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7920952982310316108} + - {fileID: 7920952982254118771} + m_Father: {fileID: 8316756648468626207} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6097579606372980773 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6802984842628445382} + m_Mesh: {fileID: -3996760141626369306, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &6714440644159055378 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6802984842628445382} + 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 2446803691416548083, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 343868187792612432, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 3376099467616673647, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!114 &6097579606372980775 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6802984842628445382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} + m_Name: + m_EditorClassIdentifier: + deviceList: + id: + deviceName: + deviceCode: + type: 2 + typeStr: + deviceType: 3 + deviceTypeStr: + rackId: + shelfId: + slotId: + devicePosition: 2 + machineModel: + status: + conDeviceName: + rackType: + openFlag: + backDoorFlag: + modelNum: + occupyNum: + residueNum: + operationTime: + directorName: + phone: + manufacturer: + powerProperties: + maintenanceUnit: + machineFrameHigh: + machineFrameWide: + machineFrameThick: + slotNum: + slotSort: + installMethod: + affiliationFrame: + parentSlotName: + slotType: + occupyStatus: + affiliationSlot: + portNum: + cardFunction: + cardType: + runStatus: + tmsId: + remark: + createTime: + createName: +--- !u!114 &6097579606372980772 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6802984842628445382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!114 &660583486117530956 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6802984842628445382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 0, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!64 &7997737084855465111 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6802984842628445382} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: -3996760141626369306, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!1 &7120735052878813037 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5392141471348042337} + - component: {fileID: 2631953501425984382} + - component: {fileID: 4077448708208242710} + m_Layer: 8 + m_Name: Box003 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5392141471348042337 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7120735052878813037} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.14224297, y: 0.0129, z: 0.1192} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8316756648468626207} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2631953501425984382 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7120735052878813037} + m_Mesh: {fileID: 690106047850165013, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &4077448708208242710 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7120735052878813037} + 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: 2841219563373173654, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!1 &7920952981534207320 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7920952981534207323} + - component: {fileID: 7920952981534207333} + - component: {fileID: 7920952981534207322} + m_Layer: 11 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7920952981534207323 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952981534207320} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.00091056526, y: 0.014009369, z: 0.0028274013} + m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 170301059506822515} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7920952981534207333 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952981534207320} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} + m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} +--- !u!114 &7920952981534207322 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952981534207320} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 8 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7920952981768822968 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7920952981768822971} + - component: {fileID: 7920952981768823109} + - component: {fileID: 7920952981768822970} + m_Layer: 11 + m_Name: Cube (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7920952981768822971 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952981768822968} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.00091056526, y: 0.014009368, z: 0.0111274} + m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 170301059506822515} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7920952981768823109 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952981768822968} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} + m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} +--- !u!114 &7920952981768822970 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952981768822968} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 7 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7920952981925670656 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7920952981925670659} + - component: {fileID: 7920952981925670669} + - component: {fileID: 7920952981925670658} + m_Layer: 11 + m_Name: Cube (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7920952981925670659 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952981925670656} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.00091056526, y: 0.014009367, z: 0.019227404} + m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 170301059506822515} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7920952981925670669 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952981925670656} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} + m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} +--- !u!114 &7920952981925670658 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952981925670656} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 6 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7920952982181515755 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7920952982181515754} + - component: {fileID: 7920952982181515764} + - component: {fileID: 7920952982181515765} + m_Layer: 11 + m_Name: Cube (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7920952982181515754 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982181515755} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.003622502, y: 0.014000009, z: 0.012580011} + m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5960614350300775763} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7920952982181515764 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982181515755} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.7740604, y: 1.050554, z: 0.6695809} + m_Center: {x: 0.058433417, y: -0.4308767, z: -0.16520952} +--- !u!114 &7920952982181515765 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982181515755} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 11 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7920952982188521835 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7920952982188521834} + - component: {fileID: 7920952982188521844} + - component: {fileID: 7920952982188521845} + m_Layer: 11 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7920952982188521834 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982188521835} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.0020986497, y: 0.014, z: 0.0296} + m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3321038366156414415} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7920952982188521844 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982188521835} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} + m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} +--- !u!114 &7920952982188521845 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982188521835} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7920952982254118768 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7920952982254118771} + - component: {fileID: 7920952982254118781} + - component: {fileID: 7920952982254118770} + m_Layer: 11 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7920952982254118771 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982254118768} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.0037046075, y: 0.013999994, z: 0.019500013} + m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7064730740750583058} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7920952982254118781 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982254118768} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} + m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} +--- !u!114 &7920952982254118770 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982254118768} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7920952982307611224 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7920952982307611227} + - component: {fileID: 7920952982307611237} + - component: {fileID: 7920952982307611226} + m_Layer: 11 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7920952982307611227 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982307611224} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.0020986497, y: 0.013999994, z: 0.019500006} + m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3321038366156414415} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7920952982307611237 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982307611224} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} + m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} +--- !u!114 &7920952982307611226 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982307611224} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7920952982310316109 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7920952982310316108} + - component: {fileID: 7920952982310316110} + - component: {fileID: 7920952982310316111} + m_Layer: 11 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7920952982310316108 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982310316109} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.0037046075, y: 0.014, z: 0.0294} + m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7064730740750583058} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7920952982310316110 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982310316109} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} + m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} +--- !u!114 &7920952982310316111 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982310316109} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7920952982388382496 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7920952982388382499} + - component: {fileID: 7920952982388382509} + - component: {fileID: 7920952982388382498} + m_Layer: 11 + m_Name: Cube (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7920952982388382499 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982388382496} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.003622502, y: 0.014000007, z: 0.028930014} + m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5960614350300775763} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7920952982388382509 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982388382496} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.7740604, y: 1.050554, z: 0.6695809} + m_Center: {x: 0.058433417, y: -0.4308767, z: -0.16520952} +--- !u!114 &7920952982388382498 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982388382496} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 10 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7920952982495440674 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7920952982495440685} + - component: {fileID: 7920952982495440687} + - component: {fileID: 7920952982495440684} + m_Layer: 11 + m_Name: Cube (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7920952982495440685 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982495440674} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.003622502, y: 0.014000012, z: -0.0043299925} + m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5960614350300775763} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7920952982495440687 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982495440674} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.7740604, y: 1.050554, z: 0.6695809} + m_Center: {x: 0.058433417, y: -0.4308767, z: -0.16520952} +--- !u!114 &7920952982495440684 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982495440674} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 12 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7920952982621653357 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7920952982621653356} + - component: {fileID: 7920952982621653358} + - component: {fileID: 7920952982621653359} + m_Layer: 11 + m_Name: Cube (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7920952982621653356 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982621653357} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.00091056526, y: 0.014009365, z: 0.028427396} + m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 170301059506822515} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7920952982621653358 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982621653357} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} + m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} +--- !u!114 &7920952982621653359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982621653357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 5 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &7920952982909406406 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7920952982909406401} + - component: {fileID: 7920952982909406403} + - component: {fileID: 7920952982909406400} + m_Layer: 11 + m_Name: Cube (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7920952982909406401 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982909406406} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.003622502, y: 0.014, z: 0.046} + m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5960614350300775763} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7920952982909406403 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982909406406} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.7740604, y: 1.050554, z: 0.6695809} + m_Center: {x: 0.058433417, y: -0.4308767, z: -0.16520952} +--- !u!114 &7920952982909406400 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7920952982909406406} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 9 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8615470440775114591 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6351166580709617951} + - component: {fileID: 8798012504124152532} + - component: {fileID: 6995685017966181339} + m_Layer: 8 + m_Name: Box004 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6351166580709617951 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8615470440775114591} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.17717034, y: 0.0125, z: 0.1192} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8316756648468626207} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8798012504124152532 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8615470440775114591} + m_Mesh: {fileID: -5613867604693661769, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &6995685017966181339 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8615470440775114591} + 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: 2841219563373173654, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!1 &9053396689318511238 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3958890830615554253} + - component: {fileID: 5351071562185269664} + - component: {fileID: 1015272630126097587} + m_Layer: 8 + m_Name: Box006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3958890830615554253 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9053396689318511238} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.28060967, y: 0.0141, z: 0.1192} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8316756648468626207} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5351071562185269664 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9053396689318511238} + m_Mesh: {fileID: 3822247309040838107, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &1015272630126097587 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9053396689318511238} + 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: 66457086088218715, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 2841219563373173654, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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} diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/94-old.prefab.meta b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/94-old.prefab.meta new file mode 100644 index 000000000..349b23bf1 --- /dev/null +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/94-old.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 73d0dfae409ae934cbaf0bf715e84c36 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/94.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/94.prefab index deb1bf0bd..7db239617 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/94.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/94.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &445004528334360235 +--- !u!1 &189665718616355190 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,54 +8,124 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5960614350300775763} - - component: {fileID: 6982520377233356967} - - component: {fileID: 988509598112828845} - - component: {fileID: 445004528334360245} - - component: {fileID: 445004528334360234} - - component: {fileID: 2564163195137090385} - - component: {fileID: 2908821868175054486} - m_Layer: 8 - m_Name: Object001 + - component: {fileID: 3506412241881294732} + - component: {fileID: 4456369269871631153} + - component: {fileID: 919676746896709939} + m_Layer: 11 + m_Name: Cube (3) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5960614350300775763 +--- !u!4 &3506412241881294732 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 445004528334360235} + m_GameObject: {fileID: 189665718616355190} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.0037656277, y: 0.013999991, z: 0.0094} + m_LocalScale: {x: 0.017640002, y: 0.012079998, z: 0.01795} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4955047088494037019} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &4456369269871631153 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 189665718616355190} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} + m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} +--- !u!114 &919676746896709939 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 189665718616355190} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &216075519224539040 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2291363200065026581} + - component: {fileID: 7305620413824528346} + - component: {fileID: 4170986547793916658} + m_Layer: 8 + m_Name: Object008 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2291363200065026581 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 216075519224539040} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.27863854, y: 0.013490625, z: 0.10867262} + m_LocalPosition: {x: -0.10716836, y: 0.013490625, z: 0.108672604} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 7920952982909406401} - - {fileID: 7920952982388382499} - - {fileID: 7920952982181515754} - - {fileID: 7920952982495440685} - m_Father: {fileID: 8316756648468626207} + m_Children: [] + m_Father: {fileID: 6170534180723291670} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6982520377233356967 +--- !u!33 &7305620413824528346 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 445004528334360235} - m_Mesh: {fileID: -8113768720884857512, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &988509598112828845 + m_GameObject: {fileID: 216075519224539040} + m_Mesh: {fileID: -7647463442239531939, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &4170986547793916658 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 445004528334360235} + m_GameObject: {fileID: 216075519224539040} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -69,12 +139,13 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 4945626539659787368, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 653fa9199393907419179a263c89ad93, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -96,110 +167,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &445004528334360245 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 445004528334360235} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 4 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &445004528334360234 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 445004528334360235} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &2564163195137090385 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 445004528334360235} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &2908821868175054486 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 445004528334360235} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -8113768720884857512, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!1 &512669140495822690 +--- !u!1 &333110944495231812 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -207,908 +175,55 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2541551819266335520} - - component: {fileID: 412430138929352670} - - component: {fileID: 4864871084977375991} - m_Layer: 8 - m_Name: Object014 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2541551819266335520 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 512669140495822690} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.027469968, y: 0.062137716, z: 0.1505715} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8316756648468626207} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &412430138929352670 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 512669140495822690} - m_Mesh: {fileID: 3941715523697911101, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &4864871084977375991 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 512669140495822690} - 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: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &691339630918153492 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8316756648468626207} - - component: {fileID: 8459831594805707699} - - component: {fileID: 5655885474847675677} - - component: {fileID: 195842438363233151} - - component: {fileID: 7153168268141432284} - - component: {fileID: 3858621521615002585} - - component: {fileID: 3765040783096882077} - - component: {fileID: 4042578050794164056} - - component: {fileID: 2481769319278874132} - m_Layer: 8 - m_Name: 94 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8316756648468626207 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 691339630918153492} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.000061035156, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 5392141471348042337} - - {fileID: 6351166580709617951} - - {fileID: 4357018539797646098} - - {fileID: 3958890830615554253} - - {fileID: 3321038366156414415} - - {fileID: 7064730740750583058} - - {fileID: 170301059506822515} - - {fileID: 5960614350300775763} - - {fileID: 6523415846758440519} - - {fileID: 1722259406046429431} - - {fileID: 5245991113718074736} - - {fileID: 4108871172764661532} - - {fileID: 8490931350996711909} - - {fileID: 7887150497940154593} - - {fileID: 5239744695777730216} - - {fileID: 2541551819266335520} - - {fileID: 2221441169919876899} - - {fileID: 1283825726583079773} - - {fileID: 3281143777044286456} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8459831594805707699 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 691339630918153492} - m_Mesh: {fileID: 4071154032785273126, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &5655885474847675677 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 691339630918153492} - 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: -2599914629603330193, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -9147942324677936573, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -103642963312995085, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!114 &195842438363233151 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 691339630918153492} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 94 - occupyNum: 5 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7153168268141432284 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 691339630918153492} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 5 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &3858621521615002585 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 691339630918153492} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &3765040783096882077 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 691339630918153492} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &4042578050794164056 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 691339630918153492} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 5 - selfIcon: {fileID: 0} ---- !u!64 &2481769319278874132 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 691339630918153492} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 4071154032785273126, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!1 &713508011940253834 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1283825726583079773} - - component: {fileID: 4803981114365072211} - - component: {fileID: 4042810733785779508} - m_Layer: 8 - m_Name: Object019 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1283825726583079773 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 713508011940253834} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.17821386, y: 0.062137716, z: 0.1505715} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8316756648468626207} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4803981114365072211 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 713508011940253834} - m_Mesh: {fileID: -112464831985561941, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &4042810733785779508 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 713508011940253834} - 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: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &1319418505828120484 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4357018539797646098} - - component: {fileID: 7917032853339608339} - - component: {fileID: 2219508636551283263} - m_Layer: 8 - m_Name: Box005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4357018539797646098 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1319418505828120484} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2093969, y: 0.0144, z: 0.1089} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8316756648468626207} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7917032853339608339 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1319418505828120484} - m_Mesh: {fileID: 6715375062900545627, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &2219508636551283263 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1319418505828120484} - 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: 66457086088218715, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 2841219563373173654, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &1701285491781638093 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1722259406046429431} - - component: {fileID: 4382866779984927052} - - component: {fileID: 97013556659373974} - m_Layer: 8 - m_Name: Object005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1722259406046429431 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1701285491781638093} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.03858027, y: 0.013490625, z: 0.10867262} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8316756648468626207} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4382866779984927052 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1701285491781638093} - m_Mesh: {fileID: -2639241166356525208, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &97013556659373974 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1701285491781638093} - 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -899806608179610634, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &1717578609889761389 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5239744695777730216} - - component: {fileID: 3192820451786491744} - - component: {fileID: 98963923381524980} - m_Layer: 8 - m_Name: Object011 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5239744695777730216 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1717578609889761389} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0042862296, y: 0.013490625, z: 0.10867262} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8316756648468626207} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3192820451786491744 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1717578609889761389} - m_Mesh: {fileID: -3243264717552843444, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &98963923381524980 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1717578609889761389} - 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 2446803691416548083, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 343868187792612432, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 3376099467616673647, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &1848908011977948992 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2221441169919876899} - - component: {fileID: 7597995908255819368} - - component: {fileID: 857547659884711404} - m_Layer: 8 - m_Name: Object018 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2221441169919876899 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1848908011977948992} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.14368287, y: 0.062137716, z: 0.1505715} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8316756648468626207} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7597995908255819368 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1848908011977948992} - m_Mesh: {fileID: -6558347715830034149, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &857547659884711404 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1848908011977948992} - 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: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &2108861791975628806 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5245991113718074736} - - component: {fileID: 5060477082585726290} - - component: {fileID: 1129306347257514343} - m_Layer: 8 - m_Name: Object006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5245991113718074736 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2108861791975628806} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.07287431, y: 0.013490625, z: 0.10867262} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8316756648468626207} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5060477082585726290 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2108861791975628806} - m_Mesh: {fileID: 7733717212360752527, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &1129306347257514343 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2108861791975628806} - 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -3806979676295470834, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &2474262476390346317 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 170301059506822515} - - component: {fileID: 1834192230102415266} - - component: {fileID: 3471848454517890240} - - component: {fileID: 1834192230102415276} - - component: {fileID: 1834192230102415277} - - component: {fileID: 7805851909608830505} - - component: {fileID: 6692042261976062626} - m_Layer: 8 + - component: {fileID: 2635782079668490362} + - component: {fileID: 4592957087318080171} + - component: {fileID: 1650377919328604617} + - component: {fileID: 1365330713022632880} + - component: {fileID: 2321981767425322408} + - component: {fileID: 8191160072421408185} + - component: {fileID: 389939582531847763} + - component: {fileID: 7769290764110618559} + m_Layer: 13 m_Name: Object004 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &170301059506822515 +--- !u!4 &2635782079668490362 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2474262476390346317} + m_GameObject: {fileID: 333110944495231812} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.21005046, y: 0.013490625, z: 0.10867262} + m_LocalPosition: {x: -0.20990643, y: 0.01349061, z: 0.108672604} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 7920952982621653356} - - {fileID: 7920952981925670659} - - {fileID: 7920952981768822971} - - {fileID: 7920952981534207323} - m_Father: {fileID: 8316756648468626207} - m_RootOrder: 6 + - {fileID: 8735808890841735129} + - {fileID: 1664137712861108429} + - {fileID: 3400347531988489357} + - {fileID: 4479387350546209310} + m_Father: {fileID: 6170534180723291670} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1834192230102415266 +--- !u!33 &4592957087318080171 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2474262476390346317} - m_Mesh: {fileID: -3531946766418785785, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &3471848454517890240 + m_GameObject: {fileID: 333110944495231812} + m_Mesh: {fileID: -8113768720884857512, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &1650377919328604617 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2474262476390346317} + m_GameObject: {fileID: 333110944495231812} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1122,12 +237,15 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -3806979676295470834, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 129dbff36d1e09240a4668136a526994, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: b2867f43f0b3e6945971e057c097f5ed, type: 2} + - {fileID: 2100000, guid: f820843438d1a704b88cdf3f6da24522, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -1149,13 +267,13 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &1834192230102415276 +--- !u!114 &1365330713022632880 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2474262476390346317} + m_GameObject: {fileID: 333110944495231812} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -1207,26 +325,48 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &1834192230102415277 +--- !u!114 &2321981767425322408 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2474262476390346317} + m_GameObject: {fileID: 333110944495231812} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &7805851909608830505 +--- !u!114 &8191160072421408185 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2474262476390346317} + m_GameObject: {fileID: 333110944495231812} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + meshRenderers: [] + materials: [] + empty: [] + TransparentGlow_Shader: {fileID: 0} + TransparentGlow_Shader_half: {fileID: 0} + original_jigui: [] + original_shebei: [] + search_u_wei: 0 + is_jigui: 0 +--- !u!114 &389939582531847763 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 333110944495231812} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -1238,21 +378,21 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 0, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &6692042261976062626 +--- !u!64 &7769290764110618559 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2474262476390346317} + m_GameObject: {fileID: 333110944495231812} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 4 m_Convex: 0 m_CookingOptions: 30 - m_Mesh: {fileID: -3531946766418785785, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!1 &2609428844099447465 + m_Mesh: {fileID: -8113768720884857512, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!1 &652189776894833651 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1260,270 +400,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4108871172764661532} - - component: {fileID: 4876251813363819219} - - component: {fileID: 2246020874908844027} - m_Layer: 8 - m_Name: Object008 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4108871172764661532 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2609428844099447465} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.10716835, y: 0.013490625, z: 0.10867262} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8316756648468626207} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4876251813363819219 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2609428844099447465} - m_Mesh: {fileID: -7647463442239531939, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &2246020874908844027 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2609428844099447465} - 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -899806608179610634, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &2907092453969823124 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3281143777044286456} - - component: {fileID: 3566666531783964342} - - component: {fileID: 1609212600174239356} - m_Layer: 8 - m_Name: Object020 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3281143777044286456 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2907092453969823124} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.21180847, y: 0.062137716, z: 0.1505715} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8316756648468626207} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3566666531783964342 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2907092453969823124} - m_Mesh: {fileID: -1444909868921906229, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &1609212600174239356 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2907092453969823124} - 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: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &2974767710641074546 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6523415846758440519} - - component: {fileID: 344157978774632771} - - component: {fileID: 479329794617504962} - m_Layer: 8 - m_Name: Object002 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6523415846758440519 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2974767710641074546} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2443445, y: 0.013490625, z: 0.10867262} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8316756648468626207} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &344157978774632771 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2974767710641074546} - m_Mesh: {fileID: 9186633843763367028, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &479329794617504962 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2974767710641074546} - 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -899806608179610634, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &3441912414642700026 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8490931350996711909} - - component: {fileID: 8126233095980295263} - - component: {fileID: 379159480080281178} + - component: {fileID: 5988928978077824236} + - component: {fileID: 6201183790452205910} + - component: {fileID: 2560896406438404947} m_Layer: 8 m_Name: Object009 m_TagString: Untagged @@ -1531,36 +410,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8490931350996711909 +--- !u!4 &5988928978077824236 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3441912414642700026} + m_GameObject: {fileID: 652189776894833651} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.06430185, y: 0.013490625, z: 0.10867262} + m_LocalPosition: {x: 0.064301856, y: 0.013490647, z: 0.10867261} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8316756648468626207} - m_RootOrder: 12 + m_Father: {fileID: 6170534180723291670} + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8126233095980295263 +--- !u!33 &6201183790452205910 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3441912414642700026} + m_GameObject: {fileID: 652189776894833651} m_Mesh: {fileID: 4944557015945844418, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &379159480080281178 +--- !u!23 &2560896406438404947 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3441912414642700026} + m_GameObject: {fileID: 652189776894833651} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1574,14 +453,14 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 2446803691416548083, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 343868187792612432, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 3376099467616673647, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -1603,7 +482,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &3916709906705592816 +--- !u!1 &1117267948766887035 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1611,52 +490,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3321038366156414415} - - component: {fileID: 2872473440971163904} - - component: {fileID: 6360600587577928358} - - component: {fileID: 3916709906705592818} - - component: {fileID: 3916709906705592819} - - component: {fileID: 5934661683989894836} - - component: {fileID: 8633794721313349448} + - component: {fileID: 8957376092265321294} + - component: {fileID: 2454351729123636298} + - component: {fileID: 2337299864906512843} m_Layer: 8 - m_Name: Object007 + m_Name: Object002 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3321038366156414415 +--- !u!4 &8957376092265321294 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3916709906705592816} + m_GameObject: {fileID: 1117267948766887035} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.14146239, y: 0.013490625, z: 0.10867262} + m_LocalPosition: {x: -0.24394403, y: 0.01349061, z: 0.108672604} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 7920952982188521834} - - {fileID: 7920952982307611227} - m_Father: {fileID: 8316756648468626207} - m_RootOrder: 4 + m_Children: [] + m_Father: {fileID: 6170534180723291670} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2872473440971163904 +--- !u!33 &2454351729123636298 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3916709906705592816} - m_Mesh: {fileID: -3292925553009838691, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &6360600587577928358 + m_GameObject: {fileID: 1117267948766887035} + m_Mesh: {fileID: -3996760141626369306, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &2337299864906512843 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3916709906705592816} + m_GameObject: {fileID: 1117267948766887035} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1670,14 +543,14 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -3032525779187151254, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 343868187792612432, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -1699,13 +572,141 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &3916709906705592818 +--- !u!1 &1130707118138281212 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 109836525239901976} + m_Layer: 8 + m_Name: "\u951A\u70B9" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &109836525239901976 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1130707118138281212} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.00006103516, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6170534180723291670} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1194536748312263929 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 639397841739944134} + - component: {fileID: 77750175047173129} + - component: {fileID: 9118749896550442927} + - component: {fileID: 3252324064129375509} + - component: {fileID: 6356413482348177298} + - component: {fileID: 6186484722885896904} + - component: {fileID: 1695381238856396884} + - component: {fileID: 1676543628343904070} + m_Layer: 13 + m_Name: Object007 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &639397841739944134 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1194536748312263929} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.1414624, y: 0.013490625, z: 0.108672604} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4285793811494062813} + - {fileID: 4955922530141442111} + m_Father: {fileID: 6170534180723291670} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &77750175047173129 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1194536748312263929} + m_Mesh: {fileID: 7733717212360752527, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &9118749896550442927 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1194536748312263929} + 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: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 13fa465344856364e89cbcb784d3c605, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: f820843438d1a704b88cdf3f6da24522, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!114 &3252324064129375509 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3916709906705592816} + m_GameObject: {fileID: 1194536748312263929} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -1757,26 +758,48 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &3916709906705592819 +--- !u!114 &6356413482348177298 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3916709906705592816} + m_GameObject: {fileID: 1194536748312263929} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &5934661683989894836 +--- !u!114 &6186484722885896904 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3916709906705592816} + m_GameObject: {fileID: 1194536748312263929} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + meshRenderers: [] + materials: [] + empty: [] + TransparentGlow_Shader: {fileID: 0} + TransparentGlow_Shader_half: {fileID: 0} + original_jigui: [] + original_shebei: [] + search_u_wei: 0 + is_jigui: 0 +--- !u!114 &1695381238856396884 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1194536748312263929} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -1788,13 +811,551 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 0, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &8633794721313349448 +--- !u!64 &1676543628343904070 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3916709906705592816} + m_GameObject: {fileID: 1194536748312263929} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 7733717212360752527, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!1 &1237839179429623749 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 721255610575828073} + - component: {fileID: 8102337473921585237} + - component: {fileID: 4513994112799835259} + m_Layer: 11 + m_Name: Cube (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &721255610575828073 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237839179429623749} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.0036835074, y: 0.014000021, z: 0.0346} + m_LocalScale: {x: 0.017640002, y: 0.012079998, z: 0.01795} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8390611914433742938} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8102337473921585237 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237839179429623749} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.62293905, y: 1.0505539, z: 0.6695809} + m_Center: {x: 0.13399413, y: -0.43087664, z: -0.16520953} +--- !u!114 &4513994112799835259 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237839179429623749} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1595597299805594822 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3400347531988489357} + - component: {fileID: 3891560351764435351} + - component: {fileID: 2901927760409573077} + m_Layer: 11 + m_Name: Cube (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3400347531988489357 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1595597299805594822} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.001115635, y: 0.014009379, z: 0.0099} + m_LocalScale: {x: 0.017640002, y: 0.012079998, z: 0.01795} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2635782079668490362} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3891560351764435351 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1595597299805594822} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} + m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} +--- !u!114 &2901927760409573077 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1595597299805594822} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1733899301967679285 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8735808890841735129} + - component: {fileID: 8987969575252568944} + - component: {fileID: 9183375562128331659} + m_Layer: 11 + m_Name: Cube (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8735808890841735129 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733899301967679285} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.001115635, y: 0.014009379, z: 0.028299995} + m_LocalScale: {x: 0.017640002, y: 0.012079998, z: 0.01795} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2635782079668490362} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &8987969575252568944 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733899301967679285} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} + m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} +--- !u!114 &9183375562128331659 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733899301967679285} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &1752916903702163237 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4955922530141442111} + - component: {fileID: 1395474853799130485} + - component: {fileID: 1932129666803812540} + m_Layer: 11 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4955922530141442111 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1752916903702163237} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.002159655, y: 0.013999991, z: 0.0094} + m_LocalScale: {x: 0.017640002, y: 0.012079998, z: 0.01795} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 639397841739944134} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1395474853799130485 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1752916903702163237} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} + m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} +--- !u!114 &1932129666803812540 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1752916903702163237} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &2370533315623158690 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8390611914433742938} + - component: {fileID: 5057489015206737326} + - component: {fileID: 3134168901159059620} + - component: {fileID: 4580894085555471515} + - component: {fileID: 8664964478595866783} + - component: {fileID: 7024303226007734841} + - component: {fileID: 3274532032487040481} + - component: {fileID: 8210957046786699883} + m_Layer: 13 + m_Name: Object001 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8390611914433742938 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2370533315623158690} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.27863857, y: 0.01349061, z: 0.108672604} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 721255610575828073} + - {fileID: 833097564523334788} + - {fileID: 338688931733749375} + - {fileID: 3285096261370488730} + m_Father: {fileID: 6170534180723291670} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5057489015206737326 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2370533315623158690} + m_Mesh: {fileID: -3292925553009838691, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &3134168901159059620 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2370533315623158690} + 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: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 7da34a9f58826cf49bb671d57e635842, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: b2867f43f0b3e6945971e057c097f5ed, type: 2} + - {fileID: 2100000, guid: f820843438d1a704b88cdf3f6da24522, 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!114 &4580894085555471515 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2370533315623158690} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} + m_Name: + m_EditorClassIdentifier: + deviceList: + id: + deviceName: + deviceCode: + type: 2 + typeStr: + deviceType: 3 + deviceTypeStr: + rackId: + shelfId: + slotId: + devicePosition: 4 + machineModel: + status: + conDeviceName: + rackType: + openFlag: + backDoorFlag: + modelNum: + occupyNum: + residueNum: + operationTime: + directorName: + phone: + manufacturer: + powerProperties: + maintenanceUnit: + machineFrameHigh: + machineFrameWide: + machineFrameThick: + slotNum: + slotSort: + installMethod: + affiliationFrame: + parentSlotName: + slotType: + occupyStatus: + affiliationSlot: + portNum: + cardFunction: + cardType: + runStatus: + tmsId: + remark: + createTime: + createName: +--- !u!114 &8664964478595866783 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2370533315623158690} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!114 &7024303226007734841 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2370533315623158690} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + meshRenderers: [] + materials: [] + empty: [] + TransparentGlow_Shader: {fileID: 0} + TransparentGlow_Shader_half: {fileID: 0} + original_jigui: [] + original_shebei: [] + search_u_wei: 0 + is_jigui: 0 +--- !u!114 &3274532032487040481 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2370533315623158690} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + My_magnifyState: 0 + empty: [] + TransparentGlow_Shader: {fileID: 0} + yiDong_pos: {x: 2.1, y: 0, z: 0} + fangDa_rot: {x: 0, y: -90, z: 0} +--- !u!64 &8210957046786699883 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2370533315623158690} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 @@ -1802,7 +1363,7 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -3292925553009838691, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!1 &6393791013160943595 +--- !u!1 &2437705113439249003 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1810,46 +1371,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7887150497940154593} - - component: {fileID: 2189216338946868893} - - component: {fileID: 3921894787390820296} + - component: {fileID: 399780051041906217} + - component: {fileID: 2553564326945440471} + - component: {fileID: 7298738803267110910} m_Layer: 8 - m_Name: Object010 + m_Name: Object014 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7887150497940154593 +--- !u!4 &399780051041906217 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6393791013160943595} + m_GameObject: {fileID: 2437705113439249003} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.03000781, y: 0.013490625, z: 0.10867262} + m_LocalPosition: {x: 0.027469963, y: 0.062137738, z: 0.15057148} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8316756648468626207} - m_RootOrder: 13 + m_Father: {fileID: 6170534180723291670} + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2189216338946868893 +--- !u!33 &2553564326945440471 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6393791013160943595} - m_Mesh: {fileID: 7643229109163234770, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &3921894787390820296 + m_GameObject: {fileID: 2437705113439249003} + m_Mesh: {fileID: 3941715523697911101, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &7298738803267110910 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6393791013160943595} + m_GameObject: {fileID: 2437705113439249003} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1863,12 +1424,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 5483008982332242224, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -1890,7 +1446,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &6802984842628445382 +--- !u!1 &3082250283479387470 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1898,52 +1454,1115 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7064730740750583058} - - component: {fileID: 6097579606372980773} - - component: {fileID: 6714440644159055378} - - component: {fileID: 6097579606372980775} - - component: {fileID: 6097579606372980772} - - component: {fileID: 660583486117530956} - - component: {fileID: 7997737084855465111} + - component: {fileID: 1664137712861108429} + - component: {fileID: 5253137525326714960} + - component: {fileID: 8048601388992197082} + m_Layer: 11 + m_Name: Cube (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1664137712861108429 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3082250283479387470} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.0011156499, y: 0.014009379, z: 0.019100003} + m_LocalScale: {x: 0.017640002, y: 0.012079998, z: 0.01795} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2635782079668490362} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &5253137525326714960 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3082250283479387470} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} + m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} +--- !u!114 &8048601388992197082 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3082250283479387470} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3366284743224492404 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3285096261370488730} + - component: {fileID: 7692416638241830176} + - component: {fileID: 4015745166355162345} + m_Layer: 11 + m_Name: Cube (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3285096261370488730 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3366284743224492404} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.0036834776, y: 0.014000021, z: -0.015729994} + m_LocalScale: {x: 0.017640002, y: 0.012079998, z: 0.01795} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8390611914433742938} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7692416638241830176 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3366284743224492404} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.6833884, y: 1.0505539, z: 0.6695809} + m_Center: {x: 0.103769444, y: -0.43087664, z: -0.16520952} +--- !u!114 &4015745166355162345 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3366284743224492404} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &3409519055252191261 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6170534180723291670} + - component: {fileID: 6029886951219826362} + - component: {fileID: 7544822267934119956} + - component: {fileID: 3632566393139446360} + - component: {fileID: 7942639068713988729} + - component: {fileID: 6123099234558680330} + - component: {fileID: 5850043952236208732} + - component: {fileID: 6189588949575085984} + - component: {fileID: 4082067411115629348} m_Layer: 8 + m_Name: 94 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6170534180723291670 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3409519055252191261} + m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: 0, y: 0, z: -0.00006103516} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8390611914433742938} + - {fileID: 8957376092265321294} + - {fileID: 4955047088494037019} + - {fileID: 2635782079668490362} + - {fileID: 3544222892818746878} + - {fileID: 7927649402086768761} + - {fileID: 639397841739944134} + - {fileID: 2291363200065026581} + - {fileID: 5988928978077824236} + - {fileID: 5457768635898095080} + - {fileID: 7961935561280476065} + - {fileID: 399780051041906217} + - {fileID: 109836525239901976} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6029886951219826362 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3409519055252191261} + m_Mesh: {fileID: 4071154032785273126, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &7544822267934119956 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3409519055252191261} + 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: 21a928aa044485343af836e2bb1fe397, type: 2} + - {fileID: 2100000, guid: c50df0b76d1bdfc419ca8872f429b9d5, type: 2} + - {fileID: 2100000, guid: 75960467c6e579941ac9cd60c3a754b3, 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!114 &3632566393139446360 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3409519055252191261} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} + m_Name: + m_EditorClassIdentifier: + deviceList: + id: + deviceName: + deviceCode: + type: 2 + typeStr: + deviceType: 1 + deviceTypeStr: + rackId: + shelfId: + slotId: + devicePosition: + machineModel: + status: + conDeviceName: + rackType: + openFlag: + backDoorFlag: + modelNum: 94 + occupyNum: 5 + residueNum: + operationTime: + directorName: + phone: + manufacturer: + powerProperties: + maintenanceUnit: + machineFrameHigh: + machineFrameWide: + machineFrameThick: + slotNum: + slotSort: + installMethod: + affiliationFrame: + parentSlotName: + slotType: + occupyStatus: + affiliationSlot: + portNum: + cardFunction: + cardType: + runStatus: + tmsId: + remark: + createTime: + createName: +--- !u!114 &7942639068713988729 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3409519055252191261} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} + m_Name: + m_EditorClassIdentifier: + listTargets: [] + frames: [] + PerTier: 42 + PerRow: 5 + volume: 5 + isExit: 0 + isClicked: 0 + isTarget: 0 + isplace: 0 + canPut: 0 +--- !u!114 &6123099234558680330 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3409519055252191261} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} + m_Name: + m_EditorClassIdentifier: + tmsAlarmLists: [] +--- !u!114 &5850043952236208732 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3409519055252191261} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + meshRenderers: [] + materials: [] + empty: [] + TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, + type: 3} + TransparentGlow_Shader_half: {fileID: 0} + original_jigui: [] + original_shebei: [] + search_u_wei: 0 + is_jigui: 0 +--- !u!114 &6189588949575085984 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3409519055252191261} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} + m_Name: + m_EditorClassIdentifier: + volume: 5 + selfIcon: {fileID: 0} +--- !u!64 &4082067411115629348 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3409519055252191261} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 4071154032785273126, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!1 &3539612265964901732 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7961935561280476065} + - component: {fileID: 758301797951195753} + - component: {fileID: 2852675318681031933} + m_Layer: 8 + m_Name: Object011 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7961935561280476065 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3539612265964901732} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.004488674, y: 0.01349064, z: 0.108672604} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6170534180723291670} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &758301797951195753 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3539612265964901732} + m_Mesh: {fileID: -3243264717552843444, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &2852675318681031933 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3539612265964901732} + 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: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!1 &3554751996904233668 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3544222892818746878} + - component: {fileID: 1880877513092191301} + - component: {fileID: 2851204554956573343} + m_Layer: 8 + m_Name: Object005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3544222892818746878 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3554751996904233668} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.038580276, y: 0.013490632, z: 0.108672604} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6170534180723291670} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1880877513092191301 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3554751996904233668} + m_Mesh: {fileID: 9186633843763367028, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &2851204554956573343 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3554751996904233668} + 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: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 653fa9199393907419179a263c89ad93, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &3992754462928633006 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4285793811494062813} + - component: {fileID: 5608521584516181938} + - component: {fileID: 1347814742380887028} + m_Layer: 11 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4285793811494062813 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3992754462928633006} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.002159685, y: 0.014000006, z: 0.019499995} + m_LocalScale: {x: 0.017640002, y: 0.012079998, z: 0.01795} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 639397841739944134} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &5608521584516181938 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3992754462928633006} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} + m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} +--- !u!114 &1347814742380887028 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3992754462928633006} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &4291091101036850447 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7927649402086768761} + - component: {fileID: 6986005680796414043} + - component: {fileID: 2982843228675179630} + m_Layer: 8 + m_Name: Object006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7927649402086768761 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4291091101036850447} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.072874315, y: 0.013490632, z: 0.108672604} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6170534180723291670} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6986005680796414043 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4291091101036850447} + m_Mesh: {fileID: -2639241166356525208, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &2982843228675179630 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4291091101036850447} + 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: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 653fa9199393907419179a263c89ad93, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &4711023935081101070 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 833097564523334788} + - component: {fileID: 7697954467581824478} + - component: {fileID: 8371150976988259163} + m_Layer: 11 + m_Name: Cube (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &833097564523334788 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4711023935081101070} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.0036835074, y: 0.014000021, z: 0.01753001} + m_LocalScale: {x: 0.017640002, y: 0.012079998, z: 0.01795} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8390611914433742938} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &7697954467581824478 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4711023935081101070} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.6833884, y: 1.0505539, z: 0.6695809} + m_Center: {x: 0.103769444, y: -0.43087664, z: -0.16520952} +--- !u!114 &8371150976988259163 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4711023935081101070} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 2 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &6310029403852303134 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 338688931733749375} + - component: {fileID: 2540347781839492532} + - component: {fileID: 4092988904131190169} + m_Layer: 11 + m_Name: Cube (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &338688931733749375 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6310029403852303134} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.0036835074, y: 0.014000021, z: 0.001180008} + m_LocalScale: {x: 0.017640002, y: 0.012079998, z: 0.01795} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8390611914433742938} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2540347781839492532 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6310029403852303134} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.68338674, y: 1.0505539, z: 0.6695809} + m_Center: {x: 0.103770286, y: -0.43087664, z: -0.16520952} +--- !u!114 &4092988904131190169 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6310029403852303134} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 3 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8212810353153065281 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4479387350546209310} + - component: {fileID: 4608726445360217662} + - component: {fileID: 4838099659243237329} + m_Layer: 11 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4479387350546209310 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8212810353153065281} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.001115635, y: 0.014009379, z: -0.0005} + m_LocalScale: {x: 0.017640002, y: 0.012079998, z: 0.01795} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2635782079668490362} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &4608726445360217662 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8212810353153065281} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} + m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} +--- !u!114 &4838099659243237329 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8212810353153065281} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 4 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8571137818182323858 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9185464770790192247} + - component: {fileID: 4008567977653865262} + - component: {fileID: 7728289547756750006} + m_Layer: 11 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9185464770790192247 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8571137818182323858} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.0037656426, y: 0.014000006, z: 0.019299991} + m_LocalScale: {x: 0.017640002, y: 0.012079998, z: 0.01795} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4955047088494037019} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &4008567977653865262 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8571137818182323858} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} + m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} +--- !u!114 &7728289547756750006 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8571137818182323858} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} + m_Name: + m_EditorClassIdentifier: + hight: {fileID: 0} + portList: + id: + port: + portCode: + portName: + portType: + portPosition: 1 + deviceId: + deviceName: + portModel: + status: 0 + conDevice: + conDeviceName: + conPort: + cableName: + cableGroupName: + remark: + createTime: + createName: +--- !u!1 &8691987502153726415 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4955047088494037019} + - component: {fileID: 8239298577608398124} + - component: {fileID: 8928199411322219291} + - component: {fileID: 4078999000249724348} + - component: {fileID: 5801274297697452777} + - component: {fileID: 6538244363885602685} + - component: {fileID: 6807458456231950666} + - component: {fileID: 4393767035478798651} + m_Layer: 13 m_Name: Object003 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7064730740750583058 +--- !u!4 &4955047088494037019 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6802984842628445382} + m_GameObject: {fileID: 8691987502153726415} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.17575642, y: 0.013490625, z: 0.10867262} + m_LocalPosition: {x: -0.17575644, y: 0.013490625, z: 0.108672604} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 7920952982310316108} - - {fileID: 7920952982254118771} - m_Father: {fileID: 8316756648468626207} - m_RootOrder: 5 + - {fileID: 9185464770790192247} + - {fileID: 3506412241881294732} + m_Father: {fileID: 6170534180723291670} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6097579606372980773 +--- !u!33 &8239298577608398124 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6802984842628445382} - m_Mesh: {fileID: -3996760141626369306, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &6714440644159055378 + m_GameObject: {fileID: 8691987502153726415} + m_Mesh: {fileID: -3531946766418785785, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &8928199411322219291 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6802984842628445382} + m_GameObject: {fileID: 8691987502153726415} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1957,14 +2576,14 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 2446803691416548083, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 343868187792612432, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 3376099467616673647, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 13fa465344856364e89cbcb784d3c605, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: f820843438d1a704b88cdf3f6da24522, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -1986,13 +2605,13 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &6097579606372980775 +--- !u!114 &4078999000249724348 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6802984842628445382} + m_GameObject: {fileID: 8691987502153726415} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -2044,26 +2663,48 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &6097579606372980772 +--- !u!114 &5801274297697452777 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6802984842628445382} + m_GameObject: {fileID: 8691987502153726415} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &660583486117530956 +--- !u!114 &6538244363885602685 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6802984842628445382} + m_GameObject: {fileID: 8691987502153726415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} + m_Name: + m_EditorClassIdentifier: + isTransparentGlow: 0 + meshRenderers: [] + materials: [] + empty: [] + TransparentGlow_Shader: {fileID: 0} + TransparentGlow_Shader_half: {fileID: 0} + original_jigui: [] + original_shebei: [] + search_u_wei: 0 + is_jigui: 0 +--- !u!114 &6807458456231950666 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8691987502153726415} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} @@ -2075,21 +2716,21 @@ MonoBehaviour: TransparentGlow_Shader: {fileID: 0} yiDong_pos: {x: 2.1, y: 0, z: 0} fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &7997737084855465111 +--- !u!64 &4393767035478798651 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6802984842628445382} + m_GameObject: {fileID: 8691987502153726415} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 4 m_Convex: 0 m_CookingOptions: 30 - m_Mesh: {fileID: -3996760141626369306, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!1 &7120735052878813037 + m_Mesh: {fileID: -3531946766418785785, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!1 &9111456268336706274 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2097,46 +2738,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5392141471348042337} - - component: {fileID: 2631953501425984382} - - component: {fileID: 4077448708208242710} + - component: {fileID: 5457768635898095080} + - component: {fileID: 4082656643577613204} + - component: {fileID: 1199211738166133441} m_Layer: 8 - m_Name: Box003 + m_Name: Object010 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5392141471348042337 +--- !u!4 &5457768635898095080 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7120735052878813037} + m_GameObject: {fileID: 9111456268336706274} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.14224297, y: 0.0129, z: 0.1192} + m_LocalPosition: {x: 0.029655162, y: 0.01349064, z: 0.108672604} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8316756648468626207} - m_RootOrder: 0 + m_Father: {fileID: 6170534180723291670} + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2631953501425984382 +--- !u!33 &4082656643577613204 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7120735052878813037} - m_Mesh: {fileID: 690106047850165013, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &4077448708208242710 + m_GameObject: {fileID: 9111456268336706274} + m_Mesh: {fileID: 7643229109163234770, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &1199211738166133441 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7120735052878813037} + m_GameObject: {fileID: 9111456268336706274} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -2150,1110 +2791,12 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2841219563373173654, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &7920952981534207320 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7920952981534207323} - - component: {fileID: 7920952981534207333} - - component: {fileID: 7920952981534207322} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7920952981534207323 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952981534207320} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.00091056526, y: 0.014009369, z: 0.0028274013} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 170301059506822515} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7920952981534207333 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952981534207320} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} - m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} ---- !u!114 &7920952981534207322 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952981534207320} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7920952981768822968 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7920952981768822971} - - component: {fileID: 7920952981768823109} - - component: {fileID: 7920952981768822970} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7920952981768822971 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952981768822968} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.00091056526, y: 0.014009368, z: 0.0111274} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 170301059506822515} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7920952981768823109 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952981768822968} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} - m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} ---- !u!114 &7920952981768822970 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952981768822968} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7920952981925670656 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7920952981925670659} - - component: {fileID: 7920952981925670669} - - component: {fileID: 7920952981925670658} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7920952981925670659 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952981925670656} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.00091056526, y: 0.014009367, z: 0.019227404} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 170301059506822515} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7920952981925670669 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952981925670656} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} - m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} ---- !u!114 &7920952981925670658 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952981925670656} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7920952982181515755 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7920952982181515754} - - component: {fileID: 7920952982181515764} - - component: {fileID: 7920952982181515765} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7920952982181515754 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982181515755} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.003622502, y: 0.014009369, z: 0.00030739792} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5960614350300775763} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7920952982181515764 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982181515755} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.7740604, y: 1.050554, z: 0.6695809} - m_Center: {x: 0.058433417, y: -0.4308767, z: -0.16520952} ---- !u!114 &7920952982181515765 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982181515755} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7920952982188521835 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7920952982188521834} - - component: {fileID: 7920952982188521844} - - component: {fileID: 7920952982188521845} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7920952982188521834 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982188521835} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.0020986497, y: 0.014009367, z: 0.019527394} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3321038366156414415} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7920952982188521844 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982188521835} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} - m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} ---- !u!114 &7920952982188521845 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982188521835} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7920952982254118768 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7920952982254118771} - - component: {fileID: 7920952982254118781} - - component: {fileID: 7920952982254118770} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7920952982254118771 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982254118768} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.0037046075, y: 0.014009368, z: 0.009627397} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7064730740750583058} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7920952982254118781 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982254118768} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} - m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} ---- !u!114 &7920952982254118770 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982254118768} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7920952982307611224 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7920952982307611227} - - component: {fileID: 7920952982307611237} - - component: {fileID: 7920952982307611226} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7920952982307611227 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982307611224} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.0020986497, y: 0.014009368, z: 0.009427401} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3321038366156414415} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7920952982307611237 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982307611224} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} - m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} ---- !u!114 &7920952982307611226 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982307611224} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7920952982310316109 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7920952982310316108} - - component: {fileID: 7920952982310316110} - - component: {fileID: 7920952982310316111} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7920952982310316108 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982310316109} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.0037046075, y: 0.014009367, z: 0.019527394} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7064730740750583058} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7920952982310316110 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982310316109} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} - m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} ---- !u!114 &7920952982310316111 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982310316109} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7920952982388382496 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7920952982388382499} - - component: {fileID: 7920952982388382509} - - component: {fileID: 7920952982388382498} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7920952982388382499 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982388382496} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.003622502, y: 0.014009367, z: 0.0166574} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5960614350300775763} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7920952982388382509 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982388382496} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.7740604, y: 1.050554, z: 0.6695809} - m_Center: {x: 0.058433417, y: -0.4308767, z: -0.16520952} ---- !u!114 &7920952982388382498 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982388382496} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7920952982495440674 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7920952982495440685} - - component: {fileID: 7920952982495440687} - - component: {fileID: 7920952982495440684} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7920952982495440685 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982495440674} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.003622502, y: 0.014009371, z: -0.016602606} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5960614350300775763} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7920952982495440687 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982495440674} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.7740604, y: 1.050554, z: 0.6695809} - m_Center: {x: 0.058433417, y: -0.4308767, z: -0.16520952} ---- !u!114 &7920952982495440684 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982495440674} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7920952982621653357 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7920952982621653356} - - component: {fileID: 7920952982621653358} - - component: {fileID: 7920952982621653359} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7920952982621653356 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982621653357} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.00091056526, y: 0.014009365, z: 0.028427396} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 170301059506822515} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7920952982621653358 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982621653357} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.82859695, y: 0.70153385, z: 0.6695809} - m_Center: {x: 0.08570169, y: -0.27457115, z: -0.16520952} ---- !u!114 &7920952982621653359 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982621653357} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7920952982909406406 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7920952982909406401} - - component: {fileID: 7920952982909406403} - - component: {fileID: 7920952982909406400} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7920952982909406401 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982909406406} - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.003622502, y: 0.014009364, z: 0.033727396} - m_LocalScale: {x: 0.01764, y: 0.012079997, z: 0.017949997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5960614350300775763} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7920952982909406403 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982909406406} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.7740604, y: 1.050554, z: 0.6695809} - m_Center: {x: 0.058433417, y: -0.4308767, z: -0.16520952} ---- !u!114 &7920952982909406400 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7920952982909406406} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8615470440775114591 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6351166580709617951} - - component: {fileID: 8798012504124152532} - - component: {fileID: 6995685017966181339} - m_Layer: 8 - m_Name: Box004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6351166580709617951 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8615470440775114591} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.17717034, y: 0.0125, z: 0.1192} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8316756648468626207} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8798012504124152532 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8615470440775114591} - m_Mesh: {fileID: -5613867604693661769, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &6995685017966181339 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8615470440775114591} - 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: 2841219563373173654, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - 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!1 &9053396689318511238 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3958890830615554253} - - component: {fileID: 5351071562185269664} - - component: {fileID: 1015272630126097587} - m_Layer: 8 - m_Name: Box006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3958890830615554253 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9053396689318511238} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.28060967, y: 0.0141, z: 0.1192} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8316756648468626207} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5351071562185269664 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9053396689318511238} - m_Mesh: {fileID: 3822247309040838107, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} ---- !u!23 &1015272630126097587 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9053396689318511238} - 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: 66457086088218715, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} - - {fileID: 2841219563373173654, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: b2a6ba5f26244a440a64b9090c0929e1, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/94.prefab.meta b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/94.prefab.meta index 349b23bf1..9ddfa0593 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/94.prefab.meta +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/94.prefab.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 73d0dfae409ae934cbaf0bf715e84c36 +guid: cc6ec6b5d5b371446a927f54d02b6762 PrefabImporter: externalObjects: {} userData: diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/95.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/95.prefab index 54703d390..960594078 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/95.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/95.prefab @@ -99,8 +99,8 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 8290782892783832528, guid: 2bab694e026390246b0cab1ba11e48a1, type: 3} - - {fileID: -7354762736914102348, guid: 2bab694e026390246b0cab1ba11e48a1, type: 3} + - {fileID: 2100000, guid: ab89c3bda64bca9468cbe42c9757a018, type: 2} + - {fileID: 2100000, guid: 51d30e19bbcacf84db4f11d7c9dcc716, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/96.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/96.prefab index 7983a68eb..b0a53c600 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/96.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/96.prefab @@ -68,8 +68,8 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 8290782892783832528, guid: 00c6a43e174ee524e8e59f6c0a30b675, type: 3} - - {fileID: -4835700170110144731, guid: 00c6a43e174ee524e8e59f6c0a30b675, type: 3} + - {fileID: 2100000, guid: ab89c3bda64bca9468cbe42c9757a018, type: 2} + - {fileID: 2100000, guid: 6e1c7358266f01d4cb8b649cd59cd20a, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/97.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/97.prefab index 69e13aca2..c78e2bc60 100644 --- a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/97.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/97.prefab @@ -99,8 +99,8 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 8290782892783832528, guid: 1b527522878c21b45bc7c821e1be4a66, type: 3} - - {fileID: 8580664864973885748, guid: 1b527522878c21b45bc7c821e1be4a66, type: 3} + - {fileID: 2100000, guid: ab89c3bda64bca9468cbe42c9757a018, type: 2} + - {fileID: 2100000, guid: e49a18e7ce845cd44ac5c9a8cd23e3a2, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 diff --git a/GQ_URP/GQ/Assets/prefab/老模型/42.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/98-old.prefab similarity index 54% rename from GQ_URP/GQ/Assets/prefab/老模型/42.prefab rename to GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/98-old.prefab index fcb8ba311..db77fb32f 100644 --- a/GQ_URP/GQ/Assets/prefab/老模型/42.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/98-old.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &130726311998312037 +--- !u!1 &265087763343560255 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,46 +8,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6857714464543564964} - - component: {fileID: 7771033436315564686} - - component: {fileID: 4084583422402242612} + - component: {fileID: 9056064711553815077} + - component: {fileID: 2260190745003443598} + - component: {fileID: 6780360474707235279} m_Layer: 8 - m_Name: Line040 + m_Name: Box103 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6857714464543564964 +--- !u!4 &9056064711553815077 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 130726311998312037} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.09143823, y: 0.20475535, z: 0.00712312} + m_GameObject: {fileID: 265087763343560255} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.08833681, y: -0.009732902, z: 0.38048553} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 22 + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7771033436315564686 +--- !u!33 &2260190745003443598 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 130726311998312037} - m_Mesh: {fileID: -2613281399026540048, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &4084583422402242612 + m_GameObject: {fileID: 265087763343560255} + m_Mesh: {fileID: -7768408576438331914, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &6780360474707235279 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 130726311998312037} + m_GameObject: {fileID: 265087763343560255} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -61,7 +61,15 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -83,7 +91,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &310089510880832002 +--- !u!1 &1477620243286743908 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -91,959 +99,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8977449380709952557} - - component: {fileID: 1080361098231629879} - - component: {fileID: 3044430799385940463} + - component: {fileID: 5335046607402331128} + - component: {fileID: 1354384310492941893} + - component: {fileID: 4323901043053287935} m_Layer: 8 - m_Name: Line037 + m_Name: Box118 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8977449380709952557 +--- !u!4 &5335046607402331128 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 310089510880832002} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.11506152, y: 0.20475535, z: 0.00712312} + m_GameObject: {fileID: 1477620243286743908} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.26615027, y: -0.009732902, z: 0.38048553} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 19 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1080361098231629879 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 310089510880832002} - m_Mesh: {fileID: 4640262985393078909, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &3044430799385940463 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 310089510880832002} - 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: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &356409982383214950 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1448045284991612991} - - component: {fileID: 6535079526010826958} - - component: {fileID: 780553747722619872} - m_Layer: 8 - m_Name: Line035 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1448045284991612991 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 356409982383214950} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.1623081, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6535079526010826958 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 356409982383214950} - m_Mesh: {fileID: 8489778906868738531, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &780553747722619872 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 356409982383214950} - 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: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &1423222477812479149 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4285153179963420742} - - component: {fileID: 3174742642359598399} - - component: {fileID: 2919055836036931862} - m_Layer: 8 - m_Name: Line032 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4285153179963420742 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1423222477812479149} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.038272113, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3174742642359598399 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1423222477812479149} - m_Mesh: {fileID: -1531590006222224965, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &2919055836036931862 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1423222477812479149} - 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: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &2329966829037116841 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6824847007686271036} - - component: {fileID: 8445733981561036341} - - component: {fileID: 890160754296765030} - m_Layer: 8 - m_Name: Line014 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6824847007686271036 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2329966829037116841} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.233178, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8445733981561036341 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2329966829037116841} - m_Mesh: {fileID: -8319797619673022553, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &890160754296765030 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2329966829037116841} - 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: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &2510571642913147675 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5737139981694843933} - - component: {fileID: 5005366328535077580} - - component: {fileID: 1280221153008835392} - m_Layer: 8 - m_Name: Line030 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5737139981694843933 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2510571642913147675} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1327653, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5005366328535077580 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2510571642913147675} - m_Mesh: {fileID: -4882779569204714280, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &1280221153008835392 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2510571642913147675} - 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: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &2837330840326574961 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3985133537603642162} - - component: {fileID: 2612473723225959899} - - component: {fileID: 7640344941005508184} - m_Layer: 8 - m_Name: Line005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3985133537603642162 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2837330840326574961} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.25088176, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2612473723225959899 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2837330840326574961} - m_Mesh: {fileID: 3442923855343079542, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &7640344941005508184 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2837330840326574961} - 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: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &2908597066697258531 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3432938169678230081} - - component: {fileID: 3728658670792886038} - - component: {fileID: 1764777122436621058} - m_Layer: 8 - m_Name: Line006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3432938169678230081 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2908597066697258531} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.22725846, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3728658670792886038 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2908597066697258531} - m_Mesh: {fileID: -7332506622660098701, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &1764777122436621058 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2908597066697258531} - 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: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &2941449100827440807 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5956768604172076295} - - component: {fileID: 5197512703129363447} - - component: {fileID: 5011246240032507869} - m_Layer: 8 - m_Name: Line012 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5956768604172076295 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2941449100827440807} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.18593143, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5197512703129363447 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2941449100827440807} - m_Mesh: {fileID: 1263235930235354705, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &5011246240032507869 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2941449100827440807} - 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: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &3474412236060609840 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8539180118313694405} - - component: {fileID: 6945052766545431911} - - component: {fileID: 3449662626458422832} - m_Layer: 8 - m_Name: Line038 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8539180118313694405 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3474412236060609840} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.04419162, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6945052766545431911 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3474412236060609840} - m_Mesh: {fileID: -1646682674390255264, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &3449662626458422832 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3474412236060609840} - 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: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &3559261839768334803 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1952377751151816394} - - component: {fileID: 3309880457663871883} - - component: {fileID: 4376842869267845518} - m_Layer: 8 - m_Name: Line034 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1952377751151816394 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3559261839768334803} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0855187, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3309880457663871883 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3559261839768334803} - m_Mesh: {fileID: 8428074654396029572, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &4376842869267845518 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3559261839768334803} - 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: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &3815976143458254937 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2175229988092792778} - - component: {fileID: 4155534858203150260} - - component: {fileID: 6904137395377539832} - m_Layer: 8 - m_Name: Line036 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2175229988092792778 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3815976143458254937} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.13868481, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4155534858203150260 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3815976143458254937} - m_Mesh: {fileID: 7012356192693472350, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &6904137395377539832 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3815976143458254937} - 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: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &4366031888579628208 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 407606395056910726} - - component: {fileID: 2818726661741488428} - - component: {fileID: 1705622738364581346} - m_Layer: 8 - m_Name: Line033 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &407606395056910726 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4366031888579628208} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.061895415, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} + m_Father: {fileID: 1241340143182495024} m_RootOrder: 15 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2818726661741488428 +--- !u!33 &1354384310492941893 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4366031888579628208} - m_Mesh: {fileID: 4846085880637510611, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &1705622738364581346 + m_GameObject: {fileID: 1477620243286743908} + m_Mesh: {fileID: -4996861437628621093, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &4323901043053287935 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4366031888579628208} + m_GameObject: {fileID: 1477620243286743908} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1057,7 +152,15 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -1079,7 +182,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &4478180074304330929 +--- !u!1 &1613377257043457594 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1087,66 +190,1835 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3850122077773497867} - - component: {fileID: 5064031261154650900} - - component: {fileID: 5621070989953272035} - - component: {fileID: 2055967747612756355} - - component: {fileID: 3700158696702877089} - - component: {fileID: -8764387576482747107} + - component: {fileID: 5295953100107417366} + - component: {fileID: 7073908006269372914} + - component: {fileID: 4858765728695492928} m_Layer: 8 - m_Name: 42 + m_Name: Box121 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3850122077773497867 +--- !u!4 &5295953100107417366 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4478180074304330929} - m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} + m_GameObject: {fileID: 1613377257043457594} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2070691, y: -0.009732902, z: 0.38048553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7073908006269372914 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1613377257043457594} + m_Mesh: {fileID: 5143503790756086174, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &4858765728695492928 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1613377257043457594} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, 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!1 &1666480422867460984 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 659040548616400573} + - component: {fileID: 5712330184612841396} + - component: {fileID: 8344365610667968892} + m_Layer: 8 + m_Name: Box098 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &659040548616400573 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1666480422867460984} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.17695862, y: -0.009732902, z: 0.38048553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5712330184612841396 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1666480422867460984} + m_Mesh: {fileID: -1302254107375959788, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &8344365610667968892 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1666480422867460984} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, type: 2} + - {fileID: 2100000, guid: ee208a723d0303e4d8921b9a9f80dc58, 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!1 &1736099207633517677 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7880009237424982450} + - component: {fileID: 4833325259972373552} + - component: {fileID: 8810806618998142732} + m_Layer: 8 + m_Name: Box125 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7880009237424982450 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1736099207633517677} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.29569086, y: -0.009732902, z: 0.38048553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4833325259972373552 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1736099207633517677} + m_Mesh: {fileID: -5448518418904112508, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &8810806618998142732 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1736099207633517677} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, 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!1 &1872903414915381401 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8436199325353774180} + m_Layer: 8 + m_Name: "\u951A\u70B9" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8436199325353774180 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1872903414915381401} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: -0.417, z: -1.015} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 21 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!1 &2938630573954381784 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8612988922235589640} + - component: {fileID: 8586394374753461819} + - component: {fileID: 4251964712092690719} + m_Layer: 8 + m_Name: Box093 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8612988922235589640 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2938630573954381784} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.26558036, y: -0.009732902, z: 0.38048553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8586394374753461819 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2938630573954381784} + m_Mesh: {fileID: 5137751575643769850, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &4251964712092690719 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2938630573954381784} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, 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!1 &4113769573696270875 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5534386694951770616} + - component: {fileID: 1080362941868889429} + - component: {fileID: 2403451542454942099} + m_Layer: 8 + m_Name: Box109 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5534386694951770616 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4113769573696270875} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.059366144, y: -0.009732902, z: 0.38048553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1080362941868889429 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4113769573696270875} + m_Mesh: {fileID: 6975212812562875068, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &2403451542454942099 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4113769573696270875} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, 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!1 &4422452676718260575 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2202273543564754100} + - component: {fileID: 4157430489336120300} + - component: {fileID: 4846749366033697805} + m_Layer: 8 + m_Name: Box108 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2202273543564754100 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4422452676718260575} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.029825531, y: -0.009732902, z: 0.38048553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4157430489336120300 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4422452676718260575} + m_Mesh: {fileID: -5798510906853853667, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &4846749366033697805 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4422452676718260575} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, type: 2} + - {fileID: 2100000, guid: ee208a723d0303e4d8921b9a9f80dc58, 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!1 &4699173790862818039 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6016888315057090444} + - component: {fileID: 4880859605638490242} + - component: {fileID: 331279301414217850} + m_Layer: 8 + m_Name: Box111 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6016888315057090444 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4699173790862818039} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.08890675, y: -0.009732902, z: 0.38048553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4880859605638490242 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4699173790862818039} + m_Mesh: {fileID: -496025733953617223, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &331279301414217850 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4699173790862818039} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, 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!1 &5052240060058515462 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6603219985598643946} + - component: {fileID: 5558777505213527719} + - component: {fileID: 3619234585986643609} + m_Layer: 8 + m_Name: Box120 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6603219985598643946 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5052240060058515462} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.17752853, y: -0.009732902, z: 0.38048553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5558777505213527719 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5052240060058515462} + m_Mesh: {fileID: 6826621740450989438, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &3619234585986643609 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5052240060058515462} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, 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!1 &5390412251842960467 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7447678203193843998} + - component: {fileID: 5669892635494127481} + - component: {fileID: 7590335352413198202} + m_Layer: 8 + m_Name: Box078 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7447678203193843998 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5390412251842960467} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.23603979, y: -0.009732902, z: 0.38048553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5669892635494127481 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5390412251842960467} + m_Mesh: {fileID: 1720402882065375157, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &7590335352413198202 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5390412251842960467} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, type: 2} + - {fileID: 2100000, guid: ee208a723d0303e4d8921b9a9f80dc58, 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!1 &5864803920861947092 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1462731335069528879} + - component: {fileID: 7883893504235882444} + - component: {fileID: 1526487580566718776} + m_Layer: 8 + m_Name: Box113 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1462731335069528879 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5864803920861947092} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.14798793, y: -0.009732902, z: 0.38048553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7883893504235882444 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5864803920861947092} + m_Mesh: {fileID: -7246287230559787882, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &1526487580566718776 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5864803920861947092} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, 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!1 &6002760857658596069 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4864233002657885054} + - component: {fileID: 7797498946359579753} + - component: {fileID: 7549936488224001187} + m_Layer: 8 + m_Name: Box107 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4864233002657885054 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6002760857658596069} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.00028494745, y: -0.009732902, z: 0.38048553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7797498946359579753 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6002760857658596069} + m_Mesh: {fileID: -1330125017685312196, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &7549936488224001187 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6002760857658596069} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, type: 2} + - {fileID: 2100000, guid: ee208a723d0303e4d8921b9a9f80dc58, 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!1 &6328287949359803752 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6453651884796209529} + - component: {fileID: 8793732613895937843} + - component: {fileID: 3427044828894067359} + m_Layer: 8 + m_Name: Box104 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6453651884796209529 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6328287949359803752} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.029255603, y: -0.009732902, z: 0.38048553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8793732613895937843 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6328287949359803752} + m_Mesh: {fileID: -35850239040426563, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &3427044828894067359 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6328287949359803752} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, 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!1 &6552622319365241491 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3221819232629837281} + - component: {fileID: 1487440917324783431} + - component: {fileID: 7715644099894589001} + m_Layer: 8 + m_Name: Box080 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3221819232629837281 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6552622319365241491} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.29607016, y: -0.009732902, z: 0.38048553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1487440917324783431 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6552622319365241491} + m_Mesh: {fileID: 928670381974441746, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &7715644099894589001 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6552622319365241491} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, 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!1 &7240737351577558572 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6842009848356166419} + - component: {fileID: 2027949269390896545} + - component: {fileID: 6990925454900306901} + m_Layer: 8 + m_Name: Box096 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6842009848356166419 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7240737351577558572} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.2064992, y: -0.009732902, z: 0.38048553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2027949269390896545 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7240737351577558572} + m_Mesh: {fileID: 5947953963563170544, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &6990925454900306901 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7240737351577558572} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, type: 2} + - {fileID: 2100000, guid: ee208a723d0303e4d8921b9a9f80dc58, 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!1 &7292005190061408290 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6254340721343375861} + - component: {fileID: 5647748723312503215} + - component: {fileID: 1439932918402441255} + m_Layer: 8 + m_Name: Box123 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6254340721343375861 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7292005190061408290} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.14741808, y: -0.009732902, z: 0.38048553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5647748723312503215 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7292005190061408290} + m_Mesh: {fileID: 9165463457119062170, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &1439932918402441255 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7292005190061408290} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, type: 2} + - {fileID: 2100000, guid: ee208a723d0303e4d8921b9a9f80dc58, 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!1 &7815699416007098485 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7073567137955866371} + - component: {fileID: 9097915533802078805} + - component: {fileID: 3663365624516449841} + m_Layer: 8 + m_Name: Box102 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7073567137955866371 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7815699416007098485} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.058796216, y: -0.009732902, z: 0.38048553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &9097915533802078805 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7815699416007098485} + m_Mesh: {fileID: 5047528748317851287, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &3663365624516449841 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7815699416007098485} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, 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!1 &8451506987256001924 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3022405284891664584} + - component: {fileID: 718069313941727958} + - component: {fileID: 3294933613711134203} + m_Layer: 8 + m_Name: Box100 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3022405284891664584 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8451506987256001924} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.117877394, y: -0.009732902, z: 0.38048553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &718069313941727958 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8451506987256001924} + m_Mesh: {fileID: 382426083413964521, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &3294933613711134203 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8451506987256001924} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, 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!1 &8767702184017050777 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6085521301671319584} + - component: {fileID: 4895114920960178358} + - component: {fileID: 127869283642878117} + m_Layer: 8 + m_Name: Box112 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6085521301671319584 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8767702184017050777} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.11844733, y: -0.009732902, z: 0.38048553} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4895114920960178358 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8767702184017050777} + m_Mesh: {fileID: -6612900964092521861, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &127869283642878117 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8767702184017050777} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, 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!1 &8930835141790750288 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1241340143182495024} + - component: {fileID: 3435358619152698743} + - component: {fileID: 5070985248788751229} + - component: {fileID: 5632582898034042528} + - component: {fileID: 4768507375088791481} + - component: {fileID: 8209629426214730124} + - component: {fileID: 6645298688042858859} + - component: {fileID: 5617804268500791324} + - component: {fileID: 6608021576171790368} + m_Layer: 8 + m_Name: 98-old + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1241340143182495024 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8930835141790750288} + m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: 0.00014513358, y: 0, z: -0.16010308} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 4377004035806771744} - - {fileID: 4468305314586916342} - - {fileID: 3985133537603642162} - - {fileID: 3432938169678230081} - - {fileID: 4773854338895504713} - - {fileID: 952208118470789861} - - {fileID: 5956768604172076295} - - {fileID: 4033927506485474809} - - {fileID: 6824847007686271036} - - {fileID: 5252102552932029987} - - {fileID: 47237875990932684} - - {fileID: 6847948202480934776} - - {fileID: 5737139981694843933} - - {fileID: 6261916590954469630} - - {fileID: 4285153179963420742} - - {fileID: 407606395056910726} - - {fileID: 1952377751151816394} - - {fileID: 1448045284991612991} - - {fileID: 2175229988092792778} - - {fileID: 8977449380709952557} - - {fileID: 8539180118313694405} - - {fileID: 1130127781379946019} - - {fileID: 6857714464543564964} - - {fileID: 1690760295110026981} - - {fileID: 1153353318131356967} + - {fileID: 7447678203193843998} + - {fileID: 3221819232629837281} + - {fileID: 8612988922235589640} + - {fileID: 6842009848356166419} + - {fileID: 659040548616400573} + - {fileID: 3022405284891664584} + - {fileID: 7073567137955866371} + - {fileID: 9056064711553815077} + - {fileID: 6453651884796209529} + - {fileID: 4864233002657885054} + - {fileID: 2202273543564754100} + - {fileID: 5534386694951770616} + - {fileID: 6016888315057090444} + - {fileID: 6085521301671319584} + - {fileID: 1462731335069528879} + - {fileID: 5335046607402331128} + - {fileID: 1173209069924925161} + - {fileID: 6603219985598643946} + - {fileID: 5295953100107417366} + - {fileID: 6254340721343375861} + - {fileID: 7880009237424982450} + - {fileID: 8436199325353774180} m_Father: {fileID: 0} m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &5064031261154650900 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 90} +--- !u!33 &3435358619152698743 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8930835141790750288} + m_Mesh: {fileID: -5195867125062228816, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &5070985248788751229 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8930835141790750288} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, 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!114 &5632582898034042528 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4478180074304330929} + m_GameObject: {fileID: 8930835141790750288} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -1170,8 +2042,8 @@ MonoBehaviour: rackType: openFlag: backDoorFlag: - modelNum: 42 - occupyNum: 6 + modelNum: 98 + occupyNum: 10 residueNum: operationTime: directorName: @@ -1198,13 +2070,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &5621070989953272035 +--- !u!114 &4768507375088791481 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4478180074304330929} + m_GameObject: {fileID: 8930835141790750288} m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} @@ -1212,34 +2084,34 @@ MonoBehaviour: m_EditorClassIdentifier: listTargets: [] frames: [] - PerTier: 42 - PerRow: 5 - volume: 6 + PerTier: 10 + PerRow: 10 + volume: 12 isExit: 0 isClicked: 0 isTarget: 0 isplace: 0 canPut: 0 ---- !u!114 &2055967747612756355 +--- !u!114 &8209629426214730124 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4478180074304330929} + m_GameObject: {fileID: 8930835141790750288} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &3700158696702877089 +--- !u!114 &6645298688042858859 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4478180074304330929} + m_GameObject: {fileID: 8930835141790750288} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} @@ -1256,104 +2128,35 @@ MonoBehaviour: original_shebei: [] search_u_wei: 0 is_jigui: 0 ---- !u!114 &-8764387576482747107 +--- !u!114 &5617804268500791324 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4478180074304330929} + m_GameObject: {fileID: 8930835141790750288} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} m_Name: m_EditorClassIdentifier: - volume: 6 - selfIcon: {fileID: 21300000, guid: 519f4d2226d71e0459dd9db9a5e63b03, type: 3} ---- !u!1 &4891590818518232349 -GameObject: + volume: 12 + selfIcon: {fileID: 0} +--- !u!64 &6608021576171790368 +MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1690760295110026981} - - component: {fileID: 2677521807249218321} - - component: {fileID: 5222335612250254875} - m_Layer: 8 - m_Name: Object001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1690760295110026981 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4891590818518232349} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00017918646, y: 0.23857623, z: 0.0000021196902} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 23 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2677521807249218321 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4891590818518232349} - m_Mesh: {fileID: -3292925553009838691, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &5222335612250254875 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4891590818518232349} + m_GameObject: {fileID: 8930835141790750288} + m_Material: {fileID: 0} + m_IsTrigger: 0 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: 5629084884208175553, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &5005202539170130163 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: -5195867125062228816, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!1 &9141481968972941516 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1361,243 +2164,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5252102552932029987} - - component: {fileID: 5399225644544745790} - - component: {fileID: 8062792572539575826} + - component: {fileID: 1173209069924925161} + - component: {fileID: 3058546463981779570} + - component: {fileID: 4377519370721572799} m_Layer: 8 - m_Name: Line015 + m_Name: Box119 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5252102552932029987 +--- !u!4 &1173209069924925161 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5005202539170130163} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2568013, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5399225644544745790 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5005202539170130163} - m_Mesh: {fileID: 1228931217693930783, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &8062792572539575826 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5005202539170130163} - 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: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &5296231482082827255 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4033927506485474809} - - component: {fileID: 1207532190264251752} - - component: {fileID: 1948500130028502110} - m_Layer: 8 - m_Name: Line013 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4033927506485474809 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5296231482082827255} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.20955472, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1207532190264251752 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5296231482082827255} - m_Mesh: {fileID: 605361963917450513, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &1948500130028502110 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5296231482082827255} - 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: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &5601277522535811841 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1153353318131356967} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1153353318131356967 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5601277522535811841} + m_GameObject: {fileID: 9141481968972941516} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: -0.27, z: 0.25} + m_LocalPosition: {x: -0.23660967, y: -0.009732902, z: 0.38048553} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 24 + m_Father: {fileID: 1241340143182495024} + m_RootOrder: 16 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &5848450462177767741 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1130127781379946019} - - component: {fileID: 3986700880651842163} - - component: {fileID: 2105098214338042602} - m_Layer: 8 - m_Name: Line039 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1130127781379946019 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5848450462177767741} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.067814924, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 21 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3986700880651842163 +--- !u!33 &3058546463981779570 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5848450462177767741} - m_Mesh: {fileID: -2995104530094120609, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &2105098214338042602 + m_GameObject: {fileID: 9141481968972941516} + m_Mesh: {fileID: -1569480693482316322, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &4377519370721572799 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5848450462177767741} + m_GameObject: {fileID: 9141481968972941516} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1611,598 +2217,16 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &5962450079258316864 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6261916590954469630} - - component: {fileID: 916446189011798995} - - component: {fileID: 655051931039216658} - m_Layer: 8 - m_Name: Line031 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6261916590954469630 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5962450079258316864} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.10914199, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &916446189011798995 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5962450079258316864} - m_Mesh: {fileID: 648714052394000240, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &655051931039216658 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5962450079258316864} - 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: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &6053117407962056355 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 952208118470789861} - - component: {fileID: 5236138134276398023} - - component: {fileID: 5862643513708926587} - m_Layer: 8 - m_Name: Line008 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &952208118470789861 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6053117407962056355} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.18001185, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5236138134276398023 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6053117407962056355} - m_Mesh: {fileID: -2696279837256549028, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &5862643513708926587 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6053117407962056355} - 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: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &6561310085943181314 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4773854338895504713} - - component: {fileID: 5384457851106525382} - - component: {fileID: 7136862371761776229} - m_Layer: 8 - m_Name: Line007 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4773854338895504713 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6561310085943181314} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.20363516, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5384457851106525382 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6561310085943181314} - m_Mesh: {fileID: -7102589008999902672, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &7136862371761776229 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6561310085943181314} - 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: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &7295863244121370920 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6847948202480934776} - - component: {fileID: 4367350911086516140} - - component: {fileID: 3061593674313016703} - m_Layer: 8 - m_Name: Line029 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6847948202480934776 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7295863244121370920} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.15638858, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4367350911086516140 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7295863244121370920} - m_Mesh: {fileID: 6942693937602033683, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &3061593674313016703 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7295863244121370920} - 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: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &7459860224115752431 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 47237875990932684} - - component: {fileID: 2161348781284101926} - - component: {fileID: 7347504529795079401} - m_Layer: 8 - m_Name: Line016 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &47237875990932684 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7459860224115752431} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2804246, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2161348781284101926 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7459860224115752431} - m_Mesh: {fileID: 1667030652818782739, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &7347504529795079401 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7459860224115752431} - 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: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &8141820578500648236 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4468305314586916342} - - component: {fileID: 6581427078192199489} - - component: {fileID: 1484854775606903083} - m_Layer: 8 - m_Name: Line004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4468305314586916342 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8141820578500648236} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.27450505, y: 0.20475535, z: 0.00712312} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6581427078192199489 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8141820578500648236} - m_Mesh: {fileID: -1824870671384894608, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &1484854775606903083 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8141820578500648236} - 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: 7626191068330388430, guid: e7c661f56f5542342996a60399b23789, type: 3} - 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!1 &8955264557940764964 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4377004035806771744} - - component: {fileID: 7063342025340337428} - - component: {fileID: 2950957166355325656} - m_Layer: 8 - m_Name: 3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4377004035806771744 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8955264557940764964} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0, z: 0.0000020507723} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3850122077773497867} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7063342025340337428 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8955264557940764964} - m_Mesh: {fileID: 4672180234606932631, guid: e7c661f56f5542342996a60399b23789, type: 3} ---- !u!23 &2950957166355325656 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8955264557940764964} - 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: -8704198629606385052, guid: e7c661f56f5542342996a60399b23789, type: 3} - - {fileID: -5306409120226733574, guid: e7c661f56f5542342996a60399b23789, type: 3} - - {fileID: 1368039103165038143, guid: e7c661f56f5542342996a60399b23789, type: 3} - - {fileID: -8757356216087587297, guid: e7c661f56f5542342996a60399b23789, type: 3} - - {fileID: -5956578104803850452, guid: e7c661f56f5542342996a60399b23789, type: 3} - - {fileID: -6307277589567570940, guid: e7c661f56f5542342996a60399b23789, type: 3} - - {fileID: -5375582354760955787, guid: e7c661f56f5542342996a60399b23789, type: 3} - - {fileID: 7182259056892446755, guid: e7c661f56f5542342996a60399b23789, type: 3} - - {fileID: -4971594290552944009, guid: e7c661f56f5542342996a60399b23789, type: 3} - - {fileID: -2510483096459867325, guid: e7c661f56f5542342996a60399b23789, type: 3} - - {fileID: 507964552181651666, guid: e7c661f56f5542342996a60399b23789, type: 3} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/98-old.prefab.meta b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/98-old.prefab.meta new file mode 100644 index 000000000..f6a28fab9 --- /dev/null +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/98-old.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 71b8833e3c6da9742b593d4c98a8634f +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/82.prefab b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/98.prefab similarity index 51% rename from GQ_URP/GQ/Assets/prefab/老模型/82.prefab rename to GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/98.prefab index 20c6790c6..79e8511ce 100644 --- a/GQ_URP/GQ/Assets/prefab/老模型/82.prefab +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/98.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &731784346997518727 +--- !u!1 &143424478865491780 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,46 +8,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3910294884002480211} - - component: {fileID: 58594139926781284} - - component: {fileID: 675719610628957011} - m_Layer: 8 - m_Name: Object003 + - component: {fileID: 1126156795319452501} + - component: {fileID: 3181387044864570655} + - component: {fileID: 8764106633723220147} + m_Layer: 13 + m_Name: Box104 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3910294884002480211 +--- !u!4 &1126156795319452501 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 731784346997518727} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2735296, y: 0.225, z: -0.25532228} + m_GameObject: {fileID: 143424478865491780} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.029255599, y: -0.009732842, z: 0.27053803} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2661113197813719292} - m_RootOrder: 2 + m_Father: {fileID: 5122057159461656348} + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &58594139926781284 +--- !u!33 &3181387044864570655 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 731784346997518727} - m_Mesh: {fileID: -3531946766418785785, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &675719610628957011 + m_GameObject: {fileID: 143424478865491780} + m_Mesh: {fileID: -35850239040426563, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &8764106633723220147 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 731784346997518727} + m_GameObject: {fileID: 143424478865491780} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -61,12 +61,15 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6238916332166239650, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -88,7 +91,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &850465478079746634 +--- !u!1 &387596145141641417 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -96,134 +99,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 9133795146528046120} - - component: {fileID: 7182492084023621984} - - component: {fileID: 8496615598350368753} - m_Layer: 8 - m_Name: Object015 + - component: {fileID: 1562231978764386642} + - component: {fileID: 4186470148516396613} + - component: {fileID: 4533383945038620303} + m_Layer: 13 + m_Name: Box107 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &9133795146528046120 +--- !u!4 &1562231978764386642 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 850465478079746634} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.11262983, y: 0.225, z: -0.25532228} + m_GameObject: {fileID: 387596145141641417} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0002849549, y: -0.009732842, z: 0.27053803} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2661113197813719292} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7182492084023621984 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 850465478079746634} - m_Mesh: {fileID: 4154864533425439726, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &8496615598350368753 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 850465478079746634} - 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - 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!1 &933811221760359082 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4123633423439031712} - - component: {fileID: 5345623217139516380} - - component: {fileID: 7071638572857854601} - m_Layer: 8 - m_Name: Object010 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4123633423439031712 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 933811221760359082} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.048269928, y: 0.225, z: -0.25532228} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2661113197813719292} + m_Father: {fileID: 5122057159461656348} m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5345623217139516380 +--- !u!33 &4186470148516396613 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 933811221760359082} - m_Mesh: {fileID: 7643229109163234770, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &7071638572857854601 + m_GameObject: {fileID: 387596145141641417} + m_Mesh: {fileID: -1330125017685312196, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &4533383945038620303 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 933811221760359082} + m_GameObject: {fileID: 387596145141641417} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -237,12 +152,19 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, type: 2} + - {fileID: 2100000, guid: ee208a723d0303e4d8921b9a9f80dc58, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -264,7 +186,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &2894531187410171983 +--- !u!1 &526054217512455928 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -272,46 +194,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1758295766456962229} - - component: {fileID: 4051072016224832438} - - component: {fileID: 8819914760771811352} - m_Layer: 8 - m_Name: Object016 + - component: {fileID: 4783871703992277251} + - component: {fileID: 4271141767377268192} + - component: {fileID: 4827928946662171412} + m_Layer: 13 + m_Name: Box113 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1758295766456962229 +--- !u!4 &4783871703992277251 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2894531187410171983} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.14480978, y: 0.225, z: -0.25532228} + m_GameObject: {fileID: 526054217512455928} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.14798795, y: -0.009732842, z: 0.27053803} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2661113197813719292} - m_RootOrder: 15 + m_Father: {fileID: 5122057159461656348} + m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4051072016224832438 +--- !u!33 &4271141767377268192 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2894531187410171983} - m_Mesh: {fileID: -5798157943916587367, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &8819914760771811352 + m_GameObject: {fileID: 526054217512455928} + m_Mesh: {fileID: -7246287230559787882, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &4827928946662171412 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2894531187410171983} + m_GameObject: {fileID: 526054217512455928} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -325,12 +247,15 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -352,7 +277,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &2997160706192388653 +--- !u!1 &918880395790504127 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -360,46 +285,328 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6769524843869735451} - - component: {fileID: 8356575537377205268} - - component: {fileID: 6820980568867895103} - m_Layer: 8 - m_Name: 82 + - component: {fileID: 8834127416085063629} + - component: {fileID: 4795032004429100395} + - component: {fileID: 4412519366431104101} + m_Layer: 13 + m_Name: Box080 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &6769524843869735451 +--- !u!4 &8834127416085063629 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2997160706192388653} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0, z: -0.000000018626451} + m_GameObject: {fileID: 918880395790504127} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.29607016, y: -0.009732813, z: 0.27053803} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2661113197813719292} + m_Father: {fileID: 5122057159461656348} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4795032004429100395 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 918880395790504127} + m_Mesh: {fileID: 928670381974441746, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &4412519366431104101 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 918880395790504127} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, 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!1 &1167059028622135850 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 976236611756594374} + - component: {fileID: 1948841624042298507} + - component: {fileID: 7211680548579499189} + m_Layer: 13 + m_Name: Box120 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &976236611756594374 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1167059028622135850} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.17752855, y: -0.009732842, z: 0.27053803} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5122057159461656348} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1948841624042298507 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1167059028622135850} + m_Mesh: {fileID: 6826621740450989438, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &7211680548579499189 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1167059028622135850} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, 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!1 &1664575098584191195 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 409646812174697888} + - component: {fileID: 1554683475704201902} + - component: {fileID: 5960482587018101334} + m_Layer: 13 + m_Name: Box111 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &409646812174697888 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1664575098584191195} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.08890676, y: -0.009732842, z: 0.27053803} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5122057159461656348} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1554683475704201902 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1664575098584191195} + m_Mesh: {fileID: -496025733953617223, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &5960482587018101334 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1664575098584191195} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, 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!1 &2081090685978883711 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3563583482836781874} + - component: {fileID: 1765572536212225365} + - component: {fileID: 4573786232278744406} + m_Layer: 13 + m_Name: Box078 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3563583482836781874 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2081090685978883711} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.23603982, y: -0.009732813, z: 0.27053803} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5122057159461656348} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8356575537377205268 +--- !u!33 &1765572536212225365 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2997160706192388653} - m_Mesh: {fileID: -5351489220859370206, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &6820980568867895103 + m_GameObject: {fileID: 2081090685978883711} + m_Mesh: {fileID: 1720402882065375157, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &4573786232278744406 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2997160706192388653} + m_GameObject: {fileID: 2081090685978883711} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -413,15 +620,19 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 1164559979738526386, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5309146791756261813, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -1152147162816932204, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 3274929075364713951, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1196480866727828669, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 8057491134282628743, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 7626191068330388430, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6909907705182173751, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -3250139810725036250, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, type: 2} + - {fileID: 2100000, guid: ee208a723d0303e4d8921b9a9f80dc58, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -443,7 +654,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &3433428425312451142 +--- !u!1 &2550967317396086696 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -451,62 +662,306 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2661113197813719292} - - component: {fileID: 865928750927452227} - - component: {fileID: 4549055120425035674} - - component: {fileID: 6926716148914156310} - - component: {fileID: 672006037904693430} - - component: {fileID: -6745254183315664991} - m_Layer: 8 - m_Name: 82 + - component: {fileID: 9213993228944886500} + - component: {fileID: 6906282867550879994} + - component: {fileID: 8905559557260535767} + m_Layer: 13 + m_Name: Box100 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2661113197813719292 +--- !u!4 &9213993228944886500 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3433428425312451142} - m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} + m_GameObject: {fileID: 2550967317396086696} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.117877424, y: -0.009732842, z: 0.27053803} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5122057159461656348} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6906282867550879994 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2550967317396086696} + m_Mesh: {fileID: 382426083413964521, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &8905559557260535767 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2550967317396086696} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, 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!1 &2950423983115412192 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5073024601127277765} + - component: {fileID: 8961372005661102174} + - component: {fileID: 7705378850878152083} + m_Layer: 13 + m_Name: Box119 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5073024601127277765 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2950423983115412192} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2366097, y: -0.009732872, z: 0.27053803} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5122057159461656348} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8961372005661102174 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2950423983115412192} + m_Mesh: {fileID: -1569480693482316322, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &7705378850878152083 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2950423983115412192} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, 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!1 &3305537327897853052 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5122057159461656348} + - component: {fileID: 8756066296649099099} + - component: {fileID: 1184677215785896273} + - component: {fileID: 4885588076569797259} + - component: {fileID: 7471404657137590619} + - component: {fileID: 8847178289226403822} + - component: {fileID: 18786787257106257} + - component: {fileID: 398088415559153711} + - component: {fileID: 1422345701372501616} + m_Layer: 8 + m_Name: 98 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5122057159461656348 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3305537327897853052} + m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -0.1601031, y: 0, z: -0.00014512241} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 6769524843869735451} - - {fileID: 1065395368016386822} - - {fileID: 3910294884002480211} - - {fileID: 6202539424102783026} - - {fileID: 4875268200704460214} - - {fileID: 2054589521424795697} - - {fileID: 8815916784406501518} - - {fileID: 7875524545119826525} - - {fileID: 2421536116045036708} - - {fileID: 4123633423439031712} - - {fileID: 2087857532702284777} - - {fileID: 658648680580937482} - - {fileID: 8130911230070243431} - - {fileID: 8578153045170873953} - - {fileID: 9133795146528046120} - - {fileID: 1758295766456962229} - - {fileID: 4670138555883023562} - - {fileID: 5375885831125260898} - - {fileID: 5016957094142166556} - - {fileID: 8774746788531998393} - - {fileID: 6006225813809599080} + - {fileID: 3563583482836781874} + - {fileID: 8834127416085063629} + - {fileID: 2425303140717592100} + - {fileID: 638561328555372863} + - {fileID: 6848412021147141265} + - {fileID: 9213993228944886500} + - {fileID: 3748481723556039983} + - {fileID: 3135219258707671049} + - {fileID: 1126156795319452501} + - {fileID: 1562231978764386642} + - {fileID: 5241943192022849176} + - {fileID: 1936834750716703700} + - {fileID: 409646812174697888} + - {fileID: 169745836523614732} + - {fileID: 4783871703992277251} + - {fileID: 2028580322844082644} + - {fileID: 5073024601127277765} + - {fileID: 976236611756594374} + - {fileID: 2256324135660449082} + - {fileID: 64442574152713177} + - {fileID: 4284182424757543838} m_Father: {fileID: 0} m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &865928750927452227 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8756066296649099099 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3305537327897853052} + m_Mesh: {fileID: -5195867125062228816, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &1184677215785896273 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3305537327897853052} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, 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!114 &4885588076569797259 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3433428425312451142} + m_GameObject: {fileID: 3305537327897853052} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} @@ -530,8 +985,8 @@ MonoBehaviour: rackType: openFlag: backDoorFlag: - modelNum: 82 - occupyNum: 20 + modelNum: 98 + occupyNum: 10 residueNum: operationTime: directorName: @@ -558,13 +1013,13 @@ MonoBehaviour: remark: createTime: createName: ---- !u!114 &4549055120425035674 +--- !u!114 &7471404657137590619 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3433428425312451142} + m_GameObject: {fileID: 3305537327897853052} m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} @@ -572,34 +1027,34 @@ MonoBehaviour: m_EditorClassIdentifier: listTargets: [] frames: [] - PerTier: 42 - PerRow: 5 - volume: 20 + PerTier: 10 + PerRow: 10 + volume: 12 isExit: 0 isClicked: 0 isTarget: 0 isplace: 0 canPut: 0 ---- !u!114 &6926716148914156310 +--- !u!114 &8847178289226403822 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3433428425312451142} + m_GameObject: {fileID: 3305537327897853052} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} m_Name: m_EditorClassIdentifier: tmsAlarmLists: [] ---- !u!114 &672006037904693430 +--- !u!114 &18786787257106257 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3433428425312451142} + m_GameObject: {fileID: 3305537327897853052} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} @@ -616,109 +1071,35 @@ MonoBehaviour: original_shebei: [] search_u_wei: 0 is_jigui: 0 ---- !u!114 &-6745254183315664991 +--- !u!114 &398088415559153711 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3433428425312451142} + m_GameObject: {fileID: 3305537327897853052} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} m_Name: m_EditorClassIdentifier: - volume: 20 - selfIcon: {fileID: 21300000, guid: ddc9d5693d4b79343ae38571ada8e109, type: 3} ---- !u!1 &4124210069784606549 -GameObject: + volume: 12 + selfIcon: {fileID: 0} +--- !u!64 &1422345701372501616 +MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 658648680580937482} - - component: {fileID: 3259406424238029826} - - component: {fileID: 5353588132173229657} - m_Layer: 8 - m_Name: Object012 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &658648680580937482 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4124210069784606549} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.016089976, y: 0.225, z: -0.25532228} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2661113197813719292} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3259406424238029826 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4124210069784606549} - m_Mesh: {fileID: -1141464603633071787, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &5353588132173229657 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4124210069784606549} + m_GameObject: {fileID: 3305537327897853052} + m_Material: {fileID: 0} + m_IsTrigger: 0 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - 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!1 &4870871637161909548 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: -5195867125062228816, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!1 &3423352813909366453 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -726,398 +1107,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2087857532702284777} - - component: {fileID: 8647458978639397409} - - component: {fileID: 6129760277345492149} - m_Layer: 8 - m_Name: Object011 + - component: {fileID: 169745836523614732} + - component: {fileID: 1567783202094699162} + - component: {fileID: 6334695498931356297} + m_Layer: 13 + m_Name: Box112 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2087857532702284777 +--- !u!4 &169745836523614732 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4870871637161909548} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.016089976, y: 0.225, z: -0.25532228} + m_GameObject: {fileID: 3423352813909366453} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.11844735, y: -0.009732842, z: 0.27053803} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2661113197813719292} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8647458978639397409 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4870871637161909548} - m_Mesh: {fileID: -3243264717552843444, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &6129760277345492149 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4870871637161909548} - 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - 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!1 &4887234022896161420 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4875268200704460214} - - component: {fileID: 7538407070158740493} - - component: {fileID: 6131217719389979351} - m_Layer: 8 - m_Name: Object005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4875268200704460214 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4887234022896161420} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.20916969, y: 0.225, z: -0.25532228} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2661113197813719292} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7538407070158740493 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4887234022896161420} - m_Mesh: {fileID: 9186633843763367028, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &6131217719389979351 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4887234022896161420} - 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - 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!1 &5263285158984787271 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2054589521424795697} - - component: {fileID: 1329883844471470099} - - component: {fileID: 6621071506831477798} - m_Layer: 8 - m_Name: Object006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2054589521424795697 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5263285158984787271} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.17698973, y: 0.225, z: -0.25532228} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2661113197813719292} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1329883844471470099 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5263285158984787271} - m_Mesh: {fileID: -2639241166356525208, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &6621071506831477798 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5263285158984787271} - 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - 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!1 &5613309626395654657 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5375885831125260898} - - component: {fileID: 4413349870014030633} - - component: {fileID: 6892829988045916333} - m_Layer: 8 - m_Name: Object018 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5375885831125260898 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5613309626395654657} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.20916969, y: 0.225, z: -0.25532228} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2661113197813719292} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4413349870014030633 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5613309626395654657} - m_Mesh: {fileID: -6558347715830034149, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &6892829988045916333 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5613309626395654657} - 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - 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!1 &6004286261144627747 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8578153045170873953} - - component: {fileID: 5906436077472369311} - - component: {fileID: 1715204248446373814} - m_Layer: 8 - m_Name: Object014 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8578153045170873953 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6004286261144627747} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.08044988, y: 0.225, z: -0.25532228} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2661113197813719292} + m_Father: {fileID: 5122057159461656348} m_RootOrder: 13 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5906436077472369311 +--- !u!33 &1567783202094699162 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6004286261144627747} - m_Mesh: {fileID: 3941715523697911101, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &1715204248446373814 + m_GameObject: {fileID: 3423352813909366453} + m_Mesh: {fileID: -6612900964092521861, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &6334695498931356297 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6004286261144627747} + m_GameObject: {fileID: 3423352813909366453} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1131,12 +1160,15 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -1158,7 +1190,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &6282804699365627888 +--- !u!1 &3626338692396266496 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1166,517 +1198,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4670138555883023562} - - component: {fileID: 2342708104839362589} - - component: {fileID: 815726863454639652} - m_Layer: 8 - m_Name: Object017 + - component: {fileID: 638561328555372863} + - component: {fileID: 5335545703763068813} + - component: {fileID: 3975502236824881657} + m_Layer: 13 + m_Name: Box096 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4670138555883023562 +--- !u!4 &638561328555372863 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6282804699365627888} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.17698973, y: 0.225, z: -0.25532228} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2661113197813719292} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2342708104839362589 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6282804699365627888} - m_Mesh: {fileID: 5828714007021999026, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &815726863454639652 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6282804699365627888} - 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - 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!1 &6748710658836944331 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5016957094142166556} - - component: {fileID: 1649993161728857618} - - component: {fileID: 7805914247186499701} - m_Layer: 8 - m_Name: Object019 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5016957094142166556 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6748710658836944331} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.24134964, y: 0.225, z: -0.25532228} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2661113197813719292} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1649993161728857618 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6748710658836944331} - m_Mesh: {fileID: -112464831985561941, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &7805914247186499701 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6748710658836944331} - 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - 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!1 &6841431879161651408 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8130911230070243431} - - component: {fileID: 7163873075951095070} - - component: {fileID: 5812019823463104178} - m_Layer: 8 - m_Name: Object013 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8130911230070243431 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6841431879161651408} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.048269928, y: 0.225, z: -0.25532228} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2661113197813719292} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7163873075951095070 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6841431879161651408} - m_Mesh: {fileID: 2871469715313346890, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &5812019823463104178 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6841431879161651408} - 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - 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!1 &7067324016812815537 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8815916784406501518} - - component: {fileID: 8328224672668896321} - - component: {fileID: 867993923937595367} - m_Layer: 8 - m_Name: Object007 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8815916784406501518 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7067324016812815537} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.14480978, y: 0.225, z: -0.25532228} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2661113197813719292} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8328224672668896321 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7067324016812815537} - m_Mesh: {fileID: 7733717212360752527, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &867993923937595367 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7067324016812815537} - 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - 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!1 &7520261717897449484 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6006225813809599080} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6006225813809599080 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7520261717897449484} + m_GameObject: {fileID: 3626338692396266496} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -0.45, z: 0.3} + m_LocalPosition: {x: 0.20649922, y: -0.009732813, z: 0.27053803} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2661113197813719292} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &8104318662165589992 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7875524545119826525} - - component: {fileID: 1721837852534368146} - - component: {fileID: 5432932431106407098} - m_Layer: 8 - m_Name: Object008 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7875524545119826525 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8104318662165589992} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.11262983, y: 0.225, z: -0.25532228} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2661113197813719292} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1721837852534368146 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8104318662165589992} - m_Mesh: {fileID: -7647463442239531939, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &5432932431106407098 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8104318662165589992} - 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - 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!1 &8509700805515111180 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6202539424102783026} - - component: {fileID: 5564904646353318627} - - component: {fileID: 7232961946352441729} - m_Layer: 8 - m_Name: Object004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6202539424102783026 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8509700805515111180} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.24134964, y: 0.225, z: -0.25532228} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2661113197813719292} + m_Father: {fileID: 5122057159461656348} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5564904646353318627 +--- !u!33 &5335545703763068813 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8509700805515111180} - m_Mesh: {fileID: -8113768720884857512, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &7232961946352441729 + m_GameObject: {fileID: 3626338692396266496} + m_Mesh: {fileID: 5947953963563170544, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &3975502236824881657 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8509700805515111180} + m_GameObject: {fileID: 3626338692396266496} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1690,12 +1251,19 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, type: 2} + - {fileID: 2100000, guid: ee208a723d0303e4d8921b9a9f80dc58, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -1717,7 +1285,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &8902207223557438395 +--- !u!1 &3683235877909965326 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1725,134 +1293,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2421536116045036708} - - component: {fileID: 2632620773154218270} - - component: {fileID: 5840558345486756635} - m_Layer: 8 - m_Name: Object009 + - component: {fileID: 64442574152713177} + - component: {fileID: 1751836602332824451} + - component: {fileID: 5031849878429534731} + m_Layer: 13 + m_Name: Box123 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2421536116045036708 +--- !u!4 &64442574152713177 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8902207223557438395} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.08044988, y: 0.225, z: -0.25532228} + m_GameObject: {fileID: 3683235877909965326} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.14741808, y: -0.009732842, z: 0.27053803} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2661113197813719292} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2632620773154218270 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8902207223557438395} - m_Mesh: {fileID: 4944557015945844418, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &5840558345486756635 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8902207223557438395} - 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - 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!1 &8941561125314576597 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8774746788531998393} - - component: {fileID: 7291757737443570679} - - component: {fileID: 4763626440735431485} - m_Layer: 8 - m_Name: Object020 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8774746788531998393 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8941561125314576597} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2735296, y: 0.225, z: -0.25532228} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2661113197813719292} + m_Father: {fileID: 5122057159461656348} m_RootOrder: 19 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7291757737443570679 +--- !u!33 &1751836602332824451 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8941561125314576597} - m_Mesh: {fileID: -1444909868921906229, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &4763626440735431485 + m_GameObject: {fileID: 3683235877909965326} + m_Mesh: {fileID: 9165463457119062170, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &5031849878429534731 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8941561125314576597} + m_GameObject: {fileID: 3683235877909965326} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1866,12 +1346,19 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, type: 2} + - {fileID: 2100000, guid: ee208a723d0303e4d8921b9a9f80dc58, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -1893,7 +1380,7 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &9009064232114091059 +--- !u!1 &4204640922764487257 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1901,46 +1388,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1065395368016386822} - - component: {fileID: 5803009670070942722} - - component: {fileID: 5974082903631049091} - m_Layer: 8 - m_Name: Object002 + - component: {fileID: 3748481723556039983} + - component: {fileID: 2913083938445355129} + - component: {fileID: 7276110768528456733} + m_Layer: 13 + m_Name: Box102 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1065395368016386822 +--- !u!4 &3748481723556039983 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9009064232114091059} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.30570954, y: 0.225, z: -0.25532228} + m_GameObject: {fileID: 4204640922764487257} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.058796227, y: -0.009732842, z: 0.27053803} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2661113197813719292} - m_RootOrder: 1 + m_Father: {fileID: 5122057159461656348} + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5803009670070942722 +--- !u!33 &2913083938445355129 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9009064232114091059} - m_Mesh: {fileID: -3996760141626369306, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} ---- !u!23 &5974082903631049091 + m_GameObject: {fileID: 4204640922764487257} + m_Mesh: {fileID: 5047528748317851287, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &7276110768528456733 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9009064232114091059} + m_GameObject: {fileID: 4204640922764487257} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1954,12 +1441,760 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6238916332166239650, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} - - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, 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!1 &4633304070422174742 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2256324135660449082} + - component: {fileID: 3748264052747150302} + - component: {fileID: 1532031182111951724} + m_Layer: 13 + m_Name: Box121 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2256324135660449082 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4633304070422174742} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.20706913, y: -0.009732872, z: 0.27053803} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5122057159461656348} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3748264052747150302 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4633304070422174742} + m_Mesh: {fileID: 5143503790756086174, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &1532031182111951724 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4633304070422174742} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, 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!1 &4688129069304121684 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6848412021147141265} + - component: {fileID: 1831088836549111192} + - component: {fileID: 2729805629446153040} + m_Layer: 13 + m_Name: Box098 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6848412021147141265 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4688129069304121684} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.17695862, y: -0.009732842, z: 0.27053803} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5122057159461656348} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1831088836549111192 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4688129069304121684} + m_Mesh: {fileID: -1302254107375959788, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &2729805629446153040 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4688129069304121684} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, type: 2} + - {fileID: 2100000, guid: ee208a723d0303e4d8921b9a9f80dc58, 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!1 &4804949760952643912 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2028580322844082644} + - component: {fileID: 4964284876295316585} + - component: {fileID: 7651200732133569491} + m_Layer: 13 + m_Name: Box118 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2028580322844082644 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4804949760952643912} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2661503, y: -0.009732872, z: 0.27053803} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5122057159461656348} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4964284876295316585 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4804949760952643912} + m_Mesh: {fileID: -4996861437628621093, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &7651200732133569491 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4804949760952643912} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, 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!1 &5636482078216508993 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4284182424757543838} + - component: {fileID: 1530230080280004124} + - component: {fileID: 3200183988948639008} + m_Layer: 13 + m_Name: Box125 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4284182424757543838 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5636482078216508993} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2956909, y: -0.009732872, z: 0.27053803} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5122057159461656348} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1530230080280004124 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5636482078216508993} + m_Mesh: {fileID: -5448518418904112508, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &3200183988948639008 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5636482078216508993} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, 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!1 &6161720866339234835 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3135219258707671049} + - component: {fileID: 5292534474258001826} + - component: {fileID: 592151317068151779} + m_Layer: 13 + m_Name: Box103 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3135219258707671049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6161720866339234835} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.08833681, y: -0.009732842, z: 0.27053803} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5122057159461656348} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5292534474258001826 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6161720866339234835} + m_Mesh: {fileID: -7768408576438331914, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &592151317068151779 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6161720866339234835} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, 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!1 &7741871201745771379 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5241943192022849176} + - component: {fileID: 8042648904071932352} + - component: {fileID: 1543625605448181281} + m_Layer: 13 + m_Name: Box108 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5241943192022849176 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7741871201745771379} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.029825538, y: -0.009732842, z: 0.27053803} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5122057159461656348} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8042648904071932352 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7741871201745771379} + m_Mesh: {fileID: -5798510906853853667, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &1543625605448181281 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7741871201745771379} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, type: 2} + - {fileID: 2100000, guid: ee208a723d0303e4d8921b9a9f80dc58, 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!1 &8014182133169887287 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1936834750716703700} + - component: {fileID: 6399944713019932537} + - component: {fileID: 8608021422410978239} + m_Layer: 13 + m_Name: Box109 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1936834750716703700 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8014182133169887287} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.05936615, y: -0.009732842, z: 0.27053803} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5122057159461656348} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6399944713019932537 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8014182133169887287} + m_Mesh: {fileID: 6975212812562875068, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &8608021422410978239 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8014182133169887287} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, 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!1 &9144294603271265780 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2425303140717592100} + - component: {fileID: 2379611036189838359} + - component: {fileID: 7866962753353777971} + m_Layer: 13 + m_Name: Box093 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2425303140717592100 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9144294603271265780} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.26558036, y: -0.009732813, z: 0.27053803} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5122057159461656348} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2379611036189838359 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9144294603271265780} + m_Mesh: {fileID: 5137751575643769850, guid: 917f7bb172a7ab341883ca0510bd8a6d, type: 3} +--- !u!23 &7866962753353777971 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9144294603271265780} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: a24fe7235d560e142910287b6771a387, type: 2} + - {fileID: 2100000, guid: 4e9a2bbb976f37d4282e7fa9dc76c5be, type: 2} + - {fileID: 2100000, guid: bb38dc61bd17b3c48a82bd90fa6fee2f, type: 2} + - {fileID: 2100000, guid: 4d3df77c0c4f14341814cbf2052e5359, type: 2} + - {fileID: 2100000, guid: 87d7c98c56bfb294eb6611b7d8709b5f, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 diff --git a/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/98.prefab.meta b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/98.prefab.meta new file mode 100644 index 000000000..b476e162c --- /dev/null +++ b/GQ_URP/GQ/Assets/Resources/古泉站机房模型90个型号/98.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1820c37e2b0154140aabd4af6c699eca +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Scenes/SampleSceneG_URP.unity b/GQ_URP/GQ/Assets/Scenes/SampleSceneG_URP.unity index 1a26145ff..1d2a3774a 100644 --- a/GQ_URP/GQ/Assets/Scenes/SampleSceneG_URP.unity +++ b/GQ_URP/GQ/Assets/Scenes/SampleSceneG_URP.unity @@ -464,7 +464,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 15 + m_RootOrder: 17 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &8713053 GameObject: @@ -892,7 +892,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 46 + m_RootOrder: 48 m_LocalEulerAnglesHint: {x: 90, y: 0, z: 180} --- !u!1 &16294227 GameObject: @@ -4681,13 +4681,37 @@ PrefabInstance: - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, type: 3} propertyPath: objs.Array.size - value: 97 + value: 98 objectReference: {fileID: 0} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[2] + value: + objectReference: {fileID: 738730321362232166, guid: d0bf89c0c8a61644995ecea5d3f09cd5, + type: 3} - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, type: 3} propertyPath: objs.Array.data[3] value: - objectReference: {fileID: 9061080424600717175, guid: 6dc387043680e204a81079caddcd58f9, + objectReference: {fileID: 6298690216142285466, guid: 30e64fc56e0e334479a32145c33af5af, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[5] + value: + objectReference: {fileID: 583612679574955321, guid: ec3b01541a4d1114bae1b0262c195d09, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[6] + value: + objectReference: {fileID: 7337111109528621480, guid: d67da26265bb6e5438e13849b5c3ddec, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[7] + value: + objectReference: {fileID: 6205064058569834058, guid: 60547b6f477a39041a847a1b77cee3bf, type: 3} - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, type: 3} @@ -4695,6 +4719,114 @@ PrefabInstance: value: objectReference: {fileID: 6994834989001766791, guid: df58f679f97f9394b8ff0e849e606d48, type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[9] + value: + objectReference: {fileID: 5456600792169391391, guid: 90a54d2d4de36e44c8d410ca2a91e104, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[11] + value: + objectReference: {fileID: 4187808771903060214, guid: 614913e45defab34e9ac268e6bcbb953, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[17] + value: + objectReference: {fileID: 1503044958637917893, guid: 55fbdfe8918508748baa5454e21ffc51, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[18] + value: + objectReference: {fileID: 4736260076719325185, guid: c51cd242cea0f9049bbc7bd17d592a27, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[19] + value: + objectReference: {fileID: 4943238014405017863, guid: 936f6929fab7ec244be53edfab888ea6, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[20] + value: + objectReference: {fileID: 6207241692820194623, guid: 57842215e7f0e7341ba9aceb2c57b5b1, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[21] + value: + objectReference: {fileID: 5569743474469298886, guid: 84bdfe512e409d241b3e3740100c409f, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[22] + value: + objectReference: {fileID: 2054141494129440787, guid: 9235652616e46ef4d985723222cde70b, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[23] + value: + objectReference: {fileID: 5654463044670088247, guid: 86e6c4e9b16e65f4c9fdac8dcb4f5355, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[27] + value: + objectReference: {fileID: 5385515305951521010, guid: 61982b55f376f014687a9c81e287bbe1, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[33] + value: + objectReference: {fileID: 6713083856240452646, guid: 8ccd82c129b3ff14596e072db9f9a6c8, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[35] + value: + objectReference: {fileID: 8012289664612080777, guid: 4dffd146a6d89a04499ac9b1c2d8125c, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[37] + value: + objectReference: {fileID: 1523684742045206707, guid: e91c95736b4ca8348a81173fa221ff4b, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[39] + value: + objectReference: {fileID: 7733334943563290854, guid: 093510cb9f99ad744b164d364b65c2cb, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[41] + value: + objectReference: {fileID: 2455454291308712863, guid: db92a0abda994ae498c59fd9f076e06a, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[45] + value: + objectReference: {fileID: 8210446608411139309, guid: 5a864723e64abad45ac23fd173abc88c, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[46] + value: + objectReference: {fileID: 227042365391573245, guid: 59e75bf92c434b445bdce37589a9a08a, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[47] + value: + objectReference: {fileID: 8117042785192359795, guid: 3cd7e78f0393d4546a49e4fb56660c05, + type: 3} - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, type: 3} propertyPath: objs.Array.data[48] @@ -4735,19 +4867,91 @@ PrefabInstance: type: 3} propertyPath: objs.Array.data[54] value: - objectReference: {fileID: 8838424665782897461, guid: 9021de5f38560d4488c15bd3fd3a0795, + objectReference: {fileID: 6022979850000928766, guid: 83d62ab3b8e81804c947f3bcb54d7468, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[71] + value: + objectReference: {fileID: 2093857429406523211, guid: 6d6af22ed0a75e44b971e386bd238481, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[72] + value: + objectReference: {fileID: 3103393358989175085, guid: af696478fbe1e7f4283c8ac00d6baa4e, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[76] + value: + objectReference: {fileID: 4415911164671648617, guid: edcc2d111b0e4ba43a19b55d61c87b4d, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[78] + value: + objectReference: {fileID: 2729069339055827165, guid: 67f98779380d0d64ca7c82cb35baa2ec, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[79] + value: + objectReference: {fileID: 5649428714652503834, guid: b2597c910d481e844b05ffb4190c33fb, type: 3} - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, type: 3} propertyPath: objs.Array.data[80] value: - objectReference: {fileID: 6195115597888005355, guid: 25f1bb144681ffd48b9fe8efe4912d5a, + objectReference: {fileID: 6361783091951461637, guid: c3bfa2b0914bf184dba2661f17987c19, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[81] + value: + objectReference: {fileID: 756236116833628062, guid: 7e83d3deb2f327a45bff09d971663b04, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[85] + value: + objectReference: {fileID: 4014692571395031571, guid: ee70c271dbdd4d6499ab0c1bb2a3a8d8, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[88] + value: + objectReference: {fileID: 6219092084575036944, guid: e4518c03f367c474c8d0dc7c8ba582c6, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[89] + value: + objectReference: {fileID: 7740521153346652625, guid: 5c7ddfb1ed03dc74292ee98c10a711e5, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[90] + value: + objectReference: {fileID: 6801272135842457509, guid: c55f8cffbde8e604988280c7810b6a4d, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[91] + value: + objectReference: {fileID: 6155451245696517734, guid: bcbc08824bafb6f408d75fe6545cba3d, + type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[92] + value: + objectReference: {fileID: 821470746034725191, guid: fc3ed9bdbf9fcb4418090b80b6ab4d77, type: 3} - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, type: 3} propertyPath: objs.Array.data[93] value: - objectReference: {fileID: 3412787353822532046, guid: 02828c70f665eb24482eb9aac05a00d8, + objectReference: {fileID: 3409519055252191261, guid: cc6ec6b5d5b371446a927f54d02b6762, type: 3} - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, type: 3} @@ -4767,6 +4971,12 @@ PrefabInstance: value: objectReference: {fileID: 8382455233334076957, guid: 203514122995f174eaf59280e56cfc29, type: 3} + - target: {fileID: 4065166174645593776, guid: cdff6149826a44f4abc275995ec2d804, + type: 3} + propertyPath: objs.Array.data[97] + value: + objectReference: {fileID: 3305537327897853052, guid: 1820c37e2b0154140aabd4af6c699eca, + type: 3} - target: {fileID: 4065166174645593778, guid: cdff6149826a44f4abc275995ec2d804, type: 3} propertyPath: m_Name @@ -6019,6 +6229,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b2675f98be0178f44b55bd9a26e4f822, type: 3} m_Name: m_EditorClassIdentifier: + baseConf: {fileID: 11400000, guid: d0b81b084ef37a44e9f4e71d1b1c984a, type: 2} clickEventLens: [] scaleUI: {fileID: 0} lensUI_tranform: {fileID: 0} @@ -6402,7 +6613,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 29 + m_RootOrder: 31 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &137188656 MonoBehaviour: @@ -7034,7 +7245,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 32 + m_RootOrder: 34 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &140293605 MonoBehaviour: @@ -10802,7 +11013,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 26 + m_RootOrder: 28 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &219085156 MonoBehaviour: @@ -12002,7 +12213,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 49 + m_RootOrder: 52 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &234178299 GameObject: @@ -12468,13 +12679,14 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 242085846} + - component: {fileID: 242085847} m_Layer: 0 m_Name: --------------------------------------- m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!4 &242085846 Transform: m_ObjectHideFlags: 0 @@ -12488,8 +12700,40 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 48 + m_RootOrder: 51 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &242085847 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 242085844} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 466f0a0ed11afee4f89249fb48d13c4a, type: 3} + m_Name: + m_EditorClassIdentifier: + a: {fileID: 0} + b: {fileID: 0} + A: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + B: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + arender: [] + brender: [] + amats: [] + bmats: [] + ameshFilter: [] + bmeshsFilter: [] + a_meshs: [] + b_meshs: [] --- !u!1 &242246369 GameObject: m_ObjectHideFlags: 0 @@ -17696,7 +17940,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 43 + m_RootOrder: 45 m_LocalEulerAnglesHint: {x: 180, y: 0, z: 0} --- !u!114 &345705944 MonoBehaviour: @@ -21173,7 +21417,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 47 + m_RootOrder: 50 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!224 &440818981 stripped RectTransform: @@ -21953,7 +22197,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 44 + m_RootOrder: 46 m_LocalEulerAnglesHint: {x: 180, y: 180, z: 0} --- !u!1 &458243716 GameObject: @@ -24357,7 +24601,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 19 + m_RootOrder: 21 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &504803817 MonoBehaviour: @@ -30417,6 +30661,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b2675f98be0178f44b55bd9a26e4f822, type: 3} m_Name: m_EditorClassIdentifier: + baseConf: {fileID: 11400000, guid: 984ec76e9c0afd8499e91f81fccab75f, type: 2} clickEventLens: [] scaleUI: {fileID: 0} lensUI_tranform: {fileID: 0} @@ -31552,6 +31797,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b2675f98be0178f44b55bd9a26e4f822, type: 3} m_Name: m_EditorClassIdentifier: + baseConf: {fileID: 11400000, guid: bda340a87f7c0854d9e4ddfbf6338c83, type: 2} clickEventLens: [] scaleUI: {fileID: 0} lensUI_tranform: {fileID: 0} @@ -31953,7 +32199,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 38 + m_RootOrder: 40 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &690317291 MonoBehaviour: @@ -32577,7 +32823,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 24 + m_RootOrder: 26 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} --- !u!114 &705507996 MonoBehaviour: @@ -34419,6 +34665,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b2675f98be0178f44b55bd9a26e4f822, type: 3} m_Name: m_EditorClassIdentifier: + baseConf: {fileID: 11400000, guid: 6a00821d06a43d94cbdd1ed9e1b53884, type: 2} clickEventLens: [] scaleUI: {fileID: 0} lensUI_tranform: {fileID: 0} @@ -35219,7 +35466,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 30 + m_RootOrder: 32 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &749989404 MonoBehaviour: @@ -36777,75 +37024,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1001 &778767098 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 14608906871607789} - m_Modifications: - - target: {fileID: -8679921383154817045, guid: e6c96015a3cd934408878fc6905a1c85, - type: 3} - propertyPath: m_RootOrder - value: 72 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: e6c96015a3cd934408878fc6905a1c85, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: e6c96015a3cd934408878fc6905a1c85, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: e6c96015a3cd934408878fc6905a1c85, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: e6c96015a3cd934408878fc6905a1c85, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: e6c96015a3cd934408878fc6905a1c85, - type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: e6c96015a3cd934408878fc6905a1c85, - type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: e6c96015a3cd934408878fc6905a1c85, - type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: e6c96015a3cd934408878fc6905a1c85, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: e6c96015a3cd934408878fc6905a1c85, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: e6c96015a3cd934408878fc6905a1c85, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 919132149155446097, guid: e6c96015a3cd934408878fc6905a1c85, - type: 3} - propertyPath: m_Name - value: "\u91D1\u5C5E\u6761" - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: e6c96015a3cd934408878fc6905a1c85, type: 3} --- !u!1 &783389712 GameObject: m_ObjectHideFlags: 0 @@ -37282,7 +37460,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 41 + m_RootOrder: 43 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -37649,6 +37827,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b2675f98be0178f44b55bd9a26e4f822, type: 3} m_Name: m_EditorClassIdentifier: + baseConf: {fileID: 11400000, guid: f24b9027ce0c0e147b46fc5acdbba227, type: 2} clickEventLens: [] scaleUI: {fileID: 0} lensUI_tranform: {fileID: 0} @@ -39029,6 +39208,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b2675f98be0178f44b55bd9a26e4f822, type: 3} m_Name: m_EditorClassIdentifier: + baseConf: {fileID: 11400000, guid: c8e7517ba55bb5e4c99616e60342f3fb, type: 2} clickEventLens: [] scaleUI: {fileID: 0} lensUI_tranform: {fileID: 0} @@ -40398,7 +40578,7 @@ PrefabInstance: - target: {fileID: 2328099279807547259, guid: 57cfbcffbbe9796468208a81628506dd, type: 3} propertyPath: m_RootOrder - value: 20 + value: 22 objectReference: {fileID: 0} - target: {fileID: 2328099279807547259, guid: 57cfbcffbbe9796468208a81628506dd, type: 3} @@ -41409,7 +41589,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 39 + m_RootOrder: 41 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &877237394 GameObject: @@ -41684,6 +41864,71 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &888367698 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 888367700} + - component: {fileID: 888367699} + m_Layer: 0 + m_Name: Reflection Probe (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!215 &888367699 +ReflectionProbe: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 888367698} + m_Enabled: 1 + serializedVersion: 2 + m_Type: 0 + m_Mode: 0 + m_RefreshMode: 0 + m_TimeSlicingMode: 0 + m_Resolution: 2048 + m_UpdateFrequency: 0 + m_BoxSize: {x: 17.952372, y: 6.2816143, z: 9.2203865} + m_BoxOffset: {x: -7.422475, y: 0.07746625, z: -0.8546047} + m_NearClip: 0.3 + m_FarClip: 1000 + m_ShadowDistance: 100 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_IntensityMultiplier: 1 + m_BlendDistance: 1 + m_HDR: 1 + m_BoxProjection: 1 + m_RenderDynamicObjects: 0 + m_UseOcclusionCulling: 1 + m_Importance: 1 + m_CustomBakedTexture: {fileID: 0} +--- !u!4 &888367700 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 888367698} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 17.349512, y: 1.786, z: -9.88} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &888714419 MonoBehaviour: m_ObjectHideFlags: 0 @@ -42685,6 +42930,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b2675f98be0178f44b55bd9a26e4f822, type: 3} m_Name: m_EditorClassIdentifier: + baseConf: {fileID: 11400000, guid: 2fe3df14fbbc840418febde070b57555, type: 2} clickEventLens: [] scaleUI: {fileID: 0} lensUI_tranform: {fileID: 0} @@ -43676,7 +43922,7 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: 42df33d8c28bbd542a5b66873440b999, type: 3} propertyPath: m_RootOrder - value: 21 + value: 23 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: 42df33d8c28bbd542a5b66873440b999, type: 3} @@ -47024,6 +47270,62 @@ MonoBehaviour: distanceMultiplier: 0.04 button: {fileID: 0} text: {fileID: 0} +--- !u!1 &1023018614 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1023018615} + m_Layer: 0 + m_Name: "\u6709\u677F\u5361\u7684\u8BBE\u5907" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1023018615 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1023018614} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.000000029802322, y: 0.09, z: -0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5236682523249791853} + - {fileID: 1704047503546810776} + - {fileID: 1935563662030491015} + - {fileID: 915489601676210998} + - {fileID: 2814654616946239083} + - {fileID: 97655026830416076} + - {fileID: 3809797924624086003} + - {fileID: 5183046070246721810} + - {fileID: 7799699611165651300} + - {fileID: 6057619421335938199} + - {fileID: 5119118449912238514} + - {fileID: 2609010859004501656} + - {fileID: 4433488523220862567} + - {fileID: 5273522604940259271} + - {fileID: 606370165244274052} + - {fileID: 4116396921372432760} + - {fileID: 4425983708511861430} + - {fileID: 5646298911603103651} + - {fileID: 7906200256174459245} + - {fileID: 1293103158491988637} + - {fileID: 927285830253531648} + - {fileID: 764778530807871526} + - {fileID: 1212578399471534632} + - {fileID: 3659111854849921957} + - {fileID: 4793414471054946055} + m_Father: {fileID: 0} + m_RootOrder: 49 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1023302026 GameObject: m_ObjectHideFlags: 0 @@ -47374,7 +47676,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 31 + m_RootOrder: 33 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1036835678 MonoBehaviour: @@ -47874,7 +48176,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 17 + m_RootOrder: 19 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1045281127 MonoBehaviour: @@ -48486,7 +48788,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 27 + m_RootOrder: 29 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1056840580 MonoBehaviour: @@ -49063,75 +49365,6 @@ MonoBehaviour: distanceMultiplier: 0.05 button: {fileID: 0} text: {fileID: 0} ---- !u!1001 &1065111305 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 14608906871607789} - m_Modifications: - - target: {fileID: -8679921383154817045, guid: 23a7bcbe8f6a3784cbbd9ba50afeb37b, - type: 3} - propertyPath: m_RootOrder - value: 71 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 23a7bcbe8f6a3784cbbd9ba50afeb37b, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 23a7bcbe8f6a3784cbbd9ba50afeb37b, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 23a7bcbe8f6a3784cbbd9ba50afeb37b, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 23a7bcbe8f6a3784cbbd9ba50afeb37b, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 23a7bcbe8f6a3784cbbd9ba50afeb37b, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 23a7bcbe8f6a3784cbbd9ba50afeb37b, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 23a7bcbe8f6a3784cbbd9ba50afeb37b, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 23a7bcbe8f6a3784cbbd9ba50afeb37b, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 23a7bcbe8f6a3784cbbd9ba50afeb37b, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 23a7bcbe8f6a3784cbbd9ba50afeb37b, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 919132149155446097, guid: 23a7bcbe8f6a3784cbbd9ba50afeb37b, - type: 3} - propertyPath: m_Name - value: "\u5BBD\u91D1\u5C5E\u6761-1" - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 23a7bcbe8f6a3784cbbd9ba50afeb37b, type: 3} --- !u!224 &1065131164 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 2070078800726626112, guid: cfa16bd5e782e264e9dc6857484d2551, @@ -50101,6 +50334,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b2675f98be0178f44b55bd9a26e4f822, type: 3} m_Name: m_EditorClassIdentifier: + baseConf: {fileID: 11400000, guid: 8720e08d500fe354bb79406e0c2f8b83, type: 2} clickEventLens: [] scaleUI: {fileID: 0} lensUI_tranform: {fileID: 0} @@ -52486,6 +52720,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b2675f98be0178f44b55bd9a26e4f822, type: 3} m_Name: m_EditorClassIdentifier: + baseConf: {fileID: 11400000, guid: 5c25b2feca7a61f4a9ee73ebb2677da8, type: 2} clickEventLens: [] scaleUI: {fileID: 0} lensUI_tranform: {fileID: 0} @@ -53698,7 +53933,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 42 + m_RootOrder: 44 m_LocalEulerAnglesHint: {x: 18.578, y: -129.436, z: 0} --- !u!224 &1164119470 stripped RectTransform: @@ -54360,7 +54595,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 13 + m_RootOrder: 15 m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} --- !u!114 &1180284652 stripped MonoBehaviour: @@ -68256,7 +68491,7 @@ Transform: - {fileID: 743945424} - {fileID: 442675218} m_Father: {fileID: 0} - m_RootOrder: 36 + m_RootOrder: 38 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1460606170 stripped GameObject: @@ -69880,6 +70115,71 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1492239476} m_CullTransparentMesh: 1 +--- !u!1 &1492809741 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1492809743} + - component: {fileID: 1492809742} + m_Layer: 0 + m_Name: Reflection Probe (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!215 &1492809742 +ReflectionProbe: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1492809741} + m_Enabled: 1 + serializedVersion: 2 + m_Type: 0 + m_Mode: 0 + m_RefreshMode: 0 + m_TimeSlicingMode: 0 + m_Resolution: 2048 + m_UpdateFrequency: 0 + m_BoxSize: {x: 10.615546, y: 6.2816143, z: 9.2203865} + m_BoxOffset: {x: -4.0323377, y: 0.07746625, z: -0.8546047} + m_NearClip: 0.3 + m_FarClip: 1000 + m_ShadowDistance: 100 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_IntensityMultiplier: 1 + m_BlendDistance: 1 + m_HDR: 1 + m_BoxProjection: 1 + m_RenderDynamicObjects: 0 + m_UseOcclusionCulling: 1 + m_Importance: 1 + m_CustomBakedTexture: {fileID: 0} +--- !u!4 &1492809743 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1492809741} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.39162874, y: 1.786, z: -9.88} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!224 &1496312636 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 2070078800726626112, guid: cfa16bd5e782e264e9dc6857484d2551, @@ -70714,7 +71014,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 16 + m_RootOrder: 18 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!54 &1517122715 Rigidbody: @@ -71747,7 +72047,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 37 + m_RootOrder: 39 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1536517028 GameObject: @@ -72380,6 +72680,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b2675f98be0178f44b55bd9a26e4f822, type: 3} m_Name: m_EditorClassIdentifier: + baseConf: {fileID: 11400000, guid: 09617952a96dffc4d89dd2ccda47b89c, type: 2} clickEventLens: [] scaleUI: {fileID: 0} lensUI_tranform: {fileID: 0} @@ -80640,7 +80941,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 28 + m_RootOrder: 30 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1706230386 MonoBehaviour: @@ -84254,6 +84555,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b2675f98be0178f44b55bd9a26e4f822, type: 3} m_Name: m_EditorClassIdentifier: + baseConf: {fileID: 11400000, guid: 90a9f5ed75c627f42a83ce3f7b2bf8ce, type: 2} clickEventLens: [] scaleUI: {fileID: 0} lensUI_tranform: {fileID: 0} @@ -86076,22 +86378,22 @@ MonoBehaviour: jqr_bczb: jqr_xj_cx: arguments: - token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2OTg4OTA5NTIsInVzZXJuYW1lIjoiMTgzMTIzNDU2NzgifQ.nk3v1YKn1rxU6mEWGkb1tMypi7fWbSYpvTfuAT7L5Zg + token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2OTk5MzgzMzIsInVzZXJuYW1lIjoiMTgzMTIzNDU2NzgifQ.byONEAKKPhmnYj8-aGsq0zaMpOA6ZkMxbmDgCE_sDWU heatThresholdValueMax: heatThresholdValueMin: humidityThresholdValueMax: humidityThresholdValueMin: isLoading: 0 Cabinet_quYu: - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} + - {fileID: 2126159577684565722} + - {fileID: 2126159575907226704} + - {fileID: 2126159576576930541} + - {fileID: 2126159577081052412} + - {fileID: 2126159577226178890} + - {fileID: 2126159577689055646} + - {fileID: 2126159575959053143} + - {fileID: 2126159576844619387} + - {fileID: 2126159577123948463} nowDeviceID: nowDevice: {fileID: 0} lastDeviceID: @@ -86260,7 +86562,7 @@ MonoBehaviour: f_new: {fileID: 0} font_old: {fileID: 0} font_new: {fileID: 0} - Image: {fileID: 767398485} + Image: {fileID: 0} originalObject: {fileID: 0} --- !u!114 &1815567666 MonoBehaviour: @@ -86814,7 +87116,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 14 + m_RootOrder: 16 m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} --- !u!114 &1831173535 MonoBehaviour: @@ -87591,6 +87893,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b2675f98be0178f44b55bd9a26e4f822, type: 3} m_Name: m_EditorClassIdentifier: + baseConf: {fileID: 11400000, guid: 577cc69042108c54e8d975ce0add1efe, type: 2} clickEventLens: [] scaleUI: {fileID: 0} lensUI_tranform: {fileID: 0} @@ -87739,6 +88042,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b2675f98be0178f44b55bd9a26e4f822, type: 3} m_Name: m_EditorClassIdentifier: + baseConf: {fileID: 11400000, guid: 9bbf95efb4f0a3545a83f9b4956fab34, type: 2} clickEventLens: [] scaleUI: {fileID: 0} lensUI_tranform: {fileID: 0} @@ -87918,7 +88222,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 34 + m_RootOrder: 36 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1859118122 MonoBehaviour: @@ -89193,6 +89497,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b2675f98be0178f44b55bd9a26e4f822, type: 3} m_Name: m_EditorClassIdentifier: + baseConf: {fileID: 11400000, guid: 3cd442d6b818712459d779cae9b99677, type: 2} clickEventLens: [] scaleUI: {fileID: 0} lensUI_tranform: {fileID: 0} @@ -89503,7 +89808,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 25 + m_RootOrder: 27 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1877492179 MonoBehaviour: @@ -94686,7 +94991,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 35 + m_RootOrder: 37 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1982096661 GameObject: @@ -94805,6 +95110,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b2675f98be0178f44b55bd9a26e4f822, type: 3} m_Name: m_EditorClassIdentifier: + baseConf: {fileID: 11400000, guid: 28b9808413ca78341aa7e36852c35df5, type: 2} clickEventLens: [] scaleUI: {fileID: 0} lensUI_tranform: {fileID: 0} @@ -96798,7 +97104,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 18 + m_RootOrder: 20 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &2017624305 MonoBehaviour: @@ -98551,7 +98857,7 @@ Transform: - {fileID: 764404273} - {fileID: 182837844} m_Father: {fileID: 0} - m_RootOrder: 45 + m_RootOrder: 47 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2053683307 GameObject: @@ -99620,6 +99926,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b2675f98be0178f44b55bd9a26e4f822, type: 3} m_Name: m_EditorClassIdentifier: + baseConf: {fileID: 11400000, guid: acccfed4a183da74199d71fe17dd9a32, type: 2} clickEventLens: [] scaleUI: {fileID: 0} lensUI_tranform: {fileID: 0} @@ -100271,7 +100578,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 33 + m_RootOrder: 35 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &2098930745 MonoBehaviour: @@ -103162,6 +103469,32 @@ MonoBehaviour: m_PersistentCalls: m_Calls: [] m_IsOn: 1 +--- !u!1 &7666969399970483 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3483241262175501897} + - component: {fileID: 1155174812454418762} + - component: {fileID: 5933189493251017444} + m_Layer: 0 + m_Name: Object016 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &9161227977426891 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9077424687819668514} + m_Mesh: {fileID: -75171668026845272, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} --- !u!4 &14608906871607789 stripped Transform: m_CorrespondingSourceObject: {fileID: 974629800818434945, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -103204,12 +103537,361 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!1 &29896753895660712 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8789197934175387198} + - component: {fileID: 317847682987182458} + - component: {fileID: 1075151474346439793} + m_Layer: 0 + m_Name: Object023 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &32295269339450812 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4947624571732031007} + m_Mesh: {fileID: -8586770294792153069, guid: 38d78f271938d6c4686b952b3257872c, type: 3} +--- !u!1 &37861116822743939 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2140805518179612214} + - component: {fileID: 7429781570272617465} + - component: {fileID: 4295158458874724049} + m_Layer: 0 + m_Name: Object008 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &42194744380989234 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7376891716375374142} + m_Mesh: {fileID: -3292925553009838691, guid: 1e0b029320fe5914d98621193276e076, type: 3} +--- !u!33 &42808976294637933 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4919009123041725134} + m_Mesh: {fileID: -8586770294792153069, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} +--- !u!33 &47902082627147564 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 503834029184875071} + m_Mesh: {fileID: 7463243275869744982, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} +--- !u!1 &50989320254078809 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1435435836830980166} + - component: {fileID: 3151108926150949298} + - component: {fileID: 6264267528335909526} + m_Layer: 0 + m_Name: Box143 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &74652991817908684 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2033957675191262329} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.062375322, y: 0.12233278, z: -0.23659207} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5236682523249791853} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &85571766687123612 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3129545443695989217} + - component: {fileID: 557542264075358141} + - component: {fileID: 9034278958605882241} + m_Layer: 0 + m_Name: Box232 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &90402177600101642 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1357196648834463246} + - component: {fileID: 3521434978940393934} + - component: {fileID: 2223260988966793527} + m_Layer: 0 + m_Name: Box001 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &93940808810515852 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1300198234708068701} + m_Mesh: {fileID: 6018422378889459822, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!4 &97321546540671331 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1012856552372630462} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.18574683, y: 0.43346125, z: -0.31663662} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &97655026830416076 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 725396295362167414} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8483859195261948859} + - {fileID: 7654846095316805277} + - {fileID: 5627556812929080769} + - {fileID: 8250907086480689258} + - {fileID: 650470211758295052} + - {fileID: 6582279449109523776} + - {fileID: 4666601162315919892} + - {fileID: 4906297013069699892} + - {fileID: 4891751735058001048} + - {fileID: 277614928777414551} + - {fileID: 4592742456828578033} + - {fileID: 4938458197045745735} + - {fileID: 1502536523695269206} + - {fileID: 4176332386443173464} + - {fileID: 3510317386620012347} + - {fileID: 3460347194474908273} + - {fileID: 8422828877267112724} + - {fileID: 8008580398469034860} + - {fileID: 1130055290320874584} + - {fileID: 1435435836830980166} + - {fileID: 8546069140785211922} + - {fileID: 2503965741660084215} + - {fileID: 3492822853752902173} + - {fileID: 2981584585952641076} + - {fileID: 7293114309888114969} + m_Father: {fileID: 1023018615} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &98792630343089962 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4527259733259660982} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.08767945, y: 0.6944689, z: -0.31237373} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &115941909142054134 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9110503696563589219} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!1 &119415888793469137 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8485453691673917671} + - component: {fileID: 6613757033279647464} + - component: {fileID: 8545774245748131267} + m_Layer: 0 + m_Name: 82 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &121785957508862989 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5396514946799468102} + - component: {fileID: 3915414510886336299} + - component: {fileID: 8215255042285036088} + m_Layer: 0 + m_Name: Box006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &122687327772999036 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8034722700517284240} + - component: {fileID: 8184284559507268067} + - component: {fileID: 4023886849472070171} + m_Layer: 0 + m_Name: Box029 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &122740943877988231 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7457411467430242699} + m_Mesh: {fileID: -3292925553009838691, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} --- !u!1 &125333211207381425 stripped GameObject: m_CorrespondingSourceObject: {fileID: 867004495911601117, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &129716969664124107 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7372876789854018737} + m_Mesh: {fileID: -7647463442239531939, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} +--- !u!1 &132533658674635420 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 764778530807871526} + m_Layer: 0 + m_Name: 91 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 --- !u!1 &146921497326276144 GameObject: m_ObjectHideFlags: 0 @@ -103228,6 +103910,76 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!23 &147257434618549882 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1185302680108360951} + 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 4945626539659787368, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!4 &150189800865800774 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1638635161337710702} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.086409554, y: 0.055102743, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4116396921372432760} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &163678880806726428 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6429946933118826056} + m_Mesh: {fileID: -2639241166356525208, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} --- !u!1 &164304008956566378 GameObject: m_ObjectHideFlags: 0 @@ -103245,42 +103997,788 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!4 &172114895535053200 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 951626561130269517} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.25110626, y: 0.18508703, z: -0.15037027} + m_LocalScale: {x: 1, y: 1, z: 1.5098631} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &176848059630947367 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2981968174469256421} + - component: {fileID: 5976014620614738018} + - component: {fileID: 2994756878276556875} + m_Layer: 0 + m_Name: 20 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &181037452269558157 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4615722023303933012} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: bae9d112f2ddd7345967d041e1189ddc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 90091843de6415b44929abd7f9c033bd, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!4 &183628042510612748 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3221439188117030330} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.23470505, y: 0.18, z: -0.028926678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &195440020524634359 stripped GameObject: m_CorrespondingSourceObject: {fileID: 1081749787028316827, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &196416161712242048 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5113022911475748972} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, 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!1 &203290574165625749 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 554873157037997227} + - component: {fileID: 6042826853073427018} + - component: {fileID: 6770746939090086027} + m_Layer: 0 + m_Name: Box247 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &211274824236035083 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4702106843298603276} + m_Mesh: {fileID: 1338664037747464310, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} --- !u!4 &224721407225224707 stripped Transform: m_CorrespondingSourceObject: {fileID: 1056987977101388911, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &225622944019644222 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 606370165244274052} + m_Layer: 0 + m_Name: 55 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!33 &235176438417237810 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 980275664167595507} + m_Mesh: {fileID: 4711277529317192186, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} +--- !u!33 &241516857293519884 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1908755699730042670} + m_Mesh: {fileID: -1444909868921906229, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} --- !u!1 &247018780662249592 stripped GameObject: m_CorrespondingSourceObject: {fileID: 1069856009713895956, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &256850661230170908 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1588130940586263175} + - component: {fileID: 728818312104957694} + - component: {fileID: 714279754976046432} + m_Layer: 0 + m_Name: Box017 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &270850401058233701 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3757324180360625731} + m_Mesh: {fileID: 3822247309040838107, guid: 485c2b00c505121468e2d20910842a74, type: 3} --- !u!1 &271730697377043493 stripped GameObject: m_CorrespondingSourceObject: {fileID: 1040353211062625865, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &276341818442952431 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105352306298952564} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 58c40c9aea5779b4f8a4d3626e73b827, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!4 &277614928777414551 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5113022911475748972} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.11309204, y: 0.24802452, z: -0.35262305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &287096415806189352 stripped Transform: m_CorrespondingSourceObject: {fileID: 1030913860237991236, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &308510432952092018 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7682609977067091281} + 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 5483008982332242224, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!23 &314042218168671674 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8723609804160104372} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, 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 &314505188847831882 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6855353250331612702} + m_Mesh: {fileID: -2639241166356525208, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} +--- !u!33 &317847682987182458 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 29896753895660712} + m_Mesh: {fileID: 8167450939506310628, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!1 &321058408552156870 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3022629855923310798} + - component: {fileID: 500848378559281218} + - component: {fileID: 3568135329754073096} + m_Layer: 0 + m_Name: Object081 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &321648864480666987 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7344490264740789437} + 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: 6b40199358f17c3459481cabfe21df54, type: 2} + - {fileID: 2100000, guid: b710e325f8c745b448aea5256ff3912e, type: 2} + - {fileID: 2100000, guid: d244430b11a0a884f87bbfbfed636d9e, 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!23 &322558729258144945 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6198255907163431199} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 90091843de6415b44929abd7f9c033bd, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!4 &323972406642997920 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5555929885796966145} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.24259655, y: 0.24848777, z: -0.31173322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &324154674604079946 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2032215047162042229} + - component: {fileID: 1583087275198825402} + - component: {fileID: 7665186582747897884} + m_Layer: 0 + m_Name: Object007 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &327535401730976238 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6016534104643877689} + - component: {fileID: 8315602256245010436} + - component: {fileID: 2080469558622543634} + m_Layer: 0 + m_Name: Box047 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &328256524805099022 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5462125688595502133} + m_Mesh: {fileID: 3648286742040142478, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!1 &341118656683163088 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8008580398469034860} + - component: {fileID: 3034861383853642932} + - component: {fileID: 4206694552294890655} + m_Layer: 0 + m_Name: Box141 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &347963555533083299 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4616177761170974976} + m_Mesh: {fileID: -8586770294792153069, guid: 485c2b00c505121468e2d20910842a74, type: 3} +--- !u!4 &348356212311089783 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5728985886515349564} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.2785775, y: 0.108672604, z: -0.013490637} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &351155506403635100 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3427435218173911325} + m_Mesh: {fileID: 9186633843763367028, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &353033862932190122 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4835932489331936413} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: d5d22b6e25b0d2247ab653afa9527dc3, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!23 &356226476387265717 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862024226826759079} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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 &361968994154808078 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 833519830865367788} + m_Mesh: {fileID: 7942793150968599163, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} --- !u!1 &362222326558152124 stripped GameObject: m_CorrespondingSourceObject: {fileID: 627035347710093264, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &363649218912243454 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1228478719733007785} + m_Mesh: {fileID: -1141464603633071787, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} --- !u!114 &372151325536041284 MonoBehaviour: m_ObjectHideFlags: 0 @@ -103311,6 +104809,21 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!4 &401182475038260594 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6552748430376844215} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.26802358, y: 0.11099168, z: -0.25641993} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4433488523220862567} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!224 &411124726683518636 RectTransform: m_ObjectHideFlags: 0 @@ -103331,24 +104844,1102 @@ RectTransform: m_AnchoredPosition: {x: 1.6605225, y: 0} m_SizeDelta: {x: 3.3209991, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!23 &421361441324719482 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5972527458311553597} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &421916328940683477 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1071332537007833359} + - component: {fileID: 5648046270585234273} + - component: {fileID: 5448654545917992470} + m_Layer: 0 + m_Name: Box021 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &426601992095297194 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5792253641730294748} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.10928565, y: 0.0010635629, z: -0.26500002} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4433488523220862567} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &435822488559455327 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 830007329053346260} + m_Mesh: {fileID: -5613867604693661769, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} +--- !u!33 &456166674795990853 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3561635671931183008} + m_Mesh: {fileID: 3600287743064244957, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!4 &457596257219084680 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1365074971643505568} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.086409554, y: 0.055102743, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4425983708511861430} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &463127506496225800 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6641317627745052019} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: e670d9ac48e4ccb4ab9c6a358090edb9, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, 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!23 &484879995438316642 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2249942241251644645} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 5c8cedf3f5a458546a2bf464a001dc24, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 9c4dff57059c90a469f7b4338b1c47d6, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 10ac57f42847b114584025b79f149fd9, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, 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!23 &486799963001394292 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5776162854793565723} + 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: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, 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!1 &497180833977954151 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2804907077140913241} + - component: {fileID: 4450774505525704328} + - component: {fileID: 1485752535686274538} + m_Layer: 0 + m_Name: Object004 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &499642972515458194 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8726846845466028039} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 204d0d4218e32054e81e5f600dcd7c01, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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 &500848378559281218 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 321058408552156870} + m_Mesh: {fileID: -8879626735686362149, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!4 &502957451211378030 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6599151279000025688} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.0021216013, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5273522604940259271} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &503834029184875071 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2073813873393652818} + - component: {fileID: 47902082627147564} + - component: {fileID: 2082608265012794755} + m_Layer: 0 + m_Name: Box041 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &510160123048615850 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7409166699846018994} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.11562897, y: 0.18, z: -0.028926678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &515906586757511990 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8516660339158018761} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 53a6ea32b66877f4f811139c51424123, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!4 &519674273852777465 stripped Transform: m_CorrespondingSourceObject: {fileID: 757505122565493141, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &523618035779240531 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5629526132366796786} + m_LocalRotation: {x: 0.00000009974802, y: 0.00000009974802, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.123106346, y: 0.38048548, z: -0.15037024} + m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &531718602392118601 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8803064054952496967} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!23 &532383784897704047 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1520892183057875682} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!1 &540019890679487902 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3772702839513361420} + - component: {fileID: 6995990052494334484} + - component: {fileID: 6733935686028795400} + m_Layer: 0 + m_Name: Box244 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &541641213839796431 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1584256114423618114} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!4 &543450652676794594 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 919132149011018328} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -16.582582, y: -12.386955, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5593526352231464541} + - {fileID: 8152742917120161547} + m_Father: {fileID: 3097173612095511551} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &544478751538331307 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3488200520186256781} + m_Mesh: {fileID: 3822247309040838107, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} +--- !u!1 &546537681584359610 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 927285830253531648} + m_Layer: 0 + m_Name: 82 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &554873157037997227 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 203290574165625749} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.2204187, y: 0.26294157, z: -0.06132862} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7799699611165651300} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &557542264075358141 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 85571766687123612} + m_Mesh: {fileID: -8831593214895347882, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} +--- !u!23 &561589773563663430 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 633950419267998548} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 3e633f3da7f6c1c46a05ea105f130727, 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 &564335625566939626 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7067225659508010435} + m_Mesh: {fileID: -5079571484100782257, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!33 &567435460385221855 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2996582998464512050} + m_Mesh: {fileID: -5369315709208034699, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!33 &568553517085301890 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7001395798920391310} + m_Mesh: {fileID: -3292925553009838691, guid: fcc65de0395699040be81595ac8a1eda, type: 3} +--- !u!1 &576364397627779468 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 915489601676210998} + m_Layer: 0 + m_Name: 12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &579719431562664659 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4854737110433542296} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.20539854, y: 0.18, z: -0.028926678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &580010578998076518 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6273110093332709059} + m_Mesh: {fileID: 4944557015945844418, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!4 &580807283708612812 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3255790684224465234} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.28979826, y: 0.0010635629, z: -0.26500002} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4433488523220862567} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &586285754926754320 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1899046328673228957} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!4 &588881027163219314 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5179236774481503921} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.059109643, y: 0.225, z: -0.31253278} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7906200256174459245} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &590760871622244257 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7635953401258020158} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.006591782, y: 0.24848777, z: -0.31173322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &593084413659108729 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3600204538948686830} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.32694674, y: 0.43346125, z: -0.31663662} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &594169894444531636 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819344453598577020} + m_Mesh: {fileID: 4442130670313257827, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} +--- !u!1 &601611563699616894 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3561397645878915816} + - component: {fileID: 8335676132145093948} + - component: {fileID: 2809086548080062514} + m_Layer: 0 + m_Name: Object033 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!4 &605971678680484332 stripped Transform: m_CorrespondingSourceObject: {fileID: 422680981881486208, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &606370165244274052 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 225622944019644222} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3058764750282130794} + - {fileID: 2471743200016686718} + - {fileID: 3460788035129314633} + - {fileID: 6258881646200217078} + - {fileID: 945589268236564956} + - {fileID: 6597727926057542425} + - {fileID: 6021168244238094378} + - {fileID: 6362028920366019517} + - {fileID: 8789197934175387198} + - {fileID: 3781878649832252937} + - {fileID: 6447666010706985083} + - {fileID: 7847668185954768525} + - {fileID: 7301499081569813195} + - {fileID: 2784852789078826112} + - {fileID: 8631454414095113334} + - {fileID: 2399464491574361398} + - {fileID: 3561397645878915816} + - {fileID: 98792630343089962} + - {fileID: 5931276165114548347} + - {fileID: 2069739961643032961} + - {fileID: 5479611474968673267} + - {fileID: 4992232393358038310} + - {fileID: 5007368932709486588} + - {fileID: 4775775807000466203} + - {fileID: 8868954554356402484} + - {fileID: 2775136607325095913} + - {fileID: 8867790769273762440} + - {fileID: 8554756781600169958} + - {fileID: 2948044116176190937} + - {fileID: 5591659367985251104} + - {fileID: 1222424795565411576} + - {fileID: 4853988774009750192} + - {fileID: 5593234048139992093} + - {fileID: 9068655244433073463} + - {fileID: 3022629855923310798} + - {fileID: 5754246669169074610} + - {fileID: 8225486795141447894} + - {fileID: 2524298590168888646} + - {fileID: 8632740539258045281} + - {fileID: 3675558599611542435} + m_Father: {fileID: 1023018615} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &609784370353833701 stripped GameObject: m_CorrespondingSourceObject: {fileID: 415195096668959881, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &626762644403604193 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9151679755582334220} + m_Mesh: {fileID: 5828714007021999026, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} +--- !u!33 &633649278047695158 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457799320611601031} + m_Mesh: {fileID: -7768408576438331914, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!33 &633805485225590438 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8742914005206167696} + m_Mesh: {fileID: -5243098771569098612, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} +--- !u!1 &633950419267998548 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5228341062831972069} + - component: {fileID: 6322429258850949778} + - component: {fileID: 561589773563663430} + m_Layer: 0 + m_Name: Box073 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &640270441565666157 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7408558085279866753} + - component: {fileID: 8702369120668674034} + - component: {fileID: 4505528374185935882} + m_Layer: 0 + m_Name: Box029 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &641160193030450205 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3297847178632074627} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.086409554, y: 0.033658683, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4425983708511861430} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &650470211758295052 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3083090457026954727} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.27569002, y: 0.24802452, z: -0.35262305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &653588031794358789 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4564861733760945791} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.09486534, y: 0.225, z: -0.31253278} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7906200256174459245} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &670847728217171677 MonoBehaviour: m_ObjectHideFlags: 0 @@ -103439,6 +106030,150 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!4 &690954537832693631 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6128233052755535475} + m_LocalRotation: {x: 0.00000009974802, y: 0.00000009974802, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.10770582, y: 0.38048548, z: -0.15037024} + m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &696733660428963416 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6033332132712483143} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.07972185, y: 0.225, z: -0.25532228} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &702934203802038126 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6039515006544750705} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.27236468, y: 0.42568934, z: -0.26399994} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 915489601676210998} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &712563632952339902 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6210854786555371136} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, 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!23 &714279754976046432 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256850661230170908} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 58c40c9aea5779b4f8a4d3626e73b827, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!224 &715856548527221470 RectTransform: m_ObjectHideFlags: 0 @@ -103459,12 +106194,59 @@ RectTransform: m_AnchoredPosition: {x: 322, y: -10.999986} m_SizeDelta: {x: 444.587, y: 187.646} m_Pivot: {x: 0.5, y: 0.5} +--- !u!4 &721252566861700757 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3158614892640197323} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.012897521, y: 0.42568934, z: -0.26399994} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 915489601676210998} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &725396295362167414 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 97655026830416076} + m_Layer: 0 + m_Name: 19 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!33 &728818312104957694 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256850661230170908} + m_Mesh: {fileID: -114699674525647331, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} --- !u!4 &736282177112977689 stripped Transform: m_CorrespondingSourceObject: {fileID: 3314047453322573820, guid: 32f862715729d804f8c707be223df6e8, type: 3} m_PrefabInstance: {fileID: 2867121862218958565} m_PrefabAsset: {fileID: 0} +--- !u!33 &737961451637358040 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2315072564869115919} + m_Mesh: {fileID: -612376834313925032, guid: 837e03a60f341e14da656441a8653493, type: 3} --- !u!222 &738481847459716907 CanvasRenderer: m_ObjectHideFlags: 0 @@ -103473,6 +106255,132 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6110246063272483259} m_CullTransparentMesh: 1 +--- !u!23 &738485800660780942 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4306481230123522608} + 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: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!23 &746932236024046411 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7764684601696689770} + 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 9147106888433294362, guid: 485c2b00c505121468e2d20910842a74, type: 3} + 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!1 &754889193151839310 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3781878649832252937} + - component: {fileID: 8456631751381897398} + - component: {fileID: 7099104808727460128} + m_Layer: 0 + m_Name: Object025 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &760397113021607748 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5634914221528484298} + - component: {fileID: 5375217557309989035} + - component: {fileID: 996040040469598307} + m_Layer: 0 + m_Name: Box038 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!222 &762040919022975978 CanvasRenderer: m_ObjectHideFlags: 0 @@ -103487,6 +106395,178 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 2867121862218958565} m_PrefabAsset: {fileID: 0} +--- !u!33 &764088705154338973 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7804890617061320337} + m_Mesh: {fileID: -3292925553009838691, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} +--- !u!4 &764778530807871526 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 132533658674635420} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6725588481327200776} + - {fileID: 2919918208140957896} + - {fileID: 2358247032580801500} + - {fileID: 8674213126204227816} + - {fileID: 7916000785774730604} + - {fileID: 3670565738863415531} + m_Father: {fileID: 1023018615} + m_RootOrder: 21 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &768625467250555752 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6855353250331612702} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.03692468, y: 0.073690474, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3659111854849921957} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &769125453927663500 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6210854786555371136} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.13576478, y: 0.24848777, z: -0.31173322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &771052192141343404 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5833495022044831191} + 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: 2841219563373173654, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!23 &781708937066681677 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6128233052755535475} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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 &790746786397543865 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3279829644779518520} + m_Mesh: {fileID: -894122891035482148, guid: 1e0b029320fe5914d98621193276e076, type: 3} +--- !u!4 &793117158465809802 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3660518367769324317} + m_LocalRotation: {x: 0.00000009974802, y: 0.00000009974802, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.15195785, y: 0.38048548, z: -0.15037024} + m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!222 &794374461924117535 CanvasRenderer: m_ObjectHideFlags: 0 @@ -103495,12 +106575,410 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4172065503821179884} m_CullTransparentMesh: 1 +--- !u!4 &795014089940766546 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7692961608494773709} + m_LocalRotation: {x: 0.00000009974802, y: 0.00000009974802, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.021151282, y: 0.38048548, z: -0.15037027} + m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &798164884340707396 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1877332301342921547} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 5d67d5e43daa72d4fade2fe649b7271d, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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 &798637185576955753 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7241657841303646068} + m_Mesh: {fileID: -6637382640520475244, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!33 &800642684989677192 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5792253641730294748} + m_Mesh: {fileID: -2639241166356525208, guid: 38d78f271938d6c4686b952b3257872c, type: 3} +--- !u!4 &801911843903028646 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590861007285837843} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.10710731, y: 0.108672604, z: -0.013490637} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &812882246250734175 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8566791999311775194} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.10072891, y: 0.077693306, z: -0.13957441} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5273522604940259271} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &819344453598577020 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3484013036154424278} + - component: {fileID: 594169894444531636} + - component: {fileID: 8502332244094758416} + m_Layer: 0 + m_Name: Box028 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &820064623976568813 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8125601843354545040} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.10173249, y: 0.013357807, z: -0.13957438} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6057619421335938199} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &826469998298123095 stripped GameObject: m_CorrespondingSourceObject: {fileID: 490122766808955195, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &826729438480330051 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2321075858859451330} + m_Mesh: {fileID: 9186633843763367028, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} +--- !u!1 &830007329053346260 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2609672870916401044} + - component: {fileID: 435822488559455327} + - component: {fileID: 2089988575344995664} + m_Layer: 0 + m_Name: Box004 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &833519830865367788 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7293114309888114969} + - component: {fileID: 361968994154808078} + - component: {fileID: 6075814720519264553} + m_Layer: 0 + m_Name: waike1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &837108644273911267 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2364739281792924514} + m_Mesh: {fileID: 9186633843763367028, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} +--- !u!23 &852143784476563918 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7602415919040394979} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &862024226826759079 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5455113164789638678} + - component: {fileID: 6090976738227987041} + - component: {fileID: 356226476387265717} + m_Layer: 0 + m_Name: Box073 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &886140722217932970 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8053525655355979435} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.088103205, y: 0.18, z: -0.028926678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &894501083924097521 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8446911348340682208} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.14731327, y: 0.26294157, z: -0.06132862} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7799699611165651300} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &902860880922353000 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9014289438920954718} + m_Mesh: {fileID: -5243098771569098612, guid: 485c2b00c505121468e2d20910842a74, type: 3} +--- !u!4 &912535584362909651 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2992764008354428493} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.086409554, y: 0.033658683, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4116396921372432760} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &914913610771503934 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6429946933118826056} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00032439828, y: 0.08114039, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3809797924624086003} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &915489601676210998 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576364397627779468} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3945214733487930602} + - {fileID: 2609672870916401044} + - {fileID: 5396514946799468102} + - {fileID: 7575107225780166441} + - {fileID: 3189088559993529159} + - {fileID: 3999633067746330632} + - {fileID: 4124703002655843741} + - {fileID: 8636877618090013723} + - {fileID: 721252566861700757} + - {fileID: 1627972740210597483} + - {fileID: 3086961832189955246} + - {fileID: 1677038180369880751} + - {fileID: 6439165146595739811} + - {fileID: 3363292645499818968} + - {fileID: 702934203802038126} + m_Father: {fileID: 1023018615} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &916693024935924706 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6033332132712483143} + m_Mesh: {fileID: 4944557015945844418, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} +--- !u!1 &919132149011018328 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 543450652676794594} + m_Layer: 0 + m_Name: "\u5BBD\u91D1\u5C5E\u6761-1" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &921044763637409690 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4164943118143414483} + m_Mesh: {fileID: 8197054578433957194, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!33 &923983454865519316 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6039515006544750705} + m_Mesh: {fileID: 4944557015945844418, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} --- !u!1 &924160258538904787 GameObject: m_ObjectHideFlags: 0 @@ -103519,12 +106997,121 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!4 &927285830253531648 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 546537681584359610} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8485453691673917671} + - {fileID: 2808353527271729658} + - {fileID: 2194490710742758063} + - {fileID: 9089272748958100174} + - {fileID: 7752985581750515530} + - {fileID: 3797400483023977165} + - {fileID: 5938031625194285682} + - {fileID: 5006654848418250913} + - {fileID: 696733660428963416} + - {fileID: 1227893999386976092} + - {fileID: 3803785263237196053} + - {fileID: 2383442872646485494} + - {fileID: 6405949877407969947} + - {fileID: 6862348287560766621} + - {fileID: 6264946460797963988} + - {fileID: 3483241262175501897} + - {fileID: 7566020521579175478} + - {fileID: 7109695589848148126} + - {fileID: 7903679028541912288} + - {fileID: 5906018327896702021} + m_Father: {fileID: 1023018615} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &932582633154235020 stripped GameObject: m_CorrespondingSourceObject: {fileID: 91269276240066784, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &945589268236564956 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6273110093332709059} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.08128147, y: 0.6944689, z: -0.31237373} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &951626561130269517 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 172114895535053200} + - component: {fileID: 8354618681325554178} + - component: {fileID: 6322958283478198386} + m_Layer: 0 + m_Name: Box062 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &971961443549533793 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3694474294739738027} + m_Mesh: {fileID: -6930810130992049895, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} +--- !u!1 &980275664167595507 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4112460083999017169} + - component: {fileID: 235176438417237810} + - component: {fileID: 4413033093731881750} + m_Layer: 0 + m_Name: Box223 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &983362396195415289 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3294512487480099914} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.0011672676, y: 0.8071027, z: -0.528} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7799699611165651300} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &987821153196798572 PrefabInstance: m_ObjectHideFlags: 0 @@ -103686,6 +107273,1881 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 987821151422252769, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151422252770, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821151422252770, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821151437511834, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151437511835, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821151437511835, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821151441889799, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151441889848, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821151441889848, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821151443073501, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151443073502, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821151443073502, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821151448080811, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151448080812, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821151449119495, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151449119544, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821151449119544, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821151452355011, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151452355012, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821151452355012, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821151470276680, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821151470276680, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821151470276695, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151482447646, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151482447647, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821151482447647, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821151487082580, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151487082581, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821151487082581, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821151502848852, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151502848853, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821151502848853, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821151516044201, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151516044202, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821151516044202, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821151517962675, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151517962676, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821151517962676, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821151524409977, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151524409978, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821151524409978, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821151551097472, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821151551097472, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821151551097487, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151578177600, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821151578177600, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821151578177615, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151590310452, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151590310453, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821151590310453, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821151610319403, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151610319404, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821151610319404, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821151645047239, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151645047288, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821151645047288, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821151645903794, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151645903795, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821151645903795, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821151659928896, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151659928897, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821151659928897, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821151699665256, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151699665257, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821151699665257, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821151739002093, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151739002094, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821151739002094, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821151740514115, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151740514116, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821151740514116, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821151747818779, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151747818780, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821151747818780, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821151764668828, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151764668829, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821151764668829, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821151775308149, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151775308150, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821151775308150, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821151775536909, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151775536910, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821151775536910, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821151788109732, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151788109733, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821151788109733, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821151790052513, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151790052514, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821151790052514, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821151801769112, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151801769113, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821151801769113, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821151848015978, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151848015979, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821151848015979, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821151851974670, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151851974671, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821151851974671, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821151865857287, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151865857336, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821151865857336, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821151875339646, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151875339647, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821151875339647, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821151878575264, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821151878575264, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821151878575279, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151917104050, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151917104051, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821151917104051, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821151923511443, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151923511444, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821151923511444, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821151925312606, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151925312607, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821151925312607, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821151953853829, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151953853830, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821151953853830, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821151956714565, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151956714566, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821151956714566, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821151986810426, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821151986810427, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821151986810427, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821152013955608, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821152013955608, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821152013955687, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152035367885, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152035367886, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152035367886, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152086434777, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152086434778, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821152086434778, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821152100945240, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152100945241, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821152100945241, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821152112631486, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152112631487, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821152112631487, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821152115939072, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152115939073, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821152115939073, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821152118795979, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152118795980, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821152118795980, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821152154323982, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152154323983, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152154323983, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152169328688, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.454 + objectReference: {fileID: 0} + - target: {fileID: 987821152169328703, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152183045893, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152183045894, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152183045894, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152229580579, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152229580580, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821152229580580, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821152240474910, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152240474911, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821152240474911, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821152260914749, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152260914750, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152260914750, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152269864829, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152269864830, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821152269864830, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821152308342334, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152308342335, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821152308342335, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821152313393709, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152313393710, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152313393710, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152313750613, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152313750614, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821152313750614, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821152330199328, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152330199329, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152330199329, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152337585664, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152337585664, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152337585679, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152346814913, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152346814914, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821152346814914, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821152350478698, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152350478699, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821152350478699, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821152368487036, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152368487037, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821152368487037, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821152369112904, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821152369112904, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821152369112919, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152385013942, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152385013943, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152385013943, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152403879338, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152403879339, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821152403879339, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821152424167561, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152424167562, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821152424167562, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821152438678123, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152438678124, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821152438678124, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821152443135762, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152443135763, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46 + objectReference: {fileID: 0} + - target: {fileID: 987821152443831824, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152443831825, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152443831825, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152462440003, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152462440004, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152462440004, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152466285808, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152466285809, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821152466285809, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821152467982718, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152467982719, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821152467982719, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821152471636827, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152471636828, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152471636828, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152503206448, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821152503206448, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821152503206463, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152523324945, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152523324946, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821152523324946, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821152541375162, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152541375163, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152541375163, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152579759553, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152579759554, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152579759554, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152587466641, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152587466642, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821152587466642, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821152608945339, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152608945340, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152608945340, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152615028979, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152615028980, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152615028980, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152615235188, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152615235189, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821152615235189, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821152624510899, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152624510900, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152624510900, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152630353920, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152630353921, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821152630353921, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821152636176400, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821152636176400, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821152636176415, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152643988422, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152643988423, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821152643988423, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821152689430425, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152689430426, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821152689430426, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821152695261960, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152695261960, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152695261975, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152695954910, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152695954911, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821152695954911, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821152730344180, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152730344181, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152730344181, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152803885130, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152803885131, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152803885131, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152837185632, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152837185632, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152837185647, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152863107201, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152863107202, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821152863107202, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821152873442994, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152873442995, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152873442995, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152892842142, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152892842143, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821152892842143, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821152904276737, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152904276738, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821152904276738, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821152929252091, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152929252092, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821152929252092, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821152936358984, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821152936358984, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821152936358999, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152937211867, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152937211868, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152937211868, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821152953484006, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152953484007, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821152953484007, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821152981729381, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821152981729382, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821152981729382, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821153013901500, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153013901501, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821153013901501, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821153037678144, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821153037678144, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821153037678159, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153043933128, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821153043933128, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821153043933143, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153089605997, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153089605998, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821153089605998, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821153099461488, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153099461489, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821153099461489, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821153099889339, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153099889340, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821153099889340, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821153129974644, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153129974645, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821153129974645, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821153157349200, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821153157349200, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821153157349215, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153174431382, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153174431383, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821153174431383, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821153221455126, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153221455127, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821153221455127, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821153251571897, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153251571898, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821153251571898, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821153281816816, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821153281816816, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821153281816831, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153290302418, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153290302419, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821153290302419, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821153325116423, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153325116472, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821153325116472, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821153331303592, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821153331303592, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821153331303607, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153366232137, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153366232138, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821153366232138, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821153369712711, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153369712760, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821153369712760, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821153381075987, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153381075988, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821153381075988, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821153397254835, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153397254836, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.46000034 + objectReference: {fileID: 0} + - target: {fileID: 987821153397254836, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020001342 + objectReference: {fileID: 0} + - target: {fileID: 987821153403533594, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153403533595, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821153403533595, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821153434012424, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821153434012424, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} + - target: {fileID: 987821153434012439, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153464060042, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153464060043, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821153464060043, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821153498517648, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153498517649, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45 + objectReference: {fileID: 0} + - target: {fileID: 987821153498517649, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0019998846 + objectReference: {fileID: 0} + - target: {fileID: 987821153519065590, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987821153519065591, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.45400077 + objectReference: {fileID: 0} + - target: {fileID: 987821153519065591, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.0020000117 + objectReference: {fileID: 0} - target: {fileID: 1008795241919538951, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} propertyPath: m_Enabled @@ -104551,6 +110013,11 @@ PrefabInstance: propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} + - target: {fileID: 5529927268869059891, guid: 3798e4d0b0b60c74d93f2407fb813c22, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 5531692941719423830, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} propertyPath: m_Enabled @@ -105564,6 +111031,310 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!23 &996040040469598307 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 760397113021607748} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: f63d38aa595b8f84f81be292eb3df3b2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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 &998910728684874331 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3294512487480099914} + m_Mesh: {fileID: -2641816765375938631, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} +--- !u!33 &1012271914439240116 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5776162854793565723} + m_Mesh: {fileID: -2628482395200241503, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!1 &1012856552372630462 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 97321546540671331} + - component: {fileID: 8127635679764509425} + - component: {fileID: 6090293816297984129} + m_Layer: 0 + m_Name: Box062 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1013735849623928965 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8038241483963907492} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 5d67d5e43daa72d4fade2fe649b7271d, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!4 &1028261108207327675 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8035486276462600611} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.038049847, y: 0.102432564, z: -0.13957444} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5119118449912238514} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1028563349922384177 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7195010629667561141} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 061e8e56588ff73488006cdffc008f32, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, type: 2} + - {fileID: 2100000, guid: e048a6d53e4bbe648858ad0a455419c6, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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!4 &1032009697312391592 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2335914922422598942} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.20984536, y: 0.108672604, z: -0.013490637} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1033135104818431776 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1592636835949095711} + - component: {fileID: 2292771395854434256} + - component: {fileID: 6938349960424971382} + m_Layer: 0 + m_Name: Object007 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1036323279887022360 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6969270958239123771} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 256f4f5dccef8754b9365a690d0bfac0, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 10ac57f42847b114584025b79f149fd9, 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 &1048763048672772361 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7570714709245118835} + m_Mesh: {fileID: -7647463442239531939, guid: 38d78f271938d6c4686b952b3257872c, type: 3} +--- !u!4 &1058227826590483219 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1413212892745064102} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.24179916, y: 0.0316732, z: -0.17271423} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5119118449912238514} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!222 &1058590107112905002 CanvasRenderer: m_ObjectHideFlags: 0 @@ -105608,6 +111379,344 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!4 &1071332537007833359 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 421916328940683477} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.0027962625, z: -0.35000005} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5119118449912238514} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1075151474346439793 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 29896753895660712} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 53a6ea32b66877f4f811139c51424123, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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 &1078119531486041078 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2718340434523184503} + m_Mesh: {fileID: 9186633843763367028, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!1 &1081817305117922281 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2503965741660084215} + - component: {fileID: 8905644728056852330} + - component: {fileID: 3292893138213174089} + m_Layer: 0 + m_Name: Box145 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &1092531668201930383 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3653515867933643585} + m_Mesh: {fileID: 2871469715313346890, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!1 &1105352306298952564 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2409348233752192962} + - component: {fileID: 8126313815043881411} + - component: {fileID: 276341818442952431} + m_Layer: 0 + m_Name: Box005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1107752677212173194 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2180232889755562117} + 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} + 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!23 &1109874456567790187 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9044312848110708135} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: a59859105095c004c8e8ad289a6a9549, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 204d0d4218e32054e81e5f600dcd7c01, 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!4 &1130055290320874584 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4164943118143414483} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.10083899, y: 0.24802452, z: -0.35262305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1134479707872434819 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8091439188677783062} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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 &1135349362318924566 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2911860466242301174} + m_Mesh: {fileID: 7234011661977481624, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} +--- !u!33 &1148159683615181553 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7462243033034760667} + m_Mesh: {fileID: 4154864533425439726, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &1150969056056502408 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4567580947252627984} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!114 &1152018393223809629 MonoBehaviour: m_ObjectHideFlags: 0 @@ -105638,6 +111747,78 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!33 &1155174812454418762 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7666969399970483} + m_Mesh: {fileID: -5798157943916587367, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} +--- !u!23 &1155284832102532552 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1391357148070008604} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 2f7ae9a990b9e4942b084ce4d337db78, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!4 &1174097501244739985 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2329738960836366798} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.1807633, y: 0.11099168, z: -0.25641993} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4433488523220862567} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &1175681072998445384 Transform: m_ObjectHideFlags: 0 @@ -105837,6 +112018,431 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &1185302680108360951 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3492636018857252809} + - component: {fileID: 3121291412465220888} + - component: {fileID: 147257434618549882} + m_Layer: 0 + m_Name: Object004 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1191444246162740537 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3663506206272232749} + - component: {fileID: 1992705987505168107} + - component: {fileID: 4066622067138196250} + m_Layer: 0 + m_Name: Box068 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1197503844742078691 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3600204538948686830} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 7b45dc31b7c7d754bbc4f38e07733858, type: 2} + - {fileID: 2100000, guid: ccb625940791dc442ba810b2d86f3596, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, type: 2} + - {fileID: 2100000, guid: 5ec7a4c1a7a6a2e4191a7adc8fe1fd50, 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!1 &1208700899746765936 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6086736478778161918} + - component: {fileID: 5824220666716279711} + - component: {fileID: 1700662010363700055} + m_Layer: 0 + m_Name: Box038 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &1211043424239055640 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5959208433255675803} + m_Mesh: {fileID: 4964871738182230721, guid: e6c96015a3cd934408878fc6905a1c85, type: 3} +--- !u!4 &1212578399471534632 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1988375577893034130} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6917768707092058860} + - {fileID: 3660117560656536262} + - {fileID: 4248256240266574290} + - {fileID: 7074597862635141862} + - {fileID: 8616990698545424226} + - {fileID: 2935928812515994341} + - {fileID: 5649115237659343450} + - {fileID: 6446522587620495497} + m_Father: {fileID: 1023018615} + m_RootOrder: 22 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1215488037454048735 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7351981880541388576} + m_Mesh: {fileID: 7525366566605188955, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!4 &1215812462017393483 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4921251967180961971} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.012468845} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3659111854849921957} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1222424795565411576 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3503271615980052326} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.19086896, y: 0.24984208, z: -0.28685236} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 30 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1227893999386976092 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2649767556843636822} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.0475419, y: 0.225, z: -0.25532228} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1228478719733007785 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2383442872646485494} + - component: {fileID: 363649218912243454} + - component: {fileID: 7096417218801900709} + m_Layer: 0 + m_Name: Object012 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &1235494535014643471 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8709545354225448014} + m_Mesh: {fileID: 1247351977123226646, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} +--- !u!1 &1244369498120701858 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7100848580942899351} + - component: {fileID: 4380363977431617427} + - component: {fileID: 4515553412035576338} + m_Layer: 0 + m_Name: Object002 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1247032231426573906 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8039506443400454849} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 7b45dc31b7c7d754bbc4f38e07733858, type: 2} + - {fileID: 2100000, guid: 6875b4493ed788d4789042aba4880050, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 3e633f3da7f6c1c46a05ea105f130727, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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!4 &1252060022404311450 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3834832403972531672} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.027531004, y: 0.15057148, z: -0.062137723} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1258470438842689168 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4489650953821028393} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 806a8597a82ff9a448269dbf812faef4, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!23 &1265933365656187365 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2996582998464512050} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 806a8597a82ff9a448269dbf812faef4, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &1267570098244884285 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1935563662030491015} + m_Layer: 0 + m_Name: 7 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!33 &1277903893155089210 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5371065394825024811} + m_Mesh: {fileID: 4435042010609528433, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} +--- !u!33 &1280073975712672630 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4297769914727027736} + m_Mesh: {fileID: -3526922212205323383, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} --- !u!1 &1281822439062867816 GameObject: m_ObjectHideFlags: 0 @@ -105861,12 +112467,173 @@ Transform: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &1293103158491988637 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1925806522393794599} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6016534104643877689} + - {fileID: 3740994163363275379} + - {fileID: 4311388860168092007} + m_Father: {fileID: 1023018615} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1294520837287486128 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4368727256435058790} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!1 &1300198234708068701 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2069739961643032961} + - component: {fileID: 93940808810515852} + - component: {fileID: 4848915385551373861} + m_Layer: 0 + m_Name: Object036 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &1313960197208848138 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5920541432860883173} + m_Mesh: {fileID: 4236268024495968267, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} +--- !u!33 &1317848154642187113 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4835932489331936413} + m_Mesh: {fileID: 4874721120890998788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!4 &1319419804534128110 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9044312848110708135} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.17524716, y: 0.18, z: -0.028926678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1328302262890151107 stripped GameObject: m_CorrespondingSourceObject: {fileID: 3865500228664392230, guid: 32f862715729d804f8c707be223df6e8, type: 3} m_PrefabInstance: {fileID: 2867121862218958565} m_PrefabAsset: {fileID: 0} +--- !u!23 &1329936067608133281 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7829693187047217714} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, 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!1 &1332666220957155833 GameObject: m_ObjectHideFlags: 0 @@ -140807,6 +147574,62 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1332666223096992165} m_CullTransparentMesh: 1 +--- !u!4 &1334051829595180985 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7462243033034760667} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.41016325, y: 0.024925759, z: 0.0050615966} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5236682523249791853} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1337263713969672847 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1531223198323428115} + m_Mesh: {fileID: 8146333293907604950, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!4 &1340536388673506822 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2015602938807185740} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.0011672676, y: 0.46563628, z: -0.528} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7799699611165651300} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1344852968344602713 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8978821300702096565} + - component: {fileID: 7101706771214079174} + - component: {fileID: 2651925402522531646} + m_Layer: 0 + m_Name: Box029 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!4 &1347360972952903899 stripped Transform: m_CorrespondingSourceObject: {fileID: 2235962106631180983, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -140819,12 +147642,492 @@ Transform: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &1357196648834463246 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 90402177600101642} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: -0.08} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7906200256174459245} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1365074971643505568 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 457596257219084680} + - component: {fileID: 5668426043425954524} + - component: {fileID: 6693656790493834275} + m_Layer: 0 + m_Name: Box013 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &1367748643712179174 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8692419208758522048} + m_Mesh: {fileID: -2470049803449725478, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} +--- !u!23 &1373056841944308930 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6242044621431328335} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!23 &1373172516842510435 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6970627061541678678} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 5810c1fb761a3b54bb6ed561512ebb66, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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 &1385617514869535470 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7990303245099370759} + m_Mesh: {fileID: -75171668026845272, guid: 837e03a60f341e14da656441a8653493, type: 3} +--- !u!33 &1386404705240221440 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2495827084012684228} + m_Mesh: {fileID: 5060444177187149915, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} +--- !u!1 &1391357148070008604 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3399353993886787272} + - component: {fileID: 1853491863144823807} + - component: {fileID: 1155284832102532552} + m_Layer: 0 + m_Name: Object003 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!4 &1393201380950099042 stripped Transform: m_CorrespondingSourceObject: {fileID: 2225015008976451086, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &1402957500731881124 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6680023669832168807} + - component: {fileID: 7059313986199909862} + - component: {fileID: 2495395039605343847} + m_Layer: 0 + m_Name: Box008 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1413212892745064102 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1058227826590483219} + - component: {fileID: 8359205540630451932} + - component: {fileID: 2918693214727392244} + m_Layer: 0 + m_Name: Object008 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1415497651488806928 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3660518367769324317} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &1419307612873256394 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3597773053211993566} + - component: {fileID: 1773639189425677848} + - component: {fileID: 4275380333231115241} + m_Layer: 0 + m_Name: Box068 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1422579493519046399 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5768971810611009994} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.17625315, y: 0.18, z: -0.028926678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1427893951539682134 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4285533771430438351} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!4 &1435435836830980166 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 50989320254078809} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.24885742, y: 0.24802452, z: -0.52986926} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1439364942078395057 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3294512487480099914} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: ab21ec9e6cb600643865a0c21468c1b7, 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!1 &1441940722142240043 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6187779589399219151} + - component: {fileID: 7687227794965618541} + - component: {fileID: 3558711529311474471} + m_Layer: 0 + m_Name: Box060 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1457799320611601031 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7654846095316805277} + - component: {fileID: 633649278047695158} + - component: {fileID: 5300260420462798199} + m_Layer: 0 + m_Name: Box103 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1465742496510121824 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9077056872123818853} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!224 &1471599136347852340 RectTransform: m_ObjectHideFlags: 0 @@ -140846,18 +148149,366 @@ RectTransform: m_AnchoredPosition: {x: -100, y: 0} m_SizeDelta: {x: 100, y: 100} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1483904437908715797 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5570360006201956636} + - component: {fileID: 5786035959487201974} + - component: {fileID: 5276871491453221500} + m_Layer: 0 + m_Name: Box012 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1484014329513394604 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6571380662821377258} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.3311568, z: -0.014463335} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1485752535686274538 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 497180833977954151} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!1 &1496811054287787412 stripped GameObject: m_CorrespondingSourceObject: {fileID: 1833193351006578680, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &1502536523695269206 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4709865978187784193} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.27805144, y: 0.24802452, z: -0.35262305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1517453061348020693 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7338112614764792061} + m_Mesh: {fileID: -6558347715830034149, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} +--- !u!1 &1520892183057875682 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3823578161216532956} + - component: {fileID: 3330781225585433357} + - component: {fileID: 532383784897704047} + m_Layer: 0 + m_Name: Object004 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!4 &1523663623729019888 stripped Transform: m_CorrespondingSourceObject: {fileID: 1770004696747215260, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &1531223198323428115 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4775775807000466203} + - component: {fileID: 1337263713969672847} + - component: {fileID: 4313031994326664025} + m_Layer: 0 + m_Name: Object059 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &1532860401059836848 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2117728126843244856} + m_Mesh: {fileID: 4637168796452636545, guid: 23a7bcbe8f6a3784cbbd9ba50afeb37b, type: 3} +--- !u!23 &1541213860666329468 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8898246136836739626} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 8f90791e5f8f9f04d9bc0ad29fb6a2b7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!1 &1574148342622106845 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2531807946754435201} + - component: {fileID: 4678966549184639614} + - component: {fileID: 3159659134172036896} + m_Layer: 0 + m_Name: Box065 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &1583087275198825402 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 324154674604079946} + m_Mesh: {fileID: 7733717212360752527, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!1 &1584256114423618114 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3888638373423753596} + - component: {fileID: 3377255567795930029} + - component: {fileID: 541641213839796431} + m_Layer: 0 + m_Name: Object004 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1588130940586263175 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256850661230170908} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.16229808, y: 0.225, z: -0.31184724} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7906200256174459245} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1590861007285837843 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 801911843903028646} + - component: {fileID: 8182687774308690025} + - component: {fileID: 3246578599162279233} + m_Layer: 0 + m_Name: Object008 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1592636835949095711 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1033135104818431776} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.062375322, y: 0.19447754, z: -0.23659207} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5236682523249791853} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1607973389200186397 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7943155150887700513} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: e33e8e143de68ea419d74e4d6b23e139, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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 &1609443317488448819 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7926761718242860202} + m_Mesh: {fileID: 3376180099170138459, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} --- !u!1 &1612474542308966589 GameObject: m_ObjectHideFlags: 0 @@ -140882,6 +148533,143 @@ Transform: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &1617103251665617851 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6119991776310192672} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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 &1626759944913143507 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3980650189557247136} + m_Mesh: {fileID: 3769003648055391289, guid: 23a7bcbe8f6a3784cbbd9ba50afeb37b, type: 3} +--- !u!4 &1627972740210597483 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5920541432860883173} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.043871485, y: 0.42568934, z: -0.26399994} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 915489601676210998} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1631360652765899204 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5833495022044831191} + m_Mesh: {fileID: 690106047850165013, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!1 &1638635161337710702 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 150189800865800774} + - component: {fileID: 5397118847613647122} + - component: {fileID: 6388502211825864685} + m_Layer: 0 + m_Name: Box013 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1641481940470534941 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4779187036017809637} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.012468845} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3809797924624086003} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1649099664867544110 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2312722732450107506} + - component: {fileID: 4888023745873185421} + - component: {fileID: 2946451221235599315} + m_Layer: 0 + m_Name: Box065 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &1658002087823160968 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4404351256488721247} + m_Mesh: {fileID: -612376834313925032, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} --- !u!222 &1671501926496883240 CanvasRenderer: m_ObjectHideFlags: 0 @@ -140890,6 +148678,119 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4699644599146595077} m_CullTransparentMesh: 1 +--- !u!1 &1672084382166177130 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6410900087146649257} + - component: {fileID: 7330621182033385000} + - component: {fileID: 2804982917633893801} + m_Layer: 0 + m_Name: Box008 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1672371826155711529 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2804713048647195882} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 5c8cedf3f5a458546a2bf464a001dc24, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 10ac57f42847b114584025b79f149fd9, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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!1 &1673216496195773912 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6261639809503753020} + - component: {fileID: 7607771679083243422} + - component: {fileID: 3628121999011048404} + m_Layer: 0 + m_Name: Box060 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1677038180369880751 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7344490264740789437} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00000011920929, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 915489601676210998} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1678654236555137012 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5511872093928264165} + m_Mesh: {fileID: 4435042010609528433, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} --- !u!222 &1689398217209251324 CanvasRenderer: m_ObjectHideFlags: 0 @@ -140898,24 +148799,276 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4889408967884658717} m_CullTransparentMesh: 1 +--- !u!23 &1700662010363700055 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1208700899746765936} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: a59859105095c004c8e8ad289a6a9549, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!4 &1702868056237489565 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7236833969747382952} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.19917503, y: 0.0010635629, z: -0.26500002} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4433488523220862567} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &1703509228846362467 stripped Transform: m_CorrespondingSourceObject: {fileID: 1878395240219794703, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &1704047503546810776 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2084654811453381410} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6334992391519182152} + - {fileID: 3872345861271232886} + - {fileID: 4432343607247141474} + - {fileID: 7302598657818655062} + - {fileID: 8134553084903400658} + - {fileID: 3443156117474322773} + m_Father: {fileID: 1023018615} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1713827556576725034 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5609590798881525557} + - component: {fileID: 5245200419653505679} + - component: {fileID: 4417916362088306826} + m_Layer: 0 + m_Name: Object009 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1741042420636415517 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4944263795593830235} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.00095402077, y: 0.18, z: -0.028926678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1741859753654499486 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9144075518541614738} + m_Mesh: {fileID: -3292925553009838691, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!1 &1748763003743417433 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2541029349415862003} + - component: {fileID: 1955922891259136657} + - component: {fileID: 7414163035411487541} + m_Layer: 0 + m_Name: Box028 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &1751367639346992380 stripped GameObject: m_CorrespondingSourceObject: {fileID: 1583975745436067472, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &1757281076158191718 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3687359498631763687} + m_Mesh: {fileID: 9186633843763367028, guid: 837e03a60f341e14da656441a8653493, type: 3} +--- !u!4 &1764086904773042888 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7195010629667561141} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.10173249, y: 0.01793683, z: -0.13957444} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5119118449912238514} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1766889125570508687 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4745370721189362213} + m_Mesh: {fileID: -2160783174947531112, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} --- !u!1 &1773530164434627104 stripped GameObject: m_CorrespondingSourceObject: {fileID: 1524937223650777164, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &1773639189425677848 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1419307612873256394} + m_Mesh: {fileID: -8084387392185104470, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!4 &1792681088523233375 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7723473993169897322} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.03692468, y: 0.017722623, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3659111854849921957} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1803036089155073398 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4947624571732031007} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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 &1812694282416425213 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3691533204743783722} + m_Mesh: {fileID: -612376834313925032, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} --- !u!224 &1815446187614958777 RectTransform: m_ObjectHideFlags: 0 @@ -140936,6 +149089,230 @@ RectTransform: m_AnchoredPosition: {x: 322, y: -10.999986} m_SizeDelta: {x: 444.587, y: 187.646} m_Pivot: {x: 0.5, y: 0.5} +--- !u!33 &1830954555092640237 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3351215273339291299} + m_Mesh: {fileID: 6975212812562875068, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!33 &1839390550845390200 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2025624515875773443} + m_Mesh: {fileID: 3868671361854562809, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} +--- !u!1 &1844020612036827745 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6712900560902044911} + - component: {fileID: 6449898197827523982} + - component: {fileID: 2218193227785643334} + m_Layer: 0 + m_Name: Box038 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1848808488884620384 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7462243033034760667} + 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: cf5586d329d32c54eb0957902257f300, 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 &1853491863144823807 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1391357148070008604} + m_Mesh: {fileID: -3531946766418785785, guid: 38d78f271938d6c4686b952b3257872c, type: 3} +--- !u!4 &1861661097560246537 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4616177761170974976} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.25245005, y: 0.010946363, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4116396921372432760} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1862551481037377731 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7210446100921187027} + m_Mesh: {fileID: 4733244715438518452, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} +--- !u!23 &1868713662942153127 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4919009123041725134} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 5d67d5e43daa72d4fade2fe649b7271d, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &1877332301342921547 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4312864226916685589} + - component: {fileID: 7986841425583174462} + - component: {fileID: 798164884340707396} + m_Layer: 0 + m_Name: Box016 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &1881136779173978756 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8996671156534724777} + m_Mesh: {fileID: 8604484703040581089, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} +--- !u!23 &1883157054277098686 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8376069948090124264} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!1 &1883446887699023436 stripped GameObject: m_CorrespondingSourceObject: {fileID: 1699593110255105056, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -140954,12 +149331,411 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &1899046328673228957 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4202311342512024483} + - component: {fileID: 2411888786142773618} + - component: {fileID: 586285754926754320} + m_Layer: 0 + m_Name: Object004 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1908755699730042670 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2282661990982418754} + - component: {fileID: 241516857293519884} + - component: {fileID: 2625669262417171654} + m_Layer: 0 + m_Name: Object020 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &1908908589487772000 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6641317627745052019} + m_Mesh: {fileID: 690106047850165013, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} --- !u!1 &1909777941985533085 stripped GameObject: m_CorrespondingSourceObject: {fileID: 1672408801120481009, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &1925806522393794599 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1293103158491988637} + m_Layer: 0 + m_Name: 81 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!33 &1935171533878224188 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8939927056681440048} + m_Mesh: {fileID: -3292925553009838691, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} +--- !u!4 &1935563662030491015 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1267570098244884285} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6256545326919243085} + - {fileID: 4090439179655277929} + - {fileID: 3529599239036843645} + - {fileID: 7503406004146648393} + - {fileID: 9050759873008920781} + - {fileID: 2500046412355659082} + m_Father: {fileID: 1023018615} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1946547943269126563 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3221274568908329956} + 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: 3274929075364713951, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 1164559979738526386, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -1152147162816932204, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -5309146791756261813, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 1196480866727828669, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 9147106888433294362, guid: 485c2b00c505121468e2d20910842a74, type: 3} + 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 &1955922891259136657 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1748763003743417433} + m_Mesh: {fileID: 4442130670313257827, guid: 837e03a60f341e14da656441a8653493, type: 3} +--- !u!4 &1966379677842855408 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4544626606887279026} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.37922385, y: 0.16772969, z: 0.011470452} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5236682523249791853} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1975879033588529048 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4500672022278746739} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &1976285726914804680 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7539736316033799421} + - component: {fileID: 3955255340156859385} + - component: {fileID: 3784072576105561720} + m_Layer: 0 + m_Name: Object002 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1988375577893034130 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1212578399471534632} + m_Layer: 0 + m_Name: 92 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!33 &1992705987505168107 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191444246162740537} + m_Mesh: {fileID: -8084387392185104470, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} +--- !u!33 &1999590228285099900 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4818932401942037206} + m_Mesh: {fileID: -2160783174947531112, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!1 &2015602938807185740 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1340536388673506822} + - component: {fileID: 7310479538428774512} + - component: {fileID: 4128722581690996400} + m_Layer: 0 + m_Name: Box222 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &2025624515875773443 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4124703002655843741} + - component: {fileID: 1839390550845390200} + - component: {fileID: 5191697127396671897} + m_Layer: 0 + m_Name: Box014 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2032215047162042229 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 324154674604079946} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.14140135, y: 0.108672604, z: -0.013490637} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2033957675191262329 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 74652991817908684} + - component: {fileID: 8910214905993843715} + - component: {fileID: 2821474492122745131} + m_Layer: 0 + m_Name: Object008 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2059429224419488758 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3653515867933643585} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.062375322, y: 0.015885482, z: -0.24493845} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5236682523249791853} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2063849948259463078 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7156412003949927219} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!4 &2069739961643032961 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1300198234708068701} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.22661, y: 0.6944689, z: -0.38488308} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2073144592487038528 stripped GameObject: m_CorrespondingSourceObject: {fileID: 2073144591439938606, guid: 0c742c3c63315cf46ae653a665155f5d, @@ -140972,12 +149748,143 @@ Animator: type: 3} m_PrefabInstance: {fileID: 4701058539521139833} m_PrefabAsset: {fileID: 0} +--- !u!4 &2073813873393652818 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 503834029184875071} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.04004389, y: 0.077693306, z: -0.13957441} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5273522604940259271} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2077520418800532086 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5672769596110580889} + m_Mesh: {fileID: 3463139692731221919, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} --- !u!4 &2079920116917111643 stripped Transform: m_CorrespondingSourceObject: {fileID: 1254303389368580407, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &2080469558622543634 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 327535401730976238} + 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: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, 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!23 &2082608265012794755 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 503834029184875071} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!4 &2083426325351712907 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6989510188142544756} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.07502803, y: 0.26294157, z: -0.06132862} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7799699611165651300} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!224 &2083475908654518545 RectTransform: m_ObjectHideFlags: 0 @@ -140998,6 +149905,203 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &2084654811453381410 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1704047503546810776} + m_Layer: 0 + m_Name: 6 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!33 &2085851303033892396 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8806915233583601696} + m_Mesh: {fileID: -3292925553009838691, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} +--- !u!23 &2089988575344995664 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 830007329053346260} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 383fafd25d521744a8a6f2b358485b65, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!23 &2115582647648042004 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8125601843354545040} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 061e8e56588ff73488006cdffc008f32, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, type: 2} + - {fileID: 2100000, guid: e048a6d53e4bbe648858ad0a455419c6, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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!4 &2116447565378137246 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8978479936146953350} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.038049847, y: 0.07629605, z: -0.13957438} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6057619421335938199} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2117728126843244856 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8152742917120161547} + - component: {fileID: 1532860401059836848} + - component: {fileID: 6706073935951885310} + m_Layer: 0 + m_Name: Object1666 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2122173463145584150 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4947624571732031007} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.000000014901161, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4433488523220862567} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &2122753853264316414 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7722597679654154380} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.1624263, y: 0.24848777, z: -0.31173322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 21 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &2124544961426254263 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3854717024918951099} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.046691895, y: 0.0021973178, z: -0.31663665} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!224 &2126159575654832234 RectTransform: m_ObjectHideFlags: 0 @@ -146050,7 +155154,7 @@ MonoBehaviour: - {fileID: 2126159577123948463} vectors_tall: [] lineWidth: 0.1 - lineColor: {r: 0, g: 0.7433629, b: 1, a: 1} + lineColor: {r: 1, g: 1, b: 1, a: 1} --- !u!224 &2126159576915401761 RectTransform: m_ObjectHideFlags: 0 @@ -150394,6 +159498,149 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 0 +--- !u!4 &2132968361617238727 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4919009123041725134} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.25245005, y: 0.010946363, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4425983708511861430} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2135586553861220969 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4616177761170974976} + 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} + 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!4 &2140805518179612214 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 37861116822743939} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.24179916, y: 0.023587491, z: -0.17271417} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6057619421335938199} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2146940570939703622 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8262089993959180131} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!1 &2148622748077566001 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4205630655935072889} + - component: {fileID: 7861444469950014389} + - component: {fileID: 8675157868220306685} + m_Layer: 0 + m_Name: Box010 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!224 &2150966561791835613 RectTransform: m_ObjectHideFlags: 0 @@ -150415,6 +159662,24 @@ RectTransform: m_AnchoredPosition: {x: -200, y: 0} m_SizeDelta: {x: 100, y: 100} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &2153128574984827968 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5183796066320692063} + - component: {fileID: 4819836691404812005} + - component: {fileID: 3991976615492347104} + m_Layer: 0 + m_Name: Object009 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!222 &2157288199436718297 CanvasRenderer: m_ObjectHideFlags: 0 @@ -150423,24 +159688,902 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3808968599354310722} m_CullTransparentMesh: 1 +--- !u!1 &2163254518007356893 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7911355440833147624} + - component: {fileID: 3714240604708541932} + - component: {fileID: 3597241498626267245} + m_Layer: 0 + m_Name: Object002 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &2169664814854406503 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3971489452771178443} + m_Mesh: {fileID: 3250715216574208562, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} +--- !u!1 &2180232889755562117 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4581988909083423963} + - component: {fileID: 7681685756261945584} + - component: {fileID: 1107752677212173194} + m_Layer: 0 + m_Name: Box016 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2184018882917744397 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7500346433907542143} + m_LocalRotation: {x: 0.00000009974802, y: 0.00000009974802, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2962153, y: 0.38048548, z: -0.15037024} + m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 21 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2187596779818834088 stripped GameObject: m_CorrespondingSourceObject: {fileID: 1436249934273358532, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &2191704174958759386 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2734602758282253015} + m_Mesh: {fileID: -3243264717552843444, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!4 &2194490710742758063 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2456603828602258299} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.27280158, y: 0.225, z: -0.25532228} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2217289653029356006 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3945214733487930602} + - component: {fileID: 6382190282940757493} + - component: {fileID: 4936659889202521757} + m_Layer: 0 + m_Name: Box003 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &2218193227785643334 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844020612036827745} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: f63d38aa595b8f84f81be292eb3df3b2, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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!23 &2223260988966793527 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 90402177600101642} + 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: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: a115837465b4851459f210b575ad8575, type: 2} + - {fileID: 2100000, guid: 181fb73bb64dc9346b4061ee5e873b40, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!4 &2231595381588871177 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7869920999005824828} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00032439828, y: 0.019212604, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3809797924624086003} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2243586039212728289 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4368727256435058790} + m_Mesh: {fileID: -6891480930148778616, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!1 &2249942241251644645 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8636877618090013723} + - component: {fileID: 7544667509076338035} + - component: {fileID: 484879995438316642} + m_Layer: 0 + m_Name: Box015 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &2259898823169762517 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3971489452771178443} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!4 &2278331528479237769 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5407380718736813425} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.24411973, y: 0.0010635629, z: -0.26500002} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4433488523220862567} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &2282661990982418754 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1908755699730042670} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.20984536, y: 0.108672604, z: -0.013490637} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2292771395854434256 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1033135104818431776} + m_Mesh: {fileID: 7733717212360752527, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!33 &2310980860367096344 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6882405772256995503} + m_Mesh: {fileID: 6715375062900545627, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} +--- !u!33 &2311560486842106994 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7728615043300714149} + m_Mesh: {fileID: 5092484024584187340, guid: 837e03a60f341e14da656441a8653493, type: 3} +--- !u!4 &2312722732450107506 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1649099664867544110} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.059245948, y: 0.24848777, z: -0.31173322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2315072564869115919 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3650169452652271978} + - component: {fileID: 737961451637358040} + - component: {fileID: 7233811109609107627} + m_Layer: 0 + m_Name: Box026 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &2321071950392602657 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3221439188117030330} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: b2867f43f0b3e6945971e057c097f5ed, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &2321075858859451330 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2327377872884331768} + - component: {fileID: 826729438480330051} + - component: {fileID: 3959395552368702361} + m_Layer: 0 + m_Name: Object005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2326075586102099343 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2569361681833378577} + m_LocalRotation: {x: 0.00000009974802, y: 0.00000009974802, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.20966078, y: 0.38048548, z: -0.15037024} + m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &2327377872884331768 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2321075858859451330} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.24179916, y: 0.090877935, z: -0.17271423} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5119118449912238514} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2329738960836366798 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1174097501244739985} + - component: {fileID: 3770492379019532953} + - component: {fileID: 5990634139017873602} + m_Layer: 0 + m_Name: Object012 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &2331181083298501754 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3561635671931183008} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 14df8ad93ed5b5746b8a7d75b533df7e, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &2335914922422598942 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1032009697312391592} + - component: {fileID: 6916299164009226153} + - component: {fileID: 3235859720190511237} + m_Layer: 0 + m_Name: Box005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &2337676405317397675 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9033540856855995764} + m_Mesh: {fileID: -4418614455616001024, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!1 &2339494001296718446 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4809293693381046559} + - component: {fileID: 7420383782904945930} + - component: {fileID: 5679117880093813222} + m_Layer: 0 + m_Name: Box042 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &2346329185778313887 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5661099046580466121} + 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: 468ad295664494e4d82ea298061373c6, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &2347092483185982434 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2557298639973451132} + - component: {fileID: 4827196310252780804} + - component: {fileID: 8849663899386191805} + m_Layer: 0 + m_Name: Box079 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2354153570544086104 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2364739281792924514} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00032439828, y: 0.11360714, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5183046070246721810} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &2358247032580801500 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6013860696704019689} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.04968287, y: 0.019212604, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 764778530807871526} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2364739281792924514 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2354153570544086104} + - component: {fileID: 837108644273911267} + - component: {fileID: 3897226308200049465} + m_Layer: 0 + m_Name: Object005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!4 &2371443752860375216 stripped Transform: m_CorrespondingSourceObject: {fileID: 3268625545912822492, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &2378828584065714036 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5987472825976099890} + 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: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 53a6ea32b66877f4f811139c51424123, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!4 &2381750835726700635 stripped Transform: m_CorrespondingSourceObject: {fileID: 3222571682037473847, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &2382568841181269139 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8157641921699241316} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.18392739, y: 0.26294157, z: -0.06132862} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7799699611165651300} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &2383442872646485494 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1228478719733007785} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.016818006, y: 0.225, z: -0.25532228} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2395739323669830007 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8809361382858900515} + m_Mesh: {fileID: -2639241166356525208, guid: fcc65de0395699040be81595ac8a1eda, type: 3} +--- !u!33 &2399168716002235551 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8655365370378813100} + m_Mesh: {fileID: 1414275290710141465, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} +--- !u!4 &2399464491574361398 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8463972177876769839} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.04541002, y: 0.6944689, z: -0.31237373} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2400681048653713839 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2456603828602258299} + 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6238916332166239650, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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!4 &2409348233752192962 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105352306298952564} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.21056074, y: 0.225, z: -0.31184724} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7906200256174459245} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2411888786142773618 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1899046328673228957} + m_Mesh: {fileID: -8113768720884857512, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} --- !u!1 &2418863712529485287 stripped GameObject: m_CorrespondingSourceObject: {fileID: 3180937312704823179, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -150455,12 +160598,103 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 5769346755244574362} m_CullTransparentMesh: 1 +--- !u!4 &2428071423387151439 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3691533204743783722} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.10173249, y: 0.10243306, z: -0.13957444} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5119118449912238514} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2442673323378080289 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5265529492363797614} + 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: 25a69d60185c44c43b55a219d27544b5, type: 2} + - {fileID: 2100000, guid: 6e7c5f76e9b106145b3f681c95bd378c, 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!4 &2450313377476910973 stripped Transform: m_CorrespondingSourceObject: {fileID: 3437426369994124561, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &2456603828602258299 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2194490710742758063} + - component: {fileID: 2945467239753117592} + - component: {fileID: 2400681048653713839} + m_Layer: 0 + m_Name: Object003 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2471743200016686718 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5873483391673545035} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.6975736, z: -0.58943766} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!224 &2479591556067015510 RectTransform: m_ObjectHideFlags: 0 @@ -150481,12 +160715,668 @@ RectTransform: m_AnchoredPosition: {x: 393.04486, y: -11} m_SizeDelta: {x: 586.677, y: 187.646} m_Pivot: {x: 0.5, y: 0.5} +--- !u!33 &2486497838140722879 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4921251967180961971} + m_Mesh: {fileID: -3292925553009838691, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} +--- !u!23 &2495395039605343847 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1402957500731881124} + 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} + 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!1 &2495827084012684228 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3546130496742648000} + - component: {fileID: 1386404705240221440} + - component: {fileID: 4411634105276428281} + m_Layer: 0 + m_Name: Box001 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2500046412355659082 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8590718855736625212} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00032439828, y: 0.08114039, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1935563662030491015} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &2503965741660084215 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1081817305117922281} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.18950972, y: 0.24802452, z: -0.52986926} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 21 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2504240902744681565 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4297769914727027736} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!4 &2524298590168888646 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4285533771430438351} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.25604838, y: 0.24984208, z: -0.28685233} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 37 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2527656021680327082 stripped GameObject: m_CorrespondingSourceObject: {fileID: 3360102967310777286, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &2531807946754435201 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574148342622106845} + m_LocalRotation: {x: 0.00000009974802, y: 0.00000009974802, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.16602586, y: 0.38048548, z: -0.15037024} + m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2533697272779956768 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3999633067746330632} + - component: {fileID: 9183529302988198748} + - component: {fileID: 7871339045962294691} + m_Layer: 0 + m_Name: Box013 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2541029349415862003 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1748763003743417433} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.10146063, y: 0.120413005, z: -0.13957438} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6057619421335938199} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2549677943512933592 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9151679755582334220} + 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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!4 &2557298639973451132 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2347092483185982434} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.24704629, y: 0.24848777, z: -0.31482798} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2569361681833378577 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2326075586102099343} + - component: {fileID: 4739789621302822391} + - component: {fileID: 8785091954898954062} + m_Layer: 0 + m_Name: Box079 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &2577546862159381258 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8655365370378813100} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 383fafd25d521744a8a6f2b358485b65, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 5c8cedf3f5a458546a2bf464a001dc24, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, 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 &2583077843571017030 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4919495509416643900} + m_Mesh: {fileID: -7647463442239531939, guid: 1e0b029320fe5914d98621193276e076, type: 3} +--- !u!4 &2590769006625442279 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4306481230123522608} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.17569539, y: 0.108672604, z: -0.013490637} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2593290596200521910 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6264946460797963988} + - component: {fileID: 5448541536532941724} + - component: {fileID: 6762795893356678413} + m_Layer: 0 + m_Name: Object015 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &2595791147971330552 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5310344990097293916} + m_Mesh: {fileID: -7821917557700976381, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} +--- !u!4 &2609010859004501656 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3422385114337362978} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7401685852068407100} + - {fileID: 6187779589399219151} + - {fileID: 5172146364511432980} + - {fileID: 172114895535053200} + - {fileID: 3199528807918028872} + - {fileID: 6707835898968011355} + - {fileID: 2531807946754435201} + - {fileID: 7547574314756601916} + - {fileID: 690954537832693631} + - {fileID: 3597773053211993566} + - {fileID: 2890395686924447699} + - {fileID: 5011044302983516067} + - {fileID: 795014089940766546} + - {fileID: 3098087760928485478} + - {fileID: 5455113164789638678} + - {fileID: 523618035779240531} + - {fileID: 4236797493123192945} + - {fileID: 3095775823087890481} + - {fileID: 793117158465809802} + - {fileID: 6170623916318069746} + - {fileID: 2326075586102099343} + - {fileID: 2184018882917744397} + - {fileID: 5642259907068959719} + - {fileID: 3717869208080245778} + m_Father: {fileID: 1023018615} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &2609672870916401044 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 830007329053346260} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.27193183, y: 0.26837498, z: -0.26399994} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 915489601676210998} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2610950931335273755 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5342501064841053773} + 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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 &2620639038721354198 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6615530699158997857} + m_Mesh: {fileID: 6715375062900545627, guid: 485c2b00c505121468e2d20910842a74, type: 3} +--- !u!4 &2622770438212689920 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3221274568908329956} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: -0.0000000013300747} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4116396921372432760} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2625669262417171654 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1908755699730042670} + 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: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!4 &2631496338877530650 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7210446100921187027} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.20268431, y: 0.225, z: -0.31253278} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7906200256174459245} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2637149239093407465 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4779187036017809637} + m_Mesh: {fileID: -3292925553009838691, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} +--- !u!1 &2649767556843636822 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1227893999386976092} + - component: {fileID: 7070433885546819872} + - component: {fileID: 5337834311660681333} + m_Layer: 0 + m_Name: Object010 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &2651925402522531646 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1344852968344602713} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 99038b81a12a2f2499332a668d9e5d15, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 85d8935cccb058843808452d51e4980c, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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 &2655066948234808427 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7156412003949927219} + m_Mesh: {fileID: 106541212177282163, guid: 837e03a60f341e14da656441a8653493, type: 3} --- !u!114 &2662257852500962775 MonoBehaviour: m_ObjectHideFlags: 0 @@ -150541,18 +161431,791 @@ RectTransform: m_AnchoredPosition: {x: 24.759033, y: 309} m_SizeDelta: {x: -1401.1697, y: -903.63} m_Pivot: {x: 0.5, y: 0.5} +--- !u!23 &2684145966207427209 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8926154377495688397} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!4 &2685425829973406701 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2911860466242301174} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.1112396, y: 0.26294157, z: -0.06132862} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7799699611165651300} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2686593645063771862 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8124807159033985952} + - component: {fileID: 9094721581548440450} + - component: {fileID: 4008351193173606327} + m_Layer: 0 + m_Name: Object006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &2690928598840149211 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9165532127733989126} + m_Mesh: {fileID: -8319805796033406473, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!33 &2695344206628738392 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7722597679654154380} + m_Mesh: {fileID: 928670381974441746, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} +--- !u!23 &2706247538252258502 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9208008555040226237} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 4f57d996fc823c24a99bf2cccdefeaa4, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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 &2708673853127002209 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9001635278191129830} + m_Mesh: {fileID: 4004825908086979078, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} +--- !u!23 &2714676211589498812 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3653192884985232781} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 7b45dc31b7c7d754bbc4f38e07733858, type: 2} + - {fileID: 2100000, guid: 6875b4493ed788d4789042aba4880050, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 3e633f3da7f6c1c46a05ea105f130727, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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!1 &2718340434523184503 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2721269095525206605} + - component: {fileID: 1078119531486041078} + - component: {fileID: 3710397979550158124} + m_Layer: 0 + m_Name: Object005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2721269095525206605 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2718340434523184503} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.038519233, y: 0.108672604, z: -0.013490637} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2731616353065895612 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3687359498631763687} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 061e8e56588ff73488006cdffc008f32, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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!1 &2734602758282253015 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8832124117117293586} + - component: {fileID: 2191704174958759386} + - component: {fileID: 3709494074110268238} + m_Layer: 0 + m_Name: Object011 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &2741865112450807967 stripped GameObject: m_CorrespondingSourceObject: {fileID: 3150406272059427571, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &2758859069557758663 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9022728812148148115} + m_Mesh: {fileID: -2639241166356525208, guid: 1e0b029320fe5914d98621193276e076, type: 3} --- !u!1 &2762238141713123402 stripped GameObject: m_CorrespondingSourceObject: {fileID: 3161530162260081190, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &2764490806158208427 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7500346433907542143} + m_Mesh: {fileID: 928670381974441746, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!33 &2765950924410682408 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8937457313818888181} + m_Mesh: {fileID: -8319805796033406473, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} +--- !u!23 &2767381963110787654 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2990713899054760779} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 815fcf4bf3eac8c44a94802c45499896, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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 &2768927236452528205 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6969270958239123771} + m_Mesh: {fileID: 7643229109163234770, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!4 &2775136607325095913 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3714419465656854736} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.12568972, y: 0.24984208, z: -0.28685236} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 25 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2780637805898448719 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3569110854255281534} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: dc5f0f285be51334abb02b539c88f62a, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: d3469d2b2aeaf7441b7b8f89a0def34f, 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!4 &2784852789078826112 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6177308399937688859} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.12389889, y: 0.69446886, z: -0.3160524} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2786960479649588600 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4944263795593830235} + m_Mesh: {fileID: 8986549659293779559, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} +--- !u!1 &2804713048647195882 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7575107225780166441} + - component: {fileID: 6080881401253027752} + - component: {fileID: 1672371826155711529} + m_Layer: 0 + m_Name: Box008 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2804907077140913241 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 497180833977954151} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.24179916, y: 0.11176877, z: -0.17271417} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6057619421335938199} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2804982917633893801 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1672084382166177130} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 5d67d5e43daa72d4fade2fe649b7271d, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!4 &2808353527271729658 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6140356799873664719} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.30570954, y: 0.225, z: -0.25532228} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2809086548080062514 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 601611563699616894} + 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: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!23 &2810664010721250860 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6989510188142544756} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: bae9d112f2ddd7345967d041e1189ddc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 90091843de6415b44929abd7f9c033bd, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &2811100467756406824 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6172710325168157242} + - component: {fileID: 9121149256893755870} + - component: {fileID: 5087220334088241662} + m_Layer: 0 + m_Name: Box040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2814654616946239083 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3189808416429063377} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2124544961426254263} + - {fileID: 7459082389778038542} + - {fileID: 6261639809503753020} + - {fileID: 4971304715228793319} + - {fileID: 97321546540671331} + - {fileID: 3413089168831721659} + - {fileID: 6786288907521493672} + - {fileID: 2312722732450107506} + - {fileID: 7747570292696416463} + - {fileID: 769125453927663500} + - {fileID: 3663506206272232749} + - {fileID: 3109180751188596512} + - {fileID: 590760871622244257} + - {fileID: 3009572905723316373} + - {fileID: 5228341062831972069} + - {fileID: 323972406642997920} + - {fileID: 4176692988589138050} + - {fileID: 3012027780209739970} + - {fileID: 593084413659108729} + - {fileID: 6239962930915109633} + - {fileID: 2557298639973451132} + - {fileID: 2122753853264316414} + m_Father: {fileID: 1023018615} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2821474492122745131 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2033957675191262329} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: fb6232690c1c1084fb58523d5ee5aeb0, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: f7c4b8b2d4dc9ee4c902e550c5b74afa, 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!1001 &2867121862218958565 PrefabInstance: m_ObjectHideFlags: 0 @@ -150800,18 +162463,187 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 22581a22f69bf6e4d84479862783548b, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!33 &2883026398815100884 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5555929885796966145} + m_Mesh: {fileID: 3181945431582109686, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} --- !u!4 &2887084679801241018 stripped Transform: m_CorrespondingSourceObject: {fileID: 2712730629957423062, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &2890395686924447699 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6741273484938160446} + m_LocalRotation: {x: 0.00000009974802, y: 0.00000009974802, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.07885428, y: 0.38048548, z: -0.15037024} + m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2897847997136928807 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8474627668643693390} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 5c8cedf3f5a458546a2bf464a001dc24, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 10ac57f42847b114584025b79f149fd9, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, 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 &2909021616822547704 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3297847178632074627} + m_Mesh: {fileID: 3868671361854562809, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} --- !u!1 &2911110185142545518 stripped GameObject: m_CorrespondingSourceObject: {fileID: 2725563228482969090, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &2911860466242301174 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2685425829973406701} + - component: {fileID: 1135349362318924566} + - component: {fileID: 6856529063896275054} + m_Layer: 0 + m_Name: Box233 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &2918693214727392244 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1413212892745064102} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 061e8e56588ff73488006cdffc008f32, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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!4 &2919918208140957896 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8939927056681440048} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.012468845} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 764778530807871526} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2924456482288706707 stripped GameObject: m_CorrespondingSourceObject: {fileID: 2675335781278635775, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -150824,6 +162656,489 @@ Transform: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &2931963871622506278 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5549919649637784554} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 5d67d5e43daa72d4fade2fe649b7271d, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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 &2933041097824913449 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3255790684224465234} + m_Mesh: {fileID: 3868671361854562809, guid: 38d78f271938d6c4686b952b3257872c, type: 3} +--- !u!4 &2935928812515994341 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9022728812148148115} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.0071395678, y: 0.073690474, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1212578399471534632} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2945467239753117592 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2456603828602258299} + m_Mesh: {fileID: -3531946766418785785, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} +--- !u!23 &2946451221235599315 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1649099664867544110} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, 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!4 &2948044116176190937 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7241657841303646068} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.12568955, y: 0.24984208, z: -0.28685236} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 28 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2961195916720440087 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3552412407257789931} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, 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!4 &2961707330488363962 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8512543724490368639} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.24179916, y: 0.06767815, z: -0.13957438} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6057619421335938199} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2970325807182875747 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8963393027790772765} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, 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!4 &2981584585952641076 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4489650953821028393} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00000011920929, y: -0.0035092235, z: -0.26400006} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 23 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &2981968174469256421 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 176848059630947367} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.178} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3809797924624086003} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2990713899054760779 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4350711254963785709} + - component: {fileID: 6349949297923116413} + - component: {fileID: 2767381963110787654} + m_Layer: 0 + m_Name: Box011 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &2992764008354428493 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 912535584362909651} + - component: {fileID: 3175823013711599414} + - component: {fileID: 9050129438623542231} + m_Layer: 0 + m_Name: Box014 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &2994756878276556875 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 176848059630947367} + 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: 2f722a70dff0aa04d96fe8cbd8980554, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!1 &2996582998464512050 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8250907086480689258} + - component: {fileID: 567435460385221855} + - component: {fileID: 1265933365656187365} + m_Layer: 0 + m_Name: Box105 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3009572905723316373 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8937457313818888181} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.051530614, y: 0.24848777, z: -0.31173322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &3012027780209739970 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5891419330389572559} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.30030075, y: 0.43346125, z: -0.31663662} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &3022629855923310798 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 321058408552156870} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.06051016, y: 0.24984208, z: -0.2836551} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 34 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &3023941441708599605 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4375603456071400831} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 5d67d5e43daa72d4fade2fe649b7271d, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!4 &3024050614099814505 stripped Transform: m_CorrespondingSourceObject: {fileID: 2612901525656295941, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -150836,18 +163151,410 @@ Transform: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &3029019696132230313 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9187504741452866015} + - component: {fileID: 8176143171852472829} + - component: {fileID: 4098567987863659976} + m_Layer: 0 + m_Name: Object006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3029348953197017133 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8996671156534724777} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.3107667, y: 0.18, z: -0.028926678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3034861383853642932 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 341118656683163088} + m_Mesh: {fileID: 4070407857570179305, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!4 &3058764750282130794 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9144075518541614738} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.6975736, z: -0.0574376} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &3059762250007849479 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5864196581781719830} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 90091843de6415b44929abd7f9c033bd, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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 &3075227542237103840 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5302721503947249987} + m_Mesh: {fileID: 3375562416416583178, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} +--- !u!1 &3075254092430343851 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4776141825626201685} + - component: {fileID: 6710384205605244733} + - component: {fileID: 3688089692233274924} + m_Layer: 0 + m_Name: Box015 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &3082116336545238961 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6989510188142544756} + m_Mesh: {fileID: -3893333606532900248, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} +--- !u!1 &3083090457026954727 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 650470211758295052} + - component: {fileID: 3325004700033185620} + - component: {fileID: 6113073502182488245} + m_Layer: 0 + m_Name: Box108 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3086961832189955246 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8655365370378813100} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.10464895, y: 0.42568934, z: -0.26399994} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 915489601676210998} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &3095775823087890481 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5978597022961926972} + m_LocalRotation: {x: 0.00000009974802, y: 0.00000009974802, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.1808093, y: 0.38048548, z: -0.15037024} + m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &3097173612095511551 stripped Transform: m_CorrespondingSourceObject: {fileID: 2832250588279073171, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &3098087760928485478 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9165532127733989126} + m_LocalRotation: {x: 0.00000009974802, y: 0.00000009974802, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.06540331, y: 0.38048548, z: -0.15037024} + m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &3105416037296175623 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9077424687819668514} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!4 &3109180751188596512 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6825038655797088717} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.10899108, y: 0.24848777, z: -0.31173322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3114285079704463143 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5629526132366796786} + m_Mesh: {fileID: 3181945431582109686, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!33 &3121291412465220888 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1185302680108360951} + m_Mesh: {fileID: -8113768720884857512, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!4 &3129545443695989217 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 85571766687123612} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.14723727, y: 0.26294157, z: -0.06132862} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7799699611165651300} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3138435095622317562 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3238500330626799001} + - component: {fileID: 6581117059035032786} + - component: {fileID: 4162395951372896086} + m_Layer: 0 + m_Name: Object018 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &3141742448943881612 stripped GameObject: m_CorrespondingSourceObject: {fileID: 2750789004562116576, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &3151108926150949298 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 50989320254078809} + m_Mesh: {fileID: 3362949761008655658, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!1 &3158614892640197323 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 721252566861700757} + - component: {fileID: 6849638305407498942} + - component: {fileID: 4236654633800112580} + m_Layer: 0 + m_Name: Box016 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &3159659134172036896 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574148342622106845} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, type: 2} + - {fileID: 2100000, guid: d5a3c62a9a3aa334f90fb5ff44d48d36, type: 2} + - {fileID: 2100000, guid: d3469d2b2aeaf7441b7b8f89a0def34f, 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!1001 &3163677926100848926 PrefabInstance: m_ObjectHideFlags: 0 @@ -150972,6 +163679,21 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: cfa16bd5e782e264e9dc6857484d2551, type: 3} +--- !u!4 &3163860167486440477 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6970627061541678678} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.15031381, y: 0.225, z: -0.31184724} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7906200256174459245} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &3167123259436369596 MonoBehaviour: m_ObjectHideFlags: 0 @@ -150996,12 +163718,651 @@ MonoBehaviour: m_Spacing: {x: 23.9, y: 0} m_Constraint: 1 m_ConstraintCount: 6 +--- !u!23 &3171522644968893112 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6741273484938160446} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 8ff1d5a2c52311e4696cd22735732a66, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!4 &3174065847727804917 stripped Transform: m_CorrespondingSourceObject: {fileID: 2430252787383837593, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &3175823013711599414 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2992764008354428493} + m_Mesh: {fileID: 3868671361854562809, guid: 485c2b00c505121468e2d20910842a74, type: 3} +--- !u!4 &3189088559993529159 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8474627668643693390} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.2119822, y: 0.42568934, z: -0.26399994} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 915489601676210998} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3189808416429063377 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2814654616946239083} + m_Layer: 0 + m_Name: 18 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!33 &3189950088530529319 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7682609977067091281} + m_Mesh: {fileID: 7643229109163234770, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!33 &3190271404661642600 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8590718855736625212} + m_Mesh: {fileID: -2639241166356525208, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} +--- !u!4 &3199528807918028872 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4818932401942037206} + m_LocalRotation: {x: 0.000000099748014, y: 0.000000099748014, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.2511063, y: 0.38048548, z: -0.15646511} + m_LocalScale: {x: 1.5098631, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3202983853055741024 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6210854786555371136} + m_Mesh: {fileID: -7516479528189023691, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} +--- !u!23 &3207910108099388581 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6800439090409208681} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: d8afc8233d0ecc846a4a60897529b7c4, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &3221274568908329956 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2622770438212689920} + - component: {fileID: 4425185519157827656} + - component: {fileID: 1946547943269126563} + m_Layer: 0 + m_Name: 72 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &3221439188117030330 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 183628042510612748} + - component: {fileID: 5991386826989676301} + - component: {fileID: 2321071950392602657} + m_Layer: 0 + m_Name: Box005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &3223185449976503926 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3460347194474908273} + - component: {fileID: 7326395612068943352} + - component: {fileID: 5923441206816870849} + m_Layer: 0 + m_Name: Box139 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &3235859720190511237 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2335914922422598942} + 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: 66457086088218715, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 2841219563373173654, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!4 &3238500330626799001 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3138435095622317562} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.14140135, y: 0.108672604, z: -0.013490637} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &3241549465504384232 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5280865353733732388} + 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} + 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!23 &3246578599162279233 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590861007285837843} + 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -899806608179610634, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!23 &3252816418355159115 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6197296529126548892} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 53a6ea32b66877f4f811139c51424123, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!1 &3255790684224465234 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 580807283708612812} + - component: {fileID: 2933041097824913449} + - component: {fileID: 8736437526791042248} + m_Layer: 0 + m_Name: Box014 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &3279829644779518520 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6917768707092058860} + - component: {fileID: 790746786397543865} + - component: {fileID: 7158223197761349404} + m_Layer: 0 + m_Name: 92 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &3292893138213174089 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1081817305117922281} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &3294512487480099914 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 983362396195415289} + - component: {fileID: 998910728684874331} + - component: {fileID: 1439364942078395057} + m_Layer: 0 + m_Name: Box221 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &3295248662752791291 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4104298382253809329} + 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 196172300330902787, guid: 485c2b00c505121468e2d20910842a74, type: 3} + 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 &3296912099640236925 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5407380718736813425} + m_Mesh: {fileID: -3292925553009838691, guid: 38d78f271938d6c4686b952b3257872c, type: 3} +--- !u!1 &3297847178632074627 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 641160193030450205} + - component: {fileID: 2909021616822547704} + - component: {fileID: 8778823324909144089} + m_Layer: 0 + m_Name: Box014 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &3325004700033185620 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3083090457026954727} + m_Mesh: {fileID: -5798510906853853667, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!33 &3330781225585433357 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1520892183057875682} + m_Mesh: {fileID: -8113768720884857512, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} +--- !u!1 &3351215273339291299 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6582279449109523776} + - component: {fileID: 1830954555092640237} + - component: {fileID: 3948572038223711531} + m_Layer: 0 + m_Name: Box109 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!114 &3351641357523794632 MonoBehaviour: m_ObjectHideFlags: 0 @@ -151144,6 +164505,47 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &3363292645499818968 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8806915233583601696} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.04163775, y: 0.088791445, z: -0.26399994} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 915489601676210998} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3377255567795930029 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1584256114423618114} + m_Mesh: {fileID: -8113768720884857512, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} +--- !u!1 &3378085402786782565 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5045265391102492059} + - component: {fileID: 6443581700878871795} + - component: {fileID: 3990923211011372514} + m_Layer: 0 + m_Name: Box015 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!224 &3393824052007977405 RectTransform: m_ObjectHideFlags: 0 @@ -151167,12 +164569,240 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 616, y: 40} m_Pivot: {x: 0.5, y: 0.5} +--- !u!4 &3399353993886787272 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1391357148070008604} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.15423033, y: 0.0010635629, z: -0.26500002} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4433488523220862567} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &3402816901609263691 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6825038655797088717} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 7b45dc31b7c7d754bbc4f38e07733858, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 78cc598740d404540a68493d4c70c520, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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!4 &3403445037527080833 stripped Transform: m_CorrespondingSourceObject: {fileID: 2489933280384085485, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &3407518628962432147 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6128233052755535475} + m_Mesh: {fileID: -7516479528189023691, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!4 &3413089168831721659 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4745370721189362213} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.21218175, y: 0.43346125, z: -0.31663662} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3414147145767824060 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8856560674939848650} + - component: {fileID: 8367475924609316840} + - component: {fileID: 4434154742127428573} + m_Layer: 0 + m_Name: Object006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &3422385114337362978 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2609010859004501656} + m_Layer: 0 + m_Name: 36 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &3427435218173911325 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3452622375424226855} + - component: {fileID: 351155506403635100} + - component: {fileID: 4130985441112666438} + m_Layer: 0 + m_Name: Object005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3429400808450069050 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4404351256488721247} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.18044168, y: 0.077693306, z: -0.13957441} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5273522604940259271} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3434197946597732133 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8516660339158018761} + m_Mesh: {fileID: 4382602644814197676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!4 &3443156117474322773 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8809361382858900515} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00032439828, y: 0.08114039, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1704047503546810776} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &3452622375424226855 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3427435218173911325} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.12895331, y: 0.24499545, z: -0.24493845} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5236682523249791853} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &3460347194474908273 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3223185449976503926} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.021260899, y: 0.24802452, z: -0.35262305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &3460788035129314633 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7317962221425942591} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.30132785, y: 0.69446886, z: -0.38488317} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!224 &3462853304833204750 RectTransform: m_ObjectHideFlags: 0 @@ -151217,18 +164847,857 @@ MonoBehaviour: message: data: serverTime: +--- !u!33 &3479343777350009739 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4375603456071400831} + m_Mesh: {fileID: 7485205316709286908, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} +--- !u!4 &3483241262175501897 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7666969399970483} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.14553781, y: 0.225, z: -0.25532228} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &3484013036154424278 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819344453598577020} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.10173249, y: 0.16167535, z: -0.13957444} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5119118449912238514} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3488200520186256781 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8880110597428737990} + - component: {fileID: 544478751538331307} + - component: {fileID: 4889302421590272952} + m_Layer: 0 + m_Name: Box006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3492636018857252809 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1185302680108360951} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.20984536, y: 0.108672604, z: -0.013490637} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &3492822853752902173 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4368727256435058790} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.30175525, y: 0.24802452, z: -0.353} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 22 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3503271615980052326 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1222424795565411576} + - component: {fileID: 5117415434176588100} + - component: {fileID: 6345949726446210060} + m_Layer: 0 + m_Name: Object071 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3510317386620012347 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4333084451637261098} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.14807133, y: 0.24802452, z: -0.264} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &3511574195268193636 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4818932401942037206} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!4 &3514613511657742539 stripped Transform: m_CorrespondingSourceObject: {fileID: 4427909543079219879, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &3515067630495498403 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9094953043089191624} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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 &3521434978940393934 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 90402177600101642} + m_Mesh: {fileID: 5060444177187149915, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} +--- !u!23 &3525655432525547181 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4854737110433542296} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 204d0d4218e32054e81e5f600dcd7c01, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!4 &3529599239036843645 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4842509312153049416} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00032439828, y: 0.019212604, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1935563662030491015} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3537243041938311296 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6825038655797088717} + m_Mesh: {fileID: 3304094240565004552, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} +--- !u!4 &3546130496742648000 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2495827084012684228} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.2634677, y: 0.18, z: -0.028926678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3548887921719769325 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8474627668643693390} + m_Mesh: {fileID: -8586770294792153069, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} --- !u!1 &3550622611491810402 stripped GameObject: m_CorrespondingSourceObject: {fileID: 4391900717453483534, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &3552412407257789931 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7401685852068407100} + - component: {fileID: 5089599487428258817} + - component: {fileID: 2961195916720440087} + m_Layer: 0 + m_Name: Box047 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &3558383290287727108 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7346858454746687996} + - component: {fileID: 6317414158953206792} + - component: {fileID: 4249981606243213570} + m_Layer: 0 + m_Name: Object001 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &3558711529311474471 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1441940722142240043} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!4 &3561397645878915816 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 601611563699616894} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.0034260675, y: 0.6944689, z: -0.31237373} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3561635671931183008 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4666601162315919892} + - component: {fileID: 456166674795990853} + - component: {fileID: 2331181083298501754} + m_Layer: 0 + m_Name: Box110 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &3568135329754073096 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 321058408552156870} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &3569110854255281534 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5172146364511432980} + - component: {fileID: 3853878194273717135} + - component: {fileID: 2780637805898448719} + m_Layer: 0 + m_Name: Box061 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3579337633491952416 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6800439090409208681} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.24298331, y: 0.225, z: -0.31184724} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7906200256174459245} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &3597241498626267245 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2163254518007356893} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!4 &3597773053211993566 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1419307612873256394} + m_LocalRotation: {x: 0.00000009974802, y: 0.00000009974802, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.050002776, y: 0.38048548, z: -0.15037024} + m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &3598784825484748194 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7241657841303646068} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &3600204538948686830 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 593084413659108729} + - component: {fileID: 6299395591554108187} + - component: {fileID: 1197503844742078691} + m_Layer: 0 + m_Name: Box077 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &3615395672747110515 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6741273484938160446} + m_Mesh: {fileID: 3304094240565004552, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &3628121999011048404 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1673216496195773912} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 7b45dc31b7c7d754bbc4f38e07733858, type: 2} + - {fileID: 2100000, guid: 6875b4493ed788d4789042aba4880050, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 3e633f3da7f6c1c46a05ea105f130727, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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!1 &3633192808620884930 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4116396921372432760} + m_Layer: 0 + m_Name: 72 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &3650169452652271978 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2315072564869115919} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.10146063, y: 0.076294385, z: -0.13957438} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6057619421335938199} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3653192884985232781 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4971304715228793319} + - component: {fileID: 3909407288127452028} + - component: {fileID: 2714676211589498812} + m_Layer: 0 + m_Name: Box061 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &3653515867933643585 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2059429224419488758} + - component: {fileID: 1092531668201930383} + - component: {fileID: 4389376195059076387} + m_Layer: 0 + m_Name: Object013 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3659111854849921957 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4146714047719426335} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5898984544599424917} + - {fileID: 1215812462017393483} + - {fileID: 1792681088523233375} + - {fileID: 4628066802839776107} + - {fileID: 6161351020287178479} + - {fileID: 768625467250555752} + - {fileID: 7814175373079243735} + - {fileID: 8890828430127841540} + m_Father: {fileID: 1023018615} + m_RootOrder: 23 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &3660117560656536262 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7376891716375374142} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.012468845} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1212578399471534632} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3660518367769324317 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 793117158465809802} + - component: {fileID: 6075718811529081832} + - component: {fileID: 1415497651488806928} + m_Layer: 0 + m_Name: Box077 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3663506206272232749 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191444246162740537} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.18907212, y: 0.24848777, z: -0.31173322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &3668970781925291069 GameObject: m_ObjectHideFlags: 0 @@ -151247,6 +165716,36 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!4 &3670565738863415531 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7456227776634305949} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.04968287, y: 0.08114039, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 764778530807871526} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &3675558599611542435 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7532155278205757499} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: -0.29471874} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 39 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &3682763283532873166 GameObject: m_ObjectHideFlags: 0 @@ -151265,6 +165764,408 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!1 &3687359498631763687 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3699353082955121117} + - component: {fileID: 1757281076158191718} + - component: {fileID: 2731616353065895612} + m_Layer: 0 + m_Name: Object005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &3688089692233274924 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3075254092430343851} + 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 9147106888433294362, guid: 485c2b00c505121468e2d20910842a74, type: 3} + 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!1 &3691533204743783722 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2428071423387151439} + - component: {fileID: 1812694282416425213} + - component: {fileID: 8609078463754716558} + m_Layer: 0 + m_Name: Box026 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &3694474294739738027 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8397378341307487660} + - component: {fileID: 971961443549533793} + - component: {fileID: 5230319942120094463} + m_Layer: 0 + m_Name: Box245 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3697819323328796814 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7812042621114766667} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.057529524, y: 0.18, z: -0.028926678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &3699353082955121117 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3687359498631763687} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.24179916, y: 0.06767814, z: -0.17271417} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6057619421335938199} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &3709494074110268238 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2734602758282253015} + 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 2446803691416548083, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 343868187792612432, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 3376099467616673647, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!23 &3710397979550158124 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2718340434523184503} + 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -899806608179610634, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!23 &3711290292738225559 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4745370721189362213} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 7b45dc31b7c7d754bbc4f38e07733858, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 6875b4493ed788d4789042aba4880050, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 3e633f3da7f6c1c46a05ea105f130727, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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 &3714240604708541932 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2163254518007356893} + m_Mesh: {fileID: -3996760141626369306, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} +--- !u!1 &3714419465656854736 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2775136607325095913} + - component: {fileID: 7880759781789677782} + - component: {fileID: 8858695748936173905} + m_Layer: 0 + m_Name: Object061 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3717869208080245778 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4577069541997853280} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00014513731, y: 0, z: -0.16010302} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 23 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &3740994163363275379 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7457411467430242699} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: -0.217} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1293103158491988637} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3748469542146302021 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4104298382253809329} + m_Mesh: {fileID: 7485205316709286908, guid: 485c2b00c505121468e2d20910842a74, type: 3} +--- !u!1 &3749716593025811473 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6961730730237382633} + - component: {fileID: 5963811906674618909} + - component: {fileID: 4580924023334635287} + m_Layer: 0 + m_Name: Object001 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &3757324180360625731 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9182940799682368520} + - component: {fileID: 270850401058233701} + - component: {fileID: 5158428271954741366} + m_Layer: 0 + m_Name: Box006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3757608727459750122 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7718340111312760111} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.31963307, y: 0.068951674, z: -0.13957441} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5273522604940259271} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &3761183470107067426 GameObject: m_ObjectHideFlags: 0 @@ -151283,12 +166184,229 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!33 &3770492379019532953 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2329738960836366798} + m_Mesh: {fileID: -1141464603633071787, guid: 38d78f271938d6c4686b952b3257872c, type: 3} --- !u!4 &3770678087962219897 stripped Transform: m_CorrespondingSourceObject: {fileID: 4170704498274019093, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &3772702839513361420 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 540019890679487902} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.018482637, y: 0.26294157, z: -0.06132862} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7799699611165651300} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &3774903966167482099 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7631426916412824671} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, 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!4 &3781878649832252937 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 754889193151839310} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.20206521, y: 0.69446886, z: -0.38488317} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &3783959942395598865 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8463972177876769839} + 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: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!23 &3784072576105561720 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1976285726914804680} + 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 2446803691416548083, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 343868187792612432, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 3376099467616673647, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!4 &3797400483023977165 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7006119021717624763} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.17626172, y: 0.225, z: -0.25532228} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &3803785263237196053 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7757593451235258320} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.01536195, y: 0.225, z: -0.25532228} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &3804590861504300125 stripped Transform: m_CorrespondingSourceObject: {fileID: 4141602062464988721, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -151313,24 +166431,227 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!4 &3809797924624086003 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4581515051630684489} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2981968174469256421} + - {fileID: 1641481940470534941} + - {fileID: 2231595381588871177} + - {fileID: 5053861088613354301} + - {fileID: 6023949079192016569} + - {fileID: 914913610771503934} + m_Father: {fileID: 1023018615} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &3823578161216532956 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1520892183057875682} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00032439828, y: 0.050849162, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5183046070246721810} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3834832403972531672 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1252060022404311450} + - component: {fileID: 4007197734018925924} + - component: {fileID: 8189281793839136845} + m_Layer: 0 + m_Name: Object014 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!4 &3836122189401294550 stripped Transform: m_CorrespondingSourceObject: {fileID: 4074023546499331258, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &3850488230485927411 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5179236774481503921} + m_Mesh: {fileID: 1226723149311242300, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} +--- !u!33 &3853878194273717135 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3569110854255281534} + m_Mesh: {fileID: -2893039221907779070, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!1 &3854717024918951099 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2124544961426254263} + - component: {fileID: 8298385582273667240} + - component: {fileID: 8014537636923503552} + m_Layer: 0 + m_Name: Box003 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &3860940935920976146 stripped GameObject: m_CorrespondingSourceObject: {fileID: 4044693477802177406, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &3862513341517053563 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4702106843298603276} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &3867594533942552756 stripped GameObject: m_CorrespondingSourceObject: {fileID: 4042269451969239768, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &3871820460904987517 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4476689411933714555} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: b5151be299690364ea2211f61267eb84, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, 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!4 &3872345861271232886 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7001395798920391310} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.012468845} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1704047503546810776} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!222 &3875315201151951438 CanvasRenderer: m_ObjectHideFlags: 0 @@ -151345,30 +166666,682 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &3888638373423753596 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1584256114423618114} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.24179916, y: 0.15008265, z: -0.17271423} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5119118449912238514} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &3895933395480004776 stripped GameObject: m_CorrespondingSourceObject: {fileID: 4297648811381340868, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &3897226308200049465 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2364739281792924514} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!1 &3902246031625265164 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4425983708511861430} + m_Layer: 0 + m_Name: 73 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!33 &3909407288127452028 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3653192884985232781} + m_Mesh: {fileID: -2893039221907779070, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} +--- !u!33 &3915414510886336299 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 121785957508862989} + m_Mesh: {fileID: 3822247309040838107, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} --- !u!4 &3939429838624367511 stripped Transform: m_CorrespondingSourceObject: {fileID: 4260080385245762043, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &3945214733487930602 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2217289653029356006} + 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: 915489601676210998} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &3948572038223711531 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3351215273339291299} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, 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!1 &3948877314710412509 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4433488523220862567} + m_Layer: 0 + m_Name: 40 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!33 &3955255340156859385 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1976285726914804680} + m_Mesh: {fileID: -3996760141626369306, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &3959395552368702361 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2321075858859451330} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 061e8e56588ff73488006cdffc008f32, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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!1 &3971489452771178443 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6653002912636174922} + - component: {fileID: 2169664814854406503} + - component: {fileID: 2259898823169762517} + m_Layer: 0 + m_Name: 73 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &3972234149203897092 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7926761718242860202} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &3980650189557247136 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5593526352231464541} + - component: {fileID: 1626759944913143507} + - component: {fileID: 4464348106641210764} + m_Layer: 0 + m_Name: Object1665 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &3990923211011372514 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3378085402786782565} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 5d67d5e43daa72d4fade2fe649b7271d, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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 &3991403648944850411 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8446911348340682208} + m_Mesh: {fileID: 5986379873229659198, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} +--- !u!23 &3991976615492347104 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2153128574984827968} + 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 2446803691416548083, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 343868187792612432, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 3376099467616673647, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!4 &3999633067746330632 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2533697272779956768} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.1804122, y: 0.42568934, z: -0.26399994} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 915489601676210998} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4007197734018925924 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3834832403972531672} + m_Mesh: {fileID: 3941715523697911101, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &4008351193173606327 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2686593645063771862} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: b5151be299690364ea2211f61267eb84, 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 &4017930557089134926 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8091439188677783062} + m_Mesh: {fileID: 106541212177282163, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} +--- !u!33 &4020357366014664248 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5972527458311553597} + m_Mesh: {fileID: 1702923399578278298, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} --- !u!4 &4020728691227214962 stripped Transform: m_CorrespondingSourceObject: {fileID: 4213413683003962910, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &4023886849472070171 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 122687327772999036} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 99038b81a12a2f2499332a668d9e5d15, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 85d8935cccb058843808452d51e4980c, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!1 &4028822748659591015 stripped GameObject: m_CorrespondingSourceObject: {fileID: 1162862005113020802, guid: 32f862715729d804f8c707be223df6e8, type: 3} m_PrefabInstance: {fileID: 2867121862218958565} m_PrefabAsset: {fileID: 0} +--- !u!23 &4035956104297991970 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7990303245099370759} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!23 &4042451488019615271 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4630962058400143824} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 806a8597a82ff9a448269dbf812faef4, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &4042980868752817792 stripped GameObject: m_CorrespondingSourceObject: {fileID: 3868310291844386028, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -151383,18 +167356,468 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1281822439062867816} m_CullTransparentMesh: 1 +--- !u!23 &4050537221472980275 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6208757736871335525} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!23 &4054584740334010793 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8709545354225448014} + 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: 2f722a70dff0aa04d96fe8cbd8980554, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!23 &4066622067138196250 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191444246162740537} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, 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!4 &4081280276322260945 stripped Transform: m_CorrespondingSourceObject: {fileID: 3825505325605610941, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &4083488188918457959 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7692961608494773709} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 5c3ed94971591b3439c528cee49bee3e, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!4 &4090439179655277929 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7804890617061320337} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.012468845} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1935563662030491015} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &4098567987863659976 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3029019696132230313} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!1 &4104298382253809329 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4251282935250534252} + - component: {fileID: 3748469542146302021} + - component: {fileID: 3295248662752791291} + m_Layer: 0 + m_Name: Box009 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!4 &4107568379389637591 stripped Transform: m_CorrespondingSourceObject: {fileID: 3797785417811231163, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &4112460083999017169 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 980275664167595507} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.0011672676, y: 0, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7799699611165651300} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4116396921372432760 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3633192808620884930} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2622770438212689920} + - {fileID: 8500455761036998615} + - {fileID: 9182940799682368520} + - {fileID: 6740222693549242896} + - {fileID: 6680023669832168807} + - {fileID: 4251282935250534252} + - {fileID: 7981909895979670124} + - {fileID: 7564009823862448120} + - {fileID: 1861661097560246537} + - {fileID: 150189800865800774} + - {fileID: 912535584362909651} + - {fileID: 4776141825626201685} + - {fileID: 4581988909083423963} + m_Father: {fileID: 1023018615} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4124703002655843741 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2025624515875773443} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.12149057, y: 0.42568934, z: -0.26399994} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 915489601676210998} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &4128722581690996400 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2015602938807185740} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 341de6c1a700fd14aacf3cdc10ab7152, 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!23 &4130985441112666438 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3427435218173911325} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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 &4143698795875513248 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5280865353733732388} + m_Mesh: {fileID: -3613724358419971262, guid: 485c2b00c505121468e2d20910842a74, type: 3} +--- !u!1 &4146714047719426335 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3659111854849921957} + m_Layer: 0 + m_Name: 93 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!33 &4151782229409451950 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9208008555040226237} + m_Mesh: {fileID: 690106047850165013, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} --- !u!114 &4153717308024100917 MonoBehaviour: m_ObjectHideFlags: 0 @@ -151443,6 +167866,66 @@ MonoBehaviour: m_PersistentCalls: m_Calls: [] m_IsOn: 1 +--- !u!23 &4162395951372896086 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3138435095622317562} + 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: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!1 &4164943118143414483 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1130055290320874584} + - component: {fileID: 921044763637409690} + - component: {fileID: 6423529645288024171} + m_Layer: 0 + m_Name: Box142 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &4172065503821179884 GameObject: m_ObjectHideFlags: 0 @@ -151461,12 +167944,969 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 0 +--- !u!33 &4172335775110793019 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9110503696563589219} + m_Mesh: {fileID: 106541212177282163, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} +--- !u!4 &4176332386443173464 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8963393027790772765} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.082512416, y: 0.24802452, z: -0.35262305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4176692988589138050 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8039506443400454849} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.27470025, y: 0.43346125, z: -0.31663662} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4179383332225375903 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7293754100010455898} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.24179916, y: 0.09087796, z: -0.13957444} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5119118449912238514} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &4179486113664919254 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5768971810611009994} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 204d0d4218e32054e81e5f600dcd7c01, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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 &4183144160666760853 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8053525655355979435} + m_Mesh: {fileID: 4767555546584458496, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} +--- !u!33 &4198761786906315503 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7006119021717624763} + m_Mesh: {fileID: -2639241166356525208, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} +--- !u!4 &4202311342512024483 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1899046328673228957} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.12895331, y: 0.2738864, z: -0.24493845} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5236682523249791853} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4205630655935072889 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2148622748077566001} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.012481883, y: 0.225, z: -0.31253278} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7906200256174459245} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &4206694552294890655 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 341118656683163088} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!23 &4236654633800112580 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3158614892640197323} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 383fafd25d521744a8a6f2b358485b65, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 5c8cedf3f5a458546a2bf464a001dc24, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, 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!4 &4236797493123192945 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7829693187047217714} + m_LocalRotation: {x: 0.00000009974802, y: 0.00000009974802, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.09425484, y: 0.38048548, z: -0.15037024} + m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &4243487313012450488 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9029231735876566157} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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 &4244584267898670479 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7842722604277050787} + m_Mesh: {fileID: -5395582760244232606, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} +--- !u!1 &4247421058041977401 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7509965059991365691} + - component: {fileID: 7179961822570967050} + - component: {fileID: 7001583625385846687} + m_Layer: 0 + m_Name: Box039 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4248256240266574290 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5276949739857516263} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.0071395678, y: 0.017722623, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1212578399471534632} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &4249981606243213570 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3558383290287727108} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: aae0e2ade65a7f74583a26403bf7d0c0, type: 2} + - {fileID: 2100000, guid: 3647e3076d0cde84ba812d988cdeae36, 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!4 &4251282935250534252 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4104298382253809329} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.2799493, y: 0.04471205, z: -0.2257452} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4116396921372432760} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &4272173339150043854 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9212091750557249371} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: b5151be299690364ea2211f61267eb84, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!23 &4275380333231115241 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1419307612873256394} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 8ff1d5a2c52311e4696cd22735732a66, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &4278728640066036450 stripped GameObject: m_CorrespondingSourceObject: {fileID: 3950900548102017166, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &4281045888726484257 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7764684601696689770} + m_Mesh: {fileID: 2954858793080512207, guid: 485c2b00c505121468e2d20910842a74, type: 3} +--- !u!23 &4281754660005768977 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7210446100921187027} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 815fcf4bf3eac8c44a94802c45499896, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &4285533771430438351 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2524298590168888646} + - component: {fileID: 8925471323880187075} + - component: {fileID: 1427893951539682134} + m_Layer: 0 + m_Name: Object087 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &4292438577542536852 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7635953401258020158} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 7b45dc31b7c7d754bbc4f38e07733858, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 721718be04f4ea84fb470d44ab37748b, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 5c3ed94971591b3439c528cee49bee3e, type: 2} + - {fileID: 2100000, guid: 78cc598740d404540a68493d4c70c520, type: 2} + - {fileID: 2100000, guid: 6875b4493ed788d4789042aba4880050, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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!23 &4295158458874724049 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 37861116822743939} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 061e8e56588ff73488006cdffc008f32, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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!1 &4297769914727027736 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4592742456828578033} + - component: {fileID: 1280073975712672630} + - component: {fileID: 2504240902744681565} + m_Layer: 0 + m_Name: Box115 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &4302248621377215833 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4416095503768469722} + 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: 2f722a70dff0aa04d96fe8cbd8980554, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!1 &4304723977206038446 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4705799843873386917} + - component: {fileID: 5134682049071483145} + - component: {fileID: 8960175077704867751} + m_Layer: 0 + m_Name: 94 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &4306481230123522608 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2590769006625442279} + - component: {fileID: 8110553311504243177} + - component: {fileID: 738485800660780942} + m_Layer: 0 + m_Name: Object019 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4311388860168092007 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5195616912805320274} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: -0.217} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1293103158491988637} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4312864226916685589 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1877332301342921547} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.086409554, y: 0.076190375, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4425983708511861430} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &4313031994326664025 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1531223198323428115} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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 &4325588764696977609 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7456227776634305949} + m_Mesh: {fileID: -2639241166356525208, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} +--- !u!1 &4333084451637261098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3510317386620012347} + - component: {fileID: 5204326859759102927} + - component: {fileID: 5006523667464557770} + m_Layer: 0 + m_Name: Box138 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &4337998946626043401 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5728985886515349564} + 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: 66457086088218715, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 2841219563373173654, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!4 &4350711254963785709 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2990713899054760779} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.04823406, y: 0.225, z: -0.31253278} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7906200256174459245} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4358080280113059147 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7344490264740789437} + m_Mesh: {fileID: 6851674242468891434, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} --- !u!224 &4362348815261998690 RectTransform: m_ObjectHideFlags: 0 @@ -168720,6 +186160,7 @@ GameObject: - component: {fileID: 4362348816139420717} - component: {fileID: 4362348816139420716} - component: {fileID: 4362348816139420707} + - component: {fileID: 4362348816139420720} - component: {fileID: 4362348816139420704} m_Layer: 0 m_Name: Canvas @@ -168769,6 +186210,36 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0, y: 0} +--- !u!114 &4362348816139420720 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4362348816139420718} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f16709e2118c365418b8ae047d293cd4, type: 3} + m_Name: + m_EditorClassIdentifier: + clickEventLens: + - {fileID: 1544016517} + - {fileID: 827908838} + - {fileID: 1873083862} + - {fileID: 1855629381} + - {fileID: 803471996} + - {fileID: 1779682816} + - {fileID: 1985647072} + - {fileID: 1140206148} + - {fileID: 124687038} + - {fileID: 2087135837} + - {fileID: 1095437240} + - {fileID: 927557112} + - {fileID: 653894785} + - {fileID: 675803628} + - {fileID: 739408535} + - {fileID: 1857144491} + baseConfs: [] --- !u!224 &4362348816140807076 RectTransform: m_ObjectHideFlags: 0 @@ -198939,12 +216410,566 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &4368727256435058790 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3492822853752902173} + - component: {fileID: 2243586039212728289} + - component: {fileID: 1294520837287486128} + m_Layer: 0 + m_Name: Box146 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &4375603456071400831 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4518155809214962850} + - component: {fileID: 3479343777350009739} + - component: {fileID: 3023941441708599605} + m_Layer: 0 + m_Name: Box009 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &4380363977431617427 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1244369498120701858} + m_Mesh: {fileID: -3996760141626369306, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &4389376195059076387 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3653515867933643585} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 256f4f5dccef8754b9365a690d0bfac0, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 10ac57f42847b114584025b79f149fd9, 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!1 &4404351256488721247 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3429400808450069050} + - component: {fileID: 1658002087823160968} + - component: {fileID: 8744870049171307515} + m_Layer: 0 + m_Name: Box026 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &4411634105276428281 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2495827084012684228} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 9922aa33151e51d418fad61c5f6c508b, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!23 &4413033093731881750 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 980275664167595507} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: c23ebec1039415348b26d870a3ca6f0f, type: 2} + - {fileID: 2100000, guid: 00eb2f1fbae46914b95ff646b0993143, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 0d549e2f2b0754b4ca1906386e1e03e6, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, 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!1 &4416095503768469722 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5867245710141631593} + - component: {fileID: 4694499608818935011} + - component: {fileID: 4302248621377215833} + m_Layer: 0 + m_Name: 21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &4417916362088306826 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1713827556576725034} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: b04ebe66322f21045bd7a383224822cd, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 10ac57f42847b114584025b79f149fd9, 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 &4425185519157827656 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3221274568908329956} + m_Mesh: {fileID: -4515405397461973118, guid: 485c2b00c505121468e2d20910842a74, type: 3} +--- !u!4 &4425983708511861430 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3902246031625265164} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6653002912636174922} + - {fileID: 8195301113388454937} + - {fileID: 8880110597428737990} + - {fileID: 6468916597027166686} + - {fileID: 6410900087146649257} + - {fileID: 4518155809214962850} + - {fileID: 7676756416763443618} + - {fileID: 7833135588928355382} + - {fileID: 2132968361617238727} + - {fileID: 457596257219084680} + - {fileID: 641160193030450205} + - {fileID: 5045265391102492059} + - {fileID: 4312864226916685589} + m_Father: {fileID: 1023018615} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4432343607247141474 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5642291632030127447} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00032439828, y: 0.019212604, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1704047503546810776} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4433488523220862567 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3948877314710412509} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2122173463145584150} + - {fileID: 580807283708612812} + - {fileID: 2278331528479237769} + - {fileID: 1702868056237489565} + - {fileID: 3399353993886787272} + - {fileID: 5727205121244479145} + - {fileID: 6539412003812598573} + - {fileID: 426601992095297194} + - {fileID: 7147401259159895573} + - {fileID: 8368741234225648838} + - {fileID: 401182475038260594} + - {fileID: 1174097501244739985} + - {fileID: 7619539335691495164} + m_Father: {fileID: 1023018615} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &4434154742127428573 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3414147145767824060} + 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -899806608179610634, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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 &4446639467478677774 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4544626606887279026} + m_Mesh: {fileID: 3941715523697911101, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!33 &4450774505525704328 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 497180833977954151} + m_Mesh: {fileID: -8113768720884857512, guid: 837e03a60f341e14da656441a8653493, type: 3} +--- !u!33 &4453287705538072686 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5549919649637784554} + m_Mesh: {fileID: -3613724358419971262, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} +--- !u!23 &4464348106641210764 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3980650189557247136} + 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: eb5a3ffc6928fd64fb9259e3558c4039, 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!4 &4475450371550845942 stripped Transform: m_CorrespondingSourceObject: {fileID: 3724068407424117146, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &4476689411933714555 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7688989422234563459} + - component: {fileID: 6407066762435317367} + - component: {fileID: 3871820460904987517} + m_Layer: 0 + m_Name: Object001 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &4489650953821028393 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2981584585952641076} + - component: {fileID: 6634663228526849115} + - component: {fileID: 1258470438842689168} + m_Layer: 0 + m_Name: Box148 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &4495661342975143383 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4944263795593830235} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 204d0d4218e32054e81e5f600dcd7c01, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &4499673591523253061 stripped GameObject: m_CorrespondingSourceObject: {fileID: 3731090799519754537, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -198957,30 +216982,464 @@ Transform: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &4500672022278746739 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8867790769273762440} + - component: {fileID: 7326502186830180354} + - component: {fileID: 1975879033588529048} + m_Layer: 0 + m_Name: Object064 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &4505528374185935882 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 640270441565666157} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 204d0d4218e32054e81e5f600dcd7c01, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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 &4509197686545710943 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8726846845466028039} + m_Mesh: {fileID: 106541212177282163, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} +--- !u!23 &4515553412035576338 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1244369498120701858} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!4 &4518155809214962850 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4375603456071400831} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.2799493, y: 0.04471205, z: -0.2257452} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4425983708511861430} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &4525544478520808011 stripped GameObject: m_CorrespondingSourceObject: {fileID: 3708860129704140839, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &4527259733259660982 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 98792630343089962} + - component: {fileID: 7905481370240622957} + - component: {fileID: 5113618028428358572} + m_Layer: 0 + m_Name: Object034 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &4527729371139908846 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8473647221216634679} + m_Mesh: {fileID: -112464831985561941, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} +--- !u!33 &4535367155630046571 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7317962221425942591} + m_Mesh: {fileID: -2639241166356525208, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} --- !u!4 &4536167811945790012 stripped Transform: m_CorrespondingSourceObject: {fileID: 3694858855503595600, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &4544626606887279026 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1966379677842855408} + - component: {fileID: 4446639467478677774} + - component: {fileID: 8903583984649616423} + m_Layer: 0 + m_Name: Object014 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &4550171670712280815 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8038241483963907492} + m_Mesh: {fileID: 2954858793080512207, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} --- !u!4 &4553769731652706579 stripped Transform: m_CorrespondingSourceObject: {fileID: 3640966145906611071, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &4558933227077951693 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8531757282900714480} + m_Mesh: {fileID: -1041292729156527536, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!33 &4562743998978187406 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5382298243707610264} + m_Mesh: {fileID: -4909793419484529428, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} --- !u!4 &4564433564319218112 stripped Transform: m_CorrespondingSourceObject: {fileID: 3669679699161025452, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &4564861733760945791 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 653588031794358789} + - component: {fileID: 8066301542102963508} + - component: {fileID: 6829063316272034654} + m_Layer: 0 + m_Name: Box007 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &4567580947252627984 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9128294410946011028} + - component: {fileID: 6508525302089925776} + - component: {fileID: 1150969056056502408} + m_Layer: 0 + m_Name: Box045 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &4577069541997853280 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3717869208080245778} + - component: {fileID: 6657916076836088265} + - component: {fileID: 7084456144843628259} + m_Layer: 0 + m_Name: waike2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &4580924023334635287 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3749716593025811473} + 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -3032525779187151254, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 343868187792612432, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!1 &4581515051630684489 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3809797924624086003} + m_Layer: 0 + m_Name: 20 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!23 &4581910519338091069 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6429021161417711494} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!4 &4581988909083423963 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2180232889755562117} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.086409554, y: 0.076190375, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4116396921372432760} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4590001184475023579 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5651684927277389445} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: -0.0000000013300747} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4592742456828578033 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4297769914727027736} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.051921472, y: 0.24802452, z: -0.35262305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4599722994265773422 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6361368783599918356} + m_Mesh: {fileID: -7647463442239531939, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} --- !u!1 &4601147498947572482 stripped GameObject: m_CorrespondingSourceObject: {fileID: 3634402010118947182, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -198993,6 +217452,171 @@ Transform: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &4611102157128252746 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8891178086725392607} + 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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!1 &4615722023303933012 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6184115942399303274} + - component: {fileID: 5915296832130562858} + - component: {fileID: 181037452269558157} + m_Layer: 0 + m_Name: Box246 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &4616177761170974976 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1861661097560246537} + - component: {fileID: 347963555533083299} + - component: {fileID: 2135586553861220969} + m_Layer: 0 + m_Name: Box012 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4628066802839776107 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6931441462515013717} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.03692468, y: 0.045706555, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3659111854849921957} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4630962058400143824 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5627556812929080769} + - component: {fileID: 7899170879415888779} + - component: {fileID: 4042451488019615271} + m_Layer: 0 + m_Name: Box104 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &4652778487529188983 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5407380718736813425} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 71ae97cc47eccf74fb2426282f1c2b06, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 8152f8e0ac8971c41b4220f9693019f4, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!64 &4658527138878143463 MeshCollider: m_ObjectHideFlags: 0 @@ -199030,6 +217654,45 @@ MonoBehaviour: original_shebei: [] search_u_wei: 0 is_jigui: 0 +--- !u!33 &4660522598484111089 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7773983324315607152} + m_Mesh: {fileID: 9186633843763367028, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} +--- !u!33 &4663862040430604045 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7869920999005824828} + m_Mesh: {fileID: -3996760141626369306, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} +--- !u!4 &4666601162315919892 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3561635671931183008} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.22368044, y: 0.24802452, z: -0.35262305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4672304881454267384 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7812042621114766667} + m_Mesh: {fileID: 5924061002115919974, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} --- !u!114 &4675826350239661723 MonoBehaviour: m_ObjectHideFlags: 0 @@ -199060,12 +217723,28 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!33 &4678966549184639614 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574148342622106845} + m_Mesh: {fileID: 7404775158862943375, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} --- !u!1 &4694168123969752245 stripped GameObject: m_CorrespondingSourceObject: {fileID: 5517044866418523865, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &4694499608818935011 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4416095503768469722} + m_Mesh: {fileID: -4074771182479976246, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} --- !u!1 &4699644599146595077 GameObject: m_ObjectHideFlags: 0 @@ -199103,7 +217782,7 @@ PrefabInstance: - target: {fileID: 2073144591439938601, guid: 0c742c3c63315cf46ae653a665155f5d, type: 3} propertyPath: m_RootOrder - value: 40 + value: 42 objectReference: {fileID: 0} - target: {fileID: 2073144591439938601, guid: 0c742c3c63315cf46ae653a665155f5d, type: 3} @@ -199177,12 +217856,517 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 0c742c3c63315cf46ae653a665155f5d, type: 3} +--- !u!1 &4702106843298603276 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8554756781600169958} + - component: {fileID: 211274824236035083} + - component: {fileID: 3862513341517053563} + m_Layer: 0 + m_Name: Object066 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4705799843873386917 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4304723977206038446} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.000061035156, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4709865978187784193 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1502536523695269206} + - component: {fileID: 5658756222763214210} + - component: {fileID: 7940699407721405666} + m_Layer: 0 + m_Name: Box136 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &4724068648691360525 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5051650033800480092} + - component: {fileID: 5611126726554875648} + - component: {fileID: 7539421391064215992} + m_Layer: 0 + m_Name: Box032 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!4 &4730089211155785964 stripped Transform: m_CorrespondingSourceObject: {fileID: 5481396458184792704, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &4739789621302822391 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2569361681833378577} + m_Mesh: {fileID: -2458614987055752723, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!1 &4745370721189362213 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3413089168831721659} + - component: {fileID: 1766889125570508687} + - component: {fileID: 3711290292738225559} + m_Layer: 0 + m_Name: Box063 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &4756456821010180518 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8845008923284062051} + m_Mesh: {fileID: -4992541086646476197, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} +--- !u!1 &4766314944147687896 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7074597862635141862} + - component: {fileID: 8721043318715519031} + - component: {fileID: 5790918195973667669} + m_Layer: 0 + m_Name: Object004 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4775775807000466203 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1531223198323428115} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.19086912, y: 0.24984208, z: -0.28685236} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 23 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4776141825626201685 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3075254092430343851} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.086409554, y: 0.012417968, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4116396921372432760} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4779187036017809637 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1641481940470534941} + - component: {fileID: 2637149239093407465} + - component: {fileID: 5316508390324001763} + m_Layer: 0 + m_Name: Object001 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &4784089935395468669 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5273522604940259271} + m_Layer: 0 + m_Name: 47 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4793414471054946055 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5318313262285206973} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4705799843873386917} + - {fileID: 8715008456750555355} + - {fileID: 7639989839885581221} + - {fileID: 1032009697312391592} + - {fileID: 348356212311089783} + - {fileID: 6961730730237382633} + - {fileID: 7539736316033799421} + - {fileID: 5778018474685550504} + - {fileID: 3492636018857252809} + - {fileID: 2721269095525206605} + - {fileID: 8856560674939848650} + - {fileID: 2032215047162042229} + - {fileID: 801911843903028646} + - {fileID: 5183796066320692063} + - {fileID: 6868441924172964443} + - {fileID: 8832124117117293586} + - {fileID: 1252060022404311450} + - {fileID: 3238500330626799001} + - {fileID: 2590769006625442279} + - {fileID: 2282661990982418754} + m_Father: {fileID: 1023018615} + m_RootOrder: 24 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &4794648585703860925 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5792253641730294748} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 2f7ae9a990b9e4942b084ce4d337db78, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!4 &4809293693381046559 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2339494001296718446} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.23986308, y: 0.077693306, z: -0.13957441} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5273522604940259271} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &4816889951819850380 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7869920999005824828} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!1 &4818932401942037206 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3199528807918028872} + - component: {fileID: 1999590228285099900} + - component: {fileID: 3511574195268193636} + m_Layer: 0 + m_Name: Box063 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &4819836691404812005 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2153128574984827968} + m_Mesh: {fileID: 4944557015945844418, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!33 &4827196310252780804 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2347092483185982434} + m_Mesh: {fileID: -2458614987055752723, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} +--- !u!1 &4835932489331936413 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7847668185954768525} + - component: {fileID: 1317848154642187113} + - component: {fileID: 353033862932190122} + m_Layer: 0 + m_Name: Object027 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &4842509312153049416 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3529599239036843645} + - component: {fileID: 7978903216036057465} + - component: {fileID: 7843748828331678968} + m_Layer: 0 + m_Name: Object002 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &4845763819384369550 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6195576437767381461} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!23 &4848915385551373861 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1300198234708068701} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: d5d22b6e25b0d2247ab653afa9527dc3, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!4 &4852742056935672400 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5265529492363797614} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.36265182, y: -0.3269931, z: 1.1061763} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3770678087962219897} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &4853754692646104381 MonoBehaviour: m_ObjectHideFlags: 0 @@ -199196,6 +218380,112 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_AllowSwitchOff: 0 +--- !u!4 &4853988774009750192 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7926761718242860202} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.25604847, y: 0.24984208, z: -0.28685233} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 31 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4854737110433542296 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 579719431562664659} + - component: {fileID: 8410910735776109502} + - component: {fileID: 3525655432525547181} + m_Layer: 0 + m_Name: Box006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &4856800480990127822 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6439165146595739811} + - component: {fileID: 4985773546269805533} + - component: {fileID: 6448522453842708850} + m_Layer: 0 + m_Name: Box041 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &4888023745873185421 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1649099664867544110} + m_Mesh: {fileID: 7404775158862943375, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} +--- !u!23 &4889302421590272952 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3488200520186256781} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 5d67d5e43daa72d4fade2fe649b7271d, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &4889408967884658717 GameObject: m_ObjectHideFlags: 0 @@ -199214,12 +218504,568 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!4 &4891751735058001048 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7943155150887700513} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.15544814, y: 0.24802452, z: -0.264} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4893090278056692183 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5236682523249791853} + m_Layer: 0 + m_Name: 4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4906297013069699892 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6242044621431328335} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.19767565, y: 0.24802452, z: -0.35262305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4917751871732915337 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8091439188677783062} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.10173249, y: 0.07281191, z: -0.13957444} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5119118449912238514} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4919009123041725134 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2132968361617238727} + - component: {fileID: 42808976294637933} + - component: {fileID: 1868713662942153127} + m_Layer: 0 + m_Name: Box012 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &4919495509416643900 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6446522587620495497} + - component: {fileID: 2583077843571017030} + - component: {fileID: 9176219176976619630} + m_Layer: 0 + m_Name: Object008 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &4921251967180961971 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1215812462017393483} + - component: {fileID: 2486497838140722879} + - component: {fileID: 5751327519124519861} + m_Layer: 0 + m_Name: Object001 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &4923741668615394644 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8963393027790772765} + m_Mesh: {fileID: -2542006481543278910, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &4928169928046934665 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8473647221216634679} + 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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!23 &4936659889202521757 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2217289653029356006} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 12707a2485d75c049960ca128333c9a7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, 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!4 &4938458197045745735 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8531757282900714480} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.009289239, y: 0.24802452, z: -0.35262305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4939670177429340108 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6651139273481998183} + m_Mesh: {fileID: -1824271642593903451, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!1 &4944263795593830235 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1741042420636415517} + - component: {fileID: 2786960479649588600} + - component: {fileID: 4495661342975143383} + m_Layer: 0 + m_Name: Box035 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &4947624571732031007 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2122173463145584150} + - component: {fileID: 32295269339450812} + - component: {fileID: 1803036089155073398} + m_Layer: 0 + m_Name: Box012 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &4954485419776656090 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7723473993169897322} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!4 &4971304715228793319 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3653192884985232781} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.13251702, y: 0.43346125, z: -0.31663662} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4976616527273348377 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5646298911603103651} + m_Layer: 0 + m_Name: 79 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!23 &4983027772690878936 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6044888633743933827} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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 &4985773546269805533 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4856800480990127822} + m_Mesh: {fileID: 7463243275869744982, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} +--- !u!4 &4988691418503110095 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7676606064685151119} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.25114256, y: 0.225, z: -0.31184724} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7906200256174459245} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4992232393358038310 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6429021161417711494} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.022107743, y: 0.24984208, z: -0.2868524} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 21 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4995430679338781288 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7302598657818655062} + - component: {fileID: 9111152843872113543} + - component: {fileID: 6281244838763935973} + m_Layer: 0 + m_Name: Object004 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!4 &4999192147370920011 stripped Transform: m_CorrespondingSourceObject: {fileID: 5248313006963440167, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &5006523667464557770 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4333084451637261098} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: e33e8e143de68ea419d74e4d6b23e139, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!4 &5006654848418250913 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6361368783599918356} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.111901805, y: 0.225, z: -0.25532228} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &5007368932709486588 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6651139273481998183} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.28863817, y: 0.24984208, z: -0.28685233} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 22 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &5011044302983516067 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5972527458311553597} + m_LocalRotation: {x: 0.00000009974802, y: 0.00000009974802, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.021531833, y: 0.38048548, z: -0.15037024} + m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &5022066451324198518 stripped GameObject: m_CorrespondingSourceObject: {fileID: 7096519559687215251, guid: 32f862715729d804f8c707be223df6e8, @@ -199263,42 +219109,1429 @@ MonoBehaviour: original_shebei: [] search_u_wei: 0 is_jigui: 0 +--- !u!1 &5022954653524497893 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7639989839885581221} + - component: {fileID: 5205461738794618990} + - component: {fileID: 5994564232092004705} + m_Layer: 0 + m_Name: Box004 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5045265391102492059 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3378085402786782565} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.086409554, y: 0.012417968, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4425983708511861430} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &5051650033800480092 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4724068648691360525} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.038049847, y: 0.054237884, z: -0.13957438} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6057619421335938199} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &5053861088613354301 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7361613628902094851} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00032439828, y: 0.05017651, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3809797924624086003} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5057709754948982112 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8528640366697210713} + m_Mesh: {fileID: -888404026515264504, guid: fcc65de0395699040be81595ac8a1eda, type: 3} +--- !u!23 &5087220334088241662 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2811100467756406824} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: a59859105095c004c8e8ad289a6a9549, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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 &5089494251443998555 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7723473993169897322} + m_Mesh: {fileID: -3996760141626369306, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} +--- !u!33 &5089599487428258817 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3552412407257789931} + m_Mesh: {fileID: 347013164166513179, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!1 &5095427635514819069 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8868954554356402484} + - component: {fileID: 7611904803619648637} + - component: {fileID: 7163894946103023289} + m_Layer: 0 + m_Name: Object060 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &5105694411137273106 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6599151279000025688} + 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: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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 &5111281104677323991 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7899831805472295510} + m_Mesh: {fileID: 9186633843763367028, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} +--- !u!1 &5113022911475748972 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 277614928777414551} + - component: {fileID: 8863036202010555252} + - component: {fileID: 196416161712242048} + m_Layer: 0 + m_Name: Box113 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &5113618028428358572 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4527259733259660982} + 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: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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 &5117415434176588100 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3503271615980052326} + m_Mesh: {fileID: -831774524296487689, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!33 &5118181792722201921 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7409166699846018994} + m_Mesh: {fileID: 5884580939788738644, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} +--- !u!4 &5119118449912238514 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5494694698018310920} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1071332537007833359} + - {fileID: 4917751871732915337} + - {fileID: 1764086904773042888} + - {fileID: 2428071423387151439} + - {fileID: 8407898132636751386} + - {fileID: 3484013036154424278} + - {fileID: 8034722700517284240} + - {fileID: 6125228849817071737} + - {fileID: 4179383332225375903} + - {fileID: 1028261108207327675} + - {fileID: 6712900560902044911} + - {fileID: 3888638373423753596} + - {fileID: 2327377872884331768} + - {fileID: 1058227826590483219} + m_Father: {fileID: 1023018615} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5134682049071483145 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4304723977206038446} + m_Mesh: {fileID: 4071154032785273126, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} --- !u!1 &5139043046975615370 stripped GameObject: m_CorrespondingSourceObject: {fileID: 5396718038630613990, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &5148581594664715711 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8566791999311775194} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!23 &5158428271954741366 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3757324180360625731} + 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} + 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!1 &5159260414682662475 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7619539335691495164} + - component: {fileID: 8792142011003005829} + - component: {fileID: 5314448997444245545} + m_Layer: 0 + m_Name: Object013 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &5162148437429601180 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7718340111312760111} + m_Mesh: {fileID: 5924061002115919974, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} +--- !u!33 &5165085393129352853 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6208757736871335525} + m_Mesh: {fileID: 7733717212360752527, guid: 1e0b029320fe5914d98621193276e076, type: 3} +--- !u!4 &5172146364511432980 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3569110854255281534} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.25110626, y: 0.575884, z: -0.15037027} + m_LocalScale: {x: 1, y: 1, z: 1.5098631} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5179236774481503921 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 588881027163219314} + - component: {fileID: 3850488230485927411} + - component: {fileID: 8518974993491105394} + m_Layer: 0 + m_Name: Box008 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5183046070246721810 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5523155164799308712} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5867245710141631593} + - {fileID: 7346858454746687996} + - {fileID: 7911355440833147624} + - {fileID: 3823578161216532956} + - {fileID: 2354153570544086104} + - {fileID: 9187504741452866015} + m_Father: {fileID: 1023018615} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &5183796066320692063 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2153128574984827968} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.06436288, y: 0.108672604, z: -0.013490637} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &5191697127396671897 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2025624515875773443} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 5c8cedf3f5a458546a2bf464a001dc24, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 9c4dff57059c90a469f7b4338b1c47d6, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 10ac57f42847b114584025b79f149fd9, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, 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!1 &5192680249046045524 stripped GameObject: m_CorrespondingSourceObject: {fileID: 5018533041589117240, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &5195616912805320274 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4311388860168092007} + - component: {fileID: 7319550810674667107} + - component: {fileID: 7490645742780552162} + m_Layer: 0 + m_Name: Object002 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &5200016497843652215 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7503406004146648393} + - component: {fileID: 8288927844621246360} + - component: {fileID: 6508273407647315194} + m_Layer: 0 + m_Name: Object004 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &5204326859759102927 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4333084451637261098} + m_Mesh: {fileID: 6632251951820118909, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!4 &5204373779751186532 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8262089993959180131} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.18044168, y: 0.013047919, z: -0.13957441} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5273522604940259271} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5205461738794618990 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5022954653524497893} + m_Mesh: {fileID: -5613867604693661769, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} --- !u!4 &5212205269300751353 stripped Transform: m_CorrespondingSourceObject: {fileID: 5035036518242998677, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &5228341062831972069 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 633950419267998548} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.21594346, y: 0.24848777, z: -0.31173322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &5230319942120094463 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3694474294739738027} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: bae9d112f2ddd7345967d041e1189ddc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 90091843de6415b44929abd7f9c033bd, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &5234729075344366701 stripped GameObject: m_CorrespondingSourceObject: {fileID: 8029758154145143432, guid: 32f862715729d804f8c707be223df6e8, type: 3} m_PrefabInstance: {fileID: 2867121862218958565} m_PrefabAsset: {fileID: 0} +--- !u!4 &5236682523249791853 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4893090278056692183} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6928802799847781467} + - {fileID: 8964759181689621414} + - {fileID: 7688989422234563459} + - {fileID: 7100848580942899351} + - {fileID: 6486990108774396866} + - {fileID: 4202311342512024483} + - {fileID: 3452622375424226855} + - {fileID: 8124807159033985952} + - {fileID: 1592636835949095711} + - {fileID: 74652991817908684} + - {fileID: 5609590798881525557} + - {fileID: 6158766605997465137} + - {fileID: 2059429224419488758} + - {fileID: 1966379677842855408} + - {fileID: 1334051829595180985} + m_Father: {fileID: 1023018615} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5245200419653505679 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1713827556576725034} + m_Mesh: {fileID: 4944557015945844418, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &5259002078165674857 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5302721503947249987} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 90091843de6415b44929abd7f9c033bd, 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!23 &5262063878297031744 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5672769596110580889} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 90091843de6415b44929abd7f9c033bd, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &5265529492363797614 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4852742056935672400} + - component: {fileID: 6726127944552982664} + - component: {fileID: 2442673323378080289} + m_Layer: 0 + m_Name: Box164 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5273522604940259271 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4784089935395468669} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 502957451211378030} + - {fileID: 5339807359172158204} + - {fileID: 3429400808450069050} + - {fileID: 6567581871650901516} + - {fileID: 3757608727459750122} + - {fileID: 2073813873393652818} + - {fileID: 4809293693381046559} + - {fileID: 812882246250734175} + - {fileID: 5204373779751186532} + - {fileID: 9128294410946011028} + m_Father: {fileID: 1023018615} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &5276871491453221500 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1483904437908715797} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 5810c1fb761a3b54bb6ed561512ebb66, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &5276949739857516263 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4248256240266574290} + - component: {fileID: 7256903698405023446} + - component: {fileID: 7410085240807609175} + m_Layer: 0 + m_Name: Object002 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &5280865353733732388 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7981909895979670124} + - component: {fileID: 4143698795875513248} + - component: {fileID: 3241549465504384232} + m_Layer: 0 + m_Name: Box010 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &5284705378043499702 stripped GameObject: m_CorrespondingSourceObject: {fileID: 4963663400191682266, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &5297976311284399593 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7293754100010455898} + m_Mesh: {fileID: 5924061002115919974, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} +--- !u!23 &5300260420462798199 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457799320611601031} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &5302721503947249987 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8874600426198970924} + - component: {fileID: 3075227542237103840} + - component: {fileID: 5259002078165674857} + m_Layer: 0 + m_Name: Box243 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &5310344990097293916 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6256545326919243085} + - component: {fileID: 2595791147971330552} + - component: {fileID: 5360527493131711581} + m_Layer: 0 + m_Name: 7 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &5314448997444245545 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5159260414682662475} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 8f90791e5f8f9f04d9bc0ad29fb6a2b7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!4 &5316446054664399769 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8845008923284062051} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.03773886, y: 0.26294157, z: -0.06132862} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7799699611165651300} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &5316508390324001763 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4779187036017809637} + 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: bf08642db26615b4c863bb870ac7069a, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 3647e3076d0cde84ba812d988cdeae36, 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!1 &5318313262285206973 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4793414471054946055} + m_Layer: 0 + m_Name: 94 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!33 &5323440045719263897 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7236833969747382952} + m_Mesh: {fileID: -3996760141626369306, guid: 38d78f271938d6c4686b952b3257872c, type: 3} --- !u!4 &5333849665197315773 stripped Transform: m_CorrespondingSourceObject: {fileID: 5165864172680209617, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &5337753805782958427 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6371363758697804758} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!23 &5337834311660681333 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2649767556843636822} + 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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!4 &5339807359172158204 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9110503696563589219} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.18044168, y: 0.054900806, z: -0.13957441} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5273522604940259271} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5342501064841053773 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5938031625194285682} + - component: {fileID: 6603264282347667133} + - component: {fileID: 2610950931335273755} + m_Layer: 0 + m_Name: Object007 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &5351353183967000521 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5651684927277389445} + m_Mesh: {fileID: 6208577394401419162, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} +--- !u!23 &5360527493131711581 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5310344990097293916} + 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: 2f722a70dff0aa04d96fe8cbd8980554, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &5364191963702748713 GameObject: m_ObjectHideFlags: 0 @@ -199315,6 +220548,32 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!1 &5371065394825024811 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8835773339747471208} + - component: {fileID: 1277903893155089210} + - component: {fileID: 6856461966048367061} + m_Layer: 0 + m_Name: Box034 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &5375217557309989035 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 760397113021607748} + m_Mesh: {fileID: 4236268024495968267, guid: 837e03a60f341e14da656441a8653493, type: 3} --- !u!1 &5378414134941393521 stripped GameObject: m_CorrespondingSourceObject: {fileID: 5122428076142514205, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -199327,12 +220586,53 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &5382298243707610264 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8632740539258045281} + - component: {fileID: 4562743998978187406} + - component: {fileID: 8365561597116471248} + m_Layer: 0 + m_Name: Object093 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &5390758691002779481 stripped GameObject: m_CorrespondingSourceObject: {fileID: 5150605514517476661, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &5396514946799468102 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 121785957508862989} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.27193183, y: 0.2552515, z: -0.26399994} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 915489601676210998} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5397118847613647122 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1638635161337710702} + m_Mesh: {fileID: -7061585933124598971, guid: 485c2b00c505121468e2d20910842a74, type: 3} --- !u!1 &5400683810102586914 stripped GameObject: m_CorrespondingSourceObject: {fileID: 5135906040985377870, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -199345,6 +220645,228 @@ Transform: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &5407380718736813425 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2278331528479237769} + - component: {fileID: 3296912099640236925} + - component: {fileID: 4652778487529188983} + m_Layer: 0 + m_Name: Object001 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &5430071546721173474 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8557380105347732012} + m_Mesh: {fileID: 2871469715313346890, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} +--- !u!33 &5431178761554504139 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7631426916412824671} + m_Mesh: {fileID: 5543223464761085638, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} +--- !u!23 &5440615219287693080 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7236833969747382952} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 2f7ae9a990b9e4942b084ce4d337db78, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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 &5448541536532941724 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2593290596200521910} + m_Mesh: {fileID: 4154864533425439726, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} +--- !u!23 &5448654545917992470 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 421916328940683477} + 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: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!4 &5455113164789638678 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862024226826759079} + m_LocalRotation: {x: 0.00000009974802, y: 0.00000009974802, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.03655179, y: 0.38048548, z: -0.15646511} + m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5456720332183141153 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9094953043089191624} + m_Mesh: {fileID: 2561127810642175325, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!1 &5462125688595502133 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5479611474968673267} + - component: {fileID: 328256524805099022} + - component: {fileID: 9097029327218822659} + m_Layer: 0 + m_Name: Object037 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &5463981427958865705 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6429946933118826056} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!222 &5466601489381078698 CanvasRenderer: m_ObjectHideFlags: 0 @@ -199353,6 +220875,21 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3682763283532873166} m_CullTransparentMesh: 1 +--- !u!4 &5479611474968673267 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5462125688595502133} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.24984208, z: 0.00000014901161} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &5481028434914630740 stripped Transform: m_CorrespondingSourceObject: {fileID: 4730455576030457400, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -199365,12 +220902,400 @@ Transform: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &5494694698018310920 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5119118449912238514} + m_Layer: 0 + m_Name: 34 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!23 &5499151637866408829 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6784895067805768176} + 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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!23 &5510592256553908782 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6552748430376844215} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 5f143fba79a381e41ab2028dac95e148, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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 &5511036507447838320 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7829693187047217714} + m_Mesh: {fileID: -293825477841229588, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!1 &5511872093928264165 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8964759181689621414} + - component: {fileID: 1678654236555137012} + - component: {fileID: 6471894933790905627} + m_Layer: 0 + m_Name: Box034 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &5512036573161563212 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6537598814469911575} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 71ae97cc47eccf74fb2426282f1c2b06, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 8152f8e0ac8971c41b4220f9693019f4, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!1 &5523155164799308712 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5183046070246721810} + m_Layer: 0 + m_Name: 21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 --- !u!1 &5530649701282454787 stripped GameObject: m_CorrespondingSourceObject: {fileID: 4716854869068541807, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &5548939216971235595 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6063678731792740905} + m_Mesh: {fileID: -1444909868921906229, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} +--- !u!1 &5549919649637784554 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7676756416763443618} + - component: {fileID: 4453287705538072686} + - component: {fileID: 2931963871622506278} + m_Layer: 0 + m_Name: Box010 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &5555929885796966145 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 323972406642997920} + - component: {fileID: 2883026398815100884} + - component: {fileID: 7166243840443472547} + m_Layer: 0 + m_Name: Box074 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5570360006201956636 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1483904437908715797} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.104245864, y: 0.225, z: -0.31184724} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7906200256174459245} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &5571208711157370866 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5651684927277389445} + 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: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!4 &5579450520223537816 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8726846845466028039} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.14686552, y: 0.18, z: -0.028926678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &5591659367985251104 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9094953043089191624} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.22345866, y: 0.24984208, z: -0.28685236} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 29 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &5593234048139992093 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9077056872123818853} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.060510367, y: 0.24984208, z: -0.2836551} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 32 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &5593526352231464541 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3980650189557247136} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 16.83917, y: 1.1187189, z: -12.72845} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 543450652676794594} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5597023365617710053 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6707835898968011355} + - component: {fileID: 6077889266420294333} + - component: {fileID: 8899928440956982172} + m_Layer: 0 + m_Name: Box064 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!224 &5598660923179073270 RectTransform: m_ObjectHideFlags: 0 @@ -199392,6 +221317,513 @@ RectTransform: m_AnchoredPosition: {x: 100, y: 0} m_SizeDelta: {x: 100, y: 100} m_Pivot: {x: 0.5, y: 0.5} +--- !u!23 &5600139209114741586 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6177308399937688859} + 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: 468ad295664494e4d82ea298061373c6, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!23 &5605626896649617279 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6855353250331612702} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!4 &5609590798881525557 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1713827556576725034} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.062375322, y: 0.07218541, z: -0.24493845} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5236682523249791853} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5611126726554875648 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4724068648691360525} + m_Mesh: {fileID: -8672714952799723808, guid: 837e03a60f341e14da656441a8653493, type: 3} +--- !u!4 &5627556812929080769 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4630962058400143824} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00000011920929, y: 0.063566506, z: -0.26400006} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5629526132366796786 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 523618035779240531} + - component: {fileID: 3114285079704463143} + - component: {fileID: 6938116516513653328} + m_Layer: 0 + m_Name: Box074 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &5629890113109684660 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8528640366697210713} + 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: 2f722a70dff0aa04d96fe8cbd8980554, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!4 &5634914221528484298 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 760397113021607748} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.038049847, y: 0.098275736, z: -0.13957438} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6057619421335938199} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &5642259907068959719 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9029231735876566157} + m_LocalRotation: {x: 0.00000009974802, y: 0.00000009974802, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2673638, y: 0.38048548, z: -0.15037024} + m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 22 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5642291632030127447 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4432343607247141474} + - component: {fileID: 7188797217027317094} + - component: {fileID: 7035720789788676327} + m_Layer: 0 + m_Name: Object002 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &5644702289709624144 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8035486276462600611} + m_Mesh: {fileID: 5884580939788738644, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} +--- !u!4 &5646298911603103651 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4976616527273348377} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4590001184475023579} + - {fileID: 3546130496742648000} + - {fileID: 1484014329513394604} + - {fileID: 8372158606750062719} + - {fileID: 183628042510612748} + - {fileID: 579719431562664659} + - {fileID: 1319419804534128110} + - {fileID: 3029348953197017133} + - {fileID: 1422579493519046399} + - {fileID: 5579450520223537816} + - {fileID: 7408558085279866753} + - {fileID: 886140722217932970} + - {fileID: 5768528703685589595} + - {fileID: 6651890067172226664} + - {fileID: 3697819323328796814} + - {fileID: 8835773339747471208} + - {fileID: 1741042420636415517} + - {fileID: 7736968233443259329} + - {fileID: 510160123048615850} + - {fileID: 6086736478778161918} + - {fileID: 7509965059991365691} + - {fileID: 6172710325168157242} + m_Father: {fileID: 1023018615} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5648046270585234273 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 421916328940683477} + m_Mesh: {fileID: 7875615444233757513, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} +--- !u!4 &5649115237659343450 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6208757736871335525} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.0071395678, y: 0.15764228, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1212578399471534632} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5651684927277389445 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4590001184475023579} + - component: {fileID: 5351353183967000521} + - component: {fileID: 5571208711157370866} + m_Layer: 0 + m_Name: 79 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &5658756222763214210 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4709865978187784193} + m_Mesh: {fileID: 7039355258290517440, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!1 &5661099046580466121 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6258881646200217078} + - component: {fileID: 6852123609865849145} + - component: {fileID: 2346329185778313887} + m_Layer: 0 + m_Name: Object007 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &5662757439411555094 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6786288907521493672} + - component: {fileID: 6297080037665659470} + - component: {fileID: 8698805179052780399} + m_Layer: 0 + m_Name: Box064 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &5668426043425954524 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1365074971643505568} + m_Mesh: {fileID: -7061585933124598971, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} +--- !u!1 &5672769596110580889 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7280017578944300568} + - component: {fileID: 2077520418800532086} + - component: {fileID: 5262063878297031744} + m_Layer: 0 + m_Name: Box229 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &5679117880093813222 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2339494001296718446} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!23 &5710285417071567534 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8978479936146953350} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: f63d38aa595b8f84f81be292eb3df3b2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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 &5711015653419564675 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8039506443400454849} + m_Mesh: {fileID: -293825477841229588, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} --- !u!1 &5717691229373839562 stripped GameObject: m_CorrespondingSourceObject: {fileID: 4822268865437813414, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -199679,12 +222111,185 @@ Transform: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &5727205121244479145 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8029990441527463319} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.064340964, y: 0.0010635629, z: -0.26500002} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4433488523220862567} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5728985886515349564 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 348356212311089783} + - component: {fileID: 8676045186201103130} + - component: {fileID: 4337998946626043401} + m_Layer: 0 + m_Name: Box006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &5751327519124519861 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4921251967180961971} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 8ebcd64b45bff024fb4dbb50772a30b3, 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!4 &5754246669169074610 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7351981880541388576} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.09309986, y: 0.24984208, z: -0.2836551} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 35 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &5761595076227672547 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8512543724490368639} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 85d8935cccb058843808452d51e4980c, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 0d549e2f2b0754b4ca1906386e1e03e6, 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!1 &5764294792194486484 stripped GameObject: m_CorrespondingSourceObject: {fileID: 4777071844208116408, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &5768528703685589595 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8692419208758522048} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.059053473, y: 0.18, z: -0.028926678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5768971810611009994 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1422579493519046399} + - component: {fileID: 8928454486589936169} + - component: {fileID: 4179486113664919254} + m_Layer: 0 + m_Name: Box023 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &5769346755244574362 GameObject: m_ObjectHideFlags: 0 @@ -199703,6 +222308,117 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 0 +--- !u!1 &5776162854793565723 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6928802799847781467} + - component: {fileID: 1012271914439240116} + - component: {fileID: 486799963001394292} + m_Layer: 0 + m_Name: 4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5778018474685550504 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7803714194037177980} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.17569539, y: 0.108672604, z: -0.013490637} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5778610670876094685 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7757593451235258320} + m_Mesh: {fileID: -3243264717552843444, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} +--- !u!33 &5786035959487201974 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1483904437908715797} + m_Mesh: {fileID: -8586770294792153069, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} +--- !u!23 &5790918195973667669 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4766314944147687896} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!1 &5792253641730294748 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 426601992095297194} + - component: {fileID: 800642684989677192} + - component: {fileID: 4794648585703860925} + m_Layer: 0 + m_Name: Object006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!4 &5805941781807892680 stripped Transform: m_CorrespondingSourceObject: {fileID: 6712522133910289060, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -199799,6 +222515,82 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!33 &5824220666716279711 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1208700899746765936} + m_Mesh: {fileID: 4236268024495968267, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} +--- !u!33 &5827963710115183696 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6679101523190245469} + m_Mesh: {fileID: -8672714952799723808, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} +--- !u!23 &5830415014812554437 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7532155278205757499} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!1 &5833495022044831191 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8715008456750555355} + - component: {fileID: 1631360652765899204} + - component: {fileID: 771052192141343404} + m_Layer: 0 + m_Name: Box003 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &5841642298390919022 stripped GameObject: m_CorrespondingSourceObject: {fileID: 6675703139193439490, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -199823,30 +222615,594 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!1 &5864196581781719830 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7879906452451515461} + - component: {fileID: 7796713106143264320} + - component: {fileID: 3059762250007849479} + m_Layer: 0 + m_Name: Box230 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &5865759936211722409 stripped GameObject: m_CorrespondingSourceObject: {fileID: 6688460690484056773, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &5867245710141631593 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4416095503768469722} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.178} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5183046070246721810} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5873483391673545035 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2471743200016686718} + - component: {fileID: 8938520073114614138} + - component: {fileID: 9109755749820822779} + m_Layer: 0 + m_Name: Object002 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &5881314079525971784 stripped GameObject: m_CorrespondingSourceObject: {fileID: 8526598161923793325, guid: 32f862715729d804f8c707be223df6e8, type: 3} m_PrefabInstance: {fileID: 2867121862218958565} m_PrefabAsset: {fileID: 0} +--- !u!1 &5891419330389572559 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3012027780209739970} + - component: {fileID: 6505483927148982575} + - component: {fileID: 6998265488474427661} + m_Layer: 0 + m_Name: Box076 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5898984544599424917 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8856436567294375154} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.178} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3659111854849921957} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &5906018327896702021 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6063678731792740905} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.2735296, y: 0.225, z: -0.25532228} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &5910308924298775526 stripped GameObject: m_CorrespondingSourceObject: {fileID: 6895240543434914186, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &5912488856469920801 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7570714709245118835} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 08aec02b05227464da482d3d32a8bb44, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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 &5915296832130562858 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4615722023303933012} + m_Mesh: {fileID: 8032957209167335391, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} +--- !u!1 &5920541432860883173 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1627972740210597483} + - component: {fileID: 1313960197208848138} + - component: {fileID: 6158145920660965314} + m_Layer: 0 + m_Name: Box038 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &5923441206816870849 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3223185449976503926} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!4 &5931276165114548347 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7067225659508010435} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.27545613, y: 0.69446886, z: -0.38488317} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &5933189493251017444 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7666969399970483} + 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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!4 &5938031625194285682 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5342501064841053773} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.14408177, y: 0.225, z: -0.25532228} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5950799609685628456 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6125228849817071737} + - component: {fileID: 6828730098247942693} + - component: {fileID: 8915816713074476189} + m_Layer: 0 + m_Name: Box032 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &5959208433255675803 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6282703367779878755} + - component: {fileID: 1211043424239055640} + - component: {fileID: 8251406237855782913} + m_Layer: 0 + m_Name: Box124 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &5963811906674618909 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3749716593025811473} + m_Mesh: {fileID: -3292925553009838691, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!23 &5965827121450853043 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7718340111312760111} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 7b34137f09d06bd4fad7b29c4908318b, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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 &5966974585909012973 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6119991776310192672} + m_Mesh: {fileID: -3966545228067385281, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!1 &5972527458311553597 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5011044302983516067} + - component: {fileID: 4020357366014664248} + - component: {fileID: 421361441324719482} + m_Layer: 0 + m_Name: Box070 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &5976014620614738018 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 176848059630947367} + m_Mesh: {fileID: 914051726605392165, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} +--- !u!1 &5978597022961926972 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3095775823087890481} + - component: {fileID: 6445398535828244956} + - component: {fileID: 7071897821426952702} + m_Layer: 0 + m_Name: Box076 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &5981331084556819764 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6882405772256995503} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 5d67d5e43daa72d4fade2fe649b7271d, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!4 &5983690154008828839 stripped Transform: m_CorrespondingSourceObject: {fileID: 6827215585225189835, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &5987472825976099890 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6447666010706985083} + - component: {fileID: 9091490941096606180} + - component: {fileID: 2378828584065714036} + m_Layer: 0 + m_Name: Object026 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &5990634139017873602 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2329738960836366798} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 5f143fba79a381e41ab2028dac95e148, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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 &5991386826989676301 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3221439188117030330} + m_Mesh: {fileID: 6715375062900545627, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} --- !u!114 &5993285536551026436 MonoBehaviour: m_ObjectHideFlags: 0 @@ -199895,6 +223251,258 @@ MonoBehaviour: m_PersistentCalls: m_Calls: [] m_IsOn: 0 +--- !u!23 &5994564232092004705 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5022954653524497893} + 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: 2841219563373173654, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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 &5995368188141869826 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8813869938260743026} + m_Mesh: {fileID: 2969732625113774183, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} +--- !u!1 &6013860696704019689 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2358247032580801500} + - component: {fileID: 9149987141807482072} + - component: {fileID: 8978791037720209753} + m_Layer: 0 + m_Name: Object002 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6016534104643877689 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 327535401730976238} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: -0.2172461} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1293103158491988637} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &6021168244238094378 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6197296529126548892} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.20059577, y: 0.69446886, z: -0.3848831} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &6023949079192016569 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6044888633743933827} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00032439828, y: 0.11210428, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3809797924624086003} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &6026437767624053236 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8996671156534724777} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 337b7b86ff029e845b90fbeefc8dec55, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &6033332132712483143 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 696733660428963416} + - component: {fileID: 916693024935924706} + - component: {fileID: 8736307116033694183} + m_Layer: 0 + m_Name: Object009 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &6039515006544750705 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 702934203802038126} + - component: {fileID: 923983454865519316} + - component: {fileID: 8743598443594610897} + m_Layer: 0 + m_Name: Object009 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &6042826853073427018 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 203290574165625749} + m_Mesh: {fileID: -6567773755233495677, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} +--- !u!1 &6044888633743933827 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6023949079192016569} + - component: {fileID: 8695604351272324866} + - component: {fileID: 4983027772690878936} + m_Layer: 0 + m_Name: Object005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6057619421335938199 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6871134483744833069} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7921698360936052399} + - {fileID: 6279533672814193068} + - {fileID: 820064623976568813} + - {fileID: 3650169452652271978} + - {fileID: 7472849550347952959} + - {fileID: 2541029349415862003} + - {fileID: 8978821300702096565} + - {fileID: 5051650033800480092} + - {fileID: 2961707330488363962} + - {fileID: 2116447565378137246} + - {fileID: 5634914221528484298} + - {fileID: 2804907077140913241} + - {fileID: 3699353082955121117} + - {fileID: 2140805518179612214} + m_Father: {fileID: 1023018615} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!222 &6057742326893196901 CanvasRenderer: m_ObjectHideFlags: 0 @@ -199903,6 +223511,200 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6187136399097522980} m_CullTransparentMesh: 1 +--- !u!1 &6063678731792740905 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5906018327896702021} + - component: {fileID: 5548939216971235595} + - component: {fileID: 7650350041281341889} + m_Layer: 0 + m_Name: Object020 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &6064845507331349562 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6242044621431328335} + m_Mesh: {fileID: -496025733953617223, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!33 &6068705287512167048 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6197296529126548892} + m_Mesh: {fileID: -3025179133607064014, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!33 &6075718811529081832 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3660518367769324317} + m_Mesh: {fileID: -1405206685389513613, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &6075814720519264553 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 833519830865367788} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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 &6075994999166391416 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8029990441527463319} + m_Mesh: {fileID: -8113768720884857512, guid: 38d78f271938d6c4686b952b3257872c, type: 3} +--- !u!33 &6077889266420294333 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5597023365617710053} + m_Mesh: {fileID: 7413444807456324831, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!33 &6080881401253027752 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2804713048647195882} + m_Mesh: {fileID: 1226723149311242300, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} +--- !u!33 &6086634951677234190 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7943155150887700513} + m_Mesh: {fileID: -6612900964092521861, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!4 &6086736478778161918 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1208700899746765936} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.1446787, y: 0.18, z: -0.028926678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &6090293816297984129 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1012856552372630462} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 7b45dc31b7c7d754bbc4f38e07733858, type: 2} + - {fileID: 2100000, guid: 6875b4493ed788d4789042aba4880050, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 3e633f3da7f6c1c46a05ea105f130727, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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 &6090976738227987041 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862024226826759079} + m_Mesh: {fileID: -4787829685061339440, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} --- !u!222 &6100040060135315016 CanvasRenderer: m_ObjectHideFlags: 0 @@ -199929,12 +223731,374 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!23 &6113073502182488245 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3083090457026954727} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: e33e8e143de68ea419d74e4d6b23e139, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, 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!1 &6119991776310192672 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8546069140785211922} + - component: {fileID: 5966974585909012973} + - component: {fileID: 1617103251665617851} + m_Layer: 0 + m_Name: Box144 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6125228849817071737 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5950799609685628456} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.038049847, y: 0.07281295, z: -0.13957444} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5119118449912238514} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6128233052755535475 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 690954537832693631} + - component: {fileID: 3407518628962432147} + - component: {fileID: 781708937066681677} + m_Layer: 0 + m_Name: Box067 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!4 &6131230253691308822 stripped Transform: m_CorrespondingSourceObject: {fileID: 6387216379078998394, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &6140356799873664719 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2808353527271729658} + - component: {fileID: 8698741552001158910} + - component: {fileID: 8851958562342044543} + m_Layer: 0 + m_Name: Object002 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &6157634964346081690 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7409166699846018994} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: a59859105095c004c8e8ad289a6a9549, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!23 &6158145920660965314 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5920541432860883173} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 383fafd25d521744a8a6f2b358485b65, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 5c8cedf3f5a458546a2bf464a001dc24, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, 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!4 &6158766605997465137 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6969270958239123771} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.062375322, y: 0.044035442, z: -0.24493845} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5236682523249791853} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &6161351020287178479 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6195576437767381461} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.03692468, y: 0.10167441, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3659111854849921957} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &6170623916318069746 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8662556775601516223} + m_LocalRotation: {x: 0.00000009974802, y: 0.00000009974802, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.23851234, y: 0.38048548, z: -0.15037024} + m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &6172710325168157242 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2811100467756406824} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.26236624, y: 0.18, z: -0.028926678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 21 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6177308399937688859 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2784852789078826112} + - component: {fileID: 6764260614302814036} + - component: {fileID: 5600139209114741586} + m_Layer: 0 + m_Name: Object030 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &6178408754930506455 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7812042621114766667} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: a59859105095c004c8e8ad289a6a9549, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!4 &6184115942399303274 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4615722023303933012} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.110568486, y: 0.26294157, z: -0.06132862} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7799699611165651300} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &6187136399097522980 GameObject: m_ObjectHideFlags: 0 @@ -199953,36 +224117,632 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!4 &6187779589399219151 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1441940722142240043} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.30076832, y: 0.38048548, z: -0.15646511} + m_LocalScale: {x: 1, y: 1, z: 1.5098631} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &6195159911560758004 stripped Transform: m_CorrespondingSourceObject: {fileID: 6362692402040844440, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &6195576437767381461 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6161351020287178479} + - component: {fileID: 9129966087588327252} + - component: {fileID: 4845763819384369550} + m_Layer: 0 + m_Name: Object005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &6197296529126548892 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6021168244238094378} + - component: {fileID: 6068705287512167048} + - component: {fileID: 3252816418355159115} + m_Layer: 0 + m_Name: Object021 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &6198255907163431199 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7073735569604066248} + - component: {fileID: 7632236234171099314} + - component: {fileID: 322558729258144945} + m_Layer: 0 + m_Name: Box231 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &6208757736871335525 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5649115237659343450} + - component: {fileID: 5165085393129352853} + - component: {fileID: 4050537221472980275} + m_Layer: 0 + m_Name: Object007 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &6210854786555371136 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 769125453927663500} + - component: {fileID: 3202983853055741024} + - component: {fileID: 712563632952339902} + m_Layer: 0 + m_Name: Box067 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &6228228437856019910 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8446911348340682208} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 90091843de6415b44929abd7f9c033bd, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!4 &6239962930915109633 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8866793296958477900} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.3463238, y: 0.24848777, z: -0.31173322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6242044621431328335 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4906297013069699892} + - component: {fileID: 6064845507331349562} + - component: {fileID: 1373056841944308930} + m_Layer: 0 + m_Name: Box111 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &6246318915910889846 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9070352783791423479} + m_Mesh: {fileID: 9186633843763367028, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} --- !u!1 &6250445166806562836 stripped GameObject: m_CorrespondingSourceObject: {fileID: 6560470158390233720, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &6256545326919243085 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5310344990097293916} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.178} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1935563662030491015} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &6258881646200217078 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5661099046580466121} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.1665163, y: 0.69446886, z: -0.3160524} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &6261639809503753020 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1673216496195773912} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.15895194, y: 0.43346125, z: -0.31663662} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &6264267528335909526 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 50989320254078809} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!4 &6264946460797963988 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2593290596200521910} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.113357864, y: 0.225, z: -0.25532228} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6273110093332709059 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 945589268236564956} + - component: {fileID: 580010578998076518} + - component: {fileID: 9045966899047018083} + m_Layer: 0 + m_Name: Object009 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6279533672814193068 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7156412003949927219} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.10146063, y: 0.05423507, z: -0.13957438} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6057619421335938199} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &6281244838763935973 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4995430679338781288} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!4 &6282703367779878755 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5959208433255675803} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.36265182, y: -0.3269931, z: 1.1061763} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1703509228846362467} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &6290918885489868538 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6615530699158997857} + 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} + 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 &6294439151321402736 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6970627061541678678} + m_Mesh: {fileID: 3822247309040838107, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} --- !u!4 &6295022562826128315 stripped Transform: m_CorrespondingSourceObject: {fileID: 6550797584166517207, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &6297080037665659470 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5662757439411555094} + m_Mesh: {fileID: 7413444807456324831, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} +--- !u!1 &6298233841963905885 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8422828877267112724} + - component: {fileID: 6966423953061811725} + - component: {fileID: 7594113083111514828} + m_Layer: 0 + m_Name: Box140 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &6299395591554108187 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3600204538948686830} + m_Mesh: {fileID: -1405206685389513613, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} +--- !u!33 &6303079347794060431 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9044312848110708135} + m_Mesh: {fileID: 3557879054105070054, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} --- !u!4 &6308596508388216605 stripped Transform: m_CorrespondingSourceObject: {fileID: 6501457349785861489, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &6311205756003386420 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6612429244472856633} + m_Mesh: {fileID: -8672714952799723808, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} +--- !u!33 &6317414158953206792 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3558383290287727108} + m_Mesh: {fileID: -3292925553009838691, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} +--- !u!33 &6322429258850949778 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 633950419267998548} + m_Mesh: {fileID: -4787829685061339440, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} +--- !u!23 &6322958283478198386 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 951626561130269517} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: dc5f0f285be51334abb02b539c88f62a, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: d3469d2b2aeaf7441b7b8f89a0def34f, 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!4 &6326493331588613809 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9208008555040226237} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.2876944, y: 0.225, z: -0.31184724} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7906200256174459245} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &6327293509436917911 stripped Transform: m_CorrespondingSourceObject: {fileID: 6519661908410645243, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &6334992391519182152 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8528640366697210713} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.178} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1704047503546810776} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!224 &6341353993803767183 RectTransform: m_ObjectHideFlags: 0 @@ -200004,18 +224764,760 @@ RectTransform: m_AnchoredPosition: {x: -669.7, y: 911.8} m_SizeDelta: {x: -1303.1125, y: -1040} m_Pivot: {x: 0.5, y: 0} +--- !u!23 &6345949726446210060 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3503271615980052326} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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 &6349949297923116413 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2990713899054760779} + m_Mesh: {fileID: -5243098771569098612, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} +--- !u!1 &6361368783599918356 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5006654848418250913} + - component: {fileID: 4599722994265773422} + - component: {fileID: 7157885107498534982} + m_Layer: 0 + m_Name: Object008 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &6361371558804201311 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9033540856855995764} + 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: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!4 &6362028920366019517 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8516660339158018761} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.22558922, y: 0.69446886, z: -0.3848831} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &6363966037847150052 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8531757282900714480} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, 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!1 &6371363758697804758 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8674213126204227816} + - component: {fileID: 7154430995161213497} + - component: {fileID: 5337753805782958427} + m_Layer: 0 + m_Name: Object004 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &6382190282940757493 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2217289653029356006} + m_Mesh: {fileID: 690106047850165013, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} +--- !u!23 &6383275425571315045 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8866793296958477900} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 3682ef365151e05408493b8abea14339, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 5ec7a4c1a7a6a2e4191a7adc8fe1fd50, 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!23 &6388502211825864685 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1638635161337710702} + 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} + 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!4 &6405949877407969947 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8557380105347732012} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.04899796, y: 0.225, z: -0.25532228} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6407066762435317367 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4476689411933714555} + m_Mesh: {fileID: -3292925553009838691, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!33 &6408918442609147521 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8856436567294375154} + m_Mesh: {fileID: 907094073435759743, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} +--- !u!4 &6410900087146649257 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1672084382166177130} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.13627979, y: 0.012417968, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4425983708511861430} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &6423529645288024171 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4164943118143414483} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &6429021161417711494 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4992232393358038310} + - component: {fileID: 8536752859872132001} + - component: {fileID: 4581910519338091069} + m_Layer: 0 + m_Name: Object049 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &6429946933118826056 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 914913610771503934} + - component: {fileID: 163678880806726428} + - component: {fileID: 5463981427958865705} + m_Layer: 0 + m_Name: Object006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6439165146595739811 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4856800480990127822} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00000011920929, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 915489601676210998} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &6439721731470711201 stripped GameObject: m_CorrespondingSourceObject: {fileID: 6119000811021642701, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &6443581700878871795 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3378085402786782565} + m_Mesh: {fileID: -8298940227465870776, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} +--- !u!33 &6445398535828244956 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5978597022961926972} + m_Mesh: {fileID: 7638646759786298271, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!4 &6446522587620495497 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4919495509416643900} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.0071395678, y: 0.12965834, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1212578399471534632} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &6447666010706985083 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5987472825976099890} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.3013275, y: 0.69446886, z: -0.38488317} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &6448522453842708850 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4856800480990127822} + 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: 3cef7456d5e5f7e47a42e41b81e6de2d, type: 2} + - {fileID: 2100000, guid: b710e325f8c745b448aea5256ff3912e, type: 2} + - {fileID: 2100000, guid: 5269f6b087e05ce40b1e7c1f68e4e27d, type: 2} + - {fileID: 2100000, guid: 8f3b3d668a5ea1b4999636d081276658, type: 2} + - {fileID: 2100000, guid: 0de60d192cfbb9449bb01343b6bcbfaf, type: 2} + - {fileID: 2100000, guid: 0af31e8eddfc367418b07daba4fffaae, 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 &6449898197827523982 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844020612036827745} + m_Mesh: {fileID: 4236268024495968267, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} --- !u!4 &6458812024700277166 stripped Transform: m_CorrespondingSourceObject: {fileID: 6059379212133950402, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &6468916597027166686 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8038241483963907492} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.13627979, y: 0.033658683, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4425983708511861430} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &6471894933790905627 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5511872093928264165} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 7c2ee9f6ddd789e4b91ad284adb51cfd, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!23 &6479126743816651941 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7500346433907542143} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!4 &6486990108774396866 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7378464799064900118} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.25370398, y: 0.24496675, z: -0.24493845} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5236682523249791853} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6505483927148982575 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5891419330389572559} + m_Mesh: {fileID: 7638646759786298271, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} +--- !u!23 &6508273407647315194 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5200016497843652215} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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 &6508525302089925776 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4567580947252627984} + m_Mesh: {fileID: -5312821651996014630, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} --- !u!114 &6510763878153440480 MonoBehaviour: m_ObjectHideFlags: 0 @@ -200046,6 +225548,55 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!33 &6520658260740628725 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8157641921699241316} + m_Mesh: {fileID: -53276876386812347, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} +--- !u!33 &6529109768410024140 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8512543724490368639} + m_Mesh: {fileID: 5924061002115919974, guid: 837e03a60f341e14da656441a8653493, type: 3} +--- !u!1 &6537598814469911575 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6539412003812598573} + - component: {fileID: 8211481876184529558} + - component: {fileID: 5512036573161563212} + m_Layer: 0 + m_Name: Object005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6539412003812598573 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6537598814469911575} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.01928386, y: 0.0010635629, z: -0.26500002} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4433488523220862567} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &6542104758909756353 MonoBehaviour: m_ObjectHideFlags: 0 @@ -200136,6 +225687,61 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!23 &6543945254591741014 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7722597679654154380} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 7b45dc31b7c7d754bbc4f38e07733858, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 78cc598740d404540a68493d4c70c520, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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!1 &6550617821253441329 GameObject: m_ObjectHideFlags: 0 @@ -200168,7 +225774,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 23 + m_RootOrder: 25 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &6550617821253441484 MeshRenderer: @@ -200326,12 +225932,235 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &6552748430376844215 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 401182475038260594} + - component: {fileID: 7019198768277087418} + - component: {fileID: 5510592256553908782} + m_Layer: 0 + m_Name: Object011 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &6562705391296512442 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6931441462515013717} + m_Mesh: {fileID: -8113768720884857512, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} +--- !u!4 &6567581871650901516 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6679101523190245469} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.1013807, y: 0.054900806, z: -0.13957441} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5273522604940259271} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6571380662821377258 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1484014329513394604} + - component: {fileID: 7762782220116509231} + - component: {fileID: 8428607777231745546} + m_Layer: 0 + m_Name: Box002 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &6581117059035032786 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3138435095622317562} + m_Mesh: {fileID: -6558347715830034149, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!4 &6582279449109523776 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3351215273339291299} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.24968523, y: 0.24802452, z: -0.35262305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &6597727926057542425 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9212091750557249371} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.14916092, y: 0.69446886, z: -0.3093446} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &6598713913784329203 stripped Transform: m_CorrespondingSourceObject: {fileID: 6207690150032675231, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &6599151279000025688 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 502957451211378030} + - component: {fileID: 6700774087286139945} + - component: {fileID: 5105694411137273106} + m_Layer: 0 + m_Name: 47 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &6603264282347667133 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5342501064841053773} + m_Mesh: {fileID: 7733717212360752527, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} +--- !u!23 &6606582562193106326 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8662556775601516223} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!1 &6612429244472856633 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6651890067172226664} + - component: {fileID: 6311205756003386420} + - component: {fileID: 8280490214789890700} + m_Layer: 0 + m_Name: Box032 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &6613757033279647464 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 119415888793469137} + m_Mesh: {fileID: -5351489220859370206, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} +--- !u!1 &6615530699158997857 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8500455761036998615} + - component: {fileID: 2620639038721354198} + - component: {fileID: 6290918885489868538} + m_Layer: 0 + m_Name: Box005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &6617511053525532009 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8113554705976341480} + m_Mesh: {fileID: 9186633843763367028, guid: fcc65de0395699040be81595ac8a1eda, type: 3} --- !u!114 &6629035499690454448 MonoBehaviour: m_ObjectHideFlags: 0 @@ -200362,12 +226191,371 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!33 &6634663228526849115 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4489650953821028393} + m_Mesh: {fileID: 6762006788543029084, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!23 &6639780890047305611 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8035486276462600611} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: f63d38aa595b8f84f81be292eb3df3b2, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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!1 &6641317627745052019 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8372158606750062719} + - component: {fileID: 1908908589487772000} + - component: {fileID: 463127506496225800} + m_Layer: 0 + m_Name: Box003 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &6651139273481998183 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5007368932709486588} + - component: {fileID: 4939670177429340108} + - component: {fileID: 6878391560826107258} + m_Layer: 0 + m_Name: Object054 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6651890067172226664 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6612429244472856633} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.08657925, y: 0.18, z: -0.028926678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &6653002912636174922 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3971489452771178443} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: -0.0000000013300747} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4425983708511861430} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6657916076836088265 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4577069541997853280} + m_Mesh: {fileID: 9220937479983263372, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!33 &6674353003664817881 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8642175175409250392} + m_Mesh: {fileID: 9186633843763367028, guid: 1e0b029320fe5914d98621193276e076, type: 3} +--- !u!1 &6679101523190245469 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6567581871650901516} + - component: {fileID: 5827963710115183696} + - component: {fileID: 8475435667887078120} + m_Layer: 0 + m_Name: Box032 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6680023669832168807 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1402957500731881124} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.13627979, y: 0.012417968, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4116396921372432760} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &6685186731975016284 stripped GameObject: m_CorrespondingSourceObject: {fileID: 5869316159231167792, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &6686899693148719783 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8723609804160104372} + m_Mesh: {fileID: 5644322950614084737, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} +--- !u!23 &6693656790493834275 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1365074971643505568} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 14d3397668f916d419987afedd215347, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!23 &6696698634029112518 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7293754100010455898} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 85d8935cccb058843808452d51e4980c, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 0d549e2f2b0754b4ca1906386e1e03e6, 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 &6700774087286139945 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6599151279000025688} + m_Mesh: {fileID: 7009245039203544193, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} +--- !u!33 &6704646083021644268 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7361613628902094851} + m_Mesh: {fileID: -8113768720884857512, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} +--- !u!23 &6706073935951885310 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2117728126843244856} + 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: eb5a3ffc6928fd64fb9259e3558c4039, 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!4 &6707835898968011355 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5597023365617710053} + m_LocalRotation: {x: 0.00000009974802, y: 0.00000009974802, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.19604771, y: 0.38048548, z: -0.15037024} + m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6710384205605244733 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3075254092430343851} + m_Mesh: {fileID: -8298940227465870776, guid: 485c2b00c505121468e2d20910842a74, type: 3} --- !u!1 &6712461312143127082 stripped GameObject: m_CorrespondingSourceObject: {fileID: 1320083962101217951, guid: 1e43385ddb3feca44b3c45d23ef4fae7, @@ -200380,6 +226568,21 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 5725925197986154677} m_PrefabAsset: {fileID: 0} +--- !u!4 &6712900560902044911 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844020612036827745} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.038049847, y: 0.13194679, z: -0.13957444} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5119118449912238514} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!224 &6715587367643648346 RectTransform: m_ObjectHideFlags: 0 @@ -200401,12 +226604,431 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 100, y: 100} m_Pivot: {x: 0.5, y: 0.5} +--- !u!33 &6722815465974881909 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8978479936146953350} + m_Mesh: {fileID: 5884580939788738644, guid: 837e03a60f341e14da656441a8653493, type: 3} +--- !u!23 &6722833831587580387 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7372876789854018737} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!1 &6725273210946973281 stripped GameObject: m_CorrespondingSourceObject: {fileID: 5828091402861976589, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &6725588481327200776 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8709545354225448014} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.178} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 764778530807871526} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6726127944552982664 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5265529492363797614} + m_Mesh: {fileID: 2608962752415385866, guid: e6c96015a3cd934408878fc6905a1c85, type: 3} +--- !u!23 &6729560083903546828 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7067225659508010435} + 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: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: baaa5b5ad49b24344abade2eeb878576, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!23 &6733935686028795400 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 540019890679487902} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: bae9d112f2ddd7345967d041e1189ddc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 90091843de6415b44929abd7f9c033bd, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!23 &6738749039924965754 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8845008923284062051} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: bae9d112f2ddd7345967d041e1189ddc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 90091843de6415b44929abd7f9c033bd, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!4 &6740222693549242896 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7764684601696689770} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.13627979, y: 0.033658683, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4116396921372432760} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6741273484938160446 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2890395686924447699} + - component: {fileID: 3615395672747110515} + - component: {fileID: 3171522644968893112} + m_Layer: 0 + m_Name: Box069 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &6762795893356678413 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2593290596200521910} + 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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 &6764260614302814036 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6177308399937688859} + m_Mesh: {fileID: 5235648689648786991, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &6770746939090086027 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 203290574165625749} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: bae9d112f2ddd7345967d041e1189ddc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 90091843de6415b44929abd7f9c033bd, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, 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!1 &6784895067805768176 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9089272748958100174} + - component: {fileID: 7280858920053555231} + - component: {fileID: 5499151637866408829} + m_Layer: 0 + m_Name: Object004 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6786288907521493672 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5662757439411555094} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.08567512, y: 0.24848777, z: -0.31173322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6800439090409208681 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3579337633491952416} + - component: {fileID: 8402257349527157313} + - component: {fileID: 3207910108099388581} + m_Layer: 0 + m_Name: Box019 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!23 &6803329554574215058 MeshRenderer: m_ObjectHideFlags: 0 @@ -200519,7 +227141,291 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 22 + m_RootOrder: 24 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6825038655797088717 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3109180751188596512} + - component: {fileID: 3537243041938311296} + - component: {fileID: 3402816901609263691} + m_Layer: 0 + m_Name: Box069 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &6825975935101851886 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7728615043300714149} + 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: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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 &6828730098247942693 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5950799609685628456} + m_Mesh: {fileID: -8672714952799723808, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} +--- !u!23 &6829063316272034654 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4564861733760945791} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 815fcf4bf3eac8c44a94802c45499896, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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 &6849638305407498942 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3158614892640197323} + m_Mesh: {fileID: -5573580799846109427, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} +--- !u!33 &6852123609865849145 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5661099046580466121} + m_Mesh: {fileID: 7733717212360752527, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!1 &6855353250331612702 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 768625467250555752} + - component: {fileID: 314505188847831882} + - component: {fileID: 5605626896649617279} + m_Layer: 0 + m_Name: Object006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &6856461966048367061 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5371065394825024811} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 204d0d4218e32054e81e5f600dcd7c01, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!23 &6856529063896275054 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2911860466242301174} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: bae9d112f2ddd7345967d041e1189ddc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 90091843de6415b44929abd7f9c033bd, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!4 &6858289370908964830 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8780454446938151728} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.25666702, y: 0.26294157, z: -0.06132862} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7799699611165651300} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &6862348287560766621 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8891178086725392607} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.0811779, y: 0.225, z: -0.25532228} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 13 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &6865632023384186062 stripped Transform: @@ -200527,36 +227433,637 @@ Transform: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &6868441924172964443 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7682609977067091281} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.029716196, y: 0.108672604, z: -0.013490637} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6871134483744833069 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6057619421335938199} + m_Layer: 0 + m_Name: 24 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!23 &6878391560826107258 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6651139273481998183} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &6882405772256995503 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8195301113388454937} + - component: {fileID: 2310980860367096344} + - component: {fileID: 5981331084556819764} + m_Layer: 0 + m_Name: Box005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!4 &6885603089051699214 stripped Transform: m_CorrespondingSourceObject: {fileID: 5925577802428136034, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &6914744154214609492 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8803064054952496967} + m_Mesh: {fileID: 5644322950614084737, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!33 &6916299164009226153 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2335914922422598942} + m_Mesh: {fileID: 6715375062900545627, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!4 &6917768707092058860 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3279829644779518520} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.178} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1212578399471534632} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &6928802799847781467 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5776162854793565723} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.010317722, y: 0.15947585, z: -0.25297612} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5236682523249791853} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &6930892590365929387 stripped Transform: m_CorrespondingSourceObject: {fileID: 7897633744193625543, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &6931441462515013717 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4628066802839776107} + - component: {fileID: 6562705391296512442} + - component: {fileID: 8235199239505521368} + m_Layer: 0 + m_Name: Object004 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &6938116516513653328 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5629526132366796786} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!23 &6938349960424971382 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1033135104818431776} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: fb6232690c1c1084fb58523d5ee5aeb0, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: f7c4b8b2d4dc9ee4c902e550c5b74afa, 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 &6956581329222347161 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8125601843354545040} + m_Mesh: {fileID: 1593996420852118269, guid: 837e03a60f341e14da656441a8653493, type: 3} +--- !u!4 &6961730730237382633 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3749716593025811473} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.2785775, y: 0.108672604, z: -0.013490637} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6961768144466325584 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7813028111850213028} + m_Mesh: {fileID: 7485205316709286908, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} +--- !u!33 &6966423953061811725 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6298233841963905885} + m_Mesh: {fileID: -5474930739130038965, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!1 &6969270958239123771 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6158766605997465137} + - component: {fileID: 2768927236452528205} + - component: {fileID: 1036323279887022360} + m_Layer: 0 + m_Name: Object010 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!4 &6970567282901874045 stripped Transform: m_CorrespondingSourceObject: {fileID: 7856841922746910481, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &6970627061541678678 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3163860167486440477} + - component: {fileID: 6294439151321402736} + - component: {fileID: 1373172516842510435} + m_Layer: 0 + m_Name: Box006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &6976591210940543781 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8038956624187377467} + m_Mesh: {fileID: -7047696389869352852, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!1 &6989510188142544756 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2083426325351712907} + - component: {fileID: 3082116336545238961} + - component: {fileID: 2810664010721250860} + m_Layer: 0 + m_Name: Box234 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &6995990052494334484 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 540019890679487902} + m_Mesh: {fileID: -1587076473420500859, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} +--- !u!23 &6998265488474427661 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5891419330389572559} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 7b45dc31b7c7d754bbc4f38e07733858, type: 2} + - {fileID: 2100000, guid: 6875b4493ed788d4789042aba4880050, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 3e633f3da7f6c1c46a05ea105f130727, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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!1 &7001395798920391310 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3872345861271232886} + - component: {fileID: 568553517085301890} + - component: {fileID: 7688463826396965256} + m_Layer: 0 + m_Name: Object001 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &7001583625385846687 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4247421058041977401} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: a59859105095c004c8e8ad289a6a9549, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!23 &7001879146255638531 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8642175175409250392} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!1 &7006119021717624763 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3797400483023977165} + - component: {fileID: 4198761786906315503} + - component: {fileID: 8345883291092467418} + m_Layer: 0 + m_Name: Object006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &7016328612862914292 stripped GameObject: m_CorrespondingSourceObject: {fileID: 7848212474308533400, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &7019198768277087418 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6552748430376844215} + m_Mesh: {fileID: -3243264717552843444, guid: 38d78f271938d6c4686b952b3257872c, type: 3} --- !u!4 &7026069538168940307 stripped Transform: m_CorrespondingSourceObject: {fileID: 7797119767083079039, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &7035720789788676327 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5642291632030127447} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!4 &7041295652608987884 stripped Transform: m_CorrespondingSourceObject: {fileID: 7783001960900960384, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -200569,6 +228076,293 @@ Transform: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &7059313986199909862 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1402957500731881124} + m_Mesh: {fileID: 1226723149311242300, guid: 485c2b00c505121468e2d20910842a74, type: 3} +--- !u!1 &7067225659508010435 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5931276165114548347} + - component: {fileID: 564335625566939626} + - component: {fileID: 6729560083903546828} + m_Layer: 0 + m_Name: Object035 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &7070433885546819872 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2649767556843636822} + m_Mesh: {fileID: 7643229109163234770, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} +--- !u!23 &7071897821426952702 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5978597022961926972} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, 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!4 &7073735569604066248 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6198255907163431199} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.18321264, y: 0.26294157, z: -0.06132862} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7799699611165651300} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &7074597862635141862 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4766314944147687896} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.0071395678, y: 0.045706555, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1212578399471534632} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &7084456144843628259 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4577069541997853280} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!23 &7096417218801900709 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1228478719733007785} + 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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!23 &7099104808727460128 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 754889193151839310} + 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: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 53a6ea32b66877f4f811139c51424123, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!4 &7100848580942899351 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1244369498120701858} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.25370398, y: 0.2738577, z: -0.24493845} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5236682523249791853} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7101706771214079174 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1344852968344602713} + m_Mesh: {fileID: -4783894591166569364, guid: 837e03a60f341e14da656441a8653493, type: 3} +--- !u!4 &7109695589848148126 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7338112614764792061} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.2098977, y: 0.225, z: -0.25532228} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &7127680886251290947 MonoBehaviour: m_ObjectHideFlags: 0 @@ -203092,6 +230886,292 @@ MonoBehaviour: distanceMultiplier: 0.06 button: {fileID: 7143516272255224206} text: {fileID: 7143516272255224205} +--- !u!4 &7147401259159895573 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8898246136836739626} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.070639566, y: 0.0010635629, z: -0.26500002} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4433488523220862567} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7154430995161213497 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6371363758697804758} + m_Mesh: {fileID: -8113768720884857512, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} +--- !u!1 &7156412003949927219 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6279533672814193068} + - component: {fileID: 2655066948234808427} + - component: {fileID: 2063849948259463078} + m_Layer: 0 + m_Name: Box024 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &7157885107498534982 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6361368783599918356} + 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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!23 &7158223197761349404 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3279829644779518520} + 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: 2f722a70dff0aa04d96fe8cbd8980554, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!23 &7163894946103023289 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5095427635514819069} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!23 &7166243840443472547 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5555929885796966145} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 3e633f3da7f6c1c46a05ea105f130727, 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 &7179961822570967050 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4247421058041977401} + m_Mesh: {fileID: 1414275290710141465, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} +--- !u!33 &7188797217027317094 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5642291632030127447} + m_Mesh: {fileID: -3996760141626369306, guid: fcc65de0395699040be81595ac8a1eda, type: 3} +--- !u!1 &7195010629667561141 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1764086904773042888} + - component: {fileID: 8327298663634115772} + - component: {fileID: 1028563349922384177} + m_Layer: 0 + m_Name: Box025 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &7210446100921187027 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2631496338877530650} + - component: {fileID: 1862551481037377731} + - component: {fileID: 4281754660005768977} + m_Layer: 0 + m_Name: Box018 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!222 &7211046422224445103 CanvasRenderer: m_ObjectHideFlags: 0 @@ -203106,12 +231186,290 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &7233811109609107627 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2315072564869115919} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!1 &7236833969747382952 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1702868056237489565} + - component: {fileID: 5323440045719263897} + - component: {fileID: 5440615219287693080} + m_Layer: 0 + m_Name: Object002 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &7241657841303646068 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2948044116176190937} + - component: {fileID: 798637185576955753} + - component: {fileID: 3598784825484748194} + m_Layer: 0 + m_Name: Object067 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &7256903698405023446 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5276949739857516263} + m_Mesh: {fileID: -3996760141626369306, guid: 1e0b029320fe5914d98621193276e076, type: 3} +--- !u!4 &7280017578944300568 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5672769596110580889} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.25714034, y: 0.26294157, z: -0.06132862} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7799699611165651300} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7280858920053555231 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6784895067805768176} + m_Mesh: {fileID: -8113768720884857512, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} +--- !u!23 &7287633708466262210 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7378464799064900118} + 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: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!4 &7293114309888114969 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 833519830865367788} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00000011920929, y: 0, z: -0.26400006} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 24 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7293754100010455898 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4179383332225375903} + - component: {fileID: 5297976311284399593} + - component: {fileID: 6696698634029112518} + m_Layer: 0 + m_Name: Box033 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7301499081569813195 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8906899285702537484} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.25112614, y: 0.69446886, z: -0.38488317} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &7302598657818655062 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4995430679338781288} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00032439828, y: 0.05017651, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1704047503546810776} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &7304352291601928663 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8906899285702537484} + 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: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 53a6ea32b66877f4f811139c51424123, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!1 &7310369824765885312 stripped GameObject: m_CorrespondingSourceObject: {fileID: 7549955494304991724, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &7310479538428774512 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2015602938807185740} + m_Mesh: {fileID: -3263837062639474007, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} --- !u!1 &7314280591682239043 stripped GameObject: m_CorrespondingSourceObject: {fileID: 7508900707817850927, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -203148,36 +231506,1137 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &7317962221425942591 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3460788035129314633} + - component: {fileID: 4535367155630046571} + - component: {fileID: 8603752558054033758} + m_Layer: 0 + m_Name: Object006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &7319550810674667107 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5195616912805320274} + m_Mesh: {fileID: -3996760141626369306, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} +--- !u!33 &7326395612068943352 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3223185449976503926} + m_Mesh: {fileID: -6520371374760543206, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!33 &7326502186830180354 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4500672022278746739} + m_Mesh: {fileID: 70222690664163882, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!33 &7330213906542542616 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8376069948090124264} + m_Mesh: {fileID: 7733717212360752527, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} +--- !u!33 &7330621182033385000 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1672084382166177130} + m_Mesh: {fileID: 1226723149311242300, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} +--- !u!23 &7336480115474800989 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8590718855736625212} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!1 &7338112614764792061 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7109695589848148126} + - component: {fileID: 1517453061348020693} + - component: {fileID: 8617652784837868113} + m_Layer: 0 + m_Name: Object018 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &7344490264740789437 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1677038180369880751} + - component: {fileID: 4358080280113059147} + - component: {fileID: 321648864480666987} + m_Layer: 0 + m_Name: Box040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7346858454746687996 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3558383290287727108} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.01246886} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5183046070246721810} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7351981880541388576 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5754246669169074610} + - component: {fileID: 1215488037454048735} + - component: {fileID: 7477730373284283726} + m_Layer: 0 + m_Name: Object083 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &7358912886662677011 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8780454446938151728} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: bae9d112f2ddd7345967d041e1189ddc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 90091843de6415b44929abd7f9c033bd, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!1 &7361613628902094851 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5053861088613354301} + - component: {fileID: 6704646083021644268} + - component: {fileID: 8381647288970644110} + m_Layer: 0 + m_Name: Object004 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &7372876789854018737 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8890828430127841540} + - component: {fileID: 129716969664124107} + - component: {fileID: 6722833831587580387} + m_Layer: 0 + m_Name: Object008 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &7376232566775669683 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8113554705976341480} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!1 &7376891716375374142 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3660117560656536262} + - component: {fileID: 42194744380989234} + - component: {fileID: 7909700357142899256} + m_Layer: 0 + m_Name: Object001 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &7378464799064900118 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6486990108774396866} + - component: {fileID: 7823430227736391413} + - component: {fileID: 7287633708466262210} + m_Layer: 0 + m_Name: Object003 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7401685852068407100 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3552412407257789931} + m_LocalRotation: {x: 0.00000008146034, y: 0, z: -0, w: 1} + m_LocalPosition: {x: 0.00014513358, y: 0, z: -0.16010308} + m_LocalScale: {x: 1, y: 1.5098631, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7402693229524112031 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7803714194037177980} + m_Mesh: {fileID: -3531946766418785785, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!4 &7408558085279866753 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 640270441565666157} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.117607355, y: 0.18, z: -0.028926678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7409166699846018994 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 510160123048615850} + - component: {fileID: 5118181792722201921} + - component: {fileID: 6157634964346081690} + m_Layer: 0 + m_Name: Box037 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &7410085240807609175 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5276949739857516263} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!23 &7414163035411487541 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1748763003743417433} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!1 &7418457257166361559 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7906200256174459245} + m_Layer: 0 + m_Name: 80 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!33 &7420383782904945930 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2339494001296718446} + m_Mesh: {fileID: 4143267299020566393, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} +--- !u!33 &7422026680298796548 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7676606064685151119} + m_Mesh: {fileID: -5613867604693661769, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} +--- !u!33 &7429781570272617465 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 37861116822743939} + m_Mesh: {fileID: -7647463442239531939, guid: 837e03a60f341e14da656441a8653493, type: 3} --- !u!4 &7448573442382181697 stripped Transform: m_CorrespondingSourceObject: {fileID: 7704484744367458093, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &7452705851242704415 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8262089993959180131} + m_Mesh: {fileID: -7346044036102949886, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} +--- !u!1 &7455086672111709150 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7799699611165651300} + m_Layer: 0 + m_Name: 23 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &7456227776634305949 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3670565738863415531} + - component: {fileID: 4325588764696977609} + - component: {fileID: 8471802150690297084} + m_Layer: 0 + m_Name: Object006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &7457411467430242699 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3740994163363275379} + - component: {fileID: 122740943877988231} + - component: {fileID: 7846696930091575949} + m_Layer: 0 + m_Name: Object001 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7459082389778038542 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7631426916412824671} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.11214141, y: 0.24848777, z: -0.31173322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7462243033034760667 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1334051829595180985} + - component: {fileID: 1148159683615181553} + - component: {fileID: 1848808488884620384} + m_Layer: 0 + m_Name: Object015 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &7468893000173336612 stripped GameObject: m_CorrespondingSourceObject: {fileID: 7643633889978796616, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &7472849550347952959 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7990303245099370759} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.10146063, y: 0.0983537, z: -0.13957438} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6057619421335938199} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &7477730373284283726 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7351981880541388576} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!23 &7479238548250633623 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7804890617061320337} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cee0d480896efab4383ee1f44f20156a, type: 2} + - {fileID: 2100000, guid: 3647e3076d0cde84ba812d988cdeae36, 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!23 &7490645742780552162 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5195616912805320274} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: 686eaae6e982a2541ba4dbee147b5629, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 246a1f99f0476ef4a8bbe8995db7a6a1, 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!4 &7495880994677403900 stripped Transform: m_CorrespondingSourceObject: {fileID: 7328423215971189392, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &7500346433907542143 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2184018882917744397} + - component: {fileID: 2764490806158208427} + - component: {fileID: 6479126743816651941} + m_Layer: 0 + m_Name: Box080 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7503406004146648393 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5200016497843652215} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00032439828, y: 0.05017651, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1935563662030491015} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &7509965059991365691 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4247421058041977401} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.17384507, y: 0.18, z: -0.028926678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &7517814306478887295 stripped GameObject: m_CorrespondingSourceObject: {fileID: 7341384563331916563, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &7532155278205757499 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3675558599611542435} + - component: {fileID: 9164614779602065764} + - component: {fileID: 5830415014812554437} + m_Layer: 0 + m_Name: waike4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &7539421391064215992 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4724068648691360525} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: f63d38aa595b8f84f81be292eb3df3b2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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!4 &7539736316033799421 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1976285726914804680} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.24388297, y: 0.108672604, z: -0.013490637} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &7541584353241886018 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8809361382858900515} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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 &7544667509076338035 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2249942241251644645} + m_Mesh: {fileID: -8298940227465870776, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} +--- !u!4 &7547574314756601916 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8803064054952496967} + m_LocalRotation: {x: 0.00000009974802, y: 0.00000009974802, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.1365573, y: 0.38048548, z: -0.15037027} + m_LocalScale: {x: 1.5098631, y: 1.0391465, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2609010859004501656} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &7562148558569774212 stripped Transform: m_CorrespondingSourceObject: {fileID: 7297894177422044904, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &7564009823862448120 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9014289438920954718} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.25245005, y: 0.044149205, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4116396921372432760} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &7566020521579175478 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9151679755582334220} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.17771778, y: 0.225, z: -0.25532228} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7570714709245118835 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8368741234225648838} + - component: {fileID: 1048763048672772361} + - component: {fileID: 5912488856469920801} + m_Layer: 0 + m_Name: Object008 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7575107225780166441 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2804713048647195882} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.27236468, y: 0.42568934, z: -0.26399994} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 915489601676210998} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &7594113083111514828 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6298233841963905885} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 43576c97948a46d42829355df3b30edc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &7602415919040394979 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9068655244433073463} + - component: {fileID: 8945813266525246989} + - component: {fileID: 852143784476563918} + m_Layer: 0 + m_Name: Object077 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!224 &7603065571947109890 RectTransform: m_ObjectHideFlags: 0 @@ -203204,6 +232663,45 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 2867121862218958565} m_PrefabAsset: {fileID: 0} +--- !u!33 &7607771679083243422 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1673216496195773912} + m_Mesh: {fileID: -4248355281360383206, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} +--- !u!33 &7611904803619648637 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5095427635514819069} + m_Mesh: {fileID: -7466011377227053342, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!4 &7619539335691495164 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5159260414682662475} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.025694866, y: 0.0010635629, z: -0.26500002} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4433488523220862567} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7625907884046513901 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8926154377495688397} + m_Mesh: {fileID: 5047528748317851287, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} --- !u!224 &7631227131778961735 RectTransform: m_ObjectHideFlags: 0 @@ -203241,6 +232739,65 @@ MonoBehaviour: canEnterToggleValueChanged: 1 toggleWasOn: 0 uIToCabinet: {fileID: 4362348816482923669} +--- !u!1 &7631426916412824671 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7459082389778038542} + - component: {fileID: 5431178761554504139} + - component: {fileID: 3774903966167482099} + m_Layer: 0 + m_Name: Box059 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &7632236234171099314 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6198255907163431199} + m_Mesh: {fileID: 7696531369679630343, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} +--- !u!1 &7635953401258020158 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 590760871622244257} + - component: {fileID: 8830016371556924578} + - component: {fileID: 4292438577542536852} + m_Layer: 0 + m_Name: Box071 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7639989839885581221 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5022954653524497893} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.17569539, y: 0.108672604, z: -0.013490637} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!222 &7642908760247414391 CanvasRenderer: m_ObjectHideFlags: 0 @@ -203249,6 +232806,68 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3761183470107067426} m_CullTransparentMesh: 1 +--- !u!23 &7650350041281341889 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6063678731792740905} + 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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!4 &7654846095316805277 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457799320611601031} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00000011920929, y: 0.4324825, z: -0.26400006} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!222 &7657717171970428224 CanvasRenderer: m_ObjectHideFlags: 0 @@ -203257,6 +232876,209 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 21436116274948056} m_CullTransparentMesh: 1 +--- !u!23 &7665186582747897884 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 324154674604079946} + 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -3806979676295470834, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!1 &7676606064685151119 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4988691418503110095} + - component: {fileID: 7422026680298796548} + - component: {fileID: 8938851715949057803} + m_Layer: 0 + m_Name: Box004 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7676756416763443618 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5549919649637784554} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.25245005, y: 0.076190375, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4425983708511861430} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7681685756261945584 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2180232889755562117} + m_Mesh: {fileID: -5573580799846109427, guid: 485c2b00c505121468e2d20910842a74, type: 3} +--- !u!1 &7682609977067091281 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6868441924172964443} + - component: {fileID: 3189950088530529319} + - component: {fileID: 308510432952092018} + m_Layer: 0 + m_Name: Object010 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &7687227794965618541 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1441940722142240043} + m_Mesh: {fileID: -4248355281360383206, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &7688463826396965256 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7001395798920391310} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cee0d480896efab4383ee1f44f20156a, type: 2} + - {fileID: 2100000, guid: 3647e3076d0cde84ba812d988cdeae36, 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!4 &7688989422234563459 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4476689411933714555} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.25370398, y: 0.30274874, z: -0.2404613} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5236682523249791853} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7692961608494773709 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 795014089940766546} + - component: {fileID: 8768576510965531729} + - component: {fileID: 4083488188918457959} + m_Layer: 0 + m_Name: Box071 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &7708766456506313434 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8898246136836739626} + m_Mesh: {fileID: 7733717212360752527, guid: 38d78f271938d6c4686b952b3257872c, type: 3} --- !u!1 &7712577791075545679 stripped GameObject: m_CorrespondingSourceObject: {fileID: 7403327047838629923, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -203269,6 +233091,237 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &7718340111312760111 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3757608727459750122} + - component: {fileID: 5162148437429601180} + - component: {fileID: 5965827121450853043} + m_Layer: 0 + m_Name: Box033 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &7720536145320423340 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9070352783791423479} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!1 &7722597679654154380 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2122753853264316414} + - component: {fileID: 2695344206628738392} + - component: {fileID: 6543945254591741014} + m_Layer: 0 + m_Name: Box080 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &7723473993169897322 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1792681088523233375} + - component: {fileID: 5089494251443998555} + - component: {fileID: 4954485419776656090} + m_Layer: 0 + m_Name: Object002 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &7728615043300714149 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7921698360936052399} + - component: {fileID: 2311560486842106994} + - component: {fileID: 6825975935101851886} + m_Layer: 0 + m_Name: 24 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7736968233443259329 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8813869938260743026} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.030003745, y: 0.18, z: -0.028926678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &7747570292696416463 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8723609804160104372} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.032934286, y: 0.24848777, z: -0.31173322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2814654616946239083} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &7752985581750515530 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7773983324315607152} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.20844167, y: 0.225, z: -0.25532228} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7757593451235258320 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3803785263237196053} + - component: {fileID: 5778610670876094685} + - component: {fileID: 9016494151477489225} + m_Layer: 0 + m_Name: Object011 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &7762782220116509231 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6571380662821377258} + m_Mesh: {fileID: -2232952877369940510, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} +--- !u!1 &7764684601696689770 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6740222693549242896} + - component: {fileID: 4281045888726484257} + - component: {fileID: 746932236024046411} + m_Layer: 0 + m_Name: Box007 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &7773983324315607152 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7752985581750515530} + - component: {fileID: 4660522598484111089} + - component: {fileID: 9017961076575940651} + m_Layer: 0 + m_Name: Object005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &7785452477093289152 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9029231735876566157} + m_Mesh: {fileID: 1491061044228583767, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} --- !u!114 &7791218209235611103 MonoBehaviour: m_ObjectHideFlags: 0 @@ -203299,12 +233352,308 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!33 &7796713106143264320 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5864196581781719830} + m_Mesh: {fileID: -4263424352264704495, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} +--- !u!4 &7799699611165651300 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7455086672111709150} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 983362396195415289} + - {fileID: 1340536388673506822} + - {fileID: 4112460083999017169} + - {fileID: 8803729401699644585} + - {fileID: 7280017578944300568} + - {fileID: 7879906452451515461} + - {fileID: 7073735569604066248} + - {fileID: 3129545443695989217} + - {fileID: 2685425829973406701} + - {fileID: 2083426325351712907} + - {fileID: 5316446054664399769} + - {fileID: 894501083924097521} + - {fileID: 2382568841181269139} + - {fileID: 8874600426198970924} + - {fileID: 3772702839513361420} + - {fileID: 8397378341307487660} + - {fileID: 6184115942399303274} + - {fileID: 554873157037997227} + - {fileID: 6858289370908964830} + m_Father: {fileID: 1023018615} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7803714194037177980 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5778018474685550504} + - component: {fileID: 7402693229524112031} + - component: {fileID: 8001539937687432360} + m_Layer: 0 + m_Name: Object003 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &7804890617061320337 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4090439179655277929} + - component: {fileID: 764088705154338973} + - component: {fileID: 7479238548250633623} + m_Layer: 0 + m_Name: Object001 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &7812042621114766667 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3697819323328796814} + - component: {fileID: 4672304881454267384} + - component: {fileID: 6178408754930506455} + m_Layer: 0 + m_Name: Box033 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &7813028111850213028 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7955469379049779065} + - component: {fileID: 6961768144466325584} + - component: {fileID: 8728826262752975598} + m_Layer: 0 + m_Name: Box009 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7814175373079243735 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8376069948090124264} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.03692468, y: 0.15764228, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3659111854849921957} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7823430227736391413 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7378464799064900118} + m_Mesh: {fileID: -3531946766418785785, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!1 &7829693187047217714 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4236797493123192945} + - component: {fileID: 5511036507447838320} + - component: {fileID: 1329936067608133281} + m_Layer: 0 + m_Name: Box075 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7833135588928355382 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8742914005206167696} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.25245005, y: 0.044149205, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4425983708511861430} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &7834180222946634163 stripped Transform: m_CorrespondingSourceObject: {fileID: 6993504719133383647, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &7842722604277050787 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9002526901760329245} + - component: {fileID: 4244584267898670479} + - component: {fileID: 8170295057950643497} + m_Layer: 0 + m_Name: Box020 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &7843748828331678968 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4842509312153049416} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!23 &7846696930091575949 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7457411467430242699} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: 686eaae6e982a2541ba4dbee147b5629, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 246a1f99f0476ef4a8bbe8995db7a6a1, 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!4 &7847668185954768525 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4835932489331936413} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.27570817, y: 0.6944689, z: -0.38488308} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &7852978730245332515 stripped GameObject: m_CorrespondingSourceObject: {fileID: 7011559909331430479, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -203317,24 +233666,871 @@ Transform: type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &7861444469950014389 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2148622748077566001} + m_Mesh: {fileID: -3613724358419971262, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} +--- !u!33 &7865809325921922895 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8906899285702537484} + m_Mesh: {fileID: 5783707781615440777, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!1 &7869920999005824828 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2231595381588871177} + - component: {fileID: 4663862040430604045} + - component: {fileID: 4816889951819850380} + m_Layer: 0 + m_Name: Object002 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &7871339045962294691 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2533697272779956768} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 5c8cedf3f5a458546a2bf464a001dc24, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 9c4dff57059c90a469f7b4338b1c47d6, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 10ac57f42847b114584025b79f149fd9, type: 2} + - {fileID: 2100000, guid: 2f6ccf4a6be08264399f331f85a69077, type: 2} + - {fileID: 2100000, guid: 6875b4493ed788d4789042aba4880050, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, 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!4 &7879906452451515461 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5864196581781719830} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.22017664, y: 0.26294157, z: -0.06132862} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7799699611165651300} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7880759781789677782 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3714419465656854736} + m_Mesh: {fileID: -4778756733448772780, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!33 &7899170879415888779 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4630962058400143824} + m_Mesh: {fileID: -35850239040426563, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!1 &7899831805472295510 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7916000785774730604} + - component: {fileID: 5111281104677323991} + - component: {fileID: 8891601381534571021} + m_Layer: 0 + m_Name: Object005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7903679028541912288 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8473647221216634679} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.24207768, y: 0.225, z: -0.25532228} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7905481370240622957 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4527259733259660982} + m_Mesh: {fileID: 1857916439425390961, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!4 &7906200256174459245 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7418457257166361559} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09, z: 0.029997956} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1357196648834463246} + - {fileID: 6326493331588613809} + - {fileID: 4988691418503110095} + - {fileID: 2409348233752192962} + - {fileID: 3163860167486440477} + - {fileID: 653588031794358789} + - {fileID: 588881027163219314} + - {fileID: 7955469379049779065} + - {fileID: 4205630655935072889} + - {fileID: 4350711254963785709} + - {fileID: 5570360006201956636} + - {fileID: 1588130940586263175} + - {fileID: 2631496338877530650} + - {fileID: 3579337633491952416} + - {fileID: 9002526901760329245} + m_Father: {fileID: 1023018615} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &7909700357142899256 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7376891716375374142} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 8ebcd64b45bff024fb4dbb50772a30b3, type: 2} + - {fileID: 2100000, guid: 3647e3076d0cde84ba812d988cdeae36, 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!4 &7911355440833147624 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2163254518007356893} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00032439828, y: 0.01947017, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5183046070246721810} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &7916000785774730604 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7899831805472295510} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.04968287, y: 0.11210428, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 764778530807871526} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &7921698360936052399 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7728615043300714149} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.0020824, z: -0.35} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6057619421335938199} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7926761718242860202 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4853988774009750192} + - component: {fileID: 1609443317488448819} + - component: {fileID: 3972234149203897092} + m_Layer: 0 + m_Name: Object073 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &7940699407721405666 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4709865978187784193} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: e33e8e143de68ea419d74e4d6b23e139, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, 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!1 &7943155150887700513 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4891751735058001048} + - component: {fileID: 6086634951677234190} + - component: {fileID: 1607973389200186397} + m_Layer: 0 + m_Name: Box112 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7955469379049779065 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7813028111850213028} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.023437418, y: 0.225, z: -0.31184724} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7906200256174459245} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &7971941045744547932 stripped Transform: m_CorrespondingSourceObject: {fileID: 7140303544663198256, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &7978903216036057465 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4842509312153049416} + m_Mesh: {fileID: -3996760141626369306, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} +--- !u!4 &7981909895979670124 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5280865353733732388} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.25245005, y: 0.076190375, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4116396921372432760} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7986841425583174462 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1877332301342921547} + m_Mesh: {fileID: -5573580799846109427, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} +--- !u!1 &7990303245099370759 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7472849550347952959} + - component: {fileID: 1385617514869535470} + - component: {fileID: 4035956104297991970} + m_Layer: 0 + m_Name: Box027 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &7991002455864787812 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9001635278191129830} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 90091843de6415b44929abd7f9c033bd, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!23 &8001539937687432360 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7803714194037177980} + 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: -6307277589567570940, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -6257702196253466788, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -3806979676295470834, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: 1368039103165038143, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -5956578104803850452, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -8757356216087587297, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!4 &8008580398469034860 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 341118656683163088} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.039886806, y: 0.24802452, z: -0.35262305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &8013769874197914069 stripped GameObject: m_CorrespondingSourceObject: {fileID: 7098749602368738233, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &8014537636923503552 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3854717024918951099} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: c1b40a07b10cc904cb98584758893c28, type: 2} + - {fileID: 2100000, guid: 3e633f3da7f6c1c46a05ea105f130727, type: 2} + - {fileID: 2100000, guid: 0e3b47106aed81545b521102d621d2c9, type: 2} + - {fileID: 2100000, guid: 4a603a281c8cd05459fe8166d9448f1d, type: 2} + - {fileID: 2100000, guid: 8655d8f7b78ddb04fbf05643507055a1, type: 2} + - {fileID: 2100000, guid: 5ec7a4c1a7a6a2e4191a7adc8fe1fd50, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!1 &8029990441527463319 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5727205121244479145} + - component: {fileID: 6075994999166391416} + - component: {fileID: 9009559466757259034} + m_Layer: 0 + m_Name: Object004 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8034722700517284240 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 122687327772999036} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.038049847, y: 0.16167639, z: -0.13957444} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5119118449912238514} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8035486276462600611 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1028261108207327675} + - component: {fileID: 5644702289709624144} + - component: {fileID: 6639780890047305611} + m_Layer: 0 + m_Name: Box037 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &8038241483963907492 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6468916597027166686} + - component: {fileID: 4550171670712280815} + - component: {fileID: 1013735849623928965} + m_Layer: 0 + m_Name: Box007 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &8038956624187377467 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8225486795141447894} + - component: {fileID: 6976591210940543781} + - component: {fileID: 9176442770862380469} + m_Layer: 0 + m_Name: Object085 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &8039506443400454849 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4176692988589138050} + - component: {fileID: 5711015653419564675} + - component: {fileID: 1247032231426573906} + m_Layer: 0 + m_Name: Box075 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &8053525655355979435 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 886140722217932970} + - component: {fileID: 4183144160666760853} + - component: {fileID: 8450635197309296553} + m_Layer: 0 + m_Name: Box030 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &8061188860630855410 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9022728812148148115} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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 &8066301542102963508 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4564861733760945791} + m_Mesh: {fileID: 2954858793080512207, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} +--- !u!23 &8068680424053911165 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8813869938260743026} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 204d0d4218e32054e81e5f600dcd7c01, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &8080563172833405469 stripped GameObject: m_CorrespondingSourceObject: {fileID: 9049595866712627313, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &8091439188677783062 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4917751871732915337} + - component: {fileID: 4017930557089134926} + - component: {fileID: 1134479707872434819} + m_Layer: 0 + m_Name: Box024 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!224 &8098716696456589262 RectTransform: m_ObjectHideFlags: 0 @@ -203372,6 +234568,40 @@ MonoBehaviour: canEnterToggleValueChanged: 1 toggleWasOn: 0 uIToCabinet: {fileID: 4362348816482923669} +--- !u!33 &8110553311504243177 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4306481230123522608} + m_Mesh: {fileID: -112464831985561941, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!33 &8112741367377081703 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9077056872123818853} + m_Mesh: {fileID: -6144968561209659737, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!1 &8113554705976341480 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8134553084903400658} + - component: {fileID: 6617511053525532009} + - component: {fileID: 7376232566775669683} + m_Layer: 0 + m_Name: Object005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &8115546867598947685 GameObject: m_ObjectHideFlags: 0 @@ -203390,12 +234620,76 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!4 &8124807159033985952 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2686593645063771862} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.12895331, y: 0.30277744, z: -0.2404613} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5236682523249791853} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8125601843354545040 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 820064623976568813} + - component: {fileID: 6956581329222347161} + - component: {fileID: 2115582647648042004} + m_Layer: 0 + m_Name: Box025 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &8126313815043881411 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105352306298952564} + m_Mesh: {fileID: 6715375062900545627, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} +--- !u!33 &8127635679764509425 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1012856552372630462} + m_Mesh: {fileID: 5062258218628926779, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} --- !u!1 &8134545103141227021 stripped GameObject: m_CorrespondingSourceObject: {fileID: 9031625690923481185, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &8134553084903400658 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8113554705976341480} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00032439828, y: 0.11210428, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1704047503546810776} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!224 &8136951254966659770 RectTransform: m_ObjectHideFlags: 0 @@ -203416,6 +234710,87 @@ RectTransform: m_AnchoredPosition: {x: -1.0999756, y: 0} m_SizeDelta: {x: -2.199997, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!4 &8152742917120161547 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2117728126843244856} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 16.83917, y: 1.1187189, z: -12.045458} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 543450652676794594} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8157641921699241316 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2382568841181269139} + - component: {fileID: 6520658260740628725} + - component: {fileID: 8216022216013049885} + m_Layer: 0 + m_Name: Box239 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &8170295057950643497 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7842722604277050787} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: d8afc8233d0ecc846a4a60897529b7c4, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!224 &8170702882014044262 RectTransform: m_ObjectHideFlags: 0 @@ -203439,12 +234814,361 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!33 &8176143171852472829 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3029019696132230313} + m_Mesh: {fileID: -2639241166356525208, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} +--- !u!33 &8182687774308690025 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590861007285837843} + m_Mesh: {fileID: -7647463442239531939, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!33 &8184284559507268067 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 122687327772999036} + m_Mesh: {fileID: -4783894591166569364, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} +--- !u!23 &8188511423532440358 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8806915233583601696} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!23 &8189281793839136845 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3834832403972531672} + 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: 3287120834081420130, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!4 &8195301113388454937 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6882405772256995503} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.13627979, y: 0.076190375, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4425983708511861430} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8211481876184529558 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6537598814469911575} + m_Mesh: {fileID: 9186633843763367028, guid: 38d78f271938d6c4686b952b3257872c, type: 3} +--- !u!23 &8215255042285036088 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 121785957508862989} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 383fafd25d521744a8a6f2b358485b65, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!23 &8216022216013049885 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8157641921699241316} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: bae9d112f2ddd7345967d041e1189ddc, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 90091843de6415b44929abd7f9c033bd, 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!1 &8225043499544232452 stripped GameObject: m_CorrespondingSourceObject: {fileID: 9191929745176080488, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &8225486795141447894 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8038956624187377467} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.2886381, y: 0.24984208, z: -0.28685233} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 36 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &8235199239505521368 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6931441462515013717} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!4 &8250907086480689258 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2996582998464512050} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00000011920929, y: 0.030028656, z: -0.26400006} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &8251406237855782913 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5959208433255675803} + 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: 25a69d60185c44c43b55a219d27544b5, type: 2} + - {fileID: 2100000, guid: 6e7c5f76e9b106145b3f681c95bd378c, 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!224 &8258374344297880674 RectTransform: m_ObjectHideFlags: 0 @@ -203465,6 +235189,379 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0, y: 0} +--- !u!1 &8262089993959180131 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5204373779751186532} + - component: {fileID: 7452705851242704415} + - component: {fileID: 2146940570939703622} + m_Layer: 0 + m_Name: Box044 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &8277476381258149415 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8780454446938151728} + m_Mesh: {fileID: 2980456807618490295, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} +--- !u!23 &8280490214789890700 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6612429244472856633} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: a59859105095c004c8e8ad289a6a9549, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!23 &8286519090697304659 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9014289438920954718} + 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} + 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 &8288927844621246360 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5200016497843652215} + m_Mesh: {fileID: -8113768720884857512, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} +--- !u!33 &8298385582273667240 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3854717024918951099} + m_Mesh: {fileID: 690106047850165013, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} +--- !u!33 &8315602256245010436 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 327535401730976238} + m_Mesh: {fileID: 347013164166513179, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} +--- !u!33 &8327298663634115772 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7195010629667561141} + m_Mesh: {fileID: 1593996420852118269, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} +--- !u!33 &8335676132145093948 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 601611563699616894} + m_Mesh: {fileID: 6206849629555422820, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &8345883291092467418 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7006119021717624763} + 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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 &8354618681325554178 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 951626561130269517} + m_Mesh: {fileID: 5062258218628926779, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!33 &8359205540630451932 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1413212892745064102} + m_Mesh: {fileID: -7647463442239531939, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} +--- !u!23 &8365561597116471248 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5382298243707610264} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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 &8367475924609316840 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3414147145767824060} + m_Mesh: {fileID: -2639241166356525208, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} +--- !u!4 &8368741234225648838 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7570714709245118835} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.115584254, y: 0.0010635629, z: -0.26500002} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4433488523220862567} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &8372158606750062719 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6641317627745052019} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.06095925, z: -0.01446335} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8376069948090124264 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7814175373079243735} + - component: {fileID: 7330213906542542616} + - component: {fileID: 1883157054277098686} + m_Layer: 0 + m_Name: Object007 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &8381647288970644110 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7361613628902094851} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!1 &8385439162069699967 stripped GameObject: m_CorrespondingSourceObject: {fileID: 8784942219895848723, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -203489,12 +235586,646 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!4 &8397378341307487660 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3694474294739738027} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.07402802, y: 0.26294157, z: -0.06132862} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7799699611165651300} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8402257349527157313 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6800439090409208681} + m_Mesh: {fileID: 3557879054105070054, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} +--- !u!4 &8407898132636751386 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9077424687819668514} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.10173249, y: 0.13205421, z: -0.13957444} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5119118449912238514} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8410910735776109502 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4854737110433542296} + m_Mesh: {fileID: 3822247309040838107, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} --- !u!4 &8414361566558301228 stripped Transform: m_CorrespondingSourceObject: {fileID: 8750673681103019584, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &8422828877267112724 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6298233841963905885} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.07054737, y: 0.24802452, z: -0.35262305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &8428607777231745546 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6571380662821377258} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 85042bd00d7b7684abaaadb719ec74a2, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &8446911348340682208 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 894501083924097521} + - component: {fileID: 3991403648944850411} + - component: {fileID: 6228228437856019910} + m_Layer: 0 + m_Name: Box238 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &8450635197309296553 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8053525655355979435} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 204d0d4218e32054e81e5f600dcd7c01, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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 &8456631751381897398 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 754889193151839310} + m_Mesh: {fileID: 5791823748547884724, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!1 &8463972177876769839 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2399464491574361398} + - component: {fileID: 8648870072056746824} + - component: {fileID: 3783959942395598865} + m_Layer: 0 + m_Name: Object032 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &8466016623535312276 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9144075518541614738} + 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: a0b6607cd34835240b74544e5f63df2e, type: 2} + - {fileID: 2100000, guid: 1fbeb920646eac047b8cd78ef1892384, 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!23 &8471802150690297084 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7456227776634305949} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!1 &8473647221216634679 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7903679028541912288} + - component: {fileID: 4527729371139908846} + - component: {fileID: 4928169928046934665} + m_Layer: 0 + m_Name: Object019 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &8474627668643693390 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3189088559993529159} + - component: {fileID: 3548887921719769325} + - component: {fileID: 2897847997136928807} + m_Layer: 0 + m_Name: Box012 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &8475435667887078120 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6679101523190245469} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!4 &8483859195261948859 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8926154377495688397} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.302, y: 0.248, z: -0.353} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &8485453691673917671 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 119415888793469137} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: -0.000000018626451} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &8500455761036998615 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6615530699158997857} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.13627979, y: 0.076190375, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4116396921372432760} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &8502332244094758416 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819344453598577020} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!1 &8512543724490368639 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2961707330488363962} + - component: {fileID: 6529109768410024140} + - component: {fileID: 5761595076227672547} + m_Layer: 0 + m_Name: Box033 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &8516660339158018761 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6362028920366019517} + - component: {fileID: 3434197946597732133} + - component: {fileID: 515906586757511990} + m_Layer: 0 + m_Name: Object022 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &8518974993491105394 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5179236774481503921} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 815fcf4bf3eac8c44a94802c45499896, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!23 &8520008173314035990 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8856436567294375154} + 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: 2f722a70dff0aa04d96fe8cbd8980554, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!1 &8528640366697210713 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6334992391519182152} + - component: {fileID: 5057709754948982112} + - component: {fileID: 5629890113109684660} + m_Layer: 0 + m_Name: 6 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &8531757282900714480 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4938458197045745735} + - component: {fileID: 4558933227077951693} + - component: {fileID: 6363966037847150052} + m_Layer: 0 + m_Name: Box117 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!114 &8533446476283090041 MonoBehaviour: m_ObjectHideFlags: 0 @@ -203525,42 +236256,1662 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!33 &8536752859872132001 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6429021161417711494} + m_Mesh: {fileID: 3606764674779165107, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} --- !u!1 &8543631946299900319 stripped GameObject: m_CorrespondingSourceObject: {fileID: 8873324814267053043, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &8545774245748131267 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 119415888793469137} + 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: 1164559979738526386, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5309146791756261813, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -1152147162816932204, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 3274929075364713951, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1196480866727828669, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 8057491134282628743, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 7626191068330388430, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6909907705182173751, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -3250139810725036250, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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!4 &8546069140785211922 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6119991776310192672} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.2193732, y: 0.24802452, z: -0.52986926} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97655026830416076} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &8553321673303579037 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8742914005206167696} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 5d67d5e43daa72d4fade2fe649b7271d, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!4 &8554756781600169958 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4702106843298603276} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.15827926, y: 0.24984208, z: -0.28685236} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 27 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8557380105347732012 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6405949877407969947} + - component: {fileID: 5430071546721173474} + - component: {fileID: 8689762458715442254} + m_Layer: 0 + m_Name: Object013 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &8560493797653109563 stripped GameObject: m_CorrespondingSourceObject: {fileID: 8897294108492900695, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!1 &8566791999311775194 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 812882246250734175} + - component: {fileID: 9017363926094059672} + - component: {fileID: 5148581594664715711} + m_Layer: 0 + m_Name: Box043 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &8590718855736625212 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2500046412355659082} + - component: {fileID: 3190271404661642600} + - component: {fileID: 7336480115474800989} + m_Layer: 0 + m_Name: Object006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &8603752558054033758 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7317962221425942591} + 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: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: baaa5b5ad49b24344abade2eeb878576, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!23 &8609078463754716558 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3691533204743783722} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!23 &8613729354750201910 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8939927056681440048} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 8ebcd64b45bff024fb4dbb50772a30b3, type: 2} + - {fileID: 2100000, guid: 3647e3076d0cde84ba812d988cdeae36, 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!4 &8616990698545424226 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8642175175409250392} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.0071395678, y: 0.10167441, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1212578399471534632} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &8617652784837868113 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7338112614764792061} + 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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!4 &8631454414095113334 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9033540856855995764} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.038971715, y: 0.6944689, z: -0.31237373} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &8632740539258045281 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5382298243707610264} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.022107571, y: 0.24984208, z: -0.2868524} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 38 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &8634927539044033058 stripped Transform: m_CorrespondingSourceObject: {fileID: 8818081889905299534, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &8636877618090013723 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2249942241251644645} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.0861765, y: 0.42568934, z: -0.26399994} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 915489601676210998} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8642175175409250392 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8616990698545424226} + - component: {fileID: 6674353003664817881} + - component: {fileID: 7001879146255638531} + m_Layer: 0 + m_Name: Object005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &8648870072056746824 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8463972177876769839} + m_Mesh: {fileID: -6750423293286134506, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!1 &8655365370378813100 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3086961832189955246} + - component: {fileID: 2399168716002235551} + - component: {fileID: 2577546862159381258} + m_Layer: 0 + m_Name: Box039 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &8662556775601516223 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6170623916318069746} + - component: {fileID: 8959492889081669013} + - component: {fileID: 6606582562193106326} + m_Layer: 0 + m_Name: Box078 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8674213126204227816 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6371363758697804758} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.04968287, y: 0.05017651, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 764778530807871526} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &8675157868220306685 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2148622748077566001} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 815fcf4bf3eac8c44a94802c45499896, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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 &8676045186201103130 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5728985886515349564} + m_Mesh: {fileID: 3822247309040838107, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} --- !u!4 &8683163310089239781 stripped Transform: m_CorrespondingSourceObject: {fileID: 8445860208688467593, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &8689762458715442254 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8557380105347732012} + 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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!1 &8692419208758522048 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5768528703685589595} + - component: {fileID: 1367748643712179174} + - component: {fileID: 8927262191589113998} + m_Layer: 0 + m_Name: Box031 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &8695604351272324866 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6044888633743933827} + m_Mesh: {fileID: 9186633843763367028, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} +--- !u!33 &8698741552001158910 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6140356799873664719} + m_Mesh: {fileID: -3996760141626369306, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} +--- !u!23 &8698805179052780399 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5662757439411555094} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, 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 &8702369120668674034 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 640270441565666157} + m_Mesh: {fileID: -4783894591166569364, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} +--- !u!1 &8709545354225448014 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6725588481327200776} + - component: {fileID: 1235494535014643471} + - component: {fileID: 4054584740334010793} + m_Layer: 0 + m_Name: 91 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8715008456750555355 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5833495022044831191} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.14140135, y: 0.108672604, z: -0.013490637} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8721043318715519031 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4766314944147687896} + m_Mesh: {fileID: -8113768720884857512, guid: 1e0b029320fe5914d98621193276e076, type: 3} +--- !u!1 &8723609804160104372 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7747570292696416463} + - component: {fileID: 6686899693148719783} + - component: {fileID: 314042218168671674} + m_Layer: 0 + m_Name: Box066 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &8726846845466028039 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5579450520223537816} + - component: {fileID: 4509197686545710943} + - component: {fileID: 499642972515458194} + m_Layer: 0 + m_Name: Box024 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!4 &8728340922041207822 stripped Transform: m_CorrespondingSourceObject: {fileID: 8400402736128786018, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &8728826262752975598 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7813028111850213028} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: edb6bf36c5cfb364e90022fc82ef129d, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!23 &8736307116033694183 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6033332132712483143} + 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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!23 &8736437526791042248 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3255790684224465234} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 71ae97cc47eccf74fb2426282f1c2b06, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 8152f8e0ac8971c41b4220f9693019f4, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!1 &8742914005206167696 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7833135588928355382} + - component: {fileID: 633805485225590438} + - component: {fileID: 8553321673303579037} + m_Layer: 0 + m_Name: Box011 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &8743598443594610897 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6039515006544750705} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 5c8cedf3f5a458546a2bf464a001dc24, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!23 &8744870049171307515 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4404351256488721247} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, 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!1 &8747171296460233839 stripped GameObject: m_CorrespondingSourceObject: {fileID: 8417583850613911043, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!33 &8768576510965531729 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7692961608494773709} + m_Mesh: {fileID: -5087548570314954540, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!33 &8775173196518488163 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8891178086725392607} + m_Mesh: {fileID: 3941715523697911101, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} +--- !u!23 &8778823324909144089 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3297847178632074627} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 5d67d5e43daa72d4fade2fe649b7271d, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, 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!1 &8780454446938151728 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6858289370908964830} + - component: {fileID: 8277476381258149415} + - component: {fileID: 7358912886662677011} + m_Layer: 0 + m_Name: Box248 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &8781268141602466783 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9165532127733989126} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!23 &8785091954898954062 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2569361681833378577} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, 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!4 &8789197934175387198 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 29896753895660712} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.25066888, y: 0.69446886, z: -0.3848831} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8792142011003005829 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5159260414682662475} + m_Mesh: {fileID: 2871469715313346890, guid: 38d78f271938d6c4686b952b3257872c, type: 3} +--- !u!1 &8803064054952496967 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7547574314756601916} + - component: {fileID: 6914744154214609492} + - component: {fileID: 531718602392118601} + m_Layer: 0 + m_Name: Box066 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8803729401699644585 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9001635278191129830} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.29410237, y: 0.26294157, z: -0.06132862} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7799699611165651300} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8806915233583601696 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3363292645499818968} + - component: {fileID: 2085851303033892396} + - component: {fileID: 8188511423532440358} + m_Layer: 0 + m_Name: Object001 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &8809361382858900515 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3443156117474322773} + - component: {fileID: 2395739323669830007} + - component: {fileID: 7541584353241886018} + m_Layer: 0 + m_Name: Object006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &8813869938260743026 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7736968233443259329} + - component: {fileID: 5995368188141869826} + - component: {fileID: 8068680424053911165} + m_Layer: 0 + m_Name: Box036 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &8830016371556924578 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7635953401258020158} + m_Mesh: {fileID: -5087548570314954540, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} +--- !u!4 &8832124117117293586 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2734602758282253015} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.004427637, y: 0.108672604, z: -0.013490637} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &8835773339747471208 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5371065394825024811} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.028095704, y: 0.18, z: -0.028926678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5646298911603103651} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8845008923284062051 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5316446054664399769} + - component: {fileID: 4756456821010180518} + - component: {fileID: 6738749039924965754} + m_Layer: 0 + m_Name: Box235 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &8849663899386191805 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2347092483185982434} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 99a8b94ac6c85f448b1546bb0a7d0361, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 5ec7a4c1a7a6a2e4191a7adc8fe1fd50, 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!23 &8851958562342044543 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6140356799873664719} + 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6238916332166239650, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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!23 &8856306824023675692 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8937457313818888181} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 7b45dc31b7c7d754bbc4f38e07733858, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 721718be04f4ea84fb470d44ab37748b, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 5c3ed94971591b3439c528cee49bee3e, type: 2} + - {fileID: 2100000, guid: 78cc598740d404540a68493d4c70c520, type: 2} + - {fileID: 2100000, guid: 6875b4493ed788d4789042aba4880050, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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!1 &8856436567294375154 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5898984544599424917} + - component: {fileID: 6408918442609147521} + - component: {fileID: 8520008173314035990} + m_Layer: 0 + m_Name: 93 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8856560674939848650 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3414147145767824060} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.07281327, y: 0.108672604, z: -0.013490637} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4793414471054946055} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &8858695748936173905 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3714419465656854736} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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!224 &8862042308279923271 RectTransform: m_ObjectHideFlags: 0 @@ -203582,6 +237933,1241 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 179, y: 41} m_Pivot: {x: 0, y: 1} +--- !u!33 &8863036202010555252 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5113022911475748972} + m_Mesh: {fileID: -7246287230559787882, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!1 &8866793296958477900 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6239962930915109633} + - component: {fileID: 9181779348464475494} + - component: {fileID: 6383275425571315045} + m_Layer: 0 + m_Name: Box078 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8867790769273762440 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4500672022278746739} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.15827942, y: 0.24984208, z: -0.28685236} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 26 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &8868954554356402484 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5095427635514819069} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.22345883, y: 0.24984208, z: -0.28685236} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 24 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &8874600426198970924 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5302721503947249987} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.29308343, y: 0.26294157, z: -0.06132862} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7799699611165651300} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &8880110597428737990 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3488200520186256781} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.13627979, y: 0.055102743, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4425983708511861430} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &8890828430127841540 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7372876789854018737} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.03692468, y: 0.12965834, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3659111854849921957} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8891178086725392607 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6862348287560766621} + - component: {fileID: 8775173196518488163} + - component: {fileID: 4611102157128252746} + m_Layer: 0 + m_Name: Object014 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &8891601381534571021 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7899831805472295510} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!1 &8898246136836739626 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7147401259159895573} + - component: {fileID: 7708766456506313434} + - component: {fileID: 1541213860666329468} + m_Layer: 0 + m_Name: Object007 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &8899928440956982172 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5597023365617710053} + 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: 7a2ef6e935679534a894b0af47440c1c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 4a8a2156a741f7d43b02ad9388c04ec4, type: 2} + - {fileID: 2100000, guid: cd753e6b09d44ee4ca3ec65fe8b12077, type: 2} + - {fileID: 2100000, guid: a31d6a4dc1517a34f96b04f27f067140, type: 2} + - {fileID: 2100000, guid: 59b3a1104cbe4ab4c9a9aed7ccbdd810, type: 2} + - {fileID: 2100000, guid: 35f71a8beb8dfe542b319806847da3bd, type: 2} + - {fileID: 2100000, guid: 8ff1d5a2c52311e4696cd22735732a66, type: 2} + - {fileID: 2100000, guid: c96e5463e4288704ca28717a569b0997, type: 2} + - {fileID: 2100000, guid: d3469d2b2aeaf7441b7b8f89a0def34f, type: 2} + - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, 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!23 &8903583984649616423 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4544626606887279026} + 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: f7c4b8b2d4dc9ee4c902e550c5b74afa, 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 &8905644728056852330 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1081817305117922281} + m_Mesh: {fileID: 3971713461252967244, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} +--- !u!1 &8906899285702537484 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7301499081569813195} + - component: {fileID: 7865809325921922895} + - component: {fileID: 7304352291601928663} + m_Layer: 0 + m_Name: Object028 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &8910214905993843715 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2033957675191262329} + m_Mesh: {fileID: -7647463442239531939, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!23 &8915816713074476189 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5950799609685628456} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: f63d38aa595b8f84f81be292eb3df3b2, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 2bcc53f6abfd69c4aa45eff9b449c801, type: 2} + - {fileID: 2100000, guid: 8e5684df0e3c9db48b9430d8a95710a2, type: 2} + - {fileID: 2100000, guid: 5b4bf598c0109384d80c364ced25ddcf, 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 &8925471323880187075 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4285533771430438351} + m_Mesh: {fileID: -2662323533501562378, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!1 &8926154377495688397 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8483859195261948859} + - component: {fileID: 7625907884046513901} + - component: {fileID: 2684145966207427209} + m_Layer: 0 + m_Name: Box102 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &8927262191589113998 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8692419208758522048} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 204d0d4218e32054e81e5f600dcd7c01, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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 &8928454486589936169 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5768971810611009994} + m_Mesh: {fileID: -8148374250349615983, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} +--- !u!1 &8937457313818888181 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3009572905723316373} + - component: {fileID: 2765950924410682408} + - component: {fileID: 8856306824023675692} + m_Layer: 0 + m_Name: Box072 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &8938520073114614138 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5873483391673545035} + m_Mesh: {fileID: -3996760141626369306, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!23 &8938851715949057803 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7676606064685151119} + 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: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 4f57d996fc823c24a99bf2cccdefeaa4, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!1 &8939927056681440048 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2919918208140957896} + - component: {fileID: 1935171533878224188} + - component: {fileID: 8613729354750201910} + m_Layer: 0 + m_Name: Object001 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &8945813266525246989 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7602415919040394979} + m_Mesh: {fileID: -8873797471287979038, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!33 &8959492889081669013 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8662556775601516223} + m_Mesh: {fileID: 1720402882065375157, guid: f3d13bb371d9ee04dae157e80c18f24b, type: 3} +--- !u!23 &8960175077704867751 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4304723977206038446} + 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: -2599914629603330193, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -9147942324677936573, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + - {fileID: -103642963312995085, guid: 4750997a58c825447b4903b672a3d9ce, type: 3} + 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!1 &8963393027790772765 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4176332386443173464} + - component: {fileID: 4923741668615394644} + - component: {fileID: 2970325807182875747} + m_Layer: 0 + m_Name: Box137 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8964759181689621414 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5511872093928264165} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.3723235, y: 0.15951672, z: -0.24793866} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5236682523249791853} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8978479936146953350 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2116447565378137246} + - component: {fileID: 6722815465974881909} + - component: {fileID: 5710285417071567534} + m_Layer: 0 + m_Name: Box037 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &8978791037720209753 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6013860696704019689} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!4 &8978821300702096565 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1344852968344602713} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.038049847, y: 0.12041581, z: -0.13957438} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6057619421335938199} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8996671156534724777 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3029348953197017133} + - component: {fileID: 1881136779173978756} + - component: {fileID: 6026437767624053236} + m_Layer: 0 + m_Name: Box022 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &9001635278191129830 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8803729401699644585} + - component: {fileID: 2708673853127002209} + - component: {fileID: 7991002455864787812} + m_Layer: 0 + m_Name: Box228 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9002526901760329245 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7842722604277050787} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.28451172, y: 0.225, z: -0.31184724} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7906200256174459245} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &9009559466757259034 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8029990441527463319} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 2f7ae9a990b9e4942b084ce4d337db78, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, 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!1 &9014289438920954718 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7564009823862448120} + - component: {fileID: 902860880922353000} + - component: {fileID: 8286519090697304659} + m_Layer: 0 + m_Name: Box011 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &9016494151477489225 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7757593451235258320} + 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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 &9017363926094059672 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8566791999311775194} + m_Mesh: {fileID: -2329098449242126572, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} +--- !u!23 &9017961076575940651 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7773983324315607152} + 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: -6307277589567570940, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -823838804658123227, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -5956578104803850452, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -6257702196253466788, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: 1368039103165038143, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + - {fileID: -8757356216087587297, guid: 50705425d23e8fe418b9ee77133a038d, type: 3} + 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!1 &9022728812148148115 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2935928812515994341} + - component: {fileID: 2758859069557758663} + - component: {fileID: 8061188860630855410} + m_Layer: 0 + m_Name: Object006 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &9029231735876566157 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5642259907068959719} + - component: {fileID: 7785452477093289152} + - component: {fileID: 4243487313012450488} + m_Layer: 0 + m_Name: Box081 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &9033540856855995764 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8631454414095113334} + - component: {fileID: 2337676405317397675} + - component: {fileID: 6361371558804201311} + m_Layer: 0 + m_Name: Object031 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &9034278958605882241 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 85571766687123612} + 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: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: 90091843de6415b44929abd7f9c033bd, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, 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 &9039725527090794471 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9212091750557249371} + m_Mesh: {fileID: 3941715523697911101, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!1 &9044312848110708135 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1319419804534128110} + - component: {fileID: 6303079347794060431} + - component: {fileID: 1109874456567790187} + m_Layer: 0 + m_Name: Box019 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &9045966899047018083 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6273110093332709059} + 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: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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!23 &9050129438623542231 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2992764008354428493} + 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} + - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} + 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!4 &9050759873008920781 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9070352783791423479} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00032439828, y: 0.11210428, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1935563662030491015} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &9068655244433073463 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7602415919040394979} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.09310007, y: 0.24984208, z: -0.2836551} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 606370165244274052} + m_RootOrder: 33 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &9070352783791423479 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9050759873008920781} + - component: {fileID: 6246318915910889846} + - component: {fileID: 7720536145320423340} + m_Layer: 0 + m_Name: Object005 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &9077056872123818853 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5593234048139992093} + - component: {fileID: 8112741367377081703} + - component: {fileID: 1465742496510121824} + m_Layer: 0 + m_Name: Object076 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &9077424687819668514 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8407898132636751386} + - component: {fileID: 9161227977426891} + - component: {fileID: 3105416037296175623} + m_Layer: 0 + m_Name: Box027 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!4 &9078133554203241335 stripped Transform: m_CorrespondingSourceObject: {fileID: 8091121644791126299, guid: 3798e4d0b0b60c74d93f2407fb813c22, @@ -203609,15 +239195,450 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 179, y: 41} m_Pivot: {x: 0, y: 1} +--- !u!4 &9089272748958100174 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6784895067805768176} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.24062161, y: 0.225, z: -0.25532228} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 927285830253531648} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &9091490941096606180 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5987472825976099890} + m_Mesh: {fileID: 1658199413673387437, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!33 &9094721581548440450 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2686593645063771862} + m_Mesh: {fileID: -2639241166356525208, guid: 02ee53bb9fd9bdf4d875f570480cc9cd, type: 3} +--- !u!1 &9094953043089191624 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5591659367985251104} + - component: {fileID: 5456720332183141153} + - component: {fileID: 3515067630495498403} + m_Layer: 0 + m_Name: Object068 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &9097029327218822659 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5462125688595502133} + 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: a0b6607cd34835240b74544e5f63df2e, 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!1 &9099135715402286890 stripped GameObject: m_CorrespondingSourceObject: {fileID: 8355283020830668102, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!23 &9109755749820822779 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5873483391673545035} + 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: a0b6607cd34835240b74544e5f63df2e, 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!1 &9110503696563589219 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5339807359172158204} + - component: {fileID: 4172335775110793019} + - component: {fileID: 115941909142054134} + m_Layer: 0 + m_Name: Box024 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &9111152843872113543 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4995430679338781288} + m_Mesh: {fileID: -8113768720884857512, guid: fcc65de0395699040be81595ac8a1eda, type: 3} +--- !u!33 &9121149256893755870 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2811100467756406824} + m_Mesh: {fileID: 6851674242468891434, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} --- !u!1 &9124360103688475206 stripped GameObject: m_CorrespondingSourceObject: {fileID: 8292621361666351146, guid: 3798e4d0b0b60c74d93f2407fb813c22, type: 3} m_PrefabInstance: {fileID: 987821153196798572} m_PrefabAsset: {fileID: 0} +--- !u!4 &9128294410946011028 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4567580947252627984} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.100792505, y: 0.013047919, z: -0.13957441} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5273522604940259271} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &9129966087588327252 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6195576437767381461} + m_Mesh: {fileID: 9186633843763367028, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} +--- !u!1 &9144075518541614738 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3058764750282130794} + - component: {fileID: 1741859753654499486} + - component: {fileID: 8466016623535312276} + m_Layer: 0 + m_Name: Object001 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &9149987141807482072 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6013860696704019689} + m_Mesh: {fileID: -3996760141626369306, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} +--- !u!1 &9151679755582334220 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7566020521579175478} + - component: {fileID: 626762644403604193} + - component: {fileID: 2549677943512933592} + m_Layer: 0 + m_Name: Object017 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &9164614779602065764 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7532155278205757499} + m_Mesh: {fileID: -4424861107502493888, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} +--- !u!1 &9165532127733989126 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3098087760928485478} + - component: {fileID: 2690928598840149211} + - component: {fileID: 8781268141602466783} + m_Layer: 0 + m_Name: Box072 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &9176219176976619630 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4919495509416643900} + 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: 3bf32b6856e581f4da21632d9010840b, type: 2} + - {fileID: 2100000, guid: 71072fbdce81e8b4cb2727bef9099421, type: 2} + - {fileID: 2100000, guid: 25699cb5a0cc7864586ecc6e5daa26be, 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!23 &9176442770862380469 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8038956624187377467} + 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: 923f7ec07b3bdbc488fbefc389cb8ee7, type: 2} + - {fileID: 2100000, guid: 7876e3bdb59592c4f815fedde787c37e, type: 2} + - {fileID: 2100000, guid: 10236623513f12c4cb82923408ab50f2, type: 2} + - {fileID: 2100000, guid: bd12e094389412d4d89510614ac2c164, type: 2} + - {fileID: 2100000, guid: 48f115dd1ac80274aa23e34e54805269, type: 2} + - {fileID: 2100000, guid: ce4d94322c65882478c9c6dc0a92d168, type: 2} + - {fileID: 2100000, guid: b5dd4a8d63a6731418f1dd99afd7838c, type: 2} + - {fileID: 2100000, guid: cf5586d329d32c54eb0957902257f300, 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 &9181779348464475494 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8866793296958477900} + m_Mesh: {fileID: 1720402882065375157, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} +--- !u!4 &9182940799682368520 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3757324180360625731} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.13627979, y: 0.055102743, z: -0.033691406} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4116396921372432760} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &9183529302988198748 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2533697272779956768} + m_Mesh: {fileID: -7061585933124598971, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} +--- !u!4 &9187504741452866015 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3029019696132230313} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0.00032439828, y: 0.08222815, z: -0.067287266} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5183046070246721810} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &9208008555040226237 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6326493331588613809} + - component: {fileID: 4151782229409451950} + - component: {fileID: 2706247538252258502} + m_Layer: 0 + m_Name: Box003 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &9212091750557249371 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6597727926057542425} + - component: {fileID: 9039725527090794471} + - component: {fileID: 4272173339150043854} + m_Layer: 0 + m_Name: Object014 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 diff --git a/GQ_URP/GQ/Assets/ScriptabLeObject.meta b/GQ_URP/GQ/Assets/ScriptabLeObject.meta new file mode 100644 index 000000000..f37dde4e6 --- /dev/null +++ b/GQ_URP/GQ/Assets/ScriptabLeObject.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4aa194238cdd52140aefd209a7473cd6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/ScriptabLeObject/BaseConf.cs b/GQ_URP/GQ/Assets/ScriptabLeObject/BaseConf.cs new file mode 100644 index 000000000..8c7b455d1 --- /dev/null +++ b/GQ_URP/GQ/Assets/ScriptabLeObject/BaseConf.cs @@ -0,0 +1,67 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.IO; +using UnityEditor; + + +/// +/// 管理类(配置文件) +/// +public class BaseConf : ScriptableObject +{ + public Conf1 conf1 = new Conf1(); + + + + /// + /// Assets界面右键添加配置文件 + /// +#if UNITY_EDITOR + [MenuItem("Assets/Create/Baseconf", false, 0)] + private static void Show() + { + Object o = Selection.activeObject; + if (o) + { + string path = AssetDatabase.GetAssetPath(o); //获取路径 + if (!Directory.Exists(path))//判断是否有 AssetDatabase路径 + { + Directory.CreateDirectory(path);//没有就 创建AssetDatabase路径 + } + ScriptableObject a = CreateInstance();//创建一个自身类型的对象 + if (a)//判断创建的对象是否存在 + { + string str = Unitil.TryGetName(path);//类名打点调用获取文件名,并传参路径 + AssetDatabase.CreateAsset(a, str);//根据对象(自身类) 及 路径创建 + AssetDatabase.SaveAssets();//保存 + } + else//否则创建失败 + { + Debug.LogError(typeof(BaseConf) + " is null");//输出错误语句 + } + } + } +#endif + // Start is called before the first frame update + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } + + [System.Serializable] + public class Conf1 + { + public bool isUse; + public bool isPicture; + public string base64; + public string LensID; + public string LensName; + } +} diff --git a/GQ_URP/GQ/Assets/ScriptabLeObject/BaseConf.cs.meta b/GQ_URP/GQ/Assets/ScriptabLeObject/BaseConf.cs.meta new file mode 100644 index 000000000..b3e42b23e --- /dev/null +++ b/GQ_URP/GQ/Assets/ScriptabLeObject/BaseConf.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49b4836b3b173eb4c8dad6f59d8a8d2f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/ScriptabLeObject/Unitil.cs b/GQ_URP/GQ/Assets/ScriptabLeObject/Unitil.cs new file mode 100644 index 000000000..77e7f3e12 --- /dev/null +++ b/GQ_URP/GQ/Assets/ScriptabLeObject/Unitil.cs @@ -0,0 +1,34 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +public class Unitil +{ +#if UNITY_EDITOR + /// + /// 获取创建配置文件的路径【全】 + /// + /// 泛型 + /// AssetDatabase 路径 + /// 文件后缀 + /// 创建配置文件路径【全】 + public static string TryGetName(string str, string buff = ".asset") + { + int index = 0;//下标 + string s = "";//自定义文件名(完整的)【需拼接】 + Object obj = null; + do//如果能找到 obj就循环,否则停止 + { + s = str + "/" + typeof(T).Name + "_" + index + buff; + //AssetDatabase 路径 + 文件名 + 下标 + 后缀名 + + obj = AssetDatabase.LoadAssetAtPath(s, typeof(T)); + //通过路径、类型进行寻找【找到有就循环,没有停止】 + index++;//名字下标+1,取名唯一 + } + while (obj); + return s;//返回 创建配置文件路径【全】 + } +#endif +} diff --git a/GQ_URP/GQ/Assets/ScriptabLeObject/Unitil.cs.meta b/GQ_URP/GQ/Assets/ScriptabLeObject/Unitil.cs.meta new file mode 100644 index 000000000..bba1b86c4 --- /dev/null +++ b/GQ_URP/GQ/Assets/ScriptabLeObject/Unitil.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd3fb508c55d15f42be4d6d97f9ba573 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/Scripts/WJ/SecondConfirmPanel.cs b/GQ_URP/GQ/Assets/Scripts/WJ/SecondConfirmPanel.cs index 029ec488f..11dbc74bd 100644 --- a/GQ_URP/GQ/Assets/Scripts/WJ/SecondConfirmPanel.cs +++ b/GQ_URP/GQ/Assets/Scripts/WJ/SecondConfirmPanel.cs @@ -35,13 +35,13 @@ public class SecondConfirmPanel : MonoBehaviour private void Conform() { - onConfirmButtonClicked?.Invoke(true); panel_object.SetActive(false); + onConfirmButtonClicked?.Invoke(true); } private void Cancle() { - onConfirmButtonClicked?.Invoke(false); panel_object.SetActive(false); + onConfirmButtonClicked?.Invoke(false); } } diff --git a/GQ_URP/GQ/Assets/UI/11.jpg b/GQ_URP/GQ/Assets/UI/11.jpg deleted file mode 100644 index 6fe6704f3..000000000 Binary files a/GQ_URP/GQ/Assets/UI/11.jpg and /dev/null differ diff --git a/GQ_URP/GQ/Assets/UI/Line_N.png b/GQ_URP/GQ/Assets/UI/Line_N.png new file mode 100644 index 000000000..8b345a259 Binary files /dev/null and b/GQ_URP/GQ/Assets/UI/Line_N.png differ diff --git a/GQ_URP/GQ/Assets/UI/Line_N.png.meta b/GQ_URP/GQ/Assets/UI/Line_N.png.meta new file mode 100644 index 000000000..782af5ff2 --- /dev/null +++ b/GQ_URP/GQ/Assets/UI/Line_N.png.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 1e4acd4b855768e4580e1573e3cd3cf7 +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: 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: 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: 1 + 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 + 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/GQ_URP/GQ/Assets/UI/line_D.jpg b/GQ_URP/GQ/Assets/UI/line_D.jpg new file mode 100644 index 000000000..1bc98c929 Binary files /dev/null and b/GQ_URP/GQ/Assets/UI/line_D.jpg differ diff --git a/GQ_URP/GQ/Assets/UI/line_D.jpg.meta b/GQ_URP/GQ/Assets/UI/line_D.jpg.meta new file mode 100644 index 000000000..0db552347 --- /dev/null +++ b/GQ_URP/GQ/Assets/UI/line_D.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 5d1e403ec32411148b5be46975b16836 +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: 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 + 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 + 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/GQ_URP/GQ/Assets/conf.meta b/GQ_URP/GQ/Assets/conf.meta new file mode 100644 index 000000000..cc0689020 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 83853444d90948444b33a4b8d67ffc73 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_0.asset b/GQ_URP/GQ/Assets/conf/BaseConf_0.asset new file mode 100644 index 000000000..03a9fd3de --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_0.asset @@ -0,0 +1,20 @@ +%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: 49b4836b3b173eb4c8dad6f59d8a8d2f, type: 3} + m_Name: BaseConf_0 + m_EditorClassIdentifier: + conf1: + isUse: 1 + isPicture: 0 + base64: + LensID: + LensName: 01 diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_0.asset.meta b/GQ_URP/GQ/Assets/conf/BaseConf_0.asset.meta new file mode 100644 index 000000000..f19a2ac33 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_0.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6a00821d06a43d94cbdd1ed9e1b53884 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_1.asset b/GQ_URP/GQ/Assets/conf/BaseConf_1.asset new file mode 100644 index 000000000..06c2bc348 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_1.asset @@ -0,0 +1,20 @@ +%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: 49b4836b3b173eb4c8dad6f59d8a8d2f, type: 3} + m_Name: BaseConf_1 + m_EditorClassIdentifier: + conf1: + isUse: 1 + isPicture: 0 + base64: + LensID: + LensName: 02 diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_1.asset.meta b/GQ_URP/GQ/Assets/conf/BaseConf_1.asset.meta new file mode 100644 index 000000000..f93b59ff4 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_1.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 09617952a96dffc4d89dd2ccda47b89c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_10.asset b/GQ_URP/GQ/Assets/conf/BaseConf_10.asset new file mode 100644 index 000000000..0ee48ff9a --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_10.asset @@ -0,0 +1,20 @@ +%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: 49b4836b3b173eb4c8dad6f59d8a8d2f, type: 3} + m_Name: BaseConf_10 + m_EditorClassIdentifier: + conf1: + isUse: 1 + isPicture: 0 + base64: + LensID: + LensName: 11 diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_10.asset.meta b/GQ_URP/GQ/Assets/conf/BaseConf_10.asset.meta new file mode 100644 index 000000000..8cd90e240 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_10.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 984ec76e9c0afd8499e91f81fccab75f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_11.asset b/GQ_URP/GQ/Assets/conf/BaseConf_11.asset new file mode 100644 index 000000000..84db600e1 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_11.asset @@ -0,0 +1,20 @@ +%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: 49b4836b3b173eb4c8dad6f59d8a8d2f, type: 3} + m_Name: BaseConf_11 + m_EditorClassIdentifier: + conf1: + isUse: 1 + isPicture: 0 + base64: + LensID: + LensName: 12 diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_11.asset.meta b/GQ_URP/GQ/Assets/conf/BaseConf_11.asset.meta new file mode 100644 index 000000000..d488179aa --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_11.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bda340a87f7c0854d9e4ddfbf6338c83 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_12.asset b/GQ_URP/GQ/Assets/conf/BaseConf_12.asset new file mode 100644 index 000000000..f4b4d37f6 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_12.asset @@ -0,0 +1,20 @@ +%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: 49b4836b3b173eb4c8dad6f59d8a8d2f, type: 3} + m_Name: BaseConf_12 + m_EditorClassIdentifier: + conf1: + isUse: 1 + isPicture: 0 + base64: + LensID: + LensName: 13 diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_12.asset.meta b/GQ_URP/GQ/Assets/conf/BaseConf_12.asset.meta new file mode 100644 index 000000000..a6644a1ca --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_12.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d0b81b084ef37a44e9f4e71d1b1c984a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_13.asset b/GQ_URP/GQ/Assets/conf/BaseConf_13.asset new file mode 100644 index 000000000..3ca6efaef --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_13.asset @@ -0,0 +1,20 @@ +%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: 49b4836b3b173eb4c8dad6f59d8a8d2f, type: 3} + m_Name: BaseConf_13 + m_EditorClassIdentifier: + conf1: + isUse: 1 + isPicture: 0 + base64: + LensID: + LensName: 14 diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_13.asset.meta b/GQ_URP/GQ/Assets/conf/BaseConf_13.asset.meta new file mode 100644 index 000000000..5dfb2d472 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_13.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9bbf95efb4f0a3545a83f9b4956fab34 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_14.asset b/GQ_URP/GQ/Assets/conf/BaseConf_14.asset new file mode 100644 index 000000000..a6250407b --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_14.asset @@ -0,0 +1,20 @@ +%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: 49b4836b3b173eb4c8dad6f59d8a8d2f, type: 3} + m_Name: BaseConf_14 + m_EditorClassIdentifier: + conf1: + isUse: 1 + isPicture: 0 + base64: + LensID: + LensName: 15 diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_14.asset.meta b/GQ_URP/GQ/Assets/conf/BaseConf_14.asset.meta new file mode 100644 index 000000000..a4a57fa96 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_14.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8720e08d500fe354bb79406e0c2f8b83 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_15.asset b/GQ_URP/GQ/Assets/conf/BaseConf_15.asset new file mode 100644 index 000000000..0b3a8fb33 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_15.asset @@ -0,0 +1,20 @@ +%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: 49b4836b3b173eb4c8dad6f59d8a8d2f, type: 3} + m_Name: BaseConf_15 + m_EditorClassIdentifier: + conf1: + isUse: 1 + isPicture: 0 + base64: + LensID: + LensName: 16 diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_15.asset.meta b/GQ_URP/GQ/Assets/conf/BaseConf_15.asset.meta new file mode 100644 index 000000000..5e1d328d8 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_15.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: acccfed4a183da74199d71fe17dd9a32 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_2.asset b/GQ_URP/GQ/Assets/conf/BaseConf_2.asset new file mode 100644 index 000000000..1bebaf0a5 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_2.asset @@ -0,0 +1,20 @@ +%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: 49b4836b3b173eb4c8dad6f59d8a8d2f, type: 3} + m_Name: BaseConf_2 + m_EditorClassIdentifier: + conf1: + isUse: 1 + isPicture: 0 + base64: + LensID: + LensName: 03 diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_2.asset.meta b/GQ_URP/GQ/Assets/conf/BaseConf_2.asset.meta new file mode 100644 index 000000000..555d7594d --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_2.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c8e7517ba55bb5e4c99616e60342f3fb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_3.asset b/GQ_URP/GQ/Assets/conf/BaseConf_3.asset new file mode 100644 index 000000000..0e0c1210a --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_3.asset @@ -0,0 +1,20 @@ +%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: 49b4836b3b173eb4c8dad6f59d8a8d2f, type: 3} + m_Name: BaseConf_3 + m_EditorClassIdentifier: + conf1: + isUse: 1 + isPicture: 0 + base64: + LensID: + LensName: 04 diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_3.asset.meta b/GQ_URP/GQ/Assets/conf/BaseConf_3.asset.meta new file mode 100644 index 000000000..716e1d541 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_3.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3cd442d6b818712459d779cae9b99677 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_4.asset b/GQ_URP/GQ/Assets/conf/BaseConf_4.asset new file mode 100644 index 000000000..af0340625 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_4.asset @@ -0,0 +1,20 @@ +%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: 49b4836b3b173eb4c8dad6f59d8a8d2f, type: 3} + m_Name: BaseConf_4 + m_EditorClassIdentifier: + conf1: + isUse: 1 + isPicture: 0 + base64: + LensID: + LensName: 05 diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_4.asset.meta b/GQ_URP/GQ/Assets/conf/BaseConf_4.asset.meta new file mode 100644 index 000000000..2a59361ab --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_4.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 577cc69042108c54e8d975ce0add1efe +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_5.asset b/GQ_URP/GQ/Assets/conf/BaseConf_5.asset new file mode 100644 index 000000000..c9a3c5bbc --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_5.asset @@ -0,0 +1,20 @@ +%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: 49b4836b3b173eb4c8dad6f59d8a8d2f, type: 3} + m_Name: BaseConf_5 + m_EditorClassIdentifier: + conf1: + isUse: 1 + isPicture: 0 + base64: + LensID: + LensName: 06 diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_5.asset.meta b/GQ_URP/GQ/Assets/conf/BaseConf_5.asset.meta new file mode 100644 index 000000000..29a4e88e2 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_5.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f24b9027ce0c0e147b46fc5acdbba227 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_6.asset b/GQ_URP/GQ/Assets/conf/BaseConf_6.asset new file mode 100644 index 000000000..6159765c1 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_6.asset @@ -0,0 +1,20 @@ +%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: 49b4836b3b173eb4c8dad6f59d8a8d2f, type: 3} + m_Name: BaseConf_6 + m_EditorClassIdentifier: + conf1: + isUse: 1 + isPicture: 0 + base64: + LensID: + LensName: 07 diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_6.asset.meta b/GQ_URP/GQ/Assets/conf/BaseConf_6.asset.meta new file mode 100644 index 000000000..140cee6b5 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_6.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 90a9f5ed75c627f42a83ce3f7b2bf8ce +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_7.asset b/GQ_URP/GQ/Assets/conf/BaseConf_7.asset new file mode 100644 index 000000000..497c7d100 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_7.asset @@ -0,0 +1,20 @@ +%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: 49b4836b3b173eb4c8dad6f59d8a8d2f, type: 3} + m_Name: BaseConf_7 + m_EditorClassIdentifier: + conf1: + isUse: 1 + isPicture: 0 + base64: + LensID: + LensName: 08 diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_7.asset.meta b/GQ_URP/GQ/Assets/conf/BaseConf_7.asset.meta new file mode 100644 index 000000000..0d893ce84 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_7.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 28b9808413ca78341aa7e36852c35df5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_8.asset b/GQ_URP/GQ/Assets/conf/BaseConf_8.asset new file mode 100644 index 000000000..1d2e83164 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_8.asset @@ -0,0 +1,20 @@ +%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: 49b4836b3b173eb4c8dad6f59d8a8d2f, type: 3} + m_Name: BaseConf_8 + m_EditorClassIdentifier: + conf1: + isUse: 1 + isPicture: 0 + base64: + LensID: + LensName: 09 diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_8.asset.meta b/GQ_URP/GQ/Assets/conf/BaseConf_8.asset.meta new file mode 100644 index 000000000..018bd4d94 --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_8.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5c25b2feca7a61f4a9ee73ebb2677da8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_9.asset b/GQ_URP/GQ/Assets/conf/BaseConf_9.asset new file mode 100644 index 000000000..69a227b5b --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_9.asset @@ -0,0 +1,20 @@ +%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: 49b4836b3b173eb4c8dad6f59d8a8d2f, type: 3} + m_Name: BaseConf_9 + m_EditorClassIdentifier: + conf1: + isUse: 1 + isPicture: 0 + base64: + LensID: + LensName: 10 diff --git a/GQ_URP/GQ/Assets/conf/BaseConf_9.asset.meta b/GQ_URP/GQ/Assets/conf/BaseConf_9.asset.meta new file mode 100644 index 000000000..0b21d3bab --- /dev/null +++ b/GQ_URP/GQ/Assets/conf/BaseConf_9.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2fe3df14fbbc840418febde070b57555 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/10.prefab b/GQ_URP/GQ/Assets/prefab/老模型/10.prefab deleted file mode 100644 index 65cd38197..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/10.prefab +++ /dev/null @@ -1,881 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &66970410169665511 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6475049473522142113} - - component: {fileID: 2037717106832972419} - - component: {fileID: 410206052814001983} - m_Layer: 8 - m_Name: Line008 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6475049473522142113 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 66970410169665511} - m_LocalRotation: {x: 0.9890159, y: -0, z: 0, w: -0.14780955} - m_LocalPosition: {x: -0.02072958, y: 0.06323634, z: 0.007123116} - m_LocalScale: {x: 0.44394824, y: 1.532125, z: 1.532125} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7026585926729713487} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2037717106832972419 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 66970410169665511} - m_Mesh: {fileID: -2696279837256549028, guid: bea53e191a4a577419c29434632bd14a, type: 3} ---- !u!23 &410206052814001983 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 66970410169665511} - 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: 7626191068330388430, guid: bea53e191a4a577419c29434632bd14a, type: 3} - 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!1 &1144872869109104966 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1634015256592065549} - - component: {fileID: 2185509083823161730} - - component: {fileID: 4027952607369209633} - m_Layer: 8 - m_Name: Line007 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1634015256592065549 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1144872869109104966} - m_LocalRotation: {x: 0.9890159, y: -0, z: 0, w: -0.14780955} - m_LocalPosition: {x: 0.0028937208, y: 0.06323634, z: 0.007123116} - m_LocalScale: {x: 0.44394824, y: 1.532125, z: 1.532125} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7026585926729713487} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2185509083823161730 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1144872869109104966} - m_Mesh: {fileID: -7102589008999902672, guid: bea53e191a4a577419c29434632bd14a, type: 3} ---- !u!23 &4027952607369209633 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1144872869109104966} - 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: 7626191068330388430, guid: bea53e191a4a577419c29434632bd14a, type: 3} - 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!1 &1217379487487286200 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3694302015090565564} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3694302015090565564 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1217379487487286200} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: -0.179, z: 0.25} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7026585926729713487} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1661679705045642329 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4871727709374506913} - - component: {fileID: 8198069645477698133} - - component: {fileID: 2059382652382981983} - m_Layer: 8 - m_Name: Object001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4871727709374506913 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1661679705045642329} - m_LocalRotation: {x: 0.00000008146034, y: 0, z: -0, w: 1} - m_LocalPosition: {x: 0.00017918646, y: 0.09449385, z: 0.0000021139278} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7026585926729713487} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8198069645477698133 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1661679705045642329} - m_Mesh: {fileID: -3292925553009838691, guid: bea53e191a4a577419c29434632bd14a, type: 3} ---- !u!23 &2059382652382981983 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1661679705045642329} - 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: 5629084884208175553, guid: bea53e191a4a577419c29434632bd14a, type: 3} - 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!1 &2598750296847998056 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7705534786036479154} - - component: {fileID: 1132934596315821573} - - component: {fileID: 4644988579099459695} - m_Layer: 8 - m_Name: Line004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7705534786036479154 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2598750296847998056} - m_LocalRotation: {x: 0.19080907, y: 0, z: -0, w: 0.98162717} - m_LocalPosition: {x: 0.07376362, y: 0.06323634, z: 0.007123116} - m_LocalScale: {x: 0.44394824, y: 1.532125, z: 1.532125} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7026585926729713487} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1132934596315821573 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2598750296847998056} - m_Mesh: {fileID: -1824870671384894608, guid: bea53e191a4a577419c29434632bd14a, type: 3} ---- !u!23 &4644988579099459695 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2598750296847998056} - 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: 7626191068330388430, guid: bea53e191a4a577419c29434632bd14a, type: 3} - 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!1 &2930276169424810080 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7517403843271424868} - - component: {fileID: 3957286571665816656} - - component: {fileID: 8943855178448069532} - m_Layer: 8 - m_Name: 10 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7517403843271424868 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2930276169424810080} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0, z: 0.0000020499442} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7026585926729713487} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3957286571665816656 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2930276169424810080} - m_Mesh: {fileID: 2693012856814855960, guid: bea53e191a4a577419c29434632bd14a, type: 3} ---- !u!23 &8943855178448069532 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2930276169424810080} - 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: 367213180074456369, guid: bea53e191a4a577419c29434632bd14a, type: 3} - - {fileID: 3274929075364713951, guid: bea53e191a4a577419c29434632bd14a, type: 3} - - {fileID: 1164559979738526386, guid: bea53e191a4a577419c29434632bd14a, type: 3} - - {fileID: 1196480866727828669, guid: bea53e191a4a577419c29434632bd14a, type: 3} - - {fileID: -5309146791756261813, guid: bea53e191a4a577419c29434632bd14a, type: 3} - - {fileID: -1152147162816932204, guid: bea53e191a4a577419c29434632bd14a, type: 3} - - {fileID: 507964552181651666, guid: bea53e191a4a577419c29434632bd14a, type: 3} - - {fileID: 7182259056892446755, guid: bea53e191a4a577419c29434632bd14a, type: 3} - - {fileID: -4971594290552944009, guid: bea53e191a4a577419c29434632bd14a, type: 3} - - {fileID: -2510483096459867325, guid: bea53e191a4a577419c29434632bd14a, type: 3} - 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!1 &7694578086809673205 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7026585926729713487} - - component: {fileID: 8319039211073325494} - - component: {fileID: 1328893073134167264} - - component: {fileID: 2646338743344166727} - - component: {fileID: 2969134183091713721} - - component: {fileID: -8360215297112113376} - m_Layer: 8 - m_Name: 10 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7026585926729713487 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7694578086809673205} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 7517403843271424868} - - {fileID: 7705534786036479154} - - {fileID: 7179611759306842742} - - {fileID: 8883680248036799237} - - {fileID: 1634015256592065549} - - {fileID: 6475049473522142113} - - {fileID: 2605857195318995415} - - {fileID: 4871727709374506913} - - {fileID: 3694302015090565564} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &8319039211073325494 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7694578086809673205} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 10 - occupyNum: 3 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &1328893073134167264 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7694578086809673205} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 3 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &2646338743344166727 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7694578086809673205} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &2969134183091713721 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7694578086809673205} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &-8360215297112113376 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7694578086809673205} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 3 - selfIcon: {fileID: 21300000, guid: 45219a6f61125d04c9a97471deced078, type: 3} ---- !u!1 &8326357810472473141 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7179611759306842742} - - component: {fileID: 8118947855550590111} - - component: {fileID: 4533689085310127900} - m_Layer: 8 - m_Name: Line005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7179611759306842742 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8326357810472473141} - m_LocalRotation: {x: 0.19080907, y: 0, z: -0, w: 0.98162717} - m_LocalPosition: {x: 0.050140318, y: 0.06323634, z: 0.007123116} - m_LocalScale: {x: 0.44394824, y: 1.532125, z: 1.532125} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7026585926729713487} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8118947855550590111 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8326357810472473141} - m_Mesh: {fileID: 3442923855343079542, guid: bea53e191a4a577419c29434632bd14a, type: 3} ---- !u!23 &4533689085310127900 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8326357810472473141} - 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: 7626191068330388430, guid: bea53e191a4a577419c29434632bd14a, type: 3} - 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!1 &8861239285316362296 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2605857195318995415} - - component: {fileID: 5272432617740751139} - - component: {fileID: 5950608289297111480} - m_Layer: 8 - m_Name: Line009 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2605857195318995415 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8861239285316362296} - m_LocalRotation: {x: 0.9890159, y: -0, z: 0, w: -0.14780955} - m_LocalPosition: {x: -0.044352878, y: 0.06323634, z: 0.007123116} - m_LocalScale: {x: 0.44394824, y: 1.532125, z: 1.532125} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7026585926729713487} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5272432617740751139 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8861239285316362296} - m_Mesh: {fileID: -4390266199250826968, guid: bea53e191a4a577419c29434632bd14a, type: 3} ---- !u!23 &5950608289297111480 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8861239285316362296} - 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: 7626191068330388430, guid: bea53e191a4a577419c29434632bd14a, type: 3} - 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!1 &8984816026954004327 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8883680248036799237} - - component: {fileID: 7445514802428216914} - - component: {fileID: 5517099195653022278} - m_Layer: 8 - m_Name: Line006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8883680248036799237 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8984816026954004327} - m_LocalRotation: {x: 0.9890159, y: -0, z: 0, w: -0.14780955} - m_LocalPosition: {x: 0.026517022, y: 0.06323634, z: 0.007123116} - m_LocalScale: {x: 0.44394824, y: 1.532125, z: 1.532125} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7026585926729713487} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7445514802428216914 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8984816026954004327} - m_Mesh: {fileID: -7332506622660098701, guid: bea53e191a4a577419c29434632bd14a, type: 3} ---- !u!23 &5517099195653022278 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8984816026954004327} - 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: 7626191068330388430, guid: bea53e191a4a577419c29434632bd14a, type: 3} - 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} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/12.prefab b/GQ_URP/GQ/Assets/prefab/老模型/12.prefab deleted file mode 100644 index 818de1a19..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/12.prefab +++ /dev/null @@ -1,3235 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &978148888904913267 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8912298584505804425} - - component: {fileID: 132204518935486817} - - component: {fileID: 339699763450494514} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8912298584505804425 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 978148888904913267} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0049, y: -0.2686, z: -0.16092} - m_LocalScale: {x: 0.01449, y: 0.01449, z: 0.01449} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7295796144876557686} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &132204518935486817 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 978148888904913267} - 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!114 &339699763450494514 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 978148888904913267} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1021122384560015374 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5374347838279151232} - - component: {fileID: 5637982957640828897} - - component: {fileID: 681201745824937769} - m_Layer: 8 - m_Name: Box038 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5374347838279151232 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1021122384560015374} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.043871485, y: 0.42568934, z: -0.26399994} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5815911318279455709} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5637982957640828897 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1021122384560015374} - m_Mesh: {fileID: 4236268024495968267, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!23 &681201745824937769 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1021122384560015374} - 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: -4393270081050254010, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -3661639628750336703, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -7070273339311796134, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 699023012457304161, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 4999486961255905946, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 3925418980499852262, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -4245664206334490528, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 6431252281926298313, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -1152147162816932204, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -5309146791756261813, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1196480866727828669, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - 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!1 &1140139204269594778 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6179904719278202757} - - component: {fileID: 5823324158810456639} - - component: {fileID: 2690263077342709818} - m_Layer: 8 - m_Name: Object009 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6179904719278202757 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1140139204269594778} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.27236468, y: 0.42568934, z: -0.26399994} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5815911318279455709} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5823324158810456639 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1140139204269594778} - m_Mesh: {fileID: 4944557015945844418, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!23 &2690263077342709818 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1140139204269594778} - 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: -4393270081050254010, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 6431252281926298313, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -7070273339311796134, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 699023012457304161, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 4999486961255905946, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 3925418980499852262, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - 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!1 &1356799119120645980 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1163129295753287841} - - component: {fileID: 1693694556986901389} - - component: {fileID: 7883037780140935713} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1163129295753287841 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1356799119120645980} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0042, y: -0.2686, z: -0.2327} - m_LocalScale: {x: 0.014485483, y: 0.014485483, z: 0.014485483} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8089546096632452012} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1693694556986901389 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1356799119120645980} - 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!114 &7883037780140935713 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1356799119120645980} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1415489654584310502 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4865810907203982748} - - component: {fileID: 364902636776440775} - - component: {fileID: 2315172198157081031} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4865810907203982748 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1415489654584310502} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0038, y: -0.2686, z: -0.2314} - m_LocalScale: {x: 0.01449, y: 0.01449, z: 0.01449} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3161076243446039792} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &364902636776440775 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1415489654584310502} - 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!114 &2315172198157081031 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1415489654584310502} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1592002256250402483 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5574096700245745855} - - component: {fileID: 6370066982325638267} - - component: {fileID: 8064482628245935309} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5574096700245745855 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1592002256250402483} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0148, y: -0.26855, z: -0.0859} - m_LocalScale: {x: 0.01589282, y: 0.01589282, z: 0.01589282} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3828644167049736130} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6370066982325638267 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1592002256250402483} - 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!114 &8064482628245935309 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1592002256250402483} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1825833760726290623 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8135926790823758742} - - component: {fileID: 258917151623156086} - - component: {fileID: 4636849224691444549} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8135926790823758742 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1825833760726290623} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0042, y: -0.2686, z: -0.2009} - m_LocalScale: {x: 0.014485483, y: 0.014485483, z: 0.014485483} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8089546096632452012} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &258917151623156086 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1825833760726290623} - 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!114 &4636849224691444549 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1825833760726290623} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2262194839449572901 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 386956500983855176} - - component: {fileID: 1815859849304636214} - - component: {fileID: 396313980163668377} - m_Layer: 8 - m_Name: Box041 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &386956500983855176 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2262194839449572901} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00000011920929, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5815911318279455709} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1815859849304636214 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2262194839449572901} - m_Mesh: {fileID: 7463243275869744982, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!23 &396313980163668377 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2262194839449572901} - 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: -6399612216211486501, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 5553511237050960870, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 4092454572925090586, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -6877502002674649564, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 800100461828299636, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -898545713299911201, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - 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!1 &2465562209976106254 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3415149913804335435} - - component: {fileID: 8384000631874069631} - - component: {fileID: 6011898256643327941} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3415149913804335435 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2465562209976106254} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0031, y: -0.2686, z: -0.0772} - m_LocalScale: {x: 0.01449, y: 0.01449, z: 0.01449} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7747230823147698403} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8384000631874069631 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2465562209976106254} - 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!114 &6011898256643327941 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2465562209976106254} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2602012428986519111 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8562797652060601413} - - component: {fileID: 9027944062707754100} - - component: {fileID: 9207456882710492129} - m_Layer: 8 - m_Name: Box039 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8562797652060601413 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2602012428986519111} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.10464895, y: 0.42568934, z: -0.26399994} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5815911318279455709} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &9027944062707754100 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2602012428986519111} - m_Mesh: {fileID: 1414275290710141465, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!23 &9207456882710492129 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2602012428986519111} - 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: -4393270081050254010, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -3661639628750336703, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -7070273339311796134, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 699023012457304161, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 4999486961255905946, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 3925418980499852262, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -4245664206334490528, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 6431252281926298313, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1164559979738526386, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -1152147162816932204, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -5309146791756261813, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1196480866727828669, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - 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!1 &2754600746966837451 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8263802546514207539} - - component: {fileID: 4679331014334422727} - - component: {fileID: 3288001251935054797} - m_Layer: 8 - m_Name: Object001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8263802546514207539 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2754600746966837451} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.04163775, y: 0.088791445, z: -0.26399994} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5815911318279455709} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4679331014334422727 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2754600746966837451} - m_Mesh: {fileID: -3292925553009838691, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!23 &3288001251935054797 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2754600746966837451} - 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: -6257702196253466788, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1164185304146670524, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 3925418980499852262, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -6307277589567570940, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -5956578104803850452, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - 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!1 &2807393821899148293 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2651311396090324536} - - component: {fileID: 5990406167954435701} - - component: {fileID: 7863630554410913190} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2651311396090324536 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2807393821899148293} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0038, y: -0.2686, z: -0.2499} - m_LocalScale: {x: 0.01449, y: 0.01449, z: 0.01449} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7747230823147698403} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5990406167954435701 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2807393821899148293} - 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!114 &7863630554410913190 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2807393821899148293} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2997656276465726373 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8089546096632452012} - - component: {fileID: 7872875669569800198} - - component: {fileID: 8373604652707311820} - - component: {fileID: 9054315747419870276} - - component: {fileID: 4006150548270763329} - - component: {fileID: 1377106012660119367} - - component: {fileID: 2981013084131813142} - m_Layer: 8 - m_Name: Box012 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8089546096632452012 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2997656276465726373} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2119822, y: 0.42568934, z: -0.26399994} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2845233346709290993} - - {fileID: 2030977927619425117} - - {fileID: 1155117752499187410} - - {fileID: 8135926790823758742} - - {fileID: 1163129295753287841} - - {fileID: 6143229709551138009} - m_Father: {fileID: 5815911318279455709} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7872875669569800198 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2997656276465726373} - m_Mesh: {fileID: -8586770294792153069, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!23 &8373604652707311820 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2997656276465726373} - 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: -4393270081050254010, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 6431252281926298313, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -7070273339311796134, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 699023012457304161, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 4999486961255905946, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 3925418980499852262, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -4245664206334490528, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -2585355649735288889, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1196480866727828669, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -861525867060925902, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1164559979738526386, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -1152147162816932204, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -5309146791756261813, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - 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!114 &9054315747419870276 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2997656276465726373} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &4006150548270763329 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2997656276465726373} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1377106012660119367 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2997656276465726373} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &2981013084131813142 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2997656276465726373} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -8586770294792153069, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!1 &4174523000817814614 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5423518264627504708} - - component: {fileID: 6951656331682506144} - - component: {fileID: 6373866186320827776} - m_Layer: 8 - m_Name: Box040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5423518264627504708 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4174523000817814614} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00000011920929, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5815911318279455709} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6951656331682506144 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4174523000817814614} - m_Mesh: {fileID: 6851674242468891434, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!23 &6373866186320827776 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4174523000817814614} - 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: -4839061070205968498, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 5553511237050960870, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 2832139535132638483, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - 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!1 &4296616750502500529 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 536814919433921562} - - component: {fileID: 7839809317789151200} - - component: {fileID: 989275797755609076} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &536814919433921562 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4296616750502500529} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0031, y: -0.2686, z: -0.1025} - m_LocalScale: {x: 0.01449, y: 0.01449, z: 0.01449} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7747230823147698403} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7839809317789151200 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4296616750502500529} - 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!114 &989275797755609076 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4296616750502500529} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4620212410208808168 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7295796144876557686} - - component: {fileID: 5009392033578126739} - - component: {fileID: 1445270038472094066} - - component: {fileID: 841321211076511399} - - component: {fileID: 3164380483597525809} - - component: {fileID: 7451609054331108945} - - component: {fileID: 4455508541875894930} - m_Layer: 8 - m_Name: Box014 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7295796144876557686 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4620212410208808168} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.12149057, y: 0.42568934, z: -0.26399994} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 63141483468615079} - - {fileID: 8912298584505804425} - m_Father: {fileID: 5815911318279455709} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5009392033578126739 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4620212410208808168} - m_Mesh: {fileID: 3868671361854562809, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!23 &1445270038472094066 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4620212410208808168} - 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: -4393270081050254010, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 6431252281926298313, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -7070273339311796134, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 699023012457304161, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 4999486961255905946, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 3925418980499852262, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 6740078799833086702, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -4245664206334490528, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -2585355649735288889, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -861525867060925902, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1164185304146670524, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1164559979738526386, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -1152147162816932204, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -5309146791756261813, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1196480866727828669, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - 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!114 &841321211076511399 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4620212410208808168} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 4 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &3164380483597525809 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4620212410208808168} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &7451609054331108945 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4620212410208808168} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &4455508541875894930 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4620212410208808168} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 3868671361854562809, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!1 &4811912890639921421 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7692723841041075201} - - component: {fileID: 328802672572613918} - - component: {fileID: 1765611668036130422} - m_Layer: 8 - m_Name: Box003 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7692723841041075201 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4811912890639921421} - 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: 5815911318279455709} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &328802672572613918 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4811912890639921421} - m_Mesh: {fileID: 690106047850165013, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!23 &1765611668036130422 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4811912890639921421} - 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: -7070273339311796134, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -6307277589567570940, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -5956578104803850452, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 3925418980499852262, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -4393270081050254010, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1164185304146670524, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 4999486961255905946, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 699023012457304161, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 3925418980499852262, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 459952892383886500, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -6257702196253466788, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - 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!1 &4844565856819258382 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3161076243446039792} - - component: {fileID: 3798284181841958296} - - component: {fileID: 6537150505885027465} - - component: {fileID: 7328586107061537596} - - component: {fileID: 216197699154369858} - - component: {fileID: 2962686145514812856} - - component: {fileID: 2434942403669299650} - m_Layer: 8 - m_Name: Box015 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3161076243446039792 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4844565856819258382} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.0861765, y: 0.42568934, z: -0.26399994} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4865810907203982748} - m_Father: {fileID: 5815911318279455709} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3798284181841958296 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4844565856819258382} - m_Mesh: {fileID: -8298940227465870776, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!23 &6537150505885027465 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4844565856819258382} - 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: -4393270081050254010, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 6431252281926298313, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -7070273339311796134, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 699023012457304161, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 4999486961255905946, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 3925418980499852262, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 6740078799833086702, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -4245664206334490528, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -2585355649735288889, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1164185304146670524, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -861525867060925902, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1164559979738526386, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -1152147162816932204, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -5309146791756261813, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1196480866727828669, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - 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!114 &7328586107061537596 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4844565856819258382} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 5 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &216197699154369858 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4844565856819258382} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &2962686145514812856 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4844565856819258382} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &2434942403669299650 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4844565856819258382} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -8298940227465870776, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!1 &5212787863062275824 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 429627211492120289} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &429627211492120289 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5212787863062275824} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: -0.45, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5815911318279455709} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &5880748869370517186 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1155117752499187410} - - component: {fileID: 7077505662987344443} - - component: {fileID: 6901401707115619991} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1155117752499187410 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5880748869370517186} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0042, y: -0.2686, z: -0.1824} - m_LocalScale: {x: 0.014485483, y: 0.014485483, z: 0.014485483} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8089546096632452012} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7077505662987344443 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5880748869370517186} - 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!114 &6901401707115619991 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5880748869370517186} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6160727796753207125 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2030977927619425117} - - component: {fileID: 3337220505723448946} - - component: {fileID: 7491398672664892843} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2030977927619425117 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6160727796753207125} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0042, y: -0.2686, z: -0.1526} - m_LocalScale: {x: 0.014485483, y: 0.014485483, z: 0.014485483} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8089546096632452012} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3337220505723448946 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6160727796753207125} - 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!114 &7491398672664892843 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6160727796753207125} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6307004521242687807 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8661926012918159231} - - component: {fileID: 6489236572980346036} - - component: {fileID: 4684621021239696827} - m_Layer: 8 - m_Name: Box004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8661926012918159231 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6307004521242687807} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.27193183, y: 0.26837498, z: -0.26399994} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5815911318279455709} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6489236572980346036 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6307004521242687807} - m_Mesh: {fileID: -5613867604693661769, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!23 &4684621021239696827 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6307004521242687807} - 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: -6257702196253466788, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -3661639628750336703, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -7070273339311796134, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 699023012457304161, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 4999486961255905946, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 3925418980499852262, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - 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!1 &6452856694184512561 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2845233346709290993} - - component: {fileID: 2955530481328556559} - - component: {fileID: 1125528991062448653} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2845233346709290993 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6452856694184512561} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0042, y: -0.2686, z: -0.1341} - m_LocalScale: {x: 0.014485483, y: 0.014485483, z: 0.014485483} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8089546096632452012} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2955530481328556559 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6452856694184512561} - 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!114 &1125528991062448653 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6452856694184512561} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6628617139794794855 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5815911318279455709} - - component: {fileID: 2767488655733875519} - - component: {fileID: 3824249617934011702} - - component: {fileID: 5733111440982642704} - - component: {fileID: -5117283984245681276} - - component: {fileID: -3509573110429216636} - m_Layer: 8 - m_Name: 12 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5815911318279455709 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6628617139794794855} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 7692723841041075201} - - {fileID: 8661926012918159231} - - {fileID: 1650140136359366317} - - {fileID: 3828644167049736130} - - {fileID: 8089546096632452012} - - {fileID: 7747230823147698403} - - {fileID: 7295796144876557686} - - {fileID: 3161076243446039792} - - {fileID: 6197053237265215102} - - {fileID: 5374347838279151232} - - {fileID: 8562797652060601413} - - {fileID: 5423518264627504708} - - {fileID: 386956500983855176} - - {fileID: 8263802546514207539} - - {fileID: 6179904719278202757} - - {fileID: 429627211492120289} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &2767488655733875519 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6628617139794794855} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 12 - occupyNum: 10 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &3824249617934011702 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6628617139794794855} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 10 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &5733111440982642704 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6628617139794794855} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &-5117283984245681276 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6628617139794794855} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &-3509573110429216636 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6628617139794794855} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 10 - selfIcon: {fileID: 21300000, guid: 555a37e555433234caa53a6eafbddd94, type: 3} ---- !u!1 &6645586955432070045 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6821419937552065315} - - component: {fileID: 6989972009647285782} - - component: {fileID: 4311233954347963038} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6821419937552065315 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6645586955432070045} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.00395, y: -0.26855, z: -0.0859} - m_LocalScale: {x: 0.01589282, y: 0.01589282, z: 0.01589282} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3828644167049736130} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6989972009647285782 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6645586955432070045} - 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!114 &4311233954347963038 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6645586955432070045} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6751625746486371558 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1650140136359366317} - - component: {fileID: 7661859599473690560} - - component: {fileID: 3314735748453962451} - m_Layer: 8 - m_Name: Box006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1650140136359366317 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6751625746486371558} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.27193183, y: 0.2552515, z: -0.26399994} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5815911318279455709} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7661859599473690560 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6751625746486371558} - m_Mesh: {fileID: 3822247309040838107, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!23 &3314735748453962451 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6751625746486371558} - 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: -6257702196253466788, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -3661639628750336703, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -7070273339311796134, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 699023012457304161, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 4999486961255905946, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 3925418980499852262, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - 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!1 &8635542283289242144 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6197053237265215102} - - component: {fileID: 219816331417553493} - - component: {fileID: 7406629766380054831} - m_Layer: 8 - m_Name: Box016 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6197053237265215102 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8635542283289242144} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.012897521, y: 0.42568934, z: -0.26399994} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5815911318279455709} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &219816331417553493 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8635542283289242144} - m_Mesh: {fileID: -5573580799846109427, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!23 &7406629766380054831 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8635542283289242144} - 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: -4393270081050254010, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -3661639628750336703, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 699023012457304161, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 4999486961255905946, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 3925418980499852262, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -4245664206334490528, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 6431252281926298313, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1164559979738526386, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -1152147162816932204, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -5309146791756261813, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1196480866727828669, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - 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!1 &8858136122568813569 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3828644167049736130} - - component: {fileID: 603936569681162051} - - component: {fileID: 5419881104828013762} - - component: {fileID: 9166132587032120578} - - component: {fileID: 1298467977524683280} - - component: {fileID: 3444737305543366127} - - component: {fileID: 867698771750034655} - m_Layer: 8 - m_Name: Box008 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3828644167049736130 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8858136122568813569} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.27236468, y: 0.42568934, z: -0.26399994} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 5574096700245745855} - - {fileID: 6821419937552065315} - m_Father: {fileID: 5815911318279455709} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &603936569681162051 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8858136122568813569} - m_Mesh: {fileID: 1226723149311242300, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!23 &5419881104828013762 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8858136122568813569} - 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: -6257702196253466788, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 6431252281926298313, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -7070273339311796134, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 699023012457304161, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 4999486961255905946, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 3925418980499852262, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -4245664206334490528, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1164559979738526386, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -1152147162816932204, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -5309146791756261813, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1196480866727828669, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -2585355649735288889, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -861525867060925902, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - 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!114 &9166132587032120578 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8858136122568813569} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &1298467977524683280 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8858136122568813569} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &3444737305543366127 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8858136122568813569} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &867698771750034655 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8858136122568813569} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 1226723149311242300, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!1 &9163624885382877899 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7747230823147698403} - - component: {fileID: 2553628160403006391} - - component: {fileID: 3548450985296745800} - - component: {fileID: 2778394790416027476} - - component: {fileID: 33802661138870762} - - component: {fileID: 1219112431413971475} - - component: {fileID: 5178931080361372832} - m_Layer: 8 - m_Name: Box013 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7747230823147698403 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9163624885382877899} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1804122, y: 0.42568934, z: -0.26399994} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 3415149913804335435} - - {fileID: 536814919433921562} - - {fileID: 2651311396090324536} - m_Father: {fileID: 5815911318279455709} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2553628160403006391 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9163624885382877899} - m_Mesh: {fileID: -7061585933124598971, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!23 &3548450985296745800 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9163624885382877899} - 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: -4393270081050254010, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 6431252281926298313, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -7070273339311796134, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 699023012457304161, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 4999486961255905946, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 3925418980499852262, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1164185304146670524, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 6740078799833086702, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -4245664206334490528, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -2585355649735288889, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -2657437502011740032, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -877312669626368751, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1164559979738526386, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -1152147162816932204, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: -5309146791756261813, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - - {fileID: 1196480866727828669, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} - 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!114 &2778394790416027476 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9163624885382877899} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 3 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &33802661138870762 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9163624885382877899} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1219112431413971475 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9163624885382877899} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &5178931080361372832 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9163624885382877899} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -7061585933124598971, guid: e385d4efe291c4c499e39f6c890a6b1b, type: 3} ---- !u!1 &9187780614155420945 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6143229709551138009} - - component: {fileID: 7228007004843890705} - - component: {fileID: 7243726541359898778} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6143229709551138009 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9187780614155420945} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0042, y: -0.2686, z: -0.2512} - m_LocalScale: {x: 0.014485483, y: 0.014485483, z: 0.014485483} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8089546096632452012} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7228007004843890705 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9187780614155420945} - 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!114 &7243726541359898778 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9187780614155420945} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9192567053514619797 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 63141483468615079} - - component: {fileID: 8895105846034615007} - - component: {fileID: 6816823228358845962} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &63141483468615079 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9192567053514619797} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0049, y: -0.2686, z: -0.2526} - m_LocalScale: {x: 0.01449, y: 0.01449, z: 0.01449} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7295796144876557686} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8895105846034615007 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9192567053514619797} - 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!114 &6816823228358845962 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9192567053514619797} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/18.prefab b/GQ_URP/GQ/Assets/prefab/老模型/18.prefab deleted file mode 100644 index 89c4f73be..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/18.prefab +++ /dev/null @@ -1,9150 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &43401776818155001 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 664582673565165086} - - component: {fileID: 1908680498982115207} - - component: {fileID: 301990063748276822} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &664582673565165086 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 43401776818155001} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0065, y: -0.26100013, z: -0.3302001} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6615219823927491123} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1908680498982115207 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 43401776818155001} - 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!114 &301990063748276822 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 43401776818155001} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &143175811318749477 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2863109957126778314} - - component: {fileID: 2245221614324279381} - - component: {fileID: 2555390356879901037} - m_Layer: 11 - m_Name: Cube (29) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2863109957126778314 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 143175811318749477} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0321, y: -0.26370007, z: -0.05040002} - m_LocalScale: {x: 0.011139262, y: 0.011930003, z: 0.011106322} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2660516625735532954} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2245221614324279381 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 143175811318749477} - 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!114 &2555390356879901037 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 143175811318749477} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &204165374219413255 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3401581539538651790} - - component: {fileID: 4805520015017954614} - - component: {fileID: 4203429298654302779} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3401581539538651790 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 204165374219413255} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0067, y: -0.26100016, z: -0.2259131} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.008549999} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2658518048632799693} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4805520015017954614 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 204165374219413255} - 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!114 &4203429298654302779 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 204165374219413255} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &226949034041113265 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 896755314080606316} - - component: {fileID: 9071097150130945022} - - component: {fileID: 6461885567440820622} - - component: {fileID: 3397844471339555740} - - component: {fileID: 5099005689428062992} - - component: {fileID: 2425901538363333070} - - component: {fileID: 161823728200171809} - m_Layer: 8 - m_Name: Box062 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &896755314080606316 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 226949034041113265} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.18574683, y: 0.43346125, z: -0.31663662} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 6225813521319764069} - - {fileID: 6489202725122886305} - - {fileID: 6162789347534001558} - - {fileID: 7753659279370701446} - - {fileID: 4503169309777093518} - - {fileID: 4370120232165754338} - - {fileID: 3350712205711160882} - - {fileID: 3871377177998605567} - - {fileID: 3214178979980858078} - - {fileID: 7452372128138776905} - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &9071097150130945022 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 226949034041113265} - m_Mesh: {fileID: 5062258218628926779, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &6461885567440820622 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 226949034041113265} - 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: -4393270081050254010, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 9080730787777421127, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -7070273339311796134, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -6307277589567570940, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5956578104803850452, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1197073083114860863, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 86525535003114367, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -4245664206334490528, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -771602447124829279, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1152147162816932204, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1196480866727828669, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3194351816001101892, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -861525867060925902, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!114 &3397844471339555740 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 226949034041113265} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &5099005689428062992 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 226949034041113265} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &2425901538363333070 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 226949034041113265} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &161823728200171809 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 226949034041113265} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 5062258218628926779, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!1 &306995871351382328 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4899167980678217408} - - component: {fileID: 2644145499457714913} - - component: {fileID: 8773122353874566504} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4899167980678217408 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 306995871351382328} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.006098, y: -0.261, z: -0.25425} - m_LocalScale: {x: 0.0121060405, y: 0.011934472, z: 0.010331463} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2483051155157498292} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2644145499457714913 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 306995871351382328} - 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!114 &8773122353874566504 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 306995871351382328} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &332670098502473427 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5300228369273551903} - - component: {fileID: 7334930342964836258} - - component: {fileID: 859518890123037954} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5300228369273551903 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 332670098502473427} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0056580156, y: -0.26096022, z: -0.08819997} - m_LocalScale: {x: 0.01211, y: 0.011930003, z: 0.0063500013} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5320356541622403304} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7334930342964836258 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 332670098502473427} - 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!114 &859518890123037954 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 332670098502473427} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &343254543939802360 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7188391648329529561} - - component: {fileID: 4266699362292707574} - - component: {fileID: 5927316849325764012} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7188391648329529561 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 343254543939802360} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0067, y: -0.2610001, z: -0.30170012} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2658518048632799693} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4266699362292707574 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 343254543939802360} - 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!114 &5927316849325764012 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 343254543939802360} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &424488275912579675 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5018952977865218026} - - component: {fileID: 6527383490162545565} - - component: {fileID: 784472644953742665} - m_Layer: 8 - m_Name: Box073 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5018952977865218026 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 424488275912579675} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.21612433, y: 0.24848777, z: -0.31173322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6527383490162545565 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 424488275912579675} - m_Mesh: {fileID: -4787829685061339440, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &784472644953742665 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 424488275912579675} - 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: -4393270081050254010, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 9080730787777421127, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -7070273339311796134, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -6307277589567570940, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 4999486961255905946, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -771602447124829279, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1152147162816932204, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1196480866727828669, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5309146791756261813, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3194351816001101892, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!1 &432317970287170367 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6186796471118014829} - - component: {fileID: 3915174099646138375} - - component: {fileID: 1156534423440689894} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6186796471118014829 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 432317970287170367} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.03149, y: -0.2637, z: 0.0589} - m_LocalScale: {x: 0.011139262, y: 0.011930002, z: 0.0111063225} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 367860011835457198} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3915174099646138375 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 432317970287170367} - 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!114 &1156534423440689894 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 432317970287170367} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &487594138337950142 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4224610920202532850} - - component: {fileID: 1584796003474925689} - - component: {fileID: 65279096277914727} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4224610920202532850 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 487594138337950142} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0065, y: -0.26100016, z: -0.2259131} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.008549999} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6615219823927491123} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1584796003474925689 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 487594138337950142} - 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!114 &65279096277914727 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 487594138337950142} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &598779238585001658 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 876676877093488271} - - component: {fileID: 7084052174628340927} - - component: {fileID: 1504616244976313875} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &876676877093488271 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 598779238585001658} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0062, y: -0.26100007, z: -0.33020005} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3809679689757485453} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7084052174628340927 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 598779238585001658} - 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!114 &1504616244976313875 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 598779238585001658} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &797508281667762966 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3172735278530428810} - - component: {fileID: 2112247490037843134} - - component: {fileID: 6802789525284643333} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3172735278530428810 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 797508281667762966} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0067, y: -0.26096013, z: -0.0882} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.006350001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2658518048632799693} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2112247490037843134 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 797508281667762966} - 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!114 &6802789525284643333 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 797508281667762966} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &829196125575567228 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2582681691574138849} - - component: {fileID: 3388179638736711760} - - component: {fileID: 2877042340724544935} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2582681691574138849 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 829196125575567228} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0056580156, y: -0.26100022, z: -0.2874002} - m_LocalScale: {x: 0.01211, y: 0.011930003, z: 0.010329997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5320356541622403304} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3388179638736711760 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 829196125575567228} - 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!114 &2877042340724544935 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 829196125575567228} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &986076066935195676 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5580011698971836925} - - component: {fileID: 8846428029690007273} - - component: {fileID: 1382663560839529800} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5580011698971836925 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 986076066935195676} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.03149, y: -0.2637, z: 0.0314} - m_LocalScale: {x: 0.011139262, y: 0.011930002, z: 0.0111063225} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 367860011835457198} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8846428029690007273 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 986076066935195676} - 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!114 &1382663560839529800 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 986076066935195676} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1005747547963695026 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9077396844595307355} - - component: {fileID: 1085821122843455366} - - component: {fileID: 5857461509945176331} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9077396844595307355 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1005747547963695026} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0062, y: -0.26100004, z: -0.30170006} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3809679689757485453} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1085821122843455366 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1005747547963695026} - 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!114 &5857461509945176331 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1005747547963695026} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1110973481236683120 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8049214360421281203} - - component: {fileID: 7841607140532102201} - - component: {fileID: 3011322001585235861} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8049214360421281203 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1110973481236683120} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.006098, y: -0.261, z: -0.2874} - m_LocalScale: {x: 0.0121060405, y: 0.011934472, z: 0.010331463} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2483051155157498292} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7841607140532102201 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1110973481236683120} - 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!114 &3011322001585235861 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1110973481236683120} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1408461733334772603 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2628947093368423469} - - component: {fileID: 8001295335985394683} - - component: {fileID: 5555618634840350048} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2628947093368423469 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1408461733334772603} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0062, y: -0.2610001, z: -0.22591305} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.008549999} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3809679689757485453} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8001295335985394683 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1408461733334772603} - 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!114 &5555618634840350048 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1408461733334772603} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1474704675159860503 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6823781049409464663} - - component: {fileID: 6485849852195061031} - - component: {fileID: 6977611749680705090} - m_Layer: 11 - m_Name: Cube (24) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6823781049409464663 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1474704675159860503} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0321, y: -0.26370007, z: 0.031399995} - m_LocalScale: {x: 0.011139262, y: 0.011930003, z: 0.011106322} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2660516625735532954} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6485849852195061031 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1474704675159860503} - 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!114 &6977611749680705090 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1474704675159860503} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1525808863220367329 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3799208616082161666} - - component: {fileID: 2361656520200044122} - - component: {fileID: 6335062445571829259} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3799208616082161666 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1525808863220367329} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0065, y: -0.26100016, z: -0.2685601} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6615219823927491123} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2361656520200044122 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1525808863220367329} - 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!114 &6335062445571829259 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1525808863220367329} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1546555631400384078 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5451041471138642187} - - component: {fileID: 4871533560936398926} - - component: {fileID: 9192660614957191865} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5451041471138642187 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1546555631400384078} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0067, y: -0.26095515, z: -0.07835999} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.006350001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2658518048632799693} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4871533560936398926 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1546555631400384078} - 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!114 &9192660614957191865 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1546555631400384078} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1557936360745223090 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4113211136231754880} - - component: {fileID: 2685052796030529303} - - component: {fileID: 8709544027121782360} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4113211136231754880 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1557936360745223090} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0065, y: -0.2610001, z: -0.30170012} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6615219823927491123} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2685052796030529303 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1557936360745223090} - 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!114 &8709544027121782360 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1557936360745223090} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1647690837370589629 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8747780919345391408} - - component: {fileID: 3485464029915708612} - - component: {fileID: 904073316170360199} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8747780919345391408 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1647690837370589629} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0065, y: -0.2610001, z: -0.28740013} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6615219823927491123} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3485464029915708612 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1647690837370589629} - 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!114 &904073316170360199 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1647690837370589629} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1651711439348025224 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4503169309777093518} - - component: {fileID: 829215278909475767} - - component: {fileID: 8126053957145370407} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4503169309777093518 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1651711439348025224} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0057, y: -0.2610001, z: -0.25425005} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 896755314080606316} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &829215278909475767 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1651711439348025224} - 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!114 &8126053957145370407 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1651711439348025224} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1684334362574442887 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7903273913095517998} - - component: {fileID: 6824188478849306157} - - component: {fileID: 3038547425054855677} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7903273913095517998 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1684334362574442887} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0056580156, y: -0.26100028, z: -0.22591317} - m_LocalScale: {x: 0.01211, y: 0.011930003, z: 0.008549999} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5320356541622403304} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6824188478849306157 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1684334362574442887} - 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!114 &3038547425054855677 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1684334362574442887} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1878105306566307031 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6615219823927491123} - - component: {fileID: 7258702342394162833} - - component: {fileID: 4571583422923727579} - - component: {fileID: 4629646279268287970} - - component: {fileID: 8207394728229266596} - - component: {fileID: 3302131589171720203} - - component: {fileID: 7868997155629680226} - m_Layer: 8 - m_Name: Box060 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6615219823927491123 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1878105306566307031} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1588382, y: 0.43346125, z: -0.31663662} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 7054507098308929000} - - {fileID: 2005984517362387291} - - {fileID: 4224610920202532850} - - {fileID: 8485365453960065688} - - {fileID: 8327738560408499797} - - {fileID: 3799208616082161666} - - {fileID: 8747780919345391408} - - {fileID: 4113211136231754880} - - {fileID: 4975147865361531244} - - {fileID: 664582673565165086} - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7258702342394162833 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1878105306566307031} - m_Mesh: {fileID: -4248355281360383206, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &4571583422923727579 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1878105306566307031} - 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: -4393270081050254010, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 9080730787777421127, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1368039103165038143, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -6307277589567570940, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5956578104803850452, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1197073083114860863, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 86525535003114367, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -4245664206334490528, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -771602447124829279, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1152147162816932204, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1196480866727828669, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5309146791756261813, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3194351816001101892, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -861525867060925902, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!114 &4629646279268287970 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1878105306566307031} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 3 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &8207394728229266596 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1878105306566307031} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &3302131589171720203 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1878105306566307031} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &7868997155629680226 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1878105306566307031} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -4248355281360383206, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!1 &1896339247357656740 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6611730358417353005} - - component: {fileID: 4831410866194966078} - - component: {fileID: 5565559156055791010} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6611730358417353005 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1896339247357656740} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0067, y: -0.26100016, z: -0.2542501} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2658518048632799693} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4831410866194966078 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1896339247357656740} - 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!114 &5565559156055791010 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1896339247357656740} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1934676351227350043 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3214178979980858078} - - component: {fileID: 7719465982880422119} - - component: {fileID: 5828185858566471855} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3214178979980858078 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1934676351227350043} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0057, y: -0.26100007, z: -0.31590006} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 896755314080606316} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7719465982880422119 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1934676351227350043} - 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!114 &5828185858566471855 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1934676351227350043} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2002672687085700385 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3256201799280056701} - - component: {fileID: 5691869229742654338} - - component: {fileID: 2723497573338320604} - m_Layer: 8 - m_Name: Box065 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3256201799280056701 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2002672687085700385} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.06031634, y: 0.24848777, z: -0.31173322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5691869229742654338 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2002672687085700385} - m_Mesh: {fileID: 7404775158862943375, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &2723497573338320604 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2002672687085700385} - 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: -4393270081050254010, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 9080730787777421127, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -7070273339311796134, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 699023012457304161, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5956578104803850452, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -771602447124829279, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1152147162816932204, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1196480866727828669, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5309146791756261813, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!1 &2134978215575100470 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4611483874213499938} - - component: {fileID: 1625703614824683492} - - component: {fileID: 3839213557827959317} - m_Layer: 8 - m_Name: Box068 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4611483874213499938 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2134978215575100470} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.18903612, y: 0.24848777, z: -0.31173322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1625703614824683492 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2134978215575100470} - m_Mesh: {fileID: -8084387392185104470, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &3839213557827959317 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2134978215575100470} - 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: -4393270081050254010, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 9080730787777421127, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -7070273339311796134, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 699023012457304161, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 4999486961255905946, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -771602447124829279, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1152147162816932204, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1196480866727828669, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5309146791756261813, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!1 &2408390610755368414 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3037539601469534052} - - component: {fileID: 8838134686727512208} - - component: {fileID: 4874915478222363819} - - component: {fileID: 2480976073543747316} - - component: {fileID: 4841994003201004981} - - component: {fileID: -1541689198399336716} - m_Layer: 8 - m_Name: 18 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3037539601469534052 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2408390610755368414} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 1176509570216091832} - - {fileID: 7686466657491678721} - - {fileID: 6615219823927491123} - - {fileID: 5320356541622403304} - - {fileID: 896755314080606316} - - {fileID: 2483051155157498292} - - {fileID: 5982353246512317351} - - {fileID: 3256201799280056701} - - {fileID: 7398514205964470720} - - {fileID: 541646764599037571} - - {fileID: 4611483874213499938} - - {fileID: 2742177812645387823} - - {fileID: 367860011835457198} - - {fileID: 2660516625735532954} - - {fileID: 5018952977865218026} - - {fileID: 672954396849501103} - - {fileID: 3809679689757485453} - - {fileID: 2658518048632799693} - - {fileID: 365676107279850614} - - {fileID: 6607033967243125262} - - {fileID: 3338700914777033843} - - {fileID: 1179277053100478193} - - {fileID: 3585881117231790931} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &8838134686727512208 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2408390610755368414} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 18 - occupyNum: 14 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &4874915478222363819 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2408390610755368414} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 14 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &2480976073543747316 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2408390610755368414} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &4841994003201004981 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2408390610755368414} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &-1541689198399336716 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2408390610755368414} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 14 - selfIcon: {fileID: 21300000, guid: f566d4823015eb043967d086995a901f, type: 3} ---- !u!1 &2655491252742421135 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 110035508564040841} - - component: {fileID: 3294119575774615861} - - component: {fileID: 3917509583745894999} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &110035508564040841 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2655491252742421135} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0067, y: -0.26100013, z: -0.3302001} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2658518048632799693} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3294119575774615861 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2655491252742421135} - 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!114 &3917509583745894999 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2655491252742421135} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2694318201715933426 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3350712205711160882} - - component: {fileID: 1844780040628190083} - - component: {fileID: 8904263868288979558} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3350712205711160882 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2694318201715933426} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0057, y: -0.26100004, z: -0.28740007} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 896755314080606316} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1844780040628190083 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2694318201715933426} - 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!114 &8904263868288979558 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2694318201715933426} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2933305415256943293 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6162789347534001558} - - component: {fileID: 8795049206860762139} - - component: {fileID: 4276552412662692939} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6162789347534001558 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2933305415256943293} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0057, y: -0.2610001, z: -0.22591305} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.008549999} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 896755314080606316} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8795049206860762139 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2933305415256943293} - 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!114 &4276552412662692939 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2933305415256943293} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3169217058079855734 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8657955863439378310} - - component: {fileID: 6056499354369365239} - - component: {fileID: 2132120017978647460} - m_Layer: 11 - m_Name: Cube (26) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8657955863439378310 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3169217058079855734} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0321, y: -0.26370007, z: -0.009900004} - m_LocalScale: {x: 0.011139262, y: 0.011930003, z: 0.011106322} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2660516625735532954} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6056499354369365239 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3169217058079855734} - 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!114 &2132120017978647460 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3169217058079855734} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3295130207923581677 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3338700914777033843} - - component: {fileID: 5752660424521348107} - - component: {fileID: 8644792763884803762} - m_Layer: 8 - m_Name: Box079 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3338700914777033843 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3295130207923581677} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.24704629, y: 0.24848777, z: -0.31482798} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5752660424521348107 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3295130207923581677} - m_Mesh: {fileID: -2458614987055752723, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &8644792763884803762 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3295130207923581677} - 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: -4393270081050254010, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -2597307239127568339, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -7070273339311796134, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 699023012457304161, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 4999486961255905946, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 6384290948885600055, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!1 &3400437560365637785 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1100994408225693375} - - component: {fileID: 3683348628412884254} - - component: {fileID: 169537185074630632} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1100994408225693375 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3400437560365637785} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0056580156, y: -0.26100025, z: -0.33020023} - m_LocalScale: {x: 0.01211, y: 0.011930003, z: 0.010329997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5320356541622403304} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3683348628412884254 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3400437560365637785} - 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!114 &169537185074630632 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3400437560365637785} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3411296511957688852 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3871377177998605567} - - component: {fileID: 8552469103604387020} - - component: {fileID: 6184887588381703138} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3871377177998605567 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3411296511957688852} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0057, y: -0.26100004, z: -0.30170006} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 896755314080606316} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8552469103604387020 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3411296511957688852} - 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!114 &6184887588381703138 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3411296511957688852} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3497535647053898875 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 957975140882148344} - - component: {fileID: 8447442422422352013} - - component: {fileID: 2031331626119909060} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &957975140882148344 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3497535647053898875} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0067, y: -0.2610001, z: -0.24000013} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2658518048632799693} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8447442422422352013 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3497535647053898875} - 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!114 &2031331626119909060 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3497535647053898875} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3575391141583148786 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4101671432289606132} - - component: {fileID: 3249299771441721915} - - component: {fileID: 5581693913743494323} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4101671432289606132 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3575391141583148786} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0062, y: -0.2610001, z: -0.25425005} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3809679689757485453} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3249299771441721915 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3575391141583148786} - 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!114 &5581693913743494323 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3575391141583148786} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3774446319825865307 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3585881117231790931} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3585881117231790931 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3774446319825865307} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.05, y: -0.58492553, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 22 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &3918768167352594323 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7470809105844994567} - - component: {fileID: 4669298120408380512} - - component: {fileID: 2328991681716554948} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7470809105844994567 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3918768167352594323} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.006098, y: -0.261, z: -0.3159} - m_LocalScale: {x: 0.0121060405, y: 0.011934472, z: 0.010331463} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2483051155157498292} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4669298120408380512 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3918768167352594323} - 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!114 &2328991681716554948 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3918768167352594323} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3921970358786736202 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4975147865361531244} - - component: {fileID: 9074143378231260317} - - component: {fileID: 7385916902418048427} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4975147865361531244 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3921970358786736202} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0065, y: -0.26100013, z: -0.31590012} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6615219823927491123} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9074143378231260317 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3921970358786736202} - 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!114 &7385916902418048427 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3921970358786736202} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3996292396953328666 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4257396683978525966} - - component: {fileID: 2183332355899031622} - - component: {fileID: 4614676736864433503} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4257396683978525966 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3996292396953328666} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.006098, y: -0.26096, z: -0.0882} - m_LocalScale: {x: 0.0121060405, y: 0.011934472, z: 0.0063456255} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2483051155157498292} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2183332355899031622 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3996292396953328666} - 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!114 &4614676736864433503 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3996292396953328666} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4059607952955956660 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1176509570216091832} - - component: {fileID: 9079787787269351847} - - component: {fileID: 7066553390169946831} - m_Layer: 8 - m_Name: Box003 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1176509570216091832 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4059607952955956660} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.04840088, y: 0.000000052154064, z: -0.31663665} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &9079787787269351847 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4059607952955956660} - m_Mesh: {fileID: 690106047850165013, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &7066553390169946831 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4059607952955956660} - 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: -7070273339311796134, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -6307277589567570940, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5956578104803850452, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -6257702196253466788, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1845381240047065889, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -2727066706364434751, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3194351816001101892, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3207945481939704472, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 5106246390984151784, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -8588489782258024690, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 6384290948885600055, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -861525867060925902, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -7742741943934571674, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1164185304146670524, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!1 &4117190234769261612 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2750967911054437763} - - component: {fileID: 8675954445976812215} - - component: {fileID: 1821359370444689412} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2750967911054437763 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4117190234769261612} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0056580156, y: -0.26095527, z: -0.07835996} - m_LocalScale: {x: 0.01211, y: 0.011930003, z: 0.0063500013} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5320356541622403304} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8675954445976812215 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4117190234769261612} - 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!114 &1821359370444689412 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4117190234769261612} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4208733910210949612 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4011772949740287975} - - component: {fileID: 6247052113501510462} - - component: {fileID: 8660797229063315641} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4011772949740287975 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4208733910210949612} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.006098, y: -0.261, z: -0.3302} - m_LocalScale: {x: 0.0121060405, y: 0.011934472, z: 0.010331463} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2483051155157498292} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6247052113501510462 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4208733910210949612} - 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!114 &8660797229063315641 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4208733910210949612} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4346849498242415459 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2240285313911102929} - - component: {fileID: 4266375305756763663} - - component: {fileID: 9151310495839329999} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2240285313911102929 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4346849498242415459} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0056580156, y: -0.26100028, z: -0.25425017} - m_LocalScale: {x: 0.01211, y: 0.011930003, z: 0.010329997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5320356541622403304} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4266375305756763663 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4346849498242415459} - 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!114 &9151310495839329999 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4346849498242415459} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4356152669476363180 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3763642257555520090} - - component: {fileID: 7689190927450175825} - - component: {fileID: 1911186783612271125} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3763642257555520090 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4356152669476363180} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.03149, y: -0.2637, z: -0.0504} - m_LocalScale: {x: 0.011139262, y: 0.011930002, z: 0.0111063225} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 367860011835457198} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7689190927450175825 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4356152669476363180} - 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!114 &1911186783612271125 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4356152669476363180} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4386037296113294049 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 365676107279850614} - - component: {fileID: 6504281639450116628} - - component: {fileID: 2140978096935774700} - m_Layer: 8 - m_Name: Box077 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &365676107279850614 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4386037296113294049} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.32694674, y: 0.43346125, z: -0.31663662} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6504281639450116628 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4386037296113294049} - m_Mesh: {fileID: -1405206685389513613, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &2140978096935774700 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4386037296113294049} - 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: 1368039103165038143, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -6307277589567570940, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5956578104803850452, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -6257702196253466788, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1197073083114860863, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 6508332356757993828, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -771602447124829279, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -861525867060925902, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 6384290948885600055, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!1 &4421717892532268144 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8485365453960065688} - - component: {fileID: 5959528070878178439} - - component: {fileID: 3910635889720674012} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8485365453960065688 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4421717892532268144} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0065, y: -0.2610001, z: -0.24000013} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6615219823927491123} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5959528070878178439 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4421717892532268144} - 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!114 &3910635889720674012 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4421717892532268144} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4500964414870752063 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7635328139156075574} - - component: {fileID: 6362344811662109415} - - component: {fileID: 7605901019122487469} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7635328139156075574 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4500964414870752063} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0062, y: -0.26096007, z: -0.0882} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.006350001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3809679689757485453} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6362344811662109415 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4500964414870752063} - 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!114 &7605901019122487469 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4500964414870752063} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4583139159215764610 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5320356541622403304} - - component: {fileID: 4280999571042302579} - - component: {fileID: 2919560691805671091} - - component: {fileID: 7174139207624970455} - - component: {fileID: 1778330032151737977} - - component: {fileID: 1006989777577287510} - - component: {fileID: 1350035329836127938} - m_Layer: 8 - m_Name: Box061 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5320356541622403304 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4583139159215764610} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.13251702, y: 0.43346125, z: -0.31663662} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2750967911054437763} - - {fileID: 5300228369273551903} - - {fileID: 7903273913095517998} - - {fileID: 2379937281854296951} - - {fileID: 2240285313911102929} - - {fileID: 2120771502336419889} - - {fileID: 2582681691574138849} - - {fileID: 3920277242276132835} - - {fileID: 4306888194631318516} - - {fileID: 1100994408225693375} - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4280999571042302579 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4583139159215764610} - m_Mesh: {fileID: -2893039221907779070, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &2919560691805671091 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4583139159215764610} - 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: -4393270081050254010, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 9080730787777421127, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -7070273339311796134, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -6307277589567570940, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5956578104803850452, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1197073083114860863, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 86525535003114367, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -4245664206334490528, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -771602447124829279, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1152147162816932204, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1196480866727828669, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5309146791756261813, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3194351816001101892, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -861525867060925902, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!114 &7174139207624970455 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4583139159215764610} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 4 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &1778330032151737977 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4583139159215764610} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1006989777577287510 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4583139159215764610} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &1350035329836127938 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4583139159215764610} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -2893039221907779070, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!1 &4625913225628358158 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 672954396849501103} - - component: {fileID: 2678157878690911963} - - component: {fileID: 7952151427760870316} - m_Layer: 8 - m_Name: Box074 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &672954396849501103 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4625913225628358158} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.24324074, y: 0.24848777, z: -0.31173322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2678157878690911963 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4625913225628358158} - m_Mesh: {fileID: 3181945431582109686, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &7952151427760870316 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4625913225628358158} - 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: -4393270081050254010, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 9080730787777421127, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -7070273339311796134, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -6307277589567570940, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 4999486961255905946, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -771602447124829279, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1152147162816932204, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1196480866727828669, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5309146791756261813, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3194351816001101892, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!1 &4640755910299563120 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1193791357626510875} - - component: {fileID: 6766536658942097283} - - component: {fileID: 4598745204213984000} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1193791357626510875 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4640755910299563120} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0062, y: -0.2610001, z: -0.26856005} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3809679689757485453} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6766536658942097283 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4640755910299563120} - 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!114 &4598745204213984000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4640755910299563120} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4707429698527690591 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8482076556182367823} - - component: {fileID: 3409155671250632757} - - component: {fileID: 247734937455564355} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8482076556182367823 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4707429698527690591} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.03149, y: -0.2637, z: 0.0184} - m_LocalScale: {x: 0.011139262, y: 0.011930002, z: 0.0111063225} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 367860011835457198} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3409155671250632757 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4707429698527690591} - 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!114 &247734937455564355 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4707429698527690591} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4775861772740023500 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5797307386939332040} - - component: {fileID: 3381026824817479722} - - component: {fileID: 6987294944070636565} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5797307386939332040 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4775861772740023500} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.006098, y: -0.261, z: -0.24} - m_LocalScale: {x: 0.0121060405, y: 0.011934472, z: 0.010331463} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2483051155157498292} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3381026824817479722 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4775861772740023500} - 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!114 &6987294944070636565 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4775861772740023500} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4826681359158956710 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6291942394994331805} - - component: {fileID: 5052567216124340021} - - component: {fileID: 7269482681830396608} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6291942394994331805 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4826681359158956710} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.006098, y: -0.260955, z: -0.07836} - m_LocalScale: {x: 0.0121060405, y: 0.011934472, z: 0.0063456255} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2483051155157498292} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5052567216124340021 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4826681359158956710} - 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!114 &7269482681830396608 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4826681359158956710} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4881353038346322457 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5982353246512317351} - - component: {fileID: 6506456491862020929} - - component: {fileID: 8471401064300503648} - m_Layer: 8 - m_Name: Box064 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5982353246512317351 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4881353038346322457} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.08634569, y: 0.24848777, z: -0.31173322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6506456491862020929 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4881353038346322457} - m_Mesh: {fileID: 7413444807456324831, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &8471401064300503648 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4881353038346322457} - 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: -4393270081050254010, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 9080730787777421127, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -7070273339311796134, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 699023012457304161, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5956578104803850452, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -771602447124829279, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1152147162816932204, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1196480866727828669, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5309146791756261813, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!1 &4909227926770601089 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2379937281854296951} - - component: {fileID: 5389794648045957594} - - component: {fileID: 4218797871458926310} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2379937281854296951 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4909227926770601089} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0056580156, y: -0.26100022, z: -0.24000019} - m_LocalScale: {x: 0.01211, y: 0.011930003, z: 0.010329997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5320356541622403304} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5389794648045957594 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4909227926770601089} - 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!114 &4218797871458926310 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4909227926770601089} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4960834764170702633 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7200110734107924043} - - component: {fileID: 4383864404695885322} - - component: {fileID: 2277542878313590417} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7200110734107924043 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4960834764170702633} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0062, y: -0.26100007, z: -0.31590006} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3809679689757485453} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4383864404695885322 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4960834764170702633} - 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!114 &2277542878313590417 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4960834764170702633} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4989906193378826835 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7054507098308929000} - - component: {fileID: 6122435675380407054} - - component: {fileID: 2772379737816829673} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7054507098308929000 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4989906193378826835} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0065, y: -0.26095515, z: -0.07835999} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.006350001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6615219823927491123} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6122435675380407054 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4989906193378826835} - 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!114 &2772379737816829673 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4989906193378826835} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5376688177993038302 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3920277242276132835} - - component: {fileID: 4561665561600633361} - - component: {fileID: 376570452621696435} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3920277242276132835 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5376688177993038302} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0056580156, y: -0.26100022, z: -0.30170017} - m_LocalScale: {x: 0.01211, y: 0.011930003, z: 0.010329997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5320356541622403304} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4561665561600633361 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5376688177993038302} - 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!114 &376570452621696435 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5376688177993038302} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5394174691453846206 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 372906903127164944} - - component: {fileID: 8635074583213971648} - - component: {fileID: 6359980324613291777} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &372906903127164944 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5394174691453846206} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0062, y: -0.26100004, z: -0.28740007} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3809679689757485453} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8635074583213971648 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5394174691453846206} - 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!114 &6359980324613291777 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5394174691453846206} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5544734737404031786 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2483051155157498292} - - component: {fileID: 1562022392155012736} - - component: {fileID: 4515154949348261016} - - component: {fileID: 2055300991548465975} - - component: {fileID: 6735612607783773650} - - component: {fileID: 6908124545040361774} - - component: {fileID: 4258912323682240918} - m_Layer: 8 - m_Name: Box063 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2483051155157498292 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5544734737404031786} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.21218175, y: 0.43346125, z: -0.31663662} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 6291942394994331805} - - {fileID: 4257396683978525966} - - {fileID: 7352867112537870649} - - {fileID: 5797307386939332040} - - {fileID: 4899167980678217408} - - {fileID: 2346027910662173044} - - {fileID: 8049214360421281203} - - {fileID: 333714840385200619} - - {fileID: 7470809105844994567} - - {fileID: 4011772949740287975} - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1562022392155012736 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5544734737404031786} - m_Mesh: {fileID: -2160783174947531112, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &4515154949348261016 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5544734737404031786} - 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: -4393270081050254010, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 9080730787777421127, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -7070273339311796134, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -6307277589567570940, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5956578104803850452, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1197073083114860863, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1368039103165038143, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 86525535003114367, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -4245664206334490528, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1164559979738526386, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1152147162816932204, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -771602447124829279, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1196480866727828669, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5309146791756261813, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3194351816001101892, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -861525867060925902, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!114 &2055300991548465975 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5544734737404031786} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &6735612607783773650 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5544734737404031786} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &6908124545040361774 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5544734737404031786} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &4258912323682240918 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5544734737404031786} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -2160783174947531112, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!1 &5706476829894226255 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6211015046823183159} - - component: {fileID: 209359900097512945} - - component: {fileID: 5293190835864620743} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6211015046823183159 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5706476829894226255} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0062, y: -0.2609551, z: -0.07835999} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.006350001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3809679689757485453} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &209359900097512945 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5706476829894226255} - 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!114 &5293190835864620743 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5706476829894226255} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5822398396395489621 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7352867112537870649} - - component: {fileID: 31313516322222952} - - component: {fileID: 1536775960303721251} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7352867112537870649 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5822398396395489621} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.006098, y: -0.261, z: -0.225913} - m_LocalScale: {x: 0.0121060405, y: 0.011934472, z: 0.008551998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2483051155157498292} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &31313516322222952 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5822398396395489621} - 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!114 &1536775960303721251 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5822398396395489621} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5826600018672232156 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5520746525644251271} - - component: {fileID: 7397918350977303277} - - component: {fileID: 5445909282529550971} - m_Layer: 11 - m_Name: Cube (27) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5520746525644251271 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5826600018672232156} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0321, y: -0.2637001, z: -0.022900015} - m_LocalScale: {x: 0.011139262, y: 0.011930003, z: 0.011106322} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2660516625735532954} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7397918350977303277 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5826600018672232156} - 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!114 &5445909282529550971 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5826600018672232156} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6025608655215515842 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2742177812645387823} - - component: {fileID: 4341158417794007439} - - component: {fileID: 2454761602153847620} - m_Layer: 8 - m_Name: Box069 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2742177812645387823 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6025608655215515842} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.10991095, y: 0.24848777, z: -0.31173322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4341158417794007439 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6025608655215515842} - m_Mesh: {fileID: 3304094240565004552, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &2454761602153847620 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6025608655215515842} - 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: -4393270081050254010, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 8319108567443376739, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -7070273339311796134, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 699023012457304161, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5956578104803850452, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1164559979738526386, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1152147162816932204, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -771602447124829279, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1196480866727828669, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5309146791756261813, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -4245664206334490528, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 2088338018198006557, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -861525867060925902, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!1 &6189856575907926127 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 333714840385200619} - - component: {fileID: 2974772498547146148} - - component: {fileID: 1544752391440123938} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &333714840385200619 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6189856575907926127} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.006098, y: -0.261, z: -0.3017} - m_LocalScale: {x: 0.0121060405, y: 0.011934472, z: 0.010331463} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2483051155157498292} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2974772498547146148 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6189856575907926127} - 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!114 &1544752391440123938 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6189856575907926127} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6412763990919212780 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6225813521319764069} - - component: {fileID: 2055079281687711036} - - component: {fileID: 4704440774750762007} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6225813521319764069 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6412763990919212780} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0057, y: -0.2609551, z: -0.07835999} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.006350001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 896755314080606316} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2055079281687711036 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6412763990919212780} - 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!114 &4704440774750762007 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6412763990919212780} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6420726404409502189 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7753659279370701446} - - component: {fileID: 7432362075374959519} - - component: {fileID: 8133968765328651787} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7753659279370701446 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6420726404409502189} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0057, y: -0.26100004, z: -0.24000007} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 896755314080606316} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7432362075374959519 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6420726404409502189} - 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!114 &8133968765328651787 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6420726404409502189} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6459435788694423873 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2120771502336419889} - - component: {fileID: 3226584800288455297} - - component: {fileID: 6431921695589493261} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2120771502336419889 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6459435788694423873} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0056580156, y: -0.26100028, z: -0.26856017} - m_LocalScale: {x: 0.01211, y: 0.011930003, z: 0.010329997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5320356541622403304} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3226584800288455297 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6459435788694423873} - 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!114 &6431921695589493261 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6459435788694423873} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6473494976465729475 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3195350467251287923} - - component: {fileID: 4162438589634175157} - - component: {fileID: 7617530365534271208} - m_Layer: 11 - m_Name: Cube (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3195350467251287923 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6473494976465729475} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.03149, y: -0.2637, z: -0.0229} - m_LocalScale: {x: 0.011139262, y: 0.011930002, z: 0.0111063225} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 367860011835457198} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4162438589634175157 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6473494976465729475} - 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!114 &7617530365534271208 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6473494976465729475} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6564358055298946959 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 541646764599037571} - - component: {fileID: 2403624239183201647} - - component: {fileID: 345549583306712241} - m_Layer: 8 - m_Name: Box067 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &541646764599037571 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6564358055298946959} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.13658284, y: 0.24848777, z: -0.31173322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2403624239183201647 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6564358055298946959} - m_Mesh: {fileID: -7516479528189023691, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &345549583306712241 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6564358055298946959} - 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: -4393270081050254010, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 9080730787777421127, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -7070273339311796134, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 699023012457304161, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5956578104803850452, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -771602447124829279, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1152147162816932204, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1196480866727828669, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5309146791756261813, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!1 &6629070956848762765 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1500986759369320259} - - component: {fileID: 4168462553871646315} - - component: {fileID: 5707263468006844083} - m_Layer: 11 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1500986759369320259 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6629070956848762765} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0321, y: -0.26370007, z: 0.0589} - m_LocalScale: {x: 0.011139262, y: 0.011930003, z: 0.011106322} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2660516625735532954} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4168462553871646315 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6629070956848762765} - 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!114 &5707263468006844083 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6629070956848762765} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6695355042645865152 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2658518048632799693} - - component: {fileID: 6296089937406195744} - - component: {fileID: 7797699323673663490} - - component: {fileID: 7751757686922079221} - - component: {fileID: 7320088339662867184} - - component: {fileID: 2133128292229702845} - - component: {fileID: 1631314037531882955} - m_Layer: 8 - m_Name: Box076 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2658518048632799693 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6695355042645865152} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.3012035, y: 0.43346125, z: -0.31663662} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 5451041471138642187} - - {fileID: 3172735278530428810} - - {fileID: 3401581539538651790} - - {fileID: 957975140882148344} - - {fileID: 6611730358417353005} - - {fileID: 3990749849700841623} - - {fileID: 5363244612375886255} - - {fileID: 7188391648329529561} - - {fileID: 1375721527646768631} - - {fileID: 110035508564040841} - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6296089937406195744 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6695355042645865152} - m_Mesh: {fileID: 7638646759786298271, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &7797699323673663490 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6695355042645865152} - 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: -4393270081050254010, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 9080730787777421127, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1368039103165038143, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -6307277589567570940, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5956578104803850452, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1197073083114860863, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 86525535003114367, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -4245664206334490528, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -771602447124829279, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3194351816001101892, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -861525867060925902, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!114 &7751757686922079221 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6695355042645865152} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 8 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7320088339662867184 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6695355042645865152} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &2133128292229702845 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6695355042645865152} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &1631314037531882955 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6695355042645865152} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 7638646759786298271, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!1 &6774025315151276155 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7858152390647425247} - - component: {fileID: 7681527851287582140} - - component: {fileID: 7064867287085083553} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7858152390647425247 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6774025315151276155} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0062, y: -0.26100004, z: -0.24000007} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3809679689757485453} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7681527851287582140 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6774025315151276155} - 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!114 &7064867287085083553 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6774025315151276155} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6779346947110826757 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4211559997936711735} - - component: {fileID: 4731991158918222528} - - component: {fileID: 6150838747097044190} - m_Layer: 11 - m_Name: Cube (25) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4211559997936711735 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6779346947110826757} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0321, y: -0.26370007, z: 0.018400013} - m_LocalScale: {x: 0.011139262, y: 0.011930003, z: 0.011106322} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2660516625735532954} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4731991158918222528 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6779346947110826757} - 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!114 &6150838747097044190 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6779346947110826757} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6798959908807108159 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4306888194631318516} - - component: {fileID: 3886854745583744078} - - component: {fileID: 7464888085824468848} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4306888194631318516 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6798959908807108159} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0056580156, y: -0.26100025, z: -0.31590024} - m_LocalScale: {x: 0.01211, y: 0.011930003, z: 0.010329997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5320356541622403304} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3886854745583744078 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6798959908807108159} - 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!114 &7464888085824468848 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6798959908807108159} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7114064365801876430 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3809679689757485453} - - component: {fileID: 4785550830734358412} - - component: {fileID: 2046448904725024605} - - component: {fileID: 4419599970711799158} - - component: {fileID: 4697330689508412240} - - component: {fileID: 5407524771797347537} - - component: {fileID: 6155278063309530094} - m_Layer: 8 - m_Name: Box075 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3809679689757485453 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7114064365801876430} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.27527785, y: 0.43346125, z: -0.31663662} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 6211015046823183159} - - {fileID: 7635328139156075574} - - {fileID: 2628947093368423469} - - {fileID: 7858152390647425247} - - {fileID: 4101671432289606132} - - {fileID: 1193791357626510875} - - {fileID: 372906903127164944} - - {fileID: 9077396844595307355} - - {fileID: 7200110734107924043} - - {fileID: 876676877093488271} - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4785550830734358412 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7114064365801876430} - m_Mesh: {fileID: -293825477841229588, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &2046448904725024605 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7114064365801876430} - 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: -4393270081050254010, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 9080730787777421127, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1368039103165038143, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -6307277589567570940, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5956578104803850452, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1197073083114860863, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 86525535003114367, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -4245664206334490528, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -771602447124829279, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3194351816001101892, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -861525867060925902, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!114 &4419599970711799158 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7114064365801876430} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 7 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &4697330689508412240 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7114064365801876430} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5407524771797347537 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7114064365801876430} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &6155278063309530094 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7114064365801876430} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -293825477841229588, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!1 &7235536379771116222 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4870931341684464084} - - component: {fileID: 8437530547798142735} - - component: {fileID: 7230395110581204578} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4870931341684464084 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7235536379771116222} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.03149, y: -0.2637, z: 0.0459} - m_LocalScale: {x: 0.011139262, y: 0.011930002, z: 0.0111063225} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 367860011835457198} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8437530547798142735 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7235536379771116222} - 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!114 &7230395110581204578 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7235536379771116222} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7259922456199009616 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7686466657491678721} - - component: {fileID: 5077605258031636676} - - component: {fileID: 4128407169397405692} - m_Layer: 8 - m_Name: Box059 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7686466657491678721 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7259922456199009616} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.112375036, y: 0.24848777, z: -0.31173322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5077605258031636676 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7259922456199009616} - m_Mesh: {fileID: 5543223464761085638, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &4128407169397405692 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7259922456199009616} - 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: -4393270081050254010, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 9080730787777421127, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -7070273339311796134, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 699023012457304161, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5956578104803850452, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -771602447124829279, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1152147162816932204, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1196480866727828669, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5309146791756261813, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!1 &7264429842396873777 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 367860011835457198} - - component: {fileID: 8620644234882659757} - - component: {fileID: 3943435279982958491} - - component: {fileID: 2204807453640362946} - - component: {fileID: 284437644492907354} - - component: {fileID: 4163517634229031981} - - component: {fileID: 7176506823486035829} - m_Layer: 8 - m_Name: Box071 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &367860011835457198 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7264429842396873777} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.006591782, y: 0.24848777, z: -0.31173322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 6186796471118014829} - - {fileID: 4870931341684464084} - - {fileID: 5580011698971836925} - - {fileID: 8482076556182367823} - - {fileID: 6352118104587600719} - - {fileID: 3195350467251287923} - - {fileID: 2646521921656135847} - - {fileID: 3763642257555520090} - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8620644234882659757 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7264429842396873777} - m_Mesh: {fileID: -5087548570314954540, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &3943435279982958491 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7264429842396873777} - 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: -4393270081050254010, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 8319108567443376739, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -7070273339311796134, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 699023012457304161, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5956578104803850452, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -771602447124829279, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1152147162816932204, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 5932914135484665018, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1196480866727828669, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5309146791756261813, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 839520989676932758, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 2088338018198006557, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 214082558182039077, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -861525867060925902, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!114 &2204807453640362946 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7264429842396873777} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 5 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &284437644492907354 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7264429842396873777} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &4163517634229031981 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7264429842396873777} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &7176506823486035829 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7264429842396873777} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -5087548570314954540, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!1 &7269900265345938061 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2346027910662173044} - - component: {fileID: 3811294451981768974} - - component: {fileID: 6735529927371215762} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2346027910662173044 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7269900265345938061} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.006098, y: -0.261, z: -0.26856} - m_LocalScale: {x: 0.0121060405, y: 0.011934472, z: 0.010331463} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2483051155157498292} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3811294451981768974 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7269900265345938061} - 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!114 &6735529927371215762 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7269900265345938061} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7315538106297560854 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7452372128138776905} - - component: {fileID: 7585203836934232163} - - component: {fileID: 87251220757646606} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7452372128138776905 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7315538106297560854} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0057, y: -0.26100007, z: -0.33020005} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 896755314080606316} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7585203836934232163 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7315538106297560854} - 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!114 &87251220757646606 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7315538106297560854} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7351008148757494147 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1179277053100478193} - - component: {fileID: 2904788898175048791} - - component: {fileID: 6339072468479685977} - m_Layer: 8 - m_Name: Box080 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1179277053100478193 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7351008148757494147} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.16269259, y: 0.24848777, z: -0.31173322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 21 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2904788898175048791 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7351008148757494147} - m_Mesh: {fileID: 928670381974441746, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &6339072468479685977 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7351008148757494147} - 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: -4393270081050254010, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 8319108567443376739, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -7070273339311796134, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 699023012457304161, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 4999486961255905946, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1164559979738526386, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1152147162816932204, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -771602447124829279, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1196480866727828669, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5309146791756261813, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -4245664206334490528, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 2088338018198006557, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -861525867060925902, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!1 &7453655461629160433 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2646521921656135847} - - component: {fileID: 6857955711051162249} - - component: {fileID: 2447450094486081720} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2646521921656135847 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7453655461629160433} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.03149, y: -0.2637, z: -0.0374} - m_LocalScale: {x: 0.011139262, y: 0.011930002, z: 0.0111063225} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 367860011835457198} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6857955711051162249 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7453655461629160433} - 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!114 &2447450094486081720 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7453655461629160433} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7488722020165044264 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6489202725122886305} - - component: {fileID: 1480307975520873777} - - component: {fileID: 5796882564454028308} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6489202725122886305 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7488722020165044264} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0057, y: -0.26096007, z: -0.0882} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.006350001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 896755314080606316} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1480307975520873777 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7488722020165044264} - 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!114 &5796882564454028308 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7488722020165044264} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7783210741440303708 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1375721527646768631} - - component: {fileID: 4594080358705361973} - - component: {fileID: 750501678508319329} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1375721527646768631 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7783210741440303708} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0067, y: -0.26100013, z: -0.31590012} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2658518048632799693} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4594080358705361973 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7783210741440303708} - 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!114 &750501678508319329 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7783210741440303708} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7964883393260923831 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6352118104587600719} - - component: {fileID: 2500041940832962671} - - component: {fileID: 1958730498584683454} - m_Layer: 11 - m_Name: Cube (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6352118104587600719 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7964883393260923831} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.03149, y: -0.2637, z: -0.0099} - m_LocalScale: {x: 0.011139262, y: 0.011930002, z: 0.0111063225} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 367860011835457198} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2500041940832962671 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7964883393260923831} - 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!114 &1958730498584683454 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7964883393260923831} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8070337562669438559 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2005984517362387291} - - component: {fileID: 5605836745777431902} - - component: {fileID: 3938987037793438992} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2005984517362387291 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8070337562669438559} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0065, y: -0.26096013, z: -0.0882} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.006350001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6615219823927491123} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5605836745777431902 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8070337562669438559} - 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!114 &3938987037793438992 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8070337562669438559} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8079279176066166005 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3990749849700841623} - - component: {fileID: 1915714498556578089} - - component: {fileID: 2257327726522043652} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3990749849700841623 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8079279176066166005} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0067, y: -0.26100016, z: -0.2685601} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2658518048632799693} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1915714498556578089 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8079279176066166005} - 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!114 &2257327726522043652 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8079279176066166005} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8151534333620899578 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2660516625735532954} - - component: {fileID: 3119458440860333351} - - component: {fileID: 8633338331376589347} - - component: {fileID: 7900129786521953267} - - component: {fileID: 5244791223241226154} - - component: {fileID: 1961004761373404562} - - component: {fileID: 642038649277875085} - m_Layer: 8 - m_Name: Box072 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2660516625735532954 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8151534333620899578} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.051530614, y: 0.24848777, z: -0.31173322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1500986759369320259} - - {fileID: 7133067504412049164} - - {fileID: 6823781049409464663} - - {fileID: 4211559997936711735} - - {fileID: 8657955863439378310} - - {fileID: 5520746525644251271} - - {fileID: 8321798978673584446} - - {fileID: 2863109957126778314} - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3119458440860333351 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8151534333620899578} - m_Mesh: {fileID: -8319805796033406473, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &8633338331376589347 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8151534333620899578} - 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: -4393270081050254010, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 8319108567443376739, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -7070273339311796134, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 699023012457304161, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5956578104803850452, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -771602447124829279, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1152147162816932204, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 5932914135484665018, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1196480866727828669, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5309146791756261813, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 839520989676932758, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 2088338018198006557, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 214082558182039077, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -861525867060925902, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!114 &7900129786521953267 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8151534333620899578} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 6 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &5244791223241226154 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8151534333620899578} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1961004761373404562 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8151534333620899578} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &642038649277875085 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8151534333620899578} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -8319805796033406473, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!1 &8317313012333499556 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8327738560408499797} - - component: {fileID: 4604986432138013297} - - component: {fileID: 5932336257245693676} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8327738560408499797 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8317313012333499556} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0065, y: -0.26100016, z: -0.2542501} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6615219823927491123} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4604986432138013297 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8317313012333499556} - 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!114 &5932336257245693676 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8317313012333499556} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8374539985359503035 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7398514205964470720} - - component: {fileID: 5900991551780668328} - - component: {fileID: 681056062455993525} - m_Layer: 8 - m_Name: Box066 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7398514205964470720 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8374539985359503035} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.03428699, y: 0.24848777, z: -0.31173322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5900991551780668328 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8374539985359503035} - m_Mesh: {fileID: 5644322950614084737, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &681056062455993525 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8374539985359503035} - 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: -4393270081050254010, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 9080730787777421127, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -7070273339311796134, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 699023012457304161, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5956578104803850452, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -771602447124829279, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -1152147162816932204, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1196480866727828669, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5309146791756261813, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!1 &8478105177358329803 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8321798978673584446} - - component: {fileID: 4619937623522762826} - - component: {fileID: 1384447789331479412} - m_Layer: 11 - m_Name: Cube (28) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8321798978673584446 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8478105177358329803} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0321, y: -0.26370007, z: -0.037400007} - m_LocalScale: {x: 0.011139262, y: 0.011930003, z: 0.011106322} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2660516625735532954} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4619937623522762826 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8478105177358329803} - 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!114 &1384447789331479412 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8478105177358329803} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8513218216112021315 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6607033967243125262} - - component: {fileID: 8233724647078990953} - - component: {fileID: 6178332270979650666} - m_Layer: 8 - m_Name: Box078 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6607033967243125262 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8513218216112021315} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.3463238, y: 0.24848777, z: -0.31173322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3037539601469534052} - m_RootOrder: 19 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8233724647078990953 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8513218216112021315} - m_Mesh: {fileID: 1720402882065375157, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} ---- !u!23 &6178332270979650666 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8513218216112021315} - 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: -6257702196253466788, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1943745450259362722, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 1368039103165038143, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -6307277589567570940, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: -5956578104803850452, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 3925418980499852262, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - - {fileID: 6384290948885600055, guid: 92b842c03dca1624e8e66a76a8fea3ef, type: 3} - 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!1 &8925351673698939672 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5363244612375886255} - - component: {fileID: 8320508405768301816} - - component: {fileID: 5557718196673922709} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5363244612375886255 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8925351673698939672} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0067, y: -0.2610001, z: -0.28740013} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2658518048632799693} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8320508405768301816 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8925351673698939672} - 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!114 &5557718196673922709 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8925351673698939672} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9151987716545297471 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7133067504412049164} - - component: {fileID: 3551456475180491752} - - component: {fileID: 7888408569451891932} - m_Layer: 11 - m_Name: Cube (23) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7133067504412049164 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9151987716545297471} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0321, y: -0.26370007, z: 0.045900017} - m_LocalScale: {x: 0.011139262, y: 0.011930003, z: 0.011106322} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2660516625735532954} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3551456475180491752 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9151987716545297471} - 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!114 &7888408569451891932 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9151987716545297471} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9159253022776539131 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4370120232165754338} - - component: {fileID: 8567976455175970564} - - component: {fileID: 1242290523241187979} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4370120232165754338 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9159253022776539131} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0057, y: -0.2610001, z: -0.26856005} - m_LocalScale: {x: 0.01211, y: 0.011930002, z: 0.010329998} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 896755314080606316} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8567976455175970564 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9159253022776539131} - 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!114 &1242290523241187979 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9159253022776539131} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/19.prefab b/GQ_URP/GQ/Assets/prefab/老模型/19.prefab deleted file mode 100644 index eee03138a..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/19.prefab +++ /dev/null @@ -1,4320 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &10540635568428166 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6799948195651152322} - - component: {fileID: 5144845989025985760} - - component: {fileID: 5513630271106537309} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6799948195651152322 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 10540635568428166} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0033, y: -0.3579, z: -0.0452} - m_LocalScale: {x: 0.013396697, y: 0.013520006, z: 0.012286817} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 50402483142561612} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5144845989025985760 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 10540635568428166} - 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!114 &5513630271106537309 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 10540635568428166} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &187428403754932556 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2767182340394101836} - - component: {fileID: 2065048161420496250} - - component: {fileID: 2474808433906720494} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2767182340394101836 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 187428403754932556} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009036064, y: -0.18049997, z: 0.07130002} - m_LocalScale: {x: 0.013519052, y: 0.013519053, z: 0.017220704} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 358287213207119135} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2065048161420496250 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 187428403754932556} - 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!114 &2474808433906720494 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 187428403754932556} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &202352355893020519 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5179619047475122332} - - component: {fileID: 4522785201700578431} - - component: {fileID: 5080678508708326027} - m_Layer: 8 - m_Name: Box113 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5179619047475122332 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 202352355893020519} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.11309204, y: 0.24802452, z: -0.35262305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4522785201700578431 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 202352355893020519} - m_Mesh: {fileID: -7246287230559787882, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &5080678508708326027 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 202352355893020519} - 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: -4393270081050254010, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 7242820059378372370, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 699023012457304161, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 4999486961255905946, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1164559979738526386, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -1152147162816932204, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -771602447124829279, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1196480866727828669, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -5309146791756261813, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!1 &324125234376806107 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 730397056496175818} - - component: {fileID: 3000667605942156416} - - component: {fileID: 8944801350847109420} - m_Layer: 8 - m_Name: Box104 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &730397056496175818 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 324125234376806107} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00000011920929, y: 0.063566506, z: -0.26400006} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3000667605942156416 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 324125234376806107} - m_Mesh: {fileID: -35850239040426563, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &8944801350847109420 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 324125234376806107} - 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: 8064349381354593738, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 2307440974373336506, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 699023012457304161, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 4999486961255905946, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!1 &389336504806225674 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5828194873931313757} - - component: {fileID: 773508180789473929} - - component: {fileID: 3028940473686690793} - m_Layer: 8 - m_Name: Box136 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5828194873931313757 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 389336504806225674} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.27805144, y: 0.24802452, z: -0.35262305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &773508180789473929 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 389336504806225674} - m_Mesh: {fileID: 7039355258290517440, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &3028940473686690793 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 389336504806225674} - 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: -6257702196253466788, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 8127407369057129126, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 699023012457304161, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 4999486961255905946, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1164559979738526386, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -1152147162816932204, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -771602447124829279, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1196480866727828669, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -5309146791756261813, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!1 &1212991408273784107 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3648550945189248281} - - component: {fileID: 1654244517318393574} - - component: {fileID: 5929806451260069040} - m_Layer: 8 - m_Name: Box144 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3648550945189248281 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1212991408273784107} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2193732, y: 0.24802452, z: -0.52986926} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 21 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1654244517318393574 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1212991408273784107} - m_Mesh: {fileID: -3966545228067385281, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &5929806451260069040 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1212991408273784107} - 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: -6257702196253466788, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 5115815948437574282, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -6307277589567570940, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -5956578104803850452, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!1 &1340893844283644228 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 12761454731185215} - - component: {fileID: 1157800592163097393} - - component: {fileID: 6284191322429918153} - m_Layer: 8 - m_Name: Box111 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &12761454731185215 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1340893844283644228} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.19767565, y: 0.24802452, z: -0.35262305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1157800592163097393 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1340893844283644228} - m_Mesh: {fileID: -496025733953617223, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &6284191322429918153 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1340893844283644228} - 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: -4393270081050254010, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 7242820059378372370, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 699023012457304161, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 4999486961255905946, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -771602447124829279, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!1 &1395041753767060566 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3519593237380400159} - - component: {fileID: 2636374856752431366} - - component: {fileID: 3267441549822637511} - m_Layer: 8 - m_Name: Box140 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3519593237380400159 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1395041753767060566} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.0702232, y: 0.24802452, z: -0.35262305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2636374856752431366 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1395041753767060566} - m_Mesh: {fileID: -5474930739130038965, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &3267441549822637511 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1395041753767060566} - 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: -4393270081050254010, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 5115815948437574282, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 699023012457304161, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 4999486961255905946, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!1 &1438852011904509757 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6338762255710415683} - - component: {fileID: 6680972835476870945} - - component: {fileID: 7787561911618302555} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6338762255710415683 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1438852011904509757} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009034574, y: -0.18049999, z: 0.030300006} - m_LocalScale: {x: 0.013519052, y: 0.013519053, z: 0.017220704} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 358287213207119135} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6680972835476870945 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1438852011904509757} - 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!114 &7787561911618302555 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1438852011904509757} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1726971066783682141 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4238301401963243967} - - component: {fileID: 61604049738411130} - - component: {fileID: 1784505400893116044} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4238301401963243967 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1726971066783682141} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0101, y: -0.2693, z: 0.0784} - m_LocalScale: {x: 0.01352, y: 0.013520001, z: 0.01722} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 565486609073306515} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &61604049738411130 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1726971066783682141} - 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!114 &1784505400893116044 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1726971066783682141} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2506697207238760266 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7702771087761932115} - - component: {fileID: 7788840681712212841} - - component: {fileID: 7044761568417599112} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7702771087761932115 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2506697207238760266} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0101, y: -0.26930007, z: 0.078400016} - m_LocalScale: {x: 0.01352, y: 0.013520002, z: 0.01722} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8398327419535659056} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7788840681712212841 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2506697207238760266} - 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!114 &7044761568417599112 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2506697207238760266} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2636494326803442665 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2603410105602744174} - - component: {fileID: 807243413576282086} - - component: {fileID: 2888475694805927057} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2603410105602744174 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2636494326803442665} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009036064, y: -0.18050003, z: -0.06660001} - m_LocalScale: {x: 0.013519052, y: 0.013519053, z: 0.017220704} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 358287213207119135} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &807243413576282086 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2636494326803442665} - 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!114 &2888475694805927057 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2636494326803442665} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2816514486290962962 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6233526472878199871} - - component: {fileID: 6457106705586786565} - - component: {fileID: 1377158295197740761} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6233526472878199871 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2816514486290962962} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0154, y: -0.2693, z: -0.012} - m_LocalScale: {x: 0.013396695, y: 0.013520001, z: 0.012286814} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 565486609073306515} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6457106705586786565 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2816514486290962962} - 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!114 &1377158295197740761 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2816514486290962962} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2829299199606808155 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3631520745651288740} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3631520745651288740 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2829299199606808155} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0, y: -0.461, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 25 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2989477025519662040 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3133686346125538437} - - component: {fileID: 8084823984095057696} - - component: {fileID: 959271451484233843} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3133686346125538437 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2989477025519662040} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009034574, y: -0.18049999, z: -0.0457} - m_LocalScale: {x: 0.013519052, y: 0.013519053, z: 0.017220704} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 358287213207119135} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8084823984095057696 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2989477025519662040} - 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!114 &959271451484233843 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2989477025519662040} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3026485866642825002 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 565486609073306515} - - component: {fileID: 1172043554893552389} - - component: {fileID: 5938935216525232918} - - component: {fileID: 6712509548924518652} - - component: {fileID: 9041156484424442459} - - component: {fileID: 1594741489859899336} - - component: {fileID: 2753712777129302648} - m_Layer: 8 - m_Name: Box112 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &565486609073306515 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3026485866642825002} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.15544814, y: 0.24802452, z: -0.264} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4238301401963243967} - - {fileID: 4037213130750524802} - - {fileID: 6233526472878199871} - - {fileID: 6249427563187234425} - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1172043554893552389 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3026485866642825002} - m_Mesh: {fileID: -6612900964092521861, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &5938935216525232918 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3026485866642825002} - 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: -4393270081050254010, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -3211367014322746096, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 699023012457304161, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 4999486961255905946, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -771602447124829279, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -1152147162816932204, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1196480866727828669, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -5309146791756261813, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -7255135026748712361, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -1079372170191514059, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 8127407369057129126, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 120873758748874053, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!114 &6712509548924518652 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3026485866642825002} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3` - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &9041156484424442459 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3026485866642825002} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1594741489859899336 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3026485866642825002} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &2753712777129302648 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3026485866642825002} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -6612900964092521861, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!1 &3463200889828192112 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 256812872788469858} - - component: {fileID: 5815544377568256166} - - component: {fileID: 3100671557461423778} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &256812872788469858 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3463200889828192112} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009034574, y: -0.18049999, z: -0.004700005} - m_LocalScale: {x: 0.013519052, y: 0.013519053, z: 0.017220704} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 358287213207119135} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5815544377568256166 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3463200889828192112} - 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!114 &3100671557461423778 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3463200889828192112} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3629084712957621499 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 50402483142561612} - - component: {fileID: 8898946595168548806} - - component: {fileID: 2047629570848463599} - - component: {fileID: 255428587918707842} - - component: {fileID: 5783711723612072028} - - component: {fileID: 3132512303142843516} - - component: {fileID: 269269901181277868} - m_Layer: 8 - m_Name: Box117 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &50402483142561612 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3629084712957621499} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.009289205, y: 0.24802452, z: -0.35262302} - m_LocalScale: {x: 0.99999994, y: 0.99999976, z: 0.9999999} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 328998847394775614} - - {fileID: 6799948195651152322} - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8898946595168548806 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3629084712957621499} - m_Mesh: {fileID: -1041292729156527536, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &2047629570848463599 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3629084712957621499} - 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: -4393270081050254010, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3751080798913198142, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 699023012457304161, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 4999486961255905946, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -1079372170191514059, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1164559979738526386, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -1152147162816932204, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -771602447124829279, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1196480866727828669, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -5309146791756261813, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -7255135026748712361, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!114 &255428587918707842 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3629084712957621499} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3` - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 3 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &5783711723612072028 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3629084712957621499} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &3132512303142843516 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3629084712957621499} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &269269901181277868 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3629084712957621499} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -1041292729156527536, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!1 &3956477333991867810 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 328998847394775614} - - component: {fileID: 4560892258435863428} - - component: {fileID: 537031622486835086} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &328998847394775614 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3956477333991867810} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0033, y: -0.3579, z: -0.0151} - m_LocalScale: {x: 0.013396697, y: 0.013520005, z: 0.012286816} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 50402483142561612} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4560892258435863428 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3956477333991867810} - 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!114 &537031622486835086 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3956477333991867810} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4062144805821156630 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9065373829230102867} - - component: {fileID: 31342334211359327} - - component: {fileID: 7855204431049661288} - m_Layer: 8 - m_Name: Box137 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9065373829230102867 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4062144805821156630} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.082512446, y: 0.24802452, z: -0.35262305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &31342334211359327 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4062144805821156630} - m_Mesh: {fileID: -2542006481543278910, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &7855204431049661288 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4062144805821156630} - 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: -4393270081050254010, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 7242820059378372370, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 699023012457304161, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 4999486961255905946, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1164559979738526386, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -1152147162816932204, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -771602447124829279, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1196480866727828669, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -5309146791756261813, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!1 &4358693719707804850 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1888423715384937740} - - component: {fileID: 8257079618444562391} - - component: {fileID: 3429424691677088459} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1888423715384937740 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4358693719707804850} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009034574, y: -0.18049999, z: -0.025600001} - m_LocalScale: {x: 0.013519052, y: 0.013519053, z: 0.017220704} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 358287213207119135} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8257079618444562391 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4358693719707804850} - 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!114 &3429424691677088459 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4358693719707804850} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4366882225852086597 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1613294902018432627} - - component: {fileID: 5884332450073494819} - - component: {fileID: 6486077021905837102} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1613294902018432627 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4366882225852086597} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0101, y: -0.26930007, z: 0.056199998} - m_LocalScale: {x: 0.01352, y: 0.013520002, z: 0.01722} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8398327419535659056} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5884332450073494819 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4366882225852086597} - 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!114 &6486077021905837102 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4366882225852086597} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4601534533222278086 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3568897813821555888} - - component: {fileID: 3309960506406920678} - - component: {fileID: 7024487125480568194} - m_Layer: 8 - m_Name: Box102 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3568897813821555888 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4601534533222278086} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.3017555, y: 0.24802452, z: -0.35262305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3309960506406920678 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4601534533222278086} - m_Mesh: {fileID: 5047528748317851287, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &7024487125480568194 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4601534533222278086} - 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: 7242820059378372370, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -6307277589567570940, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 8290782892783832528, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!1 &4647742055728949979 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3107426752283190375} - - component: {fileID: 7937034706277630911} - - component: {fileID: 9104821810508991380} - m_Layer: 8 - m_Name: Box141 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3107426752283190375 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4647742055728949979} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.039886806, y: 0.24802452, z: -0.35262305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7937034706277630911 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4647742055728949979} - m_Mesh: {fileID: 4070407857570179305, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &9104821810508991380 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4647742055728949979} - 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: -4393270081050254010, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 5115815948437574282, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 699023012457304161, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 4999486961255905946, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!1 &4843221437123398133 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6249427563187234425} - - component: {fileID: 2284570322202757153} - - component: {fileID: 3984187469002630107} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6249427563187234425 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4843221437123398133} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0154, y: -0.2693, z: -0.0432} - m_LocalScale: {x: 0.013396695, y: 0.013520001, z: 0.012286814} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 565486609073306515} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2284570322202757153 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4843221437123398133} - 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!114 &3984187469002630107 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4843221437123398133} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4940127589874313298 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6327641124880551757} - - component: {fileID: 8034704882110803641} - - component: {fileID: 1356950707445200285} - m_Layer: 8 - m_Name: Box143 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6327641124880551757 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4940127589874313298} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.24885742, y: 0.24802452, z: -0.52986926} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8034704882110803641 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4940127589874313298} - m_Mesh: {fileID: 3362949761008655658, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &1356950707445200285 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4940127589874313298} - 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: -6257702196253466788, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 5115815948437574282, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -6307277589567570940, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -5956578104803850452, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!1 &5140512096067830523 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8141212806101388371} - - component: {fileID: 407259066767775024} - - component: {fileID: 4436720083812524878} - m_Layer: 8 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8141212806101388371 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5140512096067830523} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0007, y: 0.225, z: -0.2645} - m_LocalScale: {x: 0.63288814, y: 0.45532215, z: 0.5320568} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &407259066767775024 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5140512096067830523} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &4436720083812524878 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5140512096067830523} - 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: af9f09a343f0a264bb1136823665fff9, 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!1 &5420256154857571554 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7387067537288069372} - - component: {fileID: 4588264119008573537} - - component: {fileID: 7604690289424460866} - m_Layer: 8 - m_Name: Box145 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7387067537288069372 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5420256154857571554} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.18950972, y: 0.24802452, z: -0.52986926} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 22 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4588264119008573537 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5420256154857571554} - m_Mesh: {fileID: 3971713461252967244, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &7604690289424460866 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5420256154857571554} - 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: -6257702196253466788, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 5115815948437574282, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -6307277589567570940, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -5956578104803850452, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!1 &5632557604094334333 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4999292321280790471} - - component: {fileID: 7126280367995528721} - - component: {fileID: 4026621120497868275} - - component: {fileID: 4308784384489052662} - - component: {fileID: -1367603942174946621} - - component: {fileID: 4495821033522212754} - m_Layer: 8 - m_Name: 19 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4999292321280790471 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5632557604094334333} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 8141212806101388371} - - {fileID: 3568897813821555888} - - {fileID: 3314795205569376662} - - {fileID: 730397056496175818} - - {fileID: 3943711940918566753} - - {fileID: 5565624970342964999} - - {fileID: 2261661414576061003} - - {fileID: 358287213207119135} - - {fileID: 12761454731185215} - - {fileID: 565486609073306515} - - {fileID: 5179619047475122332} - - {fileID: 8901170824755208186} - - {fileID: 50402483142561612} - - {fileID: 5828194873931313757} - - {fileID: 9065373829230102867} - - {fileID: 8398327419535659056} - - {fileID: 8376240292515798394} - - {fileID: 3519593237380400159} - - {fileID: 3107426752283190375} - - {fileID: 5446327591380581203} - - {fileID: 6327641124880551757} - - {fileID: 3648550945189248281} - - {fileID: 7387067537288069372} - - {fileID: 8377542734286374166} - - {fileID: 7879973579473377087} - - {fileID: 3631520745651288740} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &7126280367995528721 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5632557604094334333} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 19 - occupyNum: 10 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &4026621120497868275 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5632557604094334333} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 10 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &4308784384489052662 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5632557604094334333} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &-1367603942174946621 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5632557604094334333} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &4495821033522212754 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5632557604094334333} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 10 - selfIcon: {fileID: 21300000, guid: fed9fd82b3b74df4e9327000a22b6303, type: 3} ---- !u!1 &5764846770301021580 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3314795205569376662} - - component: {fileID: 5544161984925312573} - - component: {fileID: 987893188762727036} - m_Layer: 8 - m_Name: Box103 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3314795205569376662 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5764846770301021580} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00000011920929, y: 0.4324825, z: -0.26400006} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5544161984925312573 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5764846770301021580} - m_Mesh: {fileID: -7768408576438331914, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &987893188762727036 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5764846770301021580} - 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: -4393270081050254010, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 7242820059378372370, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -6307277589567570940, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 4999486961255905946, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 699023012457304161, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!1 &7184136658092281940 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6195771495673608881} - - component: {fileID: 5653542965065213338} - - component: {fileID: 1255587749344238148} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6195771495673608881 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7184136658092281940} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009036064, y: -0.18049997, z: 0.09225001} - m_LocalScale: {x: 0.013519052, y: 0.013519053, z: 0.017220704} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 358287213207119135} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5653542965065213338 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7184136658092281940} - 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!114 &1255587749344238148 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7184136658092281940} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7189726121603167791 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 69159917512710453} - - component: {fileID: 6680336946737782350} - - component: {fileID: 1409656086823992188} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &69159917512710453 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7189726121603167791} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0154, y: -0.26930007, z: -0.043200016} - m_LocalScale: {x: 0.013396695, y: 0.013520002, z: 0.012286815} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8398327419535659056} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6680336946737782350 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7189726121603167791} - 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!114 &1409656086823992188 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7189726121603167791} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7445463814104637923 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5779185105259460524} - - component: {fileID: 4166798807977088192} - - component: {fileID: 1469953641284645671} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5779185105259460524 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7445463814104637923} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0154, y: -0.26930007, z: -0.0119999945} - m_LocalScale: {x: 0.013396695, y: 0.013520002, z: 0.012286815} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8398327419535659056} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4166798807977088192 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7445463814104637923} - 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!114 &1469953641284645671 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7445463814104637923} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7530286088289192317 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8376240292515798394} - - component: {fileID: 2420518379390239475} - - component: {fileID: 1589690674406393546} - m_Layer: 8 - m_Name: Box139 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8376240292515798394 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7530286088289192317} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.021260899, y: 0.24802452, z: -0.35262305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2420518379390239475 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7530286088289192317} - m_Mesh: {fileID: -6520371374760543206, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &1589690674406393546 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7530286088289192317} - 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: -4393270081050254010, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 5115815948437574282, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 699023012457304161, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 4999486961255905946, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!1 &7690483310338052520 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2261661414576061003} - - component: {fileID: 6724760646173046502} - - component: {fileID: 8284327547351128608} - m_Layer: 8 - m_Name: Box109 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2261661414576061003 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7690483310338052520} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.24968523, y: 0.24802452, z: -0.35262305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6724760646173046502 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7690483310338052520} - m_Mesh: {fileID: 6975212812562875068, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &8284327547351128608 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7690483310338052520} - 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: -4393270081050254010, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 7242820059378372370, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 699023012457304161, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 4999486961255905946, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -5309146791756261813, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1196480866727828669, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -771602447124829279, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -1152147162816932204, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1164559979738526386, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!1 &7903251125228689209 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3943711940918566753} - - component: {fileID: 4892055785225141204} - - component: {fileID: 6172890182472558318} - m_Layer: 8 - m_Name: Box105 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3943711940918566753 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7903251125228689209} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00000011920929, y: 0.030028656, z: -0.26400006} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4892055785225141204 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7903251125228689209} - m_Mesh: {fileID: -5369315709208034699, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &6172890182472558318 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7903251125228689209} - 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: 8064349381354593738, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 2307440974373336506, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 699023012457304161, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!1 &7994640535744189164 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5565624970342964999} - - component: {fileID: 7646891656397906015} - - component: {fileID: 1219915487055785918} - m_Layer: 8 - m_Name: Box108 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5565624970342964999 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7994640535744189164} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.27569002, y: 0.24802452, z: -0.35262305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7646891656397906015 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7994640535744189164} - m_Mesh: {fileID: -5798510906853853667, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &1219915487055785918 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7994640535744189164} - 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: -6257702196253466788, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 8127407369057129126, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 699023012457304161, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 4999486961255905946, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1164559979738526386, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -1152147162816932204, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -771602447124829279, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1196480866727828669, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -5309146791756261813, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!1 &8455092271842642091 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 358287213207119135} - - component: {fileID: 4787146593932646478} - - component: {fileID: 7233336813872186225} - - component: {fileID: 5436584274585869738} - - component: {fileID: 3291334121823537720} - - component: {fileID: 2303573938835315928} - - component: {fileID: 1727224836397330296} - m_Layer: 8 - m_Name: Box110 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &358287213207119135 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8455092271842642091} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.22368044, y: 0.24802452, z: -0.35262305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 6195771495673608881} - - {fileID: 2767182340394101836} - - {fileID: 954199830736453252} - - {fileID: 6338762255710415683} - - {fileID: 256812872788469858} - - {fileID: 1888423715384937740} - - {fileID: 3133686346125538437} - - {fileID: 2603410105602744174} - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4787146593932646478 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8455092271842642091} - m_Mesh: {fileID: 3600287743064244957, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &7233336813872186225 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8455092271842642091} - 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: -4393270081050254010, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 7242820059378372370, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 699023012457304161, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 4999486961255905946, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -771602447124829279, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 7671602528784441804, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -1079372170191514059, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!114 &5436584274585869738 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8455092271842642091} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &3291334121823537720 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8455092271842642091} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &2303573938835315928 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8455092271842642091} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &1727224836397330296 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8455092271842642091} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 3600287743064244957, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!1 &8654168077855810593 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8398327419535659056} - - component: {fileID: 865402438129204420} - - component: {fileID: 90428121778095041} - - component: {fileID: 6434225965539665290} - - component: {fileID: 7599681887671602534} - - component: {fileID: 5810517805846670747} - - component: {fileID: 8614263240333867669} - m_Layer: 8 - m_Name: Box138 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8398327419535659056 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8654168077855810593} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.14807133, y: 0.24802452, z: -0.264} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 7702771087761932115} - - {fileID: 1613294902018432627} - - {fileID: 5779185105259460524} - - {fileID: 69159917512710453} - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &865402438129204420 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8654168077855810593} - m_Mesh: {fileID: 6632251951820118909, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &90428121778095041 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8654168077855810593} - 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: -4393270081050254010, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -3211367014322746096, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 699023012457304161, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 4999486961255905946, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -771602447124829279, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -1152147162816932204, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1196480866727828669, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -5309146791756261813, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -7255135026748712361, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -1079372170191514059, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 8127407369057129126, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 120873758748874053, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!114 &6434225965539665290 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8654168077855810593} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3` - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 4 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7599681887671602534 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8654168077855810593} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5810517805846670747 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8654168077855810593} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &8614263240333867669 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8654168077855810593} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 6632251951820118909, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!1 &8690587258675625837 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8377542734286374166} - - component: {fileID: 6564327167776868586} - - component: {fileID: 6182583080144418235} - m_Layer: 8 - m_Name: Box146 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8377542734286374166 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8690587258675625837} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.30175525, y: 0.24802452, z: -0.35262305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 23 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6564327167776868586 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8690587258675625837} - m_Mesh: {fileID: -6891480930148778616, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &6182583080144418235 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8690587258675625837} - 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: 7242820059378372370, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: -6307277589567570940, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 8290782892783832528, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!1 &8824113643885598498 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7879973579473377087} - - component: {fileID: 1740907715048635216} - - component: {fileID: 6146570614515298715} - m_Layer: 8 - m_Name: Box148 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7879973579473377087 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8824113643885598498} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00000011920929, y: -0.0035092235, z: -0.26400006} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 24 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1740907715048635216 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8824113643885598498} - m_Mesh: {fileID: 6762006788543029084, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &6146570614515298715 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8824113643885598498} - 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: 8064349381354593738, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 2307440974373336506, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 699023012457304161, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!1 &9076764156062922712 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5446327591380581203} - - component: {fileID: 5256765157296763025} - - component: {fileID: 2098408561084268384} - m_Layer: 8 - m_Name: Box142 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5446327591380581203 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9076764156062922712} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.10083899, y: 0.24802452, z: -0.35262305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 19 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5256765157296763025 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9076764156062922712} - m_Mesh: {fileID: 8197054578433957194, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &2098408561084268384 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9076764156062922712} - 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: -4393270081050254010, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 5115815948437574282, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 699023012457304161, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 4999486961255905946, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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!1 &9100065399967412601 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 954199830736453252} - - component: {fileID: 932679227887598057} - - component: {fileID: 8904242990122135737} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &954199830736453252 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9100065399967412601} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009034574, y: -0.1805, z: 0.051200032} - m_LocalScale: {x: 0.013519052, y: 0.013519053, z: 0.017220704} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 358287213207119135} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &932679227887598057 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9100065399967412601} - 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!114 &8904242990122135737 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9100065399967412601} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9134710694352949047 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4037213130750524802} - - component: {fileID: 8846511975392718565} - - component: {fileID: 4435480298323627036} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4037213130750524802 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9134710694352949047} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0101, y: -0.2693, z: 0.0562} - m_LocalScale: {x: 0.01352, y: 0.013520001, z: 0.01722} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 565486609073306515} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8846511975392718565 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9134710694352949047} - 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!114 &4435480298323627036 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9134710694352949047} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9196143377629823763 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8901170824755208186} - - component: {fileID: 6194772916934474877} - - component: {fileID: 7420565009679006550} - m_Layer: 8 - m_Name: Box115 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8901170824755208186 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9196143377629823763} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.051921472, y: 0.24802452, z: -0.35262305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4999292321280790471} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6194772916934474877 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9196143377629823763} - m_Mesh: {fileID: -3526922212205323383, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} ---- !u!23 &7420565009679006550 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9196143377629823763} - 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: -4393270081050254010, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 5115815948437574282, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 1368039103165038143, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 699023012457304161, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 4999486961255905946, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - - {fileID: 3925418980499852262, guid: b61be62735b2c964fa242c3ffa7e2af7, type: 3} - 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} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/19.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/19.prefab.meta deleted file mode 100644 index a05f17385..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/19.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 13efebd6f94936a40a76fc46174f733b -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/20.prefab b/GQ_URP/GQ/Assets/prefab/老模型/20.prefab deleted file mode 100644 index 7fb4fe281..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/20.prefab +++ /dev/null @@ -1,4975 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &120658628081467094 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3598022639282850252} - - component: {fileID: 1205159072910414482} - - component: {fileID: 7679433518463624953} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3598022639282850252 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 120658628081467094} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4849311127851086009} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1205159072910414482 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 120658628081467094} - 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!114 &7679433518463624953 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 120658628081467094} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &215113665837062713 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7415922968092878192} - - component: {fileID: 1858491402828603536} - - component: {fileID: 3476047306552485086} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7415922968092878192 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 215113665837062713} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1021564153097121289} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1858491402828603536 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 215113665837062713} - 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!114 &3476047306552485086 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 215113665837062713} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &276375289677518036 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4580932544741117871} - - component: {fileID: 5315248725939480001} - - component: {fileID: 2903100497405359043} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4580932544741117871 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 276375289677518036} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285007, y: -0.014200004, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5838463913210733454} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5315248725939480001 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 276375289677518036} - 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!114 &2903100497405359043 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 276375289677518036} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &328705878033207032 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5838463913210733454} - - component: {fileID: 6913465202958635948} - - component: {fileID: 1614532507673929625} - - component: {fileID: 6213665573412806169} - - component: {fileID: 7510298347981089075} - - component: {fileID: 3387192118315903805} - - component: {fileID: 7006108053319105692} - m_Layer: 8 - m_Name: Object006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5838463913210733454 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 328705878033207032} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00032439828, y: 0.08114039, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4580932544741117871} - - {fileID: 3376654461365087987} - - {fileID: 7124695629839657436} - - {fileID: 7947643268976929547} - - {fileID: 7278265510257902734} - - {fileID: 4938373078712669154} - - {fileID: 4212728058854605389} - - {fileID: 7007365860498755573} - - {fileID: 2058212780412142629} - - {fileID: 4572788931663340839} - - {fileID: 1731083769753889800} - - {fileID: 62835429580323078} - m_Father: {fileID: 7596184905119517507} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6913465202958635948 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 328705878033207032} - m_Mesh: {fileID: -2639241166356525208, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} ---- !u!23 &1614532507673929625 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 328705878033207032} - 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: -1502669387472542646, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - - {fileID: 1038712434395320081, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - - {fileID: 7874494369389819107, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - 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!114 &6213665573412806169 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 328705878033207032} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7510298347981089075 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 328705878033207032} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &3387192118315903805 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 328705878033207032} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &7006108053319105692 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 328705878033207032} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -2639241166356525208, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} ---- !u!1 &388339488358692862 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6112658417269993974} - - component: {fileID: 3095527930951813104} - - component: {fileID: 7268663892147476727} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6112658417269993974 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 388339488358692862} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1021564153097121289} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3095527930951813104 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 388339488358692862} - 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!114 &7268663892147476727 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 388339488358692862} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &977156884357498003 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4758218122964553005} - - component: {fileID: 5638758530478767250} - - component: {fileID: 88652465091806410} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4758218122964553005 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 977156884357498003} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1021564153097121289} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5638758530478767250 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 977156884357498003} - 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!114 &88652465091806410 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 977156884357498003} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1033519787460983091 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1021564153097121289} - - component: {fileID: 2673151344738957234} - - component: {fileID: 1770842304614836584} - - component: {fileID: 1505403786042992068} - - component: {fileID: 6613958784274175904} - - component: {fileID: 4931045307690065934} - - component: {fileID: 8950058948597290477} - m_Layer: 8 - m_Name: Object005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1021564153097121289 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1033519787460983091} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00032439828, y: 0.11210428, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8799740990249949486} - - {fileID: 7415922968092878192} - - {fileID: 6112658417269993974} - - {fileID: 4758218122964553005} - - {fileID: 4593552703468972198} - - {fileID: 7482219928242694368} - - {fileID: 4435712008693409146} - - {fileID: 421579985389001942} - - {fileID: 3901392868458482037} - - {fileID: 4744772611744583048} - - {fileID: 2620053231129231988} - - {fileID: 560672564261227412} - m_Father: {fileID: 7596184905119517507} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2673151344738957234 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1033519787460983091} - m_Mesh: {fileID: 9186633843763367028, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} ---- !u!23 &1770842304614836584 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1033519787460983091} - 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: -1502669387472542646, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - - {fileID: 1038712434395320081, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - - {fileID: 7874494369389819107, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - 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!114 &1505403786042992068 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1033519787460983091} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &6613958784274175904 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1033519787460983091} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &4931045307690065934 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1033519787460983091} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &8950058948597290477 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1033519787460983091} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 9186633843763367028, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} ---- !u!1 &1097766390204770827 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 876446847275815155} - - component: {fileID: 8300812695846116642} - - component: {fileID: 1794241563749080834} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &876446847275815155 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1097766390204770827} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1988028108256555917} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8300812695846116642 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1097766390204770827} - 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!114 &1794241563749080834 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1097766390204770827} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1171306613158166678 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6424464232481962661} - - component: {fileID: 8358304751805727981} - - component: {fileID: 2612955675011842303} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6424464232481962661 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1171306613158166678} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4849311127851086009} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8358304751805727981 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1171306613158166678} - 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!114 &2612955675011842303 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1171306613158166678} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1653938391129505119 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4938373078712669154} - - component: {fileID: 349151532853488494} - - component: {fileID: 2985236323693551749} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4938373078712669154 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1653938391129505119} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.019700022, y: -0.014200004, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5838463913210733454} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &349151532853488494 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1653938391129505119} - 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!114 &2985236323693551749 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1653938391129505119} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1954565126817349893 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7520095377020352926} - - component: {fileID: 7751424352998188840} - - component: {fileID: 5910005765208119214} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7520095377020352926 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1954565126817349893} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1988028108256555917} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7751424352998188840 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1954565126817349893} - 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!114 &5910005765208119214 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1954565126817349893} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2298836523872034901 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5436893454550395821} - - component: {fileID: 8731643672844752473} - - component: {fileID: 1476062322992423763} - m_Layer: 8 - m_Name: Object001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5436893454550395821 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2298836523872034901} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: -0.012468848} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5790764291765126746} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8731643672844752473 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2298836523872034901} - m_Mesh: {fileID: -3292925553009838691, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} ---- !u!23 &1476062322992423763 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2298836523872034901} - 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: -1709277514330460371, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - - {fileID: 4999486961255905946, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - - {fileID: 9077612666303962245, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - - {fileID: 699023012457304161, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - - {fileID: 3925418980499852262, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - - {fileID: 6012098043614753949, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - 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!1 &2323953623156940878 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7947643268976929547} - - component: {fileID: 8240485191453988125} - - component: {fileID: 2197471493854424142} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7947643268976929547 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2323953623156940878} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.07010001, y: -0.014200004, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5838463913210733454} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8240485191453988125 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2323953623156940878} - 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!114 &2197471493854424142 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2323953623156940878} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2386505260239873490 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9199566232586255211} - - component: {fileID: 1826541462754544595} - - component: {fileID: 4867786804795956704} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9199566232586255211 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2386505260239873490} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4849311127851086009} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1826541462754544595 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2386505260239873490} - 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!114 &4867786804795956704 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2386505260239873490} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2935592857790203687 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2445831952781855901} - - component: {fileID: 2257673630993929489} - - component: {fileID: 697215707882328293} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2445831952781855901 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2935592857790203687} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4849311127851086009} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2257673630993929489 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2935592857790203687} - 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!114 &697215707882328293 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2935592857790203687} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3036643716092288001 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7147005307892641920} - - component: {fileID: 618658031270025699} - - component: {fileID: 1009171189461231550} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7147005307892641920 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3036643716092288001} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1988028108256555917} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &618658031270025699 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3036643716092288001} - 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!114 &1009171189461231550 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3036643716092288001} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3411792110361881984 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4572788931663340839} - - component: {fileID: 3427118826517844769} - - component: {fileID: 6367717905976209300} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4572788931663340839 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3411792110361881984} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.19180012, y: -0.014200004, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5838463913210733454} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3427118826517844769 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3411792110361881984} - 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!114 &6367717905976209300 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3411792110361881984} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3443164409205513094 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9155806727649525386} - - component: {fileID: 8247682990880351439} - - component: {fileID: 7147441441064105034} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9155806727649525386 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3443164409205513094} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4849311127851086009} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8247682990880351439 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3443164409205513094} - 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!114 &7147441441064105034 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3443164409205513094} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3495191083661546759 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 560672564261227412} - - component: {fileID: 4002507947480469193} - - component: {fileID: 1485245137785575086} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &560672564261227412 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3495191083661546759} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1021564153097121289} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4002507947480469193 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3495191083661546759} - 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!114 &1485245137785575086 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3495191083661546759} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3495811018553646988 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4849311127851086009} - - component: {fileID: 2093420914525018045} - - component: {fileID: 2264476125565983292} - - component: {fileID: 5941156375211435422} - - component: {fileID: 9164778661484156372} - - component: {fileID: 7848769635642086491} - - component: {fileID: 8038812634177516200} - m_Layer: 8 - m_Name: Object002 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4849311127851086009 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3495811018553646988} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00032439828, y: 0.019212604, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 9155806727649525386} - - {fileID: 8309777513975549516} - - {fileID: 9199566232586255211} - - {fileID: 4654862839561347374} - - {fileID: 3000914911848892470} - - {fileID: 3598022639282850252} - - {fileID: 7245573706938841972} - - {fileID: 6881486842765397428} - - {fileID: 6768649644869207374} - - {fileID: 6424464232481962661} - - {fileID: 2445831952781855901} - - {fileID: 1050978849586464554} - m_Father: {fileID: 7596184905119517507} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2093420914525018045 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3495811018553646988} - m_Mesh: {fileID: -3996760141626369306, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} ---- !u!23 &2264476125565983292 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3495811018553646988} - 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: -1502669387472542646, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - - {fileID: 1038712434395320081, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - - {fileID: 7874494369389819107, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - 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!114 &5941156375211435422 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3495811018553646988} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 4 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &9164778661484156372 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3495811018553646988} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &7848769635642086491 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3495811018553646988} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &8038812634177516200 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3495811018553646988} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -3996760141626369306, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} ---- !u!1 &3504043895374152099 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5654248540687337778} - - component: {fileID: 2732140521332222148} - - component: {fileID: 6628490091521873757} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5654248540687337778 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3504043895374152099} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1988028108256555917} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2732140521332222148 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3504043895374152099} - 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!114 &6628490091521873757 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3504043895374152099} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3575386353945330053 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5202391559185917430} - - component: {fileID: 642010236718888974} - - component: {fileID: 8151347708596374298} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5202391559185917430 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3575386353945330053} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1988028108256555917} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &642010236718888974 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3575386353945330053} - 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!114 &8151347708596374298 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3575386353945330053} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3941596170480900628 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4654862839561347374} - - component: {fileID: 3073574385860294963} - - component: {fileID: 1201618676752691052} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4654862839561347374 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3941596170480900628} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4849311127851086009} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3073574385860294963 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3941596170480900628} - 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!114 &1201618676752691052 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3941596170480900628} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3954376549644114668 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4688679686375051913} - - component: {fileID: 8929499834155361973} - - component: {fileID: 2435679939764120061} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4688679686375051913 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3954376549644114668} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1988028108256555917} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8929499834155361973 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3954376549644114668} - 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!114 &2435679939764120061 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3954376549644114668} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3981288185630793220 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7482219928242694368} - - component: {fileID: 7374434438334407915} - - component: {fileID: 200888957970153847} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7482219928242694368 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3981288185630793220} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1021564153097121289} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7374434438334407915 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3981288185630793220} - 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!114 &200888957970153847 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3981288185630793220} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3997284897180217536 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4435712008693409146} - - component: {fileID: 8813612147058060640} - - component: {fileID: 6832420549335658824} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4435712008693409146 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3997284897180217536} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1021564153097121289} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8813612147058060640 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3997284897180217536} - 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!114 &6832420549335658824 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3997284897180217536} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4133333578005137933 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1050978849586464554} - - component: {fileID: 5840287340061104765} - - component: {fileID: 3045426806150966505} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1050978849586464554 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133333578005137933} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4849311127851086009} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5840287340061104765 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133333578005137933} - 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!114 &3045426806150966505 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4133333578005137933} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4174823374781270402 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2058212780412142629} - - component: {fileID: 4535307076862897875} - - component: {fileID: 5385603810273671272} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2058212780412142629 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4174823374781270402} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.14860004, y: -0.014200004, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5838463913210733454} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4535307076862897875 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4174823374781270402} - 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!114 &5385603810273671272 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4174823374781270402} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4188118981904732286 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3376654461365087987} - - component: {fileID: 7592404865081102685} - - component: {fileID: 6496270315649139384} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3376654461365087987 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4188118981904732286} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.15960005, y: -0.014200004, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5838463913210733454} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7592404865081102685 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4188118981904732286} - 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!114 &6496270315649139384 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4188118981904732286} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4295794668610404531 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1988028108256555917} - - component: {fileID: 53971713411537244} - - component: {fileID: 3018987518363071038} - - component: {fileID: 2064488880407277707} - - component: {fileID: 758495478014463046} - - component: {fileID: 8711899236985098179} - - component: {fileID: 5598577764423948243} - m_Layer: 8 - m_Name: Object004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1988028108256555917 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4295794668610404531} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00032439828, y: 0.05017651, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 6787502254585541581} - - {fileID: 5202391559185917430} - - {fileID: 2948286197851698214} - - {fileID: 1621875335414630768} - - {fileID: 754474074329957500} - - {fileID: 7147005307892641920} - - {fileID: 4688679686375051913} - - {fileID: 5654248540687337778} - - {fileID: 876446847275815155} - - {fileID: 3305147873423102235} - - {fileID: 618792611318112735} - - {fileID: 7520095377020352926} - m_Father: {fileID: 7596184905119517507} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &53971713411537244 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4295794668610404531} - m_Mesh: {fileID: -8113768720884857512, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} ---- !u!23 &3018987518363071038 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4295794668610404531} - 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: -1502669387472542646, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - - {fileID: 1038712434395320081, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - - {fileID: 7874494369389819107, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - 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!114 &2064488880407277707 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4295794668610404531} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 3 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &758495478014463046 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4295794668610404531} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &8711899236985098179 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4295794668610404531} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &5598577764423948243 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4295794668610404531} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -8113768720884857512, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} ---- !u!1 &4313125354839299287 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 62835429580323078} - - component: {fileID: 7694502880248556399} - - component: {fileID: 5029609417373083580} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &62835429580323078 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4313125354839299287} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200015, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5838463913210733454} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7694502880248556399 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4313125354839299287} - 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!114 &5029609417373083580 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4313125354839299287} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4380150273521519089 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2620053231129231988} - - component: {fileID: 5265133768050625537} - - component: {fileID: 7857156965173659841} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2620053231129231988 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4380150273521519089} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1021564153097121289} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5265133768050625537 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4380150273521519089} - 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!114 &7857156965173659841 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4380150273521519089} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4539364270221790773 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5790764291765126746} - m_Layer: 8 - m_Name: "\u524D\u76D6" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5790764291765126746 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4539364270221790773} - 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: 5436893454550395821} - m_Father: {fileID: 7596184905119517507} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &4682721440558746416 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3305147873423102235} - - component: {fileID: 1679605496327497865} - - component: {fileID: 2266282749372378892} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3305147873423102235 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4682721440558746416} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1988028108256555917} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1679605496327497865 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4682721440558746416} - 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!114 &2266282749372378892 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4682721440558746416} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4865381985814716474 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4593552703468972198} - - component: {fileID: 8844602295055099623} - - component: {fileID: 8347726685430814691} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4593552703468972198 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4865381985814716474} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1021564153097121289} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8844602295055099623 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4865381985814716474} - 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!114 &8347726685430814691 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4865381985814716474} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4943430812221549800 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 421579985389001942} - - component: {fileID: 4695875629415934647} - - component: {fileID: 1383275660125905897} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &421579985389001942 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4943430812221549800} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1021564153097121289} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4695875629415934647 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4943430812221549800} - 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!114 &1383275660125905897 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4943430812221549800} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5235602355820311854 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1621875335414630768} - - component: {fileID: 4745988475012023704} - - component: {fileID: 7433767128456839706} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1621875335414630768 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5235602355820311854} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1988028108256555917} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4745988475012023704 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5235602355820311854} - 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!114 &7433767128456839706 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5235602355820311854} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5312344363728492045 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7278265510257902734} - - component: {fileID: 7444744290508341426} - - component: {fileID: 2193015710613000651} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7278265510257902734 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5312344363728492045} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.023499984, y: -0.0142, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5838463913210733454} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7444744290508341426 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5312344363728492045} - 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!114 &2193015710613000651 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5312344363728492045} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6083574371210037410 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7245573706938841972} - - component: {fileID: 7375820349382083937} - - component: {fileID: 7779772681699696846} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7245573706938841972 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6083574371210037410} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4849311127851086009} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7375820349382083937 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6083574371210037410} - 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!114 &7779772681699696846 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6083574371210037410} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6193122145522896481 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6787502254585541581} - - component: {fileID: 8248084952464215406} - - component: {fileID: 2463295586655880396} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6787502254585541581 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6193122145522896481} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1988028108256555917} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8248084952464215406 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6193122145522896481} - 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!114 &2463295586655880396 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6193122145522896481} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6336441004797432813 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8799740990249949486} - - component: {fileID: 2023449613564083376} - - component: {fileID: 7545800972032977158} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8799740990249949486 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6336441004797432813} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1021564153097121289} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2023449613564083376 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6336441004797432813} - 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!114 &7545800972032977158 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6336441004797432813} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6415099285521157008 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7007365860498755573} - - component: {fileID: 8623392530239044968} - - component: {fileID: 6608556945085262452} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7007365860498755573 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6415099285521157008} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.10930006, y: -0.014200004, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5838463913210733454} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8623392530239044968 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6415099285521157008} - 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!114 &6608556945085262452 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6415099285521157008} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6551237464187907104 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 618792611318112735} - - component: {fileID: 8979614232419731225} - - component: {fileID: 5513761192917877270} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &618792611318112735 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6551237464187907104} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1988028108256555917} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8979614232419731225 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6551237464187907104} - 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!114 &5513761192917877270 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6551237464187907104} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6717968954599380286 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3901392868458482037} - - component: {fileID: 4090630635374280247} - - component: {fileID: 5963307931429823788} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3901392868458482037 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6717968954599380286} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1021564153097121289} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4090630635374280247 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6717968954599380286} - 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!114 &5963307931429823788 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6717968954599380286} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7070863897194205689 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7596184905119517507} - - component: {fileID: 9034221010927660459} - - component: {fileID: 6850099272556930315} - - component: {fileID: 3729390667964548734} - - component: {fileID: -1863693733709410111} - - component: {fileID: 3116413147802601356} - m_Layer: 8 - m_Name: 20 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7596184905119517507 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7070863897194205689} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 2603392892696638800} - - {fileID: 5790764291765126746} - - {fileID: 4849311127851086009} - - {fileID: 1988028108256555917} - - {fileID: 1021564153097121289} - - {fileID: 5838463913210733454} - - {fileID: 4997951898028389244} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &9034221010927660459 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7070863897194205689} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 20 - occupyNum: 3 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &6850099272556930315 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7070863897194205689} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 3 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &3729390667964548734 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7070863897194205689} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &-1863693733709410111 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7070863897194205689} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &3116413147802601356 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7070863897194205689} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 3 - selfIcon: {fileID: 21300000, guid: 7cce1903caed2d24693b9f3fd2ab5782, type: 3} ---- !u!1 &7229076154893010221 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2948286197851698214} - - component: {fileID: 7338323691074787305} - - component: {fileID: 2808670271274117329} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2948286197851698214 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7229076154893010221} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1988028108256555917} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7338323691074787305 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7229076154893010221} - 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!114 &2808670271274117329 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7229076154893010221} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7240453295429492514 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8309777513975549516} - - component: {fileID: 371181498229630981} - - component: {fileID: 5543111814439638395} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8309777513975549516 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7240453295429492514} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4849311127851086009} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &371181498229630981 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7240453295429492514} - 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!114 &5543111814439638395 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7240453295429492514} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7650509231759411603 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 754474074329957500} - - component: {fileID: 6512724383720251211} - - component: {fileID: 8218462711499317444} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &754474074329957500 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7650509231759411603} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1988028108256555917} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6512724383720251211 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7650509231759411603} - 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!114 &8218462711499317444 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7650509231759411603} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7903537189961951200 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4744772611744583048} - - component: {fileID: 3664999451339630302} - - component: {fileID: 3471160817597573320} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4744772611744583048 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7903537189961951200} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1021564153097121289} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3664999451339630302 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7903537189961951200} - 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!114 &3471160817597573320 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7903537189961951200} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8158860309522023195 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3000914911848892470} - - component: {fileID: 5823553116561745913} - - component: {fileID: 8189864248090142728} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3000914911848892470 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8158860309522023195} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4849311127851086009} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5823553116561745913 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8158860309522023195} - 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!114 &8189864248090142728 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8158860309522023195} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8193010869676922964 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6768649644869207374} - - component: {fileID: 1864731218720718766} - - component: {fileID: 5212396854142151988} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6768649644869207374 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8193010869676922964} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4849311127851086009} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1864731218720718766 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8193010869676922964} - 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!114 &5212396854142151988 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8193010869676922964} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8579111132001928683 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2603392892696638800} - - component: {fileID: 619185143508172555} - - component: {fileID: 360075524101508335} - m_Layer: 8 - m_Name: 20 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2603392892696638800 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8579111132001928683} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.178} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7596184905119517507} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &619185143508172555 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8579111132001928683} - m_Mesh: {fileID: 914051726605392165, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} ---- !u!23 &360075524101508335 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8579111132001928683} - 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: -5598141350581169709, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - - {fileID: 3925418980499852262, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - - {fileID: 1368039103165038143, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - - {fileID: -5956578104803850452, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - - {fileID: -6307277589567570940, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - - {fileID: -6257702196253466788, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - - {fileID: 9077612666303962245, guid: 74f98d2a8e494f6498aa361245d12bf8, type: 3} - 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!1 &8840246890295405659 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6881486842765397428} - - component: {fileID: 7000601063908046991} - - component: {fileID: 347386189644741554} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6881486842765397428 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8840246890295405659} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4849311127851086009} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7000601063908046991 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8840246890295405659} - 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!114 &347386189644741554 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8840246890295405659} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8888624138927570054 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4212728058854605389} - - component: {fileID: 6714780438321902531} - - component: {fileID: 8402509934866433511} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4212728058854605389 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8888624138927570054} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.066100046, y: -0.014200004, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5838463913210733454} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6714780438321902531 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8888624138927570054} - 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!114 &8402509934866433511 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8888624138927570054} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8932734136406166295 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4997951898028389244} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4997951898028389244 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8932734136406166295} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -0.13499999, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7596184905119517507} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &8949395288095606002 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1731083769753889800} - - component: {fileID: 3836755992530973225} - - component: {fileID: 7547132226105253601} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1731083769753889800 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8949395288095606002} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200015, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5838463913210733454} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3836755992530973225 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8949395288095606002} - 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!114 &7547132226105253601 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8949395288095606002} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9011354788270143677 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7124695629839657436} - - component: {fileID: 6243691083325772699} - - component: {fileID: 6812764079987970630} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7124695629839657436 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9011354788270143677} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.11330007, y: -0.014200011, z: -0.005136119} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5838463913210733454} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6243691083325772699 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9011354788270143677} - 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!114 &6812764079987970630 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9011354788270143677} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/20.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/20.prefab.meta deleted file mode 100644 index 39a6958a4..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/20.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: f64af1d2140953d48b4f50cce7b0b30c -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/21.prefab b/GQ_URP/GQ/Assets/prefab/老模型/21.prefab deleted file mode 100644 index c214bfc2f..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/21.prefab +++ /dev/null @@ -1,4975 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &109701414187608889 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7456204360543332522} - - component: {fileID: 3903736003713350310} - - component: {fileID: 3457159681232309259} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7456204360543332522 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 109701414187608889} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8944868265763290095} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3903736003713350310 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 109701414187608889} - 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!114 &3457159681232309259 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 109701414187608889} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &181729541420161517 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2733150089782890778} - - component: {fileID: 6082382713746327236} - - component: {fileID: 405385569379248231} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2733150089782890778 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 181729541420161517} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8944868265763290095} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6082382713746327236 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 181729541420161517} - 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!114 &405385569379248231 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 181729541420161517} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &402133200430078363 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1071710130501239585} - - component: {fileID: 5596096414680958743} - - component: {fileID: 7817075270948133067} - - component: {fileID: 6854731692879594225} - - component: {fileID: -1368489567257985088} - - component: {fileID: -3847428236615759313} - m_Layer: 8 - m_Name: 21 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1071710130501239585 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 402133200430078363} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 4869929728973618482} - - {fileID: 2013143303726408118} - - {fileID: 2663982003649132763} - - {fileID: 8944868265763290095} - - {fileID: 7609175086083597931} - - {fileID: 3941222233485044716} - - {fileID: 2985042516595451544} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &5596096414680958743 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 402133200430078363} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 21 - occupyNum: 3 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7817075270948133067 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 402133200430078363} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 3 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &6854731692879594225 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 402133200430078363} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &-1368489567257985088 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 402133200430078363} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &-3847428236615759313 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 402133200430078363} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 3 - selfIcon: {fileID: 21300000, guid: abfde92cf41866d45b3794aecd9a3d35, type: 3} ---- !u!1 &526072872669211746 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2967302151665173950} - - component: {fileID: 7136606485876303673} - - component: {fileID: 4234781161068394075} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2967302151665173950 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 526072872669211746} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7609175086083597931} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7136606485876303673 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 526072872669211746} - 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!114 &4234781161068394075 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 526072872669211746} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &559370732503450954 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2013143303726408118} - m_Layer: 8 - m_Name: "\u524D\u76D6" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2013143303726408118 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 559370732503450954} - 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: 3226779144884642767} - m_Father: {fileID: 1071710130501239585} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &754229512721940740 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4342928240191356439} - - component: {fileID: 6315991246973320205} - - component: {fileID: 3312211360445097102} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4342928240191356439 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 754229512721940740} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3941222233485044716} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6315991246973320205 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 754229512721940740} - 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!114 &3312211360445097102 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 754229512721940740} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &870304645011283379 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8774416134978296769} - - component: {fileID: 1682443120744816072} - - component: {fileID: 590753887989977628} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8774416134978296769 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 870304645011283379} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2663982003649132763} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1682443120744816072 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 870304645011283379} - 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!114 &590753887989977628 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 870304645011283379} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &927515694250505947 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 669148409282739165} - - component: {fileID: 4677704335598449384} - - component: {fileID: 7241768128569369520} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &669148409282739165 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 927515694250505947} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7609175086083597931} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4677704335598449384 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 927515694250505947} - 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!114 &7241768128569369520 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 927515694250505947} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1205640189883485577 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4869929728973618482} - - component: {fileID: 8008423611971106665} - - component: {fileID: 7154906491466646669} - m_Layer: 8 - m_Name: Box106 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4869929728973618482 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1205640189883485577} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.178} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1071710130501239585} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8008423611971106665 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1205640189883485577} - m_Mesh: {fileID: -4074771182479976246, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} ---- !u!23 &7154906491466646669 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1205640189883485577} - 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: -5598141350581169709, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - - {fileID: 3925418980499852262, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - - {fileID: 1368039103165038143, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - - {fileID: -5956578104803850452, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - - {fileID: -6307277589567570940, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - - {fileID: 9077612666303962245, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - 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!1 &1317633768912221775 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8939681116762374173} - - component: {fileID: 4796983300446726137} - - component: {fileID: 7923747919202486020} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8939681116762374173 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1317633768912221775} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8944868265763290095} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4796983300446726137 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1317633768912221775} - 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!114 &7923747919202486020 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1317633768912221775} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1478485756872919725 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 844876372505134707} - - component: {fileID: 5722992279654118533} - - component: {fileID: 4519603527356605507} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &844876372505134707 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1478485756872919725} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7609175086083597931} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5722992279654118533 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1478485756872919725} - 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!114 &4519603527356605507 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1478485756872919725} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1617122454633333069 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 810700515709668852} - - component: {fileID: 2094514437233307649} - - component: {fileID: 8793225620233624522} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &810700515709668852 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1617122454633333069} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7609175086083597931} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2094514437233307649 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1617122454633333069} - 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!114 &8793225620233624522 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1617122454633333069} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1952826927553076767 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6375352792030121072} - - component: {fileID: 2532479042619944855} - - component: {fileID: 9114270821487417913} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6375352792030121072 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1952826927553076767} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2663982003649132763} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2532479042619944855 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1952826927553076767} - 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!114 &9114270821487417913 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1952826927553076767} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2003802546202348835 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1041919781915465083} - - component: {fileID: 8745594646163735020} - - component: {fileID: 6436695927159064644} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1041919781915465083 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2003802546202348835} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7609175086083597931} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8745594646163735020 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2003802546202348835} - 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!114 &6436695927159064644 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2003802546202348835} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2650313337207955936 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5173933429374944010} - - component: {fileID: 8061381128723298777} - - component: {fileID: 4322400552553720527} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5173933429374944010 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2650313337207955936} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3941222233485044716} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8061381128723298777 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2650313337207955936} - 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!114 &4322400552553720527 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2650313337207955936} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2677704046643092129 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2985042516595451544} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2985042516595451544 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2677704046643092129} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -0.13499998, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1071710130501239585} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2827965488176478408 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3071182322732771003} - - component: {fileID: 5333909854776811711} - - component: {fileID: 2262057229894423734} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3071182322732771003 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2827965488176478408} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2663982003649132763} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5333909854776811711 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2827965488176478408} - 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!114 &2262057229894423734 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2827965488176478408} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2832295922393509074 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6694733122297585450} - - component: {fileID: 4699730142940302252} - - component: {fileID: 5843006289307050699} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6694733122297585450 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2832295922393509074} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7609175086083597931} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4699730142940302252 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2832295922393509074} - 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!114 &5843006289307050699 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2832295922393509074} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2886205397031943096 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3251584164532586522} - - component: {fileID: 5398606063515362509} - - component: {fileID: 2938375639240390598} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3251584164532586522 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2886205397031943096} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7609175086083597931} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5398606063515362509 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2886205397031943096} - 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!114 &2938375639240390598 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2886205397031943096} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3067097331089016404 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4421952798411371204} - - component: {fileID: 884415819290367477} - - component: {fileID: 4933568289957873647} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4421952798411371204 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3067097331089016404} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3941222233485044716} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &884415819290367477 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3067097331089016404} - 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!114 &4933568289957873647 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3067097331089016404} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3454130935971144090 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6437100107920835095} - - component: {fileID: 6284454289005218339} - - component: {fileID: 1086537847153789994} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6437100107920835095 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3454130935971144090} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2663982003649132763} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6284454289005218339 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3454130935971144090} - 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!114 &1086537847153789994 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3454130935971144090} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3898783087936041643 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7897154704365877501} - - component: {fileID: 6228449147410298172} - - component: {fileID: 4280836636826173746} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7897154704365877501 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3898783087936041643} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3941222233485044716} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6228449147410298172 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3898783087936041643} - 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!114 &4280836636826173746 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3898783087936041643} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3964639225872921301 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 637539845580701814} - - component: {fileID: 7436425587198434829} - - component: {fileID: 6700525060216706460} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &637539845580701814 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3964639225872921301} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3941222233485044716} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7436425587198434829 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3964639225872921301} - 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!114 &6700525060216706460 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3964639225872921301} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4716563592700231047 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7260362897674793731} - - component: {fileID: 2706027548567969867} - - component: {fileID: 7715352240993012345} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7260362897674793731 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4716563592700231047} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2663982003649132763} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2706027548567969867 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4716563592700231047} - 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!114 &7715352240993012345 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4716563592700231047} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4988056508895747466 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8275942715230502775} - - component: {fileID: 6227844094304929136} - - component: {fileID: 5729488969396804179} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8275942715230502775 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4988056508895747466} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2663982003649132763} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6227844094304929136 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4988056508895747466} - 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!114 &5729488969396804179 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4988056508895747466} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5317734220437448049 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6138894768765051889} - - component: {fileID: 2253037325002568569} - - component: {fileID: 3924497954232687875} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6138894768765051889 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5317734220437448049} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2663982003649132763} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2253037325002568569 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5317734220437448049} - 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!114 &3924497954232687875 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5317734220437448049} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5650183367954413693 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5556357958807910544} - - component: {fileID: 1017297355348564463} - - component: {fileID: 4970453738998520367} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5556357958807910544 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5650183367954413693} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3941222233485044716} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1017297355348564463 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5650183367954413693} - 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!114 &4970453738998520367 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5650183367954413693} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5702184656346311009 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 849471291557838883} - - component: {fileID: 3071231242112889046} - - component: {fileID: 5610517367505384158} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &849471291557838883 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5702184656346311009} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2663982003649132763} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3071231242112889046 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5702184656346311009} - 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!114 &5610517367505384158 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5702184656346311009} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5900675782290783656 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7492918051886500613} - - component: {fileID: 8586397597204280096} - - component: {fileID: 6905179552806687076} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7492918051886500613 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5900675782290783656} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7609175086083597931} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8586397597204280096 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5900675782290783656} - 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!114 &6905179552806687076 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5900675782290783656} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5959793091492980010 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8746155414772527532} - - component: {fileID: 3326251937821780502} - - component: {fileID: 4502363289579089843} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8746155414772527532 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5959793091492980010} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3941222233485044716} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3326251937821780502 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5959793091492980010} - 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!114 &4502363289579089843 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5959793091492980010} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6059091509271946879 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7410028077886240652} - - component: {fileID: 6619802921616410426} - - component: {fileID: 3547233205433252733} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7410028077886240652 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6059091509271946879} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7609175086083597931} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6619802921616410426 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6059091509271946879} - 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!114 &3547233205433252733 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6059091509271946879} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6119594317193274436 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7005628875725095452} - - component: {fileID: 599173061331899708} - - component: {fileID: 4702746305295464256} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7005628875725095452 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6119594317193274436} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7609175086083597931} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &599173061331899708 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6119594317193274436} - 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!114 &4702746305295464256 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6119594317193274436} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6215384930892668888 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3648876861527312870} - - component: {fileID: 8484575119546861793} - - component: {fileID: 9217185528397109514} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3648876861527312870 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6215384930892668888} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2663982003649132763} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8484575119546861793 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6215384930892668888} - 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!114 &9217185528397109514 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6215384930892668888} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6284763222015399918 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2663982003649132763} - - component: {fileID: 8843161436948570079} - - component: {fileID: 8708099426106020446} - - component: {fileID: 6714511447865869504} - - component: {fileID: 3023480875960690129} - - component: {fileID: 6067816069003065902} - - component: {fileID: 8256506490801433346} - m_Layer: 8 - m_Name: Object002 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2663982003649132763 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6284763222015399918} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00032439828, y: 0.01947017, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8774416134978296769} - - {fileID: 8275942715230502775} - - {fileID: 3648876861527312870} - - {fileID: 6437100107920835095} - - {fileID: 849471291557838883} - - {fileID: 2132635915380767984} - - {fileID: 6138894768765051889} - - {fileID: 7890469299333542652} - - {fileID: 7260362897674793731} - - {fileID: 4130901647371556791} - - {fileID: 6375352792030121072} - - {fileID: 3071182322732771003} - m_Father: {fileID: 1071710130501239585} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8843161436948570079 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6284763222015399918} - m_Mesh: {fileID: -3996760141626369306, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} ---- !u!23 &8708099426106020446 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6284763222015399918} - 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: -1502669387472542646, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - - {fileID: 1038712434395320081, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - - {fileID: 7874494369389819107, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - 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!114 &6714511447865869504 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6284763222015399918} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 4 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &3023480875960690129 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6284763222015399918} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &6067816069003065902 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6284763222015399918} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &8256506490801433346 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6284763222015399918} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -3996760141626369306, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} ---- !u!1 &6574555397029865778 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2132635915380767984} - - component: {fileID: 907141458855717327} - - component: {fileID: 8715546713406234194} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2132635915380767984 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6574555397029865778} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2663982003649132763} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &907141458855717327 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6574555397029865778} - 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!114 &8715546713406234194 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6574555397029865778} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6581765150253272444 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4177785055894792678} - - component: {fileID: 2215483948952356064} - - component: {fileID: 6682388107620341171} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4177785055894792678 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6581765150253272444} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3941222233485044716} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2215483948952356064 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6581765150253272444} - 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!114 &6682388107620341171 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6581765150253272444} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6598199245513538051 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3784896703477772304} - - component: {fileID: 1517246773441232361} - - component: {fileID: 3902991733664238055} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3784896703477772304 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6598199245513538051} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8944868265763290095} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1517246773441232361 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6598199245513538051} - 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!114 &3902991733664238055 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6598199245513538051} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6641069189919000785 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8944868265763290095} - - component: {fileID: 7425263429091578174} - - component: {fileID: 5643558322305890908} - - component: {fileID: 735815891412925547} - - component: {fileID: 3790728813466695533} - - component: {fileID: 2413234644638525048} - - component: {fileID: 2249147828391700241} - m_Layer: 8 - m_Name: Object004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8944868265763290095 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6641069189919000785} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00032439828, y: 0.050849162, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2733150089782890778} - - {fileID: 1564416698603489596} - - {fileID: 3784896703477772304} - - {fileID: 7456204360543332522} - - {fileID: 4661980661295147632} - - {fileID: 4247797533145635545} - - {fileID: 799486906090655901} - - {fileID: 7262294247861484359} - - {fileID: 593441978884827052} - - {fileID: 4475187278428209116} - - {fileID: 4104344727903431686} - - {fileID: 8939681116762374173} - m_Father: {fileID: 1071710130501239585} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7425263429091578174 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6641069189919000785} - m_Mesh: {fileID: -8113768720884857512, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} ---- !u!23 &5643558322305890908 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6641069189919000785} - 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: -1502669387472542646, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - - {fileID: 1038712434395320081, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - - {fileID: 7874494369389819107, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - 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!114 &735815891412925547 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6641069189919000785} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 3 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &3790728813466695533 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6641069189919000785} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &2413234644638525048 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6641069189919000785} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &2249147828391700241 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6641069189919000785} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -8113768720884857512, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} ---- !u!1 &6824835293151218778 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2260636476378701814} - - component: {fileID: 6301171874474867400} - - component: {fileID: 5393400092636820738} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2260636476378701814 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6824835293151218778} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7609175086083597931} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6301171874474867400 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6824835293151218778} - 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!114 &5393400092636820738 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6824835293151218778} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7046960863412136980 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4130901647371556791} - - component: {fileID: 3635763587023906017} - - component: {fileID: 7306008909488095647} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4130901647371556791 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7046960863412136980} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2663982003649132763} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3635763587023906017 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7046960863412136980} - 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!114 &7306008909488095647 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7046960863412136980} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7150492463040497306 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3941222233485044716} - - component: {fileID: 4054898529955224526} - - component: {fileID: 8202061529929625595} - - component: {fileID: 2398457148180202808} - - component: {fileID: 2163713791359872200} - - component: {fileID: 8004665818294491418} - - component: {fileID: 224325665297338396} - m_Layer: 8 - m_Name: Object006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3941222233485044716 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7150492463040497306} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00032439828, y: 0.08222815, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4177785055894792678} - - {fileID: 637539845580701814} - - {fileID: 4342928240191356439} - - {fileID: 7189355933721365836} - - {fileID: 4094169265495799651} - - {fileID: 2042979059738233013} - - {fileID: 2751865697753465479} - - {fileID: 5173933429374944010} - - {fileID: 7897154704365877501} - - {fileID: 5556357958807910544} - - {fileID: 8746155414772527532} - - {fileID: 4421952798411371204} - m_Father: {fileID: 1071710130501239585} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4054898529955224526 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7150492463040497306} - m_Mesh: {fileID: -2639241166356525208, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} ---- !u!23 &8202061529929625595 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7150492463040497306} - 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: -1502669387472542646, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - - {fileID: 1038712434395320081, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - - {fileID: 7874494369389819107, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - 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!114 &2398457148180202808 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7150492463040497306} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &2163713791359872200 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7150492463040497306} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &8004665818294491418 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7150492463040497306} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &224325665297338396 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7150492463040497306} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -2639241166356525208, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} ---- !u!1 &7152236031808668954 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4094169265495799651} - - component: {fileID: 6727288491493014742} - - component: {fileID: 6210434339803481702} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4094169265495799651 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7152236031808668954} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3941222233485044716} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6727288491493014742 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7152236031808668954} - 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!114 &6210434339803481702 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7152236031808668954} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7331720940658938171 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5713233282471021779} - - component: {fileID: 8734612344804870077} - - component: {fileID: 3081698257949004780} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5713233282471021779 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7331720940658938171} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200008, z: -0.005702855} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7609175086083597931} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8734612344804870077 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7331720940658938171} - 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!114 &3081698257949004780 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7331720940658938171} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7435087438330921890 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7262294247861484359} - - component: {fileID: 5798581746998921169} - - component: {fileID: 3193081429631761445} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7262294247861484359 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7435087438330921890} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8944868265763290095} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5798581746998921169 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7435087438330921890} - 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!114 &3193081429631761445 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7435087438330921890} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7544373248158418108 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2042979059738233013} - - component: {fileID: 7813951870921410890} - - component: {fileID: 4188929584998825565} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2042979059738233013 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7544373248158418108} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3941222233485044716} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7813951870921410890 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7544373248158418108} - 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!114 &4188929584998825565 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7544373248158418108} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7630126391632163153 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7609175086083597931} - - component: {fileID: 4804386149645058000} - - component: {fileID: 9162328191412379914} - - component: {fileID: 5991857882556382096} - - component: {fileID: 831919449690604185} - - component: {fileID: 7251994372976545797} - - component: {fileID: 6118180147182018761} - m_Layer: 8 - m_Name: Object005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7609175086083597931 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7630126391632163153} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00032439828, y: 0.11360714, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 844876372505134707} - - {fileID: 1041919781915465083} - - {fileID: 7005628875725095452} - - {fileID: 2260636476378701814} - - {fileID: 3251584164532586522} - - {fileID: 810700515709668852} - - {fileID: 2967302151665173950} - - {fileID: 6694733122297585450} - - {fileID: 7492918051886500613} - - {fileID: 669148409282739165} - - {fileID: 5713233282471021779} - - {fileID: 7410028077886240652} - m_Father: {fileID: 1071710130501239585} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4804386149645058000 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7630126391632163153} - m_Mesh: {fileID: 9186633843763367028, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} ---- !u!23 &9162328191412379914 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7630126391632163153} - 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: -1502669387472542646, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - - {fileID: 1038712434395320081, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - - {fileID: 7874494369389819107, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - 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!114 &5991857882556382096 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7630126391632163153} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &831919449690604185 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7630126391632163153} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &7251994372976545797 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7630126391632163153} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &6118180147182018761 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7630126391632163153} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 9186633843763367028, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} ---- !u!1 &8041711478253874885 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7890469299333542652} - - component: {fileID: 8175331229989928274} - - component: {fileID: 6195221407798050581} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7890469299333542652 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8041711478253874885} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014170008, z: -0.0052935667} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2663982003649132763} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8175331229989928274 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8041711478253874885} - 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!114 &6195221407798050581 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8041711478253874885} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8218169356500219424 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4104344727903431686} - - component: {fileID: 3646101419844137382} - - component: {fileID: 2035780742214423825} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4104344727903431686 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8218169356500219424} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8944868265763290095} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3646101419844137382 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8218169356500219424} - 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!114 &2035780742214423825 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8218169356500219424} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8496620705600847919 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 593441978884827052} - - component: {fileID: 3389811980422081264} - - component: {fileID: 5664177728839955349} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &593441978884827052 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8496620705600847919} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8944868265763290095} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3389811980422081264 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8496620705600847919} - 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!114 &5664177728839955349 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8496620705600847919} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8581476801900875992 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4475187278428209116} - - component: {fileID: 3020237199697320705} - - component: {fileID: 3990245048252241178} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4475187278428209116 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8581476801900875992} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8944868265763290095} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3020237199697320705 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8581476801900875992} - 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!114 &3990245048252241178 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8581476801900875992} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8627083810371438831 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2751865697753465479} - - component: {fileID: 8346096306569353781} - - component: {fileID: 5505823653875108046} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2751865697753465479 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8627083810371438831} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3941222233485044716} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8346096306569353781 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8627083810371438831} - 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!114 &5505823653875108046 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8627083810371438831} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8656519439687426553 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1564416698603489596} - - component: {fileID: 7613460954974786380} - - component: {fileID: 5654865707985558323} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1564416698603489596 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8656519439687426553} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8944868265763290095} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7613460954974786380 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8656519439687426553} - 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!114 &5654865707985558323 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8656519439687426553} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8669950526706973773 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7189355933721365836} - - component: {fileID: 1674350944122524385} - - component: {fileID: 3099985895926222577} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7189355933721365836 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8669950526706973773} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014200018, z: -0.006223876} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3941222233485044716} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1674350944122524385 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8669950526706973773} - 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!114 &3099985895926222577 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8669950526706973773} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8670397815957334071 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3226779144884642767} - - component: {fileID: 2204913250126093883} - - component: {fileID: 8343038839491570481} - m_Layer: 8 - m_Name: Object001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3226779144884642767 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8670397815957334071} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: -0.012468863} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2013143303726408118} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2204913250126093883 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8670397815957334071} - m_Mesh: {fileID: -3292925553009838691, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} ---- !u!23 &8343038839491570481 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8670397815957334071} - 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: 1368039103165038143, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - - {fileID: -5956578104803850452, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - - {fileID: 9077612666303962245, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - - {fileID: -6307277589567570940, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - - {fileID: -8757356216087587297, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - - {fileID: -4532057987183913879, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - - {fileID: 6012098043614753949, guid: ccb3dc4fa701b9a428ebe9be3a67a205, type: 3} - 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!1 &8745850780255574160 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4247797533145635545} - - component: {fileID: 2681041803694283313} - - component: {fileID: 1321128942890394504} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4247797533145635545 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8745850780255574160} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8944868265763290095} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2681041803694283313 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8745850780255574160} - 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!114 &1321128942890394504 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8745850780255574160} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8901004388174306055 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4661980661295147632} - - component: {fileID: 4337537144874559008} - - component: {fileID: 7338904728756895833} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4661980661295147632 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8901004388174306055} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8944868265763290095} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4337537144874559008 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8901004388174306055} - 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!114 &7338904728756895833 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8901004388174306055} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9007221486930996404 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 799486906090655901} - - component: {fileID: 7873637969403193883} - - component: {fileID: 8742554467291232951} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &799486906090655901 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9007221486930996404} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014200008, z: -0.005672654} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8944868265763290095} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7873637969403193883 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9007221486930996404} - 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!114 &8742554467291232951 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9007221486930996404} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/21.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/21.prefab.meta deleted file mode 100644 index 43cca986c..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/21.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 8f2410996c3c3324e842dfcd42c4770d -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/22.prefab b/GQ_URP/GQ/Assets/prefab/老模型/22.prefab deleted file mode 100644 index 4f1199b9e..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/22.prefab +++ /dev/null @@ -1,1464 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &1204298854213913366 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4474284299364313106} - - component: {fileID: 7308596037025705656} - - component: {fileID: 527679283689322155} - m_Layer: 8 - m_Name: Line027 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4474284299364313106 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1204298854213913366} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2635541, y: 0.08396393, z: 0.043502152} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3817985149331579237} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7308596037025705656 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1204298854213913366} - m_Mesh: {fileID: -5678409635869727515, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} ---- !u!23 &527679283689322155 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1204298854213913366} - 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: -6241476808667166444, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} - 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!1 &1614586315116731439 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1199999656748129308} - - component: {fileID: 5796750918362544953} - - component: {fileID: 4256365583210405268} - m_Layer: 8 - m_Name: Line026 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1199999656748129308 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1614586315116731439} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.28717744, y: 0.08396393, z: 0.043502152} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3817985149331579237} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5796750918362544953 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1614586315116731439} - m_Mesh: {fileID: 901503930091743798, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} ---- !u!23 &4256365583210405268 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1614586315116731439} - 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: -6241476808667166444, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} - 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!1 &1888636508644061214 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2762449726444175818} - - component: {fileID: 1207582721118510333} - - component: {fileID: 1833733051677909706} - m_Layer: 8 - m_Name: Object003 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2762449726444175818 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1888636508644061214} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.23059586, y: 0.11685586, z: 0.036379002} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3817985149331579237} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1207582721118510333 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1888636508644061214} - m_Mesh: {fileID: -3531946766418785785, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} ---- !u!23 &1833733051677909706 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1888636508644061214} - 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: 5629084884208175553, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} - 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!1 &2108615064501074824 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3709252854082984127} - - component: {fileID: 5217344570664844907} - - component: {fileID: 6135522852596715291} - m_Layer: 8 - m_Name: Line022 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3709252854082984127 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2108615064501074824} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.26777405, y: 0.08396393, z: 0.043502152} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3817985149331579237} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5217344570664844907 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2108615064501074824} - m_Mesh: {fileID: -7965038811038983531, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} ---- !u!23 &6135522852596715291 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2108615064501074824} - 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: -6241476808667166444, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} - 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!1 &2541441386355747957 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5623938792536185715} - - component: {fileID: 4964364018379453858} - - component: {fileID: 1177153337892305966} - m_Layer: 8 - m_Name: Line030 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5623938792536185715 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2541441386355747957} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.19268419, y: 0.08396393, z: 0.043502152} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3817985149331579237} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4964364018379453858 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2541441386355747957} - m_Mesh: {fileID: -4882779569204714280, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} ---- !u!23 &1177153337892305966 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2541441386355747957} - 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: -6241476808667166444, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} - 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!1 &2839455552455948595 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7748649972242971845} - - component: {fileID: 7531286648369052221} - - component: {fileID: 5118241255522562317} - m_Layer: 8 - m_Name: Line023 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7748649972242971845 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2839455552455948595} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.22052743, y: 0.08396393, z: 0.043502152} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3817985149331579237} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7531286648369052221 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2839455552455948595} - m_Mesh: {fileID: 2900405850192849808, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} ---- !u!23 &5118241255522562317 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2839455552455948595} - 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: -6241476808667166444, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} - 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!1 &2972504109959221705 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5996795372504375913} - - component: {fileID: 5310608891211351193} - - component: {fileID: 4907183092010213555} - m_Layer: 8 - m_Name: Line012 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5996795372504375913 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2972504109959221705} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.24415074, y: 0.08396393, z: 0.043502152} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3817985149331579237} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5310608891211351193 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2972504109959221705} - m_Mesh: {fileID: 1263235930235354705, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} ---- !u!23 &4907183092010213555 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2972504109959221705} - 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: -6241476808667166444, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} - 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!1 &3587136117409055700 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8571587884943467355} - - component: {fileID: 6973344090525569996} - - component: {fileID: 8002168036622503433} - m_Layer: 8 - m_Name: Line025 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8571587884943467355 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3587136117409055700} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.19690411, y: 0.08396393, z: 0.043502152} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3817985149331579237} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6973344090525569996 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3587136117409055700} - m_Mesh: {fileID: -1039670040585922492, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} ---- !u!23 &8002168036622503433 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3587136117409055700} - 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: -6241476808667166444, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} - 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!1 &4591391161348815839 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3817985149331579237} - - component: {fileID: 5666170133405963740} - - component: {fileID: 7722835073870174891} - - component: {fileID: 3527654527032786780} - - component: {fileID: -5434948012324996701} - - component: {fileID: -2149029675562991087} - m_Layer: 8 - m_Name: 22 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3817985149331579237 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4591391161348815839} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 850081785665065126} - - {fileID: 1844912437371455433} - - {fileID: 5996795372504375913} - - {fileID: 3709252854082984127} - - {fileID: 7748649972242971845} - - {fileID: 1071670576744269366} - - {fileID: 8571587884943467355} - - {fileID: 1199999656748129308} - - {fileID: 4474284299364313106} - - {fileID: 1191064674429689857} - - {fileID: 6816928635548776470} - - {fileID: 5623938792536185715} - - {fileID: 6301836687463120784} - - {fileID: 2223391079705402015} - - {fileID: 2762449726444175818} - - {fileID: 6004106015434788307} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &5666170133405963740 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4591391161348815839} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 22 - occupyNum: 3 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7722835073870174891 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4591391161348815839} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 3 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &3527654527032786780 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4591391161348815839} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &-5434948012324996701 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4591391161348815839} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &-2149029675562991087 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4591391161348815839} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 3 - selfIcon: {fileID: 21300000, guid: 654599697374b994483a9ab782d2febc, type: 3} ---- !u!1 &4697866385083606235 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1844912437371455433} - - component: {fileID: 6407240659788150596} - - component: {fileID: 9136744526886962889} - m_Layer: 8 - m_Name: Line010 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1844912437371455433 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4697866385083606235} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.29139733, y: 0.08396393, z: 0.043502152} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3817985149331579237} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6407240659788150596 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4697866385083606235} - m_Mesh: {fileID: -4233957156868394210, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} ---- !u!23 &9136744526886962889 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4697866385083606235} - 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: -6241476808667166444, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} - 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!1 &4941829500784758427 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1191064674429689857} - - component: {fileID: 92238847541569881} - - component: {fileID: 7238665814184219909} - m_Layer: 8 - m_Name: Line028 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1191064674429689857 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4941829500784758427} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.23993082, y: 0.08396393, z: 0.043502152} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3817985149331579237} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &92238847541569881 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4941829500784758427} - m_Mesh: {fileID: 4972956607147867693, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} ---- !u!23 &7238665814184219909 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4941829500784758427} - 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: -6241476808667166444, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} - 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!1 &5757753293234358218 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1071670576744269366} - - component: {fileID: 1572341579625282599} - - component: {fileID: 3224358124751323259} - m_Layer: 8 - m_Name: Line024 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1071670576744269366 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5757753293234358218} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.17328079, y: 0.08396393, z: 0.043502152} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3817985149331579237} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1572341579625282599 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5757753293234358218} - m_Mesh: {fileID: -8202766422458954681, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} ---- !u!23 &3224358124751323259 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5757753293234358218} - 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: -6241476808667166444, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} - 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!1 &5993363270583793454 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6301836687463120784} - - component: {fileID: 947315125000023229} - - component: {fileID: 614005367821734780} - m_Layer: 8 - m_Name: Line031 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6301836687463120784 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5993363270583793454} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.1690609, y: 0.08396393, z: 0.043502152} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3817985149331579237} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &947315125000023229 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5993363270583793454} - m_Mesh: {fileID: 648714052394000240, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} ---- !u!23 &614005367821734780 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5993363270583793454} - 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: -6241476808667166444, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} - 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!1 &7264948405671745094 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6816928635548776470} - - component: {fileID: 4398229450756354242} - - component: {fileID: 3165647751366476305} - m_Layer: 8 - m_Name: Line029 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6816928635548776470 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7264948405671745094} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.21630749, y: 0.08396393, z: 0.043502152} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3817985149331579237} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4398229450756354242 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7264948405671745094} - m_Mesh: {fileID: 6942693937602033683, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} ---- !u!23 &3165647751366476305 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7264948405671745094} - 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: -6241476808667166444, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} - 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!1 &7860110893541766570 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2223391079705402015} - - component: {fileID: 4655164650799136155} - - component: {fileID: 4826220145305448474} - m_Layer: 8 - m_Name: Object002 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2223391079705402015 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7860110893541766570} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.22986236, y: 0.11685586, z: 0.036379002} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3817985149331579237} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4655164650799136155 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7860110893541766570} - m_Mesh: {fileID: -3996760141626369306, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} ---- !u!23 &4826220145305448474 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7860110893541766570} - 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: 5629084884208175553, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} - 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!1 &8805660809537290882 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6004106015434788307} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6004106015434788307 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8805660809537290882} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: -0.13500002, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3817985149331579237} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &9020872830200849659 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 850081785665065126} - - component: {fileID: 8873081101165174930} - - component: {fileID: 4584552034048821199} - m_Layer: 8 - m_Name: 004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &850081785665065126 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9020872830200849659} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0, z: 0.03637901} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3817985149331579237} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8873081101165174930 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9020872830200849659} - m_Mesh: {fileID: -3999620213147085586, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} ---- !u!23 &4584552034048821199 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9020872830200849659} - 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: 5891731549465618853, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} - - {fileID: -1588453083840216184, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} - - {fileID: 341871791566095513, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} - - {fileID: -858402088400292277, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} - - {fileID: 4047898098337697806, guid: a5402eb0adfb6ad418a30200634860e8, type: 3} - 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} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/22.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/22.prefab.meta deleted file mode 100644 index a4b5ba50d..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/22.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: c4d0cf29bd966c44a813ccb00b7e49ba -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/23.prefab b/GQ_URP/GQ/Assets/prefab/老模型/23.prefab deleted file mode 100644 index 29ea60ca5..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/23.prefab +++ /dev/null @@ -1,4757 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &168468489671058162 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4619218382826778794} - - component: {fileID: 8543700706015697300} - - component: {fileID: 560749768487506882} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4619218382826778794 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 168468489671058162} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0008, y: -0.0271, z: 0.0388} - m_LocalScale: {x: 0.014909456, y: 0.014909456, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5347605361330900549} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8543700706015697300 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 168468489671058162} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &560749768487506882 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 168468489671058162} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &363260366991406049 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1826795502977108938} - - component: {fileID: 1809220182443987922} - - component: {fileID: 6791368122697301061} - m_Layer: 11 - m_Name: Cube (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1826795502977108938 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 363260366991406049} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0006, y: -0.0271, z: -0.0136} - m_LocalScale: {x: 0.014909456, y: 0.014909459, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7548384941592363267} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1809220182443987922 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 363260366991406049} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6791368122697301061 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 363260366991406049} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &487833479999816536 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6079609558784130437} - - component: {fileID: 1369368508632419356} - - component: {fileID: 8012627950151828316} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6079609558784130437 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 487833479999816536} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0002, y: -0.0271, z: -0.0781} - m_LocalScale: {x: 0.014909456, y: 0.0149094565, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2789348484022474289} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1369368508632419356 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 487833479999816536} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8012627950151828316 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 487833479999816536} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &578650955572369014 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 237590542595427532} - - component: {fileID: 2512589053494032801} - - component: {fileID: 2912547072584549503} - - component: {fileID: 3068434722886483931} - - component: {fileID: -7198169641144091595} - - component: {fileID: 2466395454596997930} - m_Layer: 8 - m_Name: 23 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &237590542595427532 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 578650955572369014} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 6224091810539468153} - - {fileID: 9072647203423384494} - - {fileID: 7122324946408642897} - - {fileID: 1540001348011641089} - - {fileID: 753753998031354800} - - {fileID: 155658984052564461} - - {fileID: 961794684800779872} - - {fileID: 4907919541290560585} - - {fileID: 5347605361330900549} - - {fileID: 8330497240215467299} - - {fileID: 2789348484022474289} - - {fileID: 7141558718744499289} - - {fileID: 5648247937879601467} - - {fileID: 1466735589309927300} - - {fileID: 6568881656905486756} - - {fileID: 2016334115872335876} - - {fileID: 4224493554898641858} - - {fileID: 7548384941592363267} - - {fileID: 3485654130007919222} - - {fileID: 1552724374860861863} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &2512589053494032801 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 578650955572369014} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 23 - occupyNum: 20 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &2912547072584549503 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 578650955572369014} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 20 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &3068434722886483931 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 578650955572369014} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &-7198169641144091595 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 578650955572369014} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &2466395454596997930 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 578650955572369014} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 20 - selfIcon: {fileID: 21300000, guid: 74715981606f8e845b2e4682912353e6, type: 3} ---- !u!1 &591786964259300812 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7761066249808243461} - - component: {fileID: 6413938370309338014} - - component: {fileID: 5779676626474704773} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7761066249808243461 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 591786964259300812} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0011, y: -0.027100004, z: 0.036900014} - m_LocalScale: {x: 0.014909456, y: 0.01490946, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3485654130007919222} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6413938370309338014 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 591786964259300812} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5779676626474704773 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 591786964259300812} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &779186338784501696 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6362333336978645985} - - component: {fileID: 8514366702094037565} - - component: {fileID: 690932950458398435} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6362333336978645985 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 779186338784501696} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0008, y: -0.0271, z: -0.0583} - m_LocalScale: {x: 0.014909456, y: 0.014909456, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5347605361330900549} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8514366702094037565 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 779186338784501696} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &690932950458398435 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 779186338784501696} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &849683607403744682 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1552724374860861863} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1552724374860861863 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 849683607403744682} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: -0.9000002, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 237590542595427532} - m_RootOrder: 19 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &906709137774467523 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2456955249202831185} - - component: {fileID: 4561784984757344941} - - component: {fileID: 5948763881266078380} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2456955249202831185 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 906709137774467523} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0021, y: -0.0271, z: 0.0828} - m_LocalScale: {x: 0.014909456, y: 0.0149094565, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4224493554898641858} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4561784984757344941 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 906709137774467523} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5948763881266078380 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 906709137774467523} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1120750163159595740 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8330497240215467299} - - component: {fileID: 5023745955092394521} - - component: {fileID: 5220641911410307972} - m_Layer: 8 - m_Name: Box234 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8330497240215467299 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1120750163159595740} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.07508307, y: 0.26294157, z: -0.06132862} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 237590542595427532} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5023745955092394521 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1120750163159595740} - m_Mesh: {fileID: -3893333606532900248, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!23 &5220641911410307972 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1120750163159595740} - 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: -6257702196253466788, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6538121952294311303, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6307277589567570940, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 3925418980499852262, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6745765165549875252, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 762489874720995619, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -1987490652388691751, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 7381587766209216910, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - 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!1 &1302402756089957021 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 392387090903467667} - - component: {fileID: 7303329123971134128} - - component: {fileID: 6176843645491342891} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &392387090903467667 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1302402756089957021} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0008, y: -0.0271, z: -0.0341} - m_LocalScale: {x: 0.014909456, y: 0.014909456, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5347605361330900549} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7303329123971134128 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1302402756089957021} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6176843645491342891 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1302402756089957021} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1413626405770987854 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1540001348011641089} - - component: {fileID: 5396766640776246729} - - component: {fileID: 114754151929036492} - m_Layer: 8 - m_Name: Box228 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1540001348011641089 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1413626405770987854} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.2941574, y: 0.26294157, z: -0.06132862} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 237590542595427532} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5396766640776246729 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1413626405770987854} - m_Mesh: {fileID: 4004825908086979078, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!23 &114754151929036492 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1413626405770987854} - 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: -6257702196253466788, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -1987490652388691751, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6307277589567570940, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 3925418980499852262, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 7381587766209216910, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - 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!1 &1571130572819055307 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2789348484022474289} - - component: {fileID: 3274216336500773902} - - component: {fileID: 3672358538784017618} - - component: {fileID: 2312599181579885588} - - component: {fileID: 403217633806035604} - - component: {fileID: 1531173589951647725} - - component: {fileID: 8518117870605367272} - m_Layer: 8 - m_Name: Box235 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2789348484022474289 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1571130572819055307} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.03853161, y: 0.26294157, z: -0.06132862} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4680721144811276840} - - {fileID: 6079609558784130437} - m_Father: {fileID: 237590542595427532} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3274216336500773902 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1571130572819055307} - m_Mesh: {fileID: -4992541086646476197, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!23 &3672358538784017618 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1571130572819055307} - 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: -6257702196253466788, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6538121952294311303, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6307277589567570940, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 3925418980499852262, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 762489874720995619, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6745765165549875252, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -1987490652388691751, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 7381587766209216910, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - 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!114 &2312599181579885588 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1571130572819055307} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &403217633806035604 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1571130572819055307} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &1531173589951647725 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1571130572819055307} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &8518117870605367272 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1571130572819055307} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -4992541086646476197, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!1 &1632694375242540696 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3485654130007919222} - - component: {fileID: 2138522386082861967} - - component: {fileID: 671619540063469499} - - component: {fileID: 540069627651786539} - - component: {fileID: 2923490115461787484} - - component: {fileID: 961272285029050981} - - component: {fileID: 5437688251064145197} - m_Layer: 8 - m_Name: Box248 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3485654130007919222 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1632694375242540696} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.256612, y: 0.26294157, z: -0.06132862} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 7761066249808243461} - - {fileID: 7727706016838591096} - m_Father: {fileID: 237590542595427532} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2138522386082861967 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1632694375242540696} - m_Mesh: {fileID: 2980456807618490295, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!23 &671619540063469499 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1632694375242540696} - 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: -6257702196253466788, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6538121952294311303, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6307277589567570940, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 3925418980499852262, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 762489874720995619, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -1987490652388691751, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 7381587766209216910, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - 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!114 &540069627651786539 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1632694375242540696} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &2923490115461787484 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1632694375242540696} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 7 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &961272285029050981 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1632694375242540696} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &5437688251064145197 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1632694375242540696} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 2980456807618490295, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!1 &1663078694083504503 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 94656316679850305} - - component: {fileID: 1718670866926498833} - - component: {fileID: 3454115733903853128} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &94656316679850305 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1663078694083504503} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0021, y: -0.0271, z: -0.0143} - m_LocalScale: {x: 0.014909456, y: 0.0149094565, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4224493554898641858} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1718670866926498833 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1663078694083504503} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3454115733903853128 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1663078694083504503} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1884385067454964814 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 931719380986876685} - - component: {fileID: 101840879487749514} - - component: {fileID: 8675732146529196497} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &931719380986876685 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1884385067454964814} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0021, y: -0.0271, z: 0.019} - m_LocalScale: {x: 0.014909456, y: 0.0149094565, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4224493554898641858} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &101840879487749514 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1884385067454964814} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8675732146529196497 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1884385067454964814} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1894743515069190216 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7141558718744499289} - - component: {fileID: 6347364450863757379} - - component: {fileID: 4115466431544924270} - m_Layer: 8 - m_Name: Box238 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7141558718744499289 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1894743515069190216} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.14725822, y: 0.26294157, z: -0.06132862} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 237590542595427532} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6347364450863757379 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1894743515069190216} - m_Mesh: {fileID: 5986379873229659198, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!23 &4115466431544924270 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1894743515069190216} - 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: -6257702196253466788, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -1987490652388691751, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6307277589567570940, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 3925418980499852262, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 7381587766209216910, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - 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!1 &2181934875086725324 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5648247937879601467} - - component: {fileID: 3822436840226037085} - - component: {fileID: 2123203694946127285} - - component: {fileID: 6256389912640553608} - - component: {fileID: 1061826696963239048} - - component: {fileID: 6011969056683627568} - - component: {fileID: 6610309441030366751} - m_Layer: 8 - m_Name: Box239 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5648247937879601467 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2181934875086725324} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.18387234, y: 0.26294157, z: -0.06132862} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8073995168129665773} - - {fileID: 8238367080224119719} - m_Father: {fileID: 237590542595427532} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3822436840226037085 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2181934875086725324} - m_Mesh: {fileID: -53276876386812347, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!23 &2123203694946127285 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2181934875086725324} - 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: -6257702196253466788, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6538121952294311303, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6307277589567570940, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 3925418980499852262, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 762489874720995619, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -1987490652388691751, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 7381587766209216910, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - 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!114 &6256389912640553608 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2181934875086725324} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1061826696963239048 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2181934875086725324} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 5 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &6011969056683627568 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2181934875086725324} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &6610309441030366751 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2181934875086725324} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -53276876386812347, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!1 &2393553373050180581 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6286747678399731581} - - component: {fileID: 7984233897120338794} - - component: {fileID: 8570377934043857934} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6286747678399731581 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2393553373050180581} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0021, y: -0.0271, z: 0.063} - m_LocalScale: {x: 0.014909456, y: 0.0149094565, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4224493554898641858} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7984233897120338794 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2393553373050180581} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8570377934043857934 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2393553373050180581} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2435242103613018417 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 753753998031354800} - - component: {fileID: 8333590046126540766} - - component: {fileID: 2771003607635225064} - m_Layer: 8 - m_Name: Box229 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &753753998031354800 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2435242103613018417} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.25757018, y: 0.26294157, z: -0.06132862} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 237590542595427532} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8333590046126540766 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2435242103613018417} - m_Mesh: {fileID: 3463139692731221919, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!23 &2771003607635225064 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2435242103613018417} - 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: -6257702196253466788, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -1987490652388691751, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6307277589567570940, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 3925418980499852262, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 7381587766209216910, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - 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!1 &2802649859926697195 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1466735589309927300} - - component: {fileID: 5034858383881616200} - - component: {fileID: 2849006876781729473} - m_Layer: 8 - m_Name: Box243 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1466735589309927300 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2802649859926697195} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.29313487, y: 0.26294157, z: -0.06132862} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 237590542595427532} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5034858383881616200 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2802649859926697195} - m_Mesh: {fileID: 3375562416416583178, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!23 &2849006876781729473 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2802649859926697195} - 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: -6257702196253466788, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -1987490652388691751, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6307277589567570940, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 3925418980499852262, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 7381587766209216910, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - 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!1 &2995991302880088507 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6599495497725194041} - - component: {fileID: 3505985818454463008} - - component: {fileID: 3100151783625906977} - m_Layer: 11 - m_Name: Cube (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6599495497725194041 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2995991302880088507} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0021, y: -0.0271, z: -0.0781} - m_LocalScale: {x: 0.014909456, y: 0.0149094565, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4224493554898641858} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3505985818454463008 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2995991302880088507} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3100151783625906977 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2995991302880088507} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3306686466940256521 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5279432725612474290} - - component: {fileID: 1281647324004765898} - - component: {fileID: 652301083116570445} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5279432725612474290 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3306686466940256521} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0008, y: -0.0271, z: -0.0781} - m_LocalScale: {x: 0.014909456, y: 0.014909456, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5347605361330900549} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1281647324004765898 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3306686466940256521} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &652301083116570445 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3306686466940256521} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3421707225408279036 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4224493554898641858} - - component: {fileID: 4424035731454936706} - - component: {fileID: 7922151379143156773} - - component: {fileID: 7902188224853993809} - - component: {fileID: 8160804355760027524} - - component: {fileID: 667240532232666574} - - component: {fileID: 3248051904050632732} - m_Layer: 8 - m_Name: Box246 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4224493554898641858 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3421707225408279036} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.11051345, y: 0.26294157, z: -0.06132862} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2456955249202831185} - - {fileID: 6286747678399731581} - - {fileID: 9026858322902506435} - - {fileID: 931719380986876685} - - {fileID: 94656316679850305} - - {fileID: 1105868353084956109} - - {fileID: 7998345082579482344} - - {fileID: 6599495497725194041} - m_Father: {fileID: 237590542595427532} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4424035731454936706 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3421707225408279036} - m_Mesh: {fileID: 8032957209167335391, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!23 &7922151379143156773 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3421707225408279036} - 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: -6257702196253466788, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6538121952294311303, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6307277589567570940, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 3925418980499852262, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 762489874720995619, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6745765165549875252, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -1987490652388691751, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 7381587766209216910, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - 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!114 &7902188224853993809 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3421707225408279036} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &8160804355760027524 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3421707225408279036} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 4 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &667240532232666574 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3421707225408279036} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &3248051904050632732 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3421707225408279036} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 8032957209167335391, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!1 &4140689074288729271 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 961794684800779872} - - component: {fileID: 475455511819539738} - - component: {fileID: 7713535153980664089} - m_Layer: 8 - m_Name: Box231 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &961794684800779872 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4140689074288729271} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1843456, y: 0.26294157, z: -0.06132862} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 237590542595427532} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &475455511819539738 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4140689074288729271} - m_Mesh: {fileID: 7696531369679630343, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!23 &7713535153980664089 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4140689074288729271} - 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: -6257702196253466788, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -1987490652388691751, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6307277589567570940, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 3925418980499852262, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 7381587766209216910, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - 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!1 &4207934141845838000 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3920414786018594885} - - component: {fileID: 1301257666485605405} - - component: {fileID: 8817364377642869977} - m_Layer: 11 - m_Name: Cube (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3920414786018594885 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4207934141845838000} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0006, y: -0.0271, z: 0.0369} - m_LocalScale: {x: 0.014909456, y: 0.014909459, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7548384941592363267} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1301257666485605405 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4207934141845838000} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8817364377642869977 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4207934141845838000} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4243737507728969232 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7409863593949329997} - - component: {fileID: 7767784208264706739} - - component: {fileID: 3992434856316882538} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7409863593949329997 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4243737507728969232} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0008, y: -0.0271, z: 0.0828} - m_LocalScale: {x: 0.014909456, y: 0.014909456, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5347605361330900549} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7767784208264706739 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4243737507728969232} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3992434856316882538 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4243737507728969232} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4473131707398862526 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 155658984052564461} - - component: {fileID: 234595566790525928} - - component: {fileID: 4973235816386877359} - m_Layer: 8 - m_Name: Box230 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &155658984052564461 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4473131707398862526} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.22095972, y: 0.26294157, z: -0.06132862} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 237590542595427532} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &234595566790525928 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4473131707398862526} - m_Mesh: {fileID: -4263424352264704495, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!23 &4973235816386877359 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4473131707398862526} - 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: -6257702196253466788, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -1987490652388691751, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6307277589567570940, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 3925418980499852262, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 7381587766209216910, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - 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!1 &4492999276754466155 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9026858322902506435} - - component: {fileID: 1328325603825136658} - - component: {fileID: 82501708724991737} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9026858322902506435 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4492999276754466155} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0021, y: -0.0271, z: 0.0388} - m_LocalScale: {x: 0.014909456, y: 0.0149094565, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4224493554898641858} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1328325603825136658 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4492999276754466155} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &82501708724991737 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4492999276754466155} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4623644975616549281 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3352469838962934897} - - component: {fileID: 8990772265011936365} - - component: {fileID: 8398710559219703661} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3352469838962934897 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4623644975616549281} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.003, y: -0.0271, z: -0.0781} - m_LocalScale: {x: 0.014909456, y: 0.014909457, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6568881656905486756} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8990772265011936365 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4623644975616549281} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8398710559219703661 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4623644975616549281} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4812794979325082082 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7122324946408642897} - - component: {fileID: 7110856354095814643} - - component: {fileID: 8974452396207423257} - m_Layer: 8 - m_Name: Box221 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7122324946408642897 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4812794979325082082} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0011672676, y: 0.8071027, z: -0.528} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 237590542595427532} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7110856354095814643 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4812794979325082082} - m_Mesh: {fileID: -2641816765375938631, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!23 &8974452396207423257 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4812794979325082082} - 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: -1987490652388691751, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -3335680333963332101, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - 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!1 &4862851430647439278 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7727706016838591096} - - component: {fileID: 9187757341326067758} - - component: {fileID: 2125910404199379477} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7727706016838591096 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4862851430647439278} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0011, y: -0.0271, z: -0.0136} - m_LocalScale: {x: 0.014909456, y: 0.01490946, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3485654130007919222} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9187757341326067758 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4862851430647439278} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2125910404199379477 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4862851430647439278} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5123706063471989086 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5347605361330900549} - - component: {fileID: 6968084662478382782} - - component: {fileID: 3482767905434543558} - - component: {fileID: 9003332696874702876} - - component: {fileID: 2439328012817118033} - - component: {fileID: 2634951813462116861} - - component: {fileID: 3373124505296719148} - m_Layer: 8 - m_Name: Box233 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5347605361330900549 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5123706063471989086} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.111294635, y: 0.26294157, z: -0.06132862} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 7409863593949329997} - - {fileID: 2687599434852797231} - - {fileID: 4619218382826778794} - - {fileID: 2564266443356931981} - - {fileID: 7313407188378153463} - - {fileID: 392387090903467667} - - {fileID: 6362333336978645985} - - {fileID: 5279432725612474290} - m_Father: {fileID: 237590542595427532} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6968084662478382782 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5123706063471989086} - m_Mesh: {fileID: 7234011661977481624, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!23 &3482767905434543558 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5123706063471989086} - 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: -6257702196253466788, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6538121952294311303, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6307277589567570940, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 3925418980499852262, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 762489874720995619, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6745765165549875252, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -1987490652388691751, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 7381587766209216910, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - 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!114 &9003332696874702876 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5123706063471989086} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &2439328012817118033 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5123706063471989086} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &2634951813462116861 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5123706063471989086} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &3373124505296719148 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5123706063471989086} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 7234011661977481624, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!1 &5547466465696558377 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1105868353084956109} - - component: {fileID: 6473716651878017416} - - component: {fileID: 3027002799254201466} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1105868353084956109 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5547466465696558377} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0021, y: -0.0271, z: -0.0341} - m_LocalScale: {x: 0.014909456, y: 0.0149094565, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4224493554898641858} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6473716651878017416 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5547466465696558377} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3027002799254201466 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5547466465696558377} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5930571989853512014 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4680721144811276840} - - component: {fileID: 6282401866287635276} - - component: {fileID: 5968486329243705673} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4680721144811276840 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5930571989853512014} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0002, y: -0.0271, z: -0.0583} - m_LocalScale: {x: 0.014909456, y: 0.0149094565, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2789348484022474289} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6282401866287635276 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5930571989853512014} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5968486329243705673 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5930571989853512014} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6029700600943580145 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8238367080224119719} - - component: {fileID: 5724701213010134888} - - component: {fileID: 8128022802492735217} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8238367080224119719 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6029700600943580145} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0006, y: -0.0271, z: -0.0136} - m_LocalScale: {x: 0.014909456, y: 0.014909458, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5648247937879601467} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5724701213010134888 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6029700600943580145} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8128022802492735217 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6029700600943580145} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6436112380495775655 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2687599434852797231} - - component: {fileID: 1775625412727765419} - - component: {fileID: 9001530676247730356} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2687599434852797231 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6436112380495775655} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0008, y: -0.0271, z: 0.063} - m_LocalScale: {x: 0.014909456, y: 0.014909456, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5347605361330900549} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1775625412727765419 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6436112380495775655} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &9001530676247730356 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6436112380495775655} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6644892896910991363 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2016334115872335876} - - component: {fileID: 7065892619947486153} - - component: {fileID: 2875507029736605527} - m_Layer: 8 - m_Name: Box245 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2016334115872335876 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6644892896910991363} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.073972985, y: 0.26294157, z: -0.06132862} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 237590542595427532} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7065892619947486153 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6644892896910991363} - m_Mesh: {fileID: -6930810130992049895, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!23 &2875507029736605527 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6644892896910991363} - 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: -6257702196253466788, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6538121952294311303, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6307277589567570940, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 3925418980499852262, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6745765165549875252, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 762489874720995619, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -1987490652388691751, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 7381587766209216910, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - 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!1 &7114923662857932455 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7799805708655558583} - - component: {fileID: 938202236825878727} - - component: {fileID: 3645071669145678716} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7799805708655558583 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7114923662857932455} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.003, y: -0.0271, z: -0.0583} - m_LocalScale: {x: 0.014909456, y: 0.014909457, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6568881656905486756} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &938202236825878727 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7114923662857932455} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3645071669145678716 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7114923662857932455} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7127137364216385627 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6224091810539468153} - - component: {fileID: 7796168112659094170} - - component: {fileID: 5930167695936712382} - m_Layer: 8 - m_Name: Box223 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6224091810539468153 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7127137364216385627} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0011672678, y: -0.000000059604645, z: -0.000000029802322} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 237590542595427532} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7796168112659094170 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7127137364216385627} - m_Mesh: {fileID: 4711277529317192186, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!23 &5930167695936712382 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7127137364216385627} - 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: -1987490652388691751, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6307277589567570940, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 3925418980499852262, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6257702196253466788, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6557445226182316266, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 2713416297991804684, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -8439644313901887954, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6257702196253466788, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - 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!1 &7497516001928142902 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6568881656905486756} - - component: {fileID: 1037149307560798140} - - component: {fileID: 3603355765352555424} - - component: {fileID: 167271708086392123} - - component: {fileID: 1857836009904784092} - - component: {fileID: 7878921082413878961} - - component: {fileID: 3282291738229297436} - m_Layer: 8 - m_Name: Box244 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6568881656905486756 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7497516001928142902} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.017689884, y: 0.26294157, z: -0.06132862} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 7799805708655558583} - - {fileID: 3352469838962934897} - m_Father: {fileID: 237590542595427532} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1037149307560798140 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7497516001928142902} - m_Mesh: {fileID: -1587076473420500859, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!23 &3603355765352555424 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7497516001928142902} - 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: -6257702196253466788, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6538121952294311303, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6307277589567570940, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 3925418980499852262, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 762489874720995619, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6745765165549875252, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -1987490652388691751, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 7381587766209216910, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - 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!114 &167271708086392123 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7497516001928142902} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1857836009904784092 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7497516001928142902} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 3 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7878921082413878961 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7497516001928142902} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &3282291738229297436 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7497516001928142902} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -1587076473420500859, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!1 &7707231536978912209 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8073995168129665773} - - component: {fileID: 2059547931665944006} - - component: {fileID: 319863329589629377} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8073995168129665773 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7707231536978912209} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0006, y: -0.0271, z: 0.0369} - m_LocalScale: {x: 0.014909456, y: 0.014909458, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5648247937879601467} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2059547931665944006 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7707231536978912209} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &319863329589629377 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7707231536978912209} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7899372694975591997 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7548384941592363267} - - component: {fileID: 4372539144920983522} - - component: {fileID: 3640184318609085731} - - component: {fileID: 6822343352129476420} - - component: {fileID: 2185961517911533938} - - component: {fileID: 642088935196274423} - - component: {fileID: 3848139428425642602} - m_Layer: 8 - m_Name: Box247 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7548384941592363267 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7899372694975591997} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.22037435, y: 0.26294157, z: -0.06132862} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 3920414786018594885} - - {fileID: 1826795502977108938} - m_Father: {fileID: 237590542595427532} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4372539144920983522 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7899372694975591997} - m_Mesh: {fileID: -6567773755233495677, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!23 &3640184318609085731 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7899372694975591997} - 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: -6257702196253466788, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6538121952294311303, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6307277589567570940, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 3925418980499852262, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 762489874720995619, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -1987490652388691751, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 7381587766209216910, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - 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!114 &6822343352129476420 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7899372694975591997} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &2185961517911533938 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7899372694975591997} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 6 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &642088935196274423 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7899372694975591997} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &3848139428425642602 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7899372694975591997} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -6567773755233495677, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!1 &7944927259940566324 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4907919541290560585} - - component: {fileID: 7552193055132611093} - - component: {fileID: 1302168074029248041} - m_Layer: 8 - m_Name: Box232 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4907919541290560585 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7944927259940566324} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.14782092, y: 0.26294157, z: -0.06132862} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 237590542595427532} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7552193055132611093 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7944927259940566324} - m_Mesh: {fileID: -8831593214895347882, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!23 &1302168074029248041 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7944927259940566324} - 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: -6257702196253466788, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -1987490652388691751, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -6307277589567570940, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 3925418980499852262, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 7381587766209216910, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 1368039103165038143, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: -5956578104803850452, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - 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!1 &8321255848514530112 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7313407188378153463} - - component: {fileID: 5913673932906997173} - - component: {fileID: 4469989136599930768} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7313407188378153463 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8321255848514530112} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0008, y: -0.0271, z: -0.0143} - m_LocalScale: {x: 0.014909456, y: 0.014909456, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5347605361330900549} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5913673932906997173 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8321255848514530112} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4469989136599930768 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8321255848514530112} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8361940699806910435 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7998345082579482344} - - component: {fileID: 1630655334986018059} - - component: {fileID: 2928371596666931897} - m_Layer: 11 - m_Name: Cube (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7998345082579482344 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8361940699806910435} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0021, y: -0.0271, z: -0.0583} - m_LocalScale: {x: 0.014909456, y: 0.0149094565, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4224493554898641858} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1630655334986018059 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8361940699806910435} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2928371596666931897 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8361940699806910435} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8397755488539151588 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9072647203423384494} - - component: {fileID: 722269490727646680} - - component: {fileID: 6214445759365917464} - m_Layer: 8 - m_Name: Box222 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9072647203423384494 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8397755488539151588} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0011672676, y: 0.46563628, z: -0.528} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 237590542595427532} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &722269490727646680 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8397755488539151588} - m_Mesh: {fileID: -3263837062639474007, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} ---- !u!23 &6214445759365917464 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8397755488539151588} - 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: -1987490652388691751, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - - {fileID: 5131508113517690937, guid: 28c87801a9b55a346a619e0b82730f6f, type: 3} - 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!1 &8857987782580051780 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2564266443356931981} - - component: {fileID: 1504511283572617709} - - component: {fileID: 1925580782232827825} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2564266443356931981 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8857987782580051780} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0008, y: -0.0271, z: 0.019} - m_LocalScale: {x: 0.014909456, y: 0.014909456, z: 0.014909456} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5347605361330900549} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1504511283572617709 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8857987782580051780} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1925580782232827825 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8857987782580051780} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/23.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/23.prefab.meta deleted file mode 100644 index c40c8969b..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/23.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: c9724d2383dfc274e88fdbd13741c9a5 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/24.prefab b/GQ_URP/GQ/Assets/prefab/老模型/24.prefab deleted file mode 100644 index 28f97eb44..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/24.prefab +++ /dev/null @@ -1,4466 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &304632980721675658 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 696125888689795764} - - component: {fileID: 5032768367078560433} - - component: {fileID: 8813493806296129802} - m_Layer: 11 - m_Name: Cube (26) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &696125888689795764 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 304632980721675658} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0046, y: -0.139, z: 0.0017} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.011315322} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8638719667945040450} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5032768367078560433 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 304632980721675658} - 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!114 &8813493806296129802 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 304632980721675658} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &536423025615493418 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1684797711461243440} - - component: {fileID: 3740231439363317855} - - component: {fileID: 6667205334165775415} - m_Layer: 11 - m_Name: Cube (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1684797711461243440 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 536423025615493418} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0747, y: -0.139, z: 0.0017} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.0113153225} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2634316324436791062} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3740231439363317855 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 536423025615493418} - 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!114 &6667205334165775415 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 536423025615493418} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &563740404980243726 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2904908653855958046} - - component: {fileID: 1787678352315382407} - - component: {fileID: 2309318353293848970} - m_Layer: 11 - m_Name: Cube (24) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2904908653855958046 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 563740404980243726} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1441, y: -0.139, z: 0.0017} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.0113153225} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2634316324436791062} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1787678352315382407 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 563740404980243726} - 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!114 &2309318353293848970 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 563740404980243726} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &676102811843830466 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3196251358099176739} - - component: {fileID: 3974435659602413732} - - component: {fileID: 5026534102771380349} - m_Layer: 11 - m_Name: Cube (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3196251358099176739 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 676102811843830466} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0492, y: -0.139, z: 0.0017} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.0113153225} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2634316324436791062} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3974435659602413732 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 676102811843830466} - 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!114 &5026534102771380349 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 676102811843830466} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &726774493290439606 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7565165627096818033} - - component: {fileID: 1444454533498966390} - - component: {fileID: 1127425728974540623} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7565165627096818033 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 726774493290439606} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0476, y: -0.139, z: 0.0067} - m_LocalScale: {x: 0.01813237, y: 0.01813237, z: 0.011315324} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3652609563724035173} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1444454533498966390 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 726774493290439606} - 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!114 &1127425728974540623 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 726774493290439606} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &789366659040444575 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 963883244587957548} - - component: {fileID: 7034937260745066061} - - component: {fileID: 3722900185357188547} - m_Layer: 11 - m_Name: Cube (32) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &963883244587957548 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 789366659040444575} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1449, y: -0.139, z: 0.0017} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.011315322} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8638719667945040450} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7034937260745066061 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 789366659040444575} - 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!114 &3722900185357188547 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 789366659040444575} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &792062376564241775 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 758688736736354901} - - component: {fileID: 2428219415924784110} - - component: {fileID: 2033797427901752628} - m_Layer: 8 - m_Name: Object005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &758688736736354901 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792062376564241775} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.24179916, y: 0.06767814, z: -0.17271417} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7908643795690293023} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2428219415924784110 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792062376564241775} - m_Mesh: {fileID: 9186633843763367028, guid: 837e03a60f341e14da656441a8653493, type: 3} ---- !u!23 &2033797427901752628 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792062376564241775} - 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: -6257702196253466788, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -3434006170440666942, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -8625475798876401302, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -2712199210993112587, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 5153412432591461348, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 2891006847804744583, guid: 837e03a60f341e14da656441a8653493, type: 3} - 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!1 &852903151062918935 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8332952942330193960} - - component: {fileID: 1039350329261169264} - - component: {fileID: 7314408086862669646} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8332952942330193960 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 852903151062918935} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1435, y: -0.139, z: 0.0018} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.011315323} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9208394031549081300} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1039350329261169264 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 852903151062918935} - 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!114 &7314408086862669646 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 852903151062918935} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1782409284346995284 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3647711359617583424} - - component: {fileID: 6133860174485098152} - - component: {fileID: 3111609394783340559} - m_Layer: 11 - m_Name: Cube (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3647711359617583424 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1782409284346995284} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1202, y: -0.139, z: 0.0018} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.011315323} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9208394031549081300} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6133860174485098152 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1782409284346995284} - 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!114 &3111609394783340559 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1782409284346995284} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1869296618580038535 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 826930199501863650} - - component: {fileID: 3741397698369904208} - - component: {fileID: 6751583608375186211} - m_Layer: 8 - m_Name: Box026 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &826930199501863650 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1869296618580038535} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.10173249, y: 0.076258324, z: -0.13957438} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7908643795690293023} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3741397698369904208 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1869296618580038535} - m_Mesh: {fileID: -612376834313925032, guid: 837e03a60f341e14da656441a8653493, type: 3} ---- !u!23 &6751583608375186211 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1869296618580038535} - 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: -6257702196253466788, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -8625475798876401302, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -2712199210993112587, guid: 837e03a60f341e14da656441a8653493, type: 3} - 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!1 &2050263043936934075 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5279242347630847245} - - component: {fileID: 5679859337783626066} - - component: {fileID: 1815404501161841751} - m_Layer: 11 - m_Name: Cube (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5279242347630847245 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2050263043936934075} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0038, y: -0.139, z: 0.0017} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.0113153225} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2634316324436791062} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5679859337783626066 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2050263043936934075} - 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!114 &1815404501161841751 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2050263043936934075} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2230403949862825789 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3189517832833286494} - - component: {fileID: 5289777237853979122} - - component: {fileID: 4582450793098460178} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3189517832833286494 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2230403949862825789} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.1932, y: -0.139, z: 0.0067} - m_LocalScale: {x: 0.01813237, y: 0.01813237, z: 0.011315324} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3652609563724035173} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5289777237853979122 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2230403949862825789} - 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!114 &4582450793098460178 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2230403949862825789} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2268288440856530303 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7778966105981748896} - - component: {fileID: 8127750022620859074} - - component: {fileID: 4994945489998424856} - m_Layer: 11 - m_Name: Cube (28) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7778966105981748896 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2268288440856530303} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.05, y: -0.139, z: 0.0017} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.011315322} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8638719667945040450} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8127750022620859074 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2268288440856530303} - 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!114 &4994945489998424856 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2268288440856530303} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2419844542014642129 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1914687209861930363} - - component: {fileID: 2518933740873689369} - - component: {fileID: 6860596977793726653} - m_Layer: 8 - m_Name: Box028 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1914687209861930363 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2419844542014642129} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.10173249, y: 0.120376945, z: -0.13957438} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7908643795690293023} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2518933740873689369 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2419844542014642129} - m_Mesh: {fileID: 4442130670313257827, guid: 837e03a60f341e14da656441a8653493, type: 3} ---- !u!23 &6860596977793726653 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2419844542014642129} - 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: -6257702196253466788, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -8625475798876401302, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -2712199210993112587, guid: 837e03a60f341e14da656441a8653493, type: 3} - 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!1 &2539651474903650018 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2130138576575428807} - - component: {fileID: 1858031725355365503} - - component: {fileID: 8543667610213322224} - m_Layer: 11 - m_Name: Cube (23) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2130138576575428807 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2539651474903650018} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1208, y: -0.139, z: 0.0017} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.0113153225} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2634316324436791062} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1858031725355365503 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2539651474903650018} - 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!114 &8543667610213322224 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2539651474903650018} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2720690885521485319 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9090876434168301926} - - component: {fileID: 5411376953263268673} - - component: {fileID: 7578722780105355858} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9090876434168301926 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2720690885521485319} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.1932, y: -0.139, z: 0.0194} - m_LocalScale: {x: 0.01813237, y: 0.01813237, z: 0.011315324} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3652609563724035173} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5411376953263268673 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2720690885521485319} - 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!114 &7578722780105355858 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2720690885521485319} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2784226494399769773 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7428418889197155367} - - component: {fileID: 6565082231824562677} - - component: {fileID: 2417816470240792509} - m_Layer: 11 - m_Name: Cube (31) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7428418889197155367 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2784226494399769773} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1216, y: -0.139, z: 0.0017} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.011315322} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8638719667945040450} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6565082231824562677 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2784226494399769773} - 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!114 &2417816470240792509 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2784226494399769773} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2980776429019370256 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1490698718515226005} - - component: {fileID: 7840332900170323192} - - component: {fileID: 8764071930465999211} - m_Layer: 11 - m_Name: Cube (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1490698718515226005 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2980776429019370256} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0264, y: -0.139, z: 0.0017} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.0113153225} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2634316324436791062} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7840332900170323192 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2980776429019370256} - 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!114 &8764071930465999211 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2980776429019370256} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3132317053692980177 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4993074729989754685} - - component: {fileID: 6584137083612854094} - - component: {fileID: 2097641136179598518} - m_Layer: 8 - m_Name: Box029 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4993074729989754685 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3132317053692980177} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.038049847, y: 0.120376945, z: -0.13957438} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7908643795690293023} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6584137083612854094 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3132317053692980177} - m_Mesh: {fileID: -4783894591166569364, guid: 837e03a60f341e14da656441a8653493, type: 3} ---- !u!23 &2097641136179598518 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3132317053692980177} - 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: -6257702196253466788, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -7911987922143072104, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -8625475798876401302, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 3757783504066616455, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -2712199210993112587, guid: 837e03a60f341e14da656441a8653493, type: 3} - 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!1 &3391514056231687800 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2600202058543323042} - - component: {fileID: 7253612977300878796} - - component: {fileID: 7013904289401604283} - m_Layer: 8 - m_Name: Box021 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2600202058543323042 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3391514056231687800} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0.0020824, z: -0.35} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7908643795690293023} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7253612977300878796 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3391514056231687800} - m_Mesh: {fileID: 5092484024584187340, guid: 837e03a60f341e14da656441a8653493, type: 3} ---- !u!23 &7013904289401604283 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3391514056231687800} - 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: 1164559979738526386, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -1152147162816932204, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -5309146791756261813, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 1196480866727828669, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 5153412432591461348, guid: 837e03a60f341e14da656441a8653493, type: 3} - 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!1 &3476697643691111245 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4495432721372841726} - - component: {fileID: 6883839607616462515} - - component: {fileID: 2452579162067953001} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4495432721372841726 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3476697643691111245} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.2756, y: -0.139, z: 0.0194} - m_LocalScale: {x: 0.01813237, y: 0.01813237, z: 0.011315324} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3652609563724035173} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6883839607616462515 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3476697643691111245} - 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!114 &2452579162067953001 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3476697643691111245} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3672591130218293020 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5742848720094016658} - - component: {fileID: 7818481644335250610} - - component: {fileID: 7805239464887372475} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5742848720094016658 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3672591130218293020} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.1109, y: -0.139, z: 0.0194} - m_LocalScale: {x: 0.01813237, y: 0.01813237, z: 0.011315324} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3652609563724035173} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7818481644335250610 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3672591130218293020} - 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!114 &7805239464887372475 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3672591130218293020} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3701009193783348428 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8638719667945040450} - - component: {fileID: 8307244131590882083} - - component: {fileID: 3747975955969897451} - - component: {fileID: 2176926726817105487} - - component: {fileID: 7116273901269343320} - - component: {fileID: 2269184346130407404} - - component: {fileID: 721947744800121240} - m_Layer: 8 - m_Name: Box038 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8638719667945040450 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3701009193783348428} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.038049847, y: 0.09823687, z: -0.13957438} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8728220937998104595} - - {fileID: 696125888689795764} - - {fileID: 5619906318872355823} - - {fileID: 7778966105981748896} - - {fileID: 2503210186477328044} - - {fileID: 3165911887822848522} - - {fileID: 7428418889197155367} - - {fileID: 963883244587957548} - m_Father: {fileID: 7908643795690293023} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8307244131590882083 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3701009193783348428} - m_Mesh: {fileID: 4236268024495968267, guid: 837e03a60f341e14da656441a8653493, type: 3} ---- !u!23 &3747975955969897451 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3701009193783348428} - 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: -6257702196253466788, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 6570790101810915368, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -8625475798876401302, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 5153412432591461348, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 1668985204131210402, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -2712199210993112587, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 2891006847804744583, guid: 837e03a60f341e14da656441a8653493, type: 3} - 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!114 &2176926726817105487 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3701009193783348428} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7116273901269343320 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3701009193783348428} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &2269184346130407404 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3701009193783348428} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &721947744800121240 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3701009193783348428} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 4236268024495968267, guid: 837e03a60f341e14da656441a8653493, type: 3} ---- !u!1 &3986421233943397778 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5619906318872355823} - - component: {fileID: 6965221358953099694} - - component: {fileID: 8779238530006885856} - m_Layer: 11 - m_Name: Cube (27) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5619906318872355823 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3986421233943397778} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0272, y: -0.139, z: 0.0017} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.011315322} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8638719667945040450} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6965221358953099694 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3986421233943397778} - 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!114 &8779238530006885856 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3986421233943397778} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4131871349072136203 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2622346378696807870} - - component: {fileID: 6830337329129586801} - - component: {fileID: 165136446266940761} - m_Layer: 8 - m_Name: Object008 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2622346378696807870 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4131871349072136203} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.24179916, y: 0.023587491, z: -0.17271417} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7908643795690293023} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6830337329129586801 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4131871349072136203} - m_Mesh: {fileID: -7647463442239531939, guid: 837e03a60f341e14da656441a8653493, type: 3} ---- !u!23 &165136446266940761 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4131871349072136203} - 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: -6257702196253466788, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -3434006170440666942, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -8625475798876401302, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -2712199210993112587, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 5153412432591461348, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 2891006847804744583, guid: 837e03a60f341e14da656441a8653493, type: 3} - 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!1 &4402657826434161184 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8151634109868660311} - - component: {fileID: 3088437144663184701} - - component: {fileID: 5424096489795660554} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8151634109868660311 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4402657826434161184} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.1109, y: -0.139, z: 0.0067} - m_LocalScale: {x: 0.01813237, y: 0.01813237, z: 0.011315324} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3652609563724035173} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3088437144663184701 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4402657826434161184} - 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!114 &5424096489795660554 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4402657826434161184} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4555265885294071023 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2250904010896539601} - - component: {fileID: 294293845107184896} - - component: {fileID: 3265018928626974306} - m_Layer: 8 - m_Name: Object004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2250904010896539601 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4555265885294071023} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.24179916, y: 0.11176877, z: -0.17271417} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7908643795690293023} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &294293845107184896 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4555265885294071023} - m_Mesh: {fileID: -8113768720884857512, guid: 837e03a60f341e14da656441a8653493, type: 3} ---- !u!23 &3265018928626974306 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4555265885294071023} - 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: -8625475798876401302, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -6257702196253466788, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -2712199210993112587, guid: 837e03a60f341e14da656441a8653493, type: 3} - 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!1 &4820239279705732980 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3587451737119137445} - - component: {fileID: 7799083988134683819} - - component: {fileID: 652955540249309852} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3587451737119137445 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4820239279705732980} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0136, y: -0.139, z: 0.0072} - m_LocalScale: {x: 0.01813237, y: 0.01813237, z: 0.011315324} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3652609563724035173} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7799083988134683819 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4820239279705732980} - 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!114 &652955540249309852 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4820239279705732980} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4992291361761343246 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2634316324436791062} - - component: {fileID: 7250202117374524925} - - component: {fileID: 8570028142732706086} - - component: {fileID: 5955965283595157658} - - component: {fileID: 3962715194557920272} - - component: {fileID: 7940692807608083615} - - component: {fileID: 3024527448271870181} - m_Layer: 8 - m_Name: Box037 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2634316324436791062 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4992291361761343246} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.038049847, y: 0.07625718, z: -0.13957438} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8449075156975323123} - - {fileID: 5279242347630847245} - - {fileID: 1490698718515226005} - - {fileID: 3196251358099176739} - - {fileID: 1684797711461243440} - - {fileID: 6699795975098008171} - - {fileID: 2130138576575428807} - - {fileID: 2904908653855958046} - m_Father: {fileID: 7908643795690293023} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7250202117374524925 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4992291361761343246} - m_Mesh: {fileID: 5884580939788738644, guid: 837e03a60f341e14da656441a8653493, type: 3} ---- !u!23 &8570028142732706086 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4992291361761343246} - 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: -6257702196253466788, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 6570790101810915368, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -8625475798876401302, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 5153412432591461348, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 1668985204131210402, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -2712199210993112587, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 2891006847804744583, guid: 837e03a60f341e14da656441a8653493, type: 3} - 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!114 &5955965283595157658 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4992291361761343246} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &3962715194557920272 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4992291361761343246} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &7940692807608083615 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4992291361761343246} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &3024527448271870181 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4992291361761343246} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 5884580939788738644, guid: 837e03a60f341e14da656441a8653493, type: 3} ---- !u!1 &5265331072939575320 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3652609563724035173} - - component: {fileID: 6438850838044756497} - - component: {fileID: 2633996996402306972} - - component: {fileID: 6547611242689454342} - - component: {fileID: 5736900550792270111} - - component: {fileID: 2199922917350381503} - - component: {fileID: 4237896536658154510} - m_Layer: 8 - m_Name: Box025 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3652609563724035173 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5265331072939575320} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.10173249, y: 0.013357807, z: -0.13957438} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 3139222005630708396} - - {fileID: 5742848720094016658} - - {fileID: 9090876434168301926} - - {fileID: 4495432721372841726} - - {fileID: 3587451737119137445} - - {fileID: 7565165627096818033} - - {fileID: 8151634109868660311} - - {fileID: 3189517832833286494} - - {fileID: 8586934097224374507} - m_Father: {fileID: 7908643795690293023} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6438850838044756497 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5265331072939575320} - m_Mesh: {fileID: 1593996420852118269, guid: 837e03a60f341e14da656441a8653493, type: 3} ---- !u!23 &2633996996402306972 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5265331072939575320} - 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: -6257702196253466788, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -3434006170440666942, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -8625475798876401302, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -2712199210993112587, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -9106974961608234918, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 5153412432591461348, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 2891006847804744583, guid: 837e03a60f341e14da656441a8653493, type: 3} - 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!114 &6547611242689454342 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5265331072939575320} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 4 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &5736900550792270111 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5265331072939575320} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &2199922917350381503 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5265331072939575320} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &4237896536658154510 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5265331072939575320} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 1593996420852118269, guid: 837e03a60f341e14da656441a8653493, type: 3} ---- !u!1 &5268150744940999986 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6312124778653761447} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6312124778653761447 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5268150744940999986} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: -0.13500005, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7908643795690293023} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &5650202555890981063 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3165911887822848522} - - component: {fileID: 7176010794597167121} - - component: {fileID: 8645620702594377980} - m_Layer: 11 - m_Name: Cube (30) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3165911887822848522 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5650202555890981063} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1004, y: -0.139, z: 0.0017} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.011315322} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8638719667945040450} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7176010794597167121 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5650202555890981063} - 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!114 &8645620702594377980 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5650202555890981063} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5761080354176845303 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1210272329920546866} - - component: {fileID: 7155612707244682052} - - component: {fileID: 8513093398985132651} - m_Layer: 8 - m_Name: Box033 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1210272329920546866 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5761080354176845303} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.24179916, y: 0.06767815, z: -0.13957438} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7908643795690293023} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7155612707244682052 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5761080354176845303} - m_Mesh: {fileID: 5924061002115919974, guid: 837e03a60f341e14da656441a8653493, type: 3} ---- !u!23 &8513093398985132651 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5761080354176845303} - 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: -6257702196253466788, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 3757783504066616455, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -8625475798876401302, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -4574527834605171866, guid: 837e03a60f341e14da656441a8653493, type: 3} - 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!1 &5789416105516111524 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6699795975098008171} - - component: {fileID: 5168971800923033620} - - component: {fileID: 6753208501807529489} - m_Layer: 11 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6699795975098008171 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5789416105516111524} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0996, y: -0.139, z: 0.0017} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.0113153225} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2634316324436791062} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5168971800923033620 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5789416105516111524} - 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!114 &6753208501807529489 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5789416105516111524} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5826572634950358429 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2503210186477328044} - - component: {fileID: 2533354393086000651} - - component: {fileID: 4703774316123090290} - m_Layer: 11 - m_Name: Cube (29) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2503210186477328044 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5826572634950358429} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0755, y: -0.139, z: 0.0017} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.011315322} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8638719667945040450} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2533354393086000651 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5826572634950358429} - 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!114 &4703774316123090290 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5826572634950358429} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6025576452513880290 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3528253543602827063} - - component: {fileID: 938720615699960774} - - component: {fileID: 8393136780131535070} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3528253543602827063 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6025576452513880290} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0486, y: -0.139, z: 0.0018} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.011315323} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9208394031549081300} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &938720615699960774 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6025576452513880290} - 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!114 &8393136780131535070 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6025576452513880290} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6283254931944598159 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6801909295025127607} - - component: {fileID: 3092682857568555366} - - component: {fileID: 131521193009982634} - m_Layer: 8 - m_Name: Box027 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6801909295025127607 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6283254931944598159} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.10173249, y: 0.09831764, z: -0.13957438} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7908643795690293023} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3092682857568555366 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6283254931944598159} - m_Mesh: {fileID: -75171668026845272, guid: 837e03a60f341e14da656441a8653493, type: 3} ---- !u!23 &131521193009982634 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6283254931944598159} - 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: -6257702196253466788, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -8625475798876401302, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -2712199210993112587, guid: 837e03a60f341e14da656441a8653493, type: 3} - 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!1 &6339667896171584655 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7776306882142896306} - - component: {fileID: 3424613819371539589} - - component: {fileID: 6818953257767677725} - m_Layer: 11 - m_Name: Cube (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7776306882142896306 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6339667896171584655} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.099, y: -0.139, z: 0.0018} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.011315323} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9208394031549081300} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3424613819371539589 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6339667896171584655} - 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!114 &6818953257767677725 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6339667896171584655} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6521625301561981115 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7995221944045292068} - - component: {fileID: 2092318087329181667} - - component: {fileID: 2699237215925259310} - m_Layer: 8 - m_Name: Box024 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7995221944045292068 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6521625301561981115} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.10173249, y: 0.054199014, z: -0.13957438} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7908643795690293023} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2092318087329181667 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6521625301561981115} - m_Mesh: {fileID: 106541212177282163, guid: 837e03a60f341e14da656441a8653493, type: 3} ---- !u!23 &2699237215925259310 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6521625301561981115} - 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: -6257702196253466788, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -8625475798876401302, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -2712199210993112587, guid: 837e03a60f341e14da656441a8653493, type: 3} - 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!1 &6663281082439846283 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4293326770734608724} - - component: {fileID: 3740939985184876365} - - component: {fileID: 1572889678408139208} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4293326770734608724 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6663281082439846283} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0741, y: -0.139, z: 0.0018} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.011315323} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9208394031549081300} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3740939985184876365 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6663281082439846283} - 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!114 &1572889678408139208 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6663281082439846283} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6938544276853784050 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3139222005630708396} - - component: {fileID: 4627551965571591302} - - component: {fileID: 8480828540008329887} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3139222005630708396 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6938544276853784050} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0476, y: -0.139, z: 0.0194} - m_LocalScale: {x: 0.01813237, y: 0.01813237, z: 0.011315324} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3652609563724035173} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4627551965571591302 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6938544276853784050} - 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!114 &8480828540008329887 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6938544276853784050} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7299862614374734025 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5194863558917560235} - - component: {fileID: 8006660479589261091} - - component: {fileID: 2911718248116468113} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5194863558917560235 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7299862614374734025} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0258, y: -0.139, z: 0.0018} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.011315323} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9208394031549081300} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8006660479589261091 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7299862614374734025} - 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!114 &2911718248116468113 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7299862614374734025} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7388987579058085285 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7908643795690293023} - - component: {fileID: 1489148906754869588} - - component: {fileID: 1607060780800718175} - - component: {fileID: 1113666789258464911} - - component: {fileID: -877785166068999013} - - component: {fileID: -6065637895878931930} - m_Layer: 8 - m_Name: 24 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7908643795690293023 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7388987579058085285} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 2600202058543323042} - - {fileID: 7995221944045292068} - - {fileID: 3652609563724035173} - - {fileID: 826930199501863650} - - {fileID: 6801909295025127607} - - {fileID: 1914687209861930363} - - {fileID: 4993074729989754685} - - {fileID: 9208394031549081300} - - {fileID: 1210272329920546866} - - {fileID: 2634316324436791062} - - {fileID: 8638719667945040450} - - {fileID: 2250904010896539601} - - {fileID: 758688736736354901} - - {fileID: 2622346378696807870} - - {fileID: 6312124778653761447} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &1489148906754869588 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7388987579058085285} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 24 - occupyNum: 3 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &1607060780800718175 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7388987579058085285} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 3 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &1113666789258464911 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7388987579058085285} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &-877785166068999013 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7388987579058085285} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &-6065637895878931930 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7388987579058085285} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 3 - selfIcon: {fileID: 21300000, guid: 389cf40a8e37ceb488fcd52fbb898476, type: 3} ---- !u!1 &8526086581874120179 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8728220937998104595} - - component: {fileID: 6064719544714693731} - - component: {fileID: 9191985577885130439} - m_Layer: 11 - m_Name: Cube (25) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8728220937998104595 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8526086581874120179} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0203, y: -0.139, z: 0.0017} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.011315322} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8638719667945040450} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6064719544714693731 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8526086581874120179} - 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!114 &9191985577885130439 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8526086581874120179} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8673539315735003269 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9208394031549081300} - - component: {fileID: 8363012309333513352} - - component: {fileID: 5868399955077943856} - - component: {fileID: 8925037884547990238} - - component: {fileID: 8806997910178092750} - - component: {fileID: 305412175076675543} - - component: {fileID: 7844214476735798816} - m_Layer: 8 - m_Name: Box032 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9208394031549081300 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8673539315735003269} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.038049847, y: 0.054199014, z: -0.13957438} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 3234652802723010336} - - {fileID: 5988690172471486009} - - {fileID: 5194863558917560235} - - {fileID: 3528253543602827063} - - {fileID: 4293326770734608724} - - {fileID: 7776306882142896306} - - {fileID: 3647711359617583424} - - {fileID: 8332952942330193960} - m_Father: {fileID: 7908643795690293023} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8363012309333513352 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8673539315735003269} - m_Mesh: {fileID: -8672714952799723808, guid: 837e03a60f341e14da656441a8653493, type: 3} ---- !u!23 &5868399955077943856 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8673539315735003269} - 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: -6257702196253466788, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 6570790101810915368, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -8625475798876401302, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 5153412432591461348, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 1668985204131210402, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: -2712199210993112587, guid: 837e03a60f341e14da656441a8653493, type: 3} - - {fileID: 2891006847804744583, guid: 837e03a60f341e14da656441a8653493, type: 3} - 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!114 &8925037884547990238 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8673539315735003269} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 3 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &8806997910178092750 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8673539315735003269} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &305412175076675543 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8673539315735003269} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &7844214476735798816 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8673539315735003269} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -8672714952799723808, guid: 837e03a60f341e14da656441a8653493, type: 3} ---- !u!1 &8683377546730931540 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3234652802723010336} - - component: {fileID: 5478751596053703727} - - component: {fileID: 1200312008318777551} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3234652802723010336 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8683377546730931540} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.02167, y: -0.139, z: 0.0018} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.011315323} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9208394031549081300} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5478751596053703727 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8683377546730931540} - 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!114 &1200312008318777551 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8683377546730931540} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8898676488815092068 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5988690172471486009} - - component: {fileID: 2654336678266293628} - - component: {fileID: 1727349255585766577} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5988690172471486009 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8898676488815092068} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0032, y: -0.139, z: 0.0018} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.011315323} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9208394031549081300} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2654336678266293628 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8898676488815092068} - 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!114 &1727349255585766577 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8898676488815092068} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8909269484128948116 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8586934097224374507} - - component: {fileID: 2263829340585212179} - - component: {fileID: 3424605910734284717} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8586934097224374507 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8909269484128948116} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.2756, y: -0.139, z: 0.0067} - m_LocalScale: {x: 0.01813237, y: 0.01813237, z: 0.011315324} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3652609563724035173} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2263829340585212179 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8909269484128948116} - 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!114 &3424605910734284717 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8909269484128948116} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9075331103119180817 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8449075156975323123} - - component: {fileID: 4965135145413463494} - - component: {fileID: 1679715551086196332} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8449075156975323123 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9075331103119180817} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0211, y: -0.139, z: 0.0017} - m_LocalScale: {x: 0.016319739, y: 0.01813237, z: 0.0113153225} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2634316324436791062} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4965135145413463494 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9075331103119180817} - 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!114 &1679715551086196332 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9075331103119180817} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/24.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/24.prefab.meta deleted file mode 100644 index a883d77a1..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/24.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: a0536b300e93f8643be3bc93ab3a158a -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/28.prefab b/GQ_URP/GQ/Assets/prefab/老模型/28.prefab deleted file mode 100644 index 08be6d891..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/28.prefab +++ /dev/null @@ -1,1297 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &899747767305199612 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2060061125976602277} - - component: {fileID: 5926727325905993300} - - component: {fileID: 169912278566356346} - m_Layer: 8 - m_Name: Line035 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2060061125976602277 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 899747767305199612} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.19690412, y: 0.09621807, z: 0.00712315} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4458795146215131281} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5926727325905993300 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 899747767305199612} - m_Mesh: {fileID: 8489778906868738531, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} ---- !u!23 &169912278566356346 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 899747767305199612} - 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: -6241476808667166444, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} - 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!1 &1468078880666161788 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4207784946350944587} - - component: {fileID: 4718467231645292447} - - component: {fileID: 6645384828651972335} - m_Layer: 8 - m_Name: Line022 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4207784946350944587 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1468078880666161788} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.26777405, y: 0.09621807, z: 0.00712315} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4458795146215131281} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4718467231645292447 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1468078880666161788} - m_Mesh: {fileID: -7965038811038983531, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} ---- !u!23 &6645384828651972335 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1468078880666161788} - 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: -6241476808667166444, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} - 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!1 &1849396843593016034 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3966332141049217510} - - component: {fileID: 7814236369558767436} - - component: {fileID: 1030856263432527711} - m_Layer: 8 - m_Name: Line027 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3966332141049217510 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1849396843593016034} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2635541, y: 0.09621807, z: 0.00712315} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4458795146215131281} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7814236369558767436 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1849396843593016034} - m_Mesh: {fileID: -5678409635869727515, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} ---- !u!23 &1030856263432527711 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1849396843593016034} - 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: -6241476808667166444, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} - 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!1 &1967789791611894327 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3745129239262625500} - - component: {fileID: 2630173317928547237} - - component: {fileID: 2309259189583916940} - m_Layer: 8 - m_Name: Line032 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3745129239262625500 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1967789791611894327} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.22052747, y: 0.09621807, z: 0.00712315} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4458795146215131281} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2630173317928547237 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1967789791611894327} - m_Mesh: {fileID: -1531590006222224965, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} ---- !u!23 &2309259189583916940 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1967789791611894327} - 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: -6241476808667166444, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} - 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!1 &2266663557003146715 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1854258844982818280} - - component: {fileID: 6444323358542172877} - - component: {fileID: 3606611711902610528} - m_Layer: 8 - m_Name: Line026 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1854258844982818280 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2266663557003146715} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.28717744, y: 0.09621807, z: 0.00712315} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4458795146215131281} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6444323358542172877 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2266663557003146715} - m_Mesh: {fileID: 901503930091743798, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} ---- !u!23 &3606611711902610528 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2266663557003146715} - 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: -6241476808667166444, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} - 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!1 &3051721692267562369 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5120831666569032327} - - component: {fileID: 5618259268399488086} - - component: {fileID: 1822534485128762842} - m_Layer: 8 - m_Name: Line030 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5120831666569032327 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3051721692267562369} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.19268419, y: 0.09621807, z: 0.00712315} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4458795146215131281} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5618259268399488086 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3051721692267562369} - m_Mesh: {fileID: -4882779569204714280, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} ---- !u!23 &1822534485128762842 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3051721692267562369} - 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: -6241476808667166444, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} - 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!1 &3754297779751911978 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 947630541870268188} - - component: {fileID: 3427401875101689782} - - component: {fileID: 2244241729198443384} - m_Layer: 8 - m_Name: Line033 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &947630541870268188 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3754297779751911978} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.24415076, y: 0.09621807, z: 0.00712315} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4458795146215131281} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3427401875101689782 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3754297779751911978} - m_Mesh: {fileID: 4846085880637510611, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} ---- !u!23 &2244241729198443384 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3754297779751911978} - 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: -6241476808667166444, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} - 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!1 &3939244649668137515 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4458795146215131281} - - component: {fileID: 8574037174877545468} - - component: {fileID: 4316641174231979207} - - component: {fileID: 6971558776886076036} - - component: {fileID: 9068562620980206973} - - component: {fileID: -4398868326439555229} - m_Layer: 8 - m_Name: 28 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4458795146215131281 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3939244649668137515} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 202942553167444306} - - {fileID: 1190803916380073533} - - {fileID: 4207784946350944587} - - {fileID: 1854258844982818280} - - {fileID: 3966332141049217510} - - {fileID: 1845179311756560885} - - {fileID: 6306868747350118882} - - {fileID: 5120831666569032327} - - {fileID: 6802820107107096164} - - {fileID: 3745129239262625500} - - {fileID: 947630541870268188} - - {fileID: 1411471759025119312} - - {fileID: 2060061125976602277} - - {fileID: 7375171235349710620} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &8574037174877545468 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3939244649668137515} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 28 - occupyNum: 3 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &4316641174231979207 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3939244649668137515} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 3 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &6971558776886076036 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3939244649668137515} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &9068562620980206973 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3939244649668137515} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &-4398868326439555229 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3939244649668137515} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 3 - selfIcon: {fileID: 21300000, guid: 16feb8a4de0f3c4479c1957268d836ab, type: 3} ---- !u!1 &4173634982164119369 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1411471759025119312} - - component: {fileID: 2693642492074030353} - - component: {fileID: 3761376812368584468} - m_Layer: 8 - m_Name: Line034 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1411471759025119312 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4173634982164119369} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.17328084, y: 0.09621807, z: 0.00712315} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4458795146215131281} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2693642492074030353 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4173634982164119369} - m_Mesh: {fileID: 8428074654396029572, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} ---- !u!23 &3761376812368584468 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4173634982164119369} - 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: -6241476808667166444, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} - 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!1 &5201318207787076911 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1190803916380073533} - - component: {fileID: 5906454018298683056} - - component: {fileID: 8633641764304203581} - m_Layer: 8 - m_Name: Line010 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1190803916380073533 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5201318207787076911} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.29139733, y: 0.09621807, z: 0.00712315} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4458795146215131281} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5906454018298683056 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5201318207787076911} - m_Mesh: {fileID: -4233957156868394210, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} ---- !u!23 &8633641764304203581 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5201318207787076911} - 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: -6241476808667166444, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} - 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!1 &5586715833437120367 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1845179311756560885} - - component: {fileID: 602168924002795693} - - component: {fileID: 7883568708255579377} - m_Layer: 8 - m_Name: Line028 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1845179311756560885 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5586715833437120367} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.23993082, y: 0.09621807, z: 0.00712315} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4458795146215131281} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &602168924002795693 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5586715833437120367} - m_Mesh: {fileID: 4972956607147867693, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} ---- !u!23 &7883568708255579377 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5586715833437120367} - 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: -6241476808667166444, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} - 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!1 &6498786552129691354 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6802820107107096164} - - component: {fileID: 304395234441725257} - - component: {fileID: 115269968285743752} - m_Layer: 8 - m_Name: Line031 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6802820107107096164 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6498786552129691354} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.1690609, y: 0.09621807, z: 0.00712315} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4458795146215131281} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &304395234441725257 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6498786552129691354} - m_Mesh: {fileID: 648714052394000240, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} ---- !u!23 &115269968285743752 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6498786552129691354} - 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: -6241476808667166444, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} - 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!1 &6697535432770883426 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7375171235349710620} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7375171235349710620 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6697535432770883426} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: -0.13610241, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4458795146215131281} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &7912454943764217778 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6306868747350118882} - - component: {fileID: 3752978079580805430} - - component: {fileID: 2518150009912110053} - m_Layer: 8 - m_Name: Line029 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6306868747350118882 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7912454943764217778} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.21630749, y: 0.09621807, z: 0.00712315} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4458795146215131281} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3752978079580805430 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7912454943764217778} - m_Mesh: {fileID: 6942693937602033683, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} ---- !u!23 &2518150009912110053 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7912454943764217778} - 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: -6241476808667166444, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} - 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!1 &8371193107921472783 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 202942553167444306} - - component: {fileID: 8232408543176493414} - - component: {fileID: 3928121859467767355} - m_Layer: 8 - m_Name: 004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &202942553167444306 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8371193107921472783} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0, z: 0.000000007450581} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4458795146215131281} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8232408543176493414 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8371193107921472783} - m_Mesh: {fileID: -6521103849724139267, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} ---- !u!23 &3928121859467767355 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8371193107921472783} - 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: -8097507152751941730, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} - - {fileID: -1588453083840216184, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} - - {fileID: 341871791566095513, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} - - {fileID: 5891731549465618853, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} - - {fileID: -858402088400292277, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} - - {fileID: 4047898098337697806, guid: bde4cb82885a7af4bbc3b54e490a2188, type: 3} - 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} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/28.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/28.prefab.meta deleted file mode 100644 index 6983267c1..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/28.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 63057bc07f32b32438e82ddc890835fe -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/3.prefab b/GQ_URP/GQ/Assets/prefab/老模型/3.prefab deleted file mode 100644 index b4ef60f61..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/3.prefab +++ /dev/null @@ -1,1217 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &712606010835796919 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5059372881012510929} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5059372881012510929 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 712606010835796919} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: -0.179, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2551756477130393397} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2892006211255311759 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2551756477130393397} - - component: {fileID: 6364376133620964454} - - component: {fileID: 7340211445125128904} - - component: {fileID: 3878759795464414620} - - component: {fileID: -8348629253960590889} - - component: {fileID: -872627384411745216} - m_Layer: 8 - m_Name: 3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2551756477130393397 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2892006211255311759} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 3078760807266941726} - - {fileID: 2883804993931818184} - - {fileID: 2398659967375680012} - - {fileID: 4153434092688388991} - - {fileID: 6073080341649564791} - - {fileID: 1959388422607801307} - - {fileID: 4948743655991837753} - - {fileID: 2449020242173801671} - - {fileID: 5238094762803454210} - - {fileID: 6837869613822465821} - - {fileID: 1630333609126587890} - - {fileID: 103865199511136219} - - {fileID: 5059372881012510929} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &6364376133620964454 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2892006211255311759} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 3 - occupyNum: 4 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7340211445125128904 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2892006211255311759} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 4 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &3878759795464414620 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2892006211255311759} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &-8348629253960590889 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2892006211255311759} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &-872627384411745216 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2892006211255311759} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 4 - selfIcon: {fileID: 21300000, guid: 77811fdba1bd15944853cff500217a39, type: 3} ---- !u!1 &3560077927356944975 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2398659967375680012} - - component: {fileID: 3622748272261606629} - - component: {fileID: 8935208047428161382} - m_Layer: 8 - m_Name: Line005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2398659967375680012 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3560077927356944975} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.09112672, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2551756477130393397} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3622748272261606629 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3560077927356944975} - m_Mesh: {fileID: 3442923855343079542, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} ---- !u!23 &8935208047428161382 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3560077927356944975} - 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: 7626191068330388430, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - 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!1 &3914328615282515095 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5238094762803454210} - - component: {fileID: 7147932864071917323} - - component: {fileID: 1899873783639374680} - m_Layer: 8 - m_Name: Line014 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5238094762803454210 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3914328615282515095} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.059087772, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2551756477130393397} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7147932864071917323 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3914328615282515095} - m_Mesh: {fileID: -8319797619673022553, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} ---- !u!23 &1899873783639374680 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3914328615282515095} - 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: 7626191068330388430, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - 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!1 &4493080331930793757 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4153434092688388991} - - component: {fileID: 2718223713487455784} - - component: {fileID: 1043276211510239804} - m_Layer: 8 - m_Name: Line006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4153434092688388991 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4493080331930793757} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.06750342, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2551756477130393397} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2718223713487455784 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4493080331930793757} - m_Mesh: {fileID: -7332506622660098701, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} ---- !u!23 &1043276211510239804 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4493080331930793757} - 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: 7626191068330388430, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - 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!1 &4527781194863671193 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4948743655991837753} - - component: {fileID: 6784267233039737545} - - component: {fileID: 6020271159677454051} - m_Layer: 8 - m_Name: Line012 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4948743655991837753 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4527781194863671193} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.011841193, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2551756477130393397} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6784267233039737545 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4527781194863671193} - m_Mesh: {fileID: 1263235930235354705, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} ---- !u!23 &6020271159677454051 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4527781194863671193} - 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: 7626191068330388430, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - 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!1 &4757832454150227869 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1959388422607801307} - - component: {fileID: 6822309923055409913} - - component: {fileID: 5141846783976183621} - m_Layer: 8 - m_Name: Line008 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1959388422607801307 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4757832454150227869} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.020256825, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2551756477130393397} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6822309923055409913 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4757832454150227869} - m_Mesh: {fileID: -2696279837256549028, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} ---- !u!23 &5141846783976183621 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4757832454150227869} - 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: 7626191068330388430, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - 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!1 &5551176493472153916 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6073080341649564791} - - component: {fileID: 6682962230771204600} - - component: {fileID: 8434384333351593819} - m_Layer: 8 - m_Name: Line007 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6073080341649564791 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5551176493472153916} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.043880124, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2551756477130393397} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6682962230771204600 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5551176493472153916} - m_Mesh: {fileID: -7102589008999902672, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} ---- !u!23 &8434384333351593819 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5551176493472153916} - 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: 7626191068330388430, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - 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!1 &6012802955703658957 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6837869613822465821} - - component: {fileID: 6695214650775576576} - - component: {fileID: 8782866441861717804} - m_Layer: 8 - m_Name: Line015 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6837869613822465821 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6012802955703658957} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.08271107, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2551756477130393397} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6695214650775576576 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6012802955703658957} - m_Mesh: {fileID: 1228931217693930783, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} ---- !u!23 &8782866441861717804 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6012802955703658957} - 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: 7626191068330388430, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - 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!1 &6189532140819688483 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 103865199511136219} - - component: {fileID: 3688376331286829615} - - component: {fileID: 6809090584510246693} - m_Layer: 8 - m_Name: Object001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &103865199511136219 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6189532140819688483} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00017918646, y: 0.13583289, z: 0.000002114503} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2551756477130393397} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3688376331286829615 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6189532140819688483} - m_Mesh: {fileID: -3292925553009838691, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} ---- !u!23 &6809090584510246693 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6189532140819688483} - 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: 5629084884208175553, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - 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!1 &6879309069018290889 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2449020242173801671} - - component: {fileID: 488022082411566166} - - component: {fileID: 940618822633291104} - m_Layer: 8 - m_Name: Line013 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2449020242173801671 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6879309069018290889} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.03546448, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2551756477130393397} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &488022082411566166 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6879309069018290889} - m_Mesh: {fileID: 605361963917450513, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} ---- !u!23 &940618822633291104 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6879309069018290889} - 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: 7626191068330388430, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - 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!1 &7420322446278122514 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2883804993931818184} - - component: {fileID: 5571555616133265023} - - component: {fileID: 188177926039748629} - m_Layer: 8 - m_Name: Line004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2883804993931818184 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7420322446278122514} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.11475001, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2551756477130393397} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5571555616133265023 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7420322446278122514} - m_Mesh: {fileID: -1824870671384894608, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} ---- !u!23 &188177926039748629 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7420322446278122514} - 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: 7626191068330388430, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - 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!1 &7656318333482479642 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3078760807266941726} - - component: {fileID: 8359175107138255914} - - component: {fileID: 4536302088035787750} - m_Layer: 8 - m_Name: 3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3078760807266941726 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7656318333482479642} - 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: 2551756477130393397} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8359175107138255914 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7656318333482479642} - m_Mesh: {fileID: -5582133695706433325, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} ---- !u!23 &4536302088035787750 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7656318333482479642} - 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: 8290782892783832528, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - - {fileID: 4926594564522961014, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - - {fileID: 4200229718584059239, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - - {fileID: 2509464184655005107, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - - {fileID: -5004044949739458277, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - - {fileID: 7299142142098027381, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - - {fileID: 507964552181651666, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - - {fileID: 7182259056892446755, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - - {fileID: -4971594290552944009, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - - {fileID: -2510483096459867325, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - 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!1 &8178948170907188433 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1630333609126587890} - - component: {fileID: 862841876314934808} - - component: {fileID: 8354279762721414615} - m_Layer: 8 - m_Name: Line016 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1630333609126587890 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8178948170907188433} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.10633437, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2551756477130393397} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &862841876314934808 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8178948170907188433} - m_Mesh: {fileID: 1667030652818782739, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} ---- !u!23 &8354279762721414615 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8178948170907188433} - 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: 7626191068330388430, guid: f9fe981c6e8362241b920d00f0ba44de, type: 3} - 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} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/3.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/3.prefab.meta deleted file mode 100644 index 86ca558f8..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/3.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 77acb08534a99114f93afef53b3528de -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/34.prefab b/GQ_URP/GQ/Assets/prefab/老模型/34.prefab deleted file mode 100644 index 64326d41c..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/34.prefab +++ /dev/null @@ -1,4517 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &211179600635182741 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5066557544538380315} - - component: {fileID: 4826627883108544890} - - component: {fileID: 410283574244671922} - - component: {fileID: 5536541368429516649} - - component: {fileID: 4855502306654133777} - - component: {fileID: 4804797105468733145} - - component: {fileID: 4616399547374460666} - m_Layer: 8 - m_Name: Box038 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5066557544538380315 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 211179600635182741} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.038049847, y: 0.13191207, z: -0.13957444} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2323807279463894849} - - {fileID: 8607526046223303334} - - {fileID: 367815051256785282} - - {fileID: 8504550996323945344} - - {fileID: 6406056893501195330} - - {fileID: 3005721045404941302} - - {fileID: 23153824919431191} - - {fileID: 5127343832227409278} - m_Father: {fileID: 6661887471618749766} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4826627883108544890 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 211179600635182741} - m_Mesh: {fileID: 4236268024495968267, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} ---- !u!23 &410283574244671922 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 211179600635182741} - 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: -6257702196253466788, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 6570790101810915368, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 1368039103165038143, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -6307277589567570940, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -5956578104803850452, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8757356216087587297, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8625475798876401302, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 5153412432591461348, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 1668985204131210402, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -2712199210993112587, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 2891006847804744583, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - 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!114 &5536541368429516649 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 211179600635182741} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &4855502306654133777 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 211179600635182741} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &4804797105468733145 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 211179600635182741} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &4616399547374460666 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 211179600635182741} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 4236268024495968267, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} ---- !u!1 &359536582888312991 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4218749520360058616} - - component: {fileID: 1483309107700050682} - - component: {fileID: 6169683712718959897} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4218749520360058616 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 359536582888312991} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1453, y: -0.139, z: 0.0024} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5654317091999519885} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1483309107700050682 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 359536582888312991} - 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!114 &6169683712718959897 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 359536582888312991} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &510348373367607387 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7111340773418670447} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7111340773418670447 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 510348373367607387} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: -0.18000011, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6661887471618749766} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &573776796876448372 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5561294478770249263} - - component: {fileID: 8741374635175323820} - - component: {fileID: 6702546844952774184} - m_Layer: 11 - m_Name: Cube (23) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5561294478770249263 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 573776796876448372} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.121199995, y: -0.139, z: 0.0025} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1530126869910994255} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8741374635175323820 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 573776796876448372} - 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!114 &6702546844952774184 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 573776796876448372} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &641122907204713042 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1573604384347203559} - - component: {fileID: 8032408968072426024} - - component: {fileID: 3744826943044087552} - m_Layer: 8 - m_Name: Object008 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1573604384347203559 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 641122907204713042} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.24179916, y: 0.031673204, z: -0.17271423} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6661887471618749766} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8032408968072426024 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 641122907204713042} - m_Mesh: {fileID: -7647463442239531939, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} ---- !u!23 &3744826943044087552 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 641122907204713042} - 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: -6257702196253466788, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -3434006170440666942, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -6307277589567570940, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8757356216087587297, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -5956578104803850452, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 1368039103165038143, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8625475798876401302, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -2712199210993112587, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 5153412432591461348, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 2891006847804744583, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - 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!1 &1046362105423003318 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3354675668922076552} - - component: {fileID: 3866173480604067673} - - component: {fileID: 2088913282734672955} - m_Layer: 8 - m_Name: Object004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3354675668922076552 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1046362105423003318} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.24179916, y: 0.15008265, z: -0.17271423} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6661887471618749766} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3866173480604067673 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1046362105423003318} - m_Mesh: {fileID: -8113768720884857512, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} ---- !u!23 &2088913282734672955 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1046362105423003318} - 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: -5956578104803850452, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -6257702196253466788, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8625475798876401302, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -6307277589567570940, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8757356216087587297, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 1368039103165038143, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -2712199210993112587, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - 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!1 &1164146628533233032 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3107685116211605282} - - component: {fileID: 1389340825431300928} - - component: {fileID: 7964438235235551972} - m_Layer: 8 - m_Name: Box028 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3107685116211605282 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1164146628533233032} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.10173249, y: 0.16164167, z: -0.13957444} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6661887471618749766} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1389340825431300928 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1164146628533233032} - m_Mesh: {fileID: 4442130670313257827, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} ---- !u!23 &7964438235235551972 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1164146628533233032} - 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: -6257702196253466788, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8625475798876401302, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 1368039103165038143, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -6307277589567570940, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -5956578104803850452, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8757356216087587297, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -2712199210993112587, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - 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!1 &1266212515564334177 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2242965034991026524} - - component: {fileID: 1149705208598792425} - - component: {fileID: 7414144151449137578} - m_Layer: 11 - m_Name: Cube (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2242965034991026524 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1266212515564334177} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.049600005, y: -0.139, z: 0.0027} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1530126869910994255} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1149705208598792425 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1266212515564334177} - 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!114 &7414144151449137578 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1266212515564334177} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1554547557259135606 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1354357227231722861} - - component: {fileID: 3467132315894605166} - - component: {fileID: 3910929731098538295} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1354357227231722861 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1554547557259135606} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0255, y: -0.139, z: 0.0026} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5654317091999519885} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3467132315894605166 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1554547557259135606} - 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!114 &3910929731098538295 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1554547557259135606} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1930596428863166856 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8428510864571022692} - - component: {fileID: 7704936795950679319} - - component: {fileID: 3219708169349048047} - m_Layer: 8 - m_Name: Box029 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8428510864571022692 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1930596428863166856} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.038049847, y: 0.16164167, z: -0.13957444} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6661887471618749766} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7704936795950679319 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1930596428863166856} - m_Mesh: {fileID: -4783894591166569364, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} ---- !u!23 &3219708169349048047 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1930596428863166856} - 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: -6257702196253466788, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -7911987922143072104, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 1368039103165038143, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -6307277589567570940, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -5956578104803850452, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8757356216087587297, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 3757783504066616455, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8625475798876401302, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -2712199210993112587, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - 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!1 &2207879728200508449 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1560258696153703931} - - component: {fileID: 6131897633241614229} - - component: {fileID: 5828931361328429794} - m_Layer: 8 - m_Name: Box021 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1560258696153703931 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2207879728200508449} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0.0027962625, z: -0.35000005} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6661887471618749766} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6131897633241614229 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2207879728200508449} - m_Mesh: {fileID: 7875615444233757513, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} ---- !u!23 &5828931361328429794 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2207879728200508449} - 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: 1164559979738526386, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -1152147162816932204, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -5309146791756261813, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 1196480866727828669, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 5153412432591461348, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - 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!1 &2349025956807558674 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 630899321272914111} - - component: {fileID: 2408632148604117597} - - component: {fileID: 4077831583883981988} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &630899321272914111 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2349025956807558674} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0744, y: -0.139, z: 0.0024} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5654317091999519885} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2408632148604117597 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2349025956807558674} - 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!114 &4077831583883981988 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2349025956807558674} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2901428273580810718 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4236544024323524795} - - component: {fileID: 170854867685813257} - - component: {fileID: 7782382332699206010} - m_Layer: 8 - m_Name: Box026 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4236544024323524795 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2901428273580810718} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.10173249, y: 0.10239938, z: -0.13957444} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6661887471618749766} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &170854867685813257 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2901428273580810718} - m_Mesh: {fileID: -612376834313925032, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} ---- !u!23 &7782382332699206010 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2901428273580810718} - 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: -6257702196253466788, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8625475798876401302, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 1368039103165038143, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -6307277589567570940, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -5956578104803850452, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8757356216087587297, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -2712199210993112587, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - 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!1 &3151236584360220523 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8825276356994183415} - - component: {fileID: 2940057728301719369} - - component: {fileID: 3667568071045255936} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8825276356994183415 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3151236584360220523} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0476, y: -0.139, z: 0.0076} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 216823629289440828} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2940057728301719369 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3151236584360220523} - 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!114 &3667568071045255936 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3151236584360220523} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3191615016065002639 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6333110256700765493} - - component: {fileID: 6509163655871369235} - - component: {fileID: 2894641737294708198} - m_Layer: 11 - m_Name: Cube (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6333110256700765493 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3191615016065002639} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0255, y: -0.139, z: 0.0027} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1530126869910994255} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6509163655871369235 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3191615016065002639} - 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!114 &2894641737294708198 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3191615016065002639} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3195745209763368506 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8607526046223303334} - - component: {fileID: 4280938603915395434} - - component: {fileID: 526947380459516350} - m_Layer: 11 - m_Name: Cube (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8607526046223303334 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3195745209763368506} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.002799999, y: -0.139, z: 0.0022} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.01452} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5066557544538380315} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4280938603915395434 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3195745209763368506} - 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!114 &526947380459516350 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3195745209763368506} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3228029227265637531 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 595330452240053208} - - component: {fileID: 7525491541825018308} - - component: {fileID: 3024416146171508472} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &595330452240053208 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3228029227265637531} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0213, y: -0.139, z: 0.0027} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1530126869910994255} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7525491541825018308 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3228029227265637531} - 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!114 &3024416146171508472 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3228029227265637531} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3432254491914221676 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4045535378066143315} - - component: {fileID: 1849216517413469368} - - component: {fileID: 6612276571879298640} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4045535378066143315 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3432254491914221676} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0028, y: -0.139, z: 0.0026} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5654317091999519885} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1849216517413469368 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3432254491914221676} - 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!114 &6612276571879298640 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3432254491914221676} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3922767338257857673 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5011445510515690499} - - component: {fileID: 3156370361471068035} - - component: {fileID: 4339108062741953219} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5011445510515690499 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3922767338257857673} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1932, y: -0.139, z: 0.0283} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 216823629289440828} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3156370361471068035 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3922767338257857673} - 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!114 &4339108062741953219 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3922767338257857673} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4273663650026374966 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4266463111998918668} - - component: {fileID: 1152963608651844023} - - component: {fileID: 3281889405340325741} - m_Layer: 8 - m_Name: Object005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4266463111998918668 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4273663650026374966} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.24179916, y: 0.090877935, z: -0.17271423} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6661887471618749766} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1152963608651844023 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4273663650026374966} - m_Mesh: {fileID: 9186633843763367028, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} ---- !u!23 &3281889405340325741 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4273663650026374966} - 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: -6257702196253466788, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -3434006170440666942, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -6307277589567570940, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8757356216087587297, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -5956578104803850452, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 1368039103165038143, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8625475798876401302, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -2712199210993112587, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 5153412432591461348, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 2891006847804744583, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - 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!1 &4357967583903023696 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3143508776316985532} - - component: {fileID: 1659589222812040624} - - component: {fileID: 6999488505880156087} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3143508776316985532 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4357967583903023696} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.013599999, y: -0.139, z: 0.0088} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 216823629289440828} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1659589222812040624 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4357967583903023696} - 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!114 &6999488505880156087 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4357967583903023696} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4638450369448636763 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 672408095055419909} - - component: {fileID: 7997452611943711859} - - component: {fileID: 5917849798392996963} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &672408095055419909 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4638450369448636763} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0476, y: -0.139, z: 0.0254} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 216823629289440828} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7997452611943711859 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4638450369448636763} - 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!114 &5917849798392996963 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4638450369448636763} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5066468818738695155 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6406056893501195330} - - component: {fileID: 3503766648246139161} - - component: {fileID: 4919636573555749986} - m_Layer: 11 - m_Name: Cube (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6406056893501195330 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5066468818738695155} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0744, y: -0.139, z: 0.002} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.01452} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5066557544538380315} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3503766648246139161 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5066468818738695155} - 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!114 &4919636573555749986 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5066468818738695155} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5316975308645331844 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 367815051256785282} - - component: {fileID: 7076276081641220754} - - component: {fileID: 6178537039310004070} - m_Layer: 11 - m_Name: Cube (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &367815051256785282 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5316975308645331844} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0255, y: -0.139, z: 0.0022} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.01452} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5066557544538380315} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7076276081641220754 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5316975308645331844} - 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!114 &6178537039310004070 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5316975308645331844} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5326765462422778588 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5654317091999519885} - - component: {fileID: 5025315250263123665} - - component: {fileID: 6972236673200726121} - - component: {fileID: 8943881356403807942} - - component: {fileID: 1463953036554194327} - - component: {fileID: 871576066954318837} - - component: {fileID: 1932597473268942288} - m_Layer: 8 - m_Name: Box032 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5654317091999519885 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5326765462422778588} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.038049847, y: 0.072778225, z: -0.13957444} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 692108057844100287} - - {fileID: 4045535378066143315} - - {fileID: 1354357227231722861} - - {fileID: 3050222528221103660} - - {fileID: 630899321272914111} - - {fileID: 3492298468102370966} - - {fileID: 4866011844884630214} - - {fileID: 4218749520360058616} - m_Father: {fileID: 6661887471618749766} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5025315250263123665 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5326765462422778588} - m_Mesh: {fileID: -8672714952799723808, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} ---- !u!23 &6972236673200726121 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5326765462422778588} - 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: -6257702196253466788, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 6570790101810915368, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 1368039103165038143, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -6307277589567570940, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -5956578104803850452, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8757356216087587297, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8625475798876401302, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 5153412432591461348, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 1668985204131210402, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -2712199210993112587, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 2891006847804744583, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - 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!114 &8943881356403807942 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5326765462422778588} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 3 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &1463953036554194327 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5326765462422778588} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &871576066954318837 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5326765462422778588} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &1932597473268942288 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5326765462422778588} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -8672714952799723808, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} ---- !u!1 &5885842755507005048 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3492298468102370966} - - component: {fileID: 5410551794388542677} - - component: {fileID: 91003171503393799} - m_Layer: 11 - m_Name: Cube (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3492298468102370966 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5885842755507005048} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0985, y: -0.139, z: 0.0024} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5654317091999519885} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5410551794388542677 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5885842755507005048} - 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!114 &91003171503393799 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5885842755507005048} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6233062383578194830 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2323807279463894849} - - component: {fileID: 666459603109438873} - - component: {fileID: 5027496327048977442} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2323807279463894849 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6233062383578194830} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0213, y: -0.139, z: 0.0022} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.01452} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5066557544538380315} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &666459603109438873 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6233062383578194830} - 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!114 &5027496327048977442 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6233062383578194830} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6234303181216795036 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3005721045404941302} - - component: {fileID: 1258745378784248770} - - component: {fileID: 6972722358135703990} - m_Layer: 11 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3005721045404941302 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6234303181216795036} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0985, y: -0.139, z: 0.002} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.01452} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5066557544538380315} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1258745378784248770 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6234303181216795036} - 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!114 &6972722358135703990 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6234303181216795036} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6284799631461560316 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6661887471618749766} - - component: {fileID: 2441289295981276643} - - component: {fileID: 2022862618469303622} - - component: {fileID: 6838518116350105324} - - component: {fileID: 5514066922489985932} - - component: {fileID: -7556340595050109718} - m_Layer: 8 - m_Name: 34 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6661887471618749766 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6284799631461560316} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 1560258696153703931} - - {fileID: 6865272564100905085} - - {fileID: 216823629289440828} - - {fileID: 4236544024323524795} - - {fileID: 8059154758229095150} - - {fileID: 3107685116211605282} - - {fileID: 8428510864571022692} - - {fileID: 5654317091999519885} - - {fileID: 2411997279237208683} - - {fileID: 1530126869910994255} - - {fileID: 5066557544538380315} - - {fileID: 3354675668922076552} - - {fileID: 4266463111998918668} - - {fileID: 1573604384347203559} - - {fileID: 7111340773418670447} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &2441289295981276643 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6284799631461560316} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 34 - occupyNum: 4 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &2022862618469303622 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6284799631461560316} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 4 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &6838518116350105324 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6284799631461560316} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5514066922489985932 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6284799631461560316} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &-7556340595050109718 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6284799631461560316} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 4 - selfIcon: {fileID: 21300000, guid: 2c6d1d3e611f8b447a6845b2ab5a6806, type: 3} ---- !u!1 &6735628282828108719 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4466412789564272836} - - component: {fileID: 5335983480500550920} - - component: {fileID: 8021556303539809682} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4466412789564272836 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6735628282828108719} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1109, y: -0.139, z: 0.0083} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 216823629289440828} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5335983480500550920 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6735628282828108719} - 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!114 &8021556303539809682 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6735628282828108719} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6825439649360806709 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2201821569281485840} - - component: {fileID: 8111735221486228769} - - component: {fileID: 7932531137809437613} - m_Layer: 11 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2201821569281485840 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6825439649360806709} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0985, y: -0.139, z: 0.0025} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1530126869910994255} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8111735221486228769 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6825439649360806709} - 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!114 &7932531137809437613 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6825439649360806709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6903804893711475090 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7188567356813556265} - - component: {fileID: 4871464154988283935} - - component: {fileID: 937338152241786103} - m_Layer: 11 - m_Name: Cube (24) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7188567356813556265 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6903804893711475090} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1453, y: -0.139, z: 0.0025} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1530126869910994255} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4871464154988283935 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6903804893711475090} - 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!114 &937338152241786103 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6903804893711475090} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6909429221474467216 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6603692307306852809} - - component: {fileID: 7360320902992834669} - - component: {fileID: 7161251453704969092} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6603692307306852809 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6909429221474467216} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2756, y: -0.139, z: 0.009} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 216823629289440828} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7360320902992834669 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6909429221474467216} - 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!114 &7161251453704969092 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6909429221474467216} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7176714447338584649 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3643846452192409645} - - component: {fileID: 3780484299545070172} - - component: {fileID: 3526125057688758455} - m_Layer: 11 - m_Name: Cube (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3643846452192409645 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7176714447338584649} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0744, y: -0.139, z: 0.0025} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1530126869910994255} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3780484299545070172 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7176714447338584649} - 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!114 &3526125057688758455 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7176714447338584649} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7179947478024996715 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 692108057844100287} - - component: {fileID: 1383913871070836062} - - component: {fileID: 4937051069785091752} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &692108057844100287 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7179947478024996715} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0213, y: -0.139, z: 0.0026} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5654317091999519885} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1383913871070836062 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7179947478024996715} - 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!114 &4937051069785091752 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7179947478024996715} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7185393131930190585 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3050222528221103660} - - component: {fileID: 1226854946045419288} - - component: {fileID: 607786887668190954} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3050222528221103660 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7185393131930190585} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0496, y: -0.139, z: 0.0026} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5654317091999519885} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1226854946045419288 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7185393131930190585} - 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!114 &607786887668190954 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7185393131930190585} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7326070818963863928 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8504550996323945344} - - component: {fileID: 1134667266495423922} - - component: {fileID: 9066697208951467386} - m_Layer: 11 - m_Name: Cube (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8504550996323945344 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7326070818963863928} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.049600005, y: -0.139, z: 0.0022} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.01452} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5066557544538380315} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1134667266495423922 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7326070818963863928} - 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!114 &9066697208951467386 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7326070818963863928} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7336224205587663452 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3805370119520008356} - - component: {fileID: 1942528372928051570} - - component: {fileID: 7686069725966620225} - m_Layer: 11 - m_Name: Cube (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3805370119520008356 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7336224205587663452} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.002799999, y: -0.139, z: 0.0027} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1530126869910994255} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1942528372928051570 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7336224205587663452} - 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!114 &7686069725966620225 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7336224205587663452} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7369121509467289480 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6406677105779159973} - - component: {fileID: 4239512635488417595} - - component: {fileID: 7247532138772167457} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6406677105779159973 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7369121509467289480} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2756, y: -0.139, z: 0.0294} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 216823629289440828} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4239512635488417595 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7369121509467289480} - 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!114 &7247532138772167457 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7369121509467289480} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7386037428869732566 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8059154758229095150} - - component: {fileID: 1970756218357162815} - - component: {fileID: 3486247007000583923} - m_Layer: 8 - m_Name: Box027 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8059154758229095150 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7386037428869732566} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.10173249, y: 0.13202053, z: -0.13957444} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6661887471618749766} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1970756218357162815 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7386037428869732566} - m_Mesh: {fileID: -75171668026845272, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} ---- !u!23 &3486247007000583923 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7386037428869732566} - 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: -6257702196253466788, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8625475798876401302, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 1368039103165038143, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -6307277589567570940, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -5956578104803850452, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8757356216087587297, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -2712199210993112587, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - 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!1 &7724681966222527202 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6865272564100905085} - - component: {fileID: 3223322573905534394} - - component: {fileID: 1497305076916502135} - m_Layer: 8 - m_Name: Box024 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6865272564100905085 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7724681966222527202} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.10173249, y: 0.072778225, z: -0.13957444} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6661887471618749766} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3223322573905534394 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7724681966222527202} - m_Mesh: {fileID: 106541212177282163, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} ---- !u!23 &1497305076916502135 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7724681966222527202} - 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: -6257702196253466788, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8625475798876401302, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 1368039103165038143, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -6307277589567570940, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -5956578104803850452, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8757356216087587297, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -2712199210993112587, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - 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!1 &7899290025050435630 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5127343832227409278} - - component: {fileID: 7215096557924272676} - - component: {fileID: 2615486900161762313} - m_Layer: 11 - m_Name: Cube (24) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5127343832227409278 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7899290025050435630} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1453, y: -0.139, z: 0.002} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.01452} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5066557544538380315} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7215096557924272676 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7899290025050435630} - 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!114 &2615486900161762313 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7899290025050435630} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8227128610633988986 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4866011844884630214} - - component: {fileID: 1102971521703993376} - - component: {fileID: 7810720074683159023} - m_Layer: 11 - m_Name: Cube (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4866011844884630214 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8227128610633988986} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1212, y: -0.139, z: 0.0024} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5654317091999519885} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1102971521703993376 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8227128610633988986} - 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!114 &7810720074683159023 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8227128610633988986} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8429274440550532439 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1530126869910994255} - - component: {fileID: 6138132045788270500} - - component: {fileID: 5142048414513329023} - - component: {fileID: 6882161370228353367} - - component: {fileID: 5138657721748507333} - - component: {fileID: 666568118425309965} - - component: {fileID: 3890289824488059846} - m_Layer: 8 - m_Name: Box037 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1530126869910994255 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8429274440550532439} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.038049847, y: 0.10239784, z: -0.13957444} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 595330452240053208} - - {fileID: 3805370119520008356} - - {fileID: 6333110256700765493} - - {fileID: 2242965034991026524} - - {fileID: 3643846452192409645} - - {fileID: 2201821569281485840} - - {fileID: 5561294478770249263} - - {fileID: 7188567356813556265} - m_Father: {fileID: 6661887471618749766} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6138132045788270500 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8429274440550532439} - m_Mesh: {fileID: 5884580939788738644, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} ---- !u!23 &5142048414513329023 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8429274440550532439} - 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: -6257702196253466788, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 6570790101810915368, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 1368039103165038143, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -6307277589567570940, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -5956578104803850452, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8757356216087587297, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8625475798876401302, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 5153412432591461348, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 1668985204131210402, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -2712199210993112587, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 2891006847804744583, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - 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!114 &6882161370228353367 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8429274440550532439} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &5138657721748507333 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8429274440550532439} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &666568118425309965 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8429274440550532439} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &3890289824488059846 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8429274440550532439} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 5884580939788738644, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} ---- !u!1 &8692180705135934017 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 216823629289440828} - - component: {fileID: 7559721074340935752} - - component: {fileID: 1531000305632882117} - - component: {fileID: 6059225842919192054} - - component: {fileID: 8570001100903353539} - - component: {fileID: 2720356029838406136} - - component: {fileID: 942113258531192850} - m_Layer: 8 - m_Name: Box025 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &216823629289440828 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8692180705135934017} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.10173249, y: 0.01793683, z: -0.13957444} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 672408095055419909} - - {fileID: 2670204093459864350} - - {fileID: 5011445510515690499} - - {fileID: 6406677105779159973} - - {fileID: 3143508776316985532} - - {fileID: 8825276356994183415} - - {fileID: 4466412789564272836} - - {fileID: 5598678154926644778} - - {fileID: 6603692307306852809} - m_Father: {fileID: 6661887471618749766} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7559721074340935752 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8692180705135934017} - m_Mesh: {fileID: 1593996420852118269, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} ---- !u!23 &1531000305632882117 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8692180705135934017} - 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: -6257702196253466788, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -3434006170440666942, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 1368039103165038143, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -6307277589567570940, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -5956578104803850452, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8757356216087587297, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8625475798876401302, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -2712199210993112587, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -9106974961608234918, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 5153412432591461348, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 2891006847804744583, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - 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!114 &6059225842919192054 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8692180705135934017} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 4 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &8570001100903353539 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8692180705135934017} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &2720356029838406136 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8692180705135934017} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &942113258531192850 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8692180705135934017} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 1593996420852118269, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} ---- !u!1 &8858240227962012693 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5598678154926644778} - - component: {fileID: 2835396568646206243} - - component: {fileID: 694700122313480477} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5598678154926644778 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8858240227962012693} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1932, y: -0.139, z: 0.0075} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 216823629289440828} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2835396568646206243 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8858240227962012693} - 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!114 &694700122313480477 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8858240227962012693} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8890122573950211754 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 23153824919431191} - - component: {fileID: 5307698217329159016} - - component: {fileID: 1727632524395911233} - m_Layer: 11 - m_Name: Cube (23) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &23153824919431191 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8890122573950211754} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.121199995, y: -0.139, z: 0.002} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.01452} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5066557544538380315} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5307698217329159016 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8890122573950211754} - 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!114 &1727632524395911233 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8890122573950211754} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9089432070071372465 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2670204093459864350} - - component: {fileID: 6663737734951301708} - - component: {fileID: 7598418268503852778} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2670204093459864350 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9089432070071372465} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1109, y: -0.139, z: 0.0284} - m_LocalScale: {x: 0.018129999, y: 0.018129999, z: 0.014519029} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 216823629289440828} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6663737734951301708 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9089432070071372465} - 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!114 &7598418268503852778 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9089432070071372465} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9097723101863688110 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2411997279237208683} - - component: {fileID: 5980557253736225053} - - component: {fileID: 5158442008187582514} - m_Layer: 8 - m_Name: Box033 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2411997279237208683 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9097723101863688110} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.24179916, y: 0.09087796, z: -0.13957444} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6661887471618749766} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5980557253736225053 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9097723101863688110} - m_Mesh: {fileID: 5924061002115919974, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} ---- !u!23 &5158442008187582514 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9097723101863688110} - 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: -6257702196253466788, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 3757783504066616455, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: 1368039103165038143, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -6307277589567570940, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -5956578104803850452, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -8757356216087587297, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - - {fileID: -4574527834605171866, guid: 88d44f5b2ebee0a4dbff0e650d202634, type: 3} - 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} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/34.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/34.prefab.meta deleted file mode 100644 index e3ffbca38..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/34.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 8dd44e7a6e390fd409f64fd06892c1a8 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/36.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/36.prefab.meta deleted file mode 100644 index 8b0d21699..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/36.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: f84c460876383074a9291de4151c0c9f -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/38.prefab b/GQ_URP/GQ/Assets/prefab/老模型/38.prefab deleted file mode 100644 index 6daec4ea5..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/38.prefab +++ /dev/null @@ -1,881 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &660517159284233709 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 171541920669994839} - - component: {fileID: 4564827177063679699} - - component: {fileID: 385479647228923636} - - component: {fileID: 7629563924810372688} - - component: {fileID: 1980956829959994862} - - component: {fileID: 4554941652014140006} - m_Layer: 8 - m_Name: 38 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &171541920669994839 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 660517159284233709} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 842503175481930620} - - {fileID: 652333463281269930} - - {fileID: 18322265344567918} - - {fileID: 1777565905422088989} - - {fileID: 7618309257285118304} - - {fileID: 9217785038729650047} - - {fileID: 4010670213793686928} - - {fileID: 2902103063150163117} - - {fileID: 7799524681683047914} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &4564827177063679699 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 660517159284233709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 38 - occupyNum: 3 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &385479647228923636 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 660517159284233709} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 3 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &7629563924810372688 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 660517159284233709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1980956829959994862 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 660517159284233709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &4554941652014140006 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 660517159284233709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 3 - selfIcon: {fileID: 21300000, guid: bf6c3a315c0440041ac3798d77c08abf, type: 3} ---- !u!1 &1184209806666668589 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 18322265344567918} - - component: {fileID: 1391136010832143495} - - component: {fileID: 6703859730762008324} - m_Layer: 8 - m_Name: Line005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &18322265344567918 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1184209806666668589} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.12481877, y: 0.08473359, z: 0.007120952} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 171541920669994839} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1391136010832143495 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1184209806666668589} - m_Mesh: {fileID: 3442923855343079542, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} ---- !u!23 &6703859730762008324 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1184209806666668589} - 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: 7626191068330388430, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} - 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!1 &1661219598544787190 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7799524681683047914} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7799524681683047914 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1661219598544787190} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -0.13500002, z: 0.25} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 171541920669994839} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1682839561165133045 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7618309257285118304} - - component: {fileID: 4772223070875129705} - - component: {fileID: 4275444003250484026} - m_Layer: 8 - m_Name: Line014 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7618309257285118304 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1682839561165133045} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.10353556, y: 0.08446571, z: 0.007120952} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 171541920669994839} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4772223070875129705 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1682839561165133045} - m_Mesh: {fileID: -8319797619673022553, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} ---- !u!23 &4275444003250484026 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1682839561165133045} - 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: 7626191068330388430, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} - 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!1 &2256998619891646335 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1777565905422088989} - - component: {fileID: 338274201335090762} - - component: {fileID: 3418987099890231902} - m_Layer: 8 - m_Name: Line006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1777565905422088989 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2256998619891646335} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.10119548, y: 0.08473359, z: 0.007120952} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 171541920669994839} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &338274201335090762 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2256998619891646335} - m_Mesh: {fileID: -7332506622660098701, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} ---- !u!23 &3418987099890231902 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2256998619891646335} - 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: 7626191068330388430, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} - 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!1 &5184381473841779824 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 652333463281269930} - - component: {fileID: 7807830910937857565} - - component: {fileID: 2563764640506710135} - m_Layer: 8 - m_Name: Line004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &652333463281269930 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5184381473841779824} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.14844206, y: 0.08473359, z: 0.007120952} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 171541920669994839} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7807830910937857565 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5184381473841779824} - m_Mesh: {fileID: -1824870671384894608, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} ---- !u!23 &2563764640506710135 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5184381473841779824} - 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: 7626191068330388430, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} - 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!1 &5424705036699564152 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 842503175481930620} - - component: {fileID: 6127457288030794824} - - component: {fileID: 2304987856496176004} - m_Layer: 8 - m_Name: 3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &842503175481930620 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5424705036699564152} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -3.480375e-16, y: -0.000000007450581, z: -0.00000011175871} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 171541920669994839} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6127457288030794824 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5424705036699564152} - m_Mesh: {fileID: 5937406200044882947, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} ---- !u!23 &2304987856496176004 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5424705036699564152} - 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: 367213180074456369, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} - - {fileID: 3274929075364713951, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} - - {fileID: 1164559979738526386, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} - - {fileID: 1196480866727828669, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} - - {fileID: -5309146791756261813, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} - - {fileID: -1152147162816932204, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} - - {fileID: 7182259056892446755, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} - - {fileID: -4971594290552944009, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} - - {fileID: -2510483096459867325, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} - - {fileID: 507964552181651666, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} - 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!1 &5803361527309776051 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4010670213793686928} - - component: {fileID: 3094455172833871482} - - component: {fileID: 5978675456063952309} - m_Layer: 8 - m_Name: Line016 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4010670213793686928 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5803361527309776051} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.15078217, y: 0.08446571, z: 0.007120952} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 171541920669994839} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3094455172833871482 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5803361527309776051} - m_Mesh: {fileID: 1667030652818782739, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} ---- !u!23 &5978675456063952309 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5803361527309776051} - 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: 7626191068330388430, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} - 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!1 &6596080216970599320 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2902103063150163117} - - component: {fileID: 8504822092677108649} - - component: {fileID: 8387787810815106600} - m_Layer: 8 - m_Name: Object002 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2902103063150163117 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6596080216970599320} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00017918646, y: 0.117067605, z: -0.000000044703484} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 171541920669994839} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8504822092677108649 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6596080216970599320} - m_Mesh: {fileID: -3996760141626369306, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} ---- !u!23 &8387787810815106600 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6596080216970599320} - 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: 5629084884208175553, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} - 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!1 &8248655969326064047 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9217785038729650047} - - component: {fileID: 9071083939460769890} - - component: {fileID: 6407455644993623886} - m_Layer: 8 - m_Name: Line015 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9217785038729650047 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8248655969326064047} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.12715887, y: 0.08446571, z: 0.007120952} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 171541920669994839} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &9071083939460769890 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8248655969326064047} - m_Mesh: {fileID: 1228931217693930783, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} ---- !u!23 &6407455644993623886 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8248655969326064047} - 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: 7626191068330388430, guid: 9f27b6d1d1c71034f98ae7a62fa6d373, type: 3} - 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} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/38.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/38.prefab.meta deleted file mode 100644 index c4b404589..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/38.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 908214c6d1a1ea94bb4bc5bbe6d9b8ea -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/4.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/4.prefab.meta deleted file mode 100644 index c34d20d66..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/4.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 6dc387043680e204a81079caddcd58f9 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/40.prefab b/GQ_URP/GQ/Assets/prefab/老模型/40.prefab deleted file mode 100644 index dc33c82b8..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/40.prefab +++ /dev/null @@ -1,1569 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &1184970929093594873 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1277640771601903418} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1277640771601903418 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1184970929093594873} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0, y: -0.22500005, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4264141278176841211} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1577588355678313600 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2992432798032932180} - - component: {fileID: 2239206778770600035} - - component: {fileID: 1631370532459384404} - m_Layer: 8 - m_Name: Object003 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2992432798032932180 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1577588355678313600} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.15478976, y: 0.0010635629, z: -0.26500002} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4264141278176841211} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2239206778770600035 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1577588355678313600} - m_Mesh: {fileID: -3531946766418785785, guid: 38d78f271938d6c4686b952b3257872c, type: 3} ---- !u!23 &1631370532459384404 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1577588355678313600} - 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: -6257702196253466788, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 7333596864067321839, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 1368039103165038143, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -6307277589567570940, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5956578104803850452, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -8757356216087587297, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5876798485316771813, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -2856276290817592405, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - 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!1 &2810046648525019730 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1648481020246989325} - - component: {fileID: 3672920119116337413} - - component: {fileID: 6163367089012425566} - m_Layer: 8 - m_Name: Object012 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1648481020246989325 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2810046648525019730} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1806715, y: 0.11099168, z: -0.25641993} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4264141278176841211} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3672920119116337413 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2810046648525019730} - m_Mesh: {fileID: -1141464603633071787, guid: 38d78f271938d6c4686b952b3257872c, type: 3} ---- !u!23 &6163367089012425566 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2810046648525019730} - 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: -6257702196253466788, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -7530777962495022585, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 1368039103165038143, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -8757356216087587297, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5956578104803850452, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -6307277589567570940, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -2856276290817592405, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5876798485316771813, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 5988431801309703379, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - 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!1 &3135996091849237198 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1055212929881676624} - - component: {fileID: 3323637707555439541} - - component: {fileID: 9193430207230639956} - m_Layer: 8 - m_Name: Box014 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1055212929881676624 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3135996091849237198} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.28979826, y: 0.0010635629, z: -0.26500002} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4264141278176841211} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3323637707555439541 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3135996091849237198} - m_Mesh: {fileID: 3868671361854562809, guid: 38d78f271938d6c4686b952b3257872c, type: 3} ---- !u!23 &9193430207230639956 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3135996091849237198} - 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: -6257702196253466788, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 1094885644101776934, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 1368039103165038143, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -6307277589567570940, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5956578104803850452, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -8757356216087587297, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 5629084884208175553, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 5988431801309703379, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - 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!1 &3487639110657496897 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4264141278176841211} - - component: {fileID: 2592679181768141508} - - component: {fileID: 8561342049822640190} - - component: {fileID: 8061657446060233846} - - component: {fileID: -3916674362179166427} - - component: {fileID: 3266049450698866592} - m_Layer: 8 - m_Name: 40 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4264141278176841211 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3487639110657496897} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 2006589141228969354} - - {fileID: 1055212929881676624} - - {fileID: 1816619434274827541} - - {fileID: 1227902483250247169} - - {fileID: 2992432798032932180} - - {fileID: 5318945784824427829} - - {fileID: 6659424333330032817} - - {fileID: 234248703693956406} - - {fileID: 7321450187135776137} - - {fileID: 8252866538679918426} - - {fileID: 232752188853729006} - - {fileID: 1648481020246989325} - - {fileID: 8004485417830690144} - - {fileID: 1277640771601903418} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &2592679181768141508 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3487639110657496897} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 40 - occupyNum: 5 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &8561342049822640190 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3487639110657496897} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 5 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &8061657446060233846 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3487639110657496897} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &-3916674362179166427 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3487639110657496897} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &3266049450698866592 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3487639110657496897} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 5 - selfIcon: {fileID: 21300000, guid: a50f99391ba948b47989b5628e451711, type: 3} ---- !u!1 &4698045747050008023 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8004485417830690144} - - component: {fileID: 8982527483363008537} - - component: {fileID: 5722694692459385781} - m_Layer: 8 - m_Name: Object013 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8004485417830690144 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4698045747050008023} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.024988987, y: 0.0010635629, z: -0.26500002} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4264141278176841211} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8982527483363008537 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4698045747050008023} - m_Mesh: {fileID: 2871469715313346890, guid: 38d78f271938d6c4686b952b3257872c, type: 3} ---- !u!23 &5722694692459385781 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4698045747050008023} - 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: -6257702196253466788, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 2696349608891075368, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 1368039103165038143, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -6307277589567570940, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5956578104803850452, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -8757356216087587297, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5876798485316771813, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -2856276290817592405, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - 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!1 &4756594923095113091 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2006589141228969354} - - component: {fileID: 493447436693472800} - - component: {fileID: 2282766945455079146} - m_Layer: 8 - m_Name: Box012 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2006589141228969354 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4756594923095113091} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0.000000014901161, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4264141278176841211} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &493447436693472800 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4756594923095113091} - m_Mesh: {fileID: -8586770294792153069, guid: 38d78f271938d6c4686b952b3257872c, type: 3} ---- !u!23 &2282766945455079146 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4756594923095113091} - 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: 1368039103165038143, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -6307277589567570940, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5956578104803850452, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 3925418980499852262, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -6257702196253466788, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -2856276290817592405, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - 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!1 &5593839800144422637 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1816619434274827541} - - component: {fileID: 3128686322079240417} - - component: {fileID: 5060448210721957355} - m_Layer: 8 - m_Name: Object001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1816619434274827541 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5593839800144422637} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.24467914, y: 0.0010635629, z: -0.26500002} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4264141278176841211} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3128686322079240417 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5593839800144422637} - m_Mesh: {fileID: -3292925553009838691, guid: 38d78f271938d6c4686b952b3257872c, type: 3} ---- !u!23 &5060448210721957355 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5593839800144422637} - 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: -6257702196253466788, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 1094885644101776934, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 1368039103165038143, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -6307277589567570940, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5956578104803850452, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -8757356216087587297, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 5629084884208175553, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 5988431801309703379, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - 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!1 &6253697007884060736 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 234248703693956406} - - component: {fileID: 988500483130086676} - - component: {fileID: 4909395045383364897} - m_Layer: 8 - m_Name: Object006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &234248703693956406 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6253697007884060736} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.10984507, y: 0.0010635629, z: -0.26500002} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4264141278176841211} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &988500483130086676 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6253697007884060736} - m_Mesh: {fileID: -2639241166356525208, guid: 38d78f271938d6c4686b952b3257872c, type: 3} ---- !u!23 &4909395045383364897 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6253697007884060736} - 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: -6257702196253466788, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 7333596864067321839, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 1368039103165038143, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -6307277589567570940, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5956578104803850452, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -8757356216087587297, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5876798485316771813, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -2856276290817592405, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - 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!1 &6634251745212514187 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6659424333330032817} - - component: {fileID: 8601493717043327242} - - component: {fileID: 5392251017936498640} - m_Layer: 8 - m_Name: Object005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6659424333330032817 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6634251745212514187} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.019955695, y: 0.0010635629, z: -0.26500002} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4264141278176841211} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8601493717043327242 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6634251745212514187} - m_Mesh: {fileID: 9186633843763367028, guid: 38d78f271938d6c4686b952b3257872c, type: 3} ---- !u!23 &5392251017936498640 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6634251745212514187} - 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: -6257702196253466788, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 1094885644101776934, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 1368039103165038143, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -6307277589567570940, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5956578104803850452, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -8757356216087587297, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 5629084884208175553, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 5988431801309703379, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - 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!1 &6655095731202453547 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 232752188853729006} - - component: {fileID: 7476709456652644134} - - component: {fileID: 5391408821333635506} - m_Layer: 8 - m_Name: Object011 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &232752188853729006 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6655095731202453547} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.26802358, y: 0.11099168, z: -0.25641993} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4264141278176841211} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7476709456652644134 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6655095731202453547} - m_Mesh: {fileID: -3243264717552843444, guid: 38d78f271938d6c4686b952b3257872c, type: 3} ---- !u!23 &5391408821333635506 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6655095731202453547} - 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: -6257702196253466788, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -7530777962495022585, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 1368039103165038143, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -8757356216087587297, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5956578104803850452, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -6307277589567570940, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -2856276290817592405, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5876798485316771813, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 5988431801309703379, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - 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!1 &7117316419910605108 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1227902483250247169} - - component: {fileID: 5713668456595443973} - - component: {fileID: 5560640434309192836} - m_Layer: 8 - m_Name: Object002 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1227902483250247169 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7117316419910605108} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.19973445, y: 0.0010635629, z: -0.26500002} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4264141278176841211} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5713668456595443973 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7117316419910605108} - m_Mesh: {fileID: -3996760141626369306, guid: 38d78f271938d6c4686b952b3257872c, type: 3} ---- !u!23 &5560640434309192836 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7117316419910605108} - 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: -6257702196253466788, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 7333596864067321839, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 1368039103165038143, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -6307277589567570940, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5956578104803850452, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -8757356216087587297, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5876798485316771813, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -2856276290817592405, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - 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!1 &7627952589196264971 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5318945784824427829} - - component: {fileID: 5979068324435894244} - - component: {fileID: 8909190084201591942} - m_Layer: 8 - m_Name: Object004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5318945784824427829 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7627952589196264971} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.06490038, y: 0.0010635629, z: -0.26500002} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4264141278176841211} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5979068324435894244 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7627952589196264971} - m_Mesh: {fileID: -8113768720884857512, guid: 38d78f271938d6c4686b952b3257872c, type: 3} ---- !u!23 &8909190084201591942 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7627952589196264971} - 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: -6257702196253466788, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 7333596864067321839, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 1368039103165038143, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -6307277589567570940, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5956578104803850452, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -8757356216087587297, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5876798485316771813, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -2856276290817592405, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - 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!1 &8051094036988494575 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8252866538679918426} - - component: {fileID: 587257800697318037} - - component: {fileID: 6099790336170530749} - - component: {fileID: 8935016639588556056} - - component: {fileID: 7552792017517956235} - - component: {fileID: 6441957946964529183} - - component: {fileID: 7894469380913427875} - m_Layer: 8 - m_Name: Object008 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8252866538679918426 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8051094036988494575} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.11487836, y: 0.0010635629, z: -0.26500002} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 5352708336089333014} - m_Father: {fileID: 4264141278176841211} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &587257800697318037 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8051094036988494575} - m_Mesh: {fileID: -7647463442239531939, guid: 38d78f271938d6c4686b952b3257872c, type: 3} ---- !u!23 &6099790336170530749 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8051094036988494575} - 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: -6257702196253466788, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 7383696340792165028, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 1368039103165038143, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -6307277589567570940, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5956578104803850452, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -8757356216087587297, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5876798485316771813, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -2856276290817592405, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - 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!114 &8935016639588556056 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8051094036988494575} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7552792017517956235 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8051094036988494575} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &6441957946964529183 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8051094036988494575} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &7894469380913427875 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8051094036988494575} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -7647463442239531939, guid: 38d78f271938d6c4686b952b3257872c, type: 3} ---- !u!1 &8453867996110597155 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5352708336089333014} - - component: {fileID: 7044367963442426493} - - component: {fileID: 3750501620035810565} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5352708336089333014 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8453867996110597155} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0013, y: -0.273, z: 0.1109} - m_LocalScale: {x: 0.018889, y: 0.018889, z: 0.018889} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8252866538679918426} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7044367963442426493 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8453867996110597155} - 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!114 &3750501620035810565 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8453867996110597155} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9067791156518263222 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7321450187135776137} - - component: {fileID: 7804920174059397446} - - component: {fileID: 1425620605721019104} - m_Layer: 8 - m_Name: Object007 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7321450187135776137 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9067791156518263222} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.06993367, y: 0.0010635629, z: -0.26500002} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4264141278176841211} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7804920174059397446 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9067791156518263222} - m_Mesh: {fileID: 7733717212360752527, guid: 38d78f271938d6c4686b952b3257872c, type: 3} ---- !u!23 &1425620605721019104 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9067791156518263222} - 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: -6257702196253466788, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 2696349608891075368, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: 1368039103165038143, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -6307277589567570940, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5956578104803850452, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -8757356216087587297, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -5876798485316771813, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - - {fileID: -2856276290817592405, guid: 38d78f271938d6c4686b952b3257872c, type: 3} - 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} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/40.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/40.prefab.meta deleted file mode 100644 index c90e8df41..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/40.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 4fc5591fe1f39aa498726e4508e97d1e -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/42.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/42.prefab.meta deleted file mode 100644 index 999f08727..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/42.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: d2685571024f2154fa5fbfe0cdbfa303 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/46.prefab b/GQ_URP/GQ/Assets/prefab/老模型/46.prefab deleted file mode 100644 index 29ac57633..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/46.prefab +++ /dev/null @@ -1,1048 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &113695161234866351 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7400118858961113484} - - component: {fileID: 8929500341255303782} - - component: {fileID: 280003885759439273} - m_Layer: 8 - m_Name: Line016 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7400118858961113484 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 113695161234866351} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.12906155, y: 0.07690134, z: 0.007120952} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6015458754214886219} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8929500341255303782 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 113695161234866351} - m_Mesh: {fileID: 1667030652818782739, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} ---- !u!23 &280003885759439273 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 113695161234866351} - 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: 7626191068330388430, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} - 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!1 &1650812057128722540 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6347769242269026486} - - component: {fileID: 4413738134804728321} - - component: {fileID: 8254554894833187947} - m_Layer: 8 - m_Name: Line004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6347769242269026486 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1650812057128722540} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.036301535, y: 0.076901354, z: 0.007120952} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6015458754214886219} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4413738134804728321 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1650812057128722540} - m_Mesh: {fileID: -1824870671384894608, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} ---- !u!23 &8254554894833187947 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1650812057128722540} - 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: 7626191068330388430, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} - 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!1 &1896630993605725284 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6533438309788501856} - - component: {fileID: 293677743388115028} - - component: {fileID: 5685431228714016664} - m_Layer: 8 - m_Name: 46 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6533438309788501856 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1896630993605725284} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.0015179515, y: -0.000000007450581, z: -0.00000011175871} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6015458754214886219} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &293677743388115028 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1896630993605725284} - m_Mesh: {fileID: 9153491538096164589, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} ---- !u!23 &5685431228714016664 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1896630993605725284} - 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: 3105233257905414779, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} - - {fileID: 3274929075364713951, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} - - {fileID: 1164559979738526386, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} - - {fileID: 1196480866727828669, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} - - {fileID: -5309146791756261813, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} - - {fileID: -1152147162816932204, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} - - {fileID: 7182259056892446755, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} - - {fileID: -4971594290552944009, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} - - {fileID: -2510483096459867325, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} - 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!1 &2549986597507929523 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3384003280568216419} - - component: {fileID: 3240539364726217854} - - component: {fileID: 716522437512586066} - m_Layer: 8 - m_Name: Line015 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3384003280568216419 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2549986597507929523} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.10543825, y: 0.07690134, z: 0.007120952} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6015458754214886219} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3240539364726217854 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2549986597507929523} - m_Mesh: {fileID: 1228931217693930783, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} ---- !u!23 &716522437512586066 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2549986597507929523} - 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: 7626191068330388430, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} - 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!1 &3571178858480394794 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7451199945285106737} - - component: {fileID: 2092640902059184285} - - component: {fileID: 8789055463649089616} - m_Layer: 8 - m_Name: Line018 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7451199945285106737 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3571178858480394794} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.058191646, y: 0.07690134, z: 0.007120952} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6015458754214886219} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2092640902059184285 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3571178858480394794} - m_Mesh: {fileID: -2144492602232178039, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} ---- !u!23 &8789055463649089616 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3571178858480394794} - 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: 7626191068330388430, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} - 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!1 &4716793977733705265 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5862380127890284146} - - component: {fileID: 4779459942040277147} - - component: {fileID: 869941581094843160} - m_Layer: 8 - m_Name: Line005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5862380127890284146 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4716793977733705265} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.012678247, y: 0.076901354, z: 0.007120952} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6015458754214886219} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4779459942040277147 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4716793977733705265} - m_Mesh: {fileID: 3442923855343079542, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} ---- !u!23 &869941581094843160 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4716793977733705265} - 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: 7626191068330388430, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} - 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!1 &5062298870472155369 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4081361107924475260} - - component: {fileID: 1378123695520605045} - - component: {fileID: 7660392075136059174} - m_Layer: 8 - m_Name: Line014 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4081361107924475260 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5062298870472155369} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.081814945, y: 0.07690134, z: 0.007120952} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6015458754214886219} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1378123695520605045 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5062298870472155369} - m_Mesh: {fileID: -8319797619673022553, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} ---- !u!23 &7660392075136059174 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5062298870472155369} - 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: 7626191068330388430, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} - 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!1 &5640824380319746915 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5310145762207010561} - - component: {fileID: 6173178563544726102} - - component: {fileID: 9108790887738760770} - m_Layer: 8 - m_Name: Line006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5310145762207010561 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5640824380319746915} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.010945048, y: 0.076901354, z: 0.007120952} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6015458754214886219} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6173178563544726102 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5640824380319746915} - m_Mesh: {fileID: -7332506622660098701, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} ---- !u!23 &9108790887738760770 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5640824380319746915} - 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: 7626191068330388430, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} - 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!1 &6101736556129961031 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4395645583267387987} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4395645583267387987 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6101736556129961031} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: -0.13500002, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6015458754214886219} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &6354829148813107697 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6015458754214886219} - - component: {fileID: 6310165116331426092} - - component: {fileID: 4114551128252824127} - - component: {fileID: 6223643065883030285} - - component: {fileID: -5442724963603031675} - - component: {fileID: 8508659963105789836} - m_Layer: 8 - m_Name: 46 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6015458754214886219 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6354829148813107697} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 6533438309788501856} - - {fileID: 6347769242269026486} - - {fileID: 5862380127890284146} - - {fileID: 5310145762207010561} - - {fileID: 4081361107924475260} - - {fileID: 3384003280568216419} - - {fileID: 7400118858961113484} - - {fileID: 4800875668442648907} - - {fileID: 7451199945285106737} - - {fileID: 741399405326523443} - - {fileID: 4395645583267387987} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &6310165116331426092 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6354829148813107697} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 46 - occupyNum: 3 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &4114551128252824127 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6354829148813107697} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 3 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &6223643065883030285 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6354829148813107697} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &-5442724963603031675 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6354829148813107697} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &8508659963105789836 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6354829148813107697} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 3 - selfIcon: {fileID: 21300000, guid: 3e670dddb45a95c4d8f369b043380269, type: 3} ---- !u!1 &7670571258194673549 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 741399405326523443} - - component: {fileID: 1416025780805125722} - - component: {fileID: 486703776854352466} - m_Layer: 8 - m_Name: Line019 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &741399405326523443 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7670571258194673549} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.059924822, y: 0.076901354, z: 0.007120952} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6015458754214886219} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1416025780805125722 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7670571258194673549} - m_Mesh: {fileID: 6476016764844487161, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} ---- !u!23 &486703776854352466 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7670571258194673549} - 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: 7626191068330388430, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} - 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!1 &8659924002624648253 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4800875668442648907} - - component: {fileID: 4882985581704913601} - - component: {fileID: 6337224009024481976} - m_Layer: 8 - m_Name: Line017 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4800875668442648907 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8659924002624648253} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.03456834, y: 0.07690134, z: 0.007120952} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6015458754214886219} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4882985581704913601 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8659924002624648253} - m_Mesh: {fileID: -3980153443302691910, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} ---- !u!23 &6337224009024481976 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8659924002624648253} - 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: 7626191068330388430, guid: 0b113acbf3d0db143b1fbd1cea0eeb4e, type: 3} - 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} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/46.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/46.prefab.meta deleted file mode 100644 index 9d0bca307..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/46.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: ef8b4ed3fd5e8d04d941b8f31acf34a8 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/47.prefab b/GQ_URP/GQ/Assets/prefab/老模型/47.prefab deleted file mode 100644 index befd5f8ec..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/47.prefab +++ /dev/null @@ -1,1918 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &102222096806939092 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8993549381529742929} - - component: {fileID: 769109678004016278} - - component: {fileID: 3529447946777414065} - m_Layer: 8 - m_Name: Box043 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8993549381529742929 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 102222096806939092} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.1003539, y: 0.077693306, z: -0.13957441} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4514613735079830473} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &769109678004016278 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 102222096806939092} - m_Mesh: {fileID: -2329098449242126572, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} ---- !u!23 &3529447946777414065 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 102222096806939092} - 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: -6257702196253466788, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -8625475798876401302, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: 1368039103165038143, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -6307277589567570940, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -5956578104803850452, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -8757356216087587297, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -2712199210993112587, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - 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!1 &369478275170536301 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4589686969706069098} - - component: {fileID: 1217420952253981201} - - component: {fileID: 7656970975384227144} - m_Layer: 8 - m_Name: Box044 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4589686969706069098 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 369478275170536301} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.18044168, y: 0.013047919, z: -0.13957441} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4514613735079830473} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1217420952253981201 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 369478275170536301} - m_Mesh: {fileID: -7346044036102949886, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} ---- !u!23 &7656970975384227144 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 369478275170536301} - 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: -6257702196253466788, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -8625475798876401302, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: 1368039103165038143, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -6307277589567570940, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -5956578104803850452, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -8757356216087587297, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -2712199210993112587, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - 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!1 &713665836374744173 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4436818709012918002} - - component: {fileID: 5651855713700318005} - - component: {fileID: 8508312444878366968} - m_Layer: 8 - m_Name: Box024 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4436818709012918002 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 713665836374744173} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.18044168, y: 0.055218898, z: -0.13957441} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4514613735079830473} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5651855713700318005 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 713665836374744173} - m_Mesh: {fileID: 106541212177282163, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} ---- !u!23 &8508312444878366968 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 713665836374744173} - 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: -6257702196253466788, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -8625475798876401302, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: 1368039103165038143, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -6307277589567570940, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -5956578104803850452, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -8757356216087587297, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -2712199210993112587, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - 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!1 &2059689756195725601 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4876770168268254436} - - component: {fileID: 3471100196583690130} - - component: {fileID: 2684868526833184445} - m_Layer: 8 - m_Name: Box033 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4876770168268254436 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2059689756195725601} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.31963307, y: 0.068951674, z: -0.13957441} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4514613735079830473} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3471100196583690130 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2059689756195725601} - m_Mesh: {fileID: 5924061002115919974, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} ---- !u!23 &2684868526833184445 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2059689756195725601} - 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: -6257702196253466788, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -197896907712708558, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: 1368039103165038143, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -6307277589567570940, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -5956578104803850452, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -8757356216087587297, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - 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!1 &3114413866083869779 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3219173722282820098} - - component: {fileID: 2839914867248656478} - - component: {fileID: 150512483527374566} - - component: {fileID: 3147569045707155736} - - component: {fileID: 1059693457992712344} - - component: {fileID: 8452198833080454720} - - component: {fileID: 8786956095435048714} - m_Layer: 8 - m_Name: Box032 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3219173722282820098 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3114413866083869779} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.10094245, y: 0.055218898, z: -0.13957441} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2230073242140168043} - - {fileID: 4125838678890549880} - - {fileID: 3609378890861435937} - - {fileID: 3637095078595829063} - - {fileID: 1310941290226463585} - - {fileID: 9129550958760770393} - - {fileID: 4223652364219330729} - - {fileID: 1332047590795307141} - - {fileID: 895380720728206810} - m_Father: {fileID: 4514613735079830473} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2839914867248656478 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3114413866083869779} - m_Mesh: {fileID: -8672714952799723808, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} ---- !u!23 &150512483527374566 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3114413866083869779} - 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: -6257702196253466788, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -6462096011057039903, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: 1368039103165038143, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -6307277589567570940, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -5956578104803850452, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -8757356216087587297, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: 1668985204131210402, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: 5153412432591461348, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -8625475798876401302, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -2712199210993112587, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - 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!114 &3147569045707155736 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3114413866083869779} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1059693457992712344 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3114413866083869779} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &8452198833080454720 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3114413866083869779} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &8786956095435048714 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3114413866083869779} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -8672714952799723808, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} ---- !u!1 &3145555177562684015 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2230073242140168043} - - component: {fileID: 2989849977141131096} - - component: {fileID: 1197412622928960550} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2230073242140168043 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3145555177562684015} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0066, y: -0.1385, z: 0.00042} - m_LocalScale: {x: 0.013567355, y: 0.013567355, z: 0.0088037215} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3219173722282820098} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2989849977141131096 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3145555177562684015} - 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!114 &1197412622928960550 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3145555177562684015} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3885746562939763059 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4514613735079830473} - - component: {fileID: 7778849123726823222} - - component: {fileID: 2828605915933103685} - - component: {fileID: 3338068187046788241} - - component: {fileID: -1076368308020560552} - - component: {fileID: 5091685253985112784} - m_Layer: 8 - m_Name: 47 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4514613735079830473 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3885746562939763059} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 8607435631373136756} - - {fileID: 4436818709012918002} - - {fileID: 6350036193692229172} - - {fileID: 3219173722282820098} - - {fileID: 4876770168268254436} - - {fileID: 7732640021376358492} - - {fileID: 3834387069912513809} - - {fileID: 8993549381529742929} - - {fileID: 4589686969706069098} - - {fileID: 659292445990867866} - - {fileID: 4947536878028222586} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &7778849123726823222 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3885746562939763059} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 47 - occupyNum: 2 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &2828605915933103685 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3885746562939763059} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 2 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &3338068187046788241 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3885746562939763059} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &-1076368308020560552 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3885746562939763059} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &5091685253985112784 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3885746562939763059} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 2 - selfIcon: {fileID: 21300000, guid: 2169a5923a5977c4584e4c7f7594e304, type: 3} ---- !u!1 &4256673520945941024 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1332047590795307141} - - component: {fileID: 1024482701922665856} - - component: {fileID: 3768363819561511260} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1332047590795307141 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4256673520945941024} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.1388, y: -0.1385, z: 0.00042} - m_LocalScale: {x: 0.013567355, y: 0.013567355, z: 0.0088037215} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3219173722282820098} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1024482701922665856 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4256673520945941024} - 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!114 &3768363819561511260 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4256673520945941024} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4256804478453566121 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4125838678890549880} - - component: {fileID: 5384825772286273231} - - component: {fileID: 2510180540235677545} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4125838678890549880 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4256804478453566121} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0109, y: -0.1385, z: 0.00042} - m_LocalScale: {x: 0.013567355, y: 0.013567355, z: 0.0088037215} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3219173722282820098} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5384825772286273231 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4256804478453566121} - 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!114 &2510180540235677545 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4256804478453566121} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5254362866792351262 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 659292445990867866} - - component: {fileID: 3304125749451737246} - - component: {fileID: 8678825543741367430} - m_Layer: 8 - m_Name: Box045 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &659292445990867866 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5254362866792351262} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.1003539, y: 0.013047919, z: -0.13957441} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4514613735079830473} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3304125749451737246 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5254362866792351262} - m_Mesh: {fileID: -5312821651996014630, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} ---- !u!23 &8678825543741367430 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5254362866792351262} - 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: -6257702196253466788, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -8625475798876401302, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: 1368039103165038143, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -6307277589567570940, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -5956578104803850452, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -8757356216087587297, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -2712199210993112587, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - 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!1 &5374790769178752849 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6350036193692229172} - - component: {fileID: 6956400641743960710} - - component: {fileID: 1068608073485154293} - m_Layer: 8 - m_Name: Box026 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6350036193692229172 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5374790769178752849} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.18044168, y: 0.077693306, z: -0.13957441} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4514613735079830473} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6956400641743960710 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5374790769178752849} - m_Mesh: {fileID: -612376834313925032, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} ---- !u!23 &1068608073485154293 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5374790769178752849} - 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: -6257702196253466788, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -8625475798876401302, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: 1368039103165038143, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -6307277589567570940, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -5956578104803850452, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -8757356216087587297, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -2712199210993112587, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - 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!1 &5987008532057520043 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3637095078595829063} - - component: {fileID: 7937608208081845200} - - component: {fileID: 8707352490582714488} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3637095078595829063 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5987008532057520043} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0463, y: -0.1385, z: 0.00042} - m_LocalScale: {x: 0.013567355, y: 0.013567355, z: 0.0088037215} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3219173722282820098} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7937608208081845200 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5987008532057520043} - 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!114 &8707352490582714488 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5987008532057520043} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6341064966108231264 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3834387069912513809} - - component: {fileID: 1257082810731254020} - - component: {fileID: 4132112052400629224} - m_Layer: 8 - m_Name: Box042 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3834387069912513809 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6341064966108231264} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.24075168, y: 0.077693306, z: -0.13957441} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4514613735079830473} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1257082810731254020 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6341064966108231264} - m_Mesh: {fileID: 4143267299020566393, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} ---- !u!23 &4132112052400629224 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6341064966108231264} - 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: -6257702196253466788, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -8625475798876401302, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: 1368039103165038143, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -6307277589567570940, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -5956578104803850452, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -8757356216087587297, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -2712199210993112587, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - 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!1 &6350005887755002701 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3609378890861435937} - - component: {fileID: 761562886403460650} - - component: {fileID: 2208247637706112336} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3609378890861435937 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6350005887755002701} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0288, y: -0.1385, z: 0.00042} - m_LocalScale: {x: 0.013567355, y: 0.013567355, z: 0.0088037215} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3219173722282820098} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &761562886403460650 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6350005887755002701} - 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!114 &2208247637706112336 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6350005887755002701} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6352053981193688379 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4947536878028222586} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4947536878028222586 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6352053981193688379} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: -0.09000007, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4514613735079830473} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &7265424345952644552 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1310941290226463585} - - component: {fileID: 4350730132122542652} - - component: {fileID: 8319868496635792730} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1310941290226463585 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7265424345952644552} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0859, y: -0.1385, z: 0.00042} - m_LocalScale: {x: 0.013567355, y: 0.013567355, z: 0.0088037215} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3219173722282820098} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4350730132122542652 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7265424345952644552} - 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!114 &8319868496635792730 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7265424345952644552} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7835167823131920462 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9129550958760770393} - - component: {fileID: 6759943902597934469} - - component: {fileID: 4808937828835505910} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9129550958760770393 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7835167823131920462} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.1034, y: -0.1385, z: 0.00042} - m_LocalScale: {x: 0.013567355, y: 0.013567355, z: 0.0088037215} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3219173722282820098} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6759943902597934469 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7835167823131920462} - 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!114 &4808937828835505910 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7835167823131920462} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8175594608322803249 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7732640021376358492} - - component: {fileID: 8584528478496529186} - - component: {fileID: 7741292714626242957} - m_Layer: 8 - m_Name: Box041 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7732640021376358492 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8175594608322803249} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.04004389, y: 0.077693306, z: -0.13957441} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4514613735079830473} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8584528478496529186 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8175594608322803249} - m_Mesh: {fileID: 7463243275869744982, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} ---- !u!23 &7741292714626242957 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8175594608322803249} - 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: -6257702196253466788, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -8625475798876401302, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: 1368039103165038143, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -6307277589567570940, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -5956578104803850452, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -8757356216087587297, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -2712199210993112587, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - 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!1 &8296197899310118354 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4223652364219330729} - - component: {fileID: 5938729931266620224} - - component: {fileID: 1872087139599524005} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4223652364219330729 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8296197899310118354} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.1213, y: -0.1385, z: 0.00042} - m_LocalScale: {x: 0.013567355, y: 0.013567355, z: 0.0088037215} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3219173722282820098} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5938729931266620224 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8296197899310118354} - 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!114 &1872087139599524005 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8296197899310118354} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8644691122528098847 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 895380720728206810} - - component: {fileID: 82036374006243170} - - component: {fileID: 5745445525310970321} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &895380720728206810 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8644691122528098847} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.1711, y: -0.1385, z: 0.00042} - m_LocalScale: {x: 0.013567355, y: 0.013567355, z: 0.0088037215} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3219173722282820098} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &82036374006243170 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8644691122528098847} - 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!114 &5745445525310970321 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8644691122528098847} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8968655823170499246 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8607435631373136756} - - component: {fileID: 4020595675414745370} - - component: {fileID: 3616496253927484525} - m_Layer: 8 - m_Name: 47 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8607435631373136756 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8968655823170499246} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0.0021216013, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4514613735079830473} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4020595675414745370 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8968655823170499246} - m_Mesh: {fileID: 7009245039203544193, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} ---- !u!23 &3616496253927484525 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8968655823170499246} - 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: 1164559979738526386, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -1152147162816932204, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: -5309146791756261813, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: 1196480866727828669, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - - {fileID: 5153412432591461348, guid: 66d1000110aa5ff438386649f5248c1a, type: 3} - 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} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/47.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/47.prefab.meta deleted file mode 100644 index ecdbd2785..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/47.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 9e9ad07d8674ea04db01ef43444aa8a1 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/55.prefab b/GQ_URP/GQ/Assets/prefab/老模型/55.prefab deleted file mode 100644 index d3640c629..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/55.prefab +++ /dev/null @@ -1,8297 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &149286247951975687 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2080051709474961088} - - component: {fileID: 1486470797869079364} - - component: {fileID: 2078326621777159644} - m_Layer: 8 - m_Name: Object028 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2080051709474961088 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 149286247951975687} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.25263909, y: 0.69446886, z: -0.3848831} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1486470797869079364 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 149286247951975687} - m_Mesh: {fileID: 5783707781615440777, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &2078326621777159644 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 149286247951975687} - 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: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4963801623029300775, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &320276306409871214 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3753431444404086806} - - component: {fileID: 657466115200188780} - - component: {fileID: 7916953969276199787} - - component: {fileID: 2163227103585310237} - - component: {fileID: 1668988913841166361} - - component: {fileID: 1517292457931914884} - - component: {fileID: 2168865934800846374} - m_Layer: 8 - m_Name: Object076 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3753431444404086806 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 320276306409871214} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.060510367, y: 0.24984208, z: -0.2836551} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8493074088801612509} - - {fileID: 8493074089693491120} - - {fileID: 8493074088351736929} - - {fileID: 8493074089494387301} - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 33 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &657466115200188780 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 320276306409871214} - m_Mesh: {fileID: -6144968561209659737, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &7916953969276199787 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 320276306409871214} - 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: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6949722608424478527, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -2792350377716832676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!114 &2163227103585310237 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 320276306409871214} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1668988913841166361 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 320276306409871214} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 9 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &1517292457931914884 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 320276306409871214} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &2168865934800846374 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 320276306409871214} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -6144968561209659737, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &348012149317865855 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1027067789248063613} - - component: {fileID: 6483194406340712608} - - component: {fileID: 2432461677811313492} - - component: {fileID: 1027067789248063611} - - component: {fileID: 1027067789248063610} - - component: {fileID: 5075490909406149967} - - component: {fileID: 8838707701540254599} - m_Layer: 8 - m_Name: Object031 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1027067789248063613 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 348012149317865855} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0426174, y: 0.6944689, z: -0.31237373} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8493074088847780263} - - {fileID: 8493074089419768862} - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6483194406340712608 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 348012149317865855} - m_Mesh: {fileID: -4418614455616001024, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &2432461677811313492 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 348012149317865855} - 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: -6949722608424478527, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -2792350377716832676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!114 &1027067789248063611 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 348012149317865855} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &1027067789248063610 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 348012149317865855} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5075490909406149967 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 348012149317865855} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &8838707701540254599 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 348012149317865855} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -4418614455616001024, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &458832916298390352 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2451682434327516946} - - component: {fileID: 358731888375544812} - - component: {fileID: 4809907885130874565} - m_Layer: 8 - m_Name: Object014 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2451682434327516946 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 458832916298390352} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.14916092, y: 0.69446886, z: -0.3093446} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &358731888375544812 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 458832916298390352} - m_Mesh: {fileID: 3941715523697911101, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &4809907885130874565 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 458832916298390352} - 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: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 8182179792920901425, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -2792350377716832676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &458996251200606261 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4210712358714771459} - - component: {fileID: 5427499820764309235} - - component: {fileID: 8227284697391790849} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4210712358714771459 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 458996251200606261} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.000099975616, y: -0.30460048, z: -0.004099995} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5799369057550542021} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5427499820764309235 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 458996251200606261} - 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!114 &8227284697391790849 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 458996251200606261} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &535856355084958361 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6051462328760676705} - - component: {fileID: 7036208728107748501} - - component: {fileID: 933551322028997023} - m_Layer: 8 - m_Name: Object001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6051462328760676705 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 535856355084958361} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0.6975736, z: -0.0574376} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7036208728107748501 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 535856355084958361} - m_Mesh: {fileID: -3292925553009838691, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &933551322028997023 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 535856355084958361} - 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: 2171153339066406188, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -672023288352054704, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &557941830751995587 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3751610816563164971} - - component: {fileID: 3617477384045907754} - - component: {fileID: 5278766158744728744} - m_Layer: 8 - m_Name: Object068 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3751610816563164971 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 557941830751995587} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.22345859, y: 0.24984208, z: -0.28685236} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 30 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3617477384045907754 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 557941830751995587} - m_Mesh: {fileID: 2561127810642175325, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &5278766158744728744 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 557941830751995587} - 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: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &640534160456090389 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2983335319226803075} - - component: {fileID: 650421193976253759} - - component: {fileID: 2545288606892568210} - m_Layer: 11 - m_Name: Cube (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2983335319226803075 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 640534160456090389} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00040002912, y: -0.3046003, z: 0.068399996} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3914409155392279993} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &650421193976253759 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 640534160456090389} - 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!114 &2545288606892568210 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 640534160456090389} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &936721658266249252 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6396635966992173373} - - component: {fileID: 112312060465817411} - - component: {fileID: 5551431169543875610} - - component: {fileID: 936721658266249250} - - component: {fileID: 936721658266249253} - - component: {fileID: 5545231102747806731} - - component: {fileID: 4722159120129603778} - m_Layer: 8 - m_Name: Object032 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6396635966992173373 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 936721658266249252} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.04261747, y: 0.6944689, z: -0.31237373} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8493074090008879304} - - {fileID: 8493074089152246958} - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &112312060465817411 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 936721658266249252} - m_Mesh: {fileID: -6750423293286134506, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &5551431169543875610 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 936721658266249252} - 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: -6949722608424478527, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -2792350377716832676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!114 &936721658266249250 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 936721658266249252} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 4 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &936721658266249253 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 936721658266249252} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5545231102747806731 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 936721658266249252} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &4722159120129603778 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 936721658266249252} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -6750423293286134506, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &1132857393509981890 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2432930202113804214} - - component: {fileID: 6206327999104080686} - - component: {fileID: 9124619358088892221} - m_Layer: 8 - m_Name: Object022 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2432930202113804214 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1132857393509981890} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.22829482, y: 0.69446886, z: -0.38488308} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6206327999104080686 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1132857393509981890} - m_Mesh: {fileID: 4382602644814197676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &9124619358088892221 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1132857393509981890} - 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: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4963801623029300775, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &1155386916033577704 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 311772419978629436} - - component: {fileID: 408736284950618630} - - component: {fileID: 8240068863643217349} - - component: {fileID: 5808860742242620002} - - component: {fileID: 4015021146365154145} - - component: {fileID: 6847716211765698322} - - component: {fileID: 7678864038656081425} - m_Layer: 8 - m_Name: Object077 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &311772419978629436 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1155386916033577704} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.09310007, y: 0.24984208, z: -0.2836551} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 3206577678507413058} - - {fileID: 4597638775306971595} - - {fileID: 343409526078765628} - - {fileID: 2779675267613612812} - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 34 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &408736284950618630 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1155386916033577704} - m_Mesh: {fileID: -8873797471287979038, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &8240068863643217349 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1155386916033577704} - 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: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6949722608424478527, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -2792350377716832676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!114 &5808860742242620002 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1155386916033577704} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 8 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &4015021146365154145 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1155386916033577704} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &6847716211765698322 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1155386916033577704} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &7678864038656081425 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1155386916033577704} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -8873797471287979038, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &1592562111723860784 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 841955497688904925} - - component: {fileID: 1826247061054719790} - - component: {fileID: 491086613767102910} - m_Layer: 8 - m_Name: Object085 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &841955497688904925 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1592562111723860784} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.28863803, y: 0.24984208, z: -0.28685233} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 37 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1826247061054719790 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1592562111723860784} - m_Mesh: {fileID: -7047696389869352852, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &491086613767102910 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1592562111723860784} - 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: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6949722608424478527, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -2792350377716832676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &1695734385321076897 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4239333837825930939} - - component: {fileID: 8060337856133710136} - - component: {fileID: 5668276359328489231} - m_Layer: 8 - m_Name: Object073 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4239333837825930939 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1695734385321076897} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.25604847, y: 0.24984208, z: -0.28685233} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 32 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8060337856133710136 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1695734385321076897} - m_Mesh: {fileID: 3376180099170138459, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &5668276359328489231 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1695734385321076897} - 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: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6949722608424478527, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -2792350377716832676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &1988940615529634248 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3159792491622392944} - - component: {fileID: 9105463684359937505} - - component: {fileID: 2661000130987405767} - m_Layer: 8 - m_Name: Object035 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3159792491622392944 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1988940615529634248} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.27698356, y: 0.69446886, z: -0.38488317} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 19 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &9105463684359937505 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1988940615529634248} - m_Mesh: {fileID: -5079571484100782257, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &2661000130987405767 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1988940615529634248} - 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: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6339495386095604136, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &2019698847570187316 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5300392448142588226} - - component: {fileID: 5150194784399313248} - - component: {fileID: 1076182076163030357} - m_Layer: 8 - m_Name: Object006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5300392448142588226 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2019698847570187316} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.30132785, y: 0.69446886, z: -0.38488317} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5150194784399313248 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2019698847570187316} - m_Mesh: {fileID: -2639241166356525208, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &1076182076163030357 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2019698847570187316} - 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: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6339495386095604136, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &2159053572009810815 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5863818903253223890} - - component: {fileID: 8258654974335441762} - - component: {fileID: 5222070019615625641} - m_Layer: 8 - m_Name: Object067 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5863818903253223890 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2159053572009810815} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.12568954, y: 0.24984208, z: -0.28685236} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 29 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8258654974335441762 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2159053572009810815} - m_Mesh: {fileID: -6637382640520475244, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &5222070019615625641 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2159053572009810815} - 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: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &2270627765339896790 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3218297745225990406} - - component: {fileID: 8482478071428129334} - - component: {fileID: 5138257606041633039} - m_Layer: 11 - m_Name: Cube (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3218297745225990406 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2270627765339896790} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00040002912, y: -0.2936003, z: 0.0564} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3914409155392279993} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8482478071428129334 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2270627765339896790} - 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!114 &5138257606041633039 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2270627765339896790} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2273906774689622827 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3914409155392279993} - - component: {fileID: 7590730682168695252} - - component: {fileID: 2184187130505326917} - - component: {fileID: 8864642652329116191} - - component: {fileID: 5721631089735063996} - - component: {fileID: 8896303856514946954} - - component: {fileID: 8653020784013455595} - m_Layer: 8 - m_Name: Object083 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3914409155392279993 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2273906774689622827} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.093099914, y: 0.24984208, z: -0.2836551} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2983335319226803075} - - {fileID: 3218297745225990406} - - {fileID: 7904677652645313841} - - {fileID: 121215487439365037} - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 36 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7590730682168695252 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2273906774689622827} - m_Mesh: {fileID: 7525366566605188955, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &2184187130505326917 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2273906774689622827} - 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: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6949722608424478527, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -2792350377716832676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!114 &8864642652329116191 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2273906774689622827} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 11 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &5721631089735063996 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2273906774689622827} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &8896303856514946954 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2273906774689622827} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &8653020784013455595 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2273906774689622827} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 7525366566605188955, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &2355820311787088781 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4381455232814571821} - - component: {fileID: 1148793695400087466} - - component: {fileID: 5052970543280059958} - m_Layer: 8 - m_Name: Object049 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4381455232814571821 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2355820311787088781} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.022107743, y: 0.24984208, z: -0.2868524} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 22 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1148793695400087466 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2355820311787088781} - m_Mesh: {fileID: 3606764674779165107, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &5052970543280059958 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2355820311787088781} - 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: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6949722608424478527, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -2792350377716832676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &2721407099098037100 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4392216054479485943} - - component: {fileID: 4396864958289775559} - - component: {fileID: 2809404040296268145} - m_Layer: 8 - m_Name: Object054 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4392216054479485943 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2721407099098037100} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.28863817, y: 0.24984208, z: -0.28685233} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 23 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4396864958289775559 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2721407099098037100} - m_Mesh: {fileID: -1824271642593903451, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &2809404040296268145 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2721407099098037100} - 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: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6949722608424478527, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -2792350377716832676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &2885462375084197184 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6612572745878661749} - - component: {fileID: 397994748566850929} - - component: {fileID: 569050242974597360} - m_Layer: 8 - m_Name: Object002 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6612572745878661749 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2885462375084197184} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0.6975736, z: -0.58943766} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &397994748566850929 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2885462375084197184} - m_Mesh: {fileID: -3996760141626369306, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &569050242974597360 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2885462375084197184} - 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: 2171153339066406188, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &3070945285650882617 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2374312535025349744} - - component: {fileID: 550143318785461743} - - component: {fileID: 6380119933886788479} - m_Layer: 8 - m_Name: Object026 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2374312535025349744 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3070945285650882617} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.30132776, y: 0.69446886, z: -0.38488305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &550143318785461743 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3070945285650882617} - m_Mesh: {fileID: 1658199413673387437, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &6380119933886788479 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3070945285650882617} - 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: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4963801623029300775, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &3185104841520128272 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6857924930884937867} - - component: {fileID: 2618435849671605087} - - component: {fileID: 3764523613738819417} - m_Layer: 8 - m_Name: Object030 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6857924930884937867 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3185104841520128272} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.12785226, y: 0.69446886, z: -0.3160524} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2618435849671605087 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3185104841520128272} - m_Mesh: {fileID: 5235648689648786991, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &3764523613738819417 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3185104841520128272} - 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: -7698350734739834028, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -2792350377716832676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &3352761543409191624 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8401076794212797911} - - component: {fileID: 8180061073959522413} - - component: {fileID: 288314278453058152} - - component: {fileID: 288314278453058150} - - component: {fileID: 288314278453058153} - - component: {fileID: 8245851231757124454} - - component: {fileID: 2206746330508414380} - m_Layer: 8 - m_Name: Object009 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8401076794212797911 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3352761543409191624} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.085234836, y: 0.6944689, z: -0.31237373} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8493074088703511354} - - {fileID: 8493074088282386178} - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8180061073959522413 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3352761543409191624} - m_Mesh: {fileID: 4944557015945844418, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &288314278453058152 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3352761543409191624} - 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: -6949722608424478527, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -2792350377716832676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!114 &288314278453058150 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3352761543409191624} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &288314278453058153 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3352761543409191624} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &8245851231757124454 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3352761543409191624} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &2206746330508414380 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3352761543409191624} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 4944557015945844418, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &3363736639935597149 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4597638775306971595} - - component: {fileID: 751323569929527036} - - component: {fileID: 3334594499526237621} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4597638775306971595 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3363736639935597149} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0005999729, y: -0.29360023, z: 0.0564} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 311772419978629436} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &751323569929527036 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3363736639935597149} - 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!114 &3334594499526237621 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3363736639935597149} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3425214992564408727 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3028259692310766625} - - component: {fileID: 3292599679460517507} - - component: {fileID: 6101715540951405632} - m_Layer: 8 - m_Name: Object021 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3028259692310766625 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3425214992564408727} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.20395048, y: 0.69446886, z: -0.38488305} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3292599679460517507 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3425214992564408727} - m_Mesh: {fileID: -3025179133607064014, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &6101715540951405632 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3425214992564408727} - 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: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4963801623029300775, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &3622205711984418878 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3855797209762418680} - - component: {fileID: 9009386361094666757} - - component: {fileID: 555866079399639560} - - component: {fileID: 5494493560777560682} - m_Layer: 8 - m_Name: Object037 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3855797209762418680 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3622205711984418878} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0.24984208, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 21 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &9009386361094666757 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3622205711984418878} - m_Mesh: {fileID: 3648286742040142478, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &555866079399639560 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3622205711984418878} - 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: 2171153339066406188, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!64 &5494493560777560682 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3622205711984418878} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 3648286742040142478, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &3668480923672327016 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2642457807687184135} - - component: {fileID: 5461389062631974920} - - component: {fileID: 5303722767898774306} - m_Layer: 11 - m_Name: Cube (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2642457807687184135 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3668480923672327016} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00040003285, y: -0.30460024, z: 0.068399996} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5799369057550542021} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5461389062631974920 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3668480923672327016} - 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!114 &5303722767898774306 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3668480923672327016} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3690758190189449363 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1028036160014432106} - - component: {fileID: 5105931641472046213} - - component: {fileID: 977711353458025435} - m_Layer: 8 - m_Name: Object093 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1028036160014432106 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3690758190189449363} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.022107579, y: 0.24984208, z: -0.2868524} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 39 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5105931641472046213 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3690758190189449363} - m_Mesh: {fileID: -4909793419484529428, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &977711353458025435 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3690758190189449363} - 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: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6949722608424478527, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -2792350377716832676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &3970403757166331330 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3410901718945524221} - - component: {fileID: 2782754695702297906} - - component: {fileID: 6414853537570692756} - m_Layer: 8 - m_Name: Object007 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3410901718945524221 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3970403757166331330} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.17046967, y: 0.69446886, z: -0.3160524} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2782754695702297906 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3970403757166331330} - m_Mesh: {fileID: 7733717212360752527, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &6414853537570692756 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3970403757166331330} - 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: -7698350734739834028, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -2792350377716832676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &4091744537406510343 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1094778570969574381} - - component: {fileID: 8892199056285095936} - - component: {fileID: 5481885511027591792} - m_Layer: 8 - m_Name: Object066 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1094778570969574381 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4091744537406510343} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.15827928, y: 0.24984208, z: -0.28685236} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 28 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8892199056285095936 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4091744537406510343} - m_Mesh: {fileID: 1338664037747464310, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &5481885511027591792 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4091744537406510343} - 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: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &4221377269393471638 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1540638005671912070} - - component: {fileID: 7764233599714834274} - - component: {fileID: 9038668192838084513} - - component: {fileID: 1540638005671912068} - - component: {fileID: 1540638005671912071} - - component: {fileID: 5753657780086750367} - - component: {fileID: 6405765118375188881} - m_Layer: 8 - m_Name: Object027 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1540638005671912070 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4221377269393471638} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2769834, y: 0.6944689, z: -0.38488308} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8493074088308211145} - - {fileID: 8493074089092087884} - - {fileID: 8493074089140342964} - - {fileID: 8493074088901746346} - - {fileID: 8493074088855316084} - - {fileID: 8493074090032641701} - - {fileID: 8493074088341470364} - - {fileID: 8493074089016138736} - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7764233599714834274 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4221377269393471638} - m_Mesh: {fileID: 4874721120890998788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &9038668192838084513 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4221377269393471638} - 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: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 3298023789967942109, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!114 &1540638005671912068 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4221377269393471638} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 7 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &1540638005671912071 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4221377269393471638} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5753657780086750367 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4221377269393471638} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &6405765118375188881 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4221377269393471638} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 4874721120890998788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &4557483155424835062 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 188356881553734975} - - component: {fileID: 1165057563086749814} - - component: {fileID: 1937307360910533298} - m_Layer: 8 - m_Name: Object060 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &188356881553734975 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4557483155424835062} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.22345883, y: 0.24984208, z: -0.28685236} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 25 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1165057563086749814 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4557483155424835062} - m_Mesh: {fileID: -7466011377227053342, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &1937307360910533298 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4557483155424835062} - 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: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &4823549792769577412 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6521751609867010381} - - component: {fileID: 167849631910056136} - - component: {fileID: 7663177420959002461} - m_Layer: 8 - m_Name: Object087 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6521751609867010381 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4823549792769577412} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2560483, y: 0.24984208, z: -0.28685233} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 38 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &167849631910056136 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4823549792769577412} - m_Mesh: {fileID: -2662323533501562378, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &7663177420959002461 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4823549792769577412} - 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: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6949722608424478527, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -2792350377716832676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &5031452004027357256 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 343409526078765628} - - component: {fileID: 2419435548065479597} - - component: {fileID: 5425854918068807683} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &343409526078765628 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5031452004027357256} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009997189, y: -0.30460048, z: -0.004099995} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 311772419978629436} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2419435548065479597 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5031452004027357256} - 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!114 &5425854918068807683 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5031452004027357256} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5139190391891342537 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6233097539488764818} - - component: {fileID: 4936071550817728585} - - component: {fileID: 1836009717316815842} - m_Layer: 11 - m_Name: Cube (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6233097539488764818 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5139190391891342537} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.000099975616, y: -0.29360047, z: -0.01609999} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5799369057550542021} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4936071550817728585 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5139190391891342537} - 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!114 &1836009717316815842 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5139190391891342537} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5142539050886011581 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8707443690928016161} - - component: {fileID: 1458075371648095590} - - component: {fileID: 4575321012995671975} - - component: {fileID: 1458075371648095588} - - component: {fileID: 1458075371648095591} - - component: {fileID: 4784522740624887046} - - component: {fileID: 7144785883699519590} - m_Layer: 8 - m_Name: Object034 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8707443690928016161 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5142539050886011581} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.085234895, y: 0.6944689, z: -0.31237373} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8493074088756349023} - - {fileID: 8493074089178521853} - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1458075371648095590 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5142539050886011581} - m_Mesh: {fileID: 1857916439425390961, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &4575321012995671975 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5142539050886011581} - 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: -6949722608424478527, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -2792350377716832676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!114 &1458075371648095588 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5142539050886011581} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1458075371648095591 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5142539050886011581} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 5 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &4784522740624887046 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5142539050886011581} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &7144785883699519590 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5142539050886011581} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 1857916439425390961, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &5187143892764132984 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 187266621628302979} - - component: {fileID: 2028027565584614409} - - component: {fileID: 7125342479361115027} - m_Layer: 8 - m_Name: Object064 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &187266621628302979 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5187143892764132984} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.15827942, y: 0.24984208, z: -0.28685236} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 27 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2028027565584614409 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5187143892764132984} - m_Mesh: {fileID: 70222690664163882, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &7125342479361115027 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5187143892764132984} - 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: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &5266933657977662317 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7601823727540762867} - - component: {fileID: 4507329729011899727} - - component: {fileID: 2420861958290798599} - m_Layer: 8 - m_Name: Object071 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7601823727540762867 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5266933657977662317} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.19086896, y: 0.24984208, z: -0.28685236} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 31 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4507329729011899727 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5266933657977662317} - m_Mesh: {fileID: -831774524296487689, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &2420861958290798599 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5266933657977662317} - 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: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &5333865503775022299 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6848482661342000098} - - component: {fileID: 1501919676194589917} - - component: {fileID: 250405396930837850} - m_Layer: 8 - m_Name: Object061 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6848482661342000098 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5333865503775022299} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1256898, y: 0.24984208, z: -0.28685236} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 26 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1501919676194589917 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5333865503775022299} - m_Mesh: {fileID: -4778756733448772780, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &250405396930837850 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5333865503775022299} - 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: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &5736508893666926207 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2779675267613612812} - - component: {fileID: 2007776829470091841} - - component: {fileID: 4171104278596900150} - m_Layer: 11 - m_Name: Cube (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2779675267613612812 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5736508893666926207} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009997189, y: -0.29360047, z: -0.01609999} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 311772419978629436} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2007776829470091841 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5736508893666926207} - 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!114 &4171104278596900150 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5736508893666926207} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5914997763280132290 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8273959558957206530} - - component: {fileID: 5600399704665686118} - - component: {fileID: 2226982273130020054} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8273959558957206530 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5914997763280132290} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00040003285, y: -0.29360023, z: 0.0564} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5799369057550542021} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5600399704665686118 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5914997763280132290} - 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!114 &2226982273130020054 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5914997763280132290} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6789552943540613240 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 121215487439365037} - - component: {fileID: 7099864603618759909} - - component: {fileID: 8100938530694713607} - m_Layer: 11 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &121215487439365037 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6789552943540613240} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00009997189, y: -0.29360053, z: -0.01609999} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3914409155392279993} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7099864603618759909 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6789552943540613240} - 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!114 &8100938530694713607 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6789552943540613240} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7491066710504243617 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7904677652645313841} - - component: {fileID: 8552671815625635789} - - component: {fileID: 4605256493749163864} - m_Layer: 11 - m_Name: Cube (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7904677652645313841 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7491066710504243617} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00009997189, y: -0.30460054, z: -0.004099995} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3914409155392279993} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8552671815625635789 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7491066710504243617} - 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!114 &4605256493749163864 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7491066710504243617} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7746980667902197078 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7291546873906877834} - - component: {fileID: 8702159623985953159} - - component: {fileID: 4234290071048221230} - - component: {fileID: 4234290071048221228} - - component: {fileID: 4234290071048221231} - - component: {fileID: 4888642801984408307} - - component: {fileID: 7035273349636903943} - m_Layer: 8 - m_Name: Object036 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7291546873906877834 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7746980667902197078} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2282947, y: 0.6944689, z: -0.38488308} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8493074088026071840} - - {fileID: 8493074088762753611} - - {fileID: 8493074088382185396} - - {fileID: 8493074089414777554} - - {fileID: 8493074089144662761} - - {fileID: 8493074088131064926} - - {fileID: 8493074089498736595} - - {fileID: 8493074089282125123} - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8702159623985953159 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7746980667902197078} - m_Mesh: {fileID: 6018422378889459822, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &4234290071048221230 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7746980667902197078} - 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: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 3298023789967942109, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!114 &4234290071048221228 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7746980667902197078} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 6 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &4234290071048221231 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7746980667902197078} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &4888642801984408307 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7746980667902197078} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &7035273349636903943 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7746980667902197078} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 6018422378889459822, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &7833459434882498328 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4309663864524859152} - - component: {fileID: 7712164754870183556} - - component: {fileID: 4779164762430895954} - m_Layer: 8 - m_Name: Object059 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4309663864524859152 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7833459434882498328} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1908691, y: 0.24984208, z: -0.28685236} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 24 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7712164754870183556 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7833459434882498328} - m_Mesh: {fileID: 8146333293907604950, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &4779164762430895954 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7833459434882498328} - 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: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &8201244308266322037 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5252700140597921507} - - component: {fileID: 731751375327226167} - - component: {fileID: 6877585889852015673} - - component: {fileID: 731751375327226165} - - component: {fileID: 731751375327226164} - - component: {fileID: 7263220945178392548} - - component: {fileID: 5873906584710071190} - m_Layer: 8 - m_Name: Object033 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5252700140597921507 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8201244308266322037} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.000000033527613, y: 0.6944689, z: -0.31237373} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8493074089212306973} - - {fileID: 8493074088052574566} - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &731751375327226167 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8201244308266322037} - m_Mesh: {fileID: 6206849629555422820, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &6877585889852015673 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8201244308266322037} - 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: -6949722608424478527, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -2792350377716832676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!114 &731751375327226165 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8201244308266322037} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 3 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &731751375327226164 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8201244308266322037} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &7263220945178392548 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8201244308266322037} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &5873906584710071190 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8201244308266322037} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 6206849629555422820, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!1 &8238548971495466294 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3797157602757694326} - - component: {fileID: 8043456871313411519} - - component: {fileID: 3021191219605080896} - m_Layer: 8 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3797157602757694326 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8238548971495466294} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0020000043, y: 0.4471, z: -0.29800007} - m_LocalScale: {x: 0.6435299, y: 0.93021, z: 0.59641} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8043456871313411519 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8238548971495466294} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &3021191219605080896 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8238548971495466294} - 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: af9f09a343f0a264bb1136823665fff9, 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!1 &8296236998877638108 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3206577678507413058} - - component: {fileID: 3629176968585123235} - - component: {fileID: 3119907637878324162} - m_Layer: 11 - m_Name: Cube (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3206577678507413058 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8296236998877638108} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0005999729, y: -0.30460024, z: 0.068399996} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 311772419978629436} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3629176968585123235 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8296236998877638108} - 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!114 &3119907637878324162 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8296236998877638108} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8354196001273481285 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5616578214619976194} - - component: {fileID: 923813506205476029} - - component: {fileID: 1949179636785745195} - m_Layer: 8 - m_Name: Object025 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5616578214619976194 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8354196001273481285} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.20395038, y: 0.69446886, z: -0.38488317} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &923813506205476029 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8354196001273481285} - m_Mesh: {fileID: 5791823748547884724, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &1949179636785745195 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8354196001273481285} - 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: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4963801623029300775, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &8493074088026071843 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074088026071840} - - component: {fileID: 8493074088026071902} - - component: {fileID: 8493074088026071841} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074088026071840 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088026071843} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0002001226, y: -0.1964, z: 0.0063000023} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7291546873906877834} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074088026071902 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088026071843} - 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!114 &8493074088026071841 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088026071843} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074088052574569 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074088052574566} - - component: {fileID: 8493074088052574564} - - component: {fileID: 8493074088052574567} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074088052574566 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088052574569} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00039999938, y: -0.2761006, z: -0.07109997} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5252700140597921507} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074088052574564 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088052574569} - 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!114 &8493074088052574567 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088052574569} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074088131064865 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074088131064926} - - component: {fileID: 8493074088131064924} - - component: {fileID: 8493074088131064927} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074088131064926 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088131064865} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00019988418, y: -0.19639999, z: -0.10230003} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7291546873906877834} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074088131064924 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088131064865} - 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!114 &8493074088131064927 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088131064865} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074088282386181 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074088282386178} - - component: {fileID: 8493074088282386176} - - component: {fileID: 8493074088282386179} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074088282386178 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088282386181} - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: -0.0001, y: -0.2739, z: -0.0725} - m_LocalScale: {x: 0.013169999, y: 0.010910002, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8401076794212797911} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074088282386176 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088282386181} - 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!114 &8493074088282386179 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088282386181} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074088308211144 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074088308211145} - - component: {fileID: 8493074088308211143} - - component: {fileID: 8493074088308211142} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074088308211145 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088308211144} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00009986758, y: -0.19640006, z: 0.0063000023} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1540638005671912070} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074088308211143 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088308211144} - 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!114 &8493074088308211142 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088308211144} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074088341470367 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074088341470364} - - component: {fileID: 8493074088341470362} - - component: {fileID: 8493074088341470365} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074088341470364 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088341470367} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00049987435, y: -0.19640008, z: -0.1208} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1540638005671912070} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074088341470362 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088341470367} - 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!114 &8493074088341470365 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088341470367} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074088351736928 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074088351736929} - - component: {fileID: 8493074088351737247} - - component: {fileID: 8493074088351737246} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074088351736929 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088351736928} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0006000325, y: -0.30460042, z: -0.004099995} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3753431444404086806} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074088351737247 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088351736928} - 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!114 &8493074088351737246 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088351736928} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074088382185399 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074088382185396} - - component: {fileID: 8493074088382185394} - - component: {fileID: 8493074088382185397} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074088382185396 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088382185399} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0002001226, y: -0.19640002, z: -0.031399995} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7291546873906877834} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074088382185394 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088382185399} - 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!114 &8493074088382185397 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088382185399} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074088703511357 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074088703511354} - - component: {fileID: 8493074088703511352} - - component: {fileID: 8493074088703511355} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074088703511354 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088703511357} - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.0001, y: -0.2739, z: -0.0598} - m_LocalScale: {x: 0.013169999, y: 0.010910002, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8401076794212797911} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074088703511352 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088703511357} - 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!114 &8493074088703511355 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088703511357} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074088756349022 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074088756349023} - - component: {fileID: 8493074088756349021} - - component: {fileID: 8493074088756349020} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074088756349023 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088756349022} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00069996715, y: -0.27610067, z: -0.059600025} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8707443690928016161} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074088756349021 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088756349022} - 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!114 &8493074088756349020 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088756349022} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074088762753610 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074088762753611} - - component: {fileID: 8493074088762753609} - - component: {fileID: 8493074088762753608} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074088762753611 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088762753610} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0002001226, y: -0.19640002, z: -0.012900025} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7291546873906877834} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074088762753609 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088762753610} - 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!114 &8493074088762753608 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088762753610} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074088801612508 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074088801612509} - - component: {fileID: 8493074088801612507} - - component: {fileID: 8493074088801612506} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074088801612509 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088801612508} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.000100031495, y: -0.30460018, z: 0.068399996} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3753431444404086806} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074088801612507 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088801612508} - 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!114 &8493074088801612506 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088801612508} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074088847780262 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074088847780263} - - component: {fileID: 8493074088847780261} - - component: {fileID: 8493074088847780260} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074088847780263 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088847780262} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.00009998679, y: -0.2761002, z: -0.059600025} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1027067789248063613} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074088847780261 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088847780262} - 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!114 &8493074088847780260 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088847780262} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074088855316087 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074088855316084} - - component: {fileID: 8493074088855316082} - - component: {fileID: 8493074088855316085} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074088855316084 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088855316087} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00049987435, y: -0.19640008, z: -0.08309999} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1540638005671912070} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074088855316082 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088855316087} - 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!114 &8493074088855316085 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088855316087} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074088901746349 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074088901746346} - - component: {fileID: 8493074088901746344} - - component: {fileID: 8493074088901746347} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074088901746346 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088901746349} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00009986758, y: -0.19640005, z: -0.04930006} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1540638005671912070} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074088901746344 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088901746349} - 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!114 &8493074088901746347 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074088901746349} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074089016138739 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074089016138736} - - component: {fileID: 8493074089016138734} - - component: {fileID: 8493074089016138737} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074089016138736 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089016138739} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00049987435, y: -0.19640008, z: -0.1387} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1540638005671912070} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074089016138734 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089016138739} - 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!114 &8493074089016138737 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089016138739} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074089092087887 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074089092087884} - - component: {fileID: 8493074089092087882} - - component: {fileID: 8493074089092087885} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074089092087884 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089092087887} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00009986758, y: -0.19640008, z: -0.012900025} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1540638005671912070} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074089092087882 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089092087887} - 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!114 &8493074089092087885 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089092087887} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074089140342967 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074089140342964} - - component: {fileID: 8493074089140342962} - - component: {fileID: 8493074089140342965} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074089140342964 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089140342967} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00009986758, y: -0.19640008, z: -0.031399995} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1540638005671912070} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074089140342962 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089140342967} - 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!114 &8493074089140342965 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089140342967} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074089144662760 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074089144662761} - - component: {fileID: 8493074089144662759} - - component: {fileID: 8493074089144662758} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074089144662761 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089144662760} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00019988418, y: -0.19640002, z: -0.08309999} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7291546873906877834} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074089144662759 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089144662760} - 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!114 &8493074089144662758 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089144662760} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074089152246961 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074089152246958} - - component: {fileID: 8493074089152246956} - - component: {fileID: 8493074089152246959} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074089152246958 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089152246961} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.000100016594, y: -0.2761005, z: -0.07109997} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6396635966992173373} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074089152246956 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089152246961} - 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!114 &8493074089152246959 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089152246961} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074089178521852 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074089178521853} - - component: {fileID: 8493074089178521851} - - component: {fileID: 8493074089178521850} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074089178521853 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089178521852} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0007, y: -0.276, z: -0.0711} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8707443690928016161} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074089178521851 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089178521852} - 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!114 &8493074089178521850 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089178521852} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074089212306972 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074089212306973} - - component: {fileID: 8493074089212306971} - - component: {fileID: 8493074089212306970} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074089212306973 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089212306972} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00039999938, y: -0.2761006, z: -0.059600025} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5252700140597921507} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074089212306971 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089212306972} - 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!114 &8493074089212306970 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089212306972} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074089282125122 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074089282125123} - - component: {fileID: 8493074089282125121} - - component: {fileID: 8493074089282125120} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074089282125123 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089282125122} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00019988418, y: -0.19640002, z: -0.1387} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7291546873906877834} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074089282125121 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089282125122} - 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!114 &8493074089282125120 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089282125122} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074089414777557 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074089414777554} - - component: {fileID: 8493074089414777552} - - component: {fileID: 8493074089414777555} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074089414777554 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089414777557} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0002001226, y: -0.19639999, z: -0.04930006} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7291546873906877834} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074089414777552 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089414777557} - 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!114 &8493074089414777555 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089414777557} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074089419769057 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074089419768862} - - component: {fileID: 8493074089419768860} - - component: {fileID: 8493074089419768863} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074089419768862 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089419769057} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0001, y: -0.2693, z: -0.0711} - m_LocalScale: {x: 0.01317, y: 0.02676005, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1027067789248063613} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074089419768860 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089419769057} - 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!114 &8493074089419768863 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089419769057} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074089494387300 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074089494387301} - - component: {fileID: 8493074089494387299} - - component: {fileID: 8493074089494387298} - m_Layer: 11 - m_Name: Cube (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074089494387301 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089494387300} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0006000325, y: -0.2936004, z: -0.01609999} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3753431444404086806} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074089494387299 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089494387300} - 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!114 &8493074089494387298 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089494387300} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074089498736594 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074089498736595} - - component: {fileID: 8493074089498736593} - - component: {fileID: 8493074089498736592} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074089498736595 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089498736594} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00019988418, y: -0.19640002, z: -0.1208} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7291546873906877834} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074089498736593 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089498736594} - 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!114 &8493074089498736592 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089498736594} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074089693491123 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074089693491120} - - component: {fileID: 8493074089693491118} - - component: {fileID: 8493074089693491121} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074089693491120 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089693491123} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.000100031495, y: -0.29360017, z: 0.0564} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3753431444404086806} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074089693491118 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089693491123} - 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!114 &8493074089693491121 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089693491123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074089862457074 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074089862457075} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074089862457075 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074089862457074} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -0.9, z: 0.30000007} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 40 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &8493074090008879307 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074090008879304} - - component: {fileID: 8493074090008879302} - - component: {fileID: 8493074090008879305} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074090008879304 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074090008879307} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.000100016594, y: -0.27610055, z: -0.059600025} - m_LocalScale: {x: 0.01317, y: 0.010910001, z: 0.010910002} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6396635966992173373} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074090008879302 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074090008879307} - 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!114 &8493074090008879305 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074090008879307} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8493074090032641700 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8493074090032641701} - - component: {fileID: 8493074090032641699} - - component: {fileID: 8493074090032641698} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8493074090032641701 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074090032641700} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.00049987435, y: -0.19640005, z: -0.10230003} - m_LocalScale: {x: 0.011330002, y: 0.011170001, z: 0.014140003} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1540638005671912070} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8493074090032641699 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074090032641700} - 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!114 &8493074090032641698 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8493074090032641700} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8783075117641951395 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 31655268905601589} - - component: {fileID: 9070476630096117105} - - component: {fileID: 8602510983590936698} - m_Layer: 8 - m_Name: Object023 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &31655268905601589 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8783075117641951395} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.25263914, y: 0.69446886, z: -0.3848831} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &9070476630096117105 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8783075117641951395} - m_Mesh: {fileID: 8167450939506310628, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &8602510983590936698 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8783075117641951395} - 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: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4963801623029300775, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!1 &8838424665782897461 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8206601731190690191} - - component: {fileID: 8838424665782897454} - - component: {fileID: 8838424665782897457} - - component: {fileID: 8838424665782897456} - - component: {fileID: 8838424665782897459} - - component: {fileID: 8838424665782897458} - m_Layer: 8 - m_Name: 55 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8206601731190690191 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8838424665782897461} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 3797157602757694326} - - {fileID: 6051462328760676705} - - {fileID: 6612572745878661749} - - {fileID: 5300392448142588226} - - {fileID: 3410901718945524221} - - {fileID: 8401076794212797911} - - {fileID: 2451682434327516946} - - {fileID: 3028259692310766625} - - {fileID: 2432930202113804214} - - {fileID: 31655268905601589} - - {fileID: 5616578214619976194} - - {fileID: 2374312535025349744} - - {fileID: 1540638005671912070} - - {fileID: 2080051709474961088} - - {fileID: 6857924930884937867} - - {fileID: 1027067789248063613} - - {fileID: 6396635966992173373} - - {fileID: 5252700140597921507} - - {fileID: 8707443690928016161} - - {fileID: 3159792491622392944} - - {fileID: 7291546873906877834} - - {fileID: 3855797209762418680} - - {fileID: 4381455232814571821} - - {fileID: 4392216054479485943} - - {fileID: 4309663864524859152} - - {fileID: 188356881553734975} - - {fileID: 6848482661342000098} - - {fileID: 187266621628302979} - - {fileID: 1094778570969574381} - - {fileID: 5863818903253223890} - - {fileID: 3751610816563164971} - - {fileID: 7601823727540762867} - - {fileID: 4239333837825930939} - - {fileID: 3753431444404086806} - - {fileID: 311772419978629436} - - {fileID: 5799369057550542021} - - {fileID: 3914409155392279993} - - {fileID: 841955497688904925} - - {fileID: 6521751609867010381} - - {fileID: 1028036160014432106} - - {fileID: 8493074089862457075} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &8838424665782897454 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8838424665782897461} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 55 - occupyNum: 20 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &8838424665782897457 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8838424665782897461} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 20 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &8838424665782897456 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8838424665782897461} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &8838424665782897459 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8838424665782897461} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &8838424665782897458 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8838424665782897461} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 20 - selfIcon: {fileID: 21300000, guid: 636a88b3210458d40bd4ddeccf769584, type: 3} ---- !u!1 &9078507340421593805 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5799369057550542021} - - component: {fileID: 9185839429232004169} - - component: {fileID: 5191918739557121027} - - component: {fileID: 2106823293551001691} - - component: {fileID: 3208548821402105444} - - component: {fileID: 5016526095015333070} - - component: {fileID: 8228313006893222331} - m_Layer: 8 - m_Name: Object081 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5799369057550542021 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9078507340421593805} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.0605102, y: 0.24984208, z: -0.2836551} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2642457807687184135} - - {fileID: 8273959558957206530} - - {fileID: 4210712358714771459} - - {fileID: 6233097539488764818} - m_Father: {fileID: 8206601731190690191} - m_RootOrder: 35 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &9185839429232004169 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9078507340421593805} - m_Mesh: {fileID: -8879626735686362149, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} ---- !u!23 &5191918739557121027 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9078507340421593805} - 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: -4053520464898690182, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6257702196253466788, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -8757356216087587297, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6307277589567570940, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: 1368039103165038143, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -5956578104803850452, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -6949722608424478527, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - - {fileID: -2792350377716832676, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} - 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!114 &2106823293551001691 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9078507340421593805} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 10 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &3208548821402105444 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9078507340421593805} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5016526095015333070 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9078507340421593805} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &8228313006893222331 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9078507340421593805} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -8879626735686362149, guid: 1ecb7a24b8b050e40b4d31a23d4918c4, type: 3} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/55.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/55.prefab.meta deleted file mode 100644 index f94815d10..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/55.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 9021de5f38560d4488c15bd3fd3a0795 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/6.prefab b/GQ_URP/GQ/Assets/prefab/老模型/6.prefab deleted file mode 100644 index 2bfa4853b..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/6.prefab +++ /dev/null @@ -1,4993 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &88026255467579106 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9028680912223999330} - - component: {fileID: 6203054868385037856} - - component: {fileID: 581748307936298398} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9028680912223999330 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 88026255467579106} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9105152300404503799} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6203054868385037856 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 88026255467579106} - 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!114 &581748307936298398 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 88026255467579106} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &297492683470961957 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2416378272628441528} - - component: {fileID: 241889045579215002} - - component: {fileID: 5551382047032425085} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2416378272628441528 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 297492683470961957} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2409653499325086064} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &241889045579215002 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 297492683470961957} - 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!114 &5551382047032425085 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 297492683470961957} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &344678176075346298 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3176461292832969384} - - component: {fileID: 6288093313255264861} - - component: {fileID: 8455736176069641424} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3176461292832969384 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 344678176075346298} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3691432370352237127} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6288093313255264861 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 344678176075346298} - 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!114 &8455736176069641424 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 344678176075346298} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &509355349767696245 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5596723993456925432} - - component: {fileID: 2321425596159963616} - - component: {fileID: 6325019314157416707} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5596723993456925432 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 509355349767696245} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7773294191514167667} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2321425596159963616 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 509355349767696245} - 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!114 &6325019314157416707 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 509355349767696245} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &655558834324615650 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2572656673202330328} - - component: {fileID: 2580710396885980866} - - component: {fileID: 2291755646240842} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2572656673202330328 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 655558834324615650} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7773294191514167667} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2580710396885980866 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 655558834324615650} - 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!114 &2291755646240842 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 655558834324615650} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &668032369830756402 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1643971466701475124} - - component: {fileID: 1037242188682957452} - - component: {fileID: 6400208580950003918} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1643971466701475124 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 668032369830756402} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2409653499325086064} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1037242188682957452 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 668032369830756402} - 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!114 &6400208580950003918 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 668032369830756402} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &989464876791353827 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8487168871639618018} - - component: {fileID: 7169552913570297835} - - component: {fileID: 7053998028413991656} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8487168871639618018 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 989464876791353827} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9105152300404503799} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7169552913570297835 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 989464876791353827} - 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!114 &7053998028413991656 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 989464876791353827} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1152429307583621786 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5224807780722432025} - - component: {fileID: 116630608224202714} - - component: {fileID: 4465704533303022686} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5224807780722432025 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1152429307583621786} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7773294191514167667} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &116630608224202714 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1152429307583621786} - 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!114 &4465704533303022686 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1152429307583621786} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1321364116395625223 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1809810455016100285} - - component: {fileID: 8210304829934540089} - - component: {fileID: 3946838547847517343} - - component: {fileID: 6744654489711842276} - - component: {fileID: -2349697433758796025} - - component: {fileID: -5882026763401495860} - m_Layer: 8 - m_Name: 6 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1809810455016100285 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1321364116395625223} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 6436252087428107629} - - {fileID: 6415611005981486864} - - {fileID: 3691432370352237127} - - {fileID: 7773294191514167667} - - {fileID: 9105152300404503799} - - {fileID: 2409653499325086064} - - {fileID: 7786505362703325586} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &8210304829934540089 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1321364116395625223} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 6 - occupyNum: 3 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &3946838547847517343 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1321364116395625223} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 3 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &6744654489711842276 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1321364116395625223} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &-2349697433758796025 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1321364116395625223} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &-5882026763401495860 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1321364116395625223} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 3 - selfIcon: {fileID: 21300000, guid: c3e6629937132a54f96bddee775f1ab8, type: 3} ---- !u!1 &1749544084727868767 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7786505362703325586} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7786505362703325586 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1749544084727868767} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: -0.13499999, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1809810455016100285} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1768192798082854903 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8052466588831906083} - - component: {fileID: 4802702470456433043} - - component: {fileID: 4173016698313158617} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8052466588831906083 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1768192798082854903} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3691432370352237127} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4802702470456433043 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1768192798082854903} - 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!114 &4173016698313158617 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1768192798082854903} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1843841004948222447 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6645213073990324153} - - component: {fileID: 1046563439382513971} - - component: {fileID: 1491141893646391434} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6645213073990324153 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1843841004948222447} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3691432370352237127} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1046563439382513971 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1843841004948222447} - 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!114 &1491141893646391434 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1843841004948222447} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1876199312946105860 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8500522548303414722} - - component: {fileID: 8426623650653202861} - - component: {fileID: 6599234162817686681} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8500522548303414722 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1876199312946105860} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9105152300404503799} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8426623650653202861 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1876199312946105860} - 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!114 &6599234162817686681 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1876199312946105860} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1925294091220992022 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9198213977359626854} - - component: {fileID: 6155897983335836509} - - component: {fileID: 5256643715097241164} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9198213977359626854 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1925294091220992022} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9105152300404503799} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6155897983335836509 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1925294091220992022} - 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!114 &5256643715097241164 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1925294091220992022} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1965635209743338208 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6498119154108605159} - - component: {fileID: 1411340413224575554} - - component: {fileID: 6473504265858138489} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6498119154108605159 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1965635209743338208} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9105152300404503799} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1411340413224575554 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1965635209743338208} - 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!114 &6473504265858138489 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1965635209743338208} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2031306504668181056 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2559902815344869863} - - component: {fileID: 4868273547777072739} - - component: {fileID: 6418485087591939157} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2559902815344869863 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2031306504668181056} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2409653499325086064} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4868273547777072739 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2031306504668181056} - 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!114 &6418485087591939157 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2031306504668181056} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2276778331799791067 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2934185024808987956} - - component: {fileID: 5504012277510029524} - - component: {fileID: 6580923075977273412} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2934185024808987956 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2276778331799791067} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2409653499325086064} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5504012277510029524 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2276778331799791067} - 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!114 &6580923075977273412 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2276778331799791067} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2511729363603836649 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4618278715366918922} - - component: {fileID: 5354904942121846937} - - component: {fileID: 5775767700971373784} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4618278715366918922 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2511729363603836649} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3691432370352237127} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5354904942121846937 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2511729363603836649} - 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!114 &5775767700971373784 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2511729363603836649} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2692056024735372398 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1526333508211350604} - - component: {fileID: 3753516202516097273} - - component: {fileID: 3389494084713860686} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1526333508211350604 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2692056024735372398} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9105152300404503799} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3753516202516097273 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2692056024735372398} - 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!114 &3389494084713860686 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2692056024735372398} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3628289999740364223 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7915662224659672898} - - component: {fileID: 9039030363738274569} - - component: {fileID: 5554004461713917422} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7915662224659672898 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3628289999740364223} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7773294191514167667} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9039030363738274569 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3628289999740364223} - 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!114 &5554004461713917422 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3628289999740364223} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3682157557712352287 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7686625960349206396} - - component: {fileID: 6628159424827757398} - - component: {fileID: 1871488465977796059} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7686625960349206396 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3682157557712352287} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9105152300404503799} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6628159424827757398 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3682157557712352287} - 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!114 &1871488465977796059 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3682157557712352287} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3859724246483264139 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2504931808459437593} - - component: {fileID: 2168131093668186956} - - component: {fileID: 8412776739003231201} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2504931808459437593 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3859724246483264139} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2409653499325086064} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2168131093668186956 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3859724246483264139} - 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!114 &8412776739003231201 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3859724246483264139} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3884613986597536352 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4031116001338479548} - - component: {fileID: 3563796587321621882} - - component: {fileID: 5330790240473851371} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4031116001338479548 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3884613986597536352} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3691432370352237127} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3563796587321621882 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3884613986597536352} - 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!114 &5330790240473851371 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3884613986597536352} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4181248124546710596 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7684676969488337196} - - component: {fileID: 2318851130933199983} - - component: {fileID: 9023217789223350578} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7684676969488337196 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4181248124546710596} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3691432370352237127} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2318851130933199983 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4181248124546710596} - 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!114 &9023217789223350578 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4181248124546710596} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4553145637062613095 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1191826712991992130} - - component: {fileID: 5216545245525050606} - - component: {fileID: 6295806740649135140} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1191826712991992130 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4553145637062613095} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7773294191514167667} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5216545245525050606 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4553145637062613095} - 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!114 &6295806740649135140 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4553145637062613095} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4554419732260517957 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6062201838344050348} - - component: {fileID: 1639240376188680466} - - component: {fileID: 3325030481661743569} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6062201838344050348 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4554419732260517957} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2409653499325086064} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1639240376188680466 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4554419732260517957} - 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!114 &3325030481661743569 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4554419732260517957} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4623165450974499478 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4411189525966757186} - - component: {fileID: 6247015991850497671} - - component: {fileID: 1060825757162366392} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4411189525966757186 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4623165450974499478} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9105152300404503799} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6247015991850497671 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4623165450974499478} - 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!114 &1060825757162366392 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4623165450974499478} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4680701746658002290 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3691432370352237127} - - component: {fileID: 7889180454248746307} - - component: {fileID: 8006175145102540994} - - component: {fileID: 386225185432228396} - - component: {fileID: 7897665035315383479} - - component: {fileID: 1949381107757397847} - - component: {fileID: 6142513589297939960} - m_Layer: 8 - m_Name: Object002 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3691432370352237127 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4680701746658002290} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00032439828, y: 0.019212604, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8052466588831906083} - - {fileID: 4031116001338479548} - - {fileID: 8563928327426696036} - - {fileID: 3837845464818518488} - - {fileID: 7599813322869344219} - - {fileID: 786997990984544244} - - {fileID: 6645213073990324153} - - {fileID: 318380802207153841} - - {fileID: 4613412321321113344} - - {fileID: 3176461292832969384} - - {fileID: 4618278715366918922} - - {fileID: 7684676969488337196} - m_Father: {fileID: 1809810455016100285} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7889180454248746307 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4680701746658002290} - m_Mesh: {fileID: -3996760141626369306, guid: fcc65de0395699040be81595ac8a1eda, type: 3} ---- !u!23 &8006175145102540994 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4680701746658002290} - 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: -1502669387472542646, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: 1038712434395320081, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: 7874494369389819107, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - 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!114 &386225185432228396 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4680701746658002290} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 4 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7897665035315383479 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4680701746658002290} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1949381107757397847 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4680701746658002290} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &6142513589297939960 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4680701746658002290} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -3996760141626369306, guid: db00624d3fe60844abb4d66bdbf25b98, type: 3} ---- !u!1 &4778685300860004703 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2461631749520577295} - - component: {fileID: 9123754358166868213} - - component: {fileID: 5895501980017693477} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2461631749520577295 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4778685300860004703} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7773294191514167667} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9123754358166868213 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4778685300860004703} - 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!114 &5895501980017693477 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4778685300860004703} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4944830948625763581 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1482686939645509929} - - component: {fileID: 4219534542675406033} - - component: {fileID: 1409413539758489485} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1482686939645509929 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4944830948625763581} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2409653499325086064} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4219534542675406033 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4944830948625763581} - 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!114 &1409413539758489485 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4944830948625763581} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4997100208825240122 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 318380802207153841} - - component: {fileID: 389393350976028688} - - component: {fileID: 920414452025091735} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &318380802207153841 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4997100208825240122} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3691432370352237127} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &389393350976028688 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4997100208825240122} - 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!114 &920414452025091735 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4997100208825240122} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5025815315663598279 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9071161190091945358} - - component: {fileID: 8976773596628369977} - - component: {fileID: 7199976148701364644} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9071161190091945358 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5025815315663598279} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7773294191514167667} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8976773596628369977 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5025815315663598279} - 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!114 &7199976148701364644 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5025815315663598279} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5122847350495543171 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5684448259036235219} - - component: {fileID: 4073150383794960044} - - component: {fileID: 2913291818978315464} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5684448259036235219 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5122847350495543171} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7773294191514167667} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4073150383794960044 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5122847350495543171} - 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!114 &2913291818978315464 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5122847350495543171} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5368004483709422449 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5312483998835389232} - - component: {fileID: 2276956192909426775} - - component: {fileID: 8635293700746504556} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5312483998835389232 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5368004483709422449} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9105152300404503799} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2276956192909426775 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5368004483709422449} - 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!114 &8635293700746504556 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5368004483709422449} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5381681392320585792 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4725675438623558441} - - component: {fileID: 6384331072676636315} - - component: {fileID: 1898115654228665004} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4725675438623558441 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5381681392320585792} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7773294191514167667} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6384331072676636315 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5381681392320585792} - 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!114 &1898115654228665004 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5381681392320585792} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5426735383761137598 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7153937343846286309} - - component: {fileID: 7715579889808615939} - - component: {fileID: 7835162592991638334} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7153937343846286309 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5426735383761137598} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7773294191514167667} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7715579889808615939 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5426735383761137598} - 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!114 &7835162592991638334 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5426735383761137598} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5470490998714587725 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7773294191514167667} - - component: {fileID: 8127046884540859298} - - component: {fileID: 6454561853901039808} - - component: {fileID: 5788986590769633027} - - component: {fileID: 1975386770267099383} - - component: {fileID: 5990680971482219817} - - component: {fileID: 1738541975412633261} - m_Layer: 8 - m_Name: Object004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7773294191514167667 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5470490998714587725} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00032439828, y: 0.05017651, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 6504901933861008520} - - {fileID: 9071161190091945358} - - {fileID: 5596723993456925432} - - {fileID: 2572656673202330328} - - {fileID: 407017475634588163} - - {fileID: 5684448259036235219} - - {fileID: 4725675438623558441} - - {fileID: 5224807780722432025} - - {fileID: 7915662224659672898} - - {fileID: 2461631749520577295} - - {fileID: 1191826712991992130} - - {fileID: 7153937343846286309} - m_Father: {fileID: 1809810455016100285} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8127046884540859298 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5470490998714587725} - m_Mesh: {fileID: -8113768720884857512, guid: fcc65de0395699040be81595ac8a1eda, type: 3} ---- !u!23 &6454561853901039808 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5470490998714587725} - 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: -1502669387472542646, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: 1038712434395320081, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: 7874494369389819107, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - 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!114 &5788986590769633027 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5470490998714587725} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 3 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &1975386770267099383 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5470490998714587725} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5990680971482219817 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5470490998714587725} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &1738541975412633261 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5470490998714587725} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -8113768720884857512, guid: db00624d3fe60844abb4d66bdbf25b98, type: 3} ---- !u!1 &5487066918427083625 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 261628436605896159} - - component: {fileID: 2476085173974508470} - - component: {fileID: 618201419204216598} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &261628436605896159 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5487066918427083625} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2409653499325086064} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2476085173974508470 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5487066918427083625} - 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!114 &618201419204216598 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5487066918427083625} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5507904164783285108 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 407017475634588163} - - component: {fileID: 6375593306675362358} - - component: {fileID: 9141121806024696470} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &407017475634588163 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5507904164783285108} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7773294191514167667} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6375593306675362358 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5507904164783285108} - 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!114 &9141121806024696470 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5507904164783285108} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5994906155696787932 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 786997990984544244} - - component: {fileID: 4828638270966436481} - - component: {fileID: 4634097296674843224} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &786997990984544244 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5994906155696787932} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3691432370352237127} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4828638270966436481 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5994906155696787932} - 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!114 &4634097296674843224 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5994906155696787932} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6049367646099093189 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5354527946454561324} - - component: {fileID: 8651169602351034772} - - component: {fileID: 1534840394283329449} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5354527946454561324 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6049367646099093189} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9105152300404503799} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8651169602351034772 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6049367646099093189} - 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!114 &1534840394283329449 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6049367646099093189} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6313833994080370116 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1276392681267110432} - - component: {fileID: 6261471278143667753} - - component: {fileID: 8666655070862809021} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1276392681267110432 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6313833994080370116} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2409653499325086064} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6261471278143667753 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6313833994080370116} - 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!114 &8666655070862809021 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6313833994080370116} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6522344247959992116 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 165580922552572780} - - component: {fileID: 7562259668973960999} - - component: {fileID: 6222166011270285242} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &165580922552572780 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6522344247959992116} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2409653499325086064} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7562259668973960999 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6522344247959992116} - 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!114 &6222166011270285242 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6522344247959992116} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6655596062251900320 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7599813322869344219} - - component: {fileID: 4735397389480917930} - - component: {fileID: 7102812947015956552} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7599813322869344219 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6655596062251900320} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3691432370352237127} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4735397389480917930 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6655596062251900320} - 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!114 &7102812947015956552 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6655596062251900320} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6723161319687006014 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8563928327426696036} - - component: {fileID: 7424357403464321266} - - component: {fileID: 3492625981607685393} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8563928327426696036 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6723161319687006014} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3691432370352237127} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7424357403464321266 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6723161319687006014} - 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!114 &3492625981607685393 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6723161319687006014} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7331298068901779711 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2897734576507399633} - - component: {fileID: 9094961929014425677} - - component: {fileID: 3200976053427325117} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2897734576507399633 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7331298068901779711} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9105152300404503799} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9094961929014425677 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7331298068901779711} - 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!114 &3200976053427325117 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7331298068901779711} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7626922673231747421 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6504901933861008520} - - component: {fileID: 9129919028898483913} - - component: {fileID: 285433058550273300} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6504901933861008520 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7626922673231747421} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7773294191514167667} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9129919028898483913 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7626922673231747421} - 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!114 &285433058550273300 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7626922673231747421} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7943624576934271763 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3885148426531282851} - - component: {fileID: 704259050146827490} - - component: {fileID: 6738774193604928213} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3885148426531282851 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7943624576934271763} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2409653499325086064} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &704259050146827490 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7943624576934271763} - 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!114 &6738774193604928213 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7943624576934271763} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7980621840423770092 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3837845464818518488} - - component: {fileID: 5295485701985902721} - - component: {fileID: 6949085683080415064} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3837845464818518488 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7980621840423770092} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3691432370352237127} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5295485701985902721 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7980621840423770092} - 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!114 &6949085683080415064 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7980621840423770092} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8039408339996031659 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4252828664931021139} - - component: {fileID: 674320866609351847} - - component: {fileID: 7208761299706952109} - m_Layer: 8 - m_Name: Object001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4252828664931021139 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8039408339996031659} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: -0.1415, z: 0.0014311438} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6415611005981486864} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &674320866609351847 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8039408339996031659} - m_Mesh: {fileID: -3292925553009838691, guid: fcc65de0395699040be81595ac8a1eda, type: 3} ---- !u!23 &7208761299706952109 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8039408339996031659} - 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: -7070273339311796134, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: 4999486961255905946, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: 9077612666303962245, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: 699023012457304161, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: 3925418980499852262, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: -4532057987183913879, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: 6012098043614753949, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - 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!1 &8067939737201052166 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4613412321321113344} - - component: {fileID: 2494256470602616620} - - component: {fileID: 7965141584194109034} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4613412321321113344 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8067939737201052166} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.01417, z: -0.005036} - m_LocalScale: {x: 0.025679393, y: 0.016589442, z: 0.01655847} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3691432370352237127} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2494256470602616620 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8067939737201052166} - 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!114 &7965141584194109034 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8067939737201052166} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8092245846019895861 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6415611005981486864} - m_Layer: 8 - m_Name: "\u524D\u76D6" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6415611005981486864 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8092245846019895861} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0, y: 0.1415, z: -0.0139} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4252828664931021139} - m_Father: {fileID: 1809810455016100285} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &8136364133597622351 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4651907330112588073} - - component: {fileID: 3763093541619206922} - - component: {fileID: 950695348927946583} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4651907330112588073 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8136364133597622351} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.0142, z: -0.0042} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9105152300404503799} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3763093541619206922 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8136364133597622351} - 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!114 &950695348927946583 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8136364133597622351} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8296756849361426717 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1156343444966032674} - - component: {fileID: 7907897108224174758} - - component: {fileID: 8707500633016776330} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1156343444966032674 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8296756849361426717} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014200008, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2409653499325086064} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7907897108224174758 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8296756849361426717} - 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!114 &8707500633016776330 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8296756849361426717} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8428874455493645318 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2409653499325086064} - - component: {fileID: 3424744597334460754} - - component: {fileID: 7354752210433555815} - - component: {fileID: 8113073752947283472} - - component: {fileID: 4020944683182423172} - - component: {fileID: 5783201069112054551} - - component: {fileID: 6099358989538016400} - m_Layer: 8 - m_Name: Object006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2409653499325086064 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8428874455493645318} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00032439828, y: 0.08114039, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1156343444966032674} - - {fileID: 2416378272628441528} - - {fileID: 3885148426531282851} - - {fileID: 261628436605896159} - - {fileID: 1643971466701475124} - - {fileID: 1276392681267110432} - - {fileID: 2559902815344869863} - - {fileID: 2934185024808987956} - - {fileID: 165580922552572780} - - {fileID: 2504931808459437593} - - {fileID: 6062201838344050348} - - {fileID: 1482686939645509929} - m_Father: {fileID: 1809810455016100285} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3424744597334460754 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8428874455493645318} - m_Mesh: {fileID: -2639241166356525208, guid: fcc65de0395699040be81595ac8a1eda, type: 3} ---- !u!23 &7354752210433555815 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8428874455493645318} - 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: -1502669387472542646, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: 1038712434395320081, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: 7874494369389819107, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - 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!114 &8113073752947283472 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8428874455493645318} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &4020944683182423172 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8428874455493645318} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5783201069112054551 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8428874455493645318} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &6099358989538016400 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8428874455493645318} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -2639241166356525208, guid: db00624d3fe60844abb4d66bdbf25b98, type: 3} ---- !u!1 &8710966710829724540 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6436252087428107629} - - component: {fileID: 5226668236233917765} - - component: {fileID: 4654786953947619729} - - component: {fileID: 3934697166797126056} - m_Layer: 8 - m_Name: 6 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6436252087428107629 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8710966710829724540} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.178} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1809810455016100285} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5226668236233917765 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8710966710829724540} - m_Mesh: {fileID: -888404026515264504, guid: fcc65de0395699040be81595ac8a1eda, type: 3} ---- !u!23 &4654786953947619729 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8710966710829724540} - 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: -5598141350581169709, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: 3925418980499852262, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: 1368039103165038143, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: -5956578104803850452, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: 699023012457304161, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: -6257702196253466788, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: -6307277589567570940, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: -7070273339311796134, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: 9077612666303962245, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - 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!64 &3934697166797126056 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8710966710829724540} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -888404026515264504, guid: fcc65de0395699040be81595ac8a1eda, type: 3} ---- !u!1 &9088651268060242893 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9105152300404503799} - - component: {fileID: 6155958989312322892} - - component: {fileID: 7558701916635378582} - - component: {fileID: 8558057196800213298} - - component: {fileID: 1424342147077667801} - - component: {fileID: 8405864631428425364} - - component: {fileID: 446137667500640291} - m_Layer: 8 - m_Name: Object005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9105152300404503799 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9088651268060242893} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00032439828, y: 0.11210428, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4411189525966757186} - - {fileID: 8500522548303414722} - - {fileID: 1526333508211350604} - - {fileID: 4651907330112588073} - - {fileID: 2897734576507399633} - - {fileID: 8487168871639618018} - - {fileID: 5312483998835389232} - - {fileID: 7686625960349206396} - - {fileID: 9028680912223999330} - - {fileID: 9198213977359626854} - - {fileID: 6498119154108605159} - - {fileID: 5354527946454561324} - m_Father: {fileID: 1809810455016100285} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6155958989312322892 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9088651268060242893} - m_Mesh: {fileID: 9186633843763367028, guid: fcc65de0395699040be81595ac8a1eda, type: 3} ---- !u!23 &7558701916635378582 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9088651268060242893} - 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: -1502669387472542646, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: 1038712434395320081, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - - {fileID: 7874494369389819107, guid: fcc65de0395699040be81595ac8a1eda, type: 3} - 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!114 &8558057196800213298 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9088651268060242893} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &1424342147077667801 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9088651268060242893} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &8405864631428425364 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9088651268060242893} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &446137667500640291 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9088651268060242893} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 9186633843763367028, guid: db00624d3fe60844abb4d66bdbf25b98, type: 3} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/6.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/6.prefab.meta deleted file mode 100644 index 2cf0016b8..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/6.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 7a65d806902d609438141f610dc8cb66 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/7.prefab b/GQ_URP/GQ/Assets/prefab/老模型/7.prefab deleted file mode 100644 index 27ef2cfbc..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/7.prefab +++ /dev/null @@ -1,4976 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &6466289960699746 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7012147491552741282} - - component: {fileID: 2303640153585391040} - - component: {fileID: 2808994478567530427} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7012147491552741282 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6466289960699746} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4551159067210075583} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2303640153585391040 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6466289960699746} - 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!114 &2808994478567530427 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6466289960699746} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &436951694244789286 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6747085232408932359} - - component: {fileID: 382452510483086722} - - component: {fileID: 1307752201781692144} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6747085232408932359 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 436951694244789286} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8235274912799068943} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &382452510483086722 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 436951694244789286} - 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!114 &1307752201781692144 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 436951694244789286} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &459581684363227110 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1176111140433622726} - - component: {fileID: 2855326732971273165} - - component: {fileID: 7322466796868266491} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1176111140433622726 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 459581684363227110} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3270354636756721288} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2855326732971273165 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 459581684363227110} - 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!114 &7322466796868266491 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 459581684363227110} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &492366008622469770 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8841188926511243014} - - component: {fileID: 3566092398586063882} - - component: {fileID: 7219010632626864137} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8841188926511243014 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 492366008622469770} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8235274912799068943} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3566092398586063882 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 492366008622469770} - 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!114 &7219010632626864137 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 492366008622469770} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &503845369535263912 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7780003863312373432} - - component: {fileID: 2017442809808712033} - - component: {fileID: 2969080011578311627} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7780003863312373432 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 503845369535263912} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3270354636756721288} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2017442809808712033 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 503845369535263912} - 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!114 &2969080011578311627 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 503845369535263912} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &613626557493451800 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5854330203279642486} - - component: {fileID: 4475006616621034688} - - component: {fileID: 3604868934878533874} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5854330203279642486 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 613626557493451800} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7490089545336934027} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4475006616621034688 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 613626557493451800} - 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!114 &3604868934878533874 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 613626557493451800} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &728951877586166818 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4033214756529578564} - - component: {fileID: 6272598802986371486} - - component: {fileID: 3273513905767500015} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4033214756529578564 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 728951877586166818} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8235274912799068943} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6272598802986371486 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 728951877586166818} - 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!114 &3273513905767500015 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 728951877586166818} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1166801742275612011 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1634093379810484601} - - component: {fileID: 140925464698157183} - - component: {fileID: 2953520724074137269} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1634093379810484601 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1166801742275612011} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4551159067210075583} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &140925464698157183 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1166801742275612011} - 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!114 &2953520724074137269 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1166801742275612011} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1223503762704866511 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2570799125368706803} - - component: {fileID: 2622672215663453522} - - component: {fileID: 3150695352917331385} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2570799125368706803 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1223503762704866511} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4551159067210075583} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2622672215663453522 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1223503762704866511} - 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!114 &3150695352917331385 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1223503762704866511} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1331123745460182057 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7998721213288814151} - - component: {fileID: 6318235047748332173} - - component: {fileID: 8678770506161197861} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7998721213288814151 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1331123745460182057} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8235274912799068943} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6318235047748332173 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1331123745460182057} - 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!114 &8678770506161197861 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1331123745460182057} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1622343277688767510 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8165199819328049290} - - component: {fileID: 493548028924167009} - - component: {fileID: 4062468743713661507} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8165199819328049290 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1622343277688767510} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3270354636756721288} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &493548028924167009 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1622343277688767510} - 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!114 &4062468743713661507 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1622343277688767510} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1863906580621341636 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7726824566243369478} - - component: {fileID: 3225731167517391393} - - component: {fileID: 4353454099672301024} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7726824566243369478 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1863906580621341636} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4551159067210075583} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3225731167517391393 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1863906580621341636} - 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!114 &4353454099672301024 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1863906580621341636} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1971871968053507431 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6646012085584705959} - - component: {fileID: 2079272344110764630} - - component: {fileID: 4866938723766137125} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6646012085584705959 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1971871968053507431} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7490089545336934027} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2079272344110764630 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1971871968053507431} - 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!114 &4866938723766137125 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1971871968053507431} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1976576776379142010 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7747612748179522175} - - component: {fileID: 7496183753161860804} - - component: {fileID: 239776257747135514} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7747612748179522175 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1976576776379142010} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1486, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7490089545336934027} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7496183753161860804 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1976576776379142010} - 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!114 &239776257747135514 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1976576776379142010} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1981054093306949665 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5762480151183609120} - - component: {fileID: 4420696408083510285} - - component: {fileID: 7593140444950739017} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5762480151183609120 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1981054093306949665} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7490089545336934027} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4420696408083510285 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1981054093306949665} - 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!114 &7593140444950739017 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1981054093306949665} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2180868710361099519 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1517660457121756741} - - component: {fileID: 2749730858749986552} - - component: {fileID: 8556486164304544775} - - component: {fileID: 1032332464577036449} - - component: {fileID: 8045608176854018033} - - component: {fileID: -1606792559459061199} - m_Layer: 8 - m_Name: 7 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1517660457121756741 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2180868710361099519} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 6413378842198257295} - - {fileID: 6650378705953516050} - - {fileID: 4551159067210075583} - - {fileID: 7490089545336934027} - - {fileID: 8235274912799068943} - - {fileID: 3270354636756721288} - - {fileID: 3150772137473883759} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &2749730858749986552 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2180868710361099519} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 7 - occupyNum: 3 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &8556486164304544775 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2180868710361099519} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 3 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &1032332464577036449 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2180868710361099519} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &8045608176854018033 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2180868710361099519} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &-1606792559459061199 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2180868710361099519} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 3 - selfIcon: {fileID: 21300000, guid: 08d818f976fa1f34e93db9d0942a6848, type: 3} ---- !u!1 &2198197979435054472 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1914316476635831943} - - component: {fileID: 658158793089485759} - - component: {fileID: 861481708590947610} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1914316476635831943 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2198197979435054472} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3270354636756721288} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &658158793089485759 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2198197979435054472} - 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!114 &861481708590947610 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2198197979435054472} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2473666229355487814 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4911931098547731706} - - component: {fileID: 3679457947163905341} - - component: {fileID: 4702999366772134454} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4911931098547731706 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2473666229355487814} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7490089545336934027} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3679457947163905341 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2473666229355487814} - 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!114 &4702999366772134454 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2473666229355487814} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2661768728367435004 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 374397304530414485} - - component: {fileID: 4001031236017116508} - - component: {fileID: 1196432454117680758} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &374397304530414485 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2661768728367435004} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4551159067210075583} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4001031236017116508 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2661768728367435004} - 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!114 &1196432454117680758 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2661768728367435004} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3158107109096447520 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8428158549785333711} - - component: {fileID: 3548627523029071166} - - component: {fileID: 8574305034870600622} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8428158549785333711 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3158107109096447520} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3270354636756721288} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3548627523029071166 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3158107109096447520} - 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!114 &8574305034870600622 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3158107109096447520} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3268180593070392255 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4531288431429843083} - - component: {fileID: 1938043454670955921} - - component: {fileID: 2621806515877288076} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4531288431429843083 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3268180593070392255} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8235274912799068943} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1938043454670955921 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3268180593070392255} - 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!114 &2621806515877288076 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3268180593070392255} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3404049999032124406 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5271273240115492999} - - component: {fileID: 7942766425852894576} - - component: {fileID: 6027140351530612813} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5271273240115492999 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3404049999032124406} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7490089545336934027} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7942766425852894576 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3404049999032124406} - 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!114 &6027140351530612813 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3404049999032124406} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3711090832729355922 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3150772137473883759} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3150772137473883759 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3711090832729355922} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -0.13499999, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1517660457121756741} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &3823862494699528823 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4837697702276290092} - - component: {fileID: 2147004612365284236} - - component: {fileID: 8487547975619372352} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4837697702276290092 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3823862494699528823} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8235274912799068943} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2147004612365284236 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3823862494699528823} - 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!114 &8487547975619372352 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3823862494699528823} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3842078960680870734 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1998879567027944334} - - component: {fileID: 7264690756198343502} - - component: {fileID: 3760169677890550319} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1998879567027944334 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3842078960680870734} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3270354636756721288} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7264690756198343502 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3842078960680870734} - 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!114 &3760169677890550319 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3842078960680870734} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4515513727796606782 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3418456972788397435} - - component: {fileID: 6444305328022130320} - - component: {fileID: 3991302777803648777} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3418456972788397435 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4515513727796606782} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1133, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7490089545336934027} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6444305328022130320 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4515513727796606782} - 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!114 &3991302777803648777 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4515513727796606782} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4587673771428696382 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5861591561704868479} - - component: {fileID: 4407718449315039264} - - component: {fileID: 9138113498883106449} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5861591561704868479 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4587673771428696382} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7490089545336934027} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4407718449315039264 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4587673771428696382} - 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!114 &9138113498883106449 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4587673771428696382} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4634365946406335050 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4178683298669405946} - - component: {fileID: 4050681290524471499} - - component: {fileID: 4199327174446617117} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4178683298669405946 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4634365946406335050} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8235274912799068943} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4050681290524471499 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4634365946406335050} - 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!114 &4199327174446617117 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4634365946406335050} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4908583215595420598 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5385532684076268747} - - component: {fileID: 23781221880738075} - - component: {fileID: 6963812976004343603} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5385532684076268747 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4908583215595420598} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8235274912799068943} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &23781221880738075 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4908583215595420598} - 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!114 &6963812976004343603 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4908583215595420598} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5024245303841814616 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5134493695007829123} - - component: {fileID: 2506928755081755483} - - component: {fileID: 2158285280394388231} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5134493695007829123 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5024245303841814616} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3270354636756721288} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2506928755081755483 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5024245303841814616} - 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!114 &2158285280394388231 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5024245303841814616} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5071460421812828574 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6413378842198257295} - - component: {fileID: 3158512676996528698} - - component: {fileID: 5023549445653516191} - m_Layer: 8 - m_Name: 7 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6413378842198257295 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5071460421812828574} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.178} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1517660457121756741} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3158512676996528698 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5071460421812828574} - m_Mesh: {fileID: -7821917557700976381, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} ---- !u!23 &5023549445653516191 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5071460421812828574} - 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: -5598141350581169709, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: 3925418980499852262, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: 1368039103165038143, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: -5956578104803850452, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: -6307277589567570940, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: 9077612666303962245, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: -5956578104803850452, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - 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!1 &5186312460582862261 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7490089545336934027} - - component: {fileID: 8996924546554733658} - - component: {fileID: 6161303547748880184} - - component: {fileID: 3414587944288426549} - - component: {fileID: 5954250983065014149} - - component: {fileID: 5846148184537968584} - - component: {fileID: 3790565922537219893} - m_Layer: 13 - m_Name: Object004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7490089545336934027 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5186312460582862261} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00032439828, y: 0.05017651, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 5861591561704868479} - - {fileID: 5271273240115492999} - - {fileID: 3418456972788397435} - - {fileID: 6646012085584705959} - - {fileID: 5762480151183609120} - - {fileID: 4911931098547731706} - - {fileID: 8578438157496946673} - - {fileID: 1014071392255968368} - - {fileID: 7747612748179522175} - - {fileID: 1401671684054543609} - - {fileID: 5854330203279642486} - - {fileID: 108497767148234343} - m_Father: {fileID: 1517660457121756741} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8996924546554733658 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5186312460582862261} - m_Mesh: {fileID: -8113768720884857512, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} ---- !u!23 &6161303547748880184 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5186312460582862261} - 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: -1502669387472542646, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: 1038712434395320081, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: 7874494369389819107, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - 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!114 &3414587944288426549 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5186312460582862261} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 3 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &5954250983065014149 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5186312460582862261} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5846148184537968584 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5186312460582862261} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &3790565922537219893 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5186312460582862261} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -8113768720884857512, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} ---- !u!1 &5199776966589330839 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1401671684054543609} - - component: {fileID: 1430169352212533530} - - component: {fileID: 3740529231959412781} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1401671684054543609 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5199776966589330839} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7490089545336934027} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1430169352212533530 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5199776966589330839} - 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!114 &3740529231959412781 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5199776966589330839} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5541499366704554634 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4551159067210075583} - - component: {fileID: 7019303067246947003} - - component: {fileID: 7136455811689473850} - - component: {fileID: 712462963342329280} - - component: {fileID: 1622946762166081420} - - component: {fileID: 6697208414870035947} - - component: {fileID: 2494760297913393572} - m_Layer: 13 - m_Name: Object002 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4551159067210075583 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5541499366704554634} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00032439828, y: 0.019212604, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 3466576048446772174} - - {fileID: 1189976641566834086} - - {fileID: 374397304530414485} - - {fileID: 2570799125368706803} - - {fileID: 7012147491552741282} - - {fileID: 481396174828060005} - - {fileID: 7726824566243369478} - - {fileID: 2610052363959755864} - - {fileID: 1634093379810484601} - - {fileID: 4815051248077866193} - - {fileID: 6106724183339413870} - - {fileID: 122618376948014748} - m_Father: {fileID: 1517660457121756741} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7019303067246947003 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5541499366704554634} - m_Mesh: {fileID: -3996760141626369306, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} ---- !u!23 &7136455811689473850 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5541499366704554634} - 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: -1502669387472542646, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: 1038712434395320081, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: 7874494369389819107, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - 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!114 &712462963342329280 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5541499366704554634} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 4 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &1622946762166081420 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5541499366704554634} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &6697208414870035947 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5541499366704554634} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &2494760297913393572 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5541499366704554634} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -3996760141626369306, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} ---- !u!1 &5986482878961829029 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8876828394047054743} - - component: {fileID: 1478582632638645186} - - component: {fileID: 155306081936300622} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8876828394047054743 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5986482878961829029} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8235274912799068943} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1478582632638645186 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5986482878961829029} - 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!114 &155306081936300622 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5986482878961829029} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6006504465333400677 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6650378705953516050} - m_Layer: 8 - m_Name: "\u524D\u76D6" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6650378705953516050 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6006504465333400677} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0.134, z: -0.0105} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 3969773552200849067} - m_Father: {fileID: 1517660457121756741} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &6049685061356224927 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8143694141939771260} - - component: {fileID: 5687507464902475989} - - component: {fileID: 8408319466380205669} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8143694141939771260 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6049685061356224927} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3270354636756721288} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5687507464902475989 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6049685061356224927} - 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!114 &8408319466380205669 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6049685061356224927} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6488398982264451591 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3466576048446772174} - - component: {fileID: 5895595120508417528} - - component: {fileID: 4407679381235930762} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3466576048446772174 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6488398982264451591} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20285, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4551159067210075583} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5895595120508417528 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6488398982264451591} - 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!114 &4407679381235930762 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6488398982264451591} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6510218008484742808 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2610052363959755864} - - component: {fileID: 3533845782117680754} - - component: {fileID: 1615423455956276139} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2610052363959755864 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6510218008484742808} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4551159067210075583} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3533845782117680754 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6510218008484742808} - 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!114 &1615423455956276139 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6510218008484742808} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6591895598322368428 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 481396174828060005} - - component: {fileID: 5577550864844875043} - - component: {fileID: 6427769195793969496} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &481396174828060005 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6591895598322368428} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4551159067210075583} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5577550864844875043 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6591895598322368428} - 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!114 &6427769195793969496 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6591895598322368428} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6881067989962390731 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8945163625816995446} - - component: {fileID: 5242248005959987767} - - component: {fileID: 8727438022657275134} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8945163625816995446 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6881067989962390731} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0235, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3270354636756721288} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5242248005959987767 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6881067989962390731} - 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!114 &8727438022657275134 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6881067989962390731} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7081941732045977159 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 631071653686365110} - - component: {fileID: 105423107705151852} - - component: {fileID: 8047645483220943836} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &631071653686365110 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7081941732045977159} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0701, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8235274912799068943} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &105423107705151852 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7081941732045977159} - 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!114 &8047645483220943836 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7081941732045977159} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7138268464063656413 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6908167650041032740} - - component: {fileID: 9045182776443638770} - - component: {fileID: 1605710913680646565} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6908167650041032740 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7138268464063656413} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8235274912799068943} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9045182776443638770 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7138268464063656413} - 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!114 &1605710913680646565 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7138268464063656413} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7170815181908696403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3969773552200849067} - - component: {fileID: 381053764754320223} - - component: {fileID: 7500964074239188565} - m_Layer: 8 - m_Name: Object001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3969773552200849067 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7170815181908696403} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: -0.134, z: -0.0019688709} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6650378705953516050} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &381053764754320223 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7170815181908696403} - m_Mesh: {fileID: -3292925553009838691, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} ---- !u!23 &7500964074239188565 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7170815181908696403} - 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: 1368039103165038143, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: -5956578104803850452, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: 9077612666303962245, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: -6307277589567570940, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: -8757356216087587297, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: -4532057987183913879, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: 6012098043614753949, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - 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!1 &7254361797382996338 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7103266995761712619} - - component: {fileID: 6370082980662272350} - - component: {fileID: 721833597340268450} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7103266995761712619 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7254361797382996338} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3270354636756721288} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6370082980662272350 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7254361797382996338} - 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!114 &721833597340268450 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7254361797382996338} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7653770608206596355 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5275989007271923626} - - component: {fileID: 6675884474796716096} - - component: {fileID: 4785352726412349634} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5275989007271923626 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7653770608206596355} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3270354636756721288} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6675884474796716096 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7653770608206596355} - 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!114 &4785352726412349634 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7653770608206596355} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7655225684361902693 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8578438157496946673} - - component: {fileID: 4602219581112964886} - - component: {fileID: 3377490741690377931} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8578438157496946673 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7655225684361902693} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0661, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7490089545336934027} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4602219581112964886 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7655225684361902693} - 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!114 &3377490741690377931 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7655225684361902693} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7855016404796353435 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4815051248077866193} - - component: {fileID: 6614136414256307998} - - component: {fileID: 2950474259848838655} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4815051248077866193 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7855016404796353435} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4551159067210075583} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6614136414256307998 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7855016404796353435} - 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!114 &2950474259848838655 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7855016404796353435} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7923346840037289918 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1014071392255968368} - - component: {fileID: 5495913075519219570} - - component: {fileID: 4550509316251458564} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1014071392255968368 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7923346840037289918} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1093, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7490089545336934027} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5495913075519219570 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7923346840037289918} - 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!114 &4550509316251458564 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7923346840037289918} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8098371324965607474 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1301110963376215824} - - component: {fileID: 745115595906856726} - - component: {fileID: 6428477761074811038} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1301110963376215824 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8098371324965607474} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1918, y: -0.014200004, z: -0.0041999985} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8235274912799068943} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &745115595906856726 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8098371324965607474} - 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!114 &6428477761074811038 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8098371324965607474} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8228935291579237429 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8235274912799068943} - - component: {fileID: 6448082874480888500} - - component: {fileID: 7275435972223718510} - - component: {fileID: 218941098208183209} - - component: {fileID: 7298715795877343114} - - component: {fileID: 7283763052035079211} - - component: {fileID: 6131352522227844773} - m_Layer: 13 - m_Name: Object005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8235274912799068943 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8228935291579237429} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00032439828, y: 0.11210428, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8876828394047054743} - - {fileID: 5385532684076268747} - - {fileID: 4531288431429843083} - - {fileID: 631071653686365110} - - {fileID: 6747085232408932359} - - {fileID: 6908167650041032740} - - {fileID: 4837697702276290092} - - {fileID: 8841188926511243014} - - {fileID: 4033214756529578564} - - {fileID: 1301110963376215824} - - {fileID: 7998721213288814151} - - {fileID: 4178683298669405946} - m_Father: {fileID: 1517660457121756741} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6448082874480888500 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8228935291579237429} - m_Mesh: {fileID: 9186633843763367028, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} ---- !u!23 &7275435972223718510 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8228935291579237429} - 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: -1502669387472542646, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: 1038712434395320081, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: 7874494369389819107, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - 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!114 &218941098208183209 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8228935291579237429} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7298715795877343114 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8228935291579237429} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &7283763052035079211 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8228935291579237429} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &6131352522227844773 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8228935291579237429} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 9186633843763367028, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} ---- !u!1 &8303340145381249085 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1189976641566834086} - - component: {fileID: 4117240495389472642} - - component: {fileID: 6997422769986484654} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1189976641566834086 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8303340145381249085} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1596, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4551159067210075583} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4117240495389472642 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8303340145381249085} - 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!114 &6997422769986484654 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8303340145381249085} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8692723324566446702 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4079980335391265951} - - component: {fileID: 677225083767352377} - - component: {fileID: 1479198907574873019} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4079980335391265951 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8692723324566446702} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0197, y: -0.014200011, z: -0.0051361118} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3270354636756721288} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &677225083767352377 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8692723324566446702} - 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!114 &1479198907574873019 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8692723324566446702} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8713072785979864062 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3270354636756721288} - - component: {fileID: 2564041534226624170} - - component: {fileID: 7639012113021328031} - - component: {fileID: 1505150054376788461} - - component: {fileID: 5102050015121047631} - - component: {fileID: 8994004164925435679} - - component: {fileID: 6499525540688220663} - m_Layer: 13 - m_Name: Object006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3270354636756721288 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8713072785979864062} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00032439828, y: 0.08114039, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8165199819328049290} - - {fileID: 8143694141939771260} - - {fileID: 8428158549785333711} - - {fileID: 1914316476635831943} - - {fileID: 8945163625816995446} - - {fileID: 4079980335391265951} - - {fileID: 5275989007271923626} - - {fileID: 7103266995761712619} - - {fileID: 7780003863312373432} - - {fileID: 1998879567027944334} - - {fileID: 5134493695007829123} - - {fileID: 1176111140433622726} - m_Father: {fileID: 1517660457121756741} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2564041534226624170 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8713072785979864062} - m_Mesh: {fileID: -2639241166356525208, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} ---- !u!23 &7639012113021328031 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8713072785979864062} - 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: -1502669387472542646, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: 1038712434395320081, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - - {fileID: 7874494369389819107, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} - 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!114 &1505150054376788461 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8713072785979864062} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &5102050015121047631 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8713072785979864062} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &8994004164925435679 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8713072785979864062} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &6499525540688220663 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8713072785979864062} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -2639241166356525208, guid: c75b73a9564649e4dbe4b0331c426bf4, type: 3} ---- !u!1 &8745236480345320045 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6106724183339413870} - - component: {fileID: 6399754879386675611} - - component: {fileID: 1604622250228214145} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6106724183339413870 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8745236480345320045} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2382, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4551159067210075583} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6399754879386675611 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8745236480345320045} - 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!114 &1604622250228214145 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8745236480345320045} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8814500480986239315 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 108497767148234343} - - component: {fileID: 7378693709483791754} - - component: {fileID: 5529860196088685803} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &108497767148234343 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8814500480986239315} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014200004, z: -0.005000001} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7490089545336934027} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7378693709483791754 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8814500480986239315} - 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!114 &5529860196088685803 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8814500480986239315} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9100836835779210120 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 122618376948014748} - - component: {fileID: 5287168974372836266} - - component: {fileID: 461676402112191707} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &122618376948014748 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9100836835779210120} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2814, y: -0.014170004, z: -0.005036} - m_LocalScale: {x: 0.02568, y: 0.01659, z: 0.01656} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4551159067210075583} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5287168974372836266 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9100836835779210120} - 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!114 &461676402112191707 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9100836835779210120} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/7.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/7.prefab.meta deleted file mode 100644 index b6cc7e247..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/7.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 8c00f9c577459394da11edebe976f2c0 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/72.prefab b/GQ_URP/GQ/Assets/prefab/老模型/72.prefab deleted file mode 100644 index f9f5aae6b..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/72.prefab +++ /dev/null @@ -1,2443 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &482189431737046359 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6875610606523331934} - - component: {fileID: 4785873459438808820} - - component: {fileID: 6565616224124442174} - m_Layer: 8 - m_Name: Box012 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6875610606523331934 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 482189431737046359} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.25245005, y: 0.010946363, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9195929034740950319} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4785873459438808820 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 482189431737046359} - m_Mesh: {fileID: -8586770294792153069, guid: 485c2b00c505121468e2d20910842a74, type: 3} ---- !u!23 &6565616224124442174 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 482189431737046359} - 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} - 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!1 &856969183972585711 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4734591261901437121} - - component: {fileID: 6701678979238303169} - - component: {fileID: 2940551595673964144} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4734591261901437121 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 856969183972585711} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.05982, y: -0.0384, z: 0.00256} - m_LocalScale: {x: 0.018469337, y: 0.0070382934, z: 0.008723894} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 357651495569646082} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6701678979238303169 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 856969183972585711} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2940551595673964144 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 856969183972585711} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1150536130244002931 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2917084948660627003} - - component: {fileID: 9169189844840779767} - - component: {fileID: 7656873205880731839} - m_Layer: 8 - m_Name: Box010 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2917084948660627003 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1150536130244002931} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.25245005, y: 0.076190375, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9195929034740950319} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &9169189844840779767 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1150536130244002931} - m_Mesh: {fileID: -3613724358419971262, guid: 485c2b00c505121468e2d20910842a74, type: 3} ---- !u!23 &7656873205880731839 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1150536130244002931} - 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} - 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!1 &1515585986264404370 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1114349681946035048} - - component: {fileID: 7287676780709367644} - - component: {fileID: 2340865216886490663} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1114349681946035048 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1515585986264404370} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0557, y: -0.0384, z: 0.0009} - m_LocalScale: {x: 0.015820675, y: 0.0070382925, z: 0.0070382925} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1960461498392397383} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7287676780709367644 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1515585986264404370} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2340865216886490663 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1515585986264404370} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1747631373302501177 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2401170287472419786} - - component: {fileID: 1220972951327370894} - - component: {fileID: 1153473724653280644} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2401170287472419786 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1747631373302501177} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0251, y: -0.0384, z: 0.0009} - m_LocalScale: {x: 0.015820675, y: 0.0070382925, z: 0.0070382925} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1960461498392397383} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1220972951327370894 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1747631373302501177} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1153473724653280644 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1747631373302501177} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2121749107374913334 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3695571790556121984} - - component: {fileID: 7124836304424326529} - - component: {fileID: 1293435696873095853} - m_Layer: 8 - m_Name: Box005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3695571790556121984 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2121749107374913334} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.13627979, y: 0.076190375, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9195929034740950319} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7124836304424326529 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2121749107374913334} - m_Mesh: {fileID: 6715375062900545627, guid: 485c2b00c505121468e2d20910842a74, type: 3} ---- !u!23 &1293435696873095853 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2121749107374913334} - 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} - 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!1 &2363121953503989061 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7002425485119909168} - - component: {fileID: 3310600192044437451} - - component: {fileID: 1576623481315912274} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7002425485119909168 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2363121953503989061} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.014, y: -0.0384, z: 0.0026} - m_LocalScale: {x: 0.018469337, y: 0.0070382934, z: 0.008723894} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 357651495569646082} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3310600192044437451 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2363121953503989061} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1576623481315912274 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2363121953503989061} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2387128686377155490 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6244430166895343975} - - component: {fileID: 2686175330058171290} - - component: {fileID: 275471886905864612} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6244430166895343975 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2387128686377155490} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0055, y: -0.0384, z: 0.0026} - m_LocalScale: {x: 0.018469337, y: 0.0070382934, z: 0.008723894} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 357651495569646082} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2686175330058171290 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2387128686377155490} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &275471886905864612 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2387128686377155490} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2411937808211093527 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5291180821337465080} - - component: {fileID: 3771302589967944756} - - component: {fileID: 6250051000949515338} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5291180821337465080 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2411937808211093527} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.045, y: -0.0384, z: 0.0009} - m_LocalScale: {x: 0.015820675, y: 0.0070382925, z: 0.0070382925} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1960461498392397383} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3771302589967944756 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2411937808211093527} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6250051000949515338 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2411937808211093527} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2658331125133410770 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2314329945903911800} - - component: {fileID: 7535824427989844789} - - component: {fileID: 6445315517561927957} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2314329945903911800 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2658331125133410770} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0159, y: -0.0384, z: 0.0009} - m_LocalScale: {x: 0.015820675, y: 0.0070382925, z: 0.0070382925} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1960461498392397383} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7535824427989844789 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2658331125133410770} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6445315517561927957 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2658331125133410770} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3278429269781815869 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1960461498392397383} - - component: {fileID: 9067915392029391222} - - component: {fileID: 5540346071357939484} - - component: {fileID: 4438781157501513737} - - component: {fileID: 8891912836397626205} - - component: {fileID: 3498217830892410808} - - component: {fileID: 7798265808217324494} - m_Layer: 8 - m_Name: Box007 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1960461498392397383 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3278429269781815869} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.13627979, y: 0.033658683, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1114349681946035048} - - {fileID: 6565034066467974537} - - {fileID: 2314329945903911800} - - {fileID: 5895847266399802663} - - {fileID: 2401170287472419786} - - {fileID: 5291180821337465080} - - {fileID: 6300293678536611051} - m_Father: {fileID: 9195929034740950319} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &9067915392029391222 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3278429269781815869} - m_Mesh: {fileID: 2954858793080512207, guid: 485c2b00c505121468e2d20910842a74, type: 3} ---- !u!23 &5540346071357939484 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3278429269781815869} - 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 9147106888433294362, guid: 485c2b00c505121468e2d20910842a74, type: 3} - 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!114 &4438781157501513737 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3278429269781815869} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &8891912836397626205 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3278429269781815869} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &3498217830892410808 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3278429269781815869} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &7798265808217324494 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3278429269781815869} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 2954858793080512207, guid: 485c2b00c505121468e2d20910842a74, type: 3} ---- !u!1 &4298635201274539785 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3334391432821072815} - - component: {fileID: 5348440982826000703} - - component: {fileID: 3765361927073842692} - m_Layer: 8 - m_Name: Box011 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3334391432821072815 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4298635201274539785} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.25245005, y: 0.044149205, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9195929034740950319} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5348440982826000703 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4298635201274539785} - m_Mesh: {fileID: -5243098771569098612, guid: 485c2b00c505121468e2d20910842a74, type: 3} ---- !u!23 &3765361927073842692 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4298635201274539785} - 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} - 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!1 &5534218893537119748 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5895847266399802663} - - component: {fileID: 5524674245755427659} - - component: {fileID: 6746143595554993570} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5895847266399802663 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5534218893537119748} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0052, y: -0.0384, z: 0.0009} - m_LocalScale: {x: 0.015820675, y: 0.0070382925, z: 0.0070382925} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1960461498392397383} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5524674245755427659 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5534218893537119748} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6746143595554993570 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5534218893537119748} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5765584386644440121 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4948177639014342161} - - component: {fileID: 889614255414216005} - - component: {fileID: 2168031756922958778} - m_Layer: 8 - m_Name: Box013 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4948177639014342161 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5765584386644440121} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.086409554, y: 0.055102743, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9195929034740950319} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &889614255414216005 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5765584386644440121} - m_Mesh: {fileID: -7061585933124598971, guid: 485c2b00c505121468e2d20910842a74, type: 3} ---- !u!23 &2168031756922958778 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5765584386644440121} - 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} - 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!1 &6129368277008642782 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9211151114829843429} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9211151114829843429 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6129368277008642782} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: -0.09000003, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9195929034740950319} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &6180820938600401651 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1876549337883412784} - - component: {fileID: 2830891867818772913} - - component: {fileID: 7214640286557272624} - m_Layer: 8 - m_Name: Box008 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1876549337883412784 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6180820938600401651} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.13627979, y: 0.012417968, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9195929034740950319} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2830891867818772913 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6180820938600401651} - m_Mesh: {fileID: 1226723149311242300, guid: 485c2b00c505121468e2d20910842a74, type: 3} ---- !u!23 &7214640286557272624 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6180820938600401651} - 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} - 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!1 &6412949739511598290 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8730402899474466956} - - component: {fileID: 3180726551967624359} - - component: {fileID: 5323649193304985565} - m_Layer: 8 - m_Name: Box016 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8730402899474466956 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6412949739511598290} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.086409554, y: 0.076190375, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9195929034740950319} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3180726551967624359 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6412949739511598290} - m_Mesh: {fileID: -5573580799846109427, guid: 485c2b00c505121468e2d20910842a74, type: 3} ---- !u!23 &5323649193304985565 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6412949739511598290} - 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} - 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!1 &6517559550076305500 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6565034066467974537} - - component: {fileID: 880231213802706522} - - component: {fileID: 1480423700507125694} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6565034066467974537 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6517559550076305500} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0356, y: -0.0384, z: 0.0009} - m_LocalScale: {x: 0.015820675, y: 0.0070382925, z: 0.0070382925} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1960461498392397383} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &880231213802706522 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6517559550076305500} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1480423700507125694 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6517559550076305500} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7143799830633966624 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7818113049842646740} - - component: {fileID: 8207929455577108907} - - component: {fileID: 2697488802239806561} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7818113049842646740 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7143799830633966624} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.032, y: -0.0384, z: 0.0026} - m_LocalScale: {x: 0.018469337, y: 0.0070382934, z: 0.008723894} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 357651495569646082} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8207929455577108907 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7143799830633966624} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2697488802239806561 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7143799830633966624} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7641101875273723827 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7123307429790817367} - - component: {fileID: 8923754311589028895} - - component: {fileID: 6754667742161792500} - m_Layer: 8 - m_Name: 72 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7123307429790817367 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7641101875273723827} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0, z: -0.0000000013300747} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9195929034740950319} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8923754311589028895 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7641101875273723827} - m_Mesh: {fileID: -4515405397461973118, guid: 485c2b00c505121468e2d20910842a74, type: 3} ---- !u!23 &6754667742161792500 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7641101875273723827} - 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: 3274929075364713951, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 1164559979738526386, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -1152147162816932204, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -5309146791756261813, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 1196480866727828669, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 9147106888433294362, guid: 485c2b00c505121468e2d20910842a74, type: 3} - 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!1 &7787742733072155388 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 357651495569646082} - - component: {fileID: 1990295736347734890} - - component: {fileID: 8471371523706137211} - - component: {fileID: 8350072787214999544} - - component: {fileID: 5974506171472320814} - - component: {fileID: 3188335850565293677} - - component: {fileID: 9093348841278228429} - m_Layer: 8 - m_Name: Box015 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &357651495569646082 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7787742733072155388} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.086409554, y: 0.012417968, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4734591261901437121} - - {fileID: 7818113049842646740} - - {fileID: 6244430166895343975} - - {fileID: 7002425485119909168} - m_Father: {fileID: 9195929034740950319} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1990295736347734890 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7787742733072155388} - m_Mesh: {fileID: -8298940227465870776, guid: 485c2b00c505121468e2d20910842a74, type: 3} ---- !u!23 &8471371523706137211 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7787742733072155388} - 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 9147106888433294362, guid: 485c2b00c505121468e2d20910842a74, type: 3} - 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!114 &8350072787214999544 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7787742733072155388} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5974506171472320814 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7787742733072155388} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &3188335850565293677 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7787742733072155388} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &9093348841278228429 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7787742733072155388} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -8298940227465870776, guid: 485c2b00c505121468e2d20910842a74, type: 3} ---- !u!1 &7901197303850085881 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6300293678536611051} - - component: {fileID: 4118101905547112677} - - component: {fileID: 7107287286310920082} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6300293678536611051 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7901197303850085881} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.0907, y: -0.0384, z: 0.0028} - m_LocalScale: {x: 0.015820675, y: 0.0070382925, z: 0.0070382925} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1960461498392397383} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4118101905547112677 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7901197303850085881} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7107287286310920082 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7901197303850085881} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8013749330794973722 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5338766445945811844} - - component: {fileID: 7686566737353861985} - - component: {fileID: 4262205469142226816} - m_Layer: 8 - m_Name: Box014 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5338766445945811844 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8013749330794973722} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.086409554, y: 0.033658683, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9195929034740950319} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7686566737353861985 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8013749330794973722} - m_Mesh: {fileID: 3868671361854562809, guid: 485c2b00c505121468e2d20910842a74, type: 3} ---- !u!23 &4262205469142226816 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8013749330794973722} - 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} - 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!1 &8258005104647750164 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4165475121286834271} - - component: {fileID: 5007053416096866610} - - component: {fileID: 83469022950388769} - m_Layer: 8 - m_Name: Box006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4165475121286834271 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8258005104647750164} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.13627979, y: 0.055102743, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9195929034740950319} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5007053416096866610 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8258005104647750164} - m_Mesh: {fileID: 3822247309040838107, guid: 485c2b00c505121468e2d20910842a74, type: 3} ---- !u!23 &83469022950388769 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8258005104647750164} - 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} - 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!1 &8418723111274233749 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9195929034740950319} - - component: {fileID: 3916775737938551646} - - component: {fileID: 6453075766205033266} - - component: {fileID: 1549324004219920364} - - component: {fileID: -6135386223613992629} - - component: {fileID: 7229714164751499779} - m_Layer: 8 - m_Name: 72 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9195929034740950319 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8418723111274233749} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 7123307429790817367} - - {fileID: 3695571790556121984} - - {fileID: 4165475121286834271} - - {fileID: 1960461498392397383} - - {fileID: 1876549337883412784} - - {fileID: 8953568112751182651} - - {fileID: 2917084948660627003} - - {fileID: 3334391432821072815} - - {fileID: 6875610606523331934} - - {fileID: 4948177639014342161} - - {fileID: 5338766445945811844} - - {fileID: 357651495569646082} - - {fileID: 8730402899474466956} - - {fileID: 9211151114829843429} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &3916775737938551646 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8418723111274233749} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 72 - occupyNum: 1 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &6453075766205033266 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8418723111274233749} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 1 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &1549324004219920364 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8418723111274233749} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &-6135386223613992629 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8418723111274233749} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &7229714164751499779 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8418723111274233749} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 1 - selfIcon: {fileID: 21300000, guid: 4f9cb685f05acab45b2b13beccf4469b, type: 3} ---- !u!1 &9100512807517414118 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8953568112751182651} - - component: {fileID: 8267444243875060754} - - component: {fileID: 7711836842289739436} - m_Layer: 8 - m_Name: Box009 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8953568112751182651 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9100512807517414118} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2799493, y: 0.04471205, z: -0.2257452} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9195929034740950319} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8267444243875060754 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9100512807517414118} - m_Mesh: {fileID: 7485205316709286908, guid: 485c2b00c505121468e2d20910842a74, type: 3} ---- !u!23 &7711836842289739436 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9100512807517414118} - 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: -6257702196253466788, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 4334626919512888443, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 1368039103165038143, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -6307277589567570940, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -5956578104803850452, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: -8757356216087587297, guid: 485c2b00c505121468e2d20910842a74, type: 3} - - {fileID: 196172300330902787, guid: 485c2b00c505121468e2d20910842a74, type: 3} - 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} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/72.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/72.prefab.meta deleted file mode 100644 index 60f5879bc..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/72.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: c2360e0cd7462264ab2529cb7526add7 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/73.prefab b/GQ_URP/GQ/Assets/prefab/老模型/73.prefab deleted file mode 100644 index 9123f0528..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/73.prefab +++ /dev/null @@ -1,2443 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &69909673285381522 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1520436418614878516} - - component: {fileID: 8171488186573300644} - - component: {fileID: 1089535980345017503} - m_Layer: 8 - m_Name: Box011 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1520436418614878516 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 69909673285381522} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.25245005, y: 0.044149205, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4954257792422897588} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8171488186573300644 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 69909673285381522} - m_Mesh: {fileID: -5243098771569098612, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} ---- !u!23 &1089535980345017503 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 69909673285381522} - 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: -6257702196253466788, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 4334626919512888443, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 1368039103165038143, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -6307277589567570940, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -5956578104803850452, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -8757356216087587297, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - 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!1 &797719765871808324 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4226064522031563066} - - component: {fileID: 5950421479672488758} - - component: {fileID: 752470731915758337} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4226064522031563066 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 797719765871808324} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.025100052, y: -0.038400013, z: 0.00090000033} - m_LocalScale: {x: 0.015820002, y: 0.0070400015, z: 0.0070400015} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2336095874150483164} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5950421479672488758 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 797719765871808324} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &752470731915758337 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 797719765871808324} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1078816944768640763 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1841069265670586693} - - component: {fileID: 7516100447973380805} - - component: {fileID: 7979661051316740745} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1841069265670586693 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1078816944768640763} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.05569998, y: -0.038400013, z: 0.00090000033} - m_LocalScale: {x: 0.015820002, y: 0.0070400015, z: 0.0070400015} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2336095874150483164} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7516100447973380805 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1078816944768640763} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7979661051316740745 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1078816944768640763} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1350160594031361042 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5012271889918224822} - - component: {fileID: 4275314822174297081} - - component: {fileID: 7120033145819080794} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5012271889918224822 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1350160594031361042} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.059820056, y: -0.038400013, z: 0.0025600009} - m_LocalScale: {x: 0.018469997, y: 0.0070400015, z: 0.00872} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4587247901183074457} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4275314822174297081 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1350160594031361042} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7120033145819080794 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1350160594031361042} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1449241340562519320 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4427829107177695865} - - component: {fileID: 8246637823845775563} - - component: {fileID: 3062876303147816718} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4427829107177695865 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1449241340562519320} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.013999961, y: -0.038400013, z: 0.0025999993} - m_LocalScale: {x: 0.018469997, y: 0.0070400015, z: 0.00872} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4587247901183074457} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8246637823845775563 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1449241340562519320} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3062876303147816718 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1449241340562519320} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1594517842310078630 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2336095874150483164} - - component: {fileID: 5082376551774419949} - - component: {fileID: 8627996314488659335} - - component: {fileID: 7916827333912440910} - - component: {fileID: 4664690278365147544} - - component: {fileID: 5662148447895584940} - - component: {fileID: 4959637162413770717} - m_Layer: 8 - m_Name: Box007 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2336095874150483164 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1594517842310078630} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.13627979, y: 0.033658683, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1841069265670586693} - - {fileID: 7141785882519342059} - - {fileID: 1369360601476508894} - - {fileID: 6023584191613726243} - - {fileID: 4226064522031563066} - - {fileID: 7378679982125622807} - - {fileID: 1000281924133338932} - m_Father: {fileID: 4954257792422897588} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5082376551774419949 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1594517842310078630} - m_Mesh: {fileID: 2954858793080512207, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} ---- !u!23 &8627996314488659335 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1594517842310078630} - 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: -6257702196253466788, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 4334626919512888443, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 1368039103165038143, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -6307277589567570940, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -5956578104803850452, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -8757356216087587297, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 9147106888433294362, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - 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!114 &7916827333912440910 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1594517842310078630} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &4664690278365147544 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1594517842310078630} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5662148447895584940 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1594517842310078630} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &4959637162413770717 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1594517842310078630} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 2954858793080512207, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} ---- !u!1 &2663456300978326239 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7378679982125622807} - - component: {fileID: 1907386112597857330} - - component: {fileID: 2227267132333656316} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7378679982125622807 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2663456300978326239} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.04500006, y: -0.038400013, z: 0.00090000033} - m_LocalScale: {x: 0.015820002, y: 0.0070400015, z: 0.0070400015} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2336095874150483164} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1907386112597857330 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2663456300978326239} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2227267132333656316 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2663456300978326239} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2751268470399825325 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 582865940890372379} - - component: {fileID: 6466904444259292954} - - component: {fileID: 3075038680932597814} - m_Layer: 8 - m_Name: Box005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &582865940890372379 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2751268470399825325} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.13627979, y: 0.076190375, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4954257792422897588} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6466904444259292954 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2751268470399825325} - m_Mesh: {fileID: 6715375062900545627, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} ---- !u!23 &3075038680932597814 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2751268470399825325} - 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: -6257702196253466788, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 4334626919512888443, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 1368039103165038143, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -6307277589567570940, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -5956578104803850452, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -8757356216087587297, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - 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!1 &3170484923354018109 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7141785882519342059} - - component: {fileID: 595686001237521391} - - component: {fileID: 1384380564793665303} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7141785882519342059 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3170484923354018109} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.035599947, y: -0.038400013, z: 0.00090000033} - m_LocalScale: {x: 0.015820002, y: 0.0070400015, z: 0.0070400015} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2336095874150483164} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &595686001237521391 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3170484923354018109} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1384380564793665303 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3170484923354018109} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3568161892740811548 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4374002238293287784} - - component: {fileID: 7525218804910226075} - - component: {fileID: 6579261306576335918} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4374002238293287784 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3568161892740811548} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.032000065, y: -0.038400013, z: 0.0025999993} - m_LocalScale: {x: 0.018469997, y: 0.0070400015, z: 0.00872} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4587247901183074457} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7525218804910226075 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3568161892740811548} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6579261306576335918 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3568161892740811548} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3794292621460817640 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1379261216080438432} - - component: {fileID: 4926953522402299244} - - component: {fileID: 5844865370938587684} - m_Layer: 8 - m_Name: Box010 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1379261216080438432 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3794292621460817640} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.25245005, y: 0.076190375, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4954257792422897588} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4926953522402299244 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3794292621460817640} - m_Mesh: {fileID: -3613724358419971262, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} ---- !u!23 &5844865370938587684 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3794292621460817640} - 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: -6257702196253466788, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 4334626919512888443, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 1368039103165038143, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -6307277589567570940, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -5956578104803850452, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -8757356216087587297, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - 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!1 &4462674916690286540 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7220568594974226373} - - component: {fileID: 8733984928312421487} - - component: {fileID: 6936192833628279973} - m_Layer: 8 - m_Name: Box012 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7220568594974226373 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4462674916690286540} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.25245005, y: 0.010946363, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4954257792422897588} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8733984928312421487 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4462674916690286540} - m_Mesh: {fileID: -8586770294792153069, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} ---- !u!23 &6936192833628279973 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4462674916690286540} - 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: -6257702196253466788, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 4334626919512888443, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 1368039103165038143, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -6307277589567570940, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -5956578104803850452, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -8757356216087587297, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - 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!1 &4977616287313911933 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5124807514511114656} - - component: {fileID: 5324472151539572361} - - component: {fileID: 5790077938499040311} - m_Layer: 8 - m_Name: Box009 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5124807514511114656 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4977616287313911933} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2799493, y: 0.04471205, z: -0.2257452} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4954257792422897588} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5324472151539572361 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4977616287313911933} - m_Mesh: {fileID: 7485205316709286908, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} ---- !u!23 &5790077938499040311 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4977616287313911933} - 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: -6257702196253466788, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 4334626919512888443, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 1368039103165038143, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -6307277589567570940, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -5956578104803850452, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -8757356216087587297, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 196172300330902787, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - 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!1 &5315897279978717327 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 184984065772612292} - - component: {fileID: 9089160180773462953} - - component: {fileID: 4212841649321572026} - m_Layer: 8 - m_Name: Box006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &184984065772612292 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5315897279978717327} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.13627979, y: 0.055102743, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4954257792422897588} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &9089160180773462953 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5315897279978717327} - m_Mesh: {fileID: 3822247309040838107, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} ---- !u!23 &4212841649321572026 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5315897279978717327} - 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: -6257702196253466788, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 4334626919512888443, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 1368039103165038143, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -6307277589567570940, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -5956578104803850452, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -8757356216087587297, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - 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!1 &5670277192973740745 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2736351750779936584} - - component: {fileID: 7471890877730757733} - - component: {fileID: 7417861298123930071} - m_Layer: 8 - m_Name: 73 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2736351750779936584 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5670277192973740745} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0, z: -0.0000000013300747} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4954257792422897588} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7471890877730757733 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5670277192973740745} - m_Mesh: {fileID: 3250715216574208562, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} ---- !u!23 &7417861298123930071 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5670277192973740745} - 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: 3274929075364713951, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 1164559979738526386, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -1152147162816932204, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -5309146791756261813, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 1196480866727828669, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 9147106888433294362, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - 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!1 &5731639329267367182 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4954257792422897588} - - component: {fileID: 1714959985373264162} - - component: {fileID: 1998832134910579562} - - component: {fileID: 1720648558434169635} - - component: {fileID: 1853776461254037545} - - component: {fileID: 3102896312217755705} - m_Layer: 8 - m_Name: 73 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4954257792422897588 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5731639329267367182} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 2736351750779936584} - - {fileID: 582865940890372379} - - {fileID: 184984065772612292} - - {fileID: 2336095874150483164} - - {fileID: 2401922890941696939} - - {fileID: 5124807514511114656} - - {fileID: 1379261216080438432} - - {fileID: 1520436418614878516} - - {fileID: 7220568594974226373} - - {fileID: 9220270117496528010} - - {fileID: 8162937333266739487} - - {fileID: 4587247901183074457} - - {fileID: 4789315029407877655} - - {fileID: 1687235496203605561} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &1714959985373264162 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5731639329267367182} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 73 - occupyNum: 2 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &1998832134910579562 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5731639329267367182} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 2 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &1720648558434169635 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5731639329267367182} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1853776461254037545 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5731639329267367182} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &3102896312217755705 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5731639329267367182} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 2 - selfIcon: {fileID: 21300000, guid: 2c7900c8c03b10946bc7b35ba117ea61, type: 3} ---- !u!1 &6082393889530153089 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8162937333266739487} - - component: {fileID: 5905244073051286010} - - component: {fileID: 34316583737201947} - m_Layer: 8 - m_Name: Box014 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8162937333266739487 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6082393889530153089} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.086409554, y: 0.033658683, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4954257792422897588} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5905244073051286010 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6082393889530153089} - m_Mesh: {fileID: 3868671361854562809, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} ---- !u!23 &34316583737201947 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6082393889530153089} - 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: -6257702196253466788, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 4334626919512888443, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 1368039103165038143, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -6307277589567570940, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -5956578104803850452, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -8757356216087587297, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - 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!1 &6290421796077944935 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4587247901183074457} - - component: {fileID: 2360305015031575025} - - component: {fileID: 5678990815937013984} - - component: {fileID: 7577893093788368565} - - component: {fileID: 3729578012278413408} - - component: {fileID: 4814762586214188985} - - component: {fileID: 2196461491798269677} - m_Layer: 8 - m_Name: Box015 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4587247901183074457 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6290421796077944935} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.086409554, y: 0.012417968, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 5012271889918224822} - - {fileID: 4374002238293287784} - - {fileID: 1430187121157163210} - - {fileID: 4427829107177695865} - m_Father: {fileID: 4954257792422897588} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2360305015031575025 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6290421796077944935} - m_Mesh: {fileID: -8298940227465870776, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} ---- !u!23 &5678990815937013984 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6290421796077944935} - 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: -6257702196253466788, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 4334626919512888443, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 1368039103165038143, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -6307277589567570940, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -5956578104803850452, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -8757356216087587297, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 9147106888433294362, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - 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!114 &7577893093788368565 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6290421796077944935} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &3729578012278413408 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6290421796077944935} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &4814762586214188985 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6290421796077944935} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &2196461491798269677 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6290421796077944935} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -8298940227465870776, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} ---- !u!1 &6453778850339345312 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1430187121157163210} - - component: {fileID: 3228692296999613027} - - component: {fileID: 8101396687726991490} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1430187121157163210 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6453778850339345312} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.005500041, y: -0.038400013, z: 0.0025999993} - m_LocalScale: {x: 0.018469997, y: 0.0070400015, z: 0.00872} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4587247901183074457} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3228692296999613027 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6453778850339345312} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8101396687726991490 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6453778850339345312} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6569408106381209486 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1000281924133338932} - - component: {fileID: 4130095931409765605} - - component: {fileID: 1129870589174696462} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1000281924133338932 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6569408106381209486} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.09070012, y: -0.038400013, z: 0.002799999} - m_LocalScale: {x: 0.015820002, y: 0.0070400015, z: 0.0070400015} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2336095874150483164} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4130095931409765605 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6569408106381209486} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1129870589174696462 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6569408106381209486} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6701148223926547125 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1369360601476508894} - - component: {fileID: 1883613706364390724} - - component: {fileID: 3561725591222356642} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1369360601476508894 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6701148223926547125} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.015899941, y: -0.038400013, z: 0.00090000033} - m_LocalScale: {x: 0.015820002, y: 0.0070400015, z: 0.0070400015} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2336095874150483164} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1883613706364390724 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6701148223926547125} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3561725591222356642 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6701148223926547125} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7178966801176940105 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4789315029407877655} - - component: {fileID: 1692151113422368316} - - component: {fileID: 8268302387387665734} - m_Layer: 8 - m_Name: Box016 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4789315029407877655 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7178966801176940105} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.086409554, y: 0.076190375, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4954257792422897588} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1692151113422368316 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7178966801176940105} - m_Mesh: {fileID: -5573580799846109427, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} ---- !u!23 &8268302387387665734 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7178966801176940105} - 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: -6257702196253466788, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 4334626919512888443, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 1368039103165038143, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -6307277589567570940, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -5956578104803850452, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -8757356216087587297, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - 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!1 &7573146931510025032 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6023584191613726243} - - component: {fileID: 5745075737130892693} - - component: {fileID: 2657877770522879241} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6023584191613726243 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7573146931510025032} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.005200058, y: -0.038400013, z: 0.00090000033} - m_LocalScale: {x: 0.015820002, y: 0.0070400015, z: 0.0070400015} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2336095874150483164} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5745075737130892693 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7573146931510025032} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2657877770522879241 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7573146931510025032} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7736330910010078882 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9220270117496528010} - - component: {fileID: 3965143465312520158} - - component: {fileID: 2686936968835903777} - m_Layer: 8 - m_Name: Box013 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9220270117496528010 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7736330910010078882} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.086409554, y: 0.055102743, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4954257792422897588} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3965143465312520158 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7736330910010078882} - m_Mesh: {fileID: -7061585933124598971, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} ---- !u!23 &2686936968835903777 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7736330910010078882} - 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: -6257702196253466788, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 8253159002222850630, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 1368039103165038143, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -6307277589567570940, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -5956578104803850452, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -8757356216087587297, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - 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!1 &7969436680848296040 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2401922890941696939} - - component: {fileID: 2024041121983613738} - - component: {fileID: 6863488680247130283} - m_Layer: 8 - m_Name: Box008 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2401922890941696939 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7969436680848296040} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.13627979, y: 0.012417968, z: -0.033691406} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4954257792422897588} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2024041121983613738 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7969436680848296040} - m_Mesh: {fileID: 1226723149311242300, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} ---- !u!23 &6863488680247130283 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7969436680848296040} - 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: -6257702196253466788, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 4334626919512888443, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: 1368039103165038143, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -6307277589567570940, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -5956578104803850452, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - - {fileID: -8757356216087587297, guid: 5a32535b280d9ad4db917f514d67e65e, type: 3} - 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!1 &8954553009578202853 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1687235496203605561} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1687235496203605561 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8954553009578202853} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -0.09000003, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4954257792422897588} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/73.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/73.prefab.meta deleted file mode 100644 index d02638096..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/73.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 19e7815ab9fb83144b1d166bc438f74b -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/79.prefab b/GQ_URP/GQ/Assets/prefab/老模型/79.prefab deleted file mode 100644 index 7500885ca..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/79.prefab +++ /dev/null @@ -1,3261 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &159093955142664924 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5821960073435923751} - - component: {fileID: 1000004243756309730} - - component: {fileID: 3969910089853647816} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5821960073435923751 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 159093955142664924} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0337, y: -0.022, z: 0.0263} - m_LocalScale: {x: 0.018438714, y: 0.017408162, z: 0.01928598} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1990377660986631046} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1000004243756309730 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 159093955142664924} - 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!114 &3969910089853647816 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 159093955142664924} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &387524005308557364 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1260088291073194864} - - component: {fileID: 5187795365895871795} - - component: {fileID: 112364660755129798} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1260088291073194864 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 387524005308557364} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.03222, y: -0.022, z: 0.0087} - m_LocalScale: {x: 0.018438714, y: 0.017408162, z: 0.01928598} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2892788372459778634} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5187795365895871795 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 387524005308557364} - 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!114 &112364660755129798 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 387524005308557364} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &708602554137167610 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5578609465934340212} - - component: {fileID: 5314410846938646805} - - component: {fileID: 1047837064800041437} - m_Layer: 8 - m_Name: Box038 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5578609465934340212 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 708602554137167610} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.1446787, y: 0.18, z: -0.028926678} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 19 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5314410846938646805 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 708602554137167610} - m_Mesh: {fileID: 4236268024495968267, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &1047837064800041437 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 708602554137167610} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6440243126907205029, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!1 &1293078209145479655 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9206238378124264715} - - component: {fileID: 7049923211623333240} - - component: {fileID: 2852334905178054272} - m_Layer: 8 - m_Name: Box029 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9206238378124264715 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1293078209145479655} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.11766313, y: 0.18, z: -0.028926678} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7049923211623333240 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1293078209145479655} - m_Mesh: {fileID: -4783894591166569364, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &2852334905178054272 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1293078209145479655} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6639438374700075350, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!1 &1444389067868011584 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4740141316502048444} - - component: {fileID: 5829859606402010787} - - component: {fileID: 2473764358912840183} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4740141316502048444 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1444389067868011584} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.03222, y: -0.022, z: -0.0236} - m_LocalScale: {x: 0.018438714, y: 0.017408162, z: 0.01928598} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2892788372459778634} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5829859606402010787 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1444389067868011584} - 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!114 &2473764358912840183 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1444389067868011584} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2585773886918688947 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8154783323260940977} - - component: {fileID: 8842541238900714112} - - component: {fileID: 8663169087189204245} - m_Layer: 8 - m_Name: Box039 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8154783323260940977 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2585773886918688947} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.17384507, y: 0.18, z: -0.028926678} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8842541238900714112 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2585773886918688947} - m_Mesh: {fileID: 1414275290710141465, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &8663169087189204245 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2585773886918688947} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6440243126907205029, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!1 &3190298479160163403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 777470902913730518} - - component: {fileID: 712274878029998738} - - component: {fileID: 8548520291692605140} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &777470902913730518 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3190298479160163403} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0337, y: -0.022, z: -0.0153} - m_LocalScale: {x: 0.018438714, y: 0.017408162, z: 0.01928598} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1990377660986631046} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &712274878029998738 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3190298479160163403} - 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!114 &8548520291692605140 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3190298479160163403} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3866204538031775536 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1990377660986631046} - - component: {fileID: 5347729647632301447} - - component: {fileID: 4117776532868967083} - - component: {fileID: 4540355839262093420} - - component: {fileID: 2807523528299323447} - - component: {fileID: 1615109184211292241} - - component: {fileID: 1777220810198992883} - m_Layer: 8 - m_Name: Box005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1990377660986631046 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3866204538031775536} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.23431115, y: 0.18, z: -0.028926678} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4885392465782457414} - - {fileID: 1533481243739314541} - - {fileID: 5821960073435923751} - - {fileID: 2611345391152745151} - - {fileID: 777470902913730518} - - {fileID: 4036980330688835530} - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5347729647632301447 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3866204538031775536} - m_Mesh: {fileID: 6715375062900545627, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &4117776532868967083 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3866204538031775536} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -7604153823526131008, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!114 &4540355839262093420 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3866204538031775536} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &2807523528299323447 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3866204538031775536} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1615109184211292241 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3866204538031775536} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &1777220810198992883 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3866204538031775536} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 6715375062900545627, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!1 &4000164381036260162 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4036980330688835530} - - component: {fileID: 7209962995034329198} - - component: {fileID: 1945993321840876729} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4036980330688835530 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4000164381036260162} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0337, y: -0.022, z: -0.0366} - m_LocalScale: {x: 0.018438714, y: 0.017408162, z: 0.01928598} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1990377660986631046} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7209962995034329198 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4000164381036260162} - 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!114 &1945993321840876729 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4000164381036260162} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4301404759752841550 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2892788372459778634} - - component: {fileID: 733562200770747786} - - component: {fileID: 2605922328065996147} - - component: {fileID: 5108194613276006190} - - component: {fileID: 7100584674164374169} - - component: {fileID: 8641508994907831510} - - component: {fileID: 1389123861658670746} - m_Layer: 8 - m_Name: Box001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2892788372459778634 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4301404759752841550} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2634677, y: 0.18, z: -0.028926678} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 3175716985186205719} - - {fileID: 7362458721325757583} - - {fileID: 1260088291073194864} - - {fileID: 4740141316502048444} - - {fileID: 1743936672985115459} - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &733562200770747786 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4301404759752841550} - m_Mesh: {fileID: 5060444177187149915, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &2605922328065996147 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4301404759752841550} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8058751574798413603, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!114 &5108194613276006190 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4301404759752841550} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7100584674164374169 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4301404759752841550} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &8641508994907831510 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4301404759752841550} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &1389123861658670746 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4301404759752841550} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 5060444177187149915, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!1 &4472168644244144802 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5528874440442947760} - - component: {fileID: 7460082735007558484} - - component: {fileID: 6884370662293986164} - m_Layer: 8 - m_Name: Box040 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5528874440442947760 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4472168644244144802} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.26462474, y: 0.18, z: -0.028926678} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 21 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7460082735007558484 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4472168644244144802} - m_Mesh: {fileID: 6851674242468891434, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &6884370662293986164 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4472168644244144802} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6440243126907205029, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!1 &4641956024430401725 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7362458721325757583} - - component: {fileID: 1798508882372735272} - - component: {fileID: 3390620364326236035} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7362458721325757583 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4641956024430401725} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.03222, y: -0.022, z: 0.0377} - m_LocalScale: {x: 0.018438714, y: 0.017408162, z: 0.01928598} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2892788372459778634} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1798508882372735272 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4641956024430401725} - 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!114 &3390620364326236035 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4641956024430401725} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4755492995583082496 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3175716985186205719} - - component: {fileID: 6943007776891451161} - - component: {fileID: 2362323033582604748} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3175716985186205719 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4755492995583082496} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.03222, y: -0.022, z: 0.06996} - m_LocalScale: {x: 0.018438714, y: 0.017408162, z: 0.01928598} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2892788372459778634} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6943007776891451161 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4755492995583082496} - 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!114 &2362323033582604748 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4755492995583082496} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4765202794687286880 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 975902877948205862} - - component: {fileID: 8262324212171888805} - - component: {fileID: 7920480759891110016} - m_Layer: 8 - m_Name: Box002 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &975902877948205862 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4765202794687286880} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0.3311568, z: -0.014463335} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8262324212171888805 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4765202794687286880} - m_Mesh: {fileID: -2232952877369940510, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &7920480759891110016 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4765202794687286880} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -1972135161480825135, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!1 &4816401930792962739 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4990867521396665570} - - component: {fileID: 5658409435180408510} - - component: {fileID: 7780364931114227718} - m_Layer: 8 - m_Name: Box032 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4990867521396665570 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4816401930792962739} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0863916, y: 0.18, z: -0.028926678} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5658409435180408510 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4816401930792962739} - m_Mesh: {fileID: -8672714952799723808, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &7780364931114227718 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4816401930792962739} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6440243126907205029, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!1 &4988280181007761401 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7871373719578280693} - - component: {fileID: 247297118098836458} - - component: {fileID: 2269252738925041794} - m_Layer: 8 - m_Name: Box003 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7871373719578280693 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4988280181007761401} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0.06095925, z: -0.01446335} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &247297118098836458 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4988280181007761401} - m_Mesh: {fileID: 690106047850165013, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &2269252738925041794 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4988280181007761401} - 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: 3274929075364713951, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -2800487843865058035, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1164559979738526386, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -1152147162816932204, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5309146791756261813, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1196480866727828669, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!1 &5268327691394220864 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 769369893998636149} - - component: {fileID: 7132403665774676131} - - component: {fileID: 2527602604321733724} - m_Layer: 8 - m_Name: Box023 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &769369893998636149 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5268327691394220864} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.17601526, y: 0.18, z: -0.028926678} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7132403665774676131 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5268327691394220864} - m_Mesh: {fileID: -8148374250349615983, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &2527602604321733724 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5268327691394220864} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6639438374700075350, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!1 &5979682822306652062 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1743936672985115459} - - component: {fileID: 290424689702531512} - - component: {fileID: 4347257304929451455} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1743936672985115459 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5979682822306652062} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.03222, y: -0.022, z: -0.0535} - m_LocalScale: {x: 0.018438714, y: 0.017408162, z: 0.01928598} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2892788372459778634} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &290424689702531512 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5979682822306652062} - 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!114 &4347257304929451455 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5979682822306652062} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6024275680625053601 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7173570502435132898} - - component: {fileID: 625819501220794800} - - component: {fileID: 5058763389217803103} - m_Layer: 8 - m_Name: Box034 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7173570502435132898 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6024275680625053601} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.028095704, y: 0.18, z: -0.028926678} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &625819501220794800 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6024275680625053601} - m_Mesh: {fileID: 4435042010609528433, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &5058763389217803103 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6024275680625053601} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6639438374700075350, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!1 &6304349173585169423 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2783691409442443857} - - component: {fileID: 6003454479055990083} - - component: {fileID: 6071896398226707832} - m_Layer: 8 - m_Name: 79 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2783691409442443857 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6304349173585169423} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0, z: -0.0000000013300747} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6003454479055990083 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6304349173585169423} - m_Mesh: {fileID: 6208577394401419162, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &6071896398226707832 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6304349173585169423} - 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: 1164559979738526386, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1196480866727828669, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 3274929075364713951, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -1152147162816932204, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5309146791756261813, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!1 &6506611822140992018 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1231961636843094105} - - component: {fileID: 7902361132745771316} - - component: {fileID: 3026130581583993895} - m_Layer: 8 - m_Name: Box006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1231961636843094105 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6506611822140992018} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.20515458, y: 0.18, z: -0.028926678} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7902361132745771316 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6506611822140992018} - m_Mesh: {fileID: 3822247309040838107, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &3026130581583993895 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6506611822140992018} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6639438374700075350, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!1 &6630181602211747731 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6289544771339357481} - - component: {fileID: 8653925618561785144} - - component: {fileID: 8572568400590151642} - - component: {fileID: 1497013830841594087} - - component: {fileID: 6392288321341877197} - - component: {fileID: -715985998982481081} - m_Layer: 8 - m_Name: 79 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6289544771339357481 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6630181602211747731} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 2783691409442443857} - - {fileID: 2892788372459778634} - - {fileID: 975902877948205862} - - {fileID: 7871373719578280693} - - {fileID: 1990377660986631046} - - {fileID: 1231961636843094105} - - {fileID: 818766756473546596} - - {fileID: 3682033020520129191} - - {fileID: 769369893998636149} - - {fileID: 6088143197766467602} - - {fileID: 9206238378124264715} - - {fileID: 1540065175280861728} - - {fileID: 5268845562958766289} - - {fileID: 4990867521396665570} - - {fileID: 3045020768997507588} - - {fileID: 7173570502435132898} - - {fileID: 88437636489112727} - - {fileID: 8236070832154339659} - - {fileID: 2163749519953478944} - - {fileID: 5578609465934340212} - - {fileID: 8154783323260940977} - - {fileID: 5528874440442947760} - - {fileID: 5775612871155425160} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &8653925618561785144 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6630181602211747731} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 79 - occupyNum: 8 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &8572568400590151642 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6630181602211747731} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 8 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &1497013830841594087 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6630181602211747731} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &6392288321341877197 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6630181602211747731} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &-715985998982481081 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6630181602211747731} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 8 - selfIcon: {fileID: 21300000, guid: cc429cfaac54d5e4fb931a5437ad1fda, type: 3} ---- !u!1 &6711819099663981682 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1533481243739314541} - - component: {fileID: 8664696410497211973} - - component: {fileID: 5184141874929581263} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1533481243739314541 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6711819099663981682} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0337, y: -0.022, z: 0.0489} - m_LocalScale: {x: 0.018438714, y: 0.017408162, z: 0.01928598} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1990377660986631046} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8664696410497211973 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6711819099663981682} - 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!114 &5184141874929581263 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6711819099663981682} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6741555409945871825 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 88437636489112727} - - component: {fileID: 4593135740871704562} - - component: {fileID: 2841931312089216861} - m_Layer: 8 - m_Name: Box035 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &88437636489112727 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6741555409945871825} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.0010998584, y: 0.18, z: -0.028926678} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4593135740871704562 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6741555409945871825} - m_Mesh: {fileID: 8986549659293779559, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &2841931312089216861 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6741555409945871825} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6639438374700075350, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!1 &6811345927849057726 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2611345391152745151} - - component: {fileID: 5572820408271115706} - - component: {fileID: 1539388996266886872} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2611345391152745151 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6811345927849057726} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0337, y: -0.022, z: 0.005} - m_LocalScale: {x: 0.018438714, y: 0.017408162, z: 0.01928598} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1990377660986631046} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5572820408271115706 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6811345927849057726} - 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!114 &1539388996266886872 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6811345927849057726} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6919958590352765581 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6088143197766467602} - - component: {fileID: 2846484090881828309} - - component: {fileID: 2304800630785689112} - m_Layer: 8 - m_Name: Box024 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6088143197766467602 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6919958590352765581} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.14685869, y: 0.18, z: -0.028926678} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2846484090881828309 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6919958590352765581} - m_Mesh: {fileID: 106541212177282163, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &2304800630785689112 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6919958590352765581} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6639438374700075350, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!1 &7039953479679044170 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5268845562958766289} - - component: {fileID: 858047267924509036} - - component: {fileID: 7131270783593077252} - m_Layer: 8 - m_Name: Box031 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5268845562958766289 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7039953479679044170} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.05936724, y: 0.18, z: -0.028926678} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &858047267924509036 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7039953479679044170} - m_Mesh: {fileID: -2470049803449725478, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &7131270783593077252 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7039953479679044170} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6639438374700075350, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!1 &7152408172355422712 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8236070832154339659} - - component: {fileID: 5341426175900221832} - - component: {fileID: 8568919953460147447} - m_Layer: 8 - m_Name: Box036 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8236070832154339659 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7152408172355422712} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.030256424, y: 0.18, z: -0.028926678} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5341426175900221832 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7152408172355422712} - m_Mesh: {fileID: 2969732625113774183, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &8568919953460147447 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7152408172355422712} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6639438374700075350, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!1 &7246441099583946541 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 818766756473546596} - - component: {fileID: 5650421115336769029} - - component: {fileID: 1618003535694045409} - m_Layer: 8 - m_Name: Box019 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &818766756473546596 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7246441099583946541} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.17388086, y: 0.18, z: -0.028926678} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5650421115336769029 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7246441099583946541} - m_Mesh: {fileID: 3557879054105070054, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &1618003535694045409 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7246441099583946541} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6440243126907205029, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6639438374700075350, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!1 &7334610710298579491 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3682033020520129191} - - component: {fileID: 218563926366386190} - - component: {fileID: 5382197846498134910} - m_Layer: 8 - m_Name: Box022 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3682033020520129191 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7334610710298579491} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.3107667, y: 0.18, z: -0.028926678} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &218563926366386190 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7334610710298579491} - m_Mesh: {fileID: 8604484703040581089, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &5382197846498134910 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7334610710298579491} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 6680778988778456424, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!1 &7518966717513182404 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5775612871155425160} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5775612871155425160 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7518966717513182404} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -0.36000004, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 22 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &8392476638309373191 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4885392465782457414} - - component: {fileID: 4459236171787979309} - - component: {fileID: 4790374383085960405} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4885392465782457414 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8392476638309373191} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0337, y: -0.022, z: 0.0702} - m_LocalScale: {x: 0.018438714, y: 0.017408162, z: 0.01928598} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1990377660986631046} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4459236171787979309 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8392476638309373191} - 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!114 &4790374383085960405 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8392476638309373191} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8465269811975278529 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3045020768997507588} - - component: {fileID: 6468297010729034098} - - component: {fileID: 5525146344124432477} - m_Layer: 8 - m_Name: Box033 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3045020768997507588 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8465269811975278529} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.057235032, y: 0.18, z: -0.028926678} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6468297010729034098 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8465269811975278529} - m_Mesh: {fileID: 5924061002115919974, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &5525146344124432477 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8465269811975278529} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6440243126907205029, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!1 &8561487746846354465 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1540065175280861728} - - component: {fileID: 2530704303263624223} - - component: {fileID: 7806412319488378147} - m_Layer: 8 - m_Name: Box030 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1540065175280861728 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8561487746846354465} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.088523805, y: 0.18, z: -0.028926678} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2530704303263624223 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8561487746846354465} - m_Mesh: {fileID: 4767555546584458496, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &7806412319488378147 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8561487746846354465} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6639438374700075350, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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!1 &9205912406766107960 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2163749519953478944} - - component: {fileID: 6779098785454372811} - - component: {fileID: 5505383589107305232} - m_Layer: 8 - m_Name: Box037 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2163749519953478944 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9205912406766107960} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.11560665, y: 0.18, z: -0.028926678} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6289544771339357481} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6779098785454372811 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9205912406766107960} - m_Mesh: {fileID: 5884580939788738644, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} ---- !u!23 &5505383589107305232 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9205912406766107960} - 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: -6257702196253466788, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6440243126907205029, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: 1368039103165038143, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -6307277589567570940, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -5956578104803850452, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -8757356216087587297, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - - {fileID: -577001062647322675, guid: ac692988dd8f235489e3c5b3de64c562, type: 3} - 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} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/79.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/79.prefab.meta deleted file mode 100644 index 8b33098ca..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/79.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: d440caae3a4ff9e4eb3d5506c847c37a -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/8.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/8.prefab.meta deleted file mode 100644 index 897b9f487..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/8.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: b4cc64a5cdc81fe45b019b14c8246e2b -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/80.prefab b/GQ_URP/GQ/Assets/prefab/老模型/80.prefab deleted file mode 100644 index 078d107e6..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/80.prefab +++ /dev/null @@ -1,7853 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &91890954483641718 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6546911079996246782} - - component: {fileID: 1965152377246858472} - - component: {fileID: 8683830252077400594} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6546911079996246782 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 91890954483641718} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0025, y: -0.2319, z: 0.1223} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1690519403840956305} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1965152377246858472 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 91890954483641718} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8683830252077400594 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 91890954483641718} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &734700474635485403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4290869864265099832} - - component: {fileID: 262279314376829568} - - component: {fileID: 3492704166312969182} - m_Layer: 11 - m_Name: Cube (37) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4290869864265099832 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 734700474635485403} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.008, y: -0.2319, z: 0.0931} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &262279314376829568 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 734700474635485403} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3492704166312969182 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 734700474635485403} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &794898082902530634 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2637134367379134329} - - component: {fileID: 2707591119767833190} - - component: {fileID: 8421951220493294444} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2637134367379134329 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 794898082902530634} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0004, y: -0.2319, z: -0.0629} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3518329735695451702} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2707591119767833190 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 794898082902530634} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8421951220493294444 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 794898082902530634} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &821354858784811731 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3467428356115761121} - - component: {fileID: 2008303822334055183} - - component: {fileID: 8595087183396790985} - m_Layer: 11 - m_Name: Cube (51) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3467428356115761121 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 821354858784811731} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.008, y: -0.2319, z: -0.0181} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2008303822334055183 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 821354858784811731} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8595087183396790985 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 821354858784811731} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 15 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1105797123189393402 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1925682707200265052} - - component: {fileID: 9135059073343097292} - - component: {fileID: 53486663827681015} - m_Layer: 8 - m_Name: Box011 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1925682707200265052 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1105797123189393402} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.048981205, y: 0.225, z: -0.31253278} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5431840137371733468} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &9135059073343097292 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1105797123189393402} - m_Mesh: {fileID: -5243098771569098612, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!23 &53486663827681015 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1105797123189393402} - 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: 1368039103165038143, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -5956578104803850452, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 4460647416255028466, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6307277589567570940, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6257702196253466788, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -8757356216087587297, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - 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!1 &1323240267790045288 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2877296393211587370} - - component: {fileID: 7800403021979472353} - - component: {fileID: 981965446635621016} - m_Layer: 11 - m_Name: Cube (35) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2877296393211587370 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1323240267790045288} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0008, y: -0.2319, z: 0.0897} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5241683838712916936} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7800403021979472353 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1323240267790045288} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &981965446635621016 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1323240267790045288} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1382156510661930223 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8029724499564131102} - - component: {fileID: 475452421360923785} - - component: {fileID: 4115403657876974340} - m_Layer: 11 - m_Name: Cube (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8029724499564131102 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1382156510661930223} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0216, y: -0.2319, z: 0.0361} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &475452421360923785 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1382156510661930223} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4115403657876974340 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1382156510661930223} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1480916217184483677 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 283636872579636372} - - component: {fileID: 548046337572326242} - - component: {fileID: 9080922394484995619} - m_Layer: 11 - m_Name: Cube (36) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &283636872579636372 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1480916217184483677} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0008, y: -0.2319, z: 0.0701} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5241683838712916936} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &548046337572326242 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1480916217184483677} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &9080922394484995619 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1480916217184483677} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1586598103711838245 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1697798610123455816} - - component: {fileID: 1793776577949600032} - - component: {fileID: 8410564208075875934} - m_Layer: 11 - m_Name: Cube (60) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1697798610123455816 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1586598103711838245} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0013, y: -0.2319, z: 0.0892} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 555644359637361523} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1793776577949600032 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1586598103711838245} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8410564208075875934 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1586598103711838245} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1808599423385023393 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9172582211127115706} - - component: {fileID: 5992491234932385090} - - component: {fileID: 1072994306238490306} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9172582211127115706 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1808599423385023393} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0216, y: -0.2319, z: 0.0731} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5992491234932385090 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1808599423385023393} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1072994306238490306 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1808599423385023393} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1819307742006457908 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1533593341417299144} - - component: {fileID: 2107404377566754686} - - component: {fileID: 8733266018853532475} - m_Layer: 11 - m_Name: Cube (39) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1533593341417299144 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1819307742006457908} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.008, y: -0.2319, z: 0.0746} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2107404377566754686 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1819307742006457908} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8733266018853532475 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1819307742006457908} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1837494358735686350 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3444040093682986676} - - component: {fileID: 5271727719554109829} - - component: {fileID: 8654799226396112879} - m_Layer: 8 - m_Name: Box007 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3444040093682986676 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1837494358735686350} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.095139906, y: 0.225, z: -0.31253278} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5431840137371733468} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5271727719554109829 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1837494358735686350} - m_Mesh: {fileID: 2954858793080512207, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!23 &8654799226396112879 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1837494358735686350} - 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: 1368039103165038143, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -5956578104803850452, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 4460647416255028466, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6307277589567570940, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6257702196253466788, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -8757356216087587297, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - 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!1 &1854175687986939374 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5508869917043961118} - - component: {fileID: 6479439413514012329} - - component: {fileID: 3068774384444561762} - m_Layer: 11 - m_Name: Cube (44) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5508869917043961118 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1854175687986939374} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0233, y: -0.2319, z: 0.0363} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6479439413514012329 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1854175687986939374} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3068774384444561762 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1854175687986939374} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2184788813657562059 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2100684112730864344} - - component: {fileID: 671318291648622839} - - component: {fileID: 8186403584218399675} - m_Layer: 11 - m_Name: Cube (46) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2100684112730864344 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2184788813657562059} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0233, y: -0.2319, z: 0.0363} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &671318291648622839 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2184788813657562059} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8186403584218399675 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2184788813657562059} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2686738838857127853 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518329735695451702} - - component: {fileID: 3225978701006049871} - - component: {fileID: 3400238931260238289} - - component: {fileID: 8379195614320259592} - - component: {fileID: 1662584325834572547} - - component: {fileID: 3006559347252428914} - - component: {fileID: 3159020835696841159} - m_Layer: 8 - m_Name: Box017 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518329735695451702 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2686738838857127853} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.16177064, y: 0.225, z: -0.31184724} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 5739479387150388842} - - {fileID: 6486068547037323061} - - {fileID: 7645319030224525694} - - {fileID: 5960406141998561076} - - {fileID: 2637134367379134329} - m_Father: {fileID: 5431840137371733468} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3225978701006049871 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2686738838857127853} - m_Mesh: {fileID: -114699674525647331, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!23 &3400238931260238289 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2686738838857127853} - 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: 1368039103165038143, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -5956578104803850452, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 9160598548591195316, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6307277589567570940, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6257702196253466788, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -8757356216087587297, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 7626191068330388430, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - 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!114 &8379195614320259592 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2686738838857127853} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1662584325834572547 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2686738838857127853} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &3006559347252428914 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2686738838857127853} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &3159020835696841159 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2686738838857127853} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -114699674525647331, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!1 &2853204777635371451 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3750383330206495423} - - component: {fileID: 1587260042439122303} - - component: {fileID: 4036121346541401478} - m_Layer: 8 - m_Name: Box001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3750383330206495423 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2853204777635371451} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0, z: -0.08} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5431840137371733468} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1587260042439122303 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2853204777635371451} - m_Mesh: {fileID: 5060444177187149915, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!23 &4036121346541401478 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2853204777635371451} - 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: 1164559979738526386, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -5309146791756261813, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -1152147162816932204, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 3274929075364713951, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 1196480866727828669, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 8057491134282628743, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -2563738342612005504, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 7626191068330388430, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - 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!1 &2994527602350907333 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 555644359637361523} - - component: {fileID: 6205896179829177714} - - component: {fileID: 2669633502084950622} - - component: {fileID: 4389063465243889578} - - component: {fileID: 1654454671234882192} - - component: {fileID: 2300371603670451803} - - component: {fileID: 5089626161067429132} - m_Layer: 8 - m_Name: Box005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &555644359637361523 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2994527602350907333} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.21056074, y: 0.225, z: -0.31184724} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1697798610123455816} - - {fileID: 7040514893226961984} - - {fileID: 7166403924893921019} - - {fileID: 4234959635558237088} - m_Father: {fileID: 5431840137371733468} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6205896179829177714 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2994527602350907333} - m_Mesh: {fileID: 6715375062900545627, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!23 &2669633502084950622 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2994527602350907333} - 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: 1368039103165038143, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -5956578104803850452, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 9160598548591195316, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6307277589567570940, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6257702196253466788, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -8757356216087587297, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 7626191068330388430, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - 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!114 &4389063465243889578 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2994527602350907333} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1654454671234882192 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2994527602350907333} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 6 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &2300371603670451803 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2994527602350907333} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &5089626161067429132 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2994527602350907333} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 6715375062900545627, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!1 &3072186412777357682 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5569999307196163925} - - component: {fileID: 3244109149451154056} - - component: {fileID: 2002219370570447414} - m_Layer: 11 - m_Name: Cube (49) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5569999307196163925 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3072186412777357682} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.008, y: -0.2319, z: 0.0003} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3244109149451154056 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3072186412777357682} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2002219370570447414 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3072186412777357682} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 13 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3137636846344375111 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7974960344339628669} - - component: {fileID: 7966612676398756402} - - component: {fileID: 5637032782966990962} - m_Layer: 11 - m_Name: Cube (53) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7974960344339628669 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3137636846344375111} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.008, y: -0.2319, z: -0.0369} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7966612676398756402 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3137636846344375111} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5637032782966990962 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3137636846344375111} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 17 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3310874394693125089 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5062516829706392664} - - component: {fileID: 7704532416131807191} - - component: {fileID: 8924923427428781929} - m_Layer: 11 - m_Name: Cube (45) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5062516829706392664 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3310874394693125089} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.008, y: -0.2319, z: 0.0363} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7704532416131807191 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3310874394693125089} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8924923427428781929 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3310874394693125089} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3370200896871717760 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7645319030224525694} - - component: {fileID: 352322836005206166} - - component: {fileID: 2240660437778243234} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7645319030224525694 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3370200896871717760} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0004, y: -0.2319, z: 0.053} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3518329735695451702} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &352322836005206166 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3370200896871717760} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2240660437778243234 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3370200896871717760} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3417789100002697661 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 437591176554343771} - - component: {fileID: 8026853421526419044} - - component: {fileID: 5141238570747375949} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &437591176554343771 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3417789100002697661} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0025, y: -0.2319, z: 0.0622} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1690519403840956305} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8026853421526419044 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3417789100002697661} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5141238570747375949 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3417789100002697661} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3479826530427063693 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6486068547037323061} - - component: {fileID: 861587125420366936} - - component: {fileID: 8525985258453786851} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6486068547037323061 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3479826530427063693} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0004, y: -0.2319, z: 0.0716} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3518329735695451702} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &861587125420366936 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3479826530427063693} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8525985258453786851 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3479826530427063693} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3499982268450349935 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7040514893226961984} - - component: {fileID: 5117758491458306132} - - component: {fileID: 3421611519866887016} - m_Layer: 11 - m_Name: Cube (61) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7040514893226961984 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3499982268450349935} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0013, y: -0.2319, z: 0.0714} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 555644359637361523} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5117758491458306132 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3499982268450349935} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3421611519866887016 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3499982268450349935} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3540906521011104012 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9188011552010785129} - - component: {fileID: 6005478282142372185} - - component: {fileID: 3738680332242198797} - m_Layer: 11 - m_Name: Cube (54) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9188011552010785129 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3540906521011104012} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0233, y: -0.2319, z: -0.0369} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6005478282142372185 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3540906521011104012} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3738680332242198797 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3540906521011104012} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 18 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3624924723446381988 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7751915435000602029} - - component: {fileID: 8544898463899239943} - - component: {fileID: 8062151711576669901} - - component: {fileID: 677344417935442953} - - component: {fileID: 965665516693618126} - - component: {fileID: 7141238176537662117} - - component: {fileID: 2790050862340308033} - m_Layer: 8 - m_Name: Box012 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7751915435000602029 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3624924723446381988} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.10415507, y: 0.225, z: -0.31184724} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 231049955063414558} - - {fileID: 1048688049959659429} - - {fileID: 2731572963544336011} - - {fileID: 9172582211127115706} - - {fileID: 6833319759114539955} - - {fileID: 8859545514108426506} - - {fileID: 828395440464780428} - - {fileID: 8029724499564131102} - - {fileID: 6656055299672956419} - - {fileID: 5428433844629184534} - - {fileID: 224652904468490344} - - {fileID: 4019107028335245400} - - {fileID: 6666694520860271554} - - {fileID: 4541924959702002290} - - {fileID: 5191138687893943547} - - {fileID: 8616333257923541781} - - {fileID: 5719987355367165151} - - {fileID: 3596270361781517607} - - {fileID: 580127108186860069} - - {fileID: 3778738718746602576} - - {fileID: 5532793339849758212} - - {fileID: 2279122059405961230} - m_Father: {fileID: 5431840137371733468} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8544898463899239943 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3624924723446381988} - m_Mesh: {fileID: -8586770294792153069, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!23 &8062151711576669901 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3624924723446381988} - 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: 1368039103165038143, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -5956578104803850452, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -1446609209366700916, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6307277589567570940, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6257702196253466788, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -8757356216087587297, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 7626191068330388430, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - 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!114 &677344417935442953 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3624924723446381988} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &965665516693618126 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3624924723446381988} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 3 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7141238176537662117 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3624924723446381988} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &2790050862340308033 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3624924723446381988} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -8586770294792153069, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!1 &3846937211973781760 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 514732154017477270} - - component: {fileID: 7632137887875863737} - - component: {fileID: 8145499131135134213} - m_Layer: 11 - m_Name: Cube (48) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &514732154017477270 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3846937211973781760} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0233, y: -0.2319, z: 0.0163} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7632137887875863737 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3846937211973781760} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8145499131135134213 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3846937211973781760} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4008543644645831362 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8859545514108426506} - - component: {fileID: 3090771398141400315} - - component: {fileID: 3556396084098566778} - m_Layer: 11 - m_Name: Cube (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8859545514108426506 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4008543644645831362} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0216, y: -0.2319, z: 0.0546} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3090771398141400315 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4008543644645831362} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3556396084098566778 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4008543644645831362} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4071727490031638267 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7469180323520431098} - - component: {fileID: 7423034821577297266} - - component: {fileID: 3522906379202203439} - m_Layer: 11 - m_Name: Cube (47) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7469180323520431098 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4071727490031638267} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.008, y: -0.2319, z: 0.0163} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7423034821577297266 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4071727490031638267} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3522906379202203439 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4071727490031638267} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4175353647628965720 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2225186076686917144} - - component: {fileID: 7815870424039112805} - - component: {fileID: 7333623118363970227} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2225186076686917144 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4175353647628965720} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0025, y: -0.2319, z: -0.0785} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1690519403840956305} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7815870424039112805 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4175353647628965720} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7333623118363970227 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4175353647628965720} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4253865268844784768 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2055000570319670984} - - component: {fileID: 5458579326737164036} - - component: {fileID: 6826868743374966860} - m_Layer: 8 - m_Name: Box010 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2055000570319670984 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4253865268844784768} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.012950912, y: 0.225, z: -0.31253278} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5431840137371733468} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5458579326737164036 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4253865268844784768} - m_Mesh: {fileID: -3613724358419971262, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!23 &6826868743374966860 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4253865268844784768} - 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: 1368039103165038143, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -5956578104803850452, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 4460647416255028466, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6307277589567570940, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6257702196253466788, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -8757356216087587297, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - 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!1 &4293027857627309532 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4557554092770069371} - - component: {fileID: 2211531688902059981} - - component: {fileID: 6943098827200035547} - m_Layer: 11 - m_Name: Cube (40) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4557554092770069371 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4293027857627309532} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0233, y: -0.2319, z: 0.0746} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2211531688902059981 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4293027857627309532} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6943098827200035547 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4293027857627309532} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4342937354128551983 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224652904468490344} - - component: {fileID: 6171807708025364628} - - component: {fileID: 7979275729651919807} - m_Layer: 11 - m_Name: Cube (23) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &224652904468490344 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4342937354128551983} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.007, y: -0.2319, z: 0.0006} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6171807708025364628 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4342937354128551983} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7979275729651919807 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4342937354128551983} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4598083744320624798 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4010891896744147893} - - component: {fileID: 5057828398882231232} - - component: {fileID: 1450793177565981697} - m_Layer: 11 - m_Name: Cube (38) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4010891896744147893 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4598083744320624798} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0233, y: -0.2319, z: 0.0931} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5057828398882231232 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4598083744320624798} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1450793177565981697 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4598083744320624798} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4623531606721697638 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5431840137371733468} - - component: {fileID: 7342768657591534019} - - component: {fileID: 6453201276029866234} - - component: {fileID: 602550187548510460} - - component: {fileID: 4315729843964238237} - - component: {fileID: 3959432954842393901} - m_Layer: 8 - m_Name: 80 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5431840137371733468 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4623531606721697638} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 3750383330206495423} - - {fileID: 8148571690777330176} - - {fileID: 7197551017406962046} - - {fileID: 555644359637361523} - - {fileID: 950814649432424620} - - {fileID: 3444040093682986676} - - {fileID: 3383772054806733251} - - {fileID: 5241683838712916936} - - {fileID: 2055000570319670984} - - {fileID: 1925682707200265052} - - {fileID: 7751915435000602029} - - {fileID: 3518329735695451702} - - {fileID: 170363930939000491} - - {fileID: 1690519403840956305} - - {fileID: 6500616659138724524} - - {fileID: 6590647692594540978} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &7342768657591534019 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4623531606721697638} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 80 - occupyNum: 20 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &6453201276029866234 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4623531606721697638} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 20 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &602550187548510460 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4623531606721697638} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &4315729843964238237 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4623531606721697638} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &3959432954842393901 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4623531606721697638} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 20 - selfIcon: {fileID: 21300000, guid: 78cf31f89d03d83478ed1b175d5f12d0, type: 3} ---- !u!1 &4676008681363641590 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6656055299672956419} - - component: {fileID: 7532683781083656136} - - component: {fileID: 6114356648154129381} - m_Layer: 11 - m_Name: Cube (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6656055299672956419 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4676008681363641590} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.007, y: -0.2319, z: 0.019} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7532683781083656136 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4676008681363641590} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6114356648154129381 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4676008681363641590} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4682807112709714210 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4234959635558237088} - - component: {fileID: 5572183875789749911} - - component: {fileID: 1244762986705825039} - m_Layer: 11 - m_Name: Cube (63) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4234959635558237088 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4682807112709714210} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0013, y: -0.2319, z: 0.035} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 555644359637361523} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5572183875789749911 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4682807112709714210} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1244762986705825039 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4682807112709714210} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4724149394017335269 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5717490334179216495} - - component: {fileID: 2645825805448878705} - - component: {fileID: 9044414311588963659} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5717490334179216495 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4724149394017335269} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0025, y: -0.2319, z: -0.0596} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1690519403840956305} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2645825805448878705 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4724149394017335269} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &9044414311588963659 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4724149394017335269} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4726460293990254367 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6516958921975969422} - - component: {fileID: 962969561115982326} - - component: {fileID: 6597159795816284196} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6516958921975969422 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4726460293990254367} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0025, y: -0.2319, z: 0.0306} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1690519403840956305} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &962969561115982326 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4726460293990254367} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &6597159795816284196 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4726460293990254367} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4811340802890342511 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6481426972216325127} - - component: {fileID: 2692617817048962021} - - component: {fileID: 4998519706445948706} - m_Layer: 11 - m_Name: Cube (55) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6481426972216325127 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4811340802890342511} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.008, y: -0.2319, z: -0.0542} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2692617817048962021 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4811340802890342511} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4998519706445948706 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4811340802890342511} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 19 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4812400128178536034 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 170363930939000491} - - component: {fileID: 4539820124948763762} - - component: {fileID: 2139891247977180064} - m_Layer: 8 - m_Name: Box018 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &170363930939000491 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4812400128178536034} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.20268431, y: 0.225, z: -0.31253278} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5431840137371733468} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4539820124948763762 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4812400128178536034} - m_Mesh: {fileID: 4733244715438518452, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!23 &2139891247977180064 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4812400128178536034} - 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: 1368039103165038143, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -5956578104803850452, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 4460647416255028466, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6307277589567570940, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6257702196253466788, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -8757356216087587297, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - 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!1 &4919804017489562790 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4328422384000838830} - - component: {fileID: 5638276264075305104} - - component: {fileID: 3871797651377137053} - m_Layer: 11 - m_Name: Cube (56) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4328422384000838830 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4919804017489562790} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0233, y: -0.2319, z: -0.0542} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 19 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5638276264075305104 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4919804017489562790} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3871797651377137053 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4919804017489562790} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 20 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5072485348006390503 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 950814649432424620} - - component: {fileID: 8179634110859512257} - - component: {fileID: 3879798083799473362} - - component: {fileID: 847290481369308281} - - component: {fileID: 1996508675109841843} - - component: {fileID: 4162868045407256562} - - component: {fileID: 2600060897346925905} - m_Layer: 8 - m_Name: Box006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &950814649432424620 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5072485348006390503} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.15031376, y: 0.225, z: -0.31184724} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4290869864265099832} - - {fileID: 4010891896744147893} - - {fileID: 1533593341417299144} - - {fileID: 4557554092770069371} - - {fileID: 7877541462191402986} - - {fileID: 8550169718154710123} - - {fileID: 601819047327714865} - - {fileID: 5508869917043961118} - - {fileID: 5062516829706392664} - - {fileID: 2100684112730864344} - - {fileID: 7469180323520431098} - - {fileID: 514732154017477270} - - {fileID: 5569999307196163925} - - {fileID: 5504171523251137830} - - {fileID: 3467428356115761121} - - {fileID: 3087250731875583767} - - {fileID: 7974960344339628669} - - {fileID: 9188011552010785129} - - {fileID: 6481426972216325127} - - {fileID: 4328422384000838830} - - {fileID: 8748838192287966470} - - {fileID: 2864956754926230067} - - {fileID: 7652832012508204791} - m_Father: {fileID: 5431840137371733468} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8179634110859512257 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5072485348006390503} - m_Mesh: {fileID: 3822247309040838107, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!23 &3879798083799473362 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5072485348006390503} - 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: 1368039103165038143, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -5956578104803850452, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -1446609209366700916, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6307277589567570940, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6257702196253466788, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -8757356216087587297, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 7626191068330388430, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - 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!114 &847290481369308281 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5072485348006390503} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1996508675109841843 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5072485348006390503} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 5 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &4162868045407256562 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5072485348006390503} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &2600060897346925905 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5072485348006390503} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 3822247309040838107, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!1 &5170063718826225116 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3087250731875583767} - - component: {fileID: 8294372727713053258} - - component: {fileID: 225780909654115181} - m_Layer: 11 - m_Name: Cube (52) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3087250731875583767 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5170063718826225116} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0233, y: -0.2319, z: -0.0181} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8294372727713053258 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5170063718826225116} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &225780909654115181 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5170063718826225116} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 16 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5170098744783821396 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3156508166355023231} - - component: {fileID: 7639824836276852706} - - component: {fileID: 5256839144777644065} - m_Layer: 11 - m_Name: Cube (67) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3156508166355023231 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5170098744783821396} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0069, y: -0.2319, z: 0.0643} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8148571690777330176} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7639824836276852706 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5170098744783821396} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5256839144777644065 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5170098744783821396} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5211746616561125634 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5428433844629184534} - - component: {fileID: 3354510807129659797} - - component: {fileID: 2424067004825905004} - m_Layer: 11 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5428433844629184534 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5211746616561125634} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0216, y: -0.2319, z: 0.019} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3354510807129659797 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5211746616561125634} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2424067004825905004 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5211746616561125634} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5313150524475776631 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3778738718746602576} - - component: {fileID: 1532123697051501926} - - component: {fileID: 366058339802729715} - m_Layer: 11 - m_Name: Cube (32) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3778738718746602576 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5313150524475776631} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0216, y: -0.2319, z: -0.0732} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 19 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1532123697051501926 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5313150524475776631} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &366058339802729715 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5313150524475776631} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 20 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5336554770490321170 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6500616659138724524} - - component: {fileID: 2035196069384423742} - - component: {fileID: 6321658582746452376} - m_Layer: 8 - m_Name: Box020 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6500616659138724524 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5336554770490321170} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.28451172, y: 0.225, z: -0.31184724} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5431840137371733468} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2035196069384423742 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5336554770490321170} - m_Mesh: {fileID: -5395582760244232606, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!23 &6321658582746452376 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5336554770490321170} - 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: 1368039103165038143, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -5956578104803850452, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 248095952346832364, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6307277589567570940, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6257702196253466788, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -8757356216087587297, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 7626191068330388430, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - 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!1 &5383139942792219157 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5241683838712916936} - - component: {fileID: 5063341016399639777} - - component: {fileID: 6916042285819633247} - - component: {fileID: 8701317683605775521} - - component: {fileID: 6526633902801887206} - - component: {fileID: 707069117014141280} - - component: {fileID: 988460977673455954} - m_Layer: 8 - m_Name: Box009 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5241683838712916936 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5383139942792219157} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.02307935, y: 0.225, z: -0.31184724} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2877296393211587370} - - {fileID: 283636872579636372} - m_Father: {fileID: 5431840137371733468} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5063341016399639777 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5383139942792219157} - m_Mesh: {fileID: 7485205316709286908, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!23 &6916042285819633247 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5383139942792219157} - 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: 1368039103165038143, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -5956578104803850452, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 5370930186757366787, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6307277589567570940, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6257702196253466788, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -8757356216087587297, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 7626191068330388430, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - 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!114 &8701317683605775521 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5383139942792219157} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &6526633902801887206 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5383139942792219157} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 4 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &707069117014141280 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5383139942792219157} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &988460977673455954 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5383139942792219157} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 7485205316709286908, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!1 &5406540011513711015 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 231049955063414558} - - component: {fileID: 5133731036160176022} - - component: {fileID: 5058403987704685992} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &231049955063414558 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5406540011513711015} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.007, y: -0.2319, z: 0.0929} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5133731036160176022 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5406540011513711015} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5058403987704685992 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5406540011513711015} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5406715286950831157 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 601819047327714865} - - component: {fileID: 3342329819359330064} - - component: {fileID: 3314789846972619073} - m_Layer: 11 - m_Name: Cube (43) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &601819047327714865 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5406715286950831157} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.008, y: -0.2319, z: 0.0363} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3342329819359330064 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5406715286950831157} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3314789846972619073 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5406715286950831157} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5427127763815800331 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5540599264112534819} - - component: {fileID: 2495781529912345370} - - component: {fileID: 7550395540140802411} - m_Layer: 11 - m_Name: Cube (66) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5540599264112534819 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5427127763815800331} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0069, y: -0.2319, z: 0.0821} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8148571690777330176} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2495781529912345370 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5427127763815800331} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7550395540140802411 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5427127763815800331} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5499311202637657918 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7197551017406962046} - - component: {fileID: 4745077793481536181} - - component: {fileID: 6545028418435093434} - - component: {fileID: 2601241183007889391} - - component: {fileID: 871334832232679798} - - component: {fileID: 2429420389149225469} - - component: {fileID: 5470980924897830497} - m_Layer: 8 - m_Name: Box004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7197551017406962046 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5499311202637657918} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.25166413, y: 0.225, z: -0.31184724} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8867327060109355594} - - {fileID: 2293874121474384803} - m_Father: {fileID: 5431840137371733468} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4745077793481536181 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5499311202637657918} - m_Mesh: {fileID: -5613867604693661769, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!23 &6545028418435093434 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5499311202637657918} - 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: 1368039103165038143, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -5956578104803850452, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 3761064918003104099, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6307277589567570940, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6257702196253466788, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -8757356216087587297, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 7626191068330388430, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - 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!114 &2601241183007889391 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5499311202637657918} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &871334832232679798 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5499311202637657918} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 7 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &2429420389149225469 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5499311202637657918} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &5470980924897830497 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5499311202637657918} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -5613867604693661769, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!1 &5715659853380962340 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8112650271207390626} - - component: {fileID: 595983373665733683} - - component: {fileID: 1971884291695104629} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8112650271207390626 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5715659853380962340} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0025, y: -0.2319, z: 0.1083} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1690519403840956305} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &595983373665733683 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5715659853380962340} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1971884291695104629 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5715659853380962340} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5720146329163076753 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5504171523251137830} - - component: {fileID: 4528114272132130652} - - component: {fileID: 799800134254262066} - m_Layer: 11 - m_Name: Cube (50) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5504171523251137830 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5720146329163076753} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0233, y: -0.2319, z: 0.0003} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4528114272132130652 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5720146329163076753} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &799800134254262066 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5720146329163076753} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 14 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5856619166549138619 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4541924959702002290} - - component: {fileID: 2853879516245720438} - - component: {fileID: 4691631657263261134} - m_Layer: 11 - m_Name: Cube (26) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4541924959702002290 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5856619166549138619} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0216, y: -0.2319, z: -0.0173} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2853879516245720438 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5856619166549138619} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4691631657263261134 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5856619166549138619} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 14 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6007279993216632811 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5532793339849758212} - - component: {fileID: 4128609793856544928} - - component: {fileID: 494321648270515366} - m_Layer: 11 - m_Name: Cube (33) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5532793339849758212 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6007279993216632811} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0216, y: -0.2319, z: -0.093} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4128609793856544928 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6007279993216632811} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &494321648270515366 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6007279993216632811} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 21 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6243102293627597398 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 828395440464780428} - - component: {fileID: 308087873954749913} - - component: {fileID: 5122050104411987180} - m_Layer: 11 - m_Name: Cube (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &828395440464780428 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6243102293627597398} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.007, y: -0.2319, z: 0.0361} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &308087873954749913 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6243102293627597398} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5122050104411987180 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6243102293627597398} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6417867046382468876 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8148571690777330176} - - component: {fileID: 2253951683033500447} - - component: {fileID: 240721723709511799} - - component: {fileID: 8891978016350434522} - - component: {fileID: 3569566676762934560} - - component: {fileID: 9034632014838494666} - - component: {fileID: 6680632793095899837} - m_Layer: 8 - m_Name: Box003 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8148571690777330176 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6417867046382468876} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.2876944, y: 0.225, z: -0.31184724} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 5540599264112534819} - - {fileID: 3156508166355023231} - m_Father: {fileID: 5431840137371733468} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2253951683033500447 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6417867046382468876} - m_Mesh: {fileID: 690106047850165013, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!23 &240721723709511799 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6417867046382468876} - 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: 1368039103165038143, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -5956578104803850452, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 3761064918003104099, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6307277589567570940, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6257702196253466788, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -8757356216087587297, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 7626191068330388430, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - 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!114 &8891978016350434522 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6417867046382468876} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &3569566676762934560 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6417867046382468876} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 8 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &9034632014838494666 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6417867046382468876} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &6680632793095899837 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6417867046382468876} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 690106047850165013, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!1 &6712895503211415043 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5091036701797702184} - - component: {fileID: 7566187628755013645} - - component: {fileID: 2271560203029789792} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5091036701797702184 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6712895503211415043} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0025, y: -0.2319, z: 0.045} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1690519403840956305} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7566187628755013645 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6712895503211415043} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2271560203029789792 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6712895503211415043} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6975957494314536144 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8550169718154710123} - - component: {fileID: 6649326659710356528} - - component: {fileID: 1133476771099848115} - m_Layer: 11 - m_Name: Cube (42) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8550169718154710123 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6975957494314536144} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0233, y: -0.2319, z: 0.0539} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6649326659710356528 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6975957494314536144} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1133476771099848115 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6975957494314536144} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7005888574822146560 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3383772054806733251} - - component: {fileID: 1420353832294965570} - - component: {fileID: 5827878313692549827} - m_Layer: 8 - m_Name: Box008 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3383772054806733251 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7005888574822146560} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.059109643, y: 0.225, z: -0.31253278} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5431840137371733468} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1420353832294965570 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7005888574822146560} - m_Mesh: {fileID: 1226723149311242300, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!23 &5827878313692549827 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7005888574822146560} - 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: 1368039103165038143, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -5956578104803850452, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 4460647416255028466, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6307277589567570940, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6257702196253466788, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -8757356216087587297, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - 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!1 &7085122687957801414 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8616333257923541781} - - component: {fileID: 4152597375676056387} - - component: {fileID: 8774299189314514885} - m_Layer: 11 - m_Name: Cube (28) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8616333257923541781 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7085122687957801414} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0216, y: -0.2319, z: -0.0353} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4152597375676056387 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7085122687957801414} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8774299189314514885 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7085122687957801414} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 16 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7125323039686546057 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5719987355367165151} - - component: {fileID: 8920631620073533734} - - component: {fileID: 2157026046976215277} - m_Layer: 11 - m_Name: Cube (29) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5719987355367165151 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7125323039686546057} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.007, y: -0.2319, z: -0.0541} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8920631620073533734 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7125323039686546057} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2157026046976215277 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7125323039686546057} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 17 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7199915988322478981 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1048688049959659429} - - component: {fileID: 2589745074063059237} - - component: {fileID: 4290461226040255984} - m_Layer: 11 - m_Name: Cube (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1048688049959659429 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7199915988322478981} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0216, y: -0.2319, z: 0.0929} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2589745074063059237 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7199915988322478981} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4290461226040255984 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7199915988322478981} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7375063225254849202 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4019107028335245400} - - component: {fileID: 1257217555142026877} - - component: {fileID: 1443091191234837839} - m_Layer: 11 - m_Name: Cube (24) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4019107028335245400 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7375063225254849202} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0216, y: -0.2319, z: 0.0006} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1257217555142026877 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7375063225254849202} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1443091191234837839 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7375063225254849202} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7522822664727148745 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2293874121474384803} - - component: {fileID: 3663676285977882619} - - component: {fileID: 1928188901593799825} - m_Layer: 11 - m_Name: Cube (65) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2293874121474384803 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7522822664727148745} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0061966777, y: -0.2319, z: 0.0643} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7197551017406962046} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3663676285977882619 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7522822664727148745} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1928188901593799825 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7522822664727148745} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7524959782006113747 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7652832012508204791} - - component: {fileID: 2242420295051181653} - - component: {fileID: 4184126088636745390} - m_Layer: 11 - m_Name: Cube (59) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7652832012508204791 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7524959782006113747} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0233, y: -0.2319, z: -0.0901} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 22 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2242420295051181653 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7524959782006113747} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4184126088636745390 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7524959782006113747} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 23 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7526772366621834385 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6590647692594540978} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6590647692594540978 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7526772366621834385} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -0.45, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5431840137371733468} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &7537520022770284842 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4731643292138822640} - - component: {fileID: 3243145295159962262} - - component: {fileID: 5365089662527831435} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4731643292138822640 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7537520022770284842} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0025, y: -0.2319, z: -0.0452} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1690519403840956305} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3243145295159962262 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7537520022770284842} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5365089662527831435 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7537520022770284842} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7570701901659580946 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7166403924893921019} - - component: {fileID: 875484759181147474} - - component: {fileID: 7412527697850658969} - m_Layer: 11 - m_Name: Cube (62) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7166403924893921019 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7570701901659580946} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0013, y: -0.2319, z: 0.0531} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 555644359637361523} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &875484759181147474 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7570701901659580946} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7412527697850658969 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7570701901659580946} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7595587559158008795 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2864956754926230067} - - component: {fileID: 6856455772006027641} - - component: {fileID: 7985296109577471506} - m_Layer: 11 - m_Name: Cube (58) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2864956754926230067 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7595587559158008795} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0233, y: -0.2319, z: -0.0729} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 21 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6856455772006027641 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7595587559158008795} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7985296109577471506 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7595587559158008795} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 22 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7633547286401111795 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5960406141998561076} - - component: {fileID: 4788290982243078545} - - component: {fileID: 1295910669698609476} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5960406141998561076 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7633547286401111795} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0004, y: -0.2319, z: 0.0344} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3518329735695451702} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4788290982243078545 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7633547286401111795} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1295910669698609476 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7633547286401111795} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7688465684095525292 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6833319759114539955} - - component: {fileID: 6198548736868198707} - - component: {fileID: 5497343333808618435} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6833319759114539955 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7688465684095525292} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.007, y: -0.2319, z: 0.0546} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6198548736868198707 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7688465684095525292} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &5497343333808618435 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7688465684095525292} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7871799372000755654 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6666694520860271554} - - component: {fileID: 5249872505559958629} - - component: {fileID: 1170997232092509633} - m_Layer: 11 - m_Name: Cube (25) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6666694520860271554 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7871799372000755654} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.007, y: -0.2319, z: -0.0173} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5249872505559958629 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7871799372000755654} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1170997232092509633 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7871799372000755654} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 13 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7960815204066776048 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2279122059405961230} - - component: {fileID: 9158582277934284501} - - component: {fileID: 370634521854257257} - m_Layer: 11 - m_Name: Cube (34) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2279122059405961230 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7960815204066776048} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0216, y: -0.2319, z: -0.093} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 21 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9158582277934284501 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7960815204066776048} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &370634521854257257 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7960815204066776048} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 22 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8322044461951767687 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8748838192287966470} - - component: {fileID: 4821604364209967945} - - component: {fileID: 661954985729266866} - m_Layer: 11 - m_Name: Cube (57) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8748838192287966470 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8322044461951767687} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.008, y: -0.2319, z: -0.0729} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4821604364209967945 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8322044461951767687} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &661954985729266866 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8322044461951767687} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 21 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8330405821346284834 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2731572963544336011} - - component: {fileID: 3725678616992179014} - - component: {fileID: 7928963353200494982} - m_Layer: 11 - m_Name: Cube (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2731572963544336011 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8330405821346284834} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.007, y: -0.2319, z: 0.0731} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3725678616992179014 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8330405821346284834} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7928963353200494982 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8330405821346284834} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8350141426411407141 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5191138687893943547} - - component: {fileID: 2303383918558001486} - - component: {fileID: 8613623777380142723} - m_Layer: 11 - m_Name: Cube (27) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5191138687893943547 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8350141426411407141} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.007, y: -0.2319, z: -0.0353} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2303383918558001486 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8350141426411407141} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8613623777380142723 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8350141426411407141} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 15 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8352953009349160217 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8867327060109355594} - - component: {fileID: 3867836184232503956} - - component: {fileID: 7795050609460125773} - m_Layer: 11 - m_Name: Cube (64) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8867327060109355594 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8352953009349160217} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0061966777, y: -0.23190007, z: 0.08210002} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7197551017406962046} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3867836184232503956 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8352953009349160217} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &7795050609460125773 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8352953009349160217} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8637550763852926789 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 580127108186860069} - - component: {fileID: 107905331907737094} - - component: {fileID: 3052874239584664220} - m_Layer: 11 - m_Name: Cube (31) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &580127108186860069 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8637550763852926789} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.007, y: -0.2319, z: -0.0732} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &107905331907737094 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8637550763852926789} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &3052874239584664220 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8637550763852926789} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 19 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8699179590819823576 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1690519403840956305} - - component: {fileID: 5927689730100231920} - - component: {fileID: 746889257905807380} - - component: {fileID: 390422378339515394} - - component: {fileID: 2821497152491876298} - - component: {fileID: 3783347589637350361} - - component: {fileID: 1809239329113223171} - m_Layer: 8 - m_Name: Box019 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1690519403840956305 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8699179590819823576} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.24359801, y: 0.225, z: -0.31184724} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 6546911079996246782} - - {fileID: 8112650271207390626} - - {fileID: 7350672096305318044} - - {fileID: 437591176554343771} - - {fileID: 5091036701797702184} - - {fileID: 6516958921975969422} - - {fileID: 4731643292138822640} - - {fileID: 5717490334179216495} - - {fileID: 2225186076686917144} - m_Father: {fileID: 5431840137371733468} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5927689730100231920 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8699179590819823576} - m_Mesh: {fileID: 3557879054105070054, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!23 &746889257905807380 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8699179590819823576} - 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: 1368039103165038143, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -5956578104803850452, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 248095952346832364, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6307277589567570940, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -6257702196253466788, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: -8757356216087587297, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - - {fileID: 7626191068330388430, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} - 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!114 &390422378339515394 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8699179590819823576} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &2821497152491876298 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8699179590819823576} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &3783347589637350361 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8699179590819823576} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &1809239329113223171 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8699179590819823576} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 3557879054105070054, guid: 8777dec97126e4b49a62287a2e7dd0bd, type: 3} ---- !u!1 &8765846380413468769 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5739479387150388842} - - component: {fileID: 581435112171199819} - - component: {fileID: 1293988220287005134} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5739479387150388842 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8765846380413468769} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0004, y: -0.2319, z: 0.091} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3518329735695451702} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &581435112171199819 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8765846380413468769} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1293988220287005134 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8765846380413468769} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8796315413760360998 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7350672096305318044} - - component: {fileID: 3113989084038410950} - - component: {fileID: 2027620047466145183} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7350672096305318044 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8796315413760360998} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.0025, y: -0.2319, z: 0.0764} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1690519403840956305} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3113989084038410950 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8796315413760360998} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2027620047466145183 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8796315413760360998} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8798754767439547606 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7877541462191402986} - - component: {fileID: 6892169387178908884} - - component: {fileID: 9156138133751248968} - m_Layer: 11 - m_Name: Cube (41) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7877541462191402986 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8798754767439547606} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.008, y: -0.2319, z: 0.0539} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 950814649432424620} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6892169387178908884 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8798754767439547606} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &9156138133751248968 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8798754767439547606} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9044910915891127449 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3596270361781517607} - - component: {fileID: 6397014245991222580} - - component: {fileID: 8259955688900541785} - m_Layer: 11 - m_Name: Cube (30) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3596270361781517607 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9044910915891127449} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0216, y: -0.2319, z: -0.0541} - m_LocalScale: {x: 0.011551072, y: 0.011551072, z: 0.011551072} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7751915435000602029} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6397014245991222580 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9044910915891127449} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1.0000005, y: 1, z: 1.0000005} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &8259955688900541785 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9044910915891127449} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 18 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/80.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/80.prefab.meta deleted file mode 100644 index 7e44119d5..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/80.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 24371a29a43928f418309ee9188a2434 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/81.prefab b/GQ_URP/GQ/Assets/prefab/老模型/81.prefab deleted file mode 100644 index 6d76772de..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/81.prefab +++ /dev/null @@ -1,841 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &529775531524418206 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8400778285248939435} - - component: {fileID: 3086349662708212399} - - component: {fileID: 2933163431442460462} - - component: {fileID: 4808685388471910769} - - component: {fileID: 7514357432696474866} - - component: {fileID: 3321931974710321788} - - component: {fileID: 8223053257618911987} - m_Layer: 8 - m_Name: Object002 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8400778285248939435 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 529775531524418206} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: -0.2172461} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 720031953765602073} - m_Father: {fileID: 6823701638904610385} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3086349662708212399 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 529775531524418206} - m_Mesh: {fileID: -3996760141626369306, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} ---- !u!23 &2933163431442460462 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 529775531524418206} - 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: 3274929075364713951, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - - {fileID: -1497584655720610248, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - - {fileID: 1164559979738526386, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - - {fileID: -1152147162816932204, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - - {fileID: -5309146791756261813, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - - {fileID: 1196480866727828669, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - - {fileID: -823838804658123227, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - - {fileID: 6843436459089350628, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - 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!64 &4808685388471910769 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 529775531524418206} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -3996760141626369306, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} ---- !u!114 &7514357432696474866 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 529775531524418206} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &3321931974710321788 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 529775531524418206} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!114 &8223053257618911987 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 529775531524418206} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!1 &2700867008628122605 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 720031953765602073} - - component: {fileID: 4748384214677123859} - - component: {fileID: 9036592884742492214} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &720031953765602073 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2700867008628122605} - m_LocalRotation: {x: 0.5, y: -0.5, z: -0.5, w: 0.5} - m_LocalPosition: {x: 0.2385, y: -0.1692, z: 0.032} - m_LocalScale: {x: 0.009999997, y: 0.014999998, z: 0.024999995} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8400778285248939435} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4748384214677123859 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2700867008628122605} - 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!114 &9036592884742492214 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2700867008628122605} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2899933554159621447 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8982992797416218303} - - component: {fileID: 5689381381110457163} - - component: {fileID: 2568669499006948929} - - component: {fileID: 2800448200682512750} - - component: {fileID: 3111006716950566611} - - component: {fileID: 2172247330087667339} - - component: {fileID: 5037292032150003658} - m_Layer: 8 - m_Name: Object001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8982992797416218303 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2899933554159621447} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0, z: -0.2172461} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8142740169568721007} - m_Father: {fileID: 6823701638904610385} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5689381381110457163 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2899933554159621447} - m_Mesh: {fileID: -3292925553009838691, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} ---- !u!23 &2568669499006948929 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2899933554159621447} - 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: 3274929075364713951, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - - {fileID: -1497584655720610248, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - - {fileID: 1164559979738526386, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - - {fileID: -1152147162816932204, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - - {fileID: -5309146791756261813, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - - {fileID: 1196480866727828669, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - - {fileID: -823838804658123227, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - - {fileID: 6843436459089350628, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - 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!64 &2800448200682512750 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2899933554159621447} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -3292925553009838691, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} ---- !u!114 &3111006716950566611 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2899933554159621447} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &2172247330087667339 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2899933554159621447} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!114 &5037292032150003658 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2899933554159621447} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!1 &3053121293648791741 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8142740169568721007} - - component: {fileID: 1557672795461279433} - - component: {fileID: 7362637141878315570} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8142740169568721007 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3053121293648791741} - m_LocalRotation: {x: 0.5, y: -0.5, z: -0.5, w: 0.5} - m_LocalPosition: {x: -0.07330001, y: -0.16924609, z: 0.03199999} - m_LocalScale: {x: 0.009999996, y: 0.014999998, z: 0.024999997} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 8982992797416218303} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1557672795461279433 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3053121293648791741} - 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!114 &7362637141878315570 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3053121293648791741} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4728751718331374670 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5634801261129848474} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5634801261129848474 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4728751718331374670} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -0.045000046, z: 0.30000004} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6823701638904610385} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &5461474032957986082 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2035534535787218933} - - component: {fileID: 4334250878075309256} - - component: {fileID: 6025814164344464350} - m_Layer: 8 - m_Name: Box047 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2035534535787218933 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5461474032957986082} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0, z: -0.2172461} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6823701638904610385} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4334250878075309256 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5461474032957986082} - m_Mesh: {fileID: 347013164166513179, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} ---- !u!23 &6025814164344464350 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5461474032957986082} - 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: -1709277514330460371, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - - {fileID: -5309146791756261813, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - - {fileID: -1152147162816932204, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - - {fileID: 1196480866727828669, guid: a796661dda9b7c648965ee1fa3b721ce, type: 3} - 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!1 &6195115597888005355 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6823701638904610385} - - component: {fileID: 5322880060747661925} - - component: {fileID: 4814420282364241273} - - component: {fileID: 1547615857749399628} - - component: {fileID: 718154152961241935} - - component: {fileID: 7594234284158058176} - m_Layer: 8 - m_Name: 81 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6823701638904610385 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6195115597888005355} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 2035534535787218933} - - {fileID: 8400778285248939435} - - {fileID: 8982992797416218303} - - {fileID: 5634801261129848474} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &5322880060747661925 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6195115597888005355} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 81 - occupyNum: 1 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &4814420282364241273 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6195115597888005355} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 1 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &1547615857749399628 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6195115597888005355} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &718154152961241935 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6195115597888005355} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 1 - selfIcon: {fileID: 21300000, guid: 8faf44aded632f5439d8c05eef892eaa, type: 3} ---- !u!114 &7594234284158058176 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6195115597888005355} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] diff --git a/GQ_URP/GQ/Assets/prefab/老模型/81.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/81.prefab.meta deleted file mode 100644 index dbd3d9ea9..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/81.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 25f1bb144681ffd48b9fe8efe4912d5a -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/82.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/82.prefab.meta deleted file mode 100644 index 7b0aae298..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/82.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: bfd2fe6277d37dc43b39aaec81afac3b -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/89.prefab b/GQ_URP/GQ/Assets/prefab/老模型/89.prefab deleted file mode 100644 index dafad81b7..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/89.prefab +++ /dev/null @@ -1,1300 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &1114558223912532373 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6457931328211969934} - - component: {fileID: 2590230990473448226} - - component: {fileID: 5116137469956490223} - m_Layer: 8 - m_Name: Line018 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6457931328211969934 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1114558223912532373} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.041579284, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7891405307382718708} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2590230990473448226 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1114558223912532373} - m_Mesh: {fileID: -2144492602232178039, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} ---- !u!23 &5116137469956490223 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1114558223912532373} - 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: 7626191068330388430, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - 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!1 &1266206972490841352 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8004837456224948998} - - component: {fileID: 5201519931366388631} - - component: {fileID: 4893143935018293921} - m_Layer: 8 - m_Name: Line013 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8004837456224948998 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1266206972490841352} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.021610495, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7891405307382718708} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5201519931366388631 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1266206972490841352} - m_Mesh: {fileID: 605361963917450513, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} ---- !u!23 &4893143935018293921 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1266206972490841352} - 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: 7626191068330388430, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - 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!1 &1346004154382835377 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4404625582105657845} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4404625582105657845 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1346004154382835377} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: -0.18000004, z: 0.25} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7891405307382718708} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1950037878036663266 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5736265924129308698} - - component: {fileID: 9062914898887605742} - - component: {fileID: 1194844102520572132} - m_Layer: 8 - m_Name: Object001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5736265924129308698 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1950037878036663266} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00017918646, y: 0.13583289, z: 0.000002114503} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7891405307382718708} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &9062914898887605742 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1950037878036663266} - m_Mesh: {fileID: -3292925553009838691, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} ---- !u!23 &1194844102520572132 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1950037878036663266} - 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: 5629084884208175553, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - 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!1 &2133452506828082700 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1157057323531137244} - - component: {fileID: 1297144369727211457} - - component: {fileID: 3965786505868802285} - m_Layer: 8 - m_Name: Line015 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1157057323531137244 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2133452506828082700} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.075189665, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7891405307382718708} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1297144369727211457 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2133452506828082700} - m_Mesh: {fileID: 1228931217693930783, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} ---- !u!23 &3965786505868802285 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2133452506828082700} - 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: 7626191068330388430, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - 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!1 &2886816557756251091 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7417176741766533897} - - component: {fileID: 268082917709812158} - - component: {fileID: 5509808337709852628} - m_Layer: 8 - m_Name: Line004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7417176741766533897 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2886816557756251091} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.14873762, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7891405307382718708} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &268082917709812158 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2886816557756251091} - m_Mesh: {fileID: -1824870671384894608, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} ---- !u!23 &5509808337709852628 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2886816557756251091} - 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: 7626191068330388430, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - 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!1 &3750514845970949826 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7656939622975359999} - - component: {fileID: 3272231897737779950} - - component: {fileID: 3451372614806715742} - m_Layer: 8 - m_Name: 89 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7656939622975359999 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3750514845970949826} - 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: 7891405307382718708} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3272231897737779950 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3750514845970949826} - m_Mesh: {fileID: 6477967049179094708, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} ---- !u!23 &3451372614806715742 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3750514845970949826} - 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: -1069411815626237646, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - - {fileID: 3274929075364713951, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - - {fileID: 1164559979738526386, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - - {fileID: 1196480866727828669, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - - {fileID: -5309146791756261813, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - - {fileID: -1152147162816932204, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - - {fileID: 507964552181651666, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - 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!1 &3777230515953857595 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5162462706918300430} - - component: {fileID: 1866079620917083146} - - component: {fileID: 1983272359792882059} - m_Layer: 8 - m_Name: Object002 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5162462706918300430 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3777230515953857595} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.018607378, y: 0, z: -2.7047578e-18} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7891405307382718708} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1866079620917083146 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3777230515953857595} - m_Mesh: {fileID: -3996760141626369306, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} ---- !u!23 &1983272359792882059 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3777230515953857595} - 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: 7182259056892446755, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - - {fileID: -4971594290552944009, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - - {fileID: -2510483096459867325, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - 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!1 &4569809644956277520 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6361990236194196019} - - component: {fileID: 4977359067578132953} - - component: {fileID: 4402851928329665046} - m_Layer: 8 - m_Name: Line016 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6361990236194196019 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4569809644956277520} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.101979256, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7891405307382718708} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4977359067578132953 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4569809644956277520} - m_Mesh: {fileID: 1667030652818782739, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} ---- !u!23 &4402851928329665046 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4569809644956277520} - 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: 7626191068330388430, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - 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!1 &5104529405737316226 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8960182451435932404} - - component: {fileID: 9023820638056364414} - - component: {fileID: 7569006316256702727} - m_Layer: 8 - m_Name: Line017 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8960182451435932404 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5104529405737316226} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.06836888, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7891405307382718708} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &9023820638056364414 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5104529405737316226} - m_Mesh: {fileID: -3980153443302691910, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} ---- !u!23 &7569006316256702727 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5104529405737316226} - 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: 7626191068330388430, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - 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!1 &7406231149520730702 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7891405307382718708} - - component: {fileID: 1925724312001394410} - - component: {fileID: 8978115859665275122} - - component: {fileID: 7985998392445776506} - - component: {fileID: -4211852715862273598} - - component: {fileID: -2009126696466687203} - m_Layer: 8 - m_Name: 89 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7891405307382718708 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7406231149520730702} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 7656939622975359999} - - {fileID: 7417176741766533897} - - {fileID: 8044430753152730573} - - {fileID: 8595605749046252734} - - {fileID: 740621741287121912} - - {fileID: 8004837456224948998} - - {fileID: 458026587493680835} - - {fileID: 1157057323531137244} - - {fileID: 6361990236194196019} - - {fileID: 8960182451435932404} - - {fileID: 6457931328211969934} - - {fileID: 5736265924129308698} - - {fileID: 5162462706918300430} - - {fileID: 4404625582105657845} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &1925724312001394410 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7406231149520730702} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 89 - occupyNum: 4 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &8978115859665275122 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7406231149520730702} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 4 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &7985998392445776506 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7406231149520730702} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &-4211852715862273598 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7406231149520730702} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &-2009126696466687203 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7406231149520730702} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 4 - selfIcon: {fileID: 21300000, guid: a6df8bb2c2d73ce4e8808ceca81f78f0, type: 3} ---- !u!1 &8088366730173206616 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 740621741287121912} - - component: {fileID: 1210554281852323080} - - component: {fileID: 2118384072540528930} - m_Layer: 8 - m_Name: Line012 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &740621741287121912 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8088366730173206616} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0051790792, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7891405307382718708} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1210554281852323080 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8088366730173206616} - m_Mesh: {fileID: 1263235930235354705, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} ---- !u!23 &2118384072540528930 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8088366730173206616} - 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: 7626191068330388430, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - 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!1 &8120253390946193628 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8595605749046252734} - - component: {fileID: 7733628059105075689} - - component: {fileID: 4652281644981143037} - m_Layer: 8 - m_Name: Line006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8595605749046252734 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8120253390946193628} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.09515845, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7891405307382718708} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7733628059105075689 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8120253390946193628} - m_Mesh: {fileID: -7332506622660098701, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} ---- !u!23 &4652281644981143037 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8120253390946193628} - 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: 7626191068330388430, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - 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!1 &8698758261195324246 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 458026587493680835} - - component: {fileID: 3303602255409576138} - - component: {fileID: 6104623307420851353} - m_Layer: 8 - m_Name: Line014 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &458026587493680835 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8698758261195324246} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.048400074, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7891405307382718708} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3303602255409576138 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8698758261195324246} - m_Mesh: {fileID: -8319797619673022553, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} ---- !u!23 &6104623307420851353 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8698758261195324246} - 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: 7626191068330388430, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - 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!1 &9191213165379384718 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8044430753152730573} - - component: {fileID: 8983794990359841572} - - component: {fileID: 3668872178615445671} - m_Layer: 8 - m_Name: Line005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8044430753152730573 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9191213165379384718} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.12194803, y: 0.10457538, z: 0.0071231164} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7891405307382718708} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8983794990359841572 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9191213165379384718} - m_Mesh: {fileID: 3442923855343079542, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} ---- !u!23 &3668872178615445671 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9191213165379384718} - 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: 7626191068330388430, guid: 6aec79c4794e4ce4faf5fa4fb9a80fb7, type: 3} - 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} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/89.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/89.prefab.meta deleted file mode 100644 index d3f655288..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/89.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 0a2213e8f1639c84fb42d721ff52f208 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/90.prefab b/GQ_URP/GQ/Assets/prefab/老模型/90.prefab deleted file mode 100644 index 8842f3014..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/90.prefab +++ /dev/null @@ -1,1218 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &363269512211582715 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 212726083100773017} - - component: {fileID: 2227352598840098766} - - component: {fileID: 3830946296973253594} - m_Layer: 8 - m_Name: Line006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &212726083100773017 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 363269512211582715} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.16580287, y: 0.04332812, z: -0.012874767} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1745601758282284755} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2227352598840098766 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 363269512211582715} - m_Mesh: {fileID: -7332506622660098701, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} ---- !u!23 &3830946296973253594 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 363269512211582715} - 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: 7626191068330388430, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - 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!1 &397968723728944767 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9222614822422724063} - - component: {fileID: 7311233807866747695} - - component: {fileID: 7556050386109611781} - m_Layer: 8 - m_Name: Line012 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9222614822422724063 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 397968723728944767} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.09263633, y: 0.04332812, z: -0.012874767} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1745601758282284755} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7311233807866747695 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 397968723728944767} - m_Mesh: {fileID: 1263235930235354705, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} ---- !u!23 &7556050386109611781 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 397968723728944767} - 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: 7626191068330388430, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - 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!1 &1117079310984000451 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7118383722352526533} - - component: {fileID: 7503379654563768852} - - component: {fileID: 4365039680474456984} - m_Layer: 8 - m_Name: Line030 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7118383722352526533 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1117079310984000451} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.101969674, y: 0.04332812, z: -0.012874767} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1745601758282284755} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7503379654563768852 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1117079310984000451} - m_Mesh: {fileID: -4882779569204714280, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} ---- !u!23 &4365039680474456984 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1117079310984000451} - 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: 7626191068330388430, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - 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!1 &1401269434718757993 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1745601758282284755} - - component: {fileID: 6858806886185631160} - - component: {fileID: 7902933432832474424} - - component: {fileID: 3475865150988437172} - - component: {fileID: -6847445392198849767} - - component: {fileID: 7661720831699534423} - m_Layer: 8 - m_Name: 90 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1745601758282284755 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1401269434718757993} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 5744335506224176515} - - {fileID: 212726083100773017} - - {fileID: 9222614822422724063} - - {fileID: 1922084437468384545} - - {fileID: 7328703893251944187} - - {fileID: 712288554291336403} - - {fileID: 8241361603648612256} - - {fileID: 7118383722352526533} - - {fileID: 8912964352572989478} - - {fileID: 4188690334743289405} - - {fileID: 3611526979008496937} - - {fileID: 9187305098257324953} - - {fileID: 5420422727002261739} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &6858806886185631160 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1401269434718757993} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 90 - occupyNum: 2 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7902933432832474424 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1401269434718757993} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 2 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &3475865150988437172 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1401269434718757993} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &-6847445392198849767 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1401269434718757993} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &7661720831699534423 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1401269434718757993} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 2 - selfIcon: {fileID: 21300000, guid: dda5711893e235a4eb6882399ab74c3e, type: 3} ---- !u!1 &3705502271415103909 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 712288554291336403} - - component: {fileID: 612900571731175257} - - component: {fileID: 2067429278306316064} - m_Layer: 8 - m_Name: Line017 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &712288554291336403 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3705502271415103909} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.14401898, y: 0.04332812, z: -0.012874767} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1745601758282284755} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &612900571731175257 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3705502271415103909} - m_Mesh: {fileID: -3980153443302691910, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} ---- !u!23 &2067429278306316064 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3705502271415103909} - 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: 7626191068330388430, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - 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!1 &4742593845964466716 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3611526979008496937} - - component: {fileID: 7809203660784673325} - - component: {fileID: 7944217156753141676} - m_Layer: 8 - m_Name: Object002 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3611526979008496937 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4742593845964466716} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.103555515, y: -0.06124726, z: -0.019997884} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1745601758282284755} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7809203660784673325 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4742593845964466716} - m_Mesh: {fileID: -3996760141626369306, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} ---- !u!23 &7944217156753141676 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4742593845964466716} - 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: 7182259056892446755, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - - {fileID: -4971594290552944009, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - - {fileID: -2510483096459867325, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - 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!1 &5194870122494069232 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8241361603648612256} - - component: {fileID: 1282413938627587956} - - component: {fileID: 516516566957874599} - m_Layer: 8 - m_Name: Line029 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8241361603648612256 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5194870122494069232} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.122235075, y: 0.04332812, z: -0.012874767} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1745601758282284755} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1282413938627587956 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5194870122494069232} - m_Mesh: {fileID: 6942693937602033683, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} ---- !u!23 &516516566957874599 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5194870122494069232} - 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: 7626191068330388430, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - 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!1 &5713623651589518534 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5744335506224176515} - - component: {fileID: 3104024376726718846} - - component: {fileID: 7040970379841126519} - m_Layer: 8 - m_Name: 90 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5744335506224176515 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5713623651589518534} - 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: 1745601758282284755} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3104024376726718846 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5713623651589518534} - m_Mesh: {fileID: -5649210760977204675, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} ---- !u!23 &7040970379841126519 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5713623651589518534} - 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: -7271575018923665444, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - - {fileID: 3274929075364713951, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - - {fileID: 1164559979738526386, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - - {fileID: 1196480866727828669, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - - {fileID: -5309146791756261813, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - - {fileID: -1152147162816932204, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - - {fileID: -4654756690279803098, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - 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!1 &6703947599260917786 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5420422727002261739} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5420422727002261739 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6703947599260917786} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -0.090000026, z: 0.25} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1745601758282284755} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &7217018770549367599 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1922084437468384545} - - component: {fileID: 4437727938995989936} - - component: {fileID: 3917437497914999942} - m_Layer: 8 - m_Name: Line013 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1922084437468384545 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7217018770549367599} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.088000625, y: 0.04332812, z: -0.012874767} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1745601758282284755} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4437727938995989936 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7217018770549367599} - m_Mesh: {fileID: 605361963917450513, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} ---- !u!23 &3917437497914999942 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7217018770549367599} - 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: 7626191068330388430, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - 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!1 &7503545762777403435 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7328703893251944187} - - component: {fileID: 7474314240546216422} - - component: {fileID: 4806243558321514186} - m_Layer: 8 - m_Name: Line015 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7328703893251944187 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7503545762777403435} - m_LocalRotation: {x: -0.7071067, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.13156845, y: 0.04332812, z: -0.012874767} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1745601758282284755} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7474314240546216422 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7503545762777403435} - m_Mesh: {fileID: 1228931217693930783, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} ---- !u!23 &4806243558321514186 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7503545762777403435} - 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: 7626191068330388430, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - 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!1 &7977446982768989637 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4188690334743289405} - - component: {fileID: 612359569474184137} - - component: {fileID: 7290915190079362755} - m_Layer: 8 - m_Name: Object001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4188690334743289405 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7977446982768989637} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.00017918646, y: 0.07349654, z: 0.0000021095145} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1745601758282284755} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &612359569474184137 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7977446982768989637} - m_Mesh: {fileID: -3292925553009838691, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} ---- !u!23 &7290915190079362755 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7977446982768989637} - 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: 5629084884208175553, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - 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!1 &9152795095807937699 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9187305098257324953} - - component: {fileID: 6073806256385475106} - - component: {fileID: 7620589548672523512} - m_Layer: 8 - m_Name: Object005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9187305098257324953 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9152795095807937699} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.055297542, y: -0.06124726, z: -0.019997884} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1745601758282284755} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6073806256385475106 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9152795095807937699} - m_Mesh: {fileID: 9186633843763367028, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} ---- !u!23 &7620589548672523512 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9152795095807937699} - 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: 7182259056892446755, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - - {fileID: -4971594290552944009, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - - {fileID: -2510483096459867325, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - 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!1 &9216932114691483800 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8912964352572989478} - - component: {fileID: 2440987116527514379} - - component: {fileID: 2612308166316444874} - m_Layer: 8 - m_Name: Line031 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8912964352572989478 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9216932114691483800} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.1455375, y: 0.04332812, z: -0.012874767} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1745601758282284755} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2440987116527514379 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9216932114691483800} - m_Mesh: {fileID: 648714052394000240, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} ---- !u!23 &2612308166316444874 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9216932114691483800} - 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: 7626191068330388430, guid: 36a64ca6c8e763d45a7f09ffe6520f3b, type: 3} - 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} diff --git a/GQ_URP/GQ/Assets/prefab/老模型/90.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/90.prefab.meta deleted file mode 100644 index 7c21176ed..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/90.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: a74e9b5393cb1b746a8963b14718a2fc -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/91.prefab b/GQ_URP/GQ/Assets/prefab/老模型/91.prefab deleted file mode 100644 index f947bea11..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/91.prefab +++ /dev/null @@ -1,4976 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &34564213333863586 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 753599891647963368} - - component: {fileID: 6695667405353162153} - - component: {fileID: 5808016709227450330} - m_Layer: 11 - m_Name: Cube (33) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &753599891647963368 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 34564213333863586} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.189, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5787970164300200860} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6695667405353162153 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 34564213333863586} - 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!114 &5808016709227450330 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 34564213333863586} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &233728299221931986 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1000406700176934407} - - component: {fileID: 4982916342846696607} - - component: {fileID: 2453415135569972420} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1000406700176934407 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 233728299221931986} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2035, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1928533242310257567} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4982916342846696607 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 233728299221931986} - 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!114 &2453415135569972420 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 233728299221931986} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &250265416954796979 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8874110987560411832} - - component: {fileID: 237618114286563550} - - component: {fileID: 7121991060758043343} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8874110987560411832 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 250265416954796979} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1624, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1114694660863866395} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &237618114286563550 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 250265416954796979} - 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!114 &7121991060758043343 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 250265416954796979} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &303939022308794465 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8980914937908922897} - - component: {fileID: 8943790222997384309} - - component: {fileID: 7317110207821832312} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8980914937908922897 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 303939022308794465} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2376, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4762931587687475371} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8943790222997384309 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 303939022308794465} - 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!114 &7317110207821832312 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 303939022308794465} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &421842536155338474 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5787970164300200860} - - component: {fileID: 6819835448193403838} - - component: {fileID: 1671568900020076427} - - component: {fileID: 7148599724098093009} - - component: {fileID: 7419657380493297554} - - component: {fileID: 1625479105801314093} - - component: {fileID: 3224200708491803533} - m_Layer: 8 - m_Name: Object006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5787970164300200860 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 421842536155338474} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.04968287, y: 0.08114039, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 7840790891254681094} - - {fileID: 4134549613253600608} - - {fileID: 4426704009512368671} - - {fileID: 3397968368149669071} - - {fileID: 7155365745419757986} - - {fileID: 7825346447561072982} - - {fileID: 9097464445744153105} - - {fileID: 3450328077147025971} - - {fileID: 4020222141993900587} - - {fileID: 753599891647963368} - - {fileID: 6095948294147515158} - - {fileID: 8796169207107080206} - m_Father: {fileID: 7511566713832706897} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6819835448193403838 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 421842536155338474} - m_Mesh: {fileID: -2639241166356525208, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} ---- !u!23 &1671568900020076427 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 421842536155338474} - 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: -1502669387472542646, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: 1038712434395320081, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: 7874494369389819107, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - 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!114 &7148599724098093009 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 421842536155338474} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7419657380493297554 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 421842536155338474} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1625479105801314093 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 421842536155338474} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &3224200708491803533 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 421842536155338474} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -2639241166356525208, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} ---- !u!1 &470637067409739228 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5436290316704995478} - - component: {fileID: 2266014702163455855} - - component: {fileID: 4267020962316159552} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5436290316704995478 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 470637067409739228} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1602, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1928533242310257567} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2266014702163455855 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 470637067409739228} - 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!114 &4267020962316159552 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 470637067409739228} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &587945026468417019 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1550683020485108536} - - component: {fileID: 6004695729474696218} - - component: {fileID: 4717940385442306193} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1550683020485108536 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 587945026468417019} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2808, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4762931587687475371} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6004695729474696218 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 587945026468417019} - 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!114 &4717940385442306193 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 587945026468417019} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &588873702185466297 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8931852571888671243} - - component: {fileID: 7167038630978089954} - - component: {fileID: 950580929550703571} - m_Layer: 11 - m_Name: Cube (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8931852571888671243 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 588873702185466297} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.189, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1114694660863866395} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7167038630978089954 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 588873702185466297} - 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!114 &950580929550703571 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 588873702185466297} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &660281694561618801 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 341141264095945632} - - component: {fileID: 142515153336563942} - - component: {fileID: 7234552269544778583} - m_Layer: 11 - m_Name: Cube (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &341141264095945632 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 660281694561618801} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1065, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1114694660863866395} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &142515153336563942 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 660281694561618801} - 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!114 &7234552269544778583 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 660281694561618801} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &909246431615686590 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6522783596121986543} - - component: {fileID: 4126901117486491759} - - component: {fileID: 5927152524510462134} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6522783596121986543 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 909246431615686590} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.024100013, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1928533242310257567} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4126901117486491759 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 909246431615686590} - 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!114 &5927152524510462134 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 909246431615686590} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1081619314894840097 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1114694660863866395} - - component: {fileID: 2615908794004484000} - - component: {fileID: 1857216415933526394} - - component: {fileID: 3944190240467027776} - - component: {fileID: 7666541324244000521} - - component: {fileID: 8177563611360448708} - - component: {fileID: 9075949913699120502} - m_Layer: 8 - m_Name: Object005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1114694660863866395 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1081619314894840097} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.04968287, y: 0.11210428, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 3009416004847669874} - - {fileID: 8874110987560411832} - - {fileID: 3129575321045993793} - - {fileID: 6013194898635759294} - - {fileID: 8255113669858050428} - - {fileID: 5678174940608902803} - - {fileID: 7218396936185472877} - - {fileID: 341141264095945632} - - {fileID: 3327503824434706549} - - {fileID: 8931852571888671243} - - {fileID: 4015770998338613688} - - {fileID: 7097476474886390158} - m_Father: {fileID: 7511566713832706897} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2615908794004484000 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1081619314894840097} - m_Mesh: {fileID: 9186633843763367028, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} ---- !u!23 &1857216415933526394 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1081619314894840097} - 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: -1502669387472542646, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: 1038712434395320081, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: 7874494369389819107, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - 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!114 &3944190240467027776 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1081619314894840097} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7666541324244000521 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1081619314894840097} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &8177563611360448708 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1081619314894840097} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &9075949913699120502 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1081619314894840097} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 9186633843763367028, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} ---- !u!1 &1328552821438068145 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5636533241488612549} - - component: {fileID: 2615455120722912187} - - component: {fileID: 7140570112255270160} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5636533241488612549 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1328552821438068145} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1602, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4762931587687475371} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2615455120722912187 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1328552821438068145} - 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!114 &7140570112255270160 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1328552821438068145} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1360807937516724269 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3009416004847669874} - - component: {fileID: 3936437333913307450} - - component: {fileID: 4854723794734547751} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3009416004847669874 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1360807937516724269} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2057, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1114694660863866395} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3936437333913307450 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1360807937516724269} - 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!114 &4854723794734547751 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1360807937516724269} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1673193815538602341 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5405936914213551790} - - component: {fileID: 4854456841021645532} - - component: {fileID: 6552795193874965393} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5405936914213551790 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1673193815538602341} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1087, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4762931587687475371} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4854456841021645532 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1673193815538602341} - 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!114 &6552795193874965393 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1673193815538602341} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1908960541154647865 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4608712055547433343} - - component: {fileID: 8324380125193542776} - - component: {fileID: 6550414686214712030} - m_Layer: 8 - m_Name: 91 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4608712055547433343 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1908960541154647865} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.178} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7511566713832706897} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8324380125193542776 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1908960541154647865} - m_Mesh: {fileID: 1247351977123226646, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} ---- !u!23 &6550414686214712030 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1908960541154647865} - 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: -5598141350581169709, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: 3925418980499852262, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: 1368039103165038143, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: -5956578104803850452, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: -6307277589567570940, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: -6257702196253466788, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: 9077612666303962245, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - 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!1 &1939527673199379981 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 454243906846835651} - - component: {fileID: 2631217483472716610} - - component: {fileID: 8330849792901906681} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &454243906846835651 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1939527673199379981} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2035, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4762931587687475371} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2631217483472716610 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1939527673199379981} - 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!114 &8330849792901906681 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1939527673199379981} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1939873155711385667 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4198744104375031819} - - component: {fileID: 5101641916456085924} - - component: {fileID: 6509253209750055778} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4198744104375031819 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1939873155711385667} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0191, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4762931587687475371} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5101641916456085924 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1939873155711385667} - 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!114 &6509253209750055778 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1939873155711385667} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1994723677262034490 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3998634069789051844} - - component: {fileID: 311398310074639079} - - component: {fileID: 7958238779676070925} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3998634069789051844 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1994723677262034490} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0191, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1928533242310257567} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &311398310074639079 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1994723677262034490} - 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!114 &7958238779676070925 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1994723677262034490} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2211962787602036807 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5343197729666347967} - - component: {fileID: 8680798664836386379} - - component: {fileID: 1524861071142026049} - m_Layer: 8 - m_Name: Object001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5343197729666347967 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2211962787602036807} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: -0.012468848} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6754847874598398154} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8680798664836386379 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2211962787602036807} - m_Mesh: {fileID: -3292925553009838691, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} ---- !u!23 &1524861071142026049 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2211962787602036807} - 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: 1368039103165038143, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: -5956578104803850452, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: 9077612666303962245, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: -6307277589567570940, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: -8757356216087587297, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: 4058342625295081725, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: 6012098043614753949, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - 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!1 &2295570119799793278 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6095948294147515158} - - component: {fileID: 2034149294903489987} - - component: {fileID: 6737143592361312993} - m_Layer: 11 - m_Name: Cube (34) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6095948294147515158 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2295570119799793278} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2354, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5787970164300200860} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2034149294903489987 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2295570119799793278} - 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!114 &6737143592361312993 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2295570119799793278} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2374167725828081150 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4020222141993900587} - - component: {fileID: 1765141933578765589} - - component: {fileID: 3840734074827689831} - m_Layer: 11 - m_Name: Cube (32) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4020222141993900587 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2374167725828081150} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1458, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5787970164300200860} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1765141933578765589 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2374167725828081150} - 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!114 &3840734074827689831 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2374167725828081150} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2454163369985152137 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7840790891254681094} - - component: {fileID: 9002304995065954135} - - component: {fileID: 7843275938295663079} - m_Layer: 11 - m_Name: Cube (24) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7840790891254681094 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2454163369985152137} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2057, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5787970164300200860} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9002304995065954135 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2454163369985152137} - 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!114 &7843275938295663079 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2454163369985152137} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2461528455879538114 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5678174940608902803} - - component: {fileID: 573141106074558968} - - component: {fileID: 6215259430247544029} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5678174940608902803 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2461528455879538114} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0169, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1114694660863866395} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &573141106074558968 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2461528455879538114} - 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!114 &6215259430247544029 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2461528455879538114} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2490979101054504629 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4015770998338613688} - - component: {fileID: 4539260554958506509} - - component: {fileID: 548481174330295535} - m_Layer: 11 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4015770998338613688 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2490979101054504629} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2354, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1114694660863866395} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4539260554958506509 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2490979101054504629} - 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!114 &548481174330295535 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2490979101054504629} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2631160626379064614 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 607911935043279998} - - component: {fileID: 8844547842964115086} - - component: {fileID: 3586656602136249386} - m_Layer: 11 - m_Name: Cube (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &607911935043279998 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2631160626379064614} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0655, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1928533242310257567} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8844547842964115086 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2631160626379064614} - 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!114 &3586656602136249386 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2631160626379064614} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2716628081724582735 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 178403745387142507} - - component: {fileID: 4519005208751167468} - - component: {fileID: 9157003615785683172} - m_Layer: 11 - m_Name: Cube (23) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &178403745387142507 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2716628081724582735} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2808, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1928533242310257567} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4519005208751167468 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2716628081724582735} - 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!114 &9157003615785683172 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2716628081724582735} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2786539503720328229 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5041540151860361641} - - component: {fileID: 3895261109725880922} - - component: {fileID: 4812836735941082479} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5041540151860361641 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2786539503720328229} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0241, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4762931587687475371} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3895261109725880922 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2786539503720328229} - 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!114 &4812836735941082479 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2786539503720328229} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3591337396512851870 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4762931587687475371} - - component: {fileID: 2042436268005248943} - - component: {fileID: 2177607817593504302} - - component: {fileID: 3961851662713694768} - - component: {fileID: 7719887231926275612} - - component: {fileID: 5280100441071473294} - - component: {fileID: 4126474582389109599} - m_Layer: 8 - m_Name: Object002 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4762931587687475371 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3591337396512851870} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.04968287, y: 0.019212604, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 454243906846835651} - - {fileID: 5636533241488612549} - - {fileID: 2903841037225259680} - - {fileID: 4207057287712034999} - - {fileID: 5041540151860361641} - - {fileID: 4198744104375031819} - - {fileID: 5167222174728901042} - - {fileID: 5405936914213551790} - - {fileID: 1472773973113358713} - - {fileID: 1929714823032694436} - - {fileID: 8980914937908922897} - - {fileID: 1550683020485108536} - m_Father: {fileID: 7511566713832706897} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2042436268005248943 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3591337396512851870} - m_Mesh: {fileID: -3996760141626369306, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} ---- !u!23 &2177607817593504302 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3591337396512851870} - 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: -1502669387472542646, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: 1038712434395320081, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: 7874494369389819107, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - 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!114 &3961851662713694768 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3591337396512851870} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 4 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &7719887231926275612 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3591337396512851870} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5280100441071473294 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3591337396512851870} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &4126474582389109599 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3591337396512851870} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -3996760141626369306, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} ---- !u!1 &3735505808440808020 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1929714823032694436} - - component: {fileID: 353768245078760142} - - component: {fileID: 5619286557665287978} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1929714823032694436 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3735505808440808020} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1912, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4762931587687475371} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &353768245078760142 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3735505808440808020} - 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!114 &5619286557665287978 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3735505808440808020} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3999318660606771910 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6013194898635759294} - - component: {fileID: 4667500690496520231} - - component: {fileID: 1295474247559230132} - m_Layer: 11 - m_Name: Cube (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6013194898635759294 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3999318660606771910} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0729, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1114694660863866395} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4667500690496520231 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3999318660606771910} - 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!114 &1295474247559230132 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3999318660606771910} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4235874806525499553 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1928533242310257567} - - component: {fileID: 138165940383678798} - - component: {fileID: 2932119244712618540} - - component: {fileID: 1857922111240714914} - - component: {fileID: 324174940630451793} - - component: {fileID: 6317666218542963135} - - component: {fileID: 1595113246562347044} - m_Layer: 8 - m_Name: Object004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1928533242310257567 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4235874806525499553} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.04968287, y: 0.05017651, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1000406700176934407} - - {fileID: 5436290316704995478} - - {fileID: 5432331366890994835} - - {fileID: 2799807344610192041} - - {fileID: 6522783596121986543} - - {fileID: 3998634069789051844} - - {fileID: 607911935043279998} - - {fileID: 7428312313186504192} - - {fileID: 71315775326565651} - - {fileID: 5738948443030572412} - - {fileID: 3104997165943222055} - - {fileID: 178403745387142507} - m_Father: {fileID: 7511566713832706897} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &138165940383678798 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4235874806525499553} - m_Mesh: {fileID: -8113768720884857512, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} ---- !u!23 &2932119244712618540 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4235874806525499553} - 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: -1502669387472542646, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: 1038712434395320081, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - - {fileID: 7874494369389819107, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} - 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!114 &1857922111240714914 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4235874806525499553} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 3 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &324174940630451793 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4235874806525499553} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &6317666218542963135 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4235874806525499553} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &1595113246562347044 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4235874806525499553} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -8113768720884857512, guid: f01356d5ad9d5b74f951f42a6f8c8247, type: 3} ---- !u!1 &4254955782406896691 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7155365745419757986} - - component: {fileID: 1520720726629866024} - - component: {fileID: 4882735127274135156} - m_Layer: 11 - m_Name: Cube (28) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7155365745419757986 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4254955782406896691} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0263, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5787970164300200860} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1520720726629866024 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4254955782406896691} - 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!114 &4882735127274135156 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4254955782406896691} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4275965162574971791 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5775548251644899685} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5775548251644899685 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4275965162574971791} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -0.13499999, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7511566713832706897} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &4583370838410061697 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3397968368149669071} - - component: {fileID: 9168419574454186146} - - component: {fileID: 9090898729097663297} - m_Layer: 11 - m_Name: Cube (27) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3397968368149669071 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4583370838410061697} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0729, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5787970164300200860} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9168419574454186146 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4583370838410061697} - 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!114 &9090898729097663297 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4583370838410061697} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5039151693422072566 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4426704009512368671} - - component: {fileID: 2464546900277360486} - - component: {fileID: 1036616534134173442} - m_Layer: 11 - m_Name: Cube (26) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4426704009512368671 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5039151693422072566} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1161, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5787970164300200860} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2464546900277360486 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5039151693422072566} - 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!114 &1036616534134173442 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5039151693422072566} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5157627509645717419 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4134549613253600608} - - component: {fileID: 2954880473263032819} - - component: {fileID: 7158461311542781984} - m_Layer: 11 - m_Name: Cube (25) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4134549613253600608 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5157627509645717419} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1624, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5787970164300200860} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2954880473263032819 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5157627509645717419} - 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!114 &7158461311542781984 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5157627509645717419} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5289782148529943113 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8255113669858050428} - - component: {fileID: 8068746941998578230} - - component: {fileID: 5809709680537102792} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8255113669858050428 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5289782148529943113} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0263, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1114694660863866395} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8068746941998578230 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5289782148529943113} - 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!114 &5809709680537102792 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5289782148529943113} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5445098530604355115 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5738948443030572412} - - component: {fileID: 8190892369141025235} - - component: {fileID: 6882705564074947122} - m_Layer: 11 - m_Name: Cube (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5738948443030572412 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5445098530604355115} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1912, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1928533242310257567} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8190892369141025235 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5445098530604355115} - 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!114 &6882705564074947122 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5445098530604355115} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5523425244589492648 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7097476474886390158} - - component: {fileID: 6655507566971290649} - - component: {fileID: 8023985334504947359} - m_Layer: 11 - m_Name: Cube (23) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7097476474886390158 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5523425244589492648} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2786, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1114694660863866395} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6655507566971290649 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5523425244589492648} - 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!114 &8023985334504947359 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5523425244589492648} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6214629463550129190 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1472773973113358713} - - component: {fileID: 7191424652141712936} - - component: {fileID: 4839382500170942350} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1472773973113358713 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6214629463550129190} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.148, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4762931587687475371} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7191424652141712936 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6214629463550129190} - 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!114 &4839382500170942350 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6214629463550129190} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6453717095379689078 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 71315775326565651} - - component: {fileID: 6464760973505210073} - - component: {fileID: 3674983739414325326} - m_Layer: 11 - m_Name: Cube (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &71315775326565651 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6453717095379689078} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.148, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1928533242310257567} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6464760973505210073 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6453717095379689078} - 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!114 &3674983739414325326 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6453717095379689078} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6921374889673005156 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3104997165943222055} - - component: {fileID: 7171592707310585619} - - component: {fileID: 6753980191332489817} - m_Layer: 11 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3104997165943222055 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6921374889673005156} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2376, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1928533242310257567} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7171592707310585619 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6921374889673005156} - 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!114 &6753980191332489817 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6921374889673005156} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7166813105519184363 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7511566713832706897} - - component: {fileID: 1614113907634122862} - - component: {fileID: 6529628539688389518} - - component: {fileID: 8050691985340366637} - - component: {fileID: -3974141244096910749} - - component: {fileID: -6107101561439177014} - m_Layer: 8 - m_Name: 91 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7511566713832706897 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7166813105519184363} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 4608712055547433343} - - {fileID: 6754847874598398154} - - {fileID: 4762931587687475371} - - {fileID: 1928533242310257567} - - {fileID: 1114694660863866395} - - {fileID: 5787970164300200860} - - {fileID: 5775548251644899685} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &1614113907634122862 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7166813105519184363} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 4 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &6529628539688389518 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7166813105519184363} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 91 - occupyNum: 4 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &8050691985340366637 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7166813105519184363} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &-3974141244096910749 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7166813105519184363} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &-6107101561439177014 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7166813105519184363} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 4 - selfIcon: {fileID: 21300000, guid: 9fd0f80f2e5f0504c96738b9e5b72d30, type: 3} ---- !u!1 &7280823576953471714 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3450328077147025971} - - component: {fileID: 7657530438213139209} - - component: {fileID: 6620774218303064410} - m_Layer: 11 - m_Name: Cube (31) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3450328077147025971 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7280823576953471714} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.106500015, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5787970164300200860} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7657530438213139209 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7280823576953471714} - 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!114 &6620774218303064410 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7280823576953471714} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7409264776407419744 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7218396936185472877} - - component: {fileID: 7073472615646225630} - - component: {fileID: 2693682872047690159} - m_Layer: 11 - m_Name: Cube (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7218396936185472877 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7409264776407419744} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0633, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1114694660863866395} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7073472615646225630 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7409264776407419744} - 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!114 &2693682872047690159 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7409264776407419744} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7437001677381152742 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7825346447561072982} - - component: {fileID: 2803474609621464517} - - component: {fileID: 2899955562586456021} - m_Layer: 11 - m_Name: Cube (29) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7825346447561072982 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7437001677381152742} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0169, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5787970164300200860} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2803474609621464517 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7437001677381152742} - 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!114 &2899955562586456021 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7437001677381152742} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7516883221486860641 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7428312313186504192} - - component: {fileID: 1754023987389057714} - - component: {fileID: 8875586927518304079} - m_Layer: 11 - m_Name: Cube (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7428312313186504192 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7516883221486860641} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1087, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1928533242310257567} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1754023987389057714 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7516883221486860641} - 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!114 &8875586927518304079 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7516883221486860641} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7774885679099663274 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8796169207107080206} - - component: {fileID: 4006019125177490908} - - component: {fileID: 5844514416296606021} - m_Layer: 11 - m_Name: Cube (35) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8796169207107080206 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7774885679099663274} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2786, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5787970164300200860} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4006019125177490908 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7774885679099663274} - 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!114 &5844514416296606021 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7774885679099663274} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8057039964324131839 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2903841037225259680} - - component: {fileID: 8578414463954599737} - - component: {fileID: 4493823786805534424} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2903841037225259680 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8057039964324131839} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1139, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4762931587687475371} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8578414463954599737 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8057039964324131839} - 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!114 &4493823786805534424 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8057039964324131839} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8173325694883559520 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6754847874598398154} - m_Layer: 8 - m_Name: "\u524D\u76D6" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6754847874598398154 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8173325694883559520} - 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: 5343197729666347967} - m_Father: {fileID: 7511566713832706897} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &8174902199034469547 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2799807344610192041} - - component: {fileID: 1208587654784162955} - - component: {fileID: 4384884227010601093} - m_Layer: 11 - m_Name: Cube (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2799807344610192041 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8174902199034469547} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0707, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1928533242310257567} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1208587654784162955 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8174902199034469547} - 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!114 &4384884227010601093 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8174902199034469547} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8183260867953901696 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5432331366890994835} - - component: {fileID: 1760933435339818562} - - component: {fileID: 2842368252444478697} - m_Layer: 11 - m_Name: Cube (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5432331366890994835 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8183260867953901696} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1139, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1928533242310257567} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1760933435339818562 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8183260867953901696} - 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!114 &2842368252444478697 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8183260867953901696} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8322583472177147422 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4207057287712034999} - - component: {fileID: 8961786259889211065} - - component: {fileID: 6507355349226311949} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4207057287712034999 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8322583472177147422} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0707, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4762931587687475371} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8961786259889211065 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8322583472177147422} - 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!114 &6507355349226311949 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8322583472177147422} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8357857511595415509 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9097464445744153105} - - component: {fileID: 4631603524186839826} - - component: {fileID: 736183346031690666} - m_Layer: 11 - m_Name: Cube (30) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9097464445744153105 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8357857511595415509} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0633, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5787970164300200860} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4631603524186839826 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8357857511595415509} - 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!114 &736183346031690666 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8357857511595415509} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8457687845696952035 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5167222174728901042} - - component: {fileID: 1040973154141987167} - - component: {fileID: 3865490356896343445} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5167222174728901042 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8457687845696952035} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0655, y: -0.0142, z: -0.005} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4762931587687475371} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1040973154141987167 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8457687845696952035} - 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!114 &3865490356896343445 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8457687845696952035} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8735844080588369020 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3129575321045993793} - - component: {fileID: 2607385241482981896} - - component: {fileID: 111533687362947984} - m_Layer: 11 - m_Name: Cube (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3129575321045993793 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8735844080588369020} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1161, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1114694660863866395} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2607385241482981896 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8735844080588369020} - 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!114 &111533687362947984 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8735844080588369020} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8859327609450902104 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3327503824434706549} - - component: {fileID: 424923211937307091} - - component: {fileID: 7893278739658819400} - m_Layer: 11 - m_Name: Cube (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3327503824434706549 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8859327609450902104} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1458, y: -0.0142, z: -0.0059} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1114694660863866395} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &424923211937307091 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8859327609450902104} - 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!114 &7893278739658819400 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8859327609450902104} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/91.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/91.prefab.meta deleted file mode 100644 index f8b88535c..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/91.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 69e71e953347abd48839600c950e936c -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/92.prefab b/GQ_URP/GQ/Assets/prefab/老模型/92.prefab deleted file mode 100644 index b60e1a681..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/92.prefab +++ /dev/null @@ -1,7257 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &37448819728524642 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 101966581351918405} - - component: {fileID: 7782467824456490903} - - component: {fileID: 1948790151575328118} - m_Layer: 11 - m_Name: Cube (66) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &101966581351918405 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37448819728524642} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0639, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7706168757713516290} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7782467824456490903 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37448819728524642} - 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!114 &1948790151575328118 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37448819728524642} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &150064710096307472 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 689643709395431706} - - component: {fileID: 5176520998293814932} - - component: {fileID: 6817919809378894409} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &689643709395431706 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 150064710096307472} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2006, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 681098036636556889} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5176520998293814932 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 150064710096307472} - 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!114 &6817919809378894409 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 150064710096307472} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &200307465662959785 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7944287370462498032} - - component: {fileID: 7594977345335764090} - - component: {fileID: 5293231412627815870} - m_Layer: 11 - m_Name: Cube (71) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7944287370462498032 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 200307465662959785} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2754, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7706168757713516290} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7594977345335764090 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 200307465662959785} - 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!114 &5293231412627815870 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 200307465662959785} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &341647944060472341 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5735706316595476209} - - component: {fileID: 7657133313313682516} - - component: {fileID: 7266416936959527265} - m_Layer: 11 - m_Name: Cube (54) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5735706316595476209 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 341647944060472341} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0639, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9071052174010785233} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7657133313313682516 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 341647944060472341} - 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!114 &7266416936959527265 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 341647944060472341} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &534220279449829780 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 520490051541548757} - - component: {fileID: 9158003082051967839} - - component: {fileID: 7197735944348323979} - m_Layer: 11 - m_Name: Cube (53) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &520490051541548757 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 534220279449829780} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0178, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9071052174010785233} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9158003082051967839 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 534220279449829780} - 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!114 &7197735944348323979 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 534220279449829780} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &810267594570030770 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5489529171704311959} - - component: {fileID: 1865753027588333374} - - component: {fileID: 7591344547436501713} - m_Layer: 11 - m_Name: Cube (55) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5489529171704311959 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 810267594570030770} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.10720003, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9071052174010785233} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1865753027588333374 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 810267594570030770} - 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!114 &7591344547436501713 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 810267594570030770} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1027575417060339770 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6065585703366785036} - - component: {fileID: 7563726944215786320} - - component: {fileID: 7407074953403448993} - m_Layer: 11 - m_Name: Cube (60) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6065585703366785036 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1027575417060339770} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2021, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7706168757713516290} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7563726944215786320 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1027575417060339770} - 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!114 &7407074953403448993 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1027575417060339770} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1115688009111273186 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2336745448383042680} - - component: {fileID: 3738666876976082455} - - component: {fileID: 4407493820992857310} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2336745448383042680 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1115688009111273186} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1895, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 681098036636556889} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3738666876976082455 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1115688009111273186} - 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!114 &4407493820992857310 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1115688009111273186} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1302987814597984328 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4421966130839751443} - - component: {fileID: 5623034528004183381} - - component: {fileID: 2534201016444589696} - m_Layer: 11 - m_Name: Cube (62) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4421966130839751443 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1302987814597984328} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1125, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7706168757713516290} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5623034528004183381 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1302987814597984328} - 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!114 &2534201016444589696 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1302987814597984328} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1565138953900382090 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8594748538351805105} - - component: {fileID: 7838229975172153655} - - component: {fileID: 8863661266821621966} - m_Layer: 11 - m_Name: Cube (31) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8594748538351805105 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1565138953900382090} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.10723003, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4905223626119823593} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7838229975172153655 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1565138953900382090} - 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!114 &8863661266821621966 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1565138953900382090} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1707027615153554357 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8683462380692118868} - - component: {fileID: 3321416209480297260} - - component: {fileID: 1397115758623021028} - m_Layer: 11 - m_Name: Cube (56) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8683462380692118868 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1707027615153554357} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1494, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9071052174010785233} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3321416209480297260 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1707027615153554357} - 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!114 &1397115758623021028 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1707027615153554357} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1833632564754446118 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4784124832030980387} - - component: {fileID: 9067402449347364135} - - component: {fileID: 7735470344300239074} - m_Layer: 11 - m_Name: Cube (41) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4784124832030980387 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1833632564754446118} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0178, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1961856637639937390} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9067402449347364135 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1833632564754446118} - 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!114 &7735470344300239074 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1833632564754446118} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1857423980208534356 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4125182333041784240} - - component: {fileID: 5189844702971228885} - - component: {fileID: 4693650026115692709} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4125182333041784240 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1857423980208534356} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0163, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 681098036636556889} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5189844702971228885 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1857423980208534356} - 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!114 &4693650026115692709 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1857423980208534356} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2050429019064448969 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1380375562498864842} - - component: {fileID: 2830826713520066794} - - component: {fileID: 3980419607527781968} - m_Layer: 11 - m_Name: Cube (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1380375562498864842 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2050429019064448969} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.06394, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5884353965965319533} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2830826713520066794 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2050429019064448969} - 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!114 &3980419607527781968 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2050429019064448969} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2051018818981241542 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 211251486679913413} - - component: {fileID: 3782484474593055565} - - component: {fileID: 2464625251250683491} - m_Layer: 11 - m_Name: Cube (46) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &211251486679913413 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2051018818981241542} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2358, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1961856637639937390} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3782484474593055565 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2051018818981241542} - 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!114 &2464625251250683491 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2051018818981241542} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2162609817736977843 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6018973457144214887} - - component: {fileID: 4142789971924564530} - - component: {fileID: 5823285804798722199} - m_Layer: 8 - m_Name: 92 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6018973457144214887 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2162609817736977843} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.178} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2545826976934716835} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4142789971924564530 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2162609817736977843} - m_Mesh: {fileID: -894122891035482148, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!23 &5823285804798722199 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2162609817736977843} - 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: -5598141350581169709, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: 3925418980499852262, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: 1368039103165038143, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: -5956578104803850452, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: -6307277589567570940, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: 9077612666303962245, guid: 1e0b029320fe5914d98621193276e076, type: 3} - 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!1 &2250454995498389594 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 627457502465274197} - - component: {fileID: 7791888039624108221} - - component: {fileID: 3068705665459135893} - m_Layer: 11 - m_Name: Cube (39) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &627457502465274197 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2250454995498389594} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0693, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1961856637639937390} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7791888039624108221 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2250454995498389594} - 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!114 &3068705665459135893 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2250454995498389594} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2277975047220772524 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1616516372651927057} - - component: {fileID: 5870451619181695016} - - component: {fileID: 5345991073628086631} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1616516372651927057 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2277975047220772524} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0257, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 681098036636556889} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5870451619181695016 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2277975047220772524} - 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!114 &5345991073628086631 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2277975047220772524} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2287177627162924029 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6788567188465648306} - - component: {fileID: 2595768726326547569} - - component: {fileID: 1135263355475982729} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6788567188465648306 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2287177627162924029} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1117, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 681098036636556889} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2595768726326547569 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2287177627162924029} - 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!114 &1135263355475982729 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2287177627162924029} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2370437256105328269 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6660222735852153329} - - component: {fileID: 5806778628344503740} - - component: {fileID: 689271352563507222} - m_Layer: 11 - m_Name: Cube (23) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6660222735852153329 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2370437256105328269} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2754, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5884353965965319533} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5806778628344503740 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2370437256105328269} - 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!114 &689271352563507222 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2370437256105328269} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2436339290124953338 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7174368189392056798} - - component: {fileID: 426906919555028389} - - component: {fileID: 4324917273331219079} - m_Layer: 11 - m_Name: Cube (38) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7174368189392056798 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2436339290124953338} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1125, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1961856637639937390} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &426906919555028389 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2436339290124953338} - 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!114 &4324917273331219079 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2436339290124953338} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2501925469137852108 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7327081533399031696} - - component: {fileID: 6932094810280936956} - - component: {fileID: 1262125031723228152} - m_Layer: 11 - m_Name: Cube (59) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7327081533399031696 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2501925469137852108} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2754, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9071052174010785233} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6932094810280936956 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2501925469137852108} - 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!114 &1262125031723228152 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2501925469137852108} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2563476163381907228 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 191463385382203763} - - component: {fileID: 8702737935693709728} - - component: {fileID: 6740573398732855712} - m_Layer: 11 - m_Name: Cube (24) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &191463385382203763 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2563476163381907228} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2021, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4905223626119823593} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8702737935693709728 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2563476163381907228} - 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!114 &6740573398732855712 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2563476163381907228} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2666019844892499169 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4303513402832865376} - - component: {fileID: 6128426890560014109} - - component: {fileID: 8193919061422660839} - m_Layer: 11 - m_Name: Cube (69) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4303513402832865376 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2666019844892499169} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.19260001, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7706168757713516290} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6128426890560014109 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2666019844892499169} - 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!114 &8193919061422660839 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2666019844892499169} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2713701951749867980 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5467319425192677087} - - component: {fileID: 4141922649923298814} - - component: {fileID: 4514939144000449798} - m_Layer: 11 - m_Name: Cube (30) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5467319425192677087 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2713701951749867980} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0639, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4905223626119823593} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4141922649923298814 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2713701951749867980} - 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!114 &4514939144000449798 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2713701951749867980} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2719739331433919133 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4457471417663131268} - - component: {fileID: 7532551455626406453} - - component: {fileID: 1802175484409675780} - m_Layer: 11 - m_Name: Cube (27) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4457471417663131268 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2719739331433919133} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0693, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4905223626119823593} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7532551455626406453 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2719739331433919133} - 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!114 &1802175484409675780 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2719739331433919133} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2891109239873126169 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2545826976934716835} - - component: {fileID: 2690067612742936152} - - component: {fileID: 7713838616233198982} - - component: {fileID: 6834894997606108286} - - component: {fileID: 326562228865909097} - - component: {fileID: 6875719283000429376} - m_Layer: 8 - m_Name: 92 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2545826976934716835 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2891109239873126169} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 6018973457144214887} - - {fileID: 4281480677611672104} - - {fileID: 681098036636556889} - - {fileID: 5884353965965319533} - - {fileID: 4905223626119823593} - - {fileID: 1961856637639937390} - - {fileID: 9071052174010785233} - - {fileID: 7706168757713516290} - - {fileID: 4802039036694595444} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &2690067612742936152 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2891109239873126169} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 4 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &7713838616233198982 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2891109239873126169} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 92 - occupyNum: 4 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &6834894997606108286 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2891109239873126169} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &326562228865909097 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2891109239873126169} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &6875719283000429376 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2891109239873126169} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 4 - selfIcon: {fileID: 21300000, guid: 16335f9668ec1084b8ebd6a961074b10, type: 3} ---- !u!1 &2910376070214209314 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 911273467634115175} - - component: {fileID: 3898726239793955941} - - component: {fileID: 8113470792938192924} - m_Layer: 11 - m_Name: Cube (61) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &911273467634115175 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2910376070214209314} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1588, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7706168757713516290} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3898726239793955941 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2910376070214209314} - 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!114 &8113470792938192924 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2910376070214209314} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2976950920674497260 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7479108269751650754} - - component: {fileID: 5496762926392562581} - - component: {fileID: 1465207447887661304} - m_Layer: 11 - m_Name: Cube (58) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7479108269751650754 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2976950920674497260} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2358, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9071052174010785233} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5496762926392562581 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2976950920674497260} - 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!114 &1465207447887661304 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2976950920674497260} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3133006525248246111 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4802039036694595444} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4802039036694595444 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3133006525248246111} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -0.13499999, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2545826976934716835} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &3238811773354386060 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5819564187569368311} - - component: {fileID: 3167129076175437997} - - component: {fileID: 2216855029046743388} - m_Layer: 11 - m_Name: Cube (28) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5819564187569368311 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3238811773354386060} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.024, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4905223626119823593} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3167129076175437997 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3238811773354386060} - 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!114 &2216855029046743388 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3238811773354386060} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3388340939758425139 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2912488796048514479} - - component: {fileID: 410794931766866969} - - component: {fileID: 3354347064696013625} - m_Layer: 11 - m_Name: Cube (70) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2912488796048514479 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3388340939758425139} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2358, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7706168757713516290} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &410794931766866969 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3388340939758425139} - 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!114 &3354347064696013625 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3388340939758425139} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3549459237476214542 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 722912788915864719} - - component: {fileID: 5961336860656694980} - - component: {fileID: 416750798385637934} - m_Layer: 11 - m_Name: Cube (68) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &722912788915864719 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3549459237476214542} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1494, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7706168757713516290} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5961336860656694980 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3549459237476214542} - 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!114 &416750798385637934 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3549459237476214542} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3631397042433292355 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 399392781625747573} - - component: {fileID: 6827228303408546012} - - component: {fileID: 4608376885009672007} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &399392781625747573 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3631397042433292355} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2342, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 681098036636556889} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6827228303408546012 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3631397042433292355} - 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!114 &4608376885009672007 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3631397042433292355} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3774197913742921284 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7330061544939712893} - - component: {fileID: 3933898867583362132} - - component: {fileID: 4751286477693750969} - m_Layer: 11 - m_Name: Cube (48) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7330061544939712893 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3774197913742921284} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2021, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9071052174010785233} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3933898867583362132 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3774197913742921284} - 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!114 &4751286477693750969 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3774197913742921284} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3950066151421293790 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1906021728963052750} - - component: {fileID: 4920533639163938645} - - component: {fileID: 6172991771981071232} - m_Layer: 11 - m_Name: Cube (52) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1906021728963052750 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3950066151421293790} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.024, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9071052174010785233} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4920533639163938645 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3950066151421293790} - 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!114 &6172991771981071232 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3950066151421293790} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3961054884031291135 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1331813158400492095} - - component: {fileID: 4337272987339798466} - - component: {fileID: 4214453850465010088} - m_Layer: 11 - m_Name: Cube (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1331813158400492095 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3961054884031291135} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1125, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5884353965965319533} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4337272987339798466 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3961054884031291135} - 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!114 &4214453850465010088 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3961054884031291135} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4104631721744911796 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3738084297404336691} - - component: {fileID: 8330808198190895168} - - component: {fileID: 4646420729948519655} - m_Layer: 11 - m_Name: Cube (57) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3738084297404336691 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4104631721744911796} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1926, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9071052174010785233} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8330808198190895168 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4104631721744911796} - 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!114 &4646420729948519655 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4104631721744911796} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4157521512000305393 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5718565726905151687} - - component: {fileID: 5918275411527458724} - - component: {fileID: 5736560368855591935} - m_Layer: 11 - m_Name: Cube (32) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5718565726905151687 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4157521512000305393} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1494, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4905223626119823593} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5918275411527458724 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4157521512000305393} - 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!114 &5736560368855591935 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4157521512000305393} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4172661007220937498 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6549714553058458505} - - component: {fileID: 8399872144499273773} - - component: {fileID: 6916183142586382329} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6549714553058458505 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4172661007220937498} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2021, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5884353965965319533} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8399872144499273773 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4172661007220937498} - 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!114 &6916183142586382329 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4172661007220937498} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4318961437739397704 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7800257929774355026} - - component: {fileID: 5697115215920742594} - - component: {fileID: 6767566260238314757} - m_Layer: 11 - m_Name: Cube (40) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7800257929774355026 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4318961437739397704} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.024, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1961856637639937390} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5697115215920742594 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4318961437739397704} - 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!114 &6767566260238314757 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4318961437739397704} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4347968832968439564 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1833088859055867294} - - component: {fileID: 7577101062667549370} - - component: {fileID: 7631033944433337574} - m_Layer: 11 - m_Name: Cube (50) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1833088859055867294 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4347968832968439564} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1125, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9071052174010785233} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7577101062667549370 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4347968832968439564} - 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!114 &7631033944433337574 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4347968832968439564} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4399088963613919819 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2537102867363245672} - - component: {fileID: 5132825870756635025} - - component: {fileID: 5734456103912782341} - m_Layer: 11 - m_Name: Cube (67) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2537102867363245672 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4399088963613919819} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1072, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7706168757713516290} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5132825870756635025 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4399088963613919819} - 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!114 &5734456103912782341 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4399088963613919819} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4568164987824685955 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2133135216927309735} - - component: {fileID: 3946342055267219424} - - component: {fileID: 3208501532560484996} - m_Layer: 11 - m_Name: Cube (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2133135216927309735 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4568164987824685955} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0693, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5884353965965319533} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3946342055267219424 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4568164987824685955} - 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!114 &3208501532560484996 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4568164987824685955} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4594308070299364849 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1772690064598688212} - - component: {fileID: 1170276398232291132} - - component: {fileID: 6559108772329337432} - m_Layer: 11 - m_Name: Cube (49) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1772690064598688212 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4594308070299364849} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1588, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9071052174010785233} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1170276398232291132 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4594308070299364849} - 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!114 &6559108772329337432 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4594308070299364849} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4821205261047199936 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5850926612361790947} - - component: {fileID: 2321940052963716242} - - component: {fileID: 5334420460255737051} - m_Layer: 11 - m_Name: Cube (37) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5850926612361790947 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4821205261047199936} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1588, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1961856637639937390} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2321940052963716242 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4821205261047199936} - 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!114 &5334420460255737051 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4821205261047199936} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4929265710970656723 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4905223626119823593} - - component: {fileID: 8009503731917543762} - - component: {fileID: 5957350231947642760} - - component: {fileID: 7219088709100348927} - - component: {fileID: 4040448568683751869} - - component: {fileID: 7000733516378558755} - - component: {fileID: 7036667191416353882} - m_Layer: 8 - m_Name: Object005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4905223626119823593 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4929265710970656723} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0071395678, y: 0.10167441, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 191463385382203763} - - {fileID: 7978532073965093512} - - {fileID: 92032122485821071} - - {fileID: 4457471417663131268} - - {fileID: 5819564187569368311} - - {fileID: 5997799529331579310} - - {fileID: 5467319425192677087} - - {fileID: 8594748538351805105} - - {fileID: 5718565726905151687} - - {fileID: 3971041880320494531} - - {fileID: 7660081111641875424} - - {fileID: 915190829911052453} - m_Father: {fileID: 2545826976934716835} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8009503731917543762 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4929265710970656723} - m_Mesh: {fileID: 9186633843763367028, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!23 &5957350231947642760 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4929265710970656723} - 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: -1502669387472542646, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: 1038712434395320081, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: 7874494369389819107, guid: 1e0b029320fe5914d98621193276e076, type: 3} - 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!114 &7219088709100348927 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4929265710970656723} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 3 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &4040448568683751869 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4929265710970656723} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &7000733516378558755 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4929265710970656723} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &7036667191416353882 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4929265710970656723} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 9186633843763367028, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!1 &5071841091385318098 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7362278437433632352} - - component: {fileID: 2630633026248101652} - - component: {fileID: 2100568850396656719} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7362278437433632352 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5071841091385318098} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.024, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5884353965965319533} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2630633026248101652 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5071841091385318098} - 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!114 &2100568850396656719 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5071841091385318098} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5153700772417657277 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6479989877887786793} - - component: {fileID: 5202322972262245412} - - component: {fileID: 1562769410333920887} - m_Layer: 11 - m_Name: Cube (44) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6479989877887786793 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5153700772417657277} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1494, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1961856637639937390} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5202322972262245412 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5153700772417657277} - 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!114 &1562769410333920887 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5153700772417657277} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5187992610753987439 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6296085635591890936} - - component: {fileID: 1752367735181883557} - - component: {fileID: 5261839781592584136} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6296085635591890936 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5187992610753987439} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1558, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 681098036636556889} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1752367735181883557 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5187992610753987439} - 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!114 &5261839781592584136 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5187992610753987439} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5211419753946268229 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5830698546204375268} - - component: {fileID: 3107280373442265541} - - component: {fileID: 6491655794502471667} - m_Layer: 11 - m_Name: Cube (63) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5830698546204375268 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5211419753946268229} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0693, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7706168757713516290} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3107280373442265541 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5211419753946268229} - 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!114 &6491655794502471667 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5211419753946268229} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5575334477083315771 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1136477833947020187} - - component: {fileID: 1048057949582993994} - - component: {fileID: 8304995588932420988} - m_Layer: 11 - m_Name: Cube (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1136477833947020187 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5575334477083315771} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1494, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5884353965965319533} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1048057949582993994 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5575334477083315771} - 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!114 &8304995588932420988 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5575334477083315771} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5670108382516289560 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1961856637639937390} - - component: {fileID: 1571200125295279436} - - component: {fileID: 6654192744050723193} - - component: {fileID: 8855831776009312400} - - component: {fileID: 4126544502874548900} - - component: {fileID: 7651947637148028011} - - component: {fileID: 3906607683333784451} - m_Layer: 8 - m_Name: Object006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1961856637639937390 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5670108382516289560} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0071395678, y: 0.073690474, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 327169139417116374} - - {fileID: 5850926612361790947} - - {fileID: 7174368189392056798} - - {fileID: 627457502465274197} - - {fileID: 7800257929774355026} - - {fileID: 4784124832030980387} - - {fileID: 1878701133088077202} - - {fileID: 131929239326660952} - - {fileID: 6479989877887786793} - - {fileID: 192747559457202102} - - {fileID: 211251486679913413} - - {fileID: 7717914129758749476} - m_Father: {fileID: 2545826976934716835} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1571200125295279436 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5670108382516289560} - m_Mesh: {fileID: -2639241166356525208, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!23 &6654192744050723193 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5670108382516289560} - 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: -1502669387472542646, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: 1038712434395320081, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: 7874494369389819107, guid: 1e0b029320fe5914d98621193276e076, type: 3} - 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!114 &8855831776009312400 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5670108382516289560} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 4 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &4126544502874548900 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5670108382516289560} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &7651947637148028011 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5670108382516289560} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &3906607683333784451 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5670108382516289560} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -2639241166356525208, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!1 &5753103439863968579 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7978532073965093512} - - component: {fileID: 5181736933451823260} - - component: {fileID: 5797129736443790851} - m_Layer: 11 - m_Name: Cube (25) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7978532073965093512 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5753103439863968579} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1588, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4905223626119823593} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5181736933451823260 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5753103439863968579} - 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!114 &5797129736443790851 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5753103439863968579} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5916366071422934007 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7879399280239228713} - - component: {fileID: 976286691389541431} - - component: {fileID: 1960669166791808904} - m_Layer: 11 - m_Name: Cube (64) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7879399280239228713 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5916366071422934007} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.024, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7706168757713516290} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &976286691389541431 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5916366071422934007} - 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!114 &1960669166791808904 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5916366071422934007} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6141718102251989349 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4426893942793317705} - - component: {fileID: 2131997986545842633} - - component: {fileID: 4550027253595996006} - m_Layer: 11 - m_Name: Cube (51) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4426893942793317705 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6141718102251989349} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0693, y: -0.0142, z: -0.0049} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9071052174010785233} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2131997986545842633 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6141718102251989349} - 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!114 &4550027253595996006 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6141718102251989349} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6185855076118007477 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 93502485704394061} - - component: {fileID: 3680160396790692025} - - component: {fileID: 6792429986890681779} - m_Layer: 8 - m_Name: Object001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &93502485704394061 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6185855076118007477} - m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} - m_LocalPosition: {x: 0.16413987, y: -0.09, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4281480677611672104} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3680160396790692025 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6185855076118007477} - m_Mesh: {fileID: -3292925553009838691, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!23 &6792429986890681779 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6185855076118007477} - 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: 1368039103165038143, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: -5956578104803850452, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: 9077612666303962245, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: -6307277589567570940, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: -8757356216087587297, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: 4058342625295081725, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: 6012098043614753949, guid: 1e0b029320fe5914d98621193276e076, type: 3} - 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!1 &6324727750581092290 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3971041880320494531} - - component: {fileID: 44323848242202992} - - component: {fileID: 8480635253109187698} - m_Layer: 11 - m_Name: Cube (33) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3971041880320494531 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6324727750581092290} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1926, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4905223626119823593} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &44323848242202992 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6324727750581092290} - 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!114 &8480635253109187698 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6324727750581092290} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6437714217472736356 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7717914129758749476} - - component: {fileID: 2044096165781736402} - - component: {fileID: 5716270034136292258} - m_Layer: 11 - m_Name: Cube (47) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7717914129758749476 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6437714217472736356} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2754, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1961856637639937390} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2044096165781736402 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6437714217472736356} - 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!114 &5716270034136292258 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6437714217472736356} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6678741027303411826 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7234530156867061972} - - component: {fileID: 8733341679227181368} - - component: {fileID: 1557752610379845537} - m_Layer: 11 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7234530156867061972 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6678741027303411826} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.23577, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5884353965965319533} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8733341679227181368 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6678741027303411826} - 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!114 &1557752610379845537 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6678741027303411826} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6741976281426968491 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2909581946092909337} - - component: {fileID: 3935016693029705114} - - component: {fileID: 7974113835517981935} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2909581946092909337 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6741976281426968491} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2747, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 681098036636556889} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3935016693029705114 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6741976281426968491} - 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!114 &7974113835517981935 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6741976281426968491} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6914896940037915526 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8917298445791593390} - - component: {fileID: 1101268882446553210} - - component: {fileID: 8025709729319323419} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8917298445791593390 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6914896940037915526} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1038, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 681098036636556889} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1101268882446553210 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6914896940037915526} - 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!114 &8025709729319323419 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6914896940037915526} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7326962696840049134 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9071052174010785233} - - component: {fileID: 8370353633297189150} - - component: {fileID: 842471789366471352} - - component: {fileID: 5595731911232054209} - - component: {fileID: 569660613964704399} - - component: {fileID: 5562829172241858660} - - component: {fileID: 3606484185735416573} - m_Layer: 8 - m_Name: Object007 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9071052174010785233 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7326962696840049134} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0071395678, y: 0.15764228, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 7330061544939712893} - - {fileID: 1772690064598688212} - - {fileID: 1833088859055867294} - - {fileID: 4426893942793317705} - - {fileID: 1906021728963052750} - - {fileID: 520490051541548757} - - {fileID: 5735706316595476209} - - {fileID: 5489529171704311959} - - {fileID: 8683462380692118868} - - {fileID: 3738084297404336691} - - {fileID: 7479108269751650754} - - {fileID: 7327081533399031696} - m_Father: {fileID: 2545826976934716835} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8370353633297189150 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7326962696840049134} - m_Mesh: {fileID: 7733717212360752527, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!23 &842471789366471352 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7326962696840049134} - 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: -1502669387472542646, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: 1038712434395320081, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: 7874494369389819107, guid: 1e0b029320fe5914d98621193276e076, type: 3} - 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!114 &5595731911232054209 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7326962696840049134} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &569660613964704399 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7326962696840049134} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5562829172241858660 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7326962696840049134} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &3606484185735416573 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7326962696840049134} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 7733717212360752527, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!1 &7494372196293663124 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1878701133088077202} - - component: {fileID: 7956524555446672845} - - component: {fileID: 8641291791455180883} - m_Layer: 11 - m_Name: Cube (42) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1878701133088077202 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7494372196293663124} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0639, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1961856637639937390} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7956524555446672845 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7494372196293663124} - 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!114 &8641291791455180883 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7494372196293663124} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7659829589456854404 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 192747559457202102} - - component: {fileID: 6302907549167991891} - - component: {fileID: 8373989881381321457} - m_Layer: 11 - m_Name: Cube (45) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &192747559457202102 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7659829589456854404} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.19260001, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1961856637639937390} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6302907549167991891 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7659829589456854404} - 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!114 &8373989881381321457 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7659829589456854404} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7954759962968833068 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 129591618782502345} - - component: {fileID: 7368795150657334605} - - component: {fileID: 3457781517616295115} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &129591618782502345 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7954759962968833068} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1478, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 681098036636556889} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7368795150657334605 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7954759962968833068} - 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!114 &3457781517616295115 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7954759962968833068} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8008335866104604778 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 92032122485821071} - - component: {fileID: 2702155997172313197} - - component: {fileID: 2729317258361801872} - m_Layer: 11 - m_Name: Cube (26) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &92032122485821071 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8008335866104604778} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1125, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4905223626119823593} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2702155997172313197 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8008335866104604778} - 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!114 &2729317258361801872 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8008335866104604778} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8188163924400795219 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5884353965965319533} - - component: {fileID: 5368351459480565692} - - component: {fileID: 7195081971134356702} - - component: {fileID: 1170836011005604522} - - component: {fileID: 3201526037389043960} - - component: {fileID: 3300499547073203718} - - component: {fileID: 4802507807988983719} - m_Layer: 8 - m_Name: Object004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5884353965965319533 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8188163924400795219} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0071395678, y: 0.045706555, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 6549714553058458505} - - {fileID: 815109812369381873} - - {fileID: 1331813158400492095} - - {fileID: 2133135216927309735} - - {fileID: 7362278437433632352} - - {fileID: 6967778012540614378} - - {fileID: 1380375562498864842} - - {fileID: 7476250897536415386} - - {fileID: 1136477833947020187} - - {fileID: 5395841727903175459} - - {fileID: 7234530156867061972} - - {fileID: 6660222735852153329} - m_Father: {fileID: 2545826976934716835} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5368351459480565692 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8188163924400795219} - m_Mesh: {fileID: -8113768720884857512, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!23 &7195081971134356702 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8188163924400795219} - 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: -1502669387472542646, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: 1038712434395320081, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: 7874494369389819107, guid: 1e0b029320fe5914d98621193276e076, type: 3} - 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!114 &1170836011005604522 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8188163924400795219} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 5 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &3201526037389043960 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8188163924400795219} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &3300499547073203718 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8188163924400795219} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &4802507807988983719 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8188163924400795219} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -8113768720884857512, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!1 &8234368078516202847 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4281480677611672104} - m_Layer: 0 - m_Name: "\u524D\u76D6" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4281480677611672104 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8234368078516202847} - m_LocalRotation: {x: -0, y: -0.7071068, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0.09000001, z: -0.1766087} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 93502485704394061} - m_Father: {fileID: 2545826976934716835} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &8534607067856568229 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5130224271104654130} - - component: {fileID: 6870121048327361321} - - component: {fileID: 9162122240062709599} - m_Layer: 11 - m_Name: Cube (65) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5130224271104654130 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8534607067856568229} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0178, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7706168757713516290} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6870121048327361321 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8534607067856568229} - 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!114 &9162122240062709599 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8534607067856568229} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8629713400025606839 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7706168757713516290} - - component: {fileID: 1179809067114652365} - - component: {fileID: 5539167223057055717} - - component: {fileID: 9000557132745680643} - - component: {fileID: 8307205490030900006} - - component: {fileID: 6202807441457342588} - - component: {fileID: 4943938350372718263} - m_Layer: 8 - m_Name: Object008 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7706168757713516290 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8629713400025606839} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0071395678, y: 0.12965834, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 6065585703366785036} - - {fileID: 911273467634115175} - - {fileID: 4421966130839751443} - - {fileID: 5830698546204375268} - - {fileID: 7879399280239228713} - - {fileID: 5130224271104654130} - - {fileID: 101966581351918405} - - {fileID: 2537102867363245672} - - {fileID: 722912788915864719} - - {fileID: 4303513402832865376} - - {fileID: 2912488796048514479} - - {fileID: 7944287370462498032} - m_Father: {fileID: 2545826976934716835} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1179809067114652365 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8629713400025606839} - m_Mesh: {fileID: -7647463442239531939, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!23 &5539167223057055717 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8629713400025606839} - 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: -1502669387472542646, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: 1038712434395320081, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: 7874494369389819107, guid: 1e0b029320fe5914d98621193276e076, type: 3} - 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!114 &9000557132745680643 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8629713400025606839} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &8307205490030900006 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8629713400025606839} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &6202807441457342588 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8629713400025606839} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &4943938350372718263 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8629713400025606839} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -7647463442239531939, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!1 &8650888577102017195 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7660081111641875424} - - component: {fileID: 2565445712583022266} - - component: {fileID: 2252638049741509300} - m_Layer: 11 - m_Name: Cube (34) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7660081111641875424 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8650888577102017195} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2358, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4905223626119823593} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2565445712583022266 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8650888577102017195} - 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!114 &2252638049741509300 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8650888577102017195} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8651678563329416936 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7476250897536415386} - - component: {fileID: 4945912163405602842} - - component: {fileID: 4183682632825722653} - m_Layer: 11 - m_Name: Cube (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7476250897536415386 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8651678563329416936} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.10723, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5884353965965319533} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4945912163405602842 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8651678563329416936} - 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!114 &4183682632825722653 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8651678563329416936} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8656302032232153492 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5997799529331579310} - - component: {fileID: 1830000721212143980} - - component: {fileID: 9130270954595878494} - m_Layer: 11 - m_Name: Cube (29) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5997799529331579310 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8656302032232153492} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0178, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4905223626119823593} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1830000721212143980 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8656302032232153492} - 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!114 &9130270954595878494 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8656302032232153492} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8824527849272103909 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 131929239326660952} - - component: {fileID: 8616036069781164747} - - component: {fileID: 8905031460185642909} - m_Layer: 11 - m_Name: Cube (43) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &131929239326660952 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8824527849272103909} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1072, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1961856637639937390} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8616036069781164747 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8824527849272103909} - 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!114 &8905031460185642909 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8824527849272103909} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8840435566477189242 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5395841727903175459} - - component: {fileID: 2732870543518925600} - - component: {fileID: 4779621383925512545} - m_Layer: 11 - m_Name: Cube (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5395841727903175459 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8840435566477189242} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1926, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5884353965965319533} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2732870543518925600 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8840435566477189242} - 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!114 &4779621383925512545 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8840435566477189242} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8843966105917649260 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 681098036636556889} - - component: {fileID: 6283325169926322525} - - component: {fileID: 6148118006467605724} - - component: {fileID: 871820610214922942} - - component: {fileID: 16249977112073777} - - component: {fileID: 2144286651211100508} - - component: {fileID: 7030910015561792075} - m_Layer: 8 - m_Name: Object002 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &681098036636556889 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8843966105917649260} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.0071395678, y: 0.017722623, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 689643709395431706} - - {fileID: 6296085635591890936} - - {fileID: 6788567188465648306} - - {fileID: 6913817585695095520} - - {fileID: 1616516372651927057} - - {fileID: 4125182333041784240} - - {fileID: 3864978914384478025} - - {fileID: 8917298445791593390} - - {fileID: 129591618782502345} - - {fileID: 2336745448383042680} - - {fileID: 399392781625747573} - - {fileID: 2909581946092909337} - m_Father: {fileID: 2545826976934716835} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6283325169926322525 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8843966105917649260} - m_Mesh: {fileID: -3996760141626369306, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!23 &6148118006467605724 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8843966105917649260} - 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: -1502669387472542646, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: 1038712434395320081, guid: 1e0b029320fe5914d98621193276e076, type: 3} - - {fileID: 7874494369389819107, guid: 1e0b029320fe5914d98621193276e076, type: 3} - 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!114 &871820610214922942 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8843966105917649260} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 6 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &16249977112073777 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8843966105917649260} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &2144286651211100508 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8843966105917649260} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &7030910015561792075 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8843966105917649260} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -3996760141626369306, guid: 1e0b029320fe5914d98621193276e076, type: 3} ---- !u!1 &8894284616138750957 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 915190829911052453} - - component: {fileID: 8335491040610022907} - - component: {fileID: 4571095412521822847} - m_Layer: 11 - m_Name: Cube (35) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &915190829911052453 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8894284616138750957} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2754, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4905223626119823593} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8335491040610022907 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8894284616138750957} - 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!114 &4571095412521822847 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8894284616138750957} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9061841557965361343 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 815109812369381873} - - component: {fileID: 285883347462329562} - - component: {fileID: 1563652657268288008} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &815109812369381873 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9061841557965361343} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1588, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5884353965965319533} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &285883347462329562 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9061841557965361343} - 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!114 &1563652657268288008 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9061841557965361343} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9074932898583618550 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6967778012540614378} - - component: {fileID: 3114772391085448622} - - component: {fileID: 9138052684734434054} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6967778012540614378 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9074932898583618550} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.01782, y: -0.0142, z: -0.0033} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5884353965965319533} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3114772391085448622 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9074932898583618550} - 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!114 &9138052684734434054 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9074932898583618550} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9078404456533356226 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6913817585695095520} - - component: {fileID: 2557102688711487707} - - component: {fileID: 218477566623014043} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6913817585695095520 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9078404456533356226} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.069, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 681098036636556889} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2557102688711487707 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9078404456533356226} - 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!114 &218477566623014043 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9078404456533356226} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9108441512531144509 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 327169139417116374} - - component: {fileID: 1383650002310520260} - - component: {fileID: 8630983648732488214} - m_Layer: 11 - m_Name: Cube (36) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &327169139417116374 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9108441512531144509} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2021, y: -0.0142, z: -0.0044} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1961856637639937390} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1383650002310520260 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9108441512531144509} - 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!114 &8630983648732488214 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9108441512531144509} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &9112115263095832732 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3864978914384478025} - - component: {fileID: 3414218070238103550} - - component: {fileID: 6803273419945436226} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3864978914384478025 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9112115263095832732} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0619, y: -0.014, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 681098036636556889} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3414218070238103550 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9112115263095832732} - 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!114 &6803273419945436226 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9112115263095832732} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/92.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/92.prefab.meta deleted file mode 100644 index 35f9f71f2..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/92.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 6fcb1f48a023a66488420ca874ea0133 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/93.prefab b/GQ_URP/GQ/Assets/prefab/老模型/93.prefab deleted file mode 100644 index 54c6852a0..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/93.prefab +++ /dev/null @@ -1,7257 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &116565469663337553 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1747803418375722711} - - component: {fileID: 8167945613340907217} - - component: {fileID: 653013004558691451} - m_Layer: 11 - m_Name: Cube (53) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1747803418375722711 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 116565469663337553} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0167, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2843514534166850526} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8167945613340907217 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 116565469663337553} - 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!114 &653013004558691451 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 116565469663337553} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &169607375160396548 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2307232402783979977} - - component: {fileID: 5838450640116136798} - - component: {fileID: 2021917240043626416} - m_Layer: 11 - m_Name: Cube (31) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2307232402783979977 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 169607375160396548} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.10414, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 690497867503049781} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5838450640116136798 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 169607375160396548} - 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!114 &2021917240043626416 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 169607375160396548} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &231859825989909700 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6250456386054099378} - - component: {fileID: 6361889661388906896} - - component: {fileID: 1287906121905264037} - - component: {fileID: 7780457078688236574} - - component: {fileID: 522936270520903436} - - component: {fileID: 1540255669351182620} - - component: {fileID: 6088915490041005563} - m_Layer: 8 - m_Name: Object006 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6250456386054099378 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 231859825989909700} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.03692468, y: 0.073690474, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 6694574708040152799} - - {fileID: 3278302182662481622} - - {fileID: 7426908937577117031} - - {fileID: 8121656030685952950} - - {fileID: 2824984015431333990} - - {fileID: 7456674707684018191} - - {fileID: 8733161950494529487} - - {fileID: 4787820074919895382} - - {fileID: 4372924154736937050} - - {fileID: 4554560322039088918} - - {fileID: 2929423708018043583} - - {fileID: 1323693300599828324} - m_Father: {fileID: 7985839699733920127} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6361889661388906896 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 231859825989909700} - m_Mesh: {fileID: -2639241166356525208, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!23 &1287906121905264037 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 231859825989909700} - 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: -1502669387472542646, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: 1038712434395320081, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: 7874494369389819107, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - 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!114 &7780457078688236574 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 231859825989909700} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 4 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &522936270520903436 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 231859825989909700} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1540255669351182620 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 231859825989909700} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &6088915490041005563 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 231859825989909700} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -2639241166356525208, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!1 &438058978422090553 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1213638415043775299} - - component: {fileID: 1411511763525837677} - - component: {fileID: 2404508796841495492} - m_Layer: 11 - m_Name: Cube (57) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1213638415043775299 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 438058978422090553} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1888, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2843514534166850526} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1411511763525837677 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 438058978422090553} - 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!114 &2404508796841495492 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 438058978422090553} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &462785432363152453 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9092494819068973652} - - component: {fileID: 2500632849201689633} - - component: {fileID: 3888525372419384732} - m_Layer: 11 - m_Name: Cube (45) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9092494819068973652 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 462785432363152453} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1888, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3487236524303728909} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2500632849201689633 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 462785432363152453} - 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!114 &3888525372419384732 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 462785432363152453} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &501762406893802561 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4112281349838223846} - - component: {fileID: 4761272832481490888} - - component: {fileID: 7225809976951770873} - m_Layer: 11 - m_Name: Cube (38) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4112281349838223846 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 501762406893802561} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1163, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3487236524303728909} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4761272832481490888 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 501762406893802561} - 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!114 &7225809976951770873 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 501762406893802561} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &633926595484682941 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2869349057964028142} - - component: {fileID: 25151733071976695} - - component: {fileID: 8844394489321271401} - m_Layer: 11 - m_Name: Cube (56) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2869349057964028142 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 633926595484682941} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1456, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2843514534166850526} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &25151733071976695 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 633926595484682941} - 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!114 &8844394489321271401 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 633926595484682941} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &704102607586273845 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1267784912578432167} - - component: {fileID: 8523699097851291688} - - component: {fileID: 8349110543543192344} - m_Layer: 11 - m_Name: Cube (43) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1267784912578432167 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 704102607586273845} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.10315, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3487236524303728909} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8523699097851291688 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 704102607586273845} - 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!114 &8349110543543192344 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 704102607586273845} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &715997354749954831 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 690497867503049781} - - component: {fileID: 2495143682249491854} - - component: {fileID: 2245955601047903060} - - component: {fileID: 1405199824806720019} - - component: {fileID: 4649600997511375500} - - component: {fileID: 195162072254422348} - - component: {fileID: 8399223061737228146} - m_Layer: 8 - m_Name: Object005 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &690497867503049781 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 715997354749954831} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.03692468, y: 0.10167441, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1272879139123622427} - - {fileID: 6591575572600157444} - - {fileID: 8406717354425533851} - - {fileID: 8900158807971350997} - - {fileID: 400186809033972629} - - {fileID: 6440838592777488212} - - {fileID: 115186517417916482} - - {fileID: 2307232402783979977} - - {fileID: 1873713022286238147} - - {fileID: 7192177292142583559} - - {fileID: 4897547941833524288} - - {fileID: 8604136166263445541} - m_Father: {fileID: 7985839699733920127} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2495143682249491854 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 715997354749954831} - m_Mesh: {fileID: 9186633843763367028, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!23 &2245955601047903060 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 715997354749954831} - 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: -1502669387472542646, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: 1038712434395320081, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: 7874494369389819107, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - 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!114 &1405199824806720019 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 715997354749954831} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 3 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &4649600997511375500 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 715997354749954831} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &195162072254422348 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 715997354749954831} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &8399223061737228146 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 715997354749954831} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 9186633843763367028, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!1 &758642621123103939 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4931104941697645527} - - component: {fileID: 5937911936857187604} - - component: {fileID: 7235357282525025337} - m_Layer: 11 - m_Name: Cube (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4931104941697645527 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 758642621123103939} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1063, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2030721017903628721} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5937911936857187604 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 758642621123103939} - 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!114 &7235357282525025337 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 758642621123103939} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &818153432392427664 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7426908937577117031} - - component: {fileID: 8365414614699390914} - - component: {fileID: 2862634015959262360} - m_Layer: 11 - m_Name: Cube (26) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7426908937577117031 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 818153432392427664} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1163, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6250456386054099378} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8365414614699390914 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 818153432392427664} - 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!114 &2862634015959262360 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 818153432392427664} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &906487964991768281 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3492390900433929882} - - component: {fileID: 8311140366724911457} - - component: {fileID: 9187065040354044388} - m_Layer: 11 - m_Name: Cube (55) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3492390900433929882 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 906487964991768281} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1063, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2843514534166850526} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8311140366724911457 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 906487964991768281} - 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!114 &9187065040354044388 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 906487964991768281} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &998177369747919376 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9082030564927350913} - - component: {fileID: 2334515337406881319} - - component: {fileID: 8146234754312472228} - m_Layer: 11 - m_Name: Cube (40) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9082030564927350913 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 998177369747919376} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0265, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3487236524303728909} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2334515337406881319 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 998177369747919376} - 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!114 &8146234754312472228 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 998177369747919376} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1125014815038140557 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9002156462410557672} - - component: {fileID: 7128533033208527027} - - component: {fileID: 248114990364597783} - m_Layer: 11 - m_Name: Cube (44) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9002156462410557672 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1125014815038140557} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.14682, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3487236524303728909} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7128533033208527027 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1125014815038140557} - 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!114 &248114990364597783 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1125014815038140557} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1161549712492504599 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 499591348555937248} - - component: {fileID: 4323113563746897642} - - component: {fileID: 3664548987470462672} - m_Layer: 11 - m_Name: Cube (58) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &499591348555937248 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1161549712492504599} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2352, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2843514534166850526} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4323113563746897642 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1161549712492504599} - 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!114 &3664548987470462672 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1161549712492504599} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1192997106662942656 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7456674707684018191} - - component: {fileID: 4033841285999317410} - - component: {fileID: 6434214635406479221} - m_Layer: 11 - m_Name: Cube (29) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7456674707684018191 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1192997106662942656} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.016699987, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6250456386054099378} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4033841285999317410 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1192997106662942656} - 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!114 &6434214635406479221 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1192997106662942656} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1529441972278425257 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7810565250742824366} - - component: {fileID: 1731001812359188240} - - component: {fileID: 809856981908383051} - m_Layer: 11 - m_Name: Cube (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7810565250742824366 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1529441972278425257} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0631, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2030721017903628721} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1731001812359188240 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1529441972278425257} - 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!114 &809856981908383051 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1529441972278425257} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1559773935564804927 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9177517349566547445} - - component: {fileID: 8879799180056261184} - - component: {fileID: 7658628356511956357} - m_Layer: 11 - m_Name: Cube (52) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &9177517349566547445 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1559773935564804927} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0265, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2843514534166850526} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8879799180056261184 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1559773935564804927} - 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!114 &7658628356511956357 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1559773935564804927} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1756241857636553321 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5533743904640211345} - - component: {fileID: 9121320457692095589} - - component: {fileID: 1424388542305554799} - m_Layer: 8 - m_Name: Object001 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5533743904640211345 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1756241857636553321} - m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} - m_LocalPosition: {x: 0.16413987, y: -0.09, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7929538642326665673} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &9121320457692095589 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1756241857636553321} - m_Mesh: {fileID: -3292925553009838691, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!23 &1424388542305554799 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1756241857636553321} - 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: 1368039103165038143, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: -5956578104803850452, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: 9077612666303962245, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: -6307277589567570940, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: -8757356216087587297, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: 4058342625295081725, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - 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!1 &1768793382524545471 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4897547941833524288} - - component: {fileID: 435748917676235078} - - component: {fileID: 7478915783437486919} - m_Layer: 11 - m_Name: Cube (34) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4897547941833524288 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1768793382524545471} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2337, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 690497867503049781} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &435748917676235078 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1768793382524545471} - 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!114 &7478915783437486919 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1768793382524545471} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1875701674419549955 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3560509873774827277} - - component: {fileID: 6930991821562872770} - - component: {fileID: 7063441655466347020} - m_Layer: 11 - m_Name: Cube (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3560509873774827277 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1875701674419549955} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1163, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4968668644313055877} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6930991821562872770 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1875701674419549955} - 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!114 &7063441655466347020 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1875701674419549955} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1880318998919516807 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7309337958764571160} - - component: {fileID: 2694751064953679532} - - component: {fileID: 831172689036418326} - m_Layer: 11 - m_Name: Cube (49) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7309337958764571160 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1880318998919516807} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1626, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2843514534166850526} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2694751064953679532 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1880318998919516807} - 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!114 &831172689036418326 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1880318998919516807} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &1961428022674261282 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4291632917048529658} - m_Layer: 8 - m_Name: "\u951A\u70B9" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4291632917048529658 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1961428022674261282} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -0.13499999, z: 0.3} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7985839699733920127} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2031367694487617717 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7192177292142583559} - - component: {fileID: 5235152950726726955} - - component: {fileID: 6627321094030006862} - m_Layer: 11 - m_Name: Cube (33) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7192177292142583559 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2031367694487617717} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1888, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 690497867503049781} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5235152950726726955 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2031367694487617717} - 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!114 &6627321094030006862 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2031367694487617717} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2080597636647590534 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3567498352346708464} - - component: {fileID: 2253036145271144918} - - component: {fileID: 2553607834862999825} - m_Layer: 11 - m_Name: Cube (42) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3567498352346708464 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2080597636647590534} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0631, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3487236524303728909} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2253036145271144918 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2080597636647590534} - 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!114 &2553607834862999825 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2080597636647590534} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2171184207757861467 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 400186809033972629} - - component: {fileID: 2811562479655400529} - - component: {fileID: 5080448453840629304} - m_Layer: 11 - m_Name: Cube (28) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &400186809033972629 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2171184207757861467} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0265, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 690497867503049781} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2811562479655400529 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2171184207757861467} - 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!114 &5080448453840629304 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2171184207757861467} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2283732020061915560 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1272879139123622427} - - component: {fileID: 3779656346422628281} - - component: {fileID: 5488158663292318451} - m_Layer: 11 - m_Name: Cube (24) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1272879139123622427 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2283732020061915560} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20305, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 690497867503049781} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3779656346422628281 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2283732020061915560} - 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!114 &5488158663292318451 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2283732020061915560} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2413525395725344945 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6624345951155678389} - - component: {fileID: 2555420395518967429} - - component: {fileID: 4034976258636200308} - m_Layer: 11 - m_Name: Cube (48) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6624345951155678389 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2413525395725344945} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.2059, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2843514534166850526} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2555420395518967429 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2413525395725344945} - 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!114 &4034976258636200308 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2413525395725344945} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2472218648273012139 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4372924154736937050} - - component: {fileID: 2548534839175907278} - - component: {fileID: 6551184783874413947} - m_Layer: 11 - m_Name: Cube (32) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4372924154736937050 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2472218648273012139} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1456, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6250456386054099378} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2548534839175907278 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2472218648273012139} - 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!114 &6551184783874413947 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2472218648273012139} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &2809333707235024424 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 993544052907709775} - - component: {fileID: 352878787138999387} - - component: {fileID: 3038107272918399948} - m_Layer: 8 - m_Name: 93 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &993544052907709775 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2809333707235024424} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0, y: 0.000000007450581, z: -0.178} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 7985839699733920127} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &352878787138999387 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2809333707235024424} - m_Mesh: {fileID: 907094073435759743, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!23 &3038107272918399948 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2809333707235024424} - 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: -5598141350581169709, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: 3925418980499852262, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: 1368039103165038143, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: -5956578104803850452, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: -6307277589567570940, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: -6257702196253466788, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: 9077612666303962245, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - 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!1 &2893957487267327282 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3487236524303728909} - - component: {fileID: 4156407428021392834} - - component: {fileID: 5059496626929743460} - - component: {fileID: 9073248035755357437} - - component: {fileID: 105983668612103932} - - component: {fileID: 5385922760381624528} - - component: {fileID: 5181028242567912549} - m_Layer: 8 - m_Name: Object007 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3487236524303728909 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2893957487267327282} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.03692468, y: 0.15764228, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2565197730508992218} - - {fileID: 6565679860297007716} - - {fileID: 4112281349838223846} - - {fileID: 7308123238299915442} - - {fileID: 9082030564927350913} - - {fileID: 1100173511876397677} - - {fileID: 3567498352346708464} - - {fileID: 1267784912578432167} - - {fileID: 9002156462410557672} - - {fileID: 9092494819068973652} - - {fileID: 687312274734506314} - - {fileID: 3014491997328545909} - m_Father: {fileID: 7985839699733920127} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4156407428021392834 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2893957487267327282} - m_Mesh: {fileID: 7733717212360752527, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!23 &5059496626929743460 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2893957487267327282} - 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: -1502669387472542646, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: 1038712434395320081, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: 7874494369389819107, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - 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!114 &9073248035755357437 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2893957487267327282} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 1 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &105983668612103932 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2893957487267327282} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5385922760381624528 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2893957487267327282} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &5181028242567912549 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2893957487267327282} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 7733717212360752527, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!1 &2897340181264297773 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2823657403355344836} - - component: {fileID: 5492176924707881472} - - component: {fileID: 5415152209669885036} - m_Layer: 11 - m_Name: Cube (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2823657403355344836 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2897340181264297773} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.15896, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4968668644313055877} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5492176924707881472 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2897340181264297773} - 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!114 &5415152209669885036 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2897340181264297773} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3014191241152112544 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 665513139285725587} - - component: {fileID: 8710629859122073682} - - component: {fileID: 3532299586323036805} - m_Layer: 11 - m_Name: Cube (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &665513139285725587 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3014191241152112544} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1456, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2030721017903628721} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8710629859122073682 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3014191241152112544} - 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!114 &3532299586323036805 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3014191241152112544} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3033079238196673075 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 115186517417916482} - - component: {fileID: 857702355053930287} - - component: {fileID: 5596837720189379362} - m_Layer: 11 - m_Name: Cube (30) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &115186517417916482 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3033079238196673075} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.06216, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 690497867503049781} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &857702355053930287 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3033079238196673075} - 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!114 &5596837720189379362 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3033079238196673075} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3304703112703967601 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2280098867873525029} - - component: {fileID: 2968741728804939132} - - component: {fileID: 6172796898719595259} - m_Layer: 11 - m_Name: Cube (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2280098867873525029 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3304703112703967601} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2352, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4968668644313055877} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2968741728804939132 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3304703112703967601} - 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!114 &6172796898719595259 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3304703112703967601} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3434947315933490192 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3014491997328545909} - - component: {fileID: 1332383680783242731} - - component: {fileID: 1764982349977477423} - m_Layer: 11 - m_Name: Cube (47) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3014491997328545909 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3434947315933490192} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2736, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3487236524303728909} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1332383680783242731 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3434947315933490192} - 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!114 &1764982349977477423 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3434947315933490192} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3487202677350361335 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 687312274734506314} - - component: {fileID: 2943345947411767498} - - component: {fileID: 5260091723358799380} - m_Layer: 11 - m_Name: Cube (46) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &687312274734506314 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3487202677350361335} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.23325, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3487236524303728909} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2943345947411767498 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3487202677350361335} - 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!114 &5260091723358799380 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3487202677350361335} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3496316765704490869 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8232358216909735043} - - component: {fileID: 1497931061329003627} - - component: {fileID: 4807601891972856199} - m_Layer: 11 - m_Name: Cube (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8232358216909735043 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3496316765704490869} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0265, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2030721017903628721} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1497931061329003627 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3496316765704490869} - 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!114 &4807601891972856199 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3496316765704490869} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3604409967269938331 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5849006992482936260} - - component: {fileID: 3741727508355373727} - - component: {fileID: 5440729553908280831} - m_Layer: 11 - m_Name: Cube (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5849006992482936260 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3604409967269938331} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1063, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4968668644313055877} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3741727508355373727 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3604409967269938331} - 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!114 &5440729553908280831 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3604409967269938331} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3723050559934821883 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2929423708018043583} - - component: {fileID: 8937963845667610089} - - component: {fileID: 6265873260274511750} - m_Layer: 11 - m_Name: Cube (34) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2929423708018043583 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3723050559934821883} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.23286, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6250456386054099378} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8937963845667610089 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3723050559934821883} - 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!114 &6265873260274511750 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3723050559934821883} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &3980032600592231856 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4968668644313055877} - - component: {fileID: 1924484218670048641} - - component: {fileID: 1789474967440189440} - - component: {fileID: 6803976382322845666} - - component: {fileID: 6065190012576019375} - - component: {fileID: 5438810910895348888} - - component: {fileID: 1022451023283812415} - m_Layer: 8 - m_Name: Object002 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4968668644313055877 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3980032600592231856} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.03692468, y: 0.017722623, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 8791691444528214189} - - {fileID: 2823657403355344836} - - {fileID: 3560509873774827277} - - {fileID: 2415266892623021978} - - {fileID: 6886833320277855344} - - {fileID: 4832230640689908191} - - {fileID: 4982526280397069510} - - {fileID: 5849006992482936260} - - {fileID: 6518188934145057365} - - {fileID: 3518640256391700188} - - {fileID: 2280098867873525029} - - {fileID: 8576748109724740658} - m_Father: {fileID: 7985839699733920127} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &1924484218670048641 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3980032600592231856} - m_Mesh: {fileID: -3996760141626369306, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!23 &1789474967440189440 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3980032600592231856} - 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: -1502669387472542646, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: 1038712434395320081, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: 7874494369389819107, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - 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!114 &6803976382322845666 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3980032600592231856} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 6 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &6065190012576019375 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3980032600592231856} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5438810910895348888 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3980032600592231856} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &1022451023283812415 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3980032600592231856} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -3996760141626369306, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!1 &3980440860745781098 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8604136166263445541} - - component: {fileID: 1261283428876239392} - - component: {fileID: 5038326668272420604} - m_Layer: 11 - m_Name: Cube (35) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8604136166263445541 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3980440860745781098} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.27468, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 690497867503049781} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1261283428876239392 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3980440860745781098} - 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!114 &5038326668272420604 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3980440860745781098} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4124077834045893208 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8900158807971350997} - - component: {fileID: 7245678658412696839} - - component: {fileID: 4087356709255991835} - m_Layer: 11 - m_Name: Cube (27) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8900158807971350997 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4124077834045893208} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0731, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 690497867503049781} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7245678658412696839 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4124077834045893208} - 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!114 &4087356709255991835 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4124077834045893208} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4197853948837193419 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1264109455298425405} - - component: {fileID: 8442978389883973169} - - component: {fileID: 8576768719164273551} - m_Layer: 11 - m_Name: Cube (51) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1264109455298425405 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4197853948837193419} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0731, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2843514534166850526} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8442978389883973169 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4197853948837193419} - 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!114 &8576768719164273551 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4197853948837193419} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4198789018355414635 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2843514534166850526} - - component: {fileID: 6762287712561118737} - - component: {fileID: 97089063237690169} - - component: {fileID: 8484497965192505362} - - component: {fileID: 5650872099958478970} - - component: {fileID: 7925169241841412701} - - component: {fileID: 8659361137983687265} - m_Layer: 8 - m_Name: Object008 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2843514534166850526 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4198789018355414635} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.03692468, y: 0.12965834, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 6624345951155678389} - - {fileID: 7309337958764571160} - - {fileID: 8960891878404970850} - - {fileID: 1264109455298425405} - - {fileID: 9177517349566547445} - - {fileID: 1747803418375722711} - - {fileID: 1341946685177088903} - - {fileID: 3492390900433929882} - - {fileID: 2869349057964028142} - - {fileID: 1213638415043775299} - - {fileID: 499591348555937248} - - {fileID: 4256365407639320120} - m_Father: {fileID: 7985839699733920127} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &6762287712561118737 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4198789018355414635} - m_Mesh: {fileID: -7647463442239531939, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!23 &97089063237690169 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4198789018355414635} - 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: -1502669387472542646, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: 1038712434395320081, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: 7874494369389819107, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - 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!114 &8484497965192505362 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4198789018355414635} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 2 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &5650872099958478970 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4198789018355414635} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &7925169241841412701 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4198789018355414635} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &8659361137983687265 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4198789018355414635} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -7647463442239531939, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!1 &4334096114791035535 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2030721017903628721} - - component: {fileID: 506595538949319520} - - component: {fileID: 3341088382990221314} - - component: {fileID: 8514628176398386847} - - component: {fileID: 3065500123157430962} - - component: {fileID: 1800708156513144809} - - component: {fileID: 4006355451487963163} - m_Layer: 8 - m_Name: Object004 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2030721017903628721 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4334096114791035535} - m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0.03692468, y: 0.045706555, z: -0.067287266} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 5781745820428671374} - - {fileID: 5662656140857727061} - - {fileID: 8796523870539643722} - - {fileID: 5354334670249010356} - - {fileID: 8232358216909735043} - - {fileID: 7910044945242368820} - - {fileID: 7810565250742824366} - - {fileID: 4931104941697645527} - - {fileID: 665513139285725587} - - {fileID: 4287226051761798884} - - {fileID: 3131370277238640182} - - {fileID: 1877212033052896162} - m_Father: {fileID: 7985839699733920127} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &506595538949319520 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4334096114791035535} - m_Mesh: {fileID: -8113768720884857512, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!23 &3341088382990221314 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4334096114791035535} - 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: -1502669387472542646, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: 1038712434395320081, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - - {fileID: 7874494369389819107, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} - 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!114 &8514628176398386847 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4334096114791035535} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 3 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: 5 - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: - occupyNum: - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &3065500123157430962 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4334096114791035535} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &1800708156513144809 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4334096114791035535} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 116065a4ce5d3ea40810a9d682afd2cb, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - My_magnifyState: 0 - empty: [] - TransparentGlow_Shader: {fileID: 0} - yiDong_pos: {x: 2.1, y: 0, z: 0} - fangDa_rot: {x: 0, y: -90, z: 0} ---- !u!64 &4006355451487963163 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4334096114791035535} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: -8113768720884857512, guid: ff1cca70721ab7e46a682017cb4f6ac0, type: 3} ---- !u!1 &4644451600037802432 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5781745820428671374} - - component: {fileID: 5953871312361050609} - - component: {fileID: 3859244819564414108} - m_Layer: 11 - m_Name: Cube (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5781745820428671374 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4644451600037802432} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20189, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2030721017903628721} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5953871312361050609 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4644451600037802432} - 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!114 &3859244819564414108 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4644451600037802432} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4754445672952845552 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3131370277238640182} - - component: {fileID: 5957091395146411011} - - component: {fileID: 4185834982088515978} - m_Layer: 11 - m_Name: Cube (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3131370277238640182 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4754445672952845552} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.23314, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2030721017903628721} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5957091395146411011 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4754445672952845552} - 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!114 &4185834982088515978 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4754445672952845552} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 11 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4779395560260961662 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8576748109724740658} - - component: {fileID: 7280667982912676003} - - component: {fileID: 1348243274371382264} - m_Layer: 11 - m_Name: Cube (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8576748109724740658 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4779395560260961662} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.2784, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4968668644313055877} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7280667982912676003 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4779395560260961662} - 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!114 &1348243274371382264 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4779395560260961662} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4822296853894354145 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8796523870539643722} - - component: {fileID: 8309447938638300533} - - component: {fileID: 8169494936648986731} - m_Layer: 11 - m_Name: Cube (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8796523870539643722 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4822296853894354145} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.11555, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2030721017903628721} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8309447938638300533 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4822296853894354145} - 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!114 &8169494936648986731 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4822296853894354145} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4892559819889117703 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6518188934145057365} - - component: {fileID: 8273101350959522761} - - component: {fileID: 2242711319660120401} - m_Layer: 11 - m_Name: Cube (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6518188934145057365 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4892559819889117703} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1456, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4968668644313055877} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8273101350959522761 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4892559819889117703} - 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!114 &2242711319660120401 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4892559819889117703} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &4913848494620531314 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8960891878404970850} - - component: {fileID: 7868614754912892813} - - component: {fileID: 5362857925557995077} - m_Layer: 11 - m_Name: Cube (50) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8960891878404970850 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4913848494620531314} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.1163, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2843514534166850526} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7868614754912892813 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4913848494620531314} - 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!114 &5362857925557995077 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4913848494620531314} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5031875385987304746 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8791691444528214189} - - component: {fileID: 6337039267423072855} - - component: {fileID: 8597103564912100229} - m_Layer: 11 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8791691444528214189 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5031875385987304746} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20189, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4968668644313055877} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6337039267423072855 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5031875385987304746} - 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!114 &8597103564912100229 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5031875385987304746} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5097891463594475450 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4832230640689908191} - - component: {fileID: 498316203313163079} - - component: {fileID: 183301079249416670} - m_Layer: 11 - m_Name: Cube (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4832230640689908191 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5097891463594475450} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0167, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4968668644313055877} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &498316203313163079 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5097891463594475450} - 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!114 &183301079249416670 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5097891463594475450} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5218614216697101500 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7910044945242368820} - - component: {fileID: 2744400383886870980} - - component: {fileID: 8022754355142866236} - m_Layer: 11 - m_Name: Cube (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7910044945242368820 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5218614216697101500} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.016699994, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2030721017903628721} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2744400383886870980 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5218614216697101500} - 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!114 &8022754355142866236 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5218614216697101500} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5238199378374935832 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4787820074919895382} - - component: {fileID: 1819770989657839194} - - component: {fileID: 9083852312717901684} - m_Layer: 11 - m_Name: Cube (31) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4787820074919895382 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5238199378374935832} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1048, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6250456386054099378} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1819770989657839194 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5238199378374935832} - 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!114 &9083852312717901684 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5238199378374935832} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 8 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5244745021947335865 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4287226051761798884} - - component: {fileID: 9146530200770375748} - - component: {fileID: 8686985241331698523} - m_Layer: 11 - m_Name: Cube (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4287226051761798884 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5244745021947335865} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1888, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2030721017903628721} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9146530200770375748 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5244745021947335865} - 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!114 &8686985241331698523 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5244745021947335865} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5306258075670196129 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8406717354425533851} - - component: {fileID: 1263429645123842523} - - component: {fileID: 4338754651018306723} - m_Layer: 11 - m_Name: Cube (26) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8406717354425533851 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5306258075670196129} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.11630003, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 690497867503049781} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1263429645123842523 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5306258075670196129} - 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!114 &4338754651018306723 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5306258075670196129} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 3 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5479678745921683042 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7929538642326665673} - m_Layer: 0 - m_Name: "\u524D\u76D6" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7929538642326665673 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5479678745921683042} - m_LocalRotation: {x: -0, y: -0.7071068, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0.09000001, z: -0.1766087} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 5533743904640211345} - m_Father: {fileID: 7985839699733920127} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &5884292661154428233 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6565679860297007716} - - component: {fileID: 2040585322158209098} - - component: {fileID: 2943946927310121345} - m_Layer: 11 - m_Name: Cube (37) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6565679860297007716 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5884292661154428233} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.15849, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3487236524303728909} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2040585322158209098 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5884292661154428233} - 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!114 &2943946927310121345 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5884292661154428233} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &5889260392801935664 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8121656030685952950} - - component: {fileID: 5666512344539242060} - - component: {fileID: 5558671859158502846} - m_Layer: 11 - m_Name: Cube (27) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8121656030685952950 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5889260392801935664} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0731, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6250456386054099378} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5666512344539242060 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5889260392801935664} - 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!114 &5558671859158502846 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5889260392801935664} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6155054637687609577 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2565197730508992218} - - component: {fileID: 6655321439756578649} - - component: {fileID: 229949976608896822} - m_Layer: 11 - m_Name: Cube (36) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2565197730508992218 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6155054637687609577} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20322, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3487236524303728909} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6655321439756578649 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6155054637687609577} - 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!114 &229949976608896822 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6155054637687609577} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6373165318376261968 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4256365407639320120} - - component: {fileID: 6185547217960461938} - - component: {fileID: 5534491047452598114} - m_Layer: 11 - m_Name: Cube (59) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4256365407639320120 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6373165318376261968} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.27840018, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2843514534166850526} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6185547217960461938 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6373165318376261968} - 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!114 &5534491047452598114 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6373165318376261968} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6414177811283891252 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6694574708040152799} - - component: {fileID: 7393016396719859152} - - component: {fileID: 3698155230655898512} - m_Layer: 11 - m_Name: Cube (24) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6694574708040152799 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6414177811283891252} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.20011, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6250456386054099378} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7393016396719859152 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6414177811283891252} - 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!114 &3698155230655898512 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6414177811283891252} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 1 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6668339676409779447 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1100173511876397677} - - component: {fileID: 1010884538002135431} - - component: {fileID: 7933740302803366068} - m_Layer: 11 - m_Name: Cube (41) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1100173511876397677 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6668339676409779447} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0167, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3487236524303728909} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1010884538002135431 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6668339676409779447} - 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!114 &7933740302803366068 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6668339676409779447} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6780015851484780809 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6886833320277855344} - - component: {fileID: 3898617154809400771} - - component: {fileID: 3086935102214390917} - m_Layer: 11 - m_Name: Cube (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6886833320277855344 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6780015851484780809} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0265, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4968668644313055877} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3898617154809400771 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6780015851484780809} - 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!114 &3086935102214390917 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6780015851484780809} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6866624024454054022 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4554560322039088918} - - component: {fileID: 3526679990451234897} - - component: {fileID: 6135222058785762572} - m_Layer: 11 - m_Name: Cube (33) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4554560322039088918 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6866624024454054022} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1888, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6250456386054099378} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3526679990451234897 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6866624024454054022} - 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!114 &6135222058785762572 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6866624024454054022} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &6929945226890760637 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2824984015431333990} - - component: {fileID: 9117609098807032579} - - component: {fileID: 7753716271920984190} - m_Layer: 11 - m_Name: Cube (28) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2824984015431333990 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6929945226890760637} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0265, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6250456386054099378} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &9117609098807032579 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6929945226890760637} - 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!114 &7753716271920984190 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6929945226890760637} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 5 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7085484464312117462 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3278302182662481622} - - component: {fileID: 7047075477411274117} - - component: {fileID: 8220827415066116485} - m_Layer: 11 - m_Name: Cube (25) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3278302182662481622 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7085484464312117462} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.15711, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6250456386054099378} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7047075477411274117 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7085484464312117462} - 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!114 &8220827415066116485 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7085484464312117462} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7120583014032726750 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7308123238299915442} - - component: {fileID: 8182964881451007372} - - component: {fileID: 134129418644204878} - m_Layer: 11 - m_Name: Cube (39) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7308123238299915442 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7120583014032726750} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0731, y: -0.0142, z: -0.0038} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 3487236524303728909} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &8182964881451007372 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7120583014032726750} - 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!114 &134129418644204878 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7120583014032726750} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7320801623191217093 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7985839699733920127} - - component: {fileID: 8683130657752368270} - - component: {fileID: 2877330987362103639} - - component: {fileID: 2109556429773333358} - - component: {fileID: 5899967243055048216} - - component: {fileID: -4919292246614699412} - m_Layer: 8 - m_Name: 93 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7985839699733920127 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7320801623191217093} - m_LocalRotation: {x: 0, y: 0.7071068, 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: - - {fileID: 993544052907709775} - - {fileID: 7929538642326665673} - - {fileID: 4968668644313055877} - - {fileID: 2030721017903628721} - - {fileID: 690497867503049781} - - {fileID: 6250456386054099378} - - {fileID: 3487236524303728909} - - {fileID: 2843514534166850526} - - {fileID: 4291632917048529658} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!114 &8683130657752368270 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7320801623191217093} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1fd81313f40351c42bfdc5c8c418e56a, type: 3} - m_Name: - m_EditorClassIdentifier: - listTargets: [] - frames: [] - PerTier: 42 - PerRow: 5 - volume: 4 - isExit: 0 - isClicked: 0 - isTarget: 0 - isplace: 0 - canPut: 0 ---- !u!114 &2877330987362103639 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7320801623191217093} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11640fdcb68030044a769500d95e1506, type: 3} - m_Name: - m_EditorClassIdentifier: - deviceList: - id: - deviceName: - deviceCode: - type: 2 - typeStr: - deviceType: 1 - deviceTypeStr: - rackId: - shelfId: - slotId: - devicePosition: - machineModel: - status: - conDeviceName: - rackType: - openFlag: - backDoorFlag: - modelNum: 93 - occupyNum: 4 - residueNum: - operationTime: - directorName: - phone: - manufacturer: - powerProperties: - maintenanceUnit: - machineFrameHigh: - machineFrameWide: - machineFrameThick: - slotNum: - slotSort: - installMethod: - affiliationFrame: - parentSlotName: - slotType: - occupyStatus: - affiliationSlot: - portNum: - cardFunction: - cardType: - runStatus: - tmsId: - remark: - createTime: - createName: ---- !u!114 &2109556429773333358 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7320801623191217093} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bdd6e5953a48524db661ab7d81d57d0, type: 3} - m_Name: - m_EditorClassIdentifier: - tmsAlarmLists: [] ---- !u!114 &5899967243055048216 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7320801623191217093} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65c073f1f8dbbe64da03bf56cea22ae7, type: 3} - m_Name: - m_EditorClassIdentifier: - isTransparentGlow: 0 - meshRenderers: [] - materials: [] - empty: [] - TransparentGlow_Shader: {fileID: 4800000, guid: 132fbf2263a23854080e8a5c3cec824c, - type: 3} - TransparentGlow_Shader_half: {fileID: 0} - original_jigui: [] - original_shebei: [] - search_u_wei: 0 - is_jigui: 0 ---- !u!114 &-4919292246614699412 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7320801623191217093} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bc0a67b27552c54e893bf2db7023587, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 4 - selfIcon: {fileID: 21300000, guid: 86330196fca221840a59954e7d57e6fc, type: 3} ---- !u!1 &7522310221411527342 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1873713022286238147} - - component: {fileID: 3247257132413383171} - - component: {fileID: 4814867818676178728} - m_Layer: 11 - m_Name: Cube (32) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1873713022286238147 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7522310221411527342} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1456, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 690497867503049781} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3247257132413383171 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7522310221411527342} - 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!114 &4814867818676178728 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7522310221411527342} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 9 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7555429781126249074 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1341946685177088903} - - component: {fileID: 3320273932948358443} - - component: {fileID: 7299720218045968636} - m_Layer: 11 - m_Name: Cube (54) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1341946685177088903 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7555429781126249074} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0631, y: -0.0142, z: -0.0043} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2843514534166850526} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3320273932948358443 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7555429781126249074} - 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!114 &7299720218045968636 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7555429781126249074} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7751314911140691696 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5662656140857727061} - - component: {fileID: 775494663061767074} - - component: {fileID: 873350311633784608} - m_Layer: 11 - m_Name: Cube (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5662656140857727061 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7751314911140691696} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.15762, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2030721017903628721} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &775494663061767074 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7751314911140691696} - 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!114 &873350311633784608 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7751314911140691696} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &7854865353017316699 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6440838592777488212} - - component: {fileID: 2799618653624532645} - - component: {fileID: 3486655555722793283} - m_Layer: 11 - m_Name: Cube (29) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6440838592777488212 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7854865353017316699} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0167, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 690497867503049781} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2799618653624532645 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7854865353017316699} - 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!114 &3486655555722793283 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7854865353017316699} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 6 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8277866692390054294 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2415266892623021978} - - component: {fileID: 2356346181501215354} - - component: {fileID: 8830837194589141061} - m_Layer: 11 - m_Name: Cube (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2415266892623021978 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8277866692390054294} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.0677, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4968668644313055877} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2356346181501215354 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8277866692390054294} - 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!114 &8830837194589141061 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8277866692390054294} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8349686849659854606 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1323693300599828324} - - component: {fileID: 4587698930150753271} - - component: {fileID: 5349583608359573667} - m_Layer: 11 - m_Name: Cube (35) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1323693300599828324 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8349686849659854606} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.27332, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6250456386054099378} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &4587698930150753271 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8349686849659854606} - 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!114 &5349583608359573667 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8349686849659854606} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8506294190943078688 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8733161950494529487} - - component: {fileID: 7343724337241630217} - - component: {fileID: 5379098431642660623} - m_Layer: 11 - m_Name: Cube (30) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8733161950494529487 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8506294190943078688} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.05975, y: -0.0142, z: -0.0026} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6250456386054099378} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7343724337241630217 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8506294190943078688} - 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!114 &5379098431642660623 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8506294190943078688} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8533585656163091796 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4982526280397069510} - - component: {fileID: 2291727303322341602} - - component: {fileID: 1369622246150162522} - m_Layer: 11 - m_Name: Cube (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4982526280397069510 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8533585656163091796} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.0631, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4968668644313055877} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &2291727303322341602 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8533585656163091796} - 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!114 &1369622246150162522 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8533585656163091796} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 7 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8566514115893953637 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1877212033052896162} - - component: {fileID: 7745324877216562731} - - component: {fileID: 7649210291509691995} - m_Layer: 11 - m_Name: Cube (23) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1877212033052896162 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8566514115893953637} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.27415, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2030721017903628721} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &7745324877216562731 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8566514115893953637} - 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!114 &7649210291509691995 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8566514115893953637} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 12 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8609604374608147354 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5354334670249010356} - - component: {fileID: 5840276091993663180} - - component: {fileID: 5000562886094394770} - m_Layer: 11 - m_Name: Cube (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5354334670249010356 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8609604374608147354} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.07015, y: -0.0142, z: -0.004} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2030721017903628721} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &5840276091993663180 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8609604374608147354} - 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!114 &5000562886094394770 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8609604374608147354} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 4 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8726247893469288025 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6591575572600157444} - - component: {fileID: 1441521413107531692} - - component: {fileID: 100859078695926732} - m_Layer: 11 - m_Name: Cube (25) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6591575572600157444 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8726247893469288025} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.15837, y: -0.0142, z: -0.0034} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 690497867503049781} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1441521413107531692 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8726247893469288025} - 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!114 &100859078695926732 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8726247893469288025} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 2 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: ---- !u!1 &8848832328809510552 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3518640256391700188} - - component: {fileID: 6847610944272253932} - - component: {fileID: 5899688480124028366} - m_Layer: 11 - m_Name: Cube (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3518640256391700188 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8848832328809510552} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.1888, y: -0.0142, z: -0.0035} - m_LocalScale: {x: 0.025680002, y: 0.01659, z: 0.016560001} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4968668644313055877} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &6847610944272253932 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8848832328809510552} - 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!114 &5899688480124028366 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8848832328809510552} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dda2647c5b2efd54ca9422f5e246bd75, type: 3} - m_Name: - m_EditorClassIdentifier: - hight: {fileID: 0} - portList: - id: - port: - portCode: - portName: - portType: - portPosition: 10 - deviceId: - deviceName: - portModel: - status: 0 - conDevice: - conDeviceName: - conPort: - cableName: - cableGroupName: - remark: - createTime: - createName: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/93.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/93.prefab.meta deleted file mode 100644 index b77e966f8..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/93.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: b875a0cafa68f8f45915852bc55fb527 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/prefab/老模型/94.prefab.meta b/GQ_URP/GQ/Assets/prefab/老模型/94.prefab.meta deleted file mode 100644 index 77c8dd4a5..000000000 --- a/GQ_URP/GQ/Assets/prefab/老模型/94.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 02828c70f665eb24482eb9aac05a00d8 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/script/GameManager.cs b/GQ_URP/GQ/Assets/script/GameManager.cs index 898071065..0b32b8d6a 100644 --- a/GQ_URP/GQ/Assets/script/GameManager.cs +++ b/GQ_URP/GQ/Assets/script/GameManager.cs @@ -775,38 +775,11 @@ public class GameManager : MonoBehaviour go.transform.SetParent(item.transform.Find("U位/" + U)); //模型错误微调 - if (modelNum == "1" || modelNum == "14" || modelNum == "15" || modelNum == "83") - { - MoveParentAndChildren(go.transform, new Vector3(-0.25f, 0, 0)); - } - else if (modelNum == "18") - { - MoveParentAndChildren(go.transform, new Vector3(-0.31f, 0, 0), false); - } - else if (modelNum == "19") - { - MoveParentAndChildren(go.transform, new Vector3(-0.27f, 0f, -0), false); - } - else if (modelNum == "24" || modelNum == "34") - { - MoveParentAndChildren(go.transform, new Vector3(-0.4f, 0f, -0), false); - } - else if (modelNum == "6" || modelNum == "7" || modelNum == "20" || modelNum == "21" || modelNum == "91" || modelNum == "92" || modelNum == "93") - { - MoveParentAndChildren(go.transform, new Vector3(-0.163f, 0, 0), false); - } - else if (modelNum == "81") - { - MoveParentAndChildren(go.transform, new Vector3(-0.17f, 0f, 0f), false); - } - else if (modelNum == "95" || modelNum == "96" || modelNum == "97") - { - MoveParentAndChildren(go.transform, new Vector3(-0.09f, 0, 0)); - } + Model_error(modelNum, go); } catch (Exception e) { - Debug.LogWarning("模型生成错误:" + item.name + "\n" + e.Message + "\n" + e.StackTrace); + Debug.LogError("模型生成错误:" + item.name + "\n" + e.Message + "\n" + e.StackTrace); break; } } @@ -2235,6 +2208,74 @@ public class GameManager : MonoBehaviour } } + + /// + /// 模型错误微调 + /// + /// + /// + + public void Model_error(string modelNum, GameObject go) + { + if (modelNum == "1" || modelNum == "14" || modelNum == "15" || modelNum == "83") + { + MoveParentAndChildren(go.transform, new Vector3(-0.25f, 0, 0)); + } + else if (modelNum == "4") + { + //MoveParentAndChildren(go.transform, new Vector3(-0.31f, 0, 0.1575f), false); + MoveParentAndChildren(go.transform, new Vector3(-0.244f, 0.1575f, 0), false); + } + else if (modelNum == "18") + { + MoveParentAndChildren(go.transform, new Vector3(-0.31f, 0, 0), false); + } + else if (modelNum == "19") + { + MoveParentAndChildren(go.transform, new Vector3(-0.27f, 0f, -0), false); + } + else if (modelNum == "24" || modelNum == "34") + { + MoveParentAndChildren(go.transform, new Vector3(-0.4f, 0f, -0), false); + } + else if (modelNum == "6" || modelNum == "7" || modelNum == "20" || modelNum == "21" || modelNum == "91" || modelNum == "92" || modelNum == "93") + { + MoveParentAndChildren(go.transform, new Vector3(-0.163f, 0, 0), false); + } + else if (modelNum == "36") + { + MoveParentAndChildren(go.transform, new Vector3(-0.248f, 0, 0), false); + } + else if (modelNum == "37" || modelNum == "41") + { + MoveParentAndChildren(go.transform, new Vector3(0, 0.0685f, 0), false); + } + else if (modelNum == "55") + { + MoveParentAndChildren(go.transform, new Vector3(-0.296f, 0f, 0f), false); + } + else if (modelNum == "77") + { + MoveParentAndChildren(go.transform, new Vector3(-0.208f, 0f, 0f), false); + } + else if (modelNum == "81") + { + MoveParentAndChildren(go.transform, new Vector3(-0.17f, 0f, 0f), false); + } + else if (modelNum == "86") + { + MoveParentAndChildren(go.transform, new Vector3(-0.212f, 0f, 0f), false); + } + else if (modelNum == "95" || modelNum == "96" || modelNum == "97") + { + MoveParentAndChildren(go.transform, new Vector3(-0.09f, 0, 0)); + } + else if (modelNum == "98") + { + MoveParentAndChildren(go.transform, new Vector3(-0.258f, 0, 0), false); + } + } + /// /// 微调模型移动 /// diff --git a/GQ_URP/GQ/Assets/script/LocalVideo.cs b/GQ_URP/GQ/Assets/script/LocalVideo.cs new file mode 100644 index 000000000..7ca473a4f --- /dev/null +++ b/GQ_URP/GQ/Assets/script/LocalVideo.cs @@ -0,0 +1,109 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + + +/// +/// Ƶ +/// +[AddComponentMenu("LocalVideo/Ƶ")] +public class LocalVideo : MonoBehaviour +{ + public static LocalVideo Inst; + public WebSocketT socketT = new WebSocketT(); + public List clickEventLens; + public List baseConfs; + + private void Awake() + { + Inst = this; + baseConfs = clickEventLens.Select(x => x.baseConf).ToList(); + } + // Start is called before the first frame update + void Start() + { + socketT.Init("ws://172.16.1.40:8081/websocket"); + } + + // Update is called once per frame + void Update() + { + + } + + public void Dispose(string message) + { + try + { + Root root = JsonConvert.DeserializeObject(message); + for (int i = 0; i < baseConfs.Count; i++) + { + if (baseConfs[i].conf1.isPicture && root.sourceName == baseConfs[i].conf1.LensName) + { + baseConfs[i].conf1.base64 = root.alarmPicture; + } + } + } + catch (Exception e) + { + Debug.Log("Ƶ" + e.StackTrace); + } + } + + + [System.Serializable] + public class Root + { + /// + /// + /// + public string alarmPicture; + /// + /// + /// + public string alarmPictureType; + /// + /// + /// + public string alarmIype; + /// + /// + /// + public string deviceld; + /// + /// + /// + public int id; + /// + /// + /// + public string reference; + /// + /// + /// + public string relatedid; + /// + /// + /// + public string seg; + /// + /// + /// + public string sourceld; + /// + /// + /// + public string sourceName; + /// + /// + /// + public string timeStamp; + /// + /// + /// + public string type; + } + +} diff --git a/GQ_URP/GQ/Assets/script/LocalVideo.cs.meta b/GQ_URP/GQ/Assets/script/LocalVideo.cs.meta new file mode 100644 index 000000000..d2c5d88b1 --- /dev/null +++ b/GQ_URP/GQ/Assets/script/LocalVideo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f16709e2118c365418b8ae047d293cd4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/script/SearchName1.cs b/GQ_URP/GQ/Assets/script/SearchName1.cs index 20864f9d0..a22f1db49 100644 --- a/GQ_URP/GQ/Assets/script/SearchName1.cs +++ b/GQ_URP/GQ/Assets/script/SearchName1.cs @@ -1,10 +1,8 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using TMPro; -using UnityEngine.UI; using DG.Tweening; -using UnityEngine.EventSystems; +using System.Collections.Generic; +using TMPro; +using UnityEngine; +using UnityEngine.UI; public class SearchName1 : MonoBehaviour { @@ -35,7 +33,7 @@ public class SearchName1 : MonoBehaviour private void Awake() { - + rectTransform = scrollView.GetComponent(); initialHeight = rectTransform.sizeDelta.y; rectTransform.sizeDelta = new Vector2(rectTransform.sizeDelta.x, 0); @@ -115,14 +113,14 @@ public class SearchName1 : MonoBehaviour if (searchText.text != "") { scrollView.SetActive(true); - Serach(searchText.text.Trim()); + Serach(searchText.text.Trim()); } }); } private void Update() { - + } /// diff --git a/GQ_URP/GQ/Assets/script/TOOL.cs b/GQ_URP/GQ/Assets/script/TOOL.cs index 4f470c21e..b6c3f50d0 100644 --- a/GQ_URP/GQ/Assets/script/TOOL.cs +++ b/GQ_URP/GQ/Assets/script/TOOL.cs @@ -32,7 +32,7 @@ public class TOOL : MonoBehaviour void Start() { //collider=GetComponent(); - //var t = CombineJSON.Base64StringToTexture("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAADa0lEQVRYw72WQWtdVRSFv73PfS99fUlVagWxpZqOFFpnFqE6rgT/QQYO/AvOHPk/xEHjxIkOFFsKjlQUUVEngpRgox1IsCI2Me+eu5eDc1/SlMg7t2IOnMG73Hf2umuts9eG411268sP13a2vsnvvPGygHFzXIW/unHtmafPnX3fiUvWjEjmAFM/huLpznc33ruwev7W7vZPl7Y+fZvIGTMDGC1ioHn3zasfTMa+5mZYZcWQmM1mrF68wvnnXqTd+Z1ff/iMvHMXJEJBSuXbFwGYLDW29tZHu4wbwyoRRIh7f8/4+rUr3P7+E/7a/hnzBrxB0aIuY14H4IQZTJYaTjQMAiCN+OXzDXb3ArMGcFCggOgyqT9sEQCzADfDHbwSgGGklJA7YRACJFCRp+vauQcWAkAITz4IAIB7KRaoAIBef4jc4pUeIATJBwIwSAkUQhK6D4B6BmolQArMRpip2gNG8UsXIroHGAgRA0wIKnS6Wz0DKu9LRzCA6NoWr2YgwFMieT0DcwChKD7QvL7KLciZVMtAIMwcBkrgLrooHgqBMCIMhZO7jHklA0gkTySPgQyomDCKBBHG6pObnDl1h618dZ4FLMyCIoGV7fU7JaOLIkEn6AKeeHSbazefhejqGZCEuWNOdRaYwJx9A6qXAYPpZES0M3zILUjmuNUDgNIz5gYsO4iAk0sj2tzSK7BYgkCY20PtLsq9VwRS8Nsfp3nlhW/purzvgcprWDphNQOClKwknwwJjODH2+f4+Ispl1/aq++EIZEsPYQEdkgCEBgsT5sSRrVZwL4JNciE7tbTz0EnBKZLDbmdDckCcHd8AABUZIsIQn6QBcC4cbqcaaqvISo9YMBIZgLXEVlAkTS3Mya111ABZl7SsJ4A3JxOojsCQNvN6ueBeSsuJtTC16HPAlKJ4k6H/hUB0c6wpjoNo0hAvQQCXGWWkB6ALdG2mTStDSN6CVA1A2C4eZ+CHDKhBJH3MJ/UARhZZtQkEvV9IASj3jcQgB3MBFAYuM+E4/X19b0jD8K4fhdM2/2vegk6OTc3Vzg9yZxdaZk2QRmORW73Dk1Eo42NjQvA9CgC+ufjytr/uh5/ZDJ5fe3iq0+dWb782ArPz9PQ+sOnfbH/a1l//jJwCjgJ/AlsDmnv/3Wl/mOXejAZuPcPhjzdu3ZfCsgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTktMDEtMDlUMDA6MzI6MzErMDg6MDCu0AENAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE5LTAxLTA5VDAwOjMyOjMxKzA4OjAw3425sQAAAEN0RVh0c29mdHdhcmUAL3Vzci9sb2NhbC9pbWFnZW1hZ2ljay9zaGFyZS9kb2MvSW1hZ2VNYWdpY2stNy8vaW5kZXguaHRtbL21eQoAAAAYdEVYdFRodW1iOjpEb2N1bWVudDo6UGFnZXMAMaf/uy8AAAAXdEVYdFRodW1iOjpJbWFnZTo6SGVpZ2h0ADMyKPT49AAAABZ0RVh0VGh1bWI6OkltYWdlOjpXaWR0aAAzMtBbOHkAAAAZdEVYdFRodW1iOjpNaW1ldHlwZQBpbWFnZS9wbmc/slZOAAAAF3RFWHRUaHVtYjo6TVRpbWUAMTU0Njk2NTE1MUg7gtgAAAARdEVYdFRodW1iOjpTaXplADEwMTRC+2pj8wAAAF50RVh0VGh1bWI6OlVSSQBmaWxlOi8vL2hvbWUvd3d3cm9vdC9uZXdzaXRlL3d3dy5lYXN5aWNvbi5uZXQvY2RuLWltZy5lYXN5aWNvbi5jbi9maWxlcy8xLzEyNjc0LnBuZ5hinOAAAAAASUVORK5CYII="); + //var t = CombineJSON.Base64StringToTexture("/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAIQAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMACgcHCAcGCggICAsKCgsOGBAODQ0OHRUWERgjHyUkIh8iISYrNy8mKTQpISIwQTE0OTs+Pj4lLkRJQzxINz0+O//bAEMBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIA8ADwAMBIgACEQEDEQH/xAAbAAEAAwEBAQEAAAAAAAAAAAAAAQIFAwQGB//EADQQAQACAgIABAUEAgIBAwUAAAABAgMSBBEFISIyExQxQUIzUVJhI3EVkYFiofBygpPB8f/EABgBAQEBAQEAAAAAAAAAAAAAAAACAQME/8QAHxEBAAMBAQEBAQEBAQAAAAAAAAECEQMSMRMhUTJB/9oADAMBAAIRAxEAPwD9lIgAiAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXaAWFPi0/nCk8jHX84Zg7Dzzy8cKTzqN8yPWPJ89Rzyc6Pwb4ke8ZV+dLn85KvzkbCN4Ys8yf5qzzr/zPzkbm0G8MP5+/wDNPz0z+Z+cjb2hX4kMWeXKPmZ/mr8ktz4kfvBF4/pg/Mz/ADPm7n5Kb+0G0MXHzJq6fOSz85GwhkfP3dKeKde9P5yNQeLH4jS7tHKxz5M8SO4pvVdiUAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgKUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArtALCk5aw435mOKEVkelXeIZubxGI8qXePJy7yuOY27Z6V/OHG/MpVj/Fk+LLpHFLUvzIcL8vb83hnIpN+2xzNdsmabfm5TmuqpNl+YHT4skZZckxZWQOvxbHxbOexsZA6bqTdCLAnY2VsWaJ2NkALbGyoC2xsqNFtiLKgLbCoC8WdqZph5k1ZMD205M1/N6cfPmOvyZdVt3PxA3KcymjpXlY5/OHz/wAW58W6PygfRRmxz+cLvnKci8PRg516JniNweLFz629z0RnpLlNZgdhXaFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJnoEocsmelY7cL86GxWR65tFXO/IpV4cnMizz3zRZccx7786lXkvzpl5Ml3PZ0jmO+TkTb83KcsqKzZflKZvsrsgULbiNhokQAISgAAEiQEIWQCAAAAAGgAAAAAAJABXY2YJFQFxQB1peYd8fJn2vKmLJwaOPmTHXr2ezFza28mHFl90TzgfRVzVs6dvn8PJ0e3Dzvpu5254NMccfIpd1q44LANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiZioJHHLnpSvvh4cnOifZdtaTI99s1aPDn5k+bw3zTN3P4su1eaXfJm7/dwm6s2Q6RGCZsrsgbgsqChCEoAABKURVIIFtVQELaoBXVbVNV9Qc0r/CT8KWaOaNXb4R8G/wDCf+jRxHb5a/8Af/R8tk/hJsDiPRHDv/Cf+k/KX/gbA8+qHp+Wv/CT5S5sDzD0xw8n8E/I5E+oHl1He/EyQ5TilWwOepqvpJpJsCEp0kmrRSwmaqABqagCwAACRXY2BdMWlz2Kg9WPNMPfx+d177siPS6UvLnNIH0WPNW/0dGHg5GrRw8uNIizhNMHsFKXiy6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAImegSOOTkUo8Ofn/XRsUmR7M3JrRl5+fM9w82TNeXGbO9KJdb5r3/Nz2VHTBbY2RslQCEgAACdTUEKaumpqDnqaukU7dqcbJLNHBetXqw8G8vZi8NrXqUTeBmxhmVvlLtmOJSHT4VHOehjC+TyJpwMn8G9FYhPTP0GPTw67rTw6Wl5JT+kjy04NKr/KY3oEe5U88cSi3y9XYNkc/g0/gn4VVxnoU0g0hcPQp8Kp8Kq4ehXSDSFg0UnFEqTxqS7DdkeeeHjU+Ro9Ye5HjvwK2q89/DmoN9yPn8/BvV5ZrNfKz6iYi3k82bg48jrHYfO6lWrk8Nmvejz34N6ukXhLyDrPGvX9/wDpTSVVkc9TVeyLKEAACNVwAAXiy9MsuKapmo9+PkzR7sHK2oxN3THmmHO1B9DExKe2Rh5kw0MXKpkcZpMD0CEpAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAArNogFkTMQ5ZORjp9Xg5HPj8GxSZHuycqlO/wCmdyPEe/Kjy5M23bzzZ3jniXWeRMuc32V2LOmCuyAUAALLKrAFTVetQV1NV4pL04eHe3SJmIHmiiYpLSpwZ/g9GPhUqiekDJpx7y9OPgzLSpgpR0rHTnPQx5sfBpTp1phpX8HRLn7mQEgAAoAAAAAAAAAAAAAAAAAAAAAAAAV1iVgHDJxqXeXNwNmiFbTAws3BvDy3wzR9LMQ5ZOLS/wCEO0dh83NTWWvn4Dw5ONNHSLxKXn1F9VdXQVSamoAAAhXYHSLzDtTNLzpYNfBzvt9GhjvF69vm6Xl6+Ly5p1DjfmNwccOaMlXZwAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAKzeKuWbPTHRmcjnTLa0mRoZedjoz+R4l328V8vblZ6I54OuTkzdzmyg6pTNiqAFgVAAaAsALxUpSbPZx+He/m5zMDjjxTe714ODM9To92DjaPRERDjfoPNj4lK+b0RSKrDluiQAAEqAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA53w0s6AM/PwIs8WbiTVuKXx1uuvRL52aImrT5PB+9Hiyce9Hetx5lbLajoKpEAjY2NTUCrpFlU1B6uPmml4bGDkRekPnqvXx+RNXK9NG6PJg5MPVE9x280xgsAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAARM9AS8nI5lKeSOZyorSYqxs2abOlKaOufkbPLe6s2Q7xGJBA6AACQABZMVYKJ1Xik28nqw8C90zODyRSbOuPjXv5ef/AE1cXhtavXjw1o5z0Hk4vA16m/2e6tYr5LDzzOiQAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB04ZcFbu4RODG5HD67Z96TTyfTzES8XI4EX7mrtToliIejNxL07cNenasiIqrNV9URVQCQCq9LdXUAeqmbVocfmR5VYszq6Uy6uc0iR9FS8Xr2uxOPzJq1sOWMlIee9MHYBIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAFZt1TsC0xXzeHlc6K0mFOXyvqy82Wbu1OYZs037cCbIeiIxIAAA0EgAnUq6UpM+VGSIisuuHjZMl4ij18Xg2lp4cMY3GemDzcfgRT3PbWkVWS4TOgAwAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADjlw1yR5szl8GY9jY7RMRMdKi+JfNTX7Katvk8Gt+5qzcnGnG9EXiR5dR2vX0OKwAaAVAWpOr38TkTS/X2ZzpS/SJjR9JjvtTtLK4/MmOoaWLJGWnbzXp5HUBIAAAAAAAAAAAAAAACgAAAAAAAAAAAAFZt0CZnpn8znR7anM5kV7irJvfu7pSgnNlm7hNlroeiEqALAAASmKgheKTZ0w4t3vwcOfL0Im8QPLg4k36hrcfhUo7YsFcdf7dXnv00RFYhYHMAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHDPx4vR6A0Y2fja+bPvXp9LkxxenTK5nD67l3pdLORZaa6+StncQACKrVQA60s9vE5M0vEM5ak6pmNH01Lb0iVmbwOXH0s0njmMkSAAAAAAAAAAAAAAAKAAAAAAAAAAAUveIAtOrP5XOjziivN5kT3SjLvfZ2580rZLzPm52Jso7YLKrKqEANBJqmKsCKvVh483OPx5v02eLxvhV7cr3wV4/CpjiHqisQnseaZwSAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFbUiywDK5fA+s0Zd6zW/T6e0dx0yOfxpi0u1LpZqLLX/ZWz0AKgLJqomoO+C80u2+Jn3pEWfP0s9fF5E0vEOXSg+gHPFbekS6PMAAAAAAAAAAAAAAoAAAAAAAABE+QIteKV2ZfL5e3cLc7kz9GZkvMuvOgredlQd4SoAsWsqJqwQLxV3wcacnUG4OMU7enBxpveGjh8PrXp66Ya0cL9Bx4/Ginm9QOEzokAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOebHvV0AYXO4k082fNX1GXHXLSYsw+VxpxXl6Od0vHqhfVR2BYVBNV4s5pqDY8O5P0j+TUfNYMvV4bvEzfFo83SmD0gOQAAAAAAAAAAACgAAAAAAAET5PHy+TFKTFPqvyOTFKf2x82WbOlKaKZssy4zZM2VelKoDQWVWaCYqavXxOJN7wiZwV4/GnJeG1x+NGKicXHrjdnnvfRIDmAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeXkcaMlP7eoZE4Pmc+KcWWauU1bfiHHi1O2NevT10nYS5C6joCyoC9Xr4fInHeIeNekpmNH0uO8XpErszg8n6UaUPJMYLAMAAAAAAAAAAUAAAAAAKZJ0pMrs7n8n60IjR4uVyNu3jmyZs5zZ7IjEpAUAqnUEoiq0Venj8ab+aZnA4nGnLdt4MMYqf2cfDXHSHd5b31QAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUvWL+TF5/G0v23HDlYYyYp/dVLZKXzijvnxfDv8A046vZUSAAlCQduPl0vDe42X4mOHzlWlwuRNbx/6nHpTRsCtZ7jtZ5wAAAAAAAAAFAAAAAInyBx5OWMdJ/dh58s3u9nOz93lm3s784wVUWsWd0qgAJqRV2w4pveAX4uH4t4bnHwUpRTh8WuKnf3ep5el9EgOKgBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgDI8R43o7Zk1fS5sfxaTDD5XHml5d+d0vKhaaomruISrqkFqu+O/Tz1TFmDb4fIi3m9z57Bmmjb4+WMlIea9MHcBzAAAAAAAAUAAAAOHKyaYpd2Vz831bSNkeHNaXnsteytnrhKAFCqwkCK9tbgcb6WeLhceb5Y/Zu4qRjp04dLi8eSwOCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4ubx4t5varevdeiJwfN5KaXmHOzQ52HW/bwS9dJ1KqEoWCUJBNJaXh/J1tFWbV0w2mt4c7xsD6UefjZd6RD0S8sxgkAAAAAAAUAAAA5ZbxSkywuRl3vLV51/R0xsrtzhLnZFk2Q9AgAERV0pXvyVir28HDM3TM4NHh8eK0ifu9itK9UiFnjmdUkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHk5mGL0YmanV30kx2zPEeJ+dXXnfEslC811Vmr0iBGpqBV0pPrViqag0+HyOrQ1XzuG+t21xc29Ij7w83Sg9QDkAAAAAAoAARPklzzWitJBm8vL3eWfez0Z7fV5JeqkplCEodABNQTSvba4GHWkSzOLimcsN/HTSkQ4dJFwHBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApkpF6TC4DC5fH0vLx6t/l4Yvhn92JfFr29HO+pcgQ7AmqEgvS3V3v4mXq7Pd8F9XOY0b8T2l5uJl3p09MvLMYJAAAAAFAADyc28Vp09bJ5+Xu8tpGyPFks4WXvZSz1wkAUIWiqHSlfWD3cGnrhrPHwsUViJe147z/RICVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK2jvyZPM4+l5/ZsOHIxxaky2k5I+dlWzrmr1dyeuEoAUJdKW1ck1Bp8DN6+ms+c4+XS8N/Bk3xRLzdIHYByAAAAUAAredaTLE5F4teZbHInrFLCz2ie3TnA4SgnzRZ6sSkAE1dcNXKr18Svd4Rb4Nfi00o7SrSOvJaXkkSAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFb17p0sAw+fx9LzLwWbviGPajDmv2ennP8S5gOoAAvSzW8O5P0ox6vVx76XiUXjYH0SXHBfekOzyAAAAKAAeXmZIpilhZLNHxHN9YZc2ejnH8FbAOqUpQlomrR4FNrw8GPzvDb4OPWnbl0n+D2APMAAoAAAAAAAAAAAAAAAAAAAAAAAAAABwzZooDrNukfFh4cnMjRw+bhXgavxakXiWdTkPRjzQ3xI9g50vFvJ0QAAAAAAAAAAAAAAAAAAAAAAAKTeIBccJzQfGg8juOcZodAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcstdqdPns9JpltD6SWRz8MVv26c5xLMsqtYeoVABZfH71Fqg2+BkiaRV7mNwM2t4bLx3jJEgJAAUK2npZw5F4rit/ogY3Nv3eXkWyX7uo9dI/iVQFiarqVXB6OJSb5Yb2OmlIhk+HV/wAsNl5ek/0SA5gAKAAAAAAAAAAAAAAAAAAAAAAAAAcc+TSgK8jPFKMfPye0crkTe8vLs9NOaXSbq7Oc2S6ZA67u2PLLyxZalpqyajWwch7qZIswqXl7uNl+kOF6DUHHDfZ2clAAAAAAAAAAAAAAAAAAAOea+lOwVy5opR4cnJcuRyPq8U5dnenMer458d4t1ouvwl78PI9b3Y+TFmJS70Y8uqbUG1F4XZ2DkfZ6aZocJpinoERPaWAAAAAAAAAAAAAAAAAAAAAAAAAAA8vOxb4u3qVvXuvRH8HzGSuqj287D8O7xWe2J2Eq6mqw0Fqua4O3Ht1d9Fj86Q+bw+6G/wAW3dIefrA9ADiAAoZ3iV/R00WT4jb1tp9GXf3qrWVe1KoADpVzdKg1/DKR9Wk8fh0R8H+3seK/0SAwABQAAAAAAAAAAAAAAAAAAAAAAAAyOfyOvJp576U7YHKvveXTnA882ULD1JQA0SmLKpB1iz2YLvDR2w36u5zA2MN3rqzMF2jjnZ5rwp0ASAAAAAAAAAAAAAAAADN5/J18nvyXitJlg8y+95XzjR58l+3PZKr1pAGi8XdKXcBg92HL9HspdlY7/R68eVzmBrYLvQzOPl9cNKPN5rVxSQGAAAAAAAAAAAAAAAAAAAAAAAAAADM8Tw7U7ZGr6HmV7wyws1db9PRzlNnDVC6ursJShILY/fDc4OWJp0w8dtbtTg3it3LpA1QHmAAUMfxK3rbDF59tryvn9GdZCbIetKoAJq6Y/e51dsHviP7ZI2+B7HrcePTSjs8VvokAAAUAAAAAAAAAAAAAAAAAAAAAAAifIHl5mSK06YOa3rlscy3fbHze+Xo5JcrITZDuAAAAJdMLm64feyR78P2aeD2MrE1MHsea6noAcgAAAAAAAAAAAAAAAB5OZeK06Yea3ra3Pn6sbI9HOEuaEodwAAABaLaulJcXSlmSNHj31vDWx+xhYbettYLbUeboO4DkoAAAAAAAAAAAAAAAAAAAAAAAAABxz17xTDC5FfXL6C/slicqnrl14yPHYTKs+l6EpEDRNXs4l9bw8brh9N4RMD6Os9plx4t9sUO0vJIkAUrf2sTm++7bv7WDzbeuXTn9HkuovdFnqSqLAIq9HFr/AJY/240q9XEr/lhM/BvY/ZC6lPZC7xgAAAKAAAAAAAAAAAAAAAAAAAAAAFbLAMzl/dl5mtzo+rKyvTzS42UXso7AAAACXTD73N1w+9kj34Glx/YzsFWnx49DzXU7AOQAAAAAAAAAAAAAAArPtBmc/wC7Kv8Adrc37srJV6eaXJCUOwAAAAL096i1GD14Pe2uP7GNgr64bfHr1R5+g7AOKgAAAAAAAAAAAAAAAAAAAAAAAAABk8/D1eZ+zWeTnUi1FUnJGDdSzrf3ub1QlFkVTZFVC69LKJoyRu8G8TSIetjcLN1dsRPby9IyRYBClMs60YHKt623y7RTDMsDNba8u3GBymyBGz0JSiqQFqvbwa7ZXiq0/Dad37Rf/ljXAeRoAAAKAAAAAAAAAQCRACRACRACRACQAAAAAePnR6JY16/Vu8mm9JY2Smt3fnP8S81lXaauersOaFpqhQgSAVejDE7uUVeri07ZI93HxNDHXWjjx6PS8d5UAJAAAAAAAAAAAAAAAAGZza/Vm5KNnl45mJlm5MUvRzS8E1Vdr1c5q7CoDQAAdMcbKO+GrJHq4tPXDYxeyHg4eL6NKI1jp5ekiwDmoAAAAAABAJEAJEAJEAJEAJAAAAAAAAAAceRHeKXZW9e69ED5zNTq7i93NppeXhs9dJ1IIsiqxZaqqag9eD3tvD7GFgt64buH2PP0HQBxU8nPn/Cwcn3bHiV/R0xZt29HJKFQdhYAFqNnw+vXTGp74b3Aj0OXT4Q9gDyKAFAAAAAIASIVBYVEiypqgKp2NkApOxsgBO5uqDFhANXFRSfKwqJFxCQVnz8mbyMPrlqOOXHErpODEvicpo0s2H1vNkwvRF0vHNUavR8KVPhSr0PPrK0Ul2jFK9MMq0c8eKbdNDi4VMPHneIaeLHFKOPS4vjrrRcHBQAAAAAAAAAAAAAAAAACmSm1WdyMXTUefNSJbScGLlxPPNWjnxet48lHpiUuCrpNVNZdNECdTVoRV6+Pi7vDnhxdtbicbXqXO84O/Gx60eiUR5JeSZ0SAKAAQrssqCwqB5WVQJakQDPKdjZUDFtjZUDEpVSNSAC4ospiQAAAAAAAY/idfWzbNXxKvr7ZVnq5/EqgOgiq9VKrg64LeuG9xbd4YYFW1wJ/xw8/QewBxUx/E7fVmWaPiXvZ1nq5pUAdQTVCagvj9z6Dhx6GBj976Di+yHDr8bD0gPK0AUAAAgAVAPIgQKSrslVDYhO0pVVaeXQcwbi2xsqBi2xsqA6CoaxZKiwxIgBKUAxcVqsDlfFEuM4Yl6xUWHgnjI+We/U1X7Yzo4jvj4z1pT7kc6Yoo6AwAAAAAAAAAAAAAAAAAAAAFZr2sA8mbDDy5OPEtPVzvihUXGLk46k4emtfj9ufyrrF0s2uLtenGmWnThu1MEUJ6Dzcfh69PdERBEdJcJnRIAAgFCoDRAhLUbGyAFhTZDPTXQcxosKm0DVhUB0FNjYYulRYCFlUjJSISMXECmJAAAB4PEqR8GZYlm94h54ZYV/S9PH4mygDqCaoTUHTG2uB7IYeJu8D9Fw6D2ArPtcFMfxL3s6z3c+3rl4bPVzSoA6gsqsC+H3w+j49eqQ+e49e7w+ixRrSIefs2rqA8zQBQK2SqACLB5ECqVrKo2QNTshXYDAEbDcSKgYsKgYsKgYsAGLbJ2UNhjpFk7KVWGLJUBi6VUguKpqJWAU0AGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBUFlRA0QrKyWiuyLGwo2VmyNgA2FRq2xsqDVhXaDaA8rCu0GweVtjZVYPJssqbCcdCqqagulTZYSlKAF0qLKYkAY8fO9jCye9ueI/oyw5d+XxllLBYd2KrCKg6Ym7wP04YWJtcD2Q49B71b+2Vlb+2XnUwebba8vJZ6+X7peSz2USoAoE1SNHfi1/yw+ix+yHz/F/Vh9Bj9kPN1KrgPOpAqKPKyggaK7CLJUbIV2BpsjY2RsKBFldgSbQrsbDcTslTY2ZLfKVlEsPKwpsbDMXFdllC2yaqbLbBi0WWc1hKYsvsqbDHQViwMXShIxYBTEgDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCUAqIsChAqlpKLIlUaArYUTZXY2RsNxIqgMTsbKbGzPSlxUZotsbKbGzfQ6VslzWYLbLVc1lI8ugrssMWTVRYY6JUWZ6SsbIqloslRZSXk58f4ZYV/ybvO/SliX/ACd+fxlnKwWHdgAC9PxbPhvsY1PxbPh3shx6DQVv7ZWVv7ZedTE5dPXLxWaPL98s+710SoA6AiqUxUHo4vvh9Bi9kMDi/qw38fsh5upVNiyB51iEoGoRZKlhpZQ2RsNiqVbFlRQqSiwqqUKzZCVLKiATsbKbGwL7GymxsN8ukWSoDMdBRNQXWUSoWFVkodAFJxZZzXqMXSosMWWUSJXECmJEAJFdoNo/oFhXaP6No/oFhXaP6No/oFhXaP3g2j+gWFdoNoBYV3qRaLAsAAAAAAAAAAAAAACAFezZFggQApVWUTZFkqAUsNqlVFkJUbKiotZXZGyBtUiEbB5WEAeUiAPKxspssMW2W2U2TUF9los51WUx0qts51dBCyaqLCZqvVaLKJgqnF1lQT5efmeyWJm8rtvl19EsTNb1y9PNlnJCUO7BKEgtRs+Hz6GRjanBcr/BpgPMpkc33yz7NLme6WXd6uaVUA6gtVVaoPRxffDexT6IYGC3rhu4PZDzdW1XQlDzqQCo1FkSnZSzJVFRSybKtUiyBAssoIS3AQqN8rCtkB5SIGHlIgG4lZTZMWa1ZKAT5W2WUTUT5XXcqrqFl6qCUulV6qFVJX2PixHvc82WKUZufk99qpGpe/JzsdHL/kWZvNk7O35safz/AG5Tz5j93h3JsrxDHt/5C/8ANSedkeNGyvEMeueXk/m4zy8n83HZGzfEJ12+Zu6RybvLVJ4g16/mbKX5eT+biqrINd/mr/zTHLyfzedGxkGvT85k/mfOZHk2NjIHr+Zu6Ry8n83jqmqfEDSp4jfTpb56zOiy82T4geuedLnPOyfzeXZFm+IHurz8kL/8ldmTY2Z4gaP/ACV008RmzN2ItJ+cGtX/AJGyZ8SZkXRe5+cDS/5WYTXxXtk2RVv5wa26eKU+lnaOdh/nD5/bUi8p/KB9HHLxT+cOm8W86vnIyy9XH5dq9QieeKbKHPDmi9HRyahSy7mlcKgrYbiqLJVFKzZEmqqZWKbLA3yK2NkWYeUioNxIgFYnY2QBidkoNhi6UDWLLKJqJx0WVFMdNlos5uiUL7Jc6ulVJXKoSJceV+lLAyW9ctznX1xdMK3venmlVVeyj0JWSoswdcbX4DGo2uB7HLp8HvAeZTL8Rr12ybtrxOvomWLNXp5/Eq2Cw7AlCag6Utr1Lb4d9qQwatfw221HDq2r3oSh5V1VET7LIkUqClmS2IQjYsrZq/IoWQhQgVaqBGwgamyBAJEA0ADEiEglOyqWC6VFmpW2Xc0iXRZRaoheqytVcnsltUvDy+RNrzDxTZ1ze9ws9VIxKapVTVaVqrOkYZPhSDz3shbJX1qulWI2WV1WEiXXHx5s614l6/gzR5R6Z4lv4OdsN6mwOStnb4N5/BzvimjRyShIJ2Xp5qu+DFMpmcEVJej4M1UnDdOjih1+FKmkt9DlZR3mkuOq9CqxFUtE1RZelJsrekpFUJ1lXWWhqbLK7AtR1w36vDivRkra3Ft309tmbwLNN4r/AFqllFlUqgc1rKWFomyqVJsyVIsrsspZq1lNjZCSKiAFAoDVxQBKygC6VFhiyVUsYulSqzWL1WUTUQ6rVc1lJdKr1c6pEulV1KlRDx+I21ox7NPxG+3kzHq5/GIAdkKpqhYF6fi2vDvYxcTa4Hshx6/G1e8B52vJz6b4mHkrq+h5MbYZYeavrd+Mps8thN6q6u4sACatXw63VGVVocG2vUOPT42rWQKvKsc15spYUqqtZVKlVJXc2+nQVShIqgQKgEKy1RsbGxsNQAwABqdllE7NYslAMWSqsxiyyqRi61UIqtLpVGb2FVM8+hlfrnLNye9ydL++XN66/EoejhYPiZXCKNTw2C/xL2xxsaflMUfg6VTb2T/pw2UsDm1it50eV6OV7ped7KfBLpT3w5r095KW9w8cVww9PTlx/wBGHWHin6I1hE4qT+ELgpz+Dj/hDO8SpH8Gqy/E1c90ZOsIstKr2JKV2vDc8NpHwWJT3w3fDv0XLt8HpnDST4NHQebZU4Txscojh46vQGyPHyONjinsZGbFFbt3kRthlhZPu7851LjrC8UhCauw9/Cw0l7L8DHZ4uBb1xLXee9p0Z9vC6fipPhTTEfpIw+Zwfg0iXh1bfifsY13fnOiqaIsmjpKml4c0ZZ3hzRl5On1Sqoq5rRZSVlRSqlkoTKqoUXUFoQlApQBjQAaCBgkBokQDF0qLDFqrqJq0XWqotVjm6LKLtQssqspK+yVYqmfZYqyWVzreuXherl32vLyvZT4hADogBFQdMTe4NNcMMTDTu76Djx1hhw6yOwDgpzyxtRh56/Vu2juswxuVXW8unOUvFKq0qvSoE6oalaj28O3reKr18K3rcr/ABtWyqVHkXVVVZUWrs5umzmKQovZRKqqWSrYFVRNkCGLFZWVlohMoTLGoAAAGgALiupFWpXTVVZgumqi7UrVXc6rVEr1c+R7HSrnyP0pbX6iWVeyE3Rq9VUSvV7/AA6zNq9XCyaZYJ+Jbp+8IS4MYPLxTF5eXVpcz3y8N6vVT4xxq6Y/eiKu/GrPxaf7VPxLfwfpQ6K061hZ4p+qAGgzPE2myvE7fWFc/oy5QWHsSmlfXDd8O/RYVG14bPocevwh7wHnUAA55f0rf6YWarczfpSw89nbilxKoS7j3cD9WjY+7G4P60Nn7vN0+iQHMeDxL9Fi3s2fErejpkXejn8FE1QvV0W0OBV77PJwIeuzx9Pq1LK2WsrNUtVUsu5SLqiyqVbIUqhKBSFdllGrAGCAGNAVBYAEgAkBrFllVhiarK1WHN0WUqu1i1V6qL1UiV6oyW6pKKufKtEYpbX6mWTnv3eZcFroeuvxCAHSrEVXqhNBL08Wm129SOqwyODTvNDZeXpIkBzUhkc6ut2uzOfRfP6llTVC91HpgEAoTV6eJaK3eZ1we9zutu09hZGC21E2eOW1UAFuasrKyKqizm6Wc0ulUKrKsKqSEgtUAEADRCUMbVIDQTVACVlVhgsqs1iV1F2JSupVdqLLVUzR3SYXqvNW1+pljZK9Ku3IjW8vPZ6qokdcHpyw5L47a3V/4l9DS3oXefi33xO7zT9YyuV7peWenq5vpvLxS9NPjDV6cHleHmizrht64Vb4lvY/OkLqY/ZC7xz9UANBj+J+9sMrxOvrXz+jKRsmfJD1pTVr+F28umQ1fCnPp8KtUB5VAAOeX2SwM8+uYb+X9K3+nz2f3S7cUuS9VB6B7OLf1w3IfPce3+WP9voae2Hm6/RZCVL21pMuQy/E8vdtWbLtyMu95lweqkZAVdKV7c3XBHd+m2+LanB9j02UwU0ovZ47/VwpZWy1lbMVVVyl1cpFVVVssrZDoiyq1lRqkkkktUhCUJAAaqACwACUJAShLWLLKrDJSuou1iaLVVqtVSF6r1UqvUc5Wq8vOvGnT1M7mW9aqfUy8NlbLXsq9dUAC6oRV0oqtj97JGtwKfRpPNw8emKHpeO/0SAxSHh53sl7nm5kf4ZbT6lhZHN1yuT1wACgWx21uqtVErbPEnbDD0vBwcvoiHveS8f1tVZVWlVK6uasrKyKqiznZ0c7JVVCqyrFVVQshqkKrKsagSDUADQABIDBZVYEpqhaowXQlqU1Wqiq9RKarqVXqObwcykPDZr8um2H+2Ter085SrVNURVLulq+GZo86NJgcTL8O8N7HaJpEvLeP6xk8z3y8U2ern2/yy8U2einxCYs74ffDz1dcPvhtvg+hweeKHRzweWKHR5J+qAAHg8Sr6O3veDxL2dNp9GLdV0yV9amr2JKtjwyPuyqtfwz2OfT4VaADzKAAUv7Lf6fP8ivrl9Df2yweXXq8uvJLygPSOmD9aP9w+kp7K/6fPcevrh9Bj9kPN1Fng8S5OtPh1+722tFK9sHlXm95/ZPONkeayEos9QtV6ePX1vNSrU4HH/O/wBnK84t7allrK2eazaqWVstZWzHSqqlvYupYVVzso6WVSpWyqyrFoVlZWWqQJVYADGgAAACQBILNYLKrDE1XUXHNaq6q1Wi1V6qOinOUTbXzZXKy73aPIv1RjXttd15wmVbITZD0VQALqxLtx693hxj1eT38HHFrwi85CWzSutOl0JeQABQ48iO8Uuyt47rJA+e5FOr9PO9vMpNLy8T10+JQAsE1QmrFPXwssReIbL53HPV4bnHyxekR94efpCquill1XBdVdVLOrlYUqrKyspUoJQKqoAxSolA1UWVGq2Sk1GoE6moAAlZKEgLIXawWQuxCUoXWw1Xqpq6CJJr35Mzkceaf6adXLkYtqOlJSxpql0yVhR6apkq9/C5c09F/ozttV4uyY1jtzLRe8y8tl73c21Ql0x++HOrph98Nn4Po8XshZTB+lDo8c/VAADx8+no7ex5+b+jJH0YWSvrUWy+9V66pWo1vDfoyaNPw6/2T0+Nq0wHmaAArb2sTl19ctxj8uvrl05/UvAiqxV6R1wem8f7b+P2QwcHuh7+RzdMUVo49I2RXncrvujNkvfu/aq4r5FRZbHSbLFuNjnJeIq3qUilIh5OBxtPW9rzdJ1aFLLWRLipWVLLypYU52VsuqKq5oXUQ6VURZJYUoJQ1qgkY1USDQAECQBOxqDBYSAkTUSmq9UVWqIWTVC1WsS6CJ6jzUh5eZf0Sy7PZy8vfcPE9POEygFXZCwDWLU97a8PxxpEsjH7234d+i49JS9gDzgAKAAZHiWP1zLMs3udh3owsldXo5z/ABKqEjsIAFJq0eDmZ1Xbj31vDleFVbipE7LTV5JWpZWy6lhtVFJdVZSqrnZV1spNRSqlnRQWhCbDGqi2qAUFwFBcGo1SJ1GITqJ1GC6EtYlMVKrtqiZFharUrAsJTVMxt5FVhjL5fGml+/s8V66t++KL06ZPL400v/Tvzu52eJZE11S9A52CyikullonW7kvFmD6XjTFsMS7MvwzN6Ipu1HivGSoAYDzc79F6Xn5v6MkfRg397nsvk96j21+JdKPdwL/AOaGdVoeGx3eHO/xtWyA8zQAEMnme+Wt92Pz/K8w6c/qXilFeibOc2eiB1+L0pNtlE7KwTsVQtFQWpXZ7uJxpm8OHFwze8NrDhjHSHDpfFLxWK+SF1XBqEJQlqk1Us6TDnYUpZWy6s1FKWVldSapVVRWy9kC6qIWRqxSqq6BqosDVBIALAAAwSlNagVqmKorVdtUlVoqiq1SqdWWqLVESmrlyL9UdavFzbeiVxH9S8OS3rc7Jsq9dEzIAtAmqFqNHTDX1voOPTSjL4HH7tEtiPJ5ukpWAcgAFAAKZab0mGByMU0vMfs+iZ3Pw9+auc4MUstNdVXsSgABaiq1UrbHEy91etjcXLp02Is8nSMV6UsrNXSVLIUrZC1kWSqrmhZClqIXV1SaqqugUqLqDUCRggSAjVKyWmoSJYgWFmsmULgoWWAQL1qhaIErCQSVUzYoyU6XTVtWMTPxpp28k11fR5cEZWbyPDr186PRToxmWUei+GaOfwnbYS5rxVOho0duPeaNHFz5jrdmUjVbZymmjdpyaX6dYtEsHHlmHaOXNHOef+DZcuTXvDLxV8U697v85jvRHiYGRmr1dxmr2ZtL3l5706emvwc4q1fDKepnUq1uBWI80dPjaveKzeKqXz46fnDztdVZtEPFl8RpT/8ArNz8u+T83SnOZGtl52PH364ZHK5PxLzo5TftR2pziEq2VTqaughepq6RSQUejBhm/Tpx+HfJeGvg41MNIhxv0gU4vGjFXv7vTIPPM6JUXBTmhayEqUVdFJqNUmrnNXZSailFZdFLJUorNV7IFuaurpNUEjmJ1JqxaotNUAqLA1AkBCdRaKjFU6rJbUFoqVSIKrFVhi1U1RVZSD2sjl32ytLkZdKSyMlu7u3OHOXNWpPuQ9LFgG1RI646+tzir08evrhkjX4WPSkPVDngj/FDpDxT9EgAACgABxz4t6S7K2B8/mpNXns0ufh682bZ6qT/ABKokdBCaoSxS1J1bXEyxfFH7sOr3cTJ11Dj0hTWVTVLzKc1bLIsN1QWVSrVULqqU56jorqk9KC4N1zFtTVRqotqahqErJSahKNVtRiFqpqsJVqtVYUz0LCa1EpWE1qJK1SLDEVWVqsMAFDz5+Ljy/h5vDfgzW7WGxeYGDkwzRymst3Jx63Z+Th5KeXu/wDDtHRLwjvfjXhynFMLiYFNlZsmVVCdjZQaL7ybyogHTeV8fJvT83BJg9U8m8/m5zkcarmQJvbZz2TKAEWSRVoJiq9MMvZg4cz16J/6RMxA4YOPN2lg4f03o9GHjVxOzhfporSkV8lwc1AAkAFIVsmUJKqqroFKTVR0VFKuboDdc1XSyqVVc1XRAtRC6uoaqLao1G+kCdQPSBIHpAtqRUYVKrampVnoqsmqVAtqLJR6FtVdUZr6YplVWM/nZu+4eCbLZ793lR6qRiJVAdUrANFqPdwcU2vE/Z5MNJnqP3bnCwRjxxZy6TkD01jryWB5gAAAAAAAB5eZii+GWFmp0+kvXavTF5mHq8u3OUvDZXVaaj0AhIBs64b6uSaImFvocNu6Qs8XCzbUiP4va8l4xqLIlYSpzFlRqqs1dFRSmqHSys1BVGsrgaprIujUUjU1WAV1NVgSalaugM9KkVTquMVXrUquJmVK1XFoGaqlOqwxVYSQwAUAAAAAAKXpF3jy8L6veETgws/DyU89HmmkvpJrE+TzZODS3m6x0GHNUNTN4d96vNPDv/B0i8Sl5FXonj3jyc5pq6aOY6RileMMmjjVfV6Kca8u2Pg23j0I9wPFpKPhS2cfBj83anGx1RPYYVONeXtweHTPn7WrERCUT0kcMfEx43br+0jlsiQGgAAAAAKVmqUgKISapaqqsDXNVeak1FKKuio1z1RqvYFOequrpqjUUpqar6o1SKapWFCBKyRQXRqoQstqJTMqugKSLJrUrUYas3xHkfhR7eRm+HSZYeS8283bnDFFVlXoSsApgtVVfHUS9/BxRe8NileqxDw+HYdadtB4+k7KgBIAAAAAAAAPFzsO9O3tUyxFqETg+byU1/8Atc3u5WLq8vFZ64nUoAWITVCasU9XFy63hs0mL0iWBS2rU4Gbumjz9Ia9ysrocmqaodFUqVVXmqAVFgaqqsAqLAK6p1TqagCwCosmtRhWqVgYqsJGCROoxIkGACgAAAAAAAAAAAARrCQFLYqy5zw8M/g7hsjz/J4v4L0wY6fSjqGyK6wsAAAAAAAAAAAAAAAAAIRNVgFEWXUS1Cq6BSmqHRSajVBeaoGqhqagqqvqkb6V1NVgPTmOgHpXVYA9AsmtRii9amqRgLOHIyxSklWemfz83d5j7PA6Zr73lzeukYlADogAaIj1PZwsO94/Z5aV+zZ8PwRWIs53nIHvx0ilOlweSVADQAAAAAAAAABmc7BP1ZeSur6HPj+LSYYWek1vMO/OUvOJsizuAAJq9HFyTS7zLUtr5pmNU+iw33pErs/gcmLeTRjzeOYxqELGo1z1WSJaoLAKamq4DnqssqALAKmqwAJBgJWGK6hqsAkFMQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQJAUQuqkqgSgUhXVfVAVU1NVwapNULA1XU1WAV1NVgFR0BiqyISMkE6p1BSfSy+dm27h7+VfSksPNPrl3501jnZCbK6vSxInZQSsiqHSKgvgpveIfQ4qaUiGXwOP3lizYh5usiwDgoAUAAAAAAAAAADI5+Hq82a7hyce9JbS2SPn71c9Xoz0mt5h53rhKBIoE1VTUHbBfS8Nzi5YtSHz9Xr4vIml4cb01TbWcsOaL0X1ebyGpqsNPSupqsB6UEg1Ak1S1AuCfSosB6VFgFVhFRqRIMAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACguAohdVJ6QJFKVFkJECQECQASAhIDAFM09UbUZ/iOb6wy3flZd7y8710jIYgB0SqACYq7YKTN4Up5tLg4e7wi85A9/Ew/Do9APHIkBigBQAAAAAAAAAAKzVYBleIcb1bMuaet9HyMe9GPnw9Xd+d0vGhaUO4qkSAvS2qhVkjQ4/I6amDNGWv9vntnr4vJmnTjen+DbHLDmi9IdnBQAApquAAAdHQAdHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdHQAgSAAAgSAAAhIAdHQArPl5svncufpV6edyYpSYYuTLN3XnQc7ISh6apVDU2BNSKp+qYqDphpM3bvDxaU7eDgcbvprxHVenm6SJAcBIAoAUAAAAAAAAAAAAIl5eVx4t5vWjoicHz2bFMXlw11bHMweqbM69Ps9VJ2EvOJlDoAgBNU1VqmoPbxeRNLtfBkjJR85S01e/iciYu4dKDaFYtFvNZwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOeXJFKTLpLK5/I+sNrGjw8rkb+Tzz6U2U2euIxKRVZQAioLVd+Ph3vCmOnd2tweJNOrXc7zkD1cfDGOkO0ohMvLIkAAAUAAAAAAAAAAAAAAAApekXp0y+Vx5i8tdTJSLV6bWcHzuSnSjQ5fGmO3gmur1ROpUQlCwABNV6Xmvm5pBs8Plx9LNCPPzfM0vNL9tjh8zakVeW9FPeKxbtZzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFb3ilewcuTmjFTtgcjLN7y9XP5O95j9ngmz0c6YCgOyQAFkxVWrthpMskerg8fe8fs2qV6efhYdKRL1PLedkSAgAAABQAAAAAAAAAAAAAAAAACmTHF6dMjlcTq8tpTJji9em0vg+cvRzaXK4cx28F69XeqJ1LmCFgAC1XTHfS/bhtqtFmDc4fK29L3vmcOWaXiaNvicmMlOnmvRT1gOYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM7n8nXur08nkRipLBzZZvft0pTRzm3d5VslR6ISAKAF6gmKtHg8eb9S8eDFOS8N7j4fg0iHHpODrSNaxCUoecSAAAAAKAAAAAAAAAAAAAAAAAAAAVvSL16YvN4+l5bjhyccXpLaTkj5y1elXrzYdLy8s1euJ1KAFAKgLuuDLNL/wBOKdtWSN/icqL+l6nzWHNNLxLZ4fOjLSIt9Xnvz/we4ByUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACO4hxycmlPzgwdZnp5uVy6Y6PFyOft7Hhvlvd0jmOnI5G7zJVs9ERiRVZVYGpqAnV0x078lYq9/B429+0TbB6+DxNOps0FaV1p0u8kzqgBgAAAAAAAAAAAAAAAAAAAAAAAAAAAA8fL40Xp3VjZMM0v0+keTl8SL07q6UviWDavSHoy4Zpfp571ekUAaAAJq6Ycs0u57GzJG9xudF/c9sTEvmKX1e/j8yY6jdwvz/AMG0OOHPTJT3+bs4qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAccnIpQHZzvmpR4s/Pj6UeDJyJuuvPR6+Vz/tRn5M17uc2Vmz0VpiSbGwLBAkEBZEVBKIqtFXXHimb9gvgw73ht8XDGKjhxONFfN7nm6X0SA5KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeHmcaL+dWRnxavpOnh5nDi8TNXSlxgzVDvkxTS/Tnq9SVA1AFlVgTVKlVgejDyL0v72ng50aRuxUxaauc00fSVyVsu+epyclPLd6sPPmPfdynkNkeXFzMd/zejaHLMUsI2hIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArNohxyculCIHoccnIijw5/Eojyo8Obl3v2uvMezkeI/XV4L5r3c5tsjZ3imJTN5RNkIWJEDQABFV1NXSoI1NXSKu2Hj7XhO4KYcM3anG4evU2dePxox+b0OF+gsA5AAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeTl8WMtGLnwzS76V5OXxov519y6XwYGqHpzYZp5OE11elLnFSKrChAAJEAJiyaqgLxeYe3Dy5inveGqaptA1cfMiv5vTTm0sw9iLTVE84H0FeTjstGSlvyfPfFmrpHIuieQ+gi0SljU51q0enH4lXRE85Gh2dvJTn0s7xmpMdoyR1ERaJSKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABS2Stfq82Xn46/mVrMj1TaKvNk5lKPDm58y8uTNN3WOY9OfnWu8l80yrNlLO0UiEpmyEK7LFhA0AGAI1WBWqyUxQERV1pimzph483aXH4evvc7XweXBxLz00sPGrjdKUii3bzTfRIDAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPJyuLF47qzM3HmjecsmGt1Uvg+emik1avI4OvsePJx5h6IvEjyK6u16ubolAI1BIAIqsrVYEiAEiAEmylU2B1i7rTkXr163mTszBpYefMeT0U58W8mNsbuf5wN+nMx2dK56WfObytGa8JniPpN4T0+fx8u8fm9WPn3hE8xrnbw4/EqW6eiOVjlE0mB3FIy0sv2xQAAAAAAAAAAAAI7iEbR+8AsK7wrOakA6DjPJx/zR81jMkdx5b8zG5zz6fzb4ke5WbRDNv4i81+fefzV+cjanJWFZz0hhX5My5zmn+1RxG/PJxw5X52OrD+Lf+cq7yr8ktq3iVHlzeIzbyqz9kbLrzHa/JvZzm82UFYLbGyo0W2QDQABAkBCYqnVNKyBFFoxTL1YONe/TRxcOK9bOc9MGTTjXl7cHh8/X/8ATSjHELRHTjPQcsXHrjdOk9nbnokAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiYiXHJxqXdwGXn4PTOyYZpeX0rhm41Mv9S6V6YPnNDVq5PD5j8HmycO8fg7RfUvFqavT8vMK3xTDfUDih01U1WKamqwCAAAARsbG5sCQABUazynZbZRZLV4tLpGWYcTYHtpy5qtHPmP3eHaDaE5A0o8R/8AXLpTxFlo2T4gblOfSzvXPjt5vnNl4zXr5bpnmPofjY4/NHx8f82B8WVfiyz8R9B8zj/mtGfHP5Pn4ySv8a9W/iN74lP3c78rHX84YV+RdWcss/EbE8+jnfxJkTeTeVfnA0r8/v8ANxnl3eTaTaW+IHo+dsrOaZcNiLK8wOvxZPjSoqeR0nLMmzmNwTKEWRZolCUKBVOyAAAAAWRslGrBKyIqkA1TFdnSmKbJmcHKKzLpGGXswcO9nrx8KYRPQZdONe/k0uP4dr73rx4Yo6uV+misUiq4OYACgAAAAAAAARM9AJFPI8gXFPI8gXFPJYEisSsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdADjbBFv2ebJw9vwe8bFpgY2bhzV5smGavoNYc78bHf8HSOg+emis0bV/DqPNk4Mw6R0SzNR7p4N/4ON+NNb+xXuB5x2+DKvwlaOc1V1dJorq0QJQCoALAAipUqVBYAAAEiEAlOyEgCAAQAAAsIAAASAAhKAQAAACosNFRYBUTqtqCuq+q8Ud8HGm/m5+hwjFLrTjTLSwcH+b1UwUo5z0Gbg4E/V78XFrT3ebv0npym8yCQSAAAAAAoAAAAAAABS3uqXtrSZ/ZF/TeJ+yb12pMfuDjMzf4c/TzW3m28aecE1mukft9yazW8z9e/wBgVx0n4Ux7Z/dNKzpM3v8AVMdxX2T5mP8AhankCsUmlO6XXx9+c77ef/SaeyfR/wCEYqzHc/TsF/2Xc5t64h0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGsK3xRdcB554lP/kOfyNXsG+5GZk4P/o2eLNxLx+DfVnFSyo6D5ucUuekw+hycKlnly+G+j0OsdISyNVdWjfgXinblfiX/AIL9wPLqavR8tc+BJ6gefUdb4phTVYqJAQJ1NQVFgECQEK6roBAlIKiNVwQJ1TqCqTVMVBBq6aSn4Ug56q2eiMUqzilmjz6mrv8ABufBuaOGqXeOPdeOJkn8P/Y2B5NVtHupwL//ACHWnAun9IGZotGKWxj8O/n0704dK/siekGMSOPd6MPDvPno16YKU/ZeKwieinix8CPr5PXTFSn4Oo5TeZAAAAAFdoBYFdoBYV3hYAV3g2gFhEzFUbwCwiJ7SAI7iEgCNoNoBF6906ct5p5X84/d22hHpsDn8ah8ai+lCaUgFPjU/wDkHxqL6UNKAp8aiPi9+VKdumlap1ioK46a+dvq6KxaLLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKzSFgHOcVLOd+JS34Q9AbI8eTgxZ483AmrYR0qLyMC3Gn+Ck4Zh9BNIlT5an9LjoML4Mk4Zbc8Sn9HydP6b+gwZxSiadN/5On9OF/DotdUdhi6kVad/Derq/Iy39IS8Gpo06cGV/kT9BjTTo1a8+HI/42YP0GVFHSMMtWnA1dacOKs/QZEYUxx5bdcFIWjHWE/qMmnAvNO148Ou1hP6SM2OBMO9eDD2CPcqeb5OpHDpD0h7kcPlqJ+Wq7DNkcY49HSKRCwbIAAAAAAAAAAAA53ya9/05Rfr4c/7Trt1H/mSkd6R/Ug6Tf6uG23nvE1+lOvvK+s6RH7eStdtvVSkdfSPuCdsunv89+vo637in9ufn9dLe+Ps62rN/beYB5Jyei86R74+8r47z6I8oiY7/wBE/EjuN5+sLVrkrvveZjryBbLOv8/p16YcfP8AnyXe9Jr1avduvt2437r+F/8A8kg7Y7/WfOO/3dNvr/TlSsVvf69R+8umvpmAcptfy0+/3TN/t5zMR3053xfE6n69R19foT6r5I+1467/AHB0pN607v1/XSJtk36r/wB/u5zSaUmPpNuvJM03v8T/AF59/QF72nzinv68ilreUW9/3U9V/ia+UzPl9vJfHWadR9Z7/wDYE0tPl9I9fSLzk+lbxE7pr+P/ANZmpF/w8wJtr1v/AOXPfJSk/F+v2Tt6/wCqx13/AGilJp3v9J+0z35gXveOtfLy7/2vN5i80+nl5f7Vmt69evWiPOb3t7ZtHkC+Ob16i/178v8AT0PLipNPK/7x13Pb1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArMbf0imPqe9u5XAVmvavwKOgDh8tX+3WlIp5LAKTiibdkYq7drgDnfFNvbeaugClKRSnS0ViEgKThpbzTNK2p19lgFK4q0Jw0t5rgKTjpbyKY6U9q4CvUfVE4aW81wFdI11+yIw0jzXAU+FT6pmkTHSwClcVaLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9k="); //Image.sprite = Sprite.Create(t, new Rect(0, 0, t.width, t.height), Vector2.zero); } // Update is called once per frame diff --git a/GQ_URP/GQ/Assets/script/WebSocketT.cs b/GQ_URP/GQ/Assets/script/WebSocketT.cs new file mode 100644 index 000000000..4df59e3cc --- /dev/null +++ b/GQ_URP/GQ/Assets/script/WebSocketT.cs @@ -0,0 +1,116 @@ +using System; +using BestHTTP.WebSocket; +using UnityEngine; + +//[System.Serializable] +public class WebSocketT /*: MonoBehaviour*/ +{ + //string address = "ws://127.0.0.1:8081/websocket"; + WebSocket webSocket; + + public void Init(string address) + { + if (webSocket == null) + { + webSocket = new WebSocket(new Uri(address)); + +#if !UNITY_WEBGL + webSocket.StartPingThread = true; +#endif + + //WS¼ + webSocket.OnOpen += OnOpen; + webSocket.OnMessage += OnMessageRecv; + webSocket.OnBinary += OnBinaryRecv; + webSocket.OnClosed += OnClosed; + webSocket.OnError += OnError; + + //ʼӵ + webSocket.Open(); + } + } + + private void OnError(WebSocket ws, string reason) + { + string errorMsg = string.Empty; +#if !UNITY_WEBGL || UNITY_EDITOR + if (ws.InternalRequest.Response != null) + { + errorMsg = string.Format("״̬룺 {0} Ϣ {1}", ws.InternalRequest.Response.StatusCode, ws.InternalRequest.Response.Message); + } +#endif + Debug.LogFormat("OnError: {0}", errorMsg); + webSocket = null; + } + + public void Destroy() + { + if (webSocket != null) + { + webSocket.Close(); + webSocket = null; + } + } + + /// + /// WebSocketӽ + /// + /// + void OnOpen(WebSocket ws) + { + Debug.Log("ӳɹ"); + webSocket.Send("ӳɹ"); + } + + /// + /// ӷյµıϢʱ + /// + /// + /// + void OnMessageRecv(WebSocket ws, string message) + { + Debug.LogFormat("յ{0}", message); + LocalVideo.Inst.Dispose(message); + } + + /// + /// ӷյµĶϢʱ + /// + /// + /// + void OnBinaryRecv(WebSocket ws, byte[] data) + { + Debug.LogFormat("յƣ{0}", data.Length); + } + + /// + /// WebSocketӹرʱ + /// + /// + /// + /// + void OnClosed(WebSocket ws, UInt16 code, string message) + { + Debug.LogFormat("ӹرգ{0}", message); + webSocket = null; + } + + /// + /// ʱ + /// + /// + /// + void OnError(WebSocket ws, Exception ex) + { + string errorMsg = string.Empty; +#if !UNITY_WEBGL || UNITY_EDITOR + if (ws.InternalRequest.Response != null) + { + errorMsg = string.Format("״̬룺 {0} Ϣ {1}", ws.InternalRequest.Response.StatusCode, ws.InternalRequest.Response.Message); + } +#endif + Debug.LogFormat("OnError: {0}\n", (ex != null ? ex.Message : "Unknown Error " + errorMsg)); + webSocket = null; + } + +} diff --git a/GQ_URP/GQ/Assets/script/WebSocketT.cs.meta b/GQ_URP/GQ/Assets/script/WebSocketT.cs.meta new file mode 100644 index 000000000..c8eeed1f4 --- /dev/null +++ b/GQ_URP/GQ/Assets/script/WebSocketT.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e71ae1fb57f4d8744ac9f6bf431001a5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/Assets/script/接口/修改/DeleteDevice.cs b/GQ_URP/GQ/Assets/script/接口/修改/DeleteDevice.cs index 4d6856648..a9998de2a 100644 --- a/GQ_URP/GQ/Assets/script/接口/修改/DeleteDevice.cs +++ b/GQ_URP/GQ/Assets/script/接口/修改/DeleteDevice.cs @@ -16,6 +16,11 @@ public class DeleteDevice : MonoBehaviour public IEnumerator SaveJsonCoroutine(Action callback) { + if (mybody.ids == null || mybody.ids.Count <= 0) + { + callback?.Invoke(true); + yield break; + } yield return StartCoroutine(saveJson((w) => { if (w != null && URlreturn != null && URlreturn.message == "操作成功") diff --git a/GQ_URP/GQ/Assets/script/摄像头/ClickEventLens.cs b/GQ_URP/GQ/Assets/script/摄像头/ClickEventLens.cs index c257bed01..8f1ab1a1d 100644 --- a/GQ_URP/GQ/Assets/script/摄像头/ClickEventLens.cs +++ b/GQ_URP/GQ/Assets/script/摄像头/ClickEventLens.cs @@ -8,6 +8,7 @@ using UnityEngine.UI; public class ClickEventLens : MonoBehaviour { + public BaseConf baseConf; public List clickEventLens = new List(); public AutoScaleUI scaleUI; public Transform lensUI_tranform; @@ -24,7 +25,7 @@ public class ClickEventLens : MonoBehaviour public bool isplay = false; private void Awake() { - + mycollider = gameObject.GetComponent(); clickEventLens = GameObject.FindObjectsOfType().ToList(); lensUI_tranform = transform.GetChild(0); @@ -70,18 +71,26 @@ public class ClickEventLens : MonoBehaviour private void OnMouseDown() { var t = text.text.Replace("", ""); - //if (BoolMonitor.Value) + if (!baseConf.conf1.isPicture) { ChangeMaterialColor(gameObject, 4); - WebInteraction.Inst.current_videoNumber = t; + //WebInteraction.Inst.current_videoNumber = t; + WebInteraction.Inst.current_videoNumber = baseConf.conf1.LensName; WebInteraction.Inst.isVideoPlay = true; - WebInteraction.Inst.OpenVideo(t); + //WebInteraction.Inst.OpenVideo(t); + WebInteraction.Inst.OpenVideo(baseConf.conf1.LensID); float x = Input.mousePosition.x; float y = Screen.height - Input.mousePosition.y; WebInteraction.Inst.SendVideoPosition(x, y); } + else + { + WebInteraction.Inst.current_videoNumber = baseConf.conf1.LensName; + ChangeMaterialColor(gameObject, 4); + WebInteraction.Inst.OpenVideo(baseConf.conf1.base64, "1"); + } } public void ChangeMaterialColor(GameObject go, int index) diff --git a/GQ_URP/GQ/Assets/script/点击/ClickEvent.cs b/GQ_URP/GQ/Assets/script/点击/ClickEvent.cs index f5ded4d22..97c953bb0 100644 --- a/GQ_URP/GQ/Assets/script/点击/ClickEvent.cs +++ b/GQ_URP/GQ/Assets/script/点击/ClickEvent.cs @@ -93,7 +93,7 @@ public class ClickEvent : MonoBehaviour Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit/* = new RaycastHit()*/; - + if (/*GameManager.Inst.magnifyState && */Menu.M__ != CabinetUIManager.Instance.current_menu && !DOTween.IsTweening(ExtendedFlycam.Inst.gameObject)) { if (Physics.Raycast(ray, out hit, 100, 1 << 14 | 1 << 6 | 1 << 8 | 1 << 13 | 1 << 11))//-6 -14 -15 @@ -118,7 +118,7 @@ public class ClickEvent : MonoBehaviour } //else if (GameManager.Inst.FindParent(hit.collider.gameObject, GameManager.Inst.IsDesiredParent) != GameManager.Inst.nowCabine) // return; - else if (hit.collider.gameObject == gameObject && (gameObject.layer == 8 || gameObject.layer == 6)) + else if (hit.collider.gameObject == gameObject && (gameObject.layer == 8 || gameObject.layer == 6 || gameObject.layer == 13)) { var d = gameObject.GetComponent(); if (d) diff --git a/GQ_URP/GQ/Assets/script/画线/CreateLine.cs b/GQ_URP/GQ/Assets/script/画线/CreateLine.cs index d60d57573..e691bbe05 100644 --- a/GQ_URP/GQ/Assets/script/画线/CreateLine.cs +++ b/GQ_URP/GQ/Assets/script/画线/CreateLine.cs @@ -38,7 +38,7 @@ public class CreateLine : CabinetUIBase [HideInInspector] public List vectors_tall = new List(); public float lineWidth = 0.1f; // 线的粗细 - public Color lineColor = Color.white; // 线的颜色 + [HideInInspector] public Color lineColor = Color.white; // 线的颜色 private LineRenderer lineRenderer; // LineRenderer 组件 @@ -93,7 +93,8 @@ public class CreateLine : CabinetUIBase //lineRenderer.material = new Material(Shader.Find("Sprites/Default")); lineRenderer.material = GameObject.Instantiate(Resources.Load("emission")); - lineRenderer.material.color = color; + //lineRenderer.material.color = color; + lineRenderer.material.color = lineColor; lineRenderer.startWidth = lineWidth; lineRenderer.endWidth = lineWidth; lineRenderer.startColor = lineColor; diff --git a/GQ_URP/GQ/Assets/script/画线/LineInfor.cs b/GQ_URP/GQ/Assets/script/画线/LineInfor.cs index b3c9be1a2..2efabcf43 100644 --- a/GQ_URP/GQ/Assets/script/画线/LineInfor.cs +++ b/GQ_URP/GQ/Assets/script/画线/LineInfor.cs @@ -27,7 +27,7 @@ public class LineInfor : MonoBehaviour private void Awake() { - + lineRenderer = GetComponent(); material = lineRenderer.materials[0]; material_clon = GameObject.Instantiate(Resources.Load("emission")); @@ -131,18 +131,22 @@ public class LineInfor : MonoBehaviour public void setcolor() { // 设置Albedo颜色 - material.SetColor("_Color", newColor); + //material.SetColor("_Color", newColor); + material.SetColor("_Color", Color.white); // 设置Emission颜色 + material.EnableKeyword("_EMISSION");// 启用发光 material.SetColor("_EmissionColor", newColor); } public void setcolor(Color color) { // 设置Albedo颜色 - material.SetColor("_Color", color); + //material.SetColor("_Color", color); + material.SetColor("_Color", Color.white); // 设置Emission颜色 + material.EnableKeyword("_EMISSION");// 启用发光 material.SetColor("_EmissionColor", color); } diff --git a/GQ_URP/GQ/Assets/script/相机/ExtendedFlycam.cs b/GQ_URP/GQ/Assets/script/相机/ExtendedFlycam.cs index c608ea025..85ad15229 100644 --- a/GQ_URP/GQ/Assets/script/相机/ExtendedFlycam.cs +++ b/GQ_URP/GQ/Assets/script/相机/ExtendedFlycam.cs @@ -68,7 +68,7 @@ public class ExtendedFlycam : MonoBehaviour private void Awake() { - + _inst = this; previousMousePosition = Input.mousePosition; BoolMonitor.ValueChanged += BoolMonitor_ValueChanged; @@ -432,24 +432,23 @@ public class ExtendedFlycam : MonoBehaviour reminder((x) => { isgo = x; + if (!isgo || SecondConfirmPanel.Instance.transform.GetChild(0).gameObject.activeInHierarchy) + return; + //if (Vector3.Distance(Camera.main.transform.position, new Vector3(5.47000027f, 19.2399025f, -4.70852375f)) <= 1f) + // return; + if (index == 0) + { + QuanJing(); + } + else if (index == 99) + { + return; + } + else + { + NiaoKan(); + } }); - - if (!isgo || SecondConfirmPanel.Instance.transform.GetChild(0).gameObject.activeInHierarchy) - return; - //if (Vector3.Distance(Camera.main.transform.position, new Vector3(5.47000027f, 19.2399025f, -4.70852375f)) <= 1f) - // return; - if (index == 0) - { - QuanJing(); - } - else if (index == 99) - { - return; - } - else - { - NiaoKan(); - } } /// @@ -613,15 +612,31 @@ public class ExtendedFlycam : MonoBehaviour if (delete) { var d = PatternChoose.Inst.transform.Find("设备类").GetComponent(); - for (int z = 0; z < CabinetUIManager.Instance.Stagin.childCount; z++) + d.mybody.ids.Clear(); + for (int z = CabinetUIManager.Instance.Stagin.childCount - 1; z >= 0; z--) { - d.mybody.ids.Add(CabinetUIManager.Instance.Stagin.GetChild(z).GetComponent().deviceList.id); + var s = CabinetUIManager.Instance.Stagin.GetChild(z).GetComponent().deviceList.id; + if (!string.IsNullOrEmpty(s)) d.mybody.ids.Add(s); } StartCoroutine(d.SaveJsonCoroutine((x) => { - for (int z = CabinetUIManager.Instance.Stagin.childCount - 1; z >= 0; z--) + if (x) { - DestroyImmediate(CabinetUIManager.Instance.Stagin.GetChild(z).gameObject); + for (int z = CabinetUIManager.Instance.Stagin.childCount - 1; z >= 0; z--) + { + DestroyImmediate(CabinetUIManager.Instance.Stagin.GetChild(z).gameObject); + } + var content = GameManager.Inst.stagingPanel.transform.Find("Viewport/Content"); + for (int i = content.childCount - 1; i >= 0; i--) + { + DestroyImmediate(content.GetChild(i).gameObject); + } + GameManager.Inst.stagingPanel.SetActive(false); + callback.Invoke(true); + } + else + { + callback.Invoke(false); } })); } @@ -632,5 +647,9 @@ public class ExtendedFlycam : MonoBehaviour }, "是否删除暂存箱子中所有设备"); } + else + { + callback.Invoke(true); + } } } \ No newline at end of file diff --git a/GQ_URP/GQ/Assets/script/筛选/CalendarDetails.cs b/GQ_URP/GQ/Assets/script/筛选/CalendarDetails.cs index dbc377551..ba87a2da5 100644 --- a/GQ_URP/GQ/Assets/script/筛选/CalendarDetails.cs +++ b/GQ_URP/GQ/Assets/script/筛选/CalendarDetails.cs @@ -36,6 +36,7 @@ public class CalendarDetails : MonoBehaviour { //scrollView.SetActive(true); img_bg.gameObject.SetActive(false); + WebInteraction.Inst.setlittleXunJian(); }); img_bt.onClick.AddListener(() => { diff --git a/GQ_URP/GQ/Assets/tooltest.cs b/GQ_URP/GQ/Assets/tooltest.cs new file mode 100644 index 000000000..38dc96694 --- /dev/null +++ b/GQ_URP/GQ/Assets/tooltest.cs @@ -0,0 +1,114 @@ +using System.Collections; +using System.Collections.Generic; +using Unity.VisualScripting; +using UnityEngine; + +public class tooltest : MonoBehaviour +{ + + public Transform a; + public Transform b; + public List A; + public List B; + + + + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } + + [ContextMenu("ճ5ű豸")] + public void Replace5() + { + var b1 = b.AddComponent(); + var b2 = b.AddComponent(); + var b3 = b.AddComponent(); + var b4 = b.AddComponent(); + var b5 = b.AddComponent(); + + UnityEditorInternal.ComponentUtility.CopyComponent(a.GetComponent()); + UnityEditorInternal.ComponentUtility.PasteComponentValues(b1); + + UnityEditorInternal.ComponentUtility.CopyComponent(a.GetComponent()); + UnityEditorInternal.ComponentUtility.PasteComponentValues(b2); + + UnityEditorInternal.ComponentUtility.CopyComponent(a.GetComponent()); + UnityEditorInternal.ComponentUtility.PasteComponentValues(b3); + + UnityEditorInternal.ComponentUtility.CopyComponent(a.GetComponent()); + UnityEditorInternal.ComponentUtility.PasteComponentValues(b4); + + UnityEditorInternal.ComponentUtility.CopyComponent(a.GetComponent()); + UnityEditorInternal.ComponentUtility.PasteComponentValues(b5); + + if (!b.GetComponent()) b.AddComponent(); + } + + [ContextMenu("-----------------------------------------------------------------")] + [ContextMenu("ճ4ű忨")] + public void Replace4() + { + for (int i = 0; i < A.Count; i++) + { + var b1 = B[i].AddComponent(); + //var b2 = B.AddComponent(); + var b3 = B[i].AddComponent(); + var b4 = B[i].AddComponent(); + //var b5 = B.AddComponent(); + var b6 = B[i].AddComponent(); + + UnityEditorInternal.ComponentUtility.CopyComponent(A[i].GetComponent()); + UnityEditorInternal.ComponentUtility.PasteComponentValues(b1); + + //UnityEditorInternal.ComponentUtility.CopyComponent(A.GetComponent()); + //UnityEditorInternal.ComponentUtility.PasteComponentValues(b2); + + UnityEditorInternal.ComponentUtility.CopyComponent(A[i].GetComponent()); + UnityEditorInternal.ComponentUtility.PasteComponentValues(b3); + + UnityEditorInternal.ComponentUtility.CopyComponent(A[i].GetComponent()); + UnityEditorInternal.ComponentUtility.PasteComponentValues(b4); + + //UnityEditorInternal.ComponentUtility.CopyComponent(A.GetComponent()); + //UnityEditorInternal.ComponentUtility.PasteComponentValues(b5); + + UnityEditorInternal.ComponentUtility.CopyComponent(A[i].GetComponent()); + UnityEditorInternal.ComponentUtility.PasteComponentValues(b6); + + if (!B[i].GetComponent()) B[i].AddComponent(); + } + } + + [ContextMenu("-----------------------------------------------------------------")] + [ContextMenu("ճ2ű˿ڣ")] + public void Replace2() + { + for (int i = 0; i < A.Count; i++) + { + PortQuery b1 = B[i].AddComponent(); + //var b2= B[i].AddComponent<> + UnityEditorInternal.ComponentUtility.CopyComponent(A[i].GetComponent()); + UnityEditorInternal.ComponentUtility.PasteComponentValues(b1); + B[i].position = A[i].position; + B[i].gameObject.layer = 11; + B[i].GetComponent().portList.portPosition = (i + 1).ToString(); + } + } + + [ContextMenu("˿λ")] + public void Replace2_() + { + for (int i = 0; i < B.Count; i++) + { + var b1 = B[i].GetComponent(); + b1.portList.portPosition = (i + 1).ToString(); + } + } +} diff --git a/GQ_URP/GQ/Assets/tooltest.cs.meta b/GQ_URP/GQ/Assets/tooltest.cs.meta new file mode 100644 index 000000000..108cdc991 --- /dev/null +++ b/GQ_URP/GQ/Assets/tooltest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08598a3519fbad24195f9a93c4b44600 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/GQ_URP/GQ/AutoScaleUI.csproj b/GQ_URP/GQ/AutoScaleUI.csproj new file mode 100644 index 000000000..de155187d --- /dev/null +++ b/GQ_URP/GQ/AutoScaleUI.csproj @@ -0,0 +1,783 @@ + + + + 9.0 + + + Debug + AnyCPU + 10.0.20506 + 2.0 + + {C8868165-0FE8-F0C5-DFFE-D3898177F240} + Library + Properties + AutoScaleUI + v4.7.1 + 512 + . + + + true + full + false + Temp\Bin\Debug\ + UNITY_2021_3_2;UNITY_2021_3;UNITY_2021;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_INCLUDE_TESTS;USE_SEARCH_ENGINE_API;USE_SEARCH_TABLE;USE_SEARCH_MODULE;USE_PROPERTY_DATABASE;USE_SEARCH_EXTENSION_API;SCENE_TEMPLATE_MODULE;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_UNET;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_ENGINE_CODE_STRIPPING;ENABLE_MANAGED_UNITYTLS;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;PLATFORM_WEBGL;TEXTCORE_1_0_OR_NEWER;UNITY_WEBGL;UNITY_WEBGL_API;UNITY_DISABLE_WEB_VERIFICATION;UNITY_GFX_USE_PLATFORM_VSYNC;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_SPATIALTRACKING;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_IG;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;UNITY_POST_PROCESSING_STACK_V2;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER + prompt + 4 + 0169 + False + + + pdbonly + true + Temp\bin\Release\ + prompt + 4 + 0169 + False + + + true + true + false + false + false + + + {E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Package + 2.0.14 + Game:1 + WebGL:20 + 2021.3.2f1c1 + + + + + + + + + + + + + + + + + + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsNativeModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UNETModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\PlaybackEngines\WebGLSupport\Managed\UnityEngine.WebGLModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PackageManagerUIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIServiceModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEditor.Graphs.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\PlaybackEngines\WebGLSupport\UnityEditor.WebGL.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\UnityEditor.WindowsStandalone.Extensions.dll + + + Assets\Adam\Plugins\Mono.Data.Sqlite.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\Unity.Plastic.Newtonsoft.Json.dll + + + Assets\Demigiant\DemiLib\Core\DemiLib.dll + + + Assets\Adam\Plugins\Excel.dll + + + Assets\Adam\Plugins\I18N.dll + + + Assets\Adam\Plugins\Interop.SpeechLib.dll + + + Assets\Adam\Plugins\I18N.West.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\Unity.Plastic.Antlr3.Runtime.dll + + + Library\PackageCache\com.unity.visualscripting@1.7.6\Editor\VisualScripting.Core\Dependencies\YamlDotNet\Unity.VisualScripting.YamlDotNet.dll + + + Assets\Demigiant\DOTweenPro\Editor\DOTweenProEditor.dll + + + Assets\Demigiant\DOTween\Editor\DOTweenEditor.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.Unsafe.dll + + + Assets\Demigiant\DemiLib\Core\Editor\DemiEditor.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.Mdb.dll + + + Library\PackageCache\com.unity.visualscripting@1.7.6\Editor\VisualScripting.Core\Dependencies\DotNetZip\Unity.VisualScripting.IonicZip.dll + + + Assets\Adam\Plugins\ICSharpCode.SharpZipLib.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.Pdb.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\log4netPlastic.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.Rocks.dll + + + Assets\Demigiant\DOTween\DOTween.dll + + + Assets\Plugins\LitJson.dll + + + Library\PackageCache\com.unity.visualscripting@1.7.6\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll + + + Assets\Plugins\GQ.dll + + + Library\PackageCache\com.unity.nuget.newtonsoft-json@3.0.2\Runtime\Newtonsoft.Json.dll + + + Assets\Adam\Plugins\I18N.CJK.dll + + + Assets\Demigiant\DOTweenPro\DOTweenPro.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\unityplastic.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll + + + Library\ScriptAssemblies\UnityEditor.UI.dll + + + Library\ScriptAssemblies\UnityEngine.UI.dll + + + + + + + + diff --git a/GQ_URP/GQ/BestHTTP.csproj b/GQ_URP/GQ/BestHTTP.csproj new file mode 100644 index 000000000..6f0e8bd8b --- /dev/null +++ b/GQ_URP/GQ/BestHTTP.csproj @@ -0,0 +1,2779 @@ + + + + 9.0 + + + Debug + AnyCPU + 10.0.20506 + 2.0 + + {D4041D4A-FD19-A239-197C-B724F9976EA9} + Library + Properties + BestHTTP + v4.7.1 + 512 + . + + + true + full + false + Temp\Bin\Debug\ + UNITY_2021_3_2;UNITY_2021_3;UNITY_2021;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_INCLUDE_TESTS;USE_SEARCH_ENGINE_API;USE_SEARCH_TABLE;USE_SEARCH_MODULE;USE_PROPERTY_DATABASE;USE_SEARCH_EXTENSION_API;SCENE_TEMPLATE_MODULE;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_UNET;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_ENGINE_CODE_STRIPPING;ENABLE_MANAGED_UNITYTLS;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;PLATFORM_WEBGL;TEXTCORE_1_0_OR_NEWER;UNITY_WEBGL;UNITY_WEBGL_API;UNITY_DISABLE_WEB_VERIFICATION;UNITY_GFX_USE_PLATFORM_VSYNC;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_SPATIALTRACKING;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_IG;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;UNITY_POST_PROCESSING_STACK_V2;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER + prompt + 4 + 0169 + True + + + pdbonly + true + Temp\bin\Release\ + prompt + 4 + 0169 + True + + + true + true + false + false + false + + + {E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Package + 2.0.14 + Game:1 + WebGL:20 + 2021.3.2f1c1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsNativeModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UNETModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\PlaybackEngines\WebGLSupport\Managed\UnityEngine.WebGLModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PackageManagerUIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIServiceModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEditor.Graphs.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\PlaybackEngines\WebGLSupport\UnityEditor.WebGL.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\UnityEditor.WindowsStandalone.Extensions.dll + + + Assets\Adam\Plugins\Mono.Data.Sqlite.dll + + + Assets\Adam\Plugins\I18N.dll + + + Assets\Adam\Plugins\Interop.SpeechLib.dll + + + Assets\Demigiant\DemiLib\Core\Editor\DemiEditor.dll + + + Library\PackageCache\com.unity.visualscripting@1.7.6\Editor\VisualScripting.Core\Dependencies\DotNetZip\Unity.VisualScripting.IonicZip.dll + + + Assets\Adam\Plugins\ICSharpCode.SharpZipLib.dll + + + Assets\Adam\Plugins\I18N.West.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.Pdb.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\log4netPlastic.dll + + + Assets\Demigiant\DOTween\DOTween.dll + + + Assets\Plugins\GQ.dll + + + Library\PackageCache\com.unity.nuget.newtonsoft-json@3.0.2\Runtime\Newtonsoft.Json.dll + + + Assets\Demigiant\DOTweenPro\DOTweenPro.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\Unity.Plastic.Newtonsoft.Json.dll + + + Assets\Demigiant\DemiLib\Core\DemiLib.dll + + + Assets\Adam\Plugins\Excel.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\Unity.Plastic.Antlr3.Runtime.dll + + + Library\PackageCache\com.unity.visualscripting@1.7.6\Editor\VisualScripting.Core\Dependencies\YamlDotNet\Unity.VisualScripting.YamlDotNet.dll + + + Assets\Demigiant\DOTweenPro\Editor\DOTweenProEditor.dll + + + Assets\Demigiant\DOTween\Editor\DOTweenEditor.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.Unsafe.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.Mdb.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.Rocks.dll + + + Assets\Plugins\LitJson.dll + + + Library\PackageCache\com.unity.visualscripting@1.7.6\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll + + + Assets\Adam\Plugins\I18N.CJK.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\unityplastic.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll + + + Library\ScriptAssemblies\UnityEditor.UI.dll + + + Library\ScriptAssemblies\UnityEngine.UI.dll + + + + + + + + diff --git a/GQ_URP/GQ/CableUI.csproj b/GQ_URP/GQ/CableUI.csproj new file mode 100644 index 000000000..5ee2078e9 --- /dev/null +++ b/GQ_URP/GQ/CableUI.csproj @@ -0,0 +1,783 @@ + + + + 9.0 + + + Debug + AnyCPU + 10.0.20506 + 2.0 + + {A0B2F7F2-4E91-B8CD-DAB6-5D23093BE828} + Library + Properties + CableUI + v4.7.1 + 512 + . + + + true + full + false + Temp\Bin\Debug\ + UNITY_2021_3_2;UNITY_2021_3;UNITY_2021;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_INCLUDE_TESTS;USE_SEARCH_ENGINE_API;USE_SEARCH_TABLE;USE_SEARCH_MODULE;USE_PROPERTY_DATABASE;USE_SEARCH_EXTENSION_API;SCENE_TEMPLATE_MODULE;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_UNET;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_ENGINE_CODE_STRIPPING;ENABLE_MANAGED_UNITYTLS;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;PLATFORM_WEBGL;TEXTCORE_1_0_OR_NEWER;UNITY_WEBGL;UNITY_WEBGL_API;UNITY_DISABLE_WEB_VERIFICATION;UNITY_GFX_USE_PLATFORM_VSYNC;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_SPATIALTRACKING;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_IG;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;UNITY_POST_PROCESSING_STACK_V2;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER + prompt + 4 + 0169 + True + + + pdbonly + true + Temp\bin\Release\ + prompt + 4 + 0169 + True + + + true + true + false + false + false + + + {E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Package + 2.0.14 + Game:1 + WebGL:20 + 2021.3.2f1c1 + + + + + + + + + + + + + + + + + + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsNativeModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UNETModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\PlaybackEngines\WebGLSupport\Managed\UnityEngine.WebGLModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PackageManagerUIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIServiceModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEditor.Graphs.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\PlaybackEngines\WebGLSupport\UnityEditor.WebGL.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\UnityEditor.WindowsStandalone.Extensions.dll + + + Assets\Adam\Plugins\Mono.Data.Sqlite.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\Unity.Plastic.Newtonsoft.Json.dll + + + Assets\Demigiant\DemiLib\Core\DemiLib.dll + + + Assets\Adam\Plugins\Excel.dll + + + Assets\Adam\Plugins\I18N.dll + + + Assets\Adam\Plugins\Interop.SpeechLib.dll + + + Assets\Adam\Plugins\I18N.West.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\Unity.Plastic.Antlr3.Runtime.dll + + + Library\PackageCache\com.unity.visualscripting@1.7.6\Editor\VisualScripting.Core\Dependencies\YamlDotNet\Unity.VisualScripting.YamlDotNet.dll + + + Assets\Demigiant\DOTweenPro\Editor\DOTweenProEditor.dll + + + Assets\Demigiant\DOTween\Editor\DOTweenEditor.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.Unsafe.dll + + + Assets\Demigiant\DemiLib\Core\Editor\DemiEditor.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.Mdb.dll + + + Library\PackageCache\com.unity.visualscripting@1.7.6\Editor\VisualScripting.Core\Dependencies\DotNetZip\Unity.VisualScripting.IonicZip.dll + + + Assets\Adam\Plugins\ICSharpCode.SharpZipLib.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.Pdb.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\log4netPlastic.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.Rocks.dll + + + Assets\Demigiant\DOTween\DOTween.dll + + + Assets\Plugins\LitJson.dll + + + Library\PackageCache\com.unity.visualscripting@1.7.6\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll + + + Assets\Plugins\GQ.dll + + + Library\PackageCache\com.unity.nuget.newtonsoft-json@3.0.2\Runtime\Newtonsoft.Json.dll + + + Assets\Adam\Plugins\I18N.CJK.dll + + + Assets\Demigiant\DOTweenPro\DOTweenPro.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\unityplastic.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll + + + Library\ScriptAssemblies\UnityEditor.UI.dll + + + Library\ScriptAssemblies\UnityEngine.UI.dll + + + + + + + + diff --git a/GQ_URP/GQ/GQ.csproj b/GQ_URP/GQ/GQ.csproj new file mode 100644 index 000000000..b3dc5e942 --- /dev/null +++ b/GQ_URP/GQ/GQ.csproj @@ -0,0 +1,851 @@ + + + + 9.0 + + + Debug + AnyCPU + 10.0.20506 + 2.0 + + {E7DD50E9-F284-FDD2-44E8-33C2BB492E05} + Library + Properties + GQ + v4.7.1 + 512 + . + + + true + full + false + Temp\Bin\Debug\ + UNITY_2021_3_2;UNITY_2021_3;UNITY_2021;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_INCLUDE_TESTS;USE_SEARCH_ENGINE_API;USE_SEARCH_TABLE;USE_SEARCH_MODULE;USE_PROPERTY_DATABASE;USE_SEARCH_EXTENSION_API;SCENE_TEMPLATE_MODULE;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_UNET;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_ENGINE_CODE_STRIPPING;ENABLE_MANAGED_UNITYTLS;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;PLATFORM_WEBGL;TEXTCORE_1_0_OR_NEWER;UNITY_WEBGL;UNITY_WEBGL_API;UNITY_DISABLE_WEB_VERIFICATION;UNITY_GFX_USE_PLATFORM_VSYNC;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_SPATIALTRACKING;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_IG;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;UNITY_POST_PROCESSING_STACK_V2;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER + prompt + 4 + 0169 + False + + + pdbonly + true + Temp\bin\Release\ + prompt + 4 + 0169 + False + + + true + true + false + false + false + + + {E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Package + 2.0.14 + Game:1 + WebGL:20 + 2021.3.2f1c1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsNativeModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UNETModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\PlaybackEngines\WebGLSupport\Managed\UnityEngine.WebGLModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PackageManagerUIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIServiceModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEditor.Graphs.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\PlaybackEngines\WebGLSupport\UnityEditor.WebGL.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\UnityEditor.WindowsStandalone.Extensions.dll + + + Assets\Adam\Plugins\Mono.Data.Sqlite.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\Unity.Plastic.Newtonsoft.Json.dll + + + Assets\Demigiant\DemiLib\Core\DemiLib.dll + + + Assets\Adam\Plugins\Excel.dll + + + Assets\Adam\Plugins\I18N.dll + + + Assets\Adam\Plugins\Interop.SpeechLib.dll + + + Assets\Adam\Plugins\I18N.West.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\Unity.Plastic.Antlr3.Runtime.dll + + + Library\PackageCache\com.unity.visualscripting@1.7.6\Editor\VisualScripting.Core\Dependencies\YamlDotNet\Unity.VisualScripting.YamlDotNet.dll + + + Assets\Demigiant\DOTweenPro\Editor\DOTweenProEditor.dll + + + Assets\Demigiant\DOTween\Editor\DOTweenEditor.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.Unsafe.dll + + + Assets\Demigiant\DemiLib\Core\Editor\DemiEditor.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.Mdb.dll + + + Library\PackageCache\com.unity.visualscripting@1.7.6\Editor\VisualScripting.Core\Dependencies\DotNetZip\Unity.VisualScripting.IonicZip.dll + + + Assets\Adam\Plugins\ICSharpCode.SharpZipLib.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.Pdb.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\log4netPlastic.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.Rocks.dll + + + Assets\Demigiant\DOTween\DOTween.dll + + + Assets\Plugins\LitJson.dll + + + Library\PackageCache\com.unity.visualscripting@1.7.6\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll + + + Assets\Plugins\GQ.dll + + + Library\PackageCache\com.unity.nuget.newtonsoft-json@3.0.2\Runtime\Newtonsoft.Json.dll + + + Assets\Adam\Plugins\I18N.CJK.dll + + + Assets\Demigiant\DOTweenPro\DOTweenPro.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\unityplastic.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll + + + Library\ScriptAssemblies\UnityEditor.UI.dll + + + Library\ScriptAssemblies\UnityEngine.UI.dll + + + + + + + + diff --git a/GQ_URP/GQ/NewAssembly.csproj b/GQ_URP/GQ/NewAssembly.csproj new file mode 100644 index 000000000..874d927d3 --- /dev/null +++ b/GQ_URP/GQ/NewAssembly.csproj @@ -0,0 +1,851 @@ + + + + 9.0 + + + Debug + AnyCPU + 10.0.20506 + 2.0 + + {6BCA9DFF-F9C6-A2D3-AB93-F4D0721E4003} + Library + Properties + NewAssembly + v4.7.1 + 512 + . + + + true + full + false + Temp\Bin\Debug\ + UNITY_2021_3_2;UNITY_2021_3;UNITY_2021;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_INCLUDE_TESTS;USE_SEARCH_ENGINE_API;USE_SEARCH_TABLE;USE_SEARCH_MODULE;USE_PROPERTY_DATABASE;USE_SEARCH_EXTENSION_API;SCENE_TEMPLATE_MODULE;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_UNET;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_ENGINE_CODE_STRIPPING;ENABLE_MANAGED_UNITYTLS;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;PLATFORM_WEBGL;TEXTCORE_1_0_OR_NEWER;UNITY_WEBGL;UNITY_WEBGL_API;UNITY_DISABLE_WEB_VERIFICATION;UNITY_GFX_USE_PLATFORM_VSYNC;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_SPATIALTRACKING;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_IG;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;UNITY_POST_PROCESSING_STACK_V2;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER + prompt + 4 + 0169 + False + + + pdbonly + true + Temp\bin\Release\ + prompt + 4 + 0169 + False + + + true + true + false + false + false + + + {E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Package + 2.0.14 + Game:1 + WebGL:20 + 2021.3.2f1c1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsNativeModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UNETModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\PlaybackEngines\WebGLSupport\Managed\UnityEngine.WebGLModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PackageManagerUIModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIServiceModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\Managed\UnityEditor.Graphs.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\PlaybackEngines\WebGLSupport\UnityEditor.WebGL.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\UnityEditor.WindowsStandalone.Extensions.dll + + + Assets\Adam\Plugins\Mono.Data.Sqlite.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\Unity.Plastic.Newtonsoft.Json.dll + + + Assets\Demigiant\DemiLib\Core\DemiLib.dll + + + Assets\Adam\Plugins\Excel.dll + + + Assets\Adam\Plugins\I18N.dll + + + Assets\Adam\Plugins\Interop.SpeechLib.dll + + + Assets\Adam\Plugins\I18N.West.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\Unity.Plastic.Antlr3.Runtime.dll + + + Library\PackageCache\com.unity.visualscripting@1.7.6\Editor\VisualScripting.Core\Dependencies\YamlDotNet\Unity.VisualScripting.YamlDotNet.dll + + + Assets\Demigiant\DOTweenPro\Editor\DOTweenProEditor.dll + + + Assets\Demigiant\DOTween\Editor\DOTweenEditor.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.Unsafe.dll + + + Assets\Demigiant\DemiLib\Core\Editor\DemiEditor.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.Mdb.dll + + + Library\PackageCache\com.unity.visualscripting@1.7.6\Editor\VisualScripting.Core\Dependencies\DotNetZip\Unity.VisualScripting.IonicZip.dll + + + Assets\Adam\Plugins\ICSharpCode.SharpZipLib.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.Pdb.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\log4netPlastic.dll + + + Library\PackageCache\com.unity.burst@1.6.5\Unity.Burst.CodeGen\Unity.Burst.Cecil.Rocks.dll + + + Assets\Demigiant\DOTween\DOTween.dll + + + Assets\Plugins\LitJson.dll + + + Library\PackageCache\com.unity.visualscripting@1.7.6\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll + + + Assets\Plugins\GQ.dll + + + Library\PackageCache\com.unity.nuget.newtonsoft-json@3.0.2\Runtime\Newtonsoft.Json.dll + + + Assets\Adam\Plugins\I18N.CJK.dll + + + Assets\Demigiant\DOTweenPro\DOTweenPro.dll + + + Library\PackageCache\com.unity.collab-proxy@1.15.16\Lib\Editor\PlasticSCM\unityplastic.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll + + + D:\unity\2021.3.2f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll + + + Library\ScriptAssemblies\UnityEditor.UI.dll + + + Library\ScriptAssemblies\UnityEngine.UI.dll + + + + + + + + diff --git a/GQ_URP/GQ/Packages/manifest.json b/GQ_URP/GQ/Packages/manifest.json index 2b927a14b..938d18d60 100644 --- a/GQ_URP/GQ/Packages/manifest.json +++ b/GQ_URP/GQ/Packages/manifest.json @@ -43,4 +43,4 @@ "com.unity.modules.wind": "1.0.0", "com.unity.modules.xr": "1.0.0" } -} \ No newline at end of file +}